master-control 0.3.82 → 0.3.84
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/esm2022/lib/medial-questions/medial-questions.component.mjs +4 -2
- package/esm2022/lib/textbox/textbox.component.mjs +10 -4
- package/fesm2022/master-control.mjs +12 -4
- package/fesm2022/master-control.mjs.map +1 -1
- package/lib/textbox/textbox.component.d.ts +1 -1
- package/master-control-0.3.84.tgz +0 -0
- package/package.json +1 -1
- package/master-control-0.3.82.tgz +0 -0
|
@@ -1088,7 +1088,9 @@ export class MedialQuestionsComponent {
|
|
|
1088
1088
|
validationObj['Type'] === 'Numeric'
|
|
1089
1089
|
? 'Only numbers are allowed.'
|
|
1090
1090
|
: null;
|
|
1091
|
-
|
|
1091
|
+
if (validationObj['Type'] === 'Numeric') {
|
|
1092
|
+
configData['isAllowNumbersInTextFields'] = true;
|
|
1093
|
+
}
|
|
1092
1094
|
if (validationObj['Type'] === 'Numeric') {
|
|
1093
1095
|
maxLength = '9'.repeat(Number(maxLength));
|
|
1094
1096
|
configData['maxValue'] = maxLength;
|
|
@@ -2386,4 +2388,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
2386
2388
|
type: ViewChild,
|
|
2387
2389
|
args: ['addressInput']
|
|
2388
2390
|
}] } });
|
|
2389
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUE2QixTQUFTLEVBQXlCLEtBQUssRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFN0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRy9ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7QUF1QjlFLE1BQU0sT0FBTyx3QkFBd0I7SUE0SGhCO0lBQXVCO0lBM0gxQyxzQkFBc0IsR0FBRyxLQUFLLEVBQU8sQ0FBQztJQUN0Qyx5QkFBeUIsR0FBUyxLQUFLLEVBQU8sQ0FBQztJQUMvQyxVQUFVLEdBQVMsRUFBRSxDQUFDO0lBQ3RCLDhCQUE4QixHQUFTLElBQUksQ0FBQztJQUM1QywyQkFBMkIsR0FBUyxFQUFFLENBQUM7SUFDWixZQUFZLENBQWdDO0lBQy9ELFlBQVksQ0FBbUM7SUFDdkQscUJBQXFCLEdBQVEsRUFBRSxDQUFDO0lBQ2hDLHFCQUFxQixHQUFRLEVBQUUsQ0FBQztJQUNoQyxLQUFLLEdBQVEsS0FBSyxDQUFDLFFBQVEsRUFBTyxDQUFDO0lBQ25DLFlBQVksR0FBUSxFQUFFLENBQUM7SUFDdkIsa0JBQWtCLEdBQVEsRUFBRSxDQUFDO0lBQzdCLG1CQUFtQixHQUFRLEVBQUUsQ0FBQztJQUM5QixNQUFNLEdBQThCLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2RSxRQUFRLENBQU07SUFDZCxTQUFTLENBQU07SUFDZixJQUFJLENBQU07SUFDVixNQUFNLEdBQVEsRUFBRSxDQUFDO0lBR2pCLGVBQWUsR0FBUTtRQUNyQiwwQkFBMEIsRUFBRSxNQUFNO1FBQ2xDLHdCQUF3QixFQUFFLENBQUM7UUFDM0IsMkJBQTJCLEVBQUUsQ0FBQztRQUM5QiwyQkFBMkIsRUFBRSxDQUFDO0tBQy9CLENBQUM7SUFDRixjQUFjLEdBQVEsRUFBRSxDQUFDO0lBQ3pCLDZCQUE2QixHQUFRLEVBQUUsQ0FBQztJQUN4Qyx3QkFBd0IsR0FBUSxFQUFFLENBQUM7SUFDbkMsMEJBQTBCLEdBQVEsRUFBRSxDQUFDO0lBQ3JDLGNBQWMsR0FBUSxDQUFDLGFBQWEsRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDckUsK0JBQStCLEdBQVE7UUFDckM7WUFDRSxLQUFLLEVBQUUsSUFBSTtZQUNYLEtBQUssRUFBRSxJQUFJO1NBQ1o7UUFDRDtZQUNFLEtBQUssRUFBRSxNQUFNO1lBQ2IsS0FBSyxFQUFFLE1BQU07U0FDZDtLQUNGLENBQUM7SUFDRixZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLGtCQUFrQixHQUFVLEVBQUUsQ0FBQztJQUMvQixZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEIsYUFBYSxDQUFNO0lBQ25CLGlCQUFpQixHQUFTO1FBQ1IsY0FBYyxFQUFFO1lBQ1osYUFBYSxFQUFFLElBQUk7WUFDbkIsYUFBYSxFQUFFLElBQUk7WUFDbkIsYUFBYSxFQUFFLElBQUk7WUFDbkIsY0FBYyxFQUFFLElBQUk7WUFDcEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsWUFBWSxFQUFFLElBQUk7WUFDbEIsWUFBWSxFQUFFLElBQUk7WUFDbEIsT0FBTyxFQUFFLElBQUk7WUFDYixZQUFZLEVBQUUsSUFBSTtZQUNsQixZQUFZLEVBQUUsSUFBSTtZQUNsQixtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLHVCQUF1QixFQUFFLElBQUk7WUFDN0IscUJBQXFCLEVBQUUsSUFBSTtZQUMzQiwwQkFBMEIsRUFBRSxJQUFJO1lBQ2hDLE9BQU8sRUFBRSxJQUFJO1lBQ2Isa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsWUFBWSxFQUFFLElBQUk7WUFDbEIsNEJBQTRCLEVBQUUsSUFBSTtZQUNsQywwQkFBMEIsRUFBRSxJQUFJO1lBQ2hDLCtCQUErQixFQUFFLElBQUk7WUFDckMsK0JBQStCLEVBQUUsSUFBSTtZQUNyQyxpQ0FBaUMsRUFBRSxJQUFJO1lBQ3ZDLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixZQUFZLEVBQUUsSUFBSTtZQUNsQixjQUFjLEVBQUUsSUFBSTtZQUNwQixtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixZQUFZLEVBQUUsSUFBSTtZQUNsQixhQUFhLEVBQUUsSUFBSTtZQUNuQixTQUFTLEVBQUUsSUFBSTtZQUNmLFFBQVEsRUFBRSxJQUFJO1lBQ2QsYUFBYSxFQUFFLElBQUk7WUFDbkIsZUFBZSxFQUFFLGtDQUFrQztZQUNuRCxhQUFhLEVBQUUsT0FBTztZQUN0QixRQUFRLEVBQUUsSUFBSTtZQUNkLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFVBQVUsRUFBRSxJQUFJO1NBQ25CO1FBQ0QsV0FBVyxFQUFFLFFBQVE7UUFDckIsT0FBTyxFQUFFLFlBQVk7UUFDckIsYUFBYSxFQUFFLElBQUk7UUFDbkIsUUFBUSxFQUFFLGtDQUFrQztRQUM1QyxXQUFXLEVBQUUsSUFBSTtRQUNqQixXQUFXLEVBQUUsS0FBSztRQUNsQixjQUFjLEVBQUUsSUFBSTtRQUNwQixZQUFZLEVBQUU7WUFDVixZQUFZLEVBQUUsS0FBSztZQUNuQixpQkFBaUIsRUFBRSw0QkFBNEI7WUFDL0MsV0FBVyxFQUFFLElBQUk7WUFDakIsa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixXQUFXLEVBQUUsSUFBSTtZQUNqQixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsZ0JBQWdCLEVBQUUsRUFBRTtTQUN2QjtRQUNELFNBQVMsRUFBRSxFQUFFO1FBQ2IsVUFBVSxFQUFFLFFBQVE7UUFDcEIsT0FBTyxFQUFFLElBQUk7UUFDYixPQUFPLEVBQUUsSUFBSTtRQUNiLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLFlBQVksRUFBRTtZQUNWLFFBQVEsRUFBRSxFQUFFO1NBQ2Y7UUFDRCxhQUFhLEVBQUUsSUFBSTtRQUNuQixhQUFhLEVBQUUsSUFBSTtRQUNuQixpQkFBaUIsRUFBRSxLQUFLO1FBQ3hCLGFBQWEsRUFBRSxRQUFRO0tBQzFCLENBQUM7SUFDaEIsV0FBVyxHQUFnQixJQUFJLENBQUM7SUFDaEMsWUFBbUIsTUFBYyxFQUFTLGFBQTZCO1FBQXBELFdBQU0sR0FBTixNQUFNLENBQVE7UUFBUyxrQkFBYSxHQUFiLGFBQWEsQ0FBZ0I7UUFDckUsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxRQUFRLEtBQUksQ0FBQztJQUViLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUNFLENBQUMsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2xILENBQUMsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQzVILENBQUM7WUFDRCxJQUFJLGFBQWEsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDL0IsU0FBUyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO29CQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO29CQUN6QyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO29CQUMzQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDZixJQUFJLENBQUMsa0JBQWtCLEdBQUc7d0JBQ3hCLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUTt3QkFDbEIsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTO3FCQUNwQixDQUFDO29CQUNGLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMvQyxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXhELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDekMsSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQzFELE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7b0JBQzFDLFFBQVEsUUFBUSxDQUFDLG9CQUFvQixFQUFFLENBQUM7d0JBQ3RDLEtBQUssS0FBSzs0QkFDUixJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQzs0QkFDMUUsTUFBTTt3QkFDUixLQUFLLE1BQU07NEJBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7NEJBQ3ZFLE1BQU07d0JBQ1IsS0FBSyxNQUFNOzRCQUNULElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDOzRCQUMxRSxNQUFNO29CQUNWLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQ3JELElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUNoQztZQUNFLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUNsQixxQkFBcUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7WUFDeEMsTUFBTSxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUM7U0FDOUQsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtZQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGVBQWU7UUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUUzQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUQsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDbkIsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUU7U0FDcEIsQ0FBQztRQUNGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRXRDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFO1lBQzdCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixPQUFPLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtZQUNoQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDekIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxLQUFxQztRQUNoRSxNQUFNLFdBQVcsR0FBRztZQUNsQixPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDdkIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDekMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3pCLENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQWU7UUFDM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTVDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDekQsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRzt3QkFDWixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRTt3QkFDbkIsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUU7cUJBQ3BCLENBQUM7b0JBQ0YsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNqQixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsR0FBRyxDQUNULHVEQUF1RCxHQUFHLE1BQU0sQ0FDakUsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFVO1FBQzVCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBRWpDLHlCQUF5QjtRQUN6QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCw4QkFBOEI7UUFDOUIsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQ3JCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNuQyxDQUFDO1lBQ0YsT0FBTztRQUNULENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEQsT0FBTztRQUNULENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDakMsSUFDRSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQzFDLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDakUsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDM0Isd0RBQXdEO1FBQ3hELHdDQUF3QztRQUV4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDN0QsT0FBTyxDQUFDLG1CQUFtQixDQUN6QjtZQUNFLEtBQUssRUFBRSxLQUFLO1lBQ1osS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDO1NBQ25CLEVBQ0QsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDdEIsSUFDRSxNQUFNLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsRUFBRTtnQkFDcEQsV0FBVyxFQUNYLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ3pELFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtvQkFDN0IsU0FBUyxFQUFFLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTO29CQUNyRCxjQUFjLEVBQUUsVUFBVSxDQUFDLHFCQUFxQixDQUFDLGNBQWM7b0JBQy9ELFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztpQkFDcEMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDekIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsVUFBZTtRQUMzQixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUN6QyxlQUFlLENBQ0ksQ0FBQztRQUN0QixJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLFlBQVksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztRQUM5QyxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQ2xELFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQzlCLENBQUM7UUFDRixPQUFPLENBQUMsVUFBVSxDQUNoQjtZQUNFLE9BQU8sRUFBRSxVQUFVLENBQUMsUUFBUTtZQUM1QixNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7U0FDMUMsRUFDRCxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNoQixJQUFJLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ2xFLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUM1QyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFFNUMsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO29CQUVwQixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDeEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELFdBQVc7UUFDVCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELCtCQUErQixDQUFDLFVBQWdCO1FBQzlDLElBQUcsVUFBVSxDQUFDLHNCQUFzQixDQUFDLEtBQUssV0FBVyxJQUFJLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFNLGVBQWUsRUFBRSxDQUFDO1lBQ2pILElBQUksQ0FBQyw4QkFBOEIsR0FBRyxVQUFVLENBQUM7UUFDbkQsQ0FBQztRQUNELElBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM1SSxVQUFVLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFvQixFQUFFLEVBQUU7Z0JBQzVFLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN2RCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7WUFDelQsSUFBSSxXQUFXLEdBQVMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUMvRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBZSxFQUFFLGVBQXdCLEVBQUUsRUFBRTtnQkFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDeEgsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUFxQixFQUFFLHFCQUE4QixFQUFFLEVBQUU7d0JBQ3pKLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQzt3QkFDNUMsSUFBRyxlQUFlLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLHFCQUFxQixLQUFLLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDbkwsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7d0JBQ2pDLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBRUwsQ0FBQztJQUNILENBQUM7SUFFRCwyQkFBMkI7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxJQUFJLEdBQVEsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLDZCQUE2QixHQUFHLEVBQUUsQ0FBQztRQUV4QyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6RCxJQUFJLGVBQWUsR0FBUSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsaUJBQXNCLEVBQUUsRUFBRTtnQkFDM0QsZUFBZSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3hELENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7Z0JBQy9CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQ3BELENBQUM7Z0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3pELElBQUksYUFBYSxHQUFRLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsa0JBQXVCLEVBQUUsRUFBRTt3QkFDNUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDOUQsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ2xFLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FDeEMsQ0FBQyxjQUFtQixFQUFFLEVBQUU7Z0NBQ3RCLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLGlCQUFpQixFQUFFLENBQUM7b0NBQ2xELGNBQWMsQ0FBQyxjQUFjLENBQUMsR0FBRyxjQUFjLENBQzdDLGNBQWMsQ0FDZixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0NBQzFCLENBQUM7Z0NBQ0QsY0FBYyxDQUFDLGNBQWMsQ0FBQztvQ0FDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dDQUVyRCxjQUFjLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQ0FFeEQsSUFBSSxjQUFjLENBQUMsc0JBQXNCLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztvQ0FDckQsY0FBYyxDQUFDLGFBQWEsQ0FBQzt3Q0FDM0Isb0hBQW9ILENBQUM7Z0NBQ3pILENBQUM7Z0NBQ0Qsb0VBQW9FO2dDQUNwRSw0TUFBNE07Z0NBQzVNLElBQUk7Z0NBQ0osSUFDRSxjQUFjLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTtvQ0FDN0MsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUNuQyxFQUNELENBQUM7b0NBQ0QsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUN4QyxDQUFDLHlCQUE4QixFQUFFLEVBQUU7d0NBQ2pDLElBQUksa0JBQWtCLEdBQVEsa0JBQWtCLENBQzlDLGNBQWMsQ0FDZixDQUFDLE1BQU0sQ0FDTixDQUFDLE1BQVcsRUFBRSxFQUFFLENBQ2QsTUFBTSxDQUFDLFlBQVksQ0FBQzs0Q0FDcEIseUJBQXlCLENBQUMsZ0JBQWdCLENBQUMsQ0FDOUMsQ0FBQzt3Q0FDRixJQUFJLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzs0Q0FDbEMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO2dEQUNwQyx5QkFBeUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO3dDQUNyRCxDQUFDO29DQUNILENBQUMsQ0FDRixDQUFDO2dDQUNKLENBQUM7Z0NBRUQsSUFBSSxjQUFjLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVSxFQUFFLENBQUM7b0NBQ2xELElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO3dDQUN2RCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUNuRCxFQUNELENBQUM7d0NBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUNsQixjQUFjLENBQUMsWUFBWSxDQUFDLENBQzdCLENBQUMsT0FBTyxDQUFDLENBQUMsaUJBQXNCLEVBQUUsRUFBRTs0Q0FDbkMsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FDekMsRUFDRCxDQUFDO2dEQUNELElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQ3JDLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQ3pDLENBQUM7NENBQ0osQ0FBQzt3Q0FDSCxDQUFDLENBQUMsQ0FBQztvQ0FDTCxDQUFDO2dDQUNILENBQUM7Z0NBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQ0FDcEQsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQ0FDN0MsQ0FBQztnQ0FFRCxjQUFjLENBQUMsc0JBQXNCLENBQUMsR0FBRyxLQUFLLENBQUM7NEJBQ2pELENBQUMsQ0FDRixDQUFDOzRCQUVGLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dDQUMzRCxRQUFRLENBQUMsb0JBQW9CLENBQUMsR0FBRyxLQUFLLENBQUM7Z0NBQ3ZDLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLFlBQVksRUFBRSxDQUFDO29DQUM5QyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsUUFBUSxDQUNqQyxjQUFjLENBQ2YsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dDQUM5QixDQUFDO2dDQUVELElBQUksUUFBUSxDQUFDLHNCQUFzQixDQUFDLEtBQUssTUFBTSxFQUFFLENBQUM7b0NBQ2hELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7b0NBQ3pELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDO29DQUN2QyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQztvQ0FDNUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRzt3Q0FDckQsV0FBVyxFQUFFLFFBQVE7d0NBQ3JCLFdBQVcsRUFBRSxTQUFTO3dDQUN0QixXQUFXLEVBQUUsT0FBTzt3Q0FDcEIsWUFBWSxFQUFFLElBQUk7d0NBQ2xCLFFBQVEsRUFBRSxNQUFNO3dDQUNoQixVQUFVLEVBQUUsS0FBSzt3Q0FDakIsVUFBVSxFQUFFLFFBQVE7d0NBQ3BCLEtBQUssRUFBRSxTQUFTO3dDQUNoQixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLGlCQUFpQixFQUFFLElBQUk7d0NBQ3ZCLHFCQUFxQixFQUFFLFNBQVM7d0NBQ2hDLG1CQUFtQixFQUFFLFNBQVM7d0NBQzlCLHdCQUF3QixFQUFFLEtBQUs7d0NBQy9CLEtBQUssRUFBRSxJQUFJO3dDQUNYLGdCQUFnQixFQUFFLE9BQU87d0NBQ3pCLGdCQUFnQixFQUFFLFNBQVM7d0NBQzNCLGVBQWUsRUFBRSxJQUFJO3dDQUNyQixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsMEJBQTBCLEVBQUUsSUFBSTt3Q0FDaEMsd0JBQXdCLEVBQUUsSUFBSTt3Q0FDOUIsNkJBQTZCLEVBQUUsSUFBSTt3Q0FDbkMsNkJBQTZCLEVBQUUsSUFBSTt3Q0FDbkMsK0JBQStCLEVBQUUsSUFBSTt3Q0FDckMsZ0JBQWdCLEVBQUUsU0FBUzt3Q0FDM0IsZ0JBQWdCLEVBQUUsT0FBTzt3Q0FDekIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLFlBQVksRUFBRSxTQUFTO3dDQUN2QixpQkFBaUIsRUFBRSxTQUFTO3dDQUM1QixnQkFBZ0IsRUFBRSxTQUFTO3dDQUMzQixnQkFBZ0IsRUFBRSxPQUFPO3dDQUN6QixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsV0FBVyxFQUFFLElBQUk7d0NBQ2pCLE9BQU8sRUFBRSxJQUFJO3dDQUNiLE1BQU0sRUFBRSxJQUFJO3dDQUNaLFdBQVcsRUFBRSxJQUFJO3dDQUNqQixhQUFhLEVBQ1gsNkNBQTZDO3dDQUMvQyxXQUFXLEVBQUUsSUFBSTt3Q0FDakIsTUFBTSxFQUFFLElBQUk7d0NBQ1osU0FBUyxFQUFFLElBQUk7d0NBQ2YsU0FBUyxFQUFFLElBQUk7d0NBQ2YsUUFBUSxFQUFFLElBQUk7d0NBQ2QsUUFBUSxFQUFFLElBQUk7d0NBQ2QsUUFBUSxFQUFFLElBQUk7cUNBQ2YsQ0FBQztnQ0FDSixDQUFDO2dDQUNELElBQUksUUFBUSxDQUFDLHNCQUFzQixDQUFDLEtBQUssTUFBTSxFQUFFLENBQUM7b0NBQ2hELElBQUksQ0FBQywwQkFBMEIsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7b0NBQzNELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDO29DQUN2QyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQztvQ0FDNUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRzt3Q0FDckQsV0FBVyxFQUFFLFFBQVE7d0NBQ3JCLFdBQVcsRUFBRSxTQUFTO3dDQUN0QixXQUFXLEVBQUUsT0FBTzt3Q0FDcEIsWUFBWSxFQUFFLElBQUk7d0NBQ2xCLFFBQVEsRUFBRSxNQUFNO3dDQUNoQixVQUFVLEVBQUUsS0FBSzt3Q0FDakIsVUFBVSxFQUFFLFFBQVE7d0NBQ3BCLEtBQUssRUFBRSxTQUFTO3dDQUNoQixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLGlCQUFpQixFQUFFLElBQUk7d0NBQ3ZCLHFCQUFxQixFQUFFLFNBQVM7d0NBQ2hDLG1CQUFtQixFQUFFLFNBQVM7d0NBQzlCLHdCQUF3QixFQUFFLEtBQUs7d0NBQy9CLEtBQUssRUFBRSxJQUFJO3dDQUNYLGdCQUFnQixFQUFFLE9BQU87d0NBQ3pCLGdCQUFnQixFQUFFLFNBQVM7d0NBQzNCLGVBQWUsRUFBRSxJQUFJO3dDQUNyQixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsMEJBQTBCLEVBQUUsSUFBSTt3Q0FDaEMsd0JBQXdCLEVBQUUsSUFBSTt3Q0FDOUIsNkJBQTZCLEVBQUUsSUFBSTt3Q0FDbkMsNkJBQTZCLEVBQUUsSUFBSTt3Q0FDbkMsK0JBQStCLEVBQUUsSUFBSTt3Q0FDckMsZ0JBQWdCLEVBQUUsU0FBUzt3Q0FDM0IsZ0JBQWdCLEVBQUUsT0FBTzt3Q0FDekIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLFlBQVksRUFBRSxTQUFTO3dDQUN2QixpQkFBaUIsRUFBRSxTQUFTO3dDQUM1QixnQkFBZ0IsRUFBRSxTQUFTO3dDQUMzQixnQkFBZ0IsRUFBRSxPQUFPO3dDQUN6QixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsV0FBVyxFQUFFLElBQUk7d0NBQ2pCLE9BQU8sRUFBRSxJQUFJO3dDQUNiLE1BQU0sRUFBRSxJQUFJO3dDQUNaLFdBQVcsRUFBRSxJQUFJO3dDQUNqQixhQUFhLEVBQ1gsNkNBQTZDO3dDQUMvQyxXQUFXLEVBQUUsSUFBSTt3Q0FDakIsTUFBTSxFQUFFLElBQUk7d0NBQ1osU0FBUyxFQUFFLElBQUk7d0NBQ2YsU0FBUyxFQUFFLElBQUk7d0NBQ2YsUUFBUSxFQUFFLElBQUk7d0NBQ2QsUUFBUSxFQUFFLElBQUk7d0NBQ2QsUUFBUSxFQUFFLElBQUk7cUNBQ2YsQ0FBQztnQ0FDSixDQUFDO2dDQUNELElBQUksUUFBUSxDQUFDLHNCQUFzQixDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7b0NBQy9DLElBQUksQ0FBQywwQkFBMEIsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7b0NBQzNELElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDO29DQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQztvQ0FDM0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRzt3Q0FDcEQsV0FBVyxFQUFFLFVBQVU7d0NBQ3ZCLFdBQVcsRUFBRSxTQUFTO3dDQUN0QixXQUFXLEVBQUUsT0FBTzt3Q0FDcEIsWUFBWSxFQUFFLElBQUk7d0NBQ2xCLFFBQVEsRUFBRSxNQUFNO3dDQUNoQixVQUFVLEVBQUUsS0FBSzt3Q0FDakIsVUFBVSxFQUFFLFFBQVE7d0NBQ3BCLEtBQUssRUFBRSxTQUFTO3dDQUNoQixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLGlCQUFpQixFQUFFLElBQUk7d0NBQ3ZCLHFCQUFxQixFQUFFLFNBQVM7d0NBQ2hDLG1CQUFtQixFQUFFLFNBQVM7d0NBQzlCLHdCQUF3QixFQUFFLEtBQUs7d0NBQy9CLEtBQUssRUFBRSxJQUFJO3dDQUNYLGdCQUFnQixFQUFFLE9BQU87d0NBQ3pCLGdCQUFnQixFQUFFLFNBQVM7d0NBQzNCLGVBQWUsRUFBRSxJQUFJO3dDQUNyQixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsMEJBQTBCLEVBQUUsSUFBSTt3Q0FDaEMsd0JBQXdCLEVBQUUsSUFBSTt3Q0FDOUIsNkJBQTZCLEVBQUUsSUFBSTt3Q0FDbkMsNkJBQTZCLEVBQUUsSUFBSTt3Q0FDbkMsK0JBQStCLEVBQUUsSUFBSTt3Q0FDckMsZ0JBQWdCLEVBQUUsU0FBUzt3Q0FDM0IsZ0JBQWdCLEVBQUUsT0FBTzt3Q0FDekIsVUFBVSxFQUFFLFNBQVM7d0NBQ3JCLFlBQVksRUFBRSxTQUFTO3dDQUN2QixpQkFBaUIsRUFBRSxTQUFTO3dDQUM1QixnQkFBZ0IsRUFBRSxTQUFTO3dDQUMzQixnQkFBZ0IsRUFBRSxPQUFPO3dDQUN6QixVQUFVLEVBQUUsU0FBUzt3Q0FDckIsV0FBVyxFQUFFLElBQUk7d0NBQ2pCLE9BQU8sRUFBRSxJQUFJO3dDQUNiLE1BQU0sRUFBRSxJQUFJO3dDQUNaLFdBQVcsRUFBRSxJQUFJO3dDQUNqQixhQUFhLEVBQ1gsNkNBQTZDO3dDQUMvQyxXQUFXLEVBQUUsSUFBSTt3Q0FDakIsTUFBTSxFQUFFLElBQUk7d0NBQ1osU0FBUyxFQUFFLElBQUk7d0NBQ2YsU0FBUyxFQUFFLElBQUk7d0NBQ2YsUUFBUSxFQUFFLElBQUk7d0NBQ2QsUUFBUSxFQUFFLElBQUk7d0NBQ2QsUUFBUSxFQUFFLElBQUk7cUNBQ2YsQ0FBQztnQ0FDSixDQUFDO2dDQUVELElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLGFBQWEsRUFBRSxDQUFDO29DQUMvQyxJQUFJLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLGFBQWEsRUFBRSxDQUFDO3dDQUN2RCw4REFBOEQ7d0NBQzlELFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7d0NBQzlCLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUM7NENBQzVCLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUM7NENBQzNDLGFBQWEsRUFBRSxHQUFHO3lDQUNuQixDQUFDLENBQUM7b0NBQ0wsQ0FBQztvQ0FDRCxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO29DQUM5QixRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDO3dDQUM1QixtQkFBbUIsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDO3dDQUMzQyxhQUFhLEVBQUUsR0FBRztxQ0FDbkIsQ0FBQyxDQUFDO2dDQUNMLENBQUM7Z0NBRUQsSUFBSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsS0FBSyxjQUFjLEVBQUUsQ0FBQztvQ0FDeEQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztnQ0FDekMsQ0FBQzs0QkFDSCxDQUFDLENBQUMsQ0FBQzs0QkFFSCxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQ3JDLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxFQUFFLENBQ2pCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FDakUsQ0FBQzt3QkFDSixDQUFDO3dCQUVELElBQUksa0JBQWtCLEdBQVEsRUFBRSxDQUFDO3dCQUNqQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7NEJBQ25DLElBQUksV0FBVyxHQUFRLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FDOUQsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxDQUMxRCxDQUFDOzRCQUNGLElBQUksR0FBRyxHQUFRO2dDQUNiLElBQUksRUFBRSxLQUFLO2dDQUNYLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0NBQ3ZELFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7b0NBQy9DLENBQUMsQ0FBQyxXQUFXO29DQUNiLENBQUMsQ0FBQyxFQUFFO2dDQUNOLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUM7b0NBQ2pELENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO29DQUN6QixDQUFDLENBQUMsRUFBRTtnQ0FDTixvQkFBb0IsRUFBRSxLQUFLO2dDQUMzQixXQUFXLEVBQUUsSUFBSTs2QkFDbEIsQ0FBQzs0QkFDRixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0NBQzNDLDZCQUE2QjtnQ0FDN0IsSUFBSSx3QkFBd0IsR0FBUSxXQUFXLENBQUMsTUFBTSxDQUNwRCxDQUFDLGNBQW1CLEVBQUUsRUFBRSxDQUN0QixjQUFjLENBQUMsc0JBQXNCLENBQUMsS0FBSyxhQUFhLENBQzNELENBQUM7Z0NBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUM7b0NBQ3hELEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUM7d0NBQ3BCLFlBQVksRUFBRSxLQUFLO3dDQUNuQixrQkFBa0IsRUFBRSxJQUFJO3dDQUN4QixzQkFBc0IsRUFBRTs0Q0FDdEIsZ0JBQWdCLEVBQ2Qsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDOzRDQUMzQyxvQkFBb0IsRUFBRSxHQUFHO3lDQUMxQjtxQ0FDRixDQUFDLENBQUM7Z0NBQ0wsQ0FBQztnQ0FFRCwwQ0FBMEM7Z0NBQzFDLElBQUksMkJBQTJCLEdBQVEsV0FBVyxDQUFDLE1BQU0sQ0FDdkQsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FDdEIsY0FBYyxDQUFDLHNCQUFzQixDQUFDLEtBQUssYUFBYSxDQUMzRCxDQUFDO2dDQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsMkJBQTJCLENBQUMsRUFBRSxDQUFDO29DQUMzRCxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUM7d0NBQ3RDLFlBQVksRUFBRSxpQkFBaUI7d0NBQy9CLGdCQUFnQixFQUFFLEdBQUc7d0NBQ3JCLFlBQVksRUFBRSxtQkFBbUI7d0NBQ2pDLGtCQUFrQixFQUFFLElBQUk7d0NBQ3hCLHNCQUFzQixFQUFFOzRDQUN0QixnQkFBZ0IsRUFDZCwyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7NENBQzlDLG9CQUFvQixFQUFFLGVBQWU7eUNBQ3RDO3FDQUNGLENBQUMsQ0FBQztvQ0FDSCxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDO3dDQUNwQixZQUFZLEVBQUUsaUJBQWlCO3dDQUMvQixnQkFBZ0IsRUFBRSxHQUFHO3dDQUNyQixZQUFZLEVBQUUsbUJBQW1CO3dDQUNqQyxrQkFBa0IsRUFBRSxJQUFJO3dDQUN4QixzQkFBc0IsRUFBRTs0Q0FDdEIsZ0JBQWdCLEVBQ2QsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDOzRDQUM5QyxvQkFBb0IsRUFBRSxlQUFlO3lDQUN0QztxQ0FDRixDQUFDLENBQUM7Z0NBQ0wsQ0FBQzs0QkFDSCxDQUFDOzRCQUNELGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDL0IsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsK0lBQStJO3dCQUMvSSxnRUFBZ0U7d0JBQ2hFLElBQUksQ0FBQyxZQUFZLEdBQUcsa0JBQWtCLENBQUM7d0JBQ3ZDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO3dCQUNoQyxJQUFJO29CQUNOLENBQUMsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDdkQsQ0FBQztZQUNILENBQUM7WUFFQyxJQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsRUFBRyxDQUFDO2dCQUMxVCxJQUFJLG1CQUFtQixHQUFRLEtBQUssQ0FBQztnQkFDckMsSUFBSSxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQztnQkFDM0MsSUFBSSxXQUFXLEdBQVMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztnQkFDL0csV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQWUsRUFBRSxFQUFFO29CQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUN4SCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGVBQXFCLEVBQUUsRUFBRTs0QkFDekgsSUFBSSxDQUFDLCtCQUErQixDQUFDLGVBQWUsQ0FBQyxDQUFDO3dCQUN4RCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEVBQUUsQ0FBQztvQkFDbEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsOEJBQThCLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsbUJBQXlCLEVBQUUsRUFBRTt3QkFDck0sSUFBSSxhQUFhLEdBQVEsRUFBRSxDQUFDO3dCQUM1QixtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFpQixFQUFFLEVBQUU7NEJBQ2hELFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FDekUsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUMxQixDQUFDOzRCQUVGLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDOzRCQUNsRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO2dDQUN0RCxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDOzRCQUMvQyxDQUFDO3dCQUVILENBQUMsQ0FBQyxDQUFDO3dCQUVILG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO3dCQUM3RyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEdBQVEsRUFBRSxFQUFFOzRCQUM3QyxJQUFJLFdBQVcsR0FBUSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7NEJBQ2xILElBQUksR0FBRyxHQUFRO2dDQUNiLElBQUksRUFBRSxJQUFJLEdBQUcsR0FBRztnQ0FDaEIsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0NBQ3BFLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dDQUNsRixvQkFBb0IsRUFBRSxJQUFJO2dDQUMxQixXQUFXLEVBQUUsSUFBSTtnQ0FDakIsVUFBVSxFQUFFLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLEVBQUU7NkJBQ3pFLENBQUM7NEJBQ0YsdURBQXVEOzRCQUN2RCw2REFBNkQ7NEJBQzdELEtBQUs7NEJBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzlCLENBQUMsQ0FBQyxDQUFBO3dCQUNGLElBQUksQ0FBQywyQkFBMkIsR0FBRyxtQkFBbUIsQ0FBQzt3QkFDdkQsMEpBQTBKO3dCQUMxSixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO3dCQUV2TCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztvQkFDaEMsQ0FBQyxFQUFFLENBQUMsR0FBUyxFQUFFLEVBQUU7d0JBQ2YsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7b0JBQ2hDLENBQUMsQ0FBQyxDQUFBO2dCQUNKLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDaEMsQ0FBQztnQkFDRCxvRUFBb0U7Z0JBQ3BFLGlJQUFpSTtnQkFDakksNkZBQTZGO2dCQUM3RixvQ0FBb0M7Z0JBQ3BDLDZDQUE2QztnQkFDN0MsOEdBQThHO2dCQUM5Ryw0R0FBNEc7Z0JBRTVHLDZFQUE2RTtnQkFHN0UsMk1BQTJNO2dCQUMzTSx1SEFBdUg7Z0JBQ3ZILG9FQUFvRTtnQkFDcEUsa0ZBQWtGO2dCQUNsRiw0RUFBNEU7Z0JBQzVFLDJMQUEyTDtnQkFDM0wsK0tBQStLO2dCQUMvSywrRUFBK0U7Z0JBQy9FLDJFQUEyRTtnQkFDM0UsK0VBQStFO2dCQUMvRSxvRkFBb0Y7Z0JBQ3BGLDZCQUE2QjtnQkFDN0IseUJBQXlCO2dCQUN6Qix1QkFBdUI7Z0JBQ3ZCLHVCQUF1QjtnQkFDdkIsMEZBQTBGO2dCQUMxRix1QkFBdUI7Z0JBQ3ZCLDhFQUE4RTtnQkFDOUUsZ0JBQWdCO2dCQUVKLHFEQUFxRDtnQkFDckQsK0VBQStFO2dCQUMvRSxJQUFJO2dCQUNKLHNEQUFzRDtnQkFDdEQscURBQXFEO2dCQUNyRCwrRkFBK0Y7Z0JBQy9GLHdFQUF3RTtnQkFDeEUsMkVBQTJFO2dCQUMzRSxhQUFhO2dCQUNiLHdFQUF3RTtnQkFDeEUsaUVBQWlFO2dCQUNqRSxNQUFNO2dCQUNOLElBQUk7Z0JBQ2hCLGtJQUFrSTtnQkFDbEksdUpBQXVKO2dCQUN2SixvRkFBb0Y7Z0JBQ3BGLHFCQUFxQjtnQkFDckIscUJBQXFCO2dCQUNyQiw4S0FBOEs7Z0JBRTlLLDZIQUE2SDtnQkFDN0gsa0ZBQWtGO2dCQUNsRixtQkFBbUI7Z0JBRW5CLGdJQUFnSTtnQkFDaEksNENBQTRDO2dCQUc1QyxxQkFBcUI7Z0JBQ3JCLDZEQUE2RDtnQkFDN0QsdUhBQXVIO2dCQUN2SCw0REFBNEQ7Z0JBQzVELG9EQUFvRDtnQkFDcEQsMENBQTBDO2dCQUMxQyxxQkFBcUI7Z0JBQ3JCLHNJQUFzSTtnQkFDdEksa0RBQWtEO2dCQUNsRCwwREFBMEQ7Z0JBQzFELGlEQUFpRDtnQkFDakQsMEVBQTBFO2dCQUMxRSwwRUFBMEU7Z0JBQzFFLG9FQUFvRTtnQkFDcEUsbUVBQW1FO2dCQUNuRSw2QkFBNkI7Z0JBQzdCLHdGQUF3RjtnQkFDeEYsMEVBQTBFO2dCQUMxRSw0QkFBNEI7Z0JBQzVCLCtGQUErRjtnQkFDL0YsMEJBQTBCO2dCQUMxQiw2QkFBNkI7Z0JBQzdCLHdFQUF3RTtnQkFDeEUscUZBQXFGO2dCQUNyRiw0QkFBNEI7Z0JBQzVCLHdHQUF3RztnQkFDeEcsc0ZBQXNGO2dCQUN0RixvSEFBb0g7Z0JBQ3BILCtCQUErQjtnQkFDL0IsaUVBQWlFO2dCQUNqRSx5SEFBeUg7Z0JBQ3pILDhCQUE4QjtnQkFDOUIsOEJBQThCO2dCQUM5QiwwQkFBMEI7Z0JBQzFCLHFHQUFxRztnQkFDckcsb0RBQW9EO2dCQUNwRCwyQkFBMkI7Z0JBRTNCLDJFQUEyRTtnQkFFM0UseUZBQXlGO2dCQUN6Rix1RkFBdUY7Z0JBQ3ZGLHdIQUF3SDtnQkFDeEgsaUNBQWlDO2dCQUNqQyw2QkFBNkI7Z0JBQzdCLGlGQUFpRjtnQkFDakYsd0VBQXdFO2dCQUN4RSwwQkFBMEI7Z0JBQzFCLDBCQUEwQjtnQkFDMUIsb0lBQW9JO2dCQUNwSSx3RUFBd0U7Z0JBQ3hFLDJJQUEySTtnQkFDM0kseUNBQXlDO2dCQUN6Qyw0Q0FBNEM7Z0JBQzVDLGdHQUFnRztnQkFDaEcsOEdBQThHO2dCQUM5RyxzREFBc0Q7Z0JBQ3RELDZDQUE2QztnQkFDN0MsMEVBQTBFO2dCQUMxRSwyQkFBMkI7Z0JBQzNCLGdGQUFnRjtnQkFDaEYsc0ZBQXNGO2dCQUN0Riw4QkFBOEI7Z0JBQzlCLHFEQUFxRDtnQkFDckQseUJBQXlCO2dCQUN6Qiw4RUFBOEU7Z0JBQzlFLGlMQUFpTDtnQkFDakwsOE1BQThNO2dCQUM5TSxzQkFBc0I7Z0JBQ3RCLG9EQUFvRDtnQkFDcEQsK0RBQStEO2dCQUMvRCxxQkFBcUI7Z0JBQ3JCLGtDQUFrQztnQkFDbEMsOERBQThEO2dCQUM5RCwwREFBMEQ7Z0JBQzFELG9CQUFvQjtnQkFDcEIsbUJBQW1CO2dCQUNuQixnQkFBZ0I7Z0JBQ2hCLHdCQUF3QjtnQkFDeEIsc0RBQXNEO2dCQUN0RCxtQkFBbUI7Z0JBRW5CLGtIQUFrSDtnQkFDbEgseURBQXlEO2dCQUN6RCw0RUFBNEU7Z0JBQzVFLDREQUE0RDtnQkFDNUQseUJBQXlCO2dCQUN6QixxQkFBcUI7Z0JBQ3JCLGtFQUFrRTtnQkFDbEUsZ0JBQWdCO2dCQUNoQix1REFBdUQ7Z0JBQ3ZELGdCQUFnQjtnQkFDaEIsWUFBWTtnQkFDWixZQUFZO2dCQUNaLFFBQVE7Z0JBQ1IsTUFBTTtnQkFDTixNQUFNO1lBQ1IsQ0FBQztRQUdMLENBQUM7UUFFRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUUvQixJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEdBQUc7WUFDekMsWUFBWSxFQUFFO2dCQUNaLFdBQVcsRUFBRSxRQUFRO2dCQUNyQixXQUFXLEVBQUUsU0FBUztnQkFDdEIsV0FBVyxFQUFFLE9BQU87Z0JBQ3BCLFlBQVksRUFBRSxJQUFJO2dCQUNsQixRQUFRLEVBQUUsTUFBTTtnQkFDaEIsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLFVBQVUsRUFBRSxRQUFRO2dCQUNwQixLQUFLLEVBQUUsU0FBUztnQkFDaEIsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixpQkFBaUIsRUFBRSxJQUFJO2dCQUN2QixxQkFBcUIsRUFBRSxTQUFTO2dCQUNoQyxtQkFBbUIsRUFBRSxTQUFTO2dCQUM5Qix3QkFBd0IsRUFBRSxLQUFLO2dCQUMvQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxnQkFBZ0IsRUFBRSxPQUFPO2dCQUN6QixnQkFBZ0IsRUFBRSxTQUFTO2dCQUMzQixlQUFlLEVBQUUsSUFBSTtnQkFDckIsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLDBCQUEwQixFQUFFLElBQUk7Z0JBQ2hDLHdCQUF3QixFQUFFLElBQUk7Z0JBQzlCLDZCQUE2QixFQUFFLElBQUk7Z0JBQ25DLDZCQUE2QixFQUFFLElBQUk7Z0JBQ25DLCtCQUErQixFQUFFLElBQUk7Z0JBQ3JDLGdCQUFnQixFQUFFLFNBQVM7Z0JBQzNCLGdCQUFnQixFQUFFLE9BQU87Z0JBQ3pCLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixZQUFZLEVBQUUsU0FBUztnQkFDdkIsaUJBQWlCLEVBQUUsU0FBUztnQkFDNUIsZ0JBQWdCLEVBQUUsU0FBUztnQkFDM0IsZ0JBQWdCLEVBQUUsT0FBTztnQkFDekIsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixPQUFPLEVBQUUsSUFBSTtnQkFDYixNQUFNLEVBQUUsSUFBSTtnQkFDWixXQUFXLEVBQUUsSUFBSTtnQkFDakIsYUFBYSxFQUFFLDZDQUE2QztnQkFDNUQsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLE1BQU0sRUFBRSxJQUFJO2dCQUNaLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFFBQVEsRUFBRSxJQUFJO2FBQ2Y7WUFDRCxTQUFTLEVBQUUsSUFBSTtZQUNmLEtBQUssRUFBRSxlQUFlO1lBQ3RCLFdBQVcsRUFBRSxFQUFFO1lBQ2YsTUFBTSxFQUFFLEVBQUU7WUFDVixTQUFTLEVBQUUsSUFBSTtZQUNmLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFVBQVUsRUFBRTtnQkFDVixVQUFVLEVBQUUsS0FBSztnQkFDakIsZUFBZSxFQUFFLDRCQUE0QjtnQkFDN0MsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsZ0JBQWdCLEVBQUUsSUFBSTtnQkFDdEIsU0FBUyxFQUFFLEdBQUc7Z0JBQ2QsZ0JBQWdCLEVBQUUsSUFBSTtnQkFDdEIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsY0FBYyxFQUFFLEVBQUU7YUFDbkI7WUFDRCxPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsS0FBSyxFQUFFLElBQUk7b0JBQ1gsS0FBSyxFQUFFLElBQUk7aUJBQ1o7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLE1BQU07b0JBQ2IsS0FBSyxFQUFFLE1BQU07aUJBQ2Q7YUFDRjtZQUNELFFBQVEsRUFBRSxJQUFJO1lBQ2QsS0FBSyxFQUFFLElBQUk7WUFDWCxLQUFLLEVBQUUsSUFBSTtZQUNYLFFBQVEsRUFBRSxJQUFJO1lBQ2QsVUFBVSxFQUFFLEVBQUU7WUFDZCxXQUFXLEVBQUUsSUFBSTtZQUNqQixXQUFXLEVBQUUsS0FBSztZQUNsQixlQUFlLEVBQUUsS0FBSztZQUN0QixXQUFXLEVBQUUsUUFBUTtTQUN0QixDQUFDO0lBQ0osQ0FBQztJQUVELHFCQUFxQixDQUFDLFNBQWM7UUFFbEMsSUFBSSxTQUFTLENBQUMsc0JBQXNCLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ2pELElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hGLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDNUQsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLGdCQUFnQixHQUFRLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBbUIsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxLQUFLLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzVMLElBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakcsSUFBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFM0UsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDaEUsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUM7WUFDeEUsU0FBUyxDQUFDLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQWdCLEVBQUUsRUFBRTtnQkFDcEUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUE7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFVO1FBQzVCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxDQUNMLEtBQUssS0FBSyxTQUFTO1lBQ25CLEtBQUssS0FBSyxJQUFJO1lBQ2QsS0FBSyxLQUFLLEVBQUU7WUFDWixDQUFDLEtBQUssWUFBWSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQy9CLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQVc7UUFDdEIsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUM3RCxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLEtBQUssZUFBZSxFQUFFLENBQUM7b0JBQzdDLE9BQU8sTUFBTSxDQUFDO2dCQUNoQixDQUFDO2dCQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsS0FBVTtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckMsT0FBTyxLQUFLO2lCQUNULFFBQVEsRUFBRTtpQkFDVixPQUFPLENBQ04sUUFBUSxFQUNSLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FDakUsQ0FBQztRQUNOLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLFdBQWdCO1FBQ3ZCLElBQUksVUFBVSxHQUFRLEVBQUUsQ0FBQztRQUN6QixJQUFJLFlBQVksR0FBUyxFQUFFLENBQUM7UUFDNUIsSUFBSSxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsaUJBQXNCLEVBQUUsRUFBRTtnQkFDN0QsVUFBVSxDQUFDLElBQUksQ0FBQztvQkFDZCxLQUFLLEVBQUUsaUJBQWlCLENBQUMsZUFBZSxDQUFDO29CQUN6QyxLQUFLLEVBQUUsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7aUJBQ2hELENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksU0FBUyxHQUFRLElBQUksQ0FBQztRQUMxQixJQUFJLFNBQVMsR0FBUSxHQUFHLENBQUM7UUFDekIsSUFBSSxPQUFPLEdBQVEsSUFBSSxDQUFDO1FBQ3hCLElBQUksY0FBYyxHQUFRLElBQUksQ0FBQztRQUMvQixJQUFJLFVBQVUsR0FBUSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsVUFBVSxDQUFDO1lBQ3ZFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsVUFBVTtZQUMxQixDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVAsSUFBRyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQU0sY0FBYyxJQUFJLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoRyxZQUFZLEdBQUc7Z0JBQ0gsYUFBYSxFQUFFLE9BQU87Z0JBQ3RCLGFBQWEsRUFBRSxTQUFTO2dCQUN4QixhQUFhLEVBQUUsS0FBSztnQkFDcEIsY0FBYyxFQUFFLElBQUk7Z0JBQ3BCLFVBQVUsRUFBRSxNQUFNO2dCQUNsQixZQUFZLEVBQUUsS0FBSztnQkFDbkIsWUFBWSxFQUFFLFFBQVE7Z0JBQ3RCLE9BQU8sRUFBRSxTQUFTO2dCQUNsQixZQUFZLEVBQUUsU0FBUztnQkFDdkIsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLG1CQUFtQixFQUFFLElBQUk7Z0JBQ3pCLHVCQUF1QixFQUFFLElBQUk7Z0JBQzdCLHFCQUFxQixFQUFFLElBQUk7Z0JBQzNCLDBCQUEwQixFQUFFLElBQUk7Z0JBQ2hDLE9BQU8sRUFBRSxJQUFJO2dCQUNiLGtCQUFrQixFQUFFLEtBQUs7Z0JBQ3pCLGtCQUFrQixFQUFFLFNBQVM7Z0JBQzdCLGlCQUFpQixFQUFFLElBQUk7Z0JBQ3ZCLFlBQVksRUFBRSxTQUFTO2dCQUN2Qiw0QkFBNEIsRUFBRSxJQUFJO2dCQUNsQywwQkFBMEIsRUFBRSxJQUFJO2dCQUNoQywrQkFBK0IsRUFBRSxJQUFJO2dCQUNyQywrQkFBK0IsRUFBRSxJQUFJO2dCQUNyQyxpQ0FBaUMsRUFBRSxJQUFJO2dCQUN2QyxrQkFBa0IsRUFBRSxTQUFTO2dCQUM3QixrQkFBa0IsRUFBRSxLQUFLO2dCQUN6QixZQUFZLEVBQUUsU0FBUztnQkFDdkIsY0FBYyxFQUFFLFNBQVM7Z0JBQ3pCLG1CQUFtQixFQUFFLFNBQVM7Z0JBQzlCLGtCQUFrQixFQUFFLFNBQVM7Z0JBQzdCLGtCQUFrQixFQUFFLEtBQUs7Z0JBQ3pCLFlBQVksRUFBRSxTQUFTO2dCQUN2QixhQUFhLEVBQUUsSUFBSTtnQkFDbkIsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLGVBQWUsRUFBRSx5Q0FBeUM7Z0JBQzFELGFBQWEsRUFBRSxJQUFJO2dCQUNuQixRQUFRLEVBQUUsSUFBSTtnQkFDZCxXQUFXLEVBQUUsSUFBSTtnQkFDakIsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsVUFBVSxFQUFFLElBQUk7YUFDakIsQ0FBQztRQUNkLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDMUQsSUFBSSxhQUFhLEdBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pELFNBQVMsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDekQsU0FBUyxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNyRCxPQUFPLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2xFLGNBQWM7b0JBQ1osYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFNBQVM7d0JBQ2pDLENBQUMsQ0FBQywyQkFBMkI7d0JBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBRVgsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUNsRixJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDeEMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQzFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxTQUFTLENBQUM7b0JBQ25DLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU87WUFDTCxVQUFVLEVBQUUsVUFBVTtZQUN0QixZQUFZLEVBQUUsWUFBWTtZQUMxQixXQUFXLEVBQ1QsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFdBQVc7Z0JBQ3pDLENBQUMsQ0FBQyxNQUFNO2dCQUNSLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssY0FBYztvQkFDOUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFNBQVM7b0JBQzNDLENBQUMsQ0FBQyxPQUFPO29CQUNULENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTt3QkFDMUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLGFBQWE7d0JBQy9DLENBQUMsQ0FBQyxVQUFVO3dCQUNaLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTs0QkFDNUMsQ0FBQyxDQUFDLE1BQU07NEJBQ1IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVO2dDQUM1QyxDQUFDLENBQUMsUUFBUTtnQ0FDVixDQUFDLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFdBQVc7b0NBQzdDLENBQUMsQ0FBQyxNQUFNO29DQUNSLENBQUMsQ0FBQyxFQUFFO1lBQ1IsU0FBUyxFQUFFLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQztZQUM5QyxTQUFTLEVBQUUsS0FBSztZQUNoQixLQUFLLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQztZQUNsQyxXQUFXLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQztZQUN4QyxVQUFVLEVBQUU7Z0JBQ1YsVUFBVSxFQUFFLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO2dCQUNsRSxTQUFTO2dCQUNULFNBQVM7Z0JBQ1QsT0FBTztnQkFDUCxjQUFjO2FBQ2Y7WUFDRCxRQUFRLEVBQUUsTUFBTTtZQUNoQixTQUFTLEVBQUUsSUFBSTtZQUNmLE9BQU8sRUFBRSxVQUFVO1lBQ25CLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUM7SUFDSixDQUFDO0lBRUQsdUJBQXVCLENBQUMsUUFBYztRQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUMxRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBa0IsRUFBRSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzFELGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFtQixFQUFFLEVBQUU7d0JBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7NEJBQ3ZDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEtBQUssQ0FBQzs0QkFDN0MsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDbkQsRUFDRCxDQUFDO2dDQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzs0QkFDNUQsQ0FBQzs0QkFDRCxJQUFJO3dCQUNOLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixjQUFjLENBQUMsb0JBQW9CLENBQUMsR0FBRyxJQUFJLENBQUM7d0JBQzlDLENBQUM7d0JBRUQsSUFBSSxjQUFjLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVSxFQUFFLENBQUM7NEJBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQ0FDOUQsSUFBSSxvQkFBb0IsR0FBUSxjQUFjLENBQzVDLGNBQWMsQ0FDZixDQUFDLE1BQU0sQ0FDTixDQUFDLFNBQWMsRUFBRSxFQUFFLENBQ2pCLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQ3RELENBQUM7Z0NBQ0YsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FDcEMsQ0FBQyxpQkFBc0IsRUFBRSxFQUFFO29DQUN6QixJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG9CQUFvQixDQUFDO3dDQUMvQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FDL0MsQ0FDRjt3Q0FDRCxJQUFJLENBQUMsZUFBZSxDQUNsQixvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUMvQyxFQUNELENBQUM7d0NBQ0QsbUJBQW1CO3dDQUNuQixjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUNwQyxDQUFDLGlCQUFzQixFQUFFLEVBQUU7NENBQ3pCLHlDQUF5Qzs0Q0FDekMsSUFDRSxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFO2dEQUM3QyxNQUFNLEVBQ04sQ0FBQztnREFDRCxpQkFBaUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dEQUNwQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQ3pCLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQ3pDLENBQUM7NENBQ0osQ0FBQzt3Q0FDSCxDQUFDLENBQ0YsQ0FBQztvQ0FDSixDQUFDO3lDQUFNLENBQUM7d0NBQ04saUJBQWlCLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztvQ0FDdkMsQ0FBQztnQ0FDSCxDQUFDLENBQ0YsQ0FBQzs0QkFDSixDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCwwTEFBMEw7Z0JBQzFMLGFBQWEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdEQsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FDL0IsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsQ0FDOUQsQ0FDRixDQUFDO2dCQUNGLGlFQUFpRTtnQkFDakUsZ0dBQWdHO2dCQUNoRyw0Q0FBNEM7Z0JBQzVDLHVLQUF1SztnQkFDdkssZ0ZBQWdGO2dCQUNoRiw2TkFBNk47Z0JBQzdOLDJEQUEyRDtnQkFDM0Qsb0ZBQW9GO2dCQUNwRixVQUFVO2dCQUNWLFVBQVU7Z0JBQ1YsTUFBTTtnQkFDTiwwUEFBMFA7Z0JBQzFQLDRDQUE0QztnQkFDNUMsdUtBQXVLO2dCQUN2SyxnRkFBZ0Y7Z0JBQ2hGLDZOQUE2TjtnQkFDN04sMkRBQTJEO2dCQUMzRCxvRkFBb0Y7Z0JBQ3BGLFVBQVU7Z0JBQ1YsVUFBVTtnQkFDVixNQUFNO2dCQUNOLElBQUk7Z0JBQ0osSUFBSSxlQUFlLEdBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQ2pELENBQUMsZ0JBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQzVELENBQUM7Z0JBQ0YsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztvQkFDOUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWtCLEVBQUUsRUFBRTt3QkFDN0MsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FDaEMsQ0FBQywwQkFBK0IsRUFBRSxFQUFFOzRCQUNsQywwQkFBMEIsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEtBQUssQ0FBQzs0QkFDekQsMk1BQTJNOzRCQUMzTSxxREFBcUQ7NEJBQ3JELHVEQUF1RDs0QkFDdkQsSUFBSTt3QkFDTixDQUFDLENBQ0YsQ0FBQztvQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFbEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFlBQVksQ0FBQyxlQUFvQjtRQUMvQixJQUFJLFlBQVksR0FBUSxLQUFLLENBQUM7UUFDOUIsSUFBSSxZQUFZLEdBQVEsRUFBRSxDQUFDO1FBQzNCLG9KQUFvSjtRQUNwSix3RkFBd0Y7UUFFeEYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFtQixFQUFFLEVBQUU7WUFDdkUsSUFBSSxtQkFBbUIsR0FBUSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xFLG1CQUFtQixHQUFHLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE1BQU0sQ0FDN0QsQ0FBQyxtQkFBd0IsRUFBRSxFQUFFLENBQzNCLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDO29CQUNyQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQ2hDLENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ2xDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLGlCQUFzQixFQUFFLEVBQUU7b0JBQ3JELElBQ0UsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTt3QkFDNUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO3dCQUM5RCxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQzs0QkFDaEQsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsQ0FBQzt3QkFDN0MsQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7NEJBQzdELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUNuRDs0QkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQ0FDaEQsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7cUNBQ3JDLFFBQVEsRUFBRTtxQ0FDVixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3JCLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7NEJBQzVDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUNuRDs0QkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO3dCQUN0Ryw4REFBOEQ7d0JBQzlELHdCQUF3Qjt3QkFDeEIsb0JBQW9CO3dCQUNwQiwrQ0FBK0M7d0JBQy9DLGVBQWU7eUJBQ2hCLEVBQ0QsQ0FBQzt3QkFDRCxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUN0QixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFDRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxFQUNuRSxDQUFDO1lBQ0QsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUNwRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsZUFBZSxDQUFDLHdCQUF3QixDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FDOUQ7WUFDRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsZUFBZSxDQUFDLHdCQUF3QixDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FDOUQsQ0FDRjtZQUNELElBQUksQ0FBQyxlQUFlLENBQ2xCLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQzlELEtBQUssZUFBZSxDQUFDLHdCQUF3QixDQUFDLENBQUMsc0JBQXNCLENBQUMsRUFDdkUsQ0FBQztZQUNELFlBQVksR0FBRyxJQUFJLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksZUFBZSxDQUFDLGNBQWMsQ0FBQyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3BELFlBQVksR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsa0RBQWtEO1FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEVBQUUsQ0FBQztZQUNsRSwrRUFBK0U7WUFDL0Usa0ZBQWtGO1lBQ2xGLHFGQUFxRjtZQUNyRixxRkFBcUY7WUFDckYscURBQXFEO1lBQ3JELGdOQUFnTjtZQUNoTiw2REFBNkQ7WUFDN0QsTUFBTTtZQUNOLE1BQU07WUFDTixrREFBa0Q7WUFDbEQscUxBQXFMO1lBQ3JMLDhEQUE4RDtZQUM5RCxNQUFNO1lBQ04sTUFBTTtZQUNOLG1EQUFtRDtZQUNuRCwwTEFBMEw7WUFDMUwsOERBQThEO1lBQzlELE1BQU07WUFDTixNQUFNO1lBQ04sbURBQW1EO1lBQ25ELDBMQUEwTDtZQUMxTCw4REFBOEQ7WUFDOUQsTUFBTTtZQUNOLE1BQU07UUFDUixDQUFDO1FBQ0QsbUNBQW1DO1FBQ25DLGlDQUFpQztRQUNqQyx1Q0FBdUM7UUFDdkMsSUFBSSxPQUFPLEdBQVEsSUFBSSxDQUFDO1FBQ3hCLHFLQUFxSztRQUNySyxtS0FBbUs7UUFDbkssNkhBQTZIO1FBQzdILDZLQUE2SztRQUM3SywyS0FBMks7UUFDM0ssZ0xBQWdMO1FBQ2hMLE1BQU07UUFDTixJQUFJO1FBRUoscURBQXFEO1FBQ3JELHlKQUF5SjtRQUN6SixxR0FBcUc7UUFDckcsbUZBQW1GO1FBQ25GLHdSQUF3UjtRQUN4UiwwRUFBMEU7UUFDMUUsa0ZBQWtGO1FBQ2xGLHFRQUFxUTtRQUVyUSx1REFBdUQ7UUFDdkQsbUZBQW1GO1FBQ25GLGlJQUFpSTtRQUNqSSwrSEFBK0g7UUFDL0gsbVJBQW1SO1FBQ25SLG1DQUFtQztRQUNuQyx1RkFBdUY7UUFDdkYsOEZBQThGO1FBQzlGLHdGQUF3RjtRQUN4Rix1RkFBdUY7UUFDdkYsb0VBQW9FO1FBQ3BFLHNCQUFzQjtRQUN0Qiw0R0FBNEc7UUFDNUcsbUVBQW1FO1FBQ25FLDhEQUE4RDtRQUM5RCxrRUFBa0U7UUFDbEUseUNBQXlDO1FBQ3pDLHNGQUFzRjtRQUN0RiwwQkFBMEI7UUFDMUIsNkJBQTZCO1FBQzdCLDBIQUEwSDtRQUMxSCx1SkFBdUo7UUFDdkosOENBQThDO1FBQzlDLDJDQUEyQztRQUMzQyx1SUFBdUk7UUFDdkksaUNBQWlDO1FBQ2pDLG1EQUFtRDtRQUNuRCwrSkFBK0o7UUFDL0osdURBQXVEO1FBQ3ZELGdEQUFnRDtRQUNoRCw2Q0FBNkM7UUFDN0MseUlBQXlJO1FBQ3pJLG1DQUFtQztRQUNuQyxxREFBcUQ7UUFDckQsK0RBQStEO1FBQy9ELGdEQUFnRDtRQUNoRCw2Q0FBNkM7UUFDN0MseUlBQXlJO1FBQ3pJLG1DQUFtQztRQUNuQyxxREFBcUQ7UUFDckQsMEJBQTBCO1FBQzFCLG1HQUFtRztRQUNuRyx1REFBdUQ7UUFDdkQsZ0RBQWdEO1FBQ2hELDZDQUE2QztRQUM3Qyx3SUFBd0k7UUFDeEksbUNBQW1DO1FBQ25DLHFEQUFxRDtRQUNyRCw4REFBOEQ7UUFDOUQsZ0RBQWdEO1FBQ2hELDZDQUE2QztRQUM3Qyx3SUFBd0k7UUFDeEksbUNBQW1DO1FBQ25DLHFEQUFxRDtRQUNyRCwwQkFBMEI7UUFDMUIsd0JBQXdCO1FBRXhCLHNCQUFzQjtRQUV0QixrQ0FBa0M7UUFDbEMsb0JBQW9CO1FBQ3BCLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFDaEIsNkNBQTZDO1FBQzdDLGtJQUFrSTtRQUNsSSxpRkFBaUY7UUFDakYsaUdBQWlHO1FBQ2pHLCtFQUErRTtRQUMvRSxpQ0FBaUM7UUFDakMscUZBQXFGO1FBQ3JGLDRGQUE0RjtRQUM1RixzRkFBc0Y7UUFDdEYscUZBQXFGO1FBQ3JGLGtFQUFrRTtRQUNsRSxvQkFBb0I7UUFDcEIsZ0hBQWdIO1FBQ2hILGlFQUFpRTtRQUNqRSw0REFBNEQ7UUFDNUQsZ0VBQWdFO1FBQ2hFLHVDQUF1QztRQUN2QyxtRUFBbUU7UUFDbkUsd0JBQXdCO1FBQ3hCLDJCQUEyQjtRQUMzQix1R0FBdUc7UUFDdkcscUpBQXFKO1FBQ3JKLDRDQUE0QztRQUM1Qyx5Q0FBeUM7UUFDekMscUlBQXFJO1FBQ3JJLCtCQUErQjtRQUMvQixpREFBaUQ7UUFDakQsNkpBQTZKO1FBQzdKLHFEQUFxRDtRQUNyRCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHVJQUF1STtRQUN2SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELDZEQUE2RDtRQUM3RCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHVJQUF1STtRQUN2SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELHdCQUF3QjtRQUN4QixpR0FBaUc7UUFDakcscURBQXFEO1FBQ3JELDhDQUE4QztRQUM5QywyQ0FBMkM7UUFDM0Msc0lBQXNJO1FBQ3RJLGlDQUFpQztRQUNqQyxtREFBbUQ7UUFDbkQsNERBQTREO1FBQzVELDhDQUE4QztRQUM5QywyQ0FBMkM7UUFDM0Msc0lBQXNJO1FBQ3RJLGlDQUFpQztRQUNqQyxtREFBbUQ7UUFDbkQsd0JBQXdCO1FBQ3hCLHNCQUFzQjtRQUN0QixvQkFBb0I7UUFFcEIsZ0NBQWdDO1FBQ2hDLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFFaEIsY0FBYztRQUVkLDZFQUE2RTtRQUM3RSxnREFBZ0Q7UUFDaEQsbUJBQW1CO1FBQ25CLGdFQUFnRTtRQUNoRSxvRkFBb0Y7UUFDcEYsMkRBQTJEO1FBQzNELDJCQUEyQjtRQUMzQixzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLHVFQUF1RTtRQUN2RSxnRkFBZ0Y7UUFDaEYsMkVBQTJFO1FBQzNFLHdFQUF3RTtRQUN4RSx3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLHNFQUFzRTtRQUN0RSxzR0FBc0c7UUFDdEcsNEpBQTRKO1FBQzVKLGtCQUFrQjtRQUNsQixpQ0FBaUM7UUFDakMscUZBQXFGO1FBQ3JGLHlHQUF5RztRQUN6RyxpRUFBaUU7UUFDakUsNEZBQTRGO1FBQzVGLHNGQUFzRjtRQUN0RixxRkFBcUY7UUFDckYsa0VBQWtFO1FBQ2xFLG9CQUFvQjtRQUNwQiw0REFBNEQ7UUFDNUQsZ0VBQWdFO1FBQ2hFLHVDQUF1QztRQUN2QyxrSEFBa0g7UUFDbEgsd0JBQXdCO1FBQ3hCLDJCQUEyQjtRQUMzQixzSkFBc0o7UUFDdEoscUpBQXFKO1FBQ3JKLDRDQUE0QztRQUM1Qyx5Q0FBeUM7UUFDekMscUlBQXFJO1FBQ3JJLCtCQUErQjtRQUMvQixpREFBaUQ7UUFDakQsNkpBQTZKO1FBQzdKLHFEQUFxRDtRQUNyRCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHVJQUF1STtRQUN2SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELDZEQUE2RDtRQUM3RCw4Q0FBOEM7UUFDOUMsMkNBQTJDO1FBQzNDLHVJQUF1STtRQUN2SSxpQ0FBaUM7UUFDakMsbURBQW1EO1FBQ25ELHdCQUF3QjtRQUN4QixpR0FBaUc7UUFDakcsc0RBQXNEO1FBQ3RELHNCQUFzQjtRQUN0QixvQkFBb0I7UUFFcEIsZ0NBQWdDO1FBQ2hDLGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFFaEIsbUJBQW1CO1FBQ25CLDJFQUEyRTtRQUMzRSxpRUFBaUU7UUFDakUsMkRBQTJEO1FBQzNELHVEQUF1RDtRQUN2RCx5QkFBeUI7UUFDekIsa0JBQWtCO1FBQ2xCLDBPQUEwTztRQUMxTyw0RUFBNEU7UUFDNUUsOExBQThMO1FBQzlMLDREQUE0RDtRQUM1RCxnRUFBZ0U7UUFDaEUsdUNBQXVDO1FBQ3ZDLDJIQUEySDtRQUMzSCx3QkFBd0I7UUFDeEIsMkJBQTJCO1FBQzNCLCtKQUErSjtRQUMvSixxSkFBcUo7UUFDckosbUlBQW1JO1FBQ25JLDRDQUE0QztRQUM1QyxpREFBaUQ7UUFDakQsNkpBQTZKO1FBQzdKLHFEQUFxRDtRQUNyRCxxSUFBcUk7UUFDckksOENBQThDO1FBQzlDLG1EQUFtRDtRQUNuRCw2REFBNkQ7UUFDN0QscUlBQXFJO1FBQ3JJLDhDQUE4QztRQUM5QyxtREFBbUQ7UUFDbkQsd0JBQXdCO1FBQ3hCLGlHQUFpRztRQUNqRyxzREFBc0Q7UUFDdEQsc0JBQXNCO1FBQ3RCLG9CQUFvQjtRQUNwQixtQ0FBbUM7UUFDbkMsZ0NBQWdDO1FBQ2hDLGtCQUFrQjtRQUVsQixnQkFBZ0I7UUFDaEIsc0RBQXNEO1FBQ3RELGlGQUFpRjtRQUNqRiwyREFBMkQ7UUFDM0Qsb0ZBQW9GO1FBQ3BGLDhEQUE4RDtRQUM5RCxrQkFBa0I7UUFDbEIsK0JBQStCO1FBQy9CLHFFQUFxRTtRQUNyRSxtRkFBbUY7UUFDbkYsdUZBQXVGO1FBQ3ZGLDhHQUE4RztRQUM5RyxzSUFBc0k7UUFDdEksb1NBQW9TO1FBRXBTLDRGQUE0RjtRQUM1RixzRkFBc0Y7UUFDdEYscUZBQXFGO1FBQ3JGLG9CQUFvQjtRQUNwQixtQ0FBbUM7UUFDbkMsdUZBQXVGO1FBQ3ZGLHdHQUF3RztRQUN4RyxtRUFBbUU7UUFDbkUsOERBQThEO1FBQzlELGtFQUFrRTtRQUNsRSx5Q0FBeUM7UUFDekMscUhBQXFIO1FBQ3JILDBCQUEwQjtRQUMxQixzQkFBc0I7UUFDdEIsa0NBQWtDO1FBQ2xDLG9CQUFvQjtRQUNwQixrQkFBa0I7UUFDbEIsZ0JBQWdCO1FBRWhCLHNEQUFzRDtRQUN0RCxrR0FBa0c7UUFDbEcsK0ZBQStGO1FBQy9GLDBCQUEwQjtRQUMxQix5REFBeUQ7UUFDekQsb0VBQW9FO1FBQ3BFLDBFQUEwRTtRQUMxRSxvRUFBb0U7UUFDcEUsbUhBQW1IO1FBQ25ILDRIQUE0SDtRQUM1SCx5QkFBeUI7UUFDekIsd0NBQXdDO1FBQ3hDLG1GQUFtRjtRQUNuRixxRUFBcUU7UUFDckUsNENBQTRDO1FBQzVDLHlJQUF5STtRQUN6SSw2QkFBNkI7UUFDN0IseUJBQXlCO1FBQ3pCLHVCQUF1QjtRQUN2Qix1QkFBdUI7UUFDdkIsbUJBQW1CO1FBQ25CLGdCQUFnQjtRQUVoQixnREFBZ0Q7UUFDaEQsa0ZBQWtGO1FBQ2xGLDRFQUE0RTtRQUM1RSw4SEFBOEg7UUFDOUgseUZBQXlGO1FBQ3pGLG1FQUFtRTtRQUNuRSxzQkFBc0I7UUFDdEIsb0NBQW9DO1FBQ3BDLDBFQUEwRTtRQUMxRSx3RkFBd0Y7UUFDeEYsNEZBQTRGO1FBQzVGLG9IQUFvSDtRQUNwSCwySUFBMkk7UUFDM0ksdVNBQXVTO1FBRXZTLGlHQUFpRztRQUNqRywyRkFBMkY7UUFDM0YsMEZBQTBGO1FBQzFGLHlCQUF5QjtRQUN6Qix3Q0FBd0M7UUFDeEMsb0ZBQW9GO1FBQ3BGLG1HQUFtRztRQUNuRyxzRUFBc0U7UUFDdEUsaUVBQWlFO1FBQ2pFLHFFQUFxRTtRQUNyRSw0Q0FBNEM7UUFDNUMsd0hBQXdIO1FBQ3hILDZCQUE2QjtRQUM3Qix5QkFBeUI7UUFDekIscUNBQXFDO1FBQ3JDLDBCQUEwQjtRQUMxQix1QkFBdUI7UUFDdkIsbUJBQW1CO1FBQ25CLG1CQUFtQjtRQUNuQixpQkFBaUI7UUFFakIsWUFBWTtRQUNaLFlBQVk7UUFDWixRQUFRO1FBQ1IsUUFBUTtRQUNSLElBQUk7UUFFSix5RUFBeUU7UUFDekUsaUJBQWlCO1FBQ2pCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixvQ0FBb0M7WUFDcEMseUJBQXlCO1lBQ3pCLElBQUksVUFBVSxHQUFRLEVBQUUsQ0FBQztZQUN6QixJQUFJLHlCQUF5QixHQUFRLEVBQUUsQ0FBQztZQUN4QyxJQUFJLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztZQUMvQixJQUFJLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWtCLEVBQUUsRUFBRTtnQkFDL0Msb0VBQW9FO2dCQUNwRSxvRUFBb0U7Z0JBQ3BFLE9BQU87Z0JBQ1AsK0RBQStEO2dCQUMvRCx5RUFBeUU7Z0JBQ3pFLHdCQUF3QjtnQkFDeEIsMEVBQTBFO2dCQUMxRSx5QkFBeUI7Z0JBQ3pCLE1BQU07Z0JBQ0osOEJBQThCO2dCQUM5QixJQUFJLHFCQUFxQixHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQzNELENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsS0FBSyxLQUFLLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDakksQ0FBQztnQkFDRixJQUFJLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQ3ZELENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsS0FBSyxNQUFNLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDbEksQ0FBQztnQkFDRixJQUFJLGVBQWUsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUNyRCxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssTUFBTSxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLDBCQUEwQixDQUFDLENBQy9ILENBQUM7Z0JBQ0YsSUFDRSxJQUFJLENBQUMsZUFBZSxDQUFDLDRCQUE0QixDQUFDLEtBQUssSUFBSTtvQkFDM0QsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUM7b0JBQ2hELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDO29CQUNoRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRCxFQUNELENBQUM7b0JBQ0Qsd0JBQXdCO29CQUN4QixJQUFJLG1CQUFtQixHQUFRLHlCQUF5QixDQUFDLFNBQVMsQ0FDaEUsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNYLEdBQUcsQ0FBQyxVQUFVLEtBQUsscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO3dCQUN6RCxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUNwRCxDQUFDO29CQUNGLElBQUksbUJBQW1CLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDL0IseUJBQXlCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxRQUFRLENBQUM7NEJBQ3RELFFBQVEsQ0FDTixJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQ3BELENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2pCLENBQUM7eUJBQU0sQ0FBQzt3QkFDTix5QkFBeUIsQ0FBQyxJQUFJLENBQUM7NEJBQzdCLFVBQVUsRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDOzRCQUN2QyxVQUFVLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDOzRCQUNsRCxNQUFNLEVBQUUsUUFBUSxDQUNkLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDcEQsQ0FBQyxRQUFRLEVBQUU7NEJBQ1osZ0JBQWdCLEVBQUUsQ0FBQzs0QkFDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDOzRCQUMxQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO3lCQUNqRCxDQUFDLENBQUM7b0JBQ0wsQ0FBQztvQkFFRCxtQkFBbUI7b0JBQ25CLElBQUksY0FBYyxHQUFRLENBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsR0FBRyxRQUFRLENBQy9ELENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNiLElBQUksWUFBWSxHQUNkLFVBQVUsQ0FBQyxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFO3dCQUM3RCxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzt3QkFDbEMsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdkMsSUFBSSx1QkFBdUIsR0FDekIseUJBQXlCLENBQUMsU0FBUyxDQUNqQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQ1gsR0FBRyxDQUFDLFVBQVUsS0FBSyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7d0JBQ3JELEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQ3BELENBQUM7b0JBQ0osSUFBSSx1QkFBdUIsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNuQyx5QkFBeUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQzs0QkFDMUQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUN4QyxDQUFDO3lCQUFNLENBQUM7d0JBQ04seUJBQXlCLENBQUMsSUFBSSxDQUFDOzRCQUM3QixVQUFVLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQzs0QkFDdkMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQzs0QkFDOUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUU7NEJBQzNDLGdCQUFnQixFQUFFLENBQUM7NEJBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQzs0QkFDMUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQzt5QkFDN0MsQ0FBQyxDQUFDO29CQUNMLENBQUM7b0JBQ0QsaUJBQWlCO29CQUVqQixJQUFJLHFCQUFxQixHQUN2Qix5QkFBeUIsQ0FBQyxTQUFTLENBQ2pDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDWCxHQUFHLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7d0JBQ25ELEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQ3BELENBQUM7b0JBQ0osSUFBSSxxQkFBcUIsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNqQyx5QkFBeUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQzs0QkFDeEQsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUN4QyxDQUFDO3lCQUFNLENBQUM7d0JBQ04seUJBQXlCLENBQUMsSUFBSSxDQUFDOzRCQUM3QixVQUFVLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQzs0QkFDdkMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7NEJBQzVDLE1BQU0sRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxFQUFFOzRCQUMzQyxnQkFBZ0IsRUFBRSxDQUFDOzRCQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7NEJBQzFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO3lCQUMzQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLElBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLE1BQU07b0JBQzdELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLDBCQUEwQixDQUFDLENBQ2pEO29CQUNELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQ3BELEVBQ0QsQ0FBQztvQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7d0JBQy9DLElBQUksY0FBYyxHQUNoQixVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDOzRCQUMxRCxFQUFFOzRCQUNKLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQzt3QkFDbEUsSUFBSSxVQUFVLEdBQVEsQ0FDcEIsVUFBVSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFFBQVEsQ0FDdEMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2IsSUFBSSxxQkFBcUIsR0FDdkIseUJBQXlCLENBQUMsU0FBUyxDQUNqQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQ1gsR0FBRyxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDOzRCQUNuRCxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUNwRCxDQUFDO3dCQUNKLElBQUkscUJBQXFCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDakMseUJBQXlCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0NBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxRQUFRLEVBQUU7b0NBQzNELEdBQUc7b0NBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRCxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNqQixDQUFDOzZCQUFNLENBQUM7NEJBQ04seUJBQXlCLENBQUMsSUFBSSxDQUFDO2dDQUM3QixVQUFVLEVBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQztnQ0FDdkMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7Z0NBQzVDLE1BQU0sRUFDSixJQUFJLENBQUMsZUFBZSxDQUFDLDBCQUEwQixDQUFDLENBQUMsUUFBUSxFQUFFO29DQUMzRCxHQUFHO29DQUNILElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0NBQ2hFLGdCQUFnQixFQUFFLENBQUM7Z0NBQ25CLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztnQ0FDMUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7NkJBQzNDLENBQUMsQ0FBQzt3QkFDTCxDQUFDO3dCQUNELElBQUksdUJBQXVCLEdBQ3pCLHlCQUF5QixDQUFDLFNBQVMsQ0FDakMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNYLEdBQUcsQ0FBQyxVQUFVLEtBQUssaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDOzRCQUNyRCxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUNwRCxDQUFDO3dCQUNKLElBQUksdUJBQXVCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDbkMseUJBQXlCLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0NBQzFELFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDeEMsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLHlCQUF5QixDQUFDLElBQUksQ0FBQztnQ0FDN0IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUM7Z0NBQ3ZDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7Z0NBQzlDLE1BQU0sRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFO2dDQUMzQyxnQkFBZ0IsRUFBRSxDQUFDO2dDQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7Z0NBQzFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7NkJBQzdDLENBQUMsQ0FBQzt3QkFDTCxDQUFDO3dCQUNELElBQUksbUJBQW1CLEdBQ3JCLHlCQUF5QixDQUFDLFNBQVMsQ0FDakMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNYLEdBQUcsQ0FBQyxVQUFVLEtBQUsscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDOzRCQUN6RCxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUNwRCxDQUFDO3dCQUNKLElBQUksbUJBQW1CLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDL0IseUJBQXlCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0NBQ3RELFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDcEMsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLHlCQUF5QixDQUFDLElBQUksQ0FBQztnQ0FDN0IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUM7Z0NBQ3ZDLFVBQVUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7Z0NBQ2xELE1BQU0sRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFO2dDQUN2QyxnQkFBZ0IsRUFBRSxDQUFDO2dDQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7Z0NBQzFDLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7NkJBQ2pELENBQUMsQ0FBQzt3QkFDTCxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDO29CQUNoRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUNqRSxDQUFDO29CQUNELElBQUksc0JBQXNCLEdBQVEseUJBQXlCLENBQUMsTUFBTSxDQUNoRSxDQUFDLGNBQW1CLEVBQUUsRUFBRSxDQUN0QixjQUFjLENBQUMsWUFBWSxDQUFDO3dCQUM1QixxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FDekMsQ0FBQztvQkFDRixJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixDQUFDO3dCQUNqRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUM5RCxDQUFDO3dCQUNELElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7NEJBQzFELHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN4QyxDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDNUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsRUFDN0QsQ0FBQztvQkFDRCxJQUFJLDBCQUEwQixHQUM1Qix5QkFBeUIsQ0FBQyxNQUFNLENBQzlCLENBQUMsY0FBbUIsRUFBRSxFQUFFLENBQ3RCLGNBQWMsQ0FBQyxZQUFZLENBQUM7d0JBQzVCLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUNyQyxDQUFDO29CQUNKLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsMEJBQTBCLENBQUM7d0JBQ3JELENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ2xFLENBQUM7d0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQzs0QkFDdEQsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzVDLENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQztvQkFDMUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQzNELENBQUM7b0JBQ0QsSUFBSSx3QkFBd0IsR0FDMUIseUJBQXlCLENBQUMsTUFBTSxDQUM5QixDQUFDLGNBQW1CLEVBQUUsRUFBRSxDQUN0QixjQUFjLENBQUMsWUFBWSxDQUFDO3dCQUM1QixlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQ25DLENBQUM7b0JBQ0osSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQzt3QkFDbkQsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDaEUsQ0FBQzt3QkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQzs0QkFDcEQsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzFDLENBQUM7Z0JBQ0gsQ0FBQztnQkFDSCxJQUFJO2dCQUNKLElBQUksNEJBQTRCLEdBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQy9ELGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FDM0I7b0JBQ0MsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQy9CLENBQUMsVUFBZSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEtBQUssV0FBVyxDQUNoRTtvQkFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNQLElBQ0UsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO29CQUMzQiw0QkFBNEIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO29CQUMxQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsRUFDckQsQ0FBQztvQkFDRCxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBbUIsRUFBRSxFQUFFO3dCQUN6RCxJQUFJLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLGNBQWMsRUFBRSxDQUFDOzRCQUM5RCxJQUFJLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7Z0NBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDOzRCQUNqRSxDQUFDO2lDQUFNLENBQUM7Z0NBQ04sT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDOzRCQUM1RCxDQUFDO3dCQUNILENBQUM7d0JBQ0QsSUFBSSxpQkFBaUIsR0FBUSxFQUFFLENBQUM7d0JBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDOUQsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FDcEMsQ0FBQyxpQkFBc0IsRUFBRSxFQUFFO2dDQUN6QixJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUNsQixpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUN6QyxDQUNGO29DQUNELElBQUksQ0FBQyxlQUFlLENBQ2xCLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQ3pDLEVBQ0QsQ0FBQztvQ0FDRCxpQkFBaUIsQ0FBQyxJQUFJLENBQ3BCLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLENBQ3pDLENBQUM7Z0NBQ0osQ0FBQzs0QkFDSCxDQUFDLENBQ0YsQ0FBQzt3QkFDSixDQUFDO3dCQUNELElBQ0UsY0FBYyxDQUFDLG9CQUFvQixDQUFDOzRCQUNwQyxjQUFjLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTs0QkFDN0MsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsRUFDNUMsQ0FBQzs0QkFDRCx3QkFBd0I7NEJBRXhCLElBQUksMEJBQTBCLEdBQzVCLHlCQUF5QixDQUFDLFNBQVMsQ0FDakMsQ0FBQyxlQUFvQixFQUFFLEVBQUUsQ0FDdkIsZUFBZSxDQUFDLFlBQVksQ0FBQztnQ0FDM0IsY0FBYyxDQUFDLFlBQVksQ0FBQztnQ0FDOUIsZUFBZSxDQUFDLFlBQVksQ0FBQztvQ0FDM0IsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUNoQyxDQUFDOzRCQUNKLElBQUksMEJBQTBCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQ0FDdEMsSUFBSSxHQUFHLEdBQVE7b0NBQ2IsVUFBVSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUM7b0NBQ3ZDLFVBQVUsRUFBRSxjQUFjLENBQUMsWUFBWSxDQUFDO29DQUN4QyxNQUFNLEVBQUUsRUFBRTtvQ0FDVixnQkFBZ0IsRUFBRSxDQUFDO29DQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0NBQzFDLFNBQVMsRUFBRSxjQUFjLENBQUMsV0FBVyxDQUFDO2lDQUN2QyxDQUFDO2dDQUNGLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQ0FDN0MseUJBQXlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUN0QyxDQUFDO2lDQUFNLENBQUM7Z0NBQ04seUJBQXlCLENBQUMsMEJBQTBCLENBQUMsQ0FDbkQsUUFBUSxDQUNULEdBQUcsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7NEJBQ25DLENBQUM7d0JBQ0gsQ0FBQzs2QkFBTSxJQUNMLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQzs0QkFDcEMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7NEJBQzdDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUNuRCxFQUNELENBQUM7NEJBQ0Qsd0JBQXdCOzRCQUN4QixJQUFJLDBCQUEwQixHQUM1Qix5QkFBeUIsQ0FBQyxTQUFTLENBQ2pDLENBQUMsZUFBb0IsRUFBRSxFQUFFLENBQ3ZCLGVBQWUsQ0FBQyxZQUFZLENBQUM7Z0NBQzNCLGNBQWMsQ0FBQyxZQUFZLENBQUM7Z0NBQzlCLGVBQWUsQ0FBQyxZQUFZLENBQUM7b0NBQzNCLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FDaEMsQ0FBQzs0QkFDSixJQUFJLDBCQUEwQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0NBQ3RDLElBQUksR0FBRyxHQUFRO29DQUNiLFVBQVUsRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDO29DQUN2QyxVQUFVLEVBQUUsY0FBYyxDQUFDLFlBQVksQ0FBQztvQ0FDeEMsTUFBTSxFQUNKLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVO3dDQUMzQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDbkQ7d0NBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO29DQUN4RCxnQkFBZ0IsRUFBRSxDQUFDO29DQUNuQixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0NBQzFDLFNBQVMsRUFBRSxjQUFjLENBQUMsV0FBVyxDQUFDO2lDQUN2QyxDQUFDO2dDQUNGLHlCQUF5QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDdEMsQ0FBQztpQ0FBTSxDQUFDO2dDQUNOLHlCQUF5QixDQUFDLDBCQUEwQixDQUFDLENBQ25ELFFBQVEsQ0FDVDtvQ0FDQyxjQUFjLENBQUMsY0FBYyxDQUFDLEtBQUssVUFBVTt3Q0FDM0MsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQ25EO3dDQUNILENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDOzRCQUMzRCxDQUFDO3dCQUNILENBQUM7d0JBQ0QsOEhBQThIO3dCQUM5SCw4T0FBOE87d0JBQzlPLDRDQUE0Qzt3QkFDNUMsdUJBQXVCO3dCQUN2QixpREFBaUQ7d0JBQ2pELGtEQUFrRDt3QkFDbEQsME5BQTBOO3dCQUMxTiw2QkFBNkI7d0JBQzdCLG9EQUFvRDt3QkFDcEQsZ0RBQWdEO3dCQUNoRCxTQUFTO3dCQUNULDJDQUEyQzt3QkFDM0MsMERBQTBEO3dCQUMxRCwwQ0FBMEM7d0JBQzFDLHdFQUF3RTt3QkFDeEUsZ0ZBQWdGO3dCQUNoRiw4S0FBOEs7d0JBQzlLLGdGQUFnRjt3QkFDaEYsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLFVBQVU7d0JBQ1Ysc0RBQXNEO3dCQUN0RCxRQUFRO3dCQUNSLGFBQWE7d0JBQ2IsMERBQTBEO3dCQUMxRCwwREFBMEQ7d0JBQzFELDBDQUEwQzt3QkFDMUMsd0VBQXdFO3dCQUN4RSxnRkFBZ0Y7d0JBQ2hGLDhLQUE4Szt3QkFDOUssZ0ZBQWdGO3dCQUNoRixjQUFjO3dCQUNkLGNBQWM7d0JBQ2QsVUFBVTt3QkFDVix3R0FBd0c7d0JBQ3hHLGVBQWU7d0JBQ2YscVJBQXFSO3dCQUNyUixRQUFRO3dCQUVSLE1BQU07d0JBRU4sSUFBSTt3QkFFSixxRUFBcUU7d0JBQ3JFLGdQQUFnUDt3QkFDaFAscUJBQXFCO3dCQUNyQiwrQ0FBK0M7d0JBQy9DLGdEQUFnRDt3QkFDaEQsdURBQXVEO3dCQUN2RCwyQkFBMkI7d0JBQzNCLGtEQUFrRDt3QkFDbEQsOENBQThDO3dCQUM5QyxPQUFPO3dCQUNQLGtEQUFrRDt3QkFDbEQsMkNBQTJDO3dCQUMzQyxhQUFhO3dCQUNiLHNIQUFzSDt3QkFDdEgsTUFBTTt3QkFDTixJQUFJO29CQUNOLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsTUFBTTtnQkFDTixJQUFJO1lBQ04sQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLDJCQUEyQixHQUFRO2dCQUNyQyxHQUFHLElBQUksR0FBRyxDQUNSLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQzFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQzNCLENBQ0Y7YUFDRixDQUFDO1lBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUM7Z0JBQzNELGdCQUFnQixHQUFHLHlCQUF5QixDQUFDLE1BQU0sQ0FDakQsQ0FBQyxZQUFpQixFQUFFLEVBQUUsQ0FDcEIsWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUNoRSxDQUFDO2dCQUNGLElBQUksMkJBQTJCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUM3QyxnQkFBZ0IsR0FBRyx5QkFBeUIsQ0FBQyxNQUFNLENBQ2pELENBQUMsWUFBaUIsRUFBRSxFQUFFLENBQ3BCLFlBQVksQ0FBQyxZQUFZLENBQUMsS0FBSywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FDaEUsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksaUJBQWlCLEdBQVEsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQzlDLGNBQWMsQ0FBQyxPQUFPLENBQ3BCLHVCQUF1QixFQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQ2pDLENBQUM7Z0JBQ0YscUdBQXFHO2dCQUNyRyw4WkFBOFo7WUFDaGEsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQzlDLGNBQWMsQ0FBQyxPQUFPLENBQ3BCLHVCQUF1QixFQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQ2pDLENBQUM7Z0JBQ0Ysc0dBQXNHO2dCQUN0Ryw4WkFBOFo7WUFDaGEsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVk7UUFDekIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNwQixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDakIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDOUQsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3RDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7WUFDRCxJQUNFLElBQUksS0FBSyxNQUFNO2dCQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLFNBQVMsRUFDckMsQ0FBQztnQkFDRCxVQUFVLEdBQUcsVUFBVSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsSUFBSSxPQUFPLEdBQVEsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBa0IsRUFBRSxFQUFFO1lBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ3JFLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUN2RCxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQzt3QkFDOUQsY0FBYzt3QkFDZCxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7NEJBQzdELGVBQWUsQ0FBQztvQkFDcEIsT0FBTyxFQUNQLENBQUM7b0JBQ0Qsd0NBQXdDO29CQUN4QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsNEJBQTRCLENBQUMsS0FBSyxNQUFNLEVBQUUsQ0FBQzt3QkFDbEUsSUFBSSxpQkFBaUIsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUN2RCxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssTUFBTSxDQUNyRCxDQUFDO3dCQUNGLElBQUksZUFBZSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQ3JELENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsS0FBSyxNQUFNLENBQ3JELENBQUM7d0JBQ0YsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQzs0QkFDNUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDOzRCQUMxQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUNqRDtnQ0FDQyxJQUFJLENBQUMsbUJBQW1CLENBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsNkJBQTZCLENBQUMsQ0FDcEQsQ0FBQyxFQUNKLENBQUM7NEJBQ0QsT0FBTyxHQUFHLEtBQUssQ0FBQzs0QkFDaEIsdUVBQXVFOzRCQUN2RSw0RUFBNEU7NEJBQzVFLHNFQUFzRTs0QkFDdEUscUVBQXFFOzRCQUNyRSxrREFBa0Q7NEJBQ2xELElBQUk7NEJBQ0osMEZBQTBGOzRCQUMxRixpREFBaUQ7NEJBQ2pELDRDQUE0Qzs0QkFDNUMsZ0RBQWdEOzRCQUNoRCx1QkFBdUI7NEJBQ3ZCLG9FQUFvRTs0QkFDcEUsUUFBUTs0QkFDUixXQUFXOzRCQUNYLHNHQUFzRzs0QkFFdEcsSUFBSTs0QkFFSixnQkFBZ0I7NEJBQ2hCLElBQUk7d0JBQ04sQ0FBQztvQkFDSCxDQUFDO29CQUNELDhCQUE4QjtvQkFDOUIsSUFBSSxxQkFBcUIsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUMzRCxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssS0FBSyxDQUNwRCxDQUFDO29CQUNGLElBQ0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLElBQUk7d0JBQzNELElBQUksQ0FBQyxtQkFBbUIsQ0FDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUNwRDt3QkFDRCxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQzt3QkFDaEQsT0FBTyxFQUNQLENBQUM7d0JBQ0QsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDbEIsQ0FBQztnQkFDSCxDQUFDO2dCQUVELGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBc0IsRUFBRSxFQUFFO29CQUM1RCxpQ0FBaUM7b0JBQ2pDLElBQ0UsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUM7d0JBQzVDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLENBQUM7d0JBQ2hFLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDO3dCQUN2QyxPQUFPO3dCQUNQLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxLQUFLLFlBQVk7d0JBQ2xELGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLEtBQUssS0FBSzt3QkFDbkQsaUJBQWlCLENBQUMsY0FBYyxDQUFDLEtBQUssYUFBYTt3QkFDbkQsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxjQUFjO3dCQUM1RCxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsS0FBSyxpQkFBaUI7d0JBQ3ZELGlCQUFpQixDQUFDLHNCQUFzQixDQUFDLEtBQUssTUFBTTt3QkFDcEQsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxNQUFNO3dCQUNwRCxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLEdBQUc7d0JBQ3hELElBQUksQ0FBQyxtQkFBbUIsQ0FDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUN0RDt3QkFDRCx3REFBd0Q7d0JBQ3hELGlIQUFpSDt3QkFDakgsbUlBQW1JO3dCQUNuSSxPQUFPLEVBQ1AsQ0FBQzt3QkFDRCxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNsQixDQUFDO29CQUVELE9BQU87b0JBQ1AsK0RBQStEO29CQUMvRCxxREFBcUQ7b0JBQ3JELCtDQUErQztvQkFDL0MsTUFBTTtvQkFDTiw4TkFBOE47b0JBQzlOLGdFQUFnRTtvQkFDaEUsa0xBQWtMO29CQUNsTCxnREFBZ0Q7b0JBQ2hELG9EQUFvRDtvQkFDcEQsMkJBQTJCO29CQUMzQiwrR0FBK0c7b0JBQy9HLFlBQVk7b0JBQ1osZUFBZTtvQkFDZixtSkFBbUo7b0JBQ25KLHlJQUF5STtvQkFDekksdUhBQXVIO29CQUN2SCxnQ0FBZ0M7b0JBQ2hDLHFDQUFxQztvQkFDckMsaUpBQWlKO29CQUNqSix5Q0FBeUM7b0JBQ3pDLHlIQUF5SDtvQkFDekgsa0NBQWtDO29CQUNsQyx1Q0FBdUM7b0JBQ3ZDLGlEQUFpRDtvQkFDakQseUhBQXlIO29CQUN6SCxrQ0FBa0M7b0JBQ2xDLHVDQUF1QztvQkFDdkMsWUFBWTtvQkFDWixxRkFBcUY7b0JBQ3JGLDBDQUEwQztvQkFDMUMsVUFBVTtvQkFDVixRQUFRO29CQUNSLHVCQUF1QjtvQkFDdkIsb0JBQW9CO29CQUNwQixNQUFNO29CQUVOLElBQUk7b0JBQ0osdUNBQXVDO29CQUN2QyxJQUNFLE9BQU87d0JBQ1AsaUJBQWlCLENBQUMsWUFBWSxLQUFLLGFBQWE7d0JBQ2hELGlCQUFpQixDQUFDLG9CQUFvQixDQUFDO3dCQUN2QyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3dCQUNoRSxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsRUFDN0MsQ0FBQzt3QkFDRCxJQUNFLENBQUMsT0FBTzs0QkFDTiw4RUFBOEU7NEJBQzlFLG1FQUFtRTs0QkFDbkUsdUVBQXVFOzRCQUN2RSw4RkFBOEY7NEJBQzlGLCtJQUErSTs0QkFDL0ksSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQ0FDbkQsR0FBRyxDQUFDOzRCQUNSLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQzs0QkFDdEQsSUFBSSxDQUFDLG1CQUFtQixDQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQ3REO3dCQUNELElBQUk7d0JBQ0osaUVBQWlFOzBCQUNqRSxDQUFDOzRCQUNELE9BQU8sR0FBRyxLQUFLLENBQUM7d0JBQ2xCLENBQUM7b0JBQ0gsQ0FBQztvQkFFRCx1Q0FBdUM7b0JBQ3ZDLG1GQUFtRjtvQkFDbkYsZ0ZBQWdGO29CQUNoRixXQUFXO29CQUNYLDBDQUEwQztvQkFDMUMscURBQXFEO29CQUNyRCwyREFBMkQ7b0JBQzNELHFEQUFxRDtvQkFDckQsb0dBQW9HO29CQUNwRyw2R0FBNkc7b0JBQzdHLFVBQVU7b0JBQ1YseUJBQXlCO29CQUN6QixvRUFBb0U7b0JBQ3BFLHNEQUFzRDtvQkFDdEQsNkJBQTZCO29CQUM3QiwwSEFBMEg7b0JBQzFILGNBQWM7b0JBQ2QsVUFBVTtvQkFDVixRQUFRO29CQUNSLFFBQVE7b0JBQ1IsSUFBSTtnQkFDTixDQUFDLENBQUMsQ0FBQztnQkFFSCxtQ0FBbUM7Z0JBQ25DLHFFQUFxRTtnQkFDckUsK0RBQStEO2dCQUMvRCxpSEFBaUg7Z0JBQ2pILDRFQUE0RTtnQkFDNUUsc0RBQXNEO2dCQUN0RCxTQUFTO2dCQUNULHVCQUF1QjtnQkFDdkIsc0ZBQXNGO2dCQUN0RiwyRUFBMkU7Z0JBQzNFLCtFQUErRTtnQkFDL0UsdUdBQXVHO2dCQUN2Ryx1SkFBdUo7Z0JBQ3ZKLDRVQUE0VTtnQkFFNVUsb0ZBQW9GO2dCQUNwRiw4RUFBOEU7Z0JBQzlFLDZFQUE2RTtnQkFDN0UsWUFBWTtnQkFDWiwyQkFBMkI7Z0JBQzNCLHVFQUF1RTtnQkFDdkUsc0ZBQXNGO2dCQUN0Rix5REFBeUQ7Z0JBQ3pELG9EQUFvRDtnQkFDcEQsd0RBQXdEO2dCQUN4RCwrQkFBK0I7Z0JBQy9CLDJHQUEyRztnQkFDM0csZ0JBQWdCO2dCQUNoQixZQUFZO2dCQUNaLHdCQUF3QjtnQkFDeEIsYUFBYTtnQkFDYixVQUFVO2dCQUNWLE1BQU07Z0JBQ04sTUFBTTtnQkFDTixJQUFJO1lBQ04sQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsY0FBYyxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQseUJBQXlCLENBQUMsUUFBYztRQUN0QyxJQUFJLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLGVBQWUsSUFBSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsS0FBSyxXQUFXLEVBQUcsQ0FBQztZQUM5RyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7WUFFdkQsbURBQW1EO1lBQ25ELElBQUksY0FBYyxHQUFTLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBYyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssYUFBYSxDQUFDLENBQUM7WUFFNUksSUFDRSxjQUFjLEtBQU0sQ0FBQyxDQUFDLEVBQ3RCLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBZSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssYUFBYSxDQUFDLENBQUE7WUFDOU0sQ0FBQztZQUNELElBQUksQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUM7WUFDdEMsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBSSxDQUFDLFlBQVksQ0FDbEIsRUFBRSxDQUFDO2dCQUNKLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBQztZQUM3UCxDQUFDO1lBQ0Qsd0dBQXdHO1lBQ3hHLDhCQUE4QjtZQUM5QixrQ0FBa0M7WUFDbEMsc0VBQXNFO1lBQ3RFLEtBQUs7WUFDTCw0REFBNEQ7WUFDNUQsT0FBTztZQUNQLGdFQUFnRTtZQUNoRSxxQ0FBcUM7WUFDckMsbUVBQW1FO1lBQ25FLDRCQUE0QjtZQUM1QixRQUFRO1lBQ1IsU0FBUztZQUNULHFDQUFxQztZQUNyQyxtRUFBbUU7WUFDbkUsNEJBQTRCO1lBQzVCLHdCQUF3QjtZQUN4QixNQUFNO1lBQ04sTUFBTTtZQUNKLCtEQUErRDtZQUMvRCx3QkFBd0I7WUFDeEIsOERBQThEO1lBQzlELHdCQUF3QjtZQUN4QixpREFBaUQ7WUFDakQsNkJBQTZCO1lBQzdCLHNDQUFzQztZQUN0QywrQ0FBK0M7WUFDL0MsV0FBVztZQUNYLHdDQUF3QztZQUN4QywrQ0FBK0M7WUFDL0MsV0FBVztZQUNYLGlEQUFpRDtZQUNqRCxLQUFLO1lBQ1AsSUFBSTtZQUNKLGtFQUFrRTtZQUNsRSxtQkFBbUI7WUFDbkIsbURBQW1EO1lBQ25ELGtEQUFrRDtZQUNsRCxzRUFBc0U7WUFDdEUsdUJBQXVCO1lBQ3ZCLDBCQUEwQjtZQUMxQixNQUFNO1lBQ04sTUFBTTtZQUVOLHNMQUFzTDtZQUN0TCxtRUFBbUU7WUFDbkUsbURBQW1EO1lBQ25ELCtEQUErRDtZQUMvRCx1QkFBdUI7WUFDdkIsMkJBQTJCO1lBQzNCLE1BQU07WUFDTixNQUFNO1lBQ04sNkJBQTZCO1lBRTdCLElBQUksZ0JBQWdCLEdBQVMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxnQkFBc0IsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoSixpQ0FBaUM7WUFDakMsb0JBQW9CO1lBQ3BCLGtDQUFrQztZQUNsQyx3RUFBd0U7WUFDeEUsbUJBQW1CO1lBQ25CLE1BQU07WUFDTixLQUFLO1lBQ0wsSUFBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xjLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUM5RyxDQUFDLElBQVMsRUFBRSxFQUFFO29CQUNaLDhCQUE4QjtvQkFDOUIsSUFBSSxhQUFhLEdBQVEsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFnQixFQUFFLEVBQUU7NEJBQ2hDLFdBQVcsQ0FDVCxjQUFjLENBQ2YsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FDL0MsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUMxQixDQUFDOzRCQUNGLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEtBQUssQ0FBQzs0QkFDMUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsSUFBSSxDQUFDOzRCQUMzQyxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FDaEM7Z0NBQ0QsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQy9DLENBQUM7Z0NBQ0QsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEdBQUc7b0NBQ2hDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQztpQ0FDaEMsQ0FBQzs0QkFDSixDQUFDOzRCQUNELElBQ0UsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVU7Z0NBQzFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FDaEMsRUFDRCxDQUFDO2dDQUNELFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FDckMsQ0FBQyx5QkFBOEIsRUFBRSxFQUFFO29DQUNqQyxJQUFJLGtCQUFrQixHQUFRLElBQUksQ0FBQyxNQUFNLENBQ3ZDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FDZCxNQUFNLENBQUMsWUFBWSxDQUFDO3dDQUNwQix5QkFBeUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUM5QyxDQUFDO29DQUNGLElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO3dDQUNsQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7NENBQ3BDLHlCQUF5QixDQUFDLHFCQUFxQixDQUFDLENBQUM7b0NBQ3JELENBQUM7Z0NBQ0gsQ0FBQyxDQUNGLENBQUM7NEJBQ0osQ0FBQzs0QkFDRCxPQUFPOzRCQUNQLCtCQUErQjs0QkFDL0Isa0NBQWtDOzRCQUNsQyxNQUFNOzRCQUNOLE1BQU07NEJBQ04sOERBQThEOzRCQUM5RCwyRUFBMkU7NEJBQzNFLHlDQUF5Qzs0QkFDekMsU0FBUzs0QkFDVCxRQUFROzRCQUNSLElBQUk7NEJBQ0osSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQ0FDdEQsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzs0QkFDL0MsQ0FBQzs0QkFDRCxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDcEQsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsSUFBSSxDQUFDLElBQUksQ0FDUCxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRSxDQUNqQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQ2pFLENBQUM7d0JBQ0YsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxHQUFRLEVBQUUsRUFBRTs0QkFDN0MsSUFBSSxXQUFXLEdBQVEsSUFBSSxDQUFDLE1BQU0sQ0FDaEMsQ0FBQyxjQUFtQixFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEtBQUssS0FBSyxDQUMvRCxDQUFDOzRCQUNGLElBQUksR0FBRyxHQUFRO2dDQUNiLElBQUksRUFBRSxJQUFJLEdBQUcsR0FBRztnQ0FDaEIsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztvQ0FDL0MsQ0FBQyxDQUFDLFdBQVc7b0NBQ2IsQ0FBQyxDQUFDLEVBQUU7Z0NBQ04sV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUNwQyxXQUFXLENBQ1o7b0NBQ0MsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7b0NBQ3pCLENBQUMsQ0FBQyxFQUFFO2dDQUNOLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtnQ0FDM0Isb0JBQW9CLEVBQUUsSUFBSTtnQ0FDMUIsV0FBVyxFQUFFLElBQUk7NkJBQ2xCLENBQUM7NEJBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzlCLENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUM7d0JBQ3hDLG1IQUFtSDt3QkFDbkgsa0NBQWtDO3dCQUNsQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztvQkFDckksQ0FBQztvQkFDRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDakMsQ0FBQyxFQUNELENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ1gsOEJBQThCO2dCQUNoQyxDQUFDLENBQ0YsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUE7SUFDaEMsQ0FBQztJQUNELHFCQUFxQixDQUFDLEtBQW9DO1FBQ3hELE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFRCx3QkFBd0I7UUFDcEIsSUFDRSxJQUFJLENBQUMsZUFBZSxDQUNsQiw0QkFBNEIsQ0FDN0IsS0FBSyxNQUFNO1lBQ1osQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQ2xCLDZCQUE2QixDQUM5QixDQUNGLEVBQ0QsQ0FBQztZQUNELElBQUksY0FBYyxHQUFRLENBQ3hCLFVBQVUsQ0FDUixJQUFJLENBQUMsZUFBZSxDQUNsQiw2QkFBNkIsQ0FDOUIsQ0FDRixHQUFHLFFBQVEsQ0FDYixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNiLElBQUksWUFBWSxHQUNkLFVBQVUsQ0FDUixDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7aUJBQ2xCLFFBQVEsRUFBRTtpQkFDVixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2pCLEdBQUcsRUFBRTtnQkFDSixDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QyxJQUNFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUN2QixZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN0QyxFQUNELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsMEJBQTBCLENBQzNCLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxDQUFDO1lBQ0QsSUFDRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdkIsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdEMsRUFDRCxDQUFDO2dCQUNELElBQUksQ0FBQyxlQUFlLENBQ2xCLDZCQUE2QixDQUM5QjtvQkFDQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUk7d0JBQzlDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSTt3QkFDOUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJO3dCQUM1QyxDQUFDLENBQUMsWUFBWTs2QkFDVCxRQUFRLEVBQUU7NkJBQ1YsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs2QkFDYixNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNkLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFDTCxJQUFJLENBQUMsZUFBZSxDQUNsQiw0QkFBNEIsQ0FDN0IsS0FBSyxJQUFJO1lBQ1YsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQ2xCLDBCQUEwQixDQUMzQixDQUNGO1lBQ0QsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQ2xCLDZCQUE2QixDQUM5QixDQUNGLEVBQ0QsQ0FBQztZQUNELElBQUksY0FBYyxHQUNoQixVQUFVLENBQ1IsVUFBVSxDQUNSLElBQUksQ0FBQyxlQUFlLENBQ2xCLDBCQUEwQixDQUMzQixDQUNGLENBQUMsUUFBUSxFQUFFO2dCQUNWLEdBQUc7Z0JBQ0gsVUFBVSxDQUNSLElBQUksQ0FBQyxlQUFlLENBQ2xCLDZCQUE2QixDQUM5QixDQUNGLENBQUMsUUFBUSxFQUFFLENBQ2YsR0FBRyxFQUFFLENBQUM7WUFDVCxJQUFJLFVBQVUsR0FBUSxDQUNwQixVQUFVLENBQUMsY0FBYyxDQUFDLEdBQUcsUUFBUSxDQUN0QyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNiLElBQUksQ0FBQyxlQUFlLENBQ2xCLDZCQUE2QixDQUM5QixHQUFHLFVBQVUsQ0FBQztRQUNqQixDQUFDO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQzt3R0FqeEZRLHdCQUF3Qjs0RkFBeEIsd0JBQXdCLHFyQkN0Q3JDLGt6VEFtUUEsaStCRDlPSSxZQUFZLDZWQUNaLFdBQVcsZ3hCQUNYLG1CQUFtQiwrQkFDbkIsZ0JBQWdCLDJIQUNoQixjQUFjLDJIQUNkLGlCQUFpQiw4SEFDakIsZUFBZSxrSkFDZixZQUFZLHFLQUNaLGVBQWUseUxBQ2YsdUJBQXVCLDZJQUN2QixnQkFBZ0IsK2lDQUNoQixlQUFlLDJFQUNmLG9CQUFvQjs7NEZBS1gsd0JBQXdCO2tCQXJCcEMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixlQUFlO3dCQUNmLHVCQUF1Qjt3QkFDdkIsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLG9CQUFvQjtxQkFDckI7dUdBVTBCLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdvb2dsZU1hcHNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9nb29nbGUtbWFwcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBOZ1pvbmUsIEFmdGVyVmlld0luaXQsIGlucHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBxdWVzdGlvbnNSZXNwb25zZSBmcm9tICcuL3F1ZXN0aW9ucy5qc29uJ1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVGV4dGJveENvbXBvbmVudCB9IGZyb20gJy4uL3RleHRib3gvdGV4dGJveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSYWRpb0NvbXBvbmVudCB9IGZyb20gJy4uL3JhZGlvL3JhZGlvLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2VsZWN0L3NlbGVjdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEb2JDb21wb25lbnQgfSBmcm9tICcuLi9kb2IvZG9iLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFVwbG9hZENvbXBvbmVudCB9IGZyb20gJy4uL3VwbG9hZC91cGxvYWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTXVsdGlwbGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9tdWx0aXBsZS1zZWxlY3QvbXVsdGlwbGUtc2VsZWN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEhyTGluZUNvbXBvbmVudCB9IGZyb20gJy4uL2hyLWxpbmUvaHItbGluZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXN0ZXJDb250cm9sU2VydmljZSB9IGZyb20gJy4uL21hc3Rlci1jb250cm9sLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vbWFzdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlUHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4uL2ZpbGUtcHJldmlldy9maWxlLXByZXZpZXcuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLW1lZGlhbC1xdWVzdGlvbnMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgVGV4dGJveENvbXBvbmVudCxcclxuICAgIFJhZGlvQ29tcG9uZW50LFxyXG4gICAgQ2hlY2tib3hDb21wb25lbnQsXHJcbiAgICBTZWxlY3RDb21wb25lbnQsXHJcbiAgICBEb2JDb21wb25lbnQsXHJcbiAgICBVcGxvYWRDb21wb25lbnQsXHJcbiAgICBNdWx0aXBsZVNlbGVjdENvbXBvbmVudCxcclxuICAgIEdvb2dsZU1hcHNNb2R1bGUsXHJcbiAgICBIckxpbmVDb21wb25lbnQsXHJcbiAgICBGaWxlUHJldmlld0NvbXBvbmVudFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21lZGlhbC1xdWVzdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9tZWRpYWwtcXVlc3Rpb25zLmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWVkaWFsUXVlc3Rpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBtZWRpYWxRdWVzdGlvblJlc3BvbnNlID0gaW5wdXQ8YW55PigpO1xyXG4gIHBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UgOiBhbnkgPSBpbnB1dDxhbnk+KCk7XHJcbiAgcGVyc29uVXdJZCA6IGFueSA9IFwiXCI7XHJcbiAgaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlIDogYW55ID0gbnVsbDtcclxuICBtZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgOiBhbnkgPSB7fTtcclxuICBAVmlld0NoaWxkKCdhZGRyZXNzSW5wdXQnKSBhZGRyZXNzSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG4gIHByaXZhdGUgYXV0b2NvbXBsZXRlITogZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZTtcclxuICBzYXZlUXVlc3Rpb25SZXF1ZXN0TGE6IGFueSA9IFtdO1xyXG4gIHNhdmVRdWVzdGlvblJlcXVlc3RQaDogYW55ID0gW107XHJcbiAgZmllbGQ6IGFueSA9IGlucHV0LnJlcXVpcmVkPGFueT4oKTtcclxuICBxdWVzdGlvbkxpc3Q6IGFueSA9IFtdO1xyXG4gIGN1cnJlbnRDb29yZGluYXRlczogYW55ID0ge307XHJcbiAgcGVyc29uVXdSZXNwb25zZU9iajogYW55ID0gW107XHJcbiAgY2VudGVyOiBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsID0geyBsYXQ6IDQwLjczMDYxLCBsbmc6IC03My45MzUyNDIgfTtcclxuICBsYXRpdHVkZTogYW55O1xyXG4gIGxvbmdpdHVkZTogYW55O1xyXG4gIHpvb206IGFueTtcclxuICBtYXJrZXI6IGFueSA9IHt9O1xyXG5cclxuXHJcbiAgcGVyc29uVXdBbnN3ZXJzOiBhbnkgPSB7XHJcbiAgICBtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdDogJ0ZFRVQnLFxyXG4gICAgbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0OiAwLFxyXG4gICAgbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0OiAwLFxyXG4gICAgbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0OiAwLFxyXG4gIH07XHJcbiAgbWVkUXVlc3Rpb25PYmo6IGFueSA9IHt9O1xyXG4gIGxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94OiBhbnkgPSBbXTtcclxuICBtZWRpY2FsUXVlc3Rpb25zRmVldExpc3Q6IGFueSA9IFtdO1xyXG4gIG1lZGljYWxRdWVzdGlvbnNJbmNoZXNMaXN0OiBhbnkgPSBbXTtcclxuICBxdWVzdGlvbkhlYWRlcjogYW55ID0gWydlaWEgZGV0YWlscycsICdhYmhhIGRldGFpbHMnLCAncGVwIGRldGFpbHMnXTtcclxuICBtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdFR5cGVzOiBhbnkgPSBbXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAnQ20nLFxyXG4gICAgICB2YWx1ZTogJ0NNJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAnRmVldCcsXHJcbiAgICAgIHZhbHVlOiAnRkVFVCcsXHJcbiAgICB9LFxyXG4gIF07XHJcbiAgc2hvd0Ryb3Bkb3duID0gZmFsc2U7XHJcbiAgYWRkcmVzc1N1Z2dlc3Rpb25zOiBhbnlbXSA9IFtdO1xyXG4gIGhvdmVyZWRJbmRleCA9IC0xO1xyXG4gIHNlYXJjaFRpbWVvdXQ6IGFueTtcclxuICBob3Jpem9udGFsTGluZU9iaiA6IGFueSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xTdHlsZVwiOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udHJvbFR5cGVcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJib3JkZXJDb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlcldpZHRoXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYm9yZGVyUmFkaXVzXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9udFNpemVcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250V2VpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9udEZhbWlseVwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNhcmV0Q29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJudWRnZURpc3BsYXlJbWFnZVwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uQmdDb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzQm9yZGVyV2lkdGhcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0JvcmRlckNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNCYWNrZ3JvdW5kXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNDb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXNcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJob3ZlckJvcmRlckNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaG92ZXJCb3JkZXJXaWR0aFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhvdmVyQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlQmFja2dyb3VuZFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVycm9yQm9yZGVyQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlcnJvckJvcmRlcldpZHRoXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JDb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNyZWF0ZWREYXRlXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGFkZGluZ1wiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1hcmdpblwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImlzTWFzdGVyQ3NzXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udHJvbE1ldGFJZFwiOiBcIkxJX0NPTV9HRU5fQ1RSTF9ockxpbmVfaHJMaW5lX1YxXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYm9yZGVyU3R5bGVcIjogXCJzb2xpZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhlaWdodFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1pbkhlaWdodFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1heEhlaWdodFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1pbldpZHRoXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4V2lkdGhcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjc3NDbGFzc1wiOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBcImZpZWxkTmFtZVwiOiBcImhyTGluZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogXCJzb2xpZCBsaW5lXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJwbGFjZUhvbGRlclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwibWV0YUlkXCI6IFwiTElfQ09NX0dFTl9DVFJMX2hyTGluZV9ockxpbmVfVjFcIixcclxuICAgICAgICAgICAgICAgICAgICBcImlzVmlzaWJsZVwiOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiaXNEaXNhYmxlXCI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdFZhbHVlXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJ2YWxpZGF0b3JzXCI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJpc1JlcXVpcmVkXCI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJlcXVpcmVkTWVzc2FnZVwiOiBcIlRoaXMgZmllbGQgY2Fubm90IGJlIGVtcHR5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWluTGVuZ3RoXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWluTGVuZ3RoTWVzc2FnZVwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1heExlbmd0aFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1heExlbmd0aE1lc3NhZ2VcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXR0ZXJuXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGF0dGVybk1lc3NhZ2VcIjogXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiY3NzQ2xhc3NcIjogXCJjb2wtMTJcIixcclxuICAgICAgICAgICAgICAgICAgICBcInZhbHVlXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJzdHlsZVwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiaW1hZ2VVcmxcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcImNvbmZpZ0RhdGFcIjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhyVGV4dFwiOiBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBcIm1ldGFEYXRhT2JqXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJpc1Nob3dMYWJlbFwiOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiaXNNYXN0ZXJDb250cm9sXCI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiY29udHJvbFR5cGVcIjogXCJockxpbmVcIlxyXG4gICAgICAgICAgICAgICAgfTtcclxuICBwcmV2aWV3RmlsZTogRmlsZSB8IG51bGwgPSBudWxsO1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuZ1pvbmU6IE5nWm9uZSwgcHVibGljIG1hc3RlclNlcnZpY2UgOiBNYXN0ZXJTZXJ2aWNlKSB7XHJcbiAgICBjb25zb2xlLmxvZygnbWVkaWFsUXVlc3Rpb25SZXNwb25zZWVlZWVlJywgdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKCkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7fVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgICgoY2hhbmdlc1snbWVkaWFsUXVlc3Rpb25SZXNwb25zZSddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGNoYW5nZXNbJ21lZGlhbFF1ZXN0aW9uUmVzcG9uc2UnXS5jdXJyZW50VmFsdWUpKSB8fFxyXG4gICAgICAoKGNoYW5nZXNbJ3ByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaiddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGNoYW5nZXNbJ3ByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaiddLmN1cnJlbnRWYWx1ZSkpXHJcbiAgICApIHtcclxuICAgICAgaWYgKCdnZW9sb2NhdGlvbicgaW4gbmF2aWdhdG9yKSB7XHJcbiAgICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigocG9zaXRpb24pID0+IHtcclxuICAgICAgICAgIHRoaXMubGF0aXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGU7XHJcbiAgICAgICAgICB0aGlzLmxvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGU7XHJcbiAgICAgICAgICB0aGlzLnpvb20gPSAxNTtcclxuICAgICAgICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0ge1xyXG4gICAgICAgICAgICBsYXQ6IHRoaXMubGF0aXR1ZGUsXHJcbiAgICAgICAgICAgIGxuZzogdGhpcy5sb25naXR1ZGUsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5jZW50ZXIgPSB7IC4uLnRoaXMuY3VycmVudENvb3JkaW5hdGVzIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wcmVwYXJlUGVyc29uVXdRdWVzdGlvbnNPYmooKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUF1dG9jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNvbHZlSGVpZ2h0UXVlc3Rpb25JZHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10gPSAwO1xyXG4gICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gMDtcclxuICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9IDA7XHJcblxyXG4gICAgdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgIGlmIChzZWN0aW9uLnF1ZXN0aW9ucyAmJiBBcnJheS5pc0FycmF5KHNlY3Rpb24ucXVlc3Rpb25zKSkge1xyXG4gICAgICAgIHNlY3Rpb24ucXVlc3Rpb25zLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgIHN3aXRjaCAocXVlc3Rpb24uY2FtbXVuZGFRdWVzdGlvbkNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnUUhUJzpcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10gPSBxdWVzdGlvbi5xdWVzdGlvbklkO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdRSFRGJzpcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10gPSBxdWVzdGlvbi5xdWVzdGlvbklkO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdRSFRJJzpcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSBxdWVzdGlvbi5xdWVzdGlvbklkO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUF1dG9jb21wbGV0ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXV0b2NvbXBsZXRlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5BdXRvY29tcGxldGUoXHJcbiAgICAgIHRoaXMuYWRkcmVzc0lucHV0Py5uYXRpdmVFbGVtZW50LFxyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZXM6IFsnYWRkcmVzcyddLFxyXG4gICAgICAgIGNvbXBvbmVudFJlc3RyaWN0aW9uczogeyBjb3VudHJ5OiAnSU4nIH0sXHJcbiAgICAgICAgZmllbGRzOiBbJ3BsYWNlX2lkJywgJ2dlb21ldHJ5JywgJ25hbWUnLCAnZm9ybWF0dGVkX2FkZHJlc3MnXSxcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmF1dG9jb21wbGV0ZS5hZGRMaXN0ZW5lcigncGxhY2VfY2hhbmdlZCcsICgpID0+IHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLm9uUGxhY2VTZWxlY3RlZCgpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblBsYWNlU2VsZWN0ZWQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwbGFjZSA9IHRoaXMuYXV0b2NvbXBsZXRlLmdldFBsYWNlKCk7XHJcblxyXG4gICAgaWYgKCFwbGFjZS5nZW9tZXRyeSB8fCAhcGxhY2UuZ2VvbWV0cnkubG9jYXRpb24pIHtcclxuICAgICAgY29uc29sZS5sb2coJ05vIGRldGFpbHMgYXZhaWxhYmxlIGZvciBpbnB1dDogJywgcGxhY2UubmFtZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsb2NhdGlvbiA9IHBsYWNlLmdlb21ldHJ5LmxvY2F0aW9uO1xyXG4gICAgdGhpcy5jZW50ZXIgPSB7XHJcbiAgICAgIGxhdDogbG9jYXRpb24ubGF0KCksXHJcbiAgICAgIGxuZzogbG9jYXRpb24ubG5nKCksXHJcbiAgICB9O1xyXG4gICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmNlbnRlcjtcclxuXHJcbiAgICBpZiAocGxhY2UuZ2VvbWV0cnkudmlld3BvcnQpIHtcclxuICAgICAgdGhpcy56b29tID0gMTU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnpvb20gPSAxMztcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgcGxhY2U6Jywge1xyXG4gICAgICBuYW1lOiBwbGFjZS5uYW1lLFxyXG4gICAgICBhZGRyZXNzOiBwbGFjZS5mb3JtYXR0ZWRfYWRkcmVzcyxcclxuICAgICAgY29vcmRpbmF0ZXM6IHRoaXMuY2VudGVyLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdG9yZVNlbGVjdGVkQWRkcmVzcyhwbGFjZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0b3JlU2VsZWN0ZWRBZGRyZXNzKHBsYWNlOiBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VSZXN1bHQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGFkZHJlc3NEYXRhID0ge1xyXG4gICAgICBwbGFjZUlkOiBwbGFjZS5wbGFjZV9pZCxcclxuICAgICAgbmFtZTogcGxhY2UubmFtZSxcclxuICAgICAgZm9ybWF0dGVkQWRkcmVzczogcGxhY2UuZm9ybWF0dGVkX2FkZHJlc3MsXHJcbiAgICAgIGNvb3JkaW5hdGVzOiB0aGlzLmNlbnRlcixcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzZWFyY2hBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgZ2VvY29kZXIgPSBuZXcgZ29vZ2xlLm1hcHMuR2VvY29kZXIoKTtcclxuXHJcbiAgICBnZW9jb2Rlci5nZW9jb2RlKHsgYWRkcmVzczogYWRkcmVzcyB9LCAocmVzdWx0cywgc3RhdHVzKSA9PiB7XHJcbiAgICAgIGlmIChzdGF0dXMgPT09ICdPSycgJiYgcmVzdWx0cyAmJiByZXN1bHRzWzBdKSB7XHJcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSByZXN1bHRzWzBdLmdlb21ldHJ5LmxvY2F0aW9uO1xyXG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNlbnRlciA9IHtcclxuICAgICAgICAgICAgbGF0OiBsb2NhdGlvbi5sYXQoKSxcclxuICAgICAgICAgICAgbG5nOiBsb2NhdGlvbi5sbmcoKSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHRoaXMuY2VudGVyO1xyXG4gICAgICAgICAgdGhpcy56b29tID0gMTU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAnR2VvY29kZSB3YXMgbm90IHN1Y2Nlc3NmdWwgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uOiAnICsgc3RhdHVzXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkFkZHJlc3NJbnB1dEtleXVwKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IHF1ZXJ5ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG5cclxuICAgIC8vIENsZWFyIHByZXZpb3VzIHRpbWVvdXRcclxuICAgIGlmICh0aGlzLnNlYXJjaFRpbWVvdXQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoVGltZW91dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIGFycm93IGtleSBuYXZpZ2F0aW9uXHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xyXG4gICAgICB0aGlzLmhvdmVyZWRJbmRleCA9IE1hdGgubWluKFxyXG4gICAgICAgIHRoaXMuaG92ZXJlZEluZGV4ICsgMSxcclxuICAgICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucy5sZW5ndGggLSAxXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcclxuICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggPSBNYXRoLm1heCh0aGlzLmhvdmVyZWRJbmRleCAtIDEsIC0xKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID49IDAgJiZcclxuICAgICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9uc1t0aGlzLmhvdmVyZWRJbmRleF1cclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RBZGRyZXNzKHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zW3RoaXMuaG92ZXJlZEluZGV4XSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XHJcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocXVlcnkubGVuZ3RoIDwgMikge1xyXG4gICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucyA9IFtdO1xyXG4gICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWFyY2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VhcmNoQWRkcmVzc2VzKHF1ZXJ5KTtcclxuICAgIH0sIDMwMCk7XHJcbiAgfVxyXG5cclxuICBzZWFyY2hBZGRyZXNzZXMocXVlcnk6IHN0cmluZykge1xyXG4gICAgLy8gUmVwbGFjZSB0aGlzIHdpdGggeW91ciBhY3R1YWwgYWRkcmVzcyBzZWFyY2ggQVBJIGNhbGxcclxuICAgIC8vIEZvciBleGFtcGxlLCB1c2luZyBHb29nbGUgUGxhY2VzIEFQSTpcclxuXHJcbiAgICBjb25zdCBzZXJ2aWNlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5BdXRvY29tcGxldGVTZXJ2aWNlKCk7XHJcbiAgICBzZXJ2aWNlLmdldFBsYWNlUHJlZGljdGlvbnMoXHJcbiAgICAgIHtcclxuICAgICAgICBpbnB1dDogcXVlcnksXHJcbiAgICAgICAgdHlwZXM6IFsnYWRkcmVzcyddLFxyXG4gICAgICB9LFxyXG4gICAgICAocHJlZGljdGlvbnMsIHN0YXR1cykgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHN0YXR1cyA9PT0gZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2VTdGF0dXMuT0sgJiZcclxuICAgICAgICAgIHByZWRpY3Rpb25zXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucyA9IHByZWRpY3Rpb25zLm1hcCgocHJlZGljdGlvbikgPT4gKHtcclxuICAgICAgICAgICAgcGxhY2VfaWQ6IHByZWRpY3Rpb24ucGxhY2VfaWQsXHJcbiAgICAgICAgICAgIG1haW5fdGV4dDogcHJlZGljdGlvbi5zdHJ1Y3R1cmVkX2Zvcm1hdHRpbmcubWFpbl90ZXh0LFxyXG4gICAgICAgICAgICBzZWNvbmRhcnlfdGV4dDogcHJlZGljdGlvbi5zdHJ1Y3R1cmVkX2Zvcm1hdHRpbmcuc2Vjb25kYXJ5X3RleHQsXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBwcmVkaWN0aW9uLmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggPSAtMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0QWRkcmVzcyhzdWdnZXN0aW9uOiBhbnkpIHtcclxuICAgIGNvbnN0IGFkZHJlc3NJbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICcjYWRkcmVzc0lucHV0J1xyXG4gICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKGFkZHJlc3NJbnB1dCkge1xyXG4gICAgICBhZGRyZXNzSW5wdXQudmFsdWUgPSBzdWdnZXN0aW9uLmRlc2NyaXB0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2UoXHJcbiAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgICApO1xyXG4gICAgc2VydmljZS5nZXREZXRhaWxzKFxyXG4gICAgICB7XHJcbiAgICAgICAgcGxhY2VJZDogc3VnZ2VzdGlvbi5wbGFjZV9pZCxcclxuICAgICAgICBmaWVsZHM6IFsnZ2VvbWV0cnknLCAnZm9ybWF0dGVkX2FkZHJlc3MnXSxcclxuICAgICAgfSxcclxuICAgICAgKHBsYWNlLCBzdGF0dXMpID0+IHtcclxuICAgICAgICBpZiAoc3RhdHVzID09PSBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VzU2VydmljZVN0YXR1cy5PSyAmJiBwbGFjZSkge1xyXG4gICAgICAgICAgY29uc3QgbGF0ID0gcGxhY2UuZ2VvbWV0cnk/LmxvY2F0aW9uPy5sYXQoKTtcclxuICAgICAgICAgIGNvbnN0IGxuZyA9IHBsYWNlLmdlb21ldHJ5Py5sb2NhdGlvbj8ubG5nKCk7XHJcblxyXG4gICAgICAgICAgaWYgKGxhdCAhPT0gdW5kZWZpbmVkICYmIGxuZyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9uZ2l0dWRlID0gbG5nO1xyXG4gICAgICAgICAgICB0aGlzLmxhdGl0dWRlID0gbGF0O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jZW50ZXIgPSB7IGxhdCwgbG5nIH07XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0gdGhpcy5jZW50ZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XHJcbiAgICB0aGlzLmFkZHJlc3NTdWdnZXN0aW9ucyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgb25JbnB1dEJsdXIoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG5cclxuICBmaW5kTWVkaWNhbFF1ZXN0aW9uc0luT3BlblF1b3RlKGFycmF5T2ZPYmogOiBhbnkpIHtcclxuICAgIGlmKGFycmF5T2ZPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdNZWRpQ25kdG4nIHx8IGFycmF5T2ZPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICAnTGlmZU1lZGlDbmR0bicpIHtcclxuICAgICAgdGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUgPSBhcnJheU9mT2JqO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGFycmF5T2ZPYmpbJ3BlcnNvblVXQWN0aXZpdHlSZXNwb25zZUVudGl0eSddKSkge1xyXG4gICAgICBhcnJheU9mT2JqWydwZXJzb25VV0FjdGl2aXR5UmVzcG9uc2VFbnRpdHknXS5mb3JFYWNoKChzaW5nbGVTdWJBcnJheSA6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZmluZE1lZGljYWxRdWVzdGlvbnNJbk9wZW5RdW90ZShzaW5nbGVTdWJBcnJheSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpIHtcclxuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKCkpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdCkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXT8ucXVlc3Rpb25MaXN0WzBdPy5wZXJzb25VV2RldGFpbHNMaXN0KSkge1xyXG4gICAgICBsZXQgYXJyYXlPZktleXMgOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXT8ucXVlc3Rpb25MaXN0WzBdPy5wZXJzb25VV2RldGFpbHNMaXN0KTtcclxuICAgICAgYXJyYXlPZktleXMuZm9yRWFjaCgoc2luZ2xlS2V5IDogYW55LCBzaW5nbGVLZXlMZW5ndGggOiBudW1iZXIpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldKSkge1xyXG4gICAgICAgICAgdGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XS5mb3JFYWNoKChzaW5nbGVBbnN3ZXJPYmogOiBhbnksIHNpbmdsZUFuc3dlck9iakxlbmd0aCA6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBlcnNvblV3QW5zd2VycyhzaW5nbGVBbnN3ZXJPYmopO1xyXG4gICAgICAgICAgICBpZihzaW5nbGVLZXlMZW5ndGggPT09IChhcnJheU9mS2V5cy5sZW5ndGggLSAxKSAmJiBzaW5nbGVBbnN3ZXJPYmpMZW5ndGggPT09ICh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldLmxlbmd0aCAtIDEpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByZXBhcmVQZXJzb25Vd1F1ZXN0aW9uc09iaigpIHtcclxuICAgIHRoaXMucXVlc3Rpb25MaXN0ID0gW107XHJcbiAgICBsZXQgZGF0YTogYW55ID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKCk7XHJcbiAgICB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94ID0gW107XHJcblxyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXSkpIHtcclxuICAgICAgbGV0IHBlcnNvblV3SWRBcnJheTogYW55ID0gW107XHJcbiAgICAgIGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6IGFueSkgPT4ge1xyXG4gICAgICAgIHBlcnNvblV3SWRBcnJheS5wdXNoKHNpbmdsZVF1ZXN0aW9uT2JqWydwZXJzb25VV0lkJ10pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGEpICYmXHJcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddKVxyXG4gICAgICApIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXSkpIHtcclxuICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcclxuICAgICAgICAgIGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZm9yRWFjaCgoc2luZ2xlUGVyc29uT2JqZWN0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0lkID0gc2luZ2xlUGVyc29uT2JqZWN0WydwZXJzb25VV0lkJ10udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXSkpIHtcclxuICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goXHJcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ3RpdGxlJ10gPT09ICdNZWRpY2FsIERldGFpbHMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVGV4dCddID0gc2luZ2xlUXVlc3Rpb25bXHJcbiAgICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25UZXh0J1xyXG4gICAgICAgICAgICAgICAgICAgIF0ucmVwbGFjZSgvXFxcXG4vZywgJ1xcbicpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVsnZG9tYWluVmFsdWVzJ11bc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXV07XHJcblxyXG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZmllbGQnXSA9IHRoaXMuZ2V0RmllbGQoc2luZ2xlUXVlc3Rpb24pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUEFOJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWyd2YWxpZGF0aW9ucyddID1cclxuICAgICAgICAgICAgICAgICAgICAgICd7XCJUeXBlXCI6XCJBbHBoYU51bWVyaWNcIixcIk1pblZhbHVlXCI6XCIxMFwiLFwiTWF4VmFsdWVcIjpcIjEwXCIsXCJyZWdleFBhdHRlcm5cIjpcIi9eKFthLXpBLVpdKXs1fShbMC05XSl7NH0oW2EtekEtWl0pezF9PyQvXCJ9JztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAvLyBpZiAoc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdGdGNhQ250Y0RldGxzJykge1xyXG4gICAgICAgICAgICAgICAgICAvLyAgIHNpbmdsZVF1ZXN0aW9uWyd2YWxpZGF0aW9ucyddID0gJ3tcImN1c3RvbVZhbGlkYXRpb25cIjpbe1wiY291bnRyeVwiOlwiSU5cIixcIk1pblZhbHVlXCI6XCIxMFwiLFwiTWF4VmFsdWVcIjpcIjEwXCIsXCJyZWdleFBhdHRlcm5cIjpcIigoXls2LTldKXsxfShbMC05XSl7OX0kKVwifSx7XCJjb3VudHJ5XCI6XCJPVEhFUlwiLFwiTWluVmFsdWVcIjpcIjVcIixcIk1heFZhbHVlXCI6XCIxNFwifV19JztcclxuICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10uZm9yRWFjaChcclxuICAgICAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRRdWVzdGlvbk9iamVjdDogYW55ID0gc2luZ2xlUGVyc29uT2JqZWN0W1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdxdWVzdGlvbkxpc3QnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0uZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChvYmplY3Q6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFsncXVlc3Rpb25JZCddID09PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsnbmV4dFF1ZXN0aW9uSWQnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFF1ZXN0aW9uT2JqZWN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UXVlc3Rpb25PYmplY3RbMF1bJ2Fuc3dlcmVkVmFsdWUnXSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWydwYXJlbnRRdWVzdGlvblZhbHVlJ107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnZG9tYWluVmFsdWVzJ11bc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXV1cclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGRhdGFbJ2RvbWFpblZhbHVlcyddW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluTmFtZSddXHJcbiAgICAgICAgICAgICAgICAgICAgICBdLmZvckVhY2goKHNpbmdsZURvbWFpblZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc2luZ2xlUXVlc3Rpb25bJ3N0ZXAnXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLnB1c2goc2luZ2xlUXVlc3Rpb25bJ3N0ZXAnXSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBxdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdJTUFHRSBURVhUJykge1xyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UZXh0J10gPSBxdWVzdGlvbltcclxuICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25UZXh0J1xyXG4gICAgICAgICAgICAgICAgICBdLnJlcGxhY2VBbGwoJ1xcXFxuJywgJzxicj4nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxRdWVzdGlvbnNGZWV0TGlzdCA9IHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhURiddID0gcXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEYnXVsnZmllbGQnXVsnaXNTaG93TGFiZWwnXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRGJ11bJ2ZpZWxkJ11bJ2NvbnRyb2xTdHlsZSddID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiAnc2VsZWN0JyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzE2cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcclxuICAgICAgICAgICAgICAgICAgICBudWRnZURpc3BsYXlJbWFnZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiAnNDAwJyxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQmFja2dyb3VuZDogJyNFQ0VDRUMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBpc01hc3RlckNzczogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sTWV0YUlkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgJ0xJX0NPTV9HRU5fQ1RSTF9zZWxlY3RfZG93bmxvYWREb2N1bWVudHNfVjEnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsUXVlc3Rpb25zSW5jaGVzTGlzdCA9IHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUSSddID0gcXVlc3Rpb247XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEknXVsnZmllbGQnXVsnaXNTaG93TGFiZWwnXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRJJ11bJ2ZpZWxkJ11bJ2NvbnRyb2xTdHlsZSddID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiAnc2VsZWN0JyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzE2cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdNdWxpc2gnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhcmV0Q29sb3I6ICcjZmZiYjAwJyxcclxuICAgICAgICAgICAgICAgICAgICBudWRnZURpc3BsYXlJbWFnZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkJnQ29sb3I6ICcjRkZGRkZGJyxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiAnNDAwJyxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JhY2tncm91bmQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Db2xvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ29sb3I6ICcjRUNFQ0VDJyxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQmFja2dyb3VuZDogJyNFQ0VDRUMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyQ29sb3I6ICcjRUUwMDAwJyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlcldpZHRoOiAnMS41cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkRGF0ZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBpc01hc3RlckNzczogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sTWV0YUlkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgJ0xJX0NPTV9HRU5fQ1RSTF9zZWxlY3RfZG93bmxvYWREb2N1bWVudHNfVjEnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZGljYWxRdWVzdGlvbnNJbmNoZXNMaXN0ID0gcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFQnXSA9IHF1ZXN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFQnXVsnZmllbGQnXVsnaXNTaG93TGFiZWwnXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFQnXVsnZmllbGQnXVsnY29udHJvbFN0eWxlJ10gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbFR5cGU6ICdGUkVFVEVYVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNnB4JyxcclxuICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiAnNDAwJyxcclxuICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnTXVsaXNoJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjRkZGRkZGJyxcclxuICAgICAgICAgICAgICAgICAgICBjYXJldENvbG9yOiAnI2ZmYmIwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25CZ0NvbG9yOiAnI0ZGRkZGRicsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Db2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uRm9udFdlaWdodDogJzQwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCYWNrZ3JvdW5kOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1czogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNvbG9yOiAnI0VDRUNFQycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlckNvbG9yOiAnI0VFMDAwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZERhdGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNNYXN0ZXJDc3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE1ldGFJZDpcclxuICAgICAgICAgICAgICAgICAgICAgICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJTdHlsZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBjc3NDbGFzczogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ3JlY3ZTZnRDb3B5Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9iamVjdFsncm9sZSddXVtdID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgZG9tYWluSW50ZXJuYWxWYWx1ZTogcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgICAgIGRvbWFpblVpVmFsdWU6ICdOJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGRvbWFpbkludGVybmFsVmFsdWU6IHF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgZG9tYWluVWlWYWx1ZTogJ1knLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdoYXJkQ29weUxhbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9ICdIQVJEIENPUFknO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLnNvcnQoXHJcbiAgICAgICAgICAgICAgICAoYTogYW55LCBiOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgIGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSB8fCBhWydkaXNwbGF5T3JkZXInXSAtIGJbJ2Rpc3BsYXlPcmRlciddXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHF1ZXN0aW9uc0xpc3RGb3JMQTogYW55ID0gW107XHJcbiAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMuZm9yRWFjaCgoc3RlcHM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE9iajogYW55ID0gc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3N0ZXAnXSA9PT0gc3RlcHNcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcclxuICAgICAgICAgICAgICAgIHN0ZXA6IHN0ZXBzLFxyXG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlUGVyc29uT2JqZWN0WydwZXJzb25VV0lkJ10udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcclxuICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialxyXG4gICAgICAgICAgICAgICAgICA6IFtdLFxyXG4gICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopXHJcbiAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpbMF1bJ3RpdGxlJ11cclxuICAgICAgICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICAgICAgIGlzTWVkaWNhbFN1YlF1ZXN0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNob3dTZWN0aW9uOiB0cnVlLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBIYXJkIENvcHkgYW5kIE1hcCBxdWVzdGlvblxyXG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkSGFyZENvcHlRdWVzdGlvbjogYW55ID0gZmlsdGVyZWRPYmouZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ3JlY3ZTZnRDb3B5J1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkSGFyZENvcHlRdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgICAgICAgb2JqWydxdWVzdGlvbnMnXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6ICdNQVAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzU2hvd1F1ZXN0aW9uSW5VSTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvblJlbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbklkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEhhcmRDb3B5UXVlc3Rpb25bMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uQW5zd2VyOiAnWScsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaWYgTlJJIHRoZW4gcGFzc3BvcnQgdXBsb2FkIGlzIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWROYXRpb25hbGl0eVF1ZXN0aW9uOiBhbnkgPSBmaWx0ZXJlZE9iai5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTmF0aW9uYWxpdHknXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWROYXRpb25hbGl0eVF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgICBzaW5nbGVQZXJzb25PYmplY3RbJ3F1ZXN0aW9uTGlzdCddLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogJ1BBU1NQT1JUX1VQTE9BRCcsXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxRdWVzdGlvbjogJ04nLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVGV4dDogJ1Bhc3Nwb3J0IERldGFpbHMgJyxcclxuICAgICAgICAgICAgICAgICAgICBpc1Nob3dRdWVzdGlvbkluVUk6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25SZWxhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25JZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWROYXRpb25hbGl0eVF1ZXN0aW9uWzBdWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbkFuc3dlcjogJ2ZvcmduTmF0aW9uYWwnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICBvYmpbJ3F1ZXN0aW9ucyddLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVHlwZTogJ1BBU1NQT1JUX1VQTE9BRCcsXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxRdWVzdGlvbjogJ04nLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uVGV4dDogJ1Bhc3Nwb3J0IERldGFpbHMgJyxcclxuICAgICAgICAgICAgICAgICAgICBpc1Nob3dRdWVzdGlvbkluVUk6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25SZWxhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25JZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWROYXRpb25hbGl0eVF1ZXN0aW9uWzBdWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbkFuc3dlcjogJ2ZvcmduTmF0aW9uYWwnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBxdWVzdGlvbnNMaXN0Rm9yTEEucHVzaChvYmopO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gbGV0IGxpZmVBc3N1cmVkT2JqZWN0SW5kZXhJbk1hc3RlcjogYW55ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmluZEluZGV4KChzaW5nbGVPYmo6IGFueSkgPT4gc2luZ2xlT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvbk9iamVjdFsncm9sZSddKTtcclxuICAgICAgICAgICAgLy8gaWYgKGxpZmVBc3N1cmVkT2JqZWN0SW5kZXhJbk1hc3RlciAhPT0gdGhpcy5udW1iZXJNaW51c09uZSkge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdCA9IHF1ZXN0aW9uc0xpc3RGb3JMQTtcclxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlSGVpZ2h0UXVlc3Rpb25JZHMoKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmogPSBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3QpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdFswXT8ucGVyc29uVVdkZXRhaWxzTGlzdCkgKSB7XHJcbiAgICAgICAgICBsZXQgaXNTdWJRdWVzdGlvbkV4aXN0czogYW55ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZSA9IG51bGw7XHJcbiAgICAgICAgICBsZXQgYXJyYXlPZktleXMgOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXT8ucXVlc3Rpb25MaXN0WzBdPy5wZXJzb25VV2RldGFpbHNMaXN0KTtcclxuICAgICAgICAgIGFycmF5T2ZLZXlzLmZvckVhY2goKHNpbmdsZUtleSA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdWydxdWVzdGlvbkxpc3QnXVswXVsncGVyc29uVVdkZXRhaWxzTGlzdCddW3NpbmdsZUtleV0uZm9yRWFjaCgoc2luZ2xlQW5zd2VyT2JqIDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbmRNZWRpY2FsUXVlc3Rpb25zSW5PcGVuUXVvdGUoc2luZ2xlQW5zd2VyT2JqKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5tYXN0ZXJTZXJ2aWNlLmdldFN1YlF1ZXN0aW9ucyh0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGEsIHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlWydhbnN3ZXInXSwgdGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGVbJ3BlcnNvblVXSWQnXSkuc3Vic2NyaWJlKChzdWJRdWVzdGlvblJlc3BvbnNlIDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IGRpc3RpbmN0U3RlcHM6IGFueSA9IFtdO1xyXG4gICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2UuZm9yRWFjaCgoc3ViUXVlc3Rpb24gOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydkb21haW5WYWx1ZXMnXVtcclxuICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXVxyXG4gICAgICAgICAgICAgICAgXTtcclxuXHJcbiAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZmllbGQnXSA9IHRoaXMuZ2V0RmllbGQoc3ViUXVlc3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFkaXN0aW5jdFN0ZXBzLmluY2x1ZGVzKHN1YlF1ZXN0aW9uWydjbHVzdGVySWQnXSkpIHtcclxuICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5wdXNoKHN1YlF1ZXN0aW9uWydjbHVzdGVySWQnXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBzdWJRdWVzdGlvblJlc3BvbnNlLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiBhWydzdGVwJ10gLSBiWydzdGVwJ10gfHwgYVsnZGlzcGxheU9yZGVyJ10gLSBiWydkaXNwbGF5T3JkZXInXSk7XHJcbiAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5mb3JFYWNoKChzdGVwczogYW55LCBpbmQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBzdWJRdWVzdGlvblJlc3BvbnNlLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddID09PSBzdGVwcyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICAgICAgICAgIHN0ZXA6IDEwMDAgKyBpbmQsXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iaikgPyBmaWx0ZXJlZE9iaiA6IFtdLFxyXG4gICAgICAgICAgICAgICAgICBzZWN0aW9uTmFtZTogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iaikgPyBmaWx0ZXJlZE9ialswXVsndGl0bGUnXSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICBpc01lZGljYWxTdWJRdWVzdGlvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlWydwZXJzb25VV0lkJ10udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAvLyBsZXQgTGFJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd01hc3Rlck9iai5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAvLyAgIChzaW5nbGU6IGFueSkgPT4gc2luZ2xlWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvblsncm9sZSddXHJcbiAgICAgICAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkxpc3QucHVzaChvYmopO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgPSBzdWJRdWVzdGlvblJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgIC8vIGxldCBsYUluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvblsncm9sZSddKTtcclxuICAgICAgICAgICAgICB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10gPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uY29uY2F0KHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5tYXBBbnN3ZXJzRm9yT3BlblF1b3RlKCk7XHJcbiAgICAgICAgICAgIH0sIChlcnIgOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLm1hcEFuc3dlcnNGb3JPcGVuUXVvdGUoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gdGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKCkuZm9yRWFjaCgoc2luZ2xlUGVyc29uOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uWydxdWVzdGlvbkxpc3QnXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddWzBdKSkge1xyXG4gICAgICAgICAgLy8gICAgIGxldCBhcnJheU9mS2V5cyA9IE9iamVjdC5rZXlzKHNpbmdsZVBlcnNvblsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXSk7XHJcbiAgICAgICAgICAvLyAgICAgaWYgKGFycmF5T2ZLZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIC8vICAgICAgIGFycmF5T2ZLZXlzLmZvckVhY2goKHNpbmdsZUtleSkgPT4ge1xyXG4gICAgICAgICAgLy8gICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XSkpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICBzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XS5mb3JFYWNoKChhbnN3ZXJPYmo6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgIC8vICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXI7XHJcblxyXG5cclxuICAgICAgICAgIC8vICAgICAgICAgICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBhbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSAmJiBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBbXTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gbGV0IGxpc3RPZk9wdGlvbnNTZWxlY3RlZCA6IGFueSA9IGFuc3dlck9iai5hbnN3ZXIuc3BsaXQoJywnKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gbGlzdE9mT3B0aW9uc1NlbGVjdGVkLmZvckVhY2goKHNpbmdsZUVsZW1lbnQgOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvblswXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uWzBdWydkb21haW5WYWx1ZXMnXSkpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgIGxldCBmaWx0ZXJlZERvbWFpblZhbHVlT2JqIDogYW55ID0gZmlsdGVyZWRRdWVzdGlvblswXVsnZG9tYWluVmFsdWVzJ10uZmlsdGVyKChzaW5nbGVPYmogOiBhbnkpID0+IHNpbmdsZU9ialsnZG9tYWluSW50ZXJuYWxWYWx1ZSddID09PSBzaW5nbGVFbGVtZW50KTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWREb21haW5WYWx1ZU9iaikpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdLnB1c2goe1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgICAgIGxhYmVsIDogZmlsdGVyZWREb21haW5WYWx1ZU9ialswXVsnZG9tYWluVWlWYWx1ZSddLFxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgICAgIHZhbHVlIDogZmlsdGVyZWREb21haW5WYWx1ZU9ialswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICAgIH0pO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXIuc3BsaXQoJywnKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXJcclxuICAgICAgICAgIC8vICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10gPSBhbnN3ZXJPYmpbJ2Fuc3dlciddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIGxldCBmZWV0QW5zd2VyID0gYW5zd2VyT2JqWydhbnN3ZXInXS5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShhbnN3ZXJPYmpbJ2Fuc3dlciddKSAmJiBhbnN3ZXJPYmpbJ2Fuc3dlciddLmluY2x1ZGVzKCcuJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10gPSBmZWV0QW5zd2VyWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9IGZlZXRBbnN3ZXJbMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gZmVldEFuc3dlclswXTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSAnMCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvblJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vICAgaWYgKHNpbmdsZVF1ZXN0aW9uUmVzcG9uc2VbJ3F1ZXN0aW9uSWQnXSA9PT0gYW5zd2VyT2JqWydxdWVzdGlvbklkJ10gJiYgc2luZ2xlUXVlc3Rpb25SZXNwb25zZVsncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTicpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIGxldCBsYUluZGV4OiBhbnkgPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uWydyb2xlJ10pO1xyXG5cclxuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pICYmIGZpbHRlcmVkUXVlc3Rpb25bMF1bJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXI7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgaWYgKGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ0xpZmVNZWRpQ25kdG4nIHx8IGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ01lZGlDbmR0bicpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgaXNTdWJRdWVzdGlvbkV4aXN0cyA9IHRydWU7XHJcblxyXG5cclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8ge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwidXJsUGFyYW1Gb3JEaXNlYXNlXCI6IFwibWRlaWNhbEhpc3RvcnlcIixcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcImFwaVVybFwiOiBcImh0dHBzOi8vcHJlcHJvZC1kaXJlY3Rwb3J0YWxsaWZlLmdvZGlnaXQuY29tL0RpcmVjdFBvcnRhbExpZmUvbGlmZS9mZXRjaFN1YlF1ZXN0aW9uc1wiLFxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwidXJsUGFyYW1Gb3JQZXJzb25Vd0lkXCI6IFwicGVyc29uVVdJRFwiLFxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIFwidG9rZW5Db29raWVQYXJhbVwiOiBcInYzVG9rZW5cIixcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcImlzU2VuZFRva2VuXCI6IGZhbHNlXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXJTZXJ2aWNlLmdldFN1YlF1ZXN0aW9ucyh0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGEsIGFuc3dlck9ialsnYW5zd2VyJ10sIGFuc3dlck9ialsncGVyc29uVVdJZCddKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgKHN1YlF1ZXN0aW9uUmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgLy8gdGhpcy5sb2FkZXJTZXJ2aWNlLmRpc3BsYXkoZmFsc2UpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgbGV0IGRpc3RpbmN0U3RlcHM6IGFueSA9IFtdO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25SZXNwb25zZSkpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25SZXNwb25zZS5mb3JFYWNoKChzdWJRdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10gPSB0cnVlO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSkgJiZcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddID0gW3N1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11dO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSlcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9iajogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0UXVlc3Rpb25PYmplY3Q6IGFueSA9IHN1YlF1ZXN0aW9uUmVzcG9uc2UuZmlsdGVyKFxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvYmplY3Q6IGFueSkgPT4gb2JqZWN0WydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ25leHRRdWVzdGlvbklkJ11cclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRRdWVzdGlvbk9iamVjdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFF1ZXN0aW9uT2JqZWN0WzBdWydhbnN3ZXJlZFZhbHVlJ10gPSBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWydwYXJlbnRRdWVzdGlvblZhbHVlJ107XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsnZG9tYWluVmFsdWVzJ11bXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZG9tYWluTmFtZSddXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2ZpZWxkJ10gPSB0aGlzLmdldEZpZWxkKHN1YlF1ZXN0aW9uKTtcclxuXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHN1YkRvbWFpbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuc3ViTWVkaWNhbFF1ZXN0aW9uc0RvbWFpbkludGVybmFsVmFsdWVzTGlzdC5wdXNoKHN1YkRvbWFpblsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKSkge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5wdXNoKHN1YlF1ZXN0aW9uWydjbHVzdGVySWQnXSk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25SZXNwb25zZS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gYVsnc3RlcCddIC0gYlsnc3RlcCddIHx8IGFbJ2Rpc3BsYXlPcmRlciddIC0gYlsnZGlzcGxheU9yZGVyJ10pO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLmZvckVhY2goKHN0ZXBzOiBhbnksIGluZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBzdWJRdWVzdGlvblJlc3BvbnNlLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddID09PSBzdGVwcyk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3RlcDogMTAwMCArIGluZCxcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iaikgPyBmaWx0ZXJlZE9iaiA6IFtdLFxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopID8gZmlsdGVyZWRPYmpbMF1bJ3RpdGxlJ10gOiAnJyxcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIGlzTWVkaWNhbFN1YlF1ZXN0aW9uOiB0cnVlLFxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWUsXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBhbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXS50b1N0cmluZygpLFxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IExhSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdNYXN0ZXJPYmouZmluZEluZGV4KFxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vICAgKHNpbmdsZTogYW55KSA9PiBzaW5nbGVbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uWydyb2xlJ11cclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0LnB1c2gob2JqKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgPSBzdWJRdWVzdGlvblJlc3BvbnNlO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAvLyBsZXQgbGFJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25bJ3JvbGUnXSk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXS5jb25jYXQodGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgLy8gdGhpcy5kaXNhYmxlQ29uZmlybWF0aW9uQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZGlzYWJsZUNvbmZpcm1hdGlvbkJ1dHRvbiA9IHRydWU7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmxvYWRlclNlcnZpY2UuZGlzcGxheShmYWxzZSk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gZWxzZSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyAgIHRoaXMubG9hZGVyU2VydmljZS5kaXNwbGF5KGZhbHNlKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICBpZiAodHlwZW9mIGFuc3dlck9iai5hbnN3ZXIgPT09ICdzdHJpbmcnICYmIGFuc3dlck9iai5hbnN3ZXIgIT09ICdZJyAmJiBhbnN3ZXJPYmouYW5zd2VyICE9PSAnTicpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gaWYgKGFuc3dlck9iai5hbnN3ZXIuaW5jbHVkZXMoJywnKSkge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIGFuc3dlck9iai5hbnN3ZXIuc3BsaXQoJywnKS5mb3JFYWNoKChhbnN3ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyXSA9IHRydWU7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLmFuc3dlcl0gPSB0cnVlO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy4gIHVwZGF0ZVBlcnNvblV3QW5zd2VycyhhbnN3ZXJPYmopO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgICB9KTtcclxuICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcclxuXHJcbiAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydoZWlnaHRPYmplY3RUeXBlcyddID0ge1xyXG4gICAgICBjb250cm9sU3R5bGU6IHtcclxuICAgICAgICBjb250cm9sVHlwZTogJ3NlbGVjdCcsXHJcbiAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICBib3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICBib3JkZXJSYWRpdXM6IG51bGwsXHJcbiAgICAgICAgZm9udFNpemU6ICcxNnB4JyxcclxuICAgICAgICBmb250V2VpZ2h0OiAnNDAwJyxcclxuICAgICAgICBmb250RmFtaWx5OiAnTXVsaXNoJyxcclxuICAgICAgICBjb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgIGJhY2tncm91bmQ6ICcjRkZGRkZGJyxcclxuICAgICAgICBjYXJldENvbG9yOiAnI2ZmYmIwMCcsXHJcbiAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXHJcbiAgICAgICAgZHJvcGRvd25PcHRpb25CZ0NvbG9yOiAnI0ZGRkZGRicsXHJcbiAgICAgICAgZHJvcGRvd25PcHRpb25Db2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uRm9udFdlaWdodDogJzQwMCcsXHJcbiAgICAgICAgd2lkdGg6IG51bGwsXHJcbiAgICAgICAgZm9jdXNCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICBmb2N1c0JvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgZm9jdXNCYWNrZ3JvdW5kOiBudWxsLFxyXG4gICAgICAgIGZvY3VzQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcclxuICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3I6IG51bGwsXHJcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXHJcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1czogbnVsbCxcclxuICAgICAgICBob3ZlckJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgaG92ZXJCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICBob3ZlckNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgZGlzYWJsZUNvbG9yOiAnI0VDRUNFQycsXHJcbiAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcclxuICAgICAgICBlcnJvckJvcmRlckNvbG9yOiAnI0VFMDAwMCcsXHJcbiAgICAgICAgZXJyb3JCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICBlcnJvckNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgY3JlYXRlZERhdGU6IG51bGwsXHJcbiAgICAgICAgcGFkZGluZzogbnVsbCxcclxuICAgICAgICBtYXJnaW46IG51bGwsXHJcbiAgICAgICAgaXNNYXN0ZXJDc3M6IG51bGwsXHJcbiAgICAgICAgY29udHJvbE1ldGFJZDogJ0xJX0NPTV9HRU5fQ1RSTF9zZWxlY3RfZG93bmxvYWREb2N1bWVudHNfVjEnLFxyXG4gICAgICAgIGJvcmRlclN0eWxlOiBudWxsLFxyXG4gICAgICAgIGhlaWdodDogbnVsbCxcclxuICAgICAgICBtaW5IZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgbWF4SGVpZ2h0OiBudWxsLFxyXG4gICAgICAgIG1pbldpZHRoOiBudWxsLFxyXG4gICAgICAgIG1heFdpZHRoOiBudWxsLFxyXG4gICAgICAgIGNzc0NsYXNzOiBudWxsLFxyXG4gICAgICB9LFxyXG4gICAgICBmaWVsZE5hbWU6IG51bGwsXHJcbiAgICAgIGxhYmVsOiAnZmVldCAvIGluY2hlcycsXHJcbiAgICAgIHBsYWNlSG9sZGVyOiAnJyxcclxuICAgICAgbWV0YUlkOiAnJyxcclxuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxyXG4gICAgICBpc0Rpc2FibGU6IGZhbHNlLFxyXG4gICAgICB2YWxpZGF0b3JzOiB7XHJcbiAgICAgICAgaXNSZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgICAgcmVxdWlyZWRNZXNzYWdlOiAnVGhpcyBmaWVsZCBjYW5ub3QgYmUgZW1wdHknLFxyXG4gICAgICAgIG1pbkxlbmd0aDogbnVsbCxcclxuICAgICAgICBtaW5MZW5ndGhNZXNzYWdlOiBudWxsLFxyXG4gICAgICAgIG1heExlbmd0aDogMTUwLFxyXG4gICAgICAgIG1heExlbmd0aE1lc3NhZ2U6IG51bGwsXHJcbiAgICAgICAgcGF0dGVybjogbnVsbCxcclxuICAgICAgICBwYXR0ZXJuTWVzc2FnZTogJycsXHJcbiAgICAgIH0sXHJcbiAgICAgIG9wdGlvbnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsYWJlbDogJ0NtJyxcclxuICAgICAgICAgIHZhbHVlOiAnQ00nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGFiZWw6ICdGZWV0JyxcclxuICAgICAgICAgIHZhbHVlOiAnRkVFVCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgXSxcclxuICAgICAgY3NzQ2xhc3M6IG51bGwsXHJcbiAgICAgIHZhbHVlOiBudWxsLFxyXG4gICAgICBzdHlsZTogbnVsbCxcclxuICAgICAgaW1hZ2VVcmw6IG51bGwsXHJcbiAgICAgIGNvbmZpZ0RhdGE6IHt9LFxyXG4gICAgICBtZXRhRGF0YU9iajogbnVsbCxcclxuICAgICAgaXNTaG93TGFiZWw6IGZhbHNlLFxyXG4gICAgICBpc01hc3RlckNvbnRyb2w6IGZhbHNlLFxyXG4gICAgICBjb250cm9sVHlwZTogJ3NlbGVjdCcsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUGVyc29uVXdBbnN3ZXJzKGFuc3dlck9iajogYW55KSB7XHJcblxyXG4gICAgaWYgKGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpIHtcclxuICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gYW5zd2VyT2JqWydhbnN3ZXInXTtcclxuICAgIH1cclxuICAgIGlmIChhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJykge1xyXG4gICAgICBsZXQgZmVldEFuc3dlciA9IGFuc3dlck9ialsnYW5zd2VyJ10uc3BsaXQoJy4nKTtcclxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoYW5zd2VyT2JqWydhbnN3ZXInXSkgJiYgYW5zd2VyT2JqWydhbnN3ZXInXS5pbmNsdWRlcygnLicpKSB7XHJcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gZmVldEFuc3dlclswXTtcclxuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSBmZWV0QW5zd2VyWzFdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IGZlZXRBbnN3ZXJbMF07XHJcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gJzAnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydxdWVzdGlvbnNSZXNwb25zZSddWzBdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IGFuc3dlck9ialsncXVlc3Rpb25JZCddKTtcclxuICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uWzBdKSkge1xyXG4gICAgICBpZihmaWx0ZXJlZFF1ZXN0aW9uWzBdWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xyXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXIuc3BsaXQoJywnKTtcclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoYW5zd2VyT2JqLnBlcnNvblVXQWN0aXZpdHlSZXNwb25zZUVudGl0eSkpIHtcclxuICAgICAgYW5zd2VyT2JqLnBlcnNvblVXQWN0aXZpdHlSZXNwb25zZUVudGl0eS5mb3JFYWNoKChzdWJxdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVQZXJzb25Vd0Fuc3dlcnMoc3VicXVlc3Rpb24pO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5zYXZlUXVlc3Rpb25EZXRhaWxzKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgIHZhbHVlID09PSBudWxsIHx8XHJcbiAgICAgIHZhbHVlID09PSAnJyB8fFxyXG4gICAgICAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHx8XHJcbiAgICAgIEpTT04uc3RyaW5naWZ5KHZhbHVlKSA9PT0gJ3t9J1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFRpdGxlQ2FzZShoZWFkZXI6IGFueSk6IGFueSB7XHJcbiAgICBpZiAoaGVhZGVyKSB7XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSGVhZGVyLmluY2x1ZGVzKGhlYWRlci50b0xvY2FsZUxvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgIGxldCB2YWwgPSBoZWFkZXIuc3BsaXQoJyAnKTtcclxuICAgICAgICByZXR1cm4gdmFsWzBdLnRvVXBwZXJDYXNlKCkgKyAnICcgKyB0aGlzLnRvVGl0bGVDYXNlKHZhbFsxXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGhlYWRlci50b1VwcGVyQ2FzZSgpID09PSAnRkFUQ0EgREVUQUlMUycpIHtcclxuICAgICAgICAgIHJldHVybiBoZWFkZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnRvVGl0bGVDYXNlKGhlYWRlcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvVGl0bGVDYXNlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWVcclxuICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgIC5yZXBsYWNlKFxyXG4gICAgICAgICAgL1xcd1xcUyovZyxcclxuICAgICAgICAgICh0eHQ6IGFueSkgPT4gdHh0WzBdLnRvVXBwZXJDYXNlKCkgKyB0eHQuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RmllbGQocXVlc3Rpb25PYmo6IGFueSkge1xyXG4gICAgbGV0IG9wdGlvbnNPYmo6IGFueSA9IFtdO1xyXG4gICAgbGV0IGNvbnRyb2xTdHlsZSA6IGFueSA9IHt9O1xyXG4gICAgaWYgKHF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkge1xyXG4gICAgICBxdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc2luZ2xlT3B0aW9uVmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgIG9wdGlvbnNPYmoucHVzaCh7XHJcbiAgICAgICAgICBsYWJlbDogc2luZ2xlT3B0aW9uVmFsdWVbJ2RvbWFpblVpVmFsdWUnXSxcclxuICAgICAgICAgIHZhbHVlOiBzaW5nbGVPcHRpb25WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGxldCBtaW5MZW5ndGg6IGFueSA9IG51bGw7XHJcbiAgICBsZXQgbWF4TGVuZ3RoOiBhbnkgPSAyMDA7XHJcbiAgICBsZXQgcGF0dGVybjogYW55ID0gbnVsbDtcclxuICAgIGxldCBwYXR0ZXJuTWVzc2FnZTogYW55ID0gbnVsbDtcclxuICAgIGxldCBjb25maWdEYXRhOiBhbnkgPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YSlcclxuICAgICAgPyB0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGFcclxuICAgICAgOiB7fTtcclxuXHJcbiAgICBpZihxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICAnUkFESU8gQlVUVE9OJyB8fCBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdBRERNT1JFJykge1xyXG4gICAgICBjb250cm9sU3R5bGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgIFwiY29udHJvbFR5cGVcIjogXCJyYWRpb1wiLFxyXG4gICAgICAgICAgICAgICAgICBcImJvcmRlckNvbG9yXCI6IFwiI0RBREFEQVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImJvcmRlcldpZHRoXCI6IFwiMXB4XCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiYm9yZGVyUmFkaXVzXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9udFNpemVcIjogXCIxMnB4XCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9udFdlaWdodFwiOiBcIjQwMFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvbnRGYW1pbHlcIjogXCJNdWxpc2hcIixcclxuICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiM0NDQ0NDRcIixcclxuICAgICAgICAgICAgICAgICAgXCJiYWNrZ3JvdW5kXCI6IFwiI0ZGRkZGRlwiLFxyXG4gICAgICAgICAgICAgICAgICBcImNhcmV0Q29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJudWRnZURpc3BsYXlJbWFnZVwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uQmdDb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImRyb3Bkb3duT3B0aW9uQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImZvY3VzQm9yZGVyV2lkdGhcIjogXCIxcHhcIixcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0JvcmRlckNvbG9yXCI6IFwiI2ZmYmIwMFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvY3VzQmFja2dyb3VuZFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImZvY3VzQ29sb3JcIjogXCIjNDQ0NDQ0XCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uRm9udFdlaWdodFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1c1wiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImhvdmVyQm9yZGVyQ29sb3JcIjogXCIjREFEQURBXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiaG92ZXJCb3JkZXJXaWR0aFwiOiBcIjFweFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImhvdmVyQ29sb3JcIjogXCIjNDQ0NDQ0XCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZUNvbG9yXCI6IFwiI0VDRUNFQ1wiLFxyXG4gICAgICAgICAgICAgICAgICBcImRpc2FibGVCYWNrZ3JvdW5kXCI6IFwiI0VDRUNFQ1wiLFxyXG4gICAgICAgICAgICAgICAgICBcImVycm9yQm9yZGVyQ29sb3JcIjogXCIjREFEQURBXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJXaWR0aFwiOiBcIjFweFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImVycm9yQ29sb3JcIjogXCIjNDQ0NDQ0XCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiY3JlYXRlZERhdGVcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJwYWRkaW5nXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwibWFyZ2luXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiaXNNYXN0ZXJDc3NcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJjb250cm9sTWV0YUlkXCI6IFwiQUxMX0NPTV9HRU5fQ1RSTF9yYWRpb19ub21pbmVlR2VuZGVyX1YxXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiYm9yZGVyU3R5bGVcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJoZWlnaHRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJtaW5IZWlnaHRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJtYXhIZWlnaHRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJtaW5XaWR0aFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcIm1heFdpZHRoXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiY3NzQ2xhc3NcIjogbnVsbFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHF1ZXN0aW9uT2JqWyd2YWxpZGF0aW9ucyddKSkge1xyXG4gICAgICBsZXQgdmFsaWRhdGlvbk9iajogYW55ID0gSlNPTi5wYXJzZShxdWVzdGlvbk9ialsndmFsaWRhdGlvbnMnXSk7XHJcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbGlkYXRpb25PYmpbJ01pblZhbHVlJ10pKSB7XHJcbiAgICAgICAgbWluTGVuZ3RoID0gdmFsaWRhdGlvbk9ialsnTWluVmFsdWUnXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWxpZGF0aW9uT2JqWydNYXhWYWx1ZSddKSkge1xyXG4gICAgICAgIG1heExlbmd0aCA9IHZhbGlkYXRpb25PYmpbJ01heFZhbHVlJ107XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsaWRhdGlvbk9ialsnVHlwZSddKSkge1xyXG4gICAgICAgIHBhdHRlcm4gPSB2YWxpZGF0aW9uT2JqWydUeXBlJ10gPT09ICdOdW1lcmljJyA/ICdeWzAtOV0rJCcgOiBudWxsO1xyXG4gICAgICAgIHBhdHRlcm5NZXNzYWdlID1cclxuICAgICAgICAgIHZhbGlkYXRpb25PYmpbJ1R5cGUnXSA9PT0gJ051bWVyaWMnXHJcbiAgICAgICAgICAgID8gJ09ubHkgbnVtYmVycyBhcmUgYWxsb3dlZC4nXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuXHJcbiAgICAgICAgY29uZmlnRGF0YVsnaW5wdXRUeXBlJ10gPSB2YWxpZGF0aW9uT2JqWydUeXBlJ10gPT09ICdOdW1lcmljJyA/ICdudW1iZXInIDogJ3RleHQnO1xyXG4gICAgICAgIGlmICh2YWxpZGF0aW9uT2JqWydUeXBlJ10gPT09ICdOdW1lcmljJykge1xyXG4gICAgICAgICAgbWF4TGVuZ3RoID0gJzknLnJlcGVhdChOdW1iZXIobWF4TGVuZ3RoKSk7XHJcbiAgICAgICAgICBjb25maWdEYXRhWydtYXhWYWx1ZSddID0gbWF4TGVuZ3RoO1xyXG4gICAgICAgICAgY29uZmlnRGF0YVsnbWluVmFsdWUnXSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY29uZmlnRGF0YTogY29uZmlnRGF0YSxcclxuICAgICAgY29udHJvbFN0eWxlOiBjb250cm9sU3R5bGUsXHJcbiAgICAgIGNvbnRyb2xUeXBlOlxyXG4gICAgICAgIHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0ZSRUUgVEVYVCdcclxuICAgICAgICAgID8gJ3RleHQnXHJcbiAgICAgICAgICA6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ1JBRElPIEJVVFRPTicgfHxcclxuICAgICAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQURETU9SRSdcclxuICAgICAgICAgID8gJ3JhZGlvJ1xyXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgfHxcclxuICAgICAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nXHJcbiAgICAgICAgICA/ICdjaGVja2JveCdcclxuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInXHJcbiAgICAgICAgICA/ICdkYXRlJ1xyXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdEUk9QRE9XTidcclxuICAgICAgICAgID8gJ3NlbGVjdCdcclxuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnRE9DVVBMT0FEJ1xyXG4gICAgICAgICAgPyAnZmlsZSdcclxuICAgICAgICAgIDogJycsXHJcbiAgICAgIGZpZWxkTmFtZTogcXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10sXHJcbiAgICAgIGlzRGlzYWJsZTogZmFsc2UsXHJcbiAgICAgIGxhYmVsOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UZXh0J10sXHJcbiAgICAgIHBsYWNlSG9sZGVyOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UZXh0J10sXHJcbiAgICAgIHZhbGlkYXRvcnM6IHtcclxuICAgICAgICBpc1JlcXVpcmVkOiBxdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTicgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgbWluTGVuZ3RoLFxyXG4gICAgICAgIG1heExlbmd0aCxcclxuICAgICAgICBwYXR0ZXJuLFxyXG4gICAgICAgIHBhdHRlcm5NZXNzYWdlLFxyXG4gICAgICB9LFxyXG4gICAgICBjc3NDbGFzczogXCJtYi0yXCIsXHJcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgb3B0aW9uczogb3B0aW9uc09iaixcclxuICAgICAgaXNTaG93TGFiZWw6IHRydWUsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMocXVlc3Rpb24/OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKCdzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3MnLCB0aGlzLnF1ZXN0aW9uTGlzdClcclxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucXVlc3Rpb25MaXN0KSkge1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXSkpIHtcclxuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dRdWVzdGlvbihzaW5nbGVRdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBpc05vbmVJbkRvbWFpblZhbHVlczogYW55ID0gc2luZ2xlUXVlc3Rpb25bXHJcbiAgICAgICAgICAgICAgICAgICdkb21haW5WYWx1ZXMnXHJcbiAgICAgICAgICAgICAgICBdLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKHNpbmdsZU9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZU9ialsnZG9tYWluVWlWYWx1ZSddLnRvVXBwZXJDYXNlKCkgPT09ICdOT05FJ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlRG9tYWluVmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaXNOb25lSW5Eb21haW5WYWx1ZXMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc05vbmVJbkRvbWFpblZhbHVlc1swXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc05vbmVJbkRvbWFpblZhbHVlc1swXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBub25lIGlzIHNlbGVjdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHNpbmdsZURvbWFpblZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgYWxsIHNlbGVjdGVkIGNoZWNrYm94IHF1ZXN0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlLmRvbWFpblVpVmFsdWUudG9VcHBlckNhc2UoKSAhPT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdOT05FJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWUuaXNEaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZS5pc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGxldCBpc1NlY3Rpb25FeGlzdHNJbkJsb2NrZWRMaXN0OiBhbnkgPSB0aGlzLmlzQmxvY2tlZFF1ZXN0aW9uc0xpc3QuZmlsdGVyKChzaW5nbGVCbG9ja2VkT2JqOiBhbnkpID0+IHNpbmdsZUJsb2NrZWRPYmpbJ3NlY3Rpb25UaXRsZSddLnRyaW0oKSA9PT0gc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50cmltKCkpO1xyXG4gICAgICAgIHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gPSAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxyXG4gICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShpc1NlY3Rpb25FeGlzdHNJbkJsb2NrZWRMaXN0KSkge1xyXG4gICAgICAgIC8vICAgaWYgKGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3RbMF0uaXNCbG9ja2VkRm9yQ3VzdG9tZXJGbG93ICYmICF0aGlzLmxvYWRpbmdBZ2VudHBvcnRhbCkge1xyXG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgIGxldCBmaWx0ZXJlZEluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKTtcclxuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgIC8vICAgICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bZmlsdGVyZWRJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ3F1ZXN0aW9uSWQnXSk7XHJcbiAgICAgICAgLy8gICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikpIHtcclxuICAgICAgICAvLyAgICAgICAgIGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXTtcclxuICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgLy8gICAgIH0pO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICAgaWYgKChpc1NlY3Rpb25FeGlzdHNJbkJsb2NrZWRMaXN0WzBdLmlzQmxvY2tlZEZvckFnZW50RmxvdyB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhZ2VudENoYW5uZWwnKSA9PT0gJ0QyMCcgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWdlbnRDaGFubmVsJykgPT09ICdEMDUnIHx8IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FnZW50Q2hhbm5lbCcpID09PSAnRDA2JykgJiYgdGhpcy5sb2FkaW5nQWdlbnRwb3J0YWwpIHtcclxuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICBsZXQgZmlsdGVyZWRJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSk7XHJcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAvLyAgICAgICBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2ZpbHRlcmVkSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uWydxdWVzdGlvbklkJ10pO1xyXG4gICAgICAgIC8vICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pKSB7XHJcbiAgICAgICAgLy8gICAgICAgICBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ107XHJcbiAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgIC8vICAgICB9KTtcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgbGV0IGhpZGRlblF1ZXN0aW9uczogYW55ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgKHNpbmdsZVNlY3Rpb25PYmo6IGFueSkgPT4gIXNpbmdsZVNlY3Rpb25PYmpbJ3Nob3dTZWN0aW9uJ11cclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGlkZGVuUXVlc3Rpb25zKSkge1xyXG4gICAgICAgICAgaGlkZGVuUXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ3F1ZXN0aW9uSWQnXSk7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gICBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5xdWVzdGlvbkxpc3Quc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSk7XHJcblxyXG4gICAgY29uc29sZS5sb2coJ3F1ZXN0aW9ucyBsaXN0JywgdGhpcy5xdWVzdGlvbkxpc3QpO1xyXG4gICAgY29uc29sZS5sb2coJ3F1ZXN0aW9ucyBhbnN3ZXJzJywgdGhpcy5wZXJzb25Vd0Fuc3dlcnMpO1xyXG4gICAgdGhpcy5zYXZlUXVlc3Rpb25EZXRhaWxzKCk7XHJcbiAgfVxyXG5cclxuICBzaG93UXVlc3Rpb24oY3VycmVudFF1ZXN0aW9uOiBhbnkpIHtcclxuICAgIGxldCBzaG93UXVlc3Rpb246IGFueSA9IGZhbHNlO1xyXG4gICAgbGV0IHN1YlF1ZXN0aW9uczogYW55ID0gW107XHJcbiAgICAvLyBsZXQgY3VycmVudFNlY3Rpb25JbmRleDogYW55ID0gcXVlc3Rpb25zUmVzcG9uc2VbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHBlcnNvblJvbGUpXHJcbiAgICAvLyBsZXQgcm9sZSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtjdXJyZW50U2VjdGlvbkluZGV4XVsncm9sZSddXHJcblxyXG4gICAgdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWzBdLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAgIGxldCBpc1N1YlF1ZXN0aW9uT2JqZWN0OiBhbnkgPSBbXTtcclxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSkpIHtcclxuICAgICAgICBpc1N1YlF1ZXN0aW9uT2JqZWN0ID0gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXS5maWx0ZXIoXHJcbiAgICAgICAgICAocXVlc3Rpb25SZWxhdGlvbk9iajogYW55KSA9PlxyXG4gICAgICAgICAgICBxdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddID09PVxyXG4gICAgICAgICAgICBjdXJyZW50UXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlzU3ViUXVlc3Rpb25PYmplY3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHN1YlF1ZXN0aW9ucy5wdXNoKHNpbmdsZVF1ZXN0aW9uKTtcclxuICAgICAgICBpc1N1YlF1ZXN0aW9uT2JqZWN0LmZvckVhY2goKHNpbmdsZVN1YlF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgICAgICAgICAgIHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ10udG9TdHJpbmcoKVswXSAhPT0gJyEnICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gPT09XHJcbiAgICAgICAgICAgICAgICBzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddKSB8fFxyXG4gICAgICAgICAgICAoc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXS50b1N0cmluZygpWzBdID09PSAnIScgJiZcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgICApICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gIT09XHJcbiAgICAgICAgICAgICAgICBzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgIC5zcGxpdCgnIScpWzFdKSB8fFxyXG4gICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXHJcbiAgICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dPy5pbmNsdWRlcyhzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddKVxyXG4gICAgICAgICAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dPy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgLy8gICAoc2luZ2xlT2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgLy8gICAgIHNpbmdsZU9iaiA9PT1cclxuICAgICAgICAgICAgICAvLyAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXVxyXG4gICAgICAgICAgICAgIC8vICkubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgc2hvd1F1ZXN0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc3ViUXVlc3Rpb25zKSAmJlxyXG4gICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ10pXHJcbiAgICApIHtcclxuICAgICAgc2hvd1F1ZXN0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXSkgJiZcclxuICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICBjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXVsncGFyZW50UXVlc3Rpb25JZCddXHJcbiAgICAgICkgJiZcclxuICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICAgIGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbklkJ11cclxuICAgICAgICBdXHJcbiAgICAgICkgJiZcclxuICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ11bJ3BhcmVudFF1ZXN0aW9uSWQnXVxyXG4gICAgICBdID09PSBjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXVsncGFyZW50UXVlc3Rpb25BbnN3ZXInXVxyXG4gICAgKSB7XHJcbiAgICAgIHNob3dRdWVzdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoY3VycmVudFF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ05PRElTUExBWScpIHtcclxuICAgICAgc2hvd1F1ZXN0aW9uID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2hvd1F1ZXN0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVF1ZXN0aW9uRGV0YWlscygpIHtcclxuICAgIC8vIHJlbW92ZSBhbGwgY2hlY2tib3ggcXVlc3Rpb25zIHByZXNlbnQgaW4gdmFsdWVzXHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94KSkge1xyXG4gICAgICAvLyBsZXQgbGlmZUFzc3VyZWRrZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXSk7XHJcbiAgICAgIC8vIGxldCBwb2xpY3lBc3N1cmVkS2V5czogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddKTtcclxuICAgICAgLy8gbGV0IGxpZmVBc3N1cmVkT25lS2V5czogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkT25lJ10pO1xyXG4gICAgICAvLyBsZXQgbGlmZUFzc3VyZWRUd29LZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRUd28nXSk7XHJcbiAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzLmZvckVhY2goKHNpbmdsZUtleTogYW55KSA9PiB7XHJcbiAgICAgIC8vICAgaWYgKGlzTmFOKE51bWJlcihzaW5nbGVLZXkpKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3NpbmdsZUtleV0pICYmIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3guaW5jbHVkZXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bc2luZ2xlS2V5XSkpIHtcclxuICAgICAgLy8gICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSk7XHJcbiAgICAgIC8vIHBvbGljeUFzc3VyZWRLZXlzLmZvckVhY2goKHNpbmdsZUtleTogYW55KSA9PiB7XHJcbiAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bc2luZ2xlS2V5XSkgJiYgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5pbmNsdWRlcyh0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ11bc2luZ2xlS2V5XSkpIHtcclxuICAgICAgLy8gICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ11bc2luZ2xlS2V5XTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH0pO1xyXG4gICAgICAvLyBsaWZlQXNzdXJlZE9uZUtleXMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcclxuICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRPbmUnXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZE9uZSddW3NpbmdsZUtleV0pKSB7XHJcbiAgICAgIC8vICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddW3NpbmdsZUtleV07XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KTtcclxuICAgICAgLy8gbGlmZUFzc3VyZWRUd29LZXlzLmZvckVhY2goKHNpbmdsZUtleTogYW55KSA9PiB7XHJcbiAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkVHdvJ11bc2luZ2xlS2V5XSkgJiYgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5pbmNsdWRlcyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRUd28nXVtzaW5nbGVLZXldKSkge1xyXG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSk7XHJcbiAgICB9XHJcbiAgICAvLyBsZXQgaGVpZ2h0SW5JbmNoZXNPYmo6IGFueSA9IFtdO1xyXG4gICAgLy8gbGV0IGhlaWdodEluRmVldE9iajogYW55ID0gW107XHJcbiAgICAvLyBsZXQgaGVpZ2h0SW5DZW50aW1ldGVyT2JqOiBhbnkgPSBbXTtcclxuICAgIGxldCBpc1ZhbGlkOiBhbnkgPSB0cnVlO1xyXG4gICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmopICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10pKSB7XHJcbiAgICAvLyAgIGxldCBsYUluZGV4OiBhbnkgPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkJyk7XHJcbiAgICAvLyAgIGlmIChsYUluZGV4ICE9PSAtMSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2xhSW5kZXhdKSkge1xyXG4gICAgLy8gICAgIGhlaWdodEluSW5jaGVzT2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bbGFJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknKTtcclxuICAgIC8vICAgICBoZWlnaHRJbkZlZXRPYmogPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtsYUluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpO1xyXG4gICAgLy8gICAgIGhlaWdodEluQ2VudGltZXRlck9iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2xhSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIHZhbGlkYXRpb24gZm9yIG1lZGljYWwgYW5kIG5vbiBtZWRpY2FsIHF1ZXN0aW9ucyA6XHJcbiAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9iaikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmopICYmIGlzVmFsaWQpIHtcclxuICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3TWFzdGVyT2JqLmZvckVhY2goKHNpbmdsZVBlcnNvbk9iajogYW55LCBzaW5nbGVQZXJzb25JbmRleDogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXSkgJiYgaXNWYWxpZCkge1xyXG4gICAgLy8gICAgICAgbGV0IHJvbGU6IGFueSA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAnbGlmZUFzc3VyZWQnID8gXCJsaWZlIGFzc3VyZWRcIiA6IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAncG9saWN5SG9sZGVyJyA/IFwicG9saWN5IGhvbGRlclwiIDogc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdsaWZlQXNzdXJlZE9uZScgPyBcIkpvaW50IExpZmUgMVwiIDogc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdsaWZlQXNzdXJlZFR3bycgPyBcIkpvaW50IExpZmUgMlwiIDogXCJcIjtcclxuICAgIC8vICAgICAgIHNpbmdsZVBlcnNvbk9ialsncXVlc3Rpb25MaXN0J10uZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddKSAmJiBpc1ZhbGlkKSB7XHJcbiAgICAvLyAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSkgJiYgKHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT0gJ1RFTExfVVNfTU9SRScgfHwgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PSAnQkFTSUNfREVUQUlMUycpICYmIGlzVmFsaWQpIHtcclxuXHJcbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgZW50ZXJlZCBpbiBmZWV0XHJcbiAgICAvLyAgICAgICAgICAgICBpZiAodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdGRUVUJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXNPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXRPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9iaikgJiYgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10pIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10pKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlcyBmb3IgJyArIHJvbGVcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXMgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMScpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFT05FJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdKb2ludCBMaWZlIDInKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigxKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ0pPSU5UTElGRVRXTycpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBpbiBjbVxyXG4gICAgLy8gICAgICAgICAgICAgbGV0IGhlaWdodEluQ2VudGltZXRlck9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpO1xyXG4gICAgLy8gICAgICAgICAgICAgaWYgKHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J10pICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJiBpc1ZhbGlkKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIENNICcgKyByb2xlXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gQ00gJyArIHJvbGUsICdDbG9zZScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMScpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFT05FJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdKb2ludCBMaWZlIDInKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ0pPSU5UTElGRVRXTycpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6IGFueSkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgYmFzaWMgcXVlc3Rpb25zXHJcbiAgICAvLyAgICAgICAgICAgICBpZiAoXHJcbiAgICAvLyAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmopICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIGlzVmFsaWQgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnSU1BR0UgVEVYVCcgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFQnICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0RFQ0xBUkFUSU9OJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ2hhcmRDb3B5TGFuZycgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnUEFTU1BPUlRfVVBMT0FEJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEYnICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhUSScgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXS50b1N0cmluZygpID09PSAnTicgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgKChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0pKSB8fFxyXG4gICAgLy8gICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiYgIXRoaXMudmFsaWRhdGVDaGVja0JveEZpZWxkKHNpbmdsZVF1ZXN0aW9uT2JqLCBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkpKSAmJiBpc1ZhbGlkXHJcbiAgICAvLyAgICAgICAgICAgICApIHtcclxuICAgIC8vICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSBlbnRlciBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZSwgJ0Nsb3NlJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDEpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiam9pbnQgbGlmZSBjYXNlXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgaWYgKFxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdQQVNTUE9SVF9VUExPQUQnICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgIC8vICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgcmVkaXJlY3RcclxuICAgIC8vICAgICAgICAgICAgICkge1xyXG4gICAgLy8gICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9iajogYW55ID0gdGhpcy52YWxpZGF0aW9uU2VydmljZS5xdWVzdGlvbnNQYXNzcG9ydFVwbG9hZE9iai5maWx0ZXIoKHNpbmdsZU9iajogYW55KSA9PiAoc2luZ2xlT2JqWydwZXJzb25UeXBlJ10gPT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddICYmIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVPYmpbJ2Rtc0lkJ10pKSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmopKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KGAke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3F1ZXN0aW9uVHlwZSddfV8ke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3R5cGUnXX1fJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydwZXJzb25UeXBlJ119YCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHVwbG9hZCBwYXNzcG9ydCAnICsgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsnbGFiZWwnXSArICcgZG9jdW1lbnQgZm9yICcgKyByb2xlXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5vcGVuU25hY2tCYXIoJ1BsZWFzZSB1cGxvYWQgcGFzc3BvcnQgJyArIGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ2xhYmVsJ10gKyAnIGRvY3VtZW50IGZvciAnICsgcm9sZSwgJ0Nsb3NlJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImpvaW50IGxpZmUgY2FzZVwiKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGRlY2xhcmF0aW9uIHF1ZXN0aW9uc1xyXG4gICAgLy8gICAgICAgICAgICAgaWYgKGlzVmFsaWQgJiYgc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25UeXBlID09PSAnREVDTEFSQVRJT04nICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xyXG4gICAgLy8gICAgICAgICAgICAgKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2VycykgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgICAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXSkgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAoKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0gPT09ICdOJykgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkpKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSkge1xyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5pc01hbmRhdG9yeUZpZWxkICYmICFzYXZlZHJhZnQgJiYgcmVkaXJlY3QpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvbklkICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2Ugc2VsZWN0IGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIG1lZGljYWwgc3ViIHF1ZXN0aW9uc1xyXG4gICAgLy8gICAgICAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSkpIHtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZS5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgaWYgKFxyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgdGhpcy5zaG93U3ViUXVlc3Rpb24ocXVlc3Rpb24pICYmXHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgcXVlc3Rpb25bJ29wdGlvbmFsUXVlc3Rpb24nXS50b1N0cmluZygpID09PSAnTicgJiZcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICgocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtxdWVzdGlvblsncXVlc3Rpb25JZCddXSkpIHx8XHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgIChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiYgIXRoaXMudmFsaWRhdGVDaGVja0JveEZpZWxkKHF1ZXN0aW9uLCAnbGlmZUFzc3VyZWQnKSkpXHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5sb2FkaW5nQWdlbnRwb3J0YWwgJiYgIXNhdmVkcmFmdCkge1xyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgYW5zd2VyIGFsbCBtZWRpY2FsIHN1YiBxdWVzdGlvbnMgJyArIHF1ZXN0aW9uWydxdWVzdGlvbklkJ10gKyAnICcgKyBxdWVzdGlvblsncXVlc3Rpb25UZXh0J11cclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgLy8gICB9KTtcclxuICAgIC8vICAgICAgICAgICAgIC8vIH1cclxuICAgIC8vICAgICAgICAgICB9KTtcclxuXHJcbiAgICAvLyAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZmF0Y2ggZGVjbGFyYXRpb25cclxuICAgIC8vICAgICAgICAgICAvLyBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zKSAmJiBpc1ZhbGlkKXtcclxuICAgIC8vICAgICAgICAgICAvLyBzaW5nbGVTZWN0aW9uLnF1ZXN0aW9ucy5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajphbnkpID0+IHtcclxuICAgIC8vICAgICAgICAgICAvLyAgIGlmKGlzVmFsaWQgJiYgc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25UeXBlID09PSAnREVDTEFSQVRJT04nICYmIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTidcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgKXtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICBpZiggaXNWYWxpZCAmJlxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2VycykgJiZcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICAmJlxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAoKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0gPT09ICdOJykgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkpKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSkge1xyXG5cclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XHJcbiAgICAvLyAgICAgICAgICAgLy8gbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uSWQgKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAvLyAgIH1cclxuICAgIC8vICAgICAgICAgICAvLyB9KTtcclxuICAgIC8vICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICB9KTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGlmICgoaXNWYWxpZCB8fCBzYXZlZHJhZnQpIHx8IHRoaXMuc2hhcmVkU2VydmljZS5sb2FkaW5nQWdlbnRwb3J0YWwpIHtcclxuICAgIC8vIGlmIChpc1ZhbGlkKSB7XHJcbiAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICAvLyB0aGlzLmxvYWRlclNlcnZpY2UuZGlzcGxheSh0cnVlKTtcclxuICAgICAgLy8gbGV0IHJlcXVlc3Q6IGFueSA9IFtdO1xyXG4gICAgICBsZXQgbWFpblJlcU9iajogYW55ID0gW107XHJcbiAgICAgIGxldCBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zOiBhbnkgPSBbXTtcclxuICAgICAgbGV0IG1haW5SZXF1ZXN0Rm9yTGE6IGFueSA9IFtdO1xyXG4gICAgICBsZXQgbWFpblJlcXVlc3RGb3JQaDogYW55ID0gW107XHJcbiAgICAgIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvbk9ialsncXVlc3Rpb25MaXN0J10pKSB7XHJcbiAgICAgICAgLy8gc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBpZiAoXHJcbiAgICAgICAgLy8gICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10pICYmXHJcbiAgICAgICAgLy8gICAoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxyXG4gICAgICAgIC8vICAgICAnVEVMTF9VU19NT1JFJyB8fFxyXG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XHJcbiAgICAgICAgLy8gICAgICAgJ0JBU0lDX0RFVEFJTFMnKVxyXG4gICAgICAgIC8vICkge1xyXG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGluIGNtXHJcbiAgICAgICAgICBsZXQgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxyXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcgfHwgb2JqWydxdWVzdGlvbklkJ10gPT09IHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlc09iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcclxuICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRJJyB8fCBvYmpbJ3F1ZXN0aW9uSWQnXSA9PT0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgbGV0IGhlaWdodEluRmVldE9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcclxuICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyB8fCBvYmpbJ3F1ZXN0aW9uSWQnXSA9PT0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJyAmJlxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAvLyBwYXNzIGhlaWdodCBpbiBjbSBvYmpcclxuICAgICAgICAgICAgbGV0IGNtT2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxyXG4gICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoY21PYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2NtT2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XHJcbiAgICAgICAgICAgICAgICBwYXJzZUludChcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXHJcbiAgICAgICAgICAgICAgICApLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcclxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgYW5zd2VyOiBwYXJzZUludChcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXHJcbiAgICAgICAgICAgICAgICApLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBoZWlnaHQgaW4gaW5jaGVzXHJcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlczogYW55ID0gKFxyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSAqIDAuMzkzNzAxXHJcbiAgICAgICAgICAgICkudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgbGV0IGhlaWdodEluRmVldDogYW55ID1cclxuICAgICAgICAgICAgICBwYXJzZUZsb2F0KChoZWlnaHRJbkluY2hlcyAvIDEyKS50b1N0cmluZygpLnNwbGl0KCcuJylbMV0pID4gMTJcclxuICAgICAgICAgICAgICAgID8gKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvRml4ZWQoMSlcclxuICAgICAgICAgICAgICAgIDogKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgIGxldCBpbmNoZXNvYmpJbkFuc3dlcnNpbmRleDogYW55ID1cclxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ10gJiZcclxuICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChpbmNoZXNvYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2luY2hlc29iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxyXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQoaGVpZ2h0SW5JbmNoZXMpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcclxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KGhlaWdodEluSW5jaGVzKS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGhlaWdodCBpbiBmZWV0XHJcblxyXG4gICAgICAgICAgICBsZXQgZmVldE9iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gJiZcclxuICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChmZWV0T2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tmZWV0T2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XHJcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KGhlaWdodEluRmVldCkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlRmxvYXQoaGVpZ2h0SW5GZWV0KS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5GZWV0T2JqWzBdWydjbHVzdGVySWQnXSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdGRUVUJyAmJlxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXVxyXG4gICAgICAgICAgICApICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRPYmopKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzOiBhbnkgPVxyXG4gICAgICAgICAgICAgICAgcGFyc2VGbG9hdCh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10pICpcclxuICAgICAgICAgICAgICAgICAgMTIgK1xyXG4gICAgICAgICAgICAgICAgcGFyc2VGbG9hdCh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10pO1xyXG4gICAgICAgICAgICAgIGxldCBoZWlnaHRJbkNtOiBhbnkgPSAoXHJcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KGhlaWdodEluSW5jaGVzKSAvIDAuMzkzNzAxXHJcbiAgICAgICAgICAgICAgKS50b0ZpeGVkKDIpO1xyXG4gICAgICAgICAgICAgIGxldCBmZWV0T2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgaWYgKGZlZXRPYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbZmVldE9iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10udG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxyXG4gICAgICAgICAgICAgICAgICBdLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcclxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10udG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcclxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluRmVldE9ialswXVsnY2x1c3RlcklkJ10sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbGV0IGluY2hlc29iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIG9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgaWYgKGluY2hlc29iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tpbmNoZXNvYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cclxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoaGVpZ2h0SW5JbmNoZXMpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcclxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiBwYXJzZUludChoZWlnaHRJbkluY2hlcykudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcclxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluSW5jaGVzT2JqWzBdWydjbHVzdGVySWQnXSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBsZXQgY21PYmpJbkFuc3dlcnNpbmRleDogYW55ID1cclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAoY21PYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbY21PYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cclxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoaGVpZ2h0SW5DbSkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiBwYXJzZUludChoZWlnaHRJbkNtKS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydjbHVzdGVySWQnXSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10pXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgbGV0IGhlaWdodEluQ21BbnN3ZXJPYmplY3Q6IGFueSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgIGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ21BbnN3ZXJPYmplY3QpICYmXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNtQW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ11dID1cclxuICAgICAgICAgICAgICAgIGhlaWdodEluQ21BbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqKSAmJlxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ10pXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzQW5zd2VyT2JqZWN0OiBhbnkgPVxyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09XHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodEluSW5jaGVzT2JqWzBdWydxdWVzdGlvbklkJ11cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc0Fuc3dlck9iamVjdCkgJiZcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzQW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXV0gPVxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9iaikgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0QW5zd2VyT2JqZWN0OiBhbnkgPVxyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gPT09XHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0QW5zd2VyT2JqZWN0KSAmJlxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0QW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ11dID1cclxuICAgICAgICAgICAgICAgIGhlaWdodEluRmVldEFuc3dlck9iamVjdFswXVsnYW5zd2VyJ107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgbGV0IGlzTm9EaXNwbGF5UXVlc3Rpb25JblNlY3Rpb246IGFueSA9ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXVxyXG4gICAgICAgIClcclxuICAgICAgICAgID8gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChzaW5nbGVEYXRhOiBhbnkpID0+IHNpbmdsZURhdGFbJ3F1ZXN0aW9uVHlwZSddID09PSAnTk9ESVNQTEFZJ1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICA6IFtdO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIChzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddIHx8XHJcbiAgICAgICAgICAgIGlzTm9EaXNwbGF5UXVlc3Rpb25JblNlY3Rpb24ubGVuZ3RoID4gMCkgJiZcclxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ2hhcmRDb3B5TGFuZycpIHtcclxuICAgICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSA9ICdFbmdsaXNoJztcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgY2hlY2tlZE9wdGlvbnNBcnI6IGFueSA9IFtdO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10pKSB7XHJcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goXHJcbiAgICAgICAgICAgICAgICAoc2luZ2xlRG9tYWluVmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZE9wdGlvbnNBcnIucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjaGVja2VkT3B0aW9uc0FycilcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgLy8gZm9yIGNoZWNrYm94IHF1ZXN0aW9uXHJcblxyXG4gICAgICAgICAgICAgIGxldCBxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdDogYW55ID1cclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlQW5zd2VyT2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjogJycsXHJcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgb2JqWydhbnN3ZXInXSA9IGNoZWNrZWRPcHRpb25zQXJyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bXHJcbiAgICAgICAgICAgICAgICAgICdhbnN3ZXInXHJcbiAgICAgICAgICAgICAgICBdID0gY2hlY2tlZE9wdGlvbnNBcnIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAvLyBub24gY2hlY2tib3ggcXVlc3Rpb25cclxuICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3Q6IGFueSA9XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgKHNpbmdsZUFuc3dlck9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUFuc3dlck9ialsncXVlc3Rpb25JZCddID09PVxyXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUFuc3dlck9ialsncGVyc29uVVdJZCddID09PVxyXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGlmIChxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6XHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInXHJcbiAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0sXHJcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKG9iaik7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3RdW1xyXG4gICAgICAgICAgICAgICAgICAnYW5zd2VyJ1xyXG4gICAgICAgICAgICAgICAgXSA9XHJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJ1xyXG4gICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaWYoc2luZ2xlUXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pKSB7XHJcbiAgICAgICAgICAgIC8vICAgbGV0IHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0IDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoKHNpbmdsZUFuc3dlck9iaiA6IGFueSkgPT4gKHNpbmdsZUFuc3dlck9ialsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddICAmJiBzaW5nbGVBbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddKSlcclxuICAgICAgICAgICAgLy8gICBpZihxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgLy8gICAgIGxldCBvYmo6IGFueSA9IHtcclxuICAgICAgICAgICAgLy8gICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAvLyAgICAgICBxdWVzdGlvbklkOiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAvLyAgICAgICBhbnN3ZXI6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJyA/IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKG5ldyBEYXRlKHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSwgJ3l5eXktTU0tZGQnKSA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dLFxyXG4gICAgICAgICAgICAvLyAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAvLyAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXHJcbiAgICAgICAgICAgIC8vICAgICAgIGNsdXN0ZXJJZDogc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAvLyAgICAgfTtcclxuICAgICAgICAgICAgLy8gICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaChvYmopO1xyXG4gICAgICAgICAgICAvLyAgICAgaWYoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgIGxldCBjaGVja2VkT3B0aW9uc0FyciA6IGFueSA9IFtdO1xyXG4gICAgICAgICAgICAvLyAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc2luZ2xlRG9tYWluVmFsdWUgOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNoZWNrZWRPcHRpb25zQXJyLnB1c2goc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXSk7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgICAgb2JqWydhbnN3ZXInXSA9IGNoZWNrZWRPcHRpb25zQXJyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gICAgIC8vIG9iamVjdCBhbHJlYWR5IHRoZXJlIHNvIG92ZXIgcmlkZSB0aGUgbmV3IGFuc3dlclxyXG4gICAgICAgICAgICAvLyAgICAgaWYoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgIGxldCBjaGVja2VkT3B0aW9uc0FyciA6IGFueSA9IFtdO1xyXG4gICAgICAgICAgICAvLyAgICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaCgoc2luZ2xlRG9tYWluVmFsdWUgOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNoZWNrZWRPcHRpb25zQXJyLnB1c2goc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXSk7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bJ2Fuc3dlciddID0gY2hlY2tlZE9wdGlvbnNBcnIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgLy8gICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3RdWydhbnN3ZXInXSA9ICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUicgPyB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShuZXcgRGF0ZSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSksICd5eXl5LU1NLWRkJykgOiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXTtcclxuICAgICAgICAgICAgLy8gICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgICAgLy8gaWYgKHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAncmV0RmluYW5jRWxnYmwnKSB7XHJcbiAgICAgICAgICAgIC8vICAgbGV0IGZpbmFuY2lhbEVsaWdpYmlsaXR5QW5zd2VySW5kZXg6IGFueSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KChzaW5nbGVBbnN3ZXJPYmo6IGFueSkgPT4gKHNpbmdsZUFuc3dlck9ialsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddICYmIHNpbmdsZUFuc3dlck9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10pKVxyXG4gICAgICAgICAgICAvLyAgIGxldCBvYmo6IGFueSA9IHtcclxuICAgICAgICAgICAgLy8gICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcclxuICAgICAgICAgICAgLy8gICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgIC8vICAgICBhbnN3ZXI6IHRoaXMuc2hhcmVkU2VydmljZS5maW5hbmNpYWxFbGlnaWJpbGl0eSxcclxuICAgICAgICAgICAgLy8gICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXHJcbiAgICAgICAgICAgIC8vICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXHJcbiAgICAgICAgICAgIC8vICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcclxuICAgICAgICAgICAgLy8gICB9O1xyXG4gICAgICAgICAgICAvLyAgIGlmIChmaW5hbmNpYWxFbGlnaWJpbGl0eUFuc3dlckluZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgICAvLyAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKG9iaik7XHJcbiAgICAgICAgICAgIC8vICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbZmluYW5jaWFsRWxpZ2liaWxpdHlBbnN3ZXJJbmRleF1bJ2Fuc3dlciddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmZpbmFuY2lhbEVsaWdpYmlsaXR5O1xyXG4gICAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGxldCBkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3Q6IGFueSA9IFtcclxuICAgICAgICAuLi5uZXcgU2V0KFxyXG4gICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5tYXAoKGl0ZW06IGFueSkgPT5cclxuICAgICAgICAgICAgaXRlbS5wZXJzb25VV0lkLnRvU3RyaW5nKClcclxuICAgICAgICAgIClcclxuICAgICAgICApLFxyXG4gICAgICBdO1xyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3QpKSB7XHJcbiAgICAgICAgbWFpblJlcXVlc3RGb3JMYSA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgKHNpbmdsZUFuc3dlcjogYW55KSA9PlxyXG4gICAgICAgICAgICBzaW5nbGVBbnN3ZXJbJ3BlcnNvblVXSWQnXSA9PT0gZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0WzBdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0Lmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAgICAgbWFpblJlcXVlc3RGb3JQaCA9IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoc2luZ2xlQW5zd2VyOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyWydwZXJzb25VV0lkJ10gPT09IGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdFsxXVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHNhdmVSZXF1ZXN0c0FycmF5OiBhbnkgPSBbXTtcclxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkobWFpblJlcXVlc3RGb3JMYSkpIHtcclxuICAgICAgICB0aGlzLnNhdmVRdWVzdGlvblJlcXVlc3RMYSA9IG1haW5SZXF1ZXN0Rm9yTGE7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgICAgICdzYXZlUXVlc3Rpb25SZXF1ZXN0TGEnLFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWFpblJlcXVlc3RGb3JMYSlcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIHNhdmVSZXF1ZXN0c0FycmF5LnB1c2godGhpcy5jb21tb25TZXJ2aWNlLnNhdmVBbnN3ZXJzKG1haW5SZXF1ZXN0Rm9yTGEsICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XHJcbiAgICAgICAgLy8gc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JMYSwgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQpICYmIHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpID8gdHJ1ZSA6ICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkobWFpblJlcXVlc3RGb3JQaCkpIHtcclxuICAgICAgICB0aGlzLnNhdmVRdWVzdGlvblJlcXVlc3RQaCA9IG1haW5SZXF1ZXN0Rm9yUGg7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgICAgICdzYXZlUXVlc3Rpb25SZXF1ZXN0UGgnLFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkobWFpblJlcXVlc3RGb3JQaClcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vICBzYXZlUmVxdWVzdHNBcnJheS5wdXNoKHRoaXMuY29tbW9uU2VydmljZS5zYXZlQW5zd2VycyhtYWluUmVxdWVzdEZvclBoLCAhY2FsbGVkRnJvbUNvbmZpcm1hdGlvbikpO1xyXG4gICAgICAgIC8vIHNhdmVSZXF1ZXN0c0FycmF5LnB1c2godGhpcy5jb21tb25TZXJ2aWNlLnNhdmVBbnN3ZXJzKG1haW5SZXF1ZXN0Rm9yUGgsICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50KSAmJiB0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50ICYmIHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKSA/IHRydWUgOiAhY2FsbGVkRnJvbUNvbmZpcm1hdGlvbikpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnZhbGlkYXRlTWVkaWNhbFF1ZXN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29va2llVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNvb2tpZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO1xyXG4gICAgbGV0IHRva2VuTmFtZSA9ICcnO1xyXG4gICAgbGV0IHRva2VuVmFsdWUgPSAnJztcclxuICAgIGNvbnN0IGluZGV4MiA9IDI7XHJcbiAgICBjb29raWUuZm9yRWFjaCgoZGF0YSkgPT4ge1xyXG4gICAgICBpZiAoZGF0YS5zcGxpdCgnPScpWzBdLmluY2x1ZGVzKG5hbWUpICYmICEhZGF0YS5zcGxpdCgnPScpWzFdKSB7XHJcbiAgICAgICAgdG9rZW5OYW1lID0gZGF0YS5zcGxpdCgnPScpWzBdLnRyaW0oKTtcclxuICAgICAgICB0b2tlblZhbHVlID0gZGF0YS5zcGxpdCgnPScpWzFdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICBuYW1lID09PSAnbGluaycgJiZcclxuICAgICAgICBkYXRhLnNwbGl0KCc9JylbMF0uaW5jbHVkZXMobmFtZSkgJiZcclxuICAgICAgICBkYXRhLnNwbGl0KCc9JylbaW5kZXgyXSAhPT0gbnVsbCAmJlxyXG4gICAgICAgIGRhdGEuc3BsaXQoJz0nKVtpbmRleDJdICE9PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgdG9rZW5WYWx1ZSA9IHRva2VuVmFsdWUgKyAnPScgKyBkYXRhLnNwbGl0KCc9JylbaW5kZXgyXTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdG9rZW5WYWx1ZTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlTWVkaWNhbFF1ZXN0aW9ucygpIHtcclxuICAgIGxldCBpc1ZhbGlkOiBhbnkgPSB0cnVlO1xyXG4gICAgdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddKSAmJiBpc1ZhbGlkKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddKSAmJlxyXG4gICAgICAgICAgKHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cclxuICAgICAgICAgICAgJ1RFTExfVVNfTU9SRScgfHxcclxuICAgICAgICAgICAgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxyXG4gICAgICAgICAgICAgICdCQVNJQ19ERVRBSUxTJykgJiZcclxuICAgICAgICAgIGlzVmFsaWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBlbnRlcmVkIGluIGZlZXRcclxuICAgICAgICAgIGlmICh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0ZFRVQnKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlc09iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcclxuICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXRPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkluY2hlc09iaikgJiZcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9iaikgJiZcclxuICAgICAgICAgICAgICAodGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddXHJcbiAgICAgICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cclxuICAgICAgICAgICAgICAgICkpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAvLyBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xyXG4gICAgICAgICAgICAgIC8vIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcclxuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAgICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XHJcbiAgICAgICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcclxuICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgLy8gbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xyXG4gICAgICAgICAgICAgIC8vIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAgICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XHJcbiAgICAgICAgICAgICAgLy8gICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgICAvLyAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzIGZvciAnICsgcm9sZVxyXG4gICAgICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXMgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgICAgICAvLyByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgaW4gY21cclxuICAgICAgICAgIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXHJcbiAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdDTScgJiZcclxuICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVxyXG4gICAgICAgICAgICApICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJlxyXG4gICAgICAgICAgICBpc1ZhbGlkXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmo6IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgYmFzaWMgcXVlc3Rpb25zXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmopICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAgICAgICAgIGlzVmFsaWQgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnSU1BR0UgVEVYVCcgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFQnICYmXHJcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0RFQ0xBUkFUSU9OJyAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ2hhcmRDb3B5TGFuZycgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnUEFTU1BPUlRfVVBMT0FEJyAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVEYnICYmXHJcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhUSScgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXS50b1N0cmluZygpID09PSAnTicgJiZcclxuICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dXHJcbiAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgLy8gKChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgLy8gICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dKSkgfHxcclxuICAgICAgICAgICAgLy8gICAoc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmICF0aGlzLnZhbGlkYXRlQ2hlY2tCb3hGaWVsZChzaW5nbGVRdWVzdGlvbk9iaiwgc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pKSlcclxuICAgICAgICAgICAgaXNWYWxpZFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBpZiAoXHJcbiAgICAgICAgICAvLyAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcclxuICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nICYmXHJcbiAgICAgICAgICAvLyAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxyXG4gICAgICAgICAgLy8gKSB7XHJcbiAgICAgICAgICAvLyAgIGxldCBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqOiBhbnkgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnF1ZXN0aW9uc1Bhc3Nwb3J0VXBsb2FkT2JqLmZpbHRlcigoc2luZ2xlT2JqOiBhbnkpID0+IChzaW5nbGVPYmpbJ3BlcnNvblR5cGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gJiYgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZU9ialsnZG1zSWQnXSkpKTtcclxuICAgICAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9iaikpIHtcclxuICAgICAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQoYCR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncXVlc3Rpb25UeXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsndHlwZSddfV8ke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3BlcnNvblR5cGUnXX1gKTtcclxuICAgICAgICAgIC8vICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xyXG4gICAgICAgICAgLy8gICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgICAgICAgLy8gICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAvLyAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGVcclxuICAgICAgICAgIC8vICAgICAgIH0pO1xyXG4gICAgICAgICAgLy8gICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIHVwbG9hZCBwYXNzcG9ydCAnICsgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsnbGFiZWwnXSArICcgZG9jdW1lbnQgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcclxuICAgICAgICAgIC8vICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xyXG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgICAgICAgIC8vICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgICAgICAgIC8vICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgIGNvbnNvbGUubG9nKFwiam9pbnQgbGlmZSBjYXNlXCIpO1xyXG4gICAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgIC8vICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgLy8gICB9XHJcblxyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZGVjbGFyYXRpb24gcXVlc3Rpb25zXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGlzVmFsaWQgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25UeXBlID09PSAnREVDTEFSQVRJT04nICYmXHJcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10pICYmXHJcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAoaXNWYWxpZCAmJlxyXG4gICAgICAgICAgICAgICAgLy8gIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV0pICYmXHJcbiAgICAgICAgICAgICAgICAvLyAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pICYmXHJcbiAgICAgICAgICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdKSAmJlxyXG4gICAgICAgICAgICAgICAgLy8gICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKSAmJlxyXG4gICAgICAgICAgICAgICAgLy8gICAoKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dID09PVxyXG4gICAgICAgICAgICAgICAgICAnTicpIHx8XHJcbiAgICAgICAgICAgICAgIXRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ11dIHx8XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgLy8gKVxyXG4gICAgICAgICAgICAgIC8vIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIG1lZGljYWwgc3ViIHF1ZXN0aW9uc1xyXG4gICAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSkpIHtcclxuICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZS5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyAgICAgaWYgKFxyXG4gICAgICAgICAgLy8gICAgICAgdGhpcy5zaG93U3ViUXVlc3Rpb24ocXVlc3Rpb24pICYmXHJcbiAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxyXG4gICAgICAgICAgLy8gICAgICAgcXVlc3Rpb25bJ29wdGlvbmFsUXVlc3Rpb24nXS50b1N0cmluZygpID09PSAnTicgJiZcclxuICAgICAgICAgIC8vICAgICAgICgocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXHJcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtxdWVzdGlvblsncXVlc3Rpb25JZCddXSkpIHx8XHJcbiAgICAgICAgICAvLyAgICAgICAgIChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiYgIXRoaXMudmFsaWRhdGVDaGVja0JveEZpZWxkKHF1ZXN0aW9uLCAnbGlmZUFzc3VyZWQnKSkpXHJcbiAgICAgICAgICAvLyAgICAgKSB7XHJcbiAgICAgICAgICAvLyAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5sb2FkaW5nQWdlbnRwb3J0YWwgJiYgIXNhdmVkcmFmdCkge1xyXG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgLy8gICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgYW5zd2VyIGFsbCBtZWRpY2FsIHN1YiBxdWVzdGlvbnMgJyArIHF1ZXN0aW9uWydxdWVzdGlvbklkJ10gKyAnICcgKyBxdWVzdGlvblsncXVlc3Rpb25UZXh0J11cclxuICAgICAgICAgIC8vICAgICAgICAgfSk7XHJcbiAgICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgLy8gICB9KTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZmF0Y2ggZGVjbGFyYXRpb25cclxuICAgICAgICAvLyBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zKSAmJiBpc1ZhbGlkKXtcclxuICAgICAgICAvLyBzaW5nbGVTZWN0aW9uLnF1ZXN0aW9ucy5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajphbnkpID0+IHtcclxuICAgICAgICAvLyAgIGlmKGlzVmFsaWQgJiYgc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25UeXBlID09PSAnREVDTEFSQVRJT04nICYmIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxyXG4gICAgICAgIC8vICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcclxuICAgICAgICAvLyAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTidcclxuICAgICAgICAvLyAgICAgKXtcclxuICAgICAgICAvLyAgICAgICBpZiggaXNWYWxpZCAmJlxyXG4gICAgICAgIC8vICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV0pICYmXHJcbiAgICAgICAgLy8gICAgICAgICAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pICYmXHJcbiAgICAgICAgLy8gICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdKSAmJlxyXG4gICAgICAgIC8vICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKSAgJiZcclxuICAgICAgICAvLyAgICAgICAgICAgKCghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXVtzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXHJcbiAgICAgICAgLy8gICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXVtzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0gPT09ICdOJykgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXVtzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pKSkgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkpIHtcclxuXHJcbiAgICAgICAgLy8gICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcclxuICAgICAgICAvLyAgICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5sb2FkaW5nQWdlbnRwb3J0YWwgJiYgIXNhdmVkcmFmdCkge1xyXG4gICAgICAgIC8vIGxldCBxdWVzdGlvbklkOiBhbnkgPSBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvbklkICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAgICAgLy8gICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XHJcbiAgICAgICAgLy8gICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xyXG4gICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgIC8vICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2Ugc2VsZWN0IGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlXHJcbiAgICAgICAgLy8gICAgICAgICAgIH0pO1xyXG4gICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIC8vICAgICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdpc01lZGljYWxRdWVzdGlvbnNWYWxpZCcsIGlzVmFsaWQpO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVDaGFuZ2VGb3JNdWx0aXNlbGVjdChxdWVzdGlvbiA6IGFueSkge1xyXG4gICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTGlmZU1lZGlDbmR0bicgfHwgcXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdNZWRpQ25kdG4nICkge1xyXG4gICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXS5sZW5ndGggPiAwXHJcblxyXG4gICAgICAvLyBpZiBub25lIGlzIHNlbGVjdGVkIHRoZW4gcmVtb3ZlIGFsbCBhbmQgY2FsbCBBUElcclxuICAgICAgbGV0IGlzTm9uZVNlbGVjdGVkIDogYW55ID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0uZmluZEluZGV4KChzaW5nbGVPYmogOmFueSkgPT4gc2luZ2xlT2JqWyd2YWx1ZSddID09PSAnTm9NZWRIaXN0cnknKTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICBpc05vbmVTZWxlY3RlZCAhPT0gIC0xXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dID0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXS5maWx0ZXIoKHNpbmdsZU9iaiA6IGFueSkgPT4gc2luZ2xlT2JqWyd2YWx1ZSddID09PSAnTm9NZWRIaXN0cnknKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlID0gW107XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkxpc3RcclxuICAgICAgICApKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkxpc3QgPSB0aGlzLnF1ZXN0aW9uTGlzdC5maWx0ZXIoKHNpbmdsZVNlY3Rpb246IGFueSkgPT4gKCh0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkgfHwgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkgJiYgIXNpbmdsZVNlY3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pKSApKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBsZXQgY3VycmVudFNlY3Rpb25JbmRleDogYW55ID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KFxyXG4gICAgICAvLyAgIChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT5cclxuICAgICAgLy8gICAgIHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PVxyXG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3TWFzdGVyT2JqW3NpbmdsZVBlcnNvbkluZGV4XVsncm9sZSddXHJcbiAgICAgIC8vICk7XHJcbiAgICAgIC8vIHJlbW92ZSBtZWRpY2FsIHN1YiBxdWVzdGlvbnMgZnJvbSBxdWVzdGlvbnMgcmVzcG9uc2UgbGlzdFxyXG4gICAgICAvLyBpZiAoXHJcbiAgICAgIC8vICAgY3VycmVudFNlY3Rpb25JbmRleCAhPT0gdGhpcy5udW1iZXJDb25zdGFudC5udW1iZXJtaW51czEgJiZcclxuICAgICAgLy8gICAhdGhpcy5zaGFyZWRjaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bXHJcbiAgICAgIC8vICAgICAgIGN1cnJlbnRTZWN0aW9uSW5kZXhcclxuICAgICAgLy8gICAgIF1cclxuICAgICAgLy8gICApICYmXHJcbiAgICAgIC8vICAgIXRoaXMuc2hhcmVkY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW1xyXG4gICAgICAvLyAgICAgICBjdXJyZW50U2VjdGlvbkluZGV4XHJcbiAgICAgIC8vICAgICBdWydxdWVzdGlvbkxpc3QnXVxyXG4gICAgICAvLyAgIClcclxuICAgICAgLy8gKSB7XHJcbiAgICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bXHJcbiAgICAgICAgLy8gICBjdXJyZW50U2VjdGlvbkluZGV4XHJcbiAgICAgICAgLy8gXVsncXVlc3Rpb25MaXN0J10gPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialtcclxuICAgICAgICAvLyAgICdxdWVzdGlvbnNSZXNwb25zZSdcclxuICAgICAgICAvLyBdW2N1cnJlbnRTZWN0aW9uSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoXHJcbiAgICAgICAgLy8gICAoc2luZ2xlTGlzdEl0ZW06IGFueSkgPT5cclxuICAgICAgICAvLyAgICAgdGhpcy5zaGFyZWRjaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgIC8vICAgICAgIHNpbmdsZUxpc3RJdGVtWydpc01lZGljYWxTdWJRdWVzdGlvbiddXHJcbiAgICAgICAgLy8gICAgICkgfHxcclxuICAgICAgICAvLyAgICAgKCF0aGlzLnNoYXJlZGNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgLy8gICAgICAgc2luZ2xlTGlzdEl0ZW1bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ11cclxuICAgICAgICAvLyAgICAgKSAmJlxyXG4gICAgICAgIC8vICAgICAgICFzaW5nbGVMaXN0SXRlbVsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSlcclxuICAgICAgICAvLyApO1xyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddWzBdW1xyXG4gICAgICAvLyAgICdxdWVzdGlvbkxpc3QnXHJcbiAgICAgIC8vIF0uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgIGlmIChzaW5nbGVRdWVzdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkge1xyXG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bXHJcbiAgICAgIC8vICAgICAgICdxdWVzdGlvbkxpc3QnXHJcbiAgICAgIC8vICAgICBdLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KTtcclxuXHJcbiAgICAgIC8vIHRoaXMucXVlc3Rpb25MaXN0ID0gdGhpcy5xdWVzdGlvbkxpc3QuZmlsdGVyKChzaW5nbGVTZWN0aW9uIDogYW55KSA9PiAoIXNpbmdsZVNlY3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10gfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pKSk7XHJcbiAgICAgIC8vIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZU1hc3Rlck9iajogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgLy8gICBpZiAoc2luZ2xlTWFzdGVyT2JqWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSB7XHJcbiAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmpbc2luZ2xlUGVyc29uSW5kZXhdW1xyXG4gICAgICAvLyAgICAgICAncXVlc3Rpb25MaXN0J1xyXG4gICAgICAvLyAgICAgXVsncXVlc3Rpb25zJ10gPSBbXTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH0pO1xyXG4gICAgICAvLyB0aGlzLmxvYWRlci5kaXNwbGF5KHRydWUpO1xyXG5cclxuICAgICAgbGV0IHNlbGVjdGVkRGlzZWFzZXMgOiBhbnkgPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXS5tYXAoKHNpbmdsZURpc2Vhc2VPYmogOiBhbnkpID0+IHNpbmdsZURpc2Vhc2VPYmpbJ3ZhbHVlJ10pLnRvU3RyaW5nKCk7XHJcbiAgICAgIC8vIGxldCByZXF1ZXN0OiBhbnkgPSBKU09OLnBhcnNlKFxyXG4gICAgICAvLyAgIEpTT04uc3RyaW5naWZ5KFxyXG4gICAgICAvLyAgICAgdGhpcy5mZXRjaFN1YlF1ZXN0aW9uc0xpc3RbXHJcbiAgICAgIC8vICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9ialtzaW5nbGVQZXJzb25JbmRleF1bJ3JvbGUnXVxyXG4gICAgICAvLyAgICAgXS50b1N0cmluZygpXHJcbiAgICAgIC8vICAgKVxyXG4gICAgICAvLyApO1xyXG4gICAgICBpZihxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddLmhhc093blByb3BlcnR5KCdhcGlVcmwnKSAmJiBxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddLmhhc093blByb3BlcnR5KCd1cmxQYXJhbUZvckRpc2Vhc2UnKSAmJiBxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddLmhhc093blByb3BlcnR5KCd1cmxQYXJhbUZvclBlcnNvblV3SWQnKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ11bJ2FwaVVybCddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ11bJ3VybFBhcmFtRm9yRGlzZWFzZSddKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ11bJ3VybFBhcmFtRm9yUGVyc29uVXdJZCddKSkge1xyXG4gICAgICAgIHRoaXMubWFzdGVyU2VydmljZS5nZXRTdWJRdWVzdGlvbnMocXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXSwgc2VsZWN0ZWREaXNlYXNlcywgdGhpcy5wZXJzb25Vd0lkKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMubG9hZGVyLmRpc3BsYXkoZmFsc2UpO1xyXG4gICAgICAgICAgICBsZXQgZGlzdGluY3RTdGVwczogYW55ID0gW107XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgZGF0YS5mb3JFYWNoKChzdWJRdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzdWJRdWVzdGlvbltcclxuICAgICAgICAgICAgICAgICAgJ2RvbWFpblZhbHVlcydcclxuICAgICAgICAgICAgICAgIF0gPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsnZG9tYWluVmFsdWVzJ11bXHJcbiAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5OYW1lJ11cclxuICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddXHJcbiAgICAgICAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSlcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11cclxuICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXHJcbiAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXVxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0UXVlc3Rpb25PYmplY3Q6IGFueSA9IGRhdGEuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0WydxdWVzdGlvbklkJ10gPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsnbmV4dFF1ZXN0aW9uSWQnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0UXVlc3Rpb25PYmplY3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0UXVlc3Rpb25PYmplY3RbMF1bJ2Fuc3dlcmVkVmFsdWUnXSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsncGFyZW50UXVlc3Rpb25WYWx1ZSddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGlmIChcclxuICAgICAgICAgICAgICAgIC8vICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgIC8vICAgICBzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ11cclxuICAgICAgICAgICAgICAgIC8vICAgKVxyXG4gICAgICAgICAgICAgICAgLy8gKSB7XHJcbiAgICAgICAgICAgICAgICAvLyAgIHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzdWJEb21haW46IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5zdWJNZWRpY2FsUXVlc3Rpb25zRG9tYWluSW50ZXJuYWxWYWx1ZXNMaXN0LnB1c2goXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgICBzdWJEb21haW5bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgLy8gICAgICk7XHJcbiAgICAgICAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFkaXN0aW5jdFN0ZXBzLmluY2x1ZGVzKHN1YlF1ZXN0aW9uWydjbHVzdGVySWQnXSkpIHtcclxuICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5wdXNoKHN1YlF1ZXN0aW9uWydjbHVzdGVySWQnXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZmllbGQnXSA9IHRoaXMuZ2V0RmllbGQoc3ViUXVlc3Rpb24pO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIGRhdGEuc29ydChcclxuICAgICAgICAgICAgICAgIChhOiBhbnksIGI6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgYVsnc3RlcCddIC0gYlsnc3RlcCddIHx8IGFbJ2Rpc3BsYXlPcmRlciddIC0gYlsnZGlzcGxheU9yZGVyJ11cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMuZm9yRWFjaCgoc3RlcHM6IGFueSwgaW5kOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE9iajogYW55ID0gZGF0YS5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10gPT09IHN0ZXBzXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICAgICAgICBzdGVwOiAxMDAwICsgaW5kLFxyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbnM6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopXHJcbiAgICAgICAgICAgICAgICAgICAgPyBmaWx0ZXJlZE9ialxyXG4gICAgICAgICAgICAgICAgICAgIDogW10sXHJcbiAgICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkT2JqXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqWzBdWyd0aXRsZSddXHJcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogdGhpcy5wZXJzb25Vd0lkLFxyXG4gICAgICAgICAgICAgICAgICBpc01lZGljYWxTdWJRdWVzdGlvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgc2hvd1NlY3Rpb246IHRydWVcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdC5wdXNoKG9iaik7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgPSBkYXRhO1xyXG4gICAgICAgICAgICAgIC8vIG1lcmdlIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyBpbnRvIHBlcnNvbiB1dyBtYWluIHF1ZXN0aW9ucyByZXNwb25zZSAocmVxdWlyZWQgZm9yIHNob3cgcXVlc3Rpb24gZnVuY3Rpb24gdG8gd29yaylcclxuICAgICAgICAgICAgICAvLyBjbGVhcmluZyBvbiB0b3AgYmVmb3JlIGFwaSBjYWxsXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWzBdWydxdWVzdGlvbkxpc3QnXSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialswXVsncXVlc3Rpb25MaXN0J10uY29uY2F0KHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMubG9hZGVyLmRpc3BsYXkoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVxyXG4gIH1cclxuICBvbkRvY3VtZW50RmlsZVByZXZpZXcoZXZlbnQ6IHsgZmlsZTogRmlsZSwgaW5kZXg6IG51bWJlciB9KTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZygnUHJldmlldyByZXF1ZXN0ZWQgZm9yOicsIGV2ZW50LmZpbGUubmFtZSk7XHJcbiAgICB0aGlzLnByZXZpZXdGaWxlID0gZXZlbnQuZmlsZTtcclxuICB9XHJcblxyXG4gIGNsb3NlRmlsZVByZXZpZXcoKTogdm9pZCB7XHJcbiAgICB0aGlzLnByZXZpZXdGaWxlID0gbnVsbDtcclxuICB9XHJcblxyXG4gIGNoZWNrQW5kVXBkYXRlSGVpZ2h0VW5pdCgpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J1xyXG4gICAgICAgIF0gPT09ICdGRUVUJyAmJlxyXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCdcclxuICAgICAgICAgIF1cclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCBoZWlnaHRJbkluY2hlczogYW55ID0gKFxyXG4gICAgICAgICAgcGFyc2VGbG9hdChcclxuICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCdcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgKSAqIDAuMzkzNzAxXHJcbiAgICAgICAgKS50b0ZpeGVkKDIpO1xyXG4gICAgICAgIGxldCBoZWlnaHRJbkZlZXQ6IGFueSA9XHJcbiAgICAgICAgICBwYXJzZUZsb2F0KFxyXG4gICAgICAgICAgICAoaGVpZ2h0SW5JbmNoZXMgLyAxMilcclxuICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgIC5zcGxpdCgnLicpWzFdXHJcbiAgICAgICAgICApID4gMTJcclxuICAgICAgICAgICAgPyAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgxKVxyXG4gICAgICAgICAgICA6IChoZWlnaHRJbkluY2hlcyAvIDEyKS50b0ZpeGVkKDIpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgIGhlaWdodEluRmVldC50b1N0cmluZygpLnNwbGl0KCcuJylbMF1cclxuICAgICAgICAgIClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J1xyXG4gICAgICAgICAgXSA9IGhlaWdodEluRmVldC50b1N0cmluZygpLnNwbGl0KCcuJylbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgIGhlaWdodEluRmVldC50b1N0cmluZygpLnNwbGl0KCcuJylbMV1cclxuICAgICAgICAgIClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J1xyXG4gICAgICAgICAgXSA9XHJcbiAgICAgICAgICAgIGhlaWdodEluRmVldC50b1N0cmluZygpLnNwbGl0KCcuJylbMV0gIT09ICcxMScgJiZcclxuICAgICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSAhPT0gJzEyJyAmJlxyXG4gICAgICAgICAgICBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdICE9PSAnMTMnXHJcbiAgICAgICAgICAgICAgPyBoZWlnaHRJbkZlZXRcclxuICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgLnNwbGl0KCcuJylbMV1cclxuICAgICAgICAgICAgICAgICAgLmNoYXJBdCgwKVxyXG4gICAgICAgICAgICAgIDogaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXHJcbiAgICAgICAgXSA9PT0gJ0NNJyAmJlxyXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCdcclxuICAgICAgICAgIF1cclxuICAgICAgICApICYmXHJcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J1xyXG4gICAgICAgICAgXVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzOiBhbnkgPVxyXG4gICAgICAgICAgcGFyc2VGbG9hdChcclxuICAgICAgICAgICAgcGFyc2VGbG9hdChcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXHJcbiAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICApLnRvU3RyaW5nKCkgK1xyXG4gICAgICAgICAgICAgICcuJyArXHJcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J1xyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICkudG9TdHJpbmcoKVxyXG4gICAgICAgICAgKSAqIDEyO1xyXG4gICAgICAgIGxldCBoZWlnaHRJbkNtOiBhbnkgPSAoXHJcbiAgICAgICAgICBwYXJzZUZsb2F0KGhlaWdodEluSW5jaGVzKSAvIDAuMzkzNzAxXHJcbiAgICAgICAgKS50b0ZpeGVkKDIpO1xyXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCdcclxuICAgICAgICBdID0gaGVpZ2h0SW5DbTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiXHJcbjxkaXYgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgcXVlc3Rpb25MaXN0XCI+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgIWNoZWNrSWZWYWx1ZUlzRW1wdHkoc2VjdGlvblsncXVlc3Rpb25zJ10pICYmXHJcbiAgICAgICAgc2VjdGlvblsnc2hvd1NlY3Rpb24nXVxyXG4gICAgICBcIlxyXG4gICAgICBjbGFzcz1cImNhcmQgcC0zIG1iLTRcIlxyXG4gICAgICBpZD1cInBlcnNvblV3TWVkaWNhbFF1ZXN0aW9uc1wiXHJcbiAgICA+XHJcbiAgICAgIDxoNiBjbGFzcz1cInBhZ2UtdGl0bGUgYm9sZC1sYWJlbFwiPlxyXG4gICAgICAgIHt7IGdldFRpdGxlQ2FzZShzZWN0aW9uW1wic2VjdGlvbk5hbWVcIl0pIH19XHJcbiAgICAgIDwvaDY+XHJcbiAgICAgIDxsaWItaHItbGluZSBbZmllbGRdPVwiaG9yaXpvbnRhbExpbmVPYmpcIiAvPlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxdWVzdGlvbnMgb2Ygc2VjdGlvblsncXVlc3Rpb25zJ11cIiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdJTUFHRSBURVhUJ1wiPlxyXG4gICAgICAgICAgPGltZyBbc3JjXT1cInF1ZXN0aW9uc1snc2FtcGxlUzNMaW5rJ11cIiBjbGFzcz1cImQtYmxvY2sgbXgtYXV0b1wiIFthbHRdPVwicXVlc3Rpb25zWyd0aXRsZSddXCI+XHJcbiAgICAgICAgICA8aDMgW2lubmVySFRNTF09XCJxdWVzdGlvbnNbJ3F1ZXN0aW9uVGV4dCddXCI+PC9oMz5cclxuICAgICAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdGUkVFIFRFWFQnICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImZpZWxkLWxhYmxlIGQtYmxvY2tcIlxyXG4gICAgICAgICAgICA+e3sgcXVlc3Rpb25zW1wicXVlc3Rpb25UZXh0XCJdIH19XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5vcHRpb25hbFF1ZXN0aW9uID09PSAnTidcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6ICNlZTAwMDBcIlxyXG4gICAgICAgICAgICAgID4mIzQyOzwvc3BhblxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICA8L2xhYmVsPiAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcHgtMCBteS0xXCI+XHJcbiAgICAgICAgICAgIDxsaWItdGV4dGJveCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgKGJsdXIpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0hFSUdIVElOUFVUJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNhcmQtdG9waWMgZC1ibG9jayBmaWVsZC1sYWJsZVwiXHJcbiAgICAgICAgICAgID5IZWlnaHRcclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiAjZWUwMDAwXCJcclxuICAgICAgICAgICAgICA+JiM0Mjs8L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJjb2wtYXV0byBweC0wIG15LTAgcHktMCBoZWlnaHRpbnB1dFwiXHJcblxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbC0xMiBteS0xXCIgKm5nSWY9XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdDTSdcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgcHktMCBoZWlnaHRJbnB1dHNcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItdGV4dGJveCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgW2ZpZWxkXT1cIm1lZFF1ZXN0aW9uT2JqWydRSFQnXVsnZmllbGQnXVwiICAgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTVcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddXCIgW2ZpZWxkXT1cIm1lZFF1ZXN0aW9uT2JqWydoZWlnaHRPYmplY3RUeXBlcyddXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hlY2tBbmRVcGRhdGVIZWlnaHRVbml0KClcIiAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicm93XCJcclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgcGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXHJcbiAgICAgICAgICAgICAgICBdID09PSAnRkVFVCdcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IHB5LTAgbXktMVwiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnUUhURiddWydmaWVsZCddXCIgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgcHktMCBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgW2ZpZWxkXT1cIm1lZFF1ZXN0aW9uT2JqWydRSFRJJ11bJ2ZpZWxkJ11cIiAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTQgcHktMCBteS0xXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXVwiIFtmaWVsZF09XCJtZWRRdWVzdGlvbk9ialsnaGVpZ2h0T2JqZWN0VHlwZXMnXVwiIChuZ01vZGVsQ2hhbmdlKT1cImNoZWNrQW5kVXBkYXRlSGVpZ2h0VW5pdCgpXCIgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cInJvdyBtdC0wIHB0LTBcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ01BUCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcblxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRyZXNzLXNlYXJjaC1jb250YWluZXIgbWItM1wiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGNhcmQtdG9waWNcIj5Mb25naXR1ZGU8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImxvbmdpdHVkZVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGxvbmdpdHVkZVwiXHJcbiAgICAgICAgICBzdGVwPVwiYW55XCJcclxuICAgICAgICAgIHJlYWRvbmx5XHJcbiAgICAgICAgPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBjYXJkLXRvcGljXCI+TGF0aXR1ZGU8L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImxhdGl0dWRlXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgbGF0aXR1ZGVcIlxyXG4gICAgICAgICAgc3RlcD1cImFueVwiXHJcbiAgICAgICAgICByZWFkb25seVxyXG4gICAgICAgID5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgICNhZGRyZXNzSW5wdXRcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGZvciBhZGRyZXNzXCJcclxuICAgICAgICAoa2V5dXApPVwib25BZGRyZXNzSW5wdXRLZXl1cCgkZXZlbnQpXCJcclxuICAgICAgICAoZm9jdXMpPVwic2hvd0Ryb3Bkb3duID0gdHJ1ZVwiXHJcbiAgICAgICAgKGJsdXIpPVwib25JbnB1dEJsdXIoKVwiXHJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgPlxyXG4gICAgICA8ZGl2XHJcbiAgICAqbmdJZj1cInNob3dEcm9wZG93biAmJiBhZGRyZXNzU3VnZ2VzdGlvbnMubGVuZ3RoID4gMFwiXHJcbiAgICBjbGFzcz1cImF1dG9jb21wbGV0ZS1kcm9wZG93biBwb3NpdGlvbi1hYnNvbHV0ZSB3LTEwMCBtdC0xXCJcclxuICAgIHN0eWxlPVwiei1pbmRleDogMTAwMDsgbWF4LWhlaWdodDogMjAwcHg7IG92ZXJmbG93LXk6IGF1dG87IGJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXI6IDFweCBzb2xpZCAjY2NjOyBib3JkZXItcmFkaXVzOiA0cHg7IGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsMCwwLDAuMSk7XCJcclxuICA+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0Zvcj1cImxldCBzdWdnZXN0aW9uIG9mIGFkZHJlc3NTdWdnZXN0aW9uczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBwLTJcIlxyXG4gICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XCJcclxuICAgICAgKG1vdXNlZG93bik9XCJzZWxlY3RBZGRyZXNzKHN1Z2dlc3Rpb24pXCJcclxuICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZEluZGV4ID0gaVwiXHJcbiAgICAgIFtjbGFzcy5iZy1saWdodF09XCJob3ZlcmVkSW5kZXggPT09IGlcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiPnt7IHN1Z2dlc3Rpb24ubWFpbl90ZXh0IH19PC9kaXY+XHJcbiAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIj57eyBzdWdnZXN0aW9uLnNlY29uZGFyeV90ZXh0IH19PC9zbWFsbD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+U3RhcnQgdHlwaW5nIHRvIHNlYXJjaCBmb3IgYWRkcmVzc2VzPC9zbWFsbD5cclxuICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8Z29vZ2xlLW1hcCBbY2VudGVyXT1cImNlbnRlclwiIFt6b29tXT1cInpvb21cIj5cclxuICAgICAgICAgICAgICA8bWFwLW1hcmtlciBbcG9zaXRpb25dPVwiY3VycmVudENvb3JkaW5hdGVzXCI+PC9tYXAtbWFya2VyPlxyXG4gICAgICAgICAgICA8L2dvb2dsZS1tYXA+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIChxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnUkFESU8gQlVUVE9OJyB8fFxyXG4gICAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdBRERNT1JFJykgJiZcclxuICAgICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxsaWItcmFkaW8gWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cIm15LTFcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxsaWItbXVsdGlwbGUtc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIChuZ01vZGVsQ2hhbmdlKT1cInZhbHVlQ2hhbmdlRm9yTXVsdGlzZWxlY3QocXVlc3Rpb25zKVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cIm15LTFcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RFQ0xBUkFUSU9OJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxsaWItY2hlY2tib3ggWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cIm15LTFcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RST1BET1dOJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJteS0xXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUicgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGliLWRvYiBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIiBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgKG5nTW9kZWxDaGFuZ2UpPVwicmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0hFSUdIVElOUFVUJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJteS0xXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdET0NVUExPQUQnICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGxpYi11cGxvYWQgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIChmaWxlUHJldmlldyk9XCJvbkRvY3VtZW50RmlsZVByZXZpZXcoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICA8bGliLWZpbGUtcHJldmlld1xyXG4gICAgICAgICAgICAqbmdJZj1cInByZXZpZXdGaWxlXCJcclxuICAgICAgICAgICAgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiXHJcbiAgICAgICAgICAgIFtmaWxlXT1cInByZXZpZXdGaWxlXCJcclxuICAgICAgICAgICAgKGNsb3NlZCk9XCJjbG9zZUZpbGVQcmV2aWV3KClcIj5cclxuICAgICAgICAgIDwvbGliLWZpbGUtcHJldmlldz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInF1ZXN0aW9ucz8uZmllbGQ/LmNzc0NsYXNzXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdQQVNTUE9SVF9VUExPQUQnICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwhLS0gcGVuZGluZyAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuIl19
|
|
2391
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL21lZGlhbC1xdWVzdGlvbnMvbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUE2QixTQUFTLEVBQXlCLEtBQUssRUFBMEMsTUFBTSxlQUFlLENBQUM7QUFFdEosT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRy9ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7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QyxlQUFlLENBQ2xCLDZCQUE2QixDQUM5QixHQUFHLFVBQVUsQ0FBQztRQUNqQixDQUFDO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQzt3R0FueEZRLHdCQUF3Qjs0RkFBeEIsd0JBQXdCLHFyQkN2Q3JDLGt6VEFtUUEsaStCRDdPSSxZQUFZLDZWQUNaLFdBQVcsZ3hCQUNYLG1CQUFtQiwrQkFDbkIsZ0JBQWdCLDJIQUNoQixjQUFjLDJIQUNkLGlCQUFpQiw4SEFDakIsZUFBZSxrSkFDZixZQUFZLHFLQUNaLGVBQWUseUxBQ2YsdUJBQXVCLDZJQUN2QixnQkFBZ0IsK2lDQUNoQixlQUFlLDJFQUNmLG9CQUFvQjs7NEZBS1gsd0JBQXdCO2tCQXRCcEMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUVQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixlQUFlO3dCQUNmLHVCQUF1Qjt3QkFDdkIsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLG9CQUFvQjtxQkFDckI7dUdBVTBCLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdvb2dsZU1hcHNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9nb29nbGUtbWFwcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBOZ1pvbmUsIEFmdGVyVmlld0luaXQsIGlucHV0LCBTaW1wbGVDaGFuZ2VzLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgcXVlc3Rpb25zUmVzcG9uc2UgZnJvbSAnLi9xdWVzdGlvbnMuanNvbidcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRleHRib3hDb21wb25lbnQgfSBmcm9tICcuLi90ZXh0Ym94L3RleHRib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmFkaW9Db21wb25lbnQgfSBmcm9tICcuLi9yYWRpby9yYWRpby5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4uL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRG9iQ29tcG9uZW50IH0gZnJvbSAnLi4vZG9iL2RvYi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVcGxvYWRDb21wb25lbnQgfSBmcm9tICcuLi91cGxvYWQvdXBsb2FkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE11bHRpcGxlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vbXVsdGlwbGUtc2VsZWN0L211bHRpcGxlLXNlbGVjdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBIckxpbmVDb21wb25lbnQgfSBmcm9tICcuLi9oci1saW5lL2hyLWxpbmUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWFzdGVyQ29udHJvbFNlcnZpY2UgfSBmcm9tICcuLi9tYXN0ZXItY29udHJvbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFzdGVyU2VydmljZSB9IGZyb20gJy4uL21hc3Rlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsZVByZXZpZXdDb21wb25lbnQgfSBmcm9tICcuLi9maWxlLXByZXZpZXcvZmlsZS1wcmV2aWV3LmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1tZWRpYWwtcXVlc3Rpb25zJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIFRleHRib3hDb21wb25lbnQsXHJcbiAgICBSYWRpb0NvbXBvbmVudCxcclxuICAgIENoZWNrYm94Q29tcG9uZW50LFxyXG4gICAgU2VsZWN0Q29tcG9uZW50LFxyXG4gICAgRG9iQ29tcG9uZW50LFxyXG4gICAgVXBsb2FkQ29tcG9uZW50LFxyXG4gICAgTXVsdGlwbGVTZWxlY3RDb21wb25lbnQsXHJcbiAgICBHb29nbGVNYXBzTW9kdWxlLFxyXG4gICAgSHJMaW5lQ29tcG9uZW50LFxyXG4gICAgRmlsZVByZXZpZXdDb21wb25lbnRcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tZWRpYWwtcXVlc3Rpb25zLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vbWVkaWFsLXF1ZXN0aW9ucy5jb21wb25lbnQuY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1lZGlhbFF1ZXN0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgbWVkaWFsUXVlc3Rpb25SZXNwb25zZSA9IGlucHV0PGFueT4oKTtcclxuICBwZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlIDogYW55ID0gaW5wdXQ8YW55PigpO1xyXG4gIHBlcnNvblV3SWQgOiBhbnkgPSBcIlwiO1xyXG4gIGlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZSA6IGFueSA9IG51bGw7XHJcbiAgbWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlIDogYW55ID0ge307XHJcbiAgQFZpZXdDaGlsZCgnYWRkcmVzc0lucHV0JykgYWRkcmVzc0lucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuICBwcml2YXRlIGF1dG9jb21wbGV0ZSE6IGdvb2dsZS5tYXBzLnBsYWNlcy5BdXRvY29tcGxldGU7XHJcbiAgc2F2ZVF1ZXN0aW9uUmVxdWVzdExhOiBhbnkgPSBbXTtcclxuICBzYXZlUXVlc3Rpb25SZXF1ZXN0UGg6IGFueSA9IFtdO1xyXG4gIGZpZWxkOiBhbnkgPSBpbnB1dC5yZXF1aXJlZDxhbnk+KCk7XHJcbiAgcXVlc3Rpb25MaXN0OiBhbnkgPSBbXTtcclxuICBjdXJyZW50Q29vcmRpbmF0ZXM6IGFueSA9IHt9O1xyXG4gIHBlcnNvblV3UmVzcG9uc2VPYmo6IGFueSA9IFtdO1xyXG4gIGNlbnRlcjogZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbCA9IHsgbGF0OiA0MC43MzA2MSwgbG5nOiAtNzMuOTM1MjQyIH07XHJcbiAgbGF0aXR1ZGU6IGFueTtcclxuICBsb25naXR1ZGU6IGFueTtcclxuICB6b29tOiBhbnk7XHJcbiAgbWFya2VyOiBhbnkgPSB7fTtcclxuXHJcblxyXG4gIHBlcnNvblV3QW5zd2VyczogYW55ID0ge1xyXG4gICAgbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQ6ICdGRUVUJyxcclxuICAgIG1lZGljYWxRdWVzdGlvbkZlZXRJbnB1dDogMCxcclxuICAgIG1lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dDogMCxcclxuICAgIG1lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dDogMCxcclxuICB9O1xyXG4gIG1lZFF1ZXN0aW9uT2JqOiBhbnkgPSB7fTtcclxuICBsaXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveDogYW55ID0gW107XHJcbiAgbWVkaWNhbFF1ZXN0aW9uc0ZlZXRMaXN0OiBhbnkgPSBbXTtcclxuICBtZWRpY2FsUXVlc3Rpb25zSW5jaGVzTGlzdDogYW55ID0gW107XHJcbiAgcXVlc3Rpb25IZWFkZXI6IGFueSA9IFsnZWlhIGRldGFpbHMnLCAnYWJoYSBkZXRhaWxzJywgJ3BlcCBkZXRhaWxzJ107XHJcbiAgbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXRUeXBlczogYW55ID0gW1xyXG4gICAge1xyXG4gICAgICBsYWJlbDogJ0NtJyxcclxuICAgICAgdmFsdWU6ICdDTScsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBsYWJlbDogJ0ZlZXQnLFxyXG4gICAgICB2YWx1ZTogJ0ZFRVQnLFxyXG4gICAgfSxcclxuICBdO1xyXG4gIHNob3dEcm9wZG93biA9IGZhbHNlO1xyXG4gIGFkZHJlc3NTdWdnZXN0aW9uczogYW55W10gPSBbXTtcclxuICBob3ZlcmVkSW5kZXggPSAtMTtcclxuICBzZWFyY2hUaW1lb3V0OiBhbnk7XHJcbiAgaG9yaXpvbnRhbExpbmVPYmogOiBhbnkgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJjb250cm9sU3R5bGVcIjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xUeXBlXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYm9yZGVyQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJib3JkZXJXaWR0aFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlclJhZGl1c1wiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvbnRTaXplXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9udFdlaWdodFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvbnRGYW1pbHlcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJhY2tncm91bmRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjYXJldENvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibnVkZ2VEaXNwbGF5SW1hZ2VcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkJnQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwid2lkdGhcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0JvcmRlcldpZHRoXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNCb3JkZXJDb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzQmFja2dyb3VuZFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Db2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyUmFkaXVzXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaG92ZXJCb3JkZXJDb2xvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhvdmVyQm9yZGVyV2lkdGhcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJob3ZlckNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZUNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZUJhY2tncm91bmRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlcnJvckJvcmRlckNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JCb3JkZXJXaWR0aFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVycm9yQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjcmVhdGVkRGF0ZVwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInBhZGRpbmdcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXJnaW5cIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJpc01hc3RlckNzc1wiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xNZXRhSWRcIjogXCJMSV9DT01fR0VOX0NUUkxfaHJMaW5lX2hyTGluZV9WMVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImJvcmRlclN0eWxlXCI6IFwic29saWRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJoZWlnaHRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW5IZWlnaHRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXhIZWlnaHRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW5XaWR0aFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1heFdpZHRoXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NzQ2xhc3NcIjogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJmaWVsZE5hbWVcIjogXCJockxpbmVcIixcclxuICAgICAgICAgICAgICAgICAgICBcImxhYmVsXCI6IFwic29saWQgbGluZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwicGxhY2VIb2xkZXJcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcIm1ldGFJZFwiOiBcIkxJX0NPTV9HRU5fQ1RSTF9ockxpbmVfaHJMaW5lX1YxXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJpc1Zpc2libGVcIjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBcImlzRGlzYWJsZVwiOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBcImRlZmF1bHRWYWx1ZVwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwidmFsaWRhdG9yc1wiOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaXNSZXF1aXJlZFwiOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZXF1aXJlZE1lc3NhZ2VcIjogXCJUaGlzIGZpZWxkIGNhbm5vdCBiZSBlbXB0eVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1pbkxlbmd0aFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1pbkxlbmd0aE1lc3NhZ2VcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXhMZW5ndGhcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXhMZW5ndGhNZXNzYWdlXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicGF0dGVyblwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInBhdHRlcm5NZXNzYWdlXCI6IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIFwib3B0aW9uc1wiOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBcImNzc0NsYXNzXCI6IFwiY29sLTEyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwic3R5bGVcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcImltYWdlVXJsXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJjb25maWdEYXRhXCI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJoclRleHRcIjogXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJtZXRhRGF0YU9ialwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiaXNTaG93TGFiZWxcIjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBcImlzTWFzdGVyQ29udHJvbFwiOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xUeXBlXCI6IFwiaHJMaW5lXCJcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgcHJldmlld0ZpbGU6IEZpbGUgfCBudWxsID0gbnVsbDtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbmdab25lOiBOZ1pvbmUsIHB1YmxpYyBtYXN0ZXJTZXJ2aWNlIDogTWFzdGVyU2VydmljZSkge1xyXG4gICAgY29uc29sZS5sb2coJ21lZGlhbFF1ZXN0aW9uUmVzcG9uc2VlZWVlZScsIHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge31cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKFxyXG4gICAgICAoKGNoYW5nZXNbJ21lZGlhbFF1ZXN0aW9uUmVzcG9uc2UnXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjaGFuZ2VzWydtZWRpYWxRdWVzdGlvblJlc3BvbnNlJ10uY3VycmVudFZhbHVlKSkgfHxcclxuICAgICAgKChjaGFuZ2VzWydwcmVwYXJlUGVyc29uVXdRdWVzdGlvbnNPYmonXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjaGFuZ2VzWydwcmVwYXJlUGVyc29uVXdRdWVzdGlvbnNPYmonXS5jdXJyZW50VmFsdWUpKVxyXG4gICAgKSB7XHJcbiAgICAgIGlmICgnZ2VvbG9jYXRpb24nIGluIG5hdmlnYXRvcikge1xyXG4gICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKHBvc2l0aW9uKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxhdGl0dWRlID0gcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlO1xyXG4gICAgICAgICAgdGhpcy5sb25naXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlO1xyXG4gICAgICAgICAgdGhpcy56b29tID0gMTU7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHtcclxuICAgICAgICAgICAgbGF0OiB0aGlzLmxhdGl0dWRlLFxyXG4gICAgICAgICAgICBsbmc6IHRoaXMubG9uZ2l0dWRlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuY2VudGVyID0geyAuLi50aGlzLmN1cnJlbnRDb29yZGluYXRlcyB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucHJlcGFyZVBlcnNvblV3UXVlc3Rpb25zT2JqKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRpYWxpemVBdXRvY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzb2x2ZUhlaWdodFF1ZXN0aW9uSWRzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gMDtcclxuICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IDA7XHJcbiAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSAwO1xyXG5cclxuICAgIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICBpZiAoc2VjdGlvbi5xdWVzdGlvbnMgJiYgQXJyYXkuaXNBcnJheShzZWN0aW9uLnF1ZXN0aW9ucykpIHtcclxuICAgICAgICBzZWN0aW9uLnF1ZXN0aW9ucy5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICBzd2l0Y2ggKHF1ZXN0aW9uLmNhbW11bmRhUXVlc3Rpb25Db2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ1FIVCc6XHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gcXVlc3Rpb24ucXVlc3Rpb25JZDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnUUhURic6XHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gcXVlc3Rpb24ucXVlc3Rpb25JZDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnUUhUSSc6XHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gcXVlc3Rpb24ucXVlc3Rpb25JZDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVBdXRvY29tcGxldGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmF1dG9jb21wbGV0ZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlKFxyXG4gICAgICB0aGlzLmFkZHJlc3NJbnB1dD8ubmF0aXZlRWxlbWVudCxcclxuICAgICAge1xyXG4gICAgICAgIHR5cGVzOiBbJ2FkZHJlc3MnXSxcclxuICAgICAgICBjb21wb25lbnRSZXN0cmljdGlvbnM6IHsgY291bnRyeTogJ0lOJyB9LFxyXG4gICAgICAgIGZpZWxkczogWydwbGFjZV9pZCcsICdnZW9tZXRyeScsICduYW1lJywgJ2Zvcm1hdHRlZF9hZGRyZXNzJ10sXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5hdXRvY29tcGxldGUuYWRkTGlzdGVuZXIoJ3BsYWNlX2NoYW5nZWQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblBsYWNlU2VsZWN0ZWQoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25QbGFjZVNlbGVjdGVkKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGxhY2UgPSB0aGlzLmF1dG9jb21wbGV0ZS5nZXRQbGFjZSgpO1xyXG5cclxuICAgIGlmICghcGxhY2UuZ2VvbWV0cnkgfHwgIXBsYWNlLmdlb21ldHJ5LmxvY2F0aW9uKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdObyBkZXRhaWxzIGF2YWlsYWJsZSBmb3IgaW5wdXQ6ICcsIHBsYWNlLm5hbWUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbG9jYXRpb24gPSBwbGFjZS5nZW9tZXRyeS5sb2NhdGlvbjtcclxuICAgIHRoaXMuY2VudGVyID0ge1xyXG4gICAgICBsYXQ6IGxvY2F0aW9uLmxhdCgpLFxyXG4gICAgICBsbmc6IGxvY2F0aW9uLmxuZygpLFxyXG4gICAgfTtcclxuICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0gdGhpcy5jZW50ZXI7XHJcblxyXG4gICAgaWYgKHBsYWNlLmdlb21ldHJ5LnZpZXdwb3J0KSB7XHJcbiAgICAgIHRoaXMuem9vbSA9IDE1O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy56b29tID0gMTM7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIHBsYWNlOicsIHtcclxuICAgICAgbmFtZTogcGxhY2UubmFtZSxcclxuICAgICAgYWRkcmVzczogcGxhY2UuZm9ybWF0dGVkX2FkZHJlc3MsXHJcbiAgICAgIGNvb3JkaW5hdGVzOiB0aGlzLmNlbnRlcixcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc3RvcmVTZWxlY3RlZEFkZHJlc3MocGxhY2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdG9yZVNlbGVjdGVkQWRkcmVzcyhwbGFjZTogZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlUmVzdWx0KTogdm9pZCB7XHJcbiAgICBjb25zdCBhZGRyZXNzRGF0YSA9IHtcclxuICAgICAgcGxhY2VJZDogcGxhY2UucGxhY2VfaWQsXHJcbiAgICAgIG5hbWU6IHBsYWNlLm5hbWUsXHJcbiAgICAgIGZvcm1hdHRlZEFkZHJlc3M6IHBsYWNlLmZvcm1hdHRlZF9hZGRyZXNzLFxyXG4gICAgICBjb29yZGluYXRlczogdGhpcy5jZW50ZXIsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGdlb2NvZGVyID0gbmV3IGdvb2dsZS5tYXBzLkdlb2NvZGVyKCk7XHJcblxyXG4gICAgZ2VvY29kZXIuZ2VvY29kZSh7IGFkZHJlc3M6IGFkZHJlc3MgfSwgKHJlc3VsdHMsIHN0YXR1cykgPT4ge1xyXG4gICAgICBpZiAoc3RhdHVzID09PSAnT0snICYmIHJlc3VsdHMgJiYgcmVzdWx0c1swXSkge1xyXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gcmVzdWx0c1swXS5nZW9tZXRyeS5sb2NhdGlvbjtcclxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jZW50ZXIgPSB7XHJcbiAgICAgICAgICAgIGxhdDogbG9jYXRpb24ubGF0KCksXHJcbiAgICAgICAgICAgIGxuZzogbG9jYXRpb24ubG5nKCksXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmNlbnRlcjtcclxuICAgICAgICAgIHRoaXMuem9vbSA9IDE1O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgJ0dlb2NvZGUgd2FzIG5vdCBzdWNjZXNzZnVsIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbjogJyArIHN0YXR1c1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25BZGRyZXNzSW5wdXRLZXl1cChldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBxdWVyeSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuXHJcbiAgICAvLyBDbGVhciBwcmV2aW91cyB0aW1lb3V0XHJcbiAgICBpZiAodGhpcy5zZWFyY2hUaW1lb3V0KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaFRpbWVvdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSBhcnJvdyBrZXkgbmF2aWdhdGlvblxyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcclxuICAgICAgdGhpcy5ob3ZlcmVkSW5kZXggPSBNYXRoLm1pbihcclxuICAgICAgICB0aGlzLmhvdmVyZWRJbmRleCArIDEsXHJcbiAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMubGVuZ3RoIC0gMVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XHJcbiAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gTWF0aC5tYXgodGhpcy5ob3ZlcmVkSW5kZXggLSAxLCAtMSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmhvdmVyZWRJbmRleCA+PSAwICYmXHJcbiAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnNbdGhpcy5ob3ZlcmVkSW5kZXhdXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0QWRkcmVzcyh0aGlzLmFkZHJlc3NTdWdnZXN0aW9uc1t0aGlzLmhvdmVyZWRJbmRleF0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHF1ZXJ5Lmxlbmd0aCA8IDIpIHtcclxuICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBbXTtcclxuICAgICAgdGhpcy5zaG93RHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VhcmNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNlYXJjaEFkZHJlc3NlcyhxdWVyeSk7XHJcbiAgICB9LCAzMDApO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoQWRkcmVzc2VzKHF1ZXJ5OiBzdHJpbmcpIHtcclxuICAgIC8vIFJlcGxhY2UgdGhpcyB3aXRoIHlvdXIgYWN0dWFsIGFkZHJlc3Mgc2VhcmNoIEFQSSBjYWxsXHJcbiAgICAvLyBGb3IgZXhhbXBsZSwgdXNpbmcgR29vZ2xlIFBsYWNlcyBBUEk6XHJcblxyXG4gICAgY29uc3Qgc2VydmljZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlU2VydmljZSgpO1xyXG4gICAgc2VydmljZS5nZXRQbGFjZVByZWRpY3Rpb25zKFxyXG4gICAgICB7XHJcbiAgICAgICAgaW5wdXQ6IHF1ZXJ5LFxyXG4gICAgICAgIHR5cGVzOiBbJ2FkZHJlc3MnXSxcclxuICAgICAgfSxcclxuICAgICAgKHByZWRpY3Rpb25zLCBzdGF0dXMpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBzdGF0dXMgPT09IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlU3RhdHVzLk9LICYmXHJcbiAgICAgICAgICBwcmVkaWN0aW9uc1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBwcmVkaWN0aW9ucy5tYXAoKHByZWRpY3Rpb24pID0+ICh7XHJcbiAgICAgICAgICAgIHBsYWNlX2lkOiBwcmVkaWN0aW9uLnBsYWNlX2lkLFxyXG4gICAgICAgICAgICBtYWluX3RleHQ6IHByZWRpY3Rpb24uc3RydWN0dXJlZF9mb3JtYXR0aW5nLm1haW5fdGV4dCxcclxuICAgICAgICAgICAgc2Vjb25kYXJ5X3RleHQ6IHByZWRpY3Rpb24uc3RydWN0dXJlZF9mb3JtYXR0aW5nLnNlY29uZGFyeV90ZXh0LFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcHJlZGljdGlvbi5kZXNjcmlwdGlvbixcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaG92ZXJlZEluZGV4ID0gLTE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWRkcmVzc1N1Z2dlc3Rpb25zID0gW107XHJcbiAgICAgICAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEFkZHJlc3Moc3VnZ2VzdGlvbjogYW55KSB7XHJcbiAgICBjb25zdCBhZGRyZXNzSW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAnI2FkZHJlc3NJbnB1dCdcclxuICAgICkgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGlmIChhZGRyZXNzSW5wdXQpIHtcclxuICAgICAgYWRkcmVzc0lucHV0LnZhbHVlID0gc3VnZ2VzdGlvbi5kZXNjcmlwdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZXJ2aWNlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlKFxyXG4gICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG4gICAgKTtcclxuICAgIHNlcnZpY2UuZ2V0RGV0YWlscyhcclxuICAgICAge1xyXG4gICAgICAgIHBsYWNlSWQ6IHN1Z2dlc3Rpb24ucGxhY2VfaWQsXHJcbiAgICAgICAgZmllbGRzOiBbJ2dlb21ldHJ5JywgJ2Zvcm1hdHRlZF9hZGRyZXNzJ10sXHJcbiAgICAgIH0sXHJcbiAgICAgIChwbGFjZSwgc3RhdHVzKSA9PiB7XHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2VTdGF0dXMuT0sgJiYgcGxhY2UpIHtcclxuICAgICAgICAgIGNvbnN0IGxhdCA9IHBsYWNlLmdlb21ldHJ5Py5sb2NhdGlvbj8ubGF0KCk7XHJcbiAgICAgICAgICBjb25zdCBsbmcgPSBwbGFjZS5nZW9tZXRyeT8ubG9jYXRpb24/LmxuZygpO1xyXG5cclxuICAgICAgICAgIGlmIChsYXQgIT09IHVuZGVmaW5lZCAmJiBsbmcgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvbmdpdHVkZSA9IGxuZztcclxuICAgICAgICAgICAgdGhpcy5sYXRpdHVkZSA9IGxhdDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2VudGVyID0geyBsYXQsIGxuZyB9O1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHRoaXMuY2VudGVyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnNob3dEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgdGhpcy5hZGRyZXNzU3VnZ2VzdGlvbnMgPSBbXTtcclxuICB9XHJcblxyXG4gIG9uSW5wdXRCbHVyKCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duID0gZmFsc2U7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgZmluZE1lZGljYWxRdWVzdGlvbnNJbk9wZW5RdW90ZShhcnJheU9mT2JqIDogYW55KSB7XHJcbiAgICBpZihhcnJheU9mT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnTWVkaUNuZHRuJyB8fCBhcnJheU9mT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAgJ0xpZmVNZWRpQ25kdG4nKSB7XHJcbiAgICAgIHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlID0gYXJyYXlPZk9iajtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShhcnJheU9mT2JqWydwZXJzb25VV0FjdGl2aXR5UmVzcG9uc2VFbnRpdHknXSkpIHtcclxuICAgICAgYXJyYXlPZk9ialsncGVyc29uVVdBY3Rpdml0eVJlc3BvbnNlRW50aXR5J10uZm9yRWFjaCgoc2luZ2xlU3ViQXJyYXkgOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmZpbmRNZWRpY2FsUXVlc3Rpb25zSW5PcGVuUXVvdGUoc2luZ2xlU3ViQXJyYXkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1hcEFuc3dlcnNGb3JPcGVuUXVvdGUoKSB7XHJcbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3QpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdFswXT8ucGVyc29uVVdkZXRhaWxzTGlzdCkpIHtcclxuICAgICAgbGV0IGFycmF5T2ZLZXlzIDogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdFswXT8ucGVyc29uVVdkZXRhaWxzTGlzdCk7XHJcbiAgICAgIGFycmF5T2ZLZXlzLmZvckVhY2goKHNpbmdsZUtleSA6IGFueSwgc2luZ2xlS2V5TGVuZ3RoIDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XSkpIHtcclxuICAgICAgICAgIHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdWydxdWVzdGlvbkxpc3QnXVswXVsncGVyc29uVVdkZXRhaWxzTGlzdCddW3NpbmdsZUtleV0uZm9yRWFjaCgoc2luZ2xlQW5zd2VyT2JqIDogYW55LCBzaW5nbGVBbnN3ZXJPYmpMZW5ndGggOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVQZXJzb25Vd0Fuc3dlcnMoc2luZ2xlQW5zd2VyT2JqKTtcclxuICAgICAgICAgICAgaWYoc2luZ2xlS2V5TGVuZ3RoID09PSAoYXJyYXlPZktleXMubGVuZ3RoIC0gMSkgJiYgc2luZ2xlQW5zd2VyT2JqTGVuZ3RoID09PSAodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XS5sZW5ndGggLSAxKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcmVwYXJlUGVyc29uVXdRdWVzdGlvbnNPYmooKSB7XHJcbiAgICB0aGlzLnF1ZXN0aW9uTGlzdCA9IFtdO1xyXG4gICAgbGV0IGRhdGE6IGFueSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpO1xyXG4gICAgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveCA9IFtdO1xyXG5cclxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10pKSB7XHJcbiAgICAgIGxldCBwZXJzb25Vd0lkQXJyYXk6IGFueSA9IFtdO1xyXG4gICAgICBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOiBhbnkpID0+IHtcclxuICAgICAgICBwZXJzb25Vd0lkQXJyYXkucHVzaChzaW5nbGVRdWVzdGlvbk9ialsncGVyc29uVVdJZCddKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShkYXRhKSAmJlxyXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXSlcclxuICAgICAgKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRhdGFbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10pKSB7XHJcbiAgICAgICAgICBsZXQgZGlzdGluY3RTdGVwczogYW55ID0gW107XHJcbiAgICAgICAgICBkYXRhWydxdWVzdGlvbnNSZXNwb25zZSddLmZvckVhY2goKHNpbmdsZVBlcnNvbk9iamVjdDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdJZCA9IHNpbmdsZVBlcnNvbk9iamVjdFsncGVyc29uVVdJZCddLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10pKSB7XHJcbiAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWyd0aXRsZSddID09PSAnTWVkaWNhbCBEZXRhaWxzJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblRleHQnXSA9IHNpbmdsZVF1ZXN0aW9uW1xyXG4gICAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uVGV4dCdcclxuICAgICAgICAgICAgICAgICAgICBdLnJlcGxhY2UoL1xcXFxuL2csICdcXG4nKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPVxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFbJ2RvbWFpblZhbHVlcyddW3NpbmdsZVF1ZXN0aW9uWydkb21haW5OYW1lJ11dO1xyXG5cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2ZpZWxkJ10gPSB0aGlzLmdldEZpZWxkKHNpbmdsZVF1ZXN0aW9uKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1BBTicpIHtcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsndmFsaWRhdGlvbnMnXSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAne1wiVHlwZVwiOlwiQWxwaGFOdW1lcmljXCIsXCJNaW5WYWx1ZVwiOlwiMTBcIixcIk1heFZhbHVlXCI6XCIxMFwiLFwicmVnZXhQYXR0ZXJuXCI6XCIvXihbYS16QS1aXSl7NX0oWzAtOV0pezR9KFthLXpBLVpdKXsxfT8kL1wifSc7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8gaWYgKHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnRnRjYUNudGNEZXRscycpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvblsndmFsaWRhdGlvbnMnXSA9ICd7XCJjdXN0b21WYWxpZGF0aW9uXCI6W3tcImNvdW50cnlcIjpcIklOXCIsXCJNaW5WYWx1ZVwiOlwiMTBcIixcIk1heFZhbHVlXCI6XCIxMFwiLFwicmVnZXhQYXR0ZXJuXCI6XCIoKF5bNi05XSl7MX0oWzAtOV0pezl9JClcIn0se1wiY291bnRyeVwiOlwiT1RIRVJcIixcIk1pblZhbHVlXCI6XCI1XCIsXCJNYXhWYWx1ZVwiOlwiMTRcIn1dfSc7XHJcbiAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddLmZvckVhY2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9iajogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0UXVlc3Rpb25PYmplY3Q6IGFueSA9IHNpbmdsZVBlcnNvbk9iamVjdFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAncXVlc3Rpb25MaXN0J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RbJ3F1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmpbJ25leHRRdWVzdGlvbklkJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRRdWVzdGlvbk9iamVjdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFF1ZXN0aW9uT2JqZWN0WzBdWydhbnN3ZXJlZFZhbHVlJ10gPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsncGFyZW50UXVlc3Rpb25WYWx1ZSddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbJ2RvbWFpblZhbHVlcyddW3NpbmdsZVF1ZXN0aW9uWydkb21haW5OYW1lJ11dXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhWydkb21haW5WYWx1ZXMnXVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgaWYgKCFkaXN0aW5jdFN0ZXBzLmluY2x1ZGVzKHNpbmdsZVF1ZXN0aW9uWydzdGVwJ10pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5wdXNoKHNpbmdsZVF1ZXN0aW9uWydzdGVwJ10pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uZm9yRWFjaCgocXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnSU1BR0UgVEVYVCcpIHtcclxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uVGV4dCddID0gcXVlc3Rpb25bXHJcbiAgICAgICAgICAgICAgICAgICAgJ3F1ZXN0aW9uVGV4dCdcclxuICAgICAgICAgICAgICAgICAgXS5yZXBsYWNlQWxsKCdcXFxcbicsICc8YnI+Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsUXVlc3Rpb25zRmVldExpc3QgPSBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ107XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEYnXSA9IHF1ZXN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRGJ11bJ2ZpZWxkJ11bJ2lzU2hvd0xhYmVsJ10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhURiddWydmaWVsZCddWydjb250cm9sU3R5bGUnXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogJ3NlbGVjdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNnB4JyxcclxuICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiAnNDAwJyxcclxuICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnTXVsaXNoJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjRkZGRkZGJyxcclxuICAgICAgICAgICAgICAgICAgICBjYXJldENvbG9yOiAnI2ZmYmIwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25CZ0NvbG9yOiAnI0ZGRkZGRicsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Db2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uRm9udFdlaWdodDogJzQwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCYWNrZ3JvdW5kOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1czogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNvbG9yOiAnI0VDRUNFQycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlckNvbG9yOiAnI0VFMDAwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZERhdGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNNYXN0ZXJDc3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE1ldGFJZDpcclxuICAgICAgICAgICAgICAgICAgICAgICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJTdHlsZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBjc3NDbGFzczogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFF1ZXN0aW9uc0luY2hlc0xpc3QgPSBxdWVzdGlvblsnZG9tYWluVmFsdWVzJ107XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubWVkUXVlc3Rpb25PYmpbJ1FIVEknXSA9IHF1ZXN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm1lZFF1ZXN0aW9uT2JqWydRSFRJJ11bJ2ZpZWxkJ11bJ2lzU2hvd0xhYmVsJ10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUSSddWydmaWVsZCddWydjb250cm9sU3R5bGUnXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogJ3NlbGVjdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICcjZmZmZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNnB4JyxcclxuICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiAnNDAwJyxcclxuICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnTXVsaXNoJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjRkZGRkZGJyxcclxuICAgICAgICAgICAgICAgICAgICBjYXJldENvbG9yOiAnI2ZmYmIwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgbnVkZ2VEaXNwbGF5SW1hZ2U6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25CZ0NvbG9yOiAnI0ZGRkZGRicsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25Db2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uRm9udFdlaWdodDogJzQwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0JvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCYWNrZ3JvdW5kOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQmdDb2xvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0Ryb3Bkb3duT3B0aW9uQ29sb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlckxlZnQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJvcmRlclJhZGl1czogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBob3ZlckJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNvbG9yOiAnI0VDRUNFQycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUJhY2tncm91bmQ6ICcjRUNFQ0VDJyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckJvcmRlckNvbG9yOiAnI0VFMDAwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJXaWR0aDogJzEuNXB4JyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlZERhdGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNNYXN0ZXJDc3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE1ldGFJZDpcclxuICAgICAgICAgICAgICAgICAgICAgICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJTdHlsZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBjc3NDbGFzczogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpY2FsUXVlc3Rpb25zSW5jaGVzTGlzdCA9IHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUJ10gPSBxdWVzdGlvbjtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUJ11bJ2ZpZWxkJ11bJ2lzU2hvd0xhYmVsJ10gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnUUhUJ11bJ2ZpZWxkJ11bJ2NvbnRyb2xTdHlsZSddID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiAnRlJFRVRFWFQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTZweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogJ011bGlzaCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FyZXRDb2xvcjogJyNmZmJiMDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIG51ZGdlRGlzcGxheUltYWdlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9uQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6ICc0MDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBmb2N1c0NvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVDb2xvcjogJyNFQ0VDRUMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVCYWNrZ3JvdW5kOiAnI0VDRUNFQycsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xNZXRhSWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAnTElfQ09NX0dFTl9DVFJMX3NlbGVjdF9kb3dubG9hZERvY3VtZW50c19WMScsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RFQ0xBUkFUSU9OJykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdyZWN2U2Z0Q29weScpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmplY3RbJ3JvbGUnXV1bXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbkludGVybmFsVmFsdWU6IHF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICBkb21haW5VaVZhbHVlOiAnTicsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID0gW107XHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBkb21haW5JbnRlcm5hbFZhbHVlOiBxdWVzdGlvblsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICAgIGRvbWFpblVpVmFsdWU6ICdZJyxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnaGFyZENvcHlMYW5nJykge1xyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPSAnSEFSRCBDT1BZJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5zb3J0KFxyXG4gICAgICAgICAgICAgICAgKGE6IGFueSwgYjogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICBhWydzdGVwJ10gLSBiWydzdGVwJ10gfHwgYVsnZGlzcGxheU9yZGVyJ10gLSBiWydkaXNwbGF5T3JkZXInXVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBxdWVzdGlvbnNMaXN0Rm9yTEE6IGFueSA9IFtdO1xyXG4gICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLmZvckVhY2goKHN0ZXBzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRPYmo6IGFueSA9IHNpbmdsZVBlcnNvbk9iamVjdFsncXVlc3Rpb25MaXN0J10uZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydzdGVwJ10gPT09IHN0ZXBzXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGVwOiBzdGVwcyxcclxuICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVBlcnNvbk9iamVjdFsncGVyc29uVVdJZCddLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnM6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopXHJcbiAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpcclxuICAgICAgICAgICAgICAgICAgOiBbXSxcclxuICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKVxyXG4gICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqWzBdWyd0aXRsZSddXHJcbiAgICAgICAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICAgICAgICBpc01lZGljYWxTdWJRdWVzdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzaG93U2VjdGlvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSGFyZCBDb3B5IGFuZCBNYXAgcXVlc3Rpb25cclxuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZEhhcmRDb3B5UXVlc3Rpb246IGFueSA9IGZpbHRlcmVkT2JqLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdyZWN2U2Z0Q29weSdcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZEhhcmRDb3B5UXVlc3Rpb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgIG9ialsncXVlc3Rpb25zJ10ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25UeXBlOiAnTUFQJyxcclxuICAgICAgICAgICAgICAgICAgICBpc1Nob3dRdWVzdGlvbkluVUk6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25SZWxhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25JZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRIYXJkQ29weVF1ZXN0aW9uWzBdWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbkFuc3dlcjogJ1knLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIE5SSSB0aGVuIHBhc3Nwb3J0IHVwbG9hZCBpcyByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkTmF0aW9uYWxpdHlRdWVzdGlvbjogYW55ID0gZmlsdGVyZWRPYmouZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ05hdGlvbmFsaXR5J1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkTmF0aW9uYWxpdHlRdWVzdGlvbikpIHtcclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUGVyc29uT2JqZWN0WydxdWVzdGlvbkxpc3QnXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6ICdQQVNTUE9SVF9VUExPQUQnLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsUXVlc3Rpb246ICdOJyxcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblRleHQ6ICdQYXNzcG9ydCBEZXRhaWxzICcsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNTaG93UXVlc3Rpb25JblVJOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uUmVsYXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkTmF0aW9uYWxpdHlRdWVzdGlvblswXVsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25BbnN3ZXI6ICdmb3Jnbk5hdGlvbmFsJyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgb2JqWydxdWVzdGlvbnMnXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblR5cGU6ICdQQVNTUE9SVF9VUExPQUQnLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsUXVlc3Rpb246ICdOJyxcclxuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblRleHQ6ICdQYXNzcG9ydCBEZXRhaWxzICcsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNTaG93UXVlc3Rpb25JblVJOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uUmVsYXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkTmF0aW9uYWxpdHlRdWVzdGlvblswXVsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25BbnN3ZXI6ICdmb3Jnbk5hdGlvbmFsJyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcXVlc3Rpb25zTGlzdEZvckxBLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIGxldCBsaWZlQXNzdXJlZE9iamVjdEluZGV4SW5NYXN0ZXI6IGFueSA9IHRoaXMucXVlc3Rpb25MaXN0LmZpbmRJbmRleCgoc2luZ2xlT2JqOiBhbnkpID0+IHNpbmdsZU9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25PYmplY3RbJ3JvbGUnXSk7XHJcbiAgICAgICAgICAgIC8vIGlmIChsaWZlQXNzdXJlZE9iamVjdEluZGV4SW5NYXN0ZXIgIT09IHRoaXMubnVtYmVyTWludXNPbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkxpc3QgPSBxdWVzdGlvbnNMaXN0Rm9yTEE7XHJcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZUhlaWdodFF1ZXN0aW9uSWRzKCk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqID0gZGF0YVsncXVlc3Rpb25zUmVzcG9uc2UnXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXSkgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXT8ucXVlc3Rpb25MaXN0KSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpWzBdPy5xdWVzdGlvbkxpc3RbMF0/LnBlcnNvblVXZGV0YWlsc0xpc3QpICkge1xyXG4gICAgICAgICAgbGV0IGlzU3ViUXVlc3Rpb25FeGlzdHM6IGFueSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUgPSBudWxsO1xyXG4gICAgICAgICAgbGV0IGFycmF5T2ZLZXlzIDogYW55ID0gT2JqZWN0LmtleXModGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF0/LnF1ZXN0aW9uTGlzdFswXT8ucGVyc29uVVdkZXRhaWxzTGlzdCk7XHJcbiAgICAgICAgICBhcnJheU9mS2V5cy5mb3JFYWNoKChzaW5nbGVLZXkgOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25VV09wZW5RdW90ZVJlc3BvbnNlKClbMF1bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J11bc2luZ2xlS2V5XSkpIHtcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblVXT3BlblF1b3RlUmVzcG9uc2UoKVswXVsncXVlc3Rpb25MaXN0J11bMF1bJ3BlcnNvblVXZGV0YWlsc0xpc3QnXVtzaW5nbGVLZXldLmZvckVhY2goKHNpbmdsZUFuc3dlck9iaiA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maW5kTWVkaWNhbFF1ZXN0aW9uc0luT3BlblF1b3RlKHNpbmdsZUFuc3dlck9iaik7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5pc01lZGljYWxTdWJRdWVzdGlvbnNBdmFpbGFibGUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWFzdGVyU2VydmljZS5nZXRTdWJRdWVzdGlvbnModGhpcy5maWVsZCgpPy5jb25maWdEYXRhLCB0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZVsnYW5zd2VyJ10sIHRoaXMuaXNNZWRpY2FsU3ViUXVlc3Rpb25zQXZhaWxhYmxlWydwZXJzb25VV0lkJ10pLnN1YnNjcmliZSgoc3ViUXVlc3Rpb25SZXNwb25zZSA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcclxuICAgICAgICAgICAgICBzdWJRdWVzdGlvblJlc3BvbnNlLmZvckVhY2goKHN1YlF1ZXN0aW9uIDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10gPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsnZG9tYWluVmFsdWVzJ11bXHJcbiAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydkb21haW5OYW1lJ11cclxuICAgICAgICAgICAgICAgIF07XHJcblxyXG4gICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2ZpZWxkJ10gPSB0aGlzLmdldEZpZWxkKHN1YlF1ZXN0aW9uKTtcclxuICAgICAgICAgICAgICAgIGlmICghZGlzdGluY3RTdGVwcy5pbmNsdWRlcyhzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMucHVzaChzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgc3ViUXVlc3Rpb25SZXNwb25zZS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gYVsnc3RlcCddIC0gYlsnc3RlcCddIHx8IGFbJ2Rpc3BsYXlPcmRlciddIC0gYlsnZGlzcGxheU9yZGVyJ10pO1xyXG4gICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMuZm9yRWFjaCgoc3RlcHM6IGFueSwgaW5kOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE9iajogYW55ID0gc3ViUXVlc3Rpb25SZXNwb25zZS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSA9PT0gc3RlcHMpO1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICAgICAgICBzdGVwOiAxMDAwICsgaW5kLFxyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbnM6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopID8gZmlsdGVyZWRPYmogOiBbXSxcclxuICAgICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopID8gZmlsdGVyZWRPYmpbMF1bJ3RpdGxlJ10gOiAnJyxcclxuICAgICAgICAgICAgICAgICAgaXNNZWRpY2FsU3ViUXVlc3Rpb246IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIHNob3dTZWN0aW9uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiB0aGlzLmlzTWVkaWNhbFN1YlF1ZXN0aW9uc0F2YWlsYWJsZVsncGVyc29uVVdJZCddLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgLy8gbGV0IExhSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdNYXN0ZXJPYmouZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgLy8gICAoc2luZ2xlOiBhbnkpID0+IHNpbmdsZVsncm9sZSddID09PSBzaW5nbGVQZXJzb25bJ3JvbGUnXVxyXG4gICAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0LnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlID0gc3ViUXVlc3Rpb25SZXNwb25zZTtcclxuICAgICAgICAgICAgICAvLyBsZXQgbGFJbmRleDogYW55ID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSBzaW5nbGVQZXJzb25bJ3JvbGUnXSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bJ3F1ZXN0aW9uTGlzdCddID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bJ3F1ZXN0aW9uTGlzdCddLmNvbmNhdCh0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMubWFwQW5zd2Vyc0Zvck9wZW5RdW90ZSgpO1xyXG4gICAgICAgICAgICB9LCAoZXJyIDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tYXBBbnN3ZXJzRm9yT3BlblF1b3RlKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1hcEFuc3dlcnNGb3JPcGVuUXVvdGUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIHRoaXMucGVyc29uVVdPcGVuUXVvdGVSZXNwb25zZSgpLmZvckVhY2goKHNpbmdsZVBlcnNvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVBlcnNvblsncXVlc3Rpb25MaXN0J10pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uWydxdWVzdGlvbkxpc3QnXVswXSkpIHtcclxuICAgICAgICAgIC8vICAgICBsZXQgYXJyYXlPZktleXMgPSBPYmplY3Qua2V5cyhzaW5nbGVQZXJzb25bJ3F1ZXN0aW9uTGlzdCddWzBdWydwZXJzb25VV2RldGFpbHNMaXN0J10pO1xyXG4gICAgICAgICAgLy8gICAgIGlmIChhcnJheU9mS2V5cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAvLyAgICAgICBhcnJheU9mS2V5cy5mb3JFYWNoKChzaW5nbGVLZXkpID0+IHtcclxuICAgICAgICAgIC8vICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uWydxdWVzdGlvbkxpc3QnXVswXVsncGVyc29uVVdkZXRhaWxzTGlzdCddW3NpbmdsZUtleV0pKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgc2luZ2xlUGVyc29uWydxdWVzdGlvbkxpc3QnXVswXVsncGVyc29uVVdkZXRhaWxzTGlzdCddW3NpbmdsZUtleV0uZm9yRWFjaCgoYW5zd2VyT2JqOiBhbnkpID0+IHtcclxuXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyO1xyXG5cclxuXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICBsZXQgZmlsdGVyZWRRdWVzdGlvbjogYW55ID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gYW5zd2VyT2JqWydxdWVzdGlvbklkJ10pO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikgJiYgZmlsdGVyZWRRdWVzdGlvblswXVsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gW107XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIGxldCBsaXN0T2ZPcHRpb25zU2VsZWN0ZWQgOiBhbnkgPSBhbnN3ZXJPYmouYW5zd2VyLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIGxpc3RPZk9wdGlvbnNTZWxlY3RlZC5mb3JFYWNoKChzaW5nbGVFbGVtZW50IDogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb25bMF0pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvblswXVsnZG9tYWluVmFsdWVzJ10pKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICBsZXQgZmlsdGVyZWREb21haW5WYWx1ZU9iaiA6IGFueSA9IGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2RvbWFpblZhbHVlcyddLmZpbHRlcigoc2luZ2xlT2JqIDogYW55KSA9PiBzaW5nbGVPYmpbJ2RvbWFpbkludGVybmFsVmFsdWUnXSA9PT0gc2luZ2xlRWxlbWVudCk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkRG9tYWluVmFsdWVPYmopKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXS5wdXNoKHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgICAgICBsYWJlbCA6IGZpbHRlcmVkRG9tYWluVmFsdWVPYmpbMF1bJ2RvbWFpblVpVmFsdWUnXSxcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgICAgICB2YWx1ZSA6IGZpbHRlcmVkRG9tYWluVmFsdWVPYmpbMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXVxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgICAgICB9KTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGFuc3dlck9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddID0gYW5zd2VyT2JqWydhbnN3ZXInXTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIChhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICBsZXQgZmVldEFuc3dlciA9IGFuc3dlck9ialsnYW5zd2VyJ10uc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoYW5zd2VyT2JqWydhbnN3ZXInXSkgJiYgYW5zd2VyT2JqWydhbnN3ZXInXS5pbmNsdWRlcygnLicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddID0gZmVldEFuc3dlclswXTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J10gPSBmZWV0QW5zd2VyWzFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IGZlZXRBbnN3ZXJbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gJzAnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25SZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyAgIGlmIChzaW5nbGVRdWVzdGlvblJlc3BvbnNlWydxdWVzdGlvbklkJ10gPT09IGFuc3dlck9ialsncXVlc3Rpb25JZCddICYmIHNpbmdsZVF1ZXN0aW9uUmVzcG9uc2VbJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbYW5zd2VyT2JqLnF1ZXN0aW9uSWRdID0gYW5zd2VyT2JqLmFuc3dlcjtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyBsZXQgbGFJbmRleDogYW55ID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvblsncm9sZSddKTtcclxuXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSAmJiBmaWx0ZXJlZFF1ZXN0aW9uWzBdWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RFQ0xBUkFUSU9OJykge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgIC8vICAgICAgICAgICAgIGlmIChhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdMaWZlTWVkaUNuZHRuJyB8fCBhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdNZWRpQ25kdG4nKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIGlzU3ViUXVlc3Rpb25FeGlzdHMgPSB0cnVlO1xyXG5cclxuXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcInVybFBhcmFtRm9yRGlzZWFzZVwiOiBcIm1kZWljYWxIaXN0b3J5XCIsXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgXCJhcGlVcmxcIjogXCJodHRwczovL3ByZXByb2QtZGlyZWN0cG9ydGFsbGlmZS5nb2RpZ2l0LmNvbS9EaXJlY3RQb3J0YWxMaWZlL2xpZmUvZmV0Y2hTdWJRdWVzdGlvbnNcIixcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcInVybFBhcmFtRm9yUGVyc29uVXdJZFwiOiBcInBlcnNvblVXSURcIixcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBcInRva2VuQ29va2llUGFyYW1cIjogXCJ2M1Rva2VuXCIsXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vICAgXCJpc1NlbmRUb2tlblwiOiBmYWxzZVxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIHRoaXMubWFzdGVyU2VydmljZS5nZXRTdWJRdWVzdGlvbnModGhpcy5maWVsZCgpPy5jb25maWdEYXRhLCBhbnN3ZXJPYmpbJ2Fuc3dlciddLCBhbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgIChzdWJRdWVzdGlvblJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIC8vIHRoaXMubG9hZGVyU2VydmljZS5kaXNwbGF5KGZhbHNlKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uUmVzcG9uc2UpKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2UuZm9yRWFjaCgoc3ViUXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddID0gdHJ1ZTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBmYWxzZTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pICYmXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddKVxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXSA9IFtzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddXTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10pXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dFF1ZXN0aW9uT2JqZWN0OiBhbnkgPSBzdWJRdWVzdGlvblJlc3BvbnNlLmZpbHRlcihcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0OiBhbnkpID0+IG9iamVjdFsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0UXVlc3Rpb25PYmplY3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRRdWVzdGlvbk9iamVjdFswXVsnYW5zd2VyZWRWYWx1ZSddID0gc2luZ2xlUXVlc3Rpb25SZWxhdGlvbk9ialsncGFyZW50UXVlc3Rpb25WYWx1ZSddO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddID0gdGhpcy5tZWRpYWxRdWVzdGlvblJlc3BvbnNlKClbJ2RvbWFpblZhbHVlcyddW1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXVxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIF07XHJcblxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydmaWVsZCddID0gdGhpcy5nZXRGaWVsZChzdWJRdWVzdGlvbik7XHJcblxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzdWJEb21haW46IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnN1Yk1lZGljYWxRdWVzdGlvbnNEb21haW5JbnRlcm5hbFZhbHVlc0xpc3QucHVzaChzdWJEb21haW5bJ2RvbWFpbkludGVybmFsVmFsdWUnXSk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gICB9KTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkaXN0aW5jdFN0ZXBzLmluY2x1ZGVzKHN1YlF1ZXN0aW9uWydjbHVzdGVySWQnXSkpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0U3RlcHMucHVzaChzdWJRdWVzdGlvblsnY2x1c3RlcklkJ10pO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uUmVzcG9uc2Uuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGFbJ3N0ZXAnXSAtIGJbJ3N0ZXAnXSB8fCBhWydkaXNwbGF5T3JkZXInXSAtIGJbJ2Rpc3BsYXlPcmRlciddKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5mb3JFYWNoKChzdGVwczogYW55LCBpbmQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZE9iajogYW55ID0gc3ViUXVlc3Rpb25SZXNwb25zZS5maWx0ZXIoKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSA9PT0gc3RlcHMpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXA6IDEwMDAgKyBpbmQsXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbnM6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRPYmopID8gZmlsdGVyZWRPYmogOiBbXSxcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25OYW1lOiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkT2JqKSA/IGZpbHRlcmVkT2JqWzBdWyd0aXRsZSddIDogJycsXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBpc01lZGljYWxTdWJRdWVzdGlvbjogdHJ1ZSxcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dTZWN0aW9uOiB0cnVlLFxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogYW5zd2VyT2JqWydwZXJzb25VV0lkJ10udG9TdHJpbmcoKSxcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIC8vIGxldCBMYUluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3TWFzdGVyT2JqLmZpbmRJbmRleChcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAvLyAgIChzaW5nbGU6IGFueSkgPT4gc2luZ2xlWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvblsncm9sZSddXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdC5wdXNoKG9iaik7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlID0gc3ViUXVlc3Rpb25SZXNwb25zZTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IGxhSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uWydyb2xlJ10pO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10gPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uY29uY2F0KHRoaXMubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZGlzYWJsZUNvbmZpcm1hdGlvbkJ1dHRvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmRpc2FibGVDb25maXJtYXRpb25CdXR0b24gPSB0cnVlO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgLy8gdGhpcy5sb2FkZXJTZXJ2aWNlLmRpc3BsYXkoZmFsc2UpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIGVsc2Uge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgLy8gICB0aGlzLmxvYWRlclNlcnZpY2UuZGlzcGxheShmYWxzZSk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgaWYgKHR5cGVvZiBhbnN3ZXJPYmouYW5zd2VyID09PSAnc3RyaW5nJyAmJiBhbnN3ZXJPYmouYW5zd2VyICE9PSAnWScgJiYgYW5zd2VyT2JqLmFuc3dlciAhPT0gJ04nKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIGlmIChhbnN3ZXJPYmouYW5zd2VyLmluY2x1ZGVzKCcsJykpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICBhbnN3ZXJPYmouYW5zd2VyLnNwbGl0KCcsJykuZm9yRWFjaCgoYW5zd2VyOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlcl0gPSB0cnVlO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgIC8vIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5hbnN3ZXJdID0gdHJ1ZTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICAgICAgICAgIHRoaXMuICB1cGRhdGVQZXJzb25Vd0Fuc3dlcnMoYW5zd2VyT2JqKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gICAgICAgfSk7XHJcbiAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAvLyB9KTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XHJcblxyXG4gICAgdGhpcy5tZWRRdWVzdGlvbk9ialsnaGVpZ2h0T2JqZWN0VHlwZXMnXSA9IHtcclxuICAgICAgY29udHJvbFN0eWxlOiB7XHJcbiAgICAgICAgY29udHJvbFR5cGU6ICdzZWxlY3QnLFxyXG4gICAgICAgIGJvcmRlckNvbG9yOiAnI2ZmZmZmZicsXHJcbiAgICAgICAgYm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgYm9yZGVyUmFkaXVzOiBudWxsLFxyXG4gICAgICAgIGZvbnRTaXplOiAnMTZweCcsXHJcbiAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXHJcbiAgICAgICAgZm9udEZhbWlseTogJ011bGlzaCcsXHJcbiAgICAgICAgY29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAnI0ZGRkZGRicsXHJcbiAgICAgICAgY2FyZXRDb2xvcjogJyNmZmJiMDAnLFxyXG4gICAgICAgIG51ZGdlRGlzcGxheUltYWdlOiBudWxsLFxyXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uQmdDb2xvcjogJyNGRkZGRkYnLFxyXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uQ29sb3I6ICcjNDQ0NDQ0JyxcclxuICAgICAgICBkcm9wZG93bk9wdGlvbkZvbnRXZWlnaHQ6ICc0MDAnLFxyXG4gICAgICAgIHdpZHRoOiBudWxsLFxyXG4gICAgICAgIGZvY3VzQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgZm9jdXNCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgIGZvY3VzQmFja2dyb3VuZDogbnVsbCxcclxuICAgICAgICBmb2N1c0NvbG9yOiAnIzQ0NDQ0NCcsXHJcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkJnQ29sb3I6IG51bGwsXHJcbiAgICAgICAgZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yOiBudWxsLFxyXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Gb250V2VpZ2h0OiBudWxsLFxyXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJMZWZ0OiBudWxsLFxyXG4gICAgICAgIGZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXM6IG51bGwsXHJcbiAgICAgICAgaG92ZXJCb3JkZXJDb2xvcjogJyNmZmZmZmYnLFxyXG4gICAgICAgIGhvdmVyQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgaG92ZXJDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgIGRpc2FibGVDb2xvcjogJyNFQ0VDRUMnLFxyXG4gICAgICAgIGRpc2FibGVCYWNrZ3JvdW5kOiAnI0VDRUNFQycsXHJcbiAgICAgICAgZXJyb3JCb3JkZXJDb2xvcjogJyNFRTAwMDAnLFxyXG4gICAgICAgIGVycm9yQm9yZGVyV2lkdGg6ICcxLjVweCcsXHJcbiAgICAgICAgZXJyb3JDb2xvcjogJyM0NDQ0NDQnLFxyXG4gICAgICAgIGNyZWF0ZWREYXRlOiBudWxsLFxyXG4gICAgICAgIHBhZGRpbmc6IG51bGwsXHJcbiAgICAgICAgbWFyZ2luOiBudWxsLFxyXG4gICAgICAgIGlzTWFzdGVyQ3NzOiBudWxsLFxyXG4gICAgICAgIGNvbnRyb2xNZXRhSWQ6ICdMSV9DT01fR0VOX0NUUkxfc2VsZWN0X2Rvd25sb2FkRG9jdW1lbnRzX1YxJyxcclxuICAgICAgICBib3JkZXJTdHlsZTogbnVsbCxcclxuICAgICAgICBoZWlnaHQ6IG51bGwsXHJcbiAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxyXG4gICAgICAgIG1heEhlaWdodDogbnVsbCxcclxuICAgICAgICBtaW5XaWR0aDogbnVsbCxcclxuICAgICAgICBtYXhXaWR0aDogbnVsbCxcclxuICAgICAgICBjc3NDbGFzczogbnVsbCxcclxuICAgICAgfSxcclxuICAgICAgZmllbGROYW1lOiBudWxsLFxyXG4gICAgICBsYWJlbDogJ2ZlZXQgLyBpbmNoZXMnLFxyXG4gICAgICBwbGFjZUhvbGRlcjogJycsXHJcbiAgICAgIG1ldGFJZDogJycsXHJcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgaXNEaXNhYmxlOiBmYWxzZSxcclxuICAgICAgdmFsaWRhdG9yczoge1xyXG4gICAgICAgIGlzUmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICAgIHJlcXVpcmVkTWVzc2FnZTogJ1RoaXMgZmllbGQgY2Fubm90IGJlIGVtcHR5JyxcclxuICAgICAgICBtaW5MZW5ndGg6IG51bGwsXHJcbiAgICAgICAgbWluTGVuZ3RoTWVzc2FnZTogbnVsbCxcclxuICAgICAgICBtYXhMZW5ndGg6IDE1MCxcclxuICAgICAgICBtYXhMZW5ndGhNZXNzYWdlOiBudWxsLFxyXG4gICAgICAgIHBhdHRlcm46IG51bGwsXHJcbiAgICAgICAgcGF0dGVybk1lc3NhZ2U6ICcnLFxyXG4gICAgICB9LFxyXG4gICAgICBvcHRpb25zOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGFiZWw6ICdDbScsXHJcbiAgICAgICAgICB2YWx1ZTogJ0NNJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxhYmVsOiAnRmVldCcsXHJcbiAgICAgICAgICB2YWx1ZTogJ0ZFRVQnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICAgIGNzc0NsYXNzOiBudWxsLFxyXG4gICAgICB2YWx1ZTogbnVsbCxcclxuICAgICAgc3R5bGU6IG51bGwsXHJcbiAgICAgIGltYWdlVXJsOiBudWxsLFxyXG4gICAgICBjb25maWdEYXRhOiB7fSxcclxuICAgICAgbWV0YURhdGFPYmo6IG51bGwsXHJcbiAgICAgIGlzU2hvd0xhYmVsOiBmYWxzZSxcclxuICAgICAgaXNNYXN0ZXJDb250cm9sOiBmYWxzZSxcclxuICAgICAgY29udHJvbFR5cGU6ICdzZWxlY3QnLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVBlcnNvblV3QW5zd2VycyhhbnN3ZXJPYmo6IGFueSkge1xyXG5cclxuICAgIGlmIChhbnN3ZXJPYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnKSB7XHJcbiAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSA9IGFuc3dlck9ialsnYW5zd2VyJ107XHJcbiAgICB9XHJcbiAgICBpZiAoYW5zd2VyT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhURicpIHtcclxuICAgICAgbGV0IGZlZXRBbnN3ZXIgPSBhbnN3ZXJPYmpbJ2Fuc3dlciddLnNwbGl0KCcuJyk7XHJcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGFuc3dlck9ialsnYW5zd2VyJ10pICYmIGFuc3dlck9ialsnYW5zd2VyJ10uaW5jbHVkZXMoJy4nKSkge1xyXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSA9IGZlZXRBbnN3ZXJbMF07XHJcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddID0gZmVldEFuc3dlclsxXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J10gPSBmZWV0QW5zd2VyWzBdO1xyXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSA9ICcwJztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLm1lZGlhbFF1ZXN0aW9uUmVzcG9uc2UoKVsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBhbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSk7XHJcbiAgICBpZighdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvblswXSkpIHtcclxuICAgICAgaWYoZmlsdGVyZWRRdWVzdGlvblswXVsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcclxuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1thbnN3ZXJPYmoucXVlc3Rpb25JZF0gPSBhbnN3ZXJPYmouYW5zd2VyLnNwbGl0KCcsJyk7XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW2Fuc3dlck9iai5xdWVzdGlvbklkXSA9IGFuc3dlck9iai5hbnN3ZXI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGFuc3dlck9iai5wZXJzb25VV0FjdGl2aXR5UmVzcG9uc2VFbnRpdHkpKSB7XHJcbiAgICAgIGFuc3dlck9iai5wZXJzb25VV0FjdGl2aXR5UmVzcG9uc2VFbnRpdHkuZm9yRWFjaCgoc3VicXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlUGVyc29uVXdBbnN3ZXJzKHN1YnF1ZXN0aW9uKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc2F2ZVF1ZXN0aW9uRGV0YWlscygpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja0lmVmFsdWVJc0VtcHR5KHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICB2YWx1ZSA9PT0gbnVsbCB8fFxyXG4gICAgICB2YWx1ZSA9PT0gJycgfHxcclxuICAgICAgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB8fFxyXG4gICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgPT09ICd7fSdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRUaXRsZUNhc2UoaGVhZGVyOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKGhlYWRlcikge1xyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkhlYWRlci5pbmNsdWRlcyhoZWFkZXIudG9Mb2NhbGVMb3dlckNhc2UoKSkpIHtcclxuICAgICAgICBsZXQgdmFsID0gaGVhZGVyLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgcmV0dXJuIHZhbFswXS50b1VwcGVyQ2FzZSgpICsgJyAnICsgdGhpcy50b1RpdGxlQ2FzZSh2YWxbMV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChoZWFkZXIudG9VcHBlckNhc2UoKSA9PT0gJ0ZBVENBIERFVEFJTFMnKSB7XHJcbiAgICAgICAgICByZXR1cm4gaGVhZGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy50b1RpdGxlQ2FzZShoZWFkZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b1RpdGxlQ2FzZSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAucmVwbGFjZShcclxuICAgICAgICAgIC9cXHdcXFMqL2csXHJcbiAgICAgICAgICAodHh0OiBhbnkpID0+IHR4dFswXS50b1VwcGVyQ2FzZSgpICsgdHh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEZpZWxkKHF1ZXN0aW9uT2JqOiBhbnkpIHtcclxuICAgIGxldCBvcHRpb25zT2JqOiBhbnkgPSBbXTtcclxuICAgIGxldCBjb250cm9sU3R5bGUgOiBhbnkgPSB7fTtcclxuICAgIGlmIChxdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pIHtcclxuICAgICAgcXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHNpbmdsZU9wdGlvblZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICBvcHRpb25zT2JqLnB1c2goe1xyXG4gICAgICAgICAgbGFiZWw6IHNpbmdsZU9wdGlvblZhbHVlWydkb21haW5VaVZhbHVlJ10sXHJcbiAgICAgICAgICB2YWx1ZTogc2luZ2xlT3B0aW9uVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBsZXQgbWluTGVuZ3RoOiBhbnkgPSBudWxsO1xyXG4gICAgbGV0IG1heExlbmd0aDogYW55ID0gMjAwO1xyXG4gICAgbGV0IHBhdHRlcm46IGFueSA9IG51bGw7XHJcbiAgICBsZXQgcGF0dGVybk1lc3NhZ2U6IGFueSA9IG51bGw7XHJcbiAgICBsZXQgY29uZmlnRGF0YTogYW55ID0gIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGEpXHJcbiAgICAgID8gdGhpcy5maWVsZCgpPy5jb25maWdEYXRhXHJcbiAgICAgIDoge307XHJcblxyXG4gICAgaWYocXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAgJ1JBRElPIEJVVFRPTicgfHwgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnQURETU9SRScpIHtcclxuICAgICAgY29udHJvbFN0eWxlID0ge1xyXG4gICAgICAgICAgICAgICAgICBcImNvbnRyb2xUeXBlXCI6IFwicmFkaW9cIixcclxuICAgICAgICAgICAgICAgICAgXCJib3JkZXJDb2xvclwiOiBcIiNEQURBREFcIixcclxuICAgICAgICAgICAgICAgICAgXCJib3JkZXJXaWR0aFwiOiBcIjFweFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImJvcmRlclJhZGl1c1wiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImZvbnRTaXplXCI6IFwiMTJweFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvbnRXZWlnaHRcIjogXCI0MDBcIixcclxuICAgICAgICAgICAgICAgICAgXCJmb250RmFtaWx5XCI6IFwiTXVsaXNoXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjNDQ0NDQ0XCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZFwiOiBcIiNGRkZGRkZcIixcclxuICAgICAgICAgICAgICAgICAgXCJjYXJldENvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwibnVkZ2VEaXNwbGF5SW1hZ2VcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkJnQ29sb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJkcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZHJvcGRvd25PcHRpb25Gb250V2VpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwid2lkdGhcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0JvcmRlcldpZHRoXCI6IFwiMXB4XCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNCb3JkZXJDb2xvclwiOiBcIiNmZmJiMDBcIixcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0JhY2tncm91bmRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0NvbG9yXCI6IFwiIzQ0NDQ0NFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25CZ0NvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkNvbG9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9jdXNEcm9wZG93bk9wdGlvbkZvbnRXZWlnaHRcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJmb2N1c0Ryb3Bkb3duT3B0aW9uQm9yZGVyTGVmdFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImZvY3VzRHJvcGRvd25PcHRpb25Cb3JkZXJSYWRpdXNcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJob3ZlckJvcmRlckNvbG9yXCI6IFwiI0RBREFEQVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImhvdmVyQm9yZGVyV2lkdGhcIjogXCIxcHhcIixcclxuICAgICAgICAgICAgICAgICAgXCJob3ZlckNvbG9yXCI6IFwiIzQ0NDQ0NFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImRpc2FibGVDb2xvclwiOiBcIiNFQ0VDRUNcIixcclxuICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlQmFja2dyb3VuZFwiOiBcIiNFQ0VDRUNcIixcclxuICAgICAgICAgICAgICAgICAgXCJlcnJvckJvcmRlckNvbG9yXCI6IFwiI0RBREFEQVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImVycm9yQm9yZGVyV2lkdGhcIjogXCIxcHhcIixcclxuICAgICAgICAgICAgICAgICAgXCJlcnJvckNvbG9yXCI6IFwiIzQ0NDQ0NFwiLFxyXG4gICAgICAgICAgICAgICAgICBcImNyZWF0ZWREYXRlXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwicGFkZGluZ1wiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcIm1hcmdpblwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImlzTWFzdGVyQ3NzXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiY29udHJvbE1ldGFJZFwiOiBcIkFMTF9DT01fR0VOX0NUUkxfcmFkaW9fbm9taW5lZUdlbmRlcl9WMVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImJvcmRlclN0eWxlXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwibWluSGVpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwibWF4SGVpZ2h0XCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwibWluV2lkdGhcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJtYXhXaWR0aFwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImNzc0NsYXNzXCI6IG51bGxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShxdWVzdGlvbk9ialsndmFsaWRhdGlvbnMnXSkpIHtcclxuICAgICAgbGV0IHZhbGlkYXRpb25PYmo6IGFueSA9IEpTT04ucGFyc2UocXVlc3Rpb25PYmpbJ3ZhbGlkYXRpb25zJ10pO1xyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh2YWxpZGF0aW9uT2JqWydNaW5WYWx1ZSddKSkge1xyXG4gICAgICAgIG1pbkxlbmd0aCA9IHZhbGlkYXRpb25PYmpbJ01pblZhbHVlJ107XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodmFsaWRhdGlvbk9ialsnTWF4VmFsdWUnXSkpIHtcclxuICAgICAgICBtYXhMZW5ndGggPSB2YWxpZGF0aW9uT2JqWydNYXhWYWx1ZSddO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHZhbGlkYXRpb25PYmpbJ1R5cGUnXSkpIHtcclxuICAgICAgICBwYXR0ZXJuID0gdmFsaWRhdGlvbk9ialsnVHlwZSddID09PSAnTnVtZXJpYycgPyAnXlswLTldKyQnIDogbnVsbDtcclxuICAgICAgICBwYXR0ZXJuTWVzc2FnZSA9XHJcbiAgICAgICAgICB2YWxpZGF0aW9uT2JqWydUeXBlJ10gPT09ICdOdW1lcmljJ1xyXG4gICAgICAgICAgICA/ICdPbmx5IG51bWJlcnMgYXJlIGFsbG93ZWQuJ1xyXG4gICAgICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICAgIGlmKHZhbGlkYXRpb25PYmpbJ1R5cGUnXSA9PT0gJ051bWVyaWMnKSB7XHJcbiAgICAgICAgICBjb25maWdEYXRhWydpc0FsbG93TnVtYmVyc0luVGV4dEZpZWxkcyddID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbGlkYXRpb25PYmpbJ1R5cGUnXSA9PT0gJ051bWVyaWMnKSB7XHJcbiAgICAgICAgICBtYXhMZW5ndGggPSAnOScucmVwZWF0KE51bWJlcihtYXhMZW5ndGgpKTtcclxuICAgICAgICAgIGNvbmZpZ0RhdGFbJ21heFZhbHVlJ10gPSBtYXhMZW5ndGg7XHJcbiAgICAgICAgICBjb25maWdEYXRhWydtaW5WYWx1ZSddID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjb25maWdEYXRhOiBjb25maWdEYXRhLFxyXG4gICAgICBjb250cm9sU3R5bGU6IGNvbnRyb2xTdHlsZSxcclxuICAgICAgY29udHJvbFR5cGU6XHJcbiAgICAgICAgcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnRlJFRSBURVhUJ1xyXG4gICAgICAgICAgPyAndGV4dCdcclxuICAgICAgICAgIDogcXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUkFESU8gQlVUVE9OJyB8fFxyXG4gICAgICAgICAgICBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdBRERNT1JFJ1xyXG4gICAgICAgICAgPyAncmFkaW8nXHJcbiAgICAgICAgICA6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyB8fFxyXG4gICAgICAgICAgICBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdERUNMQVJBVElPTidcclxuICAgICAgICAgID8gJ2NoZWNrYm94J1xyXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUidcclxuICAgICAgICAgID8gJ2RhdGUnXHJcbiAgICAgICAgICA6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RST1BET1dOJ1xyXG4gICAgICAgICAgPyAnc2VsZWN0J1xyXG4gICAgICAgICAgOiBxdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdET0NVUExPQUQnXHJcbiAgICAgICAgICA/ICdmaWxlJ1xyXG4gICAgICAgICAgOiAnJyxcclxuICAgICAgZmllbGROYW1lOiBxdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSxcclxuICAgICAgaXNEaXNhYmxlOiBmYWxzZSxcclxuICAgICAgbGFiZWw6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblRleHQnXSxcclxuICAgICAgcGxhY2VIb2xkZXI6IHF1ZXN0aW9uT2JqWydxdWVzdGlvblRleHQnXSxcclxuICAgICAgdmFsaWRhdG9yczoge1xyXG4gICAgICAgIGlzUmVxdWlyZWQ6IHF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICBtaW5MZW5ndGgsXHJcbiAgICAgICAgbWF4TGVuZ3RoLFxyXG4gICAgICAgIHBhdHRlcm4sXHJcbiAgICAgICAgcGF0dGVybk1lc3NhZ2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIGNzc0NsYXNzOiBcIm1iLTJcIixcclxuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxyXG4gICAgICBvcHRpb25zOiBvcHRpb25zT2JqLFxyXG4gICAgICBpc1Nob3dMYWJlbDogdHJ1ZSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZW1vdmVTdWJRdWVzdGlvblZhbHVlcyhxdWVzdGlvbj86IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coJ3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcycsIHRoaXMucXVlc3Rpb25MaXN0KVxyXG4gICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5xdWVzdGlvbkxpc3QpKSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddKSkge1xyXG4gICAgICAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvd1F1ZXN0aW9uKHNpbmdsZVF1ZXN0aW9uKSkge1xyXG4gICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGlzTm9uZUluRG9tYWluVmFsdWVzOiBhbnkgPSBzaW5nbGVRdWVzdGlvbltcclxuICAgICAgICAgICAgICAgICAgJ2RvbWFpblZhbHVlcydcclxuICAgICAgICAgICAgICAgIF0uZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlT2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlT2JqWydkb21haW5VaVZhbHVlJ10udG9VcHBlckNhc2UoKSA9PT0gJ05PTkUnXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goXHJcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShpc05vbmVJbkRvbWFpblZhbHVlcykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzTm9uZUluRG9tYWluVmFsdWVzWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTm9uZUluRG9tYWluVmFsdWVzWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbmUgaXMgc2VsZWN0ZWRcclxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2luZ2xlRG9tYWluVmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhbGwgc2VsZWN0ZWQgY2hlY2tib3ggcXVlc3Rpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWUuZG9tYWluVWlWYWx1ZS50b1VwcGVyQ2FzZSgpICE9PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05PTkUnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZS5pc0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlLmlzRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gbGV0IGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3Q6IGFueSA9IHRoaXMuaXNCbG9ja2VkUXVlc3Rpb25zTGlzdC5maWx0ZXIoKHNpbmdsZUJsb2NrZWRPYmo6IGFueSkgPT4gc2luZ2xlQmxvY2tlZE9ialsnc2VjdGlvblRpdGxlJ10udHJpbSgpID09PSBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRyaW0oKSk7XHJcbiAgICAgICAgc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXSA9ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXHJcbiAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3QpKSB7XHJcbiAgICAgICAgLy8gICBpZiAoaXNTZWN0aW9uRXhpc3RzSW5CbG9ja2VkTGlzdFswXS5pc0Jsb2NrZWRGb3JDdXN0b21lckZsb3cgJiYgIXRoaXMubG9hZGluZ0FnZW50cG9ydGFsKSB7XHJcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgbGV0IGZpbHRlcmVkSW5kZXg6IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pO1xyXG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gICAgICAgbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtmaWx0ZXJlZEluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsncXVlc3Rpb25JZCddKTtcclxuICAgICAgICAvLyAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFF1ZXN0aW9uKSkge1xyXG4gICAgICAgIC8vICAgICAgICAgZmlsdGVyZWRRdWVzdGlvblswXVsnaXNTaG93UXVlc3Rpb25JblVJJ10gPSBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddO1xyXG4gICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAvLyAgICAgfSk7XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gICBpZiAoKGlzU2VjdGlvbkV4aXN0c0luQmxvY2tlZExpc3RbMF0uaXNCbG9ja2VkRm9yQWdlbnRGbG93IHx8IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FnZW50Q2hhbm5lbCcpID09PSAnRDIwJyB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhZ2VudENoYW5uZWwnKSA9PT0gJ0QwNScgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWdlbnRDaGFubmVsJykgPT09ICdEMDYnKSAmJiB0aGlzLmxvYWRpbmdBZ2VudHBvcnRhbCkge1xyXG4gICAgICAgIC8vICAgICBzaW5nbGVTZWN0aW9uWydzaG93U2VjdGlvbiddID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgIGxldCBmaWx0ZXJlZEluZGV4OiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ10uZmluZEluZGV4KChzaW5nbGVQZXJzb25PYmo6IGFueSkgPT4gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKTtcclxuICAgICAgICAvLyAgICAgc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZm9yRWFjaCgoc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgIC8vICAgICAgIGxldCBmaWx0ZXJlZFF1ZXN0aW9uOiBhbnkgPSB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bZmlsdGVyZWRJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigoc2luZ2xlUXVlc3Rpb246IGFueSkgPT4gc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT0gc2luZ2xlUXVlc3Rpb25PYmpJblNlY3Rpb25bJ3F1ZXN0aW9uSWQnXSk7XHJcbiAgICAgICAgLy8gICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRRdWVzdGlvbikpIHtcclxuICAgICAgICAvLyAgICAgICAgIGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gc2luZ2xlU2VjdGlvblsnc2hvd1NlY3Rpb24nXTtcclxuICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgLy8gICAgIH0pO1xyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBsZXQgaGlkZGVuUXVlc3Rpb25zOiBhbnkgPSB0aGlzLnF1ZXN0aW9uTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgICAoc2luZ2xlU2VjdGlvbk9iajogYW55KSA9PiAhc2luZ2xlU2VjdGlvbk9ialsnc2hvd1NlY3Rpb24nXVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoaWRkZW5RdWVzdGlvbnMpKSB7XHJcbiAgICAgICAgICBoaWRkZW5RdWVzdGlvbnMuZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goXHJcbiAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqSW5TZWN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gbGV0IGZpbHRlcmVkUXVlc3Rpb246IGFueSA9IHRoaXMucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChzaW5nbGVRdWVzdGlvbjogYW55KSA9PiBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PSBzaW5nbGVRdWVzdGlvbk9iakluU2VjdGlvblsncXVlc3Rpb25JZCddKTtcclxuICAgICAgICAgICAgICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGZpbHRlcmVkUXVlc3Rpb24pKSB7XHJcbiAgICAgICAgICAgICAgICAvLyAgIGZpbHRlcmVkUXVlc3Rpb25bMF1bJ2lzU2hvd1F1ZXN0aW9uSW5VSSddID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnF1ZXN0aW9uTGlzdC5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gYVsnc3RlcCddIC0gYlsnc3RlcCddKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZygncXVlc3Rpb25zIGxpc3QnLCB0aGlzLnF1ZXN0aW9uTGlzdCk7XHJcbiAgICBjb25zb2xlLmxvZygncXVlc3Rpb25zIGFuc3dlcnMnLCB0aGlzLnBlcnNvblV3QW5zd2Vycyk7XHJcbiAgICB0aGlzLnNhdmVRdWVzdGlvbkRldGFpbHMoKTtcclxuICB9XHJcblxyXG4gIHNob3dRdWVzdGlvbihjdXJyZW50UXVlc3Rpb246IGFueSkge1xyXG4gICAgbGV0IHNob3dRdWVzdGlvbjogYW55ID0gZmFsc2U7XHJcbiAgICBsZXQgc3ViUXVlc3Rpb25zOiBhbnkgPSBbXTtcclxuICAgIC8vIGxldCBjdXJyZW50U2VjdGlvbkluZGV4OiBhbnkgPSBxdWVzdGlvbnNSZXNwb25zZVsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gcGVyc29uUm9sZSlcclxuICAgIC8vIGxldCByb2xlID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2N1cnJlbnRTZWN0aW9uSW5kZXhdWydyb2xlJ11cclxuXHJcbiAgICB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbMF0ucXVlc3Rpb25MaXN0LmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgbGV0IGlzU3ViUXVlc3Rpb25PYmplY3Q6IGFueSA9IFtdO1xyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddKSkge1xyXG4gICAgICAgIGlzU3ViUXVlc3Rpb25PYmplY3QgPSBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddLmZpbHRlcihcclxuICAgICAgICAgIChxdWVzdGlvblJlbGF0aW9uT2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uUmVsYXRpb25PYmpbJ25leHRRdWVzdGlvbklkJ10gPT09XHJcbiAgICAgICAgICAgIGN1cnJlbnRRdWVzdGlvblsncXVlc3Rpb25JZCddXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNTdWJRdWVzdGlvbk9iamVjdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgc3ViUXVlc3Rpb25zLnB1c2goc2luZ2xlUXVlc3Rpb24pO1xyXG4gICAgICAgIGlzU3ViUXVlc3Rpb25PYmplY3QuZm9yRWFjaCgoc2luZ2xlU3ViUXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddICE9PSAnQ0hFQ0tCT1gnICYmXHJcbiAgICAgICAgICAgICAgc2luZ2xlU3ViUXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uVmFsdWUnXS50b1N0cmluZygpWzBdICE9PSAnIScgJiZcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSA9PT1cclxuICAgICAgICAgICAgICAgIHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ10pIHx8XHJcbiAgICAgICAgICAgIChzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddLnRvU3RyaW5nKClbMF0gPT09ICchJyAmJlxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXVxyXG4gICAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSAhPT1cclxuICAgICAgICAgICAgICAgIHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgLnNwbGl0KCchJylbMV0pIHx8XHJcbiAgICAgICAgICAgIChzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgICApICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0/LmluY2x1ZGVzKHNpbmdsZVN1YlF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblZhbHVlJ10pXHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0/LmZpbHRlcihcclxuICAgICAgICAgICAgICAvLyAgIChzaW5nbGVPYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgICAvLyAgICAgc2luZ2xlT2JqID09PVxyXG4gICAgICAgICAgICAgIC8vICAgICBzaW5nbGVTdWJRdWVzdGlvblsncGFyZW50UXVlc3Rpb25WYWx1ZSddXHJcbiAgICAgICAgICAgICAgLy8gKS5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzdWJRdWVzdGlvbnMpICYmXHJcbiAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXSlcclxuICAgICkge1xyXG4gICAgICBzaG93UXVlc3Rpb24gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddKSAmJlxyXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgIGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbklkJ11cclxuICAgICAgKSAmJlxyXG4gICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgY3VycmVudFF1ZXN0aW9uWydwYXJlbnRRdWVzdGlvblJlbGF0aW9uJ11bJ3BhcmVudFF1ZXN0aW9uSWQnXVxyXG4gICAgICAgIF1cclxuICAgICAgKSAmJlxyXG4gICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICBjdXJyZW50UXVlc3Rpb25bJ3BhcmVudFF1ZXN0aW9uUmVsYXRpb24nXVsncGFyZW50UXVlc3Rpb25JZCddXHJcbiAgICAgIF0gPT09IGN1cnJlbnRRdWVzdGlvblsncGFyZW50UXVlc3Rpb25SZWxhdGlvbiddWydwYXJlbnRRdWVzdGlvbkFuc3dlciddXHJcbiAgICApIHtcclxuICAgICAgc2hvd1F1ZXN0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChjdXJyZW50UXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnTk9ESVNQTEFZJykge1xyXG4gICAgICBzaG93UXVlc3Rpb24gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBzaG93UXVlc3Rpb247XHJcbiAgfVxyXG5cclxuICBzYXZlUXVlc3Rpb25EZXRhaWxzKCkge1xyXG4gICAgLy8gcmVtb3ZlIGFsbCBjaGVja2JveCBxdWVzdGlvbnMgcHJlc2VudCBpbiB2YWx1ZXNcclxuICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3gpKSB7XHJcbiAgICAgIC8vIGxldCBsaWZlQXNzdXJlZGtleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddKTtcclxuICAgICAgLy8gbGV0IHBvbGljeUFzc3VyZWRLZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ10pO1xyXG4gICAgICAvLyBsZXQgbGlmZUFzc3VyZWRPbmVLZXlzOiBhbnkgPSBPYmplY3Qua2V5cyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRPbmUnXSk7XHJcbiAgICAgIC8vIGxldCBsaWZlQXNzdXJlZFR3b0tleXM6IGFueSA9IE9iamVjdC5rZXlzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZFR3byddKTtcclxuICAgICAgLy8gdGhpcy5wZXJzb25Vd0Fuc3dlcnMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcclxuICAgICAgLy8gICBpZiAoaXNOYU4oTnVtYmVyKHNpbmdsZUtleSkpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkJ11bc2luZ2xlS2V5XSkgJiYgdGhpcy5saXN0T2ZEb21haW5WYWx1ZXNGb3JDaGVja0JveC5pbmNsdWRlcyh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldKSkge1xyXG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3NpbmdsZUtleV07XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KTtcclxuICAgICAgLy8gcG9saWN5QXNzdXJlZEtleXMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcclxuICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWQnXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldKSkge1xyXG4gICAgICAvLyAgICAgZGVsZXRlIHRoaXMucGVyc29uVXdBbnN3ZXJzWydwb2xpY3lIb2xkZXInXVtzaW5nbGVLZXldO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSk7XHJcbiAgICAgIC8vIGxpZmVBc3N1cmVkT25lS2V5cy5mb3JFYWNoKChzaW5nbGVLZXk6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZE9uZSddW3NpbmdsZUtleV0pICYmIHRoaXMubGlzdE9mRG9tYWluVmFsdWVzRm9yQ2hlY2tCb3guaW5jbHVkZXModGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ2xpZmVBc3N1cmVkT25lJ11bc2luZ2xlS2V5XSkpIHtcclxuICAgICAgLy8gICAgIGRlbGV0ZSB0aGlzLnBlcnNvblV3QW5zd2Vyc1sncG9saWN5SG9sZGVyJ11bc2luZ2xlS2V5XTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH0pO1xyXG4gICAgICAvLyBsaWZlQXNzdXJlZFR3b0tleXMuZm9yRWFjaCgoc2luZ2xlS2V5OiBhbnkpID0+IHtcclxuICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbGlmZUFzc3VyZWRUd28nXVtzaW5nbGVLZXldKSAmJiB0aGlzLmxpc3RPZkRvbWFpblZhbHVlc0ZvckNoZWNrQm94LmluY2x1ZGVzKHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZFR3byddW3NpbmdsZUtleV0pKSB7XHJcbiAgICAgIC8vICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ3BvbGljeUhvbGRlciddW3NpbmdsZUtleV07XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KTtcclxuICAgIH1cclxuICAgIC8vIGxldCBoZWlnaHRJbkluY2hlc09iajogYW55ID0gW107XHJcbiAgICAvLyBsZXQgaGVpZ2h0SW5GZWV0T2JqOiBhbnkgPSBbXTtcclxuICAgIC8vIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmo6IGFueSA9IFtdO1xyXG4gICAgbGV0IGlzVmFsaWQ6IGFueSA9IHRydWU7XHJcbiAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9iaikgJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXSkpIHtcclxuICAgIC8vICAgbGV0IGxhSW5kZXg6IGFueSA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddLmZpbmRJbmRleCgoc2luZ2xlUGVyc29uT2JqOiBhbnkpID0+IHNpbmdsZVBlcnNvbk9ialsncm9sZSddID09PSAnbGlmZUFzc3VyZWQnKTtcclxuICAgIC8vICAgaWYgKGxhSW5kZXggIT09IC0xICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bbGFJbmRleF0pKSB7XHJcbiAgICAvLyAgICAgaGVpZ2h0SW5JbmNoZXNPYmogPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtsYUluZGV4XVsncXVlc3Rpb25MaXN0J10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSScpO1xyXG4gICAgLy8gICAgIGhlaWdodEluRmVldE9iaiA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqWydxdWVzdGlvbnNSZXNwb25zZSddW2xhSW5kZXhdWydxdWVzdGlvbkxpc3QnXS5maWx0ZXIoKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFRGJyk7XHJcbiAgICAvLyAgICAgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bbGFJbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVCcpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBhbmQgbm9uIG1lZGljYWwgcXVlc3Rpb25zIDpcclxuICAgIC8vIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9iaikgJiYgaXNWYWxpZCkge1xyXG4gICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmouZm9yRWFjaCgoc2luZ2xlUGVyc29uT2JqOiBhbnksIHNpbmdsZVBlcnNvbkluZGV4OiBhbnkpID0+IHtcclxuICAgIC8vICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddKSAmJiBpc1ZhbGlkKSB7XHJcbiAgICAvLyAgICAgICBsZXQgcm9sZTogYW55ID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdsaWZlQXNzdXJlZCcgPyBcImxpZmUgYXNzdXJlZFwiIDogc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09ICdwb2xpY3lIb2xkZXInID8gXCJwb2xpY3kgaG9sZGVyXCIgOiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkT25lJyA/IFwiSm9pbnQgTGlmZSAxXCIgOiBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSA9PT0gJ2xpZmVBc3N1cmVkVHdvJyA/IFwiSm9pbnQgTGlmZSAyXCIgOiBcIlwiO1xyXG4gICAgLy8gICAgICAgc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXS5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcclxuICAgIC8vICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pICYmIGlzVmFsaWQpIHtcclxuICAgIC8vICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddKSAmJiAoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PSAnVEVMTF9VU19NT1JFJyB8fCBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09ICdCQVNJQ19ERVRBSUxTJykgJiYgaXNWYWxpZCkge1xyXG5cclxuICAgIC8vICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBlbnRlcmVkIGluIGZlZXRcclxuICAgIC8vICAgICAgICAgICAgIGlmICh0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0ZFRVQnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGxldCBoZWlnaHRJbkluY2hlc09iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknKTtcclxuICAgIC8vICAgICAgICAgICAgICAgbGV0IGhlaWdodEluRmVldE9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcigob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmopICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJiAodGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSkgfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSkpKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgIT09IHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBsZXQgcXVlc3Rpb25JZDogYW55ID0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gRmVldCBhbmQgSW5jaGVzIGZvciAnICsgcm9sZVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlcyBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnam9pbnRsaWZlJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAxJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVPTkUnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMicpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDEpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFVFdPJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGluIGNtXHJcbiAgICAvLyAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5DZW50aW1ldGVyT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJyk7XHJcbiAgICAvLyAgICAgICAgICAgICBpZiAodGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J10gPT09ICdDTScgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXSkgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmIGlzVmFsaWQpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddICsgJ18nICsgc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBlbnRlciBIZWlnaHQgaW4gQ00gJyArIHJvbGVcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIEhlaWdodCBpbiBDTSAnICsgcm9sZSwgJ0Nsb3NlJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiAhdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnbGlmZSBhc3N1cmVkJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX1BIJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09PSAnSm9pbnQgTGlmZSAxJykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdKT0lOVExJRkVPTkUnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ0pvaW50IExpZmUgMicpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigxKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnSk9JTlRMSUZFVFdPJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBiYXNpYyBxdWVzdGlvbnNcclxuICAgIC8vICAgICAgICAgICAgIGlmIChcclxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9iaikgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgIC8vICAgICAgICAgICAgICAgaXNWYWxpZCAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnREVDTEFSQVRJT04nICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnaGFyZENvcHlMYW5nJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdQQVNTUE9SVF9VUExPQUQnICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhURicgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFRJJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAoKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXSkpIHx8XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQoc2luZ2xlUXVlc3Rpb25PYmosIHNpbmdsZVBlcnNvbk9ialsncm9sZSddKSkpICYmIGlzVmFsaWRcclxuICAgIC8vICAgICAgICAgICAgICkge1xyXG4gICAgLy8gICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgZW50ZXIgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIGVudGVyIGFsbCB0aGUgZGV0YWlscyBpbiAnICsgc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSArICcgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gJ3BvbGljeSBob2xkZXInKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJqb2ludCBsaWZlIGNhc2VcIik7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgICAgICBpZiAoXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydpc1Nob3dRdWVzdGlvbkluVUknXSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICByZWRpcmVjdFxyXG4gICAgLy8gICAgICAgICAgICAgKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgIGxldCBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqOiBhbnkgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnF1ZXN0aW9uc1Bhc3Nwb3J0VXBsb2FkT2JqLmZpbHRlcigoc2luZ2xlT2JqOiBhbnkpID0+IChzaW5nbGVPYmpbJ3BlcnNvblR5cGUnXSA9PT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gJiYgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZU9ialsnZG1zSWQnXSkpKTtcclxuICAgIC8vICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9iaikpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQoYCR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncXVlc3Rpb25UeXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsndHlwZSddfV8ke2ZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ3BlcnNvblR5cGUnXX1gKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2hhcmVkU2VydmljZS5pc01vYmlsZVZpZXcoKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGVcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLm9wZW5TbmFja0JhcignUGxlYXNlIHVwbG9hZCBwYXNzcG9ydCAnICsgZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsnbGFiZWwnXSArICcgZG9jdW1lbnQgZm9yICcgKyByb2xlLCAnQ2xvc2UnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgdGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMuaXNTYW1lUG9saWN5SG9sZGVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9MQScpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ3NpbmdsZWxpZmUnICYmICF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT09ICdsaWZlIGFzc3VyZWQnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWIoMCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZUNoaXAoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb2xlID09PSAncG9saWN5IGhvbGRlcicpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfUEgnKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdqb2ludGxpZmUnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiam9pbnQgbGlmZSBjYXNlXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgZGVjbGFyYXRpb24gcXVlc3Rpb25zXHJcbiAgICAvLyAgICAgICAgICAgICBpZiAoaXNWYWxpZCAmJiBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nXHJcbiAgICAvLyAgICAgICAgICAgICApIHtcclxuICAgIC8vICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzKSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAgICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdKSAmJlxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgJiZcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pKSB7XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiID0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ107XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmlzTWFuZGF0b3J5RmllbGQgJiYgIXNhdmVkcmFmdCAmJiByZWRpcmVjdCkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uSWQgKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBzdWIgcXVlc3Rpb25zXHJcbiAgICAvLyAgICAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICBpZiAoXHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICB0aGlzLnNob3dTdWJRdWVzdGlvbihxdWVzdGlvbikgJiZcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgKChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSkgfHxcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQocXVlc3Rpb24sICdsaWZlQXNzdXJlZCcpKSlcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICApIHtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBhbnN3ZXIgYWxsIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSArICcgJyArIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXVxyXG4gICAgLy8gICAgICAgICAgICAgLy8gICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgLy8gfVxyXG4gICAgLy8gICAgICAgICAgIH0pO1xyXG5cclxuICAgIC8vICAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBmYXRjaCBkZWNsYXJhdGlvblxyXG4gICAgLy8gICAgICAgICAgIC8vIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvbi5xdWVzdGlvbnMpICYmIGlzVmFsaWQpe1xyXG4gICAgLy8gICAgICAgICAgIC8vIHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOmFueSkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgaWYoaXNWYWxpZCAmJiBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiYgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICApe1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgIGlmKCBpc1ZhbGlkICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzKSAmJlxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSAmJlxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXSkgJiZcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXSkgICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF1bJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pICYmXHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSkpIHx8IHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ10pKSB7XHJcblxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiA9IHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYkluZGV4ID0gc2luZ2xlUGVyc29uSW5kZXg7XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UubG9hZGluZ0FnZW50cG9ydGFsICYmICFzYXZlZHJhZnQpIHtcclxuICAgIC8vICAgICAgICAgICAvLyBsZXQgcXVlc3Rpb25JZDogYW55ID0gc2luZ2xlUXVlc3Rpb25PYmoucXVlc3Rpb25JZCArICdfJyArIHNpbmdsZVBlcnNvbk9ialsncm9sZSddO1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmZvY3VzVG9FbGVtZW50KHF1ZXN0aW9uSWQpO1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNldFRvYXN0ck5vdGlmaWNhdGlvbnMoe1xyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHNlbGVjdCBhbGwgdGhlIGRldGFpbHMgaW4gJyArIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10gKyAnIGZvciAnICsgcm9sZVxyXG4gICAgLy8gICAgICAgICAgIC8vICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vICAgICAgICAgICAvLyAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgIC8vICAgfVxyXG4gICAgLy8gICAgICAgICAgIC8vIH0pO1xyXG4gICAgLy8gICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gaWYgKChpc1ZhbGlkIHx8IHNhdmVkcmFmdCkgfHwgdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCkge1xyXG4gICAgLy8gaWYgKGlzVmFsaWQpIHtcclxuICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgIC8vIHRoaXMubG9hZGVyU2VydmljZS5kaXNwbGF5KHRydWUpO1xyXG4gICAgICAvLyBsZXQgcmVxdWVzdDogYW55ID0gW107XHJcbiAgICAgIGxldCBtYWluUmVxT2JqOiBhbnkgPSBbXTtcclxuICAgICAgbGV0IG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnM6IGFueSA9IFtdO1xyXG4gICAgICBsZXQgbWFpblJlcXVlc3RGb3JMYTogYW55ID0gW107XHJcbiAgICAgIGxldCBtYWluUmVxdWVzdEZvclBoOiBhbnkgPSBbXTtcclxuICAgICAgdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlU2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUGVyc29uT2JqWydxdWVzdGlvbkxpc3QnXSkpIHtcclxuICAgICAgICAvLyBzaW5nbGVQZXJzb25PYmpbJ3F1ZXN0aW9uTGlzdCddLmZvckVhY2goKHNpbmdsZVNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIGlmIChcclxuICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXSkgJiZcclxuICAgICAgICAvLyAgIChzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XHJcbiAgICAgICAgLy8gICAgICdURUxMX1VTX01PUkUnIHx8XHJcbiAgICAgICAgLy8gICAgIHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10udG9VcHBlckNhc2UoKS5yZXBsYWNlQWxsKCcgJywgJ18nKSA9PT1cclxuICAgICAgICAvLyAgICAgICAnQkFTSUNfREVUQUlMUycpXHJcbiAgICAgICAgLy8gKSB7XHJcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBoZWlnaHQgaW4gY21cclxuICAgICAgICAgIGxldCBoZWlnaHRJbkNlbnRpbWV0ZXJPYmogPSBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXHJcbiAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUJyB8fCBvYmpbJ3F1ZXN0aW9uSWQnXSA9PT0gdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxyXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEknIHx8IG9ialsncXVlc3Rpb25JZCddID09PSB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0T2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxyXG4gICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnIHx8IG9ialsncXVlc3Rpb25JZCddID09PSB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnQ00nICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DZW50aW1ldGVyT2JqKSAmJlxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIHBhc3MgaGVpZ2h0IGluIGNtIG9ialxyXG4gICAgICAgICAgICBsZXQgY21PYmpJbkFuc3dlcnNpbmRleDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjbU9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbY21PYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cclxuICAgICAgICAgICAgICAgIHBhcnNlSW50KFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cclxuICAgICAgICAgICAgICAgICkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J11cclxuICAgICAgICAgICAgICAgICkudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsnY2x1c3RlcklkJ10sXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGhlaWdodCBpbiBpbmNoZXNcclxuICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzOiBhbnkgPSAoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddICogMC4zOTM3MDFcclxuICAgICAgICAgICAgKS50b0ZpeGVkKDIpO1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5GZWV0OiBhbnkgPVxyXG4gICAgICAgICAgICAgIHBhcnNlRmxvYXQoKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSkgPiAxMlxyXG4gICAgICAgICAgICAgICAgPyAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgxKVxyXG4gICAgICAgICAgICAgICAgOiAoaGVpZ2h0SW5JbmNoZXMgLyAxMikudG9GaXhlZCgyKTtcclxuICAgICAgICAgICAgbGV0IGluY2hlc29iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxyXG4gICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGluY2hlc29iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnNbaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XHJcbiAgICAgICAgICAgICAgICBwYXJzZUludChoZWlnaHRJbkluY2hlcykudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VJbnQoaGVpZ2h0SW5JbmNoZXMpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkluY2hlc09ialswXVsnY2x1c3RlcklkJ10sXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaGVpZ2h0IGluIGZlZXRcclxuXHJcbiAgICAgICAgICAgIGxldCBmZWV0T2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XHJcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSAmJlxyXG4gICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGZlZXRPYmpJbkFuc3dlcnNpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2ZlZXRPYmpJbkFuc3dlcnNpbmRleF1bJ2Fuc3dlciddID1cclxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoaGVpZ2h0SW5GZWV0KS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgIGFuc3dlcjogcGFyc2VGbG9hdChoZWlnaHRJbkZlZXQpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0ZFRVQnICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCddXHJcbiAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0luY2hlc0lucHV0J11cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9iaikpIHtcclxuICAgICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXM6IGFueSA9XHJcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXSkgKlxyXG4gICAgICAgICAgICAgICAgICAxMiArXHJcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXSk7XHJcbiAgICAgICAgICAgICAgbGV0IGhlaWdodEluQ206IGFueSA9IChcclxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoaGVpZ2h0SW5JbmNoZXMpIC8gMC4zOTM3MDFcclxuICAgICAgICAgICAgICApLnRvRml4ZWQoMik7XHJcbiAgICAgICAgICAgICAgbGV0IGZlZXRPYmpJbkFuc3dlcnNpbmRleDogYW55ID1cclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqLnF1ZXN0aW9uSWQgPT09IGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAoZmVldE9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tmZWV0T2JqSW5BbnN3ZXJzaW5kZXhdWydhbnN3ZXInXSA9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXS50b1N0cmluZygpICtcclxuICAgICAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNJbmNoZXNJbnB1dCddXHJcbiAgICAgICAgICAgICAgICAgIF0udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgYW5zd2VyOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXS50b1N0cmluZygpICtcclxuICAgICAgICAgICAgICAgICAgICAnLicgK1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5GZWV0T2JqWzBdWydjbHVzdGVySWQnXSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBsZXQgaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXg6IGFueSA9XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIG9iai5xdWVzdGlvbklkID09PSBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAoaW5jaGVzb2JqSW5BbnN3ZXJzaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW2luY2hlc29iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxyXG4gICAgICAgICAgICAgICAgICBwYXJzZUludChoZWlnaHRJbkluY2hlcykudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBoZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KGhlaWdodEluSW5jaGVzKS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV1BhcmVudElkOiAwLFxyXG4gICAgICAgICAgICAgICAgICBjcmVhdGVkVXNlcjogdGhpcy5nZXRDb29raWVWYWx1ZSgndXNlcklkJyksXHJcbiAgICAgICAgICAgICAgICAgIGNsdXN0ZXJJZDogaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGxldCBjbU9iakluQW5zd2Vyc2luZGV4OiBhbnkgPVxyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBvYmoucXVlc3Rpb25JZCA9PT0gaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ10gJiZcclxuICAgICAgICAgICAgICAgICAgICBvYmpbJ3BlcnNvblVXSWQnXSA9PT0gc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGlmIChjbU9iakluQW5zd2Vyc2luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tjbU9iakluQW5zd2Vyc2luZGV4XVsnYW5zd2VyJ10gPVxyXG4gICAgICAgICAgICAgICAgICBwYXJzZUludChoZWlnaHRJbkNtKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGhlaWdodEluQ2VudGltZXRlck9ialswXVsncXVlc3Rpb25JZCddLFxyXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6IHBhcnNlSW50KGhlaWdodEluQ20pLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgICAgICAgY2x1c3RlcklkOiBoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ2VudGltZXRlck9iaikgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5DbUFuc3dlck9iamVjdDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddID09PVxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5DZW50aW1ldGVyT2JqWzBdWydxdWVzdGlvbklkJ11cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5DbUFuc3dlck9iamVjdCkgJiZcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluQ21BbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkNlbnRpbWV0ZXJPYmpbMF1bJ3F1ZXN0aW9uSWQnXV0gPVxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5DbUFuc3dlck9iamVjdFswXVsnYW5zd2VyJ107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmopICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3Q6IGFueSA9XHJcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0SW5JbmNoZXNPYmpbMF1bJ3F1ZXN0aW9uSWQnXVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzQW5zd2VyT2JqZWN0KSAmJlxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5JbmNoZXNBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkluY2hlc09ialswXVsncXVlc3Rpb25JZCddXSA9XHJcbiAgICAgICAgICAgICAgICBoZWlnaHRJbkluY2hlc0Fuc3dlck9iamVjdFswXVsnYW5zd2VyJ107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJlxyXG4gICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluRmVldE9ialswXVsncXVlc3Rpb25JZCddKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3Q6IGFueSA9XHJcbiAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoc2luZ2xlUXVlc3Rpb246IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ11cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3QpICYmXHJcbiAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkZlZXRBbnN3ZXJPYmplY3RbMF1bJ2Fuc3dlciddKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1toZWlnaHRJbkZlZXRPYmpbMF1bJ3F1ZXN0aW9uSWQnXV0gPVxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0SW5GZWV0QW5zd2VyT2JqZWN0WzBdWydhbnN3ZXInXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBsZXQgaXNOb0Rpc3BsYXlRdWVzdGlvbkluU2VjdGlvbjogYW55ID0gIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgPyBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKHNpbmdsZURhdGE6IGFueSkgPT4gc2luZ2xlRGF0YVsncXVlc3Rpb25UeXBlJ10gPT09ICdOT0RJU1BMQVknXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIDogW107XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKHNpbmdsZVNlY3Rpb25bJ3Nob3dTZWN0aW9uJ10gfHxcclxuICAgICAgICAgICAgaXNOb0Rpc3BsYXlRdWVzdGlvbkluU2VjdGlvbi5sZW5ndGggPiAwKSAmJlxyXG4gICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnaGFyZENvcHlMYW5nJykge1xyXG4gICAgICAgICAgICAgIGlmIChzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dID0gJ0VuZ2xpc2gnO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBjaGVja2VkT3B0aW9uc0FycjogYW55ID0gW107XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXSkpIHtcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnZG9tYWluVmFsdWVzJ10uZm9yRWFjaChcclxuICAgICAgICAgICAgICAgIChzaW5nbGVEb21haW5WYWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZURvbWFpblZhbHVlWydkb21haW5JbnRlcm5hbFZhbHVlJ11cclxuICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICApICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkT3B0aW9uc0Fyci5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGNoZWNrZWRPcHRpb25zQXJyKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAvLyBmb3IgY2hlY2tib3ggcXVlc3Rpb25cclxuXHJcbiAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0OiBhbnkgPVxyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChzaW5nbGVBbnN3ZXJPYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3F1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gJiZcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJPYmpbJ3BlcnNvblVXSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAocXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICAgICAgICAgIHBlcnNvblVXSWQ6IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSxcclxuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiAnJyxcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcclxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBvYmpbJ2Fuc3dlciddID0gY2hlY2tlZE9wdGlvbnNBcnIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMucHVzaChvYmopO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVtcclxuICAgICAgICAgICAgICAgICAgJ2Fuc3dlcidcclxuICAgICAgICAgICAgICAgIF0gPSBjaGVja2VkT3B0aW9uc0Fyci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIC8vIG5vbiBjaGVja2JveCBxdWVzdGlvblxyXG4gICAgICAgICAgICAgIGxldCBxdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdDogYW55ID1cclxuICAgICAgICAgICAgICAgIG1haW5SZXF1ZXN0Rm9yQm90aFBlcnNvbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgICAoc2luZ2xlQW5zd2VyT2JqOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddICYmXHJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ11cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgICAgICAgIGFuc3dlcjpcclxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDQUxFTkRBUidcclxuICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSxcclxuICAgICAgICAgICAgICAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcclxuICAgICAgICAgICAgICAgICAgY3JlYXRlZFVzZXI6IHRoaXMuZ2V0Q29va2llVmFsdWUoJ3VzZXJJZCcpLFxyXG4gICAgICAgICAgICAgICAgICBjbHVzdGVySWQ6IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bXHJcbiAgICAgICAgICAgICAgICAgICdhbnN3ZXInXHJcbiAgICAgICAgICAgICAgICBdID1cclxuICAgICAgICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInXHJcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZihzaW5nbGVRdWVzdGlvblsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiYgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25JZCddXSkpIHtcclxuICAgICAgICAgICAgLy8gICBsZXQgcXVlc3Rpb25JbmRleEluTWFpblJlcXVlc3QgOiBhbnkgPSBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLmZpbmRJbmRleCgoc2luZ2xlQW5zd2VyT2JqIDogYW55KSA9PiAoc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gICYmIHNpbmdsZUFuc3dlck9ialsncGVyc29uVVdJZCddID09PSBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10pKVxyXG4gICAgICAgICAgICAvLyAgIGlmKHF1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0ID09PSAtMSkge1xyXG4gICAgICAgICAgICAvLyAgICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICAvLyAgICAgICBwZXJzb25VV0lkOiBzaW5nbGVTZWN0aW9uWydwZXJzb25VV0lkJ10sXHJcbiAgICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uSWQ6IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10sXHJcbiAgICAgICAgICAgIC8vICAgICAgIGFuc3dlcjogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0FMRU5EQVInID8gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0obmV3IERhdGUodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0pLCAneXl5eS1NTS1kZCcpIDogdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0sXHJcbiAgICAgICAgICAgIC8vICAgICAgIHBlcnNvblVXUGFyZW50SWQ6IDAsXHJcbiAgICAgICAgICAgIC8vICAgICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgLy8gICAgICAgY2x1c3RlcklkOiBzaW5nbGVRdWVzdGlvblsnY2x1c3RlcklkJ10sXHJcbiAgICAgICAgICAgIC8vICAgICB9O1xyXG4gICAgICAgICAgICAvLyAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5wdXNoKG9iaik7XHJcbiAgICAgICAgICAgIC8vICAgICBpZihzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgbGV0IGNoZWNrZWRPcHRpb25zQXJyIDogYW55ID0gW107XHJcbiAgICAgICAgICAgIC8vICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZSA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiYgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2hlY2tlZE9wdGlvbnNBcnIucHVzaChzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgICAgICAvLyAgICAgICBvYmpbJ2Fuc3dlciddID0gY2hlY2tlZE9wdGlvbnNBcnIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgICAgLy8gICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgICAgLy8gb2JqZWN0IGFscmVhZHkgdGhlcmUgc28gb3ZlciByaWRlIHRoZSBuZXcgYW5zd2VyXHJcbiAgICAgICAgICAgIC8vICAgICBpZihzaW5nbGVRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcpIHtcclxuICAgICAgICAgICAgLy8gICAgICAgbGV0IGNoZWNrZWRPcHRpb25zQXJyIDogYW55ID0gW107XHJcbiAgICAgICAgICAgIC8vICAgICAgIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddKSkge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIHNpbmdsZVF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXS5mb3JFYWNoKChzaW5nbGVEb21haW5WYWx1ZSA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgICAgaWYoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiYgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlRG9tYWluVmFsdWVbJ2RvbWFpbkludGVybmFsVmFsdWUnXV0pIHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2hlY2tlZE9wdGlvbnNBcnIucHVzaChzaW5nbGVEb21haW5WYWx1ZVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddKTtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgICAgICAvLyAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zW3F1ZXN0aW9uSW5kZXhJbk1haW5SZXF1ZXN0XVsnYW5zd2VyJ10gPSBjaGVja2VkT3B0aW9uc0Fyci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gICAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1txdWVzdGlvbkluZGV4SW5NYWluUmVxdWVzdF1bJ2Fuc3dlciddID0gIHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJyA/IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKG5ldyBEYXRlKHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSwgJ3l5eXktTU0tZGQnKSA6IHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ11dO1xyXG4gICAgICAgICAgICAvLyAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gICB9XHJcblxyXG4gICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAvLyBpZiAoc2luZ2xlUXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdyZXRGaW5hbmNFbGdibCcpIHtcclxuICAgICAgICAgICAgLy8gICBsZXQgZmluYW5jaWFsRWxpZ2liaWxpdHlBbnN3ZXJJbmRleDogYW55ID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maW5kSW5kZXgoKHNpbmdsZUFuc3dlck9iajogYW55KSA9PiAoc2luZ2xlQW5zd2VyT2JqWydxdWVzdGlvbklkJ10gPT09IHNpbmdsZVF1ZXN0aW9uWydxdWVzdGlvbklkJ10gJiYgc2luZ2xlQW5zd2VyT2JqWydwZXJzb25VV0lkJ10gPT09IHNpbmdsZVNlY3Rpb25bJ3BlcnNvblVXSWQnXSkpXHJcbiAgICAgICAgICAgIC8vICAgbGV0IG9iajogYW55ID0ge1xyXG4gICAgICAgICAgICAvLyAgICAgcGVyc29uVVdJZDogc2luZ2xlU2VjdGlvblsncGVyc29uVVdJZCddLFxyXG4gICAgICAgICAgICAvLyAgICAgcXVlc3Rpb25JZDogc2luZ2xlUXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSxcclxuICAgICAgICAgICAgLy8gICAgIGFuc3dlcjogdGhpcy5zaGFyZWRTZXJ2aWNlLmZpbmFuY2lhbEVsaWdpYmlsaXR5LFxyXG4gICAgICAgICAgICAvLyAgICAgcGVyc29uVVdQYXJlbnRJZDogMCxcclxuICAgICAgICAgICAgLy8gICAgIGNyZWF0ZWRVc2VyOiB0aGlzLmdldENvb2tpZVZhbHVlKCd1c2VySWQnKSxcclxuICAgICAgICAgICAgLy8gICAgIGNsdXN0ZXJJZDogc2luZ2xlUXVlc3Rpb25bJ2NsdXN0ZXJJZCddLFxyXG4gICAgICAgICAgICAvLyAgIH07XHJcbiAgICAgICAgICAgIC8vICAgaWYgKGZpbmFuY2lhbEVsaWdpYmlsaXR5QW5zd2VySW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgLy8gICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgICAgbWFpblJlcXVlc3RGb3JCb3RoUGVyc29uc1tmaW5hbmNpYWxFbGlnaWJpbGl0eUFuc3dlckluZGV4XVsnYW5zd2VyJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuZmluYW5jaWFsRWxpZ2liaWxpdHk7XHJcbiAgICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9KTtcclxuICAgICAgbGV0IGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdDogYW55ID0gW1xyXG4gICAgICAgIC4uLm5ldyBTZXQoXHJcbiAgICAgICAgICBtYWluUmVxdWVzdEZvckJvdGhQZXJzb25zLm1hcCgoaXRlbTogYW55KSA9PlxyXG4gICAgICAgICAgICBpdGVtLnBlcnNvblVXSWQudG9TdHJpbmcoKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICksXHJcbiAgICAgIF07XHJcbiAgICAgIGlmICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGRpc3RpbmN0UGVyc29uSWRGcm9tUmVxdWVzdCkpIHtcclxuICAgICAgICBtYWluUmVxdWVzdEZvckxhID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAoc2luZ2xlQW5zd2VyOiBhbnkpID0+XHJcbiAgICAgICAgICAgIHNpbmdsZUFuc3dlclsncGVyc29uVVdJZCddID09PSBkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3RbMF1cclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChkaXN0aW5jdFBlcnNvbklkRnJvbVJlcXVlc3QubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICBtYWluUmVxdWVzdEZvclBoID0gbWFpblJlcXVlc3RGb3JCb3RoUGVyc29ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChzaW5nbGVBbnN3ZXI6IGFueSkgPT5cclxuICAgICAgICAgICAgICBzaW5nbGVBbnN3ZXJbJ3BlcnNvblVXSWQnXSA9PT0gZGlzdGluY3RQZXJzb25JZEZyb21SZXF1ZXN0WzFdXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgc2F2ZVJlcXVlc3RzQXJyYXk6IGFueSA9IFtdO1xyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShtYWluUmVxdWVzdEZvckxhKSkge1xyXG4gICAgICAgIHRoaXMuc2F2ZVF1ZXN0aW9uUmVxdWVzdExhID0gbWFpblJlcXVlc3RGb3JMYTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgJ3NhdmVRdWVzdGlvblJlcXVlc3RMYScsXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShtYWluUmVxdWVzdEZvckxhKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JMYSwgIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcclxuICAgICAgICAvLyBzYXZlUmVxdWVzdHNBcnJheS5wdXNoKHRoaXMuY29tbW9uU2VydmljZS5zYXZlQW5zd2VycyhtYWluUmVxdWVzdEZvckxhLCAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCkgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudCAmJiB0aGlzLnNoYXJlZFNlcnZpY2Uub3BlblF1b3RlUmVzcG9uc2UuaXNFZGl0QWxsb3dlZEZvckFnZW50LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJykgPyB0cnVlIDogIWNhbGxlZEZyb21Db25maXJtYXRpb24pKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShtYWluUmVxdWVzdEZvclBoKSkge1xyXG4gICAgICAgIHRoaXMuc2F2ZVF1ZXN0aW9uUmVxdWVzdFBoID0gbWFpblJlcXVlc3RGb3JQaDtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgJ3NhdmVRdWVzdGlvblJlcXVlc3RQaCcsXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShtYWluUmVxdWVzdEZvclBoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gIHNhdmVSZXF1ZXN0c0FycmF5LnB1c2godGhpcy5jb21tb25TZXJ2aWNlLnNhdmVBbnN3ZXJzKG1haW5SZXF1ZXN0Rm9yUGgsICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XHJcbiAgICAgICAgLy8gc2F2ZVJlcXVlc3RzQXJyYXkucHVzaCh0aGlzLmNvbW1vblNlcnZpY2Uuc2F2ZUFuc3dlcnMobWFpblJlcXVlc3RGb3JQaCwgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlKSAmJiAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQpICYmIHRoaXMuc2hhcmVkU2VydmljZS5vcGVuUXVvdGVSZXNwb25zZS5pc0VkaXRBbGxvd2VkRm9yQWdlbnQgJiYgdGhpcy5zaGFyZWRTZXJ2aWNlLm9wZW5RdW90ZVJlc3BvbnNlLmlzRWRpdEFsbG93ZWRGb3JBZ2VudC50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpID8gdHJ1ZSA6ICFjYWxsZWRGcm9tQ29uZmlybWF0aW9uKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudmFsaWRhdGVNZWRpY2FsUXVlc3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb29raWVWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY29va2llID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7XHJcbiAgICBsZXQgdG9rZW5OYW1lID0gJyc7XHJcbiAgICBsZXQgdG9rZW5WYWx1ZSA9ICcnO1xyXG4gICAgY29uc3QgaW5kZXgyID0gMjtcclxuICAgIGNvb2tpZS5mb3JFYWNoKChkYXRhKSA9PiB7XHJcbiAgICAgIGlmIChkYXRhLnNwbGl0KCc9JylbMF0uaW5jbHVkZXMobmFtZSkgJiYgISFkYXRhLnNwbGl0KCc9JylbMV0pIHtcclxuICAgICAgICB0b2tlbk5hbWUgPSBkYXRhLnNwbGl0KCc9JylbMF0udHJpbSgpO1xyXG4gICAgICAgIHRva2VuVmFsdWUgPSBkYXRhLnNwbGl0KCc9JylbMV07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIG5hbWUgPT09ICdsaW5rJyAmJlxyXG4gICAgICAgIGRhdGEuc3BsaXQoJz0nKVswXS5pbmNsdWRlcyhuYW1lKSAmJlxyXG4gICAgICAgIGRhdGEuc3BsaXQoJz0nKVtpbmRleDJdICE9PSBudWxsICYmXHJcbiAgICAgICAgZGF0YS5zcGxpdCgnPScpW2luZGV4Ml0gIT09IHVuZGVmaW5lZFxyXG4gICAgICApIHtcclxuICAgICAgICB0b2tlblZhbHVlID0gdG9rZW5WYWx1ZSArICc9JyArIGRhdGEuc3BsaXQoJz0nKVtpbmRleDJdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0b2tlblZhbHVlO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVNZWRpY2FsUXVlc3Rpb25zKCkge1xyXG4gICAgbGV0IGlzVmFsaWQ6IGFueSA9IHRydWU7XHJcbiAgICB0aGlzLnF1ZXN0aW9uTGlzdC5mb3JFYWNoKChzaW5nbGVTZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10pICYmIGlzVmFsaWQpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVNlY3Rpb25bJ3NlY3Rpb25OYW1lJ10pICYmXHJcbiAgICAgICAgICAoc2luZ2xlU2VjdGlvblsnc2VjdGlvbk5hbWUnXS50b1VwcGVyQ2FzZSgpLnJlcGxhY2VBbGwoJyAnLCAnXycpID09PVxyXG4gICAgICAgICAgICAnVEVMTF9VU19NT1JFJyB8fFxyXG4gICAgICAgICAgICBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddLnRvVXBwZXJDYXNlKCkucmVwbGFjZUFsbCgnICcsICdfJykgPT09XHJcbiAgICAgICAgICAgICAgJ0JBU0lDX0RFVEFJTFMnKSAmJlxyXG4gICAgICAgICAgaXNWYWxpZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgaGVpZ2h0IGVudGVyZWQgaW4gZmVldFxyXG4gICAgICAgICAgaWYgKHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddID09PSAnRkVFVCcpIHtcclxuICAgICAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzT2JqID0gc2luZ2xlU2VjdGlvblsncXVlc3Rpb25zJ10uZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddID09PSAnUUhUSSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgbGV0IGhlaWdodEluRmVldE9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcclxuICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KGhlaWdodEluSW5jaGVzT2JqKSAmJlxyXG4gICAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoaGVpZ2h0SW5GZWV0T2JqKSAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cclxuICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVxyXG4gICAgICAgICAgICAgICAgKSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIC8vIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuaXNNYW5kYXRvcnlGaWVsZCAmJiAhc2F2ZWRyYWZ0ICYmIHJlZGlyZWN0KSB7XHJcbiAgICAgICAgICAgICAgLy8gaWYgKHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiICE9PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkge1xyXG4gICAgICAgICAgICAgIC8vICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5zZWxlY3RlZFF1ZXN0aW9uVGFiSW5kZXggPSBzaW5nbGVQZXJzb25JbmRleDtcclxuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpO1xyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAvLyBsZXQgcXVlc3Rpb25JZDogYW55ID0gaGVpZ2h0SW5GZWV0T2JqWzBdWydxdWVzdGlvbklkJ10gKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UuZm9jdXNUb0VsZW1lbnQocXVlc3Rpb25JZCk7XHJcbiAgICAgICAgICAgICAgLy8gaWYgKCF0aGlzLnNoYXJlZFNlcnZpY2UuaXNNb2JpbGVWaWV3KCkpIHtcclxuICAgICAgICAgICAgICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgICAgICAgICAgICAvLyAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICAgIC8vICAgICBtZXNzYWdlOiAnUGxlYXNlIGVudGVyIEhlaWdodCBpbiBGZWV0IGFuZCBJbmNoZXMgZm9yICcgKyByb2xlXHJcbiAgICAgICAgICAgICAgLy8gICB9KTtcclxuICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgZW50ZXIgSGVpZ2h0IGluIEZlZXQgYW5kIEluY2hlcyBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xyXG5cclxuICAgICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAgIC8vIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIHZhbGlkYXRpb24gZm9yIGhlaWdodCBpbiBjbVxyXG4gICAgICAgICAgbGV0IGhlaWdodEluQ2VudGltZXRlck9iaiA9IHNpbmdsZVNlY3Rpb25bJ3F1ZXN0aW9ucyddLmZpbHRlcihcclxuICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdRSFQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJyAmJlxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRJbnB1dCddXHJcbiAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShoZWlnaHRJbkNlbnRpbWV0ZXJPYmopICYmXHJcbiAgICAgICAgICAgIGlzVmFsaWRcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzaW5nbGVTZWN0aW9uWydxdWVzdGlvbnMnXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbk9iajogYW55KSA9PiB7XHJcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBiYXNpYyBxdWVzdGlvbnNcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9iaikgJiZcclxuICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnaXNTaG93UXVlc3Rpb25JblVJJ10gJiZcclxuICAgICAgICAgICAgaXNWYWxpZCAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdJTUFHRSBURVhUJyAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSAhPT0gJ1FIVCcgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddICE9PSAnREVDTEFSQVRJT04nICYmXHJcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnaGFyZENvcHlMYW5nJyAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gIT09ICdQQVNTUE9SVF9VUExPQUQnICYmXHJcbiAgICAgICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhURicgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gIT09ICdRSFRJJyAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV1cclxuICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICAvLyAoKHNpbmdsZVF1ZXN0aW9uT2JqWydxdWVzdGlvblR5cGUnXSAhPT0gJ0NIRUNLQk9YJyAmJlxyXG4gICAgICAgICAgICAvLyAgIHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0pKSB8fFxyXG4gICAgICAgICAgICAvLyAgIChzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiYgIXRoaXMudmFsaWRhdGVDaGVja0JveEZpZWxkKHNpbmdsZVF1ZXN0aW9uT2JqLCBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSkpKVxyXG4gICAgICAgICAgICBpc1ZhbGlkXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIGlmIChcclxuICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uVHlwZSddID09PSAnUEFTU1BPUlRfVVBMT0FEJyAmJlxyXG4gICAgICAgICAgLy8gICBzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddID09PSAnTicgJiZcclxuICAgICAgICAgIC8vICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAgICAgICAvLyApIHtcclxuICAgICAgICAgIC8vICAgbGV0IGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmo6IGFueSA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UucXVlc3Rpb25zUGFzc3BvcnRVcGxvYWRPYmouZmlsdGVyKChzaW5nbGVPYmo6IGFueSkgPT4gKHNpbmdsZU9ialsncGVyc29uVHlwZSddID09PSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXSAmJiB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlT2JqWydkbXNJZCddKSkpO1xyXG4gICAgICAgICAgLy8gICBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqKSkge1xyXG4gICAgICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChgJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydxdWVzdGlvblR5cGUnXX1fJHtmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWyd0eXBlJ119XyR7ZmlsdGVyZWRQZXJzb25QYXNzcG9ydE9ialswXVsncGVyc29uVHlwZSddfWApO1xyXG4gICAgICAgICAgLy8gICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2V0VG9hc3RyTm90aWZpY2F0aW9ucyh7XHJcbiAgICAgICAgICAvLyAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgIC8vICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSB1cGxvYWQgcGFzc3BvcnQgJyArIGZpbHRlcmVkUGVyc29uUGFzc3BvcnRPYmpbMF1bJ2xhYmVsJ10gKyAnIGRvY3VtZW50IGZvciAnICsgcm9sZVxyXG4gICAgICAgICAgLy8gICAgICAgfSk7XHJcbiAgICAgICAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uub3BlblNuYWNrQmFyKCdQbGVhc2UgdXBsb2FkIHBhc3Nwb3J0ICcgKyBmaWx0ZXJlZFBlcnNvblBhc3Nwb3J0T2JqWzBdWydsYWJlbCddICsgJyBkb2N1bWVudCBmb3IgJyArIHJvbGUsICdDbG9zZScpO1xyXG4gICAgICAgICAgLy8gICAgICAgaWYgKHRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLnBvbGljeVR5cGUgPT09ICdzaW5nbGVsaWZlJyAmJiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5pc1NhbWVQb2xpY3lIb2xkZXIpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zZXRUYWJWYWx1ZSh7IGxhYmVsOiAnUGVyc29uYWwgRGV0YWlscyBBbmQgTGlmZXN0eWxlJywgaXNBY3RpdmU6IGZhbHNlLCBzaG93OiB0cnVlIH0sICdTSU5HTEVMSUZFX0xBJyk7XHJcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgICAgICAgLy8gICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmJhc2ljRGV0YWlscy5wb2xpY3lUeXBlID09PSAnc2luZ2xlbGlmZScgJiYgIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuYmFzaWNEZXRhaWxzLmlzU2FtZVBvbGljeUhvbGRlcikge1xyXG4gICAgICAgICAgLy8gICAgICAgICBpZiAocm9sZSA9PT0gJ2xpZmUgYXNzdXJlZCcpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldFRhYlZhbHVlKHsgbGFiZWw6ICdQZXJzb25hbCBEZXRhaWxzIEFuZCBMaWZlc3R5bGUnLCBpc0FjdGl2ZTogZmFsc2UsIHNob3c6IHRydWUgfSwgJ1NJTkdMRUxJRkVfTEEnKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVRhYigwKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlQ2hpcCgpO1xyXG4gICAgICAgICAgLy8gICAgICAgICB9IGVsc2UgaWYgKHJvbGUgPT09ICdwb2xpY3kgaG9sZGVyJykge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0VGFiVmFsdWUoeyBsYWJlbDogJ1BlcnNvbmFsIERldGFpbHMgQW5kIExpZmVzdHlsZScsIGlzQWN0aXZlOiBmYWxzZSwgc2hvdzogdHJ1ZSB9LCAnU0lOR0xFTElGRV9QSCcpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2V0QWN0aXZlVGFiKDApO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmVDaGlwKCk7XHJcbiAgICAgICAgICAvLyAgICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5iYXNpY0RldGFpbHMucG9saWN5VHlwZSA9PT0gJ2pvaW50bGlmZScpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgY29uc29sZS5sb2coXCJqb2ludCBsaWZlIGNhc2VcIik7XHJcbiAgICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgLy8gICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgIC8vICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAvLyAgIH1cclxuXHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBkZWNsYXJhdGlvbiBxdWVzdGlvbnNcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXNWYWxpZCAmJlxyXG4gICAgICAgICAgICBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSkgJiZcclxuICAgICAgICAgICAgc2luZ2xlUXVlc3Rpb25PYmpbJ29wdGlvbmFsUXVlc3Rpb24nXSA9PT0gJ04nXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIChpc1ZhbGlkICYmXHJcbiAgICAgICAgICAgICAgICAvLyAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXSkgJiZcclxuICAgICAgICAgICAgICAgIC8vICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcclxuICAgICAgICAgICAgICAgIC8vICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXHJcbiAgICAgICAgICAgICAgICAvLyAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICYmXHJcbiAgICAgICAgICAgICAgICAvLyAgICgoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXV1bc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ11dKSAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0gPT09XHJcbiAgICAgICAgICAgICAgICAgICdOJykgfHxcclxuICAgICAgICAgICAgICAhdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUXVlc3Rpb25PYmpbJ3F1ZXN0aW9uSWQnXV0gfHxcclxuICAgICAgICAgICAgICB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tzaW5nbGVRdWVzdGlvbk9ialsncXVlc3Rpb25JZCddXVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAvLyApXHJcbiAgICAgICAgICAgICAgLy8gfHwgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gdmFsaWRhdGlvbiBmb3IgbWVkaWNhbCBzdWIgcXVlc3Rpb25zXHJcbiAgICAgICAgICAvLyBpZiAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlKSkge1xyXG4gICAgICAgICAgLy8gICB0aGlzLnNoYXJlZFNlcnZpY2UubWVkaWNhbFN1YlF1ZXN0aW9uc1Jlc3BvbnNlLmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgICBpZiAoXHJcbiAgICAgICAgICAvLyAgICAgICB0aGlzLnNob3dTdWJRdWVzdGlvbihxdWVzdGlvbikgJiZcclxuICAgICAgICAgIC8vICAgICAgIHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSAhPT0gJ0lNQUdFIFRFWFQnICYmXHJcbiAgICAgICAgICAvLyAgICAgICBxdWVzdGlvblsnb3B0aW9uYWxRdWVzdGlvbiddLnRvU3RyaW5nKCkgPT09ICdOJyAmJlxyXG4gICAgICAgICAgLy8gICAgICAgKChxdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gIT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzWydsaWZlQXNzdXJlZCddW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dKSkgfHxcclxuICAgICAgICAgIC8vICAgICAgICAgKHF1ZXN0aW9uWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NIRUNLQk9YJyAmJiAhdGhpcy52YWxpZGF0ZUNoZWNrQm94RmllbGQocXVlc3Rpb24sICdsaWZlQXNzdXJlZCcpKSlcclxuICAgICAgICAgIC8vICAgICApIHtcclxuICAgICAgICAgIC8vICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgIC8vICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBhbnN3ZXIgYWxsIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyAnICsgcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXSArICcgJyArIHF1ZXN0aW9uWydxdWVzdGlvblRleHQnXVxyXG4gICAgICAgICAgLy8gICAgICAgICB9KTtcclxuICAgICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyB2YWxpZGF0aW9uIGZvciBmYXRjaCBkZWNsYXJhdGlvblxyXG4gICAgICAgIC8vIGlmKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvbi5xdWVzdGlvbnMpICYmIGlzVmFsaWQpe1xyXG4gICAgICAgIC8vIHNpbmdsZVNlY3Rpb24ucXVlc3Rpb25zLmZvckVhY2goKHNpbmdsZVF1ZXN0aW9uT2JqOmFueSkgPT4ge1xyXG4gICAgICAgIC8vICAgaWYoaXNWYWxpZCAmJiBzaW5nbGVRdWVzdGlvbk9iai5xdWVzdGlvblR5cGUgPT09ICdERUNMQVJBVElPTicgJiYgc2luZ2xlUXVlc3Rpb25PYmpbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddICYmXHJcbiAgICAgICAgLy8gICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnb3B0aW9uYWxRdWVzdGlvbiddKSAmJlxyXG4gICAgICAgIC8vICAgICAgIHNpbmdsZVF1ZXN0aW9uT2JqWydvcHRpb25hbFF1ZXN0aW9uJ10gPT09ICdOJ1xyXG4gICAgICAgIC8vICAgICApe1xyXG4gICAgICAgIC8vICAgICAgIGlmKCBpc1ZhbGlkICYmXHJcbiAgICAgICAgLy8gICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHRoaXMucGVyc29uVXdBbnN3ZXJzW3NpbmdsZVBlcnNvbk9ialsncm9sZSddXSkgJiZcclxuICAgICAgICAvLyAgICAgICAgICghdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KHNpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXSkgJiZcclxuICAgICAgICAvLyAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVRdWVzdGlvbk9ialsnZG9tYWluVmFsdWVzJ11bMF0pICYmXHJcbiAgICAgICAgLy8gICAgICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddWzBdWydkb21haW5JbnRlcm5hbFZhbHVlJ10pICAmJlxyXG4gICAgICAgIC8vICAgICAgICAgICAoKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkgJiZcclxuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSA9PT0gJ04nKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5wZXJzb25Vd0Fuc3dlcnNbc2luZ2xlUGVyc29uT2JqWydyb2xlJ11dW3NpbmdsZVF1ZXN0aW9uT2JqWydkb21haW5WYWx1ZXMnXVswXVsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXSkpKSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlUXVlc3Rpb25PYmpbJ2RvbWFpblZhbHVlcyddKSkge1xyXG5cclxuICAgICAgICAvLyAgICAgICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2Uuc2VsZWN0ZWRRdWVzdGlvblRhYiAhPT0gc2luZ2xlUGVyc29uT2JqWydyb2xlJ10pIHtcclxuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWIgPSBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlbGVjdGVkUXVlc3Rpb25UYWJJbmRleCA9IHNpbmdsZVBlcnNvbkluZGV4O1xyXG4gICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgIC8vICAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRpbmdBZ2VudHBvcnRhbCAmJiAhc2F2ZWRyYWZ0KSB7XHJcbiAgICAgICAgLy8gbGV0IHF1ZXN0aW9uSWQ6IGFueSA9IHNpbmdsZVF1ZXN0aW9uT2JqLnF1ZXN0aW9uSWQgKyAnXycgKyBzaW5nbGVQZXJzb25PYmpbJ3JvbGUnXTtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5mb2N1c1RvRWxlbWVudChxdWVzdGlvbklkKTtcclxuICAgICAgICAvLyAgICAgICAgIGlmICghdGhpcy5zaGFyZWRTZXJ2aWNlLmlzTW9iaWxlVmlldygpKSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRUb2FzdHJOb3RpZmljYXRpb25zKHtcclxuICAgICAgICAvLyAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzZWxlY3QgYWxsIHRoZSBkZXRhaWxzIGluICcgKyBzaW5nbGVTZWN0aW9uWydzZWN0aW9uTmFtZSddICsgJyBmb3IgJyArIHJvbGVcclxuICAgICAgICAvLyAgICAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2lzTWVkaWNhbFF1ZXN0aW9uc1ZhbGlkJywgaXNWYWxpZCk7XHJcbiAgfVxyXG5cclxuICB2YWx1ZUNoYW5nZUZvck11bHRpc2VsZWN0KHF1ZXN0aW9uIDogYW55KSB7XHJcbiAgICBpZiAocXVlc3Rpb25bJ2NhbW11bmRhUXVlc3Rpb25Db2RlJ10gPT09ICdMaWZlTWVkaUNuZHRuJyB8fCBxdWVzdGlvblsnY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ01lZGlDbmR0bicgKSB7XHJcbiAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dLmxlbmd0aCA+IDBcclxuXHJcbiAgICAgIC8vIGlmIG5vbmUgaXMgc2VsZWN0ZWQgdGhlbiByZW1vdmUgYWxsIGFuZCBjYWxsIEFQSVxyXG4gICAgICBsZXQgaXNOb25lU2VsZWN0ZWQgOiBhbnkgPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXS5maW5kSW5kZXgoKHNpbmdsZU9iaiA6YW55KSA9PiBzaW5nbGVPYmpbJ3ZhbHVlJ10gPT09ICdOb01lZEhpc3RyeScpO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIGlzTm9uZVNlbGVjdGVkICE9PSAgLTFcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25bJ3F1ZXN0aW9uSWQnXV0gPSB0aGlzLnBlcnNvblV3QW5zd2Vyc1txdWVzdGlvblsncXVlc3Rpb25JZCddXSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dLmZpbHRlcigoc2luZ2xlT2JqIDogYW55KSA9PiBzaW5nbGVPYmpbJ3ZhbHVlJ10gPT09ICdOb01lZEhpc3RyeScpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UgPSBbXTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdFxyXG4gICAgICAgICkpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uTGlzdCA9IHRoaXMucXVlc3Rpb25MaXN0LmZpbHRlcigoc2luZ2xlU2VjdGlvbjogYW55KSA9PiAoKHRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSB8fCAoIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShzaW5nbGVTZWN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSAmJiAhc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkpICkpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGxldCBjdXJyZW50U2VjdGlvbkluZGV4OiBhbnkgPSB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXS5maW5kSW5kZXgoXHJcbiAgICAgIC8vICAgKHNpbmdsZVBlcnNvbk9iajogYW55KSA9PlxyXG4gICAgICAvLyAgICAgc2luZ2xlUGVyc29uT2JqWydyb2xlJ10gPT09XHJcbiAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdNYXN0ZXJPYmpbc2luZ2xlUGVyc29uSW5kZXhdWydyb2xlJ11cclxuICAgICAgLy8gKTtcclxuICAgICAgLy8gcmVtb3ZlIG1lZGljYWwgc3ViIHF1ZXN0aW9ucyBmcm9tIHF1ZXN0aW9ucyByZXNwb25zZSBsaXN0XHJcbiAgICAgIC8vIGlmIChcclxuICAgICAgLy8gICBjdXJyZW50U2VjdGlvbkluZGV4ICE9PSB0aGlzLm51bWJlckNvbnN0YW50Lm51bWJlcm1pbnVzMSAmJlxyXG4gICAgICAvLyAgICF0aGlzLnNoYXJlZGNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtcclxuICAgICAgLy8gICAgICAgY3VycmVudFNlY3Rpb25JbmRleFxyXG4gICAgICAvLyAgICAgXVxyXG4gICAgICAvLyAgICkgJiZcclxuICAgICAgLy8gICAhdGhpcy5zaGFyZWRjaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bXHJcbiAgICAgIC8vICAgICAgIGN1cnJlbnRTZWN0aW9uSW5kZXhcclxuICAgICAgLy8gICAgIF1bJ3F1ZXN0aW9uTGlzdCddXHJcbiAgICAgIC8vICAgKVxyXG4gICAgICAvLyApIHtcclxuICAgICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVtcclxuICAgICAgICAvLyAgIGN1cnJlbnRTZWN0aW9uSW5kZXhcclxuICAgICAgICAvLyBdWydxdWVzdGlvbkxpc3QnXSA9IHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd1Jlc3BvbnNlT2JqW1xyXG4gICAgICAgIC8vICAgJ3F1ZXN0aW9uc1Jlc3BvbnNlJ1xyXG4gICAgICAgIC8vIF1bY3VycmVudFNlY3Rpb25JbmRleF1bJ3F1ZXN0aW9uTGlzdCddLmZpbHRlcihcclxuICAgICAgICAvLyAgIChzaW5nbGVMaXN0SXRlbTogYW55KSA9PlxyXG4gICAgICAgIC8vICAgICB0aGlzLnNoYXJlZGNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgLy8gICAgICAgc2luZ2xlTGlzdEl0ZW1bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ11cclxuICAgICAgICAvLyAgICAgKSB8fFxyXG4gICAgICAgIC8vICAgICAoIXRoaXMuc2hhcmVkY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAvLyAgICAgICBzaW5nbGVMaXN0SXRlbVsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXVxyXG4gICAgICAgIC8vICAgICApICYmXHJcbiAgICAgICAgLy8gICAgICAgIXNpbmdsZUxpc3RJdGVtWydpc01lZGljYWxTdWJRdWVzdGlvbiddKVxyXG4gICAgICAgIC8vICk7XHJcbiAgICAgIC8vIH1cclxuICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3UmVzcG9uc2VPYmpbJ3F1ZXN0aW9uc1Jlc3BvbnNlJ11bMF1bXHJcbiAgICAgIC8vICAgJ3F1ZXN0aW9uTGlzdCdcclxuICAgICAgLy8gXS5mb3JFYWNoKChzaW5nbGVRdWVzdGlvbjogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIC8vICAgaWYgKHNpbmdsZVF1ZXN0aW9uWydpc01lZGljYWxTdWJRdWVzdGlvbiddKSB7XHJcbiAgICAgIC8vICAgICB0aGlzLnNoYXJlZFNlcnZpY2UucGVyc29uVXdSZXNwb25zZU9ialsncXVlc3Rpb25zUmVzcG9uc2UnXVswXVtcclxuICAgICAgLy8gICAgICAgJ3F1ZXN0aW9uTGlzdCdcclxuICAgICAgLy8gICAgIF0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH0pO1xyXG5cclxuICAgICAgLy8gdGhpcy5xdWVzdGlvbkxpc3QgPSB0aGlzLnF1ZXN0aW9uTGlzdC5maWx0ZXIoKHNpbmdsZVNlY3Rpb24gOiBhbnkpID0+ICghc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSB8fCB0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoc2luZ2xlU2VjdGlvblsnaXNNZWRpY2FsU3ViUXVlc3Rpb24nXSkpKTtcclxuICAgICAgLy8gdGhpcy5xdWVzdGlvbkxpc3QuZm9yRWFjaCgoc2luZ2xlTWFzdGVyT2JqOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAvLyAgIGlmIChzaW5nbGVNYXN0ZXJPYmpbJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10pIHtcclxuICAgICAgLy8gICAgIHRoaXMuc2hhcmVkU2VydmljZS5wZXJzb25Vd01hc3Rlck9ialtzaW5nbGVQZXJzb25JbmRleF1bXHJcbiAgICAgIC8vICAgICAgICdxdWVzdGlvbkxpc3QnXHJcbiAgICAgIC8vICAgICBdWydxdWVzdGlvbnMnXSA9IFtdO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSk7XHJcbiAgICAgIC8vIHRoaXMubG9hZGVyLmRpc3BsYXkodHJ1ZSk7XHJcblxyXG4gICAgICBsZXQgc2VsZWN0ZWREaXNlYXNlcyA6IGFueSA9IHRoaXMucGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9uWydxdWVzdGlvbklkJ11dLm1hcCgoc2luZ2xlRGlzZWFzZU9iaiA6IGFueSkgPT4gc2luZ2xlRGlzZWFzZU9ialsndmFsdWUnXSkudG9TdHJpbmcoKTtcclxuICAgICAgLy8gbGV0IHJlcXVlc3Q6IGFueSA9IEpTT04ucGFyc2UoXHJcbiAgICAgIC8vICAgSlNPTi5zdHJpbmdpZnkoXHJcbiAgICAgIC8vICAgICB0aGlzLmZldGNoU3ViUXVlc3Rpb25zTGlzdFtcclxuICAgICAgLy8gICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnBlcnNvblV3TWFzdGVyT2JqW3NpbmdsZVBlcnNvbkluZGV4XVsncm9sZSddXHJcbiAgICAgIC8vICAgICBdLnRvU3RyaW5nKClcclxuICAgICAgLy8gICApXHJcbiAgICAgIC8vICk7XHJcbiAgICAgIGlmKHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ10uaGFzT3duUHJvcGVydHkoJ2FwaVVybCcpICYmIHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ10uaGFzT3duUHJvcGVydHkoJ3VybFBhcmFtRm9yRGlzZWFzZScpICYmIHF1ZXN0aW9uWydmaWVsZCddWydjb25maWdEYXRhJ10uaGFzT3duUHJvcGVydHkoJ3VybFBhcmFtRm9yUGVyc29uVXdJZCcpICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkocXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXVsnYXBpVXJsJ10pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkocXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXVsndXJsUGFyYW1Gb3JEaXNlYXNlJ10pICYmICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkocXVlc3Rpb25bJ2ZpZWxkJ11bJ2NvbmZpZ0RhdGEnXVsndXJsUGFyYW1Gb3JQZXJzb25Vd0lkJ10pKSB7XHJcbiAgICAgICAgdGhpcy5tYXN0ZXJTZXJ2aWNlLmdldFN1YlF1ZXN0aW9ucyhxdWVzdGlvblsnZmllbGQnXVsnY29uZmlnRGF0YSddLCBzZWxlY3RlZERpc2Vhc2VzLCB0aGlzLnBlcnNvblV3SWQpLnN1YnNjcmliZShcclxuICAgICAgICAgIChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgLy8gdGhpcy5sb2FkZXIuZGlzcGxheShmYWxzZSk7XHJcbiAgICAgICAgICAgIGxldCBkaXN0aW5jdFN0ZXBzOiBhbnkgPSBbXTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoZGF0YSkpIHtcclxuICAgICAgICAgICAgICBkYXRhLmZvckVhY2goKHN1YlF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uW1xyXG4gICAgICAgICAgICAgICAgICAnZG9tYWluVmFsdWVzJ1xyXG4gICAgICAgICAgICAgICAgXSA9IHRoaXMubWVkaWFsUXVlc3Rpb25SZXNwb25zZSgpWydkb21haW5WYWx1ZXMnXVtcclxuICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2RvbWFpbk5hbWUnXVxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydpc1Nob3dRdWVzdGlvbkluVUknXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ2lzTWVkaWNhbFN1YlF1ZXN0aW9uJ10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ11cclxuICAgICAgICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydxdWVzdGlvblJlbGF0aW9uJ10gPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgc3ViUXVlc3Rpb25bJ3F1ZXN0aW9uUmVsYXRpb24nXVxyXG4gICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25UeXBlJ10gPT09ICdDSEVDS0JPWCcgJiZcclxuICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICBzdWJRdWVzdGlvblsncXVlc3Rpb25SZWxhdGlvbiddLmZvckVhY2goXHJcbiAgICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uUmVsYXRpb25PYmo6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRRdWVzdGlvbk9iamVjdDogYW55ID0gZGF0YS5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvYmplY3Q6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RbJ3F1ZXN0aW9uSWQnXSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWyduZXh0UXVlc3Rpb25JZCddXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRRdWVzdGlvbk9iamVjdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRRdWVzdGlvbk9iamVjdFswXVsnYW5zd2VyZWRWYWx1ZSddID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVRdWVzdGlvblJlbGF0aW9uT2JqWydwYXJlbnRRdWVzdGlvblZhbHVlJ107XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gaWYgKFxyXG4gICAgICAgICAgICAgICAgLy8gICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIHN1YlF1ZXN0aW9uWydkb21haW5WYWx1ZXMnXVxyXG4gICAgICAgICAgICAgICAgLy8gICApXHJcbiAgICAgICAgICAgICAgICAvLyApIHtcclxuICAgICAgICAgICAgICAgIC8vICAgc3ViUXVlc3Rpb25bJ2RvbWFpblZhbHVlcyddLmZvckVhY2goKHN1YkRvbWFpbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnN1Yk1lZGljYWxRdWVzdGlvbnNEb21haW5JbnRlcm5hbFZhbHVlc0xpc3QucHVzaChcclxuICAgICAgICAgICAgICAgIC8vICAgICAgIHN1YkRvbWFpblsnZG9tYWluSW50ZXJuYWxWYWx1ZSddXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgKTtcclxuICAgICAgICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRpc3RpbmN0U3RlcHMuaW5jbHVkZXMoc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKSkge1xyXG4gICAgICAgICAgICAgICAgICBkaXN0aW5jdFN0ZXBzLnB1c2goc3ViUXVlc3Rpb25bJ2NsdXN0ZXJJZCddKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHN1YlF1ZXN0aW9uWydmaWVsZCddID0gdGhpcy5nZXRGaWVsZChzdWJRdWVzdGlvbik7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgZGF0YS5zb3J0KFxyXG4gICAgICAgICAgICAgICAgKGE6IGFueSwgYjogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICBhWydzdGVwJ10gLSBiWydzdGVwJ10gfHwgYVsnZGlzcGxheU9yZGVyJ10gLSBiWydkaXNwbGF5T3JkZXInXVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgZGlzdGluY3RTdGVwcy5mb3JFYWNoKChzdGVwczogYW55LCBpbmQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkT2JqOiBhbnkgPSBkYXRhLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKHNpbmdsZVF1ZXN0aW9uOiBhbnkpID0+IHNpbmdsZVF1ZXN0aW9uWydjbHVzdGVySWQnXSA9PT0gc3RlcHNcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICAgICAgICAgIHN0ZXA6IDEwMDAgKyBpbmQsXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uczogIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShmaWx0ZXJlZE9iailcclxuICAgICAgICAgICAgICAgICAgICA/IGZpbHRlcmVkT2JqXHJcbiAgICAgICAgICAgICAgICAgICAgOiBbXSxcclxuICAgICAgICAgICAgICAgICAgc2VjdGlvbk5hbWU6ICF0aGlzLmNoZWNrSWZWYWx1ZUlzRW1wdHkoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRPYmpcclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgID8gZmlsdGVyZWRPYmpbMF1bJ3RpdGxlJ11cclxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICBwZXJzb25VV0lkOiB0aGlzLnBlcnNvblV3SWQsXHJcbiAgICAgICAgICAgICAgICAgIGlzTWVkaWNhbFN1YlF1ZXN0aW9uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBzaG93U2VjdGlvbjogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25MaXN0LnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB0aGlzLm1lZGljYWxTdWJRdWVzdGlvbnNSZXNwb25zZSA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgLy8gbWVyZ2UgbWVkaWNhbCBzdWIgcXVlc3Rpb25zIGludG8gcGVyc29uIHV3IG1haW4gcXVlc3Rpb25zIHJlc3BvbnNlIChyZXF1aXJlZCBmb3Igc2hvdyBxdWVzdGlvbiBmdW5jdGlvbiB0byB3b3JrKVxyXG4gICAgICAgICAgICAgIC8vIGNsZWFyaW5nIG9uIHRvcCBiZWZvcmUgYXBpIGNhbGxcclxuICAgICAgICAgICAgICB0aGlzLnBlcnNvblV3UmVzcG9uc2VPYmpbMF1bJ3F1ZXN0aW9uTGlzdCddID0gdGhpcy5wZXJzb25Vd1Jlc3BvbnNlT2JqWzBdWydxdWVzdGlvbkxpc3QnXS5jb25jYXQodGhpcy5tZWRpY2FsU3ViUXVlc3Rpb25zUmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgLy8gdGhpcy5sb2FkZXIuZGlzcGxheShmYWxzZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5yZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXHJcbiAgfVxyXG4gIG9uRG9jdW1lbnRGaWxlUHJldmlldyhldmVudDogeyBmaWxlOiBGaWxlLCBpbmRleDogbnVtYmVyIH0pOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdQcmV2aWV3IHJlcXVlc3RlZCBmb3I6JywgZXZlbnQuZmlsZS5uYW1lKTtcclxuICAgIHRoaXMucHJldmlld0ZpbGUgPSBldmVudC5maWxlO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VGaWxlUHJldmlldygpOiB2b2lkIHtcclxuICAgIHRoaXMucHJldmlld0ZpbGUgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tBbmRVcGRhdGVIZWlnaHRVbml0KCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXHJcbiAgICAgICAgXSA9PT0gJ0ZFRVQnICYmXHJcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J1xyXG4gICAgICAgICAgXVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IGhlaWdodEluSW5jaGVzOiBhbnkgPSAoXHJcbiAgICAgICAgICBwYXJzZUZsb2F0KFxyXG4gICAgICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J1xyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICApICogMC4zOTM3MDFcclxuICAgICAgICApLnRvRml4ZWQoMik7XHJcbiAgICAgICAgbGV0IGhlaWdodEluRmVldDogYW55ID1cclxuICAgICAgICAgIHBhcnNlRmxvYXQoXHJcbiAgICAgICAgICAgIChoZWlnaHRJbkluY2hlcyAvIDEyKVxyXG4gICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgLnNwbGl0KCcuJylbMV1cclxuICAgICAgICAgICkgPiAxMlxyXG4gICAgICAgICAgICA/IChoZWlnaHRJbkluY2hlcyAvIDEyKS50b0ZpeGVkKDEpXHJcbiAgICAgICAgICAgIDogKGhlaWdodEluSW5jaGVzIC8gMTIpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVswXVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25GZWV0SW5wdXQnXHJcbiAgICAgICAgICBdID0gaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVswXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXHJcbiAgICAgICAgICBdID1cclxuICAgICAgICAgICAgaGVpZ2h0SW5GZWV0LnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSAhPT0gJzExJyAmJlxyXG4gICAgICAgICAgICBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdICE9PSAnMTInICYmXHJcbiAgICAgICAgICAgIGhlaWdodEluRmVldC50b1N0cmluZygpLnNwbGl0KCcuJylbMV0gIT09ICcxMydcclxuICAgICAgICAgICAgICA/IGhlaWdodEluRmVldFxyXG4gICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAuc3BsaXQoJy4nKVsxXVxyXG4gICAgICAgICAgICAgICAgICAuY2hhckF0KDApXHJcbiAgICAgICAgICAgICAgOiBoZWlnaHRJbkZlZXQudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICB0aGlzLnBlcnNvblV3QW5zd2Vyc1tcclxuICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCdcclxuICAgICAgICBdID09PSAnQ00nICYmXHJcbiAgICAgICAgIXRoaXMuY2hlY2tJZlZhbHVlSXNFbXB0eShcclxuICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J1xyXG4gICAgICAgICAgXVxyXG4gICAgICAgICkgJiZcclxuICAgICAgICAhdGhpcy5jaGVja0lmVmFsdWVJc0VtcHR5KFxyXG4gICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICBsZXQgaGVpZ2h0SW5JbmNoZXM6IGFueSA9XHJcbiAgICAgICAgICBwYXJzZUZsb2F0KFxyXG4gICAgICAgICAgICBwYXJzZUZsb2F0KFxyXG4gICAgICAgICAgICAgIHRoaXMucGVyc29uVXdBbnN3ZXJzW1xyXG4gICAgICAgICAgICAgICAgJ21lZGljYWxRdWVzdGlvbkZlZXRJbnB1dCdcclxuICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICkudG9TdHJpbmcoKSArXHJcbiAgICAgICAgICAgICAgJy4nICtcclxuICAgICAgICAgICAgICBwYXJzZUZsb2F0KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgKS50b1N0cmluZygpXHJcbiAgICAgICAgICApICogMTI7XHJcbiAgICAgICAgbGV0IGhlaWdodEluQ206IGFueSA9IChcclxuICAgICAgICAgIHBhcnNlRmxvYXQoaGVpZ2h0SW5JbmNoZXMpIC8gMC4zOTM3MDFcclxuICAgICAgICApLnRvRml4ZWQoMik7XHJcbiAgICAgICAgdGhpcy5wZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAnbWVkaWNhbFF1ZXN0aW9uc0hlaWdodElucHV0J1xyXG4gICAgICAgIF0gPSBoZWlnaHRJbkNtO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVtb3ZlU3ViUXVlc3Rpb25WYWx1ZXMoKTtcclxuICAgIH1cclxufVxyXG4iLCJcclxuPGRpdiAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBxdWVzdGlvbkxpc3RcIj5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJcclxuICAgICAgICAhY2hlY2tJZlZhbHVlSXNFbXB0eShzZWN0aW9uWydxdWVzdGlvbnMnXSkgJiZcclxuICAgICAgICBzZWN0aW9uWydzaG93U2VjdGlvbiddXHJcbiAgICAgIFwiXHJcbiAgICAgIGNsYXNzPVwiY2FyZCBwLTMgbWItNFwiXHJcbiAgICAgIGlkPVwicGVyc29uVXdNZWRpY2FsUXVlc3Rpb25zXCJcclxuICAgID5cclxuICAgICAgPGg2IGNsYXNzPVwicGFnZS10aXRsZSBib2xkLWxhYmVsXCI+XHJcbiAgICAgICAge3sgZ2V0VGl0bGVDYXNlKHNlY3Rpb25bXCJzZWN0aW9uTmFtZVwiXSkgfX1cclxuICAgICAgPC9oNj5cclxuICAgICAgPGxpYi1oci1saW5lIFtmaWVsZF09XCJob3Jpem9udGFsTGluZU9ialwiIC8+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHF1ZXN0aW9ucyBvZiBzZWN0aW9uWydxdWVzdGlvbnMnXVwiIGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0lNQUdFIFRFWFQnXCI+XHJcbiAgICAgICAgICA8aW1nIFtzcmNdPVwicXVlc3Rpb25zWydzYW1wbGVTM0xpbmsnXVwiIGNsYXNzPVwiZC1ibG9jayBteC1hdXRvXCIgW2FsdF09XCJxdWVzdGlvbnNbJ3RpdGxlJ11cIj5cclxuICAgICAgICAgIDxoMyBbaW5uZXJIVE1MXT1cInF1ZXN0aW9uc1sncXVlc3Rpb25UZXh0J11cIj48L2gzPlxyXG4gICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0ZSRUUgVEVYVCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydjYW1tdW5kYVF1ZXN0aW9uQ29kZSddICE9PSAnUUhUJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZmllbGQtbGFibGUgZC1ibG9ja1wiXHJcbiAgICAgICAgICAgID57eyBxdWVzdGlvbnNbXCJxdWVzdGlvblRleHRcIl0gfX1cclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25zLm9wdGlvbmFsUXVlc3Rpb24gPT09ICdOJ1xyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogI2VlMDAwMFwiXHJcbiAgICAgICAgICAgICAgPiYjNDI7PC9zcGFuXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvbGFiZWw+IC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBweC0wIG15LTFcIj5cclxuICAgICAgICAgICAgPGxpYi10ZXh0Ym94IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAoYmx1cik9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnSEVJR0hUSU5QVVQnICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2FyZC10b3BpYyBkLWJsb2NrIGZpZWxkLWxhYmxlXCJcclxuICAgICAgICAgICAgPkhlaWdodFxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6ICNlZTAwMDBcIlxyXG4gICAgICAgICAgICAgID4mIzQyOzwvc3BhblxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImNvbC1hdXRvIHB4LTAgbXktMCBweS0wIGhlaWdodGlucHV0XCJcclxuXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29sLTEyIG15LTFcIiAqbmdJZj1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uc0hlaWdodFVuaXQnXSA9PT0gJ0NNJ1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBweS0wIGhlaWdodElucHV0c1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi10ZXh0Ym94IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0SW5wdXQnXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ1FIVCddWydmaWVsZCddXCIgICAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNVwiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbJ21lZGljYWxRdWVzdGlvbnNIZWlnaHRVbml0J11cIiBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ2hlaWdodE9iamVjdFR5cGVzJ11cIiAobmdNb2RlbENoYW5nZSk9XCJjaGVja0FuZFVwZGF0ZUhlaWdodFVuaXQoKVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyb3dcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICBwZXJzb25Vd0Fuc3dlcnNbXHJcbiAgICAgICAgICAgICAgICAgICdtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCdcclxuICAgICAgICAgICAgICAgIF0gPT09ICdGRUVUJ1xyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgcHktMCBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXNlbGVjdCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1snbWVkaWNhbFF1ZXN0aW9uRmVldElucHV0J11cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgW2ZpZWxkXT1cIm1lZFF1ZXN0aW9uT2JqWydRSFRGJ11bJ2ZpZWxkJ11cIiAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBweS0wIG15LTFcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSW5jaGVzSW5wdXQnXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiBbZmllbGRdPVwibWVkUXVlc3Rpb25PYmpbJ1FIVEknXVsnZmllbGQnXVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtNCBweS0wIG15LTFcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxsaWItc2VsZWN0IFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzWydtZWRpY2FsUXVlc3Rpb25zSGVpZ2h0VW5pdCddXCIgW2ZpZWxkXT1cIm1lZFF1ZXN0aW9uT2JqWydoZWlnaHRPYmplY3RUeXBlcyddXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hlY2tBbmRVcGRhdGVIZWlnaHRVbml0KClcIiAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwicm93IG10LTAgcHQtMFwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnTUFQJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuXHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1hcC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZHJlc3Mtc2VhcmNoLWNvbnRhaW5lciBtYi0zXCI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgY2FyZC10b3BpY1wiPkxvbmdpdHVkZTwvbGFiZWw+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwibG9uZ2l0dWRlXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgbG9uZ2l0dWRlXCJcclxuICAgICAgICAgIHN0ZXA9XCJhbnlcIlxyXG4gICAgICAgICAgcmVhZG9ubHlcclxuICAgICAgICA+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGNhcmQtdG9waWNcIj5MYXRpdHVkZTwvbGFiZWw+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwibGF0aXR1ZGVcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBsYXRpdHVkZVwiXHJcbiAgICAgICAgICBzdGVwPVwiYW55XCJcclxuICAgICAgICAgIHJlYWRvbmx5XHJcbiAgICAgICAgPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgI2FkZHJlc3NJbnB1dFxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZm9yIGFkZHJlc3NcIlxyXG4gICAgICAgIChrZXl1cCk9XCJvbkFkZHJlc3NJbnB1dEtleXVwKCRldmVudClcIlxyXG4gICAgICAgIChmb2N1cyk9XCJzaG93RHJvcGRvd24gPSB0cnVlXCJcclxuICAgICAgICAoYmx1cik9XCJvbklucHV0Qmx1cigpXCJcclxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICpuZ0lmPVwic2hvd0Ryb3Bkb3duICYmIGFkZHJlc3NTdWdnZXN0aW9ucy5sZW5ndGggPiAwXCJcclxuICAgIGNsYXNzPVwiYXV0b2NvbXBsZXRlLWRyb3Bkb3duIHBvc2l0aW9uLWFic29sdXRlIHctMTAwIG10LTFcIlxyXG4gICAgc3R5bGU9XCJ6LWluZGV4OiAxMDAwOyBtYXgtaGVpZ2h0OiAyMDBweDsgb3ZlcmZsb3cteTogYXV0bzsgYmFja2dyb3VuZDogd2hpdGU7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IGJvcmRlci1yYWRpdXM6IDRweDsgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwwLDAsMC4xKTtcIlxyXG4gID5cclxuICAgIDxkaXZcclxuICAgICAgKm5nRm9yPVwibGV0IHN1Z2dlc3Rpb24gb2YgYWRkcmVzc1N1Z2dlc3Rpb25zOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIHAtMlwiXHJcbiAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTtcIlxyXG4gICAgICAobW91c2Vkb3duKT1cInNlbGVjdEFkZHJlc3Moc3VnZ2VzdGlvbilcIlxyXG4gICAgICAobW91c2VlbnRlcik9XCJob3ZlcmVkSW5kZXggPSBpXCJcclxuICAgICAgW2NsYXNzLmJnLWxpZ2h0XT1cImhvdmVyZWRJbmRleCA9PT0gaVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+e3sgc3VnZ2VzdGlvbi5tYWluX3RleHQgfX08L2Rpdj5cclxuICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZFwiPnt7IHN1Z2dlc3Rpb24uc2Vjb25kYXJ5X3RleHQgfX08L3NtYWxsPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIj5TdGFydCB0eXBpbmcgdG8gc2VhcmNoIGZvciBhZGRyZXNzZXM8L3NtYWxsPlxyXG4gICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxnb29nbGUtbWFwIFtjZW50ZXJdPVwiY2VudGVyXCIgW3pvb21dPVwiem9vbVwiPlxyXG4gICAgICAgICAgICAgIDxtYXAtbWFya2VyIFtwb3NpdGlvbl09XCJjdXJyZW50Q29vcmRpbmF0ZXNcIj48L21hcC1tYXJrZXI+XHJcbiAgICAgICAgICAgIDwvZ29vZ2xlLW1hcD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgKHF1ZXN0aW9uc1sncXVlc3Rpb25UeXBlJ10gPT09ICdSQURJTyBCVVRUT04nIHx8XHJcbiAgICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0FERE1PUkUnKSAmJlxyXG4gICAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGxpYi1yYWRpbyBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwibXktMVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnQ0hFQ0tCT1gnICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGxpYi1tdWx0aXBsZS1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgKG5nTW9kZWxDaGFuZ2UpPVwidmFsdWVDaGFuZ2VGb3JNdWx0aXNlbGVjdChxdWVzdGlvbnMpXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwibXktMVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnREVDTEFSQVRJT04nICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGxpYi1jaGVja2JveCBbKG5nTW9kZWwpXT1cInBlcnNvblV3QW5zd2Vyc1txdWVzdGlvbnMucXVlc3Rpb25JZF1cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwibXktMVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJxdWVzdGlvbnM/LmZpZWxkPy5jc3NDbGFzc1wiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnRFJPUERPV04nICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGxpYi1zZWxlY3QgWyhuZ01vZGVsKV09XCJwZXJzb25Vd0Fuc3dlcnNbcXVlc3Rpb25zLnF1ZXN0aW9uSWRdXCIgW2ZpZWxkXT1cInF1ZXN0aW9uc1snZmllbGQnXVwiIChuZ01vZGVsQ2hhbmdlKT1cInJlbW92ZVN1YlF1ZXN0aW9uVmFsdWVzKClcIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cIm15LTFcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0NBTEVOREFSJyAmJlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ2lzU2hvd1F1ZXN0aW9uSW5VSSddXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxsaWItZG9iIFsobmdNb2RlbCldPVwicGVyc29uVXdBbnN3ZXJzW3F1ZXN0aW9ucy5xdWVzdGlvbklkXVwiIFtmaWVsZF09XCJxdWVzdGlvbnNbJ2ZpZWxkJ11cIiAobmdNb2RlbENoYW5nZSk9XCJyZW1vdmVTdWJRdWVzdGlvblZhbHVlcygpXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cIlwiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICBxdWVzdGlvbnNbJ3F1ZXN0aW9uVHlwZSddID09PSAnSEVJR0hUSU5QVVQnICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snY2FtbXVuZGFRdWVzdGlvbkNvZGUnXSA9PT0gJ1FIVEYnICYmXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uc1snaXNTaG93UXVlc3Rpb25JblVJJ11cclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cIm15LTFcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ0RPQ1VQTE9BRCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGliLXVwbG9hZCBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCIgKGZpbGVQcmV2aWV3KT1cIm9uRG9jdW1lbnRGaWxlUHJldmlldygkZXZlbnQpXCIgLz5cclxuICAgICAgICAgIDxsaWItZmlsZS1wcmV2aWV3XHJcbiAgICAgICAgICAgICpuZ0lmPVwicHJldmlld0ZpbGVcIlxyXG4gICAgICAgICAgICBbZmllbGRdPVwicXVlc3Rpb25zWydmaWVsZCddXCJcclxuICAgICAgICAgICAgW2ZpbGVdPVwicHJldmlld0ZpbGVcIlxyXG4gICAgICAgICAgICAoY2xvc2VkKT1cImNsb3NlRmlsZVByZXZpZXcoKVwiPlxyXG4gICAgICAgICAgPC9saWItZmlsZS1wcmV2aWV3PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwicXVlc3Rpb25zPy5maWVsZD8uY3NzQ2xhc3NcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydxdWVzdGlvblR5cGUnXSA9PT0gJ1BBU1NQT1JUX1VQTE9BRCcgJiZcclxuICAgICAgICAgICAgcXVlc3Rpb25zWydpc1Nob3dRdWVzdGlvbkluVUknXVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPCEtLSBwZW5kaW5nIC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4iXX0=
|