@wavemaker/app-ng-runtime 11.8.0-rc.5677 → 11.8.0-rc.5679
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/base/bundles/index.umd.js +5 -11
- app-ng-runtime/components/base/esm2022/widgets/common/base/base.component.mjs +6 -12
- app-ng-runtime/components/base/fesm2022/index.mjs +5 -11
- app-ng-runtime/components/base/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/base/widgets/common/base/base.component.d.ts +1 -1
- app-ng-runtime/components/data/table/bundles/index.umd.js +3 -0
- app-ng-runtime/components/data/table/esm2022/table.component.mjs +4 -1
- app-ng-runtime/components/data/table/fesm2022/index.mjs +3 -0
- app-ng-runtime/components/data/table/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/package.json +1 -1
- app-ng-runtime/scripts/datatable/datatable.js +1 -1
|
@@ -1444,19 +1444,13 @@
|
|
|
1444
1444
|
}
|
|
1445
1445
|
createCustomInjector(contextKey, context) {
|
|
1446
1446
|
if (this.customInjectorMap[contextKey]) {
|
|
1447
|
-
|
|
1448
|
-
return this.customInjectorMap[contextKey].injector;
|
|
1449
|
-
}
|
|
1450
|
-
delete this.customInjectorMap[contextKey];
|
|
1447
|
+
return this.customInjectorMap[contextKey].injector;
|
|
1451
1448
|
}
|
|
1452
|
-
const
|
|
1453
|
-
providers: [{ provide: 'EXPLICIT_CONTEXT',
|
|
1449
|
+
const injector = i0.Injector.create({
|
|
1450
|
+
providers: [{ provide: 'EXPLICIT_CONTEXT', useFactory: () => context }]
|
|
1454
1451
|
});
|
|
1455
|
-
this.customInjectorMap[contextKey] = {
|
|
1456
|
-
|
|
1457
|
-
injector: inj
|
|
1458
|
-
};
|
|
1459
|
-
return inj;
|
|
1452
|
+
this.customInjectorMap[contextKey] = { context, injector };
|
|
1453
|
+
return injector;
|
|
1460
1454
|
}
|
|
1461
1455
|
/**
|
|
1462
1456
|
* After the host page is attached from cache, this function is called.
|
|
@@ -559,19 +559,13 @@ export class BaseComponent {
|
|
|
559
559
|
}
|
|
560
560
|
createCustomInjector(contextKey, context) {
|
|
561
561
|
if (this.customInjectorMap[contextKey]) {
|
|
562
|
-
|
|
563
|
-
return this.customInjectorMap[contextKey].injector;
|
|
564
|
-
}
|
|
565
|
-
delete this.customInjectorMap[contextKey];
|
|
562
|
+
return this.customInjectorMap[contextKey].injector;
|
|
566
563
|
}
|
|
567
|
-
const
|
|
568
|
-
providers: [{ provide: 'EXPLICIT_CONTEXT',
|
|
564
|
+
const injector = Injector.create({
|
|
565
|
+
providers: [{ provide: 'EXPLICIT_CONTEXT', useFactory: () => context }]
|
|
569
566
|
});
|
|
570
|
-
this.customInjectorMap[contextKey] = {
|
|
571
|
-
|
|
572
|
-
injector: inj
|
|
573
|
-
};
|
|
574
|
-
return inj;
|
|
567
|
+
this.customInjectorMap[contextKey] = { context, injector };
|
|
568
|
+
return injector;
|
|
575
569
|
}
|
|
576
570
|
/**
|
|
577
571
|
* After the host page is attached from cache, this function is called.
|
|
@@ -630,4 +624,4 @@ export class BaseComponent {
|
|
|
630
624
|
}, {
|
|
631
625
|
type: Optional
|
|
632
626
|
}] }, { type: Promise }], null); })();
|
|
633
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL2Jhc2Uvc3JjL3dpZGdldHMvY29tbW9uL2Jhc2UvYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFVBQVUsRUFDVixVQUFVLEVBQ1YsUUFBUSxFQUNSLE1BQU0sRUFHTixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLFFBQVEsRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFNUMsT0FBTyxFQUNILGVBQWUsRUFDZixXQUFXLEVBQ1gsUUFBUSxFQUNSLE1BQU0sRUFDTixRQUFRLEVBQ1IsR0FBRyxFQUNILFNBQVMsRUFDVCxXQUFXLEVBQ1gsVUFBVSxFQUNWLFdBQVcsRUFDWCxPQUFPLEVBQ1AsTUFBTSxFQUNOLGFBQWEsRUFDYixXQUFXLEVBQ1gsVUFBVSxFQUNiLE1BQU0sVUFBVSxDQUFDO0FBRWxCLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsUUFBUSxFQUFFLFlBQVksRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBaUIsT0FBTyxFQUFpQixZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FB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clZpZXdJbml0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBJbmplY3RvcixcbiAgICBJbmplY3QsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIGluamVjdCxcbiAgICBPcHRpb25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RXZlbnRNYW5hZ2VyfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHtSZXBsYXlTdWJqZWN0LCBTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgICAkaW52b2tlV2F0Y2hlcnMsXG4gICAgJHBhcnNlRXZlbnQsXG4gICAgJHVud2F0Y2gsXG4gICAgJHdhdGNoLFxuICAgIGFkZENsYXNzLFxuICAgIEFwcCxcbiAgICBpc0RlZmluZWQsXG4gICAgaXNNb2JpbGVBcHAsXG4gICAgcmVtb3ZlQXR0cixcbiAgICByZW1vdmVDbGFzcyxcbiAgICBzZXRBdHRyLFxuICAgIHNldENTUyxcbiAgICBzZXRDU1NGcm9tT2JqLFxuICAgIHN3aXRjaENsYXNzLFxuICAgIGZpbmRQYXJlbnRcbn0gZnJvbSAnQHdtL2NvcmUnO1xuXG5pbXBvcnQge2dldFdpZGdldFByb3BzQnlUeXBlfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvd2lkZ2V0LXByb3BzJztcbmltcG9ydCB7aXNTdHlsZX0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL3N0eWxlcic7XG5pbXBvcnQge3JlZ2lzdGVyLCByZW5hbWVXaWRnZXR9IGZyb20gJy4uLy4uL2ZyYW1ld29yay93aWRnZXQtcmVnaXN0cnknO1xuaW1wb3J0IHtDaGFuZ2VMaXN0ZW5lciwgQ29udGV4dCwgSVdpZGdldENvbmZpZywgV2lkZ2V0Q29uZmlnfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvdHlwZXMnO1xuaW1wb3J0IHt3aWRnZXRJZEdlbmVyYXRvcn0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL3dpZGdldC1pZC1nZW5lcmF0b3InO1xuaW1wb3J0IHtESVNQTEFZX1RZUEUsIEVWRU5UU19NQVB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9jb25zdGFudHMnO1xuaW1wb3J0IHtXaWRnZXRQcm94eVByb3ZpZGVyfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvd2lkZ2V0LXByb3h5LXByb3ZpZGVyJztcbmltcG9ydCB7Z2V0V2F0Y2hJZGVudGlmaWVyfSBmcm9tICcuLi8uLi8uLi91dGlscy93aWRnZXQtdXRpbHMnO1xuaW1wb3J0IHtjYW1lbENhc2UsIGZvckVhY2gsIGlzQXJyYXksIGlzT2JqZWN0LCBqb2luLCBtYXAsIGV4dGVuZH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5cbi8vIEdldHMgbGlzdCBvZiBjbGFzc2VzIHRvIGFkZCBhbmQgcmVtb3ZlIGFuZCBhcHBsaWVzIG9uIHRoZSAkZWxcbmNvbnN0IHVwZGF0ZUNsYXNzZXMgPSAodG9BZGQsIHRvUmVtb3ZlLCBlbCkgPT4ge1xuICAgIGlmICh0b1JlbW92ZSAmJiB0b1JlbW92ZS5sZW5ndGgpIHtcbiAgICAgICAgcmVtb3ZlQ2xhc3MoZWwsIGpvaW4odG9SZW1vdmUsICcgJykpO1xuICAgIH1cbiAgICBpZiAodG9BZGQgJiYgdG9BZGQubGVuZ3RoKSB7XG4gICAgICAgIGFkZENsYXNzKGVsLCBqb2luKHRvQWRkLCAnICcpKTtcbiAgICB9XG59O1xuXG4vLyBUbyBhZGQgYW5kIHJlbW92ZSBzdHlsZXMgb24gdGhlICRlbFxuY29uc3QgdXBkYXRlU3R5bGVzID0gKG52LCBvdiwgZWwpID0+IHtcbiAgICBpZiAob3YgJiYgaXNPYmplY3Qob3YpKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvdiB8fCB7fSk7XG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgIHNldENTUyhlbCwga2V5LCAnJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAobnYgJiYgaXNPYmplY3QobnYpKSB7XG4gICAgICAgIHNldENTU0Zyb21PYmooZWwsIG52KTtcbiAgICB9XG5cbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQge1xuXG4gICAgLyoqXG4gICAgICogdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgd2lkZ2V0SWQ6IGFueTtcblxuICAgIHB1YmxpYyBpc0Rlc3Ryb3llZDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBpc0F0dGFjaGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBqUXVlcnkgbmF0aXZlRWxlbWVudCByZWZlcmVuY2Ugb2YgdGhlIGNvbXBvbmVudCByb290XG4gICAgICovXG4gICAgcHVibGljIGdldCAkZWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuICQodGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBET00gbm9kZSByZWZlcmVuY2Ugb2YgdGhlIGNvbXBvbmVudCByb290XG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgLyoqXG4gICAgICogVHlwZSBvZiB0aGUgY29tcG9uZW50XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHdpZGdldFR5cGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE1vc3Qgb2YgdGhlIGNhc2VzIGl0IGlzIHNhbWUgYXMgd2lkZ2V0VHlwZVxuICAgICAqIGZvciBzcGVjaWZpYyB3aWRnZXRzIGxpa2UgY2hhcnRzIHdpZGdldFR5cGUgY2FuIGJlIHdtLWNoYXJ0IHdoZXJlIGFzIHRoZSBzdWJ0eXBlIGNhbiBiZSB3bS1iYXItY2hhcnRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgd2lkZ2V0U3ViVHlwZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogUHJveHkgZm9yIHRoZSBjb21wb25lbnQgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHdpZGdldDogYW55O1xuXG4gICAgLyoqXG4gICAgICogVmlldyBwYXJlbnQgY29tcG9uZW50XG4gICAgICogZWcsIFBhZ2UsIFBhcnRpYWwsIFByZWZhYlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSB2aWV3UGFyZW50OiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudE1hbmdlciB0byBhZGQvcmVtb3ZlIGV2ZW50c1xuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBldmVudE1hbmFnZXI6IEV2ZW50TWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIEFwcCBMb2NhbGVcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgYXBwTG9jYWxlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBTdHlsZSBjaGFuZ2Ugc3ViamVjdCBhbmQgb2JzZXJ2YWJsZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3R5bGVDaGFuZ2UgPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xuXG4gICAgLyoqXG4gICAgICogUHJvcGVydHkgY2hhbmdlIHN1YmplY3QgYW5kIG9ic2VydmFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BlcnR5Q2hhbmdlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIC8qKlxuICAgICAqIE9uIFJlYWR5IFN0YXRlIGNoYW5nZSBzdWJqZWN0IGFuZCBvYnNlcnZhYmxlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWFkeVN0YXRlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIC8qKlxuICAgICAqIENvbXBvbmVudCBkZXN0cm95IHN1YmplY3QgYW5kIG9ic2VydmFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgLyoqXG4gICAgICogTWFwIG9mIGV2ZW50IGhhbmRsZXIgY2FsbGJhY2tzXG4gICAgICovXG4gICAgcHJpdmF0ZSBldmVudEhhbmRsZXJzID0gbmV3IE1hcDxzdHJpbmcsIHtjYWxsYmFjazogRnVuY3Rpb24sIGxvY2FsczogYW55fT4oKTtcblxuICAgIC8qKlxuICAgICAqIGNvbnRleHQgb2YgdGhlIHdpZGdldFxuICAgICAqIHdoZW4gdGhlIHdpZGdldCBpcyBwcmVzZXQgaW5zaWRlIGEgcmVwZWF0ZXIgdGhpcyBjb250ZXh0IHdpbGwgaGF2ZSB0aGUgcmVwZWF0ZXIgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gICAgICovXG4gICAgcHVibGljIGNvbnRleHQ6IGFueTtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWwgc3RhdGUgb2YgdGhlIHdpZGdldC5cbiAgICAgKiBXaWxsIGJlIHVuZGVmaW5lZCBvbmNlIHRoZSBpbml0aWFsIHByb3BlcnRpZXMgYXJlIHNldCBvbiB0byB0aGUgY29tcG9uZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBpbml0U3RhdGU6IE1hcDxzdHJpbmcsIGFueT47XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBmbGFnIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHdhaXQgZm9yIHRoZSB3aWRnZXQgaW5pdGlhbGl6YXRpb24gb3Igbm90XG4gICAgICogSWYgdGhlIGluaXRQcm9taXNlIGlzIHByb3ZpZGVkIGluIHRoZSBjb25zdHJ1Y3Rpb24gd2FpdCB0aWxsIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkXG4gICAgICogSWYgdGhlIGluaXRQcm9taXNlIGlzIG5vdCBwcm92aWRlZCBwcm9jZWVkIHdpdGggdGhlIGluaXRpYWxpemF0aW9uLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlbGF5ZWRJbml0OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRGlzcGxheSB0eXBlIG9mIHRoZSBjb21wb25lbnQuIGVnLCBibG9jayhEZWZhdWx0KSwgaW5saW5lLWJsb2NrLCBpbmxpbmUgZXRjXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXNwbGF5VHlwZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGV2ZW50IHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMuXG4gICAgICogdGhlc2UgZnVuY3Rpb25zIG5lZWRzIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIG9uVmlld0luaXRcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvQmVTZXR1cEV2ZW50c1F1ZXVlOiBBcnJheTxGdW5jdGlvbj4gPSBbXTtcblxuICAgIHB1YmxpYyBfX2Nsb25lYWJsZV9fID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgd2lkZ2V0UHJvcHM6IE1hcDxzdHJpbmcsIGFueT47XG5cbiAgICBwcml2YXRlICRhdHRycyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICBwcml2YXRlIGlzTXV0ZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuICAgIHB1YmxpYyB2aWV3UGFyZW50QXBwOiBBcHA7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBpbmo6IEluamVjdG9yLFxuICAgICAgICBASW5qZWN0KFdpZGdldENvbmZpZykgY29uZmlnOiBJV2lkZ2V0Q29uZmlnLFxuICAgICAgICBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnksXG4gICAgICAgIGluaXRQcm9taXNlPzogUHJvbWlzZTxhbnk+IC8vIFByb21pc2Ugb24gd2hpY2ggdGhlIGluaXRpYWxpemF0aW9uIGhhcyB0byB3YWl0XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWYgPSBpbmouZ2V0KEVsZW1lbnRSZWYpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIC8vbWFraW5nIHRoZSBjb2RlIGNvbXBhdGlibGUgaW4gYm90aCB0aGUgSklUIGFuZCBBT1QgbW9kZXNcbiAgICAgICAgdGhpcy52aWV3UGFyZW50QXBwID0gaW5qID8gaW5qLmdldChBcHApIDogaW5qZWN0KEFwcCk7XG4gICAgICAgIHRoaXMud2lkZ2V0VHlwZSA9IGNvbmZpZy53aWRnZXRUeXBlO1xuICAgICAgICB0aGlzLndpZGdldFN1YlR5cGUgPSBjb25maWcud2lkZ2V0U3ViVHlwZSB8fCBjb25maWcud2lkZ2V0VHlwZTtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmID0gaW5qLmdldChWaWV3Q29udGFpbmVyUmVmKTtcbiAgICAgICAgLy8gdGhpcy52aWV3UGFyZW50ID0gKGluaiBhcyBhbnkpLnZpZXcuY29tcG9uZW50O1xuICAgICAgICAvLyB0aGlzLnZpZXdQYXJlbnQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkucGFyZW50SW5qZWN0b3IuX2xWaWV3WzhdO1xuICAgICAgICAvLyB0aGlzLnZpZXdQYXJlbnQgPSBfdmlld1BhcmVudCB8fCAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkucGFyZW50SW5qZWN0b3IuX2xWaWV3WzhdO1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvbWFpbi9wYWNrYWdlcy9jb3JlL3NyYy9yZW5kZXIzL2ludGVyZmFjZXMvdmlldy50c1xuXG4gICAgICAgIGxldCBsVmlldyA9ICh0aGlzLmluaiBhcyBhbnkpLl9sVmlldztcbiAgICAgICAgdGhpcy52aWV3UGFyZW50ID0gZmluZFBhcmVudChsVmlldywgdGhpcy52aWV3UGFyZW50QXBwKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIi0tLSoqKioqKioqKioqKiotLWNvbnRleHQtLSoqKioqKioqKioqKiotLS1cIiwgbFZpZXdbOF0pO1xuICAgICAgICB0aGlzLmNvbnRleHQgPSAodGhpcy5pbmogYXMgYW55KS5fbFZpZXdbOF07XG5cbiAgICAgICAgdGhpcy5kaXNwbGF5VHlwZSA9IGNvbmZpZy5kaXNwbGF5VHlwZSB8fCBESVNQTEFZX1RZUEUuQkxPQ0s7XG4gICAgICAgIC8vIHRoaXMuY29udGV4dCA9IChpbmogYXMgYW55KS52aWV3LmNvbnRleHQ7XG4gICAgICAgIC8vIHRoaXMuY29udGV4dCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5faG9zdExWaWV3LmRlYnVnLmNvbnRleHQ7XG4gICAgICAgIC8vIGxldCBoYXNJbXBsaWNpdENvbnRleHQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkuX2hvc3RMVmlldy5maW5kKHQgPT4gdCAmJiAhIXQuJGltcGxpY2l0KTtcbiAgICAgICAgLy8gd2hlbiAkaW1wbGljaXQgaXMgbm90IGF2YWlsYWJsZSwgdGhpcyBvYmplY3QgY29udGFpbnMgc29tZSBuZ0ZvciBjb250ZXh0IG9yIGxpc3RpdGVtIGNvbnRleHQgb2YgdGhlIHdpZGdldCB0aGVuXG4gICAgICAgIC8vIHdlIHVzZSB0aGUgZGlyZWN0IHBhcmVudCBmb3IgZXhhbXBsZTogbmF2IGNvbXBvbmVudCBpcyB0aGUgcGFyZW50IGZvciBhbmNob3IgPT4gYW5jaG9yIGdldHMgdmlld1BhcmVudCBhcyBOYXZcbiAgICAgICAgLy8gSW4gb3RoZXIgY2FzZSwgd2hlcmUgd2UgaGF2ZSBpbXBsaWNpdENvbnRleHQgdGhlcmUgd2UgY2FuIG1ha2UgdXNlIG9mIHBhZ2UvYXBwIGxldmVsIGNvbnRleHQgaGVuY2Ugdmlld1BhcmVudC52aWV3UGFyZW50IHRvIGdldCBwYWdlIGxldmVsIGNvbnRleHRcbiAgICAgICAgLyppZiAoaGFzSW1wbGljaXRDb250ZXh0ICYmIHRoaXMudmlld1BhcmVudC52aWV3UGFyZW50KSB7XG4gICAgICAgICAgICBpZiAodGhpcy52aWV3UGFyZW50LndpZGdldFR5cGUgIT09ICd3bS1jYXJkJyAmJiB0aGlzLnZpZXdQYXJlbnQud2lkZ2V0VHlwZSAhPT0gJ3dtLWlmcmFtZWRpYWxvZydcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnZpZXdQYXJlbnQud2lkZ2V0VHlwZSAhPT0gJ3dtLXBhcnRpYWxkaWFsb2cnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3UGFyZW50ID0gdGhpcy52aWV3UGFyZW50LnZpZXdQYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYXNJbXBsaWNpdENvbnRleHQgfHwgKCF0aGlzLnZpZXdQYXJlbnQud2lkZ2V0VHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5faG9zdExWaWV3LmZpbmQodCA9PiB0ICYmICEhdC4kaW1wbGljaXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gKHRoaXMudmlld0NvbnRhaW5lclJlZiBhcyBhbnkpLnBhcmVudEluamVjdG9yLl9sVmlld1s4XTtcbiAgICAgICAgfSovXG5cbiAgICAgICAgLyppZihfdmlld1BhcmVudCAmJiAhaGFzSW1wbGljaXRDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkuX2hvc3RMVmlld1s4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IGhhc0ltcGxpY2l0Q29udGV4dDtcbiAgICAgICAgfSovXG4gICAgICAgIC8vIGlmIChbJ3dtLWxpc3QnLCAnd20tbmF2J10uaW5jbHVkZXModGhpcy52aWV3UGFyZW50LndpZGdldFR5cGUpIHx8IFsnd20tY2Fyb3VzZWwtdGVtcGxhdGUnLCAnd20tY2FyZCddLmluY2x1ZGVzKHRoaXMud2lkZ2V0VHlwZSkpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuY29udGV4dCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5faG9zdExWaWV3LmRlYnVnLmNvbnRleHQ7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICB0aGlzLmNvbnRleHQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkucGFyZW50SW5qZWN0b3IuX2xWaWV3WzhdO1xuICAgICAgICAvLyB9XG4gICAgICAgIHRoaXMud2lkZ2V0ID0gdGhpcy5jcmVhdGVQcm94eSgpO1xuICAgICAgICB0aGlzLmV2ZW50TWFuYWdlciA9IGluai5nZXQoRXZlbnRNYW5hZ2VyKTtcbiAgICAgICAgKHRoaXMubmF0aXZlRWxlbWVudCBhcyBhbnkpLndpZGdldCA9IHRoaXMud2lkZ2V0O1xuXG4gICAgICAgIHRoaXMuYXBwTG9jYWxlID0gaW5qLmdldChBcHApLmFwcExvY2FsZSB8fCB7fTtcblxuICAgICAgICB0aGlzLmluaXRDb250ZXh0KCk7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5ob3N0Q2xhc3MpIHtcbiAgICAgICAgICAgIGFkZENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgY29uZmlnLmhvc3RDbGFzcyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndpZGdldElkID0gdGhpcy5nZW5lcmF0ZVdpZGdldElkKCk7XG4gICAgICAgIHNldEF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCAnd2lkZ2V0LWlkJywgdGhpcy53aWRnZXRJZCwgdHJ1ZSk7XG5cbiAgICAgICAgLy8gcmVnaXN0ZXIgZGVmYXVsdCBwcm9wZXJ0eSBjaGFuZ2UgaGFuZGxlciBhbmQgc3R5bGUgY2hhbmdlIGhhbmRsZXJcbiAgICAgICAgdGhpcy5yZWdpc3RlclN0eWxlQ2hhbmdlTGlzdGVuZXIodGhpcy5vblN0eWxlQ2hhbmdlLCB0aGlzKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlTGlzdGVuZXIodGhpcy5vblByb3BlcnR5Q2hhbmdlLCB0aGlzKTtcblxuICAgICAgICAvLyBpZiB0aGUgaW5pdFByb21pc2UgaXMgcHJvdmlkZWQsIHdhaXQgdGlsbCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCB0byBwcm9jZWVkIHdpdGggdGhlIHdpZGdldCBpbml0aWFsaXphdGlvblxuICAgICAgICBpZiAoIWluaXRQcm9taXNlKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRXaWRnZXQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVsYXllZEluaXQgPSB0cnVlO1xuICAgICAgICAgICAgaW5pdFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0V2lkZ2V0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbml0UHJvcHMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmKGV4cGxpY2l0Q29udGV4dCkge1xuICAgICAgICAgICAgZXh0ZW5kKHRoaXMuY29udGV4dCwgZXhwbGljaXRDb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXROYXRpdmVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0V2lkZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy53aWRnZXRUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRXaWRnZXRTdWJUeXBlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpZGdldFN1YlR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFdpZGdldCgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy53aWRnZXQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFByb3BlcnR5KHByb3BOYW1lLCBwcm9wVmFsdWUpIHtcbiAgICAgICAgdGhpcy53aWRnZXRbcHJvcE5hbWVdID0gcHJvcFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWaWV3UGFyZW50KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdQYXJlbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIG5vdGlmeVN0eWxlQ2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdjogYW55KSB7XG4gICAgICAgIHRoaXMuc3R5bGVDaGFuZ2UubmV4dCh7a2V5LCBudiwgb3Z9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbm90aWZ5UHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92OiBhbnkpIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUNoYW5nZS5uZXh0KHtrZXksIG52LCBvdn0pO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclN0eWxlQ2hhbmdlTGlzdGVuZXIoZm46IENoYW5nZUxpc3RlbmVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgZm4gPSBmbi5iaW5kKGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdHlsZUNoYW5nZS5zdWJzY3JpYmUoKHtrZXksIG52LCBvdn0pID0+IGZuKGtleSwgbnYsIG92KSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyUmVhZHlTdGF0ZUxpc3RlbmVyKGZuOiBGdW5jdGlvbiwgY3R4PzogYW55KSB7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGZuID0gZm4uYmluZChjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVhZHlTdGF0ZS5zdWJzY3JpYmUoKCkgPT4gZm4oKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihmbjogQ2hhbmdlTGlzdGVuZXIsIGN0eD86IGFueSkge1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICBmbiA9IGZuLmJpbmQoY3R4KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb3BlcnR5Q2hhbmdlLnN1YnNjcmliZSgoe2tleSwgbnYsIG92fSkgPT4gZm4oa2V5LCBudiwgb3YpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoZm46IEZ1bmN0aW9uLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgZm4gPSBmbi5iaW5kKGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXN0cm95LnN1YnNjcmliZSgoKSA9PiB7fSwgKCkgPT4ge30sICgpID0+IGZuKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREaXNwbGF5VHlwZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5VHlwZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY3JlYXRlUHJveHkoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIFdpZGdldFByb3h5UHJvdmlkZXIuY3JlYXRlKHRoaXMsIHRoaXMud2lkZ2V0U3ViVHlwZSwgZ2V0V2lkZ2V0UHJvcHNCeVR5cGUodGhpcy53aWRnZXRTdWJUeXBlKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGluaXRDb250ZXh0KCkge1xuICAgICAgICAvLyBjb25zdCBjb250ZXh0ID0gKHRoaXMuaW5qIGFzIGFueSkudmlldy5jb250ZXh0O1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0IHx8IHt9O1xuXG4gICAgICAgIGNvbnN0IHBhcmVudENvbnRleHRzID0gdGhpcy5pbmouZ2V0KENvbnRleHQsIHt9KTtcblxuICAgICAgICAvLyBhc3NpZ24gdGhlIGNvbnRleHQgcHJvcGVydHkgYWNjb3JkaW5nbHlcbiAgICAgICAgaWYgKHRoaXMudmlld1BhcmVudCAhPT0gY29udGV4dCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmVudENvbnRleHRzKSB7XG4gICAgICAgICAgICBsZXQgcGFyZW50Q29udGV4dE9iaiA9IHt9O1xuICAgICAgICAgICAgaWYgKGlzQXJyYXkocGFyZW50Q29udGV4dHMpKSB7XG4gICAgICAgICAgICAgICAgZm9yRWFjaChwYXJlbnRDb250ZXh0cywgKGNvbnRleHRPYmopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihwYXJlbnRDb250ZXh0T2JqLCBjb250ZXh0T2JqKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Q29udGV4dE9iaiA9IHBhcmVudENvbnRleHRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gT2JqZWN0LmFzc2lnbih7fSwgcGFyZW50Q29udGV4dE9iaiwgdGhpcy5jb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldCB0aGUgdmFsdWUgb24gdGhlIHByb3h5IG9iamVjdCBpZSwgd2lkZ2V0XG4gICAgICogc2V0dGluZyB0aGUgcHJvcGVydHkgb24gdGhlIHByb3h5IHdpbGwgaW52b2tlIHRoZSBjaGFuZ2UgbGlzdGVuZXJzXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRXaWRnZXRQcm9wZXJ0eShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLndpZGdldFtrZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEF0dHIoYXR0ck5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLiRhdHRycy5nZXQoYXR0ck5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgYXBwIGluc3RhbmNlXG4gICAgICogQHJldHVybnMge0FwcH1cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QXBwSW5zdGFuY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluai5nZXQoQXBwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgYSB1bmlxdWUgaWRcbiAgICAgKiBEZWZhdWx0IHBhdHRlcm4gaXMgYHdpZGdldC1pZC0ke2lkfWBcbiAgICAgKiBDb21wb25lbnRzIGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBnZW5lcmF0ZSBhIGRpZmZlcmVudCBpZCBlZywgYmFyLWNoYXJ0LTFcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVXaWRnZXRJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gd2lkZ2V0SWRHZW5lcmF0b3IubmV4dFVpZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgdGhlIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGFjcm9zcyB0aGUgY29tcG9uZW50c1xuICAgICAqIGVnLFxuICAgICAqICAxLiB2YWx1ZSBvZiB0aGUgY2xhc3MgcHJvcGVydHkgd2lsbCBiZSBhcHBsaWVkIG9uIHRoZSBob3N0IGVsZW1lbnRcbiAgICAgKiAgMi4gYmFzZWQgb24gdGhlIHZhbHVlIG9mIHNob3cgcHJvcGVydHkgY29tcG9uZW50IGlzIHNob3duL2hpZGRlblxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgICAqIEBwYXJhbSBudlxuICAgICAqIEBwYXJhbSBvdlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvblByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdj86IGFueSkge1xuICAgICAgICBpZiAoa2V5ID09PSAnc2hvdycpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5oaWRkZW4gPSAhbnY7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaGludCcpIHtcbiAgICAgICAgICAgIGlmICghaXNNb2JpbGVBcHAoKSkge1xuICAgICAgICAgICAgICAgIHNldEF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCAndGl0bGUnLCBudik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnY2xhc3MnKSB7XG4gICAgICAgICAgICBzd2l0Y2hDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIG52LCBvdik7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gbnYubWF0Y2goLyhcXFd8XikoaChbMC02XSkpKD89XFxzfCQpLyk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgc2V0QXR0cih0aGlzLm5hdGl2ZUVsZW1lbnQsICdyb2xlJywgJ2hlYWRpbmcnKTtcbiAgICAgICAgICAgICAgICBzZXRBdHRyKHRoaXMubmF0aXZlRWxlbWVudCwgJ2FyaWEtbGV2ZWwnLCByZXN1bHRbM10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ25hbWUnIHx8IGtleSA9PT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgc2V0QXR0cih0aGlzLm5hdGl2ZUVsZW1lbnQsIGtleSwgbnYpO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ25hbWUnICYmIG52KSB7XG4gICAgICAgICAgICAgICAgcmVuYW1lV2lkZ2V0KHRoaXMudmlld1BhcmVudCwgdGhpcy53aWRnZXQsIG52LCBvdik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnY29uZGl0aW9uYWxjbGFzcycpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBjbGFzc2VzIGlmIG9sZCBhbmQgbnYgdmFsdWUgYXJlIGRpZmZlcmVudFxuICAgICAgICAgICAgdXBkYXRlQ2xhc3Nlcyhudi50b0FkZCwgbnYudG9SZW1vdmUsIHRoaXMubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSAgaWYgKGtleSA9PT0gJ2F1dG9wbGF5Jykge1xuICAgICAgICAgICAgY29uc3QgdGFnTmFtZSA9IHRoaXMud2lkZ2V0VHlwZSA9PT0gJ3dtLWF1ZGlvJyA/ICdhdWRpbycgOiAndmlkZW8nO1xuICAgICAgICAgICAgLy8gVHJpZ2dlciBtZWRpYShhdWRpby92aWRlbykgZWxlbWVudCBsb2FkIG1ldGhvZCBhZnRlciBjaGFuZ2luZyBhdXRvcGxheSBwcm9wZXJ0eVxuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IodGFnTmFtZSkubG9hZCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NvbmRpdGlvbmFsc3R5bGUnKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgc3R5bGVzIGlmIG9sZCBhbmQgbnYgdmFsdWUgYXJlIGRpZmZlcmVudFxuICAgICAgICAgICAgdXBkYXRlU3R5bGVzKG52LCBvdiwgdGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdhbmltYXRpb24nKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgc3R5bGVzIGlmIG9sZCBhbmQgbnYgdmFsdWUgYXJlIGRpZmZlcmVudFxuICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCBcImFuaW1hdGVkIFwiICsgbnYpO1xuICAgICAgICB9ICBlbHNlIGlmIChrZXkgPT09ICdkaXNhYmxlZCcpIHtcbiAgICAgICAgICAgIC8vIFdNUy0xOTMyMTogSW4gSUUsIHdpZGdldCBpcyBpbiBkaXNhYmxlZCBzdGF0ZSB3aGVuIGRpc2FibGVkPVwiZmFsc2VcIiBhdHRyaWJ1dGUgaXMgcHJlc2VudFxuICAgICAgICAgICAgKG52ID09PSB0cnVlKSA/IHNldEF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCAnZGlzYWJsZWQnLCAndHJ1ZScsIHRydWUpIDogcmVtb3ZlQXR0cih0aGlzLm5hdGl2ZUVsZW1lbnQsICdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBzdHlsZSBjaGFuZ2UgaGFuZGxlclxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvblN0eWxlQ2hhbmdlKGs6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpIHt9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciB0aGUgd2lkZ2V0IHdpdGggdGhlIHdpZGdldFJlZ2lzdHJ5XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlZ2lzdGVyV2lkZ2V0KHdpZGdldE5hbWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKHJlZ2lzdGVyKHRoaXMud2lkZ2V0LCB0aGlzLnZpZXdQYXJlbnQsIHRoaXMud2lkZ2V0SWQsIHdpZGdldE5hbWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBvdmVycmlkZSB0aGVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0TWFwcGVkRXZlbnROYW1lKGV2ZW50TmFtZSkge1xuICAgICAgICByZXR1cm4gRVZFTlRTX01BUC5nZXQoZXZlbnROYW1lKSB8fCBldmVudE5hbWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaW52b2tlIHRoZSBldmVudCBoYW5kbGVyXG4gICAgICogQ29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gZXhlY3V0ZSBjdXN0b20gbG9naWMgYmVmb3JlIGludm9raW5nIHRoZSB1c2VyIGNhbGxiYWNrXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGhhbmRsZUV2ZW50KG5vZGU6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgZXZlbnRDYWxsYmFjazogRnVuY3Rpb24sIGxvY2FsczogYW55LCBtZXRhPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxzLiRldmVudCA9IGU7XG4gICAgICAgICAgICAgICAgaWYgKG1ldGEgPT09ICdkZWxheWVkJykge1xuICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZXZlbnRDYWxsYmFjaygpLCAxNTApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudENhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHBhcnNlIHRoZSBldmVudCBleHByZXNzaW9uIGFuZCBzYXZlIHJlZmVyZW5jZSB0byB0aGUgZnVuY3Rpb24gaW5zaWRlIGV2ZW50SGFuZGxlcnMgbWFwXG4gICAgICogSWYgdGhlIGNvbXBvbmVudCBwcm92aWRlcyBhIG92ZXJyaWRlIGZvciBhbiBldmVudCB0aHJvdWdoIEBFdmVudCBkZWNvcmF0b3IgaW52b2tlIHRoYXRcbiAgICAgKiBlbHNlIGludm9rZSB0aGUgcmVzb2x2ZWQgZnVuY3Rpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwclxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzRXZlbnRBdHRyKGV2ZW50TmFtZTogc3RyaW5nLCBleHByOiBzdHJpbmcsIG1ldGE/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZm4gPSAkcGFyc2VFdmVudChleHByKTtcbiAgICAgICAgY29uc3QgbG9jYWxzID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBsb2NhbHMud2lkZ2V0ID0gdGhpcy53aWRnZXQ7XG4gICAgICAgIGNvbnN0IGJvdW5kRm4gPSBmbi5iaW5kKHVuZGVmaW5lZCwgdGhpcy52aWV3UGFyZW50LCBsb2NhbHMpO1xuXG4gICAgICAgIGNvbnN0IGV2ZW50Q2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgYm91bmRGblZhbDtcbiAgICAgICAgICAgICRpbnZva2VXYXRjaGVycyh0cnVlKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbG9jYWxzLiRldmVudCA9IGxvY2Fscy4kZXZlbnQgfHwgbmV3IHdpbmRvdy5DdXN0b21FdmVudChldmVudE5hbWUpO1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBldmVudCBpcyBib3VuZCBkaXJlY3RseSB0byB0aGUgdmFyaWFibGUgdGhlbiB3ZSBuZWVkIHRvIGludGVybmFsbHkgaGFuZGxlXG4gICAgICAgICAgICAgICAgLy8gdGhlIHByb21pc2UgcmV0dXJuZWQgYnkgdGhlIHZhcmlhYmxlIGNhbGwuXG4gICAgICAgICAgICAgICAgYm91bmRGblZhbCA9IGJvdW5kRm4oKTtcbiAgICAgICAgICAgICAgICBpZiAoYm91bmRGblZhbCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgYm91bmRGblZhbC50aGVuKCByZXNwb25zZSA9PiByZXNwb25zZSwgZXJyID0+IGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvdW5kRm5WYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5ldmVudEhhbmRsZXJzLnNldCh0aGlzLmdldE1hcHBlZEV2ZW50TmFtZShldmVudE5hbWUpLCB7Y2FsbGJhY2s6IGV2ZW50Q2FsbGJhY2ssIGxvY2Fsc30pO1xuICAgICAgICAvLyBwcmVwZW5kIGV2ZW50TmFtZSB3aXRoIG9uIGFuZCBjb252ZXJ0IGl0IHRvIGNhbWVsY2FzZS5cbiAgICAgICAgLy8gZWcsIFwiY2xpY2tcIiAtLS0+IG9uQ2xpY2tcbiAgICAgICAgY29uc3Qgb25FdmVudE5hbWUgPSBjYW1lbENhc2UoYG9uLSR7ZXZlbnROYW1lfWApO1xuICAgICAgICAvLyBzYXZlIHRoZSBldmVudENhbGxiYWNrIGluIHdpZGdldFNjb3BlLlxuICAgICAgICB0aGlzW29uRXZlbnROYW1lXSA9IGV2ZW50Q2FsbGJhY2s7XG5cbiAgICAgICAgLy8gZXZlbnRzIG5lZWRzIHRvIGJlIHNldHVwIGFmdGVyIHZpZXdJbml0XG4gICAgICAgIHRoaXMudG9CZVNldHVwRXZlbnRzUXVldWUucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUV2ZW50KHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcy5nZXRNYXBwZWRFdmVudE5hbWUoZXZlbnROYW1lKSwgZXZlbnRDYWxsYmFjaywgbG9jYWxzLCBtZXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2VzcyB0aGUgYm91bmQgcHJvcGVydHlcbiAgICAgKiBSZWdpc3RlciBhIHdhdGNoIG9uIHRoZSBib3VuZCBleHByZXNzaW9uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NCaW5kQXR0cihwcm9wTmFtZTogc3RyaW5nLCBleHByOiBzdHJpbmcpIHtcblxuICAgICAgICB0aGlzLmluaXRTdGF0ZS5kZWxldGUocHJvcE5hbWUpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKFxuICAgICAgICAgICAgJHdhdGNoKFxuICAgICAgICAgICAgICAgIGV4cHIsXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3UGFyZW50LFxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dCxcbiAgICAgICAgICAgICAgICBudiA9PiB0aGlzLndpZGdldFtwcm9wTmFtZV0gPSBudixcbiAgICAgICAgICAgICAgICBnZXRXYXRjaElkZW50aWZpZXIodGhpcy53aWRnZXRJZCwgcHJvcE5hbWUpLFxuICAgICAgICAgICAgICAgIHByb3BOYW1lID09PSAnZGF0YXNvdXJjZScsXG4gICAgICAgICAgICAgICAgdGhpcy53aWRnZXRQcm9wcy5nZXQocHJvcE5hbWUpLFxuICAgICAgICAgICAgICAgICgpID0+IHRoaXMuaXNNdXRlZFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSB3YXRjaCBvbiB0aGUgYm91bmQgcHJvcGVydHlcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVtb3ZlUHJvcGVydHlCaW5kaW5nKHByb3BOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgJHVud2F0Y2goZ2V0V2F0Y2hJZGVudGlmaWVyKHRoaXMud2lkZ2V0SWQsIHByb3BOYW1lKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaW52b2tlIHRoZSBldmVudCBjYWxsYmFjayBtZXRob2RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gICAgICogQHBhcmFtIGV4dHJhTG9jYWxzXG4gICAgICovXG4gICAgcHVibGljIGludm9rZUV2ZW50Q2FsbGJhY2soZXZlbnROYW1lOiBzdHJpbmcsIGV4dHJhTG9jYWxzPzogYW55KSB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrSW5mbyA9IHRoaXMuZXZlbnRIYW5kbGVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKGNhbGxiYWNrSW5mbykge1xuICAgICAgICAgICAgY29uc3QgZm4gPSBjYWxsYmFja0luZm8uY2FsbGJhY2s7XG4gICAgICAgICAgICBjb25zdCBsb2NhbHMgPSBjYWxsYmFja0luZm8ubG9jYWxzIHx8IHt9O1xuXG4gICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm4oT2JqZWN0LmFzc2lnbihsb2NhbHMsIGV4dHJhTG9jYWxzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzIHRoZSBhdHRyaWJ1dGVcbiAgICAgKiBJZiB0aGUgYXR0cmlidXRlIGlzIGFuIGV2ZW50IGV4cHJlc3Npb24sIGdlbmVyYXRlIGEgZnVuY3Rpb25hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXhwcmVzc2lvblxuICAgICAqICAgICAgYW5kIGtlZXAgaW4gZXZlbnRIYW5kbGVyc1xuICAgICAqIElmIHRoZSBhdHRyaWJ1dGUgaXMgYSBib3VuZCBleHByZXNzaW9uLCByZWdpc3RlciBhIHdhdGNoIG9uIHRoZSBleHByZXNzaW9uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NBdHRyKGF0dHJOYW1lOiBzdHJpbmcsIGF0dHJWYWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiPT09PWF0dHJOYW1lPT09PT1cIiwgYXR0ck5hbWUsIFwiPT09PT10eXBlb2YgYXR0cm5hbWU9PT09PVwiLCB0eXBlb2YgYXR0ck5hbWUsIFwiLS0tLS1hdHRyVmFsdWUtLS0tXCIsIGF0dHJWYWx1ZSk7XG4gICAgICAgIGNvbnN0IHswOiBwcm9wTmFtZSwgMTogdHlwZSwgMjogbWV0YSwgbGVuZ3RofSA9IGF0dHJOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIGlmICh0eXBlID09PSAnYmluZCcpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzaG93IHByb3BlcnR5IGlzIGJvdW5kLCBzZXQgdGhlIGluaXRpYWwgdmFsdWUgdG8gZmFsc2VcbiAgICAgICAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ3Nob3cnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NCaW5kQXR0cihwcm9wTmFtZSwgYXR0clZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnZXZlbnQnKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NFdmVudEF0dHIocHJvcE5hbWUsIGF0dHJWYWx1ZSwgbWV0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgY2xhc3MgYW5kIG5hbWUgYXR0cmlidXRlcy4gQ29tcG9uZW50IHdpbGwgc2V0IHRoZW0gb24gdGhlIHByb3BlciBub2RlXG4gICAgICAgICAgICBpZiAoYXR0ck5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIGF0dHJWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09PSAndGFiaW5kZXgnIHx8IGF0dHJOYW1lID09PSAnbmFtZScpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVBdHRyKHRoaXMubmF0aXZlRWxlbWVudCwgYXR0ck5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmluaXRTdGF0ZS5zZXQocHJvcE5hbWUsIGF0dHJWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlcyBwcm92aWRlZCBvbiBlbERlZjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgcmVxdWlyZWQgYXMgdGhlIG5hdGl2ZSBlbGVtZW50IGF0dHJpYnV0ZXMgYXJlIGNhc2UgaW5zZW5zaXRpdmUoY2FtZWxjYXNlKSBsaWtlIGN1c3RvbUV4cHJlc3Npb25zIGJlY29tZXMgY3VzdG9tZXhwcmVzc2lvblxuICAgICAqIGFuZCBvdXIgbG9naWMgdG8gY2hlY2sgbGlrZSB0aGVzZSBjaGFuZ2VzIHdpbGwgZmFpbC4gQmVmb3JlIElWWSBjaGFuZ2VzLCBhbmd1bGFyIG1haW50YWlucyBhIHNlcGFyYXRlIG9iamVjdCB3aXRoIHRoZXNlIGF0dHJpYnV0ZXNcbiAgICAgKiBhcyBpdCBpcyBsaWtlIGluIHRoZSBjYW1lbGNhc2UuIFdpdGggSVZZIGFsbCB0aG9zZSBhcmUgZ29uZS4gU28gbmVlZCB0byBtYWludGFpbiBhIHNlcGFyYXRlIGxpc3Qgd2l0aCB0aGUgY2FtZWxjYXNpbmcgb2YgYXR0cmlidXRlc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogX3ROb2RlLmF0dHJzIGF0dHJpYnV0ZXMgYXJlIHN0b3JlZCBpbiBhcnJheShldmVuIGluZGV4OiBrZXksIG9kZCBpbmRleDogdmFsdWUpXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRBdHRyaWJ1dGVzKCkge1xuICAgICAgICBsZXQgX3ROb2RlQXR0cnMgPSAodGhpcy5pbmogYXMgYW55KS5fdE5vZGUuYXR0cnMsIGFjdHVhbEF0dHJzID0gQXJyYXkuZnJvbSh0aGlzLm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlcykubWFwKGF0dHIgPT4gYXR0ci5uYW1lKTtcbiAgICAgICAgaWYoX3ROb2RlQXR0cnMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3R1YWxBdHRycy5zb3J0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yRWFjaChfdE5vZGVBdHRycywgKGF0dHIsIGk6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhdHRyID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHR5cGVvZiBhdHRyID09PSAnc3RyaW5nJyAmJiBpICUgMiA9PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxvd2VyQ2FzZUF0dHIgPSBhdHRyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGFjdHVhbEF0dHJzLmluY2x1ZGVzKGxvd2VyQ2FzZUF0dHIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IGFjdHVhbEF0dHJzLmluZGV4T2YobG93ZXJDYXNlQXR0cilcbiAgICAgICAgICAgICAgICAgICAgYWN0dWFsQXR0cnNbaW5kZXhdID0gYXR0cjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qXG4gICAgICAgIFNvcnRpbmcgYXR0cmlidXRlcyBhcyBwcm9wZXJ0aWVzIGxpa2UgcGxhY2Vob2xkZXIgaXMgbm90IHdvcmtpbmcgd2hlbiBpdCBpcyBib3VuZC5cbiAgICAgICAgcGxhY2Vob2xkZXIgYW5kIHBsYWNlaG9sZGVyLmJpbmQgdHdvIHByb3BlcnRpZXMgYXJlIGNvbWluZyBpbiBBcnJheS5cbiAgICAgICAgV2hlbiBhcnJheSBpcyBub3Qgc29ydGVkLCBpbml0aWFsbHkgcGxhY2Vob2xkZXIuYmluZCB2YWx1ZSBpcyBzZXQgdGhlbiBwbGFjZWhvbGRlciBkZWZhdWx0IHZhbHVlIGlzIHVwZGF0ZWQuXG4gICAgICAgIElmIGFycmF5IGlzIHNvcnRlZCwgcGxhY2Vob2xkZXIuYmluZCB2YWx1ZSB3aWxsIGJlIHNldCBmaW5hbGx5LlxuICAgICAgICBUaGlzIGlzIGNhdXNlZCBiZWNhdXNlIG9mIHRoZSB3YXkgd2UgYXJlIHN0b3JpbmcgYXR0cmlidXRlIG5hbWVzIGluIHdhdGNoZXIgcmVnaXN0cnkgbWFwXG4gICAgICAgICAqL1xuICAgICAgICByZXR1cm4gYWN0dWFsQXR0cnMuc29ydCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIHByb2Nlc3NBdHRycygpIHtcbiAgICAgICAgbWFwKHRoaXMuZ2V0QXR0cmlidXRlcygpLCAoYXR0ck5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgbGV0IGF0dHJWYWx1ZSA9IHRoaXMubmF0aXZlRWxlbWVudC5hdHRyaWJ1dGVzW2F0dHJOYW1lXS52YWx1ZVxuICAgICAgICAgICAgdGhpcy4kYXR0cnMuc2V0KGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzQXR0cihhdHRyTmFtZSwgYXR0clZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoZSBpbml0U3RhdGUgd2l0aCB0aGUgZGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgYW5kIHRoZSB2YWx1ZXMgcHJvdmlkZWQgaW4gdGhlIG1hcmt1cFxuICAgICAqIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZXNcbiAgICAgKiBSZWdpc3RlciB0aGUgd2lkZ2V0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGluaXRXaWRnZXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcblxuICAgICAgICAvLyBnZXQgdGhlIHdpZGdldCBwcm9wZXJ0aWVzXG4gICAgICAgIGNvbnN0IHdpZGdldFByb3BzOiBNYXA8c3RyaW5nLCBhbnk+ID0gZ2V0V2lkZ2V0UHJvcHNCeVR5cGUodGhpcy53aWRnZXRTdWJUeXBlKTtcbiAgICAgICAgd2lkZ2V0UHJvcHMuZm9yRWFjaCgodiwgaykgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh2LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFN0YXRlLnNldChrLCB2LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy53aWRnZXRQcm9wcyA9IHdpZGdldFByb3BzO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0F0dHJzKCk7XG5cbiAgICAgICAgdGhpcy5yZWdpc3RlcldpZGdldCh0aGlzLmluaXRTdGF0ZS5nZXQoJ25hbWUnKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoZSBkZWZhdWx0IHByb3BlcnRpZXMgYW5kIHRoZSBwcm9wZXJ0aWVzIHByb3ZpZGVkIGluIHRoZSBtYXJrdXAgaW4gY29tcG9uZW50XG4gICAgICogSW52b2tpbmcgdGhpcyBtZXRob2Qgd2lsbCByZXN1bHQgaW4gaW52b2NhdGlvbiBvZiBwcm9wZXJ0eUNoYW5nZSBoYW5kbGVycyBvbiB0aGUgY29tcG9uZW50IGZvciB0aGUgZmlyc3QgdGltZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzZXRJbml0UHJvcHMoKSB7XG4gICAgICAgIGlmICh0aGlzLmluaXRTdGF0ZS5nZXQoJ25hbWUnKSkge1xuICAgICAgICAgICAgdGhpcy53aWRnZXQubmFtZSA9IHRoaXMuaW5pdFN0YXRlLmdldCgnbmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlLmZvckVhY2goKHYsIGspID0+IHtcbiAgICAgICAgICAgIC8vIG5hbWUgaXMgYWxyZWFkeSBzZXQsIGlnbm9yZSBuYW1lXG4gICAgICAgICAgICAvLyBpZiB0aGUga2V5IGlzIHBhcnQgb2YgdG8gYmUgaWdub3JlZCBhdHRyaWJ1dGVzIGxpc3QgZG8gbm90IHNldCBpdCBvbiB0aGUgY29tcG9uZW50IGluc3RhbmNlXG4gICAgICAgICAgICBpZiAoKHRoaXMud2lkZ2V0UHJvcHMuZ2V0KGspIHx8IGlzU3R5bGUoaykpICYmIGsgIT09ICduYW1lJykge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0W2tdID0gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMucmVhZHlTdGF0ZS5uZXh0KG51bGwpO1xuICAgICAgICB0aGlzLnJlYWR5U3RhdGUuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUsIGlmIGEgbGlzdGVuZXIgcmVnaXN0ZXJlZCBmb3IgdGhlIGdpdmVuIGV2ZW50IG9uIHRoaXMgd2lkZ2V0IG1hcmt1cC5cbiAgICAgKiBAcGFyYW0gZXZlbnROYW1lXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGhhc0V2ZW50Q2FsbGJhY2soZXZlbnROYW1lKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV2ZW50SGFuZGxlcnMuaGFzKGV2ZW50TmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZm9jdXMgb24gdGhlIHdpZGdldFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoZWNrIGZvciB0aGUgbm9kZXMgaGF2aW5nIGZvY3VzLXRhcmdldCBhdHRyaWJ1dGUgaW5zaWRlIHRoZSBlbGVtZW50XG4gICAgICAgICAqIElmIGZvdW5kLCBmb2N1cyB0aGUgZmlyc3Qgbm9kZSAoZWcsIGRhdGUgd2lkZ2V0KVxuICAgICAgICAgKiBlbHNlLCBmb2N1cyB0aGUgZWxlbWVudCAoZWcsIHRleHQgd2lkZ2V0KVxuICAgICAgICAgKi9cbiAgICAgICAgbGV0ICR0YXJnZXQgPSB0aGlzLiRlbGVtZW50WzBdLnF1ZXJ5U2VsZWN0b3IoJ1tmb2N1cy10YXJnZXRdJyk7XG4gICAgICAgIGlmICghJHRhcmdldCkge1xuICAgICAgICAgICAgJHRhcmdldCA9IHRoaXMuJGVsZW1lbnRbMF07XG4gICAgICAgIH1cbiAgICAgICAgJHRhcmdldC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8vIERlZmluaW5nIHRoZSBleGVjdXRlIG1ldGhvZCBvbiBCYXNlQ29tcG9uZW50LiBJZiBkYXRhc2V0IGlzIGJpbmRlZCB0byB3aWRnZXRzIG91cHR1dCB0aGVuIGRhdGFzb3VyY2UuZXhlY3V0ZSB3aWxsIGJlIGRlZmluZWRcbiAgICBwcm90ZWN0ZWQgZXhlY3V0ZShvcGVyYXRpb24sIG9wdGlvbnMpOiBhbnkge1xuXG4gICAgfVxuXG4gICAgcHVibGljIG11dGUoKSB7XG4gICAgICAgIHRoaXMuaXNNdXRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHVubXV0ZSgpIHtcbiAgICAgICAgdGhpcy5pc011dGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY3VzdG9tSW5qZWN0b3JNYXA6IGFueSA9IHt9O1xuICAgIGNyZWF0ZUN1c3RvbUluamVjdG9yKGNvbnRleHRLZXk6IHN0cmluZywgY29udGV4dDogYW55KSB7XG4gICAgICAgIGlmKHRoaXMuY3VzdG9tSW5qZWN0b3JNYXBbY29udGV4dEtleV0pIHtcbiAgICAgICAgICAgIGlmKCB0aGlzLmN1c3RvbUluamVjdG9yTWFwW2NvbnRleHRLZXldLmNvbnRleHQgPT09IGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21JbmplY3Rvck1hcFtjb250ZXh0S2V5XS5pbmplY3RvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmN1c3RvbUluamVjdG9yTWFwW2NvbnRleHRLZXldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluaiA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6ICdFWFBMSUNJVF9DT05URVhUJywgdXNlVmFsdWU6IGNvbnRleHQgfV0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmN1c3RvbUluamVjdG9yTWFwW2NvbnRleHRLZXldID0ge1xuICAgICAgICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgICAgICAgIGluamVjdG9yOiBpbmpcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5qO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFmdGVyIHRoZSBob3N0IHBhZ2UgaXMgYXR0YWNoZWQgZnJvbSBjYWNoZSwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG4gICAgICovXG4gICAgcHVibGljIG5nT25BdHRhY2goKSB7XG4gICAgICAgIHRoaXMuaXNBdHRhY2hlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQmVmb3JlIHRoZSBob3N0IHBhZ2UgaXMgZGV0YWNoZWQgZnJvbSBkb20gYW5kIHN0b3JlZCBpbiBjYWNoZSwgIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uRGV0YWNoKCkge1xuICAgICAgICB0aGlzLmlzQXR0YWNoZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBuYXRpdmVFbGVtZW50IHdpbGwgYmUgYXZhaWxhYmxlIGJ5IHRoaXMgdGltZVxuICAgICAqIGlmIHRoZSBkZWxheUluaXQgaXMgZmFsc2UsIHByb3BlcnRpZXMgbWV0YSB3aWxsIGJlIGF2YWlsYWJsZSBieSB0aGlzIHRpbWVcbiAgICAgKiBJbnZva2UgdGhlIHNldEluaXRQcm9wcyBpZiB0aGUgZGVsYXlJbml0IGlzIGZhbHNlXG4gICAgICovXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5kZWxheWVkSW5pdCkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbml0UHJvcHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIHRoZSBldmVudHNcbiAgICAgKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnRvQmVTZXR1cEV2ZW50c1F1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmbiBvZiB0aGlzLnRvQmVTZXR1cEV2ZW50c1F1ZXVlKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvQmVTZXR1cEV2ZW50c1F1ZXVlLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuaXNBdHRhY2hlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge31cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy53aWRnZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLnN0eWxlQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMucHJvcGVydHlDaGFuZ2UuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuaXNBdHRhY2hlZCA9IGZhbHNlO1xuICAgIH1cbn1cbiJdfQ==
|
|
627
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL2Jhc2Uvc3JjL3dpZGdldHMvY29tbW9uL2Jhc2UvYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFVBQVUsRUFDVixVQUFVLEVBQ1YsUUFBUSxFQUNSLE1BQU0sRUFHTixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLFFBQVEsRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFNUMsT0FBTyxFQUNILGVBQWUsRUFDZixXQUFXLEVBQ1gsUUFBUSxFQUNSLE1BQU0sRUFDTixRQUFRLEVBQ1IsR0FBRyxFQUNILFNBQVMsRUFDVCxXQUFXLEVBQ1gsVUFBVSxFQUNWLFdBQVcsRUFDWCxPQUFPLEVBQ1AsTUFBTSxFQUNOLGFBQWEsRUFDYixXQUFXLEVBQ1gsVUFBVSxFQUNiLE1BQU0sVUFBVSxDQUFDO0FBRWxCLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsUUFBUSxFQUFFLFlBQVksRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBaUIsT0FBTyxFQUFpQixZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7O0FBSW5GLGdFQUFnRTtBQUNoRSxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDMUMsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzlCLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDeEIsUUFBUSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLHNDQUFzQztBQUN0QyxNQUFNLFlBQVksR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDaEMsSUFBSSxFQUFFLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDckIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFTLEdBQUc7WUFDckIsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0QsSUFBSSxFQUFFLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDckIsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDO0FBRUwsQ0FBQyxDQUFDO0FBR0YsTUFBTSxPQUFnQixhQUFhO0lBVy9COztPQUVHO0lBQ0gsSUFBVyxRQUFRO1FBQ2YsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUF5R0QsWUFDYyxHQUFhLEVBQ0QsTUFBcUIsRUFDSCxlQUFvQixFQUM1RCxXQUEwQixDQUFDLGtEQUFrRDs7UUFIbkUsUUFBRyxHQUFILEdBQUcsQ0FBVTtRQWpIcEIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQThDMUI7O1dBRUc7UUFDYyxnQkFBVyxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFFbkQ7O1dBRUc7UUFDYyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFaEQ7O1dBRUc7UUFDYyxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUU1Qzs7V0FFRztRQUNjLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRXpDOztXQUVHO1FBQ0ssa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBNkMsQ0FBQztRQTBCN0U7OztXQUdHO1FBQ0sseUJBQW9CLEdBQW9CLEVBQUUsQ0FBQztRQUU1QyxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUlyQixXQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFFbkMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQTRpQmhCLHNCQUFpQixHQUFRLEVBQUUsQ0FBQztRQWppQmhDLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO1FBQzlDLDBEQUEwRDtRQUMxRCxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUNwQyxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUMvRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xELGlEQUFpRDtRQUNqRCw2RUFBNkU7UUFDN0UsNEZBQTRGO1FBQzVGLDRGQUE0RjtRQUU1RixJQUFJLEtBQUssR0FBSSxJQUFJLENBQUMsR0FBVyxDQUFDLE1BQU0sQ0FBQztRQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELHVFQUF1RTtRQUN2RSxJQUFJLENBQUMsT0FBTyxHQUFJLElBQUksQ0FBQyxHQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDO1FBQzVELDRDQUE0QztRQUM1QywwRUFBMEU7UUFDMUUsb0dBQW9HO1FBQ3BHLGtIQUFrSDtRQUNsSCxnSEFBZ0g7UUFDaEgscUpBQXFKO1FBQ3JKOzs7Ozs7Ozs7O1dBVUc7UUFFSDs7OztXQUlHO1FBQ0gscUlBQXFJO1FBQ3JJLDhFQUE4RTtRQUM5RSxXQUFXO1FBQ1gsOEVBQThFO1FBQzlFLElBQUk7UUFDSixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQXFCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFakQsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFFOUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRW5CLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU5RCxvRUFBb0U7UUFDcEUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVqRSw4R0FBOEc7UUFDOUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3RCLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNELElBQUcsZUFBZSxFQUFFLENBQUM7WUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNMLENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzlCLENBQUM7SUFFTSxhQUFhO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRU0sZ0JBQWdCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDO0lBRU0sU0FBUztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRU0sV0FBVyxDQUFDLFFBQVEsRUFBRSxTQUFTO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQ3RDLENBQUM7SUFFTSxhQUFhO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRU0saUJBQWlCLENBQUMsR0FBVyxFQUFFLEVBQU8sRUFBRSxFQUFPO1FBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxHQUFXLEVBQUUsRUFBTyxFQUFFLEVBQU87UUFDckQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVNLDJCQUEyQixDQUFDLEVBQWtCLEVBQUUsR0FBUztRQUM1RCxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ04sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTSwwQkFBMEIsQ0FBQyxFQUFZLEVBQUUsR0FBUztRQUNyRCxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ04sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM1QixFQUFFLEVBQUUsQ0FBQztZQUNMLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sOEJBQThCLENBQUMsRUFBa0IsRUFBRSxHQUFTO1FBQy9ELElBQUksR0FBRyxFQUFFLENBQUM7WUFDTixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVNLHVCQUF1QixDQUFDLEVBQVksRUFBRSxHQUFTO1FBQ2xELElBQUksR0FBRyxFQUFFLENBQUM7WUFDTixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTSxjQUFjO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRVMsV0FBVztRQUNqQixPQUFPLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUMxRyxDQUFDO0lBRVMsV0FBVztRQUNqQixrREFBa0Q7UUFDbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFbkMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpELDBDQUEwQztRQUMxQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBRUQsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNqQixJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUMxQixJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUMxQixPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUU7b0JBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ2hELENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLGdCQUFnQixHQUFHLGNBQWMsQ0FBQztZQUN0QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGlCQUFpQixDQUFDLEdBQVcsRUFBRSxLQUFVO1FBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFTSxPQUFPLENBQUMsUUFBZ0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksY0FBYztRQUNqQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sZ0JBQWdCO1FBQ3RCLE9BQU8saUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNPLGdCQUFnQixDQUFDLEdBQVcsRUFBRSxFQUFPLEVBQUUsRUFBUTtRQUNyRCxJQUFJLEdBQUcsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxDQUFDO2FBQU0sSUFBSSxHQUFHLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3QyxDQUFDO1FBQ0wsQ0FBQzthQUFNLElBQUksR0FBRyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4QyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDbEQsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQy9DLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RCxDQUFDO1FBQ0wsQ0FBQzthQUFNLElBQUksR0FBRyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDOUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLElBQUksR0FBRyxLQUFLLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDdkIsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdkQsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLEdBQUcsS0FBSyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3BDLG1EQUFtRDtZQUNuRCxhQUFhLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3RCxDQUFDO2FBQU8sSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDN0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ25FLGtGQUFrRjtZQUNsRixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyRCxDQUFDO2FBQU0sSUFBSSxHQUFHLEtBQUssa0JBQWtCLEVBQUUsQ0FBQztZQUNwQyxrREFBa0Q7WUFDbEQsWUFBWSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdDLENBQUM7YUFBTSxJQUFJLEdBQUcsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUM3QixrREFBa0Q7WUFDbEQsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsV0FBVyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7YUFBTyxJQUFJLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM3QiwyRkFBMkY7WUFDM0YsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3SCxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ08sYUFBYSxDQUFDLENBQVMsRUFBRSxFQUFPLEVBQUUsRUFBUSxJQUFHLENBQUM7SUFFeEQ7O09BRUc7SUFDTyxjQUFjLENBQUMsVUFBa0I7UUFDdkMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRDs7T0FFRztJQUNPLGtCQUFrQixDQUFDLFNBQVM7UUFDbEMsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sV0FBVyxDQUFDLElBQWlCLEVBQUUsU0FBaUIsRUFBRSxhQUF1QixFQUFFLE1BQVcsRUFBRSxJQUFhO1FBQzNHLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQzlCLElBQUksRUFDSixTQUFTLEVBQ1QsQ0FBQyxDQUFDLEVBQUU7WUFDQSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNsQixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzFDLENBQUM7aUJBQU0sQ0FBQztnQkFDSixPQUFPLGFBQWEsRUFBRSxDQUFDO1lBQzNCLENBQUM7UUFDTCxDQUFDLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ08sZ0JBQWdCLENBQUMsU0FBaUIsRUFBRSxJQUFZLEVBQUUsSUFBYTtRQUNyRSxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM1QixNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDNUIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU1RCxNQUFNLGFBQWEsR0FBRyxHQUFHLEVBQUU7WUFDdkIsSUFBSSxVQUFVLENBQUM7WUFDZixlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDO2dCQUNELE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ25FLG1GQUFtRjtnQkFDbkYsNkNBQTZDO2dCQUM3QyxVQUFVLEdBQUcsT0FBTyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksVUFBVSxZQUFZLE9BQU8sRUFBRSxDQUFDO29CQUNoQyxVQUFVLENBQUMsSUFBSSxDQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZELENBQUM7cUJBQU0sQ0FBQztvQkFDSixPQUFPLFVBQVUsQ0FBQztnQkFDdEIsQ0FBQztZQUNMLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckIsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQztRQUM5Rix5REFBeUQ7UUFDekQsMkJBQTJCO1FBQzNCLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxNQUFNLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDakQseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxhQUFhLENBQUM7UUFFbEMsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxRyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7O09BR0c7SUFDTyxlQUFlLENBQUMsUUFBZ0IsRUFBRSxJQUFZO1FBRXBELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyx1QkFBdUIsQ0FDeEIsTUFBTSxDQUNGLElBQUksRUFDSixJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksQ0FBQyxPQUFPLEVBQ1osRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFDaEMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFDM0MsUUFBUSxLQUFLLFlBQVksRUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQzlCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQ3JCLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNPLHFCQUFxQixDQUFDLFFBQWdCO1FBQzVDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxtQkFBbUIsQ0FBQyxTQUFpQixFQUFFLFdBQWlCO1FBQzNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksWUFBWSxFQUFFLENBQUM7WUFDZixNQUFNLEVBQUUsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1lBRXpDLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ0wsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNsRCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLFdBQVcsQ0FBQyxRQUFnQixFQUFFLFNBQWlCO1FBQ3JELDZIQUE2SDtRQUM3SCxNQUFNLEVBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRSxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNsQixnRUFBZ0U7WUFDaEUsSUFBSSxRQUFRLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNyQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUMsQ0FBQzthQUFNLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JELENBQUM7YUFBTSxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QiwrRUFBK0U7WUFDL0UsSUFBSSxRQUFRLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQ3ZCLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQy9DLENBQUM7aUJBQU0sSUFBSSxRQUFRLEtBQUssVUFBVSxJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDeEQsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUVELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM1QyxDQUFDO2FBQU0sQ0FBQztZQUNKLHVDQUF1QztRQUMzQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLGFBQWE7UUFDakIsSUFBSSxXQUFXLEdBQUksSUFBSSxDQUFDLEdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pJLElBQUcsV0FBVyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3RCLE9BQU8sV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlCLENBQUM7UUFDRCxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQU0sRUFBRSxFQUFFO1lBQ2xDLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sS0FBSyxDQUFDO1lBQ2pCLENBQUM7WUFDRCxJQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO29CQUN0QyxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO29CQUM5QyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUM5QixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUg7Ozs7OztXQU1HO1FBQ0gsT0FBTyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssWUFBWTtRQUNoQixHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsUUFBZ0IsRUFBRSxFQUFFO1lBQzNDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQTtZQUM3RCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO1FBRXhDLDRCQUE0QjtRQUM1QixNQUFNLFdBQVcsR0FBcUIsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9FLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekIsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFFL0IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sWUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVCLG1DQUFtQztZQUNuQyw4RkFBOEY7WUFDOUYsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUUzQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sZ0JBQWdCLENBQUMsU0FBUztRQUNoQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNPLEtBQUs7UUFDWDs7OztXQUlHO1FBQ0gsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDWCxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBQ0QsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCwrSEFBK0g7SUFDckgsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPO0lBRXBDLENBQUM7SUFFTSxJQUFJO1FBQ1AsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVNLE1BQU07UUFDVCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBR0Qsb0JBQW9CLENBQUMsVUFBa0IsRUFBRSxPQUFZO1FBQ2pELElBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ3ZELENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQzdCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMxRSxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDM0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVTtRQUNiLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVU7UUFDYixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVE7UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNYLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25DLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQ3pDLEVBQUUsRUFBRSxDQUFDO1lBQ1QsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQsa0JBQWtCLEtBQUksQ0FBQztJQUV2QixXQUFXO1FBQ1AsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7OEVBM3RCaUIsYUFBYSx3Q0EySG5CLFlBQVksZUFDWixrQkFBa0I7dUVBNUhaLGFBQWEsV0FBYixhQUFhOztpRkFBYixhQUFhO2NBRGxDLFVBQVU7O3NCQTRIRixNQUFNO3VCQUFDLFlBQVk7O3NCQUNuQixNQUFNO3VCQUFDLGtCQUFrQjs7c0JBQUcsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBJbmplY3RvcixcbiAgICBJbmplY3QsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIGluamVjdCxcbiAgICBPcHRpb25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RXZlbnRNYW5hZ2VyfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHtSZXBsYXlTdWJqZWN0LCBTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgICAkaW52b2tlV2F0Y2hlcnMsXG4gICAgJHBhcnNlRXZlbnQsXG4gICAgJHVud2F0Y2gsXG4gICAgJHdhdGNoLFxuICAgIGFkZENsYXNzLFxuICAgIEFwcCxcbiAgICBpc0RlZmluZWQsXG4gICAgaXNNb2JpbGVBcHAsXG4gICAgcmVtb3ZlQXR0cixcbiAgICByZW1vdmVDbGFzcyxcbiAgICBzZXRBdHRyLFxuICAgIHNldENTUyxcbiAgICBzZXRDU1NGcm9tT2JqLFxuICAgIHN3aXRjaENsYXNzLFxuICAgIGZpbmRQYXJlbnRcbn0gZnJvbSAnQHdtL2NvcmUnO1xuXG5pbXBvcnQge2dldFdpZGdldFByb3BzQnlUeXBlfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvd2lkZ2V0LXByb3BzJztcbmltcG9ydCB7aXNTdHlsZX0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL3N0eWxlcic7XG5pbXBvcnQge3JlZ2lzdGVyLCByZW5hbWVXaWRnZXR9IGZyb20gJy4uLy4uL2ZyYW1ld29yay93aWRnZXQtcmVnaXN0cnknO1xuaW1wb3J0IHtDaGFuZ2VMaXN0ZW5lciwgQ29udGV4dCwgSVdpZGdldENvbmZpZywgV2lkZ2V0Q29uZmlnfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvdHlwZXMnO1xuaW1wb3J0IHt3aWRnZXRJZEdlbmVyYXRvcn0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL3dpZGdldC1pZC1nZW5lcmF0b3InO1xuaW1wb3J0IHtESVNQTEFZX1RZUEUsIEVWRU5UU19NQVB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9jb25zdGFudHMnO1xuaW1wb3J0IHtXaWRnZXRQcm94eVByb3ZpZGVyfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvd2lkZ2V0LXByb3h5LXByb3ZpZGVyJztcbmltcG9ydCB7Z2V0V2F0Y2hJZGVudGlmaWVyfSBmcm9tICcuLi8uLi8uLi91dGlscy93aWRnZXQtdXRpbHMnO1xuaW1wb3J0IHtjYW1lbENhc2UsIGZvckVhY2gsIGlzQXJyYXksIGlzT2JqZWN0LCBqb2luLCBtYXAsIGV4dGVuZH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5cbi8vIEdldHMgbGlzdCBvZiBjbGFzc2VzIHRvIGFkZCBhbmQgcmVtb3ZlIGFuZCBhcHBsaWVzIG9uIHRoZSAkZWxcbmNvbnN0IHVwZGF0ZUNsYXNzZXMgPSAodG9BZGQsIHRvUmVtb3ZlLCBlbCkgPT4ge1xuICAgIGlmICh0b1JlbW92ZSAmJiB0b1JlbW92ZS5sZW5ndGgpIHtcbiAgICAgICAgcmVtb3ZlQ2xhc3MoZWwsIGpvaW4odG9SZW1vdmUsICcgJykpO1xuICAgIH1cbiAgICBpZiAodG9BZGQgJiYgdG9BZGQubGVuZ3RoKSB7XG4gICAgICAgIGFkZENsYXNzKGVsLCBqb2luKHRvQWRkLCAnICcpKTtcbiAgICB9XG59O1xuXG4vLyBUbyBhZGQgYW5kIHJlbW92ZSBzdHlsZXMgb24gdGhlICRlbFxuY29uc3QgdXBkYXRlU3R5bGVzID0gKG52LCBvdiwgZWwpID0+IHtcbiAgICBpZiAob3YgJiYgaXNPYmplY3Qob3YpKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvdiB8fCB7fSk7XG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgIHNldENTUyhlbCwga2V5LCAnJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAobnYgJiYgaXNPYmplY3QobnYpKSB7XG4gICAgICAgIHNldENTU0Zyb21PYmooZWwsIG52KTtcbiAgICB9XG5cbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQge1xuXG4gICAgLyoqXG4gICAgICogdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgd2lkZ2V0SWQ6IGFueTtcblxuICAgIHB1YmxpYyBpc0Rlc3Ryb3llZDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBpc0F0dGFjaGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBqUXVlcnkgbmF0aXZlRWxlbWVudCByZWZlcmVuY2Ugb2YgdGhlIGNvbXBvbmVudCByb290XG4gICAgICovXG4gICAgcHVibGljIGdldCAkZWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuICQodGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBET00gbm9kZSByZWZlcmVuY2Ugb2YgdGhlIGNvbXBvbmVudCByb290XG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgLyoqXG4gICAgICogVHlwZSBvZiB0aGUgY29tcG9uZW50XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHdpZGdldFR5cGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE1vc3Qgb2YgdGhlIGNhc2VzIGl0IGlzIHNhbWUgYXMgd2lkZ2V0VHlwZVxuICAgICAqIGZvciBzcGVjaWZpYyB3aWRnZXRzIGxpa2UgY2hhcnRzIHdpZGdldFR5cGUgY2FuIGJlIHdtLWNoYXJ0IHdoZXJlIGFzIHRoZSBzdWJ0eXBlIGNhbiBiZSB3bS1iYXItY2hhcnRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgd2lkZ2V0U3ViVHlwZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogUHJveHkgZm9yIHRoZSBjb21wb25lbnQgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHdpZGdldDogYW55O1xuXG4gICAgLyoqXG4gICAgICogVmlldyBwYXJlbnQgY29tcG9uZW50XG4gICAgICogZWcsIFBhZ2UsIFBhcnRpYWwsIFByZWZhYlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSB2aWV3UGFyZW50OiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudE1hbmdlciB0byBhZGQvcmVtb3ZlIGV2ZW50c1xuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBldmVudE1hbmFnZXI6IEV2ZW50TWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIEFwcCBMb2NhbGVcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgYXBwTG9jYWxlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBTdHlsZSBjaGFuZ2Ugc3ViamVjdCBhbmQgb2JzZXJ2YWJsZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3R5bGVDaGFuZ2UgPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xuXG4gICAgLyoqXG4gICAgICogUHJvcGVydHkgY2hhbmdlIHN1YmplY3QgYW5kIG9ic2VydmFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BlcnR5Q2hhbmdlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIC8qKlxuICAgICAqIE9uIFJlYWR5IFN0YXRlIGNoYW5nZSBzdWJqZWN0IGFuZCBvYnNlcnZhYmxlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWFkeVN0YXRlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIC8qKlxuICAgICAqIENvbXBvbmVudCBkZXN0cm95IHN1YmplY3QgYW5kIG9ic2VydmFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgLyoqXG4gICAgICogTWFwIG9mIGV2ZW50IGhhbmRsZXIgY2FsbGJhY2tzXG4gICAgICovXG4gICAgcHJpdmF0ZSBldmVudEhhbmRsZXJzID0gbmV3IE1hcDxzdHJpbmcsIHtjYWxsYmFjazogRnVuY3Rpb24sIGxvY2FsczogYW55fT4oKTtcblxuICAgIC8qKlxuICAgICAqIGNvbnRleHQgb2YgdGhlIHdpZGdldFxuICAgICAqIHdoZW4gdGhlIHdpZGdldCBpcyBwcmVzZXQgaW5zaWRlIGEgcmVwZWF0ZXIgdGhpcyBjb250ZXh0IHdpbGwgaGF2ZSB0aGUgcmVwZWF0ZXIgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gICAgICovXG4gICAgcHVibGljIGNvbnRleHQ6IGFueTtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWwgc3RhdGUgb2YgdGhlIHdpZGdldC5cbiAgICAgKiBXaWxsIGJlIHVuZGVmaW5lZCBvbmNlIHRoZSBpbml0aWFsIHByb3BlcnRpZXMgYXJlIHNldCBvbiB0byB0aGUgY29tcG9uZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBpbml0U3RhdGU6IE1hcDxzdHJpbmcsIGFueT47XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBmbGFnIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHdhaXQgZm9yIHRoZSB3aWRnZXQgaW5pdGlhbGl6YXRpb24gb3Igbm90XG4gICAgICogSWYgdGhlIGluaXRQcm9taXNlIGlzIHByb3ZpZGVkIGluIHRoZSBjb25zdHJ1Y3Rpb24gd2FpdCB0aWxsIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkXG4gICAgICogSWYgdGhlIGluaXRQcm9taXNlIGlzIG5vdCBwcm92aWRlZCBwcm9jZWVkIHdpdGggdGhlIGluaXRpYWxpemF0aW9uLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlbGF5ZWRJbml0OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRGlzcGxheSB0eXBlIG9mIHRoZSBjb21wb25lbnQuIGVnLCBibG9jayhEZWZhdWx0KSwgaW5saW5lLWJsb2NrLCBpbmxpbmUgZXRjXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXNwbGF5VHlwZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGV2ZW50IHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMuXG4gICAgICogdGhlc2UgZnVuY3Rpb25zIG5lZWRzIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIG9uVmlld0luaXRcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvQmVTZXR1cEV2ZW50c1F1ZXVlOiBBcnJheTxGdW5jdGlvbj4gPSBbXTtcblxuICAgIHB1YmxpYyBfX2Nsb25lYWJsZV9fID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgd2lkZ2V0UHJvcHM6IE1hcDxzdHJpbmcsIGFueT47XG5cbiAgICBwcml2YXRlICRhdHRycyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICBwcml2YXRlIGlzTXV0ZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuICAgIHB1YmxpYyB2aWV3UGFyZW50QXBwOiBBcHA7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBpbmo6IEluamVjdG9yLFxuICAgICAgICBASW5qZWN0KFdpZGdldENvbmZpZykgY29uZmlnOiBJV2lkZ2V0Q29uZmlnLFxuICAgICAgICBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnksXG4gICAgICAgIGluaXRQcm9taXNlPzogUHJvbWlzZTxhbnk+IC8vIFByb21pc2Ugb24gd2hpY2ggdGhlIGluaXRpYWxpemF0aW9uIGhhcyB0byB3YWl0XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWYgPSBpbmouZ2V0KEVsZW1lbnRSZWYpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIC8vbWFraW5nIHRoZSBjb2RlIGNvbXBhdGlibGUgaW4gYm90aCB0aGUgSklUIGFuZCBBT1QgbW9kZXNcbiAgICAgICAgdGhpcy52aWV3UGFyZW50QXBwID0gaW5qID8gaW5qLmdldChBcHApIDogaW5qZWN0KEFwcCk7XG4gICAgICAgIHRoaXMud2lkZ2V0VHlwZSA9IGNvbmZpZy53aWRnZXRUeXBlO1xuICAgICAgICB0aGlzLndpZGdldFN1YlR5cGUgPSBjb25maWcud2lkZ2V0U3ViVHlwZSB8fCBjb25maWcud2lkZ2V0VHlwZTtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmID0gaW5qLmdldChWaWV3Q29udGFpbmVyUmVmKTtcbiAgICAgICAgLy8gdGhpcy52aWV3UGFyZW50ID0gKGluaiBhcyBhbnkpLnZpZXcuY29tcG9uZW50O1xuICAgICAgICAvLyB0aGlzLnZpZXdQYXJlbnQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkucGFyZW50SW5qZWN0b3IuX2xWaWV3WzhdO1xuICAgICAgICAvLyB0aGlzLnZpZXdQYXJlbnQgPSBfdmlld1BhcmVudCB8fCAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkucGFyZW50SW5qZWN0b3IuX2xWaWV3WzhdO1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvbWFpbi9wYWNrYWdlcy9jb3JlL3NyYy9yZW5kZXIzL2ludGVyZmFjZXMvdmlldy50c1xuXG4gICAgICAgIGxldCBsVmlldyA9ICh0aGlzLmluaiBhcyBhbnkpLl9sVmlldztcbiAgICAgICAgdGhpcy52aWV3UGFyZW50ID0gZmluZFBhcmVudChsVmlldywgdGhpcy52aWV3UGFyZW50QXBwKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIi0tLSoqKioqKioqKioqKiotLWNvbnRleHQtLSoqKioqKioqKioqKiotLS1cIiwgbFZpZXdbOF0pO1xuICAgICAgICB0aGlzLmNvbnRleHQgPSAodGhpcy5pbmogYXMgYW55KS5fbFZpZXdbOF07XG5cbiAgICAgICAgdGhpcy5kaXNwbGF5VHlwZSA9IGNvbmZpZy5kaXNwbGF5VHlwZSB8fCBESVNQTEFZX1RZUEUuQkxPQ0s7XG4gICAgICAgIC8vIHRoaXMuY29udGV4dCA9IChpbmogYXMgYW55KS52aWV3LmNvbnRleHQ7XG4gICAgICAgIC8vIHRoaXMuY29udGV4dCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5faG9zdExWaWV3LmRlYnVnLmNvbnRleHQ7XG4gICAgICAgIC8vIGxldCBoYXNJbXBsaWNpdENvbnRleHQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkuX2hvc3RMVmlldy5maW5kKHQgPT4gdCAmJiAhIXQuJGltcGxpY2l0KTtcbiAgICAgICAgLy8gd2hlbiAkaW1wbGljaXQgaXMgbm90IGF2YWlsYWJsZSwgdGhpcyBvYmplY3QgY29udGFpbnMgc29tZSBuZ0ZvciBjb250ZXh0IG9yIGxpc3RpdGVtIGNvbnRleHQgb2YgdGhlIHdpZGdldCB0aGVuXG4gICAgICAgIC8vIHdlIHVzZSB0aGUgZGlyZWN0IHBhcmVudCBmb3IgZXhhbXBsZTogbmF2IGNvbXBvbmVudCBpcyB0aGUgcGFyZW50IGZvciBhbmNob3IgPT4gYW5jaG9yIGdldHMgdmlld1BhcmVudCBhcyBOYXZcbiAgICAgICAgLy8gSW4gb3RoZXIgY2FzZSwgd2hlcmUgd2UgaGF2ZSBpbXBsaWNpdENvbnRleHQgdGhlcmUgd2UgY2FuIG1ha2UgdXNlIG9mIHBhZ2UvYXBwIGxldmVsIGNvbnRleHQgaGVuY2Ugdmlld1BhcmVudC52aWV3UGFyZW50IHRvIGdldCBwYWdlIGxldmVsIGNvbnRleHRcbiAgICAgICAgLyppZiAoaGFzSW1wbGljaXRDb250ZXh0ICYmIHRoaXMudmlld1BhcmVudC52aWV3UGFyZW50KSB7XG4gICAgICAgICAgICBpZiAodGhpcy52aWV3UGFyZW50LndpZGdldFR5cGUgIT09ICd3bS1jYXJkJyAmJiB0aGlzLnZpZXdQYXJlbnQud2lkZ2V0VHlwZSAhPT0gJ3dtLWlmcmFtZWRpYWxvZydcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnZpZXdQYXJlbnQud2lkZ2V0VHlwZSAhPT0gJ3dtLXBhcnRpYWxkaWFsb2cnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3UGFyZW50ID0gdGhpcy52aWV3UGFyZW50LnZpZXdQYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYXNJbXBsaWNpdENvbnRleHQgfHwgKCF0aGlzLnZpZXdQYXJlbnQud2lkZ2V0VHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5faG9zdExWaWV3LmZpbmQodCA9PiB0ICYmICEhdC4kaW1wbGljaXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gKHRoaXMudmlld0NvbnRhaW5lclJlZiBhcyBhbnkpLnBhcmVudEluamVjdG9yLl9sVmlld1s4XTtcbiAgICAgICAgfSovXG5cbiAgICAgICAgLyppZihfdmlld1BhcmVudCAmJiAhaGFzSW1wbGljaXRDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkuX2hvc3RMVmlld1s4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IGhhc0ltcGxpY2l0Q29udGV4dDtcbiAgICAgICAgfSovXG4gICAgICAgIC8vIGlmIChbJ3dtLWxpc3QnLCAnd20tbmF2J10uaW5jbHVkZXModGhpcy52aWV3UGFyZW50LndpZGdldFR5cGUpIHx8IFsnd20tY2Fyb3VzZWwtdGVtcGxhdGUnLCAnd20tY2FyZCddLmluY2x1ZGVzKHRoaXMud2lkZ2V0VHlwZSkpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuY29udGV4dCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5faG9zdExWaWV3LmRlYnVnLmNvbnRleHQ7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICB0aGlzLmNvbnRleHQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkucGFyZW50SW5qZWN0b3IuX2xWaWV3WzhdO1xuICAgICAgICAvLyB9XG4gICAgICAgIHRoaXMud2lkZ2V0ID0gdGhpcy5jcmVhdGVQcm94eSgpO1xuICAgICAgICB0aGlzLmV2ZW50TWFuYWdlciA9IGluai5nZXQoRXZlbnRNYW5hZ2VyKTtcbiAgICAgICAgKHRoaXMubmF0aXZlRWxlbWVudCBhcyBhbnkpLndpZGdldCA9IHRoaXMud2lkZ2V0O1xuXG4gICAgICAgIHRoaXMuYXBwTG9jYWxlID0gaW5qLmdldChBcHApLmFwcExvY2FsZSB8fCB7fTtcblxuICAgICAgICB0aGlzLmluaXRDb250ZXh0KCk7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5ob3N0Q2xhc3MpIHtcbiAgICAgICAgICAgIGFkZENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgY29uZmlnLmhvc3RDbGFzcyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndpZGdldElkID0gdGhpcy5nZW5lcmF0ZVdpZGdldElkKCk7XG4gICAgICAgIHNldEF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCAnd2lkZ2V0LWlkJywgdGhpcy53aWRnZXRJZCwgdHJ1ZSk7XG5cbiAgICAgICAgLy8gcmVnaXN0ZXIgZGVmYXVsdCBwcm9wZXJ0eSBjaGFuZ2UgaGFuZGxlciBhbmQgc3R5bGUgY2hhbmdlIGhhbmRsZXJcbiAgICAgICAgdGhpcy5yZWdpc3RlclN0eWxlQ2hhbmdlTGlzdGVuZXIodGhpcy5vblN0eWxlQ2hhbmdlLCB0aGlzKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlTGlzdGVuZXIodGhpcy5vblByb3BlcnR5Q2hhbmdlLCB0aGlzKTtcblxuICAgICAgICAvLyBpZiB0aGUgaW5pdFByb21pc2UgaXMgcHJvdmlkZWQsIHdhaXQgdGlsbCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCB0byBwcm9jZWVkIHdpdGggdGhlIHdpZGdldCBpbml0aWFsaXphdGlvblxuICAgICAgICBpZiAoIWluaXRQcm9taXNlKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRXaWRnZXQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVsYXllZEluaXQgPSB0cnVlO1xuICAgICAgICAgICAgaW5pdFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0V2lkZ2V0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbml0UHJvcHMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmKGV4cGxpY2l0Q29udGV4dCkge1xuICAgICAgICAgICAgZXh0ZW5kKHRoaXMuY29udGV4dCwgZXhwbGljaXRDb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXROYXRpdmVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0V2lkZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy53aWRnZXRUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRXaWRnZXRTdWJUeXBlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpZGdldFN1YlR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFdpZGdldCgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy53aWRnZXQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFByb3BlcnR5KHByb3BOYW1lLCBwcm9wVmFsdWUpIHtcbiAgICAgICAgdGhpcy53aWRnZXRbcHJvcE5hbWVdID0gcHJvcFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWaWV3UGFyZW50KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdQYXJlbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIG5vdGlmeVN0eWxlQ2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdjogYW55KSB7XG4gICAgICAgIHRoaXMuc3R5bGVDaGFuZ2UubmV4dCh7a2V5LCBudiwgb3Z9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbm90aWZ5UHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92OiBhbnkpIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUNoYW5nZS5uZXh0KHtrZXksIG52LCBvdn0pO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclN0eWxlQ2hhbmdlTGlzdGVuZXIoZm46IENoYW5nZUxpc3RlbmVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgZm4gPSBmbi5iaW5kKGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdHlsZUNoYW5nZS5zdWJzY3JpYmUoKHtrZXksIG52LCBvdn0pID0+IGZuKGtleSwgbnYsIG92KSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyUmVhZHlTdGF0ZUxpc3RlbmVyKGZuOiBGdW5jdGlvbiwgY3R4PzogYW55KSB7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGZuID0gZm4uYmluZChjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVhZHlTdGF0ZS5zdWJzY3JpYmUoKCkgPT4gZm4oKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihmbjogQ2hhbmdlTGlzdGVuZXIsIGN0eD86IGFueSkge1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICBmbiA9IGZuLmJpbmQoY3R4KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb3BlcnR5Q2hhbmdlLnN1YnNjcmliZSgoe2tleSwgbnYsIG92fSkgPT4gZm4oa2V5LCBudiwgb3YpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoZm46IEZ1bmN0aW9uLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgZm4gPSBmbi5iaW5kKGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXN0cm95LnN1YnNjcmliZSgoKSA9PiB7fSwgKCkgPT4ge30sICgpID0+IGZuKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREaXNwbGF5VHlwZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5VHlwZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY3JlYXRlUHJveHkoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIFdpZGdldFByb3h5UHJvdmlkZXIuY3JlYXRlKHRoaXMsIHRoaXMud2lkZ2V0U3ViVHlwZSwgZ2V0V2lkZ2V0UHJvcHNCeVR5cGUodGhpcy53aWRnZXRTdWJUeXBlKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGluaXRDb250ZXh0KCkge1xuICAgICAgICAvLyBjb25zdCBjb250ZXh0ID0gKHRoaXMuaW5qIGFzIGFueSkudmlldy5jb250ZXh0O1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0IHx8IHt9O1xuXG4gICAgICAgIGNvbnN0IHBhcmVudENvbnRleHRzID0gdGhpcy5pbmouZ2V0KENvbnRleHQsIHt9KTtcblxuICAgICAgICAvLyBhc3NpZ24gdGhlIGNvbnRleHQgcHJvcGVydHkgYWNjb3JkaW5nbHlcbiAgICAgICAgaWYgKHRoaXMudmlld1BhcmVudCAhPT0gY29udGV4dCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmVudENvbnRleHRzKSB7XG4gICAgICAgICAgICBsZXQgcGFyZW50Q29udGV4dE9iaiA9IHt9O1xuICAgICAgICAgICAgaWYgKGlzQXJyYXkocGFyZW50Q29udGV4dHMpKSB7XG4gICAgICAgICAgICAgICAgZm9yRWFjaChwYXJlbnRDb250ZXh0cywgKGNvbnRleHRPYmopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihwYXJlbnRDb250ZXh0T2JqLCBjb250ZXh0T2JqKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Q29udGV4dE9iaiA9IHBhcmVudENvbnRleHRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gT2JqZWN0LmFzc2lnbih7fSwgcGFyZW50Q29udGV4dE9iaiwgdGhpcy5jb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldCB0aGUgdmFsdWUgb24gdGhlIHByb3h5IG9iamVjdCBpZSwgd2lkZ2V0XG4gICAgICogc2V0dGluZyB0aGUgcHJvcGVydHkgb24gdGhlIHByb3h5IHdpbGwgaW52b2tlIHRoZSBjaGFuZ2UgbGlzdGVuZXJzXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRXaWRnZXRQcm9wZXJ0eShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLndpZGdldFtrZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEF0dHIoYXR0ck5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLiRhdHRycy5nZXQoYXR0ck5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgYXBwIGluc3RhbmNlXG4gICAgICogQHJldHVybnMge0FwcH1cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QXBwSW5zdGFuY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluai5nZXQoQXBwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgYSB1bmlxdWUgaWRcbiAgICAgKiBEZWZhdWx0IHBhdHRlcm4gaXMgYHdpZGdldC1pZC0ke2lkfWBcbiAgICAgKiBDb21wb25lbnRzIGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBnZW5lcmF0ZSBhIGRpZmZlcmVudCBpZCBlZywgYmFyLWNoYXJ0LTFcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVXaWRnZXRJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gd2lkZ2V0SWRHZW5lcmF0b3IubmV4dFVpZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgdGhlIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGFjcm9zcyB0aGUgY29tcG9uZW50c1xuICAgICAqIGVnLFxuICAgICAqICAxLiB2YWx1ZSBvZiB0aGUgY2xhc3MgcHJvcGVydHkgd2lsbCBiZSBhcHBsaWVkIG9uIHRoZSBob3N0IGVsZW1lbnRcbiAgICAgKiAgMi4gYmFzZWQgb24gdGhlIHZhbHVlIG9mIHNob3cgcHJvcGVydHkgY29tcG9uZW50IGlzIHNob3duL2hpZGRlblxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgICAqIEBwYXJhbSBudlxuICAgICAqIEBwYXJhbSBvdlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvblByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdj86IGFueSkge1xuICAgICAgICBpZiAoa2V5ID09PSAnc2hvdycpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5oaWRkZW4gPSAhbnY7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaGludCcpIHtcbiAgICAgICAgICAgIGlmICghaXNNb2JpbGVBcHAoKSkge1xuICAgICAgICAgICAgICAgIHNldEF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCAndGl0bGUnLCBudik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnY2xhc3MnKSB7XG4gICAgICAgICAgICBzd2l0Y2hDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIG52LCBvdik7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gbnYubWF0Y2goLyhcXFd8XikoaChbMC02XSkpKD89XFxzfCQpLyk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgc2V0QXR0cih0aGlzLm5hdGl2ZUVsZW1lbnQsICdyb2xlJywgJ2hlYWRpbmcnKTtcbiAgICAgICAgICAgICAgICBzZXRBdHRyKHRoaXMubmF0aXZlRWxlbWVudCwgJ2FyaWEtbGV2ZWwnLCByZXN1bHRbM10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ25hbWUnIHx8IGtleSA9PT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgc2V0QXR0cih0aGlzLm5hdGl2ZUVsZW1lbnQsIGtleSwgbnYpO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ25hbWUnICYmIG52KSB7XG4gICAgICAgICAgICAgICAgcmVuYW1lV2lkZ2V0KHRoaXMudmlld1BhcmVudCwgdGhpcy53aWRnZXQsIG52LCBvdik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnY29uZGl0aW9uYWxjbGFzcycpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBjbGFzc2VzIGlmIG9sZCBhbmQgbnYgdmFsdWUgYXJlIGRpZmZlcmVudFxuICAgICAgICAgICAgdXBkYXRlQ2xhc3Nlcyhudi50b0FkZCwgbnYudG9SZW1vdmUsIHRoaXMubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSAgaWYgKGtleSA9PT0gJ2F1dG9wbGF5Jykge1xuICAgICAgICAgICAgY29uc3QgdGFnTmFtZSA9IHRoaXMud2lkZ2V0VHlwZSA9PT0gJ3dtLWF1ZGlvJyA/ICdhdWRpbycgOiAndmlkZW8nO1xuICAgICAgICAgICAgLy8gVHJpZ2dlciBtZWRpYShhdWRpby92aWRlbykgZWxlbWVudCBsb2FkIG1ldGhvZCBhZnRlciBjaGFuZ2luZyBhdXRvcGxheSBwcm9wZXJ0eVxuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IodGFnTmFtZSkubG9hZCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NvbmRpdGlvbmFsc3R5bGUnKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgc3R5bGVzIGlmIG9sZCBhbmQgbnYgdmFsdWUgYXJlIGRpZmZlcmVudFxuICAgICAgICAgICAgdXBkYXRlU3R5bGVzKG52LCBvdiwgdGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdhbmltYXRpb24nKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgc3R5bGVzIGlmIG9sZCBhbmQgbnYgdmFsdWUgYXJlIGRpZmZlcmVudFxuICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCBcImFuaW1hdGVkIFwiICsgbnYpO1xuICAgICAgICB9ICBlbHNlIGlmIChrZXkgPT09ICdkaXNhYmxlZCcpIHtcbiAgICAgICAgICAgIC8vIFdNUy0xOTMyMTogSW4gSUUsIHdpZGdldCBpcyBpbiBkaXNhYmxlZCBzdGF0ZSB3aGVuIGRpc2FibGVkPVwiZmFsc2VcIiBhdHRyaWJ1dGUgaXMgcHJlc2VudFxuICAgICAgICAgICAgKG52ID09PSB0cnVlKSA/IHNldEF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCAnZGlzYWJsZWQnLCAndHJ1ZScsIHRydWUpIDogcmVtb3ZlQXR0cih0aGlzLm5hdGl2ZUVsZW1lbnQsICdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBzdHlsZSBjaGFuZ2UgaGFuZGxlclxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvblN0eWxlQ2hhbmdlKGs6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpIHt9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciB0aGUgd2lkZ2V0IHdpdGggdGhlIHdpZGdldFJlZ2lzdHJ5XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlZ2lzdGVyV2lkZ2V0KHdpZGdldE5hbWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKHJlZ2lzdGVyKHRoaXMud2lkZ2V0LCB0aGlzLnZpZXdQYXJlbnQsIHRoaXMud2lkZ2V0SWQsIHdpZGdldE5hbWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBvdmVycmlkZSB0aGVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0TWFwcGVkRXZlbnROYW1lKGV2ZW50TmFtZSkge1xuICAgICAgICByZXR1cm4gRVZFTlRTX01BUC5nZXQoZXZlbnROYW1lKSB8fCBldmVudE5hbWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaW52b2tlIHRoZSBldmVudCBoYW5kbGVyXG4gICAgICogQ29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gZXhlY3V0ZSBjdXN0b20gbG9naWMgYmVmb3JlIGludm9raW5nIHRoZSB1c2VyIGNhbGxiYWNrXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGhhbmRsZUV2ZW50KG5vZGU6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgZXZlbnRDYWxsYmFjazogRnVuY3Rpb24sIGxvY2FsczogYW55LCBtZXRhPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxzLiRldmVudCA9IGU7XG4gICAgICAgICAgICAgICAgaWYgKG1ldGEgPT09ICdkZWxheWVkJykge1xuICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZXZlbnRDYWxsYmFjaygpLCAxNTApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudENhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHBhcnNlIHRoZSBldmVudCBleHByZXNzaW9uIGFuZCBzYXZlIHJlZmVyZW5jZSB0byB0aGUgZnVuY3Rpb24gaW5zaWRlIGV2ZW50SGFuZGxlcnMgbWFwXG4gICAgICogSWYgdGhlIGNvbXBvbmVudCBwcm92aWRlcyBhIG92ZXJyaWRlIGZvciBhbiBldmVudCB0aHJvdWdoIEBFdmVudCBkZWNvcmF0b3IgaW52b2tlIHRoYXRcbiAgICAgKiBlbHNlIGludm9rZSB0aGUgcmVzb2x2ZWQgZnVuY3Rpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwclxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzRXZlbnRBdHRyKGV2ZW50TmFtZTogc3RyaW5nLCBleHByOiBzdHJpbmcsIG1ldGE/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZm4gPSAkcGFyc2VFdmVudChleHByKTtcbiAgICAgICAgY29uc3QgbG9jYWxzID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBsb2NhbHMud2lkZ2V0ID0gdGhpcy53aWRnZXQ7XG4gICAgICAgIGNvbnN0IGJvdW5kRm4gPSBmbi5iaW5kKHVuZGVmaW5lZCwgdGhpcy52aWV3UGFyZW50LCBsb2NhbHMpO1xuXG4gICAgICAgIGNvbnN0IGV2ZW50Q2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgYm91bmRGblZhbDtcbiAgICAgICAgICAgICRpbnZva2VXYXRjaGVycyh0cnVlKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbG9jYWxzLiRldmVudCA9IGxvY2Fscy4kZXZlbnQgfHwgbmV3IHdpbmRvdy5DdXN0b21FdmVudChldmVudE5hbWUpO1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBldmVudCBpcyBib3VuZCBkaXJlY3RseSB0byB0aGUgdmFyaWFibGUgdGhlbiB3ZSBuZWVkIHRvIGludGVybmFsbHkgaGFuZGxlXG4gICAgICAgICAgICAgICAgLy8gdGhlIHByb21pc2UgcmV0dXJuZWQgYnkgdGhlIHZhcmlhYmxlIGNhbGwuXG4gICAgICAgICAgICAgICAgYm91bmRGblZhbCA9IGJvdW5kRm4oKTtcbiAgICAgICAgICAgICAgICBpZiAoYm91bmRGblZhbCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgYm91bmRGblZhbC50aGVuKCByZXNwb25zZSA9PiByZXNwb25zZSwgZXJyID0+IGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvdW5kRm5WYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5ldmVudEhhbmRsZXJzLnNldCh0aGlzLmdldE1hcHBlZEV2ZW50TmFtZShldmVudE5hbWUpLCB7Y2FsbGJhY2s6IGV2ZW50Q2FsbGJhY2ssIGxvY2Fsc30pO1xuICAgICAgICAvLyBwcmVwZW5kIGV2ZW50TmFtZSB3aXRoIG9uIGFuZCBjb252ZXJ0IGl0IHRvIGNhbWVsY2FzZS5cbiAgICAgICAgLy8gZWcsIFwiY2xpY2tcIiAtLS0+IG9uQ2xpY2tcbiAgICAgICAgY29uc3Qgb25FdmVudE5hbWUgPSBjYW1lbENhc2UoYG9uLSR7ZXZlbnROYW1lfWApO1xuICAgICAgICAvLyBzYXZlIHRoZSBldmVudENhbGxiYWNrIGluIHdpZGdldFNjb3BlLlxuICAgICAgICB0aGlzW29uRXZlbnROYW1lXSA9IGV2ZW50Q2FsbGJhY2s7XG5cbiAgICAgICAgLy8gZXZlbnRzIG5lZWRzIHRvIGJlIHNldHVwIGFmdGVyIHZpZXdJbml0XG4gICAgICAgIHRoaXMudG9CZVNldHVwRXZlbnRzUXVldWUucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUV2ZW50KHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcy5nZXRNYXBwZWRFdmVudE5hbWUoZXZlbnROYW1lKSwgZXZlbnRDYWxsYmFjaywgbG9jYWxzLCBtZXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2VzcyB0aGUgYm91bmQgcHJvcGVydHlcbiAgICAgKiBSZWdpc3RlciBhIHdhdGNoIG9uIHRoZSBib3VuZCBleHByZXNzaW9uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NCaW5kQXR0cihwcm9wTmFtZTogc3RyaW5nLCBleHByOiBzdHJpbmcpIHtcblxuICAgICAgICB0aGlzLmluaXRTdGF0ZS5kZWxldGUocHJvcE5hbWUpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKFxuICAgICAgICAgICAgJHdhdGNoKFxuICAgICAgICAgICAgICAgIGV4cHIsXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3UGFyZW50LFxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dCxcbiAgICAgICAgICAgICAgICBudiA9PiB0aGlzLndpZGdldFtwcm9wTmFtZV0gPSBudixcbiAgICAgICAgICAgICAgICBnZXRXYXRjaElkZW50aWZpZXIodGhpcy53aWRnZXRJZCwgcHJvcE5hbWUpLFxuICAgICAgICAgICAgICAgIHByb3BOYW1lID09PSAnZGF0YXNvdXJjZScsXG4gICAgICAgICAgICAgICAgdGhpcy53aWRnZXRQcm9wcy5nZXQocHJvcE5hbWUpLFxuICAgICAgICAgICAgICAgICgpID0+IHRoaXMuaXNNdXRlZFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSB3YXRjaCBvbiB0aGUgYm91bmQgcHJvcGVydHlcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVtb3ZlUHJvcGVydHlCaW5kaW5nKHByb3BOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgJHVud2F0Y2goZ2V0V2F0Y2hJZGVudGlmaWVyKHRoaXMud2lkZ2V0SWQsIHByb3BOYW1lKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaW52b2tlIHRoZSBldmVudCBjYWxsYmFjayBtZXRob2RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gICAgICogQHBhcmFtIGV4dHJhTG9jYWxzXG4gICAgICovXG4gICAgcHVibGljIGludm9rZUV2ZW50Q2FsbGJhY2soZXZlbnROYW1lOiBzdHJpbmcsIGV4dHJhTG9jYWxzPzogYW55KSB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrSW5mbyA9IHRoaXMuZXZlbnRIYW5kbGVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKGNhbGxiYWNrSW5mbykge1xuICAgICAgICAgICAgY29uc3QgZm4gPSBjYWxsYmFja0luZm8uY2FsbGJhY2s7XG4gICAgICAgICAgICBjb25zdCBsb2NhbHMgPSBjYWxsYmFja0luZm8ubG9jYWxzIHx8IHt9O1xuXG4gICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm4oT2JqZWN0LmFzc2lnbihsb2NhbHMsIGV4dHJhTG9jYWxzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzIHRoZSBhdHRyaWJ1dGVcbiAgICAgKiBJZiB0aGUgYXR0cmlidXRlIGlzIGFuIGV2ZW50IGV4cHJlc3Npb24sIGdlbmVyYXRlIGEgZnVuY3Rpb25hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXhwcmVzc2lvblxuICAgICAqICAgICAgYW5kIGtlZXAgaW4gZXZlbnRIYW5kbGVyc1xuICAgICAqIElmIHRoZSBhdHRyaWJ1dGUgaXMgYSBib3VuZCBleHByZXNzaW9uLCByZWdpc3RlciBhIHdhdGNoIG9uIHRoZSBleHByZXNzaW9uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NBdHRyKGF0dHJOYW1lOiBzdHJpbmcsIGF0dHJWYWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiPT09PWF0dHJOYW1lPT09PT1cIiwgYXR0ck5hbWUsIFwiPT09PT10eXBlb2YgYXR0cm5hbWU9PT09PVwiLCB0eXBlb2YgYXR0ck5hbWUsIFwiLS0tLS1hdHRyVmFsdWUtLS0tXCIsIGF0dHJWYWx1ZSk7XG4gICAgICAgIGNvbnN0IHswOiBwcm9wTmFtZSwgMTogdHlwZSwgMjogbWV0YSwgbGVuZ3RofSA9IGF0dHJOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIGlmICh0eXBlID09PSAnYmluZCcpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzaG93IHByb3BlcnR5IGlzIGJvdW5kLCBzZXQgdGhlIGluaXRpYWwgdmFsdWUgdG8gZmFsc2VcbiAgICAgICAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ3Nob3cnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NCaW5kQXR0cihwcm9wTmFtZSwgYXR0clZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnZXZlbnQnKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NFdmVudEF0dHIocHJvcE5hbWUsIGF0dHJWYWx1ZSwgbWV0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgY2xhc3MgYW5kIG5hbWUgYXR0cmlidXRlcy4gQ29tcG9uZW50IHdpbGwgc2V0IHRoZW0gb24gdGhlIHByb3BlciBub2RlXG4gICAgICAgICAgICBpZiAoYXR0ck5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIGF0dHJWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09PSAndGFiaW5kZXgnIHx8IGF0dHJOYW1lID09PSAnbmFtZScpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVBdHRyKHRoaXMubmF0aXZlRWxlbWVudCwgYXR0ck5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmluaXRTdGF0ZS5zZXQocHJvcE5hbWUsIGF0dHJWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlcyBwcm92aWRlZCBvbiBlbERlZjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgcmVxdWlyZWQgYXMgdGhlIG5hdGl2ZSBlbGVtZW50IGF0dHJpYnV0ZXMgYXJlIGNhc2UgaW5zZW5zaXRpdmUoY2FtZWxjYXNlKSBsaWtlIGN1c3RvbUV4cHJlc3Npb25zIGJlY29tZXMgY3VzdG9tZXhwcmVzc2lvblxuICAgICAqIGFuZCBvdXIgbG9naWMgdG8gY2hlY2sgbGlrZSB0aGVzZSBjaGFuZ2VzIHdpbGwgZmFpbC4gQmVmb3JlIElWWSBjaGFuZ2VzLCBhbmd1bGFyIG1haW50YWlucyBhIHNlcGFyYXRlIG9iamVjdCB3aXRoIHRoZXNlIGF0dHJpYnV0ZXNcbiAgICAgKiBhcyBpdCBpcyBsaWtlIGluIHRoZSBjYW1lbGNhc2UuIFdpdGggSVZZIGFsbCB0aG9zZSBhcmUgZ29uZS4gU28gbmVlZCB0byBtYWludGFpbiBhIHNlcGFyYXRlIGxpc3Qgd2l0aCB0aGUgY2FtZWxjYXNpbmcgb2YgYXR0cmlidXRlc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogX3ROb2RlLmF0dHJzIGF0dHJpYnV0ZXMgYXJlIHN0b3JlZCBpbiBhcnJheShldmVuIGluZGV4OiBrZXksIG9kZCBpbmRleDogdmFsdWUpXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRBdHRyaWJ1dGVzKCkge1xuICAgICAgICBsZXQgX3ROb2RlQXR0cnMgPSAodGhpcy5pbmogYXMgYW55KS5fdE5vZGUuYXR0cnMsIGFjdHVhbEF0dHJzID0gQXJyYXkuZnJvbSh0aGlzLm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlcykubWFwKGF0dHIgPT4gYXR0ci5uYW1lKTtcbiAgICAgICAgaWYoX3ROb2RlQXR0cnMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3R1YWxBdHRycy5zb3J0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yRWFjaChfdE5vZGVBdHRycywgKGF0dHIsIGk6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhdHRyID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHR5cGVvZiBhdHRyID09PSAnc3RyaW5nJyAmJiBpICUgMiA9PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxvd2VyQ2FzZUF0dHIgPSBhdHRyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGFjdHVhbEF0dHJzLmluY2x1ZGVzKGxvd2VyQ2FzZUF0dHIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IGFjdHVhbEF0dHJzLmluZGV4T2YobG93ZXJDYXNlQXR0cilcbiAgICAgICAgICAgICAgICAgICAgYWN0dWFsQXR0cnNbaW5kZXhdID0gYXR0cjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qXG4gICAgICAgIFNvcnRpbmcgYXR0cmlidXRlcyBhcyBwcm9wZXJ0aWVzIGxpa2UgcGxhY2Vob2xkZXIgaXMgbm90IHdvcmtpbmcgd2hlbiBpdCBpcyBib3VuZC5cbiAgICAgICAgcGxhY2Vob2xkZXIgYW5kIHBsYWNlaG9sZGVyLmJpbmQgdHdvIHByb3BlcnRpZXMgYXJlIGNvbWluZyBpbiBBcnJheS5cbiAgICAgICAgV2hlbiBhcnJheSBpcyBub3Qgc29ydGVkLCBpbml0aWFsbHkgcGxhY2Vob2xkZXIuYmluZCB2YWx1ZSBpcyBzZXQgdGhlbiBwbGFjZWhvbGRlciBkZWZhdWx0IHZhbHVlIGlzIHVwZGF0ZWQuXG4gICAgICAgIElmIGFycmF5IGlzIHNvcnRlZCwgcGxhY2Vob2xkZXIuYmluZCB2YWx1ZSB3aWxsIGJlIHNldCBmaW5hbGx5LlxuICAgICAgICBUaGlzIGlzIGNhdXNlZCBiZWNhdXNlIG9mIHRoZSB3YXkgd2UgYXJlIHN0b3JpbmcgYXR0cmlidXRlIG5hbWVzIGluIHdhdGNoZXIgcmVnaXN0cnkgbWFwXG4gICAgICAgICAqL1xuICAgICAgICByZXR1cm4gYWN0dWFsQXR0cnMuc29ydCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIHByb2Nlc3NBdHRycygpIHtcbiAgICAgICAgbWFwKHRoaXMuZ2V0QXR0cmlidXRlcygpLCAoYXR0ck5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgbGV0IGF0dHJWYWx1ZSA9IHRoaXMubmF0aXZlRWxlbWVudC5hdHRyaWJ1dGVzW2F0dHJOYW1lXS52YWx1ZVxuICAgICAgICAgICAgdGhpcy4kYXR0cnMuc2V0KGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzQXR0cihhdHRyTmFtZSwgYXR0clZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoZSBpbml0U3RhdGUgd2l0aCB0aGUgZGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgYW5kIHRoZSB2YWx1ZXMgcHJvdmlkZWQgaW4gdGhlIG1hcmt1cFxuICAgICAqIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZXNcbiAgICAgKiBSZWdpc3RlciB0aGUgd2lkZ2V0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGluaXRXaWRnZXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcblxuICAgICAgICAvLyBnZXQgdGhlIHdpZGdldCBwcm9wZXJ0aWVzXG4gICAgICAgIGNvbnN0IHdpZGdldFByb3BzOiBNYXA8c3RyaW5nLCBhbnk+ID0gZ2V0V2lkZ2V0UHJvcHNCeVR5cGUodGhpcy53aWRnZXRTdWJUeXBlKTtcbiAgICAgICAgd2lkZ2V0UHJvcHMuZm9yRWFjaCgodiwgaykgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh2LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFN0YXRlLnNldChrLCB2LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy53aWRnZXRQcm9wcyA9IHdpZGdldFByb3BzO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0F0dHJzKCk7XG5cbiAgICAgICAgdGhpcy5yZWdpc3RlcldpZGdldCh0aGlzLmluaXRTdGF0ZS5nZXQoJ25hbWUnKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoZSBkZWZhdWx0IHByb3BlcnRpZXMgYW5kIHRoZSBwcm9wZXJ0aWVzIHByb3ZpZGVkIGluIHRoZSBtYXJrdXAgaW4gY29tcG9uZW50XG4gICAgICogSW52b2tpbmcgdGhpcyBtZXRob2Qgd2lsbCByZXN1bHQgaW4gaW52b2NhdGlvbiBvZiBwcm9wZXJ0eUNoYW5nZSBoYW5kbGVycyBvbiB0aGUgY29tcG9uZW50IGZvciB0aGUgZmlyc3QgdGltZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzZXRJbml0UHJvcHMoKSB7XG4gICAgICAgIGlmICh0aGlzLmluaXRTdGF0ZS5nZXQoJ25hbWUnKSkge1xuICAgICAgICAgICAgdGhpcy53aWRnZXQubmFtZSA9IHRoaXMuaW5pdFN0YXRlLmdldCgnbmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlLmZvckVhY2goKHYsIGspID0+IHtcbiAgICAgICAgICAgIC8vIG5hbWUgaXMgYWxyZWFkeSBzZXQsIGlnbm9yZSBuYW1lXG4gICAgICAgICAgICAvLyBpZiB0aGUga2V5IGlzIHBhcnQgb2YgdG8gYmUgaWdub3JlZCBhdHRyaWJ1dGVzIGxpc3QgZG8gbm90IHNldCBpdCBvbiB0aGUgY29tcG9uZW50IGluc3RhbmNlXG4gICAgICAgICAgICBpZiAoKHRoaXMud2lkZ2V0UHJvcHMuZ2V0KGspIHx8IGlzU3R5bGUoaykpICYmIGsgIT09ICduYW1lJykge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0W2tdID0gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMucmVhZHlTdGF0ZS5uZXh0KG51bGwpO1xuICAgICAgICB0aGlzLnJlYWR5U3RhdGUuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUsIGlmIGEgbGlzdGVuZXIgcmVnaXN0ZXJlZCBmb3IgdGhlIGdpdmVuIGV2ZW50IG9uIHRoaXMgd2lkZ2V0IG1hcmt1cC5cbiAgICAgKiBAcGFyYW0gZXZlbnROYW1lXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGhhc0V2ZW50Q2FsbGJhY2soZXZlbnROYW1lKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV2ZW50SGFuZGxlcnMuaGFzKGV2ZW50TmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZm9jdXMgb24gdGhlIHdpZGdldFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoZWNrIGZvciB0aGUgbm9kZXMgaGF2aW5nIGZvY3VzLXRhcmdldCBhdHRyaWJ1dGUgaW5zaWRlIHRoZSBlbGVtZW50XG4gICAgICAgICAqIElmIGZvdW5kLCBmb2N1cyB0aGUgZmlyc3Qgbm9kZSAoZWcsIGRhdGUgd2lkZ2V0KVxuICAgICAgICAgKiBlbHNlLCBmb2N1cyB0aGUgZWxlbWVudCAoZWcsIHRleHQgd2lkZ2V0KVxuICAgICAgICAgKi9cbiAgICAgICAgbGV0ICR0YXJnZXQgPSB0aGlzLiRlbGVtZW50WzBdLnF1ZXJ5U2VsZWN0b3IoJ1tmb2N1cy10YXJnZXRdJyk7XG4gICAgICAgIGlmICghJHRhcmdldCkge1xuICAgICAgICAgICAgJHRhcmdldCA9IHRoaXMuJGVsZW1lbnRbMF07XG4gICAgICAgIH1cbiAgICAgICAgJHRhcmdldC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8vIERlZmluaW5nIHRoZSBleGVjdXRlIG1ldGhvZCBvbiBCYXNlQ29tcG9uZW50LiBJZiBkYXRhc2V0IGlzIGJpbmRlZCB0byB3aWRnZXRzIG91cHR1dCB0aGVuIGRhdGFzb3VyY2UuZXhlY3V0ZSB3aWxsIGJlIGRlZmluZWRcbiAgICBwcm90ZWN0ZWQgZXhlY3V0ZShvcGVyYXRpb24sIG9wdGlvbnMpOiBhbnkge1xuXG4gICAgfVxuXG4gICAgcHVibGljIG11dGUoKSB7XG4gICAgICAgIHRoaXMuaXNNdXRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHVubXV0ZSgpIHtcbiAgICAgICAgdGhpcy5pc011dGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjdXN0b21JbmplY3Rvck1hcDogYW55ID0ge307XG4gICAgY3JlYXRlQ3VzdG9tSW5qZWN0b3IoY29udGV4dEtleTogc3RyaW5nLCBjb250ZXh0OiBhbnkpIHtcbiAgICAgICAgaWYodGhpcy5jdXN0b21JbmplY3Rvck1hcFtjb250ZXh0S2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tSW5qZWN0b3JNYXBbY29udGV4dEtleV0uaW5qZWN0b3I7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiAnRVhQTElDSVRfQ09OVEVYVCcsIHVzZUZhY3Rvcnk6ICgpID0+IGNvbnRleHQgfV1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY3VzdG9tSW5qZWN0b3JNYXBbY29udGV4dEtleV0gPSB7IGNvbnRleHQsIGluamVjdG9yIH07XG4gICAgICAgIHJldHVybiBpbmplY3RvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZnRlciB0aGUgaG9zdCBwYWdlIGlzIGF0dGFjaGVkIGZyb20gY2FjaGUsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uQXR0YWNoKCkge1xuICAgICAgICB0aGlzLmlzQXR0YWNoZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJlZm9yZSB0aGUgaG9zdCBwYWdlIGlzIGRldGFjaGVkIGZyb20gZG9tIGFuZCBzdG9yZWQgaW4gY2FjaGUsICB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRldGFjaCgpIHtcbiAgICAgICAgdGhpcy5pc0F0dGFjaGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbmF0aXZlRWxlbWVudCB3aWxsIGJlIGF2YWlsYWJsZSBieSB0aGlzIHRpbWVcbiAgICAgKiBpZiB0aGUgZGVsYXlJbml0IGlzIGZhbHNlLCBwcm9wZXJ0aWVzIG1ldGEgd2lsbCBiZSBhdmFpbGFibGUgYnkgdGhpcyB0aW1lXG4gICAgICogSW52b2tlIHRoZSBzZXRJbml0UHJvcHMgaWYgdGhlIGRlbGF5SW5pdCBpcyBmYWxzZVxuICAgICAqL1xuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAoIXRoaXMuZGVsYXllZEluaXQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5pdFByb3BzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciB0aGUgZXZlbnRzXG4gICAgICovXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBpZiAodGhpcy50b0JlU2V0dXBFdmVudHNRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZm4gb2YgdGhpcy50b0JlU2V0dXBFdmVudHNRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b0JlU2V0dXBFdmVudHNRdWV1ZS5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLmlzQXR0YWNoZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHt9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgIHRoaXMud2lkZ2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5zdHlsZUNoYW5nZS5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnByb3BlcnR5Q2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZGVzdHJveS5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmlzQXR0YWNoZWQgPSBmYWxzZTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1439,19 +1439,13 @@ class BaseComponent {
|
|
|
1439
1439
|
}
|
|
1440
1440
|
createCustomInjector(contextKey, context) {
|
|
1441
1441
|
if (this.customInjectorMap[contextKey]) {
|
|
1442
|
-
|
|
1443
|
-
return this.customInjectorMap[contextKey].injector;
|
|
1444
|
-
}
|
|
1445
|
-
delete this.customInjectorMap[contextKey];
|
|
1442
|
+
return this.customInjectorMap[contextKey].injector;
|
|
1446
1443
|
}
|
|
1447
|
-
const
|
|
1448
|
-
providers: [{ provide: 'EXPLICIT_CONTEXT',
|
|
1444
|
+
const injector = Injector.create({
|
|
1445
|
+
providers: [{ provide: 'EXPLICIT_CONTEXT', useFactory: () => context }]
|
|
1449
1446
|
});
|
|
1450
|
-
this.customInjectorMap[contextKey] = {
|
|
1451
|
-
|
|
1452
|
-
injector: inj
|
|
1453
|
-
};
|
|
1454
|
-
return inj;
|
|
1447
|
+
this.customInjectorMap[contextKey] = { context, injector };
|
|
1448
|
+
return injector;
|
|
1455
1449
|
}
|
|
1456
1450
|
/**
|
|
1457
1451
|
* After the host page is attached from cache, this function is called.
|