@bpost/bp-address-auto-complete-by-component 1.0.25 → 1.0.29
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/VERSION.md +17 -0
- package/bpost-bp-address-auto-complete-by-component.metadata.json +1 -1
- package/bundles/bpost-bp-address-auto-complete-by-component.umd.js +56 -8
- package/bundles/bpost-bp-address-auto-complete-by-component.umd.js.map +1 -1
- package/bundles/bpost-bp-address-auto-complete-by-component.umd.min.js +1 -1
- package/bundles/bpost-bp-address-auto-complete-by-component.umd.min.js.map +1 -1
- package/esm2015/lib/lib-address-autocomplete-by-component.component.js +21 -6
- package/esm2015/lib/locality/locality.component.js +21 -3
- package/esm2015/lib/model/query-parameters.model.js +2 -2
- package/esm2015/lib/services/adress.service.js +2 -1
- package/esm2015/lib/services/http.service.js +15 -2
- package/esm2015/lib/utils/prefill-data.js +3 -1
- package/esm5/lib/lib-address-autocomplete-by-component.component.js +21 -6
- package/esm5/lib/locality/locality.component.js +21 -3
- package/esm5/lib/model/query-parameters.model.js +2 -2
- package/esm5/lib/services/adress.service.js +2 -1
- package/esm5/lib/services/http.service.js +16 -3
- package/esm5/lib/utils/prefill-data.js +3 -1
- package/fesm2015/bpost-bp-address-auto-complete-by-component.js +57 -9
- package/fesm2015/bpost-bp-address-auto-complete-by-component.js.map +1 -1
- package/fesm5/bpost-bp-address-auto-complete-by-component.js +58 -10
- package/fesm5/bpost-bp-address-auto-complete-by-component.js.map +1 -1
- package/lib/lib-address-autocomplete-by-component.component.d.ts +5 -1
- package/lib/model/query-parameters.model.d.ts +1 -1
- package/lib/services/adress.service.d.ts +1 -0
- package/lib/services/http.service.d.ts +4 -1
- package/lib/utils/prefill-data.d.ts +1 -0
- package/package.json +1 -1
|
@@ -8,33 +8,36 @@ import { BoxNumberComponent } from './box-number/box-number.component';
|
|
|
8
8
|
import { ADDRESSLEVEL } from './enum';
|
|
9
9
|
import { PrefillData } from './utils/prefill-data';
|
|
10
10
|
import { InputNameType } from './enum/input-name.enum';
|
|
11
|
+
import { HttpService } from './services/http.service';
|
|
11
12
|
var LibAddressAutocompleteByComponentComponent = /** @class */ (function () {
|
|
12
|
-
function LibAddressAutocompleteByComponentComponent() {
|
|
13
|
+
function LibAddressAutocompleteByComponentComponent(httpService) {
|
|
14
|
+
this.httpService = httpService;
|
|
13
15
|
this.selectedLanguage = null;
|
|
16
|
+
this.baseUrl = "https://api.mailops.bpost.cloud/roa-info/externalMailingAddressProofingRest/autocomplete/";
|
|
14
17
|
this.showDebugMessageToConsole = false;
|
|
15
18
|
this.notInListAllowed = true;
|
|
16
19
|
this.messageOption = 'Y';
|
|
17
20
|
// LOCALITY
|
|
18
|
-
this.localityUrl = '
|
|
21
|
+
this.localityUrl = this.baseUrl + 'locality';
|
|
19
22
|
this.maxSuggestionLocality = 5;
|
|
20
23
|
this.visibleSuggestionLocalityCount = 5;
|
|
21
24
|
// localityParams: PrefilledParameters;
|
|
22
25
|
this.localityPrefillData = null;
|
|
23
26
|
// STREET
|
|
24
|
-
this.streetUrl = '
|
|
27
|
+
this.streetUrl = this.baseUrl + 'street';
|
|
25
28
|
this.maxSuggestionStreet = 5;
|
|
26
29
|
this.visibleSuggestionStreetCount = 5;
|
|
27
30
|
// streetParams: PrefilledParameters;
|
|
28
31
|
this.streetPrefillData = null;
|
|
29
32
|
// STREET NUMBER
|
|
30
33
|
// tslint:disable-next-line:max-line-length
|
|
31
|
-
this.streetNumberUrl = '
|
|
34
|
+
this.streetNumberUrl = this.baseUrl + 'streetNumber';
|
|
32
35
|
this.maxSuggestionStreetNb = 5;
|
|
33
36
|
this.visibleSuggestionStreetNbCount = 5;
|
|
34
37
|
// streetNumberParams: PrefilledParameters;
|
|
35
38
|
this.streetNumberPrefillData = null;
|
|
36
39
|
// BOX NUMBER
|
|
37
|
-
this.boxNumberUrl = '
|
|
40
|
+
this.boxNumberUrl = this.baseUrl + 'boxNumber';
|
|
38
41
|
this.maxSuggestionBoxNb = 5;
|
|
39
42
|
this.visibleSuggestionBoxNbCount = 5;
|
|
40
43
|
// boxParams: PrefilledParameters;
|
|
@@ -45,6 +48,8 @@ var LibAddressAutocompleteByComponentComponent = /** @class */ (function () {
|
|
|
45
48
|
this.validationMessageEventEmitter = new EventEmitter();
|
|
46
49
|
this.clearInputEventEmitter = new EventEmitter();
|
|
47
50
|
this.processingPrefillData = false;
|
|
51
|
+
// Pass the API key as a property of the library !
|
|
52
|
+
this.apiKey = 'cyRkKOD73O1DOdgcDLLnsaOiDh6OyOkt3BBT5JU1';
|
|
48
53
|
}
|
|
49
54
|
Object.defineProperty(LibAddressAutocompleteByComponentComponent.prototype, "inputLang", {
|
|
50
55
|
// @ts-ignore
|
|
@@ -71,6 +76,7 @@ var LibAddressAutocompleteByComponentComponent = /** @class */ (function () {
|
|
|
71
76
|
configurable: true
|
|
72
77
|
});
|
|
73
78
|
LibAddressAutocompleteByComponentComponent.prototype.ngOnInit = function () {
|
|
79
|
+
this.httpService.setApiKey(this.apiKey);
|
|
74
80
|
if (this.addressParams) {
|
|
75
81
|
this.prefillData = this.addressParams;
|
|
76
82
|
}
|
|
@@ -87,6 +93,9 @@ var LibAddressAutocompleteByComponentComponent = /** @class */ (function () {
|
|
|
87
93
|
if (this.showDebugMessageToConsole) {
|
|
88
94
|
this.displayParametersChangesToConsole(changes);
|
|
89
95
|
}
|
|
96
|
+
if (changes.hasOwnProperty('apiKey') && !changes.apiKey.firstChange) {
|
|
97
|
+
this.httpService.setApiKey(this.apiKey);
|
|
98
|
+
}
|
|
90
99
|
if (changes.hasOwnProperty('addressParams') && !changes.addressParams.firstChange) {
|
|
91
100
|
// if (changes.hasOwnProperty('addressParams')) {
|
|
92
101
|
this.processingPrefillData = true;
|
|
@@ -947,6 +956,9 @@ var LibAddressAutocompleteByComponentComponent = /** @class */ (function () {
|
|
|
947
956
|
}
|
|
948
957
|
this.quitPrefillMode();
|
|
949
958
|
};
|
|
959
|
+
LibAddressAutocompleteByComponentComponent.ctorParameters = function () { return [
|
|
960
|
+
{ type: HttpService }
|
|
961
|
+
]; };
|
|
950
962
|
__decorate([
|
|
951
963
|
ViewChild(LocalityComponent, { static: false })
|
|
952
964
|
], LibAddressAutocompleteByComponentComponent.prototype, "autocompleteLocality", void 0);
|
|
@@ -1043,6 +1055,9 @@ var LibAddressAutocompleteByComponentComponent = /** @class */ (function () {
|
|
|
1043
1055
|
__decorate([
|
|
1044
1056
|
Output()
|
|
1045
1057
|
], LibAddressAutocompleteByComponentComponent.prototype, "clearInputEventEmitter", void 0);
|
|
1058
|
+
__decorate([
|
|
1059
|
+
Input()
|
|
1060
|
+
], LibAddressAutocompleteByComponentComponent.prototype, "apiKey", void 0);
|
|
1046
1061
|
LibAddressAutocompleteByComponentComponent = __decorate([
|
|
1047
1062
|
Component({
|
|
1048
1063
|
selector: 'bp-lib-address-autocomplete-by-component',
|
|
@@ -1053,4 +1068,4 @@ var LibAddressAutocompleteByComponentComponent = /** @class */ (function () {
|
|
|
1053
1068
|
return LibAddressAutocompleteByComponentComponent;
|
|
1054
1069
|
}());
|
|
1055
1070
|
export { LibAddressAutocompleteByComponentComponent };
|
|
1056
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYnBvc3QvYnAtYWRkcmVzcy1hdXRvLWNvbXBsZXRlLWJ5LWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImxpYi9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBYSxTQUFTLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBRy9ILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXpGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFPdkQ7SUE4RkU7UUF2RkEscUJBQWdCLEdBQVcsSUFBSSxDQUFDO1FBcUJ2Qiw4QkFBeUIsR0FBRyxLQUFLLENBQUM7UUFFbEMscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBRXhCLGtCQUFhLEdBQUcsR0FBRyxDQUFDO1FBRTdCLFdBQVc7UUFDRixnQkFBVyxHQUFHLDJHQUEyRyxDQUFDO1FBQzFILDBCQUFxQixHQUFHLENBQUMsQ0FBQztRQUMxQixtQ0FBOEIsR0FBRyxDQUFDLENBQUM7UUFHNUMsdUNBQXVDO1FBQ3ZD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R0FBa0M7SUFDakM7UUFBUixLQUFLLEVBQUU7MEZBQTRCO0lBTTNCO1FBQVIsS0FBSyxFQUFFO3VGQUFtSTtJQUNsSTtRQUFSLEtBQUssRUFBRTs2RkFBMkI7SUFDMUI7UUFBUixLQUFLLEVBQUU7c0dBQW9DO0lBQ25DO1FBQVIsS0FBSyxFQUFFOzRGQUE4QjtJQUs3QjtRQUFSLEtBQUssRUFBRTtvRkFBNkg7SUFDNUg7UUFBUixLQUFLLEVBQUU7MEZBQXdCO0lBQ3ZCO1FBQVIsS0FBSyxFQUFFO21HQUFpQztJQUNoQztRQUFSLEtBQUssRUFBRTt5RkFBMkI7SUFxQnpCO1FBQVQsTUFBTSxFQUFFO21HQUFxRTtJQUNwRTtRQUFULE1BQU0sRUFBRTtxR0FBdUU7SUFDdEU7UUFBVCxNQUFNLEVBQUU7OEZBQW1FO0lBdkZqRSwwQ0FBMEM7UUFMdEQsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLDBDQUEwQztZQUNwRCxzeUpBQXFFOztTQUV0RSxDQUFDO09BQ1csMENBQTBDLENBaWtDdEQ7SUFBRCxpREFBQztDQUFBLEFBamtDRCxJQWlrQ0M7U0Fqa0NZLDBDQUEwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUHJlZmlsbGVkUGFyYW1ldGVycyB9IGZyb20gJy4vdXRpbHMvcHJlZmlsbGVkLXBhcmFtZXRlcnMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlIH0gZnJvbSAnLi9lbnVtL3ZhbGlkYXRpb24tbWVzc2FnZS1vcHRpb24tdHlwZS5lbnVtJztcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlVHlwZSB9IGZyb20gJy4vZW51bS92YWxpZGF0aW9uLW1lc3NhZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IExvY2FsaXR5Q29tcG9uZW50IH0gZnJvbSAnLi9sb2NhbGl0eS9sb2NhbGl0eS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RyZWV0Q29tcG9uZW50IH0gZnJvbSAnLi9zdHJlZXQvc3RyZWV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdHJlZXROdW1iZXJDb21wb25lbnQgfSBmcm9tICcuL3N0cmVldC1udW1iZXIvc3RyZWV0LW51bWJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm94TnVtYmVyQ29tcG9uZW50IH0gZnJvbSAnLi9ib3gtbnVtYmVyL2JveC1udW1iZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFERFJFU1NMRVZFTCB9IGZyb20gJy4vZW51bSc7XG5pbXBvcnQgeyBQcmVmaWxsRGF0YSB9IGZyb20gJy4vdXRpbHMvcHJlZmlsbC1kYXRhJztcbmltcG9ydCB7IFByZWZpbGxFdmVudCB9IGZyb20gJy4vdXRpbHMvcHJlZmxsbC5ldmVudCc7XG5pbXBvcnQgeyBJbnB1dE5hbWVUeXBlIH0gZnJvbSAnLi9lbnVtL2lucHV0LW5hbWUuZW51bSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JwLWxpYi1hZGRyZXNzLWF1dG9jb21wbGV0ZS1ieS1jb21wb25lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWyAnLi9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTGliQWRkcmVzc0F1dG9jb21wbGV0ZUJ5Q29tcG9uZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG5cbiAgQFZpZXdDaGlsZChMb2NhbGl0eUNvbXBvbmVudCwge3N0YXRpYzogZmFsc2V9ICkgYXV0b2NvbXBsZXRlTG9jYWxpdHk7XG4gIEBWaWV3Q2hpbGQoU3RyZWV0Q29tcG9uZW50LCB7c3RhdGljOiBmYWxzZX0gKSBhdXRvY29tcGxldGVTdHJlZXQ7XG4gIEBWaWV3Q2hpbGQoU3RyZWV0TnVtYmVyQ29tcG9uZW50LCB7c3RhdGljOiBmYWxzZX0gKSBhdXRvY29tcGxldGVTdHJlZXROYjtcbiAgQFZpZXdDaGlsZChCb3hOdW1iZXJDb21wb25lbnQsIHtzdGF0aWM6IGZhbHNlfSApIGF1dG9jb21wbGV0ZUJveE5iO1xuXG4gIHNlbGVjdGVkTGFuZ3VhZ2U6IHN0cmluZyA9IG51bGw7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBASW5wdXQoKSBzZXQgaW5wdXRMYW5nKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMYW5ndWFnZSh2YWwpO1xuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBASW5wdXQoKSBzZXQgY2xlYXJJbnB1dChmb2N1czoge3NldEZvY3VzOiBib29sZWFuLCB0aW1lc3RhbXA6IERhdGV9KSB7XG4gICAgdGhpcy5vbkNsZWFySW5wdXQoZm9jdXMpO1xuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBASW5wdXQoKSBzZXQgdmFsaWRhdGlvbk1lc3NhZ2VPcHRpb24ob3B0aW9uOiB7dmFsaWRhdGlvblR5cGU6IFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZSwgdGltZXN0YW1wOiBEYXRlfSkge1xuICAgIHRoaXMuc2V0VmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25Gcm9tSW5wdXQob3B0aW9uKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGRlZmF1bHRMYW5nOiBzdHJpbmc7XG5cbiAgQElucHV0KCkgc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSA9IGZhbHNlO1xuICBASW5wdXQoKSBtaW5MZXZlbDogbnVtYmVyO1xuICBASW5wdXQoKSBub3RJbkxpc3RBbGxvd2VkID0gdHJ1ZTtcbiAgQElucHV0KCkgYWRkcmVzc1BhcmFtczogUHJlZmlsbGVkUGFyYW1ldGVycztcbiAgQElucHV0KCkgbWVzc2FnZU9wdGlvbiA9ICdZJztcblxuICAvLyBMT0NBTElUWVxuICBASW5wdXQoKSBsb2NhbGl0eVVybCA9ICdodHRwczovL3dlYnNlcnZpY2VzLXB1Yi5icG9zdC5iZS93cy9FeHRlcm5hbE1haWxpbmdBZGRyZXNzUHJvb2ZpbmdDU1JFU1RfdjEvYWRkcmVzcy9hdXRvY29tcGxldGUvbG9jYWxpdHknO1xuICBASW5wdXQoKSBtYXhTdWdnZXN0aW9uTG9jYWxpdHkgPSA1O1xuICBASW5wdXQoKSB2aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnQgPSA1O1xuICBASW5wdXQoKSBzb3J0Q3JpdGVyaWFMb2NhbGl0eTogc3RyaW5nO1xuICBwb3N0YWxDb2RlTG9jYWxpdHk6IHN0cmluZztcbiAgLy8gbG9jYWxpdHlQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIGxvY2FsaXR5UHJlZmlsbERhdGE6IFByZWZpbGxEYXRhID0gbnVsbDtcblxuICAvLyBTVFJFRVRcbiAgQElucHV0KCkgc3RyZWV0VXJsID0gJ2h0dHBzOi8vd2Vic2VydmljZXMtcHViLmJwb3N0LmJlL3dzL0V4dGVybmFsTWFpbGluZ0FkZHJlc3NQcm9vZmluZ0NTUkVTVF92MS9hZGRyZXNzL2F1dG9jb21wbGV0ZS9zdHJlZXQnO1xuICBASW5wdXQoKSBtYXhTdWdnZXN0aW9uU3RyZWV0ID0gNTtcbiAgQElucHV0KCkgdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXRDb3VudCA9IDU7XG4gIEBJbnB1dCgpIHNvcnRDcml0ZXJpYVN0cmVldDogc3RyaW5nO1xuICAvLyBzdHJlZXRQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIHN0cmVldFByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YSA9IG51bGw7XG5cbiAgLy8gU1RSRUVUIE5VTUJFUlxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gIEBJbnB1dCgpIHN0cmVldE51bWJlclVybCA9ICdodHRwczovL3dlYnNlcnZpY2VzLXB1Yi5icG9zdC5iZS93cy9FeHRlcm5hbE1haWxpbmdBZGRyZXNzUHJvb2ZpbmdDU1JFU1RfdjEvYWRkcmVzcy9hdXRvY29tcGxldGUvc3RyZWV0TnVtYmVyJztcbiAgQElucHV0KCkgbWF4U3VnZ2VzdGlvblN0cmVldE5iID0gNTtcbiAgQElucHV0KCkgdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50ID0gNTtcbiAgQElucHV0KCkgc29ydENyaXRlcmlhU3RyZWV0TmI6IHN0cmluZztcbiAgLy8gc3RyZWV0TnVtYmVyUGFyYW1zOiBQcmVmaWxsZWRQYXJhbWV0ZXJzO1xuICBzdHJlZXROdW1iZXJQcmVmaWxsRGF0YTogUHJlZmlsbERhdGEgPSBudWxsO1xuXG4gIC8vIEJPWCBOVU1CRVJcbiAgQElucHV0KCkgYm94TnVtYmVyVXJsID0gJ2h0dHBzOi8vd2Vic2VydmljZXMtcHViLmJwb3N0LmJlL3dzL0V4dGVybmFsTWFpbGluZ0FkZHJlc3NQcm9vZmluZ0NTUkVTVF92MS9hZGRyZXNzL2F1dG9jb21wbGV0ZS9ib3hOdW1iZXInO1xuICBASW5wdXQoKSBtYXhTdWdnZXN0aW9uQm94TmIgPSA1O1xuICBASW5wdXQoKSB2aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnQgPSA1O1xuICBASW5wdXQoKSBzb3J0Q3JpdGVyaWFCb3hOYjogc3RyaW5nO1xuICAvLyBib3hQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIGJveE51bWJlclByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YSA9IG51bGw7XG5cblxuICBib3hOdW1iZXI6IHN0cmluZztcbiAgY29tcGxldGVBZGRyZXNzOiBzdHJpbmc7XG4gIGVtaXR0ZWRBZGRyZXNzOiBhbnkgPSBudWxsO1xuICBsb2NhbGl0eTogc3RyaW5nO1xuICBwb3N0YWxDb2RlOiBzdHJpbmc7XG4gIHNlbGVjdGVkQWRkcmVzczogYW55O1xuICBzdHJlZXQ6IHN0cmluZztcbiAgc3RyZWV0QWRkcmVzczogYW55O1xuICBzdHJlZXROYW1lSW5wdXQ6IHN0cmluZztcbiAgc3RyZWV0TnVtYmVyOiBzdHJpbmc7XG4gIHN0cmVldE51bWJlckFkZHJlc3M6IGFueTtcbiAgc3RyZWV0TnVtYmVySW5wdXQ6IHN0cmluZztcbiAgdmFsaWRhdGlvbk1lc3NhZ2U6IHttZXNzYWdlVHlwZTogVmFsaWRhdGlvbk1lc3NhZ2VUeXBlLCB0cmFuc2xhdGVkTWVzc2FnZTogc3RyaW5nfSA9IHttZXNzYWdlVHlwZTogbnVsbCwgdHJhbnNsYXRlZE1lc3NhZ2U6ICcnfTtcbiAgdmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlOiBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGU7XG5cblxuICBAT3V0cHV0KCkgYWRkcmVzc0NvbXBsZXRlRXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHZhbGlkYXRpb25NZXNzYWdlRXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNsZWFySW5wdXRFdmVudEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cbiAgcHJlZmlsbERhdGE6IFByZWZpbGxEYXRhO1xuICBwcm9jZXNzaW5nUHJlZmlsbERhdGEgPSBmYWxzZTtcblxuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZFxuICB7XG4gICAgaWYgKHRoaXMuYWRkcmVzc1BhcmFtcylcbiAgICB7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhID0gdGhpcy5hZGRyZXNzUGFyYW1zIGFzIGFueSBhcyBQcmVmaWxsRGF0YTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpXG4gIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pXG4gICAge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKVxuICB7XG4gICAgaWYgKGNoYW5nZXMpXG4gICAge1xuICAgICAgLy8gY29kZSBmb3IgdHJhY2luZ1xuICAgICAgLy8gdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheVBhcmFtZXRlcnNDaGFuZ2VzVG9Db25zb2xlKGNoYW5nZXMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYWRkcmVzc1BhcmFtcycpICYmICFjaGFuZ2VzLmFkZHJlc3NQYXJhbXMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIC8vIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdhZGRyZXNzUGFyYW1zJykpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nUHJlZmlsbERhdGEgPSB0cnVlO1xuICAgICAgICB0aGlzLmVudGVyUHJlZmlsbE1vZGUoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSBudWxsO1xuICAgICAgICB0aGlzLm5vdGlmeUFkZHJlc3NDb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgIC8qXG4gICAgICAgIGlmICh0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgIT09IG51bGwgJiYgdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLkxPQ0FMSVRZKTtcbiAgICAgICAgICB0aGlzLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgKi9cbiAgICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLnN0cmVldFByZWZpbGxEYXRhID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6d2lkZ2V0IGRldGVjdGVkIHByZWZpbGxpbmcnLCB0aGlzLmFkZHJlc3NQYXJhbXMpOyB9XG4gICAgICAgIHRoaXMuYWRkcmVzc1BhcmFtcy5taW5MZXZlbCA9IC8qNCovIEFERFJFU1NMRVZFTC5MT0NBTElUWTtcbiAgICAgICAgLy8gdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gdGhpcy5hZGRyZXNzUGFyYW1zOyAvLyBhcyBhbnkgYXMgUHJlZmlsbERhdGE7XG4gICAgICAgIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSA9IG5ldyBQcmVmaWxsRGF0YSh0aGlzLmFkZHJlc3NQYXJhbXMpO1xuICAgICAgICAvLyBPYmplY3QuYXNzaWduKHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSwgdGhpcy5hZGRyZXNzUGFyYW1zKTtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6OmNoZWNraW5nIGxvY2FsaXR5IG1hdGNoLi4uICcsIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSk7IH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkaXNwbGF5UGFyYW1ldGVyc0NoYW5nZXNUb0NvbnNvbGUoY2hhbmdlczogU2ltcGxlQ2hhbmdlcylcbiAge1xuICAgIC8vIG1lc3NhZ2VPcHRpb25cbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbWVzc2FnZU9wdGlvbicpICYmICFjaGFuZ2VzLm1lc3NhZ2VPcHRpb24uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXMubWVzc2FnZU9wdGlvbi5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBtZXNzYWdlT3B0aW9uJywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBtYXhTdWdnZXN0aW9uTG9jYWxpdHlcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbWF4U3VnZ2VzdGlvbkxvY2FsaXR5JykgJiYgIWNoYW5nZXMubWF4U3VnZ2VzdGlvbkxvY2FsaXR5LmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzLm1heFN1Z2dlc3Rpb25Mb2NhbGl0eS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBtYXhTdWdnZXN0aW9uTG9jYWxpdHknLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIHZpc2libGVTdWdnZXN0aW9uTG9jYWxpdHlDb3VudFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCd2aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnQnKSAmJiAhY2hhbmdlcy52aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXMudmlzaWJsZVN1Z2dlc3Rpb25Mb2NhbGl0eUNvdW50LmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHZpc2libGVTdWdnZXN0aW9uTG9jYWxpdHlDb3VudCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gc29ydENyaXRlcmlhTG9jYWxpdHlcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc29ydENyaXRlcmlhTG9jYWxpdHknKSAmJiAhY2hhbmdlcy5zb3J0Q3JpdGVyaWFMb2NhbGl0eS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5zb3J0Q3JpdGVyaWFMb2NhbGl0eS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBzb3J0Q3JpdGVyaWFMb2NhbGl0eScsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gbWF4U3VnZ2VzdGlvblN0cmVldFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdtYXhTdWdnZXN0aW9uU3RyZWV0JykgJiYgIWNoYW5nZXMubWF4U3VnZ2VzdGlvblN0cmVldC5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5tYXhTdWdnZXN0aW9uU3RyZWV0LmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIG1heFN1Z2dlc3Rpb25TdHJlZXQnLCB3Y0NoYW5nZXMpO1xuICAgIH1cbiAgICAvLyB2aXNpYmxlU3VnZ2VzdGlvblN0cmVldENvdW50XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3Zpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnQnKSAmJiAhY2hhbmdlcy52aXNpYmxlU3VnZ2VzdGlvblN0cmVldENvdW50LmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzLnZpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnQuY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXRDb3VudCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuICAgIC8vIHNvcnRDcml0ZXJpYVN0cmVldFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzb3J0Q3JpdGVyaWFTdHJlZXQnKSAmJiAhY2hhbmdlcy5zb3J0Q3JpdGVyaWFTdHJlZXQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXMuc29ydENyaXRlcmlhU3RyZWV0LmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHNvcnRDcml0ZXJpYVN0cmVldCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gbWF4U3VnZ2VzdGlvblN0cmVldE5iXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ21heFN1Z2dlc3Rpb25TdHJlZXROYicpICYmICFjaGFuZ2VzLm1heFN1Z2dlc3Rpb25TdHJlZXROYi5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5tYXhTdWdnZXN0aW9uU3RyZWV0TmIuY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gbWF4U3VnZ2VzdGlvblN0cmVldE5iJywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gICAgLy8gdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3Zpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudCcpICYmICFjaGFuZ2VzLnZpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudC5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy52aXNpYmxlU3VnZ2VzdGlvblN0cmVldE5iQ291bnQuY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gICAgLy8gc29ydENyaXRlcmlhU3RyZWV0TmJcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc29ydENyaXRlcmlhU3RyZWV0TmInKSAmJiAhY2hhbmdlcy5zb3J0Q3JpdGVyaWFTdHJlZXROYi5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5zb3J0Q3JpdGVyaWFTdHJlZXROYi5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBzb3J0Q3JpdGVyaWFTdHJlZXROYicsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gbWF4U3VnZ2VzdGlvbkJveE5iXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ21heFN1Z2dlc3Rpb25Cb3hOYicpICYmICFjaGFuZ2VzLm1heFN1Z2dlc3Rpb25Cb3hOYi5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5tYXhTdWdnZXN0aW9uQm94TmIuY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gbWF4U3VnZ2VzdGlvbkJveE5iJywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gICAgLy8gdmlzaWJsZVN1Z2dlc3Rpb25Cb3hOYkNvdW50XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3Zpc2libGVTdWdnZXN0aW9uQm94TmJDb3VudCcpICYmICFjaGFuZ2VzLnZpc2libGVTdWdnZXN0aW9uQm94TmJDb3VudC5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy52aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnQuY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gdmlzaWJsZVN1Z2dlc3Rpb25Cb3hOYkNvdW50Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gICAgLy8gc29ydENyaXRlcmlhQm94TmJcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc29ydENyaXRlcmlhQm94TmInKSAmJiAhY2hhbmdlcy5zb3J0Q3JpdGVyaWFCb3hOYi5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5zb3J0Q3JpdGVyaWFCb3hOYi5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBzb3J0Q3JpdGVyaWFCb3hOYicsIHdjQ2hhbmdlcyk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJXaWRnZXQoKSB7XG4gICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuY2xlYXJXaWRnZXQoKTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJXaWRnZXQoKTtcbiAgfVxuXG4gIGNoYW5nZU1pbkxldmVsKG1pbkxldmVsOiBudW1iZXIpIHtcbiAgICB0aGlzLm1pbkxldmVsID0gbWluTGV2ZWw7XG4gIH1cblxuICAvLyBDYWxsZWQgYnkgdGhlIHNwZWNpZmljIGJ1dHRvbnMgaW4gdGhlIGFwcFxuICBvbkNsZWFySW5wdXQoZm9jdXM6IHtzZXRGb2N1czogYm9vbGVhbiwgdGltZXN0YW1wOiBEYXRlfSkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6b25DbGVhcklucHV0JywgZm9jdXMpOyB9XG5cbiAgICAvKlxuICAgIGlmIChmb2N1cyA9PT0gbnVsbCB8fCBmb2N1cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSovXG5cbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuXG4gICAgY29uc3Qgc2V0Rm9jdXMgPSAoZm9jdXMgPT09IG51bGwgfHwgZm9jdXMgPT09IHVuZGVmaW5lZCkgPyBmYWxzZSA6IGZvY3VzLnNldEZvY3VzO1xuXG4gICAgc3dpdGNoICh0aGlzLm1pbkxldmVsKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdCT1hfTlVNQkVSJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdTVFJFRVRfTlVNQkVSJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5zdHJlZXQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnU1RSRUVUJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gQm94IG51bWJlclxuICAgICAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIpXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFN0cmVldCBudW1iZXJcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTdHJlZXQgbmFtZVxuICAgICAgICAgIHRoaXMuc3RyZWV0ID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0KVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gTG9jYWxpdHlcbiAgICAgICAgICB0aGlzLmxvY2FsaXR5ID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkpXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnTE9DQUxJVFknKTtcbiAgICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBnZXRCb3hQcmVmaXgoKTogc3RyaW5nIHtcbiAgICBsZXQgcHJlZml4ID0gJyc7XG4gICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UpIHtcbiAgICAgIGNhc2UgJ2ZyJzpcbiAgICAgICAgcHJlZml4ID0gJ0JURSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbmwnOlxuICAgICAgICAgIHByZWZpeCA9ICdCVVMnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcHJlZml4ID0gJ0JPWCc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcHJlZml4O1xuICB9XG5cbiAgbm90aWZ5QWRkcmVzc0NvbXBsZXRlKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdub3RpZnkgZm9yIGFkZHJlc3MgY29tcGxldGUnKTtcbiAgICB0aGlzLmFkZHJlc3NDb21wbGV0ZUV2ZW50RW1pdHRlci5lbWl0KHRoaXMuc2VsZWN0ZWRBZGRyZXNzKTtcbiAgICB0aGlzLmVtaXR0ZWRBZGRyZXNzID0gdGhpcy5zZWxlY3RlZEFkZHJlc3M7XG4gICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkodGhpcy5lbWl0dGVkQWRkcmVzcyk7XG4gIH1cblxuICBvbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoZXZlbnQpIHtcblxuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6b25DbGVhcklucHV0RXZlbnRFbWl0dGVyJywgZXZlbnQpOyB9XG5cbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuXG4gICAgbGV0IG5leHRBZGRyZXNzID0gdGhpcy5zZWxlY3RlZEFkZHJlc3M7IC8vIHRoaXMuZW1pdHRlZEFkZHJlc3M7XG5cbiAgICBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuTE9DQUxJVFkpXG4gICAge1xuICAgICAgLy8gQm94IG51bWJlclxuICAgICAgdGhpcy5ib3hOdW1iZXIgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUJveE5iKVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICAvLyBTdHJlZXQgbnVtYmVyXG4gICAgICB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIFN0cmVldCBuYW1lXG4gICAgICB0aGlzLnN0cmVldCA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0KVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIExvY2FsaXR5XG4gICAgICB0aGlzLmxvY2FsaXR5ID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eSlcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBuZXh0QWRkcmVzcyA9IG51bGw7XG4gICAgfVxuICAgIGVsc2UgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLlNUUkVFVClcbiAgICB7XG4gICAgICAvLyBCb3ggbnVtYmVyXG4gICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIFN0cmVldCBudW1iZXJcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVTdHJlZXROYilcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgLy8gU3RyZWV0IG5hbWVcbiAgICAgIHRoaXMuc3RyZWV0ID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVTdHJlZXQpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBuZXh0QWRkcmVzcyA9IG51bGw7XG4gICAgfVxuICAgIGVsc2UgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLlNUUkVFVF9OVU1CRVIpXG4gICAge1xuICAgICAgLy8gQm94IG51bWJlclxuICAgICAgdGhpcy5ib3hOdW1iZXIgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUJveE5iKVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICAvLyBTdHJlZXQgbnVtYmVyXG4gICAgICB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgbmV4dEFkZHJlc3MgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKVxuICAgIHtcbiAgICAgIC8vIEJveCBudW1iZXJcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVCb3hOYilcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICAvLyBBdHRlbnRpb246IGlmIG5vdC1pbi1saXN0IGRvbid0IHJlc2V0IHRoZSBhZGRyZXNzLCBqdXN0IG1vZGlmeSBpdFxuICAgICAgY29uc3QgYWRkcmVzc0lzTm90SW5MaXN0XG4gICAgICAgID0gbmV4dEFkZHJlc3MgIT09IHVuZGVmaW5lZCAmJiAgbmV4dEFkZHJlc3MgIT09IG51bGxcbiAgICAgICAgICAmJiBuZXh0QWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnbm90LWluLWxpc3QnKSAmJiBuZXh0QWRkcmVzc1snbm90LWluLWxpc3QnXSA9PT0gdHJ1ZVxuICAgICAgICA/IHRydWUgOiBmYWxzZTtcblxuICAgICAgICAvKlxuICAgICAgaWYgKGFkZHJlc3NJc05vdEluTGlzdClcbiAgICAgIHtcbiAgICAgICAgZGVsZXRlIG5leHRBZGRyZXNzLmJveE51bWJlcjtcbiAgICAgICAgbmV4dEFkZHJlc3MuaXNDb21wbGV0ZU5vdGlmaWNhdGlvbkRvbmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyAhPT0gbnVsbCApXG4gICAgICAgIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ3Jlc2V0IGJveCBvbiBub3QtaW4tbGlzdCcsIHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyk7XG5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBuZXh0QWRkcmVzcyA9IG51bGw7XG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgICBuZXh0QWRkcmVzcyA9IHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyAhPT0gbnVsbCA/IHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyA6IG51bGw7XG4gICAgICAvKlxuICAgICAgY29uc3QgYWRkcmVzc0lzTm90SW5MaXN0XG4gICAgICAgID0gbmV4dEFkZHJlc3MgIT09IG51bGwgJiYgbmV4dEFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ25vdC1pbi1saXN0JykgJiYgbmV4dEFkZHJlc3NbJ25vdC1pbi1saXN0J10gPT09IHRydWVcbiAgICAgICAgPyB0cnVlIDogZmFsc2U7XG4gICAgICAqL1xuICAgICAgY29uc3QgYWRkcmVzc0lzQ29tcGxldGVcbiAgICAgICAgPSBuZXh0QWRkcmVzcyAhPT0gdW5kZWZpbmVkICYmIG5leHRBZGRyZXNzICE9PSBudWxsXG4gICAgICAgICAgJiYgbmV4dEFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBuZXh0QWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGFkZHJlc3NJc0NvbXBsZXRlO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KGV2ZW50KTtcblxuICAgIGlmICh0aGlzLmVtaXR0ZWRBZGRyZXNzICE9PSBudWxsICkge1xuICAgICAgdGhpcy5hZGRyZXNzQ29tcGxldGVFdmVudEVtaXR0ZXIuZW1pdChuZXh0QWRkcmVzcyk7XG4gICAgICB0aGlzLmVtaXR0ZWRBZGRyZXNzID0gbmV4dEFkZHJlc3M7XG4gICAgfVxuXG5cbiAgICAvLyBna2FcbiAgICAvKlxuICAgIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5MT0NBTElUWSlcbiAgICB7XG4gICAgICB0aGlzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLkxPQ0FMSVRZO1xuICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0UHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIC8vIHRoaXMuY2xlYXJJbnB1dChmb2N1czoge3NldEZvY3VzOiBib29sZWFuLCB0aW1lc3RhbXA6IERhdGV9KTtcbiAgICAgIHRoaXMubG9jYWxpdHkgPSAnJztcbiAgICAgIHRoaXMucG9zdGFsQ29kZSA9ICcnO1xuICAgICAgdGhpcy5zdHJlZXQgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSBudWxsO1xuICAgICAgdGhpcy5ib3hOdW1iZXIgPSBudWxsO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmxvY2FsaXR5ID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLlNUUkVFVClcbiAgICB7XG4gICAgICB0aGlzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLlNUUkVFVDtcbiAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldFByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIC8vIHRoaXMuY2xlYXJJbnB1dChmb2N1czoge3NldEZvY3VzOiBib29sZWFuLCB0aW1lc3RhbXA6IERhdGV9KTtcbiAgICAgIHRoaXMuc3RyZWV0ID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gbnVsbDtcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gbnVsbDtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLlNUUkVFVF9OVU1CRVIpXG4gICAge1xuICAgICAgdGhpcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSO1xuICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIC8vIHRoaXMuY2xlYXJJbnB1dChmb2N1czoge3NldEZvY3VzOiBib29sZWFuLCB0aW1lc3RhbXA6IERhdGV9KTtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gbnVsbDtcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gbnVsbDtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgfVxuICAgIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKVxuICAgIHtcbiAgICAgIHRoaXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuQk9YX05VTUJFUjtcbiAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5ib3hOdW1iZXIgPSBudWxsO1xuICAgICAgLy8gdGhpcy5jbGVhcklucHV0KGZvY3VzOiB7c2V0Rm9jdXM6IGJvb2xlYW4sIHRpbWVzdGFtcDogRGF0ZX0pO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgfVxuICAgICovXG4gIH1cblxuICByZXNldExvY2FsaXR5KGV2ZW50KSB7XG4gICAgdGhpcy5wb3N0YWxDb2RlID0gJyc7XG4gICAgdGhpcy5sb2NhbGl0eSA9ICcnO1xuICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5TVFJFRVQpO1xuICAgIHRoaXMuc2V0QWRkcmVzcyhudWxsLCA0KTtcbiAgfVxuXG4gIHJlc2V0U3RyZWV0KGV2ZW50KSB7XG4gICAgdGhpcy5zdHJlZXQgPSAnJztcbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuU1RSRUVUX05VTUJFUik7XG4gICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgIHRoaXMuc2V0QWRkcmVzcyhudWxsLCAzKTtcbiAgfVxuXG4gIHJlc2V0U3RyZWV0TnVtYmVyKGV2ZW50LCByZXNldEFkZHJlc3M6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdyZXNldCBzdHJlZXQgbnVtbmVyIScsIGV2ZW50LCByZXNldEFkZHJlc3MpO1xuICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpO1xuXG4gICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgdGhpcy5zZXRBZGRyZXNzKG51bGwsIDIpO1xuICAgIC8vICQkIDcgdGhpcy5zZXRBZGRyZXNzKG51bGwsIDIpOyAvLyAkJCA/Pz8/P1xuICAgIC8qXG4gICAgaWYgKHJlc2V0QWRkcmVzcyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZXRBZGRyZXNzKC8gKm51bGwqIC8gdGhpcy5zZWxlY3RlZEFkZHJlc3MpO1xuICAgIH0qL1xuICB9XG5cbiAgcmVzZXRCb3hOdW1iZXIoZXZlbnQsIHJlc2V0QWRkcmVzczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3Jlc2V0IHN0cmVldCBudW1uZXIhJywgZXZlbnQsIHJlc2V0QWRkcmVzcyk7XG4gICAgdGhpcy5ib3hOdW1iZXIgPSAnJztcbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICB0aGlzLnNldEFkZHJlc3MobnVsbCwgMSk7XG4gICAgLy8gdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKTtcbiAgICAvLyAkJCA3IHRoaXMuc2V0QWRkcmVzcyhudWxsLCAxKTsgLy8gJCQgPz8/Pz9cbiAgICAvKlxuICAgIGlmIChyZXNldEFkZHJlc3MgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc2V0QWRkcmVzcygvICpudWxsKiAvIHRoaXMuc2VsZWN0ZWRBZGRyZXNzKTtcbiAgICB9Ki9cbiAgfVxuXG4gIGVudGVyUHJlZmlsbE1vZGUoKSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6OmVudGVyUHJlZmlsbE1vZGUoKScpOyB9XG4gICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIgJiYgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYiAmJiB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldCAmJiB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5IClcbiAgICB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnByZWZpbGxpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5wcmVmaWxsaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnByZWZpbGxpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5wcmVmaWxsaW5nID0gdHJ1ZTtcblxuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQubG9jYWxpdHkgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICB9XG5cbiAgfVxuXG4gIHF1aXRQcmVmaWxsTW9kZSgpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6cXVpdFByZWZpbGxNb2RlKCknKTsgfVxuICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUJveE5iICYmIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIgJiYgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQgJiYgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eSApXG4gICAge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkucHJlZmlsbGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc2luZ1ByZWZpbGxEYXRhID0gZmFsc2U7XG4gIH1cblxuICBzZXRBZGRyZXNzKGFkZHJlc3M6IGFueSwgbGV2ZWw/OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6c2V0QWRkcmVzcyAtIGFkZHJlc3MgcGFydCwgbGV2ZWwnLCBhZGRyZXNzLCBsZXZlbCk7IH1cblxuICAgIC8qICQkICQkXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRBZGRyZXNzICYmICFhZGRyZXNzKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygncmVzZXQgYWRkcmVzcyEnKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0QWRkcmVzcyA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgPSBudWxsO1xuICAgICAgdGhpcy5ub3RpZnlBZGRyZXNzQ29tcGxldGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICBpZiAoYWRkcmVzcyA9PT0gbnVsbCB8fCBhZGRyZXNzID09PSB1bmRlZmluZWQgKVxuICAgIHtcbiAgICAgIGNvbnN0IGRvTm90aWZ5ID0gKHRoaXMuc2VsZWN0ZWRBZGRyZXNzICE9PSBudWxsICYmIHRoaXMuc2VsZWN0ZWRBZGRyZXNzICE9PSB1bmRlZmluZWQpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSBudWxsO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgaWYgKGRvTm90aWZ5KSB7XG4gICAgICAgIHRoaXMubm90aWZ5QWRkcmVzc0NvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFkZHJlc3MpIHtcbiAgICAgIGRlbGV0ZSBhZGRyZXNzLm1lc3NhZ2VzO1xuICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZUFkZHJlc3MoKTtcbiAgICAgIHRoaXMucG9zdGFsQ29kZSA9IGFkZHJlc3MucG9zdGFsQ29kZSA/IGFkZHJlc3MucG9zdGFsQ29kZSA6ICcnO1xuICAgICAgdGhpcy5sb2NhbGl0eSA9IGFkZHJlc3MubG9jYWxpdHlOYW1lID8gYWRkcmVzcy5sb2NhbGl0eU5hbWUgOiAnJztcbiAgICAgIHRoaXMuc3RyZWV0ID0gYWRkcmVzcy5zdHJlZXROYW1lID8gYWRkcmVzcy5zdHJlZXROYW1lIDogJyc7XG4gICAgICAvLyBjb25zdCBub3RJbkxpc3QgPSBhZGRyZXNzWydub3QtaW4tbGlzdCddO1xuICAgICAgLy8gY29uc3QgaXNOb3RJbkxpc3QgPSBub3RJbkxpc3QgIT09IG51bGwgJiYgbm90SW5MaXN0ICE9PSB1bmRlZmluZWQgJiYgbm90SW5MaXN0ID09PSB0cnVlO1xuICAgICAgLypcbiAgICAgIGlmIChhZGRyZXNzLmhvdXNlTnVtYmVyKSB7XG4gICAgICAgIGlmICghYWRkcmVzcy5pc0NvbXBsZXRlIHx8IGlzTm90SW5MaXN0KSB7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSBhZGRyZXNzLmhvdXNlTnVtYmVyID8gYWRkcmVzcy5ob3VzZU51bWJlciA6ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghYWRkcmVzcy5ib3hOdW1iZXIpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nIHJlc2V0IHN0cmVldCBudW1iZXIgIScpO1xuICAgICAgICAgICAgaWYgKCAhdGhpcy5wcm9jZXNzaW5nUHJlZmlsbERhdGEgKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVzZXRTdHJlZXROdW1iZXIobnVsbCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGhpcy5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICovXG5cbiAgICAgIGNvbnN0IGFkZHJlc3NJc0NvbXBsZXRlID0gYWRkcmVzcyAhPT0gbnVsbCAmJiBhZGRyZXNzICE9PSB1bmRlZmluZWRcbiAgICAgICAgJiYgYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIGFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIGNvbnN0IGFkZHJlc3NJc05vdEluTGlzdCA9IGFkZHJlc3MgIT09IG51bGwgJiYgYWRkcmVzcyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICYmIGFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ25vdC1pbi1saXN0JykgJiYgYWRkcmVzc1snbm90LWluLWxpc3QnXSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcblxuICAgICAgc3dpdGNoIChsZXZlbCkge1xuXG4gICAgICAgIC8vIExvY2FsaXR5IC8gTXVuaWNpcGFsaXR5IGFuZCBQT3N0YWxDb2RlXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShhZGRyZXNzKTtcbiAgICAgICAgICAvKlxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMuc3RyZWV0QWRkcmVzcyA9IG51bGw7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gbnVsbDtcbiAgICAgICAgICAvL1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIFN0cmVldCBOYW1lXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShhZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0cmVldE5hbWUoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy5zdHJlZXRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgPSBudWxsO1xuICAgICAgICAgIC8qXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gU1RSRUVUIE51bWJlclxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdHJlZXROYW1lKGFkZHJlc3MpO1xuICAgICAgICAgIHRoaXMudXBkYXRlU3RyZWV0TnVtYmVyKGFkZHJlc3MpOyAvLyAkJFxuICAgICAgICAgIHRoaXMuc3RyZWV0QWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgICBpZiAoYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIGFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSApXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoYWRkcmVzc0lzTm90SW5MaXN0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9IGFkZHJlc3MuaG91c2VOdW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9IGFkZHJlc3MuaG91c2VOdW1iZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8qXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgICovXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gQk9YIE51bWJlclxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGFkZHJlc3NJc05vdEluTGlzdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoIHRoaXMuc2VsZWN0ZWRBZGRyZXNzICYmIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmlzQ29tcGxldGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcy5pc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8qXG4gICAgICBpZiAoYWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlICkge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRBZGRyZXNzLmlzQ29tcGxldGVOb3RpZmljYXRpb25Eb25lKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MuaXNDb21wbGV0ZU5vdGlmaWNhdGlvbkRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMubm90aWZ5QWRkcmVzc0NvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubm90aWZ5QWRkcmVzc0NvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcy5pc0NvbXBsZXRlTm90aWZpY2F0aW9uRG9uZSA9IHRydWU7XG4gICAgICB0aGlzLm5vdGlmeUFkZHJlc3NDb21wbGV0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldExhbmd1YWdlKGxhbmc6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSA9IGxhbmc7XG4gIH1cblxuICBzZXRWYWxpZGF0aW9uTWVzc2FnZSgvKm1lc3NhZ2U6IHN0cmluZyovbWVzc2FnZToge21lc3NhZ2VUeXBlOiBWYWxpZGF0aW9uTWVzc2FnZVR5cGUsIHRyYW5zbGF0ZWRNZXNzYWdlOiBzdHJpbmd9KSB7XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgaWYgKHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlID09PSBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUuRU1JVCkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZUV2ZW50RW1pdHRlci5lbWl0KG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG5cbiAgdXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KGFkZHJlc3MpIHtcbiAgICBpZiAoYWRkcmVzcyAmJiBhZGRyZXNzLnBvc3RhbENvZGUgJiYgYWRkcmVzcy5sb2NhbGl0eU5hbWUpIHtcbiAgICAgIHRoaXMucG9zdGFsQ29kZUxvY2FsaXR5ID0gIGFkZHJlc3MucG9zdGFsQ29kZSAgKyAnICcgKyBhZGRyZXNzLmxvY2FsaXR5TmFtZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuc2VhcmNoVGV4dCA9IHRoaXMucG9zdGFsQ29kZUxvY2FsaXR5O1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVN0cmVldE5hbWUoYWRkcmVzcykge1xuICAgIGlmIChhZGRyZXNzICYmIGFkZHJlc3Muc3RyZWV0TmFtZSkge1xuICAgICAgdGhpcy5zdHJlZXROYW1lSW5wdXQgPSBhZGRyZXNzLnN0cmVldE5hbWU7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlU3RyZWV0TnVtYmVyKGFkZHJlc3MpIHtcbiAgICBpZiAoYWRkcmVzcyAmJiBhZGRyZXNzLmhvdXNlTnVtYmVyKSB7XG4gICAgICB0aGlzLnN0cmVldE51bWJlcklucHV0ID0gYWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVDb21wbGV0ZUFkZHJlc3MoKSB7XG4gICAgbGV0IGNvbmNhdFN0ciA9ICcnO1xuICAgIGNvbmNhdFN0ciArPSB0aGlzLnNlbGVjdGVkQWRkcmVzcy5zdHJlZXROYW1lID8gYCR7dGhpcy5zZWxlY3RlZEFkZHJlc3Muc3RyZWV0TmFtZX0gYCA6ICcnO1xuICAgIGNvbmNhdFN0ciArPSB0aGlzLnNlbGVjdGVkQWRkcmVzcy5ob3VzZU51bWJlciA/IGAke3RoaXMuc2VsZWN0ZWRBZGRyZXNzLmhvdXNlTnVtYmVyfSBgIDogJyc7XG4gICAgY29uY2F0U3RyICs9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmJveE51bWJlciA/IGAke3RoaXMuZ2V0Qm94UHJlZml4KCl9ICR7dGhpcy5zZWxlY3RlZEFkZHJlc3MuYm94TnVtYmVyfSBgIDogJyc7XG4gICAgY29uY2F0U3RyICs9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzLnBvc3RhbENvZGUgPyBgJHt0aGlzLnNlbGVjdGVkQWRkcmVzcy5wb3N0YWxDb2RlfSBgIDogJyc7XG4gICAgY29uY2F0U3RyICs9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzLm11bmljaXBhbGl0eU5hbWUgPyBgJHt0aGlzLnNlbGVjdGVkQWRkcmVzcy5tdW5pY2lwYWxpdHlOYW1lfSBgIDogJyc7XG4gICAgdGhpcy5jb21wbGV0ZUFkZHJlc3MgPSBjb25jYXRTdHI7XG4gIH1cblxuICBzZXRWYWxpZGF0aW9uTWVzc2FnZU9wdGlvbkZyb21JbnB1dChvcHRpb246IHt2YWxpZGF0aW9uVHlwZTogVmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlLCB0aW1lc3RhbXA6IERhdGV9KSB7XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUgPSBvcHRpb24udmFsaWRhdGlvblR5cGU7XG4gICAgLy8gY29uc29sZS5sb2coJ2FkZHJlc3NlIGF1dG9jb21wbGV0ZSAtIHZhbGlkYXRpb24gbWVzc2FnZSBvcHRpb24nLCB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZSk7XG4gIH1cblxuICBvbkxvY2FsaXR5UHJlZmlsbEV2ZW50KGV2ZW50OiBQcmVmaWxsRXZlbnQpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6bG9jYWxpdHkgcHJlZmlsbCBldmVudCByZWNlaXZlZDonLCBldmVudCk7IH1cbiAgICAvKlxuICAgIGlmIChldmVudC5wZXJmZWN0TWF0Y2gpXG4gICAge1xuICAgICAgdGhpcy5hZGRyZXNzUGFyYW1zLm1pbkxldmVsID0gLyAqMyogLyBBRERSRVNTTEVWRUwuU1RSRUVUO1xuICAgICAgdGhpcy5zdHJlZXRQYXJhbXMgPSB0aGlzLmFkZHJlc3NQYXJhbXM7XG4gICAgfVxuICAgICovXG4gICAgY29uc3QgZGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgIGlmIChldmVudC5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5UGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUgKVxuICAgIHtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBkYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KGFkZHJlc3MpO1xuICAgICAgdGhpcy5hZGRyZXNzUGFyYW1zLm1pbkxldmVsID0gLyo0Ki8gQUREUkVTU0xFVkVMLlNUUkVFVDtcbiAgICAgIC8vIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSA9IHRoaXMuYWRkcmVzc1BhcmFtczsgLy8gYXMgYW55IGFzIFByZWZpbGxEYXRhO1xuICAgICAgLy8gdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gbmV3IFByZWZpbGxEYXRhKHRoaXMuYWRkcmVzc1BhcmFtcyk7XG4gICAgICAvLyBPYmplY3QuYXNzaWduKHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSwgdGhpcy5hZGRyZXNzUGFyYW1zKTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEudHMgPSBuZXcgRGF0ZSgpO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLlNUUkVFVDtcbiAgICAgIC8vIEJlIHN1cmUgdG8gcHJvcGFnYXRlIHRoZSBsb2NhbGl0eU5hbWUgaW4gcGxhY2Ugb2YgdGhlIG11bmljaXBhbGl0eU5hbWUgIVxuICAgICAgY29uc3Qgc3VnZ2VzdGlvbkFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLmxvY2FsaXR5TmFtZTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3NMb2NhbGl0eU5hbWU7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLnBvc3RhbENvZGU7XG4gICAgICAvLyB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShzdWdnZXN0aW9uQWRkcmVzcyk7XG5cbiAgICAgIGNvbnN0IHN0cmVldE5hbWUgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TmFtZTtcbiAgICAgIGlmIChzdHJlZXROYW1lID09PSBudWxsIHx8IHN0cmVldE5hbWUgPT09IHVuZGVmaW5lZCB8fCBzdHJlZXROYW1lID09PSAnJylcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5MT0NBTElUWSk7XG4gICAgICAgIC8vIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgIGNvbnN0IHN0cmVldE5hbWUgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TmFtZTtcbiAgICAgIGlmIChzdHJlZXROYW1lID09PSBudWxsIHx8IHN0cmVldE5hbWUgPT09IHVuZGVmaW5lZCB8fCBzdHJlZXROYW1lID09PSAnJylcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5MT0NBTElUWSk7XG4gICAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbGliOjpwcmVmaWxsOiB0cmlnZ2VyIGNoZWNraW5nIHN0cmVldCBtYXRjaC4uLiAnLCB0aGlzLnByZWZpbGxEYXRhKTsgfVxuICAgICAgICB0aGlzLnN0cmVldFByZWZpbGxEYXRhID0gdGhpcy5wcmVmaWxsRGF0YTtcbiAgICAgIH1cbiAgICAgICovXG5cbiAgICAgIHRoaXMuc3RyZWV0UHJlZmlsbERhdGEgPSB0aGlzLnByZWZpbGxEYXRhO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgLy8gY29uc3QgY3BBbmRMb2NhbGl0eSA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlICsgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWU7XG4gICAgICBjb25zdCBjcEFuZExvY2FsaXR5ID0gZGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUgKyBkYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmxvY2FsaXR5ID0gJyc7XG4gICAgICBpZiAoIGNwQW5kTG9jYWxpdHkgPT09IG51bGwgfHwgY3BBbmRMb2NhbGl0eSA9PT0gdW5kZWZpbmVkIHx8IGNwQW5kTG9jYWxpdHkubGVuZ3RoID09PSAwIClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKG51bGwsIEFERFJFU1NMRVZFTC5MT0NBTElUWSk7XG4gICAgICB9XG4gICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uU3RyZWV0UHJlZmlsbEV2ZW50KGV2ZW50OiBQcmVmaWxsRXZlbnQpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6c3RyZWV0OiBwcmVmaWxsIGV2ZW50IHJlY2VpdmVkJywgZXZlbnQpOyB9XG4gICAgLypcbiAgICBjb25zdCBkYXRhOiBQcmVmaWxsRGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgIGlmIChkYXRhLnByZWZpbGxTdHJlZXRQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSApXG4gICAge1xuICAgICAgY29uc29sZS5sb2coJ2xpYjo6b25TdHJlZXRQcmVmaWxsRXZlbnQ6IE1BVENIIEZPVU5EJywgZGF0YSk7XG4gICAgICB0aGlzLnBvc3RhbENvZGVMb2NhbGl0eSA9ICdUUlVDLU1VQ0hFJztcbiAgICAgIHRoaXMucG9zdGFsQ29kZUxvY2FsaXR5ID0gJ1RSVUMtTVVDSEUgMic7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LnNlYXJjaFRleHQgPSB0aGlzLnBvc3RhbENvZGVMb2NhbGl0eTtcbiAgICB9XG4gICAgKi9cbiAgICBjb25zdCBkYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGV2ZW50LnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXRQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSApXG4gICAge1xuICAgICAgLy8gaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbGliOjpvblN0cmVldFByZWZpbGxFdmVudDogTUFUQ0ggRk9VTkQnLCBkYXRhKTsgfVxuICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGRhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaFN1Z2dlc3Rpb247XG4gICAgICBjb25zdCBhZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVTdHJlZXROYW1lKGFkZHJlc3MpO1xuICAgICAgdGhpcy5hZGRyZXNzUGFyYW1zLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVI7XG4gICAgICAvLyB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgPSB0aGlzLmFkZHJlc3NQYXJhbXM7IC8vIGFzIGFueSBhcyBQcmVmaWxsRGF0YTtcbiAgICAgIC8vIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSA9IG5ldyBQcmVmaWxsRGF0YSh0aGlzLmFkZHJlc3NQYXJhbXMpO1xuICAgICAgLy8gT2JqZWN0LmFzc2lnbih0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEsIHRoaXMuYWRkcmVzc1BhcmFtcyk7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhLnRzID0gbmV3IERhdGUoKTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSO1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbkFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXRQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLmxvY2FsaXR5TmFtZTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3NMb2NhbGl0eU5hbWU7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLnBvc3RhbENvZGU7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLnN0cmVldE5hbWU7XG4gICAgICAvLyB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShzdWdnZXN0aW9uQWRkcmVzcyk7XG4gICAgICAvLyB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShzdWdnZXN0aW9uQWRkcmVzcyk7XG5cbiAgICAgIGNvbnN0IHN0cmVldE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXI7XG4gICAgICBpZiAoc3RyZWV0TnVtYmVyID09PSBudWxsIHx8IHN0cmVldE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IHN0cmVldE51bWJlciA9PT0gJycpXG4gICAgICB7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUKTtcbiAgICAgICAgLy8gdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgIGNvbnN0IHN0cmVldE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXI7XG4gICAgICBpZiAoc3RyZWV0TnVtYmVyID09PSBudWxsIHx8IHN0cmVldE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IHN0cmVldE51bWJlciA9PT0gJycpXG4gICAgICB7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUKTtcbiAgICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6OnByZWZpbGw6IHRyaWdnZXIgY2hlY2tpbmcgc3RyZWV0IG51bWJlciBtYXRjaC4uLiAnLCB0aGlzLnByZWZpbGxEYXRhKTt9XG4gICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyUHJlZmlsbERhdGEgPSB0aGlzLnByZWZpbGxEYXRhO1xuICAgICAgfVxuICAgICAgKi9cblxuICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBjb25zdCBwcmVmaWxsU3RyZWV0TmFtZSA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuXG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2xpYjo6b25TdHJlZXRQcmVmaWxsRXZlbnQgLSBOTyBNQVRDSCBBVCBTVFJFRVQgTEVWRUwnLCBwcmVmaWxsU3RyZWV0TmFtZSApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIHByZWZpbGxTdHJlZXROYW1lID09PSBudWxsIHx8IHByZWZpbGxTdHJlZXROYW1lID09PSB1bmRlZmluZWQgfHwgcHJlZmlsbFN0cmVldE5hbWUubGVuZ3RoID09PSAwIClcbiAgICAgIHtcbiAgICAgICAgLy8gaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6Om9uU3RyZWV0UHJlZmlsbEV2ZW50OiBOTyBNQVRDSCBGT1VORCAtIHNldCBhZGRyZXNzJywgZGF0YSwgYWRkcmVzcyk7IH1cbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5MT0NBTElUWSk7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIC8vIGFkZHJlc3Muc3RyZWV0TmFtZSA9IHByZWZpbGxTdHJlZXROYW1lO1xuICAgICAgICBhZGRyZXNzLnNlYXJjaEJhclN0cmluZyA9IHByZWZpbGxTdHJlZXROYW1lO1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVCk7XG4gICAgICB9XG4gICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uU3RyZWV0TnVtYmVyUHJlZmlsbEV2ZW50KGV2ZW50OiBQcmVmaWxsRXZlbnQpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6OnN0cmVldCBudW1iZXIgcHJlZmlsbCBldmVudCByZWNlaXZlZDonLCBldmVudCk7IH1cbiAgICBjb25zdCBkYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGRhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlKVxuICAgIHtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBkYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIHRoaXMudXBkYXRlU3RyZWV0TnVtYmVyKGFkZHJlc3MpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWxlY3RlZEFkZHJlc3MgPSBhZGRyZXNzO1xuXG4gICAgICBjb25zdCBhZGRyZXNzSXNDb21wbGV0ZSA9IGFkZHJlc3MgJiYgYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIGFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIGNvbnN0IGFkZHJlc3NJc05vdEluTGlzdCA9IGFkZHJlc3MgJiYgYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnbm90LWluLWxpc3QnKSAmJiBhZGRyZXNzWydub3QtaW4tbGlzdCddID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgICBpZiAoYWRkcmVzc0lzQ29tcGxldGUgJiYgISBhZGRyZXNzSXNOb3RJbkxpc3QgKVxuICAgICAge1xuICAgICAgICAvLyBmb3VuZCBhZGRyZXNzIC0gcGVyZmVjdCBtYXRjaGF0IHN0cmVldCBudW1iZXIgbGV2ZWxcbiAgICAgICAgLy8gTm90aGluZyB0byBkbyBhbnltb3JlXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuQk9YX05VTUJFUjtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnRzID0gbmV3IERhdGUoKTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVI7XG4gICAgICAgIC8vIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lXG4gICAgICAgIC8vICA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcy5sb2NhbGl0eU5hbWU7XG5cbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbkFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3MubG9jYWxpdHlOYW1lO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLnBvc3RhbENvZGU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3Muc3RyZWV0TmFtZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlciA9IHN1Z2dlc3Rpb25BZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShzdWdnZXN0aW9uQWRkcmVzcyk7XG4gICAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcblxuICAgICAgICBjb25zdCBib3hOdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyO1xuICAgICAgICBpZiAoICEgYWRkcmVzc0lzTm90SW5MaXN0ICYmIChib3hOdW1iZXIgPT09IG51bGwgfHwgYm94TnVtYmVyID09PSB1bmRlZmluZWQgfHwgYm94TnVtYmVyID09PSAnJykgKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICAgICAgICAvLyB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgY29uc3QgYm94TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlcjtcbiAgICAgICAgaWYgKCAhIGFkZHJlc3NJc05vdEluTGlzdCAmJiAoYm94TnVtYmVyID09PSBudWxsIHx8IGJveE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IGJveE51bWJlciA9PT0gJycpIClcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUik7XG4gICAgICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6OnByZWZpbGw6IHRyaWdnZXIgY2hlY2tpbmcgYm94IG51bWJlciBtYXRjaC4uLiAnLCB0aGlzLnByZWZpbGxEYXRhKTsgfVxuICAgICAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSB0aGlzLnByZWZpbGxEYXRhO1xuICAgICAgICB9XG4gICAgICAgICovXG5cbiAgICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBjb25zdCBwcmVmaWxsU3RyZWV0TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXRQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgaWYgKCBwcmVmaWxsU3RyZWV0TnVtYmVyID09PSBudWxsIHx8IHByZWZpbGxTdHJlZXROdW1iZXIgPT09IHVuZGVmaW5lZCB8fCBwcmVmaWxsU3RyZWV0TnVtYmVyLmxlbmd0aCA9PT0gMCApXG4gICAgICB7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgLy8gYWRkcmVzcy5ob3VzZU51bWJlciA9IHByZWZpbGxTdHJlZXROdW1iZXI7XG4gICAgICAgIGFkZHJlc3Muc2VhcmNoQmFyU3RyaW5nID0gcHJlZmlsbFN0cmVldE51bWJlcjtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgb25Cb3hOdW1iZXJQcmVmaWxsRXZlbnQoZXZlbnQ6IFByZWZpbGxFdmVudCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6cHJlZmlsbDogYm94IG51bWJlciBldmVudCByZWNlaXZlZDonLCBldmVudCk7IH1cbiAgICBjb25zdCBkYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGRhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlKVxuICAgIHtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBkYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuQk9YX05VTUJFUik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBjb25zdCBwcmVmaWxsQm94TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlcjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICBpZiAoIHByZWZpbGxCb3hOdW1iZXIgPT09IG51bGwgfHwgcHJlZmlsbEJveE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IHByZWZpbGxCb3hOdW1iZXIubGVuZ3RoID09PSAwIClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgLy8gYWRkcmVzcy5ib3hOdW1iZXIgPSBwcmVmaWxsQm94TnVtYmVyO1xuICAgICAgICBhZGRyZXNzLnNlYXJjaEJhclN0cmluZyA9IHByZWZpbGxCb3hOdW1iZXI7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuQk9YX05VTUJFUik7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
1071
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYnBvc3QvYnAtYWRkcmVzcy1hdXRvLWNvbXBsZXRlLWJ5LWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImxpYi9saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBYSxTQUFTLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBRy9ILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXpGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBT3REO0lBb0dFLG9EQUNVLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBOUZsQyxxQkFBZ0IsR0FBVyxJQUFJLENBQUM7UUFHeEIsWUFBTyxHQUFHLDJGQUEyRixDQUFDO1FBb0JyRyw4QkFBeUIsR0FBRyxLQUFLLENBQUM7UUFFbEMscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBRXhCLGtCQUFhLEdBQUcsR0FBRyxDQUFDO1FB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VywwQ0FBMEMsQ0Era0N0RDtJQUFELGlEQUFDO0NBQUEsQUEva0NELElBK2tDQztTQS9rQ1ksMENBQTBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIFNpbXBsZUNoYW5nZXMsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQcmVmaWxsZWRQYXJhbWV0ZXJzIH0gZnJvbSAnLi91dGlscy9wcmVmaWxsZWQtcGFyYW1ldGVycyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUgfSBmcm9tICcuL2VudW0vdmFsaWRhdGlvbi1tZXNzYWdlLW9wdGlvbi10eXBlLmVudW0nO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VUeXBlIH0gZnJvbSAnLi9lbnVtL3ZhbGlkYXRpb24tbWVzc2FnZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgTG9jYWxpdHlDb21wb25lbnQgfSBmcm9tICcuL2xvY2FsaXR5L2xvY2FsaXR5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdHJlZXRDb21wb25lbnQgfSBmcm9tICcuL3N0cmVldC9zdHJlZXQuY29tcG9uZW50JztcbmltcG9ydCB7IFN0cmVldE51bWJlckNvbXBvbmVudCB9IGZyb20gJy4vc3RyZWV0LW51bWJlci9zdHJlZXQtbnVtYmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCb3hOdW1iZXJDb21wb25lbnQgfSBmcm9tICcuL2JveC1udW1iZXIvYm94LW51bWJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQUREUkVTU0xFVkVMIH0gZnJvbSAnLi9lbnVtJztcbmltcG9ydCB7IFByZWZpbGxEYXRhIH0gZnJvbSAnLi91dGlscy9wcmVmaWxsLWRhdGEnO1xuaW1wb3J0IHsgUHJlZmlsbEV2ZW50IH0gZnJvbSAnLi91dGlscy9wcmVmbGxsLmV2ZW50JztcbmltcG9ydCB7IElucHV0TmFtZVR5cGUgfSBmcm9tICcuL2VudW0vaW5wdXQtbmFtZS5lbnVtJztcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9odHRwLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdicC1saWItYWRkcmVzcy1hdXRvY29tcGxldGUtYnktY29tcG9uZW50JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpYi1hZGRyZXNzLWF1dG9jb21wbGV0ZS1ieS1jb21wb25lbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsgJy4vbGliLWFkZHJlc3MtYXV0b2NvbXBsZXRlLWJ5LWNvbXBvbmVudC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIExpYkFkZHJlc3NBdXRvY29tcGxldGVCeUNvbXBvbmVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gIEBWaWV3Q2hpbGQoTG9jYWxpdHlDb21wb25lbnQsIHtzdGF0aWM6IGZhbHNlfSApIGF1dG9jb21wbGV0ZUxvY2FsaXR5O1xuICBAVmlld0NoaWxkKFN0cmVldENvbXBvbmVudCwge3N0YXRpYzogZmFsc2V9ICkgYXV0b2NvbXBsZXRlU3RyZWV0O1xuICBAVmlld0NoaWxkKFN0cmVldE51bWJlckNvbXBvbmVudCwge3N0YXRpYzogZmFsc2V9ICkgYXV0b2NvbXBsZXRlU3RyZWV0TmI7XG4gIEBWaWV3Q2hpbGQoQm94TnVtYmVyQ29tcG9uZW50LCB7c3RhdGljOiBmYWxzZX0gKSBhdXRvY29tcGxldGVCb3hOYjtcblxuICBzZWxlY3RlZExhbmd1YWdlOiBzdHJpbmcgPSBudWxsO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgYmFzZVVybCA9IFwiaHR0cHM6Ly9hcGkubWFpbG9wcy5icG9zdC5jbG91ZC9yb2EtaW5mby9leHRlcm5hbE1haWxpbmdBZGRyZXNzUHJvb2ZpbmdSZXN0L2F1dG9jb21wbGV0ZS9cIjtcblxuICAvLyBAdHMtaWdub3JlXG4gIEBJbnB1dCgpIHNldCBpbnB1dExhbmcodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExhbmd1YWdlKHZhbCk7XG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIEBJbnB1dCgpIHNldCBjbGVhcklucHV0KGZvY3VzOiB7c2V0Rm9jdXM6IGJvb2xlYW4sIHRpbWVzdGFtcDogRGF0ZX0pIHtcbiAgICB0aGlzLm9uQ2xlYXJJbnB1dChmb2N1cyk7XG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIEBJbnB1dCgpIHNldCB2YWxpZGF0aW9uTWVzc2FnZU9wdGlvbihvcHRpb246IHt2YWxpZGF0aW9uVHlwZTogVmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlLCB0aW1lc3RhbXA6IERhdGV9KSB7XG4gICAgdGhpcy5zZXRWYWxpZGF0aW9uTWVzc2FnZU9wdGlvbkZyb21JbnB1dChvcHRpb24pO1xuICB9XG5cbiAgQElucHV0KClcbiAgZGVmYXVsdExhbmc6IHN0cmluZztcblxuICBASW5wdXQoKSBzaG93RGVidWdNZXNzYWdlVG9Db25zb2xlID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1pbkxldmVsOiBudW1iZXI7XG4gIEBJbnB1dCgpIG5vdEluTGlzdEFsbG93ZWQgPSB0cnVlO1xuICBASW5wdXQoKSBhZGRyZXNzUGFyYW1zOiBQcmVmaWxsZWRQYXJhbWV0ZXJzO1xuICBASW5wdXQoKSBtZXNzYWdlT3B0aW9uID0gJ1knO1xuXG4gIC8vIExPQ0FMSVRZXG4gIEBJbnB1dCgpIGxvY2FsaXR5VXJsID0gdGhpcy5iYXNlVXJsICsgJ2xvY2FsaXR5JztcbiAgQElucHV0KCkgbWF4U3VnZ2VzdGlvbkxvY2FsaXR5ID0gNTtcbiAgQElucHV0KCkgdmlzaWJsZVN1Z2dlc3Rpb25Mb2NhbGl0eUNvdW50ID0gNTtcbiAgQElucHV0KCkgc29ydENyaXRlcmlhTG9jYWxpdHk6IHN0cmluZztcbiAgcG9zdGFsQ29kZUxvY2FsaXR5OiBzdHJpbmc7XG4gIC8vIGxvY2FsaXR5UGFyYW1zOiBQcmVmaWxsZWRQYXJhbWV0ZXJzO1xuICBsb2NhbGl0eVByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YSA9IG51bGw7XG5cbiAgLy8gU1RSRUVUXG4gIEBJbnB1dCgpIHN0cmVldFVybCA9IHRoaXMuYmFzZVVybCArICdzdHJlZXQnO1xuICBASW5wdXQoKSBtYXhTdWdnZXN0aW9uU3RyZWV0ID0gNTtcbiAgQElucHV0KCkgdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXRDb3VudCA9IDU7XG4gIEBJbnB1dCgpIHNvcnRDcml0ZXJpYVN0cmVldDogc3RyaW5nO1xuICAvLyBzdHJlZXRQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIHN0cmVldFByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YSA9IG51bGw7XG5cbiAgLy8gU1RSRUVUIE5VTUJFUlxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gIEBJbnB1dCgpIHN0cmVldE51bWJlclVybCA9IHRoaXMuYmFzZVVybCArICdzdHJlZXROdW1iZXInO1xuICBASW5wdXQoKSBtYXhTdWdnZXN0aW9uU3RyZWV0TmIgPSA1O1xuICBASW5wdXQoKSB2aXNpYmxlU3VnZ2VzdGlvblN0cmVldE5iQ291bnQgPSA1O1xuICBASW5wdXQoKSBzb3J0Q3JpdGVyaWFTdHJlZXROYjogc3RyaW5nO1xuICAvLyBzdHJlZXROdW1iZXJQYXJhbXM6IFByZWZpbGxlZFBhcmFtZXRlcnM7XG4gIHN0cmVldE51bWJlclByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YSA9IG51bGw7XG5cbiAgLy8gQk9YIE5VTUJFUlxuICBASW5wdXQoKSBib3hOdW1iZXJVcmwgPSB0aGlzLmJhc2VVcmwgKyAnYm94TnVtYmVyJztcbiAgQElucHV0KCkgbWF4U3VnZ2VzdGlvbkJveE5iID0gNTtcbiAgQElucHV0KCkgdmlzaWJsZVN1Z2dlc3Rpb25Cb3hOYkNvdW50ID0gNTtcbiAgQElucHV0KCkgc29ydENyaXRlcmlhQm94TmI6IHN0cmluZztcbiAgLy8gYm94UGFyYW1zOiBQcmVmaWxsZWRQYXJhbWV0ZXJzO1xuICBib3hOdW1iZXJQcmVmaWxsRGF0YTogUHJlZmlsbERhdGEgPSBudWxsO1xuXG5cbiAgYm94TnVtYmVyOiBzdHJpbmc7XG4gIGNvbXBsZXRlQWRkcmVzczogc3RyaW5nO1xuICBlbWl0dGVkQWRkcmVzczogYW55ID0gbnVsbDtcbiAgbG9jYWxpdHk6IHN0cmluZztcbiAgcG9zdGFsQ29kZTogc3RyaW5nO1xuICBzZWxlY3RlZEFkZHJlc3M6IGFueTtcbiAgc3RyZWV0OiBzdHJpbmc7XG4gIHN0cmVldEFkZHJlc3M6IGFueTtcbiAgc3RyZWV0TmFtZUlucHV0OiBzdHJpbmc7XG4gIHN0cmVldE51bWJlcjogc3RyaW5nO1xuICBzdHJlZXROdW1iZXJBZGRyZXNzOiBhbnk7XG4gIHN0cmVldE51bWJlcklucHV0OiBzdHJpbmc7XG4gIHZhbGlkYXRpb25NZXNzYWdlOiB7bWVzc2FnZVR5cGU6IFZhbGlkYXRpb25NZXNzYWdlVHlwZSwgdHJhbnNsYXRlZE1lc3NhZ2U6IHN0cmluZ30gPSB7bWVzc2FnZVR5cGU6IG51bGwsIHRyYW5zbGF0ZWRNZXNzYWdlOiAnJ307XG4gIHZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZTogVmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlO1xuXG5cbiAgQE91dHB1dCgpIGFkZHJlc3NDb21wbGV0ZUV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSB2YWxpZGF0aW9uTWVzc2FnZUV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjbGVhcklucHV0RXZlbnRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXG4gIHByZWZpbGxEYXRhOiBQcmVmaWxsRGF0YTtcbiAgcHJvY2Vzc2luZ1ByZWZpbGxEYXRhID0gZmFsc2U7XG5cblxuICAvLyBQYXNzIHRoZSBBUEkga2V5IGFzIGEgcHJvcGVydHkgb2YgdGhlIGxpYnJhcnkgIVxuICBASW5wdXQoKVxuICBhcGlLZXk9J2N5UmtLT0Q3M08xRE9kZ2NETExuc2FPaURoNk95T2t0M0JCVDVKVTEnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cFNlcnZpY2U6IEh0dHBTZXJ2aWNlXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZFxuICB7XG4gICAgdGhpcy5odHRwU2VydmljZS5zZXRBcGlLZXkoIHRoaXMuYXBpS2V5ICk7XG4gICAgXG4gICAgaWYgKHRoaXMuYWRkcmVzc1BhcmFtcylcbiAgICB7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhID0gdGhpcy5hZGRyZXNzUGFyYW1zIGFzIGFueSBhcyBQcmVmaWxsRGF0YTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpXG4gIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pXG4gICAge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKVxuICB7XG4gICAgaWYgKGNoYW5nZXMpXG4gICAge1xuICAgICAgLy8gY29kZSBmb3IgdHJhY2luZ1xuICAgICAgLy8gdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50XG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheVBhcmFtZXRlcnNDaGFuZ2VzVG9Db25zb2xlKGNoYW5nZXMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYXBpS2V5JykgJiYgIWNoYW5nZXMuYXBpS2V5LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIHRoaXMuaHR0cFNlcnZpY2Uuc2V0QXBpS2V5KCB0aGlzLmFwaUtleSApO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYWRkcmVzc1BhcmFtcycpICYmICFjaGFuZ2VzLmFkZHJlc3NQYXJhbXMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIC8vIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdhZGRyZXNzUGFyYW1zJykpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nUHJlZmlsbERhdGEgPSB0cnVlO1xuICAgICAgICB0aGlzLmVudGVyUHJlZmlsbE1vZGUoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSBudWxsO1xuICAgICAgICB0aGlzLm5vdGlmeUFkZHJlc3NDb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgIC8qXG4gICAgICAgIGlmICh0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgIT09IG51bGwgJiYgdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLkxPQ0FMSVRZKTtcbiAgICAgICAgICB0aGlzLmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgKi9cbiAgICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLnN0cmVldFByZWZpbGxEYXRhID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6d2lkZ2V0IGRldGVjdGVkIHByZWZpbGxpbmcnLCB0aGlzLmFkZHJlc3NQYXJhbXMpOyB9XG4gICAgICAgIHRoaXMuYWRkcmVzc1BhcmFtcy5taW5MZXZlbCA9IC8qNCovIEFERFJFU1NMRVZFTC5MT0NBTElUWTtcbiAgICAgICAgLy8gdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gdGhpcy5hZGRyZXNzUGFyYW1zOyAvLyBhcyBhbnkgYXMgUHJlZmlsbERhdGE7XG4gICAgICAgIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSA9IG5ldyBQcmVmaWxsRGF0YSh0aGlzLmFkZHJlc3NQYXJhbXMpO1xuICAgICAgICAvLyBPYmplY3QuYXNzaWduKHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSwgdGhpcy5hZGRyZXNzUGFyYW1zKTtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6OmNoZWNraW5nIGxvY2FsaXR5IG1hdGNoLi4uICcsIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSk7IH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkaXNwbGF5UGFyYW1ldGVyc0NoYW5nZXNUb0NvbnNvbGUoY2hhbmdlczogU2ltcGxlQ2hhbmdlcylcbiAge1xuICAgIC8vIG1lc3NhZ2VPcHRpb25cbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbWVzc2FnZU9wdGlvbicpICYmICFjaGFuZ2VzLm1lc3NhZ2VPcHRpb24uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXMubWVzc2FnZU9wdGlvbi5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBtZXNzYWdlT3B0aW9uJywgd2NDaGFuZ2VzKTtcbiAgICB9XG5cbiAgICAvLyBtYXhTdWdnZXN0aW9uTG9jYWxpdHlcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnbWF4U3VnZ2VzdGlvbkxvY2FsaXR5JykgJiYgIWNoYW5nZXMubWF4U3VnZ2VzdGlvbkxvY2FsaXR5LmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzLm1heFN1Z2dlc3Rpb25Mb2NhbGl0eS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBtYXhTdWdnZXN0aW9uTG9jYWxpdHknLCB3Y0NoYW5nZXMpO1xuICAgIH1cblxuICAgIC8vIHZpc2libGVTdWdnZXN0aW9uTG9jYWxpdHlDb3VudFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCd2aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnQnKSAmJiAhY2hhbmdlcy52aXNpYmxlU3VnZ2VzdGlvbkxvY2FsaXR5Q291bnQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXMudmlzaWJsZVN1Z2dlc3Rpb25Mb2NhbGl0eUNvdW50LmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHZpc2libGVTdWdnZXN0aW9uTG9jYWxpdHlDb3VudCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gc29ydENyaXRlcmlhTG9jYWxpdHlcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc29ydENyaXRlcmlhTG9jYWxpdHknKSAmJiAhY2hhbmdlcy5zb3J0Q3JpdGVyaWFMb2NhbGl0eS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5zb3J0Q3JpdGVyaWFMb2NhbGl0eS5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBzb3J0Q3JpdGVyaWFMb2NhbGl0eScsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gbWF4U3VnZ2VzdGlvblN0cmVldFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdtYXhTdWdnZXN0aW9uU3RyZWV0JykgJiYgIWNoYW5nZXMubWF4U3VnZ2VzdGlvblN0cmVldC5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5tYXhTdWdnZXN0aW9uU3RyZWV0LmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIG1heFN1Z2dlc3Rpb25TdHJlZXQnLCB3Y0NoYW5nZXMpO1xuICAgIH1cbiAgICAvLyB2aXNpYmxlU3VnZ2VzdGlvblN0cmVldENvdW50XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3Zpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnQnKSAmJiAhY2hhbmdlcy52aXNpYmxlU3VnZ2VzdGlvblN0cmVldENvdW50LmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCB3Y0NoYW5nZXMgPSBjaGFuZ2VzLnZpc2libGVTdWdnZXN0aW9uU3RyZWV0Q291bnQuY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXRDb3VudCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuICAgIC8vIHNvcnRDcml0ZXJpYVN0cmVldFxuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdzb3J0Q3JpdGVyaWFTdHJlZXQnKSAmJiAhY2hhbmdlcy5zb3J0Q3JpdGVyaWFTdHJlZXQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHdjQ2hhbmdlcyA9IGNoYW5nZXMuc29ydENyaXRlcmlhU3RyZWV0LmN1cnJlbnRWYWx1ZTtcbiAgICAgIGNvbnNvbGUubG9nKCdsaWIgd2lkZ2V0OSAtIHNvcnRDcml0ZXJpYVN0cmVldCcsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gbWF4U3VnZ2VzdGlvblN0cmVldE5iXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ21heFN1Z2dlc3Rpb25TdHJlZXROYicpICYmICFjaGFuZ2VzLm1heFN1Z2dlc3Rpb25TdHJlZXROYi5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5tYXhTdWdnZXN0aW9uU3RyZWV0TmIuY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gbWF4U3VnZ2VzdGlvblN0cmVldE5iJywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gICAgLy8gdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3Zpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudCcpICYmICFjaGFuZ2VzLnZpc2libGVTdWdnZXN0aW9uU3RyZWV0TmJDb3VudC5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy52aXNpYmxlU3VnZ2VzdGlvblN0cmVldE5iQ291bnQuY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gdmlzaWJsZVN1Z2dlc3Rpb25TdHJlZXROYkNvdW50Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gICAgLy8gc29ydENyaXRlcmlhU3RyZWV0TmJcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc29ydENyaXRlcmlhU3RyZWV0TmInKSAmJiAhY2hhbmdlcy5zb3J0Q3JpdGVyaWFTdHJlZXROYi5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5zb3J0Q3JpdGVyaWFTdHJlZXROYi5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBzb3J0Q3JpdGVyaWFTdHJlZXROYicsIHdjQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgLy8gbWF4U3VnZ2VzdGlvbkJveE5iXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ21heFN1Z2dlc3Rpb25Cb3hOYicpICYmICFjaGFuZ2VzLm1heFN1Z2dlc3Rpb25Cb3hOYi5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5tYXhTdWdnZXN0aW9uQm94TmIuY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gbWF4U3VnZ2VzdGlvbkJveE5iJywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gICAgLy8gdmlzaWJsZVN1Z2dlc3Rpb25Cb3hOYkNvdW50XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ3Zpc2libGVTdWdnZXN0aW9uQm94TmJDb3VudCcpICYmICFjaGFuZ2VzLnZpc2libGVTdWdnZXN0aW9uQm94TmJDb3VudC5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy52aXNpYmxlU3VnZ2VzdGlvbkJveE5iQ291bnQuY3VycmVudFZhbHVlO1xuICAgICAgY29uc29sZS5sb2coJ2xpYiB3aWRnZXQ5IC0gdmlzaWJsZVN1Z2dlc3Rpb25Cb3hOYkNvdW50Jywgd2NDaGFuZ2VzKTtcbiAgICB9XG4gICAgLy8gc29ydENyaXRlcmlhQm94TmJcbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnc29ydENyaXRlcmlhQm94TmInKSAmJiAhY2hhbmdlcy5zb3J0Q3JpdGVyaWFCb3hOYi5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3Qgd2NDaGFuZ2VzID0gY2hhbmdlcy5zb3J0Q3JpdGVyaWFCb3hOYi5jdXJyZW50VmFsdWU7XG4gICAgICBjb25zb2xlLmxvZygnbGliIHdpZGdldDkgLSBzb3J0Q3JpdGVyaWFCb3hOYicsIHdjQ2hhbmdlcyk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJXaWRnZXQoKSB7XG4gICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuY2xlYXJXaWRnZXQoKTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcldpZGdldCgpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJXaWRnZXQoKTtcbiAgfVxuXG4gIGNoYW5nZU1pbkxldmVsKG1pbkxldmVsOiBudW1iZXIpIHtcbiAgICB0aGlzLm1pbkxldmVsID0gbWluTGV2ZWw7XG4gIH1cblxuICAvLyBDYWxsZWQgYnkgdGhlIHNwZWNpZmljIGJ1dHRvbnMgaW4gdGhlIGFwcFxuICBvbkNsZWFySW5wdXQoZm9jdXM6IHtzZXRGb2N1czogYm9vbGVhbiwgdGltZXN0YW1wOiBEYXRlfSkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6b25DbGVhcklucHV0JywgZm9jdXMpOyB9XG5cbiAgICAvKlxuICAgIGlmIChmb2N1cyA9PT0gbnVsbCB8fCBmb2N1cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfSovXG5cbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuXG4gICAgY29uc3Qgc2V0Rm9jdXMgPSAoZm9jdXMgPT09IG51bGwgfHwgZm9jdXMgPT09IHVuZGVmaW5lZCkgPyBmYWxzZSA6IGZvY3VzLnNldEZvY3VzO1xuXG4gICAgc3dpdGNoICh0aGlzLm1pbkxldmVsKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdCT1hfTlVNQkVSJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KCdTVFJFRVRfTlVNQkVSJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgdGhpcy5zdHJlZXQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnU1RSRUVUJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gQm94IG51bWJlclxuICAgICAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIpXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KHNldEZvY3VzLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFN0cmVldCBudW1iZXJcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChzZXRGb2N1cywgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTdHJlZXQgbmFtZVxuICAgICAgICAgIHRoaXMuc3RyZWV0ID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0KVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gTG9jYWxpdHlcbiAgICAgICAgICB0aGlzLmxvY2FsaXR5ID0gJyc7XG4gICAgICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkpXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LmNsZWFySW5wdXQoc2V0Rm9jdXMsIGZhbHNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudEVtaXR0ZXIuZW1pdCgnTE9DQUxJVFknKTtcbiAgICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBnZXRCb3hQcmVmaXgoKTogc3RyaW5nIHtcbiAgICBsZXQgcHJlZml4ID0gJyc7XG4gICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkTGFuZ3VhZ2UpIHtcbiAgICAgIGNhc2UgJ2ZyJzpcbiAgICAgICAgcHJlZml4ID0gJ0JURSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbmwnOlxuICAgICAgICAgIHByZWZpeCA9ICdCVVMnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcHJlZml4ID0gJ0JPWCc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcHJlZml4O1xuICB9XG5cbiAgbm90aWZ5QWRkcmVzc0NvbXBsZXRlKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdub3RpZnkgZm9yIGFkZHJlc3MgY29tcGxldGUnKTtcbiAgICB0aGlzLmFkZHJlc3NDb21wbGV0ZUV2ZW50RW1pdHRlci5lbWl0KHRoaXMuc2VsZWN0ZWRBZGRyZXNzKTtcbiAgICB0aGlzLmVtaXR0ZWRBZGRyZXNzID0gdGhpcy5zZWxlY3RlZEFkZHJlc3M7XG4gICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkodGhpcy5lbWl0dGVkQWRkcmVzcyk7XG4gIH1cblxuICBvbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoZXZlbnQpIHtcblxuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6b25DbGVhcklucHV0RXZlbnRFbWl0dGVyJywgZXZlbnQpOyB9XG5cbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuXG4gICAgbGV0IG5leHRBZGRyZXNzID0gdGhpcy5zZWxlY3RlZEFkZHJlc3M7IC8vIHRoaXMuZW1pdHRlZEFkZHJlc3M7XG5cbiAgICBpZiAoZXZlbnQgPT09IElucHV0TmFtZVR5cGUuTE9DQUxJVFkpXG4gICAge1xuICAgICAgLy8gQm94IG51bWJlclxuICAgICAgdGhpcy5ib3hOdW1iZXIgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUJveE5iKVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICAvLyBTdHJlZXQgbnVtYmVyXG4gICAgICB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIFN0cmVldCBuYW1lXG4gICAgICB0aGlzLnN0cmVldCA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0KVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIExvY2FsaXR5XG4gICAgICB0aGlzLmxvY2FsaXR5ID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eSlcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBuZXh0QWRkcmVzcyA9IG51bGw7XG4gICAgfVxuICAgIGVsc2UgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLlNUUkVFVClcbiAgICB7XG4gICAgICAvLyBCb3ggbnVtYmVyXG4gICAgICB0aGlzLmJveE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIFN0cmVldCBudW1iZXJcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVTdHJlZXROYilcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgLy8gU3RyZWV0IG5hbWVcbiAgICAgIHRoaXMuc3RyZWV0ID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVTdHJlZXQpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICBuZXh0QWRkcmVzcyA9IG51bGw7XG4gICAgfVxuICAgIGVsc2UgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLlNUUkVFVF9OVU1CRVIpXG4gICAge1xuICAgICAgLy8gQm94IG51bWJlclxuICAgICAgdGhpcy5ib3hOdW1iZXIgPSAnJztcbiAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUJveE5iKVxuICAgICAge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICAvLyBTdHJlZXQgbnVtYmVyXG4gICAgICB0aGlzLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIpXG4gICAgICB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5vbkNsZWFyU3RyZWV0TnVtYmVySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgbmV4dEFkZHJlc3MgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKVxuICAgIHtcbiAgICAgIC8vIEJveCBudW1iZXJcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gJyc7XG4gICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVCb3hOYilcbiAgICAgIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIC8vIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICAvLyBBdHRlbnRpb246IGlmIG5vdC1pbi1saXN0IGRvbid0IHJlc2V0IHRoZSBhZGRyZXNzLCBqdXN0IG1vZGlmeSBpdFxuICAgICAgY29uc3QgYWRkcmVzc0lzTm90SW5MaXN0XG4gICAgICAgID0gbmV4dEFkZHJlc3MgIT09IHVuZGVmaW5lZCAmJiAgbmV4dEFkZHJlc3MgIT09IG51bGxcbiAgICAgICAgICAmJiBuZXh0QWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnbm90LWluLWxpc3QnKSAmJiBuZXh0QWRkcmVzc1snbm90LWluLWxpc3QnXSA9PT0gdHJ1ZVxuICAgICAgICA/IHRydWUgOiBmYWxzZTtcblxuICAgICAgICAvKlxuICAgICAgaWYgKGFkZHJlc3NJc05vdEluTGlzdClcbiAgICAgIHtcbiAgICAgICAgZGVsZXRlIG5leHRBZGRyZXNzLmJveE51bWJlcjtcbiAgICAgICAgbmV4dEFkZHJlc3MuaXNDb21wbGV0ZU5vdGlmaWNhdGlvbkRvbmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyAhPT0gbnVsbCApXG4gICAgICAgIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ3Jlc2V0IGJveCBvbiBub3QtaW4tbGlzdCcsIHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyk7XG5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICBuZXh0QWRkcmVzcyA9IG51bGw7XG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgICBuZXh0QWRkcmVzcyA9IHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyAhPT0gbnVsbCA/IHRoaXMuc3RyZWV0TnVtYmVyQWRkcmVzcyA6IG51bGw7XG4gICAgICAvKlxuICAgICAgY29uc3QgYWRkcmVzc0lzTm90SW5MaXN0XG4gICAgICAgID0gbmV4dEFkZHJlc3MgIT09IG51bGwgJiYgbmV4dEFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ25vdC1pbi1saXN0JykgJiYgbmV4dEFkZHJlc3NbJ25vdC1pbi1saXN0J10gPT09IHRydWVcbiAgICAgICAgPyB0cnVlIDogZmFsc2U7XG4gICAgICAqL1xuICAgICAgY29uc3QgYWRkcmVzc0lzQ29tcGxldGVcbiAgICAgICAgPSBuZXh0QWRkcmVzcyAhPT0gdW5kZWZpbmVkICYmIG5leHRBZGRyZXNzICE9PSBudWxsXG4gICAgICAgICAgJiYgbmV4dEFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ2lzQ29tcGxldGUnKSAmJiBuZXh0QWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGFkZHJlc3NJc0NvbXBsZXRlO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50RW1pdHRlci5lbWl0KGV2ZW50KTtcblxuICAgIGlmICh0aGlzLmVtaXR0ZWRBZGRyZXNzICE9PSBudWxsICkge1xuICAgICAgdGhpcy5hZGRyZXNzQ29tcGxldGVFdmVudEVtaXR0ZXIuZW1pdChuZXh0QWRkcmVzcyk7XG4gICAgICB0aGlzLmVtaXR0ZWRBZGRyZXNzID0gbmV4dEFkZHJlc3M7XG4gICAgfVxuXG5cbiAgICAvLyBna2FcbiAgICAvKlxuICAgIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5MT0NBTElUWSlcbiAgICB7XG4gICAgICB0aGlzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLkxPQ0FMSVRZO1xuICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0UHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIC8vIHRoaXMuY2xlYXJJbnB1dChmb2N1czoge3NldEZvY3VzOiBib29sZWFuLCB0aW1lc3RhbXA6IERhdGV9KTtcbiAgICAgIHRoaXMubG9jYWxpdHkgPSAnJztcbiAgICAgIHRoaXMucG9zdGFsQ29kZSA9ICcnO1xuICAgICAgdGhpcy5zdHJlZXQgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSBudWxsO1xuICAgICAgdGhpcy5ib3hOdW1iZXIgPSBudWxsO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIub25DbGVhclN0cmVldE51bWJlcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmxvY2FsaXR5ID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLlNUUkVFVClcbiAgICB7XG4gICAgICB0aGlzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLlNUUkVFVDtcbiAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldFByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIC8vIHRoaXMuY2xlYXJJbnB1dChmb2N1czoge3NldEZvY3VzOiBib29sZWFuLCB0aW1lc3RhbXA6IERhdGV9KTtcbiAgICAgIHRoaXMuc3RyZWV0ID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gbnVsbDtcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gbnVsbDtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldC5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LmNsZWFySW5wdXQoZmFsc2UsIGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50ID09PSBJbnB1dE5hbWVUeXBlLlNUUkVFVF9OVU1CRVIpXG4gICAge1xuICAgICAgdGhpcy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSO1xuICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldE51bWJlclByZWZpbGxEYXRhID0gbnVsbDtcbiAgICAgIC8vIHRoaXMuY2xlYXJJbnB1dChmb2N1czoge3NldEZvY3VzOiBib29sZWFuLCB0aW1lc3RhbXA6IERhdGV9KTtcbiAgICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gbnVsbDtcbiAgICAgIHRoaXMuYm94TnVtYmVyID0gbnVsbDtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROYW1lID0gJyc7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgfVxuICAgIGlmIChldmVudCA9PT0gSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKVxuICAgIHtcbiAgICAgIHRoaXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuQk9YX05VTUJFUjtcbiAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5ib3hOdW1iZXIgPSBudWxsO1xuICAgICAgLy8gdGhpcy5jbGVhcklucHV0KGZvY3VzOiB7c2V0Rm9jdXM6IGJvb2xlYW4sIHRpbWVzdGFtcDogRGF0ZX0pO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgICAvLyB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLm9uQ2xlYXJTdHJlZXROdW1iZXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVTdHJlZXQuY2xlYXJJbnB1dChmYWxzZSwgZmFsc2UpO1xuICAgICAgLy8gdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5jbGVhcklucHV0KGZhbHNlLCBmYWxzZSk7XG4gICAgfVxuICAgICovXG4gIH1cblxuICByZXNldExvY2FsaXR5KGV2ZW50KSB7XG4gICAgdGhpcy5wb3N0YWxDb2RlID0gJyc7XG4gICAgdGhpcy5sb2NhbGl0eSA9ICcnO1xuICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5TVFJFRVQpO1xuICAgIHRoaXMuc2V0QWRkcmVzcyhudWxsLCA0KTtcbiAgfVxuXG4gIHJlc2V0U3RyZWV0KGV2ZW50KSB7XG4gICAgdGhpcy5zdHJlZXQgPSAnJztcbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgIHRoaXMub25DbGVhcklucHV0RXZlbnRFbWl0dGVyKElucHV0TmFtZVR5cGUuU1RSRUVUX05VTUJFUik7XG4gICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgIHRoaXMuc2V0QWRkcmVzcyhudWxsLCAzKTtcbiAgfVxuXG4gIHJlc2V0U3RyZWV0TnVtYmVyKGV2ZW50LCByZXNldEFkZHJlc3M6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdyZXNldCBzdHJlZXQgbnVtbmVyIScsIGV2ZW50LCByZXNldEFkZHJlc3MpO1xuICAgIHRoaXMuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICB0aGlzLm9uQ2xlYXJJbnB1dEV2ZW50RW1pdHRlcihJbnB1dE5hbWVUeXBlLkJPWF9OVU1CRVIpO1xuXG4gICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgdGhpcy5zZXRBZGRyZXNzKG51bGwsIDIpO1xuICAgIC8vICQkIDcgdGhpcy5zZXRBZGRyZXNzKG51bGwsIDIpOyAvLyAkJCA/Pz8/P1xuICAgIC8qXG4gICAgaWYgKHJlc2V0QWRkcmVzcyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZXRBZGRyZXNzKC8gKm51bGwqIC8gdGhpcy5zZWxlY3RlZEFkZHJlc3MpO1xuICAgIH0qL1xuICB9XG5cbiAgcmVzZXRCb3hOdW1iZXIoZXZlbnQsIHJlc2V0QWRkcmVzczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3Jlc2V0IHN0cmVldCBudW1uZXIhJywgZXZlbnQsIHJlc2V0QWRkcmVzcyk7XG4gICAgdGhpcy5ib3hOdW1iZXIgPSAnJztcbiAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuYWRkcmVzc0lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICB0aGlzLnNldEFkZHJlc3MobnVsbCwgMSk7XG4gICAgLy8gdGhpcy5vbkNsZWFySW5wdXRFdmVudEVtaXR0ZXIoSW5wdXROYW1lVHlwZS5CT1hfTlVNQkVSKTtcbiAgICAvLyAkJCA3IHRoaXMuc2V0QWRkcmVzcyhudWxsLCAxKTsgLy8gJCQgPz8/Pz9cbiAgICAvKlxuICAgIGlmIChyZXNldEFkZHJlc3MgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc2V0QWRkcmVzcygvICpudWxsKiAvIHRoaXMuc2VsZWN0ZWRBZGRyZXNzKTtcbiAgICB9Ki9cbiAgfVxuXG4gIGVudGVyUHJlZmlsbE1vZGUoKSB7XG4gICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6OmVudGVyUHJlZmlsbE1vZGUoKScpOyB9XG4gICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlQm94TmIgJiYgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYiAmJiB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldCAmJiB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5IClcbiAgICB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnByZWZpbGxpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5wcmVmaWxsaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnByZWZpbGxpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eS5wcmVmaWxsaW5nID0gdHJ1ZTtcblxuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQubG9jYWxpdHkgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zdHJlZXROdW1iZXIgPSAnJztcbiAgICB9XG5cbiAgfVxuXG4gIHF1aXRQcmVmaWxsTW9kZSgpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6cXVpdFByZWZpbGxNb2RlKCknKTsgfVxuICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZUJveE5iICYmIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIgJiYgdGhpcy5hdXRvY29tcGxldGVTdHJlZXQgJiYgdGhpcy5hdXRvY29tcGxldGVMb2NhbGl0eSApXG4gICAge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5wcmVmaWxsaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnByZWZpbGxpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkucHJlZmlsbGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzc2luZ1ByZWZpbGxEYXRhID0gZmFsc2U7XG4gIH1cblxuICBzZXRBZGRyZXNzKGFkZHJlc3M6IGFueSwgbGV2ZWw/OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6c2V0QWRkcmVzcyAtIGFkZHJlc3MgcGFydCwgbGV2ZWwnLCBhZGRyZXNzLCBsZXZlbCk7IH1cblxuICAgIC8qICQkICQkXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRBZGRyZXNzICYmICFhZGRyZXNzKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygncmVzZXQgYWRkcmVzcyEnKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID0gbnVsbDtcbiAgICAgIHRoaXMuc3RyZWV0QWRkcmVzcyA9IG51bGw7XG4gICAgICB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgPSBudWxsO1xuICAgICAgdGhpcy5ub3RpZnlBZGRyZXNzQ29tcGxldGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKi9cbiAgICBpZiAoYWRkcmVzcyA9PT0gbnVsbCB8fCBhZGRyZXNzID09PSB1bmRlZmluZWQgKVxuICAgIHtcbiAgICAgIGNvbnN0IGRvTm90aWZ5ID0gKHRoaXMuc2VsZWN0ZWRBZGRyZXNzICE9PSBudWxsICYmIHRoaXMuc2VsZWN0ZWRBZGRyZXNzICE9PSB1bmRlZmluZWQpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSBudWxsO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgaWYgKGRvTm90aWZ5KSB7XG4gICAgICAgIHRoaXMubm90aWZ5QWRkcmVzc0NvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFkZHJlc3MpIHtcbiAgICAgIGRlbGV0ZSBhZGRyZXNzLm1lc3NhZ2VzO1xuICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZUFkZHJlc3MoKTtcbiAgICAgIHRoaXMucG9zdGFsQ29kZSA9IGFkZHJlc3MucG9zdGFsQ29kZSA/IGFkZHJlc3MucG9zdGFsQ29kZSA6ICcnO1xuICAgICAgdGhpcy5sb2NhbGl0eSA9IGFkZHJlc3MubG9jYWxpdHlOYW1lID8gYWRkcmVzcy5sb2NhbGl0eU5hbWUgOiAnJztcbiAgICAgIHRoaXMuc3RyZWV0ID0gYWRkcmVzcy5zdHJlZXROYW1lID8gYWRkcmVzcy5zdHJlZXROYW1lIDogJyc7XG4gICAgICAvLyBjb25zdCBub3RJbkxpc3QgPSBhZGRyZXNzWydub3QtaW4tbGlzdCddO1xuICAgICAgLy8gY29uc3QgaXNOb3RJbkxpc3QgPSBub3RJbkxpc3QgIT09IG51bGwgJiYgbm90SW5MaXN0ICE9PSB1bmRlZmluZWQgJiYgbm90SW5MaXN0ID09PSB0cnVlO1xuICAgICAgLypcbiAgICAgIGlmIChhZGRyZXNzLmhvdXNlTnVtYmVyKSB7XG4gICAgICAgIGlmICghYWRkcmVzcy5pc0NvbXBsZXRlIHx8IGlzTm90SW5MaXN0KSB7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXIgPSBhZGRyZXNzLmhvdXNlTnVtYmVyID8gYWRkcmVzcy5ob3VzZU51bWJlciA6ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghYWRkcmVzcy5ib3hOdW1iZXIpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nIHJlc2V0IHN0cmVldCBudW1iZXIgIScpO1xuICAgICAgICAgICAgaWYgKCAhdGhpcy5wcm9jZXNzaW5nUHJlZmlsbERhdGEgKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVzZXRTdHJlZXROdW1iZXIobnVsbCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGhpcy5zdHJlZXROdW1iZXIgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICovXG5cbiAgICAgIGNvbnN0IGFkZHJlc3NJc0NvbXBsZXRlID0gYWRkcmVzcyAhPT0gbnVsbCAmJiBhZGRyZXNzICE9PSB1bmRlZmluZWRcbiAgICAgICAgJiYgYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIGFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIGNvbnN0IGFkZHJlc3NJc05vdEluTGlzdCA9IGFkZHJlc3MgIT09IG51bGwgJiYgYWRkcmVzcyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICYmIGFkZHJlc3MuaGFzT3duUHJvcGVydHkoJ25vdC1pbi1saXN0JykgJiYgYWRkcmVzc1snbm90LWluLWxpc3QnXSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcblxuICAgICAgc3dpdGNoIChsZXZlbCkge1xuXG4gICAgICAgIC8vIExvY2FsaXR5IC8gTXVuaWNpcGFsaXR5IGFuZCBQT3N0YWxDb2RlXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShhZGRyZXNzKTtcbiAgICAgICAgICAvKlxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmNsZWFyV2lkZ2V0KCk7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMuc3RyZWV0QWRkcmVzcyA9IG51bGw7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gbnVsbDtcbiAgICAgICAgICAvL1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN0cmVldE5iLnN0cmVldE5hbWUgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIFN0cmVldCBOYW1lXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShhZGRyZXNzKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0cmVldE5hbWUoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy5zdHJlZXRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgICB0aGlzLnN0cmVldE51bWJlckFkZHJlc3MgPSBudWxsO1xuICAgICAgICAgIC8qXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuY2xlYXJXaWRnZXQoKTtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICAqL1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gU1RSRUVUIE51bWJlclxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgdGhpcy51cGRhdGVQb3N0YWxDb2RlTG9jYWxpdHkoYWRkcmVzcyk7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdHJlZXROYW1lKGFkZHJlc3MpO1xuICAgICAgICAgIHRoaXMudXBkYXRlU3RyZWV0TnVtYmVyKGFkZHJlc3MpOyAvLyAkJFxuICAgICAgICAgIHRoaXMuc3RyZWV0QWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgICAgICAgdGhpcy5zdHJlZXROdW1iZXJBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgICBpZiAoYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIGFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSApXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoYWRkcmVzc0lzTm90SW5MaXN0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9IGFkZHJlc3MuaG91c2VOdW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc3RyZWV0TnVtYmVyID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9IGFkZHJlc3MuaG91c2VOdW1iZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8qXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5jbGVhcldpZGdldCgpO1xuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICAgICovXG4gICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVCb3hOYi5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gQk9YIE51bWJlclxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGFkZHJlc3NJc05vdEluTGlzdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5hZGRyZXNzSXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoIHRoaXMuc2VsZWN0ZWRBZGRyZXNzICYmIHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmlzQ29tcGxldGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcy5pc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8qXG4gICAgICBpZiAoYWRkcmVzcy5pc0NvbXBsZXRlID09PSB0cnVlICkge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRBZGRyZXNzLmlzQ29tcGxldGVOb3RpZmljYXRpb25Eb25lKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MuaXNDb21wbGV0ZU5vdGlmaWNhdGlvbkRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMubm90aWZ5QWRkcmVzc0NvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubm90aWZ5QWRkcmVzc0NvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcy5pc0NvbXBsZXRlTm90aWZpY2F0aW9uRG9uZSA9IHRydWU7XG4gICAgICB0aGlzLm5vdGlmeUFkZHJlc3NDb21wbGV0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldExhbmd1YWdlKGxhbmc6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRMYW5ndWFnZSA9IGxhbmc7XG4gIH1cblxuICBzZXRWYWxpZGF0aW9uTWVzc2FnZSgvKm1lc3NhZ2U6IHN0cmluZyovbWVzc2FnZToge21lc3NhZ2VUeXBlOiBWYWxpZGF0aW9uTWVzc2FnZVR5cGUsIHRyYW5zbGF0ZWRNZXNzYWdlOiBzdHJpbmd9KSB7XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgaWYgKHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlID09PSBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUuRU1JVCkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZUV2ZW50RW1pdHRlci5lbWl0KG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG5cbiAgdXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KGFkZHJlc3MpIHtcbiAgICBpZiAoYWRkcmVzcyAmJiBhZGRyZXNzLnBvc3RhbENvZGUgJiYgYWRkcmVzcy5sb2NhbGl0eU5hbWUpIHtcbiAgICAgIHRoaXMucG9zdGFsQ29kZUxvY2FsaXR5ID0gIGFkZHJlc3MucG9zdGFsQ29kZSAgKyAnICcgKyBhZGRyZXNzLmxvY2FsaXR5TmFtZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9jYWxpdHkuc2VhcmNoVGV4dCA9IHRoaXMucG9zdGFsQ29kZUxvY2FsaXR5O1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVN0cmVldE5hbWUoYWRkcmVzcykge1xuICAgIGlmIChhZGRyZXNzICYmIGFkZHJlc3Muc3RyZWV0TmFtZSkge1xuICAgICAgdGhpcy5zdHJlZXROYW1lSW5wdXQgPSBhZGRyZXNzLnN0cmVldE5hbWU7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlU3RyZWV0TnVtYmVyKGFkZHJlc3MpIHtcbiAgICBpZiAoYWRkcmVzcyAmJiBhZGRyZXNzLmhvdXNlTnVtYmVyKSB7XG4gICAgICB0aGlzLnN0cmVldE51bWJlcklucHV0ID0gYWRkcmVzcy5ob3VzZU51bWJlcjtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVDb21wbGV0ZUFkZHJlc3MoKSB7XG4gICAgbGV0IGNvbmNhdFN0ciA9ICcnO1xuICAgIGNvbmNhdFN0ciArPSB0aGlzLnNlbGVjdGVkQWRkcmVzcy5zdHJlZXROYW1lID8gYCR7dGhpcy5zZWxlY3RlZEFkZHJlc3Muc3RyZWV0TmFtZX0gYCA6ICcnO1xuICAgIGNvbmNhdFN0ciArPSB0aGlzLnNlbGVjdGVkQWRkcmVzcy5ob3VzZU51bWJlciA/IGAke3RoaXMuc2VsZWN0ZWRBZGRyZXNzLmhvdXNlTnVtYmVyfSBgIDogJyc7XG4gICAgY29uY2F0U3RyICs9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzLmJveE51bWJlciA/IGAke3RoaXMuZ2V0Qm94UHJlZml4KCl9ICR7dGhpcy5zZWxlY3RlZEFkZHJlc3MuYm94TnVtYmVyfSBgIDogJyc7XG4gICAgY29uY2F0U3RyICs9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzLnBvc3RhbENvZGUgPyBgJHt0aGlzLnNlbGVjdGVkQWRkcmVzcy5wb3N0YWxDb2RlfSBgIDogJyc7XG4gICAgY29uY2F0U3RyICs9IHRoaXMuc2VsZWN0ZWRBZGRyZXNzLm11bmljaXBhbGl0eU5hbWUgPyBgJHt0aGlzLnNlbGVjdGVkQWRkcmVzcy5tdW5pY2lwYWxpdHlOYW1lfSBgIDogJyc7XG4gICAgdGhpcy5jb21wbGV0ZUFkZHJlc3MgPSBjb25jYXRTdHI7XG4gIH1cblxuICBzZXRWYWxpZGF0aW9uTWVzc2FnZU9wdGlvbkZyb21JbnB1dChvcHRpb246IHt2YWxpZGF0aW9uVHlwZTogVmFsaWRhdGlvbk1lc3NhZ2VPcHRpb25UeXBlLCB0aW1lc3RhbXA6IERhdGV9KSB7XG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZU9wdGlvblR5cGUgPSBvcHRpb24udmFsaWRhdGlvblR5cGU7XG4gICAgLy8gY29uc29sZS5sb2coJ2FkZHJlc3NlIGF1dG9jb21wbGV0ZSAtIHZhbGlkYXRpb24gbWVzc2FnZSBvcHRpb24nLCB0aGlzLnZhbGlkYXRpb25NZXNzYWdlT3B0aW9uVHlwZSk7XG4gIH1cblxuICBvbkxvY2FsaXR5UHJlZmlsbEV2ZW50KGV2ZW50OiBQcmVmaWxsRXZlbnQpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6bG9jYWxpdHkgcHJlZmlsbCBldmVudCByZWNlaXZlZDonLCBldmVudCk7IH1cbiAgICAvKlxuICAgIGlmIChldmVudC5wZXJmZWN0TWF0Y2gpXG4gICAge1xuICAgICAgdGhpcy5hZGRyZXNzUGFyYW1zLm1pbkxldmVsID0gLyAqMyogLyBBRERSRVNTTEVWRUwuU1RSRUVUO1xuICAgICAgdGhpcy5zdHJlZXRQYXJhbXMgPSB0aGlzLmFkZHJlc3NQYXJhbXM7XG4gICAgfVxuICAgICovXG4gICAgY29uc3QgZGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgIGlmIChldmVudC5wcmVmaWxsRGF0YS5wcmVmaWxsTXVuaWNpcGFsaXR5UGVyZmVjdE1hdGNoRm91bmQgPT09IHRydWUgKVxuICAgIHtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBkYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KGFkZHJlc3MpO1xuICAgICAgdGhpcy5hZGRyZXNzUGFyYW1zLm1pbkxldmVsID0gLyo0Ki8gQUREUkVTU0xFVkVMLlNUUkVFVDtcbiAgICAgIC8vIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSA9IHRoaXMuYWRkcmVzc1BhcmFtczsgLy8gYXMgYW55IGFzIFByZWZpbGxEYXRhO1xuICAgICAgLy8gdGhpcy5sb2NhbGl0eVByZWZpbGxEYXRhID0gbmV3IFByZWZpbGxEYXRhKHRoaXMuYWRkcmVzc1BhcmFtcyk7XG4gICAgICAvLyBPYmplY3QuYXNzaWduKHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSwgdGhpcy5hZGRyZXNzUGFyYW1zKTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEgPSBldmVudC5wcmVmaWxsRGF0YTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEudHMgPSBuZXcgRGF0ZSgpO1xuICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLlNUUkVFVDtcbiAgICAgIC8vIEJlIHN1cmUgdG8gcHJvcGFnYXRlIHRoZSBsb2NhbGl0eU5hbWUgaW4gcGxhY2Ugb2YgdGhlIG11bmljaXBhbGl0eU5hbWUgIVxuICAgICAgY29uc3Qgc3VnZ2VzdGlvbkFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxNdW5pY2lwYWxpdHlQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLmxvY2FsaXR5TmFtZTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3NMb2NhbGl0eU5hbWU7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLnBvc3RhbENvZGU7XG4gICAgICAvLyB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShzdWdnZXN0aW9uQWRkcmVzcyk7XG5cbiAgICAgIGNvbnN0IHN0cmVldE5hbWUgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TmFtZTtcbiAgICAgIGlmIChzdHJlZXROYW1lID09PSBudWxsIHx8IHN0cmVldE5hbWUgPT09IHVuZGVmaW5lZCB8fCBzdHJlZXROYW1lID09PSAnJylcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5MT0NBTElUWSk7XG4gICAgICAgIC8vIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgIGNvbnN0IHN0cmVldE5hbWUgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TmFtZTtcbiAgICAgIGlmIChzdHJlZXROYW1lID09PSBudWxsIHx8IHN0cmVldE5hbWUgPT09IHVuZGVmaW5lZCB8fCBzdHJlZXROYW1lID09PSAnJylcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5MT0NBTElUWSk7XG4gICAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbGliOjpwcmVmaWxsOiB0cmlnZ2VyIGNoZWNraW5nIHN0cmVldCBtYXRjaC4uLiAnLCB0aGlzLnByZWZpbGxEYXRhKTsgfVxuICAgICAgICB0aGlzLnN0cmVldFByZWZpbGxEYXRhID0gdGhpcy5wcmVmaWxsRGF0YTtcbiAgICAgIH1cbiAgICAgICovXG5cbiAgICAgIHRoaXMuc3RyZWV0UHJlZmlsbERhdGEgPSB0aGlzLnByZWZpbGxEYXRhO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgLy8gY29uc3QgY3BBbmRMb2NhbGl0eSA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5wb3N0YWxDb2RlICsgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm11bmljaXBhbGl0eU5hbWU7XG4gICAgICBjb25zdCBjcEFuZExvY2FsaXR5ID0gZGF0YS5wYXJhbWV0ZXJzLnBvc3RhbENvZGUgKyBkYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0LmxvY2FsaXR5ID0gJyc7XG4gICAgICBpZiAoIGNwQW5kTG9jYWxpdHkgPT09IG51bGwgfHwgY3BBbmRMb2NhbGl0eSA9PT0gdW5kZWZpbmVkIHx8IGNwQW5kTG9jYWxpdHkubGVuZ3RoID09PSAwIClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKG51bGwsIEFERFJFU1NMRVZFTC5MT0NBTElUWSk7XG4gICAgICB9XG4gICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uU3RyZWV0UHJlZmlsbEV2ZW50KGV2ZW50OiBQcmVmaWxsRXZlbnQpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7Y29uc29sZS5sb2coJ2xpYjo6c3RyZWV0OiBwcmVmaWxsIGV2ZW50IHJlY2VpdmVkJywgZXZlbnQpOyB9XG4gICAgLypcbiAgICBjb25zdCBkYXRhOiBQcmVmaWxsRGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgIGlmIChkYXRhLnByZWZpbGxTdHJlZXRQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSApXG4gICAge1xuICAgICAgY29uc29sZS5sb2coJ2xpYjo6b25TdHJlZXRQcmVmaWxsRXZlbnQ6IE1BVENIIEZPVU5EJywgZGF0YSk7XG4gICAgICB0aGlzLnBvc3RhbENvZGVMb2NhbGl0eSA9ICdUUlVDLU1VQ0hFJztcbiAgICAgIHRoaXMucG9zdGFsQ29kZUxvY2FsaXR5ID0gJ1RSVUMtTVVDSEUgMic7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvY2FsaXR5LnNlYXJjaFRleHQgPSB0aGlzLnBvc3RhbENvZGVMb2NhbGl0eTtcbiAgICB9XG4gICAgKi9cbiAgICBjb25zdCBkYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGV2ZW50LnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXRQZXJmZWN0TWF0Y2hGb3VuZCA9PT0gdHJ1ZSApXG4gICAge1xuICAgICAgLy8gaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkgeyBjb25zb2xlLmxvZygnbGliOjpvblN0cmVldFByZWZpbGxFdmVudDogTUFUQ0ggRk9VTkQnLCBkYXRhKTsgfVxuICAgICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGRhdGEucHJlZmlsbFN0cmVldFBlcmZlY3RNYXRjaFN1Z2dlc3Rpb247XG4gICAgICBjb25zdCBhZGRyZXNzID0gc3VnZ2VzdGlvbi5hZGRyZXNzO1xuICAgICAgdGhpcy51cGRhdGVTdHJlZXROYW1lKGFkZHJlc3MpO1xuICAgICAgdGhpcy5hZGRyZXNzUGFyYW1zLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLlNUUkVFVF9OVU1CRVI7XG4gICAgICAvLyB0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEgPSB0aGlzLmFkZHJlc3NQYXJhbXM7IC8vIGFzIGFueSBhcyBQcmVmaWxsRGF0YTtcbiAgICAgIC8vIHRoaXMubG9jYWxpdHlQcmVmaWxsRGF0YSA9IG5ldyBQcmVmaWxsRGF0YSh0aGlzLmFkZHJlc3NQYXJhbXMpO1xuICAgICAgLy8gT2JqZWN0LmFzc2lnbih0aGlzLmxvY2FsaXR5UHJlZmlsbERhdGEsIHRoaXMuYWRkcmVzc1BhcmFtcyk7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhLnRzID0gbmV3IERhdGUoKTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5taW5MZXZlbCA9IEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSO1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbkFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXRQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICBjb25zdCBzdWdnZXN0aW9uQWRkcmVzc0xvY2FsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLmxvY2FsaXR5TmFtZTtcbiAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5tdW5pY2lwYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3NMb2NhbGl0eU5hbWU7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLnBvc3RhbENvZGU7XG4gICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuc3RyZWV0TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLnN0cmVldE5hbWU7XG4gICAgICAvLyB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShzdWdnZXN0aW9uQWRkcmVzcyk7XG4gICAgICAvLyB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShzdWdnZXN0aW9uQWRkcmVzcyk7XG5cbiAgICAgIGNvbnN0IHN0cmVldE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXI7XG4gICAgICBpZiAoc3RyZWV0TnVtYmVyID09PSBudWxsIHx8IHN0cmVldE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IHN0cmVldE51bWJlciA9PT0gJycpXG4gICAgICB7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUKTtcbiAgICAgICAgLy8gdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgIGNvbnN0IHN0cmVldE51bWJlciA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROdW1iZXI7XG4gICAgICBpZiAoc3RyZWV0TnVtYmVyID09PSBudWxsIHx8IHN0cmVldE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IHN0cmVldE51bWJlciA9PT0gJycpXG4gICAgICB7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUKTtcbiAgICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6OnByZWZpbGw6IHRyaWdnZXIgY2hlY2tpbmcgc3RyZWV0IG51bWJlciBtYXRjaC4uLiAnLCB0aGlzLnByZWZpbGxEYXRhKTt9XG4gICAgICAgIHRoaXMuc3RyZWV0TnVtYmVyUHJlZmlsbERhdGEgPSB0aGlzLnByZWZpbGxEYXRhO1xuICAgICAgfVxuICAgICAgKi9cblxuICAgICAgdGhpcy5zdHJlZXROdW1iZXJQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBjb25zdCBwcmVmaWxsU3RyZWV0TmFtZSA9IHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbE11bmljaXBhbGl0eVBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuc3RyZWV0TmFtZSA9ICcnO1xuXG4gICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2xpYjo6b25TdHJlZXRQcmVmaWxsRXZlbnQgLSBOTyBNQVRDSCBBVCBTVFJFRVQgTEVWRUwnLCBwcmVmaWxsU3RyZWV0TmFtZSApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIHByZWZpbGxTdHJlZXROYW1lID09PSBudWxsIHx8IHByZWZpbGxTdHJlZXROYW1lID09PSB1bmRlZmluZWQgfHwgcHJlZmlsbFN0cmVldE5hbWUubGVuZ3RoID09PSAwIClcbiAgICAgIHtcbiAgICAgICAgLy8gaWYgKHRoaXMuc2hvd0RlYnVnTWVzc2FnZVRvQ29uc29sZSkge2NvbnNvbGUubG9nKCdsaWI6Om9uU3RyZWV0UHJlZmlsbEV2ZW50OiBOTyBNQVRDSCBGT1VORCAtIHNldCBhZGRyZXNzJywgZGF0YSwgYWRkcmVzcyk7IH1cbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5MT0NBTElUWSk7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICB7XG4gICAgICAgIC8vIGFkZHJlc3Muc3RyZWV0TmFtZSA9IHByZWZpbGxTdHJlZXROYW1lO1xuICAgICAgICBhZGRyZXNzLnNlYXJjaEJhclN0cmluZyA9IHByZWZpbGxTdHJlZXROYW1lO1xuICAgICAgICB0aGlzLnNldEFkZHJlc3MoYWRkcmVzcywgQUREUkVTU0xFVkVMLlNUUkVFVCk7XG4gICAgICB9XG4gICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uU3RyZWV0TnVtYmVyUHJlZmlsbEV2ZW50KGV2ZW50OiBQcmVmaWxsRXZlbnQpIHtcbiAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6OnN0cmVldCBudW1iZXIgcHJlZmlsbCBldmVudCByZWNlaXZlZDonLCBldmVudCk7IH1cbiAgICBjb25zdCBkYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGRhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlKVxuICAgIHtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBkYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIHRoaXMudXBkYXRlU3RyZWV0TnVtYmVyKGFkZHJlc3MpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTdHJlZXROYi5zZWxlY3RlZEFkZHJlc3MgPSBhZGRyZXNzO1xuXG4gICAgICBjb25zdCBhZGRyZXNzSXNDb21wbGV0ZSA9IGFkZHJlc3MgJiYgYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnaXNDb21wbGV0ZScpICYmIGFkZHJlc3MuaXNDb21wbGV0ZSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIGNvbnN0IGFkZHJlc3NJc05vdEluTGlzdCA9IGFkZHJlc3MgJiYgYWRkcmVzcy5oYXNPd25Qcm9wZXJ0eSgnbm90LWluLWxpc3QnKSAmJiBhZGRyZXNzWydub3QtaW4tbGlzdCddID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgICBpZiAoYWRkcmVzc0lzQ29tcGxldGUgJiYgISBhZGRyZXNzSXNOb3RJbkxpc3QgKVxuICAgICAge1xuICAgICAgICAvLyBmb3VuZCBhZGRyZXNzIC0gcGVyZmVjdCBtYXRjaGF0IHN0cmVldCBudW1iZXIgbGV2ZWxcbiAgICAgICAgLy8gTm90aGluZyB0byBkbyBhbnltb3JlXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU3RyZWV0TmIuYWRkcmVzc0lzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAge1xuICAgICAgICB0aGlzLmFkZHJlc3NQYXJhbXMubWluTGV2ZWwgPSBBRERSRVNTTEVWRUwuQk9YX05VTUJFUjtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YSA9IGV2ZW50LnByZWZpbGxEYXRhO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnRzID0gbmV3IERhdGUoKTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLm1pbkxldmVsID0gQUREUkVTU0xFVkVMLkJPWF9OVU1CRVI7XG4gICAgICAgIC8vIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lXG4gICAgICAgIC8vICA9IHRoaXMucHJlZmlsbERhdGEucHJlZmlsbFN0cmVldE51bWJlclBlcmZlY3RNYXRjaFN1Z2dlc3Rpb24uYWRkcmVzcy5sb2NhbGl0eU5hbWU7XG5cbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbkFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3MubG9jYWxpdHlOYW1lO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMubXVuaWNpcGFsaXR5TmFtZSA9IHN1Z2dlc3Rpb25BZGRyZXNzTG9jYWxpdHlOYW1lO1xuICAgICAgICB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMucG9zdGFsQ29kZSA9IHN1Z2dlc3Rpb25BZGRyZXNzLnBvc3RhbENvZGU7XG4gICAgICAgIHRoaXMucHJlZmlsbERhdGEucGFyYW1ldGVycy5zdHJlZXROYW1lID0gc3VnZ2VzdGlvbkFkZHJlc3Muc3RyZWV0TmFtZTtcbiAgICAgICAgdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlciA9IHN1Z2dlc3Rpb25BZGRyZXNzLmhvdXNlTnVtYmVyO1xuICAgICAgICAvLyB0aGlzLnVwZGF0ZVBvc3RhbENvZGVMb2NhbGl0eShzdWdnZXN0aW9uQWRkcmVzcyk7XG4gICAgICAgIC8vIHRoaXMudXBkYXRlUG9zdGFsQ29kZUxvY2FsaXR5KHN1Z2dlc3Rpb25BZGRyZXNzKTtcblxuICAgICAgICBjb25zdCBib3hOdW1iZXIgPSB0aGlzLnByZWZpbGxEYXRhLnBhcmFtZXRlcnMuYm94TnVtYmVyO1xuICAgICAgICBpZiAoICEgYWRkcmVzc0lzTm90SW5MaXN0ICYmIChib3hOdW1iZXIgPT09IG51bGwgfHwgYm94TnVtYmVyID09PSB1bmRlZmluZWQgfHwgYm94TnVtYmVyID09PSAnJykgKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICAgICAgICAvLyB0aGlzLnF1aXRQcmVmaWxsTW9kZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgY29uc3QgYm94TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlcjtcbiAgICAgICAgaWYgKCAhIGFkZHJlc3NJc05vdEluTGlzdCAmJiAoYm94TnVtYmVyID09PSBudWxsIHx8IGJveE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IGJveE51bWJlciA9PT0gJycpIClcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUX05VTUJFUik7XG4gICAgICAgICAgdGhpcy5xdWl0UHJlZmlsbE1vZGUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RGVidWdNZXNzYWdlVG9Db25zb2xlKSB7IGNvbnNvbGUubG9nKCdsaWI6OnByZWZpbGw6IHRyaWdnZXIgY2hlY2tpbmcgYm94IG51bWJlciBtYXRjaC4uLiAnLCB0aGlzLnByZWZpbGxEYXRhKTsgfVxuICAgICAgICAgIHRoaXMuYm94TnVtYmVyUHJlZmlsbERhdGEgPSB0aGlzLnByZWZpbGxEYXRhO1xuICAgICAgICB9XG4gICAgICAgICovXG5cbiAgICAgICAgdGhpcy5ib3hOdW1iZXJQcmVmaWxsRGF0YSA9IHRoaXMucHJlZmlsbERhdGE7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBjb25zdCBwcmVmaWxsU3RyZWV0TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLnN0cmVldE51bWJlcjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXRQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUJveE5iLnN0cmVldE51bWJlciA9ICcnO1xuICAgICAgaWYgKCBwcmVmaWxsU3RyZWV0TnVtYmVyID09PSBudWxsIHx8IHByZWZpbGxTdHJlZXROdW1iZXIgPT09IHVuZGVmaW5lZCB8fCBwcmVmaWxsU3RyZWV0TnVtYmVyLmxlbmd0aCA9PT0gMCApXG4gICAgICB7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuU1RSRUVUKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgLy8gYWRkcmVzcy5ob3VzZU51bWJlciA9IHByZWZpbGxTdHJlZXROdW1iZXI7XG4gICAgICAgIGFkZHJlc3Muc2VhcmNoQmFyU3RyaW5nID0gcHJlZmlsbFN0cmVldE51bWJlcjtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gICAgfVxuICB9XG5cbiAgb25Cb3hOdW1iZXJQcmVmaWxsRXZlbnQoZXZlbnQ6IFByZWZpbGxFdmVudCkge1xuICAgIGlmICh0aGlzLnNob3dEZWJ1Z01lc3NhZ2VUb0NvbnNvbGUpIHsgY29uc29sZS5sb2coJ2xpYjo6cHJlZmlsbDogYm94IG51bWJlciBldmVudCByZWNlaXZlZDonLCBldmVudCk7IH1cbiAgICBjb25zdCBkYXRhID0gZXZlbnQucHJlZmlsbERhdGE7XG4gICAgaWYgKGRhdGEucHJlZmlsbEJveE51bWJlclBlcmZlY3RNYXRjaEZvdW5kID09PSB0cnVlKVxuICAgIHtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBkYXRhLnByZWZpbGxCb3hOdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHN1Z2dlc3Rpb24uYWRkcmVzcztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQm94TmIuc2VsZWN0ZWRBZGRyZXNzID0gYWRkcmVzcztcbiAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuQk9YX05VTUJFUik7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBjb25zdCBwcmVmaWxsQm94TnVtYmVyID0gdGhpcy5wcmVmaWxsRGF0YS5wYXJhbWV0ZXJzLmJveE51bWJlcjtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLnByZWZpbGxEYXRhLnByZWZpbGxTdHJlZXROdW1iZXJQZXJmZWN0TWF0Y2hTdWdnZXN0aW9uLmFkZHJlc3M7XG4gICAgICBpZiAoIHByZWZpbGxCb3hOdW1iZXIgPT09IG51bGwgfHwgcHJlZmlsbEJveE51bWJlciA9PT0gdW5kZWZpbmVkIHx8IHByZWZpbGxCb3hOdW1iZXIubGVuZ3RoID09PSAwIClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zZXRBZGRyZXNzKGFkZHJlc3MsIEFERFJFU1NMRVZFTC5TVFJFRVRfTlVNQkVSKTtcbiAgICAgIH1cbiAgICAgIGVsc2VcbiAgICAgIHtcbiAgICAgICAgLy8gYWRkcmVzcy5ib3hOdW1iZXIgPSBwcmVmaWxsQm94TnVtYmVyO1xuICAgICAgICBhZGRyZXNzLnNlYXJjaEJhclN0cmluZyA9IHByZWZpbGxCb3hOdW1iZXI7XG4gICAgICAgIHRoaXMuc2V0QWRkcmVzcyhhZGRyZXNzLCBBRERSRVNTTEVWRUwuQk9YX05VTUJFUik7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucXVpdFByZWZpbGxNb2RlKCk7XG4gIH1cbn1cbiJdfQ==
|