@ecodev/natural 56.0.1 → 56.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/modules/avatar/component/avatar.component.mjs +1 -1
- package/esm2022/lib/modules/dropdown-components/type-date/type-date.component.mjs +1 -1
- package/esm2022/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +1 -1
- package/esm2022/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +1 -1
- package/esm2022/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +1 -1
- package/esm2022/lib/modules/dropdown-components/type-number/type-number.component.mjs +1 -1
- package/esm2022/lib/modules/dropdown-components/type-text/type-text.component.mjs +1 -1
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +1 -1
- package/esm2022/lib/modules/relations/relations.component.mjs +3 -3
- package/esm2022/lib/modules/search/input/input.component.mjs +1 -1
- package/esm2022/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +1 -1
- package/esm2022/lib/services/abstract-model.service.mjs +3 -3
- package/esm2022/lib/services/debounce.service.mjs +26 -7
- package/esm2022/lib/services/enum.service.mjs +1 -1
- package/esm2022/lib/services/link-mutation.service.mjs +1 -1
- package/fesm2022/ecodev-natural.mjs +29 -10
- package/fesm2022/ecodev-natural.mjs.map +1 -1
- package/lib/services/debounce.service.d.ts +10 -2
- package/package.json +1 -1
|
@@ -300,7 +300,7 @@ export class NaturalAbstractModelService {
|
|
|
300
300
|
this.throwIfNotQuery(this.deleteMutation);
|
|
301
301
|
const ids = objects.map(o => {
|
|
302
302
|
// Cancel pending update
|
|
303
|
-
this.naturalDebounceService.
|
|
303
|
+
this.naturalDebounceService.cancelOne(this, o.id);
|
|
304
304
|
return o.id;
|
|
305
305
|
});
|
|
306
306
|
const variables = merge({
|
|
@@ -325,7 +325,7 @@ export class NaturalAbstractModelService {
|
|
|
325
325
|
// Load model if id is given
|
|
326
326
|
let observable;
|
|
327
327
|
if (id) {
|
|
328
|
-
observable = this.getOne(id);
|
|
328
|
+
observable = this.naturalDebounceService.flushOne(this, id).pipe(switchMap(() => this.getOne(id)));
|
|
329
329
|
}
|
|
330
330
|
else {
|
|
331
331
|
observable = of(this.getDefaultForServer());
|
|
@@ -493,4 +493,4 @@ export class NaturalAbstractModelService {
|
|
|
493
493
|
}
|
|
494
494
|
}
|
|
495
495
|
}
|
|
496
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbW9kZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9zZXJ2aWNlcy9hYnN0cmFjdC1tb2RlbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBUyxHQUFHLEVBQWlCLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFjLGFBQWEsRUFBd0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RixPQUFPLEVBQW9DLGtCQUFrQixFQUFFLGdCQUFnQixFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEgsT0FBTyxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakUsT0FBTyxFQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBbUIsTUFBTSxNQUFNLENBQUM7QUFDckcsT0FBTyxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pHLE9BQU8sRUFBQyw0QkFBNEIsRUFBaUIsTUFBTSxtQ0FBbUMsQ0FBQztBQUUvRixPQUFPLEVBQUMsVUFBVSxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBb0J4RyxNQUFNLE9BQWdCLDJCQUEyQjtJQWlCN0MsWUFDdUIsTUFBYyxFQUNkLHNCQUE4QyxFQUM5QyxJQUFZLEVBQ1osUUFBNkIsRUFDN0IsUUFBNkIsRUFDN0IsY0FBbUMsRUFDbkMsY0FBbUMsRUFDbkMsY0FBbUM7UUFQbkMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLDJCQUFzQixHQUF0Qixz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WSxVQUFVLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksS0FBSyxDQUNYLDhHQUE4RyxDQUNqSCxDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQixDQUFDLEVBQVU7UUFDakMsT0FBTyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxJQUFJLENBQ3hDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFDLEVBQUUsRUFBRSxFQUFFLEVBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQ3pFLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlLENBQUMsS0FBMEI7UUFDOUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO1FBQ3BHLENBQUM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Fwb2xsbywgZ3FsLCBNdXRhdGlvblJlc3VsdH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInO1xuaW1wb3J0IHtGZXRjaFJlc3VsdCwgTmV0d29ya1N0YXR1cywgV2F0Y2hRdWVyeUZldGNoUG9saWN5fSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvckZufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0RvY3VtZW50Tm9kZX0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQge2RlZmF1bHRzLCBtZXJnZSwgbWVyZ2VXaXRoLCBvbWl0LCBwaWNrfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBjb21iaW5lTGF0ZXN0LCBFTVBUWSwgZmlyc3QsIGZyb20sIE9ic2VydmFibGUsIG9mLCBPcGVyYXRvckZ1bmN0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFrZVdoaWxlLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlciwgUXVlcnlWYXJpYWJsZXN9IGZyb20gJy4uL2NsYXNzZXMvcXVlcnktdmFyaWFibGUtbWFuYWdlcic7XG5pbXBvcnQge0xpdGVyYWx9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7bWFrZVBsdXJhbCwgbWVyZ2VPdmVycmlkZUFycmF5LCByZWxhdGlvbnNUb0lkcywgdXBwZXJDYXNlRmlyc3RMZXR0ZXJ9IGZyb20gJy4uL2NsYXNzZXMvdXRpbGl0eSc7XG5pbXBvcnQge1BhZ2luYXRlZERhdGF9IGZyb20gJy4uL2NsYXNzZXMvZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHtOYXR1cmFsRGVib3VuY2VTZXJ2aWNlfSBmcm9tICcuL2RlYm91bmNlLnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBGb3JtVmFsaWRhdG9ycyA9IFJlY29yZDxzdHJpbmcsIFZhbGlkYXRvckZuW10+O1xuXG5leHBvcnQgdHlwZSBGb3JtQXN5bmNWYWxpZGF0b3JzID0gUmVjb3JkPHN0cmluZywgQXN5bmNWYWxpZGF0b3JGbltdPjtcblxuZXhwb3J0IHR5cGUgVmFyaWFibGVzV2l0aElucHV0ID0ge1xuICAgIGlucHV0OiBMaXRlcmFsO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybUNvbnRyb2xzID0gUmVjb3JkPHN0cmluZywgQWJzdHJhY3RDb250cm9sPjtcblxudHlwZSBSZXNvbHZlPFRPbmU+ID0ge1xuICAgIG1vZGVsOiBUT25lO1xufTtcblxuZXhwb3J0IHR5cGUgV2l0aElkPFQ+ID0ge2lkOiBzdHJpbmd9ICYgVDtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZTxcbiAgICBUb25lLFxuICAgIFZvbmUgZXh0ZW5kcyB7aWQ6IHN0cmluZ30sXG4gICAgVGFsbCBleHRlbmRzIFBhZ2luYXRlZERhdGE8TGl0ZXJhbD4sXG4gICAgVmFsbCBleHRlbmRzIFF1ZXJ5VmFyaWFibGVzLFxuICAgIFRjcmVhdGUsXG4gICAgVmNyZWF0ZSBleHRlbmRzIFZhcmlhYmxlc1dpdGhJbnB1dCxcbiAgICBUdXBkYXRlLFxuICAgIFZ1cGRhdGUgZXh0ZW5kcyB7aWQ6IHN0cmluZzsgaW5wdXQ6IExpdGVyYWx9LFxuICAgIFRkZWxldGUsXG4gICAgVmRlbGV0ZSBleHRlbmRzIHtpZHM6IHN0cmluZ1tdfSxcbj4ge1xuICAgIC8qKlxuICAgICAqIFN0b3JlIHRoZSBjcmVhdGlvbiBtdXRhdGlvbnMgdGhhdCBhcmUgcGVuZGluZ1xuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRpbmdDYWNoZSA9IG5ldyBNYXA8VmNyZWF0ZVsnaW5wdXQnXSB8IFdpdGhJZDxWdXBkYXRlWydpbnB1dCddPiwgT2JzZXJ2YWJsZTxUY3JlYXRlPj4oKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwb2xsbzogQXBvbGxvLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmF0dXJhbERlYm91bmNlU2VydmljZTogTmF0dXJhbERlYm91bmNlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5hbWU6IHN0cmluZyxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9uZVF1ZXJ5OiBEb2N1bWVudE5vZGUgfCBudWxsLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWxsUXVlcnk6IERvY3VtZW50Tm9kZSB8IG51bGwsXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBjcmVhdGVNdXRhdGlvbjogRG9jdW1lbnROb2RlIHwgbnVsbCxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IHVwZGF0ZU11dGF0aW9uOiBEb2N1bWVudE5vZGUgfCBudWxsLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVsZXRlTXV0YXRpb246IERvY3VtZW50Tm9kZSB8IG51bGwsXG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBpbmRpdmlkdWFsIGZpZWxkcyB2YWxpZGF0b3JzXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHB1YmxpYyBnZXRGb3JtVmFsaWRhdG9ycyhtb2RlbD86IExpdGVyYWwpOiBGb3JtVmFsaWRhdG9ycyB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGluZGl2aWR1YWwgYXN5bmMgZmllbGRzIHZhbGlkYXRvcnNcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIGdldEZvcm1Bc3luY1ZhbGlkYXRvcnMobW9kZWw/OiBMaXRlcmFsKTogRm9ybUFzeW5jVmFsaWRhdG9ycyB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGdyb3VwZWQgZmllbGRzIHZhbGlkYXRvcnMgKGxpa2UgcGFzc3dvcmQgKyBjb25maXJtIHBhc3N3b3JkKVxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgZ2V0Rm9ybUdyb3VwVmFsaWRhdG9ycyhtb2RlbD86IExpdGVyYWwpOiBWYWxpZGF0b3JGbltdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgYXN5bmMgZ3JvdXAgZmllbGRzIHZhbGlkYXRvcnMgKGxpa2UgdW5pcXVlIGNvbnN0cmFpbnQgb24gbXVsdGlwbGUgY29sdW1ucylcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIGdldEZvcm1Hcm91cEFzeW5jVmFsaWRhdG9ycyhtb2RlbD86IExpdGVyYWwpOiBBc3luY1ZhbGlkYXRvckZuW10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZvcm1Db25maWcobW9kZWw6IExpdGVyYWwpOiBGb3JtQ29udHJvbHMge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB7Li4udGhpcy5nZXREZWZhdWx0Rm9yU2VydmVyKCksIC4uLnRoaXMuZ2V0Rm9ybUV4dHJhRmllbGREZWZhdWx0VmFsdWVzKCl9O1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5nZXRGb3JtVmFsaWRhdG9ycyhtb2RlbCk7XG4gICAgICAgIGNvbnN0IGFzeW5jVmFsaWRhdG9ycyA9IHRoaXMuZ2V0Rm9ybUFzeW5jVmFsaWRhdG9ycyhtb2RlbCk7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xzOiBGb3JtQ29udHJvbHMgPSB7fTtcbiAgICAgICAgY29uc3QgZGlzYWJsZWQgPSBtb2RlbC5wZXJtaXNzaW9ucyA/ICFtb2RlbC5wZXJtaXNzaW9ucy51cGRhdGUgOiBmYWxzZTtcblxuICAgICAgICBpZiAobW9kZWwuaWQpIHtcbiAgICAgICAgICAgIGNvbnRyb2xzLmlkID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCh7dmFsdWU6IG1vZGVsLmlkLCBkaXNhYmxlZDogdHJ1ZX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29uZmlndXJlIGZvcm0gZm9yIGVhY2ggZmllbGQgb2YgbW9kZWxcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWVzKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtb2RlbFtrZXldICE9PSB1bmRlZmluZWQgPyBtb2RlbFtrZXldIDogdmFsdWVzW2tleV07XG4gICAgICAgICAgICBjb25zdCBmb3JtU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB0eXBlb2YgdmFsaWRhdG9yc1trZXldICE9PSAndW5kZWZpbmVkJyA/IHZhbGlkYXRvcnNba2V5XSA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBhc3luY1ZhbGlkYXRvciA9IHR5cGVvZiBhc3luY1ZhbGlkYXRvcnNba2V5XSAhPT0gJ3VuZGVmaW5lZCcgPyBhc3luY1ZhbGlkYXRvcnNba2V5XSA6IG51bGw7XG5cbiAgICAgICAgICAgIGNvbnRyb2xzW2tleV0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKGZvcm1TdGF0ZSwgdmFsaWRhdG9yLCBhc3luY1ZhbGlkYXRvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb25maWd1cmUgZm9ybSBmb3IgZXh0cmEgdmFsaWRhdG9ycyB0aGF0IGFyZSBub3Qgb24gYSBzcGVjaWZpYyBmaWVsZFxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh2YWxpZGF0b3JzKSkge1xuICAgICAgICAgICAgaWYgKCFjb250cm9sc1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybVN0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbW9kZWxba2V5XSA/IG1vZGVsW2tleV0gOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbnRyb2xzW2tleV0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKGZvcm1TdGF0ZSwgdmFsaWRhdG9yc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGFzeW5jVmFsaWRhdG9ycykpIHtcbiAgICAgICAgICAgIGlmIChjb250cm9sc1trZXldICYmIGFzeW5jVmFsaWRhdG9yc1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbHNba2V5XS5zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JzW2tleV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtb2RlbFtrZXldID8gbW9kZWxba2V5XSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29udHJvbHNba2V5XSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woZm9ybVN0YXRlLCBudWxsLCBhc3luY1ZhbGlkYXRvcnNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udHJvbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIHRoZSBmaW5hbCBGb3JtR3JvdXAgZm9yIHRoZSBvYmplY3QsIGluY2x1ZGluZyBhbGwgdmFsaWRhdG9yc1xuICAgICAqXG4gICAgICogVGhpcyBtZXRob2Qgc2hvdWxkICoqbm90KiogYmUgb3ZlcnJpZGRlbiwgYnV0IGluc3RlYWQgYGdldEZvcm1Db25maWdgLFxuICAgICAqIGBnZXRGb3JtR3JvdXBWYWxpZGF0b3JzYCwgYGdldEZvcm1Hcm91cEFzeW5jVmFsaWRhdG9yc2AgbWlnaHQgYmUuXG4gICAgICovXG4gICAgcHVibGljIGdldEZvcm1Hcm91cChtb2RlbDogTGl0ZXJhbCk6IFVudHlwZWRGb3JtR3JvdXAge1xuICAgICAgICBjb25zdCBmb3JtQ29uZmlnID0gdGhpcy5nZXRGb3JtQ29uZmlnKG1vZGVsKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVbnR5cGVkRm9ybUdyb3VwKGZvcm1Db25maWcsIHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IHRoaXMuZ2V0Rm9ybUdyb3VwVmFsaWRhdG9ycyhtb2RlbCksXG4gICAgICAgICAgICBhc3luY1ZhbGlkYXRvcnM6IHRoaXMuZ2V0Rm9ybUdyb3VwQXN5bmNWYWxpZGF0b3JzKG1vZGVsKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgc2luZ2xlIG9iamVjdFxuICAgICAqXG4gICAgICogSWYgYXZhaWxhYmxlIGl0IHdpbGwgZW1pdCBvYmplY3QgZnJvbSBjYWNoZSBpbW1lZGlhdGVseSwgdGhlbiBpdFxuICAgICAqIHdpbGwgKiphbHdheXMqKiBmZXRjaCBmcm9tIG5ldHdvcmsgYW5kIHRoZW4gdGhlIG9ic2VydmFibGUgd2lsbCBiZSBjb21wbGV0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0T25lKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFRvbmU+IHtcbiAgICAgICAgdGhpcy50aHJvd0lmT2JzZXJ2YWJsZShpZCk7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMub25lUXVlcnkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFZhcmlhYmxlc0Zvck9uZShpZCkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCh2YXJpYWJsZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMub25lUXVlcnkpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBvbGxvLndhdGNoUXVlcnk8dW5rbm93biwgVm9uZT4oe1xuICAgICAgICAgICAgICAgICAgICBxdWVyeTogdGhpcy5vbmVRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzOiB2YXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIGZldGNoUG9saWN5OiAnY2FjaGUtYW5kLW5ldHdvcmsnLFxuICAgICAgICAgICAgICAgICAgICBuZXh0RmV0Y2hQb2xpY3k6ICdjYWNoZS1vbmx5JyxcbiAgICAgICAgICAgICAgICB9KS52YWx1ZUNoYW5nZXM7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGZpbHRlcihyZXN1bHQgPT4gISFyZXN1bHQuZGF0YSksXG4gICAgICAgICAgICB0YWtlV2hpbGUocmVzdWx0ID0+IHJlc3VsdC5uZXR3b3JrU3RhdHVzICE9PSBOZXR3b3JrU3RhdHVzLnJlYWR5LCB0cnVlKSxcbiAgICAgICAgICAgIG1hcChyZXN1bHQgPT4gKHJlc3VsdC5kYXRhIGFzIExpdGVyYWwpW3RoaXMubmFtZV0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIGNvbGxlY3Rpb24gb2Ygb2JqZWN0c1xuICAgICAqXG4gICAgICogSXQgd2lsbCAqKmFsd2F5cyoqIGZldGNoIGZyb20gbmV0d29yayBhbmQgdGhlbiB0aGUgb2JzZXJ2YWJsZSB3aWxsIGJlIGNvbXBsZXRlZC5cbiAgICAgKiBObyBjYWNoZSBpcyBldmVyIHVzZWQsIHNvIGl0J3Mgc2xvdyBidXQgY29ycmVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QWxsKHF1ZXJ5VmFyaWFibGVzTWFuYWdlcjogTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxWYWxsPik6IE9ic2VydmFibGU8VGFsbD4ge1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLmFsbFF1ZXJ5KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJ0aWFsVmFyaWFibGVzRm9yQWxsKCkucGlwZShcbiAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICBzd2l0Y2hNYXAocGFydGlhbFZhcmlhYmxlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy5hbGxRdWVyeSk7XG5cbiAgICAgICAgICAgICAgICAvLyBDb3B5IG1hbmFnZXIgdG8gcHJldmVudCB0byBhcHBseSBpbnRlcm5hbCB2YXJpYWJsZXMgdG8gZXh0ZXJuYWwgUXVlcnlWYXJpYWJsZXNNYW5hZ2VyXG4gICAgICAgICAgICAgICAgY29uc3QgbWFuYWdlciA9IG5ldyBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyPFZhbGw+KHF1ZXJ5VmFyaWFibGVzTWFuYWdlcik7XG4gICAgICAgICAgICAgICAgbWFuYWdlci5tZXJnZSgncGFydGlhbC12YXJpYWJsZXMnLCBwYXJ0aWFsVmFyaWFibGVzKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwb2xsby5xdWVyeTx1bmtub3duLCBWYWxsPih7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiB0aGlzLmFsbFF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IG1hbmFnZXIudmFyaWFibGVzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMubWFwQWxsKCksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgY29sbGVjdGlvbiBvZiBvYmplY3RzXG4gICAgICpcbiAgICAgKiBFdmVyeSB0aW1lIHRoZSBvYnNlcnZhYmxlIHZhcmlhYmxlcyBjaGFuZ2UsIGFuZCB0aGV5IGFyZSBub3QgdW5kZWZpbmVkLFxuICAgICAqIGl0IHdpbGwgcmV0dXJuIHJlc3VsdCBmcm9tIGNhY2hlLCB0aGVuIGl0IHdpbGwgKiphbHdheXMqKiBmZXRjaCBmcm9tIG5ldHdvcmsuXG4gICAgICpcbiAgICAgKiBZb3UgbXVzdCBzdWJzY3JpYmUgdG8gc3RhcnQgZ2V0dGluZyByZXN1bHRzIChhbmQgZmV0Y2ggZnJvbSBuZXR3b3JrKS5cbiAgICAgKlxuICAgICAqIFRoZSBvYnNlcnZhYmxlIHJlc3VsdCB3aWxsIG9ubHkgY29tcGxldGUgd2hlbiB1bnN1YnNjcmliaW5nLiBUaGF0IG1lYW5zIHlvdSAqKm11c3QqKiB1bnN1YnNjcmliZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2F0Y2hBbGwoXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzTWFuYWdlcjogTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxWYWxsPixcbiAgICAgICAgZmV0Y2hQb2xpY3k6IFdhdGNoUXVlcnlGZXRjaFBvbGljeSA9ICdjYWNoZS1hbmQtbmV0d29yaycsXG4gICAgKTogT2JzZXJ2YWJsZTxUYWxsPiB7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMuYWxsUXVlcnkpO1xuXG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KHtcbiAgICAgICAgICAgIHZhcmlhYmxlczogcXVlcnlWYXJpYWJsZXNNYW5hZ2VyLnZhcmlhYmxlcy5waXBlKFxuICAgICAgICAgICAgICAgIC8vIElnbm9yZSB2ZXJ5IGZhc3QgdmFyaWFibGUgY2hhbmdlc1xuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMCksXG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdmFyaWFibGVzIHRvIGJlIGRlZmluZWQgdG8gcHJldmVudCBkdXBsaWNhdGUgcXVlcnk6IHdpdGggYW5kIHdpdGhvdXQgdmFyaWFibGVzXG4gICAgICAgICAgICAgICAgLy8gTnVsbCBpcyBhY2NlcHRlZCB2YWx1ZSBmb3IgXCJubyB2YXJpYWJsZXNcIlxuICAgICAgICAgICAgICAgIGZpbHRlcih2YXJpYWJsZXMgPT4gdHlwZW9mIHZhcmlhYmxlcyAhPT0gJ3VuZGVmaW5lZCcpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHBhcnRpYWxWYXJpYWJsZXM6IHRoaXMuZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckFsbCgpLFxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQXBwbHkgcGFydGlhbCB2YXJpYWJsZXMgZnJvbSBzZXJ2aWNlXG4gICAgICAgICAgICAgICAgLy8gQ29weSBtYW5hZ2VyIHRvIHByZXZlbnQgdG8gYXBwbHkgaW50ZXJuYWwgdmFyaWFibGVzIHRvIGV4dGVybmFsIFF1ZXJ5VmFyaWFibGVzTWFuYWdlclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxWYWxsPihxdWVyeVZhcmlhYmxlc01hbmFnZXIpO1xuICAgICAgICAgICAgICAgIG1hbmFnZXIubWVyZ2UoJ3BhcnRpYWwtdmFyaWFibGVzJywgcmVzdWx0LnBhcnRpYWxWYXJpYWJsZXMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy5hbGxRdWVyeSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG9cbiAgICAgICAgICAgICAgICAgICAgLndhdGNoUXVlcnk8dW5rbm93biwgVmFsbD4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHRoaXMuYWxsUXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IG1hbmFnZXIudmFyaWFibGVzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hQb2xpY3k6IGZldGNoUG9saWN5LFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IEVNUFRZKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihyID0+ICEhci5kYXRhKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwQWxsKCksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9ucyBhbGxvdyB0byBxdWlja2x5IGNyZWF0ZSBvciB1cGRhdGUgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIE1hbmFnZXMgYSBcImNyZWF0aW9uIGlzIHBlbmRpbmdcIiBzdGF0dXMsIGFuZCB1cGRhdGUgd2hlbiBjcmVhdGlvbiBpcyByZWFkeS5cbiAgICAgKiBVc2VzIHJlZ3VsYXIgdXBkYXRlL3VwZGF0ZU5vdyBhbmQgY3JlYXRlIG1ldGhvZHMuXG4gICAgICogVXNlZCBtYWlubHkgd2hlbiBlZGl0aW5nIG11bHRpcGxlIG9iamVjdHMgaW4gc2FtZSBjb250cm9sbGVyIChsaWtlIGluIGVkaXRhYmxlIGFycmF5cylcbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlT3JVcGRhdGUoXG4gICAgICAgIG9iamVjdDogVmNyZWF0ZVsnaW5wdXQnXSB8IFdpdGhJZDxWdXBkYXRlWydpbnB1dCddPixcbiAgICAgICAgbm93ID0gZmFsc2UsXG4gICAgKTogT2JzZXJ2YWJsZTxUY3JlYXRlIHwgVHVwZGF0ZT4ge1xuICAgICAgICB0aGlzLnRocm93SWZPYnNlcnZhYmxlKG9iamVjdCk7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMuY3JlYXRlTXV0YXRpb24pO1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLnVwZGF0ZU11dGF0aW9uKTtcblxuICAgICAgICAvLyBJZiBjcmVhdGlvbiBpcyBwZW5kaW5nLCBsaXN0ZW4gdG8gY3JlYXRpb24gb2JzZXJ2YWJsZSBhbmQgd2hlbiByZWFkeSwgZmlyZSB1cGRhdGVcbiAgICAgICAgY29uc3QgcGVuZGluZ0NyZWF0aW9uID0gdGhpcy5jcmVhdGluZ0NhY2hlLmdldChvYmplY3QpO1xuICAgICAgICBpZiAocGVuZGluZ0NyZWF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gcGVuZGluZ0NyZWF0aW9uLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKG9iamVjdCBhcyBXaXRoSWQ8VnVwZGF0ZVsnaW5wdXQnXT4pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIG9iamVjdCBoYXMgSWQsIGp1c3Qgc2F2ZSBpdFxuICAgICAgICBpZiAoJ2lkJyBpbiBvYmplY3QgJiYgb2JqZWN0LmlkKSB7XG4gICAgICAgICAgICBpZiAobm93KSB7XG4gICAgICAgICAgICAgICAgLy8gdXNlZCBtYWlubHkgZm9yIHRlc3RzLCBiZWNhdXNlIGxvZGFzaCBkZWJvdW5jZWQgdXNlZCBpbiB1cGRhdGUoKSBkb2VzIG5vdCB3b3JrIGZpbmUgd2l0aCBmYWtlQXN5bmMgYW5kIHRpY2soKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU5vdyhvYmplY3QgYXMgV2l0aElkPFZ1cGRhdGVbJ2lucHV0J10+KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKG9iamVjdCBhcyBXaXRoSWQ8VnVwZGF0ZVsnaW5wdXQnXT4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgb2JqZWN0IHdhcyBub3Qgc2F2aW5nLCBhbmQgaGFzIG5vIElELCBjcmVhdGUgaXRcbiAgICAgICAgY29uc3QgY3JlYXRpb24gPSB0aGlzLmNyZWF0ZShvYmplY3QpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRpbmdDYWNoZS5kZWxldGUob2JqZWN0KTsgLy8gcmVtb3ZlIGZyb20gY2FjaGVcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHN0b3JlcyBjcmVhdGluZyBvYnNlcnZhYmxlIGluIGEgY2FjaGUgcmVwbGF5YWJsZSB2ZXJzaW9uIG9mIHRoZSBvYnNlcnZhYmxlLFxuICAgICAgICAvLyBzbyBzZXZlcmFsIHVwZGF0ZSgpIGNhbiBzdWJzY3JpYmUgdG8gdGhlIHNhbWUgY3JlYXRpb25cbiAgICAgICAgdGhpcy5jcmVhdGluZ0NhY2hlLnNldChvYmplY3QsIGNyZWF0aW9uLnBpcGUoc2hhcmVSZXBsYXkoKSkpO1xuXG4gICAgICAgIHJldHVybiBjcmVhdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gb2JqZWN0IGluIERCIGFuZCB0aGVuIHJlZmV0Y2ggdGhlIGxpc3Qgb2Ygb2JqZWN0c1xuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGUob2JqZWN0OiBWY3JlYXRlWydpbnB1dCddKTogT2JzZXJ2YWJsZTxUY3JlYXRlPiB7XG4gICAgICAgIHRoaXMudGhyb3dJZk9ic2VydmFibGUob2JqZWN0KTtcbiAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy5jcmVhdGVNdXRhdGlvbik7XG5cbiAgICAgICAgY29uc3QgdmFyaWFibGVzID0gbWVyZ2UoXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtpbnB1dDogdGhpcy5nZXRJbnB1dChvYmplY3QpfSxcbiAgICAgICAgICAgIHRoaXMuZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckNyZWF0aW9uKG9iamVjdCksXG4gICAgICAgICkgYXMgVmNyZWF0ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG9cbiAgICAgICAgICAgIC5tdXRhdGU8VGNyZWF0ZSwgVmNyZWF0ZT4oe1xuICAgICAgICAgICAgICAgIG11dGF0aW9uOiB0aGlzLmNyZWF0ZU11dGF0aW9uLFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlczogdmFyaWFibGVzLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwb2xsby5jbGllbnQucmVGZXRjaE9ic2VydmFibGVRdWVyaWVzKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld09iamVjdCA9IHRoaXMubWFwQ3JlYXRpb24ocmVzdWx0KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3T2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VXaXRoKG9iamVjdCwgbmV3T2JqZWN0LCBtZXJnZU92ZXJyaWRlQXJyYXkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld09iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgYW4gb2JqZWN0LCBhZnRlciBhIHNob3J0IGRlYm91bmNlXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZShvYmplY3Q6IFdpdGhJZDxWdXBkYXRlWydpbnB1dCddPik6IE9ic2VydmFibGU8VHVwZGF0ZT4ge1xuICAgICAgICB0aGlzLnRocm93SWZPYnNlcnZhYmxlKG9iamVjdCk7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMudXBkYXRlTXV0YXRpb24pO1xuXG4gICAgICAgIC8vIEtlZXAgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgdGhlIGRlYm91bmNlZCB1cGRhdGUgZnVuY3Rpb25cbiAgICAgICAgY29uc3QgaWQgPSBvYmplY3QuaWQ7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubmF0dXJhbERlYm91bmNlU2VydmljZS5kZWJvdW5jZSh0aGlzLCBpZCwgdGhpcy51cGRhdGVOb3cob2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIGFuIG9iamVjdCBpbW1lZGlhdGVseSB3aGVuIHN1YnNjcmliaW5nXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZU5vdyhvYmplY3Q6IFdpdGhJZDxWdXBkYXRlWydpbnB1dCddPik6IE9ic2VydmFibGU8VHVwZGF0ZT4ge1xuICAgICAgICB0aGlzLnRocm93SWZPYnNlcnZhYmxlKG9iamVjdCk7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMudXBkYXRlTXV0YXRpb24pO1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IG1lcmdlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiBvYmplY3QuaWQsXG4gICAgICAgICAgICAgICAgaW5wdXQ6IHRoaXMuZ2V0SW5wdXQob2JqZWN0KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLmdldFBhcnRpYWxWYXJpYWJsZXNGb3JVcGRhdGUob2JqZWN0KSxcbiAgICAgICAgKSBhcyBWdXBkYXRlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwb2xsb1xuICAgICAgICAgICAgLm11dGF0ZTxUdXBkYXRlLCBWdXBkYXRlPih7XG4gICAgICAgICAgICAgICAgbXV0YXRpb246IHRoaXMudXBkYXRlTXV0YXRpb24sXG4gICAgICAgICAgICAgICAgdmFyaWFibGVzOiB2YXJpYWJsZXMsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBvbGxvLmNsaWVudC5yZUZldGNoT2JzZXJ2YWJsZVF1ZXJpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkUmVzdWx0ID0gdGhpcy5tYXBVcGRhdGUocmVzdWx0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VXaXRoKG9iamVjdCwgbWFwcGVkUmVzdWx0LCBtZXJnZU92ZXJyaWRlQXJyYXkpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgYW4gb2JqZWN0IGJ1dCB3aXRob3V0IGF1dG9tYXRpY2FsbHkgaW5qZWN0aW5nIHZhbHVlcyBjb21pbmdcbiAgICAgKiBmcm9tIGBnZXREZWZhdWx0Rm9yU2VydmVyKClgLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVQYXJ0aWFsbHkob2JqZWN0OiBXaXRoSWQ8VnVwZGF0ZVsnaW5wdXQnXT4pOiBPYnNlcnZhYmxlPFR1cGRhdGU+IHtcbiAgICAgICAgdGhpcy50aHJvd0lmT2JzZXJ2YWJsZShvYmplY3QpO1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLnVwZGF0ZU11dGF0aW9uKTtcblxuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB7XG4gICAgICAgICAgICBpZDogb2JqZWN0LmlkLFxuICAgICAgICAgICAgaW5wdXQ6IG9taXQocmVsYXRpb25zVG9JZHMob2JqZWN0KSwgJ2lkJyksXG4gICAgICAgIH0gYXMgVnVwZGF0ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG9cbiAgICAgICAgICAgIC5tdXRhdGU8VHVwZGF0ZSwgVnVwZGF0ZT4oe1xuICAgICAgICAgICAgICAgIG11dGF0aW9uOiB0aGlzLnVwZGF0ZU11dGF0aW9uLFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlczogdmFyaWFibGVzLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwb2xsby5jbGllbnQucmVGZXRjaE9ic2VydmFibGVRdWVyaWVzKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hcFVwZGF0ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWxldGUgb2JqZWN0cyBhbmQgdGhlbiByZWZldGNoIHRoZSBsaXN0IG9mIG9iamVjdHNcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVsZXRlKG9iamVjdHM6IHtpZDogc3RyaW5nfVtdKTogT2JzZXJ2YWJsZTxUZGVsZXRlPiB7XG4gICAgICAgIHRoaXMudGhyb3dJZk9ic2VydmFibGUob2JqZWN0cyk7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMuZGVsZXRlTXV0YXRpb24pO1xuXG4gICAgICAgIGNvbnN0IGlkcyA9IG9iamVjdHMubWFwKG8gPT4ge1xuICAgICAgICAgICAgLy8gQ2FuY2VsIHBlbmRpbmcgdXBkYXRlXG4gICAgICAgICAgICB0aGlzLm5hdHVyYWxEZWJvdW5jZVNlcnZpY2UuY2FuY2VsKHRoaXMsIG8uaWQpO1xuXG4gICAgICAgICAgICByZXR1cm4gby5pZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IG1lcmdlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkczogaWRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMuZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckRlbGV0ZShvYmplY3RzKSxcbiAgICAgICAgKSBhcyBWZGVsZXRlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwb2xsb1xuICAgICAgICAgICAgLm11dGF0ZTxUZGVsZXRlLCBWZGVsZXRlPih7XG4gICAgICAgICAgICAgICAgbXV0YXRpb246IHRoaXMuZGVsZXRlTXV0YXRpb24sXG4gICAgICAgICAgICAgICAgdmFyaWFibGVzOiB2YXJpYWJsZXMsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gRGVsYXkgdGhlIG9ic2VydmFibGUgdW50aWwgQXBvbGxvIHJlZmV0Y2ggaXMgY29tcGxldGVkXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZFJlc3VsdCA9IHRoaXMubWFwRGVsZXRlKHJlc3VsdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyb20odGhpcy5hcG9sbG8uY2xpZW50LnJlRmV0Y2hPYnNlcnZhYmxlUXVlcmllcygpKS5waXBlKG1hcCgoKSA9PiBtYXBwZWRSZXN1bHQpKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSBtb2RlbCBhbmQgaXRlbXMgcmVsYXRlZCB0byB0aGUgbW9kZWwsIGlmIHRoZSBpZCBpcyBwcm92aWRlZCwgaW4gb3JkZXIgdG8gc2hvdyBhIGZvcm1cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVzb2x2ZShpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxSZXNvbHZlPFRvbmUgfCBWY3JlYXRlWydpbnB1dCddPj4ge1xuICAgICAgICAvLyBMb2FkIG1vZGVsIGlmIGlkIGlzIGdpdmVuXG4gICAgICAgIGxldCBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPFRvbmUgfCBWY3JlYXRlWydpbnB1dCddPjtcbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICBvYnNlcnZhYmxlID0gdGhpcy5nZXRPbmUoaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JzZXJ2YWJsZSA9IG9mKHRoaXMuZ2V0RGVmYXVsdEZvclNlcnZlcigpIGFzIFRvbmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUucGlwZShcbiAgICAgICAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7bW9kZWw6IHJlc3VsdH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYW4gb2JqZWN0IHRoYXQgbWF0Y2ggdGhlIEdyYXBoUUwgaW5wdXQgdHlwZS5cbiAgICAgKiBJdCBjcmVhdGVzIGFuIG9iamVjdCB3aXRoIG1hbnVhbGx5IGZpbGxlZCBkYXRhIGFuZCBhZGQgdW5jb21wbGV0ZWQgZGF0YSAobGlrZSByZXF1aXJlZCBhdHRyaWJ1dGVzIHRoYXQgY2FuIGJlIGVtcHR5IHN0cmluZ3MpXG4gICAgICovXG4gICAgcHVibGljIGdldElucHV0KG9iamVjdDogTGl0ZXJhbCk6IFZjcmVhdGVbJ2lucHV0J10gfCBWdXBkYXRlWydpbnB1dCddIHtcbiAgICAgICAgLy8gQ29udmVydCByZWxhdGlvbnMgdG8gdGhlaXIgSURzIGZvciBtdXRhdGlvblxuICAgICAgICBvYmplY3QgPSByZWxhdGlvbnNUb0lkcyhvYmplY3QpO1xuXG4gICAgICAgIC8vIFBpY2sgb25seSBhdHRyaWJ1dGVzIHRoYXQgd2UgY2FuIGZpbmQgaW4gdGhlIGVtcHR5IG9iamVjdFxuICAgICAgICAvLyBJbiBvdGhlciB3b3JkcywgcHJldmVudCB0byBzZWxlY3QgZGF0YSB0aGF0IGhhcyB1bndhbnRlZCBhdHRyaWJ1dGVzXG4gICAgICAgIGNvbnN0IGVtcHR5T2JqZWN0ID0gdGhpcy5nZXREZWZhdWx0Rm9yU2VydmVyKCk7XG4gICAgICAgIGxldCBpbnB1dCA9IHBpY2sob2JqZWN0LCBPYmplY3Qua2V5cyhlbXB0eU9iamVjdCkpO1xuXG4gICAgICAgIC8vIENvbXBsZXRlIGEgcG90ZW50aWFsbHkgdW5jb21wbGV0ZWQgb2JqZWN0IHdpdGggZGVmYXVsdCB2YWx1ZXNcbiAgICAgICAgaW5wdXQgPSBkZWZhdWx0cyhpbnB1dCwgZW1wdHlPYmplY3QpO1xuXG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBvYmplY3RzIG1hdGNoaW5nIHRoZSBxdWVyeS4gSXQgbWF5IG5ldmVyIGNvbXBsZXRlLlxuICAgICAqXG4gICAgICogVGhpcyBpcyB1c2VkIGZvciB0aGUgdW5pcXVlIHZhbGlkYXRvclxuICAgICAqL1xuICAgIHB1YmxpYyBjb3VudChxdWVyeVZhcmlhYmxlc01hbmFnZXI6IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8VmFsbD4pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBwbHVyYWwgPSBtYWtlUGx1cmFsKHRoaXMubmFtZSk7XG4gICAgICAgIGNvbnN0IHF1ZXJ5TmFtZSA9ICdDb3VudCcgKyB1cHBlckNhc2VGaXJzdExldHRlcihwbHVyYWwpO1xuICAgICAgICBjb25zdCBmaWx0ZXJUeXBlID0gdXBwZXJDYXNlRmlyc3RMZXR0ZXIodGhpcy5uYW1lKSArICdGaWx0ZXInO1xuXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ3FsYFxuICAgICAgICAgICAgcXVlcnkgJHtxdWVyeU5hbWV9ICgkZmlsdGVyOiAke2ZpbHRlclR5cGV9KSB7XG4gICAgICAgICAgICBjb3VudDogJHtwbHVyYWx9IChmaWx0ZXI6ICRmaWx0ZXIsIHBhZ2luYXRpb246IHtwYWdlU2l6ZTogMCwgcGFnZUluZGV4OiAwfSkge1xuICAgICAgICAgICAgbGVuZ3RoXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB9YDtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJ0aWFsVmFyaWFibGVzRm9yQWxsKCkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcChwYXJ0aWFsVmFyaWFibGVzID0+IHtcbiAgICAgICAgICAgICAgICAvLyBDb3B5IG1hbmFnZXIgdG8gcHJldmVudCB0byBhcHBseSBpbnRlcm5hbCB2YXJpYWJsZXMgdG8gZXh0ZXJuYWwgUXVlcnlWYXJpYWJsZXNNYW5hZ2VyXG4gICAgICAgICAgICAgICAgY29uc3QgbWFuYWdlciA9IG5ldyBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyPFZhbGw+KHF1ZXJ5VmFyaWFibGVzTWFuYWdlcik7XG4gICAgICAgICAgICAgICAgbWFuYWdlci5tZXJnZSgncGFydGlhbC12YXJpYWJsZXMnLCBwYXJ0aWFsVmFyaWFibGVzKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwb2xsby5xdWVyeTx7Y291bnQ6IHtsZW5ndGg6IG51bWJlcn19LCBWYWxsPih7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzOiBtYW5hZ2VyLnZhcmlhYmxlcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAocmVzdWx0ID0+IHJlc3VsdC5kYXRhLmNvdW50Lmxlbmd0aCksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGVtcHR5IG9iamVjdCB3aXRoIHNvbWUgZGVmYXVsdCB2YWx1ZXMgZnJvbSBzZXJ2ZXIgcGVyc3BlY3RpdmVcbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWZ1bCB3aGVuIHNob3dpbmcgYSBmb3JtIGZvciBjcmVhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXREZWZhdWx0Rm9yU2VydmVyKCk6IFZjcmVhdGVbJ2lucHV0J10ge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogWW91IHByb2JhYmx5ICoqc2hvdWxkIG5vdCoqIHVzZSB0aGlzLlxuICAgICAqXG4gICAgICogSWYgeW91IGFyZSB0cnlpbmcgdG8gKmNhbGwqIHRoaXMgbWV0aG9kLCBpbnN0ZWFkIHlvdSBwcm9iYWJseSB3YW50IHRvIGNhbGwgYGdldERlZmF1bHRGb3JTZXJ2ZXIoKWAgdG8gZ2V0IGRlZmF1bHRcbiAgICAgKiB2YWx1ZXMgZm9yIGEgbW9kZWwsIG9yIGBnZXRGb3JtQ29uZmlnKClgIHRvIGdldCBhIGNvbmZpZ3VyZWQgZm9ybSB0aGF0IGluY2x1ZGVzIGV4dHJhIGZvcm0gZmllbGRzLlxuICAgICAqXG4gICAgICogSWYgeW91IGFyZSB0cnlpbmcgdG8gKm92ZXJyaWRlKiB0aGlzIG1ldGhvZCwgaW5zdGVhZCB5b3UgcHJvYmFibHkgd2FudCB0byBvdmVycmlkZSBgZ2V0RGVmYXVsdEZvclNlcnZlcigpYC5cbiAgICAgKlxuICAgICAqIFRoZSBvbmx5IGFuZCAqKnZlcnkgcmFyZSoqIHJlYXNvbiB0byBvdmVycmlkZSB0aGlzIG1ldGhvZCBpcyBpZiB0aGUgY2xpZW50IG5lZWRzIGV4dHJhIGZvcm0gZmllbGRzIHRoYXQgY2Fubm90IGJlXG4gICAgICogYWNjZXB0ZWQgYnkgdGhlIHNlcnZlciAobm90IHBhcnQgb2YgYFhYWElucHV0YCB0eXBlKSBhbmQgdGhhdCBhcmUgc3RyaWN0bHkgZm9yIHRoZSBjbGllbnQgZm9ybSBuZWVkcy4gSW4gdGhhdCBjYXNlLFxuICAgICAqIHRoZW4geW91IGNhbiByZXR1cm4gZGVmYXVsdCB2YWx1ZXMgZm9yIHRob3NlIGV4dHJhIGZvcm0gZmllbGRzLCBhbmQgdGhlIGZvcm0gcmV0dXJuZWQgYnkgYGdldEZvcm1Db25maWcoKWAgd2lsbFxuICAgICAqIGluY2x1ZGUgdGhvc2UgZXh0cmEgZmllbGRzLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRGb3JtRXh0cmFGaWVsZERlZmF1bHRWYWx1ZXMoKTogTGl0ZXJhbCB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHVzZWQgdG8gZXh0cmFjdCBvbmx5IHRoZSBhcnJheSBvZiBmZXRjaGVkIG9iamVjdHMgb3V0IG9mIHRoZSBlbnRpcmUgZmV0Y2hlZCBkYXRhXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG1hcEFsbCgpOiBPcGVyYXRvckZ1bmN0aW9uPEZldGNoUmVzdWx0PHVua25vd24+LCBUYWxsPiB7XG4gICAgICAgIGNvbnN0IHBsdXJhbCA9IG1ha2VQbHVyYWwodGhpcy5uYW1lKTtcbiAgICAgICAgcmV0dXJuIG1hcChyZXN1bHQgPT4gKHJlc3VsdC5kYXRhIGFzIGFueSlbcGx1cmFsXSk7IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBvbGxvZ3JhcGhxbC9hcG9sbG8tY2xpZW50L2lzc3Vlcy81NjYyXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB1c2VkIHRvIGV4dHJhY3Qgb25seSB0aGUgY3JlYXRlZCBvYmplY3Qgb3V0IG9mIHRoZSBlbnRpcmUgZmV0Y2hlZCBkYXRhXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG1hcENyZWF0aW9uKHJlc3VsdDogTXV0YXRpb25SZXN1bHQ8dW5rbm93bj4pOiBUY3JlYXRlIHtcbiAgICAgICAgY29uc3QgbmFtZSA9ICdjcmVhdGUnICsgdXBwZXJDYXNlRmlyc3RMZXR0ZXIodGhpcy5uYW1lKTtcbiAgICAgICAgcmV0dXJuIChyZXN1bHQuZGF0YSBhcyBhbnkpW25hbWVdOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvYXBvbGxvLWNsaWVudC9pc3N1ZXMvNTY2MlxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdXNlZCB0byBleHRyYWN0IG9ubHkgdGhlIHVwZGF0ZWQgb2JqZWN0IG91dCBvZiB0aGUgZW50aXJlIGZldGNoZWQgZGF0YVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBtYXBVcGRhdGUocmVzdWx0OiBNdXRhdGlvblJlc3VsdDx1bmtub3duPik6IFR1cGRhdGUge1xuICAgICAgICBjb25zdCBuYW1lID0gJ3VwZGF0ZScgKyB1cHBlckNhc2VGaXJzdExldHRlcih0aGlzLm5hbWUpO1xuICAgICAgICByZXR1cm4gKHJlc3VsdC5kYXRhIGFzIGFueSlbbmFtZV07IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBvbGxvZ3JhcGhxbC9hcG9sbG8tY2xpZW50L2lzc3Vlcy81NjYyXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB1c2VkIHRvIGV4dHJhY3Qgb25seSBmbGFnIHdoZW4gZGVsZXRpbmcgYW4gb2JqZWN0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIG1hcERlbGV0ZShyZXN1bHQ6IE11dGF0aW9uUmVzdWx0PHVua25vd24+KTogVGRlbGV0ZSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSAnZGVsZXRlJyArIG1ha2VQbHVyYWwodXBwZXJDYXNlRmlyc3RMZXR0ZXIodGhpcy5uYW1lKSk7XG4gICAgICAgIHJldHVybiAocmVzdWx0LmRhdGEgYXMgYW55KVtuYW1lXTsgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcG9sbG9ncmFwaHFsL2Fwb2xsby1jbGllbnQvaXNzdWVzLzU2NjJcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFkZGl0aW9uYWwgdmFyaWFibGVzIHRvIGJlIHVzZWQgd2hlbiBnZXR0aW5nIGEgc2luZ2xlIG9iamVjdFxuICAgICAqXG4gICAgICogVGhpcyBpcyB0eXBpY2FsbHkgYSBzaXRlIG9yIHN0YXRlIElELCBhbmQgaXMgbmVlZGVkIHRvIGdldCBhcHByb3ByaWF0ZSBhY2Nlc3MgcmlnaHRzXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldFBhcnRpYWxWYXJpYWJsZXNGb3JPbmUoKTogT2JzZXJ2YWJsZTxQYXJ0aWFsPFZvbmU+PiB7XG4gICAgICAgIHJldHVybiBvZih7fSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhZGRpdGlvbmFsIHZhcmlhYmxlcyB0byBiZSB1c2VkIHdoZW4gZ2V0dGluZyBtdWx0aXBsZSBvYmplY3RzXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHR5cGljYWxseSBhIHNpdGUgb3Igc3RhdGUgSUQsIGJ1dCBpdCBjb3VsZCBiZSBzb21ldGhpbmcgZWxzZSB0byBmdXJ0aGVyIGZpbHRlciB0aGUgcXVlcnlcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckFsbCgpOiBPYnNlcnZhYmxlPFBhcnRpYWw8VmFsbD4+IHtcbiAgICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFkZGl0aW9uYWwgdmFyaWFibGVzIHRvIGJlIHVzZWQgd2hlbiBjcmVhdGluZyBhbiBvYmplY3RcbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdHlwaWNhbGx5IGEgc2l0ZSBvciBzdGF0ZSBJRFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwcm90ZWN0ZWQgZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckNyZWF0aW9uKG9iamVjdDogTGl0ZXJhbCk6IFBhcnRpYWw8VmNyZWF0ZT4ge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhZGRpdGlvbmFsIHZhcmlhYmxlcyB0byBiZSB1c2VkIHdoZW4gdXBkYXRpbmcgYW4gb2JqZWN0XG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHR5cGljYWxseSBhIHNpdGUgb3Igc3RhdGUgSURcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHJvdGVjdGVkIGdldFBhcnRpYWxWYXJpYWJsZXNGb3JVcGRhdGUob2JqZWN0OiBMaXRlcmFsKTogUGFydGlhbDxWdXBkYXRlPiB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gYmUgdXNlZCB3aGVuIGRlbGV0aW5nIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogVGhpcyBpcyB0eXBpY2FsbHkgYSBzaXRlIG9yIHN0YXRlIElEXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHByb3RlY3RlZCBnZXRQYXJ0aWFsVmFyaWFibGVzRm9yRGVsZXRlKG9iamVjdHM6IExpdGVyYWxbXSk6IFBhcnRpYWw8VmRlbGV0ZT4ge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhyb3cgZXhjZXB0aW9uIHRvIHByZXZlbnQgZXhlY3V0aW5nIHF1ZXJpZXMgd2l0aCBpbnZhbGlkIHZhcmlhYmxlc1xuICAgICAqL1xuICAgIHByb3RlY3RlZCB0aHJvd0lmT2JzZXJ2YWJsZSh2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0Nhbm5vdCB1c2UgT2JzZXJ2YWJsZSBhcyB2YXJpYWJsZXMuIEluc3RlYWQgeW91IHNob3VsZCB1c2UgLnN1YnNjcmliZSgpIHRvIGNhbGwgdGhlIG1ldGhvZCB3aXRoIGEgcmVhbCB2YWx1ZScsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWVyZ2UgZ2l2ZW4gSUQgd2l0aCBhZGRpdGlvbmFsIHBhcnRpYWwgdmFyaWFibGVzIGlmIHRoZXJlIGlzIGFueVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0VmFyaWFibGVzRm9yT25lKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFZvbmU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFydGlhbFZhcmlhYmxlc0Zvck9uZSgpLnBpcGUoXG4gICAgICAgICAgICBtYXAocGFydGlhbFZhcmlhYmxlcyA9PiBtZXJnZSh7fSwge2lkOiBpZH0gYXMgVm9uZSwgcGFydGlhbFZhcmlhYmxlcykpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRocm93IGV4Y2VwdGlvbiB0byBwcmV2ZW50IGV4ZWN1dGluZyBudWxsIHF1ZXJpZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIHRocm93SWZOb3RRdWVyeShxdWVyeTogRG9jdW1lbnROb2RlIHwgbnVsbCk6IGFzc2VydHMgcXVlcnkge1xuICAgICAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyYXBoUUwgcXVlcnkgZm9yIHRoaXMgbWV0aG9kIHdhcyBub3QgY29uZmlndXJlZCBpbiB0aGlzIHNlcnZpY2UgY29uc3RydWN0b3InKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
496
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbW9kZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9zZXJ2aWNlcy9hYnN0cmFjdC1tb2RlbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBUyxHQUFHLEVBQWlCLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFjLGFBQWEsRUFBd0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RixPQUFPLEVBQW9DLGtCQUFrQixFQUFFLGdCQUFnQixFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEgsT0FBTyxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakUsT0FBTyxFQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBbUIsTUFBTSxNQUFNLENBQUM7QUFDckcsT0FBTyxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pHLE9BQU8sRUFBQyw0QkFBNEIsRUFBaUIsTUFBTSxtQ0FBbUMsQ0FBQztBQUUvRixPQUFPLEVBQUMsVUFBVSxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBb0J4RyxNQUFNLE9BQWdCLDJCQUEyQjtJQWlCN0MsWUFDdUIsTUFBYyxFQUNkLHNCQUE4QyxFQUM5QyxJQUFZLEVBQ1osUUFBNkIsRUFDN0IsUUFBNkIsRUFDN0IsY0FBbUMsRUFDbkMsY0FBbUMsRUFDbkMsY0FBbUM7UUFQbkMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLGFBQVEsR0FBUixRQUFRLENBQXFCO1FBQzdCLGFBQVEsR0FBUixRQUFRLENBQXFCO1FBQzdCLG1CQUFjLEdBQWQsY0FBYyxDQUFxQjtRQUNuQyxtQkFBYyxHQUFkLGNBQWMsQ0FBcUI7UUFDbkMsbUJBQWMsR0FBZCxjQUFjLENBQXFCO1FBYjFEOztXQUVHO1FBQ2Msa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBb0UsQ0FBQztJQVcxRyxDQUFDO0lBRUo7O09BRUc7SUFDSCw2REFBNkQ7SUFDdEQsaUJBQWlCLENBQUMsS0FBZTtRQUNwQyxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILDZEQUE2RDtJQUN0RCxzQkFBc0IsQ0FBQyxLQUFlO1FBQ3pDLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsNkRBQTZEO0lBQ3RELHNCQUFzQixDQUFDLEtBQWU7UUFDekMsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCw2REFBNkQ7SUFDdEQsMkJBQTJCLENBQUMsS0FBZTtRQUM5QyxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFTSxhQUFhLENBQUMsS0FBYztRQUMvQixNQUFNLE1BQU0sR0FBRyxFQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsOEJBQThCLEVBQUUsRUFBQyxDQUFDO1FBQ3pGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsTUFBTSxRQUFRLEdBQWlCLEVBQUUsQ0FBQztRQUNsQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFdkUsSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDWCxRQUFRLENBQUMsRUFBRSxHQUFHLElBQUksa0JBQWtCLENBQUMsRUFBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBRUQseUNBQXlDO1FBQ3pDLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sU0FBUyxHQUFHO2dCQUNkLEtBQUssRUFBRSxLQUFLO2dCQUNaLFFBQVEsRUFBRSxRQUFRO2FBQ3JCLENBQUM7WUFDRixNQUFNLFNBQVMsR0FBRyxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2xGLE1BQU0sY0FBYyxHQUFHLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFFakcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksa0JBQWtCLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBRUQsdUVBQXVFO1FBQ3ZFLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxTQUFTLEdBQUc7b0JBQ2QsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO29CQUNyQyxRQUFRLEVBQUUsUUFBUTtpQkFDckIsQ0FBQztnQkFFRixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkUsQ0FBQztRQUNMLENBQUM7UUFFRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUM3QyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNELENBQUM7aUJBQU0sQ0FBQztnQkFDSixNQUFNLFNBQVMsR0FBRztvQkFDZCxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7b0JBQ3JDLFFBQVEsRUFBRSxRQUFRO2lCQUNyQixDQUFDO2dCQUVGLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEYsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxZQUFZLENBQUMsS0FBYztRQUM5QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUU7WUFDcEMsVUFBVSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUM7WUFDOUMsZUFBZSxFQUFFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUM7U0FDM0QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLEVBQVU7UUFDcEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXBDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDbkMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRXBDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQWdCO2dCQUN6QyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3BCLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixXQUFXLEVBQUUsbUJBQW1CO2dCQUNoQyxlQUFlLEVBQUUsWUFBWTthQUNoQyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxFQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQy9CLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEtBQUssYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFDdkUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUUsTUFBTSxDQUFDLElBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3JELENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMscUJBQXlEO1FBQ25FLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXBDLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsSUFBSSxDQUN4QyxLQUFLLEVBQUUsRUFDUCxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVwQyx3RkFBd0Y7WUFDeEYsTUFBTSxPQUFPLEdBQUcsSUFBSSw0QkFBNEIsQ0FBTyxxQkFBcUIsQ0FBQyxDQUFDO1lBQzlFLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUVyRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFnQjtnQkFDcEMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUNwQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLO2dCQUNsQyxXQUFXLEVBQUUsY0FBYzthQUM5QixDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsRUFDRixJQUFJLENBQUMsTUFBTSxFQUFFLENBQ2hCLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksUUFBUSxDQUNYLHFCQUF5RCxFQUN6RCxjQUFxQyxtQkFBbUI7UUFFeEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFcEMsT0FBTyxhQUFhLENBQUM7WUFDakIsU0FBUyxFQUFFLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxJQUFJO1lBQzNDLG9DQUFvQztZQUNwQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ2hCLDBGQUEwRjtZQUMxRiw0Q0FBNEM7WUFDNUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxTQUFTLEtBQUssV0FBVyxDQUFDLENBQ3hEO1lBQ0QsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixFQUFFO1NBQ3JELENBQUMsQ0FBQyxJQUFJLENBQ0gsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2YsdUNBQXVDO1lBQ3ZDLHdGQUF3RjtZQUN4RixNQUFNLE9BQU8sR0FBRyxJQUFJLDRCQUE0QixDQUFPLHFCQUFxQixDQUFDLENBQUM7WUFDOUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUU1RCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVwQyxPQUFPLElBQUksQ0FBQyxNQUFNO2lCQUNiLFVBQVUsQ0FBZ0I7Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDcEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSztnQkFDbEMsV0FBVyxFQUFFLFdBQVc7YUFDM0IsQ0FBQztpQkFDRCxZQUFZLENBQUMsSUFBSSxDQUNkLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFDckIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUNoQixDQUFDO1FBQ1YsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxjQUFjLENBQ2pCLE1BQW1ELEVBQ25ELEdBQUcsR0FBRyxLQUFLO1FBRVgsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTFDLG9GQUFvRjtRQUNwRixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RCxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FDdkIsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBa0MsQ0FBQyxDQUFDO1lBQzNELENBQUMsQ0FBQyxDQUNMLENBQUM7UUFDTixDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDOUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDTixnSEFBZ0g7Z0JBQ2hILE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFrQyxDQUFDLENBQUM7WUFDOUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFrQyxDQUFDLENBQUM7WUFDM0QsQ0FBQztRQUNMLENBQUM7UUFFRCxxREFBcUQ7UUFDckQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQ3JDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtRQUMzRCxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBRUYsOEVBQThFO1FBQzlFLHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFN0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLE1BQXdCO1FBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUxQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQ25CLEVBQUUsRUFDRixFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFDLEVBQzlCLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxNQUFNLENBQUMsQ0FDbkMsQ0FBQztRQUViLE9BQU8sSUFBSSxDQUFDLE1BQU07YUFDYixNQUFNLENBQW1CO1lBQ3RCLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYztZQUM3QixTQUFTLEVBQUUsU0FBUztTQUN2QixDQUFDO2FBQ0QsSUFBSSxDQUNELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNULElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDOUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUUzQyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNaLE9BQU8sU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUM1RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osT0FBTyxTQUFTLENBQUM7WUFDckIsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDVixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsTUFBZ0M7UUFDMUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTFDLDBEQUEwRDtRQUMxRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBRXJCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTLENBQUMsTUFBZ0M7UUFDN0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTFDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FDbkI7WUFDSSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDYixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7U0FDL0IsRUFDRCxJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQ2pDLENBQUM7UUFFYixPQUFPLElBQUksQ0FBQyxNQUFNO2FBQ2IsTUFBTSxDQUFtQjtZQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDN0IsU0FBUyxFQUFFLFNBQVM7U0FDdkIsQ0FBQzthQUNELElBQUksQ0FDRCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDVCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQzlDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFNUMsT0FBTyxTQUFTLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDVixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZUFBZSxDQUFDLE1BQWdDO1FBQ25ELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUxQyxNQUFNLFNBQVMsR0FBRztZQUNkLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRTtZQUNiLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQztTQUNqQyxDQUFDO1FBRWIsT0FBTyxJQUFJLENBQUMsTUFBTTthQUNiLE1BQU0sQ0FBbUI7WUFDdEIsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQzdCLFNBQVMsRUFBRSxTQUFTO1NBQ3ZCLENBQUM7YUFDRCxJQUFJLENBQ0QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUM5QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNWLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxPQUF1QjtRQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFMUMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4Qix3QkFBd0I7WUFDeEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRWxELE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FDbkI7WUFDSSxHQUFHLEVBQUUsR0FBRztTQUNYLEVBQ0QsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUNsQyxDQUFDO1FBRWIsT0FBTyxJQUFJLENBQUMsTUFBTTthQUNiLE1BQU0sQ0FBbUI7WUFDdEIsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQzdCLFNBQVMsRUFBRSxTQUFTO1NBQ3ZCLENBQUM7YUFDRCxJQUFJO1FBQ0QseURBQXlEO1FBQ3pELFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNmLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFNUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUM3RixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ1YsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTyxDQUFDLEVBQVU7UUFDckIsNEJBQTRCO1FBQzVCLElBQUksVUFBK0MsQ0FBQztRQUNwRCxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ0wsVUFBVSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkcsQ0FBQzthQUFNLENBQUM7WUFDSixVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBVSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDLElBQUksQ0FDbEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ1QsT0FBTyxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxNQUFlO1FBQzNCLDhDQUE4QztRQUM5QyxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWhDLDREQUE0RDtRQUM1RCxzRUFBc0U7UUFDdEUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDL0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFFbkQsZ0VBQWdFO1FBQ2hFLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRXJDLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLHFCQUF5RDtRQUNsRSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sU0FBUyxHQUFHLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RCxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBRTlELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQTtvQkFDTCxTQUFTLGNBQWMsVUFBVTtxQkFDaEMsTUFBTTs7O2NBR2IsQ0FBQztRQUVQLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsSUFBSSxDQUN4QyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUN6Qix3RkFBd0Y7WUFDeEYsTUFBTSxPQUFPLEdBQUcsSUFBSSw0QkFBNEIsQ0FBTyxxQkFBcUIsQ0FBQyxDQUFDO1lBQzlFLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUVyRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFrQztnQkFDdEQsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSztnQkFDbEMsV0FBVyxFQUFFLGNBQWM7YUFDOUIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQzFDLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLG1CQUFtQjtRQUN0QixPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDTyw4QkFBOEI7UUFDcEMsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxNQUFNO1FBQ1osTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFFLE1BQU0sQ0FBQyxJQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlFQUFpRTtJQUN6SCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxXQUFXLENBQUMsTUFBK0I7UUFDakQsTUFBTSxJQUFJLEdBQUcsUUFBUSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxPQUFRLE1BQU0sQ0FBQyxJQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxpRUFBaUU7SUFDeEcsQ0FBQztJQUVEOztPQUVHO0lBQ08sU0FBUyxDQUFDLE1BQStCO1FBQy9DLE1BQU0sSUFBSSxHQUFHLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEQsT0FBUSxNQUFNLENBQUMsSUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsaUVBQWlFO0lBQ3hHLENBQUM7SUFFRDs7T0FFRztJQUNPLFNBQVMsQ0FBQyxNQUErQjtRQUMvQyxNQUFNLElBQUksR0FBRyxRQUFRLEdBQUcsVUFBVSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE9BQVEsTUFBTSxDQUFDLElBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlFQUFpRTtJQUN4RyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLHlCQUF5QjtRQUMvQixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLHlCQUF5QjtRQUM1QixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDZEQUE2RDtJQUNuRCw4QkFBOEIsQ0FBQyxNQUFlO1FBQ3BELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCw2REFBNkQ7SUFDbkQsNEJBQTRCLENBQUMsTUFBZTtRQUNsRCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsNkRBQTZEO0lBQ25ELDRCQUE0QixDQUFDLE9BQWtCO1FBQ3JELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ08saUJBQWlCLENBQUMsS0FBYztRQUN0QyxJQUFJLEtBQUssWUFBWSxVQUFVLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksS0FBSyxDQUNYLDhHQUE4RyxDQUNqSCxDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQixDQUFDLEVBQVU7UUFDakMsT0FBTyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxJQUFJLENBQ3hDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFDLEVBQUUsRUFBRSxFQUFFLEVBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQ3pFLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlLENBQUMsS0FBMEI7UUFDOUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO1FBQ3BHLENBQUM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Fwb2xsbywgZ3FsLCBNdXRhdGlvblJlc3VsdH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInO1xuaW1wb3J0IHtGZXRjaFJlc3VsdCwgTmV0d29ya1N0YXR1cywgV2F0Y2hRdWVyeUZldGNoUG9saWN5fSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvckZufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0RvY3VtZW50Tm9kZX0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQge2RlZmF1bHRzLCBtZXJnZSwgbWVyZ2VXaXRoLCBvbWl0LCBwaWNrfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBjb21iaW5lTGF0ZXN0LCBFTVBUWSwgZmlyc3QsIGZyb20sIE9ic2VydmFibGUsIG9mLCBPcGVyYXRvckZ1bmN0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFrZVdoaWxlLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlciwgUXVlcnlWYXJpYWJsZXN9IGZyb20gJy4uL2NsYXNzZXMvcXVlcnktdmFyaWFibGUtbWFuYWdlcic7XG5pbXBvcnQge0xpdGVyYWx9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7bWFrZVBsdXJhbCwgbWVyZ2VPdmVycmlkZUFycmF5LCByZWxhdGlvbnNUb0lkcywgdXBwZXJDYXNlRmlyc3RMZXR0ZXJ9IGZyb20gJy4uL2NsYXNzZXMvdXRpbGl0eSc7XG5pbXBvcnQge1BhZ2luYXRlZERhdGF9IGZyb20gJy4uL2NsYXNzZXMvZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHtOYXR1cmFsRGVib3VuY2VTZXJ2aWNlfSBmcm9tICcuL2RlYm91bmNlLnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBGb3JtVmFsaWRhdG9ycyA9IFJlY29yZDxzdHJpbmcsIFZhbGlkYXRvckZuW10+O1xuXG5leHBvcnQgdHlwZSBGb3JtQXN5bmNWYWxpZGF0b3JzID0gUmVjb3JkPHN0cmluZywgQXN5bmNWYWxpZGF0b3JGbltdPjtcblxuZXhwb3J0IHR5cGUgVmFyaWFibGVzV2l0aElucHV0ID0ge1xuICAgIGlucHV0OiBMaXRlcmFsO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybUNvbnRyb2xzID0gUmVjb3JkPHN0cmluZywgQWJzdHJhY3RDb250cm9sPjtcblxudHlwZSBSZXNvbHZlPFRPbmU+ID0ge1xuICAgIG1vZGVsOiBUT25lO1xufTtcblxuZXhwb3J0IHR5cGUgV2l0aElkPFQ+ID0ge2lkOiBzdHJpbmd9ICYgVDtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZTxcbiAgICBUb25lLFxuICAgIFZvbmUgZXh0ZW5kcyB7aWQ6IHN0cmluZ30sXG4gICAgVGFsbCBleHRlbmRzIFBhZ2luYXRlZERhdGE8TGl0ZXJhbD4sXG4gICAgVmFsbCBleHRlbmRzIFF1ZXJ5VmFyaWFibGVzLFxuICAgIFRjcmVhdGUsXG4gICAgVmNyZWF0ZSBleHRlbmRzIFZhcmlhYmxlc1dpdGhJbnB1dCxcbiAgICBUdXBkYXRlLFxuICAgIFZ1cGRhdGUgZXh0ZW5kcyB7aWQ6IHN0cmluZzsgaW5wdXQ6IExpdGVyYWx9LFxuICAgIFRkZWxldGUsXG4gICAgVmRlbGV0ZSBleHRlbmRzIHtpZHM6IHN0cmluZ1tdfSxcbj4ge1xuICAgIC8qKlxuICAgICAqIFN0b3JlIHRoZSBjcmVhdGlvbiBtdXRhdGlvbnMgdGhhdCBhcmUgcGVuZGluZ1xuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRpbmdDYWNoZSA9IG5ldyBNYXA8VmNyZWF0ZVsnaW5wdXQnXSB8IFdpdGhJZDxWdXBkYXRlWydpbnB1dCddPiwgT2JzZXJ2YWJsZTxUY3JlYXRlPj4oKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwb2xsbzogQXBvbGxvLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmF0dXJhbERlYm91bmNlU2VydmljZTogTmF0dXJhbERlYm91bmNlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5hbWU6IHN0cmluZyxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9uZVF1ZXJ5OiBEb2N1bWVudE5vZGUgfCBudWxsLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWxsUXVlcnk6IERvY3VtZW50Tm9kZSB8IG51bGwsXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBjcmVhdGVNdXRhdGlvbjogRG9jdW1lbnROb2RlIHwgbnVsbCxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IHVwZGF0ZU11dGF0aW9uOiBEb2N1bWVudE5vZGUgfCBudWxsLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVsZXRlTXV0YXRpb246IERvY3VtZW50Tm9kZSB8IG51bGwsXG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBpbmRpdmlkdWFsIGZpZWxkcyB2YWxpZGF0b3JzXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHB1YmxpYyBnZXRGb3JtVmFsaWRhdG9ycyhtb2RlbD86IExpdGVyYWwpOiBGb3JtVmFsaWRhdG9ycyB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGluZGl2aWR1YWwgYXN5bmMgZmllbGRzIHZhbGlkYXRvcnNcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIGdldEZvcm1Bc3luY1ZhbGlkYXRvcnMobW9kZWw/OiBMaXRlcmFsKTogRm9ybUFzeW5jVmFsaWRhdG9ycyB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGdyb3VwZWQgZmllbGRzIHZhbGlkYXRvcnMgKGxpa2UgcGFzc3dvcmQgKyBjb25maXJtIHBhc3N3b3JkKVxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgZ2V0Rm9ybUdyb3VwVmFsaWRhdG9ycyhtb2RlbD86IExpdGVyYWwpOiBWYWxpZGF0b3JGbltdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgYXN5bmMgZ3JvdXAgZmllbGRzIHZhbGlkYXRvcnMgKGxpa2UgdW5pcXVlIGNvbnN0cmFpbnQgb24gbXVsdGlwbGUgY29sdW1ucylcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIGdldEZvcm1Hcm91cEFzeW5jVmFsaWRhdG9ycyhtb2RlbD86IExpdGVyYWwpOiBBc3luY1ZhbGlkYXRvckZuW10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZvcm1Db25maWcobW9kZWw6IExpdGVyYWwpOiBGb3JtQ29udHJvbHMge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB7Li4udGhpcy5nZXREZWZhdWx0Rm9yU2VydmVyKCksIC4uLnRoaXMuZ2V0Rm9ybUV4dHJhRmllbGREZWZhdWx0VmFsdWVzKCl9O1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5nZXRGb3JtVmFsaWRhdG9ycyhtb2RlbCk7XG4gICAgICAgIGNvbnN0IGFzeW5jVmFsaWRhdG9ycyA9IHRoaXMuZ2V0Rm9ybUFzeW5jVmFsaWRhdG9ycyhtb2RlbCk7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xzOiBGb3JtQ29udHJvbHMgPSB7fTtcbiAgICAgICAgY29uc3QgZGlzYWJsZWQgPSBtb2RlbC5wZXJtaXNzaW9ucyA/ICFtb2RlbC5wZXJtaXNzaW9ucy51cGRhdGUgOiBmYWxzZTtcblxuICAgICAgICBpZiAobW9kZWwuaWQpIHtcbiAgICAgICAgICAgIGNvbnRyb2xzLmlkID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCh7dmFsdWU6IG1vZGVsLmlkLCBkaXNhYmxlZDogdHJ1ZX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29uZmlndXJlIGZvcm0gZm9yIGVhY2ggZmllbGQgb2YgbW9kZWxcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWVzKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtb2RlbFtrZXldICE9PSB1bmRlZmluZWQgPyBtb2RlbFtrZXldIDogdmFsdWVzW2tleV07XG4gICAgICAgICAgICBjb25zdCBmb3JtU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB0eXBlb2YgdmFsaWRhdG9yc1trZXldICE9PSAndW5kZWZpbmVkJyA/IHZhbGlkYXRvcnNba2V5XSA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBhc3luY1ZhbGlkYXRvciA9IHR5cGVvZiBhc3luY1ZhbGlkYXRvcnNba2V5XSAhPT0gJ3VuZGVmaW5lZCcgPyBhc3luY1ZhbGlkYXRvcnNba2V5XSA6IG51bGw7XG5cbiAgICAgICAgICAgIGNvbnRyb2xzW2tleV0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKGZvcm1TdGF0ZSwgdmFsaWRhdG9yLCBhc3luY1ZhbGlkYXRvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb25maWd1cmUgZm9ybSBmb3IgZXh0cmEgdmFsaWRhdG9ycyB0aGF0IGFyZSBub3Qgb24gYSBzcGVjaWZpYyBmaWVsZFxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh2YWxpZGF0b3JzKSkge1xuICAgICAgICAgICAgaWYgKCFjb250cm9sc1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybVN0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbW9kZWxba2V5XSA/IG1vZGVsW2tleV0gOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbnRyb2xzW2tleV0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKGZvcm1TdGF0ZSwgdmFsaWRhdG9yc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGFzeW5jVmFsaWRhdG9ycykpIHtcbiAgICAgICAgICAgIGlmIChjb250cm9sc1trZXldICYmIGFzeW5jVmFsaWRhdG9yc1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbHNba2V5XS5zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JzW2tleV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtb2RlbFtrZXldID8gbW9kZWxba2V5XSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29udHJvbHNba2V5XSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woZm9ybVN0YXRlLCBudWxsLCBhc3luY1ZhbGlkYXRvcnNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udHJvbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIHRoZSBmaW5hbCBGb3JtR3JvdXAgZm9yIHRoZSBvYmplY3QsIGluY2x1ZGluZyBhbGwgdmFsaWRhdG9yc1xuICAgICAqXG4gICAgICogVGhpcyBtZXRob2Qgc2hvdWxkICoqbm90KiogYmUgb3ZlcnJpZGRlbiwgYnV0IGluc3RlYWQgYGdldEZvcm1Db25maWdgLFxuICAgICAqIGBnZXRGb3JtR3JvdXBWYWxpZGF0b3JzYCwgYGdldEZvcm1Hcm91cEFzeW5jVmFsaWRhdG9yc2AgbWlnaHQgYmUuXG4gICAgICovXG4gICAgcHVibGljIGdldEZvcm1Hcm91cChtb2RlbDogTGl0ZXJhbCk6IFVudHlwZWRGb3JtR3JvdXAge1xuICAgICAgICBjb25zdCBmb3JtQ29uZmlnID0gdGhpcy5nZXRGb3JtQ29uZmlnKG1vZGVsKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVbnR5cGVkRm9ybUdyb3VwKGZvcm1Db25maWcsIHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IHRoaXMuZ2V0Rm9ybUdyb3VwVmFsaWRhdG9ycyhtb2RlbCksXG4gICAgICAgICAgICBhc3luY1ZhbGlkYXRvcnM6IHRoaXMuZ2V0Rm9ybUdyb3VwQXN5bmNWYWxpZGF0b3JzKG1vZGVsKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgc2luZ2xlIG9iamVjdFxuICAgICAqXG4gICAgICogSWYgYXZhaWxhYmxlIGl0IHdpbGwgZW1pdCBvYmplY3QgZnJvbSBjYWNoZSBpbW1lZGlhdGVseSwgdGhlbiBpdFxuICAgICAqIHdpbGwgKiphbHdheXMqKiBmZXRjaCBmcm9tIG5ldHdvcmsgYW5kIHRoZW4gdGhlIG9ic2VydmFibGUgd2lsbCBiZSBjb21wbGV0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0T25lKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFRvbmU+IHtcbiAgICAgICAgdGhpcy50aHJvd0lmT2JzZXJ2YWJsZShpZCk7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMub25lUXVlcnkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFZhcmlhYmxlc0Zvck9uZShpZCkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCh2YXJpYWJsZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMub25lUXVlcnkpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBvbGxvLndhdGNoUXVlcnk8dW5rbm93biwgVm9uZT4oe1xuICAgICAgICAgICAgICAgICAgICBxdWVyeTogdGhpcy5vbmVRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzOiB2YXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIGZldGNoUG9saWN5OiAnY2FjaGUtYW5kLW5ldHdvcmsnLFxuICAgICAgICAgICAgICAgICAgICBuZXh0RmV0Y2hQb2xpY3k6ICdjYWNoZS1vbmx5JyxcbiAgICAgICAgICAgICAgICB9KS52YWx1ZUNoYW5nZXM7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGZpbHRlcihyZXN1bHQgPT4gISFyZXN1bHQuZGF0YSksXG4gICAgICAgICAgICB0YWtlV2hpbGUocmVzdWx0ID0+IHJlc3VsdC5uZXR3b3JrU3RhdHVzICE9PSBOZXR3b3JrU3RhdHVzLnJlYWR5LCB0cnVlKSxcbiAgICAgICAgICAgIG1hcChyZXN1bHQgPT4gKHJlc3VsdC5kYXRhIGFzIExpdGVyYWwpW3RoaXMubmFtZV0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIGNvbGxlY3Rpb24gb2Ygb2JqZWN0c1xuICAgICAqXG4gICAgICogSXQgd2lsbCAqKmFsd2F5cyoqIGZldGNoIGZyb20gbmV0d29yayBhbmQgdGhlbiB0aGUgb2JzZXJ2YWJsZSB3aWxsIGJlIGNvbXBsZXRlZC5cbiAgICAgKiBObyBjYWNoZSBpcyBldmVyIHVzZWQsIHNvIGl0J3Mgc2xvdyBidXQgY29ycmVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QWxsKHF1ZXJ5VmFyaWFibGVzTWFuYWdlcjogTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxWYWxsPik6IE9ic2VydmFibGU8VGFsbD4ge1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLmFsbFF1ZXJ5KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJ0aWFsVmFyaWFibGVzRm9yQWxsKCkucGlwZShcbiAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICBzd2l0Y2hNYXAocGFydGlhbFZhcmlhYmxlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy5hbGxRdWVyeSk7XG5cbiAgICAgICAgICAgICAgICAvLyBDb3B5IG1hbmFnZXIgdG8gcHJldmVudCB0byBhcHBseSBpbnRlcm5hbCB2YXJpYWJsZXMgdG8gZXh0ZXJuYWwgUXVlcnlWYXJpYWJsZXNNYW5hZ2VyXG4gICAgICAgICAgICAgICAgY29uc3QgbWFuYWdlciA9IG5ldyBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyPFZhbGw+KHF1ZXJ5VmFyaWFibGVzTWFuYWdlcik7XG4gICAgICAgICAgICAgICAgbWFuYWdlci5tZXJnZSgncGFydGlhbC12YXJpYWJsZXMnLCBwYXJ0aWFsVmFyaWFibGVzKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwb2xsby5xdWVyeTx1bmtub3duLCBWYWxsPih7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiB0aGlzLmFsbFF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IG1hbmFnZXIudmFyaWFibGVzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMubWFwQWxsKCksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgY29sbGVjdGlvbiBvZiBvYmplY3RzXG4gICAgICpcbiAgICAgKiBFdmVyeSB0aW1lIHRoZSBvYnNlcnZhYmxlIHZhcmlhYmxlcyBjaGFuZ2UsIGFuZCB0aGV5IGFyZSBub3QgdW5kZWZpbmVkLFxuICAgICAqIGl0IHdpbGwgcmV0dXJuIHJlc3VsdCBmcm9tIGNhY2hlLCB0aGVuIGl0IHdpbGwgKiphbHdheXMqKiBmZXRjaCBmcm9tIG5ldHdvcmsuXG4gICAgICpcbiAgICAgKiBZb3UgbXVzdCBzdWJzY3JpYmUgdG8gc3RhcnQgZ2V0dGluZyByZXN1bHRzIChhbmQgZmV0Y2ggZnJvbSBuZXR3b3JrKS5cbiAgICAgKlxuICAgICAqIFRoZSBvYnNlcnZhYmxlIHJlc3VsdCB3aWxsIG9ubHkgY29tcGxldGUgd2hlbiB1bnN1YnNjcmliaW5nLiBUaGF0IG1lYW5zIHlvdSAqKm11c3QqKiB1bnN1YnNjcmliZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2F0Y2hBbGwoXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzTWFuYWdlcjogTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxWYWxsPixcbiAgICAgICAgZmV0Y2hQb2xpY3k6IFdhdGNoUXVlcnlGZXRjaFBvbGljeSA9ICdjYWNoZS1hbmQtbmV0d29yaycsXG4gICAgKTogT2JzZXJ2YWJsZTxUYWxsPiB7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMuYWxsUXVlcnkpO1xuXG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KHtcbiAgICAgICAgICAgIHZhcmlhYmxlczogcXVlcnlWYXJpYWJsZXNNYW5hZ2VyLnZhcmlhYmxlcy5waXBlKFxuICAgICAgICAgICAgICAgIC8vIElnbm9yZSB2ZXJ5IGZhc3QgdmFyaWFibGUgY2hhbmdlc1xuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMCksXG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdmFyaWFibGVzIHRvIGJlIGRlZmluZWQgdG8gcHJldmVudCBkdXBsaWNhdGUgcXVlcnk6IHdpdGggYW5kIHdpdGhvdXQgdmFyaWFibGVzXG4gICAgICAgICAgICAgICAgLy8gTnVsbCBpcyBhY2NlcHRlZCB2YWx1ZSBmb3IgXCJubyB2YXJpYWJsZXNcIlxuICAgICAgICAgICAgICAgIGZpbHRlcih2YXJpYWJsZXMgPT4gdHlwZW9mIHZhcmlhYmxlcyAhPT0gJ3VuZGVmaW5lZCcpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHBhcnRpYWxWYXJpYWJsZXM6IHRoaXMuZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckFsbCgpLFxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQXBwbHkgcGFydGlhbCB2YXJpYWJsZXMgZnJvbSBzZXJ2aWNlXG4gICAgICAgICAgICAgICAgLy8gQ29weSBtYW5hZ2VyIHRvIHByZXZlbnQgdG8gYXBwbHkgaW50ZXJuYWwgdmFyaWFibGVzIHRvIGV4dGVybmFsIFF1ZXJ5VmFyaWFibGVzTWFuYWdlclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxWYWxsPihxdWVyeVZhcmlhYmxlc01hbmFnZXIpO1xuICAgICAgICAgICAgICAgIG1hbmFnZXIubWVyZ2UoJ3BhcnRpYWwtdmFyaWFibGVzJywgcmVzdWx0LnBhcnRpYWxWYXJpYWJsZXMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy5hbGxRdWVyeSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG9cbiAgICAgICAgICAgICAgICAgICAgLndhdGNoUXVlcnk8dW5rbm93biwgVmFsbD4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHRoaXMuYWxsUXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IG1hbmFnZXIudmFyaWFibGVzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hQb2xpY3k6IGZldGNoUG9saWN5LFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IEVNUFRZKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihyID0+ICEhci5kYXRhKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwQWxsKCksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9ucyBhbGxvdyB0byBxdWlja2x5IGNyZWF0ZSBvciB1cGRhdGUgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIE1hbmFnZXMgYSBcImNyZWF0aW9uIGlzIHBlbmRpbmdcIiBzdGF0dXMsIGFuZCB1cGRhdGUgd2hlbiBjcmVhdGlvbiBpcyByZWFkeS5cbiAgICAgKiBVc2VzIHJlZ3VsYXIgdXBkYXRlL3VwZGF0ZU5vdyBhbmQgY3JlYXRlIG1ldGhvZHMuXG4gICAgICogVXNlZCBtYWlubHkgd2hlbiBlZGl0aW5nIG11bHRpcGxlIG9iamVjdHMgaW4gc2FtZSBjb250cm9sbGVyIChsaWtlIGluIGVkaXRhYmxlIGFycmF5cylcbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlT3JVcGRhdGUoXG4gICAgICAgIG9iamVjdDogVmNyZWF0ZVsnaW5wdXQnXSB8IFdpdGhJZDxWdXBkYXRlWydpbnB1dCddPixcbiAgICAgICAgbm93ID0gZmFsc2UsXG4gICAgKTogT2JzZXJ2YWJsZTxUY3JlYXRlIHwgVHVwZGF0ZT4ge1xuICAgICAgICB0aGlzLnRocm93SWZPYnNlcnZhYmxlKG9iamVjdCk7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMuY3JlYXRlTXV0YXRpb24pO1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLnVwZGF0ZU11dGF0aW9uKTtcblxuICAgICAgICAvLyBJZiBjcmVhdGlvbiBpcyBwZW5kaW5nLCBsaXN0ZW4gdG8gY3JlYXRpb24gb2JzZXJ2YWJsZSBhbmQgd2hlbiByZWFkeSwgZmlyZSB1cGRhdGVcbiAgICAgICAgY29uc3QgcGVuZGluZ0NyZWF0aW9uID0gdGhpcy5jcmVhdGluZ0NhY2hlLmdldChvYmplY3QpO1xuICAgICAgICBpZiAocGVuZGluZ0NyZWF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gcGVuZGluZ0NyZWF0aW9uLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKG9iamVjdCBhcyBXaXRoSWQ8VnVwZGF0ZVsnaW5wdXQnXT4pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIG9iamVjdCBoYXMgSWQsIGp1c3Qgc2F2ZSBpdFxuICAgICAgICBpZiAoJ2lkJyBpbiBvYmplY3QgJiYgb2JqZWN0LmlkKSB7XG4gICAgICAgICAgICBpZiAobm93KSB7XG4gICAgICAgICAgICAgICAgLy8gdXNlZCBtYWlubHkgZm9yIHRlc3RzLCBiZWNhdXNlIGxvZGFzaCBkZWJvdW5jZWQgdXNlZCBpbiB1cGRhdGUoKSBkb2VzIG5vdCB3b3JrIGZpbmUgd2l0aCBmYWtlQXN5bmMgYW5kIHRpY2soKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU5vdyhvYmplY3QgYXMgV2l0aElkPFZ1cGRhdGVbJ2lucHV0J10+KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKG9iamVjdCBhcyBXaXRoSWQ8VnVwZGF0ZVsnaW5wdXQnXT4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgb2JqZWN0IHdhcyBub3Qgc2F2aW5nLCBhbmQgaGFzIG5vIElELCBjcmVhdGUgaXRcbiAgICAgICAgY29uc3QgY3JlYXRpb24gPSB0aGlzLmNyZWF0ZShvYmplY3QpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRpbmdDYWNoZS5kZWxldGUob2JqZWN0KTsgLy8gcmVtb3ZlIGZyb20gY2FjaGVcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHN0b3JlcyBjcmVhdGluZyBvYnNlcnZhYmxlIGluIGEgY2FjaGUgcmVwbGF5YWJsZSB2ZXJzaW9uIG9mIHRoZSBvYnNlcnZhYmxlLFxuICAgICAgICAvLyBzbyBzZXZlcmFsIHVwZGF0ZSgpIGNhbiBzdWJzY3JpYmUgdG8gdGhlIHNhbWUgY3JlYXRpb25cbiAgICAgICAgdGhpcy5jcmVhdGluZ0NhY2hlLnNldChvYmplY3QsIGNyZWF0aW9uLnBpcGUoc2hhcmVSZXBsYXkoKSkpO1xuXG4gICAgICAgIHJldHVybiBjcmVhdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gb2JqZWN0IGluIERCIGFuZCB0aGVuIHJlZmV0Y2ggdGhlIGxpc3Qgb2Ygb2JqZWN0c1xuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGUob2JqZWN0OiBWY3JlYXRlWydpbnB1dCddKTogT2JzZXJ2YWJsZTxUY3JlYXRlPiB7XG4gICAgICAgIHRoaXMudGhyb3dJZk9ic2VydmFibGUob2JqZWN0KTtcbiAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy5jcmVhdGVNdXRhdGlvbik7XG5cbiAgICAgICAgY29uc3QgdmFyaWFibGVzID0gbWVyZ2UoXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtpbnB1dDogdGhpcy5nZXRJbnB1dChvYmplY3QpfSxcbiAgICAgICAgICAgIHRoaXMuZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckNyZWF0aW9uKG9iamVjdCksXG4gICAgICAgICkgYXMgVmNyZWF0ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG9cbiAgICAgICAgICAgIC5tdXRhdGU8VGNyZWF0ZSwgVmNyZWF0ZT4oe1xuICAgICAgICAgICAgICAgIG11dGF0aW9uOiB0aGlzLmNyZWF0ZU11dGF0aW9uLFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlczogdmFyaWFibGVzLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwb2xsby5jbGllbnQucmVGZXRjaE9ic2VydmFibGVRdWVyaWVzKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld09iamVjdCA9IHRoaXMubWFwQ3JlYXRpb24ocmVzdWx0KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3T2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VXaXRoKG9iamVjdCwgbmV3T2JqZWN0LCBtZXJnZU92ZXJyaWRlQXJyYXkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld09iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgYW4gb2JqZWN0LCBhZnRlciBhIHNob3J0IGRlYm91bmNlXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZShvYmplY3Q6IFdpdGhJZDxWdXBkYXRlWydpbnB1dCddPik6IE9ic2VydmFibGU8VHVwZGF0ZT4ge1xuICAgICAgICB0aGlzLnRocm93SWZPYnNlcnZhYmxlKG9iamVjdCk7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMudXBkYXRlTXV0YXRpb24pO1xuXG4gICAgICAgIC8vIEtlZXAgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgdGhlIGRlYm91bmNlZCB1cGRhdGUgZnVuY3Rpb25cbiAgICAgICAgY29uc3QgaWQgPSBvYmplY3QuaWQ7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubmF0dXJhbERlYm91bmNlU2VydmljZS5kZWJvdW5jZSh0aGlzLCBpZCwgdGhpcy51cGRhdGVOb3cob2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIGFuIG9iamVjdCBpbW1lZGlhdGVseSB3aGVuIHN1YnNjcmliaW5nXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZU5vdyhvYmplY3Q6IFdpdGhJZDxWdXBkYXRlWydpbnB1dCddPik6IE9ic2VydmFibGU8VHVwZGF0ZT4ge1xuICAgICAgICB0aGlzLnRocm93SWZPYnNlcnZhYmxlKG9iamVjdCk7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMudXBkYXRlTXV0YXRpb24pO1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IG1lcmdlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiBvYmplY3QuaWQsXG4gICAgICAgICAgICAgICAgaW5wdXQ6IHRoaXMuZ2V0SW5wdXQob2JqZWN0KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLmdldFBhcnRpYWxWYXJpYWJsZXNGb3JVcGRhdGUob2JqZWN0KSxcbiAgICAgICAgKSBhcyBWdXBkYXRlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwb2xsb1xuICAgICAgICAgICAgLm11dGF0ZTxUdXBkYXRlLCBWdXBkYXRlPih7XG4gICAgICAgICAgICAgICAgbXV0YXRpb246IHRoaXMudXBkYXRlTXV0YXRpb24sXG4gICAgICAgICAgICAgICAgdmFyaWFibGVzOiB2YXJpYWJsZXMsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBvbGxvLmNsaWVudC5yZUZldGNoT2JzZXJ2YWJsZVF1ZXJpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkUmVzdWx0ID0gdGhpcy5tYXBVcGRhdGUocmVzdWx0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VXaXRoKG9iamVjdCwgbWFwcGVkUmVzdWx0LCBtZXJnZU92ZXJyaWRlQXJyYXkpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgYW4gb2JqZWN0IGJ1dCB3aXRob3V0IGF1dG9tYXRpY2FsbHkgaW5qZWN0aW5nIHZhbHVlcyBjb21pbmdcbiAgICAgKiBmcm9tIGBnZXREZWZhdWx0Rm9yU2VydmVyKClgLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVQYXJ0aWFsbHkob2JqZWN0OiBXaXRoSWQ8VnVwZGF0ZVsnaW5wdXQnXT4pOiBPYnNlcnZhYmxlPFR1cGRhdGU+IHtcbiAgICAgICAgdGhpcy50aHJvd0lmT2JzZXJ2YWJsZShvYmplY3QpO1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLnVwZGF0ZU11dGF0aW9uKTtcblxuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB7XG4gICAgICAgICAgICBpZDogb2JqZWN0LmlkLFxuICAgICAgICAgICAgaW5wdXQ6IG9taXQocmVsYXRpb25zVG9JZHMob2JqZWN0KSwgJ2lkJyksXG4gICAgICAgIH0gYXMgVnVwZGF0ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG9cbiAgICAgICAgICAgIC5tdXRhdGU8VHVwZGF0ZSwgVnVwZGF0ZT4oe1xuICAgICAgICAgICAgICAgIG11dGF0aW9uOiB0aGlzLnVwZGF0ZU11dGF0aW9uLFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlczogdmFyaWFibGVzLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwb2xsby5jbGllbnQucmVGZXRjaE9ic2VydmFibGVRdWVyaWVzKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hcFVwZGF0ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWxldGUgb2JqZWN0cyBhbmQgdGhlbiByZWZldGNoIHRoZSBsaXN0IG9mIG9iamVjdHNcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVsZXRlKG9iamVjdHM6IHtpZDogc3RyaW5nfVtdKTogT2JzZXJ2YWJsZTxUZGVsZXRlPiB7XG4gICAgICAgIHRoaXMudGhyb3dJZk9ic2VydmFibGUob2JqZWN0cyk7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMuZGVsZXRlTXV0YXRpb24pO1xuXG4gICAgICAgIGNvbnN0IGlkcyA9IG9iamVjdHMubWFwKG8gPT4ge1xuICAgICAgICAgICAgLy8gQ2FuY2VsIHBlbmRpbmcgdXBkYXRlXG4gICAgICAgICAgICB0aGlzLm5hdHVyYWxEZWJvdW5jZVNlcnZpY2UuY2FuY2VsT25lKHRoaXMsIG8uaWQpO1xuXG4gICAgICAgICAgICByZXR1cm4gby5pZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IG1lcmdlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkczogaWRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMuZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckRlbGV0ZShvYmplY3RzKSxcbiAgICAgICAgKSBhcyBWZGVsZXRlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwb2xsb1xuICAgICAgICAgICAgLm11dGF0ZTxUZGVsZXRlLCBWZGVsZXRlPih7XG4gICAgICAgICAgICAgICAgbXV0YXRpb246IHRoaXMuZGVsZXRlTXV0YXRpb24sXG4gICAgICAgICAgICAgICAgdmFyaWFibGVzOiB2YXJpYWJsZXMsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gRGVsYXkgdGhlIG9ic2VydmFibGUgdW50aWwgQXBvbGxvIHJlZmV0Y2ggaXMgY29tcGxldGVkXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZFJlc3VsdCA9IHRoaXMubWFwRGVsZXRlKHJlc3VsdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyb20odGhpcy5hcG9sbG8uY2xpZW50LnJlRmV0Y2hPYnNlcnZhYmxlUXVlcmllcygpKS5waXBlKG1hcCgoKSA9PiBtYXBwZWRSZXN1bHQpKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSBtb2RlbCBhbmQgaXRlbXMgcmVsYXRlZCB0byB0aGUgbW9kZWwsIGlmIHRoZSBpZCBpcyBwcm92aWRlZCwgaW4gb3JkZXIgdG8gc2hvdyBhIGZvcm1cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVzb2x2ZShpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxSZXNvbHZlPFRvbmUgfCBWY3JlYXRlWydpbnB1dCddPj4ge1xuICAgICAgICAvLyBMb2FkIG1vZGVsIGlmIGlkIGlzIGdpdmVuXG4gICAgICAgIGxldCBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPFRvbmUgfCBWY3JlYXRlWydpbnB1dCddPjtcbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICBvYnNlcnZhYmxlID0gdGhpcy5uYXR1cmFsRGVib3VuY2VTZXJ2aWNlLmZsdXNoT25lKHRoaXMsIGlkKS5waXBlKHN3aXRjaE1hcCgoKSA9PiB0aGlzLmdldE9uZShpZCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ic2VydmFibGUgPSBvZih0aGlzLmdldERlZmF1bHRGb3JTZXJ2ZXIoKSBhcyBUb25lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge21vZGVsOiByZXN1bHR9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFuIG9iamVjdCB0aGF0IG1hdGNoIHRoZSBHcmFwaFFMIGlucHV0IHR5cGUuXG4gICAgICogSXQgY3JlYXRlcyBhbiBvYmplY3Qgd2l0aCBtYW51YWxseSBmaWxsZWQgZGF0YSBhbmQgYWRkIHVuY29tcGxldGVkIGRhdGEgKGxpa2UgcmVxdWlyZWQgYXR0cmlidXRlcyB0aGF0IGNhbiBiZSBlbXB0eSBzdHJpbmdzKVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJbnB1dChvYmplY3Q6IExpdGVyYWwpOiBWY3JlYXRlWydpbnB1dCddIHwgVnVwZGF0ZVsnaW5wdXQnXSB7XG4gICAgICAgIC8vIENvbnZlcnQgcmVsYXRpb25zIHRvIHRoZWlyIElEcyBmb3IgbXV0YXRpb25cbiAgICAgICAgb2JqZWN0ID0gcmVsYXRpb25zVG9JZHMob2JqZWN0KTtcblxuICAgICAgICAvLyBQaWNrIG9ubHkgYXR0cmlidXRlcyB0aGF0IHdlIGNhbiBmaW5kIGluIHRoZSBlbXB0eSBvYmplY3RcbiAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIHByZXZlbnQgdG8gc2VsZWN0IGRhdGEgdGhhdCBoYXMgdW53YW50ZWQgYXR0cmlidXRlc1xuICAgICAgICBjb25zdCBlbXB0eU9iamVjdCA9IHRoaXMuZ2V0RGVmYXVsdEZvclNlcnZlcigpO1xuICAgICAgICBsZXQgaW5wdXQgPSBwaWNrKG9iamVjdCwgT2JqZWN0LmtleXMoZW1wdHlPYmplY3QpKTtcblxuICAgICAgICAvLyBDb21wbGV0ZSBhIHBvdGVudGlhbGx5IHVuY29tcGxldGVkIG9iamVjdCB3aXRoIGRlZmF1bHQgdmFsdWVzXG4gICAgICAgIGlucHV0ID0gZGVmYXVsdHMoaW5wdXQsIGVtcHR5T2JqZWN0KTtcblxuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBtYXRjaGluZyB0aGUgcXVlcnkuIEl0IG1heSBuZXZlciBjb21wbGV0ZS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdXNlZCBmb3IgdGhlIHVuaXF1ZSB2YWxpZGF0b3JcbiAgICAgKi9cbiAgICBwdWJsaWMgY291bnQocXVlcnlWYXJpYWJsZXNNYW5hZ2VyOiBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyPFZhbGw+KTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgcGx1cmFsID0gbWFrZVBsdXJhbCh0aGlzLm5hbWUpO1xuICAgICAgICBjb25zdCBxdWVyeU5hbWUgPSAnQ291bnQnICsgdXBwZXJDYXNlRmlyc3RMZXR0ZXIocGx1cmFsKTtcbiAgICAgICAgY29uc3QgZmlsdGVyVHlwZSA9IHVwcGVyQ2FzZUZpcnN0TGV0dGVyKHRoaXMubmFtZSkgKyAnRmlsdGVyJztcblxuICAgICAgICBjb25zdCBxdWVyeSA9IGdxbGBcbiAgICAgICAgICAgIHF1ZXJ5ICR7cXVlcnlOYW1lfSAoJGZpbHRlcjogJHtmaWx0ZXJUeXBlfSkge1xuICAgICAgICAgICAgY291bnQ6ICR7cGx1cmFsfSAoZmlsdGVyOiAkZmlsdGVyLCBwYWdpbmF0aW9uOiB7cGFnZVNpemU6IDAsIHBhZ2VJbmRleDogMH0pIHtcbiAgICAgICAgICAgIGxlbmd0aFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckFsbCgpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAocGFydGlhbFZhcmlhYmxlcyA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ29weSBtYW5hZ2VyIHRvIHByZXZlbnQgdG8gYXBwbHkgaW50ZXJuYWwgdmFyaWFibGVzIHRvIGV4dGVybmFsIFF1ZXJ5VmFyaWFibGVzTWFuYWdlclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxWYWxsPihxdWVyeVZhcmlhYmxlc01hbmFnZXIpO1xuICAgICAgICAgICAgICAgIG1hbmFnZXIubWVyZ2UoJ3BhcnRpYWwtdmFyaWFibGVzJywgcGFydGlhbFZhcmlhYmxlcyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG8ucXVlcnk8e2NvdW50OiB7bGVuZ3RoOiBudW1iZXJ9fSwgVmFsbD4oe1xuICAgICAgICAgICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczogbWFuYWdlci52YXJpYWJsZXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKHJlc3VsdCA9PiByZXN1bHQuZGF0YS5jb3VudC5sZW5ndGgpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBlbXB0eSBvYmplY3Qgd2l0aCBzb21lIGRlZmF1bHQgdmFsdWVzIGZyb20gc2VydmVyIHBlcnNwZWN0aXZlXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHR5cGljYWxseSB1c2VmdWwgd2hlbiBzaG93aW5nIGEgZm9ybSBmb3IgY3JlYXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RGVmYXVsdEZvclNlcnZlcigpOiBWY3JlYXRlWydpbnB1dCddIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFlvdSBwcm9iYWJseSAqKnNob3VsZCBub3QqKiB1c2UgdGhpcy5cbiAgICAgKlxuICAgICAqIElmIHlvdSBhcmUgdHJ5aW5nIHRvICpjYWxsKiB0aGlzIG1ldGhvZCwgaW5zdGVhZCB5b3UgcHJvYmFibHkgd2FudCB0byBjYWxsIGBnZXREZWZhdWx0Rm9yU2VydmVyKClgIHRvIGdldCBkZWZhdWx0XG4gICAgICogdmFsdWVzIGZvciBhIG1vZGVsLCBvciBgZ2V0Rm9ybUNvbmZpZygpYCB0byBnZXQgYSBjb25maWd1cmVkIGZvcm0gdGhhdCBpbmNsdWRlcyBleHRyYSBmb3JtIGZpZWxkcy5cbiAgICAgKlxuICAgICAqIElmIHlvdSBhcmUgdHJ5aW5nIHRvICpvdmVycmlkZSogdGhpcyBtZXRob2QsIGluc3RlYWQgeW91IHByb2JhYmx5IHdhbnQgdG8gb3ZlcnJpZGUgYGdldERlZmF1bHRGb3JTZXJ2ZXIoKWAuXG4gICAgICpcbiAgICAgKiBUaGUgb25seSBhbmQgKip2ZXJ5IHJhcmUqKiByZWFzb24gdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QgaXMgaWYgdGhlIGNsaWVudCBuZWVkcyBleHRyYSBmb3JtIGZpZWxkcyB0aGF0IGNhbm5vdCBiZVxuICAgICAqIGFjY2VwdGVkIGJ5IHRoZSBzZXJ2ZXIgKG5vdCBwYXJ0IG9mIGBYWFhJbnB1dGAgdHlwZSkgYW5kIHRoYXQgYXJlIHN0cmljdGx5IGZvciB0aGUgY2xpZW50IGZvcm0gbmVlZHMuIEluIHRoYXQgY2FzZSxcbiAgICAgKiB0aGVuIHlvdSBjYW4gcmV0dXJuIGRlZmF1bHQgdmFsdWVzIGZvciB0aG9zZSBleHRyYSBmb3JtIGZpZWxkcywgYW5kIHRoZSBmb3JtIHJldHVybmVkIGJ5IGBnZXRGb3JtQ29uZmlnKClgIHdpbGxcbiAgICAgKiBpbmNsdWRlIHRob3NlIGV4dHJhIGZpZWxkcy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0Rm9ybUV4dHJhRmllbGREZWZhdWx0VmFsdWVzKCk6IExpdGVyYWwge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB1c2VkIHRvIGV4dHJhY3Qgb25seSB0aGUgYXJyYXkgb2YgZmV0Y2hlZCBvYmplY3RzIG91dCBvZiB0aGUgZW50aXJlIGZldGNoZWQgZGF0YVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBtYXBBbGwoKTogT3BlcmF0b3JGdW5jdGlvbjxGZXRjaFJlc3VsdDx1bmtub3duPiwgVGFsbD4ge1xuICAgICAgICBjb25zdCBwbHVyYWwgPSBtYWtlUGx1cmFsKHRoaXMubmFtZSk7XG4gICAgICAgIHJldHVybiBtYXAocmVzdWx0ID0+IChyZXN1bHQuZGF0YSBhcyBhbnkpW3BsdXJhbF0pOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvYXBvbGxvLWNsaWVudC9pc3N1ZXMvNTY2MlxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdXNlZCB0byBleHRyYWN0IG9ubHkgdGhlIGNyZWF0ZWQgb2JqZWN0IG91dCBvZiB0aGUgZW50aXJlIGZldGNoZWQgZGF0YVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBtYXBDcmVhdGlvbihyZXN1bHQ6IE11dGF0aW9uUmVzdWx0PHVua25vd24+KTogVGNyZWF0ZSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSAnY3JlYXRlJyArIHVwcGVyQ2FzZUZpcnN0TGV0dGVyKHRoaXMubmFtZSk7XG4gICAgICAgIHJldHVybiAocmVzdWx0LmRhdGEgYXMgYW55KVtuYW1lXTsgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcG9sbG9ncmFwaHFsL2Fwb2xsby1jbGllbnQvaXNzdWVzLzU2NjJcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHVzZWQgdG8gZXh0cmFjdCBvbmx5IHRoZSB1cGRhdGVkIG9iamVjdCBvdXQgb2YgdGhlIGVudGlyZSBmZXRjaGVkIGRhdGFcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgbWFwVXBkYXRlKHJlc3VsdDogTXV0YXRpb25SZXN1bHQ8dW5rbm93bj4pOiBUdXBkYXRlIHtcbiAgICAgICAgY29uc3QgbmFtZSA9ICd1cGRhdGUnICsgdXBwZXJDYXNlRmlyc3RMZXR0ZXIodGhpcy5uYW1lKTtcbiAgICAgICAgcmV0dXJuIChyZXN1bHQuZGF0YSBhcyBhbnkpW25hbWVdOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvYXBvbGxvLWNsaWVudC9pc3N1ZXMvNTY2MlxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdXNlZCB0byBleHRyYWN0IG9ubHkgZmxhZyB3aGVuIGRlbGV0aW5nIGFuIG9iamVjdFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBtYXBEZWxldGUocmVzdWx0OiBNdXRhdGlvblJlc3VsdDx1bmtub3duPik6IFRkZWxldGUge1xuICAgICAgICBjb25zdCBuYW1lID0gJ2RlbGV0ZScgKyBtYWtlUGx1cmFsKHVwcGVyQ2FzZUZpcnN0TGV0dGVyKHRoaXMubmFtZSkpO1xuICAgICAgICByZXR1cm4gKHJlc3VsdC5kYXRhIGFzIGFueSlbbmFtZV07IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBvbGxvZ3JhcGhxbC9hcG9sbG8tY2xpZW50L2lzc3Vlcy81NjYyXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhZGRpdGlvbmFsIHZhcmlhYmxlcyB0byBiZSB1c2VkIHdoZW4gZ2V0dGluZyBhIHNpbmdsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdHlwaWNhbGx5IGEgc2l0ZSBvciBzdGF0ZSBJRCwgYW5kIGlzIG5lZWRlZCB0byBnZXQgYXBwcm9wcmlhdGUgYWNjZXNzIHJpZ2h0c1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRQYXJ0aWFsVmFyaWFibGVzRm9yT25lKCk6IE9ic2VydmFibGU8UGFydGlhbDxWb25lPj4ge1xuICAgICAgICByZXR1cm4gb2Yoe30pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gYmUgdXNlZCB3aGVuIGdldHRpbmcgbXVsdGlwbGUgb2JqZWN0c1xuICAgICAqXG4gICAgICogVGhpcyBpcyB0eXBpY2FsbHkgYSBzaXRlIG9yIHN0YXRlIElELCBidXQgaXQgY291bGQgYmUgc29tZXRoaW5nIGVsc2UgdG8gZnVydGhlciBmaWx0ZXIgdGhlIHF1ZXJ5XG4gICAgICovXG4gICAgcHVibGljIGdldFBhcnRpYWxWYXJpYWJsZXNGb3JBbGwoKTogT2JzZXJ2YWJsZTxQYXJ0aWFsPFZhbGw+PiB7XG4gICAgICAgIHJldHVybiBvZih7fSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhZGRpdGlvbmFsIHZhcmlhYmxlcyB0byBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgYW4gb2JqZWN0XG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHR5cGljYWxseSBhIHNpdGUgb3Igc3RhdGUgSURcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHJvdGVjdGVkIGdldFBhcnRpYWxWYXJpYWJsZXNGb3JDcmVhdGlvbihvYmplY3Q6IExpdGVyYWwpOiBQYXJ0aWFsPFZjcmVhdGU+IHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gYmUgdXNlZCB3aGVuIHVwZGF0aW5nIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogVGhpcyBpcyB0eXBpY2FsbHkgYSBzaXRlIG9yIHN0YXRlIElEXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHByb3RlY3RlZCBnZXRQYXJ0aWFsVmFyaWFibGVzRm9yVXBkYXRlKG9iamVjdDogTGl0ZXJhbCk6IFBhcnRpYWw8VnVwZGF0ZT4ge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFkZGl0aW9uYWwgdmFyaWFibGVzIHRvIGJlIHVzZWQgd2hlbiBkZWxldGluZyBhbiBvYmplY3RcbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdHlwaWNhbGx5IGEgc2l0ZSBvciBzdGF0ZSBJRFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwcm90ZWN0ZWQgZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckRlbGV0ZShvYmplY3RzOiBMaXRlcmFsW10pOiBQYXJ0aWFsPFZkZWxldGU+IHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRocm93IGV4Y2VwdGlvbiB0byBwcmV2ZW50IGV4ZWN1dGluZyBxdWVyaWVzIHdpdGggaW52YWxpZCB2YXJpYWJsZXNcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgdGhyb3dJZk9ic2VydmFibGUodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdDYW5ub3QgdXNlIE9ic2VydmFibGUgYXMgdmFyaWFibGVzLiBJbnN0ZWFkIHlvdSBzaG91bGQgdXNlIC5zdWJzY3JpYmUoKSB0byBjYWxsIHRoZSBtZXRob2Qgd2l0aCBhIHJlYWwgdmFsdWUnLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1lcmdlIGdpdmVuIElEIHdpdGggYWRkaXRpb25hbCBwYXJ0aWFsIHZhcmlhYmxlcyBpZiB0aGVyZSBpcyBhbnlcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFZhcmlhYmxlc0Zvck9uZShpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxWb25lPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhcnRpYWxWYXJpYWJsZXNGb3JPbmUoKS5waXBlKFxuICAgICAgICAgICAgbWFwKHBhcnRpYWxWYXJpYWJsZXMgPT4gbWVyZ2Uoe30sIHtpZDogaWR9IGFzIFZvbmUsIHBhcnRpYWxWYXJpYWJsZXMpKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaHJvdyBleGNlcHRpb24gdG8gcHJldmVudCBleGVjdXRpbmcgbnVsbCBxdWVyaWVzXG4gICAgICovXG4gICAgcHJpdmF0ZSB0aHJvd0lmTm90UXVlcnkocXVlcnk6IERvY3VtZW50Tm9kZSB8IG51bGwpOiBhc3NlcnRzIHF1ZXJ5IHtcbiAgICAgICAgaWYgKCFxdWVyeSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHcmFwaFFMIHF1ZXJ5IGZvciB0aGlzIG1ldGhvZCB3YXMgbm90IGNvbmZpZ3VyZWQgaW4gdGhpcyBzZXJ2aWNlIGNvbnN0cnVjdG9yJyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -12,7 +12,6 @@ import * as i0 from "@angular/core";
|
|
|
12
12
|
*/
|
|
13
13
|
export class NaturalDebounceService {
|
|
14
14
|
constructor() {
|
|
15
|
-
this.flusher = new Subject();
|
|
16
15
|
/**
|
|
17
16
|
* Stores the debounced update function
|
|
18
17
|
*/
|
|
@@ -41,12 +40,14 @@ export class NaturalDebounceService {
|
|
|
41
40
|
canceller.complete();
|
|
42
41
|
this.delete(key, id);
|
|
43
42
|
});
|
|
43
|
+
const flusher = new Subject();
|
|
44
44
|
debounced = {
|
|
45
45
|
debouncer,
|
|
46
46
|
canceller,
|
|
47
|
+
flusher,
|
|
47
48
|
source,
|
|
48
49
|
result: debouncer.pipe(debounceTime(2000), // Wait 2 seconds...
|
|
49
|
-
raceWith(
|
|
50
|
+
raceWith(flusher), // ...unless flusher is triggered
|
|
50
51
|
take(1), mergeMap(() => {
|
|
51
52
|
this.delete(key, id);
|
|
52
53
|
if (wasCancelled || !debounced) {
|
|
@@ -62,10 +63,21 @@ export class NaturalDebounceService {
|
|
|
62
63
|
// Return and observable that is updated when mutation is done
|
|
63
64
|
return debounced.result;
|
|
64
65
|
}
|
|
65
|
-
|
|
66
|
+
cancelOne(key, id) {
|
|
66
67
|
const debounced = this.allDebouncedUpdateCache.get(key)?.get(id);
|
|
67
68
|
debounced?.canceller.next();
|
|
68
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Immediately execute the pending update, if any.
|
|
72
|
+
*
|
|
73
|
+
* It should typically be called before resolving the object, to mutate it before re-fetching it from server.
|
|
74
|
+
*
|
|
75
|
+
* The returned observable will complete when the update completes, even if it errors.
|
|
76
|
+
*/
|
|
77
|
+
flushOne(key, id) {
|
|
78
|
+
const debounced = this.allDebouncedUpdateCache.get(key)?.get(id);
|
|
79
|
+
return this.internalFlush(debounced ? [debounced] : []);
|
|
80
|
+
}
|
|
69
81
|
/**
|
|
70
82
|
* Immediately execute all pending updates.
|
|
71
83
|
*
|
|
@@ -75,9 +87,16 @@ export class NaturalDebounceService {
|
|
|
75
87
|
*/
|
|
76
88
|
flush() {
|
|
77
89
|
const all = [];
|
|
78
|
-
this.allDebouncedUpdateCache.forEach(map => map.forEach(debounced =>
|
|
90
|
+
this.allDebouncedUpdateCache.forEach(map => map.forEach(debounced => all.push(debounced)));
|
|
91
|
+
return this.internalFlush(all);
|
|
92
|
+
}
|
|
93
|
+
internalFlush(debounceds) {
|
|
94
|
+
const all = [];
|
|
95
|
+
const allFlusher = [];
|
|
96
|
+
debounceds.forEach(debounced => {
|
|
79
97
|
all.push(debounced.result.pipe(catchError(() => of(undefined))));
|
|
80
|
-
|
|
98
|
+
allFlusher.push(debounced.flusher);
|
|
99
|
+
});
|
|
81
100
|
if (!all.length) {
|
|
82
101
|
all.push(of(undefined));
|
|
83
102
|
}
|
|
@@ -86,7 +105,7 @@ export class NaturalDebounceService {
|
|
|
86
105
|
.pipe(map(() => undefined))
|
|
87
106
|
.subscribe(subscriber);
|
|
88
107
|
// Flush only after subscription process is finished
|
|
89
|
-
|
|
108
|
+
allFlusher.forEach(flusher => flusher.next());
|
|
90
109
|
return subscription;
|
|
91
110
|
});
|
|
92
111
|
}
|
|
@@ -125,4 +144,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImpor
|
|
|
125
144
|
providedIn: 'root',
|
|
126
145
|
}]
|
|
127
146
|
}] });
|
|
128
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVib3VuY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9zZXJ2aWNlcy9kZWJvdW5jZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFDTCxRQUFRLEVBQ1IsR0FBRyxFQUNILFFBQVEsRUFDUixVQUFVLEVBQ1YsRUFBRSxFQUNGLFFBQVEsRUFDUixhQUFhLEVBQ2IsV0FBVyxFQUNYLE9BQU8sRUFDUCxJQUFJLEdBQ1AsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQVd6Qzs7Ozs7Ozs7R0FRRztBQUlILE1BQU0sT0FBTyxzQkFBc0I7SUFIbkM7UUFJcUIsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFL0M7O1dBRUc7UUFDYyw0QkFBdUIsR0FBRyxJQUFJLEdBQUcsRUFBd0MsQ0FBQztLQTZIOUY7SUEzSEc7Ozs7OztPQU1HO0lBQ0ksUUFBUSxDQUFJLEdBQVEsRUFBRSxFQUFVLEVBQUUsTUFBcUI7UUFDMUQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBOEIsQ0FBQztRQUMzRSxJQUFJLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFN0MsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNaLFNBQVMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQzlCLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxTQUFTLEdBQUcsSUFBSSxhQUFhLENBQU8sQ0FBQyxDQUFDLENBQUM7WUFDN0MsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLE1BQU0sU0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7WUFDdEMsU0FBUyxDQUFDLFNB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S0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxNQUFNLENBQUMsR0FBUTtRQUNuQixJQUFJLG9CQUFvQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDeEIsb0JBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7WUFDN0QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsT0FBTyxvQkFBb0IsQ0FBQztJQUNoQyxDQUFDO0lBRU8sTUFBTSxDQUFDLEdBQVEsRUFBRSxFQUFVO1FBQy9CLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1AsT0FBTztRQUNYLENBQUM7UUFFRCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNMLENBQUM7OEdBbElRLHNCQUFzQjtrSEFBdEIsc0JBQXNCLGNBRm5CLE1BQU07OzJGQUVULHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGNhdGNoRXJyb3IsXG4gICAgZGVib3VuY2VUaW1lLFxuICAgIEVNUFRZLFxuICAgIGZvcmtKb2luLFxuICAgIG1hcCxcbiAgICBtZXJnZU1hcCxcbiAgICBPYnNlcnZhYmxlLFxuICAgIG9mLFxuICAgIHJhY2VXaXRoLFxuICAgIFJlcGxheVN1YmplY3QsXG4gICAgc2hhcmVSZXBsYXksXG4gICAgU3ViamVjdCxcbiAgICB0YWtlLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZX0gZnJvbSAnLi9hYnN0cmFjdC1tb2RlbC5zZXJ2aWNlJztcblxudHlwZSBEZWJvdW5jZWQ8VD4gPSB7XG4gICAgc291cmNlOiBPYnNlcnZhYmxlPFQ+O1xuICAgIGRlYm91bmNlcjogU3ViamVjdDx2b2lkPjtcbiAgICBjYW5jZWxsZXI6IFN1YmplY3Q8dm9pZD47XG4gICAgcmVzdWx0OiBPYnNlcnZhYmxlPFQ+O1xufTtcbnR5cGUgS2V5ID0gTmF0dXJhbEFic3RyYWN0TW9kZWxTZXJ2aWNlPHVua25vd24sIGFueSwgYW55LCBhbnksIHVua25vd24sIGFueSwgdW5rbm93biwgYW55LCB1bmtub3duLCBhbnk+O1xuXG4vKipcbiAqIERlYm91bmNlIHN1YnNjcmlwdGlvbnMgdG8gb2JzZXJ2YWJsZSwgd2l0aCBwb3NzaWJpbGl0eSB0byBjYW5jZWwgb25lLCBvciBmbHVzaCBhbGwgb2YgdGhlbS4gVHlwaWNhbGx5LFxuICogb2JzZXJ2YWJsZXMgYXJlIG9iamVjdCB1cGRhdGVzLCBzbyBgTmF0dXJhbEFic3RyYWN0TW9kZWxTZXJ2aWNlLnVwZGF0ZU5vdygpYC5cbiAqXG4gKiBga2V5YCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIGBOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2VgIHRvIHNlcGFyYXRlIG9iamVjdHMgYnkgdGhlaXIgdHlwZXMuIFNvIFVzZXIgd2l0aCBJRCAxIGlzXG4gKiBub3QgY29uZnVzZWQgd2l0aCBQcm9kdWN0IHdpdGggSUQgMS4gSXQgaGFzIG5vIG90aGVyIHB1cnBvc2UuXG4gKlxuICogYGlkYCBzaG91bGQgYmUgdGhlIElEIG9mIHRoZSBvYmplY3QgdGhhdCB3aWxsIGJlIHVwZGF0ZWQuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxEZWJvdW5jZVNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmx1c2hlciA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZXMgdGhlIGRlYm91bmNlZCB1cGRhdGUgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsbERlYm91bmNlZFVwZGF0ZUNhY2hlID0gbmV3IE1hcDxLZXksIE1hcDxzdHJpbmcsIERlYm91bmNlZDx1bmtub3duPj4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBEZWJvdW5jZSB0aGUgZ2l2ZW4gc291cmNlIG9ic2VydmFibGUgZm9yIGEgc2hvcnQgdGltZS4gSWYgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHdpdGggdGhlIHNhbWUga2V5IGFuZCBpZCxcbiAgICAgKiBpdCB3aWxsIHBvc3Rwb25lIHRoZSBzdWJzY3JpcHRpb24gdG8gdGhlIHNvdXJjZSBvYnNlcnZhYmxlLlxuICAgICAqXG4gICAgICogR2l2aW5nIHRoZSBzYW1lIGtleSBhbmQgaWQgYnV0IGEgZGlmZmVyZW50IHNvdXJjZSBvYnNlcnZhYmxlIHdpbGwgcmVwbGFjZSB0aGUgb3JpZ2luYWwgb2JzZXJ2YWJsZSwgYnV0XG4gICAgICoga2VlcCB0aGUgc2FtZSBkZWJvdW5jaW5nIHRpbWVsaW5lLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZWJvdW5jZTxUPihrZXk6IEtleSwgaWQ6IHN0cmluZywgc291cmNlOiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IGRlYm91bmNlZFVwZGF0ZUNhY2hlID0gdGhpcy5nZXRNYXAoa2V5KSBhcyBNYXA8c3RyaW5nLCBEZWJvdW5jZWQ8VD4+O1xuICAgICAgICBsZXQgZGVib3VuY2VkID0gZGVib3VuY2VkVXBkYXRlQ2FjaGUuZ2V0KGlkKTtcblxuICAgICAgICBpZiAoZGVib3VuY2VkKSB7XG4gICAgICAgICAgICBkZWJvdW5jZWQuc291cmNlID0gc291cmNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGVib3VuY2VyID0gbmV3IFJlcGxheVN1YmplY3Q8dm9pZD4oMSk7XG4gICAgICAgICAgICBsZXQgd2FzQ2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBjYW5jZWxsZXIgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgICAgICAgICAgY2FuY2VsbGVyLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgd2FzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBkZWJvdW5jZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICBjYW5jZWxsZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZShrZXksIGlkKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkZWJvdW5jZWQgPSB7XG4gICAgICAgICAgICAgICAgZGVib3VuY2VyLFxuICAgICAgICAgICAgICAgIGNhbmNlbGxlcixcbiAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgcmVzdWx0OiBkZWJvdW5jZXIucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDIwMDApLCAvLyBXYWl0IDIgc2Vjb25kcy4uLlxuICAgICAgICAgICAgICAgICAgICByYWNlV2l0aCh0aGlzLmZsdXNoZXIpLCAvLyAuLi51bmxlc3MgZmx1c2hlciBpcyB0cmlnZ2VyZWRcbiAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGUoa2V5LCBpZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YXNDYW5jZWxsZWQgfHwgIWRlYm91bmNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlYm91bmNlZC5zb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSgpLCAvLyBBbGwgYXR0ZW1wdHMgdG8gdXBkYXRlIHdpbGwgc2hhcmUgdGhlIGV4YWN0IHNhbWUgc2luZ2xlIHJlc3VsdCBmcm9tIEFQSVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBkZWJvdW5jZWRVcGRhdGVDYWNoZS5zZXQoaWQsIGRlYm91bmNlZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOb3RpZnkgb3VyIGRlYm91bmNlZCB1cGRhdGUgZWFjaCB0aW1lIHdlIGFzayB0byB1cGRhdGVcbiAgICAgICAgZGVib3VuY2VkLmRlYm91bmNlci5uZXh0KCk7XG5cbiAgICAgICAgLy8gUmV0dXJuIGFuZCBvYnNlcnZhYmxlIHRoYXQgaXMgdXBkYXRlZCB3aGVuIG11dGF0aW9uIGlzIGRvbmVcbiAgICAgICAgcmV0dXJuIGRlYm91bmNlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNhbmNlbChrZXk6IEtleSwgaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBkZWJvdW5jZWQgPSB0aGlzLmFsbERlYm91bmNlZFVwZGF0ZUNhY2hlLmdldChrZXkpPy5nZXQoaWQpO1xuICAgICAgICBkZWJvdW5jZWQ/LmNhbmNlbGxlci5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1tZWRpYXRlbHkgZXhlY3V0ZSBhbGwgcGVuZGluZyB1cGRhdGVzLlxuICAgICAqXG4gICAgICogSXQgc2hvdWxkIHR5cGljYWxseSBiZSBjYWxsZWQgYmVmb3JlIGxvZ2luIG91dC5cbiAgICAgKlxuICAgICAqIFRoZSByZXR1cm5lZCBvYnNlcnZhYmxlIHdpbGwgY29tcGxldGUgd2hlbiBhbGwgdXBkYXRlcyBjb21wbGV0ZSwgZXZlbiBpZiBzb21lIG9mIHRoZW0gZXJyb3IuXG4gICAgICovXG4gICAgcHVibGljIGZsdXNoKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBjb25zdCBhbGw6IE9ic2VydmFibGU8dW5rbm93bj5bXSA9IFtdO1xuICAgICAgICB0aGlzLmFsbERlYm91bmNlZFVwZGF0ZUNhY2hlLmZvckVhY2gobWFwID0+XG4gICAgICAgICAgICBtYXAuZm9yRWFjaChkZWJvdW5jZWQgPT4ge1xuICAgICAgICAgICAgICAgIGFsbC5wdXNoKGRlYm91bmNlZC5yZXN1bHQucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKHVuZGVmaW5lZCkpKSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIWFsbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFsbC5wdXNoKG9mKHVuZGVmaW5lZCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gZm9ya0pvaW4oYWxsKVxuICAgICAgICAgICAgICAgIC5waXBlKG1hcCgoKSA9PiB1bmRlZmluZWQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG5cbiAgICAgICAgICAgIC8vIEZsdXNoIG9ubHkgYWZ0ZXIgc3Vic2NyaXB0aW9uIHByb2Nlc3MgaXMgZmluaXNoZWRcbiAgICAgICAgICAgIHRoaXMuZmx1c2hlci5uZXh0KCk7XG5cbiAgICAgICAgICAgIHJldHVybiBzdWJzY3JpcHRpb247XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvdW50IG9mIHBlbmRpbmcgdXBkYXRlc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5hbGxEZWJvdW5jZWRVcGRhdGVDYWNoZS5mb3JFYWNoKG1hcCA9PiAoY291bnQgKz0gbWFwLnNpemUpKTtcblxuICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNYXAoa2V5OiBLZXkpOiBNYXA8c3RyaW5nLCBEZWJvdW5jZWQ8dW5rbm93bj4+IHtcbiAgICAgICAgbGV0IGRlYm91bmNlZFVwZGF0ZUNhY2hlID0gdGhpcy5hbGxEZWJvdW5jZWRVcGRhdGVDYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCFkZWJvdW5jZWRVcGRhdGVDYWNoZSkge1xuICAgICAgICAgICAgZGVib3VuY2VkVXBkYXRlQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgRGVib3VuY2VkPHVua25vd24+PigpO1xuICAgICAgICAgICAgdGhpcy5hbGxEZWJvdW5jZWRVcGRhdGVDYWNoZS5zZXQoa2V5LCBkZWJvdW5jZWRVcGRhdGVDYWNoZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVib3VuY2VkVXBkYXRlQ2FjaGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWxldGUoa2V5OiBLZXksIGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWFwID0gdGhpcy5hbGxEZWJvdW5jZWRVcGRhdGVDYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCFtYXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hcC5kZWxldGUoaWQpO1xuXG4gICAgICAgIGlmICghbWFwLnNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuYWxsRGVib3VuY2VkVXBkYXRlQ2FjaGUuZGVsZXRlKGtleSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVib3VuY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9zZXJ2aWNlcy9kZWJvdW5jZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFDTCxRQUFRLEVBQ1IsR0FBRyxFQUNILFFBQVEsRUFDUixVQUFVLEVBQ1YsRUFBRSxFQUNGLFFBQVEsRUFDUixhQUFhLEVBQ2IsV0FBVyxFQUNYLE9BQU8sRUFDUCxJQUFJLEdBQ1AsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQVl6Qzs7Ozs7Ozs7R0FRRztBQUlILE1BQU0sT0FBTyxzQkFBc0I7SUFIbkM7UUFJSTs7V0FFRztRQUNjLDRCQUF1QixHQUFHLElBQUksR0FBRyxFQUF3QyxDQUFDO0tBcUo5RjtJQW5KRzs7Ozs7O09BTUc7SUFDSSxRQUFRLENBQUksR0FBUSxFQUFFLEVBQVUsRUFBRSxNQUFxQjtRQUMxRCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUE4QixDQUFDO1FBQzNFLElBQUksU0FBUyxHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU3QyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ1osU0FBUyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLFNBQVMsR0FBRyxJQUFJLGFBQWEsQ0FBTyxDQUFDLENBQUMsQ0FBQztZQUM3QyxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztZQUN0QyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDckIsWUFBWSxHQUFHLElB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LEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDUCxPQUFPO1FBQ1gsQ0FBQztRQUVELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFZixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0wsQ0FBQzs4R0F4SlEsc0JBQXNCO2tIQUF0QixzQkFBc0IsY0FGbkIsTUFBTTs7MkZBRVQsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgY2F0Y2hFcnJvcixcbiAgICBkZWJvdW5jZVRpbWUsXG4gICAgRU1QVFksXG4gICAgZm9ya0pvaW4sXG4gICAgbWFwLFxuICAgIG1lcmdlTWFwLFxuICAgIE9ic2VydmFibGUsXG4gICAgb2YsXG4gICAgcmFjZVdpdGgsXG4gICAgUmVwbGF5U3ViamVjdCxcbiAgICBzaGFyZVJlcGxheSxcbiAgICBTdWJqZWN0LFxuICAgIHRha2UsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmF0dXJhbEFic3RyYWN0TW9kZWxTZXJ2aWNlfSBmcm9tICcuL2Fic3RyYWN0LW1vZGVsLnNlcnZpY2UnO1xuXG50eXBlIERlYm91bmNlZDxUPiA9IHtcbiAgICBzb3VyY2U6IE9ic2VydmFibGU8VD47XG4gICAgZGVib3VuY2VyOiBTdWJqZWN0PHZvaWQ+O1xuICAgIGNhbmNlbGxlcjogU3ViamVjdDx2b2lkPjtcbiAgICBmbHVzaGVyOiBTdWJqZWN0PHZvaWQ+O1xuICAgIHJlc3VsdDogT2JzZXJ2YWJsZTxUPjtcbn07XG50eXBlIEtleSA9IE5hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZTx1bmtub3duLCBhbnksIGFueSwgYW55LCB1bmtub3duLCBhbnksIHVua25vd24sIGFueSwgdW5rbm93biwgYW55PjtcblxuLyoqXG4gKiBEZWJvdW5jZSBzdWJzY3JpcHRpb25zIHRvIG9ic2VydmFibGUsIHdpdGggcG9zc2liaWxpdHkgdG8gY2FuY2VsIG9uZSwgb3IgZmx1c2ggYWxsIG9mIHRoZW0uIFR5cGljYWxseSxcbiAqIG9ic2VydmFibGVzIGFyZSBvYmplY3QgdXBkYXRlcywgc28gYE5hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZS51cGRhdGVOb3coKWAuXG4gKlxuICogYGtleWAgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBgTmF0dXJhbEFic3RyYWN0TW9kZWxTZXJ2aWNlYCB0byBzZXBhcmF0ZSBvYmplY3RzIGJ5IHRoZWlyIHR5cGVzLiBTbyBVc2VyIHdpdGggSUQgMSBpc1xuICogbm90IGNvbmZ1c2VkIHdpdGggUHJvZHVjdCB3aXRoIElEIDEuIEl0IGhhcyBubyBvdGhlciBwdXJwb3NlLlxuICpcbiAqIGBpZGAgc2hvdWxkIGJlIHRoZSBJRCBvZiB0aGUgb2JqZWN0IHRoYXQgd2lsbCBiZSB1cGRhdGVkLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBOYXR1cmFsRGVib3VuY2VTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiBTdG9yZXMgdGhlIGRlYm91bmNlZCB1cGRhdGUgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsbERlYm91bmNlZFVwZGF0ZUNhY2hlID0gbmV3IE1hcDxLZXksIE1hcDxzdHJpbmcsIERlYm91bmNlZDx1bmtub3duPj4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBEZWJvdW5jZSB0aGUgZ2l2ZW4gc291cmNlIG9ic2VydmFibGUgZm9yIGEgc2hvcnQgdGltZS4gSWYgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHdpdGggdGhlIHNhbWUga2V5IGFuZCBpZCxcbiAgICAgKiBpdCB3aWxsIHBvc3Rwb25lIHRoZSBzdWJzY3JpcHRpb24gdG8gdGhlIHNvdXJjZSBvYnNlcnZhYmxlLlxuICAgICAqXG4gICAgICogR2l2aW5nIHRoZSBzYW1lIGtleSBhbmQgaWQgYnV0IGEgZGlmZmVyZW50IHNvdXJjZSBvYnNlcnZhYmxlIHdpbGwgcmVwbGFjZSB0aGUgb3JpZ2luYWwgb2JzZXJ2YWJsZSwgYnV0XG4gICAgICoga2VlcCB0aGUgc2FtZSBkZWJvdW5jaW5nIHRpbWVsaW5lLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZWJvdW5jZTxUPihrZXk6IEtleSwgaWQ6IHN0cmluZywgc291cmNlOiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IGRlYm91bmNlZFVwZGF0ZUNhY2hlID0gdGhpcy5nZXRNYXAoa2V5KSBhcyBNYXA8c3RyaW5nLCBEZWJvdW5jZWQ8VD4+O1xuICAgICAgICBsZXQgZGVib3VuY2VkID0gZGVib3VuY2VkVXBkYXRlQ2FjaGUuZ2V0KGlkKTtcblxuICAgICAgICBpZiAoZGVib3VuY2VkKSB7XG4gICAgICAgICAgICBkZWJvdW5jZWQuc291cmNlID0gc291cmNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGVib3VuY2VyID0gbmV3IFJlcGxheVN1YmplY3Q8dm9pZD4oMSk7XG4gICAgICAgICAgICBsZXQgd2FzQ2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBjYW5jZWxsZXIgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgICAgICAgICAgY2FuY2VsbGVyLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgd2FzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBkZWJvdW5jZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICBjYW5jZWxsZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZShrZXksIGlkKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBmbHVzaGVyID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgICAgICAgICAgZGVib3VuY2VkID0ge1xuICAgICAgICAgICAgICAgIGRlYm91bmNlcixcbiAgICAgICAgICAgICAgICBjYW5jZWxsZXIsXG4gICAgICAgICAgICAgICAgZmx1c2hlcixcbiAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgcmVzdWx0OiBkZWJvdW5jZXIucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDIwMDApLCAvLyBXYWl0IDIgc2Vjb25kcy4uLlxuICAgICAgICAgICAgICAgICAgICByYWNlV2l0aChmbHVzaGVyKSwgLy8gLi4udW5sZXNzIGZsdXNoZXIgaXMgdHJpZ2dlcmVkXG4gICAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlKGtleSwgaWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2FzQ2FuY2VsbGVkIHx8ICFkZWJvdW5jZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWJvdW5jZWQuc291cmNlO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkoKSwgLy8gQWxsIGF0dGVtcHRzIHRvIHVwZGF0ZSB3aWxsIHNoYXJlIHRoZSBleGFjdCBzYW1lIHNpbmdsZSByZXN1bHQgZnJvbSBBUElcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZGVib3VuY2VkVXBkYXRlQ2FjaGUuc2V0KGlkLCBkZWJvdW5jZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm90aWZ5IG91ciBkZWJvdW5jZWQgdXBkYXRlIGVhY2ggdGltZSB3ZSBhc2sgdG8gdXBkYXRlXG4gICAgICAgIGRlYm91bmNlZC5kZWJvdW5jZXIubmV4dCgpO1xuXG4gICAgICAgIC8vIFJldHVybiBhbmQgb2JzZXJ2YWJsZSB0aGF0IGlzIHVwZGF0ZWQgd2hlbiBtdXRhdGlvbiBpcyBkb25lXG4gICAgICAgIHJldHVybiBkZWJvdW5jZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBjYW5jZWxPbmUoa2V5OiBLZXksIGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGVib3VuY2VkID0gdGhpcy5hbGxEZWJvdW5jZWRVcGRhdGVDYWNoZS5nZXQoa2V5KT8uZ2V0KGlkKTtcbiAgICAgICAgZGVib3VuY2VkPy5jYW5jZWxsZXIubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEltbWVkaWF0ZWx5IGV4ZWN1dGUgdGhlIHBlbmRpbmcgdXBkYXRlLCBpZiBhbnkuXG4gICAgICpcbiAgICAgKiBJdCBzaG91bGQgdHlwaWNhbGx5IGJlIGNhbGxlZCBiZWZvcmUgcmVzb2x2aW5nIHRoZSBvYmplY3QsIHRvIG11dGF0ZSBpdCBiZWZvcmUgcmUtZmV0Y2hpbmcgaXQgZnJvbSBzZXJ2ZXIuXG4gICAgICpcbiAgICAgKiBUaGUgcmV0dXJuZWQgb2JzZXJ2YWJsZSB3aWxsIGNvbXBsZXRlIHdoZW4gdGhlIHVwZGF0ZSBjb21wbGV0ZXMsIGV2ZW4gaWYgaXQgZXJyb3JzLlxuICAgICAqL1xuICAgIHB1YmxpYyBmbHVzaE9uZShrZXk6IEtleSwgaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBjb25zdCBkZWJvdW5jZWQgPSB0aGlzLmFsbERlYm91bmNlZFVwZGF0ZUNhY2hlLmdldChrZXkpPy5nZXQoaWQpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsRmx1c2goZGVib3VuY2VkID8gW2RlYm91bmNlZF0gOiBbXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1tZWRpYXRlbHkgZXhlY3V0ZSBhbGwgcGVuZGluZyB1cGRhdGVzLlxuICAgICAqXG4gICAgICogSXQgc2hvdWxkIHR5cGljYWxseSBiZSBjYWxsZWQgYmVmb3JlIGxvZ2luIG91dC5cbiAgICAgKlxuICAgICAqIFRoZSByZXR1cm5lZCBvYnNlcnZhYmxlIHdpbGwgY29tcGxldGUgd2hlbiBhbGwgdXBkYXRlcyBjb21wbGV0ZSwgZXZlbiBpZiBzb21lIG9mIHRoZW0gZXJyb3IuXG4gICAgICovXG4gICAgcHVibGljIGZsdXNoKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBjb25zdCBhbGw6IERlYm91bmNlZDx1bmtub3duPltdID0gW107XG4gICAgICAgIHRoaXMuYWxsRGVib3VuY2VkVXBkYXRlQ2FjaGUuZm9yRWFjaChtYXAgPT4gbWFwLmZvckVhY2goZGVib3VuY2VkID0+IGFsbC5wdXNoKGRlYm91bmNlZCkpKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbEZsdXNoKGFsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnRlcm5hbEZsdXNoKGRlYm91bmNlZHM6IERlYm91bmNlZDx1bmtub3duPltdKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGFsbDogT2JzZXJ2YWJsZTx1bmtub3duPltdID0gW107XG4gICAgICAgIGNvbnN0IGFsbEZsdXNoZXI6IFN1YmplY3Q8dm9pZD5bXSA9IFtdO1xuXG4gICAgICAgIGRlYm91bmNlZHMuZm9yRWFjaChkZWJvdW5jZWQgPT4ge1xuICAgICAgICAgICAgYWxsLnB1c2goZGVib3VuY2VkLnJlc3VsdC5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YodW5kZWZpbmVkKSkpKTtcbiAgICAgICAgICAgIGFsbEZsdXNoZXIucHVzaChkZWJvdW5jZWQuZmx1c2hlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghYWxsLmxlbmd0aCkge1xuICAgICAgICAgICAgYWxsLnB1c2gob2YodW5kZWZpbmVkKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlciA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBmb3JrSm9pbihhbGwpXG4gICAgICAgICAgICAgICAgLnBpcGUobWFwKCgpID0+IHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcblxuICAgICAgICAgICAgLy8gRmx1c2ggb25seSBhZnRlciBzdWJzY3JpcHRpb24gcHJvY2VzcyBpcyBmaW5pc2hlZFxuICAgICAgICAgICAgYWxsRmx1c2hlci5mb3JFYWNoKGZsdXNoZXIgPT4gZmx1c2hlci5uZXh0KCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb3VudCBvZiBwZW5kaW5nIHVwZGF0ZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvdW50KCk6IG51bWJlciB7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIHRoaXMuYWxsRGVib3VuY2VkVXBkYXRlQ2FjaGUuZm9yRWFjaChtYXAgPT4gKGNvdW50ICs9IG1hcC5zaXplKSk7XG5cbiAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TWFwKGtleTogS2V5KTogTWFwPHN0cmluZywgRGVib3VuY2VkPHVua25vd24+PiB7XG4gICAgICAgIGxldCBkZWJvdW5jZWRVcGRhdGVDYWNoZSA9IHRoaXMuYWxsRGVib3VuY2VkVXBkYXRlQ2FjaGUuZ2V0KGtleSk7XG4gICAgICAgIGlmICghZGVib3VuY2VkVXBkYXRlQ2FjaGUpIHtcbiAgICAgICAgICAgIGRlYm91bmNlZFVwZGF0ZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIERlYm91bmNlZDx1bmtub3duPj4oKTtcbiAgICAgICAgICAgIHRoaXMuYWxsRGVib3VuY2VkVXBkYXRlQ2FjaGUuc2V0KGtleSwgZGVib3VuY2VkVXBkYXRlQ2FjaGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlYm91bmNlZFVwZGF0ZUNhY2hlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVsZXRlKGtleTogS2V5LCBpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1hcCA9IHRoaXMuYWxsRGVib3VuY2VkVXBkYXRlQ2FjaGUuZ2V0KGtleSk7XG4gICAgICAgIGlmICghbWFwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBtYXAuZGVsZXRlKGlkKTtcblxuICAgICAgICBpZiAoIW1hcC5zaXplKSB7XG4gICAgICAgICAgICB0aGlzLmFsbERlYm91bmNlZFVwZGF0ZUNhY2hlLmRlbGV0ZShrZXkpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
@@ -64,4 +64,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImpor
|
|
|
64
64
|
providedIn: 'root',
|
|
65
65
|
}]
|
|
66
66
|
}], ctorParameters: () => [{ type: i1.Apollo }] });
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL3NlcnZpY2VzL2VudW0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7OztBQUVuQyxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUE7Ozs7Ozs7Ozs7Q0FVeEIsQ0FBQztBQXNCRixNQUFNLE9BQU8sa0JBQWtCO0lBQzNCLFlBQW9DLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQUcsQ0FBQztJQUV0RDs7T0FFRztJQUNJLEdBQUcsQ0FBQyxJQUFZO1FBQ25CLGdDQUFnQztRQUNoQyxPQUFPLElBQUksQ0FBQyxNQUFNO2FBQ2IsS0FBSyxDQUFXO1lBQ2IsS0FBSyxFQUFFLGFBQWE7WUFDcEIsU0FBUyxFQUFFLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQztZQUN2QixXQUFXLEVBQUUsYUFBYTtTQUM3QixDQUFDO2FBQ0QsSUFBSSxDQUNELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNULE1BQU0sTUFBTSxHQUFZLEVBQUUsQ0FBQztZQUMzQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDO2dCQUNqQyxLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNwRCxNQUFNLENBQUMsSUFBSSxDQUFDO3dCQUNSLEtBQUssRUFBRSxTQUFTLENBQUMsSUFBSTt3QkFDckIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxXQUFXLElBQUksRUFBRTtxQkFDcEMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDO1lBRUQsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNWLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVksQ0FBQyxLQUFhLEVBQUUsUUFBZ0I7UUFDL0MsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDMUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ1QsS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRSxDQUFDO29CQUNwQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2xCLENBQUM7WUFDTCxDQUFDO1lBRUQsT0FBTyxFQUFFLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQzs4R0E5Q1Esa0JBQWtCO2tIQUFsQixrQkFBa0IsY0FGZixNQUFNOzsyRkFFVCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcG9sbG8sIGdxbH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5jb25zdCBlbnVtVHlwZVF1ZXJ5ID0gZ3FsYFxuICAgIHF1ZXJ5IEVudW1UeXBlKCRuYW1lOiBTdHJpbmchKSB7XG4gICAgICAgIF9fdHlwZShuYW1lOiAkbmFtZSkge1xuICAgICAgICAgICAgX190eXBlbmFtZVxuICAgICAgICAgICAgZW51bVZhbHVlcyB7XG4gICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5gO1xuXG50eXBlIEVudW1UeXBlID0ge1xuICAgIF9fdHlwZTogbnVsbCB8IHtcbiAgICAgICAgX190eXBlbmFtZTogc3RyaW5nO1xuICAgICAgICBlbnVtVmFsdWVzOlxuICAgICAgICAgICAgfCBudWxsXG4gICAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBudWxsIHwgc3RyaW5nO1xuICAgICAgICAgICAgICB9W107XG4gICAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIElFbnVtID0ge1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xufTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEVudW1TZXJ2aWNlIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhcG9sbG86IEFwb2xsbykge31cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGxpc3Qgb2Ygb2JzZXJ2YWJsZSBlbnVtZXJhYmxlcyBjb25zaWRlcmluZyB0aGUgZ2l2ZW4gbmFtZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQobmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJRW51bVtdPiB7XG4gICAgICAgIC8vIExvYWQgcG9zc2libGUgYWN0aW9uIHN0YXR1c2VzXG4gICAgICAgIHJldHVybiB0aGlzLmFwb2xsb1xuICAgICAgICAgICAgLnF1ZXJ5PEVudW1UeXBlPih7XG4gICAgICAgICAgICAgICAgcXVlcnk6IGVudW1UeXBlUXVlcnksXG4gICAgICAgICAgICAgICAgdmFyaWFibGVzOiB7bmFtZTogbmFtZX0sXG4gICAgICAgICAgICAgICAgZmV0Y2hQb2xpY3k6ICdjYWNoZS1maXJzdCcsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlczogSUVudW1bXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmRhdGEuX190eXBlPy5lbnVtVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVudW1WYWx1ZSBvZiByZXN1bHQuZGF0YS5fX3R5cGUuZW51bVZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVudW1WYWx1ZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbnVtVmFsdWUuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBlbnVtIHVzZXItZnJpZW5kbHkgbmFtZSwgaW5zdGVhZCBvZiBpdHMgdmFsdWUuXG4gICAgICovXG4gICAgcHVibGljIGdldFZhbHVlTmFtZSh2YWx1ZTogc3RyaW5nLCBlbnVtTmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KGVudW1OYW1lKS5waXBlKFxuICAgICAgICAgICAgbWFwKHZhbHVlcyA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodi52YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2Lm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -150,4 +150,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImpor
|
|
|
150
150
|
providedIn: 'root',
|
|
151
151
|
}]
|
|
152
152
|
}], ctorParameters: () => [{ type: i1.Apollo }] });
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1tdXRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL3NlcnZpY2VzL2xpbmstbXV0YXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxRQUFRLEVBQWMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7OztBQUV4RDs7R0FFRztBQUNILE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7OztDQWdCdkIsQ0FBQztBQXlDRixNQUFNLE9BQU8sMEJBQTBCO0lBTW5DLFlBQW9DLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQUcsQ0FBQztJQUV0RDs7T0FFRztJQUNJLElBQUksQ0FDUCxJQUFvQixFQUNwQixJQUFvQixFQUNwQixZQUEyQixJQUFJLEVBQy9CLFlBQXFCLEVBQUU7UUFFdkIsa0RBQWtEO1FBQ2xELE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV6QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FDeEUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUNoRCxD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QUksS0FBSyxDQUFDO1FBQ1YsSUFBSSxLQUFLLENBQUM7UUFDVixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6QyxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDM0IsS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQy9CLENBQUM7YUFBTSxDQUFDO1lBQ0osS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzNCLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMvQixDQUFDO1FBQ0QsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDM0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFFM0IsSUFBSSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDN0IsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdkMsbUJBQW1CLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUM3RSxDQUFDO1FBRUQsT0FBTztjQUNELFFBQVEsQ0FBQyxJQUFJLElBQUksbUJBQW1COzs7VUFHeEMsQ0FBQztJQUNQLENBQUM7OEdBcktRLDBCQUEwQjtrSEFBMUIsMEJBQTBCLGNBRnZCLE1BQU07OzJGQUVULDBCQUEwQjtrQkFIdEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Fwb2xsbywgZ3FsfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XG5pbXBvcnQge0ZldGNoUmVzdWx0fSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7Y2xvbmV9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge2ZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcCwgc3dpdGNoTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0xpdGVyYWx9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7dXBwZXJDYXNlRmlyc3RMZXR0ZXJ9IGZyb20gJy4uL2NsYXNzZXMvdXRpbGl0eSc7XG5cbi8qKlxuICogUXVlcnkgdG8gZ2V0IGxpc3Qgb2YgbXV0YXRpb25zXG4gKi9cbmNvbnN0IHF1ZXJpZXNRdWVyeSA9IGdxbGBcbiAgICBxdWVyeSBNdXRhdGlvbnMge1xuICAgICAgICBfX3R5cGUobmFtZTogXCJNdXRhdGlvblwiKSB7XG4gICAgICAgICAgICBmaWVsZHMge1xuICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICBhcmdzIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgICAgICB0eXBlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mVHlwZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuYDtcblxudHlwZSBJbnRyb3NwZWN0ZWRBcmcgPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHR5cGU6IHtcbiAgICAgICAgb2ZUeXBlOiBudWxsIHwge1xuICAgICAgICAgICAgbmFtZTogbnVsbCB8IHN0cmluZztcbiAgICAgICAgfTtcbiAgICB9O1xufTtcblxudHlwZSBJbnRyb3NwZWN0ZWRNdXRhdGlvbnMgPSB7XG4gICAgX190eXBlOiBudWxsIHwge1xuICAgICAgICBmaWVsZHM6XG4gICAgICAgICAgICB8IG51bGxcbiAgICAgICAgICAgIHwge1xuICAgICAgICAgICAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgYXJnczogSW50cm9zcGVjdGVkQXJnW107XG4gICAgICAgICAgICAgIH1bXTtcbiAgICB9O1xufTtcblxuZXhwb3J0IHR5cGUgTGlua2FibGVPYmplY3QgPSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBfX3R5cGVuYW1lOiBzdHJpbmc7XG59O1xuXG50eXBlIE11dGF0aW9uQXJnID0ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG59O1xuXG50eXBlIE11dGF0aW9uID0ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBhcmcxOiBNdXRhdGlvbkFyZztcbiAgICBhcmcyOiBNdXRhdGlvbkFyZztcbn07XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxMaW5rTXV0YXRpb25TZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiBSZWNlaXZlcyB0aGUgbGlzdCBvZiBhdmFpbGFibGUgbXV0YXRpb25zXG4gICAgICovXG4gICAgcHJpdmF0ZSBhbGxNdXRhdGlvbnM/OiBNdXRhdGlvbltdO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYXBvbGxvOiBBcG9sbG8pIHt9XG5cbiAgICAvKipcbiAgICAgKiBMaW5rIHR3byBvYmplY3RzIHRvZ2V0aGVyXG4gICAgICovXG4gICAgcHVibGljIGxpbmsoXG4gICAgICAgIG9iajE6IExpbmthYmxlT2JqZWN0LFxuICAgICAgICBvYmoyOiBMaW5rYWJsZU9iamVjdCxcbiAgICAgICAgb3RoZXJOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICAgICAgdmFyaWFibGVzOiBMaXRlcmFsID0ge30sXG4gICAgKTogT2JzZXJ2YWJsZTxGZXRjaFJlc3VsdDx7aWQ6IHN0cmluZ30+PiB7XG4gICAgICAgIC8vIGNsb25lIHByZXZlbnRzIHRvIGFmZmVjdCB0aGUgb3JpZ2luYWwgcmVmZXJlbmNlXG4gICAgICAgIGNvbnN0IGNsb25lZFZhcmlhYmxlcyA9IGNsb25lKHZhcmlhYmxlcyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TXV0YXRpb24oJ2xpbmsnLCBvYmoxLCBvYmoyLCBvdGhlck5hbWUsIGNsb25lZFZhcmlhYmxlcykucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcChtdXRhdGlvbiA9PiB0aGlzLmV4ZWN1dGUobXV0YXRpb24pKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaW5rIG1hbnkgb2JqZWN0c1xuICAgICAqL1xuICAgIHB1YmxpYyBsaW5rTWFueShcbiAgICAgICAgb2JqMTogTGlua2FibGVPYmplY3QsXG4gICAgICAgIG9iamVjdHM6IExpbmthYmxlT2JqZWN0W10sXG4gICAgICAgIG90aGVyTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlczogTGl0ZXJhbCA9IHt9LFxuICAgICk6IE9ic2VydmFibGU8RmV0Y2hSZXN1bHQ8e2lkOiBzdHJpbmd9PltdPiB7XG4gICAgICAgIHJldHVybiBmb3JrSm9pbihvYmplY3RzLm1hcChvYmoyID0+IHRoaXMubGluayhvYmoxLCBvYmoyLCBvdGhlck5hbWUsIHZhcmlhYmxlcykpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbmxpbmsgdHdvIG9iamVjdHNcbiAgICAgKi9cbiAgICBwdWJsaWMgdW5saW5rKFxuICAgICAgICBvYmoxOiBMaW5rYWJsZU9iamVjdCxcbiAgICAgICAgb2JqMjogTGlua2FibGVPYmplY3QsXG4gICAgICAgIG90aGVyTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgKTogT2JzZXJ2YWJsZTxGZXRjaFJlc3VsdDx7aWQ6IHN0cmluZ30+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE11dGF0aW9uKCd1bmxpbmsnLCBvYmoxLCBvYmoyLCBvdGhlck5hbWUpLnBpcGUoc3dpdGNoTWFwKG11dGF0aW9uID0+IHRoaXMuZXhlY3V0ZShtdXRhdGlvbikpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBtdXRhdGlvbiBuYW1lc1xuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0QWxsTXV0YXRpb25OYW1lcygpOiBPYnNlcnZhYmxlPE11dGF0aW9uW10+IHtcbiAgICAgICAgaWYgKHRoaXMuYWxsTXV0YXRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YodGhpcy5hbGxNdXRhdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWFwQXJnID0gKGFyZzogSW50cm9zcGVjdGVkQXJnKTogTXV0YXRpb25BcmcgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhcmcubmFtZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBhcmcudHlwZT8ub2ZUeXBlPy5uYW1lPy5yZXBsYWNlKC9JRCQvLCAnJykgfHwgJ3Nob3VsZC1uZXZlci1oYXBwZW4nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG9cbiAgICAgICAgICAgIC5xdWVyeTxJbnRyb3NwZWN0ZWRNdXRhdGlvbnM+KHtcbiAgICAgICAgICAgICAgICBxdWVyeTogcXVlcmllc1F1ZXJ5LFxuICAgICAgICAgICAgICAgIGZldGNoUG9saWN5OiAnY2FjaGUtZmlyc3QnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoe2RhdGF9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLl9fdHlwZT8uZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbE11dGF0aW9ucyA9IGRhdGEuX190eXBlLmZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIodiA9PiB2Lm5hbWUubWF0Y2goL14obGlua3x1bmxpbmspLykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCh2ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHYubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzE6IG1hcEFyZyh2LmFyZ3NbMF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnMjogbWFwQXJnKHYuYXJnc1sxXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsbE11dGF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxsTXV0YXRpb25zO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZSBtdXRhdGlvbiB1c2luZyBwYXR0ZXJucyBhbmQgcmVwbGFjaW5nIHZhcmlhYmxlc1xuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TXV0YXRpb24oXG4gICAgICAgIGFjdGlvbjogc3RyaW5nLFxuICAgICAgICBvYmoxOiBMaW5rYWJsZU9iamVjdCxcbiAgICAgICAgb2JqMjogTGlua2FibGVPYmplY3QsXG4gICAgICAgIG90aGVyTmFtZTogc3RyaW5nIHwgbnVsbCxcbiAgICAgICAgdmFyaWFibGVzOiBMaXRlcmFsID0ge30sXG4gICAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgb3RoZXJOYW1lID0gb3RoZXJOYW1lID8gdXBwZXJDYXNlRmlyc3RMZXR0ZXIob3RoZXJOYW1lKSA6IG90aGVyTmFtZTtcbiAgICAgICAgY29uc3QgbXV0YXRpb25OYW1lID0gYWN0aW9uICsgb2JqMS5fX3R5cGVuYW1lICsgKG90aGVyTmFtZSB8fCBvYmoyLl9fdHlwZW5hbWUpO1xuICAgICAgICBjb25zdCByZXZlcnNlZE11dGF0aW9uTmFtZSA9IGFjdGlvbiArIG9iajIuX190eXBlbmFtZSArIChvdGhlck5hbWUgfHwgb2JqMS5fX3R5cGVuYW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGxNdXRhdGlvbk5hbWVzKCkucGlwZShcbiAgICAgICAgICAgIG1hcChhbGxNdXRhdGlvbk5hbWVzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIGFsbE11dGF0aW9uTmFtZXMuZmluZChtdXQgPT4gbXV0Lm5hbWUgPT09IG11dGF0aW9uTmFtZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgYWxsTXV0YXRpb25OYW1lcy5maW5kKG11dCA9PiBtdXQubmFtZSA9PT0gcmV2ZXJzZWRNdXRhdGlvbk5hbWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG11dGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1aWxkVGVtcGxhdGUobXV0YXRpb24sIG9iajEsIG9iajIsIHZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdBUEkgZG9lcyBub3QgYWxsb3cgdG8gJyArIGFjdGlvbiArICcgJyArIG9iajEuX190eXBlbmFtZSArICcgYW5kICcgKyBvYmoyLl9fdHlwZW5hbWUpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZSBtdXRhdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgZXhlY3V0ZShtdXRhdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxGZXRjaFJlc3VsdDx7aWQ6IHN0cmluZ30+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwb2xsb1xuICAgICAgICAgICAgLm11dGF0ZTx7aWQ6IHN0cmluZ30+KHtcbiAgICAgICAgICAgICAgICBtdXRhdGlvbjogZ3FsKG11dGF0aW9uKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAociA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBvbGxvLmNsaWVudC5yZUZldGNoT2JzZXJ2YWJsZVF1ZXJpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkIHRoZSBhY3R1YWwgbXV0YXRpb24gc3RyaW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSBidWlsZFRlbXBsYXRlKFxuICAgICAgICBtdXRhdGlvbjogTXV0YXRpb24sXG4gICAgICAgIG9iajE6IExpbmthYmxlT2JqZWN0LFxuICAgICAgICBvYmoyOiBMaW5rYWJsZU9iamVjdCxcbiAgICAgICAgdmFyaWFibGVzOiBMaXRlcmFsID0ge30sXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IG5hbWUxO1xuICAgICAgICBsZXQgbmFtZTI7XG4gICAgICAgIGlmIChvYmoxLl9fdHlwZW5hbWUgPT09IG11dGF0aW9uLmFyZzEudHlwZSkge1xuICAgICAgICAgICAgbmFtZTEgPSBtdXRhdGlvbi5hcmcxLm5hbWU7XG4gICAgICAgICAgICBuYW1lMiA9IG11dGF0aW9uLmFyZzIubmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5hbWUxID0gbXV0YXRpb24uYXJnMi5uYW1lO1xuICAgICAgICAgICAgbmFtZTIgPSBtdXRhdGlvbi5hcmcxLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyaWFibGVzW25hbWUxXSA9IG9iajEuaWQ7XG4gICAgICAgIHZhcmlhYmxlc1tuYW1lMl0gPSBvYmoyLmlkO1xuXG4gICAgICAgIGxldCBzZXJpYWxpemVkVmFyaWFibGVzID0gJyc7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWRWYXJpYWJsZXMgKz0ga2V5ICsgJzogJyArIEpTT04uc3RyaW5naWZ5KHZhcmlhYmxlc1trZXldKSArICcgJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgbXV0YXRpb24gbGlua0FuZFVubGluayB7XG4gICAgICAgICAgICAke211dGF0aW9uLm5hbWV9KCR7c2VyaWFsaXplZFZhcmlhYmxlc30pIHtcbiAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgfVxuICAgICAgICB9YDtcbiAgICB9XG59XG4iXX0=
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1tdXRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL3NlcnZpY2VzL2xpbmstbXV0YXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxRQUFRLEVBQWMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7OztBQUV4RDs7R0FFRztBQUNILE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7OztDQWdCdkIsQ0FBQztBQXlDRixNQUFNLE9BQU8sMEJBQTBCO0lBTW5DLFlBQW9DLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQUcsQ0FBQztJQUV0RDs7T0FFRztJQUNJLElBQUksQ0FDUCxJQUFvQixFQUNwQixJQUFvQixFQUNwQixZQUEyQixJQUFJLEVBQy9CLFlBQXFCLEVBQUU7UUFFdkIsa0RBQWtEO1FBQ2xELE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV6QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FDeEUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUNoRCxD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QUksS0FBSyxDQUFDO1FBQ1YsSUFBSSxLQUFLLENBQUM7UUFDVixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6QyxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDM0IsS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQy9CLENBQUM7YUFBTSxDQUFDO1lBQ0osS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzNCLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMvQixDQUFDO1FBQ0QsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDM0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFFM0IsSUFBSSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDN0IsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdkMsbUJBQW1CLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUM3RSxDQUFDO1FBRUQsT0FBTztjQUNELFFBQVEsQ0FBQyxJQUFJLElBQUksbUJBQW1COzs7VUFHeEMsQ0FBQztJQUNQLENBQUM7OEdBcktRLDBCQUEwQjtrSEFBMUIsMEJBQTBCLGNBRnZCLE1BQU07OzJGQUVULDBCQUEwQjtrQkFIdEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Fwb2xsbywgZ3FsfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XG5pbXBvcnQge0ZldGNoUmVzdWx0fSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2Nsb25lfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtMaXRlcmFsfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge3VwcGVyQ2FzZUZpcnN0TGV0dGVyfSBmcm9tICcuLi9jbGFzc2VzL3V0aWxpdHknO1xuXG4vKipcbiAqIFF1ZXJ5IHRvIGdldCBsaXN0IG9mIG11dGF0aW9uc1xuICovXG5jb25zdCBxdWVyaWVzUXVlcnkgPSBncWxgXG4gICAgcXVlcnkgTXV0YXRpb25zIHtcbiAgICAgICAgX190eXBlKG5hbWU6IFwiTXV0YXRpb25cIikge1xuICAgICAgICAgICAgZmllbGRzIHtcbiAgICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICAgICAgYXJncyB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgdHlwZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZlR5cGUge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbmA7XG5cbnR5cGUgSW50cm9zcGVjdGVkQXJnID0ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiB7XG4gICAgICAgIG9mVHlwZTogbnVsbCB8IHtcbiAgICAgICAgICAgIG5hbWU6IG51bGwgfCBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgfTtcbn07XG5cbnR5cGUgSW50cm9zcGVjdGVkTXV0YXRpb25zID0ge1xuICAgIF9fdHlwZTogbnVsbCB8IHtcbiAgICAgICAgZmllbGRzOlxuICAgICAgICAgICAgfCBudWxsXG4gICAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgIGFyZ3M6IEludHJvc3BlY3RlZEFyZ1tdO1xuICAgICAgICAgICAgICB9W107XG4gICAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIExpbmthYmxlT2JqZWN0ID0ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgX190eXBlbmFtZTogc3RyaW5nO1xufTtcblxudHlwZSBNdXRhdGlvbkFyZyA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdHlwZTogc3RyaW5nO1xufTtcblxudHlwZSBNdXRhdGlvbiA9IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYXJnMTogTXV0YXRpb25Bcmc7XG4gICAgYXJnMjogTXV0YXRpb25Bcmc7XG59O1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBOYXR1cmFsTGlua011dGF0aW9uU2VydmljZSB7XG4gICAgLyoqXG4gICAgICogUmVjZWl2ZXMgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIG11dGF0aW9uc1xuICAgICAqL1xuICAgIHByaXZhdGUgYWxsTXV0YXRpb25zPzogTXV0YXRpb25bXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFwb2xsbzogQXBvbGxvKSB7fVxuXG4gICAgLyoqXG4gICAgICogTGluayB0d28gb2JqZWN0cyB0b2dldGhlclxuICAgICAqL1xuICAgIHB1YmxpYyBsaW5rKFxuICAgICAgICBvYmoxOiBMaW5rYWJsZU9iamVjdCxcbiAgICAgICAgb2JqMjogTGlua2FibGVPYmplY3QsXG4gICAgICAgIG90aGVyTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgICAgIHZhcmlhYmxlczogTGl0ZXJhbCA9IHt9LFxuICAgICk6IE9ic2VydmFibGU8RmV0Y2hSZXN1bHQ8e2lkOiBzdHJpbmd9Pj4ge1xuICAgICAgICAvLyBjbG9uZSBwcmV2ZW50cyB0byBhZmZlY3QgdGhlIG9yaWdpbmFsIHJlZmVyZW5jZVxuICAgICAgICBjb25zdCBjbG9uZWRWYXJpYWJsZXMgPSBjbG9uZSh2YXJpYWJsZXMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmdldE11dGF0aW9uKCdsaW5rJywgb2JqMSwgb2JqMiwgb3RoZXJOYW1lLCBjbG9uZWRWYXJpYWJsZXMpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAobXV0YXRpb24gPT4gdGhpcy5leGVjdXRlKG11dGF0aW9uKSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGluayBtYW55IG9iamVjdHNcbiAgICAgKi9cbiAgICBwdWJsaWMgbGlua01hbnkoXG4gICAgICAgIG9iajE6IExpbmthYmxlT2JqZWN0LFxuICAgICAgICBvYmplY3RzOiBMaW5rYWJsZU9iamVjdFtdLFxuICAgICAgICBvdGhlck5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgICAgICB2YXJpYWJsZXM6IExpdGVyYWwgPSB7fSxcbiAgICApOiBPYnNlcnZhYmxlPEZldGNoUmVzdWx0PHtpZDogc3RyaW5nfT5bXT4ge1xuICAgICAgICByZXR1cm4gZm9ya0pvaW4ob2JqZWN0cy5tYXAob2JqMiA9PiB0aGlzLmxpbmsob2JqMSwgb2JqMiwgb3RoZXJOYW1lLCB2YXJpYWJsZXMpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5saW5rIHR3byBvYmplY3RzXG4gICAgICovXG4gICAgcHVibGljIHVubGluayhcbiAgICAgICAgb2JqMTogTGlua2FibGVPYmplY3QsXG4gICAgICAgIG9iajI6IExpbmthYmxlT2JqZWN0LFxuICAgICAgICBvdGhlck5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgICk6IE9ic2VydmFibGU8RmV0Y2hSZXN1bHQ8e2lkOiBzdHJpbmd9Pj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRNdXRhdGlvbigndW5saW5rJywgb2JqMSwgb2JqMiwgb3RoZXJOYW1lKS5waXBlKHN3aXRjaE1hcChtdXRhdGlvbiA9PiB0aGlzLmV4ZWN1dGUobXV0YXRpb24pKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgbXV0YXRpb24gbmFtZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEFsbE11dGF0aW9uTmFtZXMoKTogT2JzZXJ2YWJsZTxNdXRhdGlvbltdPiB7XG4gICAgICAgIGlmICh0aGlzLmFsbE11dGF0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMuYWxsTXV0YXRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hcEFyZyA9IChhcmc6IEludHJvc3BlY3RlZEFyZyk6IE11dGF0aW9uQXJnID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZTogYXJnLm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogYXJnLnR5cGU/Lm9mVHlwZT8ubmFtZT8ucmVwbGFjZSgvSUQkLywgJycpIHx8ICdzaG91bGQtbmV2ZXItaGFwcGVuJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBvbGxvXG4gICAgICAgICAgICAucXVlcnk8SW50cm9zcGVjdGVkTXV0YXRpb25zPih7XG4gICAgICAgICAgICAgICAgcXVlcnk6IHF1ZXJpZXNRdWVyeSxcbiAgICAgICAgICAgICAgICBmZXRjaFBvbGljeTogJ2NhY2hlLWZpcnN0JyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHtkYXRhfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5fX3R5cGU/LmZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxNdXRhdGlvbnMgPSBkYXRhLl9fdHlwZS5maWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHYgPT4gdi5uYW1lLm1hdGNoKC9eKGxpbmt8dW5saW5rKS8pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAodiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB2Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcxOiBtYXBBcmcodi5hcmdzWzBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzI6IG1hcEFyZyh2LmFyZ3NbMV0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxNdXRhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFsbE11dGF0aW9ucztcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGUgbXV0YXRpb24gdXNpbmcgcGF0dGVybnMgYW5kIHJlcGxhY2luZyB2YXJpYWJsZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE11dGF0aW9uKFxuICAgICAgICBhY3Rpb246IHN0cmluZyxcbiAgICAgICAgb2JqMTogTGlua2FibGVPYmplY3QsXG4gICAgICAgIG9iajI6IExpbmthYmxlT2JqZWN0LFxuICAgICAgICBvdGhlck5hbWU6IHN0cmluZyB8IG51bGwsXG4gICAgICAgIHZhcmlhYmxlczogTGl0ZXJhbCA9IHt9LFxuICAgICk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICAgIG90aGVyTmFtZSA9IG90aGVyTmFtZSA/IHVwcGVyQ2FzZUZpcnN0TGV0dGVyKG90aGVyTmFtZSkgOiBvdGhlck5hbWU7XG4gICAgICAgIGNvbnN0IG11dGF0aW9uTmFtZSA9IGFjdGlvbiArIG9iajEuX190eXBlbmFtZSArIChvdGhlck5hbWUgfHwgb2JqMi5fX3R5cGVuYW1lKTtcbiAgICAgICAgY29uc3QgcmV2ZXJzZWRNdXRhdGlvbk5hbWUgPSBhY3Rpb24gKyBvYmoyLl9fdHlwZW5hbWUgKyAob3RoZXJOYW1lIHx8IG9iajEuX190eXBlbmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsTXV0YXRpb25OYW1lcygpLnBpcGUoXG4gICAgICAgICAgICBtYXAoYWxsTXV0YXRpb25OYW1lcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXV0YXRpb24gPVxuICAgICAgICAgICAgICAgICAgICBhbGxNdXRhdGlvbk5hbWVzLmZpbmQobXV0ID0+IG11dC5uYW1lID09PSBtdXRhdGlvbk5hbWUpIHx8XG4gICAgICAgICAgICAgICAgICAgIGFsbE11dGF0aW9uTmFtZXMuZmluZChtdXQgPT4gbXV0Lm5hbWUgPT09IHJldmVyc2VkTXV0YXRpb25OYW1lKTtcblxuICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5idWlsZFRlbXBsYXRlKG11dGF0aW9uLCBvYmoxLCBvYmoyLCB2YXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcignQVBJIGRvZXMgbm90IGFsbG93IHRvICcgKyBhY3Rpb24gKyAnICcgKyBvYmoxLl9fdHlwZW5hbWUgKyAnIGFuZCAnICsgb2JqMi5fX3R5cGVuYW1lKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGUgbXV0YXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGV4ZWN1dGUobXV0YXRpb246IHN0cmluZyk6IE9ic2VydmFibGU8RmV0Y2hSZXN1bHQ8e2lkOiBzdHJpbmd9Pj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG9cbiAgICAgICAgICAgIC5tdXRhdGU8e2lkOiBzdHJpbmd9Pih7XG4gICAgICAgICAgICAgICAgbXV0YXRpb246IGdxbChtdXRhdGlvbiksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHIgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwb2xsby5jbGllbnQucmVGZXRjaE9ic2VydmFibGVRdWVyaWVzKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZCB0aGUgYWN0dWFsIG11dGF0aW9uIHN0cmluZ1xuICAgICAqL1xuICAgIHByaXZhdGUgYnVpbGRUZW1wbGF0ZShcbiAgICAgICAgbXV0YXRpb246IE11dGF0aW9uLFxuICAgICAgICBvYmoxOiBMaW5rYWJsZU9iamVjdCxcbiAgICAgICAgb2JqMjogTGlua2FibGVPYmplY3QsXG4gICAgICAgIHZhcmlhYmxlczogTGl0ZXJhbCA9IHt9LFxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGxldCBuYW1lMTtcbiAgICAgICAgbGV0IG5hbWUyO1xuICAgICAgICBpZiAob2JqMS5fX3R5cGVuYW1lID09PSBtdXRhdGlvbi5hcmcxLnR5cGUpIHtcbiAgICAgICAgICAgIG5hbWUxID0gbXV0YXRpb24uYXJnMS5uYW1lO1xuICAgICAgICAgICAgbmFtZTIgPSBtdXRhdGlvbi5hcmcyLm5hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYW1lMSA9IG11dGF0aW9uLmFyZzIubmFtZTtcbiAgICAgICAgICAgIG5hbWUyID0gbXV0YXRpb24uYXJnMS5uYW1lO1xuICAgICAgICB9XG4gICAgICAgIHZhcmlhYmxlc1tuYW1lMV0gPSBvYmoxLmlkO1xuICAgICAgICB2YXJpYWJsZXNbbmFtZTJdID0gb2JqMi5pZDtcblxuICAgICAgICBsZXQgc2VyaWFsaXplZFZhcmlhYmxlcyA9ICcnO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh2YXJpYWJsZXMpKSB7XG4gICAgICAgICAgICBzZXJpYWxpemVkVmFyaWFibGVzICs9IGtleSArICc6ICcgKyBKU09OLnN0cmluZ2lmeSh2YXJpYWJsZXNba2V5XSkgKyAnICc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYG11dGF0aW9uIGxpbmtBbmRVbmxpbmsge1xuICAgICAgICAgICAgJHttdXRhdGlvbi5uYW1lfSgke3NlcmlhbGl6ZWRWYXJpYWJsZXN9KSB7XG4gICAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWA7XG4gICAgfVxufVxuIl19
|