@sumaris-net/ngx-components 0.25.18 → 0.25.19
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/bundles/sumaris-net.ngx-components.umd.js +333 -286
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/esm2015/src/app/core/form/entity-editor.class.js +5 -2
- package/esm2015/src/app/core/table/entities-table-datasource.class.js +5 -7
- package/esm2015/src/app/core/table/table.class.js +22 -15
- package/fesm2015/sumaris-net.ngx-components.js +301 -278
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
- package/src/app/core/form/entity-editor.class.d.ts +1 -0
- package/src/app/core/table/table.class.d.ts +1 -0
- package/sumaris-net.ngx-components.metadata.json +1 -1
|
@@ -199,7 +199,7 @@ export class AppEntityEditor extends AppTabEditor {
|
|
|
199
199
|
const idChanged = isNotNil(data.id)
|
|
200
200
|
&& this.previousDataId !== undefined // Ignore if first loading (=undefined)
|
|
201
201
|
&& this.previousDataId !== data.id;
|
|
202
|
-
opts = Object.assign({ updateRoute: this._autoUpdateRoute && idChanged && !this.loading, openTabIndex: this._autoOpenNextTab && idChanged &&
|
|
202
|
+
opts = Object.assign({ updateRoute: this._autoUpdateRoute && idChanged && !this.loading, openTabIndex: this._autoOpenNextTab && idChanged && this.computeNextTabIndex() }, opts);
|
|
203
203
|
this.data = data;
|
|
204
204
|
this.previousDataId = data.id || null;
|
|
205
205
|
const promiseOrVoid = this.setValue(data);
|
|
@@ -455,6 +455,9 @@ export class AppEntityEditor extends AppTabEditor {
|
|
|
455
455
|
this.error = userMessage;
|
|
456
456
|
}
|
|
457
457
|
/* -- protected methods -- */
|
|
458
|
+
computeNextTabIndex() {
|
|
459
|
+
return this.selectedTabIndex + 1 < this.tabCount ? this.selectedTabIndex + 1 : undefined;
|
|
460
|
+
}
|
|
458
461
|
unload() {
|
|
459
462
|
return __awaiter(this, void 0, void 0, function* () {
|
|
460
463
|
this.form.reset();
|
|
@@ -594,4 +597,4 @@ AppEntityEditor.ctorParameters = () => [
|
|
|
594
597
|
{ type: undefined },
|
|
595
598
|
{ type: AppEditorOptions, decorators: [{ type: Optional }] }
|
|
596
599
|
];
|
|
597
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWVkaXRvci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2VudGl0eS1lZGl0b3IuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixRQUFRLEVBR1IsUUFBUSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUUsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBMEIsb0JBQW9CLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNqRyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFJdEMsT0FBTyxFQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRSxPQUFPLEVBQUMsS0FBSyxFQUFFLGVBQWUsRUFBcUIsTUFBTSx3QkFBd0IsQ0FBQztBQUVsRixPQUFPLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEYsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ25FLE9BQU8sRUFB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QUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxlQUFlLEVBQUU7WUFDdkUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQWUsQ0FBQztZQUN4QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRWUsV0FBVyxDQUFDLElBQU8sRUFBRSxXQUFnQjs7WUFDbkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RSxNQUFNLFFBQVEsR0FBVSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBYSxDQUFDO1lBQzdGLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUM3QixPQUFPLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO29CQUMxQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2lCQUM5QixDQUFDLENBQUM7YUFDSjtpQkFDSTtnQkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLDZDQUE2QyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ25FO1FBQ0gsQ0FBQztLQUFBOzs7WUExckJGLFNBQVM7OztZQWhEUixRQUFROzs7WUE0SGdCLGdCQUFnQix1QkFBckMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBEaXJlY3RpdmUsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7QWxlcnRDb250cm9sbGVyLCBUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge01vbWVudH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7QWRkVG9QYWdlSGlzdG9yeU9wdGlvbnMsIExvY2FsU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7ZmlsdGVyfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0VudGl0eX0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7VXNhZ2VNb2RlfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQge0Zvcm1Hcm91cH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtBcHBUYWJFZGl0b3IsIEFwcFRhYkVkaXRvck9wdGlvbnN9IGZyb20gJy4vZWRpdG9yLmNsYXNzJztcbmltcG9ydCB7QXBwRm9ybVV0aWxzfSBmcm9tICcuL2Zvcm0udXRpbHMnO1xuaW1wb3J0IHtBbGVydHN9IGZyb20gJy4uLy4uL3NoYXJlZC9hbGVydHMnO1xuaW1wb3J0IHtFcnJvckNvZGVzLCBTZXJ2ZXJFcnJvckNvZGVzfSBmcm9tICcuLi9zZXJ2aWNlcy9lcnJvcnMnO1xuaW1wb3J0IHtpc0ludCwgaXNOb3RFbXB0eUFycmF5LCBpc051bWJlciwgdG9OdW1iZXJ9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMsIElFbnRpdHlTZXJ2aWNlfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdE5pbCwgdG9Cb29sZWFufSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7RGF0ZUZvcm1hdFBpcGV9IGZyb20gJy4uLy4uL3NoYXJlZC9waXBlcy9kYXRlLWZvcm1hdC5waXBlJztcbmltcG9ydCB7RU5WSVJPTk1FTlR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge0hpc3RvcnlQYWdlUmVmZXJlbmNlfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9oaXN0b3J5Lm1vZGVsJztcbmltcG9ydCB7V2FpdEZvck9wdGlvbnN9IGZyb20gJy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5cbmV4cG9ydCBjbGFzcyBBcHBFZGl0b3JPcHRpb25zIGV4dGVuZHMgQXBwVGFiRWRpdG9yT3B0aW9ucyB7XG4gIGF1dG9Mb2FkPzogYm9vbGVhbjtcbiAgYXV0b0xvYWREZWxheT86IG51bWJlcjtcbiAgcGF0aElkQXR0cmlidXRlPzogc3RyaW5nO1xuICBlbmFibGVMaXN0ZW5DaGFuZ2VzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ2hhbmdlIHBhZ2Ugcm91dGUgKHdpbmRvdyBVUkwpIHdoZW4gc2F2aW5nIGZvciB0aGUgZmlyc3QgdGltZVxuICAgKi9cbiAgYXV0b1VwZGF0ZVJvdXRlPzogYm9vbGVhbjsgLy8gRGVmYXVsdCB0byB0cnVlXG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIG5leHQgdGFiLCBhZnRlciBzYXZpbmcgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAqL1xuICBhdXRvT3Blbk5leHRUYWI/OiBib29sZWFuOyAvLyBEZWZhdWx0IHRvIHRydWVcblxuICBpMThuUHJlZml4Pzogc3RyaW5nO1xufVxuXG4vLyBAZHluYW1pY1xuQERpcmVjdGl2ZSgpXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBcHBFbnRpdHlFZGl0b3I8XG4gIFQgZXh0ZW5kcyBFbnRpdHk8VCwgSUQ+LFxuICBTIGV4dGVuZHMgSUVudGl0eVNlcnZpY2U8VCwgSUQ+ID0gSUVudGl0eVNlcnZpY2U8VCwgYW55PixcbiAgSUQgPSBudW1iZXJcbiAgPlxuICBleHRlbmRzIEFwcFRhYkVkaXRvcjxULCBJRCwgRW50aXR5U2VydmljZUxvYWRPcHRpb25zPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcblxuICBwcml2YXRlIF91c2FnZU1vZGU6IFVzYWdlTW9kZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZW5hYmxlTGlzdGVuQ2hhbmdlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGF0aElkQXR0cmlidXRlOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1dG9Mb2FkOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hdXRvTG9hZERlbGF5OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1dG9VcGRhdGVSb3V0ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfYXV0b09wZW5OZXh0VGFiOiBib29sZWFuO1xuXG4gIHByb3RlY3RlZCBkYXRlRm9ybWF0OiBEYXRlRm9ybWF0UGlwZTtcbiAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZjtcbiAgcHJvdGVjdGVkIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZTtcblxuICBkYXRhOiBUO1xuICBzYXZpbmcgPSBmYWxzZTtcbiAgaGFzUmVtb3RlTGlzdGVuZXIgPSBmYWxzZTtcbiAgZGVmYXVsdEJhY2tIcmVmOiBzdHJpbmc7XG4gIGhpc3RvcnlJY29uOiB7aWNvbj86IHN0cmluZzsgbWF0SWNvbj86IHN0cmluZyB9O1xuXG4gICR0aXRsZSA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgb25VcGRhdGVWaWV3ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuXG4gIGdldCB1c2FnZU1vZGUoKTogVXNhZ2VNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5fdXNhZ2VNb2RlO1xuICB9XG5cbiAgc2V0IHVzYWdlTW9kZSh2YWx1ZTogVXNhZ2VNb2RlKSB7XG4gICAgaWYgKHRoaXMuX3VzYWdlTW9kZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3VzYWdlTW9kZSA9IHZhbHVlO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNPbkZpZWxkTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5pc09uRmllbGRNb2RlKHRoaXMuX3VzYWdlTW9kZSk7XG4gIH1cblxuICBnZXQgaXNOZXdEYXRhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05pbCh0aGlzLmRhdGE/LmlkKTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9sb2FkaW5nO1xuICB9XG5cbiAgZ2V0IHNlcnZpY2UoKTogUyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2U7XG4gIH1cblxuICBtYXJrQXNTYXZpbmcob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KXtcbiAgICBpZiAoIXRoaXMuc2F2aW5nKSB7XG4gICAgICB0aGlzLnNhdmluZyA9IHRydWU7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc1NhdmVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSl7XG4gICAgaWYgKHRoaXMuc2F2aW5nKSB7XG4gICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBkYXRhVHlwZTogbmV3KCkgPT4gVCxcbiAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U/OiBTLFxuICAgIEBPcHRpb25hbCgpIG9wdGlvbnM/OiBBcHBFZGl0b3JPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSksXG4gICAgICBpbmplY3Rvci5nZXQoUm91dGVyKSxcbiAgICAgIGluamVjdG9yLmdldChBbGVydENvbnRyb2xsZXIpLFxuICAgICAgaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLFxuICAgICAgb3B0aW9ucyk7XG4gICAgb3B0aW9ucyA9IDxBcHBFZGl0b3JPcHRpb25zPntcbiAgICAgIC8vIERlZmF1bHQgb3B0aW9uc1xuICAgICAgZW5hYmxlTGlzdGVuQ2hhbmdlczogKGluamVjdG9yLmdldChFTlZJUk9OTUVOVCkubGlzdGVuUmVtb3RlQ2hhbmdlcyA9PT0gdHJ1ZSksXG4gICAgICBwYXRoSWRBdHRyaWJ1dGU6ICdpZCcsXG4gICAgICBhdXRvTG9hZDogdHJ1ZSxcbiAgICAgIGF1dG9VcGRhdGVSb3V0ZTogdHJ1ZSxcbiAgICAgIGkxOG5QcmVmaXg6ICcnLFxuXG4gICAgICAvLyBGb2xsb3dpbmcgb3B0aW9ucyBhcmUgb3ZlcnJpZGUgaW5zaWRlIG5nT25Jbml0KClcbiAgICAgIC8vIGF1dG9PcGVuTmV4dFRhYjogLi4uLFxuXG4gICAgICAvLyBPdmVycmlkZSBkZWZhdWx0c1xuICAgICAgLi4ub3B0aW9uc1xuICAgIH07XG5cbiAgICB0aGlzLnNldHRpbmdzID0gaW5qZWN0b3IuZ2V0KExvY2FsU2V0dGluZ3NTZXJ2aWNlKTtcbiAgICB0aGlzLmNkID0gaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICB0aGlzLmRhdGVGb3JtYXQgPSBpbmplY3Rvci5nZXQoRGF0ZUZvcm1hdFBpcGUpO1xuICAgIHRoaXMudG9hc3RDb250cm9sbGVyID0gaW5qZWN0b3IuZ2V0KFRvYXN0Q29udHJvbGxlcik7XG4gICAgdGhpcy5fZW5hYmxlTGlzdGVuQ2hhbmdlcyA9IG9wdGlvbnMuZW5hYmxlTGlzdGVuQ2hhbmdlcztcbiAgICB0aGlzLl9wYXRoSWRBdHRyaWJ1dGUgPSBvcHRpb25zLnBhdGhJZEF0dHJpYnV0ZTtcbiAgICB0aGlzLl9hdXRvTG9hZCA9IG9wdGlvbnMuYXV0b0xvYWQ7XG4gICAgdGhpcy5fYXV0b0xvYWREZWxheSA9IG9wdGlvbnMuYXV0b0xvYWREZWxheTtcbiAgICB0aGlzLl9hdXRvVXBkYXRlUm91dGUgPSBvcHRpb25zLmF1dG9VcGRhdGVSb3V0ZTtcbiAgICB0aGlzLl9hdXRvT3Blbk5leHRUYWIgPSBvcHRpb25zLmF1dG9PcGVuTmV4dFRhYjtcbiAgICB0aGlzLmkxOG5Db250ZXh0ID0ge1xuICAgICAgcHJlZml4OiBvcHRpb25zLmkxOG5QcmVmaXgsXG4gICAgICBzdWZmaXg6ICcnXG4gICAgfTtcblxuICAgIC8vIEZPUiBERVYgT05MWSAtLS0tXG4gICAgLy90aGlzLmRlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgLy8gRGVmYXVsdHNcbiAgICB0aGlzLl9hdXRvT3Blbk5leHRUYWIgPSB0b0Jvb2xlYW4odGhpcy5fYXV0b09wZW5OZXh0VGFiLCAhdGhpcy5pc09uRmllbGRNb2RlKTtcbiAgICB0aGlzLmhpc3RvcnlJY29uID0gdGhpcy5oaXN0b3J5SWNvbiB8fCB7aWNvbjogJ2xpc3QnfTtcblxuICAgIC8vIFJlZ2lzdGVyIGZvcm1zXG4gICAgdGhpcy5yZWdpc3RlckZvcm1zKCk7XG5cbiAgICAvLyBEaXNhYmxlIHBhZ2UsIGR1cmluZyBsb2FkXG4gICAgdGhpcy5kaXNhYmxlKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG5cbiAgICAvLyBMb2FkIGRhdGFcbiAgICBpZiAodGhpcy5fYXV0b0xvYWQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5sb2FkRnJvbVJvdXRlKCksIHRoaXMuX2F1dG9Mb2FkRGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG5cbiAgICB0aGlzLiR0aXRsZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuJHRpdGxlLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vblVwZGF0ZVZpZXcuY29tcGxldGUoKTtcbiAgICB0aGlzLm9uVXBkYXRlVmlldy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgZGF0YSBmcm9tIHRoZSBzbmFwc2hvdCByb3V0ZVxuICAgKlxuICAgKiBAcGFyYW0gcm91dGVcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGxvYWRGcm9tUm91dGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgcm91dGUgPSB0aGlzLnJvdXRlLnNuYXBzaG90O1xuICAgIGlmICghcm91dGUgfHwgaXNOaWxPckJsYW5rKHRoaXMuX3BhdGhJZEF0dHJpYnV0ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGxvYWQgZnJvbSByb3V0ZTogbWlzc2luZyBcXCdyb3V0ZVxcJyBvciBcXCdvcHRpb25zLnBhdGhJZEF0dHJpYnV0ZVxcJy4nKTtcbiAgICB9XG4gICAgbGV0IGlkID0gcm91dGUucGFyYW1zW3RoaXMuX3BhdGhJZEF0dHJpYnV0ZV07XG4gICAgaWYgKGlzTmlsKGlkKSB8fCBpZCA9PT0gJ25ldycpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWQodW5kZWZpbmVkLCByb3V0ZS5wYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb252ZXJ0IGFzIG51bWJlciwgaWYgbmVlZFxuICAgICAgaWYgKGlzSW50KGlkKSkge1xuICAgICAgICBpZCA9IHBhcnNlSW50KGlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmxvYWQoaWQsIHJvdXRlLnBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgZGF0YSBmcm9tIGlkLCB1c2luZyB0aGUgZGF0YVNlcnZpY2VcbiAgICpcbiAgICogQHBhcmFtIGlkXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBhc3luYyBsb2FkKGlkPzogSUQsIG9wdHM/OiBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMgJiB7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgICBvcGVuVGFiSW5kZXg/OiBudW1iZXI7XG4gICAgdXBkYXRlVGFiQW5kUm91dGU/OiBib29sZWFuO1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfSkge1xuICAgIGlmICghdGhpcy5kYXRhU2VydmljZSkgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbG9hZCBkYXRhOiBtaXNzaW5nIFxcJ2RhdGFTZXJ2aWNlXFwnIScpO1xuXG4gICAgdGhpcy5lcnJvciA9IG51bGw7XG5cbiAgICAvLyBOZXcgZGF0YVxuICAgIGlmIChpc05pbChpZCkpIHtcblxuICAgICAgLy8gQ3JlYXRlIHVzaW5nIGRlZmF1bHQgdmFsdWVzXG4gICAgICBjb25zdCBkYXRhID0gbmV3IHRoaXMuZGF0YVR5cGUoKTtcbiAgICAgIHRoaXMuX3VzYWdlTW9kZSA9IHRoaXMuY29tcHV0ZVVzYWdlTW9kZShkYXRhKTtcbiAgICAgIGF3YWl0IHRoaXMub25OZXdFbnRpdHkoZGF0YSwgb3B0cyk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVZpZXcoZGF0YSwge1xuICAgICAgICBvcGVuVGFiSW5kZXg6IDAsXG4gICAgICAgIC4uLm9wdHNcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgICB9XG5cbiAgICAvLyBMb2FkIGV4aXN0aW5nIGRhdGFcbiAgICBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLmxvYWQoaWQsIG9wdHMpO1xuICAgICAgICBpZiAoIWRhdGEpIHRocm93IHtjb2RlOiBFcnJvckNvZGVzLkRBVEFfTk9UX0ZPVU5EX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuREFUQV9OT19GT1VORCd9O1xuICAgICAgICB0aGlzLl91c2FnZU1vZGUgPSB0aGlzLmNvbXB1dGVVc2FnZU1vZGUoZGF0YSk7XG4gICAgICAgIGF3YWl0IHRoaXMub25FbnRpdHlMb2FkZWQoZGF0YSwgb3B0cyk7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlVmlldyhkYXRhLCBvcHRzKTtcbiAgICAgICAgdGhpcy5zdGFydExpc3RlblJlbW90ZUNoYW5nZXMoKTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5zZXRFcnJvcihlcnIpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7XG4gICAgICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhcnRMaXN0ZW5SZW1vdGVDaGFuZ2VzKCkge1xuICAgIC8vIFNraXAgaWYgZGlzYWJsZSwgb3IgYWxyZWFkeSBsaXN0ZW5pbmdcbiAgICBpZiAodGhpcy5oYXNSZW1vdGVMaXN0ZW5lciB8fCAhdGhpcy5fZW5hYmxlTGlzdGVuQ2hhbmdlcyB8fCB0aGlzLmlzTmV3RGF0YSkgcmV0dXJuO1xuXG4gICAgLy8gTGlzdGVuIGZvciBjaGFuZ2VzIG9uIHNlcnZlclxuICAgIHRoaXMuaGFzUmVtb3RlTGlzdGVuZXIgPSB0cnVlO1xuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UubGlzdGVuQ2hhbmdlcyh0aGlzLmRhdGEuaWQpXG4gICAgICAgIC5waXBlKGZpbHRlcihpc05vdE5pbCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IFQpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YS51cGRhdGVEYXRlICYmIChkYXRhLnVwZGF0ZURhdGUgYXMgTW9tZW50KS5pc0FmdGVyKHRoaXMuZGF0YS51cGRhdGVEYXRlKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRpcnR5KSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbZGF0YS1lZGl0b3JdIENoYW5nZXMgZGV0ZWN0ZWQgb24gc2VydmVyLCBhdCB7JHtkYXRhLnVwZGF0ZURhdGV9fSA6IHJlbG9hZGluZyBwYWdlLi4uYCk7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlVmlldyhkYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbZGF0YS1lZGl0b3JdIENoYW5nZXMgZGV0ZWN0ZWQgb24gc2VydmVyLCBhdCB7JHtkYXRhLnVwZGF0ZURhdGV9fSwgYnV0IHBhZ2UgaXMgZGlydHk6IHNraXAgcmVsb2FkaW5nLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmFkZCgoKSA9PiB0aGlzLmhhc1JlbW90ZUxpc3RlbmVyID0gZmFsc2UpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVZpZXcoZGF0YTogVCB8IG51bGwsIG9wdHM/OiB7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgICBvcGVuVGFiSW5kZXg/OiBudW1iZXI7XG4gICAgdXBkYXRlUm91dGU/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaWRDaGFuZ2VkID0gaXNOb3ROaWwoZGF0YS5pZClcbiAgICAgICYmIHRoaXMucHJldmlvdXNEYXRhSWQgIT09IHVuZGVmaW5lZCAvLyBJZ25vcmUgaWYgZmlyc3QgbG9hZGluZyAoPXVuZGVmaW5lZClcbiAgICAgICYmIHRoaXMucHJldmlvdXNEYXRhSWQgIT09IGRhdGEuaWQ7XG5cbiAgICBvcHRzID0ge1xuICAgICAgdXBkYXRlUm91dGU6IHRoaXMuX2F1dG9VcGRhdGVSb3V0ZSAmJiBpZENoYW5nZWQgJiYgIXRoaXMubG9hZGluZyxcbiAgICAgIG9wZW5UYWJJbmRleDogdGhpcy5fYXV0b09wZW5OZXh0VGFiICYmIGlkQ2hhbmdlZCAmJiBpc05pbCh0aGlzLnByZXZpb3VzRGF0YUlkKSAmJiB0aGlzLnNlbGVjdGVkVGFiSW5kZXggKyAxIDwgdGhpcy50YWJDb3VudCA/IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCArIDEgOiB1bmRlZmluZWQsXG4gICAgICAuLi5vcHRzXG4gICAgfTtcblxuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5wcmV2aW91c0RhdGFJZCA9IGRhdGEuaWQgfHwgbnVsbDtcblxuICAgIGNvbnN0IHByb21pc2VPclZvaWQgPSB0aGlzLnNldFZhbHVlKGRhdGEpO1xuICAgIGlmIChwcm9taXNlT3JWb2lkKSBhd2FpdCBwcm9taXNlT3JWb2lkO1xuXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgdGhpcy5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgIHRoaXMudXBkYXRlVmlld1N0YXRlKGRhdGEpO1xuXG4gICAgICAvLyBOZWVkIHRvIHVwZGF0ZSByb3V0ZVxuICAgICAgaWYgKG9wdHMudXBkYXRlUm91dGUgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVUYWJBbmRSb3V0ZShkYXRhLCBvcHRzKVxuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdGl0bGUgLSBzaG91bGQgYmUgZXhlY3V0ZWQgQUZURVIgdXBkYXRlUm91dGUgYmVjYXVzZSBvZiBwYXRoIGNoYW5nZSAtIGZpeCAjMTg1XG4gICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy51cGRhdGVUaXRsZShkYXRhKSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSB0YWcgZ3JvdXAgaW5kZXhcbiAgICAgICAgdGhpcy51cGRhdGVUYWJJbmRleChvcHRzLm9wZW5UYWJJbmRleCk7XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSB0aXRsZS5cbiAgICAgICAgdGhpcy51cGRhdGVUaXRsZShkYXRhKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vblVwZGF0ZVZpZXcuZW1pdChkYXRhKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgc3RhdGVcbiAgICovXG4gIHVwZGF0ZVZpZXdTdGF0ZShkYXRhOiBULCBvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuaXNOZXdEYXRhIHx8IHRoaXMuY2FuVXNlcldyaXRlKGRhdGEpKSB7XG4gICAgICB0aGlzLmVuYWJsZShvcHRzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmRpc2FibGUob3B0cyk7XG5cbiAgICAgIC8vIEFsbG93IHRvIHNvcnQgdGFibGVcbiAgICAgIHRoaXMudGFibGVzLmZvckVhY2godCA9PiB0LmVuYWJsZVNvcnQoKSk7XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSByb3V0ZSBsb2NhdGlvbiwgYW5kIG9wZW4gdGhlIG5leHQgdGFiXG4gICAqL1xuICBhc3luYyB1cGRhdGVUYWJBbmRSb3V0ZShkYXRhOiBULCBvcHRzPzoge1xuICAgIG9wZW5UYWJJbmRleD86IG51bWJlcjtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuXG4gICAgdGhpcy5xdWVyeVBhcmFtcyA9IHRoaXMucXVlcnlQYXJhbXMgfHwge307XG5cbiAgICAvLyBPcGVuIHRoZSB0YWIgZ3JvdXBcbiAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KG9wdHMgJiYgb3B0cy5vcGVuVGFiSW5kZXgpO1xuXG4gICAgLy8gU2F2ZSB0aGUgb3BlbmVkIHRhYiBpbnRvIHRoZSBxdWVyeVBhcmFtc1xuICAgIHRoaXMucXVlcnlQYXJhbXMudGFiID0gdGhpcy5zZWxlY3RlZFRhYkluZGV4O1xuXG4gICAgLy8gVXBkYXRlIHJvdXRlIGxvY2F0aW9uXG4gICAgY29uc3QgZm9yY2VkUXVlcnlQYXJhbXMgPSB7fTtcbiAgICBmb3JjZWRRdWVyeVBhcmFtc1t0aGlzLl9wYXRoSWRBdHRyaWJ1dGVdID0gZGF0YSAmJiBpc05vdE5pbChkYXRhLmlkKSA/IGRhdGEuaWQgOiAnbmV3JztcbiAgICBpZiAoZGF0YSAmJiBpc05vdE5pbChkYXRhLmlkKSkge1xuICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuJ10sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHsuLi50aGlzLnF1ZXJ5UGFyYW1zLCAuLi5mb3JjZWRRdWVyeVBhcmFtc31cbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4nLCAnbmV3J10sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHsuLi50aGlzLnF1ZXJ5UGFyYW1zLCAuLi5mb3JjZWRRdWVyeVBhcmFtc31cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMudXBkYXRlUm91dGUoZGF0YSwgdGhpcy5xdWVyeVBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSByb3V0ZSBsb2NhdGlvbiwgYW5kIG9wZW4gdGhlIG5leHQgdGFiXG4gICAqL1xuICB1cGRhdGVUYWJJbmRleCh0YWJJbmRleD86IG51bWJlcikge1xuXG4gICAgLy8gT3BlbiB0aGUgc2Vjb25kIHRhYlxuICAgIGlmIChpc05vdE5pbCh0YWJJbmRleCkpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGFiSW5kZXggIT09IHRhYkluZGV4KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRhYkluZGV4O1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVBbmRDbG9zZShldmVudDogRXZlbnQsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcblxuICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlKGV2ZW50KTtcbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xvc2UoZXZlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gc2F2ZWQ7XG4gIH1cblxuICBhc3luYyBjbG9zZShldmVudDogRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdvQmFjaygpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZShldmVudD86IEV2ZW50LCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMubG9hZGluZyB8fCB0aGlzLnNhdmluZykge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2RhdGEtZWRpdG9yXSBTa2lwIHNhdmU6IGVkaXRvciBpcyBidXN5IChsb2FkaW5nIG9yIHNhdmluZyknKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmRpcnR5KSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIFNraXAgc2F2ZTogZWRpdG9yIG5vdCBkaXJ0eScpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gV2FpdCBlbmQgb2YgYXN5bmMgdmFsaWRhdGlvblxuICAgIGF3YWl0IHRoaXMud2FpdFdoaWxlUGVuZGluZygpO1xuXG4gICAgLy8gSWYgaW52YWxpZFxuICAgIGlmICh0aGlzLmludmFsaWQpIHtcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgdGhpcy5sb2dGb3JtRXJyb3JzKCk7XG4gICAgICB0aGlzLm9wZW5GaXJzdEludmFsaWRUYWIoKTtcblxuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMubWFya0FzU2F2aW5nKCk7XG4gICAgdGhpcy5lcnJvciA9IHVuZGVmaW5lZDtcblxuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIFNhdmluZyBkYXRhLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gR2V0IGRhdGFcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdldFZhbHVlKCk7XG5cbiAgICAgIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgICAvLyBTYXZlIGZvcm1cbiAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gYXdhaXQgdGhpcy5kYXRhU2VydmljZS5zYXZlKGRhdGEsIG9wdGlvbnMpO1xuXG4gICAgICBhd2FpdCB0aGlzLm9uRW50aXR5U2F2ZWQodXBkYXRlZERhdGEpO1xuXG4gICAgICAvLyBVcGRhdGUgdGhlIHZpZXcgKGUuZyBtZXRhZGF0YSlcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlVmlldyh1cGRhdGVkRGF0YSwgb3B0aW9ucyk7XG5cbiAgICAgIC8vIFN1YnNjcmliZSB0byByZW1vdGUgY2hhbmdlc1xuICAgICAgaWYgKCF0aGlzLmhhc1JlbW90ZUxpc3RlbmVyKSB0aGlzLnN0YXJ0TGlzdGVuUmVtb3RlQ2hhbmdlcygpO1xuXG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0RXJyb3IoZXJyKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7XG4gICAgICB0aGlzLnNjcm9sbFRvVG9wKCk7IC8vIFNjcm9sbCB0byB0b3AgKHRvIHNob3cgZXJyb3IpXG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gICAgICB0aGlzLmVuYWJsZSgpO1xuXG4gICAgICAvLyBDb25jdXJyZW50IGNoYW5nZSBvbiBwb2RcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gU2VydmVyRXJyb3JDb2Rlcy5CQURfVVBEQVRFX0RBVEUgJiYgaXNOb3ROaWwodGhpcy5kYXRhLmlkKSkge1xuICAgICAgICAvLyBDYWxsIGEgZGF0YSByZWxvYWQgKGluIGJhY2tncm91bmQpLCB0byB1cGRhdGUgdGhlIEdyYXBoUUwgY2FjaGUsIGFuZCBhbGxvdyB0byBjYW5jZWwgY2hhbmdlc1xuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmxvYWQodGhpcy5kYXRhLmlkLCB7ZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZygnW2RhdGEtZWRpdG9yXSBEYXRhIGNhY2hlIHJlbG9hZGVkLiBVc2VyIGNhbiByZWxvYWQgcGFnZScpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLm1hcmtBc1NhdmVkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgZGF0YSAoaWYgZGlydHkgYW5kIHZhbGlkKSwgYW5kIHJldHVybiBpdC4gT3RoZXJ3aXNlLCByZXR1cm4gbmlsIHZhbHVlLlxuICAgKi9cbiAgYXN5bmMgc2F2ZUFuZEdldERhdGFJZlZhbGlkKCk6IFByb21pc2U8VCB8IHVuZGVmaW5lZD4ge1xuICAgIC8vIEZvcm0gaXMgbm90IHZhbGlkXG4gICAgaWYgKCF0aGlzLnZhbGlkKSB7XG5cbiAgICAgIC8vIE1ha2Ugc3VyZSB2YWxpZGF0aW9uIGlzIGZpbmlzaGVkXG4gICAgICBhd2FpdCBBcHBGb3JtVXRpbHMud2FpdFdoaWxlUGVuZGluZyh0aGlzKTtcblxuICAgICAgLy8gSWYgaW52YWxpZDogT3BlbiB0aGUgZmlyc3QgdGFiIGluIGVycm9yXG4gICAgICBpZiAodGhpcy5pbnZhbGlkKSB7XG4gICAgICAgIHRoaXMub3BlbkZpcnN0SW52YWxpZFRhYigpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICAvLyBDb250aW51ZSAodmFsaWQpXG4gICAgfVxuXG4gICAgLy8gRm9ybSBpcyB2YWxpZCwgYnV0IG5vdCBzYXZlZFxuICAgIGlmICh0aGlzLmRpcnR5KSB7XG4gICAgICBjb25zdCBzYXZlZCA9IGF3YWl0IHRoaXMuc2F2ZShuZXcgRXZlbnQoJ3NhdmUnKSk7XG4gICAgICBpZiAoIXNhdmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFZhbGlkIGFuZCBzYXZlZCBkYXRhXG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShldmVudD86IFVJRXZlbnQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5sb2FkaW5nIHx8IHRoaXMuc2F2aW5nKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBBc2sgdXNlciBjb25maXJtYXRpb25cbiAgICBjb25zdCBjb25maXJtYXRpb24gPSBhd2FpdCBBbGVydHMuYXNrRGVsZXRlQ29uZmlybWF0aW9uKHRoaXMuYWxlcnRDdHJsLCB0aGlzLnRyYW5zbGF0ZSk7XG4gICAgaWYgKCFjb25maXJtYXRpb24pIHJldHVybjtcblxuICAgIGNvbnNvbGUuZGVidWcoJ1tkYXRhLWVkaXRvcl0gQXNraW5nIHRvIGRlbGV0ZS4uLicpO1xuXG4gICAgdGhpcy5tYXJrQXNTYXZpbmcoKTtcbiAgICB0aGlzLmVycm9yID0gdW5kZWZpbmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCBkYXRhXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5nZXRWYWx1ZSgpO1xuICAgICAgY29uc3QgaXNOZXcgPSB0aGlzLmlzTmV3RGF0YTtcblxuICAgICAgdGhpcy5kaXNhYmxlKCk7XG5cbiAgICAgIGlmICghaXNOZXcpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kYXRhU2VydmljZS5kZWxldGUoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMub25FbnRpdHlEZWxldGVkKGRhdGEpO1xuXG4gICAgICAvLyBSZW1vdmUgcGFnZSBoaXN0b3J5XG4gICAgICB0aGlzLnJlbW92ZVBhZ2VIaXN0b3J5KCk7XG5cblxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRFcnJvcihlcnIpO1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMDtcbiAgICAgIHRoaXMubWFya0FzU2F2ZWQoKTtcbiAgICAgIHRoaXMuZW5hYmxlKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gV2FpdCwgdGhlbiBnbyBiYWNrICh3YWl0IGlzIG5lZWQgaW4gb3JkZXIgdG8gdXBkYXRlIGJhY2sgaHJlZiBpcyBuZWVkKVxuICAgIGF3YWl0IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5nb0JhY2soKSwgNTAwKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgcmVsb2FkKCkge1xuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICAgIGF3YWl0IHRoaXMubG9hZCh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmlkKTtcbiAgfVxuXG4gIGFzeW5jIGdvQmFjayhldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkIHwgYm9vbGVhbj4ge1xuICAgIC8vIEdvIGJhY2tcbiAgICBpZiAodGhpcy50b29sYmFyPy5jYW5Hb0JhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLnRvb2xiYXIuZ29CYWNrKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuZGVmYXVsdEJhY2tIcmVmKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmRlZmF1bHRCYWNrSHJlZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEJhY2sgdG8gaG9tZVxuICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nKTtcbiAgICB9XG4gIH1cblxuICBzZXRFcnJvcihlcnI6IGFueSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1tkYXRhLWVkaXRvcl0gJyArIGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIsIGVycik7XG4gICAgbGV0IHVzZXJNZXNzYWdlID0gZXJyICYmIGVyci5tZXNzYWdlICYmIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZXJyLm1lc3NhZ2UpIHx8IGVycjtcblxuICAgIC8vIEFkZCBkZXRhaWxzIGVycm9yIChpZiBhbnkpIHVuZGVyIHRoZSBtYWluIG1lc3NhZ2VcbiAgICBjb25zdCBkZXRhaWxNZXNzYWdlID0gZXJyICYmIGVyci5kZXRhaWxzICYmIChlcnIuZGV0YWlscy5tZXNzYWdlIHx8IGVyci5kZXRhaWxzKSB8fCB1bmRlZmluZWQ7XG4gICAgaWYgKGRldGFpbE1lc3NhZ2UpIHtcbiAgICAgIHVzZXJNZXNzYWdlICs9IGA8YnIvPjxzbWFsbCBjbGFzcz1cImhpZGRlbi14cyBoaWRkZW4tc21cIiB0aXRsZT1cIiR7ZGV0YWlsTWVzc2FnZX1cIj5gO1xuICAgICAgdXNlck1lc3NhZ2UgKz0gZGV0YWlsTWVzc2FnZS5sZW5ndGggPCA3MCA/IGRldGFpbE1lc3NhZ2UgOiBkZXRhaWxNZXNzYWdlLnN1YnN0cmluZygwLCA2NykgKyAnLi4uJztcbiAgICAgIHVzZXJNZXNzYWdlICs9ICc8L3NtYWxsPic7XG4gICAgfVxuICAgIHRoaXMuZXJyb3IgPSB1c2VyTWVzc2FnZTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIHRvIG92ZXJyaWRlIC0tICovXG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlZ2lzdGVyRm9ybXMoKTtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY29tcHV0ZVRpdGxlKGRhdGE6IFQpOiBQcm9taXNlPHN0cmluZz47XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNldFZhbHVlKGRhdGE6IFQpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IGZvcm0oKTogRm9ybUdyb3VwO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRGaXJzdEludmFsaWRUYWJJbmRleCgpOiBudW1iZXI7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNhblVzZXJXcml0ZShkYXRhOiBUKTogYm9vbGVhbjtcblxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgYXN5bmMgdW5sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZm9ybS5yZXNldCgpO1xuICAgIHRoaXMucmVnaXN0ZXJGb3JtcygpO1xuICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uQmVmb3JlRW50aXR5TG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBjYW4gYmUgb3ZlcndyaXRlIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvbk5ld0VudGl0eShkYXRhOiBULCBvcHRpb25zPzogRW50aXR5U2VydmljZUxvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0ZSBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25FbnRpdHlMb2FkZWQoZGF0YTogVCwgb3B0aW9ucz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdGUgYnkgc3ViY2xhc3Nlc1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uRW50aXR5U2F2ZWQoZGF0YTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdGUgYnkgc3ViY2xhc3Nlc1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uRW50aXR5RGVsZXRlZChkYXRhOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0ZSBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgY29tcHV0ZVVzYWdlTW9kZShkYXRhOiBUKTogVXNhZ2VNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5pc1VzYWdlTW9kZSgnRklFTEQnKSA/ICdGSUVMRCcgOiAnREVTSyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgd2FpdFdoaWxlUGVuZGluZyhvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcodGhpcywgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VmFsdWUoKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QganNvbiA9IGF3YWl0IHRoaXMuZ2V0SnNvblZhbHVlVG9TYXZlKCk7XG5cbiAgICBjb25zdCByZXMgPSBuZXcgdGhpcy5kYXRhVHlwZSgpO1xuICAgIHJlcy5mcm9tT2JqZWN0KGpzb24pO1xuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRKc29uVmFsdWVUb1NhdmUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuZm9ybS52YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgdGl0bGVcbiAgICpcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyB1cGRhdGVUaXRsZShkYXRhPzogVCkge1xuICAgIGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcbiAgICBjb25zdCB0aXRsZSA9IGF3YWl0IHRoaXMuY29tcHV0ZVRpdGxlKGRhdGEpO1xuICAgIHRoaXMuJHRpdGxlLm5leHQodGl0bGUpO1xuXG4gICAgLy8gSWYgTk9UIGRhdGEsIHRoZW4gYWRkIHRvIHBhZ2UgaGlzdG9yeVxuICAgIGlmICghdGhpcy5pc05ld0RhdGEpIHtcbiAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLmNvbXB1dGVQYWdlSGlzdG9yeSh0aXRsZSk7XG4gICAgICByZXR1cm4gdGhpcy5hZGRUb1BhZ2VIaXN0b3J5KHBhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhZGRUb1BhZ2VIaXN0b3J5KHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlLCBvcHRzPzogQWRkVG9QYWdlSGlzdG9yeU9wdGlvbnMpIHtcbiAgICBpZiAoIXBhZ2UpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuYWRkVG9QYWdlSGlzdG9yeShwYWdlLCB7XG4gICAgICByZW1vdmVQYXRoUXVlcnlQYXJhbXM6IHRydWUsXG4gICAgICByZW1vdmVUaXRsZVNtYWxsVGFnOiB0cnVlLFxuICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgIC4uLm9wdHNcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjb21wdXRlUGFnZUhpc3RvcnkodGl0bGU6IHN0cmluZyk6IFByb21pc2U8SGlzdG9yeVBhZ2VSZWZlcmVuY2U+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGUsXG4gICAgICBwYXRoOiB0aGlzLnJvdXRlci51cmxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlbW92ZVBhZ2VIaXN0b3J5KG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnJlbW92ZVBhZ2VIaXN0b3J5KHRoaXMucm91dGVyLnVybCwgb3B0cyk7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBjb21wdXRlUGFnZVVybChpZDogSUR8J25ldycpOiBzdHJpbmcgfCBhbnlbXSB7XG4gICAgY29uc3QgcGFyZW50VXJsID0gdGhpcy5nZXRQYXJlbnRQYWdlVXJsKCk7XG4gICAgcmV0dXJuIHBhcmVudFVybCAmJiBgJHtwYXJlbnRVcmx9LyR7aWR9YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQYXJlbnRQYWdlVXJsKHdpdGhRdWVyeVBhcmFtcz86IGJvb2xlYW4pIHtcbiAgICBsZXQgcGFyZW50VXJsID0gdGhpcy5kZWZhdWx0QmFja0hyZWY7XG5cbiAgICAvLyBSZW1vdmUgcXVlcnkgcGFyYW1zXG4gICAgaWYgKHdpdGhRdWVyeVBhcmFtcyAhPT0gdHJ1ZSAmJiBwYXJlbnRVcmwgJiYgcGFyZW50VXJsLmluZGV4T2YoJz8nKSAhPT0gLTEpIHtcbiAgICAgIHBhcmVudFVybCA9IHBhcmVudFVybC5zdWJzdHIoMCwgcGFyZW50VXJsLmluZGV4T2YoJz8nKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudFVybDtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgZnVuY3Rpb25zIC0tICovXG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIGZpcnN0IHRhYiB0aGF0IGlzIGludmFsaWRcbiAgICovXG4gIHByaXZhdGUgb3BlbkZpcnN0SW52YWxpZFRhYigpIHtcbiAgICBjb25zdCBpbnZhbGlkVGFiSW5kZXggPSB0aGlzLmdldEZpcnN0SW52YWxpZFRhYkluZGV4KCk7XG4gICAgaWYgKGludmFsaWRUYWJJbmRleCAhPT0gLTEgJiYgdGhpcy5zZWxlY3RlZFRhYkluZGV4ICE9PSBpbnZhbGlkVGFiSW5kZXgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGludmFsaWRUYWJJbmRleDtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHVwZGF0ZVJvdXRlKGRhdGE6IFQsIHF1ZXJ5UGFyYW1zOiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jb21wdXRlUGFnZVVybChpc05vdE5pbChkYXRhLmlkKSA/IGRhdGEuaWQgOiAnbmV3Jyk7XG4gICAgY29uc3QgY29tbWFuZHM6IGFueVtdID0gKHBhdGggJiYgdHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSA/IHBhdGguc3BsaXQoJy8nKSA6IHBhdGggYXMgYW55W107XG4gICAgaWYgKGlzTm90RW1wdHlBcnJheShjb21tYW5kcykpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShjb21tYW5kcywge1xuICAgICAgICByZXBsYWNlVXJsOiB0cnVlLFxuICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5xdWVyeVBhcmFtc1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdTa2lwIHBhZ2Ugcm91dGUgdXBkYXRlLiBJbnZhbGlkIHBhZ2UgcGF0aDogJywgcGF0aCk7XG4gICAgfVxuICB9XG59XG5cbiJdfQ==
|
|
600
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWVkaXRvci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2VudGl0eS1lZGl0b3IuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixRQUFRLEVBR1IsUUFBUSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUUsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBMEIsb0JBQW9CLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNqRyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFJdEMsT0FBTyxFQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRSxPQUFPLEVBQUMsS0FBSyxFQUFFLGVBQWUsRUFBcUIsTUFBTSx3QkFBd0IsQ0FBQztBQUVsRixPQUFPLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEYsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ25FLE9BQU8sRUFB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QUM7UUFDdkQsSUFBSSxlQUFlLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLGVBQWUsRUFBRTtZQUN2RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFZSxXQUFXLENBQUMsSUFBTyxFQUFFLFdBQWdCOztZQUNuRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sUUFBUSxHQUFVLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFhLENBQUM7WUFDN0YsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzdCLE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUU7b0JBQzFDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7aUJBQzlCLENBQUMsQ0FBQzthQUNKO2lCQUNJO2dCQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsNkNBQTZDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDbkU7UUFDSCxDQUFDO0tBQUE7OztZQTlyQkYsU0FBUzs7O1lBaERSLFFBQVE7OztZQTRIZ0IsZ0JBQWdCLHVCQUFyQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3RvcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtBbGVydENvbnRyb2xsZXIsIFRvYXN0Q29udHJvbGxlcn0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7TW9tZW50fSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtBZGRUb1BhZ2VIaXN0b3J5T3B0aW9ucywgTG9jYWxTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHtmaWx0ZXJ9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RW50aXR5fSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtVc2FnZU1vZGV9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL3NldHRpbmdzLm1vZGVsJztcbmltcG9ydCB7Rm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0FwcFRhYkVkaXRvciwgQXBwVGFiRWRpdG9yT3B0aW9uc30gZnJvbSAnLi9lZGl0b3IuY2xhc3MnO1xuaW1wb3J0IHtBcHBGb3JtVXRpbHN9IGZyb20gJy4vZm9ybS51dGlscyc7XG5pbXBvcnQge0FsZXJ0c30gZnJvbSAnLi4vLi4vc2hhcmVkL2FsZXJ0cyc7XG5pbXBvcnQge0Vycm9yQ29kZXMsIFNlcnZlckVycm9yQ29kZXN9IGZyb20gJy4uL3NlcnZpY2VzL2Vycm9ycyc7XG5pbXBvcnQge2lzSW50LCBpc05vdEVtcHR5QXJyYXksIGlzTnVtYmVyLCB0b051bWJlcn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0VudGl0eVNlcnZpY2VMb2FkT3B0aW9ucywgSUVudGl0eVNlcnZpY2V9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge2lzTmlsLCBpc05pbE9yQmxhbmssIGlzTm90TmlsLCB0b0Jvb2xlYW59IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtEYXRlRm9ybWF0UGlwZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3BpcGVzL2RhdGUtZm9ybWF0LnBpcGUnO1xuaW1wb3J0IHtFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7SGlzdG9yeVBhZ2VSZWZlcmVuY2V9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2hpc3RvcnkubW9kZWwnO1xuaW1wb3J0IHtXYWl0Rm9yT3B0aW9uc30gZnJvbSAnLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcblxuZXhwb3J0IGNsYXNzIEFwcEVkaXRvck9wdGlvbnMgZXh0ZW5kcyBBcHBUYWJFZGl0b3JPcHRpb25zIHtcbiAgYXV0b0xvYWQ/OiBib29sZWFuO1xuICBhdXRvTG9hZERlbGF5PzogbnVtYmVyO1xuICBwYXRoSWRBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIGVuYWJsZUxpc3RlbkNoYW5nZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDaGFuZ2UgcGFnZSByb3V0ZSAod2luZG93IFVSTCkgd2hlbiBzYXZpbmcgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAqL1xuICBhdXRvVXBkYXRlUm91dGU/OiBib29sZWFuOyAvLyBEZWZhdWx0IHRvIHRydWVcblxuICAvKipcbiAgICogT3BlbiB0aGUgbmV4dCB0YWIsIGFmdGVyIHNhdmluZyBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICovXG4gIGF1dG9PcGVuTmV4dFRhYj86IGJvb2xlYW47IC8vIERlZmF1bHQgdG8gdHJ1ZVxuXG4gIGkxOG5QcmVmaXg/OiBzdHJpbmc7XG59XG5cbi8vIEBkeW5hbWljXG5ARGlyZWN0aXZlKClcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFwcEVudGl0eUVkaXRvcjxcbiAgVCBleHRlbmRzIEVudGl0eTxULCBJRD4sXG4gIFMgZXh0ZW5kcyBJRW50aXR5U2VydmljZTxULCBJRD4gPSBJRW50aXR5U2VydmljZTxULCBhbnk+LFxuICBJRCA9IG51bWJlclxuICA+XG4gIGV4dGVuZHMgQXBwVGFiRWRpdG9yPFQsIElELCBFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnM+XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuXG4gIHByaXZhdGUgX3VzYWdlTW9kZTogVXNhZ2VNb2RlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbmFibGVMaXN0ZW5DaGFuZ2VzOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYXRoSWRBdHRyaWJ1dGU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXV0b0xvYWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1dG9Mb2FkRGVsYXk6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXV0b1VwZGF0ZVJvdXRlOiBib29sZWFuO1xuICBwcml2YXRlIF9hdXRvT3Blbk5leHRUYWI6IGJvb2xlYW47XG5cbiAgcHJvdGVjdGVkIGRhdGVGb3JtYXQ6IERhdGVGb3JtYXRQaXBlO1xuICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmO1xuICBwcm90ZWN0ZWQgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlO1xuXG4gIGRhdGE6IFQ7XG4gIHNhdmluZyA9IGZhbHNlO1xuICBoYXNSZW1vdGVMaXN0ZW5lciA9IGZhbHNlO1xuICBkZWZhdWx0QmFja0hyZWY6IHN0cmluZztcbiAgaGlzdG9yeUljb246IHtpY29uPzogc3RyaW5nOyBtYXRJY29uPzogc3RyaW5nIH07XG5cbiAgJHRpdGxlID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBvblVwZGF0ZVZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG5cbiAgZ2V0IHVzYWdlTW9kZSgpOiBVc2FnZU1vZGUge1xuICAgIHJldHVybiB0aGlzLl91c2FnZU1vZGU7XG4gIH1cblxuICBzZXQgdXNhZ2VNb2RlKHZhbHVlOiBVc2FnZU1vZGUpIHtcbiAgICBpZiAodGhpcy5fdXNhZ2VNb2RlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fdXNhZ2VNb2RlID0gdmFsdWU7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc09uRmllbGRNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmlzT25GaWVsZE1vZGUodGhpcy5fdXNhZ2VNb2RlKTtcbiAgfVxuXG4gIGdldCBpc05ld0RhdGEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTmlsKHRoaXMuZGF0YT8uaWQpO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmc7XG4gIH1cblxuICBnZXQgc2VydmljZSgpOiBTIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZTtcbiAgfVxuXG4gIG1hcmtBc1NhdmluZyhvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pe1xuICAgIGlmICghdGhpcy5zYXZpbmcpIHtcbiAgICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgbWFya0FzU2F2ZWQob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KXtcbiAgICBpZiAodGhpcy5zYXZpbmcpIHtcbiAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIGRhdGFUeXBlOiBuZXcoKSA9PiBULFxuICAgIHByb3RlY3RlZCBkYXRhU2VydmljZT86IFMsXG4gICAgQE9wdGlvbmFsKCkgb3B0aW9ucz86IEFwcEVkaXRvck9wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKSxcbiAgICAgIGluamVjdG9yLmdldChSb3V0ZXIpLFxuICAgICAgaW5qZWN0b3IuZ2V0KEFsZXJ0Q29udHJvbGxlciksXG4gICAgICBpbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSksXG4gICAgICBvcHRpb25zKTtcbiAgICBvcHRpb25zID0gPEFwcEVkaXRvck9wdGlvbnM+e1xuICAgICAgLy8gRGVmYXVsdCBvcHRpb25zXG4gICAgICBlbmFibGVMaXN0ZW5DaGFuZ2VzOiAoaW5qZWN0b3IuZ2V0KEVOVklST05NRU5UKS5saXN0ZW5SZW1vdGVDaGFuZ2VzID09PSB0cnVlKSxcbiAgICAgIHBhdGhJZEF0dHJpYnV0ZTogJ2lkJyxcbiAgICAgIGF1dG9Mb2FkOiB0cnVlLFxuICAgICAgYXV0b1VwZGF0ZVJvdXRlOiB0cnVlLFxuICAgICAgaTE4blByZWZpeDogJycsXG5cbiAgICAgIC8vIEZvbGxvd2luZyBvcHRpb25zIGFyZSBvdmVycmlkZSBpbnNpZGUgbmdPbkluaXQoKVxuICAgICAgLy8gYXV0b09wZW5OZXh0VGFiOiAuLi4sXG5cbiAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHRzXG4gICAgICAuLi5vcHRpb25zXG4gICAgfTtcblxuICAgIHRoaXMuc2V0dGluZ3MgPSBpbmplY3Rvci5nZXQoTG9jYWxTZXR0aW5nc1NlcnZpY2UpO1xuICAgIHRoaXMuY2QgPSBpbmplY3Rvci5nZXQoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHRoaXMuZGF0ZUZvcm1hdCA9IGluamVjdG9yLmdldChEYXRlRm9ybWF0UGlwZSk7XG4gICAgdGhpcy50b2FzdENvbnRyb2xsZXIgPSBpbmplY3Rvci5nZXQoVG9hc3RDb250cm9sbGVyKTtcbiAgICB0aGlzLl9lbmFibGVMaXN0ZW5DaGFuZ2VzID0gb3B0aW9ucy5lbmFibGVMaXN0ZW5DaGFuZ2VzO1xuICAgIHRoaXMuX3BhdGhJZEF0dHJpYnV0ZSA9IG9wdGlvbnMucGF0aElkQXR0cmlidXRlO1xuICAgIHRoaXMuX2F1dG9Mb2FkID0gb3B0aW9ucy5hdXRvTG9hZDtcbiAgICB0aGlzLl9hdXRvTG9hZERlbGF5ID0gb3B0aW9ucy5hdXRvTG9hZERlbGF5O1xuICAgIHRoaXMuX2F1dG9VcGRhdGVSb3V0ZSA9IG9wdGlvbnMuYXV0b1VwZGF0ZVJvdXRlO1xuICAgIHRoaXMuX2F1dG9PcGVuTmV4dFRhYiA9IG9wdGlvbnMuYXV0b09wZW5OZXh0VGFiO1xuICAgIHRoaXMuaTE4bkNvbnRleHQgPSB7XG4gICAgICBwcmVmaXg6IG9wdGlvbnMuaTE4blByZWZpeCxcbiAgICAgIHN1ZmZpeDogJydcbiAgICB9O1xuXG4gICAgLy8gRk9SIERFViBPTkxZIC0tLS1cbiAgICAvL3RoaXMuZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAvLyBEZWZhdWx0c1xuICAgIHRoaXMuX2F1dG9PcGVuTmV4dFRhYiA9IHRvQm9vbGVhbih0aGlzLl9hdXRvT3Blbk5leHRUYWIsICF0aGlzLmlzT25GaWVsZE1vZGUpO1xuICAgIHRoaXMuaGlzdG9yeUljb24gPSB0aGlzLmhpc3RvcnlJY29uIHx8IHtpY29uOiAnbGlzdCd9O1xuXG4gICAgLy8gUmVnaXN0ZXIgZm9ybXNcbiAgICB0aGlzLnJlZ2lzdGVyRm9ybXMoKTtcblxuICAgIC8vIERpc2FibGUgcGFnZSwgZHVyaW5nIGxvYWRcbiAgICB0aGlzLmRpc2FibGUoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcblxuICAgIC8vIExvYWQgZGF0YVxuICAgIGlmICh0aGlzLl9hdXRvTG9hZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmxvYWRGcm9tUm91dGUoKSwgdGhpcy5fYXV0b0xvYWREZWxheSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcblxuICAgIHRoaXMuJHRpdGxlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4kdGl0bGUudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uVXBkYXRlVmlldy5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25VcGRhdGVWaWV3LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBkYXRhIGZyb20gdGhlIHNuYXBzaG90IHJvdXRlXG4gICAqXG4gICAqIEBwYXJhbSByb3V0ZVxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgbG9hZEZyb21Sb3V0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByb3V0ZSA9IHRoaXMucm91dGUuc25hcHNob3Q7XG4gICAgaWYgKCFyb3V0ZSB8fCBpc05pbE9yQmxhbmsodGhpcy5fcGF0aElkQXR0cmlidXRlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gbG9hZCBmcm9tIHJvdXRlOiBtaXNzaW5nIFxcJ3JvdXRlXFwnIG9yIFxcJ29wdGlvbnMucGF0aElkQXR0cmlidXRlXFwnLicpO1xuICAgIH1cbiAgICBsZXQgaWQgPSByb3V0ZS5wYXJhbXNbdGhpcy5fcGF0aElkQXR0cmlidXRlXTtcbiAgICBpZiAoaXNOaWwoaWQpIHx8IGlkID09PSAnbmV3Jykge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZCh1bmRlZmluZWQsIHJvdXRlLnBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbnZlcnQgYXMgbnVtYmVyLCBpZiBuZWVkXG4gICAgICBpZiAoaXNJbnQoaWQpKSB7XG4gICAgICAgIGlkID0gcGFyc2VJbnQoaWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubG9hZChpZCwgcm91dGUucGFyYW1zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBkYXRhIGZyb20gaWQsIHVzaW5nIHRoZSBkYXRhU2VydmljZVxuICAgKlxuICAgKiBAcGFyYW0gaWRcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIGFzeW5jIGxvYWQoaWQ/OiBJRCwgb3B0cz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyAmIHtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICAgIG9wZW5UYWJJbmRleD86IG51bWJlcjtcbiAgICB1cGRhdGVUYWJBbmRSb3V0ZT86IGJvb2xlYW47XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9KSB7XG4gICAgaWYgKCF0aGlzLmRhdGFTZXJ2aWNlKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBsb2FkIGRhdGE6IG1pc3NpbmcgXFwnZGF0YVNlcnZpY2VcXCchJyk7XG5cbiAgICB0aGlzLmVycm9yID0gbnVsbDtcblxuICAgIC8vIE5ldyBkYXRhXG4gICAgaWYgKGlzTmlsKGlkKSkge1xuXG4gICAgICAvLyBDcmVhdGUgdXNpbmcgZGVmYXVsdCB2YWx1ZXNcbiAgICAgIGNvbnN0IGRhdGEgPSBuZXcgdGhpcy5kYXRhVHlwZSgpO1xuICAgICAgdGhpcy5fdXNhZ2VNb2RlID0gdGhpcy5jb21wdXRlVXNhZ2VNb2RlKGRhdGEpO1xuICAgICAgYXdhaXQgdGhpcy5vbk5ld0VudGl0eShkYXRhLCBvcHRzKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlVmlldyhkYXRhLCB7XG4gICAgICAgIG9wZW5UYWJJbmRleDogMCxcbiAgICAgICAgLi4ub3B0c1xuICAgICAgfSk7XG4gICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgIH1cblxuICAgIC8vIExvYWQgZXhpc3RpbmcgZGF0YVxuICAgIGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZGF0YVNlcnZpY2UubG9hZChpZCwgb3B0cyk7XG4gICAgICAgIGlmICghZGF0YSkgdGhyb3cge2NvZGU6IEVycm9yQ29kZXMuREFUQV9OT1RfRk9VTkRfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5EQVRBX05PX0ZPVU5EJ307XG4gICAgICAgIHRoaXMuX3VzYWdlTW9kZSA9IHRoaXMuY29tcHV0ZVVzYWdlTW9kZShkYXRhKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vbkVudGl0eUxvYWRlZChkYXRhLCBvcHRzKTtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVWaWV3KGRhdGEsIG9wdHMpO1xuICAgICAgICB0aGlzLnN0YXJ0TGlzdGVuUmVtb3RlQ2hhbmdlcygpO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnNldEVycm9yKGVycik7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGFydExpc3RlblJlbW90ZUNoYW5nZXMoKSB7XG4gICAgLy8gU2tpcCBpZiBkaXNhYmxlLCBvciBhbHJlYWR5IGxpc3RlbmluZ1xuICAgIGlmICh0aGlzLmhhc1JlbW90ZUxpc3RlbmVyIHx8ICF0aGlzLl9lbmFibGVMaXN0ZW5DaGFuZ2VzIHx8IHRoaXMuaXNOZXdEYXRhKSByZXR1cm47XG5cbiAgICAvLyBMaXN0ZW4gZm9yIGNoYW5nZXMgb24gc2VydmVyXG4gICAgdGhpcy5oYXNSZW1vdGVMaXN0ZW5lciA9IHRydWU7XG5cbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5kYXRhU2VydmljZS5saXN0ZW5DaGFuZ2VzKHRoaXMuZGF0YS5pZClcbiAgICAgICAgLnBpcGUoZmlsdGVyKGlzTm90TmlsKSlcbiAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogVCkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhLnVwZGF0ZURhdGUgJiYgKGRhdGEudXBkYXRlRGF0ZSBhcyBNb21lbnQpLmlzQWZ0ZXIodGhpcy5kYXRhLnVwZGF0ZURhdGUpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGlydHkpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFtkYXRhLWVkaXRvcl0gQ2hhbmdlcyBkZXRlY3RlZCBvbiBzZXJ2ZXIsIGF0IHske2RhdGEudXBkYXRlRGF0ZX19IDogcmVsb2FkaW5nIHBhZ2UuLi5gKTtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVWaWV3KGRhdGEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFtkYXRhLWVkaXRvcl0gQ2hhbmdlcyBkZXRlY3RlZCBvbiBzZXJ2ZXIsIGF0IHske2RhdGEudXBkYXRlRGF0ZX19LCBidXQgcGFnZSBpcyBkaXJ0eTogc2tpcCByZWxvYWRpbmcuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuYWRkKCgpID0+IHRoaXMuaGFzUmVtb3RlTGlzdGVuZXIgPSBmYWxzZSlcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVmlldyhkYXRhOiBUIHwgbnVsbCwgb3B0cz86IHtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICAgIG9wZW5UYWJJbmRleD86IG51bWJlcjtcbiAgICB1cGRhdGVSb3V0ZT86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpZENoYW5nZWQgPSBpc05vdE5pbChkYXRhLmlkKVxuICAgICAgJiYgdGhpcy5wcmV2aW91c0RhdGFJZCAhPT0gdW5kZWZpbmVkIC8vIElnbm9yZSBpZiBmaXJzdCBsb2FkaW5nICg9dW5kZWZpbmVkKVxuICAgICAgJiYgdGhpcy5wcmV2aW91c0RhdGFJZCAhPT0gZGF0YS5pZDtcblxuICAgIG9wdHMgPSB7XG4gICAgICB1cGRhdGVSb3V0ZTogdGhpcy5fYXV0b1VwZGF0ZVJvdXRlICYmIGlkQ2hhbmdlZCAmJiAhdGhpcy5sb2FkaW5nLFxuICAgICAgb3BlblRhYkluZGV4OiB0aGlzLl9hdXRvT3Blbk5leHRUYWIgJiYgaWRDaGFuZ2VkICYmIHRoaXMuY29tcHV0ZU5leHRUYWJJbmRleCgpLFxuICAgICAgLi4ub3B0c1xuICAgIH07XG5cbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMucHJldmlvdXNEYXRhSWQgPSBkYXRhLmlkIHx8IG51bGw7XG5cbiAgICBjb25zdCBwcm9taXNlT3JWb2lkID0gdGhpcy5zZXRWYWx1ZShkYXRhKTtcbiAgICBpZiAocHJvbWlzZU9yVm9pZCkgYXdhaXQgcHJvbWlzZU9yVm9pZDtcblxuICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgIHRoaXMubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICB0aGlzLnVwZGF0ZVZpZXdTdGF0ZShkYXRhKTtcblxuICAgICAgLy8gTmVlZCB0byB1cGRhdGUgcm91dGVcbiAgICAgIGlmIChvcHRzLnVwZGF0ZVJvdXRlID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVGFiQW5kUm91dGUoZGF0YSwgb3B0cylcbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIHRpdGxlIC0gc2hvdWxkIGJlIGV4ZWN1dGVkIEFGVEVSIHVwZGF0ZVJvdXRlIGJlY2F1c2Ugb2YgcGF0aCBjaGFuZ2UgLSBmaXggIzE4NVxuICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMudXBkYXRlVGl0bGUoZGF0YSkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgdGFnIGdyb3VwIGluZGV4XG4gICAgICAgIHRoaXMudXBkYXRlVGFiSW5kZXgob3B0cy5vcGVuVGFiSW5kZXgpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgdGl0bGUuXG4gICAgICAgIHRoaXMudXBkYXRlVGl0bGUoZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub25VcGRhdGVWaWV3LmVtaXQoZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIHN0YXRlXG4gICAqL1xuICB1cGRhdGVWaWV3U3RhdGUoZGF0YTogVCwgb3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmlzTmV3RGF0YSB8fCB0aGlzLmNhblVzZXJXcml0ZShkYXRhKSkge1xuICAgICAgdGhpcy5lbmFibGUob3B0cyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5kaXNhYmxlKG9wdHMpO1xuXG4gICAgICAvLyBBbGxvdyB0byBzb3J0IHRhYmxlXG4gICAgICB0aGlzLnRhYmxlcy5mb3JFYWNoKHQgPT4gdC5lbmFibGVTb3J0KCkpO1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcm91dGUgbG9jYXRpb24sIGFuZCBvcGVuIHRoZSBuZXh0IHRhYlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlVGFiQW5kUm91dGUoZGF0YTogVCwgb3B0cz86IHtcbiAgICBvcGVuVGFiSW5kZXg/OiBudW1iZXI7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcblxuICAgIHRoaXMucXVlcnlQYXJhbXMgPSB0aGlzLnF1ZXJ5UGFyYW1zIHx8IHt9O1xuXG4gICAgLy8gT3BlbiB0aGUgdGFiIGdyb3VwXG4gICAgdGhpcy51cGRhdGVUYWJJbmRleChvcHRzICYmIG9wdHMub3BlblRhYkluZGV4KTtcblxuICAgIC8vIFNhdmUgdGhlIG9wZW5lZCB0YWIgaW50byB0aGUgcXVlcnlQYXJhbXNcbiAgICB0aGlzLnF1ZXJ5UGFyYW1zLnRhYiA9IHRoaXMuc2VsZWN0ZWRUYWJJbmRleDtcblxuICAgIC8vIFVwZGF0ZSByb3V0ZSBsb2NhdGlvblxuICAgIGNvbnN0IGZvcmNlZFF1ZXJ5UGFyYW1zID0ge307XG4gICAgZm9yY2VkUXVlcnlQYXJhbXNbdGhpcy5fcGF0aElkQXR0cmlidXRlXSA9IGRhdGEgJiYgaXNOb3ROaWwoZGF0YS5pZCkgPyBkYXRhLmlkIDogJ25ldyc7XG4gICAgaWYgKGRhdGEgJiYgaXNOb3ROaWwoZGF0YS5pZCkpIHtcbiAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLiddLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7Li4udGhpcy5xdWVyeVBhcmFtcywgLi4uZm9yY2VkUXVlcnlQYXJhbXN9XG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uJywgJ25ldyddLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7Li4udGhpcy5xdWVyeVBhcmFtcywgLi4uZm9yY2VkUXVlcnlQYXJhbXN9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVJvdXRlKGRhdGEsIHRoaXMucXVlcnlQYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcm91dGUgbG9jYXRpb24sIGFuZCBvcGVuIHRoZSBuZXh0IHRhYlxuICAgKi9cbiAgdXBkYXRlVGFiSW5kZXgodGFiSW5kZXg/OiBudW1iZXIpIHtcblxuICAgIC8vIE9wZW4gdGhlIHNlY29uZCB0YWJcbiAgICBpZiAoaXNOb3ROaWwodGFiSW5kZXgpKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFRhYkluZGV4ICE9PSB0YWJJbmRleCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0YWJJbmRleDtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlQW5kQ2xvc2UoZXZlbnQ6IEV2ZW50LCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG5cbiAgICBjb25zdCBzYXZlZCA9IGF3YWl0IHRoaXMuc2F2ZShldmVudCk7XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICBhd2FpdCB0aGlzLmNsb3NlKGV2ZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHNhdmVkO1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nb0JhY2soKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoZXZlbnQ/OiBFdmVudCwgb3B0aW9ucz86IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmxvYWRpbmcgfHwgdGhpcy5zYXZpbmcpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tkYXRhLWVkaXRvcl0gU2tpcCBzYXZlOiBlZGl0b3IgaXMgYnVzeSAobG9hZGluZyBvciBzYXZpbmcpJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghdGhpcy5kaXJ0eSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2RhdGEtZWRpdG9yXSBTa2lwIHNhdmU6IGVkaXRvciBub3QgZGlydHknKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFdhaXQgZW5kIG9mIGFzeW5jIHZhbGlkYXRpb25cbiAgICBhd2FpdCB0aGlzLndhaXRXaGlsZVBlbmRpbmcoKTtcblxuICAgIC8vIElmIGludmFsaWRcbiAgICBpZiAodGhpcy5pbnZhbGlkKSB7XG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHRoaXMubG9nRm9ybUVycm9ycygpO1xuICAgICAgdGhpcy5vcGVuRmlyc3RJbnZhbGlkVGFiKCk7XG5cbiAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLm1hcmtBc1NhdmluZygpO1xuICAgIHRoaXMuZXJyb3IgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2RhdGEtZWRpdG9yXSBTYXZpbmcgZGF0YS4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCBkYXRhXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5nZXRWYWx1ZSgpO1xuXG4gICAgICB0aGlzLmRpc2FibGUoKTtcblxuICAgICAgLy8gU2F2ZSBmb3JtXG4gICAgICBjb25zdCB1cGRhdGVkRGF0YSA9IGF3YWl0IHRoaXMuZGF0YVNlcnZpY2Uuc2F2ZShkYXRhLCBvcHRpb25zKTtcblxuICAgICAgYXdhaXQgdGhpcy5vbkVudGl0eVNhdmVkKHVwZGF0ZWREYXRhKTtcblxuICAgICAgLy8gVXBkYXRlIHRoZSB2aWV3IChlLmcgbWV0YWRhdGEpXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVZpZXcodXBkYXRlZERhdGEsIG9wdGlvbnMpO1xuXG4gICAgICAvLyBTdWJzY3JpYmUgdG8gcmVtb3RlIGNoYW5nZXNcbiAgICAgIGlmICghdGhpcy5oYXNSZW1vdGVMaXN0ZW5lcikgdGhpcy5zdGFydExpc3RlblJlbW90ZUNoYW5nZXMoKTtcblxuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICB0aGlzLnNldEVycm9yKGVycik7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwO1xuICAgICAgdGhpcy5zY3JvbGxUb1RvcCgpOyAvLyBTY3JvbGwgdG8gdG9wICh0byBzaG93IGVycm9yKVxuICAgICAgdGhpcy5tYXJrQXNEaXJ0eSgpO1xuICAgICAgdGhpcy5lbmFibGUoKTtcblxuICAgICAgLy8gQ29uY3VycmVudCBjaGFuZ2Ugb24gcG9kXG4gICAgICBpZiAoZXJyLmNvZGUgPT09IFNlcnZlckVycm9yQ29kZXMuQkFEX1VQREFURV9EQVRFICYmIGlzTm90TmlsKHRoaXMuZGF0YS5pZCkpIHtcbiAgICAgICAgLy8gQ2FsbCBhIGRhdGEgcmVsb2FkIChpbiBiYWNrZ3JvdW5kKSwgdG8gdXBkYXRlIHRoZSBHcmFwaFFMIGNhY2hlLCBhbmQgYWxsb3cgdG8gY2FuY2VsIGNoYW5nZXNcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5sb2FkKHRoaXMuZGF0YS5pZCwge2ZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5J30pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1tkYXRhLWVkaXRvcl0gRGF0YSBjYWNoZSByZWxvYWRlZC4gVXNlciBjYW4gcmVsb2FkIHBhZ2UnKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5tYXJrQXNTYXZlZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGRhdGEgKGlmIGRpcnR5IGFuZCB2YWxpZCksIGFuZCByZXR1cm4gaXQuIE90aGVyd2lzZSwgcmV0dXJuIG5pbCB2YWx1ZS5cbiAgICovXG4gIGFzeW5jIHNhdmVBbmRHZXREYXRhSWZWYWxpZCgpOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICAvLyBGb3JtIGlzIG5vdCB2YWxpZFxuICAgIGlmICghdGhpcy52YWxpZCkge1xuXG4gICAgICAvLyBNYWtlIHN1cmUgdmFsaWRhdGlvbiBpcyBmaW5pc2hlZFxuICAgICAgYXdhaXQgQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcodGhpcyk7XG5cbiAgICAgIC8vIElmIGludmFsaWQ6IE9wZW4gdGhlIGZpcnN0IHRhYiBpbiBlcnJvclxuICAgICAgaWYgKHRoaXMuaW52YWxpZCkge1xuICAgICAgICB0aGlzLm9wZW5GaXJzdEludmFsaWRUYWIoKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ29udGludWUgKHZhbGlkKVxuICAgIH1cblxuICAgIC8vIEZvcm0gaXMgdmFsaWQsIGJ1dCBub3Qgc2F2ZWRcbiAgICBpZiAodGhpcy5kaXJ0eSkge1xuICAgICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLnNhdmUobmV3IEV2ZW50KCdzYXZlJykpO1xuICAgICAgaWYgKCFzYXZlZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBWYWxpZCBhbmQgc2F2ZWQgZGF0YVxuICAgIHJldHVybiB0aGlzLmRhdGE7XG4gIH1cblxuICBhc3luYyBkZWxldGUoZXZlbnQ/OiBVSUV2ZW50KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMubG9hZGluZyB8fCB0aGlzLnNhdmluZykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gQXNrIHVzZXIgY29uZmlybWF0aW9uXG4gICAgY29uc3QgY29uZmlybWF0aW9uID0gYXdhaXQgQWxlcnRzLmFza0RlbGV0ZUNvbmZpcm1hdGlvbih0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUpO1xuICAgIGlmICghY29uZmlybWF0aW9uKSByZXR1cm47XG5cbiAgICBjb25zb2xlLmRlYnVnKCdbZGF0YS1lZGl0b3JdIEFza2luZyB0byBkZWxldGUuLi4nKTtcblxuICAgIHRoaXMubWFya0FzU2F2aW5nKCk7XG4gICAgdGhpcy5lcnJvciA9IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgZGF0YVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0VmFsdWUoKTtcbiAgICAgIGNvbnN0IGlzTmV3ID0gdGhpcy5pc05ld0RhdGE7XG5cbiAgICAgIHRoaXMuZGlzYWJsZSgpO1xuXG4gICAgICBpZiAoIWlzTmV3KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGF0YVNlcnZpY2UuZGVsZXRlKGRhdGEpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLm9uRW50aXR5RGVsZXRlZChkYXRhKTtcblxuICAgICAgLy8gUmVtb3ZlIHBhZ2UgaGlzdG9yeVxuICAgICAgdGhpcy5yZW1vdmVQYWdlSGlzdG9yeSgpO1xuXG5cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0RXJyb3IoZXJyKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7XG4gICAgICB0aGlzLm1hcmtBc1NhdmVkKCk7XG4gICAgICB0aGlzLmVuYWJsZSgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFdhaXQsIHRoZW4gZ28gYmFjayAod2FpdCBpcyBuZWVkIGluIG9yZGVyIHRvIHVwZGF0ZSBiYWNrIGhyZWYgaXMgbmVlZClcbiAgICBhd2FpdCBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZ29CYWNrKCksIDUwMCk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHJlbG9hZCgpIHtcbiAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcbiAgICBhd2FpdCB0aGlzLmxvYWQodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5pZCk7XG4gIH1cblxuICBhc3luYyBnb0JhY2soZXZlbnQ/OiBFdmVudCk6IFByb21pc2U8dm9pZCB8IGJvb2xlYW4+IHtcbiAgICAvLyBHbyBiYWNrXG4gICAgaWYgKHRoaXMudG9vbGJhcj8uY2FuR29CYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy50b29sYmFyLmdvQmFjaygpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmRlZmF1bHRCYWNrSHJlZikge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5kZWZhdWx0QmFja0hyZWYpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCYWNrIHRvIGhvbWVcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJyk7XG4gICAgfVxuICB9XG5cbiAgc2V0RXJyb3IoZXJyOiBhbnkpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbZGF0YS1lZGl0b3JdICcgKyBlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyLCBlcnIpO1xuICAgIGxldCB1c2VyTWVzc2FnZSA9IGVyciAmJiBlcnIubWVzc2FnZSAmJiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGVyci5tZXNzYWdlKSB8fCBlcnI7XG5cbiAgICAvLyBBZGQgZGV0YWlscyBlcnJvciAoaWYgYW55KSB1bmRlciB0aGUgbWFpbiBtZXNzYWdlXG4gICAgY29uc3QgZGV0YWlsTWVzc2FnZSA9IGVyciAmJiBlcnIuZGV0YWlscyAmJiAoZXJyLmRldGFpbHMubWVzc2FnZSB8fCBlcnIuZGV0YWlscykgfHwgdW5kZWZpbmVkO1xuICAgIGlmIChkZXRhaWxNZXNzYWdlKSB7XG4gICAgICB1c2VyTWVzc2FnZSArPSBgPGJyLz48c21hbGwgY2xhc3M9XCJoaWRkZW4teHMgaGlkZGVuLXNtXCIgdGl0bGU9XCIke2RldGFpbE1lc3NhZ2V9XCI+YDtcbiAgICAgIHVzZXJNZXNzYWdlICs9IGRldGFpbE1lc3NhZ2UubGVuZ3RoIDwgNzAgPyBkZXRhaWxNZXNzYWdlIDogZGV0YWlsTWVzc2FnZS5zdWJzdHJpbmcoMCwgNjcpICsgJy4uLic7XG4gICAgICB1c2VyTWVzc2FnZSArPSAnPC9zbWFsbD4nO1xuICAgIH1cbiAgICB0aGlzLmVycm9yID0gdXNlck1lc3NhZ2U7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgYWJzdHJhY3QgbWV0aG9kcyAodG8gb3ZlcnJpZGUpIC0tICovXG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlZ2lzdGVyRm9ybXMoKTtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY29tcHV0ZVRpdGxlKGRhdGE6IFQpOiBQcm9taXNlPHN0cmluZz47XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNldFZhbHVlKGRhdGE6IFQpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IGZvcm0oKTogRm9ybUdyb3VwO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRGaXJzdEludmFsaWRUYWJJbmRleCgpOiBudW1iZXI7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNhblVzZXJXcml0ZShkYXRhOiBUKTogYm9vbGVhbjtcblxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIGNvbXB1dGVOZXh0VGFiSW5kZXgoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRhYkluZGV4ICsgMSA8IHRoaXMudGFiQ291bnQgPyB0aGlzLnNlbGVjdGVkVGFiSW5kZXggKyAxIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgdW5sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZm9ybS5yZXNldCgpO1xuICAgIHRoaXMucmVnaXN0ZXJGb3JtcygpO1xuICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uQmVmb3JlRW50aXR5TG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBjYW4gYmUgb3ZlcndyaXRlIGJ5IHN1YmNsYXNzZXNcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvbk5ld0VudGl0eShkYXRhOiBULCBvcHRpb25zPzogRW50aXR5U2VydmljZUxvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0ZSBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25FbnRpdHlMb2FkZWQoZGF0YTogVCwgb3B0aW9ucz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdGUgYnkgc3ViY2xhc3Nlc1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uRW50aXR5U2F2ZWQoZGF0YTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNhbiBiZSBvdmVyd3JpdGUgYnkgc3ViY2xhc3Nlc1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uRW50aXR5RGVsZXRlZChkYXRhOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY2FuIGJlIG92ZXJ3cml0ZSBieSBzdWJjbGFzc2VzXG4gIH1cblxuICBwcm90ZWN0ZWQgY29tcHV0ZVVzYWdlTW9kZShkYXRhOiBUKTogVXNhZ2VNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5pc1VzYWdlTW9kZSgnRklFTEQnKSA/ICdGSUVMRCcgOiAnREVTSyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgd2FpdFdoaWxlUGVuZGluZyhvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gQXBwRm9ybVV0aWxzLndhaXRXaGlsZVBlbmRpbmcodGhpcywgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VmFsdWUoKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QganNvbiA9IGF3YWl0IHRoaXMuZ2V0SnNvblZhbHVlVG9TYXZlKCk7XG5cbiAgICBjb25zdCByZXMgPSBuZXcgdGhpcy5kYXRhVHlwZSgpO1xuICAgIHJlcy5mcm9tT2JqZWN0KGpzb24pO1xuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRKc29uVmFsdWVUb1NhdmUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuZm9ybS52YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgdGl0bGVcbiAgICpcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyB1cGRhdGVUaXRsZShkYXRhPzogVCkge1xuICAgIGRhdGEgPSBkYXRhIHx8IHRoaXMuZGF0YTtcbiAgICBjb25zdCB0aXRsZSA9IGF3YWl0IHRoaXMuY29tcHV0ZVRpdGxlKGRhdGEpO1xuICAgIHRoaXMuJHRpdGxlLm5leHQodGl0bGUpO1xuXG4gICAgLy8gSWYgTk9UIGRhdGEsIHRoZW4gYWRkIHRvIHBhZ2UgaGlzdG9yeVxuICAgIGlmICghdGhpcy5pc05ld0RhdGEpIHtcbiAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLmNvbXB1dGVQYWdlSGlzdG9yeSh0aXRsZSk7XG4gICAgICByZXR1cm4gdGhpcy5hZGRUb1BhZ2VIaXN0b3J5KHBhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhZGRUb1BhZ2VIaXN0b3J5KHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlLCBvcHRzPzogQWRkVG9QYWdlSGlzdG9yeU9wdGlvbnMpIHtcbiAgICBpZiAoIXBhZ2UpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuYWRkVG9QYWdlSGlzdG9yeShwYWdlLCB7XG4gICAgICByZW1vdmVQYXRoUXVlcnlQYXJhbXM6IHRydWUsXG4gICAgICByZW1vdmVUaXRsZVNtYWxsVGFnOiB0cnVlLFxuICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgIC4uLm9wdHNcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjb21wdXRlUGFnZUhpc3RvcnkodGl0bGU6IHN0cmluZyk6IFByb21pc2U8SGlzdG9yeVBhZ2VSZWZlcmVuY2U+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGUsXG4gICAgICBwYXRoOiB0aGlzLnJvdXRlci51cmxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlbW92ZVBhZ2VIaXN0b3J5KG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnJlbW92ZVBhZ2VIaXN0b3J5KHRoaXMucm91dGVyLnVybCwgb3B0cyk7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBjb21wdXRlUGFnZVVybChpZDogSUR8J25ldycpOiBzdHJpbmcgfCBhbnlbXSB7XG4gICAgY29uc3QgcGFyZW50VXJsID0gdGhpcy5nZXRQYXJlbnRQYWdlVXJsKCk7XG4gICAgcmV0dXJuIHBhcmVudFVybCAmJiBgJHtwYXJlbnRVcmx9LyR7aWR9YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQYXJlbnRQYWdlVXJsKHdpdGhRdWVyeVBhcmFtcz86IGJvb2xlYW4pIHtcbiAgICBsZXQgcGFyZW50VXJsID0gdGhpcy5kZWZhdWx0QmFja0hyZWY7XG5cbiAgICAvLyBSZW1vdmUgcXVlcnkgcGFyYW1zXG4gICAgaWYgKHdpdGhRdWVyeVBhcmFtcyAhPT0gdHJ1ZSAmJiBwYXJlbnRVcmwgJiYgcGFyZW50VXJsLmluZGV4T2YoJz8nKSAhPT0gLTEpIHtcbiAgICAgIHBhcmVudFVybCA9IHBhcmVudFVybC5zdWJzdHIoMCwgcGFyZW50VXJsLmluZGV4T2YoJz8nKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudFVybDtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgZnVuY3Rpb25zIC0tICovXG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIGZpcnN0IHRhYiB0aGF0IGlzIGludmFsaWRcbiAgICovXG4gIHByaXZhdGUgb3BlbkZpcnN0SW52YWxpZFRhYigpIHtcbiAgICBjb25zdCBpbnZhbGlkVGFiSW5kZXggPSB0aGlzLmdldEZpcnN0SW52YWxpZFRhYkluZGV4KCk7XG4gICAgaWYgKGludmFsaWRUYWJJbmRleCAhPT0gLTEgJiYgdGhpcy5zZWxlY3RlZFRhYkluZGV4ICE9PSBpbnZhbGlkVGFiSW5kZXgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGludmFsaWRUYWJJbmRleDtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHVwZGF0ZVJvdXRlKGRhdGE6IFQsIHF1ZXJ5UGFyYW1zOiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jb21wdXRlUGFnZVVybChpc05vdE5pbChkYXRhLmlkKSA/IGRhdGEuaWQgOiAnbmV3Jyk7XG4gICAgY29uc3QgY29tbWFuZHM6IGFueVtdID0gKHBhdGggJiYgdHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSA/IHBhdGguc3BsaXQoJy8nKSA6IHBhdGggYXMgYW55W107XG4gICAgaWYgKGlzTm90RW1wdHlBcnJheShjb21tYW5kcykpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShjb21tYW5kcywge1xuICAgICAgICByZXBsYWNlVXJsOiB0cnVlLFxuICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5xdWVyeVBhcmFtc1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdTa2lwIHBhZ2Ugcm91dGUgdXBkYXRlLiBJbnZhbGlkIHBhZ2UgcGF0aDogJywgcGF0aCk7XG4gICAgfVxuICB9XG59XG5cbiJdfQ==
|
|
@@ -176,12 +176,10 @@ export class EntitiesTableDataSource extends TableDataSource {
|
|
|
176
176
|
this._stopWatching$.next();
|
|
177
177
|
}
|
|
178
178
|
waitIdle(debounceTimeMs) {
|
|
179
|
-
return
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
));
|
|
184
|
-
});
|
|
179
|
+
return firstFalsePromise(this.loadingSubject
|
|
180
|
+
.asObservable()
|
|
181
|
+
.pipe(debounceTime(debounceTimeMs || 100) // if not started yet, wait
|
|
182
|
+
));
|
|
185
183
|
}
|
|
186
184
|
confirmCreate(row) {
|
|
187
185
|
if (!super.confirmCreate(row))
|
|
@@ -325,4 +323,4 @@ EntitiesTableDataSource.ctorParameters = () => [
|
|
|
325
323
|
{ type: ValidatorService },
|
|
326
324
|
{ type: AppTableDataSourceOptions }
|
|
327
325
|
];
|
|
328
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS90YWJsZS9lbnRpdGllcy10YWJsZS1kYXRhc291cmNlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFnQixnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pGLE9BQU8sRUFBQyxlQUFlLEVBQWMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTFELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEUsT0FBTyxFQUFDLFNBQVMsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUtuRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRSxPQUFPLEVBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDdkYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQVE1QyxNQUFNLE9BQU8seUJBQXlCO0NBV3JDO0FBRUQsV0FBVztBQUVYLGtFQUFrRTtBQUNsRSxNQUFNLE9BQU8sdUJBS1QsU0FBUSxlQUFrQjtJQW1DNUI7Ozs7Ozs7O09BUUc7SUFDSCxZQUFZLFFBQW9CLEVBQ0osV0FBc0MsRUFDdEQsZ0JBQW1DLEVBQ25DLE1BQTRDO1FBQ3RELEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBSHBCLGdCQUFXLEdBQVgsV0FBVyxDQUEyQjtRQXRDeEQsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixZQUFP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ZSwgVGFibGVFbGVtZW50LCBWYWxpZGF0b3JTZXJ2aWNlfSBmcm9tICdAZS1pcy9uZ3gtbWF0ZXJpYWwtdGFibGUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtFbnRpdHksIElFbnRpdHl9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQge0Vycm9yQ29kZXN9IGZyb20gJy4uL3NlcnZpY2VzL2Vycm9ycyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGRlYm91bmNlVGltZSwgbWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RGlyZWN0aXZlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTb3J0RGlyZWN0aW9ufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7Q29sbGVjdGlvblZpZXdlcn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7VGFibGVEYXRhU291cmNlT3B0aW9uc30gZnJvbSAnQGUtaXMvbmd4LW1hdGVyaWFsLXRhYmxlL3NyYy9hcHAvbmd4LW1hdGVyaWFsLXRhYmxlL3RhYmxlLWRhdGEtc291cmNlJztcbmltcG9ydCB7RW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zLCBJRW50aXRpZXNTZXJ2aWNlLCBMb2FkUmVzdWx0fSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtmaXJzdEZhbHNlUHJvbWlzZSwgZmlyc3ROb3ROaWxQcm9taXNlfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHtpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCByZW1vdmVFbmQsIHRvQm9vbGVhbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0FwcFRhYmxlVXRpbHN9IGZyb20gJy4vdGFibGUudXRpbHMnO1xuXG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBBcHBUYWJsZURhdGFTZXJ2aWNlT3B0aW9uczxPIGV4dGVuZHMgRW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zID0gRW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zPiBleHRlbmRzIEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbiAgc2F2ZU9ubHlEaXJ0eVJvd3M/OiBib29sZWFuO1xuICByZWFkT25seT86IGJvb2xlYW47XG59XG5leHBvcnQgY2xhc3MgQXBwVGFibGVEYXRhU291cmNlT3B0aW9uczxcbiAgVCBleHRlbmRzIEVudGl0eTxULCBJRD4sXG4gIElEID0gbnVtYmVyLFxuICBPIGV4dGVuZHMgRW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zID0gRW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zPiBpbXBsZW1lbnRzIFRhYmxlRGF0YVNvdXJjZU9wdGlvbnMge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIHByZXBlbmROZXdFbGVtZW50cz86IGJvb2xlYW47XG4gIHN1cHByZXNzRXJyb3JzPzogYm9vbGVhbjtcbiAga2VlcE9yaWdpbmFsRGF0YUFmdGVyQ29uZmlybT86IGJvb2xlYW47XG4gIG9uUm93Q3JlYXRlZD86IChyb3c6IFRhYmxlRWxlbWVudDxUPikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gIGRhdGFTZXJ2aWNlT3B0aW9ucz86IEFwcFRhYmxlRGF0YVNlcnZpY2VPcHRpb25zPE8+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG59XG5cbi8vIEBkeW5hbWljXG5ARGlyZWN0aXZlKClcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGNsYXNzIEVudGl0aWVzVGFibGVEYXRhU291cmNlPFxuICBUIGV4dGVuZHMgSUVudGl0eTxULCBJRD4sXG4gIEYgPSBhbnksXG4gIElEID0gbnVtYmVyLFxuICBPIGV4dGVuZHMgRW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zID0gRW50aXRpZXNTZXJ2aWNlV2F0Y2hPcHRpb25zPlxuICAgIGV4dGVuZHMgVGFibGVEYXRhU291cmNlPFQ+XG4gICAgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ1R5cGVOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IEFwcFRhYmxlRGF0YVNvdXJjZU9wdGlvbnM8VCwgSUQsIE8+O1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBfZGVidWc6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBfY3JlYXRpbmcgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF9zYXZpbmcgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF91c2VWYWxpZGF0b3IgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF9zdG9wV2F0Y2hpbmckID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICBwcm90ZWN0ZWQgX2VkaXRpbmdSb3dDb3VudCA9IDA7XG5cbiAgbG9hZGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHVuZGVmaW5lZCk7XG5cbiAgZ2V0IHNlcnZpY2VPcHRpb25zKCk6IEFwcFRhYmxlRGF0YVNlcnZpY2VPcHRpb25zPE8+IHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucy5kYXRhU2VydmljZU9wdGlvbnM7XG4gIH1cblxuICBzZXQgc2VydmljZU9wdGlvbnModmFsdWU6IEFwcFRhYmxlRGF0YVNlcnZpY2VPcHRpb25zPE8+KSAge1xuICAgIHRoaXMuX29wdGlvbnMuZGF0YVNlcnZpY2VPcHRpb25zID0gdmFsdWU7XG4gIH1cblxuICBnZXQgb3B0aW9ucygpOiBBcHBUYWJsZURhdGFTb3VyY2VPcHRpb25zPFQsIElELCBPPiB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICBnZXQgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlID09PSBmYWxzZTsgLy8gU2hvdWxkIGJlIGZhbHNlIHdoZW4gdW5kZWZpbmVkIChpbml0aWFsIHN0YXRlKVxuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGluZ1N1YmplY3QudmFsdWUgIT09IGZhbHNlOyAvLyBTaG91bGQgYmUgdHJ1ZSB3aGVuIHVuZGVmaW5lZCAoaW5pdGlhbCBzdGF0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IFRhYmxlRGF0YVNvdXJjZSBpbnN0YW5jZSwgdGhhdCBjYW4gYmUgdXNlZCBhcyBkYXRhc291cmNlIG9mIGBAYW5ndWxhci9jZGtgIGRhdGEtdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhU2VydmljZSBBIHNlcnZpY2UgdG8gbG9hZCBhbmQgc2F2ZSBkYXRhXG4gICAqIEBwYXJhbSBkYXRhVHlwZSBUeXBlIG9mIGRhdGEgY29udGFpbmVkIGJ5IHRoZSBUYWJsZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlbiBgZGF0YWAgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudCBtdXN0IGJlIHNwZWNpZmllZC5cbiAgICogQHBhcmFtIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSB2YWxpZGF0b3JTZXJ2aWNlIFNlcnZpY2UgdGhhdCBjcmVhdGUgaW5zdGFuY2VzIG9mIHRoZSBGb3JtR3JvdXAgdXNlZCB0byB2YWxpZGF0ZSByb3cgZmllbGRzLlxuICAgKiBAcGFyYW0gY29uZmlnIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGFibGUuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihkYXRhVHlwZTogbmV3KCkgPT4gVCxcbiAgICAgICAgICAgICAgcHVibGljIHJlYWRvbmx5IGRhdGFTZXJ2aWNlOiBJRW50aXRpZXNTZXJ2aWNlPFQsIEYsIE8+LFxuICAgICAgICAgICAgICB2YWxpZGF0b3JTZXJ2aWNlPzogVmFsaWRhdG9yU2VydmljZSxcbiAgICAgICAgICAgICAgY29uZmlnPzogQXBwVGFibGVEYXRhU291cmNlT3B0aW9uczxULCBJRCwgTz4pIHtcbiAgICBzdXBlcihbXSwgZGF0YVR5cGUsIHZhbGlkYXRvclNlcnZpY2UsIGNvbmZpZyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IHtcbiAgICAgIGRhdGFTZXJ2aWNlT3B0aW9uczoge30sXG4gICAgICBkZWJ1ZzogY29uZmlnICYmIGNvbmZpZy5zdXBwcmVzc0Vycm9ycyA9PT0gZmFsc2UsXG4gICAgICBrZWVwT3JpZ2luYWxEYXRhQWZ0ZXJDb25maXJtOiBmYWxzZSxcbiAgICAgIC4uLmNvbmZpZ1xuICAgIH07XG4gICAgdGhpcy5fdXNlVmFsaWRhdG9yID0gaXNOb3ROaWwodmFsaWRhdG9yU2VydmljZSk7XG5cbiAgICB0aGlzLl9sb2dUeXBlTmFtZSA9IHJlbW92ZUVuZCgobmV3IGRhdGFUeXBlKCkpLl9fdHlwZW5hbWUgfHwgJ1Vua25vd25WTycsICdWTycpO1xuXG4gICAgLy8gRm9yIERFViBPTkxZXG4gICAgdGhpcy5fZGVidWcgPSB0aGlzLl9vcHRpb25zLmRlYnVnID09PSB0cnVlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3RvcFdhdGNoaW5nJC5uZXh0KCk7XG4gICAgdGhpcy5fc3RvcFdhdGNoaW5nJC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3N0b3BXYXRjaGluZyQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmxvYWRpbmdTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5sb2FkaW5nU3ViamVjdC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgd2F0Y2hBbGwob2Zmc2V0OiBudW1iZXIsXG4gICAgICAgICAgIHNpemU6IG51bWJlcixcbiAgICAgICAgICAgc29ydEJ5Pzogc3RyaW5nLFxuICAgICAgICAgICBzb3J0RGlyZWN0aW9uPzogU29ydERpcmVjdGlvbixcbiAgICAgICAgICAgZmlsdGVyPzogUGFydGlhbDxGPik6IE9ic2VydmFibGU8TG9hZFJlc3VsdDxUPj4ge1xuXG4gICAgdGhpcy5fc3RvcFdhdGNoaW5nJC5uZXh0KCk7XG4gICAgdGhpcy5fZWRpdGluZ1Jvd0NvdW50ID0gMDtcbiAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcblxuICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLndhdGNoQWxsKG9mZnNldCwgc2l6ZSwgc29ydEJ5LCBzb3J0RGlyZWN0aW9uLCBmaWx0ZXIsIHRoaXMuc2VydmljZU9wdGlvbnMgYXMgTylcbiAgICAgIC5waXBlKFxuICAgICAgICAvLyBTdG9wIHRoaXMgcGlwZSBuZXh0IHRpbWUgd2UgY2FsbCB3YXRjaEFsbCgpXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9zdG9wV2F0Y2hpbmckKSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsICdFUlJPUi5MT0FEX0RBVEFfRVJST1InKSksXG4gICAgICAgIG1hcCgocmVzOiBMb2FkUmVzdWx0PFQ+KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX3NhdmluZykge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKGBbdGFibGUtZGF0YXNvdXJjZV0gUmVjZWl2ZWQgJHt0aGlzLl9sb2dUeXBlTmFtZX0gZGF0YSAoZnJvbSBzZXJ2aWNlKSwgYnV0IHN0aWxsIHNhdmluZzogc2tpcGApO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fZWRpdGluZ1Jvd0NvdW50ID4gMCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBbdGFibGUtZGF0YXNvdXJjZV0gUmVjZWl2ZWQgJHt0aGlzLl9sb2dUeXBlTmFtZX0gZGF0YSwgd2hpbGUgJHt0aGlzLl9lZGl0aW5nUm93Q291bnR9IHJvd3Mgc3RpbGwgZWRpdGluZzogc2tpcDsgUGxlYXNlIGNoZWNrIHNhdmUoKSBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgdGFibGUhYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YXNvdXJjZSgocmVzLmRhdGEgfHwgW10pIGFzIFRbXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgYXN5bmMgc2F2ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodG9Cb29sZWFuKHRoaXMuc2VydmljZU9wdGlvbnMucmVhZE9ubHksIGZhbHNlKSkge1xuICAgICAgY29uc29sZS5lcnJvcignW3RhYmxlLWRhdGFzb3VyY2VdIEVuYWJsZSB0byBzYXZlLCBiZWNhdXNlIHNlcnZpY2VPcHRpb25zLnJlYWRPbmx5PXRydWUnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gU2F2aW5nIHR3aWNlIChzaG91bGQgbmV2ZXIgb2NjdXIpXG4gICAgaWYgKHRoaXMuX3NhdmluZykge1xuICAgICAgY29uc29sZS53YXJuKGBbdGFibGUtZGF0YXNvdXJjZV0gVHJ5aW5nIHRvIHNhdmUgJHt0aGlzLl9sb2dUeXBlTmFtZX0gcm93cyB0d2ljZS4gU2tpcGApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuX3NhdmluZyA9IHRydWU7XG4gICAgdGhpcy5tYXJrQXNMb2FkaW5nKCk7XG5cbiAgICBjb25zdCBvbmx5RGlydHlSb3dzID0gdG9Cb29sZWFuKHRoaXMuc2VydmljZU9wdGlvbnMuc2F2ZU9ubHlEaXJ0eVJvd3MsIGZhbHNlKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFt0YWJsZS1kYXRhc291cmNlXSBTYXZpbmcgJHt0aGlzLl9sb2dUeXBlTmFtZX0gcm93cy4uLiB7b25seURpcnR5OiAke29ubHlEaXJ0eVJvd3N9fWApO1xuXG4gICAgICAvLyBHZXQgYWxsIHJvd3NcbiAgICAgIGNvbnN0IHJvd3MgPSBhd2FpdCB0aGlzLmdldFJvd3MoKTtcblxuICAgICAgLy8gRmluaXNoIGVkaXRpbmcgYWxsIHJvd3NcbiAgICAgIGNvbnN0IGludmFsaWRSb3dzID0gcm93cy5maWx0ZXIocm93ID0+IHJvdy5lZGl0aW5nICYmICFyb3cuY29uZmlybUVkaXRDcmVhdGUoKSk7XG5cbiAgICAgIC8vIENhbm5vdCBmaW5pc2ggc29tZSByb3dzOiBlcnJvclxuICAgICAgaWYgKGludmFsaWRSb3dzLmxlbmd0aCkge1xuICAgICAgICAvLyBsb2cgZXJyb3JzXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgaW52YWxpZFJvd3MuZm9yRWFjaChyb3cgPT4gQXBwVGFibGVVdGlscy5sb2dSb3dFcnJvcnMocm93LCBgW3RhYmxlLWRhdGFzb3VyY2VdICR7dGhpcy5fbG9nVHlwZU5hbWV9IHJvdyAjJHtyb3cuaWR9YCkpO1xuICAgICAgICAvLyBTdG9wIHdpdGggYW4gZXJyb3JcbiAgICAgICAgdGhyb3cge2NvZGU6IEVycm9yQ29kZXMuVEFCTEVfSU5WQUxJRF9ST1dfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5UQUJMRV9JTlZBTElEX1JPV19FUlJPUid9O1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9lZGl0aW5nUm93Q291bnQgPSAwO1xuXG4gICAgICBsZXQgZGF0YTogVFtdO1xuICAgICAgbGV0IGRhdGFUb1NhdmU6IFRbXTtcblxuICAgICAgaWYgKHRoaXMuX3VzZVZhbGlkYXRvcikge1xuICAgICAgICBkYXRhVG9TYXZlID0gW107XG4gICAgICAgIGRhdGEgPSByb3dzLm1hcChyb3cgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRhID0gbmV3IHRoaXMuZGF0YUNvbnN0cnVjdG9yKCkgYXMgVDtcbiAgICAgICAgICBjdXJyZW50RGF0YS5mcm9tT2JqZWN0KHJvdy5jdXJyZW50RGF0YSk7XG4gICAgICAgICAgLy8gRmlsdGVyIHRvIGtlZXAgb25seSBkaXJ0eSByb3dcbiAgICAgICAgICBpZiAob25seURpcnR5Um93cyAmJiByb3cudmFsaWRhdG9yLmRpcnR5KSBkYXRhVG9TYXZlLnB1c2goY3VycmVudERhdGEpO1xuICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0YTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghb25seURpcnR5Um93cykgZGF0YVRvU2F2ZSA9IGRhdGE7XG4gICAgICB9XG4gICAgICAvLyBPciB1c2UgdGhlIGN1cnJlbnQgZGF0YSB3aXRob3V0IGNvbnZlcnNpb24gKHdoZW4gbm8gdmFsaWRhdG9yIHNlcnZpY2UgdXNlZClcbiAgICAgIGVsc2Uge1xuICAgICAgICBkYXRhID0gcm93cy5tYXAocm93ID0+IHJvdy5jdXJyZW50RGF0YSk7XG4gICAgICAgIC8vIHNhdmUgYWxsIGRhdGEsIGFzIHdlIGRvbid0IGhhdmUgYW55IGRpcnR5IG1hcmtlclxuICAgICAgICBkYXRhVG9TYXZlID0gZGF0YTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgbm8gZGF0YSB0byBzYXZlOiBleGl0XG4gICAgICBpZiAob25seURpcnR5Um93cyAmJiAhZGF0YVRvU2F2ZS5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbdGFibGUtZGF0YXNvdXJjZV0gTm8gJHt0aGlzLl9sb2dUeXBlTmFtZX0gZGF0YSB0byBzYXZlLiBTa2lwYCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbdGFibGUtZGF0YXNvdXJjZV0gQXNraW5nIHNlcnZpY2UgdG8gc2F2ZSB0aGlzICR7dGhpcy5fbG9nVHlwZU5hbWV9IGRhdGE6YCwgZGF0YVRvU2F2ZSk7XG4gICAgICBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLnNhdmVBbGwoZGF0YVRvU2F2ZSwgdGhpcy5zZXJ2aWNlT3B0aW9ucyk7XG5cbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlLWRhdGFzb3VyY2VdIFNhdmluZyAke3RoaXMuX2xvZ1R5cGVOYW1lfSBkYXRhIFtPS11gKTtcblxuICAgICAgLy8gTFAgMjMvMDMvMjAyMTogdXBkYXRlIGRhdGFzb3VyY2UgaXMgbmVjZXNzYXJ5IGJ1dCBjYW4gYmUgY2hhbmdlZCB0byBhIHJlZmV0Y2goKSBvbiBRdWVyeVJlZiAobXVzdCBiZSBjcmVhdGVkIGFuZCByZWdpc3RlcmVkIGluIEdyYXBocWxTZXJ2aWNlLndhdGNoUXVlcnkpXG4gICAgICB0aGlzLnVwZGF0ZURhdGFzb3VyY2UoZGF0YSwge2VtaXRFdmVudDogZmFsc2V9KTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5lcnJvcignW3RhYmxlLWRhdGFzb3VyY2VdIEVycm9yIHdoaWxlIHNhdmluZzogJyArIGVycm9yICYmIGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3NhdmluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVEYXRhc291cmNlKGRhdGE6IFRbXSwgb3B0cz86IHsgZW1pdEV2ZW50OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFt0YWJsZS1kYXRhc291cmNlXSBVcGRhdGluZyBkYXRhc291cmNlIHdpdGggZGF0YTpgLCBkYXRhKTtcblxuICAgIHN1cGVyLnVwZGF0ZURhdGFzb3VyY2UoZGF0YSwgb3B0cyk7XG5cbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE92ZXJ3cml0ZSBkZWZhdWx0IHNpZ25hdHVyZVxuICBjcmVhdGVOZXcoaW5zZXJ0QXQ/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmFzeW5jQ3JlYXRlTmV3KGluc2VydEF0KTtcbiAgfVxuXG4gIGNvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IE9ic2VydmFibGU8VGFibGVFbGVtZW50PFQ+W10gfCBSZWFkb25seUFycmF5PFRhYmxlRWxlbWVudDxUPj4+IHtcbiAgICAvLyBERUJVRyBjb25zb2xlLmRlYnVnKFwiW2VudGl0aWVzLWRhdGFzb3VyY2VdIGNvbm5lY3RcIik7XG4gICAgcmV0dXJuIHN1cGVyLmNvbm5lY3QoY29sbGVjdGlvblZpZXdlcik7XG4gIH1cblxuICBkaXNjb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXI/OiBDb2xsZWN0aW9uVmlld2VyKSB7XG4gICAgc3VwZXIuZGlzY29ubmVjdChjb2xsZWN0aW9uVmlld2VyKTtcbiAgICB0aGlzLl9zdG9wV2F0Y2hpbmckLm5leHQoKTtcbiAgfVxuXG4gIGFzeW5jIHdhaXRJZGxlKGRlYm91bmNlVGltZU1zPzogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gZmlyc3RGYWxzZVByb21pc2UodGhpcy5sb2FkaW5nU3ViamVjdFxuICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKGRlYm91bmNlVGltZU1zIHx8IDEwMCkgLy8gaWYgbm90IHN0YXJ0ZWQgeWV0LCB3YWl0XG4gICAgICApKTtcbiAgfVxuXG4gIGNvbmZpcm1DcmVhdGUocm93OiBUYWJsZUVsZW1lbnQ8VD4pIHtcbiAgICBpZiAoIXN1cGVyLmNvbmZpcm1DcmVhdGUocm93KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChyb3cuZWRpdGluZyAmJiByb3cudmFsaWRhdG9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1t0YWJsZS1kYXRhc291cmNlXSBSb3cgc3RpbGwgaGFzIHtlZGl0aW5nOiB0cnVlfSBhZnRlciBjb25maXJtQ3JlYXRlKCkhIEZvcmNlIGVkaXRpbmcgdG8gZmFsc2UnKTtcbiAgICAgIHJvdy52YWxpZGF0b3IuZGlzYWJsZSh7b25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25maXJtRWRpdChyb3c6IFRhYmxlRWxlbWVudDxUPik6IGJvb2xlYW4ge1xuICAgIGlmICghc3VwZXIuY29uZmlybUVkaXQocm93KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChyb3cuZWRpdGluZyAmJiByb3cudmFsaWRhdG9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1t0YWJsZS1kYXRhc291cmNlXSBSb3cgc3RpbGwgaGFzIHtlZGl0aW5nOiB0cnVlfSBhZnRlciBjb25maXJtQ3JlYXRlKCkhIEZvcmNlIGVkaXRpbmcgdG8gZmFsc2UnKTtcbiAgICAgIHJvdy52YWxpZGF0b3IuZGlzYWJsZSh7b25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGFydEVkaXQocm93OiBUYWJsZUVsZW1lbnQ8VD4pIHtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZS1kYXRhc291cmNlXSBTdGFydCB0byBlZGl0IHJvdycsIHJvdyk7XG4gICAgcm93LnN0YXJ0RWRpdCgpO1xuICAgIHRoaXMuX2VkaXRpbmdSb3dDb3VudCsrO1xuICB9XG5cbiAgY2FuY2VsT3JEZWxldGUocm93OiBUYWJsZUVsZW1lbnQ8VD4pIHtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZS1kYXRhc291cmNlXSBDYW5jZWxsaW5nIG9yIGRlbGV0aW5nIHJvdycsIHJvdyk7XG4gICAgcm93LmNhbmNlbE9yRGVsZXRlKCk7XG4gICAgdGhpcy5fZWRpdGluZ1Jvd0NvdW50LS07XG4gIH1cblxuICBoYW5kbGVFcnJvcihlcnJvcjogYW55LCBtZXNzYWdlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPExvYWRSZXN1bHQ8VD4+IHtcbiAgICBjb25zdCBlcnJvck1zZyA9IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgfHwgZXJyb3I7XG4gICAgY29uc29sZS5lcnJvcihgW3RhYmxlLWRhdGFzb3VyY2VdIFNlcnZpY2UgJHt0aGlzLl9sb2dUeXBlTmFtZX0gc2VudCBlcnJvcjogJHtlcnJvck1zZ31gLCBlcnJvcik7XG4gICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSB8fCBlcnJvck1zZyk7XG4gIH1cblxuICBoYW5kbGVFcnJvclByb21pc2UoZXJyb3I6IGFueSkge1xuICAgIGNvbnN0IGVycm9yTXNnID0gZXJyb3IgJiYgZXJyb3IubWVzc2FnZSB8fCBlcnJvcjtcbiAgICBjb25zb2xlLmVycm9yKGBbdGFibGUtZGF0YXNvdXJjZV0gU2VydmljZSAke3RoaXMuX2xvZ1R5cGVOYW1lfSBzZW50IGVycm9yOiAke2Vycm9yTXNnfWAsIGVycm9yKTtcbiAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgZGVsZXRlKGlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBJZiBuZXcgcm93OiBub3QgbmVlZCB0byBwcm9wYWdhdGUgdG8gdGhlIGRhdGFTZXJ2aWNlXG4gICAgaWYgKGlkID09PSAtMSkge1xuICAgICAgcmV0dXJuIHN1cGVyLmRlbGV0ZShpZCk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm93ID0gdGhpcy5nZXRSb3coaWQpO1xuICAgIGlmICghcm93KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbdGFibGUtZGF0YXNvdXJjZV0gUm93IHRvIGRlbGV0ZSB3aXRoIGlkPSR7aWR9IG5vdCBmb3VuZGApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcblxuICAgIHRoaXMuZGF0YVNlcnZpY2UuZGVsZXRlQWxsKFtyb3cuY3VycmVudERhdGFdLCB0aGlzLnNlcnZpY2VPcHRpb25zKVxuICAgICAgLmNhdGNoKGVyciA9PiB0aGlzLmhhbmRsZUVycm9yUHJvbWlzZShlcnIpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyBtYWtlIHN1cmUgcm93IGhhcyBiZWVuIGRlbGV0ZWQgKGJlY2F1c2UgR3JhcFFIbCBjYWNoZSByZW1vdmUgY2FuIGZhaWxlZClcbiAgICAgICAgICBjb25zdCBwcmVzZW50ID0gdGhpcy5nZXRSb3coaWQpID09PSByb3c7XG4gICAgICAgICAgaWYgKHByZXNlbnQpIHN1cGVyLmRlbGV0ZShpZCk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSwgMzAwKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZUFsbChyb3dzOiBUYWJsZUVsZW1lbnQ8VD5bXSk6IFByb21pc2U8YW55PiB7XG5cbiAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcblxuICAgIGNvbnN0IGRhdGEgPSByb3dzLm1hcChyID0+IHIuY3VycmVudERhdGEpO1xuICAgIGNvbnN0IHJvd3NCeUlkID0gcm93cy5yZWR1Y2UoKHJlcywgcm93KSA9PiB7XG4gICAgICByZXNbcm93LmlkXSA9IHJvdztcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSwge30pO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IHNlbGZEZWxldGUgPSBzdXBlci5kZWxldGU7XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5kZWxldGVBbGwoZGF0YSwgdGhpcy5zZXJ2aWNlT3B0aW9ucylcbiAgICAgIC5jYXRjaChlcnIgPT4gdGhpcy5oYW5kbGVFcnJvclByb21pc2UoZXJyKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gV29ya2Fyb3VuZCwgdG8gYmUgc3VyZSBhbGwgcm93cyBoYXMgYmVlbiBkZWxldGVkXG4gICAgICAgIC8vIFNvbWV0aW1lcywgdGhlIHNlcnZpY2UgbWlzcyBkZWxldGlvbiwgb3IgR3JhcFFIbCBjYWNoZSByZW1vdmUgZmFpbGVkXG4gICAgICAgIGNvbnN0IHJvd05vdERlbGV0ZWQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyb3dzQnlJZCkucmVkdWNlKChyZXMsIGlkKSA9PiB7XG4gICAgICAgICAgY29uc3Qgcm93ID0gcm93c0J5SWRbaWRdO1xuICAgICAgICAgIGNvbnN0IHByZXNlbnQgPSBzZWxmLmdldFJvdygraWQpID09PSByb3c7XG4gICAgICAgICAgcmV0dXJuIHByZXNlbnQgPyByZXMuY29uY2F0KHJvdykgOiByZXM7XG4gICAgICAgIH0sIFtdKS5zb3J0KChhLCBiKSA9PiBhLmlkID4gYi5pZCA/IC0xIDogMSk7XG4gICAgICAgIC8vIEFwcGx5IG1pc3NpbmcgZGVsZXRpb25cbiAgICAgICAgaWYgKGlzTm90RW1wdHlBcnJheShyb3dOb3REZWxldGVkKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgW3RhYmxlLWRhdGFzb3VyY2VdIEZvcmNlIGRlbGV0aW9uIG9mICR7cm93Tm90RGVsZXRlZC5sZW5ndGh9IHJvd3MgKElzIHNlcnZpY2UgYXBwbHlpbmcgZGVsZXRpb24gdG8gb2JzZXJ2YWJsZSA/KWApO1xuICAgICAgICAgIHJvd05vdERlbGV0ZWQuZm9yRWFjaChyID0+IHNlbGZEZWxldGUuY2FsbChzZWxmLCByLmlkKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFJvd3MoKTogUHJvbWlzZTxUYWJsZUVsZW1lbnQ8VD5bXT4ge1xuICAgIHJldHVybiBmaXJzdE5vdE5pbFByb21pc2UodGhpcy5jb25uZWN0KG51bGwpKSBhcyBQcm9taXNlPFRhYmxlRWxlbWVudDxUPltdPjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhc3luY0NyZWF0ZU5ldyhpbnNlcnRBdD86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9jcmVhdGluZykgcmV0dXJuOyAvLyBBdm9pZCBtdWx0aXBsZSBjYWxsIChzaG91bGQgbmV2ZXIgb2NjdXIpXG5cbiAgICB0aGlzLl9jcmVhdGluZyA9IHRydWU7XG5cbiAgICBzdXBlci5jcmVhdGVOZXcoaW5zZXJ0QXQpO1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Um93KC0xKTtcblxuICAgIGlmIChyb3cgJiYgdGhpcy5fb3B0aW9ucyAmJiB0aGlzLl9vcHRpb25zLm9uUm93Q3JlYXRlZCkge1xuICAgICAgY29uc3QgcmVzID0gdGhpcy5fb3B0aW9ucy5vblJvd0NyZWF0ZWQocm93KTtcbiAgICAgIC8vIElmIGFzeW5jIGZ1bmN0aW9uLCB3YWl0IHRoZSBlbmQgYmVmb3JlIGVuZGluZ1xuICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCByZXM7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikgIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9lZGl0aW5nUm93Q291bnQrKztcbiAgICB0aGlzLl9jcmVhdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZCAtLSAqL1xuXG4gIG1hcmtBc0xvYWRpbmcoKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3QudmFsdWUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBtYXJrQXNMb2FkZWQoKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3QudmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
326
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS90YWJsZS9lbnRpdGllcy10YWJsZS1kYXRhc291cmNlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFnQixnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pGLE9BQU8sRUFBQyxlQUFlLEVBQWMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTFELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEUsT0FBTyxFQUFDLFNBQVMsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUtuRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRSxPQUFPLEVBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDdkYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQVE1QyxNQUFNLE9BQU8seUJBQXlCO0NBV3JDO0FBRUQsV0FBVztBQUVYLGtFQUFrRTtBQUNsRSxNQUFNLE9BQU8sdUJBS1QsU0FBUSxlQUFrQjtJQW1DNUI7Ozs7Ozs7O09BUUc7SUFDSCxZQUFZLFFBQW9CLEVBQ0osV0FBc0MsRUFDdEQsZ0JBQW1DLEVBQ25DLE1BQTRDO1FBQ3RELEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBSHBCLGdCQUFXLEdBQVgsV0FBVyxDQUEyQjtRQXRDeEQsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixZQUFP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RWxlbWVudCwgVmFsaWRhdG9yU2VydmljZX0gZnJvbSAnQGUtaXMvbmd4LW1hdGVyaWFsLXRhYmxlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7RW50aXR5LCBJRW50aXR5fSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHtFcnJvckNvZGVzfSBmcm9tICcuLi9zZXJ2aWNlcy9lcnJvcnMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIG1hcCwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0RpcmVjdGl2ZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U29ydERpcmVjdGlvbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQge0NvbGxlY3Rpb25WaWV3ZXJ9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQge1RhYmxlRGF0YVNvdXJjZU9wdGlvbnN9IGZyb20gJ0BlLWlzL25neC1tYXRlcmlhbC10YWJsZS9zcmMvYXBwL25neC1tYXRlcmlhbC10YWJsZS90YWJsZS1kYXRhLXNvdXJjZSc7XG5pbXBvcnQge0VudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucywgSUVudGl0aWVzU2VydmljZSwgTG9hZFJlc3VsdH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7Zmlyc3RGYWxzZVByb21pc2UsIGZpcnN0Tm90TmlsUHJvbWlzZX0gZnJvbSAnLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7aXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCwgcmVtb3ZlRW5kLCB0b0Jvb2xlYW59IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtBcHBUYWJsZVV0aWxzfSBmcm9tICcuL3RhYmxlLnV0aWxzJztcblxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQXBwVGFibGVEYXRhU2VydmljZU9wdGlvbnM8TyBleHRlbmRzIEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyA9IEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucz4gZXh0ZW5kcyBFbnRpdGllc1NlcnZpY2VXYXRjaE9wdGlvbnMge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIHNhdmVPbmx5RGlydHlSb3dzPzogYm9vbGVhbjtcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xufVxuZXhwb3J0IGNsYXNzIEFwcFRhYmxlRGF0YVNvdXJjZU9wdGlvbnM8XG4gIFQgZXh0ZW5kcyBFbnRpdHk8VCwgSUQ+LFxuICBJRCA9IG51bWJlcixcbiAgTyBleHRlbmRzIEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyA9IEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucz4gaW1wbGVtZW50cyBUYWJsZURhdGFTb3VyY2VPcHRpb25zIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xuICBwcmVwZW5kTmV3RWxlbWVudHM/OiBib29sZWFuO1xuICBzdXBwcmVzc0Vycm9ycz86IGJvb2xlYW47XG4gIGtlZXBPcmlnaW5hbERhdGFBZnRlckNvbmZpcm0/OiBib29sZWFuO1xuICBvblJvd0NyZWF0ZWQ/OiAocm93OiBUYWJsZUVsZW1lbnQ8VD4pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICBkYXRhU2VydmljZU9wdGlvbnM/OiBBcHBUYWJsZURhdGFTZXJ2aWNlT3B0aW9uczxPPjtcbiAgZGVidWc/OiBib29sZWFuO1xufVxuXG4vLyBAZHluYW1pY1xuQERpcmVjdGl2ZSgpXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBjbGFzcyBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxcbiAgVCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LFxuICBGID0gYW55LFxuICBJRCA9IG51bWJlcixcbiAgTyBleHRlbmRzIEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucyA9IEVudGl0aWVzU2VydmljZVdhdGNoT3B0aW9ucz5cbiAgICBleHRlbmRzIFRhYmxlRGF0YVNvdXJjZTxUPlxuICAgIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dUeXBlTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBBcHBUYWJsZURhdGFTb3VyY2VPcHRpb25zPFQsIElELCBPPjtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2RlYnVnOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgX2NyZWF0aW5nID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfc2F2aW5nID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfdXNlVmFsaWRhdG9yID0gZmFsc2U7XG4gIHByb3RlY3RlZCBfc3RvcFdhdGNoaW5nJCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgcHJvdGVjdGVkIF9lZGl0aW5nUm93Q291bnQgPSAwO1xuXG4gIGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih1bmRlZmluZWQpO1xuXG4gIGdldCBzZXJ2aWNlT3B0aW9ucygpOiBBcHBUYWJsZURhdGFTZXJ2aWNlT3B0aW9uczxPPiB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuZGF0YVNlcnZpY2VPcHRpb25zO1xuICB9XG5cbiAgc2V0IHNlcnZpY2VPcHRpb25zKHZhbHVlOiBBcHBUYWJsZURhdGFTZXJ2aWNlT3B0aW9uczxPPikgIHtcbiAgICB0aGlzLl9vcHRpb25zLmRhdGFTZXJ2aWNlT3B0aW9ucyA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKTogQXBwVGFibGVEYXRhU291cmNlT3B0aW9uczxULCBJRCwgTz4ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG5cbiAgZ2V0IGxvYWRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nU3ViamVjdC52YWx1ZSA9PT0gZmFsc2U7IC8vIFNob3VsZCBiZSBmYWxzZSB3aGVuIHVuZGVmaW5lZCAoaW5pdGlhbCBzdGF0ZSlcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlICE9PSBmYWxzZTsgLy8gU2hvdWxkIGJlIHRydWUgd2hlbiB1bmRlZmluZWQgKGluaXRpYWwgc3RhdGUpXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBUYWJsZURhdGFTb3VyY2UgaW5zdGFuY2UsIHRoYXQgY2FuIGJlIHVzZWQgYXMgZGF0YXNvdXJjZSBvZiBgQGFuZ3VsYXIvY2RrYCBkYXRhLXRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YVNlcnZpY2UgQSBzZXJ2aWNlIHRvIGxvYWQgYW5kIHNhdmUgZGF0YVxuICAgKiBAcGFyYW0gZGF0YVR5cGUgVHlwZSBvZiBkYXRhIGNvbnRhaW5lZCBieSB0aGUgVGFibGUuIElmIG5vdCBzcGVjaWZpZWQsIHRoZW4gYGRhdGFgIHdpdGggYXQgbGVhc3Qgb25lIGVsZW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQuXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gdmFsaWRhdG9yU2VydmljZSBTZXJ2aWNlIHRoYXQgY3JlYXRlIGluc3RhbmNlcyBvZiB0aGUgRm9ybUdyb3VwIHVzZWQgdG8gdmFsaWRhdGUgcm93IGZpZWxkcy5cbiAgICogQHBhcmFtIGNvbmZpZyBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRhYmxlLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZGF0YVR5cGU6IG5ldygpID0+IFQsXG4gICAgICAgICAgICAgIHB1YmxpYyByZWFkb25seSBkYXRhU2VydmljZTogSUVudGl0aWVzU2VydmljZTxULCBGLCBPPixcbiAgICAgICAgICAgICAgdmFsaWRhdG9yU2VydmljZT86IFZhbGlkYXRvclNlcnZpY2UsXG4gICAgICAgICAgICAgIGNvbmZpZz86IEFwcFRhYmxlRGF0YVNvdXJjZU9wdGlvbnM8VCwgSUQsIE8+KSB7XG4gICAgc3VwZXIoW10sIGRhdGFUeXBlLCB2YWxpZGF0b3JTZXJ2aWNlLCBjb25maWcpO1xuICAgIHRoaXMuX29wdGlvbnMgPSB7XG4gICAgICBkYXRhU2VydmljZU9wdGlvbnM6IHt9LFxuICAgICAgZGVidWc6IGNvbmZpZyAmJiBjb25maWcuc3VwcHJlc3NFcnJvcnMgPT09IGZhbHNlLFxuICAgICAga2VlcE9yaWdpbmFsRGF0YUFmdGVyQ29uZmlybTogZmFsc2UsXG4gICAgICAuLi5jb25maWdcbiAgICB9O1xuICAgIHRoaXMuX3VzZVZhbGlkYXRvciA9IGlzTm90TmlsKHZhbGlkYXRvclNlcnZpY2UpO1xuXG4gICAgdGhpcy5fbG9nVHlwZU5hbWUgPSByZW1vdmVFbmQoKG5ldyBkYXRhVHlwZSgpKS5fX3R5cGVuYW1lIHx8ICdVbmtub3duVk8nLCAnVk8nKTtcblxuICAgIC8vIEZvciBERVYgT05MWVxuICAgIHRoaXMuX2RlYnVnID0gdGhpcy5fb3B0aW9ucy5kZWJ1ZyA9PT0gdHJ1ZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N0b3BXYXRjaGluZyQubmV4dCgpO1xuICAgIHRoaXMuX3N0b3BXYXRjaGluZyQuY29tcGxldGUoKTtcbiAgICB0aGlzLl9zdG9wV2F0Y2hpbmckLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5sb2FkaW5nU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIHRoaXMubG9hZGluZ1N1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHdhdGNoQWxsKG9mZnNldDogbnVtYmVyLFxuICAgICAgICAgICBzaXplOiBudW1iZXIsXG4gICAgICAgICAgIHNvcnRCeT86IHN0cmluZyxcbiAgICAgICAgICAgc29ydERpcmVjdGlvbj86IFNvcnREaXJlY3Rpb24sXG4gICAgICAgICAgIGZpbHRlcj86IFBhcnRpYWw8Rj4pOiBPYnNlcnZhYmxlPExvYWRSZXN1bHQ8VD4+IHtcblxuICAgIHRoaXMuX3N0b3BXYXRjaGluZyQubmV4dCgpO1xuICAgIHRoaXMuX2VkaXRpbmdSb3dDb3VudCA9IDA7XG4gICAgdGhpcy5tYXJrQXNMb2FkaW5nKCk7XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS53YXRjaEFsbChvZmZzZXQsIHNpemUsIHNvcnRCeSwgc29ydERpcmVjdGlvbiwgZmlsdGVyLCB0aGlzLnNlcnZpY2VPcHRpb25zIGFzIE8pXG4gICAgICAucGlwZShcbiAgICAgICAgLy8gU3RvcCB0aGlzIHBpcGUgbmV4dCB0aW1lIHdlIGNhbGwgd2F0Y2hBbGwoKVxuICAgICAgICB0YWtlVW50aWwodGhpcy5fc3RvcFdhdGNoaW5nJCksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAnRVJST1IuTE9BRF9EQVRBX0VSUk9SJykpLFxuICAgICAgICBtYXAoKHJlczogTG9hZFJlc3VsdDxUPikgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9zYXZpbmcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhgW3RhYmxlLWRhdGFzb3VyY2VdIFJlY2VpdmVkICR7dGhpcy5fbG9nVHlwZU5hbWV9IGRhdGEgKGZyb20gc2VydmljZSksIGJ1dCBzdGlsbCBzYXZpbmc6IHNraXBgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2VkaXRpbmdSb3dDb3VudCA+IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgW3RhYmxlLWRhdGFzb3VyY2VdIFJlY2VpdmVkICR7dGhpcy5fbG9nVHlwZU5hbWV9IGRhdGEsIHdoaWxlICR7dGhpcy5fZWRpdGluZ1Jvd0NvdW50fSByb3dzIHN0aWxsIGVkaXRpbmc6IHNraXA7IFBsZWFzZSBjaGVjayBzYXZlKCkgaW1wbGVtZW50YXRpb24gaW4gdGhlIHRhYmxlIWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGFzb3VyY2UoKHJlcy5kYXRhIHx8IFtdKSBhcyBUW10pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRvQm9vbGVhbih0aGlzLnNlcnZpY2VPcHRpb25zLnJlYWRPbmx5LCBmYWxzZSkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1t0YWJsZS1kYXRhc291cmNlXSBFbmFibGUgdG8gc2F2ZSwgYmVjYXVzZSBzZXJ2aWNlT3B0aW9ucy5yZWFkT25seT10cnVlJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIFNhdmluZyB0d2ljZSAoc2hvdWxkIG5ldmVyIG9jY3VyKVxuICAgIGlmICh0aGlzLl9zYXZpbmcpIHtcbiAgICAgIGNvbnNvbGUud2FybihgW3RhYmxlLWRhdGFzb3VyY2VdIFRyeWluZyB0byBzYXZlICR7dGhpcy5fbG9nVHlwZU5hbWV9IHJvd3MgdHdpY2UuIFNraXBgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9zYXZpbmcgPSB0cnVlO1xuICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuXG4gICAgY29uc3Qgb25seURpcnR5Um93cyA9IHRvQm9vbGVhbih0aGlzLnNlcnZpY2VPcHRpb25zLnNhdmVPbmx5RGlydHlSb3dzLCBmYWxzZSk7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbdGFibGUtZGF0YXNvdXJjZV0gU2F2aW5nICR7dGhpcy5fbG9nVHlwZU5hbWV9IHJvd3MuLi4ge29ubHlEaXJ0eTogJHtvbmx5RGlydHlSb3dzfX1gKTtcblxuICAgICAgLy8gR2V0IGFsbCByb3dzXG4gICAgICBjb25zdCByb3dzID0gYXdhaXQgdGhpcy5nZXRSb3dzKCk7XG5cbiAgICAgIC8vIEZpbmlzaCBlZGl0aW5nIGFsbCByb3dzXG4gICAgICBjb25zdCBpbnZhbGlkUm93cyA9IHJvd3MuZmlsdGVyKHJvdyA9PiByb3cuZWRpdGluZyAmJiAhcm93LmNvbmZpcm1FZGl0Q3JlYXRlKCkpO1xuXG4gICAgICAvLyBDYW5ub3QgZmluaXNoIHNvbWUgcm93czogZXJyb3JcbiAgICAgIGlmIChpbnZhbGlkUm93cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gbG9nIGVycm9yc1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGludmFsaWRSb3dzLmZvckVhY2gocm93ID0+IEFwcFRhYmxlVXRpbHMubG9nUm93RXJyb3JzKHJvdywgYFt0YWJsZS1kYXRhc291cmNlXSAke3RoaXMuX2xvZ1R5cGVOYW1lfSByb3cgIyR7cm93LmlkfWApKTtcbiAgICAgICAgLy8gU3RvcCB3aXRoIGFuIGVycm9yXG4gICAgICAgIHRocm93IHtjb2RlOiBFcnJvckNvZGVzLlRBQkxFX0lOVkFMSURfUk9XX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuVEFCTEVfSU5WQUxJRF9ST1dfRVJST1InfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZWRpdGluZ1Jvd0NvdW50ID0gMDtcblxuICAgICAgbGV0IGRhdGE6IFRbXTtcbiAgICAgIGxldCBkYXRhVG9TYXZlOiBUW107XG5cbiAgICAgIGlmICh0aGlzLl91c2VWYWxpZGF0b3IpIHtcbiAgICAgICAgZGF0YVRvU2F2ZSA9IFtdO1xuICAgICAgICBkYXRhID0gcm93cy5tYXAocm93ID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RGF0YSA9IG5ldyB0aGlzLmRhdGFDb25zdHJ1Y3RvcigpIGFzIFQ7XG4gICAgICAgICAgY3VycmVudERhdGEuZnJvbU9iamVjdChyb3cuY3VycmVudERhdGEpO1xuICAgICAgICAgIC8vIEZpbHRlciB0byBrZWVwIG9ubHkgZGlydHkgcm93XG4gICAgICAgICAgaWYgKG9ubHlEaXJ0eVJvd3MgJiYgcm93LnZhbGlkYXRvci5kaXJ0eSkgZGF0YVRvU2F2ZS5wdXNoKGN1cnJlbnREYXRhKTtcbiAgICAgICAgICByZXR1cm4gY3VycmVudERhdGE7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIW9ubHlEaXJ0eVJvd3MpIGRhdGFUb1NhdmUgPSBkYXRhO1xuICAgICAgfVxuICAgICAgLy8gT3IgdXNlIHRoZSBjdXJyZW50IGRhdGEgd2l0aG91dCBjb252ZXJzaW9uICh3aGVuIG5vIHZhbGlkYXRvciBzZXJ2aWNlIHVzZWQpXG4gICAgICBlbHNlIHtcbiAgICAgICAgZGF0YSA9IHJvd3MubWFwKHJvdyA9PiByb3cuY3VycmVudERhdGEpO1xuICAgICAgICAvLyBzYXZlIGFsbCBkYXRhLCBhcyB3ZSBkb24ndCBoYXZlIGFueSBkaXJ0eSBtYXJrZXJcbiAgICAgICAgZGF0YVRvU2F2ZSA9IGRhdGE7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIG5vIGRhdGEgdG8gc2F2ZTogZXhpdFxuICAgICAgaWYgKG9ubHlEaXJ0eVJvd3MgJiYgIWRhdGFUb1NhdmUubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlLWRhdGFzb3VyY2VdIE5vICR7dGhpcy5fbG9nVHlwZU5hbWV9IGRhdGEgdG8gc2F2ZS4gU2tpcGApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlLWRhdGFzb3VyY2VdIEFza2luZyBzZXJ2aWNlIHRvIHNhdmUgdGhpcyAke3RoaXMuX2xvZ1R5cGVOYW1lfSBkYXRhOmAsIGRhdGFUb1NhdmUpO1xuICAgICAgYXdhaXQgdGhpcy5kYXRhU2VydmljZS5zYXZlQWxsKGRhdGFUb1NhdmUsIHRoaXMuc2VydmljZU9wdGlvbnMpO1xuXG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFt0YWJsZS1kYXRhc291cmNlXSBTYXZpbmcgJHt0aGlzLl9sb2dUeXBlTmFtZX0gZGF0YSBbT0tdYCk7XG5cbiAgICAgIC8vIExQIDIzLzAzLzIwMjE6IHVwZGF0ZSBkYXRhc291cmNlIGlzIG5lY2Vzc2FyeSBidXQgY2FuIGJlIGNoYW5nZWQgdG8gYSByZWZldGNoKCkgb24gUXVlcnlSZWYgKG11c3QgYmUgY3JlYXRlZCBhbmQgcmVnaXN0ZXJlZCBpbiBHcmFwaHFsU2VydmljZS53YXRjaFF1ZXJ5KVxuICAgICAgdGhpcy51cGRhdGVEYXRhc291cmNlKGRhdGEsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZXJyb3IoJ1t0YWJsZS1kYXRhc291cmNlXSBFcnJvciB3aGlsZSBzYXZpbmc6ICcgKyBlcnJvciAmJiBlcnJvci5tZXNzYWdlIHx8IGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9zYXZpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRGF0YXNvdXJjZShkYXRhOiBUW10sIG9wdHM/OiB7IGVtaXRFdmVudDogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbdGFibGUtZGF0YXNvdXJjZV0gVXBkYXRpbmcgZGF0YXNvdXJjZSB3aXRoIGRhdGE6YCwgZGF0YSk7XG5cbiAgICBzdXBlci51cGRhdGVEYXRhc291cmNlKGRhdGEsIG9wdHMpO1xuXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgICB9XG4gIH1cblxuICAvLyBPdmVyd3JpdGUgZGVmYXVsdCBzaWduYXR1cmVcbiAgY3JlYXRlTmV3KGluc2VydEF0PzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5hc3luY0NyZWF0ZU5ldyhpbnNlcnRBdCk7XG4gIH1cblxuICBjb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXI6IENvbGxlY3Rpb25WaWV3ZXIpOiBPYnNlcnZhYmxlPFRhYmxlRWxlbWVudDxUPltdIHwgUmVhZG9ubHlBcnJheTxUYWJsZUVsZW1lbnQ8VD4+PiB7XG4gICAgLy8gREVCVUcgY29uc29sZS5kZWJ1ZyhcIltlbnRpdGllcy1kYXRhc291cmNlXSBjb25uZWN0XCIpO1xuICAgIHJldHVybiBzdXBlci5jb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXIpO1xuICB9XG5cbiAgZGlzY29ubmVjdChjb2xsZWN0aW9uVmlld2VyPzogQ29sbGVjdGlvblZpZXdlcikge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcik7XG4gICAgdGhpcy5fc3RvcFdhdGNoaW5nJC5uZXh0KCk7XG4gIH1cblxuICB3YWl0SWRsZShkZWJvdW5jZVRpbWVNcz86IG51bWJlcik6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIGZpcnN0RmFsc2VQcm9taXNlKHRoaXMubG9hZGluZ1N1YmplY3RcbiAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZShkZWJvdW5jZVRpbWVNcyB8fCAxMDApIC8vIGlmIG5vdCBzdGFydGVkIHlldCwgd2FpdFxuICAgICAgKSk7XG4gIH1cblxuICBjb25maXJtQ3JlYXRlKHJvdzogVGFibGVFbGVtZW50PFQ+KSB7XG4gICAgaWYgKCFzdXBlci5jb25maXJtQ3JlYXRlKHJvdykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocm93LmVkaXRpbmcgJiYgcm93LnZhbGlkYXRvcikge1xuICAgICAgY29uc29sZS53YXJuKCdbdGFibGUtZGF0YXNvdXJjZV0gUm93IHN0aWxsIGhhcyB7ZWRpdGluZzogdHJ1ZX0gYWZ0ZXIgY29uZmlybUNyZWF0ZSgpISBGb3JjZSBlZGl0aW5nIHRvIGZhbHNlJyk7XG4gICAgICByb3cudmFsaWRhdG9yLmRpc2FibGUoe29ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uZmlybUVkaXQocm93OiBUYWJsZUVsZW1lbnQ8VD4pOiBib29sZWFuIHtcbiAgICBpZiAoIXN1cGVyLmNvbmZpcm1FZGl0KHJvdykpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocm93LmVkaXRpbmcgJiYgcm93LnZhbGlkYXRvcikge1xuICAgICAgY29uc29sZS53YXJuKCdbdGFibGUtZGF0YXNvdXJjZV0gUm93IHN0aWxsIGhhcyB7ZWRpdGluZzogdHJ1ZX0gYWZ0ZXIgY29uZmlybUNyZWF0ZSgpISBGb3JjZSBlZGl0aW5nIHRvIGZhbHNlJyk7XG4gICAgICByb3cudmFsaWRhdG9yLmRpc2FibGUoe29ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3RhcnRFZGl0KHJvdzogVGFibGVFbGVtZW50PFQ+KSB7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGUtZGF0YXNvdXJjZV0gU3RhcnQgdG8gZWRpdCByb3cnLCByb3cpO1xuICAgIHJvdy5zdGFydEVkaXQoKTtcbiAgICB0aGlzLl9lZGl0aW5nUm93Q291bnQrKztcbiAgfVxuXG4gIGNhbmNlbE9yRGVsZXRlKHJvdzogVGFibGVFbGVtZW50PFQ+KSB7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGUtZGF0YXNvdXJjZV0gQ2FuY2VsbGluZyBvciBkZWxldGluZyByb3cnLCByb3cpO1xuICAgIHJvdy5jYW5jZWxPckRlbGV0ZSgpO1xuICAgIHRoaXMuX2VkaXRpbmdSb3dDb3VudC0tO1xuICB9XG5cbiAgaGFuZGxlRXJyb3IoZXJyb3I6IGFueSwgbWVzc2FnZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxMb2FkUmVzdWx0PFQ+PiB7XG4gICAgY29uc3QgZXJyb3JNc2cgPSBlcnJvciAmJiBlcnJvci5tZXNzYWdlIHx8IGVycm9yO1xuICAgIGNvbnNvbGUuZXJyb3IoYFt0YWJsZS1kYXRhc291cmNlXSBTZXJ2aWNlICR7dGhpcy5fbG9nVHlwZU5hbWV9IHNlbnQgZXJyb3I6ICR7ZXJyb3JNc2d9YCwgZXJyb3IpO1xuICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgfHwgZXJyb3JNc2cpO1xuICB9XG5cbiAgaGFuZGxlRXJyb3JQcm9taXNlKGVycm9yOiBhbnkpIHtcbiAgICBjb25zdCBlcnJvck1zZyA9IGVycm9yICYmIGVycm9yLm1lc3NhZ2UgfHwgZXJyb3I7XG4gICAgY29uc29sZS5lcnJvcihgW3RhYmxlLWRhdGFzb3VyY2VdIFNlcnZpY2UgJHt0aGlzLl9sb2dUeXBlTmFtZX0gc2VudCBlcnJvcjogJHtlcnJvck1zZ31gLCBlcnJvcik7XG4gICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIGRlbGV0ZShpZDogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gSWYgbmV3IHJvdzogbm90IG5lZWQgdG8gcHJvcGFnYXRlIHRvIHRoZSBkYXRhU2VydmljZVxuICAgIGlmIChpZCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBzdXBlci5kZWxldGUoaWQpO1xuICAgIH1cblxuICAgIGNvbnN0IHJvdyA9IHRoaXMuZ2V0Um93KGlkKTtcbiAgICBpZiAoIXJvdykge1xuICAgICAgY29uc29sZS5lcnJvcihgW3RhYmxlLWRhdGFzb3VyY2VdIFJvdyB0byBkZWxldGUgd2l0aCBpZD0ke2lkfSBub3QgZm91bmRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG5cbiAgICB0aGlzLmRhdGFTZXJ2aWNlLmRlbGV0ZUFsbChbcm93LmN1cnJlbnREYXRhXSwgdGhpcy5zZXJ2aWNlT3B0aW9ucylcbiAgICAgIC5jYXRjaChlcnIgPT4gdGhpcy5oYW5kbGVFcnJvclByb21pc2UoZXJyKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gbWFrZSBzdXJlIHJvdyBoYXMgYmVlbiBkZWxldGVkIChiZWNhdXNlIEdyYXBRSGwgY2FjaGUgcmVtb3ZlIGNhbiBmYWlsZWQpXG4gICAgICAgICAgY29uc3QgcHJlc2VudCA9IHRoaXMuZ2V0Um93KGlkKSA9PT0gcm93O1xuICAgICAgICAgIGlmIChwcmVzZW50KSBzdXBlci5kZWxldGUoaWQpO1xuICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgIH0sIDMwMCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVBbGwocm93czogVGFibGVFbGVtZW50PFQ+W10pOiBQcm9taXNlPGFueT4ge1xuXG4gICAgdGhpcy5tYXJrQXNMb2FkaW5nKCk7XG5cbiAgICBjb25zdCBkYXRhID0gcm93cy5tYXAociA9PiByLmN1cnJlbnREYXRhKTtcbiAgICBjb25zdCByb3dzQnlJZCA9IHJvd3MucmVkdWNlKChyZXMsIHJvdykgPT4ge1xuICAgICAgcmVzW3Jvdy5pZF0gPSByb3c7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIHt9KTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBzZWxmRGVsZXRlID0gc3VwZXIuZGVsZXRlO1xuXG4gICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UuZGVsZXRlQWxsKGRhdGEsIHRoaXMuc2VydmljZU9wdGlvbnMpXG4gICAgICAuY2F0Y2goZXJyID0+IHRoaXMuaGFuZGxlRXJyb3JQcm9taXNlKGVycikpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIC8vIFdvcmthcm91bmQsIHRvIGJlIHN1cmUgYWxsIHJvd3MgaGFzIGJlZW4gZGVsZXRlZFxuICAgICAgICAvLyBTb21ldGltZXMsIHRoZSBzZXJ2aWNlIG1pc3MgZGVsZXRpb24sIG9yIEdyYXBRSGwgY2FjaGUgcmVtb3ZlIGZhaWxlZFxuICAgICAgICBjb25zdCByb3dOb3REZWxldGVkID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocm93c0J5SWQpLnJlZHVjZSgocmVzLCBpZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJvdyA9IHJvd3NCeUlkW2lkXTtcbiAgICAgICAgICBjb25zdCBwcmVzZW50ID0gc2VsZi5nZXRSb3coK2lkKSA9PT0gcm93O1xuICAgICAgICAgIHJldHVybiBwcmVzZW50ID8gcmVzLmNvbmNhdChyb3cpIDogcmVzO1xuICAgICAgICB9LCBbXSkuc29ydCgoYSwgYikgPT4gYS5pZCA+IGIuaWQgPyAtMSA6IDEpO1xuICAgICAgICAvLyBBcHBseSBtaXNzaW5nIGRlbGV0aW9uXG4gICAgICAgIGlmIChpc05vdEVtcHR5QXJyYXkocm93Tm90RGVsZXRlZCkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFt0YWJsZS1kYXRhc291cmNlXSBGb3JjZSBkZWxldGlvbiBvZiAke3Jvd05vdERlbGV0ZWQubGVuZ3RofSByb3dzIChJcyBzZXJ2aWNlIGFwcGx5aW5nIGRlbGV0aW9uIHRvIG9ic2VydmFibGUgPylgKTtcbiAgICAgICAgICByb3dOb3REZWxldGVkLmZvckVhY2gociA9PiBzZWxmRGVsZXRlLmNhbGwoc2VsZiwgci5pZCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3dzKCk6IFByb21pc2U8VGFibGVFbGVtZW50PFQ+W10+IHtcbiAgICByZXR1cm4gZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuY29ubmVjdChudWxsKSkgYXMgUHJvbWlzZTxUYWJsZUVsZW1lbnQ8VD5bXT47XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYXN5bmNDcmVhdGVOZXcoaW5zZXJ0QXQ/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fY3JlYXRpbmcpIHJldHVybjsgLy8gQXZvaWQgbXVsdGlwbGUgY2FsbCAoc2hvdWxkIG5ldmVyIG9jY3VyKVxuXG4gICAgdGhpcy5fY3JlYXRpbmcgPSB0cnVlO1xuXG4gICAgc3VwZXIuY3JlYXRlTmV3KGluc2VydEF0KTtcbiAgICBjb25zdCByb3cgPSB0aGlzLmdldFJvdygtMSk7XG5cbiAgICBpZiAocm93ICYmIHRoaXMuX29wdGlvbnMgJiYgdGhpcy5fb3B0aW9ucy5vblJvd0NyZWF0ZWQpIHtcbiAgICAgIGNvbnN0IHJlcyA9IHRoaXMuX29wdGlvbnMub25Sb3dDcmVhdGVkKHJvdyk7XG4gICAgICAvLyBJZiBhc3luYyBmdW5jdGlvbiwgd2FpdCB0aGUgZW5kIGJlZm9yZSBlbmRpbmdcbiAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgcmVzO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpICB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fZWRpdGluZ1Jvd0NvdW50Kys7XG4gICAgdGhpcy5fY3JlYXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2QgLS0gKi9cblxuICBtYXJrQXNMb2FkaW5nKCkge1xuICAgIGlmICh0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgbWFya0FzTG9hZGVkKCkge1xuICAgIGlmICh0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|