@eqproject/eqp-dynamic-module 2.6.42 → 2.6.43
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/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +11 -3
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +9 -1
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +9 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/package.json +1 -1
package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs
CHANGED
|
@@ -6,7 +6,7 @@ import { UtilityHelperService } from '../../../../services/utilityHelper.service
|
|
|
6
6
|
import { ParamTypeEnum } from './../../../../models/endPointConfiguration.model';
|
|
7
7
|
import { GlobalService } from '../../../../services/global.service';
|
|
8
8
|
import { LogicOperator } from '../../../../models/logicOperator.model';
|
|
9
|
-
import { FireTrigger } from '../../../../models/trigger.model';
|
|
9
|
+
import { FireTrigger, TriggerPropertyTypeEnum } from '../../../../models/trigger.model';
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
11
|
import * as i1 from "../../../../services/utilityHelper.services";
|
|
12
12
|
import * as i2 from "@angular/material/button";
|
|
@@ -682,9 +682,17 @@ export class AddFormRecordComponent {
|
|
|
682
682
|
if (fireTrigger) {
|
|
683
683
|
// Il trigger va sparato. Valuto le funzioni interne
|
|
684
684
|
var formulas = JSON.parse(JSON.stringify(trigger.formulas));
|
|
685
|
+
GlobalService.debugLog("checkTriggers - evaluate formulas ", formulas);
|
|
685
686
|
Object.keys(formulas).forEach((key) => {
|
|
686
687
|
var formula = formulas[key].value;
|
|
687
|
-
|
|
688
|
+
GlobalService.debugLog("checkTriggers - formulas[key] ", formulas[key]);
|
|
689
|
+
var temp;
|
|
690
|
+
if (formulas[key].type == TriggerPropertyTypeEnum.DMMODULE) {
|
|
691
|
+
temp = formula;
|
|
692
|
+
}
|
|
693
|
+
else {
|
|
694
|
+
temp = UtilityHelperService.EvaluateFieldFormula(formula, record, null);
|
|
695
|
+
}
|
|
688
696
|
formulas[key] = temp;
|
|
689
697
|
});
|
|
690
698
|
// Sparo il trigger all'esterno
|
|
@@ -747,4 +755,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
747
755
|
type: ViewChildren,
|
|
748
756
|
args: ["fieldTemplate"]
|
|
749
757
|
}] } });
|
|
750
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWZvcm0tcmVjb3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvYWRkLWZvcm0tcmVjb3JkL2FkZC1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2FkZC1mb3JtLXJlY29yZC9hZGQtZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWEsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNILE9BQU8sRUFBRSxXQUFXLEVBQWEsVUFBVSxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xKLE9BQU8sRUFBUSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFbkYsT0FBTyxFQUE2QyxhQUFhLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUU1SCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFLcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQVcsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7OztBQVF4RSxNQUFNLE9BQU8sc0JBQXNCO0lB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UzsrQkFDRSxpQkFBaUI7MklBTWxCLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csR0FBRztzQkFBWixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBZVAsYUFBYTtzQkFEWixZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBBbnN3ZXJTdHlsZSwgQmFzZUZpZWxkLCBEYXRhR2V0dGVyLCBEYXRhR2V0dGVyVHlwZUVudW0sIEZpZWxkSW52aXNpYmlsaXR5RW51bSwgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtLCBGb3JtU2NhbGFyVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IER5blJlY29yZCwgUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVGaWVsZEZpeENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeC9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbmRQb2ludENvbmZpZ3VyYXRpb24sIEVuZFBvaW50RGF0YVBhcmFtcywgUGFyYW1UeXBlRW51bSB9IGZyb20gJy4vLi4vLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IE51bWVyaWNGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgSW1hZ2VTZWxlY3RvckZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZVNlbGVjdG9yRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBEeW5BdHRhY2htZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2R5bkF0dGFjaG1lbnQnO1xyXG5pbXBvcnQgeyBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSwgZXZlbnRPdXQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWxvYWRlci9keW5hbWljLWxvYWRlci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgTG9naWNPcGVyYXRvciB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9sb2dpY09wZXJhdG9yLm1vZGVsJztcclxuaW1wb3J0IHsgRmlyZVRyaWdnZXIsIFRyaWdnZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvdHJpZ2dlci5tb2RlbCc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYWRkLWZvcm0tcmVjb3JkXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9hZGQtZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vYWRkLWZvcm0tcmVjb3JkLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWRkRm9ybVJlY29yZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZztcclxuICBASW5wdXQoKSBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuICBASW5wdXQoKSB1c2VySUQ6IHN0cmluZztcclxuICBASW5wdXQoKSBvcmdhSUQ6IHN0cmluZyA9IG51bGw7IC8vIHByZXZpZXdcclxuICBcclxuICBASW5wdXQoKSBmb3JtSUQ6IHN0cmluZyA9IG51bGw7IC8vIHByZXZpZXdcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtID0gbnVsbDsgLy8gcHJldmlldyBjb25maWdcclxuICBASW5wdXQoKSByZWNvcmQ6IFJlY29yZCB8IHN0cmluZyA9IG51bGw7IC8vIGVkaXRcclxuICBASW5wdXQoKSBvbmx5VmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGlzRHVwbGljYXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaW5Db25maWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93QWxsRmllbGRzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIFF1ZXJ5RWRpdG9yQ29tcG9uZW50OiBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YTsgLy8gTCdpbnRlcm8gY29tcG9uZW50ZSBxdWVyeSBFZGl0b3JcclxuXHJcbiAgQE91dHB1dCgpIHNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJTYXZlUmVjb3JkRXZlbnQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIG91dDogRXZlbnRFbWl0dGVyPGV2ZW50T3V0PiA9IG5ldyBFdmVudEVtaXR0ZXI8ZXZlbnRPdXQ+KCk7XHJcbiAgQE91dHB1dCgpIGZpcmVUcmlnZ2VyOiBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaXJlVHJpZ2dlcj4oKTtcclxuXHJcbiAgc2hvd1RpdGxlID0gdHJ1ZTtcclxuICBzaG93U2F2ZUJ1dHRvbiA9IHRydWU7XHJcbiAgc2hvd0JhY2tCdXR0b24gPSB0cnVlO1xyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzU2F2aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZm9ybWxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBmb3JtRm9ybTogVW50eXBlZEZvcm1Hcm91cDtcclxuICBmaWVsZEdyb3VwczogeyBba2V5OiBzdHJpbmddOiBBcnJheTxCYXNlRmllbGQ+IH0gPSB7fTtcclxuICBGb3JtU2NhbGFyVHlwZUVudW0gPSBGb3JtU2NhbGFyVHlwZUVudW07XHJcbiAgRmllbGRUeXBlRW51bSA9IEZpZWxkVHlwZUVudW07XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oXCJmaWVsZFRlbXBsYXRlXCIpXHJcbiAgZmllbGRUZW1wbGF0ZTogUXVlcnlMaXN0PER5bmFtaWNNb2R1bGVGaWVsZEZpeENvbXBvbmVudD47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuXHJcbiAgICBpZiAodGhpcy5mb3JtICE9IG51bGwgJiYgdGhpcy5vcmdhSUQgIT0gbnVsbCl7XHJcbiAgICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYWRkIHB1w7IgZnVuemlvbmFyZSBhbmNoZSBjb21lIG1vZGlmaWNhIGUgY29tZSBwcmV2aWV3XHJcbiAgICAvLyBpbiBhZGQgYWJiaWFtbyBpbiBpbnB1dCBsJ0lEIGRlbCBGb3JtXHJcbiAgICAvLyBpbiBtb2RpZmljYSBhYmJpYW1vIGluIGlucHV0IGwnSUQgZGVsIFJlY29yZFxyXG4gICAgLy8gaW4gcHJldmlldyBhYmJpYW1vIGluIGlucHV0IGlsIEZvcm0oY2FzbyBjb25maWd1cmF0b3IpIG8gbCdJRCBkZWwgbW9kdWxvIG9uIG9ubHlWaWV3IGltcG9zdGF0byBhIHRydWVcclxuICAgIHRoaXMuc2hvd1RpdGxlID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGU7XHJcbiAgICB0aGlzLnNob3dTYXZlQnV0dG9uID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93U2F2ZUJ1dHRvbjtcclxuICAgIHRoaXMuc2hvd0JhY2tCdXR0b24gPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dCYWNrQnV0dG9uO1xyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBZGRGb3JtUmVjb3JkXCIpXHJcblxyXG4gICAgaWYgKHRoaXMucmVjb3JkID09IG51bGwpIHtcclxuICAgICAgdGhpcy5zaG93VGl0bGUgPSB0cnVlO1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiQWRkRm9ybVJlY29yZCAtIG5ld1wiKVxyXG4gICAgICB0aGlzLnByZXZpZXdPck5ld1Jlc3BvbnNlUmVjb3JkKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dUaXRsZSA9IGZhbHNlO1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiQWRkRm9ybVJlY29yZCAtIGVkaXRcIiwgdGhpcy5yZWNvcmQpXHJcbiAgICAgIHRoaXMuZWRpdFJlc3BvbnNlUmVjb3JkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbCdpbml6aWFsaXp6YXppb25lIHRlcm1pbmEgY29uIGlsIHJlY3VwZXJvIGRlbCByZWNvcmQgbyBjb24gbCdpbml6aWFsaXp6YXppb25lIGRlbCBmb3JtIHZ1b3RvXHJcblxyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnb25pbml0IC0gRHluYUZvcm0nLCB0aGlzLmZvcm0pXHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gb25SZWNvcmRDaGFuZ2VcclxuICAvKipcclxuICAgKiBNZXRvZG8gaW52b2NhdG8gYWwgY2FtYmlvIGRlbCB2YWxvcmUgZGkgb2duaSBwcm9wcmlldMOgIGRlbGwnb2dnZXR0byByZWNvcmQuXHJcbiAgICogU2VydmUgYWQgYWdnaW9ybmFyZSBpbCB2YWxvcmUgZGkgdHV0dGkgaSBjYW1waSBjaGUgaGFubm8gdW5hIGZvcm11bGEuXHJcbiAgICovXHJcbiAgb25SZWNvcmRDaGFuZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5maWVsZFRlbXBsYXRlICYmIHRoaXMuZmllbGRUZW1wbGF0ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZmllbGRUZW1wbGF0ZS5mb3JFYWNoKChmKSA9PiBmLnVwZGF0ZUZpZWxkKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb25SZWNvcmRDaGFuZ2VcclxuXHJcbiAgLy8jcmVnaW9uIHByZXZpZXdPck5ld1Jlc3BvbnNlUmVjb3JkXHJcbiAgcHJldmlld09yTmV3UmVzcG9uc2VSZWNvcmQoKSB7XHJcbiAgICB0aGlzLnJlY29yZCA9IG5ldyBSZWNvcmQoKTtcclxuICAgIC8vIGFnZ2l1Z25pIG51b3ZvXHJcbiAgICBpZiAodGhpcy5mb3JtICE9IG51bGwpIHtcclxuICAgICAgLy8gcHJldmlldyBwZXIgaWwgY29uZmlndXJhdG9yXHJcbiAgICAgIHRoaXMuZmllbGRzQ29uZmlnKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybUlEICE9IG51bGwpIHtcclxuICAgICAgLy8gcHJldmlldyBwZXIgYWRtaW5cclxuICAgICAgdGhpcy5nZXRGb3JtQnlJRCgpOyAvLyBkZW50cm8gY2hpYW1hIGZpZWxkc0NvbmZpZ1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gcHJldmlld09yTmV3UmVzcG9uc2VSZWNvcmRcclxuXHJcbiAgLy8jcmVnaW9uIGVkaXRSZXNwb25zZVJlY29yZFxyXG4gIGVkaXRSZXNwb25zZVJlY29yZCgpIHtcclxuICAgIFxyXG4gICAgLy8gbW9kaWlsdMOgIG1vZGlmaWNhXHJcbiAgICBpZiAodHlwZW9mIHRoaXMucmVjb3JkID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIC8vIGFsbG9yYSDDqCB1biBJRFxyXG4gICAgICB0aGlzLmdldFJlY29yZEJ5SUQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlsIHJlY29yZCB2aWVuZSBwYXNzYXRvIGNvbWUgdGFsZVxyXG4gICAgICAvLyAoPFJlY29yZD50aGlzLnJlY29yZCkuRW50SUQgPSBcIjNcIjtcclxuICAgICAgLy8gKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLlZlcnNpb247XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uKHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZWRpdFJlc3BvbnNlUmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiBzYXZlT3JFeGl0Rm9ybVxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBpIGRhdGkgaW5zZXJpdGkgZGFsbCd1dGVudGUgdW5hIHZvbHRhIGNvbmNsdXNhIGxhIGNvbXBpbGF6aW9uZSBkZWxsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHNhdmVPckV4aXRGb3JtKGV4aXQ6IGJvb2xlYW4pIHtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2FkZC1mb3JtLXJlY29yZCBzYXZlUmVjb3JkRXZlbnQnKVxyXG4gICAgaWYgKGV4aXQpIHtcclxuICAgICAgLy8gdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChudWxsKTtcclxuICAgICAgdGhpcy5vblNhdmVSZWNvcmQobnVsbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KHRoaXMucmVjb3JkKTtcclxuICAgICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMub25TYXZlUmVjb3JkKCg8UmVjb3JkPnRoaXMucmVjb3JkKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBzYXZlT3JFeGl0Rm9ybVxyXG5cclxuICAvLyNyZWdpb24gb25TYXZlUmVjb3JkXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGlsIHJlY29yZCBhZ2dpdW50byBvIG1vZGlmaWNhdG8uXHJcbiAgICogU2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gdW4gZW5kUG9pbnQgcGVyIGlsIHNhbHZhdGFnZ2lvIHZpZW5lIGVmZmV0dHVhdGEgdW5hIGNoaWFtYXRhIGFsIHNlcnZlciBwYXNzYW5kbyBsJ29nZ2V0byBkYSBzYWx2YXJlXHJcbiAgICogbmVsIGJvZHkgZGVsbGEgY2hpYW1hdGEsIGFsdHJpbWVudGkgc2NhdGVuYSBsJ2V2ZW50byBcInNhdmVSZWNvcmRcIi5cclxuICAgKiBAcGFyYW0gZXZlbnQgT2dnZXR0byBkaSB0aXBvIFJlY29yZCBkYSBzYWx2YXJlLlxyXG4gICAqL1xyXG4gIGFzeW5jIG9uU2F2ZVJlY29yZChldmVudDogUmVjb3JkKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdvblNhdmVSZWNvcmQgLSBldmVudCcsIGV2ZW50KVxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnb25TYXZlUmVjb3JkIC0gZm9ybScsIHRoaXMuZm9ybSlcclxuICAgIGlmIChcclxuICAgICAgZXZlbnQgIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuU2F2ZUVuZFBvaW50XHJcbiAgICApIHtcclxuICAgICAgdmFyIGR5blJlYzogRHluUmVjb3JkID0gbmV3IER5blJlY29yZCgpO1xyXG4gICAgICBkeW5SZWMuSUQgPSBldmVudC5JRCA/PyBudWxsO1xyXG4gICAgICBkeW5SZWMuRW50SUQgPSB0aGlzLmZvcm0uSUQ7XHJcbiAgICAgIGR5blJlYy5WZXJzaW9uID0gdGhpcy5mb3JtLlZlcnNpb247XHJcbiAgICAgIGR5blJlYy51c2VySUQgPSB0aGlzLnVzZXJJRDtcclxuICAgICAgZHluUmVjLlZhbHVlcyA9IGV2ZW50ID8/IG51bGw7XHJcbiAgICAgIGR5blJlYy5IVE1McmVhZGFibGVWYWx1ZXMgPSBhd2FpdCB0aGlzLmNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyhldmVudCk7XHJcblxyXG4gICAgICBpZiAoZXZlbnQuRktfSW5zZXJ0VXNlciA9PSBudWxsKXtcclxuICAgICAgICAvLyBOdW92byBSZWNvcmRcclxuICAgICAgICBkeW5SZWMuRktfSW5zZXJ0VXNlciA9IHRoaXMudXNlcklEO1xyXG4gICAgICAgIGR5blJlYy5JbnNlcnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICBkeW5SZWMuRktfVXBkYXRlVXNlciA9IHRoaXMudXNlcklEO1xyXG4gICAgICAgIGR5blJlYy5VcGRhdGVEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBNb2RpZmljYSBkZWwgUmVjb3JkXHJcbiAgICAgICAgZHluUmVjLkZLX0luc2VydFVzZXIgPSBldmVudC5GS19JbnNlcnRVc2VyXHJcbiAgICAgICAgZHluUmVjLkluc2VydERhdGUgPSBldmVudC5JbnNlcnREYXRlO1xyXG4gICAgICAgIGR5blJlYy5GS19VcGRhdGVVc2VyID0gdGhpcy51c2VySUQ7XHJcbiAgICAgICAgZHluUmVjLlVwZGF0ZURhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgYWRkaXRpb25hbFBhcmFtcyA9IHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtcyA9PSBudWxsID8gZXZlbnQuQWRkaXRpb25hbFBhcmFtcyA6IHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtcztcclxuICAgICAgZHluUmVjLkFkZGl0aW9uYWxQYXJhbXMgPSBKU09OLnN0cmluZ2lmeShhZGRpdGlvbmFsUGFyYW1zKTtcclxuXHJcbiAgICAgIC8vIHZhciBhZGRpdGlvbmFsSW5mbyA9IHRoaXMuYWRkaXRpb25hbEluZm8gPT0gbnVsbCA/IGV2ZW50LkFkZGl0aW9uYWxJbmZvIDogdGhpcy5hZGRpdGlvbmFsSW5mbztcclxuICAgICAgdmFyIGFkZGl0aW9uYWxJbmZvID0gZXZlbnQuQWRkaXRpb25hbEluZm8gPT0gbnVsbCA/IHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbEluZm8gOiBldmVudC5BZGRpdGlvbmFsSW5mbztcclxuICAgICAgZHluUmVjLkFkZGl0aW9uYWxJbmZvID0gSlNPTi5zdHJpbmdpZnkoYWRkaXRpb25hbEluZm8pO1xyXG5cclxuICAgICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgUGFyYW1OYW1lOiBcIlJlY29yZFwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogZHluUmVjLFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiSW4gQm9keVwiXSxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ29uU2F2ZVJlY29yZCAtIGR5bmFtaWNNb2R1bGVQYXJhbXMnLCBkeW5hbWljTW9kdWxlUGFyYW1zKVxyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLlNhdmVFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXMpID0+IHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tUcmlnZ2VycyhldmVudCk7XHJcbiAgICAgICAgICB0aGlzLmFmdGVyU2F2ZVJlY29yZEV2ZW50LmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gb25TYXZlUmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiBnZXRGb3JtQnlJRFxyXG4gIGdldEZvcm1CeUlEKGlkOiBzdHJpbmcgPSB0aGlzLmZvcm1JRCkge1xyXG4gICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgUGFyYW1WYWx1ZTogaWQsXHJcbiAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBcIlwiKXtcclxuICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgICAgfSAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0RGF0YUdldHRlcih0aGlzLmZvcm0pO1xyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2dldEZvcm1CeUlEIC0gRHluYUZvcm0nLCB0aGlzLmZvcm0pXHJcbiAgICAgICAgdGhpcy5maWVsZHNDb25maWcoKTtcclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4geyB9XHJcbiAgICApO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZ2V0Rm9ybUJ5SURcclxuXHJcbiAgLy8jcmVnaW9uIGdldFJlY29yZEJ5SURcclxuICAvLyBjaSBlbnRybyBzb2xvIHNlIMOoIHN0YXRvIHBhc3NhdG8gaWwgcGFyYW1ldHJvIFwicmVjb3JkXCIgY29tZSBzdHJpbmdhXHJcbiAgZ2V0UmVjb3JkQnlJRCgpIHtcclxuXHJcbiAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICB2YXIgZHluYW1pY1JlY29yZFBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMucmVjb3JkLFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgKHJlczogRHluUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQgPSBuZXcgUmVjb3JkKCk7XHJcblxyXG4gICAgICAgICg8UmVjb3JkPnRoaXMucmVjb3JkKSA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLklEID0gdGhpcy5pc0R1cGxpY2F0ZSA/IFwiXCIgOiByZXMuSUQ7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuRW50SUQgPSByZXMuRW50SUQ7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQudXNlcklEID0gcmVzLnVzZXJJRDtcclxuICAgICAgICB0aGlzLnJlY29yZC5WZXJzaW9uID0gcmVzLlZlcnNpb247XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuVmFsdWVzID0gSlNPTi5wYXJzZShyZXMuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuRktfSW5zZXJ0VXNlciA9IHJlcy5GS19JbnNlcnRVc2VyO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLkZLX1VwZGF0ZVVzZXIgPSByZXMuRktfVXBkYXRlVXNlcjtcclxuICAgICAgICB0aGlzLnJlY29yZC5JbnNlcnREYXRlID0gcmVzLkluc2VydERhdGU7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuVXBkYXRlRGF0ZSA9IHJlcy5VcGRhdGVEYXRlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEU7XHJcbiAgICAgICAgLy8gdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uKCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBnZXRSZWNvcmRCeUlEXHJcblxyXG4gIC8vI3JlZ2lvbiBnZXRGb3JtQnlJRGFuZFZlcnNpb25cclxuICBnZXRGb3JtQnlJRGFuZFZlcnNpb24oZ2V0QXR0YWNobWVudHM6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgLy8gcHJlcGFybyBsYSB2ZXJzaW9uZSBjb3JyZXR0YSBkZWwgZm9ybVxyXG4gICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiRW50SURcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiAoPFJlY29yZD50aGlzLnJlY29yZCkuRW50SUQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiVmVyc2lvblwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6ICg8UmVjb3JkPnRoaXMucmVjb3JkKS5WZXJzaW9uLFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJnZXRGb3JtQnlJRGFuZFZlcnNpb24gLSB0aGlzIHJlY29yZFwiLCA8UmVjb3JkPnRoaXMucmVjb3JkKVxyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURBbmRWZXJzaW9uRW5kUG9pbnQsXHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgIChyZXM6IEZvcm0pID0+IHtcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiQUZURVIgZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uIC0gdGhpcy5mb3JtXCIsIHJlcylcclxuICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgdGhpcy5mb3JtLk9yZ2FJRCA9IHRoaXMub3JnYUlEO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IG51bGwgJiYgdGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzICE9IFwiXCIpe1xyXG4gICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gSlNPTi5wYXJzZSh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBuZXcgQXJyYXk8VHJpZ2dlcj4oKTtcclxuICAgICAgICB9ICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5zZXREYXRhR2V0dGVyKHRoaXMuZm9ybSk7XHJcblxyXG4gICAgICAgIHRoaXMuY3JlYXRlUmVjb3JkUHJvcGVydGllcygpO1xyXG4gICAgICAgIHRoaXMucmVvcmRlckZvcm1GaWVsZHMoKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvcm1Hcm91cCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlKSB7XHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZUZpZWxkR3JvdXBzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWdldEF0dGFjaG1lbnRzKXtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZm9ybWxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZ2V0QWxsUmVjb3JkQXR0YWNobWVudHMoKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLklEKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBnZXRGb3JtQnlJRGFuZFZlcnNpb25cclxuXHJcbiAgLy8jcmVnaW9uIGdldEFsbFJlY29yZEF0dGFjaG1lbnRzXHJcbiAgZ2V0QWxsUmVjb3JkQXR0YWNobWVudHMocmVjb3JkSUQ6IHN0cmluZyl7XHJcblxyXG4gICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiYW5zd2VySWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiByZWNvcmRJRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRBbGxBdHRhY2htZW50c0VuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAocmVzOiBBcnJheTxEeW5BdHRhY2htZW50PikgPT4ge1xyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJHZXRBbGxBdHRhY2htZW50c0VuZFBvaW50KClcIiwgcmVzKTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW0uSW1tYWdpbmUgfHwgZmllbGQuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bJ0ltbWFnaW5lIGNvbiBtYXJrZXJzJ10pe1xyXG4gICAgICAgICAgICAgIHZhciBhdHRhY2hJZCA9IHRoaXMucmVjb3JkW2ZpZWxkLk5hbWVdO1xyXG4gICAgICAgICAgICAgIHRoaXMucmVjb3JkW2ZpZWxkLk5hbWVdID0gcmVzLmZpbmQoeCA9PiB4LklEID09IGF0dGFjaElkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5mb3JtbG9hZGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBnZXRBbGxSZWNvcmRBdHRhY2htZW50c1xyXG5cclxuICAvLyNyZWdpb24gZmllbGRzQ29uZmlnXHJcbiAgZmllbGRzQ29uZmlnKCkge1xyXG4gICAgdGhpcy5jcmVhdGVSZWNvcmRQcm9wZXJ0aWVzKCk7XHJcbiAgICB0aGlzLnJlb3JkZXJGb3JtRmllbGRzKCk7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm1Hcm91cCgpO1xyXG4gICAgaWYgKHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UpIHtcclxuICAgICAgdGhpcy5jcmVhdGVGaWVsZEdyb3VwcygpO1xyXG4gICAgfVxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImZpZWxkc0NvbmZpZyAtIGZvcm1cIiwgdGhpcy5mb3JtKTtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMuZm9ybWxvYWRlZCA9IHRydWU7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBmaWVsZHNDb25maWdcclxuXHJcbiAgLy8jcmVnaW9uIGNyZWF0ZVJlY29yZFByb3BlcnRpZXNcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBuZWxsJ29nZ2V0dG8gUmVjb3JkIGxlIHByb3ByaWV0w6AgbWFuY2FudGkgcmlzcGV0dG8gYWkgY2FtcGkgY2hlIGNvbXBvbmdvbm8gbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZVJlY29yZFByb3BlcnRpZXMoKSB7XHJcbiAgICBjb25zdCByZWNvcmRQcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+ID0gT2JqZWN0LmtleXModGhpcy5yZWNvcmQpO1xyXG4gICAgdGhpcy5mb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICBpZiAoIXJlY29yZFByb3BlcnRpZXMuZmluZCgocCkgPT4gcCA9PT0gZmllbGQuTmFtZSkpIHtcclxuICAgICAgICB0aGlzLnJlY29yZFtmaWVsZC5OYW1lXSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuZm9ybS5Jbm5lckZvcm1zICYmIHRoaXMuZm9ybS5Jbm5lckZvcm1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5mb3JtLklubmVyRm9ybXMuZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFycmF5TmFtZTogc3RyaW5nID0gZm9ybS5OYW1lLnNwbGl0KFwiIFwiKS5qb2luKFwiX1wiKTtcclxuICAgICAgICBpZiAoIXJlY29yZFByb3BlcnRpZXMuZmluZCgocCkgPT4gcCA9PT0gYXJyYXlOYW1lKSkge1xyXG4gICAgICAgICAgdGhpcy5yZWNvcmRbYXJyYXlOYW1lXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY3JlYXRlUmVjb3JkUHJvcGVydGllcyAtIGZvcm1cIiwgdGhpcy5mb3JtKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVSZWNvcmRQcm9wZXJ0aWVzIC0gcmVjb3JkXCIsIHRoaXMucmVjb3JkKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGNyZWF0ZVJlY29yZFByb3BlcnRpZXNcclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaW9yZGluYXJlIGkgY2FtcGkgY2hlIGNvbXBvbmdvbm8gbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlb3JkZXJGb3JtRmllbGRzKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5GaWVsZHMgJiYgdGhpcy5mb3JtLkZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMuc29ydCgoYSwgYikgPT5cclxuICAgICAgICBhLk9yZGluYWxQb3NpdGlvbiA+IGIuT3JkaW5hbFBvc2l0aW9uID8gMSA6IGIuT3JkaW5hbFBvc2l0aW9uID4gYS5PcmRpbmFsUG9zaXRpb24gPyAtMSA6IDApO1xyXG4gICAgfVxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcInJlb3JkZXJGb3JtRmllbGRzIC0gZm9ybVwiLCB0aGlzLmZvcm0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgaWwgRm9ybUdyb3VwIGNoZSByYXBwcmVzZW50YSBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUdyb3VwKCkge1xyXG4gICAgdGhpcy5mb3JtRm9ybSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuQ3JlYXRlRm9ybUZvcm1Hcm91cChcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcyxcclxuICAgICAgKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLFxyXG4gICAgICB0aGlzLm9ubHlWaWV3XHJcbiAgICApO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZUZvcm1Hcm91cCAtIGZvcm1cIiwgdGhpcy5mb3JtKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGkgZ3J1cHBpIGluIGN1aSByYWdncnVwcGFyZSBpIGNhbXBpIGRlbGxhIGZvcm0gaW4gYmFzZVxyXG4gICAqIGEgY29tZSDDqCBzdGF0YSBjb25maWd1cmF0YSBkYWxsJ3V0ZW50ZS5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUZpZWxkR3JvdXBzKCkge1xyXG4gICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuc29ydCgoYSwgYikgPT4gYS5PcmRpbmFsUG9zaXRpb24gPiBiLk9yZGluYWxQb3NpdGlvbiA/IDEgOiBiLk9yZGluYWxQb3NpdGlvbiA+IGEuT3JkaW5hbFBvc2l0aW9uID8gLTEgOiAwKVxyXG4gICAgICAubWFwKChnKSA9PiBnLk5hbWUpXHJcbiAgICAgIC5mb3JFYWNoKChncm91cE5hbWUpID0+IHtcclxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBzW2dyb3VwTmFtZV0gPSB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcihcclxuICAgICAgICAgIChmKSA9PiBmLkZpZWxkR3JvdXAgPT0gZ3JvdXBOYW1lXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVGaWVsZEdyb3VwcyAtIGZvcm1cIiwgdGhpcy5mb3JtKTtcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIC8vI3JlZ2lvbiBjcmVhdGVIVE1McmVhZGFibGVWYWx1ZXNcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBpbCBGb3JtR3JvdXAgY2hlIHJhcHByZXNlbnRhIGxhIGZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVIVE1McmVhZGFibGVWYWx1ZXMocmVjb3JkOiBSZWNvcmQpIHtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzIC0gcmVjb3JkXCIsIHJlY29yZCk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzIC0gZm9ybVwiLCB0aGlzLmZvcm0pO1xyXG5cclxuICAgIHZhciBmb3JtbmFtZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgdGhpcy5mb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge2Zvcm1uYW1lcy5wdXNoKGZpZWxkLk5hbWUpO30pO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyAtIGZvcm0gZmllbGRzIG5hbWVzXCIsIGZvcm1uYW1lcyk7XHJcblxyXG4gICAgLy8gYWxlcnQoXCJjb250aW51ZSBmb3IgdmFsdWVzP1wiKVxyXG5cclxuICAgIGxldCBvdXRwdXRWYWx1ZXNBcnJheSA9IGF3YWl0IHRoaXMuZ2V0UmVzcG9uc2VWYWx1ZXMocmVjb3JkLCB0aGlzLmZvcm0pO1xyXG4gICAgXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzIC0gb3V0cHV0VmFsdWVzQXJyYXlcIiwgb3V0cHV0VmFsdWVzQXJyYXkpO1xyXG5cclxuICAgIC8vIGFsZXJ0KFwiY29udGludWUgZm9yIHRlbXBsYXRlcz9cIilcclxuICAgIGxldCB0ZW1wbGF0ZTogc3RyaW5nID0gdGhpcy5nZXRSZXNwb25zZVRlbXBsYXRlKHJlY29yZCwgdGhpcy5mb3JtKTsgLy8gb2dnZXR0byBuZWwgcXVhbGUgdmllbmUgY29zdHJ1aXRvIGlsIHRlbXBsYXRlIG8gY2hlIHByZW5kZSBpbCB2YWxvcmUgZGEgdW4gdGVtcGxhdGUgZXN0ZXJub1xyXG4gICAgXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzIC0gdGVtcGxhdGVcIiwgdGVtcGxhdGUpO1xyXG4gICAgLy8gYWxlcnQoXCJjb250aW51ZSBmb3Igb3V0cHV0P1wiKVxyXG4gICAgY29uc3QgcmVnZXggPSAvIyMoW1xcd10rKSMjL2c7XHJcbiAgICBjb25zdCBvdXRwdXQgPSB0aGlzLnJlcGxhY2VUZW1wbGF0ZVBsYWNlaG9sZGVyc1dpdGhWYWx1ZXModGVtcGxhdGUsIG91dHB1dFZhbHVlc0FycmF5LCByZWdleClcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzIC0gb3V0cHV0XCIsIG91dHB1dCk7XHJcbiAgICAvLyBhbGVydChcImNvbnRpbnVlIGZvciBlbmRpbmc/XCIpXHJcbiAgICByZXR1cm4gb3V0cHV0OyAvLyBvZ2dldHRvIGNoZSBjb250ZXJyw6AgbCdvdXRwdXQgZWxhYm9yYXRvICAgIFxyXG5cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlc1xyXG5cclxuICAvLyNyZWdpb24gZ2V0UmVzcG9uc2VWYWx1ZXNcclxuICBwcml2YXRlIGFzeW5jIGdldFJlc3BvbnNlVmFsdWVzKHJlY29yZDogUmVjb3JkLCBmb3JtOiBGb3JtKSB7XHJcbiAgICBsZXQgb3V0cHV0VmFsdWVzQXJyYXk6IEFycmF5PGFueT4gPSBbXTsgLy8gYXJyYXkgY29uIGkgdmFsb3JpIGRlbGxlIHJpc3Bvc3RlXHJcbiAgICAvLyg8RHluUmVjb3JkPnRoaXMucmVjb3JkKS5WYWx1ZXMgw6ggbGEgbGlzdGEgZGkgb2dnZXR0aSB7ZmllbGROYW1lOiB2YWxvcmV9XHJcbiAgICAvLyBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKHJlY29yZCkuVmFsdWVzXCIsIHJlY29yZCk7XHJcblxyXG4gICAgZm9ybS5GaWVsZHMuZm9yRWFjaChcclxuICAgICAgYXN5bmMgKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImdldFJlc3BvbnNlVmFsdWVzIGZpZWxkXCIsIGZpZWxkKTtcclxuICAgICAgICAgIC8vIGxldCBmb3VuZE9iamVjdCA9IHJlY29yZC5maW5kKFxyXG4gICAgICAgICAgLy8gICAob2JqKSA9PiBvYmogPT09IGZpZWxkLk5hbWVcclxuICAgICAgICAgIC8vICk7XHJcbiAgICAgICAgICBsZXQgZm91bmRPYmplY3QgPSByZWNvcmRbZmllbGQuTmFtZV07XHJcblxyXG4gICAgICAgICAgLy8gZmFyZSB1biBldmFsIHBlciBwb3BvbGFyZSBpIHZhbHVlUGFpcnMgc2Ugw6ggcHJlc2VudGUgdW5hIGZvcm11bGFcclxuICAgICAgICAgIC8vIHByZW5kZXJlIGxhIGxhYmVsIGNvcnJldHRhXHJcbiAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgICAgLy8gUFJFUEFSTyBJTCBWQUxVRVBBSVJTXHJcbiAgICAgICAgICBzd2l0Y2goZmllbGQuRmllbGRUeXBlKXtcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdOnsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGlmIChmaWVsZC5Gb3JtdWxhICE9IG51bGwgJiYgZmllbGQuRm9ybXVsYSkge1xyXG4gICAgICAgICAgICAgICAgLy8gYWdnaXVuZ28gYSB2YWx1ZXBhaXJzIGkgdmFsb3JpIGNhbGNvbGF0aVxyXG4gICAgICAgICAgICAgICAgLy8gKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlycyA9ICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnMgPyAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzIDoge307XHJcbiAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKFxyXG4gICAgICAgICAgICAgICAgICBmaWVsZC5Gb3JtdWxhLFxyXG4gICAgICAgICAgICAgICAgICByZWNvcmQsXHJcbiAgICAgICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkyIGluIHRlbXApIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmlzTnVtZXJpYyh0ZW1wW2tleTJdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnNbTnVtYmVyKGtleTIpXSA9IHRlbXBba2V5Ml07XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVQYWlyc1trZXkyXSA9IHRlbXBba2V5Ml07XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVQYWlyc1tyZWNvcmRbZmllbGQuTmFtZV1dO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVQYWlycyAhPSBudWxsICYmICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gdmEgYmVuZSBjb3PDrFxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVTdHJpbmcgIT0gbnVsbCAmJiAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVN0cmluZyAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB2YSBwcmVzYSBsYSBzdHJpZ25hIGUgcmltYXBwYXRhIG5lbCBkaWFyaW9cclxuICAgICAgICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnMgPSBHbG9iYWxTZXJ2aWNlLnN0cmluZ1RvVmFsdWVQYWlycygoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVN0cmluZyk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBsZXQgaW52ZXJ0ZWQgPSB7fTtcclxuICAgICAgICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCIoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzXCIsICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnMpO1xyXG4gICAgICAgICAgICAgIC8vIFZhbHVlUGFpcnM6IHtTaTogJ1NpJywgTm86ICdObyd9XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnMpIHtcclxuICAgICAgICAgICAgICAgIGludmVydGVkWyg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnNba2V5XV0gPSBrZXk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnMgPSBpbnZlcnRlZDtcclxuICAgICAgICAgICAgICBpZihyZWNvcmRbZmllbGQuTmFtZV0gIT0gbnVsbCAmJiAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5Jc011bHRpQ2hvaWNoZSl7XHJcbiAgICAgICAgICAgICAgICAvLyBjYXNvIE1VTFRJU0NFTFRBXHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkW2ZpZWxkLk5hbWVdLmZvckVhY2goKGVsZW1lbnQsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVQYWlyc1tlbGVtZW50XTtcclxuICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gaSA9PSByZWNvcmRbZmllbGQuTmFtZV0ubGVuZ3RoIC0xID8gXCJcIjogXCIsIFwiXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVQYWlyc1tyZWNvcmRbZmllbGQuTmFtZV1dO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwib3V0cHV0VmFsdWVzQXJyYXlcIiwgb3V0cHV0VmFsdWVzQXJyYXkpXHJcblxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBudW1lcmljb1wiXTp7XHJcbiAgICAgICAgICAgICAgaWYoKDxOdW1lcmljRmllbGQ+ZmllbGQpLklzSW50ZWdlcil7XHJcbiAgICAgICAgICAgICAgICBpZigoPE51bWVyaWNGaWVsZD5maWVsZCkuRGVjaW1hbFNlcGFyYXRvciA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSByZWNvcmRbZmllbGQuTmFtZV07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSA9IHJlY29yZFtmaWVsZC5OYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSByZWNvcmRbZmllbGQuTmFtZV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydJbW1hZ2luZSddOntcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAvLyBSZWN1cGVybyBpbCBCQVNFNjQgZGVsbCdpbW1hZ2luZSBSZXNpemVkIHZpYSBwcm9taXNlIGNsaWVudFxyXG4gICAgICAgICAgICAgIHZhciByZXNpemVkQmFzZTY0ID0gYXdhaXQgdGhpcy5yZXNpemVCYXNlNjRJbWFnZShcImRhdGE6aW1hZ2UvXCIrcmVjb3JkW2ZpZWxkLk5hbWVdLkZpbGVFeHRlbnNpb24rXCI7YmFzZTY0LFwiICsgcmVjb3JkW2ZpZWxkLk5hbWVdLkZpbGVEYXRhQmFzZTY0KTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQWdnaXVuZ28gbCdIVE1MIGNvbiBpbCBudW92byBCQVNFNjRcclxuICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSA9IFwiPGltZyBzcmM9J1wiICsgcmVzaXplZEJhc2U2NCtcIicgc3R5bGU9J2hlaWdodDogXCIrcmVjb3JkW2ZpZWxkLk5hbWVdLlJlc2l6ZWRJbWFnZUhlaWdodFB4K1wicHgnPlwiO1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydJbW1hZ2luZSBjb24gbWFya2VycyddOntcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAvLyBSZWN1cGVybyBpbCBCQVNFNjQgZGVsbCdpbW1hZ2luZSBSZXNpemVkIHZpYSBwcm9taXNlIGNsaWVudFxyXG4gICAgICAgICAgICAgIHZhciByZXNpemVkQmFzZTY0ID0gYXdhaXQgdGhpcy5yZXNpemVCYXNlNjRJbWFnZShcImRhdGE6aW1hZ2UvXCIrcmVjb3JkW2ZpZWxkLk5hbWVdLkZpbGVFeHRlbnNpb24rXCI7YmFzZTY0LFwiICsgcmVjb3JkW2ZpZWxkLk5hbWVdLkZpbGVEYXRhQmFzZTY0KTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQWdnaXVuZ28gbCdIVE1MIGNvbiBpbCBudW92byBCQVNFNjRcclxuICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSA9IFwiPGltZyBzcmM9J1wiICsgcmVzaXplZEJhc2U2NCtcIicgc3R5bGU9J2hlaWdodDogXCIrcmVjb3JkW2ZpZWxkLk5hbWVdLlJlc2l6ZWRJbWFnZUhlaWdodFB4K1wicHgnPlwiO1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydFbGVuY28gaW1tYWdpbmknXTp7XHJcbiAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSBcIlwiO1xyXG4gICAgICAgICAgICAgIGlmKHJlY29yZFtmaWVsZC5OYW1lXSAhPSBudWxsICYmICg8SW1hZ2VTZWxlY3RvckZpZWxkPmZpZWxkKS5Jc011bHRpQ2hvaWNoZSl7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRbZmllbGQuTmFtZV0uZm9yRWFjaCgoaW1hZ2VvYmo6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgYXR0YWNobWVudEluRm9ybTogRHluQXR0YWNobWVudCA9ICg8SW1hZ2VTZWxlY3RvckZpZWxkPmZpZWxkKS5BdHRhY2htZW50TGlzdC5maW5kKHggPT4geC5JRCA9PSBpbWFnZW9iaik7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50SW5Gb3JtICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdICs9IGF0dGFjaG1lbnRJbkZvcm0uQnV0dG9uS2V5ICsgXCIsIFwiO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJ0cyA9IG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdLnNwbGl0KFwiLCBcIik7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSA9IHBhcnRzLnNsaWNlKDAsIHBhcnRzLmxlbmd0aCAtIDEpLmpvaW4oXCIsIFwiKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIHZhciBhdHRhY2htZW50SW5Gb3JtOiBEeW5BdHRhY2htZW50ID0gKDxJbWFnZVNlbGVjdG9yRmllbGQ+ZmllbGQpLkF0dGFjaG1lbnRMaXN0LmZpbmQoeCA9PiB4LklEID09IHJlY29yZFtmaWVsZC5OYW1lXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudEluRm9ybSAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSBhdHRhY2htZW50SW5Gb3JtLkJ1dHRvbktleTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfTsgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6e1xyXG4gICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gcmVjb3JkW2ZpZWxkLk5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKVxyXG5cclxuICAgIC8vIEZ1bnppb25hLCBtYSBub24gw6ggYWZmaWRhYmlsZSBhbCAxMDAlXHJcbiAgICBhd2FpdCB0aGlzLmRlbGF5KDMwMDApO1xyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJvdXRwdXRWYWx1ZXNBcnJheSAxXCIsIG91dHB1dFZhbHVlc0FycmF5KTtcclxuICAgIC8vIGNhbmNlbGxvIGkgdmFsb3JpIGluZGVmaW5pdGkgbyBudWxsaVxyXG4gICAgZm9yIChjb25zdCBjaGlhdmUgaW4gb3V0cHV0VmFsdWVzQXJyYXkpIHtcclxuICAgICAgaWYgKG91dHB1dFZhbHVlc0FycmF5W2NoaWF2ZV0gPT0gdW5kZWZpbmVkIHx8IG91dHB1dFZhbHVlc0FycmF5W2NoaWF2ZV0gPT0gbnVsbClcclxuICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtjaGlhdmVdID0gJydcclxuICAgIH1cclxuICAgIHJldHVybiBvdXRwdXRWYWx1ZXNBcnJheTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGdldFJlc3BvbnNlVmFsdWVzXHJcblxyXG4gIC8vI3JlZ2lvbiBnZXRSZXNwb25zZVRlbXBsYXRlXHJcbiAgcHJpdmF0ZSBnZXRSZXNwb25zZVRlbXBsYXRlKHJlY29yZDogUmVjb3JkLCBmb3JtOiBGb3JtKTogc3RyaW5nIHtcclxuICAgICAgbGV0IHRlbXBsYXRlOiBzdHJpbmcgPSAnPGRpdiBjbGFzcz1cInJvd1wiPic7XHJcbiAgICAvLyBQUkVQQVJPIE8gUFJFTkRPIExBIFNUUlVUVFVSQSBEQSBTVEFNUEFSRVxyXG4gICAgZm9ybS5GaWVsZHMuZm9yRWFjaCgoYmFzZUZpZWxkOiBCYXNlRmllbGQpID0+IHtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnZ2V0UmVzcG9zbmVUZW1wbGF0ZSAtIHByZSAtIGZpZWxkJywgYmFzZUZpZWxkKVxyXG4gICAgICBpZihiYXNlRmllbGQuQW5zd2VyU3R5bGUgPT0gbnVsbCB8fCBiYXNlRmllbGQuQW5zd2VyU3R5bGUgPT0gdW5kZWZpbmVkKXtcclxuICAgICAgICBiYXNlRmllbGQuQW5zd2VyU3R5bGUgPSBuZXcgQW5zd2VyU3R5bGUoKTtcclxuICAgICAgICBiYXNlRmllbGQuQW5zd2VyU3R5bGUuQ29sU3BhblNpemVzID0gYmFzZUZpZWxkLkNvbFNwYW5TaXplcztcclxuICAgICAgICBiYXNlRmllbGQuQW5zd2VyU3R5bGUuRmllbGRzdHlsZUNTUyA9IGJhc2VGaWVsZC5GaWVsZHN0eWxlQ1NTO1xyXG4gICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5MYWJlbHN0eWxlQ1NTID0gYmFzZUZpZWxkLkxhYmVsc3R5bGVDU1M7XHJcbiAgICAgICAgaWYoYmFzZUZpZWxkLlZpc2libGVJZil7XHJcbiAgICAgICAgICBiYXNlRmllbGQuQW5zd2VyU3R5bGUuSW5MaXN0VmlldyA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKGJhc2VGaWVsZC5WaXNpYmxlSWYsIHJlY29yZCwgbnVsbCk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICBiYXNlRmllbGQuQW5zd2VyU3R5bGUuSW5MaXN0VmlldyA9IGJhc2VGaWVsZC5Jbkxpc3RWaWV3O1xyXG4gICAgICAgICAgYmFzZUZpZWxkLkFuc3dlclN0eWxlLlZpc2libGVJZiA9IGJhc2VGaWVsZC5WaXNpYmxlSWY7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IFxyXG4gICAgICBpZihiYXNlRmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmKXtcclxuICAgICAgICBjb25zdCB2aXNpYmlsaXR5ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoYmFzZUZpZWxkLkFuc3dlclN0eWxlLlZpc2libGVJZiwgcmVjb3JkLCBudWxsKVxyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJFdmFsdWF0ZUZpZWxkRm9ybXVsYSAtIHZpc2liaWxpdHlcIiwgdmlzaWJpbGl0eSk7XHJcbiAgICAgICAgYmFzZUZpZWxkLkFuc3dlclN0eWxlLkluTGlzdFZpZXcgPSAodmlzaWJpbGl0eSA9PSB0cnVlKSA/IHRydWUgOiBmYWxzZSA7XHJcbiAgICAgIH1cclxuICAgICAgaWYoYmFzZUZpZWxkLkFuc3dlclN0eWxlLkluTGlzdFZpZXcpe1xyXG4gICAgICAgIHRlbXBsYXRlICs9ICc8ZGl2IGNsYXNzPVwiJysgdGhpcy51dGlsaXR5U2VydmljZS5nZXRGaWVsZEFuc3dlclN0eWxlQ2xhc3MoYmFzZUZpZWxkKSArJyBkLWZsZXggZmxleC1jb2x1bW4gZHluYWZvcm0tYW5zd2VyLWZpZWxkXCI+ICcrXHJcbiAgICAgICAgJyA8c3BhbiBjbGFzcz1cImR5bmFmb3JtLXF1ZXN0aW9uXCIgc3R5bGU9XCInICsgYmFzZUZpZWxkLkFuc3dlclN0eWxlLkxhYmVsc3R5bGVDU1MgKyAnXCI+JyArIGJhc2VGaWVsZC5EZXNjcmlwdGlvbiArICc6PC9zcGFuPicgKyBcclxuICAgICAgICAnIDxzcGFuIGNsYXNzPVwiZHluYWZvcm0tcmVzcG9uc2VcIiBzdHlsZT1cIicgKyBiYXNlRmllbGQuQW5zd2VyU3R5bGUuRmllbGRzdHlsZUNTUyArICdcIj4gIyMnICsgYmFzZUZpZWxkLk5hbWUgKyAnIyM8L3NwYW4+JyArIFxyXG4gICAgICAgICc8L2Rpdj4gXFxuICc7XHJcbiAgICAgIH1lbHNlIGlmKCFiYXNlRmllbGQuQW5zd2VyU3R5bGUuSW5MaXN0VmlldyAmJiBiYXNlRmllbGQuQW5zd2VyU3R5bGUuSW52aXNpYmlsaXR5ID09IEZpZWxkSW52aXNpYmlsaXR5RW51bVsnTkFTQ09TVE8gQ09OIEFSRUEgVklTSUJJTEUnXSl7XHJcbiAgICAgICAgdGVtcGxhdGUgKz0gJzxkaXYgY2xhc3M9XCInKyB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldEZpZWxkQW5zd2VyU3R5bGVDbGFzcyhiYXNlRmllbGQpICsnIGQtZmxleCBmbGV4LWNvbHVtbiBkeW5hZm9ybS1hbnN3ZXItZmllbGRcIj4gJytcclxuICAgICAgICAnPC9kaXY+IFxcbiAnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdnZXRSZXNwb3NuZVRlbXBsYXRlIC0gcG9zdCAtIGZpZWxkJywgYmFzZUZpZWxkKVxyXG4gICAgfSk7XHJcbiAgICAvLyAoYXR0dWFsbWVudGUgbm9uIGVzaXN0ZSBpbCBjb25jZXR0byBkaSB0ZW1wYXRlIGRpIG91dHB1dClcclxuICAgICAgdGVtcGxhdGUgKz0gJzwvZGl2Pic7XHJcbiAgICAgIHJldHVybiB0ZW1wbGF0ZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGdldFJlc3BvbnNlVGVtcGxhdGVcclxuXHJcbiAgcHJpdmF0ZSByZXBsYWNlVGVtcGxhdGVQbGFjZWhvbGRlcnNXaXRoVmFsdWVzKHRlbXBsYXRlOiBzdHJpbmcsIG91dHB1dFZhbHVlc0FycmF5OiBBcnJheTxhbnk+LCByZWdleCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZShyZWdleCwgKG1hdGNoLCBncm91cCkgPT4ge1xyXG4gICAgICByZXR1cm4gPHN0cmluZz5vdXRwdXRWYWx1ZXNBcnJheVtncm91cF07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRlbGF5KG1zOiBudW1iZXIpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSggcmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyByZXNpemVCYXNlNjRJbWFnZSAoYmFzZTY0SW1hZ2U6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICAgIGltZy5zcmMgPSBiYXNlNjRJbWFnZTtcclxuICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xyXG4gICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIGNvbnN0IHdpZHRoID0gaW1nLndpZHRoO1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IGltZy5oZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgYXNwZWN0UmF0aW8gPSB3aWR0aCAvIGhlaWdodDtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBuZXdIZWlnaHQgPSAxMjg7XHJcbiAgICAgICAgY29uc3QgbmV3V2lkdGggPSBuZXdIZWlnaHQgKiBhc3BlY3RSYXRpbztcclxuXHJcbiAgICAgICAgY2FudmFzLndpZHRoID0gbmV3V2lkdGg7XHJcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IG5ld0hlaWdodDtcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCwgbmV3V2lkdGgsIG5ld0hlaWdodCk7XHJcbiAgICAgICAgbGV0IHF1YWxpdHkgPSAwLjg7XHJcbiAgICAgICAgbGV0IGRhdGFVUkwgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgcXVhbGl0eSk7XHJcbiAgICAgICAgcmVzb2x2ZShkYXRhVVJMKTtcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH0gIFxyXG5cclxuICBzZXREYXRhR2V0dGVyKGZvcm0pe1xyXG4gICAgZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHJcbiAgICAgIC8vIFRyYXNmb3JtbyBpbCBCYXNlNjRTdHJpbmcgZGVsIERhdGFnZXR0ZXIgbmVsIERhdGFnZXR0ZXIgdmVybyBlIHByb3ByaW9cclxuICAgICAgaWYgKGZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZyAhPSBudWxsKXtcclxuICAgICAgICBmaWVsZC5EYXRhR2V0dGVyID0gSlNPTi5wYXJzZShhdG9iKGZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZykpO1xyXG4gICAgICAgIGZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPSBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IG51bGwgPyBEYXRhR2V0dGVyVHlwZUVudW0uTWFudWFsZSA6IGZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGU7ICAgXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmllbGQuRGF0YUdldHRlciA9IG5ldyBEYXRhR2V0dGVyKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZpZWxkLkRhdGFHZXR0ZXJWYWx1ZUJhc2U2NFN0cmluZyA9IG51bGw7XHJcblxyXG4gICAgfSk7ICAgICAgXHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gY2hlY2tUcmlnZ2Vyc1xyXG4gIC8vIENvbnRyb2xsYSBlIHNwYXJhIGlsIHRyaWdnZXIgc2UgbmVjZXNzYXJpb1xyXG4gIGNoZWNrVHJpZ2dlcnMocmVjb3JkOiBSZWNvcmQpe1xyXG4gICAgdmFyIGZpcmVUcmlnZ2VyID0gdHJ1ZTtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGluc2lkZSBjaGVja1RyaWdnZXJzKClcIiwgdGhpcy5mb3JtLlRyaWdnZXJzKTtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JtLlRyaWdnZXJzICE9IG51bGwpe1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGhhdmUgdHJpZ2dlcnMgaW4gZm9ybVwiKTtcclxuICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzLmZvckVhY2goKHRyaWdnZXIpID0+IHtcclxuICAgICAgICBmaXJlVHJpZ2dlciA9IHRydWU7XHJcbiAgICAgICAgdHJpZ2dlci5jb25kaXRpb25zLmZvckVhY2goKGNvbmRpdGlvbikgPT4ge1xyXG4gICAgICAgICAgaWYgKCFmaXJlVHJpZ2dlcikgeyByZXR1cm47IH1cclxuICAgICAgICAgIHZhciBsb2dpY09wZXJhdG9yOiBMb2dpY09wZXJhdG9yID0gY29uZGl0aW9uLmxvZ2ljb3BlcmF0b3IgYXMgTG9naWNPcGVyYXRvcjsgXHJcbiAgICAgICAgICB2YXIgY29uZGl0aW9uS2V5ID0gT2JqZWN0LmtleXMoY29uZGl0aW9uLnJlY29yZClbMF07XHJcbiAgICAgICAgICB2YXIgY29uZGl0aW9uVmFsdWUgPSBjb25kaXRpb24ucmVjb3JkW2NvbmRpdGlvbktleV07XHJcbiAgICAgICAgICB2YXIgcmVjb3JkVmFsdWUgPSByZWNvcmRbY29uZGl0aW9uS2V5XTtcclxuXHJcbiAgICAgICAgICBpZiAobG9naWNPcGVyYXRvciA9PSBMb2dpY09wZXJhdG9yWyc9J10gJiYgY29uZGl0aW9uVmFsdWUgIT0gcmVjb3JkVmFsdWUpe1xyXG4gICAgICAgICAgICBmaXJlVHJpZ2dlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ1RyaWdnZXIodHJpZ2dlcixjb25kaXRpb24scmVjb3JkKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChsb2dpY09wZXJhdG9yID09IExvZ2ljT3BlcmF0b3JbJyE9J10gJiYgY29uZGl0aW9uVmFsdWUgPT0gcmVjb3JkVmFsdWUpe1xyXG4gICAgICAgICAgICBmaXJlVHJpZ2dlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ1RyaWdnZXIodHJpZ2dlcixjb25kaXRpb24scmVjb3JkKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfSAgICAgICAgXHJcblxyXG4gICAgICAgICAgaWYgKGxvZ2ljT3BlcmF0b3IgPT0gTG9naWNPcGVyYXRvclsnPCddICYmIGNvbmRpdGlvblZhbHVlIDw9IHJlY29yZFZhbHVlKXtcclxuICAgICAgICAgICAgZmlyZVRyaWdnZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5sb2dUcmlnZ2VyKHRyaWdnZXIsY29uZGl0aW9uLHJlY29yZCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAobG9naWNPcGVyYXRvciA9PSBMb2dpY09wZXJhdG9yWyc8PSddICYmIGNvbmRpdGlvblZhbHVlIDwgcmVjb3JkVmFsdWUpe1xyXG4gICAgICAgICAgICBmaXJlVHJpZ2dlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ1RyaWdnZXIodHJpZ2dlcixjb25kaXRpb24scmVjb3JkKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChsb2dpY09wZXJhdG9yID09IExvZ2ljT3BlcmF0b3JbJz4nXSAmJiBjb25kaXRpb25WYWx1ZSA+PSByZWNvcmRWYWx1ZSl7XHJcbiAgICAgICAgICAgIGZpcmVUcmlnZ2VyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubG9nVHJpZ2dlcih0cmlnZ2VyLGNvbmRpdGlvbixyZWNvcmQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGxvZ2ljT3BlcmF0b3IgPT0gTG9naWNPcGVyYXRvclsnPj0nXSAmJiBjb25kaXRpb25WYWx1ZSA+IHJlY29yZFZhbHVlKXtcclxuICAgICAgICAgICAgZmlyZVRyaWdnZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5sb2dUcmlnZ2VyKHRyaWdnZXIsY29uZGl0aW9uLHJlY29yZCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAobG9naWNPcGVyYXRvciA9PSBMb2dpY09wZXJhdG9yWydMSUtFJ10gJiYgcmVjb3JkVmFsdWUuaW5kZXhPZihjb25kaXRpb25WYWx1ZSkgPT0gLTEpe1xyXG4gICAgICAgICAgICBmaXJlVHJpZ2dlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ1RyaWdnZXIodHJpZ2dlcixjb25kaXRpb24scmVjb3JkKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfSAgXHJcblxyXG4gICAgICAgICAgaWYgKGxvZ2ljT3BlcmF0b3IgPT0gTG9naWNPcGVyYXRvclsnTk9UIExJS0UnXSAmJiByZWNvcmRWYWx1ZS5pbmRleE9mKGNvbmRpdGlvblZhbHVlKSAhPSAtMSl7XHJcbiAgICAgICAgICAgIGZpcmVUcmlnZ2VyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubG9nVHJpZ2dlcih0cmlnZ2VyLGNvbmRpdGlvbixyZWNvcmQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9ICAgICAgICAgIFxyXG5cclxuICAgICAgICAgIGlmIChsb2dpY09wZXJhdG9yID09IExvZ2ljT3BlcmF0b3IuU2kgJiYgIXJlY29yZFZhbHVlKXtcclxuICAgICAgICAgICAgZmlyZVRyaWdnZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5sb2dUcmlnZ2VyKHRyaWdnZXIsY29uZGl0aW9uLHJlY29yZCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH0gICAgICAgIFxyXG5cclxuICAgICAgICAgIGlmIChsb2dpY09wZXJhdG9yID09IExvZ2ljT3BlcmF0b3IuTm8gJiYgcmVjb3JkVmFsdWUpe1xyXG4gICAgICAgICAgICBmaXJlVHJpZ2dlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ1RyaWdnZXIodHJpZ2dlcixjb25kaXRpb24scmVjb3JkKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfSAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIGZpcmVUcmlnZ2VyPyBcIiwgZmlyZVRyaWdnZXIpO1xyXG5cclxuICAgICAgICBpZiAoZmlyZVRyaWdnZXIpe1xyXG5cclxuICAgICAgICAgIC8vIElsIHRyaWdnZXIgdmEgc3BhcmF0by4gVmFsdXRvIGxlIGZ1bnppb25pIGludGVybmVcclxuICAgICAgICAgIHZhciBmb3JtdWxhcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodHJpZ2dlci5mb3JtdWxhcykpO1xyXG5cclxuICAgICAgICAgIE9iamVjdC5rZXlzKGZvcm11bGFzKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgdmFyIGZvcm11bGEgPSBmb3JtdWxhc1trZXldLnZhbHVlO1xyXG4gICAgICAgICAgICB2YXIgdGVtcCA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKFxyXG4gICAgICAgICAgICAgIGZvcm11bGEsXHJcbiAgICAgICAgICAgICAgcmVjb3JkLFxyXG4gICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGZvcm11bGFzW2tleV0gPSB0ZW1wO1xyXG5cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIFNwYXJvIGlsIHRyaWdnZXIgYWxsJ2VzdGVybm9cclxuICAgICAgICAgIHZhciB0cmlnZ2VyVG9GaXJlOiBGaXJlVHJpZ2dlciA9IG5ldyBGaXJlVHJpZ2dlcigpO1xyXG4gICAgICAgICAgdHJpZ2dlclRvRmlyZS5mb3JtID0gdGhpcy5mb3JtOyAvLyBJbCBmb3JtIGNoZSBoYSBwcm92b2NhdG8gaWwgdHJpZ2dlclxyXG4gICAgICAgICAgdHJpZ2dlclRvRmlyZS5yZWNvcmQgPSByZWNvcmQ7IC8vIElsIHJlY29yZCBjaGUgaGEgcHJvdm9jYXRvIGlsIHRyaWdnZXJcclxuICAgICAgICAgIHRyaWdnZXJUb0ZpcmUudHJpZ2dlciA9IHRyaWdnZXI7IC8vIElsIHRyaWdnZXJcclxuICAgICAgICAgIHRyaWdnZXJUb0ZpcmUuZm9ybXVsYXMgPSBmb3JtdWxhczsgLy8gTGUgZm9ybXVsZSBpbnZpYXRlIGluIGlucHV0IGFsIG1vZHVsbyBkaW5hbWljbywgdmFsdXRhdGUgbmVsIGNvbnRlc3RvIGRlbCB0cmlnZ2VyIGUgZGVsIHJlY29yZFxyXG4gICAgICAgICAgdHJpZ2dlclRvRmlyZS51c2VyUGF0aWVudCA9IHRoaXMudXNlcklEOyAvLyBVc2VySURcclxuXHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIFRyaWdnZXIgRmlyZWQgXCIsIHRyaWdnZXJUb0ZpcmUpO1xyXG4gICAgICAgICAgdGhpcy5maXJlVHJpZ2dlci5lbWl0KHRyaWdnZXJUb0ZpcmUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9nVHJpZ2dlcih0cmlnZ2VyLGNvbmRpdGlvbixyZWNvcmQpe1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNoZWNrVHJpZ2dlcnMgLSBDb25kaXRpb24gdGhhdCBpbnZhbGlkYXRlZCB0aGUgdHJpZ2dlciBUUklHR0VSXCIsIHRyaWdnZXIpO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNoZWNrVHJpZ2dlcnMgLSBDb25kaXRpb24gdGhhdCBpbnZhbGlkYXRlZCB0aGUgdHJpZ2dlciBDT05ESVRJT05cIiwgY29uZGl0aW9uKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjaGVja1RyaWdnZXJzIC0gQ29uZGl0aW9uIHRoYXQgaW52YWxpZGF0ZWQgdGhlIHRyaWdnZXIgUkVDT1JEXCIsIHJlY29yZCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBjaGVja1RyaWdnZXJzXHJcblxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkZXJcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGVxcC1keW5hbWljLW1vZHVsZS10aXRsZSBhZGQtZm9ybS1yZWNvcmQtaGVhZGVyXCIgKm5nSWY9XCJzaG93VGl0bGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7Zm9ybS5OYW1lfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1Gb3JtXCIgY2xhc3M9XCJhZGQtZm9ybS1yZWNvcmQtZm9ybVwiPlxyXG5cclxuICAgICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBTRU1QTElDRSAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybS5Gb3JtU2NhbGFyVHlwZSA9PSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2VcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWVsZFRlbXBsYXRlc1wiXHJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkczogZm9ybS5GaWVsZHMgfVwiIGNsYXNzPVwiYWRkLWZvcm0tcmVjb3JkLXNlbXBsaWNlXCI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgU1RFUFBFUiAtLT5cclxuICAgICAgICA8bWF0LWhvcml6b250YWwtc3RlcHBlciBsaW5lYXIgKm5nSWY9XCJmb3JtLkZvcm1TY2FsYXJUeXBlID09IEZvcm1TY2FsYXJUeXBlRW51bVsnQSBzdGVwJ11cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImFkZC1mb3JtLXJlY29yZC1zdGVwcGVyXCI+XHJcbiAgICAgICAgICAgIDxtYXQtc3RlcCAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZm9ybS5Gb3JtRmllbGRzR3JvdXBzOyBsZXQgaSA9IGluZGV4OyBsZXQgZmlyc3QgPSBmaXJzdDsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7Z3JvdXAuTmFtZX19XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRUZW1wbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkczogZmllbGRHcm91cHNbZ3JvdXAuTmFtZV0gfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYWRkLWZvcm0tcmVjb3JkLWJ1dHRvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWZpcnN0XCIgY2xhc3M9XCJtci0yIHByZXZpb3VzXCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBQcmVjZWRlbnRlXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFsYXN0XCIgY2xhc3M9XCJidXR0b24tbmV4dFwiIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1yYWlzZWQtYnV0dG9uIG1hdFN0ZXBwZXJOZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTdWNjZXNzaXZvXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImxhc3QgJiYgc2hvd1NhdmVCdXR0b25cIiAoY2xpY2spPVwic2F2ZU9yRXhpdEZvcm0oZmFsc2UpXCIgY2xhc3M9XCJidXR0b24tbmV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1yYWlzZWQtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTYWx2YVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L21hdC1zdGVwPlxyXG4gICAgICAgIDwvbWF0LWhvcml6b250YWwtc3RlcHBlcj5cclxuXHJcbiAgICAgICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgQSBUQUIgLS0+XHJcbiAgICAgICAgPG1hdC10YWItZ3JvdXAgKm5nSWY9XCJmb3JtLkZvcm1TY2FsYXJUeXBlID09IEZvcm1TY2FsYXJUeXBlRW51bVsnSW4gdGFiJ11cIiBjbGFzcz1cImFkZC1mb3JtLXJlY29yZC10YWJcIj5cclxuICAgICAgICAgICAgPG1hdC10YWIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGZvcm0uRm9ybUZpZWxkc0dyb3Vwc1wiIFtsYWJlbF09XCJncm91cC5OYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRUZW1wbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZHM6IGZpZWxkR3JvdXBzW2dyb3VwLk5hbWVdIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxyXG5cclxuICAgICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBRCBBQ0NPUkRJT04gLS0+XHJcbiAgICAgICAgPG1hdC1hY2NvcmRpb24gbXVsdGkgKm5nSWY9XCJmb3JtLkZvcm1TY2FsYXJUeXBlID09IEZvcm1TY2FsYXJUeXBlRW51bVsnSW4gYWNjb3JkaW9uJ11cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImFkZC1mb3JtLXJlY29yZC1hY2NvcmRpb25cIj5cclxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGZvcm0uRm9ybUZpZWxkc0dyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Z3JvdXAuTmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRUZW1wbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkczogZmllbGRHcm91cHNbZ3JvdXAuTmFtZV0gfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgICA8L21hdC1hY2NvcmRpb24+XHJcbiAgICA8L2Zvcm0+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtdC0yIGFkZC1mb3JtLXJlY29yZC1idXR0b25zXCJcclxuICAgICAgICAqbmdJZj1cIihzaG93QmFja0J1dHRvbiB8fCBzaG93U2F2ZUJ1dHRvbikgJiYgZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW1bJ0Egc3RlcCddXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiB0ZXh0LXJpZ2h0XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yXCIgbWF0LXJhaXNlZC1idXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwic2hvd0JhY2tCdXR0b25cIiAoY2xpY2spPVwic2F2ZU9yRXhpdEZvcm0odHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgIEFubnVsbGFcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwic2hvd1NhdmVCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVPckV4aXRGb3JtKGZhbHNlKVwiIFtkaXNhYmxlZF09XCJmb3JtRm9ybS5pbnZhbGlkIHx8IGZvcm1Gb3JtLmRpc2FibGVkIHx8IGlzU2F2aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc1NhdmluZ1wiPlNhbHZhPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1NhdmluZ1wiPlNhbHZhdGFnZ2lvIGluIENvcnNvLi4uPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIExBIFZJU1VBTElaWkFaSU9ORSBERUkgQ0FNUEkgREVMTEEgRk9STSAtLT5cclxuPG5nLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlcyBsZXQtZmllbGRzPSdmaWVsZHMnPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiZm9ybWxvYWRlZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZpZWxkc1wiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInV0aWxpdHlTZXJ2aWNlLmdldEZpZWxkU3lsZUNsYXNzKGZpZWxkLCBzaG93QWxsRmllbGRzKVwiPlxyXG4gICAgICAgICAgICA8ZHluYW1pYy1tb2R1bGUtZmllbGQtZml4ICNmaWVsZFRlbXBsYXRlIFtmaWVsZF09XCJmaWVsZFwiIFtRdWVyeUVkaXRvckNvbXBvbmVudF09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiIFtmb3JtXT1cImZvcm1cIiBbcmVjb3JkXT1cInJlY29yZFwiIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCIgW3VzZXJJRF09XCJ1c2VySURcIiBbaW5Db25maWddPVwiaW5Db25maWdcIlxyXG4gICAgICAgICAgICAgICAgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICAgICAgICAgIDwvZHluYW1pYy1tb2R1bGUtZmllbGQtZml4PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
|
|
758
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWZvcm0tcmVjb3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvYWRkLWZvcm0tcmVjb3JkL2FkZC1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2FkZC1mb3JtLXJlY29yZC9hZGQtZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWEsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNILE9BQU8sRUFBRSxXQUFXLEVBQWEsVUFBVSxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xKLE9BQU8sRUFBUSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFbkYsT0FBTyxFQUE2QyxhQUFhLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUU1SCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFLcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQVcsdUJBQXVCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7OztBQVFqRyxNQUFNLE9B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QU8sRUFBQyxTQUFTLEVBQUMsTUFBTTtRQUNqQyxhQUFhLENBQUMsUUFBUSxDQUFDLGdFQUFnRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2xHLGFBQWEsQ0FBQyxRQUFRLENBQUMsa0VBQWtFLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdEcsYUFBYSxDQUFDLFFBQVEsQ0FBQywrREFBK0QsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRyxDQUFDOztvSEFoMEJVLHNCQUFzQjt3R0FBdEIsc0JBQXNCLDJtQkN4Qm5DLHc2SkFtR2M7NEZEM0VELHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxpQkFBaUI7MklBTWxCLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csR0FBRztzQkFBWixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBZVAsYUFBYTtzQkFEWixZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBBbnN3ZXJTdHlsZSwgQmFzZUZpZWxkLCBEYXRhR2V0dGVyLCBEYXRhR2V0dGVyVHlwZUVudW0sIEZpZWxkSW52aXNpYmlsaXR5RW51bSwgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtLCBGb3JtU2NhbGFyVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IER5blJlY29yZCwgUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVGaWVsZEZpeENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeC9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbmRQb2ludENvbmZpZ3VyYXRpb24sIEVuZFBvaW50RGF0YVBhcmFtcywgUGFyYW1UeXBlRW51bSB9IGZyb20gJy4vLi4vLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IE51bWVyaWNGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgSW1hZ2VTZWxlY3RvckZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZVNlbGVjdG9yRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBEeW5BdHRhY2htZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2R5bkF0dGFjaG1lbnQnO1xyXG5pbXBvcnQgeyBEeW5hbWljTG9hZGVyRGlyZWN0aXZlRGF0YSwgZXZlbnRPdXQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZGlyZWN0aXZlcy9keW5hbWljLWxvYWRlci9keW5hbWljLWxvYWRlci5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgTG9naWNPcGVyYXRvciB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9sb2dpY09wZXJhdG9yLm1vZGVsJztcclxuaW1wb3J0IHsgRmlyZVRyaWdnZXIsIFRyaWdnZXIsIFRyaWdnZXJQcm9wZXJ0eVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3RyaWdnZXIubW9kZWwnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImFkZC1mb3JtLXJlY29yZFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vYWRkLWZvcm0tcmVjb3JkLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2FkZC1mb3JtLXJlY29yZC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZEZvcm1SZWNvcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUNvbXBpbGVDb25maWc7XHJcbiAgQElucHV0KCkgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgdXNlcklEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgb3JnYUlEOiBzdHJpbmcgPSBudWxsOyAvLyBwcmV2aWV3XHJcbiAgXHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmcgPSBudWxsOyAvLyBwcmV2aWV3XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybSA9IG51bGw7IC8vIHByZXZpZXcgY29uZmlnXHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQgfCBzdHJpbmcgPSBudWxsOyAvLyBlZGl0XHJcbiAgQElucHV0KCkgb25seVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBpc0R1cGxpY2F0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGluQ29uZmlnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0FsbEZpZWxkczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBRdWVyeUVkaXRvckNvbXBvbmVudDogRHluYW1pY0xvYWRlckRpcmVjdGl2ZURhdGE7IC8vIEwnaW50ZXJvIGNvbXBvbmVudGUgcXVlcnkgRWRpdG9yXHJcblxyXG4gIEBPdXRwdXQoKSBzYXZlUmVjb3JkRXZlbnQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIGFmdGVyU2F2ZVJlY29yZEV2ZW50OiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBvdXQ6IEV2ZW50RW1pdHRlcjxldmVudE91dD4gPSBuZXcgRXZlbnRFbWl0dGVyPGV2ZW50T3V0PigpO1xyXG4gIEBPdXRwdXQoKSBmaXJlVHJpZ2dlcjogRXZlbnRFbWl0dGVyPEZpcmVUcmlnZ2VyPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlyZVRyaWdnZXI+KCk7XHJcblxyXG4gIHNob3dUaXRsZSA9IHRydWU7XHJcbiAgc2hvd1NhdmVCdXR0b24gPSB0cnVlO1xyXG4gIHNob3dCYWNrQnV0dG9uID0gdHJ1ZTtcclxuICBsb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1NhdmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGZvcm1sb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZm9ybUZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgZmllbGRHcm91cHM6IHsgW2tleTogc3RyaW5nXTogQXJyYXk8QmFzZUZpZWxkPiB9ID0ge307XHJcbiAgRm9ybVNjYWxhclR5cGVFbnVtID0gRm9ybVNjYWxhclR5cGVFbnVtO1xyXG4gIEZpZWxkVHlwZUVudW0gPSBGaWVsZFR5cGVFbnVtO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFwiZmllbGRUZW1wbGF0ZVwiKVxyXG4gIGZpZWxkVGVtcGxhdGU6IFF1ZXJ5TGlzdDxEeW5hbWljTW9kdWxlRmllbGRGaXhDb21wb25lbnQ+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybSAhPSBudWxsICYmIHRoaXMub3JnYUlEICE9IG51bGwpe1xyXG4gICAgICAgdGhpcy5mb3JtLk9yZ2FJRCA9IHRoaXMub3JnYUlEO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGFkZCBwdcOyIGZ1bnppb25hcmUgYW5jaGUgY29tZSBtb2RpZmljYSBlIGNvbWUgcHJldmlld1xyXG4gICAgLy8gaW4gYWRkIGFiYmlhbW8gaW4gaW5wdXQgbCdJRCBkZWwgRm9ybVxyXG4gICAgLy8gaW4gbW9kaWZpY2EgYWJiaWFtbyBpbiBpbnB1dCBsJ0lEIGRlbCBSZWNvcmRcclxuICAgIC8vIGluIHByZXZpZXcgYWJiaWFtbyBpbiBpbnB1dCBpbCBGb3JtKGNhc28gY29uZmlndXJhdG9yKSBvIGwnSUQgZGVsIG1vZHVsbyBvbiBvbmx5VmlldyBpbXBvc3RhdG8gYSB0cnVlXHJcbiAgICB0aGlzLnNob3dUaXRsZSA9IHRoaXMuY29uZmlndXJhdGlvbnMuc2hvd1RpdGxlO1xyXG4gICAgdGhpcy5zaG93U2F2ZUJ1dHRvbiA9IHRoaXMuY29uZmlndXJhdGlvbnMuc2hvd1NhdmVCdXR0b247XHJcbiAgICB0aGlzLnNob3dCYWNrQnV0dG9uID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93QmFja0J1dHRvbjtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiQWRkRm9ybVJlY29yZFwiKVxyXG5cclxuICAgIGlmICh0aGlzLnJlY29yZCA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2hvd1RpdGxlID0gdHJ1ZTtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkFkZEZvcm1SZWNvcmQgLSBuZXdcIilcclxuICAgICAgdGhpcy5wcmV2aWV3T3JOZXdSZXNwb25zZVJlY29yZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93VGl0bGUgPSBmYWxzZTtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkFkZEZvcm1SZWNvcmQgLSBlZGl0XCIsIHRoaXMucmVjb3JkKVxyXG4gICAgICB0aGlzLmVkaXRSZXNwb25zZVJlY29yZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGwnaW5pemlhbGl6emF6aW9uZSB0ZXJtaW5hIGNvbiBpbCByZWN1cGVybyBkZWwgcmVjb3JkIG8gY29uIGwnaW5pemlhbGl6emF6aW9uZSBkZWwgZm9ybSB2dW90b1xyXG5cclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ29uaW5pdCAtIER5bmFGb3JtJywgdGhpcy5mb3JtKVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIG9uUmVjb3JkQ2hhbmdlXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIGNhbWJpbyBkZWwgdmFsb3JlIGRpIG9nbmkgcHJvcHJpZXTDoCBkZWxsJ29nZ2V0dG8gcmVjb3JkLlxyXG4gICAqIFNlcnZlIGFkIGFnZ2lvcm5hcmUgaWwgdmFsb3JlIGRpIHR1dHRpIGkgY2FtcGkgY2hlIGhhbm5vIHVuYSBmb3JtdWxhLlxyXG4gICAqL1xyXG4gIG9uUmVjb3JkQ2hhbmdlKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGRUZW1wbGF0ZSAmJiB0aGlzLmZpZWxkVGVtcGxhdGUubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmZpZWxkVGVtcGxhdGUuZm9yRWFjaCgoZikgPT4gZi51cGRhdGVGaWVsZCgpKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uUmVjb3JkQ2hhbmdlXHJcblxyXG4gIC8vI3JlZ2lvbiBwcmV2aWV3T3JOZXdSZXNwb25zZVJlY29yZFxyXG4gIHByZXZpZXdPck5ld1Jlc3BvbnNlUmVjb3JkKCkge1xyXG4gICAgdGhpcy5yZWNvcmQgPSBuZXcgUmVjb3JkKCk7XHJcbiAgICAvLyBhZ2dpdWduaSBudW92b1xyXG4gICAgaWYgKHRoaXMuZm9ybSAhPSBudWxsKSB7XHJcbiAgICAgIC8vIHByZXZpZXcgcGVyIGlsIGNvbmZpZ3VyYXRvclxyXG4gICAgICB0aGlzLmZpZWxkc0NvbmZpZygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm1JRCAhPSBudWxsKSB7XHJcbiAgICAgIC8vIHByZXZpZXcgcGVyIGFkbWluXHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUJ5SUQoKTsgLy8gZGVudHJvIGNoaWFtYSBmaWVsZHNDb25maWdcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIHByZXZpZXdPck5ld1Jlc3BvbnNlUmVjb3JkXHJcblxyXG4gIC8vI3JlZ2lvbiBlZGl0UmVzcG9uc2VSZWNvcmRcclxuICBlZGl0UmVzcG9uc2VSZWNvcmQoKSB7XHJcbiAgICBcclxuICAgIC8vIG1vZGlpbHTDoCBtb2RpZmljYVxyXG4gICAgaWYgKHR5cGVvZiB0aGlzLnJlY29yZCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAvLyBhbGxvcmEgw6ggdW4gSURcclxuICAgICAgdGhpcy5nZXRSZWNvcmRCeUlEKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBpbCByZWNvcmQgdmllbmUgcGFzc2F0byBjb21lIHRhbGVcclxuICAgICAgLy8gKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLkVudElEID0gXCIzXCI7XHJcbiAgICAgIC8vICg8UmVjb3JkPnRoaXMucmVjb3JkKS5WZXJzaW9uO1xyXG4gICAgICB0aGlzLmdldEZvcm1CeUlEYW5kVmVyc2lvbih0cnVlKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGVkaXRSZXNwb25zZVJlY29yZFxyXG5cclxuICAvLyNyZWdpb24gc2F2ZU9yRXhpdEZvcm1cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNhbHZhcmUgaSBkYXRpIGluc2VyaXRpIGRhbGwndXRlbnRlIHVuYSB2b2x0YSBjb25jbHVzYSBsYSBjb21waWxhemlvbmUgZGVsbGEgZm9ybS5cclxuICAgKi9cclxuICBzYXZlT3JFeGl0Rm9ybShleGl0OiBib29sZWFuKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdhZGQtZm9ybS1yZWNvcmQgc2F2ZVJlY29yZEV2ZW50JylcclxuICAgIGlmIChleGl0KSB7XHJcbiAgICAgIC8vIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQobnVsbCk7XHJcbiAgICAgIHRoaXMub25TYXZlUmVjb3JkKG51bGwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLm9uU2F2ZVJlY29yZCgoPFJlY29yZD50aGlzLnJlY29yZCkpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gc2F2ZU9yRXhpdEZvcm1cclxuXHJcbiAgLy8jcmVnaW9uIG9uU2F2ZVJlY29yZFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgc2FsdmFyZSBpbCByZWNvcmQgYWdnaXVudG8gbyBtb2RpZmljYXRvLlxyXG4gICAqIFNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIHVuIGVuZFBvaW50IHBlciBpbCBzYWx2YXRhZ2dpbyB2aWVuZSBlZmZldHR1YXRhIHVuYSBjaGlhbWF0YSBhbCBzZXJ2ZXIgcGFzc2FuZG8gbCdvZ2dldG8gZGEgc2FsdmFyZVxyXG4gICAqIG5lbCBib2R5IGRlbGxhIGNoaWFtYXRhLCBhbHRyaW1lbnRpIHNjYXRlbmEgbCdldmVudG8gXCJzYXZlUmVjb3JkXCIuXHJcbiAgICogQHBhcmFtIGV2ZW50IE9nZ2V0dG8gZGkgdGlwbyBSZWNvcmQgZGEgc2FsdmFyZS5cclxuICAgKi9cclxuICBhc3luYyBvblNhdmVSZWNvcmQoZXZlbnQ6IFJlY29yZCkge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnb25TYXZlUmVjb3JkIC0gZXZlbnQnLCBldmVudClcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ29uU2F2ZVJlY29yZCAtIGZvcm0nLCB0aGlzLmZvcm0pXHJcbiAgICBpZiAoXHJcbiAgICAgIGV2ZW50ICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24gIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLlNhdmVFbmRQb2ludFxyXG4gICAgKSB7XHJcbiAgICAgIHZhciBkeW5SZWM6IER5blJlY29yZCA9IG5ldyBEeW5SZWNvcmQoKTtcclxuICAgICAgZHluUmVjLklEID0gZXZlbnQuSUQgPz8gbnVsbDtcclxuICAgICAgZHluUmVjLkVudElEID0gdGhpcy5mb3JtLklEO1xyXG4gICAgICBkeW5SZWMuVmVyc2lvbiA9IHRoaXMuZm9ybS5WZXJzaW9uO1xyXG4gICAgICBkeW5SZWMudXNlcklEID0gdGhpcy51c2VySUQ7XHJcbiAgICAgIGR5blJlYy5WYWx1ZXMgPSBldmVudCA/PyBudWxsO1xyXG4gICAgICBkeW5SZWMuSFRNTHJlYWRhYmxlVmFsdWVzID0gYXdhaXQgdGhpcy5jcmVhdGVIVE1McmVhZGFibGVWYWx1ZXMoZXZlbnQpO1xyXG5cclxuICAgICAgaWYgKGV2ZW50LkZLX0luc2VydFVzZXIgPT0gbnVsbCl7XHJcbiAgICAgICAgLy8gTnVvdm8gUmVjb3JkXHJcbiAgICAgICAgZHluUmVjLkZLX0luc2VydFVzZXIgPSB0aGlzLnVzZXJJRDtcclxuICAgICAgICBkeW5SZWMuSW5zZXJ0RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgZHluUmVjLkZLX1VwZGF0ZVVzZXIgPSB0aGlzLnVzZXJJRDtcclxuICAgICAgICBkeW5SZWMuVXBkYXRlRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gTW9kaWZpY2EgZGVsIFJlY29yZFxyXG4gICAgICAgIGR5blJlYy5GS19JbnNlcnRVc2VyID0gZXZlbnQuRktfSW5zZXJ0VXNlclxyXG4gICAgICAgIGR5blJlYy5JbnNlcnREYXRlID0gZXZlbnQuSW5zZXJ0RGF0ZTtcclxuICAgICAgICBkeW5SZWMuRktfVXBkYXRlVXNlciA9IHRoaXMudXNlcklEO1xyXG4gICAgICAgIGR5blJlYy5VcGRhdGVEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGFkZGl0aW9uYWxQYXJhbXMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXMgPT0gbnVsbCA/IGV2ZW50LkFkZGl0aW9uYWxQYXJhbXMgOiB0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxQYXJhbXM7XHJcbiAgICAgIGR5blJlYy5BZGRpdGlvbmFsUGFyYW1zID0gSlNPTi5zdHJpbmdpZnkoYWRkaXRpb25hbFBhcmFtcyk7XHJcblxyXG4gICAgICAvLyB2YXIgYWRkaXRpb25hbEluZm8gPSB0aGlzLmFkZGl0aW9uYWxJbmZvID09IG51bGwgPyBldmVudC5BZGRpdGlvbmFsSW5mbyA6IHRoaXMuYWRkaXRpb25hbEluZm87XHJcbiAgICAgIHZhciBhZGRpdGlvbmFsSW5mbyA9IGV2ZW50LkFkZGl0aW9uYWxJbmZvID09IG51bGwgPyB0aGlzLmNvbmZpZ3VyYXRpb25zLmFkZGl0aW9uYWxJbmZvIDogZXZlbnQuQWRkaXRpb25hbEluZm87XHJcbiAgICAgIGR5blJlYy5BZGRpdGlvbmFsSW5mbyA9IEpTT04uc3RyaW5naWZ5KGFkZGl0aW9uYWxJbmZvKTtcclxuXHJcbiAgICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIFBhcmFtTmFtZTogXCJSZWNvcmRcIixcclxuICAgICAgICAgIFBhcmFtVmFsdWU6IGR5blJlYyxcclxuICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIkluIEJvZHlcIl0sXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdvblNhdmVSZWNvcmQgLSBkeW5hbWljTW9kdWxlUGFyYW1zJywgZHluYW1pY01vZHVsZVBhcmFtcylcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5TYXZlRW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrVHJpZ2dlcnMoZXZlbnQpO1xyXG4gICAgICAgICAgdGhpcy5hZnRlclNhdmVSZWNvcmRFdmVudC5lbWl0KGV2ZW50KTtcclxuICAgICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIG9uU2F2ZVJlY29yZFxyXG5cclxuICAvLyNyZWdpb24gZ2V0Rm9ybUJ5SURcclxuICBnZXRGb3JtQnlJRChpZDogc3RyaW5nID0gdGhpcy5mb3JtSUQpIHtcclxuICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgIFBhcmFtVmFsdWU6IGlkLFxyXG4gICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICB0aGlzLmZvcm0uT3JnYUlEID0gdGhpcy5vcmdhSUQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gbnVsbCAmJiB0aGlzLmZvcm0uT2JqZWN0VHJpZ2dlcnMgIT0gXCJcIil7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uVHJpZ2dlcnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2Vycyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IG5ldyBBcnJheTxUcmlnZ2VyPigpO1xyXG4gICAgICAgIH0gICAgICAgIFxyXG5cclxuICAgICAgICB0aGlzLnNldERhdGFHZXR0ZXIodGhpcy5mb3JtKTtcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdnZXRGb3JtQnlJRCAtIER5bmFGb3JtJywgdGhpcy5mb3JtKVxyXG4gICAgICAgIHRoaXMuZmllbGRzQ29uZmlnKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnIpID0+IHsgfVxyXG4gICAgKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIGdldEZvcm1CeUlEXHJcblxyXG4gIC8vI3JlZ2lvbiBnZXRSZWNvcmRCeUlEXHJcbiAgLy8gY2kgZW50cm8gc29sbyBzZSDDqCBzdGF0byBwYXNzYXRvIGlsIHBhcmFtZXRybyBcInJlY29yZFwiIGNvbWUgc3RyaW5nYVxyXG4gIGdldFJlY29yZEJ5SUQoKSB7XHJcblxyXG4gICAgLy8gcHJlcGFybyBpIGRhdGkgZGVsIHJlY29yZFxyXG4gICAgdmFyIGR5bmFtaWNSZWNvcmRQYXJhbXMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLnJlY29yZCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgIGR5bmFtaWNSZWNvcmRQYXJhbXMsXHJcbiAgICAgIChyZXM6IER5blJlY29yZCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG5cclxuICAgICAgICAoPFJlY29yZD50aGlzLnJlY29yZCkgPSBKU09OLnBhcnNlKHJlcy5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICB0aGlzLnJlY29yZC5JRCA9IHRoaXMuaXNEdXBsaWNhdGUgPyBcIlwiIDogcmVzLklEO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLkVudElEID0gcmVzLkVudElEO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLnVzZXJJRCA9IHJlcy51c2VySUQ7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuVmVyc2lvbiA9IHJlcy5WZXJzaW9uO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLlZhbHVlcyA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLkZLX0luc2VydFVzZXIgPSByZXMuRktfSW5zZXJ0VXNlcjtcclxuICAgICAgICB0aGlzLnJlY29yZC5GS19VcGRhdGVVc2VyID0gcmVzLkZLX1VwZGF0ZVVzZXI7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuSW5zZXJ0RGF0ZSA9IHJlcy5JbnNlcnREYXRlO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLlVwZGF0ZURhdGUgPSByZXMuVXBkYXRlRGF0ZTtcclxuICAgICAgICBcclxuICAgICAgICAvLyB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFO1xyXG4gICAgICAgIC8vIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmdldEZvcm1CeUlEYW5kVmVyc2lvbigpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZ2V0UmVjb3JkQnlJRFxyXG5cclxuICAvLyNyZWdpb24gZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uXHJcbiAgZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uKGdldEF0dGFjaG1lbnRzOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIC8vIHByZXBhcm8gbGEgdmVyc2lvbmUgY29ycmV0dGEgZGVsIGZvcm1cclxuICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLkVudElELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcIlZlcnNpb25cIixcclxuICAgICAgICBQYXJhbVZhbHVlOiAoPFJlY29yZD50aGlzLnJlY29yZCkuVmVyc2lvbixcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uIC0gdGhpcyByZWNvcmRcIiwgPFJlY29yZD50aGlzLnJlY29yZClcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlEQW5kVmVyc2lvbkVuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkFGVEVSIGdldEZvcm1CeUlEYW5kVmVyc2lvbiAtIHRoaXMuZm9ybVwiLCByZXMpXHJcbiAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgIHRoaXMuZm9ybS5PcmdhSUQgPSB0aGlzLm9yZ2FJRDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBudWxsICYmIHRoaXMuZm9ybS5PYmplY3RUcmlnZ2VycyAhPSBcIlwiKXtcclxuICAgICAgICAgIHRoaXMuZm9ybS5UcmlnZ2VycyA9IEpTT04ucGFyc2UodGhpcy5mb3JtLk9iamVjdFRyaWdnZXJzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JtLlRyaWdnZXJzID0gbmV3IEFycmF5PFRyaWdnZXI+KCk7XHJcbiAgICAgICAgfSAgICAgICAgXHJcblxyXG4gICAgICAgIHRoaXMuc2V0RGF0YUdldHRlcih0aGlzLmZvcm0pO1xyXG5cclxuICAgICAgICB0aGlzLmNyZWF0ZVJlY29yZFByb3BlcnRpZXMoKTtcclxuICAgICAgICB0aGlzLnJlb3JkZXJGb3JtRmllbGRzKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtR3JvdXAoKTtcclxuICAgICAgICBpZiAodGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZSkge1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEdyb3VwcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFnZXRBdHRhY2htZW50cyl7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmZvcm1sb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmdldEFsbFJlY29yZEF0dGFjaG1lbnRzKCg8UmVjb3JkPnRoaXMucmVjb3JkKS5JRCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBnZXRBbGxSZWNvcmRBdHRhY2htZW50c1xyXG4gIGdldEFsbFJlY29yZEF0dGFjaG1lbnRzKHJlY29yZElEOiBzdHJpbmcpe1xyXG5cclxuICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImFuc3dlcklkXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogcmVjb3JkSUQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH1cclxuICAgIF07XHJcblxyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QWxsQXR0YWNobWVudHNFbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogQXJyYXk8RHluQXR0YWNobWVudD4pID0+IHtcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiR2V0QWxsQXR0YWNobWVudHNFbmRQb2ludCgpXCIsIHJlcyk7XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtLkltbWFnaW5lIHx8IGZpZWxkLkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtWydJbW1hZ2luZSBjb24gbWFya2VycyddKXtcclxuICAgICAgICAgICAgICB2YXIgYXR0YWNoSWQgPSB0aGlzLnJlY29yZFtmaWVsZC5OYW1lXTtcclxuICAgICAgICAgICAgICB0aGlzLnJlY29yZFtmaWVsZC5OYW1lXSA9IHJlcy5maW5kKHggPT4geC5JRCA9PSBhdHRhY2hJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZm9ybWxvYWRlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZ2V0QWxsUmVjb3JkQXR0YWNobWVudHNcclxuXHJcbiAgLy8jcmVnaW9uIGZpZWxkc0NvbmZpZ1xyXG4gIGZpZWxkc0NvbmZpZygpIHtcclxuICAgIHRoaXMuY3JlYXRlUmVjb3JkUHJvcGVydGllcygpO1xyXG4gICAgdGhpcy5yZW9yZGVyRm9ybUZpZWxkcygpO1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtR3JvdXAoKTtcclxuICAgIGlmICh0aGlzLmZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cHMoKTtcclxuICAgIH1cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJmaWVsZHNDb25maWcgLSBmb3JtXCIsIHRoaXMuZm9ybSk7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLmZvcm1sb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb24gZmllbGRzQ29uZmlnXHJcblxyXG4gIC8vI3JlZ2lvbiBjcmVhdGVSZWNvcmRQcm9wZXJ0aWVzXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgbmVsbCdvZ2dldHRvIFJlY29yZCBsZSBwcm9wcmlldMOgIG1hbmNhbnRpIHJpc3BldHRvIGFpIGNhbXBpIGNoZSBjb21wb25nb25vIGxhIGZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVSZWNvcmRQcm9wZXJ0aWVzKCkge1xyXG4gICAgY29uc3QgcmVjb3JkUHJvcGVydGllczogQXJyYXk8c3RyaW5nPiA9IE9iamVjdC5rZXlzKHRoaXMucmVjb3JkKTtcclxuICAgIHRoaXMuZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgaWYgKCFyZWNvcmRQcm9wZXJ0aWVzLmZpbmQoKHApID0+IHAgPT09IGZpZWxkLk5hbWUpKSB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbZmllbGQuTmFtZV0gPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLmZvcm0uSW5uZXJGb3JtcyAmJiB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zLmZvckVhY2goKGZvcm0pID0+IHtcclxuICAgICAgICBjb25zdCBhcnJheU5hbWU6IHN0cmluZyA9IGZvcm0uTmFtZS5zcGxpdChcIiBcIikuam9pbihcIl9cIik7XHJcbiAgICAgICAgaWYgKCFyZWNvcmRQcm9wZXJ0aWVzLmZpbmQoKHApID0+IHAgPT09IGFycmF5TmFtZSkpIHtcclxuICAgICAgICAgIHRoaXMucmVjb3JkW2FycmF5TmFtZV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZVJlY29yZFByb3BlcnRpZXMgLSBmb3JtXCIsIHRoaXMuZm9ybSk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY3JlYXRlUmVjb3JkUHJvcGVydGllcyAtIHJlY29yZFwiLCB0aGlzLnJlY29yZCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBjcmVhdGVSZWNvcmRQcm9wZXJ0aWVzXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmlvcmRpbmFyZSBpIGNhbXBpIGNoZSBjb21wb25nb25vIGxhIGZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZW9yZGVyRm9ybUZpZWxkcygpIHtcclxuICAgIGlmICh0aGlzLmZvcm0uRmllbGRzICYmIHRoaXMuZm9ybS5GaWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLnNvcnQoKGEsIGIpID0+XHJcbiAgICAgICAgYS5PcmRpbmFsUG9zaXRpb24gPiBiLk9yZGluYWxQb3NpdGlvbiA/IDEgOiBiLk9yZGluYWxQb3NpdGlvbiA+IGEuT3JkaW5hbFBvc2l0aW9uID8gLTEgOiAwKTtcclxuICAgIH1cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJyZW9yZGVyRm9ybUZpZWxkcyAtIGZvcm1cIiwgdGhpcy5mb3JtKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGlsIEZvcm1Hcm91cCBjaGUgcmFwcHJlc2VudGEgbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUZvcm1Hcm91cCgpIHtcclxuICAgIHRoaXMuZm9ybUZvcm0gPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLkNyZWF0ZUZvcm1Gb3JtR3JvdXAoXHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMsXHJcbiAgICAgICg8UmVjb3JkPnRoaXMucmVjb3JkKSxcclxuICAgICAgdGhpcy5vbmx5Vmlld1xyXG4gICAgKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVGb3JtR3JvdXAgLSBmb3JtXCIsIHRoaXMuZm9ybSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBpIGdydXBwaSBpbiBjdWkgcmFnZ3J1cHBhcmUgaSBjYW1waSBkZWxsYSBmb3JtIGluIGJhc2VcclxuICAgKiBhIGNvbWUgw6ggc3RhdGEgY29uZmlndXJhdGEgZGFsbCd1dGVudGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVGaWVsZEdyb3VwcygpIHtcclxuICAgIHRoaXMuZm9ybS5Gb3JtRmllbGRzR3JvdXBzLnNvcnQoKGEsIGIpID0+IGEuT3JkaW5hbFBvc2l0aW9uID4gYi5PcmRpbmFsUG9zaXRpb24gPyAxIDogYi5PcmRpbmFsUG9zaXRpb24gPiBhLk9yZGluYWxQb3NpdGlvbiA/IC0xIDogMClcclxuICAgICAgLm1hcCgoZykgPT4gZy5OYW1lKVxyXG4gICAgICAuZm9yRWFjaCgoZ3JvdXBOYW1lKSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWVsZEdyb3Vwc1tncm91cE5hbWVdID0gdGhpcy5mb3JtLkZpZWxkcy5maWx0ZXIoXHJcbiAgICAgICAgICAoZikgPT4gZi5GaWVsZEdyb3VwID09IGdyb3VwTmFtZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY3JlYXRlRmllbGRHcm91cHMgLSBmb3JtXCIsIHRoaXMuZm9ybSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAvLyNyZWdpb24gY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgaWwgRm9ybUdyb3VwIGNoZSByYXBwcmVzZW50YSBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzKHJlY29yZDogUmVjb3JkKSB7XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyAtIHJlY29yZFwiLCByZWNvcmQpO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyAtIGZvcm1cIiwgdGhpcy5mb3JtKTtcclxuXHJcbiAgICB2YXIgZm9ybW5hbWVzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuICAgIHRoaXMuZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtmb3JtbmFtZXMucHVzaChmaWVsZC5OYW1lKTt9KTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVIVE1McmVhZGFibGVWYWx1ZXMgLSBmb3JtIGZpZWxkcyBuYW1lc1wiLCBmb3JtbmFtZXMpO1xyXG5cclxuICAgIC8vIGFsZXJ0KFwiY29udGludWUgZm9yIHZhbHVlcz9cIilcclxuXHJcbiAgICBsZXQgb3V0cHV0VmFsdWVzQXJyYXkgPSBhd2FpdCB0aGlzLmdldFJlc3BvbnNlVmFsdWVzKHJlY29yZCwgdGhpcy5mb3JtKTtcclxuICAgIFxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyAtIG91dHB1dFZhbHVlc0FycmF5XCIsIG91dHB1dFZhbHVlc0FycmF5KTtcclxuXHJcbiAgICAvLyBhbGVydChcImNvbnRpbnVlIGZvciB0ZW1wbGF0ZXM/XCIpXHJcbiAgICBsZXQgdGVtcGxhdGU6IHN0cmluZyA9IHRoaXMuZ2V0UmVzcG9uc2VUZW1wbGF0ZShyZWNvcmQsIHRoaXMuZm9ybSk7IC8vIG9nZ2V0dG8gbmVsIHF1YWxlIHZpZW5lIGNvc3RydWl0byBpbCB0ZW1wbGF0ZSBvIGNoZSBwcmVuZGUgaWwgdmFsb3JlIGRhIHVuIHRlbXBsYXRlIGVzdGVybm9cclxuICAgIFxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyAtIHRlbXBsYXRlXCIsIHRlbXBsYXRlKTtcclxuICAgIC8vIGFsZXJ0KFwiY29udGludWUgZm9yIG91dHB1dD9cIilcclxuICAgIGNvbnN0IHJlZ2V4ID0gLyMjKFtcXHddKykjIy9nO1xyXG4gICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5yZXBsYWNlVGVtcGxhdGVQbGFjZWhvbGRlcnNXaXRoVmFsdWVzKHRlbXBsYXRlLCBvdXRwdXRWYWx1ZXNBcnJheSwgcmVnZXgpXHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyAtIG91dHB1dFwiLCBvdXRwdXQpO1xyXG4gICAgLy8gYWxlcnQoXCJjb250aW51ZSBmb3IgZW5kaW5nP1wiKVxyXG4gICAgcmV0dXJuIG91dHB1dDsgLy8gb2dnZXR0byBjaGUgY29udGVycsOgIGwnb3V0cHV0IGVsYWJvcmF0byAgICBcclxuXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBjcmVhdGVIVE1McmVhZGFibGVWYWx1ZXNcclxuXHJcbiAgLy8jcmVnaW9uIGdldFJlc3BvbnNlVmFsdWVzXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRSZXNwb25zZVZhbHVlcyhyZWNvcmQ6IFJlY29yZCwgZm9ybTogRm9ybSkge1xyXG4gICAgbGV0IG91dHB1dFZhbHVlc0FycmF5OiBBcnJheTxhbnk+ID0gW107IC8vIGFycmF5IGNvbiBpIHZhbG9yaSBkZWxsZSByaXNwb3N0ZVxyXG4gICAgLy8oPER5blJlY29yZD50aGlzLnJlY29yZCkuVmFsdWVzIMOoIGxhIGxpc3RhIGRpIG9nZ2V0dGkge2ZpZWxkTmFtZTogdmFsb3JlfVxyXG4gICAgLy8gR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIihyZWNvcmQpLlZhbHVlc1wiLCByZWNvcmQpO1xyXG5cclxuICAgIGZvcm0uRmllbGRzLmZvckVhY2goXHJcbiAgICAgIGFzeW5jIChmaWVsZCkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJnZXRSZXNwb25zZVZhbHVlcyBmaWVsZFwiLCBmaWVsZCk7XHJcbiAgICAgICAgICAvLyBsZXQgZm91bmRPYmplY3QgPSByZWNvcmQuZmluZChcclxuICAgICAgICAgIC8vICAgKG9iaikgPT4gb2JqID09PSBmaWVsZC5OYW1lXHJcbiAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgbGV0IGZvdW5kT2JqZWN0ID0gcmVjb3JkW2ZpZWxkLk5hbWVdO1xyXG5cclxuICAgICAgICAgIC8vIGZhcmUgdW4gZXZhbCBwZXIgcG9wb2xhcmUgaSB2YWx1ZVBhaXJzIHNlIMOoIHByZXNlbnRlIHVuYSBmb3JtdWxhXHJcbiAgICAgICAgICAvLyBwcmVuZGVyZSBsYSBsYWJlbCBjb3JyZXR0YVxyXG4gICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAgIC8vIFBSRVBBUk8gSUwgVkFMVUVQQUlSU1xyXG4gICAgICAgICAgc3dpdGNoKGZpZWxkLkZpZWxkVHlwZSl7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkVsZW5jbyBnZW5lcmljb1wiXTp7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBpZiAoZmllbGQuRm9ybXVsYSAhPSBudWxsICYmIGZpZWxkLkZvcm11bGEpIHtcclxuICAgICAgICAgICAgICAgIC8vIGFnZ2l1bmdvIGEgdmFsdWVwYWlycyBpIHZhbG9yaSBjYWxjb2xhdGlcclxuICAgICAgICAgICAgICAgIC8vICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnMgPSAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzID8gKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlycyA6IHt9O1xyXG4gICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYShcclxuICAgICAgICAgICAgICAgICAgZmllbGQuRm9ybXVsYSxcclxuICAgICAgICAgICAgICAgICAgcmVjb3JkLFxyXG4gICAgICAgICAgICAgICAgICBudWxsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5MiBpbiB0ZW1wKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChVdGlsaXR5SGVscGVyU2VydmljZS5pc051bWVyaWModGVtcFtrZXkyXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzW051bWJlcihrZXkyKV0gPSB0ZW1wW2tleTJdO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnNba2V5Ml0gPSB0ZW1wW2tleTJdO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSA9ICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnNbcmVjb3JkW2ZpZWxkLk5hbWVdXTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnMgIT0gbnVsbCAmJiAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIHZhIGJlbmUgY29zw6xcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlU3RyaW5nICE9IG51bGwgJiYgKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVTdHJpbmcgIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgLy8gdmEgcHJlc2EgbGEgc3RyaWduYSBlIHJpbWFwcGF0YSBuZWwgZGlhcmlvXHJcbiAgICAgICAgICAgICAgICAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzID0gR2xvYmFsU2VydmljZS5zdHJpbmdUb1ZhbHVlUGFpcnMoKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVTdHJpbmcpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgbGV0IGludmVydGVkID0ge307XHJcbiAgICAgICAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1wiLCAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzKTtcclxuICAgICAgICAgICAgICAvLyBWYWx1ZVBhaXJzOiB7U2k6ICdTaScsIE5vOiAnTm8nfVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzKSB7XHJcbiAgICAgICAgICAgICAgICBpbnZlcnRlZFsoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzW2tleV1dID0ga2V5O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzID0gaW52ZXJ0ZWQ7XHJcbiAgICAgICAgICAgICAgaWYocmVjb3JkW2ZpZWxkLk5hbWVdICE9IG51bGwgJiYgKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuSXNNdWx0aUNob2ljaGUpe1xyXG4gICAgICAgICAgICAgICAgLy8gY2FzbyBNVUxUSVNDRUxUQVxyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIHJlY29yZFtmaWVsZC5OYW1lXS5mb3JFYWNoKChlbGVtZW50LCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnNbZWxlbWVudF07XHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlICs9IGkgPT0gcmVjb3JkW2ZpZWxkLk5hbWVdLmxlbmd0aCAtMSA/IFwiXCI6IFwiLCBcIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSA9ICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnNbcmVjb3JkW2ZpZWxkLk5hbWVdXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIm91dHB1dFZhbHVlc0FycmF5XCIsIG91dHB1dFZhbHVlc0FycmF5KVxyXG5cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gbnVtZXJpY29cIl06e1xyXG4gICAgICAgICAgICAgIGlmKCg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5Jc0ludGVnZXIpe1xyXG4gICAgICAgICAgICAgICAgaWYoKDxOdW1lcmljRmllbGQ+ZmllbGQpLkRlY2ltYWxTZXBhcmF0b3IgPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gcmVjb3JkW2ZpZWxkLk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSByZWNvcmRbZmllbGQuTmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gcmVjb3JkW2ZpZWxkLk5hbWVdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnSW1tYWdpbmUnXTp7XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgLy8gUmVjdXBlcm8gaWwgQkFTRTY0IGRlbGwnaW1tYWdpbmUgUmVzaXplZCB2aWEgcHJvbWlzZSBjbGllbnRcclxuICAgICAgICAgICAgICB2YXIgcmVzaXplZEJhc2U2NCA9IGF3YWl0IHRoaXMucmVzaXplQmFzZTY0SW1hZ2UoXCJkYXRhOmltYWdlL1wiK3JlY29yZFtmaWVsZC5OYW1lXS5GaWxlRXh0ZW5zaW9uK1wiO2Jhc2U2NCxcIiArIHJlY29yZFtmaWVsZC5OYW1lXS5GaWxlRGF0YUJhc2U2NCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEFnZ2l1bmdvIGwnSFRNTCBjb24gaWwgbnVvdm8gQkFTRTY0XHJcbiAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSBcIjxpbWcgc3JjPSdcIiArIHJlc2l6ZWRCYXNlNjQrXCInIHN0eWxlPSdoZWlnaHQ6IFwiK3JlY29yZFtmaWVsZC5OYW1lXS5SZXNpemVkSW1hZ2VIZWlnaHRQeCtcInB4Jz5cIjtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnSW1tYWdpbmUgY29uIG1hcmtlcnMnXTp7XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgLy8gUmVjdXBlcm8gaWwgQkFTRTY0IGRlbGwnaW1tYWdpbmUgUmVzaXplZCB2aWEgcHJvbWlzZSBjbGllbnRcclxuICAgICAgICAgICAgICB2YXIgcmVzaXplZEJhc2U2NCA9IGF3YWl0IHRoaXMucmVzaXplQmFzZTY0SW1hZ2UoXCJkYXRhOmltYWdlL1wiK3JlY29yZFtmaWVsZC5OYW1lXS5GaWxlRXh0ZW5zaW9uK1wiO2Jhc2U2NCxcIiArIHJlY29yZFtmaWVsZC5OYW1lXS5GaWxlRGF0YUJhc2U2NCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIEFnZ2l1bmdvIGwnSFRNTCBjb24gaWwgbnVvdm8gQkFTRTY0XHJcbiAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSBcIjxpbWcgc3JjPSdcIiArIHJlc2l6ZWRCYXNlNjQrXCInIHN0eWxlPSdoZWlnaHQ6IFwiK3JlY29yZFtmaWVsZC5OYW1lXS5SZXNpemVkSW1hZ2VIZWlnaHRQeCtcInB4Jz5cIjtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVsnRWxlbmNvIGltbWFnaW5pJ106e1xyXG4gICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gXCJcIjtcclxuICAgICAgICAgICAgICBpZihyZWNvcmRbZmllbGQuTmFtZV0gIT0gbnVsbCAmJiAoPEltYWdlU2VsZWN0b3JGaWVsZD5maWVsZCkuSXNNdWx0aUNob2ljaGUpe1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkW2ZpZWxkLk5hbWVdLmZvckVhY2goKGltYWdlb2JqOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdmFyIGF0dGFjaG1lbnRJbkZvcm06IER5bkF0dGFjaG1lbnQgPSAoPEltYWdlU2VsZWN0b3JGaWVsZD5maWVsZCkuQXR0YWNobWVudExpc3QuZmluZCh4ID0+IHguSUQgPT0gaW1hZ2VvYmopO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudEluRm9ybSAhPSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSArPSBhdHRhY2htZW50SW5Gb3JtLkJ1dHRvbktleSArIFwiLCBcIjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFydHMgPSBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXS5zcGxpdChcIiwgXCIpO1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSBwYXJ0cy5zbGljZSgwLCBwYXJ0cy5sZW5ndGggLSAxKS5qb2luKFwiLCBcIik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0YWNobWVudEluRm9ybTogRHluQXR0YWNobWVudCA9ICg8SW1hZ2VTZWxlY3RvckZpZWxkPmZpZWxkKS5BdHRhY2htZW50TGlzdC5maW5kKHggPT4geC5JRCA9PSByZWNvcmRbZmllbGQuTmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRJbkZvcm0gIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gYXR0YWNobWVudEluRm9ybS5CdXR0b25LZXk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH07ICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OntcclxuICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSA9IHJlY29yZFtmaWVsZC5OYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIClcclxuXHJcbiAgICAvLyBGdW56aW9uYSwgbWEgbm9uIMOoIGFmZmlkYWJpbGUgYWwgMTAwJVxyXG4gICAgYXdhaXQgdGhpcy5kZWxheSgzMDAwKTtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib3V0cHV0VmFsdWVzQXJyYXkgMVwiLCBvdXRwdXRWYWx1ZXNBcnJheSk7XHJcbiAgICAvLyBjYW5jZWxsbyBpIHZhbG9yaSBpbmRlZmluaXRpIG8gbnVsbGlcclxuICAgIGZvciAoY29uc3QgY2hpYXZlIGluIG91dHB1dFZhbHVlc0FycmF5KSB7XHJcbiAgICAgIGlmIChvdXRwdXRWYWx1ZXNBcnJheVtjaGlhdmVdID09IHVuZGVmaW5lZCB8fCBvdXRwdXRWYWx1ZXNBcnJheVtjaGlhdmVdID09IG51bGwpXHJcbiAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbY2hpYXZlXSA9ICcnXHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0VmFsdWVzQXJyYXk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBnZXRSZXNwb25zZVZhbHVlc1xyXG5cclxuICAvLyNyZWdpb24gZ2V0UmVzcG9uc2VUZW1wbGF0ZVxyXG4gIHByaXZhdGUgZ2V0UmVzcG9uc2VUZW1wbGF0ZShyZWNvcmQ6IFJlY29yZCwgZm9ybTogRm9ybSk6IHN0cmluZyB7XHJcbiAgICAgIGxldCB0ZW1wbGF0ZTogc3RyaW5nID0gJzxkaXYgY2xhc3M9XCJyb3dcIj4nO1xyXG4gICAgLy8gUFJFUEFSTyBPIFBSRU5ETyBMQSBTVFJVVFRVUkEgREEgU1RBTVBBUkVcclxuICAgIGZvcm0uRmllbGRzLmZvckVhY2goKGJhc2VGaWVsZDogQmFzZUZpZWxkKSA9PiB7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2dldFJlc3Bvc25lVGVtcGxhdGUgLSBwcmUgLSBmaWVsZCcsIGJhc2VGaWVsZClcclxuICAgICAgaWYoYmFzZUZpZWxkLkFuc3dlclN0eWxlID09IG51bGwgfHwgYmFzZUZpZWxkLkFuc3dlclN0eWxlID09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgYmFzZUZpZWxkLkFuc3dlclN0eWxlID0gbmV3IEFuc3dlclN0eWxlKCk7XHJcbiAgICAgICAgYmFzZUZpZWxkLkFuc3dlclN0eWxlLkNvbFNwYW5TaXplcyA9IGJhc2VGaWVsZC5Db2xTcGFuU2l6ZXM7XHJcbiAgICAgICAgYmFzZUZpZWxkLkFuc3dlclN0eWxlLkZpZWxkc3R5bGVDU1MgPSBiYXNlRmllbGQuRmllbGRzdHlsZUNTUztcclxuICAgICAgICBiYXNlRmllbGQuQW5zd2VyU3R5bGUuTGFiZWxzdHlsZUNTUyA9IGJhc2VGaWVsZC5MYWJlbHN0eWxlQ1NTO1xyXG4gICAgICAgIGlmKGJhc2VGaWVsZC5WaXNpYmxlSWYpe1xyXG4gICAgICAgICAgYmFzZUZpZWxkLkFuc3dlclN0eWxlLkluTGlzdFZpZXcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYShiYXNlRmllbGQuVmlzaWJsZUlmLCByZWNvcmQsIG51bGwpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgYmFzZUZpZWxkLkFuc3dlclN0eWxlLkluTGlzdFZpZXcgPSBiYXNlRmllbGQuSW5MaXN0VmlldztcclxuICAgICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWYgPSBiYXNlRmllbGQuVmlzaWJsZUlmO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBcclxuICAgICAgaWYoYmFzZUZpZWxkLkFuc3dlclN0eWxlLlZpc2libGVJZil7XHJcbiAgICAgICAgY29uc3QgdmlzaWJpbGl0eSA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWYsIHJlY29yZCwgbnVsbClcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiRXZhbHVhdGVGaWVsZEZvcm11bGEgLSB2aXNpYmlsaXR5XCIsIHZpc2liaWxpdHkpO1xyXG4gICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3ID0gKHZpc2liaWxpdHkgPT0gdHJ1ZSkgPyB0cnVlIDogZmFsc2UgO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3KXtcclxuICAgICAgICB0ZW1wbGF0ZSArPSAnPGRpdiBjbGFzcz1cIicrIHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0RmllbGRBbnN3ZXJTdHlsZUNsYXNzKGJhc2VGaWVsZCkgKycgZC1mbGV4IGZsZXgtY29sdW1uIGR5bmFmb3JtLWFuc3dlci1maWVsZFwiPiAnK1xyXG4gICAgICAgICcgPHNwYW4gY2xhc3M9XCJkeW5hZm9ybS1xdWVzdGlvblwiIHN0eWxlPVwiJyArIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5MYWJlbHN0eWxlQ1NTICsgJ1wiPicgKyBiYXNlRmllbGQuRGVzY3JpcHRpb24gKyAnOjwvc3Bhbj4nICsgXHJcbiAgICAgICAgJyA8c3BhbiBjbGFzcz1cImR5bmFmb3JtLXJlc3BvbnNlXCIgc3R5bGU9XCInICsgYmFzZUZpZWxkLkFuc3dlclN0eWxlLkZpZWxkc3R5bGVDU1MgKyAnXCI+ICMjJyArIGJhc2VGaWVsZC5OYW1lICsgJyMjPC9zcGFuPicgKyBcclxuICAgICAgICAnPC9kaXY+IFxcbiAnO1xyXG4gICAgICB9ZWxzZSBpZighYmFzZUZpZWxkLkFuc3dlclN0eWxlLkluTGlzdFZpZXcgJiYgYmFzZUZpZWxkLkFuc3dlclN0eWxlLkludmlzaWJpbGl0eSA9PSBGaWVsZEludmlzaWJpbGl0eUVudW1bJ05BU0NPU1RPIENPTiBBUkVBIFZJU0lCSUxFJ10pe1xyXG4gICAgICAgIHRlbXBsYXRlICs9ICc8ZGl2IGNsYXNzPVwiJysgdGhpcy51dGlsaXR5U2VydmljZS5nZXRGaWVsZEFuc3dlclN0eWxlQ2xhc3MoYmFzZUZpZWxkKSArJyBkLWZsZXggZmxleC1jb2x1bW4gZHluYWZvcm0tYW5zd2VyLWZpZWxkXCI+ICcrXHJcbiAgICAgICAgJzwvZGl2PiBcXG4gJztcclxuICAgICAgfVxyXG5cclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnZ2V0UmVzcG9zbmVUZW1wbGF0ZSAtIHBvc3QgLSBmaWVsZCcsIGJhc2VGaWVsZClcclxuICAgIH0pO1xyXG4gICAgLy8gKGF0dHVhbG1lbnRlIG5vbiBlc2lzdGUgaWwgY29uY2V0dG8gZGkgdGVtcGF0ZSBkaSBvdXRwdXQpXHJcbiAgICAgIHRlbXBsYXRlICs9ICc8L2Rpdj4nO1xyXG4gICAgICByZXR1cm4gdGVtcGxhdGU7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBnZXRSZXNwb25zZVRlbXBsYXRlXHJcblxyXG4gIHByaXZhdGUgcmVwbGFjZVRlbXBsYXRlUGxhY2Vob2xkZXJzV2l0aFZhbHVlcyh0ZW1wbGF0ZTogc3RyaW5nLCBvdXRwdXRWYWx1ZXNBcnJheTogQXJyYXk8YW55PiwgcmVnZXgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UocmVnZXgsIChtYXRjaCwgZ3JvdXApID0+IHtcclxuICAgICAgcmV0dXJuIDxzdHJpbmc+b3V0cHV0VmFsdWVzQXJyYXlbZ3JvdXBdO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxheShtczogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoIHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmVzaXplQmFzZTY0SW1hZ2UgKGJhc2U2NEltYWdlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICBpbWcuc3JjID0gYmFzZTY0SW1hZ2U7XHJcbiAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcclxuICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBjb25zdCB3aWR0aCA9IGltZy53aWR0aDtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSBpbWcuaGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gd2lkdGggLyBoZWlnaHQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gMTI4O1xyXG4gICAgICAgIGNvbnN0IG5ld1dpZHRoID0gbmV3SGVpZ2h0ICogYXNwZWN0UmF0aW87XHJcblxyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IG5ld1dpZHRoO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBuZXdIZWlnaHQ7XHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIG5ld1dpZHRoLCBuZXdIZWlnaHQpO1xyXG4gICAgICAgIGxldCBxdWFsaXR5ID0gMC44O1xyXG4gICAgICAgIGxldCBkYXRhVVJMID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIHF1YWxpdHkpO1xyXG4gICAgICAgIHJlc29sdmUoZGF0YVVSTCk7XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9ICBcclxuXHJcbiAgc2V0RGF0YUdldHRlcihmb3JtKXtcclxuICAgIGZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblxyXG4gICAgICAvLyBUcmFzZm9ybW8gaWwgQmFzZTY0U3RyaW5nIGRlbCBEYXRhZ2V0dGVyIG5lbCBEYXRhZ2V0dGVyIHZlcm8gZSBwcm9wcmlvXHJcbiAgICAgIGlmIChmaWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcgIT0gbnVsbCl7XHJcbiAgICAgICAgZmllbGQuRGF0YUdldHRlciA9IEpTT04ucGFyc2UoYXRvYihmaWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcpKTtcclxuICAgICAgICBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID0gZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBudWxsID8gRGF0YUdldHRlclR5cGVFbnVtLk1hbnVhbGUgOiBmaWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlOyAgIFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpZWxkLkRhdGFHZXR0ZXIgPSBuZXcgRGF0YUdldHRlcigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmaWVsZC5EYXRhR2V0dGVyVmFsdWVCYXNlNjRTdHJpbmcgPSBudWxsO1xyXG5cclxuICAgIH0pOyAgICAgIFxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIGNoZWNrVHJpZ2dlcnNcclxuICAvLyBDb250cm9sbGEgZSBzcGFyYSBpbCB0cmlnZ2VyIHNlIG5lY2Vzc2FyaW9cclxuICBjaGVja1RyaWdnZXJzKHJlY29yZDogUmVjb3JkKXtcclxuICAgIHZhciBmaXJlVHJpZ2dlciA9IHRydWU7XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNoZWNrVHJpZ2dlcnMgLSBpbnNpZGUgY2hlY2tUcmlnZ2VycygpXCIsIHRoaXMuZm9ybS5UcmlnZ2Vycyk7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybS5UcmlnZ2VycyAhPSBudWxsKXtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNoZWNrVHJpZ2dlcnMgLSBoYXZlIHRyaWdnZXJzIGluIGZvcm1cIik7XHJcbiAgICAgIHRoaXMuZm9ybS5UcmlnZ2Vycy5mb3JFYWNoKCh0cmlnZ2VyKSA9PiB7XHJcbiAgICAgICAgZmlyZVRyaWdnZXIgPSB0cnVlO1xyXG4gICAgICAgIHRyaWdnZXIuY29uZGl0aW9ucy5mb3JFYWNoKChjb25kaXRpb24pID0+IHtcclxuICAgICAgICAgIGlmICghZmlyZVRyaWdnZXIpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgICB2YXIgbG9naWNPcGVyYXRvcjogTG9naWNPcGVyYXRvciA9IGNvbmRpdGlvbi5sb2dpY29wZXJhdG9yIGFzIExvZ2ljT3BlcmF0b3I7IFxyXG4gICAgICAgICAgdmFyIGNvbmRpdGlvbktleSA9IE9iamVjdC5rZXlzKGNvbmRpdGlvbi5yZWNvcmQpWzBdO1xyXG4gICAgICAgICAgdmFyIGNvbmRpdGlvblZhbHVlID0gY29uZGl0aW9uLnJlY29yZFtjb25kaXRpb25LZXldO1xyXG4gICAgICAgICAgdmFyIHJlY29yZFZhbHVlID0gcmVjb3JkW2NvbmRpdGlvbktleV07XHJcblxyXG4gICAgICAgICAgaWYgKGxvZ2ljT3BlcmF0b3IgPT0gTG9naWNPcGVyYXRvclsnPSddICYmIGNvbmRpdGlvblZhbHVlICE9IHJlY29yZFZhbHVlKXtcclxuICAgICAgICAgICAgZmlyZVRyaWdnZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5sb2dUcmlnZ2VyKHRyaWdnZXIsY29uZGl0aW9uLHJlY29yZCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAobG9naWNPcGVyYXRvciA9PSBMb2dpY09wZXJhdG9yWychPSddICYmIGNvbmRpdGlvblZhbHVlID09IHJlY29yZFZhbHVlKXtcclxuICAgICAgICAgICAgZmlyZVRyaWdnZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5sb2dUcmlnZ2VyKHRyaWdnZXIsY29uZGl0aW9uLHJlY29yZCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH0gICAgICAgIFxyXG5cclxuICAgICAgICAgIGlmIChsb2dpY09wZXJhdG9yID09IExvZ2ljT3BlcmF0b3JbJzwnXSAmJiBjb25kaXRpb25WYWx1ZSA8PSByZWNvcmRWYWx1ZSl7XHJcbiAgICAgICAgICAgIGZpcmVUcmlnZ2VyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubG9nVHJpZ2dlcih0cmlnZ2VyLGNvbmRpdGlvbixyZWNvcmQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGxvZ2ljT3BlcmF0b3IgPT0gTG9naWNPcGVyYXRvclsnPD0nXSAmJiBjb25kaXRpb25WYWx1ZSA8IHJlY29yZFZhbHVlKXtcclxuICAgICAgICAgICAgZmlyZVRyaWdnZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5sb2dUcmlnZ2VyKHRyaWdnZXIsY29uZGl0aW9uLHJlY29yZCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAobG9naWNPcGVyYXRvciA9PSBMb2dpY09wZXJhdG9yWyc+J10gJiYgY29uZGl0aW9uVmFsdWUgPj0gcmVjb3JkVmFsdWUpe1xyXG4gICAgICAgICAgICBmaXJlVHJpZ2dlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ1RyaWdnZXIodHJpZ2dlcixjb25kaXRpb24scmVjb3JkKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChsb2dpY09wZXJhdG9yID09IExvZ2ljT3BlcmF0b3JbJz49J10gJiYgY29uZGl0aW9uVmFsdWUgPiByZWNvcmRWYWx1ZSl7XHJcbiAgICAgICAgICAgIGZpcmVUcmlnZ2VyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubG9nVHJpZ2dlcih0cmlnZ2VyLGNvbmRpdGlvbixyZWNvcmQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGxvZ2ljT3BlcmF0b3IgPT0gTG9naWNPcGVyYXRvclsnTElLRSddICYmIHJlY29yZFZhbHVlLmluZGV4T2YoY29uZGl0aW9uVmFsdWUpID09IC0xKXtcclxuICAgICAgICAgICAgZmlyZVRyaWdnZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5sb2dUcmlnZ2VyKHRyaWdnZXIsY29uZGl0aW9uLHJlY29yZCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH0gIFxyXG5cclxuICAgICAgICAgIGlmIChsb2dpY09wZXJhdG9yID09IExvZ2ljT3BlcmF0b3JbJ05PVCBMSUtFJ10gJiYgcmVjb3JkVmFsdWUuaW5kZXhPZihjb25kaXRpb25WYWx1ZSkgIT0gLTEpe1xyXG4gICAgICAgICAgICBmaXJlVHJpZ2dlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ1RyaWdnZXIodHJpZ2dlcixjb25kaXRpb24scmVjb3JkKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfSAgICAgICAgICBcclxuXHJcbiAgICAgICAgICBpZiAobG9naWNPcGVyYXRvciA9PSBMb2dpY09wZXJhdG9yLlNpICYmICFyZWNvcmRWYWx1ZSl7XHJcbiAgICAgICAgICAgIGZpcmVUcmlnZ2VyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubG9nVHJpZ2dlcih0cmlnZ2VyLGNvbmRpdGlvbixyZWNvcmQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9ICAgICAgICBcclxuXHJcbiAgICAgICAgICBpZiAobG9naWNPcGVyYXRvciA9PSBMb2dpY09wZXJhdG9yLk5vICYmIHJlY29yZFZhbHVlKXtcclxuICAgICAgICAgICAgZmlyZVRyaWdnZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5sb2dUcmlnZ2VyKHRyaWdnZXIsY29uZGl0aW9uLHJlY29yZCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH0gICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNoZWNrVHJpZ2dlcnMgLSBmaXJlVHJpZ2dlcj8gXCIsIGZpcmVUcmlnZ2VyKTtcclxuXHJcbiAgICAgICAgaWYgKGZpcmVUcmlnZ2VyKXtcclxuXHJcbiAgICAgICAgICAvLyBJbCB0cmlnZ2VyIHZhIHNwYXJhdG8uIFZhbHV0byBsZSBmdW56aW9uaSBpbnRlcm5lXHJcbiAgICAgICAgICB2YXIgZm9ybXVsYXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRyaWdnZXIuZm9ybXVsYXMpKTtcclxuICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjaGVja1RyaWdnZXJzIC0gZXZhbHVhdGUgZm9ybXVsYXMgXCIsIGZvcm11bGFzKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgT2JqZWN0LmtleXMoZm9ybXVsYXMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgZm9ybXVsYSA9IGZvcm11bGFzW2tleV0udmFsdWU7XHJcbiAgICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjaGVja1RyaWdnZXJzIC0gZm9ybXVsYXNba2V5XSBcIiwgZm9ybXVsYXNba2V5XSk7XHJcbiAgICAgICAgICAgIHZhciB0ZW1wO1xyXG4gICAgICAgICAgICBpZiggZm9ybXVsYXNba2V5XS50eXBlID09IFRyaWdnZXJQcm9wZXJ0eVR5cGVFbnVtLkRNTU9EVUxFICl7XHJcbiAgICAgICAgICAgICAgdGVtcCA9IGZvcm11bGFcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0ZW1wID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoXHJcbiAgICAgICAgICAgICAgICBmb3JtdWxhLFxyXG4gICAgICAgICAgICAgICAgcmVjb3JkLFxyXG4gICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGZvcm11bGFzW2tleV0gPSB0ZW1wO1xyXG5cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIFNwYXJvIGlsIHRyaWdnZXIgYWxsJ2VzdGVybm9cclxuICAgICAgICAgIHZhciB0cmlnZ2VyVG9GaXJlOiBGaXJlVHJpZ2dlciA9IG5ldyBGaXJlVHJpZ2dlcigpO1xyXG4gICAgICAgICAgdHJpZ2dlclRvRmlyZS5mb3JtID0gdGhpcy5mb3JtOyAvLyBJbCBmb3JtIGNoZSBoYSBwcm92b2NhdG8gaWwgdHJpZ2dlclxyXG4gICAgICAgICAgdHJpZ2dlclRvRmlyZS5yZWNvcmQgPSByZWNvcmQ7IC8vIElsIHJlY29yZCBjaGUgaGEgcHJvdm9jYXRvIGlsIHRyaWdnZXJcclxuICAgICAgICAgIHRyaWdnZXJUb0ZpcmUudHJpZ2dlciA9IHRyaWdnZXI7IC8vIElsIHRyaWdnZXJcclxuICAgICAgICAgIHRyaWdnZXJUb0ZpcmUuZm9ybXVsYXMgPSBmb3JtdWxhczsgLy8gTGUgZm9ybXVsZSBpbnZpYXRlIGluIGlucHV0IGFsIG1vZHVsbyBkaW5hbWljbywgdmFsdXRhdGUgbmVsIGNvbnRlc3RvIGRlbCB0cmlnZ2VyIGUgZGVsIHJlY29yZFxyXG4gICAgICAgICAgdHJpZ2dlclRvRmlyZS51c2VyUGF0aWVudCA9IHRoaXMudXNlcklEOyAvLyBVc2VySURcclxuXHJcbiAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY2hlY2tUcmlnZ2VycyAtIFRyaWdnZXIgRmlyZWQgXCIsIHRyaWdnZXJUb0ZpcmUpO1xyXG4gICAgICAgICAgdGhpcy5maXJlVHJpZ2dlci5lbWl0KHRyaWdnZXJUb0ZpcmUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9nVHJpZ2dlcih0cmlnZ2VyLGNvbmRpdGlvbixyZWNvcmQpe1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNoZWNrVHJpZ2dlcnMgLSBDb25kaXRpb24gdGhhdCBpbnZhbGlkYXRlZCB0aGUgdHJpZ2dlciBUUklHR0VSXCIsIHRyaWdnZXIpO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNoZWNrVHJpZ2dlcnMgLSBDb25kaXRpb24gdGhhdCBpbnZhbGlkYXRlZCB0aGUgdHJpZ2dlciBDT05ESVRJT05cIiwgY29uZGl0aW9uKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjaGVja1RyaWdnZXJzIC0gQ29uZGl0aW9uIHRoYXQgaW52YWxpZGF0ZWQgdGhlIHRyaWdnZXIgUkVDT1JEXCIsIHJlY29yZCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBjaGVja1RyaWdnZXJzXHJcblxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkZXJcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGVxcC1keW5hbWljLW1vZHVsZS10aXRsZSBhZGQtZm9ybS1yZWNvcmQtaGVhZGVyXCIgKm5nSWY9XCJzaG93VGl0bGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7Zm9ybS5OYW1lfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1Gb3JtXCIgY2xhc3M9XCJhZGQtZm9ybS1yZWNvcmQtZm9ybVwiPlxyXG5cclxuICAgICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBTRU1QTElDRSAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybS5Gb3JtU2NhbGFyVHlwZSA9PSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2VcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWVsZFRlbXBsYXRlc1wiXHJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkczogZm9ybS5GaWVsZHMgfVwiIGNsYXNzPVwiYWRkLWZvcm0tcmVjb3JkLXNlbXBsaWNlXCI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgU1RFUFBFUiAtLT5cclxuICAgICAgICA8bWF0LWhvcml6b250YWwtc3RlcHBlciBsaW5lYXIgKm5nSWY9XCJmb3JtLkZvcm1TY2FsYXJUeXBlID09IEZvcm1TY2FsYXJUeXBlRW51bVsnQSBzdGVwJ11cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImFkZC1mb3JtLXJlY29yZC1zdGVwcGVyXCI+XHJcbiAgICAgICAgICAgIDxtYXQtc3RlcCAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZm9ybS5Gb3JtRmllbGRzR3JvdXBzOyBsZXQgaSA9IGluZGV4OyBsZXQgZmlyc3QgPSBmaXJzdDsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7Z3JvdXAuTmFtZX19XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRUZW1wbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkczogZmllbGRHcm91cHNbZ3JvdXAuTmFtZV0gfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYWRkLWZvcm0tcmVjb3JkLWJ1dHRvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWZpcnN0XCIgY2xhc3M9XCJtci0yIHByZXZpb3VzXCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBQcmVjZWRlbnRlXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFsYXN0XCIgY2xhc3M9XCJidXR0b24tbmV4dFwiIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1yYWlzZWQtYnV0dG9uIG1hdFN0ZXBwZXJOZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTdWNjZXNzaXZvXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImxhc3QgJiYgc2hvd1NhdmVCdXR0b25cIiAoY2xpY2spPVwic2F2ZU9yRXhpdEZvcm0oZmFsc2UpXCIgY2xhc3M9XCJidXR0b24tbmV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1yYWlzZWQtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTYWx2YVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L21hdC1zdGVwPlxyXG4gICAgICAgIDwvbWF0LWhvcml6b250YWwtc3RlcHBlcj5cclxuXHJcbiAgICAgICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgQSBUQUIgLS0+XHJcbiAgICAgICAgPG1hdC10YWItZ3JvdXAgKm5nSWY9XCJmb3JtLkZvcm1TY2FsYXJUeXBlID09IEZvcm1TY2FsYXJUeXBlRW51bVsnSW4gdGFiJ11cIiBjbGFzcz1cImFkZC1mb3JtLXJlY29yZC10YWJcIj5cclxuICAgICAgICAgICAgPG1hdC10YWIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGZvcm0uRm9ybUZpZWxkc0dyb3Vwc1wiIFtsYWJlbF09XCJncm91cC5OYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRUZW1wbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZHM6IGZpZWxkR3JvdXBzW2dyb3VwLk5hbWVdIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxyXG5cclxuICAgICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBRCBBQ0NPUkRJT04gLS0+XHJcbiAgICAgICAgPG1hdC1hY2NvcmRpb24gbXVsdGkgKm5nSWY9XCJmb3JtLkZvcm1TY2FsYXJUeXBlID09IEZvcm1TY2FsYXJUeXBlRW51bVsnSW4gYWNjb3JkaW9uJ11cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImFkZC1mb3JtLXJlY29yZC1hY2NvcmRpb25cIj5cclxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGZvcm0uRm9ybUZpZWxkc0dyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Z3JvdXAuTmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRUZW1wbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkczogZmllbGRHcm91cHNbZ3JvdXAuTmFtZV0gfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgICA8L21hdC1hY2NvcmRpb24+XHJcbiAgICA8L2Zvcm0+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtdC0yIGFkZC1mb3JtLXJlY29yZC1idXR0b25zXCJcclxuICAgICAgICAqbmdJZj1cIihzaG93QmFja0J1dHRvbiB8fCBzaG93U2F2ZUJ1dHRvbikgJiYgZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW1bJ0Egc3RlcCddXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiB0ZXh0LXJpZ2h0XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yXCIgbWF0LXJhaXNlZC1idXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwic2hvd0JhY2tCdXR0b25cIiAoY2xpY2spPVwic2F2ZU9yRXhpdEZvcm0odHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgIEFubnVsbGFcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwic2hvd1NhdmVCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVPckV4aXRGb3JtKGZhbHNlKVwiIFtkaXNhYmxlZF09XCJmb3JtRm9ybS5pbnZhbGlkIHx8IGZvcm1Gb3JtLmRpc2FibGVkIHx8IGlzU2F2aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc1NhdmluZ1wiPlNhbHZhPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1NhdmluZ1wiPlNhbHZhdGFnZ2lvIGluIENvcnNvLi4uPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIExBIFZJU1VBTElaWkFaSU9ORSBERUkgQ0FNUEkgREVMTEEgRk9STSAtLT5cclxuPG5nLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlcyBsZXQtZmllbGRzPSdmaWVsZHMnPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiZm9ybWxvYWRlZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZpZWxkc1wiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInV0aWxpdHlTZXJ2aWNlLmdldEZpZWxkU3lsZUNsYXNzKGZpZWxkLCBzaG93QWxsRmllbGRzKVwiPlxyXG4gICAgICAgICAgICA8ZHluYW1pYy1tb2R1bGUtZmllbGQtZml4ICNmaWVsZFRlbXBsYXRlIFtmaWVsZF09XCJmaWVsZFwiIFtRdWVyeUVkaXRvckNvbXBvbmVudF09XCJRdWVyeUVkaXRvckNvbXBvbmVudFwiIFtmb3JtXT1cImZvcm1cIiBbcmVjb3JkXT1cInJlY29yZFwiIFtlbmRQb2ludENvbmZpZ3VyYXRpb25dPVwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCIgW3VzZXJJRF09XCJ1c2VySURcIiBbaW5Db25maWddPVwiaW5Db25maWdcIlxyXG4gICAgICAgICAgICAgICAgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICAgICAgICAgIDwvZHluYW1pYy1tb2R1bGUtZmllbGQtZml4PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
|
|
@@ -5245,9 +5245,17 @@ class AddFormRecordComponent {
|
|
|
5245
5245
|
if (fireTrigger) {
|
|
5246
5246
|
// Il trigger va sparato. Valuto le funzioni interne
|
|
5247
5247
|
var formulas = JSON.parse(JSON.stringify(trigger.formulas));
|
|
5248
|
+
GlobalService.debugLog("checkTriggers - evaluate formulas ", formulas);
|
|
5248
5249
|
Object.keys(formulas).forEach((key) => {
|
|
5249
5250
|
var formula = formulas[key].value;
|
|
5250
|
-
|
|
5251
|
+
GlobalService.debugLog("checkTriggers - formulas[key] ", formulas[key]);
|
|
5252
|
+
var temp;
|
|
5253
|
+
if (formulas[key].type == TriggerPropertyTypeEnum.DMMODULE) {
|
|
5254
|
+
temp = formula;
|
|
5255
|
+
}
|
|
5256
|
+
else {
|
|
5257
|
+
temp = UtilityHelperService.EvaluateFieldFormula(formula, record, null);
|
|
5258
|
+
}
|
|
5251
5259
|
formulas[key] = temp;
|
|
5252
5260
|
});
|
|
5253
5261
|
// Sparo il trigger all'esterno
|