@bizdoc/core 2.4.11 → 2.4.12

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.
@@ -29,40 +29,41 @@ export class CompareGroupDirective extends CompareDirectiveBase {
29
29
  if (!this._comparision)
30
30
  return;
31
31
  if (this._context) {
32
- this._structure = this._context.structure.controls.find(e => e.name === this.name);
33
- this._base = this._context.base;
34
- this._version = this._context.version;
32
+ const { base, structure, version } = this._context;
33
+ this._structure = structure.controls.find(e => e.name === this.name);
34
+ this._base = base;
35
+ this._version = version;
35
36
  }
36
37
  else if (this._parent) {
37
- this._structure = this._parent.structure.controls.find(e => e.name === this.name);
38
- this._base = this._parent.base;
39
- this._version = this._parent.version;
38
+ const { base, structure, version } = this._parent;
39
+ this._structure = structure.controls.find(e => e.name === this.name);
40
+ this._base = base;
41
+ this._version = version;
40
42
  }
41
43
  else {
42
- this._structure = this._comparision.form.fields.find(e => e.name === this.name);
43
- const { currentVersion, baseVersion } = this._comparision;
44
+ const { form, currentVersion, baseVersion } = this._comparision;
45
+ this._structure = form.fields.find(e => e.name === this.name);
44
46
  this._base = baseVersion;
45
47
  this._version = currentVersion;
46
48
  }
47
49
  if (!this._structure)
48
50
  throw `No form field with name ${this.name}`;
49
51
  if (this._structure.flags?.indexOf('IsObject') < 0)
50
- throw `bizdocCompareGroup ${this.name}`;
51
- this.structure.flags?.indexOf('IsArray') > -1 && this._normalize();
52
- }
53
- _normalize() {
54
- this._keys = this.structure.controls.filter(c => c.flags?.indexOf('Key') > -1).map(k => k.name);
55
- this.base.forEach((b, i) => !this.version.find(v => this._keys.every(k => v[k] === b[k])) /* doesn't have a version */ &&
56
- this.version.splice(i, 0, Object.assign({ _compare: CompareState.Removed }, b)));
57
- this.version.forEach(v => {
58
- if (v['_compare'] === undefined) {
59
- const base = this.base.find(b => this._keys.every(k => b[k] === v[k]));
60
- if (!base)
61
- v['_compare'] = CompareState.Added;
62
- else if (JSON.stringify(v) !== JSON.stringify(base))
63
- v['_compare'] = CompareState.Modified;
64
- }
65
- });
52
+ throw `bizdocCompareGroup ${this.name} not an object.`;
53
+ if (this.structure.flags?.indexOf('IsArray') > -1) {
54
+ this._keys = this.structure.controls.filter(c => c.flags?.indexOf('Key') > -1).map(k => k.name);
55
+ this.base.forEach((b, i) => !this.version.find(v => this._keys.every(k => v[k] === b[k])) /* doesn't have a version */ &&
56
+ this.version.splice(i, 0, Object.assign({ _compare: CompareState.Removed }, b)));
57
+ this.version.forEach(v => {
58
+ if (v['_compare'] === undefined) {
59
+ const base = this.base.find(b => this._keys.every(k => b[k] === v[k]));
60
+ if (!base)
61
+ v['_compare'] = CompareState.Added;
62
+ else if (JSON.stringify(v) !== JSON.stringify(base))
63
+ v['_compare'] = CompareState.Modified;
64
+ }
65
+ });
66
+ }
66
67
  }
67
68
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: CompareGroupDirective, deps: [{ token: i1.VersionCompareComponent, optional: true }, { token: CompareContextDirective, host: true, optional: true }, { token: CompareGroupDirective, host: true, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Directive }); }
68
69
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.0", type: CompareGroupDirective, selector: "[bizdocCompareGroup],[bizdocCompareArray]", inputs: { name: ["bizdocCompareGroup", "name"] }, usesInheritance: true, ngImport: i0 }); }
@@ -341,4 +342,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
341
342
  type: Input,
342
343
  args: ['bizdocCompareDecorate']
343
344
  }] } });
