@wavemaker/app-ng-runtime 11.6.0-next.26299 → 11.6.0-next.26302
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.
- app-ng-runtime/components/data/table/bundles/index.umd.js +6 -2
- app-ng-runtime/components/data/table/esm2020/table.component.mjs +7 -3
- app-ng-runtime/components/data/table/fesm2015/index.mjs +6 -2
- app-ng-runtime/components/data/table/fesm2015/index.mjs.map +1 -1
- app-ng-runtime/components/data/table/fesm2020/index.mjs +6 -2
- app-ng-runtime/components/data/table/fesm2020/index.mjs.map +1 -1
- app-ng-runtime/components/data/table/table.component.d.ts +2 -1
- app-ng-runtime/package.json +1 -1
- app-ng-runtime/scripts/datatable/datatable.js +2 -2
|
@@ -286,6 +286,7 @@ export class TableComponent extends StylableComponent {
|
|
|
286
286
|
this.items = [];
|
|
287
287
|
this.rowActions = [];
|
|
288
288
|
this.shownavigation = false;
|
|
289
|
+
this.showFirstRow = false;
|
|
289
290
|
this.documentClickBind = noop;
|
|
290
291
|
this.prevFilterExpression = [];
|
|
291
292
|
this.fieldDefs = [];
|
|
@@ -452,7 +453,7 @@ export class TableComponent extends StylableComponent {
|
|
|
452
453
|
});
|
|
453
454
|
},
|
|
454
455
|
// assigns the items on capture phase of the click handler.
|
|
455
|
-
assignSelectedItems: (row, e,
|
|
456
|
+
assignSelectedItems: (row, e, rowInfo) => {
|
|
456
457
|
this.ngZone.run(() => {
|
|
457
458
|
/*
|
|
458
459
|
* in case of single select, update the items with out changing the reference.
|
|
@@ -460,8 +461,11 @@ export class TableComponent extends StylableComponent {
|
|
|
460
461
|
*/
|
|
461
462
|
if (this.multiselect) {
|
|
462
463
|
//Fix for [WMS-25110]: Add row to items list only if the row is selected
|
|
463
|
-
if (_.findIndex(this.items, row) === -1 && (
|
|
464
|
+
if (_.findIndex(this.items, row) === -1 && (rowInfo?._selected === undefined || rowInfo?._selected == true || (this.gridfirstrowselect && rowInfo?.rowId == 0 && !this.showFirstRow))) {
|
|
464
465
|
this.items.push(row);
|
|
466
|
+
if (rowInfo?.rowId == 0) {
|
|
467
|
+
this.showFirstRow = true;
|
|
468
|
+
}
|
|
465
469
|
}
|
|
466
470
|
}
|
|
467
471
|
else {
|
|
@@ -2182,4 +2186,4 @@ TableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TableCompone
|
|
|
2182
2186
|
type: HostListener,
|
|
2183
2187
|
args: ['keypress', ['$event']]
|
|
2184
2188
|
}] }); })();
|
|
2185
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2RhdGEvdGFibGUvc3JjL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3RhYmxlL3NyYy90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQWEsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVOLE9BQU8sRUFBd0IsV0FBVyxFQUFhLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakcsT0FBTyxFQUFDLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUV2RSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFDSCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFFBQVEsRUFDUixNQUFNLEVBQ04sR0FBRyxFQUNILFlBQVksRUFDWixVQUFVLEVBQ1YsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixZQUFZLEVBRVosaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsU0FBUyxFQUNULDJCQUEyQixFQUMzQixXQUFXLEVBQ1gsZUFBZSxFQUNsQixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxF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Vyx5QkFBeUI7a0JBQXZHLFNBQVM7bUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUVSLGVBQWU7a0JBQW5GLFNBQVM7bUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFrMUI3QixVQUFVO2tCQUEvQyxZQUFZO21CQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEF0dHJpYnV0ZSwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIENvbnRlbnRDaGlsZCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbmplY3RvciwgTmdab25lLCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBRdWVyeUxpc3QsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Vmlld3BvcnQsIFN0YXRlUGVyc2lzdGVuY2UsIFBhZ2luYXRpb25TZXJ2aWNlfSBmcm9tICdAd20vY29yZSc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgICAkYXBwRGlnZXN0LFxuICAgICRwYXJzZUV2ZW50LFxuICAgICR1bndhdGNoLFxuICAgICR3YXRjaCxcbiAgICBBcHAsXG4gICAgY2xvc2VQb3BvdmVyLFxuICAgIERhdGFTb3VyY2UsXG4gICAgZ2V0Q2xvbmVkT2JqZWN0LFxuICAgIGdldERhdGFzb3VyY2VGcm9tRXhwcixcbiAgICBnZXRWYWxpZEpTT04sXG4gICAgSURHZW5lcmF0b3IsXG4gICAgaXNEYXRhU291cmNlRXF1YWwsXG4gICAgaXNEZWZpbmVkLFxuICAgIGlzTW9iaWxlLFxuICAgIHRyaWdnZXJGbixcbiAgICBEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXIsXG4gICAgZXh0ZW5kUHJvdG8sXG4gICAgJGludm9rZVdhdGNoZXJzXG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IEVESVRfTU9ERSwgZ2V0Q29uZGl0aW9uYWxDbGFzc2VzLCBnZXRPcmRlckJ5RXhwciwgZ2V0Um93T3BlcmF0aW9uc0NvbHVtbiwgcHJlcGFyZUZpZWxkRGVmcywgcHJvdmlkZUFzLCBwcm92aWRlQXNXaWRnZXRSZWYsIFN0eWxhYmxlQ29tcG9uZW50LCBzdHlsZXIsIHRyYW5zZm9ybURhdGEsIFRydXN0QXNQaXBlLCBleHRyYWN0RGF0YVNvdXJjZU5hbWUsIERFQk9VTkNFX1RJTUVTLCBOQVZJR0FUSU9OX1RZUEUsIHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzIH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvZGF0YS9wYWdpbmF0aW9uJztcblxuaW1wb3J0IHsgTGlzdENvbXBvbmVudCB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2RhdGEvbGlzdCc7XG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi90YWJsZS5wcm9wcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmRlY2xhcmUgY29uc3QgXywgJDtcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLWdyaWQgYXBwLXBhbmVsIHBhbmVsJztcbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLXRhYmxlJywgaG9zdENsYXNzOiBERUZBVUxUX0NMU307XG5cbmNvbnN0IGV4cG9ydEljb25NYXBwaW5nID0ge1xuICAgIEVYQ0VMOiAnZmEgZmEtZmlsZS1leGNlbC1vJyxcbiAgICBDU1Y6ICdmYSBmYS1maWxlLXRleHQtbydcbn07XG5cbmNvbnN0IFJPV19PUFNfRklFTEQgPSAncm93T3BlcmF0aW9ucyc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuY29uc3QgaXNJbnB1dEJvZHlXcmFwcGVyID0gdGFyZ2V0ID0+IHtcbiAgICBjb25zdCBjbGFzc2VzID0gWycuZHJvcGRvd24tbWVudScsICcudWliLXR5cGVhaGVhZC1tYXRjaCcsICcubW9kYWwtZGlhbG9nJywgJy50b2FzdCddO1xuICAgIGxldCBpc0lucHV0ID0gZmFsc2U7XG4gICAgY2xhc3Nlcy5mb3JFYWNoKGNscyA9PiB7XG4gICAgICAgIGlmICh0YXJnZXQuY2xvc2VzdChjbHMpLmxlbmd0aCkge1xuICAgICAgICAgICAgaXNJbnB1dCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBhdHRycyA9IFsnYnNkYXRlcGlja2VyZGF5ZGVjb3JhdG9yJ107XG4gICAgaWYgKCFpc0lucHV0KSB7XG4gICAgICAgIGF0dHJzLmZvckVhY2goYXR0ciA9PiB7XG4gICAgICAgICAgICBpZiAodGFyZ2V0WzBdLmhhc0F0dHJpYnV0ZShhdHRyKSkge1xuICAgICAgICAgICAgICAgIGlzSW5wdXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpc0lucHV0O1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdbd21UYWJsZV0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBcyhUYWJsZUNvbXBvbmVudCwgTkdfVkFMVUVfQUNDRVNTT1IsIHRydWUpLFxuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoVGFibGVDb21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBleHRlbmRzIFN0eWxhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcbiAgICBAVmlld0NoaWxkKFBhZ2luYXRpb25Db21wb25lbnQsIHtzdGF0aWM6IHRydWV9KSBkYXRhTmF2aWdhdG9yO1xuXG4gICAgQFZpZXdDaGlsZCgnZGF0YWdyaWRFbGVtZW50Jywge3N0YXRpYzogdHJ1ZX0pIHByaXZhdGUgX3RhYmxlRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ3Jvd0FjdGlvblRtcGwnLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHJvd0FjdGlvblRtcGw6IFF1ZXJ5TGlzdDxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ3Jvd0FjdGlvbnNWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcm93QWN0aW9uc1ZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKCdmaWx0ZXJUbXBsJywge2Rlc2NlbmRhbnRzOiB0cnVlfSkgZmlsdGVyVG1wbDogUXVlcnlMaXN0PGFueT47XG4gICAgQFZpZXdDaGlsZCgnbXVsdGlDb2x1bW5GaWx0ZXJWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgZmlsdGVyVmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ2lubGluZVdpZGdldFRtcGwnLCB7ZGVzY2VuZGFudHM6IHRydWV9KSBpbmxpbmVXaWRnZXRUbXBsOiBRdWVyeUxpc3Q8YW55PjtcbiAgICBAVmlld0NoaWxkKCdpbmxpbmVFZGl0VmlldycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGlubGluZUVkaXRWaWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbignaW5saW5lV2lkZ2V0VG1wbE5ldycsIHtkZXNjZW5kYW50czogdHJ1ZX0pIGlubGluZVdpZGdldE5ld1RtcGw6IFF1ZXJ5TGlzdDxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2lubGluZUVkaXROZXdWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgaW5saW5lRWRpdE5ld1ZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKCdjdXN0b21FeHByVG1wbCcsIHtkZXNjZW5kYW50czogdHJ1ZX0pIGN1c3RvbUV4cHJUbXBsOiBRdWVyeUxpc3Q8YW55PjtcbiAgICBAVmlld0NoaWxkKCdjdXN0b21FeHByVmlldycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGN1c3RvbUV4cHJWaWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbigncm93RXhwYW5zaW9uQWN0aW9uVG1wbCcsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgcm93RXhwYW5zaW9uQWN0aW9uVG1wbDogUXVlcnlMaXN0PGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgncm93RXhwYW5zaW9uVG1wbCcpIHJvd0V4cGFuc2lvblRtcGw6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQFZpZXdDaGlsZCgncm93RGV0YWlsVmlldycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHJvd0RldGFpbFZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG4gICAgQFZpZXdDaGlsZCgncm93RXhwYW5zaW9uQWN0aW9uVmlldycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHJvd0V4cGFuc2lvbkFjdGlvblZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdkeW5hbWljVGFibGUnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBkeW5hbWljVGFibGVSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBwcml2YXRlIHJvd0FjdGlvbnNDb21waWxlZFRsOiBhbnkgID0ge307XG4gICAgcHJpdmF0ZSByb3dGaWx0ZXJDb21wbGllZFRsOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIGlubGluZUNvbXBsaWVkVGw6IGFueSA9IHt9O1xuICAgIHByaXZhdGUgaW5saW5lTmV3Q29tcGxpZWRUbDogYW55ID0ge307XG4gICAgcHJpdmF0ZSBjdXN0b21FeHByQ29tcGlsZWRUbDogYW55ID0ge307XG4gICAgcHJpdmF0ZSBjdXN0b21FeHByQ29tcGlsZWRTdW1tYXJ5VGw6IGFueSA9IHt9O1xuICAgIHByaXZhdGUgcm93RGVmSW5zdGFuY2VzID0ge307XG4gICAgcHJpdmF0ZSByb3dEZWZNYXAgPSB7fTtcbiAgICBwcml2YXRlIHJvd0V4cGFuc2lvbkFjdGlvblRsOiBhbnkgPSB7fTtcblxuICAgIGNvbHVtbnMgPSB7fTtcbiAgICBmb3JtZmllbGRzID0ge307XG4gICAgZGF0YWdyaWRFbGVtZW50O1xuICAgIGRhdGFzb3VyY2U7XG4gICAgZWRpdG1vZGU7XG4gICAgZW5hYmxlY29sdW1uc2VsZWN0aW9uO1xuICAgIGVuYWJsZXNvcnQgPSB0cnVlO1xuICAgIGZpbHRlcm1vZGU7XG4gICAgc2VhcmNobGFiZWw7XG4gICAgZm9ybXBvc2l0aW9uO1xuICAgIGdyaWRjbGFzcztcbiAgICBncmlkZmlyc3Ryb3dzZWxlY3Q7XG4gICAgaWNvbmNsYXNzO1xuICAgIG9uZGVtYW5kbWVzc2FnZTtcbiAgICB2aWV3bGVzc21lc3NhZ2U7XG4gICAgc2hvd3ZpZXdsZXNzYnV0dG9uID0gZmFsc2U7XG4gICAgX3RyaWdnZXJlZEJ5VXNlcjtcbiAgICBpc0dyaWRFZGl0TW9kZTtcbiAgICBsb2FkaW5nZGF0YW1zZztcbiAgICBtdWx0aXNlbGVjdDtcbiAgICBuYW1lO1xuICAgIF9pc0RlcGVuZGVudDtcbiAgICBuYXZpZ2F0aW9uO1xuICAgIG5hdmlnYXRpb25TaXplO1xuICAgIG5hdmlnYXRpb25hbGlnbjtcbiAgICBub2RhdGFtZXNzYWdlO1xuICAgIHBhZ2VzaXplO1xuICAgIHByZXZEYXRhO1xuICAgIHByaW1hcnlLZXkgPSBbXTtcbiAgICByYWRpb3NlbGVjdDtcbiAgICByb3djbGFzcztcbiAgICByb3duZ2NsYXNzO1xuICAgIHNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICBzaG93aGVhZGVyO1xuICAgIHNob3dyZWNvcmRjb3VudDtcbiAgICBzaG93cm93aW5kZXg7XG4gICAgc3ViaGVhZGluZztcbiAgICB0aXRsZTtcbiAgICBzaG93bmV3cm93O1xuICAgIGRlbGV0ZW9rdGV4dDtcbiAgICBkZWxldGVjYW5jZWx0ZXh0O1xuICAgIG9uRXJyb3I7XG4gICAgb25Sb3dpbnNlcnQ7XG4gICAgb25Sb3d1cGRhdGU7XG4gICAgb25Sb3dkZWxldGU7XG4gICAgc3RhdGVoYW5kbGVyO1xuICAgIHNlbGVjdGVkSXRlbUNoYW5nZSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgc2VsZWN0ZWRJdGVtQ2hhbmdlJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICBhY3Rpb25zID0gW107XG4gICAgX2FjdGlvbnMgPSB7XG4gICAgICAgICdoZWFkZXInOiBbXSxcbiAgICAgICAgJ2Zvb3Rlcic6IFtdXG4gICAgfTtcbiAgICBleHBvcnRPcHRpb25zID0gW107XG4gICAgZXhwb3J0ZGF0YXNpemU7XG4gICAgZm9ybVdpZGdldHM7XG4gICAgaGVhZGVyQ29uZmlnID0gW107XG4gICAgaXRlbXMgPSBbXTtcbiAgICBuYXZDb250cm9scztcbiAgICByb3dBY3Rpb25zID0gW107XG4gICAgc2VsZWN0ZWRDb2x1bW5zO1xuICAgIHNob3duYXZpZ2F0aW9uID0gZmFsc2U7XG4gICAgZGF0YXNldDtcbiAgICBfbGl2ZVRhYmxlUGFyZW50O1xuICAgIGlzUGFydE9mTGl2ZUdyaWQ7XG4gICAgZ3JpZEVsZW1lbnQ7XG4gICAgaXNOZXdSb3dJbnNlcnRlZDtcbiAgICBpc01vYmlsZTtcbiAgICBpc0xvYWRpbmc7XG4gICAgaXNSb3dEZWxldGVkO1xuICAgIGRvY3VtZW50Q2xpY2tCaW5kID0gbm9vcDtcbiAgICBhY3Rpb25Sb3dJbmRleDtcbiAgICBhY3Rpb25Sb3dQYWdlO1xuICAgIHByZXZGaWx0ZXJFeHByZXNzaW9uOiBhbnkgPSBbXTtcbiAgICBmaWVsZERlZnMgPSBbXTtcbiAgICByb3dEZWY6IGFueSA9IHt9O1xuICAgIHJvd0luc3RhbmNlOiBhbnkgPSB7fTtcblxuICAgIHByaXZhdGUgZnVsbEZpZWxkRGVmcyA9IFtdO1xuICAgIHByaXZhdGUgX19mdWxsRGF0YTtcbiAgICBwcml2YXRlIGRhdGFOYXZpZ2F0b3JXYXRjaGVkO1xuICAgIHByaXZhdGUgbmF2aWdhdG9yUmVzdWx0V2F0Y2g7XG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaDtcbiAgICBwcml2YXRlIGZpbHRlckluZm87XG4gICAgcHJpdmF0ZSBzb3J0SW5mbztcbiAgICBwcml2YXRlIHNlcnZlckRhdGE7XG4gICAgcHJpdmF0ZSBmaWx0ZXJudWxscmVjb3JkcztcbiAgICBwcml2YXRlIHZhcmlhYmxlSW5mbGlnaHQgPSB0cnVlO1xuICAgIHByaXZhdGUgaXNkeW5hbWljdGFibGU7XG4gICAgcHJpdmF0ZSBfZHluYW1pY0NvbnRleHQ7XG4gICAgcHJpdmF0ZSBub09mQ29sdW1ucztcbiAgICBwdWJsaWMgb25EZW1hbmRMb2FkO1xuICAgIHB1YmxpYyBpbmZTY3JvbGw7XG4gICAgcHJpdmF0ZSBpc0RhdGFMb2FkaW5nO1xuICAgIHByaXZhdGUgY3VycmVudFBhZ2U7XG4gICAgcHJpdmF0ZSBhcHBseVByb3BzID0gbmV3IE1hcCgpO1xuXG4gICAgcmVkcmF3ID0gXy5kZWJvdW5jZSh0aGlzLl9yZWRyYXcsIDE1MCk7XG4gICAgZGVib3VuY2VkSGFuZGxlTG9hZGluZyA9IF8uZGVib3VuY2UodGhpcy5oYW5kbGVMb2FkaW5nLCAzNTApO1xuXG4gICAgLy8gRmlsdGVyIGFuZCBTb3J0IE1ldGhvZHNcbiAgICByb3dGaWx0ZXI6IGFueSA9IHt9O1xuICAgIG1hdGNoTW9kZVR5cGVzTWFwO1xuICAgIG1hdGNoTW9kZU1zZ3M7XG4gICAgZW1wdHlNYXRjaE1vZGVzO1xuICAgIF9zZWFyY2hTb3J0SGFuZGxlciA9IG5vb3A7XG4gICAgc2VhcmNoU29ydEhhbmRsZXIgPSAoLi4uYXJncykgPT4geyB0aGlzLl9zZWFyY2hTb3J0SGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTsgfTtcbiAgICBfaXNQYWdlU2VhcmNoO1xuICAgIF9pc0NsaWVudFNlYXJjaDtcbiAgICBjaGVja0ZpbHRlcnNBcHBsaWVkOiBGdW5jdGlvbjtcbiAgICBnZXRTZWFyY2hSZXN1bHQ6IEZ1bmN0aW9uO1xuICAgIGdldFNvcnRSZXN1bHQ6IEZ1bmN0aW9uO1xuICAgIGdldEZpbHRlckZpZWxkczogRnVuY3Rpb247XG4gICAgb25Sb3dGaWx0ZXJDaGFuZ2UgPSBub29wO1xuICAgIG9uRmlsdGVyQ29uZGl0aW9uU2VsZWN0ID0gbm9vcDtcbiAgICBzaG93Q2xlYXJJY29uID0gbm9vcDtcbiAgICBjbGVhclJvd0ZpbHRlciA9IG5vb3A7XG4gICAgYWRqdXN0Q29udGFpbmVyID0gbm9vcDtcbiAgICBnZXROYXZpZ2F0aW9uVGFyZ2V0QnlTb3J0SW5mbzogRnVuY3Rpb247XG4gICAgcmVmcmVzaERhdGE6IEZ1bmN0aW9uO1xuICAgIGNsZWFyRmlsdGVyOiBGdW5jdGlvbjtcblxuICAgIC8vIElubGluZSBFZGl0XG4gICAgbmdmb3JtOiBGb3JtR3JvdXA7XG4gICAgdXBkYXRlVmFyaWFibGU6IEZ1bmN0aW9uO1xuICAgIHVwZGF0ZVJlY29yZDogRnVuY3Rpb247XG4gICAgZGVsZXRlUmVjb3JkOiBGdW5jdGlvbjtcbiAgICBpbnNlcnRSZWNvcmQ6IEZ1bmN0aW9uO1xuICAgIGVkaXRSb3c6IEZ1bmN0aW9uO1xuICAgIGFkZE5ld1JvdzogRnVuY3Rpb247XG4gICAgYWRkUm93OiBGdW5jdGlvbjtcbiAgICBkZWxldGVSb3c6IEZ1bmN0aW9uO1xuICAgIG9uUmVjb3JkRGVsZXRlOiBGdW5jdGlvbjtcbiAgICBpbml0aWF0ZVNlbGVjdEl0ZW06IEZ1bmN0aW9uO1xuICAgIGhpZGVFZGl0Um93OiBGdW5jdGlvbjtcbiAgICBzYXZlUm93OiBGdW5jdGlvbjtcbiAgICBjYW5jZWxSb3c6IEZ1bmN0aW9uO1xuICAgIHByaXZhdGUgX3BhZ2VMb2FkID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBncmlkT3B0aW9ucyA9IHtcbiAgICAgICAgZGF0YTogW10sXG4gICAgICAgIGNvbERlZnM6IFtdLFxuICAgICAgICBzdGFydFJvd0luZGV4OiAxLFxuICAgICAgICBtb2RlOiAnJyxcbiAgICAgICAgc29ydEluZm86IHtcbiAgICAgICAgICAgIGZpZWxkOiAnJyxcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJydcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVybW9kZTogJycsXG4gICAgICAgIHNlYXJjaExhYmVsOiAnJyxcbiAgICAgICAgcm93QWN0aW9uczogW10sXG4gICAgICAgIGhlYWRlckNvbmZpZzogW10sXG4gICAgICAgIHJvd0NsYXNzOiAnJyxcbiAgICAgICAgZWRpdG1vZGU6ICcnLFxuICAgICAgICBmb3JtUG9zaXRpb246ICcnLFxuICAgICAgICBpc01vYmlsZTogZmFsc2UsXG4gICAgICAgIHJvd0V4cGFuc2lvbkVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICByb3dEZWY6IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnMCdcbiAgICAgICAgfSxcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIG1lc3NhZ2VzOiB7XG4gICAgICAgICAgICBzZWxlY3RGaWVsZDogJ1NlbGVjdCBGaWVsZCdcbiAgICAgICAgfSxcbiAgICAgICAgc2VjdXJpdHlVdGlsczoge1xuICAgICAgICAgICAgcGlwZVRyYW5zZm9ybSA6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIG5hdmlnYXRpb246ICcnLFxuICAgICAgICBpc2R5bmFtaWN0YWJsZTogJycsXG4gICAgICAgIGRlbGV0ZWRSb3dJbmRleDogLTEsXG4gICAgICAgIGxhc3RBY3Rpb25QZXJmb3JtZWQ6ICdzY3JvbGwnLFxuICAgICAgICBpc1NlYXJjaFRyaWdlcnJlZDogZmFsc2UsXG4gICAgICAgIGlzRGF0YXNldFVwZGF0ZWQ6IGZhbHNlLFxuICAgICAgICBpc0RhdGFVcGRhdGVkQnlVc2VyOiBmYWxzZSxcbiAgICAgICAgc2hvd3ZpZXdsZXNzYnV0dG9uOiBmYWxzZSxcbiAgICAgICAgb25kZW1hbmRtZXNzYWdlOiAnJyxcbiAgICAgICAgdmlld2xlc3NtZXNzYWdlOiAnJyxcbiAgICAgICAgbG9hZGluZ2RhdGFtc2c6ICcnLFxuICAgICAgICBpc05leHRQYWdlRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBBQ1RJT05TOiB7XG4gICAgICAgICAgICAnREVMRVRFJzogJ2RlbGV0ZScsXG4gICAgICAgICAgICAnRURJVCc6ICdlZGl0JyxcbiAgICAgICAgICAgICdTRUFSQ0hfT1JfU09SVCc6ICdzZWFyY2hfb3Jfc29ydCcsXG4gICAgICAgICAgICAnREVGQVVMVCc6ICdzY3JvbGwnLFxuICAgICAgICAgICAgJ0ZJTFRFUl9DUklURVJJQScgOiAnZmlsdGVyJyxcbiAgICAgICAgICAgICdEQVRBU0VUX1VQREFURSc6ICdkYXRhc2V0X3VwZGF0ZSdcbiAgICAgICAgfSxcbiAgICAgICAgYWN0aW9uUm93SW5kZXg6IHVuZGVmaW5lZCxcbiAgICAgICAgYWN0aW9uUm93UGFnZTogdW5kZWZpbmVkLFxuICAgICAgICBpc0xhc3RQYWdlIDogZmFsc2UsXG4gICAgICAgIC8vIGdldCB0aGUgY3VycmVudCBwYWdlIG51bWJlclxuICAgICAgICBnZXRDdXJyZW50UGFnZTogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIF8uZ2V0KHRoaXMuZGF0YU5hdmlnYXRvciwgJ2RuLmN1cnJlbnRQYWdlJykgfHwgMTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gc2V0IHRoZSBwYWdlIG51bWJlclxuICAgICAgICBzZXRDdXJyZW50UGFnZTogKHBhZ2VOdW0pID0+IHtcbiAgICAgICAgICAgIF8uc2V0KHRoaXMuZGF0YU5hdmlnYXRvciwgJ2RuLmN1cnJlbnRQYWdlJywgcGFnZU51bSB8fCAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RGF0YVNvdXJjZTogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gZ2V0IHRoZSBwYWdlIGxpbWl0XG4gICAgICAgIGdldFBhZ2VTaXplOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYWdlc2l6ZTtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRQYWdlQ291bnQgOiAoKSA9PntcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZUNvdW50O1xuICAgICAgICB9LFxuICAgICAgICBlbmFibGVOYXZpZ2F0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLndpZGdldC5pc0Rpc2FibGVOZXh0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLndpZGdldC5pc0Rpc2FibGVMYXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5tb2RlID0gJ3ZpZXdsZXNzJztcbiAgICAgICAgfSxcbiAgICAgICAgLy8gc2V0IHRoZSBkZWxldGVkIHJvdyBpbmRleFxuICAgICAgICBzZXREZWxldGVkUm93SW5kZXg6IChpZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignZGVsZXRlZFJvd0luZGV4JywgaWQpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBzZXRzIHRoZSBsYXN0IGFjdGlvbiBwZXJmb3JtZWQgbGlrZSBlZGl0LCBkZWxldGUgZXRjLlxuICAgICAgICBzZXRMYXN0QWN0aW9uUGVyZm9ybWVkOiAoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdsYXN0QWN0aW9uUGVyZm9ybWVkJywgYWN0aW9uIHx8IHRoaXMuZ3JpZE9wdGlvbnMubGFzdEFjdGlvblBlcmZvcm1lZCk7XG4gICAgICAgIH0sXG4gICAgICAgIGlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWRPcHRpb25zLm5hdmlnYXRpb24gPT09ICdTY3JvbGwnIHx8IHRoaXMuZ3JpZE9wdGlvbnMubmF2aWdhdGlvbiA9PT0gJ09uLURlbWFuZCc7XG4gICAgICAgIH0sXG4gICAgICAgIHNldElzU2VhcmNoVHJpZ2VycmVkOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2lzU2VhcmNoVHJpZ2VycmVkJywgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRJc0RhdGFzZXRVcGRhdGVkOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2lzRGF0YXNldFVwZGF0ZWQnLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vICBGaXggZm9yIFtXTVMtMjMyNjNdOiAnaXNOZXh0UGFnZURhdGEnIGZsYWcgaXMgc2V0IHRvIHRydWUgLT4gaWYgdXNlciBmZXRjaGluZyB0aGUgbmV4dCBwYWdlIGRhdGEgYnkgY2xpY2tpbmcgb25Mb2FkIG1vcmUgb3Igc2Nyb2xsXG4gICAgICAgIHNldElzTmV4dFBhZ2VEYXRhOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2lzTmV4dFBhZ2VEYXRhJywgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICAvLyAgRml4IGZvciBbV01TLTIzMjYzXTogJ2lzRGF0YVVwZGF0ZWRCeVVzZXInIGZsYWcgaXMgc2V0IHRvIHRydWUgLT4gaWYgdXNlciBjaGFuZ2VzIHRoZSBkYXRhc2V0IGZyb20gc2NyaXB0XG4gICAgICAgIHNldElzRGF0YVVwZGF0ZWRCeVVzZXI6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNEYXRhVXBkYXRlZEJ5VXNlcicsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25EYXRhUmVuZGVyOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWREYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2RhdGFyZW5kZXInLCB7JGRhdGE6IHRoaXMuZ3JpZERhdGEsIGRhdGE6IHRoaXMuZ3JpZERhdGF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0IHJvd3Mgc2VsZWN0ZWQgaW4gcHJldmlvdXMgcGFnZXMuIChOb3QgZmluZGluZyBpbnRlcnNlY3Rpb24gb2YgZGF0YSBhbmQgc2VsZWN0ZWRpdGVtcyBhcyBpdCB3aWxsIGJlIGhlYXZ5KVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZWxlY3RSb3dzJywgdGhpcy5pdGVtcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkUm93cycpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBPbiByZW5kZXIsIGFwcGx5IHRoZSBmaWx0ZXJzIHNldCBmb3IgcXVlcnkgc2VydmljZSB2YXJpYWJsZVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc1BhZ2VTZWFyY2ggJiYgdGhpcy5maWx0ZXJJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU29ydEhhbmRsZXIodGhpcy5maWx0ZXJJbmZvLCB1bmRlZmluZWQsICdzZWFyY2gnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Sb3dTZWxlY3Q6IChyb3csIGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkUm93cycpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ2hhbmdlLm5leHQodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuYWRkUm93SW5kZXgocm93KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCAmJiByb3dEYXRhLiRpbmRleCAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScgJiYgdGhpcy5kYXRhTmF2aWdhdG9yICYmIHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzLmluZGV4T2YodGhpcy5uYXZpZ2F0aW9uKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqID0ge3BhZ2U6IHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSwgaW5kZXg6IHJvd0RhdGEuJGluZGV4IC0gMX07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzZWxlY3RlZEl0ZW0nKSAgJiYgdGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfLnNvbWUod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLCBvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLCB7J3NlbGVjdGVkSXRlbSc6IHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbX0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMsIHsnc2VsZWN0ZWRJdGVtJzogW29ial19KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUmV0YWluIFN0YXRlIGhhbmRsaW5nIG9uIFdpZGdldCAnICsgdGhpcy5uYW1lICsgJyBpcyBub3Qgc3VwcG9ydGVkIGZvciBjdXJyZW50IHBhZ2luYXRpb24gdHlwZS4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdyb3dzZWxlY3QnLCB7JGRhdGE6IHJvd0RhdGEsICRldmVudDogZSwgcm93OiByb3dEYXRhfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXNzaWducyB0aGUgaXRlbXMgb24gY2FwdHVyZSBwaGFzZSBvZiB0aGUgY2xpY2sgaGFuZGxlci5cbiAgICAgICAgYXNzaWduU2VsZWN0ZWRJdGVtczogKHJvdywgZSwgaXNSb3dTZWxlY3RlZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAqIGluIGNhc2Ugb2Ygc2luZ2xlIHNlbGVjdCwgdXBkYXRlIHRoZSBpdGVtcyB3aXRoIG91dCBjaGFuZ2luZyB0aGUgcmVmZXJlbmNlLlxuICAgICAgICAgICAgICAgICAqIGZvciBtdWx0aSBzZWxlY3QsIGtlZXAgb2xkIHNlbGVjdGVkIGl0ZW1zIGluIHRhY3RcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAvL0ZpeCBmb3IgW1dNUy0yNTExMF06IEFkZCByb3cgdG8gaXRlbXMgbGlzdCBvbmx5IGlmIHRoZSByb3cgaXMgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKF8uZmluZEluZGV4KHRoaXMuaXRlbXMsIHJvdykgPT09IC0xICYmIChpc1Jvd1NlbGVjdGVkID09PSB1bmRlZmluZWQgfHwgaXNSb3dTZWxlY3RlZCA9PSB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChyb3cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJvd0RibENsaWNrOiAocm93LCBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5hZGRSb3dJbmRleChyb3cpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdyb3dkYmxjbGljaycsIHskZGF0YTogcm93RGF0YSwgJGV2ZW50OiBlLCByb3c6IHJvd0RhdGF9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Sb3dEZXNlbGVjdDogKHJvdywgZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zID0gXy5wdWxsQWxsV2l0aCh0aGlzLml0ZW1zLCBbcm93XSwgXy5pc0VxdWFsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkUm93cycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2Rlc2VsZWN0JywgeyRkYXRhOiByb3csICRldmVudDogZSwgcm93fSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLmFkZFJvd0luZGV4KHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScgJiYgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqID0ge3BhZ2U6IHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSwgaW5kZXg6IHJvd0RhdGEuJGluZGV4IC0gMX07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5yZW1vdmUod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLCBmdW5jdGlvbihzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF8uaXNFcXVhbChzZWxlY3RlZEl0ZW0sIG9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMsICdzZWxlY3RlZEl0ZW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMsIHsnc2VsZWN0ZWRJdGVtJzogd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdSZXRhaW4gU3RhdGUgaGFuZGxpbmcgb24gV2lkZ2V0ICcgKyB0aGlzLm5hbWUgKyAnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGN1cnJlbnQgcGFnaW5hdGlvbiB0eXBlLicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgY2FsbE9uUm93RGVzZWxlY3RFdmVudDogKHJvdywgZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdnZXRTZWxlY3RlZFJvd3MnKTtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncm93ZGVzZWxlY3QnLCB7JGRhdGE6IHJvdywgJGV2ZW50OiBlLCByb3d9KTtcbiAgICAgICAgfSxcbiAgICAgICAgY2FsbE9uUm93Q2xpY2tFdmVudDogKHJvdywgZSkgPT4ge1xuICAgICAgICAgICAgLy8gV01TLTE4Nzc0OiBJZiB3ZSBpbnZva2UgbmF2aWdhdGlvbiBhY3Rpb24gdmFyaWFibGUgb24gcm93Y2xpY2sgY2FsbGJhY2ssIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJpbmcgb3V0c2lkZSBhbmd1bGFyIHpvbmUgc28gYWRkaW5nIG5nWm9uZS5ydW5cbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ2FsbCByb3cgY2xpY2sgb25seSBpZiBjbGljayBpcyB0cmlnZ2VyZWQgYnkgdXNlclxuICAgICAgICAgICAgICAgIGlmIChlICYmIGUuaGFzT3duUHJvcGVydHkoJ29yaWdpbmFsRXZlbnQnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5hZGRSb3dJbmRleChyb3cpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2NsaWNrJywgeyRkYXRhOiByb3dEYXRhLCAkZXZlbnQ6IGUsIHJvdzogcm93RGF0YX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBjbG9zZVBvcG92ZXI6IGNsb3NlUG9wb3ZlcixcbiAgICAgICAgb25Db2x1bW5TZWxlY3Q6IChjb2wsIGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkQ29sdW1ucycpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjb2x1bW5zZWxlY3QnLCB7JGRhdGE6IGNvbCwgJGV2ZW50OiBlfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ29sdW1uRGVzZWxlY3Q6IChjb2wsIGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkQ29sdW1ucycpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjb2x1bW5kZXNlbGVjdCcsIHskZGF0YTogY29sLCAkZXZlbnQ6IGV9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25IZWFkZXJDbGljazogKGNvbCwgZSkgPT4ge1xuICAgICAgICAgICAgLy8gaWYgb25Tb3J0IGZ1bmN0aW9uIGlzIHJlZ2lzdGVyZWQgaW52b2tlIGl0IHdoZW4gdGhlIGNvbHVtbiBoZWFkZXIgaXMgY2xpY2tlZFxuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdoZWFkZXJjbGljaycsIHskZXZlbnQ6IGUsICRkYXRhOiBjb2wsIGNvbHVtbjogY29sfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUm93RGVsZXRlOiAocm93LCBjYW5jZWxSb3dEZWxldGVDYWxsYmFjaywgZSwgY2FsbEJhY2ssIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVSZWNvcmQoXy5leHRlbmQoe30sIG9wdGlvbnMsIHtyb3csICdjYW5jZWxSb3dEZWxldGVDYWxsYmFjayc6IGNhbmNlbFJvd0RlbGV0ZUNhbGxiYWNrLCAnZXZ0JzogZSwgJ2NhbGxCYWNrJzogY2FsbEJhY2t9KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Sb3dJbnNlcnQ6IChyb3csIGUsIGNhbGxCYWNrLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydFJlY29yZChfLmV4dGVuZCh7fSwgb3B0aW9ucywge3JvdywgZXZlbnQ6IGUsICdjYWxsQmFjayc6IGNhbGxCYWNrfSkpO1xuICAgICAgICB9LFxuICAgICAgICBiZWZvcmVSb3dVcGRhdGU6IChyb3csIGV2ZW50TmFtZT8pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9saXZlVGFibGVQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9saXZlVGFibGVQYXJlbnQudXBkYXRlUm93KHJvdywgZXZlbnROYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJldkRhdGEgPSBnZXRDbG9uZWRPYmplY3Qocm93KTtcbiAgICAgICAgfSxcbiAgICAgICAgYWZ0ZXJSb3dVcGRhdGU6IChyb3csIGUsIGNhbGxCYWNrLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJlY29yZChfLmV4dGVuZCh7fSwgb3B0aW9ucywge3JvdywgJ3ByZXZEYXRhJzogdGhpcy5wcmV2RGF0YSwgJ2V2ZW50JzogZSwgJ2NhbGxCYWNrJzogY2FsbEJhY2t9KSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQmVmb3JlUm93VXBkYXRlOiAocm93LCBlLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVyb3d1cGRhdGUnLCB7JGV2ZW50OiBlLCAkZGF0YTogcm93LCByb3csIG9wdGlvbnM6IG9wdGlvbnN9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25CZWZvcmVSb3dJbnNlcnQ6IChyb3csIGUsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJvd2luc2VydCcsIHskZXZlbnQ6IGUsICRkYXRhOiByb3csIHJvdywgb3B0aW9uczogb3B0aW9uc30pO1xuICAgICAgICB9LFxuICAgICAgICBvbkJlZm9yZVJvd0RlbGV0ZTogKHJvdywgZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuYWRkUm93SW5kZXgocm93KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJvd2RlbGV0ZScsIHskZXZlbnQ6IGUsIHJvdzogcm93RGF0YSwgb3B0aW9uczogb3B0aW9uc30pO1xuICAgICAgICB9LFxuICAgICAgICBvbkZvcm1SZW5kZXI6ICgkcm93LCBlLCBvcGVyYXRpb24sIGFsd2F5c05ld1JvdykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd2lkZ2V0ID0gYWx3YXlzTmV3Um93ID8gJ2lubGluZUluc3RhbmNlTmV3JyA6ICdpbmxpbmVJbnN0YW5jZSc7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1XaWRnZXRzID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sW3dpZGdldF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybVdpZGdldHNbY29sLmZpZWxkXSA9IGNvbFt3aWRnZXRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkaW5nIGZvcm13aWRnZXRzIHRvIHRoZSBjb250ZXh0IGZvciBpbmxpbmVpbnN0YW5jZSB3aWRnZXQgd2hlbiBmaWVsZERlZnMgd2VyZSByZWFkeVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbFt3aWRnZXRdLmNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xbd2lkZ2V0XS5jb250ZXh0LmZvcm1XaWRnZXRzID0gdGhpcy5mb3JtV2lkZ2V0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGlzYWJsZWRPbkZpZWxkKG9wZXJhdGlvbiwgY29sLCB3aWRnZXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdmb3JtcmVuZGVyJywgeyRldmVudDogZSwgZm9ybVdpZGdldHM6IHRoaXMuZm9ybVdpZGdldHMsICRvcGVyYXRpb246IG9wZXJhdGlvbn0pO1xuICAgICAgICAgICAgfSwgMjUwKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25CZWZvcmVGb3JtUmVuZGVyOiAocm93LCBlLCBvcGVyYXRpb24pID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWZvcm1yZW5kZXInLCB7JGV2ZW50OiBlLCByb3csICRvcGVyYXRpb246IG9wZXJhdGlvbn0pO1xuICAgICAgICB9LFxuICAgICAgICByZWdpc3RlclJvd05nQ2xhc3NXYXRjaGVyOiAocm93RGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yb3duZ2NsYXNzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRDbG9uZWRSb3dPYmplY3Qocm93RGF0YSk7XG4gICAgICAgICAgICBjb25zdCB3YXRjaE5hbWUgPSBgJHt0aGlzLndpZGdldElkfV9yb3dOZ0NsYXNzXyR7aW5kZXh9YDtcbiAgICAgICAgICAgICR1bndhdGNoKHdhdGNoTmFtZSk7XG4gICAgICAgICAgICAvL1tUb2RvLUNTUF06IGdlbmVyYXRlIHdhdGNoZXIgZXhwciBpbiBwYWdlIGlmIHJvd25nY2xhc3MgYXR0ciBpcyBwcmVzZW50IGZvciB0YWJsZVxuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigkd2F0Y2godGhpcy5yb3duZ2NsYXNzLCB0aGlzLnZpZXdQYXJlbnQsIHtyb3d9LCAobnYsIG92KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2FwcGx5Um93TmdDbGFzcycsIGdldENvbmRpdGlvbmFsQ2xhc3Nlcyhudiwgb3YpLCBpbmRleCk7XG4gICAgICAgICAgICB9LCB3YXRjaE5hbWUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaXN0ZXJDb2xOZ0NsYXNzV2F0Y2hlcjogKHJvd0RhdGEsIGNvbERlZiwgcm93SW5kZXgsIGNvbEluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWNvbERlZlsnY29sLW5nLWNsYXNzJ10pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHdhdGNoTmFtZSA9IGAke3RoaXMud2lkZ2V0SWR9X2NvbE5nQ2xhc3NfJHtyb3dJbmRleH1fJHtjb2xJbmRleH1gO1xuICAgICAgICAgICAgJHVud2F0Y2god2F0Y2hOYW1lKTtcbiAgICAgICAgICAgIC8vW1RvZG8tQ1NQXTogZ2VuZXJhdGUgd2F0Y2hlciBleHByIGluIHBhZ2UgaWYgY29sLW5nLWNsYXNzIGF0dHIgaXMgcHJlc2VudCBmb3IgdGFibGVcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoJHdhdGNoKGNvbERlZlsnY29sLW5nLWNsYXNzJ10sIHRoaXMudmlld1BhcmVudCwge3Jvd30sIChudiwgb3YpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnYXBwbHlDb2xOZ0NsYXNzJywgZ2V0Q29uZGl0aW9uYWxDbGFzc2VzKG52LCBvdiksIHJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgICAgICAgICB9LCB3YXRjaE5hbWUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJDdXN0b21FeHByZXNzaW9uOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFRsID0ge307XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFN1bW1hcnlUbCA9IHt9O1xuICAgICAgICB9LFxuICAgICAgICBjbGVhclJvd0RldGFpbEV4cHJlc3Npb246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucm93RGV0YWlsVmlld1JlZi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5yb3dEZWZNYXAgPSB7fTtcbiAgICAgICAgICAgIHRoaXMucm93RGVmSW5zdGFuY2VzID0ge307XG4gICAgICAgIH0sXG4gICAgICAgIGdlbmVyYXRlQ3VzdG9tRXhwcmVzc2lvbnM6IChyb3dEYXRhLCBpbmRleCwgc3VtbWFyeVJvdz8pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICAgICAgY29uc3QgY29tcGlsZVRlbXBsYXRlID0gKHRtcGwpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRtcGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjb2xEZWYgPSB7fTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgICAgIGNvbERlZlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRFdmVudHNUb0NvbnRleHQoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VzdG9tRXhwclZpZXcgPSB0aGlzLmN1c3RvbUV4cHJWaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByb290Tm9kZSA9IGN1c3RvbUV4cHJWaWV3LnJvb3ROb2Rlc1swXTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSByb290Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sLWlkZW50aWZpZXInKTtcbiAgICAgICAgICAgICAgICBfLmV4dGVuZChjb2xEZWYsIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdKTtcbiAgICAgICAgICAgICAgICBpZiAoIXN1bW1hcnlSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXN0b21FeHByQ29tcGlsZWRUbFtmaWVsZE5hbWUgKyBpbmRleF0gPSByb290Tm9kZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFN1bW1hcnlUbFtmaWVsZE5hbWUgKyBpbmRleF0gPSByb290Tm9kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNkeW5hbWljdGFibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBpbGVUZW1wbGF0ZShjb2wuY3VzdG9tRXhwclRtcGwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEZvciBhbGwgdGhlIGNvbHVtbnMgaW5zaWRlIHRoZSB0YWJsZSwgZ2VuZXJhdGUgdGhlIGN1c3RvbSBleHByZXNzaW9uXG4gICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJUbXBsLmZvckVhY2goY29tcGlsZVRlbXBsYXRlLmJpbmQodGhpcykpO1xuICAgICAgICB9LFxuICAgICAgICBnZW5lcmF0ZVJvd0V4cGFuc2lvbkNlbGw6IChyb3dEYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRDbG9uZWRSb3dPYmplY3Qocm93RGF0YSk7XG4gICAgICAgICAgICAvLyBGb3IgYWxsIHRoZSBjb2x1bW5zIGluc2lkZSB0aGUgdGFibGUsIGdlbmVyYXRlIHRoZSBpbmxpbmUgd2lkZ2V0XG4gICAgICAgICAgICB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblRtcGwuZm9yRWFjaCgodG1wbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm93RXhwYW5zaW9uQWN0aW9uVGxbaW5kZXhdID0gdGhpcy5yb3dFeHBhbnNpb25BY3Rpb25WaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCB7cm93fSkucm9vdE5vZGVzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFJvd0V4cGFuc2lvbkFjdGlvbjogKGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3dFeHBhbnNpb25BY3Rpb25UbFtpbmRleF07XG4gICAgICAgIH0sXG4gICAgICAgIGdlbmVyYXRlUm93RGV0YWlsVmlldzogKCRldmVudCwgcm93RGF0YSwgcm93SWQsICR0YXJnZXQsICRvdmVybGF5LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRDbG9uZWRSb3dPYmplY3Qocm93RGF0YSk7XG4gICAgICAgICAgICBjb25zdCByb3dEZWYgPSBnZXRDbG9uZWRPYmplY3QodGhpcy5yb3dEZWYpO1xuICAgICAgICAgICAgaWYgKHRoaXMucm93SW5zdGFuY2UuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlcm93ZXhwYW5kJywgeyRldmVudCwgJGRhdGE6IHJvd0RlZiwgcm93fSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyb3dEZWYuY29udGVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEV4cGFuZCB0aGUgcm93IGRldGFpbFxuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIC8vIFJvdyBpcyBhbHJlYWR5IHJlbmRlcmVkLiBSZXR1cm4gaGVyZVxuICAgICAgICAgICAgaWYgKHRoaXMucm93RGVmTWFwW3Jvd0lkXSAmJiB0aGlzLnJvd0RlZk1hcFtyb3dJZF0uY29udGVudCA9PT0gcm93RGVmLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd0luc3RhbmNlLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2V4cGFuZCcsIHskZXZlbnQsIHJvdywgJGRhdGE6IHRoaXMucm93RGVmSW5zdGFuY2VzW3Jvd0lkXX0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucm93RGVmTWFwW3Jvd0lkXSA9IHJvd0RlZjtcbiAgICAgICAgICAgICR0YXJnZXQuZW1wdHkoKTtcbiAgICAgICAgICAgICR0YXJnZXQuaGlkZSgpO1xuICAgICAgICAgICAgJG92ZXJsYXkuc2hvdygpO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICByb3dEZWYsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckxvYWQ6ICh3aWRnZXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdmVybGF5LmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0LnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0RlZkluc3RhbmNlc1tyb3dJZF0gPSB3aWRnZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dJbnN0YW5jZS5pbnZva2VFdmVudENhbGxiYWNrKCdyb3dleHBhbmQnLCB7JGV2ZW50LCByb3csICRkYXRhOiB3aWRnZXR9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgICAgIH19O1xuICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLnJvd0RldGFpbFZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMucm93RXhwYW5zaW9uVG1wbCwgY29udGV4dCkucm9vdE5vZGVzWzBdO1xuICAgICAgICAgICAgJHRhcmdldFswXS5hcHBlbmRDaGlsZChyb290Tm9kZSk7XG4gICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQmVmb3JlUm93Q29sbGFwc2U6ICgkZXZlbnQsIHJvdywgcm93SWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvd0luc3RhbmNlLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJvd2NvbGxhcHNlJywgeyRldmVudCwgcm93LCAkZGF0YTogdGhpcy5yb3dEZWZJbnN0YW5jZXNbcm93SWRdfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUm93Q29sbGFwc2U6ICgkZXZlbnQsIHJvdykgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3dJbnN0YW5jZS5pbnZva2VFdmVudENhbGxiYWNrKCdyb3djb2xsYXBzZScsIHskZXZlbnQsIHJvd30pO1xuICAgICAgICB9LFxuICAgICAgICBnZXRDdXN0b21FeHByZXNzaW9uOiAoZmllbGROYW1lLCBpbmRleCwgc3VtbWFyeVJvdz8pID0+IHtcbiAgICAgICAgICAgIGxldCBjdXN0b21FeHByZXNzaW9uO1xuICAgICAgICAgICAgaWYgKCFzdW1tYXJ5Um93KSB7XG4gICAgICAgICAgICAgICAgY3VzdG9tRXhwcmVzc2lvbiA9IHRoaXMuY3VzdG9tRXhwckNvbXBpbGVkVGxbZmllbGROYW1lICsgaW5kZXhdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXN0b21FeHByZXNzaW9uID0gdGhpcy5jdXN0b21FeHByQ29tcGlsZWRTdW1tYXJ5VGxbZmllbGROYW1lICsgaW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1c3RvbUV4cHJlc3Npb24gfHwgJyc7XG4gICAgICAgIH0sXG4gICAgICAgIGNsZWFyUm93QWN0aW9uczogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3dBY3Rpb25zVmlld1JlZi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5yb3dBY3Rpb25zQ29tcGlsZWRUbCA9IHt9O1xuICAgICAgICAgICAgdGhpcy5yb3dFeHBhbnNpb25BY3Rpb25WaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblRsID0ge307XG4gICAgICAgIH0sXG4gICAgICAgIGdlbmVyYXRlUm93QWN0aW9uczogKHJvd0RhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIHRoaXMucm93QWN0aW9uc0NvbXBpbGVkVGxbaW5kZXhdID0gW107XG4gICAgICAgICAgICAvLyBGb3IgYWxsIHRoZSBjb2x1bW5zIGluc2lkZSB0aGUgdGFibGUsIGdlbmVyYXRlIHRoZSBpbmxpbmUgd2lkZ2V0XG4gICAgICAgICAgICB0aGlzLnJvd0FjdGlvblRtcGwuZm9yRWFjaCgodG1wbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm93QWN0aW9uc0NvbXBpbGVkVGxbaW5kZXhdLnB1c2goLi4udGhpcy5yb3dBY3Rpb25zVmlld1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodG1wbCwge3Jvd30pLnJvb3ROb2Rlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0Um93QWN0aW9uOiAoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvd0FjdGlvbnNDb21waWxlZFRsW2luZGV4XTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVJbmxpbmVFZGl0Um93OiAocm93RGF0YSwgYWx3YXlzTmV3Um93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIGlmIChhbHdheXNOZXdSb3cpIHtcbiAgICAgICAgICAgICAgICAvLyBDbGVhciB0aGUgdmlldyBjb250YWluZXIgcmVmXG4gICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVFZGl0TmV3Vmlld1JlZi5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lTmV3Q29tcGxpZWRUbCA9IHt9O1xuICAgICAgICAgICAgICAgIC8vIEZvciBhbGwgdGhlIGNvbHVtbnMgaW5zaWRlIHRoZSB0YWJsZSwgZ2VuZXJhdGUgdGhlIGlubGluZSB3aWRnZXRcbiAgICAgICAgICAgICAgICB0aGlzLmlubGluZVdpZGdldE5ld1RtcGwuZm9yRWFjaCh0bXBsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbnRyb2w6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ2Zvcm0uY29udHJvbHNbZmllbGROYW1lICsgJ19uZXcnXSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRWYWxpZGF0aW9uTWVzc2FnZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXSAmJiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS52YWxpZGF0aW9ubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRQZW5kaW5nU3Bpbm5lclN0YXR1c05ldzogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXSAmJiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS5zaG93UGVuZGluZ1NwaW5uZXJOZXc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvb3ROb2RlID0gdGhpcy5pbmxpbmVFZGl0TmV3Vmlld1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodG1wbCwgY29udGV4dCkucm9vdE5vZGVzWzBdO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSByb290Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sLWlkZW50aWZpZXInKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVOZXdDb21wbGllZFRsW2ZpZWxkTmFtZV0gPSByb290Tm9kZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyRm9ybSh0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDbGVhciB0aGUgdmlldyBjb250YWluZXIgcmVmXG4gICAgICAgICAgICB0aGlzLmlubGluZUVkaXRWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmlubGluZUNvbXBsaWVkVGwgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJGb3JtKCk7XG4gICAgICAgICAgICAvLyBGb3IgYWxsIHRoZSBjb2x1bW5zIGluc2lkZSB0aGUgdGFibGUsIGdlbmVyYXRlIHRoZSBpbmxpbmUgd2lkZ2V0XG4gICAgICAgICAgICB0aGlzLmlubGluZVdpZGdldFRtcGwuZm9yRWFjaCh0bXBsID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZmllbGROYW1lO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29udHJvbDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdmb3JtLmNvbnRyb2xzW2ZpZWxkTmFtZV0gfHwge307XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGdldFZhbGlkYXRpb25NZXNzYWdlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0gJiYgdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0udmFsaWRhdGlvbm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGdldFBlbmRpbmdTcGlubmVyU3RhdHVzOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0gJiYgdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0uc2hvd1BlbmRpbmdTcGlubmVyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLmlubGluZUVkaXRWaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCBjb250ZXh0KS5yb290Tm9kZXNbMF07XG4gICAgICAgICAgICAgICAgZmllbGROYW1lID0gcm9vdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbC1pZGVudGlmaWVyJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVDb21wbGllZFRsW2ZpZWxkTmFtZV0gPSByb290Tm9kZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBnZXRJbmxpbmVFZGl0V2lkZ2V0OiAoZmllbGROYW1lLCB2YWx1ZSwgYWx3YXlzTmV3Um93KSA9PiB7XG4gICAgICAgICAgICBpZiAoYWx3YXlzTmV3Um93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRGaWVsZFZhbHVlKGZpZWxkTmFtZSArICdfbmV3JywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlubGluZU5ld0NvbXBsaWVkVGxbZmllbGROYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0RmllbGRWYWx1ZShmaWVsZE5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlubGluZUNvbXBsaWVkVGxbZmllbGROYW1lXTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0RmllbGRWYWx1ZTogKGZpZWxkTmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLm5nZm9ybS5jb250cm9scyAmJiB0aGlzLm5nZm9ybS5jb250cm9sc1tmaWVsZE5hbWVdO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RmllbGRWYWx1ZTogZmllbGROYW1lID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLm5nZm9ybS5jb250cm9scyAmJiB0aGlzLm5nZm9ybS5jb250cm9sc1tmaWVsZE5hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZTtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBmdW5jdGlvbiB0byBhZGQgbG9hZCBtb3JlIGJ1dHRvbiB0byB0YWJsZVxuICAgICAgICBhZGRMb2FkTW9yZUJ0bjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdhZGRMb2FkTW9yZUJ0bicsIHRoaXMub25kZW1hbmRtZXNzYWdlLCB0aGlzLmxvYWRpbmdkYXRhbXNnLCAoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzTmV4dFBhZ2VEYXRhKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRJc0RhdGFVcGRhdGVkQnlVc2VyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLm1vZGUgPT09ICd2aWV3bGVzcycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IubmF2aWdhdGVQYWdlKCdmaXJzdCcsICRldmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5tb2RlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5uYXZpZ2F0ZVBhZ2UoJ25leHQnLCAkZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgdGhpcy5pbmZTY3JvbGwpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBmdW5jdGlvbiB0byBiaW5kIHNjcm9sbCBldmVudFxuICAgICAgICBiaW5kU2Nyb2xsRXZ0OiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZ3JpZERhdGEgJiYgdGhpcy5fZ3JpZERhdGEubGVuZ3RoICYmIHRoaXMuaW5mU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgLy8gc21vb3Roc2Nyb2xsIGV2ZW50cyB3aWxsIGJlIGJpbmRlZC5cbiAgICAgICAgICAgICAgICAvLyBBZGRlZCB0aW1lb3V0IGFzIHRoZSB0YWJsZSBodG1sIGlzIHJlbmRlcmVkIGF0IHJ1bnRpbWVcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5iaW5kU2Nyb2xsRXZ0KHRoaXMsICd0Ym9keScsIERFQk9VTkNFX1RJTUVTLlBBR0lOQVRJT05fREVCT1VOQ0VfVElNRSk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdlbmVyYXRlRmlsdGVyUm93OiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBDbGVhciB0aGUgdmlldyBjb250YWluZXIgcmVmXG4gICAgICAgICAgICB0aGlzLmZpbHRlclZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMucm93RmlsdGVyQ29tcGxpZWRUbCA9IHt9O1xuICAgICAgICAgICAgLy8gRm9yIGFsbCB0aGUgY29sdW1ucyBpbnNpZGUgdGhlIHRhYmxlLCBnZW5lcmF0ZSB0aGUgY29tcGlsZWQgZmlsdGVyIHRlbXBsYXRlXG4gICAgICAgICAgICB0aGlzLmZpbHRlclRtcGwuZm9yRWFjaCgodG1wbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3ROb2RlID0gdGhpcy5maWx0ZXJWaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCB7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZUZuOiB0aGlzLm9uUm93RmlsdGVyQ2hhbmdlLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IChmaWVsZE5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVtcHR5TWF0Y2hNb2Rlcy5pbmRleE9mKHRoaXMucm93RmlsdGVyW2ZpZWxkTmFtZV0gJiYgdGhpcy5yb3dGaWx0ZXJbZmllbGROYW1lXS5tYXRjaE1vZGUpID4gLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KS5yb290Tm9kZXNbMF07XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dGaWx0ZXJDb21wbGllZFRsW3Jvb3ROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1jb2wtaWRlbnRpZmllcicpXSA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldEZpbHRlcldpZGdldDogKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgLy8gTW92ZSB0aGUgZ2VuZXJhdGVkIGZpbHRlciB0ZW1wbGF0ZSB0byB0aGUgZmlsdGVyIHJvd1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93RmlsdGVyQ29tcGxpZWRUbFtmaWVsZE5hbWVdO1xuICAgICAgICB9LFxuICAgICAgICBzZXRHcmlkRWRpdE1vZGU6ICh2YWwpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0dyaWRFZGl0TW9kZSA9IHZhbDtcbiAgICAgICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0R3JpZFN0YXRlOiAodmFsKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHZhbCA9PT0gJ2xvYWRpbmcnO1xuICAgICAgICB9LFxuICAgICAgICAvKlxuICAgICAgICAgICAgc2V0IGFjdGlvblJvd0luZGV4IGFuZCBhY3Rpb25Sb3dQYWdlIHZhbHVlc1xuICAgICAgICAgICAgYWN0aW9uUm93SW5kZXggd2lsbCBoYXZlIHRoZSByb3cgaW5kZXggaW4gdGhlIGRhdGFzZXQgb24gd2hpY2ggZWRpdC9kZWxldGUgb3BlcmF0aW9uIGlzIGJlaW5nIHBlcmZvcm1lZFxuICAgICAgICAgICAgYWN0aW9uUm93UGFnZSB3aWxsIGhhdmUgcGFnZSBudW1iZXIgaW4gd2hpY2ggdGhlIGFjdGlvbiByb3cgaW5kZXggaXMgcHJlc2VudFxuICAgICAgICAgKi9cbiAgICAgICAgc2V0QWN0aW9uUm93SW5kZXg6ICh2YWwpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uUm93SW5kZXggPSBwYXJzZUludCh2YWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2FjdGlvblJvd0luZGV4JywgdGhpcy5hY3Rpb25Sb3dJbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKCFfLmlzTmFOKHRoaXMuYWN0aW9uUm93SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uUm93UGFnZSA9IE1hdGguZmxvb3IodGhpcy5hY3Rpb25Sb3dJbmRleCAvIHRoaXMucGFnZXNpemUpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignYWN0aW9uUm93UGFnZScsIHRoaXMuYWN0aW9uUm93UGFnZSB8fCB0aGlzLmdyaWRPcHRpb25zLmFjdGlvblJvd1BhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJBY3Rpb25Sb3dJbmRleDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzUm93RGVsZXRlZCAmJiAodGhpcy5pbmZTY3JvbGwgfHwgdGhpcy5vbkRlbWFuZExvYWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckFjdGlvblJvd1ZhcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbm9DaGFuZ2VzRGV0ZWN0ZWQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlTWVzc2FnZSh0cnVlLCAnaW5mbycsICdObyBDaGFuZ2VzIERldGVjdGVkJywgJycpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBGdW5jdGlvbiB0byByZWRyYXcgdGhlIHdpZGdldHMgb24gcmVzaXplIG9mIGNvbHVtbnNcbiAgICAgICAgcmVkcmF3V2lkZ2V0czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wuaW5saW5lSW5zdGFuY2UgJiYgY29sLmlubGluZUluc3RhbmNlLnJlZHJhdyk7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5pbmxpbmVJbnN0YW5jZU5ldyAmJiBjb2wuaW5saW5lSW5zdGFuY2VOZXcucmVkcmF3KTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLmZpbHRlckluc3RhbmNlICYmIGNvbC5maWx0ZXJJbnN0YW5jZS5yZWRyYXcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNlYXJjaEhhbmRsZXI6IHRoaXMuc2VhcmNoU29ydEhhbmRsZXIuYmluZCh0aGlzKSxcbiAgICAgICAgc29ydEhhbmRsZXI6IHRoaXMuc2VhcmNoU29ydEhhbmRsZXIuYmluZCh0aGlzKSxcbiAgICAgICAgdGltZW91dENhbGw6IChmbiwgZGVsYXkpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZm4sIGRlbGF5KTtcbiAgICAgICAgfSxcbiAgICAgICAgcnVuSW5OZ1pvbmU6IGZuID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bihmbik7XG4gICAgICAgIH0sXG4gICAgICAgIHNhZmVBcHBseTogKCkgPT4ge1xuICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRUb3VjaGVkOiAobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3RybCA9IHRoaXMubmdmb3JtLmNvbnRyb2xzW25hbWVdO1xuICAgICAgICAgICAgaWYgKGN0cmwpIHtcbiAgICAgICAgICAgICAgICBjdHJsLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJGb3JtOiB0aGlzLmNsZWFyRm9ybS5iaW5kKHRoaXMpLFxuICAgICAgICBjYWxsTG9hZElubGluZVdpZGdldERhdGE6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZnVsbEZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQoY29sLmlzRGF0YVNldEJvdW5kKSkge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLmxvYWRJbmxpbmVXaWRnZXREYXRhICYmIGNvbC5sb2FkSW5saW5lV2lkZ2V0RGF0YS5iaW5kKGNvbCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyBGdW5jdGlvbiB0byBhcHBseSB2YWxpZGF0b3JzIHRvIElubGluZSBmb3JtIGNvbnRyb2xzXG4gICAgICAgIGFwcGx5VmFsaWRhdGlvbnM6IChjb2wsIGFsd2F5c05ld1JvdykgPT4ge1xuICAgICAgICAgICAgaWYgKGFsd2F5c05ld1Jvdykge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wuYXBwbHlOZXdSb3dWYWxpZGF0aW9ucyAmJiBjb2wuYXBwbHlOZXdSb3dWYWxpZGF0aW9ucy5iaW5kKGNvbCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLmFwcGx5VmFsaWRhdGlvbnMgJiYgY29sLmFwcGx5VmFsaWRhdGlvbnMuYmluZChjb2wpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gRnVuY3Rpb24gdG8gcmVtb3ZlIHZhbGlkYXRvcnMgYW5kIHNldCBmb3JtIHN0YXRlIHRvIHVudG91Y2hlZCBmb3IgaW5saW5lIGZvcm0gY29udHJvbFxuICAgICAgICByZW1vdmVWYWxpZGF0aW9uczogKGFsd2F5c05ld1JvdykgPT4ge1xuICAgICAgICAgICAgdGhpcy5mdWxsRmllbGREZWZzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbC5yZWFkb25seSAmJiBjb2wuYmluZGluZyAhPT0gJ3Jvd09wZXJhdGlvbnMnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhbHdheXNOZXdSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wucmVtb3ZlTmV3Um93VmFsaWRhdGlvbnMgJiYgY29sLnJlbW92ZU5ld1Jvd1ZhbGlkYXRpb25zLmJpbmQoY29sKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLnJlbW92ZVZhbGlkYXRpb25zICYmIGNvbC5yZW1vdmVWYWxpZGF0aW9ucy5iaW5kKGNvbCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBfZ3JpZERhdGE7XG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtc0V4aXN0ID0gZmFsc2U7XG4gICAgc2V0IGdyaWREYXRhKG5ld1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuaXNEYXRhTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAvLyBGaXggZm9yIFtXTVMtMjQwMTJdOiBoaWRlIG5vIGRhdGFmb3VuZCBtc2cgd2hlbiB2YXJpYWJsZUluZmxpZ2h0IGlzIHRydWUgYW5kIGRhdGFzZXQgaXMgZW1wdHlcbiAgICAgICAgaWYgKHRoaXMudmFyaWFibGVJbmZsaWdodCAmJiBfLmlzRW1wdHkobmV3VmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YXJpYWJsZUluZmxpZ2h0ID0gZmFsc2U7XG4gICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yNDEwOF06IENoYW5nZSB0aGUgc3RhdHVzIHRvIHJlYWR5IG9yIG5vZGF0YSBmb3VuZCB3aGVuIHZhcmlhYmxlSW5mbGlnaHQgaXMgZmFsc2UoYWZ0ZXIgZ2V0dGluZyB0aGUgZGF0YSlcbiAgICAgICAgaWYgKG5ld1ZhbHVlICYmIChuZXdWYWx1ZS5sZW5ndGgpID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ25vZGF0YScsIHRoaXMubm9kYXRhbWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ3JlYWR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMuaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZCgpKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIF9ncmlkRGF0YSBmaWVsZCB3aXRoIHRoZSBuZXh0IHNldCBvZiBpdGVtcyBhbmQgbW9kaWZ5IHRoZSBjdXJyZW50IHBhZ2VcbiAgICAgICAgICAgIFt0aGlzLl9ncmlkRGF0YSwgdGhpcy5jdXJyZW50UGFnZV0gPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnVwZGF0ZUZpZWxkc09uUGFnaW5hdGlvbih0aGlzLCBuZXdWYWx1ZSk7XG5cbiAgICAgICAgICAgIC8vIFdoZW4gZWRpdCBhY3Rpb24gaXMgcGVyZm9ybWVkIG9uIHByZXZpb3VzIHBhZ2UsIHVwZGF0ZSB0aGUgX2dyaWREYXRhIGZpZWxkIHdpdGggdGhlIG1vZGlmaWVkIHJvdyBkYXRhXG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5sYXN0QWN0aW9uUGVyZm9ybWVkID09PSB0aGlzLmdyaWRPcHRpb25zLkFDVElPTlMuRURJVCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0luZGV4ID0gXy5mbG9vcih0aGlzLmFjdGlvblJvd0luZGV4ICUgdGhpcy5wYWdlc2l6ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ3JpZERhdGEuc3BsaWNlKHRoaXMuYWN0aW9uUm93SW5kZXgsIDEgLCBuZXdWYWx1ZVtyb3dJbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNMYXN0UGFnZScsICEhKHRoaXMuZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0KSk7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIG9uIGRlbWFuZCBwYWdpbmF0aW9uLCBjcmVhdGUgdGhlIGxvYWQgbW9yZSBidXR0b24gb25seSBvbmNlIGFuZCBzaG93IHRoZSBidXR0b24gdW50aWwgbmV4dCBwYWdlIGlzIG5vdCBkaXNhYmxlZFxuICAgICAgICAgICAgaWYgKCF0aGlzLiRlbGVtZW50LmZpbmQoJy5vbi1kZW1hbmQtZGF0YWdyaWQnKS5sZW5ndGggJiYgIXRoaXMuZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0ICYmIHRoaXMub25EZW1hbmRMb2FkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5hZGRMb2FkTW9yZUJ0bigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgodGhpcy5fZ3JpZERhdGEgJiYgdGhpcy5fZ3JpZERhdGEubGVuZ3RoKSAmJiAodGhpcy5kYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHQgfHwgIXRoaXMuaXNEYXRhTG9hZGluZykpIHtcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSBuZXh0IHBhZ2UgaXMgZGlzYWJsZWQgb3Igd2hlbiB0aGUgZGF0YSBpcyBub3QgbG9hZGluZyByZW1vdmUgdGhlIGxvYWRpbmcvbG9hZCBtb3JlIGJ1dHRvbiBhY2NvcmRpbmdseVxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdoaWRlTG9hZGluZ0luZGljYXRvcicsIHRoaXMuZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0LCB0aGlzLmluZlNjcm9sbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9ncmlkRGF0YSA9IG5ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdGFydFJvd0luZGV4ID0gMDtcbiAgICAgICAgbGV0IGdyaWRPcHRpb25zO1xuXG4gICAgICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMuX2dyaWREYXRhKTtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkKCk7XG5cbiAgICAgICAgaWYgKGlzRGVmaW5lZChuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuYmluZFNjcm9sbEV2dCgpO1xuXG4gICAgICAgICAgICAvKlNldHRpbmcgdGhlIHNlcmlhbCBubydzIG9ubHkgd2hlbiBzaG93IG5hdmlnYXRpb24gaXMgZW5hYmxlZCBhbmQgZGF0YSBuYXZpZ2F0b3IgaXMgY29tcGlsZWRcbiAgICAgICAgICAgICBhbmQgaXRzIGN1cnJlbnQgcGFnZSBpcyBzZXQgcHJvcGVybHkqL1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNOYXZpZ2F0aW9uRW5hYmxlZCgpICYmIHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0Um93SW5kZXggPSAoKHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSAtIDEpICogKHRoaXMuZGF0YU5hdmlnYXRvci5tYXhSZXN1bHRzIHx8IDEpKSArIDE7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc3RhcnRSb3dJbmRleCcsIHN0YXJ0Um93SW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogSWYgY29sRGVmcyBhcmUgYXZhaWxhYmxlLCBidXQgbm90IGFscmVhZHkgc2V0IG9uIHRoZSBkYXRhZ3JpZCwgdGhlbiBzZXQgdGhlbS5cbiAgICAgICAgICAgICAqIFRoaXMgd2lsbCBoYXBwZW4gd2hpbGUgc3dpdGNoaW5nIGZyb20gbWFya3VwIHRvIGRlc2lnbiB0YWIuICovXG4gICAgICAgICAgICBncmlkT3B0aW9ucyA9IHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdnZXRPcHRpb25zJyk7XG5cbiAgICAgICAgICAgIGlmICghZ3JpZE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZ3JpZE9wdGlvbnMuY29sRGVmcy5sZW5ndGggJiYgdGhpcy5maWVsZERlZnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignY29sRGVmcycsIGdldENsb25lZE9iamVjdCh0aGlzLmZpZWxkRGVmcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgZGF0YSBhbmQgY29sRGVmcyBhcmUgcHJlc2VudCwgY2FsbCBvbiBiZWZvcmUgZGF0YSByZW5kZXIgZXZlbnRcbiAgICAgICAgICAgIGlmICghdGhpcy5pc2R5bmFtaWN0YWJsZSAmJiAhXy5pc0VtcHR5KG5ld1ZhbHVlKSAmJiBncmlkT3B0aW9ucy5jb2xEZWZzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlZGF0YXJlbmRlcicsIHskZGF0YTogdGhpcy5fZ3JpZERhdGEsICRjb2x1bW5zOiB0aGlzLmNvbHVtbnMsIGRhdGE6IHRoaXMuX2dyaWREYXRhLCBjb2x1bW5zOiB0aGlzLmNvbHVtbnN9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2RhdGEnLCBnZXRDbG9uZWRPYmplY3QodGhpcy5fZ3JpZERhdGEpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBncmlkRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyaWREYXRhIHx8IFtdO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZGl0ZW0oKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuaXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmlzRW1wdHkodGhpcy5pdGVtcykpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuaXRlbXNbMF0pO1xuICAgIH1cblxuICAgIHNldCBzZWxlY3RlZGl0ZW0odmFsKSB7XG4gICAgICAgIC8vIFNlbGVjdCB0aGUgcm93cyBpbiB0aGUgdGFibGUgYmFzZWQgb24gdGhlIG5ldyBzZWxlY3RlZCBpdGVtcyBwYXNzZWRcbiAgICAgICAgdGhpcy5pdGVtcy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2VsZWN0Um93cycsIHZhbCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5cHJlc3MnLCBbJyRldmVudCddKSBvbktleVByZXNzICgkZXZlbnQ6IGFueSkge1xuICAgICAgICBpZiAoJGV2ZW50LndoaWNoID09PSAxMykge1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdlbnRlcmtleXByZXNzJywgeyRldmVudCwgJGRhdGE6IHRoaXMuZ3JpZERhdGF9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgaW5qOiBJbmplY3RvcixcbiAgICAgICAgcHVibGljIGZiOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSBhcHA6IEFwcCxcbiAgICAgICAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50UHJvdmlkZXI6IER5bmFtaWNDb21wb25lbnRSZWZQcm92aWRlcixcbiAgICAgICAgcHJpdmF0ZSBzdGF0ZVBlcnNpc3RlbmNlOiBTdGF0ZVBlcnNpc3RlbmNlLFxuICAgICAgICBwcml2YXRlIHBhZ2luYXRpb25TZXJ2aWNlOiBQYWdpbmF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB2aWV3cG9ydDogVmlld3BvcnQsXG4gICAgICAgIEBPcHRpb25hbCgpIHB1YmxpYyBwYXJlbnRMaXN0OiBMaXN0Q29tcG9uZW50LFxuICAgICAgICBAQXR0cmlidXRlKCdkYXRhc2V0LmJpbmQnKSBwdWJsaWMgYmluZGRhdGFzZXQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2RhdGFzb3VyY2UuYmluZCcpIHB1YmxpYyBiaW5kZGF0YXNvdXJjZSxcbiAgICAgICAgQEF0dHJpYnV0ZSgncmVhZG9ubHlncmlkJykgcHVibGljIHJlYWRvbmx5Z3JpZCxcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSB0cnVzdEFzUGlwZTogVHJ1c3RBc1BpcGVcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCk7XG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMubmdmb3JtID0gZmIuZ3JvdXAoe30pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50c1RvQ29udGV4dCh0aGlzLmNvbnRleHQpO1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnNUb1JlbW92ZSA9IFtcbiAgICAgICAgICAgIC8vIFVwZGF0ZXMgcGFnaW5hdGlvbiwgZmlsdGVyLCBzb3J0IGV0YyBvcHRpb25zIGZvciBzZXJ2aWNlIGFuZCBjcnVkIHZhcmlhYmxlc1xuICAgICAgICAgICAgdGhpcy5hcHAuc3Vic2NyaWJlKCdjaGVjay1zdGF0ZS1wZXJzaXN0ZW5jZS1vcHRpb25zJywgb3B0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2VOYW1lID0gXy5nZXQodGhpcy5kYXRhc291cmNlLCAnbmFtZScpO1xuICAgICAgICAgICAgICAgIC8vIGluIFByZWZhYnMsIHRoaXMuZGF0YXNvdXJjZSBpcyBub3QgcmVzb2x2ZWQgYXQgdGhlIHRpbWUgb2YgdmFyaWFibGUgaW52b2NhdGlvbiwgc28gYWRkaXRpb25hbCBjaGVjayBpcyByZXF1aXJlZC5cbiAgICAgICAgICAgICAgICBpZiAoIWRhdGFTb3VyY2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VOYW1lID0gZXh0cmFjdERhdGFTb3VyY2VOYW1lKHRoaXMuYmluZGRhdGFzb3VyY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXy5nZXQob3B0aW9ucywgJ3ZhcmlhYmxlLm5hbWUnKSAhPT0gZGF0YVNvdXJjZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGFnZUxvYWQgJiYgdGhpcy5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAod2lkZ2V0U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLmhhbmRsZVN0YXRlUGFyYW1zKHdpZGdldFN0YXRlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfSAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdzZWxlY3RGaXJzdFJvdycsIHRoaXMuZ3JpZGZpcnN0cm93c2VsZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICAvLyBTaG93IGxvYWRpbmcgc3RhdHVzIGJhc2VkIG9uIHRoZSB2YXJpYWJsZSBsaWZlIGN5Y2xlXG4gICAgICAgICAgICB0aGlzLmFwcC5zdWJzY3JpYmUoJ3RvZ2dsZS12YXJpYWJsZS1zdGF0ZScsIG9wdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2UgJiYgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFKSAmJiBpc0RhdGFTb3VyY2VFcXVhbChvcHRpb25zLnZhcmlhYmxlLCB0aGlzLmRhdGFzb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wYWdlTG9hZCAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWRnZXRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLmhhbmRsZVN0YXRlUGFyYW1zKHdpZGdldFN0YXRlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc2VsZWN0Rmlyc3RSb3cnLCB0aGlzLmdyaWRmaXJzdHJvd3NlbGVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaXNEZWZpbmVkKHRoaXMudmFyaWFibGVJbmZsaWdodCkgPyB0aGlzLmRlYm91bmNlZEhhbmRsZUxvYWRpbmcob3B0aW9ucykgOiB0aGlzLmhhbmRsZUxvYWRpbmcob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgIHRoaXMuYXBwLnN1YnNjcmliZSgnc2V0dXAtY3VkLWxpc3RlbmVyJywgcGFyYW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hbWUgIT09IHBhcmFtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5faXNEZXBlbmRlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ2hhbmdlJFxuICAgICAgICAgICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjUwKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLnRyaWdnZXJXTUV2ZW50LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcblxuICAgICAgICBsaXN0ZW5lcnNUb1JlbW92ZS5mb3JFYWNoKCBsID0+IHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIobCkgKTtcblxuICAgICAgICB0aGlzLmRlbGV0ZW9rdGV4dCA9IHRoaXMuYXBwTG9jYWxlLkxBQkVMX09LO1xuICAgICAgICB0aGlzLmRlbGV0ZWNhbmNlbHRleHQgPSB0aGlzLmFwcExvY2FsZS5MQUJFTF9DQU5DRUw7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyQ29udGVudEluaXQoKTtcbiAgICAgICAgdGhpcy5oZWFkZXJDb25maWcgPSB0aGlzLmhlYWRlckNvbmZpZy5maWx0ZXIodGhpcy5maWx0ZXJFbXB0eVZhbHVlcy5iaW5kKHRoaXMpKTtcbiAgICAgICAgXy5yZW1vdmUodGhpcy5maWVsZERlZnMsIGYgPT4gZiA9PT0gdW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgcnVuTW9kZUluaXRpYWxQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgc2hvd3Jvd2luZGV4OiAnc2hvd1Jvd0luZGV4JyxcbiAgICAgICAgICAgIG11bHRpc2VsZWN0OiAnbXVsdGlzZWxlY3QnLFxuICAgICAgICAgICAgcmFkaW9zZWxlY3Q6ICdzaG93UmFkaW9Db2x1bW4nLFxuICAgICAgICAgICAgZmlsdGVybnVsbHJlY29yZHM6ICdmaWx0ZXJOdWxsUmVjb3JkcycsXG4gICAgICAgICAgICBlbmFibGVzb3J0OiAnZW5hYmxlU29ydCcsXG4gICAgICAgICAgICBzaG93aGVhZGVyOiAnc2hvd0hlYWRlcicsXG4gICAgICAgICAgICBlbmFibGVjb2x1bW5zZWxlY3Rpb246ICdlbmFibGVDb2x1bW5TZWxlY3Rpb24nLFxuICAgICAgICAgICAgc2hvd25ld3JvdzogJ3Nob3dOZXdSb3cnLFxuICAgICAgICAgICAgZ3JpZGZpcnN0cm93c2VsZWN0OiAnc2VsZWN0Rmlyc3RSb3cnXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMuX2xpdmVUYWJsZVBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5pc1BhcnRPZkxpdmVHcmlkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5Z3JpZCB8fCAhdGhpcy5lZGl0bW9kZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVhZG9ubHlncmlkID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRtb2RlID0gJyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUGFydE9mTGl2ZUdyaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0bW9kZSA9IHRoaXMuaXNQYXJ0T2ZMaXZlR3JpZC5mb3JtbGF5b3V0ID09PSAnaW5saW5lJyA/IEVESVRfTU9ERS5GT1JNIDogRURJVF9NT0RFLkRJQUxPRztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRtb2RlID0gdGhpcy5yZWFkb25seWdyaWQgPyBFRElUX01PREUuSU5MSU5FIDogJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5jb2xEZWZzID0gdGhpcy5mdWxsRmllbGREZWZzO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnJvd0FjdGlvbnMgPSB0aGlzLnJvd0FjdGlvbnM7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuaGVhZGVyQ29uZmlnID0gdGhpcy5oZWFkZXJDb25maWc7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMucm93Q2xhc3MgPSB0aGlzLnJvd2NsYXNzO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmVkaXRtb2RlID0gdGhpcy5lZGl0bW9kZTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5mb3JtUG9zaXRpb24gPSB0aGlzLmZvcm1wb3NpdGlvbjtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5maWx0ZXJtb2RlID0gdGhpcy5maWx0ZXJtb2RlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNlYXJjaExhYmVsID0gdGhpcy5zZWFyY2hsYWJlbDtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5pc01vYmlsZSA9IGlzTW9iaWxlKCk7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMubmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZWN1cml0eVV0aWxzLnBpcGVUcmFuc2Zvcm0gPSB0aGlzLnRydXN0QXNQaXBlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm5hdmlnYXRpb24gPSB0aGlzLm5hdmlnYXRpb247XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuaXNkeW5hbWljdGFibGUgPSB0aGlzLmlzZHluYW1pY3RhYmxlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNob3d2aWV3bGVzc2J1dHRvbiA9IHRoaXMuc2hvd3ZpZXdsZXNzYnV0dG9uO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm9uZGVtYW5kbWVzc2FnZSA9IHRoaXMub25kZW1hbmRtZXNzYWdlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnZpZXdsZXNzbWVzc2FnZSA9IHRoaXMudmlld2xlc3NtZXNzYWdlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmxvYWRpbmdkYXRhbXNnID0gdGhpcy5sb2FkaW5nZGF0YW1zZztcblxuICAgICAgICAvLyBXaGVuIGxvYWRvbmRlbWFuZCBwcm9wZXJ0eSBpcyBlbmFibGVkKGRlZmVybG9hZD1cInRydWVcIikgYW5kIHNob3cgaXMgdHJ1ZSwgb25seSB0aGUgY29sdW1uIHRpdGxlcyBvZiB0aGUgZGF0YXRhYmxlIGFyZSByZW5kZXJlZCwgdGhlIGRhdGEoYm9keSBvZiB0aGUgZGF0YXRhYmxlKSBpcyBub3QgYXQgYWxsIHJlbmRlcmVkLlxuICAgICAgICAvLyBCZWNhdXNlIHRoZSBncmlkZGF0YSBpcyBzZXR0aW5nIGJlZm9yZSB0aGUgZGF0YXRhYmxlIGRvbSBpcyByZW5kZXJlZCBidXQgd2UgYXJlIHNlbmRpbmcgZW1wdHkgZGF0YSB0byB0aGUgZGF0YXRhYmxlLlxuICAgICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLmdyaWREYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5kYXRhID0gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuZ3JpZERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMubWVzc2FnZXMgPSB7XG4gICAgICAgICAgICAnc2VsZWN0RmllbGQnOiB0aGlzLmFwcExvY2FsZS5NRVNTQUdFX1NFTEVDVF9GSUVMRFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRhdGFncmlkRWxlbWVudCA9ICQodGhpcy5fdGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgIHRoaXMuZ3JpZEVsZW1lbnQgPSB0aGlzLiRlbGVtZW50O1xuICAgICAgICB0aGlzLiRlbGVtZW50LmNzcyh7J3Bvc2l0aW9uJzogJ3JlbGF0aXZlJ30pO1xuXG4gICAgICAgIF8uZm9yRWFjaChydW5Nb2RlSW5pdGlhbFByb3BlcnRpZXMsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHRoaXNba2V5XSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zW3ZhbHVlXSA9ICh0aGlzW2tleV0gPT09ICd0cnVlJyB8fCB0aGlzW2tleV0gPT09IHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVoYW5kbGVyICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnNbJ3NlbGVjdEZpcnN0Um93J10gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyT3BlcmF0aW9uQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmNvbERlZnMgPSB0aGlzLmZpZWxkRGVmcztcblxuICAgICAgICB0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUodGhpcy5ncmlkT3B0aW9ucyk7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbG9hZGluZycsIHRoaXMubG9hZGluZ2RhdGFtc2cpO1xuICAgICAgICAvLyBpZih0aGlzLmdyaWRPcHRpb25zLmRhdGEubGVuZ3RoIHx8IHRoaXMudmFyaWFibGVJbmZsaWdodCkge1xuICAgICAgICAvLyAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdsb2FkaW5nJywgdGhpcy5sb2FkaW5nZGF0YW1zZyk7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ25vZGF0YScsIHRoaXMubm9kYXRhbWVzc2FnZSk7XG4gICAgICAgIC8vIH1cblxuICAgICAgICB0aGlzLmFwcGx5UHJvcHMuZm9yRWFjaChhcmdzID0+IHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKC4uLmFyZ3MpKTtcblxuICAgICAgICBpZiAodGhpcy5lZGl0bW9kZSA9PT0gRURJVF9NT0RFLlFVSUNLX0VESVQpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRDbGlja0JpbmQgPSB0aGlzLl9kb2N1bWVudENsaWNrQmluZC5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmRvY3VtZW50Q2xpY2tCaW5kKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIGdldENvbmZpZ3VyZWRTdGF0ZSgpIHtcbiAgICAgICAgY29uc3QgbW9kZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5jb21wdXRlTW9kZSh0aGlzLnN0YXRlaGFuZGxlcik7XG4gICAgICAgIHJldHVybiBtb2RlICYmIG1vZGUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVN0YXRlUGFyYW1zKHdpZGdldFN0YXRlLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zRXhpc3QgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMub3B0aW9ucyA9IG9wdGlvbnMub3B0aW9ucyB8fCB7fTtcbiAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAncGFnaW5hdGlvbicpKSB7XG4gICAgICAgICAgICBvcHRpb25zLm9wdGlvbnMucGFnZSA9IHdpZGdldFN0YXRlLnBhZ2luYXRpb247XG4gICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucy5vcmRlckJ5ID0gXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0LmZpZWxkJykgKyAnICcgKyBfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQuZGlyZWN0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzZWFyY2gnKSkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpO1xuICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLmZpbHRlckZpZWxkcyA9IHRoaXMuZ2V0RmlsdGVyRmllbGRzKHdpZGdldFN0YXRlLnNlYXJjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zLm9wdGlvbnMucGFnZSA9IDE7XG4gICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzZWFyY2gnKSkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpO1xuICAgICAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLmZpbHRlckZpZWxkcyA9IHRoaXMuZ2V0RmlsdGVyRmllbGRzKHdpZGdldFN0YXRlLnNlYXJjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucy5vcmRlckJ5ID0gXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0LmZpZWxkJykgKyAnICcgKyBfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQuZGlyZWN0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmlnZ2VyV01FdmVudChuZXdWYWwpIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdG1vZGUgPT09ICdkaWFsb2cnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgJGludm9rZVdhdGNoZXJzKHRydWUpO1xuICAgICAgICB0aGlzLmFwcC5ub3RpZnkoJ3dtLWV2ZW50Jywge2V2ZW50TmFtZTogJ3NlbGVjdGVkSXRlbUNoYW5nZScsIHdpZGdldE5hbWU6IHRoaXMubmFtZSwgcm93OiBuZXdWYWwsIHRhYmxlOiB0aGlzfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzb3J0U3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKSB7XG4gICAgICAgIGNvbnN0ICRncmlkRWxlbWVudCA9IHRoaXMuZGF0YWdyaWRFbGVtZW50O1xuICAgICAgICBjb25zdCAkc29ydEljb24gPSAgJGdyaWRFbGVtZW50LmZpbmQoJ3RoW2RhdGEtY29sLWZpZWxkPVwiJyArIF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5maWVsZCcpICsgJ1wiXSAuc29ydC1pY29uJyk7XG4gICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQuZGlyZWN0aW9uJykgPT09ICdhc2MnICYmICRzb3J0SWNvbi5sZW5ndGgpICB7XG4gICAgICAgICAgICAkc29ydEljb24uYWRkQ2xhc3MoJ2FzYyB3aSB3aS1sb25nLWFycm93LXVwJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0LmRpcmVjdGlvbicpID09PSAnZGVzYycgICYmICRzb3J0SWNvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICRzb3J0SWNvbi5hZGRDbGFzcygnZGVzYyB3aSB3aS1sb25nLWFycm93LWRvd24nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2VhcmNoU3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKSB7XG4gICAgICAgIGlmIChfLmlzQXJyYXkod2lkZ2V0U3RhdGUuc2VhcmNoKSkge1xuICAgICAgICAgICAgXy5mb3JFYWNoKCB3aWRnZXRTdGF0ZS5zZWFyY2gsIChmaWx0ZXJPYmopID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yb3dGaWx0ZXJbZmlsdGVyT2JqLmZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0ZpbHRlcltmaWx0ZXJPYmouZmllbGRdLnZhbHVlID0gZmlsdGVyT2JqLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0ZpbHRlcltmaWx0ZXJPYmouZmllbGRdLm1hdGNoTW9kZSA9IGZpbHRlck9iai5tYXRjaE1vZGU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93RmlsdGVyW2ZpbHRlck9iai5maWVsZF0udHlwZSA9IGZpbHRlck9iai50eXBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoJCh0aGlzLnJvd0ZpbHRlckNvbXBsaWVkVGxbZmlsdGVyT2JqLmZpZWxkXSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBmaWx0ZXJPYmoudHlwZSA9PT0gJ2ludGVnZXInID8gcGFyc2VJbnQoZmlsdGVyT2JqLnZhbHVlKSA6IGZpbHRlck9iai52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcy5yb3dGaWx0ZXJDb21wbGllZFRsW2ZpbHRlck9iai5maWVsZF0pLmZpbmQoJ2lucHV0JykudmFsKGZpbHRlck9iai52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0ICRncmlkRWxlbWVudCA9IHRoaXMuZGF0YWdyaWRFbGVtZW50O1xuICAgICAgICAgICAgJGdyaWRFbGVtZW50LmZpbmQoJ1tkYXRhLWVsZW1lbnQ9XCJkZ1NlYXJjaFRleHRcIl0nKS52YWwod2lkZ2V0U3RhdGUuc2VhcmNoLnZhbHVlKTtcbiAgICAgICAgICAgICRncmlkRWxlbWVudC5maW5kKCdbZGF0YS1lbGVtZW50PVwiZGdGaWx0ZXJWYWx1ZVwiXScpLnZhbCh3aWRnZXRTdGF0ZS5zZWFyY2guZmllbGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlcyBlbXB0eSB2YWx1ZXMgaW4gaGVhZGVyQ29uZmlnIGFycmF5LlxuICAgIGZpbHRlckVtcHR5VmFsdWVzKGl0ZW0pIHtcbiAgICAgICAgaWYgKGl0ZW0uY29sdW1ucykge1xuICAgICAgICAgICAgaXRlbS5jb2x1bW5zID0gaXRlbS5jb2x1bW5zLmZpbHRlcih0aGlzLmZpbHRlckVtcHR5VmFsdWVzLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIENvbXBhcmVzIHRoZSBwcmV2RmlsdGVyQ3JpdGVyaWEgUnVsZXMgd2l0aCB0aGUgbmV3IHJ1bGVzXG4gICAgY29tcGFyZUZpbHRlckV4cHJlc3Npb25zKHByZXZGaWx0ZXJzLCBuZXdGaWx0ZXJzKSB7XG4gICAgICAgIHJldHVybiAhISgocHJldkZpbHRlcnMubGVuZ3RoID09PSBuZXdGaWx0ZXJzLmxlbmd0aCkgJiYgKF8uaXNFcXVhbChwcmV2RmlsdGVycywgbmV3RmlsdGVycykpKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIHRhYmxlIGxhc3RBY3Rpb25QZXJmb3JtZWQgdG8gRmlsdGVyIENyaXRlcmlhIGFuZCBtYWludGFpbiB0aGUgcHJldkZpbHRlckV4cHJlc3Npb25cbiAgICBzZXRMYXN0QWN0aW9uVG9GaWx0ZXJDcml0ZXJpYSgpIHtcbiAgICAgICAgdGhpcy5wcmV2RmlsdGVyRXhwcmVzc2lvbiA9IF8uZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2ZpbHRlckV4cHJlc3Npb25zLnJ1bGVzJykgPyBnZXRDbG9uZWRPYmplY3QodGhpcy5kYXRhc291cmNlLmZpbHRlckV4cHJlc3Npb25zLnJ1bGVzKSA6IGdldENsb25lZE9iamVjdChbXS5jb25jYXQodGhpcy5kYXRhc291cmNlLmRhdGFCaW5kaW5nKSk7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0TGFzdEFjdGlvblBlcmZvcm1lZCh0aGlzLmdyaWRPcHRpb25zLkFDVElPTlMuRklMVEVSX0NSSVRFUklBKTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRJc1NlYXJjaFRyaWdlcnJlZCh0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIHRhYmxlIGxhc3RBY3Rpb25QZXJmb3JtZWQgdG8gRGF0YXNldCB1cGRhdGUgYW5kIHNldCBpc0RhdGFzZXRVcGRhdGVkIHRvIHRydWVcbiAgICAvLyBGaXggZm9yIFtXTVMtMjIzMjNdLXRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGRhdGFzZXQgaXMgYmVpbmcgdXBkYXRlZFxuICAgIHNldExhc3RBY3Rpb25Ub0RhdGFzZXRVcGRhdGUoKSB7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0TGFzdEFjdGlvblBlcmZvcm1lZCh0aGlzLmdyaWRPcHRpb25zLkFDVElPTlMuREFUQVNFVF9VUERBVEUpO1xuICAgICAgICAvLyAgRml4IGZvciBbV01TLTIzMjYzXTogcmVzZXQgY3VycmVudFBhZ2UgdG8gMSBhcyBkYXRhc2V0IGlzIGJlaW5nIGNoYW5nZWRcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRDdXJyZW50UGFnZSgxKTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRJc0RhdGFzZXRVcGRhdGVkKHRydWUpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgbGFzdEFjdGlvblBlcmZvcm1lZCB0byBGaWx0ZXJfQ3JpdGVyaWEsIHdoZW4gdGhlcmUgaXMgY2hhbmdlIGluIHRoZSBWYXJpYWJsZSBmaWx0ZXIgY3JpdGVyaWEgcnVsZXNcbiAgICBjaGVja0lmVmFyRmlsdGVyc0FwcGxpZWQoKSB7XG4gICAgICAgIGlmICghXy5pc0VtcHR5KF8uZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2ZpbHRlckV4cHJlc3Npb25zLnJ1bGVzJykpIHx8ICFfLmlzRW1wdHkoXy5nZXQodGhpcy5kYXRhc291cmNlLCAnZGF0YUJpbmRpbmcnKSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXJFeHByID0gXy5nZXQodGhpcy5kYXRhc291cmNlLCAnZmlsdGVyRXhwcmVzc2lvbnMucnVsZXMnKSA/IHRoaXMuZGF0YXNvdXJjZS5maWx0ZXJFeHByZXNzaW9ucy5ydWxlcyA6IFtdLmNvbmNhdCh0aGlzLmRhdGFzb3VyY2UuZGF0YUJpbmRpbmcpO1xuICAgICAgICAgICAgY29uc3QgaXNFcXVhbCA9IHRoaXMuY29tcGFyZUZpbHRlckV4cHJlc3Npb25zKHRoaXMucHJldkZpbHRlckV4cHJlc3Npb24sIGN1cnJlbnRGaWx0ZXJFeHByKTtcbiAgICAgICAgICAgIGlmICghaXNFcXVhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGFzdEFjdGlvblRvRmlsdGVyQ3JpdGVyaWEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdhdGNoVmFyaWFibGVEYXRhU2V0KG5ld1ZhbCkge1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICAvLyBDaGVjayBmb3IgVmFyaWFibGUgZmlsdGVycyBpZiBhcHBsaWVkXG4gICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQoKSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFyRmlsdGVyc0FwcGxpZWQoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTdGF0ZSBoYW5kbGluZyBmb3Igc3RhdGljIHZhcmlhYmxlc1xuICAgICAgICBpZiAoXy5nZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gJ3dtLlZhcmlhYmxlJyAmJiB0aGlzLl9wYWdlTG9hZCAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5fcGFnZUxvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc2VsZWN0Rmlyc3RSb3cnLCB0aGlzLmdyaWRmaXJzdHJvd3NlbGVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzZWFyY2gnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNvcnRIYW5kbGVyKHdpZGdldFN0YXRlLnNlYXJjaCwgdW5kZWZpbmVkLCAnc2VhcmNoJywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0JykpIHtcbiAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU29ydEhhbmRsZXIod2lkZ2V0U3RhdGUuc29ydCwgdW5kZWZpbmVkLCAnc29ydCcsIHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc29ydFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdwYWdpbmF0aW9uJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZUNoYW5nZWQoe3BhZ2U6IHdpZGdldFN0YXRlLnBhZ2luYXRpb259LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBBZnRlciB0aGUgc2V0dGluZyB0aGUgd2F0Y2ggb24gbmF2aWdhdG9yLCBkYXRhc2V0IGlzIHRyaWdnZXJlZCB3aXRoIHVuZGVmaW5lZC4gSW4gdGhpcyBjYXNlLCByZXR1cm4gaGVyZS5cbiAgICAgICAgaWYgKHRoaXMuZGF0YU5hdmlnYXRvcldhdGNoZWQgJiYgXy5pc1VuZGVmaW5lZChuZXdWYWwpICYmIHRoaXMuX19mdWxsRGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHZhcmlhYmxlIGlzIGluIGxvYWRpbmcgc3RhdGUsIHNob3cgbG9hZGluZyBpY29uXG4gICAgICAgIGlmICh0aGlzLnZhcmlhYmxlSW5mbGlnaHQgJiYgIXRoaXMuaW5mU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ2xvYWRpbmcnLCB0aGlzLmxvYWRpbmdkYXRhbXNnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCA9IGdldFZhbGlkSlNPTihuZXdWYWwpO1xuXG4gICAgICAgIC8vIENvbnZlcnRpbmcgbmV3dmFsIHRvIG9iamVjdCBpZiBpdCBpcyBhbiBPYmplY3QgdGhhdCBjb21lcyBhcyBhIHN0cmluZyBcIntcImRhdGFcIiA6IDF9XCJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgbmV3VmFsID0gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc29ydEV4cCA9IHRoaXMuZ2V0U29ydEV4cHIoKTtcbiAgICAgICAgY29uc3Qgc29ydEV4cEFyciA9IHNvcnRFeHAuc3BsaXQoJyAnKTtcbiAgICAgICAgaWYgKHNvcnRFeHAgJiYgc29ydEV4cEFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc29ydEluZm8gPSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uIDogc29ydEV4cEFyclsxXSxcbiAgICAgICAgICAgICAgICBmaWVsZDogIHNvcnRFeHBBcnJbMF1cblxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qUmV0dXJuIGlmIGRhdGEgaXMgaW52YWxpZC4qL1xuICAgICAgICBpZiAoIXRoaXMuaXNEYXRhVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdmFsdWUgaXMgZW1wdHkgb3IgaW4gc3R1ZGlvIG1vZGUsIGRvbnQgZW5hYmxlIHRoZSBuYXZpZ2F0aW9uXG4gICAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3duYXZpZ2F0aW9uICYmICF0aGlzLmRhdGFOYXZpZ2F0b3JXYXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVQYWdlTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRQYWdlTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgLy8gSWYgdGhlIGRhdGFzZXQgaXMgdW5kZWZpbmVkIG9yIGVtcHR5IG9yIHRhYmxlIGlzIGJvdW5kIHRvIHN0YXRpYyB2YXJpYWJsZSB0aGVuIHNldCB2YXJpYWJsZUluZmxpZ2h0IHRvIGZhbHNlIGlub3JkZXIgdG8gdXBkYXRlIHRoZSBzdGF0dXNcbiAgICAgICAgICAgIGlmIChuZXdWYWwgPT09ICcnIHx8IG5ld1ZhbCA9PT0gdW5kZWZpbmVkIHx8IF8uZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2NhdGVnb3J5JykgPT09ICd3bS5WYXJpYWJsZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qZm9yIHJ1biBtb2RlLCBkaXNhYmxpbmcgdGhlIGxvYWRlciBhbmQgc2hvd2luZyBubyBkYXRhIGZvdW5kIG1lc3NhZ2UgaWYgZGF0YXNldCBpcyBub3QgdmFsaWQqL1xuICAgICAgICAgICAgaWYgKCF0aGlzLnZhcmlhYmxlSW5mbGlnaHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ25vZGF0YScsIHRoaXMubm9kYXRhbWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdzZWxlY3RGaXJzdFJvdycsIHRoaXMuZ3JpZGZpcnN0cm93c2VsZWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc05hdmlnYXRpb25FbmFibGVkKCkgJiYgbmV3VmFsKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrRmlsdGVyc0FwcGxpZWQodGhpcy5nZXRTb3J0RXhwcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXy5pc09iamVjdChuZXdWYWwpIHx8IG5ld1ZhbCA9PT0gJycgfHwgKG5ld1ZhbCAmJiBuZXdWYWwuZGF0YVZhbHVlID09PSAnJykpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy52YXJpYWJsZUluZmxpZ2h0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdmFyaWFibGUgaGFzIGZpbmlzaGVkIGxvYWRpbmcgYW5kIHJlc3VsdFNldCBpcyBlbXB0eSwgZW5kZXIgZW1wdHkgZGF0YVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0R3JpZERhdGEoW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgICAgIHRoaXMucG9wdWxhdGVHcmlkRGF0YShuZXdWYWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5kb2N1bWVudENsaWNrQmluZCk7XG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2gudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cblxuICAgIGFkZFJvd0luZGV4KHJvdykge1xuICAgICAgICBjb25zdCByb3dEYXRhID0gZ2V0Q2xvbmVkT2JqZWN0KHJvdyk7XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gXy5pbmRleE9mKHRoaXMuZ3JpZE9wdGlvbnMuZGF0YSwgcm93KTtcbiAgICAgICAgaWYgKHJvd0luZGV4IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgICAgfVxuICAgICAgICByb3dEYXRhLiRpbmRleCA9IHJvd0luZGV4ICsgMTtcbiAgICAgICAgcm93RGF0YS4kaXNGaXJzdCA9IHJvd0RhdGEuJGluZGV4ID09PSAxO1xuICAgICAgICByb3dEYXRhLiRpc0xhc3QgPSB0aGlzLmdyaWREYXRhLmxlbmd0aCA9PT0gcm93RGF0YS4kaW5kZXg7XG4gICAgICAgIHJldHVybiByb3dEYXRhO1xuICAgIH1cblxuICAgIGFkZEV2ZW50c1RvQ29udGV4dChjb250ZXh0KSB7XG4gICAgICAgIGNvbnRleHQuYWRkTmV3Um93ID0gKCkgPT4gdGhpcy5hZGROZXdSb3coKTtcbiAgICAgICAgY29udGV4dC5kZWxldGVSb3cgPSAoKSA9PiB0aGlzLmRlbGV0ZVJvdygpO1xuICAgICAgICBjb250ZXh0LmVkaXRSb3cgPSAoKSA9PiB0aGlzLmVkaXRSb3coKTtcbiAgICB9XG5cbiAgICBleGVjdXRlKG9wZXJhdGlvbiwgb3B0aW9ucykge1xuICAgICAgICBpZiAoW0RhdGFTb3VyY2UuT3BlcmF0aW9uLklTX0FQSV9BV0FSRSwgRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfUEFHRUFCTEUsIERhdGFTb3VyY2UuT3BlcmF0aW9uLlNVUFBPUlRTX1NFUlZFUl9GSUxURVJdLmluY2x1ZGVzKG9wZXJhdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlID8gdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUob3BlcmF0aW9uLCBvcHRpb25zKSA6IHt9O1xuICAgIH1cblxuICAgIGlzTmF2aWdhdGlvbkVuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3duYXZpZ2F0aW9uICYmIHRoaXMuZGF0YU5hdmlnYXRvciAmJiB0aGlzLmRhdGFOYXZpZ2F0b3JXYXRjaGVkO1xuICAgIH1cblxuICAgIGdldENsb25lZFJvd09iamVjdChyb3dEYXRhKSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IGdldENsb25lZE9iamVjdChyb3dEYXRhKTtcbiAgICAgICAgcm93LmdldFByb3BlcnR5ID0gZmllbGQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIF8uZ2V0KHJvdywgZmllbGQpO1xuICAgICAgICB9O1xuICAgICAgICByb3cuJGlzRmlyc3QgPSByb3cuJGluZGV4ID09PSAxO1xuICAgICAgICByb3cuJGlzTGFzdCA9IHRoaXMuZ3JpZERhdGEubGVuZ3RoID09PSByb3cuJGluZGV4O1xuICAgICAgICBkZWxldGUgcm93LiQkaW5kZXg7XG4gICAgICAgIGRlbGV0ZSByb3cuJCRwaztcbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICB9XG5cbiAgICBoYW5kbGVMb2FkaW5nKGRhdGEpIHtcbiAgICAgICAgdGhpcy52YXJpYWJsZUluZmxpZ2h0ID0gZGF0YS5hY3RpdmU7XG4gICAgICAgIC8vIGJhc2VkIG9uIHRoZSBhY3RpdmUgc3RhdGUgYW5kIHJlc3BvbnNlIHRvZ2dsaW5nIHRoZSAnbG9hZGluZyBkYXRhLi4uJyBhbmQgJ25vIGRhdGEgZm91bmQnIG1lc3NhZ2VzLlxuICAgICAgICBpZiAoZGF0YS5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbG9hZGluZycsIHRoaXMubG9hZGluZ2RhdGFtc2cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgZ3JpZCBpcyBpbiBlZGl0IG1vZGUgb3IgZ3JpZCBoYXMgZGF0YSwgZG9udCBzaG93IHRoZSBubyBkYXRhIG1lc3NhZ2VcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0dyaWRFZGl0TW9kZSAmJiBfLmlzRW1wdHkodGhpcy5kYXRhc2V0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdyZWFkeScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRPbkZpZWxkKG9wZXJhdGlvbiwgY29sRGVmLCB3aWRnZXRUeXBlKSB7XG4gICAgICAgIGlmIChvcGVyYXRpb24gIT09ICduZXcnICYmIGNvbERlZlsncHJpbWFyeS1rZXknXSAmJiBjb2xEZWYuZ2VuZXJhdG9yID09PSAnYXNzaWduZWQnICYmICFjb2xEZWZbJ3JlbGF0ZWQtZW50aXR5LW5hbWUnXSAmJiAhY29sRGVmLnBlcmlvZCkge1xuICAgICAgICAgICAgY29sRGVmW3dpZGdldFR5cGVdLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0Rm9ybUNvbnRyb2woY3RybCkge1xuICAgICAgICBjdHJsLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgICBjdHJsLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgfVxuXG4gICAgY2xlYXJGb3JtKG5ld1Jvdz8pIHtcbiAgICAgICAgY29uc3QgY3RybHMgPSB0aGlzLm5nZm9ybS5jb250cm9scztcbiAgICAgICAgXy5rZXlzKHRoaXMubmdmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAvLyBJZiBuZXcgcm93LCBjbGVhciB0aGUgY29udHJvbHMgaW4gdGhlIG5ldyByb3cuIEVsc2UsIGNsZWFyIHRoZSBjb250cm9scyBpbiBlZGl0IHJvd1xuICAgICAgICAgICAgaWYgKCFrZXkuZW5kc1dpdGgoJ19maWx0ZXInKSAmJiAoKGtleS5lbmRzV2l0aCgnX25ldycpICYmIG5ld1JvdykgfHwgKCFrZXkuZW5kc1dpdGgoJ19uZXcnKSAmJiAhbmV3Um93KSkpIHtcbiAgICAgICAgICAgICAgICBjdHJsc1trZXldLnNldFZhbHVlKCcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybUNvbnRyb2woY3RybHNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNob3dGaWVsZEJhc2VkT25TY3JlZW5UeXBlKGZpZWxkKSB7XG4gICAgICAgIGxldCBzaG93RmllbGQ7XG4gICAgICAgIGlmIChpc01vYmlsZSgpICYmIHRoaXMudmlld3BvcnQuaXNNb2JpbGVUeXBlKSB7XG4gICAgICAgICAgICBzaG93RmllbGQgPSBmaWVsZC5tb2JpbGVEaXNwbGF5O1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld3BvcnQuaXNUYWJsZXRUeXBlKSB7XG4gICAgICAgICAgICBzaG93RmllbGQgPSBmaWVsZC50YWJsZXREaXNwbGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2hvd0ZpZWxkID0gZmllbGQucGNEaXNwbGF5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaG93RmllbGQ7XG4gICAgfVxuXG4gICAgLyogQ2hlY2sgd2hldGhlciBpdCBpcyBub24tZW1wdHkgcm93LiAqL1xuICAgIGlzRW1wdHlSZWNvcmQocmVjb3JkKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhyZWNvcmQpO1xuICAgICAgICBsZXQgZGF0YSxcbiAgICAgICAgICAgIGlzRGlzcGxheWVkO1xuXG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLmV2ZXJ5KChwcm9wLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgZGF0YSA9IHJlY29yZFtwcm9wXTtcbiAgICAgICAgICAgIC8qIElmIGZpZWxkRGVmcyBhcmUgbWlzc2luZywgc2hvdyBhbGwgY29sdW1ucyBpbiBkYXRhLiAqL1xuICAgICAgICAgICAgaXNEaXNwbGF5ZWQgPSAodGhpcy5maWVsZERlZnMubGVuZ3RoICYmIGlzRGVmaW5lZCh0aGlzLmZpZWxkRGVmc1tpbmRleF0pICYmIHRoaXMuc2hvd0ZpZWxkQmFzZWRPblNjcmVlblR5cGUodGhpcy5maWVsZERlZnNbaW5kZXhdKSkgfHwgdHJ1ZTtcbiAgICAgICAgICAgIC8qVmFsaWRhdGluZyBvbmx5IHRoZSBkaXNwbGF5ZWQgZmllbGRzKi9cbiAgICAgICAgICAgIGlmIChpc0Rpc3BsYXllZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB1bmRlZmluZWQgfHwgZGF0YSA9PT0gJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qIEZ1bmN0aW9uIHRvIHJlbW92ZSB0aGUgZW1wdHkgZGF0YS4gKi9cbiAgICByZW1vdmVFbXB0eVJlY29yZHMoc2VydmljZURhdGEpIHtcbiAgICAgICAgY29uc3QgYWxsUmVjb3JkcyA9IHNlcnZpY2VEYXRhO1xuICAgICAgICBsZXQgZmlsdGVyZWREYXRhID0gW107XG4gICAgICAgIGlmIChhbGxSZWNvcmRzICYmIGFsbFJlY29yZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAvKkNvbXBhcmluZyBhbmQgcHVzaGluZyB0aGUgbm9uLWVtcHR5IGRhdGEgY29sdW1ucyovXG4gICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBhbGxSZWNvcmRzLmZpbHRlcihyZWNvcmQgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWNvcmQgJiYgIXRoaXMuaXNFbXB0eVJlY29yZChyZWNvcmQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkRGF0YTtcbiAgICB9XG5cbiAgICBzZXRHcmlkRGF0YShzZXJ2ZXJEYXRhKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZpbHRlcm51bGxyZWNvcmRzID8gIHRoaXMucmVtb3ZlRW1wdHlSZWNvcmRzKHNlcnZlckRhdGEpIDogc2VydmVyRGF0YTtcbiAgICAgICAgLy8gZml4IGZvciBbV01TLTI0MDEyXSBzZXQgdmFyaWFibGVpbmZsaWdodCBmbGFnIHRvIGZhbHNlIGZvciBzdGF0aWMgdmFyaWFibGVzXG4gICAgICAgIC8vIElmIHRoZSB0YWJsZSBpcyBib3VuZCB0byBzb21lIHdpZGdldCBhbmQgbm90IGJvdW5kIHRvIGFueSB2YXJpYWJsZSAoZXg6IFRhYmxlMS5zZWxlY3RlZEl0ZW0pIHRoZW4gc2V0IHZhcmlhYmxlSW5mbGlnaHQgdG8gZmFsc2VcbiAgICAgICAgaWYgKF8uZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ2NhdGVnb3J5JykgPT09ICd3bS5WYXJpYWJsZScgfHwgXy5nZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMudmFyaWFibGVJbmZsaWdodCkge1xuICAgICAgICAgICAgaWYgKGRhdGEgJiYgKGRhdGEubGVuZ3RoKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdyZWFkeScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZERhdGEgPSBkYXRhO1xuICAgIH1cblxuICAgIHNldERhdGFHcmlkT3B0aW9uKG9wdGlvbk5hbWUsIG5ld1ZhbCwgZm9yY2VTZXQgPSBmYWxzZSkge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YWdyaWRFbGVtZW50IHx8ICF0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUgfHwgIXRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZSgnaW5zdGFuY2UnKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHt9O1xuICAgICAgICBpZiAoaXNEZWZpbmVkICYmICghXy5pc0VxdWFsKG5ld1ZhbCwgdGhpcy5ncmlkT3B0aW9uc1tvcHRpb25OYW1lXSkgfHwgZm9yY2VTZXQpKSB7XG4gICAgICAgICAgICBvcHRpb25bb3B0aW9uTmFtZV0gPSBuZXdWYWw7XG4gICAgICAgICAgICB0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUoJ29wdGlvbicsIG9wdGlvbik7XG4gICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zW29wdGlvbk5hbWVdID0gbmV3VmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FsbERhdGFHcmlkTWV0aG9kKC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGFncmlkRWxlbWVudCB8fCAhdGhpcy5kYXRhZ3JpZEVsZW1lbnQuZGF0YXRhYmxlKCdpbnN0YW5jZScpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5UHJvcHMuc2V0KGFyZ3NbMV0sIGFyZ3MpO1xuICAgICAgICAgICAgcmV0dXJuOyAvLyBJZiBkYXRhZ3JpZCBpcyBub3QgaW5pdGlsaWF6ZWQgb3IgZGVzdHJveWVkLCByZXR1cm4gaGVyZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUuYXBwbHkodGhpcy5kYXRhZ3JpZEVsZW1lbnQsIGFyZ3MpO1xuICAgIH1cblxuICAgIHJlbmRlck9wZXJhdGlvbkNvbHVtbnMoKSB7XG4gICAgICAgIGxldCByb3dBY3Rpb25Db2wsXG4gICAgICAgICAgICBpbnNlcnRQb3NpdGlvbjtcblxuICAgICAgICBjb25zdCByb3dPcGVyYXRpb25zQ29sdW1uID0gZ2V0Um93T3BlcmF0aW9uc0NvbHVtbigpLFxuICAgICAgICAgICAgY29uZmlnID0ge1xuICAgICAgICAgICAgICAgICduYW1lJzogcm93T3BlcmF0aW9uc0NvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICAnZmllbGQnOiByb3dPcGVyYXRpb25zQ29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICdpc1ByZWRlZmluZWQnOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAvLyBSZXR1cm4gaWYgbm8gZmllbGREZWZzIGFyZSBwcmVzZW50XG4gICAgICAgIGlmICghdGhpcy5maWVsZERlZnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByb3dBY3Rpb25Db2wgPSBfLmZpbmQodGhpcy5mdWxsRmllbGREZWZzLCB7J2ZpZWxkJzogUk9XX09QU19GSUVMRCwgdHlwZTogJ2N1c3RvbSd9KTsgLy8gQ2hlY2sgaWYgY29sdW1uIGlzIGZldGNoZWQgZnJvbSBtYXJrdXBcbiAgICAgICAgXy5yZW1vdmUodGhpcy5maWVsZERlZnMsIHt0eXBlOiAnY3VzdG9tJywgZmllbGQ6IFJPV19PUFNfRklFTER9KTsgLy8gUmVtb3Zpbmcgb3BlcmF0aW9ucyBjb2x1bW5cbiAgICAgICAgXy5yZW1vdmUodGhpcy5oZWFkZXJDb25maWcsIHtmaWVsZDogcm93T3BlcmF0aW9uc0NvbHVtbi5maWVsZH0pO1xuXG4gICAgICAgIC8qQWRkIHRoZSBjb2x1bW4gZm9yIHJvdyBvcGVyYXRpb25zIG9ubHkgaWYgYXQtbGVhc3Qgb25lIG9wZXJhdGlvbiBoYXMgYmVlbiBlbmFibGVkLiovXG4gICAgICAgIGlmICh0aGlzLnJvd0FjdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAocm93QWN0aW9uQ29sKSB7IC8vIElmIGNvbHVtbiBpcyBwcmVzZW50IGluIG1hcmt1cCwgcHVzaCB0aGUgY29sdW1uIG9yIHB1c2ggdGhlIGRlZmF1bHQgY29sdW1uXG4gICAgICAgICAgICAgICAgaW5zZXJ0UG9zaXRpb24gPSByb3dBY3Rpb25Db2wucm93YWN0aW9uc3Bvc2l0aW9uID8gXy50b051bWJlcihyb3dBY3Rpb25Db2wucm93YWN0aW9uc3Bvc2l0aW9uKSA6IHRoaXMuZmllbGREZWZzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkRGVmcy5zcGxpY2UoaW5zZXJ0UG9zaXRpb24sIDAsIHJvd0FjdGlvbkNvbCk7XG4gICAgICAgICAgICAgICAgaWYgKGluc2VydFBvc2l0aW9uID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyQ29uZmlnLnVuc2hpZnQoY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlYWRlckNvbmZpZy5wdXNoKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkRGVmcy5wdXNoKHJvd09wZXJhdGlvbnNDb2x1bW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyQ29uZmlnLnB1c2goY29uZmlnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdoZWFkZXJDb25maWcnLCB0aGlzLmhlYWRlckNvbmZpZyk7XG4gICAgfVxuXG4gICAgZW5hYmxlUGFnZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFzZXQgJiYgdGhpcy5iaW5kZGF0YXNldCAmJiB0aGlzLmRhdGFOYXZpZ2F0b3IpIHtcbiAgICAgICAgICAgIC8qQ2hlY2sgZm9yIHNhbml0eSovXG4gICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3JXYXRjaGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMubmF2aWdhdG9yUmVzdWx0V2F0Y2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKlJlZ2lzdGVyIGEgd2F0Y2ggb24gdGhlIFwicmVzdWx0XCIgcHJvcGVydHkgb2YgdGhlIFwiZGF0YU5hdmlnYXRvclwiIHNvIHRoYXQgdGhlIHBhZ2luYXRlZCBkYXRhIGlzIGRpc3BsYXllZCBpbiB0aGUgbGl2ZS1saXN0LiovXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRvclJlc3VsdFdhdGNoID0gdGhpcy5kYXRhTmF2aWdhdG9yLnJlc3VsdEVtaXR0ZXIuc3Vic2NyaWJlKChuZXdWYWwpID0+IHtcbiAgICAgICAgICAgICAgICAvKiBDaGVjayBmb3Igc2FuaXR5LiAqL1xuICAgICAgICAgICAgICAgIGlmIChpc0RlZmluZWQobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBXYXRjaCB3aWxsIG5vdCBiZSB0cmlnZ2VyZWQgaWYgZGF0YXNldCBhbmQgbmV3IHZhbHVlIGFyZSBlcXVhbC4gU28gdHJpZ2dlciB0aGUgcHJvcGVydHkgY2hhbmdlIGhhbmRsZXIgbWFudWFsbHlcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBoYXBwZW5zIGluIGNhc2UsIGlmIGRhdGFzZXQgaXMgZGlyZWN0bHkgdXBkYXRlZC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKF8uaXNFcXVhbCh0aGlzLmRhdGFzZXQsIG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2F0Y2hWYXJpYWJsZURhdGFTZXQobmV3VmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfLmlzQXJyYXkobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRhdGFzZXQgPSBbXS5jb25jYXQobmV3VmFsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdChuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aWRnZXQuZGF0YXNldCA9IF8uZXh0ZW5kKHt9LCBuZXdWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZGdldC5kYXRhc2V0ID0gbmV3VmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53aWRnZXQuZGF0YXNldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgICAgIC8qRGUtcmVnaXN0ZXIgdGhlIHdhdGNoIGlmIGl0IGlzIGV4aXN0cyAqL1xuICAgICAgICAgICAgaWYgKHRoaXMubmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRvck1heFJlc3VsdFdhdGNoLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKlJlZ2lzdGVyIGEgd2F0Y2ggb24gdGhlIFwibWF4UmVzdWx0c1wiIHByb3BlcnR5IG9mIHRoZSBcImRhdGFOYXZpZ2F0b3JcIiBzbyB0aGF0IHRoZSBcInBhZ2VTaXplXCIgaXMgZGlzcGxheWVkIGluIHRoZSBsaXZlLWxpc3QuKi9cbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2ggPSB0aGlzLmRhdGFOYXZpZ2F0b3IubWF4UmVzdWx0c0VtaXR0ZXIuc3Vic2NyaWJlKChuZXdWYWwpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VzaXplID0gbmV3VmFsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiBkYXRhc2V0IGlzIGEgcGFnZWFibGUgb2JqZWN0LCBkYXRhIGlzIHByZXNlbnQgaW5zaWRlIHRoZSBjb250ZW50IHByb3BlcnR5XG4gICAgICAgICAgICB0aGlzLl9fZnVsbERhdGEgPSB0aGlzLmRhdGFzZXQ7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci53aWRnZXQubWF4UmVzdWx0cyA9IHRoaXMucGFnZXNpemUgfHwgNTtcbiAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5vcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIG1heFJlc3VsdHM6IHRoaXMucGFnZXNpemUgfHwgNVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlUHJvcGVydHlCaW5kaW5nKCdkYXRhc2V0Jyk7XG4gICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iuc2V0QmluZERhdGFTZXQodGhpcy5iaW5kZGF0YXNldCwgdGhpcy52aWV3UGFyZW50LCB0aGlzLmRhdGFzb3VyY2UsIHRoaXMuZGF0YXNldCwgdGhpcy5iaW5kZGF0YXNvdXJjZSwgdW5kZWZpbmVkLCB0aGlzLnN0YXRlaGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldFBhZ2VOYXZpZ2F0aW9uKCkge1xuICAgICAgICAvKkNoZWNrIGZvciBzYW5pdHkqL1xuICAgICAgICBpZiAodGhpcy5kYXRhTmF2aWdhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IucmVzZXRQYWdlTmF2aWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNEYXRhVmFsaWQoKSB7XG4gICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgY29uc3QgZGF0YXNldCA9IHRoaXMuZGF0YXNldCB8fCB7fTtcblxuICAgICAgICAvKkluIGNhc2UgXCJkYXRhXCIgY29udGFpbnMgXCJlcnJvclwiICYgXCJlcnJvck1lc3NhZ2VcIiwgdGhlbiBkaXNwbGF5IHRoZSBlcnJvciBtZXNzYWdlIGluIHRoZSBncmlkLiovXG4gICAgICAgIGlmIChkYXRhc2V0LmVycm9yKSB7XG4gICAgICAgICAgICBlcnJvciA9IGRhdGFzZXQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGFzZXQuZGF0YSAmJiBkYXRhc2V0LmRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChkYXRhc2V0LmRhdGEuZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBkYXRhc2V0LmRhdGEuZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5zZXRHcmlkRGF0YShbXSk7XG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIHRvIHBvcHVsYXRlIHRoZSBncmlkIHdpdGggZGF0YS5cbiAgICBwb3B1bGF0ZUdyaWREYXRhKHNlcnZpY2VEYXRhKSB7XG4gICAgICAgIGxldCBkYXRhO1xuICAgICAgICBzZXJ2aWNlRGF0YSA9IHRyYW5zZm9ybURhdGEoc2VydmljZURhdGEsIHRoaXMubmFtZSk7XG4gICAgICAgIC8vIEFwcGx5IGZpbHRlciBhbmQgc29ydCwgaWYgZGF0YSBpcyByZWZyZXNoZWQgdGhyb3VnaCBSZWZyZXNoIGRhdGEgbWV0aG9kXG4gICAgICAgIGlmICghdGhpcy5pc05hdmlnYXRpb25FbmFibGVkKCkgJiYgdGhpcy5faXNDbGllbnRTZWFyY2gpIHtcbiAgICAgICAgICAgIGRhdGEgPSBnZXRDbG9uZWRPYmplY3Qoc2VydmljZURhdGEpO1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0U2VhcmNoUmVzdWx0KGRhdGEsIHRoaXMuZmlsdGVySW5mbyk7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRTb3J0UmVzdWx0KGRhdGEsIHRoaXMuc29ydEluZm8pO1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJEYXRhID0gZGF0YTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmVyRGF0YSA9IHNlcnZpY2VEYXRhO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGZpZWxkZGVmcyBhcmUgbm90IHByZXNlbnQsIGdlbmVyYXRlIGZpZWxkZGVmcyBmcm9tIGRhdGFcbiAgICAgICAgLy8gUmVtb3ZpbmcgZmllbGRkZWZzIGNoZWNrIGJlY2F1c2UgV2hlbiBsb2Fkb25kZW1hbmQgcHJvcGVydHkgaXMgZW5hYmxlZChkZWZlcmxvYWQ9XCJ0cnVlXCIpLCB0aGUgZGF0YXNldCBwcm9wZXJ0eWNoYW5nZWhhbmxkZXIgaXMgdHJpZ2dlcmVkIGZpcnN0IGJlZm9yZSB0aGUgZG9tIGlzIGdldHRpbmcgcmVuZGVyZWQuXG4gICAgICAgIC8vIFNvIGF0IHRoYXQgdGltZSBmaWVsZGRlZnMgbGVuZ3RoIGlzIHplcm8sIGR1ZSB0byB0aGlzIHRoZSBjb2x1bW5zIGFyZSBjcmVhdGVkIGR5bmFtaWNhbGx5LlxuICAgICAgICBpZiAodGhpcy5pc2R5bmFtaWN0YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVHcmlkQ29sdW1ucyh0aGlzLnNlcnZlckRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRHcmlkRGF0YSh0aGlzLnNlcnZlckRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScgJiYgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0ICYmIHNlcnZpY2VEYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICBsZXQgY3VycmVudFBhZ2VJdGVtcztcbiAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NlbGVjdGVkSXRlbScpKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFBhZ2VJdGVtcyA9IHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbS5maWx0ZXIodmFsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbC5wYWdlID09PSB0aGlzLmRhdGFOYXZpZ2F0b3IuZG4uY3VycmVudFBhZ2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gaWYgYW4gaXRlbSBpcyBhbHJlYWR5IHNlbGVjdGVkLCBkb24ndCB0cmlnZ2VyIG9uU2VsZWN0IGV2ZW50IGZvciBpdCBhZ2FpblxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UGFnZUl0ZW1zLmxlbmd0aCAmJiB0aGlzLnNlbGVjdGVkaXRlbS5sZW5ndGggIT09IHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgcmVhc3NpZ24gdGhpcy5zZWxlY3RlZGl0ZW0gaWYgc2VsZWN0ZWQgaXRlbXMgYWxyZWFkeSBleGlzdC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKF8uaXNBcnJheSh0aGlzLnNlbGVjdGVkaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShpdGVtLmluZGV4LCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkaXRlbSA9IGN1cnJlbnRQYWdlSXRlbXMubWFwKGZ1bmN0aW9uKHZhbCkge3JldHVybiB2YWwuaW5kZXg7IH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gdG8gZ2VuZXJhdGUgYW5kIGNvbXBpbGUgdGhlIGZvcm0gZmllbGRzIGZyb20gdGhlIG1ldGFkYXRhXG4gICAgYXN5bmMgZ2VuZXJhdGVEeW5hbWljQ29sdW1ucyhjb2x1bW5zKSB7XG4gICAgICAgIHRoaXMuZmllbGREZWZzID0gW107IC8vIGVtcHR5IHRoZSBmb3JtIGZpZWxkc1xuICAgICAgICAvLyBlbXB0eSB0aGUgZmlsdGVyIGZpZWxkIHRlbXBsYXRlIHJlZnMuXG4gICAgICAgICh0aGlzLmZpbHRlclRtcGwgYXMgYW55KS5fcmVzdWx0cyA9IFtdO1xuXG4gICAgICAgIGlmIChfLmlzRW1wdHkoY29sdW1ucykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0bXBsID0gJyc7XG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgbGV0IGF0dHJzVG1wbCA9ICcnO1xuICAgICAgICAgICAgbGV0IGN1c3RvbVRtcGwgPSAnJztcbiAgICAgICAgICAgIF8uZm9yRWFjaChjb2wsICh2YWwsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghXy5pc1VuZGVmaW5lZCh2YWwpICYmIHZhbCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgY3VzdG9tIGV4cHJlc3Npb24gaXMgcHJlc2VudCwga2VlcCBpdCBpbnNpZGUgdGFibGUgY29sdW1uLiBFbHNlLCBrZWVwIGFzIGF0dHJpYnV0ZVxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnY3VzdG9tRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbVRtcGwgPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyc1RtcGwgKz0gYCAke2tleX09XCIke3ZhbH1cImA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRtcGwgKz0gYDx3bS10YWJsZS1jb2x1bW4gJHthdHRyc1RtcGx9IHRhYmxlTmFtZT1cIiR7dGhpcy5uYW1lfSR7KHRoaXMgYXMgYW55KS4kYXR0cnMuZ2V0KCd0YWJsZV9yZWZlcmVuY2UnKX1cIj4ke2N1c3RvbVRtcGx9PC93bS10YWJsZS1jb2x1bW4+YDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZHluYW1pY1RhYmxlUmVmLmNsZWFyKCk7XG4gICAgICAgIGlmICghdGhpcy5fZHluYW1pY0NvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuX2R5bmFtaWNDb250ZXh0ID0gT2JqZWN0LmNyZWF0ZSh0aGlzLnZpZXdQYXJlbnQpO1xuICAgICAgICAgICAgdGhpcy5fZHluYW1pY0NvbnRleHRbdGhpcy5nZXRBdHRyKCd3bVRhYmxlJyldID0gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vT2ZDb2x1bW5zID0gY29sdW1ucy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnlSZWYgPSBhd2FpdCB0aGlzLmR5bmFtaWNDb21wb25lbnRQcm92aWRlci5nZXRDb21wb25lbnRGYWN0b3J5UmVmKFxuICAgICAgICAgICAgJ2FwcC10YWJsZS1keW5hbWljLScgKyB0aGlzLndpZGdldElkLFxuICAgICAgICAgICAgdG1wbCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBub0NhY2hlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRyYW5zcGlsZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuZHluYW1pY1RhYmxlUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5UmVmLCAwLCB0aGlzLmluaik7XG4gICAgICAgIGV4dGVuZFByb3RvKGNvbXBvbmVudC5pbnN0YW5jZSwgdGhpcy5fZHluYW1pY0NvbnRleHQpO1xuICAgICAgICB0aGlzLiRlbGVtZW50LmZpbmQoJy5keW5hbWljLXRhYmxlLWNvbnRhaW5lcicpWzBdLmFwcGVuZENoaWxkKGNvbXBvbmVudC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcmVwYXJlQ29sRGVmcyhkYXRhKSB7XG4gICAgICAgIGxldCBkZWZhdWx0RmllbGREZWZzO1xuICAgICAgICBsZXQgcHJvcGVydGllcztcbiAgICAgICAgbGV0IGNvbHVtbkluZGV4ID0gMDtcbiAgICAgICAgbGV0IGhlYWRlckluZGV4ID0gMDtcblxuICAgICAgICB0aGlzLmZpZWxkRGVmcyA9IFtdO1xuICAgICAgICB0aGlzLmhlYWRlckNvbmZpZyA9IFtdO1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB7fTtcbiAgICAgICAgLyogaWYgcHJvcGVydGllcyBtYXAgaXMgZXhpc3RlZCB0aGVuIGZldGNoIHRoZSBjb2x1bW4gY29uZmlndXJhdGlvbiBmb3IgYWxsIG5lc3RlZCBsZXZlbHMgdXNpbmcgdXRpbCBmdW5jdGlvbiAqL1xuICAgICAgICBwcm9wZXJ0aWVzID0gZGF0YTtcbiAgICAgICAgLypjYWxsIHV0aWxpdHkgZnVuY3Rpb24gdG8gcHJlcGFyZSBmaWVsZERlZnMgZm9yIGdyaWQgYWdhaW5zdCBnaXZlbiBkYXRhIChBIE1BWCBPRiAxMCBDT0xVTU5TIE9OTFkpKi9cbiAgICAgICAgZGVmYXVsdEZpZWxkRGVmcyA9IHByZXBhcmVGaWVsZERlZnMocHJvcGVydGllcyk7XG5cbiAgICAgICAgLyphcHBlbmQgYWRkaXRpb25hbCBwcm9wZXJ0aWVzKi9cbiAgICAgICAgXy5mb3JFYWNoKGRlZmF1bHRGaWVsZERlZnMsIGNvbHVtbkRlZiA9PiB7XG4gICAgICAgICAgICBjb2x1bW5EZWYuYmluZGluZyA9IGNvbHVtbkRlZi5maWVsZDtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5jYXB0aW9uID0gY29sdW1uRGVmLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgY29sdW1uRGVmLnBjRGlzcGxheSA9IHRydWU7XG4gICAgICAgICAgICBjb2x1bW5EZWYubW9iaWxlRGlzcGxheSA9IHRydWU7XG4gICAgICAgICAgICBjb2x1bW5EZWYudGFibGV0RGlzcGxheSA9IHRydWU7XG4gICAgICAgICAgICBjb2x1bW5EZWYuc2VhcmNoYWJsZSA9IHRydWU7XG4gICAgICAgICAgICBjb2x1bW5EZWYuc2hvd2luZmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi50eXBlICA9ICdzdHJpbmcnO1xuICAgICAgICAgICAgLy8gRml4IGZvciBbV01TLTE5NjY4XSBhbmQgW1dNUy0xOTY2OV0tIEFkZGluZyBpbmRleCBhbmQgaGVhZGVySW5kZXggZm9yIER5bmFtaWMgREIgY29sdW1ucy5cbiAgICAgICAgICAgIC8vIE5vdGU6IHdlIGRvbid0IGhhdmUgY29sdW1uIGdyb3VwcyBmb3IgRHluYW1pYyBEQlxuICAgICAgICAgICAgY29sdW1uRGVmLmluZGV4ID0gY29sdW1uSW5kZXg7XG4gICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5kZXggPSBoZWFkZXJJbmRleDtcbiAgICAgICAgICAgIGNvbHVtbkluZGV4Kys7XG4gICAgICAgICAgICBoZWFkZXJJbmRleCsrO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZWZhdWx0RmllbGREZWZzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1tjb2wuZmllbGRdID0gY29sO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWRhdGFyZW5kZXInLCB7JGRhdGE6IGRhdGEsICRjb2x1bW5zOiB0aGlzLmNvbHVtbnMsIGRhdGE6IGRhdGEsIGNvbHVtbnM6IHRoaXMuY29sdW1uc30pO1xuXG4gICAgICAgIGRlZmF1bHRGaWVsZERlZnMgPSBbXTtcbiAgICAgICAgLy8gQXBwbHkgdGhlIGNoYW5nZXMgbWFkZSBieSB0aGUgdXNlclxuICAgICAgICBfLmZvckVhY2godGhpcy5jb2x1bW5zLCB2YWwgPT4ge1xuICAgICAgICAgICAgZGVmYXVsdEZpZWxkRGVmcy5wdXNoKHZhbCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVEeW5hbWljQ29sdW1ucyhkZWZhdWx0RmllbGREZWZzKTtcbiAgICB9XG5cbiAgICBjcmVhdGVHcmlkQ29sdW1ucyhkYXRhKSB7XG4gICAgICAgIC8qIHRoaXMgY2FsbCBiYWNrIGZ1bmN0aW9uIHJlY2VpdmVzIHRoZSBkYXRhIGZyb20gdGhlIHZhcmlhYmxlICovXG4gICAgICAgIC8qIGNoZWNrIHdoZXRoZXIgZGF0YSBpcyB2YWxpZCBvciBub3QgKi9cbiAgICAgICAgY29uc3QgZGF0YVZhbGlkID0gZGF0YSAmJiAhZGF0YS5lcnJvcjtcbiAgICAgICAgLyppZiB0aGUgZGF0YSBpcyB0eXBlIGpzb24gb2JqZWN0LCBtYWtlIGl0IGFuIGFycmF5IG9mIHRoZSBvYmplY3QqL1xuICAgICAgICBpZiAoZGF0YVZhbGlkICYmICFfLmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgIH1cbiAgICAgICAgLyogaWYgdGhlIGRhdGEgaXMgZW1wdHksIHNob3cgbm9kYXRhbWVzc2FnZSAqL1xuICAgICAgICBpZiAoXy5pc0VtcHR5KGRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLnNldEdyaWREYXRhKGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkYXRhVmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvKiBpZiBuZXcgY29sdW1ucyB0byBiZSByZW5kZXJlZCwgcHJlcGFyZSBkZWZhdWx0IGZpZWxkRGVmcyBmb3IgdGhlIGRhdGEgcHJvdmlkZWQqL1xuICAgICAgICB0aGlzLnByZXBhcmVDb2xEZWZzKGRhdGEpO1xuXG4gICAgICAgIHRoaXMuc2VydmVyRGF0YSA9IGRhdGE7XG4gICAgICAgIHRoaXMuc2V0R3JpZERhdGEodGhpcy5zZXJ2ZXJEYXRhKTtcbiAgICB9XG5cbiAgICBnZXRTb3J0RXhwcigpIHtcbiAgICAgICAgbGV0IHNvcnRFeHA7XG4gICAgICAgIGxldCBwYWdpbmdPcHRpb25zO1xuICAgICAgICBpZiAodGhpcy5kYXRhc291cmNlICYmIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX1BBR0VBQkxFKSkge1xuICAgICAgICAgICAgcGFnaW5nT3B0aW9ucyA9IHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9QQUdJTkdfT1BUSU9OUyk7XG4gICAgICAgICAgICBzb3J0RXhwID0gXy5pc0VtcHR5KHBhZ2luZ09wdGlvbnMpID8gJycgOiBnZXRPcmRlckJ5RXhwcihwYWdpbmdPcHRpb25zLnNvcnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzb3J0RXhwIHx8ICcnO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92PzogYW55KSB7XG4gICAgICAgIGxldCBlbmFibGVOZXdSb3c7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdkYXRhc291cmNlJzpcbiAgICAgICAgICAgICAgICAvLyBGaXggZm9yIFtXTVMtMjM2NTNdIHdoZW4gc3RhcnRVcGRhdGUgaXMgZmFsc2UgKHJlcXVlc3Qgb24gcGFnZSBsb2FkIHByb3BlcnR5IGlzIHVuY2hlY2tlZCksXG4gICAgICAgICAgICAgICAgLy8gdGhlbiBzZXQgc3RhdHVzIG1zZyBhcyBcIk5vIGRhdGEgZm91bmRcIlxuICAgICAgICAgICAgICAgIGlmIChudi5zdGFydFVwZGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZUluZmxpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy53YXRjaFZhcmlhYmxlRGF0YVNldCh0aGlzLmRhdGFzZXQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25EYXRhU291cmNlQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXRhc2V0JzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkgJiYgdGhpcy5ncmlkT3B0aW9ucy5nZXRDdXJyZW50UGFnZSgpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNOZXh0UGFnZURhdGEoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5iaW5kZGF0YXNvdXJjZSAmJiAhdGhpcy5kYXRhc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaWYgdGFibGUgaXMgaW5zaWRlIGxpc3QgdGhlbiB0YWJsZSBkYXRhc2V0IHdpbGwgYmUgc2V0IGFzIFwiaXRlbS5YWFhcIiBhbmQgdGhlcmUgaXMgbm8gZGF0YXNvdXJjZS5cbiAgICAgICAgICAgICAgICAvLyBTbyBleHRyYWN0aW5nIGRhdGFzb3VyY2UgZnJvbSB0aGUgZGF0c2V0IGJvdW5kIGV4cHJlc3Npb24uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50TGlzdCAmJiAhdGhpcy5kYXRhc291cmNlICYmIF8uc3RhcnRzV2l0aCh0aGlzLmJpbmRkYXRhc2V0LCAnaXRlbScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZSA9IGdldERhdGFzb3VyY2VGcm9tRXhwcih0aGlzLndpZGdldC4kYXR0cnMuZ2V0KCdkYXRhc2V0Ym91bmRleHByJyksIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMuaXNOZXh0UGFnZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gZmV0Y2hpbmcgbmV4dCBwYWdlIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNEYXRhVXBkYXRlZEJ5VXNlcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGRhdGFzZXQgaXMgdXBkYXRlZCBmcm9tIHNjcmlwdFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRJc0RhdGFVcGRhdGVkQnlVc2VyKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMYXN0QWN0aW9uVG9EYXRhc2V0VXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzTmV4dFBhZ2VEYXRhKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBmb3IgU3RhdGljIFZhcmlhYmxlcyB3aXRoIFJldGFpbiBTdGF0ZSBlbmFibGVkLCBwcmV2ZW50IFRhYmxlIGZyb20gcmVuZGVyaW5nIG1vcmUgdGhhbiBvbmNlXG4gICAgICAgICAgICAgICAgaWYgKCEoXy5nZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gJ3dtLlZhcmlhYmxlJyAmJiB0aGlzLl9wYWdlTG9hZCAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2F0Y2hWYXJpYWJsZURhdGFTZXQobnYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2ZpbHRlcm1vZGUnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2ZpbHRlcm1vZGUnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWFyY2hsYWJlbCc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc2VhcmNoTGFiZWwnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICduYXZpZ2F0aW9uJzpcbiAgICAgICAgICAgICAgICBpZiAobnYgPT09ICdBZHZhbmNlZCcpIHsgLy8gU3VwcG9ydCBmb3Igb2xkZXIgcHJvamVjdHMgd2hlcmUgbmF2aWdhdGlvbiB0eXBlIHdhcyBhZHZhbmNlZCBpbnN0ZWFkIG9mIGNsYXNpY1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb24gPSAnQ2xhc3NpYyc7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG52ICE9PSAnTm9uZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93bmF2aWdhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ25hdmlnYXRpb24nLCB0aGlzLm5hdmlnYXRpb24pO1xuICAgICAgICAgICAgICAgIHRoaXMub25EZW1hbmRMb2FkID0gbnYgPT09IE5BVklHQVRJT05fVFlQRS5PTkRFTUFORCA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmluZlNjcm9sbCA9IG52ID09PSBOQVZJR0FUSU9OX1RZUEUuU0NST0xMID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMubmF2Q29udHJvbHMgPSBudjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyaWRmaXJzdHJvd3NlbGVjdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignc2VsZWN0Rmlyc3RSb3cnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdncmlkY2xhc3MnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnY3NzQ2xhc3NOYW1lcy5ncmlkJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbm9kYXRhbWVzc2FnZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdkYXRhU3RhdGVzLm5vZGF0YScsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xvYWRpbmdkYXRhbXNnJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ2RhdGFTdGF0ZXMubG9hZGluZycsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xvYWRpbmdpY29uJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ2xvYWRpbmdpY29uJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3BhY2luZyc6XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdzcGFjaW5nJywgbnYpO1xuICAgICAgICAgICAgICAgIGlmIChudiA9PT0gJ2NvbmRlbnNlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2l6ZSA9ICdzbWFsbCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2l6ZSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2V4cG9ydGZvcm1hdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5leHBvcnRPcHRpb25zID0gW107XG4gICAgICAgICAgICAgICAgaWYgKG52KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFBvcHVsYXRlIG9wdGlvbnMgZm9yIGV4cG9ydCBkcm9wIGRvd24gbWVudVxuICAgICAgICAgICAgICAgICAgICBfLmZvckVhY2goXy5zcGxpdChudiwgJywnKSwgdHlwZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydE9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogZXhwb3J0SWNvbk1hcHBpbmdbdHlwZV1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzaG93bmV3cm93JzpcbiAgICAgICAgICAgICAgICAvLyBFbmFibGUgbmV3IHJvdyBpZiBzaG93bmV3IGlzIHRydWUgb3IgYWRkTmV3Um93IGJ1dG9uIGlzIHByZXNlbnRcbiAgICAgICAgICAgICAgICBlbmFibGVOZXdSb3cgPSBudiB8fCBfLnNvbWUodGhpcy5hY3Rpb25zLCBhY3QgPT4gXy5pbmNsdWRlcyhhY3QuYWN0aW9uLCAnYWRkTmV3Um93KCknKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdhY3Rpb25zRW5hYmxlZC5uZXcnLCBlbmFibGVOZXdSb3cpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncGFnZXNpemUnOlxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5vcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICBtYXhSZXN1bHRzOiBudlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLndpZGdldC5tYXhSZXN1bHRzID0gbnY7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm1heFJlc3VsdHMgPSBudjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29uZGVtYW5kbWVzc2FnZSc6XG4gICAgICAgICAgICAgICAgaWYgKG52KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLm9uLWRlbWFuZC1kYXRhZ3JpZCA+IGEnKS50ZXh0KG52KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5vbmRlbWFuZG1lc3NhZ2UgPSBudjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3ZpZXdsZXNzbWVzc2FnZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy52aWV3bGVzc21lc3NhZ2UgPSBudjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Nob3cnOlxuICAgICAgICAgICAgICAgIGlmIChudikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Nob3cnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2hpZGUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EYXRhU291cmNlQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgIHRyaWdnZXJGbihjb2wub25EYXRhU291cmNlQ2hhbmdlICYmIGNvbC5vbkRhdGFTb3VyY2VDaGFuZ2UuYmluZChjb2wpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhckFjdGlvblJvd1ZhcnMoKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uUm93SW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYWN0aW9uUm93UGFnZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignYWN0aW9uUm93SW5kZXgnLCB1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdhY3Rpb25Sb3dQYWdlJywgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBvblN0eWxlQ2hhbmdlKGtleSwgbnYsIG92KSB7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICd3aWR0aCc6XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldEdyaWREaW1lbnNpb25zJywgJ3dpZHRoJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaGVpZ2h0JzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0R3JpZERpbWVuc2lvbnMnLCAnaGVpZ2h0JywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIub25TdHlsZUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgfVxuXG4gICAgcG9wdWxhdGVBY3Rpb25zKCkge1xuICAgICAgICB0aGlzLl9hY3Rpb25zLmhlYWRlciA9IFtdO1xuICAgICAgICB0aGlzLl9hY3Rpb25zLmZvb3RlciA9IFtdO1xuICAgICAgICBfLmZvckVhY2godGhpcy5hY3Rpb25zLCAoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhhY3Rpb24ucG9zaXRpb24sICdoZWFkZXInKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FjdGlvbnMuaGVhZGVyLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfLmluY2x1ZGVzKGFjdGlvbi5wb3NpdGlvbiwgJ2Zvb3RlcicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWN0aW9ucy5mb290ZXIucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIG1ldGhvZCB3aWxsIHJlbmRlciB0aGUgZmlsdGVyIHJvdy5cbiAgICByZW5kZXJEeW5hbWljRmlsdGVyQ29sdW1uKGZpbHRlVGVtUmVmKSB7XG4gICAgICAgIC8vIEZvciBkeW5hbWljIHRhYmxlIG1hbnVhbGx5IHB1c2hpbmcgdGhlIGZpbHRlcnRlbXBsYXRlUmVmIGFzIHRlbXBsYXRlUmVmIHdpbGwgbm90IGJlIGF2YWlsYWJsZSBwcmlvci5cbiAgICAgICAgaWYgKHRoaXMuaXNkeW5hbWljdGFibGUpIHtcbiAgICAgICAgICAgICh0aGlzLmZpbHRlclRtcGwgYXMgYW55KS5fcmVzdWx0cy5wdXNoKGZpbHRlVGVtUmVmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyQ29sdW1ucyh0YWJsZUNvbHVtbiwgY29sSW5kZXgpIHtcbiAgICAgICAgaWYgKGlzTW9iaWxlKCkgJiYgdGhpcy52aWV3cG9ydC5pc01vYmlsZVR5cGUpIHtcbiAgICAgICAgICAgIGlmICghdGFibGVDb2x1bW4ubW9iaWxlRGlzcGxheSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdwb3J0LmlzVGFibGV0VHlwZSkge1xuICAgICAgICAgICAgaWYgKCF0YWJsZUNvbHVtbi50YWJsZXREaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0YWJsZUNvbHVtbi5wY0Rpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhYmxlQ29sdW1uWydwcmltYXJ5LWtleSddKSB7XG4gICAgICAgICAgICB0aGlzLnByaW1hcnlLZXkucHVzaCh0YWJsZUNvbHVtbi5maWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWVsZERlZnNbY29sSW5kZXhdID0gdGFibGVDb2x1bW47XG4gICAgICAgIGNvbnN0IGNvbENvdW50ID0gdGhpcy5maWVsZERlZnMubGVuZ3RoO1xuICAgICAgICB0aGlzLmZ1bGxGaWVsZERlZnMucHVzaCh0YWJsZUNvbHVtbik7XG4gICAgICAgIHRoaXMucm93RmlsdGVyW3RhYmxlQ29sdW1uLmZpZWxkXSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5maWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zW2NvbC5maWVsZF0gPSBjb2w7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBJZiBkeW5hbWljIGRhdGF0YWJsZSBhbmQgbGFzdCBjb2x1bW4sIHBhc3MgdGhlIGNvbHVtbnMgdG8ganF1ZXJ5IGRhdGF0YWJsZVxuICAgICAgICBpZiAodGhpcy5pc2R5bmFtaWN0YWJsZSAmJiBjb2xDb3VudCA9PT0gdGhpcy5ub09mQ29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJPcGVyYXRpb25Db2x1bW5zKCk7XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdjb2xEZWZzJywgdGhpcy5maWVsZERlZnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJGb3JtRmllbGQobmFtZSwgZm9ybUZpZWxkKSB7XG4gICAgICAgIHRoaXMuZm9ybWZpZWxkc1tuYW1lXSA9IGZvcm1GaWVsZDtcbiAgICB9XG5cbiAgICByZWdpc3RlckFjdGlvbnModGFibGVBY3Rpb24pIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zLnB1c2godGFibGVBY3Rpb24pO1xuICAgICAgICB0aGlzLnBvcHVsYXRlQWN0aW9ucygpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyUm93KHRhYmxlUm93LCByb3dJbnN0YW5jZSkge1xuICAgICAgICB0aGlzLnJvd0RlZiA9IHRhYmxlUm93O1xuICAgICAgICB0aGlzLnJvd0luc3RhbmNlID0gcm93SW5zdGFuY2U7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnY3NzQ2xhc3NOYW1lcy5yb3dFeHBhbmRJY29uJywgdGhpcy5yb3dEZWYuZXhwYW5kaWNvbik7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnY3NzQ2xhc3NOYW1lcy5yb3dDb2xsYXBzZUljb24nLCB0aGlzLnJvd0RlZi5jb2xsYXBzZWljb24pO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnJvd0V4cGFuc2lvbkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnJvd0RlZiA9IHRoaXMucm93RGVmO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyUm93QWN0aW9ucyh0YWJsZVJvd0FjdGlvbikge1xuICAgICAgICB0aGlzLnJvd0FjdGlvbnMucHVzaCh0YWJsZVJvd0FjdGlvbik7XG4gICAgfVxuXG4gICAgc2VsZWN0SXRlbShpdGVtLCBkYXRhKSB7XG4gICAgICAgIC8qIHNlcnZlciBpcyBub3QgdXBkYXRpbmcgaW1tZWRpYXRlbHksIHNvIHNldCB0aGUgc2VydmVyIGRhdGEgdG8gc3VjY2VzcyBjYWxsYmFjayBkYXRhICovXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnNlcnZlckRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmlzT2JqZWN0KGl0ZW0pKSB7XG4gICAgICAgICAgICBpdGVtID0gXy5vbWl0QnkoaXRlbSwgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF8uaXNBcnJheSh2YWx1ZSkgJiYgXy5pc0VtcHR5KHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZWxlY3RSb3cnLCBpdGVtLCB0cnVlKTtcbiAgICB9XG4gICAgLyogZGVzZWxlY3QgdGhlIGdpdmVuIGl0ZW0qL1xuICAgIGRlc2VsZWN0SXRlbShpdGVtKSB7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdkZXNlbGVjdFJvdycsIGl0ZW0pO1xuICAgIH1cblxuICAgIG9uRGF0YU5hdmlnYXRvckRhdGFTZXRDaGFuZ2UobnYpIHtcbiAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgIHRoaXMuX19mdWxsRGF0YSA9IG52O1xuICAgICAgICB0aGlzLmNoZWNrRmlsdGVyc0FwcGxpZWQodGhpcy5nZXRTb3J0RXhwcigpKTtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ2xpZW50U2VhcmNoKSB7XG4gICAgICAgICAgICBkYXRhID0gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuX19mdWxsRGF0YSk7XG4gICAgICAgICAgICBpZiAoXy5pc09iamVjdChkYXRhKSAmJiAhXy5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldFNlYXJjaFJlc3VsdChkYXRhLCB0aGlzLmZpbHRlckluZm8pO1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0U29ydFJlc3VsdChkYXRhLCB0aGlzLnNvcnRJbmZvKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudjtcbiAgICB9XG5cbiAgICB0b2dnbGVNZXNzYWdlKHNob3csIHR5cGUsIG1zZywgaGVhZGVyPykge1xuICAgICAgICBpZiAoc2hvdyAmJiBtc2cpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwLm5vdGlmeUFwcChtc2csIHR5cGUsIGhlYWRlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnQoJGl0ZW0pIHtcbiAgICAgICAgbGV0IGZpbHRlckZpZWxkcztcbiAgICAgICAgY29uc3Qgc29ydE9wdGlvbnMgPSBfLmlzRW1wdHkodGhpcy5zb3J0SW5mbykgPyAnJyA6IHRoaXMuc29ydEluZm8uZmllbGQgKyAnICcgKyB0aGlzLnNvcnRJbmZvLmRpcmVjdGlvbjtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHt9O1xuICAgICAgICBsZXQgaXNWYWxpZDtcbiAgICAgICAgbGV0IHJlcXVlc3REYXRhO1xuICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGZpZWxkRGVmID0+IHtcbiAgICAgICAgICAgIC8vIERvIG5vdCBhZGQgdGhlIHJvdyBvcGVyYXRpb24gYWN0aW9ucyBjb2x1bW4gdG8gdGhlIGV4cG9ydGVkIGZpbGUuXG4gICAgICAgICAgICBpZiAoZmllbGREZWYuZmllbGQgPT09IFJPV19PUFNfRklFTEQgfHwgIWZpZWxkRGVmLnNob3cpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgJ2hlYWRlcic6IGZpZWxkRGVmLmRpc3BsYXlOYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gSWYgY29sdW1uIGhhcyBleHBvcnRleHByZXNzaW9uLCB0aGVuIHNlbmQgZm9ybSB0aGUgZXhwcmVzc2lvbiBhcyByZXF1aXJlZCBieSBiYWNrZW5kLlxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHNlbmQgdGhlIGZpZWxkIG5hbWUuXG4gICAgICAgICAgICBpZiAoZmllbGREZWYuZXhwb3J0ZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICAgICg8YW55Pm9wdGlvbikuZXhwcmVzc2lvbiA9IGZpZWxkRGVmLmV4cG9ydGV4cHJlc3Npb247XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICg8YW55Pm9wdGlvbikuZmllbGQgPSBmaWVsZERlZi5maWVsZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbHVtbnNbZmllbGREZWYuZmllbGRdID0gb3B0aW9uO1xuICAgICAgICB9KTtcbiAgICAgICAgZmlsdGVyRmllbGRzID0gdGhpcy5nZXRGaWx0ZXJGaWVsZHModGhpcy5maWx0ZXJJbmZvKTtcbiAgICAgICAgcmVxdWVzdERhdGEgPSB7XG4gICAgICAgICAgICBtYXRjaE1vZGUgOiAnYW55d2hlcmVpZ25vcmVjYXNlJyxcbiAgICAgICAgICAgIGZpbHRlckZpZWxkcyA6IGZpbHRlckZpZWxkcyxcbiAgICAgICAgICAgIG9yZGVyQnkgOiBzb3J0T3B0aW9ucyxcbiAgICAgICAgICAgIGV4cG9ydFR5cGUgOiAkaXRlbS5sYWJlbCxcbiAgICAgICAgICAgIGxvZ2ljYWxPcCA6ICdBTkQnLFxuICAgICAgICAgICAgZXhwb3J0U2l6ZSA6IHRoaXMuZXhwb3J0ZGF0YXNpemUsXG4gICAgICAgICAgICBjb2x1bW5zIDogY29sdW1uc1xuICAgICAgICB9O1xuICAgICAgICBpc1ZhbGlkID0gdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVleHBvcnQnLCB7JGRhdGE6IHJlcXVlc3REYXRhfSk7XG4gICAgICAgIGlmIChpc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3REYXRhLmZpZWxkcyA9IF8udmFsdWVzKHJlcXVlc3REYXRhLmNvbHVtbnMpO1xuICAgICAgICB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5ET1dOTE9BRCwge2RhdGE6IHJlcXVlc3REYXRhfSk7XG4gICAgfVxuXG4gICAgZXhwYW5kUm93KHJvd0lkKSB7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdleHBhbmRSb3cnLCByb3dJZCk7XG4gICAgfVxuXG4gICAgY29sbGFwc2VSb3cocm93SWQpIHtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2NvbGxhcHNlUm93Jywgcm93SWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2RvY3VtZW50Q2xpY2tCaW5kKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0ICR0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIC8vIElmIGNsaWNrIHRyaWdnZXJlZCBmcm9tIHNhbWUgZ3JpZCBvciBhIGRpYWxvZywgZG8gbm90IHNhdmUgdGhlIHJvd1xuICAgICAgICBpZiAodGhpcy4kZWxlbWVudFswXS5jb250YWlucygkdGFyZ2V0KSB8fCBldmVudC50YXJnZXQuZG9jdHlwZSB8fCBpc0lucHV0Qm9keVdyYXBwZXIoJCgkdGFyZ2V0KSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2F2ZVJvdycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3JlZHJhdyhmb3JjZVJlbmRlcikge1xuICAgICAgICBpZiAoZm9yY2VSZW5kZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZSh0aGlzLmdyaWRPcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRDb2xHcm91cFdpZHRocycpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdhZGRPclJlbW92ZVNjcm9sbCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnZva2VBY3Rpb25FdmVudCgkZXZlbnQsIGV4cHJlc3Npb246IHN0cmluZykge1xuICAgICAgICBjb25zdCBmbiA9ICRwYXJzZUV2ZW50KGV4cHJlc3Npb24pO1xuICAgICAgICBmbih0aGlzLnZpZXdQYXJlbnQsIE9iamVjdC5hc3NpZ24odGhpcy5jb250ZXh0LCB7JGV2ZW50fSkpO1xuICAgIH1cblxuICAgIC8vIGNoYW5nZSBhbmQgYmx1ciBldmVudHMgYXJlIGFkZGVkIGZyb20gdGhlIHRlbXBsYXRlXG4gICAgcHJvdGVjdGVkIGhhbmRsZUV2ZW50KG5vZGU6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueSkge1xuICAgICAgICBpZiAoZXZlbnROYW1lICE9PSAnc2VsZWN0Jykge1xuICAgICAgICAgICAgc3VwZXIuaGFuZGxlRXZlbnQodGhpcy5uYXRpdmVFbGVtZW50LCBldmVudE5hbWUsIGNhbGxiYWNrLCBsb2NhbHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJpZ2dlclVwbG9hZEV2ZW50KCRldmVudCwgZXZlbnROYW1lLCBmaWVsZE5hbWUsIHJvdykge1xuICAgICAgICBjb25zdCBwYXJhbXM6IGFueSA9IHskZXZlbnQsIHJvd307XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnROYW1lID09PSAnY2hhbmdlJykge1xuICAgICAgICAgICAgcGFyYW1zLm5ld1ZhbCA9ICRldmVudC50YXJnZXQuZmlsZXM7XG4gICAgICAgICAgICBwYXJhbXMub2xkVmFsID0gdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0uX29sZFVwbG9hZFZhbDtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdLl9vbGRVcGxvYWRWYWwgPSBwYXJhbXMubmV3VmFsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdLmludm9rZUV2ZW50Q2FsbGJhY2soZXZlbnROYW1lLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyRm9ybVdpZGdldCgpIHt9XG5cbiAgICAvLyBGb3JtIGNvbnRyb2wgYWNjZXNzb3IgbWV0aG9kcy4gVGhpcyB3aWxsIGJlIHVzZWQgZm9yIHRhYmxlIGluc2lkZSBmb3JtXG4gICAgd3JpdGVWYWx1ZSgpIHt9XG5cbiAgICBwcml2YXRlIF9vbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgICB9XG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm4pIHtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgbmdPbkRldGFjaCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRldGFjaCgpO1xuICAgICAgICBpZiAoXy5nZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gJ3dtLlZhcmlhYmxlJyAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9wYWdlTG9hZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGluZ1wiICpuZ0lmPVwidGl0bGUgfHwgc3ViaGVhZGluZyB8fCBpY29uY2xhc3MgfHwgZXhwb3J0T3B0aW9ucy5sZW5ndGggfHwgX2FjdGlvbnMuaGVhZGVyLmxlbmd0aFwiPlxuICAgIDxoMyBjbGFzcz1cInBhbmVsLXRpdGxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiYXBwLWljb24gcGFuZWwtaWNvbiB7e2ljb25jbGFzc319XCIgKm5nSWY9XCJpY29uY2xhc3NcIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiIFtpbm5lckhUTUxdPVwidGl0bGVcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiIFtpbm5lckhUTUxdPVwic3ViaGVhZGluZ1wiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsLWFjdGlvbnMgYXBwLWRhdGFncmlkLWFjdGlvbnNcIiAqbmdJZj1cImV4cG9ydE9wdGlvbnMubGVuZ3RoIHx8IF9hY3Rpb25zLmhlYWRlci5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBfYWN0aW9ucy5oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJidG4ud2lkZ2V0VHlwZSA9PT0gJ2J1dHRvbicgPyBidXR0b25SZWYgOiBhbmNob3JSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2J0bjpidG59XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxkaXYgd21NZW51IGRyb3Bkb3duIGNhcHRpb24uYmluZD1cImFwcExvY2FsZS5MQUJFTF9FWFBPUlRcIiAqbmdJZj1cImV4cG9ydE9wdGlvbnMubGVuZ3RoXCIgIGF1dG9jbG9zZT1cImFsd2F5c1wiIGF0dHIubmFtZT1cInt7bmFtZX19LWV4cG9ydFwiXG4gICAgICAgICAgICAgICAgZGF0YXNldC5iaW5kPVwiZXhwb3J0T3B0aW9uc1wiIHNlbGVjdC5ldmVudD1cImV4cG9ydCgkaXRlbSlcIiBtZW51cG9zaXRpb249XCJkb3duLGxlZnRcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9oMz5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImFwcC1kYXRhZ3JpZFwiICNkYXRhZ3JpZEVsZW1lbnQ+PC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJwYW5lbC1mb290ZXIgY2xlYXJmaXhcIiBbaGlkZGVuXT1cIiFfYWN0aW9ucy5mb290ZXIubGVuZ3RoICYmICghc2hvd25hdmlnYXRpb24gfHwgKG9uRGVtYW5kTG9hZCAmJiBkYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHQpIHx8IGRhdGFOYXZpZ2F0b3I/LmRhdGFTaXplIDw9IHBhZ2VzaXplKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJhcHAtZGF0YWdyaWQtcGFnaW5hdG9yXCIgW2hpZGRlbl09XCIoIWRhdGFOYXZpZ2F0b3I/LmRhdGFTaXplICYmICFkYXRhTmF2aWdhdG9yLmRhdGFzb3VyY2U/LnBhZ2luYXRpb24/Lm5leHQpIHx8ICFzaG93bmF2aWdhdGlvbiB8fCAob25EZW1hbmRMb2FkICYmIGRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlTmV4dCkgfHwgZGF0YU5hdmlnYXRvcj8uZGF0YVNpemUgPD0gcGFnZXNpemVcIj5cbiAgICAgICAgPG5hdiB3bVBhZ2luYXRpb24gc2hvdy5iaW5kPVwic2hvd25hdmlnYXRpb25cIiBuYXZpZ2F0aW9uYWxpZ24uYmluZD1cIm5hdmlnYXRpb25hbGlnblwiXG4gICAgICAgICAgICAgbmF2aWdhdGlvbnNpemUuYmluZD1cIm5hdmlnYXRpb25TaXplXCJcbiAgICAgICAgICAgICBuYXZpZ2F0aW9uLmJpbmQ9XCJuYXZDb250cm9sc1wiIHNob3dyZWNvcmRjb3VudC5iaW5kPVwic2hvd3JlY29yZGNvdW50XCIgbWF4c2l6ZS5iaW5kPVwibWF4c2l6ZVwiXG4gICAgICAgICAgICAgYm91bmRhcnlsaW5rcy5iaW5kPVwiYm91bmRhcnlsaW5rc1wiXG4gICAgICAgICAgICAgZm9yY2VlbGxpcHNlcy5iaW5kPVwiZm9yY2VlbGxpcHNlc1wiIGRpcmVjdGlvbmxpbmtzLmJpbmQ9XCJkaXJlY3Rpb25saW5rc1wiPjwvbmF2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJhcHAtZGF0YWdyaWQtYWN0aW9uc1wiICpuZ0lmPVwiX2FjdGlvbnMuZm9vdGVyLmxlbmd0aFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidG4gb2YgX2FjdGlvbnMuZm9vdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJidG4ud2lkZ2V0VHlwZSA9PT0gJ2J1dHRvbicgPyBidXR0b25SZWYgOiBhbmNob3JSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2J0bjpidG59XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9uUmVmIGxldC1idG49XCJidG5cIj5cbiAgICA8YnV0dG9uIHdtQnV0dG9uIGNhcHRpb24uYmluZD1cImJ0bi5kaXNwbGF5TmFtZVwiIHNob3cuYmluZD1cImJ0bi5zaG93XCIgY2xhc3MuYmluZD1cImJ0bi5jbGFzc1wiICBpY29uY2xhc3MuYmluZD1cImJ0bi5pY29uY2xhc3NcIiAoY2xpY2spPVwiaW52b2tlQWN0aW9uRXZlbnQoJGV2ZW50LCBidG4uYWN0aW9uKVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2J0bi1zbSc6IHNwYWNpbmcgPT09ICdjb25kZW5zZWQnLCAnZGlzYWJsZWQtbmV3JzogYnRuLmtleSA9PT0gJ2FkZE5ld1JvdycgJiYgKGlzR3JpZEVkaXRNb2RlIHx8IGlzTG9hZGluZyl9XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBzaG9ydGN1dGtleS5iaW5kPVwiYnRuLnNob3J0Y3V0a2V5XCIgdGFiaW5kZXguYmluZD1cImJ0bi50YWJpbmRleFwiIGhpbnQuYmluZD1cImJ0bi50aXRsZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiYnRuLmRpc3BsYXlOYW1lXCIgZGlzYWJsZWQuYmluZD1cImJ0bi5kaXNhYmxlZFwiIGNvbmRpdGlvbmFsY2xhc3MuYmluZD1cImJ0bi5jb25kaXRpb25hbGNsYXNzXCIgY29uZGl0aW9uYWxzdHlsZS5iaW5kPVwiYnRuLmNvbmRpdGlvbmFsc3R5bGVcIj48L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYW5jaG9yUmVmIGxldC1idG49XCJidG5cIj5cbiAgICA8YSB3bUFuY2hvciBjYXB0aW9uLmJpbmQ9XCJidG4uZGlzcGxheU5hbWVcIiBzaG93LmJpbmQ9XCJidG4uc2hvd1wiIGNsYXNzLmJpbmQ9XCJidG4uY2xhc3NcIiAgaWNvbmNsYXNzLmJpbmQ9XCJidG4uaWNvbmNsYXNzXCIgKGNsaWNrKT1cImludm9rZUFjdGlvbkV2ZW50KCRldmVudCwgYnRuLmFjdGlvbilcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieydidG4tc20nOiBzcGFjaW5nID09PSAnY29uZGVuc2VkJywgJ2Rpc2FibGVkLW5ldyc6IGJ0bi5rZXkgPT09ICdhZGROZXdSb3cnICYmIChpc0dyaWRFZGl0TW9kZSB8fCBpc0xvYWRpbmcpfVwiXG4gICAgICAgICAgICBzaG9ydGN1dGtleS5iaW5kPVwiYnRuLnNob3J0Y3V0a2V5XCIgdGFiaW5kZXguYmluZD1cImJ0bi50YWJpbmRleFwiIGhpbnQuYmluZD1cImJ0bi50aXRsZVwiXG4gICAgICAgICAgICBoeXBlcmxpbmsuYmluZD1cImJ0bi5oeXBlcmxpbmtcIiB0YXJnZXQuYmluZD1cImJ0bi50YXJnZXRcIiBjb25kaXRpb25hbGNsYXNzLmJpbmQ9XCJidG4uY29uZGl0aW9uYWxjbGFzc1wiIGNvbmRpdGlvbmFsc3R5bGUuYmluZD1cImJ0bi5jb25kaXRpb25hbHN0eWxlXCI+PC9hPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBoaWRkZW4+XG4gICAgPG5nLWNvbnRhaW5lciAjbXVsdGlDb2x1bW5GaWx0ZXJWaWV3PjwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAjaW5saW5lRWRpdFZpZXc+PC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICNpbmxpbmVFZGl0TmV3Vmlldz48L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgI3Jvd0FjdGlvbnNWaWV3PjwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAjcm93RXhwYW5zaW9uQWN0aW9uVmlldz48L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgI2N1c3RvbUV4cHJWaWV3PjwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAjZHluYW1pY1RhYmxlPjwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAjcm93RGV0YWlsVmlldz48L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgY2xhc3M9XCJkeW5hbWljLXRhYmxlLWNvbnRhaW5lclwiPjwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
2189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2RhdGEvdGFibGUvc3JjL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3RhYmxlL3NyYy90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQWEsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVOLE9BQU8sRUFBd0IsV0FBVyxFQUFhLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakcsT0FBTyxFQUFDLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUV2RSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFDSCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFFBQVEsRUFDUixNQUFNLEVBQ04sR0FBRyxFQUNILFlBQVksRUFDWixVQUFVLEVBQ1YsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixZQUFZLEVBRVosaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsU0FBUyxFQUNULDJCQUEyQixFQUMzQixXQUFXLEVBQ1gsZUFBZSxFQUNsQixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxF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LElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUVILHNCQUFzQjtrQkFBdkYsZUFBZTttQkFBQyx3QkFBd0IsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7WUFDOUIsZ0JBQWdCO2tCQUFqRCxZQUFZO21CQUFDLGtCQUFrQjtZQUNzQyxnQkFBZ0I7a0JBQXJGLFNBQVM7bUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDVyx5QkFBeUI7a0JBQXZHLFNBQVM7bUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUVSLGVBQWU7a0JBQW5GLFNBQVM7bUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFzMUI3QixVQUFVO2tCQUEvQyxZQUFZO21CQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEF0dHJpYnV0ZSwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIENvbnRlbnRDaGlsZCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbmplY3RvciwgTmdab25lLCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBRdWVyeUxpc3QsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Vmlld3BvcnQsIFN0YXRlUGVyc2lzdGVuY2UsIFBhZ2luYXRpb25TZXJ2aWNlfSBmcm9tICdAd20vY29yZSc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgICAkYXBwRGlnZXN0LFxuICAgICRwYXJzZUV2ZW50LFxuICAgICR1bndhdGNoLFxuICAgICR3YXRjaCxcbiAgICBBcHAsXG4gICAgY2xvc2VQb3BvdmVyLFxuICAgIERhdGFTb3VyY2UsXG4gICAgZ2V0Q2xvbmVkT2JqZWN0LFxuICAgIGdldERhdGFzb3VyY2VGcm9tRXhwcixcbiAgICBnZXRWYWxpZEpTT04sXG4gICAgSURHZW5lcmF0b3IsXG4gICAgaXNEYXRhU291cmNlRXF1YWwsXG4gICAgaXNEZWZpbmVkLFxuICAgIGlzTW9iaWxlLFxuICAgIHRyaWdnZXJGbixcbiAgICBEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXIsXG4gICAgZXh0ZW5kUHJvdG8sXG4gICAgJGludm9rZVdhdGNoZXJzXG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IEVESVRfTU9ERSwgZ2V0Q29uZGl0aW9uYWxDbGFzc2VzLCBnZXRPcmRlckJ5RXhwciwgZ2V0Um93T3BlcmF0aW9uc0NvbHVtbiwgcHJlcGFyZUZpZWxkRGVmcywgcHJvdmlkZUFzLCBwcm92aWRlQXNXaWRnZXRSZWYsIFN0eWxhYmxlQ29tcG9uZW50LCBzdHlsZXIsIHRyYW5zZm9ybURhdGEsIFRydXN0QXNQaXBlLCBleHRyYWN0RGF0YVNvdXJjZU5hbWUsIERFQk9VTkNFX1RJTUVTLCBOQVZJR0FUSU9OX1RZUEUsIHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzIH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvZGF0YS9wYWdpbmF0aW9uJztcblxuaW1wb3J0IHsgTGlzdENvbXBvbmVudCB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2RhdGEvbGlzdCc7XG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi90YWJsZS5wcm9wcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmRlY2xhcmUgY29uc3QgXywgJDtcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLWdyaWQgYXBwLXBhbmVsIHBhbmVsJztcbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLXRhYmxlJywgaG9zdENsYXNzOiBERUZBVUxUX0NMU307XG5cbmNvbnN0IGV4cG9ydEljb25NYXBwaW5nID0ge1xuICAgIEVYQ0VMOiAnZmEgZmEtZmlsZS1leGNlbC1vJyxcbiAgICBDU1Y6ICdmYSBmYS1maWxlLXRleHQtbydcbn07XG5cbmNvbnN0IFJPV19PUFNfRklFTEQgPSAncm93T3BlcmF0aW9ucyc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuY29uc3QgaXNJbnB1dEJvZHlXcmFwcGVyID0gdGFyZ2V0ID0+IHtcbiAgICBjb25zdCBjbGFzc2VzID0gWycuZHJvcGRvd24tbWVudScsICcudWliLXR5cGVhaGVhZC1tYXRjaCcsICcubW9kYWwtZGlhbG9nJywgJy50b2FzdCddO1xuICAgIGxldCBpc0lucHV0ID0gZmFsc2U7XG4gICAgY2xhc3Nlcy5mb3JFYWNoKGNscyA9PiB7XG4gICAgICAgIGlmICh0YXJnZXQuY2xvc2VzdChjbHMpLmxlbmd0aCkge1xuICAgICAgICAgICAgaXNJbnB1dCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBhdHRycyA9IFsnYnNkYXRlcGlja2VyZGF5ZGVjb3JhdG9yJ107XG4gICAgaWYgKCFpc0lucHV0KSB7XG4gICAgICAgIGF0dHJzLmZvckVhY2goYXR0ciA9PiB7XG4gICAgICAgICAgICBpZiAodGFyZ2V0WzBdLmhhc0F0dHJpYnV0ZShhdHRyKSkge1xuICAgICAgICAgICAgICAgIGlzSW5wdXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpc0lucHV0O1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdbd21UYWJsZV0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBcyhUYWJsZUNvbXBvbmVudCwgTkdfVkFMVUVfQUNDRVNTT1IsIHRydWUpLFxuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoVGFibGVDb21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBleHRlbmRzIFN0eWxhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcbiAgICBAVmlld0NoaWxkKFBhZ2luYXRpb25Db21wb25lbnQsIHtzdGF0aWM6IHRydWV9KSBkYXRhTmF2aWdhdG9yO1xuXG4gICAgQFZpZXdDaGlsZCgnZGF0YWdyaWRFbGVtZW50Jywge3N0YXRpYzogdHJ1ZX0pIHByaXZhdGUgX3RhYmxlRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ3Jvd0FjdGlvblRtcGwnLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHJvd0FjdGlvblRtcGw6IFF1ZXJ5TGlzdDxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ3Jvd0FjdGlvbnNWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcm93QWN0aW9uc1ZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKCdmaWx0ZXJUbXBsJywge2Rlc2NlbmRhbnRzOiB0cnVlfSkgZmlsdGVyVG1wbDogUXVlcnlMaXN0PGFueT47XG4gICAgQFZpZXdDaGlsZCgnbXVsdGlDb2x1bW5GaWx0ZXJWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgZmlsdGVyVmlld1JlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oJ2lubGluZVdpZGdldFRtcGwnLCB7ZGVzY2VuZGFudHM6IHRydWV9KSBpbmxpbmVXaWRnZXRUbXBsOiBRdWVyeUxpc3Q8YW55PjtcbiAgICBAVmlld0NoaWxkKCdpbmxpbmVFZGl0VmlldycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGlubGluZUVkaXRWaWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbignaW5saW5lV2lkZ2V0VG1wbE5ldycsIHtkZXNjZW5kYW50czogdHJ1ZX0pIGlubGluZVdpZGdldE5ld1RtcGw6IFF1ZXJ5TGlzdDxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2lubGluZUVkaXROZXdWaWV3JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgaW5saW5lRWRpdE5ld1ZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKCdjdXN0b21FeHByVG1wbCcsIHtkZXNjZW5kYW50czogdHJ1ZX0pIGN1c3RvbUV4cHJUbXBsOiBRdWVyeUxpc3Q8YW55PjtcbiAgICBAVmlld0NoaWxkKCdjdXN0b21FeHByVmlldycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGN1c3RvbUV4cHJWaWV3UmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbigncm93RXhwYW5zaW9uQWN0aW9uVG1wbCcsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgcm93RXhwYW5zaW9uQWN0aW9uVG1wbDogUXVlcnlMaXN0PGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgncm93RXhwYW5zaW9uVG1wbCcpIHJvd0V4cGFuc2lvblRtcGw6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQFZpZXdDaGlsZCgncm93RGV0YWlsVmlldycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHJvd0RldGFpbFZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG4gICAgQFZpZXdDaGlsZCgncm93RXhwYW5zaW9uQWN0aW9uVmlldycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHJvd0V4cGFuc2lvbkFjdGlvblZpZXdSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdkeW5hbWljVGFibGUnLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBkeW5hbWljVGFibGVSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBwcml2YXRlIHJvd0FjdGlvbnNDb21waWxlZFRsOiBhbnkgID0ge307XG4gICAgcHJpdmF0ZSByb3dGaWx0ZXJDb21wbGllZFRsOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIGlubGluZUNvbXBsaWVkVGw6IGFueSA9IHt9O1xuICAgIHByaXZhdGUgaW5saW5lTmV3Q29tcGxpZWRUbDogYW55ID0ge307XG4gICAgcHJpdmF0ZSBjdXN0b21FeHByQ29tcGlsZWRUbDogYW55ID0ge307XG4gICAgcHJpdmF0ZSBjdXN0b21FeHByQ29tcGlsZWRTdW1tYXJ5VGw6IGFueSA9IHt9O1xuICAgIHByaXZhdGUgcm93RGVmSW5zdGFuY2VzID0ge307XG4gICAgcHJpdmF0ZSByb3dEZWZNYXAgPSB7fTtcbiAgICBwcml2YXRlIHJvd0V4cGFuc2lvbkFjdGlvblRsOiBhbnkgPSB7fTtcblxuICAgIGNvbHVtbnMgPSB7fTtcbiAgICBmb3JtZmllbGRzID0ge307XG4gICAgZGF0YWdyaWRFbGVtZW50O1xuICAgIGRhdGFzb3VyY2U7XG4gICAgZWRpdG1vZGU7XG4gICAgZW5hYmxlY29sdW1uc2VsZWN0aW9uO1xuICAgIGVuYWJsZXNvcnQgPSB0cnVlO1xuICAgIGZpbHRlcm1vZGU7XG4gICAgc2VhcmNobGFiZWw7XG4gICAgZm9ybXBvc2l0aW9uO1xuICAgIGdyaWRjbGFzcztcbiAgICBncmlkZmlyc3Ryb3dzZWxlY3Q7XG4gICAgaWNvbmNsYXNzO1xuICAgIG9uZGVtYW5kbWVzc2FnZTtcbiAgICB2aWV3bGVzc21lc3NhZ2U7XG4gICAgc2hvd3ZpZXdsZXNzYnV0dG9uID0gZmFsc2U7XG4gICAgX3RyaWdnZXJlZEJ5VXNlcjtcbiAgICBpc0dyaWRFZGl0TW9kZTtcbiAgICBsb2FkaW5nZGF0YW1zZztcbiAgICBtdWx0aXNlbGVjdDtcbiAgICBuYW1lO1xuICAgIF9pc0RlcGVuZGVudDtcbiAgICBuYXZpZ2F0aW9uO1xuICAgIG5hdmlnYXRpb25TaXplO1xuICAgIG5hdmlnYXRpb25hbGlnbjtcbiAgICBub2RhdGFtZXNzYWdlO1xuICAgIHBhZ2VzaXplO1xuICAgIHByZXZEYXRhO1xuICAgIHByaW1hcnlLZXkgPSBbXTtcbiAgICByYWRpb3NlbGVjdDtcbiAgICByb3djbGFzcztcbiAgICByb3duZ2NsYXNzO1xuICAgIHNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICBzaG93aGVhZGVyO1xuICAgIHNob3dyZWNvcmRjb3VudDtcbiAgICBzaG93cm93aW5kZXg7XG4gICAgc3ViaGVhZGluZztcbiAgICB0aXRsZTtcbiAgICBzaG93bmV3cm93O1xuICAgIGRlbGV0ZW9rdGV4dDtcbiAgICBkZWxldGVjYW5jZWx0ZXh0O1xuICAgIG9uRXJyb3I7XG4gICAgb25Sb3dpbnNlcnQ7XG4gICAgb25Sb3d1cGRhdGU7XG4gICAgb25Sb3dkZWxldGU7XG4gICAgc3RhdGVoYW5kbGVyO1xuICAgIHNlbGVjdGVkSXRlbUNoYW5nZSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgc2VsZWN0ZWRJdGVtQ2hhbmdlJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICBhY3Rpb25zID0gW107XG4gICAgX2FjdGlvbnMgPSB7XG4gICAgICAgICdoZWFkZXInOiBbXSxcbiAgICAgICAgJ2Zvb3Rlcic6IFtdXG4gICAgfTtcbiAgICBleHBvcnRPcHRpb25zID0gW107XG4gICAgZXhwb3J0ZGF0YXNpemU7XG4gICAgZm9ybVdpZGdldHM7XG4gICAgaGVhZGVyQ29uZmlnID0gW107XG4gICAgaXRlbXMgPSBbXTtcbiAgICBuYXZDb250cm9scztcbiAgICByb3dBY3Rpb25zID0gW107XG4gICAgc2VsZWN0ZWRDb2x1bW5zO1xuICAgIHNob3duYXZpZ2F0aW9uID0gZmFsc2U7XG4gICAgc2hvd0ZpcnN0Um93ID0gZmFsc2U7XG4gICAgZGF0YXNldDtcbiAgICBfbGl2ZVRhYmxlUGFyZW50O1xuICAgIGlzUGFydE9mTGl2ZUdyaWQ7XG4gICAgZ3JpZEVsZW1lbnQ7XG4gICAgaXNOZXdSb3dJbnNlcnRlZDtcbiAgICBpc01vYmlsZTtcbiAgICBpc0xvYWRpbmc7XG4gICAgaXNSb3dEZWxldGVkO1xuICAgIGRvY3VtZW50Q2xpY2tCaW5kID0gbm9vcDtcbiAgICBhY3Rpb25Sb3dJbmRleDtcbiAgICBhY3Rpb25Sb3dQYWdlO1xuICAgIHByZXZGaWx0ZXJFeHByZXNzaW9uOiBhbnkgPSBbXTtcbiAgICBmaWVsZERlZnMgPSBbXTtcbiAgICByb3dEZWY6IGFueSA9IHt9O1xuICAgIHJvd0luc3RhbmNlOiBhbnkgPSB7fTtcblxuICAgIHByaXZhdGUgZnVsbEZpZWxkRGVmcyA9IFtdO1xuICAgIHByaXZhdGUgX19mdWxsRGF0YTtcbiAgICBwcml2YXRlIGRhdGFOYXZpZ2F0b3JXYXRjaGVkO1xuICAgIHByaXZhdGUgbmF2aWdhdG9yUmVzdWx0V2F0Y2g7XG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaDtcbiAgICBwcml2YXRlIGZpbHRlckluZm87XG4gICAgcHJpdmF0ZSBzb3J0SW5mbztcbiAgICBwcml2YXRlIHNlcnZlckRhdGE7XG4gICAgcHJpdmF0ZSBmaWx0ZXJudWxscmVjb3JkcztcbiAgICBwcml2YXRlIHZhcmlhYmxlSW5mbGlnaHQgPSB0cnVlO1xuICAgIHByaXZhdGUgaXNkeW5hbWljdGFibGU7XG4gICAgcHJpdmF0ZSBfZHluYW1pY0NvbnRleHQ7XG4gICAgcHJpdmF0ZSBub09mQ29sdW1ucztcbiAgICBwdWJsaWMgb25EZW1hbmRMb2FkO1xuICAgIHB1YmxpYyBpbmZTY3JvbGw7XG4gICAgcHJpdmF0ZSBpc0RhdGFMb2FkaW5nO1xuICAgIHByaXZhdGUgY3VycmVudFBhZ2U7XG4gICAgcHJpdmF0ZSBhcHBseVByb3BzID0gbmV3IE1hcCgpO1xuXG4gICAgcmVkcmF3ID0gXy5kZWJvdW5jZSh0aGlzLl9yZWRyYXcsIDE1MCk7XG4gICAgZGVib3VuY2VkSGFuZGxlTG9hZGluZyA9IF8uZGVib3VuY2UodGhpcy5oYW5kbGVMb2FkaW5nLCAzNTApO1xuXG4gICAgLy8gRmlsdGVyIGFuZCBTb3J0IE1ldGhvZHNcbiAgICByb3dGaWx0ZXI6IGFueSA9IHt9O1xuICAgIG1hdGNoTW9kZVR5cGVzTWFwO1xuICAgIG1hdGNoTW9kZU1zZ3M7XG4gICAgZW1wdHlNYXRjaE1vZGVzO1xuICAgIF9zZWFyY2hTb3J0SGFuZGxlciA9IG5vb3A7XG4gICAgc2VhcmNoU29ydEhhbmRsZXIgPSAoLi4uYXJncykgPT4geyB0aGlzLl9zZWFyY2hTb3J0SGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTsgfTtcbiAgICBfaXNQYWdlU2VhcmNoO1xuICAgIF9pc0NsaWVudFNlYXJjaDtcbiAgICBjaGVja0ZpbHRlcnNBcHBsaWVkOiBGdW5jdGlvbjtcbiAgICBnZXRTZWFyY2hSZXN1bHQ6IEZ1bmN0aW9uO1xuICAgIGdldFNvcnRSZXN1bHQ6IEZ1bmN0aW9uO1xuICAgIGdldEZpbHRlckZpZWxkczogRnVuY3Rpb247XG4gICAgb25Sb3dGaWx0ZXJDaGFuZ2UgPSBub29wO1xuICAgIG9uRmlsdGVyQ29uZGl0aW9uU2VsZWN0ID0gbm9vcDtcbiAgICBzaG93Q2xlYXJJY29uID0gbm9vcDtcbiAgICBjbGVhclJvd0ZpbHRlciA9IG5vb3A7XG4gICAgYWRqdXN0Q29udGFpbmVyID0gbm9vcDtcbiAgICBnZXROYXZpZ2F0aW9uVGFyZ2V0QnlTb3J0SW5mbzogRnVuY3Rpb247XG4gICAgcmVmcmVzaERhdGE6IEZ1bmN0aW9uO1xuICAgIGNsZWFyRmlsdGVyOiBGdW5jdGlvbjtcblxuICAgIC8vIElubGluZSBFZGl0XG4gICAgbmdmb3JtOiBGb3JtR3JvdXA7XG4gICAgdXBkYXRlVmFyaWFibGU6IEZ1bmN0aW9uO1xuICAgIHVwZGF0ZVJlY29yZDogRnVuY3Rpb247XG4gICAgZGVsZXRlUmVjb3JkOiBGdW5jdGlvbjtcbiAgICBpbnNlcnRSZWNvcmQ6IEZ1bmN0aW9uO1xuICAgIGVkaXRSb3c6IEZ1bmN0aW9uO1xuICAgIGFkZE5ld1JvdzogRnVuY3Rpb247XG4gICAgYWRkUm93OiBGdW5jdGlvbjtcbiAgICBkZWxldGVSb3c6IEZ1bmN0aW9uO1xuICAgIG9uUmVjb3JkRGVsZXRlOiBGdW5jdGlvbjtcbiAgICBpbml0aWF0ZVNlbGVjdEl0ZW06IEZ1bmN0aW9uO1xuICAgIGhpZGVFZGl0Um93OiBGdW5jdGlvbjtcbiAgICBzYXZlUm93OiBGdW5jdGlvbjtcbiAgICBjYW5jZWxSb3c6IEZ1bmN0aW9uO1xuICAgIHByaXZhdGUgX3BhZ2VMb2FkID0gdHJ1ZTtcblxuICAgIHB1YmxpYyBncmlkT3B0aW9ucyA9IHtcbiAgICAgICAgZGF0YTogW10sXG4gICAgICAgIGNvbERlZnM6IFtdLFxuICAgICAgICBzdGFydFJvd0luZGV4OiAxLFxuICAgICAgICBtb2RlOiAnJyxcbiAgICAgICAgc29ydEluZm86IHtcbiAgICAgICAgICAgIGZpZWxkOiAnJyxcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJydcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVybW9kZTogJycsXG4gICAgICAgIHNlYXJjaExhYmVsOiAnJyxcbiAgICAgICAgcm93QWN0aW9uczogW10sXG4gICAgICAgIGhlYWRlckNvbmZpZzogW10sXG4gICAgICAgIHJvd0NsYXNzOiAnJyxcbiAgICAgICAgZWRpdG1vZGU6ICcnLFxuICAgICAgICBmb3JtUG9zaXRpb246ICcnLFxuICAgICAgICBpc01vYmlsZTogZmFsc2UsXG4gICAgICAgIHJvd0V4cGFuc2lvbkVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICByb3dEZWY6IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnMCdcbiAgICAgICAgfSxcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIG1lc3NhZ2VzOiB7XG4gICAgICAgICAgICBzZWxlY3RGaWVsZDogJ1NlbGVjdCBGaWVsZCdcbiAgICAgICAgfSxcbiAgICAgICAgc2VjdXJpdHlVdGlsczoge1xuICAgICAgICAgICAgcGlwZVRyYW5zZm9ybSA6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIG5hdmlnYXRpb246ICcnLFxuICAgICAgICBpc2R5bmFtaWN0YWJsZTogJycsXG4gICAgICAgIGRlbGV0ZWRSb3dJbmRleDogLTEsXG4gICAgICAgIGxhc3RBY3Rpb25QZXJmb3JtZWQ6ICdzY3JvbGwnLFxuICAgICAgICBpc1NlYXJjaFRyaWdlcnJlZDogZmFsc2UsXG4gICAgICAgIGlzRGF0YXNldFVwZGF0ZWQ6IGZhbHNlLFxuICAgICAgICBpc0RhdGFVcGRhdGVkQnlVc2VyOiBmYWxzZSxcbiAgICAgICAgc2hvd3ZpZXdsZXNzYnV0dG9uOiBmYWxzZSxcbiAgICAgICAgb25kZW1hbmRtZXNzYWdlOiAnJyxcbiAgICAgICAgdmlld2xlc3NtZXNzYWdlOiAnJyxcbiAgICAgICAgbG9hZGluZ2RhdGFtc2c6ICcnLFxuICAgICAgICBpc05leHRQYWdlRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBBQ1RJT05TOiB7XG4gICAgICAgICAgICAnREVMRVRFJzogJ2RlbGV0ZScsXG4gICAgICAgICAgICAnRURJVCc6ICdlZGl0JyxcbiAgICAgICAgICAgICdTRUFSQ0hfT1JfU09SVCc6ICdzZWFyY2hfb3Jfc29ydCcsXG4gICAgICAgICAgICAnREVGQVVMVCc6ICdzY3JvbGwnLFxuICAgICAgICAgICAgJ0ZJTFRFUl9DUklURVJJQScgOiAnZmlsdGVyJyxcbiAgICAgICAgICAgICdEQVRBU0VUX1VQREFURSc6ICdkYXRhc2V0X3VwZGF0ZSdcbiAgICAgICAgfSxcbiAgICAgICAgYWN0aW9uUm93SW5kZXg6IHVuZGVmaW5lZCxcbiAgICAgICAgYWN0aW9uUm93UGFnZTogdW5kZWZpbmVkLFxuICAgICAgICBpc0xhc3RQYWdlIDogZmFsc2UsXG4gICAgICAgIC8vIGdldCB0aGUgY3VycmVudCBwYWdlIG51bWJlclxuICAgICAgICBnZXRDdXJyZW50UGFnZTogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIF8uZ2V0KHRoaXMuZGF0YU5hdmlnYXRvciwgJ2RuLmN1cnJlbnRQYWdlJykgfHwgMTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gc2V0IHRoZSBwYWdlIG51bWJlclxuICAgICAgICBzZXRDdXJyZW50UGFnZTogKHBhZ2VOdW0pID0+IHtcbiAgICAgICAgICAgIF8uc2V0KHRoaXMuZGF0YU5hdmlnYXRvciwgJ2RuLmN1cnJlbnRQYWdlJywgcGFnZU51bSB8fCAxKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RGF0YVNvdXJjZTogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gZ2V0IHRoZSBwYWdlIGxpbWl0XG4gICAgICAgIGdldFBhZ2VTaXplOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYWdlc2l6ZTtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRQYWdlQ291bnQgOiAoKSA9PntcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFOYXZpZ2F0b3IucGFnZUNvdW50O1xuICAgICAgICB9LFxuICAgICAgICBlbmFibGVOYXZpZ2F0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLndpZGdldC5pc0Rpc2FibGVOZXh0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLndpZGdldC5pc0Rpc2FibGVMYXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5tb2RlID0gJ3ZpZXdsZXNzJztcbiAgICAgICAgfSxcbiAgICAgICAgLy8gc2V0IHRoZSBkZWxldGVkIHJvdyBpbmRleFxuICAgICAgICBzZXREZWxldGVkUm93SW5kZXg6IChpZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignZGVsZXRlZFJvd0luZGV4JywgaWQpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBzZXRzIHRoZSBsYXN0IGFjdGlvbiBwZXJmb3JtZWQgbGlrZSBlZGl0LCBkZWxldGUgZXRjLlxuICAgICAgICBzZXRMYXN0QWN0aW9uUGVyZm9ybWVkOiAoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdsYXN0QWN0aW9uUGVyZm9ybWVkJywgYWN0aW9uIHx8IHRoaXMuZ3JpZE9wdGlvbnMubGFzdEFjdGlvblBlcmZvcm1lZCk7XG4gICAgICAgIH0sXG4gICAgICAgIGlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWRPcHRpb25zLm5hdmlnYXRpb24gPT09ICdTY3JvbGwnIHx8IHRoaXMuZ3JpZE9wdGlvbnMubmF2aWdhdGlvbiA9PT0gJ09uLURlbWFuZCc7XG4gICAgICAgIH0sXG4gICAgICAgIHNldElzU2VhcmNoVHJpZ2VycmVkOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2lzU2VhcmNoVHJpZ2VycmVkJywgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRJc0RhdGFzZXRVcGRhdGVkOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2lzRGF0YXNldFVwZGF0ZWQnLCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vICBGaXggZm9yIFtXTVMtMjMyNjNdOiAnaXNOZXh0UGFnZURhdGEnIGZsYWcgaXMgc2V0IHRvIHRydWUgLT4gaWYgdXNlciBmZXRjaGluZyB0aGUgbmV4dCBwYWdlIGRhdGEgYnkgY2xpY2tpbmcgb25Mb2FkIG1vcmUgb3Igc2Nyb2xsXG4gICAgICAgIHNldElzTmV4dFBhZ2VEYXRhOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2lzTmV4dFBhZ2VEYXRhJywgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICAvLyAgRml4IGZvciBbV01TLTIzMjYzXTogJ2lzRGF0YVVwZGF0ZWRCeVVzZXInIGZsYWcgaXMgc2V0IHRvIHRydWUgLT4gaWYgdXNlciBjaGFuZ2VzIHRoZSBkYXRhc2V0IGZyb20gc2NyaXB0XG4gICAgICAgIHNldElzRGF0YVVwZGF0ZWRCeVVzZXI6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignaXNEYXRhVXBkYXRlZEJ5VXNlcicsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25EYXRhUmVuZGVyOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWREYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2RhdGFyZW5kZXInLCB7JGRhdGE6IHRoaXMuZ3JpZERhdGEsIGRhdGE6IHRoaXMuZ3JpZERhdGF9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0IHJvd3Mgc2VsZWN0ZWQgaW4gcHJldmlvdXMgcGFnZXMuIChOb3QgZmluZGluZyBpbnRlcnNlY3Rpb24gb2YgZGF0YSBhbmQgc2VsZWN0ZWRpdGVtcyBhcyBpdCB3aWxsIGJlIGhlYXZ5KVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZWxlY3RSb3dzJywgdGhpcy5pdGVtcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkUm93cycpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBPbiByZW5kZXIsIGFwcGx5IHRoZSBmaWx0ZXJzIHNldCBmb3IgcXVlcnkgc2VydmljZSB2YXJpYWJsZVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc1BhZ2VTZWFyY2ggJiYgdGhpcy5maWx0ZXJJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU29ydEhhbmRsZXIodGhpcy5maWx0ZXJJbmZvLCB1bmRlZmluZWQsICdzZWFyY2gnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Sb3dTZWxlY3Q6IChyb3csIGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkUm93cycpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ2hhbmdlLm5leHQodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuYWRkUm93SW5kZXgocm93KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCAmJiByb3dEYXRhLiRpbmRleCAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScgJiYgdGhpcy5kYXRhTmF2aWdhdG9yICYmIHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzLmluZGV4T2YodGhpcy5uYXZpZ2F0aW9uKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqID0ge3BhZ2U6IHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSwgaW5kZXg6IHJvd0RhdGEuJGluZGV4IC0gMX07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdzZWxlY3RlZEl0ZW0nKSAgJiYgdGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfLnNvbWUod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLCBvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLCB7J3NlbGVjdGVkSXRlbSc6IHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbX0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMsIHsnc2VsZWN0ZWRJdGVtJzogW29ial19KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUmV0YWluIFN0YXRlIGhhbmRsaW5nIG9uIFdpZGdldCAnICsgdGhpcy5uYW1lICsgJyBpcyBub3Qgc3VwcG9ydGVkIGZvciBjdXJyZW50IHBhZ2luYXRpb24gdHlwZS4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdyb3dzZWxlY3QnLCB7JGRhdGE6IHJvd0RhdGEsICRldmVudDogZSwgcm93OiByb3dEYXRhfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gYXNzaWducyB0aGUgaXRlbXMgb24gY2FwdHVyZSBwaGFzZSBvZiB0aGUgY2xpY2sgaGFuZGxlci5cbiAgICAgICAgYXNzaWduU2VsZWN0ZWRJdGVtczogKHJvdywgZSwgcm93SW5mbykgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAqIGluIGNhc2Ugb2Ygc2luZ2xlIHNlbGVjdCwgdXBkYXRlIHRoZSBpdGVtcyB3aXRoIG91dCBjaGFuZ2luZyB0aGUgcmVmZXJlbmNlLlxuICAgICAgICAgICAgICAgICAqIGZvciBtdWx0aSBzZWxlY3QsIGtlZXAgb2xkIHNlbGVjdGVkIGl0ZW1zIGluIHRhY3RcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAvL0ZpeCBmb3IgW1dNUy0yNTExMF06IEFkZCByb3cgdG8gaXRlbXMgbGlzdCBvbmx5IGlmIHRoZSByb3cgaXMgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKF8uZmluZEluZGV4KHRoaXMuaXRlbXMsIHJvdykgPT09IC0xICYmIChyb3dJbmZvPy5fc2VsZWN0ZWQgPT09IHVuZGVmaW5lZCB8fCByb3dJbmZvPy5fc2VsZWN0ZWQgPT0gdHJ1ZSB8fCAodGhpcy5ncmlkZmlyc3Ryb3dzZWxlY3QgJiYgcm93SW5mbz8ucm93SWQgPT0gMCAmJiAhdGhpcy5zaG93Rmlyc3RSb3cpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm93SW5mbz8ucm93SWQgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZpcnN0Um93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHJvdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUm93RGJsQ2xpY2s6IChyb3csIGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLmFkZFJvd0luZGV4KHJvdyk7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2RibGNsaWNrJywgeyRkYXRhOiByb3dEYXRhLCAkZXZlbnQ6IGUsIHJvdzogcm93RGF0YX0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJvd0Rlc2VsZWN0OiAocm93LCBlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMgPSBfLnB1bGxBbGxXaXRoKHRoaXMuaXRlbXMsIFtyb3ddLCBfLmlzRXF1YWwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRSb3dzJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncm93ZGVzZWxlY3QnLCB7JGRhdGE6IHJvdywgJGV2ZW50OiBlLCByb3d9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuYWRkUm93SW5kZXgocm93KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJyAmJiB1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlcy5pbmRleE9mKHRoaXMubmF2aWdhdGlvbikgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmogPSB7cGFnZTogdGhpcy5kYXRhTmF2aWdhdG9yLmRuLmN1cnJlbnRQYWdlLCBpbmRleDogcm93RGF0YS4kaW5kZXggLSAxfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc2VsZWN0ZWRJdGVtJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLnJlbW92ZSh3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0sIGZ1bmN0aW9uKHNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXy5pc0VxdWFsKHNlbGVjdGVkSXRlbSwgb2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2UucmVtb3ZlV2lkZ2V0U3RhdGUodGhpcywgJ3NlbGVjdGVkSXRlbScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcywgeydzZWxlY3RlZEl0ZW0nOiB3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW19KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JldGFpbiBTdGF0ZSBoYW5kbGluZyBvbiBXaWRnZXQgJyArIHRoaXMubmFtZSArICcgaXMgbm90IHN1cHBvcnRlZCBmb3IgY3VycmVudCBwYWdpbmF0aW9uIHR5cGUuJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBjYWxsT25Sb3dEZXNlbGVjdEV2ZW50OiAocm93LCBlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldFNlbGVjdGVkUm93cycpO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdyb3dkZXNlbGVjdCcsIHskZGF0YTogcm93LCAkZXZlbnQ6IGUsIHJvd30pO1xuICAgICAgICB9LFxuICAgICAgICBjYWxsT25Sb3dDbGlja0V2ZW50OiAocm93LCBlKSA9PiB7XG4gICAgICAgICAgICAvLyBXTVMtMTg3NzQ6IElmIHdlIGludm9rZSBuYXZpZ2F0aW9uIGFjdGlvbiB2YXJpYWJsZSBvbiByb3djbGljayBjYWxsYmFjaywgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmluZyBvdXRzaWRlIGFuZ3VsYXIgem9uZSBzbyBhZGRpbmcgbmdab25lLnJ1blxuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBDYWxsIHJvdyBjbGljayBvbmx5IGlmIGNsaWNrIGlzIHRyaWdnZXJlZCBieSB1c2VyXG4gICAgICAgICAgICAgICAgaWYgKGUgJiYgZS5oYXNPd25Qcm9wZXJ0eSgnb3JpZ2luYWxFdmVudCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLmFkZFJvd0luZGV4KHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncm93Y2xpY2snLCB7JGRhdGE6IHJvd0RhdGEsICRldmVudDogZSwgcm93OiByb3dEYXRhfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsb3NlUG9wb3ZlcjogY2xvc2VQb3BvdmVyLFxuICAgICAgICBvbkNvbHVtblNlbGVjdDogKGNvbCwgZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRDb2x1bW5zJyk7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NvbHVtbnNlbGVjdCcsIHskZGF0YTogY29sLCAkZXZlbnQ6IGV9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Db2x1bW5EZXNlbGVjdDogKGNvbCwgZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnZ2V0U2VsZWN0ZWRDb2x1bW5zJyk7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NvbHVtbmRlc2VsZWN0JywgeyRkYXRhOiBjb2wsICRldmVudDogZX0pO1xuICAgICAgICB9LFxuICAgICAgICBvbkhlYWRlckNsaWNrOiAoY29sLCBlKSA9PiB7XG4gICAgICAgICAgICAvLyBpZiBvblNvcnQgZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZCBpbnZva2UgaXQgd2hlbiB0aGUgY29sdW1uIGhlYWRlciBpcyBjbGlja2VkXG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2hlYWRlcmNsaWNrJywgeyRldmVudDogZSwgJGRhdGE6IGNvbCwgY29sdW1uOiBjb2x9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Sb3dEZWxldGU6IChyb3csIGNhbmNlbFJvd0RlbGV0ZUNhbGxiYWNrLCBlLCBjYWxsQmFjaywgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVJlY29yZChfLmV4dGVuZCh7fSwgb3B0aW9ucywge3JvdywgJ2NhbmNlbFJvd0RlbGV0ZUNhbGxiYWNrJzogY2FuY2VsUm93RGVsZXRlQ2FsbGJhY2ssICdldnQnOiBlLCAnY2FsbEJhY2snOiBjYWxsQmFja30pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblJvd0luc2VydDogKHJvdywgZSwgY2FsbEJhY2ssIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0UmVjb3JkKF8uZXh0ZW5kKHt9LCBvcHRpb25zLCB7cm93LCBldmVudDogZSwgJ2NhbGxCYWNrJzogY2FsbEJhY2t9KSk7XG4gICAgICAgIH0sXG4gICAgICAgIGJlZm9yZVJvd1VwZGF0ZTogKHJvdywgZXZlbnROYW1lPykgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2xpdmVUYWJsZVBhcmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xpdmVUYWJsZVBhcmVudC51cGRhdGVSb3cocm93LCBldmVudE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wcmV2RGF0YSA9IGdldENsb25lZE9iamVjdChyb3cpO1xuICAgICAgICB9LFxuICAgICAgICBhZnRlclJvd1VwZGF0ZTogKHJvdywgZSwgY2FsbEJhY2ssIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUmVjb3JkKF8uZXh0ZW5kKHt9LCBvcHRpb25zLCB7cm93LCAncHJldkRhdGEnOiB0aGlzLnByZXZEYXRhLCAnZXZlbnQnOiBlLCAnY2FsbEJhY2snOiBjYWxsQmFja30pKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25CZWZvcmVSb3dVcGRhdGU6IChyb3csIGUsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZXJvd3VwZGF0ZScsIHskZXZlbnQ6IGUsICRkYXRhOiByb3csIHJvdywgb3B0aW9uczogb3B0aW9uc30pO1xuICAgICAgICB9LFxuICAgICAgICBvbkJlZm9yZVJvd0luc2VydDogKHJvdywgZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlcm93aW5zZXJ0JywgeyRldmVudDogZSwgJGRhdGE6IHJvdywgcm93LCBvcHRpb25zOiBvcHRpb25zfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQmVmb3JlUm93RGVsZXRlOiAocm93LCBlLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5hZGRSb3dJbmRleChyb3cpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlcm93ZGVsZXRlJywgeyRldmVudDogZSwgcm93OiByb3dEYXRhLCBvcHRpb25zOiBvcHRpb25zfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRm9ybVJlbmRlcjogKCRyb3csIGUsIG9wZXJhdGlvbiwgYWx3YXlzTmV3Um93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXQgPSBhbHdheXNOZXdSb3cgPyAnaW5saW5lSW5zdGFuY2VOZXcnIDogJ2lubGluZUluc3RhbmNlJztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybVdpZGdldHMgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xbd2lkZ2V0XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtV2lkZ2V0c1tjb2wuZmllbGRdID0gY29sW3dpZGdldF07XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGRpbmcgZm9ybXdpZGdldHMgdG8gdGhlIGNvbnRleHQgZm9yIGlubGluZWluc3RhbmNlIHdpZGdldCB3aGVuIGZpZWxkRGVmcyB3ZXJlIHJlYWR5XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sW3dpZGdldF0uY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFt3aWRnZXRdLmNvbnRleHQuZm9ybVdpZGdldHMgPSB0aGlzLmZvcm1XaWRnZXRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREaXNhYmxlZE9uRmllbGQob3BlcmF0aW9uLCBjb2wsIHdpZGdldCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2Zvcm1yZW5kZXInLCB7JGV2ZW50OiBlLCBmb3JtV2lkZ2V0czogdGhpcy5mb3JtV2lkZ2V0cywgJG9wZXJhdGlvbjogb3BlcmF0aW9ufSk7XG4gICAgICAgICAgICB9LCAyNTApO1xuICAgICAgICB9LFxuICAgICAgICBvbkJlZm9yZUZvcm1SZW5kZXI6IChyb3csIGUsIG9wZXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlZm9ybXJlbmRlcicsIHskZXZlbnQ6IGUsIHJvdywgJG9wZXJhdGlvbjogb3BlcmF0aW9ufSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZ2lzdGVyUm93TmdDbGFzc1dhdGNoZXI6IChyb3dEYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJvd25nY2xhc3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHdhdGNoTmFtZSA9IGAke3RoaXMud2lkZ2V0SWR9X3Jvd05nQ2xhc3NfJHtpbmRleH1gO1xuICAgICAgICAgICAgJHVud2F0Y2god2F0Y2hOYW1lKTtcbiAgICAgICAgICAgIC8vW1RvZG8tQ1NQXTogZ2VuZXJhdGUgd2F0Y2hlciBleHByIGluIHBhZ2UgaWYgcm93bmdjbGFzcyBhdHRyIGlzIHByZXNlbnQgZm9yIHRhYmxlXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCR3YXRjaCh0aGlzLnJvd25nY2xhc3MsIHRoaXMudmlld1BhcmVudCwge3Jvd30sIChudiwgb3YpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnYXBwbHlSb3dOZ0NsYXNzJywgZ2V0Q29uZGl0aW9uYWxDbGFzc2VzKG52LCBvdiksIGluZGV4KTtcbiAgICAgICAgICAgIH0sIHdhdGNoTmFtZSkpO1xuICAgICAgICB9LFxuICAgICAgICByZWdpc3RlckNvbE5nQ2xhc3NXYXRjaGVyOiAocm93RGF0YSwgY29sRGVmLCByb3dJbmRleCwgY29sSW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICghY29sRGVmWydjb2wtbmctY2xhc3MnXSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICAgICAgY29uc3Qgd2F0Y2hOYW1lID0gYCR7dGhpcy53aWRnZXRJZH1fY29sTmdDbGFzc18ke3Jvd0luZGV4fV8ke2NvbEluZGV4fWA7XG4gICAgICAgICAgICAkdW53YXRjaCh3YXRjaE5hbWUpO1xuICAgICAgICAgICAgLy9bVG9kby1DU1BdOiBnZW5lcmF0ZSB3YXRjaGVyIGV4cHIgaW4gcGFnZSBpZiBjb2wtbmctY2xhc3MgYXR0ciBpcyBwcmVzZW50IGZvciB0YWJsZVxuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigkd2F0Y2goY29sRGVmWydjb2wtbmctY2xhc3MnXSwgdGhpcy52aWV3UGFyZW50LCB7cm93fSwgKG52LCBvdikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdhcHBseUNvbE5nQ2xhc3MnLCBnZXRDb25kaXRpb25hbENsYXNzZXMobnYsIG92KSwgcm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICAgICAgICAgIH0sIHdhdGNoTmFtZSkpO1xuICAgICAgICB9LFxuICAgICAgICBjbGVhckN1c3RvbUV4cHJlc3Npb246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRXhwclZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRXhwckNvbXBpbGVkVGwgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRXhwckNvbXBpbGVkU3VtbWFyeVRsID0ge307XG4gICAgICAgIH0sXG4gICAgICAgIGNsZWFyUm93RGV0YWlsRXhwcmVzc2lvbjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3dEZXRhaWxWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLnJvd0RlZk1hcCA9IHt9O1xuICAgICAgICAgICAgdGhpcy5yb3dEZWZJbnN0YW5jZXMgPSB7fTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVDdXN0b21FeHByZXNzaW9uczogKHJvd0RhdGEsIGluZGV4LCBzdW1tYXJ5Um93PykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRDbG9uZWRSb3dPYmplY3Qocm93RGF0YSk7XG4gICAgICAgICAgICBjb25zdCBjb21waWxlVGVtcGxhdGUgPSAodG1wbCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdG1wbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbERlZiA9IHt9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgY29sRGVmXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEV2ZW50c1RvQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXN0b21FeHByVmlldyA9IHRoaXMuY3VzdG9tRXhwclZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRtcGwsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3ROb2RlID0gY3VzdG9tRXhwclZpZXcucm9vdE5vZGVzWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHJvb3ROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1jb2wtaWRlbnRpZmllcicpO1xuICAgICAgICAgICAgICAgIF8uZXh0ZW5kKGNvbERlZiwgdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0pO1xuICAgICAgICAgICAgICAgIGlmICghc3VtbWFyeVJvdykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFRsW2ZpZWxkTmFtZSArIGluZGV4XSA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRXhwckNvbXBpbGVkU3VtbWFyeVRsW2ZpZWxkTmFtZSArIGluZGV4XSA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5pc2R5bmFtaWN0YWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGREZWZzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGlsZVRlbXBsYXRlKGNvbC5jdXN0b21FeHByVG1wbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRm9yIGFsbCB0aGUgY29sdW1ucyBpbnNpZGUgdGhlIHRhYmxlLCBnZW5lcmF0ZSB0aGUgY3VzdG9tIGV4cHJlc3Npb25cbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRXhwclRtcGwuZm9yRWFjaChjb21waWxlVGVtcGxhdGUuYmluZCh0aGlzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdlbmVyYXRlUm93RXhwYW5zaW9uQ2VsbDogKHJvd0RhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIC8vIEZvciBhbGwgdGhlIGNvbHVtbnMgaW5zaWRlIHRoZSB0YWJsZSwgZ2VuZXJhdGUgdGhlIGlubGluZSB3aWRnZXRcbiAgICAgICAgICAgIHRoaXMucm93RXhwYW5zaW9uQWN0aW9uVG1wbC5mb3JFYWNoKCh0bXBsKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dFeHBhbnNpb25BY3Rpb25UbFtpbmRleF0gPSB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRtcGwsIHtyb3d9KS5yb290Tm9kZXM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0Um93RXhwYW5zaW9uQWN0aW9uOiAoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblRsW2luZGV4XTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVSb3dEZXRhaWxWaWV3OiAoJGV2ZW50LCByb3dEYXRhLCByb3dJZCwgJHRhcmdldCwgJG92ZXJsYXksIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdldENsb25lZFJvd09iamVjdChyb3dEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHJvd0RlZiA9IGdldENsb25lZE9iamVjdCh0aGlzLnJvd0RlZik7XG4gICAgICAgICAgICBpZiAodGhpcy5yb3dJbnN0YW5jZS5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVyb3dleHBhbmQnLCB7JGV2ZW50LCAkZGF0YTogcm93RGVmLCByb3d9KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJvd0RlZi5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRXhwYW5kIHRoZSByb3cgZGV0YWlsXG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgLy8gUm93IGlzIGFscmVhZHkgcmVuZGVyZWQuIFJldHVybiBoZXJlXG4gICAgICAgICAgICBpZiAodGhpcy5yb3dEZWZNYXBbcm93SWRdICYmIHRoaXMucm93RGVmTWFwW3Jvd0lkXS5jb250ZW50ID09PSByb3dEZWYuY29udGVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMucm93SW5zdGFuY2UuaW52b2tlRXZlbnRDYWxsYmFjaygncm93ZXhwYW5kJywgeyRldmVudCwgcm93LCAkZGF0YTogdGhpcy5yb3dEZWZJbnN0YW5jZXNbcm93SWRdfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yb3dEZWZNYXBbcm93SWRdID0gcm93RGVmO1xuICAgICAgICAgICAgJHRhcmdldC5lbXB0eSgpO1xuICAgICAgICAgICAgJHRhcmdldC5oaWRlKCk7XG4gICAgICAgICAgICAkb3ZlcmxheS5zaG93KCk7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgICAgIHJvd0RlZixcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyTG9hZDogKHdpZGdldCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG92ZXJsYXkuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXQuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm93RGVmSW5zdGFuY2VzW3Jvd0lkXSA9IHdpZGdldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0luc3RhbmNlLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2V4cGFuZCcsIHskZXZlbnQsIHJvdywgJGRhdGE6IHdpZGdldH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgICAgICAgICAgfX07XG4gICAgICAgICAgICBjb25zdCByb290Tm9kZSA9IHRoaXMucm93RGV0YWlsVmlld1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5yb3dFeHBhbnNpb25UbXBsLCBjb250ZXh0KS5yb290Tm9kZXNbMF07XG4gICAgICAgICAgICAkdGFyZ2V0WzBdLmFwcGVuZENoaWxkKHJvb3ROb2RlKTtcbiAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25CZWZvcmVSb3dDb2xsYXBzZTogKCRldmVudCwgcm93LCByb3dJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93SW5zdGFuY2UuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlcm93Y29sbGFwc2UnLCB7JGV2ZW50LCByb3csICRkYXRhOiB0aGlzLnJvd0RlZkluc3RhbmNlc1tyb3dJZF19KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Sb3dDb2xsYXBzZTogKCRldmVudCwgcm93KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvd0luc3RhbmNlLmludm9rZUV2ZW50Q2FsbGJhY2soJ3Jvd2NvbGxhcHNlJywgeyRldmVudCwgcm93fSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldEN1c3RvbUV4cHJlc3Npb246IChmaWVsZE5hbWUsIGluZGV4LCBzdW1tYXJ5Um93PykgPT4ge1xuICAgICAgICAgICAgbGV0IGN1c3RvbUV4cHJlc3Npb247XG4gICAgICAgICAgICBpZiAoIXN1bW1hcnlSb3cpIHtcbiAgICAgICAgICAgICAgICBjdXN0b21FeHByZXNzaW9uID0gdGhpcy5jdXN0b21FeHByQ29tcGlsZWRUbFtmaWVsZE5hbWUgKyBpbmRleF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1c3RvbUV4cHJlc3Npb24gPSB0aGlzLmN1c3RvbUV4cHJDb21waWxlZFN1bW1hcnlUbFtmaWVsZE5hbWUgKyBpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VzdG9tRXhwcmVzc2lvbiB8fCAnJztcbiAgICAgICAgfSxcbiAgICAgICAgY2xlYXJSb3dBY3Rpb25zOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvd0FjdGlvbnNWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLnJvd0FjdGlvbnNDb21waWxlZFRsID0ge307XG4gICAgICAgICAgICB0aGlzLnJvd0V4cGFuc2lvbkFjdGlvblZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMucm93RXhwYW5zaW9uQWN0aW9uVGwgPSB7fTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVSb3dBY3Rpb25zOiAocm93RGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICAgICAgdGhpcy5yb3dBY3Rpb25zQ29tcGlsZWRUbFtpbmRleF0gPSBbXTtcbiAgICAgICAgICAgIC8vIEZvciBhbGwgdGhlIGNvbHVtbnMgaW5zaWRlIHRoZSB0YWJsZSwgZ2VuZXJhdGUgdGhlIGlubGluZSB3aWRnZXRcbiAgICAgICAgICAgIHRoaXMucm93QWN0aW9uVG1wbC5mb3JFYWNoKCh0bXBsKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3dBY3Rpb25zQ29tcGlsZWRUbFtpbmRleF0ucHVzaCguLi50aGlzLnJvd0FjdGlvbnNWaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCB7cm93fSkucm9vdE5vZGVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBnZXRSb3dBY3Rpb246IChpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm93QWN0aW9uc0NvbXBpbGVkVGxbaW5kZXhdO1xuICAgICAgICB9LFxuICAgICAgICBnZW5lcmF0ZUlubGluZUVkaXRSb3c6IChyb3dEYXRhLCBhbHdheXNOZXdSb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICAgICAgaWYgKGFsd2F5c05ld1Jvdykge1xuICAgICAgICAgICAgICAgIC8vIENsZWFyIHRoZSB2aWV3IGNvbnRhaW5lciByZWZcbiAgICAgICAgICAgICAgICB0aGlzLmlubGluZUVkaXROZXdWaWV3UmVmLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVOZXdDb21wbGllZFRsID0ge307XG4gICAgICAgICAgICAgICAgLy8gRm9yIGFsbCB0aGUgY29sdW1ucyBpbnNpZGUgdGhlIHRhYmxlLCBnZW5lcmF0ZSB0aGUgaW5saW5lIHdpZGdldFxuICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lV2lkZ2V0TmV3VG1wbC5mb3JFYWNoKHRtcGwgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGROYW1lO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29udHJvbDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nZm9ybS5jb250cm9sc1tmaWVsZE5hbWUgKyAnX25ldyddIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFZhbGlkYXRpb25NZXNzYWdlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdICYmIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdLnZhbGlkYXRpb25tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFBlbmRpbmdTcGlubmVyU3RhdHVzTmV3OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdICYmIHRoaXMuY29sdW1uc1tmaWVsZE5hbWVdLnNob3dQZW5kaW5nU3Bpbm5lck5ldztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLmlubGluZUVkaXROZXdWaWV3UmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0bXBsLCBjb250ZXh0KS5yb290Tm9kZXNbMF07XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9IHJvb3ROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1jb2wtaWRlbnRpZmllcicpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlubGluZU5ld0NvbXBsaWVkVGxbZmllbGROYW1lXSA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJGb3JtKHRydWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENsZWFyIHRoZSB2aWV3IGNvbnRhaW5lciByZWZcbiAgICAgICAgICAgIHRoaXMuaW5saW5lRWRpdFZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuaW5saW5lQ29tcGxpZWRUbCA9IHt9O1xuICAgICAgICAgICAgdGhpcy5jbGVhckZvcm0oKTtcbiAgICAgICAgICAgIC8vIEZvciBhbGwgdGhlIGNvbHVtbnMgaW5zaWRlIHRoZSB0YWJsZSwgZ2VuZXJhdGUgdGhlIGlubGluZSB3aWRnZXRcbiAgICAgICAgICAgIHRoaXMuaW5saW5lV2lkZ2V0VG1wbC5mb3JFYWNoKHRtcGwgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZE5hbWU7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICBnZXRDb250cm9sOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ2Zvcm0uY29udHJvbHNbZmllbGROYW1lXSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0VmFsaWRhdGlvbk1lc3NhZ2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXSAmJiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS52YWxpZGF0aW9ubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGVuZGluZ1NwaW5uZXJTdGF0dXM6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXSAmJiB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS5zaG93UGVuZGluZ1NwaW5uZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCByb290Tm9kZSA9IHRoaXMuaW5saW5lRWRpdFZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRtcGwsIGNvbnRleHQpLnJvb3ROb2Rlc1swXTtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPSByb290Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sLWlkZW50aWZpZXInKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlubGluZUNvbXBsaWVkVGxbZmllbGROYW1lXSA9IHJvb3ROb2RlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldElubGluZUVkaXRXaWRnZXQ6IChmaWVsZE5hbWUsIHZhbHVlLCBhbHdheXNOZXdSb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChhbHdheXNOZXdSb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldEZpZWxkVmFsdWUoZmllbGROYW1lICsgJ19uZXcnLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5saW5lTmV3Q29tcGxpZWRUbFtmaWVsZE5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRGaWVsZFZhbHVlKGZpZWxkTmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5saW5lQ29tcGxpZWRUbFtmaWVsZE5hbWVdO1xuICAgICAgICB9LFxuICAgICAgICBzZXRGaWVsZFZhbHVlOiAoZmllbGROYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmdmb3JtLmNvbnRyb2xzICYmIHRoaXMubmdmb3JtLmNvbnRyb2xzW2ZpZWxkTmFtZV07XG4gICAgICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXRGaWVsZFZhbHVlOiBmaWVsZE5hbWUgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmdmb3JtLmNvbnRyb2xzICYmIHRoaXMubmdmb3JtLmNvbnRyb2xzW2ZpZWxkTmFtZV07XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbCAmJiBjb250cm9sLnZhbHVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIGZ1bmN0aW9uIHRvIGFkZCBsb2FkIG1vcmUgYnV0dG9uIHRvIHRhYmxlXG4gICAgICAgIGFkZExvYWRNb3JlQnRuOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2FkZExvYWRNb3JlQnRuJywgdGhpcy5vbmRlbWFuZG1lc3NhZ2UsIHRoaXMubG9hZGluZ2RhdGFtc2csICgkZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNOZXh0UGFnZURhdGEodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzRGF0YVVwZGF0ZWRCeVVzZXIoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMubW9kZSA9PT0gJ3ZpZXdsZXNzJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5uYXZpZ2F0ZVBhZ2UoJ2ZpcnN0JywgJGV2ZW50LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm1vZGUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm5hdmlnYXRlUGFnZSgnbmV4dCcsICRldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB0aGlzLmluZlNjcm9sbCk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIGZ1bmN0aW9uIHRvIGJpbmQgc2Nyb2xsIGV2ZW50XG4gICAgICAgIGJpbmRTY3JvbGxFdnQ6ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9ncmlkRGF0YSAmJiB0aGlzLl9ncmlkRGF0YS5sZW5ndGggJiYgdGhpcy5pbmZTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICAvLyBzbW9vdGhzY3JvbGwgZXZlbnRzIHdpbGwgYmUgYmluZGVkLlxuICAgICAgICAgICAgICAgIC8vIEFkZGVkIHRpbWVvdXQgYXMgdGhlIHRhYmxlIGh0bWwgaXMgcmVuZGVyZWQgYXQgcnVudGltZVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmJpbmRTY3JvbGxFdnQodGhpcywgJ3Rib2R5JywgREVCT1VOQ0VfVElNRVMuUEFHSU5BVElPTl9ERUJPVU5DRV9USU1FKTtcbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2VuZXJhdGVGaWx0ZXJSb3c6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIENsZWFyIHRoZSB2aWV3IGNvbnRhaW5lciByZWZcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmlld1JlZi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5yb3dGaWx0ZXJDb21wbGllZFRsID0ge307XG4gICAgICAgICAgICAvLyBGb3IgYWxsIHRoZSBjb2x1bW5zIGluc2lkZSB0aGUgdGFibGUsIGdlbmVyYXRlIHRoZSBjb21waWxlZCBmaWx0ZXIgdGVtcGxhdGVcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVG1wbC5mb3JFYWNoKCh0bXBsKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLmZpbHRlclZpZXdSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRtcGwsIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlRm46IHRoaXMub25Sb3dGaWx0ZXJDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHlNYXRjaE1vZGVzLmluZGV4T2YodGhpcy5yb3dGaWx0ZXJbZmllbGROYW1lXSAmJiB0aGlzLnJvd0ZpbHRlcltmaWVsZE5hbWVdLm1hdGNoTW9kZSkgPiAtMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLnJvb3ROb2Rlc1swXTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd0ZpbHRlckNvbXBsaWVkVGxbcm9vdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWNvbC1pZGVudGlmaWVyJyldID0gcm9vdE5vZGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RmlsdGVyV2lkZ2V0OiAoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgICAvLyBNb3ZlIHRoZSBnZW5lcmF0ZWQgZmlsdGVyIHRlbXBsYXRlIHRvIHRoZSBmaWx0ZXIgcm93XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3dGaWx0ZXJDb21wbGllZFRsW2ZpZWxkTmFtZV07XG4gICAgICAgIH0sXG4gICAgICAgIHNldEdyaWRFZGl0TW9kZTogKHZhbCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzR3JpZEVkaXRNb2RlID0gdmFsO1xuICAgICAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBzZXRHcmlkU3RhdGU6ICh2YWwpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdmFsID09PSAnbG9hZGluZyc7XG4gICAgICAgIH0sXG4gICAgICAgIC8qXG4gICAgICAgICAgICBzZXQgYWN0aW9uUm93SW5kZXggYW5kIGFjdGlvblJvd1BhZ2UgdmFsdWVzXG4gICAgICAgICAgICBhY3Rpb25Sb3dJbmRleCB3aWxsIGhhdmUgdGhlIHJvdyBpbmRleCBpbiB0aGUgZGF0YXNldCBvbiB3aGljaCBlZGl0L2RlbGV0ZSBvcGVyYXRpb24gaXMgYmVpbmcgcGVyZm9ybWVkXG4gICAgICAgICAgICBhY3Rpb25Sb3dQYWdlIHdpbGwgaGF2ZSBwYWdlIG51bWJlciBpbiB3aGljaCB0aGUgYWN0aW9uIHJvdyBpbmRleCBpcyBwcmVzZW50XG4gICAgICAgICAqL1xuICAgICAgICBzZXRBY3Rpb25Sb3dJbmRleDogKHZhbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMuaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25Sb3dJbmRleCA9IHBhcnNlSW50KHZhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignYWN0aW9uUm93SW5kZXgnLCB0aGlzLmFjdGlvblJvd0luZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoIV8uaXNOYU4odGhpcy5hY3Rpb25Sb3dJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25Sb3dQYWdlID0gTWF0aC5mbG9vcih0aGlzLmFjdGlvblJvd0luZGV4IC8gdGhpcy5wYWdlc2l6ZSkgKyAxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdhY3Rpb25Sb3dQYWdlJywgdGhpcy5hY3Rpb25Sb3dQYWdlIHx8IHRoaXMuZ3JpZE9wdGlvbnMuYWN0aW9uUm93UGFnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjbGVhckFjdGlvblJvd0luZGV4OiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNSb3dEZWxldGVkICYmICh0aGlzLmluZlNjcm9sbCB8fCB0aGlzLm9uRGVtYW5kTG9hZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQWN0aW9uUm93VmFycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBub0NoYW5nZXNEZXRlY3RlZDogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVNZXNzYWdlKHRydWUsICdpbmZvJywgJ05vIENoYW5nZXMgRGV0ZWN0ZWQnLCAnJyk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIEZ1bmN0aW9uIHRvIHJlZHJhdyB0aGUgd2lkZ2V0cyBvbiByZXNpemUgb2YgY29sdW1uc1xuICAgICAgICByZWRyYXdXaWRnZXRzOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5pbmxpbmVJbnN0YW5jZSAmJiBjb2wuaW5saW5lSW5zdGFuY2UucmVkcmF3KTtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyRm4oY29sLmlubGluZUluc3RhbmNlTmV3ICYmIGNvbC5pbmxpbmVJbnN0YW5jZU5ldy5yZWRyYXcpO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wuZmlsdGVySW5zdGFuY2UgJiYgY29sLmZpbHRlckluc3RhbmNlLnJlZHJhdyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2VhcmNoSGFuZGxlcjogdGhpcy5zZWFyY2hTb3J0SGFuZGxlci5iaW5kKHRoaXMpLFxuICAgICAgICBzb3J0SGFuZGxlcjogdGhpcy5zZWFyY2hTb3J0SGFuZGxlci5iaW5kKHRoaXMpLFxuICAgICAgICB0aW1lb3V0Q2FsbDogKGZuLCBkZWxheSkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dChmbiwgZGVsYXkpO1xuICAgICAgICB9LFxuICAgICAgICBydW5Jbk5nWm9uZTogZm4gPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKGZuKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2FmZUFwcGx5OiAoKSA9PiB7XG4gICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldFRvdWNoZWQ6IChuYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdHJsID0gdGhpcy5uZ2Zvcm0uY29udHJvbHNbbmFtZV07XG4gICAgICAgICAgICBpZiAoY3RybCkge1xuICAgICAgICAgICAgICAgIGN0cmwubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjbGVhckZvcm06IHRoaXMuY2xlYXJGb3JtLmJpbmQodGhpcyksXG4gICAgICAgIGNhbGxMb2FkSW5saW5lV2lkZ2V0RGF0YTogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mdWxsRmllbGREZWZzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChjb2wuaXNEYXRhU2V0Qm91bmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wubG9hZElubGluZVdpZGdldERhdGEgJiYgY29sLmxvYWRJbmxpbmVXaWRnZXREYXRhLmJpbmQoY29sKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIEZ1bmN0aW9uIHRvIGFwcGx5IHZhbGlkYXRvcnMgdG8gSW5saW5lIGZvcm0gY29udHJvbHNcbiAgICAgICAgYXBwbHlWYWxpZGF0aW9uczogKGNvbCwgYWx3YXlzTmV3Um93KSA9PiB7XG4gICAgICAgICAgICBpZiAoYWx3YXlzTmV3Um93KSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5hcHBseU5ld1Jvd1ZhbGlkYXRpb25zICYmIGNvbC5hcHBseU5ld1Jvd1ZhbGlkYXRpb25zLmJpbmQoY29sKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wuYXBwbHlWYWxpZGF0aW9ucyAmJiBjb2wuYXBwbHlWYWxpZGF0aW9ucy5iaW5kKGNvbCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBGdW5jdGlvbiB0byByZW1vdmUgdmFsaWRhdG9ycyBhbmQgc2V0IGZvcm0gc3RhdGUgdG8gdW50b3VjaGVkIGZvciBpbmxpbmUgZm9ybSBjb250cm9sXG4gICAgICAgIHJlbW92ZVZhbGlkYXRpb25zOiAoYWx3YXlzTmV3Um93KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZ1bGxGaWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29sLnJlYWRvbmx5ICYmIGNvbC5iaW5kaW5nICE9PSAncm93T3BlcmF0aW9ucycpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFsd2F5c05ld1Jvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5yZW1vdmVOZXdSb3dWYWxpZGF0aW9ucyAmJiBjb2wucmVtb3ZlTmV3Um93VmFsaWRhdGlvbnMuYmluZChjb2wpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJGbihjb2wucmVtb3ZlVmFsaWRhdGlvbnMgJiYgY29sLnJlbW92ZVZhbGlkYXRpb25zLmJpbmQoY29sKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIF9ncmlkRGF0YTtcbiAgICBwcml2YXRlIF9zZWxlY3RlZEl0ZW1zRXhpc3QgPSBmYWxzZTtcbiAgICBzZXQgZ3JpZERhdGEobmV3VmFsdWUpIHtcbiAgICAgICAgdGhpcy5pc0RhdGFMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yNDAxMl06IGhpZGUgbm8gZGF0YWZvdW5kIG1zZyB3aGVuIHZhcmlhYmxlSW5mbGlnaHQgaXMgdHJ1ZSBhbmQgZGF0YXNldCBpcyBlbXB0eVxuICAgICAgICBpZiAodGhpcy52YXJpYWJsZUluZmxpZ2h0ICYmIF8uaXNFbXB0eShuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgLy8gRml4IGZvciBbV01TLTI0MTA4XTogQ2hhbmdlIHRoZSBzdGF0dXMgdG8gcmVhZHkgb3Igbm9kYXRhIGZvdW5kIHdoZW4gdmFyaWFibGVJbmZsaWdodCBpcyBmYWxzZShhZnRlciBnZXR0aW5nIHRoZSBkYXRhKVxuICAgICAgICBpZiAobmV3VmFsdWUgJiYgKG5ld1ZhbHVlLmxlbmd0aCkgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAncmVhZHknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgX2dyaWREYXRhIGZpZWxkIHdpdGggdGhlIG5leHQgc2V0IG9mIGl0ZW1zIGFuZCBtb2RpZnkgdGhlIGN1cnJlbnQgcGFnZVxuICAgICAgICAgICAgW3RoaXMuX2dyaWREYXRhLCB0aGlzLmN1cnJlbnRQYWdlXSA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UudXBkYXRlRmllbGRzT25QYWdpbmF0aW9uKHRoaXMsIG5ld1ZhbHVlKTtcblxuICAgICAgICAgICAgLy8gV2hlbiBlZGl0IGFjdGlvbiBpcyBwZXJmb3JtZWQgb24gcHJldmlvdXMgcGFnZSwgdXBkYXRlIHRoZSBfZ3JpZERhdGEgZmllbGQgd2l0aCB0aGUgbW9kaWZpZWQgcm93IGRhdGFcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmxhc3RBY3Rpb25QZXJmb3JtZWQgPT09IHRoaXMuZ3JpZE9wdGlvbnMuQUNUSU9OUy5FRElUKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93SW5kZXggPSBfLmZsb29yKHRoaXMuYWN0aW9uUm93SW5kZXggJSB0aGlzLnBhZ2VzaXplKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ncmlkRGF0YS5zcGxpY2UodGhpcy5hY3Rpb25Sb3dJbmRleCwgMSAsIG5ld1ZhbHVlW3Jvd0luZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdpc0xhc3RQYWdlJywgISEodGhpcy5kYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHQpKTtcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2Ygb24gZGVtYW5kIHBhZ2luYXRpb24sIGNyZWF0ZSB0aGUgbG9hZCBtb3JlIGJ1dHRvbiBvbmx5IG9uY2UgYW5kIHNob3cgdGhlIGJ1dHRvbiB1bnRpbCBuZXh0IHBhZ2UgaXMgbm90IGRpc2FibGVkXG4gICAgICAgICAgICBpZiAoIXRoaXMuJGVsZW1lbnQuZmluZCgnLm9uLWRlbWFuZC1kYXRhZ3JpZCcpLmxlbmd0aCAmJiAhdGhpcy5kYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHQgJiYgdGhpcy5vbkRlbWFuZExvYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmFkZExvYWRNb3JlQnRuKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCh0aGlzLl9ncmlkRGF0YSAmJiB0aGlzLl9ncmlkRGF0YS5sZW5ndGgpICYmICh0aGlzLmRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlTmV4dCB8fCAhdGhpcy5pc0RhdGFMb2FkaW5nKSkge1xuICAgICAgICAgICAgICAgIC8vIHdoZW4gdGhlIG5leHQgcGFnZSBpcyBkaXNhYmxlZCBvciB3aGVuIHRoZSBkYXRhIGlzIG5vdCBsb2FkaW5nIHJlbW92ZSB0aGUgbG9hZGluZy9sb2FkIG1vcmUgYnV0dG9uIGFjY29yZGluZ2x5XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2hpZGVMb2FkaW5nSW5kaWNhdG9yJywgdGhpcy5kYXRhTmF2aWdhdG9yLmlzRGlzYWJsZU5leHQsIHRoaXMuaW5mU2Nyb2xsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2dyaWREYXRhID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0YXJ0Um93SW5kZXggPSAwO1xuICAgICAgICBsZXQgZ3JpZE9wdGlvbnM7XG5cbiAgICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy5fZ3JpZERhdGEpO1xuICAgICAgICB0aGlzLl9vblRvdWNoZWQoKTtcblxuICAgICAgICBpZiAoaXNEZWZpbmVkKG5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5iaW5kU2Nyb2xsRXZ0KCk7XG5cbiAgICAgICAgICAgIC8qU2V0dGluZyB0aGUgc2VyaWFsIG5vJ3Mgb25seSB3aGVuIHNob3cgbmF2aWdhdGlvbiBpcyBlbmFibGVkIGFuZCBkYXRhIG5hdmlnYXRvciBpcyBjb21waWxlZFxuICAgICAgICAgICAgIGFuZCBpdHMgY3VycmVudCBwYWdlIGlzIHNldCBwcm9wZXJseSovXG4gICAgICAgICAgICBpZiAodGhpcy5pc05hdmlnYXRpb25FbmFibGVkKCkgJiYgdGhpcy5kYXRhTmF2aWdhdG9yLmRuLmN1cnJlbnRQYWdlKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRSb3dJbmRleCA9ICgodGhpcy5kYXRhTmF2aWdhdG9yLmRuLmN1cnJlbnRQYWdlIC0gMSkgKiAodGhpcy5kYXRhTmF2aWdhdG9yLm1heFJlc3VsdHMgfHwgMSkpICsgMTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdzdGFydFJvd0luZGV4Jywgc3RhcnRSb3dJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBJZiBjb2xEZWZzIGFyZSBhdmFpbGFibGUsIGJ1dCBub3QgYWxyZWFkeSBzZXQgb24gdGhlIGRhdGFncmlkLCB0aGVuIHNldCB0aGVtLlxuICAgICAgICAgICAgICogVGhpcyB3aWxsIGhhcHBlbiB3aGlsZSBzd2l0Y2hpbmcgZnJvbSBtYXJrdXAgdG8gZGVzaWduIHRhYi4gKi9cbiAgICAgICAgICAgIGdyaWRPcHRpb25zID0gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2dldE9wdGlvbnMnKTtcblxuICAgICAgICAgICAgaWYgKCFncmlkT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFncmlkT3B0aW9ucy5jb2xEZWZzLmxlbmd0aCAmJiB0aGlzLmZpZWxkRGVmcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdjb2xEZWZzJywgZ2V0Q2xvbmVkT2JqZWN0KHRoaXMuZmllbGREZWZzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiBkYXRhIGFuZCBjb2xEZWZzIGFyZSBwcmVzZW50LCBjYWxsIG9uIGJlZm9yZSBkYXRhIHJlbmRlciBldmVudFxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzZHluYW1pY3RhYmxlICYmICFfLmlzRW1wdHkobmV3VmFsdWUpICYmIGdyaWRPcHRpb25zLmNvbERlZnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVkYXRhcmVuZGVyJywgeyRkYXRhOiB0aGlzLl9ncmlkRGF0YSwgJGNvbHVtbnM6IHRoaXMuY29sdW1ucywgZGF0YTogdGhpcy5fZ3JpZERhdGEsIGNvbHVtbnM6IHRoaXMuY29sdW1uc30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignZGF0YScsIGdldENsb25lZE9iamVjdCh0aGlzLl9ncmlkRGF0YSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGdyaWREYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JpZERhdGEgfHwgW107XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGVkaXRlbSgpIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDbG9uZWRPYmplY3QodGhpcy5pdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNFbXB0eSh0aGlzLml0ZW1zKSkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRDbG9uZWRPYmplY3QodGhpcy5pdGVtc1swXSk7XG4gICAgfVxuXG4gICAgc2V0IHNlbGVjdGVkaXRlbSh2YWwpIHtcbiAgICAgICAgLy8gU2VsZWN0IHRoZSByb3dzIGluIHRoZSB0YWJsZSBiYXNlZCBvbiB0aGUgbmV3IHNlbGVjdGVkIGl0ZW1zIHBhc3NlZFxuICAgICAgICB0aGlzLml0ZW1zLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZWxlY3RSb3dzJywgdmFsKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlwcmVzcycsIFsnJGV2ZW50J10pIG9uS2V5UHJlc3MgKCRldmVudDogYW55KSB7XG4gICAgICAgIGlmICgkZXZlbnQud2hpY2ggPT09IDEzKSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2VudGVya2V5cHJlc3MnLCB7JGV2ZW50LCAkZGF0YTogdGhpcy5ncmlkRGF0YX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBpbmo6IEluamVjdG9yLFxuICAgICAgICBwdWJsaWMgZmI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIGFwcDogQXBwLFxuICAgICAgICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnRQcm92aWRlcjogRHluYW1pY0NvbXBvbmVudFJlZlByb3ZpZGVyLFxuICAgICAgICBwcml2YXRlIHN0YXRlUGVyc2lzdGVuY2U6IFN0YXRlUGVyc2lzdGVuY2UsXG4gICAgICAgIHByaXZhdGUgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHZpZXdwb3J0OiBWaWV3cG9ydCxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHVibGljIHBhcmVudExpc3Q6IExpc3RDb21wb25lbnQsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2RhdGFzZXQuYmluZCcpIHB1YmxpYyBiaW5kZGF0YXNldCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXNvdXJjZS5iaW5kJykgcHVibGljIGJpbmRkYXRhc291cmNlLFxuICAgICAgICBAQXR0cmlidXRlKCdyZWFkb25seWdyaWQnKSBwdWJsaWMgcmVhZG9ubHlncmlkLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIHRydXN0QXNQaXBlOiBUcnVzdEFzUGlwZVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsKTtcbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5uZ2Zvcm0gPSBmYi5ncm91cCh7fSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRzVG9Db250ZXh0KHRoaXMuY29udGV4dCk7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVyc1RvUmVtb3ZlID0gW1xuICAgICAgICAgICAgLy8gVXBkYXRlcyBwYWdpbmF0aW9uLCBmaWx0ZXIsIHNvcnQgZXRjIG9wdGlvbnMgZm9yIHNlcnZpY2UgYW5kIGNydWQgdmFyaWFibGVzXG4gICAgICAgICAgICB0aGlzLmFwcC5zdWJzY3JpYmUoJ2NoZWNrLXN0YXRlLXBlcnNpc3RlbmNlLW9wdGlvbnMnLCBvcHRpb25zID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YVNvdXJjZU5hbWUgPSBfLmdldCh0aGlzLmRhdGFzb3VyY2UsICduYW1lJyk7XG4gICAgICAgICAgICAgICAgLy8gaW4gUHJlZmFicywgdGhpcy5kYXRhc291cmNlIGlzIG5vdCByZXNvbHZlZCBhdCB0aGUgdGltZSBvZiB2YXJpYWJsZSBpbnZvY2F0aW9uLCBzbyBhZGRpdGlvbmFsIGNoZWNrIGlzIHJlcXVpcmVkLlxuICAgICAgICAgICAgICAgIGlmICghZGF0YVNvdXJjZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZU5hbWUgPSBleHRyYWN0RGF0YVNvdXJjZU5hbWUodGhpcy5iaW5kZGF0YXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChfLmdldChvcHRpb25zLCAndmFyaWFibGUubmFtZScpICE9PSBkYXRhU291cmNlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wYWdlTG9hZCAmJiB0aGlzLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFnZUxvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aWRnZXRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHRoaXMuaGFuZGxlU3RhdGVQYXJhbXMod2lkZ2V0U3RhdGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9ICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3NlbGVjdEZpcnN0Um93JywgdGhpcy5ncmlkZmlyc3Ryb3dzZWxlY3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgIC8vIFNob3cgbG9hZGluZyBzdGF0dXMgYmFzZWQgb24gdGhlIHZhcmlhYmxlIGxpZmUgY3ljbGVcbiAgICAgICAgICAgIHRoaXMuYXBwLnN1YnNjcmliZSgndG9nZ2xlLXZhcmlhYmxlLXN0YXRlJywgb3B0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZSAmJiB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUpICYmIGlzRGF0YVNvdXJjZUVxdWFsKG9wdGlvbnMudmFyaWFibGUsIHRoaXMuZGF0YXNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3BhZ2VMb2FkICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFnZUxvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZGdldFN0YXRlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZGdldFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHRoaXMuaGFuZGxlU3RhdGVQYXJhbXMod2lkZ2V0U3RhdGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdzZWxlY3RGaXJzdFJvdycsIHRoaXMuZ3JpZGZpcnN0cm93c2VsZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpc0RlZmluZWQodGhpcy52YXJpYWJsZUluZmxpZ2h0KSA/IHRoaXMuZGVib3VuY2VkSGFuZGxlTG9hZGluZyhvcHRpb25zKSA6IHRoaXMuaGFuZGxlTG9hZGluZyhvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgdGhpcy5hcHAuc3Vic2NyaWJlKCdzZXR1cC1jdWQtbGlzdGVuZXInLCBwYXJhbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubmFtZSAhPT0gcGFyYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9pc0RlcGVuZGVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1DaGFuZ2UkXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyNTApKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMudHJpZ2dlcldNRXZlbnQuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuXG4gICAgICAgIGxpc3RlbmVyc1RvUmVtb3ZlLmZvckVhY2goIGwgPT4gdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcihsKSApO1xuXG4gICAgICAgIHRoaXMuZGVsZXRlb2t0ZXh0ID0gdGhpcy5hcHBMb2NhbGUuTEFCRUxfT0s7XG4gICAgICAgIHRoaXMuZGVsZXRlY2FuY2VsdGV4dCA9IHRoaXMuYXBwTG9jYWxlLkxBQkVMX0NBTkNFTDtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJDb250ZW50SW5pdCgpO1xuICAgICAgICB0aGlzLmhlYWRlckNvbmZpZyA9IHRoaXMuaGVhZGVyQ29uZmlnLmZpbHRlcih0aGlzLmZpbHRlckVtcHR5VmFsdWVzLmJpbmQodGhpcykpO1xuICAgICAgICBfLnJlbW92ZSh0aGlzLmZpZWxkRGVmcywgZiA9PiBmID09PSB1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCBydW5Nb2RlSW5pdGlhbFByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICBzaG93cm93aW5kZXg6ICdzaG93Um93SW5kZXgnLFxuICAgICAgICAgICAgbXVsdGlzZWxlY3Q6ICdtdWx0aXNlbGVjdCcsXG4gICAgICAgICAgICByYWRpb3NlbGVjdDogJ3Nob3dSYWRpb0NvbHVtbicsXG4gICAgICAgICAgICBmaWx0ZXJudWxscmVjb3JkczogJ2ZpbHRlck51bGxSZWNvcmRzJyxcbiAgICAgICAgICAgIGVuYWJsZXNvcnQ6ICdlbmFibGVTb3J0JyxcbiAgICAgICAgICAgIHNob3doZWFkZXI6ICdzaG93SGVhZGVyJyxcbiAgICAgICAgICAgIGVuYWJsZWNvbHVtbnNlbGVjdGlvbjogJ2VuYWJsZUNvbHVtblNlbGVjdGlvbicsXG4gICAgICAgICAgICBzaG93bmV3cm93OiAnc2hvd05ld1JvdycsXG4gICAgICAgICAgICBncmlkZmlyc3Ryb3dzZWxlY3Q6ICdzZWxlY3RGaXJzdFJvdydcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5fbGl2ZVRhYmxlUGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLmlzUGFydE9mTGl2ZUdyaWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHlncmlkIHx8ICF0aGlzLmVkaXRtb2RlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkb25seWdyaWQgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG1vZGUgPSAnJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQYXJ0T2ZMaXZlR3JpZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRtb2RlID0gdGhpcy5pc1BhcnRPZkxpdmVHcmlkLmZvcm1sYXlvdXQgPT09ICdpbmxpbmUnID8gRURJVF9NT0RFLkZPUk0gOiBFRElUX01PREUuRElBTE9HO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG1vZGUgPSB0aGlzLnJlYWRvbmx5Z3JpZCA/IEVESVRfTU9ERS5JTkxJTkUgOiAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmNvbERlZnMgPSB0aGlzLmZ1bGxGaWVsZERlZnM7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMucm93QWN0aW9ucyA9IHRoaXMucm93QWN0aW9ucztcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5oZWFkZXJDb25maWcgPSB0aGlzLmhlYWRlckNvbmZpZztcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5yb3dDbGFzcyA9IHRoaXMucm93Y2xhc3M7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuZWRpdG1vZGUgPSB0aGlzLmVkaXRtb2RlO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmZvcm1Qb3NpdGlvbiA9IHRoaXMuZm9ybXBvc2l0aW9uO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmZpbHRlcm1vZGUgPSB0aGlzLmZpbHRlcm1vZGU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2VhcmNoTGFiZWwgPSB0aGlzLnNlYXJjaGxhYmVsO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmlzTW9iaWxlID0gaXNNb2JpbGUoKTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5uYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNlY3VyaXR5VXRpbHMucGlwZVRyYW5zZm9ybSA9IHRoaXMudHJ1c3RBc1BpcGU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMubmF2aWdhdGlvbiA9IHRoaXMubmF2aWdhdGlvbjtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5pc2R5bmFtaWN0YWJsZSA9IHRoaXMuaXNkeW5hbWljdGFibGU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2hvd3ZpZXdsZXNzYnV0dG9uID0gdGhpcy5zaG93dmlld2xlc3NidXR0b247XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMub25kZW1hbmRtZXNzYWdlID0gdGhpcy5vbmRlbWFuZG1lc3NhZ2U7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMudmlld2xlc3NtZXNzYWdlID0gdGhpcy52aWV3bGVzc21lc3NhZ2U7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMubG9hZGluZ2RhdGFtc2cgPSB0aGlzLmxvYWRpbmdkYXRhbXNnO1xuXG4gICAgICAgIC8vIFdoZW4gbG9hZG9uZGVtYW5kIHByb3BlcnR5IGlzIGVuYWJsZWQoZGVmZXJsb2FkPVwidHJ1ZVwiKSBhbmQgc2hvdyBpcyB0cnVlLCBvbmx5IHRoZSBjb2x1bW4gdGl0bGVzIG9mIHRoZSBkYXRhdGFibGUgYXJlIHJlbmRlcmVkLCB0aGUgZGF0YShib2R5IG9mIHRoZSBkYXRhdGFibGUpIGlzIG5vdCBhdCBhbGwgcmVuZGVyZWQuXG4gICAgICAgIC8vIEJlY2F1c2UgdGhlIGdyaWRkYXRhIGlzIHNldHRpbmcgYmVmb3JlIHRoZSBkYXRhdGFibGUgZG9tIGlzIHJlbmRlcmVkIGJ1dCB3ZSBhcmUgc2VuZGluZyBlbXB0eSBkYXRhIHRvIHRoZSBkYXRhdGFibGUuXG4gICAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuZ3JpZERhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmRhdGEgPSBnZXRDbG9uZWRPYmplY3QodGhpcy5ncmlkRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5tZXNzYWdlcyA9IHtcbiAgICAgICAgICAgICdzZWxlY3RGaWVsZCc6IHRoaXMuYXBwTG9jYWxlLk1FU1NBR0VfU0VMRUNUX0ZJRUxEXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGF0YWdyaWRFbGVtZW50ID0gJCh0aGlzLl90YWJsZUVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgdGhpcy5ncmlkRWxlbWVudCA9IHRoaXMuJGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuY3NzKHsncG9zaXRpb24nOiAncmVsYXRpdmUnfSk7XG5cbiAgICAgICAgXy5mb3JFYWNoKHJ1bk1vZGVJbml0aWFsUHJvcGVydGllcywgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodGhpc1trZXldKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnNbdmFsdWVdID0gKHRoaXNba2V5XSA9PT0gJ3RydWUnIHx8IHRoaXNba2V5XSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZWhhbmRsZXIgIT09ICdub25lJykge1xuICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9uc1snc2VsZWN0Rmlyc3RSb3cnXSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW5kZXJPcGVyYXRpb25Db2x1bW5zKCk7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuY29sRGVmcyA9IHRoaXMuZmllbGREZWZzO1xuXG4gICAgICAgIHRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZSh0aGlzLmdyaWRPcHRpb25zKTtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdsb2FkaW5nJywgdGhpcy5sb2FkaW5nZGF0YW1zZyk7XG4gICAgICAgIC8vIGlmKHRoaXMuZ3JpZE9wdGlvbnMuZGF0YS5sZW5ndGggfHwgdGhpcy52YXJpYWJsZUluZmxpZ2h0KSB7XG4gICAgICAgIC8vICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ2xvYWRpbmcnLCB0aGlzLmxvYWRpbmdkYXRhbXNnKTtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIHRoaXMuYXBwbHlQcm9wcy5mb3JFYWNoKGFyZ3MgPT4gdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoLi4uYXJncykpO1xuXG4gICAgICAgIGlmICh0aGlzLmVkaXRtb2RlID09PSBFRElUX01PREUuUVVJQ0tfRURJVCkge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudENsaWNrQmluZCA9IHRoaXMuX2RvY3VtZW50Q2xpY2tCaW5kLmJpbmQodGhpcyk7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuZG9jdW1lbnRDbGlja0JpbmQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgZ2V0Q29uZmlndXJlZFN0YXRlKCkge1xuICAgICAgICBjb25zdCBtb2RlID0gdGhpcy5zdGF0ZVBlcnNpc3RlbmNlLmNvbXB1dGVNb2RlKHRoaXMuc3RhdGVoYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIG1vZGUgJiYgbW9kZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlU3RhdGVQYXJhbXMod2lkZ2V0U3RhdGUsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc2VsZWN0ZWRJdGVtJykpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbXNFeGlzdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5vcHRpb25zID0gb3B0aW9ucy5vcHRpb25zIHx8IHt9O1xuICAgICAgICBpZiAoXy5nZXQod2lkZ2V0U3RhdGUsICdwYWdpbmF0aW9uJykpIHtcbiAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucy5wYWdlID0gd2lkZ2V0U3RhdGUucGFnaW5hdGlvbjtcbiAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ydFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLm9yZGVyQnkgPSBfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQuZmllbGQnKSArICcgJyArIF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5kaXJlY3Rpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NlYXJjaCcpKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9wdGlvbnMuZmlsdGVyRmllbGRzID0gdGhpcy5nZXRGaWx0ZXJGaWVsZHMod2lkZ2V0U3RhdGUuc2VhcmNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMub3B0aW9ucy5wYWdlID0gMTtcbiAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NlYXJjaCcpKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCggKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9wdGlvbnMuZmlsdGVyRmllbGRzID0gdGhpcy5nZXRGaWx0ZXJGaWVsZHMod2lkZ2V0U3RhdGUuc2VhcmNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ydFN0YXRlSGFuZGxlcih3aWRnZXRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5vcHRpb25zLm9yZGVyQnkgPSBfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQuZmllbGQnKSArICcgJyArIF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5kaXJlY3Rpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyaWdnZXJXTUV2ZW50KG5ld1ZhbCkge1xuICAgICAgICBpZiAodGhpcy5lZGl0bW9kZSA9PT0gJ2RpYWxvZycpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAkaW52b2tlV2F0Y2hlcnModHJ1ZSk7XG4gICAgICAgIHRoaXMuYXBwLm5vdGlmeSgnd20tZXZlbnQnLCB7ZXZlbnROYW1lOiAnc2VsZWN0ZWRJdGVtQ2hhbmdlJywgd2lkZ2V0TmFtZTogdGhpcy5uYW1lLCByb3c6IG5ld1ZhbCwgdGFibGU6IHRoaXN9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpIHtcbiAgICAgICAgY29uc3QgJGdyaWRFbGVtZW50ID0gdGhpcy5kYXRhZ3JpZEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0ICRzb3J0SWNvbiA9ICAkZ3JpZEVsZW1lbnQuZmluZCgndGhbZGF0YS1jb2wtZmllbGQ9XCInICsgXy5nZXQod2lkZ2V0U3RhdGUsICdzb3J0LmZpZWxkJykgKyAnXCJdIC5zb3J0LWljb24nKTtcbiAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc29ydC5kaXJlY3Rpb24nKSA9PT0gJ2FzYycgJiYgJHNvcnRJY29uLmxlbmd0aCkgIHtcbiAgICAgICAgICAgICRzb3J0SWNvbi5hZGRDbGFzcygnYXNjIHdpIHdpLWxvbmctYXJyb3ctdXAnKTtcbiAgICAgICAgfSBlbHNlIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQuZGlyZWN0aW9uJykgPT09ICdkZXNjJyAgJiYgJHNvcnRJY29uLmxlbmd0aCkge1xuICAgICAgICAgICAgJHNvcnRJY29uLmFkZENsYXNzKCdkZXNjIHdpIHdpLWxvbmctYXJyb3ctZG93bicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWFyY2hTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpIHtcbiAgICAgICAgaWYgKF8uaXNBcnJheSh3aWRnZXRTdGF0ZS5zZWFyY2gpKSB7XG4gICAgICAgICAgICBfLmZvckVhY2goIHdpZGdldFN0YXRlLnNlYXJjaCwgKGZpbHRlck9iaikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvd0ZpbHRlcltmaWx0ZXJPYmouZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93RmlsdGVyW2ZpbHRlck9iai5maWVsZF0udmFsdWUgPSBmaWx0ZXJPYmoudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93RmlsdGVyW2ZpbHRlck9iai5maWVsZF0ubWF0Y2hNb2RlID0gZmlsdGVyT2JqLm1hdGNoTW9kZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dGaWx0ZXJbZmlsdGVyT2JqLmZpZWxkXS50eXBlID0gZmlsdGVyT2JqLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkKHRoaXMucm93RmlsdGVyQ29tcGxpZWRUbFtmaWx0ZXJPYmouZmllbGRdKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGZpbHRlck9iai50eXBlID09PSAnaW50ZWdlcicgPyBwYXJzZUludChmaWx0ZXJPYmoudmFsdWUpIDogZmlsdGVyT2JqLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzLnJvd0ZpbHRlckNvbXBsaWVkVGxbZmlsdGVyT2JqLmZpZWxkXSkuZmluZCgnaW5wdXQnKS52YWwoZmlsdGVyT2JqLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgJGdyaWRFbGVtZW50ID0gdGhpcy5kYXRhZ3JpZEVsZW1lbnQ7XG4gICAgICAgICAgICAkZ3JpZEVsZW1lbnQuZmluZCgnW2RhdGEtZWxlbWVudD1cImRnU2VhcmNoVGV4dFwiXScpLnZhbCh3aWRnZXRTdGF0ZS5zZWFyY2gudmFsdWUpO1xuICAgICAgICAgICAgJGdyaWRFbGVtZW50LmZpbmQoJ1tkYXRhLWVsZW1lbnQ9XCJkZ0ZpbHRlclZhbHVlXCJdJykudmFsKHdpZGdldFN0YXRlLnNlYXJjaC5maWVsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZW1vdmVzIGVtcHR5IHZhbHVlcyBpbiBoZWFkZXJDb25maWcgYXJyYXkuXG4gICAgZmlsdGVyRW1wdHlWYWx1ZXMoaXRlbSkge1xuICAgICAgICBpZiAoaXRlbS5jb2x1bW5zKSB7XG4gICAgICAgICAgICBpdGVtLmNvbHVtbnMgPSBpdGVtLmNvbHVtbnMuZmlsdGVyKHRoaXMuZmlsdGVyRW1wdHlWYWx1ZXMuYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW0gIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gQ29tcGFyZXMgdGhlIHByZXZGaWx0ZXJDcml0ZXJpYSBSdWxlcyB3aXRoIHRoZSBuZXcgcnVsZXNcbiAgICBjb21wYXJlRmlsdGVyRXhwcmVzc2lvbnMocHJldkZpbHRlcnMsIG5ld0ZpbHRlcnMpIHtcbiAgICAgICAgcmV0dXJuICEhKChwcmV2RmlsdGVycy5sZW5ndGggPT09IG5ld0ZpbHRlcnMubGVuZ3RoKSAmJiAoXy5pc0VxdWFsKHByZXZGaWx0ZXJzLCBuZXdGaWx0ZXJzKSkpO1xuICAgIH1cblxuICAgIC8vIFNldCB0aGUgdGFibGUgbGFzdEFjdGlvblBlcmZvcm1lZCB0byBGaWx0ZXIgQ3JpdGVyaWEgYW5kIG1haW50YWluIHRoZSBwcmV2RmlsdGVyRXhwcmVzc2lvblxuICAgIHNldExhc3RBY3Rpb25Ub0ZpbHRlckNyaXRlcmlhKCkge1xuICAgICAgICB0aGlzLnByZXZGaWx0ZXJFeHByZXNzaW9uID0gXy5nZXQodGhpcy5kYXRhc291cmNlLCAnZmlsdGVyRXhwcmVzc2lvbnMucnVsZXMnKSA/IGdldENsb25lZE9iamVjdCh0aGlzLmRhdGFzb3VyY2UuZmlsdGVyRXhwcmVzc2lvbnMucnVsZXMpIDogZ2V0Q2xvbmVkT2JqZWN0KFtdLmNvbmNhdCh0aGlzLmRhdGFzb3VyY2UuZGF0YUJpbmRpbmcpKTtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRMYXN0QWN0aW9uUGVyZm9ybWVkKHRoaXMuZ3JpZE9wdGlvbnMuQUNUSU9OUy5GSUxURVJfQ1JJVEVSSUEpO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzU2VhcmNoVHJpZ2VycmVkKHRydWUpO1xuICAgIH1cblxuICAgIC8vIFNldCB0aGUgdGFibGUgbGFzdEFjdGlvblBlcmZvcm1lZCB0byBEYXRhc2V0IHVwZGF0ZSBhbmQgc2V0IGlzRGF0YXNldFVwZGF0ZWQgdG8gdHJ1ZVxuICAgIC8vIEZpeCBmb3IgW1dNUy0yMjMyM10tdGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gZGF0YXNldCBpcyBiZWluZyB1cGRhdGVkXG4gICAgc2V0TGFzdEFjdGlvblRvRGF0YXNldFVwZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRMYXN0QWN0aW9uUGVyZm9ybWVkKHRoaXMuZ3JpZE9wdGlvbnMuQUNUSU9OUy5EQVRBU0VUX1VQREFURSk7XG4gICAgICAgIC8vICBGaXggZm9yIFtXTVMtMjMyNjNdOiByZXNldCBjdXJyZW50UGFnZSB0byAxIGFzIGRhdGFzZXQgaXMgYmVpbmcgY2hhbmdlZFxuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldEN1cnJlbnRQYWdlKDEpO1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzRGF0YXNldFVwZGF0ZWQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBsYXN0QWN0aW9uUGVyZm9ybWVkIHRvIEZpbHRlcl9Dcml0ZXJpYSwgd2hlbiB0aGVyZSBpcyBjaGFuZ2UgaW4gdGhlIFZhcmlhYmxlIGZpbHRlciBjcml0ZXJpYSBydWxlc1xuICAgIGNoZWNrSWZWYXJGaWx0ZXJzQXBwbGllZCgpIHtcbiAgICAgICAgaWYgKCFfLmlzRW1wdHkoXy5nZXQodGhpcy5kYXRhc291cmNlLCAnZmlsdGVyRXhwcmVzc2lvbnMucnVsZXMnKSkgfHwgIV8uaXNFbXB0eShfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdkYXRhQmluZGluZycpKSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEZpbHRlckV4cHIgPSBfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdmaWx0ZXJFeHByZXNzaW9ucy5ydWxlcycpID8gdGhpcy5kYXRhc291cmNlLmZpbHRlckV4cHJlc3Npb25zLnJ1bGVzIDogW10uY29uY2F0KHRoaXMuZGF0YXNvdXJjZS5kYXRhQmluZGluZyk7XG4gICAgICAgICAgICBjb25zdCBpc0VxdWFsID0gdGhpcy5jb21wYXJlRmlsdGVyRXhwcmVzc2lvbnModGhpcy5wcmV2RmlsdGVyRXhwcmVzc2lvbiwgY3VycmVudEZpbHRlckV4cHIpO1xuICAgICAgICAgICAgaWYgKCFpc0VxdWFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMYXN0QWN0aW9uVG9GaWx0ZXJDcml0ZXJpYSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgd2F0Y2hWYXJpYWJsZURhdGFTZXQobmV3VmFsKSB7XG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIC8vIENoZWNrIGZvciBWYXJpYWJsZSBmaWx0ZXJzIGlmIGFwcGxpZWRcbiAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMuaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZWYXJGaWx0ZXJzQXBwbGllZCgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFN0YXRlIGhhbmRsaW5nIGZvciBzdGF0aWMgdmFyaWFibGVzXG4gICAgICAgIGlmIChfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnICYmIHRoaXMuX3BhZ2VMb2FkICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJykge1xuICAgICAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcyk7XG4gICAgICAgICAgICB0aGlzLl9wYWdlTG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc2VsZWN0ZWRJdGVtJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zRXhpc3QgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdzZWxlY3RGaXJzdFJvdycsIHRoaXMuZ3JpZGZpcnN0cm93c2VsZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NlYXJjaCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTdGF0ZUhhbmRsZXIod2lkZ2V0U3RhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU29ydEhhbmRsZXIod2lkZ2V0U3RhdGUuc2VhcmNoLCB1bmRlZmluZWQsICdzZWFyY2gnLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3NvcnQnKSkge1xuICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTb3J0SGFuZGxlcih3aWRnZXRTdGF0ZS5zb3J0LCB1bmRlZmluZWQsICdzb3J0JywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0U3RhdGVIYW5kbGVyKHdpZGdldFN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfLmdldCh3aWRnZXRTdGF0ZSwgJ3BhZ2luYXRpb24nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5wYWdlQ2hhbmdlZCh7cGFnZTogd2lkZ2V0U3RhdGUucGFnaW5hdGlvbn0sIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEFmdGVyIHRoZSBzZXR0aW5nIHRoZSB3YXRjaCBvbiBuYXZpZ2F0b3IsIGRhdGFzZXQgaXMgdHJpZ2dlcmVkIHdpdGggdW5kZWZpbmVkLiBJbiB0aGlzIGNhc2UsIHJldHVybiBoZXJlLlxuICAgICAgICBpZiAodGhpcy5kYXRhTmF2aWdhdG9yV2F0Y2hlZCAmJiBfLmlzVW5kZWZpbmVkKG5ld1ZhbCkgJiYgdGhpcy5fX2Z1bGxEYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdmFyaWFibGUgaXMgaW4gbG9hZGluZyBzdGF0ZSwgc2hvdyBsb2FkaW5nIGljb25cbiAgICAgICAgaWYgKHRoaXMudmFyaWFibGVJbmZsaWdodCAmJiAhdGhpcy5pbmZTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbG9hZGluZycsIHRoaXMubG9hZGluZ2RhdGFtc2cpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0ID0gZ2V0VmFsaWRKU09OKG5ld1ZhbCk7XG5cbiAgICAgICAgLy8gQ29udmVydGluZyBuZXd2YWwgdG8gb2JqZWN0IGlmIGl0IGlzIGFuIE9iamVjdCB0aGF0IGNvbWVzIGFzIGEgc3RyaW5nIFwie1wiZGF0YVwiIDogMX1cIlxuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBuZXdWYWwgPSByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3J0RXhwID0gdGhpcy5nZXRTb3J0RXhwcigpO1xuICAgICAgICBjb25zdCBzb3J0RXhwQXJyID0gc29ydEV4cC5zcGxpdCgnICcpO1xuICAgICAgICBpZiAoc29ydEV4cCAmJiBzb3J0RXhwQXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zb3J0SW5mbyA9IHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gOiBzb3J0RXhwQXJyWzFdLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAgc29ydEV4cEFyclswXVxuXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLypSZXR1cm4gaWYgZGF0YSBpcyBpbnZhbGlkLiovXG4gICAgICAgIGlmICghdGhpcy5pc0RhdGFWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB2YWx1ZSBpcyBlbXB0eSBvciBpbiBzdHVkaW8gbW9kZSwgZG9udCBlbmFibGUgdGhlIG5hdmlnYXRpb25cbiAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd25hdmlnYXRpb24gJiYgIXRoaXMuZGF0YU5hdmlnYXRvcldhdGNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVBhZ2VOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXNldFBhZ2VOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICAvLyBJZiB0aGUgZGF0YXNldCBpcyB1bmRlZmluZWQgb3IgZW1wdHkgb3IgdGFibGUgaXMgYm91bmQgdG8gc3RhdGljIHZhcmlhYmxlIHRoZW4gc2V0IHZhcmlhYmxlSW5mbGlnaHQgdG8gZmFsc2UgaW5vcmRlciB0byB1cGRhdGUgdGhlIHN0YXR1c1xuICAgICAgICAgICAgaWYgKG5ld1ZhbCA9PT0gJycgfHwgbmV3VmFsID09PSB1bmRlZmluZWQgfHwgXy5nZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gJ3dtLlZhcmlhYmxlJykge1xuICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGVJbmZsaWdodCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLypmb3IgcnVuIG1vZGUsIGRpc2FibGluZyB0aGUgbG9hZGVyIGFuZCBzaG93aW5nIG5vIGRhdGEgZm91bmQgbWVzc2FnZSBpZiBkYXRhc2V0IGlzIG5vdCB2YWxpZCovXG4gICAgICAgICAgICBpZiAoIXRoaXMudmFyaWFibGVJbmZsaWdodCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ3NlbGVjdEZpcnN0Um93JywgdGhpcy5ncmlkZmlyc3Ryb3dzZWxlY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzTmF2aWdhdGlvbkVuYWJsZWQoKSAmJiBuZXdWYWwpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tGaWx0ZXJzQXBwbGllZCh0aGlzLmdldFNvcnRFeHByKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfLmlzT2JqZWN0KG5ld1ZhbCkgfHwgbmV3VmFsID09PSAnJyB8fCAobmV3VmFsICYmIG5ld1ZhbC5kYXRhVmFsdWUgPT09ICcnKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnZhcmlhYmxlSW5mbGlnaHQpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB2YXJpYWJsZSBoYXMgZmluaXNoZWQgbG9hZGluZyBhbmQgcmVzdWx0U2V0IGlzIGVtcHR5LCBlbmRlciBlbXB0eSBkYXRhXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRHcmlkRGF0YShbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUdyaWREYXRhKG5ld1ZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmRvY3VtZW50Q2xpY2tCaW5kKTtcbiAgICAgICAgaWYgKHRoaXMubmF2aWdhdG9yUmVzdWx0V2F0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yUmVzdWx0V2F0Y2gudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuXG4gICAgYWRkUm93SW5kZXgocm93KSB7XG4gICAgICAgIGNvbnN0IHJvd0RhdGEgPSBnZXRDbG9uZWRPYmplY3Qocm93KTtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSBfLmluZGV4T2YodGhpcy5ncmlkT3B0aW9ucy5kYXRhLCByb3cpO1xuICAgICAgICBpZiAocm93SW5kZXggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93O1xuICAgICAgICB9XG4gICAgICAgIHJvd0RhdGEuJGluZGV4ID0gcm93SW5kZXggKyAxO1xuICAgICAgICByb3dEYXRhLiRpc0ZpcnN0ID0gcm93RGF0YS4kaW5kZXggPT09IDE7XG4gICAgICAgIHJvd0RhdGEuJGlzTGFzdCA9IHRoaXMuZ3JpZERhdGEubGVuZ3RoID09PSByb3dEYXRhLiRpbmRleDtcbiAgICAgICAgcmV0dXJuIHJvd0RhdGE7XG4gICAgfVxuXG4gICAgYWRkRXZlbnRzVG9Db250ZXh0KGNvbnRleHQpIHtcbiAgICAgICAgY29udGV4dC5hZGROZXdSb3cgPSAoKSA9PiB0aGlzLmFkZE5ld1JvdygpO1xuICAgICAgICBjb250ZXh0LmRlbGV0ZVJvdyA9ICgpID0+IHRoaXMuZGVsZXRlUm93KCk7XG4gICAgICAgIGNvbnRleHQuZWRpdFJvdyA9ICgpID0+IHRoaXMuZWRpdFJvdygpO1xuICAgIH1cblxuICAgIGV4ZWN1dGUob3BlcmF0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChbRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFLCBEYXRhU291cmNlLk9wZXJhdGlvbi5JU19QQUdFQUJMRSwgRGF0YVNvdXJjZS5PcGVyYXRpb24uU1VQUE9SVFNfU0VSVkVSX0ZJTFRFUl0uaW5jbHVkZXMob3BlcmF0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2UgPyB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShvcGVyYXRpb24sIG9wdGlvbnMpIDoge307XG4gICAgfVxuXG4gICAgaXNOYXZpZ2F0aW9uRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd25hdmlnYXRpb24gJiYgdGhpcy5kYXRhTmF2aWdhdG9yICYmIHRoaXMuZGF0YU5hdmlnYXRvcldhdGNoZWQ7XG4gICAgfVxuXG4gICAgZ2V0Q2xvbmVkUm93T2JqZWN0KHJvd0RhdGEpIHtcbiAgICAgICAgY29uc3Qgcm93ID0gZ2V0Q2xvbmVkT2JqZWN0KHJvd0RhdGEpO1xuICAgICAgICByb3cuZ2V0UHJvcGVydHkgPSBmaWVsZCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gXy5nZXQocm93LCBmaWVsZCk7XG4gICAgICAgIH07XG4gICAgICAgIHJvdy4kaXNGaXJzdCA9IHJvdy4kaW5kZXggPT09IDE7XG4gICAgICAgIHJvdy4kaXNMYXN0ID0gdGhpcy5ncmlkRGF0YS5sZW5ndGggPT09IHJvdy4kaW5kZXg7XG4gICAgICAgIGRlbGV0ZSByb3cuJCRpbmRleDtcbiAgICAgICAgZGVsZXRlIHJvdy4kJHBrO1xuICAgICAgICByZXR1cm4gcm93O1xuICAgIH1cblxuICAgIGhhbmRsZUxvYWRpbmcoZGF0YSkge1xuICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBkYXRhLmFjdGl2ZTtcbiAgICAgICAgLy8gYmFzZWQgb24gdGhlIGFjdGl2ZSBzdGF0ZSBhbmQgcmVzcG9uc2UgdG9nZ2xpbmcgdGhlICdsb2FkaW5nIGRhdGEuLi4nIGFuZCAnbm8gZGF0YSBmb3VuZCcgbWVzc2FnZXMuXG4gICAgICAgIGlmIChkYXRhLmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdsb2FkaW5nJywgdGhpcy5sb2FkaW5nZGF0YW1zZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiBncmlkIGlzIGluIGVkaXQgbW9kZSBvciBncmlkIGhhcyBkYXRhLCBkb250IHNob3cgdGhlIG5vIGRhdGEgbWVzc2FnZVxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzR3JpZEVkaXRNb2RlICYmIF8uaXNFbXB0eSh0aGlzLmRhdGFzZXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdub2RhdGEnLCB0aGlzLm5vZGF0YW1lc3NhZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ3JlYWR5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREaXNhYmxlZE9uRmllbGQob3BlcmF0aW9uLCBjb2xEZWYsIHdpZGdldFR5cGUpIHtcbiAgICAgICAgaWYgKG9wZXJhdGlvbiAhPT0gJ25ldycgJiYgY29sRGVmWydwcmltYXJ5LWtleSddICYmIGNvbERlZi5nZW5lcmF0b3IgPT09ICdhc3NpZ25lZCcgJiYgIWNvbERlZlsncmVsYXRlZC1lbnRpdHktbmFtZSddICYmICFjb2xEZWYucGVyaW9kKSB7XG4gICAgICAgICAgICBjb2xEZWZbd2lkZ2V0VHlwZV0uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRGb3JtQ29udHJvbChjdHJsKSB7XG4gICAgICAgIGN0cmwubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgIGN0cmwubWFya0FzUHJpc3RpbmUoKTtcbiAgICB9XG5cbiAgICBjbGVhckZvcm0obmV3Um93Pykge1xuICAgICAgICBjb25zdCBjdHJscyA9IHRoaXMubmdmb3JtLmNvbnRyb2xzO1xuICAgICAgICBfLmtleXModGhpcy5uZ2Zvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIC8vIElmIG5ldyByb3csIGNsZWFyIHRoZSBjb250cm9scyBpbiB0aGUgbmV3IHJvdy4gRWxzZSwgY2xlYXIgdGhlIGNvbnRyb2xzIGluIGVkaXQgcm93XG4gICAgICAgICAgICBpZiAoIWtleS5lbmRzV2l0aCgnX2ZpbHRlcicpICYmICgoa2V5LmVuZHNXaXRoKCdfbmV3JykgJiYgbmV3Um93KSB8fCAoIWtleS5lbmRzV2l0aCgnX25ldycpICYmICFuZXdSb3cpKSkge1xuICAgICAgICAgICAgICAgIGN0cmxzW2tleV0uc2V0VmFsdWUoJycpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRGb3JtQ29udHJvbChjdHJsc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2hvd0ZpZWxkQmFzZWRPblNjcmVlblR5cGUoZmllbGQpIHtcbiAgICAgICAgbGV0IHNob3dGaWVsZDtcbiAgICAgICAgaWYgKGlzTW9iaWxlKCkgJiYgdGhpcy52aWV3cG9ydC5pc01vYmlsZVR5cGUpIHtcbiAgICAgICAgICAgIHNob3dGaWVsZCA9IGZpZWxkLm1vYmlsZURpc3BsYXk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWV3cG9ydC5pc1RhYmxldFR5cGUpIHtcbiAgICAgICAgICAgIHNob3dGaWVsZCA9IGZpZWxkLnRhYmxldERpc3BsYXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzaG93RmllbGQgPSBmaWVsZC5wY0Rpc3BsYXk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNob3dGaWVsZDtcbiAgICB9XG5cbiAgICAvKiBDaGVjayB3aGV0aGVyIGl0IGlzIG5vbi1lbXB0eSByb3cuICovXG4gICAgaXNFbXB0eVJlY29yZChyZWNvcmQpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHJlY29yZCk7XG4gICAgICAgIGxldCBkYXRhLFxuICAgICAgICAgICAgaXNEaXNwbGF5ZWQ7XG5cbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXMuZXZlcnkoKHByb3AsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBkYXRhID0gcmVjb3JkW3Byb3BdO1xuICAgICAgICAgICAgLyogSWYgZmllbGREZWZzIGFyZSBtaXNzaW5nLCBzaG93IGFsbCBjb2x1bW5zIGluIGRhdGEuICovXG4gICAgICAgICAgICBpc0Rpc3BsYXllZCA9ICh0aGlzLmZpZWxkRGVmcy5sZW5ndGggJiYgaXNEZWZpbmVkKHRoaXMuZmllbGREZWZzW2luZGV4XSkgJiYgdGhpcy5zaG93RmllbGRCYXNlZE9uU2NyZWVuVHlwZSh0aGlzLmZpZWxkRGVmc1tpbmRleF0pKSB8fCB0cnVlO1xuICAgICAgICAgICAgLypWYWxpZGF0aW5nIG9ubHkgdGhlIGRpc3BsYXllZCBmaWVsZHMqL1xuICAgICAgICAgICAgaWYgKGlzRGlzcGxheWVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHVuZGVmaW5lZCB8fCBkYXRhID09PSAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyogRnVuY3Rpb24gdG8gcmVtb3ZlIHRoZSBlbXB0eSBkYXRhLiAqL1xuICAgIHJlbW92ZUVtcHR5UmVjb3JkcyhzZXJ2aWNlRGF0YSkge1xuICAgICAgICBjb25zdCBhbGxSZWNvcmRzID0gc2VydmljZURhdGE7XG4gICAgICAgIGxldCBmaWx0ZXJlZERhdGEgPSBbXTtcbiAgICAgICAgaWYgKGFsbFJlY29yZHMgJiYgYWxsUmVjb3Jkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8qQ29tcGFyaW5nIGFuZCBwdXNoaW5nIHRoZSBub24tZW1wdHkgZGF0YSBjb2x1bW5zKi9cbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGFsbFJlY29yZHMuZmlsdGVyKHJlY29yZCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlY29yZCAmJiAhdGhpcy5pc0VtcHR5UmVjb3JkKHJlY29yZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWREYXRhO1xuICAgIH1cblxuICAgIHNldEdyaWREYXRhKHNlcnZlckRhdGEpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZmlsdGVybnVsbHJlY29yZHMgPyAgdGhpcy5yZW1vdmVFbXB0eVJlY29yZHMoc2VydmVyRGF0YSkgOiBzZXJ2ZXJEYXRhO1xuICAgICAgICAvLyBmaXggZm9yIFtXTVMtMjQwMTJdIHNldCB2YXJpYWJsZWluZmxpZ2h0IGZsYWcgdG8gZmFsc2UgZm9yIHN0YXRpYyB2YXJpYWJsZXNcbiAgICAgICAgLy8gSWYgdGhlIHRhYmxlIGlzIGJvdW5kIHRvIHNvbWUgd2lkZ2V0IGFuZCBub3QgYm91bmQgdG8gYW55IHZhcmlhYmxlIChleDogVGFibGUxLnNlbGVjdGVkSXRlbSkgdGhlbiBzZXQgdmFyaWFibGVJbmZsaWdodCB0byBmYWxzZVxuICAgICAgICBpZiAoXy5nZXQodGhpcy5kYXRhc291cmNlLCAnY2F0ZWdvcnknKSA9PT0gJ3dtLlZhcmlhYmxlJyB8fCBfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVJbmZsaWdodCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy52YXJpYWJsZUluZmxpZ2h0KSB7XG4gICAgICAgICAgICBpZiAoZGF0YSAmJiAoZGF0YS5sZW5ndGgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdub2RhdGEnLCB0aGlzLm5vZGF0YW1lc3NhZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ3JlYWR5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkRGF0YSA9IGRhdGE7XG4gICAgfVxuXG4gICAgc2V0RGF0YUdyaWRPcHRpb24ob3B0aW9uTmFtZSwgbmV3VmFsLCBmb3JjZVNldCA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhZ3JpZEVsZW1lbnQgfHwgIXRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZSB8fCAhdGhpcy5kYXRhZ3JpZEVsZW1lbnQuZGF0YXRhYmxlKCdpbnN0YW5jZScpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9uID0ge307XG4gICAgICAgIGlmIChpc0RlZmluZWQgJiYgKCFfLmlzRXF1YWwobmV3VmFsLCB0aGlzLmdyaWRPcHRpb25zW29wdGlvbk5hbWVdKSB8fCBmb3JjZVNldCkpIHtcbiAgICAgICAgICAgIG9wdGlvbltvcHRpb25OYW1lXSA9IG5ld1ZhbDtcbiAgICAgICAgICAgIHRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZSgnb3B0aW9uJywgb3B0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnNbb3B0aW9uTmFtZV0gPSBuZXdWYWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYWxsRGF0YUdyaWRNZXRob2QoLi4uYXJncykge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YWdyaWRFbGVtZW50IHx8ICF0aGlzLmRhdGFncmlkRWxlbWVudC5kYXRhdGFibGUoJ2luc3RhbmNlJykpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlQcm9wcy5zZXQoYXJnc1sxXSwgYXJncyk7XG4gICAgICAgICAgICByZXR1cm47IC8vIElmIGRhdGFncmlkIGlzIG5vdCBpbml0aWxpYXplZCBvciBkZXN0cm95ZWQsIHJldHVybiBoZXJlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YWdyaWRFbGVtZW50LmRhdGF0YWJsZS5hcHBseSh0aGlzLmRhdGFncmlkRWxlbWVudCwgYXJncyk7XG4gICAgfVxuXG4gICAgcmVuZGVyT3BlcmF0aW9uQ29sdW1ucygpIHtcbiAgICAgICAgbGV0IHJvd0FjdGlvbkNvbCxcbiAgICAgICAgICAgIGluc2VydFBvc2l0aW9uO1xuXG4gICAgICAgIGNvbnN0IHJvd09wZXJhdGlvbnNDb2x1bW4gPSBnZXRSb3dPcGVyYXRpb25zQ29sdW1uKCksXG4gICAgICAgICAgICBjb25maWcgPSB7XG4gICAgICAgICAgICAgICAgJ25hbWUnOiByb3dPcGVyYXRpb25zQ29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICdmaWVsZCc6IHJvd09wZXJhdGlvbnNDb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgJ2lzUHJlZGVmaW5lZCc6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIC8vIFJldHVybiBpZiBubyBmaWVsZERlZnMgYXJlIHByZXNlbnRcbiAgICAgICAgaWYgKCF0aGlzLmZpZWxkRGVmcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvd0FjdGlvbkNvbCA9IF8uZmluZCh0aGlzLmZ1bGxGaWVsZERlZnMsIHsnZmllbGQnOiBST1dfT1BTX0ZJRUxELCB0eXBlOiAnY3VzdG9tJ30pOyAvLyBDaGVjayBpZiBjb2x1bW4gaXMgZmV0Y2hlZCBmcm9tIG1hcmt1cFxuICAgICAgICBfLnJlbW92ZSh0aGlzLmZpZWxkRGVmcywge3R5cGU6ICdjdXN0b20nLCBmaWVsZDogUk9XX09QU19GSUVMRH0pOyAvLyBSZW1vdmluZyBvcGVyYXRpb25zIGNvbHVtblxuICAgICAgICBfLnJlbW92ZSh0aGlzLmhlYWRlckNvbmZpZywge2ZpZWxkOiByb3dPcGVyYXRpb25zQ29sdW1uLmZpZWxkfSk7XG5cbiAgICAgICAgLypBZGQgdGhlIGNvbHVtbiBmb3Igcm93IG9wZXJhdGlvbnMgb25seSBpZiBhdC1sZWFzdCBvbmUgb3BlcmF0aW9uIGhhcyBiZWVuIGVuYWJsZWQuKi9cbiAgICAgICAgaWYgKHRoaXMucm93QWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChyb3dBY3Rpb25Db2wpIHsgLy8gSWYgY29sdW1uIGlzIHByZXNlbnQgaW4gbWFya3VwLCBwdXNoIHRoZSBjb2x1bW4gb3IgcHVzaCB0aGUgZGVmYXVsdCBjb2x1bW5cbiAgICAgICAgICAgICAgICBpbnNlcnRQb3NpdGlvbiA9IHJvd0FjdGlvbkNvbC5yb3dhY3Rpb25zcG9zaXRpb24gPyBfLnRvTnVtYmVyKHJvd0FjdGlvbkNvbC5yb3dhY3Rpb25zcG9zaXRpb24pIDogdGhpcy5maWVsZERlZnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGREZWZzLnNwbGljZShpbnNlcnRQb3NpdGlvbiwgMCwgcm93QWN0aW9uQ29sKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0UG9zaXRpb24gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJDb25maWcudW5zaGlmdChjb25maWcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyQ29uZmlnLnB1c2goY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGREZWZzLnB1c2gocm93T3BlcmF0aW9uc0NvbHVtbik7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJDb25maWcucHVzaChjb25maWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2hlYWRlckNvbmZpZycsIHRoaXMuaGVhZGVyQ29uZmlnKTtcbiAgICB9XG5cbiAgICBlbmFibGVQYWdlTmF2aWdhdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YXNldCAmJiB0aGlzLmJpbmRkYXRhc2V0ICYmIHRoaXMuZGF0YU5hdmlnYXRvcikge1xuICAgICAgICAgICAgLypDaGVjayBmb3Igc2FuaXR5Ki9cbiAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvcldhdGNoZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0b3JSZXN1bHRXYXRjaCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yUmVzdWx0V2F0Y2gudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qUmVnaXN0ZXIgYSB3YXRjaCBvbiB0aGUgXCJyZXN1bHRcIiBwcm9wZXJ0eSBvZiB0aGUgXCJkYXRhTmF2aWdhdG9yXCIgc28gdGhhdCB0aGUgcGFnaW5hdGVkIGRhdGEgaXMgZGlzcGxheWVkIGluIHRoZSBsaXZlLWxpc3QuKi9cbiAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yUmVzdWx0V2F0Y2ggPSB0aGlzLmRhdGFOYXZpZ2F0b3IucmVzdWx0RW1pdHRlci5zdWJzY3JpYmUoKG5ld1ZhbCkgPT4ge1xuICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciBzYW5pdHkuICovXG4gICAgICAgICAgICAgICAgaWYgKGlzRGVmaW5lZChuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdhdGNoIHdpbGwgbm90IGJlIHRyaWdnZXJlZCBpZiBkYXRhc2V0IGFuZCBuZXcgdmFsdWUgYXJlIGVxdWFsLiBTbyB0cmlnZ2VyIHRoZSBwcm9wZXJ0eSBjaGFuZ2UgaGFuZGxlciBtYW51YWxseVxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGhhcHBlbnMgaW4gY2FzZSwgaWYgZGF0YXNldCBpcyBkaXJlY3RseSB1cGRhdGVkLlxuICAgICAgICAgICAgICAgICAgICBpZiAoXy5pc0VxdWFsKHRoaXMuZGF0YXNldCwgbmV3VmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53YXRjaFZhcmlhYmxlRGF0YVNldChuZXdWYWwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF8uaXNBcnJheShuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aWRnZXQuZGF0YXNldCA9IFtdLmNvbmNhdChuZXdWYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfLmlzT2JqZWN0KG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZGdldC5kYXRhc2V0ID0gXy5leHRlbmQoe30sIG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRhdGFzZXQgPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndpZGdldC5kYXRhc2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgLypEZS1yZWdpc3RlciB0aGUgd2F0Y2ggaWYgaXQgaXMgZXhpc3RzICovXG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdG9yTWF4UmVzdWx0V2F0Y2gudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qUmVnaXN0ZXIgYSB3YXRjaCBvbiB0aGUgXCJtYXhSZXN1bHRzXCIgcHJvcGVydHkgb2YgdGhlIFwiZGF0YU5hdmlnYXRvclwiIHNvIHRoYXQgdGhlIFwicGFnZVNpemVcIiBpcyBkaXNwbGF5ZWQgaW4gdGhlIGxpdmUtbGlzdC4qL1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0b3JNYXhSZXN1bHRXYXRjaCA9IHRoaXMuZGF0YU5hdmlnYXRvci5tYXhSZXN1bHRzRW1pdHRlci5zdWJzY3JpYmUoKG5ld1ZhbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZXNpemUgPSBuZXdWYWw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIElmIGRhdGFzZXQgaXMgYSBwYWdlYWJsZSBvYmplY3QsIGRhdGEgaXMgcHJlc2VudCBpbnNpZGUgdGhlIGNvbnRlbnQgcHJvcGVydHlcbiAgICAgICAgICAgIHRoaXMuX19mdWxsRGF0YSA9IHRoaXMuZGF0YXNldDtcblxuICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLndpZGdldC5tYXhSZXN1bHRzID0gdGhpcy5wYWdlc2l6ZSB8fCA1O1xuICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgbWF4UmVzdWx0czogdGhpcy5wYWdlc2l6ZSB8fCA1XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVQcm9wZXJ0eUJpbmRpbmcoJ2RhdGFzZXQnKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5zZXRCaW5kRGF0YVNldCh0aGlzLmJpbmRkYXRhc2V0LCB0aGlzLnZpZXdQYXJlbnQsIHRoaXMuZGF0YXNvdXJjZSwgdGhpcy5kYXRhc2V0LCB0aGlzLmJpbmRkYXRhc291cmNlLCB1bmRlZmluZWQsIHRoaXMuc3RhdGVoYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0UGFnZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIC8qQ2hlY2sgZm9yIHNhbml0eSovXG4gICAgICAgIGlmICh0aGlzLmRhdGFOYXZpZ2F0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YU5hdmlnYXRvci5yZXNldFBhZ2VOYXZpZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0RhdGFWYWxpZCgpIHtcbiAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5kYXRhc2V0IHx8IHt9O1xuXG4gICAgICAgIC8qSW4gY2FzZSBcImRhdGFcIiBjb250YWlucyBcImVycm9yXCIgJiBcImVycm9yTWVzc2FnZVwiLCB0aGVuIGRpc3BsYXkgdGhlIGVycm9yIG1lc3NhZ2UgaW4gdGhlIGdyaWQuKi9cbiAgICAgICAgaWYgKGRhdGFzZXQuZXJyb3IpIHtcbiAgICAgICAgICAgIGVycm9yID0gZGF0YXNldC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YXNldC5kYXRhICYmIGRhdGFzZXQuZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgaWYgKGRhdGFzZXQuZGF0YS5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGRhdGFzZXQuZGF0YS5lcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLnNldEdyaWREYXRhKFtdKTtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gdG8gcG9wdWxhdGUgdGhlIGdyaWQgd2l0aCBkYXRhLlxuICAgIHBvcHVsYXRlR3JpZERhdGEoc2VydmljZURhdGEpIHtcbiAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgIHNlcnZpY2VEYXRhID0gdHJhbnNmb3JtRGF0YShzZXJ2aWNlRGF0YSwgdGhpcy5uYW1lKTtcbiAgICAgICAgLy8gQXBwbHkgZmlsdGVyIGFuZCBzb3J0LCBpZiBkYXRhIGlzIHJlZnJlc2hlZCB0aHJvdWdoIFJlZnJlc2ggZGF0YSBtZXRob2RcbiAgICAgICAgaWYgKCF0aGlzLmlzTmF2aWdhdGlvbkVuYWJsZWQoKSAmJiB0aGlzLl9pc0NsaWVudFNlYXJjaCkge1xuICAgICAgICAgICAgZGF0YSA9IGdldENsb25lZE9iamVjdChzZXJ2aWNlRGF0YSk7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRTZWFyY2hSZXN1bHQoZGF0YSwgdGhpcy5maWx0ZXJJbmZvKTtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldFNvcnRSZXN1bHQoZGF0YSwgdGhpcy5zb3J0SW5mbyk7XG4gICAgICAgICAgICB0aGlzLnNlcnZlckRhdGEgPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJEYXRhID0gc2VydmljZURhdGE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgZmllbGRkZWZzIGFyZSBub3QgcHJlc2VudCwgZ2VuZXJhdGUgZmllbGRkZWZzIGZyb20gZGF0YVxuICAgICAgICAvLyBSZW1vdmluZyBmaWVsZGRlZnMgY2hlY2sgYmVjYXVzZSBXaGVuIGxvYWRvbmRlbWFuZCBwcm9wZXJ0eSBpcyBlbmFibGVkKGRlZmVybG9hZD1cInRydWVcIiksIHRoZSBkYXRhc2V0IHByb3BlcnR5Y2hhbmdlaGFubGRlciBpcyB0cmlnZ2VyZWQgZmlyc3QgYmVmb3JlIHRoZSBkb20gaXMgZ2V0dGluZyByZW5kZXJlZC5cbiAgICAgICAgLy8gU28gYXQgdGhhdCB0aW1lIGZpZWxkZGVmcyBsZW5ndGggaXMgemVybywgZHVlIHRvIHRoaXMgdGhlIGNvbHVtbnMgYXJlIGNyZWF0ZWQgZHluYW1pY2FsbHkuXG4gICAgICAgIGlmICh0aGlzLmlzZHluYW1pY3RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUdyaWRDb2x1bW5zKHRoaXMuc2VydmVyRGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldEdyaWREYXRhKHRoaXMuc2VydmVyRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJyAmJiB0aGlzLl9zZWxlY3RlZEl0ZW1zRXhpc3QgJiYgc2VydmljZURhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50UGFnZUl0ZW1zO1xuICAgICAgICAgICAgaWYgKF8uZ2V0KHdpZGdldFN0YXRlLCAnc2VsZWN0ZWRJdGVtJykpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZUl0ZW1zID0gd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLmZpbHRlcih2YWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsLnBhZ2UgPT09IHRoaXMuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zRXhpc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBpZiBhbiBpdGVtIGlzIGFscmVhZHkgc2VsZWN0ZWQsIGRvbid0IHRyaWdnZXIgb25TZWxlY3QgZXZlbnQgZm9yIGl0IGFnYWluXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYWdlSXRlbXMubGVuZ3RoICYmIHRoaXMuc2VsZWN0ZWRpdGVtLmxlbmd0aCAhPT0gd2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCByZWFzc2lnbiB0aGlzLnNlbGVjdGVkaXRlbSBpZiBzZWxlY3RlZCBpdGVtcyBhbHJlYWR5IGV4aXN0LlxuICAgICAgICAgICAgICAgICAgICBpZiAoXy5pc0FycmF5KHRoaXMuc2VsZWN0ZWRpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2VJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKGl0ZW0uaW5kZXgsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRpdGVtID0gY3VycmVudFBhZ2VJdGVtcy5tYXAoZnVuY3Rpb24odmFsKSB7cmV0dXJuIHZhbC5pbmRleDsgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiB0byBnZW5lcmF0ZSBhbmQgY29tcGlsZSB0aGUgZm9ybSBmaWVsZHMgZnJvbSB0aGUgbWV0YWRhdGFcbiAgICBhc3luYyBnZW5lcmF0ZUR5bmFtaWNDb2x1bW5zKGNvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5maWVsZERlZnMgPSBbXTsgLy8gZW1wdHkgdGhlIGZvcm0gZmllbGRzXG4gICAgICAgIC8vIGVtcHR5IHRoZSBmaWx0ZXIgZmllbGQgdGVtcGxhdGUgcmVmcy5cbiAgICAgICAgKHRoaXMuZmlsdGVyVG1wbCBhcyBhbnkpLl9yZXN1bHRzID0gW107XG5cbiAgICAgICAgaWYgKF8uaXNFbXB0eShjb2x1bW5zKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRtcGwgPSAnJztcbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICBsZXQgYXR0cnNUbXBsID0gJyc7XG4gICAgICAgICAgICBsZXQgY3VzdG9tVG1wbCA9ICcnO1xuICAgICAgICAgICAgXy5mb3JFYWNoKGNvbCwgKHZhbCwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBjdXN0b20gZXhwcmVzc2lvbiBpcyBwcmVzZW50LCBrZWVwIGl0IGluc2lkZSB0YWJsZSBjb2x1bW4uIEVsc2UsIGtlZXAgYXMgYXR0cmlidXRlXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdjdXN0b21FeHByZXNzaW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tVG1wbCA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzVG1wbCArPSBgICR7a2V5fT1cIiR7dmFsfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdG1wbCArPSBgPHdtLXRhYmxlLWNvbHVtbiAke2F0dHJzVG1wbH0gdGFibGVOYW1lPVwiJHt0aGlzLm5hbWV9JHsodGhpcyBhcyBhbnkpLiRhdHRycy5nZXQoJ3RhYmxlX3JlZmVyZW5jZScpfVwiPiR7Y3VzdG9tVG1wbH08L3dtLXRhYmxlLWNvbHVtbj5gO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5keW5hbWljVGFibGVSZWYuY2xlYXIoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9keW5hbWljQ29udGV4dCkge1xuICAgICAgICAgICAgdGhpcy5fZHluYW1pY0NvbnRleHQgPSBPYmplY3QuY3JlYXRlKHRoaXMudmlld1BhcmVudCk7XG4gICAgICAgICAgICB0aGlzLl9keW5hbWljQ29udGV4dFt0aGlzLmdldEF0dHIoJ3dtVGFibGUnKV0gPSB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubm9PZkNvbHVtbnMgPSBjb2x1bW5zLmxlbmd0aDtcbiAgICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeVJlZiA9IGF3YWl0IHRoaXMuZHluYW1pY0NvbXBvbmVudFByb3ZpZGVyLmdldENvbXBvbmVudEZhY3RvcnlSZWYoXG4gICAgICAgICAgICAnYXBwLXRhYmxlLWR5bmFtaWMtJyArIHRoaXMud2lkZ2V0SWQsXG4gICAgICAgICAgICB0bXBsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5vQ2FjaGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdHJhbnNwaWxlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5keW5hbWljVGFibGVSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnlSZWYsIDAsIHRoaXMuaW5qKTtcbiAgICAgICAgZXh0ZW5kUHJvdG8oY29tcG9uZW50Lmluc3RhbmNlLCB0aGlzLl9keW5hbWljQ29udGV4dCk7XG4gICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLmR5bmFtaWMtdGFibGUtY29udGFpbmVyJylbMF0uYXBwZW5kQ2hpbGQoY29tcG9uZW50LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByZXBhcmVDb2xEZWZzKGRhdGEpIHtcbiAgICAgICAgbGV0IGRlZmF1bHRGaWVsZERlZnM7XG4gICAgICAgIGxldCBwcm9wZXJ0aWVzO1xuICAgICAgICBsZXQgY29sdW1uSW5kZXggPSAwO1xuICAgICAgICBsZXQgaGVhZGVySW5kZXggPSAwO1xuXG4gICAgICAgIHRoaXMuZmllbGREZWZzID0gW107XG4gICAgICAgIHRoaXMuaGVhZGVyQ29uZmlnID0gW107XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHt9O1xuICAgICAgICAvKiBpZiBwcm9wZXJ0aWVzIG1hcCBpcyBleGlzdGVkIHRoZW4gZmV0Y2ggdGhlIGNvbHVtbiBjb25maWd1cmF0aW9uIGZvciBhbGwgbmVzdGVkIGxldmVscyB1c2luZyB1dGlsIGZ1bmN0aW9uICovXG4gICAgICAgIHByb3BlcnRpZXMgPSBkYXRhO1xuICAgICAgICAvKmNhbGwgdXRpbGl0eSBmdW5jdGlvbiB0byBwcmVwYXJlIGZpZWxkRGVmcyBmb3IgZ3JpZCBhZ2FpbnN0IGdpdmVuIGRhdGEgKEEgTUFYIE9GIDEwIENPTFVNTlMgT05MWSkqL1xuICAgICAgICBkZWZhdWx0RmllbGREZWZzID0gcHJlcGFyZUZpZWxkRGVmcyhwcm9wZXJ0aWVzKTtcblxuICAgICAgICAvKmFwcGVuZCBhZGRpdGlvbmFsIHByb3BlcnRpZXMqL1xuICAgICAgICBfLmZvckVhY2goZGVmYXVsdEZpZWxkRGVmcywgY29sdW1uRGVmID0+IHtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5iaW5kaW5nID0gY29sdW1uRGVmLmZpZWxkO1xuICAgICAgICAgICAgY29sdW1uRGVmLmNhcHRpb24gPSBjb2x1bW5EZWYuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICBjb2x1bW5EZWYucGNEaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5tb2JpbGVEaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi50YWJsZXREaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5zZWFyY2hhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5zaG93aW5maWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgY29sdW1uRGVmLnR5cGUgID0gJ3N0cmluZyc7XG4gICAgICAgICAgICAvLyBGaXggZm9yIFtXTVMtMTk2NjhdIGFuZCBbV01TLTE5NjY5XS0gQWRkaW5nIGluZGV4IGFuZCBoZWFkZXJJbmRleCBmb3IgRHluYW1pYyBEQiBjb2x1bW5zLlxuICAgICAgICAgICAgLy8gTm90ZTogd2UgZG9uJ3QgaGF2ZSBjb2x1bW4gZ3JvdXBzIGZvciBEeW5hbWljIERCXG4gICAgICAgICAgICBjb2x1bW5EZWYuaW5kZXggPSBjb2x1bW5JbmRleDtcbiAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmRleCA9IGhlYWRlckluZGV4O1xuICAgICAgICAgICAgY29sdW1uSW5kZXgrKztcbiAgICAgICAgICAgIGhlYWRlckluZGV4Kys7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHRGaWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zW2NvbC5maWVsZF0gPSBjb2w7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlZGF0YXJlbmRlcicsIHskZGF0YTogZGF0YSwgJGNvbHVtbnM6IHRoaXMuY29sdW1ucywgZGF0YTogZGF0YSwgY29sdW1uczogdGhpcy5jb2x1bW5zfSk7XG5cbiAgICAgICAgZGVmYXVsdEZpZWxkRGVmcyA9IFtdO1xuICAgICAgICAvLyBBcHBseSB0aGUgY2hhbmdlcyBtYWRlIGJ5IHRoZSB1c2VyXG4gICAgICAgIF8uZm9yRWFjaCh0aGlzLmNvbHVtbnMsIHZhbCA9PiB7XG4gICAgICAgICAgICBkZWZhdWx0RmllbGREZWZzLnB1c2godmFsKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5nZW5lcmF0ZUR5bmFtaWNDb2x1bW5zKGRlZmF1bHRGaWVsZERlZnMpO1xuICAgIH1cblxuICAgIGNyZWF0ZUdyaWRDb2x1bW5zKGRhdGEpIHtcbiAgICAgICAgLyogdGhpcyBjYWxsIGJhY2sgZnVuY3Rpb24gcmVjZWl2ZXMgdGhlIGRhdGEgZnJvbSB0aGUgdmFyaWFibGUgKi9cbiAgICAgICAgLyogY2hlY2sgd2hldGhlciBkYXRhIGlzIHZhbGlkIG9yIG5vdCAqL1xuICAgICAgICBjb25zdCBkYXRhVmFsaWQgPSBkYXRhICYmICFkYXRhLmVycm9yO1xuICAgICAgICAvKmlmIHRoZSBkYXRhIGlzIHR5cGUganNvbiBvYmplY3QsIG1ha2UgaXQgYW4gYXJyYXkgb2YgdGhlIG9iamVjdCovXG4gICAgICAgIGlmIChkYXRhVmFsaWQgJiYgIV8uaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICAgICAgfVxuICAgICAgICAvKiBpZiB0aGUgZGF0YSBpcyBlbXB0eSwgc2hvdyBub2RhdGFtZXNzYWdlICovXG4gICAgICAgIGlmIChfLmlzRW1wdHkoZGF0YSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0R3JpZERhdGEoZGF0YSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRhdGFWYWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlmIG5ldyBjb2x1bW5zIHRvIGJlIHJlbmRlcmVkLCBwcmVwYXJlIGRlZmF1bHQgZmllbGREZWZzIGZvciB0aGUgZGF0YSBwcm92aWRlZCovXG4gICAgICAgIHRoaXMucHJlcGFyZUNvbERlZnMoZGF0YSk7XG5cbiAgICAgICAgdGhpcy5zZXJ2ZXJEYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5zZXRHcmlkRGF0YSh0aGlzLnNlcnZlckRhdGEpO1xuICAgIH1cblxuICAgIGdldFNvcnRFeHByKCkge1xuICAgICAgICBsZXQgc29ydEV4cDtcbiAgICAgICAgbGV0IHBhZ2luZ09wdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2UgJiYgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfUEFHRUFCTEUpKSB7XG4gICAgICAgICAgICBwYWdpbmdPcHRpb25zID0gdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1BBR0lOR19PUFRJT05TKTtcbiAgICAgICAgICAgIHNvcnRFeHAgPSBfLmlzRW1wdHkocGFnaW5nT3B0aW9ucykgPyAnJyA6IGdldE9yZGVyQnlFeHByKHBhZ2luZ09wdGlvbnMuc29ydCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNvcnRFeHAgfHwgJyc7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpIHtcbiAgICAgICAgbGV0IGVuYWJsZU5ld1JvdztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2RhdGFzb3VyY2UnOlxuICAgICAgICAgICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yMzY1M10gd2hlbiBzdGFydFVwZGF0ZSBpcyBmYWxzZSAocmVxdWVzdCBvbiBwYWdlIGxvYWQgcHJvcGVydHkgaXMgdW5jaGVja2VkKSxcbiAgICAgICAgICAgICAgICAvLyB0aGVuIHNldCBzdGF0dXMgbXNnIGFzIFwiTm8gZGF0YSBmb3VuZFwiXG4gICAgICAgICAgICAgICAgaWYgKG52LnN0YXJ0VXBkYXRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxlSW5mbGlnaHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdub2RhdGEnLCB0aGlzLm5vZGF0YW1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLndhdGNoVmFyaWFibGVEYXRhU2V0KHRoaXMuZGF0YXNldCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRhdGFTb3VyY2VDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RhdGFzZXQnOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQoKSAmJiB0aGlzLmdyaWRPcHRpb25zLmdldEN1cnJlbnRQYWdlKCkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRJc05leHRQYWdlRGF0YShmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmJpbmRkYXRhc291cmNlICYmICF0aGlzLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpZiB0YWJsZSBpcyBpbnNpZGUgbGlzdCB0aGVuIHRhYmxlIGRhdGFzZXQgd2lsbCBiZSBzZXQgYXMgXCJpdGVtLlhYWFwiIGFuZCB0aGVyZSBpcyBubyBkYXRhc291cmNlLlxuICAgICAgICAgICAgICAgIC8vIFNvIGV4dHJhY3RpbmcgZGF0YXNvdXJjZSBmcm9tIHRoZSBkYXRzZXQgYm91bmQgZXhwcmVzc2lvbi5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnRMaXN0ICYmICF0aGlzLmRhdGFzb3VyY2UgJiYgXy5zdGFydHNXaXRoKHRoaXMuYmluZGRhdGFzZXQsICdpdGVtJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlID0gZ2V0RGF0YXNvdXJjZUZyb21FeHByKHRoaXMud2lkZ2V0LiRhdHRycy5nZXQoJ2RhdGFzZXRib3VuZGV4cHInKSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9ucy5pc05leHRQYWdlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBmZXRjaGluZyBuZXh0IHBhZ2UgZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5zZXRJc0RhdGFVcGRhdGVkQnlVc2VyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gZGF0YXNldCBpcyB1cGRhdGVkIGZyb20gc2NyaXB0XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnNldElzRGF0YVVwZGF0ZWRCeVVzZXIodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExhc3RBY3Rpb25Ub0RhdGFzZXRVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuc2V0SXNOZXh0UGFnZURhdGEoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGZvciBTdGF0aWMgVmFyaWFibGVzIHdpdGggUmV0YWluIFN0YXRlIGVuYWJsZWQsIHByZXZlbnQgVGFibGUgZnJvbSByZW5kZXJpbmcgbW9yZSB0aGFuIG9uY2VcbiAgICAgICAgICAgICAgICBpZiAoIShfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnICYmIHRoaXMuX3BhZ2VMb2FkICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53YXRjaFZhcmlhYmxlRGF0YVNldChudik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZmlsdGVybW9kZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignZmlsdGVybW9kZScsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlYXJjaGxhYmVsJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdzZWFyY2hMYWJlbCcsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25hdmlnYXRpb24nOlxuICAgICAgICAgICAgICAgIGlmIChudiA9PT0gJ0FkdmFuY2VkJykgeyAvLyBTdXBwb3J0IGZvciBvbGRlciBwcm9qZWN0cyB3aGVyZSBuYXZpZ2F0aW9uIHR5cGUgd2FzIGFkdmFuY2VkIGluc3RlYWQgb2YgY2xhc2ljXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbiA9ICdDbGFzc2ljJztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobnYgIT09ICdOb25lJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3duYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhR3JpZE9wdGlvbignbmF2aWdhdGlvbicsIHRoaXMubmF2aWdhdGlvbik7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRlbWFuZExvYWQgPSBudiA9PT0gTkFWSUdBVElPTl9UWVBFLk9OREVNQU5EID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5mU2Nyb2xsID0gbnYgPT09IE5BVklHQVRJT05fVFlQRS5TQ1JPTEwgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZDb250cm9scyA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZ3JpZGZpcnN0cm93c2VsZWN0JzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdzZWxlY3RGaXJzdFJvdycsIG52KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyaWRjbGFzcyc6XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdjc3NDbGFzc05hbWVzLmdyaWQnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdub2RhdGFtZXNzYWdlJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ2RhdGFTdGF0ZXMubm9kYXRhJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbG9hZGluZ2RhdGFtc2cnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnZGF0YVN0YXRlcy5sb2FkaW5nJywgbnYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbG9hZGluZ2ljb24nOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdvcHRpb24nLCAnbG9hZGluZ2ljb24nLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzcGFjaW5nJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ3NwYWNpbmcnLCBudik7XG4gICAgICAgICAgICAgICAgaWYgKG52ID09PSAnY29uZGVuc2VkJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TaXplID0gJ3NtYWxsJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TaXplID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZXhwb3J0Zm9ybWF0JzpcbiAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydE9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUG9wdWxhdGUgb3B0aW9ucyBmb3IgZXhwb3J0IGRyb3AgZG93biBtZW51XG4gICAgICAgICAgICAgICAgICAgIF8uZm9yRWFjaChfLnNwbGl0KG52LCAnLCcpLCB0eXBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0T3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBleHBvcnRJY29uTWFwcGluZ1t0eXBlXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Nob3duZXdyb3cnOlxuICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBuZXcgcm93IGlmIHNob3duZXcgaXMgdHJ1ZSBvciBhZGROZXdSb3cgYnV0b24gaXMgcHJlc2VudFxuICAgICAgICAgICAgICAgIGVuYWJsZU5ld1JvdyA9IG52IHx8IF8uc29tZSh0aGlzLmFjdGlvbnMsIGFjdCA9PiBfLmluY2x1ZGVzKGFjdC5hY3Rpb24sICdhZGROZXdSb3coKScpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnb3B0aW9uJywgJ2FjdGlvbnNFbmFibGVkLm5ldycsIGVuYWJsZU5ld1Jvdyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdwYWdlc2l6ZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhTmF2aWdhdG9yLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIG1heFJlc3VsdHM6IG52XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3Iud2lkZ2V0Lm1heFJlc3VsdHMgPSBudjtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFOYXZpZ2F0b3IubWF4UmVzdWx0cyA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb25kZW1hbmRtZXNzYWdlJzpcbiAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCcub24tZGVtYW5kLWRhdGFncmlkID4gYScpLnRleHQobnYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLm9uZGVtYW5kbWVzc2FnZSA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndmlld2xlc3NtZXNzYWdlJzpcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRPcHRpb25zLnZpZXdsZXNzbWVzc2FnZSA9IG52O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2hvdyc6XG4gICAgICAgICAgICAgICAgaWYgKG52KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2hvdycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnaGlkZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRhdGFTb3VyY2VDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuZmllbGREZWZzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgdHJpZ2dlckZuKGNvbC5vbkRhdGFTb3VyY2VDaGFuZ2UgJiYgY29sLm9uRGF0YVNvdXJjZUNoYW5nZS5iaW5kKGNvbCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyQWN0aW9uUm93VmFycygpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25Sb3dJbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5hY3Rpb25Sb3dQYWdlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnNldERhdGFHcmlkT3B0aW9uKCdhY3Rpb25Sb3dJbmRleCcsIHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2FjdGlvblJvd1BhZ2UnLCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIG9uU3R5bGVDaGFuZ2Uoa2V5LCBudiwgb3YpIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3dpZHRoJzpcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0R3JpZERpbWVuc2lvbnMnLCAnd2lkdGgnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdoZWlnaHQnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRHcmlkRGltZW5zaW9ucycsICdoZWlnaHQnLCBudik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5vblN0eWxlQ2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICB9XG5cbiAgICBwb3B1bGF0ZUFjdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuX2FjdGlvbnMuaGVhZGVyID0gW107XG4gICAgICAgIHRoaXMuX2FjdGlvbnMuZm9vdGVyID0gW107XG4gICAgICAgIF8uZm9yRWFjaCh0aGlzLmFjdGlvbnMsIChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChfLmluY2x1ZGVzKGFjdGlvbi5wb3NpdGlvbiwgJ2hlYWRlcicpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWN0aW9ucy5oZWFkZXIucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXMoYWN0aW9uLnBvc2l0aW9uLCAnZm9vdGVyJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hY3Rpb25zLmZvb3Rlci5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgbWV0aG9kIHdpbGwgcmVuZGVyIHRoZSBmaWx0ZXIgcm93LlxuICAgIHJlbmRlckR5bmFtaWNGaWx0ZXJDb2x1bW4oZmlsdGVUZW1SZWYpIHtcbiAgICAgICAgLy8gRm9yIGR5bmFtaWMgdGFibGUgbWFudWFsbHkgcHVzaGluZyB0aGUgZmlsdGVydGVtcGxhdGVSZWYgYXMgdGVtcGxhdGVSZWYgd2lsbCBub3QgYmUgYXZhaWxhYmxlIHByaW9yLlxuICAgICAgICBpZiAodGhpcy5pc2R5bmFtaWN0YWJsZSkge1xuICAgICAgICAgICAgKHRoaXMuZmlsdGVyVG1wbCBhcyBhbnkpLl9yZXN1bHRzLnB1c2goZmlsdGVUZW1SZWYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJDb2x1bW5zKHRhYmxlQ29sdW1uLCBjb2xJbmRleCkge1xuICAgICAgICBpZiAoaXNNb2JpbGUoKSAmJiB0aGlzLnZpZXdwb3J0LmlzTW9iaWxlVHlwZSkge1xuICAgICAgICAgICAgaWYgKCF0YWJsZUNvbHVtbi5tb2JpbGVEaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld3BvcnQuaXNUYWJsZXRUeXBlKSB7XG4gICAgICAgICAgICBpZiAoIXRhYmxlQ29sdW1uLnRhYmxldERpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRhYmxlQ29sdW1uLnBjRGlzcGxheSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGFibGVDb2x1bW5bJ3ByaW1hcnkta2V5J10pIHtcbiAgICAgICAgICAgIHRoaXMucHJpbWFyeUtleS5wdXNoKHRhYmxlQ29sdW1uLmZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkRGVmc1tjb2xJbmRleF0gPSB0YWJsZUNvbHVtbjtcbiAgICAgICAgY29uc3QgY29sQ291bnQgPSB0aGlzLmZpZWxkRGVmcy5sZW5ndGg7XG4gICAgICAgIHRoaXMuZnVsbEZpZWxkRGVmcy5wdXNoKHRhYmxlQ29sdW1uKTtcbiAgICAgICAgdGhpcy5yb3dGaWx0ZXJbdGFibGVDb2x1bW4uZmllbGRdID0ge1xuICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZpZWxkRGVmcy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNbY29sLmZpZWxkXSA9IGNvbDtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIElmIGR5bmFtaWMgZGF0YXRhYmxlIGFuZCBsYXN0IGNvbHVtbiwgcGFzcyB0aGUgY29sdW1ucyB0byBqcXVlcnkgZGF0YXRhYmxlXG4gICAgICAgIGlmICh0aGlzLmlzZHluYW1pY3RhYmxlICYmIGNvbENvdW50ID09PSB0aGlzLm5vT2ZDb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlck9wZXJhdGlvbkNvbHVtbnMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YUdyaWRPcHRpb24oJ2NvbERlZnMnLCB0aGlzLmZpZWxkRGVmcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3RlckZvcm1GaWVsZChuYW1lLCBmb3JtRmllbGQpIHtcbiAgICAgICAgdGhpcy5mb3JtZmllbGRzW25hbWVdID0gZm9ybUZpZWxkO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyQWN0aW9ucyh0YWJsZUFjdGlvbikge1xuICAgICAgICB0aGlzLmFjdGlvbnMucHVzaCh0YWJsZUFjdGlvbik7XG4gICAgICAgIHRoaXMucG9wdWxhdGVBY3Rpb25zKCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJSb3codGFibGVSb3csIHJvd0luc3RhbmNlKSB7XG4gICAgICAgIHRoaXMucm93RGVmID0gdGFibGVSb3c7XG4gICAgICAgIHRoaXMucm93SW5zdGFuY2UgPSByb3dJbnN0YW5jZTtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdjc3NDbGFzc05hbWVzLnJvd0V4cGFuZEljb24nLCB0aGlzLnJvd0RlZi5leHBhbmRpY29uKTtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ29wdGlvbicsICdjc3NDbGFzc05hbWVzLnJvd0NvbGxhcHNlSWNvbicsIHRoaXMucm93RGVmLmNvbGxhcHNlaWNvbik7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMucm93RXhwYW5zaW9uRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMucm93RGVmID0gdGhpcy5yb3dEZWY7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJSb3dBY3Rpb25zKHRhYmxlUm93QWN0aW9uKSB7XG4gICAgICAgIHRoaXMucm93QWN0aW9ucy5wdXNoKHRhYmxlUm93QWN0aW9uKTtcbiAgICB9XG5cbiAgICBzZWxlY3RJdGVtKGl0ZW0sIGRhdGEpIHtcbiAgICAgICAgLyogc2VydmVyIGlzIG5vdCB1cGRhdGluZyBpbW1lZGlhdGVseSwgc28gc2V0IHRoZSBzZXJ2ZXIgZGF0YSB0byBzdWNjZXNzIGNhbGxiYWNrIGRhdGEgKi9cbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmVyRGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNPYmplY3QoaXRlbSkpIHtcbiAgICAgICAgICAgIGl0ZW0gPSBfLm9taXRCeShpdGVtLCAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXy5pc0FycmF5KHZhbHVlKSAmJiBfLmlzRW1wdHkodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NlbGVjdFJvdycsIGl0ZW0sIHRydWUpO1xuICAgIH1cbiAgICAvKiBkZXNlbGVjdCB0aGUgZ2l2ZW4gaXRlbSovXG4gICAgZGVzZWxlY3RJdGVtKGl0ZW0pIHtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2Rlc2VsZWN0Um93JywgaXRlbSk7XG4gICAgfVxuXG4gICAgb25EYXRhTmF2aWdhdG9yRGF0YVNldENoYW5nZShudikge1xuICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgdGhpcy5fX2Z1bGxEYXRhID0gbnY7XG4gICAgICAgIHRoaXMuY2hlY2tGaWx0ZXJzQXBwbGllZCh0aGlzLmdldFNvcnRFeHByKCkpO1xuICAgICAgICBpZiAodGhpcy5faXNDbGllbnRTZWFyY2gpIHtcbiAgICAgICAgICAgIGRhdGEgPSBnZXRDbG9uZWRPYmplY3QodGhpcy5fX2Z1bGxEYXRhKTtcbiAgICAgICAgICAgIGlmIChfLmlzT2JqZWN0KGRhdGEpICYmICFfLmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0U2VhcmNoUmVzdWx0KGRhdGEsIHRoaXMuZmlsdGVySW5mbyk7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRTb3J0UmVzdWx0KGRhdGEsIHRoaXMuc29ydEluZm8pO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG52O1xuICAgIH1cblxuICAgIHRvZ2dsZU1lc3NhZ2Uoc2hvdywgdHlwZSwgbXNnLCBoZWFkZXI/KSB7XG4gICAgICAgIGlmIChzaG93ICYmIG1zZykge1xuICAgICAgICAgICAgdGhpcy5hcHAubm90aWZ5QXBwKG1zZywgdHlwZSwgaGVhZGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4cG9ydCgkaXRlbSkge1xuICAgICAgICBsZXQgZmlsdGVyRmllbGRzO1xuICAgICAgICBjb25zdCBzb3J0T3B0aW9ucyA9IF8uaXNFbXB0eSh0aGlzLnNvcnRJbmZvKSA/ICcnIDogdGhpcy5zb3J0SW5mby5maWVsZCArICcgJyArIHRoaXMuc29ydEluZm8uZGlyZWN0aW9uO1xuICAgICAgICBjb25zdCBjb2x1bW5zID0ge307XG4gICAgICAgIGxldCBpc1ZhbGlkO1xuICAgICAgICBsZXQgcmVxdWVzdERhdGE7XG4gICAgICAgIHRoaXMuZmllbGREZWZzLmZvckVhY2goZmllbGREZWYgPT4ge1xuICAgICAgICAgICAgLy8gRG8gbm90IGFkZCB0aGUgcm93IG9wZXJhdGlvbiBhY3Rpb25zIGNvbHVtbiB0byB0aGUgZXhwb3J0ZWQgZmlsZS5cbiAgICAgICAgICAgIGlmIChmaWVsZERlZi5maWVsZCA9PT0gUk9XX09QU19GSUVMRCB8fCAhZmllbGREZWYuc2hvdykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAnaGVhZGVyJzogZmllbGREZWYuZGlzcGxheU5hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBJZiBjb2x1bW4gaGFzIGV4cG9ydGV4cHJlc3Npb24sIHRoZW4gc2VuZCBmb3JtIHRoZSBleHByZXNzaW9uIGFzIHJlcXVpcmVkIGJ5IGJhY2tlbmQuXG4gICAgICAgICAgICAvLyBvdGhlcndpc2Ugc2VuZCB0aGUgZmllbGQgbmFtZS5cbiAgICAgICAgICAgIGlmIChmaWVsZERlZi5leHBvcnRleHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgKDxhbnk+b3B0aW9uKS5leHByZXNzaW9uID0gZmllbGREZWYuZXhwb3J0ZXhwcmVzc2lvbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgKDxhbnk+b3B0aW9uKS5maWVsZCA9IGZpZWxkRGVmLmZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sdW1uc1tmaWVsZERlZi5maWVsZF0gPSBvcHRpb247XG4gICAgICAgIH0pO1xuICAgICAgICBmaWx0ZXJGaWVsZHMgPSB0aGlzLmdldEZpbHRlckZpZWxkcyh0aGlzLmZpbHRlckluZm8pO1xuICAgICAgICByZXF1ZXN0RGF0YSA9IHtcbiAgICAgICAgICAgIG1hdGNoTW9kZSA6ICdhbnl3aGVyZWlnbm9yZWNhc2UnLFxuICAgICAgICAgICAgZmlsdGVyRmllbGRzIDogZmlsdGVyRmllbGRzLFxuICAgICAgICAgICAgb3JkZXJCeSA6IHNvcnRPcHRpb25zLFxuICAgICAgICAgICAgZXhwb3J0VHlwZSA6ICRpdGVtLmxhYmVsLFxuICAgICAgICAgICAgbG9naWNhbE9wIDogJ0FORCcsXG4gICAgICAgICAgICBleHBvcnRTaXplIDogdGhpcy5leHBvcnRkYXRhc2l6ZSxcbiAgICAgICAgICAgIGNvbHVtbnMgOiBjb2x1bW5zXG4gICAgICAgIH07XG4gICAgICAgIGlzVmFsaWQgPSB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWV4cG9ydCcsIHskZGF0YTogcmVxdWVzdERhdGF9KTtcbiAgICAgICAgaWYgKGlzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdERhdGEuZmllbGRzID0gXy52YWx1ZXMocmVxdWVzdERhdGEuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkRPV05MT0FELCB7ZGF0YTogcmVxdWVzdERhdGF9KTtcbiAgICB9XG5cbiAgICBleHBhbmRSb3cocm93SWQpIHtcbiAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2V4cGFuZFJvdycsIHJvd0lkKTtcbiAgICB9XG5cbiAgICBjb2xsYXBzZVJvdyhyb3dJZCkge1xuICAgICAgICB0aGlzLmNhbGxEYXRhR3JpZE1ldGhvZCgnY29sbGFwc2VSb3cnLCByb3dJZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZG9jdW1lbnRDbGlja0JpbmQoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgJHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgLy8gSWYgY2xpY2sgdHJpZ2dlcmVkIGZyb20gc2FtZSBncmlkIG9yIGEgZGlhbG9nLCBkbyBub3Qgc2F2ZSB0aGUgcm93XG4gICAgICAgIGlmICh0aGlzLiRlbGVtZW50WzBdLmNvbnRhaW5zKCR0YXJnZXQpIHx8IGV2ZW50LnRhcmdldC5kb2N0eXBlIHx8IGlzSW5wdXRCb2R5V3JhcHBlcigkKCR0YXJnZXQpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FsbERhdGFHcmlkTWV0aG9kKCdzYXZlUm93Jyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVkcmF3KGZvcmNlUmVuZGVyKSB7XG4gICAgICAgIGlmIChmb3JjZVJlbmRlcikge1xuICAgICAgICAgICAgdGhpcy5kYXRhZ3JpZEVsZW1lbnQuZGF0YXRhYmxlKHRoaXMuZ3JpZE9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldENvbEdyb3VwV2lkdGhzJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsRGF0YUdyaWRNZXRob2QoJ2FkZE9yUmVtb3ZlU2Nyb2xsJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGludm9rZUFjdGlvbkV2ZW50KCRldmVudCwgZXhwcmVzc2lvbjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZuID0gJHBhcnNlRXZlbnQoZXhwcmVzc2lvbik7XG4gICAgICAgIGZuKHRoaXMudmlld1BhcmVudCwgT2JqZWN0LmFzc2lnbih0aGlzLmNvbnRleHQsIHskZXZlbnR9KSk7XG4gICAgfVxuXG4gICAgLy8gY2hhbmdlIGFuZCBibHVyIGV2ZW50cyBhcmUgYWRkZWQgZnJvbSB0aGUgdGVtcGxhdGVcbiAgICBwcm90ZWN0ZWQgaGFuZGxlRXZlbnQobm9kZTogSFRNTEVsZW1lbnQsIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24sIGxvY2FsczogYW55KSB7XG4gICAgICAgIGlmIChldmVudE5hbWUgIT09ICdzZWxlY3QnKSB7XG4gICAgICAgICAgICBzdXBlci5oYW5kbGVFdmVudCh0aGlzLm5hdGl2ZUVsZW1lbnQsIGV2ZW50TmFtZSwgY2FsbGJhY2ssIGxvY2Fscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmlnZ2VyVXBsb2FkRXZlbnQoJGV2ZW50LCBldmVudE5hbWUsIGZpZWxkTmFtZSwgcm93KSB7XG4gICAgICAgIGNvbnN0IHBhcmFtczogYW55ID0geyRldmVudCwgcm93fTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbHVtbnNbZmllbGROYW1lXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudE5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgICAgICAgICBwYXJhbXMubmV3VmFsID0gJGV2ZW50LnRhcmdldC5maWxlcztcbiAgICAgICAgICAgIHBhcmFtcy5vbGRWYWwgPSB0aGlzLmNvbHVtbnNbZmllbGROYW1lXS5fb2xkVXBsb2FkVmFsO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0uX29sZFVwbG9hZFZhbCA9IHBhcmFtcy5uZXdWYWw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb2x1bW5zW2ZpZWxkTmFtZV0uaW52b2tlRXZlbnRDYWxsYmFjayhldmVudE5hbWUsIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJGb3JtV2lkZ2V0KCkge31cblxuICAgIC8vIEZvcm0gY29udHJvbCBhY2Nlc3NvciBtZXRob2RzLiBUaGlzIHdpbGwgYmUgdXNlZCBmb3IgdGFibGUgaW5zaWRlIGZvcm1cbiAgICB3cml0ZVZhbHVlKCkge31cblxuICAgIHByaXZhdGUgX29uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgICBwcml2YXRlIF9vblRvdWNoZWQ6IGFueSA9ICgpID0+IHt9O1xuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbikge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICAgIH1cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbikge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBuZ09uRGV0YWNoKCkge1xuICAgICAgICBzdXBlci5uZ09uRGV0YWNoKCk7XG4gICAgICAgIGlmIChfLmdldCh0aGlzLmRhdGFzb3VyY2UsICdjYXRlZ29yeScpID09PSAnd20uVmFyaWFibGUnICYmIHRoaXMuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJykge1xuICAgICAgICAgICAgdGhpcy5fcGFnZUxvYWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3BhZ2VMb2FkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkaW5nXCIgKm5nSWY9XCJ0aXRsZSB8fCBzdWJoZWFkaW5nIHx8IGljb25jbGFzcyB8fCBleHBvcnRPcHRpb25zLmxlbmd0aCB8fCBfYWN0aW9ucy5oZWFkZXIubGVuZ3RoXCI+XG4gICAgPGgzIGNsYXNzPVwicGFuZWwtdGl0bGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJhcHAtaWNvbiBwYW5lbC1pY29uIHt7aWNvbmNsYXNzfX1cIiAqbmdJZj1cImljb25jbGFzc1wiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCIgW2lubmVySFRNTF09XCJ0aXRsZVwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCIgW2lubmVySFRNTF09XCJzdWJoZWFkaW5nXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYWN0aW9ucyBhcHAtZGF0YWdyaWQtYWN0aW9uc1wiICpuZ0lmPVwiZXhwb3J0T3B0aW9ucy5sZW5ndGggfHwgX2FjdGlvbnMuaGVhZGVyLmxlbmd0aFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnRuIG9mIF9hY3Rpb25zLmhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJ0bi53aWRnZXRUeXBlID09PSAnYnV0dG9uJyA/IGJ1dHRvblJlZiA6IGFuY2hvclJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7YnRuOmJ0bn1cIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiB3bU1lbnUgZHJvcGRvd24gY2FwdGlvbi5iaW5kPVwiYXBwTG9jYWxlLkxBQkVMX0VYUE9SVFwiICpuZ0lmPVwiZXhwb3J0T3B0aW9ucy5sZW5ndGhcIiAgYXV0b2Nsb3NlPVwiYWx3YXlzXCIgYXR0ci5uYW1lPVwie3tuYW1lfX0tZXhwb3J0XCJcbiAgICAgICAgICAgICAgICBkYXRhc2V0LmJpbmQ9XCJleHBvcnRPcHRpb25zXCIgc2VsZWN0LmV2ZW50PVwiZXhwb3J0KCRpdGVtKVwiIG1lbnVwb3NpdGlvbj1cImRvd24sbGVmdFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2gzPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiYXBwLWRhdGFncmlkXCIgI2RhdGFncmlkRWxlbWVudD48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInBhbmVsLWZvb3RlciBjbGVhcmZpeFwiIFtoaWRkZW5dPVwiIV9hY3Rpb25zLmZvb3Rlci5sZW5ndGggJiYgKCFzaG93bmF2aWdhdGlvbiB8fCAob25EZW1hbmRMb2FkICYmIGRhdGFOYXZpZ2F0b3IuaXNEaXNhYmxlTmV4dCkgfHwgZGF0YU5hdmlnYXRvcj8uZGF0YVNpemUgPD0gcGFnZXNpemUpXCI+XG4gICAgPGRpdiBjbGFzcz1cImFwcC1kYXRhZ3JpZC1wYWdpbmF0b3JcIiBbaGlkZGVuXT1cIighZGF0YU5hdmlnYXRvcj8uZGF0YVNpemUgJiYgIWRhdGFOYXZpZ2F0b3IuZGF0YXNvdXJjZT8ucGFnaW5hdGlvbj8ubmV4dCkgfHwgIXNob3duYXZpZ2F0aW9uIHx8IChvbkRlbWFuZExvYWQgJiYgZGF0YU5hdmlnYXRvci5pc0Rpc2FibGVOZXh0KSB8fCBkYXRhTmF2aWdhdG9yPy5kYXRhU2l6ZSA8PSBwYWdlc2l6ZVwiPlxuICAgICAgICA8bmF2IHdtUGFnaW5hdGlvbiBzaG93LmJpbmQ9XCJzaG93bmF2aWdhdGlvblwiIG5hdmlnYXRpb25hbGlnbi5iaW5kPVwibmF2aWdhdGlvbmFsaWduXCJcbiAgICAgICAgICAgICBuYXZpZ2F0aW9uc2l6ZS5iaW5kPVwibmF2aWdhdGlvblNpemVcIlxuICAgICAgICAgICAgIG5hdmlnYXRpb24uYmluZD1cIm5hdkNvbnRyb2xzXCIgc2hvd3JlY29yZGNvdW50LmJpbmQ9XCJzaG93cmVjb3JkY291bnRcIiBtYXhzaXplLmJpbmQ9XCJtYXhzaXplXCJcbiAgICAgICAgICAgICBib3VuZGFyeWxpbmtzLmJpbmQ9XCJib3VuZGFyeWxpbmtzXCJcbiAgICAgICAgICAgICBmb3JjZWVsbGlwc2VzLmJpbmQ9XCJmb3JjZWVsbGlwc2VzXCIgZGlyZWN0aW9ubGlua3MuYmluZD1cImRpcmVjdGlvbmxpbmtzXCI+PC9uYXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImFwcC1kYXRhZ3JpZC1hY3Rpb25zXCIgKm5nSWY9XCJfYWN0aW9ucy5mb290ZXIubGVuZ3RoXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ0biBvZiBfYWN0aW9ucy5mb290ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJ0bi53aWRnZXRUeXBlID09PSAnYnV0dG9uJyA/IGJ1dHRvblJlZiA6IGFuY2hvclJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7YnRuOmJ0bn1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNidXR0b25SZWYgbGV0LWJ0bj1cImJ0blwiPlxuICAgIDxidXR0b24gd21CdXR0b24gY2FwdGlvbi5iaW5kPVwiYnRuLmRpc3BsYXlOYW1lXCIgc2hvdy5iaW5kPVwiYnRuLnNob3dcIiBjbGFzcy5iaW5kPVwiYnRuLmNsYXNzXCIgIGljb25jbGFzcy5iaW5kPVwiYnRuLmljb25jbGFzc1wiIChjbGljayk9XCJpbnZva2VBY3Rpb25FdmVudCgkZXZlbnQsIGJ0bi5hY3Rpb24pXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYnRuLXNtJzogc3BhY2luZyA9PT0gJ2NvbmRlbnNlZCcsICdkaXNhYmxlZC1uZXcnOiBidG4ua2V5ID09PSAnYWRkTmV3Um93JyAmJiAoaXNHcmlkRWRpdE1vZGUgfHwgaXNMb2FkaW5nKX1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIHNob3J0Y3V0a2V5LmJpbmQ9XCJidG4uc2hvcnRjdXRrZXlcIiB0YWJpbmRleC5iaW5kPVwiYnRuLnRhYmluZGV4XCIgaGludC5iaW5kPVwiYnRuLnRpdGxlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJidG4uZGlzcGxheU5hbWVcIiBkaXNhYmxlZC5iaW5kPVwiYnRuLmRpc2FibGVkXCIgY29uZGl0aW9uYWxjbGFzcy5iaW5kPVwiYnRuLmNvbmRpdGlvbmFsY2xhc3NcIiBjb25kaXRpb25hbHN0eWxlLmJpbmQ9XCJidG4uY29uZGl0aW9uYWxzdHlsZVwiPjwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhbmNob3JSZWYgbGV0LWJ0bj1cImJ0blwiPlxuICAgIDxhIHdtQW5jaG9yIGNhcHRpb24uYmluZD1cImJ0bi5kaXNwbGF5TmFtZVwiIHNob3cuYmluZD1cImJ0bi5zaG93XCIgY2xhc3MuYmluZD1cImJ0bi5jbGFzc1wiICBpY29uY2xhc3MuYmluZD1cImJ0bi5pY29uY2xhc3NcIiAoY2xpY2spPVwiaW52b2tlQWN0aW9uRXZlbnQoJGV2ZW50LCBidG4uYWN0aW9uKVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2J0bi1zbSc6IHNwYWNpbmcgPT09ICdjb25kZW5zZWQnLCAnZGlzYWJsZWQtbmV3JzogYnRuLmtleSA9PT0gJ2FkZE5ld1JvdycgJiYgKGlzR3JpZEVkaXRNb2RlIHx8IGlzTG9hZGluZyl9XCJcbiAgICAgICAgICAgIHNob3J0Y3V0a2V5LmJpbmQ9XCJidG4uc2hvcnRjdXRrZXlcIiB0YWJpbmRleC5iaW5kPVwiYnRuLnRhYmluZGV4XCIgaGludC5iaW5kPVwiYnRuLnRpdGxlXCJcbiAgICAgICAgICAgIGh5cGVybGluay5iaW5kPVwiYnRuLmh5cGVybGlua1wiIHRhcmdldC5iaW5kPVwiYnRuLnRhcmdldFwiIGNvbmRpdGlvbmFsY2xhc3MuYmluZD1cImJ0bi5jb25kaXRpb25hbGNsYXNzXCIgY29uZGl0aW9uYWxzdHlsZS5iaW5kPVwiYnRuLmNvbmRpdGlvbmFsc3R5bGVcIj48L2E+XG48L25nLXRlbXBsYXRlPlxuXG48ZGl2IGhpZGRlbj5cbiAgICA8bmctY29udGFpbmVyICNtdWx0aUNvbHVtbkZpbHRlclZpZXc+PC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICNpbmxpbmVFZGl0Vmlldz48L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgI2lubGluZUVkaXROZXdWaWV3PjwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAjcm93QWN0aW9uc1ZpZXc+PC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICNyb3dFeHBhbnNpb25BY3Rpb25WaWV3PjwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAjY3VzdG9tRXhwclZpZXc+PC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICNkeW5hbWljVGFibGU+PC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICNyb3dEZXRhaWxWaWV3PjwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtdGFibGUtY29udGFpbmVyXCI+PC9kaXY+XG48L2Rpdj5cbiJdfQ==
|