@tiba-spark/client-shared-lib 26.2.0-126 → 26.2.0-140
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/libraries/components/field-label/field-label.component.mjs +5 -2
- package/esm2022/libraries/modules/facility/facility.service.mjs +4 -4
- package/esm2022/libraries/services/modal.service.mjs +135 -112
- package/fesm2022/tiba-spark-client-shared-lib.mjs +140 -114
- package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
- package/libraries/components/field-label/field-label.component.d.ts.map +1 -1
- package/libraries/modules/facility/facility.service.d.ts.map +1 -1
- package/libraries/services/modal.service.d.ts +19 -16
- package/libraries/services/modal.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -16,7 +16,10 @@ export class FieldLabelComponent {
|
|
|
16
16
|
this.isInvalid$ = new BehaviorSubject(false);
|
|
17
17
|
}
|
|
18
18
|
ngOnInit() {
|
|
19
|
-
this.control = this.controlContainer.control
|
|
19
|
+
this.control = this.controlContainer.control?.get(this.controlName);
|
|
20
|
+
if (!this.control) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
20
23
|
setTimeout(() => {
|
|
21
24
|
this.isRequired$.next(this.isControlRequired);
|
|
22
25
|
this.isInvalid$.next(this.isControlInvalid);
|
|
@@ -76,4 +79,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
76
79
|
}], ngLabelClass: [{
|
|
77
80
|
type: Input
|
|
78
81
|
}] } });
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtbGFiZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9jb21wb25lbnRzL2ZpZWxkLWxhYmVsL2ZpZWxkLWxhYmVsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQXFDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7OztBQWtCMUUsTUFBTSxPQUFPLG1CQUFtQjtJQWM5QixZQUFzQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUx4RCxnQkFBVyxHQUE2QixJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRSxlQUFVLEdBQTZCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBS2xFLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFcEUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDekUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzlDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLDBCQUEwQixHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUN6SCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxTQUFTLENBQUMsQ0FBQztZQUNyRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFDakUsQ0FBQztJQUVELFdBQVc7UUFDVCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLHlCQUF5QixFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBbkRVLG1CQUFtQjttR0FBbkIsbUJBQW1CLGtLQWRwQjs7Ozs7O0dBTVQsMkRBSUMsWUFBWSxxUkFDWixrQkFBa0I7OzRGQUdULG1CQUFtQjtrQkFoQi9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFOzs7Ozs7R0FNVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGtCQUFrQjtxQkFDbkI7aUJBQ0Y7cUZBR1UsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25Nb2R1bGUgfSBmcm9tICcuLi8uLi9sb2NhbGl6YXRpb24vbG9jYWxpemF0aW9uLm1vZHVsZSc7XG5pbXBvcnQgeyBleHRyYWN0VG91Y2hlZENoYW5nZXMgfSBmcm9tICcuLi8uLi91dGlscy9hYnN0cmFjdC1jb250cm9sLnV0aWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdbdGItZmllbGQtbGFiZWxdJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwidGItZmllbGQtbGFiZWxcIiAqbmdJZj1cImNvbnRyb2xcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicmVxdWlyZWQtYXN0ZXJpc2tcIiAqbmdJZj1cImlzUmVxdWlyZWQkIHwgYXN5bmNcIiBbY2xhc3MucmVxdWlyZWRdPVwiaXNJbnZhbGlkJCB8IGFzeW5jXCI+Kjwvc3Bhbj5cbiAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cIm5nTGFiZWxDbGFzc1wiPnt7IGxhYmVsIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Rvb2x0aXBdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBMb2NhbGl6YXRpb25Nb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZExhYmVsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIGNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG5nTGFiZWxDbGFzczogc3RyaW5nIHwgc3RyaW5nW10gfCBTZXQ8c3RyaW5nPiB8IHtcbiAgICBba2xhc3M6IHN0cmluZ106IGFueTtcbiAgfTtcblxuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2w7XG4gIGlzUmVxdWlyZWQkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgaXNJbnZhbGlkJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHByaXZhdGUgc3RhdHVzQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHRvdWNoZWRDaGFuZ2VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29udHJvbCA9IHRoaXMuY29udHJvbENvbnRhaW5lci5jb250cm9sPy5nZXQodGhpcy5jb250cm9sTmFtZSk7XG5cbiAgICBpZiAoIXRoaXMuY29udHJvbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pc1JlcXVpcmVkJC5uZXh0KHRoaXMuaXNDb250cm9sUmVxdWlyZWQpO1xuICAgICAgdGhpcy5pc0ludmFsaWQkLm5leHQodGhpcy5pc0NvbnRyb2xJbnZhbGlkKTtcbiAgICAgIHRoaXMuc3RhdHVzQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNSZXF1aXJlZCQubmV4dCh0aGlzLmlzQ29udHJvbFJlcXVpcmVkKTtcbiAgICAgICAgdGhpcy5pc0ludmFsaWQkLm5leHQodGhpcy5pc0NvbnRyb2xJbnZhbGlkKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy50b3VjaGVkQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IGV4dHJhY3RUb3VjaGVkQ2hhbmdlcyh0aGlzLmNvbnRyb2wpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSkuc3Vic2NyaWJlKChpc1RvdWNoZWQpID0+IHtcbiAgICAgICAgdGhpcy5pc1JlcXVpcmVkJC5uZXh0KHRoaXMuaXNDb250cm9sUmVxdWlyZWQpO1xuICAgICAgICB0aGlzLmlzSW52YWxpZCQubmV4dCghIXRoaXMuY29udHJvbC5lcnJvcnM/LnJlcXVpcmVkICYmIGlzVG91Y2hlZCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBpc0NvbnRyb2xSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sLmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgfVxuXG4gIGdldCBpc0NvbnRyb2xJbnZhbGlkKCkge1xuICAgIHJldHVybiAhIXRoaXMuY29udHJvbC5lcnJvcnM/LnJlcXVpcmVkICYmIHRoaXMuY29udHJvbC50b3VjaGVkO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN0YXR1c0NoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnRvdWNoZWRDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -78,7 +78,7 @@ export class FacilityService {
|
|
|
78
78
|
const featurePermissions = this.store.selectSnapshot(FacilityState.featurePermissions);
|
|
79
79
|
return isVersionSupported && featurePermissions?.includes(permissionType);
|
|
80
80
|
};
|
|
81
|
-
this.getActiveMenuFacility = (menuItems, parkId, guid) => menuItems.find(menuItem => menuItem.properties
|
|
81
|
+
this.getActiveMenuFacility = (menuItems, parkId, guid) => menuItems.find(menuItem => menuItem.properties?.guid === guid && menuItem.id === parkId);
|
|
82
82
|
}
|
|
83
83
|
hasPermissionTypeSignal(permissionType) {
|
|
84
84
|
return computed(() => {
|
|
@@ -272,8 +272,8 @@ export class FacilityService {
|
|
|
272
272
|
}
|
|
273
273
|
getActiveMenuFacilityChild(menuItems, parkId, guid) {
|
|
274
274
|
const multiFacilityParentID = this.store.selectSnapshot(FacilityState.multiParkParentID);
|
|
275
|
-
const menuItemParent = menuItems.find(menuItem => menuItem.properties
|
|
276
|
-
const menuItem = menuItemParent?.children
|
|
275
|
+
const menuItemParent = menuItems.find(menuItem => menuItem.properties?.guid === guid && menuItem.id === multiFacilityParentID);
|
|
276
|
+
const menuItem = menuItemParent?.children?.find(menuItem => menuItem.id === parkId);
|
|
277
277
|
return menuItem;
|
|
278
278
|
}
|
|
279
279
|
getFirstMenuItemFacility(menuItems) {
|
|
@@ -288,4 +288,4 @@ export class FacilityService {
|
|
|
288
288
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FacilityService, decorators: [{
|
|
289
289
|
type: Injectable
|
|
290
290
|
}], ctorParameters: () => [{ type: i1.AppConfigService }, { type: i2.Store }] });
|
|
291
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjaWxpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy9mYWNpbGl0eS9mYWNpbGl0eS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUcvRixPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzNFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQUdqRCxNQUFNLE9BQU8sZUFB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QUMsQ0FBQyxVQUFVLENBQUM7UUFDNUcsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RyxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDOytHQXRVVSxlQUFlO21IQUFmLGVBQWU7OzRGQUFmLGVBQWU7a0JBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaWx0ZXIsIGZpcnN0LCBtYXAsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVOR0xJU0hfTEFOR1VBR0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZ2xvYmFsLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBTZWFyY2hGYWNpbGl0aWVzTW9kZSB9IGZyb20gJy4uLy4uL2VudW1zL3NlYXJjaC1mYWNpbGl0eS1tb2RlLmVudW0nO1xuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL21lbnUtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvblR5cGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBGYWNpbGl0eVRyZWVEdG8sIFBhcmtCcmFuY2hUeXBlIH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9pZGVudGl0eS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgRmFjaWxpdHlEdG8gfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L3JwYy1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uVHlwZVN1cHBvcnRlZFZlcnNpb25EaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vc3RhdGljLWZpbGVzJztcbmltcG9ydCB7IE51bWJlck1hcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xhbmcudXRpbCc7XG5pbXBvcnQgeyBpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3VwcG9ydC12ZXJzaW9uLnV0aWwnO1xuaW1wb3J0IHsgU2lkZU5hdlNvcnRCeSB9IGZyb20gJy4uL3NpZGVuYXYvc2lkZW5hdi1zb3J0LmVudW0nO1xuaW1wb3J0IHsgREVGQVVMVF9TT1JUX01FTlUsIFNpZGVuYXZTdGF0ZSB9IGZyb20gJy4uL3NpZGVuYXYvc2lkZW5hdi5zdGF0ZSc7XG5pbXBvcnQgeyBGYWNpbGl0eURpY3Rpb25hcnkgfSBmcm9tICcuL2ZhY2lsaXR5LW1vZGFsJztcbmltcG9ydCB7IEZhY2lsaXR5V2l0aEd1aWQgfSBmcm9tICcuL2ZhY2lsaXR5LXdpdGgtZ3VpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbiB9IGZyb20gJy4vZmFjaWxpdHkuYWN0aW9ucyc7XG5pbXBvcnQgeyBGYWNpbGl0eVN0YXRlIH0gZnJvbSAnLi9mYWNpbGl0eS5zdGF0ZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGYWNpbGl0eVNlcnZpY2Uge1xuXG4gIGdldCBsb2FkaW5nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZSwgcHJpdmF0ZSBzdG9yZTogU3RvcmUpIHtcbiAgfVxuXG4gIGlzUGFyZW50ID0gKGZhY2lsaXR5OiBGYWNpbGl0eVRyZWVEdG8pID0+IHRydWU7XG4gIGlzQ2hpbGRyZW4gPSAoZmFjaWxpdHk6IEZhY2lsaXR5VHJlZUR0bykgPT4gdHJ1ZTtcbiAgaXNQYXJlbnRPckNoaWxkID0gKGZhY2lsaXR5OiBGYWNpbGl0eVRyZWVEdG8pID0+IHRoaXMuaXNDaGlsZHJlbihmYWNpbGl0eSkgfHwgdGhpcy5pc1BhcmVudChmYWNpbGl0eSk7XG4gIGlzQ2hpbGQgPSAoZmFjaWxpdHk6IEZhY2lsaXR5VHJlZUR0bykgPT4gZmFjaWxpdHkudHlwZSA9PT0gUGFya0JyYW5jaFR5cGUuUGFyaztcblxuICBoYXNTeXN0ZW1BZG1pblBlcm1pc3Npb25zID0gKCkgPT4ge1xuICAgIGNvbnN0IGZlYXR1cmVQZXJtaXNzaW9ucyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5mZWF0dXJlUGVybWlzc2lvbnMpO1xuICAgIHJldHVybiBmZWF0dXJlUGVybWlzc2lvbnM/LnNvbWUocCA9PiBwID09PSBQZXJtaXNzaW9uVHlwZS5PcGVyYXRpb25hbEFkbWluIHx8IHAgPT09IFBlcm1pc3Npb25UeXBlLlN5c3RlbUFkbWluKTtcbiAgfTtcblxuICBoYXNQZXJtaXNzaW9uVHlwZXNCeVBhcmsgPSAocGVybWlzc2lvblR5cGVzOiBQZXJtaXNzaW9uVHlwZVtdLCBndWlkOiBzdHJpbmcsIHBhcmtJZDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgY29uc3QgZmVhdHVyZVBlcm1pc3Npb25zID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF0uZmVhdHVyZVBlcm1pc3Npb25zO1xuICAgIGNvbnN0IHNwYXJrVmVyc2lvbiA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoKHsgc21hcnRwYXJrOiB7IHZlcnNpb25zIH0gfSkgPT4gdmVyc2lvbnNbZ3VpZF0pO1xuXG4gICAgcmV0dXJuIHBlcm1pc3Npb25UeXBlcy5yZWR1Y2UoKGFjYywgcGVybWlzc2lvblR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHBlcm1pc3Npb25TdXBwb3J0VmVyc2lvbiA9IFBlcm1pc3Npb25UeXBlU3VwcG9ydGVkVmVyc2lvbkRpY3Rpb25hcnlbcGVybWlzc2lvblR5cGVdO1xuICAgICAgaWYgKCFwZXJtaXNzaW9uU3VwcG9ydFZlcnNpb24pIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBQZXJtaXNzaW9uICR7cGVybWlzc2lvblR5cGV9IHZlcnNpb24gc3VwcG9ydCBpcyBtaXNzaW5nIGluIFBlcm1pc3Npb25UeXBlU3VwcG9ydGVkVmVyc2lvbkRpY3Rpb25hcnkgZmlsZWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc1ZlcnNpb25TdXBwb3J0ZWQgPSBpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsKHNwYXJrVmVyc2lvbiwgcGVybWlzc2lvblN1cHBvcnRWZXJzaW9uKTtcbiAgICAgIGFjY1twZXJtaXNzaW9uVHlwZV0gPSBpc1ZlcnNpb25TdXBwb3J0ZWQgJiYgZmVhdHVyZVBlcm1pc3Npb25zLmluY2x1ZGVzKHBlcm1pc3Npb25UeXBlKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgeyBba2V5OiBzdHJpbmddOiBib29sZWFuOyB9KTtcbiAgfTtcblxuICBoYXNQZXJtaXNzaW9uVHlwZUJ5UGFyayA9IChwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUsIGd1aWQ6IHN0cmluZywgcGFya0lkOiBudW1iZXIpID0+IHtcbiAgICBsZXQgaGFzUGVybWlzc2lvbiA9IGZhbHNlO1xuICAgIGxldCBpc1ZlcnNpb25TdXBwb3J0ZWQgPSB0aGlzLmlzVmVyc2lvblN1cHBvcnRlZChwZXJtaXNzaW9uVHlwZSwgZ3VpZCk7XG4gICAgaWYgKGlzVmVyc2lvblN1cHBvcnRlZCkge1xuICAgICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgICBjb25zdCBmZWF0dXJlUGVybWlzc2lvbnMgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXS5mZWF0dXJlUGVybWlzc2lvbnM7XG4gICAgICBoYXNQZXJtaXNzaW9uID0gZmVhdHVyZVBlcm1pc3Npb25zPy5pbmNsdWRlcyhwZXJtaXNzaW9uVHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc1Blcm1pc3Npb247XG4gIH07XG5cbiAgaGFzUGVybWlzc2lvblR5cGUkID0gKHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZSkgPT5cbiAgICB0aGlzLmlzVmVyc2lvblN1cHBvcnRlZCQocGVybWlzc2lvblR5cGUpLnBpcGUoc3dpdGNoTWFwKGlzVmVyc2lvblN1cHBvcnRlZCA9PiB7XG4gICAgICByZXR1cm4gIWlzVmVyc2lvblN1cHBvcnRlZCA/IG9mKGZhbHNlKSA6IHRoaXMuc3RvcmUuc2VsZWN0KEZhY2lsaXR5U3RhdGUuZmVhdHVyZVBlcm1pc3Npb25zKS5waXBlKG1hcChmZWF0dXJlUGVybWlzc2lvbnMgPT5cbiAgICAgICAgZmVhdHVyZVBlcm1pc3Npb25zPy5pbmNsdWRlcyhwZXJtaXNzaW9uVHlwZSkpKTtcbiAgICB9KSk7XG5cbiAgaXNWZXJzaW9uU3VwcG9ydGVkJCA9IChwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUpID0+XG4gICAgdGhpcy5zdG9yZS5zZWxlY3QoRmFjaWxpdHlTdGF0ZS5ndWlkKS5waXBlKGZpbHRlcihndWlkID0+ICEhZ3VpZCksIG1hcChndWlkID0+IHRoaXMuaXNWZXJzaW9uU3VwcG9ydGVkKHBlcm1pc3Npb25UeXBlLCBndWlkKSkpO1xuXG4gIGhhc1Blcm1pc3Npb25UeXBlU2lnbmFsKHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZSkge1xuICAgIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XG4gICAgICBsZXQgaXNQZXJtaXR0ZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGlzVmVyc2lvblN1cHBvcnRlZCA9IHRoaXMuaXNWZXJzaW9uU3VwcG9ydGVkU2lnbmFsKHBlcm1pc3Npb25UeXBlKSgpO1xuICAgICAgaWYgKGlzVmVyc2lvblN1cHBvcnRlZCkge1xuICAgICAgICBjb25zdCBmZWF0dXJlUGVybWlzc2lvbnMgPSB0aGlzLnN0b3JlLnNlbGVjdFNpZ25hbChGYWNpbGl0eVN0YXRlLmZlYXR1cmVQZXJtaXNzaW9ucykoKTtcbiAgICAgICAgaXNQZXJtaXR0ZWQgPSAhIWZlYXR1cmVQZXJtaXNzaW9ucz8uaW5jbHVkZXMocGVybWlzc2lvblR5cGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXNQZXJtaXR0ZWQ7XG4gICAgfSk7XG4gIH1cbiAgICBcbiAgaXNWZXJzaW9uU3VwcG9ydGVkU2lnbmFsKHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZSkge1xuICAgIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XG4gICAgICBjb25zdCBndWlkID0gdGhpcy5zdG9yZS5zZWxlY3RTaWduYWwoRmFjaWxpdHlTdGF0ZS5ndWlkKSgpO1xuICAgICAgcmV0dXJuICEhZ3VpZCAmJiB0aGlzLmlzVmVyc2lvblN1cHBvcnRlZChwZXJtaXNzaW9uVHlwZSwgZ3VpZCk7XG4gICAgfSk7XG4gIH1cblxuICBpc1ZlcnNpb25TdXBwb3J0ZWQgPSAocGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLCBndWlkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBzcGFya1ZlcnNpb24gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KCh7IHNtYXJ0cGFyazogeyB2ZXJzaW9ucyB9IH0pID0+IHZlcnNpb25zW2d1aWRdKTtcbiAgICBjb25zdCBwZXJtaXNzaW9uU3VwcG9ydFZlcnNpb24gPSBQZXJtaXNzaW9uVHlwZVN1cHBvcnRlZFZlcnNpb25EaWN0aW9uYXJ5W3Blcm1pc3Npb25UeXBlXTtcbiAgICBpZiAoIXBlcm1pc3Npb25TdXBwb3J0VmVyc2lvbikge1xuICAgICAgY29uc29sZS53YXJuKGBQZXJtaXNzaW9uICR7cGVybWlzc2lvblR5cGV9IHZlcnNpb24gc3VwcG9ydCBpcyBtaXNzaW5nIGluIFBlcm1pc3Npb25UeXBlU3VwcG9ydGVkVmVyc2lvbkRpY3Rpb25hcnkgZmlsZWApO1xuICAgIH1cblxuICAgIHJldHVybiBpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsKHNwYXJrVmVyc2lvbiwgcGVybWlzc2lvblN1cHBvcnRWZXJzaW9uKTtcbiAgfTtcblxuICBoYXNQZXJtaXNzaW9uVHlwZSA9IChwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUpID0+IHtcbiAgICBjb25zdCBndWlkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmd1aWQpO1xuICAgIGNvbnN0IHNwYXJrVmVyc2lvbiA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoKHsgc21hcnRwYXJrOiB7IHZlcnNpb25zIH0gfSkgPT4gdmVyc2lvbnNbZ3VpZF0pO1xuICAgIGNvbnN0IHBlcm1pc3Npb25TdXBwb3J0VmVyc2lvbiA9IFBlcm1pc3Npb25UeXBlU3VwcG9ydGVkVmVyc2lvbkRpY3Rpb25hcnlbcGVybWlzc2lvblR5cGVdO1xuICAgIGlmICghcGVybWlzc2lvblN1cHBvcnRWZXJzaW9uKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFBlcm1pc3Npb24gJHtwZXJtaXNzaW9uVHlwZX0gdmVyc2lvbiBzdXBwb3J0IGlzIG1pc3NpbmcgaW4gUGVybWlzc2lvblR5cGVTdXBwb3J0ZWRWZXJzaW9uRGljdGlvbmFyeWApO1xuICAgIH1cblxuICAgIGNvbnN0IGlzVmVyc2lvblN1cHBvcnRlZCA9IGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwoc3BhcmtWZXJzaW9uLCBwZXJtaXNzaW9uU3VwcG9ydFZlcnNpb24pO1xuICAgIGNvbnN0IGZlYXR1cmVQZXJtaXNzaW9ucyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5mZWF0dXJlUGVybWlzc2lvbnMpO1xuICAgIHJldHVybiBpc1ZlcnNpb25TdXBwb3J0ZWQgJiYgZmVhdHVyZVBlcm1pc3Npb25zPy5pbmNsdWRlcyhwZXJtaXNzaW9uVHlwZSk7XG4gIH07XG5cbiAgZ2V0RmFjaWxpdGllcyhmYWNpbGl0eVRyZWU6IEZhY2lsaXR5VHJlZUR0b1tdLCBmaWx0ZXI6IChGYWNpbGl0eVRyZWVEdG8pID0+IGJvb2xlYW4gPSBudWxsKTogRmFjaWxpdHlUcmVlRHRvW10ge1xuICAgIGNvbnN0IGZhY2lsaXRpZXM6IEZhY2lsaXR5VHJlZUR0b1tdID0gW107XG4gICAgY29uc3QgaXNDbG91ZEFwcCA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuQ2xvdWQ7XG5cbiAgICBmYWNpbGl0eVRyZWUuZm9yRWFjaChmID0+IHtcbiAgICAgIGNvbnN0IGZhY2lsaXR5Q29weSA9IG5ldyBGYWNpbGl0eVRyZWVEdG8oZik7XG4gICAgICBpZiAoaXNDbG91ZEFwcCkge1xuICAgICAgICBmYWNpbGl0eUNvcHkuaWQgPSBmLmNsb3VkSWQ7XG4gICAgICB9XG4gICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZmFjaWxpdHlDb3B5KSkge1xuICAgICAgICBmYWNpbGl0aWVzLnB1c2goZmFjaWxpdHlDb3B5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmYWNpbGl0aWVzO1xuICB9XG5cbiAgZXh0cmFjdEZhY2lsaXR5TWFwKGZhY2lsaXR5VHJlZTogRmFjaWxpdHlUcmVlRHRvW10pIHtcbiAgICBjb25zdCBpc0Nsb3VkQXBwID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5DbG91ZDtcbiAgICBjb25zdCBmYWNpbGl0aWVzTWFwID0gbmV3IE1hcDxudW1iZXIsIEZhY2lsaXR5VHJlZUR0bz4oKTtcbiAgICB0aGlzLmZsYXRlblRyZWUoZmFjaWxpdHlUcmVlLCBmYWNpbGl0aWVzTWFwLCBpc0Nsb3VkQXBwKTtcbiAgICByZXR1cm4gZmFjaWxpdGllc01hcDtcbiAgfVxuXG4gIHBvcHVsYXRlRmFjaWxpdGllcyhmYWNpbGl0eURpY3Rpb25hcnk6IEZhY2lsaXR5RGljdGlvbmFyeSwgbW9kZTogU2VhcmNoRmFjaWxpdGllc01vZGUsIHNpbmdsZUd1aWREaXNwbGF5OiBzdHJpbmcpOiBGYWNpbGl0eVdpdGhHdWlkW10ge1xuICAgIGNvbnN0IGNsb25lZEZhY2lsaXRpZXMgPSBjbG9uZURlZXAoZmFjaWxpdHlEaWN0aW9uYXJ5KTtcbiAgICBsZXQgZmFjaWxpdGllczogRmFjaWxpdHlXaXRoR3VpZFtdID0gW107XG4gICAgaWYgKCEhc2luZ2xlR3VpZERpc3BsYXkpIHtcbiAgICAgIGZhY2lsaXRpZXMgPSB0aGlzLnBvcHVsYXRlU2luZ2xlR3VpZChjbG9uZWRGYWNpbGl0aWVzW3NpbmdsZUd1aWREaXNwbGF5XSwgbW9kZSwgc2luZ2xlR3VpZERpc3BsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmYWNpbGl0aWVzID0gdGhpcy5wb3B1bGF0ZU11bHRpR3VpZHMoY2xvbmVkRmFjaWxpdGllcywgbW9kZSk7XG4gICAgfVxuXG4gICAgLy8gRmlsdGVyIEluYWN0aXZlIGZhY2lsaXRpZXMgaWYgbmVlZGVkXG4gICAgZmFjaWxpdGllcyA9IGZhY2lsaXRpZXMuZmlsdGVyKGYgPT4ge1xuICAgICAgcmV0dXJuIGYuZGF0YS5hY3RpdmU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmFjaWxpdGllcy5zb3J0KChhLCBiKSA9PiBhLmRhdGEubmFtZS5sb2NhbGVDb21wYXJlKGIuZGF0YS5uYW1lLCBFTkdMSVNIX0xBTkdVQUdFLCB7IG51bWVyaWM6IHRydWUgfSkpO1xuICB9XG5cbiAgZ2V0RmFjaWxpdHlXaXRoR3VpZChmYWNpbGl0aWVzOiBGYWNpbGl0eVdpdGhHdWlkW10sIHBhcmtJZDogbnVtYmVyLCBndWlkOiBzdHJpbmcsIHNob3dOb25lVGV4dDogYm9vbGVhbixcbiAgICBtaW5pbXVtVmVyc2lvblN1cHBvcnQ6IHN0cmluZywgcGVybWlzc2lvblN1cHBvcnQ6IFBlcm1pc3Npb25UeXBlKTogRmFjaWxpdHlXaXRoR3VpZCB7XG4gICAgbGV0IGZhY2lsaXR5VG9TZWxlY3RBc0RlZmF1bHQ6IEZhY2lsaXR5V2l0aEd1aWQ7XG4gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBndWlkIG9yIHBhcmtJZCB3ZSBkb24ndCBzZWxlY3QgYSBkZWZhdWx0IHBhcmtcbiAgICBpZiAoKCEhZ3VpZCAmJiAhIXBhcmtJZCkgfHwgIXNob3dOb25lVGV4dCkge1xuICAgICAgaWYgKCFndWlkICYmICFwYXJrSWQpIHtcbiAgICAgICAgZ3VpZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5ndWlkKTtcbiAgICAgICAgcGFya0lkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLnBhcmtJZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIHNlYXJjaCBmb3IgdGhlIHBhcmsgaXRzZWxmXG4gICAgICBmYWNpbGl0eVRvU2VsZWN0QXNEZWZhdWx0ID0gZmFjaWxpdGllcy5maW5kKGYgPT4gZi5ndWlkID09PSBndWlkICYmIGYuZGF0YS5pZCA9PT0gcGFya0lkKTtcbiAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGEgcGFya1xuICAgICAgLy8gV2UgY2hlY2sgaWYgdGhlIGd1aWQgKyBwYXJrSWQgaXMgZnJvbSBhIHBhcmVudCBwYXJrIHNvIHdlIHNlYXJjaCBmb3IgdGhlIGNoaWxkIHBhcmtcbiAgICAgIGlmICghZmFjaWxpdHlUb1NlbGVjdEFzRGVmYXVsdCkge1xuICAgICAgICBmYWNpbGl0eVRvU2VsZWN0QXNEZWZhdWx0ID0gZmFjaWxpdGllcy5maW5kKGYgPT4gZi5ndWlkID09PSBndWlkICYmIGYuZGF0YS5tdWx0aVBhcmtQYXJlbnRJRCA9PT0gcGFya0lkKTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGEgcGFya1xuICAgICAgLy8gV2UgY2hlY2sgaWYgdGhlIGd1aWQgKyBwYXJrSWQgaXMgZnJvbSBhIGNoaWxkIHBhcmsgc28gd2Ugc2VhcmNoIGZvciB0aGUgcGFyZW50IHBhcmtcbiAgICAgIGlmICghZmFjaWxpdHlUb1NlbGVjdEFzRGVmYXVsdCkge1xuICAgICAgICBjb25zdCBwYXJlbnRQYXJrSWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUubXVsdGlQYXJrUGFyZW50SUQpO1xuICAgICAgICBmYWNpbGl0eVRvU2VsZWN0QXNEZWZhdWx0ID0gZmFjaWxpdGllcy5maW5kKGYgPT4gZi5ndWlkID09PSBndWlkICYmIGYuZGF0YS5pZCA9PT0gcGFyZW50UGFya0lkKTtcbiAgICAgICAgcGFya0lkID0gZmFjaWxpdHlUb1NlbGVjdEFzRGVmYXVsdCA/IHBhcmVudFBhcmtJZCA6IHBhcmtJZDtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYSBwYXJrIG9yIHRoZSBwYXJrIGlzIE5PVCBzdXBwb3J0ZWQgb3IgTk9UIHBlcm1pdHRlZCwgdHJ5IHRvIGZpbmQgdGhlIGZpcnN0IHN1cHBvcnRlZCBmYWNpbGl0eVxuICAgICAgaWYgKCFmYWNpbGl0eVRvU2VsZWN0QXNEZWZhdWx0IHx8ICF0aGlzLmlzRmFjaWxpdHlWZXJzaW9uU3VwcG9ydGVkKGZhY2lsaXR5VG9TZWxlY3RBc0RlZmF1bHQsIG1pbmltdW1WZXJzaW9uU3VwcG9ydCkgfHxcbiAgICAgICAgIXRoaXMuaXNGYWNpbGl0eVBlcm1pc3Npb25TdXBwb3J0ZWQoZmFjaWxpdHlUb1NlbGVjdEFzRGVmYXVsdCwgcGVybWlzc2lvblN1cHBvcnQpKSB7XG4gICAgICAgIGZhY2lsaXR5VG9TZWxlY3RBc0RlZmF1bHQgPSBmYWNpbGl0aWVzLmZpbmQoZiA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXNGYWNpbGl0eVZlcnNpb25TdXBwb3J0ZWQoZiwgbWluaW11bVZlcnNpb25TdXBwb3J0KSAmJiB0aGlzLmlzRmFjaWxpdHlQZXJtaXNzaW9uU3VwcG9ydGVkKGYsIHBlcm1pc3Npb25TdXBwb3J0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhY2lsaXR5VG9TZWxlY3RBc0RlZmF1bHQ7XG4gIH1cblxuICBpc0ZhY2lsaXR5VmVyc2lvblN1cHBvcnRlZChmYWNpbGl0eTogRmFjaWxpdHlXaXRoR3VpZCwgbWluaW11bVZlcnNpb25TdXBwb3J0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pc0d1aWRWZXJzaW9uU3VwcG9ydGVkKGZhY2lsaXR5Lmd1aWQsIG1pbmltdW1WZXJzaW9uU3VwcG9ydCk7XG4gIH1cblxuICBpc0ZhY2lsaXR5UGVybWlzc2lvblN1cHBvcnRlZChmYWNpbGl0eTogRmFjaWxpdHlXaXRoR3VpZCwgcGVybWlzc2lvbnNUeXBlOiBQZXJtaXNzaW9uVHlwZSkge1xuICAgIHJldHVybiAhUGVybWlzc2lvblR5cGVbcGVybWlzc2lvbnNUeXBlXSB8fCB0aGlzLmhhc1Blcm1pc3Npb25UeXBlQnlQYXJrKHBlcm1pc3Npb25zVHlwZSwgZmFjaWxpdHkuZ3VpZCwgZmFjaWxpdHkuZGF0YS5pZCk7XG4gIH1cblxuICBpc0d1aWRWZXJzaW9uU3VwcG9ydGVkKGd1aWQ6IHN0cmluZywgbWluaW11bVZlcnNpb25TdXBwb3J0OiBzdHJpbmcpIHtcbiAgICBjb25zdCBzcGFya1ZlcnNpb24gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KCh7IHNtYXJ0cGFyazogeyB2ZXJzaW9ucyB9IH0pID0+IHZlcnNpb25zW2d1aWRdKTtcbiAgICByZXR1cm4gIW1pbmltdW1WZXJzaW9uU3VwcG9ydCB8fCAoc3BhcmtWZXJzaW9uICYmIGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwoc3BhcmtWZXJzaW9uLCBtaW5pbXVtVmVyc2lvblN1cHBvcnQpKTtcbiAgfVxuXG4gIGNsZWFySW5hY3RpdmVTZWxlY3RlZFBhcmsoKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbigpKTtcbiAgfVxuXG4gIHByaXZhdGUgcG9wdWxhdGVNdWx0aUd1aWRzKGZhY2lsaXR5RGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBtb2RlOiBTZWFyY2hGYWNpbGl0aWVzTW9kZSk6IEZhY2lsaXR5V2l0aEd1aWRbXSB7XG4gICAgY29uc3QgZmFjaWxpdGllczogRmFjaWxpdHlXaXRoR3VpZFtdID0gW107XG4gICAgZm9yIChjb25zdCBndWlkIG9mIE9iamVjdC5rZXlzKGZhY2lsaXR5RGljdGlvbmFyeSkpIHtcbiAgICAgIGZhY2lsaXRpZXMucHVzaCguLi50aGlzLnBvcHVsYXRlU2luZ2xlR3VpZChmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF0sIG1vZGUsIGd1aWQpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhY2lsaXRpZXM7XG4gIH1cblxuICBwcml2YXRlIHBvcHVsYXRlU2luZ2xlR3VpZChsb3RzTWFwOiBOdW1iZXJNYXA8RmFjaWxpdHlEdG8+LCBtb2RlOiBTZWFyY2hGYWNpbGl0aWVzTW9kZSwgZ3VpZDogc3RyaW5nKTogRmFjaWxpdHlXaXRoR3VpZFtdIHtcbiAgICBjb25zdCBmYWNpbGl0aWVzOiBGYWNpbGl0eVdpdGhHdWlkW10gPSBbXTtcbiAgICBjb25zdCBsb3RzOiBGYWNpbGl0eUR0b1tdID0gT2JqZWN0LnZhbHVlcyhsb3RzTWFwKTtcbiAgICBjb25zdCBwYXJlbnRQYXJrOiBGYWNpbGl0eUR0byA9IGxvdHMuZmluZChsID0+IGwuaXNNdWx0aVBhcmspO1xuXG4gICAgZm9yIChjb25zdCBsb3Qgb2YgbG90cykge1xuICAgICAgaWYgKG1vZGUgPT09IFNlYXJjaEZhY2lsaXRpZXNNb2RlLm9ubHlQYXJlbnRzICYmIGxvdC5tdWx0aVBhcmtQYXJlbnRJRCA9PT0gMCB8fFxuICAgICAgICBtb2RlID09PSBTZWFyY2hGYWNpbGl0aWVzTW9kZS5vbmx5Q2hpbGRyZW4gJiYgbG90LmlzTXVsdGlQYXJrID09PSAwIHx8XG4gICAgICAgIG1vZGUgPT09IFNlYXJjaEZhY2lsaXRpZXNNb2RlLnBhcmVudHNXaXRoQ2hpbGRyZW4pIHtcbiAgICAgICAgbG90Lm5hbWUgPSAhIXBhcmVudFBhcmsgJiYgIWxvdC5pc011bHRpUGFyayA/IGAke3BhcmVudFBhcmsubmFtZX0gLSAke2xvdC5uYW1lfWAgOiBgJHtsb3QubmFtZX1gO1xuICAgICAgICBmYWNpbGl0aWVzLnB1c2goeyBndWlkLCBkYXRhOiBsb3QgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhY2lsaXRpZXM7XG4gIH1cblxuICBwcml2YXRlIGZsYXRlblRyZWUoZmFjaWxpdHlUcmVlOiBGYWNpbGl0eVRyZWVEdG9bXSwgZmFjaWxpdGllc01hcDogTWFwPG51bWJlciwgRmFjaWxpdHlUcmVlRHRvPiwgaXNDbG91ZEFwcDogYm9vbGVhbikge1xuICAgIGZhY2lsaXR5VHJlZS5mb3JFYWNoKGZ0ID0+IHtcbiAgICAgIGlmIChmdC5jaGlsZHJlbikge1xuICAgICAgICBjb25zdCBmbGF0Tm9kZTogRmFjaWxpdHlUcmVlRHRvID0gRmFjaWxpdHlUcmVlRHRvLmZyb21KUyhmdCk7XG4gICAgICAgIHRoaXMuYWRkVG9NYXAoaXNDbG91ZEFwcCwgZmFjaWxpdGllc01hcCwgZmxhdE5vZGUpO1xuICAgICAgICB0aGlzLmZsYXRlblRyZWUoZnQuY2hpbGRyZW4sIGZhY2lsaXRpZXNNYXAsIGlzQ2xvdWRBcHApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnQuY2hpbGRyZW4gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYWRkVG9NYXAoaXNDbG91ZEFwcCwgZmFjaWxpdGllc01hcCwgZnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRUb01hcChpc0Nsb3VkQXBwOiBib29sZWFuLCBmYWNpbGl0aWVzTWFwOiBNYXA8bnVtYmVyLCBGYWNpbGl0eVRyZWVEdG8+LCBmdDogRmFjaWxpdHlUcmVlRHRvKSB7XG4gICAgaWYgKGlzQ2xvdWRBcHApIHtcbiAgICAgIGZhY2lsaXRpZXNNYXAuc2V0KGZ0LmNsb3VkSWQsIGZ0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmFjaWxpdGllc01hcC5zZXQoZnQuaWQsIGZ0KTtcbiAgICB9XG4gIH1cblxuICBnZXRQYXJrSWRzKCk6IG51bWJlcltdIHtcbiAgICBsZXQgZ3VpZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5ndWlkKTtcbiAgICBsZXQgcGFya0lkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLnBhcmtJZCk7XG4gICAgbGV0IHBhcmtJZHMgPSB0aGlzLmdldFBhcmtzKHBhcmtJZCwgZ3VpZCk7XG4gICAgcmV0dXJuIHBhcmtJZHM7XG4gIH1cblxuICBpbml0U2VsZWN0ZWRQYXJrKGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge1xuICAgIHJldHVybiBhY3RpdmF0ZWRSb3V0ZS5wYXJhbXMucGlwZShcbiAgICAgIGZpbHRlcihwYXJhbXMgPT4gT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGggPiAwKSxcbiAgICAgIHN3aXRjaE1hcChwYXJhbXMgPT4ge1xuICAgICAgICBsZXQgZ3VpZDogc3RyaW5nO1xuICAgICAgICBjb25zdCBwYXJrSWQgPSArcGFyYW1zLnBhcmtJZDtcbiAgICAgICAgY29uc3QgdGliYUtleSA9IHBhcmFtcy50aWJhS2V5O1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoRmFjaWxpdHlTdGF0ZS50aWJhS2V5cykucGlwZShcbiAgICAgICAgICBmaWx0ZXIodGliYUtleXMgPT4gT2JqZWN0LmtleXModGliYUtleXMpLmxlbmd0aCA+IDApLFxuICAgICAgICAgIG1hcCh0aWJhS2V5cyA9PiB7XG4gICAgICAgICAgICBndWlkID0gT2JqZWN0LmtleXModGliYUtleXMpW3RpYmFLZXldO1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3VpZCwgcGFya0lkIH07XG4gICAgICAgICAgfSkpO1xuICAgICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXJrcyhwYXJrSWQ6IG51bWJlciwgZ3VpZDogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmtJZHMgPSBbXTtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZmFjaWxpdHlEaWN0aW9uYXJ5KTtcbiAgICBjb25zdCBndWlkRmFjaWxpdGllc01hcCA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXTtcblxuICAgIGlmIChndWlkRmFjaWxpdGllc01hcCAmJiBndWlkRmFjaWxpdGllc01hcFtwYXJrSWRdPy5pc011bHRpUGFyaykge1xuICAgICAgcGFya0lkcyA9IE9iamVjdC52YWx1ZXMoZ3VpZEZhY2lsaXRpZXNNYXApLmZpbHRlcihmID0+ICFmLmlzTXVsdGlQYXJrKS5tYXAoZiA9PiBmLmlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFya0lkcy5wdXNoKHBhcmtJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmtJZHM7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGVmYXVsdEZhY2lsaXR5Um91dGVCeU1lbnVJdGVtcyhtZW51SXRlbXM6IE1lbnVJdGVtW10pIHtcbiAgICBsZXQgbWVudUl0ZW06IE1lbnVJdGVtO1xuICAgIGNvbnN0IGd1aWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZ3VpZCk7XG4gICAgY29uc3QgcGFya0lkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLnBhcmtJZCk7XG5cbiAgICBpZiAoISFndWlkICYmIHBhcmtJZCA+PSAwKSB7XG4gICAgICBtZW51SXRlbSA9IHRoaXMuZ2V0QWN0aXZlTWVudUZhY2lsaXR5KG1lbnVJdGVtcywgcGFya0lkLCBndWlkKTtcbiAgICAgIGlmICghbWVudUl0ZW0pIHtcbiAgICAgICAgbWVudUl0ZW0gPSB0aGlzLmdldEFjdGl2ZU1lbnVGYWNpbGl0eUNoaWxkKG1lbnVJdGVtcywgcGFya0lkLCBndWlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIW1lbnVJdGVtKSB7XG4gICAgICBtZW51SXRlbSA9IHRoaXMuZ2V0Rmlyc3RNZW51SXRlbUZhY2lsaXR5KG1lbnVJdGVtcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbnVJdGVtPy5yb3V0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREZWZhdWx0RmFjaWxpdHlSb3V0ZSgpIHtcbiAgICBjb25zdCBtZW51SXRlbXMgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5tZW51SXRlbXMpO1xuICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRGYWNpbGl0eVJvdXRlQnlNZW51SXRlbXMobWVudUl0ZW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGYWNpbGl0eURpY3Rpb25hcnkkKCk6IE9ic2VydmFibGU8RmFjaWxpdHlEaWN0aW9uYXJ5PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc2VsZWN0KEZhY2lsaXR5U3RhdGUuZmFjaWxpdHlEaWN0aW9uYXJ5KS5waXBlKFxuICAgICAgZmlsdGVyKGZhY2lsaXR5RGljdGlvbmFyeSA9PiBPYmplY3Qua2V5cyhmYWNpbGl0eURpY3Rpb25hcnkpLmxlbmd0aCA+IDApLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGl2ZU1lbnVGYWNpbGl0eSA9IChtZW51SXRlbXM6IE1lbnVJdGVtW10sIHBhcmtJZDogbnVtYmVyLCBndWlkOiBzdHJpbmcpID0+XG4gICAgbWVudUl0ZW1zLmZpbmQobWVudUl0ZW0gPT4gbWVudUl0ZW0ucHJvcGVydGllcy5ndWlkID09PSBndWlkICYmIG1lbnVJdGVtLmlkID09PSBwYXJrSWQpO1xuXG4gIHByaXZhdGUgZ2V0QWN0aXZlTWVudUZhY2lsaXR5Q2hpbGQobWVudUl0ZW1zOiBNZW51SXRlbVtdLCBwYXJrSWQ6IG51bWJlciwgZ3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbXVsdGlGYWNpbGl0eVBhcmVudElEID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLm11bHRpUGFya1BhcmVudElEKTtcbiAgICBjb25zdCBtZW51SXRlbVBhcmVudCA9IG1lbnVJdGVtcy5maW5kKG1lbnVJdGVtID0+IG1lbnVJdGVtLnByb3BlcnRpZXMuZ3VpZCA9PT0gZ3VpZCAmJiBtZW51SXRlbS5pZCA9PT0gbXVsdGlGYWNpbGl0eVBhcmVudElEKTtcbiAgICBjb25zdCBtZW51SXRlbSA9IG1lbnVJdGVtUGFyZW50Py5jaGlsZHJlbi5maW5kKG1lbnVJdGVtID0+IG1lbnVJdGVtLmlkID09PSBwYXJrSWQpO1xuICAgIHJldHVybiBtZW51SXRlbTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rmlyc3RNZW51SXRlbUZhY2lsaXR5KG1lbnVJdGVtczogTWVudUl0ZW1bXSkge1xuICAgIC8vIHdlIHNvcnQgYnkgbmFtZSAodGhlIGRlZmF1bHQgbWVudSBpdGVtIHNvcnQgcHJvcGVydHkpIGFuZCByb3V0ZSB0byB0aGUgZmlyc3QgbWVudSBpdGVtXG4gICAgY29uc3Qgc29ydFByb3BlcnR5ID0gREVGQVVMVF9TT1JUX01FTlUgPT09IFNpZGVOYXZTb3J0QnkucGFya2luZ19sb3Rfc29ydF9ieV9uYW1lX2FfeiA/ICduYW1lJyA6ICdzaXRlY29kZSc7XG4gICAgY29uc3QgZmlyc3RNZW51SXRlbSA9IGNsb25lRGVlcChtZW51SXRlbXMpLnNvcnQoKGEsIGIpID0+IGFbc29ydFByb3BlcnR5XSA+IGJbc29ydFByb3BlcnR5XSA/IDEgOiAtMSlbMF07XG4gICAgcmV0dXJuIGZpcnN0TWVudUl0ZW07XG4gIH1cbn1cbiJdfQ==
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjaWxpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy9mYWNpbGl0eS9mYWNpbGl0eS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUcvRixPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRzNFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQUdqRCxNQUFNLE9BQU8sZUFB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QUMsQ0FBQyxVQUFVLENBQUM7UUFDNUcsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RyxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDOytHQXRVVSxlQUFlO21IQUFmLGVBQWU7OzRGQUFmLGVBQWU7a0JBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaWx0ZXIsIGZpcnN0LCBtYXAsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVOR0xJU0hfTEFOR1VBR0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZ2xvYmFsLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBTZWFyY2hGYWNpbGl0aWVzTW9kZSB9IGZyb20gJy4uLy4uL2VudW1zL3NlYXJjaC1mYWNpbGl0eS1tb2RlLmVudW0nO1xuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL21lbnUtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvblR5cGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBGYWNpbGl0eVRyZWVEdG8sIFBhcmtCcmFuY2hUeXBlIH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9pZGVudGl0eS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgRmFjaWxpdHlEdG8gfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L3JwYy1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uVHlwZVN1cHBvcnRlZFZlcnNpb25EaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vc3RhdGljLWZpbGVzJztcbmltcG9ydCB7IE51bWJlck1hcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xhbmcudXRpbCc7XG5pbXBvcnQgeyBpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3VwcG9ydC12ZXJzaW9uLnV0aWwnO1xuaW1wb3J0IHsgU2lkZU5hdlNvcnRCeSB9IGZyb20gJy4uL3NpZGVuYXYvc2lkZW5hdi1zb3J0LmVudW0nO1xuaW1wb3J0IHsgREVGQVVMVF9TT1JUX01FTlUsIFNpZGVuYXZTdGF0ZSB9IGZyb20gJy4uL3NpZGVuYXYvc2lkZW5hdi5zdGF0ZSc7XG5pbXBvcnQgeyBGYWNpbGl0eURpY3Rpb25hcnkgfSBmcm9tICcuL2ZhY2lsaXR5LW1vZGFsJztcbmltcG9ydCB7IEZhY2lsaXR5V2l0aEd1aWQgfSBmcm9tICcuL2ZhY2lsaXR5LXdpdGgtZ3VpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbiB9IGZyb20gJy4vZmFjaWxpdHkuYWN0aW9ucyc7XG5pbXBvcnQgeyBGYWNpbGl0eVN0YXRlIH0gZnJvbSAnLi9mYWNpbGl0eS5zdGF0ZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGYWNpbGl0eVNlcnZpY2Uge1xuXG4gIGdldCBsb2FkaW5nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZSwgcHJpdmF0ZSBzdG9yZTogU3RvcmUpIHtcbiAgfVxuXG4gIGlzUGFyZW50ID0gKGZhY2lsaXR5OiBGYWNpbGl0eVRyZWVEdG8pID0+IHRydWU7XG4gIGlzQ2hpbGRyZW4gPSAoZmFjaWxpdHk6IEZhY2lsaXR5VHJlZUR0bykgPT4gdHJ1ZTtcbiAgaXNQYXJlbnRPckNoaWxkID0gKGZhY2lsaXR5OiBGYWNpbGl0eVRyZWVEdG8pID0+IHRoaXMuaXNDaGlsZHJlbihmYWNpbGl0eSkgfHwgdGhpcy5pc1BhcmVudChmYWNpbGl0eSk7XG4gIGlzQ2hpbGQgPSAoZmFjaWxpdHk6IEZhY2lsaXR5VHJlZUR0bykgPT4gZmFjaWxpdHkudHlwZSA9PT0gUGFya0JyYW5jaFR5cGUuUGFyaztcblxuICBoYXNTeXN0ZW1BZG1pblBlcm1pc3Npb25zID0gKCkgPT4ge1xuICAgIGNvbnN0IGZlYXR1cmVQZXJtaXNzaW9ucyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5mZWF0dXJlUGVybWlzc2lvbnMpO1xuICAgIHJldHVybiBmZWF0dXJlUGVybWlzc2lvbnM/LnNvbWUocCA9PiBwID09PSBQZXJtaXNzaW9uVHlwZS5PcGVyYXRpb25hbEFkbWluIHx8IHAgPT09IFBlcm1pc3Npb25UeXBlLlN5c3RlbUFkbWluKTtcbiAgfTtcblxuICBoYXNQZXJtaXNzaW9uVHlwZXNCeVBhcmsgPSAocGVybWlzc2lvblR5cGVzOiBQZXJtaXNzaW9uVHlwZVtdLCBndWlkOiBzdHJpbmcsIHBhcmtJZDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgY29uc3QgZmVhdHVyZVBlcm1pc3Npb25zID0gZmFjaWxpdHlEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF0uZmVhdHVyZVBlcm1pc3Npb25zO1xuICAgIGNvbnN0IHNwYXJrVmVyc2lvbiA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoKHsgc21hcnRwYXJrOiB7IHZlcnNpb25zIH0gfSkgPT4gdmVyc2lvbnNbZ3VpZF0pO1xuXG4gICAgcmV0dXJuIHBlcm1pc3Npb25UeXBlcy5yZWR1Y2UoKGFjYywgcGVybWlzc2lvblR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHBlcm1pc3Npb25TdXBwb3J0VmVyc2lvbiA9IFBlcm1pc3Npb25UeXBlU3VwcG9ydGVkVmVyc2lvbkRpY3Rpb25hcnlbcGVybWlzc2lvblR5cGVdO1xuICAgICAgaWYgKCFwZXJtaXNzaW9uU3VwcG9ydFZlcnNpb24pIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBQZXJtaXNzaW9uICR7cGVybWlzc2lvblR5cGV9IHZlcnNpb24gc3VwcG9ydCBpcyBtaXNzaW5nIGluIFBlcm1pc3Npb25UeXBlU3VwcG9ydGVkVmVyc2lvbkRpY3Rpb25hcnkgZmlsZWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc1ZlcnNpb25TdXBwb3J0ZWQgPSBpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsKHNwYXJrVmVyc2lvbiwgcGVybWlzc2lvblN1cHBvcnRWZXJzaW9uKTtcbiAgICAgIGFjY1twZXJtaXNzaW9uVHlwZV0gPSBpc1ZlcnNpb25TdXBwb3J0ZWQgJiYgZmVhdHVyZVBlcm1pc3Npb25zLmluY2x1ZGVzKHBlcm1pc3Npb25UeXBlKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgeyBba2V5OiBzdHJpbmddOiBib29sZWFuOyB9KTtcbiAgfTtcblxuICBoYXNQZXJtaXNzaW9uVHlwZUJ5UGFyayA9IChwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUsIGd1aWQ6IHN0cmluZywgcGFya0lkOiBudW1iZXIpID0+IHtcbiAgICBsZXQgaGFzUGVybWlzc2lvbiA9IGZhbHNlO1xuICAgIGxldCBpc1ZlcnNpb25TdXBwb3J0ZWQgPSB0aGlzLmlzVmVyc2lvblN1cHBvcnRlZChwZXJtaXNzaW9uVHlwZSwgZ3VpZCk7XG4gICAgaWYgKGlzVmVyc2lvblN1cHBvcnRlZCkge1xuICAgICAgY29uc3QgZmFjaWxpdHlEaWN0aW9uYXJ5ID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmZhY2lsaXR5RGljdGlvbmFyeSk7XG4gICAgICBjb25zdCBmZWF0dXJlUGVybWlzc2lvbnMgPSBmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF1bcGFya0lkXS5mZWF0dXJlUGVybWlzc2lvbnM7XG4gICAgICBoYXNQZXJtaXNzaW9uID0gZmVhdHVyZVBlcm1pc3Npb25zPy5pbmNsdWRlcyhwZXJtaXNzaW9uVHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc1Blcm1pc3Npb247XG4gIH07XG5cbiAgaGFzUGVybWlzc2lvblR5cGUkID0gKHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZSkgPT5cbiAgICB0aGlzLmlzVmVyc2lvblN1cHBvcnRlZCQocGVybWlzc2lvblR5cGUpLnBpcGUoc3dpdGNoTWFwKGlzVmVyc2lvblN1cHBvcnRlZCA9PiB7XG4gICAgICByZXR1cm4gIWlzVmVyc2lvblN1cHBvcnRlZCA/IG9mKGZhbHNlKSA6IHRoaXMuc3RvcmUuc2VsZWN0KEZhY2lsaXR5U3RhdGUuZmVhdHVyZVBlcm1pc3Npb25zKS5waXBlKG1hcChmZWF0dXJlUGVybWlzc2lvbnMgPT5cbiAgICAgICAgZmVhdHVyZVBlcm1pc3Npb25zPy5pbmNsdWRlcyhwZXJtaXNzaW9uVHlwZSkpKTtcbiAgICB9KSk7XG5cbiAgaXNWZXJzaW9uU3VwcG9ydGVkJCA9IChwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUpID0+XG4gICAgdGhpcy5zdG9yZS5zZWxlY3QoRmFjaWxpdHlTdGF0ZS5ndWlkKS5waXBlKGZpbHRlcihndWlkID0+ICEhZ3VpZCksIG1hcChndWlkID0+IHRoaXMuaXNWZXJzaW9uU3VwcG9ydGVkKHBlcm1pc3Npb25UeXBlLCBndWlkKSkpO1xuXG4gIGhhc1Blcm1pc3Npb25UeXBlU2lnbmFsKHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZSkge1xuICAgIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XG4gICAgICBsZXQgaXNQZXJtaXR0ZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGlzVmVyc2lvblN1cHBvcnRlZCA9IHRoaXMuaXNWZXJzaW9uU3VwcG9ydGVkU2lnbmFsKHBlcm1pc3Npb25UeXBlKSgpO1xuICAgICAgaWYgKGlzVmVyc2lvblN1cHBvcnRlZCkge1xuICAgICAgICBjb25zdCBmZWF0dXJlUGVybWlzc2lvbnMgPSB0aGlzLnN0b3JlLnNlbGVjdFNpZ25hbChGYWNpbGl0eVN0YXRlLmZlYXR1cmVQZXJtaXNzaW9ucykoKTtcbiAgICAgICAgaXNQZXJtaXR0ZWQgPSAhIWZlYXR1cmVQZXJtaXNzaW9ucz8uaW5jbHVkZXMocGVybWlzc2lvblR5cGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXNQZXJtaXR0ZWQ7XG4gICAgfSk7XG4gIH1cbiAgICBcbiAgaXNWZXJzaW9uU3VwcG9ydGVkU2lnbmFsKHBlcm1pc3Npb25UeXBlOiBQZXJtaXNzaW9uVHlwZSkge1xuICAgIHJldHVybiBjb21wdXRlZCgoKSA9PiB7XG4gICAgICBjb25zdCBndWlkID0gdGhpcy5zdG9yZS5zZWxlY3RTaWduYWwoRmFjaWxpdHlTdGF0ZS5ndWlkKSgpO1xuICAgICAgcmV0dXJuICEhZ3VpZCAmJiB0aGlzLmlzVmVyc2lvblN1cHBvcnRlZChwZXJtaXNzaW9uVHlwZSwgZ3VpZCk7XG4gICAgfSk7XG4gIH1cblxuICBpc1ZlcnNpb25TdXBwb3J0ZWQgPSAocGVybWlzc2lvblR5cGU6IFBlcm1pc3Npb25UeXBlLCBndWlkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBzcGFya1ZlcnNpb24gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KCh7IHNtYXJ0cGFyazogeyB2ZXJzaW9ucyB9IH0pID0+IHZlcnNpb25zW2d1aWRdKTtcbiAgICBjb25zdCBwZXJtaXNzaW9uU3VwcG9ydFZlcnNpb24gPSBQZXJtaXNzaW9uVHlwZVN1cHBvcnRlZFZlcnNpb25EaWN0aW9uYXJ5W3Blcm1pc3Npb25UeXBlXTtcbiAgICBpZiAoIXBlcm1pc3Npb25TdXBwb3J0VmVyc2lvbikge1xuICAgICAgY29uc29sZS53YXJuKGBQZXJtaXNzaW9uICR7cGVybWlzc2lvblR5cGV9IHZlcnNpb24gc3VwcG9ydCBpcyBtaXNzaW5nIGluIFBlcm1pc3Npb25UeXBlU3VwcG9ydGVkVmVyc2lvbkRpY3Rpb25hcnkgZmlsZWApO1xuICAgIH1cblxuICAgIHJldHVybiBpc1ZlcnNpb25HcmVhdGVyVGhhbkVxdWFsKHNwYXJrVmVyc2lvbiwgcGVybWlzc2lvblN1cHBvcnRWZXJzaW9uKTtcbiAgfTtcblxuICBoYXNQZXJtaXNzaW9uVHlwZSA9IChwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUpID0+IHtcbiAgICBjb25zdCBndWlkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmd1aWQpO1xuICAgIGNvbnN0IHNwYXJrVmVyc2lvbiA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoKHsgc21hcnRwYXJrOiB7IHZlcnNpb25zIH0gfSkgPT4gdmVyc2lvbnNbZ3VpZF0pO1xuICAgIGNvbnN0IHBlcm1pc3Npb25TdXBwb3J0VmVyc2lvbiA9IFBlcm1pc3Npb25UeXBlU3VwcG9ydGVkVmVyc2lvbkRpY3Rpb25hcnlbcGVybWlzc2lvblR5cGVdO1xuICAgIGlmICghcGVybWlzc2lvblN1cHBvcnRWZXJzaW9uKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFBlcm1pc3Npb24gJHtwZXJtaXNzaW9uVHlwZX0gdmVyc2lvbiBzdXBwb3J0IGlzIG1pc3NpbmcgaW4gUGVybWlzc2lvblR5cGVTdXBwb3J0ZWRWZXJzaW9uRGljdGlvbmFyeWApO1xuICAgIH1cblxuICAgIGNvbnN0IGlzVmVyc2lvblN1cHBvcnRlZCA9IGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwoc3BhcmtWZXJzaW9uLCBwZXJtaXNzaW9uU3VwcG9ydFZlcnNpb24pO1xuICAgIGNvbnN0IGZlYXR1cmVQZXJtaXNzaW9ucyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5mZWF0dXJlUGVybWlzc2lvbnMpO1xuICAgIHJldHVybiBpc1ZlcnNpb25TdXBwb3J0ZWQgJiYgZmVhdHVyZVBlcm1pc3Npb25zPy5pbmNsdWRlcyhwZXJtaXNzaW9uVHlwZSk7XG4gIH07XG5cbiAgZ2V0RmFjaWxpdGllcyhmYWNpbGl0eVRyZWU6IEZhY2lsaXR5VHJlZUR0b1tdLCBmaWx0ZXI6IChGYWNpbGl0eVRyZWVEdG8pID0+IGJvb2xlYW4gPSBudWxsKTogRmFjaWxpdHlUcmVlRHRvW10ge1xuICAgIGNvbnN0IGZhY2lsaXRpZXM6IEZhY2lsaXR5VHJlZUR0b1tdID0gW107XG4gICAgY29uc3QgaXNDbG91ZEFwcCA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuQ2xvdWQ7XG5cbiAgICBmYWNpbGl0eVRyZWUuZm9yRWFjaChmID0+IHtcbiAgICAgIGNvbnN0IGZhY2lsaXR5Q29weSA9IG5ldyBGYWNpbGl0eVRyZWVEdG8oZik7XG4gICAgICBpZiAoaXNDbG91ZEFwcCkge1xuICAgICAgICBmYWNpbGl0eUNvcHkuaWQgPSBmLmNsb3VkSWQ7XG4gICAgICB9XG4gICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZmFjaWxpdHlDb3B5KSkge1xuICAgICAgICBmYWNpbGl0aWVzLnB1c2goZmFjaWxpdHlDb3B5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmYWNpbGl0aWVzO1xuICB9XG5cbiAgZXh0cmFjdEZhY2lsaXR5TWFwKGZhY2lsaXR5VHJlZTogRmFjaWxpdHlUcmVlRHRvW10pIHtcbiAgICBjb25zdCBpc0Nsb3VkQXBwID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5DbG91ZDtcbiAgICBjb25zdCBmYWNpbGl0aWVzTWFwID0gbmV3IE1hcDxudW1iZXIsIEZhY2lsaXR5VHJlZUR0bz4oKTtcbiAgICB0aGlzLmZsYXRlblRyZWUoZmFjaWxpdHlUcmVlLCBmYWNpbGl0aWVzTWFwLCBpc0Nsb3VkQXBwKTtcbiAgICByZXR1cm4gZmFjaWxpdGllc01hcDtcbiAgfVxuXG4gIHBvcHVsYXRlRmFjaWxpdGllcyhmYWNpbGl0eURpY3Rpb25hcnk6IEZhY2lsaXR5RGljdGlvbmFyeSwgbW9kZTogU2VhcmNoRmFjaWxpdGllc01vZGUsIHNpbmdsZUd1aWREaXNwbGF5OiBzdHJpbmcpOiBGYWNpbGl0eVdpdGhHdWlkW10ge1xuICAgIGNvbnN0IGNsb25lZEZhY2lsaXRpZXMgPSBjbG9uZURlZXAoZmFjaWxpdHlEaWN0aW9uYXJ5KTtcbiAgICBsZXQgZmFjaWxpdGllczogRmFjaWxpdHlXaXRoR3VpZFtdID0gW107XG4gICAgaWYgKCEhc2luZ2xlR3VpZERpc3BsYXkpIHtcbiAgICAgIGZhY2lsaXRpZXMgPSB0aGlzLnBvcHVsYXRlU2luZ2xlR3VpZChjbG9uZWRGYWNpbGl0aWVzW3NpbmdsZUd1aWREaXNwbGF5XSwgbW9kZSwgc2luZ2xlR3VpZERpc3BsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmYWNpbGl0aWVzID0gdGhpcy5wb3B1bGF0ZU11bHRpR3VpZHMoY2xvbmVkRmFjaWxpdGllcywgbW9kZSk7XG4gICAgfVxuXG4gICAgLy8gRmlsdGVyIEluYWN0aXZlIGZhY2lsaXRpZXMgaWYgbmVlZGVkXG4gICAgZmFjaWxpdGllcyA9IGZhY2lsaXRpZXMuZmlsdGVyKGYgPT4ge1xuICAgICAgcmV0dXJuIGYuZGF0YS5hY3RpdmU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmFjaWxpdGllcy5zb3J0KChhLCBiKSA9PiBhLmRhdGEubmFtZS5sb2NhbGVDb21wYXJlKGIuZGF0YS5uYW1lLCBFTkdMSVNIX0xBTkdVQUdFLCB7IG51bWVyaWM6IHRydWUgfSkpO1xuICB9XG5cbiAgZ2V0RmFjaWxpdHlXaXRoR3VpZChmYWNpbGl0aWVzOiBGYWNpbGl0eVdpdGhHdWlkW10sIHBhcmtJZDogbnVtYmVyLCBndWlkOiBzdHJpbmcsIHNob3dOb25lVGV4dDogYm9vbGVhbixcbiAgICBtaW5pbXVtVmVyc2lvblN1cHBvcnQ6IHN0cmluZywgcGVybWlzc2lvblN1cHBvcnQ6IFBlcm1pc3Npb25UeXBlKTogRmFjaWxpdHlXaXRoR3VpZCB7XG4gICAgbGV0IGZhY2lsaXR5VG9TZWxlY3RBc0RlZmF1bHQ6IEZhY2lsaXR5V2l0aEd1aWQ7XG4gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBndWlkIG9yIHBhcmtJZCB3ZSBkb24ndCBzZWxlY3QgYSBkZWZhdWx0IHBhcmtcbiAgICBpZiAoKCEhZ3VpZCAmJiAhIXBhcmtJZCkgfHwgIXNob3dOb25lVGV4dCkge1xuICAgICAgaWYgKCFndWlkICYmICFwYXJrSWQpIHtcbiAgICAgICAgZ3VpZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5ndWlkKTtcbiAgICAgICAgcGFya0lkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLnBhcmtJZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIHNlYXJjaCBmb3IgdGhlIHBhcmsgaXRzZWxmXG4gICAgICBmYWNpbGl0eVRvU2VsZWN0QXNEZWZhdWx0ID0gZmFjaWxpdGllcy5maW5kKGYgPT4gZi5ndWlkID09PSBndWlkICYmIGYuZGF0YS5pZCA9PT0gcGFya0lkKTtcbiAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGEgcGFya1xuICAgICAgLy8gV2UgY2hlY2sgaWYgdGhlIGd1aWQgKyBwYXJrSWQgaXMgZnJvbSBhIHBhcmVudCBwYXJrIHNvIHdlIHNlYXJjaCBmb3IgdGhlIGNoaWxkIHBhcmtcbiAgICAgIGlmICghZmFjaWxpdHlUb1NlbGVjdEFzRGVmYXVsdCkge1xuICAgICAgICBmYWNpbGl0eVRvU2VsZWN0QXNEZWZhdWx0ID0gZmFjaWxpdGllcy5maW5kKGYgPT4gZi5ndWlkID09PSBndWlkICYmIGYuZGF0YS5tdWx0aVBhcmtQYXJlbnRJRCA9PT0gcGFya0lkKTtcbiAgICAgIH1cbiAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGEgcGFya1xuICAgICAgLy8gV2UgY2hlY2sgaWYgdGhlIGd1aWQgKyBwYXJrSWQgaXMgZnJvbSBhIGNoaWxkIHBhcmsgc28gd2Ugc2VhcmNoIGZvciB0aGUgcGFyZW50IHBhcmtcbiAgICAgIGlmICghZmFjaWxpdHlUb1NlbGVjdEFzRGVmYXVsdCkge1xuICAgICAgICBjb25zdCBwYXJlbnRQYXJrSWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUubXVsdGlQYXJrUGFyZW50SUQpO1xuICAgICAgICBmYWNpbGl0eVRvU2VsZWN0QXNEZWZhdWx0ID0gZmFjaWxpdGllcy5maW5kKGYgPT4gZi5ndWlkID09PSBndWlkICYmIGYuZGF0YS5pZCA9PT0gcGFyZW50UGFya0lkKTtcbiAgICAgICAgcGFya0lkID0gZmFjaWxpdHlUb1NlbGVjdEFzRGVmYXVsdCA/IHBhcmVudFBhcmtJZCA6IHBhcmtJZDtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYSBwYXJrIG9yIHRoZSBwYXJrIGlzIE5PVCBzdXBwb3J0ZWQgb3IgTk9UIHBlcm1pdHRlZCwgdHJ5IHRvIGZpbmQgdGhlIGZpcnN0IHN1cHBvcnRlZCBmYWNpbGl0eVxuICAgICAgaWYgKCFmYWNpbGl0eVRvU2VsZWN0QXNEZWZhdWx0IHx8ICF0aGlzLmlzRmFjaWxpdHlWZXJzaW9uU3VwcG9ydGVkKGZhY2lsaXR5VG9TZWxlY3RBc0RlZmF1bHQsIG1pbmltdW1WZXJzaW9uU3VwcG9ydCkgfHxcbiAgICAgICAgIXRoaXMuaXNGYWNpbGl0eVBlcm1pc3Npb25TdXBwb3J0ZWQoZmFjaWxpdHlUb1NlbGVjdEFzRGVmYXVsdCwgcGVybWlzc2lvblN1cHBvcnQpKSB7XG4gICAgICAgIGZhY2lsaXR5VG9TZWxlY3RBc0RlZmF1bHQgPSBmYWNpbGl0aWVzLmZpbmQoZiA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXNGYWNpbGl0eVZlcnNpb25TdXBwb3J0ZWQoZiwgbWluaW11bVZlcnNpb25TdXBwb3J0KSAmJiB0aGlzLmlzRmFjaWxpdHlQZXJtaXNzaW9uU3VwcG9ydGVkKGYsIHBlcm1pc3Npb25TdXBwb3J0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhY2lsaXR5VG9TZWxlY3RBc0RlZmF1bHQ7XG4gIH1cblxuICBpc0ZhY2lsaXR5VmVyc2lvblN1cHBvcnRlZChmYWNpbGl0eTogRmFjaWxpdHlXaXRoR3VpZCwgbWluaW11bVZlcnNpb25TdXBwb3J0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pc0d1aWRWZXJzaW9uU3VwcG9ydGVkKGZhY2lsaXR5Lmd1aWQsIG1pbmltdW1WZXJzaW9uU3VwcG9ydCk7XG4gIH1cblxuICBpc0ZhY2lsaXR5UGVybWlzc2lvblN1cHBvcnRlZChmYWNpbGl0eTogRmFjaWxpdHlXaXRoR3VpZCwgcGVybWlzc2lvbnNUeXBlOiBQZXJtaXNzaW9uVHlwZSkge1xuICAgIHJldHVybiAhUGVybWlzc2lvblR5cGVbcGVybWlzc2lvbnNUeXBlXSB8fCB0aGlzLmhhc1Blcm1pc3Npb25UeXBlQnlQYXJrKHBlcm1pc3Npb25zVHlwZSwgZmFjaWxpdHkuZ3VpZCwgZmFjaWxpdHkuZGF0YS5pZCk7XG4gIH1cblxuICBpc0d1aWRWZXJzaW9uU3VwcG9ydGVkKGd1aWQ6IHN0cmluZywgbWluaW11bVZlcnNpb25TdXBwb3J0OiBzdHJpbmcpIHtcbiAgICBjb25zdCBzcGFya1ZlcnNpb24gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KCh7IHNtYXJ0cGFyazogeyB2ZXJzaW9ucyB9IH0pID0+IHZlcnNpb25zW2d1aWRdKTtcbiAgICByZXR1cm4gIW1pbmltdW1WZXJzaW9uU3VwcG9ydCB8fCAoc3BhcmtWZXJzaW9uICYmIGlzVmVyc2lvbkdyZWF0ZXJUaGFuRXF1YWwoc3BhcmtWZXJzaW9uLCBtaW5pbXVtVmVyc2lvblN1cHBvcnQpKTtcbiAgfVxuXG4gIGNsZWFySW5hY3RpdmVTZWxlY3RlZFBhcmsoKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgQ2xlYXJJbmFjdGl2ZVNlbGVjdGVkUGFya0FjdGlvbigpKTtcbiAgfVxuXG4gIHByaXZhdGUgcG9wdWxhdGVNdWx0aUd1aWRzKGZhY2lsaXR5RGljdGlvbmFyeTogRmFjaWxpdHlEaWN0aW9uYXJ5LCBtb2RlOiBTZWFyY2hGYWNpbGl0aWVzTW9kZSk6IEZhY2lsaXR5V2l0aEd1aWRbXSB7XG4gICAgY29uc3QgZmFjaWxpdGllczogRmFjaWxpdHlXaXRoR3VpZFtdID0gW107XG4gICAgZm9yIChjb25zdCBndWlkIG9mIE9iamVjdC5rZXlzKGZhY2lsaXR5RGljdGlvbmFyeSkpIHtcbiAgICAgIGZhY2lsaXRpZXMucHVzaCguLi50aGlzLnBvcHVsYXRlU2luZ2xlR3VpZChmYWNpbGl0eURpY3Rpb25hcnlbZ3VpZF0sIG1vZGUsIGd1aWQpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhY2lsaXRpZXM7XG4gIH1cblxuICBwcml2YXRlIHBvcHVsYXRlU2luZ2xlR3VpZChsb3RzTWFwOiBOdW1iZXJNYXA8RmFjaWxpdHlEdG8+LCBtb2RlOiBTZWFyY2hGYWNpbGl0aWVzTW9kZSwgZ3VpZDogc3RyaW5nKTogRmFjaWxpdHlXaXRoR3VpZFtdIHtcbiAgICBjb25zdCBmYWNpbGl0aWVzOiBGYWNpbGl0eVdpdGhHdWlkW10gPSBbXTtcbiAgICBjb25zdCBsb3RzOiBGYWNpbGl0eUR0b1tdID0gT2JqZWN0LnZhbHVlcyhsb3RzTWFwKTtcbiAgICBjb25zdCBwYXJlbnRQYXJrOiBGYWNpbGl0eUR0byA9IGxvdHMuZmluZChsID0+IGwuaXNNdWx0aVBhcmspO1xuXG4gICAgZm9yIChjb25zdCBsb3Qgb2YgbG90cykge1xuICAgICAgaWYgKG1vZGUgPT09IFNlYXJjaEZhY2lsaXRpZXNNb2RlLm9ubHlQYXJlbnRzICYmIGxvdC5tdWx0aVBhcmtQYXJlbnRJRCA9PT0gMCB8fFxuICAgICAgICBtb2RlID09PSBTZWFyY2hGYWNpbGl0aWVzTW9kZS5vbmx5Q2hpbGRyZW4gJiYgbG90LmlzTXVsdGlQYXJrID09PSAwIHx8XG4gICAgICAgIG1vZGUgPT09IFNlYXJjaEZhY2lsaXRpZXNNb2RlLnBhcmVudHNXaXRoQ2hpbGRyZW4pIHtcbiAgICAgICAgbG90Lm5hbWUgPSAhIXBhcmVudFBhcmsgJiYgIWxvdC5pc011bHRpUGFyayA/IGAke3BhcmVudFBhcmsubmFtZX0gLSAke2xvdC5uYW1lfWAgOiBgJHtsb3QubmFtZX1gO1xuICAgICAgICBmYWNpbGl0aWVzLnB1c2goeyBndWlkLCBkYXRhOiBsb3QgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhY2lsaXRpZXM7XG4gIH1cblxuICBwcml2YXRlIGZsYXRlblRyZWUoZmFjaWxpdHlUcmVlOiBGYWNpbGl0eVRyZWVEdG9bXSwgZmFjaWxpdGllc01hcDogTWFwPG51bWJlciwgRmFjaWxpdHlUcmVlRHRvPiwgaXNDbG91ZEFwcDogYm9vbGVhbikge1xuICAgIGZhY2lsaXR5VHJlZS5mb3JFYWNoKGZ0ID0+IHtcbiAgICAgIGlmIChmdC5jaGlsZHJlbikge1xuICAgICAgICBjb25zdCBmbGF0Tm9kZTogRmFjaWxpdHlUcmVlRHRvID0gRmFjaWxpdHlUcmVlRHRvLmZyb21KUyhmdCk7XG4gICAgICAgIHRoaXMuYWRkVG9NYXAoaXNDbG91ZEFwcCwgZmFjaWxpdGllc01hcCwgZmxhdE5vZGUpO1xuICAgICAgICB0aGlzLmZsYXRlblRyZWUoZnQuY2hpbGRyZW4sIGZhY2lsaXRpZXNNYXAsIGlzQ2xvdWRBcHApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnQuY2hpbGRyZW4gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuYWRkVG9NYXAoaXNDbG91ZEFwcCwgZmFjaWxpdGllc01hcCwgZnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRUb01hcChpc0Nsb3VkQXBwOiBib29sZWFuLCBmYWNpbGl0aWVzTWFwOiBNYXA8bnVtYmVyLCBGYWNpbGl0eVRyZWVEdG8+LCBmdDogRmFjaWxpdHlUcmVlRHRvKSB7XG4gICAgaWYgKGlzQ2xvdWRBcHApIHtcbiAgICAgIGZhY2lsaXRpZXNNYXAuc2V0KGZ0LmNsb3VkSWQsIGZ0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmFjaWxpdGllc01hcC5zZXQoZnQuaWQsIGZ0KTtcbiAgICB9XG4gIH1cblxuICBnZXRQYXJrSWRzKCk6IG51bWJlcltdIHtcbiAgICBsZXQgZ3VpZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5ndWlkKTtcbiAgICBsZXQgcGFya0lkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLnBhcmtJZCk7XG4gICAgbGV0IHBhcmtJZHMgPSB0aGlzLmdldFBhcmtzKHBhcmtJZCwgZ3VpZCk7XG4gICAgcmV0dXJuIHBhcmtJZHM7XG4gIH1cblxuICBpbml0U2VsZWN0ZWRQYXJrKGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge1xuICAgIHJldHVybiBhY3RpdmF0ZWRSb3V0ZS5wYXJhbXMucGlwZShcbiAgICAgIGZpbHRlcihwYXJhbXMgPT4gT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGggPiAwKSxcbiAgICAgIHN3aXRjaE1hcChwYXJhbXMgPT4ge1xuICAgICAgICBsZXQgZ3VpZDogc3RyaW5nO1xuICAgICAgICBjb25zdCBwYXJrSWQgPSArcGFyYW1zLnBhcmtJZDtcbiAgICAgICAgY29uc3QgdGliYUtleSA9IHBhcmFtcy50aWJhS2V5O1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoRmFjaWxpdHlTdGF0ZS50aWJhS2V5cykucGlwZShcbiAgICAgICAgICBmaWx0ZXIodGliYUtleXMgPT4gT2JqZWN0LmtleXModGliYUtleXMpLmxlbmd0aCA+IDApLFxuICAgICAgICAgIG1hcCh0aWJhS2V5cyA9PiB7XG4gICAgICAgICAgICBndWlkID0gT2JqZWN0LmtleXModGliYUtleXMpW3RpYmFLZXldO1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3VpZCwgcGFya0lkIH07XG4gICAgICAgICAgfSkpO1xuICAgICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXJrcyhwYXJrSWQ6IG51bWJlciwgZ3VpZDogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmtJZHMgPSBbXTtcbiAgICBjb25zdCBmYWNpbGl0eURpY3Rpb25hcnkgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZmFjaWxpdHlEaWN0aW9uYXJ5KTtcbiAgICBjb25zdCBndWlkRmFjaWxpdGllc01hcCA9IGZhY2lsaXR5RGljdGlvbmFyeVtndWlkXTtcblxuICAgIGlmIChndWlkRmFjaWxpdGllc01hcCAmJiBndWlkRmFjaWxpdGllc01hcFtwYXJrSWRdPy5pc011bHRpUGFyaykge1xuICAgICAgcGFya0lkcyA9IE9iamVjdC52YWx1ZXMoZ3VpZEZhY2lsaXRpZXNNYXApLmZpbHRlcihmID0+ICFmLmlzTXVsdGlQYXJrKS5tYXAoZiA9PiBmLmlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFya0lkcy5wdXNoKHBhcmtJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmtJZHM7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGVmYXVsdEZhY2lsaXR5Um91dGVCeU1lbnVJdGVtcyhtZW51SXRlbXM6IE1lbnVJdGVtW10pIHtcbiAgICBsZXQgbWVudUl0ZW06IE1lbnVJdGVtO1xuICAgIGNvbnN0IGd1aWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZ3VpZCk7XG4gICAgY29uc3QgcGFya0lkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLnBhcmtJZCk7XG5cbiAgICBpZiAoISFndWlkICYmIHBhcmtJZCA+PSAwKSB7XG4gICAgICBtZW51SXRlbSA9IHRoaXMuZ2V0QWN0aXZlTWVudUZhY2lsaXR5KG1lbnVJdGVtcywgcGFya0lkLCBndWlkKTtcbiAgICAgIGlmICghbWVudUl0ZW0pIHtcbiAgICAgICAgbWVudUl0ZW0gPSB0aGlzLmdldEFjdGl2ZU1lbnVGYWNpbGl0eUNoaWxkKG1lbnVJdGVtcywgcGFya0lkLCBndWlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIW1lbnVJdGVtKSB7XG4gICAgICBtZW51SXRlbSA9IHRoaXMuZ2V0Rmlyc3RNZW51SXRlbUZhY2lsaXR5KG1lbnVJdGVtcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbnVJdGVtPy5yb3V0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREZWZhdWx0RmFjaWxpdHlSb3V0ZSgpIHtcbiAgICBjb25zdCBtZW51SXRlbXMgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5tZW51SXRlbXMpO1xuICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRGYWNpbGl0eVJvdXRlQnlNZW51SXRlbXMobWVudUl0ZW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGYWNpbGl0eURpY3Rpb25hcnkkKCk6IE9ic2VydmFibGU8RmFjaWxpdHlEaWN0aW9uYXJ5PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuc2VsZWN0KEZhY2lsaXR5U3RhdGUuZmFjaWxpdHlEaWN0aW9uYXJ5KS5waXBlKFxuICAgICAgZmlsdGVyKGZhY2lsaXR5RGljdGlvbmFyeSA9PiBPYmplY3Qua2V5cyhmYWNpbGl0eURpY3Rpb25hcnkpLmxlbmd0aCA+IDApLFxuICAgICAgZmlyc3QoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGl2ZU1lbnVGYWNpbGl0eSA9IChtZW51SXRlbXM6IE1lbnVJdGVtW10sIHBhcmtJZDogbnVtYmVyLCBndWlkOiBzdHJpbmcpID0+XG4gICAgbWVudUl0ZW1zLmZpbmQobWVudUl0ZW0gPT4gbWVudUl0ZW0ucHJvcGVydGllcz8uZ3VpZCA9PT0gZ3VpZCAmJiBtZW51SXRlbS5pZCA9PT0gcGFya0lkKTtcblxuICBwcml2YXRlIGdldEFjdGl2ZU1lbnVGYWNpbGl0eUNoaWxkKG1lbnVJdGVtczogTWVudUl0ZW1bXSwgcGFya0lkOiBudW1iZXIsIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG11bHRpRmFjaWxpdHlQYXJlbnRJRCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5tdWx0aVBhcmtQYXJlbnRJRCk7XG4gICAgY29uc3QgbWVudUl0ZW1QYXJlbnQgPSBtZW51SXRlbXMuZmluZChtZW51SXRlbSA9PiBtZW51SXRlbS5wcm9wZXJ0aWVzPy5ndWlkID09PSBndWlkICYmIG1lbnVJdGVtLmlkID09PSBtdWx0aUZhY2lsaXR5UGFyZW50SUQpO1xuICAgIGNvbnN0IG1lbnVJdGVtID0gbWVudUl0ZW1QYXJlbnQ/LmNoaWxkcmVuPy5maW5kKG1lbnVJdGVtID0+IG1lbnVJdGVtLmlkID09PSBwYXJrSWQpO1xuICAgIHJldHVybiBtZW51SXRlbTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rmlyc3RNZW51SXRlbUZhY2lsaXR5KG1lbnVJdGVtczogTWVudUl0ZW1bXSkge1xuICAgIC8vIHdlIHNvcnQgYnkgbmFtZSAodGhlIGRlZmF1bHQgbWVudSBpdGVtIHNvcnQgcHJvcGVydHkpIGFuZCByb3V0ZSB0byB0aGUgZmlyc3QgbWVudSBpdGVtXG4gICAgY29uc3Qgc29ydFByb3BlcnR5ID0gREVGQVVMVF9TT1JUX01FTlUgPT09IFNpZGVOYXZTb3J0QnkucGFya2luZ19sb3Rfc29ydF9ieV9uYW1lX2FfeiA/ICduYW1lJyA6ICdzaXRlY29kZSc7XG4gICAgY29uc3QgZmlyc3RNZW51SXRlbSA9IGNsb25lRGVlcChtZW51SXRlbXMpLnNvcnQoKGEsIGIpID0+IGFbc29ydFByb3BlcnR5XSA+IGJbc29ydFByb3BlcnR5XSA/IDEgOiAtMSlbMF07XG4gICAgcmV0dXJuIGZpcnN0TWVudUl0ZW07XG4gIH1cbn1cbiJdfQ==
|