@sunbird-cb/cbp-ai 0.1.62 → 0.1.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/add-designation/add-designation.component.mjs +26 -24
- package/esm2022/lib/components/approval-request-form/approval-request-form.component.mjs +2 -2
- package/esm2022/lib/components/approval-requests/approval-requests.component.mjs +12 -4
- package/esm2022/lib/components/designation-approval-request-form/designation-approval-request-form.component.mjs +6 -6
- package/esm2022/lib/components/edit-cbp-plan/edit-cbp-plan.component.mjs +14 -3
- package/esm2022/lib/components/publish-request-form/publish-approve-request-form.component.mjs +3 -3
- package/esm2022/lib/components/review-request/review-request.component.mjs +24 -19
- package/esm2022/lib/components/role-mapping-list/role-mapping-list.component.mjs +8 -4
- package/esm2022/lib/modules/initial-screen/initial-screen.component.mjs +5 -1
- package/esm2022/lib/modules/shared/services/init.service.mjs +1 -1
- package/esm2022/lib/modules/shared/services/shared.service.mjs +4 -4
- package/fesm2022/sunbird-cb-cbp-ai.mjs +100 -67
- package/fesm2022/sunbird-cb-cbp-ai.mjs.map +1 -1
- package/lib/components/add-designation/add-designation.component.d.ts +1 -0
- package/lib/components/add-designation/add-designation.component.d.ts.map +1 -1
- package/lib/components/approval-requests/approval-requests.component.d.ts +4 -0
- package/lib/components/approval-requests/approval-requests.component.d.ts.map +1 -1
- package/lib/components/edit-cbp-plan/edit-cbp-plan.component.d.ts.map +1 -1
- package/lib/components/review-request/review-request.component.d.ts +4 -3
- package/lib/components/review-request/review-request.component.d.ts.map +1 -1
- package/lib/components/role-mapping-list/role-mapping-list.component.d.ts +1 -0
- package/lib/components/role-mapping-list/role-mapping-list.component.d.ts.map +1 -1
- package/lib/modules/initial-screen/initial-screen.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/sunbird-cb-cbp-ai-0.1.64.tgz +0 -0
- package/sunbird-cb-cbp-ai-0.1.62.tgz +0 -0
|
@@ -2,7 +2,7 @@ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
|
2
2
|
import { Component, ElementRef, Inject, ViewChild } from '@angular/core';
|
|
3
3
|
import { FormGroup, FormArray, Validators, FormControl } from '@angular/forms';
|
|
4
4
|
import { debounceTime, distinctUntilChanged, finalize } from 'rxjs/operators';
|
|
5
|
-
import _ from 'lodash';
|
|
5
|
+
import * as _ from 'lodash';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
import * as i1 from "@angular/material/dialog";
|
|
8
8
|
import * as i2 from "@angular/forms";
|
|
@@ -209,10 +209,17 @@ export class EditCbpPlanComponent {
|
|
|
209
209
|
"activities": activities,
|
|
210
210
|
"competencies": formData.competencies
|
|
211
211
|
};
|
|
212
|
+
console.log('masterData?.designation', this.masterData?.designation);
|
|
212
213
|
if (formData?.igot_designation_id) {
|
|
213
214
|
req["igot_designation_id"] = formData?.igot_designation_id || '',
|
|
214
215
|
req["designation_name"] = formData?.designation_name ? formData.designation_name : '';
|
|
215
216
|
}
|
|
217
|
+
else {
|
|
218
|
+
console.log('masterData?.designation', this.masterData?.designation);
|
|
219
|
+
req["designation_name"] = formData?.designation_name ? formData.designation_name : '';
|
|
220
|
+
const selectedDesignation = this.masterData?.designation?.find((item) => item?.name?.toLowerCase() === formData?.designation_name?.toLowerCase());
|
|
221
|
+
req["igot_designation_id"] = selectedDesignation?.igot_designation_id || '';
|
|
222
|
+
}
|
|
216
223
|
if (this.sharedService.fromMdoPortal) {
|
|
217
224
|
req['request_id'] = this.requestRowData?.demand_id;
|
|
218
225
|
req['item_id'] = this.planData?.id;
|
|
@@ -526,6 +533,8 @@ export class EditCbpPlanComponent {
|
|
|
526
533
|
const mapped = content.map((item) => ({
|
|
527
534
|
name: item?.designation || '',
|
|
528
535
|
status: item?.status || 'Active',
|
|
536
|
+
igot_designation_name: item?.designation || '',
|
|
537
|
+
igot_designation_id: item?.id || ''
|
|
529
538
|
}));
|
|
530
539
|
const total = _.get(res, 'result.result.totalcount', _.get(res, 'result.result.data.totalCount', _.get(res, 'result.result.totalCount', 0)));
|
|
531
540
|
this.defaultSearchDesignationCount = total;
|
|
@@ -629,7 +638,9 @@ export class EditCbpPlanComponent {
|
|
|
629
638
|
selectedObj = {
|
|
630
639
|
name: selectedDesignation,
|
|
631
640
|
status: 'Active',
|
|
632
|
-
id: 'custom-' + Date.now() + '-' + Math.random()
|
|
641
|
+
id: 'custom-' + Date.now() + '-' + Math.random(),
|
|
642
|
+
igot_designation_name: selectedDesignation,
|
|
643
|
+
igot_designation_id: 'custom-' + Date.now() + '-' + Math.random(),
|
|
633
644
|
};
|
|
634
645
|
}
|
|
635
646
|
// 🔥 Move to top
|
|
@@ -803,4 +814,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
803
814
|
type: ViewChild,
|
|
804
815
|
args: ['designation', { read: ElementRef }]
|
|
805
816
|
}] } });
|
|
806
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1jYnAtcGxhbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvY29tcG9uZW50cy9lZGl0LWNicC1wbGFuL2VkaXQtY2JwLXBsYW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvZWRpdC1jYnAtcGxhbi9lZGl0LWNicC1wbGFuLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFxQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBZSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc1RixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7O0FBUXRCLE1BQU0sT0FBTyxvQkFBb0I7SUE4Qy9CLFlBQ1MsU0FBNkMsRUFDcEIsSUFBUyxFQUNqQyxFQUFlLEVBQ2YsS0FBd0IsRUFDeEIsYUFBNEIsRUFDNUIsUUFBcUIsRUFDckIsSUFBZ0IsRUFDakIsS0FBcUI7UUFQckIsY0FBUyxHQUFULFNBQVMsQ0FBb0M7UUFDcEIsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNqQyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtR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Q0FBQyxFQUFFLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBRXJDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVztZQUN6QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUM3QyxDQUFDLEVBQ0QsSUFBSSxDQUFDLDJCQUEyQixDQUNqQyxDQUFDO1FBRUosSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQztRQUNqRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxXQUFXO1FBRVQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FDbEMsdUJBQXVCLENBQ1QsQ0FBQztRQUVqQixJQUFJLEtBQUssRUFBRTtZQUNULEtBQUssQ0FBQyxtQkFBbUIsQ0FDdkIsUUFBUSxFQUNSLElBQUksQ0FBQyw4QkFBOEIsQ0FDcEMsQ0FBQztTQUNIO0lBQ0gsQ0FBQzsrR0F2L0JVLG9CQUFvQiw4Q0FnRHJCLGVBQWU7bUdBaERkLG9CQUFvQixvUEFxQ0csVUFBVSw2QkNuRDlDLGk4aUJBOFNNOzs0RkRoU08sb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLG1CQUFtQjs7MEJBb0QxQixNQUFNOzJCQUFDLGVBQWU7a05BWkcsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUNzQixjQUFjO3NCQUE3RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1BcnJheSwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWVkaXQtY2JwLXBsYW4nLFxuICB0ZW1wbGF0ZVVybDogJy4vZWRpdC1jYnAtcGxhbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VkaXQtY2JwLXBsYW4uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBFZGl0Q2JwUGxhbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBzZWxlY3RlZFZhbHVlID0gJydcbiAgc2VhcmNoVGV4dCA9ICcnXG4gIHBsYW5EYXRhOiBhbnlcbiAgY29tcGV0ZW5jaWVzQ291bnQgPSB7IHRvdGFsOiAwLCBiZWhhdmlvcmFsOiAwLCBmdW5jdGlvbmFsOiAwLCBkb21haW46IDAgfVxuICBjYnBGb3JtOiBGb3JtR3JvdXA7XG4gIGxvYWRpbmcgPSBmYWxzZVxuXG4gIC8vIEVuaGFuY2VkIGNvbXBldGVuY3kgc2VsZWN0aW9uIHByb3BlcnRpZXNcbiAgY29tcGV0ZW5jaWVzRGF0YTogYW55W10gPSBbXTtcbiAgYXZhaWxhYmxlVGhlbWVzOiBhbnlbXSA9IFtdO1xuICBhdmFpbGFibGVTdWJUaGVtZXM6IGFueVtdID0gW107XG4gIGZpbHRlcmVkVGhlbWVzOiBhbnlbXSA9IFtdO1xuICBmaWx0ZXJlZFN1YlRoZW1lczogc3RyaW5nW10gPSBbXTtcbiAgc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9ICcnO1xuICBzZWxlY3RlZFRoZW1lID0gJyc7XG4gIHNlbGVjdGVkU3ViVGhlbWUgPSAnJztcbiAgbWFudWFsVGhlbWUgPSAnJztcbiAgbWFudWFsU3ViVGhlbWUgPSAnJztcbiAgdGhlbWVTZWFyY2hUZXh0ID0gJyc7XG4gIHN1YlRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuICBlZGl0RG9tYWluQ29tcGV0ZW5jeUZsYWcgPSBmYWxzZVxuICBlZGl0Q29tcGV0ZW5jeUluZGV4ID0gLTFcbiAgb3JpZ2luYWxDb21wZXRlbmN5VmFsdWVBcnI6IGFueSA9IFtdXG4gIGRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2VcbiAgaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICBkZXNpZ25hdGlvbk9mZnNldCA9IDBcbiAgb2Rjc0Rlc2lnbmF0aW9uQ291bnQgPSAwXG4gIGRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50ID0gMFxuICBkZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPSA1MFxuICBkZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQgPSA1MFxuICBub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSBmYWxzZVxuICBkZXNpZ25hdGlvblNlYXJjaFRleHQgPSAnJ1xuICBkZXNpZ25hdGlvbkluaXRJblByb2dyZXNzID0gZmFsc2VcbiAgc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCA9IGZhbHNlXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ0NvbnRlbnQnKSBkaWFsb2dDb250ZW50ITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZGVzaWduYXRpb24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZGVzaWduYXRpb25SZWY/OiBFbGVtZW50UmVmXG4gIG1hc3RlckRhdGE6IGFueSA9IHt9XG4gIHBvcnRhbERhdGE6IGFueVxuICBhY3RpdmVSb3dFbGVtZW50OiBhbnlcbiAgcmVxdWVzdERhdGE6IGFueVxuICByZXF1ZXN0Um93RGF0YTogYW55XG4gIG9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGxCb3VuZCA9XG4gICAgdGhpcy5vbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsLmJpbmQodGhpcyk7XG4gIHNlYXJjaERlc2lnbmF0aW9uTG9hZENvdW50ID0gNTBcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEVkaXRDYnBQbGFuQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSxcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHNoYXJlZFNlcnZpY2U6IFNoYXJlZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHB1YmxpYyByb3V0ZTogQWN0aXZhdGVkUm91dGVcbiAgKSB7XG4gICAgaWYgKHRoaXMuc2hhcmVkU2VydmljZS5mcm9tTWRvUG9ydGFsKSB7XG4gICAgICB0aGlzLnBsYW5EYXRhID0gZGF0YT8uZWxlbWVudFxuICAgICAgdGhpcy5yZXF1ZXN0Um93RGF0YSA9IGRhdGE/LnJlcXVlc3REYXRhXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGxhbkRhdGEgPSBkYXRhXG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1JlY2VpdmVkIGRhdGE6JywgZGF0YSk7XG4gICAgLy8gdGhpcy5wbGFuRGF0YS5jb21wZXRlbmNpZXMubWFwKChjb21wZXRlbmNpZXM6YW55KT0+e1xuICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudFsndG90YWwnXSA9IHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ3RvdGFsJ10gKyAxIFxuICAgIC8vICAgaWYoY29tcGV0ZW5jaWVzLnR5cGUgPT09ICdCZWhhdmlvcmFsJykge1xuICAgIC8vICAgICB0aGlzLmNvbXBldGVuY2llc0NvdW50WydiZWhhdmlvcmFsJ10gPSB0aGlzLmNvbXBldGVuY2llc0NvdW50WydiZWhhdmlvcmFsJ10gKzFcbiAgICAvLyAgIH1cbiAgICAvLyAgIGlmKGNvbXBldGVuY2llcy50eXBlID09PSAnRnVuY3Rpb25hbCcpIHtcbiAgICAvLyAgICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudFsnZnVuY3Rpb25hbCddID0gdGhpcy5jb21wZXRlbmNpZXNDb3VudFsnZnVuY3Rpb25hbCddICsxXG4gICAgLy8gICB9XG4gICAgLy8gICBpZihjb21wZXRlbmNpZXMudHlwZSA9PT0gJ0RvbWFpbicpIHtcbiAgICAvLyAgICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudFsnZG9tYWluJ10gPSB0aGlzLmNvbXBldGVuY2llc0NvdW50Wydkb21haW4nXSArMVxuICAgIC8vICAgfVxuICAgIC8vIH0pXG4gIH1cblxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubG9hZENvbXBldGVuY2llc0RhdGEoKTtcbiAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XG4gICAgY29uc3Qgc2VhcmNoQ29udHJvbCA9IHRoaXMuY2JwRm9ybS5nZXQoJ3NlYXJjaERlc2lnbmF0aW9uJyk7XG5cbiAgICBpZiAoc2VhcmNoQ29udHJvbCkge1xuICAgICAgc2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG5cbiAgICAgICAgICBjb25zdCB0eHQgPSByZXM/LnRvU3RyaW5nKCk/LnRyaW0oKSA/PyAnJztcblxuICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0ID0gdHh0O1xuXG4gICAgICAgICAgLy8gUkVTRVQgU0VBUkNIIFBBR0lOQVRJT05cbiAgICAgICAgICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uTG9hZENvdW50ID0gNTA7XG5cbiAgICAgICAgICBpZiAodHh0Py5sZW5ndGgpIHtcblxuICAgICAgICAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIEFQSSBTRUFSQ0ggT05MWVxuICAgICAgICAgICAgY29uc29sZS5sb2coJ21qc2RmbScpXG4gICAgICAgICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHR4dCwgMCk7XG5cbiAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9XG4gICAgICAgICAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnRcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPVxuICAgICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcblxuICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9IDA7XG5cbiAgICAgICAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIGlmIChcbiAgICAgICF0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHxcbiAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb25TYWZlKCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpXG5cbiAgICBjb25zdCByZXF1ZXN0SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgncmVxdWVzdF9pZCcpO1xuXG4gICAgY29uc29sZS5sb2coJ3JlcXVlc3RJZCcsIHJlcXVlc3RJZClcbiAgfVxuXG4gIGxvYWRDb21wZXRlbmNpZXNEYXRhKCkge1xuICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRDb21wZXRlbmN5SnNvbigpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YSkgPT4ge1xuICAgICAgICB0aGlzLmNvbXBldGVuY2llc0RhdGEgPSBkYXRhO1xuICAgICAgICBjb25zb2xlLmxvZygnQ29tcGV0ZW5jaWVzIGRhdGEgbG9hZGVkOicsIHRoaXMuY29tcGV0ZW5jaWVzRGF0YSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGNvbXBldGVuY2llcyBkYXRhOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKSB7XG4gICAgY29uc3QgY29tcHMgPSB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlO1xuICAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQgPSB7IHRvdGFsOiAwLCBiZWhhdmlvcmFsOiAwLCBmdW5jdGlvbmFsOiAwLCBkb21haW46IDAgfTtcbiAgICBjb21wcy5mb3JFYWNoKGMgPT4ge1xuICAgICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudC50b3RhbCsrO1xuICAgICAgaWYgKGMudHlwZS50b0xvd2VyQ2FzZSgpID09PSAnYmVoYXZpb3JhbCcpIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQuYmVoYXZpb3JhbCsrO1xuICAgICAgaWYgKGMudHlwZS50b0xvd2VyQ2FzZSgpID09PSAnZnVuY3Rpb25hbCcpIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQuZnVuY3Rpb25hbCsrO1xuICAgICAgaWYgKGMudHlwZS50b0xvd2VyQ2FzZSgpID09PSAnZG9tYWluJykgdGhpcy5jb21wZXRlbmNpZXNDb3VudC5kb21haW4rKztcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRpYWxpemVGb3JtKCkge1xuICAgIHRoaXMuY2JwRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgZGVzaWduYXRpb25fbmFtZTogW3RoaXMucGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWUgfHwgJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgd2luZ19kaXZpc2lvbl9zZWN0aW9uOiBbdGhpcy5wbGFuRGF0YT8ud2luZ19kaXZpc2lvbl9zZWN0aW9uIHx8ICcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHJvbGVfcmVzcG9uc2liaWxpdGllc190ZXh0OiBbdGhpcy5wbGFuRGF0YT8ucm9sZV9yZXNwb25zaWJpbGl0aWVzPy5qb2luKCdcXG4nKSB8fCAnJ10sXG4gICAgICBhY3Rpdml0aWVzX3RleHQ6IFt0aGlzLnBsYW5EYXRhPy5hY3Rpdml0aWVzPy5qb2luKCdcXG4nKSB8fCAnJ10sXG4gICAgICBjb21wZXRlbmN5U2VhcmNoVGV4dDogWycnXSxcbiAgICAgIGNvbXBldGVuY3lUeXBlOiBbJyddLFxuICAgICAgY29tcGV0ZW5jeVRoZW1lOiBbJyddLFxuICAgICAgY29tcGV0ZW5jeVN1YlRoZW1lOiBbJyddLFxuICAgICAgbWFudWFsVGhlbWVJbnB1dDogWycnXSxcbiAgICAgIG1hbnVhbFN1YlRoZW1lSW5wdXQ6IFsnJ10sXG4gICAgICB0aGVtZVNlYXJjaDogWycnXSxcbiAgICAgIHN1YlRoZW1lU2VhcmNoOiBbJyddLFxuICAgICAgY29tcGV0ZW5jaWVzOiB0aGlzLmZiLmFycmF5KHRoaXMucGxhbkRhdGE/LmNvbXBldGVuY2llcyB8fCBbXSksIC8vIG9wdGlvbmFsIGN1c3RvbWl6YXRpb24sXG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbjogWycnXSxcbiAgICAgIGlnb3RfZGVzaWduYXRpb25faWQ6IFt0aGlzLnBsYW5EYXRhPy5pZ290X2Rlc2lnbmF0aW9uX2lkIHx8ICcnXVxuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10pIHtcbiAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb25TYWZlKClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldERlc2lnbmF0aW9uU2FmZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZXNpZ25hdGlvbkluaXRJblByb2dyZXNzIHx8IHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyA9IHRydWVcbiAgICB0aGlzLmdldERlc2lnbmF0aW9uKClcbiAgfVxuXG5cbiAgZ2V0IHJvbGVSZXNwb25zaWJpbGl0aWVzKCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuY2JwRm9ybS5nZXQoJ3JvbGVfcmVzcG9uc2liaWxpdGllcycpIGFzIEZvcm1BcnJheTtcbiAgfVxuXG4gIHNlYXJjaERhdGEoKSB7XG5cbiAgfVxuXG4gIGFwcGx5RmlsdGVyKCkge1xuXG4gIH1cblxuICBnZXRDb21wZXRlbmNpZXNCeVR5cGUodHlwZTogc3RyaW5nKTogYW55W10ge1xuICAgIHJldHVybiAodGhpcy5jYnBGb3JtPy5nZXQoJ2NvbXBldGVuY2llcycpPy52YWx1ZSB8fCBbXSkuZmlsdGVyKGMgPT4gYy50eXBlID09PSB0eXBlKTtcbiAgfVxuXG4gIGNsb3NlRGlhbG9nKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICBzYXZlUm9sZU1hcHBpbmcoKSB7XG4gICAgaWYgKHRoaXMuY2JwRm9ybS5pbnZhbGlkKSByZXR1cm47XG5cbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuY2JwRm9ybS52YWx1ZTtcbiAgICBjb25zb2xlLmxvZygnU3VibWl0dGVkIERhdGE6JywgZm9ybURhdGEpO1xuICAgIGxldCBjYnBQbGFuRGF0YTogYW55ID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iajtcbiAgICBjb25zb2xlLmxvZygnY2JwUGxhbkRhdGEnLCBjYnBQbGFuRGF0YSlcbiAgICBjb25zdCByb2xlUmVzcG9uc2liaWxpdGllc0FycmF5ID0gdGhpcy5jYnBGb3JtLnZhbHVlLnJvbGVfcmVzcG9uc2liaWxpdGllc190ZXh0XG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAubWFwKGxpbmUgPT4gbGluZS50cmltKCkpXG4gICAgICAuZmlsdGVyKGxpbmUgPT4gbGluZSk7XG4gICAgY29uc3QgYWN0aXZpdGllcyA9IHRoaXMuY2JwRm9ybS52YWx1ZS5hY3Rpdml0aWVzX3RleHRcbiAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgIC5tYXAobGluZSA9PiBsaW5lLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIobGluZSA9PiBsaW5lKTtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgbGV0IHJlcSA9XG4gICAge1xuICAgICAgXCJzZWN0b3JfbmFtZVwiOiBjYnBQbGFuRGF0YT8uc2VjdG9ycz8uam9pbihcIixcIiksXG4gICAgICBcImluc3RydWN0aW9uXCI6IGNicFBsYW5EYXRhPy5pbnN0cnVjdGlvbiA/IGNicFBsYW5EYXRhLmluc3RydWN0aW9uIDogJycsXG4gICAgICBcIndpbmdfZGl2aXNpb25fc2VjdGlvblwiOiBmb3JtRGF0YT8ud2luZ19kaXZpc2lvbl9zZWN0aW9uLFxuICAgICAgXCJyb2xlX3Jlc3BvbnNpYmlsaXRpZXNcIjogcm9sZVJlc3BvbnNpYmlsaXRpZXNBcnJheSxcbiAgICAgIFwiYWN0aXZpdGllc1wiOiBhY3Rpdml0aWVzLFxuICAgICAgXCJjb21wZXRlbmNpZXNcIjogZm9ybURhdGEuY29tcGV0ZW5jaWVzXG4gICAgfVxuXG4gICAgaWYgKGZvcm1EYXRhPy5pZ290X2Rlc2lnbmF0aW9uX2lkKSB7XG4gICAgICByZXFbXCJpZ290X2Rlc2lnbmF0aW9uX2lkXCJdID0gZm9ybURhdGE/Lmlnb3RfZGVzaWduYXRpb25faWQgfHwgJycsXG4gICAgICAgIHJlcVtcImRlc2lnbmF0aW9uX25hbWVcIl0gPSBmb3JtRGF0YT8uZGVzaWduYXRpb25fbmFtZSA/IGZvcm1EYXRhLmRlc2lnbmF0aW9uX25hbWUgOiAnJ1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuZnJvbU1kb1BvcnRhbCkge1xuICAgICAgcmVxWydyZXF1ZXN0X2lkJ10gPSB0aGlzLnJlcXVlc3RSb3dEYXRhPy5kZW1hbmRfaWRcbiAgICAgIHJlcVsnaXRlbV9pZCddID0gdGhpcy5wbGFuRGF0YT8uaWRcbiAgICB9XG4gICAgbGV0IHJvbGVfbWFwcGluZ19pZCA9IHRoaXMucGxhbkRhdGEuaWRcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS51cGRhdGVSb2xlTWFwcGluZyhyb2xlX21hcHBpbmdfaWQsIHJlcSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgLy8gU3VjY2VzcyBoYW5kbGluZ1xuICAgICAgICBjb25zb2xlLmxvZygnU3VjY2VzczonLCByZXMpO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc2F2ZWQnKVxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1JvbGUgTWFwcGluZyBTYXZlZCBTdWNjZXNzZnVsbHknLCAnWCcsIHtcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLXN1Y2Nlc3MnXVxuICAgICAgICB9KTtcbiAgICAgICAgLy90aGlzLnN1Y2Nlc3NSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yJywgZXJyb3IpXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcbiAgICAgICAgLy8gSGFuZGxlIDQwOSBDb25mbGljdCBoZXJlXG4gICAgICAgIC8vIGFsZXJ0KCdDb25mbGljdCBkZXRlY3RlZDogVGhlIHJlc291cmNlIGFscmVhZHkgZXhpc3RzIG9yIGFjdGlvbiBjb25mbGljdHMuJyk7XG4gICAgICAgIC8vdGhpcy5nZXRcbiAgICAgICAgLy8gT3IgeW91IGNhbiBzZXQgYSBVSSBlcnJvciBtZXNzYWdlIHZhcmlhYmxlXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LmRldGFpbCwgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1lcnJvciddXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAvL3RoaXMuYWxyZWFkeUF2YWlsYWJsZVJvbGVNYXBwaW5nLmVtaXQodGhpcy5yb2xlTWFwcGluZ0Zvcm0pXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjYW5jZWxGb3JtKCkge1xuICAgIC8vIE1hcmsgYWxsIGNvbnRyb2xzIGFzIHByaXN0aW5lIGFuZCB1bnRvdWNoZWQgd2l0aG91dCBjaGFuZ2luZyB0aGUgdmFsdWVzXG4gICAgdGhpcy5jYnBGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgdGhpcy5jYnBGb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgIC8vIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWUgPSB0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyXG4gICAgLy8gY29uc29sZS5sb2coJ3RoaXMuY29tcGV0ZW5jaWVzQXJyYXknLHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkpXG4gICAgLy8gQWxzbywgaWYgeW91IHdhbnQgdG8gbWFyayBhbGwgY2hpbGQgY29udHJvbHMgKEZvcm1Db250cm9scyAvIEZvcm1BcnJheXMgLyBGb3JtR3JvdXBzKSBhcyBwcmlzdGluZSBhbmQgdW50b3VjaGVkXG4gICAgdGhpcy5tYXJrRm9ybUdyb3VwUHJpc3RpbmVVbnRvdWNoZWQodGhpcy5jYnBGb3JtKTtcbiAgICAvLyBpZih0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPiAtMSkge1xuICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0eXBlJ10gPSB0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyW3RoaXMuZWRpdENvbXBldGVuY3lJbmRleF1bJ3R5cGUnXVxuICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0aGVtZSddID0gdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFyclt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0aGVtZSddXG4gICAgLy8gICB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlW3RoaXMuZWRpdENvbXBldGVuY3lJbmRleF1bJ3N1Yl90aGVtZSddID0gdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFyclt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWydzdWJfdGhlbWUnXVxuICAgIC8vIH1cbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gIH1cblxuICBwcml2YXRlIG1hcmtGb3JtR3JvdXBQcmlzdGluZVVudG91Y2hlZChmb3JtR3JvdXA6IEZvcm1Hcm91cCB8IEZvcm1BcnJheSkge1xuICAgIE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1trZXldO1xuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuICAgICAgICBjb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIGNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JtR3JvdXBQcmlzdGluZVVudG91Y2hlZChjb250cm9sKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldCBjb21wZXRlbmNpZXNBcnJheSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNicEZvcm0uZ2V0KCdjb21wZXRlbmNpZXMnKSBhcyBGb3JtQXJyYXk7XG4gIH1cblxuICBvbkNvbXBldGVuY3lUeXBlQ2hhbmdlKHR5cGU6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9IHR5cGU7XG4gICAgdGhpcy5zZWxlY3RlZFRoZW1lID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZFN1YlRoZW1lID0gJyc7XG4gICAgdGhpcy5tYW51YWxUaGVtZSA9ICcnO1xuICAgIHRoaXMubWFudWFsU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLmF2YWlsYWJsZVRoZW1lcyA9IFtdO1xuICAgIHRoaXMuYXZhaWxhYmxlU3ViVGhlbWVzID0gW107XG4gICAgdGhpcy5maWx0ZXJlZFRoZW1lcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLnRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuICAgIHRoaXMuc3ViVGhlbWVTZWFyY2hUZXh0ID0gJyc7XG5cbiAgICAvLyBSZXNldCBmb3JtIGNvbnRyb2xzXG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgY29tcGV0ZW5jeVRoZW1lOiAnJyxcbiAgICAgIGNvbXBldGVuY3lTdWJUaGVtZTogJycsXG4gICAgICBtYW51YWxUaGVtZUlucHV0OiAnJyxcbiAgICAgIG1hbnVhbFN1YlRoZW1lSW5wdXQ6ICcnLFxuICAgICAgdGhlbWVTZWFyY2g6ICcnLFxuICAgICAgc3ViVGhlbWVTZWFyY2g6ICcnXG4gICAgfSk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ0JlaGF2aW9yYWwnIHx8IHR5cGUgPT09ICdGdW5jdGlvbmFsJykge1xuICAgICAgLy8gTG9hZCB0aGVtZXMgZnJvbSBKU09OIGZvciBCZWhhdmlvcmFsIGFuZCBGdW5jdGlvbmFsXG4gICAgICBjb25zdCBjb21wZXRlbmN5Q2F0ZWdvcnkgPSB0aGlzLmNvbXBldGVuY2llc0RhdGEuZmluZChjYXQgPT5cbiAgICAgICAgY2F0Lm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdHlwZS50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICAgICh0eXBlID09PSAnQmVoYXZpb3JhbCcgJiYgY2F0Lm5hbWUgPT09ICdCZWhhdmlvdXJhbCcpXG4gICAgICApO1xuXG4gICAgICBpZiAoY29tcGV0ZW5jeUNhdGVnb3J5KSB7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlVGhlbWVzID0gY29tcGV0ZW5jeUNhdGVnb3J5LmNvbXBldGVuY3lfdGhlbWUgfHwgW107XG4gICAgICAgIHRoaXMuZmlsdGVyZWRUaGVtZXMgPSBbLi4udGhpcy5hdmFpbGFibGVUaGVtZXNdO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBGb3IgRG9tYWluLCBubyB0aGVtZXMgYXJlIGxvYWRlZCAtIHVzZXIgd2lsbCBlbnRlciBtYW51YWxseVxuICB9XG5cbiAgb25UaGVtZUNoYW5nZSh0aGVtZU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRUaGVtZSA9IHRoZW1lTmFtZTtcbiAgICB0aGlzLnNlbGVjdGVkU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLmF2YWlsYWJsZVN1YlRoZW1lcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLnN1YlRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuXG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgY29tcGV0ZW5jeVN1YlRoZW1lOiAnJyxcbiAgICAgIHN1YlRoZW1lU2VhcmNoOiAnJ1xuICAgIH0pO1xuXG4gICAgLy8gRmluZCB0aGUgc2VsZWN0ZWQgdGhlbWUgYW5kIGxvYWQgaXRzIHN1Yi10aGVtZXNcbiAgICBjb25zdCBzZWxlY3RlZFRoZW1lT2JqID0gdGhpcy5hdmFpbGFibGVUaGVtZXMuZmluZCh0aGVtZSA9PiB0aGVtZS5uYW1lID09PSB0aGVtZU5hbWUpO1xuICAgIGlmIChzZWxlY3RlZFRoZW1lT2JqKSB7XG4gICAgICB0aGlzLmF2YWlsYWJsZVN1YlRoZW1lcyA9IHNlbGVjdGVkVGhlbWVPYmouY29tcGV0ZW5jeV9zdWJfdGhlbWUgfHwgW107XG4gICAgICB0aGlzLmZpbHRlcmVkU3ViVGhlbWVzID0gWy4uLnRoaXMuYXZhaWxhYmxlU3ViVGhlbWVzXTtcbiAgICB9XG4gIH1cblxuICBvblN1YlRoZW1lQ2hhbmdlKHN1YlRoZW1lTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZFN1YlRoZW1lID0gc3ViVGhlbWVOYW1lO1xuICB9XG5cbiAgYWRkQ29tcGV0ZW5jeSgpIHtcbiAgICBsZXQgdHlwZSA9IHRoaXMuc2VsZWN0ZWRDb21wZXRlbmN5VHlwZTtcbiAgICBsZXQgdGhlbWUgPSAnJztcbiAgICBsZXQgc3ViVGhlbWUgPSAnJztcblxuICAgIGlmICh0eXBlID09PSAnRG9tYWluJykge1xuICAgICAgLy8gRm9yIERvbWFpbiwgdXNlIG1hbnVhbCBpbnB1dFxuICAgICAgdGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgc3ViVGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsU3ViVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgQmVoYXZpb3JhbC9GdW5jdGlvbmFsLCB1c2UgZHJvcGRvd24gc2VsZWN0aW9uc1xuICAgICAgdGhlbWUgPSB0aGlzLnNlbGVjdGVkVGhlbWU7XG4gICAgICBzdWJUaGVtZSA9IHRoaXMuc2VsZWN0ZWRTdWJUaGVtZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSAmJiB0aGVtZSAmJiBzdWJUaGVtZSkge1xuICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZS5zb21lKGMgPT5cbiAgICAgICAgYy50aGVtZSA9PT0gdGhlbWUgJiYgYy5zdWJfdGhlbWUgPT09IHN1YlRoZW1lICYmIGMudHlwZSA9PT0gdHlwZVxuICAgICAgKTtcblxuICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgY29uc3QgbmV3Q29tcCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICAgIHR5cGU6IFt0eXBlXSxcbiAgICAgICAgICB0aGVtZTogW3RoZW1lXSxcbiAgICAgICAgICBzdWJfdGhlbWU6IFtzdWJUaGVtZV1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkucHVzaChuZXdDb21wKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYXIgaW5wdXQgZmllbGRzIGFmdGVyIGFkZGluZ1xuICAgICAgdGhpcy5yZXNldENvbXBldGVuY3lGb3JtKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFZhbHVlcyA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWU7XG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoeyBjb21wZXRlbmNpZXM6IFsuLi5jdXJyZW50VmFsdWVzXSB9KTtcblxuICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuY2JwRm9ybT8uZ2V0KCdjb21wZXRlbmNpZXMnKT8udmFsdWUpO1xuICB9XG5cbiAgcmVzZXRDb21wZXRlbmN5Rm9ybSgpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkVGhlbWUgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLm1hbnVhbFRoZW1lID0gJyc7XG4gICAgdGhpcy5tYW51YWxTdWJUaGVtZSA9ICcnO1xuICAgIHRoaXMuYXZhaWxhYmxlVGhlbWVzID0gW107XG4gICAgdGhpcy5hdmFpbGFibGVTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLmZpbHRlcmVkVGhlbWVzID0gW107XG4gICAgdGhpcy5maWx0ZXJlZFN1YlRoZW1lcyA9IFtdO1xuICAgIHRoaXMudGhlbWVTZWFyY2hUZXh0ID0gJyc7XG4gICAgdGhpcy5zdWJUaGVtZVNlYXJjaFRleHQgPSAnJztcblxuICAgIHRoaXMuY2JwRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIGNvbXBldGVuY3lUeXBlOiAnJyxcbiAgICAgIGNvbXBldGVuY3lUaGVtZTogJycsXG4gICAgICBjb21wZXRlbmN5U3ViVGhlbWU6ICcnLFxuICAgICAgbWFudWFsVGhlbWVJbnB1dDogJycsXG4gICAgICBtYW51YWxTdWJUaGVtZUlucHV0OiAnJyxcbiAgICAgIHRoZW1lU2VhcmNoOiAnJyxcbiAgICAgIHN1YlRoZW1lU2VhcmNoOiAnJ1xuICAgIH0pO1xuICB9XG5cbiAgZmlsdGVyVGhlbWVzKHNlYXJjaFRleHQ6IHN0cmluZykge1xuICAgIHRoaXMudGhlbWVTZWFyY2hUZXh0ID0gc2VhcmNoVGV4dDtcbiAgICBpZiAoIXNlYXJjaFRleHQudHJpbSgpKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkVGhlbWVzID0gWy4uLnRoaXMuYXZhaWxhYmxlVGhlbWVzXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJlZFRoZW1lcyA9IHRoaXMuYXZhaWxhYmxlVGhlbWVzLmZpbHRlcih0aGVtZSA9PlxuICAgICAgICB0aGVtZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXJTdWJUaGVtZXMoc2VhcmNoVGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5zdWJUaGVtZVNlYXJjaFRleHQgPSBzZWFyY2hUZXh0O1xuICAgIGlmICghc2VhcmNoVGV4dC50cmltKCkpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbLi4udGhpcy5hdmFpbGFibGVTdWJUaGVtZXNdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcmVkU3ViVGhlbWVzID0gdGhpcy5hdmFpbGFibGVTdWJUaGVtZXMuZmlsdGVyKHN1YlRoZW1lID0+XG4gICAgICAgIHN1YlRoZW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjYW5BZGRDb21wZXRlbmN5KCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnRG9tYWluJykge1xuICAgICAgY29uc3QgdGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgY29uc3Qgc3ViVGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsU3ViVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgcmV0dXJuICEhKHRoZW1lICYmIHN1YlRoZW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICEhKHRoaXMuc2VsZWN0ZWRUaGVtZSAmJiB0aGlzLnNlbGVjdGVkU3ViVGhlbWUpO1xuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZUNvbXBldGVuY3koY29tcCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICBjb250cm9sID0+IGNvbnRyb2wudmFsdWUudGhlbWUgPT09IGNvbXAudGhlbWUgJiYgY29udHJvbC52YWx1ZS50eXBlID09PSBjb21wLnR5cGVcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZWRpdENvbXBldGVuY3koY29tcCkge1xuICAgIHRoaXMuZWRpdERvbWFpbkNvbXBldGVuY3lGbGFnID0gdHJ1ZVxuICAgIHRoaXMuZWRpdENvbXBldGVuY3lJbmRleCA9IC0xXG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgY29tcGV0ZW5jeVR5cGU6ICdEb21haW4nLFxuICAgICAgbWFudWFsVGhlbWVJbnB1dDogY29tcD8udGhlbWUsXG4gICAgICBtYW51YWxTdWJUaGVtZUlucHV0OiBjb21wPy5zdWJfdGhlbWVcbiAgICB9KTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWUuZmluZEluZGV4KGMgPT5cbiAgICAgIGMudGhlbWUgPT09IGNvbXA/LnRoZW1lICYmXG4gICAgICBjLnN1Yl90aGVtZSA9PT0gY29tcD8uc3ViX3RoZW1lICYmXG4gICAgICBjLnR5cGUgPT09IFwiRG9tYWluXCJcbiAgICApO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPSBpbmRleFxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPSAnRG9tYWluJ1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kaWFsb2dDb250ZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oe1xuICAgICAgICB0b3A6IDAsXG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgfSk7XG4gICAgfSwgNTAwKVxuICB9XG5cbiAgY2FuY2VsVXBkYXRlKCkge1xuICAgIHRoaXMuZWRpdERvbWFpbkNvbXBldGVuY3lGbGFnID0gZmFsc2VcbiAgICB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPSAtMVxuICAgIHRoaXMucmVzZXRDb21wZXRlbmN5Rm9ybSgpXG4gIH1cblxuICB1cGRhdGVDb21wZXRlbmN5KCkge1xuICAgIGxldCB0eXBlID0gdGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlO1xuICAgIGxldCB0aGVtZSA9ICcnO1xuICAgIGxldCBzdWJUaGVtZSA9ICcnO1xuXG4gICAgaWYgKHR5cGUgPT09ICdEb21haW4nKSB7XG4gICAgICAvLyBGb3IgRG9tYWluLCB1c2UgbWFudWFsIGlucHV0XG4gICAgICB0aGVtZSA9IHRoaXMuY2JwRm9ybS52YWx1ZS5tYW51YWxUaGVtZUlucHV0Py50cmltKCk7XG4gICAgICBzdWJUaGVtZSA9IHRoaXMuY2JwRm9ybS52YWx1ZS5tYW51YWxTdWJUaGVtZUlucHV0Py50cmltKCk7XG4gICAgICB0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlKSlcbiAgICB9XG4gICAgY29uc29sZS5sb2coJyB0aGlzLmNvbXBldGVuY2llc0FycmF5JywgdGhpcy5jb21wZXRlbmNpZXNBcnJheSlcbiAgICBpZiAodHlwZSAmJiB0aGVtZSAmJiBzdWJUaGVtZSkge1xuXG4gICAgICBjb25zb2xlLmxvZygndGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4LS0nLCB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXgpXG4gICAgICBpZiAodGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0eXBlJ10gPSB0eXBlXG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWVbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsndGhlbWUnXSA9IHRoZW1lXG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWVbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsnc3ViX3RoZW1lJ10gPSBzdWJUaGVtZVxuICAgICAgfVxuXG4gICAgICAvLyBpZiAoIWV4aXN0cykge1xuICAgICAgLy8gICBjb25zdCBuZXdDb21wID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAvLyAgICAgdHlwZTogW3R5cGVdLFxuICAgICAgLy8gICAgIHRoZW1lOiBbdGhlbWVdLFxuICAgICAgLy8gICAgIHN1Yl90aGVtZTogW3N1YlRoZW1lXVxuICAgICAgLy8gICB9KTtcbiAgICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS5wdXNoKG5ld0NvbXApO1xuICAgICAgLy8gfVxuXG4gICAgICAvLyBDbGVhciBpbnB1dCBmaWVsZHMgYWZ0ZXIgYWRkaW5nXG4gICAgICB0aGlzLnJlc2V0Q29tcGV0ZW5jeUZvcm0oKTtcbiAgICAgIGNvbnNvbGUubG9nKCd0aGlzLm9yaWdpbmFsQ29tcGV0ZW5jeVZhbHVlQXJyJywgdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFycilcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZTtcbiAgICB0aGlzLmNicEZvcm0ucGF0Y2hWYWx1ZSh7IGNvbXBldGVuY2llczogWy4uLmN1cnJlbnRWYWx1ZXNdIH0pO1xuXG4gICAgdGhpcy51cGRhdGVDb21wZXRlbmN5Q291bnRzKCk7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc29sZS5sb2codGhpcy5jYnBGb3JtPy5nZXQoJ2NvbXBldGVuY2llcycpPy52YWx1ZSk7XG4gIH1cbiAgZ2V0RGVzaWduYXRpb24oc2VhcmNoVGV4dD86IHN0cmluZywgb2Zmc2V0PzogbnVtYmVyKTogdm9pZCB7XG5cblxuICAgIC8vIGNsZWFyIGFueSBwcmV2aW91cyBkZWJ1ZyBob29rc1xuICAgIGlmICghc2VhcmNoVGV4dCB8fCBzZWFyY2hUZXh0Py5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIG5vb3BcbiAgICB9XG5cbiAgICBjb25zdCByZXFPZmZzZXQgPSAodHlwZW9mIG9mZnNldCA9PT0gJ251bWJlcicpID8gb2Zmc2V0IDogdGhpcy5kZXNpZ25hdGlvbk9mZnNldFxuICAgIGxldCByZXFMaW1pdCA9IHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50XG4gICAgY29uc3QgcGFnZUluZGV4ID0gcmVxTGltaXQgPiAwID8gTWF0aC5mbG9vcihyZXFPZmZzZXQgLyByZXFMaW1pdCkgOiAwXG4gICAgLy8gaWYgd2UncmUgcmVxdWVzdGluZyBmcm9tIGZpcnN0IHBhZ2UsIGNsZWFyIHRoZSBuby1tb3JlLWRhdGEgZ3VhcmRcbiAgICBpZiAocGFnZUluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IGZhbHNlXG4gICAgICByZXFMaW1pdCA9IDUwXG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RCb2R5OiBhbnkgPSB7XG4gICAgICBmaWx0ZXJDcml0ZXJpYU1hcDoge1xuICAgICAgICBzdGF0dXM6ICdBY3RpdmUnXG4gICAgICB9LFxuICAgICAgcmVxdWVzdGVkRmllbGRzOiBbXSxcbiAgICAgIHBhZ2VOdW1iZXI6IHBhZ2VJbmRleCxcbiAgICAgIHBhZ2VTaXplOiByZXFMaW1pdCxcbiAgICB9XG4gICAgaWYgKHNlYXJjaFRleHQ/Lmxlbmd0aCkge1xuICAgICAgcmVxdWVzdEJvZHlbJ3NlYXJjaFN0cmluZyddID0gc2VhcmNoVGV4dFxuICAgICAgLy8gd2hlbiBzZWFyY2hpbmcsIHN0YXJ0IGZyb20gZmlyc3QgcGFnZVxuICAgICAgcmVxdWVzdEJvZHkucGFnZU51bWJlciA9IDBcbiAgICAgIC8vIGFsbG93IGxhcmdlciBwYWdlIGZvciBzZWFyY2ggaWYgbmVlZGVkXG4gICAgICByZXF1ZXN0Qm9keS5wYWdlU2l6ZSA9IHBhZ2VJbmRleCA9PT0gMCA/IDUwIDogdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnRcbiAgICAgIC8vIHJlc2V0IGd1YXJkIHdoZW4gcGVyZm9ybWluZyBhIGZyZXNoIHNlYXJjaFxuICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSBmYWxzZVxuICAgIH1cblxuICAgIC8vIGluZGljYXRlIGxvYWRpbmcgc3RhdGUgc28gc2Nyb2xsIGhhbmRsZXJzIGRvbid0IHRyaWdnZXIgcGFyYWxsZWwgY2FsbHNcbiAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlXG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2VhcmNoUHVibGljRGVzaWduYXRpb24ocmVxdWVzdEJvZHkpLnBpcGUoZmluYWxpemUoKCkgPT4ge1xuICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gZmFsc2VcbiAgICAgIHRoaXMuZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyA9IGZhbHNlXG4gICAgfSkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG5cbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC5kYXRhJywgW10pO1xuXG4gICAgICAgICAgY29uc3QgbWFwcGVkID0gY29udGVudC5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0/LmRlc2lnbmF0aW9uIHx8ICcnLFxuICAgICAgICAgICAgc3RhdHVzOiBpdGVtPy5zdGF0dXMgfHwgJ0FjdGl2ZScsXG4gICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgY29uc3QgdG90YWwgPSBfLmdldChcbiAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgICdyZXN1bHQucmVzdWx0LnRvdGFsY291bnQnLFxuICAgICAgICAgICAgXy5nZXQoXG4gICAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgICAgJ3Jlc3VsdC5yZXN1bHQuZGF0YS50b3RhbENvdW50JyxcbiAgICAgICAgICAgICAgXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC50b3RhbENvdW50JywgMClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCA9IHRvdGFsO1xuXG4gICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAgIC8vIFNFQVJDSCBNT0RFXG4gICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgICAgICAgaWYgKHNlYXJjaFRleHQ/Lmxlbmd0aCkge1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZCA9IG1hcHBlZDtcblxuICAgICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uRmlsdGVyZWQuc2xpY2UoXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uTG9hZENvdW50XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgLy8gTk9STUFMIE1PREVcbiAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICAgICAgICBpZiAoIXRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSB8fCByZXFPZmZzZXQgPT09IDApIHtcblxuICAgICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddID0gbWFwcGVkO1xuXG4gICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgY29uc3QgY29tYmluZWQgPVxuICAgICAgICAgICAgICAodGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddIHx8IFtdKS5jb25jYXQobWFwcGVkKTtcblxuICAgICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddID0gXy51bmlxQnkoXG4gICAgICAgICAgICAgIGNvbWJpbmVkLFxuICAgICAgICAgICAgICAoaXQ6IGFueSkgPT4gKGl0Py5uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9XG4gICAgICAgICAgICAodGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwIHx8IFtdKS5zbGljZShcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnRcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBzZWxlY3RlZCB2YWx1ZSBwcmVzZXJ2ZVxuICAgICAgICAgIGNvbnN0IGRlc2lnbmF0aW9uQ29udHJvbCA9XG4gICAgICAgICAgICB0aGlzLmNicEZvcm0uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk7XG5cbiAgICAgICAgICBpZiAoZGVzaWduYXRpb25Db250cm9sKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPVxuICAgICAgICAgICAgICBkZXNpZ25hdGlvbkNvbnRyb2wudmFsdWUgfHwgW107XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY3VycmVudFZhbHVlcy0tJywgY3VycmVudFZhbHVlcylcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkVmFsdWVzID1cbiAgICAgICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLnNvbWUoXG4gICAgICAgICAgICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbT8ubmFtZSA9PT0gY3VycmVudFZhbHVlc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMucGxhbkRhdGEpXG4gICAgICAgICAgICBpZiAoIXZhbGlkVmFsdWVzKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2JwRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8uc2V0VmFsdWUoXG4gICAgICAgICAgICAgICAgdGhpcy5wbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZSB8fCAnJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygndGhpcy5jYnBGb3JtJywgdGhpcy5jYnBGb3JtKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY3VycmVudFZhbHVlcycsIGN1cnJlbnRWYWx1ZXMpXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRWYWx1ZXMnLCB2YWxpZFZhbHVlcylcblxuICAgICAgICAgICAgLy8gaWYgKHZhbGlkVmFsdWVzLmxlbmd0aCAhPT0gY3VycmVudFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vICAgZGVzaWduYXRpb25Db250cm9sLnNldFZhbHVlKHZhbGlkVmFsdWVzKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBubyBtb3JlIGRhdGFcbiAgICAgICAgICBpZiAoIW1hcHBlZCB8fCBtYXBwZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCAmJlxuICAgICAgICAgICAgKHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSB8fCBbXSkubGVuZ3RoID49XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAvLyBTdG9wIGZ1cnRoZXIgYXV0b21hdGljIGNhbGxzIG9uIHJlcGVhdGVkIGVycm9ycyB0byBhdm9pZCB0aWdodCBsb29wc1xuICAgICAgICAgIC8vIGxvYWRpbmcgZmxhZyBjbGVhcmVkIGluIGZpbmFsaXplKClcbiAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWVcbiAgICAgICAgICAvLyB0aGlzLm1hdFNuYWNrQmFyLm9wZW4oJ1VuYWJsZSB0byBmZXRjaCBkZXNpZ25hdGlvbiBkZXRhaWxzLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIScpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cblxuXG5cbiAgfVxuXG4gIGVuc3VyZVNlbGVjdGVkRGVzaWduYXRpb25FeGlzdHMoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnBsYW5EYXRhPy5kZXNpZ25hdGlvbl9uYW1lO1xuICAgIGlmICghc2VsZWN0ZWQpIHJldHVybjtcblxuICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXT8uc29tZShcbiAgICAgIChkOiBhbnkpID0+IGQubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gc2VsZWN0ZWQudG9Mb3dlckNhc2UoKVxuICAgICk7XG5cbiAgICBpZiAoIWV4aXN0cykge1xuICAgICAgY29uc3QgY3VzdG9tT2JqID0ge1xuICAgICAgICBuYW1lOiBzZWxlY3RlZCxcbiAgICAgICAgc3RhdHVzOiAnQWN0aXZlJyxcbiAgICAgICAgaWdvdF9kZXNpZ25hdGlvbl9uYW1lOiB0aGlzLnBsYW5EYXRhPy5kZXNpZ25hdGlvbl9uYW1lLFxuICAgICAgICBpZ290X2Rlc2lnbmF0aW9uX2lkOiB0aGlzLnBsYW5EYXRhPy5pZ290X2Rlc2lnbmF0aW9uX2lkIHx8IFwiREVTRy0wMDIzMTRcIixcbiAgICAgIH07XG5cbiAgICAgIC8vIOKchSBBZGQgYXQgVE9QIHNvIGl0J3MgdmlzaWJsZSBpbW1lZGlhdGVseVxuICAgICAgdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddID0gW1xuICAgICAgICBjdXN0b21PYmosXG4gICAgICAgIC4uLih0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gfHwgW10pXG4gICAgICBdO1xuXG4gICAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uJ10gPSBbXG4gICAgICAgIGN1c3RvbU9iaixcbiAgICAgICAgLi4uKHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb24nXSB8fCBbXSlcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCkge1xuICBjb25zdCBzZWxlY3RlZERlc2lnbmF0aW9uOiBzdHJpbmcgPVxuICAgICh0aGlzLmNicEZvcm0uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LnZhbHVlIHx8ICcnKS50b1N0cmluZygpLnRyaW0oKTtcblxuICBpZiAoIXNlbGVjdGVkRGVzaWduYXRpb24pIHJldHVybjtcbiAgaWYgKCF0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwKSByZXR1cm47XG5cbiAgY29uc3Qgbm9ybWFsaXplID0gKHY6IHN0cmluZykgPT4gKHYgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gIGNvbnN0IGJhY2t1cCA9IFsuLi50aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXBdO1xuXG4gIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBiYWNrdXAuZmluZEluZGV4KFxuICAgIChpdGVtOiBhbnkpID0+XG4gICAgICBub3JtYWxpemUoaXRlbT8ubmFtZSkgPT09IG5vcm1hbGl6ZShzZWxlY3RlZERlc2lnbmF0aW9uKVxuICApO1xuXG4gIGxldCBzZWxlY3RlZE9iajogYW55O1xuXG4gIC8vIElmIGV4aXN0cyDihpIgcmVtb3ZlIGl0IGFuZCByZXVzZVxuICBpZiAoZXhpc3RpbmdJbmRleCA+IC0xKSB7XG4gICAgc2VsZWN0ZWRPYmogPSBiYWNrdXAuc3BsaWNlKGV4aXN0aW5nSW5kZXgsIDEpWzBdO1xuICB9IFxuICAvLyBJZiBub3QgZXhpc3RzIOKGkiBjcmVhdGUgbmV3XG4gIGVsc2Uge1xuICAgIHNlbGVjdGVkT2JqID0ge1xuICAgICAgbmFtZTogc2VsZWN0ZWREZXNpZ25hdGlvbixcbiAgICAgIHN0YXR1czogJ0FjdGl2ZScsXG4gICAgICBpZDogJ2N1c3RvbS0nICsgRGF0ZS5ub3coKSArICctJyArIE1hdGgucmFuZG9tKClcbiAgICB9O1xuICB9XG5cbiAgLy8g8J+UpSBNb3ZlIHRvIHRvcFxuICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgPSBbXG4gICAgc2VsZWN0ZWRPYmosXG4gICAgLi4uYmFja3VwXG4gIF07XG5cbiAgLy8gQWxzbyB1cGRhdGUgdmlzaWJsZSBsaXN0IChzYW1lIG9yZGVyIGxvZ2ljKVxuICBjb25zdCB2aXNpYmxlID0gWy4uLih0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gfHwgW10pXTtcblxuICBjb25zdCB2aXNpYmxlSW5kZXggPSB2aXNpYmxlLmZpbmRJbmRleChcbiAgICAoaXRlbTogYW55KSA9PlxuICAgICAgbm9ybWFsaXplKGl0ZW0/Lm5hbWUpID09PSBub3JtYWxpemUoc2VsZWN0ZWREZXNpZ25hdGlvbilcbiAgKTtcblxuICBpZiAodmlzaWJsZUluZGV4ID4gLTEpIHtcbiAgICB2aXNpYmxlLnNwbGljZSh2aXNpYmxlSW5kZXgsIDEpO1xuICB9XG5cbiAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID0gW1xuICAgIHNlbGVjdGVkT2JqLFxuICAgIC4uLnZpc2libGVcbiAgXTtcblxuICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbn1cbiAgb25EZXNpZ25hdGlvbkRyb3Bkb3duQ2xvc2VkKCk6IHZvaWQge1xuICAgIC8vIEtlZXAgdGhlIGRlc2lnbmF0aW9uIHZhbHVlIGJ1dCBjbGVhciB0aGUgc2VhcmNoIGlucHV0XG4gICAgY29uc3QgY3VycmVudERlc2lnbmF0aW9uID0gdGhpcy5jYnBGb3JtLmdldCgnZGVzaWduYXRpb25fbmFtZScpIS52YWx1ZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2JwRm9ybS5nZXQoJ3NlYXJjaERlc2lnbmF0aW9uJykpIHtcbiAgICAgICAgdGhpcy5jYnBGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKSEuc2V0VmFsdWUoJycpXG4gICAgICB9XG4gICAgICAvLyBFbnN1cmUgdGhlIGRlc2lnbmF0aW9uIHZhbHVlIHJlbWFpbnMgc2VsZWN0ZWRcbiAgICAgIGlmIChjdXJyZW50RGVzaWduYXRpb24pIHtcbiAgICAgICAgY29uc3QgZGVzaWduYXRpb25Db250cm9sID0gdGhpcy5jYnBGb3JtLmdldCgnZGVzaWduYXRpb25fbmFtZScpO1xuICAgICAgICBpZiAoZGVzaWduYXRpb25Db250cm9sKSB7XG4gICAgICAgICAgZGVzaWduYXRpb25Db250cm9sLnNldFZhbHVlKGN1cnJlbnREZXNpZ25hdGlvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDEwMClcbiAgfVxuXG4gIGRlc2lnbmF0aW9uU2VhcmNoKGV2dDogYW55KSB7XG4gICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2dD8udGFyZ2V0Py52YWx1ZVxuICAgIGNvbnN0IHR4dCA9IChzZWFyY2hUZXh0IHx8ICcnKS50b1N0cmluZygpLnRyaW0oKVxuICAgIGlmICh0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMpIHJldHVyblxuXG4gICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSB0eHRcbiAgICBpZiAodHh0Py5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSB0cnVlXG4gICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlXG4gICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHR4dCwgMClcbiAgICB9IGVsc2UgaWYgKHRoaXMubWFzdGVyRGF0YSAmJiB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwKSB7XG4gICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPSB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwLnNsaWNlKDAsIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50KVxuICAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlXG4gICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpXG4gICAgfVxuICB9XG5cbiAgc2V0dXBTY3JvbGxMaXN0ZW5lcihvcGVuZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblxuICAgIGlmICghb3BlbmVkKSB7XG4gICAgICB0aGlzLnNjcm9sbExpc3RlbmVyQXR0YWNoZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zY3JvbGxMaXN0ZW5lckF0dGFjaGVkKSByZXR1cm47XG4gICAgdGhpcy5zY3JvbGxMaXN0ZW5lckF0dGFjaGVkID0gdHJ1ZTtcbiAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2U7XG5cbiAgICAvLyDinIUgT25seSByZXNldCBwYWdpbmF0aW9uIGlmIHdlIGhhdmUgbm8gZGF0YSB5ZXRcbiAgICBpZiAoIXRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cD8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCA9IHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuICAgICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9IDA7XG4gICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHVuZGVmaW5lZCwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIOKchSBSZXN0b3JlIGZyb20gYmFja3VwIHdpdGhvdXQgcmVzZXR0aW5nIG9mZnNldFxuICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID0gdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLnNsaWNlKFxuICAgICAgICAwLCB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgKTtcbiAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gICAgfVxuXG4gICAgLy8gZm9jdXMgc2VhcmNoIGlucHV0XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgIGNvbnN0IHNlYXJjaElucHV0ID1cbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNlYXJjaC1pbnB1dCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgICAgIGlmIChzZWFyY2hJbnB1dCkge1xuICAgICAgICBzZWFyY2hJbnB1dC5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgfSwgMjAwKTtcblxuICAgIC8vIGF0dGFjaCBzY3JvbGxcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLm1hdC1zZWxlY3QtcGFuZWwuc2VhcmNoLXBhbmVsJ1xuICAgICAgKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICAgIGlmICghcGFuZWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBSRU1PVkUgT0xEIExJU1RFTkVSXG4gICAgICBwYW5lbC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAnc2Nyb2xsJyxcbiAgICAgICAgdGhpcy5vbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsIGFzIGFueVxuICAgICAgKTtcblxuICAgICAgcGFuZWwuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgIHRoaXMub25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbC5iaW5kKHRoaXMpLFxuICAgICAgICB7IHBhc3NpdmU6IHRydWUgfVxuICAgICAgKTtcblxuICAgIH0sIDMwMCk7XG4gIH1cblxuICBvbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsKGV2ZW50OiBhbnkpOiB2b2lkIHtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQ7XG5cbiAgICBjb25zdCBhdEJvdHRvbSA9XG4gICAgICBlbGVtZW50LnNjcm9sbEhlaWdodCAtIGVsZW1lbnQuc2Nyb2xsVG9wIDw9XG4gICAgICBlbGVtZW50LmNsaWVudEhlaWdodCArIDEwO1xuXG4gICAgaWYgKCFhdEJvdHRvbSB8fCB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsb2FkZWQgPVxuICAgICAgdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbkJhY2t1cD8ubGVuZ3RoIHx8IDA7XG5cbiAgICBjb25zdCB2aXNpYmxlID1cbiAgICAgIHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb24/Lmxlbmd0aCB8fCAwO1xuXG4gICAgY29uc29sZS5sb2coe1xuICAgICAgbG9hZGVkLFxuICAgICAgdmlzaWJsZSxcbiAgICAgIHRvdGFsOiB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTVEVQIDFcbiAgICAgKiBTSE9XIE1PUkUgRlJPTSBMT0NBTCBDQUNIRVxuICAgICAqL1xuICAgIGlmICh2aXNpYmxlIDwgbG9hZGVkKSB7XG5cbiAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ICs9XG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuXG4gICAgICAvLyBJTVBPUlRBTlRcbiAgICAgIC8vIGNyZWF0ZSBORVcgQVJSQVkgcmVmZXJlbmNlXG4gICAgICB0aGlzLm1hc3RlckRhdGEgPSB7XG4gICAgICAgIC4uLnRoaXMubWFzdGVyRGF0YSxcbiAgICAgICAgZGVzaWduYXRpb246IFtcbiAgICAgICAgICAuLi50aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAuc2xpY2UoXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnRcbiAgICAgICAgICApXG4gICAgICAgIF1cbiAgICAgIH07XG5cbiAgICAgIC8vIEZPUkNFIFVJIFVQREFURVxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgIC8vIHJlc3RvcmUgc2Nyb2xsIHBvc2l0aW9uXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSBlbGVtZW50LnNjcm9sbFRvcCAtIDIwO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTVEVQIDJcbiAgICAgKiBGRVRDSCBORVhUIFBBR0VcbiAgICAgKi9cbiAgICBpZiAoXG4gICAgICBsb2FkZWQgPCB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50ICYmXG4gICAgICAhdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnNcbiAgICApIHtcblxuICAgICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCArPVxuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcblxuICAgICAgdGhpcy5nZXREZXNpZ25hdGlvbihcbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgfHwgdW5kZWZpbmVkLFxuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2woKTogRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLmNicEZvcm0uZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpIGFzIEZvcm1Db250cm9sO1xuICB9XG5cbiAgY2xlYXJEZXNpZ25hdGlvblNlYXJjaChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uTG9hZENvdW50ID0gNTA7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG5cbiAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2U7XG5cbiAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgKHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCB8fCBbXSkuc2xpY2UoXG4gICAgICAgIDAsXG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50XG4gICAgICApO1xuXG4gICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPSB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcbiAgICB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0ID0gMDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuXG4gICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5tYXQtbWRjLXNlbGVjdC1wYW5lbCdcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgaWYgKHBhbmVsKSB7XG4gICAgICBwYW5lbC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAnc2Nyb2xsJyxcbiAgICAgICAgdGhpcy5vbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsQm91bmRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cblxufVxuIiwiPGRpdiBjbGFzcz1cInZpZXctY2JwLXBsYW5cIiAjZGlhbG9nQ29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmdcIj5FZGl0IFJvbGUgTWFwcGluZzwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNvbnRhaW5lclwiIFtmb3JtR3JvdXBdPVwiY2JwRm9ybVwiPlxuXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlciBtdC00XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzaWduYXRpb25fbmFtZVwiIFt2YWx1ZV09XCJwbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMjVweDsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgcGFkZGluZzogOHB4IDEycHg7IHdpZHRoOiAxMDAlO2ZvbnQtc2l6ZTogMTRweDtmb250LWZhbWlseTogJ0xhdG8nO1wiPlxuXG5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJtdC00IG1hcmdpbi10b3AtcyB3LWZ1bGwgcmVxdWlyZWQtc2VsZWN0XCIgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMjVweDsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgcGFkZGluZzogOHB4IDEycHg7IHdpZHRoOiAxMDAlO2ZvbnQtc2l6ZTogMTRweDtmb250LWZhbWlseTogJ0xhdG8nO1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICNkZXNpZ25hdGlvbiBmb3JtQ29udHJvbE5hbWU9XCJkZXNpZ25hdGlvbl9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBkZXNpZ25hdGlvblwiIChjbG9zZWQpPVwib25EZXNpZ25hdGlvbkRyb3Bkb3duQ2xvc2VkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJzZWFyY2gtcGFuZWxcIiAob3BlbmVkQ2hhbmdlKT1cInNldHVwU2Nyb2xsTGlzdGVuZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTdGlja3kgc2VhcmNoIGlucHV0IGNvbnRhaW5lciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5LXNlYXJjaC1jb250YWluZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZGVzaWduYXRpb25cIiBzdHlsZT1cIndpZHRoOjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaERlc2lnbmF0aW9uXCIgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIChrZXl1cCk9XCJkZXNpZ25hdGlvblNlYXJjaCgkZXZlbnQpXCIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VhcmNoRGVzaWduYXRpb25Db250cm9sPy52YWx1ZVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsZWFyLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckRlc2lnbmF0aW9uU2VhcmNoKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBPcHRpb25zIGxpc3QgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImRlc2lnbmF0aW9uPy5uYW1lXCIgKm5nRm9yPVwibGV0IGRlc2lnbmF0aW9uIG9mIG1hc3RlckRhdGE/LmRlc2lnbmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGVzaWduYXRpb24/Lm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExvYWRpbmcgaW5kaWNhdG9yIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zXCIgY2xhc3M9XCJsb2FkaW5nLWluZGljYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkIE1vcmUuLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5vIHJlc3VsdHMgbWVzc2FnZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIihtYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbik/Lmxlbmd0aCA9PT0gMFwiIGRpc2FibGVkIGNsYXNzPVwibm8tZGF0YS1vcHRpb25cIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNpZ25hdGlvbiBOb3QgRm91bmQuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPCEtLSA8bWF0LWVycm9yIGNsYXNzPVwidGV4dC14c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkZXNpZ25hdGlvbkZvcm0/LmdldCgnZGVzaWduYXRpb25fbmFtZScpPy50b3VjaGVkICYmIGRlc2lnbmF0aW9uRm9ybT8uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LmludmFsaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBkZXNpZ25hdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPiAtLT5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWNvbnRhaW5lciBtdC00XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dHNpZGUtbGF5ZXItdG90YWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluc2lkZS1sYXllclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgVG90YWwgQ29tcGV0ZW5jaWVzXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tcGV0ZW5jaWVzQ291bnQ/LnRvdGFsfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dHNpZGUtbGF5ZXItYmVoYXZpb3JhbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zaWRlLWxheWVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBCZWhhdmlvcmFsIENvbXBldGVuY2llc1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBldGVuY2llc0NvdW50Py5iZWhhdmlvcmFsfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dHNpZGUtbGF5ZXItZnVuY3Rpb25hbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zaWRlLWxheWVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbmFsIENvbXBldGVuY2llc1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBldGVuY2llc0NvdW50Py5mdW5jdGlvbmFsfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dHNpZGUtbGF5ZXItZG9tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnNpZGUtbGF5ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIERvbWFpbiBDb21wZXRlbmNpZXNcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tjb21wZXRlbmNpZXNDb3VudD8uZG9tYWlufX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00IHNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+V2luZy9EaXZpc2lvbjwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJ3aW5nX2RpdmlzaW9uX3NlY3Rpb25cIiBbdmFsdWVdPVwicGxhbkRhdGE/LndpbmdfZGl2aXNpb25fc2VjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDhweCAxMnB4OyB3aWR0aDoxMDAlO2ZvbnQtc2l6ZTogMTRweDtmb250LWZhbWlseTogJ0xhdG8nO1wiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPlJvbGVzICYgUmVzcG9uc2liaWxpdGllczwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBhZGRpdGlvbmFsLWRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiY3VzdG9tLXRleHRhcmVhXCIgZm9ybUNvbnRyb2xOYW1lPVwicm9sZV9yZXNwb25zaWJpbGl0aWVzX3RleHRcIiByb3dzPVwiNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlJvbGVzICYgUmVzcG9uc2liaWxpdGllc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicGxhbkRhdGE/LnJvbGVfcmVzcG9uc2liaWxpdGllcz8uam9pbignXFxuJylcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPkFjdGl2aXRpZXM8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgYWRkaXRpb25hbC1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImN1c3RvbS10ZXh0YXJlYVwiIGZvcm1Db250cm9sTmFtZT1cImFjdGl2aXRpZXNfdGV4dFwiIHJvd3M9XCI1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQWN0aXZpdGllc1wiIFt2YWx1ZV09XCJwbGFuRGF0YT8uYWN0aXZpdGllcz8uam9pbignXFxuJylcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPkNvbXBldGVuY3k8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVuaGFuY2VkLWNvbXBldGVuY3ktc2VjdGlvbiBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU3RlcCAxOiBTZWxlY3QgQ29tcGV0ZW5jeSBUeXBlIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdGVwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdGVwLWxhYmVsXCI+MS4gU2VsZWN0IENvcmUgQ29tcGV0ZW5jeSBUeXBlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWRyb3Bkb3duLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjb21wZXRlbmN5VHlwZVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IENvbXBldGVuY3kgVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uQ29tcGV0ZW5jeVR5cGVDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJCZWhhdmlvcmFsXCI+QmVoYXZpb3JhbDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiRnVuY3Rpb25hbFwiPkZ1bmN0aW9uYWw8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkRvbWFpblwiPkRvbWFpbjwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTdGVwIDI6IFRoZW1lIFNlbGVjdGlvbiAoQmVoYXZpb3JhbC9GdW5jdGlvbmFsIGZyb20gSlNPTiwgRG9tYWluIG1hbnVhbCkgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN0ZXBcIiAqbmdJZj1cInNlbGVjdGVkQ29tcGV0ZW5jeVR5cGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN0ZXAtbGFiZWxcIj4yLiBTZWxlY3QvRW50ZXIgVGhlbWU8L2xhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZvciBCZWhhdmlvcmFsIGFuZCBGdW5jdGlvbmFsOiBTZWFyY2hhYmxlIERyb3Bkb3duIGZyb20gSlNPTiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWRyb3Bkb3duLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnQmVoYXZpb3JhbCcgfHwgc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0Z1bmN0aW9uYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJjb21wZXRlbmN5LWRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImNvbXBldGVuY3lUaGVtZVwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGFuZCBzZWxlY3QgdGhlbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblRoZW1lQ2hhbmdlKCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGlucHV0IGluc2lkZSBkcm9wZG93biAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwic2VhcmNoLW9wdGlvblwiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwic2VhcmNoLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlNlYXJjaCB0aGVtZXMuLi5cIiBmb3JtQ29udHJvbE5hbWU9XCJ0aGVtZVNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiZmlsdGVyVGhlbWVzKCRldmVudC50YXJnZXQ/LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUaGVtZSBvcHRpb25zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHRoZW1lIG9mIGZpbHRlcmVkVGhlbWVzXCIgW3ZhbHVlXT1cInRoZW1lLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RoZW1lLm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5vIHJlc3VsdHMgbWVzc2FnZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiZmlsdGVyZWRUaGVtZXMubGVuZ3RoID09PSAwICYmIHRoZW1lU2VhcmNoVGV4dFwiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHRoZW1lcyBmb3VuZCBtYXRjaGluZyBcInt7dGhlbWVTZWFyY2hUZXh0fX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZvciBEb21haW46IE1hbnVhbCBpbnB1dCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYW51YWwtaW5wdXQtY29udGFpbmVyXCIgKm5nSWY9XCJzZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnRG9tYWluJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cIm1hbnVhbFRoZW1lSW5wdXRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIFRoZW1lIG1hbnVhbGx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYW51YWwtaW5wdXRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU3RlcCAzOiBTdWItdGhlbWUgU2VsZWN0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdGVwXCIgKm5nSWY9XCJzZWxlY3RlZFRoZW1lIHx8IChzZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnRG9tYWluJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN0ZXAtbGFiZWxcIj4zLiBTZWxlY3QvRW50ZXIgU3ViLXRoZW1lPC9sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGb3IgQmVoYXZpb3JhbCBhbmQgRnVuY3Rpb25hbDogU2VhcmNoYWJsZSBEcm9wZG93biBiYXNlZCBvbiBzZWxlY3RlZCB0aGVtZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWRyb3Bkb3duLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnQmVoYXZpb3JhbCcgfHwgc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0Z1bmN0aW9uYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJjb21wZXRlbmN5LWRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICBmb3JtQ29udHJvbE5hbWU9XCJjb21wZXRlbmN5U3ViVGhlbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggYW5kIHNlbGVjdCBzdWItdGhlbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblN1YlRoZW1lQ2hhbmdlKCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGlucHV0IGluc2lkZSBkcm9wZG93biAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwic2VhcmNoLW9wdGlvblwiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwic2VhcmNoLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlNlYXJjaCBzdWItdGhlbWVzLi4uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInN1YlRoZW1lU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJmaWx0ZXJTdWJUaGVtZXMoJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU3ViLXRoZW1lIG9wdGlvbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgc3ViVGhlbWUgb2YgZmlsdGVyZWRTdWJUaGVtZXNcIiBbdmFsdWVdPVwic3ViVGhlbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3N1YlRoZW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBObyByZXN1bHRzIG1lc3NhZ2UgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cImZpbHRlcmVkU3ViVGhlbWVzLmxlbmd0aCA9PT0gMCAmJiBzdWJUaGVtZVNlYXJjaFRleHRcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBzdWItdGhlbWVzIGZvdW5kIG1hdGNoaW5nIFwie3tzdWJUaGVtZVNlYXJjaFRleHR9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRm9yIERvbWFpbjogTWFudWFsIGlucHV0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1hbnVhbC1pbnB1dC1jb250YWluZXJcIiAqbmdJZj1cInNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPT09ICdEb21haW4nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwibWFudWFsU3ViVGhlbWVJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgU3ViLXRoZW1lIG1hbnVhbGx5XCIgY2xhc3M9XCJtYW51YWwtaW5wdXRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQWRkIEJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZC1idXR0b24tc2VjdGlvblwiICpuZ0lmPVwic2VsZWN0ZWRDb21wZXRlbmN5VHlwZSBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiIWVkaXREb21haW5Db21wZXRlbmN5RmxhZ1wiIGNsYXNzPVwiYWRkLWNvbXBldGVuY3ktYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbkFkZENvbXBldGVuY3koKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY2FuQWRkQ29tcGV0ZW5jeSgpID8gJ2J0bi1hY3RpdmUnIDogJ2J0bi1kaXNhYmxlJ1wiIChjbGljayk9XCJhZGRDb21wZXRlbmN5KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgQ29tcGV0ZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cImVkaXREb21haW5Db21wZXRlbmN5RmxhZ1wiIGNsYXNzPVwiYWRkLWNvbXBldGVuY3ktYnRuIGJ0bi1hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVDb21wZXRlbmN5KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVcGRhdGUgQ29tcGV0ZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cImVkaXREb21haW5Db21wZXRlbmN5RmxhZ1wiIGNsYXNzPVwiYWRkLWNvbXBldGVuY3ktYnRuIGJ0bi1hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDVweDtcIiAoY2xpY2spPVwiY2FuY2VsVXBkYXRlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWwgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN1Yi1oZWFkaW5nIG10LTJcIiAqbmdJZj1cImdldENvbXBldGVuY2llc0J5VHlwZSgnQmVoYXZpb3JhbCcpPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEJlaGF2aW9yYWwgQ29tcGV0ZW5jaWVzXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWdyaWQgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktaXRlbSBiZWhhdmlvdXJhbC1waWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29tcCBvZiBnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0JlaGF2aW9yYWwnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10ZXh0LWJlaGF2aW9yYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29tcC50aGVtZSB9fSAtIHt7IGNvbXAuc3ViX3RoZW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgY2xvc2VcIiAoY2xpY2spPVwiZGVsZXRlQ29tcGV0ZW5jeShjb21wKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdWItaGVhZGluZyBtdC0yXCIgKm5nSWY9XCJnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0Z1bmN0aW9uYWwnKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbmFsIENvbXBldGVuY2llczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1ncmlkIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWl0ZW0gZnVuY3Rpb25hbC1waWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29tcCBvZiBnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0Z1bmN0aW9uYWwnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10ZXh0LWZ1bmN0aW9uYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29tcC50aGVtZSB9fSAtIHt7IGNvbXAuc3ViX3RoZW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgY2xvc2VcIiAoY2xpY2spPVwiZGVsZXRlQ29tcGV0ZW5jeShjb21wKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdWItaGVhZGluZyBtdC0yXCI+RG9tYWluIENvbXBldGVuY2llczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1ncmlkIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWl0ZW0gZG9tYWluLXBpbGxcIiAqbmdGb3I9XCJsZXQgY29tcCBvZiBnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0RvbWFpbicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRleHQtZG9tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbXAudGhlbWUgfX0gLSB7eyBjb21wLnN1Yl90aGVtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGVkaXRcIiAoY2xpY2spPVwiZWRpdENvbXBldGVuY3koY29tcClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGNsb3NlXCIgKGNsaWNrKT1cImRlbGV0ZUNvbXBldGVuY3koY29tcClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1mb290ZXJcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLWFjdGl2ZVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIkNhbmNlbFwiIChjbGljayk9XCJjYW5jZWxGb3JtKClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1hY3RpdmVcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJTYXZlXCIgKGNsaWNrKT1cInNhdmVSb2xlTWFwcGluZygpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwib3ZlcmxheS1sb2FkZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI1MFwiPjwvbWF0LXNwaW5uZXI+XG48L2Rpdj4iXX0=
|
|
817
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1jYnAtcGxhbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvY29tcG9uZW50cy9lZGl0LWNicC1wbGFuL2VkaXQtY2JwLXBsYW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvZWRpdC1jYnAtcGxhbi9lZGl0LWNicC1wbGFuLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFxQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBZSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc1RixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFRM0IsTUFBTSxPQUFPLG9CQUFvQjtJQThDL0IsWUFDUyxTQUE2QyxFQUNwQixJQUFTLEVBQ2pDLEVBQWUsRUFDZixLQUF3QixFQUN4QixhQUE0QixFQUM1QixRQUFxQixFQUNyQixJQUFnQixFQUNqQixLQUFxQjtRQVByQixjQUFTLEdBQVQsU0FBUyxDQUFvQztRQUNwQixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixhQUFRLEdBQVIsUUFBUSxD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SUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQztRQUNqRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxXQUFXO1FBRVQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FDbEMsdUJBQXVCLENBQ1QsQ0FBQztRQUVqQixJQUFJLEtBQUssRUFBRTtZQUNULEtBQUssQ0FBQyxtQkFBbUIsQ0FDdkIsUUFBUSxFQUNSLElBQUksQ0FBQyw4QkFBOEIsQ0FDcEMsQ0FBQztTQUNIO0lBQ0gsQ0FBQzsrR0F2Z0NVLG9CQUFvQiw4Q0FnRHJCLGVBQWU7bUdBaERkLG9CQUFvQixvUEFxQ0csVUFBVSw2QkNuRDlDLGk4aUJBOFNNOzs0RkRoU08sb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLG1CQUFtQjs7MEJBb0QxQixNQUFNOzJCQUFDLGVBQWU7a05BWkcsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQUNzQixjQUFjO3NCQUE3RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1BcnJheSwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCdcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9tb2R1bGVzL3NoYXJlZC9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZWRpdC1jYnAtcGxhbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0LWNicC1wbGFuLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZWRpdC1jYnAtcGxhbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEVkaXRDYnBQbGFuQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHNlbGVjdGVkVmFsdWUgPSAnJ1xuICBzZWFyY2hUZXh0ID0gJydcbiAgcGxhbkRhdGE6IGFueVxuICBjb21wZXRlbmNpZXNDb3VudCA9IHsgdG90YWw6IDAsIGJlaGF2aW9yYWw6IDAsIGZ1bmN0aW9uYWw6IDAsIGRvbWFpbjogMCB9XG4gIGNicEZvcm06IEZvcm1Hcm91cDtcbiAgbG9hZGluZyA9IGZhbHNlXG5cbiAgLy8gRW5oYW5jZWQgY29tcGV0ZW5jeSBzZWxlY3Rpb24gcHJvcGVydGllc1xuICBjb21wZXRlbmNpZXNEYXRhOiBhbnlbXSA9IFtdO1xuICBhdmFpbGFibGVUaGVtZXM6IGFueVtdID0gW107XG4gIGF2YWlsYWJsZVN1YlRoZW1lczogYW55W10gPSBbXTtcbiAgZmlsdGVyZWRUaGVtZXM6IGFueVtdID0gW107XG4gIGZpbHRlcmVkU3ViVGhlbWVzOiBzdHJpbmdbXSA9IFtdO1xuICBzZWxlY3RlZENvbXBldGVuY3lUeXBlID0gJyc7XG4gIHNlbGVjdGVkVGhlbWUgPSAnJztcbiAgc2VsZWN0ZWRTdWJUaGVtZSA9ICcnO1xuICBtYW51YWxUaGVtZSA9ICcnO1xuICBtYW51YWxTdWJUaGVtZSA9ICcnO1xuICB0aGVtZVNlYXJjaFRleHQgPSAnJztcbiAgc3ViVGhlbWVTZWFyY2hUZXh0ID0gJyc7XG4gIGVkaXREb21haW5Db21wZXRlbmN5RmxhZyA9IGZhbHNlXG4gIGVkaXRDb21wZXRlbmN5SW5kZXggPSAtMVxuICBvcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFycjogYW55ID0gW11cbiAgZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSBmYWxzZVxuICBpc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gZmFsc2U7XG4gIGRlc2lnbmF0aW9uT2Zmc2V0ID0gMFxuICBvZGNzRGVzaWduYXRpb25Db3VudCA9IDBcbiAgZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnQgPSAwXG4gIGRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCA9IDUwXG4gIGRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudCA9IDUwXG4gIG5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IGZhbHNlXG4gIGRlc2lnbmF0aW9uU2VhcmNoVGV4dCA9ICcnXG4gIGRlc2lnbmF0aW9uSW5pdEluUHJvZ3Jlc3MgPSBmYWxzZVxuICBzY3JvbGxMaXN0ZW5lckF0dGFjaGVkID0gZmFsc2VcbiAgQFZpZXdDaGlsZCgnZGlhbG9nQ29udGVudCcpIGRpYWxvZ0NvbnRlbnQhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdkZXNpZ25hdGlvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBkZXNpZ25hdGlvblJlZj86IEVsZW1lbnRSZWZcbiAgbWFzdGVyRGF0YTogYW55ID0ge31cbiAgcG9ydGFsRGF0YTogYW55XG4gIGFjdGl2ZVJvd0VsZW1lbnQ6IGFueVxuICByZXF1ZXN0RGF0YTogYW55XG4gIHJlcXVlc3RSb3dEYXRhOiBhbnlcbiAgb25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbEJvdW5kID1cbiAgICB0aGlzLm9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGwuYmluZCh0aGlzKTtcbiAgc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnQgPSA1MFxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RWRpdENicFBsYW5Db21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHVibGljIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxuICApIHtcbiAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmZyb21NZG9Qb3J0YWwpIHtcbiAgICAgIHRoaXMucGxhbkRhdGEgPSBkYXRhPy5lbGVtZW50XG4gICAgICB0aGlzLnJlcXVlc3RSb3dEYXRhID0gZGF0YT8ucmVxdWVzdERhdGFcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGFuRGF0YSA9IGRhdGFcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnUmVjZWl2ZWQgZGF0YTonLCBkYXRhKTtcbiAgICAvLyB0aGlzLnBsYW5EYXRhLmNvbXBldGVuY2llcy5tYXAoKGNvbXBldGVuY2llczphbnkpPT57XG4gICAgLy8gICB0aGlzLmNvbXBldGVuY2llc0NvdW50Wyd0b3RhbCddID0gdGhpcy5jb21wZXRlbmNpZXNDb3VudFsndG90YWwnXSArIDEgXG4gICAgLy8gICBpZihjb21wZXRlbmNpZXMudHlwZSA9PT0gJ0JlaGF2aW9yYWwnKSB7XG4gICAgLy8gICAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ2JlaGF2aW9yYWwnXSA9IHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ2JlaGF2aW9yYWwnXSArMVxuICAgIC8vICAgfVxuICAgIC8vICAgaWYoY29tcGV0ZW5jaWVzLnR5cGUgPT09ICdGdW5jdGlvbmFsJykge1xuICAgIC8vICAgICB0aGlzLmNvbXBldGVuY2llc0NvdW50WydmdW5jdGlvbmFsJ10gPSB0aGlzLmNvbXBldGVuY2llc0NvdW50WydmdW5jdGlvbmFsJ10gKzFcbiAgICAvLyAgIH1cbiAgICAvLyAgIGlmKGNvbXBldGVuY2llcy50eXBlID09PSAnRG9tYWluJykge1xuICAgIC8vICAgICB0aGlzLmNvbXBldGVuY2llc0NvdW50Wydkb21haW4nXSA9IHRoaXMuY29tcGV0ZW5jaWVzQ291bnRbJ2RvbWFpbiddICsxXG4gICAgLy8gICB9XG4gICAgLy8gfSlcbiAgfVxuXG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5sb2FkQ29tcGV0ZW5jaWVzRGF0YSgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcbiAgICBjb25zdCBzZWFyY2hDb250cm9sID0gdGhpcy5jYnBGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKTtcblxuICAgIGlmIChzZWFyY2hDb250cm9sKSB7XG4gICAgICBzZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblxuICAgICAgICAgIGNvbnN0IHR4dCA9IHJlcz8udG9TdHJpbmcoKT8udHJpbSgpID8/ICcnO1xuXG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSB0eHQ7XG5cbiAgICAgICAgICAvLyBSRVNFVCBTRUFSQ0ggUEFHSU5BVElPTlxuICAgICAgICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnQgPSA1MDtcblxuICAgICAgICAgIGlmICh0eHQ/Lmxlbmd0aCkge1xuXG4gICAgICAgICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gQVBJIFNFQVJDSCBPTkxZXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnbWpzZGZtJylcbiAgICAgICAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb24odHh0LCAwKTtcblxuICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSBmYWxzZTtcblxuICAgICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICAgICAgICAgKHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCB8fCBbXSkuc2xpY2UoXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCA9XG4gICAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuXG4gICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0ID0gMDtcblxuICAgICAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgaWYgKFxuICAgICAgIXRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCB8fFxuICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgdGhpcy5nZXREZXNpZ25hdGlvblNhZmUoKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVDb21wZXRlbmN5Q291bnRzKClcblxuICAgIGNvbnN0IHJlcXVlc3RJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdyZXF1ZXN0X2lkJyk7XG5cbiAgICBjb25zb2xlLmxvZygncmVxdWVzdElkJywgcmVxdWVzdElkKVxuICB9XG5cbiAgbG9hZENvbXBldGVuY2llc0RhdGEoKSB7XG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldENvbXBldGVuY3lKc29uKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzRGF0YSA9IGRhdGE7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDb21wZXRlbmNpZXMgZGF0YSBsb2FkZWQ6JywgdGhpcy5jb21wZXRlbmNpZXNEYXRhKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgY29tcGV0ZW5jaWVzIGRhdGE6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpIHtcbiAgICBjb25zdCBjb21wcyA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWU7XG4gICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudCA9IHsgdG90YWw6IDAsIGJlaGF2aW9yYWw6IDAsIGZ1bmN0aW9uYWw6IDAsIGRvbWFpbjogMCB9O1xuICAgIGNvbXBzLmZvckVhY2goYyA9PiB7XG4gICAgICB0aGlzLmNvbXBldGVuY2llc0NvdW50LnRvdGFsKys7XG4gICAgICBpZiAoYy50eXBlLnRvTG93ZXJDYXNlKCkgPT09ICdiZWhhdmlvcmFsJykgdGhpcy5jb21wZXRlbmNpZXNDb3VudC5iZWhhdmlvcmFsKys7XG4gICAgICBpZiAoYy50eXBlLnRvTG93ZXJDYXNlKCkgPT09ICdmdW5jdGlvbmFsJykgdGhpcy5jb21wZXRlbmNpZXNDb3VudC5mdW5jdGlvbmFsKys7XG4gICAgICBpZiAoYy50eXBlLnRvTG93ZXJDYXNlKCkgPT09ICdkb21haW4nKSB0aGlzLmNvbXBldGVuY2llc0NvdW50LmRvbWFpbisrO1xuICAgIH0pO1xuICB9XG5cbiAgaW5pdGlhbGl6ZUZvcm0oKSB7XG4gICAgdGhpcy5jYnBGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBkZXNpZ25hdGlvbl9uYW1lOiBbdGhpcy5wbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZSB8fCAnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICB3aW5nX2RpdmlzaW9uX3NlY3Rpb246IFt0aGlzLnBsYW5EYXRhPy53aW5nX2RpdmlzaW9uX3NlY3Rpb24gfHwgJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcm9sZV9yZXNwb25zaWJpbGl0aWVzX3RleHQ6IFt0aGlzLnBsYW5EYXRhPy5yb2xlX3Jlc3BvbnNpYmlsaXRpZXM/LmpvaW4oJ1xcbicpIHx8ICcnXSxcbiAgICAgIGFjdGl2aXRpZXNfdGV4dDogW3RoaXMucGxhbkRhdGE/LmFjdGl2aXRpZXM/LmpvaW4oJ1xcbicpIHx8ICcnXSxcbiAgICAgIGNvbXBldGVuY3lTZWFyY2hUZXh0OiBbJyddLFxuICAgICAgY29tcGV0ZW5jeVR5cGU6IFsnJ10sXG4gICAgICBjb21wZXRlbmN5VGhlbWU6IFsnJ10sXG4gICAgICBjb21wZXRlbmN5U3ViVGhlbWU6IFsnJ10sXG4gICAgICBtYW51YWxUaGVtZUlucHV0OiBbJyddLFxuICAgICAgbWFudWFsU3ViVGhlbWVJbnB1dDogWycnXSxcbiAgICAgIHRoZW1lU2VhcmNoOiBbJyddLFxuICAgICAgc3ViVGhlbWVTZWFyY2g6IFsnJ10sXG4gICAgICBjb21wZXRlbmNpZXM6IHRoaXMuZmIuYXJyYXkodGhpcy5wbGFuRGF0YT8uY29tcGV0ZW5jaWVzIHx8IFtdKSwgLy8gb3B0aW9uYWwgY3VzdG9taXphdGlvbixcbiAgICAgIHNlYXJjaERlc2lnbmF0aW9uOiBbJyddLFxuICAgICAgaWdvdF9kZXNpZ25hdGlvbl9pZDogW3RoaXMucGxhbkRhdGE/Lmlnb3RfZGVzaWduYXRpb25faWQgfHwgJyddXG4gICAgfSk7XG5cbiAgICBpZiAoIXRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSkge1xuICAgICAgdGhpcy5nZXREZXNpZ25hdGlvblNhZmUoKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVzaWduYXRpb25TYWZlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlc2lnbmF0aW9uSW5pdEluUHJvZ3Jlc3MgfHwgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5kZXNpZ25hdGlvbkluaXRJblByb2dyZXNzID0gdHJ1ZVxuICAgIHRoaXMuZ2V0RGVzaWduYXRpb24oKVxuICB9XG5cblxuICBnZXQgcm9sZVJlc3BvbnNpYmlsaXRpZXMoKTogRm9ybUFycmF5IHtcbiAgICByZXR1cm4gdGhpcy5jYnBGb3JtLmdldCgncm9sZV9yZXNwb25zaWJpbGl0aWVzJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgc2VhcmNoRGF0YSgpIHtcblxuICB9XG5cbiAgYXBwbHlGaWx0ZXIoKSB7XG5cbiAgfVxuXG4gIGdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlOiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgcmV0dXJuICh0aGlzLmNicEZvcm0/LmdldCgnY29tcGV0ZW5jaWVzJyk/LnZhbHVlIHx8IFtdKS5maWx0ZXIoYyA9PiBjLnR5cGUgPT09IHR5cGUpO1xuICB9XG5cbiAgY2xvc2VEaWFsb2coKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIHNhdmVSb2xlTWFwcGluZygpIHtcbiAgICBpZiAodGhpcy5jYnBGb3JtLmludmFsaWQpIHJldHVybjtcblxuICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5jYnBGb3JtLnZhbHVlO1xuICAgIGNvbnNvbGUubG9nKCdTdWJtaXR0ZWQgRGF0YTonLCBmb3JtRGF0YSk7XG4gICAgbGV0IGNicFBsYW5EYXRhOiBhbnkgPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqO1xuICAgIGNvbnNvbGUubG9nKCdjYnBQbGFuRGF0YScsIGNicFBsYW5EYXRhKVxuICAgIGNvbnN0IHJvbGVSZXNwb25zaWJpbGl0aWVzQXJyYXkgPSB0aGlzLmNicEZvcm0udmFsdWUucm9sZV9yZXNwb25zaWJpbGl0aWVzX3RleHRcbiAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgIC5tYXAobGluZSA9PiBsaW5lLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIobGluZSA9PiBsaW5lKTtcbiAgICBjb25zdCBhY3Rpdml0aWVzID0gdGhpcy5jYnBGb3JtLnZhbHVlLmFjdGl2aXRpZXNfdGV4dFxuICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgLm1hcChsaW5lID0+IGxpbmUudHJpbSgpKVxuICAgICAgLmZpbHRlcihsaW5lID0+IGxpbmUpO1xuICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICBsZXQgcmVxID1cbiAgICB7XG4gICAgICBcInNlY3Rvcl9uYW1lXCI6IGNicFBsYW5EYXRhPy5zZWN0b3JzPy5qb2luKFwiLFwiKSxcbiAgICAgIFwiaW5zdHJ1Y3Rpb25cIjogY2JwUGxhbkRhdGE/Lmluc3RydWN0aW9uID8gY2JwUGxhbkRhdGEuaW5zdHJ1Y3Rpb24gOiAnJyxcbiAgICAgIFwid2luZ19kaXZpc2lvbl9zZWN0aW9uXCI6IGZvcm1EYXRhPy53aW5nX2RpdmlzaW9uX3NlY3Rpb24sXG4gICAgICBcInJvbGVfcmVzcG9uc2liaWxpdGllc1wiOiByb2xlUmVzcG9uc2liaWxpdGllc0FycmF5LFxuICAgICAgXCJhY3Rpdml0aWVzXCI6IGFjdGl2aXRpZXMsXG4gICAgICBcImNvbXBldGVuY2llc1wiOiBmb3JtRGF0YS5jb21wZXRlbmNpZXNcbiAgICB9XG4gICAgY29uc29sZS5sb2coJ21hc3RlckRhdGE/LmRlc2lnbmF0aW9uJywgdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbilcblxuICAgIGlmIChmb3JtRGF0YT8uaWdvdF9kZXNpZ25hdGlvbl9pZCkge1xuICAgICAgcmVxW1wiaWdvdF9kZXNpZ25hdGlvbl9pZFwiXSA9IGZvcm1EYXRhPy5pZ290X2Rlc2lnbmF0aW9uX2lkIHx8ICcnLFxuICAgICAgICByZXFbXCJkZXNpZ25hdGlvbl9uYW1lXCJdID0gZm9ybURhdGE/LmRlc2lnbmF0aW9uX25hbWUgPyBmb3JtRGF0YS5kZXNpZ25hdGlvbl9uYW1lIDogJydcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ21hc3RlckRhdGE/LmRlc2lnbmF0aW9uJywgdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbilcblxuICAgICAgcmVxW1wiZGVzaWduYXRpb25fbmFtZVwiXSA9IGZvcm1EYXRhPy5kZXNpZ25hdGlvbl9uYW1lID8gZm9ybURhdGEuZGVzaWduYXRpb25fbmFtZSA6ICcnXG4gICAgICBjb25zdCBzZWxlY3RlZERlc2lnbmF0aW9uID0gdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbj8uZmluZChcbiAgICAgICAgKGl0ZW06IGFueSkgPT5cbiAgICAgICAgICBpdGVtPy5uYW1lPy50b0xvd2VyQ2FzZSgpID09PSBmb3JtRGF0YT8uZGVzaWduYXRpb25fbmFtZT8udG9Mb3dlckNhc2UoKVxuICAgICAgKTtcblxuICAgICAgcmVxW1wiaWdvdF9kZXNpZ25hdGlvbl9pZFwiXSA9IHNlbGVjdGVkRGVzaWduYXRpb24/Lmlnb3RfZGVzaWduYXRpb25faWQgfHwgJyc7XG5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmZyb21NZG9Qb3J0YWwpIHtcbiAgICAgIHJlcVsncmVxdWVzdF9pZCddID0gdGhpcy5yZXF1ZXN0Um93RGF0YT8uZGVtYW5kX2lkXG4gICAgICByZXFbJ2l0ZW1faWQnXSA9IHRoaXMucGxhbkRhdGE/LmlkXG4gICAgfVxuICAgIGxldCByb2xlX21hcHBpbmdfaWQgPSB0aGlzLnBsYW5EYXRhLmlkXG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UudXBkYXRlUm9sZU1hcHBpbmcocm9sZV9tYXBwaW5nX2lkLCByZXEpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgIC8vIFN1Y2Nlc3MgaGFuZGxpbmdcbiAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3M6JywgcmVzKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3NhdmVkJylcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdSb2xlIE1hcHBpbmcgU2F2ZWQgU3VjY2Vzc2Z1bGx5JywgJ1gnLCB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgfSk7XG4gICAgICAgIC8vdGhpcy5zdWNjZXNzUm9sZU1hcHBpbmcuZW1pdCh0aGlzLnJvbGVNYXBwaW5nRm9ybSlcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvcicsIGVycm9yKVxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpXG4gICAgICAgIC8vIEhhbmRsZSA0MDkgQ29uZmxpY3QgaGVyZVxuICAgICAgICAvLyBhbGVydCgnQ29uZmxpY3QgZGV0ZWN0ZWQ6IFRoZSByZXNvdXJjZSBhbHJlYWR5IGV4aXN0cyBvciBhY3Rpb24gY29uZmxpY3RzLicpO1xuICAgICAgICAvL3RoaXMuZ2V0XG4gICAgICAgIC8vIE9yIHlvdSBjYW4gc2V0IGEgVUkgZXJyb3IgbWVzc2FnZSB2YXJpYWJsZVxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZXJyb3I/LmVycm9yPy5kZXRhaWwsICdYJywge1xuICAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgLy90aGlzLmFscmVhZHlBdmFpbGFibGVSb2xlTWFwcGluZy5lbWl0KHRoaXMucm9sZU1hcHBpbmdGb3JtKVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2FuY2VsRm9ybSgpIHtcbiAgICAvLyBNYXJrIGFsbCBjb250cm9scyBhcyBwcmlzdGluZSBhbmQgdW50b3VjaGVkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHZhbHVlc1xuICAgIHRoaXMuY2JwRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgIHRoaXMuY2JwRm9ybS5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAvLyB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlID0gdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFyclxuICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLmNvbXBldGVuY2llc0FycmF5Jyx0aGlzLmNvbXBldGVuY2llc0FycmF5KVxuICAgIC8vIEFsc28sIGlmIHlvdSB3YW50IHRvIG1hcmsgYWxsIGNoaWxkIGNvbnRyb2xzIChGb3JtQ29udHJvbHMgLyBGb3JtQXJyYXlzIC8gRm9ybUdyb3VwcykgYXMgcHJpc3RpbmUgYW5kIHVudG91Y2hlZFxuICAgIHRoaXMubWFya0Zvcm1Hcm91cFByaXN0aW5lVW50b3VjaGVkKHRoaXMuY2JwRm9ybSk7XG4gICAgLy8gaWYodGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4ID4gLTEpIHtcbiAgICAvLyAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWVbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsndHlwZSddID0gdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFyclt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWyd0eXBlJ11cbiAgICAvLyAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWVbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsndGhlbWUnXSA9IHRoaXMub3JpZ2luYWxDb21wZXRlbmN5VmFsdWVBcnJbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsndGhlbWUnXVxuICAgIC8vICAgdGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZVt0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXhdWydzdWJfdGhlbWUnXSA9IHRoaXMub3JpZ2luYWxDb21wZXRlbmN5VmFsdWVBcnJbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsnc3ViX3RoZW1lJ11cbiAgICAvLyB9XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKVxuICB9XG5cbiAgcHJpdmF0ZSBtYXJrRm9ybUdyb3VwUHJpc3RpbmVVbnRvdWNoZWQoZm9ybUdyb3VwOiBGb3JtR3JvdXAgfCBGb3JtQXJyYXkpIHtcbiAgICBPYmplY3Qua2V5cyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNba2V5XTtcbiAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgY29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICBjb250cm9sLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9ybUdyb3VwUHJpc3RpbmVVbnRvdWNoZWQoY29udHJvbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXQgY29tcGV0ZW5jaWVzQXJyYXkoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jYnBGb3JtLmdldCgnY29tcGV0ZW5jaWVzJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgb25Db21wZXRlbmN5VHlwZUNoYW5nZSh0eXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPSB0eXBlO1xuICAgIHRoaXMuc2VsZWN0ZWRUaGVtZSA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRTdWJUaGVtZSA9ICcnO1xuICAgIHRoaXMubWFudWFsVGhlbWUgPSAnJztcbiAgICB0aGlzLm1hbnVhbFN1YlRoZW1lID0gJyc7XG4gICAgdGhpcy5hdmFpbGFibGVUaGVtZXMgPSBbXTtcbiAgICB0aGlzLmF2YWlsYWJsZVN1YlRoZW1lcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyZWRUaGVtZXMgPSBbXTtcbiAgICB0aGlzLmZpbHRlcmVkU3ViVGhlbWVzID0gW107XG4gICAgdGhpcy50aGVtZVNlYXJjaFRleHQgPSAnJztcbiAgICB0aGlzLnN1YlRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuXG4gICAgLy8gUmVzZXQgZm9ybSBjb250cm9sc1xuICAgIHRoaXMuY2JwRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIGNvbXBldGVuY3lUaGVtZTogJycsXG4gICAgICBjb21wZXRlbmN5U3ViVGhlbWU6ICcnLFxuICAgICAgbWFudWFsVGhlbWVJbnB1dDogJycsXG4gICAgICBtYW51YWxTdWJUaGVtZUlucHV0OiAnJyxcbiAgICAgIHRoZW1lU2VhcmNoOiAnJyxcbiAgICAgIHN1YlRoZW1lU2VhcmNoOiAnJ1xuICAgIH0pO1xuXG4gICAgaWYgKHR5cGUgPT09ICdCZWhhdmlvcmFsJyB8fCB0eXBlID09PSAnRnVuY3Rpb25hbCcpIHtcbiAgICAgIC8vIExvYWQgdGhlbWVzIGZyb20gSlNPTiBmb3IgQmVoYXZpb3JhbCBhbmQgRnVuY3Rpb25hbFxuICAgICAgY29uc3QgY29tcGV0ZW5jeUNhdGVnb3J5ID0gdGhpcy5jb21wZXRlbmNpZXNEYXRhLmZpbmQoY2F0ID0+XG4gICAgICAgIGNhdC5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IHR5cGUudG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICAodHlwZSA9PT0gJ0JlaGF2aW9yYWwnICYmIGNhdC5uYW1lID09PSAnQmVoYXZpb3VyYWwnKVxuICAgICAgKTtcblxuICAgICAgaWYgKGNvbXBldGVuY3lDYXRlZ29yeSkge1xuICAgICAgICB0aGlzLmF2YWlsYWJsZVRoZW1lcyA9IGNvbXBldGVuY3lDYXRlZ29yeS5jb21wZXRlbmN5X3RoZW1lIHx8IFtdO1xuICAgICAgICB0aGlzLmZpbHRlcmVkVGhlbWVzID0gWy4uLnRoaXMuYXZhaWxhYmxlVGhlbWVzXTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRm9yIERvbWFpbiwgbm8gdGhlbWVzIGFyZSBsb2FkZWQgLSB1c2VyIHdpbGwgZW50ZXIgbWFudWFsbHlcbiAgfVxuXG4gIG9uVGhlbWVDaGFuZ2UodGhlbWVOYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbGVjdGVkVGhlbWUgPSB0aGVtZU5hbWU7XG4gICAgdGhpcy5zZWxlY3RlZFN1YlRoZW1lID0gJyc7XG4gICAgdGhpcy5hdmFpbGFibGVTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLmZpbHRlcmVkU3ViVGhlbWVzID0gW107XG4gICAgdGhpcy5zdWJUaGVtZVNlYXJjaFRleHQgPSAnJztcblxuICAgIHRoaXMuY2JwRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIGNvbXBldGVuY3lTdWJUaGVtZTogJycsXG4gICAgICBzdWJUaGVtZVNlYXJjaDogJydcbiAgICB9KTtcblxuICAgIC8vIEZpbmQgdGhlIHNlbGVjdGVkIHRoZW1lIGFuZCBsb2FkIGl0cyBzdWItdGhlbWVzXG4gICAgY29uc3Qgc2VsZWN0ZWRUaGVtZU9iaiA9IHRoaXMuYXZhaWxhYmxlVGhlbWVzLmZpbmQodGhlbWUgPT4gdGhlbWUubmFtZSA9PT0gdGhlbWVOYW1lKTtcbiAgICBpZiAoc2VsZWN0ZWRUaGVtZU9iaikge1xuICAgICAgdGhpcy5hdmFpbGFibGVTdWJUaGVtZXMgPSBzZWxlY3RlZFRoZW1lT2JqLmNvbXBldGVuY3lfc3ViX3RoZW1lIHx8IFtdO1xuICAgICAgdGhpcy5maWx0ZXJlZFN1YlRoZW1lcyA9IFsuLi50aGlzLmF2YWlsYWJsZVN1YlRoZW1lc107XG4gICAgfVxuICB9XG5cbiAgb25TdWJUaGVtZUNoYW5nZShzdWJUaGVtZU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRTdWJUaGVtZSA9IHN1YlRoZW1lTmFtZTtcbiAgfVxuXG4gIGFkZENvbXBldGVuY3koKSB7XG4gICAgbGV0IHR5cGUgPSB0aGlzLnNlbGVjdGVkQ29tcGV0ZW5jeVR5cGU7XG4gICAgbGV0IHRoZW1lID0gJyc7XG4gICAgbGV0IHN1YlRoZW1lID0gJyc7XG5cbiAgICBpZiAodHlwZSA9PT0gJ0RvbWFpbicpIHtcbiAgICAgIC8vIEZvciBEb21haW4sIHVzZSBtYW51YWwgaW5wdXRcbiAgICAgIHRoZW1lID0gdGhpcy5jYnBGb3JtLnZhbHVlLm1hbnVhbFRoZW1lSW5wdXQ/LnRyaW0oKTtcbiAgICAgIHN1YlRoZW1lID0gdGhpcy5jYnBGb3JtLnZhbHVlLm1hbnVhbFN1YlRoZW1lSW5wdXQ/LnRyaW0oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIEJlaGF2aW9yYWwvRnVuY3Rpb25hbCwgdXNlIGRyb3Bkb3duIHNlbGVjdGlvbnNcbiAgICAgIHRoZW1lID0gdGhpcy5zZWxlY3RlZFRoZW1lO1xuICAgICAgc3ViVGhlbWUgPSB0aGlzLnNlbGVjdGVkU3ViVGhlbWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgJiYgdGhlbWUgJiYgc3ViVGhlbWUpIHtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWUuc29tZShjID0+XG4gICAgICAgIGMudGhlbWUgPT09IHRoZW1lICYmIGMuc3ViX3RoZW1lID09PSBzdWJUaGVtZSAmJiBjLnR5cGUgPT09IHR5cGVcbiAgICAgICk7XG5cbiAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICB0eXBlOiBbdHlwZV0sXG4gICAgICAgICAgdGhlbWU6IFt0aGVtZV0sXG4gICAgICAgICAgc3ViX3RoZW1lOiBbc3ViVGhlbWVdXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbXBldGVuY2llc0FycmF5LnB1c2gobmV3Q29tcCk7XG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFyIGlucHV0IGZpZWxkcyBhZnRlciBhZGRpbmdcbiAgICAgIHRoaXMucmVzZXRDb21wZXRlbmN5Rm9ybSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPSB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlO1xuICAgIHRoaXMuY2JwRm9ybS5wYXRjaFZhbHVlKHsgY29tcGV0ZW5jaWVzOiBbLi4uY3VycmVudFZhbHVlc10gfSk7XG5cbiAgICB0aGlzLnVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKTtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLmNicEZvcm0/LmdldCgnY29tcGV0ZW5jaWVzJyk/LnZhbHVlKTtcbiAgfVxuXG4gIHJlc2V0Q29tcGV0ZW5jeUZvcm0oKSB7XG4gICAgdGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZFRoZW1lID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZFN1YlRoZW1lID0gJyc7XG4gICAgdGhpcy5tYW51YWxUaGVtZSA9ICcnO1xuICAgIHRoaXMubWFudWFsU3ViVGhlbWUgPSAnJztcbiAgICB0aGlzLmF2YWlsYWJsZVRoZW1lcyA9IFtdO1xuICAgIHRoaXMuYXZhaWxhYmxlU3ViVGhlbWVzID0gW107XG4gICAgdGhpcy5maWx0ZXJlZFRoZW1lcyA9IFtdO1xuICAgIHRoaXMuZmlsdGVyZWRTdWJUaGVtZXMgPSBbXTtcbiAgICB0aGlzLnRoZW1lU2VhcmNoVGV4dCA9ICcnO1xuICAgIHRoaXMuc3ViVGhlbWVTZWFyY2hUZXh0ID0gJyc7XG5cbiAgICB0aGlzLmNicEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICBjb21wZXRlbmN5VHlwZTogJycsXG4gICAgICBjb21wZXRlbmN5VGhlbWU6ICcnLFxuICAgICAgY29tcGV0ZW5jeVN1YlRoZW1lOiAnJyxcbiAgICAgIG1hbnVhbFRoZW1lSW5wdXQ6ICcnLFxuICAgICAgbWFudWFsU3ViVGhlbWVJbnB1dDogJycsXG4gICAgICB0aGVtZVNlYXJjaDogJycsXG4gICAgICBzdWJUaGVtZVNlYXJjaDogJydcbiAgICB9KTtcbiAgfVxuXG4gIGZpbHRlclRoZW1lcyhzZWFyY2hUZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLnRoZW1lU2VhcmNoVGV4dCA9IHNlYXJjaFRleHQ7XG4gICAgaWYgKCFzZWFyY2hUZXh0LnRyaW0oKSkge1xuICAgICAgdGhpcy5maWx0ZXJlZFRoZW1lcyA9IFsuLi50aGlzLmF2YWlsYWJsZVRoZW1lc107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRUaGVtZXMgPSB0aGlzLmF2YWlsYWJsZVRoZW1lcy5maWx0ZXIodGhlbWUgPT5cbiAgICAgICAgdGhlbWUubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyU3ViVGhlbWVzKHNlYXJjaFRleHQ6IHN0cmluZykge1xuICAgIHRoaXMuc3ViVGhlbWVTZWFyY2hUZXh0ID0gc2VhcmNoVGV4dDtcbiAgICBpZiAoIXNlYXJjaFRleHQudHJpbSgpKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkU3ViVGhlbWVzID0gWy4uLnRoaXMuYXZhaWxhYmxlU3ViVGhlbWVzXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJlZFN1YlRoZW1lcyA9IHRoaXMuYXZhaWxhYmxlU3ViVGhlbWVzLmZpbHRlcihzdWJUaGVtZSA9PlxuICAgICAgICBzdWJUaGVtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY2FuQWRkQ29tcGV0ZW5jeSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0RvbWFpbicpIHtcbiAgICAgIGNvbnN0IHRoZW1lID0gdGhpcy5jYnBGb3JtLnZhbHVlLm1hbnVhbFRoZW1lSW5wdXQ/LnRyaW0oKTtcbiAgICAgIGNvbnN0IHN1YlRoZW1lID0gdGhpcy5jYnBGb3JtLnZhbHVlLm1hbnVhbFN1YlRoZW1lSW5wdXQ/LnRyaW0oKTtcbiAgICAgIHJldHVybiAhISh0aGVtZSAmJiBzdWJUaGVtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAhISh0aGlzLnNlbGVjdGVkVGhlbWUgJiYgdGhpcy5zZWxlY3RlZFN1YlRoZW1lKTtcbiAgICB9XG4gIH1cblxuICBkZWxldGVDb21wZXRlbmN5KGNvbXApIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkuY29udHJvbHMuZmluZEluZGV4KFxuICAgICAgY29udHJvbCA9PiBjb250cm9sLnZhbHVlLnRoZW1lID09PSBjb21wLnRoZW1lICYmIGNvbnRyb2wudmFsdWUudHlwZSA9PT0gY29tcC50eXBlXG4gICAgKTtcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKTtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGVkaXRDb21wZXRlbmN5KGNvbXApIHtcbiAgICB0aGlzLmVkaXREb21haW5Db21wZXRlbmN5RmxhZyA9IHRydWVcbiAgICB0aGlzLmVkaXRDb21wZXRlbmN5SW5kZXggPSAtMVxuICAgIHRoaXMuY2JwRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIGNvbXBldGVuY3lUeXBlOiAnRG9tYWluJyxcbiAgICAgIG1hbnVhbFRoZW1lSW5wdXQ6IGNvbXA/LnRoZW1lLFxuICAgICAgbWFudWFsU3ViVGhlbWVJbnB1dDogY29tcD8uc3ViX3RoZW1lXG4gICAgfSk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlLmZpbmRJbmRleChjID0+XG4gICAgICBjLnRoZW1lID09PSBjb21wPy50aGVtZSAmJlxuICAgICAgYy5zdWJfdGhlbWUgPT09IGNvbXA/LnN1Yl90aGVtZSAmJlxuICAgICAgYy50eXBlID09PSBcIkRvbWFpblwiXG4gICAgKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4ID0gaW5kZXhcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZENvbXBldGVuY3lUeXBlID0gJ0RvbWFpbidcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZGlhbG9nQ29udGVudC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHtcbiAgICAgICAgdG9wOiAwLFxuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCdcbiAgICAgIH0pO1xuICAgIH0sIDUwMClcbiAgfVxuXG4gIGNhbmNlbFVwZGF0ZSgpIHtcbiAgICB0aGlzLmVkaXREb21haW5Db21wZXRlbmN5RmxhZyA9IGZhbHNlXG4gICAgdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4ID0gLTFcbiAgICB0aGlzLnJlc2V0Q29tcGV0ZW5jeUZvcm0oKVxuICB9XG5cbiAgdXBkYXRlQ29tcGV0ZW5jeSgpIHtcbiAgICBsZXQgdHlwZSA9IHRoaXMuc2VsZWN0ZWRDb21wZXRlbmN5VHlwZTtcbiAgICBsZXQgdGhlbWUgPSAnJztcbiAgICBsZXQgc3ViVGhlbWUgPSAnJztcblxuICAgIGlmICh0eXBlID09PSAnRG9tYWluJykge1xuICAgICAgLy8gRm9yIERvbWFpbiwgdXNlIG1hbnVhbCBpbnB1dFxuICAgICAgdGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgc3ViVGhlbWUgPSB0aGlzLmNicEZvcm0udmFsdWUubWFudWFsU3ViVGhlbWVJbnB1dD8udHJpbSgpO1xuICAgICAgdGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFyciA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jb21wZXRlbmNpZXNBcnJheS52YWx1ZSkpXG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCcgdGhpcy5jb21wZXRlbmNpZXNBcnJheScsIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkpXG4gICAgaWYgKHR5cGUgJiYgdGhlbWUgJiYgc3ViVGhlbWUpIHtcblxuICAgICAgY29uc29sZS5sb2coJ3RoaXMuZWRpdENvbXBldGVuY3lJbmRleC0tJywgdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4KVxuICAgICAgaWYgKHRoaXMuZWRpdENvbXBldGVuY3lJbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWVbdGhpcy5lZGl0Q29tcGV0ZW5jeUluZGV4XVsndHlwZSddID0gdHlwZVxuICAgICAgICB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlW3RoaXMuZWRpdENvbXBldGVuY3lJbmRleF1bJ3RoZW1lJ10gPSB0aGVtZVxuICAgICAgICB0aGlzLmNvbXBldGVuY2llc0FycmF5LnZhbHVlW3RoaXMuZWRpdENvbXBldGVuY3lJbmRleF1bJ3N1Yl90aGVtZSddID0gc3ViVGhlbWVcbiAgICAgIH1cblxuICAgICAgLy8gaWYgKCFleGlzdHMpIHtcbiAgICAgIC8vICAgY29uc3QgbmV3Q29tcCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgLy8gICAgIHR5cGU6IFt0eXBlXSxcbiAgICAgIC8vICAgICB0aGVtZTogW3RoZW1lXSxcbiAgICAgIC8vICAgICBzdWJfdGhlbWU6IFtzdWJUaGVtZV1cbiAgICAgIC8vICAgfSk7XG4gICAgICAvLyAgIHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkucHVzaChuZXdDb21wKTtcbiAgICAgIC8vIH1cblxuICAgICAgLy8gQ2xlYXIgaW5wdXQgZmllbGRzIGFmdGVyIGFkZGluZ1xuICAgICAgdGhpcy5yZXNldENvbXBldGVuY3lGb3JtKCk7XG4gICAgICBjb25zb2xlLmxvZygndGhpcy5vcmlnaW5hbENvbXBldGVuY3lWYWx1ZUFycicsIHRoaXMub3JpZ2luYWxDb21wZXRlbmN5VmFsdWVBcnIpXG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFZhbHVlcyA9IHRoaXMuY29tcGV0ZW5jaWVzQXJyYXkudmFsdWU7XG4gICAgdGhpcy5jYnBGb3JtLnBhdGNoVmFsdWUoeyBjb21wZXRlbmNpZXM6IFsuLi5jdXJyZW50VmFsdWVzXSB9KTtcblxuICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuY2JwRm9ybT8uZ2V0KCdjb21wZXRlbmNpZXMnKT8udmFsdWUpO1xuICB9XG4gIGdldERlc2lnbmF0aW9uKHNlYXJjaFRleHQ/OiBzdHJpbmcsIG9mZnNldD86IG51bWJlcik6IHZvaWQge1xuXG5cbiAgICAvLyBjbGVhciBhbnkgcHJldmlvdXMgZGVidWcgaG9va3NcbiAgICBpZiAoIXNlYXJjaFRleHQgfHwgc2VhcmNoVGV4dD8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBub29wXG4gICAgfVxuXG4gICAgY29uc3QgcmVxT2Zmc2V0ID0gKHR5cGVvZiBvZmZzZXQgPT09ICdudW1iZXInKSA/IG9mZnNldCA6IHRoaXMuZGVzaWduYXRpb25PZmZzZXRcbiAgICBsZXQgcmVxTGltaXQgPSB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudFxuICAgIGNvbnN0IHBhZ2VJbmRleCA9IHJlcUxpbWl0ID4gMCA/IE1hdGguZmxvb3IocmVxT2Zmc2V0IC8gcmVxTGltaXQpIDogMFxuICAgIC8vIGlmIHdlJ3JlIHJlcXVlc3RpbmcgZnJvbSBmaXJzdCBwYWdlLCBjbGVhciB0aGUgbm8tbW9yZS1kYXRhIGd1YXJkXG4gICAgaWYgKHBhZ2VJbmRleCA9PT0gMCkge1xuICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSBmYWxzZVxuICAgICAgcmVxTGltaXQgPSA1MFxuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgZmlsdGVyQ3JpdGVyaWFNYXA6IHtcbiAgICAgICAgc3RhdHVzOiAnQWN0aXZlJ1xuICAgICAgfSxcbiAgICAgIHJlcXVlc3RlZEZpZWxkczogW10sXG4gICAgICBwYWdlTnVtYmVyOiBwYWdlSW5kZXgsXG4gICAgICBwYWdlU2l6ZTogcmVxTGltaXQsXG4gICAgfVxuICAgIGlmIChzZWFyY2hUZXh0Py5sZW5ndGgpIHtcbiAgICAgIHJlcXVlc3RCb2R5WydzZWFyY2hTdHJpbmcnXSA9IHNlYXJjaFRleHRcbiAgICAgIC8vIHdoZW4gc2VhcmNoaW5nLCBzdGFydCBmcm9tIGZpcnN0IHBhZ2VcbiAgICAgIHJlcXVlc3RCb2R5LnBhZ2VOdW1iZXIgPSAwXG4gICAgICAvLyBhbGxvdyBsYXJnZXIgcGFnZSBmb3Igc2VhcmNoIGlmIG5lZWRlZFxuICAgICAgcmVxdWVzdEJvZHkucGFnZVNpemUgPSBwYWdlSW5kZXggPT09IDAgPyA1MCA6IHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50XG4gICAgICAvLyByZXNldCBndWFyZCB3aGVuIHBlcmZvcm1pbmcgYSBmcmVzaCBzZWFyY2hcbiAgICAgIHRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBpbmRpY2F0ZSBsb2FkaW5nIHN0YXRlIHNvIHNjcm9sbCBoYW5kbGVycyBkb24ndCB0cmlnZ2VyIHBhcmFsbGVsIGNhbGxzXG4gICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZVxuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlYXJjaFB1YmxpY0Rlc2lnbmF0aW9uKHJlcXVlc3RCb2R5KS5waXBlKGZpbmFsaXplKCgpID0+IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uSW5pdEluUHJvZ3Jlc3MgPSBmYWxzZVxuICAgIH0pKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuXG4gICAgICAgICAgY29uc3QgY29udGVudCA9IF8uZ2V0KHJlcywgJ3Jlc3VsdC5yZXN1bHQuZGF0YScsIFtdKTtcblxuICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IGNvbnRlbnQubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBpdGVtPy5kZXNpZ25hdGlvbiB8fCAnJyxcbiAgICAgICAgICAgIHN0YXR1czogaXRlbT8uc3RhdHVzIHx8ICdBY3RpdmUnLFxuICAgICAgICAgICAgaWdvdF9kZXNpZ25hdGlvbl9uYW1lOiBpdGVtPy5kZXNpZ25hdGlvbiB8fCAnJyxcbiAgICAgICAgICAgIGlnb3RfZGVzaWduYXRpb25faWQ6IGl0ZW0/LmlkIHx8ICcnXG4gICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgY29uc3QgdG90YWwgPSBfLmdldChcbiAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgICdyZXN1bHQucmVzdWx0LnRvdGFsY291bnQnLFxuICAgICAgICAgICAgXy5nZXQoXG4gICAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgICAgJ3Jlc3VsdC5yZXN1bHQuZGF0YS50b3RhbENvdW50JyxcbiAgICAgICAgICAgICAgXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC50b3RhbENvdW50JywgMClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCA9IHRvdGFsO1xuXG4gICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAgIC8vIFNFQVJDSCBNT0RFXG4gICAgICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgICAgICAgaWYgKHNlYXJjaFRleHQ/Lmxlbmd0aCkge1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZCA9IG1hcHBlZDtcblxuICAgICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uRmlsdGVyZWQuc2xpY2UoXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uTG9hZENvdW50XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgLy8gTk9STUFMIE1PREVcbiAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICAgICAgICBpZiAoIXRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSB8fCByZXFPZmZzZXQgPT09IDApIHtcblxuICAgICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddID0gbWFwcGVkO1xuXG4gICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgY29uc3QgY29tYmluZWQgPVxuICAgICAgICAgICAgICAodGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddIHx8IFtdKS5jb25jYXQobWFwcGVkKTtcblxuICAgICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddID0gXy51bmlxQnkoXG4gICAgICAgICAgICAgIGNvbWJpbmVkLFxuICAgICAgICAgICAgICAoaXQ6IGFueSkgPT4gKGl0Py5uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9XG4gICAgICAgICAgICAodGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwIHx8IFtdKS5zbGljZShcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnRcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBzZWxlY3RlZCB2YWx1ZSBwcmVzZXJ2ZVxuICAgICAgICAgIGNvbnN0IGRlc2lnbmF0aW9uQ29udHJvbCA9XG4gICAgICAgICAgICB0aGlzLmNicEZvcm0uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk7XG5cbiAgICAgICAgICBpZiAoZGVzaWduYXRpb25Db250cm9sKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPVxuICAgICAgICAgICAgICBkZXNpZ25hdGlvbkNvbnRyb2wudmFsdWUgfHwgW107XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY3VycmVudFZhbHVlcy0tJywgY3VycmVudFZhbHVlcylcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkVmFsdWVzID1cbiAgICAgICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLnNvbWUoXG4gICAgICAgICAgICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbT8ubmFtZSA9PT0gY3VycmVudFZhbHVlc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnBsYW5EYXRhKVxuICAgICAgICAgICAgaWYgKCF2YWxpZFZhbHVlcykge1xuICAgICAgICAgICAgICB0aGlzLmNicEZvcm0uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LnNldFZhbHVlKFxuICAgICAgICAgICAgICAgIHRoaXMucGxhbkRhdGE/LmRlc2lnbmF0aW9uX25hbWUgfHwgJydcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3RoaXMuY2JwRm9ybScsIHRoaXMuY2JwRm9ybSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2N1cnJlbnRWYWx1ZXMnLCBjdXJyZW50VmFsdWVzKVxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkVmFsdWVzJywgdmFsaWRWYWx1ZXMpXG5cbiAgICAgICAgICAgIC8vIGlmICh2YWxpZFZhbHVlcy5sZW5ndGggIT09IGN1cnJlbnRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyAgIGRlc2lnbmF0aW9uQ29udHJvbC5zZXRWYWx1ZSh2YWxpZFZhbHVlcyk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gbm8gbW9yZSBkYXRhXG4gICAgICAgICAgaWYgKCFtYXBwZWQgfHwgbWFwcGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNlYXJjaERlc2lnbmF0aW9uQ291bnQgJiZcbiAgICAgICAgICAgICh0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gfHwgW10pLmxlbmd0aCA+PVxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgLy8gU3RvcCBmdXJ0aGVyIGF1dG9tYXRpYyBjYWxscyBvbiByZXBlYXRlZCBlcnJvcnMgdG8gYXZvaWQgdGlnaHQgbG9vcHNcbiAgICAgICAgICAvLyBsb2FkaW5nIGZsYWcgY2xlYXJlZCBpbiBmaW5hbGl6ZSgpXG4gICAgICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlXG4gICAgICAgICAgLy8gdGhpcy5tYXRTbmFja0Jhci5vcGVuKCdVbmFibGUgdG8gZmV0Y2ggZGVzaWduYXRpb24gZGV0YWlscywgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlciEnKVxuICAgICAgICB9XG4gICAgICB9KVxuXG5cblxuXG4gIH1cblxuICBlbnN1cmVTZWxlY3RlZERlc2lnbmF0aW9uRXhpc3RzKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5wbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZTtcbiAgICBpZiAoIXNlbGVjdGVkKSByZXR1cm47XG5cbiAgICBjb25zdCBleGlzdHMgPSB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10/LnNvbWUoXG4gICAgICAoZDogYW55KSA9PiBkLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHNlbGVjdGVkLnRvTG93ZXJDYXNlKClcbiAgICApO1xuXG4gICAgaWYgKCFleGlzdHMpIHtcbiAgICAgIGNvbnN0IGN1c3RvbU9iaiA9IHtcbiAgICAgICAgbmFtZTogc2VsZWN0ZWQsXG4gICAgICAgIHN0YXR1czogJ0FjdGl2ZScsXG4gICAgICAgIGlnb3RfZGVzaWduYXRpb25fbmFtZTogdGhpcy5wbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZSxcbiAgICAgICAgaWdvdF9kZXNpZ25hdGlvbl9pZDogdGhpcy5wbGFuRGF0YT8uaWdvdF9kZXNpZ25hdGlvbl9pZCB8fCBcIkRFU0ctMDAyMzE0XCIsXG4gICAgICB9O1xuXG4gICAgICAvLyDinIUgQWRkIGF0IFRPUCBzbyBpdCdzIHZpc2libGUgaW1tZWRpYXRlbHlcbiAgICAgIHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSA9IFtcbiAgICAgICAgY3VzdG9tT2JqLFxuICAgICAgICAuLi4odGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddIHx8IFtdKVxuICAgICAgXTtcblxuICAgICAgdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbiddID0gW1xuICAgICAgICBjdXN0b21PYmosXG4gICAgICAgIC4uLih0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uJ10gfHwgW10pXG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpIHtcbiAgICBjb25zdCBzZWxlY3RlZERlc2lnbmF0aW9uOiBzdHJpbmcgPVxuICAgICAgKHRoaXMuY2JwRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpO1xuXG4gICAgaWYgKCFzZWxlY3RlZERlc2lnbmF0aW9uKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwKSByZXR1cm47XG5cbiAgICBjb25zdCBub3JtYWxpemUgPSAodjogc3RyaW5nKSA9PiAodiB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBjb25zdCBiYWNrdXAgPSBbLi4udGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwXTtcblxuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBiYWNrdXAuZmluZEluZGV4KFxuICAgICAgKGl0ZW06IGFueSkgPT5cbiAgICAgICAgbm9ybWFsaXplKGl0ZW0/Lm5hbWUpID09PSBub3JtYWxpemUoc2VsZWN0ZWREZXNpZ25hdGlvbilcbiAgICApO1xuXG4gICAgbGV0IHNlbGVjdGVkT2JqOiBhbnk7XG5cbiAgICAvLyBJZiBleGlzdHMg4oaSIHJlbW92ZSBpdCBhbmQgcmV1c2VcbiAgICBpZiAoZXhpc3RpbmdJbmRleCA+IC0xKSB7XG4gICAgICBzZWxlY3RlZE9iaiA9IGJhY2t1cC5zcGxpY2UoZXhpc3RpbmdJbmRleCwgMSlbMF07XG4gICAgfVxuICAgIC8vIElmIG5vdCBleGlzdHMg4oaSIGNyZWF0ZSBuZXdcbiAgICBlbHNlIHtcbiAgICAgIHNlbGVjdGVkT2JqID0ge1xuICAgICAgICBuYW1lOiBzZWxlY3RlZERlc2lnbmF0aW9uLFxuICAgICAgICBzdGF0dXM6ICdBY3RpdmUnLFxuICAgICAgICBpZDogJ2N1c3RvbS0nICsgRGF0ZS5ub3coKSArICctJyArIE1hdGgucmFuZG9tKCksXG4gICAgICAgIGlnb3RfZGVzaWduYXRpb25fbmFtZTogc2VsZWN0ZWREZXNpZ25hdGlvbixcbiAgICAgICAgaWdvdF9kZXNpZ25hdGlvbl9pZDogJ2N1c3RvbS0nICsgRGF0ZS5ub3coKSArICctJyArIE1hdGgucmFuZG9tKCksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIPCflKUgTW92ZSB0byB0b3BcbiAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgPSBbXG4gICAgICBzZWxlY3RlZE9iaixcbiAgICAgIC4uLmJhY2t1cFxuICAgIF07XG5cbiAgICAvLyBBbHNvIHVwZGF0ZSB2aXNpYmxlIGxpc3QgKHNhbWUgb3JkZXIgbG9naWMpXG4gICAgY29uc3QgdmlzaWJsZSA9IFsuLi4odGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uIHx8IFtdKV07XG5cbiAgICBjb25zdCB2aXNpYmxlSW5kZXggPSB2aXNpYmxlLmZpbmRJbmRleChcbiAgICAgIChpdGVtOiBhbnkpID0+XG4gICAgICAgIG5vcm1hbGl6ZShpdGVtPy5uYW1lKSA9PT0gbm9ybWFsaXplKHNlbGVjdGVkRGVzaWduYXRpb24pXG4gICAgKTtcblxuICAgIGlmICh2aXNpYmxlSW5kZXggPiAtMSkge1xuICAgICAgdmlzaWJsZS5zcGxpY2UodmlzaWJsZUluZGV4LCAxKTtcbiAgICB9XG5cbiAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPSBbXG4gICAgICBzZWxlY3RlZE9iaixcbiAgICAgIC4uLnZpc2libGVcbiAgICBdO1xuXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgb25EZXNpZ25hdGlvbkRyb3Bkb3duQ2xvc2VkKCk6IHZvaWQge1xuICAgIC8vIEtlZXAgdGhlIGRlc2lnbmF0aW9uIHZhbHVlIGJ1dCBjbGVhciB0aGUgc2VhcmNoIGlucHV0XG4gICAgY29uc3QgY3VycmVudERlc2lnbmF0aW9uID0gdGhpcy5jYnBGb3JtLmdldCgnZGVzaWduYXRpb25fbmFtZScpIS52YWx1ZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2JwRm9ybS5nZXQoJ3NlYXJjaERlc2lnbmF0aW9uJykpIHtcbiAgICAgICAgdGhpcy5jYnBGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKSEuc2V0VmFsdWUoJycpXG4gICAgICB9XG4gICAgICAvLyBFbnN1cmUgdGhlIGRlc2lnbmF0aW9uIHZhbHVlIHJlbWFpbnMgc2VsZWN0ZWRcbiAgICAgIGlmIChjdXJyZW50RGVzaWduYXRpb24pIHtcbiAgICAgICAgY29uc3QgZGVzaWduYXRpb25Db250cm9sID0gdGhpcy5jYnBGb3JtLmdldCgnZGVzaWduYXRpb25fbmFtZScpO1xuICAgICAgICBpZiAoZGVzaWduYXRpb25Db250cm9sKSB7XG4gICAgICAgICAgZGVzaWduYXRpb25Db250cm9sLnNldFZhbHVlKGN1cnJlbnREZXNpZ25hdGlvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDEwMClcbiAgfVxuXG4gIGRlc2lnbmF0aW9uU2VhcmNoKGV2dDogYW55KSB7XG4gICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2dD8udGFyZ2V0Py52YWx1ZVxuICAgIGNvbnN0IHR4dCA9IChzZWFyY2hUZXh0IHx8ICcnKS50b1N0cmluZygpLnRyaW0oKVxuICAgIGlmICh0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMpIHJldHVyblxuXG4gICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSB0eHRcbiAgICBpZiAodHh0Py5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSB0cnVlXG4gICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlXG4gICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHR4dCwgMClcbiAgICB9IGVsc2UgaWYgKHRoaXMubWFzdGVyRGF0YSAmJiB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwKSB7XG4gICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPSB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwLnNsaWNlKDAsIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50KVxuICAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlXG4gICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpXG4gICAgfVxuICB9XG5cbiAgc2V0dXBTY3JvbGxMaXN0ZW5lcihvcGVuZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblxuICAgIGlmICghb3BlbmVkKSB7XG4gICAgICB0aGlzLnNjcm9sbExpc3RlbmVyQXR0YWNoZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zY3JvbGxMaXN0ZW5lckF0dGFjaGVkKSByZXR1cm47XG4gICAgdGhpcy5zY3JvbGxMaXN0ZW5lckF0dGFjaGVkID0gdHJ1ZTtcbiAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2U7XG5cbiAgICAvLyDinIUgT25seSByZXNldCBwYWdpbmF0aW9uIGlmIHdlIGhhdmUgbm8gZGF0YSB5ZXRcbiAgICBpZiAoIXRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cD8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCA9IHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuICAgICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9IDA7XG4gICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHVuZGVmaW5lZCwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIOKchSBSZXN0b3JlIGZyb20gYmFja3VwIHdpdGhvdXQgcmVzZXR0aW5nIG9mZnNldFxuICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID0gdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLnNsaWNlKFxuICAgICAgICAwLCB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgKTtcbiAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gICAgfVxuXG4gICAgLy8gZm9jdXMgc2VhcmNoIGlucHV0XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgIGNvbnN0IHNlYXJjaElucHV0ID1cbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNlYXJjaC1pbnB1dCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgICAgIGlmIChzZWFyY2hJbnB1dCkge1xuICAgICAgICBzZWFyY2hJbnB1dC5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgfSwgMjAwKTtcblxuICAgIC8vIGF0dGFjaCBzY3JvbGxcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLm1hdC1zZWxlY3QtcGFuZWwuc2VhcmNoLXBhbmVsJ1xuICAgICAgKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICAgIGlmICghcGFuZWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBSRU1PVkUgT0xEIExJU1RFTkVSXG4gICAgICBwYW5lbC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAnc2Nyb2xsJyxcbiAgICAgICAgdGhpcy5vbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsIGFzIGFueVxuICAgICAgKTtcblxuICAgICAgcGFuZWwuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgIHRoaXMub25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbC5iaW5kKHRoaXMpLFxuICAgICAgICB7IHBhc3NpdmU6IHRydWUgfVxuICAgICAgKTtcblxuICAgIH0sIDMwMCk7XG4gIH1cblxuICBvbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsKGV2ZW50OiBhbnkpOiB2b2lkIHtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQ7XG5cbiAgICBjb25zdCBhdEJvdHRvbSA9XG4gICAgICBlbGVtZW50LnNjcm9sbEhlaWdodCAtIGVsZW1lbnQuc2Nyb2xsVG9wIDw9XG4gICAgICBlbGVtZW50LmNsaWVudEhlaWdodCArIDEwO1xuXG4gICAgaWYgKCFhdEJvdHRvbSB8fCB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsb2FkZWQgPVxuICAgICAgdGhpcy5tYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbkJhY2t1cD8ubGVuZ3RoIHx8IDA7XG5cbiAgICBjb25zdCB2aXNpYmxlID1cbiAgICAgIHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb24/Lmxlbmd0aCB8fCAwO1xuXG4gICAgY29uc29sZS5sb2coe1xuICAgICAgbG9hZGVkLFxuICAgICAgdmlzaWJsZSxcbiAgICAgIHRvdGFsOiB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTVEVQIDFcbiAgICAgKiBTSE9XIE1PUkUgRlJPTSBMT0NBTCBDQUNIRVxuICAgICAqL1xuICAgIGlmICh2aXNpYmxlIDwgbG9hZGVkKSB7XG5cbiAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ICs9XG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50O1xuXG4gICAgICAvLyBJTVBPUlRBTlRcbiAgICAgIC8vIGNyZWF0ZSBORVcgQVJSQVkgcmVmZXJlbmNlXG4gICAgICB0aGlzLm1hc3RlckRhdGEgPSB7XG4gICAgICAgIC4uLnRoaXMubWFzdGVyRGF0YSxcbiAgICAgICAgZGVzaWduYXRpb246IFtcbiAgICAgICAgICAuLi50aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAuc2xpY2UoXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnRcbiAgICAgICAgICApXG4gICAgICAgIF1cbiAgICAgIH07XG5cbiAgICAgIC8vIEZPUkNFIFVJIFVQREFURVxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgIC8vIHJlc3RvcmUgc2Nyb2xsIHBvc2l0aW9uXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSBlbGVtZW50LnNjcm9sbFRvcCAtIDIwO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTVEVQIDJcbiAgICAgKiBGRVRDSCBORVhUIFBBR0VcbiAgICAgKi9cbiAgICBpZiAoXG4gICAgICBsb2FkZWQgPCB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50ICYmXG4gICAgICAhdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnNcbiAgICApIHtcblxuICAgICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCArPVxuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcblxuICAgICAgdGhpcy5nZXREZXNpZ25hdGlvbihcbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgfHwgdW5kZWZpbmVkLFxuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2woKTogRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLmNicEZvcm0uZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpIGFzIEZvcm1Db250cm9sO1xuICB9XG5cbiAgY2xlYXJEZXNpZ25hdGlvblNlYXJjaChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uTG9hZENvdW50ID0gNTA7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG5cbiAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2U7XG5cbiAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgKHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCB8fCBbXSkuc2xpY2UoXG4gICAgICAgIDAsXG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50XG4gICAgICApO1xuXG4gICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPSB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcbiAgICB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0ID0gMDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuXG4gICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5tYXQtbWRjLXNlbGVjdC1wYW5lbCdcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgaWYgKHBhbmVsKSB7XG4gICAgICBwYW5lbC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAnc2Nyb2xsJyxcbiAgICAgICAgdGhpcy5vbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsQm91bmRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cblxufVxuIiwiPGRpdiBjbGFzcz1cInZpZXctY2JwLXBsYW5cIiAjZGlhbG9nQ29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmdcIj5FZGl0IFJvbGUgTWFwcGluZzwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNvbnRhaW5lclwiIFtmb3JtR3JvdXBdPVwiY2JwRm9ybVwiPlxuXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlciBtdC00XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzaWduYXRpb25fbmFtZVwiIFt2YWx1ZV09XCJwbGFuRGF0YT8uZGVzaWduYXRpb25fbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMjVweDsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgcGFkZGluZzogOHB4IDEycHg7IHdpZHRoOiAxMDAlO2ZvbnQtc2l6ZTogMTRweDtmb250LWZhbWlseTogJ0xhdG8nO1wiPlxuXG5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJtdC00IG1hcmdpbi10b3AtcyB3LWZ1bGwgcmVxdWlyZWQtc2VsZWN0XCIgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMjVweDsgYm9yZGVyOiAxcHggc29saWQgI2NjYzsgcGFkZGluZzogOHB4IDEycHg7IHdpZHRoOiAxMDAlO2ZvbnQtc2l6ZTogMTRweDtmb250LWZhbWlseTogJ0xhdG8nO1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICNkZXNpZ25hdGlvbiBmb3JtQ29udHJvbE5hbWU9XCJkZXNpZ25hdGlvbl9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBkZXNpZ25hdGlvblwiIChjbG9zZWQpPVwib25EZXNpZ25hdGlvbkRyb3Bkb3duQ2xvc2VkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M9XCJzZWFyY2gtcGFuZWxcIiAob3BlbmVkQ2hhbmdlKT1cInNldHVwU2Nyb2xsTGlzdGVuZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTdGlja3kgc2VhcmNoIGlucHV0IGNvbnRhaW5lciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5LXNlYXJjaC1jb250YWluZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZGVzaWduYXRpb25cIiBzdHlsZT1cIndpZHRoOjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaERlc2lnbmF0aW9uXCIgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIChrZXl1cCk9XCJkZXNpZ25hdGlvblNlYXJjaCgkZXZlbnQpXCIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VhcmNoRGVzaWduYXRpb25Db250cm9sPy52YWx1ZVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsZWFyLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckRlc2lnbmF0aW9uU2VhcmNoKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBPcHRpb25zIGxpc3QgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImRlc2lnbmF0aW9uPy5uYW1lXCIgKm5nRm9yPVwibGV0IGRlc2lnbmF0aW9uIG9mIG1hc3RlckRhdGE/LmRlc2lnbmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGVzaWduYXRpb24/Lm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExvYWRpbmcgaW5kaWNhdG9yIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zXCIgY2xhc3M9XCJsb2FkaW5nLWluZGljYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkIE1vcmUuLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5vIHJlc3VsdHMgbWVzc2FnZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIihtYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbik/Lmxlbmd0aCA9PT0gMFwiIGRpc2FibGVkIGNsYXNzPVwibm8tZGF0YS1vcHRpb25cIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNpZ25hdGlvbiBOb3QgRm91bmQuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPCEtLSA8bWF0LWVycm9yIGNsYXNzPVwidGV4dC14c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkZXNpZ25hdGlvbkZvcm0/LmdldCgnZGVzaWduYXRpb25fbmFtZScpPy50b3VjaGVkICYmIGRlc2lnbmF0aW9uRm9ybT8uZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LmludmFsaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBkZXNpZ25hdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPiAtLT5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWNvbnRhaW5lciBtdC00XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dHNpZGUtbGF5ZXItdG90YWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluc2lkZS1sYXllclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgVG90YWwgQ29tcGV0ZW5jaWVzXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tcGV0ZW5jaWVzQ291bnQ/LnRvdGFsfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dHNpZGUtbGF5ZXItYmVoYXZpb3JhbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zaWRlLWxheWVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBCZWhhdmlvcmFsIENvbXBldGVuY2llc1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBldGVuY2llc0NvdW50Py5iZWhhdmlvcmFsfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dHNpZGUtbGF5ZXItZnVuY3Rpb25hbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zaWRlLWxheWVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbmFsIENvbXBldGVuY2llc1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NvbXBldGVuY2llc0NvdW50Py5mdW5jdGlvbmFsfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm91dHNpZGUtbGF5ZXItZG9tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnNpZGUtbGF5ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIERvbWFpbiBDb21wZXRlbmNpZXNcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tjb21wZXRlbmNpZXNDb3VudD8uZG9tYWlufX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00IHNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+V2luZy9EaXZpc2lvbjwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJ3aW5nX2RpdmlzaW9uX3NlY3Rpb25cIiBbdmFsdWVdPVwicGxhbkRhdGE/LndpbmdfZGl2aXNpb25fc2VjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDI1cHg7IGJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDhweCAxMnB4OyB3aWR0aDoxMDAlO2ZvbnQtc2l6ZTogMTRweDtmb250LWZhbWlseTogJ0xhdG8nO1wiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPlJvbGVzICYgUmVzcG9uc2liaWxpdGllczwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNCBhZGRpdGlvbmFsLWRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiY3VzdG9tLXRleHRhcmVhXCIgZm9ybUNvbnRyb2xOYW1lPVwicm9sZV9yZXNwb25zaWJpbGl0aWVzX3RleHRcIiByb3dzPVwiNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlJvbGVzICYgUmVzcG9uc2liaWxpdGllc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicGxhbkRhdGE/LnJvbGVfcmVzcG9uc2liaWxpdGllcz8uam9pbignXFxuJylcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPkFjdGl2aXRpZXM8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTQgYWRkaXRpb25hbC1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImN1c3RvbS10ZXh0YXJlYVwiIGZvcm1Db250cm9sTmFtZT1cImFjdGl2aXRpZXNfdGV4dFwiIHJvd3M9XCI1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQWN0aXZpdGllc1wiIFt2YWx1ZV09XCJwbGFuRGF0YT8uYWN0aXZpdGllcz8uam9pbignXFxuJylcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBzZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPkNvbXBldGVuY3k8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVuaGFuY2VkLWNvbXBldGVuY3ktc2VjdGlvbiBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU3RlcCAxOiBTZWxlY3QgQ29tcGV0ZW5jeSBUeXBlIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdGVwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdGVwLWxhYmVsXCI+MS4gU2VsZWN0IENvcmUgQ29tcGV0ZW5jeSBUeXBlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWRyb3Bkb3duLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiY29tcGV0ZW5jeS1kcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjb21wZXRlbmN5VHlwZVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IENvbXBldGVuY3kgVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uQ29tcGV0ZW5jeVR5cGVDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJCZWhhdmlvcmFsXCI+QmVoYXZpb3JhbDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiRnVuY3Rpb25hbFwiPkZ1bmN0aW9uYWw8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkRvbWFpblwiPkRvbWFpbjwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTdGVwIDI6IFRoZW1lIFNlbGVjdGlvbiAoQmVoYXZpb3JhbC9GdW5jdGlvbmFsIGZyb20gSlNPTiwgRG9tYWluIG1hbnVhbCkgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN0ZXBcIiAqbmdJZj1cInNlbGVjdGVkQ29tcGV0ZW5jeVR5cGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN0ZXAtbGFiZWxcIj4yLiBTZWxlY3QvRW50ZXIgVGhlbWU8L2xhYmVsPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZvciBCZWhhdmlvcmFsIGFuZCBGdW5jdGlvbmFsOiBTZWFyY2hhYmxlIERyb3Bkb3duIGZyb20gSlNPTiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWRyb3Bkb3duLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnQmVoYXZpb3JhbCcgfHwgc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0Z1bmN0aW9uYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJjb21wZXRlbmN5LWRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImNvbXBldGVuY3lUaGVtZVwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGFuZCBzZWxlY3QgdGhlbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblRoZW1lQ2hhbmdlKCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGlucHV0IGluc2lkZSBkcm9wZG93biAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwic2VhcmNoLW9wdGlvblwiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwic2VhcmNoLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlNlYXJjaCB0aGVtZXMuLi5cIiBmb3JtQ29udHJvbE5hbWU9XCJ0aGVtZVNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiZmlsdGVyVGhlbWVzKCRldmVudC50YXJnZXQ/LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUaGVtZSBvcHRpb25zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHRoZW1lIG9mIGZpbHRlcmVkVGhlbWVzXCIgW3ZhbHVlXT1cInRoZW1lLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RoZW1lLm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE5vIHJlc3VsdHMgbWVzc2FnZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiZmlsdGVyZWRUaGVtZXMubGVuZ3RoID09PSAwICYmIHRoZW1lU2VhcmNoVGV4dFwiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHRoZW1lcyBmb3VuZCBtYXRjaGluZyBcInt7dGhlbWVTZWFyY2hUZXh0fX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZvciBEb21haW46IE1hbnVhbCBpbnB1dCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYW51YWwtaW5wdXQtY29udGFpbmVyXCIgKm5nSWY9XCJzZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnRG9tYWluJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cIm1hbnVhbFRoZW1lSW5wdXRcIiBwbGFjZWhvbGRlcj1cIkVudGVyIFRoZW1lIG1hbnVhbGx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYW51YWwtaW5wdXRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU3RlcCAzOiBTdWItdGhlbWUgU2VsZWN0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdGVwXCIgKm5nSWY9XCJzZWxlY3RlZFRoZW1lIHx8IChzZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnRG9tYWluJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN0ZXAtbGFiZWxcIj4zLiBTZWxlY3QvRW50ZXIgU3ViLXRoZW1lPC9sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGb3IgQmVoYXZpb3JhbCBhbmQgRnVuY3Rpb25hbDogU2VhcmNoYWJsZSBEcm9wZG93biBiYXNlZCBvbiBzZWxlY3RlZCB0aGVtZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWRyb3Bkb3duLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZENvbXBldGVuY3lUeXBlID09PSAnQmVoYXZpb3JhbCcgfHwgc2VsZWN0ZWRDb21wZXRlbmN5VHlwZSA9PT0gJ0Z1bmN0aW9uYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJjb21wZXRlbmN5LWRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICBmb3JtQ29udHJvbE5hbWU9XCJjb21wZXRlbmN5U3ViVGhlbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggYW5kIHNlbGVjdCBzdWItdGhlbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblN1YlRoZW1lQ2hhbmdlKCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGlucHV0IGluc2lkZSBkcm9wZG93biAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwic2VhcmNoLW9wdGlvblwiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwic2VhcmNoLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlNlYXJjaCBzdWItdGhlbWVzLi4uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInN1YlRoZW1lU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJmaWx0ZXJTdWJUaGVtZXMoJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU3ViLXRoZW1lIG9wdGlvbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgc3ViVGhlbWUgb2YgZmlsdGVyZWRTdWJUaGVtZXNcIiBbdmFsdWVdPVwic3ViVGhlbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3N1YlRoZW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBObyByZXN1bHRzIG1lc3NhZ2UgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cImZpbHRlcmVkU3ViVGhlbWVzLmxlbmd0aCA9PT0gMCAmJiBzdWJUaGVtZVNlYXJjaFRleHRcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBzdWItdGhlbWVzIGZvdW5kIG1hdGNoaW5nIFwie3tzdWJUaGVtZVNlYXJjaFRleHR9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRm9yIERvbWFpbjogTWFudWFsIGlucHV0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1hbnVhbC1pbnB1dC1jb250YWluZXJcIiAqbmdJZj1cInNlbGVjdGVkQ29tcGV0ZW5jeVR5cGUgPT09ICdEb21haW4nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwibWFudWFsU3ViVGhlbWVJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgU3ViLXRoZW1lIG1hbnVhbGx5XCIgY2xhc3M9XCJtYW51YWwtaW5wdXRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQWRkIEJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZC1idXR0b24tc2VjdGlvblwiICpuZ0lmPVwic2VsZWN0ZWRDb21wZXRlbmN5VHlwZSBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiIWVkaXREb21haW5Db21wZXRlbmN5RmxhZ1wiIGNsYXNzPVwiYWRkLWNvbXBldGVuY3ktYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbkFkZENvbXBldGVuY3koKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY2FuQWRkQ29tcGV0ZW5jeSgpID8gJ2J0bi1hY3RpdmUnIDogJ2J0bi1kaXNhYmxlJ1wiIChjbGljayk9XCJhZGRDb21wZXRlbmN5KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgQ29tcGV0ZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cImVkaXREb21haW5Db21wZXRlbmN5RmxhZ1wiIGNsYXNzPVwiYWRkLWNvbXBldGVuY3ktYnRuIGJ0bi1hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVDb21wZXRlbmN5KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVcGRhdGUgQ29tcGV0ZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cImVkaXREb21haW5Db21wZXRlbmN5RmxhZ1wiIGNsYXNzPVwiYWRkLWNvbXBldGVuY3ktYnRuIGJ0bi1hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDVweDtcIiAoY2xpY2spPVwiY2FuY2VsVXBkYXRlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWwgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN1Yi1oZWFkaW5nIG10LTJcIiAqbmdJZj1cImdldENvbXBldGVuY2llc0J5VHlwZSgnQmVoYXZpb3JhbCcpPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEJlaGF2aW9yYWwgQ29tcGV0ZW5jaWVzXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWdyaWQgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY3ktaXRlbSBiZWhhdmlvdXJhbC1waWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29tcCBvZiBnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0JlaGF2aW9yYWwnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10ZXh0LWJlaGF2aW9yYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29tcC50aGVtZSB9fSAtIHt7IGNvbXAuc3ViX3RoZW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgY2xvc2VcIiAoY2xpY2spPVwiZGVsZXRlQ29tcGV0ZW5jeShjb21wKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdWItaGVhZGluZyBtdC0yXCIgKm5nSWY9XCJnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0Z1bmN0aW9uYWwnKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbmFsIENvbXBldGVuY2llczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1ncmlkIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWl0ZW0gZnVuY3Rpb25hbC1waWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29tcCBvZiBnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0Z1bmN0aW9uYWwnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29tcGV0ZW5jeS10ZXh0LWZ1bmN0aW9uYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29tcC50aGVtZSB9fSAtIHt7IGNvbXAuc3ViX3RoZW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgY2xvc2VcIiAoY2xpY2spPVwiZGVsZXRlQ29tcGV0ZW5jeShjb21wKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdWItaGVhZGluZyBtdC0yXCI+RG9tYWluIENvbXBldGVuY2llczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1ncmlkIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LWl0ZW0gZG9tYWluLXBpbGxcIiAqbmdGb3I9XCJsZXQgY29tcCBvZiBnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0RvbWFpbicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRleHQtZG9tYWluXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbXAudGhlbWUgfX0gLSB7eyBjb21wLnN1Yl90aGVtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGVkaXRcIiAoY2xpY2spPVwiZWRpdENvbXBldGVuY3koY29tcClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGNsb3NlXCIgKGNsaWNrKT1cImRlbGV0ZUNvbXBldGVuY3koY29tcClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1mb290ZXJcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLWFjdGl2ZVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIkNhbmNlbFwiIChjbGljayk9XCJjYW5jZWxGb3JtKClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImJ0bi1hY3RpdmVcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJTYXZlXCIgKGNsaWNrKT1cInNhdmVSb2xlTWFwcGluZygpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwib3ZlcmxheS1sb2FkZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI1MFwiPjwvbWF0LXNwaW5uZXI+XG48L2Rpdj4iXX0=
|