tuain-ng-forms-lib 0.12.20 → 0.12.21
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 +128 -17
- package/bundles/tuain-ng-forms-lib.umd.js.map +1 -1
- package/esm2015/lib/classes/forms/field.js +85 -12
- package/esm2015/lib/classes/forms/form.js +9 -1
- package/esm2015/lib/components/forms/basic-form.js +16 -6
- package/fesm2015/tuain-ng-forms-lib.js +107 -16
- package/fesm2015/tuain-ng-forms-lib.js.map +1 -1
- package/lib/classes/forms/field.d.ts +26 -3
- package/lib/classes/forms/form.d.ts +2 -0
- package/lib/components/forms/basic-form.d.ts +4 -2
- package/package.json +1 -1
- package/tuain-ng-forms-lib.metadata.json +1 -1
|
@@ -99,6 +99,8 @@ export class BasicFormComponent {
|
|
|
99
99
|
setFieldValue(fieldCode, fieldValue) { return this.formStructure.setFieldValue(fieldCode, fieldValue); }
|
|
100
100
|
setFieldRequired(fieldCode, required) { return this.formStructure.setFieldRequired(fieldCode, required); }
|
|
101
101
|
setFieldErrorMessage(fieldCode, errorMessage) { return this.formStructure.setFieldErrorMessage(fieldCode, errorMessage); }
|
|
102
|
+
setFieldError(code, message, type = 'error') { return this.formStructure.setFieldError(code, message, type); }
|
|
103
|
+
setFieldIntrinsicErrorMessage(code, message) { return this.formStructure.setFieldIntrinsicErrorMessage(code, message); }
|
|
102
104
|
setFieldOptions(fieldCode, optionsArray, idAttribute, nameAttribute) {
|
|
103
105
|
return this.formStructure.setFieldOptions(fieldCode, optionsArray, idAttribute, nameAttribute);
|
|
104
106
|
}
|
|
@@ -291,8 +293,14 @@ export class BasicFormComponent {
|
|
|
291
293
|
const formFields = this.formStructure.getFields();
|
|
292
294
|
if (Array.isArray(formFields)) {
|
|
293
295
|
formFields.forEach(field => {
|
|
294
|
-
field.editionFinish.subscribe(
|
|
295
|
-
|
|
296
|
+
field.editionFinish.subscribe(event => {
|
|
297
|
+
const { code, intrinsicValidation } = event;
|
|
298
|
+
this.startFieldValidation(code, intrinsicValidation);
|
|
299
|
+
});
|
|
300
|
+
field.editionPartial.subscribe(event => {
|
|
301
|
+
const { code, intrinsicValidation } = event;
|
|
302
|
+
this.startFieldInputValidation(code, intrinsicValidation);
|
|
303
|
+
});
|
|
296
304
|
field.detailRequest.subscribe(code => this.showFieldInfo(code));
|
|
297
305
|
});
|
|
298
306
|
}
|
|
@@ -603,7 +611,7 @@ export class BasicFormComponent {
|
|
|
603
611
|
this.fieldValidationsFinish[fieldCode].push(callbackMethod);
|
|
604
612
|
});
|
|
605
613
|
}
|
|
606
|
-
startFieldInputValidation(fieldCode) {
|
|
614
|
+
startFieldInputValidation(fieldCode, intrinsicValidation = true) {
|
|
607
615
|
return __awaiter(this, void 0, void 0, function* () {
|
|
608
616
|
const fieldToValidate = this.getFieldObject(fieldCode);
|
|
609
617
|
if (!fieldToValidate) {
|
|
@@ -622,10 +630,10 @@ export class BasicFormComponent {
|
|
|
622
630
|
}
|
|
623
631
|
});
|
|
624
632
|
}
|
|
625
|
-
startFieldValidation(fieldCode) {
|
|
633
|
+
startFieldValidation(fieldCode, intrinsicValidation = true) {
|
|
626
634
|
return __awaiter(this, void 0, void 0, function* () {
|
|
627
635
|
const fieldToValidate = this.getField(fieldCode);
|
|
628
|
-
if (!fieldToValidate) {
|
|
636
|
+
if (!fieldToValidate || !intrinsicValidation) {
|
|
629
637
|
return;
|
|
630
638
|
}
|
|
631
639
|
fieldToValidate.setErrorMessage('');
|
|
@@ -653,6 +661,7 @@ export class BasicFormComponent {
|
|
|
653
661
|
let finish = true;
|
|
654
662
|
let validationResult = null;
|
|
655
663
|
if (fieldObj.backend) {
|
|
664
|
+
fieldObj.validating = true;
|
|
656
665
|
validationResult = yield this
|
|
657
666
|
.requestFormAction(componentConstants.FORMACTION_VALIDATE, fieldObj.fieldCode);
|
|
658
667
|
finish = !this.errorOccured();
|
|
@@ -665,6 +674,7 @@ export class BasicFormComponent {
|
|
|
665
674
|
fieldObj.setErrorMessage(this.errorMessage);
|
|
666
675
|
this.displayValidationServerError();
|
|
667
676
|
}
|
|
677
|
+
fieldObj.validating = false;
|
|
668
678
|
});
|
|
669
679
|
}
|
|
670
680
|
finishFieldValidation(fieldObject, validationResult) {
|
|
@@ -1333,4 +1343,4 @@ BasicFormComponent.ctorParameters = () => [
|
|
|
1333
1343
|
{ type: LibEventManagerService },
|
|
1334
1344
|
{ type: LibFileManagementService }
|
|
1335
1345
|
];
|
|
1336
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvYmFzaWMtZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV4RSxNQUFNLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQztBQUM1QyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUM7QUFDL0IsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDO0FBQy9CLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQztBQUVsQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDekIsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDO0FBQ25DLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQztBQUM5QixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDM0IsTUFBTSxzQkFBc0IsR0FBRyxpQkFBaUIsQ0FBQztBQUtqRCxNQUFNLE9BQU8sa0JBQWtCO0lBb0M3QixZQUNZLGtCQUF5QyxFQUN6QyxhQUFxQyxFQUNyQyxnQkFBMEM7UUFGMUMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF1QjtRQUN6QyxrQkFBYSxHQUFiLGFBQWEsQ0FBd0I7UUFDckMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEwQjtRQWxDdEQsY0FBUyxHQUFH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c0JBQXNCLENBQUMsQ0FBQztTQUM5QztRQUNELE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVGLElBQUkscUJBQXFCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNwQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLEVBQ3JELGtCQUFrQixDQUFDLDBCQUEwQixFQUFFLGtCQUFrQixDQUFDLDJCQUEyQixDQUFDLENBQUM7U0FDbEc7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDOzs7WUFyeENGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsMkJBQTJCO2FBQ3RDOzs7WUFsQlEscUJBQXFCO1lBQ3JCLHNCQUFzQjtZQUN0Qix3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1TdHJ1Y3R1cmVBbmREYXRhIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3Jtcy9mb3JtJztcbmltcG9ydCB7IExpYkZvcm1NYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm0tbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IExpYkV2ZW50TWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ldmVudC1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGliRmlsZU1hbmFnZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmlsZS1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgY29tcG9uZW50Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3Jtcy9mb3JtLmNvbnN0YW50cyc7XG5cbmNvbnN0IFBBWUxPQURfVkVSU0lPTiA9ICdUVUFJTkVYQ0hBTkdFXzEuMCc7XG5jb25zdCBJTkxJTkVfQUNUSU9OID0gJ0lOTElORSc7XG5jb25zdCBHTE9CQUxfQUNUSU9OID0gJ0dMT0JBTCc7XG5jb25zdCBHRVRfREFUQV9BQ1RJT04gPSAnR0VUREFUQSc7XG5cbmNvbnN0IEZPUk1fQ09ERSA9ICdmb3JtJztcbmNvbnN0IEZPUk1fU1VCSkVDVCA9ICdmb3JtU3ViamVjdCc7XG5jb25zdCBPUklHSU5fUEFSQU0gPSAnb3JpZ2luJztcbmNvbnN0IFNUQVRFX1BBUkFNID0gJ21vZGUnO1xuY29uc3QgUkVRVUlSRURfRklFTERfTUVTU0FHRSA9ICdDYW1wbyByZXF1ZXJpZG8nO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGU6IGA8bmctY29udGVudD48L25nLWNvbnRlbnQ+YFxufSlcbmV4cG9ydCBjbGFzcyBCYXNpY0Zvcm1Db21wb25lbnQge1xuICBuYW1lOiBzdHJpbmc7XG4gIF9mb3JtUm91dGU6IHN0cmluZztcbiAgZm9ybVN1YmplY3Q6IHN0cmluZztcbiAgX2Vycm9yVHlwZTogJyc7XG4gIGVycm9yQ29kZSA9ICcnO1xuICBlcnJvck1lc3NhZ2UgPSAnJztcbiAgZXJyb3JEZXRhaWwgPSAnJztcblxuICBmb3JtU3RydWN0dXJlOiBGb3JtU3RydWN0dXJlQW5kRGF0YSA9IG51bGw7XG4gIHRyYW5zaXRpb25Ub2tlbiA9IG51bGw7XG4gIGlucHV0RGF0YUZpZWxkcyA9IFtdO1xuICBleHRyYURhdGE6IGFueSA9IG51bGw7XG5cbiAgY29tcG9uZW50Q29uc3RhbnRzOiBhbnkgPSBjb21wb25lbnRDb25zdGFudHM7XG4gIGRlZmluaXRpb25PYnRhaW5lZCA9IGZhbHNlO1xuICBmb3JtVmlzaWJsZSA9IGZhbHNlO1xuICBpblNlcnZlclByb2Nlc3MgPSBmYWxzZTtcblxuICBmb3JtU2VjdGlvbnNBY3RpdmF0ZSA9IHt9O1xuICBmb3JtU2VjdGlvbnNJbmFjdGl2YXRlID0ge307XG4gIGZvcm1BY3Rpb25zU3RhcnQgPSB7fTtcbiAgZm9ybUFjdGlvbnNGaW5pc2ggPSB7fTtcbiAgZmllbGRJbnB1dFZhbGlkYXRpb24gPSB7fTtcbiAgZmllbGRWYWxpZGF0aW9uc1N0YXJ0ID0ge307XG4gIGZpZWxkVmFsaWRhdGlvbnNGaW5pc2ggPSB7fTtcbiAgLy8gQ2FsbGJhY2sgZGUgYWNjaW9uZXMgZGUgdGFibGFzXG4gIHRhYmxlU2VsZWN0aW9uc1N0YXJ0ID0ge307XG4gIHRhYmxlU2VsZWN0aW9uc0ZpbmlzaCA9IHt9O1xuICB0YWJsZUFjdGlvbnNTdGFydCA9IHt9O1xuICB0YWJsZUFjdGlvbnNGaW5pc2ggPSB7fTtcbiAgdGFibGVHZXREYXRhU3RhcnQgPSB7fTtcbiAgdGFibGVHZXREYXRhRmluaXNoID0ge307XG5cbiAgcHJvdGVjdGVkIF9ldmVudEVtaXRlcjogTGliRXZlbnRNYW5hZ2VyU2VydmljZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZm9ybU1hbmFnZXJTZXJ2aWNlOiBMaWJGb3JtTWFuYWdlclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIF9ldmVudE1hbmFnZXI6IExpYkV2ZW50TWFuYWdlclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGZpbGVNZ210U2VydmljZXM6IExpYkZpbGVNYW5hZ2VtZW50U2VydmljZSkge1xuICAgIHRoaXMuX2V2ZW50RW1pdGVyID0gdGhpcy5fZXZlbnRNYW5hZ2VyO1xuICAgIHRoaXMuY2xlYW5TdGFydCgpO1xuICAgIHRoaXMuY3VzdG9tUHJlUHJvY2Vzc2luZygpO1xuICB9XG5cbiAgY2xlYW5TdGFydCgpIHtcbiAgICB0aGlzLl9lcnJvclR5cGUgPSAnJztcbiAgICB0aGlzLmVycm9yQ29kZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5lcnJvckRldGFpbCA9ICcnO1xuICAgIHRoaXMuZm9ybVN0cnVjdHVyZSA9IG51bGw7XG4gICAgdGhpcy50cmFuc2l0aW9uVG9rZW4gPSBudWxsO1xuICAgIHRoaXMuaW5wdXREYXRhRmllbGRzID0gW107XG4gICAgdGhpcy5kZWZpbml0aW9uT2J0YWluZWQgPSBmYWxzZTtcbiAgICAvLyBTZSBsaW1waWFuIGxvcyBtYW5lamFkb3JlcyBkZSBldmVudG9zXG4gICAgdGhpcy5mb3JtVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuaW5TZXJ2ZXJQcm9jZXNzID0gZmFsc2U7XG4gICAgdGhpcy5mb3JtU2VjdGlvbnNBY3RpdmF0ZSA9IHt9O1xuICAgIHRoaXMuZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZSA9IHt9O1xuICAgIHRoaXMuZm9ybUFjdGlvbnNTdGFydCA9IHt9O1xuICAgIHRoaXMuZm9ybUFjdGlvbnNGaW5pc2ggPSB7fTtcbiAgICB0aGlzLmZpZWxkSW5wdXRWYWxpZGF0aW9uID0ge307XG4gICAgdGhpcy5maWVsZFZhbGlkYXRpb25zU3RhcnQgPSB7fTtcbiAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnNGaW5pc2ggPSB7fTtcbiAgICB0aGlzLnRhYmxlU2VsZWN0aW9uc1N0YXJ0ID0ge307XG4gICAgdGhpcy50YWJsZVNlbGVjdGlvbnNGaW5pc2ggPSB7fTtcbiAgICB0aGlzLnRhYmxlQWN0aW9uc1N0YXJ0ID0ge307XG4gICAgdGhpcy50YWJsZUFjdGlvbnNGaW5pc2ggPSB7fTtcbiAgICB0aGlzLnRhYmxlR2V0RGF0YVN0YXJ0ID0ge307XG4gICAgdGhpcy50YWJsZUdldERhdGFGaW5pc2ggPSB7fTtcbiAgfVxuXG4gIGdldCBjdXJyZW50U3RhdGUoKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc3RhdGU7IH1cbiAgc2V0IGN1cnJlbnRTdGF0ZShzdGF0ZSkgeyB0aGlzLmZvcm1TdHJ1Y3R1cmUuY2hhbmdlU3RhdGUoc3RhdGUpOyB9XG4gIGdldCBjdXJyZW50TW9kZSgpIHsgcmV0dXJuIHRoaXMuY3VycmVudFN0YXRlOyB9XG4gIGdldCBpbW11dGFibGVEYXRhKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmltbXV0YWJsZURhdGEgfVxuICBnZXQgZXh0cmFJbmZvKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmV4dHJhSW5mbyB9XG5cbiAgLy8gTcOpdG9kb3MgUGFzcy10aHJvdWdoIGhhY2lhIGVsIGNvbnRlbmlkbyB5IGVzdHJ1Y3R1cmEgZGVsIGZvcm11bGFyaW9cbiAgc3VwcG9ydFN0YXRlKHN0YXRlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc3VwcG9ydFN0YXRlKHN0YXRlKTsgfVxuICBzdXBwb3J0TW9kZShzdGF0ZSkgeyByZXR1cm4gdGhpcy5zdXBwb3J0U3RhdGUoc3RhdGUpOyB9XG4gIGdldFRpdGxlKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnRpdGxlOyB9XG4gIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcpIHsgdGhpcy5mb3JtU3RydWN0dXJlLnRpdGxlID0gdGl0bGU7IH1cbiAgZ2V0SW1tdXRhYmxlRWxlbWVudChuYW1lKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0SW1tdXRhYmxlRWxlbWVudChuYW1lKTsgfVxuICBnZXRFeHRyYUluZm8obmFtZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldEV4dHJhSW5mbyhuYW1lKTsgfVxuICBjbGVhbkRhdGEoKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuY2xlYW5EYXRhKCk7IH1cbiAgZ2V0RmllbGRzKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldEZpZWxkcygpOyB9XG4gIGdldEZpZWxkTmFtZXMoKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0RmllbGROYW1lcygpOyB9XG4gIGdldEZpZWxkT2JqZWN0KGVsZW1lbnRJZCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldEZpZWxkT2JqZWN0KGVsZW1lbnRJZCk7IH1cbiAgZ2V0RmllbGQoZmllbGRDb2RlKSB7IHJldHVybiB0aGlzLmdldEZpZWxkT2JqZWN0KGZpZWxkQ29kZSk7IH1cbiAgZW5hYmxlRmllbGQoZmllbGRDb2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZW5hYmxlRmllbGQoZmllbGRDb2RlKTsgfVxuICBkaXNhYmxlRmllbGQoZmllbGRDb2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZGlzYWJsZUZpZWxkKGZpZWxkQ29kZSk7IH1cbiAgZ2V0RmllbGRWYWx1ZShmaWVsZENvZGUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRGaWVsZFZhbHVlKGZpZWxkQ29kZSk7IH1cbiAgZ2V0RmllbGRzVmFsdWVzKGZpZWxkQ29kZXNBcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldEZpZWxkc1ZhbHVlcyhmaWVsZENvZGVzQXJyYXkpOyB9XG4gIGdldEZpZWxkT3B0aW9ucyhmaWVsZENvZGUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRGaWVsZE9wdGlvbnMoZmllbGRDb2RlKTsgfVxuICBzZXRGaWVsZFZhbHVlKGZpZWxkQ29kZSwgZmllbGRWYWx1ZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNldEZpZWxkVmFsdWUoZmllbGRDb2RlLCBmaWVsZFZhbHVlKTsgfVxuICBzZXRGaWVsZFJlcXVpcmVkKGZpZWxkQ29kZSwgcmVxdWlyZWQ6IGJvb2xlYW4pIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5zZXRGaWVsZFJlcXVpcmVkKGZpZWxkQ29kZSwgcmVxdWlyZWQpOyB9XG4gIHNldEZpZWxkRXJyb3JNZXNzYWdlKGZpZWxkQ29kZSwgZXJyb3JNZXNzYWdlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2V0RmllbGRFcnJvck1lc3NhZ2UoZmllbGRDb2RlLCBlcnJvck1lc3NhZ2UpOyB9XG4gIHNldEZpZWxkT3B0aW9ucyhmaWVsZENvZGUsIG9wdGlvbnNBcnJheSwgaWRBdHRyaWJ1dGUsIG5hbWVBdHRyaWJ1dGUpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNldEZpZWxkT3B0aW9ucyhmaWVsZENvZGUsIG9wdGlvbnNBcnJheSwgaWRBdHRyaWJ1dGUsIG5hbWVBdHRyaWJ1dGUpO1xuICB9XG4gIGdldEZpZWxkU2V0KGZpbHRlckZ1bmM/LCBmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldEZpZWxkU2V0KGZpbHRlckZ1bmMsIGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cbiAgYXBwbHlQcm9jZXNzVG9GaWVsZFNldChwcm9jZXNzRnVuYywgZmllbGRBcnJheT8sIHNlY3Rpb25Db2RlPywgc3ViU2VjdGlvbkNvZGU/KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5hcHBseVByb2Nlc3NUb0ZpZWxkU2V0KHByb2Nlc3NGdW5jLCBmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGFwcGx5UHJvY2Vzc1RvQWxsRmllbGRzKHByb2Nlc3NGdW5jKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuYXBwbHlQcm9jZXNzVG9GaWVsZFNldChwcm9jZXNzRnVuYyk7IH1cbiAgY2xlYW5GaWVsZHMoZmllbGRBcnJheT8sIHNlY3Rpb25Db2RlPywgc3ViU2VjdGlvbkNvZGU/KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5jbGVhbkZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGdldFJlcXVpcmVkRmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlPywgc3ViU2VjdGlvbkNvZGU/KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRSZXF1aXJlZEZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGdldFJlcXVpcmVkRW1wdHlGaWVsZHMoZmllbGRBcnJheT8sIHNlY3Rpb25Db2RlPywgc3ViU2VjdGlvbkNvZGU/KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRSZXF1aXJlZEVtcHR5RmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cbiAgZ2V0Q2hhbmdlZEZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldENoYW5nZWRGaWVsZHMoZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBnZXRGaWVsZHNXaXRoVmFsaWRhdGlvbklzc3VlcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldEZpZWxkc1dpdGhWYWxpZGF0aW9uSXNzdWVzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cbiAgdGFnRmllbGRzV2l0aEVycm9yKGVycm9yTWVzc2FnZSwgZmllbGRBcnJheT8sIHNlY3Rpb25Db2RlPywgc3ViU2VjdGlvbkNvZGU/KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS50YWdGaWVsZHNXaXRoRXJyb3IoZXJyb3JNZXNzYWdlLCBmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGNsZWFuRXJyb3JGaWVsZHMoZmllbGRBcnJheT8sIHNlY3Rpb25Db2RlPywgc3ViU2VjdGlvbkNvZGU/KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5jbGVhbkVycm9yRmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cbiAgc2hvd0xhYmVsRmllbGRzKGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2hvd0xhYmVsRmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cbiAgaGlkZUxhYmVsRmllbGRzKGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuaGlkZUxhYmVsRmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cbiAgZW5hYmxlRmllbGRzKGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZW5hYmxlRmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cbiAgZGlzYWJsZUZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmRpc2FibGVGaWVsZHMoZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBlbmFibGVFZGl0RmllbGRzKGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZW5hYmxlRWRpdEZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGRpc2FibGVFZGl0RmllbGRzKGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZGlzYWJsZUVkaXRGaWVsZHMoZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBzaG93RmllbGRzKGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2hvd0ZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGhpZGVGaWVsZHMoZmllbGRBcnJheT8sIHNlY3Rpb25Db2RlPywgc3ViU2VjdGlvbkNvZGU/KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5oaWRlRmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cblxuICBnZXRIZWFkZXJBY3Rpb25zKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldEhlYWRlckFjdGlvbnMoKTsgfVxuICBnZXRBY3Rpb25PYmplY3QoZWxlbWVudElkKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0QWN0aW9uT2JqZWN0KGVsZW1lbnRJZCk7IH1cbiAgZ2V0QWN0aW9uKGFjdGlvbkNvZGUpIHsgcmV0dXJuIHRoaXMuZ2V0QWN0aW9uT2JqZWN0KGFjdGlvbkNvZGUpOyB9XG4gIGdldEFjdGlvbkRlZmluaXRpb24oYWN0aW9uQ29kZSkgeyByZXR1cm4gdGhpcy5nZXRBY3Rpb25PYmplY3QoYWN0aW9uQ29kZSk7IH1cbiAgc2hvd0FjdGlvbihhY3Rpb25Db2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2hvd0FjdGlvbihhY3Rpb25Db2RlKTsgfVxuICBoaWRlQWN0aW9uKGFjdGlvbkNvZGUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5oaWRlQWN0aW9uKGFjdGlvbkNvZGUpOyB9XG4gIHNob3dBY3Rpb25zKGFjdGlvbkFycmF5KSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2hvd0FjdGlvbnMoYWN0aW9uQXJyYXkpOyB9XG4gIGhpZGVBY3Rpb25zKGFjdGlvbkFycmF5KSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuaGlkZUFjdGlvbnMoYWN0aW9uQXJyYXkpOyB9XG4gIGVuYWJsZUFjdGlvbihhY3Rpb25Db2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZW5hYmxlQWN0aW9uKGFjdGlvbkNvZGUpOyB9XG4gIGRpc2FibGVBY3Rpb24oYWN0aW9uQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmRpc2FibGVBY3Rpb24oYWN0aW9uQ29kZSk7IH1cbiAgZW5hYmxlQWN0aW9ucyhhY3Rpb25BcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmVuYWJsZUFjdGlvbnMoYWN0aW9uQXJyYXkpOyB9XG4gIGRpc2FibGVBY3Rpb25zKGFjdGlvbkFycmF5KSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZGlzYWJsZUFjdGlvbnMoYWN0aW9uQXJyYXkpOyB9XG5cbiAgZ2V0U3RhdGVzKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldFN0YXRlcygpOyB9XG4gIGdldFNlY3Rpb25zKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldFNlY3Rpb25zKCk7IH1cbiAgZ2V0U2VjdGlvbihzZWN0aW9uQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldFNlY3Rpb24oc2VjdGlvbkNvZGUpOyB9XG4gIGFjdGl2YXRlU2VjdGlvbihzZWN0aW9uQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmFjdGl2YXRlU2VjdGlvbihzZWN0aW9uQ29kZSk7IH1cbiAgZ2V0U3ViU2VjdGlvbihzZWN0aW9uQ29kZSwgc3Vic2VjdGlvbkNvZGUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRTdWJTZWN0aW9uKHNlY3Rpb25Db2RlLCBzdWJzZWN0aW9uQ29kZSk7IH1cbiAgbnVtU2VjdGlvbnMoKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUubnVtU2VjdGlvbnMoKTsgfVxuICBnZXRTZWN0aW9uc1RpdGxlcygpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRTZWN0aW9uc1RpdGxlcygpOyB9XG4gIGdldFNlY3Rpb25PYmplY3QoZWxlbWVudElkKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0U2VjdGlvbk9iamVjdChlbGVtZW50SWQpOyB9XG4gIHNob3dTZWN0aW9uKHNlY3Rpb25Db2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2hvd1NlY3Rpb24oc2VjdGlvbkNvZGUpOyB9XG4gIGhpZGVTZWN0aW9uKHNlY3Rpb25Db2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuaGlkZVNlY3Rpb24oc2VjdGlvbkNvZGUpOyB9XG4gIHNob3dTZWN0aW9ucyhzZWN0aW9uQXJyYXkpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5zaG93U2VjdGlvbnMoc2VjdGlvbkFycmF5KTsgfVxuICBoaWRlU2VjdGlvbnMoc2VjdGlvbkFycmF5KSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuaGlkZVNlY3Rpb25zKHNlY3Rpb25BcnJheSk7IH1cbiAgc2hvd1N1YlNlY3Rpb24oc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2hvd1N1YlNlY3Rpb24oc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTsgfVxuICBoaWRlU3ViU2VjdGlvbihzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5oaWRlU3ViU2VjdGlvbihzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpOyB9XG4gIHNob3dTdWJTZWN0aW9ucyhzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkFycmF5KSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2hvd1N1YlNlY3Rpb25zKHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQXJyYXkpOyB9XG4gIGhpZGVTdWJTZWN0aW9ucyhzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkFycmF5KSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuaGlkZVN1YlNlY3Rpb25zKHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQXJyYXkpOyB9XG5cbiAgZ2V0VGFibGVzKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldFRhYmxlcygpOyB9XG4gIGdldFRhYmxlT2JqZWN0KGVsZW1lbnRJZCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldFRhYmxlT2JqZWN0KGVsZW1lbnRJZCk7IH1cbiAgZ2V0VGFibGUodGFibGVOYW1lKSB7IHJldHVybiB0aGlzLmdldFRhYmxlT2JqZWN0KHRhYmxlTmFtZSk7IH1cbiAgc2hvd1RhYmxlKHRhYmxlTmFtZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dUYWJsZSh0YWJsZU5hbWUpOyB9XG4gIGhpZGVUYWJsZSh0YWJsZU5hbWUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5oaWRlVGFibGUodGFibGVOYW1lKTsgfVxuICBzaG93VGFibGVzKHRhYmxlQXJyYXkpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5zaG93VGFibGVzKHRhYmxlQXJyYXkpOyB9XG4gIGhpZGVUYWJsZXModGFibGVBcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmhpZGVUYWJsZXModGFibGVBcnJheSk7IH1cbiAgY2xlYW5UYWJsZSh0YWJsZU5hbWUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5jbGVhblRhYmxlKHRhYmxlTmFtZSk7IH1cbiAgZ2V0VGFibGVSZWNvcmQodGFibGVOYW1lLCByZWNvcmRJZCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldFRhYmxlUmVjb3JkKHRhYmxlTmFtZSwgcmVjb3JkSWQpOyB9XG5cbiAgY3VzdG9tUHJlUHJvY2Vzc2luZygpIHsgfVxuICBjdXN0b21Gb3JtU3RhcnQoKSB7IH1cbiAgZGlzcGxheUFjdGlvblNlcnZlckVycm9yKCkgeyB9XG4gIGRpc3BsYXlWYWxpZGF0aW9uU2VydmVyRXJyb3IoKSB7IH1cbiAgZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKSB7IH1cbiAgc2hvd0ZpZWxkSW5mbyhmaWVsZENvZGU6IHN0cmluZykgeyB9XG4gIHNob3dNb2RhbERpYWxvZyh0aXRsZSwgYm9keSwgb3B0aW9ucywgY2FsbGJhY2s/LCBwYXJhbXM/KSB7IH1cbiAgb3BlblVwbG9hZERpYWxvZyh0aXRsZSwgYm9keSwgb3B0aW9ucywgY2FsbGJhY2s/LCBwYXJhbXM/KSB7IH1cblxuICBzdWJzY3JpYmVBcHBFdmVudChldmVudE5hbWUsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5fZXZlbnRFbWl0ZXIuc3Vic2NyaWJlKGV2ZW50TmFtZSwgY2FsbGJhY2spO1xuICB9XG5cbiAgZ29Ub1BhZ2UobmF2aWdhdGlvbkFycmF5LCBwcmVkZWZpbmVkRmllbGRzLCBvcHRpb25zID0gbnVsbCkge1xuICAgIGxldCBvcmlnaW4gPSBudWxsO1xuICAgIGNvbnN0IGNsZWFuU3RhY2sgPSBvcHRpb25zPy5jbGVhblN0YWNrID8/IGZhbHNlO1xuICAgIGNvbnN0IHBhcmFtcyA9IFtdO1xuICAgIHRoaXMuY3VycmVudFN0YXRlICYmIHBhcmFtcy5wdXNoKHRoaXMuY3VycmVudFN0YXRlKTtcbiAgICB0aGlzLmZvcm1TdWJqZWN0ICYmIHBhcmFtcy5wdXNoKHRoaXMuZm9ybVN1YmplY3QpO1xuICAgIGlmICghY2xlYW5TdGFjaykge1xuICAgICAgb3JpZ2luID0ge1xuICAgICAgICBjb2RlOiB0aGlzLm5hbWUsXG4gICAgICAgIHVybDogdGhpcy5fZm9ybVJvdXRlLFxuICAgICAgICBwYXJhbXMsXG4gICAgICAgIHRva2VuOiB0aGlzLnRyYW5zaXRpb25Ub2tlbixcbiAgICAgICAgcHJlZGVmaW5lZEZpZWxkczogdGhpcy5pbnB1dERhdGFGaWVsZHNcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldCA9IHtcbiAgICAgIHVybDogbmF2aWdhdGlvbkFycmF5Py5bMF0sXG4gICAgICBwYXJhbXM6IG5hdmlnYXRpb25BcnJheS5zcGxpY2UoMSkgPz8gW10sXG4gICAgICBwcmVkZWZpbmVkRmllbGRzLFxuICAgIH07XG4gICAgdGhpcy5mb3JtTWFuYWdlclNlcnZpY2UuY2hhbmdlRm9ybShvcmlnaW4sIHRhcmdldCk7XG4gIH1cblxuICBnb1RvTmV3UGFnZShuYXYsIGZsZHMpIHsgcmV0dXJuIHRoaXMuZ29Ub1BhZ2UobmF2LCBmbGRzLCB7IGNsZWFuU3RhY2s6IHRydWUgfSk7IH1cbiAgZ29Ub1N1YlBhZ2UobmF2LCBmbGRzKSB7IHJldHVybiB0aGlzLmdvVG9QYWdlKG5hdiwgZmxkcywgeyBjbGVhblN0YWNrOiBmYWxzZSB9KTsgfVxuICBjYW5Hb0JhY2soKSB7IHJldHVybiB0aGlzLnRyYW5zaXRpb25Ub2tlbiAhPT0gbnVsbCB9XG4gIGdvQmFjaygpIHsgcmV0dXJuIHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLmNoYW5nZVByZXZpb3VzRm9ybSh0aGlzLnRyYW5zaXRpb25Ub2tlbik7IH1cbiAgZ29CYWNrRm9ybSgpIHsgcmV0dXJuIHRoaXMuZ29CYWNrKCk7IH1cbiAgZ2V0T3JpZ2luRGV0YWlsKCkgeyByZXR1cm4gdGhpcy5mb3JtTWFuYWdlclNlcnZpY2UuZ2V0T3JpZ2luSW5mbyh0aGlzLnRyYW5zaXRpb25Ub2tlbik7IH1cblxuICBzZXRFcnJvcihlcnJvclR5cGUsIGVycm9yTWVzc2FnZSwgZXJyb3JEZXRhaWwpIHtcbiAgICB0aGlzLl9lcnJvclR5cGUgPSBlcnJvclR5cGUgfHwgJyc7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UgfHwgJyc7XG4gICAgdGhpcy5lcnJvckRldGFpbCA9IGVycm9yRGV0YWlsIHx8ICcnO1xuICB9XG5cbiAgZ2V0IGZvcm1NYW5hZ2VyKCkgeyByZXR1cm4gdGhpczsgfVxuICByZXNldEVycm9yKCkgeyB0aGlzLnNldEVycm9yKG51bGwsIG51bGwsIG51bGwpOyB9XG4gIGdldEVycm9yVHlwZSgpIHsgcmV0dXJuIHRoaXMuX2Vycm9yVHlwZTsgfVxuICBnZXRFcnJvck1lc3NhZ2UoKSB7IHJldHVybiB0aGlzLmVycm9yTWVzc2FnZTsgfVxuICBnZXRFcnJvckRldGFpbCgpIHsgcmV0dXJuIHRoaXMuZXJyb3JEZXRhaWw7IH1cbiAgZ2V0RXJyb3JDb2RlKCkgeyByZXR1cm4gdGhpcy5fZXJyb3JUeXBlOyB9XG5cbiAgZ2V0IGZvcm1Sb3V0ZSgpIHsgcmV0dXJuIHRoaXMuX2Zvcm1Sb3V0ZTsgfVxuICBzZXQgZm9ybVJvdXRlKHJvdXRlKSB7IHRoaXMuX2Zvcm1Sb3V0ZSA9IHJvdXRlOyB9XG4gIGRlZmluZUZvcm1Db2RlKG5hbWUpIHsgdGhpcy5uYW1lID0gbmFtZTsgfVxuICBnZXRDdXJyZW50U3RhdGUoKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc3RhdGU7IH1cbiAgZ2V0Q3VycmVudE1vZGUoKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc3RhdGU7IH1cblxuICBnZXQgZm9ybUNvZGUoKSB7IHJldHVybiB0aGlzLm5hbWU7IH1cbiAgc2V0IGZvcm1Db2RlKG5hbWUpIHsgdGhpcy5uYW1lID0gbmFtZTsgfVxuXG4gIGdldEZvcm1QYXJhbWV0ZXIobmFtZSkge1xuICAgIHJldHVybiAodGhpcy5leHRyYURhdGEgJiYgbmFtZSAmJiB0aGlzLmV4dHJhRGF0YVtuYW1lXSkgPyB0aGlzLmV4dHJhRGF0YVtuYW1lXSA6IG51bGw7XG4gIH1cblxuICBnZXRTdWJqZWN0KCkgeyByZXR1cm4gdGhpcy5mb3JtU3ViamVjdDsgfVxuICBnZXRmb3JtU3ViamVjdCgpIHsgcmV0dXJuIHRoaXMuZ2V0U3ViamVjdCgpOyB9XG5cbiAgcHJlb2Nlc3NJbnB1dFBhcmFtcyhwYXJhbXMpIHtcbiAgICBjb25zdCBhbGxQYXJhbXMgPSBPYmplY3Qua2V5cyhwYXJhbXMgPz8ge30pO1xuICAgIGlmICghYWxsUGFyYW1zIHx8ICFBcnJheS5pc0FycmF5KGFsbFBhcmFtcykgfHwgYWxsUGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmV4dHJhRGF0YSA9IFtdO1xuICAgIGZvciAoY29uc3QgcGFyYW1OYW1lIG9mIGFsbFBhcmFtcykge1xuICAgICAgdGhpcy5leHRyYURhdGFbcGFyYW1OYW1lXSA9IHBhcmFtc1twYXJhbU5hbWVdLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGNvbnN0IGZvcm1OYW1lID0gdGhpcy5leHRyYURhdGE/LltGT1JNX0NPREVdID8/IHRoaXMubmFtZTtcbiAgICBpZiAoZm9ybU5hbWUgIT09IHRoaXMubmFtZSkge1xuICAgICAgdGhpcy5jbGVhblN0YXJ0KCk7XG4gICAgICB0aGlzLm5hbWUgPSBmb3JtTmFtZTtcbiAgICB9XG4gICAgdGhpcy5mb3JtU3ViamVjdCA9IHRoaXMuZXh0cmFEYXRhPy5bRk9STV9TVUJKRUNUXSA/PyBudWxsO1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHRoaXMuZXh0cmFEYXRhW1NUQVRFX1BBUkFNXTtcbiAgICB0aGlzLnRyYW5zaXRpb25Ub2tlbiA9IHRoaXMuZXh0cmFEYXRhW09SSUdJTl9QQVJBTV0gPz8gbnVsbDtcbiAgICB0aGlzLmlucHV0RGF0YUZpZWxkcyA9IHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLmdldElucHV0RGF0YSh0aGlzLnRyYW5zaXRpb25Ub2tlbikgPz8gW107XG4gICAgaWYgKCF0aGlzLnRyYW5zaXRpb25Ub2tlbikge1xuICAgICAgdGhpcy5mb3JtTWFuYWdlclNlcnZpY2UuY2xlYW5TdGFjaygpO1xuICAgIH1cbiAgICByZXR1cm4gaW5pdGlhbFN0YXRlO1xuICB9XG5cbiAgc3Vic2NyaWJlU2VjdGlvbkFjdGl2YXRpb24oKSB7XG4gICAgY29uc3QgZm9ybVNlY3Rpb25zID0gdGhpcy5mb3JtU3RydWN0dXJlLmdldFNlY3Rpb25zKCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybVNlY3Rpb25zKSkge1xuICAgICAgZm9ybVNlY3Rpb25zLmZvckVhY2goc2VjdGlvbiA9PiB7XG4gICAgICAgIHNlY3Rpb24uYWN0aXZhdGlvbi5zdWJzY3JpYmUoY29kZSA9PiB0aGlzLmxhdW5jaFNlY3Rpb25BY3RpdmF0aW9uKGNvZGUpKTtcbiAgICAgICAgc2VjdGlvbi5pbmFjdGl2YXRpb24uc3Vic2NyaWJlKGNvZGUgPT4gdGhpcy5sYXVuY2hTZWN0aW9uSW5hY3RpdmF0aW9uKGNvZGUpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZUZpZWxkc1N1YmplY3RzKCkge1xuICAgIGNvbnN0IGZvcm1GaWVsZHMgPSB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0RmllbGRzKCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybUZpZWxkcykpIHtcbiAgICAgIGZvcm1GaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgIGZpZWxkLmVkaXRpb25GaW5pc2guc3Vic2NyaWJlKGNvZGUgPT4gdGhpcy5zdGFydEZpZWxkVmFsaWRhdGlvbihjb2RlKSk7XG4gICAgICAgIGZpZWxkLmVkaXRpb25QYXJ0aWFsLnN1YnNjcmliZShjb2RlID0+IHRoaXMuc3RhcnRGaWVsZElucHV0VmFsaWRhdGlvbihjb2RlKSk7XG4gICAgICAgIGZpZWxkLmRldGFpbFJlcXVlc3Quc3Vic2NyaWJlKGNvZGUgPT4gdGhpcy5zaG93RmllbGRJbmZvKGNvZGUpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZUFjdGlvblN1YmplY3RzKCkge1xuICAgIGNvbnN0IGZvcm1BY3Rpb25zID0gdGhpcy5mb3JtU3RydWN0dXJlLmdldEFjdGlvbnMoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JtQWN0aW9ucykpIHtcbiAgICAgIGZvcm1BY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICAgICAgYWN0aW9uLmFjdGlvbkFjdGl2YXRlZC5zdWJzY3JpYmUoY29kZSA9PiB0aGlzLnN0YXJ0QWN0aW9uKGNvZGUpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZVRhYmxlU3ViamVjdHMoKSB7XG4gICAgY29uc3QgZm9ybVRhYmxlcyA9IHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRUYWJsZXMoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JtVGFibGVzKSkge1xuICAgICAgZm9ybVRhYmxlcy5mb3JFYWNoKHRhYmxlID0+IHtcbiAgICAgICAgdGFibGUuaW5saW5lQWN0aW9uVHJpZ2dlci5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zdGFydFRhYmxlQWN0aW9uKGV2ZW50KSk7XG4gICAgICAgIHRhYmxlLmdsb2JhbEFjdGlvblRyaWdnZXIuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc3RhcnRUYWJsZUdsb2JhbEFjdGlvbihldmVudCkpO1xuICAgICAgICB0YWJsZS5yZWNvcmRTZWxlY3Rpb25UcmlnZ2VyLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnN0YXJ0VGFibGVSZWNvcmRTZWxlY3Rpb24oZXZlbnQpKTtcbiAgICAgICAgdGFibGUuc2VsZWN0aW9uQWN0aW9uVHJpZ2dlci5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zdGFydFRhYmxlU2VsZWN0aW9uQWN0aW9uKGV2ZW50KSk7XG4gICAgICAgIHRhYmxlLmdldERhdGFUcmlnZ2VyLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnN0YXJ0VGFibGVHZXREYXRhKGV2ZW50KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmb3JtSW5pdChwYXJhbXMpIHtcbiAgICBsZXQgaW5pdGlhbFN0YXRlID0gdGhpcy5wcmVvY2Vzc0lucHV0UGFyYW1zKHBhcmFtcyk7XG4gICAgaWYgKCF0aGlzLm5hbWUpIHsgcmV0dXJuOyB9XG4gICAgaWYgKCF0aGlzLmRlZmluaXRpb25PYnRhaW5lZCkge1xuICAgICAgdGhpcy5pblNlcnZlclByb2Nlc3MgPSB0cnVlO1xuICAgICAgY29uc3QgZm9ybURlZmluaXRpb24gPSBhd2FpdCB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZS5nZXRGb3JtRGVmaW5pdGlvbih0aGlzLm5hbWUpO1xuICAgICAgdGhpcy5pblNlcnZlclByb2Nlc3MgPSBmYWxzZTtcbiAgICAgIHRoaXMuZm9ybVN0cnVjdHVyZSA9IG5ldyBGb3JtU3RydWN0dXJlQW5kRGF0YShmb3JtRGVmaW5pdGlvbik7XG4gICAgICB0aGlzLmRlZmluaXRpb25PYnRhaW5lZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYW5EYXRhKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zdXBwb3J0U3RhdGUoaW5pdGlhbFN0YXRlKSkge1xuICAgICAgaW5pdGlhbFN0YXRlID0gdGhpcy5mb3JtU3RydWN0dXJlLmRlZmF1bHRTdGF0ZTtcbiAgICB9XG4gICAgdGhpcy5mb3JtU3RydWN0dXJlLmNoYW5nZVN0YXRlKGluaXRpYWxTdGF0ZSB8fCB0aGlzLmZvcm1TdHJ1Y3R1cmUuZGVmYXVsdFN0YXRlKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmlucHV0RGF0YUZpZWxkcykpIHtcbiAgICAgIGZvciAoY29uc3QgaW5wdXRGaWVsZERhdGEgb2YgdGhpcy5pbnB1dERhdGFGaWVsZHMpIHtcbiAgICAgICAgY29uc3QgeyBmaWVsZENvZGUsIGZpZWxkVmFsdWUgfSA9IGlucHV0RmllbGREYXRhO1xuICAgICAgICBpZiAoZmllbGRDb2RlKSB7XG4gICAgICAgICAgdGhpcy5zZXRGaWVsZFZhbHVlKGZpZWxkQ29kZSwgZmllbGRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmllbGRDb2RlcyA9IE9iamVjdC5rZXlzKHRoaXMuaW5wdXREYXRhRmllbGRzID8/IHt9KTtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBmaWVsZENvZGVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBmaWVsZENvZGUgPSBmaWVsZENvZGVzW2luZGV4XTtcbiAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHRoaXMuaW5wdXREYXRhRmllbGRzW2ZpZWxkQ29kZV07XG4gICAgICAgIHRoaXMuc2V0RmllbGRWYWx1ZShmaWVsZENvZGUsIGZpZWxkVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZWNvcmRSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdEZvcm1BY3Rpb24oY29tcG9uZW50Q29uc3RhbnRzLkZPUk1BQ1RJT05fR0VUREFUQSk7XG4gICAgdGhpcy5jaGVja0Vycm9yUmVjb3JkUmVjZWl2ZWQocmVjb3JkUmVzcG9uc2UpO1xuICAgIHRoaXMuZm9ybVZpc2libGUgPSB0cnVlO1xuICAgIHRoaXMuc3Vic2NyaWJlU2VjdGlvbkFjdGl2YXRpb24oKTtcbiAgICB0aGlzLnN1YnNjcmliZUZpZWxkc1N1YmplY3RzKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVBY3Rpb25TdWJqZWN0cygpO1xuICAgIHRoaXMuc3Vic2NyaWJlVGFibGVTdWJqZWN0cygpO1xuICAgIHRoaXMuY3VzdG9tRm9ybVN0YXJ0KCk7XG4gIH1cblxuICBjaGVja0Vycm9yUmVjb3JkUmVjZWl2ZWQocmVjb3JkUmVzcG9uc2UpIHtcbiAgICBjb25zdCB7IGVycm9yIH0gPSByZWNvcmRSZXNwb25zZTtcbiAgICBpZiAoIWVycm9yKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIHRoaXMuZXJyb3JDb2RlID0gcmVjb3JkUmVzcG9uc2UuZXJyb3JDb2RlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gcmVjb3JkUmVzcG9uc2UuZXJyb3JNZXNzYWdlO1xuICAgIHRoaXMuZXJyb3JEZXRhaWwgPSByZWNvcmRSZXNwb25zZS5lcnJvckRldGFpbDtcbiAgfVxuXG4gIGVycm9yT2NjdXJlZCgpIHtcbiAgICByZXR1cm4gKHRoaXMuZXJyb3JDb2RlICE9PSBjb21wb25lbnRDb25zdGFudHMuU0VSVklDRV9FUlJPUkNPREVfTk9FUlJPUik7XG4gIH1cblxuICBjaGFuZ2VTdGF0ZShzdGF0ZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmNoYW5nZVN0YXRlKHN0YXRlKTsgfVxuICBjaGFuZ2VGb3JtTW9kZShzdGF0ZSkgeyByZXR1cm4gdGhpcy5jaGFuZ2VTdGF0ZShzdGF0ZSk7IH1cblxuICBhc3luYyByZXF1ZXN0Rm9ybUFjdGlvbihhY3Rpb25Db2RlLCBhY3Rpb25TdWJqZWN0ID0ge30pIHtcbiAgICBjb25zdCBhY3Rpb25EZXRhaWwgPSB7XG4gICAgICBmb3JtQ29kZTogdGhpcy5uYW1lLFxuICAgICAgZm9ybVN1YmplY3Q6IHRoaXMuZm9ybVN1YmplY3QsXG4gICAgICBjdXJyZW50TW9kZTogdGhpcy5mb3JtU3RydWN0dXJlLnN0YXRlLFxuICAgICAgYWN0aW9uQ29kZSxcbiAgICAgIGFjdGlvblN1YmplY3QsXG4gICAgICB2ZXJzaW9uOiBQQVlMT0FEX1ZFUlNJT04sXG4gICAgICBmb3JtRGF0YTogdGhpcy5mb3JtU3RydWN0dXJlLmdldFBheWxvYWQoKSxcbiAgICAgIGltbXV0YWJsZURhdGE6IHRoaXMuZm9ybVN0cnVjdHVyZS5pbW11dGFibGVEYXRhLFxuICAgIH07XG4gICAgdGhpcy5lcnJvckNvZGUgPSAnMDAnO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5lcnJvckRldGFpbCA9ICcnO1xuICAgIHRoaXMuaW5TZXJ2ZXJQcm9jZXNzID0gdHJ1ZTtcbiAgICBjb25zdCBmb3JtQWN0aW9uUmVzcG9uc2U6IGFueSA9IGF3YWl0IHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLmV4ZWNTZXJ2ZXJBY3Rpb24oYWN0aW9uRGV0YWlsKTtcbiAgICB0aGlzLmluU2VydmVyUHJvY2VzcyA9IGZhbHNlO1xuICAgIGlmIChmb3JtQWN0aW9uUmVzcG9uc2UgJiYgZm9ybUFjdGlvblJlc3BvbnNlLmVycm9yLmVycm9yVHlwZSkge1xuICAgICAgY29uc29sZS5sb2coJ0V4Y2VwY2nDs24gbm8gc29wb3J0YWRhJyk7XG4gICAgfVxuICAgIGlmIChmb3JtQWN0aW9uUmVzcG9uc2UuaGFzRXJyb3IoKSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBmb3JtQWN0aW9uUmVzcG9uc2UuZXJyb3I7XG4gICAgICB0aGlzLmVycm9yQ29kZSA9IGVycm9yLmVycm9yQ29kZTtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3JNZXNzYWdlO1xuICAgICAgdGhpcy5lcnJvckRldGFpbCA9IGVycm9yLmVycm9yRGV0YWlsO1xuICAgIH1cbiAgICBjb25zdCBmb3JtUmVzcG9uc2VEYXRhID0gZm9ybUFjdGlvblJlc3BvbnNlLmdldERhdGEoKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1XaXRoU2VydmVyRGF0YShmb3JtUmVzcG9uc2VEYXRhKTtcbiAgICByZXR1cm4gZm9ybVJlc3BvbnNlRGF0YTtcbiAgfVxuXG4gIHVwZGF0ZUZvcm1XaXRoU2VydmVyRGF0YShmb3JtQ29udGVudCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGN1cnJlbnRNb2RlLCBmb3JtU3ViamVjdCwgYWN0aW9ucywgZmllbGRzLCByZWNvcmRUYWJsZXMsXG4gICAgICByZXR1cm5lZEZpbGUsIGltbXV0YWJsZURhdGEsIGV4dHJhSW5mbyxcbiAgICB9ID0gZm9ybUNvbnRlbnQ7XG4gICAgdGhpcy5jaGFuZ2VTdGF0ZShjdXJyZW50TW9kZSA/PyB0aGlzLmZvcm1TdHJ1Y3R1cmUuc3RhdGUpO1xuICAgIGlmIChmb3JtU3ViamVjdCkgeyB0aGlzLmZvcm1TdWJqZWN0ID0gZm9ybVN1YmplY3Q7IH1cbiAgICBpZiAoYWN0aW9ucyAmJiBhY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgY2hhbmdlZEFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbk9iamVjdCA9IHRoaXMuZ2V0QWN0aW9uT2JqZWN0KGNoYW5nZWRBY3Rpb24uYWN0aW9uQ29kZSk7XG4gICAgICAgIGlmIChhY3Rpb25PYmplY3QpIHsgYWN0aW9uT2JqZWN0LnVwZGF0ZUZyb21TZXJ2ZXIoY2hhbmdlZEFjdGlvbik7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZpZWxkcyAmJiBmaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBjaGFuZ2VkRmllbGQgb2YgZmllbGRzKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkT2JqZWN0ID0gdGhpcy5nZXRGaWVsZE9iamVjdChjaGFuZ2VkRmllbGQuZmllbGRDb2RlKTtcbiAgICAgICAgaWYgKGZpZWxkT2JqZWN0KSB7XG4gICAgICAgICAgZmllbGRPYmplY3QudXBkYXRlRnJvbVNlcnZlcihjaGFuZ2VkRmllbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZWNvcmRUYWJsZXMgJiYgcmVjb3JkVGFibGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgY2hhbmdlZFRhYmxlIG9mIHJlY29yZFRhYmxlcykge1xuICAgICAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGVPYmplY3QoY2hhbmdlZFRhYmxlLnRhYmxlQ29kZSk7XG4gICAgICAgIGlmICh0YWJsZU9iamVjdCkge1xuICAgICAgICAgIHRhYmxlT2JqZWN0LnVwZGF0ZUZyb21TZXJ2ZXIoY2hhbmdlZFRhYmxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmV0dXJuZWRGaWxlICYmIHJldHVybmVkRmlsZS5maWxlKSB7XG4gICAgICB0aGlzLmZpbGVNZ210U2VydmljZXMuc2F2ZUZpbGUocmV0dXJuZWRGaWxlLmZpbGUsIHJldHVybmVkRmlsZS5uYW1lLCByZXR1cm5lZEZpbGUudHlwZSk7XG4gICAgfVxuICAgIHRoaXMuZm9ybVN0cnVjdHVyZS5pbW11dGFibGVEYXRhID0gaW1tdXRhYmxlRGF0YTtcbiAgICB0aGlzLmZvcm1TdHJ1Y3R1cmUuZXh0cmFJbmZvID0gZXh0cmFJbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbmVqbyBkZSBldmVudCBoYW5kbGVycyBwYXJhIGFjY2lvbmVzIHNvYnJlIGVsIGZvcm11bGFyaW9cbiAgICovXG5cbiAgYWRkU2VjdGlvbkFjdGl2YXRpb24oc2VjdGlvbnMsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3Qgc2VjdGlvblNldCA9IChBcnJheS5pc0FycmF5KHNlY3Rpb25zKSkgPyBzZWN0aW9ucyA6IFtzZWN0aW9uc107XG4gICAgc2VjdGlvblNldC5mb3JFYWNoKChzZWN0aW9uTmFtZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvcm1TZWN0aW9uc0FjdGl2YXRlW3NlY3Rpb25OYW1lXSkge1xuICAgICAgICB0aGlzLmZvcm1TZWN0aW9uc0FjdGl2YXRlW3NlY3Rpb25OYW1lXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtU2VjdGlvbnNBY3RpdmF0ZVtzZWN0aW9uTmFtZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRTZWN0aW9uSW5hY3RpdmF0aW9uKHNlY3Rpb25zLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHNlY3Rpb25TZXQgPSAoQXJyYXkuaXNBcnJheShzZWN0aW9ucykpID8gc2VjdGlvbnMgOiBbc2VjdGlvbnNdO1xuICAgIHNlY3Rpb25TZXQuZm9yRWFjaCgoc2VjdGlvbk5hbWUpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb3JtU2VjdGlvbnNJbmFjdGl2YXRlW3NlY3Rpb25OYW1lXSkge1xuICAgICAgICB0aGlzLmZvcm1TZWN0aW9uc0luYWN0aXZhdGVbc2VjdGlvbk5hbWVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1TZWN0aW9uc0luYWN0aXZhdGVbc2VjdGlvbk5hbWVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkQWN0aW9uTWV0aG9kU3RhcnQoYWN0aW9ucywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCBhY3Rpb25TZXQgPSAoQXJyYXkuaXNBcnJheShhY3Rpb25zKSkgPyBhY3Rpb25zIDogW2FjdGlvbnNdO1xuICAgIGFjdGlvblNldC5mb3JFYWNoKChhY3Rpb25OYW1lKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9ybUFjdGlvbnNTdGFydFthY3Rpb25OYW1lXSkge1xuICAgICAgICB0aGlzLmZvcm1BY3Rpb25zU3RhcnRbYWN0aW9uTmFtZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZm9ybUFjdGlvbnNTdGFydFthY3Rpb25OYW1lXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEFjdGlvbk1ldGhvZEZpbmlzaChhY3Rpb25zLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IGFjdGlvblNldCA9IChBcnJheS5pc0FycmF5KGFjdGlvbnMpKSA/IGFjdGlvbnMgOiBbYWN0aW9uc107XG4gICAgYWN0aW9uU2V0LmZvckVhY2goKGFjdGlvbk5hbWUpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb3JtQWN0aW9uc0ZpbmlzaFthY3Rpb25OYW1lXSkge1xuICAgICAgICB0aGlzLmZvcm1BY3Rpb25zRmluaXNoW2FjdGlvbk5hbWVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1BY3Rpb25zRmluaXNoW2FjdGlvbk5hbWVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbGF1bmNoU2VjdGlvbkFjdGl2YXRpb24oc2VjdGlvbkNvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IHNlY3Rpb25PYmplY3QgPSB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0U2VjdGlvbk9iamVjdChzZWN0aW9uQ29kZSk7XG4gICAgaWYgKCFzZWN0aW9uT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIGNvbnN0IGNsaWVudFNlY3Rpb25NZXRob2RzID0gdGhpcy5mb3JtU2VjdGlvbnNBY3RpdmF0ZVtzZWN0aW9uQ29kZV07XG4gICAgaWYgKGNsaWVudFNlY3Rpb25NZXRob2RzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNsaWVudFNlY3Rpb25NZXRob2Qgb2YgY2xpZW50U2VjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50U2VjdGlvbk1ldGhvZChzZWN0aW9uT2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBsYXVuY2hTZWN0aW9uSW5hY3RpdmF0aW9uKHNlY3Rpb25Db2RlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZWN0aW9uT2JqZWN0ID0gdGhpcy5mb3JtU3RydWN0dXJlLmdldFNlY3Rpb25PYmplY3Qoc2VjdGlvbkNvZGUpO1xuICAgIGlmICghc2VjdGlvbk9iamVjdCkgeyByZXR1cm47IH1cbiAgICBjb25zdCBjbGllbnRTZWN0aW9uTWV0aG9kcyA9IHRoaXMuZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZVtzZWN0aW9uQ29kZV07XG4gICAgaWYgKGNsaWVudFNlY3Rpb25NZXRob2RzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNsaWVudFNlY3Rpb25NZXRob2Qgb2YgY2xpZW50U2VjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50U2VjdGlvbk1ldGhvZChzZWN0aW9uT2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydEFjdGlvbihhY3Rpb25Db2RlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhY3Rpb25PYmplY3QgPSB0aGlzLmdldEFjdGlvbihhY3Rpb25Db2RlKTtcbiAgICBpZiAoIWFjdGlvbk9iamVjdCkgeyByZXR1cm47IH1cbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBhY3Rpb25PYmplY3Quc3RhcnQoKTtcbiAgICBjb25zdCBjbGllbnRBY3Rpb25NZXRob2RzID0gdGhpcy5mb3JtQWN0aW9uc1N0YXJ0W2FjdGlvbkNvZGVdO1xuICAgIGlmIChjbGllbnRBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBjbGllbnRBY3Rpb25NZXRob2Qgb2YgY2xpZW50QWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjb25zdCBjb250aW51ZUFjdGlvblByb21pc2UgPSBjbGllbnRBY3Rpb25NZXRob2QoYWN0aW9uT2JqZWN0KTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjb250aW51ZUFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgY3VyciksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICBhY3Rpb25PYmplY3Quc3RvcCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRTZXJ2ZXJBY3Rpb24oYWN0aW9uT2JqZWN0KTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2VydmVyQWN0aW9uKGFjdGlvbklucHV0KSB7XG4gICAgY29uc3QgYWN0aW9uID0gKHR5cGVvZiBhY3Rpb25JbnB1dCA9PT0gJ3N0cmluZycpXG4gICAgICA/IHRoaXMuZ2V0QWN0aW9uKGFjdGlvbklucHV0KSA6IGFjdGlvbklucHV0O1xuICAgIGxldCBmaW5pc2ggPSB0cnVlO1xuICAgIGxldCBhY3Rpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmIChhY3Rpb24uYmFja2VuZCkge1xuICAgICAgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0Rm9ybUFjdGlvbihhY3Rpb24uYWN0aW9uQ29kZSk7XG4gICAgICBmaW5pc2ggPSAhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgaWYgKGZpbmlzaCkge1xuICAgICAgYXdhaXQgdGhpcy5maW5pc2hBY3Rpb24oYWN0aW9uLCBhY3Rpb25SZXN1bHQpO1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShhY3Rpb24ubmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BsYXlBY3Rpb25TZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICBhY3Rpb24uc3RvcCgpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoQWN0aW9uKGFjdGlvbk9iamVjdCwgYWN0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgZmluaXNoQWN0aW9uTWV0aG9kcyA9IHRoaXMuZm9ybUFjdGlvbnNGaW5pc2hbYWN0aW9uT2JqZWN0LmFjdGlvbkNvZGVdO1xuICAgIGlmIChmaW5pc2hBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBjbGllbnRBY3Rpb25NZXRob2Qgb2YgZmluaXNoQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNsaWVudEFjdGlvbk1ldGhvZChhY3Rpb25PYmplY3QsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBsZXRlR2xvYmFsQWN0aW9uKGFjdGlvbk9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0U2VydmVyQWN0aW9uKGFjdGlvbk9iamVjdCk7XG4gIH1cblxuICAvKipcbiAgICogTWFuZWphZG9yZXMgZGUgZXZlbnRvcyBwYXJhIHZhbGlkYWNpb25lcyBzb2JyZSBjYW1wb3NcbiAgICovXG5cbiAgYWRkRmllbGRJbnB1dFZhbGlkYXRpb24oZmllbGRzLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IGZpZWxkU2V0ID0gKEFycmF5LmlzQXJyYXkoZmllbGRzKSkgPyBmaWVsZHMgOiBbZmllbGRzXTtcbiAgICBmaWVsZFNldC5mb3JFYWNoKChmaWVsZENvZGUpID0+IHtcbiAgICAgIGlmICghdGhpcy5maWVsZElucHV0VmFsaWRhdGlvbltmaWVsZENvZGVdKSB7XG4gICAgICAgIHRoaXMuZmllbGRJbnB1dFZhbGlkYXRpb25bZmllbGRDb2RlXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5maWVsZElucHV0VmFsaWRhdGlvbltmaWVsZENvZGVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRmllbGRWYWxpZGF0aW9uU3RhcnQoZmllbGRzLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IGZpZWxkU2V0ID0gKEFycmF5LmlzQXJyYXkoZmllbGRzKSkgPyBmaWVsZHMgOiBbZmllbGRzXTtcbiAgICBmaWVsZFNldC5mb3JFYWNoKChmaWVsZENvZGUpID0+IHtcbiAgICAgIGlmICghdGhpcy5maWVsZFZhbGlkYXRpb25zU3RhcnRbZmllbGRDb2RlXSkge1xuICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnNTdGFydFtmaWVsZENvZGVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnNTdGFydFtmaWVsZENvZGVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRmllbGRWYWxpZGF0aW9uRmluaXNoKGZpZWxkcywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCBmaWVsZFNldCA9IChBcnJheS5pc0FycmF5KGZpZWxkcykpID8gZmllbGRzIDogW2ZpZWxkc107XG4gICAgZmllbGRTZXQuZm9yRWFjaCgoZmllbGRDb2RlKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZmllbGRWYWxpZGF0aW9uc0ZpbmlzaFtmaWVsZENvZGVdKSB7XG4gICAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9uc0ZpbmlzaFtmaWVsZENvZGVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnNGaW5pc2hbZmllbGRDb2RlXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0RmllbGRJbnB1dFZhbGlkYXRpb24oZmllbGRDb2RlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWVsZFRvVmFsaWRhdGUgPSB0aGlzLmdldEZpZWxkT2JqZWN0KGZpZWxkQ29kZSk7XG4gICAgaWYgKCFmaWVsZFRvVmFsaWRhdGUpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgZmllbGRUb1ZhbGlkYXRlLnNldEVycm9yTWVzc2FnZSgnJyk7XG4gICAgZmllbGRUb1ZhbGlkYXRlLnNldEVycm9yQ29kZSgnMDAnKTtcbiAgICBjb25zdCB2YWxpZGF0aW9uQ2FsbGJhY2tzID0gdGhpcy5maWVsZElucHV0VmFsaWRhdGlvbltmaWVsZENvZGVdO1xuICAgIGlmICh2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICBjb25zdCBjbGllbnRWYWxpZGF0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbk1ldGhvZCBvZiB2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICAgIGNvbnN0IGNvbnRpbnVlVmFsaWRhdGlvblByb21pc2UgPSB2YWxpZGF0aW9uTWV0aG9kKGZpZWxkVG9WYWxpZGF0ZSk7XG4gICAgICAgIGNsaWVudFZhbGlkYXRpb25Qcm9taXNlcy5wdXNoKGNvbnRpbnVlVmFsaWRhdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50VmFsaWRhdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydEZpZWxkVmFsaWRhdGlvbihmaWVsZENvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IGZpZWxkVG9WYWxpZGF0ZSA9IHRoaXMuZ2V0RmllbGQoZmllbGRDb2RlKTtcbiAgICBpZiAoIWZpZWxkVG9WYWxpZGF0ZSkgeyByZXR1cm47IH1cbiAgICBmaWVsZFRvVmFsaWRhdGUuc2V0RXJyb3JNZXNzYWdlKCcnKTtcbiAgICBmaWVsZFRvVmFsaWRhdGUuc2V0RXJyb3JDb2RlKCcwMCcpO1xuICAgIGNvbnN0IHZhbGlkYXRpb25DYWxsYmFja3MgPSB0aGlzLmZpZWxkVmFsaWRhdGlvbnNTdGFydFtmaWVsZENvZGVdO1xuICAgIGlmICh2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICBjb25zdCBjbGllbnRWYWxpZGF0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbk1ldGhvZCBvZiB2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudFZhbGlkYXRpb25Qcm9taXNlID0gdmFsaWRhdGlvbk1ldGhvZChmaWVsZFRvVmFsaWRhdGUpO1xuICAgICAgICBjbGllbnRWYWxpZGF0aW9uUHJvbWlzZXMucHVzaChjbGllbnRWYWxpZGF0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRWYWxpZGF0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudFZhbGlkYXRpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZVZhbGlkYXRpb24gPSBjbGllbnRWYWxpZGF0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgY3VyciksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZVZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0U2VydmVyRmllbGRWYWxpZGF0aW9uKGZpZWxkVG9WYWxpZGF0ZSk7XG4gIH1cblxuICBhc3luYyBzdGFydFNlcnZlckZpZWxkVmFsaWRhdGlvbihpbnB1dEZpZWxkKSB7XG4gICAgY29uc3QgZmllbGRPYmogPSAodHlwZW9mIGlucHV0RmllbGQgPT09ICdzdHJpbmcnKVxuICAgICAgPyB0aGlzLmdldEZpZWxkKGlucHV0RmllbGQpIDogaW5wdXRGaWVsZDtcbiAgICBsZXQgZmluaXNoID0gdHJ1ZTtcbiAgICBsZXQgdmFsaWRhdGlvblJlc3VsdCA9IG51bGw7XG4gICAgaWYgKGZpZWxkT2JqLmJhY2tlbmQpIHtcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihjb21wb25lbnRDb25zdGFudHMuRk9STUFDVElPTl9WQUxJREFURSwgZmllbGRPYmouZmllbGRDb2RlKTtcbiAgICAgIGZpbmlzaCA9ICF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBpZiAoZmluaXNoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbmlzaEZpZWxkVmFsaWRhdGlvbihmaWVsZE9iaiwgdmFsaWRhdGlvblJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpZWxkT2JqLnNldEVycm9yQ29kZSh0aGlzLmVycm9yQ29kZSk7XG4gICAgICBmaWVsZE9iai5zZXRFcnJvck1lc3NhZ2UodGhpcy5lcnJvck1lc3NhZ2UpO1xuICAgICAgdGhpcy5kaXNwbGF5VmFsaWRhdGlvblNlcnZlckVycm9yKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZmluaXNoRmllbGRWYWxpZGF0aW9uKGZpZWxkT2JqZWN0LCB2YWxpZGF0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgdmFsaWRhdGlvbkNhbGxiYWNrcyA9IHRoaXMuZmllbGRWYWxpZGF0aW9uc0ZpbmlzaFtmaWVsZE9iamVjdC5maWVsZENvZGVdO1xuICAgIGlmICh2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uTWV0aG9kIG9mIHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaCh2YWxpZGF0aW9uTWV0aG9kKGZpZWxkT2JqZWN0LCB2YWxpZGF0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY29udGludWVGaWVsZFZhbGlkYXRpb24oZmllbGRDb2RlKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRTZXJ2ZXJGaWVsZFZhbGlkYXRpb24oZmllbGRDb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW5lamFkb3JlcyBkZSBldmVudG9zIHBhcmEgYWNjaW9uZXMgc29icmUgVGFibGFzXG4gICAqL1xuXG4gIGFkZFRhYmxlQWN0aW9uU3RhcnQodGFibGVOYW1lLCBhY3Rpb25Db2RlLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZU5hbWUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5saW5lQWN0aW9uT2JqZWN0ID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uT2JqZWN0KGFjdGlvbkNvZGUpO1xuICAgIGlmICghaW5saW5lQWN0aW9uT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnMgPSBudWxsO1xuICAgIGlmICh0aGlzLnRhYmxlQWN0aW9uc1N0YXJ0W3RhYmxlTmFtZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVBY3Rpb25zU3RhcnRbdGFibGVOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0ge307XG4gICAgICB0aGlzLnRhYmxlQWN0aW9uc1N0YXJ0W3RhYmxlTmFtZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIGlmICghdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gPSBbXTtcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICB9XG5cbiAgYWRkVGFibGVBY3Rpb25GaW5pc2godGFibGVOYW1lLCBhY3Rpb25Db2RlLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZU5hbWUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5saW5lQWN0aW9uT2JqZWN0ID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uT2JqZWN0KGFjdGlvbkNvZGUpO1xuICAgIGlmICghaW5saW5lQWN0aW9uT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnMgPSBudWxsO1xuICAgIGlmICh0aGlzLnRhYmxlQWN0aW9uc0ZpbmlzaFt0YWJsZU5hbWVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlQWN0aW9uc0ZpbmlzaFt0YWJsZU5hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB7fTtcbiAgICAgIHRoaXMudGFibGVBY3Rpb25zRmluaXNoW3RhYmxlTmFtZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIGlmICghdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gPSBbXTtcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICB9XG5cbiAgYWRkVGFibGVTZWxlY3Rpb25TdGFydCh0YWJsZU5hbWUsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlTmFtZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkgeyByZXR1cm47IH1cbiAgICBsZXQgdGFibGVFdmVudEhhbmRsZXJzID0gbnVsbDtcbiAgICBpZiAodGhpcy50YWJsZVNlbGVjdGlvbnNTdGFydFt0YWJsZU5hbWVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlU2VsZWN0aW9uc1N0YXJ0W3RhYmxlTmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IFtdO1xuICAgICAgdGhpcy50YWJsZVNlbGVjdGlvbnNTdGFydFt0YWJsZU5hbWVdID0gdGFibGVFdmVudEhhbmRsZXJzO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnMucHVzaChjYWxsYmFja01ldGhvZCk7XG4gIH1cblxuICBhZGRUYWJsZVNlbGVjdGlvbkZpbmlzaCh0YWJsZU5hbWUsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlTmFtZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkgeyByZXR1cm47IH1cbiAgICBsZXQgdGFibGVFdmVudEhhbmRsZXJzID0gbnVsbDtcbiAgICBpZiAodGhpcy50YWJsZVNlbGVjdGlvbnNGaW5pc2hbdGFibGVOYW1lXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZVNlbGVjdGlvbnNGaW5pc2hbdGFibGVOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gW107XG4gICAgICB0aGlzLnRhYmxlU2VsZWN0aW9uc0ZpbmlzaFt0YWJsZU5hbWVdID0gdGFibGVFdmVudEhhbmRsZXJzO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnMucHVzaChjYWxsYmFja01ldGhvZCk7XG4gIH1cblxuICBhZGRUYWJsZUdldERhdGFTdGFydCh0YWJsZU5hbWUsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlTmFtZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgdGFibGVFdmVudEhhbmRsZXJzID0gbnVsbDtcbiAgICBpZiAodGhpcy50YWJsZUdldERhdGFTdGFydFt0YWJsZU5hbWVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlR2V0RGF0YVN0YXJ0W3RhYmxlTmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IFtdO1xuICAgICAgdGhpcy50YWJsZUdldERhdGFTdGFydFt0YWJsZU5hbWVdID0gdGFibGVFdmVudEhhbmRsZXJzO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnMucHVzaChjYWxsYmFja01ldGhvZCk7XG4gIH1cblxuICBhZGRUYWJsZUdldERhdGFGaW5pc2godGFibGVOYW1lLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZU5hbWUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVycyA9IG51bGw7XG4gICAgaWYgKHRoaXMudGFibGVHZXREYXRhRmluaXNoW3RhYmxlTmFtZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVHZXREYXRhRmluaXNoW3RhYmxlTmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHt9O1xuICAgICAgdGhpcy50YWJsZUdldERhdGFGaW5pc2hbdGFibGVOYW1lXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzW0dFVF9EQVRBX0FDVElPTl0gPSBjYWxsYmFja01ldGhvZDtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVHbG9iYWxBY3Rpb24odGFibGVBY3Rpb25FdmVudCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkV2ZW50O1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZUNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbkNvZGUpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgYWN0aW9uID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uKGFjdGlvbkNvZGUpO1xuICAgIGlmICghYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IHRhYmxlQWN0aW9uRGV0YWlsID0ge1xuICAgICAgdGFibGVPYmplY3QsXG4gICAgICBhY3Rpb24sXG4gICAgICB0YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgIH07XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZUFjdGlvbnNTdGFydFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZSA9IHRhYmxlQWN0aW9uTWV0aG9kKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjbGllbnRBY3Rpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZUFjdGlvbiA9IGNsaWVudEFjdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIGN1cnIpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVBY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0VGFibGVTZXJ2ZXJHbG9iYWxBY3Rpb24odGFibGVBY3Rpb25EZXRhaWwpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVNlcnZlckdsb2JhbEFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCkge1xuICAgIGNvbnN0IHsgdGFibGVPYmplY3QsIGFjdGlvbiwgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgdGFibGVPYmplY3QucHV0T25XYWl0KCk7XG4gICAgbGV0IGZpbmlzaCA9IHRydWU7XG4gICAgbGV0IGFjdGlvblJlc3VsdCA9IG51bGw7XG4gICAgaWYgKGFjdGlvbi5iYWNrZW5kKSB7XG4gICAgICBjb25zdCBhY3Rpb25TdWJqZWN0ID0ge1xuICAgICAgICB0YWJsZUNvZGUsXG4gICAgICAgIGFjdGlvblR5cGU6IEdMT0JBTF9BQ1RJT04sXG4gICAgICAgIGFjdGlvbkNvZGVcbiAgICAgIH07XG4gICAgICBhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihjb21wb25lbnRDb25zdGFudHMuRk9STUFDVElPTl9UQUJMRUFDVElPTiwgYWN0aW9uU3ViamVjdCk7XG4gICAgICBmaW5pc2ggPSAhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgaWYgKGZpbmlzaCkge1xuICAgICAgYXdhaXQgdGhpcy5maW5pc2hUYWJsZUdsb2JhbEFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KTtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoYWN0aW9uLm5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5VGFibGVTZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICB0YWJsZU9iamVjdC5mcmVlV2FpdGluZygpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoVGFibGVHbG9iYWxBY3Rpb24odGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlQWN0aW9uc0ZpbmlzaFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaCh0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZUFjdGlvbih0YWJsZUFjdGlvbkV2ZW50KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUsIGFjdGlvbkRldGFpbCB9ID0gdGFibGVBY3Rpb25FdmVudDtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVDb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb25Db2RlKSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IHsgcmVjb3JkSWQsIHJlY29yZERhdGEgfSA9IGFjdGlvbkRldGFpbDtcbiAgICBjb25zdCBhY3Rpb24gPSB0YWJsZU9iamVjdC5nZXRBY3Rpb24oYWN0aW9uQ29kZSk7XG4gICAgaWYgKCFhY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgdGFibGVBY3Rpb25EZXRhaWwgPSB7XG4gICAgICB0YWJsZU9iamVjdCxcbiAgICAgIGFjdGlvbixcbiAgICAgIHRhYmxlQ29kZSxcbiAgICAgIGFjdGlvbkNvZGUsXG4gICAgICByZWNvcmRJZCxcbiAgICAgIHJlY29yZERhdGFcbiAgICB9O1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVBY3Rpb25zU3RhcnRbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2UgPSB0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFRhYmxlU2VydmVyQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZXJ2ZXJBY3Rpb24odGFibGVBY3Rpb25EZXRhaWwpIHtcbiAgICBjb25zdCB7IHRhYmxlT2JqZWN0LCBhY3Rpb24sIHRhYmxlQ29kZSwgYWN0aW9uQ29kZSwgcmVjb3JkSWQsIHJlY29yZERhdGEgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICB0YWJsZU9iamVjdC5wdXRPbldhaXQoKTtcbiAgICBsZXQgZmluaXNoID0gdHJ1ZTtcbiAgICBsZXQgYWN0aW9uUmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoYWN0aW9uLmJhY2tlbmQpIHtcbiAgICAgIGNvbnN0IGFjdGlvblN1YmplY3QgPSB7XG4gICAgICAgIHRhYmxlQ29kZSxcbiAgICAgICAgYWN0aW9uVHlwZTogY29tcG9uZW50Q29uc3RhbnRzLkZPUk1UQUJMRUFDVElPTl9JTkxJTkUsXG4gICAgICAgIGFjdGlvbkNvZGUsXG4gICAgICAgIHRhYmxlUmVjb3JkSWQ6IHJlY29yZElkLFxuICAgICAgICB0YWJsZVJlY29yZERhdGE6IHJlY29yZERhdGFcbiAgICAgIH07XG4gICAgICBhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihjb21wb25lbnRDb25zdGFudHMuRk9STUFDVElPTl9UQUJMRUFDVElPTiwgYWN0aW9uU3ViamVjdCk7XG4gICAgICBmaW5pc2ggPSAhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgaWYgKGZpbmlzaCkge1xuICAgICAgdGhpcy5maW5pc2hUYWJsZUFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KTtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoYWN0aW9uLm5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5VGFibGVTZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICB0YWJsZU9iamVjdC5mcmVlV2FpdGluZygpO1xuICB9XG5cbiAgY29tcGxldGVJbmxpbmVBY3Rpb24odGFibGVBY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFRhYmxlU2VydmVyQWN0aW9uKHRhYmxlQWN0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFRhYmxlQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uQ29kZSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZUFjdGlvbnNGaW5pc2hbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2godGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVSZWNvcmRTZWxlY3Rpb24odGFibGVBY3Rpb25FdmVudCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25EZXRhaWwgfSA9IHRhYmxlQWN0aW9uRXZlbnQ7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlQ29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkgeyByZXR1cm47IH1cbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCB7IHJlY29yZElkLCByZWNvcmREYXRhIH0gPSBhY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVTZWxlY3Rpb25EZXRhaWwgPSB7XG4gICAgICB0YWJsZU9iamVjdCxcbiAgICAgIHRhYmxlQ29kZSxcbiAgICAgIHJlY29yZElkLFxuICAgICAgcmVjb3JkRGF0YVxuICAgIH07XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZVNlbGVjdGlvbnNTdGFydFt0YWJsZUNvZGVdO1xuICAgIGlmICh0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlU2VsZWN0aW9uTWV0aG9kIG9mIHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlID0gdGFibGVTZWxlY3Rpb25NZXRob2QodGFibGVTZWxlY3Rpb25EZXRhaWwpO1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNsaWVudEFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgY3VyciksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRUYWJsZVNlcnZlclJlY29yZFNlbGVjdGlvbih0YWJsZVNlbGVjdGlvbkRldGFpbCk7XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VydmVyUmVjb3JkU2VsZWN0aW9uKHRhYmxlU2VsZWN0aW9uRGV0YWlsKSB7XG4gICAgY29uc3QgeyB0YWJsZU9iamVjdCwgdGFibGVDb2RlLCByZWNvcmRJZCwgcmVjb3JkRGF0YSB9ID0gdGFibGVTZWxlY3Rpb25EZXRhaWw7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkgeyByZXR1cm47IH1cbiAgICB0YWJsZU9iamVjdC5wdXRPbldhaXQoKTtcbiAgICBsZXQgZmluaXNoID0gdHJ1ZTtcbiAgICBsZXQgYWN0aW9uUmVzdWx0ID0gbnVsbDtcbiAgICBpZiAodGFibGVPYmplY3Quc2VsZWN0aW9uQmFja2VuZCkge1xuICAgICAgY29uc3QgYWN0aW9uU3ViamVjdDogYW55ID0ge1xuICAgICAgICB0YWJsZUNvZGUsXG4gICAgICAgIGFjdGlvblR5cGU6IGNvbXBvbmVudENvbnN0YW50cy5GT1JNVEFCTEVBQ1RJT05fUk9XU0VMRUNUSU9OLFxuICAgICAgICBhY3Rpb25Db2RlOiBudWxsLFxuICAgICAgICB0YWJsZVJlY29yZElkOiByZWNvcmRJZCxcbiAgICAgICAgdGFibGVSZWNvcmREYXRhOiByZWNvcmREYXRhXG4gICAgICB9O1xuICAgICAgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpc1xuICAgICAgICAucmVxdWVzdEZvcm1BY3Rpb24oY29tcG9uZW50Q29uc3RhbnRzLkZPUk1BQ1RJT05fVEFCTEVBQ1RJT04sIGFjdGlvblN1YmplY3QpO1xuICAgICAgZmluaXNoID0gIXRoaXMuZXJyb3JPY2N1cmVkKCk7XG4gICAgfVxuICAgIGlmIChmaW5pc2gpIHtcbiAgICAgIHRoaXMuZmluaXNoVGFibGVSZWNvcmRTZWxlY3Rpb24odGFibGVTZWxlY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgdGFibGVPYmplY3QuZnJlZVdhaXRpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFRhYmxlUmVjb3JkU2VsZWN0aW9uKHRhYmxlU2VsZWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSB9ID0gdGFibGVTZWxlY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZVNlbGVjdGlvbnNGaW5pc2hbdGFibGVDb2RlXTtcbiAgICBpZiAodGFibGVFdmVudEhhbmRsZXJzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZVNlbGVjdGlvbk1ldGhvZCBvZiB0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaCh0YWJsZVNlbGVjdGlvbk1ldGhvZCh0YWJsZVNlbGVjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVNlbGVjdGlvbkFjdGlvbih0YWJsZUFjdGlvbkV2ZW50KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUsIGFjdGlvbkRldGFpbCB9ID0gdGFibGVBY3Rpb25FdmVudDtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVDb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb25Db2RlKSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IHsgc2VsZWN0ZWRSZWNvcmRzIH0gPSBhY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgYWN0aW9uID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uKGFjdGlvbkNvZGUpO1xuICAgIGlmICghYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IHRhYmxlQWN0aW9uRGV0YWlsID0ge1xuICAgICAgdGFibGVPYmplY3QsXG4gICAgICBhY3Rpb24sXG4gICAgICB0YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgICAgc2VsZWN0ZWRSZWNvcmRzXG4gICAgfTtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlQWN0aW9uc1N0YXJ0W3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gOiBudWxsO1xuICAgIGlmICh0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlID0gdGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwpO1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNsaWVudEFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgY3VyciksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRUYWJsZVNlcnZlclNlbGVjdGlvbkFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCk7XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VydmVyU2VsZWN0aW9uQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsKSB7XG4gICAgY29uc3QgeyB0YWJsZU9iamVjdCwgYWN0aW9uLCB0YWJsZUNvZGUsIGFjdGlvbkNvZGUsIHNlbGVjdGVkUmVjb3JkcyB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgaWYgKCF0YWJsZU9iamVjdCB8fCAhYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIHRhYmxlT2JqZWN0LnB1dE9uV2FpdCgpO1xuICAgIGxldCBmaW5pc2ggPSB0cnVlO1xuICAgIGxldCBhY3Rpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmIChhY3Rpb24uYmFja2VuZCkge1xuICAgICAgY29uc3QgYWN0aW9uU3ViamVjdCA9IHtcbiAgICAgICAgdGFibGVDb2RlLFxuICAgICAgICBhY3Rpb25UeXBlOiBjb21wb25lbnRDb25zdGFudHMuRk9STVRBQkxFQUNUSU9OX1NFTEVDVElPTixcbiAgICAgICAgYWN0aW9uQ29kZSxcbiAgICAgICAgc2VsZWN0ZWRSZWNvcmRzXG4gICAgICB9O1xuICAgICAgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpc1xuICAgICAgICAucmVxdWVzdEZvcm1BY3Rpb24oY29tcG9uZW50Q29uc3RhbnRzLkZPUk1BQ1RJT05fVEFCTEVBQ1RJT04sIGFjdGlvblN1YmplY3QpO1xuICAgICAgZmluaXNoID0gIXRoaXMuZXJyb3JPY2N1cmVkKCk7XG4gICAgfVxuICAgIGlmIChmaW5pc2gpIHtcbiAgICAgIHRoaXMuZmluaXNoVGFibGVTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCk7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKGFjdGlvbi5uZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgdGFibGVPYmplY3QuZnJlZVdhaXRpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFRhYmxlU2VsZWN0aW9uQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uQ29kZSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZUFjdGlvbnNGaW5pc2hbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2godGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVHZXREYXRhKHRhYmxlQWN0aW9uRXZlbnQpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSB9ID0gdGFibGVBY3Rpb25FdmVudDtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVDb2RlKTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbkRldGFpbCA9IHtcbiAgICAgIHRhYmxlT2JqZWN0LFxuICAgICAgdGFibGVDb2RlXG4gICAgfTtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlR2V0RGF0YVN0YXJ0W3RhYmxlQ29kZV07XG4gICAgaWYgKHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVFdmVudEhhbmRsZXJzKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2UgPSB0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFRhYmxlU2VydmVyR2V0RGF0YSh0YWJsZUFjdGlvbkRldGFpbCk7XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VydmVyR2V0RGF0YSh0YWJsZUFjdGlvbkRldGFpbCkge1xuICAgIGNvbnN0IHsgdGFibGVPYmplY3QsIHRhYmxlQ29kZSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgdGFibGVPYmplY3QucHV0T25XYWl0KCk7XG4gICAgY29uc3QgYWN0aW9uU3ViamVjdCA9IHsgdGFibGVDb2RlIH07XG4gICAgY29uc3QgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpc1xuICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGNvbXBvbmVudENvbnN0YW50cy5GT1JNQUNUSU9OX0dFVFRBQkxFREFUQSwgYWN0aW9uU3ViamVjdCk7XG4gICAgaWYgKHRoaXMuZXJyb3JPY2N1cmVkKCkpIHtcbiAgICAgIHRoaXMuZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maW5pc2hUYWJsZUdldERhdGEodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCk7XG4gICAgfVxuICAgIHRhYmxlT2JqZWN0LmZyZWVXYWl0aW5nKCk7XG4gIH1cblxuICBhc3luYyBmaW5pc2hUYWJsZUdldERhdGEodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCB0YWJsZUFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVBY3Rpb25zRmluaXNoW3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbdGFibGVBY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2godGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrU2VjdGlvblJlcXVpcmVkRmllbGRzKHNlY3Rpb25Db2RlLCByZXFGaWVsZE1lc3NhZ2U/KSB7XG4gICAgdGhpcy5jbGVhbkVycm9yRmllbGRzKG51bGwsIHNlY3Rpb25Db2RlKTtcbiAgICBjb25zdCByZXF1aXJlZEZpZWxkTWVzc2FnZSA9IHJlcUZpZWxkTWVzc2FnZSB8fCBSRVFVSVJFRF9GSUVMRF9NRVNTQUdFO1xuICAgIGNvbnN0IG51bUVycm9ycyA9IHRoaXMudGFnRmllbGRzV2l0aEVycm9yKHRoaXMuZ2V0UmVxdWlyZWRFbXB0eUZpZWxkcyhudWxsLFxuICAgICAgc2VjdGlvbkNvZGUpLCBudWxsLCByZXF1aXJlZEZpZWxkTWVzc2FnZSk7XG4gICAgcmV0dXJuIChudW1FcnJvcnMgPT09IDApO1xuICB9XG5cbiAgdmFsaWRhdGVTZWN0aW9uQ29uc2lzdGVuY3koc2VjdGlvbkNvZGUsIHJlcUZpZWxkTWVzc2FnZT8pIHtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCBjb21wbGV0ZUZpZWxkcyA9IHRoaXMuY2hlY2tTZWN0aW9uUmVxdWlyZWRGaWVsZHMoc2VjdGlvbkNvZGUsIHJlcUZpZWxkTWVzc2FnZSk7XG4gICAgaWYgKCFjb21wbGV0ZUZpZWxkcykge1xuICAgICAgdGhpcy5zZXRFcnJvcihjb21wb25lbnRDb25zdGFudHMuRk9STUVSUk9SX1RZUEVfV0FSTklORyxcbiAgICAgICAgY29tcG9uZW50Q29uc3RhbnRzLkZPUk1FUlJPUl9WQUxJREFUSU9OX1RJVExFLFxuICAgICAgICBjb21wb25lbnRDb25zdGFudHMuRk9STUVSUk9SX1JFUVVJUkVEX0ZJRUxEUyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB2YWxpZGF0aW9uRXJyb3IgPSBmYWxzZTtcbiAgICBjb25zdCByZXF1aXJlZEVtcHR5RmllbGRzID0gdGhpcy5nZXRSZXF1aXJlZEVtcHR5RmllbGRzKG51bGwsIHNlY3Rpb25Db2RlKTtcbiAgICBpZiAocmVxdWlyZWRFbXB0eUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRFcnJvcihjb21wb25lbnRDb25zdGFudHMuRk9STUVSUk9SX1RZUEVfV0FSTklORyxcbiAgICAgICAgY29tcG9uZW50Q29uc3RhbnRzLkZPUk1FUlJPUl9WQUxJREFUSU9OX1RJVExFLFxuICAgICAgICBjb21wb25lbnRDb25zdGFudHMuRk9STUVSUk9SX1JFUVVJUkVEX0ZJRUxEUyk7XG4gICAgICB0aGlzLnRhZ0ZpZWxkc1dpdGhFcnJvcihyZXF1aXJlZEVtcHR5RmllbGRzLCBudWxsLFxuICAgICAgICBjb21wb25lbnRDb25zdGFudHMuRklFTERfUkVRVUlSRURfTUVTU0FHRSk7XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkQ29kZSBvZiByZXF1aXJlZEVtcHR5RmllbGRzKSB7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkRW1wdHlGaWVsZCA9IHRoaXMuZ2V0RmllbGQoZmllbGRDb2RlKTtcbiAgICAgICAgaWYgKHJlcXVpcmVkRW1wdHlGaWVsZCAmJiByZXF1aXJlZEVtcHR5RmllbGQud2lkZ2V0XG4gICAgICAgICAgJiYgcmVxdWlyZWRFbXB0eUZpZWxkLndpZGdldC5mb2N1cykge1xuICAgICAgICAgIHJlcXVpcmVkRW1wdHlGaWVsZC53aWRnZXQuZm9jdXMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB2YWxpZGF0aW9uSXNzdWVGaWVsZHMgPSB0aGlzLmdldEZpZWxkc1dpdGhWYWxpZGF0aW9uSXNzdWVzKG51bGwsXG4gICAgICBzZWN0aW9uQ29kZSk7XG4gICAgaWYgKCF2YWxpZGF0aW9uRXJyb3IgJiYgdmFsaWRhdGlvbklzc3VlRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhbGlkYXRpb25FcnJvciA9IHRydWU7XG4gICAgICB0aGlzLnNldEVycm9yKGNvbXBvbmVudENvbnN0YW50cy5GT1JNRVJST1JfVFlQRV9XQVJOSU5HLFxuICAgICAgICBjb21wb25lbnRDb25zdGFudHMuRk9STUVSUk9SX1ZBTElEQVRJT05fVElUTEUsXG4gICAgICAgIGNvbXBvbmVudENvbnN0YW50cy5GT1JNRVJST1JfVkFMSURBVElPTl9GSUVMRFMpO1xuICAgICAgZm9yIChjb25zdCBmaWVsZENvZGUgb2YgdmFsaWRhdGlvbklzc3VlRmllbGRzKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25Jc3N1ZUZpZWxkID0gdGhpcy5nZXRGaWVsZChmaWVsZENvZGUpO1xuICAgICAgICBpZiAodmFsaWRhdGlvbklzc3VlRmllbGQgJiYgdmFsaWRhdGlvbklzc3VlRmllbGQud2lkZ2V0XG4gICAgICAgICAgJiYgdmFsaWRhdGlvbklzc3VlRmllbGQud2lkZ2V0LmZvY3VzKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbklzc3VlRmllbGQud2lkZ2V0LmZvY3VzKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvcjtcbiAgfVxuXG4gIGNvcHlUYWJsZVJlY29yZFRvRmllbGRzKHRhYmxlT2JqLCBtYXBwaW5nVGFibGUgPSBudWxsKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlT2JqLnRhYmxlQ29kZSk7XG4gICAgY29uc3QgdGFibGVSZWNvcmQgPSB0YWJsZU9iamVjdC5nZXRUYWJsZVJlY29yZCh0YWJsZU9iai5yZWNvcmRJZCk7XG4gICAgY29uc3QgY29sdW1uTmFtZXMgPSB0YWJsZU9iamVjdC5jb2x1bW5OYW1lcztcbiAgICBmb3IgKGNvbnN0IGNvbHVtbk5hbWUgb2YgY29sdW1uTmFtZXMpIHtcbiAgICAgIGNvbnN0IGNvbHVtblZhbHVlID0gdGFibGVSZWNvcmQuZ2V0RmllbGRWYWx1ZShjb2x1bW5OYW1lKSA/PyAnJztcbiAgICAgIGNvbnN0IGZpZWxkQ29kZSA9IG1hcHBpbmdUYWJsZT8uW2NvbHVtbk5hbWVdID8/IGNvbHVtbk5hbWU7XG4gICAgICB0aGlzLnNldEZpZWxkVmFsdWUoZmllbGRDb2RlLCBjb2x1bW5WYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcG9ydGUgcmVnaXN0cm9zIGVuIHRhYmxhcyBxdWUgc2UgZWRpdGFuIGVuIGNhbXBvcyBkZWwgZm9ybXVsYXJpb1xuICAgKi9cblxuICBkZWZpbmVFZGl0aW9uVGFibGUodGFibGVFZGl0aW9uRGVmKSB7XG4gICAgY29uc3QgeyBjb2x1bW5GaWVsZE1hcHBpbmcsIHJlY29yZENhcHR1cmVGaWVsZHMsIHN0YXJ0Q29sbGFwc2VkIH0gPSB0YWJsZUVkaXRpb25EZWY7XG4gICAgdGFibGVFZGl0aW9uRGVmLnN0YXJ0Q29sbGFwc2VkID0gKHR5cGVvZiBzdGFydENvbGxhcHNlZCAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICA/IHN0YXJ0Q29sbGFwc2VkIDogdHJ1ZTtcblxuICAgIGNvbnN0IGZpZWxkc01hcHBpbmdUYWJsZSA9IHt9O1xuICAgIGNvbnN0IGZpZWxkc1RvQ2xlYXIgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbHVtbk1hcCBvZiBjb2x1bW5GaWVsZE1hcHBpbmcpIHtcbiAgICAgIGNvbnN0IFtjb2x1bW5OYW1lLCBmb3JtRmllbGRdID0gY29sdW1uTWFwO1xuICAgICAgZmllbGRzTWFwcGluZ1RhYmxlW2NvbHVtbk5hbWVdID0gZm9ybUZpZWxkO1xuICAgICAgZmllbGRzVG9DbGVhci5wdXNoKGZvcm1GaWVsZCk7XG4gICAgfVxuICAgIHRhYmxlRWRpdGlvbkRlZi5maWVsZHNNYXBwaW5nVGFibGUgPSBmaWVsZHNNYXBwaW5nVGFibGU7XG4gICAgdGFibGVFZGl0aW9uRGVmLmZpZWxkc1RvQ2xlYXIgPSBmaWVsZHNUb0NsZWFyO1xuXG4gICAgY29uc3QgeyB0YWJsZU5hbWUsIG5ld1JlY29yZEFjdGlvbk5hbWUsIHNhdmVSZWNvcmRBY3Rpb25OYW1lLFxuICAgICAgY2FuY2VsU2F2ZVJlY29yZEFjdGlvbk5hbWUsIHRhYmxlRWRpdFJlY29yZEFjdGlvbk5hbWUsIGVuYWJsZVJlY29yZEVkaXRpb25cbiAgICB9ID0gdGFibGVFZGl0aW9uRGVmO1xuXG4gICAgdGhpcy5hZGRBY3Rpb25NZXRob2RTdGFydChuZXdSZWNvcmRBY3Rpb25OYW1lLCAoKSA9PiB7XG4gICAgICB0aGlzLmNsZWFuRmllbGRzKGZpZWxkc1RvQ2xlYXIsIG51bGwpO1xuICAgICAgdGhpcy5zaG93RmllbGRzKHJlY29yZENhcHR1cmVGaWVsZHMpO1xuICAgICAgaWYgKCFlbmFibGVSZWNvcmRFZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5hYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYpO1xuICAgICAgfVxuICAgICAgdGhpcy5oaWRlQWN0aW9uKG5ld1JlY29yZEFjdGlvbk5hbWUpO1xuICAgICAgdGhpcy5zaG93QWN0aW9uKGNhbmNlbFNhdmVSZWNvcmRBY3Rpb25OYW1lKTtcbiAgICAgIHRoaXMuc2hvd0FjdGlvbihzYXZlUmVjb3JkQWN0aW9uTmFtZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICBjb25zdCB7IHJlY29yZEVkaXRpb25WYWxpZGF0ZSwgZGlzYWJsZVJlY29yZEVkaXRpb24gfSA9IHRhYmxlRWRpdGlvbkRlZjtcbiAgICB0aGlzLmFkZEFjdGlvbk1ldGhvZFN0YXJ0KHNhdmVSZWNvcmRBY3Rpb25OYW1lLCAoKSA9PiB7XG4gICAgICByZXR1cm4gKCFyZWNvcmRFZGl0aW9uVmFsaWRhdGUpID8gdGhpcy5yZWNvcmRFZGl0aW9uVmFsaWRhdGUodGFibGVFZGl0aW9uRGVmKVxuICAgICAgICA6IHJlY29yZEVkaXRpb25WYWxpZGF0ZSh0YWJsZUVkaXRpb25EZWYpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkQWN0aW9uTWV0aG9kRmluaXNoKHNhdmVSZWNvcmRBY3Rpb25OYW1lLCAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZXJyb3JPY2N1cmVkKCkpIHtcbiAgICAgICAgcmV0dXJuICghZGlzYWJsZVJlY29yZEVkaXRpb24pID8gdGhpcy5kaXNhYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYpXG4gICAgICAgICAgOiBkaXNhYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYWRkQWN0aW9uTWV0aG9kU3RhcnQoY2FuY2VsU2F2ZVJlY29yZEFjdGlvbk5hbWUsICgpID0+IHtcbiAgICAgIHJldHVybiAoIWRpc2FibGVSZWNvcmRFZGl0aW9uKSA/IHRoaXMuZGlzYWJsZVJlY29yZEVkaXRpb24odGFibGVFZGl0aW9uRGVmKVxuICAgICAgICA6IGRpc2FibGVSZWNvcmRFZGl0aW9uKHRhYmxlRWRpdGlvbkRlZik7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRUYWJsZUFjdGlvblN0YXJ0KHRhYmxlTmFtZSwgdGFibGVFZGl0UmVjb3JkQWN0aW9uTmFtZSxcbiAgICAgICh0YmxBY3RPYmopID0+IHtcbiAgICAgICAgcmV0dXJuICghZW5hYmxlUmVjb3JkRWRpdGlvbilcbiAgICAgICAgICA/IHRoaXMuZW5hYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYsIHRibEFjdE9iailcbiAgICAgICAgICA6IGVuYWJsZVJlY29yZEVkaXRpb24odGFibGVFZGl0aW9uRGVmLCB0YmxBY3RPYmopO1xuICAgICAgfSk7XG4gICAgaWYgKHRhYmxlRWRpdGlvbkRlZi5zdGFydENvbGxhcHNlZCkge1xuICAgICAgcmV0dXJuICghdGFibGVFZGl0aW9uRGVmLmRpc2FibGVSZWNvcmRFZGl0aW9uKVxuICAgICAgICA/IHRoaXMuZGlzYWJsZVJlY29yZEVkaXRpb24odGFibGVFZGl0aW9uRGVmKVxuICAgICAgICA6IHRhYmxlRWRpdGlvbkRlZi5kaXNhYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKCF0YWJsZUVkaXRpb25EZWYuZW5hYmxlUmVjb3JkRWRpdGlvbilcbiAgICAgICAgPyB0aGlzLmVuYWJsZVJlY29yZEVkaXRpb24odGFibGVFZGl0aW9uRGVmKVxuICAgICAgICA6IHRhYmxlRWRpdGlvbkRlZi5lbmFibGVSZWNvcmRFZGl0aW9uKHRhYmxlRWRpdGlvbkRlZiwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZW5hYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYsIHRhYmxlQWN0aW9uT2JqZWN0ID0gbnVsbCkge1xuICAgIGlmICh0YWJsZUFjdGlvbk9iamVjdCkge1xuICAgICAgdGhpcy5jb3B5VGFibGVSZWNvcmRUb0ZpZWxkcyh0YWJsZUFjdGlvbk9iamVjdCwgdGFibGVFZGl0aW9uRGVmLmZpZWxkc01hcHBpbmdUYWJsZSk7XG4gICAgfVxuICAgIHRoaXMuc2hvd0ZpZWxkcyh0YWJsZUVkaXRpb25EZWYucmVjb3JkQ2FwdHVyZUZpZWxkcyk7XG4gICAgdGhpcy5oaWRlQWN0aW9uKHRhYmxlRWRpdGlvbkRlZi5uZXdSZWNvcmRBY3Rpb25OYW1lKTtcbiAgICB0aGlzLnNob3dBY3Rpb24odGFibGVFZGl0aW9uRGVmLmNhbmNlbFNhdmVSZWNvcmRBY3Rpb25OYW1lKTtcbiAgICB0aGlzLnNob3dBY3Rpb24odGFibGVFZGl0aW9uRGVmLnNhdmVSZWNvcmRBY3Rpb25OYW1lKTtcbiAgICBpZiAodGFibGVFZGl0aW9uRGVmLmZpZWxkc1RvVHJpZ2dlclZhbGlkYXRpb25cbiAgICAgICYmIHRhYmxlRWRpdGlvbkRlZi5maWVsZHNUb1RyaWdnZXJWYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgZmllbGROYW1lIG9mIHRhYmxlRWRpdGlvbkRlZi5maWVsZHNUb1RyaWdnZXJWYWxpZGF0aW9uKSB7XG4gICAgICAgIHRoaXMuc3RhcnRGaWVsZFZhbGlkYXRpb24oZmllbGROYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBkaXNhYmxlUmVjb3JkRWRpdGlvbih0YWJsZURlZmluaXRpb24pIHtcbiAgICB0aGlzLmNsZWFuRmllbGRzKHRhYmxlRGVmaW5pdGlvbi5maWVsZHNUb0NsZWFyLCBudWxsKTtcbiAgICB0aGlzLmhpZGVGaWVsZHModGFibGVEZWZpbml0aW9uLnJlY29yZENhcHR1cmVGaWVsZHMpO1xuICAgIHRoaXMuc2hvd0FjdGlvbih0YWJsZURlZmluaXRpb24ubmV3UmVjb3JkQWN0aW9uTmFtZSk7XG4gICAgdGhpcy5oaWRlQWN0aW9uKHRhYmxlRGVmaW5pdGlvbi5jYW5jZWxTYXZlUmVjb3JkQWN0aW9uTmFtZSk7XG4gICAgdGhpcy5oaWRlQWN0aW9uKHRhYmxlRGVmaW5pdGlvbi5zYXZlUmVjb3JkQWN0aW9uTmFtZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZWNvcmRFZGl0aW9uVmFsaWRhdGUodGFibGVFZGl0aW9uRGVmKSB7XG4gICAgY29uc3QgeyByZWNvcmRDYXB0dXJlRmllbGRzIH0gPSB0YWJsZUVkaXRpb25EZWY7XG4gICAgbGV0IHZhbGlkYXRpb25PayA9IHRydWU7XG4gICAgY29uc3QgcmVxdWlyZWRFbXB0eUZpZWxkcyA9IHRoaXMuZ2V0UmVxdWlyZWRFbXB0eUZpZWxkcyhyZWNvcmRDYXB0dXJlRmllbGRzLCBudWxsKTtcbiAgICBpZiAocmVxdWlyZWRFbXB0eUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YWxpZGF0aW9uT2sgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0RXJyb3IoY29tcG9uZW50Q29uc3RhbnRzLkZPUk1FUlJPUl9UWVBFX1dBUk5JTkcsXG4gICAgICAgIGNvbXBvbmVudENvbnN0YW50cy5GT1JNRVJST1JfVkFMSURBVElPTl9USVRMRSxcbiAgICAgICAgY29tcG9uZW50Q29uc3RhbnRzLkZPUk1FUlJPUl9SRVFVSVJFRF9GSUVMRFMpO1xuICAgICAgdGhpcy50YWdGaWVsZHNXaXRoRXJyb3IocmVxdWlyZWRFbXB0eUZpZWxkcywgbnVsbCxcbiAgICAgICAgY29tcG9uZW50Q29uc3RhbnRzLkZJRUxEX1JFUVVJUkVEX01FU1NBR0UpO1xuICAgIH1cbiAgICBjb25zdCB2YWxpZGF0aW9uSXNzdWVGaWVsZHMgPSB0aGlzLmdldEZpZWxkc1dpdGhWYWxpZGF0aW9uSXNzdWVzKHJlY29yZENhcHR1cmVGaWVsZHMsIG51bGwpO1xuICAgIGlmICh2YWxpZGF0aW9uSXNzdWVGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgdmFsaWRhdGlvbk9rID0gZmFsc2U7XG4gICAgICB0aGlzLnNldEVycm9yKGNvbXBvbmVudENvbnN0YW50cy5GT1JNRVJST1JfVFlQRV9XQVJOSU5HLFxuICAgICAgICBjb21wb25lbnRDb25zdGFudHMuRk9STUVSUk9SX1ZBTElEQVRJT05fVElUTEUsIGNvbXBvbmVudENvbnN0YW50cy5GT1JNRVJST1JfVkFMSURBVElPTl9GSUVMRFMpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsaWRhdGlvbk9rO1xuICB9XG59XG4iXX0=
|
|
1346
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvYmFzaWMtZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV4RSxNQUFNLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQztBQUM1QyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUM7QUFDL0IsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDO0FBQy9CLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQztBQUVsQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDekIsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDO0FBQ25DLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQztBQUM5QixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDM0IsTUFBTSxzQkFBc0IsR0FBRyxpQkFBaUIsQ0FBQztBQUtqRCxNQUFNLE9BQU8sa0JBQWtCO0lBb0M3QixZQUNZLGtCQUF5QyxFQUN6QyxhQUFxQyxFQUNyQyxnQkFBMEM7UUFGMUMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF1QjtRQUN6QyxrQkFBYSxHQUFiLGFBQWEsQ0FBd0I7UUFDckMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEwQjtRQWxDdEQsY0FBUyxHQUFH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QUFxQjtZQUNyQixzQkFBc0I7WUFDdEIsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtU3RydWN0dXJlQW5kRGF0YSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybXMvZm9ybSc7XG5pbXBvcnQgeyBMaWJGb3JtTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBMaWJFdmVudE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXZlbnQtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IExpYkZpbGVNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpbGUtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IGNvbXBvbmVudENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybXMvZm9ybS5jb25zdGFudHMnO1xuXG5jb25zdCBQQVlMT0FEX1ZFUlNJT04gPSAnVFVBSU5FWENIQU5HRV8xLjAnO1xuY29uc3QgSU5MSU5FX0FDVElPTiA9ICdJTkxJTkUnO1xuY29uc3QgR0xPQkFMX0FDVElPTiA9ICdHTE9CQUwnO1xuY29uc3QgR0VUX0RBVEFfQUNUSU9OID0gJ0dFVERBVEEnO1xuXG5jb25zdCBGT1JNX0NPREUgPSAnZm9ybSc7XG5jb25zdCBGT1JNX1NVQkpFQ1QgPSAnZm9ybVN1YmplY3QnO1xuY29uc3QgT1JJR0lOX1BBUkFNID0gJ29yaWdpbic7XG5jb25zdCBTVEFURV9QQVJBTSA9ICdtb2RlJztcbmNvbnN0IFJFUVVJUkVEX0ZJRUxEX01FU1NBR0UgPSAnQ2FtcG8gcmVxdWVyaWRvJztcblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmBcbn0pXG5leHBvcnQgY2xhc3MgQmFzaWNGb3JtQ29tcG9uZW50IHtcbiAgbmFtZTogc3RyaW5nO1xuICBfZm9ybVJvdXRlOiBzdHJpbmc7XG4gIGZvcm1TdWJqZWN0OiBzdHJpbmc7XG4gIF9lcnJvclR5cGU6ICcnO1xuICBlcnJvckNvZGUgPSAnJztcbiAgZXJyb3JNZXNzYWdlID0gJyc7XG4gIGVycm9yRGV0YWlsID0gJyc7XG5cbiAgZm9ybVN0cnVjdHVyZTogRm9ybVN0cnVjdHVyZUFuZERhdGEgPSBudWxsO1xuICB0cmFuc2l0aW9uVG9rZW4gPSBudWxsO1xuICBpbnB1dERhdGFGaWVsZHMgPSBbXTtcbiAgZXh0cmFEYXRhOiBhbnkgPSBudWxsO1xuXG4gIGNvbXBvbmVudENvbnN0YW50czogYW55ID0gY29tcG9uZW50Q29uc3RhbnRzO1xuICBkZWZpbml0aW9uT2J0YWluZWQgPSBmYWxzZTtcbiAgZm9ybVZpc2libGUgPSBmYWxzZTtcbiAgaW5TZXJ2ZXJQcm9jZXNzID0gZmFsc2U7XG5cbiAgZm9ybVNlY3Rpb25zQWN0aXZhdGUgPSB7fTtcbiAgZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZSA9IHt9O1xuICBmb3JtQWN0aW9uc1N0YXJ0ID0ge307XG4gIGZvcm1BY3Rpb25zRmluaXNoID0ge307XG4gIGZpZWxkSW5wdXRWYWxpZGF0aW9uID0ge307XG4gIGZpZWxkVmFsaWRhdGlvbnNTdGFydCA9IHt9O1xuICBmaWVsZFZhbGlkYXRpb25zRmluaXNoID0ge307XG4gIC8vIENhbGxiYWNrIGRlIGFjY2lvbmVzIGRlIHRhYmxhc1xuICB0YWJsZVNlbGVjdGlvbnNTdGFydCA9IHt9O1xuICB0YWJsZVNlbGVjdGlvbnNGaW5pc2ggPSB7fTtcbiAgdGFibGVBY3Rpb25zU3RhcnQgPSB7fTtcbiAgdGFibGVBY3Rpb25zRmluaXNoID0ge307XG4gIHRhYmxlR2V0RGF0YVN0YXJ0ID0ge307XG4gIHRhYmxlR2V0RGF0YUZpbmlzaCA9IHt9O1xuXG4gIHByb3RlY3RlZCBfZXZlbnRFbWl0ZXI6IExpYkV2ZW50TWFuYWdlclNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGZvcm1NYW5hZ2VyU2VydmljZTogTGliRm9ybU1hbmFnZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBfZXZlbnRNYW5hZ2VyOiBMaWJFdmVudE1hbmFnZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBmaWxlTWdtdFNlcnZpY2VzOiBMaWJGaWxlTWFuYWdlbWVudFNlcnZpY2UpIHtcbiAgICB0aGlzLl9ldmVudEVtaXRlciA9IHRoaXMuX2V2ZW50TWFuYWdlcjtcbiAgICB0aGlzLmNsZWFuU3RhcnQoKTtcbiAgICB0aGlzLmN1c3RvbVByZVByb2Nlc3NpbmcoKTtcbiAgfVxuXG4gIGNsZWFuU3RhcnQoKSB7XG4gICAgdGhpcy5fZXJyb3JUeXBlID0gJyc7XG4gICAgdGhpcy5lcnJvckNvZGUgPSAnJztcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JEZXRhaWwgPSAnJztcbiAgICB0aGlzLmZvcm1TdHJ1Y3R1cmUgPSBudWxsO1xuICAgIHRoaXMudHJhbnNpdGlvblRva2VuID0gbnVsbDtcbiAgICB0aGlzLmlucHV0RGF0YUZpZWxkcyA9IFtdO1xuICAgIHRoaXMuZGVmaW5pdGlvbk9idGFpbmVkID0gZmFsc2U7XG4gICAgLy8gU2UgbGltcGlhbiBsb3MgbWFuZWphZG9yZXMgZGUgZXZlbnRvc1xuICAgIHRoaXMuZm9ybVZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLmluU2VydmVyUHJvY2VzcyA9IGZhbHNlO1xuICAgIHRoaXMuZm9ybVNlY3Rpb25zQWN0aXZhdGUgPSB7fTtcbiAgICB0aGlzLmZvcm1TZWN0aW9uc0luYWN0aXZhdGUgPSB7fTtcbiAgICB0aGlzLmZvcm1BY3Rpb25zU3RhcnQgPSB7fTtcbiAgICB0aGlzLmZvcm1BY3Rpb25zRmluaXNoID0ge307XG4gICAgdGhpcy5maWVsZElucHV0VmFsaWRhdGlvbiA9IHt9O1xuICAgIHRoaXMuZmllbGRWYWxpZGF0aW9uc1N0YXJ0ID0ge307XG4gICAgdGhpcy5maWVsZFZhbGlkYXRpb25zRmluaXNoID0ge307XG4gICAgdGhpcy50YWJsZVNlbGVjdGlvbnNTdGFydCA9IHt9O1xuICAgIHRoaXMudGFibGVTZWxlY3Rpb25zRmluaXNoID0ge307XG4gICAgdGhpcy50YWJsZUFjdGlvbnNTdGFydCA9IHt9O1xuICAgIHRoaXMudGFibGVBY3Rpb25zRmluaXNoID0ge307XG4gICAgdGhpcy50YWJsZUdldERhdGFTdGFydCA9IHt9O1xuICAgIHRoaXMudGFibGVHZXREYXRhRmluaXNoID0ge307XG4gIH1cblxuICBnZXQgY3VycmVudFN0YXRlKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnN0YXRlOyB9XG4gIHNldCBjdXJyZW50U3RhdGUoc3RhdGUpIHsgdGhpcy5mb3JtU3RydWN0dXJlLmNoYW5nZVN0YXRlKHN0YXRlKTsgfVxuICBnZXQgY3VycmVudE1vZGUoKSB7IHJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZTsgfVxuICBnZXQgaW1tdXRhYmxlRGF0YSgpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5pbW11dGFibGVEYXRhIH1cbiAgZ2V0IGV4dHJhSW5mbygpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5leHRyYUluZm8gfVxuXG4gIC8vIE3DqXRvZG9zIFBhc3MtdGhyb3VnaCBoYWNpYSBlbCBjb250ZW5pZG8geSBlc3RydWN0dXJhIGRlbCBmb3JtdWxhcmlvXG4gIHN1cHBvcnRTdGF0ZShzdGF0ZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnN1cHBvcnRTdGF0ZShzdGF0ZSk7IH1cbiAgc3VwcG9ydE1vZGUoc3RhdGUpIHsgcmV0dXJuIHRoaXMuc3VwcG9ydFN0YXRlKHN0YXRlKTsgfVxuICBnZXRUaXRsZSgpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS50aXRsZTsgfVxuICBzZXRUaXRsZSh0aXRsZTogc3RyaW5nKSB7IHRoaXMuZm9ybVN0cnVjdHVyZS50aXRsZSA9IHRpdGxlOyB9XG4gIGdldEltbXV0YWJsZUVsZW1lbnQobmFtZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldEltbXV0YWJsZUVsZW1lbnQobmFtZSk7IH1cbiAgZ2V0RXh0cmFJbmZvKG5hbWUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRFeHRyYUluZm8obmFtZSk7IH1cbiAgY2xlYW5EYXRhKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmNsZWFuRGF0YSgpOyB9XG4gIGdldEZpZWxkcygpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRGaWVsZHMoKTsgfVxuICBnZXRGaWVsZE5hbWVzKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldEZpZWxkTmFtZXMoKTsgfVxuICBnZXRGaWVsZE9iamVjdChlbGVtZW50SWQpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRGaWVsZE9iamVjdChlbGVtZW50SWQpOyB9XG4gIGdldEZpZWxkKGZpZWxkQ29kZSkgeyByZXR1cm4gdGhpcy5nZXRGaWVsZE9iamVjdChmaWVsZENvZGUpOyB9XG4gIGVuYWJsZUZpZWxkKGZpZWxkQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmVuYWJsZUZpZWxkKGZpZWxkQ29kZSk7IH1cbiAgZGlzYWJsZUZpZWxkKGZpZWxkQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmRpc2FibGVGaWVsZChmaWVsZENvZGUpOyB9XG4gIGdldEZpZWxkVmFsdWUoZmllbGRDb2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0RmllbGRWYWx1ZShmaWVsZENvZGUpOyB9XG4gIGdldEZpZWxkc1ZhbHVlcyhmaWVsZENvZGVzQXJyYXkpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRGaWVsZHNWYWx1ZXMoZmllbGRDb2Rlc0FycmF5KTsgfVxuICBnZXRGaWVsZE9wdGlvbnMoZmllbGRDb2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0RmllbGRPcHRpb25zKGZpZWxkQ29kZSk7IH1cbiAgc2V0RmllbGRWYWx1ZShmaWVsZENvZGUsIGZpZWxkVmFsdWUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5zZXRGaWVsZFZhbHVlKGZpZWxkQ29kZSwgZmllbGRWYWx1ZSk7IH1cbiAgc2V0RmllbGRSZXF1aXJlZChmaWVsZENvZGUsIHJlcXVpcmVkOiBib29sZWFuKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2V0RmllbGRSZXF1aXJlZChmaWVsZENvZGUsIHJlcXVpcmVkKTsgfVxuICBzZXRGaWVsZEVycm9yTWVzc2FnZShmaWVsZENvZGUsIGVycm9yTWVzc2FnZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNldEZpZWxkRXJyb3JNZXNzYWdlKGZpZWxkQ29kZSwgZXJyb3JNZXNzYWdlKTsgfVxuICBzZXRGaWVsZEVycm9yKGNvZGUsIG1lc3NhZ2UsIHR5cGUgPSAnZXJyb3InKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2V0RmllbGRFcnJvcihjb2RlLCBtZXNzYWdlLCB0eXBlKTsgfVxuICBzZXRGaWVsZEludHJpbnNpY0Vycm9yTWVzc2FnZShjb2RlLCBtZXNzYWdlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2V0RmllbGRJbnRyaW5zaWNFcnJvck1lc3NhZ2UoY29kZSwgbWVzc2FnZSk7IH1cblxuICBzZXRGaWVsZE9wdGlvbnMoZmllbGRDb2RlLCBvcHRpb25zQXJyYXksIGlkQXR0cmlidXRlLCBuYW1lQXR0cmlidXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5zZXRGaWVsZE9wdGlvbnMoZmllbGRDb2RlLCBvcHRpb25zQXJyYXksIGlkQXR0cmlidXRlLCBuYW1lQXR0cmlidXRlKTtcbiAgfVxuICBnZXRGaWVsZFNldChmaWx0ZXJGdW5jPywgZmllbGRBcnJheT8sIHNlY3Rpb25Db2RlPywgc3ViU2VjdGlvbkNvZGU/KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRGaWVsZFNldChmaWx0ZXJGdW5jLCBmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGFwcGx5UHJvY2Vzc1RvRmllbGRTZXQocHJvY2Vzc0Z1bmMsIGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuYXBwbHlQcm9jZXNzVG9GaWVsZFNldChwcm9jZXNzRnVuYywgZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBhcHBseVByb2Nlc3NUb0FsbEZpZWxkcyhwcm9jZXNzRnVuYykgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmFwcGx5UHJvY2Vzc1RvRmllbGRTZXQocHJvY2Vzc0Z1bmMpOyB9XG4gIGNsZWFuRmllbGRzKGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuY2xlYW5GaWVsZHMoZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBnZXRSZXF1aXJlZEZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0UmVxdWlyZWRGaWVsZHMoZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBnZXRSZXF1aXJlZEVtcHR5RmllbGRzKGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0UmVxdWlyZWRFbXB0eUZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGdldENoYW5nZWRGaWVsZHMoZmllbGRBcnJheT8sIHNlY3Rpb25Db2RlPywgc3ViU2VjdGlvbkNvZGU/KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRDaGFuZ2VkRmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cbiAgZ2V0RmllbGRzV2l0aFZhbGlkYXRpb25Jc3N1ZXMoZmllbGRBcnJheT8sIHNlY3Rpb25Db2RlPywgc3ViU2VjdGlvbkNvZGU/KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRGaWVsZHNXaXRoVmFsaWRhdGlvbklzc3VlcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIHRhZ0ZpZWxkc1dpdGhFcnJvcihlcnJvck1lc3NhZ2UsIGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUudGFnRmllbGRzV2l0aEVycm9yKGVycm9yTWVzc2FnZSwgZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBjbGVhbkVycm9yRmllbGRzKGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuY2xlYW5FcnJvckZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIHNob3dMYWJlbEZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dMYWJlbEZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGhpZGVMYWJlbEZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmhpZGVMYWJlbEZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGVuYWJsZUZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmVuYWJsZUZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGRpc2FibGVGaWVsZHMoZmllbGRBcnJheT8sIHNlY3Rpb25Db2RlPywgc3ViU2VjdGlvbkNvZGU/KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5kaXNhYmxlRmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cbiAgZW5hYmxlRWRpdEZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmVuYWJsZUVkaXRGaWVsZHMoZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBkaXNhYmxlRWRpdEZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmRpc2FibGVFZGl0RmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cbiAgc2hvd0ZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dGaWVsZHMoZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBoaWRlRmllbGRzKGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuaGlkZUZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG5cbiAgZ2V0SGVhZGVyQWN0aW9ucygpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRIZWFkZXJBY3Rpb25zKCk7IH1cbiAgZ2V0QWN0aW9uT2JqZWN0KGVsZW1lbnRJZCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldEFjdGlvbk9iamVjdChlbGVtZW50SWQpOyB9XG4gIGdldEFjdGlvbihhY3Rpb25Db2RlKSB7IHJldHVybiB0aGlzLmdldEFjdGlvbk9iamVjdChhY3Rpb25Db2RlKTsgfVxuICBnZXRBY3Rpb25EZWZpbml0aW9uKGFjdGlvbkNvZGUpIHsgcmV0dXJuIHRoaXMuZ2V0QWN0aW9uT2JqZWN0KGFjdGlvbkNvZGUpOyB9XG4gIHNob3dBY3Rpb24oYWN0aW9uQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dBY3Rpb24oYWN0aW9uQ29kZSk7IH1cbiAgaGlkZUFjdGlvbihhY3Rpb25Db2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuaGlkZUFjdGlvbihhY3Rpb25Db2RlKTsgfVxuICBzaG93QWN0aW9ucyhhY3Rpb25BcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dBY3Rpb25zKGFjdGlvbkFycmF5KTsgfVxuICBoaWRlQWN0aW9ucyhhY3Rpb25BcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmhpZGVBY3Rpb25zKGFjdGlvbkFycmF5KTsgfVxuICBlbmFibGVBY3Rpb24oYWN0aW9uQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmVuYWJsZUFjdGlvbihhY3Rpb25Db2RlKTsgfVxuICBkaXNhYmxlQWN0aW9uKGFjdGlvbkNvZGUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5kaXNhYmxlQWN0aW9uKGFjdGlvbkNvZGUpOyB9XG4gIGVuYWJsZUFjdGlvbnMoYWN0aW9uQXJyYXkpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5lbmFibGVBY3Rpb25zKGFjdGlvbkFycmF5KTsgfVxuICBkaXNhYmxlQWN0aW9ucyhhY3Rpb25BcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmRpc2FibGVBY3Rpb25zKGFjdGlvbkFycmF5KTsgfVxuXG4gIGdldFN0YXRlcygpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRTdGF0ZXMoKTsgfVxuICBnZXRTZWN0aW9ucygpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRTZWN0aW9ucygpOyB9XG4gIGdldFNlY3Rpb24oc2VjdGlvbkNvZGUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRTZWN0aW9uKHNlY3Rpb25Db2RlKTsgfVxuICBhY3RpdmF0ZVNlY3Rpb24oc2VjdGlvbkNvZGUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5hY3RpdmF0ZVNlY3Rpb24oc2VjdGlvbkNvZGUpOyB9XG4gIGdldFN1YlNlY3Rpb24oc2VjdGlvbkNvZGUsIHN1YnNlY3Rpb25Db2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0U3ViU2VjdGlvbihzZWN0aW9uQ29kZSwgc3Vic2VjdGlvbkNvZGUpOyB9XG4gIG51bVNlY3Rpb25zKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLm51bVNlY3Rpb25zKCk7IH1cbiAgZ2V0U2VjdGlvbnNUaXRsZXMoKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0U2VjdGlvbnNUaXRsZXMoKTsgfVxuICBnZXRTZWN0aW9uT2JqZWN0KGVsZW1lbnRJZCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldFNlY3Rpb25PYmplY3QoZWxlbWVudElkKTsgfVxuICBzaG93U2VjdGlvbihzZWN0aW9uQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dTZWN0aW9uKHNlY3Rpb25Db2RlKTsgfVxuICBoaWRlU2VjdGlvbihzZWN0aW9uQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmhpZGVTZWN0aW9uKHNlY3Rpb25Db2RlKTsgfVxuICBzaG93U2VjdGlvbnMoc2VjdGlvbkFycmF5KSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2hvd1NlY3Rpb25zKHNlY3Rpb25BcnJheSk7IH1cbiAgaGlkZVNlY3Rpb25zKHNlY3Rpb25BcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmhpZGVTZWN0aW9ucyhzZWN0aW9uQXJyYXkpOyB9XG4gIHNob3dTdWJTZWN0aW9uKHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dTdWJTZWN0aW9uKHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7IH1cbiAgaGlkZVN1YlNlY3Rpb24oc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuaGlkZVN1YlNlY3Rpb24oc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTsgfVxuICBzaG93U3ViU2VjdGlvbnMoc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25BcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dTdWJTZWN0aW9ucyhzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkFycmF5KTsgfVxuICBoaWRlU3ViU2VjdGlvbnMoc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25BcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmhpZGVTdWJTZWN0aW9ucyhzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkFycmF5KTsgfVxuXG4gIGdldFRhYmxlcygpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRUYWJsZXMoKTsgfVxuICBnZXRUYWJsZU9iamVjdChlbGVtZW50SWQpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRUYWJsZU9iamVjdChlbGVtZW50SWQpOyB9XG4gIGdldFRhYmxlKHRhYmxlTmFtZSkgeyByZXR1cm4gdGhpcy5nZXRUYWJsZU9iamVjdCh0YWJsZU5hbWUpOyB9XG4gIHNob3dUYWJsZSh0YWJsZU5hbWUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5zaG93VGFibGUodGFibGVOYW1lKTsgfVxuICBoaWRlVGFibGUodGFibGVOYW1lKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuaGlkZVRhYmxlKHRhYmxlTmFtZSk7IH1cbiAgc2hvd1RhYmxlcyh0YWJsZUFycmF5KSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2hvd1RhYmxlcyh0YWJsZUFycmF5KTsgfVxuICBoaWRlVGFibGVzKHRhYmxlQXJyYXkpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5oaWRlVGFibGVzKHRhYmxlQXJyYXkpOyB9XG4gIGNsZWFuVGFibGUodGFibGVOYW1lKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuY2xlYW5UYWJsZSh0YWJsZU5hbWUpOyB9XG4gIGdldFRhYmxlUmVjb3JkKHRhYmxlTmFtZSwgcmVjb3JkSWQpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRUYWJsZVJlY29yZCh0YWJsZU5hbWUsIHJlY29yZElkKTsgfVxuXG4gIGN1c3RvbVByZVByb2Nlc3NpbmcoKSB7IH1cbiAgY3VzdG9tRm9ybVN0YXJ0KCkgeyB9XG4gIGRpc3BsYXlBY3Rpb25TZXJ2ZXJFcnJvcigpIHsgfVxuICBkaXNwbGF5VmFsaWRhdGlvblNlcnZlckVycm9yKCkgeyB9XG4gIGRpc3BsYXlUYWJsZVNlcnZlckVycm9yKCkgeyB9XG4gIHNob3dGaWVsZEluZm8oZmllbGRDb2RlOiBzdHJpbmcpIHsgfVxuICBzaG93TW9kYWxEaWFsb2codGl0bGUsIGJvZHksIG9wdGlvbnMsIGNhbGxiYWNrPywgcGFyYW1zPykgeyB9XG4gIG9wZW5VcGxvYWREaWFsb2codGl0bGUsIGJvZHksIG9wdGlvbnMsIGNhbGxiYWNrPywgcGFyYW1zPykgeyB9XG5cbiAgc3Vic2NyaWJlQXBwRXZlbnQoZXZlbnROYW1lLCBjYWxsYmFjaykge1xuICAgIHRoaXMuX2V2ZW50RW1pdGVyLnN1YnNjcmliZShldmVudE5hbWUsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGdvVG9QYWdlKG5hdmlnYXRpb25BcnJheSwgcHJlZGVmaW5lZEZpZWxkcywgb3B0aW9ucyA9IG51bGwpIHtcbiAgICBsZXQgb3JpZ2luID0gbnVsbDtcbiAgICBjb25zdCBjbGVhblN0YWNrID0gb3B0aW9ucz8uY2xlYW5TdGFjayA/PyBmYWxzZTtcbiAgICBjb25zdCBwYXJhbXMgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRTdGF0ZSAmJiBwYXJhbXMucHVzaCh0aGlzLmN1cnJlbnRTdGF0ZSk7XG4gICAgdGhpcy5mb3JtU3ViamVjdCAmJiBwYXJhbXMucHVzaCh0aGlzLmZvcm1TdWJqZWN0KTtcbiAgICBpZiAoIWNsZWFuU3RhY2spIHtcbiAgICAgIG9yaWdpbiA9IHtcbiAgICAgICAgY29kZTogdGhpcy5uYW1lLFxuICAgICAgICB1cmw6IHRoaXMuX2Zvcm1Sb3V0ZSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICB0b2tlbjogdGhpcy50cmFuc2l0aW9uVG9rZW4sXG4gICAgICAgIHByZWRlZmluZWRGaWVsZHM6IHRoaXMuaW5wdXREYXRhRmllbGRzXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB0YXJnZXQgPSB7XG4gICAgICB1cmw6IG5hdmlnYXRpb25BcnJheT8uWzBdLFxuICAgICAgcGFyYW1zOiBuYXZpZ2F0aW9uQXJyYXkuc3BsaWNlKDEpID8/IFtdLFxuICAgICAgcHJlZGVmaW5lZEZpZWxkcyxcbiAgICB9O1xuICAgIHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLmNoYW5nZUZvcm0ob3JpZ2luLCB0YXJnZXQpO1xuICB9XG5cbiAgZ29Ub05ld1BhZ2UobmF2LCBmbGRzKSB7IHJldHVybiB0aGlzLmdvVG9QYWdlKG5hdiwgZmxkcywgeyBjbGVhblN0YWNrOiB0cnVlIH0pOyB9XG4gIGdvVG9TdWJQYWdlKG5hdiwgZmxkcykgeyByZXR1cm4gdGhpcy5nb1RvUGFnZShuYXYsIGZsZHMsIHsgY2xlYW5TdGFjazogZmFsc2UgfSk7IH1cbiAgY2FuR29CYWNrKCkgeyByZXR1cm4gdGhpcy50cmFuc2l0aW9uVG9rZW4gIT09IG51bGwgfVxuICBnb0JhY2soKSB7IHJldHVybiB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZS5jaGFuZ2VQcmV2aW91c0Zvcm0odGhpcy50cmFuc2l0aW9uVG9rZW4pOyB9XG4gIGdvQmFja0Zvcm0oKSB7IHJldHVybiB0aGlzLmdvQmFjaygpOyB9XG4gIGdldE9yaWdpbkRldGFpbCgpIHsgcmV0dXJuIHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLmdldE9yaWdpbkluZm8odGhpcy50cmFuc2l0aW9uVG9rZW4pOyB9XG5cbiAgc2V0RXJyb3IoZXJyb3JUeXBlLCBlcnJvck1lc3NhZ2UsIGVycm9yRGV0YWlsKSB7XG4gICAgdGhpcy5fZXJyb3JUeXBlID0gZXJyb3JUeXBlIHx8ICcnO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlIHx8ICcnO1xuICAgIHRoaXMuZXJyb3JEZXRhaWwgPSBlcnJvckRldGFpbCB8fCAnJztcbiAgfVxuXG4gIGdldCBmb3JtTWFuYWdlcigpIHsgcmV0dXJuIHRoaXM7IH1cbiAgcmVzZXRFcnJvcigpIHsgdGhpcy5zZXRFcnJvcihudWxsLCBudWxsLCBudWxsKTsgfVxuICBnZXRFcnJvclR5cGUoKSB7IHJldHVybiB0aGlzLl9lcnJvclR5cGU7IH1cbiAgZ2V0RXJyb3JNZXNzYWdlKCkgeyByZXR1cm4gdGhpcy5lcnJvck1lc3NhZ2U7IH1cbiAgZ2V0RXJyb3JEZXRhaWwoKSB7IHJldHVybiB0aGlzLmVycm9yRGV0YWlsOyB9XG4gIGdldEVycm9yQ29kZSgpIHsgcmV0dXJuIHRoaXMuX2Vycm9yVHlwZTsgfVxuXG4gIGdldCBmb3JtUm91dGUoKSB7IHJldHVybiB0aGlzLl9mb3JtUm91dGU7IH1cbiAgc2V0IGZvcm1Sb3V0ZShyb3V0ZSkgeyB0aGlzLl9mb3JtUm91dGUgPSByb3V0ZTsgfVxuICBkZWZpbmVGb3JtQ29kZShuYW1lKSB7IHRoaXMubmFtZSA9IG5hbWU7IH1cbiAgZ2V0Q3VycmVudFN0YXRlKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnN0YXRlOyB9XG4gIGdldEN1cnJlbnRNb2RlKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnN0YXRlOyB9XG5cbiAgZ2V0IGZvcm1Db2RlKCkgeyByZXR1cm4gdGhpcy5uYW1lOyB9XG4gIHNldCBmb3JtQ29kZShuYW1lKSB7IHRoaXMubmFtZSA9IG5hbWU7IH1cblxuICBnZXRGb3JtUGFyYW1ldGVyKG5hbWUpIHtcbiAgICByZXR1cm4gKHRoaXMuZXh0cmFEYXRhICYmIG5hbWUgJiYgdGhpcy5leHRyYURhdGFbbmFtZV0pID8gdGhpcy5leHRyYURhdGFbbmFtZV0gOiBudWxsO1xuICB9XG5cbiAgZ2V0U3ViamVjdCgpIHsgcmV0dXJuIHRoaXMuZm9ybVN1YmplY3Q7IH1cbiAgZ2V0Zm9ybVN1YmplY3QoKSB7IHJldHVybiB0aGlzLmdldFN1YmplY3QoKTsgfVxuXG4gIHByZW9jZXNzSW5wdXRQYXJhbXMocGFyYW1zKSB7XG4gICAgY29uc3QgYWxsUGFyYW1zID0gT2JqZWN0LmtleXMocGFyYW1zID8/IHt9KTtcbiAgICBpZiAoIWFsbFBhcmFtcyB8fCAhQXJyYXkuaXNBcnJheShhbGxQYXJhbXMpIHx8IGFsbFBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5leHRyYURhdGEgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhcmFtTmFtZSBvZiBhbGxQYXJhbXMpIHtcbiAgICAgIHRoaXMuZXh0cmFEYXRhW3BhcmFtTmFtZV0gPSBwYXJhbXNbcGFyYW1OYW1lXS50b1N0cmluZygpO1xuICAgIH1cbiAgICBjb25zdCBmb3JtTmFtZSA9IHRoaXMuZXh0cmFEYXRhPy5bRk9STV9DT0RFXSA/PyB0aGlzLm5hbWU7XG4gICAgaWYgKGZvcm1OYW1lICE9PSB0aGlzLm5hbWUpIHtcbiAgICAgIHRoaXMuY2xlYW5TdGFydCgpO1xuICAgICAgdGhpcy5uYW1lID0gZm9ybU5hbWU7XG4gICAgfVxuICAgIHRoaXMuZm9ybVN1YmplY3QgPSB0aGlzLmV4dHJhRGF0YT8uW0ZPUk1fU1VCSkVDVF0gPz8gbnVsbDtcbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB0aGlzLmV4dHJhRGF0YVtTVEFURV9QQVJBTV07XG4gICAgdGhpcy50cmFuc2l0aW9uVG9rZW4gPSB0aGlzLmV4dHJhRGF0YVtPUklHSU5fUEFSQU1dID8/IG51bGw7XG4gICAgdGhpcy5pbnB1dERhdGFGaWVsZHMgPSB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZS5nZXRJbnB1dERhdGEodGhpcy50cmFuc2l0aW9uVG9rZW4pID8/IFtdO1xuICAgIGlmICghdGhpcy50cmFuc2l0aW9uVG9rZW4pIHtcbiAgICAgIHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLmNsZWFuU3RhY2soKTtcbiAgICB9XG4gICAgcmV0dXJuIGluaXRpYWxTdGF0ZTtcbiAgfVxuXG4gIHN1YnNjcmliZVNlY3Rpb25BY3RpdmF0aW9uKCkge1xuICAgIGNvbnN0IGZvcm1TZWN0aW9ucyA9IHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRTZWN0aW9ucygpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZvcm1TZWN0aW9ucykpIHtcbiAgICAgIGZvcm1TZWN0aW9ucy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xuICAgICAgICBzZWN0aW9uLmFjdGl2YXRpb24uc3Vic2NyaWJlKGNvZGUgPT4gdGhpcy5sYXVuY2hTZWN0aW9uQWN0aXZhdGlvbihjb2RlKSk7XG4gICAgICAgIHNlY3Rpb24uaW5hY3RpdmF0aW9uLnN1YnNjcmliZShjb2RlID0+IHRoaXMubGF1bmNoU2VjdGlvbkluYWN0aXZhdGlvbihjb2RlKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVGaWVsZHNTdWJqZWN0cygpIHtcbiAgICBjb25zdCBmb3JtRmllbGRzID0gdGhpcy5mb3JtU3RydWN0dXJlLmdldEZpZWxkcygpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZvcm1GaWVsZHMpKSB7XG4gICAgICBmb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICBmaWVsZC5lZGl0aW9uRmluaXNoLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgeyBjb2RlLCBpbnRyaW5zaWNWYWxpZGF0aW9uIH0gPSBldmVudDtcbiAgICAgICAgICB0aGlzLnN0YXJ0RmllbGRWYWxpZGF0aW9uKGNvZGUsIGludHJpbnNpY1ZhbGlkYXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgZmllbGQuZWRpdGlvblBhcnRpYWwuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCB7IGNvZGUsIGludHJpbnNpY1ZhbGlkYXRpb24gfSA9IGV2ZW50O1xuICAgICAgICAgIHRoaXMuc3RhcnRGaWVsZElucHV0VmFsaWRhdGlvbihjb2RlLCBpbnRyaW5zaWNWYWxpZGF0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZpZWxkLmRldGFpbFJlcXVlc3Quc3Vic2NyaWJlKGNvZGUgPT4gdGhpcy5zaG93RmllbGRJbmZvKGNvZGUpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZUFjdGlvblN1YmplY3RzKCkge1xuICAgIGNvbnN0IGZvcm1BY3Rpb25zID0gdGhpcy5mb3JtU3RydWN0dXJlLmdldEFjdGlvbnMoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JtQWN0aW9ucykpIHtcbiAgICAgIGZvcm1BY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICAgICAgYWN0aW9uLmFjdGlvbkFjdGl2YXRlZC5zdWJzY3JpYmUoY29kZSA9PiB0aGlzLnN0YXJ0QWN0aW9uKGNvZGUpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZVRhYmxlU3ViamVjdHMoKSB7XG4gICAgY29uc3QgZm9ybVRhYmxlcyA9IHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRUYWJsZXMoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JtVGFibGVzKSkge1xuICAgICAgZm9ybVRhYmxlcy5mb3JFYWNoKHRhYmxlID0+IHtcbiAgICAgICAgdGFibGUuaW5saW5lQWN0aW9uVHJpZ2dlci5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zdGFydFRhYmxlQWN0aW9uKGV2ZW50KSk7XG4gICAgICAgIHRhYmxlLmdsb2JhbEFjdGlvblRyaWdnZXIuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc3RhcnRUYWJsZUdsb2JhbEFjdGlvbihldmVudCkpO1xuICAgICAgICB0YWJsZS5yZWNvcmRTZWxlY3Rpb25UcmlnZ2VyLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnN0YXJ0VGFibGVSZWNvcmRTZWxlY3Rpb24oZXZlbnQpKTtcbiAgICAgICAgdGFibGUuc2VsZWN0aW9uQWN0aW9uVHJpZ2dlci5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zdGFydFRhYmxlU2VsZWN0aW9uQWN0aW9uKGV2ZW50KSk7XG4gICAgICAgIHRhYmxlLmdldERhdGFUcmlnZ2VyLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnN0YXJ0VGFibGVHZXREYXRhKGV2ZW50KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmb3JtSW5pdChwYXJhbXMpIHtcbiAgICBsZXQgaW5pdGlhbFN0YXRlID0gdGhpcy5wcmVvY2Vzc0lucHV0UGFyYW1zKHBhcmFtcyk7XG4gICAgaWYgKCF0aGlzLm5hbWUpIHsgcmV0dXJuOyB9XG4gICAgaWYgKCF0aGlzLmRlZmluaXRpb25PYnRhaW5lZCkge1xuICAgICAgdGhpcy5pblNlcnZlclByb2Nlc3MgPSB0cnVlO1xuICAgICAgY29uc3QgZm9ybURlZmluaXRpb24gPSBhd2FpdCB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZS5nZXRGb3JtRGVmaW5pdGlvbih0aGlzLm5hbWUpO1xuICAgICAgdGhpcy5pblNlcnZlclByb2Nlc3MgPSBmYWxzZTtcbiAgICAgIHRoaXMuZm9ybVN0cnVjdHVyZSA9IG5ldyBGb3JtU3RydWN0dXJlQW5kRGF0YShmb3JtRGVmaW5pdGlvbik7XG4gICAgICB0aGlzLmRlZmluaXRpb25PYnRhaW5lZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYW5EYXRhKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zdXBwb3J0U3RhdGUoaW5pdGlhbFN0YXRlKSkge1xuICAgICAgaW5pdGlhbFN0YXRlID0gdGhpcy5mb3JtU3RydWN0dXJlLmRlZmF1bHRTdGF0ZTtcbiAgICB9XG4gICAgdGhpcy5mb3JtU3RydWN0dXJlLmNoYW5nZVN0YXRlKGluaXRpYWxTdGF0ZSB8fCB0aGlzLmZvcm1TdHJ1Y3R1cmUuZGVmYXVsdFN0YXRlKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmlucHV0RGF0YUZpZWxkcykpIHtcbiAgICAgIGZvciAoY29uc3QgaW5wdXRGaWVsZERhdGEgb2YgdGhpcy5pbnB1dERhdGFGaWVsZHMpIHtcbiAgICAgICAgY29uc3QgeyBmaWVsZENvZGUsIGZpZWxkVmFsdWUgfSA9IGlucHV0RmllbGREYXRhO1xuICAgICAgICBpZiAoZmllbGRDb2RlKSB7XG4gICAgICAgICAgdGhpcy5zZXRGaWVsZFZhbHVlKGZpZWxkQ29kZSwgZmllbGRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmllbGRDb2RlcyA9IE9iamVjdC5rZXlzKHRoaXMuaW5wdXREYXRhRmllbGRzID8/IHt9KTtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBmaWVsZENvZGVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBmaWVsZENvZGUgPSBmaWVsZENvZGVzW2luZGV4XTtcbiAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHRoaXMuaW5wdXREYXRhRmllbGRzW2ZpZWxkQ29kZV07XG4gICAgICAgIHRoaXMuc2V0RmllbGRWYWx1ZShmaWVsZENvZGUsIGZpZWxkVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZWNvcmRSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdEZvcm1BY3Rpb24oY29tcG9uZW50Q29uc3RhbnRzLkZPUk1BQ1RJT05fR0VUREFUQSk7XG4gICAgdGhpcy5jaGVja0Vycm9yUmVjb3JkUmVjZWl2ZWQocmVjb3JkUmVzcG9uc2UpO1xuICAgIHRoaXMuZm9ybVZpc2libGUgPSB0cnVlO1xuICAgIHRoaXMuc3Vic2NyaWJlU2VjdGlvbkFjdGl2YXRpb24oKTtcbiAgICB0aGlzLnN1YnNjcmliZUZpZWxkc1N1YmplY3RzKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVBY3Rpb25TdWJqZWN0cygpO1xuICAgIHRoaXMuc3Vic2NyaWJlVGFibGVTdWJqZWN0cygpO1xuICAgIHRoaXMuY3VzdG9tRm9ybVN0YXJ0KCk7XG4gIH1cblxuICBjaGVja0Vycm9yUmVjb3JkUmVjZWl2ZWQocmVjb3JkUmVzcG9uc2UpIHtcbiAgICBjb25zdCB7IGVycm9yIH0gPSByZWNvcmRSZXNwb25zZTtcbiAgICBpZiAoIWVycm9yKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIHRoaXMuZXJyb3JDb2RlID0gcmVjb3JkUmVzcG9uc2UuZXJyb3JDb2RlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gcmVjb3JkUmVzcG9uc2UuZXJyb3JNZXNzYWdlO1xuICAgIHRoaXMuZXJyb3JEZXRhaWwgPSByZWNvcmRSZXNwb25zZS5lcnJvckRldGFpbDtcbiAgfVxuXG4gIGVycm9yT2NjdXJlZCgpIHtcbiAgICByZXR1cm4gKHRoaXMuZXJyb3JDb2RlICE9PSBjb21wb25lbnRDb25zdGFudHMuU0VSVklDRV9FUlJPUkNPREVfTk9FUlJPUik7XG4gIH1cblxuICBjaGFuZ2VTdGF0ZShzdGF0ZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmNoYW5nZVN0YXRlKHN0YXRlKTsgfVxuICBjaGFuZ2VGb3JtTW9kZShzdGF0ZSkgeyByZXR1cm4gdGhpcy5jaGFuZ2VTdGF0ZShzdGF0ZSk7IH1cblxuICBhc3luYyByZXF1ZXN0Rm9ybUFjdGlvbihhY3Rpb25Db2RlLCBhY3Rpb25TdWJqZWN0ID0ge30pIHtcbiAgICBjb25zdCBhY3Rpb25EZXRhaWwgPSB7XG4gICAgICBmb3JtQ29kZTogdGhpcy5uYW1lLFxuICAgICAgZm9ybVN1YmplY3Q6IHRoaXMuZm9ybVN1YmplY3QsXG4gICAgICBjdXJyZW50TW9kZTogdGhpcy5mb3JtU3RydWN0dXJlLnN0YXRlLFxuICAgICAgYWN0aW9uQ29kZSxcbiAgICAgIGFjdGlvblN1YmplY3QsXG4gICAgICB2ZXJzaW9uOiBQQVlMT0FEX1ZFUlNJT04sXG4gICAgICBmb3JtRGF0YTogdGhpcy5mb3JtU3RydWN0dXJlLmdldFBheWxvYWQoKSxcbiAgICAgIGltbXV0YWJsZURhdGE6IHRoaXMuZm9ybVN0cnVjdHVyZS5pbW11dGFibGVEYXRhLFxuICAgIH07XG4gICAgdGhpcy5lcnJvckNvZGUgPSAnMDAnO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5lcnJvckRldGFpbCA9ICcnO1xuICAgIHRoaXMuaW5TZXJ2ZXJQcm9jZXNzID0gdHJ1ZTtcbiAgICBjb25zdCBmb3JtQWN0aW9uUmVzcG9uc2U6IGFueSA9IGF3YWl0IHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLmV4ZWNTZXJ2ZXJBY3Rpb24oYWN0aW9uRGV0YWlsKTtcbiAgICB0aGlzLmluU2VydmVyUHJvY2VzcyA9IGZhbHNlO1xuICAgIGlmIChmb3JtQWN0aW9uUmVzcG9uc2UgJiYgZm9ybUFjdGlvblJlc3BvbnNlLmVycm9yLmVycm9yVHlwZSkge1xuICAgICAgY29uc29sZS5sb2coJ0V4Y2VwY2nDs24gbm8gc29wb3J0YWRhJyk7XG4gICAgfVxuICAgIGlmIChmb3JtQWN0aW9uUmVzcG9uc2UuaGFzRXJyb3IoKSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBmb3JtQWN0aW9uUmVzcG9uc2UuZXJyb3I7XG4gICAgICB0aGlzLmVycm9yQ29kZSA9IGVycm9yLmVycm9yQ29kZTtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3JNZXNzYWdlO1xuICAgICAgdGhpcy5lcnJvckRldGFpbCA9IGVycm9yLmVycm9yRGV0YWlsO1xuICAgIH1cbiAgICBjb25zdCBmb3JtUmVzcG9uc2VEYXRhID0gZm9ybUFjdGlvblJlc3BvbnNlLmdldERhdGEoKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1XaXRoU2VydmVyRGF0YShmb3JtUmVzcG9uc2VEYXRhKTtcbiAgICByZXR1cm4gZm9ybVJlc3BvbnNlRGF0YTtcbiAgfVxuXG4gIHVwZGF0ZUZvcm1XaXRoU2VydmVyRGF0YShmb3JtQ29udGVudCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGN1cnJlbnRNb2RlLCBmb3JtU3ViamVjdCwgYWN0aW9ucywgZmllbGRzLCByZWNvcmRUYWJsZXMsXG4gICAgICByZXR1cm5lZEZpbGUsIGltbXV0YWJsZURhdGEsIGV4dHJhSW5mbyxcbiAgICB9ID0gZm9ybUNvbnRlbnQ7XG4gICAgdGhpcy5jaGFuZ2VTdGF0ZShjdXJyZW50TW9kZSA/PyB0aGlzLmZvcm1TdHJ1Y3R1cmUuc3RhdGUpO1xuICAgIGlmIChmb3JtU3ViamVjdCkgeyB0aGlzLmZvcm1TdWJqZWN0ID0gZm9ybVN1YmplY3Q7IH1cbiAgICBpZiAoYWN0aW9ucyAmJiBhY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgY2hhbmdlZEFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbk9iamVjdCA9IHRoaXMuZ2V0QWN0aW9uT2JqZWN0KGNoYW5nZWRBY3Rpb24uYWN0aW9uQ29kZSk7XG4gICAgICAgIGlmIChhY3Rpb25PYmplY3QpIHsgYWN0aW9uT2JqZWN0LnVwZGF0ZUZyb21TZXJ2ZXIoY2hhbmdlZEFjdGlvbik7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZpZWxkcyAmJiBmaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBjaGFuZ2VkRmllbGQgb2YgZmllbGRzKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkT2JqZWN0ID0gdGhpcy5nZXRGaWVsZE9iamVjdChjaGFuZ2VkRmllbGQuZmllbGRDb2RlKTtcbiAgICAgICAgaWYgKGZpZWxkT2JqZWN0KSB7XG4gICAgICAgICAgZmllbGRPYmplY3QudXBkYXRlRnJvbVNlcnZlcihjaGFuZ2VkRmllbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZWNvcmRUYWJsZXMgJiYgcmVjb3JkVGFibGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgY2hhbmdlZFRhYmxlIG9mIHJlY29yZFRhYmxlcykge1xuICAgICAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGVPYmplY3QoY2hhbmdlZFRhYmxlLnRhYmxlQ29kZSk7XG4gICAgICAgIGlmICh0YWJsZU9iamVjdCkge1xuICAgICAgICAgIHRhYmxlT2JqZWN0LnVwZGF0ZUZyb21TZXJ2ZXIoY2hhbmdlZFRhYmxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmV0dXJuZWRGaWxlICYmIHJldHVybmVkRmlsZS5maWxlKSB7XG4gICAgICB0aGlzLmZpbGVNZ210U2VydmljZXMuc2F2ZUZpbGUocmV0dXJuZWRGaWxlLmZpbGUsIHJldHVybmVkRmlsZS5uYW1lLCByZXR1cm5lZEZpbGUudHlwZSk7XG4gICAgfVxuICAgIHRoaXMuZm9ybVN0cnVjdHVyZS5pbW11dGFibGVEYXRhID0gaW1tdXRhYmxlRGF0YTtcbiAgICB0aGlzLmZvcm1TdHJ1Y3R1cmUuZXh0cmFJbmZvID0gZXh0cmFJbmZvO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbmVqbyBkZSBldmVudCBoYW5kbGVycyBwYXJhIGFjY2lvbmVzIHNvYnJlIGVsIGZvcm11bGFyaW9cbiAgICovXG5cbiAgYWRkU2VjdGlvbkFjdGl2YXRpb24oc2VjdGlvbnMsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3Qgc2VjdGlvblNldCA9IChBcnJheS5pc0FycmF5KHNlY3Rpb25zKSkgPyBzZWN0aW9ucyA6IFtzZWN0aW9uc107XG4gICAgc2VjdGlvblNldC5mb3JFYWNoKChzZWN0aW9uTmFtZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvcm1TZWN0aW9uc0FjdGl2YXRlW3NlY3Rpb25OYW1lXSkge1xuICAgICAgICB0aGlzLmZvcm1TZWN0aW9uc0FjdGl2YXRlW3NlY3Rpb25OYW1lXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtU2VjdGlvbnNBY3RpdmF0ZVtzZWN0aW9uTmFtZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRTZWN0aW9uSW5hY3RpdmF0aW9uKHNlY3Rpb25zLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHNlY3Rpb25TZXQgPSAoQXJyYXkuaXNBcnJheShzZWN0aW9ucykpID8gc2VjdGlvbnMgOiBbc2VjdGlvbnNdO1xuICAgIHNlY3Rpb25TZXQuZm9yRWFjaCgoc2VjdGlvbk5hbWUpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb3JtU2VjdGlvbnNJbmFjdGl2YXRlW3NlY3Rpb25OYW1lXSkge1xuICAgICAgICB0aGlzLmZvcm1TZWN0aW9uc0luYWN0aXZhdGVbc2VjdGlvbk5hbWVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1TZWN0aW9uc0luYWN0aXZhdGVbc2VjdGlvbk5hbWVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkQWN0aW9uTWV0aG9kU3RhcnQoYWN0aW9ucywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCBhY3Rpb25TZXQgPSAoQXJyYXkuaXNBcnJheShhY3Rpb25zKSkgPyBhY3Rpb25zIDogW2FjdGlvbnNdO1xuICAgIGFjdGlvblNldC5mb3JFYWNoKChhY3Rpb25OYW1lKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9ybUFjdGlvbnNTdGFydFthY3Rpb25OYW1lXSkge1xuICAgICAgICB0aGlzLmZvcm1BY3Rpb25zU3RhcnRbYWN0aW9uTmFtZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZm9ybUFjdGlvbnNTdGFydFthY3Rpb25OYW1lXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEFjdGlvbk1ldGhvZEZpbmlzaChhY3Rpb25zLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IGFjdGlvblNldCA9IChBcnJheS5pc0FycmF5KGFjdGlvbnMpKSA/IGFjdGlvbnMgOiBbYWN0aW9uc107XG4gICAgYWN0aW9uU2V0LmZvckVhY2goKGFjdGlvbk5hbWUpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb3JtQWN0aW9uc0ZpbmlzaFthY3Rpb25OYW1lXSkge1xuICAgICAgICB0aGlzLmZvcm1BY3Rpb25zRmluaXNoW2FjdGlvbk5hbWVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1BY3Rpb25zRmluaXNoW2FjdGlvbk5hbWVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbGF1bmNoU2VjdGlvbkFjdGl2YXRpb24oc2VjdGlvbkNvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IHNlY3Rpb25PYmplY3QgPSB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0U2VjdGlvbk9iamVjdChzZWN0aW9uQ29kZSk7XG4gICAgaWYgKCFzZWN0aW9uT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIGNvbnN0IGNsaWVudFNlY3Rpb25NZXRob2RzID0gdGhpcy5mb3JtU2VjdGlvbnNBY3RpdmF0ZVtzZWN0aW9uQ29kZV07XG4gICAgaWYgKGNsaWVudFNlY3Rpb25NZXRob2RzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNsaWVudFNlY3Rpb25NZXRob2Qgb2YgY2xpZW50U2VjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50U2VjdGlvbk1ldGhvZChzZWN0aW9uT2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBsYXVuY2hTZWN0aW9uSW5hY3RpdmF0aW9uKHNlY3Rpb25Db2RlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZWN0aW9uT2JqZWN0ID0gdGhpcy5mb3JtU3RydWN0dXJlLmdldFNlY3Rpb25PYmplY3Qoc2VjdGlvbkNvZGUpO1xuICAgIGlmICghc2VjdGlvbk9iamVjdCkgeyByZXR1cm47IH1cbiAgICBjb25zdCBjbGllbnRTZWN0aW9uTWV0aG9kcyA9IHRoaXMuZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZVtzZWN0aW9uQ29kZV07XG4gICAgaWYgKGNsaWVudFNlY3Rpb25NZXRob2RzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNsaWVudFNlY3Rpb25NZXRob2Qgb2YgY2xpZW50U2VjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50U2VjdGlvbk1ldGhvZChzZWN0aW9uT2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydEFjdGlvbihhY3Rpb25Db2RlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhY3Rpb25PYmplY3QgPSB0aGlzLmdldEFjdGlvbihhY3Rpb25Db2RlKTtcbiAgICBpZiAoIWFjdGlvbk9iamVjdCkgeyByZXR1cm47IH1cbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBhY3Rpb25PYmplY3Quc3RhcnQoKTtcbiAgICBjb25zdCBjbGllbnRBY3Rpb25NZXRob2RzID0gdGhpcy5mb3JtQWN0aW9uc1N0YXJ0W2FjdGlvbkNvZGVdO1xuICAgIGlmIChjbGllbnRBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBjbGllbnRBY3Rpb25NZXRob2Qgb2YgY2xpZW50QWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjb25zdCBjb250aW51ZUFjdGlvblByb21pc2UgPSBjbGllbnRBY3Rpb25NZXRob2QoYWN0aW9uT2JqZWN0KTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjb250aW51ZUFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgY3VyciksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICBhY3Rpb25PYmplY3Quc3RvcCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRTZXJ2ZXJBY3Rpb24oYWN0aW9uT2JqZWN0KTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2VydmVyQWN0aW9uKGFjdGlvbklucHV0KSB7XG4gICAgY29uc3QgYWN0aW9uID0gKHR5cGVvZiBhY3Rpb25JbnB1dCA9PT0gJ3N0cmluZycpXG4gICAgICA/IHRoaXMuZ2V0QWN0aW9uKGFjdGlvbklucHV0KSA6IGFjdGlvbklucHV0O1xuICAgIGxldCBmaW5pc2ggPSB0cnVlO1xuICAgIGxldCBhY3Rpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmIChhY3Rpb24uYmFja2VuZCkge1xuICAgICAgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0Rm9ybUFjdGlvbihhY3Rpb24uYWN0aW9uQ29kZSk7XG4gICAgICBmaW5pc2ggPSAhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgaWYgKGZpbmlzaCkge1xuICAgICAgYXdhaXQgdGhpcy5maW5pc2hBY3Rpb24oYWN0aW9uLCBhY3Rpb25SZXN1bHQpO1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShhY3Rpb24ubmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BsYXlBY3Rpb25TZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICBhY3Rpb24uc3RvcCgpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoQWN0aW9uKGFjdGlvbk9iamVjdCwgYWN0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgZmluaXNoQWN0aW9uTWV0aG9kcyA9IHRoaXMuZm9ybUFjdGlvbnNGaW5pc2hbYWN0aW9uT2JqZWN0LmFjdGlvbkNvZGVdO1xuICAgIGlmIChmaW5pc2hBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBjbGllbnRBY3Rpb25NZXRob2Qgb2YgZmluaXNoQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNsaWVudEFjdGlvbk1ldGhvZChhY3Rpb25PYmplY3QsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBsZXRlR2xvYmFsQWN0aW9uKGFjdGlvbk9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0U2VydmVyQWN0aW9uKGFjdGlvbk9iamVjdCk7XG4gIH1cblxuICAvKipcbiAgICogTWFuZWphZG9yZXMgZGUgZXZlbnRvcyBwYXJhIHZhbGlkYWNpb25lcyBzb2JyZSBjYW1wb3NcbiAgICovXG5cbiAgYWRkRmllbGRJbnB1dFZhbGlkYXRpb24oZmllbGRzLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IGZpZWxkU2V0ID0gKEFycmF5LmlzQXJyYXkoZmllbGRzKSkgPyBmaWVsZHMgOiBbZmllbGRzXTtcbiAgICBmaWVsZFNldC5mb3JFYWNoKChmaWVsZENvZGUpID0+IHtcbiAgICAgIGlmICghdGhpcy5maWVsZElucHV0VmFsaWRhdGlvbltmaWVsZENvZGVdKSB7XG4gICAgICAgIHRoaXMuZmllbGRJbnB1dFZhbGlkYXRpb25bZmllbGRDb2RlXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5maWVsZElucHV0VmFsaWRhdGlvbltmaWVsZENvZGVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRmllbGRWYWxpZGF0aW9uU3RhcnQoZmllbGRzLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IGZpZWxkU2V0ID0gKEFycmF5LmlzQXJyYXkoZmllbGRzKSkgPyBmaWVsZHMgOiBbZmllbGRzXTtcbiAgICBmaWVsZFNldC5mb3JFYWNoKChmaWVsZENvZGUpID0+IHtcbiAgICAgIGlmICghdGhpcy5maWVsZFZhbGlkYXRpb25zU3RhcnRbZmllbGRDb2RlXSkge1xuICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnNTdGFydFtmaWVsZENvZGVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnNTdGFydFtmaWVsZENvZGVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRmllbGRWYWxpZGF0aW9uRmluaXNoKGZpZWxkcywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCBmaWVsZFNldCA9IChBcnJheS5pc0FycmF5KGZpZWxkcykpID8gZmllbGRzIDogW2ZpZWxkc107XG4gICAgZmllbGRTZXQuZm9yRWFjaCgoZmllbGRDb2RlKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZmllbGRWYWxpZGF0aW9uc0ZpbmlzaFtmaWVsZENvZGVdKSB7XG4gICAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9uc0ZpbmlzaFtmaWVsZENvZGVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnNGaW5pc2hbZmllbGRDb2RlXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0RmllbGRJbnB1dFZhbGlkYXRpb24oZmllbGRDb2RlOiBzdHJpbmcsIGludHJpbnNpY1ZhbGlkYXRpb246IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3QgZmllbGRUb1ZhbGlkYXRlID0gdGhpcy5nZXRGaWVsZE9iamVjdChmaWVsZENvZGUpO1xuICAgIGlmICghZmllbGRUb1ZhbGlkYXRlKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGZpZWxkVG9WYWxpZGF0ZS5zZXRFcnJvck1lc3NhZ2UoJycpO1xuICAgIGZpZWxkVG9WYWxpZGF0ZS5zZXRFcnJvckNvZGUoJzAwJyk7XG4gICAgY29uc3QgdmFsaWRhdGlvbkNhbGxiYWNrcyA9IHRoaXMuZmllbGRJbnB1dFZhbGlkYXRpb25bZmllbGRDb2RlXTtcbiAgICBpZiAodmFsaWRhdGlvbkNhbGxiYWNrcykge1xuICAgICAgY29uc3QgY2xpZW50VmFsaWRhdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb25NZXRob2Qgb2YgdmFsaWRhdGlvbkNhbGxiYWNrcykge1xuICAgICAgICBjb25zdCBjb250aW51ZVZhbGlkYXRpb25Qcm9taXNlID0gdmFsaWRhdGlvbk1ldGhvZChmaWVsZFRvVmFsaWRhdGUpO1xuICAgICAgICBjbGllbnRWYWxpZGF0aW9uUHJvbWlzZXMucHVzaChjb250aW51ZVZhbGlkYXRpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudFZhbGlkYXRpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRGaWVsZFZhbGlkYXRpb24oZmllbGRDb2RlOiBzdHJpbmcsIGludHJpbnNpY1ZhbGlkYXRpb246IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3QgZmllbGRUb1ZhbGlkYXRlID0gdGhpcy5nZXRGaWVsZChmaWVsZENvZGUpO1xuICAgIGlmICghZmllbGRUb1ZhbGlkYXRlIHx8ICFpbnRyaW5zaWNWYWxpZGF0aW9uKSB7IHJldHVybjsgfVxuICAgIGZpZWxkVG9WYWxpZGF0ZS5zZXRFcnJvck1lc3NhZ2UoJycpO1xuICAgIGZpZWxkVG9WYWxpZGF0ZS5zZXRFcnJvckNvZGUoJzAwJyk7XG4gICAgY29uc3QgdmFsaWRhdGlvbkNhbGxiYWNrcyA9IHRoaXMuZmllbGRWYWxpZGF0aW9uc1N0YXJ0W2ZpZWxkQ29kZV07XG4gICAgaWYgKHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgIGNvbnN0IGNsaWVudFZhbGlkYXRpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uTWV0aG9kIG9mIHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgICAgY29uc3QgY2xpZW50VmFsaWRhdGlvblByb21pc2UgPSB2YWxpZGF0aW9uTWV0aG9kKGZpZWxkVG9WYWxpZGF0ZSk7XG4gICAgICAgIGNsaWVudFZhbGlkYXRpb25Qcm9taXNlcy5wdXNoKGNsaWVudFZhbGlkYXRpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudFZhbGlkYXRpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50VmFsaWRhdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlVmFsaWRhdGlvbiA9IGNsaWVudFZhbGlkYXRpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRTZXJ2ZXJGaWVsZFZhbGlkYXRpb24oZmllbGRUb1ZhbGlkYXRlKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0U2VydmVyRmllbGRWYWxpZGF0aW9uKGlucHV0RmllbGQpIHtcbiAgICBjb25zdCBmaWVsZE9iaiA9ICh0eXBlb2YgaW5wdXRGaWVsZCA9PT0gJ3N0cmluZycpXG4gICAgICA/IHRoaXMuZ2V0RmllbGQoaW5wdXRGaWVsZCkgOiBpbnB1dEZpZWxkO1xuICAgIGxldCBmaW5pc2ggPSB0cnVlO1xuICAgIGxldCB2YWxpZGF0aW9uUmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoZmllbGRPYmouYmFja2VuZCkge1xuICAgICAgZmllbGRPYmoudmFsaWRhdGluZyA9IHRydWU7XG4gICAgICB2YWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgdGhpc1xuICAgICAgICAucmVxdWVzdEZvcm1BY3Rpb24oY29tcG9uZW50Q29uc3RhbnRzLkZPUk1BQ1RJT05fVkFMSURBVEUsIGZpZWxkT2JqLmZpZWxkQ29kZSk7XG4gICAgICBmaW5pc2ggPSAhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgaWYgKGZpbmlzaCkge1xuICAgICAgYXdhaXQgdGhpcy5maW5pc2hGaWVsZFZhbGlkYXRpb24oZmllbGRPYmosIHZhbGlkYXRpb25SZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWVsZE9iai5zZXRFcnJvckNvZGUodGhpcy5lcnJvckNvZGUpO1xuICAgICAgZmllbGRPYmouc2V0RXJyb3JNZXNzYWdlKHRoaXMuZXJyb3JNZXNzYWdlKTtcbiAgICAgIHRoaXMuZGlzcGxheVZhbGlkYXRpb25TZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICBmaWVsZE9iai52YWxpZGF0aW5nID0gZmFsc2U7XG4gIH1cblxuICBhc3luYyBmaW5pc2hGaWVsZFZhbGlkYXRpb24oZmllbGRPYmplY3QsIHZhbGlkYXRpb25SZXN1bHQpIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uQ2FsbGJhY2tzID0gdGhpcy5maWVsZFZhbGlkYXRpb25zRmluaXNoW2ZpZWxkT2JqZWN0LmZpZWxkQ29kZV07XG4gICAgaWYgKHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb25NZXRob2Qgb2YgdmFsaWRhdGlvbkNhbGxiYWNrcykge1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKHZhbGlkYXRpb25NZXRob2QoZmllbGRPYmplY3QsIHZhbGlkYXRpb25SZXN1bHQpKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjb250aW51ZUZpZWxkVmFsaWRhdGlvbihmaWVsZENvZGUpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFNlcnZlckZpZWxkVmFsaWRhdGlvbihmaWVsZENvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbmVqYWRvcmVzIGRlIGV2ZW50b3MgcGFyYSBhY2Npb25lcyBzb2JyZSBUYWJsYXNcbiAgICovXG5cbiAgYWRkVGFibGVBY3Rpb25TdGFydCh0YWJsZU5hbWUsIGFjdGlvbkNvZGUsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlTmFtZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmxpbmVBY3Rpb25PYmplY3QgPSB0YWJsZU9iamVjdC5nZXRBY3Rpb25PYmplY3QoYWN0aW9uQ29kZSk7XG4gICAgaWYgKCFpbmxpbmVBY3Rpb25PYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVycyA9IG51bGw7XG4gICAgaWYgKHRoaXMudGFibGVBY3Rpb25zU3RhcnRbdGFibGVOYW1lXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZUFjdGlvbnNTdGFydFt0YWJsZU5hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB7fTtcbiAgICAgIHRoaXMudGFibGVBY3Rpb25zU3RhcnRbdGFibGVOYW1lXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgaWYgKCF0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA9IFtdO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gIH1cblxuICBhZGRUYWJsZUFjdGlvbkZpbmlzaCh0YWJsZU5hbWUsIGFjdGlvbkNvZGUsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlTmFtZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmxpbmVBY3Rpb25PYmplY3QgPSB0YWJsZU9iamVjdC5nZXRBY3Rpb25PYmplY3QoYWN0aW9uQ29kZSk7XG4gICAgaWYgKCFpbmxpbmVBY3Rpb25PYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVycyA9IG51bGw7XG4gICAgaWYgKHRoaXMudGFibGVBY3Rpb25zRmluaXNoW3RhYmxlTmFtZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVBY3Rpb25zRmluaXNoW3RhYmxlTmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHt9O1xuICAgICAgdGhpcy50YWJsZUFjdGlvbnNGaW5pc2hbdGFibGVOYW1lXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgaWYgKCF0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA9IFtdO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gIH1cblxuICBhZGRUYWJsZVNlbGVjdGlvblN0YXJ0KHRhYmxlTmFtZSwgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVOYW1lKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnMgPSBudWxsO1xuICAgIGlmICh0aGlzLnRhYmxlU2VsZWN0aW9uc1N0YXJ0W3RhYmxlTmFtZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVTZWxlY3Rpb25zU3RhcnRbdGFibGVOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gW107XG4gICAgICB0aGlzLnRhYmxlU2VsZWN0aW9uc1N0YXJ0W3RhYmxlTmFtZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIHRhYmxlRXZlbnRIYW5kbGVycy5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgfVxuXG4gIGFkZFRhYmxlU2VsZWN0aW9uRmluaXNoKHRhYmxlTmFtZSwgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVOYW1lKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnMgPSBudWxsO1xuICAgIGlmICh0aGlzLnRhYmxlU2VsZWN0aW9uc0ZpbmlzaFt0YWJsZU5hbWVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlU2VsZWN0aW9uc0ZpbmlzaFt0YWJsZU5hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSBbXTtcbiAgICAgIHRoaXMudGFibGVTZWxlY3Rpb25zRmluaXNoW3RhYmxlTmFtZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIHRhYmxlRXZlbnRIYW5kbGVycy5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgfVxuXG4gIGFkZFRhYmxlR2V0RGF0YVN0YXJ0KHRhYmxlTmFtZSwgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVOYW1lKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnMgPSBudWxsO1xuICAgIGlmICh0aGlzLnRhYmxlR2V0RGF0YVN0YXJ0W3RhYmxlTmFtZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVHZXREYXRhU3RhcnRbdGFibGVOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gW107XG4gICAgICB0aGlzLnRhYmxlR2V0RGF0YVN0YXJ0W3RhYmxlTmFtZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIHRhYmxlRXZlbnRIYW5kbGVycy5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgfVxuXG4gIGFkZFRhYmxlR2V0RGF0YUZpbmlzaCh0YWJsZU5hbWUsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlTmFtZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgdGFibGVFdmVudEhhbmRsZXJzID0gbnVsbDtcbiAgICBpZiAodGhpcy50YWJsZUdldERhdGFGaW5pc2hbdGFibGVOYW1lXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZUdldERhdGFGaW5pc2hbdGFibGVOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0ge307XG4gICAgICB0aGlzLnRhYmxlR2V0RGF0YUZpbmlzaFt0YWJsZU5hbWVdID0gdGFibGVFdmVudEhhbmRsZXJzO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnNbR0VUX0RBVEFfQUNUSU9OXSA9IGNhbGxiYWNrTWV0aG9kO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZUdsb2JhbEFjdGlvbih0YWJsZUFjdGlvbkV2ZW50KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRXZlbnQ7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlQ29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCB8fCAhYWN0aW9uQ29kZSkgeyByZXR1cm47IH1cbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCBhY3Rpb24gPSB0YWJsZU9iamVjdC5nZXRBY3Rpb24oYWN0aW9uQ29kZSk7XG4gICAgaWYgKCFhY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgdGFibGVBY3Rpb25EZXRhaWwgPSB7XG4gICAgICB0YWJsZU9iamVjdCxcbiAgICAgIGFjdGlvbixcbiAgICAgIHRhYmxlQ29kZSxcbiAgICAgIGFjdGlvbkNvZGUsXG4gICAgfTtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlQWN0aW9uc1N0YXJ0W3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gOiBudWxsO1xuICAgIGlmICh0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlID0gdGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwpO1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNsaWVudEFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgY3VyciksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRUYWJsZVNlcnZlckdsb2JhbEFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCk7XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VydmVyR2xvYmFsQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsKSB7XG4gICAgY29uc3QgeyB0YWJsZU9iamVjdCwgYWN0aW9uLCB0YWJsZUNvZGUsIGFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICB0YWJsZU9iamVjdC5wdXRPbldhaXQoKTtcbiAgICBsZXQgZmluaXNoID0gdHJ1ZTtcbiAgICBsZXQgYWN0aW9uUmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoYWN0aW9uLmJhY2tlbmQpIHtcbiAgICAgIGNvbnN0IGFjdGlvblN1YmplY3QgPSB7XG4gICAgICAgIHRhYmxlQ29kZSxcbiAgICAgICAgYWN0aW9uVHlwZTogR0xPQkFMX0FDVElPTixcbiAgICAgICAgYWN0aW9uQ29kZVxuICAgICAgfTtcbiAgICAgIGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGNvbXBvbmVudENvbnN0YW50cy5GT1JNQUNUSU9OX1RBQkxFQUNUSU9OLCBhY3Rpb25TdWJqZWN0KTtcbiAgICAgIGZpbmlzaCA9ICF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBpZiAoZmluaXNoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbmlzaFRhYmxlR2xvYmFsQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpO1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShhY3Rpb24ubmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BsYXlUYWJsZVNlcnZlckVycm9yKCk7XG4gICAgfVxuICAgIHRhYmxlT2JqZWN0LmZyZWVXYWl0aW5nKCk7XG4gIH1cblxuICBhc3luYyBmaW5pc2hUYWJsZUdsb2JhbEFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVBY3Rpb25zRmluaXNoW3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gOiBudWxsO1xuICAgIGlmICh0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKHRhYmxlQWN0aW9uTWV0aG9kKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlQWN0aW9uKHRhYmxlQWN0aW9uRXZlbnQpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uQ29kZSwgYWN0aW9uRGV0YWlsIH0gPSB0YWJsZUFjdGlvbkV2ZW50O1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZUNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbkNvZGUpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgeyByZWNvcmRJZCwgcmVjb3JkRGF0YSB9ID0gYWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IGFjdGlvbiA9IHRhYmxlT2JqZWN0LmdldEFjdGlvbihhY3Rpb25Db2RlKTtcbiAgICBpZiAoIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICBjb25zdCB0YWJsZUFjdGlvbkRldGFpbCA9IHtcbiAgICAgIHRhYmxlT2JqZWN0LFxuICAgICAgYWN0aW9uLFxuICAgICAgdGFibGVDb2RlLFxuICAgICAgYWN0aW9uQ29kZSxcbiAgICAgIHJlY29yZElkLFxuICAgICAgcmVjb3JkRGF0YVxuICAgIH07XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZUFjdGlvbnNTdGFydFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZSA9IHRhYmxlQWN0aW9uTWV0aG9kKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjbGllbnRBY3Rpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZUFjdGlvbiA9IGNsaWVudEFjdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIGN1cnIpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVBY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0VGFibGVTZXJ2ZXJBY3Rpb24odGFibGVBY3Rpb25EZXRhaWwpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVNlcnZlckFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCkge1xuICAgIGNvbnN0IHsgdGFibGVPYmplY3QsIGFjdGlvbiwgdGFibGVDb2RlLCBhY3Rpb25Db2RlLCByZWNvcmRJZCwgcmVjb3JkRGF0YSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgaWYgKCF0YWJsZU9iamVjdCB8fCAhYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIHRhYmxlT2JqZWN0LnB1dE9uV2FpdCgpO1xuICAgIGxldCBmaW5pc2ggPSB0cnVlO1xuICAgIGxldCBhY3Rpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmIChhY3Rpb24uYmFja2VuZCkge1xuICAgICAgY29uc3QgYWN0aW9uU3ViamVjdCA9IHtcbiAgICAgICAgdGFibGVDb2RlLFxuICAgICAgICBhY3Rpb25UeXBlOiBjb21wb25lbnRDb25zdGFudHMuRk9STVRBQkxFQUNUSU9OX0lOTElORSxcbiAgICAgICAgYWN0aW9uQ29kZSxcbiAgICAgICAgdGFibGVSZWNvcmRJZDogcmVjb3JkSWQsXG4gICAgICAgIHRhYmxlUmVjb3JkRGF0YTogcmVjb3JkRGF0YVxuICAgICAgfTtcbiAgICAgIGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGNvbXBvbmVudENvbnN0YW50cy5GT1JNQUNUSU9OX1RBQkxFQUNUSU9OLCBhY3Rpb25TdWJqZWN0KTtcbiAgICAgIGZpbmlzaCA9ICF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBpZiAoZmluaXNoKSB7XG4gICAgICB0aGlzLmZpbmlzaFRhYmxlQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpO1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShhY3Rpb24ubmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BsYXlUYWJsZVNlcnZlckVycm9yKCk7XG4gICAgfVxuICAgIHRhYmxlT2JqZWN0LmZyZWVXYWl0aW5nKCk7XG4gIH1cblxuICBjb21wbGV0ZUlubGluZUFjdGlvbih0YWJsZUFjdGlvbikge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0VGFibGVTZXJ2ZXJBY3Rpb24odGFibGVBY3Rpb24pO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoVGFibGVBY3Rpb24odGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlQWN0aW9uc0ZpbmlzaFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaCh0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVJlY29yZFNlbGVjdGlvbih0YWJsZUFjdGlvbkV2ZW50KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkRldGFpbCB9ID0gdGFibGVBY3Rpb25FdmVudDtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVDb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IHsgcmVjb3JkSWQsIHJlY29yZERhdGEgfSA9IGFjdGlvbkRldGFpbDtcbiAgICBjb25zdCB0YWJsZVNlbGVjdGlvbkRldGFpbCA9IHtcbiAgICAgIHRhYmxlT2JqZWN0LFxuICAgICAgdGFibGVDb2RlLFxuICAgICAgcmVjb3JkSWQsXG4gICAgICByZWNvcmREYXRhXG4gICAgfTtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlU2VsZWN0aW9uc1N0YXJ0W3RhYmxlQ29kZV07XG4gICAgaWYgKHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVTZWxlY3Rpb25NZXRob2Qgb2YgdGFibGVFdmVudEhhbmRsZXJzKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2UgPSB0YWJsZVNlbGVjdGlvbk1ldGhvZCh0YWJsZVNlbGVjdGlvbkRldGFpbCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFRhYmxlU2VydmVyUmVjb3JkU2VsZWN0aW9uKHRhYmxlU2VsZWN0aW9uRGV0YWlsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZXJ2ZXJSZWNvcmRTZWxlY3Rpb24odGFibGVTZWxlY3Rpb25EZXRhaWwpIHtcbiAgICBjb25zdCB7IHRhYmxlT2JqZWN0LCB0YWJsZUNvZGUsIHJlY29yZElkLCByZWNvcmREYXRhIH0gPSB0YWJsZVNlbGVjdGlvbkRldGFpbDtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIHRhYmxlT2JqZWN0LnB1dE9uV2FpdCgpO1xuICAgIGxldCBmaW5pc2ggPSB0cnVlO1xuICAgIGxldCBhY3Rpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmICh0YWJsZU9iamVjdC5zZWxlY3Rpb25CYWNrZW5kKSB7XG4gICAgICBjb25zdCBhY3Rpb25TdWJqZWN0OiBhbnkgPSB7XG4gICAgICAgIHRhYmxlQ29kZSxcbiAgICAgICAgYWN0aW9uVHlwZTogY29tcG9uZW50Q29uc3RhbnRzLkZPUk1UQUJMRUFDVElPTl9ST1dTRUxFQ1RJT04sXG4gICAgICAgIGFjdGlvbkNvZGU6IG51bGwsXG4gICAgICAgIHRhYmxlUmVjb3JkSWQ6IHJlY29yZElkLFxuICAgICAgICB0YWJsZVJlY29yZERhdGE6IHJlY29yZERhdGFcbiAgICAgIH07XG4gICAgICBhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihjb21wb25lbnRDb25zdGFudHMuRk9STUFDVElPTl9UQUJMRUFDVElPTiwgYWN0aW9uU3ViamVjdCk7XG4gICAgICBmaW5pc2ggPSAhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgaWYgKGZpbmlzaCkge1xuICAgICAgdGhpcy5maW5pc2hUYWJsZVJlY29yZFNlbGVjdGlvbih0YWJsZVNlbGVjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5VGFibGVTZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICB0YWJsZU9iamVjdC5mcmVlV2FpdGluZygpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoVGFibGVSZWNvcmRTZWxlY3Rpb24odGFibGVTZWxlY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlIH0gPSB0YWJsZVNlbGVjdGlvbkRldGFpbDtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlU2VsZWN0aW9uc0ZpbmlzaFt0YWJsZUNvZGVdO1xuICAgIGlmICh0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlU2VsZWN0aW9uTWV0aG9kIG9mIHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKHRhYmxlU2VsZWN0aW9uTWV0aG9kKHRhYmxlU2VsZWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VsZWN0aW9uQWN0aW9uKHRhYmxlQWN0aW9uRXZlbnQpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uQ29kZSwgYWN0aW9uRGV0YWlsIH0gPSB0YWJsZUFjdGlvbkV2ZW50O1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZUNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbkNvZGUpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgeyBzZWxlY3RlZFJlY29yZHMgfSA9IGFjdGlvbkRldGFpbDtcbiAgICBjb25zdCBhY3Rpb24gPSB0YWJsZU9iamVjdC5nZXRBY3Rpb24oYWN0aW9uQ29kZSk7XG4gICAgaWYgKCFhY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgdGFibGVBY3Rpb25EZXRhaWwgPSB7XG4gICAgICB0YWJsZU9iamVjdCxcbiAgICAgIGFjdGlvbixcbiAgICAgIHRhYmxlQ29kZSxcbiAgICAgIGFjdGlvbkNvZGUsXG4gICAgICBzZWxlY3RlZFJlY29yZHNcbiAgICB9O1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVBY3Rpb25zU3RhcnRbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2UgPSB0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFRhYmxlU2VydmVyU2VsZWN0aW9uQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZXJ2ZXJTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25EZXRhaWwpIHtcbiAgICBjb25zdCB7IHRhYmxlT2JqZWN0LCBhY3Rpb24sIHRhYmxlQ29kZSwgYWN0aW9uQ29kZSwgc2VsZWN0ZWRSZWNvcmRzIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgdGFibGVPYmplY3QucHV0T25XYWl0KCk7XG4gICAgbGV0IGZpbmlzaCA9IHRydWU7XG4gICAgbGV0IGFjdGlvblJlc3VsdCA9IG51bGw7XG4gICAgaWYgKGFjdGlvbi5iYWNrZW5kKSB7XG4gICAgICBjb25zdCBhY3Rpb25TdWJqZWN0ID0ge1xuICAgICAgICB0YWJsZUNvZGUsXG4gICAgICAgIGFjdGlvblR5cGU6IGNvbXBvbmVudENvbnN0YW50cy5GT1JNVEFCTEVBQ1RJT05fU0VMRUNUSU9OLFxuICAgICAgICBhY3Rpb25Db2RlLFxuICAgICAgICBzZWxlY3RlZFJlY29yZHNcbiAgICAgIH07XG4gICAgICBhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihjb21wb25lbnRDb25zdGFudHMuRk9STUFDVElPTl9UQUJMRUFDVElPTiwgYWN0aW9uU3ViamVjdCk7XG4gICAgICBmaW5pc2ggPSAhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgaWYgKGZpbmlzaCkge1xuICAgICAgdGhpcy5maW5pc2hUYWJsZVNlbGVjdGlvbkFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KTtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoYWN0aW9uLm5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5VGFibGVTZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICB0YWJsZU9iamVjdC5mcmVlV2FpdGluZygpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoVGFibGVTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlQWN0aW9uc0ZpbmlzaFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaCh0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZUdldERhdGEodGFibGVBY3Rpb25FdmVudCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlIH0gPSB0YWJsZUFjdGlvbkV2ZW50O1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZUNvZGUpO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uRGV0YWlsID0ge1xuICAgICAgdGFibGVPYmplY3QsXG4gICAgICB0YWJsZUNvZGVcbiAgICB9O1xuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVHZXREYXRhU3RhcnRbdGFibGVDb2RlXTtcbiAgICBpZiAodGFibGVFdmVudEhhbmRsZXJzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZSA9IHRhYmxlQWN0aW9uTWV0aG9kKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjbGllbnRBY3Rpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZUFjdGlvbiA9IGNsaWVudEFjdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIGN1cnIpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVBY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0VGFibGVTZXJ2ZXJHZXREYXRhKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZXJ2ZXJHZXREYXRhKHRhYmxlQWN0aW9uRGV0YWlsKSB7XG4gICAgY29uc3QgeyB0YWJsZU9iamVjdCwgdGFibGVDb2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICB0YWJsZU9iamVjdC5wdXRPbldhaXQoKTtcbiAgICBjb25zdCBhY3Rpb25TdWJqZWN0ID0geyB0YWJsZUNvZGUgfTtcbiAgICBjb25zdCBhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAucmVxdWVzdEZvcm1BY3Rpb24oY29tcG9uZW50Q29uc3RhbnRzLkZPUk1BQ1RJT05fR0VUVEFCTEVEQVRBLCBhY3Rpb25TdWJqZWN0KTtcbiAgICBpZiAodGhpcy5lcnJvck9jY3VyZWQoKSkge1xuICAgICAgdGhpcy5kaXNwbGF5VGFibGVTZXJ2ZXJFcnJvcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbmlzaFRhYmxlR2V0RGF0YSh0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KTtcbiAgICB9XG4gICAgdGFibGVPYmplY3QuZnJlZVdhaXRpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFRhYmxlR2V0RGF0YSh0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIHRhYmxlQWN0aW9uQ29kZSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZUFjdGlvbnNGaW5pc2hbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1t0YWJsZUFjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaCh0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tTZWN0aW9uUmVxdWlyZWRGaWVsZHMoc2VjdGlvbkNvZGUsIHJlcUZpZWxkTWVzc2FnZT8pIHtcbiAgICB0aGlzLmNsZWFuRXJyb3JGaWVsZHMobnVsbCwgc2VjdGlvbkNvZGUpO1xuICAgIGNvbnN0IHJlcXVpcmVkRmllbGRNZXNzYWdlID0gcmVxRmllbGRNZXNzYWdlIHx8IFJFUVVJUkVEX0ZJRUxEX01FU1NBR0U7XG4gICAgY29uc3QgbnVtRXJyb3JzID0gdGhpcy50YWdGaWVsZHNXaXRoRXJyb3IodGhpcy5nZXRSZXF1aXJlZEVtcHR5RmllbGRzKG51bGwsXG4gICAgICBzZWN0aW9uQ29kZSksIG51bGwsIHJlcXVpcmVkRmllbGRNZXNzYWdlKTtcbiAgICByZXR1cm4gKG51bUVycm9ycyA9PT0gMCk7XG4gIH1cblxuICB2YWxpZGF0ZVNlY3Rpb25Db25zaXN0ZW5jeShzZWN0aW9uQ29kZSwgcmVxRmllbGRNZXNzYWdlPykge1xuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IGNvbXBsZXRlRmllbGRzID0gdGhpcy5jaGVja1NlY3Rpb25SZXF1aXJlZEZpZWxkcyhzZWN0aW9uQ29kZSwgcmVxRmllbGRNZXNzYWdlKTtcbiAgICBpZiAoIWNvbXBsZXRlRmllbGRzKSB7XG4gICAgICB0aGlzLnNldEVycm9yKGNvbXBvbmVudENvbnN0YW50cy5GT1JNRVJST1JfVFlQRV9XQVJOSU5HLFxuICAgICAgICBjb21wb25lbnRDb25zdGFudHMuRk9STUVSUk9SX1ZBTElEQVRJT05fVElUTEUsXG4gICAgICAgIGNvbXBvbmVudENvbnN0YW50cy5GT1JNRVJST1JfUkVRVUlSRURfRklFTERTKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xuICAgIGNvbnN0IHJlcXVpcmVkRW1wdHlGaWVsZHMgPSB0aGlzLmdldFJlcXVpcmVkRW1wdHlGaWVsZHMobnVsbCwgc2VjdGlvbkNvZGUpO1xuICAgIGlmIChyZXF1aXJlZEVtcHR5RmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhbGlkYXRpb25FcnJvciA9IHRydWU7XG4gICAgICB0aGlzLnNldEVycm9yKGNvbXBvbmVudENvbnN0YW50cy5GT1JNRVJST1JfVFlQRV9XQVJOSU5HLFxuICAgICAgICBjb21wb25lbnRDb25zdGFudHMuRk9STUVSUk9SX1ZBTElEQVRJT05fVElUTEUsXG4gICAgICAgIGNvbXBvbmVudENvbnN0YW50cy5GT1JNRVJST1JfUkVRVUlSRURfRklFTERTKTtcbiAgICAgIHRoaXMudGFnRmllbGRzV2l0aEVycm9yKHJlcXVpcmVkRW1wdHlGaWVsZHMsIG51bGwsXG4gICAgICAgIGNvbXBvbmVudENvbnN0YW50cy5GSUVMRF9SRVFVSVJFRF9NRVNTQUdFKTtcbiAgICAgIGZvciAoY29uc3QgZmllbGRDb2RlIG9mIHJlcXVpcmVkRW1wdHlGaWVsZHMpIHtcbiAgICAgICAgY29uc3QgcmVxdWlyZWRFbXB0eUZpZWxkID0gdGhpcy5nZXRGaWVsZChmaWVsZENvZGUpO1xuICAgICAgICBpZiAocmVxdWlyZWRFbXB0eUZpZWxkICYmIHJlcXVpcmVkRW1wdHlGaWVsZC53aWRnZXRcbiAgICAgICAgICAmJiByZXF1aXJlZEVtcHR5RmllbGQud2lkZ2V0LmZvY3VzKSB7XG4gICAgICAgICAgcmVxdWlyZWRFbXB0eUZpZWxkLndpZGdldC5mb2N1cygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkYXRpb25Jc3N1ZUZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzV2l0aFZhbGlkYXRpb25Jc3N1ZXMobnVsbCxcbiAgICAgIHNlY3Rpb25Db2RlKTtcbiAgICBpZiAoIXZhbGlkYXRpb25FcnJvciAmJiB2YWxpZGF0aW9uSXNzdWVGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgdmFsaWRhdGlvbkVycm9yID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0RXJyb3IoY29tcG9uZW50Q29uc3RhbnRzLkZPUk1FUlJPUl9UWVBFX1dBUk5JTkcsXG4gICAgICAgIGNvbXBvbmVudENvbnN0YW50cy5GT1JNRVJST1JfVkFMSURBVElPTl9USVRMRSxcbiAgICAgICAgY29tcG9uZW50Q29uc3RhbnRzLkZPUk1FUlJPUl9WQUxJREFUSU9OX0ZJRUxEUyk7XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkQ29kZSBvZiB2YWxpZGF0aW9uSXNzdWVGaWVsZHMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbklzc3VlRmllbGQgPSB0aGlzLmdldEZpZWxkKGZpZWxkQ29kZSk7XG4gICAgICAgIGlmICh2YWxpZGF0aW9uSXNzdWVGaWVsZCAmJiB2YWxpZGF0aW9uSXNzdWVGaWVsZC53aWRnZXRcbiAgICAgICAgICAmJiB2YWxpZGF0aW9uSXNzdWVGaWVsZC53aWRnZXQuZm9jdXMpIHtcbiAgICAgICAgICB2YWxpZGF0aW9uSXNzdWVGaWVsZC53aWRnZXQuZm9jdXMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yO1xuICB9XG5cbiAgY29weVRhYmxlUmVjb3JkVG9GaWVsZHModGFibGVPYmosIG1hcHBpbmdUYWJsZSA9IG51bGwpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVPYmoudGFibGVDb2RlKTtcbiAgICBjb25zdCB0YWJsZVJlY29yZCA9IHRhYmxlT2JqZWN0LmdldFRhYmxlUmVjb3JkKHRhYmxlT2JqLnJlY29yZElkKTtcbiAgICBjb25zdCBjb2x1bW5OYW1lcyA9IHRhYmxlT2JqZWN0LmNvbHVtbk5hbWVzO1xuICAgIGZvciAoY29uc3QgY29sdW1uTmFtZSBvZiBjb2x1bW5OYW1lcykge1xuICAgICAgY29uc3QgY29sdW1uVmFsdWUgPSB0YWJsZVJlY29yZC5nZXRGaWVsZFZhbHVlKGNvbHVtbk5hbWUpID8/ICcnO1xuICAgICAgY29uc3QgZmllbGRDb2RlID0gbWFwcGluZ1RhYmxlPy5bY29sdW1uTmFtZV0gPz8gY29sdW1uTmFtZTtcbiAgICAgIHRoaXMuc2V0RmllbGRWYWx1ZShmaWVsZENvZGUsIGNvbHVtblZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU29wb3J0ZSByZWdpc3Ryb3MgZW4gdGFibGFzIHF1ZSBzZSBlZGl0YW4gZW4gY2FtcG9zIGRlbCBmb3JtdWxhcmlvXG4gICAqL1xuXG4gIGRlZmluZUVkaXRpb25UYWJsZSh0YWJsZUVkaXRpb25EZWYpIHtcbiAgICBjb25zdCB7IGNvbHVtbkZpZWxkTWFwcGluZywgcmVjb3JkQ2FwdHVyZUZpZWxkcywgc3RhcnRDb2xsYXBzZWQgfSA9IHRhYmxlRWRpdGlvbkRlZjtcbiAgICB0YWJsZUVkaXRpb25EZWYuc3RhcnRDb2xsYXBzZWQgPSAodHlwZW9mIHN0YXJ0Q29sbGFwc2VkICE9PSAndW5kZWZpbmVkJylcbiAgICAgID8gc3RhcnRDb2xsYXBzZWQgOiB0cnVlO1xuXG4gICAgY29uc3QgZmllbGRzTWFwcGluZ1RhYmxlID0ge307XG4gICAgY29uc3QgZmllbGRzVG9DbGVhciA9IFtdO1xuICAgIGZvciAoY29uc3QgY29sdW1uTWFwIG9mIGNvbHVtbkZpZWxkTWFwcGluZykge1xuICAgICAgY29uc3QgW2NvbHVtbk5hbWUsIGZvcm1GaWVsZF0gPSBjb2x1bW5NYXA7XG4gICAgICBmaWVsZHNNYXBwaW5nVGFibGVbY29sdW1uTmFtZV0gPSBmb3JtRmllbGQ7XG4gICAgICBmaWVsZHNUb0NsZWFyLnB1c2goZm9ybUZpZWxkKTtcbiAgICB9XG4gICAgdGFibGVFZGl0aW9uRGVmLmZpZWxkc01hcHBpbmdUYWJsZSA9IGZpZWxkc01hcHBpbmdUYWJsZTtcbiAgICB0YWJsZUVkaXRpb25EZWYuZmllbGRzVG9DbGVhciA9IGZpZWxkc1RvQ2xlYXI7XG5cbiAgICBjb25zdCB7IHRhYmxlTmFtZSwgbmV3UmVjb3JkQWN0aW9uTmFtZSwgc2F2ZVJlY29yZEFjdGlvbk5hbWUsXG4gICAgICBjYW5jZWxTYXZlUmVjb3JkQWN0aW9uTmFtZSwgdGFibGVFZGl0UmVjb3JkQWN0aW9uTmFtZSwgZW5hYmxlUmVjb3JkRWRpdGlvblxuICAgIH0gPSB0YWJsZUVkaXRpb25EZWY7XG5cbiAgICB0aGlzLmFkZEFjdGlvbk1ldGhvZFN0YXJ0KG5ld1JlY29yZEFjdGlvbk5hbWUsICgpID0+IHtcbiAgICAgIHRoaXMuY2xlYW5GaWVsZHMoZmllbGRzVG9DbGVhciwgbnVsbCk7XG4gICAgICB0aGlzLnNob3dGaWVsZHMocmVjb3JkQ2FwdHVyZUZpZWxkcyk7XG4gICAgICBpZiAoIWVuYWJsZVJlY29yZEVkaXRpb24pIHtcbiAgICAgICAgdGhpcy5lbmFibGVSZWNvcmRFZGl0aW9uKHRhYmxlRWRpdGlvbkRlZik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbmFibGVSZWNvcmRFZGl0aW9uKHRhYmxlRWRpdGlvbkRlZik7XG4gICAgICB9XG4gICAgICB0aGlzLmhpZGVBY3Rpb24obmV3UmVjb3JkQWN0aW9uTmFtZSk7XG4gICAgICB0aGlzLnNob3dBY3Rpb24oY2FuY2VsU2F2ZVJlY29yZEFjdGlvbk5hbWUpO1xuICAgICAgdGhpcy5zaG93QWN0aW9uKHNhdmVSZWNvcmRBY3Rpb25OYW1lKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICAgIGNvbnN0IHsgcmVjb3JkRWRpdGlvblZhbGlkYXRlLCBkaXNhYmxlUmVjb3JkRWRpdGlvbiB9ID0gdGFibGVFZGl0aW9uRGVmO1xuICAgIHRoaXMuYWRkQWN0aW9uTWV0aG9kU3RhcnQoc2F2ZVJlY29yZEFjdGlvbk5hbWUsICgpID0+IHtcbiAgICAgIHJldHVybiAoIXJlY29yZEVkaXRpb25WYWxpZGF0ZSkgPyB0aGlzLnJlY29yZEVkaXRpb25WYWxpZGF0ZSh0YWJsZUVkaXRpb25EZWYpXG4gICAgICAgIDogcmVjb3JkRWRpdGlvblZhbGlkYXRlKHRhYmxlRWRpdGlvbkRlZik7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRBY3Rpb25NZXRob2RGaW5pc2goc2F2ZVJlY29yZEFjdGlvbk5hbWUsICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5lcnJvck9jY3VyZWQoKSkge1xuICAgICAgICByZXR1cm4gKCFkaXNhYmxlUmVjb3JkRWRpdGlvbikgPyB0aGlzLmRpc2FibGVSZWNvcmRFZGl0aW9uKHRhYmxlRWRpdGlvbkRlZilcbiAgICAgICAgICA6IGRpc2FibGVSZWNvcmRFZGl0aW9uKHRhYmxlRWRpdGlvbkRlZik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5hZGRBY3Rpb25NZXRob2RTdGFydChjYW5jZWxTYXZlUmVjb3JkQWN0aW9uTmFtZSwgKCkgPT4ge1xuICAgICAgcmV0dXJuICghZGlzYWJsZVJlY29yZEVkaXRpb24pID8gdGhpcy5kaXNhYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYpXG4gICAgICAgIDogZGlzYWJsZVJlY29yZEVkaXRpb24odGFibGVFZGl0aW9uRGVmKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZFRhYmxlQWN0aW9uU3RhcnQodGFibGVOYW1lLCB0YWJsZUVkaXRSZWNvcmRBY3Rpb25OYW1lLFxuICAgICAgKHRibEFjdE9iaikgPT4ge1xuICAgICAgICByZXR1cm4gKCFlbmFibGVSZWNvcmRFZGl0aW9uKVxuICAgICAgICAgID8gdGhpcy5lbmFibGVSZWNvcmRFZGl0aW9uKHRhYmxlRWRpdGlvbkRlZiwgdGJsQWN0T2JqKVxuICAgICAgICAgIDogZW5hYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYsIHRibEFjdE9iaik7XG4gICAgICB9KTtcbiAgICBpZiAodGFibGVFZGl0aW9uRGVmLnN0YXJ0Q29sbGFwc2VkKSB7XG4gICAgICByZXR1cm4gKCF0YWJsZUVkaXRpb25EZWYuZGlzYWJsZVJlY29yZEVkaXRpb24pXG4gICAgICAgID8gdGhpcy5kaXNhYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYpXG4gICAgICAgIDogdGFibGVFZGl0aW9uRGVmLmRpc2FibGVSZWNvcmRFZGl0aW9uKHRhYmxlRWRpdGlvbkRlZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoIXRhYmxlRWRpdGlvbkRlZi5lbmFibGVSZWNvcmRFZGl0aW9uKVxuICAgICAgICA/IHRoaXMuZW5hYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYpXG4gICAgICAgIDogdGFibGVFZGl0aW9uRGVmLmVuYWJsZVJlY29yZEVkaXRpb24odGFibGVFZGl0aW9uRGVmLCBudWxsKTtcbiAgICB9XG4gIH1cblxuICBlbmFibGVSZWNvcmRFZGl0aW9uKHRhYmxlRWRpdGlvbkRlZiwgdGFibGVBY3Rpb25PYmplY3QgPSBudWxsKSB7XG4gICAgaWYgKHRhYmxlQWN0aW9uT2JqZWN0KSB7XG4gICAgICB0aGlzLmNvcHlUYWJsZVJlY29yZFRvRmllbGRzKHRhYmxlQWN0aW9uT2JqZWN0LCB0YWJsZUVkaXRpb25EZWYuZmllbGRzTWFwcGluZ1RhYmxlKTtcbiAgICB9XG4gICAgdGhpcy5zaG93RmllbGRzKHRhYmxlRWRpdGlvbkRlZi5yZWNvcmRDYXB0dXJlRmllbGRzKTtcbiAgICB0aGlzLmhpZGVBY3Rpb24odGFibGVFZGl0aW9uRGVmLm5ld1JlY29yZEFjdGlvbk5hbWUpO1xuICAgIHRoaXMuc2hvd0FjdGlvbih0YWJsZUVkaXRpb25EZWYuY2FuY2VsU2F2ZVJlY29yZEFjdGlvbk5hbWUpO1xuICAgIHRoaXMuc2hvd0FjdGlvbih0YWJsZUVkaXRpb25EZWYuc2F2ZVJlY29yZEFjdGlvbk5hbWUpO1xuICAgIGlmICh0YWJsZUVkaXRpb25EZWYuZmllbGRzVG9UcmlnZ2VyVmFsaWRhdGlvblxuICAgICAgJiYgdGFibGVFZGl0aW9uRGVmLmZpZWxkc1RvVHJpZ2dlclZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBmaWVsZE5hbWUgb2YgdGFibGVFZGl0aW9uRGVmLmZpZWxkc1RvVHJpZ2dlclZhbGlkYXRpb24pIHtcbiAgICAgICAgdGhpcy5zdGFydEZpZWxkVmFsaWRhdGlvbihmaWVsZE5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGRpc2FibGVSZWNvcmRFZGl0aW9uKHRhYmxlRGVmaW5pdGlvbikge1xuICAgIHRoaXMuY2xlYW5GaWVsZHModGFibGVEZWZpbml0aW9uLmZpZWxkc1RvQ2xlYXIsIG51bGwpO1xuICAgIHRoaXMuaGlkZUZpZWxkcyh0YWJsZURlZmluaXRpb24ucmVjb3JkQ2FwdHVyZUZpZWxkcyk7XG4gICAgdGhpcy5zaG93QWN0aW9uKHRhYmxlRGVmaW5pdGlvbi5uZXdSZWNvcmRBY3Rpb25OYW1lKTtcbiAgICB0aGlzLmhpZGVBY3Rpb24odGFibGVEZWZpbml0aW9uLmNhbmNlbFNhdmVSZWNvcmRBY3Rpb25OYW1lKTtcbiAgICB0aGlzLmhpZGVBY3Rpb24odGFibGVEZWZpbml0aW9uLnNhdmVSZWNvcmRBY3Rpb25OYW1lKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJlY29yZEVkaXRpb25WYWxpZGF0ZSh0YWJsZUVkaXRpb25EZWYpIHtcbiAgICBjb25zdCB7IHJlY29yZENhcHR1cmVGaWVsZHMgfSA9IHRhYmxlRWRpdGlvbkRlZjtcbiAgICBsZXQgdmFsaWRhdGlvbk9rID0gdHJ1ZTtcbiAgICBjb25zdCByZXF1aXJlZEVtcHR5RmllbGRzID0gdGhpcy5nZXRSZXF1aXJlZEVtcHR5RmllbGRzKHJlY29yZENhcHR1cmVGaWVsZHMsIG51bGwpO1xuICAgIGlmIChyZXF1aXJlZEVtcHR5RmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhbGlkYXRpb25PayA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRFcnJvcihjb21wb25lbnRDb25zdGFudHMuRk9STUVSUk9SX1RZUEVfV0FSTklORyxcbiAgICAgICAgY29tcG9uZW50Q29uc3RhbnRzLkZPUk1FUlJPUl9WQUxJREFUSU9OX1RJVExFLFxuICAgICAgICBjb21wb25lbnRDb25zdGFudHMuRk9STUVSUk9SX1JFUVVJUkVEX0ZJRUxEUyk7XG4gICAgICB0aGlzLnRhZ0ZpZWxkc1dpdGhFcnJvcihyZXF1aXJlZEVtcHR5RmllbGRzLCBudWxsLFxuICAgICAgICBjb21wb25lbnRDb25zdGFudHMuRklFTERfUkVRVUlSRURfTUVTU0FHRSk7XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkYXRpb25Jc3N1ZUZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzV2l0aFZhbGlkYXRpb25Jc3N1ZXMocmVjb3JkQ2FwdHVyZUZpZWxkcywgbnVsbCk7XG4gICAgaWYgKHZhbGlkYXRpb25Jc3N1ZUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YWxpZGF0aW9uT2sgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0RXJyb3IoY29tcG9uZW50Q29uc3RhbnRzLkZPUk1FUlJPUl9UWVBFX1dBUk5JTkcsXG4gICAgICAgIGNvbXBvbmVudENvbnN0YW50cy5GT1JNRVJST1JfVkFMSURBVElPTl9USVRMRSwgY29tcG9uZW50Q29uc3RhbnRzLkZPUk1FUlJPUl9WQUxJREFUSU9OX0ZJRUxEUyk7XG4gICAgfVxuICAgIHJldHVybiB2YWxpZGF0aW9uT2s7XG4gIH1cbn1cbiJdfQ==
|