344
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi1jb21wYXJlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29tcG9zZS92ZXJzaW9uLWNvbXBhcmUvdmVyc2lvbi1jb21wYXJlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBc0IsUUFBUSxFQUFFLElBQUksRUFBb0MsUUFBUSxFQUFpQyxNQUFNLGVBQWUsQ0FBQztBQUVoSyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7O0FBS2hELElBQUssWUFLSjtBQUxELFdBQUssWUFBWTtJQUNmLHNEQUFZLENBQUE7SUFDWix5REFBYSxDQUFBO0lBQ2IsaURBQVMsQ0FBQTtJQUNULHVEQUFZLENBQUE7QUFDZCxDQUFDLEVBTEksWUFBWSxLQUFaLFlBQVksUUFLaEI7QUFFRCxNQUFNLE9BQWdCLG9CQUFvQjtDQUl6QztBQUNELE1BQU07QUFFTixNQUFNLE9BQ0UscUJBQXNCLFNBQVEsb0JBQW9CO0lBTXhELElBQVcsU0FBUyxLQUFnQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzdELElBQVcsSUFBSSxLQUFVLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUUsSUFBVyxPQUFPLEtBQVUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUQsSUFBVyxJQUFJLEtBQWUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRCxZQUNzQixZQUFxQyxFQUM3QixRQUFpQyxFQUNyQixPQUE4QjtR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QUFROzswQkFBSSxJQUFJOzswQkFFaEIsUUFBUTtrRUFYbUIsU0FBUztzQkFBdEMsS0FBSzt1QkFBQyxpQkFBaUI7Z0JBQ1csT0FBTztzQkFBekMsS0FBSzt1QkFBQyxzQkFBc0I7Z0JBRUcsUUFBUTtzQkFBdkMsS0FBSzt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dCwgRGlyZWN0aXZlLCBPbkluaXQsIEVsZW1lbnRSZWYsIE9wdGlvbmFsLCBIb3N0LCBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgU2tpcFNlbGYsIFZpZXdDb250YWluZXJSZWYsIFRlbXBsYXRlUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi4vLi4vY29yZS9mdW5jdGlvbnNcIjtcclxuaW1wb3J0IHsgRmllbGRJbmZvIH0gZnJvbSBcIi4uLy4uL2NvcmUvbW9kZWxzXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS90cmFuc2xhdGUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBWZXJzaW9uQ29tcGFyZUNvbXBvbmVudCB9IGZyb20gXCIuL3ZlcnNpb24tY29tcGFyZS5jb21wb25lbnRcIjtcclxuXHJcbmVudW0gQ29tcGFyZVN0YXRlIHtcclxuICBSZW1vdmVkID0gLTEsXHJcbiAgVW5jaGFuZ2VkID0gMCxcclxuICBBZGRlZCA9IDEsXHJcbiAgTW9kaWZpZWQgPSAyXHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb21wYXJlRGlyZWN0aXZlQmFzZSB7XHJcbiAgYWJzdHJhY3QgZ2V0IGJhc2UoKTogYW55O1xyXG4gIGFic3RyYWN0IGdldCB2ZXJzaW9uKCk6IGFueTtcclxuICBhYnN0cmFjdCBnZXQgc3RydWN0dXJlKCk6IEZpZWxkSW5mbztcclxufVxyXG4vKiogKi9cclxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2JpemRvY0NvbXBhcmVHcm91cF0sW2JpemRvY0NvbXBhcmVBcnJheV0nIH0pXHJcbmV4cG9ydFxyXG4gIGNsYXNzIENvbXBhcmVHcm91cERpcmVjdGl2ZSBleHRlbmRzIENvbXBhcmVEaXJlY3RpdmVCYXNlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoJ2JpemRvY0NvbXBhcmVHcm91cCcpIG5hbWU6IHN0cmluZztcclxuICBwcml2YXRlIF9rZXlzOiBzdHJpbmdbXTtcclxuICBwcml2YXRlIF9zdHJ1Y3R1cmU6IEZpZWxkSW5mbztcclxuICBwcml2YXRlIF9iYXNlOiBhbnk7XHJcbiAgcHJpdmF0ZSBfdmVyc2lvbjogYW55O1xyXG4gIHB1YmxpYyBnZXQgc3RydWN0dXJlKCk6IEZpZWxkSW5mbyB7IHJldHVybiB0aGlzLl9zdHJ1Y3R1cmU7IH1cclxuICBwdWJsaWMgZ2V0IGJhc2UoKTogYW55IHsgcmV0dXJuIHRoaXMuX2Jhc2UgPyB0aGlzLl9iYXNlW3RoaXMubmFtZV0gOiBudWxsOyB9XHJcbiAgcHVibGljIGdldCB2ZXJzaW9uKCk6IGFueSB7IHJldHVybiB0aGlzLl92ZXJzaW9uW3RoaXMubmFtZV07IH1cclxuICBwdWJsaWMgZ2V0IGtleXMoKTogc3RyaW5nW10geyByZXR1cm4gdGhpcy5fa2V5czsgfVxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfY29tcGFyaXNpb246IFZlcnNpb25Db21wYXJlQ29tcG9uZW50LFxyXG4gICAgQE9wdGlvbmFsKCkgQEhvc3QoKSBwcml2YXRlIF9jb250ZXh0OiBDb21wYXJlQ29udGV4dERpcmVjdGl2ZSxcclxuICAgIEBPcHRpb25hbCgpIEBIb3N0KCkgQFNraXBTZWxmKCkgcHJpdmF0ZSBfcGFyZW50OiBDb21wYXJlR3JvdXBEaXJlY3RpdmUpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9jb21wYXJpc2lvbikgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuX2NvbnRleHQpIHtcclxuICAgICAgdGhpcy5fc3RydWN0dXJlID0gdGhpcy5fY29udGV4dC5zdHJ1Y3R1cmUuY29udHJvbHMuZmluZChlID0+IGUubmFtZSA9PT0gdGhpcy5uYW1lKTtcclxuICAgICAgdGhpcy5fYmFzZSA9IHRoaXMuX2NvbnRleHQuYmFzZTtcclxuICAgICAgdGhpcy5fdmVyc2lvbiA9IHRoaXMuX2NvbnRleHQudmVyc2lvbjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuX3BhcmVudCkge1xyXG4gICAgICB0aGlzLl9zdHJ1Y3R1cmUgPSB0aGlzLl9wYXJlbnQuc3RydWN0dXJlLmNvbnRyb2xzLmZpbmQoZSA9PiBlLm5hbWUgPT09IHRoaXMubmFtZSk7XHJcbiAgICAgIHRoaXMuX2Jhc2UgPSB0aGlzLl9wYXJlbnQuYmFzZTtcclxuICAgICAgdGhpcy5fdmVyc2lvbiA9IHRoaXMuX3BhcmVudC52ZXJzaW9uO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX3N0cnVjdHVyZSA9IHRoaXMuX2NvbXBhcmlzaW9uLmZvcm0uZmllbGRzLmZpbmQoZSA9PiBlLm5hbWUgPT09IHRoaXMubmFtZSk7XHJcbiAgICAgIGNvbnN0IHsgY3VycmVudFZlcnNpb24sIGJhc2VWZXJzaW9uIH0gPSB0aGlzLl9jb21wYXJpc2lvbjtcclxuICAgICAgdGhpcy5fYmFzZSA9IGJhc2VWZXJzaW9uO1xyXG4gICAgICB0aGlzLl92ZXJzaW9uID0gY3VycmVudFZlcnNpb247XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuX3N0cnVjdHVyZSkgdGhyb3cgYE5vIGZvcm0gZmllbGQgd2l0aCBuYW1lICR7dGhpcy5uYW1lfWA7XHJcbiAgICBpZiAodGhpcy5fc3RydWN0dXJlLmZsYWdzPy5pbmRleE9mKCdJc09iamVjdCcpIDwgMCkgdGhyb3cgYGJpemRvY0NvbXBhcmVHcm91cCAke3RoaXMubmFtZX1gO1xyXG4gICAgdGhpcy5zdHJ1Y3R1cmUuZmxhZ3M/LmluZGV4T2YoJ0lzQXJyYXknKSA+IC0xICYmIHRoaXMuX25vcm1hbGl6ZSgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9ub3JtYWxpemUoKSB7XHJcbiAgICB0aGlzLl9rZXlzID0gdGhpcy5zdHJ1Y3R1cmUuY29udHJvbHMuZmlsdGVyKGMgPT4gYy5mbGFncz8uaW5kZXhPZignS2V5JykgPiAtMSkubWFwKGsgPT4gay5uYW1lKTtcclxuICAgIHRoaXMuYmFzZS5mb3JFYWNoKChiLCBpKSA9PiAhdGhpcy52ZXJzaW9uLmZpbmQodiA9PiB0aGlzLl9rZXlzLmV2ZXJ5KGsgPT4gdltrXSA9PT0gYltrXSkpIC8qIGRvZXNuJ3QgaGF2ZSBhIHZlcnNpb24gKi8gJiZcclxuICAgICAgdGhpcy52ZXJzaW9uLnNwbGljZShpLCAwLCBPYmplY3QuYXNzaWduKHsgX2NvbXBhcmU6IENvbXBhcmVTdGF0ZS5SZW1vdmVkIH0sIGIpKSk7XHJcbiAgICB0aGlzLnZlcnNpb24uZm9yRWFjaCh2ID0+IHtcclxuICAgICAgaWYgKHZbJ19jb21wYXJlJ10gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLmJhc2UuZmluZChiID0+IHRoaXMuX2tleXMuZXZlcnkoayA9PiBiW2tdID09PSB2W2tdKSk7XHJcbiAgICAgICAgaWYgKCFiYXNlKVxyXG4gICAgICAgICAgdlsnX2NvbXBhcmUnXSA9IENvbXBhcmVTdGF0ZS5BZGRlZDtcclxuICAgICAgICBlbHNlIGlmIChKU09OLnN0cmluZ2lmeSh2KSAhPT0gSlNPTi5zdHJpbmdpZnkoYmFzZSkpXHJcbiAgICAgICAgICB2WydfY29tcGFyZSddID0gQ29tcGFyZVN0YXRlLk1vZGlmaWVkO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuLyoqICovXHJcbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tiaXpkb2NDb21wYXJlTmFtZV0nIH0pXHJcbmV4cG9ydFxyXG4gIGNsYXNzIENvbXBhcmVOYW1lRGlyZWN0aXZlIGV4dGVuZHMgQ29tcGFyZURpcmVjdGl2ZUJhc2UgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIHByaXZhdGUgX25hbWU6IHN0cmluZ1tdO1xyXG4gIEBJbnB1dCgnYml6ZG9jQ29tcGFyZU5hbWUnKSBzZXQgbmFtZSh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5fbmFtZSA9IHZhbC5zcGxpdCgnLCcpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zdHJ1Y3R1cmU6IEZpZWxkSW5mbztcclxuICBwcml2YXRlIF9iYXNlOiBhbnk7XHJcbiAgcHJpdmF0ZSBfdmVyc2lvbjogYW55O1xyXG4gIHByaXZhdGUgX3N0YXRlOiBDb21wYXJlU3RhdGUgPSBDb21wYXJlU3RhdGUuVW5jaGFuZ2VkO1xyXG4gIHB1YmxpYyBnZXQgc3RydWN0dXJlKCk6IEZpZWxkSW5mbyB7IHJldHVybiB0aGlzLl9zdHJ1Y3R1cmU7IH1cclxuICBwdWJsaWMgZ2V0IGJhc2UoKTogYW55IHsgcmV0dXJuIHRoaXMuX2Jhc2UgPyB0aGlzLl9iYXNlW3RoaXMuX25hbWVbMF1dIDogbnVsbDsgfVxyXG4gIHB1YmxpYyBnZXQgdmVyc2lvbigpOiBhbnkgeyByZXR1cm4gdGhpcy5fdmVyc2lvblt0aGlzLl9uYW1lWzBdXTsgfVxyXG4gIGdldCBzdGF0ZSgpOiBDb21wYXJlU3RhdGUgeyByZXR1cm4gdGhpcy5fc3RhdGUgfTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2NvbXBhcmlzaW9uOiBWZXJzaW9uQ29tcGFyZUNvbXBvbmVudCxcclxuICAgIEBPcHRpb25hbCgpIEBIb3N0KCkgcHJpdmF0ZSBfY29udGV4dDogQ29tcGFyZUNvbnRleHREaXJlY3RpdmUsXHJcbiAgICBAT3B0aW9uYWwoKSBASG9zdCgpIHByaXZhdGUgX2dyb3VwOiBDb21wYXJlR3JvdXBEaXJlY3RpdmUsXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIF9kb206IERvbVNhbml0aXplcixcclxuICAgIHByaXZhdGUgX2VsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5fY29tcGFyaXNpb24pIHJldHVybjtcclxuICAgIGlmICh0aGlzLl9jb250ZXh0KSB7XHJcbiAgICAgIHRoaXMuX3N0cnVjdHVyZSA9IHRoaXMuX2NvbnRleHQuc3RydWN0dXJlLmNvbnRyb2xzLmZpbmQoZSA9PiBlLm5hbWUgPT09IHRoaXMuX25hbWVbMF0pO1xyXG4gICAgICB0aGlzLl9iYXNlID0gdGhpcy5fY29udGV4dC5iYXNlO1xyXG4gICAgICB0aGlzLl92ZXJzaW9uID0gdGhpcy5fY29udGV4dC52ZXJzaW9uO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5fZ3JvdXApIHtcclxuICAgICAgdGhpcy5fc3RydWN0dXJlID0gdGhpcy5fZ3JvdXAuc3RydWN0dXJlLmNvbnRyb2xzLmZpbmQoZSA9PiBlLm5hbWUgPT09IHRoaXMuX25hbWVbMF0pO1xyXG4gICAgICB0aGlzLl9iYXNlID0gdGhpcy5fZ3JvdXAuYmFzZTtcclxuICAgICAgdGhpcy5fdmVyc2lvbiA9IHRoaXMuX2dyb3VwLnZlcnNpb247XHJcbiAgICAgIGlmICghdGhpcy5fc3RydWN0dXJlKSB0aHJvdyBgTm8gZm9ybSBmaWVsZCB3aXRoIG5hbWUgJHt0aGlzLl9uYW1lWzBdfWA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5fc3RydWN0dXJlID0gdGhpcy5fY29tcGFyaXNpb24uZm9ybS5maWVsZHMuZmluZChlID0+IGUubmFtZSA9PT0gdGhpcy5fbmFtZVswXSk7XHJcbiAgICAgIGNvbnN0IHsgY3VycmVudFZlcnNpb24sIGJhc2VWZXJzaW9uIH0gPSB0aGlzLl9jb21wYXJpc2lvbjtcclxuICAgICAgdGhpcy5fYmFzZSA9IGJhc2VWZXJzaW9uO1xyXG4gICAgICB0aGlzLl92ZXJzaW9uID0gY3VycmVudFZlcnNpb247XHJcbiAgICB9XHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5fY29tcGFyaXNpb24pIHJldHVybjtcclxuICAgIC8vIGlmIG9iamVjdCBoYXMgc3RhdGVcclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fdmVyc2lvblsnX2NvbXBhcmUnXTtcclxuICAgIGlmIChzdGF0ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgICBjYXNlIENvbXBhcmVTdGF0ZS5SZW1vdmVkOlxyXG4gICAgICAgICAgdGhpcy5fZGVjb3JhdGUoJ3JlbW92ZWQnLCAnRGVsZXRlZCcpO1xyXG4gICAgICAgICAgdGhpcy5fc3RhdGUgPSBzdGF0ZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjYXNlIENvbXBhcmVTdGF0ZS5BZGRlZDpcclxuICAgICAgICAgIHRoaXMuX2RlY29yYXRlKCdhZGRlZCcsICdBZGRlZCcpO1xyXG4gICAgICAgICAgdGhpcy5fc3RhdGUgPSBzdGF0ZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgdmVyc2lvbkRhdGE6IHsgW2ZpZWxkOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG4gICAgLy8gaXRlcmF0ZSBuYW1lc1xyXG4gICAgbGV0IG5hbWU6IHN0cmluZywgaSA9IDA7XHJcbiAgICB3aGlsZSAoaSA8IHRoaXMuX25hbWUubGVuZ3RoKSB7XHJcbiAgICAgIG5hbWUgPSB0aGlzLl9uYW1lW2ldO1xyXG4gICAgICBpZiAoIXRoaXMuX2Jhc2UpIHtcclxuICAgICAgICBpZiAodGhpcy5fdmVyc2lvbltuYW1lXSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgdGhpcy5fc3RhdGUgPSBDb21wYXJlU3RhdGUuQWRkZWQ7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5fdmVyc2lvbltuYW1lXSAhPT0gdGhpcy5fYmFzZVtuYW1lXSkge1xyXG4gICAgICAgIGlmICh0aGlzLl92ZXJzaW9uW25hbWVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuX3ZlcnNpb25bbmFtZV0gPSB0aGlzLl9iYXNlW25hbWVdO1xyXG4gICAgICAgICAgdmVyc2lvbkRhdGFbbmFtZV0gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB0aGlzLl9zdGF0ZSA9IENvbXBhcmVTdGF0ZS5SZW1vdmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9iYXNlW25hbWVdID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICB0aGlzLl9zdGF0ZSA9IENvbXBhcmVTdGF0ZS5BZGRlZDtcclxuICAgICAgICBlbHNlIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLl92ZXJzaW9uW25hbWVdKSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5fYmFzZVtuYW1lXSkpIHtcclxuICAgICAgICAgIC8vIHN0b3JlIHZlcnNpb24gZGF0YVxyXG4gICAgICAgICAgdmVyc2lvbkRhdGFbbmFtZV0gPSB0aGlzLl92ZXJzaW9uW25hbWVdO1xyXG4gICAgICAgICAgdGhpcy5fdmVyc2lvbltuYW1lXSA9IHRoaXMuX2Jhc2VbbmFtZV07XHJcbiAgICAgICAgICB0aGlzLl9zdGF0ZSA9IENvbXBhcmVTdGF0ZS5Nb2RpZmllZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaSsrO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX3N0YXRlICE9PSBDb21wYXJlU3RhdGUuVW5jaGFuZ2VkKVxyXG4gICAgICBzd2l0Y2ggKHRoaXMuX3N0YXRlKSB7XHJcbiAgICAgICAgY2FzZSBDb21wYXJlU3RhdGUuUmVtb3ZlZDpcclxuICAgICAgICAgIC8vIGRldGVjdCB3aXRoIGJhc2UgdmFsdWUocylcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlY29yYXRlKCdyZW1vdmVkJywgJ0RlbGV0ZWQnKTtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl92ZXJzaW9uLCB2ZXJzaW9uRGF0YSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29tcGFyZVN0YXRlLkFkZGVkOlxyXG4gICAgICAgICAgdGhpcy5fZGVjb3JhdGUoJ2FkZGVkJywgJ0FkZGVkJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbXBhcmVTdGF0ZS5Nb2RpZmllZDpcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgY29uc3QgdmVyc2lvbkhUTUwgPSB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAvLyBkZXRlY3QgYWdhaW4gd2l0aCBiYXNlIHZhbHVlKHMpXHJcbiAgICAgICAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSFRNTCA9IHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICAgICAgICAgICAgLy8gcmVzdG9yZSB2ZXJzaW9uIGh0bWxcclxuICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdmVyc2lvbkhUTUw7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGFiZWxFbCA9IHRoaXMuX2RlY29yYXRlKCdtb2RpZmllZCcsICdNb2RpZmllZCcpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICAgICAgICAgIGVsLmNsYXNzTmFtZSA9ICdvcmlnaW5hbCc7XHJcbiAgICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gb3JpZ2luYWxIVE1MOyAvL3RoaXMuX2RvbS5zYW5pdGl6ZSgpO1xyXG4gICAgICAgICAgICAgIGxhYmVsRWwuYXBwZW5kKGVsKTtcclxuICAgICAgICAgICAgICAvLyByZXN0b3JlIHZlcnNpb24gdmFsdWUocylcclxuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuX3ZlcnNpb24sIHZlcnNpb25EYXRhKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX2RlY29yYXRlKGNsYXNzTmFtZTogc3RyaW5nLCBsYWJlbDogc3RyaW5nKTogSFRNTEVsZW1lbnQge1xyXG4gICAgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2NvbXBhcmUnLCBjbGFzc05hbWUpO1xyXG4gICAgY29uc3QgbGFiZWxDb250YWluZXJFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgbGFiZWxDb250YWluZXJFbC5jbGFzc05hbWUgPSAnbGFiZWwnO1xyXG4gICAgY29uc3QgbGFiZWxFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgIGxhYmVsRWwuaW5uZXJUZXh0ID0gdGhpcy5fdHJhbnNsYXRlLmdldChsYWJlbCk7XHJcbiAgICBsYWJlbENvbnRhaW5lckVsLmFwcGVuZChsYWJlbEVsKTtcclxuICAgIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChsYWJlbENvbnRhaW5lckVsKTtcclxuICAgIHJldHVybiBsYWJlbEVsO1xyXG4gIH1cclxufVxyXG4vKiogKi9cclxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2JpemRvY0NvbXBhcmVDb250ZXh0XSxbYml6ZG9jQ29tcGFyZV0nLCBleHBvcnRBczogJ2JpemRvY0NvbXBhcmUnIH0pXHJcbmV4cG9ydFxyXG4gIGNsYXNzIENvbXBhcmVDb250ZXh0RGlyZWN0aXZlIGV4dGVuZHMgQ29tcGFyZURpcmVjdGl2ZUJhc2UgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIHByaXZhdGUgX3ZlcnNpb246IHt9O1xyXG4gIEBJbnB1dCgnYml6ZG9jQ29tcGFyZU9mJykgc2V0IGNvbXBhcmVPZih2YWw6IHt9KSB7IHRoaXMuX3ZlcnNpb24gPSB2YWw7IH1cclxuICBASW5wdXQoJ2JpemRvY0NvbXBhcmVDb250ZXh0Jykgc2V0IGNvbnRleHQodmFsOiB7fSkgeyB0aGlzLl92ZXJzaW9uID0gdmFsOyB9XHJcbiAgZ2V0IHZlcnNpb24oKToge30geyByZXR1cm4gdGhpcy5fdmVyc2lvbjsgfVxyXG4gIEBJbnB1dCgnYml6ZG9jQ29tcGFyZURlY29yYXRlJykgZGVjb3JhdGU6ICdncm91cCcgfCAnc2luZ2xlJyB8ICd0YWJsZSc7XHJcbiAgcHJpdmF0ZSBfYmFzZToge307XHJcbiAgcHVibGljIGdldCBiYXNlKCk6IHt9IHsgcmV0dXJuIHRoaXMuX2Jhc2U7IH1cclxuICBwdWJsaWMgZ2V0IHN0cnVjdHVyZSgpOiBGaWVsZEluZm8geyByZXR1cm4gdGhpcy5fZ3JvdXAuc3RydWN0dXJlOyB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9jb21wYXJpc2lvbjogVmVyc2lvbkNvbXBhcmVDb21wb25lbnQsXHJcbiAgICBAT3B0aW9uYWwoKSBASG9zdCgpIHByaXZhdGUgX2dyb3VwOiBDb21wYXJlR3JvdXBEaXJlY3RpdmUsXHJcbiAgICBwcml2YXRlIF92YzogVmlld0NvbnRhaW5lclJlZixcclxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+LFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLmRlY29yYXRlID0gX2VsZW1lbnQubmF0aXZlRWxlbWVudC50YWdOYW1lID09PSAnVFInID8gJ3RhYmxlJyA6ICdncm91cCc7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2NvbXBhcmlzaW9uKSB7XHJcbiAgICAgIGlmICghdGhpcy5fZ3JvdXApIHRocm93IGBNaXNzaW5nIGVuY2xvc2luZyBiaXpkb2NDb21wYXJlR3JvdXAgZGlyZWN0aXZlYDtcclxuICAgICAgaWYgKCFpc09iamVjdCh0aGlzLnZlcnNpb24pKSB0aHJvdyBgW2JpemRvY0NvbXBhcmVDb250ZXh0XSBzeW50YXhgO1xyXG4gICAgICB0aGlzLl9iYXNlID0gdGhpcy5fZ3JvdXAuYmFzZS5maW5kKGIgPT4gdGhpcy5fZ3JvdXAua2V5cy5ldmVyeShrID0+IGJba10gPT09IHRoaXMudmVyc2lvbltrXSkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX3RlbXBsYXRlKSB7XHJcbiAgICAgIHRoaXMuX3ZjLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZSwge1xyXG4gICAgICAgICRpbXBsaWNpdDogdGhpcy5fYmFzZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9jb21wYXJpc2lvbikgcmV0dXJuO1xyXG4gICAgc3dpdGNoICh0aGlzLmRlY29yYXRlKSB7XHJcbiAgICAgIGNhc2UgJ3RhYmxlJzpcclxuICAgICAgICB0aGlzLl90YWJsZSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdncm91cCc6XHJcbiAgICAgICAgdGhpcy5fY29sbGFwc2UoKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbiAgLyoqICovXHJcbiAgcHJpdmF0ZSBfdGFibGUoKSB7XHJcbiAgICBsZXQgY2xhc3NOYW1lOiBzdHJpbmc7XHJcbiAgICBzd2l0Y2ggKHRoaXMuX3ZlcnNpb25bJ19jb21wYXJlJ10gYXMgQ29tcGFyZVN0YXRlKSB7XHJcbiAgICAgIGNhc2UgQ29tcGFyZVN0YXRlLkFkZGVkOlxyXG4gICAgICAgIGNsYXNzTmFtZSA9ICdhZGRlZCc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29tcGFyZVN0YXRlLlJlbW92ZWQ6XHJcbiAgICAgICAgY2xhc3NOYW1lID0gJ3JlbW92ZWQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbXBhcmVTdGF0ZS5Nb2RpZmllZDpcclxuICAgICAgICBjbGFzc05hbWUgPSAnbW9kaWZpZWQnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2NvbXBhcmUnLCBjbGFzc05hbWUpO1xyXG4gIH1cclxuICAvKiogcmVtb3ZlcyByZXBlYXRlZCBhZGRlZCBhbmQgcmVtb3ZlZCB0YWdzICovXHJcbiAgcHJpdmF0ZSBfY29sbGFwc2UoKSB7XHJcbiAgICBjb25zdCBlbHMgPSB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY29tcGFyZScpO1xyXG4gICAgbGV0IHByZXZTdGF0ZTogQ29tcGFyZVN0YXRlID0gQ29tcGFyZVN0YXRlLlVuY2hhbmdlZDtcclxuICAgIGZvciAobGV0IGkgPSBlbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgY29uc3QgZWwgPSBlbHNbaV07XHJcbiAgICAgIGxldCBzdGF0ZTogQ29tcGFyZVN0YXRlO1xyXG4gICAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdhZGRlZCcpKVxyXG4gICAgICAgIHN0YXRlID0gQ29tcGFyZVN0YXRlLkFkZGVkO1xyXG4gICAgICBlbHNlIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoJ3JlbW92ZWQnKSlcclxuICAgICAgICBzdGF0ZSA9IENvbXBhcmVTdGF0ZS5SZW1vdmVkO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBzdGF0ZSA9IENvbXBhcmVTdGF0ZS5VbmNoYW5nZWQ7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByZXZTdGF0ZSA9PT0gc3RhdGUpIHtcclxuICAgICAgICBjb25zdCBsYWJlbEVsID0gZWwucXVlcnlTZWxlY3RvcignLmxhYmVsJyk7XHJcbiAgICAgICAgbGFiZWxFbCAmJiBsYWJlbEVsLnJlbW92ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHByZXZTdGF0ZSA9IHN0YXRlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
345
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi1jb21wYXJlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29tcG9zZS92ZXJzaW9uLWNvbXBhcmUvdmVyc2lvbi1jb21wYXJlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBc0IsUUFBUSxFQUFFLElBQUksRUFBb0MsUUFBUSxFQUFpQyxNQUFNLGVBQWUsQ0FBQztBQUVoSyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7O0FBS2hELElBQUssWUFLSjtBQUxELFdBQUssWUFBWTtJQUNmLHNEQUFZLENBQUE7SUFDWix5REFBYSxDQUFBO0lBQ2IsaURBQVMsQ0FBQTtJQUNULHVEQUFZLENBQUE7QUFDZCxDQUFDLEVBTEksWUFBWSxLQUFaLFlBQVksUUFLaEI7QUFFRCxNQUFNLE9BQWdCLG9CQUFvQjtDQUl6QztBQUNELE1BQU07QUFFTixNQUFNLE9BQ0UscUJBQXNCLFNBQVEsb0JBQW9CO0lBTXhELElBQVcsU0FBUyxLQUFnQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzdELElBQVcsSUFBSSxLQUFVLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUUsSUFBVyxPQUFPLEtBQVUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUQsSUFBVyxJQUFJLEtBQWUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRCxZQUNzQixZQUFxQyxFQUM3QixRQUFpQyxFQUNyQixPQUE4QjtR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SSxJQUFJOzswQkFFaEIsUUFBUTtrRUFYbUIsU0FBUztzQkFBdEMsS0FBSzt1QkFBQyxpQkFBaUI7Z0JBQ1csT0FBTztzQkFBekMsS0FBSzt1QkFBQyxzQkFBc0I7Z0JBRUcsUUFBUTtzQkFBdkMsS0FBSzt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dCwgRGlyZWN0aXZlLCBPbkluaXQsIEVsZW1lbnRSZWYsIE9wdGlvbmFsLCBIb3N0LCBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgU2tpcFNlbGYsIFZpZXdDb250YWluZXJSZWYsIFRlbXBsYXRlUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi4vLi4vY29yZS9mdW5jdGlvbnNcIjtcclxuaW1wb3J0IHsgRmllbGRJbmZvIH0gZnJvbSBcIi4uLy4uL2NvcmUvbW9kZWxzXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS90cmFuc2xhdGUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBWZXJzaW9uQ29tcGFyZUNvbXBvbmVudCB9IGZyb20gXCIuL3ZlcnNpb24tY29tcGFyZS5jb21wb25lbnRcIjtcclxuXHJcbmVudW0gQ29tcGFyZVN0YXRlIHtcclxuICBSZW1vdmVkID0gLTEsXHJcbiAgVW5jaGFuZ2VkID0gMCxcclxuICBBZGRlZCA9IDEsXHJcbiAgTW9kaWZpZWQgPSAyXHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb21wYXJlRGlyZWN0aXZlQmFzZSB7XHJcbiAgYWJzdHJhY3QgZ2V0IGJhc2UoKTogYW55O1xyXG4gIGFic3RyYWN0IGdldCB2ZXJzaW9uKCk6IGFueTtcclxuICBhYnN0cmFjdCBnZXQgc3RydWN0dXJlKCk6IEZpZWxkSW5mbztcclxufVxyXG4vKiogKi9cclxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2JpemRvY0NvbXBhcmVHcm91cF0sW2JpemRvY0NvbXBhcmVBcnJheV0nIH0pXHJcbmV4cG9ydFxyXG4gIGNsYXNzIENvbXBhcmVHcm91cERpcmVjdGl2ZSBleHRlbmRzIENvbXBhcmVEaXJlY3RpdmVCYXNlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoJ2JpemRvY0NvbXBhcmVHcm91cCcpIG5hbWU6IHN0cmluZztcclxuICBwcml2YXRlIF9rZXlzOiBzdHJpbmdbXTtcclxuICBwcml2YXRlIF9zdHJ1Y3R1cmU6IEZpZWxkSW5mbztcclxuICBwcml2YXRlIF9iYXNlOiBhbnk7XHJcbiAgcHJpdmF0ZSBfdmVyc2lvbjogYW55O1xyXG4gIHB1YmxpYyBnZXQgc3RydWN0dXJlKCk6IEZpZWxkSW5mbyB7IHJldHVybiB0aGlzLl9zdHJ1Y3R1cmU7IH1cclxuICBwdWJsaWMgZ2V0IGJhc2UoKTogYW55IHsgcmV0dXJuIHRoaXMuX2Jhc2UgPyB0aGlzLl9iYXNlW3RoaXMubmFtZV0gOiBudWxsOyB9XHJcbiAgcHVibGljIGdldCB2ZXJzaW9uKCk6IGFueSB7IHJldHVybiB0aGlzLl92ZXJzaW9uW3RoaXMubmFtZV07IH1cclxuICBwdWJsaWMgZ2V0IGtleXMoKTogc3RyaW5nW10geyByZXR1cm4gdGhpcy5fa2V5czsgfVxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfY29tcGFyaXNpb246IFZlcnNpb25Db21wYXJlQ29tcG9uZW50LFxyXG4gICAgQE9wdGlvbmFsKCkgQEhvc3QoKSBwcml2YXRlIF9jb250ZXh0OiBDb21wYXJlQ29udGV4dERpcmVjdGl2ZSxcclxuICAgIEBPcHRpb25hbCgpIEBIb3N0KCkgQFNraXBTZWxmKCkgcHJpdmF0ZSBfcGFyZW50OiBDb21wYXJlR3JvdXBEaXJlY3RpdmUpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9jb21wYXJpc2lvbikgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuX2NvbnRleHQpIHtcclxuICAgICAgY29uc3QgeyBiYXNlLCBzdHJ1Y3R1cmUsIHZlcnNpb24gfSA9IHRoaXMuX2NvbnRleHQ7XHJcbiAgICAgIHRoaXMuX3N0cnVjdHVyZSA9IHN0cnVjdHVyZS5jb250cm9scy5maW5kKGUgPT4gZS5uYW1lID09PSB0aGlzLm5hbWUpO1xyXG4gICAgICB0aGlzLl9iYXNlID0gYmFzZTtcclxuICAgICAgdGhpcy5fdmVyc2lvbiA9IHZlcnNpb247XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgY29uc3QgeyBiYXNlLCBzdHJ1Y3R1cmUsIHZlcnNpb24gfSA9IHRoaXMuX3BhcmVudDtcclxuICAgICAgdGhpcy5fc3RydWN0dXJlID0gc3RydWN0dXJlLmNvbnRyb2xzLmZpbmQoZSA9PiBlLm5hbWUgPT09IHRoaXMubmFtZSk7XHJcbiAgICAgIHRoaXMuX2Jhc2UgPSBiYXNlO1xyXG4gICAgICB0aGlzLl92ZXJzaW9uID0gdmVyc2lvbjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zdCB7IGZvcm0sIGN1cnJlbnRWZXJzaW9uLCBiYXNlVmVyc2lvbiB9ID0gdGhpcy5fY29tcGFyaXNpb247XHJcbiAgICAgIHRoaXMuX3N0cnVjdHVyZSA9IGZvcm0uZmllbGRzLmZpbmQoZSA9PiBlLm5hbWUgPT09IHRoaXMubmFtZSk7XHJcbiAgICAgIHRoaXMuX2Jhc2UgPSBiYXNlVmVyc2lvbjtcclxuICAgICAgdGhpcy5fdmVyc2lvbiA9IGN1cnJlbnRWZXJzaW9uO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLl9zdHJ1Y3R1cmUpIHRocm93IGBObyBmb3JtIGZpZWxkIHdpdGggbmFtZSAke3RoaXMubmFtZX1gO1xyXG4gICAgaWYgKHRoaXMuX3N0cnVjdHVyZS5mbGFncz8uaW5kZXhPZignSXNPYmplY3QnKSA8IDApIHRocm93IGBiaXpkb2NDb21wYXJlR3JvdXAgJHt0aGlzLm5hbWV9IG5vdCBhbiBvYmplY3QuYDtcclxuICAgIGlmICh0aGlzLnN0cnVjdHVyZS5mbGFncz8uaW5kZXhPZignSXNBcnJheScpID4gLTEpIHtcclxuICAgICAgdGhpcy5fa2V5cyA9IHRoaXMuc3RydWN0dXJlLmNvbnRyb2xzLmZpbHRlcihjID0+IGMuZmxhZ3M/LmluZGV4T2YoJ0tleScpID4gLTEpLm1hcChrID0+IGsubmFtZSk7XHJcbiAgICAgIHRoaXMuYmFzZS5mb3JFYWNoKChiLCBpKSA9PiAhdGhpcy52ZXJzaW9uLmZpbmQodiA9PiB0aGlzLl9rZXlzLmV2ZXJ5KGsgPT4gdltrXSA9PT0gYltrXSkpIC8qIGRvZXNuJ3QgaGF2ZSBhIHZlcnNpb24gKi8gJiZcclxuICAgICAgICB0aGlzLnZlcnNpb24uc3BsaWNlKGksIDAsIE9iamVjdC5hc3NpZ24oeyBfY29tcGFyZTogQ29tcGFyZVN0YXRlLlJlbW92ZWQgfSwgYikpKTtcclxuICAgICAgdGhpcy52ZXJzaW9uLmZvckVhY2godiA9PiB7XHJcbiAgICAgICAgaWYgKHZbJ19jb21wYXJlJ10gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgY29uc3QgYmFzZSA9IHRoaXMuYmFzZS5maW5kKGIgPT4gdGhpcy5fa2V5cy5ldmVyeShrID0+IGJba10gPT09IHZba10pKTtcclxuICAgICAgICAgIGlmICghYmFzZSlcclxuICAgICAgICAgICAgdlsnX2NvbXBhcmUnXSA9IENvbXBhcmVTdGF0ZS5BZGRlZDtcclxuICAgICAgICAgIGVsc2UgaWYgKEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeShiYXNlKSlcclxuICAgICAgICAgICAgdlsnX2NvbXBhcmUnXSA9IENvbXBhcmVTdGF0ZS5Nb2RpZmllZDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4vKiogKi9cclxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2JpemRvY0NvbXBhcmVOYW1lXScgfSlcclxuZXhwb3J0XHJcbiAgY2xhc3MgQ29tcGFyZU5hbWVEaXJlY3RpdmUgZXh0ZW5kcyBDb21wYXJlRGlyZWN0aXZlQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcHJpdmF0ZSBfbmFtZTogc3RyaW5nW107XHJcbiAgQElucHV0KCdiaXpkb2NDb21wYXJlTmFtZScpIHNldCBuYW1lKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9uYW1lID0gdmFsLnNwbGl0KCcsJyk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3N0cnVjdHVyZTogRmllbGRJbmZvO1xyXG4gIHByaXZhdGUgX2Jhc2U6IGFueTtcclxuICBwcml2YXRlIF92ZXJzaW9uOiBhbnk7XHJcbiAgcHJpdmF0ZSBfc3RhdGU6IENvbXBhcmVTdGF0ZSA9IENvbXBhcmVTdGF0ZS5VbmNoYW5nZWQ7XHJcbiAgcHVibGljIGdldCBzdHJ1Y3R1cmUoKTogRmllbGRJbmZvIHsgcmV0dXJuIHRoaXMuX3N0cnVjdHVyZTsgfVxyXG4gIHB1YmxpYyBnZXQgYmFzZSgpOiBhbnkgeyByZXR1cm4gdGhpcy5fYmFzZSA/IHRoaXMuX2Jhc2VbdGhpcy5fbmFtZVswXV0gOiBudWxsOyB9XHJcbiAgcHVibGljIGdldCB2ZXJzaW9uKCk6IGFueSB7IHJldHVybiB0aGlzLl92ZXJzaW9uW3RoaXMuX25hbWVbMF1dOyB9XHJcbiAgZ2V0IHN0YXRlKCk6IENvbXBhcmVTdGF0ZSB7IHJldHVybiB0aGlzLl9zdGF0ZSB9O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfY29tcGFyaXNpb246IFZlcnNpb25Db21wYXJlQ29tcG9uZW50LFxyXG4gICAgQE9wdGlvbmFsKCkgQEhvc3QoKSBwcml2YXRlIF9jb250ZXh0OiBDb21wYXJlQ29udGV4dERpcmVjdGl2ZSxcclxuICAgIEBPcHRpb25hbCgpIEBIb3N0KCkgcHJpdmF0ZSBfZ3JvdXA6IENvbXBhcmVHcm91cERpcmVjdGl2ZSxcclxuICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgX2RvbTogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9jb21wYXJpc2lvbikgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuX2NvbnRleHQpIHtcclxuICAgICAgdGhpcy5fc3RydWN0dXJlID0gdGhpcy5fY29udGV4dC5zdHJ1Y3R1cmUuY29udHJvbHMuZmluZChlID0+IGUubmFtZSA9PT0gdGhpcy5fbmFtZVswXSk7XHJcbiAgICAgIHRoaXMuX2Jhc2UgPSB0aGlzLl9jb250ZXh0LmJhc2U7XHJcbiAgICAgIHRoaXMuX3ZlcnNpb24gPSB0aGlzLl9jb250ZXh0LnZlcnNpb247XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLl9ncm91cCkge1xyXG4gICAgICB0aGlzLl9zdHJ1Y3R1cmUgPSB0aGlzLl9ncm91cC5zdHJ1Y3R1cmUuY29udHJvbHMuZmluZChlID0+IGUubmFtZSA9PT0gdGhpcy5fbmFtZVswXSk7XHJcbiAgICAgIHRoaXMuX2Jhc2UgPSB0aGlzLl9ncm91cC5iYXNlO1xyXG4gICAgICB0aGlzLl92ZXJzaW9uID0gdGhpcy5fZ3JvdXAudmVyc2lvbjtcclxuICAgICAgaWYgKCF0aGlzLl9zdHJ1Y3R1cmUpIHRocm93IGBObyBmb3JtIGZpZWxkIHdpdGggbmFtZSAke3RoaXMuX25hbWVbMF19YDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLl9zdHJ1Y3R1cmUgPSB0aGlzLl9jb21wYXJpc2lvbi5mb3JtLmZpZWxkcy5maW5kKGUgPT4gZS5uYW1lID09PSB0aGlzLl9uYW1lWzBdKTtcclxuICAgICAgY29uc3QgeyBjdXJyZW50VmVyc2lvbiwgYmFzZVZlcnNpb24gfSA9IHRoaXMuX2NvbXBhcmlzaW9uO1xyXG4gICAgICB0aGlzLl9iYXNlID0gYmFzZVZlcnNpb247XHJcbiAgICAgIHRoaXMuX3ZlcnNpb24gPSBjdXJyZW50VmVyc2lvbjtcclxuICAgIH1cclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9jb21wYXJpc2lvbikgcmV0dXJuO1xyXG4gICAgLy8gaWYgb2JqZWN0IGhhcyBzdGF0ZVxyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLl92ZXJzaW9uWydfY29tcGFyZSddO1xyXG4gICAgaWYgKHN0YXRlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICAgIGNhc2UgQ29tcGFyZVN0YXRlLlJlbW92ZWQ6XHJcbiAgICAgICAgICB0aGlzLl9kZWNvcmF0ZSgncmVtb3ZlZCcsICdEZWxldGVkJyk7XHJcbiAgICAgICAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNhc2UgQ29tcGFyZVN0YXRlLkFkZGVkOlxyXG4gICAgICAgICAgdGhpcy5fZGVjb3JhdGUoJ2FkZGVkJywgJ0FkZGVkJyk7XHJcbiAgICAgICAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCB2ZXJzaW9uRGF0YTogeyBbZmllbGQ6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICAvLyBpdGVyYXRlIG5hbWVzXHJcbiAgICBsZXQgbmFtZTogc3RyaW5nLCBpID0gMDtcclxuICAgIHdoaWxlIChpIDwgdGhpcy5fbmFtZS5sZW5ndGgpIHtcclxuICAgICAgbmFtZSA9IHRoaXMuX25hbWVbaV07XHJcbiAgICAgIGlmICghdGhpcy5fYmFzZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl92ZXJzaW9uW25hbWVdICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICB0aGlzLl9zdGF0ZSA9IENvbXBhcmVTdGF0ZS5BZGRlZDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLl92ZXJzaW9uW25hbWVdICE9PSB0aGlzLl9iYXNlW25hbWVdKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3ZlcnNpb25bbmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5fdmVyc2lvbltuYW1lXSA9IHRoaXMuX2Jhc2VbbmFtZV07XHJcbiAgICAgICAgICB2ZXJzaW9uRGF0YVtuYW1lXSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIHRoaXMuX3N0YXRlID0gQ29tcGFyZVN0YXRlLlJlbW92ZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2Jhc2VbbmFtZV0gPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgIHRoaXMuX3N0YXRlID0gQ29tcGFyZVN0YXRlLkFkZGVkO1xyXG4gICAgICAgIGVsc2UgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuX3ZlcnNpb25bbmFtZV0pICE9PSBKU09OLnN0cmluZ2lmeSh0aGlzLl9iYXNlW25hbWVdKSkge1xyXG4gICAgICAgICAgLy8gc3RvcmUgdmVyc2lvbiBkYXRhXHJcbiAgICAgICAgICB2ZXJzaW9uRGF0YVtuYW1lXSA9IHRoaXMuX3ZlcnNpb25bbmFtZV07XHJcbiAgICAgICAgICB0aGlzLl92ZXJzaW9uW25hbWVdID0gdGhpcy5fYmFzZVtuYW1lXTtcclxuICAgICAgICAgIHRoaXMuX3N0YXRlID0gQ29tcGFyZVN0YXRlLk1vZGlmaWVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpKys7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fc3RhdGUgIT09IENvbXBhcmVTdGF0ZS5VbmNoYW5nZWQpXHJcbiAgICAgIHN3aXRjaCAodGhpcy5fc3RhdGUpIHtcclxuICAgICAgICBjYXNlIENvbXBhcmVTdGF0ZS5SZW1vdmVkOlxyXG4gICAgICAgICAgLy8gZGV0ZWN0IHdpdGggYmFzZSB2YWx1ZShzKVxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5fZGVjb3JhdGUoJ3JlbW92ZWQnLCAnRGVsZXRlZCcpO1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuX3ZlcnNpb24sIHZlcnNpb25EYXRhKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb21wYXJlU3RhdGUuQWRkZWQ6XHJcbiAgICAgICAgICB0aGlzLl9kZWNvcmF0ZSgnYWRkZWQnLCAnQWRkZWQnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29tcGFyZVN0YXRlLk1vZGlmaWVkOlxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zdCB2ZXJzaW9uSFRNTCA9IHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIGRldGVjdCBhZ2FpbiB3aXRoIGJhc2UgdmFsdWUocylcclxuICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxIVE1MID0gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmlubmVySFRNTDtcclxuICAgICAgICAgICAgICAvLyByZXN0b3JlIHZlcnNpb24gaHRtbFxyXG4gICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSB2ZXJzaW9uSFRNTDtcclxuICAgICAgICAgICAgICBjb25zdCBsYWJlbEVsID0gdGhpcy5fZGVjb3JhdGUoJ21vZGlmaWVkJywgJ01vZGlmaWVkJyk7XHJcbiAgICAgICAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICAgICAgICAgICAgZWwuY2xhc3NOYW1lID0gJ29yaWdpbmFsJztcclxuICAgICAgICAgICAgICBlbC5pbm5lckhUTUwgPSBvcmlnaW5hbEhUTUw7IC8vdGhpcy5fZG9tLnNhbml0aXplKCk7XHJcbiAgICAgICAgICAgICAgbGFiZWxFbC5hcHBlbmQoZWwpO1xyXG4gICAgICAgICAgICAgIC8vIHJlc3RvcmUgdmVyc2lvbiB2YWx1ZShzKVxyXG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5fdmVyc2lvbiwgdmVyc2lvbkRhdGEpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBfZGVjb3JhdGUoY2xhc3NOYW1lOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcpOiBIVE1MRWxlbWVudCB7XHJcbiAgICB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnY29tcGFyZScsIGNsYXNzTmFtZSk7XHJcbiAgICBjb25zdCBsYWJlbENvbnRhaW5lckVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICBsYWJlbENvbnRhaW5lckVsLmNsYXNzTmFtZSA9ICdsYWJlbCc7XHJcbiAgICBjb25zdCBsYWJlbEVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgbGFiZWxFbC5pbm5lclRleHQgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KGxhYmVsKTtcclxuICAgIGxhYmVsQ29udGFpbmVyRWwuYXBwZW5kKGxhYmVsRWwpO1xyXG4gICAgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGxhYmVsQ29udGFpbmVyRWwpO1xyXG4gICAgcmV0dXJuIGxhYmVsRWw7XHJcbiAgfVxyXG59XHJcbi8qKiAqL1xyXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbYml6ZG9jQ29tcGFyZUNvbnRleHRdLFtiaXpkb2NDb21wYXJlXScsIGV4cG9ydEFzOiAnYml6ZG9jQ29tcGFyZScgfSlcclxuZXhwb3J0XHJcbiAgY2xhc3MgQ29tcGFyZUNvbnRleHREaXJlY3RpdmUgZXh0ZW5kcyBDb21wYXJlRGlyZWN0aXZlQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcHJpdmF0ZSBfdmVyc2lvbjoge307XHJcbiAgQElucHV0KCdiaXpkb2NDb21wYXJlT2YnKSBzZXQgY29tcGFyZU9mKHZhbDoge30pIHsgdGhpcy5fdmVyc2lvbiA9IHZhbDsgfVxyXG4gIEBJbnB1dCgnYml6ZG9jQ29tcGFyZUNvbnRleHQnKSBzZXQgY29udGV4dCh2YWw6IHt9KSB7IHRoaXMuX3ZlcnNpb24gPSB2YWw7IH1cclxuICBnZXQgdmVyc2lvbigpOiB7fSB7IHJldHVybiB0aGlzLl92ZXJzaW9uOyB9XHJcbiAgQElucHV0KCdiaXpkb2NDb21wYXJlRGVjb3JhdGUnKSBkZWNvcmF0ZTogJ2dyb3VwJyB8ICdzaW5nbGUnIHwgJ3RhYmxlJztcclxuICBwcml2YXRlIF9iYXNlOiB7fTtcclxuICBwdWJsaWMgZ2V0IGJhc2UoKToge30geyByZXR1cm4gdGhpcy5fYmFzZTsgfVxyXG4gIHB1YmxpYyBnZXQgc3RydWN0dXJlKCk6IEZpZWxkSW5mbyB7IHJldHVybiB0aGlzLl9ncm91cC5zdHJ1Y3R1cmU7IH1cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2NvbXBhcmlzaW9uOiBWZXJzaW9uQ29tcGFyZUNvbXBvbmVudCxcclxuICAgIEBPcHRpb25hbCgpIEBIb3N0KCkgcHJpdmF0ZSBfZ3JvdXA6IENvbXBhcmVHcm91cERpcmVjdGl2ZSxcclxuICAgIHByaXZhdGUgX3ZjOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4sXHJcbiAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuZGVjb3JhdGUgPSBfZWxlbWVudC5uYXRpdmVFbGVtZW50LnRhZ05hbWUgPT09ICdUUicgPyAndGFibGUnIDogJ2dyb3VwJztcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fY29tcGFyaXNpb24pIHtcclxuICAgICAgaWYgKCF0aGlzLl9ncm91cCkgdGhyb3cgYE1pc3NpbmcgZW5jbG9zaW5nIGJpemRvY0NvbXBhcmVHcm91cCBkaXJlY3RpdmVgO1xyXG4gICAgICBpZiAoIWlzT2JqZWN0KHRoaXMudmVyc2lvbikpIHRocm93IGBbYml6ZG9jQ29tcGFyZUNvbnRleHRdIHN5bnRheGA7XHJcbiAgICAgIHRoaXMuX2Jhc2UgPSB0aGlzLl9ncm91cC5iYXNlLmZpbmQoYiA9PiB0aGlzLl9ncm91cC5rZXlzLmV2ZXJ5KGsgPT4gYltrXSA9PT0gdGhpcy52ZXJzaW9uW2tdKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fdGVtcGxhdGUpIHtcclxuICAgICAgdGhpcy5fdmMuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlLCB7XHJcbiAgICAgICAgJGltcGxpY2l0OiB0aGlzLl9iYXNlXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuX2NvbXBhcmlzaW9uKSByZXR1cm47XHJcbiAgICBzd2l0Y2ggKHRoaXMuZGVjb3JhdGUpIHtcclxuICAgICAgY2FzZSAndGFibGUnOlxyXG4gICAgICAgIHRoaXMuX3RhYmxlKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2dyb3VwJzpcclxuICAgICAgICB0aGlzLl9jb2xsYXBzZSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKiogKi9cclxuICBwcml2YXRlIF90YWJsZSgpIHtcclxuICAgIGxldCBjbGFzc05hbWU6IHN0cmluZztcclxuICAgIHN3aXRjaCAodGhpcy5fdmVyc2lvblsnX2NvbXBhcmUnXSBhcyBDb21wYXJlU3RhdGUpIHtcclxuICAgICAgY2FzZSBDb21wYXJlU3RhdGUuQWRkZWQ6XHJcbiAgICAgICAgY2xhc3NOYW1lID0gJ2FkZGVkJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb21wYXJlU3RhdGUuUmVtb3ZlZDpcclxuICAgICAgICBjbGFzc05hbWUgPSAncmVtb3ZlZCc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29tcGFyZVN0YXRlLk1vZGlmaWVkOlxyXG4gICAgICAgIGNsYXNzTmFtZSA9ICdtb2RpZmllZCc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnY29tcGFyZScsIGNsYXNzTmFtZSk7XHJcbiAgfVxyXG4gIC8qKiByZW1vdmVzIHJlcGVhdGVkIGFkZGVkIGFuZCByZW1vdmVkIHRhZ3MgKi9cclxuICBwcml2YXRlIF9jb2xsYXBzZSgpIHtcclxuICAgIGNvbnN0IGVscyA9IHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jb21wYXJlJyk7XHJcbiAgICBsZXQgcHJldlN0YXRlOiBDb21wYXJlU3RhdGUgPSBDb21wYXJlU3RhdGUuVW5jaGFuZ2VkO1xyXG4gICAgZm9yIChsZXQgaSA9IGVscy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICBjb25zdCBlbCA9IGVsc1tpXTtcclxuICAgICAgbGV0IHN0YXRlOiBDb21wYXJlU3RhdGU7XHJcbiAgICAgIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoJ2FkZGVkJykpXHJcbiAgICAgICAgc3RhdGUgPSBDb21wYXJlU3RhdGUuQWRkZWQ7XHJcbiAgICAgIGVsc2UgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucygncmVtb3ZlZCcpKVxyXG4gICAgICAgIHN0YXRlID0gQ29tcGFyZVN0YXRlLlJlbW92ZWQ7XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHN0YXRlID0gQ29tcGFyZVN0YXRlLlVuY2hhbmdlZDtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocHJldlN0YXRlID09PSBzdGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IGxhYmVsRWwgPSBlbC5xdWVyeVNlbGVjdG9yKCcubGFiZWwnKTtcclxuICAgICAgICBsYWJlbEVsICYmIGxhYmVsRWwucmVtb3ZlKCk7XHJcbiAgICAgIH1cclxuICAgICAgcHJldlN0YXRlID0gc3RhdGU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -23,6 +23,11 @@ export class DocumentFactory {
23
23
  this._dir = _dir;
24
24
  this._router = _router;
25
25
  }
