@tsi-developpement/tsi-shared-ui 1.11.14 → 1.11.16

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.
@@ -4,6 +4,9 @@ export class EntityInfo {
4
4
  this.keyColumns = [];
5
5
  this.isWorkflow = false;
6
6
  }
7
+ static hasForeignKeyDiscriminator(entityInfo) {
8
+ return !!entityInfo?.discriminatorPropertyName && !!entityInfo?.discriminatorClassName;
9
+ }
7
10
  }
8
11
  export class EntityRelation {
9
12
  constructor() {
@@ -34,4 +37,4 @@ export class EntityColumnDetailResponse {
34
37
  this.maxLength = null;
35
38
  }
36
39
  }
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWluZm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvbW9kZWxzL2VudGl0eS1pbmZvL2VudGl0eS1pbmZvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxVQUFVO0lBQXZCO1FBSUksV0FBTSxHQUFZLEtBQUssQ0FBQztRQUt4QixlQUFVLEdBQWEsRUFBRSxDQUFDO1FBQzFCLGVBQVUsR0FBWSxLQUFLLENBQUM7SUFpQmhDLENBQUM7Q0FBQTtBQUNELE1BQU0sT0FBTyxjQUFjO0lBQTNCO1FBR0ksZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7SUFFdEMsQ0FBQztDQUFBO0FBRUQsTUFBTSxPQUFPLHVCQUF1QjtJQUFwQztRQUNJLFdBQU0sR0FBZSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3RDLGNBQVMsR0FBcUIsRUFBRSxDQUFDO0lBQ3JDLENBQUM7Q0FBQTtBQUVELE1BQU0sT0FBTyxvQ0FBb0M7SUFLN0MsWUFBWSxTQUFpQixFQUFFLE1BQWtCLEVBQUUsU0FBMkI7UUFIOUUsV0FBTSxHQUFlLElBQUksVUFBVSxFQUFFLENBQUM7UUFDdEMsY0FBUyxHQUFxQixFQUFFLENBQUM7UUFHN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDL0IsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFPLDBCQUEwQjtJQUF2QztRQUNJLFNBQUksR0FBVyxFQUFFLENBQUM7UUFDbEIsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGNBQVMsR0FBa0IsSUFBSSxDQUFDO0lBQ3BDLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBFbnRpdHlJbmZvIHtcclxuICAgIGNsYXNzTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgZm9ybU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgIGxpc3RDb21wb25lbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgIGxvZ2dlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGlzdFJvdXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICBmb3JtUm91dGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgIGRpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgIGRpc2NyaW1pbmF0b3JDbGFzc05hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgIGtleUNvbHVtbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICBpc1dvcmtmbG93OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBkZWZhdWx0U3RhdHVzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICBzdGF0dXNFbnVtTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgc3RhdHVzQ29sdW1uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgYWR2YW5jZWRTZWFyY2hDb21wb25lbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgIGNhcmRIZWFkZXJQaG90b0NvbHVtbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgY2FyZFRpdGxlQ29sdW1uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICBjYXJkU3ViSGVhZGVyQ29sdW1uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICBjYXJkRGVzY3JpcHRpb25Db2x1bW46IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgIGNhbGVuZGFyU3RhcnREYXRlQ29sdW1uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICBjYWxlbmRhckVuZERhdGVDb2x1bW46IHN0cmluZ3wgdW5kZWZpbmVkO1xyXG4gICAgZnJlcXVlbnQ6IHN0cmluZ3wgdW5kZWZpbmVkO1xyXG4gICAgY3JlYXRlRnVuY3Rpb25hbGl0eUNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgIHJlYWRGdW5jdGlvbmFsaXR5Q29kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgdXBkYXRlRnVuY3Rpb25hbGl0eUNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgIGRlbGV0ZUZ1bmN0aW9uYWxpdHlDb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG59XHJcbmV4cG9ydCBjbGFzcyBFbnRpdHlSZWxhdGlvbiB7XHJcbiAgICBlbnRpdHlGcm9tOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICBlbnRpdHlUbzogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgbG9nQ2FzY2FkZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgZHVwbGljYXRlQ2FzY2FkZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgZGVsZXRlQmVoYXZpb3VyOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFbnRpdHlJbmZvV2l0aFJlbGF0aW9ucyB7XHJcbiAgICBlbnRpdHk6IEVudGl0eUluZm8gPSBuZXcgRW50aXR5SW5mbygpO1xyXG4gICAgcmVsYXRpb25zOiBFbnRpdHlSZWxhdGlvbltdID0gW107XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBVcGRhdGVFbnRpdHlJbmZvV2l0aFJlbGF0aW9uc1JlcXVlc3Qge1xyXG4gICAgY2xhc3NOYW1lOiBzdHJpbmc7XHJcbiAgICBlbnRpdHk6IEVudGl0eUluZm8gPSBuZXcgRW50aXR5SW5mbygpO1xyXG4gICAgcmVsYXRpb25zOiBFbnRpdHlSZWxhdGlvbltdID0gW107XHJcblxyXG4gICAgY29uc3RydWN0b3IoY2xhc3NOYW1lOiBzdHJpbmcsIGVudGl0eTogRW50aXR5SW5mbywgcmVsYXRpb25zOiBFbnRpdHlSZWxhdGlvbltdKSB7XHJcbiAgICAgICAgdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XHJcbiAgICAgICAgdGhpcy5lbnRpdHkgPSBlbnRpdHk7XHJcbiAgICAgICAgdGhpcy5yZWxhdGlvbnMgPSByZWxhdGlvbnM7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFbnRpdHlDb2x1bW5EZXRhaWxSZXNwb25zZSB7XHJcbiAgICBuYW1lOiBzdHJpbmcgPSAnJztcclxuICAgIHR5cGU6IHN0cmluZyA9ICcnO1xyXG4gICAgaXNOdWxsYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbWF4TGVuZ3RoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxufSJdfQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWluZm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvbW9kZWxzL2VudGl0eS1pbmZvL2VudGl0eS1pbmZvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxVQUFVO0lBQXZCO1FBSUksV0FBTSxHQUFZLEtBQUssQ0FBQztRQU14QixlQUFVLEdBQWEsRUFBRSxDQUFDO1FBQzFCLGVBQVUsR0FBWSxLQUFLLENBQUM7SUFvQmhDLENBQUM7SUFIRyxNQUFNLENBQUMsMEJBQTBCLENBQUMsVUFBOEI7UUFDNUQsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLHlCQUF5QixJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsc0JBQXNCLENBQUM7SUFDM0YsQ0FBQztDQUNKO0FBQ0QsTUFBTSxPQUFPLGNBQWM7SUFBM0I7UUFHSSxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztJQUV0QyxDQUFDO0NBQUE7QUFFRCxNQUFNLE9BQU8sdUJBQXVCO0lBQXBDO1FBQ0ksV0FBTSxHQUFlLElBQUksVUFBVSxFQUFFLENBQUM7UUFDdEMsY0FBUyxHQUFxQixFQUFFLENBQUM7SUFDckMsQ0FBQztDQUFBO0FBRUQsTUFBTSxPQUFPLG9DQUFvQztJQUs3QyxZQUFZLFNBQWlCLEVBQUUsTUFBa0IsRUFBRSxTQUEyQjtRQUg5RSxXQUFNLEdBQWUsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN0QyxjQUFTLEdBQXFCLEVBQUUsQ0FBQztRQUc3QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUMvQixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sMEJBQTBCO0lBQXZDO1FBQ0ksU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ2xCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsY0FBUyxHQUFrQixJQUFJLENBQUM7SUFDcEMsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEVudGl0eUluZm8ge1xyXG4gICAgY2xhc3NOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICBmb3JtTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgbGlzdENvbXBvbmVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgbG9nZ2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsaXN0Um91dGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgIGZvcm1Sb3V0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgZGlzY3JpbWluYXRvckNsYXNzUHJvcGVydHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICBkaXNjcmltaW5hdG9yQ2xhc3NOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICBkaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICBrZXlDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgaXNXb3JrZmxvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgZGVmYXVsdFN0YXR1czogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgc3RhdHVzRW51bU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgIHN0YXR1c0NvbHVtbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgIGFkdmFuY2VkU2VhcmNoQ29tcG9uZW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICBjYXJkSGVhZGVyUGhvdG9Db2x1bW46IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgIGNhcmRUaXRsZUNvbHVtbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgY2FyZFN1YkhlYWRlckNvbHVtbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgY2FyZERlc2NyaXB0aW9uQ29sdW1uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICBjYWxlbmRhclN0YXJ0RGF0ZUNvbHVtbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgY2FsZW5kYXJFbmREYXRlQ29sdW1uOiBzdHJpbmd8IHVuZGVmaW5lZDtcclxuICAgIGZyZXF1ZW50OiBzdHJpbmd8IHVuZGVmaW5lZDtcclxuICAgIGNyZWF0ZUZ1bmN0aW9uYWxpdHlDb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICByZWFkRnVuY3Rpb25hbGl0eUNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgIHVwZGF0ZUZ1bmN0aW9uYWxpdHlDb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICBkZWxldGVGdW5jdGlvbmFsaXR5Q29kZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIHN0YXRpYyBoYXNGb3JlaWduS2V5RGlzY3JpbWluYXRvcihlbnRpdHlJbmZvPzogRW50aXR5SW5mbyB8IG51bGwpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISFlbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lICYmICEhZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvckNsYXNzTmFtZTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgY2xhc3MgRW50aXR5UmVsYXRpb24ge1xyXG4gICAgZW50aXR5RnJvbTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgZW50aXR5VG86IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgIGxvZ0Nhc2NhZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGR1cGxpY2F0ZUNhc2NhZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGRlbGV0ZUJlaGF2aW91cjogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRW50aXR5SW5mb1dpdGhSZWxhdGlvbnMge1xyXG4gICAgZW50aXR5OiBFbnRpdHlJbmZvID0gbmV3IEVudGl0eUluZm8oKTtcclxuICAgIHJlbGF0aW9uczogRW50aXR5UmVsYXRpb25bXSA9IFtdO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVXBkYXRlRW50aXR5SW5mb1dpdGhSZWxhdGlvbnNSZXF1ZXN0IHtcclxuICAgIGNsYXNzTmFtZTogc3RyaW5nO1xyXG4gICAgZW50aXR5OiBFbnRpdHlJbmZvID0gbmV3IEVudGl0eUluZm8oKTtcclxuICAgIHJlbGF0aW9uczogRW50aXR5UmVsYXRpb25bXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGNsYXNzTmFtZTogc3RyaW5nLCBlbnRpdHk6IEVudGl0eUluZm8sIHJlbGF0aW9uczogRW50aXR5UmVsYXRpb25bXSkge1xyXG4gICAgICAgIHRoaXMuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xyXG4gICAgICAgIHRoaXMuZW50aXR5ID0gZW50aXR5O1xyXG4gICAgICAgIHRoaXMucmVsYXRpb25zID0gcmVsYXRpb25zO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRW50aXR5Q29sdW1uRGV0YWlsUmVzcG9uc2Uge1xyXG4gICAgbmFtZTogc3RyaW5nID0gJyc7XHJcbiAgICB0eXBlOiBzdHJpbmcgPSAnJztcclxuICAgIGlzTnVsbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIG1heExlbmd0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbn0iXX0=
@@ -24,4 +24,4 @@ export class WorkflowEtatKanbanMultipleRequest {
24
24
  this.uidObjets = [];
25
25
  }
26
26
  }
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvbW9kZWxzL3dvcmtmbG93L3dvcmtmbG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyw2QkFBNkI7SUFBMUM7UUFJSSx1QkFBa0IsR0FBdUIsRUFBRSxDQUFBO0lBQy9DLENBQUM7Q0FBQTtBQUVELE1BQU0sT0FBTyxnQkFBZ0I7Q0FPNUI7QUFFRCxNQUFNLE9BQU8scUNBQXFDO0NBTWpEO0FBRUQsTUFBTSxPQUFPLG1DQUFtQztDQU0vQztBQUVELE1BQU0sT0FBTywrQkFBK0I7Q0FPM0M7QUFFRCxNQUFNLE9BQU8sb0NBQW9DO0NBRWhEO0FBRUQsTUFBTSxPQUFPLDJCQUEyQjtDQU12QztBQUVELE1BQU0sT0FBTyxnQkFBZ0I7Q0FHNUI7QUFFRCxNQUFNLE9BQU8seUJBQXlCO0NBUXJDO0FBRUQsTUFBTSxPQUFPLGlDQUFpQztJQUE5QztRQUdFLGNBQVMsR0FBYSxFQUFFLENBQUM7SUFLM0IsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIHdvcmtmbG93RXRhdERldGFpbGxlZFJlc3BvbnNlIHtcclxuICAgIHdvcmtmbG93OiBzdHJpbmcgfCB1bmRlZmluZWRcclxuICAgIG5vbTogc3RyaW5nIHwgdW5kZWZpbmVkXHJcbiAgICB1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZFxyXG4gICAgd29ya2Zsb3dFdGF0c0Zvcm1zOiBXb3JrZmxvd0V0YXRGb3JtW10gPSBbXVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dFdGF0Rm9ybSB7XHJcbiAgICB1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZFxyXG4gICAgY29udHJvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxyXG4gICAgY29udHJvbEVuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWRcclxuICAgIGNvbnRyb2xWaXNpYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkXHJcbiAgICB3b3JrZmxvd0V0YXQ6IHN0cmluZyB8IHVuZGVmaW5lZFxyXG4gICAgd29ya2Zsb3dFdGF0TnVtYmVyOiBudW1iZXIgfCB1bmRlZmluZWRcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEdldFdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlcXVlc3Qge1xyXG4gICAgdWlkT2JqZXQ/OiBzdHJpbmc7XHJcbiAgICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgICBkaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lPzogc3RyaW5nO1xyXG4gICAgZGlzY3JpbWluYXRvckNsYXNzTmFtZT86IHN0cmluZztcclxuICAgIGRpc2NyaW1pbmF0b3JWYWx1ZT86IHN0cmluZ1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3Mgd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2V7XHJcbiAgd29ya2Zsb3dOYW1lIDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHdvcmtmbG93RXRhdCA6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICB3b3JrZmxvd0V0YXROYW1lIDogc3RyaW5nIHwgdW5kZWZpbmVkXHJcbiAgd29ya2Zsb3dVaWQgOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgd29ya2Zsb3dJbnN0YW5jZVVpZCA6IHN0cmluZyB8IHVuZGVmaW5lZFxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgdXBkYXRlRW50aXR5V29ya2Zsb3dJbmZvcm1hdGlvbntcclxuICBuZXdXb3JrZmxvd1N0YXR1cyA6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICB3b3JrZmxvd0luc3RhbmNlVWlkIDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIGNsYXNzTmFtZSA6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICB3b3JrZmxvdyA6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICB1aWRPYmplY3QgOiBzdHJpbmcgfCB1bmRlZmluZWRcclxuICB3b3JrZmxvd0V0YXQgOiBzdHJpbmcgfCB1bmRlZmluZWRcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIHVwZGF0ZUVudGl0eVdvcmtmbG93SW5zdGFuY2VSZXNwb25zZSB7XHJcbiAgc3RhdHVzID86IHN0cmluZ1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dFdGF0U3VpdmFudFJlc3BvbnNlIHtcclxuICB3b3JrZmxvd0V0YXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICB1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICB3b3JrZmxvd0V0YXRTdWl2YW50MTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIGNvbmRpdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIG5vbTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dSZXNwb25zZXtcclxuICB1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBub206IHN0cmluZyB8IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFdvcmtmbG93RXRhdEthbmJhblJlcXVlc3Qge1xyXG4gIGJ1c2luZXNzQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICB1aWRPYmpldDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgdW5kZWZpbmVkO1xyXG4gIGRpc2NyaW1pbmF0b3JDbGFzc05hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBkaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgZGlzY3JpbWluYXRvclZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgd29ya0Zsb3dFdGF0U3VpdmFudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHdvcmtGbG93RXRhdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dFdGF0S2FuYmFuTXVsdGlwbGVSZXF1ZXN0IHtcclxuICBidXNpbmVzc0NsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgd29ya0Zsb3dFdGF0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgdWlkT2JqZXRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIGRpc2NyaW1pbmF0b3JDbGFzc05hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBkaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgZGlzY3JpbWluYXRvclZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgd29ya0Zsb3dFdGF0U3VpdmFudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93RXRhdEthbmJhbk1vdmVGYWlsdXJlIHtcclxuICB1aWRPYmpldDogc3RyaW5nO1xyXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93RXRhdEthbmJhbk11bHRpcGxlUmVzcG9uc2Uge1xyXG4gIHRvdGFsOiBudW1iZXI7XHJcbiAgc3VjY2VlZGVkQ291bnQ6IG51bWJlcjtcclxuICBmYWlsZWRDb3VudDogbnVtYmVyO1xyXG4gIHN1Y2NlZWRlZDogc3RyaW5nW107XHJcbiAgZmFpbGVkOiBXb3JrZmxvd0V0YXRLYW5iYW5Nb3ZlRmFpbHVyZVtdO1xyXG59Il19
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvbW9kZWxzL3dvcmtmbG93L3dvcmtmbG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyw2QkFBNkI7SUFBMUM7UUFJSSx1QkFBa0IsR0FBdUIsRUFBRSxDQUFBO0lBQy9DLENBQUM7Q0FBQTtBQUVELE1BQU0sT0FBTyxnQkFBZ0I7Q0FPNUI7QUFFRCxNQUFNLE9BQU8scUNBQXFDO0NBTWpEO0FBRUQsTUFBTSxPQUFPLG1DQUFtQztDQU0vQztBQUVELE1BQU0sT0FBTywrQkFBK0I7Q0FPM0M7QUFFRCxNQUFNLE9BQU8sb0NBQW9DO0NBRWhEO0FBRUQsTUFBTSxPQUFPLDJCQUEyQjtDQU12QztBQUVELE1BQU0sT0FBTyxnQkFBZ0I7Q0FHNUI7QUFFRCxNQUFNLE9BQU8seUJBQXlCO0NBUXJDO0FBRUQsTUFBTSxPQUFPLGlDQUFpQztJQUE5QztRQUdFLGNBQVMsR0FBYSxFQUFFLENBQUM7SUFLM0IsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIHdvcmtmbG93RXRhdERldGFpbGxlZFJlc3BvbnNlIHtcclxuICAgIHdvcmtmbG93OiBzdHJpbmcgfCB1bmRlZmluZWRcclxuICAgIG5vbTogc3RyaW5nIHwgdW5kZWZpbmVkXHJcbiAgICB1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZFxyXG4gICAgd29ya2Zsb3dFdGF0c0Zvcm1zOiBXb3JrZmxvd0V0YXRGb3JtW10gPSBbXVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dFdGF0Rm9ybSB7XHJcbiAgICB1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZFxyXG4gICAgY29udHJvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxyXG4gICAgY29udHJvbEVuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWRcclxuICAgIGNvbnRyb2xWaXNpYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkXHJcbiAgICB3b3JrZmxvd0V0YXQ6IHN0cmluZyB8IHVuZGVmaW5lZFxyXG4gICAgd29ya2Zsb3dFdGF0TnVtYmVyOiBudW1iZXIgfCB1bmRlZmluZWRcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEdldFdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlcXVlc3Qge1xyXG4gICAgdWlkT2JqZXQ/OiBzdHJpbmc7XHJcbiAgICBjbGFzc05hbWU/OiBzdHJpbmc7XHJcbiAgICBkaXNjcmltaW5hdG9yQ2xhc3NQcm9wZXJ0eU5hbWU/OiBzdHJpbmc7XHJcbiAgICBkaXNjcmltaW5hdG9yQ2xhc3NOYW1lPzogc3RyaW5nO1xyXG4gICAgZGlzY3JpbWluYXRvclZhbHVlPzogc3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyB3b3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXNwb25zZXtcclxuICB3b3JrZmxvd05hbWUgOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgd29ya2Zsb3dFdGF0IDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHdvcmtmbG93RXRhdE5hbWUgOiBzdHJpbmcgfCB1bmRlZmluZWRcclxuICB3b3JrZmxvd1VpZCA6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICB3b3JrZmxvd0luc3RhbmNlVWlkIDogc3RyaW5nIHwgdW5kZWZpbmVkXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyB1cGRhdGVFbnRpdHlXb3JrZmxvd0luZm9ybWF0aW9ue1xyXG4gIG5ld1dvcmtmbG93U3RhdHVzIDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHdvcmtmbG93SW5zdGFuY2VVaWQgOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgY2xhc3NOYW1lIDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHdvcmtmbG93IDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHVpZE9iamVjdCA6IHN0cmluZyB8IHVuZGVmaW5lZFxyXG4gIHdvcmtmbG93RXRhdCA6IHN0cmluZyB8IHVuZGVmaW5lZFxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgdXBkYXRlRW50aXR5V29ya2Zsb3dJbnN0YW5jZVJlc3BvbnNlIHtcclxuICBzdGF0dXMgPzogc3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd0V0YXRTdWl2YW50UmVzcG9uc2Uge1xyXG4gIHdvcmtmbG93RXRhdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHVpZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHdvcmtmbG93RXRhdFN1aXZhbnQxOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgY29uZGl0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgbm9tOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd1Jlc3BvbnNle1xyXG4gIHVpZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIG5vbTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dFdGF0S2FuYmFuUmVxdWVzdCB7XHJcbiAgYnVzaW5lc3NDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHVpZE9iamV0OiBzdHJpbmcgfCB1bmRlZmluZWQgfCB1bmRlZmluZWQ7XHJcbiAgZGlzY3JpbWluYXRvckNsYXNzTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIGRpc2NyaW1pbmF0b3JDbGFzc1Byb3BlcnR5TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIGRpc2NyaW1pbmF0b3JWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHdvcmtGbG93RXRhdFN1aXZhbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICB3b3JrRmxvd0V0YXQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFdvcmtmbG93RXRhdEthbmJhbk11bHRpcGxlUmVxdWVzdCB7XHJcbiAgYnVzaW5lc3NDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHdvcmtGbG93RXRhdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHVpZE9iamV0czogc3RyaW5nW10gPSBbXTtcclxuICBkaXNjcmltaW5hdG9yQ2xhc3NOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgZGlzY3JpbWluYXRvckNsYXNzUHJvcGVydHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgZGlzY3JpbWluYXRvclZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgd29ya0Zsb3dFdGF0U3VpdmFudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93RXRhdEthbmJhbk1vdmVGYWlsdXJlIHtcclxuICB1aWRPYmpldDogc3RyaW5nO1xyXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93RXRhdEthbmJhbk11bHRpcGxlUmVzcG9uc2Uge1xyXG4gIHRvdGFsOiBudW1iZXI7XHJcbiAgc3VjY2VlZGVkQ291bnQ6IG51bWJlcjtcclxuICBmYWlsZWRDb3VudDogbnVtYmVyO1xyXG4gIHN1Y2NlZWRlZDogc3RyaW5nW107XHJcbiAgZmFpbGVkOiBXb3JrZmxvd0V0YXRLYW5iYW5Nb3ZlRmFpbHVyZVtdO1xyXG59Il19
@@ -2,7 +2,7 @@ import { Component, EventEmitter, inject, Input, Output, Renderer2, ViewChild, V
2
2
  import { firstValueFrom } from 'rxjs';
3
3
  import { LocalizationKeys } from '../../../consts';
4
4
  import { Component_Modes, FormValidationError, ModalSizeEnum, Modes } from '../../../enums';
5
- import { GetWorkflowInstanceInformationRequest, PresentationSetting, workflowInstanceInformationResponse } from '../../../models';
5
+ import { EntityInfo, GetWorkflowInstanceInformationRequest, PresentationSetting, workflowInstanceInformationResponse } from '../../../models';
6
6
  import { LocalizePipe } from '../../../pipes/localize.pipe';
7
7
  import { ErrorResponseManagerService, GenericValidationStateService, InputRegistryService, LayoutHelperService, PresentationDesignerService, PresentationSettingService, TsiNotificationService, WorkflowConfigurationService } from '../../../services';
8
8
  import { ColonnePersonnaliseeService } from '../../../services/dynamic-form/colonne-personnalisee.service';
@@ -63,7 +63,7 @@ export class TsiFormComponentBaseComponent extends AppBaseComponent {
63
63
  // this.form.descriminatorValue = result.propertyValue
64
64
  // if (this.entityInfo?.isWorkflow) {
65
65
  // await this.form.getWorkflowEntityInformation(this.businessClass, this.id, this.entityInfo?.discriminatorClassName,
66
- // this.entityInfo?.discriminatorPropertyName)
66
+ // this.entityInfo?.discriminatorClassPropertyName)
67
67
  // }
68
68
  // }
69
69
  // this.addInputs(this.presentationRequest, !this._layoutHelperService?.isDesignMode)
@@ -196,7 +196,7 @@ export class TsiFormComponentBaseComponent extends AppBaseComponent {
196
196
  if (this._workflowConfigurationService.isDesginModeFromWorkflow) {
197
197
  this.entityInfo = this._workflowConfigurationService.currentWorkflowEntityInfo;
198
198
  }
199
- if (!this.entityInfo?.discriminatorPropertyName && !this.entityInfo?.discriminatorClassName) {
199
+ if (!EntityInfo.hasForeignKeyDiscriminator(this.entityInfo)) {
200
200
  await this._ensureWorkflowDataReady();
201
201
  this.processSingleElement(data);
202
202
  }
@@ -217,7 +217,7 @@ export class TsiFormComponentBaseComponent extends AppBaseComponent {
217
217
  if (this._workflowConfigurationService.isDesginModeFromWorkflow) {
218
218
  this.entityInfo = this._workflowConfigurationService.currentWorkflowEntityInfo;
219
219
  }
220
- if (!this.entityInfo?.discriminatorPropertyName && !this.entityInfo?.discriminatorClassName) {
220
+ if (!EntityInfo.hasForeignKeyDiscriminator(this.entityInfo)) {
221
221
  await this._ensureWorkflowDataReady();
222
222
  this.processSingleElement(data);
223
223
  }
@@ -506,7 +506,7 @@ export class TsiFormComponentBaseComponent extends AppBaseComponent {
506
506
  request.className = this.businessClass;
507
507
  request.uidObjet = this.id;
508
508
  request.discriminatorClassName = this.entityInfo?.discriminatorClassName;
509
- request.discriminatorPropertyName = this.entityInfo?.discriminatorPropertyName;
509
+ request.discriminatorClassPropertyName = this.entityInfo?.discriminatorClassPropertyName;
510
510
  request.discriminatorValue = this.descriminatorValue;
511
511
  try {
512
512
  const response = await firstValueFrom(this._workflowConfigurationService.getCurrentEntityWorklfowInstanceInformation(request));
@@ -535,7 +535,7 @@ export class TsiFormComponentBaseComponent extends AppBaseComponent {
535
535
  // The entity is discriminated but the discriminator isn't known yet: the componentDescriminator setter applies the config later.
536
536
  _isAwaitingDescriminator() {
537
537
  return !this.descriminatorValue
538
- && !!(this.entityInfo?.discriminatorClassName || this.entityInfo?.discriminatorPropertyName);
538
+ && EntityInfo.hasForeignKeyDiscriminator(this.entityInfo);
539
539
  }
540
540
  //#endregion traiter multiple combo
541
541
  getWorkflowEtatForm() {
@@ -845,4 +845,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
845
845
  }], onSave: [{
846
846
  type: Output
847
847
  }] } });
848
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWZvcm0tYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWJhc2UvY29tcG9uZW50cy90c2ktZm9ybS1iYXNlL3RzaS1mb3JtLWJhc2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHak8sT0FBTyxFQUFFLGNBQWMsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBc0IsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhILE9BQU8sRUFBMEIscUNBQXFDLEVBQUUsbUJBQW1CLEVBQTZCLG1DQUFtQyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFckwsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSw2QkFBNkIsRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSwyQkFBMkIsRUFBRSwwQkFBMEIsRUFBRSxzQkFBc0IsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pQLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhEQUE4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SUFDM0UsQ0FBQzsrR0F2Z0NVLDZCQUE2QjttR0FBN0IsNkJBQTZCLDRXQWdGN0IsZ0JBQWdCLDhFQUdoQix1QkFBdUIsOERBRXBCLG9CQUFvQix1RUN0SHBDLGlDQUNBOzs0RkRnQ2EsNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLG1CQUFtQjt1SkFvRkEsSUFBSTtzQkFBaEMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBR1MsV0FBVztzQkFBOUMsU0FBUzt1QkFBQyx1QkFBdUI7Z0JBRUUsUUFBUTtzQkFBM0MsWUFBWTt1QkFBQyxvQkFBb0I7Z0JBdUJ6QixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFHRixJQUFJO3NCQURQLEtBQUs7Z0JBV0YsRUFBRTtzQkFETCxLQUFLO2dCQWFGLFNBQVM7c0JBRFosS0FBSztnQkFjRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFTTyxNQUFNO3NCQUFsQixLQUFLO2dCQU9PLGFBQWE7c0JBQXpCLEtBQUs7Z0JBc0NJLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyVmlld0NoZWNrZWQsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbktleXMgfSBmcm9tICcuLi8uLi8uLi9jb25zdHMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRfTW9kZXMsIEZvcm1WYWxpZGF0aW9uRXJyb3IsIEZvcm1WYWxpZGl0eVJlc3VsdCwgTW9kYWxTaXplRW51bSwgTW9kZXMgfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IENvbWJvU3RhdHVzTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RGVzY3JpbWluYXRvciwgR2V0V29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVxdWVzdCwgUHJlc2VudGF0aW9uU2V0dGluZywgUHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCwgd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2UgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBGb3JtU3RhdGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZm9ybS9mb3JtLXN0YXRlJztcclxuaW1wb3J0IHsgTG9jYWxpemVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvbG9jYWxpemUucGlwZSc7XHJcbmltcG9ydCB7IEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSwgR2VuZXJpY1ZhbGlkYXRpb25TdGF0ZVNlcnZpY2UsIElucHV0UmVnaXN0cnlTZXJ2aWNlLCBMYXlvdXRIZWxwZXJTZXJ2aWNlLCBQcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UsIFByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLCBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLCBXb3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBDb2xvbm5lUGVyc29ubmFsaXNlZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9keW5hbWljLWZvcm0vY29sb25uZS1wZXJzb25uYWxpc2VlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZm9ybS9mb3JtLXN0YXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tb2RhbC90c2ktbW9kYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IFByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wcmVzZW50YXRpb24tc2V0dGluZy9wcmVzZW50YXRpb24tZGVzaWduZXItYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvYnV0dG9uLWNvbXBvbmVudHMvdHNpLWJ1dHRvbi90c2ktYnV0dG9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVkaXRhYmxlR3JpZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL2lucHV0LWNvbXBvbmVudHMvZWRpdGFibGUtZ3JpZC9lZGl0YWJsZS1ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaUNoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvaW5wdXQtY29tcG9uZW50cy90c2ktY2hlY2tib3gvdHNpLWNoZWNrYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvb3V0cHV0LWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtZ3JpZC90c2ktZ2VuZXJpYy1ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaVZpZXdHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvb3V0cHV0LWNvbXBvbmVudHMvdHNpLXZpZXctZ3JpZC90c2ktdmlldy1ncmlkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRzaUZvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy90c2ktZm9ybS90c2ktZm9ybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lHZW5lcmljQ3J1ZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL3RzaS1nZW5lcmljLWNydWQvdHNpLWdlbmVyaWMtY3J1ZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lNb2RhbEZvb3RlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL3RzaS1tb2RhbC1mb290ZXIvdHNpLW1vZGFsLWZvb3Rlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSwgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlIH0gZnJvbSAnLi4vLi4vLi4vdHNpLWRpcmVjdGl2ZXMnO1xyXG5pbXBvcnQgeyBUeXBlUmVnaXN0cnlIZWxwZXIgfSBmcm9tICcuLi8uLi8uLi90c2ktaGVscGVycy90eXBlLXJlZ2lzdHJ5LmhlbHBlcic7XHJcbmltcG9ydCB7IFRzaUlucHV0QmFzZSB9IGZyb20gJy4uLy4uL3RzaS1pbnB1dC1iYXNlL3RzaS1pbnB1dC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9hcHAtYmFzZS9hcHAtYmFzZS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtdHNpLWZvcm0tYmFzZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RzaS1mb3JtLWJhc2UuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS1mb3JtLWJhc2UuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XHJcbiAgLy8jcmVnaW9uIHByb3BlcnRpZXNcclxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGZvcm1FbmRwb2ludCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHN1cGVyLmZvcm1FbmRwb2ludDtcclxuICB9O1xyXG4gIHByaXZhdGUgb3ZlcnJpZGUgc2V0IGZvcm1FbmRwb2ludChlbmRwb2ludDogc3RyaW5nKSB7XHJcbiAgICBzdXBlci5mb3JtRW5kcG9pbnQgPSBgJHtlbmRwb2ludH0vJHt0aGlzLmlkfWA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGJ1c2luZXNzQ2xhc3MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYnVzaW5lc3NDbGFzcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvdmVycmlkZSBzZXQgYnVzaW5lc3NDbGFzcyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9idXNpbmVzc0NsYXNzID0gdmFsdWU7XHJcbiAgICB0aGlzLmZvcm1FbmRwb2ludCA9IHRoaXMuYnVzaW5lc3NDbGFzcztcclxuICAgIHRoaXMuX2dlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlPy5sb2FkRW50aXR5VmFsaWRhdGlvbkluZm9zKHRoaXMuX2J1c2luZXNzQ2xhc3MpO1xyXG5cclxuICAgIGlmICh0aGlzLl9idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRoaXMuX2ZldGNoV29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29tcG9uZW50RGVzY3JpbWluYXRvcjogQ29tcG9uZW50RGVzY3JpbWluYXRvciB8IHVuZGVmaW5lZFxyXG4gIHByaXZhdGUgZGVzY3JpbWluYXRvclZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWRcclxuXHJcbiAgcHJvdGVjdGVkIHNldCBjb21wb25lbnREZXNjcmltaW5hdG9yKHZhbHVlOiBDb21wb25lbnREZXNjcmltaW5hdG9yIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9jb21wb25lbnREZXNjcmltaW5hdG9yID0gdmFsdWVcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wcm9wZXJ0eVZhbHVlKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgICB0aGlzLmZvcm0uZGVzY3JpbWluYXRvclZhbHVlID0gdmFsdWUucHJvcGVydHlWYWx1ZVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlID0gdmFsdWUucHJvcGVydHlWYWx1ZVxyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyh0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSxcclxuICAgICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG4gICAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAgIC4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpXHJcbiAgICAgIF07XHJcblxyXG4gICAgICB0aGlzLl9lbnN1cmVXb3JrZmxvd0RhdGFSZWFkeSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHMgPSBbLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKSxcclxuICAgICAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy5hZGRJbnB1dHModGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LCAhdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZT8uaXNEZXNpZ25Nb2RlKVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgLy8gdGhpcy5fcmVwb3J0aW5nU2VydmljZS5nZXRSZXBvcnREZWNyaW1pbmF0b3IocmVxKS5zdWJzY3JpYmUoe1xyXG4gICAgICAvLyAgIG5leHQ6IGFzeW5jIChyZXN1bHQpID0+IHtcclxuICAgICAgLy8gICAgIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlID0gcmVzdWx0LnByb3BlcnR5VmFsdWU7XHJcbiAgICAgIC8vICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyh0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG4gICAgICAvLyAgICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICAvLyAgICAgICB0aGlzLmZvcm0uZGVzY3JpbWluYXRvclZhbHVlID0gcmVzdWx0LnByb3BlcnR5VmFsdWVcclxuICAgICAgLy8gICAgICAgaWYgKHRoaXMuZW50aXR5SW5mbz8uaXNXb3JrZmxvdykge1xyXG4gICAgICAvLyAgICAgICAgIGF3YWl0IHRoaXMuZm9ybS5nZXRXb3JrZmxvd0VudGl0eUluZm9ybWF0aW9uKHRoaXMuYnVzaW5lc3NDbGFzcywgdGhpcy5pZCwgdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lLFxyXG4gICAgICAvLyAgICAgICAgICAgdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lKVxyXG4gICAgICAvLyAgICAgICB9XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgICB0aGlzLmFkZElucHV0cyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QsICF0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlPy5pc0Rlc2lnbk1vZGUpXHJcbiAgICAgIC8vICAgfSxcclxuICAgICAgLy8gICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgIC8vICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAvLyAgIH0sXHJcbiAgICAgIC8vIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgICB0aGlzLmZvcm0uZGVzY3JpbWluYXRvclZhbHVlID0gdW5kZWZpbmVkXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgY29tcG9uZW50RGVzY3JpbWluYXRvcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9jb21wb25lbnREZXNjcmltaW5hdG9yXHJcbiAgfVxyXG5cclxuXHJcbiAgQFZpZXdDaGlsZChUc2lGb3JtQ29tcG9uZW50KSBmb3JtPzogVHNpRm9ybUNvbXBvbmVudDtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoVHNpTW9kYWxGb290ZXJDb21wb25lbnQpIG1vZGFsRm9vdGVyPzogVHNpTW9kYWxGb290ZXJDb21wb25lbnQgfCBhbnk7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oVHNpQ2hlY2tib3hDb21wb25lbnQpIGNoZWNrYm94PzogQXJyYXk8VHNpQ2hlY2tib3hDb21wb25lbnQ+O1xyXG5cclxuICBmYXVsdHlJbnB1dHM6IEZvcm1WYWxpZGl0eVJlc3VsdFtdID0gW107XHJcbiAgaXNGb3JtVmFsaWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcbiAgcmVxdWlyZWRJbnB1dHM6IFRzaUlucHV0QmFzZVtdID0gW107XHJcbiAgLy8gQFZpZXdDaGlsZHJlbihFZGl0YWJsZUdyaWRDb21wb25lbnQpIGVkaXRhYmxlR3JpZENvbXBvbmVudHMhOiBRdWVyeUxpc3Q8RWRpdGFibGVHcmlkQ29tcG9uZW50PjtcclxuXHJcbiAgLy8gQFZpZXdDaGlsZHJlbihUc2lWaWV3R3JpZENvbXBvbmVudCkgdmlld0dyaWRzQ29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxUc2lWaWV3R3JpZENvbXBvbmVudD47XHJcbiAgLy8gQFZpZXdDaGlsZHJlbihUc2lHZW5lcmljR3JpZENvbXBvbmVudCkgZ2VuZXJpY0dyaWRzQ29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxUc2lHZW5lcmljR3JpZENvbXBvbmVudD47XHJcbiAgLy8gQFZpZXdDaGlsZHJlbihUc2lHZW5lcmljQ3J1ZENvbXBvbmVudCkgZ2VuZXJpY0NydWRzQ29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxUc2lHZW5lcmljQ3J1ZENvbXBvbmVudD47XHJcbiAgZWRpdGFibGVHcmlkQ29tcG9uZW50czogQXJyYXk8RWRpdGFibGVHcmlkQ29tcG9uZW50PiA9IFtdO1xyXG4gIHZpZXdHcmlkc0NvbXBvbmVudHM6IEFycmF5PFRzaVZpZXdHcmlkQ29tcG9uZW50PiA9IFtdO1xyXG4gIGdlbmVyaWNHcmlkc0NvbXBvbmVudHM6IEFycmF5PFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50PiA9IFtdO1xyXG4gIGdlbmVyaWNDcnVkc0NvbXBvbmVudHM6IEFycmF5PFRzaUdlbmVyaWNDcnVkQ29tcG9uZW50PiA9IFtdO1xyXG5cclxuXHJcbiAgZm9ybVJlZj86IE5nRm9ybTtcclxuICBpc0Zvcm1EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGN1ZENvbXBvbmVudDogYW55O1xyXG4gIHByaXZhdGUgX21vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIElucHV0c1xyXG4gIEBJbnB1dCgpIGl0ZW1EaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBhbGxvd1NhdmVXaXRob3V0Q2hhbmdlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBtb2RlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZTtcclxuICB9XHJcbiAgc2V0IG1vZGUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fbW9kZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgaWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9pZDtcclxuICB9XHJcbiAgc2V0IGlkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2lkID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRoaXMuX2ZldGNoV29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIF9pc2xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaXNsb2FkaW5nKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pc2xvYWRpbmcgPSB2YWx1ZTtcclxuICAgIGNvbnNvbGUubG9nKCdpc2xvYWRpbmcgc2V0IHRvJywgdmFsdWUpO1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnByb2Nlc3NEaXNhYmxlZElucHV0cyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpXHJcbiAgICAgIH0sIDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzbG9hZGluZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc2xvYWRpbmc7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGhlYWRlcj86IHN0cmluZztcclxuICBASW5wdXQoKSBzYXZpbmcgPSBmYWxzZTtcclxuICBASW5wdXQoKSBpdGVtOiBhbnk7XHJcblxyXG4gIHByaXZhdGUgX3N0YXR1cz86IHN0cmluZyA9ICcnO1xyXG4gIHByaXZhdGUgX2FsbG93ZWRTdGF0dXM/OiBzdHJpbmdbXTtcclxuXHJcbiAgZ2V0IHN0YXR1cygpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBzdGF0dXModmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fc3RhdHVzID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5mb3JtICYmIHRoaXMuZm9ybS5zdGF0dXMgIT09IHRoaXMuX3N0YXR1cykge1xyXG4gICAgICB0aGlzLmZvcm0uc3RhdHVzID0gdGhpcy5fc3RhdHVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IGFsbG93ZWRTdGF0dXModmFsdWU6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgdGhpcy5fYWxsb3dlZFN0YXR1cyA9IHZhbHVlO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcm0gJiYgdGhpcy5mb3JtLmFsbG93ZWRTdGF0dXMgIT09IHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5hbGxvd2VkU3RhdHVzID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYWxsb3dlZFN0YXR1cygpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dlZFN0YXR1cztcclxuICB9XHJcblxyXG4gIC8vYnNNb2RhbFJlZj86IGFueTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKVxyXG4gIHByaXZhdGUgX3JlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMilcclxuICBwcml2YXRlIF9sYXlvdXRIZWxwZXJTZXJ2aWNlID0gaW5qZWN0KExheW91dEhlbHBlclNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSA9IGluamVjdChXb3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlKVxyXG4gIHByaXZhdGUgX3dvcmtmbG93TW9kYWxTZXJ2aWNlID0gaW5qZWN0KFRzaU1vZGFsU2VydmljZSlcclxuICBwcml2YXRlIF9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZSA9IGluamVjdChQcmVzZW50YXRpb25TZXR0aW5nU2VydmljZSlcclxuICBwcml2YXRlIF9tZXNzYWdlSW5mb1NlcnZpY2UgPSBpbmplY3QoVHNpTm90aWZpY2F0aW9uU2VydmljZSlcclxuICBwcml2YXRlIF9lcnJvclJlc3BvbnNlTWFuYWdlciA9IGluamVjdChFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlID0gaW5qZWN0KFByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZSlcclxuICBwcml2YXRlIF9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlID0gaW5qZWN0KFByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UpXHJcbiAgcHVibGljIGxvY2FsaXplPyA9IGluamVjdChMb2NhbGl6ZVBpcGUpXHJcbiAgcHVibGljIF9pbnB1dFJlZ2lzdHJ5ID0gaW5qZWN0KElucHV0UmVnaXN0cnlTZXJ2aWNlKVxyXG4gIHByaXZhdGUgX2Zvcm1TdGF0ZVNlcnZpY2UgPSBpbmplY3QoRm9ybVN0YXRlU2VydmljZSlcclxuICBwcml2YXRlIF9jb2xvbm5lUGVyc29ubmFsaXNlZVNlcnZpY2UgPSBpbmplY3QoQ29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlKVxyXG4gIHByaXZhdGUgZGlyZWN0aXZlRWxlbWVudHM6IChQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSB8IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSlbXSA9IFtdO1xyXG4gIHByaXZhdGUgZGVzaWduTW9kZUFjdGl2ZSA9IGZhbHNlO1xyXG4gIHByZXNlbnRhdGlvblJlcXVlc3Q6IFByZXNlbnRhdGlvblNldHRpbmcgPSBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcbiAgX2Rlc2lnbk1vZGVGb3JtU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcbiAgX3NhdmVXb3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWRcclxuICBfYWRkZWREaXJlY3RpdmVTdWJzY3JpdHBpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZFxyXG4gIF9hZGRlZERpcmVjdGl2ZUJhc2VTdWJzY3JpdHBpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZFxyXG4gIC8vI3JlZ2lvbiBPdXRwdXRzXHJcbiAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBwcml2YXRlIF9nZW5lcmljVmFsaWRhdGlvblN0YXRlU2VydmljZT86IEdlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlID0gaW5qZWN0KEdlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcmVmPzogRHluYW1pY0RpYWxvZ1JlZixcclxuICAgIHB1YmxpYyBjb25maWc/OiBEeW5hbWljRGlhbG9nQ29uZmlnLFxyXG4gICAgcHVibGljIG92ZXJyaWRlIGNkUmVmPzogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHN1cGVyKGNkUmVmKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHdvcmtmbG93SW5mb3JtYXRpb24/OiB3b3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXNwb25zZVxyXG4gIGN1c3RvbURhdGE/OiBhbnlcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgIHRoaXMuX2luaXRNb2RhbFJlZigpO1xyXG4gICAgdGhpcy5pbml0TW9kYWxEYXRhKCk7XHJcbiAgICB0aGlzLl9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbiA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5hZGRlZERpcmVjdGl2ZU9ic2VydmFibGVcclxuICAgICAgLnN1YnNjcmliZShhc3luYyBkYXRhID0+IHtcclxuICAgICAgICBpZiAoZGF0YS50cmVhdGVkKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRlc2lnbk1vZGVBY3RpdmUgJiYgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUgJiYgIXRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTaW5nbGVFbGVtZW50SW5EZXNpZ25Nb2RlKGRhdGEpXHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHlJbmZvID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5jdXJyZW50V29ya2Zsb3dFbnRpdHlJbmZvXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvclByb3BlcnR5TmFtZSAmJiAhdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9lbnN1cmVXb3JrZmxvd0RhdGFSZWFkeSgpXHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTaW5nbGVFbGVtZW50KGRhdGEpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9lbnN1cmVXb3JrZmxvd0RhdGFSZWFkeSgpXHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTaW5nbGVFbGVtZW50KGRhdGEpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgIHRoaXMuX2FkZGVkRGlyZWN0aXZlQmFzZVN1YnNjcml0cGlvbiA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UuYWRkZWREaXJlY3RpdmVPYnNlcnZhYmxlXHJcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgZGF0YSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEudHJlYXRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kZXNpZ25Nb2RlQWN0aXZlICYmIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuaXNEZXNpZ25Nb2RlICYmICF0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICAgICAgdGhpcy5wcm9jZXNzU2luZ2xlRWxlbWVudEluRGVzaWduTW9kZShkYXRhKVxyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgICAgIHRoaXMuZW50aXR5SW5mbyA9IHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuY3VycmVudFdvcmtmbG93RW50aXR5SW5mb1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWUgJiYgIXRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvckNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fZW5zdXJlV29ya2Zsb3dEYXRhUmVhZHkoKVxyXG4gICAgICAgICAgdGhpcy5wcm9jZXNzU2luZ2xlRWxlbWVudChkYXRhKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fZW5zdXJlV29ya2Zsb3dEYXRhUmVhZHkoKVxyXG4gICAgICAgICAgdGhpcy5wcm9jZXNzU2luZ2xlRWxlbWVudChkYXRhKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICB0aGlzLl9kZXNpZ25Nb2RlRm9ybVN1YnNjcmlwdGlvbiA9IHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuX2Rlc2lnbk1vZGVGb3JtU3ViamVjdC5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIGlmIChkYXRhICYmIGRhdGEgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMudG9nZ2xlRGVzaWduTW9kZSgpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB0b2dnbGVEZXNpZ25Nb2RlKCkge1xyXG4gICAgdGhpcy5yZW1vdmVUc2lNb2RhbEZvb3RlcigpXHJcbiAgICB0aGlzLmNyZWF0ZVNhdmVCdXR0b24oKTtcclxuXHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyh0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSwgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLmRlc2lnbk1vZGVBY3RpdmUgPSB0cnVlXHJcblxyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaChpbnB1dCA9PiB7XHJcbiAgICAgIGlucHV0Lmluc2VydEVsZW1lbnQoKTtcclxuICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUpIHtcclxuICAgICAgICBpbnB1dC5zZWxlY3RBcHByb3JpYXRlQ29sdW1ucyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpO1xyXG4gICAgICB9XHJcbiAgICAgIGlucHV0LmFkZENoZWNrYm94ZXNUb0lucHV0cyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKVxyXG4gICAgdGhpcy51bnN1YnNjcmliZUZyb21BY3RpdmVTdWJzY3JpdHBpb24oKVxyXG4gICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cyA9IFsuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLFxyXG4gICAgLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5nZXREaXJlY3RpdmVzKClcclxuICAgIF07XHJcbiAgICBjb25zb2xlLmxvZyhcImNvdW50IG9mIGRpcmVjdGl2ZUVsZW1lbnRzID0+IFwiLCB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzLmxlbmd0aClcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2U/LmlzRGVzaWduTW9kZVxyXG4gICAgICAmJiAhdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgLy8gdGhpcy5yZW1vdmVUc2lNb2RhbEZvb3RlcigpXHJcbiAgICAgIC8vIHRoaXMuY3JlYXRlU2F2ZUJ1dHRvbigpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICAgIHRoaXMuZW50aXR5SW5mbyA9IHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuY3VycmVudFdvcmtmbG93RW50aXR5SW5mb1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGVsc2Uge1xyXG4gICAgICAvLyAgIHRoaXMuZW50aXR5SW5mbyA9IGF3YWl0IHRoaXMuX2VudGl0eUNvbmZpZ1NlcnZpY2UuZ2V0RW50aXR5SW5mb0Zyb21DYWNoZSh0aGlzLmJ1c2luZXNzQ2xhc3MpXHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICAvL2luaXQgZ2VuZXJpY0NydWQgcmVwb3J0aW5nXHJcbiAgICBpZiAodGhpcy5mb3JtKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5mb3JtUmVmQ2hhbmdlLnN1YnNjcmliZShmID0+IHtcclxuICAgICAgICBpZiAoZikge1xyXG4gICAgICAgICAgdGhpcy5mb3JtUmVmID0gZjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmZvcm0uaWQgPSB0aGlzLmlkO1xyXG4gICAgICB0aGlzLmZvcm0ubW9kZSA9IHRoaXMubW9kZVxyXG4gICAgICB0aGlzLmZvcm0uZm9ybUVuZHBvaW50ID0gdGhpcy5mb3JtRW5kcG9pbnQ7XHJcbiAgICAgIHRoaXMuZm9ybS5mb3JtTmFtZSA9IHRoaXMuZm9ybU5hbWU7XHJcbiAgICAgIHRoaXMuZm9ybS5idXNpbmVzc0NsYXNzID0gdGhpcy5fYnVzaW5lc3NDbGFzc1xyXG4gICAgICB0aGlzLmZvcm0uZGlzYWJsZWQgPSB0aGlzLmlzRm9ybURpc2FibGVkO1xyXG5cclxuICAgICAgdGhpcy5mb3JtLmFsbG93ZWRTdGF0dXMgPSB0aGlzLl9hbGxvd2VkU3RhdHVzO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmZvcm0uaXNEZXNjcmltaW5hdG9yVmFsdWVTZXQpIHtcclxuICAgICAgICB0aGlzLmZvcm0uZGVzY3JpbWluYXRvclZhbHVlID0gdGhpcy5kZXNjcmltaW5hdG9yVmFsdWVcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gd29ya2Zsb3cgZm9ybSBkZXNpZ25cclxuICAgICAgdGhpcy5fc2F2ZVdvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLmZvcm0ub25TdWJtaXRGb3JtV29ya2Zsb3dDb25maWd1cmF0aW9uLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICBsZXQgd29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvbiA9IHRoaXMuZ2V0Rm9ybVdvcmZrbG93UHJlc2VudGF0aW9uU2V0dGluZygpO1xyXG4gICAgICAgIHRoaXMuaGlkZSh3b3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uKVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5mb3JtLm9uU3RhdHVzQ2hhbmdlLnN1YnNjcmliZSgobmV3VmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RhdHVzID0gbmV3VmFsdWU7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5mb3JtLm9wZW5Xb3JrZmxvdy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vcGVuV29ya2Zsb3coKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZSA9PSBDb21wb25lbnRfTW9kZXMuQ1JFQVRFKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoZWNrYm94KSB7XHJcbiAgICAgICAgdGhpcy5jaGVja2JveC5mb3JFYWNoKGJveCA9PiB7XHJcbiAgICAgICAgICBib3guaW5wdXRGaWVsZCA9IGZhbHNlO1xyXG4gICAgICAgICAgYm94LmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdFRzaUdyaWRzUmVmKCkge1xyXG4gICAgdGhpcy52aWV3R3JpZHNDb21wb25lbnRzID0gdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldFZpZXdHcmlkcygpXHJcbiAgICB0aGlzLmdlbmVyaWNHcmlkc0NvbXBvbmVudHMgPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0R2VuZXJpY0dyaWRzKClcclxuICAgIHRoaXMuZWRpdGFibGVHcmlkQ29tcG9uZW50cyA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXRFZGl0YWJsZUdyaWRzKClcclxuICAgIHRoaXMuZ2VuZXJpY0NydWRzQ29tcG9uZW50cyA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXRHZW5lcmljQ3J1ZHMoKVxyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybVdvcmZrbG93UHJlc2VudGF0aW9uU2V0dGluZygpIHtcclxuICAgIGxldCBwcmVzZW50YXRpb25SZXF1ZXN0ID0gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG5cclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHMgPSBbLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKSxcclxuICAgIC4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpXHJcbiAgICBdO1xyXG5cclxuICAgIGxldCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsczogUHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbFtdID0gW11cclxuICAgIGxldCBhdmFpbGFibGVEaXJlY3RpdmVFbGVtZW50cyA9IHRoaXMuZGlyZWN0aXZlRWxlbWVudHMuZmlsdGVyKHggPT5cclxuICAgICAgISh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLnNvbWUoeSA9PlxyXG4gICAgICAgIHkuYmxvY2tOYW1lID09PSB4LnByZXNlbnRhdGlvbkRlc2lnbmVyICYmICF5LmlzQmxvY2tWaXNpYmxlXHJcbiAgICAgICkpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5pdFRzaUdyaWRzUmVmKClcclxuXHJcbiAgICBhdmFpbGFibGVEaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaCgoZGlyZWN0aXZlKSA9PiB7XHJcblxyXG4gICAgICBsZXQgY29uZmlndXJhdGlvbiA9IHVuZGVmaW5lZFxyXG5cclxuXHJcbiAgICAgIGxldCBncmlkU3RhdGUgPSBbXHJcbiAgICAgICAgLi4udGhpcy52aWV3R3JpZHNDb21wb25lbnRzLFxyXG4gICAgICAgIC4uLnRoaXMuZ2VuZXJpY0dyaWRzQ29tcG9uZW50cyxcclxuICAgICAgICAuLi50aGlzLmdlbmVyaWNDcnVkc0NvbXBvbmVudHMsXHJcbiAgICAgICAgLi4udGhpcy5lZGl0YWJsZUdyaWRDb21wb25lbnRzXHJcbiAgICAgIF1cclxuICAgICAgICAuZmluZCh4ID0+IHguaWQgPT09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lciB8fCAoJ2Zvcm1OYW1lJyBpbiB4ICYmIHguZm9ybU5hbWUgPT09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcikpXHJcbiAgICAgICAgPy5nZXRTdGF0ZSgpO1xyXG5cclxuICAgICAgY29uZmlndXJhdGlvbiA9IGdyaWRTdGF0ZSA/IEpTT04uc3RyaW5naWZ5KGdyaWRTdGF0ZSkgOiB1bmRlZmluZWQ7XHJcblxyXG5cclxuICAgICAgbGV0IG9iamVjdDogUHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9IHtcclxuICAgICAgICBibG9ja05hbWU6IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcixcclxuICAgICAgICBpc0Jsb2NrVmlzaWJsZTogIWRpcmVjdGl2ZS5zaG93SGlkZUNoZWNrYm94Q29tcG9uZW50UmVmPy5pbnN0YW5jZT8uX2NoZWNrZWQsXHJcbiAgICAgICAgdWlkOiB0aGlzLmdldFByZXNlbnRhdGlvblNldGluZ0RldGFpbFVpZChkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIgPz8gXCJcIiksXHJcbiAgICAgICAgY29uZmlndXJhdGlvbjogY29uZmlndXJhdGlvbixcclxuICAgICAgICBpc0lucHV0RW5hYmxlZDogIWRpcmVjdGl2ZS5kaXNhYmxlZENoZWNrYm94Q29tcG9uZW50UmVmPy5pbnN0YW5jZT8uX2NoZWNrZWRcclxuICAgICAgfVxyXG4gICAgICBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5wdXNoKG9iamVjdClcclxuICAgIH0pXHJcblxyXG4gICAgcHJlc2VudGF0aW9uUmVxdWVzdC5jb21wb25lbnRJZGVudGlmZXIgPSB0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKTtcclxuICAgIHByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMgPSBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsc1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFwicHJlc2VudGF0aW9uUmVxdWVzdCA9PiBcIiwgcHJlc2VudGF0aW9uUmVxdWVzdClcclxuICAgIHJldHVybiBwcmVzZW50YXRpb25SZXF1ZXN0XHJcbiAgfVxyXG5cclxuXHJcbiAgaXNEZWxldGVNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PSBDb21wb25lbnRfTW9kZXMuREVMRVRFO1xyXG4gIH1cclxuICBpc1N1Ym1pdERpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgLy9yZXR1cm4gIXRoaXMuZm9ybVJlZj8uZm9ybT8udmFsaWQgfHwgdGhpcy5zYXZpbmc7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGlzQ29uc3VsdE1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5DT05TVUxUO1xyXG4gIH1cclxuXHJcbiAgaXNEdXBsaWNhdGVNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PSBDb21wb25lbnRfTW9kZXMuRFVQTElDQVRFO1xyXG4gIH1cclxuICBpc0VkaXRNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PSBDb21wb25lbnRfTW9kZXMuRURJVDtcclxuICB9XHJcbiAgLy8jcmVnaW9uIHByaXZhdGUgbWV0aG9kc1xyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpbml0TW9kYWxEYXRhKCkge1xyXG4gICAgc3VwZXIuaW5pdE1vZGFsRGF0YSgpXHJcbiAgICBpZiAodGhpcy5vcGVuZWREaWFsb2dSZWYgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLm9wZW5lZERpYWxvZ1JlZiAhPSB1bmRlZmluZWRcclxuICAgICAgJiYgdGhpcy5vcGVuZWREaWFsb2dDb25maWcgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZyAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgLy9jaGVjayBoYXZlIG9wZW5lZERpYWxvZ0NvbmZpZ1xyXG4gICAgICBpZiAodGhpcy5vcGVuZWREaWFsb2dDb25maWcuZGF0YSAhPSBudWxsICYmIHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnLmRhdGEgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5jdWRDb21wb25lbnQgPSB0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZy5kYXRhLmN1ZENvbXBvbmVudDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdmVyaWZ5TW9kYWxEYXRhKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMub3BlbmVkRGlhbG9nUmVmICE9IG51bGxcclxuICAgICAgJiYgdGhpcy5vcGVuZWREaWFsb2dSZWYgIT0gdW5kZWZpbmVkXHJcbiAgICAgICYmIHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnICE9IG51bGxcclxuICAgICAgJiYgdGhpcy5vcGVuZWREaWFsb2dDb25maWcgIT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdE1vZGFsUmVmKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3ZlcmlmeU1vZGFsRGF0YSgpKSB7XHJcbiAgICAgIC8vdGhpcy5ic01vZGFsUmVmID0ge2hpZGU6ICgpID0+IHRoaXMub3BlbmVkRGlhbG9nUmVmLmRlc3Ryb3koKSxjbG9zZTogKHZhbDogYW55KT0+e3RoaXMub3BlbmVkRGlhbG9nUmVmLmNsb3NlKHZhbCl9fVxyXG4gICAgfVxyXG4gIH1cclxuICAvL1xyXG4gIGwoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMubG9jYWxpemUgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLmxvY2FsaXplICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oa2V5KTtcclxuICAgIH1cclxuICAgIHJldHVybiBrZXk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gdHJhaXRlciBtdWx0aXBsZSBjb21ib1xyXG4gIGFsbENvbWJvTG9hZGluZ1N0YXR1czogQXJyYXk8Q29tYm9TdGF0dXNNb2RlbD4gPSBbXTtcclxuICBhcmVBbGxDb21ib0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByb2Nlc3NDb21ib0luaXRFdmVudChjb21ib1N0YXR1czogQ29tYm9TdGF0dXNNb2RlbCkge1xyXG4gICAgaWYgKCF0aGlzLmFsbENvbWJvTG9hZGluZ1N0YXR1cy5maW5kKHUgPT4gdS51aWQgPT0gY29tYm9TdGF0dXMudWlkKSlcclxuICAgICAgdGhpcy5hbGxDb21ib0xvYWRpbmdTdGF0dXMucHVzaChjb21ib1N0YXR1cyk7XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzQ29tYm9Jc0xvYWRlZEV2ZW50KGNvbWJvU3RhdHVzOiBDb21ib1N0YXR1c01vZGVsKSB7XHJcbiAgICBsZXQgY29tYm9TID0gdGhpcy5hbGxDb21ib0xvYWRpbmdTdGF0dXMuZmluZCh1ID0+IHUudWlkID09IGNvbWJvU3RhdHVzLnVpZCk7XHJcbiAgICBpZiAoY29tYm9TICE9IG51bGwgJiYgY29tYm9TICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb21ib1MuaXNEYXRhTG9hZGVkID0gY29tYm9TdGF0dXMuaXNEYXRhTG9hZGVkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hcmVBbGxDb21ib0xvYWRlZEZuKCk7XHJcbiAgfVxyXG5cclxuICBhcmVBbGxDb21ib0xvYWRlZEZuKCk6IHZvaWQge1xyXG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuYWxsQ29tYm9Mb2FkaW5nU3RhdHVzLmxlbmd0aCA+IDApXHJcbiAgICAgIHRoaXMuYWxsQ29tYm9Mb2FkaW5nU3RhdHVzLmZvckVhY2godSA9PiB7XHJcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmIHUuaXNEYXRhTG9hZGVkO1xyXG4gICAgICB9KTtcclxuICAgIGVsc2UgcmVzdWx0ID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5hcmVBbGxDb21ib0xvYWRlZCA9IHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIG5ldyBtb2RhbCBoYW5kbGluZyBtZXRob2QgKHJlc29sdmVGaWNoZSkgaW5zdGVhZC5cclxuICogVGhpcyBtZXRob2QgZGlyZWN0bHkgbWFuaXB1bGF0ZXMgdGhlIGRpYWxvZyByZWZlcmVuY2UgYW5kIG1heSBsZWFkIHRvIGluY29uc2lzdGVudCBiZWhhdmlvci5cclxuICovXHJcblxyXG4gIGhpZGUodmFsPzogYW55KSB7XHJcbiAgICBpZiAodGhpcy5vcGVuZWREaWFsb2dSZWYgIT0gbnVsbCAmJiB0aGlzLm9wZW5lZERpYWxvZ1JlZiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHZhbCA9PSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMub3BlbmVkRGlhbG9nUmVmLmRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLm9wZW5lZERpYWxvZ1JlZi5jbG9zZSh2YWwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtYXJrSW5wdXRBc0RpcnR5KGlucHV0TmFtZT86IHN0cmluZykge1xyXG4gICAgdGhpcy5faW5wdXRSZWdpc3RyeS5tYXJrSW5wdXRBc0RpcnR5KGlucHV0TmFtZSlcclxuICB9XHJcblxyXG4gIHJlc29sdmVGaWNoZSh2YWw/OiBhbnksIGFwaVJlc3BvbnNlPzogYW55KSB7XHJcbiAgICB0aGlzLl9pbnB1dFJlZ2lzdHJ5LnJlc2V0RGlydHlTdGF0dXNGb3JBbGxJbnB1dHMoKTtcclxuXHJcbiAgICBjb25zdCBpc0NyZWF0ZU9yRHVwbGljYXRlID1cclxuICAgICAgdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5DUkVBVEUgfHxcclxuICAgICAgdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5EVVBMSUNBVEU7XHJcblxyXG4gICAgY29uc3QgaXNFZGl0YWJsZU1vZGUgPVxyXG4gICAgICBpc0NyZWF0ZU9yRHVwbGljYXRlIHx8IHRoaXMubW9kZSA9PSBDb21wb25lbnRfTW9kZXMuRURJVDtcclxuXHJcbiAgICAvLyBXaGljaCByZWNvcmQgd2FzIGp1c3Qgc2F2ZWQ6IG9uIGNyZWF0ZS9kdXBsaWNhdGUgdGhlIHJlc3BvbnNlIGNhcnJpZXMgdGhlIE5FVyB1aWQsIGFuZFxyXG4gICAgLy8gYHRoaXMuaWRgIGlzIHN0aWxsIG51bGwgKGNyZWF0ZSkgb3IgdGhlIFNPVVJDRSByZWNvcmQgKGR1cGxpY2F0ZSkuIE9uIGVkaXQgdGhlIHVwZGF0ZSBjYWxsXHJcbiAgICAvLyByZXR1cm5zIG5vIGJvZHksIHNvIGB0aGlzLmlkYCDigJQgZmlsbGVkIGZyb20gdGhlIGRpYWxvZyBjb25maWcg4oCUIGlzIHRoZSBvbmx5IHNvdXJjZS5cclxuICAgIGNvbnN0IHNhdmVkT2NjdXJyZW5jZSA9IGFwaVJlc3BvbnNlPy51aWQgPz8gdGhpcy5pZDtcclxuXHJcbiAgICBpZiAoaXNFZGl0YWJsZU1vZGUgJiYgc2F2ZWRPY2N1cnJlbmNlKSB7XHJcbiAgICAgIHRoaXMuX2Zvcm1TdGF0ZVNlcnZpY2UuZGF0YVNhdmVkJC5uZXh0KHNhdmVkT2NjdXJyZW5jZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzQ3JlYXRlT3JEdXBsaWNhdGUgJiYgYXBpUmVzcG9uc2U/LnVpZCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuaWQgPSBhcGlSZXNwb25zZS51aWQ7XHJcbiAgICAgIHRoaXMubW9kZSA9IENvbXBvbmVudF9Nb2Rlcy5FRElUO1xyXG5cclxuICAgICAgdGhpcy5jZFJlZj8uZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5pZCA9IHRoaXMuaWQ7XHJcbiAgICAgICAgdGhpcy5mb3JtLm1vZGUgPSB0aGlzLm1vZGU7XHJcbiAgICAgICAgdGhpcy5mb3JtLmZvcm1FbmRwb2ludCA9IHRoaXMuZm9ybUVuZHBvaW50O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybSkge1xyXG4gICAgICB0aGlzLmZvcm0uZmV0Y2hBbmRBcHBseVRyYW5zaXRpb25zKHRoaXMuZm9ybS5zdGF0dXMpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVmcmVzaExpc3QgPSBpc0VkaXRhYmxlTW9kZSB8fCB0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkRFTEVURTtcclxuICAgIGlmICh0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZykge1xyXG4gICAgICB0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZy5kYXRhID8/PSB7fTtcclxuICAgICAgdGhpcy5vcGVuZWREaWFsb2dDb25maWcuZGF0YS5yZWZyZXNoTGlzdCA9IHJlZnJlc2hMaXN0O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fZm9ybVN0YXRlU2VydmljZS5jbG9zZU1vZGFsKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5oaWRlKGFwaVJlc3BvbnNlKVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb3BlbldvcmtmbG93KCkge1xyXG4gICAgaWYgKCF0aGlzLmVudGl0eUluZm8/LmlzV29ya2Zsb3cpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZUluZm9TZXJ2aWNlLmVycm9yKCd0c2lfZm9ybV9lbnRpdHlfbm90X21hcmtlZF9hc193b3JrZmxvdycpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGVzY3JpbWluYXRvciA9IHRoaXMuZm9ybT8uaWdub3JlRGVzY3JpbWluYXRvciA/IHVuZGVmaW5lZCA6IHRoaXMuZGVzY3JpbWluYXRvclZhbHVlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgbWF0Y2ggPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFdvcmtmbG93QnlDbGFzc2VBbmREZXNjcmltaW5hdG9yKHRoaXMuYnVzaW5lc3NDbGFzcywgZGVzY3JpbWluYXRvcilcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSBtYXRjaFxyXG4gICAgICAgID8geyBkYXRhOiB7IG1vZGU6IE1vZGVzLmVkaXQsIGlkOiBtYXRjaC51aWQgfSxcclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICcnLCB3aWR0aDogTW9kYWxTaXplRW51bS5FeHRyYUxhcmdlLndpZHRoLCBoZWlnaHQ6IE1vZGFsU2l6ZUVudW0uRXh0cmFMYXJnZS5oZWlnaHQsIG1heGltaXphYmxlOiB0cnVlIH1cclxuICAgICAgICA6IHsgZGF0YTogeyBtb2RlOiBNb2Rlcy5jcmVhdGUsIGN1c3RvbURhdGE6IHsgd29ya2Zsb3c6e2NsYXNzZTogdGhpcy5idXNpbmVzc0NsYXNzLCBkZXNjcmltaW5hdG9yVmFsdWU6IGRlc2NyaW1pbmF0b3J9IH0gfSxcclxuICAgICAgICBzdHlsZUNsYXNzOiAnJywgd2lkdGg6IE1vZGFsU2l6ZUVudW0uRXh0cmFMYXJnZS53aWR0aCwgaGVpZ2h0OiBNb2RhbFNpemVFbnVtLkV4dHJhTGFyZ2UuaGVpZ2h0LCBtYXhpbWl6YWJsZTogdHJ1ZSB9O1xyXG5cclxuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fd29ya2Zsb3dNb2RhbFNlcnZpY2Uub3BlbihUeXBlUmVnaXN0cnlIZWxwZXIuZ2V0VHlwZSgnQ3JlYXRlT3JFZGl0V29ya2Zsb3dzQ29tcG9uZW50JyksIGNvbmYpO1xyXG4gICAgICBkaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fZmV0Y2hXb3JrZmxvd0VudGl0eUluZm9ybWF0aW9uKCkpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB3aGVuIGdldHRpbmcgd29ya2Zsb3cgaW5mb3JtYXRpb25cIiwgZXJyb3IpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF93b3JrZmxvd0VudGl0eUluZm9ybWF0aW9uUHJvbWlzZT86IFByb21pc2U8dm9pZD5cclxuXHJcbiAgcHJpdmF0ZSBfZmV0Y2hXb3JrZmxvd0VudGl0eUluZm9ybWF0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmJ1c2luZXNzQ2xhc3MpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIGlmICghdGhpcy5fd29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvblByb21pc2UpIHtcclxuICAgICAgdGhpcy5fd29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvblByb21pc2UgPSB0aGlzLl9mZXRjaFdvcmtmbG93RW50aXR5SW5mb3JtYXRpb25Db3JlKClcclxuICAgICAgICAuZmluYWxseSgoKSA9PiB7IHRoaXMuX3dvcmtmbG93RW50aXR5SW5mb3JtYXRpb25Qcm9taXNlID0gdW5kZWZpbmVkIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX3dvcmtmbG93RW50aXR5SW5mb3JtYXRpb25Qcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfZmV0Y2hXb3JrZmxvd0VudGl0eUluZm9ybWF0aW9uQ29yZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuZ2V0RW50aXR5SW5mb3JtYXRpb24odGhpcy5idXNpbmVzc0NsYXNzISk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzQXdhaXRpbmdEZXNjcmltaW5hdG9yKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXF1ZXN0OiBHZXRXb3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXF1ZXN0ID0gbmV3IEdldFdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlcXVlc3QoKTtcclxuICAgIHJlcXVlc3QuY2xhc3NOYW1lID0gdGhpcy5idXNpbmVzc0NsYXNzXHJcbiAgICByZXF1ZXN0LnVpZE9iamV0ID0gdGhpcy5pZDtcclxuICAgIHJlcXVlc3QuZGlzY3JpbWluYXRvckNsYXNzTmFtZSA9IHRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvckNsYXNzTmFtZVxyXG4gICAgcmVxdWVzdC5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lID0gdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yUHJvcGVydHlOYW1lXHJcbiAgICByZXF1ZXN0LmRpc2NyaW1pbmF0b3JWYWx1ZSA9IHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRFbnRpdHlXb3JrbGZvd0luc3RhbmNlSW5mb3JtYXRpb24ocmVxdWVzdCkpO1xyXG4gICAgICB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24gPSByZXNwb25zZVxyXG4gICAgICBpZiAodGhpcy5mb3JtKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLndvcmtmbG93SW5mb3JtYXRpb24gPSByZXNwb25zZSA/PyBuZXcgd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2UoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAgIC4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpXHJcbiAgICAgIF07XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igd2hpbGUgZ2V0dGluZyB3b3JrZmxvd0luZm9ybWF0aW9uXCIsIGVycm9yKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfZW5zdXJlV29ya2Zsb3dEYXRhUmVhZHkoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykgcmV0dXJuO1xyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFdvcmtmbG93RXRhdEZvcm1Gb3JDbGFzc0Zyb21DYWNoZSh0aGlzLmJ1c2luZXNzQ2xhc3MsIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKS5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHdoaWxlIGdldHRpbmcgd29ya2Zsb3cgZXRhdCBmb3JtIGNvbmZpZ3VyYXRpb25cIiwgZXJyb3IpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fZmV0Y2hXb3JrZmxvd0VudGl0eUluZm9ybWF0aW9uKClcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgLy8gVGhlIGVudGl0eSBpcyBkaXNjcmltaW5hdGVkIGJ1dCB0aGUgZGlzY3JpbWluYXRvciBpc24ndCBrbm93biB5ZXQ6IHRoZSBjb21wb25lbnREZXNjcmltaW5hdG9yIHNldHRlciBhcHBsaWVzIHRoZSBjb25maWcgbGF0ZXIuXHJcbiAgcHJpdmF0ZSBfaXNBd2FpdGluZ0Rlc2NyaW1pbmF0b3IoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIXRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgICYmICEhKHRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvckNsYXNzTmFtZSB8fCB0aGlzLmVudGl0eUluZm8/LmRpc2NyaW1pbmF0b3JQcm9wZXJ0eU5hbWUpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvLyNlbmRyZWdpb24gdHJhaXRlciBtdWx0aXBsZSBjb21ib1xyXG5cclxuICBnZXRXb3JrZmxvd0V0YXRGb3JtKCkge1xyXG4gICAgbGV0IHdvcmtmbG93RXRhdEZvcm0gPSB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFdvcmtmbG93RXRhdEZvcm1Gcm9tQ2FjaGVTeW5jKHRoaXMuYnVzaW5lc3NDbGFzcywgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpXHJcbiAgICAgID8uZmluZCh4ID0+IHgudWlkID09IHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvbj8ud29ya2Zsb3dFdGF0KVxyXG5cclxuICAgIGlmICh3b3JrZmxvd0V0YXRGb3JtKSB7XHJcbiAgICAgIGxldCB3b3JrZmxvd0V0YXQgPSB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLm1hcFdvcmtmbG93RXRhdEZvcm1Ub1ByZXNlbnRhdGlvblNldHRpbmcoXHJcbiAgICAgICAgd29ya2Zsb3dFdGF0Rm9ybT8ud29ya2Zsb3dFdGF0c0Zvcm1zXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gd29ya2Zsb3dFdGF0XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIFByZXNlbnRhdGlvbiBTZXR0aW5nc1xyXG4gIGFkZElucHV0cyhcclxuICAgIHByZXNlbnRhdGlvblJlcXVlc3Q6IFByZXNlbnRhdGlvblNldHRpbmcsXHJcbiAgICBhcHBseUdyaWRDb25maWc6IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgd29ya2Zsb3dFdGF0PzogUHJlc2VudGF0aW9uU2V0dGluZyxcclxuICAgIGRpcmVjdGl2ZUVsZW1lbnRzOiAoUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUgfCBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZUJhc2UpW10gPSB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzXHJcbiAgKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKCghd29ya2Zsb3dFdGF0IHx8IHdvcmtmbG93RXRhdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5sZW5ndGggPT0gMClcclxuICAgICAgJiYgdGhpcy53b3JrZmxvd0luZm9ybWF0aW9uXHJcbiAgICAgICYmIHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvbj8ud29ya2Zsb3dFdGF0XHJcbiAgICAgICYmICF0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICB3b3JrZmxvd0V0YXQgPSB0aGlzLmdldFdvcmtmbG93RXRhdEZvcm0oKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGhhc1ByZXNlbnRhdGlvblJlcXVlc3QgPSBwcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8ubGVuZ3RoID4gMDtcclxuXHJcblxyXG4gICAgaWYgKGhhc1ByZXNlbnRhdGlvblJlcXVlc3QpIHtcclxuICAgICAgZGlyZWN0aXZlRWxlbWVudHMgPSBkaXJlY3RpdmVFbGVtZW50cy5maWx0ZXIoeCA9PlxyXG4gICAgICAgIHByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LnNvbWUoXHJcbiAgICAgICAgICB5ID0+IHkuYmxvY2tOYW1lID09PSB4LnByZXNlbnRhdGlvbkRlc2lnbmVyICYmICh5LmlzQmxvY2tWaXNpYmxlID09IHVuZGVmaW5lZCB8fCB5LmlzQmxvY2tWaXNpYmxlID09IHRydWUpXHJcbiAgICAgICAgICAgICYmIHgudHJlYXRlZCA9PSBmYWxzZVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaChkaXJlY3RpdmUgPT4ge1xyXG5cclxuICAgICAgY29uc3QgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9IHByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMuZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcilcclxuXHJcbiAgICAgIGlmIChwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID09IHVuZGVmaW5lZCB8fCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsLmlzQmxvY2tWaXNpYmxlKSB7XHJcblxyXG4gICAgICAgIGxldCB3b3Jma2Zsb3dFdGF0Rm9ybSA9IHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93ID8gdW5kZWZpbmVkIDogdGhpcy5nZXRXb3JrZmxvd0V0YXRGb3JtKCk7XHJcblxyXG4gICAgICAgIGlmICh3b3Jma2Zsb3dFdGF0Rm9ybSkge1xyXG4gICAgICAgICAgbGV0IHdvcmtmbG93Q29uZmlnID0gd29yZmtmbG93RXRhdEZvcm0ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMuZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcilcclxuXHJcbiAgICAgICAgICBpZiAoIXdvcmtmbG93Q29uZmlnKSB7XHJcbiAgICAgICAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh3b3JrZmxvd0NvbmZpZyAmJiB3b3JrZmxvd0NvbmZpZy5pc0Jsb2NrVmlzaWJsZSAmJiAod29ya2Zsb3dDb25maWcuaXNJbnB1dEVuYWJsZWQgPT0gdW5kZWZpbmVkIHx8IHdvcmtmbG93Q29uZmlnLmlzSW5wdXRFbmFibGVkID09IHRydWUpKSB7XHJcbiAgICAgICAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh3b3JrZmxvd0NvbmZpZyAmJiB3b3JrZmxvd0NvbmZpZy5pc0Jsb2NrVmlzaWJsZSAmJiB3b3JrZmxvd0NvbmZpZy5pc0lucHV0RW5hYmxlZCA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBkaXJlY3RpdmUuZGlzYWJsZUlucHV0cygpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgZGlyZWN0aXZlLmV4ZWN1dGUodHJ1ZSwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbD8uY29uZmlndXJhdGlvbilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICAgICAgZGlyZWN0aXZlLmFkZENoZWNrYm94ZXNUb0lucHV0cyh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLndvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gTW9kZXMuY3JlYXRlKSB7XHJcbiAgICAgIHRoaXMucHJvY2Vzc0Rpc2FibGVkSW5wdXRzKHByZXNlbnRhdGlvblJlcXVlc3QsIGRpcmVjdGl2ZUVsZW1lbnRzKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFbXB0eUFuY2VzdG9yc0Zyb21FbGVtZW50cygpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBwcm9jZXNzRGlzYWJsZWRJbnB1dHMocHJlc2VudGF0aW9uUmVxdWVzdDogUHJlc2VudGF0aW9uU2V0dGluZywgZGlyZWN0aXZlRWxlbWVudHM6IChQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSB8IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSlbXSA9IHRoaXMuZGlyZWN0aXZlRWxlbWVudHMpIHtcclxuICAgIGlmICh0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlPy5pc0Rlc2lnbk1vZGUgfHwgdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjb25zdCBoYXNQcmVzZW50YXRpb25SZXF1ZXN0ID0gcHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/Lmxlbmd0aCA+IDA7XHJcblxyXG4gICAgaWYgKGhhc1ByZXNlbnRhdGlvblJlcXVlc3QpIHtcclxuICAgICAgZGlyZWN0aXZlRWxlbWVudHMgPSBkaXJlY3RpdmVFbGVtZW50cy5maWx0ZXIoeCA9PlxyXG4gICAgICAgIHByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LnNvbWUoXHJcbiAgICAgICAgICB5ID0+IHkuYmxvY2tOYW1lID09PSB4LnByZXNlbnRhdGlvbkRlc2lnbmVyICYmIHkuaXNCbG9ja1Zpc2libGVcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGNvbnN0IHdvcmZrZmxvd0V0YXRGb3JtID0gdGhpcy5nZXRXb3JrZmxvd0V0YXRGb3JtKClcclxuICAgIGRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKGRpcmVjdGl2ZSA9PiB7XHJcblxyXG4gICAgICBsZXQgd29ya2Zsb3dDb25maWcgPSB3b3Jma2Zsb3dFdGF0Rm9ybT8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMuZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcilcclxuXHJcbiAgICAgIGlmICh3b3JrZmxvd0NvbmZpZyAmJiAhd29ya2Zsb3dDb25maWcuaXNJbnB1dEVuYWJsZWQgJiYgKHdvcmtmbG93Q29uZmlnLmlzQmxvY2tWaXNpYmxlID8/IHRydWUpKSB7XHJcbiAgICAgICAgZGlyZWN0aXZlLmRpc2FibGVJbnB1dHMoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRW1wdHlBbmNlc3RvcnNGcm9tRWxlbWVudHMoKSB7XHJcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKS5mb3JFYWNoKHMgPT4gcy5yZW1vdmVFbXB0eUFuY2VzdG9ycyhzPy50ZW1wVGVtcGxhdGVQYXJlbnROb2RlKSlcclxuICAgIC8vIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJlc2VudGF0aW9uU2V0aW5nRGV0YWlsVWlkKGJsb2NrTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGJsb2NrTmFtZSk/LnVpZFxyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpIHtcclxuICAgIC8vIGlmICh0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkge1xyXG4gICAgLy8gICByZXR1cm4gYCR7dGhpcy5fbXlOYW1lKCl9XyR7dGhpcy5kZXNjcmltaW5hdG9yVmFsdWV9YFxyXG4gICAgLy8gfVxyXG4gICAgcmV0dXJuIHRoaXMuX215TmFtZSgpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhdmVQcm9wZXJ0aWVzKCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuaW5pdFRzaUdyaWRzUmVmKClcclxuXHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyh0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSwgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuXHJcbiAgICBpZiAoIXRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCkge1xyXG4gICAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzOiBQcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsW10gPSBbXVxyXG5cclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xyXG5cclxuICAgICAgbGV0IGNvbmZpZ3VyYXRpb24gPSB1bmRlZmluZWRcclxuXHJcblxyXG4gICAgICBsZXQgZ3JpZFN0YXRlID0gW1xyXG4gICAgICAgIC4uLnRoaXMudmlld0dyaWRzQ29tcG9uZW50cyxcclxuICAgICAgICAuLi50aGlzLmdlbmVyaWNHcmlkc0NvbXBvbmVudHMsXHJcbiAgICAgICAgLi4udGhpcy5nZW5lcmljQ3J1ZHNDb21wb25lbnRzLFxyXG4gICAgICAgIC4uLnRoaXMuZWRpdGFibGVHcmlkQ29tcG9uZW50c1xyXG4gICAgICBdXHJcbiAgICAgICAgLmZpbmQoeCA9PiB4LmlkID09PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIgfHwgKCdmb3JtTmFtZScgaW4geCAmJiB4LmZvcm1OYW1lID09PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpKVxyXG4gICAgICAgID8uZ2V0U3RhdGUoKTtcclxuXHJcbiAgICAgIGNvbmZpZ3VyYXRpb24gPSBncmlkU3RhdGUgPyBKU09OLnN0cmluZ2lmeShncmlkU3RhdGUpIDogdW5kZWZpbmVkO1xyXG5cclxuXHJcbiAgICAgIGxldCBvYmplY3Q6IFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPSB7XHJcbiAgICAgICAgYmxvY2tOYW1lOiBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIsXHJcbiAgICAgICAgaXNCbG9ja1Zpc2libGU6ICFkaXJlY3RpdmUuc2hvd0hpZGVDaGVja2JveENvbXBvbmVudFJlZj8uaW5zdGFuY2U/Ll9jaGVja2VkLFxyXG4gICAgICAgIHVpZDogdGhpcy5nZXRQcmVzZW50YXRpb25TZXRpbmdEZXRhaWxVaWQoZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyID8/IFwiXCIpLFxyXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ3VyYXRpb25cclxuICAgICAgfVxyXG4gICAgICBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5wdXNoKG9iamVjdClcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LmNvbXBvbmVudElkZW50aWZlciA9IHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpO1xyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMgPSBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsc1xyXG5cclxuICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZVxyXG5cclxuICAgIGlmICh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QudWlkICE9IG51bGwgJiYgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnVpZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UudXBkYXRlUHJlc2VudGF0aW9uU2V0dGluZyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QsIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC51aWQpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiBhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NBZnRlclNhdmVDb25maWd1cmF0aW9uKClcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxyXG4gICAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlci5zaG93RXJyb3JNZXNzYWdlKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmNyZWF0ZVByZXNlbnRhdGlvblNldHRpbmcodGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzQWZ0ZXJTYXZlQ29uZmlndXJhdGlvbigpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcilcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXIuc2hvd0Vycm9yTWVzc2FnZShlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2Nlc3NTaW5nbGVFbGVtZW50KGRpcmVjdGl2ZTogUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUgfCBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZUJhc2UpIHtcclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9IHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpLCB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG4gICAgbGV0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPSB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5maW5kKHggPT4geC5ibG9ja05hbWUgPT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyKVxyXG5cclxuXHJcbiAgICBpZiAocHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9PSB1bmRlZmluZWQgfHwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbC5pc0Jsb2NrVmlzaWJsZSkge1xyXG5cclxuICAgICAgbGV0IHdvcmZrZmxvd0V0YXRGb3JtID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cgPyB1bmRlZmluZWQgOiB0aGlzLmdldFdvcmtmbG93RXRhdEZvcm0oKTtcclxuXHJcbiAgICAgIGlmICh3b3Jma2Zsb3dFdGF0Rm9ybSkge1xyXG4gICAgICAgIGxldCB3b3JrZmxvd0NvbmZpZyA9IHdvcmZrZmxvd0V0YXRGb3JtLnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmZpbmQoeCA9PiB4LmJsb2NrTmFtZSA9PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpXHJcblxyXG4gICAgICAgIGlmICghd29ya2Zsb3dDb25maWcpIHtcclxuICAgICAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHdvcmtmbG93Q29uZmlnICYmIHdvcmtmbG93Q29uZmlnLmlzQmxvY2tWaXNpYmxlICYmICh3b3JrZmxvd0NvbmZpZy5pc0lucHV0RW5hYmxlZCA9PSB1bmRlZmluZWQgfHwgd29ya2Zsb3dDb25maWcuaXNJbnB1dEVuYWJsZWQgPT0gdHJ1ZSkpIHtcclxuICAgICAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHdvcmtmbG93Q29uZmlnICYmIHdvcmtmbG93Q29uZmlnLmlzQmxvY2tWaXNpYmxlICYmIHdvcmtmbG93Q29uZmlnLmlzSW5wdXRFbmFibGVkID09IGZhbHNlKSB7XHJcbiAgICAgICAgICBkaXJlY3RpdmUuZGlzYWJsZUlucHV0cygpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICAgIGRpcmVjdGl2ZS5hZGRDaGVja2JveGVzVG9JbnB1dHModGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS53b3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uKVxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIC8vIERpcmVjdGl2ZXMgcmVnaXN0ZXJpbmcgd2hpbGUgZGVzaWduIG1vZGUgaXMgYWN0aXZlIChjb250ZW50IGZpcnN0IHJlbmRlcmVkXHJcbiAgLy8gZHVyaW5nIGNvbmZpZ3VyYXRpb24sIGUuZy4gcGFuZWxzIG9mIGEgbmVzdGVkIHRhYiB2aWV3KSBtaXNzZWQgdGhlXHJcbiAgLy8gdG9nZ2xlRGVzaWduTW9kZSgpIHBhc3M6IGRlY29yYXRlIHRoZW0gdGhlIHNhbWUgd2F5IGFuZCBhZGQgdGhlbSB0b1xyXG4gIC8vIGRpcmVjdGl2ZUVsZW1lbnRzIHNvIHNhdmVQcm9wZXJ0aWVzKCkga2VlcHMgYSBkZXRhaWwgZm9yIHRoZW0uXHJcbiAgcHJvY2Vzc1NpbmdsZUVsZW1lbnRJbkRlc2lnbk1vZGUoZGlyZWN0aXZlOiBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSB8IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSkge1xyXG4gICAgaWYgKHRoaXMuZGlyZWN0aXZlRWxlbWVudHMuaW5jbHVkZXMoZGlyZWN0aXZlKSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzLnB1c2goZGlyZWN0aXZlKVxyXG5cclxuICAgIGRpcmVjdGl2ZS5pbnNlcnRFbGVtZW50KClcclxuICAgIGlmIChkaXJlY3RpdmUgaW5zdGFuY2VvZiBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSkge1xyXG4gICAgICBkaXJlY3RpdmUuc2VsZWN0QXBwcm9yaWF0ZUNvbHVtbnModGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0KVxyXG4gICAgfVxyXG4gICAgZGlyZWN0aXZlLmFkZENoZWNrYm94ZXNUb0lucHV0cyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpXHJcbiAgfVxyXG5cclxuICB1bnN1YnNjcmliZUZyb21BY3RpdmVTdWJzY3JpdHBpb24oKSB7XHJcbiAgICBpZiAodGhpcy5fZGVzaWduTW9kZUZvcm1TdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5fZGVzaWduTW9kZUZvcm1TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9zYXZlV29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvblN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLl9zYXZlV29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2FkZGVkRGlyZWN0aXZlU3Vic2NyaXRwaW9uKSB7XHJcbiAgICAgIHRoaXMuX2FkZGVkRGlyZWN0aXZlU3Vic2NyaXRwaW9uLnVuc3Vic2NyaWJlKClcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fYWRkZWREaXJlY3RpdmVCYXNlU3Vic2NyaXRwaW9uKSB7XHJcbiAgICAgIHRoaXMuX2FkZGVkRGlyZWN0aXZlQmFzZVN1YnNjcml0cGlvbi51bnN1YnNjcmliZSgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVUc2lNb2RhbEZvb3RlcigpIHtcclxuICAgIGNvbnN0IHRzaU1vZGFsRm9vdGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInRzaS1tb2RhbC1mb290ZXJcIilcclxuXHJcbiAgICBpZiAodHNpTW9kYWxGb290ZXIgJiYgdHNpTW9kYWxGb290ZXIubGFzdENoaWxkKSB7XHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyPy5yZW1vdmVDaGlsZCh0c2lNb2RhbEZvb3RlciwgdHNpTW9kYWxGb290ZXIubGFzdENoaWxkKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlU2F2ZUJ1dHRvbigpIHtcclxuICAgIGNvbnN0IHRzaUJ1dHRvblJlZiA9IHRoaXMuX3ZpZXdDb250YWluZXJSZWY/LmNyZWF0ZUNvbXBvbmVudChUc2lCdXR0b25Db21wb25lbnQpO1xyXG4gICAgdHNpQnV0dG9uUmVmPy5zZXRJbnB1dCgndGV4dCcsICdzaGFyZWRfdHNpX2NvbXBvbmVudF9zYXZlX2NvbmZpZ19zaG93X2hpZGUnKTtcclxuICAgIHRzaUJ1dHRvblJlZj8uc2V0SW5wdXQoJ2ljb24nLCAnc2F2ZScpO1xyXG5cclxuICAgIHRzaUJ1dHRvblJlZiEuaW5zdGFuY2Uub25DbGljay5lbWl0ID0gKCkgPT4gdGhpcy5zYXZlUHJvcGVydGllcygpO1xyXG5cclxuICAgIGNvbnN0IHRzaUZvcm0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwidHNpLWZvcm1cIilcclxuXHJcbiAgICBpZiAodHNpRm9ybSkge1xyXG4gICAgICB0aGlzLl9yZW5kZXJlcj8uYXBwZW5kQ2hpbGQodHNpRm9ybSwgdHNpQnV0dG9uUmVmPy5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHByb2Nlc3NBZnRlclNhdmVDb25maWd1cmF0aW9uKCkge1xyXG4gICAgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZVxyXG4gICAgdGhpcy5oaWRlKClcclxuICAgIHRoaXMuX21lc3NhZ2VJbmZvU2VydmljZS5zdWNjZXNzKExvY2FsaXphdGlvbktleXMuc2F2ZWRTdWNjZXNzZnVsbHkpXHJcbiAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSA9IGZhbHNlXHJcbiAgICB0aGlzLmRlc2lnbk1vZGVBY3RpdmUgPSBmYWxzZVxyXG4gICAgLy8gdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5jdXJyZW50Rm9ybU5hbWUgPSB1bmRlZmluZWRcclxuICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuX2Rlc2lnbk1vZGVGb3JtU3ViamVjdC5uZXh0KGZhbHNlKVxyXG4gICAgYXdhaXQgdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UubG9hZFByZXNlbnRhdGlvblNldHRpbmdzKCk7XHJcbiAgfVxyXG5cclxuICBzYXZlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gQ29tcG9uZW50X01vZGVzLkVESVQgJiYgIXRoaXMuX2lucHV0UmVnaXN0cnkuaGFzQW55RGlydHlJbnB1dCgpICYmICF0aGlzLmFsbG93U2F2ZVdpdGhvdXRDaGFuZ2VzKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VJbmZvU2VydmljZS53YXJuKExvY2FsaXphdGlvbktleXMubm9DaGFuZ2VzRGV0ZWN0ZWQpO1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNoYW5nZXMgZGV0ZWN0ZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICB0aGlzLnJlcXVpcmVkSW5wdXRzID0gdGhpcy5faW5wdXRSZWdpc3RyeS5nZXRBbGwoKS5maWx0ZXIoaW5wID0+IGlucC5pc1JlcXVpcmVkICYmIGlucC5kaXNhYmxlZCA9PT0gZmFsc2UpO1xyXG4gICAgdGhpcy5mYXVsdHlJbnB1dHMgPSBbXTtcclxuICAgIHRoaXMuaXNGb3JtVmFsaWQgPSB0aGlzLnJlcXVpcmVkSW5wdXRzLmV2ZXJ5KGlucHV0ID0+IGlucHV0LmlzVmFsaWQoKS5pc1ZhbGlkID09PSB0cnVlKVxyXG5cclxuICAgIHRoaXMucmVxdWlyZWRJbnB1dHMuZm9yRWFjaChpbnB1dCA9PiB7XHJcbiAgICAgIGxldCBmdnIgPSBpbnB1dC5pc1ZhbGlkKCk7XHJcbiAgICAgIGlmIChmdnIuaXNWYWxpZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLmZhdWx0eUlucHV0cy5wdXNoKGZ2cilcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBpZiAodGhpcy5pc0Zvcm1WYWxpZCA9PT0gZmFsc2UgJiYgdGhpcy5mYXVsdHlJbnB1dHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmZhdWx0eUlucHV0cylcclxuICAgICAgbGV0IGZhdWx0eUlucHV0c05hbWVzID0gXCJcIjtcclxuICAgICAgdGhpcy5mYXVsdHlJbnB1dHMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuZmF1bHR5SW5wdXRzLmxlbmd0aCAtIDEpXHJcbiAgICAgICAgICBmYXVsdHlJbnB1dHNOYW1lcyArPSBgJHtpdGVtLmlucHV0TmFtZX0uIGBcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBmYXVsdHlJbnB1dHNOYW1lcyArPSBgJHtpdGVtLmlucHV0TmFtZX0sIGBcclxuICAgICAgfSlcclxuICAgICAgZmF1bHR5SW5wdXRzTmFtZXMgPSBmYXVsdHlJbnB1dHNOYW1lcy5yZXBsYWNlKC8sJC8sICcnKTtcclxuICAgICAgaWYgKHRoaXMuZmF1bHR5SW5wdXRzLnNvbWUoZmkgPT4gZmkuZXJyb3IgPT09IEZvcm1WYWxpZGF0aW9uRXJyb3IuUmVxdWlyZWQpKSB7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZUluZm9TZXJ2aWNlLndhcm4oZmF1bHR5SW5wdXRzTmFtZXMsIHRoaXMubG9jYWxpemU/LnRyYW5zZm9ybSgndHNpX2Zvcm1fYmFzZV9hdXRvX3ZhbGlkYXRpb25fcmVxdWlyZWRfZmllbGRfdGl0bGUnKSlcclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBgTGVzIGNoYW1wcyAke2ZhdWx0eUlucHV0c05hbWVzfSBzb250IG9ibGlnYXRvaXJlLmA7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5mYXVsdHlJbnB1dHMuc29tZShmaSA9PiBmaS5lcnJvciA9PT0gRm9ybVZhbGlkYXRpb25FcnJvci5NYXhMZW5ndGgpKSB7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZUluZm9TZXJ2aWNlLndhcm4oYFxyXG4gICAgICAgICAgJHt0aGlzLmxvY2FsaXplPy50cmFuc2Zvcm0oJ3RzaV9mb3JtX2Jhc2VfYXV0b192YWxpZGF0aW9uX3RoZV9maWVsZCcpfVxyXG4gICAgICAgICAgJHt0aGlzLmZhdWx0eUlucHV0c1swXS5pbnB1dE5hbWV9IFxyXG4gICAgICAgICAgJHt0aGlzLmxvY2FsaXplPy50cmFuc2Zvcm0oJ3RzaV9mb3JtX2Jhc2VfYXV0b192YWxpZGF0aW9uX21heF9sZW5ndGgnKX1cclxuICAgICAgICAgICR7dGhpcy5mYXVsdHlJbnB1dHNbMF0uZGF0YX0gJHt0aGlzLmxvY2FsaXplPy50cmFuc2Zvcm0oJ3RzaV9mb3JtX2Jhc2VfYXV0b192YWxpZGF0aW9uX21heF9sZW5ndGhfY2hhcnMnKX1gLFxyXG4gICAgICAgICAgdGhpcy5sb2NhbGl6ZT8udHJhbnNmb3JtKCd0c2lfZm9ybV9iYXNlX2F1dG9fdmFsaWRhdGlvbl9tYXhfbGVuZ3RoX2ZpZWxkX3RpdGxlJykpXHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYExlIGNoYW1wICR7dGhpcy5mYXVsdHlJbnB1dHNbMF0uaW5wdXROYW1lfSBuZSBkb2l0IHBhcyBkw6lwYXNzZXIgJHt0aGlzLmZhdWx0eUlucHV0c1swXS5kYXRhfSBjYXJhY3TDqHJlcy5gO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuZmF1bHR5SW5wdXRzLnNvbWUoZmkgPT4gZmkuZXJyb3IgPT09IEZvcm1WYWxpZGF0aW9uRXJyb3IuT3V0T2ZSYW5nZSkpIHtcclxuICAgICAgICAvL3RvIGRvXHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYExlIGNoYW1wICR7dGhpcy5mYXVsdHlJbnB1dHNbMF0uaW5wdXROYW1lfSBkb2l0IMOqdHJlIGRhbnMgbCdpbnRlcnZhbGxlLmA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudXBkYXRlRm9ybVN0YXRlKHsgaXNWYWxpZDogZmFsc2UsIGlzU3VibWl0dGVkOiB0cnVlIH0pO1xyXG5cclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVGb3JtU3RhdGUoeyBpc1ZhbGlkOiB0cnVlLCBpc1N1Ym1pdHRlZDogdHJ1ZSB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybVN0YXRlKGZvcm1TdGF0ZTogRm9ybVN0YXRlKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuX2dlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fZ2VuZXJpY1ZhbGlkYXRpb25TdGF0ZVNlcnZpY2UudXBkYXRlRm9ybVN0YXRlKGZvcm1TdGF0ZSk7XHJcblxyXG4gICAgdGhpcy5lZGl0YWJsZUdyaWRDb21wb25lbnRzID0gdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldEVkaXRhYmxlR3JpZHMoKTtcclxuICAgIHRoaXMuZWRpdGFibGVHcmlkQ29tcG9uZW50cy5mb3JFYWNoKChlKSA9PiBlLnVwZGF0ZUZvcm1TdGF0ZShmb3JtU3RhdGUpKTtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG59XHJcbiIsIjxwPnRzaS1mb3JtLWJhc2Ugd29ya3MhPC9wPlxyXG4iXX0=
848
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWZvcm0tYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWJhc2UvY29tcG9uZW50cy90c2ktZm9ybS1iYXNlL3RzaS1mb3JtLWJhc2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHak8sT0FBTyxFQUFFLGNBQWMsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBc0IsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhILE9BQU8sRUFBMEIsVUFBVSxFQUFFLHFDQUFxQyxFQUFFLG1CQUFtQixFQUE2QixtQ0FBbUMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpNLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsNkJBQTZCLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6UCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUs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QUVwQixvQkFBb0IsdUVDdEhwQyxpQ0FDQTs7NEZEZ0NhLDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSxtQkFBbUI7dUpBb0ZBLElBQUk7c0JBQWhDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUdTLFdBQVc7c0JBQTlDLFNBQVM7dUJBQUMsdUJBQXVCO2dCQUVFLFFBQVE7c0JBQTNDLFlBQVk7dUJBQUMsb0JBQW9CO2dCQXVCekIsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBR0YsSUFBSTtzQkFEUCxLQUFLO2dCQVdGLEVBQUU7c0JBREwsS0FBSztnQkFhRixTQUFTO3NCQURaLEtBQUs7Z0JBY0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBU08sTUFBTTtzQkFBbEIsS0FBSztnQkFPTyxhQUFhO3NCQUF6QixLQUFLO2dCQXNDSSxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRDaGVja2VkLCBBZnRlclZpZXdDaGVja2VkLCBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFJlbmRlcmVyMiwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25LZXlzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50X01vZGVzLCBGb3JtVmFsaWRhdGlvbkVycm9yLCBGb3JtVmFsaWRpdHlSZXN1bHQsIE1vZGFsU2l6ZUVudW0sIE1vZGVzIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBDb21ib1N0YXR1c01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudERlc2NyaW1pbmF0b3IsIEVudGl0eUluZm8sIEdldFdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlcXVlc3QsIFByZXNlbnRhdGlvblNldHRpbmcsIFByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwsIHdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRm9ybVN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0vZm9ybS1zdGF0ZSc7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL2xvY2FsaXplLnBpcGUnO1xyXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsIEdlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlLCBJbnB1dFJlZ2lzdHJ5U2VydmljZSwgTGF5b3V0SGVscGVyU2VydmljZSwgUHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLCBQcmVzZW50YXRpb25TZXR0aW5nU2VydmljZSwgVHNpTm90aWZpY2F0aW9uU2VydmljZSwgV29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgQ29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZHluYW1pYy1mb3JtL2NvbG9ubmUtcGVyc29ubmFsaXNlZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybVN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0vZm9ybS1zdGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kYWwvdHNpLW1vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcHJlc2VudGF0aW9uLXNldHRpbmcvcHJlc2VudGF0aW9uLWRlc2lnbmVyLWJhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL2J1dHRvbi1jb21wb25lbnRzL3RzaS1idXR0b24vdHNpLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFZGl0YWJsZUdyaWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy9pbnB1dC1jb21wb25lbnRzL2VkaXRhYmxlLWdyaWQvZWRpdGFibGUtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL2lucHV0LWNvbXBvbmVudHMvdHNpLWNoZWNrYm94L3RzaS1jaGVja2JveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lHZW5lcmljR3JpZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL291dHB1dC1jb21wb25lbnRzL3RzaS1nZW5lcmljLWdyaWQvdHNpLWdlbmVyaWMtZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lWaWV3R3JpZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RzaS1jb21wb25lbnRzL291dHB1dC1jb21wb25lbnRzL3RzaS12aWV3LWdyaWQvdHNpLXZpZXctZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUc2lGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdHNpLWNvbXBvbmVudHMvdHNpLWZvcm0vdHNpLWZvcm0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpR2VuZXJpY0NydWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy90c2ktZ2VuZXJpYy1jcnVkL3RzaS1nZW5lcmljLWNydWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHNpTW9kYWxGb290ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90c2ktY29tcG9uZW50cy90c2ktbW9kYWwtZm9vdGVyL3RzaS1tb2RhbC1mb290ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUsIFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSB9IGZyb20gJy4uLy4uLy4uL3RzaS1kaXJlY3RpdmVzJztcclxuaW1wb3J0IHsgVHlwZVJlZ2lzdHJ5SGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vdHNpLWhlbHBlcnMvdHlwZS1yZWdpc3RyeS5oZWxwZXInO1xyXG5pbXBvcnQgeyBUc2lJbnB1dEJhc2UgfSBmcm9tICcuLi8uLi90c2ktaW5wdXQtYmFzZS90c2ktaW5wdXQtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYXBwLWJhc2UvYXBwLWJhc2UuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXRzaS1mb3JtLWJhc2UnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktZm9ybS1iYXNlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90c2ktZm9ybS1iYXNlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaUZvcm1Db21wb25lbnRCYXNlQ29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xyXG4gIC8vI3JlZ2lvbiBwcm9wZXJ0aWVzXHJcbiAgcHVibGljIG92ZXJyaWRlIGdldCBmb3JtRW5kcG9pbnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzdXBlci5mb3JtRW5kcG9pbnQ7XHJcbiAgfTtcclxuICBwcml2YXRlIG92ZXJyaWRlIHNldCBmb3JtRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZykge1xyXG4gICAgc3VwZXIuZm9ybUVuZHBvaW50ID0gYCR7ZW5kcG9pbnR9LyR7dGhpcy5pZH1gO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG92ZXJyaWRlIGdldCBidXNpbmVzc0NsYXNzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2J1c2luZXNzQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGJ1c2luZXNzQ2xhc3ModmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fYnVzaW5lc3NDbGFzcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5mb3JtRW5kcG9pbnQgPSB0aGlzLmJ1c2luZXNzQ2xhc3M7XHJcbiAgICB0aGlzLl9nZW5lcmljVmFsaWRhdGlvblN0YXRlU2VydmljZT8ubG9hZEVudGl0eVZhbGlkYXRpb25JbmZvcyh0aGlzLl9idXNpbmVzc0NsYXNzKTtcclxuXHJcbiAgICBpZiAodGhpcy5fYnVzaW5lc3NDbGFzcykge1xyXG4gICAgICB0aGlzLl9mZXRjaFdvcmtmbG93RW50aXR5SW5mb3JtYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvbXBvbmVudERlc2NyaW1pbmF0b3I6IENvbXBvbmVudERlc2NyaW1pbmF0b3IgfCB1bmRlZmluZWRcclxuICBwcml2YXRlIGRlc2NyaW1pbmF0b3JWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkXHJcblxyXG4gIHByb3RlY3RlZCBzZXQgY29tcG9uZW50RGVzY3JpbWluYXRvcih2YWx1ZTogQ29tcG9uZW50RGVzY3JpbWluYXRvciB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fY29tcG9uZW50RGVzY3JpbWluYXRvciA9IHZhbHVlXHJcbiAgICBpZiAodmFsdWUgJiYgdmFsdWUucHJvcGVydHlWYWx1ZSkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHZhbHVlLnByb3BlcnR5VmFsdWVcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHZhbHVlLnByb3BlcnR5VmFsdWVcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmModGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksXHJcbiAgICAgICAgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuICAgICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cyA9IFsuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLFxyXG4gICAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgICBdO1xyXG5cclxuICAgICAgdGhpcy5fZW5zdXJlV29ya2Zsb3dEYXRhUmVhZHkoKS50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAgICAgLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5nZXREaXJlY3RpdmVzKClcclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMuYWRkSW5wdXRzKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCwgIXRoaXMuX2xheW91dEhlbHBlclNlcnZpY2U/LmlzRGVzaWduTW9kZSlcclxuICAgICAgfSlcclxuXHJcbiAgICAgIC8vIHRoaXMuX3JlcG9ydGluZ1NlcnZpY2UuZ2V0UmVwb3J0RGVjcmltaW5hdG9yKHJlcSkuc3Vic2NyaWJlKHtcclxuICAgICAgLy8gICBuZXh0OiBhc3luYyAocmVzdWx0KSA9PiB7XHJcbiAgICAgIC8vICAgICB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHJlc3VsdC5wcm9wZXJ0eVZhbHVlO1xyXG4gICAgICAvLyAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmModGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCkpID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuICAgICAgLy8gICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgLy8gICAgICAgdGhpcy5mb3JtLmRlc2NyaW1pbmF0b3JWYWx1ZSA9IHJlc3VsdC5wcm9wZXJ0eVZhbHVlXHJcbiAgICAgIC8vICAgICAgIGlmICh0aGlzLmVudGl0eUluZm8/LmlzV29ya2Zsb3cpIHtcclxuICAgICAgLy8gICAgICAgICBhd2FpdCB0aGlzLmZvcm0uZ2V0V29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvbih0aGlzLmJ1c2luZXNzQ2xhc3MsIHRoaXMuaWQsIHRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvckNsYXNzTmFtZSxcclxuICAgICAgLy8gICAgICAgICAgIHRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvckNsYXNzUHJvcGVydHlOYW1lKVxyXG4gICAgICAvLyAgICAgICB9XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgICB0aGlzLmFkZElucHV0cyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QsICF0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlPy5pc0Rlc2lnbk1vZGUpXHJcbiAgICAgIC8vICAgfSxcclxuICAgICAgLy8gICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgIC8vICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAvLyAgIH0sXHJcbiAgICAgIC8vIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgICB0aGlzLmZvcm0uZGVzY3JpbWluYXRvclZhbHVlID0gdW5kZWZpbmVkXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgY29tcG9uZW50RGVzY3JpbWluYXRvcigpIHtcclxuICAgIHJldHVybiB0aGlzLl9jb21wb25lbnREZXNjcmltaW5hdG9yXHJcbiAgfVxyXG5cclxuXHJcbiAgQFZpZXdDaGlsZChUc2lGb3JtQ29tcG9uZW50KSBmb3JtPzogVHNpRm9ybUNvbXBvbmVudDtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoVHNpTW9kYWxGb290ZXJDb21wb25lbnQpIG1vZGFsRm9vdGVyPzogVHNpTW9kYWxGb290ZXJDb21wb25lbnQgfCBhbnk7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oVHNpQ2hlY2tib3hDb21wb25lbnQpIGNoZWNrYm94PzogQXJyYXk8VHNpQ2hlY2tib3hDb21wb25lbnQ+O1xyXG5cclxuICBmYXVsdHlJbnB1dHM6IEZvcm1WYWxpZGl0eVJlc3VsdFtdID0gW107XHJcbiAgaXNGb3JtVmFsaWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcbiAgcmVxdWlyZWRJbnB1dHM6IFRzaUlucHV0QmFzZVtdID0gW107XHJcbiAgLy8gQFZpZXdDaGlsZHJlbihFZGl0YWJsZUdyaWRDb21wb25lbnQpIGVkaXRhYmxlR3JpZENvbXBvbmVudHMhOiBRdWVyeUxpc3Q8RWRpdGFibGVHcmlkQ29tcG9uZW50PjtcclxuXHJcbiAgLy8gQFZpZXdDaGlsZHJlbihUc2lWaWV3R3JpZENvbXBvbmVudCkgdmlld0dyaWRzQ29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxUc2lWaWV3R3JpZENvbXBvbmVudD47XHJcbiAgLy8gQFZpZXdDaGlsZHJlbihUc2lHZW5lcmljR3JpZENvbXBvbmVudCkgZ2VuZXJpY0dyaWRzQ29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxUc2lHZW5lcmljR3JpZENvbXBvbmVudD47XHJcbiAgLy8gQFZpZXdDaGlsZHJlbihUc2lHZW5lcmljQ3J1ZENvbXBvbmVudCkgZ2VuZXJpY0NydWRzQ29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxUc2lHZW5lcmljQ3J1ZENvbXBvbmVudD47XHJcbiAgZWRpdGFibGVHcmlkQ29tcG9uZW50czogQXJyYXk8RWRpdGFibGVHcmlkQ29tcG9uZW50PiA9IFtdO1xyXG4gIHZpZXdHcmlkc0NvbXBvbmVudHM6IEFycmF5PFRzaVZpZXdHcmlkQ29tcG9uZW50PiA9IFtdO1xyXG4gIGdlbmVyaWNHcmlkc0NvbXBvbmVudHM6IEFycmF5PFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50PiA9IFtdO1xyXG4gIGdlbmVyaWNDcnVkc0NvbXBvbmVudHM6IEFycmF5PFRzaUdlbmVyaWNDcnVkQ29tcG9uZW50PiA9IFtdO1xyXG5cclxuXHJcbiAgZm9ybVJlZj86IE5nRm9ybTtcclxuICBpc0Zvcm1EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGN1ZENvbXBvbmVudDogYW55O1xyXG4gIHByaXZhdGUgX21vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIElucHV0c1xyXG4gIEBJbnB1dCgpIGl0ZW1EaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBhbGxvd1NhdmVXaXRob3V0Q2hhbmdlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBtb2RlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZTtcclxuICB9XHJcbiAgc2V0IG1vZGUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fbW9kZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgaWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9pZDtcclxuICB9XHJcbiAgc2V0IGlkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2lkID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5idXNpbmVzc0NsYXNzKSB7XHJcbiAgICAgIHRoaXMuX2ZldGNoV29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIF9pc2xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaXNsb2FkaW5nKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pc2xvYWRpbmcgPSB2YWx1ZTtcclxuICAgIGNvbnNvbGUubG9nKCdpc2xvYWRpbmcgc2V0IHRvJywgdmFsdWUpO1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnByb2Nlc3NEaXNhYmxlZElucHV0cyh0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpXHJcbiAgICAgIH0sIDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzbG9hZGluZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc2xvYWRpbmc7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGhlYWRlcj86IHN0cmluZztcclxuICBASW5wdXQoKSBzYXZpbmcgPSBmYWxzZTtcclxuICBASW5wdXQoKSBpdGVtOiBhbnk7XHJcblxyXG4gIHByaXZhdGUgX3N0YXR1cz86IHN0cmluZyA9ICcnO1xyXG4gIHByaXZhdGUgX2FsbG93ZWRTdGF0dXM/OiBzdHJpbmdbXTtcclxuXHJcbiAgZ2V0IHN0YXR1cygpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBzdGF0dXModmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fc3RhdHVzID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5mb3JtICYmIHRoaXMuZm9ybS5zdGF0dXMgIT09IHRoaXMuX3N0YXR1cykge1xyXG4gICAgICB0aGlzLmZvcm0uc3RhdHVzID0gdGhpcy5fc3RhdHVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IGFsbG93ZWRTdGF0dXModmFsdWU6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XHJcblxyXG4gICAgdGhpcy5fYWxsb3dlZFN0YXR1cyA9IHZhbHVlO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcm0gJiYgdGhpcy5mb3JtLmFsbG93ZWRTdGF0dXMgIT09IHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5hbGxvd2VkU3RhdHVzID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYWxsb3dlZFN0YXR1cygpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dlZFN0YXR1cztcclxuICB9XHJcblxyXG4gIC8vYnNNb2RhbFJlZj86IGFueTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKVxyXG4gIHByaXZhdGUgX3JlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMilcclxuICBwcml2YXRlIF9sYXlvdXRIZWxwZXJTZXJ2aWNlID0gaW5qZWN0KExheW91dEhlbHBlclNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZSA9IGluamVjdChXb3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlKVxyXG4gIHByaXZhdGUgX3dvcmtmbG93TW9kYWxTZXJ2aWNlID0gaW5qZWN0KFRzaU1vZGFsU2VydmljZSlcclxuICBwcml2YXRlIF9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZSA9IGluamVjdChQcmVzZW50YXRpb25TZXR0aW5nU2VydmljZSlcclxuICBwcml2YXRlIF9tZXNzYWdlSW5mb1NlcnZpY2UgPSBpbmplY3QoVHNpTm90aWZpY2F0aW9uU2VydmljZSlcclxuICBwcml2YXRlIF9lcnJvclJlc3BvbnNlTWFuYWdlciA9IGluamVjdChFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UpXHJcbiAgcHJpdmF0ZSBfcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlID0gaW5qZWN0KFByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZSlcclxuICBwcml2YXRlIF9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlID0gaW5qZWN0KFByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UpXHJcbiAgcHVibGljIGxvY2FsaXplPyA9IGluamVjdChMb2NhbGl6ZVBpcGUpXHJcbiAgcHVibGljIF9pbnB1dFJlZ2lzdHJ5ID0gaW5qZWN0KElucHV0UmVnaXN0cnlTZXJ2aWNlKVxyXG4gIHByaXZhdGUgX2Zvcm1TdGF0ZVNlcnZpY2UgPSBpbmplY3QoRm9ybVN0YXRlU2VydmljZSlcclxuICBwcml2YXRlIF9jb2xvbm5lUGVyc29ubmFsaXNlZVNlcnZpY2UgPSBpbmplY3QoQ29sb25uZVBlcnNvbm5hbGlzZWVTZXJ2aWNlKVxyXG4gIHByaXZhdGUgZGlyZWN0aXZlRWxlbWVudHM6IChQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSB8IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlQmFzZSlbXSA9IFtdO1xyXG4gIHByaXZhdGUgZGVzaWduTW9kZUFjdGl2ZSA9IGZhbHNlO1xyXG4gIHByZXNlbnRhdGlvblJlcXVlc3Q6IFByZXNlbnRhdGlvblNldHRpbmcgPSBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcbiAgX2Rlc2lnbk1vZGVGb3JtU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XHJcbiAgX3NhdmVXb3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWRcclxuICBfYWRkZWREaXJlY3RpdmVTdWJzY3JpdHBpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZFxyXG4gIF9hZGRlZERpcmVjdGl2ZUJhc2VTdWJzY3JpdHBpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZFxyXG4gIC8vI3JlZ2lvbiBPdXRwdXRzXHJcbiAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBwcml2YXRlIF9nZW5lcmljVmFsaWRhdGlvblN0YXRlU2VydmljZT86IEdlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlID0gaW5qZWN0KEdlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcmVmPzogRHluYW1pY0RpYWxvZ1JlZixcclxuICAgIHB1YmxpYyBjb25maWc/OiBEeW5hbWljRGlhbG9nQ29uZmlnLFxyXG4gICAgcHVibGljIG92ZXJyaWRlIGNkUmVmPzogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHN1cGVyKGNkUmVmKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHdvcmtmbG93SW5mb3JtYXRpb24/OiB3b3JrZmxvd0luc3RhbmNlSW5mb3JtYXRpb25SZXNwb25zZVxyXG4gIGN1c3RvbURhdGE/OiBhbnlcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgIHRoaXMuX2luaXRNb2RhbFJlZigpO1xyXG4gICAgdGhpcy5pbml0TW9kYWxEYXRhKCk7XHJcbiAgICB0aGlzLl9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbiA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5hZGRlZERpcmVjdGl2ZU9ic2VydmFibGVcclxuICAgICAgLnN1YnNjcmliZShhc3luYyBkYXRhID0+IHtcclxuICAgICAgICBpZiAoZGF0YS50cmVhdGVkKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRlc2lnbk1vZGVBY3RpdmUgJiYgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUgJiYgIXRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTaW5nbGVFbGVtZW50SW5EZXNpZ25Nb2RlKGRhdGEpXHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICAgICAgdGhpcy5lbnRpdHlJbmZvID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5jdXJyZW50V29ya2Zsb3dFbnRpdHlJbmZvXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIUVudGl0eUluZm8uaGFzRm9yZWlnbktleURpc2NyaW1pbmF0b3IodGhpcy5lbnRpdHlJbmZvKSkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fZW5zdXJlV29ya2Zsb3dEYXRhUmVhZHkoKVxyXG4gICAgICAgICAgdGhpcy5wcm9jZXNzU2luZ2xlRWxlbWVudChkYXRhKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fZW5zdXJlV29ya2Zsb3dEYXRhUmVhZHkoKVxyXG4gICAgICAgICAgdGhpcy5wcm9jZXNzU2luZ2xlRWxlbWVudChkYXRhKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICB0aGlzLl9hZGRlZERpcmVjdGl2ZUJhc2VTdWJzY3JpdHBpb24gPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmFkZGVkRGlyZWN0aXZlT2JzZXJ2YWJsZVxyXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIGRhdGEgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhLnRyZWF0ZWQpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGVzaWduTW9kZUFjdGl2ZSAmJiB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSAmJiAhdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgICAgIHRoaXMucHJvY2Vzc1NpbmdsZUVsZW1lbnRJbkRlc2lnbk1vZGUoZGF0YSlcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgICAgICB0aGlzLmVudGl0eUluZm8gPSB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmN1cnJlbnRXb3JrZmxvd0VudGl0eUluZm9cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghRW50aXR5SW5mby5oYXNGb3JlaWduS2V5RGlzY3JpbWluYXRvcih0aGlzLmVudGl0eUluZm8pKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9lbnN1cmVXb3JrZmxvd0RhdGFSZWFkeSgpXHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTaW5nbGVFbGVtZW50KGRhdGEpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9lbnN1cmVXb3JrZmxvd0RhdGFSZWFkeSgpXHJcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTaW5nbGVFbGVtZW50KGRhdGEpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgIHRoaXMuX2Rlc2lnbk1vZGVGb3JtU3Vic2NyaXB0aW9uID0gdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5fZGVzaWduTW9kZUZvcm1TdWJqZWN0LnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgaWYgKGRhdGEgJiYgZGF0YSA9PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy50b2dnbGVEZXNpZ25Nb2RlKClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHRvZ2dsZURlc2lnbk1vZGUoKSB7XHJcbiAgICB0aGlzLnJlbW92ZVRzaU1vZGFsRm9vdGVyKClcclxuICAgIHRoaXMuY3JlYXRlU2F2ZUJ1dHRvbigpO1xyXG5cclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCA9IHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmdldFByZXNlbnRhdGlvblNldHRpbmdCeUNvbXBvbmVudElkZW50aWZpZXJTeW5jKHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpLCB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZSkgPz8gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG5cclxuICAgIHRoaXMuZGlyZWN0aXZlRWxlbWVudHMgPSBbLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKSxcclxuICAgIC4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpXHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMuZGVzaWduTW9kZUFjdGl2ZSA9IHRydWVcclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKGlucHV0ID0+IHtcclxuICAgICAgaW5wdXQuaW5zZXJ0RWxlbWVudCgpO1xyXG4gICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZSkge1xyXG4gICAgICAgIGlucHV0LnNlbGVjdEFwcHJvcmlhdGVDb2x1bW5zKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCk7XHJcbiAgICAgIH1cclxuICAgICAgaW5wdXQuYWRkQ2hlY2tib3hlc1RvSW5wdXRzKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpXHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbUFjdGl2ZVN1YnNjcml0cGlvbigpXHJcbiAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lckJhc2VTZXJ2aWNlLmdldERpcmVjdGl2ZXMoKVxyXG4gICAgXTtcclxuICAgIGNvbnNvbGUubG9nKFwiY291bnQgb2YgZGlyZWN0aXZlRWxlbWVudHMgPT4gXCIsIHRoaXMuZGlyZWN0aXZlRWxlbWVudHMubGVuZ3RoKVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZT8uaXNEZXNpZ25Nb2RlXHJcbiAgICAgICYmICF0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdykge1xyXG4gICAgICAvLyB0aGlzLnJlbW92ZVRzaU1vZGFsRm9vdGVyKClcclxuICAgICAgLy8gdGhpcy5jcmVhdGVTYXZlQnV0dG9uKClcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG5cclxuICAgICAgaWYgKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgICAgdGhpcy5lbnRpdHlJbmZvID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5jdXJyZW50V29ya2Zsb3dFbnRpdHlJbmZvXHJcbiAgICAgIH1cclxuICAgICAgLy8gZWxzZSB7XHJcbiAgICAgIC8vICAgdGhpcy5lbnRpdHlJbmZvID0gYXdhaXQgdGhpcy5fZW50aXR5Q29uZmlnU2VydmljZS5nZXRFbnRpdHlJbmZvRnJvbUNhY2hlKHRoaXMuYnVzaW5lc3NDbGFzcylcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIC8vaW5pdCBnZW5lcmljQ3J1ZCByZXBvcnRpbmdcclxuICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgdGhpcy5mb3JtLmZvcm1SZWZDaGFuZ2Uuc3Vic2NyaWJlKGYgPT4ge1xyXG4gICAgICAgIGlmIChmKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1SZWYgPSBmO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZm9ybS5pZCA9IHRoaXMuaWQ7XHJcbiAgICAgIHRoaXMuZm9ybS5tb2RlID0gdGhpcy5tb2RlXHJcbiAgICAgIHRoaXMuZm9ybS5mb3JtRW5kcG9pbnQgPSB0aGlzLmZvcm1FbmRwb2ludDtcclxuICAgICAgdGhpcy5mb3JtLmZvcm1OYW1lID0gdGhpcy5mb3JtTmFtZTtcclxuICAgICAgdGhpcy5mb3JtLmJ1c2luZXNzQ2xhc3MgPSB0aGlzLl9idXNpbmVzc0NsYXNzXHJcbiAgICAgIHRoaXMuZm9ybS5kaXNhYmxlZCA9IHRoaXMuaXNGb3JtRGlzYWJsZWQ7XHJcblxyXG4gICAgICB0aGlzLmZvcm0uYWxsb3dlZFN0YXR1cyA9IHRoaXMuX2FsbG93ZWRTdGF0dXM7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuZm9ybS5pc0Rlc2NyaW1pbmF0b3JWYWx1ZVNldCkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5kZXNjcmltaW5hdG9yVmFsdWUgPSB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB3b3JrZmxvdyBmb3JtIGRlc2lnblxyXG4gICAgICB0aGlzLl9zYXZlV29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybS5vblN1Ym1pdEZvcm1Xb3JrZmxvd0NvbmZpZ3VyYXRpb24uc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgIGxldCB3b3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uID0gdGhpcy5nZXRGb3JtV29yZmtsb3dQcmVzZW50YXRpb25TZXR0aW5nKCk7XHJcbiAgICAgICAgdGhpcy5oaWRlKHdvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb24pXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmZvcm0ub25TdGF0dXNDaGFuZ2Uuc3Vic2NyaWJlKChuZXdWYWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBuZXdWYWx1ZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmZvcm0ub3BlbldvcmtmbG93LnN1YnNjcmliZSgoKSA9PiB0aGlzLm9wZW5Xb3JrZmxvdygpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5DUkVBVEUpIHtcclxuICAgICAgaWYgKHRoaXMuY2hlY2tib3gpIHtcclxuICAgICAgICB0aGlzLmNoZWNrYm94LmZvckVhY2goYm94ID0+IHtcclxuICAgICAgICAgIGJveC5pbnB1dEZpZWxkID0gZmFsc2U7XHJcbiAgICAgICAgICBib3guY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0VHNpR3JpZHNSZWYoKSB7XHJcbiAgICB0aGlzLnZpZXdHcmlkc0NvbXBvbmVudHMgPSB0aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0Vmlld0dyaWRzKClcclxuICAgIHRoaXMuZ2VuZXJpY0dyaWRzQ29tcG9uZW50cyA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXRHZW5lcmljR3JpZHMoKVxyXG4gICAgdGhpcy5lZGl0YWJsZUdyaWRDb21wb25lbnRzID0gdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldEVkaXRhYmxlR3JpZHMoKVxyXG4gICAgdGhpcy5nZW5lcmljQ3J1ZHNDb21wb25lbnRzID0gdGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJTZXJ2aWNlLmdldEdlbmVyaWNDcnVkcygpXHJcbiAgfVxyXG5cclxuICBnZXRGb3JtV29yZmtsb3dQcmVzZW50YXRpb25TZXR0aW5nKCkge1xyXG4gICAgbGV0IHByZXNlbnRhdGlvblJlcXVlc3QgPSBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcblxyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cyA9IFsuLi50aGlzLl9wcmVzZW50YXRpb25EZXNpZ25lclNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpLFxyXG4gICAgLi4udGhpcy5fcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlU2VydmljZS5nZXREaXJlY3RpdmVzKClcclxuICAgIF07XHJcblxyXG4gICAgbGV0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzOiBQcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsW10gPSBbXVxyXG4gICAgbGV0IGF2YWlsYWJsZURpcmVjdGl2ZUVsZW1lbnRzID0gdGhpcy5kaXJlY3RpdmVFbGVtZW50cy5maWx0ZXIoeCA9PlxyXG4gICAgICAhKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMuc29tZSh5ID0+XHJcbiAgICAgICAgeS5ibG9ja05hbWUgPT09IHgucHJlc2VudGF0aW9uRGVzaWduZXIgJiYgIXkuaXNCbG9ja1Zpc2libGVcclxuICAgICAgKSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5pbml0VHNpR3JpZHNSZWYoKVxyXG5cclxuICAgIGF2YWlsYWJsZURpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcclxuXHJcbiAgICAgIGxldCBjb25maWd1cmF0aW9uID0gdW5kZWZpbmVkXHJcblxyXG5cclxuICAgICAgbGV0IGdyaWRTdGF0ZSA9IFtcclxuICAgICAgICAuLi50aGlzLnZpZXdHcmlkc0NvbXBvbmVudHMsXHJcbiAgICAgICAgLi4udGhpcy5nZW5lcmljR3JpZHNDb21wb25lbnRzLFxyXG4gICAgICAgIC4uLnRoaXMuZ2VuZXJpY0NydWRzQ29tcG9uZW50cyxcclxuICAgICAgICAuLi50aGlzLmVkaXRhYmxlR3JpZENvbXBvbmVudHNcclxuICAgICAgXVxyXG4gICAgICAgIC5maW5kKHggPT4geC5pZCA9PT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyIHx8ICgnZm9ybU5hbWUnIGluIHggJiYgeC5mb3JtTmFtZSA9PT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyKSlcclxuICAgICAgICA/LmdldFN0YXRlKCk7XHJcblxyXG4gICAgICBjb25maWd1cmF0aW9uID0gZ3JpZFN0YXRlID8gSlNPTi5zdHJpbmdpZnkoZ3JpZFN0YXRlKSA6IHVuZGVmaW5lZDtcclxuXHJcblxyXG4gICAgICBsZXQgb2JqZWN0OiBQcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID0ge1xyXG4gICAgICAgIGJsb2NrTmFtZTogZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyLFxyXG4gICAgICAgIGlzQmxvY2tWaXNpYmxlOiAhZGlyZWN0aXZlLnNob3dIaWRlQ2hlY2tib3hDb21wb25lbnRSZWY/Lmluc3RhbmNlPy5fY2hlY2tlZCxcclxuICAgICAgICB1aWQ6IHRoaXMuZ2V0UHJlc2VudGF0aW9uU2V0aW5nRGV0YWlsVWlkKGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lciA/PyBcIlwiKSxcclxuICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uLFxyXG4gICAgICAgIGlzSW5wdXRFbmFibGVkOiAhZGlyZWN0aXZlLmRpc2FibGVkQ2hlY2tib3hDb21wb25lbnRSZWY/Lmluc3RhbmNlPy5fY2hlY2tlZFxyXG4gICAgICB9XHJcbiAgICAgIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLnB1c2gob2JqZWN0KVxyXG4gICAgfSlcclxuXHJcbiAgICBwcmVzZW50YXRpb25SZXF1ZXN0LmNvbXBvbmVudElkZW50aWZlciA9IHRoaXMuZ2V0Q29tcG9uZW50SWRlbnRpZmllcigpO1xyXG4gICAgcHJlc2VudGF0aW9uUmVxdWVzdC5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscyA9IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzXHJcblxyXG4gICAgY29uc29sZS5sb2coXCJwcmVzZW50YXRpb25SZXF1ZXN0ID0+IFwiLCBwcmVzZW50YXRpb25SZXF1ZXN0KVxyXG4gICAgcmV0dXJuIHByZXNlbnRhdGlvblJlcXVlc3RcclxuICB9XHJcblxyXG5cclxuICBpc0RlbGV0ZU1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5ERUxFVEU7XHJcbiAgfVxyXG4gIGlzU3VibWl0RGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAvL3JldHVybiAhdGhpcy5mb3JtUmVmPy5mb3JtPy52YWxpZCB8fCB0aGlzLnNhdmluZztcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgaXNDb25zdWx0TW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkNPTlNVTFQ7XHJcbiAgfVxyXG5cclxuICBpc0R1cGxpY2F0ZU1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5EVVBMSUNBVEU7XHJcbiAgfVxyXG4gIGlzRWRpdE1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5FRElUO1xyXG4gIH1cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBtZXRob2RzXHJcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGluaXRNb2RhbERhdGEoKSB7XHJcbiAgICBzdXBlci5pbml0TW9kYWxEYXRhKClcclxuICAgIGlmICh0aGlzLm9wZW5lZERpYWxvZ1JlZiAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMub3BlbmVkRGlhbG9nUmVmICE9IHVuZGVmaW5lZFxyXG4gICAgICAmJiB0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZyAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAvL2NoZWNrIGhhdmUgb3BlbmVkRGlhbG9nQ29uZmlnXHJcbiAgICAgIGlmICh0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZy5kYXRhICE9IG51bGwgJiYgdGhpcy5vcGVuZWREaWFsb2dDb25maWcuZGF0YSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmN1ZENvbXBvbmVudCA9IHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnLmRhdGEuY3VkQ29tcG9uZW50O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF92ZXJpZnlNb2RhbERhdGEoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5vcGVuZWREaWFsb2dSZWYgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLm9wZW5lZERpYWxvZ1JlZiAhPSB1bmRlZmluZWRcclxuICAgICAgJiYgdGhpcy5vcGVuZWREaWFsb2dDb25maWcgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZyAhPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0TW9kYWxSZWYoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdmVyaWZ5TW9kYWxEYXRhKCkpIHtcclxuICAgICAgLy90aGlzLmJzTW9kYWxSZWYgPSB7aGlkZTogKCkgPT4gdGhpcy5vcGVuZWREaWFsb2dSZWYuZGVzdHJveSgpLGNsb3NlOiAodmFsOiBhbnkpPT57dGhpcy5vcGVuZWREaWFsb2dSZWYuY2xvc2UodmFsKX19XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vXHJcbiAgbChrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5sb2NhbGl6ZSAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMubG9jYWxpemUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShrZXkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiB0cmFpdGVyIG11bHRpcGxlIGNvbWJvXHJcbiAgYWxsQ29tYm9Mb2FkaW5nU3RhdHVzOiBBcnJheTxDb21ib1N0YXR1c01vZGVsPiA9IFtdO1xyXG4gIGFyZUFsbENvbWJvTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJvY2Vzc0NvbWJvSW5pdEV2ZW50KGNvbWJvU3RhdHVzOiBDb21ib1N0YXR1c01vZGVsKSB7XHJcbiAgICBpZiAoIXRoaXMuYWxsQ29tYm9Mb2FkaW5nU3RhdHVzLmZpbmQodSA9PiB1LnVpZCA9PSBjb21ib1N0YXR1cy51aWQpKVxyXG4gICAgICB0aGlzLmFsbENvbWJvTG9hZGluZ1N0YXR1cy5wdXNoKGNvbWJvU3RhdHVzKTtcclxuICB9XHJcblxyXG4gIHByb2Nlc3NDb21ib0lzTG9hZGVkRXZlbnQoY29tYm9TdGF0dXM6IENvbWJvU3RhdHVzTW9kZWwpIHtcclxuICAgIGxldCBjb21ib1MgPSB0aGlzLmFsbENvbWJvTG9hZGluZ1N0YXR1cy5maW5kKHUgPT4gdS51aWQgPT0gY29tYm9TdGF0dXMudWlkKTtcclxuICAgIGlmIChjb21ib1MgIT0gbnVsbCAmJiBjb21ib1MgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbWJvUy5pc0RhdGFMb2FkZWQgPSBjb21ib1N0YXR1cy5pc0RhdGFMb2FkZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFyZUFsbENvbWJvTG9hZGVkRm4oKTtcclxuICB9XHJcblxyXG4gIGFyZUFsbENvbWJvTG9hZGVkRm4oKTogdm9pZCB7XHJcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5hbGxDb21ib0xvYWRpbmdTdGF0dXMubGVuZ3RoID4gMClcclxuICAgICAgdGhpcy5hbGxDb21ib0xvYWRpbmdTdGF0dXMuZm9yRWFjaCh1ID0+IHtcclxuICAgICAgICByZXN1bHQgPSByZXN1bHQgJiYgdS5pc0RhdGFMb2FkZWQ7XHJcbiAgICAgIH0pO1xyXG4gICAgZWxzZSByZXN1bHQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmFyZUFsbENvbWJvTG9hZGVkID0gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgbmV3IG1vZGFsIGhhbmRsaW5nIG1ldGhvZCAocmVzb2x2ZUZpY2hlKSBpbnN0ZWFkLlxyXG4gKiBUaGlzIG1ldGhvZCBkaXJlY3RseSBtYW5pcHVsYXRlcyB0aGUgZGlhbG9nIHJlZmVyZW5jZSBhbmQgbWF5IGxlYWQgdG8gaW5jb25zaXN0ZW50IGJlaGF2aW9yLlxyXG4gKi9cclxuXHJcbiAgaGlkZSh2YWw/OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLm9wZW5lZERpYWxvZ1JlZiAhPSBudWxsICYmIHRoaXMub3BlbmVkRGlhbG9nUmVmICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodmFsID09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5vcGVuZWREaWFsb2dSZWYuZGVzdHJveSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMub3BlbmVkRGlhbG9nUmVmLmNsb3NlKHZhbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1hcmtJbnB1dEFzRGlydHkoaW5wdXROYW1lPzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9pbnB1dFJlZ2lzdHJ5Lm1hcmtJbnB1dEFzRGlydHkoaW5wdXROYW1lKVxyXG4gIH1cclxuXHJcbiAgcmVzb2x2ZUZpY2hlKHZhbD86IGFueSwgYXBpUmVzcG9uc2U/OiBhbnkpIHtcclxuICAgIHRoaXMuX2lucHV0UmVnaXN0cnkucmVzZXREaXJ0eVN0YXR1c0ZvckFsbElucHV0cygpO1xyXG5cclxuICAgIGNvbnN0IGlzQ3JlYXRlT3JEdXBsaWNhdGUgPVxyXG4gICAgICB0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkNSRUFURSB8fFxyXG4gICAgICB0aGlzLm1vZGUgPT0gQ29tcG9uZW50X01vZGVzLkRVUExJQ0FURTtcclxuXHJcbiAgICBjb25zdCBpc0VkaXRhYmxlTW9kZSA9XHJcbiAgICAgIGlzQ3JlYXRlT3JEdXBsaWNhdGUgfHwgdGhpcy5tb2RlID09IENvbXBvbmVudF9Nb2Rlcy5FRElUO1xyXG5cclxuICAgIC8vIFdoaWNoIHJlY29yZCB3YXMganVzdCBzYXZlZDogb24gY3JlYXRlL2R1cGxpY2F0ZSB0aGUgcmVzcG9uc2UgY2FycmllcyB0aGUgTkVXIHVpZCwgYW5kXHJcbiAgICAvLyBgdGhpcy5pZGAgaXMgc3RpbGwgbnVsbCAoY3JlYXRlKSBvciB0aGUgU09VUkNFIHJlY29yZCAoZHVwbGljYXRlKS4gT24gZWRpdCB0aGUgdXBkYXRlIGNhbGxcclxuICAgIC8vIHJldHVybnMgbm8gYm9keSwgc28gYHRoaXMuaWRgIOKAlCBmaWxsZWQgZnJvbSB0aGUgZGlhbG9nIGNvbmZpZyDigJQgaXMgdGhlIG9ubHkgc291cmNlLlxyXG4gICAgY29uc3Qgc2F2ZWRPY2N1cnJlbmNlID0gYXBpUmVzcG9uc2U/LnVpZCA/PyB0aGlzLmlkO1xyXG5cclxuICAgIGlmIChpc0VkaXRhYmxlTW9kZSAmJiBzYXZlZE9jY3VycmVuY2UpIHtcclxuICAgICAgdGhpcy5fZm9ybVN0YXRlU2VydmljZS5kYXRhU2F2ZWQkLm5leHQoc2F2ZWRPY2N1cnJlbmNlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNDcmVhdGVPckR1cGxpY2F0ZSAmJiBhcGlSZXNwb25zZT8udWlkICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5pZCA9IGFwaVJlc3BvbnNlLnVpZDtcclxuICAgICAgdGhpcy5tb2RlID0gQ29tcG9uZW50X01vZGVzLkVESVQ7XHJcblxyXG4gICAgICB0aGlzLmNkUmVmPy5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5mb3JtKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmlkID0gdGhpcy5pZDtcclxuICAgICAgICB0aGlzLmZvcm0ubW9kZSA9IHRoaXMubW9kZTtcclxuICAgICAgICB0aGlzLmZvcm0uZm9ybUVuZHBvaW50ID0gdGhpcy5mb3JtRW5kcG9pbnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5mb3JtKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5mZXRjaEFuZEFwcGx5VHJhbnNpdGlvbnModGhpcy5mb3JtLnN0YXR1cylcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZWZyZXNoTGlzdCA9IGlzRWRpdGFibGVNb2RlIHx8IHRoaXMubW9kZSA9PSBDb21wb25lbnRfTW9kZXMuREVMRVRFO1xyXG4gICAgaWYgKHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMub3BlbmVkRGlhbG9nQ29uZmlnLmRhdGEgPz89IHt9O1xyXG4gICAgICB0aGlzLm9wZW5lZERpYWxvZ0NvbmZpZy5kYXRhLnJlZnJlc2hMaXN0ID0gcmVmcmVzaExpc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLl9mb3JtU3RhdGVTZXJ2aWNlLmNsb3NlTW9kYWwpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmhpZGUoYXBpUmVzcG9uc2UpXHJcbiAgfVxyXG5cclxuICBhc3luYyBvcGVuV29ya2Zsb3coKSB7XHJcbiAgICBpZiAoIXRoaXMuZW50aXR5SW5mbz8uaXNXb3JrZmxvdykge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlSW5mb1NlcnZpY2UuZXJyb3IoJ3RzaV9mb3JtX2VudGl0eV9ub3RfbWFya2VkX2FzX3dvcmtmbG93Jyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkZXNjcmltaW5hdG9yID0gdGhpcy5mb3JtPy5pZ25vcmVEZXNjcmltaW5hdG9yID8gdW5kZWZpbmVkIDogdGhpcy5kZXNjcmltaW5hdG9yVmFsdWU7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBtYXRjaCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0V29ya2Zsb3dCeUNsYXNzZUFuZERlc2NyaW1pbmF0b3IodGhpcy5idXNpbmVzc0NsYXNzLCBkZXNjcmltaW5hdG9yKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IG1hdGNoXHJcbiAgICAgICAgPyB7IGRhdGE6IHsgbW9kZTogTW9kZXMuZWRpdCwgaWQ6IG1hdGNoLnVpZCB9LFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJycsIHdpZHRoOiBNb2RhbFNpemVFbnVtLkV4dHJhTGFyZ2Uud2lkdGgsIGhlaWdodDogTW9kYWxTaXplRW51bS5FeHRyYUxhcmdlLmhlaWdodCwgbWF4aW1pemFibGU6IHRydWUgfVxyXG4gICAgICAgIDogeyBkYXRhOiB7IG1vZGU6IE1vZGVzLmNyZWF0ZSwgY3VzdG9tRGF0YTogeyB3b3JrZmxvdzp7Y2xhc3NlOiB0aGlzLmJ1c2luZXNzQ2xhc3MsIGRlc2NyaW1pbmF0b3JWYWx1ZTogZGVzY3JpbWluYXRvcn0gfSB9LFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICcnLCB3aWR0aDogTW9kYWxTaXplRW51bS5FeHRyYUxhcmdlLndpZHRoLCBoZWlnaHQ6IE1vZGFsU2l6ZUVudW0uRXh0cmFMYXJnZS5oZWlnaHQsIG1heGltaXphYmxlOiB0cnVlIH07XHJcblxyXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLl93b3JrZmxvd01vZGFsU2VydmljZS5vcGVuKFR5cGVSZWdpc3RyeUhlbHBlci5nZXRUeXBlKCdDcmVhdGVPckVkaXRXb3JrZmxvd3NDb21wb25lbnQnKSwgY29uZik7XHJcbiAgICAgIGRpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9mZXRjaFdvcmtmbG93RW50aXR5SW5mb3JtYXRpb24oKSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHdoZW4gZ2V0dGluZyB3b3JrZmxvdyBpbmZvcm1hdGlvblwiLCBlcnJvcilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3dvcmtmbG93RW50aXR5SW5mb3JtYXRpb25Qcm9taXNlPzogUHJvbWlzZTx2b2lkPlxyXG5cclxuICBwcml2YXRlIF9mZXRjaFdvcmtmbG93RW50aXR5SW5mb3JtYXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgaWYgKCF0aGlzLl93b3JrZmxvd0VudGl0eUluZm9ybWF0aW9uUHJvbWlzZSkge1xyXG4gICAgICB0aGlzLl93b3JrZmxvd0VudGl0eUluZm9ybWF0aW9uUHJvbWlzZSA9IHRoaXMuX2ZldGNoV29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvbkNvcmUoKVxyXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHsgdGhpcy5fd29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvblByb21pc2UgPSB1bmRlZmluZWQgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fd29ya2Zsb3dFbnRpdHlJbmZvcm1hdGlvblByb21pc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9mZXRjaFdvcmtmbG93RW50aXR5SW5mb3JtYXRpb25Db3JlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5nZXRFbnRpdHlJbmZvcm1hdGlvbih0aGlzLmJ1c2luZXNzQ2xhc3MhKTtcclxuXHJcbiAgICBpZiAodGhpcy5faXNBd2FpdGluZ0Rlc2NyaW1pbmF0b3IoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJlcXVlc3Q6IEdldFdvcmtmbG93SW5zdGFuY2VJbmZvcm1hdGlvblJlcXVlc3QgPSBuZXcgR2V0V29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVxdWVzdCgpO1xyXG4gICAgcmVxdWVzdC5jbGFzc05hbWUgPSB0aGlzLmJ1c2luZXNzQ2xhc3NcclxuICAgIHJlcXVlc3QudWlkT2JqZXQgPSB0aGlzLmlkO1xyXG4gICAgcmVxdWVzdC5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lID0gdGhpcy5lbnRpdHlJbmZvPy5kaXNjcmltaW5hdG9yQ2xhc3NOYW1lXHJcbiAgICByZXF1ZXN0LmRpc2NyaW1pbmF0b3JDbGFzc1Byb3BlcnR5TmFtZSA9IHRoaXMuZW50aXR5SW5mbz8uZGlzY3JpbWluYXRvckNsYXNzUHJvcGVydHlOYW1lXHJcbiAgICByZXF1ZXN0LmRpc2NyaW1pbmF0b3JWYWx1ZSA9IHRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRFbnRpdHlXb3JrbGZvd0luc3RhbmNlSW5mb3JtYXRpb24ocmVxdWVzdCkpO1xyXG4gICAgICB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24gPSByZXNwb25zZVxyXG4gICAgICBpZiAodGhpcy5mb3JtKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLndvcmtmbG93SW5mb3JtYXRpb24gPSByZXNwb25zZSA/PyBuZXcgd29ya2Zsb3dJbnN0YW5jZUluZm9ybWF0aW9uUmVzcG9uc2UoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzID0gWy4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCksXHJcbiAgICAgIC4uLnRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZVNlcnZpY2UuZ2V0RGlyZWN0aXZlcygpXHJcbiAgICAgIF07XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igd2hpbGUgZ2V0dGluZyB3b3JrZmxvd0luZm9ybWF0aW9uXCIsIGVycm9yKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfZW5zdXJlV29ya2Zsb3dEYXRhUmVhZHkoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuYnVzaW5lc3NDbGFzcykgcmV0dXJuO1xyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFdvcmtmbG93RXRhdEZvcm1Gb3JDbGFzc0Zyb21DYWNoZSh0aGlzLmJ1c2luZXNzQ2xhc3MsIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKS5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHdoaWxlIGdldHRpbmcgd29ya2Zsb3cgZXRhdCBmb3JtIGNvbmZpZ3VyYXRpb25cIiwgZXJyb3IpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fZmV0Y2hXb3JrZmxvd0VudGl0eUluZm9ybWF0aW9uKClcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgLy8gVGhlIGVudGl0eSBpcyBkaXNjcmltaW5hdGVkIGJ1dCB0aGUgZGlzY3JpbWluYXRvciBpc24ndCBrbm93biB5ZXQ6IHRoZSBjb21wb25lbnREZXNjcmltaW5hdG9yIHNldHRlciBhcHBsaWVzIHRoZSBjb25maWcgbGF0ZXIuXHJcbiAgcHJpdmF0ZSBfaXNBd2FpdGluZ0Rlc2NyaW1pbmF0b3IoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIXRoaXMuZGVzY3JpbWluYXRvclZhbHVlXHJcbiAgICAgICYmIEVudGl0eUluZm8uaGFzRm9yZWlnbktleURpc2NyaW1pbmF0b3IodGhpcy5lbnRpdHlJbmZvKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8jZW5kcmVnaW9uIHRyYWl0ZXIgbXVsdGlwbGUgY29tYm9cclxuXHJcbiAgZ2V0V29ya2Zsb3dFdGF0Rm9ybSgpIHtcclxuICAgIGxldCB3b3JrZmxvd0V0YXRGb3JtID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5nZXRXb3JrZmxvd0V0YXRGb3JtRnJvbUNhY2hlU3luYyh0aGlzLmJ1c2luZXNzQ2xhc3MsIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKVxyXG4gICAgICA/LmZpbmQoeCA9PiB4LnVpZCA9PSB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24/LndvcmtmbG93RXRhdClcclxuXHJcbiAgICBpZiAod29ya2Zsb3dFdGF0Rm9ybSkge1xyXG4gICAgICBsZXQgd29ya2Zsb3dFdGF0ID0gdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5tYXBXb3JrZmxvd0V0YXRGb3JtVG9QcmVzZW50YXRpb25TZXR0aW5nKFxyXG4gICAgICAgIHdvcmtmbG93RXRhdEZvcm0/LndvcmtmbG93RXRhdHNGb3Jtc1xyXG4gICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuIHdvcmtmbG93RXRhdFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gIH1cclxuXHJcbiAgLy8gI3JlZ2lvbiBQcmVzZW50YXRpb24gU2V0dGluZ3NcclxuICBhZGRJbnB1dHMoXHJcbiAgICBwcmVzZW50YXRpb25SZXF1ZXN0OiBQcmVzZW50YXRpb25TZXR0aW5nLFxyXG4gICAgYXBwbHlHcmlkQ29uZmlnOiBib29sZWFuID0gdHJ1ZSxcclxuICAgIHdvcmtmbG93RXRhdD86IFByZXNlbnRhdGlvblNldHRpbmcsXHJcbiAgICBkaXJlY3RpdmVFbGVtZW50czogKFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlIHwgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlKVtdID0gdGhpcy5kaXJlY3RpdmVFbGVtZW50c1xyXG4gICk6IHZvaWQge1xyXG5cclxuICAgIGlmICgoIXdvcmtmbG93RXRhdCB8fCB3b3JrZmxvd0V0YXQucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMubGVuZ3RoID09IDApXHJcbiAgICAgICYmIHRoaXMud29ya2Zsb3dJbmZvcm1hdGlvblxyXG4gICAgICAmJiB0aGlzLndvcmtmbG93SW5mb3JtYXRpb24/LndvcmtmbG93RXRhdFxyXG4gICAgICAmJiAhdGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgd29ya2Zsb3dFdGF0ID0gdGhpcy5nZXRXb3JrZmxvd0V0YXRGb3JtKClcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBoYXNQcmVzZW50YXRpb25SZXF1ZXN0ID0gcHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/Lmxlbmd0aCA+IDA7XHJcblxyXG5cclxuICAgIGlmIChoYXNQcmVzZW50YXRpb25SZXF1ZXN0KSB7XHJcbiAgICAgIGRpcmVjdGl2ZUVsZW1lbnRzID0gZGlyZWN0aXZlRWxlbWVudHMuZmlsdGVyKHggPT5cclxuICAgICAgICBwcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5zb21lKFxyXG4gICAgICAgICAgeSA9PiB5LmJsb2NrTmFtZSA9PT0geC5wcmVzZW50YXRpb25EZXNpZ25lciAmJiAoeS5pc0Jsb2NrVmlzaWJsZSA9PSB1bmRlZmluZWQgfHwgeS5pc0Jsb2NrVmlzaWJsZSA9PSB0cnVlKVxyXG4gICAgICAgICAgICAmJiB4LnRyZWF0ZWQgPT0gZmFsc2VcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlyZWN0aXZlRWxlbWVudHM/LmZvckVhY2goZGlyZWN0aXZlID0+IHtcclxuXHJcbiAgICAgIGNvbnN0IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPSBwcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmZpbmQoeCA9PiB4LmJsb2NrTmFtZSA9PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpXHJcblxyXG4gICAgICBpZiAocHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbCA9PSB1bmRlZmluZWQgfHwgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbC5pc0Jsb2NrVmlzaWJsZSkge1xyXG5cclxuICAgICAgICBsZXQgd29yZmtmbG93RXRhdEZvcm0gPSB0aGlzLl93b3JrZmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLmlzRGVzZ2luTW9kZUZyb21Xb3JrZmxvdyA/IHVuZGVmaW5lZCA6IHRoaXMuZ2V0V29ya2Zsb3dFdGF0Rm9ybSgpO1xyXG5cclxuICAgICAgICBpZiAod29yZmtmbG93RXRhdEZvcm0pIHtcclxuICAgICAgICAgIGxldCB3b3JrZmxvd0NvbmZpZyA9IHdvcmZrZmxvd0V0YXRGb3JtLnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmZpbmQoeCA9PiB4LmJsb2NrTmFtZSA9PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpXHJcblxyXG4gICAgICAgICAgaWYgKCF3b3JrZmxvd0NvbmZpZykge1xyXG4gICAgICAgICAgICBkaXJlY3RpdmUuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAod29ya2Zsb3dDb25maWcgJiYgd29ya2Zsb3dDb25maWcuaXNCbG9ja1Zpc2libGUgJiYgKHdvcmtmbG93Q29uZmlnLmlzSW5wdXRFbmFibGVkID09IHVuZGVmaW5lZCB8fCB3b3JrZmxvd0NvbmZpZy5pc0lucHV0RW5hYmxlZCA9PSB0cnVlKSkge1xyXG4gICAgICAgICAgICBkaXJlY3RpdmUuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAod29ya2Zsb3dDb25maWcgJiYgd29ya2Zsb3dDb25maWcuaXNCbG9ja1Zpc2libGUgJiYgd29ya2Zsb3dDb25maWcuaXNJbnB1dEVuYWJsZWQgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgZGlyZWN0aXZlLmRpc2FibGVJbnB1dHMoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGRpcmVjdGl2ZS5leGVjdXRlKHRydWUsIHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWw/LmNvbmZpZ3VyYXRpb24pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgICAgIGRpcmVjdGl2ZS5hZGRDaGVja2JveGVzVG9JbnB1dHModGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS53b3JrZmxvd0Zvcm1Db25maWd1cmF0aW9uKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGUgPT09IE1vZGVzLmNyZWF0ZSkge1xyXG4gICAgICB0aGlzLnByb2Nlc3NEaXNhYmxlZElucHV0cyhwcmVzZW50YXRpb25SZXF1ZXN0LCBkaXJlY3RpdmVFbGVtZW50cyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMucmVtb3ZlRW1wdHlBbmNlc3RvcnNGcm9tRWxlbWVudHMoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgcHJvY2Vzc0Rpc2FibGVkSW5wdXRzKHByZXNlbnRhdGlvblJlcXVlc3Q6IFByZXNlbnRhdGlvblNldHRpbmcsIGRpcmVjdGl2ZUVsZW1lbnRzOiAoUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUgfCBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZUJhc2UpW10gPSB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzKSB7XHJcbiAgICBpZiAodGhpcy5fbGF5b3V0SGVscGVyU2VydmljZT8uaXNEZXNpZ25Nb2RlIHx8IHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgY29uc3QgaGFzUHJlc2VudGF0aW9uUmVxdWVzdCA9IHByZXNlbnRhdGlvblJlcXVlc3Q/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5sZW5ndGggPiAwO1xyXG5cclxuICAgIGlmIChoYXNQcmVzZW50YXRpb25SZXF1ZXN0KSB7XHJcbiAgICAgIGRpcmVjdGl2ZUVsZW1lbnRzID0gZGlyZWN0aXZlRWxlbWVudHMuZmlsdGVyKHggPT5cclxuICAgICAgICBwcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzPy5zb21lKFxyXG4gICAgICAgICAgeSA9PiB5LmJsb2NrTmFtZSA9PT0geC5wcmVzZW50YXRpb25EZXNpZ25lciAmJiB5LmlzQmxvY2tWaXNpYmxlXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjb25zdCB3b3Jma2Zsb3dFdGF0Rm9ybSA9IHRoaXMuZ2V0V29ya2Zsb3dFdGF0Rm9ybSgpXHJcbiAgICBkaXJlY3RpdmVFbGVtZW50cz8uZm9yRWFjaChkaXJlY3RpdmUgPT4ge1xyXG5cclxuICAgICAgbGV0IHdvcmtmbG93Q29uZmlnID0gd29yZmtmbG93RXRhdEZvcm0/LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzLmZpbmQoeCA9PiB4LmJsb2NrTmFtZSA9PSBkaXJlY3RpdmUucHJlc2VudGF0aW9uRGVzaWduZXIpXHJcblxyXG4gICAgICBpZiAod29ya2Zsb3dDb25maWcgJiYgIXdvcmtmbG93Q29uZmlnLmlzSW5wdXRFbmFibGVkICYmICh3b3JrZmxvd0NvbmZpZy5pc0Jsb2NrVmlzaWJsZSA/PyB0cnVlKSkge1xyXG4gICAgICAgIGRpcmVjdGl2ZS5kaXNhYmxlSW5wdXRzKClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHJlbW92ZUVtcHR5QW5jZXN0b3JzRnJvbUVsZW1lbnRzKCkge1xyXG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgIHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXREaXJlY3RpdmVzKCkuZm9yRWFjaChzID0+IHMucmVtb3ZlRW1wdHlBbmNlc3RvcnMocz8udGVtcFRlbXBsYXRlUGFyZW50Tm9kZSkpXHJcbiAgICAvLyB9LCAwKTtcclxuICB9XHJcblxyXG4gIGdldFByZXNlbnRhdGlvblNldGluZ0RldGFpbFVpZChibG9ja05hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdD8ucHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHM/LmZpbmQoeCA9PiB4LmJsb2NrTmFtZSA9PSBibG9ja05hbWUpPy51aWRcclxuICB9XHJcblxyXG4gIGdldENvbXBvbmVudElkZW50aWZpZXIoKSB7XHJcbiAgICAvLyBpZiAodGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpIHtcclxuICAgIC8vICAgcmV0dXJuIGAke3RoaXMuX215TmFtZSgpfV8ke3RoaXMuZGVzY3JpbWluYXRvclZhbHVlfWBcclxuICAgIC8vIH1cclxuICAgIHJldHVybiB0aGlzLl9teU5hbWUoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzYXZlUHJvcGVydGllcygpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmluaXRUc2lHcmlkc1JlZigpXHJcblxyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gdGhpcy5fcHJlc2VudGF0aW9uU2V0dGluZ1NlcnZpY2UuZ2V0UHJlc2VudGF0aW9uU2V0dGluZ0J5Q29tcG9uZW50SWRlbnRpZmllclN5bmModGhpcy5nZXRDb21wb25lbnRJZGVudGlmaWVyKCksIHRoaXMuZGVzY3JpbWluYXRvclZhbHVlKSA/PyBuZXcgUHJlc2VudGF0aW9uU2V0dGluZygpXHJcblxyXG4gICAgaWYgKCF0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QpIHtcclxuICAgICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0ID0gbmV3IFByZXNlbnRhdGlvblNldHRpbmcoKVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsczogUHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbFtdID0gW11cclxuXHJcbiAgICB0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzPy5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcclxuXHJcbiAgICAgIGxldCBjb25maWd1cmF0aW9uID0gdW5kZWZpbmVkXHJcblxyXG5cclxuICAgICAgbGV0IGdyaWRTdGF0ZSA9IFtcclxuICAgICAgICAuLi50aGlzLnZpZXdHcmlkc0NvbXBvbmVudHMsXHJcbiAgICAgICAgLi4udGhpcy5nZW5lcmljR3JpZHNDb21wb25lbnRzLFxyXG4gICAgICAgIC4uLnRoaXMuZ2VuZXJpY0NydWRzQ29tcG9uZW50cyxcclxuICAgICAgICAuLi50aGlzLmVkaXRhYmxlR3JpZENvbXBvbmVudHNcclxuICAgICAgXVxyXG4gICAgICAgIC5maW5kKHggPT4geC5pZCA9PT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyIHx8ICgnZm9ybU5hbWUnIGluIHggJiYgeC5mb3JtTmFtZSA9PT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyKSlcclxuICAgICAgICA/LmdldFN0YXRlKCk7XHJcblxyXG4gICAgICBjb25maWd1cmF0aW9uID0gZ3JpZFN0YXRlID8gSlNPTi5zdHJpbmdpZnkoZ3JpZFN0YXRlKSA6IHVuZGVmaW5lZDtcclxuXHJcblxyXG4gICAgICBsZXQgb2JqZWN0OiBQcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID0ge1xyXG4gICAgICAgIGJsb2NrTmFtZTogZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyLFxyXG4gICAgICAgIGlzQmxvY2tWaXNpYmxlOiAhZGlyZWN0aXZlLnNob3dIaWRlQ2hlY2tib3hDb21wb25lbnRSZWY/Lmluc3RhbmNlPy5fY2hlY2tlZCxcclxuICAgICAgICB1aWQ6IHRoaXMuZ2V0UHJlc2VudGF0aW9uU2V0aW5nRGV0YWlsVWlkKGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lciA/PyBcIlwiKSxcclxuICAgICAgICBjb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uXHJcbiAgICAgIH1cclxuICAgICAgcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHMucHVzaChvYmplY3QpXHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5jb21wb25lbnRJZGVudGlmZXIgPSB0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKTtcclxuICAgIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC5kZXNjcmltaW5hdG9yVmFsdWUgPSB0aGlzLmRlc2NyaW1pbmF0b3JWYWx1ZVxyXG4gICAgdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnByZXNlbnRhdGlvblNldHRpbmdEZXRhaWxzID0gcHJlc2VudGF0aW9uU2V0dGluZ0RldGFpbHNcclxuXHJcbiAgICB0aGlzLmlzbG9hZGluZyA9IHRydWVcclxuXHJcbiAgICBpZiAodGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LnVpZCAhPSBudWxsICYmIHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdC51aWQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLnVwZGF0ZVByZXNlbnRhdGlvblNldHRpbmcodGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0LCB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QudWlkKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzQWZ0ZXJTYXZlQ29uZmlndXJhdGlvbigpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcilcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXIuc2hvd0Vycm9yTWVzc2FnZShlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5jcmVhdGVQcmVzZW50YXRpb25TZXR0aW5nKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdClcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IGFzeW5jIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc0FmdGVyU2F2ZUNvbmZpZ3VyYXRpb24oKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyLnNob3dFcnJvck1lc3NhZ2UoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzU2luZ2xlRWxlbWVudChkaXJlY3RpdmU6IFByZXNlbnRhdGlvbkRlc2lnbmVyRGlyZWN0aXZlIHwgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmVCYXNlKSB7XHJcbiAgICB0aGlzLnByZXNlbnRhdGlvblJlcXVlc3QgPSB0aGlzLl9wcmVzZW50YXRpb25TZXR0aW5nU2VydmljZS5nZXRQcmVzZW50YXRpb25TZXR0aW5nQnlDb21wb25lbnRJZGVudGlmaWVyU3luYyh0aGlzLmdldENvbXBvbmVudElkZW50aWZpZXIoKSwgdGhpcy5kZXNjcmltaW5hdG9yVmFsdWUpID8/IG5ldyBQcmVzZW50YXRpb25TZXR0aW5nKClcclxuICAgIGxldCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsID0gdGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0Py5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscz8uZmluZCh4ID0+IHguYmxvY2tOYW1lID09IGRpcmVjdGl2ZS5wcmVzZW50YXRpb25EZXNpZ25lcilcclxuXHJcblxyXG4gICAgaWYgKHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwgPT0gdW5kZWZpbmVkIHx8IHByZXNlbnRhdGlvblNldHRpbmdEZXRhaWwuaXNCbG9ja1Zpc2libGUpIHtcclxuXHJcbiAgICAgIGxldCB3b3Jma2Zsb3dFdGF0Rm9ybSA9IHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2UuaXNEZXNnaW5Nb2RlRnJvbVdvcmtmbG93ID8gdW5kZWZpbmVkIDogdGhpcy5nZXRXb3JrZmxvd0V0YXRGb3JtKCk7XHJcblxyXG4gICAgICBpZiAod29yZmtmbG93RXRhdEZvcm0pIHtcclxuICAgICAgICBsZXQgd29ya2Zsb3dDb25maWcgPSB3b3Jma2Zsb3dFdGF0Rm9ybS5wcmVzZW50YXRpb25TZXR0aW5nRGV0YWlscy5maW5kKHggPT4geC5ibG9ja05hbWUgPT0gZGlyZWN0aXZlLnByZXNlbnRhdGlvbkRlc2lnbmVyKVxyXG5cclxuICAgICAgICBpZiAoIXdvcmtmbG93Q29uZmlnKSB7XHJcbiAgICAgICAgICBkaXJlY3RpdmUuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh3b3JrZmxvd0NvbmZpZyAmJiB3b3JrZmxvd0NvbmZpZy5pc0Jsb2NrVmlzaWJsZSAmJiAod29ya2Zsb3dDb25maWcuaXNJbnB1dEVuYWJsZWQgPT0gdW5kZWZpbmVkIHx8IHdvcmtmbG93Q29uZmlnLmlzSW5wdXRFbmFibGVkID09IHRydWUpKSB7XHJcbiAgICAgICAgICBkaXJlY3RpdmUuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh3b3JrZmxvd0NvbmZpZyAmJiB3b3JrZmxvd0NvbmZpZy5pc0Jsb2NrVmlzaWJsZSAmJiB3b3JrZmxvd0NvbmZpZy5pc0lucHV0RW5hYmxlZCA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgZGlyZWN0aXZlLmRpc2FibGVJbnB1dHMoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBkaXJlY3RpdmUuZXhlY3V0ZSh0cnVlLCBwcmVzZW50YXRpb25TZXR0aW5nRGV0YWlsPy5jb25maWd1cmF0aW9uKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5fd29ya2Zsb3dDb25maWd1cmF0aW9uU2VydmljZS5pc0Rlc2dpbk1vZGVGcm9tV29ya2Zsb3cpIHtcclxuICAgICAgICBkaXJlY3RpdmUuYWRkQ2hlY2tib3hlc1RvSW5wdXRzKHRoaXMuX3dvcmtmbG93Q29uZmlndXJhdGlvblNlcnZpY2Uud29ya2Zsb3dGb3JtQ29uZmlndXJhdGlvbilcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICAvLyBEaXJlY3RpdmVzIHJlZ2lzdGVyaW5nIHdoaWxlIGRlc2lnbiBtb2RlIGlzIGFjdGl2ZSAoY29udGVudCBmaXJzdCByZW5kZXJlZFxyXG4gIC8vIGR1cmluZyBjb25maWd1cmF0aW9uLCBlLmcuIHBhbmVscyBvZiBhIG5lc3RlZCB0YWIgdmlldykgbWlzc2VkIHRoZVxyXG4gIC8vIHRvZ2dsZURlc2lnbk1vZGUoKSBwYXNzOiBkZWNvcmF0ZSB0aGVtIHRoZSBzYW1lIHdheSBhbmQgYWRkIHRoZW0gdG9cclxuICAvLyBkaXJlY3RpdmVFbGVtZW50cyBzbyBzYXZlUHJvcGVydGllcygpIGtlZXBzIGEgZGV0YWlsIGZvciB0aGVtLlxyXG4gIHByb2Nlc3NTaW5nbGVFbGVtZW50SW5EZXNpZ25Nb2RlKGRpcmVjdGl2ZTogUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUgfCBQcmVzZW50YXRpb25EZXNpZ25lckRpcmVjdGl2ZUJhc2UpIHtcclxuICAgIGlmICh0aGlzLmRpcmVjdGl2ZUVsZW1lbnRzLmluY2x1ZGVzKGRpcmVjdGl2ZSkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaXJlY3RpdmVFbGVtZW50cy5wdXNoKGRpcmVjdGl2ZSlcclxuXHJcbiAgICBkaXJlY3RpdmUuaW5zZXJ0RWxlbWVudCgpXHJcbiAgICBpZiAoZGlyZWN0aXZlIGluc3RhbmNlb2YgUHJlc2VudGF0aW9uRGVzaWduZXJEaXJlY3RpdmUpIHtcclxuICAgICAgZGlyZWN0aXZlLnNlbGVjdEFwcHJvcmlhdGVDb2x1bW5zKHRoaXMucHJlc2VudGF0aW9uUmVxdWVzdClcclxuICAgIH1cclxuICAgIGRpcmVjdGl2ZS5hZGRDaGVja2JveGVzVG9JbnB1dHModGhpcy5wcmVzZW50YXRpb25SZXF1ZXN0KVxyXG4gIH1cclxuXHJcbiAgdW5zdWJzY3JpYmVGcm9tQWN0aXZlU3Vic2NyaXRwaW9uKCkge1xyXG4gICAgaWYgKHRoaXMuX2Rlc2lnbk1vZGVGb3JtU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuX2Rlc2lnbk1vZGVGb3JtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fc2F2ZVdvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb25TdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5fc2F2ZVdvcmtmbG93Rm9ybUNvbmZpZ3VyYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbikge1xyXG4gICAgICB0aGlzLl9hZGRlZERpcmVjdGl2ZVN1YnNjcml0cGlvbi51bnN1YnNjcmliZSgpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2FkZGVkRGlyZWN0aXZlQmFzZVN1YnNjcml0cGlvbikge1xyXG4gICAgICB0aGlzLl9hZGRlZERpcmVjdGl2ZUJhc2VTdWJzY3JpdHBpb24udW5zdWJzY3JpYmUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlVHNpTW9kYWxGb290ZXIoKSB7XHJcbiAgICBjb25zdCB0c2lNb2RhbEZvb3RlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJ0c2ktbW9kYWwtZm9vdGVyXCIpXHJcblxyXG4gICAgaWYgKHRzaU1vZGFsRm9vdGVyICYmIHRzaU1vZGFsRm9vdGVyLmxhc3RDaGlsZCkge1xyXG4gICAgICB0aGlzLl9yZW5kZXJlcj8ucmVtb3ZlQ2hpbGQodHNpTW9kYWxGb290ZXIsIHRzaU1vZGFsRm9vdGVyLmxhc3RDaGlsZClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZVNhdmVCdXR0b24oKSB7XHJcbiAgICBjb25zdCB0c2lCdXR0b25SZWYgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmPy5jcmVhdGVDb21wb25lbnQoVHNpQnV0dG9uQ29tcG9uZW50KTtcclxuICAgIHRzaUJ1dHRvblJlZj8uc2V0SW5wdXQoJ3RleHQnLCAnc2hhcmVkX3RzaV9jb21wb25lbnRfc2F2ZV9jb25maWdfc2hvd19oaWRlJyk7XHJcbiAgICB0c2lCdXR0b25SZWY/LnNldElucHV0KCdpY29uJywgJ3NhdmUnKTtcclxuXHJcbiAgICB0c2lCdXR0b25SZWYhLmluc3RhbmNlLm9uQ2xpY2suZW1pdCA9ICgpID0+IHRoaXMuc2F2ZVByb3BlcnRpZXMoKTtcclxuXHJcbiAgICBjb25zdCB0c2lGb3JtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInRzaS1mb3JtXCIpXHJcblxyXG4gICAgaWYgKHRzaUZvcm0pIHtcclxuICAgICAgdGhpcy5fcmVuZGVyZXI/LmFwcGVuZENoaWxkKHRzaUZvcm0sIHRzaUJ1dHRvblJlZj8ubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBwcm9jZXNzQWZ0ZXJTYXZlQ29uZmlndXJhdGlvbigpIHtcclxuICAgIHRoaXMuaXNsb2FkaW5nID0gZmFsc2VcclxuICAgIHRoaXMuaGlkZSgpXHJcbiAgICB0aGlzLl9tZXNzYWdlSW5mb1NlcnZpY2Uuc3VjY2VzcyhMb2NhbGl6YXRpb25LZXlzLnNhdmVkU3VjY2Vzc2Z1bGx5KVxyXG4gICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUgPSBmYWxzZVxyXG4gICAgdGhpcy5kZXNpZ25Nb2RlQWN0aXZlID0gZmFsc2VcclxuICAgIC8vIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuY3VycmVudEZvcm1OYW1lID0gdW5kZWZpbmVkXHJcbiAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLl9kZXNpZ25Nb2RlRm9ybVN1YmplY3QubmV4dChmYWxzZSlcclxuICAgIGF3YWl0IHRoaXMuX3ByZXNlbnRhdGlvblNldHRpbmdTZXJ2aWNlLmxvYWRQcmVzZW50YXRpb25TZXR0aW5ncygpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09IENvbXBvbmVudF9Nb2Rlcy5FRElUICYmICF0aGlzLl9pbnB1dFJlZ2lzdHJ5Lmhhc0FueURpcnR5SW5wdXQoKSAmJiAhdGhpcy5hbGxvd1NhdmVXaXRob3V0Q2hhbmdlcykge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlSW5mb1NlcnZpY2Uud2FybihMb2NhbGl6YXRpb25LZXlzLm5vQ2hhbmdlc0RldGVjdGVkKTtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBjaGFuZ2VzIGRldGVjdGVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgdGhpcy5yZXF1aXJlZElucHV0cyA9IHRoaXMuX2lucHV0UmVnaXN0cnkuZ2V0QWxsKCkuZmlsdGVyKGlucCA9PiBpbnAuaXNSZXF1aXJlZCAmJiBpbnAuZGlzYWJsZWQgPT09IGZhbHNlKTtcclxuICAgIHRoaXMuZmF1bHR5SW5wdXRzID0gW107XHJcbiAgICB0aGlzLmlzRm9ybVZhbGlkID0gdGhpcy5yZXF1aXJlZElucHV0cy5ldmVyeShpbnB1dCA9PiBpbnB1dC5pc1ZhbGlkKCkuaXNWYWxpZCA9PT0gdHJ1ZSlcclxuXHJcbiAgICB0aGlzLnJlcXVpcmVkSW5wdXRzLmZvckVhY2goaW5wdXQgPT4ge1xyXG4gICAgICBsZXQgZnZyID0gaW5wdXQuaXNWYWxpZCgpO1xyXG4gICAgICBpZiAoZnZyLmlzVmFsaWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5mYXVsdHlJbnB1dHMucHVzaChmdnIpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgaWYgKHRoaXMuaXNGb3JtVmFsaWQgPT09IGZhbHNlICYmIHRoaXMuZmF1bHR5SW5wdXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5mYXVsdHlJbnB1dHMpXHJcbiAgICAgIGxldCBmYXVsdHlJbnB1dHNOYW1lcyA9IFwiXCI7XHJcbiAgICAgIHRoaXMuZmF1bHR5SW5wdXRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLmZhdWx0eUlucHV0cy5sZW5ndGggLSAxKVxyXG4gICAgICAgICAgZmF1bHR5SW5wdXRzTmFtZXMgKz0gYCR7aXRlbS5pbnB1dE5hbWV9LiBgXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgZmF1bHR5SW5wdXRzTmFtZXMgKz0gYCR7aXRlbS5pbnB1dE5hbWV9LCBgXHJcbiAgICAgIH0pXHJcbiAgICAgIGZhdWx0eUlucHV0c05hbWVzID0gZmF1bHR5SW5wdXRzTmFtZXMucmVwbGFjZSgvLCQvLCAnJyk7XHJcbiAgICAgIGlmICh0aGlzLmZhdWx0eUlucHV0cy5zb21lKGZpID0+IGZpLmVycm9yID09PSBGb3JtVmFsaWRhdGlvbkVycm9yLlJlcXVpcmVkKSkge1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VJbmZvU2VydmljZS53YXJuKGZhdWx0eUlucHV0c05hbWVzLCB0aGlzLmxvY2FsaXplPy50cmFuc2Zvcm0oJ3RzaV9mb3JtX2Jhc2VfYXV0b192YWxpZGF0aW9uX3JlcXVpcmVkX2ZpZWxkX3RpdGxlJykpXHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gYExlcyBjaGFtcHMgJHtmYXVsdHlJbnB1dHNOYW1lc30gc29udCBvYmxpZ2F0b2lyZS5gO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuZmF1bHR5SW5wdXRzLnNvbWUoZmkgPT4gZmkuZXJyb3IgPT09IEZvcm1WYWxpZGF0aW9uRXJyb3IuTWF4TGVuZ3RoKSkge1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VJbmZvU2VydmljZS53YXJuKGBcclxuICAgICAgICAgICR7dGhpcy5sb2NhbGl6ZT8udHJhbnNmb3JtKCd0c2lfZm9ybV9iYXNlX2F1dG9fdmFsaWRhdGlvbl90aGVfZmllbGQnKX1cclxuICAgICAgICAgICR7dGhpcy5mYXVsdHlJbnB1dHNbMF0uaW5wdXROYW1lfSBcclxuICAgICAgICAgICR7dGhpcy5sb2NhbGl6ZT8udHJhbnNmb3JtKCd0c2lfZm9ybV9iYXNlX2F1dG9fdmFsaWRhdGlvbl9tYXhfbGVuZ3RoJyl9XHJcbiAgICAgICAgICAke3RoaXMuZmF1bHR5SW5wdXRzWzBdLmRhdGF9ICR7dGhpcy5sb2NhbGl6ZT8udHJhbnNmb3JtKCd0c2lfZm9ybV9iYXNlX2F1dG9fdmFsaWRhdGlvbl9tYXhfbGVuZ3RoX2NoYXJzJyl9YCxcclxuICAgICAgICAgIHRoaXMubG9jYWxpemU/LnRyYW5zZm9ybSgndHNpX2Zvcm1fYmFzZV9hdXRvX3ZhbGlkYXRpb25fbWF4X2xlbmd0aF9maWVsZF90aXRsZScpKVxyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGBMZSBjaGFtcCAke3RoaXMuZmF1bHR5SW5wdXRzWzBdLmlucHV0TmFtZX0gbmUgZG9pdCBwYXMgZMOpcGFzc2VyICR7dGhpcy5mYXVsdHlJbnB1dHNbMF0uZGF0YX0gY2FyYWN0w6hyZXMuYDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmZhdWx0eUlucHV0cy5zb21lKGZpID0+IGZpLmVycm9yID09PSBGb3JtVmFsaWRhdGlvbkVycm9yLk91dE9mUmFuZ2UpKSB7XHJcbiAgICAgICAgLy90byBkb1xyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGBMZSBjaGFtcCAke3RoaXMuZmF1bHR5SW5wdXRzWzBdLmlucHV0TmFtZX0gZG9pdCDDqnRyZSBkYW5zIGwnaW50ZXJ2YWxsZS5gO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnVwZGF0ZUZvcm1TdGF0ZSh7IGlzVmFsaWQ6IGZhbHNlLCBpc1N1Ym1pdHRlZDogdHJ1ZSB9KTtcclxuXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlRm9ybVN0YXRlKHsgaXNWYWxpZDogdHJ1ZSwgaXNTdWJtaXR0ZWQ6IHRydWUgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZvcm1TdGF0ZShmb3JtU3RhdGU6IEZvcm1TdGF0ZSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9nZW5lcmljVmFsaWRhdGlvblN0YXRlU2VydmljZSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuX2dlbmVyaWNWYWxpZGF0aW9uU3RhdGVTZXJ2aWNlLnVwZGF0ZUZvcm1TdGF0ZShmb3JtU3RhdGUpO1xyXG5cclxuICAgIHRoaXMuZWRpdGFibGVHcmlkQ29tcG9uZW50cyA9IHRoaXMuX3ByZXNlbnRhdGlvbkRlc2lnbmVyU2VydmljZS5nZXRFZGl0YWJsZUdyaWRzKCk7XHJcbiAgICB0aGlzLmVkaXRhYmxlR3JpZENvbXBvbmVudHMuZm9yRWFjaCgoZSkgPT4gZS51cGRhdGVGb3JtU3RhdGUoZm9ybVN0YXRlKSk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG4iLCI8cD50c2ktZm9ybS1iYXNlIHdvcmtzITwvcD5cclxuIl19