@microsoft/windows-admin-center-sdk 2.538.1 → 2.541.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/angular/assets/strings/de-DE/strings.json +1 -1
- package/angular/assets/strings/es-ES/strings.json +1 -1
- package/angular/assets/strings/it-IT/strings.json +1 -1
- package/angular/assets/strings/ko-KR/strings.json +1 -1
- package/angular/assets/strings/nl-NL/strings.json +1 -1
- package/angular/assets/strings/pt-PT/strings.json +1 -1
- package/angular/assets/strings/tr-TR/strings.json +1 -1
- package/angular/assets/strings/zh-CN/strings.json +1 -1
- package/angular/assets/strings/zh-TW/strings.json +1 -1
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +172 -112
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +1 -1
- package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
- package/angular/esm2015/src/controls/header/header.component.js +3 -1
- package/angular/esm2015/src/controls/header/index.js +2 -2
- package/angular/esm2015/src/controls/page-alert-bar/models/page-alert.js +2 -1
- package/angular/esm2015/src/controls/page-alert-bar/page-alert-bar.component.js +11 -3
- package/angular/esm2015/src/controls/property-grid/property-grid.component.js +2 -2
- package/angular/esm2015/src/controls/wizard/wizard-builder.js +13 -1
- package/angular/esm2015/src/controls/wizard/wizard.component.js +126 -109
- package/angular/esm2015/src/controls/wizard/wizard.module.js +12 -7
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +156 -113
- package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
- package/angular/src/controls/header/header.component.d.ts +7 -0
- package/angular/src/controls/header/index.d.ts +1 -1
- package/angular/src/controls/page-alert-bar/models/page-alert.d.ts +2 -1
- package/angular/src/controls/page-alert-bar/page-alert-bar.component.d.ts +1 -0
- package/angular/src/controls/wizard/wizard-builder.d.ts +13 -0
- package/angular/src/controls/wizard/wizard.component.d.ts +5 -0
- package/angular/src/controls/wizard/wizard.module.d.ts +10 -9
- package/core/data/active-directory/active-directory.js +2 -2
- package/core/data/active-directory/active-directory.js.map +1 -1
- package/core/data/powershell.d.ts +2 -2
- package/core/data/powershell.js +2 -2
- package/core/data/powershell.js.map +1 -1
- package/core/notification/notification-manager.d.ts +0 -18
- package/core/notification/notification-manager.js +10 -55
- package/core/notification/notification-manager.js.map +1 -1
- package/core/notification/notification.d.ts +1 -10
- package/core/notification/notification.js +33 -30
- package/core/notification/notification.js.map +1 -1
- package/core/notification/powershell-notification.d.ts +15 -15
- package/core/notification/powershell-notification.js +8 -19
- package/core/notification/powershell-notification.js.map +1 -1
- package/core/notification/socket-signalr.d.ts +14 -8
- package/core/notification/socket-signalr.js +19 -18
- package/core/notification/socket-signalr.js.map +1 -1
- package/core/notification/work-item-manager.d.ts +0 -4
- package/core/notification/work-item-manager.js +20 -76
- package/core/notification/work-item-manager.js.map +1 -1
- package/package.json +5 -2
- package/styles/css/main-v2.css +1 -1
- package/tools/wac-cli/src/create/main.js +0 -1
- package/tools/wac-cli/src/create/main.js.map +1 -1
- package/tools/wac-cli/templates/internal/package.json +4 -0
- package/tools/wac-cli/templates/library/angular.json +3 -0
- package/tools/wac-cli/templates/wac-template/angular.json +3 -0
- package/tools/wac-cli/templates/wac-template/package.json +4 -0
- package/tools/wac-cli/templates/wac-template/src/app/default/default.component.spec.ts +2 -3
- package/core/notification/notification-message.d.ts +0 -41
- package/core/notification/notification-message.js +0 -3
- package/core/notification/notification-message.js.map +0 -1
|
@@ -19,14 +19,14 @@ import * as i0 from "@angular/core";
|
|
|
19
19
|
import * as i1 from "../../service/app-context.service";
|
|
20
20
|
const _c0 = ["wizardFooter"];
|
|
21
21
|
function WizardComponent_div_1_sme_badge_3_Template(rf, ctx) { if (rf & 1) {
|
|
22
|
-
i0.ɵɵelement(0, "sme-badge",
|
|
22
|
+
i0.ɵɵelement(0, "sme-badge", 14);
|
|
23
23
|
} }
|
|
24
24
|
function WizardComponent_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
-
i0.ɵɵelementStart(0, "div",
|
|
26
|
-
i0.ɵɵelementStart(1, "h3",
|
|
25
|
+
i0.ɵɵelementStart(0, "div", 11);
|
|
26
|
+
i0.ɵɵelementStart(1, "h3", 12);
|
|
27
27
|
i0.ɵɵtext(2);
|
|
28
28
|
i0.ɵɵelementEnd();
|
|
29
|
-
i0.ɵɵtemplate(3, WizardComponent_div_1_sme_badge_3_Template, 1, 0, "sme-badge",
|
|
29
|
+
i0.ɵɵtemplate(3, WizardComponent_div_1_sme_badge_3_Template, 1, 0, "sme-badge", 13);
|
|
30
30
|
i0.ɵɵelementEnd();
|
|
31
31
|
} if (rf & 2) {
|
|
32
32
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -36,178 +36,191 @@ function WizardComponent_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
|
36
36
|
i0.ɵɵadvance(1);
|
|
37
37
|
i0.ɵɵproperty("ngIf", ctx_r0.isInPreview);
|
|
38
38
|
} }
|
|
39
|
-
function
|
|
40
|
-
i0.ɵɵ
|
|
41
|
-
|
|
39
|
+
function WizardComponent_sme_header_2_sme_badge_1_Template(rf, ctx) { if (rf & 1) {
|
|
40
|
+
i0.ɵɵelement(0, "sme-badge", 17);
|
|
41
|
+
} }
|
|
42
|
+
function WizardComponent_sme_header_2_Template(rf, ctx) { if (rf & 1) {
|
|
43
|
+
i0.ɵɵelementStart(0, "sme-header", 15);
|
|
44
|
+
i0.ɵɵtemplate(1, WizardComponent_sme_header_2_sme_badge_1_Template, 1, 0, "sme-badge", 16);
|
|
42
45
|
i0.ɵɵelementEnd();
|
|
43
46
|
} if (rf & 2) {
|
|
44
47
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
48
|
+
i0.ɵɵproperty("text", ctx_r1.headerData.text)("smeIconClassName", ctx_r1.headerData.smeIconClassName)("subtitle", ctx_r1.headerData.subtitle);
|
|
49
|
+
i0.ɵɵadvance(1);
|
|
50
|
+
i0.ɵɵproperty("ngIf", ctx_r1.isInPreview);
|
|
51
|
+
} }
|
|
52
|
+
function WizardComponent_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
53
|
+
i0.ɵɵelementStart(0, "div");
|
|
54
|
+
i0.ɵɵelement(1, "sme-banner", 18);
|
|
55
|
+
i0.ɵɵelementEnd();
|
|
56
|
+
} if (rf & 2) {
|
|
57
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
45
58
|
i0.ɵɵadvance(1);
|
|
46
|
-
i0.ɵɵproperty("items",
|
|
59
|
+
i0.ɵɵproperty("items", ctx_r2.bannerItems);
|
|
47
60
|
} }
|
|
48
61
|
const _c1 = function (a0, a1, a2) { return { "sme-wizard-stage-completed": a0, "sme-wizard-stage-clicked": a1, "sme-wizard-stage-active": a2 }; };
|
|
49
62
|
const _c2 = function (a0) { return { "sme-icon sme-icon-accept sme-icon-size-xxs": a0 }; };
|
|
50
63
|
const _c3 = function (a0, a1, a2, a3) { return { "sme-font-emphasis1 sme-wizard-stage-active": a0, "sme-wizard-stage-completed": a1, "sme-margin-left-xs": a2, "sme-layout-none": a3 }; };
|
|
51
|
-
function
|
|
52
|
-
const
|
|
53
|
-
i0.ɵɵelementStart(0, "button",
|
|
54
|
-
i0.ɵɵlistener("click", function
|
|
55
|
-
i0.ɵɵelementStart(1, "span",
|
|
64
|
+
function WizardComponent_div_4_button_1_Template(rf, ctx) { if (rf & 1) {
|
|
65
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
66
|
+
i0.ɵɵelementStart(0, "button", 21);
|
|
67
|
+
i0.ɵɵlistener("click", function WizardComponent_div_4_button_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const val_r12 = ctx.index; const ctx_r13 = i0.ɵɵnextContext(2); return ctx_r13.onStageClick(val_r12); });
|
|
68
|
+
i0.ɵɵelementStart(1, "span", 22);
|
|
56
69
|
i0.ɵɵtext(2);
|
|
57
70
|
i0.ɵɵelementEnd();
|
|
58
|
-
i0.ɵɵelementStart(3, "span",
|
|
71
|
+
i0.ɵɵelementStart(3, "span", 23);
|
|
59
72
|
i0.ɵɵtext(4);
|
|
60
73
|
i0.ɵɵelementEnd();
|
|
61
74
|
i0.ɵɵelementEnd();
|
|
62
75
|
} if (rf & 2) {
|
|
63
|
-
const
|
|
64
|
-
const
|
|
65
|
-
const
|
|
66
|
-
i0.ɵɵclassProp("sme-active",
|
|
67
|
-
i0.ɵɵproperty("title",
|
|
68
|
-
i0.ɵɵattribute("aria-label",
|
|
76
|
+
const stage_r11 = ctx.$implicit;
|
|
77
|
+
const val_r12 = ctx.index;
|
|
78
|
+
const ctx_r10 = i0.ɵɵnextContext(2);
|
|
79
|
+
i0.ɵɵclassProp("sme-active", val_r12 === ctx_r10.stagesArrayIndex)("sme-selected", val_r12 === ctx_r10.stagesArrayIndex)("aria-selected", val_r12 === ctx_r10.stagesArrayIndex)("sme-wizard-stage-focus", val_r12 === ctx_r10.stagesArrayIndex);
|
|
80
|
+
i0.ɵɵproperty("title", stage_r11.name)("smeTelemetryDataBlob", ctx_r10.telemetryData)("smeTelemetryId", "wizardStage" + (val_r12 + 1))("disabled", ctx_r10.stageIndexDisabled(stage_r11, val_r12))("smeTelemetryDisableElement", ctx_r10.stageIndexDisabled(stage_r11, val_r12))("ngClass", i0.ɵɵpureFunction3(19, _c1, stage_r11.completed, val_r12 === ctx_r10.stagesArrayIndex, stage_r11.active));
|
|
81
|
+
i0.ɵɵattribute("aria-label", stage_r11.name);
|
|
69
82
|
i0.ɵɵadvance(1);
|
|
70
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(23, _c2,
|
|
83
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(23, _c2, stage_r11.completed));
|
|
71
84
|
i0.ɵɵadvance(1);
|
|
72
|
-
i0.ɵɵtextInterpolate1(" ", !
|
|
85
|
+
i0.ɵɵtextInterpolate1(" ", !stage_r11.completed ? val_r12 + 1 : "", " ");
|
|
73
86
|
i0.ɵɵadvance(1);
|
|
74
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction4(25, _c3,
|
|
87
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction4(25, _c3, val_r12 === ctx_r10.stagesArrayIndex || stage_r11.active, stage_r11.completed, !stage_r11.completed, !ctx_r10.shouldRenderTextOnSteps));
|
|
75
88
|
i0.ɵɵadvance(1);
|
|
76
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
89
|
+
i0.ɵɵtextInterpolate1(" ", stage_r11.name, " ");
|
|
77
90
|
} }
|
|
78
|
-
function
|
|
79
|
-
i0.ɵɵelementStart(0, "div",
|
|
80
|
-
i0.ɵɵtemplate(1,
|
|
91
|
+
function WizardComponent_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
92
|
+
i0.ɵɵelementStart(0, "div", 19);
|
|
93
|
+
i0.ɵɵtemplate(1, WizardComponent_div_4_button_1_Template, 5, 30, "button", 20);
|
|
81
94
|
i0.ɵɵelementEnd();
|
|
82
95
|
} if (rf & 2) {
|
|
83
|
-
const
|
|
96
|
+
const ctx_r3 = i0.ɵɵnextContext();
|
|
84
97
|
i0.ɵɵadvance(1);
|
|
85
|
-
i0.ɵɵproperty("ngForOf",
|
|
98
|
+
i0.ɵɵproperty("ngForOf", ctx_r3.stages);
|
|
86
99
|
} }
|
|
87
|
-
function
|
|
88
|
-
i0.ɵɵelementStart(0, "span",
|
|
100
|
+
function WizardComponent_div_6_div_1_button_1_span_3_Template(rf, ctx) { if (rf & 1) {
|
|
101
|
+
i0.ɵɵelementStart(0, "span", 34);
|
|
89
102
|
i0.ɵɵtext(1);
|
|
90
103
|
i0.ɵɵelementEnd();
|
|
91
104
|
} if (rf & 2) {
|
|
92
|
-
const
|
|
105
|
+
const step_r17 = i0.ɵɵnextContext().$implicit;
|
|
93
106
|
i0.ɵɵadvance(1);
|
|
94
|
-
i0.ɵɵtextInterpolate(
|
|
107
|
+
i0.ɵɵtextInterpolate(step_r17.name);
|
|
95
108
|
} }
|
|
96
109
|
const _c4 = function (a0) { return { "sme-step-active sme-scheme-nav-list-item sme-active sme-color-base-5": a0 }; };
|
|
97
|
-
function
|
|
98
|
-
const
|
|
99
|
-
i0.ɵɵelementStart(0, "button",
|
|
100
|
-
i0.ɵɵlistener("click", function
|
|
101
|
-
i0.ɵɵelementStart(1, "span",
|
|
110
|
+
function WizardComponent_div_6_div_1_button_1_Template(rf, ctx) { if (rf & 1) {
|
|
111
|
+
const _r22 = i0.ɵɵgetCurrentView();
|
|
112
|
+
i0.ɵɵelementStart(0, "button", 31);
|
|
113
|
+
i0.ɵɵlistener("click", function WizardComponent_div_6_div_1_button_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r22); const index_r18 = ctx.index; const ctx_r21 = i0.ɵɵnextContext(3); return ctx_r21.onStepClick(index_r18); });
|
|
114
|
+
i0.ɵɵelementStart(1, "span", 32);
|
|
102
115
|
i0.ɵɵtext(2);
|
|
103
116
|
i0.ɵɵelementEnd();
|
|
104
|
-
i0.ɵɵtemplate(3,
|
|
117
|
+
i0.ɵɵtemplate(3, WizardComponent_div_6_div_1_button_1_span_3_Template, 2, 1, "span", 33);
|
|
105
118
|
i0.ɵɵelementEnd();
|
|
106
119
|
} if (rf & 2) {
|
|
107
|
-
const
|
|
108
|
-
const
|
|
109
|
-
const
|
|
110
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(10, _c4,
|
|
111
|
-
i0.ɵɵattribute("aria-label",
|
|
120
|
+
const step_r17 = ctx.$implicit;
|
|
121
|
+
const index_r18 = ctx.index;
|
|
122
|
+
const ctx_r16 = i0.ɵɵnextContext(3);
|
|
123
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(10, _c4, index_r18 === ctx_r16.stepIndex))("disabled", ctx_r16.stepIndexDisabled(step_r17, index_r18))("smeTelemetryDisableElement", ctx_r16.stepIndexDisabled(step_r17, index_r18))("smeTelemetryDataBlob", ctx_r16.telemetryData)("smeTelemetryId", "wizardStep" + (index_r18 + 1))("title", ctx_r16.isExpanded ? null : step_r17.name);
|
|
124
|
+
i0.ɵɵattribute("aria-label", ctx_r16.isExpanded ? null : step_r17.name);
|
|
112
125
|
i0.ɵɵadvance(2);
|
|
113
|
-
i0.ɵɵtextInterpolate2("",
|
|
126
|
+
i0.ɵɵtextInterpolate2("", ctx_r16.stagesArrayIndex + 1, ".", index_r18 + 1, "");
|
|
114
127
|
i0.ɵɵadvance(1);
|
|
115
|
-
i0.ɵɵproperty("ngIf",
|
|
128
|
+
i0.ɵɵproperty("ngIf", ctx_r16.isExpanded);
|
|
116
129
|
} }
|
|
117
130
|
const _c5 = function (a0) { return { "sme-wizard-left-pane-min-width-expanded": a0 }; };
|
|
118
|
-
function
|
|
119
|
-
i0.ɵɵelementStart(0, "div",
|
|
120
|
-
i0.ɵɵtemplate(1,
|
|
131
|
+
function WizardComponent_div_6_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
132
|
+
i0.ɵɵelementStart(0, "div", 29);
|
|
133
|
+
i0.ɵɵtemplate(1, WizardComponent_div_6_div_1_button_1_Template, 4, 12, "button", 30);
|
|
121
134
|
i0.ɵɵelementEnd();
|
|
122
135
|
} if (rf & 2) {
|
|
123
|
-
const
|
|
124
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(2, _c5,
|
|
136
|
+
const ctx_r15 = i0.ɵɵnextContext(2);
|
|
137
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(2, _c5, ctx_r15.isExpanded));
|
|
125
138
|
i0.ɵɵadvance(1);
|
|
126
|
-
i0.ɵɵproperty("ngForOf",
|
|
139
|
+
i0.ɵɵproperty("ngForOf", ctx_r15.getStepsForStage());
|
|
127
140
|
} }
|
|
128
141
|
const _c6 = function (a0, a1) { return { "sme-icon-chevronLeft": a0, "sme-icon-chevronRight": a1 }; };
|
|
129
|
-
function
|
|
130
|
-
const
|
|
131
|
-
i0.ɵɵelementStart(0, "div",
|
|
132
|
-
i0.ɵɵtemplate(1,
|
|
133
|
-
i0.ɵɵelementStart(2, "div",
|
|
134
|
-
i0.ɵɵelementStart(3, "button",
|
|
135
|
-
i0.ɵɵlistener("click", function
|
|
136
|
-
i0.ɵɵelement(4, "span",
|
|
142
|
+
function WizardComponent_div_6_Template(rf, ctx) { if (rf & 1) {
|
|
143
|
+
const _r24 = i0.ɵɵgetCurrentView();
|
|
144
|
+
i0.ɵɵelementStart(0, "div", 24);
|
|
145
|
+
i0.ɵɵtemplate(1, WizardComponent_div_6_div_1_Template, 2, 4, "div", 25);
|
|
146
|
+
i0.ɵɵelementStart(2, "div", 26);
|
|
147
|
+
i0.ɵɵelementStart(3, "button", 27);
|
|
148
|
+
i0.ɵɵlistener("click", function WizardComponent_div_6_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r24); const ctx_r23 = i0.ɵɵnextContext(); return ctx_r23.togglePane(); });
|
|
149
|
+
i0.ɵɵelement(4, "span", 28);
|
|
137
150
|
i0.ɵɵelementEnd();
|
|
138
151
|
i0.ɵɵelementEnd();
|
|
139
152
|
i0.ɵɵelementEnd();
|
|
140
153
|
} if (rf & 2) {
|
|
141
|
-
const
|
|
154
|
+
const ctx_r4 = i0.ɵɵnextContext();
|
|
142
155
|
i0.ɵɵadvance(1);
|
|
143
|
-
i0.ɵɵproperty("ngIf", !
|
|
156
|
+
i0.ɵɵproperty("ngIf", !ctx_r4.wizardIsFinished && !ctx_r4.hideStepsListSidePane);
|
|
144
157
|
i0.ɵɵadvance(2);
|
|
145
|
-
i0.ɵɵproperty("title",
|
|
146
|
-
i0.ɵɵattribute("aria-expanded",
|
|
158
|
+
i0.ɵɵproperty("title", ctx_r4.isExpanded ? ctx_r4.strings.MsftSmeShell.Angular.Wizard.collapseStepsList : ctx_r4.strings.MsftSmeShell.Angular.Wizard.expandStepsList);
|
|
159
|
+
i0.ɵɵattribute("aria-expanded", ctx_r4.isExpanded)("aria-label", ctx_r4.isExpanded ? ctx_r4.strings.MsftSmeShell.Angular.Wizard.collapseStepsList : ctx_r4.strings.MsftSmeShell.Angular.Wizard.expandStepsList);
|
|
147
160
|
i0.ɵɵadvance(1);
|
|
148
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(5, _c6,
|
|
161
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(5, _c6, ctx_r4.isExpanded, !ctx_r4.isExpanded));
|
|
149
162
|
} }
|
|
150
|
-
function
|
|
163
|
+
function WizardComponent_div_8_Template(rf, ctx) { if (rf & 1) {
|
|
151
164
|
i0.ɵɵelementStart(0, "div");
|
|
152
|
-
i0.ɵɵelement(1, "sme-page-alert-bar",
|
|
165
|
+
i0.ɵɵelement(1, "sme-page-alert-bar", 35);
|
|
153
166
|
i0.ɵɵelementEnd();
|
|
154
167
|
} if (rf & 2) {
|
|
155
|
-
const
|
|
168
|
+
const ctx_r5 = i0.ɵɵnextContext();
|
|
156
169
|
i0.ɵɵadvance(1);
|
|
157
|
-
i0.ɵɵproperty("alert",
|
|
170
|
+
i0.ɵɵproperty("alert", ctx_r5.alert);
|
|
158
171
|
} }
|
|
159
|
-
function
|
|
160
|
-
i0.ɵɵelementStart(0, "div",
|
|
161
|
-
i0.ɵɵelement(1, "sme-loading-wheel",
|
|
172
|
+
function WizardComponent_div_11_div_7_Template(rf, ctx) { if (rf & 1) {
|
|
173
|
+
i0.ɵɵelementStart(0, "div", 45);
|
|
174
|
+
i0.ɵɵelement(1, "sme-loading-wheel", 46);
|
|
162
175
|
i0.ɵɵelementEnd();
|
|
163
176
|
} }
|
|
164
|
-
function
|
|
165
|
-
const
|
|
166
|
-
i0.ɵɵelementStart(0, "div",
|
|
167
|
-
i0.ɵɵelementStart(2, "div",
|
|
168
|
-
i0.ɵɵelementStart(3, "button",
|
|
169
|
-
i0.ɵɵlistener("click", function
|
|
177
|
+
function WizardComponent_div_11_Template(rf, ctx) { if (rf & 1) {
|
|
178
|
+
const _r29 = i0.ɵɵgetCurrentView();
|
|
179
|
+
i0.ɵɵelementStart(0, "div", 36, 37);
|
|
180
|
+
i0.ɵɵelementStart(2, "div", 38);
|
|
181
|
+
i0.ɵɵelementStart(3, "button", 39);
|
|
182
|
+
i0.ɵɵlistener("click", function WizardComponent_div_11_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r29); const ctx_r28 = i0.ɵɵnextContext(); return ctx_r28.onBackClick(); });
|
|
170
183
|
i0.ɵɵtext(4);
|
|
171
184
|
i0.ɵɵelementEnd();
|
|
172
|
-
i0.ɵɵelementStart(5, "button",
|
|
173
|
-
i0.ɵɵlistener("click", function
|
|
185
|
+
i0.ɵɵelementStart(5, "button", 40);
|
|
186
|
+
i0.ɵɵlistener("click", function WizardComponent_div_11_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r29); const ctx_r30 = i0.ɵɵnextContext(); return ctx_r30.onNextClick(); });
|
|
174
187
|
i0.ɵɵtext(6);
|
|
175
188
|
i0.ɵɵelementEnd();
|
|
176
|
-
i0.ɵɵtemplate(7,
|
|
189
|
+
i0.ɵɵtemplate(7, WizardComponent_div_11_div_7_Template, 2, 0, "div", 41);
|
|
177
190
|
i0.ɵɵelementEnd();
|
|
178
|
-
i0.ɵɵelementStart(8, "button",
|
|
179
|
-
i0.ɵɵlistener("click", function
|
|
191
|
+
i0.ɵɵelementStart(8, "button", 42);
|
|
192
|
+
i0.ɵɵlistener("click", function WizardComponent_div_11_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r29); const ctx_r31 = i0.ɵɵnextContext(); return ctx_r31.onSkipClick(); });
|
|
180
193
|
i0.ɵɵtext(9);
|
|
181
194
|
i0.ɵɵelementEnd();
|
|
182
|
-
i0.ɵɵelementStart(10, "button",
|
|
183
|
-
i0.ɵɵlistener("click", function
|
|
195
|
+
i0.ɵɵelementStart(10, "button", 43, 44);
|
|
196
|
+
i0.ɵɵlistener("click", function WizardComponent_div_11_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r29); const ctx_r32 = i0.ɵɵnextContext(); return ctx_r32.onExitClick(); });
|
|
184
197
|
i0.ɵɵtext(12);
|
|
185
198
|
i0.ɵɵelementEnd();
|
|
186
199
|
i0.ɵɵelementEnd();
|
|
187
200
|
} if (rf & 2) {
|
|
188
|
-
const
|
|
201
|
+
const ctx_r7 = i0.ɵɵnextContext();
|
|
189
202
|
i0.ɵɵadvance(2);
|
|
190
|
-
i0.ɵɵclassProp("sme-padding-right-xl", !
|
|
203
|
+
i0.ɵɵclassProp("sme-padding-right-xl", !ctx_r7.validating);
|
|
191
204
|
i0.ɵɵadvance(1);
|
|
192
|
-
i0.ɵɵclassProp("sme-layout-none", !
|
|
193
|
-
i0.ɵɵproperty("smeTelemetryDataBlob",
|
|
205
|
+
i0.ɵɵclassProp("sme-layout-none", !ctx_r7.canNavigateToPreviousStep);
|
|
206
|
+
i0.ɵɵproperty("smeTelemetryDataBlob", ctx_r7.telemetryData)("disabled", ctx_r7.disableBackButton);
|
|
194
207
|
i0.ɵɵadvance(1);
|
|
195
|
-
i0.ɵɵtextInterpolate(
|
|
208
|
+
i0.ɵɵtextInterpolate(ctx_r7.strings.MsftSmeShell.Angular.Common.back);
|
|
196
209
|
i0.ɵɵadvance(1);
|
|
197
|
-
i0.ɵɵproperty("smeTelemetryDataBlob",
|
|
210
|
+
i0.ɵɵproperty("smeTelemetryDataBlob", ctx_r7.telemetryData)("disabled", ctx_r7.disableNextButton)("smeTelemetryDisableElement", ctx_r7.disableNextButton);
|
|
198
211
|
i0.ɵɵadvance(1);
|
|
199
|
-
i0.ɵɵtextInterpolate(
|
|
212
|
+
i0.ɵɵtextInterpolate(ctx_r7.nextButtonText());
|
|
200
213
|
i0.ɵɵadvance(1);
|
|
201
|
-
i0.ɵɵproperty("ngIf",
|
|
214
|
+
i0.ɵɵproperty("ngIf", ctx_r7.validating);
|
|
202
215
|
i0.ɵɵadvance(1);
|
|
203
|
-
i0.ɵɵclassProp("sme-layout-none", !
|
|
204
|
-
i0.ɵɵproperty("smeTelemetryDataBlob",
|
|
216
|
+
i0.ɵɵclassProp("sme-layout-none", !ctx_r7.showSkipButton);
|
|
217
|
+
i0.ɵɵproperty("smeTelemetryDataBlob", ctx_r7.telemetryData);
|
|
205
218
|
i0.ɵɵadvance(1);
|
|
206
|
-
i0.ɵɵtextInterpolate(
|
|
219
|
+
i0.ɵɵtextInterpolate(ctx_r7.strings.MsftSmeShell.Angular.Common.skip);
|
|
207
220
|
i0.ɵɵadvance(1);
|
|
208
|
-
i0.ɵɵproperty("smeTelemetryDataBlob",
|
|
221
|
+
i0.ɵɵproperty("smeTelemetryDataBlob", ctx_r7.telemetryData);
|
|
209
222
|
i0.ɵɵadvance(2);
|
|
210
|
-
i0.ɵɵtextInterpolate(
|
|
223
|
+
i0.ɵɵtextInterpolate(ctx_r7.exitButtonText());
|
|
211
224
|
} }
|
|
212
225
|
const _c7 = function (a0) { return { "sme-padding-inset-lg": a0 }; };
|
|
213
226
|
/**
|
|
@@ -623,6 +636,7 @@ export class WizardComponent extends DynamicComponentBase {
|
|
|
623
636
|
this.stages = this.wizardBuilder.stages;
|
|
624
637
|
this.bannerItems = this.wizardBuilder.bannerItems;
|
|
625
638
|
this.heading = this.wizardBuilder.heading;
|
|
639
|
+
this.headerData = this.wizardBuilder.headerData;
|
|
626
640
|
this.exitButtonTitle = this.wizardBuilder.exitButtonTitle;
|
|
627
641
|
this.finishButtonTitle = this.wizardBuilder.finishButtonTitle;
|
|
628
642
|
this.finishView = this.wizardBuilder.finishView;
|
|
@@ -935,23 +949,26 @@ export class WizardComponent extends DynamicComponentBase {
|
|
|
935
949
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.wizardFooter = _t.first);
|
|
936
950
|
} }, inputs: { model: "model", wizardBuilder: "wizardBuilder", showWizardBanner: "showWizardBanner" }, outputs: { modelChange: "modelChange", exit: "exit", stepSubmitted: "stepSubmitted", stepChanged: "stepChanged", stepInvalidated: "stepInvalidated", finished: "finished", layoutChanged: "layoutChanged", windowBreakpointChanged: "windowBreakpointChanged" }, features: [i0.ɵɵProvidersFeature([
|
|
937
951
|
{ provide: SME_LAYOUT_PROVIDER, useExisting: forwardRef((() => WizardComponent)) }
|
|
938
|
-
]), i0.ɵɵInheritDefinitionFeature], decls:
|
|
952
|
+
]), i0.ɵɵInheritDefinitionFeature], decls: 12, vars: 14, consts: [[1, "sme-wizard", "sme-layout-absolute-phone-up", "sme-arrange-stack-v", "sme-position-inset-none"], ["class", "sme-arrange-stack-h sme-position-flex-none sme-padding-vertical-sm sme-padding-horizontal-lg sme-border-bottom-sm sme-border-bottom-color-base-80", 4, "ngIf"], [3, "text", "smeIconClassName", "subtitle", 4, "ngIf"], [4, "ngIf"], ["role", "tablist", "class", "sme-arrange-stack-h sme-position-flex-none sme-padding-horizontal-lg sme-border-bottom-sm sme-border-bottom-color-base-80 sme-focus-zone sme-arrange-overflow-auto-x", 4, "ngIf"], [1, "sme-arrange-stack-h", "sme-arrange-overflow-auto", "sme-position-flex-auto", "sme-wizard-content-container"], ["class", "sme-arrange-stack-v sme-position-flex-none sme-focus-zone sme-border-right-sm sme-border-right-color-base-80 sme-wizard-left-pane", 4, "ngIf"], [1, "sme-focus-zone", "sme-layout-relative", "sme-arrange-overflow-auto", "sme-wizard-content-pane", 3, "ngClass"], ["id", "dynamic-content-container"], ["container", ""], ["class", "sme-layout-relative sme-position-flex-none sme-border-top-sm sme-border-top-color-base-80 sme-padding-vertical-sm sme-padding-horizontal-lg sme-focus-zone", 4, "ngIf"], [1, "sme-arrange-stack-h", "sme-position-flex-none", "sme-padding-vertical-sm", "sme-padding-horizontal-lg", "sme-border-bottom-sm", "sme-border-bottom-color-base-80"], ["id", "sme-shell-wizard-heading-id"], ["type", "preview", "class", "sme-margin-left-xs", 4, "ngIf"], ["type", "preview", 1, "sme-margin-left-xs"], [3, "text", "smeIconClassName", "subtitle"], ["type", "preview", 4, "ngIf"], ["type", "preview"], [3, "items"], ["role", "tablist", 1, "sme-arrange-stack-h", "sme-position-flex-none", "sme-padding-horizontal-lg", "sme-border-bottom-sm", "sme-border-bottom-color-base-80", "sme-focus-zone", "sme-arrange-overflow-auto-x"], ["role", "tab", "tabindex", "0", "aria-live", "polite", "type", "button", "class", "sme-wizard-stage sme-button-trigger sme-wizard-button-item sme-padding-vertical-sm sme-padding-horizontal-none sme-button-auto-width sme-margin-right-md", 3, "title", "smeTelemetryDataBlob", "smeTelemetryId", "sme-active", "sme-selected", "aria-selected", "sme-wizard-stage-focus", "disabled", "smeTelemetryDisableElement", "ngClass", "click", 4, "ngFor", "ngForOf"], ["role", "tab", "tabindex", "0", "aria-live", "polite", "type", "button", 1, "sme-wizard-stage", "sme-button-trigger", "sme-wizard-button-item", "sme-padding-vertical-sm", "sme-padding-horizontal-none", "sme-button-auto-width", "sme-margin-right-md", 3, "title", "smeTelemetryDataBlob", "smeTelemetryId", "disabled", "smeTelemetryDisableElement", "ngClass", "click"], [1, "sme-wizard-stage-index", "sme-position-flex-none", 3, "ngClass"], [1, "sme-position-flex-auto", "sme-font-body", "sme-arrange-ellipsis", 3, "ngClass"], [1, "sme-arrange-stack-v", "sme-position-flex-none", "sme-focus-zone", "sme-border-right-sm", "sme-border-right-color-base-80", "sme-wizard-left-pane"], ["role", "tablist", "class", "sme-padding-vertical-sm sme-position-flex-auto", 3, "ngClass", 4, "ngIf"], [1, "sme-position-flex-none", "sme-focus-zone"], [1, "split-view-toggle", "sme-button-trigger", "sme-button-auto-width", "sme-position-flex-none", "sme-layout-float-right", 3, "title", "click"], [1, "sme-icon", 3, "ngClass"], ["role", "tablist", 1, "sme-padding-vertical-sm", "sme-position-flex-auto", 3, "ngClass"], ["role", "tab", "type", "button", "class", "sme-arrange-stack-h sme-wizard-step sme-button-trigger sme-wizard-button-item sme-padding-horizontal-none\n sme-position-stretch-h sme-padding-vertical-xs sme-button-auto-width sme-padding-left-lg sme-padding-right-xs", "aria-live", "polite", 3, "ngClass", "disabled", "smeTelemetryDisableElement", "smeTelemetryDataBlob", "smeTelemetryId", "title", "click", 4, "ngFor", "ngForOf"], ["role", "tab", "type", "button", "aria-live", "polite", 1, "sme-arrange-stack-h", "sme-wizard-step", "sme-button-trigger", "sme-wizard-button-item", "sme-padding-horizontal-none", "sme-position-stretch-h", "sme-padding-vertical-xs", "sme-button-auto-width", "sme-padding-left-lg", "sme-padding-right-xs", 3, "ngClass", "disabled", "smeTelemetryDisableElement", "smeTelemetryDataBlob", "smeTelemetryId", "title", "click"], [1, "sme-position-flex-auto", "sme-position-flex-grow-start", "sme-margin-right-xs"], ["class", "sme-position-flex-auto sme-position-flex-grow-start sme-arrange-ellipsis", 4, "ngIf"], [1, "sme-position-flex-auto", "sme-position-flex-grow-start", "sme-arrange-ellipsis"], [3, "alert"], [1, "sme-layout-relative", "sme-position-flex-none", "sme-border-top-sm", "sme-border-top-color-base-80", "sme-padding-vertical-sm", "sme-padding-horizontal-lg", "sme-focus-zone"], ["wizardFooter", ""], [1, "sme-layout-float-left"], ["type", "button", "smeTelemetryId", "wizardPrev", 1, "sme-focus-zone", 3, "smeTelemetryDataBlob", "disabled", "click"], ["type", "button", "smeTelemetryId", "wizardNext", 1, "sme-focus-zone", "sme-button-primary", 3, "smeTelemetryDataBlob", "disabled", "smeTelemetryDisableElement", "click"], ["class", "sme-layout-relative sme-layout-float-right sme-padding-left-xl sme-padding-top-md", 4, "ngIf"], ["type", "button", "smeTelemetryId", "wizardSkip", 1, "sme-focus-zone", 3, "smeTelemetryDataBlob", "click"], ["type", "button", "smeTelemetryId", "wizardExit", 1, "sme-focus-zone", "sme-layout-float-right", 3, "smeTelemetryDataBlob", "click"], ["exitButton", ""], [1, "sme-layout-relative", "sme-layout-float-right", "sme-padding-left-xl", "sme-padding-top-md"], ["size", "small"]], template: function WizardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
939
953
|
i0.ɵɵelementStart(0, "div", 0);
|
|
940
954
|
i0.ɵɵtemplate(1, WizardComponent_div_1_Template, 4, 3, "div", 1);
|
|
941
|
-
i0.ɵɵtemplate(2,
|
|
955
|
+
i0.ɵɵtemplate(2, WizardComponent_sme_header_2_Template, 2, 4, "sme-header", 2);
|
|
942
956
|
i0.ɵɵtemplate(3, WizardComponent_div_3_Template, 2, 1, "div", 3);
|
|
943
|
-
i0.ɵɵ
|
|
944
|
-
i0.ɵɵ
|
|
945
|
-
i0.ɵɵ
|
|
946
|
-
i0.ɵɵ
|
|
947
|
-
i0.ɵɵ
|
|
957
|
+
i0.ɵɵtemplate(4, WizardComponent_div_4_Template, 2, 1, "div", 4);
|
|
958
|
+
i0.ɵɵelementStart(5, "div", 5);
|
|
959
|
+
i0.ɵɵtemplate(6, WizardComponent_div_6_Template, 5, 8, "div", 6);
|
|
960
|
+
i0.ɵɵelementStart(7, "div", 7);
|
|
961
|
+
i0.ɵɵtemplate(8, WizardComponent_div_8_Template, 2, 1, "div", 3);
|
|
962
|
+
i0.ɵɵelement(9, "div", 8, 9);
|
|
948
963
|
i0.ɵɵelementEnd();
|
|
949
964
|
i0.ɵɵelementEnd();
|
|
950
|
-
i0.ɵɵtemplate(
|
|
965
|
+
i0.ɵɵtemplate(11, WizardComponent_div_11_Template, 13, 18, "div", 10);
|
|
951
966
|
i0.ɵɵelementEnd();
|
|
952
967
|
} if (rf & 2) {
|
|
953
968
|
i0.ɵɵadvance(1);
|
|
954
|
-
i0.ɵɵproperty("ngIf", ctx.heading && !ctx.wizardIsFinished);
|
|
969
|
+
i0.ɵɵproperty("ngIf", ctx.heading && !ctx.wizardIsFinished && !ctx.headerData);
|
|
970
|
+
i0.ɵɵadvance(1);
|
|
971
|
+
i0.ɵɵproperty("ngIf", !ctx.wizardIsFinished && ctx.headerData && !ctx.heading);
|
|
955
972
|
i0.ɵɵadvance(1);
|
|
956
973
|
i0.ɵɵproperty("ngIf", ctx.showWizardBanner);
|
|
957
974
|
i0.ɵɵadvance(1);
|
|
@@ -962,7 +979,7 @@ export class WizardComponent extends DynamicComponentBase {
|
|
|
962
979
|
i0.ɵɵproperty("ngIf", !ctx.wizardIsFinished && !ctx.hideStepsListSidePane);
|
|
963
980
|
i0.ɵɵadvance(1);
|
|
964
981
|
i0.ɵɵclassProp("sme-wizard-no-left-pane", ctx.hideStepsListSidePane);
|
|
965
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(
|
|
982
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(12, _c7, ctx.currentStepComponent.padContents));
|
|
966
983
|
i0.ɵɵadvance(1);
|
|
967
984
|
i0.ɵɵproperty("ngIf", ctx.currentStepComponent.disabled);
|
|
968
985
|
i0.ɵɵadvance(3);
|
|
@@ -1028,4 +1045,4 @@ __decorate([
|
|
|
1028
1045
|
}], windowBreakpointChanged: [{
|
|
1029
1046
|
type: Output
|
|
1030
1047
|
}], deferredOnLayoutChanged: [], onLayoutChanged: [], onWindowBreakpointChanged: [] }); })();
|
|
1031
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3dpemFyZC93aXphcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvd2l6YXJkL3dpemFyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEVBQThFLENBQUM7QUFDeEcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQzFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUN2RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDekcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0VBQStFLENBQUM7QUFDckgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFLMUcsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ25FLE9BQU8sRUFBVSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9E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QURuQixNQUFNO1lBT1MsYUFBYTtrQkFENUIsTUFBTTtZQU9TLFdBQVc7a0JBRDFCLE1BQU07WUFPUyxlQUFlO2tCQUQ5QixNQUFNO1lBT1MsUUFBUTtrQkFEdkIsTUFBTTtZQVFBLGFBQWE7a0JBRG5CLE1BQU07WUFPQSx1QkFBdUI7a0JBRDdCLE1BQU07WUFxS0EsdUJBQXVCLE1BS3ZCLGVBQWUsTUFTZix5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgZm9yd2FyZFJlZixcclxuICAgIEluamVjdCxcclxuICAgIEluamVjdG9yLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPcHRpb25hbCxcclxuICAgIE91dHB1dCxcclxuICAgIFNraXBTZWxmLFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERlYm91bmNlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RlY29yYXRvcnMvZGVib3VuY2UuZGVjb3JhdG9ycyc7XHJcbmltcG9ydCB7IFlpZWxkIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RlY29yYXRvcnMveWllbGQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgUnhqc0xpZmV0aW1lTWFuYWdlciB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvYmFzZS9yeGpzLWxpZmV0aW1lLW1hbmFnZXInO1xyXG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2dnaW5nJztcclxuaW1wb3J0IHsgU21lV2ViVGVsZW1ldHJ5IH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9zbWUtd2ViLXRlbGVtZXRyeSc7XHJcbmltcG9ydCB7IFRlbGVtZXRyeUFjdGlvblR5cGVzIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9zbWUtd2ViLXRlbGVtZXRyeS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudE1vZHVsZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvbWFuaWZlc3QvZW52aXJvbm1lbnQtbW9kdWxlcyc7XHJcbmltcG9ydCB7XHJcbiAgICBScGNEaWFsb2dDb25maXJtYXRpb25SZXF1ZXN0LFxyXG4gICAgUnBjRGlhbG9nTWVzc2FnZVJlcXVlc3RcclxufSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL3JwYy9kaWFsb2cvcnBjLWRpYWxvZy1tb2RlbCc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFN0cmluZ3MgfSBmcm9tICcuLi8uLi9nZW5lcmF0ZWQvU3RyaW5ncyc7XHJcbmltcG9ydCB7IEFwcENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hcHAtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFubmVySXRlbSB9IGZyb20gJy4uL2Jhbm5lcic7XHJcbmltcG9ydCB7IER5bmFtaWNDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vY29tbW9uL2R5bmFtaWMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTGF5b3V0LCBTTUVfTEFZT1VUX1BST1ZJREVSIH0gZnJvbSAnLi4vY29tbW9uL2xheW91dCc7XHJcbmltcG9ydCB7IEhlYWx0aEFsZXJ0U2V2ZXJpdHksIFBhZ2VBbGVydCB9IGZyb20gJy4uL3BhZ2UtYWxlcnQtYmFyL21vZGVscy9wYWdlLWFsZXJ0JztcclxuaW1wb3J0IHsgV2l6YXJkTW9kZWwgfSBmcm9tICcuL21vZGVscy93aXphcmQtbW9kZWwnO1xyXG5pbXBvcnQgeyBXaXphcmROYXZpZ2F0aW9uSW50ZXJmYWNlIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLW5hdmlnYXRpb24taW50ZXJmYWNlJztcclxuaW1wb3J0IHsgV2l6YXJkU3RhZ2UgfSBmcm9tICcuL21vZGVscy93aXphcmQtc3RhZ2UnO1xyXG5pbXBvcnQgeyBXaXphcmRTdGVwIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLXN0ZXAnO1xyXG5pbXBvcnQgeyBXaXphcmRTdGVwQ2hhbmdlZEV2ZW50IH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLXN0ZXAtY2hhbmdlZC1ldmVudCc7XHJcbmltcG9ydCB7IFdpemFyZFN0ZXBWYWxpZGF0aW9uIH0gZnJvbSAnLi9tb2RlbHMvd2l6YXJkLXN0ZXAtdmFsaWRhdGlvbic7XHJcbmltcG9ydCB7IFdpemFyZEJ1aWxkZXIgfSBmcm9tICcuL3dpemFyZC1idWlsZGVyJztcclxuaW1wb3J0IHsgV2l6YXJkTmF2aWdhdGlvbkluZm9ybWF0aW9uIH0gZnJvbSAnLi93aXphcmQtbmF2aWdhdGlvbi1pbmZvcm1hdGlvbic7XHJcbmltcG9ydCB7IFdpemFyZFJlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyIH0gZnJvbSAnLi93aXphcmQtcmVzcG9uc2l2ZS13aW5kb3ctbWFuYWdlcic7XHJcbmltcG9ydCB7IEdlbmVyaWNXaXphcmRTdGVwQ29tcG9uZW50IH0gZnJvbSAnLi93aXphcmQtc3RlcC93aXphcmQtc3RlcC5jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIFdoYXRldmVyIHN0YXRlIHRoZSB3aXphcmQgaXMgaW5cclxuICovXHJcbmVudW0gV2l6YXJkU3RhdGUge1xyXG4gICAgRXhpdCA9ICdFeGl0JyxcclxuICAgIEVudHJ5ID0gJ0VudHJ5JyxcclxuICAgIEZpbmlzaGVkID0gJ0ZpbmlzaGVkJyxcclxuICAgIEFjdGl2ZSA9ICdBY3RpdmUnXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEYXRhIHRvIGNvbGxlY3QgaW4gd2l6YXJkXHJcbiAqL1xyXG5jbGFzcyBXaXphcmRUZWxlbWV0cnlEYXRhIHtcclxuICAgIHN0ZXBJbmRleE51bWJlcjogc3RyaW5nO1xyXG4gICAgc3RlcE5hbWU6IHN0cmluZztcclxuICAgIHN0ZXBJbmRleFN0YXJ0VGltZTogc3RyaW5nO1xyXG4gICAgZW50cnlQb2ludD86IHN0cmluZztcclxuICAgIHdpemFyZFR5cGU/OiBzdHJpbmc7XHJcbiAgICB3aXphcmRJZD86IHN0cmluZztcclxuICAgIHN0YXRlPzogV2l6YXJkU3RhdGU7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAc21lRG9jIHtAbGFiZWwgV2l6YXJkIEBpZCBzbWUtd2l6YXJkfVxyXG4gKlxyXG4gKiBAb3ZlcnZpZXdcclxuICogQGZpbGUge0BmaWxlcGF0aCAuL2V4YW1wbGVzL292ZXJ2aWV3Lm1kfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIEV4YW1wbGUgV2l6YXJkIEBpZCBzaW1wbGUtd2l6YXJkfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3dpemFyZC1leGFtcGxlLmNvbXBvbmVudC5odG1sfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy93aXphcmQtZXhhbXBsZS5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgZGF0YS1tb2RlbC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9leGFtcGxlLW1vZGVsLnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGZpbmlzaC1jb21wb25lbnQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvZmluaXNoLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBmaW5pc2gtY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvZmluaXNoLmNvbXBvbmVudC5odG1sfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIHNpbXBsZS1zdGF0aWMtdGV4dC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3NpbXBsZS1zdGF0aWMtdGV4dC5jb21wb25lbnQuaHRtbH1cclxuICogQGZpbGUge0BmaWxlbmFtZSBzaW1wbGUtc3RhdGljLXRleHQudHMgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2ltcGxlLXN0YXRpYy10ZXh0LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIHNpbXBsZS10ZXh0LWlucHV0LmNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3NpbXBsZS10ZXh0LWlucHV0LmNvbXBvbmVudC5odG1sfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIHNpbXBsZS10ZXh0LWlucHV0LmNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9zaW1wbGUtdGV4dC1pbnB1dC5jb21wb25lbnQudHN9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFRoZSBjb21wb25lbnQgY2xhc3MgZGVmaW5pdGlvbiBmb3IgdGhlIHdpemFyZCBjb21wb25lbnQuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLXdpemFyZCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vd2l6YXJkLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHsgcHJvdmlkZTogU01FX0xBWU9VVF9QUk9WSURFUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gV2l6YXJkQ29tcG9uZW50KSB9XHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXaXphcmRDb21wb25lbnQ8VE1vZGVsIGV4dGVuZHMgV2l6YXJkTW9kZWw+XHJcbiAgICBleHRlbmRzIER5bmFtaWNDb21wb25lbnRCYXNlPEdlbmVyaWNXaXphcmRTdGVwQ29tcG9uZW50PFRNb2RlbD4+XHJcbiAgICBpbXBsZW1lbnRzIExheW91dCwgT25Jbml0LCBXaXphcmROYXZpZ2F0aW9uSW50ZXJmYWNlIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGRhdGEgbW9kZWwgZm9yIHNoYXJpbmcgZGF0YSBhY3Jvc3MgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgbW9kZWwodmFsdWU6IFRNb2RlbCkge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxNb2RlbCA9IHZhbHVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50Lm9uV2l6YXJkTW9kZWxDaGFuZ2VkKHRoaXMubW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGRhdGEgbW9kZWwgZm9yIHNoYXJpbmcgZGF0YSBhY3Jvc3MgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBtb2RlbCgpOiBUTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsTW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYmFja2luZyBzdG9yZSBmb3IgdGhlIG1vZGVsIHByb3BlcnR5XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW50ZXJuYWxNb2RlbDogVE1vZGVsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuYWwgY29weSBvZiBtb2RlbCB0byByb2xsYmFjayB0byB3aGVuIHRoZVxyXG4gICAgICogY3VycmVudCBzdGVwIGlzIHNraXBwZWQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY3VycmVudFN0ZXBNb2RlbENvcHk6IFRNb2RlbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB3aXphcmRCdWlsZGVyIHVzZWQgdG8gaW5zdGFudGlhdGUgdGhlIGtleSB3aXphcmQgcHJvcGVydGllcy5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB3aXphcmRCdWlsZGVyOiBXaXphcmRCdWlsZGVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHN0YWdlcyBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhZ2VzOiBXaXphcmRTdGFnZVtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGJhbm5lciBpdGVtcyBpbiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYmFubmVySXRlbXM6IEJhbm5lckl0ZW1bXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIHNob3cgd2l6YXJkIGJhbm5lci5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaG93V2l6YXJkQmFubmVyOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGhlYWRpbmcgb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGhlYWRpbmc6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0aXRsZSBvZiB0aGUgZXhpdCBidXR0b24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBleGl0QnV0dG9uVGl0bGU6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0aXRsZSBvZiB0aGUgZmluaXNoIGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbmlzaEJ1dHRvblRpdGxlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZmluaXNoIHZpZXcgb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbmlzaFZpZXc6IFdpemFyZFN0ZXA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIHRoZSBzdGVwcyBsaXN0IHNpZGUgcGFuZSB3aWxsIGJlIHZpc2libGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoaWRlU3RlcHNMaXN0U2lkZVBhbmU6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIGEgY29uZmlybWF0aW9uIGRpYWxvZyB3aWxsIGJlIHNob3duIHVwb24gJ0V4aXQnIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93RXhpdENvbmZpcm1hdGlvbkRpYWxvZzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdGhlIGFwcGxpY2F0aW9uIGlzIGluIHByZXZpZXcuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0luUHJldmlldzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdGhlIHdpemFyZCBjYW4gbmF2aWdhdGUgdG8gYSBwcmV2aW91cyBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2FuTmF2aWdhdGVUb1ByZXZpb3VzU3RlcDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbGVtZXRyeSBkYXRhIGNvbGxlY3RlZCB3aGlsZSBuYXZpZ2F0aW5nIHRocm91Z2ggd2l6YXJkLiBCeSBkZWZhdWx0LCBzdGFydCBhdCAxLjEgc3RlcCBpbmRleCBhbmRcclxuICAgICAqIEVudHJ5IHN0YXRlLlxyXG4gICAgICogS2VlcCBzYW1lIGZvcm1hdCBhcyB0ZWxlbWV0cnkgZXZlbnQgdGltZXN0YW1wXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0ZWxlbWV0cnlEYXRhOiBXaXphcmRUZWxlbWV0cnlEYXRhID0ge1xyXG4gICAgICAgIHN0ZXBJbmRleE51bWJlcjogJzEuMScsXHJcbiAgICAgICAgc3RlcE5hbWU6ICcnLFxyXG4gICAgICAgIHN0ZXBJbmRleFN0YXJ0VGltZTogKG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksXHJcbiAgICAgICAgZW50cnlQb2ludDogRW52aXJvbm1lbnRNb2R1bGUuY3JlYXRlRW50cnlwb2ludElkKE1zZnRTbWUuc2VsZigpLkluaXQubW9kdWxlTmFtZSxcclxuICAgICAgICAgICAgTXNmdFNtZS5zZWxmKCkuSW5pdC5lbnRyeVBvaW50TmFtZSksXHJcbiAgICAgICAgc3RhdGU6IFdpemFyZFN0YXRlLkVudHJ5XHJcbiAgICB9O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ3dpemFyZEZvb3RlcicpXHJcbiAgICBwdWJsaWMgd2l6YXJkRm9vdGVyOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIC8qKlxyXG4gICAgKiBPY2N1cnMgd2hlbiB0aGUgd2l6YXJkIG1vZGVsIGNoYW5nZXNcclxuICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbENoYW5nZTogRXZlbnRFbWl0dGVyPFRNb2RlbD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgd2hlbiB0aGUgd2l6YXJkIGlzIGV4aXRlZC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZXhpdDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIHdoZW5ldmVyIGEgc3RlcCBpcyBzdWJtaXR0ZWQuXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5IHN0ZXBTdWJtaXR0ZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE9jY3VycyB3aGVuZXZlciBhIHN0ZXAgaW5kZXggaXMgY2hhbmdlZC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RlcENoYW5nZWQ6IEV2ZW50RW1pdHRlcjxXaXphcmRTdGVwQ2hhbmdlZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8V2l6YXJkU3RlcENoYW5nZWRFdmVudD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE9jY3VycyB3aGVuZXZlciBzdGVwIHZhbGlkYXRpb24gZmFpbHNcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RlcEludmFsaWRhdGVkOiBFdmVudEVtaXR0ZXI8V2l6YXJkU3RlcFZhbGlkYXRpb24+ID0gbmV3IEV2ZW50RW1pdHRlcjxXaXphcmRTdGVwVmFsaWRhdGlvbj4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE9jY3VycyB3aGVuIHRoZSB3aXphcmQgaXMgZmluaXNoZWRcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZmluaXNoZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGltcGxlbWVudHMgdGhlIElMYXlvdXQgaW50ZXJmYWNlLiBJdCdzIHRyaWdnZXJlZCB3aGVuIHRoZSBsYXlvdXQgaXMgY2hhbmdlZC5cclxuICAgICAqIEl0J3MgdXNlZCB0byB0ZWxsIHRoZSBjaGlsZCBjb21wb25lbnRzIHRvIGNvb3JkaW5hdGUgd2l0aCB0aGUgbGF5b3V0IGNoYW5nZS5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgbGF5b3V0Q2hhbmdlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1wbGVtZW50YXRpb24gb2YgdGhlIExheW91dCBpbnRlcmZhY2VcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgd2luZG93QnJlYWtwb2ludENoYW5nZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc291cmNlIHN0cmluZ3MgZm9yIHRoZSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdHJpbmdzOiBTdHJpbmdzID0gTXNmdFNtZS5nZXRTdHJpbmdzPFN0cmluZ3M+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgd2l6YXJkIGlzIHZhbGlkYXRpbmcgaW5wdXQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB2YWxpZGF0aW5nOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciBvciBub3QgYWxsIG9mIHRoZSB3aXphcmQncyBzdGVwcyBhcmUgY29tcGxldGUgJiAnRmluaXNoJyBpcyBjbGlja2VkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgd2l6YXJkSXNGaW5pc2hlZDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdpemFyZCBuYXZpZ2F0aW9uIGluZm9ybWF0aW9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmF2aWdhdGlvbkluZm9ybWF0aW9uOiBXaXphcmROYXZpZ2F0aW9uSW5mb3JtYXRpb247XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBkeW5hbWljYWxseSBjaGVjayBpZiBhbnkgb2YgdGhlIGhlYWRlciBzdGVwIGNvbnRlbnQgd2lsbCBmYWlsIHRvIHJlbmRlci5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3VsZFJlbmRlclRleHRPblN0ZXBzID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhbGVydCBmb3IgYSBkaXNhYmxlZCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWxlcnQ6IFBhZ2VBbGVydCA9IHtcclxuICAgICAgICBzZXZlcml0eTogSGVhbHRoQWxlcnRTZXZlcml0eS5JbmZvLFxyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuZGlzYWJsZWRTdGVwQWxlcnQsXHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2lkZSBwYW5lIHRvZ2dsZSBzdGF0ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNFeHBhbmRlZDogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RhZ2UuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhZ2VJbmRleDogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJ4anMgbGlmZXRpbWUgbWFuYWdlciBmb3IgdGhlIGN1cnJlbnQgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50U3RlcFJ4anNMaWZldGltZTogUnhqc0xpZmV0aW1lTWFuYWdlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB3aW5kb3cgcmVzcG9uc2l2ZSBtYW5hZ2VyIGZvciB0aGUgd2l6YXJkIGNvbnRyb2wuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgd2l6YXJkUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXI6IFdpemFyZFJlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFdpemFyZENvbXBvbmVudCBjbGFzcy5cclxuICAgICAqIEBwYXJhbSBhcHBDb250ZXh0IC0gVGhlIGFwcGxpY2F0aW9uIGNvbnRleHQgc2VydmljZSBjbGFzcy5cclxuICAgICAqIEBwYXJhbSBjaGFuZ2VEZXRlY3RvclJlZiAtIFRoZSBjaGFuZ2UgZGV0ZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0gY29tcG9uZW50RmFjdG9yeVJlc29sdmVyIC0gVGhlIGNvbXBvbmVudCBmYWN0b3J5IHJlc29sdmVyLlxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHVibGljIGhvc3RFbGVtZW50OiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHByaXZhdGUgYXBwQ29udGV4dDogQXBwQ29udGV4dFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICAgICAgQFNraXBTZWxmKCkgQE9wdGlvbmFsKCkgQEluamVjdChTTUVfTEFZT1VUX1BST1ZJREVSKSBsYXlvdXQ6IExheW91dFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBpbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5tb2RlbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VE1vZGVsPigpO1xyXG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChsYXlvdXQpIHtcclxuICAgICAgICAgICAgdGhpcy53aXphcmRSZXNwb25zaXZlV2luZG93TWFuYWdlciA9IG5ldyBXaXphcmRSZXNwb25zaXZlV2luZG93TWFuYWdlcihsYXlvdXQpO1xyXG4gICAgICAgICAgICAvLyBvbiBwYXJlbnQgbGF5b3V0IGNoYW5nZXMsIHJlLWVtaXQgdGhlIGxheW91dCBjaGFuZ2UgdG8gb3VyIGV2ZW50XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGxheW91dC5sYXlvdXRDaGFuZ2VkLnN1YnNjcmliZSgoKCkgPT4gdGhpcy5vbkxheW91dENoYW5nZWQoKSkpKTtcclxuICAgICAgICAgICAgLy8gb24gd2luZG93IGJyZWFrIHBvaW50IGNoYW5nZXMsIGVtaXQgdGhlIGV2ZW50IGFib3V0IGNyaXRpY2FsIGNsYXNzZXMgYW5kIHN0eWxpbmcgdXBkYXRlcyBzaWduYWwuXHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGxheW91dC53aW5kb3dCcmVha3BvaW50Q2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbldpbmRvd0JyZWFrcG9pbnRDaGFuZ2VkKCkpKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGVmZXJyZWRPbkxheW91dENoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGUgYW5kIHJldHVybiB0aGUgY3VycmVudCB0ZWxlbWV0cnkgZXZlbnQgc3RydWN0dXJlIGZvciB3aXphcmQgdGVsZW1ldHJ5LiBUaGlzIGNhbiBiZSB1c2VkIGZvciBhbnkgYXV0b21hdGljXHJcbiAgICAgKiBhY3Rpb25zIG5vdCB0cmlnZ2VyZWQgYnkgYSBET00gaW50ZXJhY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgd2l6YXJkVGVsZW1ldHJ5RXZlbnRCbG9iKCk6IGFueSB7XHJcbiAgICAgICAgY29uc3Qgd2l6YXJkVGVsZW1ldHJ5QmFzZSA9IHtcclxuICAgICAgICAgICAgY29udGVudElkOiAnc21lLXdpemFyZCcsXHJcbiAgICAgICAgICAgIGFyZWFOYW1lOiAnV2l6YXJkQ29tcG9uZW50J1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgTXNmdFNtZS5kZWVwQXNzaWduKHdpemFyZFRlbGVtZXRyeUJhc2UsIHRoaXMudGVsZW1ldHJ5RGF0YSk7XHJcbiAgICAgICAgcmV0dXJuIHdpemFyZFRlbGVtZXRyeUJhc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdGFnZSBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHN0YWdlc0FycmF5SW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGFnZUluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RlcCBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IHN0ZXBJbmRleCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBzdGFnZSBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRTdGFnZSgpOiBXaXphcmRTdGFnZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhZ2VzW3RoaXMuc3RhZ2VzQXJyYXlJbmRleF07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHN0ZXAgb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjdXJyZW50U3RlcCgpOiBXaXphcmRTdGVwIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RhZ2Uuc3RlcHNbdGhpcy5zdGVwSW5kZXhdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgZmluaXNoIHZpZXcgb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBmaW5pc2hTdGVwKCk6IFdpemFyZFN0ZXAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbmlzaFZpZXc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHN0ZXBzIGZvciB0aGUgY3VycmVudCBzdGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFN0ZXBzRm9yU3RhZ2UoKTogV2l6YXJkU3RlcFtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RhZ2Uuc3RlcHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBkeW5hbWljYWxseSByZW5kZXJlZCBjb21wb25lbnQgb2YgdGhlIGN1cnJlbnQgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBjdXJyZW50U3RlcENvbXBvbmVudCgpOiBHZW5lcmljV2l6YXJkU3RlcENvbXBvbmVudDxUTW9kZWw+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWYgPyB0aGlzLnJlZi5pbnN0YW5jZSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBvbkxhc3RTdGVwT2ZTdGFnZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RhZ2Uuc3RlcHMubGVuZ3RoIC0gMSA9PT0gdGhpcy5zdGVwSW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBvbkxhc3RTdGFnZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGFnZXMubGVuZ3RoIC0gMSA9PT0gdGhpcy5zdGFnZUluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgb25MYXN0U3RlcE9mTGFzdFN0YWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9uTGFzdFN0YWdlICYmIHRoaXMub25MYXN0U3RlcE9mU3RhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgQERlYm91bmNlKClcclxuICAgIHB1YmxpYyBkZWZlcnJlZE9uTGF5b3V0Q2hhbmdlZCgpIHtcclxuICAgICAgICB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwdWJsaWMgb25MYXlvdXRDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMubGF5b3V0Q2hhbmdlZC5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgb24gd2luZG93IGJyZWFrcG9pbnQgY2hhbmdlZCBoYW5kbGVyLlxyXG4gICAgICogQWRkaW5nIHlpZWxkIGZvciBjb21wb25lbnQgdG8gZ2V0IEVsZW1lbnRSZWYgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uXHJcbiAgICAgKi9cclxuICAgIEBZaWVsZCgpXHJcbiAgICBwdWJsaWMgb25XaW5kb3dCcmVha3BvaW50Q2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMud2l6YXJkRm9vdGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMud2l6YXJkUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIub25XaW5kb3dTaXplQ2hhbmdlZCh0aGlzLndpemFyZEZvb3Rlcik7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzRXhwYW5kZWQgPSB0aGlzLndpemFyZFJlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyLmlzRXhwYW5kZWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIHN0YWdlIGlzIGRpc2FibGVkIG9yIG5vdC5cclxuICAgIHB1YmxpYyBzdGFnZUluZGV4RGlzYWJsZWQoc3RhZ2U6IFdpemFyZFN0YWdlLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFzdGFnZS5jb21wbGV0ZWQgJiYgaW5kZXggIT09IHRoaXMuc3RhZ2VzQXJyYXlJbmRleCAmJiAhc3RhZ2UuYWN0aXZlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBzdGVwIGlzIGRpc2FibGVkIG9yIG5vdC5cclxuICAgIHB1YmxpYyBzdGVwSW5kZXhEaXNhYmxlZChzdGVwOiBXaXphcmRTdGVwLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICFzdGVwLmNvbXBsZXRlZCAmJiBpbmRleCAhPT0gdGhpcy5zdGVwSW5kZXggJiYgIXN0ZXAuZGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB0ZXh0IGZvciB0aGUgbmV4dCBidXR0b24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZXh0QnV0dG9uVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YWdlc1t0aGlzLnN0YWdlSW5kZXhdLnN0ZXBzLmxlbmd0aCAtIDEgPT09IHRoaXMuc3RlcEluZGV4KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YWdlSW5kZXggPT09IHRoaXMuc3RhZ2VzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaEJ1dHRvblRpdGxlID8gdGhpcy5maW5pc2hCdXR0b25UaXRsZSA6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uZmluaXNoO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuc3RhZ2VOYW1lLmZvcm1hdCh0aGlzLnN0YWdlc1t0aGlzLnN0YWdlSW5kZXggKyAxXS5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLm5leHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdGV4dCBmb3IgdGhlIGV4aXQvZmluaXNoIGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGV4aXRCdXR0b25UZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhpdEJ1dHRvblRpdGxlID8gdGhpcy5leGl0QnV0dG9uVGl0bGUgOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLmV4aXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEdldHMgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSB3aXphcmQgYnV0dG9uc1xyXG4gICAgKi9cclxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZUJhY2tCdXR0b24oKSB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnN0YWdlc0FycmF5SW5kZXggPT09IDAgJiYgdGhpcy5zdGVwSW5kZXggPT09IDApIHx8IHRoaXMudmFsaWRhdGluZztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVOZXh0QnV0dG9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQudmFsaWQgfHwgdGhpcy52YWxpZGF0aW5nIHx8IHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuaXNCdXN5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHNob3dTa2lwQnV0dG9uKCkge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5vbkxhc3RTdGVwT2ZMYXN0U3RhZ2UgJiYgdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5jYW5CZVNraXBwZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdGVwIG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgc3RlcEluZGV4KHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudFN0YWdlLnN0ZXBzW3ZhbHVlXSkge1xyXG4gICAgICAgICAgICBMb2dnaW5nLmxvZ0Vycm9yKCdXaXphcmRDb21wb25lbnQuc3RlcEluZGV4IHNldHRlcicsICdBdHRlbXB0ZWQgdG8gc2V0IHN0ZXBJbmRleCB0byBpbnZhbGlkIHZhbHVlLicsIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldEluZGV4OiB2YWx1ZSxcclxuICAgICAgICAgICAgICAgIHN0ZXBzOiB0aGlzLmN1cnJlbnRTdGFnZS5zdGVwc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmluZGV4ID0gdmFsdWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNsZWFuQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50VHlwZSA9IHRoaXMuY3VycmVudFN0ZXAuZHluYW1pY1N0ZXBDb21wb25lbnQ7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdFN0ZXBDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgIHRoaXMucHJlc2VydmVNb2RlbEZvckN1cnJlbnRTdGVwKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHN0YWdlIG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXQgc3RhZ2VzQXJyYXlJbmRleCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YWdlc1t2YWx1ZV0pIHtcclxuICAgICAgICAgICAgTG9nZ2luZy5sb2dFcnJvcignV2l6YXJkQ29tcG9uZW50LnN0YWdlU3RlcEluZGV4IHNldHRlcicsICdBdHRlbXB0ZWQgdG8gc2V0IHN0YWdlc0FycmF5SW5kZXggdG8gaW52YWxpZCB2YWx1ZS4nLCB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRJbmRleDogdmFsdWUsXHJcbiAgICAgICAgICAgICAgICBzdGVwczogdGhpcy5zdGFnZXNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFnZUluZGV4ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFya3MgdGhlIGN1cnJlbnQgc3RhZ2Ugb2YgdGhlIHdpemFyZCBhcyBjb21wbGV0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdGFnZSB3YXMgY29tcGxldGVkIGFuZCBmYWxzZSBpZiBub3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb21wbGV0ZUN1cnJlbnRTdGFnZSgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhZ2UuY29tcGxldGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGFnZS5jb21wbGV0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrcyB0aGUgY3VycmVudCBzdGVwIG9mIHRoZSB3aXphcmQgYXMgY29tcGxldGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RlcCB3YXMgY29tcGxldGVkIGFuZCBmYWxzZSBpZiBub3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb21wbGV0ZUN1cnJlbnRTdGVwKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGVwICYmICF0aGlzLmN1cnJlbnRTdGVwLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAuY29tcGxldGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGVwLmNvbXBsZXRlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIHRoZSBjdXJyZW50IHN0ZXAgb2YgdGhlIHdpemFyZCBhcyBpbmNvbXBsZXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0ZXAgd2FzIGZhaWxlZCBhbmQgZmFsc2UgaWYgbm90LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmFpbEN1cnJlbnRTdGVwKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGVwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAuZmFpbCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmN1cnJlbnRTdGVwLmNvbXBsZXRlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vdmVzIHRoZSB3aXphcmQgdG8gdGhlIG5leHQgdmlzaWJsZSBzdGVwIGluIHRoZSBsaXN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbW92ZVRvTmV4dFN0ZXAoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvTmV4dFN0ZXAoKTtcclxuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMub25MYXN0U3RlcE9mTGFzdFN0YWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZpbmlzaE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9OZXh0U3RlcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZSA9PT0gV2l6YXJkU3RhdGUuRW50cnkpIHtcclxuICAgICAgICAgICAgLy8gU3dpdGNoIHRvIGFjdGl2ZSBhZnRlciBvdXIgZmlyc3QgbW92ZSB0byBuZXh0IG9yIHByZXZpb3VzIHN0ZXBcclxuICAgICAgICAgICAgLy8gTWFudWFsbHkgY2FsbCBpdCBoZXJlIGIvYyBzb21lIG1vZHVsZXMgd2lsbCB1cGRhdGUgc3RlcEluZGV4IGFmdGVyIGxvYWRpbmcsIHdoaWNoIHRyaWdnZXJzIGVtaXRTdGVwQ2hhbmdlZC5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVUZWxlbWV0cnlUYWdzKFdpemFyZFN0YXRlLkFjdGl2ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1pdFN0ZXBDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIHRoZSBpbmRleGluZyBmb3IgbW92aW5nIHRvIHRoZSBuZXh0IHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuYXZpZ2F0ZVRvTmV4dFN0ZXAoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm9uTGFzdFN0ZXBPZlN0YWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RlcEluZGV4Kys7XHJcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vbkxhc3RTdGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0YWdlSW5kZXgrKztcclxuXHJcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLnN0YWdlc1t0aGlzLnN0YWdlSW5kZXhdLnN0ZXBzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFnZUluZGV4Kys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RlcEluZGV4ID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vdmVzIHRoZSB3aXphcmQgdG8gdGhlIHByZXZpb3VzICh2aXNpYmxlKSBzdGVwIGluIHRoZSBsaXN0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbW92ZVRvUHJldmlvdXNTdGVwKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGVUb1ByZXZpb3VzU3RlcCgpO1xyXG4gICAgICAgIHdoaWxlICh0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb1ByZXZpb3VzU3RlcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy50ZWxlbWV0cnlEYXRhLnN0YXRlID09PSBXaXphcmRTdGF0ZS5FbnRyeSkge1xyXG4gICAgICAgICAgICAvLyBTd2l0Y2ggdG8gYWN0aXZlIGFmdGVyIG91ciBmaXJzdCBtb3ZlIHRvIG5leHQgb3IgcHJldmlvdXMgc3RlcFxyXG4gICAgICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGUgPSBXaXphcmRTdGF0ZS5BY3RpdmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1pdFN0ZXBDaGFuZ2VkKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyB0aGUgaW5kZXhpbmcgZm9yIG1vdmluZyBiYWNrIHRvIGxhc3Qgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5hdmlnYXRlVG9QcmV2aW91c1N0ZXAoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RlcEluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YWdlSW5kZXggIT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2VzW3RoaXMuc3RhZ2VJbmRleF0uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWdlSW5kZXgtLTtcclxuXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5zdGVwcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWdlSW5kZXgtLTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBJbmRleCA9IHRoaXMuc3RhZ2VzW3RoaXMuc3RhZ2VJbmRleF0uc3RlcHMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2VzW3RoaXMuc3RhZ2VJbmRleF0uY29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0ZXBJbmRleC0tO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBUaGUgbWV0aG9kIHRoYXQgZm9jdXNlcyBvbiBhbiBhY3RpdmUgc3RlcCBvciBzdGFnZVxyXG4gICAgKi9cclxuXHJcbiAgICBwcml2YXRlIGZvY3VzT25BY3RpdmVTdGVwKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5oaWRlU3RlcHNMaXN0U2lkZVBhbmUgPyAnc21lLXdpemFyZC1zdGFnZS1mb2N1cycgOiAnc21lLXN0ZXAtYWN0aXZlJztcclxuICAgICAgICBjb25zdCBmb2N1c2FibGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHNlbGVjdG9yKTtcclxuICAgICAgICBpZiAoZm9jdXNhYmxlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgKDxIVE1MSW5wdXRFbGVtZW50PmZvY3VzYWJsZVswXSkuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIHRvIHJ1biB3aGVuIHRoZSBjb21wb25lbnQgaXMgaW5pdGlhbGl6ZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm5hdmlnYXRpb25JbmZvcm1hdGlvbiA9IG5ldyBXaXphcmROYXZpZ2F0aW9uSW5mb3JtYXRpb24odGhpcywgdGhpcy53aXphcmRCdWlsZGVyKTtcclxuICAgICAgICB0aGlzLnN0YWdlcyA9IHRoaXMud2l6YXJkQnVpbGRlci5zdGFnZXM7XHJcbiAgICAgICAgdGhpcy5iYW5uZXJJdGVtcyA9IHRoaXMud2l6YXJkQnVpbGRlci5iYW5uZXJJdGVtcztcclxuICAgICAgICB0aGlzLmhlYWRpbmcgPSB0aGlzLndpemFyZEJ1aWxkZXIuaGVhZGluZztcclxuICAgICAgICB0aGlzLmV4aXRCdXR0b25UaXRsZSA9IHRoaXMud2l6YXJkQnVpbGRlci5leGl0QnV0dG9uVGl0bGU7XHJcbiAgICAgICAgdGhpcy5maW5pc2hCdXR0b25UaXRsZSA9IHRoaXMud2l6YXJkQnVpbGRlci5maW5pc2hCdXR0b25UaXRsZTtcclxuICAgICAgICB0aGlzLmZpbmlzaFZpZXcgPSB0aGlzLndpemFyZEJ1aWxkZXIuZmluaXNoVmlldztcclxuICAgICAgICB0aGlzLmhpZGVTdGVwc0xpc3RTaWRlUGFuZSA9IHRoaXMud2l6YXJkQnVpbGRlci5oaWRlU3RlcHNMaXN0U2lkZVBhbmU7XHJcbiAgICAgICAgdGhpcy5zaG93RXhpdENvbmZpcm1hdGlvbkRpYWxvZyA9IHRoaXMud2l6YXJkQnVpbGRlci5zaG93RXhpdENvbmZpcm1hdGlvbkRpYWxvZztcclxuICAgICAgICB0aGlzLmlzSW5QcmV2aWV3ID0gdGhpcy53aXphcmRCdWlsZGVyLmlzSW5QcmV2aWV3U3RhdGU7XHJcbiAgICAgICAgdGhpcy5jYW5OYXZpZ2F0ZVRvUHJldmlvdXNTdGVwID0gdGhpcy53aXphcmRCdWlsZGVyLmNhbk5hdmlnYXRlVG9QcmV2aW91c1N0ZXA7XHJcbiAgICAgICAgdGhpcy5zdGFnZXNBcnJheUluZGV4ID0gMDtcclxuICAgICAgICB0aGlzLnN0ZXBJbmRleCA9IDA7XHJcblxyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5zdGFnZXMpIHtcclxuICAgICAgICAgICAgTG9nZ2luZy5sb2dFcnJvcignV2l6YXJkQ29tcG9uZW50Lm5nT25Jbml0JywgYFRoZSAnc3RhZ2VzJyBhcnJheSBpcyBub3QgdmFsaWQhLmAsIHtcclxuICAgICAgICAgICAgICAgIHN0ZXBzOiB0aGlzLnN0YWdlc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5tb2RlbCkge1xyXG4gICAgICAgICAgICBMb2dnaW5nLmxvZ0Vycm9yKCdXaXphcmRDb21wb25lbnQubmdPbkluaXQnLCBgVGhlICdtb2RlbCcgYXR0cmlidXRlIGlzIG5vdCB2YWxpZC5gLCB7XHJcbiAgICAgICAgICAgICAgICBtb2RlbDogdGhpcy5tb2RlbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudmFsaWRhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMud2l6YXJkSXNGaW5pc2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0YWdlLmFjdGl2ZSA9IHRydWU7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbGxlZE1vZGVsID0gdGhpcy5pbnRlcm5hbE1vZGVsIGFzIGFueTtcclxuICAgICAgICBpZiAoZmlsbGVkTW9kZWwud2l6YXJkSWQpIHtcclxuICAgICAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLndpemFyZElkID0gZmlsbGVkTW9kZWwud2l6YXJkSWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWxsZWRNb2RlbC53aXphcmRUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGVsZW1ldHJ5RGF0YS53aXphcmRUeXBlID0gZmlsbGVkTW9kZWwud2l6YXJkVHlwZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkluZm9ybWF0aW9uLnJlc2V0SGlzdG9yeSgpO1xyXG4gICAgICAgIC8vIHVwZGF0ZSBoZXJlIGZpcnN0IHRvIGdldCB1cGRhdGVkIHRlbGVtZXRyeSBpbmZvXHJcbiAgICAgICAgdGhpcy51cGRhdGVUZWxlbWV0cnlUYWdzKCk7XHJcblxyXG4gICAgICAgIFNtZVdlYlRlbGVtZXRyeS50cmFjZUFjdGlvbihudWxsLCB7IGNvbnRlbnQ6IHRoaXMud2l6YXJkVGVsZW1ldHJ5RXZlbnRCbG9iLCBhY3Rpb25UeXBlOiBUZWxlbWV0cnlBY3Rpb25UeXBlcy5BdXRvbWF0aWMgfSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUZWxlbWV0cnlUYWdzKFdpemFyZFN0YXRlLkFjdGl2ZSk7XHJcblxyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwYWdlaGlkZScsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZSAhPT0gV2l6YXJkU3RhdGUuRmluaXNoZWQpIHtcclxuICAgICAgICAgICAgICAgIC8vIG1hbnVhbGx5IHNldCBhdCB0aGlzIHBvaW50IGIvYyB2aWV3IGlzIGRlc3RydWN0ZWQuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGUgPSBXaXphcmRTdGF0ZS5FeGl0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGFjdGlvblR5cGUgQSBmb3IgQXV0byAoYWNjb3JkaW5nIHRvIEFXQSBkaWN0aW9uYXJ5KSB0byBkaWZmZXJlbnRpYXRlIGZyb20gQ0xcclxuICAgICAgICAgICAgU21lV2ViVGVsZW1ldHJ5LnRyYWNlQWN0aW9uKG51bGwsIHsgY29udGVudDogdGhpcy53aXphcmRUZWxlbWV0cnlFdmVudEJsb2IsIGFjdGlvblR5cGU6IFRlbGVtZXRyeUFjdGlvblR5cGVzLkF1dG9tYXRpYyB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW4gb3IgY2xvc2Ugc2lkZSBwYW5lXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0b2dnbGVQYW5lKCkge1xyXG4gICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9ICF0aGlzLmlzRXhwYW5kZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBiYWNrIGJ1dHRvbiBpcyBjbGlja2VkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25CYWNrQ2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zaG93RGlhbG9nSWZCdXN5T3JKdXN0Q29tcGxldGUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YWdlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW92ZVRvUHJldmlvdXNTdGVwKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNPbkFjdGl2ZVN0ZXAoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIHNraXAgYnV0dG9uIGlzIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblNraXBDbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNob3dEaWFsb2dJZkJ1c3lPckp1c3RDb21wbGV0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZU1vZGVsRm9yQ3VycmVudFN0ZXAoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMub25MYXN0U3RlcE9mTGFzdFN0YWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZpbmlzaE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTmV4dE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgRXhpdCAvIEZpbmlzaCBidXR0b24gaXMgY2xpY2tlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uRXhpdENsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dFeGl0Q29uZmlybWF0aW9uRGlhbG9nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwQ29udGV4dC5mcmFtZS5zaG93RGlhbG9nQ29uZmlybWF0aW9uKDxScGNEaWFsb2dDb25maXJtYXRpb25SZXF1ZXN0PntcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24ubm8sXHJcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi55ZXMsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLkV4aXQuRGlhbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5FeGl0LkRpYWxvZy50aXRsZVxyXG4gICAgICAgICAgICB9KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb25maXJtZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXQuZW1pdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmV4aXQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgdGhhdCBoYW5kbGVzIGNvbXBsZXRpb24gb2YgdGhlIHdpemFyZCxcclxuICAgICAqIGFuZCByZW5kZXJzIHRoZSBmaW5pc2hWaWV3IGlmIHByb3ZpZGVkLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGhhbmRsZUZpbmlzaE5hdmlnYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZUN1cnJlbnRTdGVwKCk7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZUN1cnJlbnRTdGFnZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVGVsZW1ldHJ5VGFncyhXaXphcmRTdGF0ZS5GaW5pc2hlZCk7XHJcblxyXG4gICAgICAgIHRoaXMuZmluaXNoZWQuZW1pdCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmZpbmlzaFZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy53aXphcmRJc0ZpbmlzaGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2xlYW5Db21wb25lbnQoKTtcclxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRUeXBlID0gdGhpcy5maW5pc2hWaWV3LmR5bmFtaWNTdGVwQ29tcG9uZW50O1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBuZXh0IGJ1dHRvbiBpcyBjbGlja2VkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25OZXh0Q2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgLy8gaWYgZmluaXNoaW5nXHJcbiAgICAgICAgaWYgKHRoaXMub25MYXN0U3RlcE9mTGFzdFN0YWdlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50U3RlcC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5TdGVwVmFsaWRhdGlvbigpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaW5pc2hOYXZpZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudFN0ZXAuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucnVuU3RlcFZhbGlkYXRpb24oKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTmV4dE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN0ZXBTdWJtaXR0ZWQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgdGhhdCB2YWxpZGF0ZXMgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBydW5TdGVwVmFsaWRhdGlvbigpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQudmFsaWRhdGUoKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKHZhbGlkYXRpb25SZXN1bHQ6IFdpemFyZFN0ZXBWYWxpZGF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5pc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub25MYXN0U3RlcE9mTGFzdFN0YWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmluaXNoTmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTmV4dE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFpbEN1cnJlbnRTdGVwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGVwSW52YWxpZGF0ZWQuZW1pdCh2YWxpZGF0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgdGhhdCBoYW5kbGVzIGluZGV4ZXMgYW5kXHJcbiAgICAgKiBzdGVwIGFuZCBzdGFnZSBjb21wbGV0aW9uIGZvciB0aGUgTmV4dCBidXR0b24uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaGFuZGxlTmV4dE5hdmlnYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZUN1cnJlbnRTdGVwKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9uTGFzdFN0ZXBPZlN0YWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGVDdXJyZW50U3RhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tb3ZlVG9OZXh0U3RlcCgpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0YWdlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5mb2N1c09uQWN0aXZlU3RlcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd1ByZXZpb3VzU3RlcERpYWxvZygpIHtcclxuICAgICAgICB0aGlzLmFwcENvbnRleHQuZnJhbWUuc2hvd0RpYWxvZ01lc3NhZ2UoPFJwY0RpYWxvZ01lc3NhZ2VSZXF1ZXN0PntcclxuICAgICAgICAgICAgYnV0dG9uVGV4dDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5PSy5hZmZpcm1hdGl2ZSxcclxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5QcmV2aW91c1N0ZXAuRGlhbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLlByZXZpb3VzU3RlcC5EaWFsb2cudGl0bGVcclxuICAgICAgICB9KS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd0RpYWxvZ0lmQnVzeU9ySnVzdENvbXBsZXRlKG9uQ29uZmlybWF0aW9uQ2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcclxuICAgICAgICBjb25zdCBpc0J1c3kgPSB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LmlzQnVzeTtcclxuICAgICAgICBjb25zdCBidXN5TWVzc2FnZSA9IHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuYnVzeU1lc3NhZ2U7XHJcbiAgICAgICAgaWYgKGlzQnVzeSkge1xyXG4gICAgICAgICAgICB0aGlzLmFwcENvbnRleHQuZnJhbWUuc2hvd0RpYWxvZ0NvbmZpcm1hdGlvbig8UnBjRGlhbG9nQ29uZmlybWF0aW9uUmVxdWVzdD57XHJcbiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLm5vLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24ueWVzLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYnVzeU1lc3NhZ2UgPyBidXN5TWVzc2FnZSA6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuQnVzeS5EaWFsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLkJ1c3kuRGlhbG9nLnRpdGxlXHJcbiAgICAgICAgICAgIH0pLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY29uZmlybWVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybWF0aW9uQ2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvbkNvbmZpcm1hdGlvbkNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgd2hlbiBhIHN0YWdlIGlzIGNsaWNrZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNsaWNrZWRTdGVwSW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGNsaWNrZWQgc3RhZ2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblN0YWdlQ2xpY2soY2xpY2tlZFN0YWdlSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldFN0YWdlID0gdGhpcy5zdGFnZXNbY2xpY2tlZFN0YWdlSW5kZXhdO1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5OYXZpZ2F0ZVRvUHJldmlvdXNTdGVwICYmIGNsaWNrZWRTdGFnZUluZGV4IDw9IHRoaXMuc3RhZ2VJbmRleCkge1xyXG4gICAgICAgICAgICAvLyBzaG93IGRpYWxvZyB3aGVuIG9ubHkgY2xpY2tpbmcgYSBwcmV2aW91cyBzdGFnZVxyXG4gICAgICAgICAgICBpZiAodGFyZ2V0U3RhZ2UuY29tcGxldGVkICYmIHRoaXMuc3RhZ2VJbmRleCAhPT0gY2xpY2tlZFN0YWdlSW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1ByZXZpb3VzU3RlcERpYWxvZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRTdGFnZS5jb21wbGV0ZWQgfHwgdGFyZ2V0U3RhZ2UuYWN0aXZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0RpYWxvZ0lmQnVzeU9ySnVzdENvbXBsZXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2VJbmRleCA9IGNsaWNrZWRTdGFnZUluZGV4O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2VzW3RoaXMuc3RhZ2VJbmRleF0uY29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFnZUluZGV4ICsgMTsgaSA8IHRoaXMuc3RhZ2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFnZXNbaV0uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFnZXNbaV0uY29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIHdoZW4gYSBzdGVwIGlzIGNsaWNrZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNsaWNrZWRTdGVwSW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGNsaWNrZWQgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uU3RlcENsaWNrKGNsaWNrZWRTdGVwSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHN0ZXBJc0FjdGl2ZSA9IHRoaXMuc3RlcEluZGV4ID09PSBjbGlja2VkU3RlcEluZGV4O1xyXG4gICAgICAgIGNvbnN0IHRhcmdldFN0ZXAgPSB0aGlzLmN1cnJlbnRTdGFnZS5zdGVwc1tjbGlja2VkU3RlcEluZGV4XTtcclxuICAgICAgICBpZiAoIXRoaXMuY2FuTmF2aWdhdGVUb1ByZXZpb3VzU3RlcCAmJiBjbGlja2VkU3RlcEluZGV4IDw9IHRoaXMuc3RlcEluZGV4KSB7XHJcbiAgICAgICAgICAgIC8vIHNob3cgZGlhbG9nIHdoZW4gb25seSBjbGlja2luZyBhIHByZXZpb3VzIHN0ZXBcclxuICAgICAgICAgICAgaWYgKCFzdGVwSXNBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1ByZXZpb3VzU3RlcERpYWxvZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRhcmdldFN0ZXAgJiYgIXN0ZXBJc0FjdGl2ZSAmJiAodGFyZ2V0U3RlcC5jb21wbGV0ZWQgfHwgdGFyZ2V0U3RlcC5kaXNhYmxlZCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RpYWxvZ0lmQnVzeU9ySnVzdENvbXBsZXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXggPSBjbGlja2VkU3RlcEluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdFN0ZXBDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ29tcG9uZW50KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICgodGhpcy5jdXJyZW50U3RlcCB8fCB0aGlzLmZpbmlzaFN0ZXApICYmICghdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudCkpIHtcclxuICAgICAgICAgICAgc3VwZXIuY3JlYXRlQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBSeGpzTGlmZXRpbWUgPSBuZXcgUnhqc0xpZmV0aW1lTWFuYWdlcigpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwUnhqc0xpZmV0aW1lLmFkZFN1YnNjcmlwdGlvbnMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LnN1Ym1pdHRlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbk5leHRDbGljaygpKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQubW9kZWxDaGFuZ2VkLnN1YnNjcmliZShuZXdWYWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbE1vZGVsID0gbmV3VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMubW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5vbldpemFyZE1vZGVsQ2hhbmdlZCh0aGlzLm1vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNsZWFuQ29tcG9uZW50KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLmNsZWFuQ29tcG9uZW50KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0ZXBSeGpzTGlmZXRpbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcFJ4anNMaWZldGltZS5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBSeGpzTGlmZXRpbWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNhdmVzIHRoZSBzdGF0ZSBvZiB0aGUgbW9kZWwgYXQgdGhlIGJlZ2lubmluZ1xyXG4gICAgICogb2YgdGhlIGN1cnJlbnQgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBwcmVzZXJ2ZU1vZGVsRm9yQ3VycmVudFN0ZXAoKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RlcE1vZGVsQ29weSA9IE1zZnRTbWUuZGVlcENvcHkodGhpcy5pbnRlcm5hbE1vZGVsIHx8IHt9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0cyB0aGUgbW9kZWwgYmFjayB0byB0aGUgc3RhdGUgYXQgdGhlXHJcbiAgICAgKiBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZXN0b3JlTW9kZWxGb3JDdXJyZW50U3RlcCgpIHtcclxuICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5jdXJyZW50U3RlcE1vZGVsQ29weTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGVwTW9kZWxDb3B5ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGVtaXRTdGVwQ2hhbmdlZCgpIHtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5uYXZpZ2F0aW9uSW5mb3JtYXRpb24ucHVzaEhpc3RvcnkoeyBzdGFnZTogdGhpcy5zdGFnZUluZGV4LCBzdGVwOiB0aGlzLnN0ZXBJbmRleCB9KTtcclxuXHJcbiAgICAgICAgLy8gZW1pdCBvbmx5IHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2UuXHJcbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVUZWxlbWV0cnlUYWdzKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0ZXBDaGFuZ2VkLmVtaXQoe1xyXG4gICAgICAgICAgICAgICAgc3RhZ2VJbmRleDogdGhpcy5zdGFnZUluZGV4LFxyXG4gICAgICAgICAgICAgICAgc3RhZ2VOYW1lOiB0aGlzLmN1cnJlbnRTdGFnZSA/IHRoaXMuY3VycmVudFN0YWdlLm5hbWUgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc3RlcEluZGV4OiB0aGlzLnN0ZXBJbmRleCxcclxuICAgICAgICAgICAgICAgIHN0ZXBOYW1lOiB0aGlzLmN1cnJlbnRTdGVwID8gdGhpcy5jdXJyZW50U3RlcC5uYW1lIDogbnVsbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdGVsZW1ldHJ5IHN0cmluZyB1c2VkIHRvIHBvcHVsYXRlIHRlbGVtZXRyeSBhY3Rpb24gZXZlbnRzLiBVcGRhdGVzIHdpemFyZCBzdGF0ZSwgc3RlcCBpbmRleCwgYW5kIHRpbWUgc3RlcCBpbmRleCBzdGFydGVkLlxyXG4gICAgICogU3RlcCBpbmRleCBzdGFydCB0aW1lIHNob3VsZCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggZXZlbnQgdGltZXN0YW1wIHRvIG1vcmUgZWFzaWx5IGNhbGN1bGF0ZSB0aW1lIHNwZW50IGluIHN0YWdlLlxyXG4gICAgICogQHBhcmFtIHN0YXRlIFRoZSBzdGF0ZSB0byBjaGFuZ2UgdG8sIGlmIHByb3ZpZGVkLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHVwZGF0ZVRlbGVtZXRyeVRhZ3Moc3RhdGU/OiBXaXphcmRTdGF0ZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZSA9IHN0YXRlID8gc3RhdGUgOiB0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGU7XHJcbiAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLnN0ZXBJbmRleE51bWJlciA9IGAke3RoaXMuc3RhZ2VJbmRleCArIDF9LiR7dGhpcy5zdGVwSW5kZXggKyAxfWA7XHJcbiAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLnN0ZXBOYW1lID0gYCR7dGhpcy5jdXJyZW50U3RhZ2UubmFtZX0uJHt0aGlzLmN1cnJlbnRTdGVwLm5hbWV9YDtcclxuICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEuc3RlcEluZGV4U3RhcnRUaW1lID0gKG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCk7IC8vIGtlZXAgc2FtZSBmb3JtYXQgYXMgZXZlbnQgdGltZXN0YW1wXHJcblxyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzbWUtd2l6YXJkIHNtZS1sYXlvdXQtYWJzb2x1dGUtcGhvbmUtdXAgc21lLWFycmFuZ2Utc3RhY2stdiBzbWUtcG9zaXRpb24taW5zZXQtbm9uZVwiPlxyXG4gIDwhLS0gSGVhZGluZyAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiaGVhZGluZyAmJiAhd2l6YXJkSXNGaW5pc2hlZFwiIFthdHRyLmFyaWEtcmVhZG9ubHldPXRydWVcclxuICAgIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staCBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1wYWRkaW5nLXZlcnRpY2FsLXNtIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbGcgc21lLWJvcmRlci1ib3R0b20tc20gc21lLWJvcmRlci1ib3R0b20tY29sb3ItYmFzZS04MFwiPlxyXG4gICAgPGgzIGlkPVwic21lLXNoZWxsLXdpemFyZC1oZWFkaW5nLWlkXCI+e3sgaGVhZGluZyB9fTwvaDM+XHJcbiAgICA8c21lLWJhZGdlIHR5cGU9XCJwcmV2aWV3XCIgKm5nSWY9XCJpc0luUHJldmlld1wiIGNsYXNzPVwic21lLW1hcmdpbi1sZWZ0LXhzXCI+PC9zbWUtYmFkZ2U+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cInNob3dXaXphcmRCYW5uZXJcIj5cclxuICAgIDxzbWUtYmFubmVyIFtpdGVtc109XCJiYW5uZXJJdGVtc1wiPjwvc21lLWJhbm5lcj5cclxuICA8L2Rpdj5cclxuICA8IS0tIFN0YWdlcyAtLT5cclxuICA8ZGl2IHJvbGU9XCJ0YWJsaXN0XCIgKm5nSWY9XCIhd2l6YXJkSXNGaW5pc2hlZFwiXHJcbiAgICBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLWggc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtcGFkZGluZy1ob3Jpem9udGFsLWxnIHNtZS1ib3JkZXItYm90dG9tLXNtIHNtZS1ib3JkZXItYm90dG9tLWNvbG9yLWJhc2UtODAgc21lLWZvY3VzLXpvbmUgc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0by14XCI+XHJcbiAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBzdGFnZSBvZiBzdGFnZXM7IGxldCB2YWwgPSBpbmRleFwiXHJcbiAgICAgIFt0aXRsZV09XCJzdGFnZS5uYW1lXCJcclxuICAgICAgcm9sZT1cInRhYlwiIHRhYmluZGV4PVwiMFwiIFthdHRyLmFyaWEtbGFiZWxdPVwic3RhZ2UubmFtZVwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIHR5cGU9XCJidXR0b25cIiBbc21lVGVsZW1ldHJ5RGF0YUJsb2JdPVwidGVsZW1ldHJ5RGF0YVwiIFtzbWVUZWxlbWV0cnlJZF09XCInd2l6YXJkU3RhZ2UnICsgKHZhbCArIDEpXCJcclxuICAgICAgW2NsYXNzLnNtZS1hY3RpdmVdPVwidmFsID09PSBzdGFnZXNBcnJheUluZGV4XCJcclxuICAgICAgW2NsYXNzLnNtZS1zZWxlY3RlZF09XCJ2YWwgPT09IHN0YWdlc0FycmF5SW5kZXhcIlxyXG4gICAgICBbY2xhc3MuYXJpYS1zZWxlY3RlZF09XCJ2YWwgPT09IHN0YWdlc0FycmF5SW5kZXhcIlxyXG4gICAgICBbY2xhc3Muc21lLXdpemFyZC1zdGFnZS1mb2N1c109XCJ2YWwgPT09IHN0YWdlc0FycmF5SW5kZXhcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwidGhpcy5zdGFnZUluZGV4RGlzYWJsZWQoc3RhZ2UsIHZhbClcIiBbc21lVGVsZW1ldHJ5RGlzYWJsZUVsZW1lbnRdID0gXCJ0aGlzLnN0YWdlSW5kZXhEaXNhYmxlZChzdGFnZSwgdmFsKVwiXHJcbiAgICAgIGNsYXNzPVwic21lLXdpemFyZC1zdGFnZSBzbWUtYnV0dG9uLXRyaWdnZXIgc21lLXdpemFyZC1idXR0b24taXRlbSBzbWUtcGFkZGluZy12ZXJ0aWNhbC1zbSBzbWUtcGFkZGluZy1ob3Jpem9udGFsLW5vbmUgc21lLWJ1dHRvbi1hdXRvLXdpZHRoIHNtZS1tYXJnaW4tcmlnaHQtbWRcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7J3NtZS13aXphcmQtc3RhZ2UtY29tcGxldGVkJzogc3RhZ2UuY29tcGxldGVkLCAnc21lLXdpemFyZC1zdGFnZS1jbGlja2VkJzogdmFsID09PSBzdGFnZXNBcnJheUluZGV4LCAnc21lLXdpemFyZC1zdGFnZS1hY3RpdmUnOiBzdGFnZS5hY3RpdmV9XCJcclxuICAgICAgKGNsaWNrKT1cIm9uU3RhZ2VDbGljayh2YWwpXCI+XHJcbiAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInsnc21lLWljb24gc21lLWljb24tYWNjZXB0IHNtZS1pY29uLXNpemUteHhzJzogc3RhZ2UuY29tcGxldGVkfVwiXHJcbiAgICAgICAgY2xhc3M9XCJzbWUtd2l6YXJkLXN0YWdlLWluZGV4IHNtZS1wb3NpdGlvbi1mbGV4LW5vbmVcIj5cclxuICAgICAgICB7eyAhc3RhZ2UuY29tcGxldGVkID8gdmFsICsgMSA6ICcnIH19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieydzbWUtZm9udC1lbXBoYXNpczEgc21lLXdpemFyZC1zdGFnZS1hY3RpdmUnOiB2YWwgPT09IHN0YWdlc0FycmF5SW5kZXggfHwgc3RhZ2UuYWN0aXZlLFxyXG4gICAgICAgICAgJ3NtZS13aXphcmQtc3RhZ2UtY29tcGxldGVkJzogc3RhZ2UuY29tcGxldGVkLFxyXG4gICAgICAgICAgJ3NtZS1tYXJnaW4tbGVmdC14cyc6ICFzdGFnZS5jb21wbGV0ZWQsXHJcbiAgICAgICAgICAnc21lLWxheW91dC1ub25lJzogIXNob3VsZFJlbmRlclRleHRPblN0ZXBzfVwiXHJcbiAgICAgICAgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1mb250LWJvZHkgc21lLWFycmFuZ2UtZWxsaXBzaXNcIj5cclxuICAgICAgICB7eyBzdGFnZS5uYW1lIH19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staCBzbWUtYXJyYW5nZS1vdmVyZmxvdy1hdXRvIHNtZS1wb3NpdGlvbi1mbGV4LWF1dG8gc21lLXdpemFyZC1jb250ZW50LWNvbnRhaW5lclwiIFtjbGFzcy5zbWUtd2l6YXJkLW5vLWxlZnQtcGFuZV09XCJoaWRlU3RlcHNMaXN0U2lkZVBhbmVcIj5cclxuICAgIDxkaXYgKm5nSWY9XCIhd2l6YXJkSXNGaW5pc2hlZCAmJiAhaGlkZVN0ZXBzTGlzdFNpZGVQYW5lXCJcclxuICAgICAgY2xhc3M9XCJzbWUtYXJyYW5nZS1zdGFjay12IHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWZvY3VzLXpvbmUgc21lLWJvcmRlci1yaWdodC1zbSBzbWUtYm9yZGVyLXJpZ2h0LWNvbG9yLWJhc2UtODAgc21lLXdpemFyZC1sZWZ0LXBhbmVcIj5cclxuICAgICAgPGRpdiByb2xlPVwidGFibGlzdFwiICpuZ0lmPVwiIXdpemFyZElzRmluaXNoZWQgJiYgIWhpZGVTdGVwc0xpc3RTaWRlUGFuZVwiXHJcbiAgICAgICAgY2xhc3M9XCJzbWUtcGFkZGluZy12ZXJ0aWNhbC1zbSBzbWUtcG9zaXRpb24tZmxleC1hdXRvXCIgW25nQ2xhc3NdPVwieydzbWUtd2l6YXJkLWxlZnQtcGFuZS1taW4td2lkdGgtZXhwYW5kZWQnOiBpc0V4cGFuZGVkfVwiPlxyXG4gICAgICAgIDxidXR0b24gcm9sZT1cInRhYlwiICpuZ0Zvcj1cImxldCBzdGVwIG9mIGdldFN0ZXBzRm9yU3RhZ2UoKTsgbGV0IGluZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFtuZ0NsYXNzXT1cInsnc21lLXN0ZXAtYWN0aXZlIHNtZS1zY2hlbWUtbmF2LWxpc3QtaXRlbSBzbWUtYWN0aXZlIHNtZS1jb2xvci1iYXNlLTUnOiBpbmRleCA9PT0gc3RlcEluZGV4fVwiXHJcbiAgICAgICAgICBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLWggc21lLXdpemFyZC1zdGVwIHNtZS1idXR0b24tdHJpZ2dlciBzbWUtd2l6YXJkLWJ1dHRvbi1pdGVtIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbm9uZVxyXG4gICAgICAgICAgc21lLXBvc2l0aW9uLXN0cmV0Y2gtaCBzbWUtcGFkZGluZy12ZXJ0aWNhbC14cyBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLXBhZGRpbmctbGVmdC1sZyBzbWUtcGFkZGluZy1yaWdodC14c1wiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidGhpcy5zdGVwSW5kZXhEaXNhYmxlZChzdGVwLCBpbmRleClcIiBbc21lVGVsZW1ldHJ5RGlzYWJsZUVsZW1lbnRdPVwidGhpcy5zdGVwSW5kZXhEaXNhYmxlZChzdGVwLCBpbmRleClcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU3RlcENsaWNrKGluZGV4KVwiXHJcbiAgICAgICAgICBbc21lVGVsZW1ldHJ5RGF0YUJsb2JdPVwidGVsZW1ldHJ5RGF0YVwiIFtzbWVUZWxlbWV0cnlJZF09XCInd2l6YXJkU3RlcCcgKyAoaW5kZXggKyAxKVwiXHJcbiAgICAgICAgICBbdGl0bGVdPVwiaXNFeHBhbmRlZCA/IG51bGwgOiBzdGVwLm5hbWVcIlxyXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpc0V4cGFuZGVkID8gbnVsbCA6IHN0ZXAubmFtZVwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiID5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtYXV0byBzbWUtcG9zaXRpb24tZmxleC1ncm93LXN0YXJ0ICBzbWUtbWFyZ2luLXJpZ2h0LXhzXCI+e3sgc3RhZ2VzQXJyYXlJbmRleCArIDEgfX0ue3sgaW5kZXggKyAxIH19PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1wb3NpdGlvbi1mbGV4LWdyb3ctc3RhcnQgc21lLWFycmFuZ2UtZWxsaXBzaXNcIiAqbmdJZj1cImlzRXhwYW5kZWRcIj57eyBzdGVwLm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtZm9jdXMtem9uZVwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwic3BsaXQtdmlldy10b2dnbGUgc21lLWJ1dHRvbi10cmlnZ2VyIHNtZS1idXR0b24tYXV0by13aWR0aCBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1sYXlvdXQtZmxvYXQtcmlnaHRcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhbmUoKVwiIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNFeHBhbmRlZFwiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImlzRXhwYW5kZWQgPyBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5jb2xsYXBzZVN0ZXBzTGlzdCA6IHN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLmV4cGFuZFN0ZXBzTGlzdFwiXHJcbiAgICAgICAgICBbdGl0bGVdPVwiaXNFeHBhbmRlZCA/IHN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLmNvbGxhcHNlU3RlcHNMaXN0IDogc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuZXhwYW5kU3RlcHNMaXN0XCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1pY29uXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnc21lLWljb24tY2hldnJvbkxlZnQnOiBpc0V4cGFuZGVkLCAnc21lLWljb24tY2hldnJvblJpZ2h0JzogIWlzRXhwYW5kZWQgfVwiPjwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFN0ZXAgY29udGVudCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJzbWUtZm9jdXMtem9uZSBzbWUtbGF5b3V0LXJlbGF0aXZlIHNtZS1hcnJhbmdlLW92ZXJmbG93LWF1dG8gc21lLXdpemFyZC1jb250ZW50LXBhbmVcIiBbY2xhc3Muc21lLXdpemFyZC1uby1sZWZ0LXBhbmVdPVwiaGlkZVN0ZXBzTGlzdFNpZGVQYW5lXCJcclxuICAgICAgW25nQ2xhc3NdPVwieydzbWUtcGFkZGluZy1pbnNldC1sZyc6IGN1cnJlbnRTdGVwQ29tcG9uZW50LnBhZENvbnRlbnRzfVwiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudFN0ZXBDb21wb25lbnQuZGlzYWJsZWRcIj5cclxuICAgICAgICA8c21lLXBhZ2UtYWxlcnQtYmFyIFthbGVydF09XCJhbGVydFwiPjwvc21lLXBhZ2UtYWxlcnQtYmFyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBEb24ndCByZW1vdmUgdGhpcyBsaW5lISAtLT5cclxuICAgICAgPCEtLSBUaGUgZHluYW1pY2FsbHkgcmVuZGVyZWQgY29tcG9uZW50IGxvb2tzIGZvciAjY29udGFpbmVyIHRvIHJlbmRlciBpdHNlbGYgYXMgdGhlIHNpYmxpbmcuISAtLT5cclxuICAgICAgPGRpdiBpZD1cImR5bmFtaWMtY29udGVudC1jb250YWluZXJcIiAjY29udGFpbmVyPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gRm9vdGVyIC0tPlxyXG4gIDxkaXYgI3dpemFyZEZvb3RlciAqbmdJZj1cIiF3aXphcmRJc0ZpbmlzaGVkXCJcclxuICAgIGNsYXNzPVwic21lLWxheW91dC1yZWxhdGl2ZSBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1ib3JkZXItdG9wLXNtIHNtZS1ib3JkZXItdG9wLWNvbG9yLWJhc2UtODAgc21lLXBhZGRpbmctdmVydGljYWwtc20gc21lLXBhZGRpbmctaG9yaXpvbnRhbC1sZyBzbWUtZm9jdXMtem9uZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1sYXlvdXQtZmxvYXQtbGVmdFwiIFtjbGFzcy5zbWUtcGFkZGluZy1yaWdodC14bF09XCIhdmFsaWRhdGluZ1wiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwic21lLWZvY3VzLXpvbmVcIiB0eXBlPVwiYnV0dG9uXCIgc21lVGVsZW1ldHJ5SWQ9XCJ3aXphcmRQcmV2XCIgW3NtZVRlbGVtZXRyeURhdGFCbG9iXT1cInRlbGVtZXRyeURhdGFcIiAoY2xpY2spPVwib25CYWNrQ2xpY2soKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlQmFja0J1dHRvblwiXHJcbiAgICAgICAgW2NsYXNzLnNtZS1sYXlvdXQtbm9uZV09XCIhY2FuTmF2aWdhdGVUb1ByZXZpb3VzU3RlcFwiPnt7c3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uYmFja319PC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwic21lLWZvY3VzLXpvbmUgc21lLWJ1dHRvbi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIHNtZVRlbGVtZXRyeUlkPVwid2l6YXJkTmV4dFwiIFtzbWVUZWxlbWV0cnlEYXRhQmxvYl09XCJ0ZWxlbWV0cnlEYXRhXCIgKGNsaWNrKT1cIm9uTmV4dENsaWNrKClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlTmV4dEJ1dHRvblwiIFtzbWVUZWxlbWV0cnlEaXNhYmxlRWxlbWVudF09XCJkaXNhYmxlTmV4dEJ1dHRvblwiPnt7IG5leHRCdXR0b25UZXh0KCkgfX08L2J1dHRvbj5cclxuICAgICAgPGRpdiAqbmdJZj1cInZhbGlkYXRpbmdcIiBjbGFzcz1cInNtZS1sYXlvdXQtcmVsYXRpdmUgc21lLWxheW91dC1mbG9hdC1yaWdodCBzbWUtcGFkZGluZy1sZWZ0LXhsIHNtZS1wYWRkaW5nLXRvcC1tZFwiPlxyXG4gICAgICAgIDxzbWUtbG9hZGluZy13aGVlbCBzaXplPVwic21hbGxcIj48L3NtZS1sb2FkaW5nLXdoZWVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cInNtZS1mb2N1cy16b25lXCIgdHlwZT1cImJ1dHRvblwiIHNtZVRlbGVtZXRyeUlkPVwid2l6YXJkU2tpcFwiIFtzbWVUZWxlbWV0cnlEYXRhQmxvYl09XCJ0ZWxlbWV0cnlEYXRhXCIgKGNsaWNrKT1cIm9uU2tpcENsaWNrKClcIlxyXG4gICAgICBbY2xhc3Muc21lLWxheW91dC1ub25lXT1cIiFzaG93U2tpcEJ1dHRvblwiPnt7c3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uc2tpcH19PC9idXR0b24+XHJcbiAgICA8YnV0dG9uICNleGl0QnV0dG9uIGNsYXNzPVwic21lLWZvY3VzLXpvbmUgc21lLWxheW91dC1mbG9hdC1yaWdodFwiIHR5cGU9XCJidXR0b25cIiBzbWVUZWxlbWV0cnlJZD1cIndpemFyZEV4aXRcIiBbc21lVGVsZW1ldHJ5RGF0YUJsb2JdPVwidGVsZW1ldHJ5RGF0YVwiXHJcbiAgICAgIChjbGljayk9XCJvbkV4aXRDbGljaygpXCI+e3sgZXhpdEJ1dHRvblRleHQoKSB9fTwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
1048
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL3dpemFyZC93aXphcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvd2l6YXJkL3dpemFyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEVBQThFLENBQUM7QUFDeEcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQzFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUN2RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDekcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0VBQStFLENBQUM7QUFDckgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFLMUcsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ25FLE9BQU8sRUFBVSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9E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RjthQUNKOztzQkE4T1EsUUFBUTs7c0JBQUksUUFBUTs7c0JBQUksTUFBTTt1QkFBQyxtQkFBbUI7d0JBck81QyxLQUFLO2tCQURmLEtBQUs7WUErQkMsYUFBYTtrQkFEbkIsS0FBSztZQWlCQyxnQkFBZ0I7a0JBRHRCLEtBQUs7WUErREMsWUFBWTtrQkFEbEIsU0FBUzttQkFBQyxjQUFjO1lBT1QsV0FBVztrQkFEMUIsTUFBTTtZQU9TLElBQUk7a0JBRG5CLE1BQU07WUFPUyxhQUFhO2tCQUQ1QixNQUFNO1lBT1MsV0FBVztrQkFEMUIsTUFBTTtZQU9TLGVBQWU7a0JBRDlCLE1BQU07WUFPUyxRQUFRO2tCQUR2QixNQUFNO1lBUUEsYUFBYTtrQkFEbkIsTUFBTTtZQU9BLHVCQUF1QjtrQkFEN0IsTUFBTTtZQXFLQSx1QkFBdUIsTUFLdkIsZUFBZSxNQVNmLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBmb3J3YXJkUmVmLFxyXG4gICAgSW5qZWN0LFxyXG4gICAgSW5qZWN0b3IsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uSW5pdCxcclxuICAgIE9wdGlvbmFsLFxyXG4gICAgT3V0cHV0LFxyXG4gICAgU2tpcFNlbGYsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGVib3VuY2UgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGVjb3JhdG9ycy9kZWJvdW5jZS5kZWNvcmF0b3JzJztcclxuaW1wb3J0IHsgWWllbGQgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGVjb3JhdG9ycy95aWVsZC5kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBSeGpzTGlmZXRpbWVNYW5hZ2VyIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL3J4anMtbGlmZXRpbWUtbWFuYWdlcic7XHJcbmltcG9ydCB7IExvZ2dpbmcgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RpYWdub3N0aWNzL2xvZ2dpbmcnO1xyXG5pbXBvcnQgeyBTbWVXZWJUZWxlbWV0cnkgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RpYWdub3N0aWNzL3NtZS13ZWItdGVsZW1ldHJ5JztcclxuaW1wb3J0IHsgVGVsZW1ldHJ5QWN0aW9uVHlwZXMgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RpYWdub3N0aWNzL3NtZS13ZWItdGVsZW1ldHJ5LW1vZGVscyc7XHJcbmltcG9ydCB7IEVudmlyb25tZW50TW9kdWxlIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9tYW5pZmVzdC9lbnZpcm9ubWVudC1tb2R1bGVzJztcclxuaW1wb3J0IHtcclxuICAgIFJwY0RpYWxvZ0NvbmZpcm1hdGlvblJlcXVlc3QsXHJcbiAgICBScGNEaWFsb2dNZXNzYWdlUmVxdWVzdFxyXG59IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvcnBjL2RpYWxvZy9ycGMtZGlhbG9nLW1vZGVsJztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU3RyaW5ncyB9IGZyb20gJy4uLy4uL2dlbmVyYXRlZC9TdHJpbmdzJztcclxuaW1wb3J0IHsgQXBwQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2FwcC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYW5uZXJJdGVtIH0gZnJvbSAnLi4vYmFubmVyJztcclxuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi9jb21tb24vZHluYW1pYy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMYXlvdXQsIFNNRV9MQVlPVVRfUFJPVklERVIgfSBmcm9tICcuLi9jb21tb24vbGF5b3V0JztcclxuaW1wb3J0IHsgU21lSGVhZGVyRGF0YSB9IGZyb20gJy4uL2hlYWRlci9oZWFkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSGVhbHRoQWxlcnRTZXZlcml0eSwgUGFnZUFsZXJ0IH0gZnJvbSAnLi4vcGFnZS1hbGVydC1iYXIvbW9kZWxzL3BhZ2UtYWxlcnQnO1xyXG5pbXBvcnQgeyBXaXphcmRNb2RlbCB9IGZyb20gJy4vbW9kZWxzL3dpemFyZC1tb2RlbCc7XHJcbmltcG9ydCB7IFdpemFyZE5hdmlnYXRpb25JbnRlcmZhY2UgfSBmcm9tICcuL21vZGVscy93aXphcmQtbmF2aWdhdGlvbi1pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBXaXphcmRTdGFnZSB9IGZyb20gJy4vbW9kZWxzL3dpemFyZC1zdGFnZSc7XHJcbmltcG9ydCB7IFdpemFyZFN0ZXAgfSBmcm9tICcuL21vZGVscy93aXphcmQtc3RlcCc7XHJcbmltcG9ydCB7IFdpemFyZFN0ZXBDaGFuZ2VkRXZlbnQgfSBmcm9tICcuL21vZGVscy93aXphcmQtc3RlcC1jaGFuZ2VkLWV2ZW50JztcclxuaW1wb3J0IHsgV2l6YXJkU3RlcFZhbGlkYXRpb24gfSBmcm9tICcuL21vZGVscy93aXphcmQtc3RlcC12YWxpZGF0aW9uJztcclxuaW1wb3J0IHsgV2l6YXJkQnVpbGRlciB9IGZyb20gJy4vd2l6YXJkLWJ1aWxkZXInO1xyXG5pbXBvcnQgeyBXaXphcmROYXZpZ2F0aW9uSW5mb3JtYXRpb24gfSBmcm9tICcuL3dpemFyZC1uYXZpZ2F0aW9uLWluZm9ybWF0aW9uJztcclxuaW1wb3J0IHsgV2l6YXJkUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIgfSBmcm9tICcuL3dpemFyZC1yZXNwb25zaXZlLXdpbmRvdy1tYW5hZ2VyJztcclxuaW1wb3J0IHsgR2VuZXJpY1dpemFyZFN0ZXBDb21wb25lbnQgfSBmcm9tICcuL3dpemFyZC1zdGVwL3dpemFyZC1zdGVwLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogV2hhdGV2ZXIgc3RhdGUgdGhlIHdpemFyZCBpcyBpblxyXG4gKi9cclxuZW51bSBXaXphcmRTdGF0ZSB7XHJcbiAgICBFeGl0ID0gJ0V4aXQnLFxyXG4gICAgRW50cnkgPSAnRW50cnknLFxyXG4gICAgRmluaXNoZWQgPSAnRmluaXNoZWQnLFxyXG4gICAgQWN0aXZlID0gJ0FjdGl2ZSdcclxufVxyXG5cclxuLyoqXHJcbiAqIERhdGEgdG8gY29sbGVjdCBpbiB3aXphcmRcclxuICovXHJcbmNsYXNzIFdpemFyZFRlbGVtZXRyeURhdGEge1xyXG4gICAgc3RlcEluZGV4TnVtYmVyOiBzdHJpbmc7XHJcbiAgICBzdGVwTmFtZTogc3RyaW5nO1xyXG4gICAgc3RlcEluZGV4U3RhcnRUaW1lOiBzdHJpbmc7XHJcbiAgICBlbnRyeVBvaW50Pzogc3RyaW5nO1xyXG4gICAgd2l6YXJkVHlwZT86IHN0cmluZztcclxuICAgIHdpemFyZElkPzogc3RyaW5nO1xyXG4gICAgc3RhdGU/OiBXaXphcmRTdGF0ZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBzbWVEb2Mge0BsYWJlbCBXaXphcmQgQGlkIHNtZS13aXphcmR9XHJcbiAqXHJcbiAqIEBvdmVydmlld1xyXG4gKiBAZmlsZSB7QGZpbGVwYXRoIC4vZXhhbXBsZXMvb3ZlcnZpZXcubWR9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgRXhhbXBsZSBXaXphcmQgQGlkIHNpbXBsZS13aXphcmR9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvd2l6YXJkLWV4YW1wbGUuY29tcG9uZW50Lmh0bWx9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3dpemFyZC1leGFtcGxlLmNvbXBvbmVudC50c31cclxuICogQGZpbGUge0BmaWxlbmFtZSBkYXRhLW1vZGVsLnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2V4YW1wbGUtbW9kZWwudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgZmluaXNoLWNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9maW5pc2guY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGZpbmlzaC1jb21wb25lbnQuaHRtbCBAZmlsZXBhdGggLi9leGFtcGxlcy9maW5pc2guY29tcG9uZW50Lmh0bWx9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgc2ltcGxlLXN0YXRpYy10ZXh0Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2ltcGxlLXN0YXRpYy10ZXh0LmNvbXBvbmVudC5odG1sfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIHNpbXBsZS1zdGF0aWMtdGV4dC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9zaW1wbGUtc3RhdGljLXRleHQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgc2ltcGxlLXRleHQtaW5wdXQuY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvc2ltcGxlLXRleHQtaW5wdXQuY29tcG9uZW50Lmh0bWx9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgc2ltcGxlLXRleHQtaW5wdXQuY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL3NpbXBsZS10ZXh0LWlucHV0LmNvbXBvbmVudC50c31cclxuICovXHJcblxyXG4vKipcclxuICogVGhlIGNvbXBvbmVudCBjbGFzcyBkZWZpbml0aW9uIGZvciB0aGUgd2l6YXJkIGNvbXBvbmVudC5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtd2l6YXJkJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi93aXphcmQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgeyBwcm92aWRlOiBTTUVfTEFZT1VUX1BST1ZJREVSLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBXaXphcmRDb21wb25lbnQpIH1cclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFdpemFyZENvbXBvbmVudDxUTW9kZWwgZXh0ZW5kcyBXaXphcmRNb2RlbD5cclxuICAgIGV4dGVuZHMgRHluYW1pY0NvbXBvbmVudEJhc2U8R2VuZXJpY1dpemFyZFN0ZXBDb21wb25lbnQ8VE1vZGVsPj5cclxuICAgIGltcGxlbWVudHMgTGF5b3V0LCBPbkluaXQsIFdpemFyZE5hdmlnYXRpb25JbnRlcmZhY2Uge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgZGF0YSBtb2RlbCBmb3Igc2hhcmluZyBkYXRhIGFjcm9zcyB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBtb2RlbCh2YWx1ZTogVE1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbE1vZGVsID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQub25XaXphcmRNb2RlbENoYW5nZWQodGhpcy5tb2RlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgZGF0YSBtb2RlbCBmb3Igc2hhcmluZyBkYXRhIGFjcm9zcyB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCk6IFRNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxNb2RlbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBiYWNraW5nIHN0b3JlIGZvciB0aGUgbW9kZWwgcHJvcGVydHlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbnRlcm5hbE1vZGVsOiBUTW9kZWw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnRlcm5hbCBjb3B5IG9mIG1vZGVsIHRvIHJvbGxiYWNrIHRvIHdoZW4gdGhlXHJcbiAgICAgKiBjdXJyZW50IHN0ZXAgaXMgc2tpcHBlZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50U3RlcE1vZGVsQ29weTogVE1vZGVsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHdpemFyZEJ1aWxkZXIgdXNlZCB0byBpbnN0YW50aWF0ZSB0aGUga2V5IHdpemFyZCBwcm9wZXJ0aWVzLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHdpemFyZEJ1aWxkZXI6IFdpemFyZEJ1aWxkZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc3RhZ2VzIG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGFnZXM6IFdpemFyZFN0YWdlW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYmFubmVyIGl0ZW1zIGluIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBiYW5uZXJJdGVtczogQmFubmVySXRlbVtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gc2hvdyB3aXphcmQgYmFubmVyLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dXaXphcmRCYW5uZXI6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaGVhZGluZyBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGVhZGluZzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGhlYWRlciBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoZWFkZXJEYXRhOiBTbWVIZWFkZXJEYXRhO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRpdGxlIG9mIHRoZSBleGl0IGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGV4aXRCdXR0b25UaXRsZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRpdGxlIG9mIHRoZSBmaW5pc2ggYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmluaXNoQnV0dG9uVGl0bGU6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBmaW5pc2ggdmlldyBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmluaXNoVmlldzogV2l6YXJkU3RlcDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdGhlIHN0ZXBzIGxpc3Qgc2lkZSBwYW5lIHdpbGwgYmUgdmlzaWJsZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGhpZGVTdGVwc0xpc3RTaWRlUGFuZTogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgYSBjb25maXJtYXRpb24gZGlhbG9nIHdpbGwgYmUgc2hvd24gdXBvbiAnRXhpdCcgY2xpY2tlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3dFeGl0Q29uZmlybWF0aW9uRGlhbG9nOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGUgYXBwbGljYXRpb24gaXMgaW4gcHJldmlldy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlzSW5QcmV2aWV3OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGUgd2l6YXJkIGNhbiBuYXZpZ2F0ZSB0byBhIHByZXZpb3VzIHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjYW5OYXZpZ2F0ZVRvUHJldmlvdXNTdGVwOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVsZW1ldHJ5IGRhdGEgY29sbGVjdGVkIHdoaWxlIG5hdmlnYXRpbmcgdGhyb3VnaCB3aXphcmQuIEJ5IGRlZmF1bHQsIHN0YXJ0IGF0IDEuMSBzdGVwIGluZGV4IGFuZFxyXG4gICAgICogRW50cnkgc3RhdGUuXHJcbiAgICAgKiBLZWVwIHNhbWUgZm9ybWF0IGFzIHRlbGVtZXRyeSBldmVudCB0aW1lc3RhbXBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHRlbGVtZXRyeURhdGE6IFdpemFyZFRlbGVtZXRyeURhdGEgPSB7XHJcbiAgICAgICAgc3RlcEluZGV4TnVtYmVyOiAnMS4xJyxcclxuICAgICAgICBzdGVwTmFtZTogJycsXHJcbiAgICAgICAgc3RlcEluZGV4U3RhcnRUaW1lOiAobmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcclxuICAgICAgICBlbnRyeVBvaW50OiBFbnZpcm9ubWVudE1vZHVsZS5jcmVhdGVFbnRyeXBvaW50SWQoTXNmdFNtZS5zZWxmKCkuSW5pdC5tb2R1bGVOYW1lLFxyXG4gICAgICAgICAgICBNc2Z0U21lLnNlbGYoKS5Jbml0LmVudHJ5UG9pbnROYW1lKSxcclxuICAgICAgICBzdGF0ZTogV2l6YXJkU3RhdGUuRW50cnlcclxuICAgIH07XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnd2l6YXJkRm9vdGVyJylcclxuICAgIHB1YmxpYyB3aXphcmRGb290ZXI6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE9jY3VycyB3aGVuIHRoZSB3aXphcmQgbW9kZWwgY2hhbmdlc1xyXG4gICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5IG1vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VE1vZGVsPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE9jY3VycyB3aGVuIHRoZSB3aXphcmQgaXMgZXhpdGVkLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBleGl0OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPY2N1cnMgd2hlbmV2ZXIgYSBzdGVwIGlzIHN1Ym1pdHRlZC5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RlcFN1Ym1pdHRlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIHdoZW5ldmVyIGEgc3RlcCBpbmRleCBpcyBjaGFuZ2VkLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBzdGVwQ2hhbmdlZDogRXZlbnRFbWl0dGVyPFdpemFyZFN0ZXBDaGFuZ2VkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxXaXphcmRTdGVwQ2hhbmdlZEV2ZW50PigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIHdoZW5ldmVyIHN0ZXAgdmFsaWRhdGlvbiBmYWlsc1xyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBzdGVwSW52YWxpZGF0ZWQ6IEV2ZW50RW1pdHRlcjxXaXphcmRTdGVwVmFsaWRhdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPFdpemFyZFN0ZXBWYWxpZGF0aW9uPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2NjdXJzIHdoZW4gdGhlIHdpemFyZCBpcyBmaW5pc2hlZFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBmaW5pc2hlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgaW1wbGVtZW50cyB0aGUgSUxheW91dCBpbnRlcmZhY2UuIEl0J3MgdHJpZ2dlcmVkIHdoZW4gdGhlIGxheW91dCBpcyBjaGFuZ2VkLlxyXG4gICAgICogSXQncyB1c2VkIHRvIHRlbGwgdGhlIGNoaWxkIGNvbXBvbmVudHMgdG8gY29vcmRpbmF0ZSB3aXRoIHRoZSBsYXlvdXQgY2hhbmdlLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBsYXlvdXRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgTGF5b3V0IGludGVyZmFjZVxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyB3aW5kb3dCcmVha3BvaW50Q2hhbmdlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzb3VyY2Ugc3RyaW5ncyBmb3IgdGhlIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0cmluZ3M6IFN0cmluZ3MgPSBNc2Z0U21lLmdldFN0cmluZ3M8U3RyaW5ncz4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSB3aXphcmQgaXMgdmFsaWRhdGluZyBpbnB1dC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHZhbGlkYXRpbmc6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCBhbGwgb2YgdGhlIHdpemFyZCdzIHN0ZXBzIGFyZSBjb21wbGV0ZSAmICdGaW5pc2gnIGlzIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB3aXphcmRJc0ZpbmlzaGVkOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2l6YXJkIG5hdmlnYXRpb24gaW5mb3JtYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuYXZpZ2F0aW9uSW5mb3JtYXRpb246IFdpemFyZE5hdmlnYXRpb25JbmZvcm1hdGlvbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGR5bmFtaWNhbGx5IGNoZWNrIGlmIGFueSBvZiB0aGUgaGVhZGVyIHN0ZXAgY29udGVudCB3aWxsIGZhaWwgdG8gcmVuZGVyLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2hvdWxkUmVuZGVyVGV4dE9uU3RlcHMgPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFsZXJ0IGZvciBhIGRpc2FibGVkIHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhbGVydDogUGFnZUFsZXJ0ID0ge1xyXG4gICAgICAgIHNldmVyaXR5OiBIZWFsdGhBbGVydFNldmVyaXR5LkluZm8sXHJcbiAgICAgICAgbWVzc2FnZTogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5kaXNhYmxlZFN0ZXBBbGVydCxcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaWRlIHBhbmUgdG9nZ2xlIHN0YXRlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0V4cGFuZGVkOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHN0ZXAuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdGFnZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzdGFnZUluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcnhqcyBsaWZldGltZSBtYW5hZ2VyIGZvciB0aGUgY3VycmVudCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGN1cnJlbnRTdGVwUnhqc0xpZmV0aW1lOiBSeGpzTGlmZXRpbWVNYW5hZ2VyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHdpbmRvdyByZXNwb25zaXZlIG1hbmFnZXIgZm9yIHRoZSB3aXphcmQgY29udHJvbC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB3aXphcmRSZXNwb25zaXZlV2luZG93TWFuYWdlcjogV2l6YXJkUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgV2l6YXJkQ29tcG9uZW50IGNsYXNzLlxyXG4gICAgICogQHBhcmFtIGFwcENvbnRleHQgLSBUaGUgYXBwbGljYXRpb24gY29udGV4dCBzZXJ2aWNlIGNsYXNzLlxyXG4gICAgICogQHBhcmFtIGNoYW5nZURldGVjdG9yUmVmIC0gVGhlIGNoYW5nZSBkZXRlY3Rvci5cclxuICAgICAqIEBwYXJhbSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgLSBUaGUgY29tcG9uZW50IGZhY3RvcnkgcmVzb2x2ZXIuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwdWJsaWMgaG9zdEVsZW1lbnQ6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBhcHBDb250ZXh0OiBBcHBDb250ZXh0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgICAgICBAU2tpcFNlbGYoKSBAT3B0aW9uYWwoKSBASW5qZWN0KFNNRV9MQVlPVVRfUFJPVklERVIpIGxheW91dDogTGF5b3V0XHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIGluamVjdG9yKTtcclxuICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUTW9kZWw+KCk7XHJcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKGxheW91dCkge1xyXG4gICAgICAgICAgICB0aGlzLndpemFyZFJlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyID0gbmV3IFdpemFyZFJlc3BvbnNpdmVXaW5kb3dNYW5hZ2VyKGxheW91dCk7XHJcbiAgICAgICAgICAgIC8vIG9uIHBhcmVudCBsYXlvdXQgY2hhbmdlcywgcmUtZW1pdCB0aGUgbGF5b3V0IGNoYW5nZSB0byBvdXIgZXZlbnRcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gobGF5b3V0LmxheW91dENoYW5nZWQuc3Vic2NyaWJlKCgoKSA9PiB0aGlzLm9uTGF5b3V0Q2hhbmdlZCgpKSkpO1xyXG4gICAgICAgICAgICAvLyBvbiB3aW5kb3cgYnJlYWsgcG9pbnQgY2hhbmdlcywgZW1pdCB0aGUgZXZlbnQgYWJvdXQgY3JpdGljYWwgY2xhc3NlcyBhbmQgc3R5bGluZyB1cGRhdGVzIHNpZ25hbC5cclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2gobGF5b3V0LndpbmRvd0JyZWFrcG9pbnRDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uV2luZG93QnJlYWtwb2ludENoYW5nZWQoKSkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kZWZlcnJlZE9uTGF5b3V0Q2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IHRlbGVtZXRyeSBldmVudCBzdHJ1Y3R1cmUgZm9yIHdpemFyZCB0ZWxlbWV0cnkuIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGFueSBhdXRvbWF0aWNcclxuICAgICAqIGFjdGlvbnMgbm90IHRyaWdnZXJlZCBieSBhIERPTSBpbnRlcmFjdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB3aXphcmRUZWxlbWV0cnlFdmVudEJsb2IoKTogYW55IHtcclxuICAgICAgICBjb25zdCB3aXphcmRUZWxlbWV0cnlCYXNlID0ge1xyXG4gICAgICAgICAgICBjb250ZW50SWQ6ICdzbWUtd2l6YXJkJyxcclxuICAgICAgICAgICAgYXJlYU5hbWU6ICdXaXphcmRDb21wb25lbnQnXHJcbiAgICAgICAgfTtcclxuICAgICAgICBNc2Z0U21lLmRlZXBBc3NpZ24od2l6YXJkVGVsZW1ldHJ5QmFzZSwgdGhpcy50ZWxlbWV0cnlEYXRhKTtcclxuICAgICAgICByZXR1cm4gd2l6YXJkVGVsZW1ldHJ5QmFzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHN0YWdlIG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc3RhZ2VzQXJyYXlJbmRleCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YWdlSW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdGVwIG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgc3RlcEluZGV4KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHN0YWdlIG9mIHRoZSB3aXphcmQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudFN0YWdlKCk6IFdpemFyZFN0YWdlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGFnZXNbdGhpcy5zdGFnZXNBcnJheUluZGV4XTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGN1cnJlbnQgc3RlcCBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRTdGVwKCk6IFdpemFyZFN0ZXAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGFnZS5zdGVwc1t0aGlzLnN0ZXBJbmRleF07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBmaW5pc2ggdmlldyBvZiB0aGUgd2l6YXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGZpbmlzaFN0ZXAoKTogV2l6YXJkU3RlcCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVmlldztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGN1cnJlbnQgc3RlcHMgZm9yIHRoZSBjdXJyZW50IHN0YWdlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0U3RlcHNGb3JTdGFnZSgpOiBXaXphcmRTdGVwW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGFnZS5zdGVwcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGR5bmFtaWNhbGx5IHJlbmRlcmVkIGNvbXBvbmVudCBvZiB0aGUgY3VycmVudCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRTdGVwQ29tcG9uZW50KCk6IEdlbmVyaWNXaXphcmRTdGVwQ29tcG9uZW50PFRNb2RlbD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZiA/IHRoaXMucmVmLmluc3RhbmNlIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG9uTGFzdFN0ZXBPZlN0YWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTdGFnZS5zdGVwcy5sZW5ndGggLSAxID09PSB0aGlzLnN0ZXBJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG9uTGFzdFN0YWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YWdlcy5sZW5ndGggLSAxID09PSB0aGlzLnN0YWdlSW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBvbkxhc3RTdGVwT2ZMYXN0U3RhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub25MYXN0U3RhZ2UgJiYgdGhpcy5vbkxhc3RTdGVwT2ZTdGFnZTtcclxuICAgIH1cclxuXHJcbiAgICBARGVib3VuY2UoKVxyXG4gICAgcHVibGljIGRlZmVycmVkT25MYXlvdXRDaGFuZ2VkKCkge1xyXG4gICAgICAgIHRoaXMub25MYXlvdXRDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQFlpZWxkKClcclxuICAgIHB1YmxpYyBvbkxheW91dENoYW5nZWQoKSB7XHJcbiAgICAgICAgdGhpcy5sYXlvdXRDaGFuZ2VkLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBvbiB3aW5kb3cgYnJlYWtwb2ludCBjaGFuZ2VkIGhhbmRsZXIuXHJcbiAgICAgKiBBZGRpbmcgeWllbGQgZm9yIGNvbXBvbmVudCB0byBnZXQgRWxlbWVudFJlZiBhZnRlciBpbml0aWFsaXphdGlvbi5cclxuICAgICAqL1xyXG4gICAgQFlpZWxkKClcclxuICAgIHB1YmxpYyBvbldpbmRvd0JyZWFrcG9pbnRDaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy53aXphcmRGb290ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy53aXphcmRSZXNwb25zaXZlV2luZG93TWFuYWdlci5vbldpbmRvd1NpemVDaGFuZ2VkKHRoaXMud2l6YXJkRm9vdGVyKTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNFeHBhbmRlZCA9IHRoaXMud2l6YXJkUmVzcG9uc2l2ZVdpbmRvd01hbmFnZXIuaXNFeHBhbmRlZDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgc3RhZ2UgaXMgZGlzYWJsZWQgb3Igbm90LlxyXG4gICAgcHVibGljIHN0YWdlSW5kZXhEaXNhYmxlZChzdGFnZTogV2l6YXJkU3RhZ2UsIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXN0YWdlLmNvbXBsZXRlZCAmJiBpbmRleCAhPT0gdGhpcy5zdGFnZXNBcnJheUluZGV4ICYmICFzdGFnZS5hY3RpdmU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIHN0ZXAgaXMgZGlzYWJsZWQgb3Igbm90LlxyXG4gICAgcHVibGljIHN0ZXBJbmRleERpc2FibGVkKHN0ZXA6IFdpemFyZFN0ZXAsIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXN0ZXAuY29tcGxldGVkICYmIGluZGV4ICE9PSB0aGlzLnN0ZXBJbmRleCAmJiAhc3RlcC5kaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHRleHQgZm9yIHRoZSBuZXh0IGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5leHRCdXR0b25UZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhZ2VzW3RoaXMuc3RhZ2VJbmRleF0uc3RlcHMubGVuZ3RoIC0gMSA9PT0gdGhpcy5zdGVwSW5kZXgpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhZ2VJbmRleCA9PT0gdGhpcy5zdGFnZXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoQnV0dG9uVGl0bGUgPyB0aGlzLmZpbmlzaEJ1dHRvblRpdGxlIDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5maW5pc2g7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5zdGFnZU5hbWUuZm9ybWF0KHRoaXMuc3RhZ2VzW3RoaXMuc3RhZ2VJbmRleCArIDFdLm5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24ubmV4dDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB0ZXh0IGZvciB0aGUgZXhpdC9maW5pc2ggYnV0dG9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZXhpdEJ1dHRvblRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5leGl0QnV0dG9uVGl0bGUgPyB0aGlzLmV4aXRCdXR0b25UaXRsZSA6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uZXhpdDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogR2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIHdpemFyZCBidXR0b25zXHJcbiAgICAqL1xyXG4gICAgcHVibGljIGdldCBkaXNhYmxlQmFja0J1dHRvbigpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc3RhZ2VzQXJyYXlJbmRleCA9PT0gMCAmJiB0aGlzLnN0ZXBJbmRleCA9PT0gMCkgfHwgdGhpcy52YWxpZGF0aW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZU5leHRCdXR0b24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC52YWxpZCB8fCB0aGlzLnZhbGlkYXRpbmcgfHwgdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5pc0J1c3k7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgc2hvd1NraXBCdXR0b24oKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLm9uTGFzdFN0ZXBPZkxhc3RTdGFnZSAmJiB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LmNhbkJlU2tpcHBlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IHN0ZXAgb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBzdGVwSW5kZXgodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50U3RhZ2Uuc3RlcHNbdmFsdWVdKSB7XHJcbiAgICAgICAgICAgIExvZ2dpbmcubG9nRXJyb3IoJ1dpemFyZENvbXBvbmVudC5zdGVwSW5kZXggc2V0dGVyJywgJ0F0dGVtcHRlZCB0byBzZXQgc3RlcEluZGV4IHRvIGludmFsaWQgdmFsdWUuJywge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0SW5kZXg6IHZhbHVlLFxyXG4gICAgICAgICAgICAgICAgc3RlcHM6IHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5kZXggPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2xlYW5Db21wb25lbnQoKTtcclxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRUeXBlID0gdGhpcy5jdXJyZW50U3RlcC5keW5hbWljU3RlcENvbXBvbmVudDtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVDb21wb25lbnQoKTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcmVzZXJ2ZU1vZGVsRm9yQ3VycmVudFN0ZXAoKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgc3RhZ2Ugb2YgdGhlIHdpemFyZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldCBzdGFnZXNBcnJheUluZGV4KHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc3RhZ2VzW3ZhbHVlXSkge1xyXG4gICAgICAgICAgICBMb2dnaW5nLmxvZ0Vycm9yKCdXaXphcmRDb21wb25lbnQuc3RhZ2VTdGVwSW5kZXggc2V0dGVyJywgJ0F0dGVtcHRlZCB0byBzZXQgc3RhZ2VzQXJyYXlJbmRleCB0byBpbnZhbGlkIHZhbHVlLicsIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldEluZGV4OiB2YWx1ZSxcclxuICAgICAgICAgICAgICAgIHN0ZXBzOiB0aGlzLnN0YWdlc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0YWdlSW5kZXggPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrcyB0aGUgY3VycmVudCBzdGFnZSBvZiB0aGUgd2l6YXJkIGFzIGNvbXBsZXRlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0YWdlIHdhcyBjb21wbGV0ZWQgYW5kIGZhbHNlIGlmIG5vdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbXBsZXRlQ3VycmVudFN0YWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTdGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGFnZS5jb21wbGV0ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0YWdlLmNvbXBsZXRlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmtzIHRoZSBjdXJyZW50IHN0ZXAgb2YgdGhlIHdpemFyZCBhcyBjb21wbGV0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdGVwIHdhcyBjb21wbGV0ZWQgYW5kIGZhbHNlIGlmIG5vdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbXBsZXRlQ3VycmVudFN0ZXAoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0ZXAgJiYgIXRoaXMuY3VycmVudFN0ZXAuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcC5jb21wbGV0ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFN0ZXAuY29tcGxldGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFya3MgdGhlIGN1cnJlbnQgc3RlcCBvZiB0aGUgd2l6YXJkIGFzIGluY29tcGxldGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc3RlcCB3YXMgZmFpbGVkIGFuZCBmYWxzZSBpZiBub3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBmYWlsQ3VycmVudFN0ZXAoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0ZXApIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcC5mYWlsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gIXRoaXMuY3VycmVudFN0ZXAuY29tcGxldGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW92ZXMgdGhlIHdpemFyZCB0byB0aGUgbmV4dCB2aXNpYmxlIHN0ZXAgaW4gdGhlIGxpc3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtb3ZlVG9OZXh0U3RlcCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm5hdmlnYXRlVG9OZXh0U3RlcCgpO1xyXG4gICAgICAgIHdoaWxlICh0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50LmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAuZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vbkxhc3RTdGVwT2ZMYXN0U3RhZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmluaXNoTmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb05leHRTdGVwKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy50ZWxlbWV0cnlEYXRhLnN0YXRlID09PSBXaXphcmRTdGF0ZS5FbnRyeSkge1xyXG4gICAgICAgICAgICAvLyBTd2l0Y2ggdG8gYWN0aXZlIGFmdGVyIG91ciBmaXJzdCBtb3ZlIHRvIG5leHQgb3IgcHJldmlvdXMgc3RlcFxyXG4gICAgICAgICAgICAvLyBNYW51YWxseSBjYWxsIGl0IGhlcmUgYi9jIHNvbWUgbW9kdWxlcyB3aWxsIHVwZGF0ZSBzdGVwSW5kZXggYWZ0ZXIgbG9hZGluZywgd2hpY2ggdHJpZ2dlcnMgZW1pdFN0ZXBDaGFuZ2VkLlxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRlbGVtZXRyeVRhZ3MoV2l6YXJkU3RhdGUuQWN0aXZlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMgdGhlIGluZGV4aW5nIGZvciBtb3ZpbmcgdG8gdGhlIG5leHQgc3RlcC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5hdmlnYXRlVG9OZXh0U3RlcCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMub25MYXN0U3RlcE9mU3RhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXgrKztcclxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9uTGFzdFN0YWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhZ2VJbmRleCsrO1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKHRoaXMuc3RhZ2VzW3RoaXMuc3RhZ2VJbmRleF0uc3RlcHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWdlSW5kZXgrKztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW92ZXMgdGhlIHdpemFyZCB0byB0aGUgcHJldmlvdXMgKHZpc2libGUpIHN0ZXAgaW4gdGhlIGxpc3QuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtb3ZlVG9QcmV2aW91c1N0ZXAoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvUHJldmlvdXNTdGVwKCk7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvUHJldmlvdXNTdGVwKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnRlbGVtZXRyeURhdGEuc3RhdGUgPT09IFdpemFyZFN0YXRlLkVudHJ5KSB7XHJcbiAgICAgICAgICAgIC8vIFN3aXRjaCB0byBhY3RpdmUgYWZ0ZXIgb3VyIGZpcnN0IG1vdmUgdG8gbmV4dCBvciBwcmV2aW91cyBzdGVwXHJcbiAgICAgICAgICAgIHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZSA9IFdpemFyZFN0YXRlLkFjdGl2ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIHRoZSBpbmRleGluZyBmb3IgbW92aW5nIGJhY2sgdG8gbGFzdCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmF2aWdhdGVUb1ByZXZpb3VzU3RlcCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5zdGVwSW5kZXggPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhZ2VJbmRleCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2VJbmRleC0tO1xyXG5cclxuICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLnN0YWdlc1t0aGlzLnN0YWdlSW5kZXhdLnN0ZXBzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhZ2VJbmRleC0tO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc3RlcEluZGV4ID0gdGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5zdGVwcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5jb21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RlcEluZGV4LS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1pdFN0ZXBDaGFuZ2VkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFRoZSBtZXRob2QgdGhhdCBmb2N1c2VzIG9uIGFuIGFjdGl2ZSBzdGVwIG9yIHN0YWdlXHJcbiAgICAqL1xyXG5cclxuICAgIHByaXZhdGUgZm9jdXNPbkFjdGl2ZVN0ZXAoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLmhpZGVTdGVwc0xpc3RTaWRlUGFuZSA/ICdzbWUtd2l6YXJkLXN0YWdlLWZvY3VzJyA6ICdzbWUtc3RlcC1hY3RpdmUnO1xyXG4gICAgICAgIGNvbnN0IGZvY3VzYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoc2VsZWN0b3IpO1xyXG4gICAgICAgIGlmIChmb2N1c2FibGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAoPEhUTUxJbnB1dEVsZW1lbnQ+Zm9jdXNhYmxlWzBdKS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgdG8gcnVuIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsaXplZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkluZm9ybWF0aW9uID0gbmV3IFdpemFyZE5hdmlnYXRpb25JbmZvcm1hdGlvbih0aGlzLCB0aGlzLndpemFyZEJ1aWxkZXIpO1xyXG4gICAgICAgIHRoaXMuc3RhZ2VzID0gdGhpcy53aXphcmRCdWlsZGVyLnN0YWdlcztcclxuICAgICAgICB0aGlzLmJhbm5lckl0ZW1zID0gdGhpcy53aXphcmRCdWlsZGVyLmJhbm5lckl0ZW1zO1xyXG4gICAgICAgIHRoaXMuaGVhZGluZyA9IHRoaXMud2l6YXJkQnVpbGRlci5oZWFkaW5nO1xyXG4gICAgICAgIHRoaXMuaGVhZGVyRGF0YSA9IHRoaXMud2l6YXJkQnVpbGRlci5oZWFkZXJEYXRhO1xyXG4gICAgICAgIHRoaXMuZXhpdEJ1dHRvblRpdGxlID0gdGhpcy53aXphcmRCdWlsZGVyLmV4aXRCdXR0b25UaXRsZTtcclxuICAgICAgICB0aGlzLmZpbmlzaEJ1dHRvblRpdGxlID0gdGhpcy53aXphcmRCdWlsZGVyLmZpbmlzaEJ1dHRvblRpdGxlO1xyXG4gICAgICAgIHRoaXMuZmluaXNoVmlldyA9IHRoaXMud2l6YXJkQnVpbGRlci5maW5pc2hWaWV3O1xyXG4gICAgICAgIHRoaXMuaGlkZVN0ZXBzTGlzdFNpZGVQYW5lID0gdGhpcy53aXphcmRCdWlsZGVyLmhpZGVTdGVwc0xpc3RTaWRlUGFuZTtcclxuICAgICAgICB0aGlzLnNob3dFeGl0Q29uZmlybWF0aW9uRGlhbG9nID0gdGhpcy53aXphcmRCdWlsZGVyLnNob3dFeGl0Q29uZmlybWF0aW9uRGlhbG9nO1xyXG4gICAgICAgIHRoaXMuaXNJblByZXZpZXcgPSB0aGlzLndpemFyZEJ1aWxkZXIuaXNJblByZXZpZXdTdGF0ZTtcclxuICAgICAgICB0aGlzLmNhbk5hdmlnYXRlVG9QcmV2aW91c1N0ZXAgPSB0aGlzLndpemFyZEJ1aWxkZXIuY2FuTmF2aWdhdGVUb1ByZXZpb3VzU3RlcDtcclxuICAgICAgICB0aGlzLnN0YWdlc0FycmF5SW5kZXggPSAwO1xyXG4gICAgICAgIHRoaXMuc3RlcEluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YWdlcykge1xyXG4gICAgICAgICAgICBMb2dnaW5nLmxvZ0Vycm9yKCdXaXphcmRDb21wb25lbnQubmdPbkluaXQnLCBgVGhlICdzdGFnZXMnIGFycmF5IGlzIG5vdCB2YWxpZCEuYCwge1xyXG4gICAgICAgICAgICAgICAgc3RlcHM6IHRoaXMuc3RhZ2VzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsKSB7XHJcbiAgICAgICAgICAgIExvZ2dpbmcubG9nRXJyb3IoJ1dpemFyZENvbXBvbmVudC5uZ09uSW5pdCcsIGBUaGUgJ21vZGVsJyBhdHRyaWJ1dGUgaXMgbm90IHZhbGlkLmAsIHtcclxuICAgICAgICAgICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy53aXphcmRJc0ZpbmlzaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhZ2UuYWN0aXZlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgZmlsbGVkTW9kZWwgPSB0aGlzLmludGVybmFsTW9kZWwgYXMgYW55O1xyXG4gICAgICAgIGlmIChmaWxsZWRNb2RlbC53aXphcmRJZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEud2l6YXJkSWQgPSBmaWxsZWRNb2RlbC53aXphcmRJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpbGxlZE1vZGVsLndpemFyZFR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLndpemFyZFR5cGUgPSBmaWxsZWRNb2RlbC53aXphcmRUeXBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uSW5mb3JtYXRpb24ucmVzZXRIaXN0b3J5KCk7XHJcbiAgICAgICAgLy8gdXBkYXRlIGhlcmUgZmlyc3QgdG8gZ2V0IHVwZGF0ZWQgdGVsZW1ldHJ5IGluZm9cclxuICAgICAgICB0aGlzLnVwZGF0ZVRlbGVtZXRyeVRhZ3MoKTtcclxuXHJcbiAgICAgICAgU21lV2ViVGVsZW1ldHJ5LnRyYWNlQWN0aW9uKG51bGwsIHsgY29udGVudDogdGhpcy53aXphcmRUZWxlbWV0cnlFdmVudEJsb2IsIGFjdGlvblR5cGU6IFRlbGVtZXRyeUFjdGlvblR5cGVzLkF1dG9tYXRpYyB9KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVRlbGVtZXRyeVRhZ3MoV2l6YXJkU3RhdGUuQWN0aXZlKTtcclxuXHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BhZ2VoaWRlJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50ZWxlbWV0cnlEYXRhLnN0YXRlICE9PSBXaXphcmRTdGF0ZS5GaW5pc2hlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gbWFudWFsbHkgc2V0IGF0IHRoaXMgcG9pbnQgYi9jIHZpZXcgaXMgZGVzdHJ1Y3RlZC5cclxuICAgICAgICAgICAgICAgIHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZSA9IFdpemFyZFN0YXRlLkV4aXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gYWN0aW9uVHlwZSBBIGZvciBBdXRvIChhY2NvcmRpbmcgdG8gQVdBIGRpY3Rpb25hcnkpIHRvIGRpZmZlcmVudGlhdGUgZnJvbSBDTFxyXG4gICAgICAgICAgICBTbWVXZWJUZWxlbWV0cnkudHJhY2VBY3Rpb24obnVsbCwgeyBjb250ZW50OiB0aGlzLndpemFyZFRlbGVtZXRyeUV2ZW50QmxvYiwgYWN0aW9uVHlwZTogVGVsZW1ldHJ5QWN0aW9uVHlwZXMuQXV0b21hdGljIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiBvciBjbG9zZSBzaWRlIHBhbmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHRvZ2dsZVBhbmUoKSB7XHJcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gIXRoaXMuaXNFeHBhbmRlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIGJhY2sgYnV0dG9uIGlzIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbkJhY2tDbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNob3dEaWFsb2dJZkJ1c3lPckp1c3RDb21wbGV0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhZ2UuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb3ZlVG9QcmV2aW91c1N0ZXAoKTtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c09uQWN0aXZlU3RlcCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgc2tpcCBidXR0b24gaXMgY2xpY2tlZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uU2tpcENsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2hvd0RpYWxvZ0lmQnVzeU9ySnVzdENvbXBsZXRlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZXN0b3JlTW9kZWxGb3JDdXJyZW50U3RlcCgpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vbkxhc3RTdGVwT2ZMYXN0U3RhZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmluaXNoTmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVOZXh0TmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBFeGl0IC8gRmluaXNoIGJ1dHRvbiBpcyBjbGlja2VkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25FeGl0Q2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0V4aXRDb25maXJtYXRpb25EaWFsb2cpIHtcclxuICAgICAgICAgICAgdGhpcy5hcHBDb250ZXh0LmZyYW1lLnNob3dEaWFsb2dDb25maXJtYXRpb24oPFJwY0RpYWxvZ0NvbmZpcm1hdGlvblJlcXVlc3Q+e1xyXG4gICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5ubyxcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLnllcyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuRXhpdC5EaWFsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLkV4aXQuRGlhbG9nLnRpdGxlXHJcbiAgICAgICAgICAgIH0pLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNvbmZpcm1lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhpdC5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhpdC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCB0aGF0IGhhbmRsZXMgY29tcGxldGlvbiBvZiB0aGUgd2l6YXJkLFxyXG4gICAgICogYW5kIHJlbmRlcnMgdGhlIGZpbmlzaFZpZXcgaWYgcHJvdmlkZWQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaGFuZGxlRmluaXNoTmF2aWdhdGlvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbXBsZXRlQ3VycmVudFN0ZXAoKTtcclxuICAgICAgICB0aGlzLmNvbXBsZXRlQ3VycmVudFN0YWdlKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUZWxlbWV0cnlUYWdzKFdpemFyZFN0YXRlLkZpbmlzaGVkKTtcclxuXHJcbiAgICAgICAgdGhpcy5maW5pc2hlZC5lbWl0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZmluaXNoVmlldykge1xyXG4gICAgICAgICAgICB0aGlzLndpemFyZElzRmluaXNoZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jbGVhbkNvbXBvbmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFR5cGUgPSB0aGlzLmZpbmlzaFZpZXcuZHluYW1pY1N0ZXBDb21wb25lbnQ7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ29tcG9uZW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIG5leHQgYnV0dG9uIGlzIGNsaWNrZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbk5leHRDbGljaygpOiB2b2lkIHtcclxuICAgICAgICAvLyBpZiBmaW5pc2hpbmdcclxuICAgICAgICBpZiAodGhpcy5vbkxhc3RTdGVwT2ZMYXN0U3RhZ2UpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTdGVwLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJ1blN0ZXBWYWxpZGF0aW9uKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZpbmlzaE5hdmlnYXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50U3RlcC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5TdGVwVmFsaWRhdGlvbigpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVOZXh0TmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc3RlcFN1Ym1pdHRlZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCB0aGF0IHZhbGlkYXRlcyBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJ1blN0ZXBWYWxpZGF0aW9uKCkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC52YWxpZGF0ZSgpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAodmFsaWRhdGlvblJlc3VsdDogV2l6YXJkU3RlcFZhbGlkYXRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmlzVmFsaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vbkxhc3RTdGVwT2ZMYXN0U3RhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaW5pc2hOYXZpZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVOZXh0TmF2aWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWlsQ3VycmVudFN0ZXAoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ZXBJbnZhbGlkYXRlZC5lbWl0KHZhbGlkYXRpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCB0aGF0IGhhbmRsZXMgaW5kZXhlcyBhbmRcclxuICAgICAqIHN0ZXAgYW5kIHN0YWdlIGNvbXBsZXRpb24gZm9yIHRoZSBOZXh0IGJ1dHRvbi5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBoYW5kbGVOZXh0TmF2aWdhdGlvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbXBsZXRlQ3VycmVudFN0ZXAoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub25MYXN0U3RlcE9mU3RhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZUN1cnJlbnRTdGFnZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1vdmVUb05leHRTdGVwKCk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhZ2UuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZvY3VzT25BY3RpdmVTdGVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93UHJldmlvdXNTdGVwRGlhbG9nKCkge1xyXG4gICAgICAgIHRoaXMuYXBwQ29udGV4dC5mcmFtZS5zaG93RGlhbG9nTWVzc2FnZSg8UnBjRGlhbG9nTWVzc2FnZVJlcXVlc3Q+e1xyXG4gICAgICAgICAgICBidXR0b25UZXh0OiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQ29tbW9uLk9LLmFmZmlybWF0aXZlLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLlByZXZpb3VzU3RlcC5EaWFsb2cubWVzc2FnZSxcclxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuUHJldmlvdXNTdGVwLkRpYWxvZy50aXRsZVxyXG4gICAgICAgIH0pLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93RGlhbG9nSWZCdXN5T3JKdXN0Q29tcGxldGUob25Db25maXJtYXRpb25DYWxsYmFjazogKCkgPT4gdm9pZCkge1xyXG4gICAgICAgIGNvbnN0IGlzQnVzeSA9IHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuaXNCdXN5O1xyXG4gICAgICAgIGNvbnN0IGJ1c3lNZXNzYWdlID0gdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5idXN5TWVzc2FnZTtcclxuICAgICAgICBpZiAoaXNCdXN5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwQ29udGV4dC5mcmFtZS5zaG93RGlhbG9nQ29uZmlybWF0aW9uKDxScGNEaWFsb2dDb25maXJtYXRpb25SZXF1ZXN0PntcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24ubm8sXHJcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi55ZXMsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBidXN5TWVzc2FnZSA/IGJ1c3lNZXNzYWdlIDogdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5CdXN5LkRpYWxvZy5tZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuQnVzeS5EaWFsb2cudGl0bGVcclxuICAgICAgICAgICAgfSkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb25maXJtZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25Db25maXJtYXRpb25DYWxsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9uQ29uZmlybWF0aW9uQ2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIGEgc3RhZ2UgaXMgY2xpY2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY2xpY2tlZFN0ZXBJbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgY2xpY2tlZCBzdGFnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uU3RhZ2VDbGljayhjbGlja2VkU3RhZ2VJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0U3RhZ2UgPSB0aGlzLnN0YWdlc1tjbGlja2VkU3RhZ2VJbmRleF07XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbk5hdmlnYXRlVG9QcmV2aW91c1N0ZXAgJiYgY2xpY2tlZFN0YWdlSW5kZXggPD0gdGhpcy5zdGFnZUluZGV4KSB7XHJcbiAgICAgICAgICAgIC8vIHNob3cgZGlhbG9nIHdoZW4gb25seSBjbGlja2luZyBhIHByZXZpb3VzIHN0YWdlXHJcbiAgICAgICAgICAgIGlmICh0YXJnZXRTdGFnZS5jb21wbGV0ZWQgJiYgdGhpcy5zdGFnZUluZGV4ICE9PSBjbGlja2VkU3RhZ2VJbmRleCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UHJldmlvdXNTdGVwRGlhbG9nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFN0YWdlLmNvbXBsZXRlZCB8fCB0YXJnZXRTdGFnZS5hY3RpdmUpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93RGlhbG9nSWZCdXN5T3JKdXN0Q29tcGxldGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFnZUluZGV4ID0gY2xpY2tlZFN0YWdlSW5kZXg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRTdGVwQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFnZXNbdGhpcy5zdGFnZUluZGV4XS5jb21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YWdlSW5kZXggKyAxOyBpIDwgdGhpcy5zdGFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWdlc1tpXS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWdlc1tpXS5jb21wbGV0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCBjYWxsZWQgd2hlbiBhIHN0ZXAgaXMgY2xpY2tlZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY2xpY2tlZFN0ZXBJbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgY2xpY2tlZCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25TdGVwQ2xpY2soY2xpY2tlZFN0ZXBJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc3RlcElzQWN0aXZlID0gdGhpcy5zdGVwSW5kZXggPT09IGNsaWNrZWRTdGVwSW5kZXg7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0U3RlcCA9IHRoaXMuY3VycmVudFN0YWdlLnN0ZXBzW2NsaWNrZWRTdGVwSW5kZXhdO1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5OYXZpZ2F0ZVRvUHJldmlvdXNTdGVwICYmIGNsaWNrZWRTdGVwSW5kZXggPD0gdGhpcy5zdGVwSW5kZXgpIHtcclxuICAgICAgICAgICAgLy8gc2hvdyBkaWFsb2cgd2hlbiBvbmx5IGNsaWNraW5nIGEgcHJldmlvdXMgc3RlcFxyXG4gICAgICAgICAgICBpZiAoIXN0ZXBJc0FjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UHJldmlvdXNTdGVwRGlhbG9nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0U3RlcCAmJiAhc3RlcElzQWN0aXZlICYmICh0YXJnZXRTdGVwLmNvbXBsZXRlZCB8fCB0YXJnZXRTdGVwLmRpc2FibGVkKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RGlhbG9nSWZCdXN5T3JKdXN0Q29tcGxldGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ZXBJbmRleCA9IGNsaWNrZWRTdGVwSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0U3RlcENoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBjcmVhdGVDb21wb25lbnQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCh0aGlzLmN1cnJlbnRTdGVwIHx8IHRoaXMuZmluaXNoU3RlcCkgJiYgKCF0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50KSkge1xyXG4gICAgICAgICAgICBzdXBlci5jcmVhdGVDb21wb25lbnQoKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcFJ4anNMaWZldGltZSA9IG5ldyBSeGpzTGlmZXRpbWVNYW5hZ2VyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBSeGpzTGlmZXRpbWUuYWRkU3Vic2NyaXB0aW9ucyhcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXBDb21wb25lbnQuc3VibWl0dGVkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uTmV4dENsaWNrKCkpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcENvbXBvbmVudC5tb2RlbENoYW5nZWQuc3Vic2NyaWJlKG5ld1ZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVybmFsTW9kZWwgPSBuZXdWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwQ29tcG9uZW50Lm9uV2l6YXJkTW9kZWxDaGFuZ2VkKHRoaXMubW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY2xlYW5Db21wb25lbnQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIuY2xlYW5Db21wb25lbnQoKTtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcFJ4anNMaWZldGltZSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGVwUnhqc0xpZmV0aW1lLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcFJ4anNMaWZldGltZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2F2ZXMgdGhlIHN0YXRlIG9mIHRoZSBtb2RlbCBhdCB0aGUgYmVnaW5uaW5nXHJcbiAgICAgKiBvZiB0aGUgY3VycmVudCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHByZXNlcnZlTW9kZWxGb3JDdXJyZW50U3RlcCgpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGVwTW9kZWxDb3B5ID0gTXNmdFNtZS5kZWVwQ29weSh0aGlzLmludGVybmFsTW9kZWwgfHwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzZXRzIHRoZSBtb2RlbCBiYWNrIHRvIHRoZSBzdGF0ZSBhdCB0aGVcclxuICAgICAqIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBzdGVwLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlc3RvcmVNb2RlbEZvckN1cnJlbnRTdGVwKCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLmN1cnJlbnRTdGVwTW9kZWxDb3B5O1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN0ZXBNb2RlbENvcHkgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZW1pdFN0ZXBDaGFuZ2VkKCkge1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLm5hdmlnYXRpb25JbmZvcm1hdGlvbi5wdXNoSGlzdG9yeSh7IHN0YWdlOiB0aGlzLnN0YWdlSW5kZXgsIHN0ZXA6IHRoaXMuc3RlcEluZGV4IH0pO1xyXG5cclxuICAgICAgICAvLyBlbWl0IG9ubHkgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZS5cclxuICAgICAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRlbGVtZXRyeVRhZ3MoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RlcENoYW5nZWQuZW1pdCh7XHJcbiAgICAgICAgICAgICAgICBzdGFnZUluZGV4OiB0aGlzLnN0YWdlSW5kZXgsXHJcbiAgICAgICAgICAgICAgICBzdGFnZU5hbWU6IHRoaXMuY3VycmVudFN0YWdlID8gdGhpcy5jdXJyZW50U3RhZ2UubmFtZSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzdGVwSW5kZXg6IHRoaXMuc3RlcEluZGV4LFxyXG4gICAgICAgICAgICAgICAgc3RlcE5hbWU6IHRoaXMuY3VycmVudFN0ZXAgPyB0aGlzLmN1cnJlbnRTdGVwLm5hbWUgOiBudWxsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSB0ZWxlbWV0cnkgc3RyaW5nIHVzZWQgdG8gcG9wdWxhdGUgdGVsZW1ldHJ5IGFjdGlvbiBldmVudHMuIFVwZGF0ZXMgd2l6YXJkIHN0YXRlLCBzdGVwIGluZGV4LCBhbmQgdGltZSBzdGVwIGluZGV4IHN0YXJ0ZWQuXHJcbiAgICAgKiBTdGVwIGluZGV4IHN0YXJ0IHRpbWUgc2hvdWxkIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBldmVudCB0aW1lc3RhbXAgdG8gbW9yZSBlYXNpbHkgY2FsY3VsYXRlIHRpbWUgc3BlbnQgaW4gc3RhZ2UuXHJcbiAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIHN0YXRlIHRvIGNoYW5nZSB0bywgaWYgcHJvdmlkZWQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdXBkYXRlVGVsZW1ldHJ5VGFncyhzdGF0ZT86IFdpemFyZFN0YXRlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50ZWxlbWV0cnlEYXRhLnN0YXRlID0gc3RhdGUgPyBzdGF0ZSA6IHRoaXMudGVsZW1ldHJ5RGF0YS5zdGF0ZTtcclxuICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEuc3RlcEluZGV4TnVtYmVyID0gYCR7dGhpcy5zdGFnZUluZGV4ICsgMX0uJHt0aGlzLnN0ZXBJbmRleCArIDF9YDtcclxuICAgICAgICB0aGlzLnRlbGVtZXRyeURhdGEuc3RlcE5hbWUgPSBgJHt0aGlzLmN1cnJlbnRTdGFnZS5uYW1lfS4ke3RoaXMuY3VycmVudFN0ZXAubmFtZX1gO1xyXG4gICAgICAgIHRoaXMudGVsZW1ldHJ5RGF0YS5zdGVwSW5kZXhTdGFydFRpbWUgPSAobmV3IERhdGUoKSkudG9JU09TdHJpbmcoKTsgLy8ga2VlcCBzYW1lIGZvcm1hdCBhcyBldmVudCB0aW1lc3RhbXBcclxuXHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInNtZS13aXphcmQgc21lLWxheW91dC1hYnNvbHV0ZS1waG9uZS11cCBzbWUtYXJyYW5nZS1zdGFjay12IHNtZS1wb3NpdGlvbi1pbnNldC1ub25lXCI+XHJcbiAgPCEtLSBIZWFkaW5nLCBjYW4gZWl0aGVyIHVzZSB0aGUgbGVnYWN5IGhlYWRlciBvciB0aGUgc21lLWhlYWRlciBmb3IgYWR2YW5jZWQgZmVhdHVyZSAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiaGVhZGluZyAmJiAhd2l6YXJkSXNGaW5pc2hlZCAmJiAhaGVhZGVyRGF0YVwiIFthdHRyLmFyaWEtcmVhZG9ubHldPXRydWVcclxuICAgIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staCBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1wYWRkaW5nLXZlcnRpY2FsLXNtIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbGcgc21lLWJvcmRlci1ib3R0b20tc20gc21lLWJvcmRlci1ib3R0b20tY29sb3ItYmFzZS04MFwiPlxyXG4gICAgPGgzIGlkPVwic21lLXNoZWxsLXdpemFyZC1oZWFkaW5nLWlkXCI+e3sgaGVhZGluZyB9fTwvaDM+XHJcbiAgICA8c21lLWJhZGdlIHR5cGU9XCJwcmV2aWV3XCIgKm5nSWY9XCJpc0luUHJldmlld1wiIGNsYXNzPVwic21lLW1hcmdpbi1sZWZ0LXhzXCI+PC9zbWUtYmFkZ2U+XHJcbiAgPC9kaXY+XHJcbiAgPHNtZS1oZWFkZXIgKm5nSWY9XCIhd2l6YXJkSXNGaW5pc2hlZCAmJiBoZWFkZXJEYXRhICYmICFoZWFkaW5nXCJcclxuICAgIFt0ZXh0XT1cImhlYWRlckRhdGEudGV4dFwiIFtzbWVJY29uQ2xhc3NOYW1lXT1cImhlYWRlckRhdGEuc21lSWNvbkNsYXNzTmFtZVwiIFtzdWJ0aXRsZV09XCJoZWFkZXJEYXRhLnN1YnRpdGxlXCI+XHJcbiAgICA8c21lLWJhZGdlICpuZ0lmPVwiaXNJblByZXZpZXdcIiB0eXBlPVwicHJldmlld1wiPjwvc21lLWJhZGdlPlxyXG4gIDwvc21lLWhlYWRlcj5cclxuICA8ZGl2ICpuZ0lmPVwic2hvd1dpemFyZEJhbm5lclwiPlxyXG4gICAgPHNtZS1iYW5uZXIgW2l0ZW1zXT1cImJhbm5lckl0ZW1zXCI+PC9zbWUtYmFubmVyPlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gU3RhZ2VzIC0tPlxyXG4gIDxkaXYgcm9sZT1cInRhYmxpc3RcIiAqbmdJZj1cIiF3aXphcmRJc0ZpbmlzaGVkXCJcclxuICAgIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staCBzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbGcgc21lLWJvcmRlci1ib3R0b20tc20gc21lLWJvcmRlci1ib3R0b20tY29sb3ItYmFzZS04MCBzbWUtZm9jdXMtem9uZSBzbWUtYXJyYW5nZS1vdmVyZmxvdy1hdXRvLXhcIj5cclxuICAgIDxidXR0b24gKm5nRm9yPVwibGV0IHN0YWdlIG9mIHN0YWdlczsgbGV0IHZhbCA9IGluZGV4XCJcclxuICAgICAgW3RpdGxlXT1cInN0YWdlLm5hbWVcIlxyXG4gICAgICByb2xlPVwidGFiXCIgdGFiaW5kZXg9XCIwXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJzdGFnZS5uYW1lXCIgYXJpYS1saXZlPVwicG9saXRlXCIgdHlwZT1cImJ1dHRvblwiIFtzbWVUZWxlbWV0cnlEYXRhQmxvYl09XCJ0ZWxlbWV0cnlEYXRhXCIgW3NtZVRlbGVtZXRyeUlkXT1cIid3aXphcmRTdGFnZScgKyAodmFsICsgMSlcIlxyXG4gICAgICBbY2xhc3Muc21lLWFjdGl2ZV09XCJ2YWwgPT09IHN0YWdlc0FycmF5SW5kZXhcIlxyXG4gICAgICBbY2xhc3Muc21lLXNlbGVjdGVkXT1cInZhbCA9PT0gc3RhZ2VzQXJyYXlJbmRleFwiXHJcbiAgICAgIFtjbGFzcy5hcmlhLXNlbGVjdGVkXT1cInZhbCA9PT0gc3RhZ2VzQXJyYXlJbmRleFwiXHJcbiAgICAgIFtjbGFzcy5zbWUtd2l6YXJkLXN0YWdlLWZvY3VzXT1cInZhbCA9PT0gc3RhZ2VzQXJyYXlJbmRleFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJ0aGlzLnN0YWdlSW5kZXhEaXNhYmxlZChzdGFnZSwgdmFsKVwiIFtzbWVUZWxlbWV0cnlEaXNhYmxlRWxlbWVudF0gPSBcInRoaXMuc3RhZ2VJbmRleERpc2FibGVkKHN0YWdlLCB2YWwpXCJcclxuICAgICAgY2xhc3M9XCJzbWUtd2l6YXJkLXN0YWdlIHNtZS1idXR0b24tdHJpZ2dlciBzbWUtd2l6YXJkLWJ1dHRvbi1pdGVtIHNtZS1wYWRkaW5nLXZlcnRpY2FsLXNtIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbm9uZSBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLW1hcmdpbi1yaWdodC1tZFwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsnc21lLXdpemFyZC1zdGFnZS1jb21wbGV0ZWQnOiBzdGFnZS5jb21wbGV0ZWQsICdzbWUtd2l6YXJkLXN0YWdlLWNsaWNrZWQnOiB2YWwgPT09IHN0YWdlc0FycmF5SW5kZXgsICdzbWUtd2l6YXJkLXN0YWdlLWFjdGl2ZSc6IHN0YWdlLmFjdGl2ZX1cIlxyXG4gICAgICAoY2xpY2spPVwib25TdGFnZUNsaWNrKHZhbClcIj5cclxuICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieydzbWUtaWNvbiBzbWUtaWNvbi1hY2NlcHQgc21lLWljb24tc2l6ZS14eHMnOiBzdGFnZS5jb21wbGV0ZWR9XCJcclxuICAgICAgICBjbGFzcz1cInNtZS13aXphcmQtc3RhZ2UtaW5kZXggc21lLXBvc2l0aW9uLWZsZXgtbm9uZVwiPlxyXG4gICAgICAgIHt7ICFzdGFnZS5jb21wbGV0ZWQgPyB2YWwgKyAxIDogJycgfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8c3BhbiBbbmdDbGFzc109XCJ7J3NtZS1mb250LWVtcGhhc2lzMSBzbWUtd2l6YXJkLXN0YWdlLWFjdGl2ZSc6IHZhbCA9PT0gc3RhZ2VzQXJyYXlJbmRleCB8fCBzdGFnZS5hY3RpdmUsXHJcbiAgICAgICAgICAnc21lLXdpemFyZC1zdGFnZS1jb21wbGV0ZWQnOiBzdGFnZS5jb21wbGV0ZWQsXHJcbiAgICAgICAgICAnc21lLW1hcmdpbi1sZWZ0LXhzJzogIXN0YWdlLmNvbXBsZXRlZCxcclxuICAgICAgICAgICdzbWUtbGF5b3V0LW5vbmUnOiAhc2hvdWxkUmVuZGVyVGV4dE9uU3RlcHN9XCJcclxuICAgICAgICBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LWF1dG8gc21lLWZvbnQtYm9keSBzbWUtYXJyYW5nZS1lbGxpcHNpc1wiPlxyXG4gICAgICAgIHt7IHN0YWdlLm5hbWUgfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1hcnJhbmdlLW92ZXJmbG93LWF1dG8gc21lLXBvc2l0aW9uLWZsZXgtYXV0byBzbWUtd2l6YXJkLWNvbnRlbnQtY29udGFpbmVyXCIgW2NsYXNzLnNtZS13aXphcmQtbm8tbGVmdC1wYW5lXT1cImhpZGVTdGVwc0xpc3RTaWRlUGFuZVwiPlxyXG4gICAgPGRpdiAqbmdJZj1cIiF3aXphcmRJc0ZpbmlzaGVkICYmICFoaWRlU3RlcHNMaXN0U2lkZVBhbmVcIlxyXG4gICAgICBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLXYgc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtZm9jdXMtem9uZSBzbWUtYm9yZGVyLXJpZ2h0LXNtIHNtZS1ib3JkZXItcmlnaHQtY29sb3ItYmFzZS04MCBzbWUtd2l6YXJkLWxlZnQtcGFuZVwiPlxyXG4gICAgICA8ZGl2IHJvbGU9XCJ0YWJsaXN0XCIgKm5nSWY9XCIhd2l6YXJkSXNGaW5pc2hlZCAmJiAhaGlkZVN0ZXBzTGlzdFNpZGVQYW5lXCJcclxuICAgICAgICBjbGFzcz1cInNtZS1wYWRkaW5nLXZlcnRpY2FsLXNtIHNtZS1wb3NpdGlvbi1mbGV4LWF1dG9cIiBbbmdDbGFzc109XCJ7J3NtZS13aXphcmQtbGVmdC1wYW5lLW1pbi13aWR0aC1leHBhbmRlZCc6IGlzRXhwYW5kZWR9XCI+XHJcbiAgICAgICAgPGJ1dHRvbiByb2xlPVwidGFiXCIgKm5nRm9yPVwibGV0IHN0ZXAgb2YgZ2V0U3RlcHNGb3JTdGFnZSgpOyBsZXQgaW5kZXggPSBpbmRleFwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgW25nQ2xhc3NdPVwieydzbWUtc3RlcC1hY3RpdmUgc21lLXNjaGVtZS1uYXYtbGlzdC1pdGVtIHNtZS1hY3RpdmUgc21lLWNvbG9yLWJhc2UtNSc6IGluZGV4ID09PSBzdGVwSW5kZXh9XCJcclxuICAgICAgICAgIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staCBzbWUtd2l6YXJkLXN0ZXAgc21lLWJ1dHRvbi10cmlnZ2VyIHNtZS13aXphcmQtYnV0dG9uLWl0ZW0gc21lLXBhZGRpbmctaG9yaXpvbnRhbC1ub25lXHJcbiAgICAgICAgICBzbWUtcG9zaXRpb24tc3RyZXRjaC1oIHNtZS1wYWRkaW5nLXZlcnRpY2FsLXhzIHNtZS1idXR0b24tYXV0by13aWR0aCBzbWUtcGFkZGluZy1sZWZ0LWxnIHNtZS1wYWRkaW5nLXJpZ2h0LXhzXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJ0aGlzLnN0ZXBJbmRleERpc2FibGVkKHN0ZXAsIGluZGV4KVwiIFtzbWVUZWxlbWV0cnlEaXNhYmxlRWxlbWVudF09XCJ0aGlzLnN0ZXBJbmRleERpc2FibGVkKHN0ZXAsIGluZGV4KVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib25TdGVwQ2xpY2soaW5kZXgpXCJcclxuICAgICAgICAgIFtzbWVUZWxlbWV0cnlEYXRhQmxvYl09XCJ0ZWxlbWV0cnlEYXRhXCIgW3NtZVRlbGVtZXRyeUlkXT1cIid3aXphcmRTdGVwJyArIChpbmRleCArIDEpXCJcclxuICAgICAgICAgIFt0aXRsZV09XCJpc0V4cGFuZGVkID8gbnVsbCA6IHN0ZXAubmFtZVwiXHJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImlzRXhwYW5kZWQgPyBudWxsIDogc3RlcC5uYW1lXCIgYXJpYS1saXZlPVwicG9saXRlXCIgPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1wb3NpdGlvbi1mbGV4LWdyb3ctc3RhcnQgIHNtZS1tYXJnaW4tcmlnaHQteHNcIj57eyBzdGFnZXNBcnJheUluZGV4ICsgMSB9fS57eyBpbmRleCArIDEgfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LWF1dG8gc21lLXBvc2l0aW9uLWZsZXgtZ3Jvdy1zdGFydCBzbWUtYXJyYW5nZS1lbGxpcHNpc1wiICpuZ0lmPVwiaXNFeHBhbmRlZFwiPnt7IHN0ZXAubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1mb2N1cy16b25lXCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJzcGxpdC12aWV3LXRvZ2dsZSBzbWUtYnV0dG9uLXRyaWdnZXIgc21lLWJ1dHRvbi1hdXRvLXdpZHRoIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWxheW91dC1mbG9hdC1yaWdodFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGFuZSgpXCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0V4cGFuZGVkXCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXNFeHBhbmRlZCA/IHN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuV2l6YXJkLmNvbGxhcHNlU3RlcHNMaXN0IDogc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuZXhwYW5kU3RlcHNMaXN0XCJcclxuICAgICAgICAgIFt0aXRsZV09XCJpc0V4cGFuZGVkID8gc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5XaXphcmQuY29sbGFwc2VTdGVwc0xpc3QgOiBzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLldpemFyZC5leHBhbmRTdGVwc0xpc3RcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb25cIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzbWUtaWNvbi1jaGV2cm9uTGVmdCc6IGlzRXhwYW5kZWQsICdzbWUtaWNvbi1jaGV2cm9uUmlnaHQnOiAhaXNFeHBhbmRlZCB9XCI+PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gU3RlcCBjb250ZW50IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInNtZS1mb2N1cy16b25lIHNtZS1sYXlvdXQtcmVsYXRpdmUgc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0byBzbWUtd2l6YXJkLWNvbnRlbnQtcGFuZVwiIFtjbGFzcy5zbWUtd2l6YXJkLW5vLWxlZnQtcGFuZV09XCJoaWRlU3RlcHNMaXN0U2lkZVBhbmVcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7J3NtZS1wYWRkaW5nLWluc2V0LWxnJzogY3VycmVudFN0ZXBDb21wb25lbnQucGFkQ29udGVudHN9XCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50U3RlcENvbXBvbmVudC5kaXNhYmxlZFwiPlxyXG4gICAgICAgIDxzbWUtcGFnZS1hbGVydC1iYXIgW2FsZXJ0XT1cImFsZXJ0XCI+PC9zbWUtcGFnZS1hbGVydC1iYXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIERvbid0IHJlbW92ZSB0aGlzIGxpbmUhIC0tPlxyXG4gICAgICA8IS0tIFRoZSBkeW5hbWljYWxseSByZW5kZXJlZCBjb21wb25lbnQgbG9va3MgZm9yICNjb250YWluZXIgdG8gcmVuZGVyIGl0c2VsZiBhcyB0aGUgc2libGluZy4hIC0tPlxyXG4gICAgICA8ZGl2IGlkPVwiZHluYW1pYy1jb250ZW50LWNvbnRhaW5lclwiICNjb250YWluZXI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBGb290ZXIgLS0+XHJcbiAgPGRpdiAjd2l6YXJkRm9vdGVyICpuZ0lmPVwiIXdpemFyZElzRmluaXNoZWRcIlxyXG4gICAgY2xhc3M9XCJzbWUtbGF5b3V0LXJlbGF0aXZlIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLWJvcmRlci10b3Atc20gc21lLWJvcmRlci10b3AtY29sb3ItYmFzZS04MCBzbWUtcGFkZGluZy12ZXJ0aWNhbC1zbSBzbWUtcGFkZGluZy1ob3Jpem9udGFsLWxnIHNtZS1mb2N1cy16b25lXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic21lLWxheW91dC1mbG9hdC1sZWZ0XCIgW2NsYXNzLnNtZS1wYWRkaW5nLXJpZ2h0LXhsXT1cIiF2YWxpZGF0aW5nXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJzbWUtZm9jdXMtem9uZVwiIHR5cGU9XCJidXR0b25cIiBzbWVUZWxlbWV0cnlJZD1cIndpemFyZFByZXZcIiBbc21lVGVsZW1ldHJ5RGF0YUJsb2JdPVwidGVsZW1ldHJ5RGF0YVwiIChjbGljayk9XCJvbkJhY2tDbGljaygpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVCYWNrQnV0dG9uXCJcclxuICAgICAgICBbY2xhc3Muc21lLWxheW91dC1ub25lXT1cIiFjYW5OYXZpZ2F0ZVRvUHJldmlvdXNTdGVwXCI+e3tzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5iYWNrfX08L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJzbWUtZm9jdXMtem9uZSBzbWUtYnV0dG9uLXByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgc21lVGVsZW1ldHJ5SWQ9XCJ3aXphcmROZXh0XCIgW3NtZVRlbGVtZXRyeURhdGFCbG9iXT1cInRlbGVtZXRyeURhdGFcIiAoY2xpY2spPVwib25OZXh0Q2xpY2soKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVOZXh0QnV0dG9uXCIgW3NtZVRlbGVtZXRyeURpc2FibGVFbGVtZW50XT1cImRpc2FibGVOZXh0QnV0dG9uXCI+e3sgbmV4dEJ1dHRvblRleHQoKSB9fTwvYnV0dG9uPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwidmFsaWRhdGluZ1wiIGNsYXNzPVwic21lLWxheW91dC1yZWxhdGl2ZSBzbWUtbGF5b3V0LWZsb2F0LXJpZ2h0IHNtZS1wYWRkaW5nLWxlZnQteGwgc21lLXBhZGRpbmctdG9wLW1kXCI+XHJcbiAgICAgICAgPHNtZS1sb2FkaW5nLXdoZWVsIHNpemU9XCJzbWFsbFwiPjwvc21lLWxvYWRpbmctd2hlZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwic21lLWZvY3VzLXpvbmVcIiB0eXBlPVwiYnV0dG9uXCIgc21lVGVsZW1ldHJ5SWQ9XCJ3aXphcmRTa2lwXCIgW3NtZVRlbGVtZXRyeURhdGFCbG9iXT1cInRlbGVtZXRyeURhdGFcIiAoY2xpY2spPVwib25Ta2lwQ2xpY2soKVwiXHJcbiAgICAgIFtjbGFzcy5zbWUtbGF5b3V0LW5vbmVdPVwiIXNob3dTa2lwQnV0dG9uXCI+e3tzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkNvbW1vbi5za2lwfX08L2J1dHRvbj5cclxuICAgIDxidXR0b24gI2V4aXRCdXR0b24gY2xhc3M9XCJzbWUtZm9jdXMtem9uZSBzbWUtbGF5b3V0LWZsb2F0LXJpZ2h0XCIgdHlwZT1cImJ1dHRvblwiIHNtZVRlbGVtZXRyeUlkPVwid2l6YXJkRXhpdFwiIFtzbWVUZWxlbWV0cnlEYXRhQmxvYl09XCJ0ZWxlbWV0cnlEYXRhXCJcclxuICAgICAgKGNsaWNrKT1cIm9uRXhpdENsaWNrKClcIj57eyBleGl0QnV0dG9uVGV4dCgpIH19PC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|