tuain-ng-forms-lib 12.0.72 → 12.0.76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/tuain-ng-forms-lib.umd.js +9 -5
- package/bundles/tuain-ng-forms-lib.umd.js.map +1 -1
- package/esm2015/lib/classes/forms/table/table.js +4 -1
- package/esm2015/lib/components/elements/tables/table.component.js +1 -1
- package/esm2015/lib/components/forms/basic-form.js +7 -6
- package/fesm2015/tuain-ng-forms-lib.js +9 -5
- package/fesm2015/tuain-ng-forms-lib.js.map +1 -1
- package/lib/classes/forms/table/table.d.ts +3 -0
- package/lib/components/elements/tables/table.component.d.ts +1 -0
- package/package.json +1 -1
- package/tuain-ng-forms-lib.metadata.json +1 -1
|
@@ -438,11 +438,12 @@ export class BasicFormComponent {
|
|
|
438
438
|
}
|
|
439
439
|
subscribeSectionActivation() {
|
|
440
440
|
const formSections = this._formStructure.sections;
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
441
|
+
const sectionNames = Object.keys(formSections);
|
|
442
|
+
for (let index = 0; index < sectionNames.length; index++) {
|
|
443
|
+
const sectionName = sectionNames[index];
|
|
444
|
+
const section = formSections[sectionName];
|
|
445
|
+
section.activation.subscribe(code => this.launchSectionActivation(code));
|
|
446
|
+
section.inactivation.subscribe(code => this.launchSectionInactivation(code));
|
|
446
447
|
}
|
|
447
448
|
}
|
|
448
449
|
subscribeFieldsSubjects() {
|
|
@@ -1383,4 +1384,4 @@ BasicFormComponent.ctorParameters = () => [
|
|
|
1383
1384
|
{ type: LibEventManagerService },
|
|
1384
1385
|
{ type: LibFileManagementService }
|
|
1385
1386
|
];
|
|
1386
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvYmFzaWMtZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQU9uRixNQUFNLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQztBQUM1QyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUM7QUFDL0IsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDO0FBQy9CLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQztBQUVsQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFDMUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBS3RCLE1BQU0sT0FBTyxrQkFBa0I7SUE2TzdCLFlBQ1ksa0JBQXlDLEVBQ3pDLGFBQXFDLEVBQ3JDLGdCQUEwQztRQUYxQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXVCO1FBQ3pDLGtCQUFhLEdBQWIsYUFBYSxDQUF3QjtRQUNyQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTBCO1FBL085QyxtQkFBYyxHQUF5QixJQUFJLENBQUM7UUFDNUMsa0JBQWEsR0FBVyxJQUFJLENBQUM7UUFHN0Isd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQzdDLCtCQUEr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LGFBQWEsQ0FBQyxVQUFVLENBQUMsbUNBQUksRUFBRSxDQUFDO1lBQ2hFLE1BQU0sU0FBUyxHQUFHLE1BQUEsWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFHLFVBQVUsQ0FBQyxtQ0FBSSxVQUFVLENBQUM7WUFDM0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7OztZQXR4Q0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSwyQkFBMkI7YUFDdEM7OztZQXBCUSxxQkFBcUI7WUFDckIsc0JBQXNCO1lBQ3RCLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybVN0cnVjdHVyZUFuZERhdGEgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm1zL2Zvcm0nO1xuaW1wb3J0IHsgTGliRm9ybU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGliRXZlbnRNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V2ZW50LW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBMaWJGaWxlTWFuYWdlbWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWxlLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBmb3JtQWN0aW9ucywgTk9fRVJST1IsIEhFQURFUiB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybXMvZm9ybS5jb25zdGFudHMnO1xuaW1wb3J0IHsgRm9ybUFjdGlvbiB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybXMvYWN0aW9uJztcbmltcG9ydCB7IEZpZWxkRGVzY3JpcHRvciwgRmllbGRPcHRpb24gfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm1zL2ZpZWxkJztcbmltcG9ydCB7IFJlY29yZFRhYmxlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3Jtcy90YWJsZS90YWJsZSc7XG5pbXBvcnQgeyBSZWNvcmRGb3JtU2VjdGlvbiB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybXMvc2VjdGlvbic7XG5pbXBvcnQgeyBSZWNvcmRGb3JtU3ViU2VjdGlvbiB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybXMvc3Vic2VjdGlvbic7XG5cbmNvbnN0IFBBWUxPQURfVkVSU0lPTiA9ICdUVUFJTkVYQ0hBTkdFXzEuMCc7XG5jb25zdCBJTkxJTkVfQUNUSU9OID0gJ0lOTElORSc7XG5jb25zdCBHTE9CQUxfQUNUSU9OID0gJ0dMT0JBTCc7XG5jb25zdCBHRVRfREFUQV9BQ1RJT04gPSAnR0VUREFUQSc7XG5cbmNvbnN0IFNVQkpFQ1QgPSAnc3ViamVjdCc7XG5jb25zdCBUT0tFTiA9ICd0b2tlbic7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gXG59KVxuZXhwb3J0IGNsYXNzIEJhc2ljRm9ybUNvbXBvbmVudCB7XG4gIHByaXZhdGUgX2Zvcm1TdHJ1Y3R1cmU6IEZvcm1TdHJ1Y3R1cmVBbmREYXRhID0gbnVsbDtcbiAgcHJpdmF0ZSBfY29udHJvbFRva2VuOiBzdHJpbmcgPSBudWxsO1xuICBwcml2YXRlIF9vcmlnaW5Ub2tlbjogc3RyaW5nO1xuICBwcml2YXRlIF9mb3JtUm91dGU6IHN0cmluZztcbiAgcHJpdmF0ZSBfZGVmaW5pdGlvbk9idGFpbmVkOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIEV2ZW50b3MgZGUgYWNjaW9uZXMgeSBjYW1wb3NcbiAgcHJpdmF0ZSBfZm9ybVNlY3Rpb25zQWN0aXZhdGU6IGFueSA9IHt9O1xuICBwcml2YXRlIF9mb3JtU2VjdGlvbnNJbmFjdGl2YXRlOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfZm9ybUFjdGlvbnNTdGFydDogYW55ID0ge307XG4gIHByaXZhdGUgX2Zvcm1BY3Rpb25zRmluaXNoOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfZmllbGRJbnB1dFZhbGlkYXRpb246IGFueSA9IHt9O1xuICBwcml2YXRlIF9maWVsZFZhbGlkYXRpb25zU3RhcnQ6IGFueSA9IHt9O1xuICBwcml2YXRlIF9maWVsZFZhbGlkYXRpb25zRmluaXNoOiBhbnkgPSB7fTtcbiAgLy8gQ2FsbGJhY2sgZGUgYWNjaW9uZXMgZGUgdGFibGFzXG4gIHByaXZhdGUgX3RhYmxlU2VsZWN0aW9uc1N0YXJ0OiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfdGFibGVTZWxlY3Rpb25zRmluaXNoOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfdGFibGVBY3Rpb25zU3RhcnQ6IGFueSA9IHt9O1xuICBwcml2YXRlIF90YWJsZUFjdGlvbnNGaW5pc2g6IGFueSA9IHt9O1xuICBwcml2YXRlIF90YWJsZUdldERhdGFTdGFydDogYW55ID0ge307XG4gIHByaXZhdGUgX3RhYmxlR2V0RGF0YUZpbmlzaDogYW55ID0ge307XG5cbiAgcHJvdGVjdGVkIGlucHV0RGF0YUZpZWxkczogYW55ID0ge307XG4gIHByb3RlY3RlZCBleHRyYURhdGE6IGFueSA9IHt9O1xuICBwcm90ZWN0ZWQgX2V2ZW50RW1pdGVyOiBMaWJFdmVudE1hbmFnZXJTZXJ2aWNlO1xuXG5cbiAgZm9ybUNvbmZpZzogYW55O1xuICBuYW1lOiBzdHJpbmc7XG4gIGZvcm1TdWJqZWN0OiBzdHJpbmc7XG4gIF9lcnJvclR5cGU6IHN0cmluZyA9ICcnO1xuICBlcnJvckNvZGU6IHN0cmluZyA9ICcnO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBlcnJvckRldGFpbDogc3RyaW5nID0gJyc7XG4gIHZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBmaWVsZHM6IGFueTtcbiAgYWN0aW9uczogYW55O1xuICBzZWN0aW9uczogYW55O1xuICBidXN5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgZ2V0VGl0bGUoKSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRUaXRsZSgpOyB9XG4gIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcpIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNldFRpdGxlKHRpdGxlKTsgfVxuICBjbGVhbkRhdGEoKSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5jbGVhbkRhdGEoKTsgfVxuICBnZXRDdXJyZW50U3RhdGUoKSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRDdXJyZW50U3RhdGUoKTsgfVxuICBzdXBwb3J0U3RhdGUoc3RhdGU6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc3VwcG9ydFN0YXRlKHN0YXRlKTsgfVxuICBjaGFuZ2VTdGF0ZShzdGF0ZSkgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uY2hhbmdlU3RhdGUoc3RhdGUpOyB9XG4gIGdldFN0YXRlcygpIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnN0YXRlczsgfVxuICBnZXRJbW11dGFibGVFbGVtZW50KG5hbWU6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0SW1tdXRhYmxlRWxlbWVudChuYW1lKTsgfVxuICBnZXRFeHRyYUluZm8obmFtZTogc3RyaW5nKSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRFeHRyYUluZm8obmFtZSk7IH1cbiAgZ2V0RmllbGRzKCkgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0RmllbGRzKCk7IH1cbiAgZ2V0RmllbGROYW1lcygpIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldEZpZWxkTmFtZXMoKTsgfVxuICBnZXRGaWVsZChjb2RlOiBzdHJpbmcpIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldEZpZWxkKGNvZGUpOyB9XG4gIGVuYWJsZUZpZWxkKGNvZGU6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZW5hYmxlRmllbGQoY29kZSk7IH1cbiAgZGlzYWJsZUZpZWxkKGNvZGU6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZGlzYWJsZUZpZWxkKGNvZGUpOyB9XG4gIGdldEZpZWxkVmFsdWUoY29kZTogc3RyaW5nKTogYW55IHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldEZpZWxkVmFsdWUoY29kZSk7IH1cbiAgZ2V0RmllbGRPcHRpb25UZXh0KGNvZGU6IHN0cmluZyk6IGFueSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRGaWVsZE9wdGlvblRleHQoY29kZSk7IH1cbiAgZ2V0RmllbGRzVmFsdWVzKGNvZGVzOiBzdHJpbmdbXSkgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0RmllbGRzVmFsdWVzKGNvZGVzKTsgfVxuICBnZXRGaWVsZE9wdGlvbnMoY29kZTogc3RyaW5nKTogRmllbGRPcHRpb25bXSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRGaWVsZE9wdGlvbnMoY29kZSk7IH1cbiAgc2V0RmllbGRWYWx1ZShjb2RlOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNldEZpZWxkVmFsdWUoY29kZSwgdmFsdWUpOyB9XG4gIHNldEZpZWxkUmVxdWlyZWQoY29kZTogc3RyaW5nLCByZXF1aXJlZDogYm9vbGVhbikgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2V0RmllbGRSZXF1aXJlZChjb2RlLCByZXF1aXJlZCk7IH1cbiAgc2V0RmllbGRFcnJvck1lc3NhZ2UoY29kZTogc3RyaW5nLCBlcnJvck1lc3NhZ2U6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2V0RmllbGRFcnJvck1lc3NhZ2UoY29kZSwgZXJyb3JNZXNzYWdlKTsgfVxuICBzZXRGaWVsZEVycm9yKGNvZGU6IHN0cmluZywgZXJyb3JDb2RlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgdHlwZT86IHN0cmluZykgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2V0RmllbGRFcnJvcihjb2RlLCBlcnJvckNvZGUsIG1lc3NhZ2UsIHR5cGUpOyB9XG4gIHNldEZpZWxkSW50cmluc2ljRXJyb3JNZXNzYWdlKGNvZGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNldEZpZWxkSW50cmluc2ljRXJyb3JNZXNzYWdlKGNvZGUsIG1lc3NhZ2UpO1xuICB9XG4gIHNldEZpZWxkT3B0aW9ucyhjb2RlLCBvcHRpb25zQXJyYXksIGlkQXR0cmlidXRlLCBuYW1lQXR0cmlidXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNldEZpZWxkT3B0aW9ucyhjb2RlLCBvcHRpb25zQXJyYXksIGlkQXR0cmlidXRlLCBuYW1lQXR0cmlidXRlKTtcbiAgfVxuICBnZXRGaWVsZFNldChmaWx0ZXJGdW5jPywgY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRGaWVsZFNldChmaWx0ZXJGdW5jLCBjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgYXBwbHlPbkZpZWxkcyhwcm9jZXNzRnVuYywgY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5hcHBseU9uRmllbGRzKHByb2Nlc3NGdW5jLCBjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgYXBwbHlQcm9jZXNzVG9BbGxGaWVsZHMocHJvY2Vzc0Z1bmMpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uYXBwbHlPbkZpZWxkcyhwcm9jZXNzRnVuYyk7XG4gIH1cbiAgY2xlYW5GaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5jbGVhbkZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgZ2V0UmVxdWlyZWRGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRSZXF1aXJlZEZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgZ2V0UmVxdWlyZWRFbXB0eUZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldFJlcXVpcmVkRW1wdHlGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIGdldENoYW5nZWRGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRDaGFuZ2VkRmllbGRzKGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICBnZXRGaWVsZHNXaXRoVmFsaWRhdGlvbklzc3Vlcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldEZpZWxkc1dpdGhWYWxpZGF0aW9uSXNzdWVzKGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICB0YWdGaWVsZHNXaXRoRXJyb3IoZXJyb3JNZXNzYWdlLCBjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnRhZ0ZpZWxkc1dpdGhFcnJvcihlcnJvck1lc3NhZ2UsIGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICBjbGVhbkVycm9yRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uY2xlYW5FcnJvckZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgc2hvd0xhYmVsRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2hvd0xhYmVsRmllbGRzKGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICBoaWRlTGFiZWxGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5oaWRlTGFiZWxGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIGVuYWJsZUZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmVuYWJsZUZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgZGlzYWJsZUZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmRpc2FibGVGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZW5hYmxlRmllbGRzXG4gICAqL1xuICBlbmFibGVFZGl0RmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZGlzYWJsZUZpZWxkc1xuICAgKi9cbiAgZGlzYWJsZUVkaXRGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIHNob3dGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zaG93RmllbGRzKGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICBoaWRlRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uaGlkZUZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgZ2V0QWN0aW9uc0J5QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0QWN0aW9uc0J5QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfVxuICBnZXRIZWFkZXJBY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRBY3Rpb25zQnlBdHRyaWJ1dGUoJ2xvY2F0aW9uJywgSEVBREVSKTtcbiAgfVxuICBnZXRBY3Rpb24oYWN0aW9uQ29kZTogc3RyaW5nKTogRm9ybUFjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldEFjdGlvbihhY3Rpb25Db2RlKTtcbiAgfVxuICBzaG93QWN0aW9ucyhhY3Rpb25BcnJheSk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zaG93QWN0aW9ucyhhY3Rpb25BcnJheSk7XG4gIH1cbiAgaGlkZUFjdGlvbnMoYWN0aW9uQXJyYXkpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uaGlkZUFjdGlvbnMoYWN0aW9uQXJyYXkpO1xuICB9XG4gIGVuYWJsZUFjdGlvbnMoYWN0aW9uQXJyYXkpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZW5hYmxlQWN0aW9ucyhhY3Rpb25BcnJheSk7XG4gIH1cbiAgZGlzYWJsZUFjdGlvbnMoYWN0aW9uQXJyYXkpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZGlzYWJsZUFjdGlvbnMoYWN0aW9uQXJyYXkpO1xuICB9XG4gIHNob3dBY3Rpb24oY29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNob3dBY3Rpb25zKGNvZGUpO1xuICB9XG4gIGhpZGVBY3Rpb24oY29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmhpZGVBY3Rpb25zKGNvZGUpO1xuICB9XG4gIGVuYWJsZUFjdGlvbihjb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZW5hYmxlQWN0aW9ucyhjb2RlKTtcbiAgfVxuICBkaXNhYmxlQWN0aW9uKGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5kaXNhYmxlQWN0aW9ucyhjb2RlKTtcbiAgfVxuICBnZXRTZWN0aW9ucygpOiBSZWNvcmRGb3JtU2VjdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0U2VjdGlvbnMoKTtcbiAgfVxuICBhY3RpdmF0ZVNlY3Rpb24oY29kZSk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5hY3RpdmF0ZVNlY3Rpb24oY29kZSk7XG4gIH1cbiAgZ2V0U2VjdGlvbnNUaXRsZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRTZWN0aW9ucygpLm1hcChzZWMgPT4gc2VjLnRpdGxlKTtcbiAgfVxuICBnZXRTZWN0aW9uKGNvZGU6IHN0cmluZyk6IFJlY29yZEZvcm1TZWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0U2VjdGlvbihjb2RlKTtcbiAgfVxuICBzaG93U2VjdGlvbihjb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2hvd1NlY3Rpb25zKGNvZGUpO1xuICB9XG4gIGhpZGVTZWN0aW9uKGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5oaWRlU2VjdGlvbnMoY29kZSk7XG4gIH1cbiAgc2hvd1NlY3Rpb25zKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zaG93U2VjdGlvbnMoY29kZXMpO1xuICB9XG4gIGhpZGVTZWN0aW9ucyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uaGlkZVNlY3Rpb25zKGNvZGVzKTtcbiAgfVxuICBnZXRTdWJTZWN0aW9uKGNvZGU6IHN0cmluZywgc3ViQ29kZTogc3RyaW5nKTogUmVjb3JkRm9ybVN1YlNlY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRTdWJTZWN0aW9uKGNvZGUsIHN1YkNvZGUpO1xuICB9XG4gIHNob3dTdWJTZWN0aW9uKGNvZGU6IHN0cmluZywgc3ViQ29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNob3dTdWJTZWN0aW9ucyhjb2RlLCBzdWJDb2RlKTtcbiAgfVxuICBoaWRlU3ViU2VjdGlvbihjb2RlOiBzdHJpbmcsIHN1YkNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5oaWRlU3ViU2VjdGlvbnMoY29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgc2hvd1N1YlNlY3Rpb25zKGNvZGU6IHN0cmluZywgc3ViQ29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNob3dTdWJTZWN0aW9ucyhjb2RlLCBzdWJDb2Rlcyk7XG4gIH1cbiAgaGlkZVN1YlNlY3Rpb25zKGNvZGU6IHN0cmluZywgc3ViQ29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmhpZGVTdWJTZWN0aW9ucyhjb2RlLCBzdWJDb2Rlcyk7XG4gIH1cbiAgZ2V0U2VjdGlvbkFjdGlvbnMoY29kZTogc3RyaW5nKTogRm9ybUFjdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0U2VjdGlvbkFjdGlvbnMoY29kZSk7XG4gIH1cbiAgZ2V0U2VjdGlvbkFjdGlvbk5hbWVzKGNvZGU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0U2VjdGlvbkFjdGlvbk5hbWVzKGNvZGUpO1xuICB9XG5cbiAgZ2V0VGFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRUYWJsZXMoKTtcbiAgfVxuICBzaG93VGFibGVzKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zaG93VGFibGVzKGNvZGVzKTtcbiAgfVxuICBoaWRlVGFibGVzKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5oaWRlVGFibGVzKGNvZGVzKTtcbiAgfVxuICBjbGVhblRhYmxlcyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uY2xlYW5UYWJsZXMoY29kZXMpO1xuICB9XG4gIGdldFRhYmxlKGNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRUYWJsZShjb2RlKTtcbiAgfVxuICBzaG93VGFibGUoY29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNob3dUYWJsZXMoY29kZSk7XG4gIH1cbiAgaGlkZVRhYmxlKGNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5oaWRlVGFibGVzKGNvZGUpO1xuICB9XG4gIGNsZWFuVGFibGUoY29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldFRhYmxlKGNvZGUpPy5jbGVhbigpO1xuICB9XG4gIGdldFRhYmxlUmVjb3JkKGNvZGU6IHN0cmluZywgcmVjb3JkSWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRUYWJsZVJlY29yZChjb2RlLCByZWNvcmRJZCk7XG4gIH1cblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBmb3JtTWFuYWdlclNlcnZpY2U6IExpYkZvcm1NYW5hZ2VyU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgX2V2ZW50TWFuYWdlcjogTGliRXZlbnRNYW5hZ2VyU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZmlsZU1nbXRTZXJ2aWNlczogTGliRmlsZU1hbmFnZW1lbnRTZXJ2aWNlKSB7XG4gICAgdGhpcy5fZXZlbnRFbWl0ZXIgPSB0aGlzLl9ldmVudE1hbmFnZXI7XG4gICAgdGhpcy5jbGVhblN0YXJ0KCk7XG4gICAgdGhpcy5jdXN0b21QcmVQcm9jZXNzaW5nKCk7XG4gIH1cblxuICBzZXRDb25maWcoZm9ybUNvbmZpZykge1xuICAgIHRoaXMuZm9ybUNvbmZpZyA9IGZvcm1Db25maWc7XG4gIH1cblxuICBjbGVhblN0YXJ0KCkge1xuICAgIHRoaXMuX2Vycm9yVHlwZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JDb2RlID0gJyc7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmVycm9yRGV0YWlsID0gJyc7XG4gICAgdGhpcy5fZm9ybVN0cnVjdHVyZSA9IG51bGw7XG4gICAgdGhpcy5maWVsZHMgPSBudWxsO1xuICAgIHRoaXMuYWN0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5zZWN0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5fY29udHJvbFRva2VuID0gbnVsbDtcbiAgICB0aGlzLmlucHV0RGF0YUZpZWxkcyA9IHt9O1xuICAgIHRoaXMuX2RlZmluaXRpb25PYnRhaW5lZCA9IGZhbHNlO1xuICAgIC8vIFNlIGxpbXBpYW4gbG9zIG1hbmVqYWRvcmVzIGRlIGV2ZW50b3NcbiAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICB0aGlzLl9mb3JtU2VjdGlvbnNBY3RpdmF0ZSA9IHt9O1xuICAgIHRoaXMuX2Zvcm1TZWN0aW9uc0luYWN0aXZhdGUgPSB7fTtcbiAgICB0aGlzLl9mb3JtQWN0aW9uc1N0YXJ0ID0ge307XG4gICAgdGhpcy5fZm9ybUFjdGlvbnNGaW5pc2ggPSB7fTtcbiAgICB0aGlzLl9maWVsZElucHV0VmFsaWRhdGlvbiA9IHt9O1xuICAgIHRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNTdGFydCA9IHt9O1xuICAgIHRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNGaW5pc2ggPSB7fTtcbiAgICB0aGlzLl90YWJsZVNlbGVjdGlvbnNTdGFydCA9IHt9O1xuICAgIHRoaXMuX3RhYmxlU2VsZWN0aW9uc0ZpbmlzaCA9IHt9O1xuICAgIHRoaXMuX3RhYmxlQWN0aW9uc1N0YXJ0ID0ge307XG4gICAgdGhpcy5fdGFibGVBY3Rpb25zRmluaXNoID0ge307XG4gICAgdGhpcy5fdGFibGVHZXREYXRhU3RhcnQgPSB7fTtcbiAgICB0aGlzLl90YWJsZUdldERhdGFGaW5pc2ggPSB7fTtcbiAgfVxuXG4gIGdldCBmb3JtVmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudmlzaWJsZTsgfVxuICBnZXQgZm9ybU1hbmFnZXIoKSB7IHJldHVybiB0aGlzOyB9XG4gIGdldCBmb3JtQ29kZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5uYW1lOyB9XG4gIHNldCBmb3JtQ29kZShuYW1lOiBzdHJpbmcpIHsgdGhpcy5uYW1lID0gbmFtZTsgfVxuICBnZXQgaW5TZXJ2ZXJQcm9jZXNzKCkgeyByZXR1cm4gdGhpcy5idXN5OyB9XG4gIGdldCBmb3JtKCk6IEZvcm1TdHJ1Y3R1cmVBbmREYXRhIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU7IH1cblxuICBnZXQgc3RhdGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnN0YXRlOyB9XG4gIGdldCBjdXJyZW50U3RhdGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnN0YXRlOyB9XG4gIHNldCBjdXJyZW50U3RhdGUoc3RhdGU6IHN0cmluZykgeyB0aGlzLl9mb3JtU3RydWN0dXJlLmNoYW5nZVN0YXRlKHN0YXRlKTsgfVxuICBnZXQgaW1tdXRhYmxlRGF0YSgpOiBhbnkgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uaW1tdXRhYmxlRGF0YSB9XG4gIGdldCBleHRyYUluZm8oKTogYW55IHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmV4dHJhSW5mbyB9XG4gIGdldCB2aXNpYmxlU2VjdGlvbnMoKTogUmVjb3JkRm9ybVNlY3Rpb25bXSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy52aXNpYmxlU2VjdGlvbnM7IH1cblxuICBnZXQgZm9ybVJvdXRlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9mb3JtUm91dGU7IH1cbiAgc2V0IGZvcm1Sb3V0ZShyb3V0ZTogc3RyaW5nKSB7IHRoaXMuX2Zvcm1Sb3V0ZSA9IHJvdXRlOyB9XG5cbiAgZ2V0IHN1YmplY3QoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZm9ybVN1YmplY3Q7IH1cblxuICAvLyBNw6l0b2RvcyB2aXJ0dWFsZXNcbiAgY3VzdG9tUHJlUHJvY2Vzc2luZygpIHsgfVxuICBjdXN0b21Gb3JtU3RhcnQoKSB7IH1cbiAgZGlzcGxheUFjdGlvblNlcnZlckVycm9yKCkgeyB9XG4gIGRpc3BsYXlWYWxpZGF0aW9uU2VydmVyRXJyb3IoKSB7IH1cbiAgZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKSB7IH1cbiAgc2hvd0ZpZWxkSW5mbyhmaWVsZENvZGU/OiBzdHJpbmcsIGRldGFpbD86IGFueSkgeyB9XG4gIHNob3dNb2RhbERpYWxvZyh0aXRsZSwgYm9keSwgb3B0aW9ucywgY2FsbGJhY2s/LCBwYXJhbXM/KSB7IH1cbiAgb3BlblVwbG9hZERpYWxvZyh0aXRsZSwgYm9keSwgb3B0aW9ucywgY2FsbGJhY2s/LCBwYXJhbXM/KSB7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHN1cHBvcnRTdGF0ZVxuICAgKi9cbiAgc3VwcG9ydE1vZGUoc3RhdGU6IHN0cmluZyk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5zdXBwb3J0U3RhdGUoc3RhdGUpOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBnZXRGaWVsZFxuICAgKi9cbiAgZ2V0RmllbGRPYmplY3QoY29kZTogc3RyaW5nKTogRmllbGREZXNjcmlwdG9yIHsgcmV0dXJuIHRoaXMuZ2V0RmllbGQoY29kZSk7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGdldEFjdGlvblxuICAgKi9cbiAgZ2V0QWN0aW9uT2JqZWN0KGNvZGU6IHN0cmluZyk6IEZvcm1BY3Rpb24geyByZXR1cm4gdGhpcy5nZXRBY3Rpb24oY29kZSk7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGdldFRhYmxlXG4gICAqL1xuICBnZXRUYWJsZU9iamVjdChjb2RlOiBzdHJpbmcpOiBSZWNvcmRUYWJsZSB7IHJldHVybiB0aGlzLmdldFRhYmxlKGNvZGUpOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBnZXRTZWN0aW9uXG4gICAqL1xuICBnZXRTZWN0aW9uT2JqZWN0KGNvZGU6IHN0cmluZyk6IFJlY29yZEZvcm1TZWN0aW9uIHsgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbihjb2RlKTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgY2hhbmdlU3RhdGVcbiAgICovXG4gIGNoYW5nZUZvcm1Nb2RlKHN0YXRlOiBzdHJpbmcpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY2hhbmdlU3RhdGUoc3RhdGUpOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBzdWJqZWN0XG4gICAqL1xuICBnZXRGb3JtU3ViamVjdCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5zdWJqZWN0OyB9XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugc3ViamVjdFxuICAgKi9cbiAgZ2V0U3ViamVjdCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5mb3JtU3ViamVjdDsgfVxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHN1YmplY3RcbiAgICovXG4gIGdldGZvcm1TdWJqZWN0KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmdldFN1YmplY3QoKTsgfVxuXG5cbiAgbnVtU2VjdGlvbnMoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNlY3Rpb25zLmxlbmd0aDsgfVxuXG4gIHN1YnNjcmliZUFwcEV2ZW50KGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjayk6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50RW1pdGVyLnN1YnNjcmliZShldmVudE5hbWUsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIG9wZW5Gb3JtKG5hbWU6IHN0cmluZywgZGF0YSA9IG51bGwsIGJhY2tEYXRhID0gbnVsbCwgY2xlYW5TdGFjayA9IGZhbHNlKTogdm9pZCB7XG4gICAgbGV0IG9yaWdpbiA9IG51bGw7XG4gICAgaWYgKCFjbGVhblN0YWNrKSB7XG4gICAgICBvcmlnaW4gPSB7IC4uLmJhY2tEYXRhLCBuYW1lOiB0aGlzLm5hbWUsIHVybDogdGhpcy5fZm9ybVJvdXRlLCB0b2tlbjogdGhpcy5fY29udHJvbFRva2VuIH07XG4gICAgICBvcmlnaW4uc3ViamVjdCA9IG9yaWdpbj8uc3ViamVjdCA/PyB0aGlzLmZvcm1TdWJqZWN0O1xuICAgICAgb3JpZ2luLnN0YXRlID0gb3JpZ2luPy5zdGF0ZSA/PyB0aGlzLnN0YXRlO1xuICAgICAgb3JpZ2luLmZpZWxkcyA9IG9yaWdpbj8uZmllbGRzID8/IHt9O1xuICAgICAgb3JpZ2luLmV4dHJhID0gb3JpZ2luPy5leHRyYSA/PyB7fTtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0ID0geyAuLi5kYXRhLCBuYW1lIH07XG4gICAgdGFyZ2V0LnN1YmplY3QgPSB0YXJnZXQ/LnN1YmplY3QgPz8gbnVsbDtcbiAgICB0YXJnZXQuc3RhdGUgPSB0YXJnZXQ/LnN0YXRlID8/IG51bGw7XG4gICAgdGFyZ2V0LmZpZWxkcyA9IHRhcmdldD8uZmllbGRzID8/IHt9O1xuICAgIHRhcmdldC5leHRyYSA9IHRhcmdldD8uZXh0cmEgPz8ge307XG4gICAgdGhpcy5mb3JtTWFuYWdlclNlcnZpY2Uub3BlbkZvcm0ob3JpZ2luLCB0YXJnZXQpO1xuICB9XG5cbiAgY2FuR29CYWNrKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fb3JpZ2luVG9rZW4gIT09IG51bGwgfVxuICBnb0JhY2soKTogdm9pZCB7IHJldHVybiB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZS5iYWNrVG8oKTsgfVxuICBnb0JhY2tGb3JtKCk6IHZvaWQgeyByZXR1cm4gdGhpcy5nb0JhY2soKTsgfVxuICBnZXRPcmlnaW5EZXRhaWwoKTogYW55IHsgcmV0dXJuIHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLmdldEZvcm1JbmZvKHRoaXMuX29yaWdpblRva2VuKTsgfVxuXG4gIHNldEVycm9yKGVycm9yVHlwZTogc3RyaW5nLCBlcnJvck1lc3NhZ2U6IHN0cmluZywgZXJyb3JEZXRhaWw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2Vycm9yVHlwZSA9IGVycm9yVHlwZSB8fCAnJztcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZSB8fCAnJztcbiAgICB0aGlzLmVycm9yRGV0YWlsID0gZXJyb3JEZXRhaWwgfHwgJyc7XG4gIH1cblxuICByZXNldEVycm9yKCk6IHZvaWQgeyB0aGlzLnNldEVycm9yKG51bGwsIG51bGwsIG51bGwpOyB9XG4gIGdldEVycm9yVHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fZXJyb3JUeXBlOyB9XG4gIGdldEVycm9yTWVzc2FnZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5lcnJvck1lc3NhZ2U7IH1cbiAgZ2V0RXJyb3JEZXRhaWwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZXJyb3JEZXRhaWw7IH1cbiAgZ2V0RXJyb3JDb2RlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9lcnJvclR5cGU7IH1cblxuICBnZXRGb3JtUGFyYW1ldGVyKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChuYW1lKSA/ICh0aGlzLmV4dHJhRGF0YT8uW25hbWVdID8/IG51bGwpIDogbnVsbDtcbiAgfVxuXG4gIHByZW9jZXNzSW5wdXRQYXJhbXMocGFyYW1zOiBhbnkpOiBzdHJpbmcge1xuICAgIHRoaXMuX2NvbnRyb2xUb2tlbiA9IHBhcmFtcz8uW1RPS0VOXSA/PyBudWxsO1xuICAgIGNvbnN0IHsgdG9rZW4sIHN1YmplY3QsIHN0YXRlLCBmaWVsZHMsIGV4dHJhLCBvcmlnaW5Ub2tlbiB9ID0gdGhpcy5mb3JtTWFuYWdlclNlcnZpY2UuZ2V0Rm9ybUluZm8odGhpcy5fY29udHJvbFRva2VuKTtcbiAgICBpZiAoIXRoaXMuX2NvbnRyb2xUb2tlbiB8fCB0aGlzLl9jb250cm9sVG9rZW4gIT09IHRva2VuKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5mb3JtU3ViamVjdCA9IHBhcmFtcz8uW1NVQkpFQ1RdID8/IHN1YmplY3QgPz8gbnVsbDtcbiAgICB0aGlzLmlucHV0RGF0YUZpZWxkcyA9IGZpZWxkcztcbiAgICB0aGlzLmV4dHJhRGF0YSA9IGV4dHJhO1xuICAgIHRoaXMuX29yaWdpblRva2VuID0gb3JpZ2luVG9rZW47XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgc3Vic2NyaWJlU2VjdGlvbkFjdGl2YXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybVNlY3Rpb25zID0gdGhpcy5fZm9ybVN0cnVjdHVyZS5zZWN0aW9ucztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JtU2VjdGlvbnMpKSB7XG4gICAgICBmb3JtU2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uID0+IHtcbiAgICAgICAgc2VjdGlvbi5hY3RpdmF0aW9uLnN1YnNjcmliZShjb2RlID0+IHRoaXMubGF1bmNoU2VjdGlvbkFjdGl2YXRpb24oY29kZSkpO1xuICAgICAgICBzZWN0aW9uLmluYWN0aXZhdGlvbi5zdWJzY3JpYmUoY29kZSA9PiB0aGlzLmxhdW5jaFNlY3Rpb25JbmFjdGl2YXRpb24oY29kZSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3Vic2NyaWJlRmllbGRzU3ViamVjdHMoKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUZpZWxkcyA9IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuZ2V0RmllbGRzKCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybUZpZWxkcykpIHtcbiAgICAgIGZvcm1GaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgIGZpZWxkLmVkaXRpb25GaW5pc2guc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCB7IGNvZGUsIGludHJpbnNpY1ZhbGlkYXRpb24gfSA9IGV2ZW50O1xuICAgICAgICAgIHRoaXMuc3RhcnRGaWVsZFZhbGlkYXRpb24oY29kZSwgaW50cmluc2ljVmFsaWRhdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICBmaWVsZC5lZGl0aW9uUGFydGlhbC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgY29kZSwgaW50cmluc2ljVmFsaWRhdGlvbiB9ID0gZXZlbnQ7XG4gICAgICAgICAgdGhpcy5zdGFydEZpZWxkSW5wdXRWYWxpZGF0aW9uKGNvZGUsIGludHJpbnNpY1ZhbGlkYXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgZmllbGQuZGV0YWlsUmVxdWVzdC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zaG93RmllbGRJbmZvKGV2ZW50LmNvZGUsIGV2ZW50LmRldGFpbCkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3Vic2NyaWJlQWN0aW9uU3ViamVjdHMoKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUFjdGlvbnMgPSB0aGlzLl9mb3JtU3RydWN0dXJlLmdldEFjdGlvbnMoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JtQWN0aW9ucykpIHtcbiAgICAgIGZvcm1BY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICAgICAgYWN0aW9uLmFjdGlvbkFjdGl2YXRlZC5zdWJzY3JpYmUoY29kZSA9PiB0aGlzLnN0YXJ0QWN0aW9uKGNvZGUpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZVRhYmxlU3ViamVjdHMoKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybVRhYmxlcyA9IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuZ2V0VGFibGVzKCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybVRhYmxlcykpIHtcbiAgICAgIGZvcm1UYWJsZXMuZm9yRWFjaCh0YWJsZSA9PiB7XG4gICAgICAgIHRhYmxlLmlubGluZUFjdGlvblRyaWdnZXIuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc3RhcnRUYWJsZUFjdGlvbihldmVudCkpO1xuICAgICAgICB0YWJsZS5nbG9iYWxBY3Rpb25UcmlnZ2VyLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnN0YXJ0VGFibGVHbG9iYWxBY3Rpb24oZXZlbnQpKTtcbiAgICAgICAgdGFibGUucmVjb3JkU2VsZWN0aW9uVHJpZ2dlci5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zdGFydFRhYmxlUmVjb3JkU2VsZWN0aW9uKGV2ZW50KSk7XG4gICAgICAgIHRhYmxlLnNlbGVjdGlvbkFjdGlvblRyaWdnZXIuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc3RhcnRUYWJsZVNlbGVjdGlvbkFjdGlvbihldmVudCkpO1xuICAgICAgICB0YWJsZS5nZXREYXRhVHJpZ2dlci5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zdGFydFRhYmxlR2V0RGF0YShldmVudCkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZm9ybUluaXQocGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGluaXRpYWxTdGF0ZTogc3RyaW5nID0gdGhpcy5wcmVvY2Vzc0lucHV0UGFyYW1zKHBhcmFtcyk7XG4gICAgaWYgKCF0aGlzLm5hbWUpIHsgcmV0dXJuOyB9XG4gICAgaWYgKCF0aGlzLl9kZWZpbml0aW9uT2J0YWluZWQpIHtcbiAgICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgICBjb25zdCBmb3JtRGVmaW5pdGlvbiA9IGF3YWl0IHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLmdldEZvcm1EZWZpbml0aW9uKHRoaXMubmFtZSk7XG4gICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2Zvcm1TdHJ1Y3R1cmUgPSBuZXcgRm9ybVN0cnVjdHVyZUFuZERhdGEoZm9ybURlZmluaXRpb24sIHRoaXMuZm9ybUNvbmZpZyk7XG4gICAgICB0aGlzLmZpZWxkcyA9IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuZmllbGRzO1xuICAgICAgdGhpcy5hY3Rpb25zID0gdGhpcy5fZm9ybVN0cnVjdHVyZS5hY3Rpb25zO1xuICAgICAgdGhpcy5zZWN0aW9ucyA9IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuc2VjdGlvbnM7XG4gICAgICB0aGlzLl9kZWZpbml0aW9uT2J0YWluZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFuRGF0YSgpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3VwcG9ydFN0YXRlKGluaXRpYWxTdGF0ZSkpIHtcbiAgICAgIGluaXRpYWxTdGF0ZSA9IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuZGVmYXVsdFN0YXRlO1xuICAgIH1cbiAgICB0aGlzLl9mb3JtU3RydWN0dXJlLmNoYW5nZVN0YXRlKGluaXRpYWxTdGF0ZSB8fCB0aGlzLl9mb3JtU3RydWN0dXJlLmRlZmF1bHRTdGF0ZSk7XG4gICAgY29uc3QgaW5wdXRGaWVsZE5hbWVzID0gT2JqZWN0LmtleXModGhpcy5pbnB1dERhdGFGaWVsZHMpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBpbnB1dEZpZWxkTmFtZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBmaWVsZENvZGUgPSBpbnB1dEZpZWxkTmFtZXNbaW5kZXhdO1xuICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHRoaXMuaW5wdXREYXRhRmllbGRzW2ZpZWxkQ29kZV07XG4gICAgICB0aGlzLnNldEZpZWxkVmFsdWUoZmllbGRDb2RlLCBmaWVsZFZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgcmVjb3JkUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLmdldERhdGEpO1xuICAgIHRoaXMuY2hlY2tFcnJvclJlY29yZFJlY2VpdmVkKHJlY29yZFJlc3BvbnNlKTtcbiAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgIHRoaXMuc3Vic2NyaWJlU2VjdGlvbkFjdGl2YXRpb24oKTtcbiAgICB0aGlzLnN1YnNjcmliZUZpZWxkc1N1YmplY3RzKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVBY3Rpb25TdWJqZWN0cygpO1xuICAgIHRoaXMuc3Vic2NyaWJlVGFibGVTdWJqZWN0cygpO1xuICAgIHRoaXMuY3VzdG9tRm9ybVN0YXJ0KCk7XG4gIH1cblxuICBjaGVja0Vycm9yUmVjb3JkUmVjZWl2ZWQocmVjb3JkUmVzcG9uc2U6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgZXJyb3IgfSA9IHJlY29yZFJlc3BvbnNlO1xuICAgIGlmICghZXJyb3IpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgdGhpcy5lcnJvckNvZGUgPSByZWNvcmRSZXNwb25zZS5lcnJvckNvZGU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSByZWNvcmRSZXNwb25zZS5lcnJvck1lc3NhZ2U7XG4gICAgdGhpcy5lcnJvckRldGFpbCA9IHJlY29yZFJlc3BvbnNlLmVycm9yRGV0YWlsO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZXJyb3JPY2N1cmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5lcnJvckNvZGUgIT09IE5PX0VSUk9SKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb3BvcnRlIG1hbmVqbyBkZSBldmVudG9zIGRlIGZvcm11bGFyaW9cbiAgICovXG5cbiAgYXN5bmMgcmVxdWVzdEZvcm1BY3Rpb24oYWN0aW9uQ29kZTogc3RyaW5nLCBhY3Rpb25TdWJqZWN0OiBhbnkgPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgYWN0aW9uRGV0YWlsID0ge1xuICAgICAgZm9ybUNvZGU6IHRoaXMubmFtZSxcbiAgICAgIGZvcm1TdWJqZWN0OiB0aGlzLmZvcm1TdWJqZWN0LFxuICAgICAgY3VycmVudE1vZGU6IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuc3RhdGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgICAgYWN0aW9uU3ViamVjdCxcbiAgICAgIHZlcnNpb246IFBBWUxPQURfVkVSU0lPTixcbiAgICAgIGZvcm1EYXRhOiB0aGlzLl9mb3JtU3RydWN0dXJlLmdldFBheWxvYWQoKSxcbiAgICAgIGltbXV0YWJsZURhdGE6IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuaW1tdXRhYmxlRGF0YSxcbiAgICB9O1xuICAgIHRoaXMuZXJyb3JDb2RlID0gTk9fRVJST1I7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmVycm9yRGV0YWlsID0gJyc7XG4gICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICBjb25zdCBmb3JtQWN0aW9uUmVzcG9uc2U6IGFueSA9IGF3YWl0IHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLmV4ZWNTZXJ2ZXJBY3Rpb24oYWN0aW9uRGV0YWlsKTtcbiAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICBpZiAoZm9ybUFjdGlvblJlc3BvbnNlICYmIGZvcm1BY3Rpb25SZXNwb25zZS5lcnJvci5lcnJvclR5cGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdFeGNlcGNpw7NuIG5vIHNvcG9ydGFkYScpO1xuICAgIH1cbiAgICBpZiAoZm9ybUFjdGlvblJlc3BvbnNlLmhhc0Vycm9yKCkpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZm9ybUFjdGlvblJlc3BvbnNlLmVycm9yO1xuICAgICAgdGhpcy5lcnJvckNvZGUgPSBlcnJvci5lcnJvckNvZGU7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yLmVycm9yTWVzc2FnZTtcbiAgICAgIHRoaXMuZXJyb3JEZXRhaWwgPSBlcnJvci5lcnJvckRldGFpbDtcbiAgICB9XG4gICAgY29uc3QgZm9ybVJlc3BvbnNlRGF0YSA9IGZvcm1BY3Rpb25SZXNwb25zZS5nZXREYXRhKCk7XG4gICAgdGhpcy51cGRhdGVGb3JtV2l0aFNlcnZlckRhdGEoZm9ybVJlc3BvbnNlRGF0YSk7XG4gICAgcmV0dXJuIGZvcm1SZXNwb25zZURhdGE7XG4gIH1cblxuICB1cGRhdGVGb3JtV2l0aFNlcnZlckRhdGEoZm9ybUNvbnRlbnQ6IGFueSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGN1cnJlbnRNb2RlLCBmb3JtU3ViamVjdCwgYWN0aW9ucywgZmllbGRzLCByZWNvcmRUYWJsZXMsXG4gICAgICByZXR1cm5lZEZpbGUsIGltbXV0YWJsZURhdGEsIGV4dHJhSW5mbyxcbiAgICB9ID0gZm9ybUNvbnRlbnQ7XG4gICAgY3VycmVudE1vZGUgJiYgdGhpcy5jaGFuZ2VTdGF0ZShjdXJyZW50TW9kZSk7XG4gICAgaWYgKGZvcm1TdWJqZWN0KSB7IHRoaXMuZm9ybVN1YmplY3QgPSBmb3JtU3ViamVjdDsgfVxuICAgIGlmIChhY3Rpb25zICYmIGFjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBjaGFuZ2VkQWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uT2JqZWN0ID0gdGhpcy5nZXRBY3Rpb24oY2hhbmdlZEFjdGlvbi5hY3Rpb25Db2RlKTtcbiAgICAgICAgaWYgKGFjdGlvbk9iamVjdCkgeyBhY3Rpb25PYmplY3QudXBkYXRlRnJvbVNlcnZlcihjaGFuZ2VkQWN0aW9uKTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmllbGRzICYmIGZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoYW5nZWRGaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgY29uc3QgZmllbGRPYmplY3QgPSB0aGlzLmdldEZpZWxkKGNoYW5nZWRGaWVsZC5maWVsZENvZGUpO1xuICAgICAgICBpZiAoZmllbGRPYmplY3QpIHtcbiAgICAgICAgICBmaWVsZE9iamVjdC51cGRhdGVGcm9tU2VydmVyKGNoYW5nZWRGaWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlY29yZFRhYmxlcyAmJiByZWNvcmRUYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBjaGFuZ2VkVGFibGUgb2YgcmVjb3JkVGFibGVzKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZShjaGFuZ2VkVGFibGUudGFibGVDb2RlKTtcbiAgICAgICAgaWYgKHRhYmxlT2JqZWN0KSB7XG4gICAgICAgICAgdGFibGVPYmplY3QudXBkYXRlRnJvbVNlcnZlcihjaGFuZ2VkVGFibGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXR1cm5lZEZpbGUgJiYgcmV0dXJuZWRGaWxlLmZpbGUpIHtcbiAgICAgIHRoaXMuZmlsZU1nbXRTZXJ2aWNlcy5zYXZlRmlsZShyZXR1cm5lZEZpbGUuZmlsZSwgcmV0dXJuZWRGaWxlLm5hbWUsIHJldHVybmVkRmlsZS50eXBlKTtcbiAgICB9XG4gICAgdGhpcy5fZm9ybVN0cnVjdHVyZS5pbW11dGFibGVEYXRhID0gaW1tdXRhYmxlRGF0YTtcbiAgICB0aGlzLl9mb3JtU3RydWN0dXJlLmV4dHJhSW5mbyA9IGV4dHJhSW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW5lam8gZGUgZXZlbnQgaGFuZGxlcnMgcGFyYSBhY2Npb25lcyBzb2JyZSBlbCBmb3JtdWxhcmlvXG4gICAqL1xuXG4gIGFkZFNlY3Rpb25BY3RpdmF0aW9uKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCBzZWN0aW9uU2V0ID0gKEFycmF5LmlzQXJyYXkoY29kZXMpKSA/IGNvZGVzIDogKGNvZGVzID8gW2NvZGVzXSA6IFtdKTtcbiAgICBzZWN0aW9uU2V0LmZvckVhY2goKHNlY3Rpb25OYW1lKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2Zvcm1TZWN0aW9uc0FjdGl2YXRlW3NlY3Rpb25OYW1lXSkge1xuICAgICAgICB0aGlzLl9mb3JtU2VjdGlvbnNBY3RpdmF0ZVtzZWN0aW9uTmFtZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Zvcm1TZWN0aW9uc0FjdGl2YXRlW3NlY3Rpb25OYW1lXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFNlY3Rpb25JbmFjdGl2YXRpb24oY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHNlY3Rpb25TZXQgPSAoQXJyYXkuaXNBcnJheShjb2RlcykpID8gY29kZXMgOiAoY29kZXMgPyBbY29kZXNdIDogW10pO1xuICAgIHNlY3Rpb25TZXQuZm9yRWFjaCgoc2VjdGlvbk5hbWUpID0+IHtcbiAgICAgIGlmICghdGhpcy5fZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZVtzZWN0aW9uTmFtZV0pIHtcbiAgICAgICAgdGhpcy5fZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZVtzZWN0aW9uTmFtZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Zvcm1TZWN0aW9uc0luYWN0aXZhdGVbc2VjdGlvbk5hbWVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkQWN0aW9uTWV0aG9kU3RhcnQoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IGFjdGlvblNldCA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgYWN0aW9uU2V0LmZvckVhY2goKGFjdGlvbk5hbWUpID0+IHtcbiAgICAgIGlmICghdGhpcy5fZm9ybUFjdGlvbnNTdGFydFthY3Rpb25OYW1lXSkge1xuICAgICAgICB0aGlzLl9mb3JtQWN0aW9uc1N0YXJ0W2FjdGlvbk5hbWVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLl9mb3JtQWN0aW9uc1N0YXJ0W2FjdGlvbk5hbWVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkQWN0aW9uTWV0aG9kRmluaXNoKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCBhY3Rpb25TZXQgPSAoQXJyYXkuaXNBcnJheShjb2RlcykpID8gY29kZXMgOiAoY29kZXMgPyBbY29kZXNdIDogW10pO1xuICAgIGFjdGlvblNldC5mb3JFYWNoKChhY3Rpb25OYW1lKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2Zvcm1BY3Rpb25zRmluaXNoW2FjdGlvbk5hbWVdKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1BY3Rpb25zRmluaXNoW2FjdGlvbk5hbWVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLl9mb3JtQWN0aW9uc0ZpbmlzaFthY3Rpb25OYW1lXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGxhdW5jaFNlY3Rpb25BY3RpdmF0aW9uKGNvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IHNlY3Rpb25PYmplY3QgPSB0aGlzLl9mb3JtU3RydWN0dXJlLmdldFNlY3Rpb24oY29kZSk7XG4gICAgaWYgKCFzZWN0aW9uT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIGNvbnN0IGNsaWVudFNlY3Rpb25NZXRob2RzID0gdGhpcy5fZm9ybVNlY3Rpb25zQWN0aXZhdGVbY29kZV07XG4gICAgaWYgKGNsaWVudFNlY3Rpb25NZXRob2RzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNsaWVudFNlY3Rpb25NZXRob2Qgb2YgY2xpZW50U2VjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50U2VjdGlvbk1ldGhvZChzZWN0aW9uT2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBsYXVuY2hTZWN0aW9uSW5hY3RpdmF0aW9uKGNvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IHNlY3Rpb25PYmplY3QgPSB0aGlzLl9mb3JtU3RydWN0dXJlLmdldFNlY3Rpb24oY29kZSk7XG4gICAgaWYgKCFzZWN0aW9uT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIGNvbnN0IGNsaWVudFNlY3Rpb25NZXRob2RzID0gdGhpcy5fZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZVtjb2RlXTtcbiAgICBpZiAoY2xpZW50U2VjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGZvciAoY29uc3QgY2xpZW50U2VjdGlvbk1ldGhvZCBvZiBjbGllbnRTZWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjbGllbnRTZWN0aW9uTWV0aG9kKHNlY3Rpb25PYmplY3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0QWN0aW9uKGNvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IGFjdGlvbk9iamVjdCA9IHRoaXMuZ2V0QWN0aW9uKGNvZGUpO1xuICAgIGlmICghYWN0aW9uT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGFjdGlvbk9iamVjdC5zdGFydCgpO1xuICAgIGNvbnN0IGNsaWVudEFjdGlvbk1ldGhvZHMgPSB0aGlzLl9mb3JtQWN0aW9uc1N0YXJ0W2NvZGVdO1xuICAgIGlmIChjbGllbnRBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBjbGllbnRBY3Rpb25NZXRob2Qgb2YgY2xpZW50QWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjb25zdCBjb250aW51ZUFjdGlvblByb21pc2UgPSBjbGllbnRBY3Rpb25NZXRob2QoYWN0aW9uT2JqZWN0KTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjb250aW51ZUFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgY3VyciksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICBhY3Rpb25PYmplY3Quc3RvcCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRTZXJ2ZXJBY3Rpb24oYWN0aW9uT2JqZWN0KTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2VydmVyQWN0aW9uKGFjdGlvbklucHV0KSB7XG4gICAgY29uc3QgYWN0aW9uID0gKHR5cGVvZiBhY3Rpb25JbnB1dCA9PT0gJ3N0cmluZycpXG4gICAgICA/IHRoaXMuZ2V0QWN0aW9uKGFjdGlvbklucHV0KSA6IGFjdGlvbklucHV0O1xuICAgIGxldCBmaW5pc2ggPSB0cnVlO1xuICAgIGxldCBhY3Rpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmIChhY3Rpb24uYmFja2VuZCkge1xuICAgICAgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0Rm9ybUFjdGlvbihhY3Rpb24uYWN0aW9uQ29kZSk7XG4gICAgICBmaW5pc2ggPSAhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgaWYgKGZpbmlzaCkge1xuICAgICAgYXdhaXQgdGhpcy5maW5pc2hBY3Rpb24oYWN0aW9uLCBhY3Rpb25SZXN1bHQpO1xuICAgICAgYWN0aW9uLm5ld1N0YXRlICYmIHRoaXMuY2hhbmdlU3RhdGUoYWN0aW9uLm5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5QWN0aW9uU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgYWN0aW9uLnN0b3AoKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaEFjdGlvbihhY3Rpb24sIGFjdGlvblJlc3VsdCkge1xuICAgIGNvbnN0IGZpbmlzaEFjdGlvbk1ldGhvZHMgPSB0aGlzLl9mb3JtQWN0aW9uc0ZpbmlzaFthY3Rpb24uYWN0aW9uQ29kZV07XG4gICAgaWYgKGZpbmlzaEFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IGNsaWVudEFjdGlvbk1ldGhvZCBvZiBmaW5pc2hBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uTWV0aG9kKGFjdGlvbiwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgY29tcGxldGVHbG9iYWxBY3Rpb24oYWN0aW9uOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFNlcnZlckFjdGlvbihhY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbmVqYWRvcmVzIGRlIGV2ZW50b3MgcGFyYSB2YWxpZGFjaW9uZXMgc29icmUgY2FtcG9zXG4gICAqL1xuXG4gIGFkZEZpZWxkSW5wdXRWYWxpZGF0aW9uKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCBmaWVsZFNldCA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgZmllbGRTZXQuZm9yRWFjaCgoZmllbGRDb2RlKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2ZpZWxkSW5wdXRWYWxpZGF0aW9uW2ZpZWxkQ29kZV0pIHtcbiAgICAgICAgdGhpcy5fZmllbGRJbnB1dFZhbGlkYXRpb25bZmllbGRDb2RlXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5fZmllbGRJbnB1dFZhbGlkYXRpb25bZmllbGRDb2RlXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEZpZWxkVmFsaWRhdGlvblN0YXJ0KGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCBmaWVsZFNldCA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgZmllbGRTZXQuZm9yRWFjaCgoZmllbGRDb2RlKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNTdGFydFtmaWVsZENvZGVdKSB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNTdGFydFtmaWVsZENvZGVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLl9maWVsZFZhbGlkYXRpb25zU3RhcnRbZmllbGRDb2RlXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEZpZWxkVmFsaWRhdGlvbkZpbmlzaChjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgZmllbGRTZXQgPSAoQXJyYXkuaXNBcnJheShjb2RlcykpID8gY29kZXMgOiAoY29kZXMgPyBbY29kZXNdIDogW10pO1xuICAgIGZpZWxkU2V0LmZvckVhY2goKGZpZWxkQ29kZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9maWVsZFZhbGlkYXRpb25zRmluaXNoW2ZpZWxkQ29kZV0pIHtcbiAgICAgICAgdGhpcy5fZmllbGRWYWxpZGF0aW9uc0ZpbmlzaFtmaWVsZENvZGVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLl9maWVsZFZhbGlkYXRpb25zRmluaXNoW2ZpZWxkQ29kZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdGFydEZpZWxkSW5wdXRWYWxpZGF0aW9uKGZpZWxkQ29kZTogc3RyaW5nLCBpbnRyaW5zaWNWYWxpZGF0aW9uOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IGZpZWxkVG9WYWxpZGF0ZSA9IHRoaXMuZ2V0RmllbGQoZmllbGRDb2RlKTtcbiAgICBpZiAoIWZpZWxkVG9WYWxpZGF0ZSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBmaWVsZFRvVmFsaWRhdGUucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IHZhbGlkYXRpb25DYWxsYmFja3MgPSB0aGlzLl9maWVsZElucHV0VmFsaWRhdGlvbltmaWVsZENvZGVdO1xuICAgIGlmICh2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICBjb25zdCBjbGllbnRWYWxpZGF0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbk1ldGhvZCBvZiB2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICAgIGNvbnN0IGNvbnRpbnVlVmFsaWRhdGlvblByb21pc2UgPSB2YWxpZGF0aW9uTWV0aG9kKGZpZWxkVG9WYWxpZGF0ZSk7XG4gICAgICAgIGNsaWVudFZhbGlkYXRpb25Qcm9taXNlcy5wdXNoKGNvbnRpbnVlVmFsaWRhdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50VmFsaWRhdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydEZpZWxkVmFsaWRhdGlvbihmaWVsZENvZGU6IHN0cmluZywgaW50cmluc2ljVmFsaWRhdGlvbjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBmaWVsZFRvVmFsaWRhdGUgPSB0aGlzLmdldEZpZWxkKGZpZWxkQ29kZSk7XG4gICAgaWYgKCFmaWVsZFRvVmFsaWRhdGUgfHwgIWludHJpbnNpY1ZhbGlkYXRpb24pIHsgcmV0dXJuOyB9XG4gICAgZmllbGRUb1ZhbGlkYXRlLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCB2YWxpZGF0aW9uQ2FsbGJhY2tzID0gdGhpcy5fZmllbGRWYWxpZGF0aW9uc1N0YXJ0W2ZpZWxkQ29kZV07XG4gICAgaWYgKHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgIGNvbnN0IGNsaWVudFZhbGlkYXRpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uTWV0aG9kIG9mIHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgICAgY29uc3QgY2xpZW50VmFsaWRhdGlvblByb21pc2UgPSB2YWxpZGF0aW9uTWV0aG9kKGZpZWxkVG9WYWxpZGF0ZSk7XG4gICAgICAgIGNsaWVudFZhbGlkYXRpb25Qcm9taXNlcy5wdXNoKGNsaWVudFZhbGlkYXRpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudFZhbGlkYXRpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50VmFsaWRhdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlVmFsaWRhdGlvbiA9IGNsaWVudFZhbGlkYXRpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRTZXJ2ZXJGaWVsZFZhbGlkYXRpb24oZmllbGRUb1ZhbGlkYXRlKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2VydmVyRmllbGRWYWxpZGF0aW9uKGlucHV0RmllbGQ6IHN0cmluZyB8IEZpZWxkRGVzY3JpcHRvcikge1xuICAgIGNvbnN0IGZpZWxkT2JqID0gKHR5cGVvZiBpbnB1dEZpZWxkID09PSAnc3RyaW5nJylcbiAgICAgID8gdGhpcy5nZXRGaWVsZChpbnB1dEZpZWxkKSA6IGlucHV0RmllbGQ7XG4gICAgbGV0IGZpbmlzaCA9IHRydWU7XG4gICAgbGV0IHZhbGlkYXRpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmIChmaWVsZE9iai5iYWNrZW5kKSB7XG4gICAgICBmaWVsZE9iai52YWxpZGF0aW5nID0gdHJ1ZTtcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihmb3JtQWN0aW9ucy52YWxpZGF0ZSwgZmllbGRPYmouZmllbGRDb2RlKTtcbiAgICAgIGZpbmlzaCA9ICF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBpZiAoZmluaXNoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbmlzaEZpZWxkVmFsaWRhdGlvbihmaWVsZE9iaiwgdmFsaWRhdGlvblJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpZWxkT2JqLnNldEVycm9yQ29kZSh0aGlzLmVycm9yQ29kZSk7XG4gICAgICBmaWVsZE9iai5zZXRFcnJvck1lc3NhZ2UodGhpcy5lcnJvck1lc3NhZ2UpO1xuICAgICAgdGhpcy5kaXNwbGF5VmFsaWRhdGlvblNlcnZlckVycm9yKCk7XG4gICAgfVxuICAgIGZpZWxkT2JqLnZhbGlkYXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaEZpZWxkVmFsaWRhdGlvbihmaWVsZE9iamVjdDogYW55LCB2YWxpZGF0aW9uUmVzdWx0OiBib29sZWFuKSB7XG4gICAgY29uc3QgdmFsaWRhdGlvbkNhbGxiYWNrcyA9IHRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNGaW5pc2hbZmllbGRPYmplY3QuZmllbGRDb2RlXTtcbiAgICBpZiAodmFsaWRhdGlvbkNhbGxiYWNrcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbk1ldGhvZCBvZiB2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2godmFsaWRhdGlvbk1ldGhvZChmaWVsZE9iamVjdCwgdmFsaWRhdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNvbnRpbnVlRmllbGRWYWxpZGF0aW9uKGZpZWxkQ29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRTZXJ2ZXJGaWVsZFZhbGlkYXRpb24oZmllbGRDb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW5lamFkb3JlcyBkZSBldmVudG9zIHBhcmEgYWNjaW9uZXMgc29icmUgVGFibGFzXG4gICAqL1xuXG4gIGFkZFRhYmxlQWN0aW9uU3RhcnQoY29kZTogc3RyaW5nLCBhY3Rpb25Db2RlOiBzdHJpbmcsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKGNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5saW5lQWN0aW9uT2JqZWN0ID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uKGFjdGlvbkNvZGUpO1xuICAgIGlmICghaW5saW5lQWN0aW9uT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnMgPSBudWxsO1xuICAgIGlmICh0aGlzLl90YWJsZUFjdGlvbnNTdGFydFtjb2RlXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zU3RhcnRbY29kZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHt9O1xuICAgICAgdGhpcy5fdGFibGVBY3Rpb25zU3RhcnRbY29kZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIGlmICghdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gPSBbXTtcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICB9XG5cbiAgYWRkVGFibGVBY3Rpb25GaW5pc2goY29kZTogc3RyaW5nLCBhY3Rpb25Db2RlOiBzdHJpbmcsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKGNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5saW5lQWN0aW9uT2JqZWN0ID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uKGFjdGlvbkNvZGUpO1xuICAgIGlmICghaW5saW5lQWN0aW9uT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnMgPSBudWxsO1xuICAgIGlmICh0aGlzLl90YWJsZUFjdGlvbnNGaW5pc2hbY29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlQWN0aW9uc0ZpbmlzaFtjb2RlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0ge307XG4gICAgICB0aGlzLl90YWJsZUFjdGlvbnNGaW5pc2hbY29kZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIGlmICghdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gPSBbXTtcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICB9XG5cbiAgYWRkVGFibGVTZWxlY3Rpb25TdGFydChjb2RlOiBzdHJpbmcsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKGNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVycyA9IG51bGw7XG4gICAgaWYgKHRoaXMuX3RhYmxlU2VsZWN0aW9uc1N0YXJ0W2NvZGVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZVNlbGVjdGlvbnNTdGFydFtjb2RlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gW107XG4gICAgICB0aGlzLl90YWJsZVNlbGVjdGlvbnNTdGFydFtjb2RlXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICB9XG5cbiAgYWRkVGFibGVTZWxlY3Rpb25GaW5pc2goY29kZTogc3RyaW5nLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZShjb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnMgPSBudWxsO1xuICAgIGlmICh0aGlzLl90YWJsZVNlbGVjdGlvbnNGaW5pc2hbY29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlU2VsZWN0aW9uc0ZpbmlzaFtjb2RlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gW107XG4gICAgICB0aGlzLl90YWJsZVNlbGVjdGlvbnNGaW5pc2hbY29kZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIHRhYmxlRXZlbnRIYW5kbGVycy5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgfVxuXG4gIGFkZFRhYmxlR2V0RGF0YVN0YXJ0KGNvZGU6IHN0cmluZywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUoY29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgdGFibGVFdmVudEhhbmRsZXJzID0gbnVsbDtcbiAgICBpZiAodGhpcy5fdGFibGVHZXREYXRhU3RhcnRbY29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlR2V0RGF0YVN0YXJ0W2NvZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSBbXTtcbiAgICAgIHRoaXMuX3RhYmxlR2V0RGF0YVN0YXJ0W2NvZGVdID0gdGFibGVFdmVudEhhbmRsZXJzO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnMucHVzaChjYWxsYmFja01ldGhvZCk7XG4gIH1cblxuICBhZGRUYWJsZUdldERhdGFGaW5pc2goY29kZTogc3RyaW5nLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZShjb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnMgPSBudWxsO1xuICAgIGlmICh0aGlzLl90YWJsZUdldERhdGFGaW5pc2hbY29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlR2V0RGF0YUZpbmlzaFtjb2RlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0ge307XG4gICAgICB0aGlzLl90YWJsZUdldERhdGFGaW5pc2hbY29kZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIHRhYmxlRXZlbnRIYW5kbGVyc1tHRVRfREFUQV9BQ1RJT05dID0gY2FsbGJhY2tNZXRob2Q7XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlR2xvYmFsQWN0aW9uKHRhYmxlQWN0aW9uRXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkV2ZW50O1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZUNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbkNvZGUpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgYWN0aW9uID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uKGFjdGlvbkNvZGUpO1xuICAgIGlmICghYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IHRhYmxlQWN0aW9uRGV0YWlsID0ge1xuICAgICAgdGFibGVPYmplY3QsXG4gICAgICBhY3Rpb24sXG4gICAgICB0YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgIH07XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zU3RhcnRbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2UgPSB0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFRhYmxlU2VydmVyR2xvYmFsQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZXJ2ZXJHbG9iYWxBY3Rpb24odGFibGVBY3Rpb25EZXRhaWw6IGFueSkge1xuICAgIGNvbnN0IHsgdGFibGVPYmplY3QsIGFjdGlvbiwgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgdGFibGVPYmplY3QucHV0T25XYWl0KCk7XG4gICAgbGV0IGZpbmlzaCA9IHRydWU7XG4gICAgbGV0IGFjdGlvblJlc3VsdCA9IG51bGw7XG4gICAgaWYgKGFjdGlvbi5iYWNrZW5kKSB7XG4gICAgICBjb25zdCBhY3Rpb25TdWJqZWN0ID0ge1xuICAgICAgICB0YWJsZUNvZGUsXG4gICAgICAgIGFjdGlvblR5cGU6IEdMT0JBTF9BQ1RJT04sXG4gICAgICAgIGFjdGlvbkNvZGVcbiAgICAgIH07XG4gICAgICBhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihmb3JtQWN0aW9ucy50YWJsZUFjdGlvbiwgYWN0aW9uU3ViamVjdCk7XG4gICAgICBmaW5pc2ggPSAhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgaWYgKGZpbmlzaCkge1xuICAgICAgYXdhaXQgdGhpcy5maW5pc2hUYWJsZUdsb2JhbEFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KTtcbiAgICAgIGFjdGlvbi5uZXdTdGF0ZSAmJiB0aGlzLmNoYW5nZVN0YXRlKGFjdGlvbi5uZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgdGFibGVPYmplY3QuZnJlZVdhaXRpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFRhYmxlR2xvYmFsQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsOiBhbnksIGFjdGlvblJlc3VsdCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUFjdGlvbnNGaW5pc2hbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2godGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVBY3Rpb24odGFibGVBY3Rpb25FdmVudDogYW55KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUsIGFjdGlvbkRldGFpbCB9ID0gdGFibGVBY3Rpb25FdmVudDtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVDb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb25Db2RlKSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IHsgcmVjb3JkSWQsIHJlY29yZERhdGEgfSA9IGFjdGlvbkRldGFpbDtcbiAgICBjb25zdCBhY3Rpb24gPSB0YWJsZU9iamVjdC5nZXRBY3Rpb24oYWN0aW9uQ29kZSk7XG4gICAgaWYgKCFhY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgdGFibGVBY3Rpb25EZXRhaWwgPSB7XG4gICAgICB0YWJsZU9iamVjdCxcbiAgICAgIGFjdGlvbixcbiAgICAgIHRhYmxlQ29kZSxcbiAgICAgIGFjdGlvbkNvZGUsXG4gICAgICByZWNvcmRJZCxcbiAgICAgIHJlY29yZERhdGFcbiAgICB9O1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlQWN0aW9uc1N0YXJ0W3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gOiBudWxsO1xuICAgIGlmICh0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlID0gdGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwpO1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNsaWVudEFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgY3VyciksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRUYWJsZVNlcnZlckFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCk7XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VydmVyQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsOiBhbnkpIHtcbiAgICBjb25zdCB7IHRhYmxlT2JqZWN0LCBhY3Rpb24sIHRhYmxlQ29kZSwgYWN0aW9uQ29kZSwgcmVjb3JkSWQsIHJlY29yZERhdGEgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICB0YWJsZU9iamVjdC5wdXRPbldhaXQoKTtcbiAgICBsZXQgZmluaXNoID0gdHJ1ZTtcbiAgICBsZXQgYWN0aW9uUmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoYWN0aW9uLmJhY2tlbmQpIHtcbiAgICAgIGNvbnN0IGFjdGlvblN1YmplY3QgPSB7XG4gICAgICAgIHRhYmxlQ29kZSxcbiAgICAgICAgYWN0aW9uVHlwZTogdGhpcy5mb3JtQ29uZmlnLnRhYmxlQWN0aW9ucy5pbmxpbmUsXG4gICAgICAgIGFjdGlvbkNvZGUsXG4gICAgICAgIHRhYmxlUmVjb3JkSWQ6IHJlY29yZElkLFxuICAgICAgICB0YWJsZVJlY29yZERhdGE6IHJlY29yZERhdGFcbiAgICAgIH07XG4gICAgICBhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihmb3JtQWN0aW9ucy50YWJsZUFjdGlvbiwgYWN0aW9uU3ViamVjdCk7XG4gICAgICBmaW5pc2ggPSAhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgaWYgKGZpbmlzaCkge1xuICAgICAgdGhpcy5maW5pc2hUYWJsZUFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KTtcbiAgICAgIGFjdGlvbi5uZXdTdGF0ZSAmJiB0aGlzLmNoYW5nZVN0YXRlKGFjdGlvbi5uZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgdGFibGVPYmplY3QuZnJlZVdhaXRpbmcoKTtcbiAgfVxuXG4gIGNvbXBsZXRlSW5saW5lQWN0aW9uKHRhYmxlQWN0aW9uOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFRhYmxlU2VydmVyQWN0aW9uKHRhYmxlQWN0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFRhYmxlQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsOiBhbnksIGFjdGlvblJlc3VsdCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUFjdGlvbnNGaW5pc2hbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2godGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVSZWNvcmRTZWxlY3Rpb24odGFibGVBY3Rpb25FdmVudDogYW55KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkRldGFpbCB9ID0gdGFibGVBY3Rpb25FdmVudDtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVDb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IHsgcmVjb3JkSWQsIHJlY29yZERhdGEgfSA9IGFjdGlvbkRldGFpbDtcbiAgICBjb25zdCB0YWJsZVNlbGVjdGlvbkRldGFpbCA9IHtcbiAgICAgIHRhYmxlT2JqZWN0LFxuICAgICAgdGFibGVDb2RlLFxuICAgICAgcmVjb3JkSWQsXG4gICAgICByZWNvcmREYXRhXG4gICAgfTtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZVNlbGVjdGlvbnNTdGFydFt0YWJsZUNvZGVdO1xuICAgIGlmICh0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlU2VsZWN0aW9uTWV0aG9kIG9mIHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlID0gdGFibGVTZWxlY3Rpb25NZXRob2QodGFibGVTZWxlY3Rpb25EZXRhaWwpO1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNsaWVudEFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgY3VyciksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRUYWJsZVNlcnZlclJlY29yZFNlbGVjdGlvbih0YWJsZVNlbGVjdGlvbkRldGFpbCk7XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VydmVyUmVjb3JkU2VsZWN0aW9uKHRhYmxlU2VsZWN0aW9uRGV0YWlsOiBhbnkpIHtcbiAgICBjb25zdCB7IHRhYmxlT2JqZWN0LCB0YWJsZUNvZGUsIHJlY29yZElkLCByZWNvcmREYXRhIH0gPSB0YWJsZVNlbGVjdGlvbkRldGFpbDtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIHRhYmxlT2JqZWN0LnB1dE9uV2FpdCgpO1xuICAgIGxldCBmaW5pc2ggPSB0cnVlO1xuICAgIGxldCBhY3Rpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmICh0YWJsZU9iamVjdC5zZWxlY3Rpb25CYWNrZW5kKSB7XG4gICAgICBjb25zdCBhY3Rpb25TdWJqZWN0OiBhbnkgPSB7XG4gICAgICAgIHRhYmxlQ29kZSxcbiAgICAgICAgYWN0aW9uVHlwZTogdGhpcy5mb3JtQ29uZmlnLnRhYmxlQWN0aW9ucy5yb3dTZWxlY3Rpb24sXG4gICAgICAgIGFjdGlvbkNvZGU6IG51bGwsXG4gICAgICAgIHRhYmxlUmVjb3JkSWQ6IHJlY29yZElkLFxuICAgICAgICB0YWJsZVJlY29yZERhdGE6IHJlY29yZERhdGFcbiAgICAgIH07XG4gICAgICBhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihmb3JtQWN0aW9ucy50YWJsZUFjdGlvbiwgYWN0aW9uU3ViamVjdCk7XG4gICAgICBmaW5pc2ggPSAhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgaWYgKGZpbmlzaCkge1xuICAgICAgdGhpcy5maW5pc2hUYWJsZVJlY29yZFNlbGVjdGlvbih0YWJsZVNlbGVjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5VGFibGVTZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICB0YWJsZU9iamVjdC5mcmVlV2FpdGluZygpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoVGFibGVSZWNvcmRTZWxlY3Rpb24odGFibGVTZWxlY3Rpb25EZXRhaWw6IGFueSwgYWN0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUgfSA9IHRhYmxlU2VsZWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlU2VsZWN0aW9uc0ZpbmlzaFt0YWJsZUNvZGVdO1xuICAgIGlmICh0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlU2VsZWN0aW9uTWV0aG9kIG9mIHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKHRhYmxlU2VsZWN0aW9uTWV0aG9kKHRhYmxlU2VsZWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VsZWN0aW9uQWN0aW9uKHRhYmxlQWN0aW9uRXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlLCBhY3Rpb25EZXRhaWwgfSA9IHRhYmxlQWN0aW9uRXZlbnQ7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlQ29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCB8fCAhYWN0aW9uQ29kZSkgeyByZXR1cm47IH1cbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCB7IHNlbGVjdGVkUmVjb3JkcyB9ID0gYWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IGFjdGlvbiA9IHRhYmxlT2JqZWN0LmdldEFjdGlvbihhY3Rpb25Db2RlKTtcbiAgICBpZiAoIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICBjb25zdCB0YWJsZUFjdGlvbkRldGFpbCA9IHtcbiAgICAgIHRhYmxlT2JqZWN0LFxuICAgICAgYWN0aW9uLFxuICAgICAgdGFibGVDb2RlLFxuICAgICAgYWN0aW9uQ29kZSxcbiAgICAgIHNlbGVjdGVkUmVjb3Jkc1xuICAgIH07XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zU3RhcnRbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2UgPSB0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFRhYmxlU2VydmVyU2VsZWN0aW9uQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZXJ2ZXJTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25EZXRhaWw6IGFueSkge1xuICAgIGNvbnN0IHsgdGFibGVPYmplY3QsIGFjdGlvbiwgdGFibGVDb2RlLCBhY3Rpb25Db2RlLCBzZWxlY3RlZFJlY29yZHMgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICB0YWJsZU9iamVjdC5wdXRPbldhaXQoKTtcbiAgICBsZXQgZmluaXNoID0gdHJ1ZTtcbiAgICBsZXQgYWN0aW9uUmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoYWN0aW9uLmJhY2tlbmQpIHtcbiAgICAgIGNvbnN0IGFjdGlvblN1YmplY3QgPSB7XG4gICAgICAgIHRhYmxlQ29kZSxcbiAgICAgICAgYWN0aW9uVHlwZTogdGhpcy5mb3JtQ29uZmlnLnRhYmxlQWN0aW9ucy5zZWxlY3Rpb24sXG4gICAgICAgIGFjdGlvbkNvZGUsXG4gICAgICAgIHNlbGVjdGVkUmVjb3Jkc1xuICAgICAgfTtcbiAgICAgIGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLnRhYmxlQWN0aW9uLCBhY3Rpb25TdWJqZWN0KTtcbiAgICAgIGZpbmlzaCA9ICF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBpZiAoZmluaXNoKSB7XG4gICAgICB0aGlzLmZpbmlzaFRhYmxlU2VsZWN0aW9uQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpO1xuICAgICAgYWN0aW9uLm5ld1N0YXRlICYmIHRoaXMuY2hhbmdlU3RhdGUoYWN0aW9uLm5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5VGFibGVTZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICB0YWJsZU9iamVjdC5mcmVlV2FpdGluZygpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoVGFibGVTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25EZXRhaWw6IGFueSwgYWN0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlQWN0aW9uc0ZpbmlzaFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaCh0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZUdldERhdGEodGFibGVBY3Rpb25FdmVudDogYW55KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUgfSA9IHRhYmxlQWN0aW9uRXZlbnQ7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlQ29kZSk7XG4gICAgY29uc3QgdGFibGVBY3Rpb25EZXRhaWwgPSB7XG4gICAgICB0YWJsZU9iamVjdCxcbiAgICAgIHRhYmxlQ29kZVxuICAgIH07XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVHZXREYXRhU3RhcnRbdGFibGVDb2RlXTtcbiAgICBpZiAodGFibGVFdmVudEhhbmRsZXJzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZSA9IHRhYmxlQWN0aW9uTWV0aG9kKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjbGllbnRBY3Rpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZUFjdGlvbiA9IGNsaWVudEFjdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIGN1cnIpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVBY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0VGFibGVTZXJ2ZXJHZXREYXRhKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZXJ2ZXJHZXREYXRhKHRhYmxlQWN0aW9uRGV0YWlsOiBhbnkpIHtcbiAgICBjb25zdCB7IHRhYmxlT2JqZWN0LCB0YWJsZUNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIHRhYmxlT2JqZWN0LnB1dE9uV2FpdCgpO1xuICAgIGNvbnN0IGFjdGlvblN1YmplY3QgPSB7IHRhYmxlQ29kZSB9O1xuICAgIGNvbnN0IGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihmb3JtQWN0aW9ucy5nZXRUYWJsZURhdGEsIGFjdGlvblN1YmplY3QpO1xuICAgIGlmICh0aGlzLmVycm9yT2NjdXJlZCgpKSB7XG4gICAgICB0aGlzLmRpc3BsYXlUYWJsZVNlcnZlckVycm9yKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmluaXNoVGFibGVHZXREYXRhKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpO1xuICAgIH1cbiAgICB0YWJsZU9iamVjdC5mcmVlV2FpdGluZygpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoVGFibGVHZXREYXRhKHRhYmxlQWN0aW9uRGV0YWlsOiBhbnksIGFjdGlvblJlc3VsdCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCB0YWJsZUFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlQWN0aW9uc0ZpbmlzaFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW3RhYmxlQWN0aW9uQ29kZV0gOiBudWxsO1xuICAgIGlmICh0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKHRhYmxlQWN0aW9uTWV0aG9kKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBjaGVja1NlY3Rpb25SZXF1aXJlZEZpZWxkcyhzZWN0aW9uQ29kZTogc3RyaW5nLCByZXFGaWVsZE1lc3NhZ2U/KSB7XG4gICAgdGhpcy5jbGVhbkVycm9yRmllbGRzKG51bGwsIHNlY3Rpb25Db2RlKTtcbiAgICBjb25zdCByZXF1aXJlZEZpZWxkTWVzc2FnZSA9IHJlcUZpZWxkTWVzc2FnZSA/PyB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnJlcXVpcmVkRmllbGRcbiAgICBjb25zdCBudW1FcnJvcnMgPSB0aGlzLnRhZ0ZpZWxkc1dpdGhFcnJvcih0aGlzLmdldFJlcXVpcmVkRW1wdHlGaWVsZHMobnVsbCxcbiAgICAgIHNlY3Rpb25Db2RlKSwgbnVsbCwgcmVxdWlyZWRGaWVsZE1lc3NhZ2UpO1xuICAgIHJldHVybiAobnVtRXJyb3JzID09PSAwKTtcbiAgfVxuXG4gIHZhbGlkYXRlU2VjdGlvbkNvbnNpc3RlbmN5KHNlY3Rpb25Db2RlOiBzdHJpbmcsIHJlcUZpZWxkTWVzc2FnZT8pIHtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCBjb21wbGV0ZUZpZWxkcyA9IHRoaXMuY2hlY2tTZWN0aW9uUmVxdWlyZWRGaWVsZHMoc2VjdGlvbkNvZGUsIHJlcUZpZWxkTWVzc2FnZSk7XG4gICAgaWYgKCFjb21wbGV0ZUZpZWxkcykge1xuICAgICAgdGhpcy5zZXRFcnJvcih0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnR5cGVXYXJuaW5nLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnZhbGlkYXRpb25UaXRsZSxcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy5yZXF1aXJlZEZpZWxkcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB2YWxpZGF0aW9uRXJyb3IgPSBmYWxzZTtcbiAgICBjb25zdCByZXF1aXJlZEVtcHR5RmllbGRzID0gdGhpcy5nZXRSZXF1aXJlZEVtcHR5RmllbGRzKG51bGwsIHNlY3Rpb25Db2RlKTtcbiAgICBpZiAocmVxdWlyZWRFbXB0eUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRFcnJvcih0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnR5cGVXYXJuaW5nLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnZhbGlkYXRpb25UaXRsZSxcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy5yZXF1aXJlZEZpZWxkcyk7XG4gICAgICB0aGlzLnRhZ0ZpZWxkc1dpdGhFcnJvcihyZXF1aXJlZEVtcHR5RmllbGRzLCBudWxsLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnJlcXVpcmVkRmllbGQpO1xuICAgICAgZm9yIChjb25zdCBmaWVsZENvZGUgb2YgcmVxdWlyZWRFbXB0eUZpZWxkcykge1xuICAgICAgICBjb25zdCByZXF1aXJlZEVtcHR5RmllbGQgPSB0aGlzLmdldEZpZWxkKGZpZWxkQ29kZSk7XG4gICAgICAgIHJlcXVpcmVkRW1wdHlGaWVsZD8uZm9jdXMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkYXRpb25Jc3N1ZUZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzV2l0aFZhbGlkYXRpb25Jc3N1ZXMobnVsbCxcbiAgICAgIHNlY3Rpb25Db2RlKTtcbiAgICBpZiAoIXZhbGlkYXRpb25FcnJvciAmJiB2YWxpZGF0aW9uSXNzdWVGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgdmFsaWRhdGlvbkVycm9yID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0RXJyb3IodGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy50eXBlV2FybmluZyxcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy52YWxpZGF0aW9uVGl0bGUsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMudmFsaWRhdGlvbkZpZWxkcyk7XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkQ29kZSBvZiB2YWxpZGF0aW9uSXNzdWVGaWVsZHMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbklzc3VlRmllbGQgPSB0aGlzLmdldEZpZWxkKGZpZWxkQ29kZSk7XG4gICAgICAgIHZhbGlkYXRpb25Jc3N1ZUZpZWxkLmZvY3VzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yO1xuICB9XG5cbiAgY29weVRhYmxlUmVjb3JkVG9GaWVsZHModGFibGVPYmo6IGFueSwgbWFwcGluZ1RhYmxlOiBhbnkgPSBudWxsKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlT2JqLnRhYmxlQ29kZSk7XG4gICAgY29uc3QgdGFibGVSZWNvcmQgPSB0YWJsZU9iamVjdC5nZXRUYWJsZVJlY29yZCh0YWJsZU9iai5yZWNvcmRJZCk7XG4gICAgY29uc3QgY29sdW1uTmFtZXMgPSB0YWJsZU9iamVjdC5jb2x1bW5OYW1lcztcbiAgICBmb3IgKGNvbnN0IGNvbHVtbk5hbWUgb2YgY29sdW1uTmFtZXMpIHtcbiAgICAgIGNvbnN0IGNvbHVtblZhbHVlID0gdGFibGVSZWNvcmQuZ2V0RmllbGRWYWx1ZShjb2x1bW5OYW1lKSA/PyAnJztcbiAgICAgIGNvbnN0IGZpZWxkQ29kZSA9IG1hcHBpbmdUYWJsZT8uW2NvbHVtbk5hbWVdID8/IGNvbHVtbk5hbWU7XG4gICAgICB0aGlzLnNldEZpZWxkVmFsdWUoZmllbGRDb2RlLCBjb2x1bW5WYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=
|
|
1387
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvYmFzaWMtZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQU9uRixNQUFNLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQztBQUM1QyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUM7QUFDL0IsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDO0FBQy9CLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQztBQUVsQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFDMUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBS3RCLE1BQU0sT0FBTyxrQkFBa0I7SUE2TzdCLFlBQ1ksa0JBQXlDLEVBQ3pDLGFBQXFDLEVBQ3JDLGdCQUEwQztRQUYxQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXVCO1FBQ3pDLGtCQUFhLEdBQWIsYUFBYSxDQUF3QjtRQUNyQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTBCO1FBL085QyxtQkFBYyxHQUF5QixJQUFJLENBQUM7UUFDNUMsa0JBQWEsR0FBVyxJQUFJLENBQUM7UUFHN0Isd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQzdDLCtCQUEr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QUMsQ0FBQztRQUNsRSxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO1FBQzVDLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFO1lBQ3BDLE1BQU0sV0FBVyxHQUFHLE1BQUEsV0FBVyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsbUNBQUksRUFBRSxDQUFDO1lBQ2hFLE1BQU0sU0FBUyxHQUFHLE1BQUEsWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFHLFVBQVUsQ0FBQyxtQ0FBSSxVQUFVLENBQUM7WUFDM0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7OztZQXZ4Q0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSwyQkFBMkI7YUFDdEM7OztZQXBCUSxxQkFBcUI7WUFDckIsc0JBQXNCO1lBQ3RCLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybVN0cnVjdHVyZUFuZERhdGEgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm1zL2Zvcm0nO1xuaW1wb3J0IHsgTGliRm9ybU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGliRXZlbnRNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V2ZW50LW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBMaWJGaWxlTWFuYWdlbWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWxlLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBmb3JtQWN0aW9ucywgTk9fRVJST1IsIEhFQURFUiB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybXMvZm9ybS5jb25zdGFudHMnO1xuaW1wb3J0IHsgRm9ybUFjdGlvbiB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybXMvYWN0aW9uJztcbmltcG9ydCB7IEZpZWxkRGVzY3JpcHRvciwgRmllbGRPcHRpb24gfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm1zL2ZpZWxkJztcbmltcG9ydCB7IFJlY29yZFRhYmxlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3Jtcy90YWJsZS90YWJsZSc7XG5pbXBvcnQgeyBSZWNvcmRGb3JtU2VjdGlvbiB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybXMvc2VjdGlvbic7XG5pbXBvcnQgeyBSZWNvcmRGb3JtU3ViU2VjdGlvbiB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybXMvc3Vic2VjdGlvbic7XG5cbmNvbnN0IFBBWUxPQURfVkVSU0lPTiA9ICdUVUFJTkVYQ0hBTkdFXzEuMCc7XG5jb25zdCBJTkxJTkVfQUNUSU9OID0gJ0lOTElORSc7XG5jb25zdCBHTE9CQUxfQUNUSU9OID0gJ0dMT0JBTCc7XG5jb25zdCBHRVRfREFUQV9BQ1RJT04gPSAnR0VUREFUQSc7XG5cbmNvbnN0IFNVQkpFQ1QgPSAnc3ViamVjdCc7XG5jb25zdCBUT0tFTiA9ICd0b2tlbic7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gXG59KVxuZXhwb3J0IGNsYXNzIEJhc2ljRm9ybUNvbXBvbmVudCB7XG4gIHByaXZhdGUgX2Zvcm1TdHJ1Y3R1cmU6IEZvcm1TdHJ1Y3R1cmVBbmREYXRhID0gbnVsbDtcbiAgcHJpdmF0ZSBfY29udHJvbFRva2VuOiBzdHJpbmcgPSBudWxsO1xuICBwcml2YXRlIF9vcmlnaW5Ub2tlbjogc3RyaW5nO1xuICBwcml2YXRlIF9mb3JtUm91dGU6IHN0cmluZztcbiAgcHJpdmF0ZSBfZGVmaW5pdGlvbk9idGFpbmVkOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIEV2ZW50b3MgZGUgYWNjaW9uZXMgeSBjYW1wb3NcbiAgcHJpdmF0ZSBfZm9ybVNlY3Rpb25zQWN0aXZhdGU6IGFueSA9IHt9O1xuICBwcml2YXRlIF9mb3JtU2VjdGlvbnNJbmFjdGl2YXRlOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfZm9ybUFjdGlvbnNTdGFydDogYW55ID0ge307XG4gIHByaXZhdGUgX2Zvcm1BY3Rpb25zRmluaXNoOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfZmllbGRJbnB1dFZhbGlkYXRpb246IGFueSA9IHt9O1xuICBwcml2YXRlIF9maWVsZFZhbGlkYXRpb25zU3RhcnQ6IGFueSA9IHt9O1xuICBwcml2YXRlIF9maWVsZFZhbGlkYXRpb25zRmluaXNoOiBhbnkgPSB7fTtcbiAgLy8gQ2FsbGJhY2sgZGUgYWNjaW9uZXMgZGUgdGFibGFzXG4gIHByaXZhdGUgX3RhYmxlU2VsZWN0aW9uc1N0YXJ0OiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfdGFibGVTZWxlY3Rpb25zRmluaXNoOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBfdGFibGVBY3Rpb25zU3RhcnQ6IGFueSA9IHt9O1xuICBwcml2YXRlIF90YWJsZUFjdGlvbnNGaW5pc2g6IGFueSA9IHt9O1xuICBwcml2YXRlIF90YWJsZUdldERhdGFTdGFydDogYW55ID0ge307XG4gIHByaXZhdGUgX3RhYmxlR2V0RGF0YUZpbmlzaDogYW55ID0ge307XG5cbiAgcHJvdGVjdGVkIGlucHV0RGF0YUZpZWxkczogYW55ID0ge307XG4gIHByb3RlY3RlZCBleHRyYURhdGE6IGFueSA9IHt9O1xuICBwcm90ZWN0ZWQgX2V2ZW50RW1pdGVyOiBMaWJFdmVudE1hbmFnZXJTZXJ2aWNlO1xuXG5cbiAgZm9ybUNvbmZpZzogYW55O1xuICBuYW1lOiBzdHJpbmc7XG4gIGZvcm1TdWJqZWN0OiBzdHJpbmc7XG4gIF9lcnJvclR5cGU6IHN0cmluZyA9ICcnO1xuICBlcnJvckNvZGU6IHN0cmluZyA9ICcnO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBlcnJvckRldGFpbDogc3RyaW5nID0gJyc7XG4gIHZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBmaWVsZHM6IGFueTtcbiAgYWN0aW9uczogYW55O1xuICBzZWN0aW9uczogYW55O1xuICBidXN5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgZ2V0VGl0bGUoKSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRUaXRsZSgpOyB9XG4gIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcpIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNldFRpdGxlKHRpdGxlKTsgfVxuICBjbGVhbkRhdGEoKSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5jbGVhbkRhdGEoKTsgfVxuICBnZXRDdXJyZW50U3RhdGUoKSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRDdXJyZW50U3RhdGUoKTsgfVxuICBzdXBwb3J0U3RhdGUoc3RhdGU6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc3VwcG9ydFN0YXRlKHN0YXRlKTsgfVxuICBjaGFuZ2VTdGF0ZShzdGF0ZSkgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uY2hhbmdlU3RhdGUoc3RhdGUpOyB9XG4gIGdldFN0YXRlcygpIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnN0YXRlczsgfVxuICBnZXRJbW11dGFibGVFbGVtZW50KG5hbWU6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0SW1tdXRhYmxlRWxlbWVudChuYW1lKTsgfVxuICBnZXRFeHRyYUluZm8obmFtZTogc3RyaW5nKSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRFeHRyYUluZm8obmFtZSk7IH1cbiAgZ2V0RmllbGRzKCkgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0RmllbGRzKCk7IH1cbiAgZ2V0RmllbGROYW1lcygpIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldEZpZWxkTmFtZXMoKTsgfVxuICBnZXRGaWVsZChjb2RlOiBzdHJpbmcpIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldEZpZWxkKGNvZGUpOyB9XG4gIGVuYWJsZUZpZWxkKGNvZGU6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZW5hYmxlRmllbGQoY29kZSk7IH1cbiAgZGlzYWJsZUZpZWxkKGNvZGU6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZGlzYWJsZUZpZWxkKGNvZGUpOyB9XG4gIGdldEZpZWxkVmFsdWUoY29kZTogc3RyaW5nKTogYW55IHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldEZpZWxkVmFsdWUoY29kZSk7IH1cbiAgZ2V0RmllbGRPcHRpb25UZXh0KGNvZGU6IHN0cmluZyk6IGFueSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRGaWVsZE9wdGlvblRleHQoY29kZSk7IH1cbiAgZ2V0RmllbGRzVmFsdWVzKGNvZGVzOiBzdHJpbmdbXSkgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0RmllbGRzVmFsdWVzKGNvZGVzKTsgfVxuICBnZXRGaWVsZE9wdGlvbnMoY29kZTogc3RyaW5nKTogRmllbGRPcHRpb25bXSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRGaWVsZE9wdGlvbnMoY29kZSk7IH1cbiAgc2V0RmllbGRWYWx1ZShjb2RlOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNldEZpZWxkVmFsdWUoY29kZSwgdmFsdWUpOyB9XG4gIHNldEZpZWxkUmVxdWlyZWQoY29kZTogc3RyaW5nLCByZXF1aXJlZDogYm9vbGVhbikgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2V0RmllbGRSZXF1aXJlZChjb2RlLCByZXF1aXJlZCk7IH1cbiAgc2V0RmllbGRFcnJvck1lc3NhZ2UoY29kZTogc3RyaW5nLCBlcnJvck1lc3NhZ2U6IHN0cmluZykgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2V0RmllbGRFcnJvck1lc3NhZ2UoY29kZSwgZXJyb3JNZXNzYWdlKTsgfVxuICBzZXRGaWVsZEVycm9yKGNvZGU6IHN0cmluZywgZXJyb3JDb2RlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgdHlwZT86IHN0cmluZykgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2V0RmllbGRFcnJvcihjb2RlLCBlcnJvckNvZGUsIG1lc3NhZ2UsIHR5cGUpOyB9XG4gIHNldEZpZWxkSW50cmluc2ljRXJyb3JNZXNzYWdlKGNvZGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNldEZpZWxkSW50cmluc2ljRXJyb3JNZXNzYWdlKGNvZGUsIG1lc3NhZ2UpO1xuICB9XG4gIHNldEZpZWxkT3B0aW9ucyhjb2RlLCBvcHRpb25zQXJyYXksIGlkQXR0cmlidXRlLCBuYW1lQXR0cmlidXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNldEZpZWxkT3B0aW9ucyhjb2RlLCBvcHRpb25zQXJyYXksIGlkQXR0cmlidXRlLCBuYW1lQXR0cmlidXRlKTtcbiAgfVxuICBnZXRGaWVsZFNldChmaWx0ZXJGdW5jPywgY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRGaWVsZFNldChmaWx0ZXJGdW5jLCBjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgYXBwbHlPbkZpZWxkcyhwcm9jZXNzRnVuYywgY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5hcHBseU9uRmllbGRzKHByb2Nlc3NGdW5jLCBjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgYXBwbHlQcm9jZXNzVG9BbGxGaWVsZHMocHJvY2Vzc0Z1bmMpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uYXBwbHlPbkZpZWxkcyhwcm9jZXNzRnVuYyk7XG4gIH1cbiAgY2xlYW5GaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5jbGVhbkZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgZ2V0UmVxdWlyZWRGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRSZXF1aXJlZEZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgZ2V0UmVxdWlyZWRFbXB0eUZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldFJlcXVpcmVkRW1wdHlGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIGdldENoYW5nZWRGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRDaGFuZ2VkRmllbGRzKGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICBnZXRGaWVsZHNXaXRoVmFsaWRhdGlvbklzc3Vlcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldEZpZWxkc1dpdGhWYWxpZGF0aW9uSXNzdWVzKGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICB0YWdGaWVsZHNXaXRoRXJyb3IoZXJyb3JNZXNzYWdlLCBjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnRhZ0ZpZWxkc1dpdGhFcnJvcihlcnJvck1lc3NhZ2UsIGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICBjbGVhbkVycm9yRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uY2xlYW5FcnJvckZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgc2hvd0xhYmVsRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2hvd0xhYmVsRmllbGRzKGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICBoaWRlTGFiZWxGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5oaWRlTGFiZWxGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIGVuYWJsZUZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmVuYWJsZUZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgZGlzYWJsZUZpZWxkcyhjb2Rlcz86IHN0cmluZ1tdIHwgc3RyaW5nLCBzZWNDb2RlPzogc3RyaW5nLCBzdWJDb2RlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmRpc2FibGVGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZW5hYmxlRmllbGRzXG4gICAqL1xuICBlbmFibGVFZGl0RmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZGlzYWJsZUZpZWxkc1xuICAgKi9cbiAgZGlzYWJsZUVkaXRGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVGaWVsZHMoY29kZXMsIHNlY0NvZGUsIHN1YkNvZGUpO1xuICB9XG4gIHNob3dGaWVsZHMoY29kZXM/OiBzdHJpbmdbXSB8IHN0cmluZywgc2VjQ29kZT86IHN0cmluZywgc3ViQ29kZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zaG93RmllbGRzKGNvZGVzLCBzZWNDb2RlLCBzdWJDb2RlKTtcbiAgfVxuICBoaWRlRmllbGRzKGNvZGVzPzogc3RyaW5nW10gfCBzdHJpbmcsIHNlY0NvZGU/OiBzdHJpbmcsIHN1YkNvZGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uaGlkZUZpZWxkcyhjb2Rlcywgc2VjQ29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgZ2V0QWN0aW9uc0J5QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0QWN0aW9uc0J5QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfVxuICBnZXRIZWFkZXJBY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRBY3Rpb25zQnlBdHRyaWJ1dGUoJ2xvY2F0aW9uJywgSEVBREVSKTtcbiAgfVxuICBnZXRBY3Rpb24oYWN0aW9uQ29kZTogc3RyaW5nKTogRm9ybUFjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldEFjdGlvbihhY3Rpb25Db2RlKTtcbiAgfVxuICBzaG93QWN0aW9ucyhhY3Rpb25BcnJheSk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zaG93QWN0aW9ucyhhY3Rpb25BcnJheSk7XG4gIH1cbiAgaGlkZUFjdGlvbnMoYWN0aW9uQXJyYXkpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uaGlkZUFjdGlvbnMoYWN0aW9uQXJyYXkpO1xuICB9XG4gIGVuYWJsZUFjdGlvbnMoYWN0aW9uQXJyYXkpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZW5hYmxlQWN0aW9ucyhhY3Rpb25BcnJheSk7XG4gIH1cbiAgZGlzYWJsZUFjdGlvbnMoYWN0aW9uQXJyYXkpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZGlzYWJsZUFjdGlvbnMoYWN0aW9uQXJyYXkpO1xuICB9XG4gIHNob3dBY3Rpb24oY29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNob3dBY3Rpb25zKGNvZGUpO1xuICB9XG4gIGhpZGVBY3Rpb24oY29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmhpZGVBY3Rpb25zKGNvZGUpO1xuICB9XG4gIGVuYWJsZUFjdGlvbihjb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZW5hYmxlQWN0aW9ucyhjb2RlKTtcbiAgfVxuICBkaXNhYmxlQWN0aW9uKGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5kaXNhYmxlQWN0aW9ucyhjb2RlKTtcbiAgfVxuICBnZXRTZWN0aW9ucygpOiBSZWNvcmRGb3JtU2VjdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0U2VjdGlvbnMoKTtcbiAgfVxuICBhY3RpdmF0ZVNlY3Rpb24oY29kZSk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5hY3RpdmF0ZVNlY3Rpb24oY29kZSk7XG4gIH1cbiAgZ2V0U2VjdGlvbnNUaXRsZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRTZWN0aW9ucygpLm1hcChzZWMgPT4gc2VjLnRpdGxlKTtcbiAgfVxuICBnZXRTZWN0aW9uKGNvZGU6IHN0cmluZyk6IFJlY29yZEZvcm1TZWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0U2VjdGlvbihjb2RlKTtcbiAgfVxuICBzaG93U2VjdGlvbihjb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uc2hvd1NlY3Rpb25zKGNvZGUpO1xuICB9XG4gIGhpZGVTZWN0aW9uKGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5oaWRlU2VjdGlvbnMoY29kZSk7XG4gIH1cbiAgc2hvd1NlY3Rpb25zKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZyk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zaG93U2VjdGlvbnMoY29kZXMpO1xuICB9XG4gIGhpZGVTZWN0aW9ucyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uaGlkZVNlY3Rpb25zKGNvZGVzKTtcbiAgfVxuICBnZXRTdWJTZWN0aW9uKGNvZGU6IHN0cmluZywgc3ViQ29kZTogc3RyaW5nKTogUmVjb3JkRm9ybVN1YlNlY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRTdWJTZWN0aW9uKGNvZGUsIHN1YkNvZGUpO1xuICB9XG4gIHNob3dTdWJTZWN0aW9uKGNvZGU6IHN0cmluZywgc3ViQ29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNob3dTdWJTZWN0aW9ucyhjb2RlLCBzdWJDb2RlKTtcbiAgfVxuICBoaWRlU3ViU2VjdGlvbihjb2RlOiBzdHJpbmcsIHN1YkNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5oaWRlU3ViU2VjdGlvbnMoY29kZSwgc3ViQ29kZSk7XG4gIH1cbiAgc2hvd1N1YlNlY3Rpb25zKGNvZGU6IHN0cmluZywgc3ViQ29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNob3dTdWJTZWN0aW9ucyhjb2RlLCBzdWJDb2Rlcyk7XG4gIH1cbiAgaGlkZVN1YlNlY3Rpb25zKGNvZGU6IHN0cmluZywgc3ViQ29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmhpZGVTdWJTZWN0aW9ucyhjb2RlLCBzdWJDb2Rlcyk7XG4gIH1cbiAgZ2V0U2VjdGlvbkFjdGlvbnMoY29kZTogc3RyaW5nKTogRm9ybUFjdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0U2VjdGlvbkFjdGlvbnMoY29kZSk7XG4gIH1cbiAgZ2V0U2VjdGlvbkFjdGlvbk5hbWVzKGNvZGU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uZ2V0U2VjdGlvbkFjdGlvbk5hbWVzKGNvZGUpO1xuICB9XG5cbiAgZ2V0VGFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRUYWJsZXMoKTtcbiAgfVxuICBzaG93VGFibGVzKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5zaG93VGFibGVzKGNvZGVzKTtcbiAgfVxuICBoaWRlVGFibGVzKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5oaWRlVGFibGVzKGNvZGVzKTtcbiAgfVxuICBjbGVhblRhYmxlcyhjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uY2xlYW5UYWJsZXMoY29kZXMpO1xuICB9XG4gIGdldFRhYmxlKGNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRUYWJsZShjb2RlKTtcbiAgfVxuICBzaG93VGFibGUoY29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNob3dUYWJsZXMoY29kZSk7XG4gIH1cbiAgaGlkZVRhYmxlKGNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5oaWRlVGFibGVzKGNvZGUpO1xuICB9XG4gIGNsZWFuVGFibGUoY29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmdldFRhYmxlKGNvZGUpPy5jbGVhbigpO1xuICB9XG4gIGdldFRhYmxlUmVjb3JkKGNvZGU6IHN0cmluZywgcmVjb3JkSWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy5nZXRUYWJsZVJlY29yZChjb2RlLCByZWNvcmRJZCk7XG4gIH1cblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBmb3JtTWFuYWdlclNlcnZpY2U6IExpYkZvcm1NYW5hZ2VyU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgX2V2ZW50TWFuYWdlcjogTGliRXZlbnRNYW5hZ2VyU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZmlsZU1nbXRTZXJ2aWNlczogTGliRmlsZU1hbmFnZW1lbnRTZXJ2aWNlKSB7XG4gICAgdGhpcy5fZXZlbnRFbWl0ZXIgPSB0aGlzLl9ldmVudE1hbmFnZXI7XG4gICAgdGhpcy5jbGVhblN0YXJ0KCk7XG4gICAgdGhpcy5jdXN0b21QcmVQcm9jZXNzaW5nKCk7XG4gIH1cblxuICBzZXRDb25maWcoZm9ybUNvbmZpZykge1xuICAgIHRoaXMuZm9ybUNvbmZpZyA9IGZvcm1Db25maWc7XG4gIH1cblxuICBjbGVhblN0YXJ0KCkge1xuICAgIHRoaXMuX2Vycm9yVHlwZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JDb2RlID0gJyc7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmVycm9yRGV0YWlsID0gJyc7XG4gICAgdGhpcy5fZm9ybVN0cnVjdHVyZSA9IG51bGw7XG4gICAgdGhpcy5maWVsZHMgPSBudWxsO1xuICAgIHRoaXMuYWN0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5zZWN0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5fY29udHJvbFRva2VuID0gbnVsbDtcbiAgICB0aGlzLmlucHV0RGF0YUZpZWxkcyA9IHt9O1xuICAgIHRoaXMuX2RlZmluaXRpb25PYnRhaW5lZCA9IGZhbHNlO1xuICAgIC8vIFNlIGxpbXBpYW4gbG9zIG1hbmVqYWRvcmVzIGRlIGV2ZW50b3NcbiAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICB0aGlzLl9mb3JtU2VjdGlvbnNBY3RpdmF0ZSA9IHt9O1xuICAgIHRoaXMuX2Zvcm1TZWN0aW9uc0luYWN0aXZhdGUgPSB7fTtcbiAgICB0aGlzLl9mb3JtQWN0aW9uc1N0YXJ0ID0ge307XG4gICAgdGhpcy5fZm9ybUFjdGlvbnNGaW5pc2ggPSB7fTtcbiAgICB0aGlzLl9maWVsZElucHV0VmFsaWRhdGlvbiA9IHt9O1xuICAgIHRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNTdGFydCA9IHt9O1xuICAgIHRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNGaW5pc2ggPSB7fTtcbiAgICB0aGlzLl90YWJsZVNlbGVjdGlvbnNTdGFydCA9IHt9O1xuICAgIHRoaXMuX3RhYmxlU2VsZWN0aW9uc0ZpbmlzaCA9IHt9O1xuICAgIHRoaXMuX3RhYmxlQWN0aW9uc1N0YXJ0ID0ge307XG4gICAgdGhpcy5fdGFibGVBY3Rpb25zRmluaXNoID0ge307XG4gICAgdGhpcy5fdGFibGVHZXREYXRhU3RhcnQgPSB7fTtcbiAgICB0aGlzLl90YWJsZUdldERhdGFGaW5pc2ggPSB7fTtcbiAgfVxuXG4gIGdldCBmb3JtVmlzaWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudmlzaWJsZTsgfVxuICBnZXQgZm9ybU1hbmFnZXIoKSB7IHJldHVybiB0aGlzOyB9XG4gIGdldCBmb3JtQ29kZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5uYW1lOyB9XG4gIHNldCBmb3JtQ29kZShuYW1lOiBzdHJpbmcpIHsgdGhpcy5uYW1lID0gbmFtZTsgfVxuICBnZXQgaW5TZXJ2ZXJQcm9jZXNzKCkgeyByZXR1cm4gdGhpcy5idXN5OyB9XG4gIGdldCBmb3JtKCk6IEZvcm1TdHJ1Y3R1cmVBbmREYXRhIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU7IH1cblxuICBnZXQgc3RhdGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnN0YXRlOyB9XG4gIGdldCBjdXJyZW50U3RhdGUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnN0YXRlOyB9XG4gIHNldCBjdXJyZW50U3RhdGUoc3RhdGU6IHN0cmluZykgeyB0aGlzLl9mb3JtU3RydWN0dXJlLmNoYW5nZVN0YXRlKHN0YXRlKTsgfVxuICBnZXQgaW1tdXRhYmxlRGF0YSgpOiBhbnkgeyByZXR1cm4gdGhpcy5fZm9ybVN0cnVjdHVyZT8uaW1tdXRhYmxlRGF0YSB9XG4gIGdldCBleHRyYUluZm8oKTogYW55IHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LmV4dHJhSW5mbyB9XG4gIGdldCB2aXNpYmxlU2VjdGlvbnMoKTogUmVjb3JkRm9ybVNlY3Rpb25bXSB7IHJldHVybiB0aGlzLl9mb3JtU3RydWN0dXJlPy52aXNpYmxlU2VjdGlvbnM7IH1cblxuICBnZXQgZm9ybVJvdXRlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9mb3JtUm91dGU7IH1cbiAgc2V0IGZvcm1Sb3V0ZShyb3V0ZTogc3RyaW5nKSB7IHRoaXMuX2Zvcm1Sb3V0ZSA9IHJvdXRlOyB9XG5cbiAgZ2V0IHN1YmplY3QoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZm9ybVN1YmplY3Q7IH1cblxuICAvLyBNw6l0b2RvcyB2aXJ0dWFsZXNcbiAgY3VzdG9tUHJlUHJvY2Vzc2luZygpIHsgfVxuICBjdXN0b21Gb3JtU3RhcnQoKSB7IH1cbiAgZGlzcGxheUFjdGlvblNlcnZlckVycm9yKCkgeyB9XG4gIGRpc3BsYXlWYWxpZGF0aW9uU2VydmVyRXJyb3IoKSB7IH1cbiAgZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKSB7IH1cbiAgc2hvd0ZpZWxkSW5mbyhmaWVsZENvZGU/OiBzdHJpbmcsIGRldGFpbD86IGFueSkgeyB9XG4gIHNob3dNb2RhbERpYWxvZyh0aXRsZSwgYm9keSwgb3B0aW9ucywgY2FsbGJhY2s/LCBwYXJhbXM/KSB7IH1cbiAgb3BlblVwbG9hZERpYWxvZyh0aXRsZSwgYm9keSwgb3B0aW9ucywgY2FsbGJhY2s/LCBwYXJhbXM/KSB7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHN1cHBvcnRTdGF0ZVxuICAgKi9cbiAgc3VwcG9ydE1vZGUoc3RhdGU6IHN0cmluZyk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5zdXBwb3J0U3RhdGUoc3RhdGUpOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBnZXRGaWVsZFxuICAgKi9cbiAgZ2V0RmllbGRPYmplY3QoY29kZTogc3RyaW5nKTogRmllbGREZXNjcmlwdG9yIHsgcmV0dXJuIHRoaXMuZ2V0RmllbGQoY29kZSk7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGdldEFjdGlvblxuICAgKi9cbiAgZ2V0QWN0aW9uT2JqZWN0KGNvZGU6IHN0cmluZyk6IEZvcm1BY3Rpb24geyByZXR1cm4gdGhpcy5nZXRBY3Rpb24oY29kZSk7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGdldFRhYmxlXG4gICAqL1xuICBnZXRUYWJsZU9iamVjdChjb2RlOiBzdHJpbmcpOiBSZWNvcmRUYWJsZSB7IHJldHVybiB0aGlzLmdldFRhYmxlKGNvZGUpOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBnZXRTZWN0aW9uXG4gICAqL1xuICBnZXRTZWN0aW9uT2JqZWN0KGNvZGU6IHN0cmluZyk6IFJlY29yZEZvcm1TZWN0aW9uIHsgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbihjb2RlKTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgY2hhbmdlU3RhdGVcbiAgICovXG4gIGNoYW5nZUZvcm1Nb2RlKHN0YXRlOiBzdHJpbmcpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY2hhbmdlU3RhdGUoc3RhdGUpOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBzdWJqZWN0XG4gICAqL1xuICBnZXRGb3JtU3ViamVjdCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5zdWJqZWN0OyB9XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Ugc3ViamVjdFxuICAgKi9cbiAgZ2V0U3ViamVjdCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5mb3JtU3ViamVjdDsgfVxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHN1YmplY3RcbiAgICovXG4gIGdldGZvcm1TdWJqZWN0KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmdldFN1YmplY3QoKTsgfVxuXG5cbiAgbnVtU2VjdGlvbnMoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX2Zvcm1TdHJ1Y3R1cmU/LnNlY3Rpb25zLmxlbmd0aDsgfVxuXG4gIHN1YnNjcmliZUFwcEV2ZW50KGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjayk6IHZvaWQge1xuICAgIHRoaXMuX2V2ZW50RW1pdGVyLnN1YnNjcmliZShldmVudE5hbWUsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIG9wZW5Gb3JtKG5hbWU6IHN0cmluZywgZGF0YSA9IG51bGwsIGJhY2tEYXRhID0gbnVsbCwgY2xlYW5TdGFjayA9IGZhbHNlKTogdm9pZCB7XG4gICAgbGV0IG9yaWdpbiA9IG51bGw7XG4gICAgaWYgKCFjbGVhblN0YWNrKSB7XG4gICAgICBvcmlnaW4gPSB7IC4uLmJhY2tEYXRhLCBuYW1lOiB0aGlzLm5hbWUsIHVybDogdGhpcy5fZm9ybVJvdXRlLCB0b2tlbjogdGhpcy5fY29udHJvbFRva2VuIH07XG4gICAgICBvcmlnaW4uc3ViamVjdCA9IG9yaWdpbj8uc3ViamVjdCA/PyB0aGlzLmZvcm1TdWJqZWN0O1xuICAgICAgb3JpZ2luLnN0YXRlID0gb3JpZ2luPy5zdGF0ZSA/PyB0aGlzLnN0YXRlO1xuICAgICAgb3JpZ2luLmZpZWxkcyA9IG9yaWdpbj8uZmllbGRzID8/IHt9O1xuICAgICAgb3JpZ2luLmV4dHJhID0gb3JpZ2luPy5leHRyYSA/PyB7fTtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0ID0geyAuLi5kYXRhLCBuYW1lIH07XG4gICAgdGFyZ2V0LnN1YmplY3QgPSB0YXJnZXQ/LnN1YmplY3QgPz8gbnVsbDtcbiAgICB0YXJnZXQuc3RhdGUgPSB0YXJnZXQ/LnN0YXRlID8/IG51bGw7XG4gICAgdGFyZ2V0LmZpZWxkcyA9IHRhcmdldD8uZmllbGRzID8/IHt9O1xuICAgIHRhcmdldC5leHRyYSA9IHRhcmdldD8uZXh0cmEgPz8ge307XG4gICAgdGhpcy5mb3JtTWFuYWdlclNlcnZpY2Uub3BlbkZvcm0ob3JpZ2luLCB0YXJnZXQpO1xuICB9XG5cbiAgY2FuR29CYWNrKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fb3JpZ2luVG9rZW4gIT09IG51bGwgfVxuICBnb0JhY2soKTogdm9pZCB7IHJldHVybiB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZS5iYWNrVG8oKTsgfVxuICBnb0JhY2tGb3JtKCk6IHZvaWQgeyByZXR1cm4gdGhpcy5nb0JhY2soKTsgfVxuICBnZXRPcmlnaW5EZXRhaWwoKTogYW55IHsgcmV0dXJuIHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLmdldEZvcm1JbmZvKHRoaXMuX29yaWdpblRva2VuKTsgfVxuXG4gIHNldEVycm9yKGVycm9yVHlwZTogc3RyaW5nLCBlcnJvck1lc3NhZ2U6IHN0cmluZywgZXJyb3JEZXRhaWw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2Vycm9yVHlwZSA9IGVycm9yVHlwZSB8fCAnJztcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZSB8fCAnJztcbiAgICB0aGlzLmVycm9yRGV0YWlsID0gZXJyb3JEZXRhaWwgfHwgJyc7XG4gIH1cblxuICByZXNldEVycm9yKCk6IHZvaWQgeyB0aGlzLnNldEVycm9yKG51bGwsIG51bGwsIG51bGwpOyB9XG4gIGdldEVycm9yVHlwZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5fZXJyb3JUeXBlOyB9XG4gIGdldEVycm9yTWVzc2FnZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5lcnJvck1lc3NhZ2U7IH1cbiAgZ2V0RXJyb3JEZXRhaWwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZXJyb3JEZXRhaWw7IH1cbiAgZ2V0RXJyb3JDb2RlKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9lcnJvclR5cGU7IH1cblxuICBnZXRGb3JtUGFyYW1ldGVyKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChuYW1lKSA/ICh0aGlzLmV4dHJhRGF0YT8uW25hbWVdID8/IG51bGwpIDogbnVsbDtcbiAgfVxuXG4gIHByZW9jZXNzSW5wdXRQYXJhbXMocGFyYW1zOiBhbnkpOiBzdHJpbmcge1xuICAgIHRoaXMuX2NvbnRyb2xUb2tlbiA9IHBhcmFtcz8uW1RPS0VOXSA/PyBudWxsO1xuICAgIGNvbnN0IHsgdG9rZW4sIHN1YmplY3QsIHN0YXRlLCBmaWVsZHMsIGV4dHJhLCBvcmlnaW5Ub2tlbiB9ID0gdGhpcy5mb3JtTWFuYWdlclNlcnZpY2UuZ2V0Rm9ybUluZm8odGhpcy5fY29udHJvbFRva2VuKTtcbiAgICBpZiAoIXRoaXMuX2NvbnRyb2xUb2tlbiB8fCB0aGlzLl9jb250cm9sVG9rZW4gIT09IHRva2VuKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5mb3JtU3ViamVjdCA9IHBhcmFtcz8uW1NVQkpFQ1RdID8/IHN1YmplY3QgPz8gbnVsbDtcbiAgICB0aGlzLmlucHV0RGF0YUZpZWxkcyA9IGZpZWxkcztcbiAgICB0aGlzLmV4dHJhRGF0YSA9IGV4dHJhO1xuICAgIHRoaXMuX29yaWdpblRva2VuID0gb3JpZ2luVG9rZW47XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgc3Vic2NyaWJlU2VjdGlvbkFjdGl2YXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybVNlY3Rpb25zID0gdGhpcy5fZm9ybVN0cnVjdHVyZS5zZWN0aW9ucztcbiAgICBjb25zdCBzZWN0aW9uTmFtZXMgPSBPYmplY3Qua2V5cyhmb3JtU2VjdGlvbnMpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzZWN0aW9uTmFtZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBzZWN0aW9uTmFtZSA9IHNlY3Rpb25OYW1lc1tpbmRleF07XG4gICAgICBjb25zdCBzZWN0aW9uID0gZm9ybVNlY3Rpb25zW3NlY3Rpb25OYW1lXTtcbiAgICAgIHNlY3Rpb24uYWN0aXZhdGlvbi5zdWJzY3JpYmUoY29kZSA9PiB0aGlzLmxhdW5jaFNlY3Rpb25BY3RpdmF0aW9uKGNvZGUpKTtcbiAgICAgIHNlY3Rpb24uaW5hY3RpdmF0aW9uLnN1YnNjcmliZShjb2RlID0+IHRoaXMubGF1bmNoU2VjdGlvbkluYWN0aXZhdGlvbihjb2RlKSk7XG4gICAgfVxuICB9XG5cbiAgc3Vic2NyaWJlRmllbGRzU3ViamVjdHMoKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUZpZWxkcyA9IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuZ2V0RmllbGRzKCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybUZpZWxkcykpIHtcbiAgICAgIGZvcm1GaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgIGZpZWxkLmVkaXRpb25GaW5pc2guc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCB7IGNvZGUsIGludHJpbnNpY1ZhbGlkYXRpb24gfSA9IGV2ZW50O1xuICAgICAgICAgIHRoaXMuc3RhcnRGaWVsZFZhbGlkYXRpb24oY29kZSwgaW50cmluc2ljVmFsaWRhdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICBmaWVsZC5lZGl0aW9uUGFydGlhbC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgY29kZSwgaW50cmluc2ljVmFsaWRhdGlvbiB9ID0gZXZlbnQ7XG4gICAgICAgICAgdGhpcy5zdGFydEZpZWxkSW5wdXRWYWxpZGF0aW9uKGNvZGUsIGludHJpbnNpY1ZhbGlkYXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgZmllbGQuZGV0YWlsUmVxdWVzdC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zaG93RmllbGRJbmZvKGV2ZW50LmNvZGUsIGV2ZW50LmRldGFpbCkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3Vic2NyaWJlQWN0aW9uU3ViamVjdHMoKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUFjdGlvbnMgPSB0aGlzLl9mb3JtU3RydWN0dXJlLmdldEFjdGlvbnMoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JtQWN0aW9ucykpIHtcbiAgICAgIGZvcm1BY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICAgICAgYWN0aW9uLmFjdGlvbkFjdGl2YXRlZC5zdWJzY3JpYmUoY29kZSA9PiB0aGlzLnN0YXJ0QWN0aW9uKGNvZGUpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZVRhYmxlU3ViamVjdHMoKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybVRhYmxlcyA9IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuZ2V0VGFibGVzKCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybVRhYmxlcykpIHtcbiAgICAgIGZvcm1UYWJsZXMuZm9yRWFjaCh0YWJsZSA9PiB7XG4gICAgICAgIHRhYmxlLmlubGluZUFjdGlvblRyaWdnZXIuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc3RhcnRUYWJsZUFjdGlvbihldmVudCkpO1xuICAgICAgICB0YWJsZS5nbG9iYWxBY3Rpb25UcmlnZ2VyLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnN0YXJ0VGFibGVHbG9iYWxBY3Rpb24oZXZlbnQpKTtcbiAgICAgICAgdGFibGUucmVjb3JkU2VsZWN0aW9uVHJpZ2dlci5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zdGFydFRhYmxlUmVjb3JkU2VsZWN0aW9uKGV2ZW50KSk7XG4gICAgICAgIHRhYmxlLnNlbGVjdGlvbkFjdGlvblRyaWdnZXIuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc3RhcnRUYWJsZVNlbGVjdGlvbkFjdGlvbihldmVudCkpO1xuICAgICAgICB0YWJsZS5nZXREYXRhVHJpZ2dlci5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zdGFydFRhYmxlR2V0RGF0YShldmVudCkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZm9ybUluaXQocGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGluaXRpYWxTdGF0ZTogc3RyaW5nID0gdGhpcy5wcmVvY2Vzc0lucHV0UGFyYW1zKHBhcmFtcyk7XG4gICAgaWYgKCF0aGlzLm5hbWUpIHsgcmV0dXJuOyB9XG4gICAgaWYgKCF0aGlzLl9kZWZpbml0aW9uT2J0YWluZWQpIHtcbiAgICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgICBjb25zdCBmb3JtRGVmaW5pdGlvbiA9IGF3YWl0IHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLmdldEZvcm1EZWZpbml0aW9uKHRoaXMubmFtZSk7XG4gICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2Zvcm1TdHJ1Y3R1cmUgPSBuZXcgRm9ybVN0cnVjdHVyZUFuZERhdGEoZm9ybURlZmluaXRpb24sIHRoaXMuZm9ybUNvbmZpZyk7XG4gICAgICB0aGlzLmZpZWxkcyA9IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuZmllbGRzO1xuICAgICAgdGhpcy5hY3Rpb25zID0gdGhpcy5fZm9ybVN0cnVjdHVyZS5hY3Rpb25zO1xuICAgICAgdGhpcy5zZWN0aW9ucyA9IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuc2VjdGlvbnM7XG4gICAgICB0aGlzLl9kZWZpbml0aW9uT2J0YWluZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFuRGF0YSgpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3VwcG9ydFN0YXRlKGluaXRpYWxTdGF0ZSkpIHtcbiAgICAgIGluaXRpYWxTdGF0ZSA9IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuZGVmYXVsdFN0YXRlO1xuICAgIH1cbiAgICB0aGlzLl9mb3JtU3RydWN0dXJlLmNoYW5nZVN0YXRlKGluaXRpYWxTdGF0ZSB8fCB0aGlzLl9mb3JtU3RydWN0dXJlLmRlZmF1bHRTdGF0ZSk7XG4gICAgY29uc3QgaW5wdXRGaWVsZE5hbWVzID0gT2JqZWN0LmtleXModGhpcy5pbnB1dERhdGFGaWVsZHMpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBpbnB1dEZpZWxkTmFtZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBmaWVsZENvZGUgPSBpbnB1dEZpZWxkTmFtZXNbaW5kZXhdO1xuICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHRoaXMuaW5wdXREYXRhRmllbGRzW2ZpZWxkQ29kZV07XG4gICAgICB0aGlzLnNldEZpZWxkVmFsdWUoZmllbGRDb2RlLCBmaWVsZFZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgcmVjb3JkUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLmdldERhdGEpO1xuICAgIHRoaXMuY2hlY2tFcnJvclJlY29yZFJlY2VpdmVkKHJlY29yZFJlc3BvbnNlKTtcbiAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgIHRoaXMuc3Vic2NyaWJlU2VjdGlvbkFjdGl2YXRpb24oKTtcbiAgICB0aGlzLnN1YnNjcmliZUZpZWxkc1N1YmplY3RzKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVBY3Rpb25TdWJqZWN0cygpO1xuICAgIHRoaXMuc3Vic2NyaWJlVGFibGVTdWJqZWN0cygpO1xuICAgIHRoaXMuY3VzdG9tRm9ybVN0YXJ0KCk7XG4gIH1cblxuICBjaGVja0Vycm9yUmVjb3JkUmVjZWl2ZWQocmVjb3JkUmVzcG9uc2U6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgZXJyb3IgfSA9IHJlY29yZFJlc3BvbnNlO1xuICAgIGlmICghZXJyb3IpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgdGhpcy5lcnJvckNvZGUgPSByZWNvcmRSZXNwb25zZS5lcnJvckNvZGU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSByZWNvcmRSZXNwb25zZS5lcnJvck1lc3NhZ2U7XG4gICAgdGhpcy5lcnJvckRldGFpbCA9IHJlY29yZFJlc3BvbnNlLmVycm9yRGV0YWlsO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZXJyb3JPY2N1cmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5lcnJvckNvZGUgIT09IE5PX0VSUk9SKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb3BvcnRlIG1hbmVqbyBkZSBldmVudG9zIGRlIGZvcm11bGFyaW9cbiAgICovXG5cbiAgYXN5bmMgcmVxdWVzdEZvcm1BY3Rpb24oYWN0aW9uQ29kZTogc3RyaW5nLCBhY3Rpb25TdWJqZWN0OiBhbnkgPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgYWN0aW9uRGV0YWlsID0ge1xuICAgICAgZm9ybUNvZGU6IHRoaXMubmFtZSxcbiAgICAgIGZvcm1TdWJqZWN0OiB0aGlzLmZvcm1TdWJqZWN0LFxuICAgICAgY3VycmVudE1vZGU6IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuc3RhdGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgICAgYWN0aW9uU3ViamVjdCxcbiAgICAgIHZlcnNpb246IFBBWUxPQURfVkVSU0lPTixcbiAgICAgIGZvcm1EYXRhOiB0aGlzLl9mb3JtU3RydWN0dXJlLmdldFBheWxvYWQoKSxcbiAgICAgIGltbXV0YWJsZURhdGE6IHRoaXMuX2Zvcm1TdHJ1Y3R1cmUuaW1tdXRhYmxlRGF0YSxcbiAgICB9O1xuICAgIHRoaXMuZXJyb3JDb2RlID0gTk9fRVJST1I7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmVycm9yRGV0YWlsID0gJyc7XG4gICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICBjb25zdCBmb3JtQWN0aW9uUmVzcG9uc2U6IGFueSA9IGF3YWl0IHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLmV4ZWNTZXJ2ZXJBY3Rpb24oYWN0aW9uRGV0YWlsKTtcbiAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcbiAgICBpZiAoZm9ybUFjdGlvblJlc3BvbnNlICYmIGZvcm1BY3Rpb25SZXNwb25zZS5lcnJvci5lcnJvclR5cGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdFeGNlcGNpw7NuIG5vIHNvcG9ydGFkYScpO1xuICAgIH1cbiAgICBpZiAoZm9ybUFjdGlvblJlc3BvbnNlLmhhc0Vycm9yKCkpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZm9ybUFjdGlvblJlc3BvbnNlLmVycm9yO1xuICAgICAgdGhpcy5lcnJvckNvZGUgPSBlcnJvci5lcnJvckNvZGU7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yLmVycm9yTWVzc2FnZTtcbiAgICAgIHRoaXMuZXJyb3JEZXRhaWwgPSBlcnJvci5lcnJvckRldGFpbDtcbiAgICB9XG4gICAgY29uc3QgZm9ybVJlc3BvbnNlRGF0YSA9IGZvcm1BY3Rpb25SZXNwb25zZS5nZXREYXRhKCk7XG4gICAgdGhpcy51cGRhdGVGb3JtV2l0aFNlcnZlckRhdGEoZm9ybVJlc3BvbnNlRGF0YSk7XG4gICAgcmV0dXJuIGZvcm1SZXNwb25zZURhdGE7XG4gIH1cblxuICB1cGRhdGVGb3JtV2l0aFNlcnZlckRhdGEoZm9ybUNvbnRlbnQ6IGFueSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGN1cnJlbnRNb2RlLCBmb3JtU3ViamVjdCwgYWN0aW9ucywgZmllbGRzLCByZWNvcmRUYWJsZXMsXG4gICAgICByZXR1cm5lZEZpbGUsIGltbXV0YWJsZURhdGEsIGV4dHJhSW5mbyxcbiAgICB9ID0gZm9ybUNvbnRlbnQ7XG4gICAgY3VycmVudE1vZGUgJiYgdGhpcy5jaGFuZ2VTdGF0ZShjdXJyZW50TW9kZSk7XG4gICAgaWYgKGZvcm1TdWJqZWN0KSB7IHRoaXMuZm9ybVN1YmplY3QgPSBmb3JtU3ViamVjdDsgfVxuICAgIGlmIChhY3Rpb25zICYmIGFjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBjaGFuZ2VkQWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uT2JqZWN0ID0gdGhpcy5nZXRBY3Rpb24oY2hhbmdlZEFjdGlvbi5hY3Rpb25Db2RlKTtcbiAgICAgICAgaWYgKGFjdGlvbk9iamVjdCkgeyBhY3Rpb25PYmplY3QudXBkYXRlRnJvbVNlcnZlcihjaGFuZ2VkQWN0aW9uKTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmllbGRzICYmIGZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoYW5nZWRGaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgY29uc3QgZmllbGRPYmplY3QgPSB0aGlzLmdldEZpZWxkKGNoYW5nZWRGaWVsZC5maWVsZENvZGUpO1xuICAgICAgICBpZiAoZmllbGRPYmplY3QpIHtcbiAgICAgICAgICBmaWVsZE9iamVjdC51cGRhdGVGcm9tU2VydmVyKGNoYW5nZWRGaWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlY29yZFRhYmxlcyAmJiByZWNvcmRUYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBjaGFuZ2VkVGFibGUgb2YgcmVjb3JkVGFibGVzKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZShjaGFuZ2VkVGFibGUudGFibGVDb2RlKTtcbiAgICAgICAgaWYgKHRhYmxlT2JqZWN0KSB7XG4gICAgICAgICAgdGFibGVPYmplY3QudXBkYXRlRnJvbVNlcnZlcihjaGFuZ2VkVGFibGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXR1cm5lZEZpbGUgJiYgcmV0dXJuZWRGaWxlLmZpbGUpIHtcbiAgICAgIHRoaXMuZmlsZU1nbXRTZXJ2aWNlcy5zYXZlRmlsZShyZXR1cm5lZEZpbGUuZmlsZSwgcmV0dXJuZWRGaWxlLm5hbWUsIHJldHVybmVkRmlsZS50eXBlKTtcbiAgICB9XG4gICAgdGhpcy5fZm9ybVN0cnVjdHVyZS5pbW11dGFibGVEYXRhID0gaW1tdXRhYmxlRGF0YTtcbiAgICB0aGlzLl9mb3JtU3RydWN0dXJlLmV4dHJhSW5mbyA9IGV4dHJhSW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW5lam8gZGUgZXZlbnQgaGFuZGxlcnMgcGFyYSBhY2Npb25lcyBzb2JyZSBlbCBmb3JtdWxhcmlvXG4gICAqL1xuXG4gIGFkZFNlY3Rpb25BY3RpdmF0aW9uKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCBzZWN0aW9uU2V0ID0gKEFycmF5LmlzQXJyYXkoY29kZXMpKSA/IGNvZGVzIDogKGNvZGVzID8gW2NvZGVzXSA6IFtdKTtcbiAgICBzZWN0aW9uU2V0LmZvckVhY2goKHNlY3Rpb25OYW1lKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2Zvcm1TZWN0aW9uc0FjdGl2YXRlW3NlY3Rpb25OYW1lXSkge1xuICAgICAgICB0aGlzLl9mb3JtU2VjdGlvbnNBY3RpdmF0ZVtzZWN0aW9uTmFtZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Zvcm1TZWN0aW9uc0FjdGl2YXRlW3NlY3Rpb25OYW1lXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFNlY3Rpb25JbmFjdGl2YXRpb24oY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHNlY3Rpb25TZXQgPSAoQXJyYXkuaXNBcnJheShjb2RlcykpID8gY29kZXMgOiAoY29kZXMgPyBbY29kZXNdIDogW10pO1xuICAgIHNlY3Rpb25TZXQuZm9yRWFjaCgoc2VjdGlvbk5hbWUpID0+IHtcbiAgICAgIGlmICghdGhpcy5fZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZVtzZWN0aW9uTmFtZV0pIHtcbiAgICAgICAgdGhpcy5fZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZVtzZWN0aW9uTmFtZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Zvcm1TZWN0aW9uc0luYWN0aXZhdGVbc2VjdGlvbk5hbWVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkQWN0aW9uTWV0aG9kU3RhcnQoY29kZXM6IHN0cmluZ1tdIHwgc3RyaW5nLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IGFjdGlvblNldCA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgYWN0aW9uU2V0LmZvckVhY2goKGFjdGlvbk5hbWUpID0+IHtcbiAgICAgIGlmICghdGhpcy5fZm9ybUFjdGlvbnNTdGFydFthY3Rpb25OYW1lXSkge1xuICAgICAgICB0aGlzLl9mb3JtQWN0aW9uc1N0YXJ0W2FjdGlvbk5hbWVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLl9mb3JtQWN0aW9uc1N0YXJ0W2FjdGlvbk5hbWVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkQWN0aW9uTWV0aG9kRmluaXNoKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCBhY3Rpb25TZXQgPSAoQXJyYXkuaXNBcnJheShjb2RlcykpID8gY29kZXMgOiAoY29kZXMgPyBbY29kZXNdIDogW10pO1xuICAgIGFjdGlvblNldC5mb3JFYWNoKChhY3Rpb25OYW1lKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2Zvcm1BY3Rpb25zRmluaXNoW2FjdGlvbk5hbWVdKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1BY3Rpb25zRmluaXNoW2FjdGlvbk5hbWVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLl9mb3JtQWN0aW9uc0ZpbmlzaFthY3Rpb25OYW1lXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGxhdW5jaFNlY3Rpb25BY3RpdmF0aW9uKGNvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IHNlY3Rpb25PYmplY3QgPSB0aGlzLl9mb3JtU3RydWN0dXJlLmdldFNlY3Rpb24oY29kZSk7XG4gICAgaWYgKCFzZWN0aW9uT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIGNvbnN0IGNsaWVudFNlY3Rpb25NZXRob2RzID0gdGhpcy5fZm9ybVNlY3Rpb25zQWN0aXZhdGVbY29kZV07XG4gICAgaWYgKGNsaWVudFNlY3Rpb25NZXRob2RzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNsaWVudFNlY3Rpb25NZXRob2Qgb2YgY2xpZW50U2VjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50U2VjdGlvbk1ldGhvZChzZWN0aW9uT2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBsYXVuY2hTZWN0aW9uSW5hY3RpdmF0aW9uKGNvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IHNlY3Rpb25PYmplY3QgPSB0aGlzLl9mb3JtU3RydWN0dXJlLmdldFNlY3Rpb24oY29kZSk7XG4gICAgaWYgKCFzZWN0aW9uT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIGNvbnN0IGNsaWVudFNlY3Rpb25NZXRob2RzID0gdGhpcy5fZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZVtjb2RlXTtcbiAgICBpZiAoY2xpZW50U2VjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGZvciAoY29uc3QgY2xpZW50U2VjdGlvbk1ldGhvZCBvZiBjbGllbnRTZWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjbGllbnRTZWN0aW9uTWV0aG9kKHNlY3Rpb25PYmplY3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0QWN0aW9uKGNvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IGFjdGlvbk9iamVjdCA9IHRoaXMuZ2V0QWN0aW9uKGNvZGUpO1xuICAgIGlmICghYWN0aW9uT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGFjdGlvbk9iamVjdC5zdGFydCgpO1xuICAgIGNvbnN0IGNsaWVudEFjdGlvbk1ldGhvZHMgPSB0aGlzLl9mb3JtQWN0aW9uc1N0YXJ0W2NvZGVdO1xuICAgIGlmIChjbGllbnRBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBjbGllbnRBY3Rpb25NZXRob2Qgb2YgY2xpZW50QWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjb25zdCBjb250aW51ZUFjdGlvblByb21pc2UgPSBjbGllbnRBY3Rpb25NZXRob2QoYWN0aW9uT2JqZWN0KTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjb250aW51ZUFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgY3VyciksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICBhY3Rpb25PYmplY3Quc3RvcCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRTZXJ2ZXJBY3Rpb24oYWN0aW9uT2JqZWN0KTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2VydmVyQWN0aW9uKGFjdGlvbklucHV0KSB7XG4gICAgY29uc3QgYWN0aW9uID0gKHR5cGVvZiBhY3Rpb25JbnB1dCA9PT0gJ3N0cmluZycpXG4gICAgICA/IHRoaXMuZ2V0QWN0aW9uKGFjdGlvbklucHV0KSA6IGFjdGlvbklucHV0O1xuICAgIGxldCBmaW5pc2ggPSB0cnVlO1xuICAgIGxldCBhY3Rpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmIChhY3Rpb24uYmFja2VuZCkge1xuICAgICAgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0Rm9ybUFjdGlvbihhY3Rpb24uYWN0aW9uQ29kZSk7XG4gICAgICBmaW5pc2ggPSAhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgaWYgKGZpbmlzaCkge1xuICAgICAgYXdhaXQgdGhpcy5maW5pc2hBY3Rpb24oYWN0aW9uLCBhY3Rpb25SZXN1bHQpO1xuICAgICAgYWN0aW9uLm5ld1N0YXRlICYmIHRoaXMuY2hhbmdlU3RhdGUoYWN0aW9uLm5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5QWN0aW9uU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgYWN0aW9uLnN0b3AoKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaEFjdGlvbihhY3Rpb24sIGFjdGlvblJlc3VsdCkge1xuICAgIGNvbnN0IGZpbmlzaEFjdGlvbk1ldGhvZHMgPSB0aGlzLl9mb3JtQWN0aW9uc0ZpbmlzaFthY3Rpb24uYWN0aW9uQ29kZV07XG4gICAgaWYgKGZpbmlzaEFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IGNsaWVudEFjdGlvbk1ldGhvZCBvZiBmaW5pc2hBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uTWV0aG9kKGFjdGlvbiwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgY29tcGxldGVHbG9iYWxBY3Rpb24oYWN0aW9uOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFNlcnZlckFjdGlvbihhY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbmVqYWRvcmVzIGRlIGV2ZW50b3MgcGFyYSB2YWxpZGFjaW9uZXMgc29icmUgY2FtcG9zXG4gICAqL1xuXG4gIGFkZEZpZWxkSW5wdXRWYWxpZGF0aW9uKGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCBmaWVsZFNldCA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgZmllbGRTZXQuZm9yRWFjaCgoZmllbGRDb2RlKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2ZpZWxkSW5wdXRWYWxpZGF0aW9uW2ZpZWxkQ29kZV0pIHtcbiAgICAgICAgdGhpcy5fZmllbGRJbnB1dFZhbGlkYXRpb25bZmllbGRDb2RlXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5fZmllbGRJbnB1dFZhbGlkYXRpb25bZmllbGRDb2RlXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEZpZWxkVmFsaWRhdGlvblN0YXJ0KGNvZGVzOiBzdHJpbmdbXSB8IHN0cmluZywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCBmaWVsZFNldCA9IChBcnJheS5pc0FycmF5KGNvZGVzKSkgPyBjb2RlcyA6IChjb2RlcyA/IFtjb2Rlc10gOiBbXSk7XG4gICAgZmllbGRTZXQuZm9yRWFjaCgoZmllbGRDb2RlKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNTdGFydFtmaWVsZENvZGVdKSB7XG4gICAgICAgIHRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNTdGFydFtmaWVsZENvZGVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLl9maWVsZFZhbGlkYXRpb25zU3RhcnRbZmllbGRDb2RlXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEZpZWxkVmFsaWRhdGlvbkZpbmlzaChjb2Rlczogc3RyaW5nW10gfCBzdHJpbmcsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgZmllbGRTZXQgPSAoQXJyYXkuaXNBcnJheShjb2RlcykpID8gY29kZXMgOiAoY29kZXMgPyBbY29kZXNdIDogW10pO1xuICAgIGZpZWxkU2V0LmZvckVhY2goKGZpZWxkQ29kZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9maWVsZFZhbGlkYXRpb25zRmluaXNoW2ZpZWxkQ29kZV0pIHtcbiAgICAgICAgdGhpcy5fZmllbGRWYWxpZGF0aW9uc0ZpbmlzaFtmaWVsZENvZGVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLl9maWVsZFZhbGlkYXRpb25zRmluaXNoW2ZpZWxkQ29kZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdGFydEZpZWxkSW5wdXRWYWxpZGF0aW9uKGZpZWxkQ29kZTogc3RyaW5nLCBpbnRyaW5zaWNWYWxpZGF0aW9uOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IGZpZWxkVG9WYWxpZGF0ZSA9IHRoaXMuZ2V0RmllbGQoZmllbGRDb2RlKTtcbiAgICBpZiAoIWZpZWxkVG9WYWxpZGF0ZSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBmaWVsZFRvVmFsaWRhdGUucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IHZhbGlkYXRpb25DYWxsYmFja3MgPSB0aGlzLl9maWVsZElucHV0VmFsaWRhdGlvbltmaWVsZENvZGVdO1xuICAgIGlmICh2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICBjb25zdCBjbGllbnRWYWxpZGF0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbk1ldGhvZCBvZiB2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICAgIGNvbnN0IGNvbnRpbnVlVmFsaWRhdGlvblByb21pc2UgPSB2YWxpZGF0aW9uTWV0aG9kKGZpZWxkVG9WYWxpZGF0ZSk7XG4gICAgICAgIGNsaWVudFZhbGlkYXRpb25Qcm9taXNlcy5wdXNoKGNvbnRpbnVlVmFsaWRhdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50VmFsaWRhdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydEZpZWxkVmFsaWRhdGlvbihmaWVsZENvZGU6IHN0cmluZywgaW50cmluc2ljVmFsaWRhdGlvbjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBmaWVsZFRvVmFsaWRhdGUgPSB0aGlzLmdldEZpZWxkKGZpZWxkQ29kZSk7XG4gICAgaWYgKCFmaWVsZFRvVmFsaWRhdGUgfHwgIWludHJpbnNpY1ZhbGlkYXRpb24pIHsgcmV0dXJuOyB9XG4gICAgZmllbGRUb1ZhbGlkYXRlLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCB2YWxpZGF0aW9uQ2FsbGJhY2tzID0gdGhpcy5fZmllbGRWYWxpZGF0aW9uc1N0YXJ0W2ZpZWxkQ29kZV07XG4gICAgaWYgKHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgIGNvbnN0IGNsaWVudFZhbGlkYXRpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uTWV0aG9kIG9mIHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgICAgY29uc3QgY2xpZW50VmFsaWRhdGlvblByb21pc2UgPSB2YWxpZGF0aW9uTWV0aG9kKGZpZWxkVG9WYWxpZGF0ZSk7XG4gICAgICAgIGNsaWVudFZhbGlkYXRpb25Qcm9taXNlcy5wdXNoKGNsaWVudFZhbGlkYXRpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudFZhbGlkYXRpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50VmFsaWRhdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlVmFsaWRhdGlvbiA9IGNsaWVudFZhbGlkYXRpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRTZXJ2ZXJGaWVsZFZhbGlkYXRpb24oZmllbGRUb1ZhbGlkYXRlKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2VydmVyRmllbGRWYWxpZGF0aW9uKGlucHV0RmllbGQ6IHN0cmluZyB8IEZpZWxkRGVzY3JpcHRvcikge1xuICAgIGNvbnN0IGZpZWxkT2JqID0gKHR5cGVvZiBpbnB1dEZpZWxkID09PSAnc3RyaW5nJylcbiAgICAgID8gdGhpcy5nZXRGaWVsZChpbnB1dEZpZWxkKSA6IGlucHV0RmllbGQ7XG4gICAgbGV0IGZpbmlzaCA9IHRydWU7XG4gICAgbGV0IHZhbGlkYXRpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmIChmaWVsZE9iai5iYWNrZW5kKSB7XG4gICAgICBmaWVsZE9iai52YWxpZGF0aW5nID0gdHJ1ZTtcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihmb3JtQWN0aW9ucy52YWxpZGF0ZSwgZmllbGRPYmouZmllbGRDb2RlKTtcbiAgICAgIGZpbmlzaCA9ICF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBpZiAoZmluaXNoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbmlzaEZpZWxkVmFsaWRhdGlvbihmaWVsZE9iaiwgdmFsaWRhdGlvblJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpZWxkT2JqLnNldEVycm9yQ29kZSh0aGlzLmVycm9yQ29kZSk7XG4gICAgICBmaWVsZE9iai5zZXRFcnJvck1lc3NhZ2UodGhpcy5lcnJvck1lc3NhZ2UpO1xuICAgICAgdGhpcy5kaXNwbGF5VmFsaWRhdGlvblNlcnZlckVycm9yKCk7XG4gICAgfVxuICAgIGZpZWxkT2JqLnZhbGlkYXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaEZpZWxkVmFsaWRhdGlvbihmaWVsZE9iamVjdDogYW55LCB2YWxpZGF0aW9uUmVzdWx0OiBib29sZWFuKSB7XG4gICAgY29uc3QgdmFsaWRhdGlvbkNhbGxiYWNrcyA9IHRoaXMuX2ZpZWxkVmFsaWRhdGlvbnNGaW5pc2hbZmllbGRPYmplY3QuZmllbGRDb2RlXTtcbiAgICBpZiAodmFsaWRhdGlvbkNhbGxiYWNrcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbk1ldGhvZCBvZiB2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2godmFsaWRhdGlvbk1ldGhvZChmaWVsZE9iamVjdCwgdmFsaWRhdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNvbnRpbnVlRmllbGRWYWxpZGF0aW9uKGZpZWxkQ29kZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRTZXJ2ZXJGaWVsZFZhbGlkYXRpb24oZmllbGRDb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW5lamFkb3JlcyBkZSBldmVudG9zIHBhcmEgYWNjaW9uZXMgc29icmUgVGFibGFzXG4gICAqL1xuXG4gIGFkZFRhYmxlQWN0aW9uU3RhcnQoY29kZTogc3RyaW5nLCBhY3Rpb25Db2RlOiBzdHJpbmcsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKGNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5saW5lQWN0aW9uT2JqZWN0ID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uKGFjdGlvbkNvZGUpO1xuICAgIGlmICghaW5saW5lQWN0aW9uT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnMgPSBudWxsO1xuICAgIGlmICh0aGlzLl90YWJsZUFjdGlvbnNTdGFydFtjb2RlXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zU3RhcnRbY29kZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHt9O1xuICAgICAgdGhpcy5fdGFibGVBY3Rpb25zU3RhcnRbY29kZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIGlmICghdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gPSBbXTtcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICB9XG5cbiAgYWRkVGFibGVBY3Rpb25GaW5pc2goY29kZTogc3RyaW5nLCBhY3Rpb25Db2RlOiBzdHJpbmcsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKGNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5saW5lQWN0aW9uT2JqZWN0ID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uKGFjdGlvbkNvZGUpO1xuICAgIGlmICghaW5saW5lQWN0aW9uT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnMgPSBudWxsO1xuICAgIGlmICh0aGlzLl90YWJsZUFjdGlvbnNGaW5pc2hbY29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlQWN0aW9uc0ZpbmlzaFtjb2RlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0ge307XG4gICAgICB0aGlzLl90YWJsZUFjdGlvbnNGaW5pc2hbY29kZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIGlmICghdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gPSBbXTtcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICB9XG5cbiAgYWRkVGFibGVTZWxlY3Rpb25TdGFydChjb2RlOiBzdHJpbmcsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKGNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVycyA9IG51bGw7XG4gICAgaWYgKHRoaXMuX3RhYmxlU2VsZWN0aW9uc1N0YXJ0W2NvZGVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZVNlbGVjdGlvbnNTdGFydFtjb2RlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gW107XG4gICAgICB0aGlzLl90YWJsZVNlbGVjdGlvbnNTdGFydFtjb2RlXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICB9XG5cbiAgYWRkVGFibGVTZWxlY3Rpb25GaW5pc2goY29kZTogc3RyaW5nLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZShjb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnMgPSBudWxsO1xuICAgIGlmICh0aGlzLl90YWJsZVNlbGVjdGlvbnNGaW5pc2hbY29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlU2VsZWN0aW9uc0ZpbmlzaFtjb2RlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gW107XG4gICAgICB0aGlzLl90YWJsZVNlbGVjdGlvbnNGaW5pc2hbY29kZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIHRhYmxlRXZlbnRIYW5kbGVycy5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgfVxuXG4gIGFkZFRhYmxlR2V0RGF0YVN0YXJ0KGNvZGU6IHN0cmluZywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUoY29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgdGFibGVFdmVudEhhbmRsZXJzID0gbnVsbDtcbiAgICBpZiAodGhpcy5fdGFibGVHZXREYXRhU3RhcnRbY29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlR2V0RGF0YVN0YXJ0W2NvZGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSBbXTtcbiAgICAgIHRoaXMuX3RhYmxlR2V0RGF0YVN0YXJ0W2NvZGVdID0gdGFibGVFdmVudEhhbmRsZXJzO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnMucHVzaChjYWxsYmFja01ldGhvZCk7XG4gIH1cblxuICBhZGRUYWJsZUdldERhdGFGaW5pc2goY29kZTogc3RyaW5nLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZShjb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnMgPSBudWxsO1xuICAgIGlmICh0aGlzLl90YWJsZUdldERhdGFGaW5pc2hbY29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlR2V0RGF0YUZpbmlzaFtjb2RlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0ge307XG4gICAgICB0aGlzLl90YWJsZUdldERhdGFGaW5pc2hbY29kZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIHRhYmxlRXZlbnRIYW5kbGVyc1tHRVRfREFUQV9BQ1RJT05dID0gY2FsbGJhY2tNZXRob2Q7XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlR2xvYmFsQWN0aW9uKHRhYmxlQWN0aW9uRXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkV2ZW50O1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZUNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbkNvZGUpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgYWN0aW9uID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uKGFjdGlvbkNvZGUpO1xuICAgIGlmICghYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IHRhYmxlQWN0aW9uRGV0YWlsID0ge1xuICAgICAgdGFibGVPYmplY3QsXG4gICAgICBhY3Rpb24sXG4gICAgICB0YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgIH07XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zU3RhcnRbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2UgPSB0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFRhYmxlU2VydmVyR2xvYmFsQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZXJ2ZXJHbG9iYWxBY3Rpb24odGFibGVBY3Rpb25EZXRhaWw6IGFueSkge1xuICAgIGNvbnN0IHsgdGFibGVPYmplY3QsIGFjdGlvbiwgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgdGFibGVPYmplY3QucHV0T25XYWl0KCk7XG4gICAgbGV0IGZpbmlzaCA9IHRydWU7XG4gICAgbGV0IGFjdGlvblJlc3VsdCA9IG51bGw7XG4gICAgaWYgKGFjdGlvbi5iYWNrZW5kKSB7XG4gICAgICBjb25zdCBhY3Rpb25TdWJqZWN0ID0ge1xuICAgICAgICB0YWJsZUNvZGUsXG4gICAgICAgIGFjdGlvblR5cGU6IEdMT0JBTF9BQ1RJT04sXG4gICAgICAgIGFjdGlvbkNvZGVcbiAgICAgIH07XG4gICAgICBhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihmb3JtQWN0aW9ucy50YWJsZUFjdGlvbiwgYWN0aW9uU3ViamVjdCk7XG4gICAgICBmaW5pc2ggPSAhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgaWYgKGZpbmlzaCkge1xuICAgICAgYXdhaXQgdGhpcy5maW5pc2hUYWJsZUdsb2JhbEFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KTtcbiAgICAgIGFjdGlvbi5uZXdTdGF0ZSAmJiB0aGlzLmNoYW5nZVN0YXRlKGFjdGlvbi5uZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgdGFibGVPYmplY3QuZnJlZVdhaXRpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFRhYmxlR2xvYmFsQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsOiBhbnksIGFjdGlvblJlc3VsdCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUFjdGlvbnNGaW5pc2hbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2godGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVBY3Rpb24odGFibGVBY3Rpb25FdmVudDogYW55KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUsIGFjdGlvbkRldGFpbCB9ID0gdGFibGVBY3Rpb25FdmVudDtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVDb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb25Db2RlKSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IHsgcmVjb3JkSWQsIHJlY29yZERhdGEgfSA9IGFjdGlvbkRldGFpbDtcbiAgICBjb25zdCBhY3Rpb24gPSB0YWJsZU9iamVjdC5nZXRBY3Rpb24oYWN0aW9uQ29kZSk7XG4gICAgaWYgKCFhY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgdGFibGVBY3Rpb25EZXRhaWwgPSB7XG4gICAgICB0YWJsZU9iamVjdCxcbiAgICAgIGFjdGlvbixcbiAgICAgIHRhYmxlQ29kZSxcbiAgICAgIGFjdGlvbkNvZGUsXG4gICAgICByZWNvcmRJZCxcbiAgICAgIHJlY29yZERhdGFcbiAgICB9O1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlQWN0aW9uc1N0YXJ0W3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gOiBudWxsO1xuICAgIGlmICh0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlID0gdGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwpO1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNsaWVudEFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgY3VyciksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRUYWJsZVNlcnZlckFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCk7XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VydmVyQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsOiBhbnkpIHtcbiAgICBjb25zdCB7IHRhYmxlT2JqZWN0LCBhY3Rpb24sIHRhYmxlQ29kZSwgYWN0aW9uQ29kZSwgcmVjb3JkSWQsIHJlY29yZERhdGEgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICB0YWJsZU9iamVjdC5wdXRPbldhaXQoKTtcbiAgICBsZXQgZmluaXNoID0gdHJ1ZTtcbiAgICBsZXQgYWN0aW9uUmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoYWN0aW9uLmJhY2tlbmQpIHtcbiAgICAgIGNvbnN0IGFjdGlvblN1YmplY3QgPSB7XG4gICAgICAgIHRhYmxlQ29kZSxcbiAgICAgICAgYWN0aW9uVHlwZTogdGhpcy5mb3JtQ29uZmlnLnRhYmxlQWN0aW9ucy5pbmxpbmUsXG4gICAgICAgIGFjdGlvbkNvZGUsXG4gICAgICAgIHRhYmxlUmVjb3JkSWQ6IHJlY29yZElkLFxuICAgICAgICB0YWJsZVJlY29yZERhdGE6IHJlY29yZERhdGFcbiAgICAgIH07XG4gICAgICBhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihmb3JtQWN0aW9ucy50YWJsZUFjdGlvbiwgYWN0aW9uU3ViamVjdCk7XG4gICAgICBmaW5pc2ggPSAhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgaWYgKGZpbmlzaCkge1xuICAgICAgdGhpcy5maW5pc2hUYWJsZUFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KTtcbiAgICAgIGFjdGlvbi5uZXdTdGF0ZSAmJiB0aGlzLmNoYW5nZVN0YXRlKGFjdGlvbi5uZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgdGFibGVPYmplY3QuZnJlZVdhaXRpbmcoKTtcbiAgfVxuXG4gIGNvbXBsZXRlSW5saW5lQWN0aW9uKHRhYmxlQWN0aW9uOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFRhYmxlU2VydmVyQWN0aW9uKHRhYmxlQWN0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFRhYmxlQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsOiBhbnksIGFjdGlvblJlc3VsdCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZUFjdGlvbnNGaW5pc2hbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2godGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVSZWNvcmRTZWxlY3Rpb24odGFibGVBY3Rpb25FdmVudDogYW55KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkRldGFpbCB9ID0gdGFibGVBY3Rpb25FdmVudDtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVDb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IHsgcmVjb3JkSWQsIHJlY29yZERhdGEgfSA9IGFjdGlvbkRldGFpbDtcbiAgICBjb25zdCB0YWJsZVNlbGVjdGlvbkRldGFpbCA9IHtcbiAgICAgIHRhYmxlT2JqZWN0LFxuICAgICAgdGFibGVDb2RlLFxuICAgICAgcmVjb3JkSWQsXG4gICAgICByZWNvcmREYXRhXG4gICAgfTtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLl90YWJsZVNlbGVjdGlvbnNTdGFydFt0YWJsZUNvZGVdO1xuICAgIGlmICh0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlU2VsZWN0aW9uTWV0aG9kIG9mIHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlID0gdGFibGVTZWxlY3Rpb25NZXRob2QodGFibGVTZWxlY3Rpb25EZXRhaWwpO1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNsaWVudEFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgY3VyciksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRUYWJsZVNlcnZlclJlY29yZFNlbGVjdGlvbih0YWJsZVNlbGVjdGlvbkRldGFpbCk7XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VydmVyUmVjb3JkU2VsZWN0aW9uKHRhYmxlU2VsZWN0aW9uRGV0YWlsOiBhbnkpIHtcbiAgICBjb25zdCB7IHRhYmxlT2JqZWN0LCB0YWJsZUNvZGUsIHJlY29yZElkLCByZWNvcmREYXRhIH0gPSB0YWJsZVNlbGVjdGlvbkRldGFpbDtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIHRhYmxlT2JqZWN0LnB1dE9uV2FpdCgpO1xuICAgIGxldCBmaW5pc2ggPSB0cnVlO1xuICAgIGxldCBhY3Rpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmICh0YWJsZU9iamVjdC5zZWxlY3Rpb25CYWNrZW5kKSB7XG4gICAgICBjb25zdCBhY3Rpb25TdWJqZWN0OiBhbnkgPSB7XG4gICAgICAgIHRhYmxlQ29kZSxcbiAgICAgICAgYWN0aW9uVHlwZTogdGhpcy5mb3JtQ29uZmlnLnRhYmxlQWN0aW9ucy5yb3dTZWxlY3Rpb24sXG4gICAgICAgIGFjdGlvbkNvZGU6IG51bGwsXG4gICAgICAgIHRhYmxlUmVjb3JkSWQ6IHJlY29yZElkLFxuICAgICAgICB0YWJsZVJlY29yZERhdGE6IHJlY29yZERhdGFcbiAgICAgIH07XG4gICAgICBhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihmb3JtQWN0aW9ucy50YWJsZUFjdGlvbiwgYWN0aW9uU3ViamVjdCk7XG4gICAgICBmaW5pc2ggPSAhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgaWYgKGZpbmlzaCkge1xuICAgICAgdGhpcy5maW5pc2hUYWJsZVJlY29yZFNlbGVjdGlvbih0YWJsZVNlbGVjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5VGFibGVTZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICB0YWJsZU9iamVjdC5mcmVlV2FpdGluZygpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoVGFibGVSZWNvcmRTZWxlY3Rpb24odGFibGVTZWxlY3Rpb25EZXRhaWw6IGFueSwgYWN0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUgfSA9IHRhYmxlU2VsZWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlU2VsZWN0aW9uc0ZpbmlzaFt0YWJsZUNvZGVdO1xuICAgIGlmICh0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlU2VsZWN0aW9uTWV0aG9kIG9mIHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKHRhYmxlU2VsZWN0aW9uTWV0aG9kKHRhYmxlU2VsZWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VsZWN0aW9uQWN0aW9uKHRhYmxlQWN0aW9uRXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlLCBhY3Rpb25EZXRhaWwgfSA9IHRhYmxlQWN0aW9uRXZlbnQ7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlQ29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCB8fCAhYWN0aW9uQ29kZSkgeyByZXR1cm47IH1cbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCB7IHNlbGVjdGVkUmVjb3JkcyB9ID0gYWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IGFjdGlvbiA9IHRhYmxlT2JqZWN0LmdldEFjdGlvbihhY3Rpb25Db2RlKTtcbiAgICBpZiAoIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICBjb25zdCB0YWJsZUFjdGlvbkRldGFpbCA9IHtcbiAgICAgIHRhYmxlT2JqZWN0LFxuICAgICAgYWN0aW9uLFxuICAgICAgdGFibGVDb2RlLFxuICAgICAgYWN0aW9uQ29kZSxcbiAgICAgIHNlbGVjdGVkUmVjb3Jkc1xuICAgIH07XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVBY3Rpb25zU3RhcnRbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2UgPSB0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFRhYmxlU2VydmVyU2VsZWN0aW9uQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZXJ2ZXJTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25EZXRhaWw6IGFueSkge1xuICAgIGNvbnN0IHsgdGFibGVPYmplY3QsIGFjdGlvbiwgdGFibGVDb2RlLCBhY3Rpb25Db2RlLCBzZWxlY3RlZFJlY29yZHMgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICB0YWJsZU9iamVjdC5wdXRPbldhaXQoKTtcbiAgICBsZXQgZmluaXNoID0gdHJ1ZTtcbiAgICBsZXQgYWN0aW9uUmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoYWN0aW9uLmJhY2tlbmQpIHtcbiAgICAgIGNvbnN0IGFjdGlvblN1YmplY3QgPSB7XG4gICAgICAgIHRhYmxlQ29kZSxcbiAgICAgICAgYWN0aW9uVHlwZTogdGhpcy5mb3JtQ29uZmlnLnRhYmxlQWN0aW9ucy5zZWxlY3Rpb24sXG4gICAgICAgIGFjdGlvbkNvZGUsXG4gICAgICAgIHNlbGVjdGVkUmVjb3Jkc1xuICAgICAgfTtcbiAgICAgIGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLnRhYmxlQWN0aW9uLCBhY3Rpb25TdWJqZWN0KTtcbiAgICAgIGZpbmlzaCA9ICF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBpZiAoZmluaXNoKSB7XG4gICAgICB0aGlzLmZpbmlzaFRhYmxlU2VsZWN0aW9uQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpO1xuICAgICAgYWN0aW9uLm5ld1N0YXRlICYmIHRoaXMuY2hhbmdlU3RhdGUoYWN0aW9uLm5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5VGFibGVTZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICB0YWJsZU9iamVjdC5mcmVlV2FpdGluZygpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoVGFibGVTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25EZXRhaWw6IGFueSwgYWN0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlQWN0aW9uc0ZpbmlzaFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaCh0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZUdldERhdGEodGFibGVBY3Rpb25FdmVudDogYW55KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUgfSA9IHRhYmxlQWN0aW9uRXZlbnQ7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlQ29kZSk7XG4gICAgY29uc3QgdGFibGVBY3Rpb25EZXRhaWwgPSB7XG4gICAgICB0YWJsZU9iamVjdCxcbiAgICAgIHRhYmxlQ29kZVxuICAgIH07XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy5fdGFibGVHZXREYXRhU3RhcnRbdGFibGVDb2RlXTtcbiAgICBpZiAodGFibGVFdmVudEhhbmRsZXJzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZSA9IHRhYmxlQWN0aW9uTWV0aG9kKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjbGllbnRBY3Rpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZUFjdGlvbiA9IGNsaWVudEFjdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIGN1cnIpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVBY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0VGFibGVTZXJ2ZXJHZXREYXRhKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZXJ2ZXJHZXREYXRhKHRhYmxlQWN0aW9uRGV0YWlsOiBhbnkpIHtcbiAgICBjb25zdCB7IHRhYmxlT2JqZWN0LCB0YWJsZUNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIHRhYmxlT2JqZWN0LnB1dE9uV2FpdCgpO1xuICAgIGNvbnN0IGFjdGlvblN1YmplY3QgPSB7IHRhYmxlQ29kZSB9O1xuICAgIGNvbnN0IGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihmb3JtQWN0aW9ucy5nZXRUYWJsZURhdGEsIGFjdGlvblN1YmplY3QpO1xuICAgIGlmICh0aGlzLmVycm9yT2NjdXJlZCgpKSB7XG4gICAgICB0aGlzLmRpc3BsYXlUYWJsZVNlcnZlckVycm9yKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmluaXNoVGFibGVHZXREYXRhKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpO1xuICAgIH1cbiAgICB0YWJsZU9iamVjdC5mcmVlV2FpdGluZygpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoVGFibGVHZXREYXRhKHRhYmxlQWN0aW9uRGV0YWlsOiBhbnksIGFjdGlvblJlc3VsdCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCB0YWJsZUFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMuX3RhYmxlQWN0aW9uc0ZpbmlzaFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW3RhYmxlQWN0aW9uQ29kZV0gOiBudWxsO1xuICAgIGlmICh0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKHRhYmxlQWN0aW9uTWV0aG9kKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBjaGVja1NlY3Rpb25SZXF1aXJlZEZpZWxkcyhzZWN0aW9uQ29kZTogc3RyaW5nLCByZXFGaWVsZE1lc3NhZ2U/KSB7XG4gICAgdGhpcy5jbGVhbkVycm9yRmllbGRzKG51bGwsIHNlY3Rpb25Db2RlKTtcbiAgICBjb25zdCByZXF1aXJlZEZpZWxkTWVzc2FnZSA9IHJlcUZpZWxkTWVzc2FnZSA/PyB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnJlcXVpcmVkRmllbGRcbiAgICBjb25zdCBudW1FcnJvcnMgPSB0aGlzLnRhZ0ZpZWxkc1dpdGhFcnJvcih0aGlzLmdldFJlcXVpcmVkRW1wdHlGaWVsZHMobnVsbCxcbiAgICAgIHNlY3Rpb25Db2RlKSwgbnVsbCwgcmVxdWlyZWRGaWVsZE1lc3NhZ2UpO1xuICAgIHJldHVybiAobnVtRXJyb3JzID09PSAwKTtcbiAgfVxuXG4gIHZhbGlkYXRlU2VjdGlvbkNvbnNpc3RlbmN5KHNlY3Rpb25Db2RlOiBzdHJpbmcsIHJlcUZpZWxkTWVzc2FnZT8pIHtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCBjb21wbGV0ZUZpZWxkcyA9IHRoaXMuY2hlY2tTZWN0aW9uUmVxdWlyZWRGaWVsZHMoc2VjdGlvbkNvZGUsIHJlcUZpZWxkTWVzc2FnZSk7XG4gICAgaWYgKCFjb21wbGV0ZUZpZWxkcykge1xuICAgICAgdGhpcy5zZXRFcnJvcih0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnR5cGVXYXJuaW5nLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnZhbGlkYXRpb25UaXRsZSxcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy5yZXF1aXJlZEZpZWxkcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB2YWxpZGF0aW9uRXJyb3IgPSBmYWxzZTtcbiAgICBjb25zdCByZXF1aXJlZEVtcHR5RmllbGRzID0gdGhpcy5nZXRSZXF1aXJlZEVtcHR5RmllbGRzKG51bGwsIHNlY3Rpb25Db2RlKTtcbiAgICBpZiAocmVxdWlyZWRFbXB0eUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRFcnJvcih0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnR5cGVXYXJuaW5nLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnZhbGlkYXRpb25UaXRsZSxcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy5yZXF1aXJlZEZpZWxkcyk7XG4gICAgICB0aGlzLnRhZ0ZpZWxkc1dpdGhFcnJvcihyZXF1aXJlZEVtcHR5RmllbGRzLCBudWxsLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnJlcXVpcmVkRmllbGQpO1xuICAgICAgZm9yIChjb25zdCBmaWVsZENvZGUgb2YgcmVxdWlyZWRFbXB0eUZpZWxkcykge1xuICAgICAgICBjb25zdCByZXF1aXJlZEVtcHR5RmllbGQgPSB0aGlzLmdldEZpZWxkKGZpZWxkQ29kZSk7XG4gICAgICAgIHJlcXVpcmVkRW1wdHlGaWVsZD8uZm9jdXMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkYXRpb25Jc3N1ZUZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzV2l0aFZhbGlkYXRpb25Jc3N1ZXMobnVsbCxcbiAgICAgIHNlY3Rpb25Db2RlKTtcbiAgICBpZiAoIXZhbGlkYXRpb25FcnJvciAmJiB2YWxpZGF0aW9uSXNzdWVGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgdmFsaWRhdGlvbkVycm9yID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0RXJyb3IodGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy50eXBlV2FybmluZyxcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy52YWxpZGF0aW9uVGl0bGUsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMudmFsaWRhdGlvbkZpZWxkcyk7XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkQ29kZSBvZiB2YWxpZGF0aW9uSXNzdWVGaWVsZHMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbklzc3VlRmllbGQgPSB0aGlzLmdldEZpZWxkKGZpZWxkQ29kZSk7XG4gICAgICAgIHZhbGlkYXRpb25Jc3N1ZUZpZWxkLmZvY3VzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yO1xuICB9XG5cbiAgY29weVRhYmxlUmVjb3JkVG9GaWVsZHModGFibGVPYmo6IGFueSwgbWFwcGluZ1RhYmxlOiBhbnkgPSBudWxsKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlT2JqLnRhYmxlQ29kZSk7XG4gICAgY29uc3QgdGFibGVSZWNvcmQgPSB0YWJsZU9iamVjdC5nZXRUYWJsZVJlY29yZCh0YWJsZU9iai5yZWNvcmRJZCk7XG4gICAgY29uc3QgY29sdW1uTmFtZXMgPSB0YWJsZU9iamVjdC5jb2x1bW5OYW1lcztcbiAgICBmb3IgKGNvbnN0IGNvbHVtbk5hbWUgb2YgY29sdW1uTmFtZXMpIHtcbiAgICAgIGNvbnN0IGNvbHVtblZhbHVlID0gdGFibGVSZWNvcmQuZ2V0RmllbGRWYWx1ZShjb2x1bW5OYW1lKSA/PyAnJztcbiAgICAgIGNvbnN0IGZpZWxkQ29kZSA9IG1hcHBpbmdUYWJsZT8uW2NvbHVtbk5hbWVdID8/IGNvbHVtbk5hbWU7XG4gICAgICB0aGlzLnNldEZpZWxkVmFsdWUoZmllbGRDb2RlLCBjb2x1bW5WYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=
|