mmhglobal-dynamicform 2.5.2 → 2.6.1
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/README.md +9 -0
- package/esm2020/lib/components/buttonfieldbase.component.mjs +7 -5
- package/esm2020/lib/components/containerfieldbase.component.mjs +7 -5
- package/esm2020/lib/components/datalistingfieldbase.component.mjs +13 -9
- package/esm2020/lib/components/fieldbase.component.mjs +11 -9
- package/esm2020/lib/components/inputfieldbase.component.mjs +10 -5
- package/esm2020/lib/embed-components/input-field-addons/input-field-addons.component.mjs +8 -4
- package/esm2020/lib/input-error-message/input-error-message.component.mjs +8 -3
- package/esm2020/lib/kcard/kcard.component.mjs +20 -16
- package/esm2020/lib/services/zcomponent.service.mjs +20 -22
- package/esm2020/lib/sfquerybuilder/sfquerybuilder.component.mjs +64 -17
- package/esm2020/lib/uiactionbutton/uiactionbutton.component.mjs +12 -8
- package/esm2020/lib/uiappmenucontent/uiappmenucontent.component.mjs +3 -6
- package/esm2020/lib/uibulletin/uibulletin.component.mjs +1 -1
- package/esm2020/lib/uicontainer/uicontainer.component.mjs +1 -1
- package/esm2020/lib/uicontent/uicontent.component.mjs +1 -5
- package/esm2020/lib/uiheader/uiheader.component.mjs +8 -12
- package/esm2020/lib/uimenubutton/uimenubutton.component.mjs +3 -2
- package/esm2020/lib/uimenucontent/uimenucontent.component.mjs +5 -4
- package/esm2020/lib/uivalidationmessage/uivalidationmessage.component.mjs +5 -4
- package/esm2020/lib/zbullet/zbullet.component.mjs +6 -4
- package/esm2020/lib/zbuttons/zbuttons.component.mjs +14 -10
- package/esm2020/lib/zcard/zcard.component.mjs +9 -6
- package/esm2020/lib/zchart/zchart.component.mjs +10 -6
- package/esm2020/lib/zcheckbox/zcheckbox.component.mjs +14 -4
- package/esm2020/lib/zchip/zchip.component.mjs +16 -8
- package/esm2020/lib/zcodeeditor/zcodeeditor.component.mjs +3 -4
- package/esm2020/lib/zdaterange/zdaterange.component.mjs +3 -1
- package/esm2020/lib/zdatetime/dateParser.pipe.mjs +4 -4
- package/esm2020/lib/zdatetime/zdatetime.component.mjs +7 -4
- package/esm2020/lib/zdiv/zdiv.component.mjs +19 -11
- package/esm2020/lib/zform/zform.component.mjs +4 -4
- package/esm2020/lib/zformcontrol/zformcontrol.component.mjs +4 -4
- package/esm2020/lib/zgauge/zgauge.component.mjs +9 -5
- package/esm2020/lib/zgrid/container/zgrid-container.component.mjs +14 -6
- package/esm2020/lib/zgrid/zgrid.component.mjs +11 -6
- package/esm2020/lib/zimg/zimg.component.mjs +10 -6
- package/esm2020/lib/zinput-container/zinput-container.component.mjs +14 -8
- package/esm2020/lib/zinput-container/zinput-container.pipe.mjs +4 -4
- package/esm2020/lib/zlabel/zlabel.component.mjs +11 -5
- package/esm2020/lib/zmfb/zmfb.component.mjs +10 -6
- package/esm2020/lib/zmodal/zmodal-mobile.component.mjs +1 -1
- package/esm2020/lib/zmodal/zmodal.component.mjs +1 -1
- package/esm2020/lib/znumeric/znumeric.component.mjs +8 -3
- package/esm2020/lib/zpostselectinput/zpostselectinput.component.mjs +20 -16
- package/esm2020/lib/zprogressbar/zprogressbar.component.mjs +10 -8
- package/esm2020/lib/zquerybuilder/zquerybuilder.component.mjs +1 -1
- package/esm2020/lib/zreport/zreport.component.mjs +6 -4
- package/esm2020/lib/zscheduler/zscheduler.component.mjs +8 -4
- package/esm2020/lib/zselectmultiple/zselectmultiple.component.mjs +17 -18
- package/esm2020/lib/ztab/ztab.component.mjs +15 -7
- package/esm2020/lib/ztext/ztext.component.mjs +9 -5
- package/esm2020/lib/ztextarea/ztextarea.component.mjs +10 -7
- package/esm2020/lib/ztexteditor/ztexteditor.component.mjs +11 -7
- package/esm2020/lib/ztree/ztree.component.mjs +8 -12
- package/esm2020/lib/ztreelist/ztreelist.component.mjs +10 -6
- package/esm2020/lib/ztrendcard/ztrendcard.component.mjs +1 -1
- package/esm2020/lib/zudf/zudf.component.mjs +14 -14
- package/esm2020/lib/zupload/zupload.component.mjs +5 -4
- package/esm2020/lib/zworkflowbuttons/zworkflowbuttons.component.mjs +9 -5
- package/fesm2015/mmhglobal-dynamicform.mjs +407 -252
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +405 -249
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
- package/lib/components/buttonfieldbase.component.d.ts +6 -2
- package/lib/components/containerfieldbase.component.d.ts +7 -3
- package/lib/components/datalistingfieldbase.component.d.ts +6 -2
- package/lib/components/fieldbase.component.d.ts +6 -3
- package/lib/components/inputfieldbase.component.d.ts +4 -1
- package/lib/embed-components/input-field-addons/input-field-addons.component.d.ts +6 -2
- package/lib/input-error-message/input-error-message.component.d.ts +6 -3
- package/lib/kcard/kcard.component.d.ts +6 -3
- package/lib/services/zcomponent.service.d.ts +9 -8
- package/lib/sfquerybuilder/sfquerybuilder.component.d.ts +22 -6
- package/lib/uiactionbutton/uiactionbutton.component.d.ts +4 -2
- package/lib/uiappmenucontent/uiappmenucontent.component.d.ts +1 -1
- package/lib/uicontent/uicontent.component.d.ts +1 -1
- package/lib/uiheader/uiheader.component.d.ts +7 -4
- package/lib/uimenucontent/uimenucontent.component.d.ts +3 -0
- package/lib/zbullet/zbullet.component.d.ts +2 -1
- package/lib/zbuttons/zbuttons.component.d.ts +5 -5
- package/lib/zcard/zcard.component.d.ts +3 -2
- package/lib/zchart/zchart.component.d.ts +4 -2
- package/lib/zcheckbox/zcheckbox.component.d.ts +9 -3
- package/lib/zchip/zchip.component.d.ts +6 -2
- package/lib/zcodeeditor/zcodeeditor.component.d.ts +2 -2
- package/lib/zdaterange/zdaterange.component.d.ts +1 -0
- package/lib/zdatetime/dateParser.pipe.d.ts +2 -2
- package/lib/zdatetime/zdatetime.component.d.ts +4 -3
- package/lib/zdiv/zdiv.component.d.ts +8 -2
- package/lib/zform/zform.component.d.ts +1 -1
- package/lib/zformcontrol/zformcontrol.component.d.ts +2 -2
- package/lib/zgauge/zgauge.component.d.ts +4 -2
- package/lib/zgrid/container/zgrid-container.component.d.ts +5 -2
- package/lib/zgrid/zgrid.component.d.ts +6 -4
- package/lib/zimg/zimg.component.d.ts +5 -3
- package/lib/zinput-container/zinput-container.component.d.ts +6 -3
- package/lib/zinput-container/zinput-container.pipe.d.ts +2 -2
- package/lib/zlabel/zlabel.component.d.ts +6 -2
- package/lib/zmfb/zmfb.component.d.ts +4 -2
- package/lib/znumeric/znumeric.component.d.ts +6 -3
- package/lib/zpostselectinput/zpostselectinput.component.d.ts +7 -5
- package/lib/zprogressbar/zprogressbar.component.d.ts +5 -3
- package/lib/zreport/zreport.component.d.ts +5 -2
- package/lib/zscheduler/zscheduler.component.d.ts +3 -1
- package/lib/zselectmultiple/zselectmultiple.component.d.ts +8 -7
- package/lib/ztab/ztab.component.d.ts +6 -2
- package/lib/ztext/ztext.component.d.ts +5 -3
- package/lib/ztextarea/ztextarea.component.d.ts +4 -3
- package/lib/ztexteditor/ztexteditor.component.d.ts +5 -3
- package/lib/ztree/ztree.component.d.ts +4 -3
- package/lib/ztreelist/ztreelist.component.d.ts +5 -3
- package/lib/zudf/zudf.component.d.ts +3 -5
- package/lib/zupload/zupload.component.d.ts +4 -3
- package/lib/zworkflowbuttons/zworkflowbuttons.component.d.ts +5 -3
- package/package.json +1 -1
|
@@ -7,11 +7,13 @@ import { of, Subject, delay } from "rxjs";
|
|
|
7
7
|
import { tap, map, switchMap, concatMap } from "rxjs/operators";
|
|
8
8
|
import { process } from "@progress/kendo-data-query";
|
|
9
9
|
import { TooltipDirective } from '@progress/kendo-angular-tooltip';
|
|
10
|
-
|
|
11
|
-
import {
|
|
10
|
+
/********** Component & Service **********/
|
|
11
|
+
// import { environment } from "src/environments/environment";
|
|
12
12
|
import { DataListingFieldBase } from "../components/datalistingfieldbase.component";
|
|
13
13
|
import { hideAndShowVerticalAnimation } from "../animations/component-animations";
|
|
14
14
|
import { ComponentConstant } from "../constants/constant";
|
|
15
|
+
import { ElementContainerDirective } from "../directives/elementcontainer.directive";
|
|
16
|
+
import { ZGroup, ZComponentHelper } from 'mmhglobal-zcore';
|
|
15
17
|
import * as i0 from "@angular/core";
|
|
16
18
|
import * as i1 from "../services/zcomponent.service";
|
|
17
19
|
import * as i2 from "mmhglobal-zcore";
|
|
@@ -36,8 +38,9 @@ import * as i20 from "./zgrid.binding.directive";
|
|
|
36
38
|
import * as i21 from "@progress/kendo-angular-buttons";
|
|
37
39
|
import * as i22 from "../pipe/htmlSanitize.pipe";
|
|
38
40
|
export class ZgridComponent extends DataListingFieldBase {
|
|
39
|
-
constructor(
|
|
40
|
-
super(
|
|
41
|
+
constructor(componentService, fontAweSomeService, activatedRoute, router, formBuilder, authService, webApiService, zGridStatePersistingService, toastService, zcoreService, storageService, mainService, cdr) {
|
|
42
|
+
super(componentService);
|
|
43
|
+
this.componentService = componentService;
|
|
41
44
|
this.fontAweSomeService = fontAweSomeService;
|
|
42
45
|
this.activatedRoute = activatedRoute;
|
|
43
46
|
this.router = router;
|
|
@@ -54,7 +57,6 @@ export class ZgridComponent extends DataListingFieldBase {
|
|
|
54
57
|
this.zgrid = null;
|
|
55
58
|
this.oauthUrl = null;
|
|
56
59
|
this.mySelection = [];
|
|
57
|
-
// inlineEditedFormGroups: FormGroup;
|
|
58
60
|
this.inlineEditedFormGroups = {};
|
|
59
61
|
this.pageable = false;
|
|
60
62
|
this.filterGroup = new ZGroup();
|
|
@@ -137,6 +139,9 @@ export class ZgridComponent extends DataListingFieldBase {
|
|
|
137
139
|
this.gridCallback(this.group);
|
|
138
140
|
})).subscribe();
|
|
139
141
|
}
|
|
142
|
+
ngAfterViewInit() {
|
|
143
|
+
this.componentService.decrementComponentCounterForField(this.data);
|
|
144
|
+
}
|
|
140
145
|
ngAfterViewChecked() {
|
|
141
146
|
const isBackNavigated = (sessionStorage.getItem("navigatedReloadGrid") === 'true');
|
|
142
147
|
if (isBackNavigated) {
|
|
@@ -1139,4 +1144,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
1139
1144
|
type: ViewChild,
|
|
1140
1145
|
args: [ElementContainerDirective, { static: true }]
|
|
1141
1146
|
}] } });
|
|
1142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBNEUsTUFBTSxlQUFlLENBQUM7QUFDbEosT0FBTyxFQUFFLFNBQVMsRUFBZSxVQUFVLEVBQUUsV0FBVyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFHOUYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdoRSxPQUFPLEVBQXlCLE9BQU8sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBZW5FLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3JGLE9BQU8sRUFFRyxNQUFNLEVBQWMsZ0JBQWdCLEVBRTdDLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDcEYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCMUQs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QUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUMzQztJQUNILENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxLQUFhO1FBQ2hELFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRTtZQUNsQixLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLE9BQU8sQ0FBQztZQUNiLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssS0FBSyxDQUFDO1lBQ1gsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssVUFBVTtnQkFDYixJQUFJLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLEVBQUU7b0JBQ3RDLE9BQU8sVUFBVSxDQUFDO2lCQUNuQjtnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNkO2dCQUNFLE9BQU8sR0FBRyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBQ0QsWUFBWTtJQUVaLHNDQUFzQztJQUN0QyxJQUFXLFlBQVksQ0FBQyxRQUFnQjtRQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztJQUM1QixDQUFDOzsyR0E3eENVLGNBQWM7K0ZBQWQsY0FBYyw2RkFDZCxnQkFBZ0IsbUZBQ2hCLHlCQUF5QixxRkNuRXRDLGkrMEJBMllBLDR6cUJEOVVjO1FBQ1YsNEJBQTRCO0tBQzdCOzJGQUVVLGNBQWM7a0JBUjFCLFNBQVM7K0JBQ0UsV0FBVyxjQUdUO3dCQUNWLDRCQUE0QjtxQkFDN0I7eWNBR21DLFVBQVU7c0JBQTdDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUM2QixnQkFBZ0I7c0JBQXZFLFNBQVM7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBBZnRlclZpZXdJbml0LCBBZnRlclZpZXdDaGVja2VkLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZGVsYXkgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyB0YXAsIG1hcCwgc3dpdGNoTWFwLCBjb25jYXRNYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgRXhjZWxFeHBvcnREYXRhIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZXhjZWwtZXhwb3J0JztcclxuaW1wb3J0IHsgR3JpZEl0ZW0sIFNlbGVjdGFibGVTZXR0aW5ncyB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWdyaWQnO1xyXG5pbXBvcnQgeyBTb3J0RGVzY3JpcHRvciwgU3RhdGUsIHByb2Nlc3MgfSBmcm9tIFwiQHByb2dyZXNzL2tlbmRvLWRhdGEtcXVlcnlcIjtcclxuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLXRvb2x0aXAnO1xyXG5pbXBvcnQge1xyXG4gIEdyaWREYXRhUmVzdWx0LFxyXG4gIERhdGFTdGF0ZUNoYW5nZUV2ZW50LFxyXG4gIFBhZ2VDaGFuZ2VFdmVudCxcclxuICBDZWxsQ2xpY2tFdmVudCxcclxuICBHcmlkQ29tcG9uZW50LFxyXG4gIFJvd0FyZ3MsXHJcbiAgQ29sdW1uUmVvcmRlckV2ZW50XHJcbn0gZnJvbSBcIkBwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWdyaWRcIjtcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuLy8gaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tIFwic3JjL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudFwiO1xyXG5pbXBvcnQgeyBNYWluU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9tYWluLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgWkdyaWRCaW5kaW5nRGlyZWN0aXZlIH0gZnJvbSBcIi4vemdyaWQuYmluZGluZy5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgRWxlbWVudENvbnRhaW5lckRpcmVjdGl2ZSB9IGZyb20gXCIuLi9kaXJlY3RpdmVzL2VsZW1lbnRjb250YWluZXIuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7XHJcbiAgQXV0aFNlcnZpY2UsIFdlYkFwaVNlcnZpY2UsIFRvYXN0U2VydmljZSwgR3JpZENhY2hpbmcsXHJcbiAgWkZpZWxkLCBaR3JvdXAsIFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCwgWkNvcmVTZXJ2aWNlLFxyXG4gIFpHcmlkU3RhdGVQZXJzaXN0aW5nU2VydmljZSwgWkdyaWRQb3N0QXBpUGFyYW1zLCBaR3JpZFNldHRpbmdzLCBaR3JpZENvbHVtblNldHRpbmdzLCBaR3JpZEN1c3RvbUNvbHVtbiwgU3RvcmFnZVNlc3Npb25TZXJ2aWNlLCBGb250QXdlU29tZVNlcnZpY2VcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRGF0YUxpc3RpbmdGaWVsZEJhc2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kYXRhbGlzdGluZ2ZpZWxkYmFzZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgaGlkZUFuZFNob3dWZXJ0aWNhbEFuaW1hdGlvbiB9IGZyb20gXCIuLi9hbmltYXRpb25zL2NvbXBvbmVudC1hbmltYXRpb25zXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbnN0YW50IH0gZnJvbSBcIi4uL2NvbnN0YW50cy9jb25zdGFudFwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBaR3JpZCB7XHJcbiAgcGFyYW1zOiBaR3JpZFBvc3RBcGlQYXJhbXM7XHJcbiAgc3RhdGU6IFN0YXRlO1xyXG4gIGNvbHVtbnM6IGFueVtdO1xyXG4gIHBhZ2luYXRpb25BcGlQb3N0VXJsOiBzdHJpbmc7XHJcbiAgZGF0YTogWkZpZWxkO1xyXG4gIGdyb3VwOiBaR3JvdXA7XHJcbiAgemdyaWQ6IFpHcmlkQmluZGluZ0RpcmVjdGl2ZTtcclxuICBpbmxpbmVFZGl0ZWRGb3JtR3JvdXBzOiBGb3JtR3JvdXA7XHJcbiAgZ2V0R3JpZERhdGE6ICgpID0+IGFueVtdO1xyXG4gIGdldERhdGE6ICgpID0+IHZvaWQ7XHJcbiAgY2xlYXJEYXRhOiAoKSA9PiB2b2lkO1xyXG4gIHNldERhdGE6IChkYXRhOiBhbnkpID0+IHZvaWQ7XHJcbiAgc2V0Q29sdW1uczogKGNvbHVtbkZpZWxkc05hbWU6IHN0cmluZywgY29sdW1uczogQXJyYXk8WkdyaWRDdXN0b21Db2x1bW4+KSA9PiB2b2lkO1xyXG4gICRzZXRDb2x1bW5zOiAoY29sdW1uRmllbGRzTmFtZTogc3RyaW5nLCBjb2x1bW5zOiBBcnJheTxaR3JpZEN1c3RvbUNvbHVtbj4pID0+IE9ic2VydmFibGU8YW55PjtcclxuICBnZXRGb3JtQ29udHJvbERhdGEoKTogYW55W107XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImFwcC16Z3JpZFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vemdyaWQuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vemdyaWQuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgaGlkZUFuZFNob3dWZXJ0aWNhbEFuaW1hdGlvblxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFpncmlkQ29tcG9uZW50IGV4dGVuZHMgRGF0YUxpc3RpbmdGaWVsZEJhc2UgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZChUb29sdGlwRGlyZWN0aXZlKSBwdWJsaWMgdG9vbHRpcERpcjogVG9vbHRpcERpcmVjdGl2ZTtcclxuICBAVmlld0NoaWxkKEVsZW1lbnRDb250YWluZXJEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGVsZW1lbnRDb250YWluZXIhOiBFbGVtZW50Q29udGFpbmVyRGlyZWN0aXZlO1xyXG4gIC8vIEBWaWV3Q2hpbGQoWkdyaWRCaW5kaW5nRGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UgfSkgemdyaWQ6IFpHcmlkQmluZGluZ0RpcmVjdGl2ZTtcclxuICB6Z3JpZDogYW55ID0gbnVsbDtcclxuICBvYXV0aFVybDogc3RyaW5nID0gbnVsbDtcclxuICBncmlkRGF0YTogR3JpZERhdGFSZXN1bHQ7XHJcbiAgc2VsZWN0YWJsZVNldHRpbmdzOiBTZWxlY3RhYmxlU2V0dGluZ3M7XHJcbiAgbXlTZWxlY3Rpb246IGFueVtdID0gW107XHJcbiAgLy8gaW5saW5lRWRpdGVkRm9ybUdyb3VwczogRm9ybUdyb3VwO1xyXG4gIGlubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB7fTtcclxuICBwcml2YXRlIHRlbXBJbmxpbmVFZGl0ZWRGb3JtR3JvdXBzO1xyXG4gIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDsgLy8gZm9yIGtlbmRvIGdyaWQgYnVpbHQtaW5cclxuICBwdWJsaWMgcHJldmlvdXNOZXh0OiBib29sZWFuO1xyXG5cclxuICBwdWJsaWMgZ3JpZEJ0bjtcclxuICBwdWJsaWMgcGFnZWFibGU6IGFueSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBmaWx0ZXJHcm91cCA9IG5ldyBaR3JvdXAoKTtcclxuICBwdWJsaWMgYWR2ZmlsdGVyR3JvdXAgPSBuZXcgWkdyb3VwKCk7XHJcbiAgcHVibGljIGlzU2hvd0FkdkZpbHRlciA9IGZhbHNlO1xyXG4gIHB1YmxpYyBncmlkVGl0bGU6IGFueTtcclxuICBwdWJsaWMgaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIGlzQ29sdW1uSGVhZGVyVHJhbnNsYXRlZCA9IGZhbHNlO1xyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uLCBuby11bmRlcnNjb3JlLWRhbmdsZSwgaWQtYmxhY2tsaXN0LCBpZC1tYXRjaFxyXG4gIF9zdGF0ZTogU3RhdGUgPSB7XHJcbiAgICBza2lwOiAwLFxyXG4gICAgdGFrZTogMTBcclxuICB9O1xyXG5cclxuICBwYXJhbXM6IFpHcmlkUG9zdEFwaVBhcmFtcyA9IHtcclxuICAgIHJlZmVySWQ6IG51bGwsXHJcbiAgICBwYWdlTm86IDAsXHJcbiAgICBwYWdlU2l6ZTogMjAsXHJcbiAgICBzb3J0Q29sdW1uTmFtZTogXCJcIixcclxuICAgIHNvcnRPcmRlcjogXCJcIixcclxuICAgIHNvcnRDb2x1bW5OYW1lczogW10sXHJcbiAgICBzb3J0T3JkZXJzOiBbXSxcclxuICAgIGZpbHRlclBhcmFtczogW10sXHJcbiAgICBwYXJhbWV0ZXJzOiBcIlwiLFxyXG4gICAgZmlsdGVyczogXCJcIixcclxuICAgIGNvbHVtbnM6IFwiXCIsXHJcbiAgICBncmFudFR5cGU6IDRcclxuICB9O1xyXG5cclxuICBncmlkU3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICBjb2x1bW5zOiBhbnlbXTtcclxuICB1c2FibGVDb2x1bW5zOiBhbnlbXTtcclxuICBlZGl0YWJsZUNvbHVtbnM6IGFueVtdO1xyXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHBhZ2VTaXplczogYm9vbGVhbiB8IGFueVtdO1xyXG4gIGdyaWRTdG9yYWdlS2V5OiBzdHJpbmc7XHJcbiAgZ3JpZERlZmF1bHRTdGF0ZUV4aXN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNOZXc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgZWRpdGVkUm93SW5kZXg6IG51bWJlcjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBjb21wU2VydmljZTogWkNvbXBvbmVudFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZm9udEF3ZVNvbWVTZXJ2aWNlOiBGb250QXdlU29tZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3ZWJBcGlTZXJ2aWNlOiBXZWJBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB6R3JpZFN0YXRlUGVyc2lzdGluZ1NlcnZpY2U6IFpHcmlkU3RhdGVQZXJzaXN0aW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHpjb3JlU2VydmljZTogWkNvcmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtYWluU2VydmljZTogTWFpblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHN1cGVyKGNvbXBTZXJ2aWNlKTtcclxuICAgIHRoaXMub2F1dGhVcmwgPSB0aGlzLnpjb3JlU2VydmljZS5nZXRFbnZpcm9ubWVudCgpLmUxT2F1dGhVcmwgKyBcIi9cIjtcclxuICAgIHRoaXMuYWxsUmVzdWx0cyA9IHRoaXMuYWxsUmVzdWx0cy5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5yZWZyZXNoRGF0YSA9IHRoaXMucmVmcmVzaERhdGEuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuY2xlYXJEYXRhID0gdGhpcy5jbGVhckRhdGEuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuc2F2ZUdyaWRTZXR0aW5ncyA9IHRoaXMuc2F2ZUdyaWRTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5yZXN0b3JlR3JpZFNldHRpbmdzID0gdGhpcy5yZXN0b3JlR3JpZFNldHRpbmdzLmJpbmQodGhpcyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIEdyaWQgc2F2ZWQgc2V0dGluZyBrZXkoVXNlZCBpbiBDb29raWVTdG9yZSAmIExvY2FsU3RvcmFnZSlcclxuICAgIC8vIHRoaXMuYXV0aFNlcnZpY2UudXNlcklzQXV0aGVudGljYXRlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgLy8gICB0aGlzLmdyaWRTdG9yYWdlS2V5ID0gJ2lvbmljLWZpZWxkOjonICsgdGhpcy5hdXRoU2VydmljZS5lMVRva2VuLnVzZXJOYW1lICsgJzo6JyArIHRoaXMuZGF0YS5OYW1lICsgJzo6JyArIHRoaXMucm91dGVyLnVybDtcclxuICAgIC8vIH0pO1xyXG4gICAgLy8gY29uY2F0TWFwKCgpID0+IHtcclxuICAgIC8vICAgLy8gdHJ5IGdldCBncmlkc2V0dGluZyBmcm9tIGNvb2tpZXN0b3JlXHJcbiAgICAvLyAgIHJldHVybiB0aGlzLm1haW5TZXJ2aWNlLmNvb2tpZVN0b3JlR2V0KHRoaXMuZ3JpZFN0b3JhZ2VLZXksIHRoaXMuYXV0aFNlcnZpY2UuZTFUb2tlbi5hY2Nlc3NfdG9rZW4pO1xyXG4gICAgLy8gfSksXHJcbiAgICAvLyBzd2l0Y2hNYXAoc2F2ZWRHcmlkQ2FjaGUgPT4ge1xyXG4gICAgLy8gICBpZiAoc2F2ZWRHcmlkQ2FjaGUpIHtcclxuICAgIC8vICAgICAvLyBLZWVwIHRoZSBncmlkU2V0dGluZyBmcm9tIGNvb2tpZXN0b3JlIHRvIGxvY2FsU3RvcmFnZVxyXG4gICAgLy8gICAgIHRoaXMuekdyaWRTdGF0ZVBlcnNpc3RpbmdTZXJ2aWNlLnNldCh0aGlzLmdyaWRTdG9yYWdlS2V5LCBzYXZlZEdyaWRDYWNoZSk7XHJcbiAgICAvLyAgICAgcmV0dXJuIG9mKHRydWUpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAvLyB9KSxcclxuICAgIHN1cGVyLnNldHVwSW5uZXJGaWVsZCgpO1xyXG4gICAgdGhpcy5zZXR1cEZpbHRlckZlYXR1cmUoKTtcclxuICAgIHRoaXMuc2V0dXBHcmlkQnV0dG9ucygpO1xyXG4gICAgdGhpcy5zZXR1cEdyaWRDb21wb25lbnRBdHRyaWJ1dGVzKCk7XHJcbiAgICB0aGlzLnNldHVwU3Vic2NyaXB0aW9uRm9yR3JpZFN1YmplY3QoKTtcclxuICAgIHRoaXMuc2V0dXBHcmlkU3RhdGUoKTtcclxuXHJcbiAgICBzdXBlci50cmFuc2xhdGVUb29sQmFySXRlbXMoKS5waXBlKHRhcCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZ3JpZENhbGxiYWNrKHRoaXMuZ3JvdXApO1xyXG4gICAgfSkpLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgY29uc3QgaXNCYWNrTmF2aWdhdGVkID0gKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJuYXZpZ2F0ZWRSZWxvYWRHcmlkXCIpID09PSAndHJ1ZScpO1xyXG5cclxuICAgIGlmIChpc0JhY2tOYXZpZ2F0ZWQpIHtcclxuICAgICAgaWYgKCF0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KFwibmF2aWdhdGVkUmVsb2FkR3JpZFwiLCBKU09OLnN0cmluZ2lmeShmYWxzZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBHcmlkIFN0YXRlIChwYWdpbmF0aW9uLCBzb3J0YWJsZSwgZmlsdGVyLCBvcmRlcmluZylcclxuICBnZXQgc3RhdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgc3RhdGUoc3RhdGUpIHtcclxuICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRlRXhpc3QoKSB7XHJcbiAgICBjb25zdCB1c2VyR3JpZFN0YXRlID0gdGhpcy56R3JpZFN0YXRlUGVyc2lzdGluZ1NlcnZpY2UuZ2V0KHRoaXMuZ3JpZFN0b3JhZ2VLZXkpO1xyXG5cclxuICAgIGlmICh1c2VyR3JpZFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuZ3JpZERlZmF1bHRTdGF0ZUV4aXN0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmdyaWREZWZhdWx0U3RhdGVFeGlzdCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRhdGFTdGF0ZUNoYW5nZShzdGF0ZTogRGF0YVN0YXRlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgIHRoaXMuemdyaWQuZGF0YVN0YXRlQ2hhbmdlKHN0YXRlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXJhYmxlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc29ydGFibGUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2NrZWQoY29sU2V0dGluZzogYW55KSB7XHJcbiAgICBpZiAoY29sU2V0dGluZ1sncGlubmVkTGVmdCddID09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gR3JpZCBDb2x1bW5zXHJcbiAgcHVibGljIGlzU2VsZWN0T3B0aW9uKCkge1xyXG4gICAgbGV0IHNlbGVjdE9wdGlvbkV4aXN0ID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5zZWxlY3RhYmxlU2V0dGluZ3MgPSB7XHJcbiAgICAgICAgY2hlY2tib3hPbmx5OiBmYWxzZSxcclxuICAgICAgICBtb2RlOiAodGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMgPT0gXCJtdWx0aXBsZVwiKSA/IFwibXVsdGlwbGVcIiA6IFwic2luZ2xlXCJcclxuICAgICAgfTtcclxuICAgICAgc2VsZWN0T3B0aW9uRXhpc3QgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlbGVjdE9wdGlvbkV4aXN0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENvbHVtbnMoY29sdW1uTmFtZTogc3RyaW5nLCBjb2x1bW5zOiBBcnJheTxaR3JpZEN1c3RvbUNvbHVtbj4pIHtcclxuICAgIHRoaXMuZ3JvdXBbY29sdW1uTmFtZV0gPSB0aGlzLndyYXBDb2x1bW5OYW1lc0luRmllbGRFbGVtZW50KGNvbHVtbnMpO1xyXG4gICAgdGhpcy5nZW5lcmF0ZUdyaWRDb2x1bW5zKCkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgJHNldENvbHVtbnMoY29sdW1uTmFtZTogc3RyaW5nLCBjb2x1bW5zOiBBcnJheTxaR3JpZEN1c3RvbUNvbHVtbj4pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgdGhpcy5ncm91cFtjb2x1bW5OYW1lXSA9IHRoaXMud3JhcENvbHVtbk5hbWVzSW5GaWVsZEVsZW1lbnQoY29sdW1ucyk7XHJcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUdyaWRDb2x1bW5zKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdyYXBDb2x1bW5OYW1lc0luRmllbGRFbGVtZW50KGNvbHVtbkxpc3Q6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPikge1xyXG4gICAgcmV0dXJuIG9mKGNvbHVtbkxpc3QubWFwKGMgPT4ge1xyXG4gICAgICBjb25zdCBpc0hpZGRlbjogYm9vbGVhbiA9IGMuSGlkZGVuO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIE5hbWU6IGMuTmFtZSxcclxuICAgICAgICBWYWx1ZTogYy5Db2RlLFxyXG4gICAgICAgIFR5cGU6IGMuVHlwZSxcclxuICAgICAgICBncmlkQ29sVmlzaWJsZTogIWlzSGlkZGVuLFxyXG4gICAgICAgIEVuYWJsZUdyaWRWYWx1ZTogYy5FbmFibGVHcmlkVmFsdWUgfHwgZmFsc2UsXHJcbiAgICAgICAgd2lkdGg6IDEwMCArIGMuTmFtZS5sZW5ndGggKiA0LFxyXG4gICAgICAgIGVuYWJsZUZpbHRlcmluZzogZmFsc2UsXHJcbiAgICAgICAgZW5hYmxlU29ydGluZzogdHJ1ZSxcclxuICAgICAgICBlbmFibGVQaW5uaW5nOiB0cnVlLFxyXG4gICAgICAgIERpdkNsYXNzOiBcImNvbC14cy0xMiBjb2wtc20tNlwiLFxyXG4gICAgICAgIElzRWRpdGFibGVJbkdyaWQ6IGMuRWRpdGFibGVcclxuICAgICAgfTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVHcmlkQ29sdW1ucygpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgZ3JpZFNldHRpbmcgPSB0aGlzLmdldEdyaWRTZXR0aW5ncygpO1xyXG5cclxuICAgIGNvbnN0IGNvbHVtbkZpZWxkcyQ6IE9ic2VydmFibGU8YW55PiA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShcclxuICAgICAgdGhpcy5kYXRhLkNvbHVtbkZpZWxkcyxcclxuICAgICAgdGhpcy5ncm91cFxyXG4gICAgKSB8fCBvZihbXSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmRhdGEuQ29sdW1uRmllbGRzKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignSW52YWxpZC9FbXB0eSBncmlkKCcgKyB0aGlzLmRhdGEuTmFtZSArICcpIGNvbHVtbkZpZWxkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjb2x1bW5GaWVsZHMkKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdGYWlsIHRvIGdlbmVyYXRlIGdyaWQgY29sdW1uIGZpZWxkcy4nKTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5kYXRhLkNvbHVtbkZpZWxkcyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb2x1bW5GaWVsZHMkLnBpcGUoXHJcbiAgICAgIHRhcChkYXRhID0+IHtcclxuICAgICAgICBpZiAoIWRhdGEpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZC9FbXB0eSBncmlkKCcgKyB0aGlzLmRhdGEuTmFtZSArICcpIGRhdGEgdG8gZ2VuZXJhdGUgY29sdW1uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgZmllbGROYW1lID0gdGhpcy5kYXRhWydGaWVsZEVsZW1lbnROYW1lJ107XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgICAgIGNvbnN0IHVzYWJsZUNvbHVtbk5hbWVzID0gW107XHJcbiAgICAgICAgICBaQ29tcG9uZW50SGVscGVyLmdldEdyaWRDb2x1bW5zKGRhdGEsXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucyxcclxuICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgZ3JpZFNldHRpbmcsXHJcbiAgICAgICAgICAgIHVzYWJsZUNvbHVtbk5hbWVzLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGEpO1xyXG5cclxuICAgICAgICAgIGlmICh1c2FibGVDb2x1bW5OYW1lcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNhYmxlQ29sdW1ucyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCB1c2FibGVDb2xGaWVsZHMgPSB1c2FibGVDb2x1bW5OYW1lcy5tYXAodSA9PiAoeyBmaWVsZDogdSwgVmlzaWJsZTogdHJ1ZSwgSXNSZXF1aXJlZDogZmFsc2UsIFZhbHVlOiB1IH0pKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiB1c2FibGVDb2xGaWVsZHMpIHtcclxuICAgICAgICAgICAgICB0aGlzLnVzYWJsZUNvbHVtbnMucHVzaChmaWVsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBzdXBlci50cmFuc2xhdGVDb2x1bW5IZWFkZXIodGhpcy5jb2x1bW5zKTtcclxuICAgICAgfSksXHJcbiAgICAgIC8vc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgLy8gIC8vR2V0IFNlc3Npb25cclxuICAgICAgLy8gIHJldHVybiB0aGlzLmdldEdyaWRTZXNzaW9uRmlsdGVyKHRoaXMuZ3JwLCB0aGlzKTtcclxuICAgICAgLy99KSxcclxuICAgICAgLy9zd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAvLyAgLy9CZWZvcmUgZ2V0IGdyaWQgZGF0YVxyXG4gICAgICAvLyAgcmV0dXJuIHRoaXMuYmVmb3JlR3JpZEdldERhdGEodGhpcy5ncnAsIHRoaXMpO1xyXG4gICAgICAvL30pLFxyXG4gICAgICAvL3N3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgIC8vICAvL1NldCBncmlkIGRhdGFcclxuICAgICAgLy8gIHJldHVybiB0aGlzLnNldEdyaWRTZXNzaW9uRmlsdGVyKHRoaXMuZ3JwLCB0aGlzKTtcclxuICAgICAgLy99KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldEljb25OYW1lKGdyaWRDZWxsUmVwbGFjZVZhbHVlOiBhbnksIHZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChncmlkQ2VsbFJlcGxhY2VWYWx1ZSAmJiBncmlkQ2VsbFJlcGxhY2VWYWx1ZVt2YWx1ZV0pIHtcclxuICAgICAgcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuZ2V0Rm9udEF3ZXNvbWUoZ3JpZENlbGxSZXBsYWNlVmFsdWVbdmFsdWVdLCB0aGlzLmZvbnRBd2VTb21lU2VydmljZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGdyaWQgc3R5bGluZ1xyXG4gIHB1YmxpYyBjZWxsU3R5bGVDb25kaXRpb24oY29sLCBjb2xWYWx1ZTogYW55KSB7XHJcbiAgICBpZiAoY29sWydDZWxsU3R5bGVDb25kaXRpb24nXSkge1xyXG4gICAgICBjb25zdCBjb25kaXRpb25IaWdobGlnaHRjb2w6IFtdID0gY29sWydDZWxsU3R5bGVDb25kaXRpb24nXTtcclxuICAgICAgbGV0IGNvbmRpdGlvblJlc3VsdCA9IGZhbHNlO1xyXG5cclxuICAgICAgY29uZGl0aW9uSGlnaGxpZ2h0Y29sLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgaWYgKCFjb25kaXRpb25SZXN1bHQpIHtcclxuICAgICAgICAgIGlmIChkYXRhWydWYWx1ZSddID09IGNvbFZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBjb25kaXRpb25SZXN1bHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q2VsbFN0eWxlQ29uZGl0aW9uKGNvbCwgY29sVmFsdWU6IGFueSkge1xyXG4gICAgaWYgKGNvbFsnQ2VsbFN0eWxlQ29uZGl0aW9uJ10pIHtcclxuICAgICAgY29uc3QgY29uZGl0aW9uSGlnaGxpZ2h0Y29sOiBbXSA9IGNvbFsnQ2VsbFN0eWxlQ29uZGl0aW9uJ107XHJcbiAgICAgIGxldCBjb25kaXRpb25SZXN1bHQgPSAnJztcclxuXHJcbiAgICAgIGNvbmRpdGlvbkhpZ2hsaWdodGNvbC5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhWydWYWx1ZSddID09IGNvbFZhbHVlKSB7XHJcbiAgICAgICAgICBpZiAoZGF0YVsnQmFja2dyb3VuZENvbG9yJ10pIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ID0gJ2JhY2tncm91bmQtY29sb3I6JyArIGRhdGFbJ0JhY2tncm91bmRDb2xvciddICsgJzsnO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChkYXRhWydDb2xvciddKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCArPSAnY29sb3I6JyArIGRhdGFbJ0NvbG9yJ10gKyAnOyc7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGRhdGFbJ1N0eWxlRXhwcmVzc2lvbiddKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCArPSBkYXRhWydTdHlsZUV4cHJlc3Npb24nXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGNvbmRpdGlvblJlc3VsdDtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBPbmNlbGwgY2xpY2sgaGFuZGxpbmdcclxuICAvLyAxLiBpbkNlbGwgRWRpdFxyXG4gIC8vIDIuIE9uSXRlbUNsaWNrXHJcbiAgLy8gMy4gTmF2aWdhdGUgdG8gRm9ybSBQYWdlXHJcbiAgLy8gNC4gU2hvdyBGb3JtIFBhZ2UgaW4gdGhlIHNhbWUgcGFnZSAoREVDIGFuZCBEcmF3ZXIpXHJcbiAgcHVibGljIGNlbGxDbGlja0hhbmRsZXIoZXZlbnQ6IENlbGxDbGlja0V2ZW50KSB7XHJcbiAgICBjb25zdCBkaXNhYmxlQWxsQ29sdW1uQ2VsbENsaWNrSGFuZGxlciA9IHRoaXMuZGF0YS5EaXNhYmxlQ2VsbENsaWNrSGFuZGxlciA/IHRoaXMuZGF0YS5EaXNhYmxlQ2VsbENsaWNrSGFuZGxlciA6IGZhbHNlO1xyXG4gICAgY29uc3QgaXNDb21tYW5kQ29sdW1uID0gZXZlbnQuY29sdW1uLmNvbnN0cnVjdG9yLm5hbWUgPT0gJ0NvbW1hbmRDb2x1bW5Db21wb25lbnQnID8gdHJ1ZSA6IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLnRvb2x0aXBEaXIpIHtcclxuICAgICAgdGhpcy50b29sdGlwRGlyLmhpZGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWRpc2FibGVBbGxDb2x1bW5DZWxsQ2xpY2tIYW5kbGVyICYmICFpc0NvbW1hbmRDb2x1bW4pIHtcclxuICAgICAgY29uc3QgaW5DZWxsRWRpdGFibGUgPSB0aGlzLmRhdGEuSW5DZWxsRWRpdGFibGUgPyB0aGlzLmRhdGEuSW5DZWxsRWRpdGFibGUgOiBmYWxzZTtcclxuICAgICAgaWYgKGluQ2VsbEVkaXRhYmxlKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKHMgPT4gcy5pc0VkaXRhYmxlSW5EYXRhSXRlbSA9PT0gdHJ1ZSk7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5lZGl0YWJsZUNvbHVtbnMpIHtcclxuICAgICAgICAgIHRoaXMuZWRpdGFibGVDb2x1bW5zLm1hcChzID0+IGV2ZW50LnNlbmRlci5lZGl0Q2VsbChldmVudC5yb3dJbmRleCwgZXZlbnQuY29sdW1uSW5kZXgsIHRoaXMuY3JlYXRlRm9ybUdyb3VwKGV2ZW50LmRhdGFJdGVtLCBzLmZpZWxkKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImNlbGxDbGljayBldmVudDogXCIsIGV2ZW50KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5Pbkl0ZW1DbGljaykge1xyXG4gICAgICAgICAgY29uc3QgZnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuT25JdGVtQ2xpY2spO1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgICAgICAgY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIC8vIHN0b3JlIGNsaWNrZWQgaWQgYW5kIGFjdGlvbiBhcyBlZGl0IHRvIHRoZSBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICAgIC8vIE9uSXRlbUNsaWNrLCBwcm9qZWN0IGhhdmUgdG8gc2V0IHRoZW1zZWxmLlxyXG4gICAgICAgICAgdGhpcy5tYWluU2VydmljZS5zZXROYXZpZ2F0aW9uUGFyYW1zKFtldmVudC5kYXRhSXRlbS5JZCwgJ2VkaXQnXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmVkaXRNb2RlbChldmVudC5kYXRhSXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0Q2VsbENsb3NlSGFuZGxlcihhcmdzOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgZm9ybUdyb3VwLCBkYXRhSXRlbSB9ID0gYXJncztcclxuICAgIGlmICghZm9ybUdyb3VwLnZhbGlkKSB7XHJcbiAgICAgIGFyZ3MucHJldmVudERlZmF1bHQoKTtcclxuICAgIH0gZWxzZSBpZiAoZm9ybUdyb3VwLmRpcnR5KSB7XHJcbiAgICAgIHRoaXMuZWRpdGFibGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihzID0+IHMuaXNFZGl0YWJsZUluRGF0YUl0ZW0gPT09IHRydWUpO1xyXG4gICAgICB0aGlzLmVkaXRhYmxlQ29sdW1ucy5tYXAocyA9PlxyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YUl0ZW0sIHsgW3MuZmllbGRdOiBmb3JtR3JvdXAudmFsdWVbcy5maWVsZF0gfSkpO1xyXG4gICAgICB0aGlzLm15U2VsZWN0aW9uLm1hcChzID0+IChzLklkID09PSBkYXRhSXRlbS5JZCkgPyBPYmplY3QuYXNzaWduKHMsIGRhdGFJdGVtKSA6IG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uTmF2aWdhdGVUbyhldmVudDogYW55LCBjbGlja0FjdGlvbjogYW55LCByb3dEYXRhOiBhbnksIGNlbGxEYXRhOiBzdHJpbmcpIHtcclxuICAgIC8vIGNvbnN0IG4gPSBjb2xTZXR0aW5nLm5hdmlnYXRlVG8ucmVwbGFjZSgnLzppZCcsIGNlbGxEYXRhKTtcclxuICAgIGNvbnN0IG4gPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgY2xpY2tBY3Rpb24uQ2xpY2spO1xyXG4gICAgaWYgKG4pIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiAnemdyaWQtb25OYXZpZ2F0ZVRvJyxcclxuICAgICAgICB0YXJnZXQ6IGNsaWNrQWN0aW9uLkNsaWNrLFxyXG4gICAgICAgIHJvd0RhdGE6IHJvd0RhdGEsXHJcbiAgICAgICAgZGF0YTogY2VsbERhdGFcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlZGl0TW9kZWwoZGF0YUl0ZW06IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5FZGl0Q2xpY2tVUkwpIHtcclxuICAgICAgLy8gRWRpdCBpbmNlbGwgZmllbGRcclxuICAgICAgY29uc3QgY29sRmllbGRzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5Db2x1bW5GaWVsZHMsIHRoaXMuZ3JvdXApO1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogXCJ6Z3JpZC1jZWxsQ2xpY2tcIixcclxuICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YS5FZGl0Q2xpY2tVUkwsXHJcbiAgICAgICAgZGF0YTogZGF0YUl0ZW0sXHJcbiAgICAgICAgY29sdW1uRmllbGRzJDogY29sRmllbGRzXHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuZGF0YVsnQ29udGFpbmVyRm9ybSddKSB7XHJcbiAgICAgIHRoaXMuc2hvd0Zvcm1QYWdlLmVtaXQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZ3JvdXAuZWRpdE1vZGVsVVJMXSwge1xyXG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgLy9za2lwTG9jYXRpb25DaGFuZ2U6IGZhbHNlXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8vLyBXaGVuIGNsaWNrZWQgcm91dGUgdG8gcGFnZVxyXG4gICAgICAvL3RoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmdyb3VwLmVkaXRNb2RlbFVSTCwgZGF0YUl0ZW0uSWQsICdlZGl0J10sIHtcclxuICAgICAgLy8gIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGVcclxuICAgICAgLy99KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkJ0bkNsaWNrKGV2ZW50OiBhbnksIGNvbFNldHRpbmc6IGFueSwgcm93RGF0YTogYW55LCBjZWxsRGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm9uTmF2aWdhdGVUbyhldmVudCwgY29sU2V0dGluZywgcm93RGF0YSwgY2VsbERhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtR3JvdXAoZGF0YUl0ZW06IGFueSwgZmllbGROYW1lOiBhbnkpOiBGb3JtR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBbZmllbGROYW1lXTogZGF0YUl0ZW1bZmllbGROYW1lXVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gSGVscGVyIGZ1bmN0aW9uc1xyXG4gIHB1YmxpYyBnZXRDbGFzcyhkYXRhSXRlbTogYW55LCBjb2w6IGFueSkge1xyXG4gICAgbGV0IG5nQ2xhc3MgPSBcImdyaWRDZWxsIFwiO1xyXG4gICAgaWYgKGNvbC5maWVsZFR5cGUgPT09ICdudW1iZXInIHx8IGNvbC5maWVsZFR5cGUgPT09ICdjdXJyZW5jeScgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3pudW1lcmljJykge1xyXG4gICAgICBuZ0NsYXNzICs9IFwicmlnaHRBbGlnbmVkIFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhSXRlbVtjb2wuZmllbGQgKyAnX0NsYXNzJ10pIHtcclxuICAgICAgbmdDbGFzcyArPSBkYXRhSXRlbVtjb2wuZmllbGQgKyAnX0NsYXNzJ10gKyBcIiBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sLkNsYXNzKSB7XHJcbiAgICAgIG5nQ2xhc3MgKz0gY29sLkNsYXNzICsgXCIgXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbC5Qb3BPdmVyQ29udGVudCkge1xyXG4gICAgICBuZ0NsYXNzICs9IFwiIHdpdGhQb3BvdmVySW5HcmlkXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5nQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rm9ybWF0KGNvbDogYW55LCBkZWZhdWx0Rm9ybWF0PzogYW55KSB7XHJcbiAgICBsZXQgZm9ybWF0ID0gXCJcIjtcclxuICAgIGlmIChjb2wuRm9ybWF0T3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGZvcm1hdCA9IGRlZmF1bHRGb3JtYXQgPyBkZWZhdWx0Rm9ybWF0IDogXCJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGZvcm1hdEFyciA9IGNvbC5Gb3JtYXRPcHRpb25zLnNwbGl0KFwiLlwiKVxyXG4gICAgICBsZXQgZHAgPSAwO1xyXG5cclxuICAgICAgaWYgKGZvcm1hdEFyci5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgZHAgPSBmb3JtYXRBcnJbMV0ubGVuZ3RoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZHAgIT09IDApIHtcclxuICAgICAgICBmb3JtYXQgPSBcIjEuXCIgKyBkcCArIFwiLVwiICsgZHA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWxsUmVzdWx0cygpOiBPYnNlcnZhYmxlPEV4Y2VsRXhwb3J0RGF0YT4ge1xyXG4gICAgY29uc3QgX3pncmlkQ29udHJvbCA9IHRoaXMuemdyaWQgYXMgWkdyaWQ7XHJcbiAgICBjb25zdCBfemdyaWRDb21wb25lbnQgPSB0aGlzLnpncmlkLmdyaWQgYXMgR3JpZENvbXBvbmVudDtcclxuICAgIGNvbnN0IF9kYXRhID0gX3pncmlkQ29tcG9uZW50LmRhdGEgYXMgR3JpZERhdGFSZXN1bHQ7XHJcblxyXG4gICAgY29uc3QgcGFnaW5hdGlvbkFwaVBvc3RVcmwgPSBfemdyaWRDb250cm9sLnBhZ2luYXRpb25BcGlQb3N0VXJsO1xyXG5cclxuICAgIC8vIE5lZWQgdG8gY2xvbmUsIGlmIG5vdCB3aWxsIGFmZmVjdCB0aGUgZ3JpZCBwYXJhbXMuXHJcbiAgICBjb25zdCBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnBhcmFtcyk7XHJcbiAgICBwYXJhbXMucGFnZU5vID0gMDtcclxuICAgIHBhcmFtcy5wYWdlU2l6ZSA9IF9kYXRhLnRvdGFsO1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKHBhZ2luYXRpb25BcGlQb3N0VXJsLCBwYXJhbXMpLnBpcGUoXHJcbiAgICAgIG1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0OiBFeGNlbEV4cG9ydERhdGEgPSB7XHJcbiAgICAgICAgICBkYXRhOiBwcm9jZXNzKGRhdGEuZGF0YVNldCwge30pLmRhdGFcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWZyZXNoR3JpZChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50LCBncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICBjb25zdCBfZ3JpZE9wdGlvblNlZ21lbnQgPSBldmVudC50YXJnZXQudHJpbSgpLnNwbGl0KCcuJyk7XHJcbiAgICBjb25zdCBfZ3JpZE9wdGlvbiA9IF9ncmlkT3B0aW9uU2VnbWVudFsxXTtcclxuICAgIGlmIChfZ3JpZE9wdGlvbikge1xyXG4gICAgICBjb25zdCB6Z3JpZENvbnRyb2wgPSBncm91cFtfZ3JpZE9wdGlvbl0gYXMgWkdyaWQ7XHJcbiAgICAgIGlmICh6Z3JpZENvbnRyb2wpIHtcclxuICAgICAgICB6Z3JpZENvbnRyb2wuZ2V0RGF0YSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdVbmFibGUgdG8gZmluZCBncmlkIHZhbHVlOiAnICsgX2dyaWRPcHRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnSW52YWxpZCByZWZyZXNoR3JpZCBldmVudDogJywgZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZnJlc2hEYXRhKCkge1xyXG4gICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJEYXRhKCkge1xyXG4gICAgdGhpcy56Z3JpZC5jbGVhckRhdGEoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93VG9vbHRpcChlOiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kYXRhLklzU2hvd1Rvb2xUaXAgPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGVsZW1lbnQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICBsZXQgaXNDb21tYW5kQ29sdW1uID0gZmFsc2U7XHJcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICBpZiAoZGF0YSA9PSAnay1jb21tYW5kLWNlbGwnKSB7XHJcbiAgICAgICAgaXNDb21tYW5kQ29sdW1uID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCgoZWxlbWVudC5ub2RlTmFtZSA9PT0gJ1REJyB8fCBlbGVtZW50Lm5vZGVOYW1lID09PSAnVEgnKSAmJiBlbGVtZW50Lm9mZnNldFdpZHRoIDwgZWxlbWVudC5zY3JvbGxXaWR0aCkgJiYgIWlzQ29tbWFuZENvbHVtbikge1xyXG4gICAgICB0aGlzLnRvb2x0aXBEaXIudG9nZ2xlKGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMudG9vbHRpcERpci5oaWRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcm93U2VsZWN0aW9uS2V5KGNvbnRleHQ6IFJvd0FyZ3MpOiBhbnkge1xyXG4gICAgcmV0dXJuIGNvbnRleHQuZGF0YUl0ZW07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRWYWx1ZXMoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm15U2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy56Z3JpZCkge1xyXG4gICAgICB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB7fTtcclxuICAgICAgdGhpcy56Z3JpZC5nZXREYXRhQmluZGluZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEdyaWREYXRhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNVc2VMb2NhbERhdGEoKSA/ICh0aGlzLnpncmlkLmRhdGEgfHwgdGhpcy56Z3JpZC5vcmlnaW5hbERhdGEpIDogKHRoaXMuemdyaWQuZ3JpZC5kYXRhICYmIHRoaXMuemdyaWQuZ3JpZC5kYXRhLmRhdGEgPyB0aGlzLnpncmlkLmdyaWQuZGF0YS5kYXRhIDogW10pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERhdGEgPSAoZ0RhdGE6IGFueSkgPT4ge1xyXG4gICAgaWYgKHRoaXMuemdyaWQpIHtcclxuICAgICAgaWYgKHRoaXMuaXNVc2VMb2NhbERhdGEoKSkge1xyXG4gICAgICAgIHRoaXMuemdyaWQuZGF0YSA9IGdEYXRhO1xyXG4gICAgICAgIHRoaXMuc2V0RGF0ZUNvbEZvckZpbHRlcmluZygpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuemdyaWQuZ3JpZC5kYXRhID0ge1xyXG4gICAgICAgICAgZGF0YTogZ0RhdGEsXHJcbiAgICAgICAgICB0b3RhbDogZ0RhdGEudG90YWxDb3VudFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldHVwR3JpZFdpdGhJbmxpbmVFZGl0KCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ3pncmlkIGlzIG51bGwgZm9yIHNldERhdGEuJyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0SGVhZGVyVGV4dChjb2x1bW5OYW1lOiBzdHJpbmcsIG5ld0hlYWRlclRpdGxlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGdyaWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG4gICAgZ3JpZENvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGNvbC5OYW1lID09PSBjb2x1bW5OYW1lKSB7XHJcbiAgICAgICAgY29sLnRpdGxlID0gbmV3SGVhZGVyVGl0bGU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRyYWNrQnkoaW5kZXg6IG51bWJlciwgaXRlbTogR3JpZEl0ZW0pOiBhbnkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhpdGVtLmRhdGFbJ0lkJ10gfHwgaW5kZXgpO1xyXG4gICAgcmV0dXJuIGluZGV4O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1VzZUxvY2FsRGF0YSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmRhdGEuRGF0YVNvdXJjZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvL3JldHVybiBaQ29tcG9uZW50SGVscGVyLmlzTnVsbFVuZGVmaW5lZEVtcHR5KHRoaXMuZGF0YS5SZXNvdXJjZVVSTCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gZ3JpZCBzZXR1cFxyXG4gIHB1YmxpYyBncmlkQ2FsbGJhY2soZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YVsnQWZ0ZXJsb2FkQ2FsbGJhY2snXSkge1xyXG4gICAgICBjb25zdCBtZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMpO1xyXG5cclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6IFwiemdyaWQtQWZ0ZXJsb2FkQ2FsbGJhY2tcIixcclxuICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YVsnQWZ0ZXJsb2FkQ2FsbGJhY2snXSxcclxuICAgICAgICBkYXRhOiBtZVxyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwR3JpZENvbXBvbmVudEF0dHJpYnV0ZXMoKSB7XHJcbiAgICAvLyBHcmlkIGRlZmF1bHQgc2V0dGluZ1xyXG4gICAgdGhpcy5ncmlkVGl0bGUgPSB0aGlzLmRhdGEuVGl0bGU7XHJcbiAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgIHRoaXMuX3N0YXRlLnRha2UgPSB0aGlzLmRhdGEuUGFnZVNpemUgfHwgMjA7XHJcbiAgICB0aGlzLnBhZ2VTaXplcyA9IFs1LCAxMCwgMjAsIDUwLCAxMDAsIDIwMCwgNTAwXTsgLy8gdG8gYmUgZW5oYW5jZWQ6IGN1c3RvbSBwYWdlIHNpemVzXHJcbiAgICB0aGlzLnByZXZpb3VzTmV4dCA9IHRoaXMuZGF0YVsnRW5hYmxlUHJldmlvdXNOZXh0QnV0dG9uJ10gfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gW01vYmlsZV0gRGlzYWJsZSBQYWdlU2l6ZVxyXG4gICAgaWYgKHRoaXMuZGF0YS5QYWdlU2l6ZXMgPT09IGZhbHNlIHx8IFpDb21wb25lbnRIZWxwZXIuaXNNb2JpbGVTY3JlZW4oKSkge1xyXG4gICAgICB0aGlzLnBhZ2VTaXplcyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnZWFibGUgPSB0aGlzLmRhdGEucGFnZUFibGUgIT0gdW5kZWZpbmVkID8gdGhpcy5kYXRhLnBhZ2VBYmxlIDogeyByZXNwb25zaXZlOiB0cnVlLCBidXR0b25Db3VudDogMywgcGFnZVNpemVzOiB0aGlzLnBhZ2VTaXplcywgcHJldmlvdXNOZXh0OiB0aGlzLnByZXZpb3VzTmV4dCB9O1xyXG5cclxuICAgIC8vIEdyaWQgU2VsZWN0aW9uIGNvbHVtblxyXG4gICAgaWYgKHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0YWJsZVNldHRpbmdzID0ge1xyXG4gICAgICAgIC8vIGNoZWNrYm94T25seTogdGhpcy5jaGVja2JveE9ubHksXHJcbiAgICAgICAgbW9kZTogdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMgPT09ICdzaW5nbGUnID8gJ3NpbmdsZScgOiAnbXVsdGlwbGUnXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYmluZCB0aGlzIHRvIGdyb3VwIHVzaW5nIEdyaWQgdmFsdWVcclxuICAgIGlmICh0aGlzLmRhdGEuVmFsdWUuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgY29uc3QgZ3JpZFZhbHVlID0gdGhpcy5kYXRhLlZhbHVlLnNsaWNlKDYpO1xyXG4gICAgICB0aGlzLmdyb3VwW2dyaWRWYWx1ZV0gPSB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFueSBTdWJzY3JpcHRpb25cclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cFN1YnNjcmlwdGlvbkZvckdyaWRTdWJqZWN0KCkge1xyXG4gICAgLy8gc3Vic2NyaWJlIHRvIHNldCBncmlkIHNldHRpbmcgZnJvbSBkaXJlY3RpdmUgdG8gY29tcG9uZW50XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuZ3JpZFN1YmplY3QucGlwZShcclxuICAgICAgdGFwKGdyaWQgPT4ge1xyXG4gICAgICAgIHRoaXMuemdyaWQgPSBncmlkO1xyXG4gICAgICAgIHRoaXMuX3N0YXRlID0gdGhpcy56Z3JpZC5zdGF0ZTtcclxuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLnpncmlkLmdyaWRDb2x1bW5zO1xyXG5cclxuICAgICAgICB0aGlzLnNldERhdGVDb2xGb3JGaWx0ZXJpbmcoKTtcclxuICAgICAgICB0aGlzLnNldHVwR3JpZFdpdGhJbmxpbmVFZGl0KCk7XHJcbiAgICAgICAgdGhpcy5zZXR1cFBvcG92ZXJGZWF0dXJlKHRoaXMuY29sdW1ucywgdGhpcy5nZXRHcmlkRGF0YSgpKTtcclxuICAgICAgfSksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb2x1bW5IZWFkZXJUcmFuc2xhdGVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzQ29sdW1uSGVhZGVyVHJhbnNsYXRlZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnRyYW5zbGF0ZUNvbHVtbkhlYWRlcih0aGlzLmNvbHVtbnMpO1xyXG4gICAgICB9KVxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBHcmlkU3RhdGUoKSB7XHJcbiAgICAvLyBDaGVjayBHcmlkIHNldHRpbmcgZXhpc3QgaW4gbG9jYWxzdG9yYWdlXHJcbiAgICB0aGlzLnN0YXRlRXhpc3QoKTtcclxuXHJcbiAgICAvLyBTZXQgRmlsdGVyIFNlc3Npb25LZXlcclxuICAgIGlmICh0aGlzLmRhdGFbJ1NhdmVGaWx0ZXInXSkge1xyXG4gICAgICB0aGlzLnNldEdyaWRTZXNzaW9uS2V5KHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEdyaWRCdXR0b25zKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGIHx8IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lKSB7XHJcbiAgICAgIHRoaXMuZ3JpZEJ0biA9IHtcclxuICAgICAgICBSZWFkT25seTogZmFsc2UsXHJcbiAgICAgICAgVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBJc1JlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICBXb3JrZmxvd0NvZGU6IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGLFxyXG4gICAgICAgIFZhbHVlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZSxcclxuICAgICAgICBUeXBlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZV9XRiA/IFwiendvcmtmbG93YnV0dG9uc1wiIDogXCJ6YnV0dG9uc1wiXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGF0ZUNvbEZvckZpbHRlcmluZygpIHtcclxuICAgIGNvbnN0IGdyaWREYXRhID0gdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG4gICAgaWYgKHRoaXMuaXNVc2VMb2NhbERhdGEoKSAmJiBncmlkRGF0YSAmJiBncmlkRGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGRhdGVDb2wgPSBPYmplY3Qua2V5cyhncmlkRGF0YVswXSkuZmlsdGVyKHggPT4geC5pbmNsdWRlcyhcIkRhdGVcIikgJiYgIXguZW5kc1dpdGgoQ29tcG9uZW50Q29uc3RhbnQuR3JpZENvbERhdGVGaWx0ZXJTdWZmaXgpKTtcclxuICAgICAgaWYgKGRhdGVDb2wgJiYgZGF0ZUNvbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZ3JpZERhdGEuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgIGRhdGVDb2wuZm9yRWFjaChjb2xOYW1lID0+IHtcclxuICAgICAgICAgICAgZGF0YVtgJHtjb2xOYW1lfSR7Q29tcG9uZW50Q29uc3RhbnQuR3JpZENvbERhdGVGaWx0ZXJTdWZmaXh9YF0gPSBuZXcgRGF0ZShkYXRhW2NvbE5hbWVdKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gR3JpZCBjb25maWd1cmF0aW9uIGZ1bmN0aW9uXHJcbiAgcHVibGljIHNldEdyaWRTZXNzaW9uS2V5KGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGlmIChncm91cFtcIkdyaWRTdG9yYWdlS2V5XCJdKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBncm91cFtcIkdyaWRTdG9yYWdlS2V5XCJdID0gJ3pncmlkXycgKyBncm91cC5yZXNvdXJjZVVSTCArICdfJyArIHRoaXMuZGF0YS5WYWx1ZSArICc6OicgKyB0aGlzLmF1dGhTZXJ2aWNlLmUxVG9rZW4udXNlck5hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZUdyaWRTZXR0aW5ncygpOiB2b2lkIHtcclxuICAgIGNvbnN0IF96Z3JpZENvbXBvbmVudCA9IHRoaXMuemdyaWQuZ3JpZCBhcyBHcmlkQ29tcG9uZW50O1xyXG4gICAgY29uc3QgX2NvbHVtbnMgPSBfemdyaWRDb21wb25lbnQuY29sdW1ucztcclxuXHJcbiAgICBvZih0aGlzLmNvbHVtbnMpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjb25maWdWYWx1ZTogWkdyaWRDb2x1bW5TZXR0aW5nc1tdID0gX2NvbHVtbnMudG9BcnJheSgpLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgICAgY29uc3QgX3pHcmlkQ29sdW1uU2V0dGluZ3M6IFpHcmlkQ29sdW1uU2V0dGluZ3MgPSBPYmplY3Qua2V5cyhpdGVtKVxyXG4gICAgICAgICAgICAgIC5maWx0ZXIocHJvcE5hbWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICFwcm9wTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd0ZW1wbGF0ZScpXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IChcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgLi4uYWNjLFxyXG4gICAgICAgICAgICAgICAgICAuLi57IFtjdXJyXTogaXRlbVtjdXJyXSB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLCB7fSBhcyBaR3JpZENvbHVtblNldHRpbmdzKTtcclxuICAgICAgICAgICAgcmV0dXJuIF96R3JpZENvbHVtblNldHRpbmdzO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgLy8gcmVtb3ZlIGV4dHJhIGVsZW1lbnQgZm9ybSBhcnJheVxyXG4gICAgICAgICAgY29uZmlnVmFsdWUuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgZGVsZXRlIGl0ZW1bJ2hlYWRlclN0eWxlJ107XHJcbiAgICAgICAgICAgIGRlbGV0ZSBpdGVtWydfX25nQ29udGV4dF9fJ107XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBjb25zdCBncmlkU2V0dGluZzogWkdyaWRTZXR0aW5ncyA9IHtcclxuICAgICAgICAgICAgLy8gc3RhdGU6IHRoaXMuc3RhdGUsXHJcbiAgICAgICAgICAgIGNvbHVtbnNDb25maWc6IGNvbmZpZ1ZhbHVlXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIC8vIEZpbmQgYW55IHNldHRpbmcgZnJvbSBsb2NhbHN0b3JhZ2UgYW5kIHVwZGF0ZSwgaWYgbm90IGp1c3QgYWRkIGluLlxyXG4gICAgICAgICAgbGV0IF9hcnJHcmlkQ2FjaGluZzogR3JpZENhY2hpbmdbXSA9IHRoaXMuekdyaWRTdGF0ZVBlcnNpc3RpbmdTZXJ2aWNlLmdldCh0aGlzLmdyaWRTdG9yYWdlS2V5KTtcclxuICAgICAgICAgIGxldCBfZ3JpZENvbmZpZzogR3JpZENhY2hpbmcgPSBudWxsO1xyXG4gICAgICAgICAgaWYgKF9hcnJHcmlkQ2FjaGluZyAmJiBfYXJyR3JpZENhY2hpbmdbMF0pIHtcclxuICAgICAgICAgICAgX2dyaWRDb25maWcgPSBfYXJyR3JpZENhY2hpbmcuZmluZCh4ID0+IHhbJ2RhdGFGb3JtRmllbGRzJ10gPT09IHRoaXMuZ3JpZFN0b3JhZ2VLZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF9ncmlkQ29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgX2dyaWRDb25maWcuZ3JpZFNldHRpbmdzID0gZ3JpZFNldHRpbmc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBfYXJyR3JpZENhY2hpbmcgPSBbXTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoIV9ncmlkQ29uZmlnKSB7XHJcbiAgICAgICAgICAgIF9ncmlkQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgIGRhdGFGb3JtRmllbGRzOiB0aGlzLmdyaWRTdG9yYWdlS2V5LFxyXG4gICAgICAgICAgICAgIGdyaWRTZXR0aW5nczogZ3JpZFNldHRpbmdcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIF9hcnJHcmlkQ2FjaGluZy5wdXNoKF9ncmlkQ29uZmlnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBfYXJyR3JpZENhY2hpbmc7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY29uY2F0TWFwKGdyaWRDYWNoZSA9PiB7XHJcbiAgICAgICAgICAvLyBTYXZlIGdyaWQgY2FjaGluZyB0byBsb2NhbHN0b3JhZ2VcclxuICAgICAgICAgIHRoaXMuekdyaWRTdGF0ZVBlcnNpc3RpbmdTZXJ2aWNlLnNldCh0aGlzLmdyaWRTdG9yYWdlS2V5LCBncmlkQ2FjaGUpO1xyXG4gICAgICAgICAgLy8gU2F2ZSB0byBDb29raWVTdG9yZVxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMubWFpblNlcnZpY2UuY29va2llU3RvcmVQb3N0KHRoaXMuZ3JpZFN0b3JhZ2VLZXksIGdyaWRDYWNoZSk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFwKHNhdmVkR3JpZENhY2hlID0+IHtcclxuICAgICAgICAgIC8vIGNoZWNrIGlzIHNhdmVkIHN0YXRlIGV4aXN0IHRvIGVuYWJsZS9oaWRlIHJlc3RvcmUgYnV0dG9uXHJcbiAgICAgICAgICB0aGlzLnN0YXRlRXhpc3QoKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgLy8gQWxlcnRcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coJ0dyaWQgU2V0dGluZyBTYXZlZCcsIFwidG9wXCIsIHRydWUsIDIwMDAsICdzdWNjZXNzJyk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXN0b3JlR3JpZFNldHRpbmdzKCkge1xyXG4gICAgb2YodHJ1ZSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgIC8vIENsZWFyIGxvY2Fsc3RvcmFnZSBncmlkIHNldHRpbmdcclxuICAgICAgICAgIHRoaXMuekdyaWRTdGF0ZVBlcnNpc3RpbmdTZXJ2aWNlLnJlbW92ZSh0aGlzLmdyaWRTdG9yYWdlS2V5KTtcclxuICAgICAgICAgIHJldHVybiBvZih0cnVlKVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAvLyBkZWxldGUgY29va2llc3RvcmUgZ3JpZFNldHRpbmcgYnkgc3RvcmFnZWtleSBhcyBuYW1lXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5tYWluU2VydmljZS5jb29raWVTdG9yZURlbGV0ZU11bHRpcGxlKHRoaXMuZ3JpZFN0b3JhZ2VLZXkpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNvbmNhdE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAvLyBVc2Ugb3JpZ2luYWwgY29sdW1uIHNldHRpbmdcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlR3JpZENvbHVtbnMoKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgLy8gY2hlY2sgaXMgc2F2ZWQgc3RhdGUgZXhpc3RcclxuICAgICAgICAgIHRoaXMuc3RhdGVFeGlzdCgpO1xyXG4gICAgICAgICAgLy8gQWxlcnRcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coJ0dyaWQgU2V0dGluZyBSZXN0b3JlZCcsIFwidG9wXCIsIHRydWUsIDIwMDAsICdzdWNjZXNzJyk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0R3JpZFNldHRpbmdzKCk6IFpHcmlkQ29sdW1uU2V0dGluZ3NbXSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLkFsbG93U2F2ZVN0YXRlKSB7XHJcbiAgICAgIGNvbnN0IF9zdG9yYWdlS2V5ID0gJ2lvbmljLWZpZWxkOjonICsgdGhpcy5hdXRoU2VydmljZS5lMVRva2VuLnVzZXJOYW1lICsgJzo6JyArIHRoaXMuZGF0YS5OYW1lICsgJzo6JyArIHRoaXMucm91dGVyLnVybDtcclxuXHJcbiAgICAgIC8vIEZpbmQgYW55IHNldHRpbmcgZnJvbSBsb2NhbHN0b3JhZ2UuLlxyXG4gICAgICBsZXQgX2FyckdyaWRDYWNoaW5nOiBHcmlkQ2FjaGluZ1tdID0gdGhpcy56R3JpZFN0YXRlUGVyc2lzdGluZ1NlcnZpY2UuZ2V0KF9zdG9yYWdlS2V5KTtcclxuICAgICAgaWYgKF9hcnJHcmlkQ2FjaGluZykge1xyXG4gICAgICAgIGNvbnN0IF9ncmlkQ2FjaGluZzogR3JpZENhY2hpbmcgPSBKU09OLnBhcnNlKF9hcnJHcmlkQ2FjaGluZ1snVmFsdWUnXSk7XHJcbiAgICAgICAgaWYgKF9ncmlkQ2FjaGluZykge1xyXG4gICAgICAgICAgcmV0dXJuIF9ncmlkQ2FjaGluZy5ncmlkU2V0dGluZ3MuY29sdW1uc0NvbmZpZy5zb3J0KChhLCBiKSA9PiBhLm9yZGVySW5kZXggLSBiLm9yZGVySW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdyaWRDdXN0b21BZGRDb21tYW5kKGdyb3VwOiBaR3JvdXApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgLy8gZGVjbGFyZSBidXR0b24gb25jbGljayBldmVudCBuYW1lIGJhc2Ugb24gZ3JpZCBuYW1lICsgcHJlZml4XHJcbiAgICBjb25zdCBncmlkQWRkQnV0dG9uRXZlbnROYW1lID0gdGhpcy5kYXRhLk5hbWUgKyAnX0N1c3RvbUFkZEJ1dHRvbk9uQ2xpY2snO1xyXG4gICAgaWYgKCF0aGlzLmdyb3VwW2dyaWRBZGRCdXR0b25FdmVudE5hbWVdKSB7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBbZ3JpZEFkZEJ1dHRvbkV2ZW50TmFtZV0oZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdyaWRDdXN0b21SZXNldENvbW1hbmQoZ3JvdXA6IFpHcm91cCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBkZWNsYXJlIGJ1dHRvbiBvbmNsaWNrIGV2ZW50IG5hbWUgYmFzZSBvbiBncmlkIG5hbWUgKyBwcmVmaXhcclxuICAgIGNvbnN0IGdyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZSA9IHRoaXMuZGF0YS5OYW1lICsgJ19DdXN0b21SZXNldEJ1dHRvbk9uQ2xpY2snO1xyXG4gICAgaWYgKCF0aGlzLmdyb3VwW2dyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZV0pIHtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5ncm91cFtncmlkUmVzZXRCdXR0b25FdmVudE5hbWVdKGdyb3VwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBncmlkQ3VzdG9tUmVtb3ZlQ29tbWFuZChkYXRhSXRlbTogYW55LCByb3dJbmRleDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIC8vIGRlY2xhcmUgYnV0dG9uIG9uY2xpY2sgZXZlbnQgbmFtZSBiYXNlIG9uIGdyaWQgbmFtZSArIHByZWZpeFxyXG4gICAgY29uc3QgZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lID0gdGhpcy5kYXRhLk5hbWUgKyAnX0N1c3RvbVJlbW92ZUJ1dHRvbk9uQ2xpY2snO1xyXG4gICAgaWYgKCF0aGlzLmdyb3VwW2dyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZV0pIHtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5ncm91cFtncmlkUmVzZXRCdXR0b25FdmVudE5hbWVdKGRhdGFJdGVtLCByb3dJbmRleCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gSW5saW5lIEVkaXRcclxuICBwcml2YXRlIGNyZWF0ZUZvcm1Db250cm9scyhncmlkQ29sczogQXJyYXk8YW55Pikge1xyXG4gICAgbGV0IGNvdW50ZXJJbmRleCA9IDA7XHJcbiAgICAvLyBUbyBmb3JjZSBlbGVtZW50IHRvIHJlYmluZCBkYXRhXHJcbiAgICB0aGlzLmlzSW5saW5lRWRpdElucHV0RmllbGRMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuemdyaWQuZ3JpZC5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIG9mKFtdKS5waXBlKGRlbGF5KDApLCB0YXAoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgfHwge307XHJcbiAgICAgIGNvbnN0IGdyaWREYXRhID0gdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShncmlkRGF0YSkpIHtcclxuICAgICAgICBncmlkRGF0YS5mb3JFYWNoKGQgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaXRlbXMgPSB7fTtcclxuICAgICAgICAgIGdyaWRDb2xzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmlzaWJsZSA9IFpDb21wb25lbnRIZWxwZXIuaXNWaXNpYmxlRm9ybUNvbnRyb2wodGhpcywgYy5maWVsZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzUmVxdWlyZWQgPSBaQ29tcG9uZW50SGVscGVyLmlzUmVxdWlyZWRGb3JtQ29udHJvbCh0aGlzLCBjLmZpZWxkKTtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0VmFsaWRhdG9ycyhjLmZpZWxkLCBpc1Zpc2libGUsIGlzUmVxdWlyZWQpO1xyXG4gICAgICAgICAgICBpdGVtc1tjLmZpZWxkXSA9IG5ldyBGb3JtQ29udHJvbChkW2MuZmllbGRdLCB2YWxpZGF0b3JzKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cChpdGVtcyk7XHJcblxyXG4gICAgICAgICAgaWYgKGRbXCJJZFwiXSkge1xyXG4gICAgICAgICAgICBpdGVtc1tcIklkXCJdID0gaXRlbXNbXCJJZFwiXSB8fCBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogZFtcIklkXCJdLCBkaXNhYmxlZDogZmFsc2UgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZFtcIklkXCJdID0gY291bnRlckluZGV4Kys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHNbZFtcIklkXCJdXSA9IGZvcm1Hcm91cDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzSW5saW5lRWRpdElucHV0RmllbGRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuemdyaWQuZ3JpZC5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudGVtcElubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHM7XHJcbiAgICB9KSkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5saW5lRmllbGQodmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maW5kKHggPT4geC5WYWx1ZSA9PT0gdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldElubGluZUZvcm0oZGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyKSB7XHJcbiAgICB2YXIga2V5ID0gKGRhdGFbXCJJZFwiXSB8fCBkYXRhW1wiSWRcIl0gPT0gMCkgPyBkYXRhW1wiSWRcIl0gOiByb3dJbmRleDtcclxuICAgIGlmICh0aGlzLmlzSW5saW5lRWRpdElucHV0RmllbGRMb2FkaW5nKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRlbXBJbmxpbmVFZGl0ZWRGb3JtR3JvdXBzW2tleV0gfHwgdGhpcy50ZW1wSW5saW5lRWRpdGVkRm9ybUdyb3Vwc1swXTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHNba2V5XTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGb3JtQ29udHJvbERhdGEoKTogYW55W10ge1xyXG4gICAgY29uc3QgZGF0YSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcykpIHtcclxuICAgICAgZGF0YS5wdXNoKHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3Vwc1trXT8udmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwR3JpZFdpdGhJbmxpbmVFZGl0KCkge1xyXG4gICAgaWYgKHRoaXMuaGFzSW5saW5lRWRpdENvbHVtbih0aGlzLmNvbHVtbnMpKSB7XHJcbiAgICAgIHRoaXMudGVtcElubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHM7XHJcbiAgICAgIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHt9O1xyXG4gICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9scyh0aGlzLmNvbHVtbnMuY29uY2F0KHRoaXMudXNhYmxlQ29sdW1ucyB8fCBbXSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzSW5saW5lRm9ybUdyb3VwSGFzVmFsdWUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzICYmIE9iamVjdC5rZXlzKHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcykubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzSW5saW5lRWRpdENvbHVtbihncmlkQ29scyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGdyaWRDb2xzICYmIGdyaWRDb2xzLnNvbWUoYyA9PiBjLmlzRWRpdGFibGVJbkdyaWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENlbGxTdHlsZUZvcklubGluZUVkaXQoY29sdW1uRmllbGQ6IFpGaWVsZCwgZGF0YUl0ZW06IGFueSwgcm93SW5kZXg6IG51bWJlcik6IGFueSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5nZXRJbmxpbmVGb3JtKGRhdGFJdGVtLCByb3dJbmRleCkgYXMgRm9ybUdyb3VwO1xyXG4gICAgaWYgKCFmb3JtKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGNvbnN0IHN0eWxlID0gY29sdW1uRmllbGRbYFN0eWxlMTBgXTtcclxuICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgc3R5bGUpO1xyXG4gICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgcmV0dXJuIGNhbGxGdW5jKGZvcm0udmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGZ1bmMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0eWxlO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEV2ZW50XHJcbiAgcHVibGljIGJlZm9yZUdyaWRHZXREYXRhKGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGNvbnNvbGUud2FybihcImJlZm9yZURhdGFCaW5kaW5nIHRyaWdnZXJlZFwiKTtcclxuICAgIGlmICghZ3JvdXAuYmVmb3JlR3JpZEdldERhdGEpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXAuYmVmb3JlRGF0YUJpbmRpbmcgaXMgdW5kZWZpbmVkXCIpO1xyXG4gICAgICByZXR1cm4gb2YodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ3JvdXAuYmVmb3JlR3JpZEdldERhdGEoZ3JvdXAsIG1lKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRHcmlkU2Vzc2lvbkZpbHRlcihncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICBpZiAoIWdyb3VwW1wiR3JpZFN0b3JhZ2VLZXlcIl0pIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBTdG9yYWdlS2V5ID0gZ3JvdXBbXCJHcmlkU3RvcmFnZUtleVwiXTtcclxuXHJcbiAgICBpZiAodGhpcy5zdG9yYWdlU2VydmljZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldChTdG9yYWdlS2V5KVxyXG4gICAgICAgIC50aGVuKGRhdGEgPT4ge1xyXG4gICAgICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLnZhbHVlIHx8IGRhdGEudmFsdWUgPT09IFwibnVsbFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2UoZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuZmlsdGVyID0gSlNPTi5wYXJzZShyZXN1bHRbXCJTdGF0ZUZpbHRlclwiXSk7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcyA9IEpTT04ucGFyc2UocmVzdWx0W1wiRmlsdGVyUGFyYW1zXCJdKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuZmlsdGVyLmZpbHRlcnMuZm9yRWFjaCgoc3RhdGVGaWx0ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChzdGF0ZUZpbHRlci5maWVsZC5pbmNsdWRlcygnVVRDJykpIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlRmlsdGVyLnZhbHVlID0gbmV3IERhdGUoc3RhdGVGaWx0ZXIudmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRHcmlkU2Vzc2lvbkZpbHRlcihncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICBpZiAoIWdyb3VwW1wiR3JpZFN0b3JhZ2VLZXlcIl0pIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBTdG9yYWdlS2V5ID0gZ3JvdXBbXCJHcmlkU3RvcmFnZUtleVwiXTtcclxuXHJcbiAgICBsZXQgbHN0R3JpZEZpbHRlcjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG5cclxuICAgIGlmIChtZS5zdGF0ZS5maWx0ZXIgJiYgdGhpcy5zdG9yYWdlU2VydmljZSAmJiB0aGlzLmRhdGFbJ1NhdmVGaWx0ZXInXSkge1xyXG4gICAgICAvL2xpc3Qgb2YgZGF0YSBmb3IgU3RhdGVGaWx0ZXIgYW5kIEZpbHRlclBhcmFtc1xyXG4gICAgICBsc3RHcmlkRmlsdGVyID0geyBcIlN0YXRlRmlsdGVyXCI6IEpTT04uc3RyaW5naWZ5KG1lLnN0YXRlLmZpbHRlciksIFwiRmlsdGVyUGFyYW1zXCI6IEpTT04uc3RyaW5naWZ5KG1lLnBhcmFtcy5maWx0ZXJQYXJhbXMpIH1cclxuICAgICAgLy9jcmVhdGUgc2Vzc2lvbiBzdG9yYWdlXHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KFN0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KGxzdEdyaWRGaWx0ZXIpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFNvdXJjZTogaHR0cHM6Ly93d3cudGVsZXJpay5jb20vZm9ydW1zL2tlbmRvLWFuZ3VsYXItZ3JpZC1ibGFuay1zcGFjZS1pbi10aGUtZW5kLXdoZW4teW91LXJlc2l6ZShyZWR1Y2UpLWFueS1jb2x1bW5cclxuICBwdWJsaWMgYWRqdXN0V2lkdGhVcG9uUmVzaXplKCkge1xyXG4gICAgY29uc3QgdGFibGVXaWR0aCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuay1ncmlkLXRhYmxlXCIpW2BvZmZzZXRXaWR0aGBdO1xyXG4gICAgY29uc3QgY29udGVudFdpZHRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5rLWdyaWQtY29udGVudFwiKVtgb2Zmc2V0V2lkdGhgXTtcclxuICAgIGlmICh0YWJsZVdpZHRoIDwgY29udGVudFdpZHRoKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRMYXN0Q29sV2lkdGggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmstZ3JpZC1jb250ZW50IC5rLWdyaWQtdGFibGUgdHIgdGQ6bGFzdC1vZi10eXBlXCIpW2BvZmZzZXRXaWR0aGBdO1xyXG5cclxuICAgICAgdGhpcy5jb2x1bW5zW3RoaXMuY29sdW1ucy5sZW5ndGggLSAxXS53aWR0aCA9IGN1cnJlbnRMYXN0Q29sV2lkdGggKyAoY29udGVudFdpZHRoIC0gdGFibGVXaWR0aCkgLSAxMDsgLy8gYWNjb3VudCBmb3IgdGhlIHZlcnRpY2FsIHNjcm9sbGJhcjtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBvbkNoYW5nZSBFdmVudHNcclxuICBwdWJsaWMgZmlsdGVyQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgIHRoaXMuemdyaWQuZmlsdGVyQ2hhbmdlKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBwYWdlQ2hhbmdlKGV2ZW50OiBQYWdlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgIHRoaXMuemdyaWQucGFnZUNoYW5nZShldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc29ydENoYW5nZShzb3J0OiBTb3J0RGVzY3JpcHRvcltdKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNVc2VMb2NhbERhdGEoKSkge1xyXG4gICAgICB0aGlzLnpncmlkLnNvcnRDaGFuZ2Uoc29ydCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5DZWxsQ2hlY2tCb3hPbkNoYW5nZShldmVudDogYW55LCByb3dJbmRleDogYW55LCBjb2x1bW46IGFueSkge1xyXG4gICAgY29uc3QgaXNDaGVja2VkID0gZXZlbnQuZGV0YWlsLmNoZWNrZWQ7XHJcbiAgICBjb25zdCBnRGF0YSA9IHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuICAgIGdEYXRhW3Jvd0luZGV4XVtjb2x1bW4uVmFsdWVdID0gaXNDaGVja2VkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbHVtbnNPcmRlckNoYW5nZWQoZXZlbnQ6IENvbHVtblJlb3JkZXJFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgX3pncmlkQ29udHJvbCA9IHRoaXMuemdyaWQgYXMgWkdyaWQ7XHJcbiAgICBjb25zdCBfemdyaWRDb21wb25lbnQgPSB0aGlzLnpncmlkLmdyaWQgYXMgR3JpZENvbXBvbmVudDtcclxuICAgIGNvbnN0IF9kYXRhID0gX3pncmlkQ29tcG9uZW50LmRhdGEgYXMgR3JpZERhdGFSZXN1bHQ7XHJcblxyXG4gICAgaWYgKHRoaXMuemdyaWQpIHtcclxuICAgICAgY29uc3QgX3pncmlkID0gdGhpcy56Z3JpZDtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBjb21tYW5kIGhhbmRsZXJcclxuICBwdWJsaWMgYWRkSGFuZGxlcih7IHNlbmRlciB9KSB7XHJcbiAgICB0aGlzLmlzTmV3ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBjbG9zZSBhbnkgZXhpc3RpbmcgZWRpdG9yXHJcbiAgICB0aGlzLmNsb3NlRWRpdG9yKHNlbmRlcik7XHJcblxyXG4gICAgLy8gbG9vcCBhbGwgY29sdW1uIHRvIGdldCB2YWxpZGF0aW9uIGFuZCBjcmVhdGUgZm9ybSBjb250cm9sXHJcbiAgICBjb25zdCBjb2xGb3JtQ29udHJvbCA9IHt9O1xyXG4gICAgdGhpcy56Z3JpZC5ncmlkQ29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcclxuICAgICAgaWYgKGNvbC5Jc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgIGlmIChjb2wuVHlwZSA9PT0gJ3p0ZXh0ZWRpdG9yJykge1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFpDb21wb25lbnRIZWxwZXIucmVxdWlyZWRWYWxpZGF0b3JfV2l0aG91dFdoaXRlU3BhY2VzX1RleHRFZGl0b3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChaQ29tcG9uZW50SGVscGVyLnJlcXVpcmVkVmFsaWRhdG9yX1dpdGhvdXRXaGl0ZVNwYWNlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb2wuVmFsaWRhdG9yUGF0dGVybikge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oY29sLlZhbGlkYXRvclBhdHRlcm4pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29sRm9ybUNvbnRyb2xbY29sLlZhbHVlXSA9IG5ldyBGb3JtQ29udHJvbChudWxsLCB2YWxpZGF0b3JzKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHNldCBmb3JtIGNvbnRyb2wgb2JqZWN0IHRvIGZvcm0gZ3JvdXBcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cChjb2xGb3JtQ29udHJvbCk7XHJcblxyXG4gICAgLy8gYWRkIHRvIGdyaWQgcm93XHJcbiAgICBzZW5kZXIuYWRkUm93KHRoaXMuZm9ybUdyb3VwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlSGFuZGxlcih7IHNlbmRlciwgcm93SW5kZXgsIGZvcm1Hcm91cCwgaXNOZXcgfSk6IHZvaWQge1xyXG4gICAgLy8gR2V0IHRoZSBleGlzdGluZyBkYXRhIGZyb20gdGhlIGdyaWRcclxuICAgIGNvbnN0IGdyaWRFeGlzdGluZ0RhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGZvcm0gaXMgdmFsaWRcclxuICAgIGlmIChmb3JtR3JvdXAudmFsaWQpIHtcclxuICAgICAgLy8gQ2hlY2sgZm9yIGEgdW5pcXVlIGtleSBmaWVsZFxyXG4gICAgICBjb25zdCB1bmlxdWVLZXkgPSB0aGlzLmRhdGFbJ1VuaXF1ZUtleSddO1xyXG4gICAgICBpZiAodW5pcXVlS2V5KSB7XHJcbiAgICAgICAgLy8gR2V0IHRoZSB1bmlxdWUga2V5IHZhbHVlIGZyb20gdGhlIGZvcm1cclxuICAgICAgICBjb25zdCBmb3JtVW5pcXVlS2V5VmFsdWUgPSBmb3JtR3JvdXAudmFsdWVbdW5pcXVlS2V5XTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYSBkdXBsaWNhdGUgdmFsdWVcclxuICAgICAgICBjb25zdCBpc0R1cGxpY2F0ZSA9IGdyaWRFeGlzdGluZ0RhdGEuc29tZShkYXRhID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIC8vIElmIGVkaXRpbmcgYW4gZXhpc3Rpbmcgcm93LCBza2lwIHRoZSBjdXJyZW50IHJvdyBiZWluZyBlZGl0ZWRcclxuICAgICAgICAgICAgIWlzTmV3ICYmXHJcbiAgICAgICAgICAgIHJvd0luZGV4ICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHVuaXF1ZSBrZXkgdmFsdWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGdyaWRcclxuICAgICAgICAgICAgZGF0YVt1bmlxdWVLZXldID09PSBmb3JtVW5pcXVlS2V5VmFsdWUgJiZcclxuICAgICAgICAgICAgLy8gU2tpcCBjaGVja2luZyBhZ2FpbnN0IHRoZSBjdXJyZW50IHJvdyBiZWluZyBlZGl0ZWRcclxuICAgICAgICAgICAgZGF0YVt1bmlxdWVLZXldICE9PSBncmlkRXhpc3RpbmdEYXRhW3Jvd0luZGV4XVt1bmlxdWVLZXldXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIGR1cGxpY2F0ZSB2YWx1ZSwgc2hvdyBhbiBlcnJvciBtZXNzYWdlIGFuZCByZXR1cm4gd2l0aG91dCBzYXZpbmdcclxuICAgICAgICBpZiAoaXNEdXBsaWNhdGUpIHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coJ0Vycm9yIG9jY3VyOiBEdXBsaWNhdGVkIHVuaXF1ZSBmaWVsZCBlbnRyeS4nLCAndG9wJywgdHJ1ZSwgMzAwMCwgJ2RhbmdlcicpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSWYgdGhlIHVuaXF1ZSBrZXkgdmFsdWUgaXMgdmFsaWQgYW5kIHRoZXJlIGFyZSBubyBkdXBsaWNhdGVzLCBzYXZlIHRoZSBkYXRhXHJcbiAgICAgIGlmIChpc05ldykge1xyXG4gICAgICAgIC8vIEFkZCBhIG5ldyByb3cgdG8gdGhlIGdyaWQgZGF0YVxyXG4gICAgICAgIGdyaWRFeGlzdGluZ0RhdGEucHVzaChmb3JtR3JvdXAudmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFVwZGF0ZSBhbiBleGlzdGluZyByb3cgaW4gdGhlIGdyaWQgZGF0YVxyXG4gICAgICAgIGdyaWRFeGlzdGluZ0RhdGFbcm93SW5kZXhdID0gZm9ybUdyb3VwLnZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBVcGRhdGUgdGhlIGdyaWQgZGF0YSBhbmQgY2xvc2UgdGhlIHJvdyBlZGl0b3JcclxuICAgICAgdGhpcy5zZXREYXRhKGdyaWRFeGlzdGluZ0RhdGEpO1xyXG4gICAgICBzZW5kZXIuY2xvc2VSb3cocm93SW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEhhbmRsZXIoeyBzZW5kZXIsIHJvd0luZGV4IH0pIHtcclxuICAgIC8vIGNhbmNlbCBhbnkgZXhpc3RpbmcgZWRpdG9yXHJcbiAgICBzZW5kZXIuY2xvc2VSb3cocm93SW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVkaXRIYW5kbGVyKHsgc2VuZGVyLCByb3dJbmRleCwgZGF0YUl0ZW0gfSkge1xyXG4gICAgLy8gU2V0IGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSByb3cgYmVpbmcgZWRpdGVkIGlzIG5vdCBhIG5ldyByb3dcclxuICAgIHRoaXMuaXNOZXcgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBDbG9zZSBhbnkgZXhpc3RpbmcgZWRpdG9yXHJcbiAgICB0aGlzLmNsb3NlRWRpdG9yKHNlbmRlcik7XHJcblxyXG4gICAgLy8gbG9vcCBhbGwgY29sdW1uIHRvIGdldCB2YWxpZGF0aW9uIGFuZCBjcmVhdGUgZm9ybSBjb250cm9sLCBhcHBlbmQgY3VycmVudCByb3cgdmFsdWVcclxuICAgIGNvbnN0IGNvbEZvcm1Db250cm9sID0ge307XHJcbiAgICB0aGlzLnpncmlkLmdyaWRDb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG4gICAgICBpZiAoY29sLklzUmVxdWlyZWQpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgaWYgKGNvbC5UeXBlID09PSAnenRleHRlZGl0b3InKSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goWkNvbXBvbmVudEhlbHBlci5yZXF1aXJlZFZhbGlkYXRvcl9XaXRob3V0V2hpdGVTcGFjZXNfVGV4dEVkaXRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFpDb21wb25lbnRIZWxwZXIucmVxdWlyZWRWYWxpZGF0b3JfV2l0aG91dFdoaXRlU3BhY2VzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbC5WYWxpZGF0b3JQYXR0ZXJuKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihjb2wuVmFsaWRhdG9yUGF0dGVybikpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb2xGb3JtQ29udHJvbFtjb2wuVmFsdWVdID0gbmV3IEZvcm1Db250cm9sKGRhdGFJdGVtW2NvbC5WYWx1ZV0sIHZhbGlkYXRvcnMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gc2V0IGZvcm0gY29udHJvbCBvYmplY3QgdG8gZm9ybSBncm91cFxyXG4gICAgdGhpcy5mb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKGNvbEZvcm1Db250cm9sKTtcclxuXHJcbiAgICAvLyBTZXQgdGhlIGZvcm0gZ3JvdXAgb24gdGhlIHJvdyBiZWluZyBlZGl0ZWRcclxuICAgIHRoaXMuZWRpdGVkUm93SW5kZXggPSByb3dJbmRleDtcclxuICAgIHNlbmRlci5lZGl0Um93KHJvd0luZGV4LCB0aGlzLmZvcm1Hcm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlSGFuZGxlcih7IHNlbmRlciwgZGF0YUl0ZW0gfSkge1xyXG4gICAgY29uc3QgZ0RhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0SXRlbUluZGV4KGRhdGFJdGVtLCBnRGF0YSwgdGhpcy5kYXRhWydVbmlxdWVLZXknXSk7XHJcbiAgICBnRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgZGF0YSBpbiB0aGUgZ3JpZFxyXG4gICAgdGhpcy5zZXREYXRhKGdEYXRhKTtcclxuXHJcbiAgICBzZW5kZXIuY2FuY2VsQ2VsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbG9zZUVkaXRvcihncmlkLCByb3dJbmRleCA9IHRoaXMuZWRpdGVkUm93SW5kZXgpIHtcclxuICAgIGdyaWQuY2xvc2VSb3cocm93SW5kZXgpO1xyXG4gICAgdGhpcy5lZGl0ZWRSb3dJbmRleCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJdGVtSW5kZXgoaXRlbTogYW55LCBkYXRhOiBhbnlbXSwga2V5OiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgZGF0YS5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgIGlmIChkYXRhW2lkeF1ba2V5XSA9PT0gaXRlbVtrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIGlkeDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBHcmlkIEZpbHRlclxyXG4gIHByaXZhdGUgc2V0dXBGaWx0ZXJGZWF0dXJlKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkRmlsdGVyQmFyRmllbGQpIHtcclxuICAgICAgdGhpcy5maWx0ZXJHcm91cCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGQpIHtcclxuICAgICAgdGhpcy5hZHZmaWx0ZXJHcm91cCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlYXJjaCgpIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZpbHRlckdyb3VwLmZvcm07XHJcbiAgICBjb25zdCBjb250cm9scyA9IGZvcm0uY29udHJvbHM7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNTaG93QWR2RmlsdGVyKSB7XHJcbiAgICAgIGNvbnN0IGFkdmZvcm0gPSB0aGlzLmFkdmZpbHRlckdyb3VwLmZvcm07XHJcbiAgICAgIGNvbnN0IGFkdmNvbnRyb2xzID0gYWR2Zm9ybS5jb250cm9scztcclxuICAgICAgZm9yIChjb25zdCBjIG9mIE9iamVjdC5rZXlzKGFkdmNvbnRyb2xzKSkge1xyXG4gICAgICAgIGNvbnRyb2xzW2NdID0gYWR2Y29udHJvbHNbY107XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhLkZpbHRlclNlYXJjaCkge1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogXCJ6Z3JpZC1maWx0ZXJzZWFyY2hcIixcclxuICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YS5GaWx0ZXJTZWFyY2gsXHJcbiAgICAgICAgZGF0YTogeyBmb3JtY29udHJvbHM6IGNvbnRyb2xzIH0sXHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnBhcmFtcy5maWx0ZXJQYXJhbXMgPSBbXTtcclxuICAgICAgT2JqZWN0LmtleXMoY29udHJvbHMpLmZvckVhY2goY29udHJvbE5hbWUgPT4ge1xyXG4gICAgICAgIGlmIChjb250cm9sc1tjb250cm9sTmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgIGNvbnN0IGZpZWxkID0gWkNvbXBvbmVudEhlbHBlci5nZXRGaWVsZEZyb21GaWVsZHNCeVZhbHVlKHRoaXMuZmlsdGVyR3JvdXAuZmllbGRzLCBjb250cm9sTmFtZSkgfHwgWkNvbXBvbmVudEhlbHBlci5nZXRGaWVsZEZyb21GaWVsZHNCeVZhbHVlKHRoaXMuYWR2ZmlsdGVyR3JvdXAuZmllbGRzLCBjb250cm9sTmFtZSk7XHJcbiAgICAgICAgICB0aGlzLnBhcmFtcy5maWx0ZXJQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgICAgIGtleTogZmllbGQuVmFsdWVFeHByIHx8IGZpZWxkLlZhbHVlLFxyXG4gICAgICAgICAgICBvcHM6IHRoaXMubWFwRmlsdGVyT3BlcmF0b3JCeUZpZWxkVHlwZShmaWVsZCksXHJcbiAgICAgICAgICAgIHZhbHVlOiBjb250cm9sc1tjb250cm9sTmFtZV0udmFsdWVcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsRWRpdCgpIHtcclxuICAgIHRoaXMuY2xlYXJGaWx0ZXJEYXRhKHRoaXMuZmlsdGVyR3JvdXApO1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGQpIHtcclxuICAgICAgdGhpcy5jbGVhckZpbHRlckRhdGEodGhpcy5hZHZmaWx0ZXJHcm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyRmlsdGVyRGF0YShncm91cDogWkdyb3VwKSB7XHJcbiAgICBjb25zdCBmb3JtID0gZ3JvdXAuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICBjb25zdCBjb250cm9scyA9IGZvcm0uY29udHJvbHM7XHJcbiAgICBPYmplY3Qua2V5cyhjb250cm9scykuZm9yRWFjaChjb250cm9sTmFtZSA9PiB7XHJcbiAgICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZShjb250cm9sTmFtZSwgbnVsbCwgZ3JvdXAsIHRydWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWR2YW5jZWRTZWFyY2goKSB7XHJcbiAgICB0aGlzLmlzU2hvd0FkdkZpbHRlciA9ICF0aGlzLmlzU2hvd0FkdkZpbHRlcjtcclxuICAgIGlmICghdGhpcy5pc1Nob3dBZHZGaWx0ZXIpIHtcclxuICAgICAgdGhpcy5jbGVhckZpbHRlckRhdGEodGhpcy5hZHZmaWx0ZXJHcm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1hcEZpbHRlck9wZXJhdG9yQnlGaWVsZFR5cGUoZmllbGQ6IFpGaWVsZCkge1xyXG4gICAgc3dpdGNoIChmaWVsZC5UeXBlKSB7XHJcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgY2FzZSBcIm51bWVyaWNcIjpcclxuICAgICAgY2FzZSBcImRhdGVcIjpcclxuICAgICAgY2FzZSBcImVtYWlsXCI6XHJcbiAgICAgIGNhc2UgXCJwYXNzd29yZFwiOlxyXG4gICAgICBjYXNlIFwidGVsXCI6XHJcbiAgICAgIGNhc2UgXCJ0ZXh0XCI6XHJcbiAgICAgIGNhc2UgXCJ1cmxcIjpcclxuICAgICAgY2FzZSBcImN1cnJlbmN5XCI6XHJcbiAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxyXG4gICAgICAgIGlmICghZmllbGRbJ0ZpbHRlckNvbnRhaW5zVXNpbmdFcXVhbCddKSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJjb250YWluc1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCI9PVwiO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBcIj1cIjtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBncmlkIGNvbW1vbiBzZXR0aW5nIGZ1bmN0aW9uXHJcbiAgcHVibGljIHNldCBzZXRHcmlkVGl0bGUobmV3VGl0bGU6IHN0cmluZykge1xyXG4gICAgdGhpcy5ncmlkVGl0bGUgPSBuZXdUaXRsZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIiwiPCEtLVxyXG48ZGl2IHN0eWxlPVwibWFyZ2luOiAxMHB4XCI+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgay1mb3JtXCI+XHJcbiAgICAgICAgICA8ZmllbGRzZXQ+XHJcbiAgICAgICAgICAgIDxsZWdlbmQ+QmluZGluZyB0eXBlczwvbGVnZW5kPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiay1mb3JtLWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5CaW5kIHRoZSBkYXRhIHRvOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImJpbmRpbmdUeXBlXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm1vZGVcIiBpZD1cImFycmF5XCIgdmFsdWU9XCJhcnJheVwiIGNsYXNzPVwiay1yYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZUJpbmRpbmdUeXBlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImstcmFkaW8tbGFiZWxcIiBmb3I9XCJhcnJheVwiPkFycmF5IG9iamVjdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJiaW5kaW5nVHlwZVwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJtb2RlXCIgaWQ9XCJncmlkRGF0YVJlc3VsdFwiIHZhbHVlPVwiZ3JpZERhdGFSZXN1bHRcIiBjbGFzcz1cImstcmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VCaW5kaW5nVHlwZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJrLXJhZGlvLWxhYmVsXCIgZm9yPVwiZ3JpZERhdGFSZXN1bHRcIj5HcmlkRGF0YVJlc3VsdCBvYmplY3Q8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiYmluZGluZ1R5cGVcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwibW9kZVwiIGlkPVwiYXN5bmNcIiB2YWx1ZT1cImFzeW5jXCIgY2xhc3M9XCJrLXJhZGlvXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlQmluZGluZ1R5cGUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiay1yYWRpby1sYWJlbFwiIGZvcj1cImFzeW5jXCI+QXN5bmNocm9ub3VzIHNvdXJjZTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9maWVsZHNldD5cclxuICAgICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiAtLT5cclxuPGRpdiBjbGFzcz1cImdyaWQtY29udGFpbmVyIGUxdGFnLXN0eWxlXCIgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlXCI+XHJcblxyXG4gIDwhLS0gPGRpdiAqbmdJZj1cImRhdGEuVGl0bGVcIiBjbGFzcz1cImdyaWRUaXRsZVwiPnt7ZGF0YS5UaXRsZX19PC9kaXY+IC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGUgbGV0LWFuY2hvcj5cclxuICAgIDxzcGFuPnt7IGFuY2hvci5uYXRpdmVFbGVtZW50LmlubmVyVGV4dCB9fTwvc3Bhbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDxrZW5kby1wb3BvdmVyICNncmlkUG9wT3ZlciBbcG9zaXRpb25dPVwiZGF0YS5Qb3BPdmVyUG9zaXRpb24gfHwgJ2JvdHRvbSdcIiBbdGVtcGxhdGVEYXRhXT1cImdldENvbnRleHREYXRhLmJpbmQodGhpcylcIj5cclxuICAgIDwhLS0gPG5nLXRlbXBsYXRlIGtlbmRvUG9wb3ZlclRpdGxlVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCIgPlxyXG4gICAgICA8ZGl2IFtzdHlsZV09XCJkYXRhLlRpdGxlU3R5bGVcIiAqbmdJZj1cImRhdGEgJiYgZGF0YS5UaXRsZVwiIFtpbm5lckhUTUxdPVwiZGF0YS5UaXRsZVwiPjwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT4gLS0+XHJcbiAgICA8bmctdGVtcGxhdGUga2VuZG9Qb3BvdmVyQm9keVRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxyXG4gICAgICA8ZGl2IFtzdHlsZV09XCJkYXRhLkJvZHlTdHlsZVwiIGNsYXNzPVwicG9wb3ZlcmJvZHlcIiAqbmdJZj1cImRhdGEgJiYgZGF0YS5Cb2R5XCIgW2lubmVySFRNTF09XCJkYXRhLkJvZHkgfCBodG1sU2FuaXRpemVcIiBbbmdDbGFzc109XCJkYXRhLkJvZHlDbGFzc1wiIChtb3VzZWxlYXZlKT1cImNsb3NlUG9wT3Zlci5jYWxsKHRoaXMsICRldmVudClcIj48L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9rZW5kby1wb3BvdmVyPlxyXG5cclxuICA8ZGl2IGtlbmRvVG9vbHRpcCBzaG93T249XCJub25lXCIgW3Rvb2x0aXBUZW1wbGF0ZV09XCJ0ZW1wbGF0ZVwiIGZpbHRlcj1cIi5rLWdyaWQgdGRcIiAobW91c2VvdmVyKT1cInNob3dUb29sdGlwKCRldmVudClcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIiBjbGFzcz1cImUxdGFnLXN0eWxlMVwiPlxyXG4gICAgPGRpdiBrZW5kb1BvcG92ZXJDb250YWluZXIgW3BvcG92ZXJdPVwiZ3JpZFBvcE92ZXJcIiBmaWx0ZXI9XCJkaXYuZ3JpZENlbGwud2l0aFBvcG92ZXJJbkdyaWRcIiBzaG93T249XCJub25lXCIga2VuZG9Qb3BvdmVyQ29udGFpbmVyICNwb3BvdmVyY29udGFpbmVyPVwia2VuZG9Qb3BvdmVyQ29udGFpbmVyXCI+XHJcbiAgICAgIDxrZW5kby1ncmlkIFt6Z3JpZGJpbmRpbmddPVwie2RhdGE6IGRhdGEsIGdyb3VwOiBncm91cCwgcGFyYW1zOiBwYXJhbXMsIGdyaWRTdWJqZWN0OiBncmlkU3ViamVjdH1cIiBbbmdDbGFzc109XCJkYXRhLkNsYXNzXCIgY2xhc3M9XCJkZXNrdG9wLWdyaWQgZTF0YWctc3R5bGUyXCJcclxuICAgICAgICAgICAgICAgICAgW3Njcm9sbGFibGVdPVwiZGF0YS5zY3JvbGxBYmxlID09PSBmYWxzZSA/ICdub25lJyA6ICdzY3JvbGxhYmxlJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJzdGF0ZS50YWtlXCJcclxuICAgICAgICAgICAgICAgICAgW3BhZ2VhYmxlXT1cInBhZ2VhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmhpZGVuLXBhZ2VyXT1cIiFwYWdlYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtza2lwXT1cInN0YXRlLnNraXBcIlxyXG4gICAgICAgICAgICAgICAgICBbc29ydF09XCJzdGF0ZS5zb3J0XCJcclxuICAgICAgICAgICAgICAgICAgW3NvcnRhYmxlXT1cInthbGxvd1Vuc29ydDogdHJ1ZSxtb2RlOiAnbXVsdGlwbGUnfVwiXHJcbiAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwic3RhdGUuZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwiZGF0YS5lbmFibGVGaWx0ZXJpbmcgIT09IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgW3Jlc2l6YWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Jlb3JkZXJhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbY29sdW1uTWVudV09XCJkYXRhLkRpc2FibGVHcmlkQ29sdW1uTWVudSA/IGZhbHNlIDogeyBmaWx0ZXI6IHRydWUgfVwiXHJcbiAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiISghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiXHJcbiAgICAgICAgICAgICAgICAgIChjZWxsQ2xpY2spPVwiY2VsbENsaWNrSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGNlbGxDbG9zZSk9XCJlZGl0Q2VsbENsb3NlSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGRhdGFTdGF0ZUNoYW5nZSk9XCJkYXRhU3RhdGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cInBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChzb3J0Q2hhbmdlKT1cInNvcnRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiZmlsdGVyQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoY29sdW1uUmVvcmRlcik9XCJjb2x1bW5zT3JkZXJDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBba2VuZG9HcmlkU2VsZWN0QnldPVwicm93U2VsZWN0aW9uS2V5XCJcclxuICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVNldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZEtleXMpXT1cIm15U2VsZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUyXCJcclxuICAgICAgICAgICAgICAgICAgW3RyYWNrQnldPVwidHJhY2tCeVwiXHJcbiAgICAgICAgICAgICAgICAgIChjYW5jZWwpPVwiY2FuY2VsSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHNhdmUpPVwic2F2ZUhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGVkaXQpPVwiZWRpdEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChhZGQpPVwiYWRkSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGNvbHVtblJlc2l6ZSk9XCJhZGp1c3RXaWR0aFVwb25SZXNpemUoKVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRUb29sYmFyVGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLkFsbG93UmVmcmVzaEJ1dHRvbiB8fCBkYXRhLkFsbG93RXhwb3J0IHx8IGRhdGEuQWxsb3dTYXZlU3RhdGUgfHwgZGF0YS5UaXRsZSB8fCBkYXRhLkdyaWRCdXR0b25GaWVsZE5hbWVfV0YgfHwgZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lIHx8IGRhdGEuRW5hYmxlR3JpZENvbW1hbmQgfHwgZGF0YS5FbmFibGVDdXN0b21BZGRDb21tYW5kIHx8IGRhdGEuRW5hYmxlQ3VzdG9tUmVzZXRDb21tYW5kXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1sZWZ0LWl0ZW1cIiAqbmdJZj1cImdyaWRUaXRsZSB8fCBkYXRhLkFsbG93UmVmcmVzaEJ1dHRvbiB8fCBkYXRhLkFsbG93RXhwb3J0XCI+XHJcbiAgICAgICAgICAgIDwhLS0gPGZhLWljb24gKm5nSWY9XCJkYXRhLkljb25cIiBjbGFzcz1cImdyaWRUaXRsZUljb25cIiBbaWNvbl09XCJkYXRhLkljb25cIj48L2ZhLWljb24+IC0tPlxyXG4gICAgICAgICAgICA8a2VuZG8tbGFiZWwgY2xhc3M9XCJncmlkVGl0bGVcIj57eyBncmlkVGl0bGUgfX08L2tlbmRvLWxhYmVsPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImxlZnQtYnV0dG9uc1wiIGtlbmRvQnV0dG9uIChjbGljayk9XCJyZWZyZXNoRGF0YSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuQWxsb3dSZWZyZXNoQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1ncmlkLWJ1dHRvbiBrLWktcmVmcmVzaC1zbVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvR3JpZEV4Y2VsQ29tbWFuZCAqbmdJZj1cImRhdGEuQWxsb3dFeHBvcnRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktZmlsZS1leGNlbFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICB7eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZSgnRXhwb3J0IERhdGEgdG8gRXhjZWwnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItcmlnaHQtaXRlbVwiICpuZ0lmPVwiZ3JpZEJ0biB8fCBkYXRhLkFsbG93U2F2ZVN0YXRlIHx8IGdyaWREZWZhdWx0U3RhdGVFeGlzdCB8fCBkYXRhLkVuYWJsZUdyaWRDb21tYW5kIHx8IGRhdGEuRW5hYmxlQ3VzdG9tQWRkQ29tbWFuZCB8fCBkYXRhLkVuYWJsZUN1c3RvbVJlc2V0Q29tbWFuZFwiPlxyXG4gICAgICAgICAgICA8YXBwLXp3b3JrZmxvd2J1dHRvbnMgKm5nSWY9XCJncmlkQnRuICYmIGdyaWRCdG4uVHlwZSA9PT0gJ3p3b3JrZmxvd2J1dHRvbnMnXCIgW2RhdGFdPVwiZ3JpZEJ0blwiIFtncm91cF09XCJncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJmb3JtXCI+PC9hcHAtendvcmtmbG93YnV0dG9ucz5cclxuICAgICAgICAgICAgPGFwcC16YnV0dG9ucyAqbmdJZj1cImdyaWRCdG4gJiYgZ3JpZEJ0bi5UeXBlID09PSAnemJ1dHRvbnMnXCIgW2RhdGFdPVwiZ3JpZEJ0blwiIFtncm91cF09XCJncm91cFwiIFtmb3JtXT1cImZvcm1cIj5cclxuICAgICAgICAgICAgPC9hcHAtemJ1dHRvbnM+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJzYXZlR3JpZFNldHRpbmdzKClcIiAqbmdJZj1cImRhdGEuQWxsb3dTYXZlU3RhdGVcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS1zdGFyXCI+PC9zcGFuPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdTYXZlIFNldHRpbmdzJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJyZXN0b3JlR3JpZFNldHRpbmdzKClcIiAqbmdJZj1cImdyaWREZWZhdWx0U3RhdGVFeGlzdFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaWNvbi13aXRoLXRleHQgay1pLXN0YXItb3V0bGluZVwiPjwvc3Bhbj57eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZSgnUmVzdG9yZSBTZXR0aW5ncycpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBrZW5kb0dyaWRBZGRDb21tYW5kICpuZ0lmPVwiZGF0YS5FbmFibGVHcmlkQ29tbWFuZFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaWNvbi13aXRoLXRleHQgay1pLWFkZFwiPjwvc3Bhbj57eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZShkYXRhLkFkZENvbW1hbmRCdXR0b25OYW1lID8gZGF0YS5BZGRDb21tYW5kQnV0dG9uTmFtZTogJ0FkZCcpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBrZW5kb0J1dHRvbiAoY2xpY2spPVwiZ3JpZEN1c3RvbUFkZENvbW1hbmQoZ3JvdXApXCIgKm5nSWY9XCJkYXRhLkVuYWJsZUN1c3RvbUFkZENvbW1hbmRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS1hZGRcIj48L3NwYW4+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoZGF0YS5BZGRDb21tYW5kQnV0dG9uTmFtZSA/IGRhdGEuQWRkQ29tbWFuZEJ1dHRvbk5hbWU6ICdBZGQnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIga2VuZG9CdXR0b24gKGNsaWNrKT1cImdyaWRDdXN0b21SZXNldENvbW1hbmQoZ3JvdXApXCIgKm5nSWY9XCJkYXRhLkVuYWJsZUN1c3RvbVJlc2V0Q29tbWFuZFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaWNvbi13aXRoLXRleHQgay1pLXRyYXNoXCI+PC9zcGFuPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKGRhdGEuUmVzZXRDb21tYW5kQnV0dG9uTmFtZSA/IGRhdGEuUmVzZXRDb21tYW5kQnV0dG9uTmFtZTogJ1Jlc2V0JykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGFpbmVyXCIgKm5nSWY9XCJkYXRhLkdyaWRGaWx0ZXJCYXJGaWVsZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9ybWFsLWZpbHRlci1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICA8YXBwLXpmb3JtIGNsYXNzPVwiZmlsdGVyLWZpZWxkc1wiIFtncm91cF09XCJmaWx0ZXJHcm91cFwiIFtmaWVsZE5hbWVdPVwiZGF0YS5HcmlkRmlsdGVyQmFyRmllbGRcIj48L2FwcC16Zm9ybT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWJ1dHRvbnNcIiBbbmdDbGFzc109XCJkYXRhLkNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwic29saWRcIiBzaXplPVwiZGVmYXVsdFwiIHN0cm9uZz1cInRydWVcIiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2VhcmNoKClcIj5cclxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInNlYXJjaFwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4tbGFiZWwgaW9uLXRleHQtY2FwaXRhbGl6ZVwiPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdTZWFyY2gnKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJvdXRsaW5lXCIgc2l6ZT1cImRlZmF1bHRcIiBzdHJvbmc9XCJ0cnVlXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImNhbmNlbEVkaXQoKVwiICpuZ0lmPVwiZGF0YS5Jc1Nob3dHcmlkQ2FuY2VsRmlsdGVyQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJ0aW1lc1wiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJzb2xpZFwiIHNpemU9XCJkZWZhdWx0XCIgc3Ryb25nPVwidHJ1ZVwiIFtuZ0NsYXNzXT1cImlzU2hvd0FkdkZpbHRlciA/ICd0b2dnbGVPbicgOiAndG9nZ2xlT2ZmJ1wiIChjbGljayk9XCJhZHZhbmNlZFNlYXJjaCgpXCIgKm5nSWY9XCJkYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwic2xpZGVycy1oXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGFwcC16Zm9ybSAqbmdJZj1cImRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkXCIgY2xhc3M9XCJ0by1wcmVsb2FkLXRoZS1maWVsZHNcIiBbZ3JvdXBdPVwiYWR2ZmlsdGVyR3JvdXBcIiBbZmllbGROYW1lXT1cImRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+PC9hcHAtemZvcm0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZHYtZmlsdGVyLWNvbnRhaW5lclwiICpuZ0lmPVwiaXNTaG93QWR2RmlsdGVyXCIgW0BoaWRlQW5kU2hvd0FuaW1hdGlvbl0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdi1maWx0ZXItc2VwZXJhdG9yXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ0FkdmFuY2VkIFNlYXJjaCcpIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGFwcC16Zm9ybSBjbGFzcz1cImFkdmZpbHRlci1maWVsZHNcIiBbZ3JvdXBdPVwiYWR2ZmlsdGVyR3JvdXBcIiBbZmllbGROYW1lXT1cImRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkXCI+PC9hcHAtemZvcm0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8a2VuZG8tZ3JpZC1jaGVja2JveC1jb2x1bW4gKm5nSWY9XCIhIWRhdGEuU2VsZWN0T3B0aW9uc1wiIFt3aWR0aF09XCI2MFwiIHNob3dTZWxlY3RBbGw9XCJ0cnVlXCIgW2NvbHVtbk1lbnVdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDwva2VuZG8tZ3JpZC1jaGVja2JveC1jb2x1bW4+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIFtzdHlsZV09XCJnZXRHcmlkQ29sdW1uU3R5bGUoKVwiIGNsYXNzPVwiZTF0YWctc3R5bGUzXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zO1wiIFtmaWVsZF09XCJjb2wuZmllbGRcIiBbdGl0bGVdPVwiY29sLnRpdGxlXCIgW3dpZHRoXT1cImNvbC53aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5SZXNpemFibGVXaWR0aF09XCJjb2wubWluUmVzaXphYmxlV2lkdGhcIiBbZmlsdGVyXT1cImNvbC5maWx0ZXJcIiBbZmlsdGVyYWJsZV09XCJmaWx0ZXJhYmxlKGNvbC5lbmFibGVGaWx0ZXJpbmcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRhYmxlXT1cInNvcnRhYmxlKGNvbC5lbmFibGVTb3J0aW5nKVwiIFtoZWFkZXJTdHlsZV09XCJnZXRHcmlkSGVhZGVyU3R5bGUoKVwiIGhlYWRlckNsYXNzPVwiZTF0YWctc3R5bGU0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvb3RlclN0eWxlXT1cImdldEdyaWRGb290ZXJTdHlsZSgpXCIgZm9vdGVyQ2xhc3M9XCJlMXRhZy1zdHlsZTlcIiBbaGlkZGVuXT1cImNvbC5oaWRkZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybWF0XT1cImNvbC5mb3JtYXRcIiBbY2xhc3NdPVwiY29sLkNsYXNzXCIgW2xvY2tlZF09XCJsb2NrZWQoY29sKVwiIGVkaXRvcj1cIm51bWVyaWNcIiBbY29sdW1uTWVudV09XCIhY29sLmRpc2FibGVDb2x1bW5NZW51XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VkaXRvcl09XCJjb2wuZWRpdG9yVHlwZVwiPlxyXG4gICAgICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJjb2wuZmllbGRUeXBlID09PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgICAgICB8fCBjb2wuZmllbGRUeXBlID09PSAnY3VycmVuY3knXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6bnVtZXJpYydcIj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItY2VsbCBbc2hvd09wZXJhdG9yc109XCJkYXRhLklzU2hvd0dyaWRGaWx0ZXJPcGVyYXRvclwiIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIiBvcGVyYXRvcj1cImVxXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZXEtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLW5lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLW51bWVyaWMtZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImNvbC5maWVsZFR5cGUgPT0gJ3pkYXRlJ1xyXG4gICAgICAgICAgICAgICB8fCBjb2wuZmllbGRUeXBlID09PSAnenRpbWUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6ZGF0ZXRpbWUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6dWlkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLmZpbHRlckJ5RGF0ZVJhbmdlID09PSB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiIG9wZXJhdG9yPVwibHRlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkYXRlLXJhbmdlLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCIgY2xhc3M9XCJkYXRlLXJhbmdlLWZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCIgW2ZpZWxkXT1cImNvbC5maWVsZFwiIFtkYXRhXT1cImRhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8L2RhdGUtcmFuZ2UtZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wuZmlsdGVyQnlEYXRlUmFuZ2UgPT09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1kYXRlLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCIgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCIgb3BlcmF0b3I9XCJsdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtZGF0ZS1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJjb2wuZmllbGRUeXBlID09PSAnY2hlY2tib3gnXCI+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLWJvb2xlYW4tZmlsdGVyLWNlbGwgW2NvbHVtbl09XCJjb2x1bW5cIiBbZmlsdGVyXT1cImZpbHRlclwiIG9wZXJhdG9yPVwiZXFcIj5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1ib29sZWFuLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLXN0cmluZy1maWx0ZXItY2VsbCBbc2hvd09wZXJhdG9yc109XCJkYXRhLklzU2hvd0dyaWRGaWx0ZXJPcGVyYXRvclwiIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiIG9wZXJhdG9yPVwiY29udGFpbnNcIj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1jb250YWlucy1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1jb250YWlucy1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1uZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLXN0YXJ0c3dpdGgtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItc3RhcnRzd2l0aC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1lbmRzd2l0aC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1lbmRzd2l0aC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtc3RyaW5nLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tIEdyaWQgRWRpdCBUZW1wbGF0ZSAtLT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRFZGl0VGVtcGxhdGUgKm5nSWY9XCJkYXRhLkVuYWJsZUdyaWRDb21tYW5kIFwiIGxldC1kYXRhSXRlbT1cImRhdGFJdGVtXCIgbGV0LWNvbHVtbj1cImNvbFwiIGxldC1mb3JtR3JvdXA9XCJmb3JtR3JvdXBcIiBsZXQtaXNOZXc9XCJpc05ld1wiPlxyXG4gICAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJjb2wuZmllbGRUeXBlXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1udW1lcmljdGV4dGJveCAjY2VsbEFuY2hvciBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpXCI+PC9rZW5kby1udW1lcmljdGV4dGJveD5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1wb3B1cCBbYW5jaG9yXT1cImNlbGxBbmNob3IubnVtZXJpY0lucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICEoaXNOZXcgJiYgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwQ2xhc3M9XCJrLXdpZGdldCBrLXRvb2x0aXAgay10b29sdGlwLXZhbGlkYXRpb24gay1pbnZhbGlkLW1zZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDJweDsgb3BhY2l0eTogMC41O1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktd2FybmluZ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbC5OYW1lIH19IHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5wYXR0ZXJuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sLlZhbGlkYXRvck1lc3NhZ2UgPyBjb2wuVmFsaWRhdG9yTWVzc2FnZSA6IFwiUGxlYXNlIGNoZWNrIHRoZSBpbnB1dCB2YWx1ZS5cIiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tcG9wdXA+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXRleHRib3ggI2NlbGxBbmNob3IgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKVwiPjwva2VuZG8tdGV4dGJveD5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1wb3B1cCBbYW5jaG9yXT1cImNlbGxBbmNob3IuaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiYgIShpc05ldyAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXBDbGFzcz1cImstd2lkZ2V0IGstdG9vbHRpcCBrLXRvb2x0aXAtdmFsaWRhdGlvbiBrLWludmFsaWQtbXNnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctbGVmdDogMnB4OyBvcGFjaXR5OiAwLjU7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS13YXJuaW5nXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiPnt7IGNvbC5OYW1lIH19IGlzIHJlcXVpcmVkLjwvaW9uLWxhYmVsPi0tPlxyXG4gICAgICAgICAgICAgICAgICAtbFxyXG5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbC5OYW1lIH19IHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5wYXR0ZXJuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sLlZhbGlkYXRvck1lc3NhZ2UgPyBjb2wuVmFsaWRhdG9yTWVzc2FnZSA6IFwiUGxlYXNlIGNoZWNrIHRoZSBpbnB1dCB2YWx1ZS5cIiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tcG9wdXA+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWRhdGFJdGVtIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW46IDFweCAwO1wiICpuZ0lmPVwiIWNvbC5jbGlja2FibGVJY29ucyAmJiBjb2wuaXNFZGl0YWJsZUluR3JpZCAhPT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgW25nU3dpdGNoXT1cImNvbC5maWVsZFR5cGVcIiBbbmdDbGFzc109XCJnZXRDbGFzcyhkYXRhSXRlbSwgY29sKVwiIFtzdHlsZV09XCJnZXRDZWxsU3R5bGUoY29sLCBkYXRhSXRlbSlcIiBbYXR0ci5kYXRhLWlkXT1cImRhdGFJdGVtLklkXCIgW2F0dHIuY29sdW1uLW5hbWVdPVwiY29sLmZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJzaG93UG9wT3Zlcihjb2wsICRldmVudClcIiAobW91c2VsZWF2ZSk9XCJjbG9zZVBvcE92ZXIoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogJ2RkL01NL3l5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogJ0hIOm1tJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pzaG9ydGRhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogJ01NTSB5eXl5JyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6dWlkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgbnVtYmVyIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3knXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgbnVtYmVyOiBnZXRGb3JtYXQoY29sLCAnMS4yLTInKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pudW1lcmljJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCkgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid1cmwnXCIgc3R5bGU9XCJjb2xvcjogYmx1ZTsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO1wiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogNXB4IDA7XCIgKm5nSWY9XCJjb2wuZ3JpZENlbGxSZXBsYWNlVmFsdWUgJiYgZ2V0SWNvbk5hbWUoY29sLmdyaWRDZWxsUmVwbGFjZVZhbHVlLCBkYXRhSXRlbVtjb2wuZmllbGRdKSAhPT0gJydcIj5cclxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZ2V0SWNvbk5hbWUoY29sLmdyaWRDZWxsUmVwbGFjZVZhbHVlLCBkYXRhSXRlbVtjb2wuZmllbGRdKVwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFjb2wuZ3JpZENlbGxSZXBsYWNlVmFsdWVcIiBbbmdTd2l0Y2hdPVwiY2VsbFN0eWxlQ29uZGl0aW9uKGNvbCwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT10cnVlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsU3R5bGVDb25kaXRpb25EZWZhdWx0XCIgW3N0eWxlXT1cInNldENlbGxTdHlsZUNvbmRpdGlvbihjb2wsIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCIhIWNvbC5uYXZpZ2F0ZVRvXCIgKGNsaWNrKT1cIm9uTmF2aWdhdGVUbygkZXZlbnQsIGNvbCwgZGF0YUl0ZW0sIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIGNvbG9yPVwibGlnaHRcIiBzaXplPVwic21hbGxcIj5cclxuICAgICAgICAgICAge3sgY29sLkNsaWNrYWJsZUljb25zIH19XHJcbiAgICAgICAgICAgIDxpb24taWNvbiBzbG90PSBcImVuZFwiIG5hbWU9XCJhcnJvdy1mb3J3YXJkXCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiA1cHggMDtcIiAqbmdJZj1cImNvbC5pc0VkaXRhYmxlSW5HcmlkID09PSB0cnVlICYmIGlzSW5saW5lRm9ybUdyb3VwSGFzVmFsdWUoKSAmJiAhaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcgJiYgIWNvbC5ncmlkQ2VsbFJlcGxhY2VWYWx1ZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNVwiXHJcbiAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2xhc3MoZGF0YUl0ZW0sIGNvbClcIiBjbGFzcz1cImUxdGFnLXN0eWxlNVwiIFtzdHlsZV09XCJnZXRDZWxsU3R5bGVGb3JJbmxpbmVFZGl0KGNvbCwgZGF0YUl0ZW0sIHJvd0luZGV4KVwiPlxyXG4gICAgICAgICAgICAgIDxhcHAtemlucHV0LWNvbnRhaW5lciBbZGF0YV09XCJnZXRJbmxpbmVGaWVsZChjb2wuZmllbGQpXCIgW2dyb3VwXT1cImdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwiZ2V0SW5saW5lRm9ybShkYXRhSXRlbSwgcm93SW5kZXgpXCIgW2NvbnRhaW5lckZpZWxkXT1cImNvbnRhaW5lckZpZWxkXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU2XCIgY2xhc3M9XCJlMXRhZy1zdHlsZTZcIj5cclxuICAgICAgICAgICAgICA8L2FwcC16aW5wdXQtY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tdG9wOiAxMHB4O1wiICpuZ0Zvcj1cImxldCBpY29uIG9mIGNvbC5jbGlja2FibGVJY29uc1wiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImljb24uQ2xhc3MgPyBpY29uLkNsYXNzIDogJydcIiAqbmdJZj1cIiEhaWNvbiAmJiAoISFkYXRhSXRlbS5XRlNfU3RhdHVzQ29kZSAmJiAhIWljb24pXHJcbiAgICAgICAgICAgICAgPyBkYXRhSXRlbS5XRlNfU3RhdHVzQ29kZSAhPT0gaWNvbi5XRlNfU3RhdHVzQ29kZVxyXG4gICAgICAgICAgICAgIDogdHJ1ZTtcclxuICAgICAgICAgICAgZWxzZSBkaXNhYmxlZEJ1dHRvblwiIChjbGljayk9XCJvbkJ0bkNsaWNrKCRldmVudCwgaWNvbiwgZGF0YUl0ZW0sIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgICAgICB7e2ljb24uTmFtZSB8fCBkYXRhSXRlbVtjb2wuZmllbGRdfX0gPGZhLWljb24gW2ljb25dPVwiaWNvbi5JY29uXCIgc3R5bGU9XCJwYWRkaW5nOiA0cHggNnB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc2FibGVkQnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPCEtLSA8c3Ryb25nPnt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfX08L3N0cm9uZz4gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJ7e2RhdGFJdGVtLkRpc2NvbnRpbnVlZCA/ICdkaXNjb250aW51ZWQnIDogJ2FjdGl2ZSd9fVwiPlxyXG4gICAgICAgICAgICAgIHt7ZGF0YUl0ZW0uRGlzY29udGludWVkID8gXCJkaXNjb250aW51ZWRcIiA6IFwiYWN0aXZlXCJ9fVxyXG4gICAgICAgICAgICA8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGb290ZXJUZW1wbGF0ZSBsZXQtY29sdW1uIGxldC1jb2x1bW5JbmRleD1cImNvbHVtbkluZGV4XCIgKm5nSWY9XCJkYXRhLkVuYWJsZUFnZ3JlZ2F0ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiA1cHggMDtcIiBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkVHlwZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlN1wiIGNsYXNzPVwiZTF0YWctc3R5bGU3XCI+XHJcbiAgICAgICAgICAgICAge3tjb2wuYWdncmVnYXRlVHlwZX19XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6ZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6ICdkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3p0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgZGF0ZTogJ0hIOm1tJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pzaG9ydGRhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiAnTU1NIHl5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgZGF0ZTogJ2RkL01NL3l5eXkgaGg6bW06c3MgYWEnIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenVpZGF0ZXRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBudW1iZXIgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidjdXJyZW5jeSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCwgJzEuMi4yJykgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6bnVtZXJpYydcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCkgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid1cmwnXCIgc3R5bGU9XCJjb2xvcjogYmx1ZTsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxyXG4gICAgICAgIDxrZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uICpuZ0lmPVwiZGF0YS5FbmFibGVHcmlkQ29tbWFuZFwiIHdpZHRoPVwiMTgwXCIgW2NvbHVtbk1lbnVdPVwiZmFsc2VcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZThcIiBjbGFzcz1cImUxdGFnLXN0eWxlOFwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtaXNOZXc9XCJpc05ld1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZFNhdmVDb21tYW5kPlxyXG4gICAgICAgICAgICAgIHt7IGlzTmV3ID8gJ1NhdmUnIDogJ1VwZGF0ZScgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkQ2FuY2VsQ29tbWFuZCBbcHJpbWFyeV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAge3sgaXNOZXcgPyAnRGlzY2FyZCBjaGFuZ2VzJyA6ICdDYW5jZWwnIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZEVkaXRDb21tYW5kPlxyXG4gICAgICAgICAgICAgIHt7IFwiRWRpdFwiIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZFJlbW92ZUNvbW1hbmQ+XHJcbiAgICAgICAgICAgICAge3sgXCJSZW1vdmVcIiB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9rZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uPlxyXG4gICAgICAgIDxrZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uICpuZ0lmPVwiZGF0YS5FbmFibGVDdXN0b21SZW1vdmVDb21tYW5kXCIgd2lkdGg9XCIxODBcIiBbY29sdW1uTWVudV09XCJmYWxzZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlOFwiIGNsYXNzPVwiZTF0YWctc3R5bGU4XCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1pc05ldz1cImlzTmV3XCIgbGV0LWRhdGFJdGVtIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJncmlkQ3VzdG9tUmVtb3ZlQ29tbWFuZChkYXRhSXRlbSwgcm93SW5kZXgpXCIgKm5nSWY9XCJkYXRhLkVuYWJsZUN1c3RvbVJlbW92ZUNvbW1hbmRcIj5cclxuICAgICAgICAgICAgICB7eyBcIlJlbW92ZVwiIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2tlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtZXhjZWwgZmlsZU5hbWU9XCJFeHBvcnQueGxzeFwiIFtmZXRjaERhdGFdPVwiYWxsUmVzdWx0c1wiPjwva2VuZG8tZ3JpZC1leGNlbD5cclxuICAgICAgPC9rZW5kby1ncmlkPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSBmb3IgREVDIGF1dG8gc2Nyb2xsaW5nIC0tPlxyXG4gIDxkaXYgaWQ9XCJlbmQtb2YtZ3JpZFwiPjwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbiJdfQ==
|
|
1147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvemdyaWQvemdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBNEUsTUFBTSxlQUFlLENBQUM7QUFDbEosT0FBTyxFQUFFLFNBQVMsRUFBZSxVQUFVLEVBQUUsV0FBVyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFHOUYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdoRSxPQUFPLEVBQXlCLE9BQU8sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBR25FLDJDQUEyQztBQUMzQyw4REFBOEQ7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFcEYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHMUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDckYsT0FBTyxFQUVHLE1BQU0sRUFBYyxnQkFBZ0IsRUFFN0MsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7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RUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEFmdGVyVmlld0luaXQsIEFmdGVyVmlld0NoZWNrZWQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkZWxheSB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IHRhcCwgbWFwLCBzd2l0Y2hNYXAsIGNvbmNhdE1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBFeGNlbEV4cG9ydERhdGEgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1leGNlbC1leHBvcnQnO1xyXG5pbXBvcnQgeyBHcmlkSXRlbSwgU2VsZWN0YWJsZVNldHRpbmdzIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZ3JpZCc7XHJcbmltcG9ydCB7IFNvcnREZXNjcmlwdG9yLCBTdGF0ZSwgcHJvY2VzcyB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tZGF0YS1xdWVyeVwiO1xyXG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItdG9vbHRpcCc7XHJcbmltcG9ydCB7IEdyaWREYXRhUmVzdWx0LCBEYXRhU3RhdGVDaGFuZ2VFdmVudCwgUGFnZUNoYW5nZUV2ZW50LCBDZWxsQ2xpY2tFdmVudCwgR3JpZENvbXBvbmVudCwgUm93QXJncywgQ29sdW1uUmVvcmRlckV2ZW50IH0gZnJvbSBcIkBwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWdyaWRcIjtcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuLy8gaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tIFwic3JjL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudFwiO1xyXG5pbXBvcnQgeyBEYXRhTGlzdGluZ0ZpZWxkQmFzZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL2RhdGFsaXN0aW5nZmllbGRiYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgaGlkZUFuZFNob3dWZXJ0aWNhbEFuaW1hdGlvbiB9IGZyb20gXCIuLi9hbmltYXRpb25zL2NvbXBvbmVudC1hbmltYXRpb25zXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbnN0YW50IH0gZnJvbSBcIi4uL2NvbnN0YW50cy9jb25zdGFudFwiO1xyXG5pbXBvcnQgeyBNYWluU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9tYWluLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgWkdyaWRCaW5kaW5nRGlyZWN0aXZlIH0gZnJvbSBcIi4vemdyaWQuYmluZGluZy5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgRWxlbWVudENvbnRhaW5lckRpcmVjdGl2ZSB9IGZyb20gXCIuLi9kaXJlY3RpdmVzL2VsZW1lbnRjb250YWluZXIuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7XHJcbiAgQXV0aFNlcnZpY2UsIFdlYkFwaVNlcnZpY2UsIFRvYXN0U2VydmljZSwgR3JpZENhY2hpbmcsXHJcbiAgWkZpZWxkLCBaR3JvdXAsIFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCwgWkNvcmVTZXJ2aWNlLFxyXG4gIFpHcmlkU3RhdGVQZXJzaXN0aW5nU2VydmljZSwgWkdyaWRQb3N0QXBpUGFyYW1zLCBaR3JpZFNldHRpbmdzLCBaR3JpZENvbHVtblNldHRpbmdzLCBaR3JpZEN1c3RvbUNvbHVtbiwgU3RvcmFnZVNlc3Npb25TZXJ2aWNlLCBGb250QXdlU29tZVNlcnZpY2VcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBaR3JpZCB7XHJcbiAgcGFyYW1zOiBaR3JpZFBvc3RBcGlQYXJhbXM7XHJcbiAgc3RhdGU6IFN0YXRlO1xyXG4gIGNvbHVtbnM6IGFueVtdO1xyXG4gIHBhZ2luYXRpb25BcGlQb3N0VXJsOiBzdHJpbmc7XHJcbiAgZGF0YTogWkZpZWxkO1xyXG4gIGdyb3VwOiBaR3JvdXA7XHJcbiAgemdyaWQ6IFpHcmlkQmluZGluZ0RpcmVjdGl2ZTtcclxuICBpbmxpbmVFZGl0ZWRGb3JtR3JvdXBzOiBGb3JtR3JvdXA7XHJcbiAgZ2V0R3JpZERhdGE6ICgpID0+IGFueVtdO1xyXG4gIGdldERhdGE6ICgpID0+IHZvaWQ7XHJcbiAgY2xlYXJEYXRhOiAoKSA9PiB2b2lkO1xyXG4gIHNldERhdGE6IChkYXRhOiBhbnkpID0+IHZvaWQ7XHJcbiAgc2V0Q29sdW1uczogKGNvbHVtbkZpZWxkc05hbWU6IHN0cmluZywgY29sdW1uczogQXJyYXk8WkdyaWRDdXN0b21Db2x1bW4+KSA9PiB2b2lkO1xyXG4gICRzZXRDb2x1bW5zOiAoY29sdW1uRmllbGRzTmFtZTogc3RyaW5nLCBjb2x1bW5zOiBBcnJheTxaR3JpZEN1c3RvbUNvbHVtbj4pID0+IE9ic2VydmFibGU8YW55PjtcclxuICBnZXRGb3JtQ29udHJvbERhdGEoKTogYW55W107XHJcbn1cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtemdyaWRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3pncmlkLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3pncmlkLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIGhpZGVBbmRTaG93VmVydGljYWxBbmltYXRpb25cclxuICBdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgWmdyaWRDb21wb25lbnQgZXh0ZW5kcyBEYXRhTGlzdGluZ0ZpZWxkQmFzZSBpbXBsZW1lbnRzIFpDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKFRvb2x0aXBEaXJlY3RpdmUpIHB1YmxpYyB0b29sdGlwRGlyOiBUb29sdGlwRGlyZWN0aXZlO1xyXG4gIEBWaWV3Q2hpbGQoRWxlbWVudENvbnRhaW5lckRpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgZWxlbWVudENvbnRhaW5lciE6IEVsZW1lbnRDb250YWluZXJEaXJlY3RpdmU7XHJcbiAgLy8gQFZpZXdDaGlsZChaR3JpZEJpbmRpbmdEaXJlY3RpdmUsIHsgc3RhdGljOiBmYWxzZSB9KSB6Z3JpZDogWkdyaWRCaW5kaW5nRGlyZWN0aXZlO1xyXG5cclxuICB6Z3JpZDogYW55ID0gbnVsbDtcclxuICBvYXV0aFVybDogc3RyaW5nID0gbnVsbDtcclxuICBncmlkRGF0YTogR3JpZERhdGFSZXN1bHQ7XHJcbiAgc2VsZWN0YWJsZVNldHRpbmdzOiBTZWxlY3RhYmxlU2V0dGluZ3M7XHJcbiAgbXlTZWxlY3Rpb246IGFueVtdID0gW107XHJcbiAgaW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHt9O1xyXG4gIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDsgLy8gZm9yIGtlbmRvIGdyaWQgYnVpbHQtaW5cclxuICBwdWJsaWMgcHJldmlvdXNOZXh0OiBib29sZWFuO1xyXG4gIHB1YmxpYyBncmlkQnRuO1xyXG4gIHB1YmxpYyBwYWdlYWJsZTogYW55ID0gZmFsc2U7XHJcbiAgcHVibGljIGZpbHRlckdyb3VwID0gbmV3IFpHcm91cCgpO1xyXG4gIHB1YmxpYyBhZHZmaWx0ZXJHcm91cCA9IG5ldyBaR3JvdXAoKTtcclxuICBwdWJsaWMgaXNTaG93QWR2RmlsdGVyID0gZmFsc2U7XHJcbiAgcHVibGljIGdyaWRUaXRsZTogYW55O1xyXG4gIHB1YmxpYyBpc0lubGluZUVkaXRJbnB1dEZpZWxkTG9hZGluZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgdGVtcElubGluZUVkaXRlZEZvcm1Hcm91cHM7XHJcbiAgcHJpdmF0ZSBpc0NvbHVtbkhlYWRlclRyYW5zbGF0ZWQgPSBmYWxzZTtcclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiwgbm8tdW5kZXJzY29yZS1kYW5nbGUsIGlkLWJsYWNrbGlzdCwgaWQtbWF0Y2hcclxuICBfc3RhdGU6IFN0YXRlID0ge1xyXG4gICAgc2tpcDogMCxcclxuICAgIHRha2U6IDEwXHJcbiAgfTtcclxuXHJcbiAgcGFyYW1zOiBaR3JpZFBvc3RBcGlQYXJhbXMgPSB7XHJcbiAgICByZWZlcklkOiBudWxsLFxyXG4gICAgcGFnZU5vOiAwLFxyXG4gICAgcGFnZVNpemU6IDIwLFxyXG4gICAgc29ydENvbHVtbk5hbWU6IFwiXCIsXHJcbiAgICBzb3J0T3JkZXI6IFwiXCIsXHJcbiAgICBzb3J0Q29sdW1uTmFtZXM6IFtdLFxyXG4gICAgc29ydE9yZGVyczogW10sXHJcbiAgICBmaWx0ZXJQYXJhbXM6IFtdLFxyXG4gICAgcGFyYW1ldGVyczogXCJcIixcclxuICAgIGZpbHRlcnM6IFwiXCIsXHJcbiAgICBjb2x1bW5zOiBcIlwiLFxyXG4gICAgZ3JhbnRUeXBlOiA0XHJcbiAgfTtcclxuXHJcbiAgZ3JpZFN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgY29sdW1uczogYW55W107XHJcbiAgdXNhYmxlQ29sdW1uczogYW55W107XHJcbiAgZWRpdGFibGVDb2x1bW5zOiBhbnlbXTtcclxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBwYWdlU2l6ZXM6IGJvb2xlYW4gfCBhbnlbXTtcclxuICBncmlkU3RvcmFnZUtleTogc3RyaW5nO1xyXG4gIGdyaWREZWZhdWx0U3RhdGVFeGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzTmV3OiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIGVkaXRlZFJvd0luZGV4OiBudW1iZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlLFxyXG4gICAgcHVibGljIGZvbnRBd2VTb21lU2VydmljZTogRm9udEF3ZVNvbWVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgekdyaWRTdGF0ZVBlcnNpc3RpbmdTZXJ2aWNlOiBaR3JpZFN0YXRlUGVyc2lzdGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB6Y29yZVNlcnZpY2U6IFpDb3JlU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgbWFpblNlcnZpY2U6IE1haW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKTtcclxuICAgIHRoaXMub2F1dGhVcmwgPSB0aGlzLnpjb3JlU2VydmljZS5nZXRFbnZpcm9ubWVudCgpLmUxT2F1dGhVcmwgKyBcIi9cIjtcclxuICAgIHRoaXMuYWxsUmVzdWx0cyA9IHRoaXMuYWxsUmVzdWx0cy5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5yZWZyZXNoRGF0YSA9IHRoaXMucmVmcmVzaERhdGEuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuY2xlYXJEYXRhID0gdGhpcy5jbGVhckRhdGEuYmluZCh0aGlzKTtcclxuICAgIHRoaXMuc2F2ZUdyaWRTZXR0aW5ncyA9IHRoaXMuc2F2ZUdyaWRTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5yZXN0b3JlR3JpZFNldHRpbmdzID0gdGhpcy5yZXN0b3JlR3JpZFNldHRpbmdzLmJpbmQodGhpcyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIEdyaWQgc2F2ZWQgc2V0dGluZyBrZXkoVXNlZCBpbiBDb29raWVTdG9yZSAmIExvY2FsU3RvcmFnZSlcclxuICAgIC8vIHRoaXMuYXV0aFNlcnZpY2UudXNlcklzQXV0aGVudGljYXRlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgLy8gICB0aGlzLmdyaWRTdG9yYWdlS2V5ID0gJ2lvbmljLWZpZWxkOjonICsgdGhpcy5hdXRoU2VydmljZS5lMVRva2VuLnVzZXJOYW1lICsgJzo6JyArIHRoaXMuZGF0YS5OYW1lICsgJzo6JyArIHRoaXMucm91dGVyLnVybDtcclxuICAgIC8vIH0pO1xyXG4gICAgLy8gY29uY2F0TWFwKCgpID0+IHtcclxuICAgIC8vICAgLy8gdHJ5IGdldCBncmlkc2V0dGluZyBmcm9tIGNvb2tpZXN0b3JlXHJcbiAgICAvLyAgIHJldHVybiB0aGlzLm1haW5TZXJ2aWNlLmNvb2tpZVN0b3JlR2V0KHRoaXMuZ3JpZFN0b3JhZ2VLZXksIHRoaXMuYXV0aFNlcnZpY2UuZTFUb2tlbi5hY2Nlc3NfdG9rZW4pO1xyXG4gICAgLy8gfSksXHJcbiAgICAvLyBzd2l0Y2hNYXAoc2F2ZWRHcmlkQ2FjaGUgPT4ge1xyXG4gICAgLy8gICBpZiAoc2F2ZWRHcmlkQ2FjaGUpIHtcclxuICAgIC8vICAgICAvLyBLZWVwIHRoZSBncmlkU2V0dGluZyBmcm9tIGNvb2tpZXN0b3JlIHRvIGxvY2FsU3RvcmFnZVxyXG4gICAgLy8gICAgIHRoaXMuekdyaWRTdGF0ZVBlcnNpc3RpbmdTZXJ2aWNlLnNldCh0aGlzLmdyaWRTdG9yYWdlS2V5LCBzYXZlZEdyaWRDYWNoZSk7XHJcbiAgICAvLyAgICAgcmV0dXJuIG9mKHRydWUpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICAvLyB9KSxcclxuICAgIHN1cGVyLnNldHVwSW5uZXJGaWVsZCgpO1xyXG4gICAgdGhpcy5zZXR1cEZpbHRlckZlYXR1cmUoKTtcclxuICAgIHRoaXMuc2V0dXBHcmlkQnV0dG9ucygpO1xyXG4gICAgdGhpcy5zZXR1cEdyaWRDb21wb25lbnRBdHRyaWJ1dGVzKCk7XHJcbiAgICB0aGlzLnNldHVwU3Vic2NyaXB0aW9uRm9yR3JpZFN1YmplY3QoKTtcclxuICAgIHRoaXMuc2V0dXBHcmlkU3RhdGUoKTtcclxuXHJcbiAgICBzdXBlci50cmFuc2xhdGVUb29sQmFySXRlbXMoKS5waXBlKHRhcCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZ3JpZENhbGxiYWNrKHRoaXMuZ3JvdXApO1xyXG4gICAgfSkpLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgY29uc3QgaXNCYWNrTmF2aWdhdGVkID0gKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJuYXZpZ2F0ZWRSZWxvYWRHcmlkXCIpID09PSAndHJ1ZScpO1xyXG5cclxuICAgIGlmIChpc0JhY2tOYXZpZ2F0ZWQpIHtcclxuICAgICAgaWYgKCF0aGlzLmlzVXNlTG9jYWxEYXRhKCkpIHtcclxuICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KFwibmF2aWdhdGVkUmVsb2FkR3JpZFwiLCBKU09OLnN0cmluZ2lmeShmYWxzZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBHcmlkIFN0YXRlIChwYWdpbmF0aW9uLCBzb3J0YWJsZSwgZmlsdGVyLCBvcmRlcmluZylcclxuICBnZXQgc3RhdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdGU7XHJcbiAgfVxyXG5cclxuICBzZXQgc3RhdGUoc3RhdGUpIHtcclxuICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRlRXhpc3QoKSB7XHJcbiAgICBjb25zdCB1c2VyR3JpZFN0YXRlID0gdGhpcy56R3JpZFN0YXRlUGVyc2lzdGluZ1NlcnZpY2UuZ2V0KHRoaXMuZ3JpZFN0b3JhZ2VLZXkpO1xyXG5cclxuICAgIGlmICh1c2VyR3JpZFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuZ3JpZERlZmF1bHRTdGF0ZUV4aXN0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmdyaWREZWZhdWx0U3RhdGVFeGlzdCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRhdGFTdGF0ZUNoYW5nZShzdGF0ZTogRGF0YVN0YXRlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgIHRoaXMuemdyaWQuZGF0YVN0YXRlQ2hhbmdlKHN0YXRlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXJhYmxlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc29ydGFibGUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2NrZWQoY29sU2V0dGluZzogYW55KSB7XHJcbiAgICBpZiAoY29sU2V0dGluZ1sncGlubmVkTGVmdCddID09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gR3JpZCBDb2x1bW5zXHJcbiAgcHVibGljIGlzU2VsZWN0T3B0aW9uKCkge1xyXG4gICAgbGV0IHNlbGVjdE9wdGlvbkV4aXN0ID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5zZWxlY3RhYmxlU2V0dGluZ3MgPSB7XHJcbiAgICAgICAgY2hlY2tib3hPbmx5OiBmYWxzZSxcclxuICAgICAgICBtb2RlOiAodGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMgPT0gXCJtdWx0aXBsZVwiKSA/IFwibXVsdGlwbGVcIiA6IFwic2luZ2xlXCJcclxuICAgICAgfTtcclxuICAgICAgc2VsZWN0T3B0aW9uRXhpc3QgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlbGVjdE9wdGlvbkV4aXN0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldENvbHVtbnMoY29sdW1uTmFtZTogc3RyaW5nLCBjb2x1bW5zOiBBcnJheTxaR3JpZEN1c3RvbUNvbHVtbj4pIHtcclxuICAgIHRoaXMuZ3JvdXBbY29sdW1uTmFtZV0gPSB0aGlzLndyYXBDb2x1bW5OYW1lc0luRmllbGRFbGVtZW50KGNvbHVtbnMpO1xyXG4gICAgdGhpcy5nZW5lcmF0ZUdyaWRDb2x1bW5zKCkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgJHNldENvbHVtbnMoY29sdW1uTmFtZTogc3RyaW5nLCBjb2x1bW5zOiBBcnJheTxaR3JpZEN1c3RvbUNvbHVtbj4pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgdGhpcy5ncm91cFtjb2x1bW5OYW1lXSA9IHRoaXMud3JhcENvbHVtbk5hbWVzSW5GaWVsZEVsZW1lbnQoY29sdW1ucyk7XHJcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZUdyaWRDb2x1bW5zKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdyYXBDb2x1bW5OYW1lc0luRmllbGRFbGVtZW50KGNvbHVtbkxpc3Q6IEFycmF5PFpHcmlkQ3VzdG9tQ29sdW1uPikge1xyXG4gICAgcmV0dXJuIG9mKGNvbHVtbkxpc3QubWFwKGMgPT4ge1xyXG4gICAgICBjb25zdCBpc0hpZGRlbjogYm9vbGVhbiA9IGMuSGlkZGVuO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIE5hbWU6IGMuTmFtZSxcclxuICAgICAgICBWYWx1ZTogYy5Db2RlLFxyXG4gICAgICAgIFR5cGU6IGMuVHlwZSxcclxuICAgICAgICBncmlkQ29sVmlzaWJsZTogIWlzSGlkZGVuLFxyXG4gICAgICAgIEVuYWJsZUdyaWRWYWx1ZTogYy5FbmFibGVHcmlkVmFsdWUgfHwgZmFsc2UsXHJcbiAgICAgICAgd2lkdGg6IDEwMCArIGMuTmFtZS5sZW5ndGggKiA0LFxyXG4gICAgICAgIGVuYWJsZUZpbHRlcmluZzogZmFsc2UsXHJcbiAgICAgICAgZW5hYmxlU29ydGluZzogdHJ1ZSxcclxuICAgICAgICBlbmFibGVQaW5uaW5nOiB0cnVlLFxyXG4gICAgICAgIERpdkNsYXNzOiBcImNvbC14cy0xMiBjb2wtc20tNlwiLFxyXG4gICAgICAgIElzRWRpdGFibGVJbkdyaWQ6IGMuRWRpdGFibGVcclxuICAgICAgfTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVHcmlkQ29sdW1ucygpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgZ3JpZFNldHRpbmcgPSB0aGlzLmdldEdyaWRTZXR0aW5ncygpO1xyXG5cclxuICAgIGNvbnN0IGNvbHVtbkZpZWxkcyQ6IE9ic2VydmFibGU8YW55PiA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShcclxuICAgICAgdGhpcy5kYXRhLkNvbHVtbkZpZWxkcyxcclxuICAgICAgdGhpcy5ncm91cFxyXG4gICAgKSB8fCBvZihbXSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmRhdGEuQ29sdW1uRmllbGRzKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignSW52YWxpZC9FbXB0eSBncmlkKCcgKyB0aGlzLmRhdGEuTmFtZSArICcpIGNvbHVtbkZpZWxkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjb2x1bW5GaWVsZHMkKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdGYWlsIHRvIGdlbmVyYXRlIGdyaWQgY29sdW1uIGZpZWxkcy4nKTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5kYXRhLkNvbHVtbkZpZWxkcyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb2x1bW5GaWVsZHMkLnBpcGUoXHJcbiAgICAgIHRhcChkYXRhID0+IHtcclxuICAgICAgICBpZiAoIWRhdGEpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZC9FbXB0eSBncmlkKCcgKyB0aGlzLmRhdGEuTmFtZSArICcpIGRhdGEgdG8gZ2VuZXJhdGUgY29sdW1uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgZmllbGROYW1lID0gdGhpcy5kYXRhWydGaWVsZEVsZW1lbnROYW1lJ107XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgICAgIGNvbnN0IHVzYWJsZUNvbHVtbk5hbWVzID0gW107XHJcbiAgICAgICAgICBaQ29tcG9uZW50SGVscGVyLmdldEdyaWRDb2x1bW5zKGRhdGEsXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucyxcclxuICAgICAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICAgICAgZ3JpZFNldHRpbmcsXHJcbiAgICAgICAgICAgIHVzYWJsZUNvbHVtbk5hbWVzLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGEpO1xyXG5cclxuICAgICAgICAgIGlmICh1c2FibGVDb2x1bW5OYW1lcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNhYmxlQ29sdW1ucyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCB1c2FibGVDb2xGaWVsZHMgPSB1c2FibGVDb2x1bW5OYW1lcy5tYXAodSA9PiAoeyBmaWVsZDogdSwgVmlzaWJsZTogdHJ1ZSwgSXNSZXF1aXJlZDogZmFsc2UsIFZhbHVlOiB1IH0pKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiB1c2FibGVDb2xGaWVsZHMpIHtcclxuICAgICAgICAgICAgICB0aGlzLnVzYWJsZUNvbHVtbnMucHVzaChmaWVsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBzdXBlci50cmFuc2xhdGVDb2x1bW5IZWFkZXIodGhpcy5jb2x1bW5zKTtcclxuICAgICAgfSksXHJcbiAgICAgIC8vc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgLy8gIC8vR2V0IFNlc3Npb25cclxuICAgICAgLy8gIHJldHVybiB0aGlzLmdldEdyaWRTZXNzaW9uRmlsdGVyKHRoaXMuZ3JwLCB0aGlzKTtcclxuICAgICAgLy99KSxcclxuICAgICAgLy9zd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAvLyAgLy9CZWZvcmUgZ2V0IGdyaWQgZGF0YVxyXG4gICAgICAvLyAgcmV0dXJuIHRoaXMuYmVmb3JlR3JpZEdldERhdGEodGhpcy5ncnAsIHRoaXMpO1xyXG4gICAgICAvL30pLFxyXG4gICAgICAvL3N3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgIC8vICAvL1NldCBncmlkIGRhdGFcclxuICAgICAgLy8gIHJldHVybiB0aGlzLnNldEdyaWRTZXNzaW9uRmlsdGVyKHRoaXMuZ3JwLCB0aGlzKTtcclxuICAgICAgLy99KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldEljb25OYW1lKGdyaWRDZWxsUmVwbGFjZVZhbHVlOiBhbnksIHZhbHVlOiBhbnkpIHtcclxuICAgIGlmIChncmlkQ2VsbFJlcGxhY2VWYWx1ZSAmJiBncmlkQ2VsbFJlcGxhY2VWYWx1ZVt2YWx1ZV0pIHtcclxuICAgICAgcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuZ2V0Rm9udEF3ZXNvbWUoZ3JpZENlbGxSZXBsYWNlVmFsdWVbdmFsdWVdLCB0aGlzLmZvbnRBd2VTb21lU2VydmljZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGdyaWQgc3R5bGluZ1xyXG4gIHB1YmxpYyBjZWxsU3R5bGVDb25kaXRpb24oY29sLCBjb2xWYWx1ZTogYW55KSB7XHJcbiAgICBpZiAoY29sWydDZWxsU3R5bGVDb25kaXRpb24nXSkge1xyXG4gICAgICBjb25zdCBjb25kaXRpb25IaWdobGlnaHRjb2w6IFtdID0gY29sWydDZWxsU3R5bGVDb25kaXRpb24nXTtcclxuICAgICAgbGV0IGNvbmRpdGlvblJlc3VsdCA9IGZhbHNlO1xyXG5cclxuICAgICAgY29uZGl0aW9uSGlnaGxpZ2h0Y29sLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgaWYgKCFjb25kaXRpb25SZXN1bHQpIHtcclxuICAgICAgICAgIGlmIChkYXRhWydWYWx1ZSddID09IGNvbFZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiBjb25kaXRpb25SZXN1bHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Q2VsbFN0eWxlQ29uZGl0aW9uKGNvbCwgY29sVmFsdWU6IGFueSkge1xyXG4gICAgaWYgKGNvbFsnQ2VsbFN0eWxlQ29uZGl0aW9uJ10pIHtcclxuICAgICAgY29uc3QgY29uZGl0aW9uSGlnaGxpZ2h0Y29sOiBbXSA9IGNvbFsnQ2VsbFN0eWxlQ29uZGl0aW9uJ107XHJcbiAgICAgIGxldCBjb25kaXRpb25SZXN1bHQgPSAnJztcclxuXHJcbiAgICAgIGNvbmRpdGlvbkhpZ2hsaWdodGNvbC5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhWydWYWx1ZSddID09IGNvbFZhbHVlKSB7XHJcbiAgICAgICAgICBpZiAoZGF0YVsnQmFja2dyb3VuZENvbG9yJ10pIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ID0gJ2JhY2tncm91bmQtY29sb3I6JyArIGRhdGFbJ0JhY2tncm91bmRDb2xvciddICsgJzsnO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChkYXRhWydDb2xvciddKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCArPSAnY29sb3I6JyArIGRhdGFbJ0NvbG9yJ10gKyAnOyc7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGRhdGFbJ1N0eWxlRXhwcmVzc2lvbiddKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCArPSBkYXRhWydTdHlsZUV4cHJlc3Npb24nXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIGNvbmRpdGlvblJlc3VsdDtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBPbmNlbGwgY2xpY2sgaGFuZGxpbmdcclxuICAvLyAxLiBpbkNlbGwgRWRpdFxyXG4gIC8vIDIuIE9uSXRlbUNsaWNrXHJcbiAgLy8gMy4gTmF2aWdhdGUgdG8gRm9ybSBQYWdlXHJcbiAgLy8gNC4gU2hvdyBGb3JtIFBhZ2UgaW4gdGhlIHNhbWUgcGFnZSAoREVDIGFuZCBEcmF3ZXIpXHJcbiAgcHVibGljIGNlbGxDbGlja0hhbmRsZXIoZXZlbnQ6IENlbGxDbGlja0V2ZW50KSB7XHJcbiAgICBjb25zdCBkaXNhYmxlQWxsQ29sdW1uQ2VsbENsaWNrSGFuZGxlciA9IHRoaXMuZGF0YS5EaXNhYmxlQ2VsbENsaWNrSGFuZGxlciA/IHRoaXMuZGF0YS5EaXNhYmxlQ2VsbENsaWNrSGFuZGxlciA6IGZhbHNlO1xyXG4gICAgY29uc3QgaXNDb21tYW5kQ29sdW1uID0gZXZlbnQuY29sdW1uLmNvbnN0cnVjdG9yLm5hbWUgPT0gJ0NvbW1hbmRDb2x1bW5Db21wb25lbnQnID8gdHJ1ZSA6IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLnRvb2x0aXBEaXIpIHtcclxuICAgICAgdGhpcy50b29sdGlwRGlyLmhpZGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWRpc2FibGVBbGxDb2x1bW5DZWxsQ2xpY2tIYW5kbGVyICYmICFpc0NvbW1hbmRDb2x1bW4pIHtcclxuICAgICAgY29uc3QgaW5DZWxsRWRpdGFibGUgPSB0aGlzLmRhdGEuSW5DZWxsRWRpdGFibGUgPyB0aGlzLmRhdGEuSW5DZWxsRWRpdGFibGUgOiBmYWxzZTtcclxuICAgICAgaWYgKGluQ2VsbEVkaXRhYmxlKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0YWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKHMgPT4gcy5pc0VkaXRhYmxlSW5EYXRhSXRlbSA9PT0gdHJ1ZSk7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5lZGl0YWJsZUNvbHVtbnMpIHtcclxuICAgICAgICAgIHRoaXMuZWRpdGFibGVDb2x1bW5zLm1hcChzID0+IGV2ZW50LnNlbmRlci5lZGl0Q2VsbChldmVudC5yb3dJbmRleCwgZXZlbnQuY29sdW1uSW5kZXgsIHRoaXMuY3JlYXRlRm9ybUdyb3VwKGV2ZW50LmRhdGFJdGVtLCBzLmZpZWxkKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImNlbGxDbGljayBldmVudDogXCIsIGV2ZW50KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5Pbkl0ZW1DbGljaykge1xyXG4gICAgICAgICAgY29uc3QgZnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuT25JdGVtQ2xpY2spO1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgICAgICAgY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIC8vIHN0b3JlIGNsaWNrZWQgaWQgYW5kIGFjdGlvbiBhcyBlZGl0IHRvIHRoZSBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICAgIC8vIE9uSXRlbUNsaWNrLCBwcm9qZWN0IGhhdmUgdG8gc2V0IHRoZW1zZWxmLlxyXG4gICAgICAgICAgdGhpcy5tYWluU2VydmljZS5zZXROYXZpZ2F0aW9uUGFyYW1zKFtldmVudC5kYXRhSXRlbS5JZCwgJ2VkaXQnXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmVkaXRNb2RlbChldmVudC5kYXRhSXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0Q2VsbENsb3NlSGFuZGxlcihhcmdzOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgZm9ybUdyb3VwLCBkYXRhSXRlbSB9ID0gYXJncztcclxuICAgIGlmICghZm9ybUdyb3VwLnZhbGlkKSB7XHJcbiAgICAgIGFyZ3MucHJldmVudERlZmF1bHQoKTtcclxuICAgIH0gZWxzZSBpZiAoZm9ybUdyb3VwLmRpcnR5KSB7XHJcbiAgICAgIHRoaXMuZWRpdGFibGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihzID0+IHMuaXNFZGl0YWJsZUluRGF0YUl0ZW0gPT09IHRydWUpO1xyXG4gICAgICB0aGlzLmVkaXRhYmxlQ29sdW1ucy5tYXAocyA9PlxyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YUl0ZW0sIHsgW3MuZmllbGRdOiBmb3JtR3JvdXAudmFsdWVbcy5maWVsZF0gfSkpO1xyXG4gICAgICB0aGlzLm15U2VsZWN0aW9uLm1hcChzID0+IChzLklkID09PSBkYXRhSXRlbS5JZCkgPyBPYmplY3QuYXNzaWduKHMsIGRhdGFJdGVtKSA6IG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uTmF2aWdhdGVUbyhldmVudDogYW55LCBjbGlja0FjdGlvbjogYW55LCByb3dEYXRhOiBhbnksIGNlbGxEYXRhOiBzdHJpbmcpIHtcclxuICAgIC8vIGNvbnN0IG4gPSBjb2xTZXR0aW5nLm5hdmlnYXRlVG8ucmVwbGFjZSgnLzppZCcsIGNlbGxEYXRhKTtcclxuICAgIGNvbnN0IG4gPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgY2xpY2tBY3Rpb24uQ2xpY2spO1xyXG4gICAgaWYgKG4pIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiAnemdyaWQtb25OYXZpZ2F0ZVRvJyxcclxuICAgICAgICB0YXJnZXQ6IGNsaWNrQWN0aW9uLkNsaWNrLFxyXG4gICAgICAgIHJvd0RhdGE6IHJvd0RhdGEsXHJcbiAgICAgICAgZGF0YTogY2VsbERhdGFcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlZGl0TW9kZWwoZGF0YUl0ZW06IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5FZGl0Q2xpY2tVUkwpIHtcclxuICAgICAgLy8gRWRpdCBpbmNlbGwgZmllbGRcclxuICAgICAgY29uc3QgY29sRmllbGRzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5Db2x1bW5GaWVsZHMsIHRoaXMuZ3JvdXApO1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogXCJ6Z3JpZC1jZWxsQ2xpY2tcIixcclxuICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YS5FZGl0Q2xpY2tVUkwsXHJcbiAgICAgICAgZGF0YTogZGF0YUl0ZW0sXHJcbiAgICAgICAgY29sdW1uRmllbGRzJDogY29sRmllbGRzXHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuZGF0YVsnQ29udGFpbmVyRm9ybSddKSB7XHJcbiAgICAgIHRoaXMuc2hvd0Zvcm1QYWdlLmVtaXQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZ3JvdXAuZWRpdE1vZGVsVVJMXSwge1xyXG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgLy9za2lwTG9jYXRpb25DaGFuZ2U6IGZhbHNlXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8vLyBXaGVuIGNsaWNrZWQgcm91dGUgdG8gcGFnZVxyXG4gICAgICAvL3RoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmdyb3VwLmVkaXRNb2RlbFVSTCwgZGF0YUl0ZW0uSWQsICdlZGl0J10sIHtcclxuICAgICAgLy8gIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGVcclxuICAgICAgLy99KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkJ0bkNsaWNrKGV2ZW50OiBhbnksIGNvbFNldHRpbmc6IGFueSwgcm93RGF0YTogYW55LCBjZWxsRGF0YTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm9uTmF2aWdhdGVUbyhldmVudCwgY29sU2V0dGluZywgcm93RGF0YSwgY2VsbERhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtR3JvdXAoZGF0YUl0ZW06IGFueSwgZmllbGROYW1lOiBhbnkpOiBGb3JtR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBbZmllbGROYW1lXTogZGF0YUl0ZW1bZmllbGROYW1lXVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gSGVscGVyIGZ1bmN0aW9uc1xyXG4gIHB1YmxpYyBnZXRDbGFzcyhkYXRhSXRlbTogYW55LCBjb2w6IGFueSkge1xyXG4gICAgbGV0IG5nQ2xhc3MgPSBcImdyaWRDZWxsIFwiO1xyXG4gICAgaWYgKGNvbC5maWVsZFR5cGUgPT09ICdudW1iZXInIHx8IGNvbC5maWVsZFR5cGUgPT09ICdjdXJyZW5jeScgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3pudW1lcmljJykge1xyXG4gICAgICBuZ0NsYXNzICs9IFwicmlnaHRBbGlnbmVkIFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhSXRlbVtjb2wuZmllbGQgKyAnX0NsYXNzJ10pIHtcclxuICAgICAgbmdDbGFzcyArPSBkYXRhSXRlbVtjb2wuZmllbGQgKyAnX0NsYXNzJ10gKyBcIiBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sLkNsYXNzKSB7XHJcbiAgICAgIG5nQ2xhc3MgKz0gY29sLkNsYXNzICsgXCIgXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbC5Qb3BPdmVyQ29udGVudCkge1xyXG4gICAgICBuZ0NsYXNzICs9IFwiIHdpdGhQb3BvdmVySW5HcmlkXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5nQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rm9ybWF0KGNvbDogYW55LCBkZWZhdWx0Rm9ybWF0PzogYW55KSB7XHJcbiAgICBsZXQgZm9ybWF0ID0gXCJcIjtcclxuICAgIGlmIChjb2wuRm9ybWF0T3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGZvcm1hdCA9IGRlZmF1bHRGb3JtYXQgPyBkZWZhdWx0Rm9ybWF0IDogXCJcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGZvcm1hdEFyciA9IGNvbC5Gb3JtYXRPcHRpb25zLnNwbGl0KFwiLlwiKVxyXG4gICAgICBsZXQgZHAgPSAwO1xyXG5cclxuICAgICAgaWYgKGZvcm1hdEFyci5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgZHAgPSBmb3JtYXRBcnJbMV0ubGVuZ3RoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZHAgIT09IDApIHtcclxuICAgICAgICBmb3JtYXQgPSBcIjEuXCIgKyBkcCArIFwiLVwiICsgZHA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWxsUmVzdWx0cygpOiBPYnNlcnZhYmxlPEV4Y2VsRXhwb3J0RGF0YT4ge1xyXG4gICAgY29uc3QgX3pncmlkQ29udHJvbCA9IHRoaXMuemdyaWQgYXMgWkdyaWQ7XHJcbiAgICBjb25zdCBfemdyaWRDb21wb25lbnQgPSB0aGlzLnpncmlkLmdyaWQgYXMgR3JpZENvbXBvbmVudDtcclxuICAgIGNvbnN0IF9kYXRhID0gX3pncmlkQ29tcG9uZW50LmRhdGEgYXMgR3JpZERhdGFSZXN1bHQ7XHJcblxyXG4gICAgY29uc3QgcGFnaW5hdGlvbkFwaVBvc3RVcmwgPSBfemdyaWRDb250cm9sLnBhZ2luYXRpb25BcGlQb3N0VXJsO1xyXG5cclxuICAgIC8vIE5lZWQgdG8gY2xvbmUsIGlmIG5vdCB3aWxsIGFmZmVjdCB0aGUgZ3JpZCBwYXJhbXMuXHJcbiAgICBjb25zdCBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnBhcmFtcyk7XHJcbiAgICBwYXJhbXMucGFnZU5vID0gMDtcclxuICAgIHBhcmFtcy5wYWdlU2l6ZSA9IF9kYXRhLnRvdGFsO1xyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKHBhZ2luYXRpb25BcGlQb3N0VXJsLCBwYXJhbXMpLnBpcGUoXHJcbiAgICAgIG1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0OiBFeGNlbEV4cG9ydERhdGEgPSB7XHJcbiAgICAgICAgICBkYXRhOiBwcm9jZXNzKGRhdGEuZGF0YVNldCwge30pLmRhdGFcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWZyZXNoR3JpZChldmVudDogWkNvbXBvbmVudE91dHB1dEV2ZW50LCBncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICBjb25zdCBfZ3JpZE9wdGlvblNlZ21lbnQgPSBldmVudC50YXJnZXQudHJpbSgpLnNwbGl0KCcuJyk7XHJcbiAgICBjb25zdCBfZ3JpZE9wdGlvbiA9IF9ncmlkT3B0aW9uU2VnbWVudFsxXTtcclxuICAgIGlmIChfZ3JpZE9wdGlvbikge1xyXG4gICAgICBjb25zdCB6Z3JpZENvbnRyb2wgPSBncm91cFtfZ3JpZE9wdGlvbl0gYXMgWkdyaWQ7XHJcbiAgICAgIGlmICh6Z3JpZENvbnRyb2wpIHtcclxuICAgICAgICB6Z3JpZENvbnRyb2wuZ2V0RGF0YSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdVbmFibGUgdG8gZmluZCBncmlkIHZhbHVlOiAnICsgX2dyaWRPcHRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnSW52YWxpZCByZWZyZXNoR3JpZCBldmVudDogJywgZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZnJlc2hEYXRhKCkge1xyXG4gICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJEYXRhKCkge1xyXG4gICAgdGhpcy56Z3JpZC5jbGVhckRhdGEoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93VG9vbHRpcChlOiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kYXRhLklzU2hvd1Rvb2xUaXAgPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGVsZW1lbnQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICBsZXQgaXNDb21tYW5kQ29sdW1uID0gZmFsc2U7XHJcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICBpZiAoZGF0YSA9PSAnay1jb21tYW5kLWNlbGwnKSB7XHJcbiAgICAgICAgaXNDb21tYW5kQ29sdW1uID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCgoZWxlbWVudC5ub2RlTmFtZSA9PT0gJ1REJyB8fCBlbGVtZW50Lm5vZGVOYW1lID09PSAnVEgnKSAmJiBlbGVtZW50Lm9mZnNldFdpZHRoIDwgZWxlbWVudC5zY3JvbGxXaWR0aCkgJiYgIWlzQ29tbWFuZENvbHVtbikge1xyXG4gICAgICB0aGlzLnRvb2x0aXBEaXIudG9nZ2xlKGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMudG9vbHRpcERpci5oaWRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcm93U2VsZWN0aW9uS2V5KGNvbnRleHQ6IFJvd0FyZ3MpOiBhbnkge1xyXG4gICAgcmV0dXJuIGNvbnRleHQuZGF0YUl0ZW07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRWYWx1ZXMoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm15U2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy56Z3JpZCkge1xyXG4gICAgICB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB7fTtcclxuICAgICAgdGhpcy56Z3JpZC5nZXREYXRhQmluZGluZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEdyaWREYXRhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNVc2VMb2NhbERhdGEoKSA/ICh0aGlzLnpncmlkLmRhdGEgfHwgdGhpcy56Z3JpZC5vcmlnaW5hbERhdGEpIDogKHRoaXMuemdyaWQuZ3JpZC5kYXRhICYmIHRoaXMuemdyaWQuZ3JpZC5kYXRhLmRhdGEgPyB0aGlzLnpncmlkLmdyaWQuZGF0YS5kYXRhIDogW10pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERhdGEgPSAoZ0RhdGE6IGFueSkgPT4ge1xyXG4gICAgaWYgKHRoaXMuemdyaWQpIHtcclxuICAgICAgaWYgKHRoaXMuaXNVc2VMb2NhbERhdGEoKSkge1xyXG4gICAgICAgIHRoaXMuemdyaWQuZGF0YSA9IGdEYXRhO1xyXG4gICAgICAgIHRoaXMuc2V0RGF0ZUNvbEZvckZpbHRlcmluZygpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuemdyaWQuZ3JpZC5kYXRhID0ge1xyXG4gICAgICAgICAgZGF0YTogZ0RhdGEsXHJcbiAgICAgICAgICB0b3RhbDogZ0RhdGEudG90YWxDb3VudFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldHVwR3JpZFdpdGhJbmxpbmVFZGl0KCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ3pncmlkIGlzIG51bGwgZm9yIHNldERhdGEuJyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0SGVhZGVyVGV4dChjb2x1bW5OYW1lOiBzdHJpbmcsIG5ld0hlYWRlclRpdGxlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGdyaWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG4gICAgZ3JpZENvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGNvbC5OYW1lID09PSBjb2x1bW5OYW1lKSB7XHJcbiAgICAgICAgY29sLnRpdGxlID0gbmV3SGVhZGVyVGl0bGU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRyYWNrQnkoaW5kZXg6IG51bWJlciwgaXRlbTogR3JpZEl0ZW0pOiBhbnkge1xyXG4gICAgLy9jb25zb2xlLmxvZyhpdGVtLmRhdGFbJ0lkJ10gfHwgaW5kZXgpO1xyXG4gICAgcmV0dXJuIGluZGV4O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1VzZUxvY2FsRGF0YSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmRhdGEuRGF0YVNvdXJjZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAvL3JldHVybiBaQ29tcG9uZW50SGVscGVyLmlzTnVsbFVuZGVmaW5lZEVtcHR5KHRoaXMuZGF0YS5SZXNvdXJjZVVSTCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gZ3JpZCBzZXR1cFxyXG4gIHB1YmxpYyBncmlkQ2FsbGJhY2soZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YVsnQWZ0ZXJsb2FkQ2FsbGJhY2snXSkge1xyXG4gICAgICBjb25zdCBtZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMpO1xyXG5cclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6IFwiemdyaWQtQWZ0ZXJsb2FkQ2FsbGJhY2tcIixcclxuICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YVsnQWZ0ZXJsb2FkQ2FsbGJhY2snXSxcclxuICAgICAgICBkYXRhOiBtZVxyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwR3JpZENvbXBvbmVudEF0dHJpYnV0ZXMoKSB7XHJcbiAgICAvLyBHcmlkIGRlZmF1bHQgc2V0dGluZ1xyXG4gICAgdGhpcy5ncmlkVGl0bGUgPSB0aGlzLmRhdGEuVGl0bGU7XHJcbiAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgIHRoaXMuX3N0YXRlLnRha2UgPSB0aGlzLmRhdGEuUGFnZVNpemUgfHwgMjA7XHJcbiAgICB0aGlzLnBhZ2VTaXplcyA9IFs1LCAxMCwgMjAsIDUwLCAxMDAsIDIwMCwgNTAwXTsgLy8gdG8gYmUgZW5oYW5jZWQ6IGN1c3RvbSBwYWdlIHNpemVzXHJcbiAgICB0aGlzLnByZXZpb3VzTmV4dCA9IHRoaXMuZGF0YVsnRW5hYmxlUHJldmlvdXNOZXh0QnV0dG9uJ10gfHwgZmFsc2U7XHJcblxyXG4gICAgLy8gW01vYmlsZV0gRGlzYWJsZSBQYWdlU2l6ZVxyXG4gICAgaWYgKHRoaXMuZGF0YS5QYWdlU2l6ZXMgPT09IGZhbHNlIHx8IFpDb21wb25lbnRIZWxwZXIuaXNNb2JpbGVTY3JlZW4oKSkge1xyXG4gICAgICB0aGlzLnBhZ2VTaXplcyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnZWFibGUgPSB0aGlzLmRhdGEucGFnZUFibGUgIT0gdW5kZWZpbmVkID8gdGhpcy5kYXRhLnBhZ2VBYmxlIDogeyByZXNwb25zaXZlOiB0cnVlLCBidXR0b25Db3VudDogMywgcGFnZVNpemVzOiB0aGlzLnBhZ2VTaXplcywgcHJldmlvdXNOZXh0OiB0aGlzLnByZXZpb3VzTmV4dCB9O1xyXG5cclxuICAgIC8vIEdyaWQgU2VsZWN0aW9uIGNvbHVtblxyXG4gICAgaWYgKHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0YWJsZVNldHRpbmdzID0ge1xyXG4gICAgICAgIC8vIGNoZWNrYm94T25seTogdGhpcy5jaGVja2JveE9ubHksXHJcbiAgICAgICAgbW9kZTogdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMgPT09ICdzaW5nbGUnID8gJ3NpbmdsZScgOiAnbXVsdGlwbGUnXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYmluZCB0aGlzIHRvIGdyb3VwIHVzaW5nIEdyaWQgdmFsdWVcclxuICAgIGlmICh0aGlzLmRhdGEuVmFsdWUuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgY29uc3QgZ3JpZFZhbHVlID0gdGhpcy5kYXRhLlZhbHVlLnNsaWNlKDYpO1xyXG4gICAgICB0aGlzLmdyb3VwW2dyaWRWYWx1ZV0gPSB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNsZWFyIGFueSBTdWJzY3JpcHRpb25cclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cFN1YnNjcmlwdGlvbkZvckdyaWRTdWJqZWN0KCkge1xyXG4gICAgLy8gc3Vic2NyaWJlIHRvIHNldCBncmlkIHNldHRpbmcgZnJvbSBkaXJlY3RpdmUgdG8gY29tcG9uZW50XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuZ3JpZFN1YmplY3QucGlwZShcclxuICAgICAgdGFwKGdyaWQgPT4ge1xyXG4gICAgICAgIHRoaXMuemdyaWQgPSBncmlkO1xyXG4gICAgICAgIHRoaXMuX3N0YXRlID0gdGhpcy56Z3JpZC5zdGF0ZTtcclxuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLnpncmlkLmdyaWRDb2x1bW5zO1xyXG5cclxuICAgICAgICB0aGlzLnNldERhdGVDb2xGb3JGaWx0ZXJpbmcoKTtcclxuICAgICAgICB0aGlzLnNldHVwR3JpZFdpdGhJbmxpbmVFZGl0KCk7XHJcbiAgICAgICAgdGhpcy5zZXR1cFBvcG92ZXJGZWF0dXJlKHRoaXMuY29sdW1ucywgdGhpcy5nZXRHcmlkRGF0YSgpKTtcclxuICAgICAgfSksXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb2x1bW5IZWFkZXJUcmFuc2xhdGVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzQ29sdW1uSGVhZGVyVHJhbnNsYXRlZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLnRyYW5zbGF0ZUNvbHVtbkhlYWRlcih0aGlzLmNvbHVtbnMpO1xyXG4gICAgICB9KVxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBHcmlkU3RhdGUoKSB7XHJcbiAgICAvLyBDaGVjayBHcmlkIHNldHRpbmcgZXhpc3QgaW4gbG9jYWxzdG9yYWdlXHJcbiAgICB0aGlzLnN0YXRlRXhpc3QoKTtcclxuXHJcbiAgICAvLyBTZXQgRmlsdGVyIFNlc3Npb25LZXlcclxuICAgIGlmICh0aGlzLmRhdGFbJ1NhdmVGaWx0ZXInXSkge1xyXG4gICAgICB0aGlzLnNldEdyaWRTZXNzaW9uS2V5KHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEdyaWRCdXR0b25zKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGIHx8IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lKSB7XHJcbiAgICAgIHRoaXMuZ3JpZEJ0biA9IHtcclxuICAgICAgICBSZWFkT25seTogZmFsc2UsXHJcbiAgICAgICAgVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBJc1JlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICBXb3JrZmxvd0NvZGU6IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGLFxyXG4gICAgICAgIFZhbHVlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZSxcclxuICAgICAgICBUeXBlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZV9XRiA/IFwiendvcmtmbG93YnV0dG9uc1wiIDogXCJ6YnV0dG9uc1wiXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGF0ZUNvbEZvckZpbHRlcmluZygpIHtcclxuICAgIGNvbnN0IGdyaWREYXRhID0gdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG4gICAgaWYgKHRoaXMuaXNVc2VMb2NhbERhdGEoKSAmJiBncmlkRGF0YSAmJiBncmlkRGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGRhdGVDb2wgPSBPYmplY3Qua2V5cyhncmlkRGF0YVswXSkuZmlsdGVyKHggPT4geC5pbmNsdWRlcyhcIkRhdGVcIikgJiYgIXguZW5kc1dpdGgoQ29tcG9uZW50Q29uc3RhbnQuR3JpZENvbERhdGVGaWx0ZXJTdWZmaXgpKTtcclxuICAgICAgaWYgKGRhdGVDb2wgJiYgZGF0ZUNvbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZ3JpZERhdGEuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgIGRhdGVDb2wuZm9yRWFjaChjb2xOYW1lID0+IHtcclxuICAgICAgICAgICAgZGF0YVtgJHtjb2xOYW1lfSR7Q29tcG9uZW50Q29uc3RhbnQuR3JpZENvbERhdGVGaWx0ZXJTdWZmaXh9YF0gPSBuZXcgRGF0ZShkYXRhW2NvbE5hbWVdKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gR3JpZCBjb25maWd1cmF0aW9uIGZ1bmN0aW9uXHJcbiAgcHVibGljIHNldEdyaWRTZXNzaW9uS2V5KGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGlmIChncm91cFtcIkdyaWRTdG9yYWdlS2V5XCJdKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBncm91cFtcIkdyaWRTdG9yYWdlS2V5XCJdID0gJ3pncmlkXycgKyBncm91cC5yZXNvdXJjZVVSTCArICdfJyArIHRoaXMuZGF0YS5WYWx1ZSArICc6OicgKyB0aGlzLmF1dGhTZXJ2aWNlLmUxVG9rZW4udXNlck5hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZUdyaWRTZXR0aW5ncygpOiB2b2lkIHtcclxuICAgIGNvbnN0IF96Z3JpZENvbXBvbmVudCA9IHRoaXMuemdyaWQuZ3JpZCBhcyBHcmlkQ29tcG9uZW50O1xyXG4gICAgY29uc3QgX2NvbHVtbnMgPSBfemdyaWRDb21wb25lbnQuY29sdW1ucztcclxuXHJcbiAgICBvZih0aGlzLmNvbHVtbnMpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjb25maWdWYWx1ZTogWkdyaWRDb2x1bW5TZXR0aW5nc1tdID0gX2NvbHVtbnMudG9BcnJheSgpLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgICAgY29uc3QgX3pHcmlkQ29sdW1uU2V0dGluZ3M6IFpHcmlkQ29sdW1uU2V0dGluZ3MgPSBPYmplY3Qua2V5cyhpdGVtKVxyXG4gICAgICAgICAgICAgIC5maWx0ZXIocHJvcE5hbWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICFwcm9wTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd0ZW1wbGF0ZScpXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IChcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgLi4uYWNjLFxyXG4gICAgICAgICAgICAgICAgICAuLi57IFtjdXJyXTogaXRlbVtjdXJyXSB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLCB7fSBhcyBaR3JpZENvbHVtblNldHRpbmdzKTtcclxuICAgICAgICAgICAgcmV0dXJuIF96R3JpZENvbHVtblNldHRpbmdzO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgLy8gcmVtb3ZlIGV4dHJhIGVsZW1lbnQgZm9ybSBhcnJheVxyXG4gICAgICAgICAgY29uZmlnVmFsdWUuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgZGVsZXRlIGl0ZW1bJ2hlYWRlclN0eWxlJ107XHJcbiAgICAgICAgICAgIGRlbGV0ZSBpdGVtWydfX25nQ29udGV4dF9fJ107XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBjb25zdCBncmlkU2V0dGluZzogWkdyaWRTZXR0aW5ncyA9IHtcclxuICAgICAgICAgICAgLy8gc3RhdGU6IHRoaXMuc3RhdGUsXHJcbiAgICAgICAgICAgIGNvbHVtbnNDb25maWc6IGNvbmZpZ1ZhbHVlXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIC8vIEZpbmQgYW55IHNldHRpbmcgZnJvbSBsb2NhbHN0b3JhZ2UgYW5kIHVwZGF0ZSwgaWYgbm90IGp1c3QgYWRkIGluLlxyXG4gICAgICAgICAgbGV0IF9hcnJHcmlkQ2FjaGluZzogR3JpZENhY2hpbmdbXSA9IHRoaXMuekdyaWRTdGF0ZVBlcnNpc3RpbmdTZXJ2aWNlLmdldCh0aGlzLmdyaWRTdG9yYWdlS2V5KTtcclxuICAgICAgICAgIGxldCBfZ3JpZENvbmZpZzogR3JpZENhY2hpbmcgPSBudWxsO1xyXG4gICAgICAgICAgaWYgKF9hcnJHcmlkQ2FjaGluZyAmJiBfYXJyR3JpZENhY2hpbmdbMF0pIHtcclxuICAgICAgICAgICAgX2dyaWRDb25maWcgPSBfYXJyR3JpZENhY2hpbmcuZmluZCh4ID0+IHhbJ2RhdGFGb3JtRmllbGRzJ10gPT09IHRoaXMuZ3JpZFN0b3JhZ2VLZXkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF9ncmlkQ29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgX2dyaWRDb25maWcuZ3JpZFNldHRpbmdzID0gZ3JpZFNldHRpbmc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBfYXJyR3JpZENhY2hpbmcgPSBbXTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoIV9ncmlkQ29uZmlnKSB7XHJcbiAgICAgICAgICAgIF9ncmlkQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgIGRhdGFGb3JtRmllbGRzOiB0aGlzLmdyaWRTdG9yYWdlS2V5LFxyXG4gICAgICAgICAgICAgIGdyaWRTZXR0aW5nczogZ3JpZFNldHRpbmdcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIF9hcnJHcmlkQ2FjaGluZy5wdXNoKF9ncmlkQ29uZmlnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBfYXJyR3JpZENhY2hpbmc7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY29uY2F0TWFwKGdyaWRDYWNoZSA9PiB7XHJcbiAgICAgICAgICAvLyBTYXZlIGdyaWQgY2FjaGluZyB0byBsb2NhbHN0b3JhZ2VcclxuICAgICAgICAgIHRoaXMuekdyaWRTdGF0ZVBlcnNpc3RpbmdTZXJ2aWNlLnNldCh0aGlzLmdyaWRTdG9yYWdlS2V5LCBncmlkQ2FjaGUpO1xyXG4gICAgICAgICAgLy8gU2F2ZSB0byBDb29raWVTdG9yZVxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMubWFpblNlcnZpY2UuY29va2llU3RvcmVQb3N0KHRoaXMuZ3JpZFN0b3JhZ2VLZXksIGdyaWRDYWNoZSk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFwKHNhdmVkR3JpZENhY2hlID0+IHtcclxuICAgICAgICAgIC8vIGNoZWNrIGlzIHNhdmVkIHN0YXRlIGV4aXN0IHRvIGVuYWJsZS9oaWRlIHJlc3RvcmUgYnV0dG9uXHJcbiAgICAgICAgICB0aGlzLnN0YXRlRXhpc3QoKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgLy8gQWxlcnRcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coJ0dyaWQgU2V0dGluZyBTYXZlZCcsIFwidG9wXCIsIHRydWUsIDIwMDAsICdzdWNjZXNzJyk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXN0b3JlR3JpZFNldHRpbmdzKCkge1xyXG4gICAgb2YodHJ1ZSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgIC8vIENsZWFyIGxvY2Fsc3RvcmFnZSBncmlkIHNldHRpbmdcclxuICAgICAgICAgIHRoaXMuekdyaWRTdGF0ZVBlcnNpc3RpbmdTZXJ2aWNlLnJlbW92ZSh0aGlzLmdyaWRTdG9yYWdlS2V5KTtcclxuICAgICAgICAgIHJldHVybiBvZih0cnVlKVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAvLyBkZWxldGUgY29va2llc3RvcmUgZ3JpZFNldHRpbmcgYnkgc3RvcmFnZWtleSBhcyBuYW1lXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5tYWluU2VydmljZS5jb29raWVTdG9yZURlbGV0ZU11bHRpcGxlKHRoaXMuZ3JpZFN0b3JhZ2VLZXkpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNvbmNhdE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAvLyBVc2Ugb3JpZ2luYWwgY29sdW1uIHNldHRpbmdcclxuICAgICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlR3JpZENvbHVtbnMoKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgLy8gY2hlY2sgaXMgc2F2ZWQgc3RhdGUgZXhpc3RcclxuICAgICAgICAgIHRoaXMuc3RhdGVFeGlzdCgpO1xyXG4gICAgICAgICAgLy8gQWxlcnRcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coJ0dyaWQgU2V0dGluZyBSZXN0b3JlZCcsIFwidG9wXCIsIHRydWUsIDIwMDAsICdzdWNjZXNzJyk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0R3JpZFNldHRpbmdzKCk6IFpHcmlkQ29sdW1uU2V0dGluZ3NbXSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLkFsbG93U2F2ZVN0YXRlKSB7XHJcbiAgICAgIGNvbnN0IF9zdG9yYWdlS2V5ID0gJ2lvbmljLWZpZWxkOjonICsgdGhpcy5hdXRoU2VydmljZS5lMVRva2VuLnVzZXJOYW1lICsgJzo6JyArIHRoaXMuZGF0YS5OYW1lICsgJzo6JyArIHRoaXMucm91dGVyLnVybDtcclxuXHJcbiAgICAgIC8vIEZpbmQgYW55IHNldHRpbmcgZnJvbSBsb2NhbHN0b3JhZ2UuLlxyXG4gICAgICBsZXQgX2FyckdyaWRDYWNoaW5nOiBHcmlkQ2FjaGluZ1tdID0gdGhpcy56R3JpZFN0YXRlUGVyc2lzdGluZ1NlcnZpY2UuZ2V0KF9zdG9yYWdlS2V5KTtcclxuICAgICAgaWYgKF9hcnJHcmlkQ2FjaGluZykge1xyXG4gICAgICAgIGNvbnN0IF9ncmlkQ2FjaGluZzogR3JpZENhY2hpbmcgPSBKU09OLnBhcnNlKF9hcnJHcmlkQ2FjaGluZ1snVmFsdWUnXSk7XHJcbiAgICAgICAgaWYgKF9ncmlkQ2FjaGluZykge1xyXG4gICAgICAgICAgcmV0dXJuIF9ncmlkQ2FjaGluZy5ncmlkU2V0dGluZ3MuY29sdW1uc0NvbmZpZy5zb3J0KChhLCBiKSA9PiBhLm9yZGVySW5kZXggLSBiLm9yZGVySW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdyaWRDdXN0b21BZGRDb21tYW5kKGdyb3VwOiBaR3JvdXApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgLy8gZGVjbGFyZSBidXR0b24gb25jbGljayBldmVudCBuYW1lIGJhc2Ugb24gZ3JpZCBuYW1lICsgcHJlZml4XHJcbiAgICBjb25zdCBncmlkQWRkQnV0dG9uRXZlbnROYW1lID0gdGhpcy5kYXRhLk5hbWUgKyAnX0N1c3RvbUFkZEJ1dHRvbk9uQ2xpY2snO1xyXG4gICAgaWYgKCF0aGlzLmdyb3VwW2dyaWRBZGRCdXR0b25FdmVudE5hbWVdKSB7XHJcbiAgICAgIHJldHVybiBvZih7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBbZ3JpZEFkZEJ1dHRvbkV2ZW50TmFtZV0oZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdyaWRDdXN0b21SZXNldENvbW1hbmQoZ3JvdXA6IFpHcm91cCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBkZWNsYXJlIGJ1dHRvbiBvbmNsaWNrIGV2ZW50IG5hbWUgYmFzZSBvbiBncmlkIG5hbWUgKyBwcmVmaXhcclxuICAgIGNvbnN0IGdyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZSA9IHRoaXMuZGF0YS5OYW1lICsgJ19DdXN0b21SZXNldEJ1dHRvbk9uQ2xpY2snO1xyXG4gICAgaWYgKCF0aGlzLmdyb3VwW2dyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZV0pIHtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5ncm91cFtncmlkUmVzZXRCdXR0b25FdmVudE5hbWVdKGdyb3VwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBncmlkQ3VzdG9tUmVtb3ZlQ29tbWFuZChkYXRhSXRlbTogYW55LCByb3dJbmRleDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIC8vIGRlY2xhcmUgYnV0dG9uIG9uY2xpY2sgZXZlbnQgbmFtZSBiYXNlIG9uIGdyaWQgbmFtZSArIHByZWZpeFxyXG4gICAgY29uc3QgZ3JpZFJlc2V0QnV0dG9uRXZlbnROYW1lID0gdGhpcy5kYXRhLk5hbWUgKyAnX0N1c3RvbVJlbW92ZUJ1dHRvbk9uQ2xpY2snO1xyXG4gICAgaWYgKCF0aGlzLmdyb3VwW2dyaWRSZXNldEJ1dHRvbkV2ZW50TmFtZV0pIHtcclxuICAgICAgcmV0dXJuIG9mKHt9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5ncm91cFtncmlkUmVzZXRCdXR0b25FdmVudE5hbWVdKGRhdGFJdGVtLCByb3dJbmRleCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gSW5saW5lIEVkaXRcclxuICBwcml2YXRlIGNyZWF0ZUZvcm1Db250cm9scyhncmlkQ29sczogQXJyYXk8YW55Pikge1xyXG4gICAgbGV0IGNvdW50ZXJJbmRleCA9IDA7XHJcbiAgICAvLyBUbyBmb3JjZSBlbGVtZW50IHRvIHJlYmluZCBkYXRhXHJcbiAgICB0aGlzLmlzSW5saW5lRWRpdElucHV0RmllbGRMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuemdyaWQuZ3JpZC5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIG9mKFtdKS5waXBlKGRlbGF5KDApLCB0YXAoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgfHwge307XHJcbiAgICAgIGNvbnN0IGdyaWREYXRhID0gdGhpcy5nZXRHcmlkRGF0YSgpO1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShncmlkRGF0YSkpIHtcclxuICAgICAgICBncmlkRGF0YS5mb3JFYWNoKGQgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaXRlbXMgPSB7fTtcclxuICAgICAgICAgIGdyaWRDb2xzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmlzaWJsZSA9IFpDb21wb25lbnRIZWxwZXIuaXNWaXNpYmxlRm9ybUNvbnRyb2wodGhpcywgYy5maWVsZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzUmVxdWlyZWQgPSBaQ29tcG9uZW50SGVscGVyLmlzUmVxdWlyZWRGb3JtQ29udHJvbCh0aGlzLCBjLmZpZWxkKTtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0VmFsaWRhdG9ycyhjLmZpZWxkLCBpc1Zpc2libGUsIGlzUmVxdWlyZWQpO1xyXG4gICAgICAgICAgICBpdGVtc1tjLmZpZWxkXSA9IG5ldyBGb3JtQ29udHJvbChkW2MuZmllbGRdLCB2YWxpZGF0b3JzKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cChpdGVtcyk7XHJcblxyXG4gICAgICAgICAgaWYgKGRbXCJJZFwiXSkge1xyXG4gICAgICAgICAgICBpdGVtc1tcIklkXCJdID0gaXRlbXNbXCJJZFwiXSB8fCBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogZFtcIklkXCJdLCBkaXNhYmxlZDogZmFsc2UgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZFtcIklkXCJdID0gY291bnRlckluZGV4Kys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHNbZFtcIklkXCJdXSA9IGZvcm1Hcm91cDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzSW5saW5lRWRpdElucHV0RmllbGRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuemdyaWQuZ3JpZC5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudGVtcElubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHM7XHJcbiAgICB9KSkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5saW5lRmllbGQodmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maW5kKHggPT4geC5WYWx1ZSA9PT0gdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldElubGluZUZvcm0oZGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyKSB7XHJcbiAgICB2YXIga2V5ID0gKGRhdGFbXCJJZFwiXSB8fCBkYXRhW1wiSWRcIl0gPT0gMCkgPyBkYXRhW1wiSWRcIl0gOiByb3dJbmRleDtcclxuICAgIGlmICh0aGlzLmlzSW5saW5lRWRpdElucHV0RmllbGRMb2FkaW5nKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRlbXBJbmxpbmVFZGl0ZWRGb3JtR3JvdXBzW2tleV0gfHwgdGhpcy50ZW1wSW5saW5lRWRpdGVkRm9ybUdyb3Vwc1swXTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHNba2V5XTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGb3JtQ29udHJvbERhdGEoKTogYW55W10ge1xyXG4gICAgY29uc3QgZGF0YSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcykpIHtcclxuICAgICAgZGF0YS5wdXNoKHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3Vwc1trXT8udmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwR3JpZFdpdGhJbmxpbmVFZGl0KCkge1xyXG4gICAgaWYgKHRoaXMuaGFzSW5saW5lRWRpdENvbHVtbih0aGlzLmNvbHVtbnMpKSB7XHJcbiAgICAgIHRoaXMudGVtcElubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHM7XHJcbiAgICAgIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHt9O1xyXG4gICAgICB0aGlzLmNyZWF0ZUZvcm1Db250cm9scyh0aGlzLmNvbHVtbnMuY29uY2F0KHRoaXMudXNhYmxlQ29sdW1ucyB8fCBbXSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzSW5saW5lRm9ybUdyb3VwSGFzVmFsdWUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzICYmIE9iamVjdC5rZXlzKHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcykubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFzSW5saW5lRWRpdENvbHVtbihncmlkQ29scyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGdyaWRDb2xzICYmIGdyaWRDb2xzLnNvbWUoYyA9PiBjLmlzRWRpdGFibGVJbkdyaWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENlbGxTdHlsZUZvcklubGluZUVkaXQoY29sdW1uRmllbGQ6IFpGaWVsZCwgZGF0YUl0ZW06IGFueSwgcm93SW5kZXg6IG51bWJlcik6IGFueSB7XHJcbiAgICBjb25zdCBmb3JtID0gdGhpcy5nZXRJbmxpbmVGb3JtKGRhdGFJdGVtLCByb3dJbmRleCkgYXMgRm9ybUdyb3VwO1xyXG4gICAgaWYgKCFmb3JtKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICAgIGNvbnN0IHN0eWxlID0gY29sdW1uRmllbGRbYFN0eWxlMTBgXTtcclxuICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgc3R5bGUpO1xyXG4gICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZnVuYy5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgcmV0dXJuIGNhbGxGdW5jKGZvcm0udmFsdWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGZ1bmMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBmdW5jO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0eWxlO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEV2ZW50XHJcbiAgcHVibGljIGJlZm9yZUdyaWRHZXREYXRhKGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGNvbnNvbGUud2FybihcImJlZm9yZURhdGFCaW5kaW5nIHRyaWdnZXJlZFwiKTtcclxuICAgIGlmICghZ3JvdXAuYmVmb3JlR3JpZEdldERhdGEpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXAuYmVmb3JlRGF0YUJpbmRpbmcgaXMgdW5kZWZpbmVkXCIpO1xyXG4gICAgICByZXR1cm4gb2YodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ3JvdXAuYmVmb3JlR3JpZEdldERhdGEoZ3JvdXAsIG1lKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRHcmlkU2Vzc2lvbkZpbHRlcihncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICBpZiAoIWdyb3VwW1wiR3JpZFN0b3JhZ2VLZXlcIl0pIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBTdG9yYWdlS2V5ID0gZ3JvdXBbXCJHcmlkU3RvcmFnZUtleVwiXTtcclxuXHJcbiAgICBpZiAodGhpcy5zdG9yYWdlU2VydmljZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldChTdG9yYWdlS2V5KVxyXG4gICAgICAgIC50aGVuKGRhdGEgPT4ge1xyXG4gICAgICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLnZhbHVlIHx8IGRhdGEudmFsdWUgPT09IFwibnVsbFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2UoZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuZmlsdGVyID0gSlNPTi5wYXJzZShyZXN1bHRbXCJTdGF0ZUZpbHRlclwiXSk7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmZpbHRlclBhcmFtcyA9IEpTT04ucGFyc2UocmVzdWx0W1wiRmlsdGVyUGFyYW1zXCJdKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuZmlsdGVyLmZpbHRlcnMuZm9yRWFjaCgoc3RhdGVGaWx0ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChzdGF0ZUZpbHRlci5maWVsZC5pbmNsdWRlcygnVVRDJykpIHtcclxuICAgICAgICAgICAgICAgIHN0YXRlRmlsdGVyLnZhbHVlID0gbmV3IERhdGUoc3RhdGVGaWx0ZXIudmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRHcmlkU2Vzc2lvbkZpbHRlcihncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICBpZiAoIWdyb3VwW1wiR3JpZFN0b3JhZ2VLZXlcIl0pIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBTdG9yYWdlS2V5ID0gZ3JvdXBbXCJHcmlkU3RvcmFnZUtleVwiXTtcclxuXHJcbiAgICBsZXQgbHN0R3JpZEZpbHRlcjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG5cclxuICAgIGlmIChtZS5zdGF0ZS5maWx0ZXIgJiYgdGhpcy5zdG9yYWdlU2VydmljZSAmJiB0aGlzLmRhdGFbJ1NhdmVGaWx0ZXInXSkge1xyXG4gICAgICAvL2xpc3Qgb2YgZGF0YSBmb3IgU3RhdGVGaWx0ZXIgYW5kIEZpbHRlclBhcmFtc1xyXG4gICAgICBsc3RHcmlkRmlsdGVyID0geyBcIlN0YXRlRmlsdGVyXCI6IEpTT04uc3RyaW5naWZ5KG1lLnN0YXRlLmZpbHRlciksIFwiRmlsdGVyUGFyYW1zXCI6IEpTT04uc3RyaW5naWZ5KG1lLnBhcmFtcy5maWx0ZXJQYXJhbXMpIH1cclxuICAgICAgLy9jcmVhdGUgc2Vzc2lvbiBzdG9yYWdlXHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KFN0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KGxzdEdyaWRGaWx0ZXIpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFNvdXJjZTogaHR0cHM6Ly93d3cudGVsZXJpay5jb20vZm9ydW1zL2tlbmRvLWFuZ3VsYXItZ3JpZC1ibGFuay1zcGFjZS1pbi10aGUtZW5kLXdoZW4teW91LXJlc2l6ZShyZWR1Y2UpLWFueS1jb2x1bW5cclxuICBwdWJsaWMgYWRqdXN0V2lkdGhVcG9uUmVzaXplKCkge1xyXG4gICAgY29uc3QgdGFibGVXaWR0aCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuay1ncmlkLXRhYmxlXCIpW2BvZmZzZXRXaWR0aGBdO1xyXG4gICAgY29uc3QgY29udGVudFdpZHRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5rLWdyaWQtY29udGVudFwiKVtgb2Zmc2V0V2lkdGhgXTtcclxuICAgIGlmICh0YWJsZVdpZHRoIDwgY29udGVudFdpZHRoKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRMYXN0Q29sV2lkdGggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmstZ3JpZC1jb250ZW50IC5rLWdyaWQtdGFibGUgdHIgdGQ6bGFzdC1vZi10eXBlXCIpW2BvZmZzZXRXaWR0aGBdO1xyXG5cclxuICAgICAgdGhpcy5jb2x1bW5zW3RoaXMuY29sdW1ucy5sZW5ndGggLSAxXS53aWR0aCA9IGN1cnJlbnRMYXN0Q29sV2lkdGggKyAoY29udGVudFdpZHRoIC0gdGFibGVXaWR0aCkgLSAxMDsgLy8gYWNjb3VudCBmb3IgdGhlIHZlcnRpY2FsIHNjcm9sbGJhcjtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBvbkNoYW5nZSBFdmVudHNcclxuICBwdWJsaWMgZmlsdGVyQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgIHRoaXMuemdyaWQuZmlsdGVyQ2hhbmdlKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBwYWdlQ2hhbmdlKGV2ZW50OiBQYWdlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc1VzZUxvY2FsRGF0YSgpKSB7XHJcbiAgICAgIHRoaXMuemdyaWQucGFnZUNoYW5nZShldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc29ydENoYW5nZShzb3J0OiBTb3J0RGVzY3JpcHRvcltdKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNVc2VMb2NhbERhdGEoKSkge1xyXG4gICAgICB0aGlzLnpncmlkLnNvcnRDaGFuZ2Uoc29ydCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5DZWxsQ2hlY2tCb3hPbkNoYW5nZShldmVudDogYW55LCByb3dJbmRleDogYW55LCBjb2x1bW46IGFueSkge1xyXG4gICAgY29uc3QgaXNDaGVja2VkID0gZXZlbnQuZGV0YWlsLmNoZWNrZWQ7XHJcbiAgICBjb25zdCBnRGF0YSA9IHRoaXMuZ2V0R3JpZERhdGEoKTtcclxuICAgIGdEYXRhW3Jvd0luZGV4XVtjb2x1bW4uVmFsdWVdID0gaXNDaGVja2VkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbHVtbnNPcmRlckNoYW5nZWQoZXZlbnQ6IENvbHVtblJlb3JkZXJFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgX3pncmlkQ29udHJvbCA9IHRoaXMuemdyaWQgYXMgWkdyaWQ7XHJcbiAgICBjb25zdCBfemdyaWRDb21wb25lbnQgPSB0aGlzLnpncmlkLmdyaWQgYXMgR3JpZENvbXBvbmVudDtcclxuICAgIGNvbnN0IF9kYXRhID0gX3pncmlkQ29tcG9uZW50LmRhdGEgYXMgR3JpZERhdGFSZXN1bHQ7XHJcblxyXG4gICAgaWYgKHRoaXMuemdyaWQpIHtcclxuICAgICAgY29uc3QgX3pncmlkID0gdGhpcy56Z3JpZDtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBjb21tYW5kIGhhbmRsZXJcclxuICBwdWJsaWMgYWRkSGFuZGxlcih7IHNlbmRlciB9KSB7XHJcbiAgICB0aGlzLmlzTmV3ID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBjbG9zZSBhbnkgZXhpc3RpbmcgZWRpdG9yXHJcbiAgICB0aGlzLmNsb3NlRWRpdG9yKHNlbmRlcik7XHJcblxyXG4gICAgLy8gbG9vcCBhbGwgY29sdW1uIHRvIGdldCB2YWxpZGF0aW9uIGFuZCBjcmVhdGUgZm9ybSBjb250cm9sXHJcbiAgICBjb25zdCBjb2xGb3JtQ29udHJvbCA9IHt9O1xyXG4gICAgdGhpcy56Z3JpZC5ncmlkQ29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcclxuICAgICAgaWYgKGNvbC5Jc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgIGlmIChjb2wuVHlwZSA9PT0gJ3p0ZXh0ZWRpdG9yJykge1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFpDb21wb25lbnRIZWxwZXIucmVxdWlyZWRWYWxpZGF0b3JfV2l0aG91dFdoaXRlU3BhY2VzX1RleHRFZGl0b3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChaQ29tcG9uZW50SGVscGVyLnJlcXVpcmVkVmFsaWRhdG9yX1dpdGhvdXRXaGl0ZVNwYWNlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb2wuVmFsaWRhdG9yUGF0dGVybikge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oY29sLlZhbGlkYXRvclBhdHRlcm4pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29sRm9ybUNvbnRyb2xbY29sLlZhbHVlXSA9IG5ldyBGb3JtQ29udHJvbChudWxsLCB2YWxpZGF0b3JzKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHNldCBmb3JtIGNvbnRyb2wgb2JqZWN0IHRvIGZvcm0gZ3JvdXBcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cChjb2xGb3JtQ29udHJvbCk7XHJcblxyXG4gICAgLy8gYWRkIHRvIGdyaWQgcm93XHJcbiAgICBzZW5kZXIuYWRkUm93KHRoaXMuZm9ybUdyb3VwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlSGFuZGxlcih7IHNlbmRlciwgcm93SW5kZXgsIGZvcm1Hcm91cCwgaXNOZXcgfSk6IHZvaWQge1xyXG4gICAgLy8gR2V0IHRoZSBleGlzdGluZyBkYXRhIGZyb20gdGhlIGdyaWRcclxuICAgIGNvbnN0IGdyaWRFeGlzdGluZ0RhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGZvcm0gaXMgdmFsaWRcclxuICAgIGlmIChmb3JtR3JvdXAudmFsaWQpIHtcclxuICAgICAgLy8gQ2hlY2sgZm9yIGEgdW5pcXVlIGtleSBmaWVsZFxyXG4gICAgICBjb25zdCB1bmlxdWVLZXkgPSB0aGlzLmRhdGFbJ1VuaXF1ZUtleSddO1xyXG4gICAgICBpZiAodW5pcXVlS2V5KSB7XHJcbiAgICAgICAgLy8gR2V0IHRoZSB1bmlxdWUga2V5IHZhbHVlIGZyb20gdGhlIGZvcm1cclxuICAgICAgICBjb25zdCBmb3JtVW5pcXVlS2V5VmFsdWUgPSBmb3JtR3JvdXAudmFsdWVbdW5pcXVlS2V5XTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYSBkdXBsaWNhdGUgdmFsdWVcclxuICAgICAgICBjb25zdCBpc0R1cGxpY2F0ZSA9IGdyaWRFeGlzdGluZ0RhdGEuc29tZShkYXRhID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIC8vIElmIGVkaXRpbmcgYW4gZXhpc3Rpbmcgcm93LCBza2lwIHRoZSBjdXJyZW50IHJvdyBiZWluZyBlZGl0ZWRcclxuICAgICAgICAgICAgIWlzTmV3ICYmXHJcbiAgICAgICAgICAgIHJvd0luZGV4ICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHVuaXF1ZSBrZXkgdmFsdWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGdyaWRcclxuICAgICAgICAgICAgZGF0YVt1bmlxdWVLZXldID09PSBmb3JtVW5pcXVlS2V5VmFsdWUgJiZcclxuICAgICAgICAgICAgLy8gU2tpcCBjaGVja2luZyBhZ2FpbnN0IHRoZSBjdXJyZW50IHJvdyBiZWluZyBlZGl0ZWRcclxuICAgICAgICAgICAgZGF0YVt1bmlxdWVLZXldICE9PSBncmlkRXhpc3RpbmdEYXRhW3Jvd0luZGV4XVt1bmlxdWVLZXldXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIGR1cGxpY2F0ZSB2YWx1ZSwgc2hvdyBhbiBlcnJvciBtZXNzYWdlIGFuZCByZXR1cm4gd2l0aG91dCBzYXZpbmdcclxuICAgICAgICBpZiAoaXNEdXBsaWNhdGUpIHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coJ0Vycm9yIG9jY3VyOiBEdXBsaWNhdGVkIHVuaXF1ZSBmaWVsZCBlbnRyeS4nLCAndG9wJywgdHJ1ZSwgMzAwMCwgJ2RhbmdlcicpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSWYgdGhlIHVuaXF1ZSBrZXkgdmFsdWUgaXMgdmFsaWQgYW5kIHRoZXJlIGFyZSBubyBkdXBsaWNhdGVzLCBzYXZlIHRoZSBkYXRhXHJcbiAgICAgIGlmIChpc05ldykge1xyXG4gICAgICAgIC8vIEFkZCBhIG5ldyByb3cgdG8gdGhlIGdyaWQgZGF0YVxyXG4gICAgICAgIGdyaWRFeGlzdGluZ0RhdGEucHVzaChmb3JtR3JvdXAudmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFVwZGF0ZSBhbiBleGlzdGluZyByb3cgaW4gdGhlIGdyaWQgZGF0YVxyXG4gICAgICAgIGdyaWRFeGlzdGluZ0RhdGFbcm93SW5kZXhdID0gZm9ybUdyb3VwLnZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBVcGRhdGUgdGhlIGdyaWQgZGF0YSBhbmQgY2xvc2UgdGhlIHJvdyBlZGl0b3JcclxuICAgICAgdGhpcy5zZXREYXRhKGdyaWRFeGlzdGluZ0RhdGEpO1xyXG4gICAgICBzZW5kZXIuY2xvc2VSb3cocm93SW5kZXgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEhhbmRsZXIoeyBzZW5kZXIsIHJvd0luZGV4IH0pIHtcclxuICAgIC8vIGNhbmNlbCBhbnkgZXhpc3RpbmcgZWRpdG9yXHJcbiAgICBzZW5kZXIuY2xvc2VSb3cocm93SW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVkaXRIYW5kbGVyKHsgc2VuZGVyLCByb3dJbmRleCwgZGF0YUl0ZW0gfSkge1xyXG4gICAgLy8gU2V0IGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSByb3cgYmVpbmcgZWRpdGVkIGlzIG5vdCBhIG5ldyByb3dcclxuICAgIHRoaXMuaXNOZXcgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBDbG9zZSBhbnkgZXhpc3RpbmcgZWRpdG9yXHJcbiAgICB0aGlzLmNsb3NlRWRpdG9yKHNlbmRlcik7XHJcblxyXG4gICAgLy8gbG9vcCBhbGwgY29sdW1uIHRvIGdldCB2YWxpZGF0aW9uIGFuZCBjcmVhdGUgZm9ybSBjb250cm9sLCBhcHBlbmQgY3VycmVudCByb3cgdmFsdWVcclxuICAgIGNvbnN0IGNvbEZvcm1Db250cm9sID0ge307XHJcbiAgICB0aGlzLnpncmlkLmdyaWRDb2x1bW5zLmZvckVhY2goY29sID0+IHtcclxuICAgICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG4gICAgICBpZiAoY29sLklzUmVxdWlyZWQpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgaWYgKGNvbC5UeXBlID09PSAnenRleHRlZGl0b3InKSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goWkNvbXBvbmVudEhlbHBlci5yZXF1aXJlZFZhbGlkYXRvcl9XaXRob3V0V2hpdGVTcGFjZXNfVGV4dEVkaXRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFpDb21wb25lbnRIZWxwZXIucmVxdWlyZWRWYWxpZGF0b3JfV2l0aG91dFdoaXRlU3BhY2VzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbC5WYWxpZGF0b3JQYXR0ZXJuKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihjb2wuVmFsaWRhdG9yUGF0dGVybikpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb2xGb3JtQ29udHJvbFtjb2wuVmFsdWVdID0gbmV3IEZvcm1Db250cm9sKGRhdGFJdGVtW2NvbC5WYWx1ZV0sIHZhbGlkYXRvcnMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gc2V0IGZvcm0gY29udHJvbCBvYmplY3QgdG8gZm9ybSBncm91cFxyXG4gICAgdGhpcy5mb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKGNvbEZvcm1Db250cm9sKTtcclxuXHJcbiAgICAvLyBTZXQgdGhlIGZvcm0gZ3JvdXAgb24gdGhlIHJvdyBiZWluZyBlZGl0ZWRcclxuICAgIHRoaXMuZWRpdGVkUm93SW5kZXggPSByb3dJbmRleDtcclxuICAgIHNlbmRlci5lZGl0Um93KHJvd0luZGV4LCB0aGlzLmZvcm1Hcm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlSGFuZGxlcih7IHNlbmRlciwgZGF0YUl0ZW0gfSkge1xyXG4gICAgY29uc3QgZ0RhdGEgPSB0aGlzLmdldEdyaWREYXRhKCk7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0SXRlbUluZGV4KGRhdGFJdGVtLCBnRGF0YSwgdGhpcy5kYXRhWydVbmlxdWVLZXknXSk7XHJcbiAgICBnRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgZGF0YSBpbiB0aGUgZ3JpZFxyXG4gICAgdGhpcy5zZXREYXRhKGdEYXRhKTtcclxuXHJcbiAgICBzZW5kZXIuY2FuY2VsQ2VsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbG9zZUVkaXRvcihncmlkLCByb3dJbmRleCA9IHRoaXMuZWRpdGVkUm93SW5kZXgpIHtcclxuICAgIGdyaWQuY2xvc2VSb3cocm93SW5kZXgpO1xyXG4gICAgdGhpcy5lZGl0ZWRSb3dJbmRleCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJdGVtSW5kZXgoaXRlbTogYW55LCBkYXRhOiBhbnlbXSwga2V5OiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgZGF0YS5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgIGlmIChkYXRhW2lkeF1ba2V5XSA9PT0gaXRlbVtrZXldKSB7XHJcbiAgICAgICAgcmV0dXJuIGlkeDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBHcmlkIEZpbHRlclxyXG4gIHByaXZhdGUgc2V0dXBGaWx0ZXJGZWF0dXJlKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkRmlsdGVyQmFyRmllbGQpIHtcclxuICAgICAgdGhpcy5maWx0ZXJHcm91cCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGQpIHtcclxuICAgICAgdGhpcy5hZHZmaWx0ZXJHcm91cCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlYXJjaCgpIHtcclxuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZpbHRlckdyb3VwLmZvcm07XHJcbiAgICBjb25zdCBjb250cm9scyA9IGZvcm0uY29udHJvbHM7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNTaG93QWR2RmlsdGVyKSB7XHJcbiAgICAgIGNvbnN0IGFkdmZvcm0gPSB0aGlzLmFkdmZpbHRlckdyb3VwLmZvcm07XHJcbiAgICAgIGNvbnN0IGFkdmNvbnRyb2xzID0gYWR2Zm9ybS5jb250cm9scztcclxuICAgICAgZm9yIChjb25zdCBjIG9mIE9iamVjdC5rZXlzKGFkdmNvbnRyb2xzKSkge1xyXG4gICAgICAgIGNvbnRyb2xzW2NdID0gYWR2Y29udHJvbHNbY107XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhLkZpbHRlclNlYXJjaCkge1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogXCJ6Z3JpZC1maWx0ZXJzZWFyY2hcIixcclxuICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YS5GaWx0ZXJTZWFyY2gsXHJcbiAgICAgICAgZGF0YTogeyBmb3JtY29udHJvbHM6IGNvbnRyb2xzIH0sXHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnBhcmFtcy5maWx0ZXJQYXJhbXMgPSBbXTtcclxuICAgICAgT2JqZWN0LmtleXMoY29udHJvbHMpLmZvckVhY2goY29udHJvbE5hbWUgPT4ge1xyXG4gICAgICAgIGlmIChjb250cm9sc1tjb250cm9sTmFtZV0udmFsdWUpIHtcclxuICAgICAgICAgIGNvbnN0IGZpZWxkID0gWkNvbXBvbmVudEhlbHBlci5nZXRGaWVsZEZyb21GaWVsZHNCeVZhbHVlKHRoaXMuZmlsdGVyR3JvdXAuZmllbGRzLCBjb250cm9sTmFtZSkgfHwgWkNvbXBvbmVudEhlbHBlci5nZXRGaWVsZEZyb21GaWVsZHNCeVZhbHVlKHRoaXMuYWR2ZmlsdGVyR3JvdXAuZmllbGRzLCBjb250cm9sTmFtZSk7XHJcbiAgICAgICAgICB0aGlzLnBhcmFtcy5maWx0ZXJQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgICAgIGtleTogZmllbGQuVmFsdWVFeHByIHx8IGZpZWxkLlZhbHVlLFxyXG4gICAgICAgICAgICBvcHM6IHRoaXMubWFwRmlsdGVyT3BlcmF0b3JCeUZpZWxkVHlwZShmaWVsZCksXHJcbiAgICAgICAgICAgIHZhbHVlOiBjb250cm9sc1tjb250cm9sTmFtZV0udmFsdWVcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsRWRpdCgpIHtcclxuICAgIHRoaXMuY2xlYXJGaWx0ZXJEYXRhKHRoaXMuZmlsdGVyR3JvdXApO1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQWR2RmlsdGVyQmFyRmllbGQpIHtcclxuICAgICAgdGhpcy5jbGVhckZpbHRlckRhdGEodGhpcy5hZHZmaWx0ZXJHcm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyRmlsdGVyRGF0YShncm91cDogWkdyb3VwKSB7XHJcbiAgICBjb25zdCBmb3JtID0gZ3JvdXAuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICBjb25zdCBjb250cm9scyA9IGZvcm0uY29udHJvbHM7XHJcbiAgICBPYmplY3Qua2V5cyhjb250cm9scykuZm9yRWFjaChjb250cm9sTmFtZSA9PiB7XHJcbiAgICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZShjb250cm9sTmFtZSwgbnVsbCwgZ3JvdXAsIHRydWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWR2YW5jZWRTZWFyY2goKSB7XHJcbiAgICB0aGlzLmlzU2hvd0FkdkZpbHRlciA9ICF0aGlzLmlzU2hvd0FkdkZpbHRlcjtcclxuICAgIGlmICghdGhpcy5pc1Nob3dBZHZGaWx0ZXIpIHtcclxuICAgICAgdGhpcy5jbGVhckZpbHRlckRhdGEodGhpcy5hZHZmaWx0ZXJHcm91cCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1hcEZpbHRlck9wZXJhdG9yQnlGaWVsZFR5cGUoZmllbGQ6IFpGaWVsZCkge1xyXG4gICAgc3dpdGNoIChmaWVsZC5UeXBlKSB7XHJcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgY2FzZSBcIm51bWVyaWNcIjpcclxuICAgICAgY2FzZSBcImRhdGVcIjpcclxuICAgICAgY2FzZSBcImVtYWlsXCI6XHJcbiAgICAgIGNhc2UgXCJwYXNzd29yZFwiOlxyXG4gICAgICBjYXNlIFwidGVsXCI6XHJcbiAgICAgIGNhc2UgXCJ0ZXh0XCI6XHJcbiAgICAgIGNhc2UgXCJ1cmxcIjpcclxuICAgICAgY2FzZSBcImN1cnJlbmN5XCI6XHJcbiAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxyXG4gICAgICAgIGlmICghZmllbGRbJ0ZpbHRlckNvbnRhaW5zVXNpbmdFcXVhbCddKSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJjb250YWluc1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCI9PVwiO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBcIj1cIjtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBncmlkIGNvbW1vbiBzZXR0aW5nIGZ1bmN0aW9uXHJcbiAgcHVibGljIHNldCBzZXRHcmlkVGl0bGUobmV3VGl0bGU6IHN0cmluZykge1xyXG4gICAgdGhpcy5ncmlkVGl0bGUgPSBuZXdUaXRsZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIiwiPCEtLVxyXG48ZGl2IHN0eWxlPVwibWFyZ2luOiAxMHB4XCI+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgay1mb3JtXCI+XHJcbiAgICAgICAgICA8ZmllbGRzZXQ+XHJcbiAgICAgICAgICAgIDxsZWdlbmQ+QmluZGluZyB0eXBlczwvbGVnZW5kPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiay1mb3JtLWZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5CaW5kIHRoZSBkYXRhIHRvOjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImJpbmRpbmdUeXBlXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm1vZGVcIiBpZD1cImFycmF5XCIgdmFsdWU9XCJhcnJheVwiIGNsYXNzPVwiay1yYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoYW5nZUJpbmRpbmdUeXBlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImstcmFkaW8tbGFiZWxcIiBmb3I9XCJhcnJheVwiPkFycmF5IG9iamVjdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJiaW5kaW5nVHlwZVwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJtb2RlXCIgaWQ9XCJncmlkRGF0YVJlc3VsdFwiIHZhbHVlPVwiZ3JpZERhdGFSZXN1bHRcIiBjbGFzcz1cImstcmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VCaW5kaW5nVHlwZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJrLXJhZGlvLWxhYmVsXCIgZm9yPVwiZ3JpZERhdGFSZXN1bHRcIj5HcmlkRGF0YVJlc3VsdCBvYmplY3Q8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiYmluZGluZ1R5cGVcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwibW9kZVwiIGlkPVwiYXN5bmNcIiB2YWx1ZT1cImFzeW5jXCIgY2xhc3M9XCJrLXJhZGlvXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2hhbmdlQmluZGluZ1R5cGUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiay1yYWRpby1sYWJlbFwiIGZvcj1cImFzeW5jXCI+QXN5bmNocm9ub3VzIHNvdXJjZTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9maWVsZHNldD5cclxuICAgICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiAtLT5cclxuPGRpdiBjbGFzcz1cImdyaWQtY29udGFpbmVyIGUxdGFnLXN0eWxlXCIgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlXCI+XHJcblxyXG4gIDwhLS0gPGRpdiAqbmdJZj1cImRhdGEuVGl0bGVcIiBjbGFzcz1cImdyaWRUaXRsZVwiPnt7ZGF0YS5UaXRsZX19PC9kaXY+IC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGUgbGV0LWFuY2hvcj5cclxuICAgIDxzcGFuPnt7IGFuY2hvci5uYXRpdmVFbGVtZW50LmlubmVyVGV4dCB9fTwvc3Bhbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDxrZW5kby1wb3BvdmVyICNncmlkUG9wT3ZlciBbcG9zaXRpb25dPVwiZGF0YS5Qb3BPdmVyUG9zaXRpb24gfHwgJ2JvdHRvbSdcIiBbdGVtcGxhdGVEYXRhXT1cImdldENvbnRleHREYXRhLmJpbmQodGhpcylcIj5cclxuICAgIDwhLS0gPG5nLXRlbXBsYXRlIGtlbmRvUG9wb3ZlclRpdGxlVGVtcGxhdGUgbGV0LWRhdGE9XCJkYXRhXCIgPlxyXG4gICAgICA8ZGl2IFtzdHlsZV09XCJkYXRhLlRpdGxlU3R5bGVcIiAqbmdJZj1cImRhdGEgJiYgZGF0YS5UaXRsZVwiIFtpbm5lckhUTUxdPVwiZGF0YS5UaXRsZVwiPjwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT4gLS0+XHJcbiAgICA8bmctdGVtcGxhdGUga2VuZG9Qb3BvdmVyQm9keVRlbXBsYXRlIGxldC1kYXRhPVwiZGF0YVwiPlxyXG4gICAgICA8ZGl2IFtzdHlsZV09XCJkYXRhLkJvZHlTdHlsZVwiIGNsYXNzPVwicG9wb3ZlcmJvZHlcIiAqbmdJZj1cImRhdGEgJiYgZGF0YS5Cb2R5XCIgW2lubmVySFRNTF09XCJkYXRhLkJvZHkgfCBodG1sU2FuaXRpemVcIiBbbmdDbGFzc109XCJkYXRhLkJvZHlDbGFzc1wiIChtb3VzZWxlYXZlKT1cImNsb3NlUG9wT3Zlci5jYWxsKHRoaXMsICRldmVudClcIj48L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9rZW5kby1wb3BvdmVyPlxyXG5cclxuICA8ZGl2IGtlbmRvVG9vbHRpcCBzaG93T249XCJub25lXCIgW3Rvb2x0aXBUZW1wbGF0ZV09XCJ0ZW1wbGF0ZVwiIGZpbHRlcj1cIi5rLWdyaWQgdGRcIiAobW91c2VvdmVyKT1cInNob3dUb29sdGlwKCRldmVudClcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIiBjbGFzcz1cImUxdGFnLXN0eWxlMVwiPlxyXG4gICAgPGRpdiBrZW5kb1BvcG92ZXJDb250YWluZXIgW3BvcG92ZXJdPVwiZ3JpZFBvcE92ZXJcIiBmaWx0ZXI9XCJkaXYuZ3JpZENlbGwud2l0aFBvcG92ZXJJbkdyaWRcIiBzaG93T249XCJub25lXCIga2VuZG9Qb3BvdmVyQ29udGFpbmVyICNwb3BvdmVyY29udGFpbmVyPVwia2VuZG9Qb3BvdmVyQ29udGFpbmVyXCI+XHJcbiAgICAgIDxrZW5kby1ncmlkIFt6Z3JpZGJpbmRpbmddPVwie2RhdGE6IGRhdGEsIGdyb3VwOiBncm91cCwgcGFyYW1zOiBwYXJhbXMsIGdyaWRTdWJqZWN0OiBncmlkU3ViamVjdH1cIiBbbmdDbGFzc109XCJkYXRhLkNsYXNzXCIgY2xhc3M9XCJkZXNrdG9wLWdyaWQgZTF0YWctc3R5bGUyXCJcclxuICAgICAgICAgICAgICAgICAgW3Njcm9sbGFibGVdPVwiZGF0YS5zY3JvbGxBYmxlID09PSBmYWxzZSA/ICdub25lJyA6ICdzY3JvbGxhYmxlJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJzdGF0ZS50YWtlXCJcclxuICAgICAgICAgICAgICAgICAgW3BhZ2VhYmxlXT1cInBhZ2VhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmhpZGVuLXBhZ2VyXT1cIiFwYWdlYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtza2lwXT1cInN0YXRlLnNraXBcIlxyXG4gICAgICAgICAgICAgICAgICBbc29ydF09XCJzdGF0ZS5zb3J0XCJcclxuICAgICAgICAgICAgICAgICAgW3NvcnRhYmxlXT1cInthbGxvd1Vuc29ydDogdHJ1ZSxtb2RlOiAnbXVsdGlwbGUnfVwiXHJcbiAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwic3RhdGUuZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwiZGF0YS5lbmFibGVGaWx0ZXJpbmcgIT09IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgW3Jlc2l6YWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3Jlb3JkZXJhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbY29sdW1uTWVudV09XCJkYXRhLkRpc2FibGVHcmlkQ29sdW1uTWVudSA/IGZhbHNlIDogeyBmaWx0ZXI6IHRydWUgfVwiXHJcbiAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiISghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiXHJcbiAgICAgICAgICAgICAgICAgIChjZWxsQ2xpY2spPVwiY2VsbENsaWNrSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGNlbGxDbG9zZSk9XCJlZGl0Q2VsbENsb3NlSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGRhdGFTdGF0ZUNoYW5nZSk9XCJkYXRhU3RhdGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cInBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChzb3J0Q2hhbmdlKT1cInNvcnRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiZmlsdGVyQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoY29sdW1uUmVvcmRlcik9XCJjb2x1bW5zT3JkZXJDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBba2VuZG9HcmlkU2VsZWN0QnldPVwicm93U2VsZWN0aW9uS2V5XCJcclxuICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVNldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZEtleXMpXT1cIm15U2VsZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUyXCJcclxuICAgICAgICAgICAgICAgICAgW3RyYWNrQnldPVwidHJhY2tCeVwiXHJcbiAgICAgICAgICAgICAgICAgIChjYW5jZWwpPVwiY2FuY2VsSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHNhdmUpPVwic2F2ZUhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGVkaXQpPVwiZWRpdEhhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChhZGQpPVwiYWRkSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGNvbHVtblJlc2l6ZSk9XCJhZGp1c3RXaWR0aFVwb25SZXNpemUoKVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRUb29sYmFyVGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLkFsbG93UmVmcmVzaEJ1dHRvbiB8fCBkYXRhLkFsbG93RXhwb3J0IHx8IGRhdGEuQWxsb3dTYXZlU3RhdGUgfHwgZGF0YS5UaXRsZSB8fCBkYXRhLkdyaWRCdXR0b25GaWVsZE5hbWVfV0YgfHwgZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lIHx8IGRhdGEuRW5hYmxlR3JpZENvbW1hbmQgfHwgZGF0YS5FbmFibGVDdXN0b21BZGRDb21tYW5kIHx8IGRhdGEuRW5hYmxlQ3VzdG9tUmVzZXRDb21tYW5kXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1sZWZ0LWl0ZW1cIiAqbmdJZj1cImdyaWRUaXRsZSB8fCBkYXRhLkFsbG93UmVmcmVzaEJ1dHRvbiB8fCBkYXRhLkFsbG93RXhwb3J0XCI+XHJcbiAgICAgICAgICAgIDwhLS0gPGZhLWljb24gKm5nSWY9XCJkYXRhLkljb25cIiBjbGFzcz1cImdyaWRUaXRsZUljb25cIiBbaWNvbl09XCJkYXRhLkljb25cIj48L2ZhLWljb24+IC0tPlxyXG4gICAgICAgICAgICA8a2VuZG8tbGFiZWwgY2xhc3M9XCJncmlkVGl0bGVcIj57eyBncmlkVGl0bGUgfX08L2tlbmRvLWxhYmVsPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImxlZnQtYnV0dG9uc1wiIGtlbmRvQnV0dG9uIChjbGljayk9XCJyZWZyZXNoRGF0YSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuQWxsb3dSZWZyZXNoQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1ncmlkLWJ1dHRvbiBrLWktcmVmcmVzaC1zbVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvR3JpZEV4Y2VsQ29tbWFuZCAqbmdJZj1cImRhdGEuQWxsb3dFeHBvcnRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktZmlsZS1leGNlbFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICB7eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZSgnRXhwb3J0IERhdGEgdG8gRXhjZWwnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXItcmlnaHQtaXRlbVwiICpuZ0lmPVwiZ3JpZEJ0biB8fCBkYXRhLkFsbG93U2F2ZVN0YXRlIHx8IGdyaWREZWZhdWx0U3RhdGVFeGlzdCB8fCBkYXRhLkVuYWJsZUdyaWRDb21tYW5kIHx8IGRhdGEuRW5hYmxlQ3VzdG9tQWRkQ29tbWFuZCB8fCBkYXRhLkVuYWJsZUN1c3RvbVJlc2V0Q29tbWFuZFwiPlxyXG4gICAgICAgICAgICA8YXBwLXp3b3JrZmxvd2J1dHRvbnMgKm5nSWY9XCJncmlkQnRuICYmIGdyaWRCdG4uVHlwZSA9PT0gJ3p3b3JrZmxvd2J1dHRvbnMnXCIgW2RhdGFdPVwiZ3JpZEJ0blwiIFtncm91cF09XCJncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJmb3JtXCI+PC9hcHAtendvcmtmbG93YnV0dG9ucz5cclxuICAgICAgICAgICAgPGFwcC16YnV0dG9ucyAqbmdJZj1cImdyaWRCdG4gJiYgZ3JpZEJ0bi5UeXBlID09PSAnemJ1dHRvbnMnXCIgW2RhdGFdPVwiZ3JpZEJ0blwiIFtncm91cF09XCJncm91cFwiIFtmb3JtXT1cImZvcm1cIj5cclxuICAgICAgICAgICAgPC9hcHAtemJ1dHRvbnM+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJzYXZlR3JpZFNldHRpbmdzKClcIiAqbmdJZj1cImRhdGEuQWxsb3dTYXZlU3RhdGVcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS1zdGFyXCI+PC9zcGFuPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdTYXZlIFNldHRpbmdzJykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJyZXN0b3JlR3JpZFNldHRpbmdzKClcIiAqbmdJZj1cImdyaWREZWZhdWx0U3RhdGVFeGlzdFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaWNvbi13aXRoLXRleHQgay1pLXN0YXItb3V0bGluZVwiPjwvc3Bhbj57eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZSgnUmVzdG9yZSBTZXR0aW5ncycpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBrZW5kb0dyaWRBZGRDb21tYW5kICpuZ0lmPVwiZGF0YS5FbmFibGVHcmlkQ29tbWFuZFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaWNvbi13aXRoLXRleHQgay1pLWFkZFwiPjwvc3Bhbj57eyBnZXRUb29sQmFySXRlbUxhYmVsTmFtZShkYXRhLkFkZENvbW1hbmRCdXR0b25OYW1lID8gZGF0YS5BZGRDb21tYW5kQnV0dG9uTmFtZTogJ0FkZCcpIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBrZW5kb0J1dHRvbiAoY2xpY2spPVwiZ3JpZEN1c3RvbUFkZENvbW1hbmQoZ3JvdXApXCIgKm5nSWY9XCJkYXRhLkVuYWJsZUN1c3RvbUFkZENvbW1hbmRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWljb24td2l0aC10ZXh0IGstaS1hZGRcIj48L3NwYW4+e3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoZGF0YS5BZGRDb21tYW5kQnV0dG9uTmFtZSA/IGRhdGEuQWRkQ29tbWFuZEJ1dHRvbk5hbWU6ICdBZGQnKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIga2VuZG9CdXR0b24gKGNsaWNrKT1cImdyaWRDdXN0b21SZXNldENvbW1hbmQoZ3JvdXApXCIgKm5nSWY9XCJkYXRhLkVuYWJsZUN1c3RvbVJlc2V0Q29tbWFuZFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaWNvbi13aXRoLXRleHQgay1pLXRyYXNoXCI+PC9zcGFuPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKGRhdGEuUmVzZXRDb21tYW5kQnV0dG9uTmFtZSA/IGRhdGEuUmVzZXRDb21tYW5kQnV0dG9uTmFtZTogJ1Jlc2V0JykgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGFpbmVyXCIgKm5nSWY9XCJkYXRhLkdyaWRGaWx0ZXJCYXJGaWVsZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9ybWFsLWZpbHRlci1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICA8YXBwLXpmb3JtIGNsYXNzPVwiZmlsdGVyLWZpZWxkc1wiIFtncm91cF09XCJmaWx0ZXJHcm91cFwiIFtmaWVsZE5hbWVdPVwiZGF0YS5HcmlkRmlsdGVyQmFyRmllbGRcIj48L2FwcC16Zm9ybT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWJ1dHRvbnNcIiBbbmdDbGFzc109XCJkYXRhLkNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwic29saWRcIiBzaXplPVwiZGVmYXVsdFwiIHN0cm9uZz1cInRydWVcIiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2VhcmNoKClcIj5cclxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInNlYXJjaFwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4tbGFiZWwgaW9uLXRleHQtY2FwaXRhbGl6ZVwiPnt7IGdldFRvb2xCYXJJdGVtTGFiZWxOYW1lKCdTZWFyY2gnKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJvdXRsaW5lXCIgc2l6ZT1cImRlZmF1bHRcIiBzdHJvbmc9XCJ0cnVlXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImNhbmNlbEVkaXQoKVwiICpuZ0lmPVwiZGF0YS5Jc1Nob3dHcmlkQ2FuY2VsRmlsdGVyQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJ0aW1lc1wiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJzb2xpZFwiIHNpemU9XCJkZWZhdWx0XCIgc3Ryb25nPVwidHJ1ZVwiIFtuZ0NsYXNzXT1cImlzU2hvd0FkdkZpbHRlciA/ICd0b2dnbGVPbicgOiAndG9nZ2xlT2ZmJ1wiIChjbGljayk9XCJhZHZhbmNlZFNlYXJjaCgpXCIgKm5nSWY9XCJkYXRhLkdyaWRBZHZGaWx0ZXJCYXJGaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwic2xpZGVycy1oXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGFwcC16Zm9ybSAqbmdJZj1cImRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkXCIgY2xhc3M9XCJ0by1wcmVsb2FkLXRoZS1maWVsZHNcIiBbZ3JvdXBdPVwiYWR2ZmlsdGVyR3JvdXBcIiBbZmllbGROYW1lXT1cImRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+PC9hcHAtemZvcm0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZHYtZmlsdGVyLWNvbnRhaW5lclwiICpuZ0lmPVwiaXNTaG93QWR2RmlsdGVyXCIgW0BoaWRlQW5kU2hvd0FuaW1hdGlvbl0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdi1maWx0ZXItc2VwZXJhdG9yXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3sgZ2V0VG9vbEJhckl0ZW1MYWJlbE5hbWUoJ0FkdmFuY2VkIFNlYXJjaCcpIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGFwcC16Zm9ybSBjbGFzcz1cImFkdmZpbHRlci1maWVsZHNcIiBbZ3JvdXBdPVwiYWR2ZmlsdGVyR3JvdXBcIiBbZmllbGROYW1lXT1cImRhdGEuR3JpZEFkdkZpbHRlckJhckZpZWxkXCI+PC9hcHAtemZvcm0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8a2VuZG8tZ3JpZC1jaGVja2JveC1jb2x1bW4gKm5nSWY9XCIhIWRhdGEuU2VsZWN0T3B0aW9uc1wiIFt3aWR0aF09XCI2MFwiIHNob3dTZWxlY3RBbGw9XCJ0cnVlXCIgW2NvbHVtbk1lbnVdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDwva2VuZG8tZ3JpZC1jaGVja2JveC1jb2x1bW4+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIFtzdHlsZV09XCJnZXRHcmlkQ29sdW1uU3R5bGUoKVwiIGNsYXNzPVwiZTF0YWctc3R5bGUzXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zO1wiIFtmaWVsZF09XCJjb2wuZmllbGRcIiBbdGl0bGVdPVwiY29sLnRpdGxlXCIgW3dpZHRoXT1cImNvbC53aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5SZXNpemFibGVXaWR0aF09XCJjb2wubWluUmVzaXphYmxlV2lkdGhcIiBbZmlsdGVyXT1cImNvbC5maWx0ZXJcIiBbZmlsdGVyYWJsZV09XCJmaWx0ZXJhYmxlKGNvbC5lbmFibGVGaWx0ZXJpbmcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRhYmxlXT1cInNvcnRhYmxlKGNvbC5lbmFibGVTb3J0aW5nKVwiIFtoZWFkZXJTdHlsZV09XCJnZXRHcmlkSGVhZGVyU3R5bGUoKVwiIGhlYWRlckNsYXNzPVwiZTF0YWctc3R5bGU0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvb3RlclN0eWxlXT1cImdldEdyaWRGb290ZXJTdHlsZSgpXCIgZm9vdGVyQ2xhc3M9XCJlMXRhZy1zdHlsZTlcIiBbaGlkZGVuXT1cImNvbC5oaWRkZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybWF0XT1cImNvbC5mb3JtYXRcIiBbY2xhc3NdPVwiY29sLkNsYXNzXCIgW2xvY2tlZF09XCJsb2NrZWQoY29sKVwiIGVkaXRvcj1cIm51bWVyaWNcIiBbY29sdW1uTWVudV09XCIhY29sLmRpc2FibGVDb2x1bW5NZW51XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VkaXRvcl09XCJjb2wuZWRpdG9yVHlwZVwiPlxyXG4gICAgICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJjb2wuZmllbGRUeXBlID09PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgICAgICB8fCBjb2wuZmllbGRUeXBlID09PSAnY3VycmVuY3knXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6bnVtZXJpYydcIj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItY2VsbCBbc2hvd09wZXJhdG9yc109XCJkYXRhLklzU2hvd0dyaWRGaWx0ZXJPcGVyYXRvclwiIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIiBvcGVyYXRvcj1cImVxXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZXEtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLW5lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLW51bWVyaWMtZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImNvbC5maWVsZFR5cGUgPT0gJ3pkYXRlJ1xyXG4gICAgICAgICAgICAgICB8fCBjb2wuZmllbGRUeXBlID09PSAnenRpbWUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6ZGF0ZXRpbWUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6dWlkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLmZpbHRlckJ5RGF0ZVJhbmdlID09PSB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiIG9wZXJhdG9yPVwibHRlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkYXRlLXJhbmdlLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCIgY2xhc3M9XCJkYXRlLXJhbmdlLWZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCIgW2ZpZWxkXT1cImNvbC5maWVsZFwiIFtkYXRhXT1cImRhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8L2RhdGUtcmFuZ2UtZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wuZmlsdGVyQnlEYXRlUmFuZ2UgPT09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1kYXRlLWZpbHRlci1jZWxsIFtzaG93T3BlcmF0b3JzXT1cImRhdGEuSXNTaG93R3JpZEZpbHRlck9wZXJhdG9yXCIgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCIgb3BlcmF0b3I9XCJsdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtZGF0ZS1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCJjb2wuZmllbGRUeXBlID09PSAnY2hlY2tib3gnXCI+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLWJvb2xlYW4tZmlsdGVyLWNlbGwgW2NvbHVtbl09XCJjb2x1bW5cIiBbZmlsdGVyXT1cImZpbHRlclwiIG9wZXJhdG9yPVwiZXFcIj5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1ib29sZWFuLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLXN0cmluZy1maWx0ZXItY2VsbCBbc2hvd09wZXJhdG9yc109XCJkYXRhLklzU2hvd0dyaWRGaWx0ZXJPcGVyYXRvclwiIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiIG9wZXJhdG9yPVwiY29udGFpbnNcIj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1jb250YWlucy1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1jb250YWlucy1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1uZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLXN0YXJ0c3dpdGgtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItc3RhcnRzd2l0aC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1lbmRzd2l0aC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1lbmRzd2l0aC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtc3RyaW5nLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tIEdyaWQgRWRpdCBUZW1wbGF0ZSAtLT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRFZGl0VGVtcGxhdGUgKm5nSWY9XCJkYXRhLkVuYWJsZUdyaWRDb21tYW5kIFwiIGxldC1kYXRhSXRlbT1cImRhdGFJdGVtXCIgbGV0LWNvbHVtbj1cImNvbFwiIGxldC1mb3JtR3JvdXA9XCJmb3JtR3JvdXBcIiBsZXQtaXNOZXc9XCJpc05ld1wiPlxyXG4gICAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJjb2wuZmllbGRUeXBlXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1udW1lcmljdGV4dGJveCAjY2VsbEFuY2hvciBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpXCI+PC9rZW5kby1udW1lcmljdGV4dGJveD5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1wb3B1cCBbYW5jaG9yXT1cImNlbGxBbmNob3IubnVtZXJpY0lucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKS5pbnZhbGlkICYmICEoaXNOZXcgJiYgZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwQ2xhc3M9XCJrLXdpZGdldCBrLXRvb2x0aXAgay10b29sdGlwLXZhbGlkYXRpb24gay1pbnZhbGlkLW1zZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDJweDsgb3BhY2l0eTogMC41O1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktd2FybmluZ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbC5OYW1lIH19IHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5wYXR0ZXJuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sLlZhbGlkYXRvck1lc3NhZ2UgPyBjb2wuVmFsaWRhdG9yTWVzc2FnZSA6IFwiUGxlYXNlIGNoZWNrIHRoZSBpbnB1dCB2YWx1ZS5cIiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tcG9wdXA+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXRleHRib3ggI2NlbGxBbmNob3IgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5nZXQoY29sLmZpZWxkKVwiPjwva2VuZG8tdGV4dGJveD5cclxuICAgICAgICAgICAgICAgIDxrZW5kby1wb3B1cCBbYW5jaG9yXT1cImNlbGxBbmNob3IuaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLmludmFsaWQgJiYgIShpc05ldyAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkudW50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXBDbGFzcz1cImstd2lkZ2V0IGstdG9vbHRpcCBrLXRvb2x0aXAtdmFsaWRhdGlvbiBrLWludmFsaWQtbXNnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctbGVmdDogMnB4OyBvcGFjaXR5OiAwLjU7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS13YXJuaW5nXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiPnt7IGNvbC5OYW1lIH19IGlzIHJlcXVpcmVkLjwvaW9uLWxhYmVsPi0tPlxyXG4gICAgICAgICAgICAgICAgICAtbFxyXG5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGNvbC5OYW1lIH19IHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBzdHlsZT1cInBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctbGVmdDogM3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuaW52YWxpZCAmJiAhZm9ybUdyb3VwLmdldChjb2wuZmllbGQpLnVudG91Y2hlZCAmJiBmb3JtR3JvdXAuZ2V0KGNvbC5maWVsZCkuZXJyb3JzPy5wYXR0ZXJuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29sLlZhbGlkYXRvck1lc3NhZ2UgPyBjb2wuVmFsaWRhdG9yTWVzc2FnZSA6IFwiUGxlYXNlIGNoZWNrIHRoZSBpbnB1dCB2YWx1ZS5cIiB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tcG9wdXA+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWRhdGFJdGVtIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW46IDFweCAwO1wiICpuZ0lmPVwiIWNvbC5jbGlja2FibGVJY29ucyAmJiBjb2wuaXNFZGl0YWJsZUluR3JpZCAhPT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgW25nU3dpdGNoXT1cImNvbC5maWVsZFR5cGVcIiBbbmdDbGFzc109XCJnZXRDbGFzcyhkYXRhSXRlbSwgY29sKVwiIFtzdHlsZV09XCJnZXRDZWxsU3R5bGUoY29sLCBkYXRhSXRlbSlcIiBbYXR0ci5kYXRhLWlkXT1cImRhdGFJdGVtLklkXCIgW2F0dHIuY29sdW1uLW5hbWVdPVwiY29sLmZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJzaG93UG9wT3Zlcihjb2wsICRldmVudClcIiAobW91c2VsZWF2ZSk9XCJjbG9zZVBvcE92ZXIoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogJ2RkL01NL3l5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogJ0hIOm1tJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pzaG9ydGRhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogJ01NTSB5eXl5JyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6dWlkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgbnVtYmVyIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInY3VycmVuY3knXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgbnVtYmVyOiBnZXRGb3JtYXQoY29sLCAnMS4yLTInKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pudW1lcmljJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCkgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid1cmwnXCIgc3R5bGU9XCJjb2xvcjogYmx1ZTsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO1wiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbjogNXB4IDA7XCIgKm5nSWY9XCJjb2wuZ3JpZENlbGxSZXBsYWNlVmFsdWUgJiYgZ2V0SWNvbk5hbWUoY29sLmdyaWRDZWxsUmVwbGFjZVZhbHVlLCBkYXRhSXRlbVtjb2wuZmllbGRdKSAhPT0gJydcIj5cclxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZ2V0SWNvbk5hbWUoY29sLmdyaWRDZWxsUmVwbGFjZVZhbHVlLCBkYXRhSXRlbVtjb2wuZmllbGRdKVwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFjb2wuZ3JpZENlbGxSZXBsYWNlVmFsdWVcIiBbbmdTd2l0Y2hdPVwiY2VsbFN0eWxlQ29uZGl0aW9uKGNvbCwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT10cnVlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsU3R5bGVDb25kaXRpb25EZWZhdWx0XCIgW3N0eWxlXT1cInNldENlbGxTdHlsZUNvbmRpdGlvbihjb2wsIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCIhIWNvbC5uYXZpZ2F0ZVRvXCIgKGNsaWNrKT1cIm9uTmF2aWdhdGVUbygkZXZlbnQsIGNvbCwgZGF0YUl0ZW0sIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIGNvbG9yPVwibGlnaHRcIiBzaXplPVwic21hbGxcIj5cclxuICAgICAgICAgICAge3sgY29sLkNsaWNrYWJsZUljb25zIH19XHJcbiAgICAgICAgICAgIDxpb24taWNvbiBzbG90PSBcImVuZFwiIG5hbWU9XCJhcnJvdy1mb3J3YXJkXCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiA1cHggMDtcIiAqbmdJZj1cImNvbC5pc0VkaXRhYmxlSW5HcmlkID09PSB0cnVlICYmIGlzSW5saW5lRm9ybUdyb3VwSGFzVmFsdWUoKSAmJiAhaXNJbmxpbmVFZGl0SW5wdXRGaWVsZExvYWRpbmcgJiYgIWNvbC5ncmlkQ2VsbFJlcGxhY2VWYWx1ZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNVwiXHJcbiAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2xhc3MoZGF0YUl0ZW0sIGNvbClcIiBjbGFzcz1cImUxdGFnLXN0eWxlNVwiIFtzdHlsZV09XCJnZXRDZWxsU3R5bGVGb3JJbmxpbmVFZGl0KGNvbCwgZGF0YUl0ZW0sIHJvd0luZGV4KVwiPlxyXG4gICAgICAgICAgICAgIDxhcHAtemlucHV0LWNvbnRhaW5lciBbZGF0YV09XCJnZXRJbmxpbmVGaWVsZChjb2wuZmllbGQpXCIgW2dyb3VwXT1cImdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwiZ2V0SW5saW5lRm9ybShkYXRhSXRlbSwgcm93SW5kZXgpXCIgW2NvbnRhaW5lckZpZWxkXT1cImNvbnRhaW5lckZpZWxkXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU2XCIgY2xhc3M9XCJlMXRhZy1zdHlsZTZcIj5cclxuICAgICAgICAgICAgICA8L2FwcC16aW5wdXQtY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tdG9wOiAxMHB4O1wiICpuZ0Zvcj1cImxldCBpY29uIG9mIGNvbC5jbGlja2FibGVJY29uc1wiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImljb24uQ2xhc3MgPyBpY29uLkNsYXNzIDogJydcIiAqbmdJZj1cIiEhaWNvbiAmJiAoISFkYXRhSXRlbS5XRlNfU3RhdHVzQ29kZSAmJiAhIWljb24pXHJcbiAgICAgICAgICAgICAgPyBkYXRhSXRlbS5XRlNfU3RhdHVzQ29kZSAhPT0gaWNvbi5XRlNfU3RhdHVzQ29kZVxyXG4gICAgICAgICAgICAgIDogdHJ1ZTtcclxuICAgICAgICAgICAgZWxzZSBkaXNhYmxlZEJ1dHRvblwiIChjbGljayk9XCJvbkJ0bkNsaWNrKCRldmVudCwgaWNvbiwgZGF0YUl0ZW0sIGRhdGFJdGVtW2NvbC5maWVsZF0pXCI+XHJcbiAgICAgICAgICAgICAgICB7e2ljb24uTmFtZSB8fCBkYXRhSXRlbVtjb2wuZmllbGRdfX0gPGZhLWljb24gW2ljb25dPVwiaWNvbi5JY29uXCIgc3R5bGU9XCJwYWRkaW5nOiA0cHggNnB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc2FibGVkQnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPCEtLSA8c3Ryb25nPnt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfX08L3N0cm9uZz4gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJ7e2RhdGFJdGVtLkRpc2NvbnRpbnVlZCA/ICdkaXNjb250aW51ZWQnIDogJ2FjdGl2ZSd9fVwiPlxyXG4gICAgICAgICAgICAgIHt7ZGF0YUl0ZW0uRGlzY29udGludWVkID8gXCJkaXNjb250aW51ZWRcIiA6IFwiYWN0aXZlXCJ9fVxyXG4gICAgICAgICAgICA8L3NwYW4+IC0tPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGb290ZXJUZW1wbGF0ZSBsZXQtY29sdW1uIGxldC1jb2x1bW5JbmRleD1cImNvbHVtbkluZGV4XCIgKm5nSWY9XCJkYXRhLkVuYWJsZUFnZ3JlZ2F0ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiA1cHggMDtcIiBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkVHlwZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlN1wiIGNsYXNzPVwiZTF0YWctc3R5bGU3XCI+XHJcbiAgICAgICAgICAgICAge3tjb2wuYWdncmVnYXRlVHlwZX19XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6ZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IGRhdGU6ICdkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3p0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgZGF0ZTogJ0hIOm1tJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pzaG9ydGRhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiAnTU1NIHl5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIHwgZGF0ZTogJ2RkL01NL3l5eXkgaGg6bW06c3MgYWEnIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenVpZGF0ZXRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBkYXRlOiAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfCBudW1iZXIgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidjdXJyZW5jeSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCwgJzEuMi4yJykgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6bnVtZXJpYydcIj5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVWYWx1ZSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCkgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid1cmwnXCIgc3R5bGU9XCJjb2xvcjogYmx1ZTsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVZhbHVlIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVmFsdWUgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxyXG4gICAgICAgIDxrZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uICpuZ0lmPVwiZGF0YS5FbmFibGVHcmlkQ29tbWFuZFwiIHdpZHRoPVwiMTgwXCIgW2NvbHVtbk1lbnVdPVwiZmFsc2VcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZThcIiBjbGFzcz1cImUxdGFnLXN0eWxlOFwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtaXNOZXc9XCJpc05ld1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZFNhdmVDb21tYW5kPlxyXG4gICAgICAgICAgICAgIHt7IGlzTmV3ID8gJ1NhdmUnIDogJ1VwZGF0ZScgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkQ2FuY2VsQ29tbWFuZCBbcHJpbWFyeV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAge3sgaXNOZXcgPyAnRGlzY2FyZCBjaGFuZ2VzJyA6ICdDYW5jZWwnIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZEVkaXRDb21tYW5kPlxyXG4gICAgICAgICAgICAgIHt7IFwiRWRpdFwiIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGtlbmRvR3JpZFJlbW92ZUNvbW1hbmQ+XHJcbiAgICAgICAgICAgICAge3sgXCJSZW1vdmVcIiB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9rZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uPlxyXG4gICAgICAgIDxrZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uICpuZ0lmPVwiZGF0YS5FbmFibGVDdXN0b21SZW1vdmVDb21tYW5kXCIgd2lkdGg9XCIxODBcIiBbY29sdW1uTWVudV09XCJmYWxzZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlOFwiIGNsYXNzPVwiZTF0YWctc3R5bGU4XCI+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1pc05ldz1cImlzTmV3XCIgbGV0LWRhdGFJdGVtIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGtlbmRvQnV0dG9uIChjbGljayk9XCJncmlkQ3VzdG9tUmVtb3ZlQ29tbWFuZChkYXRhSXRlbSwgcm93SW5kZXgpXCIgKm5nSWY9XCJkYXRhLkVuYWJsZUN1c3RvbVJlbW92ZUNvbW1hbmRcIj5cclxuICAgICAgICAgICAgICB7eyBcIlJlbW92ZVwiIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2tlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4+XHJcbiAgICAgICAgPGtlbmRvLWdyaWQtZXhjZWwgZmlsZU5hbWU9XCJFeHBvcnQueGxzeFwiIFtmZXRjaERhdGFdPVwiYWxsUmVzdWx0c1wiPjwva2VuZG8tZ3JpZC1leGNlbD5cclxuICAgICAgPC9rZW5kby1ncmlkPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSBmb3IgREVDIGF1dG8gc2Nyb2xsaW5nIC0tPlxyXG4gIDxkaXYgaWQ9XCJlbmQtb2YtZ3JpZFwiPjwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbiJdfQ==
|