tnx-shared 5.3.301 → 5.3.303

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.
@@ -49,6 +49,7 @@ export declare abstract class ComponentBase implements OnDestroy {
49
49
  isNotNullArray(arr: any): boolean;
50
50
  funcSortDefault(a: any, b: any): 1 | -1 | 0;
51
51
  export(data: ExportItem, version?: number): Promise<ResponseResult>;
52
+ stringifyData(obj: any): string;
52
53
  exportExcelV5(data: any, templateCode: string, fileName: string): Promise<ResponseResult>;
53
54
  exportV4(data: ExportItem): Promise<ResponseResult>;
54
55
  exportV5(data: ExportItem): Promise<ResponseResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"component-base.d.ts","sourceRoot":"","sources":["../../../../projects/tnx-shared/src/lib/classes/base/component-base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"component-base.d.ts","sourceRoot":"","sources":["../../../../projects/tnx-shared/src/lib/classes/base/component-base.ts"],"names":[],"mappings":"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"}
@@ -157,11 +157,14 @@ export class ComponentBase {
157
157
  return;
158
158
  }
159
159
  }
160
+ stringifyData(obj) {
161
+ return JSON.stringify(obj, function (k, v) { return v === undefined ? null : v; });
162
+ }
160
163
  exportExcelV5(data, templateCode, fileName) {
161
164
  const sheet = new ExportItem({
162
165
  type: ExportItemType.ExcelSheet,
163
166
  templateCode,
164
- data: JSON.stringify(data),
167
+ data: this.stringifyData(data),
165
168
  name: 'Sheet1'
166
169
  });
167
170
  const file = new ExportItem({
@@ -602,4 +605,4 @@ ComponentBase.propDecorators = {
602
605
  parentModel: [{ type: Input }],
603
606
  parentContext: [{ type: Input }]
604
607
  };
605
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFD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QUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDbkQ7UUFDRCxPQUFPLENBQUMsRUFBRTtZQUNOLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztTQUN0QztJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBWSxFQUFFLFlBQVksR0FBRyxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNmLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQztTQUNoRDtRQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTyxDQUFDLENBQVM7UUFDYixPQUFPLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7OztZQXhtQkosU0FBUzs7O1lBMUNVLFFBQVE7Ozs7MEJBNEN2QixLQUFLOzRCQUVMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBNb2RlbFNoYXJlTGlua0J5UGVybWlzc2lvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2hhcmUtbGluay1ieS1wZXJtaXNzaW9uL21vZGVscy9zaGFyZS1saW5rLWJ5LXBlcm1pc3Npb24nO1xuaW1wb3J0IHsgVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRhbnRzJztcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuaW1wb3J0IHsgUGVybWlzc2lvbkJhc2UgfSBmcm9tICcuLi8uLi9lbnVtcy9jb21tb24nO1xuaW1wb3J0IHsgRXhwb3J0SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9leHBvcnQtaXRlbSc7XG5pbXBvcnQgeyBGaWx0ZXIsIFNvcnQsIFN0cmluZ0NvbXBhcmVPcHRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jcnVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVY0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RlbXBsYXRlLXY0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVGVtcGxhdGVJbnN0YW5jZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90ZW1wbGF0ZWluc3RhbmNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0U3RyaW5nRGF0ZVZOIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGF0ZSc7XG5pbXBvcnQgeyBFeHBvcnRJdGVtVHlwZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIEFkZHJlc3NDb250cm9sU2NoZW1hLFxuICAgIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEsXG4gICAgQ2hlY2tib3hDb250cm9sU2NoZW1hLFxuICAgIENvQ2F1VG9DaHVjQ29udHJvbFNjaGVtYSxcbiAgICBDb0NhdVRvQ2h1Y1BpY2tlckNvbnRyb2xTY2hlbWEsXG4gICAgQ3J1ZExpc3RTZXR0aW5nLFxuICAgIERhdGVUaW1lQ29udHJvbFNjaGVtYSxcbiAgICBEcm9wZG93bkNvbnRyb2xTY2hlbWEsXG4gICAgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hLFxuICAgIEZpbGVVcGxvYWRDb250cm9sU2NoZW1hLFxuICAgIEZvcm1TY2hlbWFCYXNlLFxuICAgIE1vZGVsU2NoZW1hLFxuICAgIE9wZXJhdG9yLFxuICAgIFBvcHVwU2l6ZSxcbiAgICBTd2l0Y2hDb250cm9sU2NoZW1hLFxuICAgIFRhYmxlU2NoZW1hXG59IGZyb20gJy4uL2Zvcm0tc2NoZW1hJztcblxuZXhwb3J0IGNvbnN0IEVYUE9SVF9WRVJTSU9OX1Y0ID0gNDtcbmV4cG9ydCBjb25zdCBFWFBPUlRfVkVSU0lPTl9WNSA9IDU7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIHBhcmVudE1vZGVsOiBhbnk7XG5cbiAgICBASW5wdXQoKSBzZXQgcGFyZW50Q29udGV4dCh2YWx1ZTogQ29tcG9uZW50Q29udGV4dFNlcnZpY2UpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQucGFyZW50ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZ2V0IHBhcmVudENvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQucGFyZW50O1xuICAgIH1cblxuICAgIG1vZGVsOiBhbnk7XG4gICAgbW9kZWxTY2hlbWE6IE1vZGVsU2NoZW1hW10gPSBbXTtcbiAgICBjb250ZXh0OiBDb21wb25lbnRDb250ZXh0U2VydmljZTtcbiAgICByb290TW9kZWw6IGFueTtcbiAgICByb290Q29udGV4dDogQ29tcG9uZW50Q29udGV4dFNlcnZpY2U7XG5cbiAgICBndWlkRW1wdHkgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcbiAgICBwdWJsaWMgX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PGFueT47XG4gICAgcHJvdGVjdGVkIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfYXBwQ29udGV4dDogQXBwbGljYXRpb25Db250ZXh0U2VydmljZTtcbiAgICBwcm90ZWN0ZWQgX2NvbXBvbmVudENvbnRleHQ6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yO1xuICAgIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlO1xuICAgIHByb3RlY3RlZCBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfZGF0ZVBpcGU6IERhdGVQaXBlO1xuICAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3RvciwgY29tcG9uZW50TmFtZT86IHN0cmluZykge1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG4gICAgICAgIHRoaXMuX2FwcENvbnRleHQgPSBpbmplY3Rvci5nZXQoQXBwbGljYXRpb25Db250ZXh0U2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHQgPSBpbmplY3Rvci5nZXQoQ29tcG9uZW50Q29udGV4dFNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSA9IGluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KENydWRTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZSA9IGluamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fZGF0ZVBpcGUgPSBpbmplY3Rvci5nZXQoRGF0ZVBpcGUpO1xuXG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9hcHBDb250ZXh0LmdldFJvb3RDb250ZXh0KCk7XG4gICAgICAgIGlmICghcm9vdCkge1xuICAgICAgICAgICAgdGhpcy5fYXBwQ29udGV4dC5hZGRSb290Q29udGV4dChcbiAgICAgICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0LFxuICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHQgPSB0aGlzLl9hcHBDb250ZXh0LmFkZENvbXBvbmVudENvbnRleHQodGhpcy5fY29tcG9uZW50Q29udGV4dCwgdGhpcy5fYWN0aXZhdGVkUm91dGUsIHRoaXMuZ2V0Q29tcG9uZW50SWQoKSk7XG4gICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5fY29tcG9uZW50Q29udGV4dC5kYXRhO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gdGhpcy5fY29tcG9uZW50Q29udGV4dDtcbiAgICAgICAgICAgIHRoaXMucm9vdENvbnRleHQgPSB0aGlzLl9jb21wb25lbnRDb250ZXh0LnJvb3Q7XG4gICAgICAgICAgICB0aGlzLnJvb3RNb2RlbCA9IHRoaXMucm9vdENvbnRleHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuY29tcG9uZW50U3VicyA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gZGVzdHJveVxuICAgICAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAvLyBVbnN1YnNjcmliZSBmcm9tIGFsbCBzdWJzY3JpcHRpb25zXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLm5leHQoMSk7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLmNvbXBsZXRlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuY29tcG9uZW50U3Vicykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzdWIgb2YgdGhpcy5tb2RlbC5jb21wb25lbnRTdWJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN1Yikgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGVzdHJveUNvbnRleHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbXBvbmVudElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb21tb25TZXJ2aWNlLnJhbmRvbVN0cmluZygpO1xuICAgIH1cblxuICAgIHN1YnNjcmliZVJvb3QobmFtZTogc3RyaW5nLCBjYWxsQmFjazogYW55KSB7XG4gICAgICAgIHRoaXMubW9kZWwuY29tcG9uZW50U3Vicy5wdXNoKHRoaXMucm9vdENvbnRleHQuc3Vic2NyaWJlKG5hbWUsIGNhbGxCYWNrKSk7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlKG5hbWU6IHN0cmluZywgY2FsbEJhY2s6IGFueSkge1xuICAgICAgICB0aGlzLm1vZGVsLmNvbXBvbmVudFN1YnMucHVzaCh0aGlzLmNvbnRleHQuc3Vic2NyaWJlKG5hbWUsIGNhbGxCYWNrKSk7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlT25jZShuYW1lOiBzdHJpbmcsIGNhbGxCYWNrOiBhbnkpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5jb21wb25lbnRTdWJzLnB1c2godGhpcy5jb250ZXh0LnN1YnNjcmliZU9uY2UobmFtZSwgY2FsbEJhY2spKTtcbiAgICB9XG5cbiAgICByZXBsYXlTdWJzY3JpYmUobmFtZTogc3RyaW5nLCBjYWxsQmFjazogYW55KSB7XG4gICAgICAgIHRoaXMubW9kZWwuY29tcG9uZW50U3Vicy5wdXNoKHRoaXMuY29udGV4dC5yZXBsYXlTdWJzY3JpYmUobmFtZSwgY2FsbEJhY2spKTtcbiAgICB9XG5cbiAgICB0cmFja0J5RnVuY0RlZmF1bHQoaW5kZXgsIGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHRyYWNrQnlGdW5jSWQoaW5kZXgsIGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfVxuXG4gICAgaGFuZGxlUmVzcG9uc2UocmVzOiBSZXNwb25zZVJlc3VsdCwgbWVzc2FnZT86IHN0cmluZywgY2FsbEJhY2s/OiBGdW5jdGlvbiwgY2FsbEJhY2tFcnJvcj86IEZ1bmN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jcnVkU2VydmljZS5oYW5kbGVSZXNwb25zZShyZXMsIG1lc3NhZ2UsIGNhbGxCYWNrLCBjYWxsQmFja0Vycm9yKTtcbiAgICB9XG5cbiAgICBoYW5kbGVSZXNwb25zZVdpdGhXYWl0Qm94KHJlczogUmVzcG9uc2VSZXN1bHQsIG1lc3NhZ2U/OiBzdHJpbmcsIGNhbGxCYWNrPzogRnVuY3Rpb24sIGNhbGxCYWNrRXJyb3I/OiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLmhpZGVXYWl0Qm94KCk7XG4gICAgICAgIGlmICghcmVzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGlmIChyZXMuZXJyb3IgPT0gVmFsaWRhdGlvbi5FUlJfU1lTX0RFVikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVzLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKCdDw7MgbOG7l2kgeOG6o3kgcmEuIExpw6puIGjhu4cgcXXhuqNuIHRy4buLIHZpw6puIMSR4buDIGJp4bq/dCB0aMOqbSBjaGkgdGnhur90LicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5tZXNzYWdlICE9IG51bGwgJiYgcmVzLm1lc3NhZ2UgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcocmVzLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcocmVzLmVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2FsbEJhY2tFcnJvcikgY2FsbEJhY2tFcnJvcihyZXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93U3VjY2VzcyhtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsbEJhY2spIGNhbGxCYWNrKHJlcyk7XG4gICAgfVxuXG4gICAgaXNOb3ROdWxsQXJyYXkoYXJyKSB7XG4gICAgICAgIHJldHVybiBhcnIgIT0gbnVsbCAmJiBhcnIubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBmdW5jU29ydERlZmF1bHQoYSwgYikge1xuICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICBpZiAoYSA9PSBiKSByZXR1cm4gMDtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8vIGFkZEV4cG9ydEpvYihqb2I6IEV4cG9ydEpvYikge1xuICAgIC8vICAgICB0aGlzLmNvbnRleHQuYWRkRXhwb3J0Sm9iKGpvYik7XG4gICAgLy8gfVxuXG4gICAgZXhwb3J0KGRhdGE6IEV4cG9ydEl0ZW0sIHZlcnNpb24gPSBFWFBPUlRfVkVSU0lPTl9WNCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ2V4cG9ydCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gICAgICAgIHN3aXRjaCAodmVyc2lvbikge1xuICAgICAgICAgICAgY2FzZSBFWFBPUlRfVkVSU0lPTl9WNDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRWNChkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRVhQT1JUX1ZFUlNJT05fVjU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0VjUoZGF0YSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEV4cG9ydCB2ZXJzaW9uOiAke3ZlcnNpb259IGlzIG5vdCBzdXBwb3J0ZWQhYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0RXhjZWxWNShkYXRhOiBhbnksIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCBzaGVldCA9IG5ldyBFeHBvcnRJdGVtKHtcbiAgICAgICAgICAgIHR5cGU6IEV4cG9ydEl0ZW1UeXBlLkV4Y2VsU2hlZXQsXG4gICAgICAgICAgICB0ZW1wbGF0ZUNvZGUsXG4gICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShkYXRhKSxcbiAgICAgICAgICAgIG5hbWU6ICdTaGVldDEnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRXhwb3J0SXRlbSh7XG4gICAgICAgICAgICB0eXBlOiBFeHBvcnRJdGVtVHlwZS5FeGNlbEZpbGUsXG4gICAgICAgICAgICBuYW1lOiBmaWxlTmFtZVxuICAgICAgICB9KTtcbiAgICAgICAgZmlsZS5jaGlsZHJlbiA9IFtzaGVldF07XG4gICAgICAgIHJldHVybiB0aGlzLmV4cG9ydChmaWxlLCBFWFBPUlRfVkVSU0lPTl9WNSk7XG4gICAgfVxuXG4gICAgZXhwb3J0VjQoZGF0YTogRXhwb3J0SXRlbSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVWNFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVGVtcGxhdGVWNFNlcnZpY2UpO1xuICAgICAgICByZXR1cm4gdGVtcGxhdGVWNFNlcnZpY2UuZXhwb3J0Tm9ybWFsKGRhdGEpO1xuICAgIH1cblxuICAgIGV4cG9ydFY1KGRhdGE6IEV4cG9ydEl0ZW0pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlKTtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlLmV4cG9ydE5vcm1hbChkYXRhKTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXJDb250YWluZXIobG9naWM6ICdhbmQnIHwgJ29yJywgLi4uZmlsdGVyczogRmlsdGVyW10pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgbG9naWMsXG4gICAgICAgICAgICBmaWx0ZXJzOiBbLi4uZmlsdGVyc11cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3RmlsdGVyKGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IGFueSwgdmFsdWVJc0ZpZWxkOiBib29sZWFuID0gZmFsc2UsIHN0cmluZ0NvbXBhcmVPcHRpb246IFN0cmluZ0NvbXBhcmVPcHRpb24gPSBTdHJpbmdDb21wYXJlT3B0aW9uLk5vcm1hbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29tbW9uU2VydmljZS5uZXdGaWx0ZXIoZmllbGQsIG9wZXJhdG9yLCB2YWx1ZSwgdmFsdWVJc0ZpZWxkLCBzdHJpbmdDb21wYXJlT3B0aW9uKTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXJWNChmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgZmllbGQsIG9wZXJhdG9yLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3QmluZGluZ0ZpbHRlcihjb2x1bW46IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCBzb3VyY2VGaWVsZDogc3RyaW5nLCBzdWJGaWVsZD86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICBmaWVsZDogY29sdW1uLFxuICAgICAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgICAgICBzb3VyY2VGaWVsZCxcbiAgICAgICAgICAgIHN1YkZpZWxkXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ld1NvcnQoZmllbGQ6IHN0cmluZywgZGlyOiAxIHwgLTEgPSAxKSB7XG4gICAgICAgIHJldHVybiBuZXcgU29ydCh7IGZpZWxkLCBkaXIgfSk7XG4gICAgfVxuXG4gICAgbmV3UG9wdXBTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBtYXhpbWl6ZSA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgUG9wdXBTaXplKHtcbiAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIG1heGltaXplXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNob3dXYWl0Qm94KG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuU0hPV19XQUlUX0JPWCwge1xuICAgICAgICAgICAgc2hvdzogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2VcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGlkZVdhaXRCb3goKSB7XG4gICAgICAgIHRoaXMucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULlNIT1dfV0FJVF9CT1gsIHtcbiAgICAgICAgICAgIHNob3c6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvcHlUb0NsaXBib2FyZCA9IHN0ciA9PiB7XG4gICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICAgICAgZWwudmFsdWUgPSBzdHI7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAnJyk7XG4gICAgICAgIGVsLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgZWwuc3R5bGUubGVmdCA9ICctOTk5OXB4JztcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7XG4gICAgICAgIGVsLnNlbGVjdCgpO1xuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVsKTtcbiAgICB9O1xuXG4gICAgYWRkRGlzdGluY3QobHN0LCB2YWx1ZSkge1xuICAgICAgICBpZiAobHN0LmluZGV4T2YodmFsdWUpID09IC0xKSB7XG4gICAgICAgICAgICBsc3QucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGREaXN0aW5jdExpc3QobHN0LCBsc3RWYWx1ZSkge1xuICAgICAgICBpZiAoIWxzdFZhbHVlIHx8ICFsc3RWYWx1ZS5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgbHN0VmFsdWUuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpZiAobHN0LmluZGV4T2YodmFsdWUpID09IC0xKSB7XG4gICAgICAgICAgICAgICAgbHN0LnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIENvbnZlcnQgMSBhcnJheSA9PiBOIGFycmF5XG4gICAgKiBAcGFyYW0gbHN0IE3huqNuZyBwaOG6p24gdOG7rVxuICAgICogQHBhcmFtIGZpZWxkcyBN4bqjbmcgY8OhYyBmaWVsZCwgbuG6v3UgZmllbGQgbMOgIGtp4buDdSBhcnJheSB0aMOsIG5naMSpYSBsw6AgbcO6biBtYXAgZGlzdGluY3RcbiAgICAqIEByZXR1cm5zIE4gQXJyYXlcbiAgICAqL1xuICAgIG11bHRpcGxlTWFwKGxzdCwgLi4uZmllbGRzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBjb25zdCBmdW5jcyA9IFtdO1xuICAgICAgICBjb25zdCByYXdGaWVsZHMgPSBbXTtcbiAgICAgICAgY29uc3QgX3B1c2ggPSAobHN0LCB2YWx1ZSkgPT4gbHN0LnB1c2godmFsdWUpO1xuICAgICAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChbXSk7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICBmdW5jcy5wdXNoKHRoaXMuYWRkRGlzdGluY3QpO1xuICAgICAgICAgICAgICAgIHJhd0ZpZWxkcy5wdXNoKGZpZWxkWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZ1bmNzLnB1c2goX3B1c2gpO1xuICAgICAgICAgICAgICAgIHJhd0ZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgcmF3RmllbGRzLmZvckVhY2goKGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGZ1bmNzW2luZGV4XShyZXN1bHRbaW5kZXhdLCBpdGVtW2ZpZWxkXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgYXN5bmMgX3ByaW50UGRmKGJhc2VTZXJ2aWNlOiBCYXNlU2VydmljZSwgaWQ6IHN0cmluZywgcm93RGF0YTogYW55KSB7XG4gICAgICAgIGNvbnN0IGl0ZW1EZXRhaWwgPSAoYXdhaXQgYmFzZVNlcnZpY2UuZ2V0RGV0YWlsKGlkKSkuZGF0YTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGJhc2VTZXJ2aWNlLmdldERhdGFUcmluaEt5KGl0ZW1EZXRhaWwsIHJvd0RhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJpbnRQZGZCYXNlKGJhc2VTZXJ2aWNlLCBpZCwgZGF0YSk7XG4gICAgfVxuXG4gICAgYXN5bmMgX3ByaW50UGRmQnlTY2hlbWEoYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlLCBtb2RlbDogYW55LCBzY2hlbWFzOiBGb3JtU2NoZW1hQmFzZVtdKSB7XG4gICAgICAgIGNvbnN0IHRtcE1vZGVsID0geyAuLi5tb2RlbCB9O1xuICAgICAgICBkZWxldGUgdG1wTW9kZWwucHJpbnRGaWxlSWQ7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBbXTtcbiAgICAgICAgYXdhaXQgdGhpcy5fZ2V0S2V5VmFsdWUoZGF0YSwgJycsIHNjaGVtYXMsIHRtcE1vZGVsKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByaW50UGRmQmFzZShiYXNlU2VydmljZSwgbW9kZWwuaWQsIGRhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3ByaW50UGRmQmFzZShiYXNlU2VydmljZTogQmFzZVNlcnZpY2UsIGlkOiBzdHJpbmcsIGRhdGE6IGFueVtdKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYmFzZVNlcnZpY2UuZXhwb3J0VG9QZGYoaWQsIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICB0aWV1RGU6IGJhc2VTZXJ2aWNlLm9iamVjdE5hbWUsXG4gICAgICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHJldHVybiA8UmVzcG9uc2VSZXN1bHQ+e1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdDw7MgbOG7l2kgeOG6o3kgcmEnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRMYWJlbChwcmVmaXg6IHN0cmluZywgbGFiZWw6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7bGFiZWx9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRWYWx1ZUZyb21EYXRhc291cmNlKGl0ZW1TZWxlY3RlZDogYW55LCBpc011bHRpcGxlOiBib29sZWFuLCBmdW5jR2V0TGFiZWw6IChpdGVtKSA9PiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgaWYgKGlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlmIChpdGVtU2VsZWN0ZWQgJiYgaXRlbVNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0ZW1TZWxlY3RlZC5tYXAocSA9PiBmdW5jR2V0TGFiZWwocS52YWx1ZSkpLmpvaW4oJywgJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXRlbVNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBmdW5jR2V0TGFiZWwoaXRlbVNlbGVjdGVkLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgYXN5bmMgX2dldEtleVZhbHVlKHJlc3VsdDogYW55W10sIHByZWZpeDogc3RyaW5nLCBzY2hlbWFzOiBGb3JtU2NoZW1hQmFzZVtdLCBtb2RlbDogYW55KSB7XG4gICAgICAgIGZvciAoY29uc3Qgc2NoZW1hIG9mIHNjaGVtYXMpIHtcbiAgICAgICAgICAgIGlmICghc2NoZW1hLmhpZGRlblxuICAgICAgICAgICAgICAgICYmIHNjaGVtYS5maWVsZCAhPSAncHJpbnRGaWxlSWQnXG4gICAgICAgICAgICAgICAgJiYgc2NoZW1hLmxhYmVsXG4gICAgICAgICAgICAgICAgJiYgIShzY2hlbWEgaW5zdGFuY2VvZiBGaWxlVXBsb2FkQ29udHJvbFNjaGVtYSlcbiAgICAgICAgICAgICAgICAmJiAhKHNjaGVtYSBpbnN0YW5jZW9mIEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IG1vZGVsW3NjaGVtYS5maWVsZF07XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5nZXRMYWJlbChwcmVmaXgsIHNjaGVtYS5sYWJlbCksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgVGFibGVTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wU2NoZW1hID0gPFRhYmxlU2NoZW1hPnNjaGVtYTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHZhbHVlID0gW107XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExhYmVsKHByZWZpeCwgc2NoZW1hLmxhYmVsKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByb3dEYXRhIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZ2V0S2V5VmFsdWUocmVzdWx0LCBgJHtwcmVmaXh9XFx0YCwgdG1wU2NoZW1hLnJvd1RlbXBsYXRlLCByb3dEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zcGxpY2UocmVzdWx0Lmxlbmd0aCAtIDEsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIEFkZHJlc3NDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtcFNjaGVtYSA9IDxBZGRyZXNzQ29udHJvbFNjaGVtYT5zY2hlbWE7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExhYmVsKHByZWZpeCwgc2NoZW1hLmxhYmVsKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9nZXRLZXlWYWx1ZShyZXN1bHQsIGAke3ByZWZpeH1cXHRgLCB0bXBTY2hlbWEuX2NvbXBvbmVudC5zZXR0aW5nLnNjaGVtYSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIERhdGVUaW1lQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRTdHJpbmdEYXRlVk4odmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIENvQ2F1VG9DaHVjUGlja2VyQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVNlbGVjdGVkID0gYXdhaXQgc2NoZW1hLl9jb21wb25lbnQuY29udHJvbFBpY2tlci5fY29tcG9uZW50LmdldERhdGFTZWxlY3RlZFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtcFNjaGVtYSA9IDxDb0NhdVRvQ2h1Y1BpY2tlckNvbnRyb2xTY2hlbWE+c2NoZW1hO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZ1bmNHZXRMYWJlbCA9IHRtcFNjaGVtYS5mdW5jR2V0TGFiZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZVt0bXBTY2hlbWEuZGlzcGxheUZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZUZyb21EYXRhc291cmNlKGl0ZW1TZWxlY3RlZCwgc2NoZW1hLm11bHRpcGxlLCBpdGVtID0+IGl0ZW0udGVuKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpdGVtU2VsZWN0ZWQubWFwKHEgPT4gdG1wU2NoZW1hLmZ1bmNHZXRMYWJlbChxLnZhbHVlKSkuam9pbignLCAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaXRlbVNlbGVjdGVkLm1hcChxID0+IHEudmFsdWVbdG1wU2NoZW1hLmRpc3BsYXlGaWVsZF0pLmpvaW4oJywgJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0TGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc2NoZW1hLmZ1bmNHZXRMYWJlbChpdGVtU2VsZWN0ZWQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpdGVtU2VsZWN0ZWQudmFsdWVbc2NoZW1hLmRpc3BsYXlGaWVsZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVNlbGVjdGVkID0gYXdhaXQgc2NoZW1hLl9jb21wb25lbnQuZ2V0RGF0YVNlbGVjdGVkVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wU2NoZW1hID0gPEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWE+c2NoZW1hO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZ1bmNHZXRMYWJlbCA9IHRtcFNjaGVtYS5mdW5jR2V0TGFiZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bdG1wU2NoZW1hLmRpc3BsYXlGaWVsZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlRnJvbURhdGFzb3VyY2UoaXRlbVNlbGVjdGVkLCBzY2hlbWEubXVsdGlwbGUsIGZ1bmNHZXRMYWJlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgQ29DYXVUb0NodWNDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0bXBTY2hlbWEgPSA8Q29DYXVUb0NodWNDb250cm9sU2NoZW1hPnNjaGVtYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4gaXRlbS5sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhU291cmNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpdGVtU2VsZWN0ZWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcFNjaGVtYS5fY29tcG9uZW50Lm11bHRpU2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZSA9IHRtcFNjaGVtYS5fY29tcG9uZW50Lm11bHRpU2VsZWN0Ll9vcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TZWxlY3RlZCA9IGRhdGFTb3VyY2UuZmlsdGVyKHEgPT4gdmFsdWUuaW5kZXhPZih4ID0+IHggPT0gcS52YWx1ZSkpLm1hcChxID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZSA9IHRtcFNjaGVtYS5fY29tcG9uZW50LmRyb3Bkb3duLl9vcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TZWxlY3RlZCA9IGRhdGFTb3VyY2UuZmluZChxID0+IHEudmFsdWUgPT0gdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNlbGVjdGVkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1TZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZ2V0VmFsdWVGcm9tRGF0YXNvdXJjZShpdGVtU2VsZWN0ZWQsIHNjaGVtYS5tdWx0aXBsZSwgZnVuY0dldExhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBEcm9wZG93bkNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtcFNjaGVtYSA9IDxEcm9wZG93bkNvbnRyb2xTY2hlbWE+c2NoZW1hO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW1TZWxlY3RlZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNlbGVjdGVkID0gc2NoZW1hLl9jb21wb25lbnQuZGF0YVNvdXJjZUludGVybmFsLmZpbHRlcihxID0+IHZhbHVlLmluZGV4T2YoeCA9PiB4ID09IHEudmFsdWVbcS52YWx1ZS5fZHJvcGRvd252YWx1ZV0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TZWxlY3RlZCA9IHNjaGVtYS5fY29tcG9uZW50LmRhdGFTb3VyY2VJbnRlcm5hbC5maW5kKHEgPT4gcS52YWx1ZVtxLnZhbHVlLl9kcm9wZG93bnZhbHVlXSA9PSB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlRnJvbURhdGFzb3VyY2UoaXRlbVNlbGVjdGVkLCBzY2hlbWEubXVsdGlwbGUsIHRtcFNjaGVtYS5mdW5jR2V0TGFiZWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIENoZWNrYm94Q29udHJvbFNjaGVtYSB8fCBzY2hlbWEgaW5zdGFuY2VvZiBTd2l0Y2hDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAnS2jDtG5nJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gJ0PDsyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gVmFsdWUgPSB1bmRlZmluZWQgdGjDrCBraGkgc2VyaWFsaXplIHPhur0gYuG7iyBt4bqldCBwcm9wXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExhYmVsKHByZWZpeCwgc2NoZW1hLmxhYmVsKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldFN0cmluZ0RhdGUodmFsdWUpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdkZC9NTS95eXl5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnZGQvTU0veXl5eScpO1xuICAgIH1cblxuICAgIC8vIGh0dHA6Ly9sb2NhbGhvc3Q6MjcyMzAvdW5pdmVyc2FsLWxpbms/c2VydmljZUNvZGU9Y29uZ3ZpZWMmZW50aXR5PURNX1ByaW9yaXR5JmVudGl0eUtleT0wOTExZjNlNy0zZGIwLTRiNjgtODdjZC0wN2Q0MjU3NDFlOWUmc3RhdGU9JnNvdXJjZVBhdGg9aHR0cDovL2xvY2FsaG9zdDoyNzIzMC9kbS1wcmlvcml0eVxuICAgIHBhcnNlQXR0YWNoTGluayhjb250ZW50KSB7XG4gICAgICAgIGNvbnN0IGxpbmtzID0gY29udGVudC5zcGxpdCgnXFxyXFxuJyk7XG4gICAgICAgIGNvbnN0IG9wID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgICAgICAgICAgY29uc3QgYXJyID0gbGluay5zcGxpdCgnPycpO1xuICAgICAgICAgICAgaWYgKGFyci5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcCA9IGFyclsxXTtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMucGFyc2VRdWVyeVN0cmluZyh0ZW1wKTtcbiAgICAgICAgICAgICAgICBpZiAocXVlcnkgJiYgcXVlcnkuc2VydmljZUNvZGUgJiYgcXVlcnkuZW50aXR5ICYmIHF1ZXJ5LmVudGl0eUtleSkge1xuICAgICAgICAgICAgICAgICAgICBxdWVyeS5yYXdMaW5rID0gbGluaztcbiAgICAgICAgICAgICAgICAgICAgb3AucHVzaChxdWVyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYGxpbmsgJHtsaW5rfSBpbnZhbGlkIHRvIHBhcnNlYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlUXVlcnlTdHJpbmcocXVlcnk6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGlmICghcXVlcnkpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAocXVlcnkuc3RhcnRzV2l0aCgnPycpKSBxdWVyeSA9IHF1ZXJ5LnN1YnN0cmluZygxKTtcbiAgICAgICAgY29uc3QgYXJyID0gcXVlcnkuc3BsaXQoJyYnKTtcbiAgICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBpdGVtLnNwbGl0KCc9Jyk7XG4gICAgICAgICAgICBpZiAodGVtcFsxXSkge1xuICAgICAgICAgICAgICAgIG9ialt0ZW1wWzBdXSA9IGRlY29kZVVSSUNvbXBvbmVudCh0ZW1wWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG9ialt0ZW1wWzBdXSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRDb3B5UGF0aChzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIHJvd0RhdGE6IGFueSwgcGVybWlzc2lvbjogUGVybWlzc2lvbkJhc2UgPSBQZXJtaXNzaW9uQmFzZS5SRUFEKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1TaGFyZXM6IE1vZGVsU2hhcmVMaW5rQnlQZXJtaXNzaW9uID0gbmV3IE1vZGVsU2hhcmVMaW5rQnlQZXJtaXNzaW9uKCk7XG4gICAgICAgIGl0ZW1TaGFyZXMubGlua1RvTWVudSA9IGAke3RvcC5sb2NhdGlvbi5vcmlnaW59JHt0b3AubG9jYXRpb24ucGF0aG5hbWV9YDtcbiAgICAgICAgaXRlbVNoYXJlcy5zb3VyY2VQYXRoID0gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHRvcC5sb2NhdGlvbi5ocmVmKX1gO1xuICAgICAgICBpdGVtU2hhcmVzLnRhcmdldFBhdGggPSBgJHtlbmNvZGVVUklDb21wb25lbnQoc2V0dGluZy50YXJnZXRQYXRoKX1gO1xuICAgICAgICBpdGVtU2hhcmVzLm9iamVjdERpc3BsYXlOYW1lID0gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHNldHRpbmcub2JqZWN0TmFtZSl9YDtcbiAgICAgICAgbGV0IGRpc3BsYXlGaWVsZCA9ICcnO1xuICAgICAgICBpZiAoc2V0dGluZy5nZXREaXNwbGF5TmFtZUluU2VydmVyKSB7XG4gICAgICAgICAgICBkaXNwbGF5RmllbGQgPSAnaWQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNldHRpbmcuZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkID0gdGhpcy5fY29tbW9uU2VydmljZS5pc1N0cmluZyhzZXR0aW5nLmRpc3BsYXlGaWVsZCkgPyBzZXR0aW5nLmRpc3BsYXlGaWVsZCA6IChzZXR0aW5nLmRpc3BsYXlGaWVsZCBhcyBhbnkpKHJvd0RhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFkaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5rQ29sdW1uID0gc2V0dGluZy5jb2xzLmZpbmQoeCA9PiB4LnNob3dFZGl0TGluayk7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmtDb2x1bW4gJiYgIWxpbmtDb2x1bW4ucmF3Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZCA9IGxpbmtDb2x1bW4uZmllbGQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFkaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQgPSAnaWQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGl0ZW1TaGFyZXMuZGlzcGxheUZpZWxkID0gZGlzcGxheUZpZWxkO1xuICAgICAgICBpdGVtU2hhcmVzLmxzdEl0ZW1EYXRhID0gW107XG4gICAgICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgdGhpcy5nZXRMaW5rU3RhdGUocm93RGF0YSk7XG4gICAgICAgIGl0ZW1TaGFyZXMubHN0SXRlbURhdGEucHVzaCh7XG4gICAgICAgICAgICBpdGVtSWQ6IHJvd0RhdGEuaWQsXG4gICAgICAgICAgICBwZXJtaXNzaW9uLFxuICAgICAgICAgICAgc3RhdGU6IGVuY29kZVVSSUNvbXBvbmVudChzdGF0ZSlcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRpY1Blcm1pc3Npb25JZCA9IChhd2FpdCBzZXR0aW5nLmJhc2VTZXJ2aWNlLmdldFNoYXJlZEtleShpdGVtU2hhcmVzKSkuZGF0YTtcbiAgICAgICAgaWYgKCFkaWNQZXJtaXNzaW9uSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKCdC4bqhbiBraMO0bmcgY8OzIHF1eeG7gW4gY2hpYSBz4bq7IGLhuqNuIGdoaScpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwYXRoID0gJyc7XG4gICAgICAgIGl0ZW1TaGFyZXMubHN0SXRlbURhdGEuZm9yRWFjaChpdGVtRGF0YSA9PiB7XG4gICAgICAgICAgICBwYXRoICs9IGAke2RpY1Blcm1pc3Npb25JZFtpdGVtRGF0YS5pdGVtSWRdfVxcbmA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRMaW5rU3RhdGUocm93RGF0YTogYW55KSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0U2V0dGluZ3MoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgICAgIGNvbnN0IGxvY2FsRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkRFRkFVTFRfREFUQSk7XG4gICAgICAgIGlmIChsb2NhbERhdGEgIT0gbnVsbCAmJiBsb2NhbERhdGEgIT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHRyeVBhcnNlSnNvbihkYXRhOiBhbnkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogSlNPTi5wYXJzZShkYXRhKSB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlOiBbXSB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJ5UGFyc2VOdW1iZXIoZGF0YTogc3RyaW5nLCBkZWZhdWx0VmFsdWUgPSAwKSB7XG4gICAgICAgIGNvbnN0IG51bWJlciA9IHBhcnNlSW50KGRhdGEpO1xuICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogZGVmYXVsdFZhbHVlIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlOiBudW1iZXIgfTtcbiAgICB9XG5cbiAgICBjb3VudGVyKGk6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gbmV3IEFycmF5KGkpO1xuICAgIH1cbn1cbiJdfQ==
608
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFD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QUFFLEVBQUU7WUFDdEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVM7UUFDbEIsSUFBSTtZQUNBLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDbkQ7UUFDRCxPQUFPLENBQUMsRUFBRTtZQUNOLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztTQUN0QztJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBWSxFQUFFLFlBQVksR0FBRyxDQUFDO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNmLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQztTQUNoRDtRQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTyxDQUFDLENBQVM7UUFDYixPQUFPLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7OztZQTltQkosU0FBUzs7O1lBMUNVLFFBQVE7Ozs7MEJBNEN2QixLQUFLOzRCQUVMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBNb2RlbFNoYXJlTGlua0J5UGVybWlzc2lvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2hhcmUtbGluay1ieS1wZXJtaXNzaW9uL21vZGVscy9zaGFyZS1saW5rLWJ5LXBlcm1pc3Npb24nO1xuaW1wb3J0IHsgVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRhbnRzJztcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuaW1wb3J0IHsgUGVybWlzc2lvbkJhc2UgfSBmcm9tICcuLi8uLi9lbnVtcy9jb21tb24nO1xuaW1wb3J0IHsgRXhwb3J0SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9leHBvcnQtaXRlbSc7XG5pbXBvcnQgeyBGaWx0ZXIsIFNvcnQsIFN0cmluZ0NvbXBhcmVPcHRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jcnVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVY0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RlbXBsYXRlLXY0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVGVtcGxhdGVJbnN0YW5jZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90ZW1wbGF0ZWluc3RhbmNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0U3RyaW5nRGF0ZVZOIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGF0ZSc7XG5pbXBvcnQgeyBFeHBvcnRJdGVtVHlwZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIEFkZHJlc3NDb250cm9sU2NoZW1hLFxuICAgIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEsXG4gICAgQ2hlY2tib3hDb250cm9sU2NoZW1hLFxuICAgIENvQ2F1VG9DaHVjQ29udHJvbFNjaGVtYSxcbiAgICBDb0NhdVRvQ2h1Y1BpY2tlckNvbnRyb2xTY2hlbWEsXG4gICAgQ3J1ZExpc3RTZXR0aW5nLFxuICAgIERhdGVUaW1lQ29udHJvbFNjaGVtYSxcbiAgICBEcm9wZG93bkNvbnRyb2xTY2hlbWEsXG4gICAgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hLFxuICAgIEZpbGVVcGxvYWRDb250cm9sU2NoZW1hLFxuICAgIEZvcm1TY2hlbWFCYXNlLFxuICAgIE1vZGVsU2NoZW1hLFxuICAgIE9wZXJhdG9yLFxuICAgIFBvcHVwU2l6ZSxcbiAgICBTd2l0Y2hDb250cm9sU2NoZW1hLFxuICAgIFRhYmxlU2NoZW1hXG59IGZyb20gJy4uL2Zvcm0tc2NoZW1hJztcblxuZXhwb3J0IGNvbnN0IEVYUE9SVF9WRVJTSU9OX1Y0ID0gNDtcbmV4cG9ydCBjb25zdCBFWFBPUlRfVkVSU0lPTl9WNSA9IDU7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIHBhcmVudE1vZGVsOiBhbnk7XG5cbiAgICBASW5wdXQoKSBzZXQgcGFyZW50Q29udGV4dCh2YWx1ZTogQ29tcG9uZW50Q29udGV4dFNlcnZpY2UpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQucGFyZW50ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZ2V0IHBhcmVudENvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQucGFyZW50O1xuICAgIH1cblxuICAgIG1vZGVsOiBhbnk7XG4gICAgbW9kZWxTY2hlbWE6IE1vZGVsU2NoZW1hW10gPSBbXTtcbiAgICBjb250ZXh0OiBDb21wb25lbnRDb250ZXh0U2VydmljZTtcbiAgICByb290TW9kZWw6IGFueTtcbiAgICByb290Q29udGV4dDogQ29tcG9uZW50Q29udGV4dFNlcnZpY2U7XG5cbiAgICBndWlkRW1wdHkgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcbiAgICBwdWJsaWMgX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PGFueT47XG4gICAgcHJvdGVjdGVkIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfYXBwQ29udGV4dDogQXBwbGljYXRpb25Db250ZXh0U2VydmljZTtcbiAgICBwcm90ZWN0ZWQgX2NvbXBvbmVudENvbnRleHQ6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yO1xuICAgIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlO1xuICAgIHByb3RlY3RlZCBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfZGF0ZVBpcGU6IERhdGVQaXBlO1xuICAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3RvciwgY29tcG9uZW50TmFtZT86IHN0cmluZykge1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG4gICAgICAgIHRoaXMuX2FwcENvbnRleHQgPSBpbmplY3Rvci5nZXQoQXBwbGljYXRpb25Db250ZXh0U2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHQgPSBpbmplY3Rvci5nZXQoQ29tcG9uZW50Q29udGV4dFNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSA9IGluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KENydWRTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZSA9IGluamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fZGF0ZVBpcGUgPSBpbmplY3Rvci5nZXQoRGF0ZVBpcGUpO1xuXG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9hcHBDb250ZXh0LmdldFJvb3RDb250ZXh0KCk7XG4gICAgICAgIGlmICghcm9vdCkge1xuICAgICAgICAgICAgdGhpcy5fYXBwQ29udGV4dC5hZGRSb290Q29udGV4dChcbiAgICAgICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0LFxuICAgICAgICAgICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHQgPSB0aGlzLl9hcHBDb250ZXh0LmFkZENvbXBvbmVudENvbnRleHQodGhpcy5fY29tcG9uZW50Q29udGV4dCwgdGhpcy5fYWN0aXZhdGVkUm91dGUsIHRoaXMuZ2V0Q29tcG9uZW50SWQoKSk7XG4gICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5fY29tcG9uZW50Q29udGV4dC5kYXRhO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gdGhpcy5fY29tcG9uZW50Q29udGV4dDtcbiAgICAgICAgICAgIHRoaXMucm9vdENvbnRleHQgPSB0aGlzLl9jb21wb25lbnRDb250ZXh0LnJvb3Q7XG4gICAgICAgICAgICB0aGlzLnJvb3RNb2RlbCA9IHRoaXMucm9vdENvbnRleHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuY29tcG9uZW50U3VicyA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gZGVzdHJveVxuICAgICAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAvLyBVbnN1YnNjcmliZSBmcm9tIGFsbCBzdWJzY3JpcHRpb25zXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLm5leHQoMSk7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLmNvbXBsZXRlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuY29tcG9uZW50U3Vicykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzdWIgb2YgdGhpcy5tb2RlbC5jb21wb25lbnRTdWJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN1Yikgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGVzdHJveUNvbnRleHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbXBvbmVudElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb21tb25TZXJ2aWNlLnJhbmRvbVN0cmluZygpO1xuICAgIH1cblxuICAgIHN1YnNjcmliZVJvb3QobmFtZTogc3RyaW5nLCBjYWxsQmFjazogYW55KSB7XG4gICAgICAgIHRoaXMubW9kZWwuY29tcG9uZW50U3Vicy5wdXNoKHRoaXMucm9vdENvbnRleHQuc3Vic2NyaWJlKG5hbWUsIGNhbGxCYWNrKSk7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlKG5hbWU6IHN0cmluZywgY2FsbEJhY2s6IGFueSkge1xuICAgICAgICB0aGlzLm1vZGVsLmNvbXBvbmVudFN1YnMucHVzaCh0aGlzLmNvbnRleHQuc3Vic2NyaWJlKG5hbWUsIGNhbGxCYWNrKSk7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlT25jZShuYW1lOiBzdHJpbmcsIGNhbGxCYWNrOiBhbnkpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5jb21wb25lbnRTdWJzLnB1c2godGhpcy5jb250ZXh0LnN1YnNjcmliZU9uY2UobmFtZSwgY2FsbEJhY2spKTtcbiAgICB9XG5cbiAgICByZXBsYXlTdWJzY3JpYmUobmFtZTogc3RyaW5nLCBjYWxsQmFjazogYW55KSB7XG4gICAgICAgIHRoaXMubW9kZWwuY29tcG9uZW50U3Vicy5wdXNoKHRoaXMuY29udGV4dC5yZXBsYXlTdWJzY3JpYmUobmFtZSwgY2FsbEJhY2spKTtcbiAgICB9XG5cbiAgICB0cmFja0J5RnVuY0RlZmF1bHQoaW5kZXgsIGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHRyYWNrQnlGdW5jSWQoaW5kZXgsIGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfVxuXG4gICAgaGFuZGxlUmVzcG9uc2UocmVzOiBSZXNwb25zZVJlc3VsdCwgbWVzc2FnZT86IHN0cmluZywgY2FsbEJhY2s/OiBGdW5jdGlvbiwgY2FsbEJhY2tFcnJvcj86IEZ1bmN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jcnVkU2VydmljZS5oYW5kbGVSZXNwb25zZShyZXMsIG1lc3NhZ2UsIGNhbGxCYWNrLCBjYWxsQmFja0Vycm9yKTtcbiAgICB9XG5cbiAgICBoYW5kbGVSZXNwb25zZVdpdGhXYWl0Qm94KHJlczogUmVzcG9uc2VSZXN1bHQsIG1lc3NhZ2U/OiBzdHJpbmcsIGNhbGxCYWNrPzogRnVuY3Rpb24sIGNhbGxCYWNrRXJyb3I/OiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLmhpZGVXYWl0Qm94KCk7XG4gICAgICAgIGlmICghcmVzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGlmIChyZXMuZXJyb3IgPT0gVmFsaWRhdGlvbi5FUlJfU1lTX0RFVikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVzLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKCdDw7MgbOG7l2kgeOG6o3kgcmEuIExpw6puIGjhu4cgcXXhuqNuIHRy4buLIHZpw6puIMSR4buDIGJp4bq/dCB0aMOqbSBjaGkgdGnhur90LicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5tZXNzYWdlICE9IG51bGwgJiYgcmVzLm1lc3NhZ2UgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcocmVzLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcocmVzLmVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2FsbEJhY2tFcnJvcikgY2FsbEJhY2tFcnJvcihyZXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93U3VjY2VzcyhtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsbEJhY2spIGNhbGxCYWNrKHJlcyk7XG4gICAgfVxuXG4gICAgaXNOb3ROdWxsQXJyYXkoYXJyKSB7XG4gICAgICAgIHJldHVybiBhcnIgIT0gbnVsbCAmJiBhcnIubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBmdW5jU29ydERlZmF1bHQoYSwgYikge1xuICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICBpZiAoYSA9PSBiKSByZXR1cm4gMDtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8vIGFkZEV4cG9ydEpvYihqb2I6IEV4cG9ydEpvYikge1xuICAgIC8vICAgICB0aGlzLmNvbnRleHQuYWRkRXhwb3J0Sm9iKGpvYik7XG4gICAgLy8gfVxuXG4gICAgZXhwb3J0KGRhdGE6IEV4cG9ydEl0ZW0sIHZlcnNpb24gPSBFWFBPUlRfVkVSU0lPTl9WNCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ2V4cG9ydCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gICAgICAgIHN3aXRjaCAodmVyc2lvbikge1xuICAgICAgICAgICAgY2FzZSBFWFBPUlRfVkVSU0lPTl9WNDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRWNChkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRVhQT1JUX1ZFUlNJT05fVjU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0VjUoZGF0YSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEV4cG9ydCB2ZXJzaW9uOiAke3ZlcnNpb259IGlzIG5vdCBzdXBwb3J0ZWQhYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0cmluZ2lmeURhdGEob2JqOiBhbnkpOiBzdHJpbmd7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIG9iaixcbiAgICAgICAgICAgIGZ1bmN0aW9uKGssIHYpIHsgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB2OyB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZXhwb3J0RXhjZWxWNShkYXRhOiBhbnksIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCBzaGVldCA9IG5ldyBFeHBvcnRJdGVtKHtcbiAgICAgICAgICAgIHR5cGU6IEV4cG9ydEl0ZW1UeXBlLkV4Y2VsU2hlZXQsXG4gICAgICAgICAgICB0ZW1wbGF0ZUNvZGUsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLnN0cmluZ2lmeURhdGEoZGF0YSksXG4gICAgICAgICAgICBuYW1lOiAnU2hlZXQxJ1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBmaWxlID0gbmV3IEV4cG9ydEl0ZW0oe1xuICAgICAgICAgICAgdHlwZTogRXhwb3J0SXRlbVR5cGUuRXhjZWxGaWxlLFxuICAgICAgICAgICAgbmFtZTogZmlsZU5hbWVcbiAgICAgICAgfSk7XG4gICAgICAgIGZpbGUuY2hpbGRyZW4gPSBbc2hlZXRdO1xuICAgICAgICByZXR1cm4gdGhpcy5leHBvcnQoZmlsZSwgRVhQT1JUX1ZFUlNJT05fVjUpO1xuICAgIH1cblxuICAgIGV4cG9ydFY0KGRhdGE6IEV4cG9ydEl0ZW0pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlVjRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFRlbXBsYXRlVjRTZXJ2aWNlKTtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlVjRTZXJ2aWNlLmV4cG9ydE5vcm1hbChkYXRhKTtcbiAgICB9XG5cbiAgICBleHBvcnRWNShkYXRhOiBFeHBvcnRJdGVtKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZUluc3RhbmNlU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChUZW1wbGF0ZUluc3RhbmNlU2VydmljZSk7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZUluc3RhbmNlU2VydmljZS5leHBvcnROb3JtYWwoZGF0YSk7XG4gICAgfVxuXG4gICAgbmV3RmlsdGVyQ29udGFpbmVyKGxvZ2ljOiAnYW5kJyB8ICdvcicsIC4uLmZpbHRlcnM6IEZpbHRlcltdKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgIGxvZ2ljLFxuICAgICAgICAgICAgZmlsdGVyczogWy4uLmZpbHRlcnNdXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ld0ZpbHRlcihmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBhbnksIHZhbHVlSXNGaWVsZDogYm9vbGVhbiA9IGZhbHNlLCBzdHJpbmdDb21wYXJlT3B0aW9uOiBTdHJpbmdDb21wYXJlT3B0aW9uID0gU3RyaW5nQ29tcGFyZU9wdGlvbi5Ob3JtYWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbW1vblNlcnZpY2UubmV3RmlsdGVyKGZpZWxkLCBvcGVyYXRvciwgdmFsdWUsIHZhbHVlSXNGaWVsZCwgc3RyaW5nQ29tcGFyZU9wdGlvbik7XG4gICAgfVxuXG4gICAgbmV3RmlsdGVyVjQoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgIGZpZWxkLCBvcGVyYXRvcixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ld0JpbmRpbmdGaWx0ZXIoY29sdW1uOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgc291cmNlRmllbGQ6IHN0cmluZywgc3ViRmllbGQ/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgZmllbGQ6IGNvbHVtbixcbiAgICAgICAgICAgIG9wZXJhdG9yLFxuICAgICAgICAgICAgc291cmNlRmllbGQsXG4gICAgICAgICAgICBzdWJGaWVsZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZXdTb3J0KGZpZWxkOiBzdHJpbmcsIGRpcjogMSB8IC0xID0gMSkge1xuICAgICAgICByZXR1cm4gbmV3IFNvcnQoeyBmaWVsZCwgZGlyIH0pO1xuICAgIH1cblxuICAgIG5ld1BvcHVwU2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgbWF4aW1pemUgPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbmV3IFBvcHVwU2l6ZSh7XG4gICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBtYXhpbWl6ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzaG93V2FpdEJveChtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULlNIT1dfV0FJVF9CT1gsIHtcbiAgICAgICAgICAgIHNob3c6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGhpZGVXYWl0Qm94KCkge1xuICAgICAgICB0aGlzLnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVC5TSE9XX1dBSVRfQk9YLCB7XG4gICAgICAgICAgICBzaG93OiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb3B5VG9DbGlwYm9hcmQgPSBzdHIgPT4ge1xuICAgICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgICAgIGVsLnZhbHVlID0gc3RyO1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3JlYWRvbmx5JywgJycpO1xuICAgICAgICBlbC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICAgIGVsLnN0eWxlLmxlZnQgPSAnLTk5OTlweCc7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWwpO1xuICAgICAgICBlbC5zZWxlY3QoKTtcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbCk7XG4gICAgfTtcblxuICAgIGFkZERpc3RpbmN0KGxzdCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKGxzdC5pbmRleE9mKHZhbHVlKSA9PSAtMSkge1xuICAgICAgICAgICAgbHN0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkRGlzdGluY3RMaXN0KGxzdCwgbHN0VmFsdWUpIHtcbiAgICAgICAgaWYgKCFsc3RWYWx1ZSB8fCAhbHN0VmFsdWUubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGxzdFZhbHVlLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgaWYgKGxzdC5pbmRleE9mKHZhbHVlKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgIGxzdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBDb252ZXJ0IDEgYXJyYXkgPT4gTiBhcnJheVxuICAgICogQHBhcmFtIGxzdCBN4bqjbmcgcGjhuqduIHThu61cbiAgICAqIEBwYXJhbSBmaWVsZHMgTeG6o25nIGPDoWMgZmllbGQsIG7hur91IGZpZWxkIGzDoCBraeG7g3UgYXJyYXkgdGjDrCBuZ2jEqWEgbMOgIG3Dum4gbWFwIGRpc3RpbmN0XG4gICAgKiBAcmV0dXJucyBOIEFycmF5XG4gICAgKi9cbiAgICBtdWx0aXBsZU1hcChsc3QsIC4uLmZpZWxkcykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgY29uc3QgZnVuY3MgPSBbXTtcbiAgICAgICAgY29uc3QgcmF3RmllbGRzID0gW107XG4gICAgICAgIGNvbnN0IF9wdXNoID0gKGxzdCwgdmFsdWUpID0+IGxzdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goW10pO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQpKSB7XG4gICAgICAgICAgICAgICAgZnVuY3MucHVzaCh0aGlzLmFkZERpc3RpbmN0KTtcbiAgICAgICAgICAgICAgICByYXdGaWVsZHMucHVzaChmaWVsZFswXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmdW5jcy5wdXNoKF9wdXNoKTtcbiAgICAgICAgICAgICAgICByYXdGaWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsc3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIHJhd0ZpZWxkcy5mb3JFYWNoKChmaWVsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBmdW5jc1tpbmRleF0ocmVzdWx0W2luZGV4XSwgaXRlbVtmaWVsZF0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGFzeW5jIF9wcmludFBkZihiYXNlU2VydmljZTogQmFzZVNlcnZpY2UsIGlkOiBzdHJpbmcsIHJvd0RhdGE6IGFueSkge1xuICAgICAgICBjb25zdCBpdGVtRGV0YWlsID0gKGF3YWl0IGJhc2VTZXJ2aWNlLmdldERldGFpbChpZCkpLmRhdGE7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBiYXNlU2VydmljZS5nZXREYXRhVHJpbmhLeShpdGVtRGV0YWlsLCByb3dEYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByaW50UGRmQmFzZShiYXNlU2VydmljZSwgaWQsIGRhdGEpO1xuICAgIH1cblxuICAgIGFzeW5jIF9wcmludFBkZkJ5U2NoZW1hKGJhc2VTZXJ2aWNlOiBCYXNlU2VydmljZSwgbW9kZWw6IGFueSwgc2NoZW1hczogRm9ybVNjaGVtYUJhc2VbXSkge1xuICAgICAgICBjb25zdCB0bXBNb2RlbCA9IHsgLi4ubW9kZWwgfTtcbiAgICAgICAgZGVsZXRlIHRtcE1vZGVsLnByaW50RmlsZUlkO1xuICAgICAgICBjb25zdCBkYXRhID0gW107XG4gICAgICAgIGF3YWl0IHRoaXMuX2dldEtleVZhbHVlKGRhdGEsICcnLCBzY2hlbWFzLCB0bXBNb2RlbCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmludFBkZkJhc2UoYmFzZVNlcnZpY2UsIG1vZGVsLmlkLCBkYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9wcmludFBkZkJhc2UoYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlLCBpZDogc3RyaW5nLCBkYXRhOiBhbnlbXSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGJhc2VTZXJ2aWNlLmV4cG9ydFRvUGRmKGlkLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgdGlldURlOiBiYXNlU2VydmljZS5vYmplY3ROYW1lLFxuICAgICAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm4gPFJlc3BvbnNlUmVzdWx0PntcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQ8OzIGzhu5dpIHjhuqN5IHJhJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TGFiZWwocHJlZml4OiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGAke3ByZWZpeH0ke2xhYmVsfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0VmFsdWVGcm9tRGF0YXNvdXJjZShpdGVtU2VsZWN0ZWQ6IGFueSwgaXNNdWx0aXBsZTogYm9vbGVhbiwgZnVuY0dldExhYmVsOiAoaXRlbSkgPT4gc3RyaW5nKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgICAgIGlmIChpc011bHRpcGxlKSB7XG4gICAgICAgICAgICBpZiAoaXRlbVNlbGVjdGVkICYmIGl0ZW1TZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBpdGVtU2VsZWN0ZWQubWFwKHEgPT4gZnVuY0dldExhYmVsKHEudmFsdWUpKS5qb2luKCcsICcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGl0ZW1TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZnVuY0dldExhYmVsKGl0ZW1TZWxlY3RlZC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGFzeW5jIF9nZXRLZXlWYWx1ZShyZXN1bHQ6IGFueVtdLCBwcmVmaXg6IHN0cmluZywgc2NoZW1hczogRm9ybVNjaGVtYUJhc2VbXSwgbW9kZWw6IGFueSkge1xuICAgICAgICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgICAgICAgICBpZiAoIXNjaGVtYS5oaWRkZW5cbiAgICAgICAgICAgICAgICAmJiBzY2hlbWEuZmllbGQgIT0gJ3ByaW50RmlsZUlkJ1xuICAgICAgICAgICAgICAgICYmIHNjaGVtYS5sYWJlbFxuICAgICAgICAgICAgICAgICYmICEoc2NoZW1hIGluc3RhbmNlb2YgRmlsZVVwbG9hZENvbnRyb2xTY2hlbWEpXG4gICAgICAgICAgICAgICAgJiYgIShzY2hlbWEgaW5zdGFuY2VvZiBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBtb2RlbFtzY2hlbWEuZmllbGRdO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0TGFiZWwocHJlZml4LCBzY2hlbWEubGFiZWwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFRhYmxlU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtcFNjaGVtYSA9IDxUYWJsZVNjaGVtYT5zY2hlbWE7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB2YWx1ZSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5nZXRMYWJlbChwcmVmaXgsIHNjaGVtYS5sYWJlbCksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgcm93RGF0YSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2dldEtleVZhbHVlKHJlc3VsdCwgYCR7cHJlZml4fVxcdGAsIHRtcFNjaGVtYS5yb3dUZW1wbGF0ZSwgcm93RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3BsaWNlKHJlc3VsdC5sZW5ndGggLSAxLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBBZGRyZXNzQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0bXBTY2hlbWEgPSA8QWRkcmVzc0NvbnRyb2xTY2hlbWE+c2NoZW1hO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5nZXRMYWJlbChwcmVmaXgsIHNjaGVtYS5sYWJlbCksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZ2V0S2V5VmFsdWUocmVzdWx0LCBgJHtwcmVmaXh9XFx0YCwgdG1wU2NoZW1hLl9jb21wb25lbnQuc2V0dGluZy5zY2hlbWEsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBEYXRlVGltZUNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0U3RyaW5nRGF0ZVZOKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBDb0NhdVRvQ2h1Y1BpY2tlckNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TZWxlY3RlZCA9IGF3YWl0IHNjaGVtYS5fY29tcG9uZW50LmNvbnRyb2xQaWNrZXIuX2NvbXBvbmVudC5nZXREYXRhU2VsZWN0ZWRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0bXBTY2hlbWEgPSA8Q29DYXVUb0NodWNQaWNrZXJDb250cm9sU2NoZW1hPnNjaGVtYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSB0bXBTY2hlbWEuZnVuY0dldExhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmdW5jR2V0TGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWVbdG1wU2NoZW1hLmRpc3BsYXlGaWVsZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZ2V0VmFsdWVGcm9tRGF0YXNvdXJjZShpdGVtU2VsZWN0ZWQsIHNjaGVtYS5tdWx0aXBsZSwgaXRlbSA9PiBpdGVtLnRlbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0TGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaXRlbVNlbGVjdGVkLm1hcChxID0+IHRtcFNjaGVtYS5mdW5jR2V0TGFiZWwocS52YWx1ZSkpLmpvaW4oJywgJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0ZW1TZWxlY3RlZC5tYXAocSA9PiBxLnZhbHVlW3RtcFNjaGVtYS5kaXNwbGF5RmllbGRdKS5qb2luKCcsICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZnVuY0dldExhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNjaGVtYS5mdW5jR2V0TGFiZWwoaXRlbVNlbGVjdGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaXRlbVNlbGVjdGVkLnZhbHVlW3NjaGVtYS5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TZWxlY3RlZCA9IGF3YWl0IHNjaGVtYS5fY29tcG9uZW50LmdldERhdGFTZWxlY3RlZFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtcFNjaGVtYSA9IDxBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hPnNjaGVtYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSB0bXBTY2hlbWEuZnVuY0dldExhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmdW5jR2V0TGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW3RtcFNjaGVtYS5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZUZyb21EYXRhc291cmNlKGl0ZW1TZWxlY3RlZCwgc2NoZW1hLm11bHRpcGxlLCBmdW5jR2V0TGFiZWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIENvQ2F1VG9DaHVjQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wU2NoZW1hID0gPENvQ2F1VG9DaHVjQ29udHJvbFNjaGVtYT5zY2hlbWE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IGl0ZW0ubGFiZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbVNlbGVjdGVkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBTY2hlbWEuX2NvbXBvbmVudC5tdWx0aVNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSB0bXBTY2hlbWEuX2NvbXBvbmVudC5tdWx0aVNlbGVjdC5fb3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2VsZWN0ZWQgPSBkYXRhU291cmNlLmZpbHRlcihxID0+IHZhbHVlLmluZGV4T2YoeCA9PiB4ID09IHEudmFsdWUpKS5tYXAocSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSB0bXBTY2hlbWEuX2NvbXBvbmVudC5kcm9wZG93bi5fb3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2VsZWN0ZWQgPSBkYXRhU291cmNlLmZpbmQocSA9PiBxLnZhbHVlID09IHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TZWxlY3RlZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlRnJvbURhdGFzb3VyY2UoaXRlbVNlbGVjdGVkLCBzY2hlbWEubXVsdGlwbGUsIGZ1bmNHZXRMYWJlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgRHJvcGRvd25Db250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0bXBTY2hlbWEgPSA8RHJvcGRvd25Db250cm9sU2NoZW1hPnNjaGVtYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpdGVtU2VsZWN0ZWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TZWxlY3RlZCA9IHNjaGVtYS5fY29tcG9uZW50LmRhdGFTb3VyY2VJbnRlcm5hbC5maWx0ZXIocSA9PiB2YWx1ZS5pbmRleE9mKHggPT4geCA9PSBxLnZhbHVlW3EudmFsdWUuX2Ryb3Bkb3dudmFsdWVdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2VsZWN0ZWQgPSBzY2hlbWEuX2NvbXBvbmVudC5kYXRhU291cmNlSW50ZXJuYWwuZmluZChxID0+IHEudmFsdWVbcS52YWx1ZS5fZHJvcGRvd252YWx1ZV0gPT0gdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZUZyb21EYXRhc291cmNlKGl0ZW1TZWxlY3RlZCwgc2NoZW1hLm11bHRpcGxlLCB0bXBTY2hlbWEuZnVuY0dldExhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBDaGVja2JveENvbnRyb2xTY2hlbWEgfHwgc2NoZW1hIGluc3RhbmNlb2YgU3dpdGNoQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gJ0tow7RuZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICdDw7MnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFZhbHVlID0gdW5kZWZpbmVkIHRow6wga2hpIHNlcmlhbGl6ZSBz4bq9IGLhu4sgbeG6pXQgcHJvcFxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5nZXRMYWJlbChwcmVmaXgsIHNjaGVtYS5sYWJlbCksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBnZXRTdHJpbmdEYXRlKHZhbHVlKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAnZGQvTU0veXl5eScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ2RkL01NL3l5eXknKTtcbiAgICB9XG5cbiAgICAvLyBodHRwOi8vbG9jYWxob3N0OjI3MjMwL3VuaXZlcnNhbC1saW5rP3NlcnZpY2VDb2RlPWNvbmd2aWVjJmVudGl0eT1ETV9Qcmlvcml0eSZlbnRpdHlLZXk9MDkxMWYzZTctM2RiMC00YjY4LTg3Y2QtMDdkNDI1NzQxZTllJnN0YXRlPSZzb3VyY2VQYXRoPWh0dHA6Ly9sb2NhbGhvc3Q6MjcyMzAvZG0tcHJpb3JpdHlcbiAgICBwYXJzZUF0dGFjaExpbmsoY29udGVudCkge1xuICAgICAgICBjb25zdCBsaW5rcyA9IGNvbnRlbnQuc3BsaXQoJ1xcclxcbicpO1xuICAgICAgICBjb25zdCBvcCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IGxpbmsuc3BsaXQoJz8nKTtcbiAgICAgICAgICAgIGlmIChhcnIubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBhcnJbMV07XG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnBhcnNlUXVlcnlTdHJpbmcodGVtcCk7XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5ICYmIHF1ZXJ5LnNlcnZpY2VDb2RlICYmIHF1ZXJ5LmVudGl0eSAmJiBxdWVyeS5lbnRpdHlLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkucmF3TGluayA9IGxpbms7XG4gICAgICAgICAgICAgICAgICAgIG9wLnB1c2gocXVlcnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBsaW5rICR7bGlua30gaW52YWxpZCB0byBwYXJzZWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3A7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJzZVF1ZXJ5U3RyaW5nKHF1ZXJ5OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBpZiAoIXF1ZXJ5KSByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKHF1ZXJ5LnN0YXJ0c1dpdGgoJz8nKSkgcXVlcnkgPSBxdWVyeS5zdWJzdHJpbmcoMSk7XG4gICAgICAgIGNvbnN0IGFyciA9IHF1ZXJ5LnNwbGl0KCcmJyk7XG4gICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKSB7XG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gaXRlbS5zcGxpdCgnPScpO1xuICAgICAgICAgICAgaWYgKHRlbXBbMV0pIHtcbiAgICAgICAgICAgICAgICBvYmpbdGVtcFswXV0gPSBkZWNvZGVVUklDb21wb25lbnQodGVtcFsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBvYmpbdGVtcFswXV0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Q29weVBhdGgoc2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhOiBhbnksIHBlcm1pc3Npb246IFBlcm1pc3Npb25CYXNlID0gUGVybWlzc2lvbkJhc2UuUkVBRCkge1xuICAgICAgICBjb25zdCBpdGVtU2hhcmVzOiBNb2RlbFNoYXJlTGlua0J5UGVybWlzc2lvbiA9IG5ldyBNb2RlbFNoYXJlTGlua0J5UGVybWlzc2lvbigpO1xuICAgICAgICBpdGVtU2hhcmVzLmxpbmtUb01lbnUgPSBgJHt0b3AubG9jYXRpb24ub3JpZ2lufSR7dG9wLmxvY2F0aW9uLnBhdGhuYW1lfWA7XG4gICAgICAgIGl0ZW1TaGFyZXMuc291cmNlUGF0aCA9IGAke2VuY29kZVVSSUNvbXBvbmVudCh0b3AubG9jYXRpb24uaHJlZil9YDtcbiAgICAgICAgaXRlbVNoYXJlcy50YXJnZXRQYXRoID0gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHNldHRpbmcudGFyZ2V0UGF0aCl9YDtcbiAgICAgICAgaXRlbVNoYXJlcy5vYmplY3REaXNwbGF5TmFtZSA9IGAke2VuY29kZVVSSUNvbXBvbmVudChzZXR0aW5nLm9iamVjdE5hbWUpfWA7XG4gICAgICAgIGxldCBkaXNwbGF5RmllbGQgPSAnJztcbiAgICAgICAgaWYgKHNldHRpbmcuZ2V0RGlzcGxheU5hbWVJblNlcnZlcikge1xuICAgICAgICAgICAgZGlzcGxheUZpZWxkID0gJ2lkJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuaXNTdHJpbmcoc2V0dGluZy5kaXNwbGF5RmllbGQpID8gc2V0dGluZy5kaXNwbGF5RmllbGQgOiAoc2V0dGluZy5kaXNwbGF5RmllbGQgYXMgYW55KShyb3dEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGlua0NvbHVtbiA9IHNldHRpbmcuY29scy5maW5kKHggPT4geC5zaG93RWRpdExpbmspO1xuICAgICAgICAgICAgICAgIGlmIChsaW5rQ29sdW1uICYmICFsaW5rQ29sdW1uLnJhd0NvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQgPSBsaW5rQ29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkID0gJ2lkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpdGVtU2hhcmVzLmRpc3BsYXlGaWVsZCA9IGRpc3BsYXlGaWVsZDtcbiAgICAgICAgaXRlbVNoYXJlcy5sc3RJdGVtRGF0YSA9IFtdO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0TGlua1N0YXRlKHJvd0RhdGEpO1xuICAgICAgICBpdGVtU2hhcmVzLmxzdEl0ZW1EYXRhLnB1c2goe1xuICAgICAgICAgICAgaXRlbUlkOiByb3dEYXRhLmlkLFxuICAgICAgICAgICAgcGVybWlzc2lvbixcbiAgICAgICAgICAgIHN0YXRlOiBlbmNvZGVVUklDb21wb25lbnQoc3RhdGUpXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkaWNQZXJtaXNzaW9uSWQgPSAoYXdhaXQgc2V0dGluZy5iYXNlU2VydmljZS5nZXRTaGFyZWRLZXkoaXRlbVNoYXJlcykpLmRhdGE7XG4gICAgICAgIGlmICghZGljUGVybWlzc2lvbklkKSB7XG4gICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93V2FybmluZygnQuG6oW4ga2jDtG5nIGPDsyBxdXnhu4FuIGNoaWEgc+G6uyBi4bqjbiBnaGknKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGF0aCA9ICcnO1xuICAgICAgICBpdGVtU2hhcmVzLmxzdEl0ZW1EYXRhLmZvckVhY2goaXRlbURhdGEgPT4ge1xuICAgICAgICAgICAgcGF0aCArPSBgJHtkaWNQZXJtaXNzaW9uSWRbaXRlbURhdGEuaXRlbUlkXX1cXG5gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0TGlua1N0YXRlKHJvd0RhdGE6IGFueSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFNldHRpbmdzKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgICAgICBjb25zdCBsb2NhbERhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5ERUZBVUxUX0RBVEEpO1xuICAgICAgICBpZiAobG9jYWxEYXRhICE9IG51bGwgJiYgbG9jYWxEYXRhICE9ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICB0cnlQYXJzZUpzb24oZGF0YTogYW55KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWU6IEpTT04ucGFyc2UoZGF0YSkgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogW10gfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRyeVBhcnNlTnVtYmVyKGRhdGE6IHN0cmluZywgZGVmYXVsdFZhbHVlID0gMCkge1xuICAgICAgICBjb25zdCBudW1iZXIgPSBwYXJzZUludChkYXRhKTtcbiAgICAgICAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWU6IGRlZmF1bHRWYWx1ZSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogbnVtYmVyIH07XG4gICAgfVxuXG4gICAgY291bnRlcihpOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcnJheShpKTtcbiAgICB9XG59XG4iXX0=
@@ -425,7 +425,7 @@ export class ServiceFileUploadComponent extends ComponentBase {
425
425
  ServiceFileUploadComponent.decorators = [
426
426
  { type: Component, args: [{
427
427
  selector: 'service-file-upload',
428
- template: "<div class=\"file-upload\">\n <div class=\"fl-icon\">\n <i *ngIf=\"loading\" class=\"pi pi-spin pi-spinner\"></i>\n <i *ngIf=\"!loading\" class=\"pi pi-file-o\"></i>\n </div>\n\n <div class=\"fl-file-name\" (click)=\"openFileViewer()\">\n <div>\n <ng-container *ngIf=\"!showNoti\">\n <span pTooltip=\"{{selectedFileName}}\">{{selectedFileNameShort}}</span>\n <span *ngIf=\"extension\">.{{extension}} </span>\n </ng-container>\n <span *ngIf=\"showNoti\"> {{notification}} </span>\n </div>\n </div>\n\n <!-- <div class=\"fl-file-name\">\n <div>\n <ng-container *ngIf=\"!showNoti\">\n <span pTooltip=\"{{selectedFileName}}\">{{selectedFileNameShort}}</span>\n <span *ngIf=\"extension\">.{{extension}} </span>\n </ng-container>\n <span *ngIf=\"showNoti\"> {{notification}} </span>\n </div>\n </div> -->\n\n <div class=\"fl-buttons\">\n <button *ngIf=\"!hasFile && !readonly\" pTooltip=\"Ch\u1ECDn file\" class=\"fl-choose\"\n class=\"link-or-action p-button-text p-button-rounded fl-choose\" tooltipPosition=\"top\" pButton type=\"button\"\n icon=\"pi pi-plus\" [disabled]=\"disabled\" (click)=\"onOpenSelect()\"></button>\n\n <button *ngIf=\"hasFile && !readonly && control.showDeleteFile\"\n class=\"link-or-action p-button-text p-button-rounded p-button-danger fl-remove\" pTooltip=\"X\u00F3a file\"\n tooltipPosition=\"top\" pButton type=\"button\" icon=\"pi pi-trash\" [disabled]=\"disabled\"\n (click)=\"onRemoveFile()\"></button>\n\n <button [disabled]=\"!menu || !menu.length\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\n (click)=\"showContextMenu($event)\"></button>\n </div>\n\n <div style=\"display: none;\">\n <p-fileUpload #file [accept]=\"accept\" class=\"file-upload\" mode=\"basic\" [chooseLabel]=\"chooseLabel\" name=\"file[]\"\n [maxFileSize]=\"control.maxFileSize\" pTooltip=\"Ch\u1ECDn t\u1EEB m\u00E1y t\u00EDnh\" toolStipPosition=\"top\" [multiple]=\"false\"\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\" (onSelect)=\"onSelectFile($event)\">\n </p-fileUpload>\n </div>\n\n</div>\n\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"menu\" styleClass=\"fm-contextMenu-panel\">\n</p-contextMenu>\n\n<!-- Xem file tr\u1EF1c tuy\u1EBFn -->\n<file-viewer #fileViewerNew *ngIf=\"forms.fileViewer.show\" [parentModel]=\"model\" [parentContext]=\"context\"\n [readonly]=\"readonly || control.disabled\" [model]=\"forms.fileViewer.formData\"\n (onClose)=\"this.forms.fileViewer.show = false;\">\n</file-viewer>",
428
+ template: "<div class=\"file-upload\">\n <div class=\"fl-icon\">\n <i *ngIf=\"loading\" class=\"pi pi-spin pi-spinner\"></i>\n <i *ngIf=\"!loading\" class=\"pi pi-file-o\"></i>\n </div>\n\n <div class=\"fl-file-name\" (click)=\"openFileViewer()\">\n <div>\n <ng-container *ngIf=\"!showNoti\">\n <span pTooltip=\"{{selectedFileName}}\">{{selectedFileNameShort}}</span>\n <span class=\"suffix\" *ngIf=\"extension\">.{{extension}} </span>\n </ng-container>\n <span *ngIf=\"showNoti\"> {{notification}} </span>\n </div>\n </div>\n\n <!-- <div class=\"fl-file-name\">\n <div>\n <ng-container *ngIf=\"!showNoti\">\n <span pTooltip=\"{{selectedFileName}}\">{{selectedFileNameShort}}</span>\n <span *ngIf=\"extension\">.{{extension}} </span>\n </ng-container>\n <span *ngIf=\"showNoti\"> {{notification}} </span>\n </div>\n </div> -->\n\n <div class=\"fl-buttons\">\n <button *ngIf=\"!hasFile && !readonly\" pTooltip=\"Ch\u1ECDn file\" class=\"fl-choose\"\n class=\"link-or-action p-button-text p-button-rounded fl-choose\" tooltipPosition=\"top\" pButton type=\"button\"\n icon=\"pi pi-plus\" [disabled]=\"disabled\" (click)=\"onOpenSelect()\"></button>\n\n <button *ngIf=\"hasFile && !readonly && control.showDeleteFile\"\n class=\"link-or-action p-button-text p-button-rounded p-button-danger fl-remove\" pTooltip=\"X\u00F3a file\"\n tooltipPosition=\"top\" pButton type=\"button\" icon=\"pi pi-trash\" [disabled]=\"disabled\"\n (click)=\"onRemoveFile()\"></button>\n\n <button [disabled]=\"!menu || !menu.length\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\n (click)=\"showContextMenu($event)\"></button>\n </div>\n\n <div style=\"display: none;\">\n <p-fileUpload #file [accept]=\"accept\" class=\"file-upload\" mode=\"basic\" [chooseLabel]=\"chooseLabel\" name=\"file[]\"\n [maxFileSize]=\"control.maxFileSize\" pTooltip=\"Ch\u1ECDn t\u1EEB m\u00E1y t\u00EDnh\" toolStipPosition=\"top\" [multiple]=\"false\"\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\" (onSelect)=\"onSelectFile($event)\">\n </p-fileUpload>\n </div>\n\n</div>\n\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"menu\" styleClass=\"fm-contextMenu-panel\">\n</p-contextMenu>\n\n<!-- Xem file tr\u1EF1c tuy\u1EBFn -->\n<file-viewer #fileViewerNew *ngIf=\"forms.fileViewer.show\" [parentModel]=\"model\" [parentContext]=\"context\"\n [readonly]=\"readonly || control.disabled\" [model]=\"forms.fileViewer.formData\"\n (onClose)=\"this.forms.fileViewer.show = false;\">\n</file-viewer>",
429
429
  providers: [
430
430
  {
431
431
  provide: NG_VALUE_ACCESSOR,
@@ -434,7 +434,7 @@ ServiceFileUploadComponent.decorators = [
434
434
  },
435
435
  ComponentContextService
436
436
  ],
437
- styles: ["::ng-deep .file-upload{display:flex;border:1px solid #ced4da;border-radius:4px}::ng-deep .file-upload .fl-icon{flex:0 0 30px;display:flex;font-size:20px;justify-content:center;align-items:center;border-right:1px solid #ced4da}::ng-deep .file-upload .fl-icon>i{font-size:16px!important}::ng-deep .file-upload .fl-file-name{display:flex;align-items:center;flex-grow:1;cursor:pointer;opacity:.8;padding:0 10px;color:#109bf8;overflow:hidden}::ng-deep .file-upload .fl-file-name>div{width:100%;display:flex}::ng-deep .file-upload .fl-file-name>div>span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep .file-upload .fl-file-name:hover{opacity:1}::ng-deep .file-upload .fl-buttons{flex:0 0 80px;display:flex;border-right:1px solid #ced4da;align-items:center;justify-content:space-evenly;border-left:1px solid #ced4da}"]
437
+ styles: ["::ng-deep .file-upload{display:flex;border:1px solid #ced4da;border-radius:4px}::ng-deep .file-upload .fl-icon{flex:0 0 30px;display:flex;font-size:20px;justify-content:center;align-items:center;border-right:1px solid #ced4da}::ng-deep .file-upload .fl-icon>i{font-size:16px!important}::ng-deep .file-upload .fl-file-name{display:flex;align-items:center;flex-grow:1;cursor:pointer;opacity:.8;padding:0 10px;color:#109bf8;overflow:hidden}::ng-deep .file-upload .fl-file-name>div{width:100%;display:flex}::ng-deep .file-upload .fl-file-name>div>span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep .file-upload .fl-file-name:hover{opacity:1}::ng-deep .file-upload .fl-file-name .suffix{min-width:45px}::ng-deep .file-upload .fl-buttons{flex:0 0 80px;display:flex;border-right:1px solid #ced4da;align-items:center;justify-content:space-evenly;border-left:1px solid #ced4da}"]
438
438
  },] }
439
439
  ];
440
440
  ServiceFileUploadComponent.ctorParameters = () => [
@@ -465,4 +465,4 @@ ServiceFileUploadComponent.propDecorators = {
465
465
  onRemove: [{ type: Output }],
466
466
  onChanged: [{ type: Output }]
467
467
  };
468
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1maWxlLXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9zZXJ2aWNlLWZpbGUtdXBsb2FkL3NlcnZpY2UtZmlsZS11cGxvYWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU5RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUs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LDBCQUEwQixDQUFDO3dCQUN6RCxLQUFLLEVBQUUsSUFBSTtxQkFDZDtvQkFDRCx1QkFBdUI7aUJBQzFCOzthQUNKOzs7WUFmUSxpQkFBaUI7WUFWakIsY0FBYztZQUZkLG1CQUFtQjtZQUduQixlQUFlO1lBSmYsYUFBYTtZQUtiLFdBQVc7WUFIWCxlQUFlO1lBUWYsbUJBQW1CO1lBRW5CLG1CQUFtQjtZQS9CeEIsUUFBUTs7OzBCQWlEUCxTQUFTLFNBQUMsYUFBYTttQkFDdkIsU0FBUyxTQUFDLE1BQU07Z0NBQ2hCLFNBQVMsU0FBQyxtQkFBbUI7NEJBQzdCLFNBQVMsU0FBQyxlQUFlOzhCQUV6QixLQUFLO3NCQUNMLEtBQUs7MEJBQ0wsS0FBSztxQkFDTCxLQUFLO3dCQUVMLEtBQUs7MEJBSUwsS0FBSztxQkFFTCxNQUFNO3VCQUNOLE1BQU07dUJBQ04sTUFBTTt3QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb250ZXh0TWVudSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2NvbnRleHRtZW51JztcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9maWxldXBsb2FkJztcbmltcG9ydCB7IE92ZXJsYXlQYW5lbCB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL292ZXJsYXlwYW5lbCc7XG5cbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7IEZpbGVVcGxvYWRDb250cm9sU2NoZW1hIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvbW9kdWxlLWNvbmZpZyc7XG5pbXBvcnQgeyBDb21tYW5kVHlwZSwgVG5DbGllbnRDb21tYW5kIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RuLWNsaWVudC1jb21tYW5kJztcbmltcG9ydCB7IEF1dGhlblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoZW4uc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zaWduYWxyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG5DbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG4tY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZVZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4uL2ZpbGUtZXhwbG9yZXIvZmlsZS12aWV3ZXIvZmlsZS12aWV3ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEZpbGVFeHBsb3Jlckl0ZW0gfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL21vZGVscy9maWxlLWV4cGxvcmVyLWl0ZW0nO1xuaW1wb3J0IHsgR2VuZXJhdGVMaW5rRG93bmxvYWREVE8gfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL21vZGVscy9nZW5lcmF0ZS1saW5rLWRvd25sb2FkLWR0byc7XG5pbXBvcnQgeyBJU2VydmljZUZpbGVVcGxvYWRDb21wb25lbnQgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL21vZGVscy9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERvd25sb2FkTGlua1NlcnZpY2UgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL3NlcnZpY2VzL2Rvd25sb2FkLWxpbmsuc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlRGF0YVNlcnZpY2UgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL3NlcnZpY2VzL2ZpbGUtZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVFeHBsb3JlclNlcnZpY2UgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL3NlcnZpY2VzL2ZpbGUtZXhwbG9yZXIuc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlT2JqZWN0U2VydmljZSB9IGZyb20gJy4uL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZSc7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzZXJ2aWNlLWZpbGUtdXBsb2FkJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VydmljZS1maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc2VydmljZS1maWxlLXVwbG9hZC5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlcnZpY2VGaWxlVXBsb2FkQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIENvbXBvbmVudENvbnRleHRTZXJ2aWNlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlRmlsZVVwbG9hZENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBJU2VydmljZUZpbGVVcGxvYWRDb21wb25lbnQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQFZpZXdDaGlsZCgnY29udGV4dE1lbnUnKSBjb250ZXh0TWVudTogQ29udGV4dE1lbnU7XG4gICAgQFZpZXdDaGlsZCgnZmlsZScpIGZpbGU6IEZpbGVVcGxvYWQ7XG4gICAgQFZpZXdDaGlsZCgnZmlsZURldGFpbENvbW1hbmQnKSBmaWxlRGV0YWlsQ29tbWFuZDogT3ZlcmxheVBhbmVsO1xuICAgIEBWaWV3Q2hpbGQoJ2ZpbGVWaWV3ZXJOZXcnKSBmaWxlVmlld2VyTmV3OiBGaWxlVmlld2VyQ29tcG9uZW50O1xuXG4gICAgQElucHV0KCkgZmlsZURhdGFTZXJ2aWNlOiBGaWxlRGF0YVNlcnZpY2U7XG4gICAgQElucHV0KCkgY29udHJvbDogRmlsZVVwbG9hZENvbnRyb2xTY2hlbWEgPSBuZXcgRmlsZVVwbG9hZENvbnRyb2xTY2hlbWEoKTtcbiAgICBASW5wdXQoKSBzZXJ2aWNlQ29kZSA9ICcnO1xuICAgIEBJbnB1dCgpIGVudGl0eSA9ICcnO1xuICAgIF9lbnRpdHlLZXk6IHN0cmluZztcbiAgICBASW5wdXQoKSBzZXQgZW50aXR5S2V5KHZhbDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2VudGl0eUtleSA9IHZhbDtcbiAgICB9O1xuXG4gICAgQElucHV0KCkgY2hvb3NlTGFiZWwgPSAnQ2jhu41uJztcblxuICAgIEBPdXRwdXQoKSBvbkluaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uU2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJlbW92ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgZ2V0IGVudGl0eUtleSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudGl0eUtleTtcbiAgICB9XG5cbiAgICBmaWxlSWQ6IHN0cmluZyA9IG51bGw7XG4gICAgc2VsZWN0ZWRGaWxlID0gbnVsbDtcbiAgICBzZWxlY3RlZEZpbGVOYW1lOiBzdHJpbmcgPSBudWxsO1xuICAgIGV4dGVuc2lvbjogc3RyaW5nID0gbnVsbDtcbiAgICBzZWxlY3RlZEZpbGVOYW1lU2hvcnQ6IHN0cmluZyA9IG51bGw7XG4gICAgaGFzRmlsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBzaG93Tm90aTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGZpbGVPYmo6IEZpbGVFeHBsb3Jlckl0ZW0gPSBuZXcgRmlsZUV4cGxvcmVySXRlbSgpO1xuICAgIHVzZXJJZDogc3RyaW5nID0gbnVsbDtcbiAgICBub3RpZmljYXRpb246IHN0cmluZyA9IG51bGw7XG4gICAgX21vZHVsZUNvbmZpZzogTW9kdWxlQ29uZmlnO1xuICAgIGFjY2VwdDogc3RyaW5nID0gJyc7XG4gICAgLy8gPSAnaW1hZ2UvKiwueGxzeCwueGxzLC5wZGYsLmRvYywuZG9jeCwuemlwLC5yYXIsJztcbiAgICByZWFkb25seSA9IG51bGw7XG4gICAgZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBkZWZhdWx0U2NhbkZpbGVOYW1lID0gbnVsbDtcbiAgICBtZW51OiBBcnJheTxhbnk+ID0gW107XG5cbiAgICBvbkNoYW5nZUJhc2U6ICh2YWwpID0+IHZvaWQ7XG4gICAgb25Ub3VjaGVkOiAodmFsKSA9PiB2b2lkO1xuICAgIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgX3N1YnNjcmliZTogU3Vic2NyaXB0aW9uID0gbnVsbDtcblxuICAgIGRhdGFNb2RlbDogYW55ID0ge307XG4gICAgZm9ybXM6IGFueSA9IHt9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2ZpbGVPYmplY3RTZXJ2aWNlOiBGaWxlT2JqZWN0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfc2lnbmFsUlNlcnZpY2U6IFNpZ25hbFJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF90bkNsaWVudFNlcnZpY2U6IFRuQ2xpZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfYXV0aGVuU2VydmljZTogQXV0aGVuU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfZG93bmxvYWRMaW5rU2VydmljZTogRG93bmxvYWRMaW5rU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9maWxlRXhwbG9yZXJTZXJ2aWNlOiBGaWxlRXhwbG9yZXJTZXJ2aWNlLFxuICAgICAgICBfaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XG5cbiAgICAgICAgaWYgKHRoaXMuX3VzZXJTZXJ2aWNlLmlzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJJZCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldFVzZXJJZENvbWJpbmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyID0ge307XG4gICAgICAgIHRoaXMuZGF0YU1vZGVsLmRyaXZlRmlsZURpYWxvZyA9IHsgcG9wdXBTaXplOiA8YW55Pnt9IH07XG5cbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc2V0VXAoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICBzZXRVcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5hY2NlcHQpIHtcbiAgICAgICAgICAgIHRoaXMuYWNjZXB0ID0gdGhpcy5jb250cm9sLmFjY2VwdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRyb2wuYWNjZXB0RmlsZVR5cGVzKSB7XG4gICAgICAgICAgICB0aGlzLmFjY2VwdCA9IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldEFjY2VwdGVkRXh0ZW5zaW9ucyh0aGlzLmNvbnRyb2wuYWNjZXB0RmlsZVR5cGVzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlYWRvbmx5ID0gdGhpcy5jb250cm9sLnJlYWRvbmx5O1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5jb250cm9sLmRpc2FibGVkO1xuICAgICAgICB0aGlzLmZvcm1zWydmaWxlVmlld2VyJ10gPSB7XG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcbiAgICAgICAgICAgIGZvcm1EYXRhOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuZmlsZURhdGFTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVEYXRhU2VydmljZS5yZWdpc3Rlcih0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbnRpdHlLZXkgJiYgIXRoaXMuZmlsZURhdGFTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLmdldFNlcnZpY2VGaWxlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRTZXJ2aWNlRmlsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzS2V5cygpKSB7XG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlUmVxdWVzdE1vZGVsID0ge1xuICAgICAgICAgICAgICAgIHNlcnZpY2VDb2RlOiB0aGlzLnNlcnZpY2VDb2RlLFxuICAgICAgICAgICAgICAgIGVudGl0eTogdGhpcy5lbnRpdHksXG4gICAgICAgICAgICAgICAgZW50aXR5S2V5OiB0aGlzLmVudGl0eUtleSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldE5vdGkoJ8SQYW5nIGzhuqV5IMSRw61uaCBrw6htLi4uJyk7XG4gICAgICAgICAgICBjb25zdCBmaWxlT2JqZWN0ID0gKGF3YWl0IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFNpbmdsZVNlcnZpY2VGaWxlKHNlcnZpY2VSZXF1ZXN0TW9kZWwpKS5kYXRhO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNldE5vdGkobnVsbCk7XG4gICAgICAgICAgICBpZiAoZmlsZU9iamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RmlsZU9iamVjdChmaWxlT2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsZU9iamVjdChudWxsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRyb2wuaGFzRmlsZSA9IHRoaXMuaGFzRmlsZTtcbiAgICAgICAgdGhpcy5zZXRNZW51KCk7XG4gICAgfVxuXG4gICAgc2V0RmlsZU9iamVjdChmaWxlT2JqZWN0OiBhbnkpIHtcbiAgICAgICAgaWYgKGZpbGVPYmplY3QgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5maWxlT2JqID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZmlsZUlkID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuaGFzRmlsZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVOYW1lID0gbnVsbDtcblxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUJhc2UobnVsbCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxlT2JqID0gZmlsZU9iamVjdDtcbiAgICAgICAgdGhpcy5maWxlSWQgPSBmaWxlT2JqZWN0LmlkO1xuICAgICAgICB0aGlzLnNldEZpbGVOYW1lKGZpbGVPYmplY3QubmFtZSk7XG4gICAgICAgIHRoaXMuaGFzRmlsZSA9IHRydWU7XG4gICAgICAgIHRoaXMuY29udHJvbC5oYXNGaWxlID0gdGhpcy5oYXNGaWxlO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZSgnaGFzLXZhbHVlJyk7XG4gICAgICAgIHRoaXMub25Jbml0LmVtaXQoeyBmaWxlSWQ6IHRoaXMuZmlsZUlkIH0pO1xuICAgIH1cblxuICAgIGhhc0tleXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VDb2RlXG4gICAgICAgICAgICAmJiB0aGlzLmVudGl0eVxuICAgICAgICAgICAgJiYgdGhpcy5lbnRpdHlLZXlcbiAgICAgICAgICAgICYmIHRoaXMuZW50aXR5S2V5ICE9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZEVtcHR5KCk7XG4gICAgfVxuXG4gICAgc2V0TWVudSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc0ZpbGUpIHtcbiAgICAgICAgICAgIHRoaXMubWVudSA9IFtdO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tZW51ID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnVOG6o2kgduG7gScsXG4gICAgICAgICAgICAgICAgaWNvbjogJ2ZhcyBmYS1kb3dubG9hZCcsXG4gICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHN1YnNjcmliZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucm9vdENvbnRleHQgJiYgIXRoaXMuY29udHJvbC5hdXRvU2F2ZWQpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGAtLS0tLS0tLS0tLS0tLS0tLT5zdWJzY3JpYmUgZXZlbnQgJHt0aGlzLmNvbnRyb2wuZmllbGR9XyR7dGhpcy5yb290Q29udGV4dC5rZXl9YCk7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSB0aGlzLnJvb3RDb250ZXh0LnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuQ09NTU9OLlNBVkVfRklMRV9JTl9GT1JNLCBycyA9PiB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLS0tPnNhdmUgZXZlbnQgJyArIHRoaXMuY29udHJvbC5maWVsZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTYXZlRmlsZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3N1YnNjcmliZSkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3Vuc3Vic2NyaWJlICcgKyB0aGlzLmNvbnRyb2wuZmllbGQpO1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsZURhdGFTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVEYXRhU2VydmljZS51bnJlZ2lzdGVyKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuXG4gICAgb25PcGVuU2VsZWN0KCkge1xuICAgICAgICBpZiAodGhpcy5maWxlLmJhc2ljRmlsZUlucHV0KSB7XG4gICAgICAgICAgICB0aGlzLmZpbGUuYmFzaWNGaWxlSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TZWxlY3RGaWxlKGV2dCkge1xuICAgICAgICB0aGlzLmhhc0ZpbGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5maWxlSWQgPSBudWxsO1xuICAgICAgICB0aGlzLmZpbGUuY2xlYXIoKTtcbiAgICAgICAgaWYgKGV2dC5lcnJvckZpbGVzICYmIGV2dC5lcnJvckZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd05vdGkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24gPSBgJHtldnQuZXJyb3JNZXNzYWdlc1swXS5zdW1tYXJ5fSR7ZXZ0LmVycm9yTWVzc2FnZXNbMF0uZGV0YWlsfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IGV2dC5zdWNjZXNzRmlsZXNbMF07XG4gICAgICAgICAgICB0aGlzLnNldEZpbGVOYW1lKHRoaXMuc2VsZWN0ZWRGaWxlID8gdGhpcy5zZWxlY3RlZEZpbGUubmFtZSA6IG51bGwpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmF1dG9TYXZlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2F2ZUZpbGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzRmlsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUJhc2UoJ2hhcy12YWx1ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3QuZW1pdCh0aGlzLnNlbGVjdGVkRmlsZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQuZW1pdCh0aGlzLnNlbGVjdGVkRmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250cm9sLmhhc0ZpbGUgPSB0aGlzLmhhc0ZpbGU7XG4gICAgfVxuXG4gICAgaGFuZGxlU2F2ZUZpbGUoKSB7XG4gICAgICAgIC8vIMSQw6MgbMawdSBmaWxlLlxuICAgICAgICBpZiAodGhpcy5maWxlSWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyxrDhu51uZyBo4bujcCBraMO0bmcgY8OzIMSR4bunIGtleXMuXG4gICAgICAgIGlmICghdGhpcy5oYXNLZXlzKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ2jGsGEgY+G6pXUgaMOsbmgga2V5cycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2jGsGEgY2jhu41uIGZpbGUuXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZpbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnc2VydmljZUNvZGUnLCB0aGlzLnNlcnZpY2VDb2RlKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdlbnRpdHknLCB0aGlzLmVudGl0eSk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZW50aXR5S2V5JywgdGhpcy5lbnRpdHlLZXkpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2lzTXVsdGlwbGUnLCAnZmFsc2UnKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdpc1B1YmxpYycsIGAke3RoaXMuY29udHJvbC5pc1B1YmxpY31gKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgdGhpcy5zZWxlY3RlZEZpbGUpO1xuXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0Tm90aSgnxJBhbmcgdOG6o2kgZmlsZSBsw6puLi4uJyk7XG4gICAgICAgIHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmNyZWF0ZVNlcnZpY2VGaWxlKGZvcm1EYXRhKVxuICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm90aShudWxsKTtcblxuICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gdGhpcy5zZWxlY3RlZEZpbGU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlTmFtZSA9IHRoaXMuc2VsZWN0ZWRGaWxlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUlkID0gcnMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNGaWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmhhc0ZpbGUgPSB0aGlzLmhhc0ZpbGU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLmVtaXQoeyBmaWxlSWQ6IHRoaXMuZmlsZUlkLCBzZWxlY3RlZEZpbGU6IHRoaXMuc2VsZWN0ZWRGaWxlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UucHJvY2Vzc0Vycm9yUmVzcG9uc2UocnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb3RpKG51bGwpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdVcGxvYWQgZmlsZSBjaMawYSB0aMOgbmggY8O0bmcnKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldE5vdGkobXNnKSB7XG4gICAgICAgIGlmIChtc2cpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd05vdGkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24gPSBtc2c7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dOb3RpID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRGaWxlTmFtZShmaWxlTmFtZSkge1xuICAgICAgICBpZiAoZmlsZU5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlTmFtZSA9IGZpbGVOYW1lO1xuICAgICAgICAgICAgdGhpcy5leHRlbnNpb24gPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlTmFtZVNob3J0ID0gZmlsZU5hbWUuc3Vic3RyKDAsIGZpbGVOYW1lLmxlbmd0aCAtIHRoaXMuZXh0ZW5zaW9uLmxlbmd0aCAtIDEpO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZU5hbWUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5leHRlbnNpb24gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVOYW1lU2hvcnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvd0NvbnRleHRNZW51KGV2dCkge1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51LnRvZ2dsZShldnQpO1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgb25SZW1vdmVGaWxlKCkge1xuICAgICAgICB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5kZWxldGVCeUlkKHRoaXMuZmlsZUlkKTtcbiAgICAgICAgY29uc3QgZmlsZURhdGEgPSB7IC4uLnRoaXMuZmlsZU9iaiB9O1xuICAgICAgICB0aGlzLmZpbGVPYmogPSBudWxsO1xuICAgICAgICB0aGlzLmZpbGVJZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZXRGaWxlTmFtZShudWxsKTtcbiAgICAgICAgdGhpcy5oYXNGaWxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29udHJvbC5oYXNGaWxlID0gdGhpcy5oYXNGaWxlO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZShudWxsKTtcbiAgICAgICAgdGhpcy5vblJlbW92ZS5lbWl0KGZpbGVEYXRhKTtcbiAgICB9XG5cbiAgICBvbkRvd25sb2FkRmlsZSgpIHtcbiAgICAgICAgdGhpcy5kb3dubG9hZCgpO1xuICAgIH1cblxuICAgIHNjYW5GaWxlKGV2dCkge1xuICAgICAgICAvLyBzZW5kIHRuIGNvbW1hbmRcbiAgICAgICAgY29uc3QgY29ycmVsYXRpb25JZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UucmFuZG9tU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgVG5DbGllbnRDb21tYW5kKCk7XG4gICAgICAgIGNvbW1hbmQuY29tbWFuZFR5cGUgPSBDb21tYW5kVHlwZS5TY2FuO1xuICAgICAgICAvLyBjb21tYW5kLmtleSA9IHRoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5zaWduYWxyLmNsaWVudEtleTtcbiAgICAgICAgY29tbWFuZC5rZXkgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuc2lnbmFsci5jbGllbnRLZXk7XG5cbiAgICAgICAgY29uc3Qgc2NhbkZpbGVDb21tYW5kID0ge1xuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogY29ycmVsYXRpb25JZCxcbiAgICAgICAgICAgIHVwbG9hZEZpbGVBcGk6IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFNjYW5GaWxlVXBsb2FkRW5kcG9pbnQoY29ycmVsYXRpb25JZCksXG4gICAgICAgICAgICBhY2Nlc3NUb2tlbjogdGhpcy5fYXV0aGVuU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpLFxuICAgICAgICAgICAgZGVmYXVsdEZpbGVOYW1lOiB0aGlzLmRlZmF1bHRTY2FuRmlsZU5hbWVcbiAgICAgICAgfTtcbiAgICAgICAgY29tbWFuZC5kYXRhID0gc2NhbkZpbGVDb21tYW5kO1xuXG4gICAgICAgIHRoaXMuX3RuQ2xpZW50U2VydmljZS5zZW5kQ29tbWFuZChjb21tYW5kKTtcblxuICAgICAgICB0aGlzLl9zaWduYWxSU2VydmljZS51blN1YnNjcmliZVZpZXdDb2RlKG51bGwsIGBGSUxFLlNDQU5ORUQuJHtjb3JyZWxhdGlvbklkfWApO1xuICAgICAgICB0aGlzLl9zaWduYWxSU2VydmljZS5zdGFydChudWxsLCBgRklMRS5TQ0FOTkVELiR7Y29ycmVsYXRpb25JZH1gLCBkYXRhID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55O1xuICAgICAgICAgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9iaiA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUlkID0gb2JqLm1lc3NhZ2UuY29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlT2JqLm5hbWUgPSBvYmoubWVzc2FnZS50aXRsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUlkID0gb2JqLm1lc3NhZ2UuY29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlT2JqLm5hbWUgPSBvYmoubWVzc2FnZS50aXRsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZpZXdPbmxpbmUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9maWxlT2JqZWN0U2VydmljZS5pc1N1cHBvcnRlZFZpZXdPbmxpbmUodGhpcy5maWxlT2JqLm5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyLmRhdGEgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsLmZpbGVWaWV3ZXIuZGF0YS5maWxlSWQgPSB0aGlzLmZpbGVJZDtcbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsLmZpbGVWaWV3ZXIuZGF0YS5maWxlTmFtZSA9IHRoaXMuZmlsZU9iai5uYW1lO1xuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWwuZmlsZVZpZXdlci5kYXRhLnNlcnZpY2UgPSB0aGlzLnNlcnZpY2VDb2RlO1xuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWwuZmlsZVZpZXdlci5kYXRhLmVudGl0eSA9IHRoaXMuZW50aXR5O1xuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWwuZmlsZVZpZXdlci5kYXRhLmVudGl0eUtleSA9IHRoaXMuZW50aXR5S2V5O1xuXG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyLmRhdGEuaXNGaWxlVmVyc2lvbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWwuZmlsZVZpZXdlci5zaG93ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZG93bmxvYWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRvd25sb2FkKCkge1xuICAgICAgICBpZiAoIXRoaXMuZmlsZUlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtb2RlbCA9IG5ldyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTyh7XG4gICAgICAgICAgICBmaWxlSWQ6IHRoaXMuZmlsZUlkXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZG93bmxvYWRMaW5rKG1vZGVsKTtcbiAgICB9XG5cbiAgICB1cGxvYWRGaWxlRnJvbURyaXZlKCkge1xuICAgICAgICAvLyB0aGlzLmRhdGFNb2RlbC5kcml2ZUZpbGVEaWFsb2cgPSB7XG4gICAgICAgIC8vICAgICBzaG93OiB0cnVlXG4gICAgICAgIC8vIH07XG4gICAgfVxuXG4gICAgY29weUZpbGVUb0RyaXZlKCkge1xuICAgICAgICAvLyB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmdldEZvbGRlcklkKHRoaXMudXNlcklkKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgLy8gICAgIHZhciBjb3B5RmlsZUR0byA9IG5ldyBDb3B5RmlsZUR0bygpO1xuICAgICAgICAvLyAgICAgY29weUZpbGVEdG8uaWQgPSB0aGlzLmZpbGVJZDtcbiAgICAgICAgLy8gICAgIGlmICh0aGlzLmZpbGVOYW1lID09IFwiXCIpIHtcbiAgICAgICAgLy8gICAgICAgICBpZiAodGhpcy5maWxlT2JqICE9IG51bGwpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29weUZpbGVEdG8ubmFtZSA9IHRoaXMuZmlsZU9iai5uYW1lO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICAgICAgY29weUZpbGVEdG8ubmFtZSA9IHRoaXMuZmlsZU5hbWU7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgICBjb3B5RmlsZUR0by5vd25lclR5cGUgPSB0aGlzLnVzZXJJZDtcbiAgICAgICAgLy8gICAgIGNvcHlGaWxlRHRvLmZvbGRlcklkID0gcmVzcG9uc2UuZGF0YTtcblxuICAgICAgICAvLyAgICAgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5jb3B5RmlsZShjb3B5RmlsZUR0bykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdTYW8gY2jDqXAgdMOgaSBsaeG7h3UgduG7gSB0aMawIG3hu6VjIGPDoSBuaMOibiB0aMOgbmggY8O0bmcnKTtcbiAgICAgICAgLy8gICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0J1c2luZXNzRXJyb3IoZXJyb3IuZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gfSk7XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgYXN5bmMgb3BlbkZpbGVWaWV3ZXIoKSB7XG4gICAgICAgIC8vIGNvbnN0IGZpbGVFeHBsb3JlclJlcyA9IGF3YWl0IHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UuZ2V0U2VydmljZUZpbGVFeHBsb3Jlcih0aGlzLnNlcnZpY2VDb2RlLCB0aGlzLmVudGl0eSwgdGhpcy5lbnRpdHlLZXkpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmNvbnRyb2wpO1xuICAgICAgICAvLyBpZiAoIWZpbGVFeHBsb3JlclJlcy5zdWNjZXNzIHx8IGZpbGVFeHBsb3JlclJlcy5kYXRhKSB7XG4gICAgICAgIC8vICAgICByZXR1cm47XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gY29uc3QgZXhwbG9yZXJJdGVtID0gZmlsZUV4cGxvcmVyUmVzLmRhdGE7XG4gICAgICAgIC8vIGNvbnN0IGNhblZpZXdPbmxpbmUgPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5pc1N1cHBvcnRlZFZpZXdPbmxpbmUoZXhwbG9yZXJJdGVtLm5hbWUpO1xuICAgICAgICBjb25zdCBmaWxlQmluYXJ5ID0gYXdhaXQgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5jaGVja1BoeXNpY2FsRmlsZSh0aGlzLmZpbGVJZCk7XG4gICAgICAgIGlmICghZmlsZUJpbmFyeS5zdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0ZpbGUga2jDtG5nIHThu5NuIHThuqFpLCB2dWkgbMOybmcgbGnDqm4gaOG7hyBxdeG6o24gdHLhu4sgdmnDqm4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWxlT2JqZWN0ID0gYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RGV0YWlsKHRoaXMuZmlsZUlkKTtcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gJyc7XG4gICAgICAgIGlmICghZmlsZU9iamVjdC5zdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0PDsyBs4buXaSB0cm9uZyBsw7pjIGzhuqV5IGThu68gbGnhu4d1IGZpbGUsIHZ1aSBsw7JuZyBsacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZpbGVOYW1lID0gZmlsZU9iamVjdD8ubmFtZTtcbiAgICAgICAgdGhpcy5mb3Jtcy5maWxlVmlld2VyLmZvcm1EYXRhLmRhdGEgPSB7XG4gICAgICAgICAgICBmaWxlSWQ6IHRoaXMuZmlsZUlkLFxuICAgICAgICAgICAgaXNGaWxlVmVyc2lvbjogZmFsc2UsXG4gICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgIHNlcnZpY2U6IHRoaXMuc2VydmljZUNvZGUsXG4gICAgICAgICAgICBlbnRpdHk6IHRoaXMuZW50aXR5LFxuICAgICAgICAgICAgZW50aXR5S2V5OiB0aGlzLmVudGl0eUtleSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5mb3Jtcy5maWxlVmlld2VyLnNob3cgPSB0cnVlO1xuICAgIH1cbn1cbiJdfQ==
468
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1maWxlLXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9zZXJ2aWNlLWZpbGUtdXBsb2FkL3NlcnZpY2UtZmlsZS11cGxvYWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU5RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUs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LDBCQUEwQixDQUFDO3dCQUN6RCxLQUFLLEVBQUUsSUFBSTtxQkFDZDtvQkFDRCx1QkFBdUI7aUJBQzFCOzthQUNKOzs7WUFmUSxpQkFBaUI7WUFWakIsY0FBYztZQUZkLG1CQUFtQjtZQUduQixlQUFlO1lBSmYsYUFBYTtZQUtiLFdBQVc7WUFIWCxlQUFlO1lBUWYsbUJBQW1CO1lBRW5CLG1CQUFtQjtZQS9CeEIsUUFBUTs7OzBCQWlEUCxTQUFTLFNBQUMsYUFBYTttQkFDdkIsU0FBUyxTQUFDLE1BQU07Z0NBQ2hCLFNBQVMsU0FBQyxtQkFBbUI7NEJBQzdCLFNBQVMsU0FBQyxlQUFlOzhCQUV6QixLQUFLO3NCQUNMLEtBQUs7MEJBQ0wsS0FBSztxQkFDTCxLQUFLO3dCQUVMLEtBQUs7MEJBSUwsS0FBSztxQkFFTCxNQUFNO3VCQUNOLE1BQU07dUJBQ04sTUFBTTt3QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb250ZXh0TWVudSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2NvbnRleHRtZW51JztcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9maWxldXBsb2FkJztcbmltcG9ydCB7IE92ZXJsYXlQYW5lbCB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL292ZXJsYXlwYW5lbCc7XG5cbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7IEZpbGVVcGxvYWRDb250cm9sU2NoZW1hIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvbW9kdWxlLWNvbmZpZyc7XG5pbXBvcnQgeyBDb21tYW5kVHlwZSwgVG5DbGllbnRDb21tYW5kIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RuLWNsaWVudC1jb21tYW5kJztcbmltcG9ydCB7IEF1dGhlblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoZW4uc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zaWduYWxyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG5DbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG4tY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZVZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4uL2ZpbGUtZXhwbG9yZXIvZmlsZS12aWV3ZXIvZmlsZS12aWV3ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEZpbGVFeHBsb3Jlckl0ZW0gfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL21vZGVscy9maWxlLWV4cGxvcmVyLWl0ZW0nO1xuaW1wb3J0IHsgR2VuZXJhdGVMaW5rRG93bmxvYWREVE8gfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL21vZGVscy9nZW5lcmF0ZS1saW5rLWRvd25sb2FkLWR0byc7XG5pbXBvcnQgeyBJU2VydmljZUZpbGVVcGxvYWRDb21wb25lbnQgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL21vZGVscy9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERvd25sb2FkTGlua1NlcnZpY2UgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL3NlcnZpY2VzL2Rvd25sb2FkLWxpbmsuc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlRGF0YVNlcnZpY2UgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL3NlcnZpY2VzL2ZpbGUtZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVFeHBsb3JlclNlcnZpY2UgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL3NlcnZpY2VzL2ZpbGUtZXhwbG9yZXIuc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlT2JqZWN0U2VydmljZSB9IGZyb20gJy4uL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZSc7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzZXJ2aWNlLWZpbGUtdXBsb2FkJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VydmljZS1maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc2VydmljZS1maWxlLXVwbG9hZC5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlcnZpY2VGaWxlVXBsb2FkQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIENvbXBvbmVudENvbnRleHRTZXJ2aWNlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlRmlsZVVwbG9hZENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBJU2VydmljZUZpbGVVcGxvYWRDb21wb25lbnQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQFZpZXdDaGlsZCgnY29udGV4dE1lbnUnKSBjb250ZXh0TWVudTogQ29udGV4dE1lbnU7XG4gICAgQFZpZXdDaGlsZCgnZmlsZScpIGZpbGU6IEZpbGVVcGxvYWQ7XG4gICAgQFZpZXdDaGlsZCgnZmlsZURldGFpbENvbW1hbmQnKSBmaWxlRGV0YWlsQ29tbWFuZDogT3ZlcmxheVBhbmVsO1xuICAgIEBWaWV3Q2hpbGQoJ2ZpbGVWaWV3ZXJOZXcnKSBmaWxlVmlld2VyTmV3OiBGaWxlVmlld2VyQ29tcG9uZW50O1xuXG4gICAgQElucHV0KCkgZmlsZURhdGFTZXJ2aWNlOiBGaWxlRGF0YVNlcnZpY2U7XG4gICAgQElucHV0KCkgY29udHJvbDogRmlsZVVwbG9hZENvbnRyb2xTY2hlbWEgPSBuZXcgRmlsZVVwbG9hZENvbnRyb2xTY2hlbWEoKTtcbiAgICBASW5wdXQoKSBzZXJ2aWNlQ29kZSA9ICcnO1xuICAgIEBJbnB1dCgpIGVudGl0eSA9ICcnO1xuICAgIF9lbnRpdHlLZXk6IHN0cmluZztcbiAgICBASW5wdXQoKSBzZXQgZW50aXR5S2V5KHZhbDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2VudGl0eUtleSA9IHZhbDtcbiAgICB9O1xuXG4gICAgQElucHV0KCkgY2hvb3NlTGFiZWwgPSAnQ2jhu41uJztcblxuICAgIEBPdXRwdXQoKSBvbkluaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uU2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJlbW92ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgZ2V0IGVudGl0eUtleSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudGl0eUtleTtcbiAgICB9XG5cbiAgICBmaWxlSWQ6IHN0cmluZyA9IG51bGw7XG4gICAgc2VsZWN0ZWRGaWxlID0gbnVsbDtcbiAgICBzZWxlY3RlZEZpbGVOYW1lOiBzdHJpbmcgPSBudWxsO1xuICAgIGV4dGVuc2lvbjogc3RyaW5nID0gbnVsbDtcbiAgICBzZWxlY3RlZEZpbGVOYW1lU2hvcnQ6IHN0cmluZyA9IG51bGw7XG4gICAgaGFzRmlsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBzaG93Tm90aTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGZpbGVPYmo6IEZpbGVFeHBsb3Jlckl0ZW0gPSBuZXcgRmlsZUV4cGxvcmVySXRlbSgpO1xuICAgIHVzZXJJZDogc3RyaW5nID0gbnVsbDtcbiAgICBub3RpZmljYXRpb246IHN0cmluZyA9IG51bGw7XG4gICAgX21vZHVsZUNvbmZpZzogTW9kdWxlQ29uZmlnO1xuICAgIGFjY2VwdDogc3RyaW5nID0gJyc7XG4gICAgLy8gPSAnaW1hZ2UvKiwueGxzeCwueGxzLC5wZGYsLmRvYywuZG9jeCwuemlwLC5yYXIsJztcbiAgICByZWFkb25seSA9IG51bGw7XG4gICAgZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBkZWZhdWx0U2NhbkZpbGVOYW1lID0gbnVsbDtcbiAgICBtZW51OiBBcnJheTxhbnk+ID0gW107XG5cbiAgICBvbkNoYW5nZUJhc2U6ICh2YWwpID0+IHZvaWQ7XG4gICAgb25Ub3VjaGVkOiAodmFsKSA9PiB2b2lkO1xuICAgIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgX3N1YnNjcmliZTogU3Vic2NyaXB0aW9uID0gbnVsbDtcblxuICAgIGRhdGFNb2RlbDogYW55ID0ge307XG4gICAgZm9ybXM6IGFueSA9IHt9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2ZpbGVPYmplY3RTZXJ2aWNlOiBGaWxlT2JqZWN0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfc2lnbmFsUlNlcnZpY2U6IFNpZ25hbFJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF90bkNsaWVudFNlcnZpY2U6IFRuQ2xpZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfYXV0aGVuU2VydmljZTogQXV0aGVuU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfZG93bmxvYWRMaW5rU2VydmljZTogRG93bmxvYWRMaW5rU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9maWxlRXhwbG9yZXJTZXJ2aWNlOiBGaWxlRXhwbG9yZXJTZXJ2aWNlLFxuICAgICAgICBfaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XG5cbiAgICAgICAgaWYgKHRoaXMuX3VzZXJTZXJ2aWNlLmlzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJJZCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldFVzZXJJZENvbWJpbmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyID0ge307XG4gICAgICAgIHRoaXMuZGF0YU1vZGVsLmRyaXZlRmlsZURpYWxvZyA9IHsgcG9wdXBTaXplOiA8YW55Pnt9IH07XG5cbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc2V0VXAoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICBzZXRVcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5hY2NlcHQpIHtcbiAgICAgICAgICAgIHRoaXMuYWNjZXB0ID0gdGhpcy5jb250cm9sLmFjY2VwdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRyb2wuYWNjZXB0RmlsZVR5cGVzKSB7XG4gICAgICAgICAgICB0aGlzLmFjY2VwdCA9IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldEFjY2VwdGVkRXh0ZW5zaW9ucyh0aGlzLmNvbnRyb2wuYWNjZXB0RmlsZVR5cGVzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlYWRvbmx5ID0gdGhpcy5jb250cm9sLnJlYWRvbmx5O1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5jb250cm9sLmRpc2FibGVkO1xuICAgICAgICB0aGlzLmZvcm1zWydmaWxlVmlld2VyJ10gPSB7XG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcbiAgICAgICAgICAgIGZvcm1EYXRhOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuZmlsZURhdGFTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVEYXRhU2VydmljZS5yZWdpc3Rlcih0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbnRpdHlLZXkgJiYgIXRoaXMuZmlsZURhdGFTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLmdldFNlcnZpY2VGaWxlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRTZXJ2aWNlRmlsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzS2V5cygpKSB7XG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlUmVxdWVzdE1vZGVsID0ge1xuICAgICAgICAgICAgICAgIHNlcnZpY2VDb2RlOiB0aGlzLnNlcnZpY2VDb2RlLFxuICAgICAgICAgICAgICAgIGVudGl0eTogdGhpcy5lbnRpdHksXG4gICAgICAgICAgICAgICAgZW50aXR5S2V5OiB0aGlzLmVudGl0eUtleSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldE5vdGkoJ8SQYW5nIGzhuqV5IMSRw61uaCBrw6htLi4uJyk7XG4gICAgICAgICAgICBjb25zdCBmaWxlT2JqZWN0ID0gKGF3YWl0IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFNpbmdsZVNlcnZpY2VGaWxlKHNlcnZpY2VSZXF1ZXN0TW9kZWwpKS5kYXRhO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNldE5vdGkobnVsbCk7XG4gICAgICAgICAgICBpZiAoZmlsZU9iamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RmlsZU9iamVjdChmaWxlT2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsZU9iamVjdChudWxsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRyb2wuaGFzRmlsZSA9IHRoaXMuaGFzRmlsZTtcbiAgICAgICAgdGhpcy5zZXRNZW51KCk7XG4gICAgfVxuXG4gICAgc2V0RmlsZU9iamVjdChmaWxlT2JqZWN0OiBhbnkpIHtcbiAgICAgICAgaWYgKGZpbGVPYmplY3QgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5maWxlT2JqID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZmlsZUlkID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuaGFzRmlsZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVOYW1lID0gbnVsbDtcblxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUJhc2UobnVsbCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxlT2JqID0gZmlsZU9iamVjdDtcbiAgICAgICAgdGhpcy5maWxlSWQgPSBmaWxlT2JqZWN0LmlkO1xuICAgICAgICB0aGlzLnNldEZpbGVOYW1lKGZpbGVPYmplY3QubmFtZSk7XG4gICAgICAgIHRoaXMuaGFzRmlsZSA9IHRydWU7XG4gICAgICAgIHRoaXMuY29udHJvbC5oYXNGaWxlID0gdGhpcy5oYXNGaWxlO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZSgnaGFzLXZhbHVlJyk7XG4gICAgICAgIHRoaXMub25Jbml0LmVtaXQoeyBmaWxlSWQ6IHRoaXMuZmlsZUlkIH0pO1xuICAgIH1cblxuICAgIGhhc0tleXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2VDb2RlXG4gICAgICAgICAgICAmJiB0aGlzLmVudGl0eVxuICAgICAgICAgICAgJiYgdGhpcy5lbnRpdHlLZXlcbiAgICAgICAgICAgICYmIHRoaXMuZW50aXR5S2V5ICE9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZEVtcHR5KCk7XG4gICAgfVxuXG4gICAgc2V0TWVudSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc0ZpbGUpIHtcbiAgICAgICAgICAgIHRoaXMubWVudSA9IFtdO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tZW51ID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnVOG6o2kgduG7gScsXG4gICAgICAgICAgICAgICAgaWNvbjogJ2ZhcyBmYS1kb3dubG9hZCcsXG4gICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHN1YnNjcmliZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucm9vdENvbnRleHQgJiYgIXRoaXMuY29udHJvbC5hdXRvU2F2ZWQpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGAtLS0tLS0tLS0tLS0tLS0tLT5zdWJzY3JpYmUgZXZlbnQgJHt0aGlzLmNvbnRyb2wuZmllbGR9XyR7dGhpcy5yb290Q29udGV4dC5rZXl9YCk7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSB0aGlzLnJvb3RDb250ZXh0LnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuQ09NTU9OLlNBVkVfRklMRV9JTl9GT1JNLCBycyA9PiB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLS0tPnNhdmUgZXZlbnQgJyArIHRoaXMuY29udHJvbC5maWVsZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTYXZlRmlsZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3N1YnNjcmliZSkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3Vuc3Vic2NyaWJlICcgKyB0aGlzLmNvbnRyb2wuZmllbGQpO1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsZURhdGFTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVEYXRhU2VydmljZS51bnJlZ2lzdGVyKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuXG4gICAgb25PcGVuU2VsZWN0KCkge1xuICAgICAgICBpZiAodGhpcy5maWxlLmJhc2ljRmlsZUlucHV0KSB7XG4gICAgICAgICAgICB0aGlzLmZpbGUuYmFzaWNGaWxlSW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TZWxlY3RGaWxlKGV2dCkge1xuICAgICAgICB0aGlzLmhhc0ZpbGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5maWxlSWQgPSBudWxsO1xuICAgICAgICB0aGlzLmZpbGUuY2xlYXIoKTtcbiAgICAgICAgaWYgKGV2dC5lcnJvckZpbGVzICYmIGV2dC5lcnJvckZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd05vdGkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24gPSBgJHtldnQuZXJyb3JNZXNzYWdlc1swXS5zdW1tYXJ5fSR7ZXZ0LmVycm9yTWVzc2FnZXNbMF0uZGV0YWlsfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IGV2dC5zdWNjZXNzRmlsZXNbMF07XG4gICAgICAgICAgICB0aGlzLnNldEZpbGVOYW1lKHRoaXMuc2VsZWN0ZWRGaWxlID8gdGhpcy5zZWxlY3RlZEZpbGUubmFtZSA6IG51bGwpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmF1dG9TYXZlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2F2ZUZpbGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzRmlsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUJhc2UoJ2hhcy12YWx1ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3QuZW1pdCh0aGlzLnNlbGVjdGVkRmlsZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWQuZW1pdCh0aGlzLnNlbGVjdGVkRmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250cm9sLmhhc0ZpbGUgPSB0aGlzLmhhc0ZpbGU7XG4gICAgfVxuXG4gICAgaGFuZGxlU2F2ZUZpbGUoKSB7XG4gICAgICAgIC8vIMSQw6MgbMawdSBmaWxlLlxuICAgICAgICBpZiAodGhpcy5maWxlSWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyxrDhu51uZyBo4bujcCBraMO0bmcgY8OzIMSR4bunIGtleXMuXG4gICAgICAgIGlmICghdGhpcy5oYXNLZXlzKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ2jGsGEgY+G6pXUgaMOsbmgga2V5cycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2jGsGEgY2jhu41uIGZpbGUuXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZpbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnc2VydmljZUNvZGUnLCB0aGlzLnNlcnZpY2VDb2RlKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdlbnRpdHknLCB0aGlzLmVudGl0eSk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZW50aXR5S2V5JywgdGhpcy5lbnRpdHlLZXkpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2lzTXVsdGlwbGUnLCAnZmFsc2UnKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdpc1B1YmxpYycsIGAke3RoaXMuY29udHJvbC5pc1B1YmxpY31gKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgdGhpcy5zZWxlY3RlZEZpbGUpO1xuXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0Tm90aSgnxJBhbmcgdOG6o2kgZmlsZSBsw6puLi4uJyk7XG4gICAgICAgIHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmNyZWF0ZVNlcnZpY2VGaWxlKGZvcm1EYXRhKVxuICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm90aShudWxsKTtcblxuICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gdGhpcy5zZWxlY3RlZEZpbGU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlTmFtZSA9IHRoaXMuc2VsZWN0ZWRGaWxlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUlkID0gcnMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNGaWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmhhc0ZpbGUgPSB0aGlzLmhhc0ZpbGU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLmVtaXQoeyBmaWxlSWQ6IHRoaXMuZmlsZUlkLCBzZWxlY3RlZEZpbGU6IHRoaXMuc2VsZWN0ZWRGaWxlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UucHJvY2Vzc0Vycm9yUmVzcG9uc2UocnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb3RpKG51bGwpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdVcGxvYWQgZmlsZSBjaMawYSB0aMOgbmggY8O0bmcnKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldE5vdGkobXNnKSB7XG4gICAgICAgIGlmIChtc2cpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd05vdGkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24gPSBtc2c7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dOb3RpID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRGaWxlTmFtZShmaWxlTmFtZSkge1xuICAgICAgICBpZiAoZmlsZU5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlTmFtZSA9IGZpbGVOYW1lO1xuICAgICAgICAgICAgdGhpcy5leHRlbnNpb24gPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlTmFtZVNob3J0ID0gZmlsZU5hbWUuc3Vic3RyKDAsIGZpbGVOYW1lLmxlbmd0aCAtIHRoaXMuZXh0ZW5zaW9uLmxlbmd0aCAtIDEpO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZU5hbWUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5leHRlbnNpb24gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVOYW1lU2hvcnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvd0NvbnRleHRNZW51KGV2dCkge1xuICAgICAgICB0aGlzLmNvbnRleHRNZW51LnRvZ2dsZShldnQpO1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgb25SZW1vdmVGaWxlKCkge1xuICAgICAgICB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5kZWxldGVCeUlkKHRoaXMuZmlsZUlkKTtcbiAgICAgICAgY29uc3QgZmlsZURhdGEgPSB7IC4uLnRoaXMuZmlsZU9iaiB9O1xuICAgICAgICB0aGlzLmZpbGVPYmogPSBudWxsO1xuICAgICAgICB0aGlzLmZpbGVJZCA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZXRGaWxlTmFtZShudWxsKTtcbiAgICAgICAgdGhpcy5oYXNGaWxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29udHJvbC5oYXNGaWxlID0gdGhpcy5oYXNGaWxlO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZShudWxsKTtcbiAgICAgICAgdGhpcy5vblJlbW92ZS5lbWl0KGZpbGVEYXRhKTtcbiAgICB9XG5cbiAgICBvbkRvd25sb2FkRmlsZSgpIHtcbiAgICAgICAgdGhpcy5kb3dubG9hZCgpO1xuICAgIH1cblxuICAgIHNjYW5GaWxlKGV2dCkge1xuICAgICAgICAvLyBzZW5kIHRuIGNvbW1hbmRcbiAgICAgICAgY29uc3QgY29ycmVsYXRpb25JZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UucmFuZG9tU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgVG5DbGllbnRDb21tYW5kKCk7XG4gICAgICAgIGNvbW1hbmQuY29tbWFuZFR5cGUgPSBDb21tYW5kVHlwZS5TY2FuO1xuICAgICAgICAvLyBjb21tYW5kLmtleSA9IHRoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5zaWduYWxyLmNsaWVudEtleTtcbiAgICAgICAgY29tbWFuZC5rZXkgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuc2lnbmFsci5jbGllbnRLZXk7XG5cbiAgICAgICAgY29uc3Qgc2NhbkZpbGVDb21tYW5kID0ge1xuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogY29ycmVsYXRpb25JZCxcbiAgICAgICAgICAgIHVwbG9hZEZpbGVBcGk6IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFNjYW5GaWxlVXBsb2FkRW5kcG9pbnQoY29ycmVsYXRpb25JZCksXG4gICAgICAgICAgICBhY2Nlc3NUb2tlbjogdGhpcy5fYXV0aGVuU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpLFxuICAgICAgICAgICAgZGVmYXVsdEZpbGVOYW1lOiB0aGlzLmRlZmF1bHRTY2FuRmlsZU5hbWVcbiAgICAgICAgfTtcbiAgICAgICAgY29tbWFuZC5kYXRhID0gc2NhbkZpbGVDb21tYW5kO1xuXG4gICAgICAgIHRoaXMuX3RuQ2xpZW50U2VydmljZS5zZW5kQ29tbWFuZChjb21tYW5kKTtcblxuICAgICAgICB0aGlzLl9zaWduYWxSU2VydmljZS51blN1YnNjcmliZVZpZXdDb2RlKG51bGwsIGBGSUxFLlNDQU5ORUQuJHtjb3JyZWxhdGlvbklkfWApO1xuICAgICAgICB0aGlzLl9zaWduYWxSU2VydmljZS5zdGFydChudWxsLCBgRklMRS5TQ0FOTkVELiR7Y29ycmVsYXRpb25JZH1gLCBkYXRhID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55O1xuICAgICAgICAgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9iaiA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUlkID0gb2JqLm1lc3NhZ2UuY29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlT2JqLm5hbWUgPSBvYmoubWVzc2FnZS50aXRsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUlkID0gb2JqLm1lc3NhZ2UuY29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlT2JqLm5hbWUgPSBvYmoubWVzc2FnZS50aXRsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZpZXdPbmxpbmUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9maWxlT2JqZWN0U2VydmljZS5pc1N1cHBvcnRlZFZpZXdPbmxpbmUodGhpcy5maWxlT2JqLm5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyLmRhdGEgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsLmZpbGVWaWV3ZXIuZGF0YS5maWxlSWQgPSB0aGlzLmZpbGVJZDtcbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsLmZpbGVWaWV3ZXIuZGF0YS5maWxlTmFtZSA9IHRoaXMuZmlsZU9iai5uYW1lO1xuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWwuZmlsZVZpZXdlci5kYXRhLnNlcnZpY2UgPSB0aGlzLnNlcnZpY2VDb2RlO1xuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWwuZmlsZVZpZXdlci5kYXRhLmVudGl0eSA9IHRoaXMuZW50aXR5O1xuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWwuZmlsZVZpZXdlci5kYXRhLmVudGl0eUtleSA9IHRoaXMuZW50aXR5S2V5O1xuXG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyLmRhdGEuaXNGaWxlVmVyc2lvbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWwuZmlsZVZpZXdlci5zaG93ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZG93bmxvYWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRvd25sb2FkKCkge1xuICAgICAgICBpZiAoIXRoaXMuZmlsZUlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtb2RlbCA9IG5ldyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTyh7XG4gICAgICAgICAgICBmaWxlSWQ6IHRoaXMuZmlsZUlkXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZG93bmxvYWRMaW5rKG1vZGVsKTtcbiAgICB9XG5cbiAgICB1cGxvYWRGaWxlRnJvbURyaXZlKCkge1xuICAgICAgICAvLyB0aGlzLmRhdGFNb2RlbC5kcml2ZUZpbGVEaWFsb2cgPSB7XG4gICAgICAgIC8vICAgICBzaG93OiB0cnVlXG4gICAgICAgIC8vIH07XG4gICAgfVxuXG4gICAgY29weUZpbGVUb0RyaXZlKCkge1xuICAgICAgICAvLyB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmdldEZvbGRlcklkKHRoaXMudXNlcklkKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgLy8gICAgIHZhciBjb3B5RmlsZUR0byA9IG5ldyBDb3B5RmlsZUR0bygpO1xuICAgICAgICAvLyAgICAgY29weUZpbGVEdG8uaWQgPSB0aGlzLmZpbGVJZDtcbiAgICAgICAgLy8gICAgIGlmICh0aGlzLmZpbGVOYW1lID09IFwiXCIpIHtcbiAgICAgICAgLy8gICAgICAgICBpZiAodGhpcy5maWxlT2JqICE9IG51bGwpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29weUZpbGVEdG8ubmFtZSA9IHRoaXMuZmlsZU9iai5uYW1lO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICAgICAgY29weUZpbGVEdG8ubmFtZSA9IHRoaXMuZmlsZU5hbWU7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgICBjb3B5RmlsZUR0by5vd25lclR5cGUgPSB0aGlzLnVzZXJJZDtcbiAgICAgICAgLy8gICAgIGNvcHlGaWxlRHRvLmZvbGRlcklkID0gcmVzcG9uc2UuZGF0YTtcblxuICAgICAgICAvLyAgICAgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5jb3B5RmlsZShjb3B5RmlsZUR0bykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdTYW8gY2jDqXAgdMOgaSBsaeG7h3UgduG7gSB0aMawIG3hu6VjIGPDoSBuaMOibiB0aMOgbmggY8O0bmcnKTtcbiAgICAgICAgLy8gICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0J1c2luZXNzRXJyb3IoZXJyb3IuZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gfSk7XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgYXN5bmMgb3BlbkZpbGVWaWV3ZXIoKSB7XG4gICAgICAgIC8vIGNvbnN0IGZpbGVFeHBsb3JlclJlcyA9IGF3YWl0IHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UuZ2V0U2VydmljZUZpbGVFeHBsb3Jlcih0aGlzLnNlcnZpY2VDb2RlLCB0aGlzLmVudGl0eSwgdGhpcy5lbnRpdHlLZXkpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmNvbnRyb2wpO1xuICAgICAgICAvLyBpZiAoIWZpbGVFeHBsb3JlclJlcy5zdWNjZXNzIHx8IGZpbGVFeHBsb3JlclJlcy5kYXRhKSB7XG4gICAgICAgIC8vICAgICByZXR1cm47XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gY29uc3QgZXhwbG9yZXJJdGVtID0gZmlsZUV4cGxvcmVyUmVzLmRhdGE7XG4gICAgICAgIC8vIGNvbnN0IGNhblZpZXdPbmxpbmUgPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5pc1N1cHBvcnRlZFZpZXdPbmxpbmUoZXhwbG9yZXJJdGVtLm5hbWUpO1xuICAgICAgICBjb25zdCBmaWxlQmluYXJ5ID0gYXdhaXQgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5jaGVja1BoeXNpY2FsRmlsZSh0aGlzLmZpbGVJZCk7XG4gICAgICAgIGlmICghZmlsZUJpbmFyeS5zdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0ZpbGUga2jDtG5nIHThu5NuIHThuqFpLCB2dWkgbMOybmcgbGnDqm4gaOG7hyBxdeG6o24gdHLhu4sgdmnDqm4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWxlT2JqZWN0ID0gYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RGV0YWlsKHRoaXMuZmlsZUlkKTtcbiAgICAgICAgbGV0IGZpbGVOYW1lID0gJyc7XG4gICAgICAgIGlmICghZmlsZU9iamVjdC5zdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0PDsyBs4buXaSB0cm9uZyBsw7pjIGzhuqV5IGThu68gbGnhu4d1IGZpbGUsIHZ1aSBsw7JuZyBsacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZpbGVOYW1lID0gZmlsZU9iamVjdD8ubmFtZTtcbiAgICAgICAgdGhpcy5mb3Jtcy5maWxlVmlld2VyLmZvcm1EYXRhLmRhdGEgPSB7XG4gICAgICAgICAgICBmaWxlSWQ6IHRoaXMuZmlsZUlkLFxuICAgICAgICAgICAgaXNGaWxlVmVyc2lvbjogZmFsc2UsXG4gICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgIHNlcnZpY2U6IHRoaXMuc2VydmljZUNvZGUsXG4gICAgICAgICAgICBlbnRpdHk6IHRoaXMuZW50aXR5LFxuICAgICAgICAgICAgZW50aXR5S2V5OiB0aGlzLmVudGl0eUtleSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5mb3Jtcy5maWxlVmlld2VyLnNob3cgPSB0cnVlO1xuICAgIH1cbn1cbiJdfQ==