26
+ /**
27
+ *
28
+ * @param formId
29
+ * @returns
30
+ */
26
31
  create(formId) {
27
32
  const form = this._session.profile.forms.find(f => f.name == formId);
28
33
  return new Observable(observe => {
@@ -107,6 +112,11 @@ export class DocumentFactory {
107
112
  state: { item }
108
113
  });
109
114
  }
115
+ /**
116
+ *
117
+ * @param documentId
118
+ * @returns
119
+ */
110
120
  copy(documentId) {
111
121
  return new Observable(observe => this._mailbox.copy(documentId).
112
122
  subscribe({
@@ -150,4 +160,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
150
160
  type: Injectable,
151
161
  args: [{ providedIn: 'root' }]
152
162
  }], ctorParameters: () => [{ type: i1.SessionService }, { type: i2.MailboxService }, { type: i3.BizDocComponentFactoryResolver }, { type: i4.HubService }, { type: i5.PromptService }, { type: i6.Overlay }, { type: i7.Directionality }, { type: i8.RouterImpl }] });
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZmFjdG9yeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jb3JlL2RvY3VtZW50LWZhY3Rvcnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUk1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFNN0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7O0FBSTlDLE1BQU0sT0FBTyxlQUFlO0lBQzFCLFlBQ1UsUUFBd0IsRUFDeEIsUUFBd0IsRUFDeEIsR0FBbUMsRUFDbkMsVUFBc0IsRUFDdEIsR0FBa0IsRUFDbEIsUUFBaUIsRUFDakIsSUFBb0IsRUFDcEIsT0FBbUI7UUFQbkIsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFDeEIsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFDeEIsUUFBRyxHQUFILEdBQUcsQ0FBZ0M7UUFDbkMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixRQUFHLEdBQUgsR0FBRyxDQUFlO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsU0FBSSxHQUFKLElBQUksQ0FBZ0I7UUFDcEIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtJQUFJLENBQUM7SUFDbEMsTUFBTSxDQUFDLE1BQWM7UUFDbkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJ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SyxDQUFDO29CQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDOUIsTUFBTTtnQkFDUjtvQkFDRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3JCLENBQUM7SUFDSCxDQUFDOzhHQWxJVSxlQUFlO2tIQUFmLGVBQWUsY0FERixNQUFNOzsyRkFDbkIsZUFBZTtrQkFEM0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb25hbGl0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcclxuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIGZpbHRlciwgbWVyZ2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSAnLi9wcm9tcHQuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3V0ZXJJbXBsIH0gZnJvbSAnLi9yb3V0ZXInO1xyXG5pbXBvcnQgeyBPcGVuUG9saWN5IH0gZnJvbSAnLi9jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vYmFzZSc7XHJcbmltcG9ydCB7IEJpekRvY0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlciB9IGZyb20gJy4vY29tcG9uZW50LWZhY3RvcnktcmVzb2x2ZXInO1xyXG5pbXBvcnQgeyBIdWJTZXJ2aWNlIH0gZnJvbSAnLi9odWIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1haWxib3hTZXJ2aWNlLCBQb3NpdGlvbkVycm9yIH0gZnJvbSAnLi9tYWlsYm94LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZWNpcGllbnRNb2RlbCB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgRm9ybVJlZiB9IGZyb20gJy4uL2NvbXBvc2UvZm9ybS1yZWYnO1xyXG5pbXBvcnQgeyBPdmVybGF5Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvc2Uvb3ZlcmxheS5jb21wb25lbnQuZXhwJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBEb2N1bWVudEZhY3Rvcnkge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9tYWlsYm94OiBNYWlsYm94U2VydmljZSxcclxuICAgIHByaXZhdGUgX2NmOiBCaXpEb2NDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBwcml2YXRlIF9tZXNzYWdpbmc6IEh1YlNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wczogUHJvbXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX292ZXJsYXk6IE92ZXJsYXksXHJcbiAgICBwcml2YXRlIF9kaXI6IERpcmVjdGlvbmFsaXR5LFxyXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXJJbXBsKSB7IH1cclxuICBjcmVhdGUoZm9ybUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuZm9ybXMuZmluZChmID0+IGYubmFtZSA9PSBmb3JtSWQpO1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPFJlY2lwaWVudE1vZGVsPihvYnNlcnZlID0+IHtcclxuICAgICAgc3dpdGNoIChmb3JtLm1vZGUpIHtcclxuICAgICAgICBjYXNlICdPdmVybGF5JzpcclxuICAgICAgICAgIGNvbnN0IG92ZXJsYXlSZWYgPSB0aGlzLl9vdmVybGF5LmNyZWF0ZSh7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKS5cclxuICAgICAgICAgICAgICBjZW50ZXJIb3Jpem9udGFsbHkoKS5jZW50ZXJWZXJ0aWNhbGx5KCksXHJcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICAgICAgICBoZWlnaHQ6ICc5MnZoJyxcclxuICAgICAgICAgICAgd2lkdGg6ICc5M3Z3JyxcclxuICAgICAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl9kaXIudmFsdWUsXHJcbiAgICAgICAgICAgIGJhY2tkcm9wQ2xhc3M6ICdjZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wJyxcclxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ2Zvcm0tcGFuZWwnXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmICghZm9ybS50ZW1wbGF0ZSlcclxuICAgICAgICAgICAgdGhyb3cgKGBGb3JtICcke2Zvcm0ubmFtZX0nIG1vZGVsIG1pc3NpbmcgJ1tUZW1wbGF0ZSgpXScgYXR0cmlidXRlLmApO1xyXG4gICAgICAgICAgY29uc3QgY29tcCA9IHRoaXMuX2NmLmNvbXBvbmVudChmb3JtLnRlbXBsYXRlKTtcclxuICAgICAgICAgIGNvbnN0IGZvcm1SZWYgPSBuZXcgRm9ybVJlZih0aGlzLl9yb3V0ZXIsIGZvcm0pO1xyXG4gICAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xyXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwcm92aWRlOiBGb3JtUmVmLCB1c2VWYWx1ZTogZm9ybVJlZlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgY29uc3QgcG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbDxGb3JtQ29tcG9uZW50PGFueT4+KGNvbXAsIG51bGwsIGluamVjdG9yKTtcclxuICAgICAgICAgIGNvbnN0IGNvbXBSZWYgPSBvdmVybGF5UmVmLmF0dGFjaChwb3J0YWwpO1xyXG4gICAgICAgICAgZm9ybVJlZi5fbW9kZSA9IGNvbXBSZWYuaW5zdGFuY2UubW9kZSA9ICdvdmVybGF5JztcclxuICAgICAgICAgIC8vIGNyZWF0ZSBvbiBmb3JtIGNyZWF0ZSgpIGNhbGxcclxuICAgICAgICAgIGZvcm1SZWYuX2NyZWF0ZSQuXHJcbiAgICAgICAgICAgIHN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgbmV4dDogbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gZmFsc2UpIHRoaXMuX21haWxib3guY3JlYXRlKGZvcm1JZCwgbSkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgbmV4dDogZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZS5uZXh0KGQpO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBlcnJvcjogZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyb3IoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZS5lcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlSZWYuZGV0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZS5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBvdmVybGF5UmVmLmRldGFjaCgpO1xyXG4gICAgICAgICAgICAgICAgICBvYnNlcnZlLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb3ZlcmxheVJlZi5kZXRhY2goKTtcclxuICAgICAgICAgICAgICAgIG9ic2VydmUuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLy8gY2FsbGJhY2tcclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2luZy5jYWxsYmFjayQucGlwZSh0YWtlVW50aWwoZm9ybVJlZi5fY3JlYXRlJCkpLnN1YnNjcmliZShlID0+XHJcbiAgICAgICAgICAgIGNvbXBSZWYuaW5zdGFuY2Uub25NZXNzYWdlICYmIGNvbXBSZWYuaW5zdGFuY2Uub25NZXNzYWdlKGUubWVzc2FnZSkpO1xyXG4gICAgICAgICAgLy8gZXNjYXBlXHJcbiAgICAgICAgICBtZXJnZShvdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKSwgb3ZlcmxheVJlZi5rZXlkb3duRXZlbnRzKCkucGlwZShmaWx0ZXIoayA9PiBrLmtleSA9PT0gJ0VzY2FwZScpKSkuXHJcbiAgICAgICAgICAgIHN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZS5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgIG92ZXJsYXlSZWYuZGV0YWNoKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHRoaXMuX21haWxib3guY3JlYXRlKGZvcm1JZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogbSA9PiBvYnNlcnZlLm5leHQobSksXHJcbiAgICAgICAgICAgIGVycm9yOiBlID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9lcnJvcihlKTtcclxuICAgICAgICAgICAgICBvYnNlcnZlLmVycm9yKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiBvYnNlcnZlLmNvbXBsZXRlKClcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfbmF2KGl0ZW06IFJlY2lwaWVudE1vZGVsPGFueT4pIHtcclxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbJ21haWxib3gvaScsIGl0ZW0uaWQuZW5jb2RlSWQoKV0sXHJcbiAgICAgIHtcclxuICAgICAgICBwb2xpY3k6IE9wZW5Qb2xpY3kuQ2xlYXIsXHJcbiAgICAgICAgc3RhdGU6IHsgaXRlbSB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBjb3B5KGRvY3VtZW50SWQ6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPFJlY2lwaWVudE1vZGVsPihvYnNlcnZlID0+IHRoaXMuX21haWxib3guY29weShkb2N1bWVudElkKS5cclxuICAgICAgc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBkID0+IHtcclxuICAgICAgICAgIHRoaXMuX3BzLnRvYXN0KCdDb3BpZWQnLCBkLm51bWJlcik7XHJcbiAgICAgICAgICBvYnNlcnZlLm5leHQoKTtcclxuICAgICAgICB9LCBlcnJvcjogZSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9lcnJvcihlKTtcclxuICAgICAgICAgIG9ic2VydmUuZXJyb3IoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiBvYnNlcnZlLmNvbXBsZXRlKClcclxuICAgICAgfSkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBIYW5kbGUgaHR0cCBlcnJvciByZXNwb25zZVxyXG4gICAqIEBwYXJhbSBlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZXJyb3IoZTogYW55IHwgUG9zaXRpb25FcnJvcikge1xyXG4gICAgaWYgKGUuY29uc3RydWN0b3IubmFtZSA9PT0gJ1Bvc2l0aW9uRXJyb3InKVxyXG4gICAgICBzd2l0Y2ggKChlIGFzIFBvc2l0aW9uRXJyb3IpLmNvZGUpIHtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICB0aGlzLl9wcy5lcnJvcignVXNlckRlbmllZEdlb0VycicpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHRoaXMuX3BzLmVycm9yKCdHZW9FcnInKTtcclxuICAgICAgfVxyXG4gICAgZWxzZSBzd2l0Y2ggKChlIGFzIGFueSkuc3RhdHVzKSB7XHJcbiAgICAgIGNhc2UgNDA2OiAvLyBzZXJ2ZXIgVmFsaWRhdGlvbkV4Y2VwdGlvbiB0aHJvd25cclxuICAgICAgICBjb25zdCBtZXNzYWdlID0gKGUgYXMgYW55KS5lcnJvcjtcclxuICAgICAgICB0aGlzLl9wcy5lcnJvclN0cmluZyhtZXNzYWdlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLl9wcy5lcnJvcigpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZmFjdG9yeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jb3JlL2RvY3VtZW50LWZhY3Rvcnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUk1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFNN0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7O0FBSTlDLE1BQU0sT0FBTyxlQUFlO0lBQzFCLFlBQ1UsUUFBd0IsRUFDeEIsUUFBd0IsRUFDeEIsR0FBbUMsRUFDbkMsVUFBc0IsRUFDdEIsR0FBa0IsRUFDbEIsUUFBaUIsRUFDakIsSUFBb0IsRUFDcEIsT0FBbUI7UUFQbkIsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFDeEIsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFDeEIsUUFBRyxHQUFILEdBQUcsQ0FBZ0M7UUFDbkMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixRQUFHLEdBQUgsR0FBRyxDQUFlO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsU0FBSSxHQUFKLElBQUksQ0FBZ0I7UUFDcEIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtJQUFJLENBQUM7SUFDaEM7Ozs7T0FJRztJQUNMLE1BQU0sQ0FBQyxNQUFjO1FBQ25CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FB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QU0sT0FBTyxHQUFJLENBQVMsQ0FBQyxLQUFLLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM5QixNQUFNO2dCQUNSO29CQUNFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckIsQ0FBQztJQUNILENBQUM7OEdBNUlVLGVBQWU7a0hBQWYsZUFBZSxjQURGLE1BQU07OzJGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERpcmVjdGlvbmFsaXR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xyXG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZmlsdGVyLCBtZXJnZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFByb21wdFNlcnZpY2UgfSBmcm9tICcuL3Byb21wdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFJvdXRlckltcGwgfSBmcm9tICcuL3JvdXRlcic7XHJcbmltcG9ydCB7IE9wZW5Qb2xpY3kgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlJztcclxuaW1wb3J0IHsgQml6RG9jQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gZnJvbSAnLi9jb21wb25lbnQtZmFjdG9yeS1yZXNvbHZlcic7XHJcbmltcG9ydCB7IEh1YlNlcnZpY2UgfSBmcm9tICcuL2h1Yi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFpbGJveFNlcnZpY2UsIFBvc2l0aW9uRXJyb3IgfSBmcm9tICcuL21haWxib3guc2VydmljZSc7XHJcbmltcG9ydCB7IFJlY2lwaWVudE1vZGVsIH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBGb3JtUmVmIH0gZnJvbSAnLi4vY29tcG9zZS9mb3JtLXJlZic7XHJcbmltcG9ydCB7IE92ZXJsYXlGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9zZS9vdmVybGF5LmNvbXBvbmVudC5leHAnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIERvY3VtZW50RmFjdG9yeSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX21haWxib3g6IE1haWxib3hTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2Y6IEJpekRvY0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIHByaXZhdGUgX21lc3NhZ2luZzogSHViU2VydmljZSxcclxuICAgIHByaXZhdGUgX3BzOiBQcm9tcHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfb3ZlcmxheTogT3ZlcmxheSxcclxuICAgIHByaXZhdGUgX2RpcjogRGlyZWN0aW9uYWxpdHksXHJcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlckltcGwpIHsgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBmb3JtSWRcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICBjcmVhdGUoZm9ybUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuZm9ybXMuZmluZChmID0+IGYubmFtZSA9PSBmb3JtSWQpO1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPFJlY2lwaWVudE1vZGVsPihvYnNlcnZlID0+IHtcclxuICAgICAgc3dpdGNoIChmb3JtLm1vZGUpIHtcclxuICAgICAgICBjYXNlICdPdmVybGF5JzpcclxuICAgICAgICAgIGNvbnN0IG92ZXJsYXlSZWYgPSB0aGlzLl9vdmVybGF5LmNyZWF0ZSh7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKS5cclxuICAgICAgICAgICAgICBjZW50ZXJIb3Jpem9udGFsbHkoKS5jZW50ZXJWZXJ0aWNhbGx5KCksXHJcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICAgICAgICBoZWlnaHQ6ICc5MnZoJyxcclxuICAgICAgICAgICAgd2lkdGg6ICc5M3Z3JyxcclxuICAgICAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl9kaXIudmFsdWUsXHJcbiAgICAgICAgICAgIGJhY2tkcm9wQ2xhc3M6ICdjZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9wJyxcclxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ2Zvcm0tcGFuZWwnXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmICghZm9ybS50ZW1wbGF0ZSlcclxuICAgICAgICAgICAgdGhyb3cgKGBGb3JtICcke2Zvcm0ubmFtZX0nIG1vZGVsIG1pc3NpbmcgJ1tUZW1wbGF0ZSgpXScgYXR0cmlidXRlLmApO1xyXG4gICAgICAgICAgY29uc3QgY29tcCA9IHRoaXMuX2NmLmNvbXBvbmVudChmb3JtLnRlbXBsYXRlKTtcclxuICAgICAgICAgIGNvbnN0IGZvcm1SZWYgPSBuZXcgRm9ybVJlZih0aGlzLl9yb3V0ZXIsIGZvcm0pO1xyXG4gICAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xyXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBwcm92aWRlOiBGb3JtUmVmLCB1c2VWYWx1ZTogZm9ybVJlZlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgY29uc3QgcG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbDxGb3JtQ29tcG9uZW50PGFueT4+KGNvbXAsIG51bGwsIGluamVjdG9yKTtcclxuICAgICAgICAgIGNvbnN0IGNvbXBSZWYgPSBvdmVybGF5UmVmLmF0dGFjaChwb3J0YWwpO1xyXG4gICAgICAgICAgZm9ybVJlZi5fbW9kZSA9IGNvbXBSZWYuaW5zdGFuY2UubW9kZSA9ICdvdmVybGF5JztcclxuICAgICAgICAgIC8vIGNyZWF0ZSBvbiBmb3JtIGNyZWF0ZSgpIGNhbGxcclxuICAgICAgICAgIGZvcm1SZWYuX2NyZWF0ZSQuXHJcbiAgICAgICAgICAgIHN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgbmV4dDogbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gZmFsc2UpIHRoaXMuX21haWxib3guY3JlYXRlKGZvcm1JZCwgbSkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgbmV4dDogZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZS5uZXh0KGQpO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBlcnJvcjogZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyb3IoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZS5lcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG92ZXJsYXlSZWYuZGV0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZS5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBvdmVybGF5UmVmLmRldGFjaCgpO1xyXG4gICAgICAgICAgICAgICAgICBvYnNlcnZlLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb3ZlcmxheVJlZi5kZXRhY2goKTtcclxuICAgICAgICAgICAgICAgIG9ic2VydmUuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLy8gY2FsbGJhY2tcclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2luZy5jYWxsYmFjayQucGlwZSh0YWtlVW50aWwoZm9ybVJlZi5fY3JlYXRlJCkpLnN1YnNjcmliZShlID0+XHJcbiAgICAgICAgICAgIGNvbXBSZWYuaW5zdGFuY2Uub25NZXNzYWdlICYmIGNvbXBSZWYuaW5zdGFuY2Uub25NZXNzYWdlKGUubWVzc2FnZSkpO1xyXG4gICAgICAgICAgLy8gZXNjYXBlXHJcbiAgICAgICAgICBtZXJnZShvdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKSwgb3ZlcmxheVJlZi5rZXlkb3duRXZlbnRzKCkucGlwZShmaWx0ZXIoayA9PiBrLmtleSA9PT0gJ0VzY2FwZScpKSkuXHJcbiAgICAgICAgICAgIHN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZS5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgIG92ZXJsYXlSZWYuZGV0YWNoKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHRoaXMuX21haWxib3guY3JlYXRlKGZvcm1JZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogbSA9PiBvYnNlcnZlLm5leHQobSksXHJcbiAgICAgICAgICAgIGVycm9yOiBlID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9lcnJvcihlKTtcclxuICAgICAgICAgICAgICBvYnNlcnZlLmVycm9yKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiBvYnNlcnZlLmNvbXBsZXRlKClcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfbmF2KGl0ZW06IFJlY2lwaWVudE1vZGVsPGFueT4pIHtcclxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbJ21haWxib3gvaScsIGl0ZW0uaWQuZW5jb2RlSWQoKV0sXHJcbiAgICAgIHtcclxuICAgICAgICBwb2xpY3k6IE9wZW5Qb2xpY3kuQ2xlYXIsXHJcbiAgICAgICAgc3RhdGU6IHsgaXRlbSB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gZG9jdW1lbnRJZFxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgY29weShkb2N1bWVudElkOiBudW1iZXIpIHtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxSZWNpcGllbnRNb2RlbD4ob2JzZXJ2ZSA9PiB0aGlzLl9tYWlsYm94LmNvcHkoZG9jdW1lbnRJZCkuXHJcbiAgICAgIHN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogZCA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9wcy50b2FzdCgnQ29waWVkJywgZC5udW1iZXIpO1xyXG4gICAgICAgICAgb2JzZXJ2ZS5uZXh0KCk7XHJcbiAgICAgICAgfSwgZXJyb3I6IGUgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fZXJyb3IoZSk7XHJcbiAgICAgICAgICBvYnNlcnZlLmVycm9yKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4gb2JzZXJ2ZS5jb21wbGV0ZSgpXHJcbiAgICAgIH0pKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIGh0dHAgZXJyb3IgcmVzcG9uc2VcclxuICAgKiBAcGFyYW0gZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2Vycm9yKGU6IGFueSB8IFBvc2l0aW9uRXJyb3IpIHtcclxuICAgIGlmIChlLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdQb3NpdGlvbkVycm9yJylcclxuICAgICAgc3dpdGNoICgoZSBhcyBQb3NpdGlvbkVycm9yKS5jb2RlKSB7XHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgdGhpcy5fcHMuZXJyb3IoJ1VzZXJEZW5pZWRHZW9FcnInKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0aGlzLl9wcy5lcnJvcignR2VvRXJyJyk7XHJcbiAgICAgIH1cclxuICAgIGVsc2Ugc3dpdGNoICgoZSBhcyBhbnkpLnN0YXR1cykge1xyXG4gICAgICBjYXNlIDQwNjogLy8gc2VydmVyIFZhbGlkYXRpb25FeGNlcHRpb24gdGhyb3duXHJcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IChlIGFzIGFueSkuZXJyb3I7XHJcbiAgICAgICAgdGhpcy5fcHMuZXJyb3JTdHJpbmcobWVzc2FnZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5fcHMuZXJyb3IoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19