@hmcts/ccd-case-ui-toolkit 7.2.15-multiple-followup → 7.2.15

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.
Files changed (34) hide show
  1. package/esm2022/lib/app.config.mjs +1 -3
  2. package/esm2022/lib/shared/components/palette/palette.module.mjs +10 -5
  3. package/esm2022/lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.mjs +142 -87
  4. package/esm2022/lib/shared/components/palette/query-management/components/query-details/query-details.component.mjs +8 -52
  5. package/esm2022/lib/shared/components/palette/query-management/components/query-write/query-write-respond-to-query/query-write-respond-to-query.component.mjs +3 -2
  6. package/esm2022/lib/shared/components/palette/query-management/enums/query-item-response-status.enum.mjs +1 -2
  7. package/esm2022/lib/shared/components/palette/query-management/models/case-queries-collection.model.mjs +1 -1
  8. package/esm2022/lib/shared/components/palette/query-management/models/query-list/query-list-item/query-list-item.model.mjs +2 -22
  9. package/esm2022/lib/shared/components/palette/query-management/read-query-management-field.component.mjs +22 -74
  10. package/esm2022/lib/shared/components/palette/query-management/utils/query-management.utils.mjs +3 -12
  11. package/esm2022/lib/shared/utils.mjs +1 -1
  12. package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs +205 -266
  13. package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
  14. package/lib/app.config.d.ts +0 -3
  15. package/lib/app.config.d.ts.map +1 -1
  16. package/lib/shared/components/palette/palette.module.d.ts +2 -1
  17. package/lib/shared/components/palette/palette.module.d.ts.map +1 -1
  18. package/lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.d.ts +5 -2
  19. package/lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.d.ts.map +1 -1
  20. package/lib/shared/components/palette/query-management/components/query-details/query-details.component.d.ts +3 -15
  21. package/lib/shared/components/palette/query-management/components/query-details/query-details.component.d.ts.map +1 -1
  22. package/lib/shared/components/palette/query-management/components/query-write/query-write-respond-to-query/query-write-respond-to-query.component.d.ts.map +1 -1
  23. package/lib/shared/components/palette/query-management/enums/query-item-response-status.enum.d.ts +1 -2
  24. package/lib/shared/components/palette/query-management/enums/query-item-response-status.enum.d.ts.map +1 -1
  25. package/lib/shared/components/palette/query-management/models/case-queries-collection.model.d.ts +0 -2
  26. package/lib/shared/components/palette/query-management/models/case-queries-collection.model.d.ts.map +1 -1
  27. package/lib/shared/components/palette/query-management/models/query-list/query-list-item/query-list-item.model.d.ts +0 -2
  28. package/lib/shared/components/palette/query-management/models/query-list/query-list-item/query-list-item.model.d.ts.map +1 -1
  29. package/lib/shared/components/palette/query-management/read-query-management-field.component.d.ts +3 -16
  30. package/lib/shared/components/palette/query-management/read-query-management-field.component.d.ts.map +1 -1
  31. package/lib/shared/components/palette/query-management/utils/query-management.utils.d.ts +1 -1
  32. package/lib/shared/components/palette/query-management/utils/query-management.utils.d.ts.map +1 -1
  33. package/lib/shared/utils.d.ts +1 -1
  34. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { FormGroup } from '@angular/forms';
3
3
  import { ActivatedRoute, Router } from '@angular/router';
4
+ import { Subject } from 'rxjs';
4
5
  import { switchMap, take } from 'rxjs/operators';
5
6
  import { CaseEventTrigger } from '../../../../../../../lib/shared/domain';
6
7
  import { SessionStorageService } from '../../../../../services';
@@ -15,7 +16,7 @@ import * as i2 from "../../../../case-editor/services";
15
16
  import * as i3 from "../../../../../services";
16
17
  import * as i4 from "../../services/qualifying-question.service";
17
18
  function QueryCheckYourAnswersComponent_div_0_div_2_li_6_Template(rf, ctx) { if (rf & 1) {
18
- i0.ɵɵelementStart(0, "li")(1, "a", 26);
19
+ i0.ɵɵelementStart(0, "li")(1, "a", 28);
19
20
  i0.ɵɵtext(2);
20
21
  i0.ɵɵpipe(3, "rpxTranslate");
21
22
  i0.ɵɵelementEnd()();
@@ -27,12 +28,12 @@ function QueryCheckYourAnswersComponent_div_0_div_2_li_6_Template(rf, ctx) { if
27
28
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 2, errorMessage_r2.description));
28
29
  } }
29
30
  function QueryCheckYourAnswersComponent_div_0_div_2_Template(rf, ctx) { if (rf & 1) {
30
- i0.ɵɵelementStart(0, "div", 21)(1, "h2", 22);
31
+ i0.ɵɵelementStart(0, "div", 23)(1, "h2", 24);
31
32
  i0.ɵɵtext(2);
32
33
  i0.ɵɵpipe(3, "rpxTranslate");
33
34
  i0.ɵɵelementEnd();
34
- i0.ɵɵelementStart(4, "div", 23)(5, "ul", 24);
35
- i0.ɵɵtemplate(6, QueryCheckYourAnswersComponent_div_0_div_2_li_6_Template, 4, 4, "li", 25);
35
+ i0.ɵɵelementStart(4, "div", 25)(5, "ul", 26);
36
+ i0.ɵɵtemplate(6, QueryCheckYourAnswersComponent_div_0_div_2_li_6_Template, 4, 4, "li", 27);
36
37
  i0.ɵɵelementEnd()()();
37
38
  } if (rf & 2) {
38
39
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -41,9 +42,43 @@ function QueryCheckYourAnswersComponent_div_0_div_2_Template(rf, ctx) { if (rf &
41
42
  i0.ɵɵadvance(4);
42
43
  i0.ɵɵproperty("ngForOf", ctx_r2.errorMessages);
43
44
  } }
44
- function QueryCheckYourAnswersComponent_div_0_ng_container_3_Template(rf, ctx) { if (rf & 1) {
45
+ function QueryCheckYourAnswersComponent_div_0_div_3_ul_5_li_1_Template(rf, ctx) { if (rf & 1) {
46
+ i0.ɵɵelementStart(0, "li", 34);
47
+ i0.ɵɵtext(1);
48
+ i0.ɵɵelementEnd();
49
+ } if (rf & 2) {
50
+ const fieldError_r4 = ctx.$implicit;
51
+ i0.ɵɵadvance();
52
+ i0.ɵɵtextInterpolate(fieldError_r4.message);
53
+ } }
54
+ function QueryCheckYourAnswersComponent_div_0_div_3_ul_5_Template(rf, ctx) { if (rf & 1) {
55
+ i0.ɵɵelementStart(0, "ul", 32);
56
+ i0.ɵɵtemplate(1, QueryCheckYourAnswersComponent_div_0_div_3_ul_5_li_1_Template, 2, 1, "li", 33);
57
+ i0.ɵɵelementEnd();
58
+ } if (rf & 2) {
59
+ const ctx_r2 = i0.ɵɵnextContext(3);
60
+ i0.ɵɵadvance();
61
+ i0.ɵɵproperty("ngForOf", ctx_r2.error.details.field_errors);
62
+ } }
63
+ function QueryCheckYourAnswersComponent_div_0_div_3_Template(rf, ctx) { if (rf & 1) {
64
+ i0.ɵɵelementStart(0, "div", 29)(1, "h3", 30);
65
+ i0.ɵɵtext(2, " The event could not be created ");
66
+ i0.ɵɵelementEnd();
67
+ i0.ɵɵelementStart(3, "p");
68
+ i0.ɵɵtext(4);
69
+ i0.ɵɵelementEnd();
70
+ i0.ɵɵtemplate(5, QueryCheckYourAnswersComponent_div_0_div_3_ul_5_Template, 2, 1, "ul", 31);
71
+ i0.ɵɵelementEnd();
72
+ } if (rf & 2) {
73
+ const ctx_r2 = i0.ɵɵnextContext(2);
74
+ i0.ɵɵadvance(4);
75
+ i0.ɵɵtextInterpolate(ctx_r2.error.message);
76
+ i0.ɵɵadvance();
77
+ i0.ɵɵproperty("ngIf", ctx_r2.error.details == null ? null : ctx_r2.error.details.field_errors);
78
+ } }
79
+ function QueryCheckYourAnswersComponent_div_0_ng_container_5_Template(rf, ctx) { if (rf & 1) {
45
80
  i0.ɵɵelementContainerStart(0);
46
- i0.ɵɵelementStart(1, "div", 27);
81
+ i0.ɵɵelementStart(1, "div", 35);
47
82
  i0.ɵɵtext(2);
48
83
  i0.ɵɵpipe(3, "rpxTranslate");
49
84
  i0.ɵɵelementEnd();
@@ -52,7 +87,7 @@ function QueryCheckYourAnswersComponent_div_0_ng_container_3_Template(rf, ctx) {
52
87
  i0.ɵɵadvance(2);
53
88
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 1, "Raise a query"));
54
89
  } }
55
- function QueryCheckYourAnswersComponent_div_0_ng_container_5_Template(rf, ctx) { if (rf & 1) {
90
+ function QueryCheckYourAnswersComponent_div_0_ng_container_7_Template(rf, ctx) { if (rf & 1) {
56
91
  i0.ɵɵelementContainerStart(0);
57
92
  i0.ɵɵtext(1);
58
93
  i0.ɵɵpipe(2, "rpxTranslate");
@@ -61,16 +96,16 @@ function QueryCheckYourAnswersComponent_div_0_ng_container_5_Template(rf, ctx) {
61
96
  i0.ɵɵadvance();
62
97
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 1, "Review query response details"), " ");
63
98
  } }
64
- function QueryCheckYourAnswersComponent_div_0_ng_template_6_Template(rf, ctx) { if (rf & 1) {
99
+ function QueryCheckYourAnswersComponent_div_0_ng_template_8_Template(rf, ctx) { if (rf & 1) {
65
100
  i0.ɵɵtext(0);
66
101
  i0.ɵɵpipe(1, "rpxTranslate");
67
102
  } if (rf & 2) {
68
103
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(1, 1, "Review query details"), " ");
69
104
  } }
70
- function QueryCheckYourAnswersComponent_div_0_dl_10_a_8_Template(rf, ctx) { if (rf & 1) {
71
- const _r4 = i0.ɵɵgetCurrentView();
72
- i0.ɵɵelementStart(0, "a", 17);
73
- i0.ɵɵlistener("click", function QueryCheckYourAnswersComponent_div_0_dl_10_a_8_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.goBack()); });
105
+ function QueryCheckYourAnswersComponent_div_0_dl_12_a_8_Template(rf, ctx) { if (rf & 1) {
106
+ const _r5 = i0.ɵɵgetCurrentView();
107
+ i0.ɵɵelementStart(0, "a", 19);
108
+ i0.ɵɵlistener("click", function QueryCheckYourAnswersComponent_div_0_dl_12_a_8_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.goBack()); });
74
109
  i0.ɵɵtext(1);
75
110
  i0.ɵɵpipe(2, "rpxTranslate");
76
111
  i0.ɵɵelementEnd();
@@ -78,16 +113,16 @@ function QueryCheckYourAnswersComponent_div_0_dl_10_a_8_Template(rf, ctx) { if (
78
113
  i0.ɵɵadvance();
79
114
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 1, "Change"), " ");
80
115
  } }
81
- function QueryCheckYourAnswersComponent_div_0_dl_10_Template(rf, ctx) { if (rf & 1) {
82
- i0.ɵɵelementStart(0, "dl", 12)(1, "div", 13)(2, "dt", 14);
116
+ function QueryCheckYourAnswersComponent_div_0_dl_12_Template(rf, ctx) { if (rf & 1) {
117
+ i0.ɵɵelementStart(0, "dl", 14)(1, "div", 15)(2, "dt", 16);
83
118
  i0.ɵɵtext(3);
84
119
  i0.ɵɵpipe(4, "rpxTranslate");
85
120
  i0.ɵɵelementEnd();
86
- i0.ɵɵelementStart(5, "dd", 15);
121
+ i0.ɵɵelementStart(5, "dd", 17);
87
122
  i0.ɵɵtext(6);
88
123
  i0.ɵɵelementEnd();
89
- i0.ɵɵelementStart(7, "dd", 16);
90
- i0.ɵɵtemplate(8, QueryCheckYourAnswersComponent_div_0_dl_10_a_8_Template, 3, 3, "a", 28);
124
+ i0.ɵɵelementStart(7, "dd", 18);
125
+ i0.ɵɵtemplate(8, QueryCheckYourAnswersComponent_div_0_dl_12_a_8_Template, 3, 3, "a", 36);
91
126
  i0.ɵɵelementEnd()()();
92
127
  } if (rf & 2) {
93
128
  let tmp_4_0;
@@ -99,7 +134,7 @@ function QueryCheckYourAnswersComponent_div_0_dl_10_Template(rf, ctx) { if (rf &
99
134
  i0.ɵɵadvance(2);
100
135
  i0.ɵɵproperty("ngIf", ctx_r2.queryCreateContext === ctx_r2.queryCreateContextEnum.NEW_QUERY);
101
136
  } }
102
- function QueryCheckYourAnswersComponent_div_0_dl_22_ng_container_6_Template(rf, ctx) { if (rf & 1) {
137
+ function QueryCheckYourAnswersComponent_div_0_dl_24_ng_container_6_Template(rf, ctx) { if (rf & 1) {
103
138
  i0.ɵɵelementContainerStart(0);
104
139
  i0.ɵɵtext(1);
105
140
  i0.ɵɵpipe(2, "rpxTranslate");
@@ -108,24 +143,24 @@ function QueryCheckYourAnswersComponent_div_0_dl_22_ng_container_6_Template(rf,
108
143
  i0.ɵɵadvance();
109
144
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind3(2, 1, "Is the query hearing related?", null, "Yes"), " ");
110
145
  } }
111
- function QueryCheckYourAnswersComponent_div_0_dl_22_ng_template_7_Template(rf, ctx) { if (rf & 1) {
146
+ function QueryCheckYourAnswersComponent_div_0_dl_24_ng_template_7_Template(rf, ctx) { if (rf & 1) {
112
147
  i0.ɵɵtext(0);
113
148
  i0.ɵɵpipe(1, "rpxTranslate");
114
149
  } if (rf & 2) {
115
150
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind3(1, 1, "Is the query hearing related?", null, "No"), " ");
116
151
  } }
117
- function QueryCheckYourAnswersComponent_div_0_dl_22_div_13_Template(rf, ctx) { if (rf & 1) {
118
- const _r6 = i0.ɵɵgetCurrentView();
119
- i0.ɵɵelementStart(0, "div", 13)(1, "dt", 14);
152
+ function QueryCheckYourAnswersComponent_div_0_dl_24_div_13_Template(rf, ctx) { if (rf & 1) {
153
+ const _r7 = i0.ɵɵgetCurrentView();
154
+ i0.ɵɵelementStart(0, "div", 15)(1, "dt", 16);
120
155
  i0.ɵɵtext(2);
121
156
  i0.ɵɵpipe(3, "rpxTranslate");
122
157
  i0.ɵɵelementEnd();
123
- i0.ɵɵelementStart(4, "dd", 15);
158
+ i0.ɵɵelementStart(4, "dd", 17);
124
159
  i0.ɵɵtext(5);
125
160
  i0.ɵɵpipe(6, "date");
126
161
  i0.ɵɵelementEnd();
127
- i0.ɵɵelementStart(7, "dd", 16)(8, "a", 17);
128
- i0.ɵɵlistener("click", function QueryCheckYourAnswersComponent_div_0_dl_22_div_13_Template_a_click_8_listener() { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.goBack()); });
162
+ i0.ɵɵelementStart(7, "dd", 18)(8, "a", 19);
163
+ i0.ɵɵlistener("click", function QueryCheckYourAnswersComponent_div_0_dl_24_div_13_Template_a_click_8_listener() { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.goBack()); });
129
164
  i0.ɵɵtext(9);
130
165
  i0.ɵɵpipe(10, "rpxTranslate");
131
166
  i0.ɵɵelementEnd()()();
@@ -139,53 +174,53 @@ function QueryCheckYourAnswersComponent_div_0_dl_22_div_13_Template(rf, ctx) { i
139
174
  i0.ɵɵadvance(4);
140
175
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(10, 8, "Change"), " ");
141
176
  } }
142
- function QueryCheckYourAnswersComponent_div_0_dl_22_Template(rf, ctx) { if (rf & 1) {
143
- const _r5 = i0.ɵɵgetCurrentView();
144
- i0.ɵɵelementStart(0, "dl", 12)(1, "div", 13)(2, "dt", 14);
177
+ function QueryCheckYourAnswersComponent_div_0_dl_24_Template(rf, ctx) { if (rf & 1) {
178
+ const _r6 = i0.ɵɵgetCurrentView();
179
+ i0.ɵɵelementStart(0, "dl", 14)(1, "div", 15)(2, "dt", 16);
145
180
  i0.ɵɵtext(3);
146
181
  i0.ɵɵpipe(4, "rpxTranslate");
147
182
  i0.ɵɵelementEnd();
148
- i0.ɵɵelementStart(5, "dd", 15);
149
- i0.ɵɵtemplate(6, QueryCheckYourAnswersComponent_div_0_dl_22_ng_container_6_Template, 3, 5, "ng-container", 8)(7, QueryCheckYourAnswersComponent_div_0_dl_22_ng_template_7_Template, 2, 5, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
183
+ i0.ɵɵelementStart(5, "dd", 17);
184
+ i0.ɵɵtemplate(6, QueryCheckYourAnswersComponent_div_0_dl_24_ng_container_6_Template, 3, 5, "ng-container", 10)(7, QueryCheckYourAnswersComponent_div_0_dl_24_ng_template_7_Template, 2, 5, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
150
185
  i0.ɵɵelementEnd();
151
- i0.ɵɵelementStart(9, "dd", 16)(10, "a", 17);
152
- i0.ɵɵlistener("click", function QueryCheckYourAnswersComponent_div_0_dl_22_Template_a_click_10_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.goBack()); });
186
+ i0.ɵɵelementStart(9, "dd", 18)(10, "a", 19);
187
+ i0.ɵɵlistener("click", function QueryCheckYourAnswersComponent_div_0_dl_24_Template_a_click_10_listener() { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.goBack()); });
153
188
  i0.ɵɵtext(11);
154
189
  i0.ɵɵpipe(12, "rpxTranslate");
155
190
  i0.ɵɵelementEnd()()();
156
- i0.ɵɵtemplate(13, QueryCheckYourAnswersComponent_div_0_dl_22_div_13_Template, 11, 10, "div", 29);
191
+ i0.ɵɵtemplate(13, QueryCheckYourAnswersComponent_div_0_dl_24_div_13_Template, 11, 10, "div", 37);
157
192
  i0.ɵɵelementEnd();
158
193
  } if (rf & 2) {
159
194
  let tmp_5_0;
160
195
  let tmp_8_0;
161
- const isHearingRelatedFalse_r7 = i0.ɵɵreference(8);
196
+ const isHearingRelatedFalse_r8 = i0.ɵɵreference(8);
162
197
  const ctx_r2 = i0.ɵɵnextContext(2);
163
198
  i0.ɵɵadvance(3);
164
199
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 5, "Is the query hearing related?"), " ");
165
200
  i0.ɵɵadvance(3);
166
- i0.ɵɵproperty("ngIf", ((tmp_5_0 = ctx_r2.formGroup.get("isHearingRelated")) == null ? null : tmp_5_0.value) === true)("ngIfElse", isHearingRelatedFalse_r7);
201
+ i0.ɵɵproperty("ngIf", ((tmp_5_0 = ctx_r2.formGroup.get("isHearingRelated")) == null ? null : tmp_5_0.value) === true)("ngIfElse", isHearingRelatedFalse_r8);
167
202
  i0.ɵɵadvance(5);
168
203
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(12, 7, "Change"), " ");
169
204
  i0.ɵɵadvance(2);
170
205
  i0.ɵɵproperty("ngIf", (tmp_8_0 = ctx_r2.formGroup.get("isHearingRelated")) == null ? null : tmp_8_0.value);
171
206
  } }
172
- function QueryCheckYourAnswersComponent_div_0_dl_23_ccd_query_attachments_read_6_Template(rf, ctx) { if (rf & 1) {
173
- i0.ɵɵelement(0, "ccd-query-attachments-read", 32);
207
+ function QueryCheckYourAnswersComponent_div_0_dl_25_ccd_query_attachments_read_6_Template(rf, ctx) { if (rf & 1) {
208
+ i0.ɵɵelement(0, "ccd-query-attachments-read", 40);
174
209
  } if (rf & 2) {
175
210
  const ctx_r2 = i0.ɵɵnextContext(3);
176
211
  i0.ɵɵproperty("attachments", ctx_r2.attachments);
177
212
  } }
178
- function QueryCheckYourAnswersComponent_div_0_dl_23_Template(rf, ctx) { if (rf & 1) {
179
- const _r8 = i0.ɵɵgetCurrentView();
180
- i0.ɵɵelementStart(0, "dl", 12)(1, "div", 13)(2, "dt", 14);
213
+ function QueryCheckYourAnswersComponent_div_0_dl_25_Template(rf, ctx) { if (rf & 1) {
214
+ const _r9 = i0.ɵɵgetCurrentView();
215
+ i0.ɵɵelementStart(0, "dl", 14)(1, "div", 15)(2, "dt", 16);
181
216
  i0.ɵɵtext(3);
182
217
  i0.ɵɵpipe(4, "rpxTranslate");
183
218
  i0.ɵɵelementEnd();
184
- i0.ɵɵelementStart(5, "dd", 30);
185
- i0.ɵɵtemplate(6, QueryCheckYourAnswersComponent_div_0_dl_23_ccd_query_attachments_read_6_Template, 1, 1, "ccd-query-attachments-read", 31);
219
+ i0.ɵɵelementStart(5, "dd", 38);
220
+ i0.ɵɵtemplate(6, QueryCheckYourAnswersComponent_div_0_dl_25_ccd_query_attachments_read_6_Template, 1, 1, "ccd-query-attachments-read", 39);
186
221
  i0.ɵɵelementEnd();
187
- i0.ɵɵelementStart(7, "dd", 16)(8, "a", 17);
188
- i0.ɵɵlistener("click", function QueryCheckYourAnswersComponent_div_0_dl_23_Template_a_click_8_listener() { i0.ɵɵrestoreView(_r8); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.goBack()); });
222
+ i0.ɵɵelementStart(7, "dd", 18)(8, "a", 19);
223
+ i0.ɵɵlistener("click", function QueryCheckYourAnswersComponent_div_0_dl_25_Template_a_click_8_listener() { i0.ɵɵrestoreView(_r9); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.goBack()); });
189
224
  i0.ɵɵtext(9);
190
225
  i0.ɵɵpipe(10, "rpxTranslate");
191
226
  i0.ɵɵelementEnd()()()();
@@ -201,68 +236,74 @@ function QueryCheckYourAnswersComponent_div_0_dl_23_Template(rf, ctx) { if (rf &
201
236
  function QueryCheckYourAnswersComponent_div_0_Template(rf, ctx) { if (rf & 1) {
202
237
  const _r1 = i0.ɵɵgetCurrentView();
203
238
  i0.ɵɵelementStart(0, "div", 3)(1, "div", 4);
204
- i0.ɵɵtemplate(2, QueryCheckYourAnswersComponent_div_0_div_2_Template, 7, 4, "div", 5)(3, QueryCheckYourAnswersComponent_div_0_ng_container_3_Template, 4, 3, "ng-container", 6);
205
- i0.ɵɵelementStart(4, "h1", 7);
206
- i0.ɵɵtemplate(5, QueryCheckYourAnswersComponent_div_0_ng_container_5_Template, 3, 3, "ng-container", 8)(6, QueryCheckYourAnswersComponent_div_0_ng_template_6_Template, 2, 3, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
239
+ i0.ɵɵtemplate(2, QueryCheckYourAnswersComponent_div_0_div_2_Template, 7, 4, "div", 5)(3, QueryCheckYourAnswersComponent_div_0_div_3_Template, 6, 2, "div", 6);
240
+ i0.ɵɵelement(4, "ccd-callback-errors", 7);
241
+ i0.ɵɵtemplate(5, QueryCheckYourAnswersComponent_div_0_ng_container_5_Template, 4, 3, "ng-container", 8);
242
+ i0.ɵɵelementStart(6, "h1", 9);
243
+ i0.ɵɵtemplate(7, QueryCheckYourAnswersComponent_div_0_ng_container_7_Template, 3, 3, "ng-container", 10)(8, QueryCheckYourAnswersComponent_div_0_ng_template_8_Template, 2, 3, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
207
244
  i0.ɵɵelementEnd();
208
- i0.ɵɵelementStart(8, "div", 9);
209
- i0.ɵɵelement(9, "ccd-query-case-details-header", 10);
245
+ i0.ɵɵelementStart(10, "div", 11);
246
+ i0.ɵɵelement(11, "ccd-query-case-details-header", 12);
210
247
  i0.ɵɵelementEnd();
211
- i0.ɵɵtemplate(10, QueryCheckYourAnswersComponent_div_0_dl_10_Template, 9, 5, "dl", 11);
212
- i0.ɵɵelementStart(11, "dl", 12)(12, "div", 13)(13, "dt", 14);
213
- i0.ɵɵtext(14);
214
- i0.ɵɵpipe(15, "rpxTranslate");
248
+ i0.ɵɵtemplate(12, QueryCheckYourAnswersComponent_div_0_dl_12_Template, 9, 5, "dl", 13);
249
+ i0.ɵɵelementStart(13, "dl", 14)(14, "div", 15)(15, "dt", 16);
250
+ i0.ɵɵtext(16);
251
+ i0.ɵɵpipe(17, "rpxTranslate");
215
252
  i0.ɵɵelementEnd();
216
- i0.ɵɵelementStart(16, "dd", 15);
217
- i0.ɵɵtext(17);
253
+ i0.ɵɵelementStart(18, "dd", 17);
254
+ i0.ɵɵtext(19);
218
255
  i0.ɵɵelementEnd();
219
- i0.ɵɵelementStart(18, "dd", 16)(19, "a", 17);
220
- i0.ɵɵlistener("click", function QueryCheckYourAnswersComponent_div_0_Template_a_click_19_listener() { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.goBack()); });
221
- i0.ɵɵtext(20);
222
- i0.ɵɵpipe(21, "rpxTranslate");
256
+ i0.ɵɵelementStart(20, "dd", 18)(21, "a", 19);
257
+ i0.ɵɵlistener("click", function QueryCheckYourAnswersComponent_div_0_Template_a_click_21_listener() { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.goBack()); });
258
+ i0.ɵɵtext(22);
259
+ i0.ɵɵpipe(23, "rpxTranslate");
223
260
  i0.ɵɵelementEnd()()()();
224
- i0.ɵɵtemplate(22, QueryCheckYourAnswersComponent_div_0_dl_22_Template, 14, 9, "dl", 11)(23, QueryCheckYourAnswersComponent_div_0_dl_23_Template, 11, 7, "dl", 11);
225
- i0.ɵɵelement(24, "br");
226
- i0.ɵɵelementStart(25, "div")(26, "button", 18);
227
- i0.ɵɵlistener("click", function QueryCheckYourAnswersComponent_div_0_Template_button_click_26_listener() { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.goBack()); });
228
- i0.ɵɵtext(27);
229
- i0.ɵɵpipe(28, "rpxTranslate");
261
+ i0.ɵɵtemplate(24, QueryCheckYourAnswersComponent_div_0_dl_24_Template, 14, 9, "dl", 13)(25, QueryCheckYourAnswersComponent_div_0_dl_25_Template, 11, 7, "dl", 13);
262
+ i0.ɵɵelement(26, "br");
263
+ i0.ɵɵelementStart(27, "div")(28, "button", 20);
264
+ i0.ɵɵlistener("click", function QueryCheckYourAnswersComponent_div_0_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.goBack()); });
265
+ i0.ɵɵtext(29);
266
+ i0.ɵɵpipe(30, "rpxTranslate");
230
267
  i0.ɵɵelementEnd();
231
- i0.ɵɵelementStart(29, "button", 19);
232
- i0.ɵɵlistener("click", function QueryCheckYourAnswersComponent_div_0_Template_button_click_29_listener() { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.submit()); });
233
- i0.ɵɵtext(30);
234
- i0.ɵɵpipe(31, "rpxTranslate");
268
+ i0.ɵɵelementStart(31, "button", 21);
269
+ i0.ɵɵlistener("click", function QueryCheckYourAnswersComponent_div_0_Template_button_click_31_listener() { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.submit()); });
270
+ i0.ɵɵtext(32);
271
+ i0.ɵɵpipe(33, "rpxTranslate");
235
272
  i0.ɵɵelementEnd()()();
236
- i0.ɵɵelement(32, "ccd-query-event-completion", 20);
273
+ i0.ɵɵelement(34, "ccd-query-event-completion", 22);
237
274
  i0.ɵɵelementEnd();
238
275
  } if (rf & 2) {
239
- let tmp_9_0;
240
- const defaultCheckYourAnswersTitle_r9 = i0.ɵɵreference(7);
276
+ let tmp_11_0;
277
+ const defaultCheckYourAnswersTitle_r10 = i0.ɵɵreference(9);
241
278
  const ctx_r2 = i0.ɵɵnextContext();
242
279
  i0.ɵɵadvance(2);
243
280
  i0.ɵɵproperty("ngIf", ctx_r2.errorMessages.length > 0);
244
281
  i0.ɵɵadvance();
282
+ i0.ɵɵproperty("ngIf", ctx_r2.error && (ctx_r2.error.details || ctx_r2.error.message));
283
+ i0.ɵɵadvance();
284
+ i0.ɵɵproperty("callbackErrorsSubject", ctx_r2.callbackErrorsSubject);
285
+ i0.ɵɵadvance();
245
286
  i0.ɵɵproperty("ngIf", ctx_r2.queryCreateContext === ctx_r2.queryCreateContextEnum.NEW_QUERY);
246
287
  i0.ɵɵadvance(2);
247
- i0.ɵɵproperty("ngIf", ctx_r2.queryCreateContext === ctx_r2.queryCreateContextEnum.RESPOND)("ngIfElse", defaultCheckYourAnswersTitle_r9);
288
+ i0.ɵɵproperty("ngIf", ctx_r2.queryCreateContext === ctx_r2.queryCreateContextEnum.RESPOND)("ngIfElse", defaultCheckYourAnswersTitle_r10);
248
289
  i0.ɵɵadvance(4);
249
290
  i0.ɵɵproperty("caseDetails", ctx_r2.caseDetails);
250
291
  i0.ɵɵadvance();
251
292
  i0.ɵɵproperty("ngIf", ctx_r2.queryCreateContext !== ctx_r2.queryCreateContextEnum.FOLLOWUP);
252
293
  i0.ɵɵadvance(4);
253
- i0.ɵɵtextInterpolate1(" ", ctx_r2.queryCreateContext === ctx_r2.queryCreateContextEnum.RESPOND ? "Response detail" : i0.ɵɵpipeBind1(15, 14, "Query detail"), " ");
294
+ i0.ɵɵtextInterpolate1(" ", ctx_r2.queryCreateContext === ctx_r2.queryCreateContextEnum.RESPOND ? "Response detail" : i0.ɵɵpipeBind1(17, 16, "Query detail"), " ");
254
295
  i0.ɵɵadvance(3);
255
- i0.ɵɵtextInterpolate1(" ", (tmp_9_0 = ctx_r2.formGroup.get("body")) == null ? null : tmp_9_0.value, " ");
296
+ i0.ɵɵtextInterpolate1(" ", (tmp_11_0 = ctx_r2.formGroup.get("body")) == null ? null : tmp_11_0.value, " ");
256
297
  i0.ɵɵadvance(3);
257
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(21, 16, "Change"), " ");
298
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(23, 18, "Change"), " ");
258
299
  i0.ɵɵadvance(2);
259
300
  i0.ɵɵproperty("ngIf", ctx_r2.queryCreateContext === ctx_r2.queryCreateContextEnum.NEW_QUERY);
260
301
  i0.ɵɵadvance();
261
302
  i0.ɵɵproperty("ngIf", ctx_r2.formGroup.get("attachments").value.length > 0);
262
303
  i0.ɵɵadvance(4);
263
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(28, 18, "Previous"), " ");
304
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(30, 20, "Previous"), " ");
264
305
  i0.ɵɵadvance(3);
265
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(31, 20, "Submit"), " ");
306
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(33, 22, "Submit"), " ");
266
307
  i0.ɵɵadvance(2);
267
308
  i0.ɵɵproperty("eventCompletionParams", ctx_r2.eventCompletionParams);
268
309
  } }
@@ -286,7 +327,6 @@ export class QueryCheckYourAnswersComponent {
286
327
  queryItem;
287
328
  queryCreateContext;
288
329
  eventData = null;
289
- multipleFollowUpFeature;
290
330
  backClicked = new EventEmitter();
291
331
  querySubmitted = new EventEmitter();
292
332
  callbackConfirmationMessage = new EventEmitter();
@@ -305,6 +345,8 @@ export class QueryCheckYourAnswersComponent {
305
345
  filteredTasks = [];
306
346
  readyToSubmit;
307
347
  isSubmitting = false;
348
+ callbackErrorsSubject = new Subject();
349
+ error;
308
350
  constructor(route, router, casesService, caseNotifier, workAllocationService, sessionStorageService, qualifyingQuestionService) {
309
351
  this.route = route;
310
352
  this.router = router;
@@ -439,13 +481,25 @@ export class QueryCheckYourAnswersComponent {
439
481
  handleError(error) {
440
482
  console.error('Error in API calls:', error);
441
483
  this.isSubmitting = false;
442
- this.router.navigate(['/', 'service-down']);
484
+ if (this.isServiceErrorFound(error)) {
485
+ this.error = null;
486
+ this.callbackErrorsSubject.next(error);
487
+ }
488
+ else {
489
+ if (error && error.status !== 401 && error.status !== 403) {
490
+ this.error = error;
491
+ }
492
+ else {
493
+ this.router.navigate(['/', 'service-down']);
494
+ }
495
+ }
496
+ window.scrollTo({ left: 0, top: 0, behavior: 'smooth' });
443
497
  }
444
498
  generateCaseQueriesCollectionData() {
445
499
  const currentUserDetails = JSON.parse(this.sessionStorageService.getItem(USER_DETAILS));
446
500
  const caseMessage = this.queryCreateContext === QueryCreateContext.NEW_QUERY
447
501
  ? QueryManagementUtils.getNewQueryData(this.formGroup, currentUserDetails)
448
- : QueryManagementUtils.getRespondOrFollowupQueryData(this.formGroup, this.queryItem, currentUserDetails, this.queryCreateContext);
502
+ : QueryManagementUtils.getRespondOrFollowupQueryData(this.formGroup, this.queryItem, currentUserDetails);
449
503
  const messageId = this.route.snapshot.params.dataid; // Get the message ID from route params (if present)
450
504
  const isNewQuery = this.queryCreateContext === QueryCreateContext.NEW_QUERY; // Check if this is a new query
451
505
  // Check if the field ID has been set dynamically
@@ -601,16 +655,19 @@ export class QueryCheckYourAnswersComponent {
601
655
  this.attachments = documents.map(QueryManagementUtils.documentToCollectionFormDocument);
602
656
  }
603
657
  }
658
+ isServiceErrorFound(error) {
659
+ return !!(error?.callbackErrors?.length);
660
+ }
604
661
  static ɵfac = function QueryCheckYourAnswersComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || QueryCheckYourAnswersComponent)(i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i2.CasesService), i0.ɵɵdirectiveInject(i2.CaseNotifier), i0.ɵɵdirectiveInject(i2.WorkAllocationService), i0.ɵɵdirectiveInject(i3.SessionStorageService), i0.ɵɵdirectiveInject(i4.QualifyingQuestionService)); };
605
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: QueryCheckYourAnswersComponent, selectors: [["ccd-query-check-your-answers"]], inputs: { formGroup: "formGroup", queryItem: "queryItem", queryCreateContext: "queryCreateContext", eventData: "eventData", multipleFollowUpFeature: "multipleFollowUpFeature" }, outputs: { backClicked: "backClicked", querySubmitted: "querySubmitted", callbackConfirmationMessage: "callbackConfirmationMessage" }, decls: 1, vars: 1, consts: [["defaultCheckYourAnswersTitle", ""], ["isHearingRelatedFalse", ""], ["class", "govuk-grid-row", 4, "ngIf"], [1, "govuk-grid-row"], [1, "govuk-grid-column-two-thirds-from-desktop"], ["class", "govuk-error-summary", "aria-labelledby", "error-summary-title", "role", "alert", "tabindex", "-1", "data-module", "govuk-error-summary", 4, "ngIf"], [4, "ngIf"], [1, "govuk-heading-l"], [4, "ngIf", "ngIfElse"], [1, "govuk-!-margin-bottom-4"], [3, "caseDetails"], ["class", "govuk-summary-list govuk-!-margin-bottom-0", 4, "ngIf"], [1, "govuk-summary-list", "govuk-!-margin-bottom-0"], [1, "govuk-summary-list__row"], [1, "govuk-summary-list__key"], [1, "govuk-summary-list__value"], [1, "govuk-summary-list__actions"], ["href", "javascript:void(0)", 1, "govuk-link", 3, "click"], ["data-module", "govuk-button", 1, "govuk-button", "govuk-button--secondary", "govuk-!-margin-right-3", 3, "click"], ["data-module", "govuk-button", "type", "submit", 1, "govuk-button", 3, "click"], [3, "eventCompletionParams"], ["aria-labelledby", "error-summary-title", "role", "alert", "tabindex", "-1", "data-module", "govuk-error-summary", 1, "govuk-error-summary"], ["id", "error-summary-title", 1, "govuk-error-summary__title"], [1, "govuk-error-summary__body"], [1, "govuk-list", "govuk-error-summary__list"], [4, "ngFor", "ngForOf"], ["href", "javascript:void(0)", 1, "validation-error", 3, "id"], [1, "govuk-caption-l"], ["href", "javascript:void(0)", "class", "govuk-link", 3, "click", 4, "ngIf"], ["class", "govuk-summary-list__row", 4, "ngIf"], [1, "govuk-summary-list__value", "govuk-summary-list__value--documentAttached"], [3, "attachments", 4, "ngIf"], [3, "attachments"]], template: function QueryCheckYourAnswersComponent_Template(rf, ctx) { if (rf & 1) {
606
- i0.ɵɵtemplate(0, QueryCheckYourAnswersComponent_div_0_Template, 33, 22, "div", 2);
662
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: QueryCheckYourAnswersComponent, selectors: [["ccd-query-check-your-answers"]], inputs: { formGroup: "formGroup", queryItem: "queryItem", queryCreateContext: "queryCreateContext", eventData: "eventData" }, outputs: { backClicked: "backClicked", querySubmitted: "querySubmitted", callbackConfirmationMessage: "callbackConfirmationMessage" }, decls: 1, vars: 1, consts: [["defaultCheckYourAnswersTitle", ""], ["isHearingRelatedFalse", ""], ["class", "govuk-grid-row", 4, "ngIf"], [1, "govuk-grid-row"], [1, "govuk-grid-column-two-thirds-from-desktop"], ["class", "govuk-error-summary", "aria-labelledby", "error-summary-title", "role", "alert", "tabindex", "-1", "data-module", "govuk-error-summary", 4, "ngIf"], ["class", "error-summary", "role", "group", "aria-labelledby", "edit-case-event_error-summary-heading", "tabindex", "-1", 4, "ngIf"], [3, "callbackErrorsSubject"], [4, "ngIf"], [1, "govuk-heading-l"], [4, "ngIf", "ngIfElse"], [1, "govuk-!-margin-bottom-4"], [3, "caseDetails"], ["class", "govuk-summary-list govuk-!-margin-bottom-0", 4, "ngIf"], [1, "govuk-summary-list", "govuk-!-margin-bottom-0"], [1, "govuk-summary-list__row"], [1, "govuk-summary-list__key"], [1, "govuk-summary-list__value"], [1, "govuk-summary-list__actions"], ["href", "javascript:void(0)", 1, "govuk-link", 3, "click"], ["data-module", "govuk-button", 1, "govuk-button", "govuk-button--secondary", "govuk-!-margin-right-3", 3, "click"], ["data-module", "govuk-button", "type", "submit", 1, "govuk-button", 3, "click"], [3, "eventCompletionParams"], ["aria-labelledby", "error-summary-title", "role", "alert", "tabindex", "-1", "data-module", "govuk-error-summary", 1, "govuk-error-summary"], ["id", "error-summary-title", 1, "govuk-error-summary__title"], [1, "govuk-error-summary__body"], [1, "govuk-list", "govuk-error-summary__list"], [4, "ngFor", "ngForOf"], ["href", "javascript:void(0)", 1, "validation-error", 3, "id"], ["role", "group", "aria-labelledby", "edit-case-event_error-summary-heading", "tabindex", "-1", 1, "error-summary"], ["id", "event_error-summary-heading", 1, "heading-h3", "error-summary-heading"], ["class", "error-summary-list", 4, "ngIf"], [1, "error-summary-list"], ["class", "ccd-error-summary-li", 4, "ngFor", "ngForOf"], [1, "ccd-error-summary-li"], [1, "govuk-caption-l"], ["href", "javascript:void(0)", "class", "govuk-link", 3, "click", 4, "ngIf"], ["class", "govuk-summary-list__row", 4, "ngIf"], [1, "govuk-summary-list__value", "govuk-summary-list__value--documentAttached"], [3, "attachments", 4, "ngIf"], [3, "attachments"]], template: function QueryCheckYourAnswersComponent_Template(rf, ctx) { if (rf & 1) {
663
+ i0.ɵɵtemplate(0, QueryCheckYourAnswersComponent_div_0_Template, 35, 24, "div", 2);
607
664
  } if (rf & 2) {
608
665
  i0.ɵɵproperty("ngIf", ctx.readyToSubmit);
609
666
  } }, styles: [".govuk-summary-list__value--documentAttached[_ngcontent-%COMP%]{vertical-align:middle}"] });
610
667
  }
611
668
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(QueryCheckYourAnswersComponent, [{
612
669
  type: Component,
613
- args: [{ selector: 'ccd-query-check-your-answers', template: "<div class=\"govuk-grid-row\" *ngIf=\"readyToSubmit\">\n <div class=\"govuk-grid-column-two-thirds-from-desktop\">\n <!-- Error message summary -->\n <div *ngIf=\"errorMessages.length > 0\" class=\"govuk-error-summary\"\n aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\"\n data-module=\"govuk-error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n {{ 'There is a problem' | rpxTranslate }}\n </h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li *ngFor=\"let errorMessage of errorMessages\">\n <a [id]=\"'error-' + errorMessage.fieldId\" href=\"javascript:void(0)\"\n class=\"validation-error\">{{ errorMessage.description | rpxTranslate }}</a>\n </li>\n </ul>\n </div>\n </div>\n\n <ng-container *ngIf=\"queryCreateContext === queryCreateContextEnum.NEW_QUERY\">\n <div class=\"govuk-caption-l\">{{ 'Raise a query' | rpxTranslate }}</div>\n </ng-container>\n\n <h1 class=\"govuk-heading-l\">\n <ng-container *ngIf=\"queryCreateContext === queryCreateContextEnum.RESPOND; else defaultCheckYourAnswersTitle\">\n {{ 'Review query response details' | rpxTranslate }}\n </ng-container>\n\n <ng-template #defaultCheckYourAnswersTitle>\n {{ 'Review query details' | rpxTranslate }}\n </ng-template>\n </h1>\n <div class=\"govuk-!-margin-bottom-4\">\n <ccd-query-case-details-header [caseDetails]=\"caseDetails\"></ccd-query-case-details-header>\n </div>\n\n <dl *ngIf=\"queryCreateContext !== queryCreateContextEnum.FOLLOWUP\" class=\"govuk-summary-list govuk-!-margin-bottom-0\">\n <div class=\"govuk-summary-list__row\">\n <dt class=\"govuk-summary-list__key\">\n {{ queryCreateContext === queryCreateContextEnum.RESPOND ? 'Submitted query' : 'Query subject' | rpxTranslate }}\n </dt>\n <dd class=\"govuk-summary-list__value\">\n {{ queryCreateContext === queryCreateContextEnum.RESPOND ? queryItem.subject : formGroup.get('subject')?.value }}\n </dd>\n <dd class=\"govuk-summary-list__actions\">\n <a *ngIf=\"queryCreateContext === queryCreateContextEnum.NEW_QUERY\" \n href=\"javascript:void(0)\" class=\"govuk-link\" (click)=\"goBack()\">\n {{ 'Change' | rpxTranslate }}\n </a>\n </dd>\n </div>\n </dl>\n\n <dl class=\"govuk-summary-list govuk-!-margin-bottom-0\">\n <div class=\"govuk-summary-list__row\">\n <dt class=\"govuk-summary-list__key\">\n {{ queryCreateContext === queryCreateContextEnum.RESPOND ? 'Response detail' : 'Query detail' | rpxTranslate }}\n </dt>\n <dd class=\"govuk-summary-list__value\">\n {{ formGroup.get('body')?.value }}\n </dd>\n <dd class=\"govuk-summary-list__actions\">\n <a href=\"javascript:void(0)\" class=\"govuk-link\" (click)=\"goBack()\">\n {{ 'Change' | rpxTranslate }}\n </a>\n </dd>\n </div>\n </dl>\n\n <dl *ngIf=\"queryCreateContext === queryCreateContextEnum.NEW_QUERY\" class=\"govuk-summary-list govuk-!-margin-bottom-0\">\n <div class=\"govuk-summary-list__row\">\n <dt class=\"govuk-summary-list__key\">\n {{ 'Is the query hearing related?' | rpxTranslate }}\n </dt>\n <dd class=\"govuk-summary-list__value\">\n <ng-container *ngIf=\"formGroup.get('isHearingRelated')?.value === true; else isHearingRelatedFalse\">\n {{ 'Is the query hearing related?' | rpxTranslate: null : 'Yes' }}\n </ng-container>\n <ng-template #isHearingRelatedFalse>\n {{ 'Is the query hearing related?' | rpxTranslate: null : 'No' }}\n </ng-template>\n </dd>\n <dd class=\"govuk-summary-list__actions\">\n <a href=\"javascript:void(0)\" class=\"govuk-link\" (click)=\"goBack()\">\n {{ 'Change' | rpxTranslate }}\n </a>\n </dd>\n </div>\n\n <div *ngIf=\"formGroup.get('isHearingRelated')?.value\" class=\"govuk-summary-list__row\">\n <dt class=\"govuk-summary-list__key\">\n {{ queryCreateContext === queryCreateContextEnum.NEW_QUERY\n ? 'What is the date of the hearing?'\n : 'What is the date of the hearing your query is related to?' | rpxTranslate }}\n </dt>\n <dd class=\"govuk-summary-list__value\">\n {{ formGroup.get('hearingDate')?.value | date: 'dd MMM yyyy' }}\n </dd>\n <dd class=\"govuk-summary-list__actions\">\n <a href=\"javascript:void(0)\" class=\"govuk-link\" (click)=\"goBack()\">\n {{ 'Change' | rpxTranslate }}\n </a>\n </dd>\n </div>\n </dl>\n <dl class=\"govuk-summary-list govuk-!-margin-bottom-0\" *ngIf=\"this.formGroup.get('attachments').value.length > 0\">\n <div class=\"govuk-summary-list__row\">\n <dt class=\"govuk-summary-list__key\">\n {{ queryCreateContext === queryCreateContextEnum.NEW_QUERY ? 'Upload a file to the query' : 'Document attached' | rpxTranslate }}\n </dt>\n <dd class=\"govuk-summary-list__value govuk-summary-list__value--documentAttached\">\n <ccd-query-attachments-read\n *ngIf=\"this.formGroup.get('attachments').value\"\n [attachments]=\"attachments\"\n >\n </ccd-query-attachments-read>\n </dd>\n <dd class=\"govuk-summary-list__actions\">\n <a href=\"javascript:void(0)\" class=\"govuk-link\" (click)=\"goBack()\">\n {{ 'Change' | rpxTranslate }}\n </a>\n </dd>\n </div>\n </dl>\n\n <br>\n\n <div>\n <button class=\"govuk-button govuk-button--secondary govuk-!-margin-right-3\" data-module=\"govuk-button\"\n (click)=\"goBack()\">\n {{ 'Previous' | rpxTranslate }}\n </button>\n <button class=\"govuk-button\" data-module=\"govuk-button\" type=\"submit\" (click)=\"submit()\">\n {{ 'Submit' | rpxTranslate }}\n </button>\n </div>\n </div>\n\n <ccd-query-event-completion [eventCompletionParams]=\"eventCompletionParams\"> \n </ccd-query-event-completion>\n</div>\n", styles: [".govuk-summary-list__value--documentAttached{vertical-align:middle}\n"] }]
670
+ args: [{ selector: 'ccd-query-check-your-answers', template: "<div class=\"govuk-grid-row\" *ngIf=\"readyToSubmit\">\n <div class=\"govuk-grid-column-two-thirds-from-desktop\">\n <!-- Error message summary -->\n <div *ngIf=\"errorMessages.length > 0\" class=\"govuk-error-summary\"\n aria-labelledby=\"error-summary-title\" role=\"alert\" tabindex=\"-1\"\n data-module=\"govuk-error-summary\">\n <h2 class=\"govuk-error-summary__title\" id=\"error-summary-title\">\n {{ 'There is a problem' | rpxTranslate }}\n </h2>\n <div class=\"govuk-error-summary__body\">\n <ul class=\"govuk-list govuk-error-summary__list\">\n <li *ngFor=\"let errorMessage of errorMessages\">\n <a [id]=\"'error-' + errorMessage.fieldId\" href=\"javascript:void(0)\"\n class=\"validation-error\">{{ errorMessage.description | rpxTranslate }}</a>\n </li>\n </ul>\n </div>\n </div>\n\n <div *ngIf=\"error && (error.details || error.message)\" class=\"error-summary\" role=\"group\" aria-labelledby=\"edit-case-event_error-summary-heading\" tabindex=\"-1\">\n <h3 class=\"heading-h3 error-summary-heading\" id=\"event_error-summary-heading\">\n The event could not be created\n </h3>\n <p>{{error.message}}</p>\n <ul *ngIf=\"error.details?.field_errors\" class=\"error-summary-list\">\n <li *ngFor=\"let fieldError of error.details.field_errors\" class=\"ccd-error-summary-li\">{{fieldError.message}}</li>\n </ul>\n </div>\n\n <ccd-callback-errors [callbackErrorsSubject]=\"callbackErrorsSubject\"></ccd-callback-errors>\n\n <ng-container *ngIf=\"queryCreateContext === queryCreateContextEnum.NEW_QUERY\">\n <div class=\"govuk-caption-l\">{{ 'Raise a query' | rpxTranslate }}</div>\n </ng-container>\n\n <h1 class=\"govuk-heading-l\">\n <ng-container *ngIf=\"queryCreateContext === queryCreateContextEnum.RESPOND; else defaultCheckYourAnswersTitle\">\n {{ 'Review query response details' | rpxTranslate }}\n </ng-container>\n\n <ng-template #defaultCheckYourAnswersTitle>\n {{ 'Review query details' | rpxTranslate }}\n </ng-template>\n </h1>\n <div class=\"govuk-!-margin-bottom-4\">\n <ccd-query-case-details-header [caseDetails]=\"caseDetails\"></ccd-query-case-details-header>\n </div>\n\n <dl *ngIf=\"queryCreateContext !== queryCreateContextEnum.FOLLOWUP\" class=\"govuk-summary-list govuk-!-margin-bottom-0\">\n <div class=\"govuk-summary-list__row\">\n <dt class=\"govuk-summary-list__key\">\n {{ queryCreateContext === queryCreateContextEnum.RESPOND ? 'Submitted query' : 'Query subject' | rpxTranslate }}\n </dt>\n <dd class=\"govuk-summary-list__value\">\n {{ queryCreateContext === queryCreateContextEnum.RESPOND ? queryItem.subject : formGroup.get('subject')?.value }}\n </dd>\n <dd class=\"govuk-summary-list__actions\">\n <a *ngIf=\"queryCreateContext === queryCreateContextEnum.NEW_QUERY\" \n href=\"javascript:void(0)\" class=\"govuk-link\" (click)=\"goBack()\">\n {{ 'Change' | rpxTranslate }}\n </a>\n </dd>\n </div>\n </dl>\n\n <dl class=\"govuk-summary-list govuk-!-margin-bottom-0\">\n <div class=\"govuk-summary-list__row\">\n <dt class=\"govuk-summary-list__key\">\n {{ queryCreateContext === queryCreateContextEnum.RESPOND ? 'Response detail' : 'Query detail' | rpxTranslate }}\n </dt>\n <dd class=\"govuk-summary-list__value\">\n {{ formGroup.get('body')?.value }}\n </dd>\n <dd class=\"govuk-summary-list__actions\">\n <a href=\"javascript:void(0)\" class=\"govuk-link\" (click)=\"goBack()\">\n {{ 'Change' | rpxTranslate }}\n </a>\n </dd>\n </div>\n </dl>\n\n <dl *ngIf=\"queryCreateContext === queryCreateContextEnum.NEW_QUERY\" class=\"govuk-summary-list govuk-!-margin-bottom-0\">\n <div class=\"govuk-summary-list__row\">\n <dt class=\"govuk-summary-list__key\">\n {{ 'Is the query hearing related?' | rpxTranslate }}\n </dt>\n <dd class=\"govuk-summary-list__value\">\n <ng-container *ngIf=\"formGroup.get('isHearingRelated')?.value === true; else isHearingRelatedFalse\">\n {{ 'Is the query hearing related?' | rpxTranslate: null : 'Yes' }}\n </ng-container>\n <ng-template #isHearingRelatedFalse>\n {{ 'Is the query hearing related?' | rpxTranslate: null : 'No' }}\n </ng-template>\n </dd>\n <dd class=\"govuk-summary-list__actions\">\n <a href=\"javascript:void(0)\" class=\"govuk-link\" (click)=\"goBack()\">\n {{ 'Change' | rpxTranslate }}\n </a>\n </dd>\n </div>\n\n <div *ngIf=\"formGroup.get('isHearingRelated')?.value\" class=\"govuk-summary-list__row\">\n <dt class=\"govuk-summary-list__key\">\n {{ queryCreateContext === queryCreateContextEnum.NEW_QUERY\n ? 'What is the date of the hearing?'\n : 'What is the date of the hearing your query is related to?' | rpxTranslate }}\n </dt>\n <dd class=\"govuk-summary-list__value\">\n {{ formGroup.get('hearingDate')?.value | date: 'dd MMM yyyy' }}\n </dd>\n <dd class=\"govuk-summary-list__actions\">\n <a href=\"javascript:void(0)\" class=\"govuk-link\" (click)=\"goBack()\">\n {{ 'Change' | rpxTranslate }}\n </a>\n </dd>\n </div>\n </dl>\n <dl class=\"govuk-summary-list govuk-!-margin-bottom-0\" *ngIf=\"this.formGroup.get('attachments').value.length > 0\">\n <div class=\"govuk-summary-list__row\">\n <dt class=\"govuk-summary-list__key\">\n {{ queryCreateContext === queryCreateContextEnum.NEW_QUERY ? 'Upload a file to the query' : 'Document attached' | rpxTranslate }}\n </dt>\n <dd class=\"govuk-summary-list__value govuk-summary-list__value--documentAttached\">\n <ccd-query-attachments-read\n *ngIf=\"this.formGroup.get('attachments').value\"\n [attachments]=\"attachments\"\n >\n </ccd-query-attachments-read>\n </dd>\n <dd class=\"govuk-summary-list__actions\">\n <a href=\"javascript:void(0)\" class=\"govuk-link\" (click)=\"goBack()\">\n {{ 'Change' | rpxTranslate }}\n </a>\n </dd>\n </div>\n </dl>\n\n <br>\n\n <div>\n <button class=\"govuk-button govuk-button--secondary govuk-!-margin-right-3\" data-module=\"govuk-button\"\n (click)=\"goBack()\">\n {{ 'Previous' | rpxTranslate }}\n </button>\n <button class=\"govuk-button\" data-module=\"govuk-button\" type=\"submit\" (click)=\"submit()\">\n {{ 'Submit' | rpxTranslate }}\n </button>\n </div>\n </div>\n\n <ccd-query-event-completion [eventCompletionParams]=\"eventCompletionParams\"> \n </ccd-query-event-completion>\n</div>\n", styles: [".govuk-summary-list__value--documentAttached{vertical-align:middle}\n"] }]
614
671
  }], () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.CasesService }, { type: i2.CaseNotifier }, { type: i2.WorkAllocationService }, { type: i3.SessionStorageService }, { type: i4.QualifyingQuestionService }], { formGroup: [{
615
672
  type: Input
616
673
  }], queryItem: [{
@@ -619,8 +676,6 @@ export class QueryCheckYourAnswersComponent {
619
676
  type: Input
620
677
  }], eventData: [{
621
678
  type: Input
622
- }], multipleFollowUpFeature: [{
623
- type: Input
624
679
  }], backClicked: [{
625
680
  type: Output
626
681
  }], querySubmitted: [{
@@ -629,4 +684,4 @@ export class QueryCheckYourAnswersComponent {
629
684
  type: Output
630
685
  }] }); })();
631
686
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(QueryCheckYourAnswersComponent, { className: "QueryCheckYourAnswersComponent", filePath: "lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.ts", lineNumber: 28 }); })();
632
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY2hlY2steW91ci1hbnN3ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL3F1ZXJ5LW1hbmFnZW1lbnQvY29tcG9uZW50cy9xdWVyeS1jaGVjay15b3VyLWFuc3dlcnMvcXVlcnktY2hlY2steW91ci1hbnN3ZXJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL3F1ZXJ5LW1hbmFnZW1lbnQvY29tcG9uZW50cy9xdWVyeS1jaGVjay15b3VyLWFuc3dlcnMvcXVlcnktY2hlY2steW91ci1hbnN3ZXJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUNMLGdCQUFnQixFQUtqQixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckcsT0FBTyxFQUFrRCxrQkFBa0IsRUFBRSxhQUFhLEVBQUUs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YztrQkFBOUIsTUFBTTtZQUNVLDJCQUEyQjtrQkFBM0MsTUFBTTs7a0ZBbEJJLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIENhc2VFdmVudFRyaWdnZXIsXG4gIENhc2VGaWVsZCxcbiAgQ2FzZVZpZXcsXG4gIENhc2VWaWV3VHJpZ2dlcixcbiAgRXJyb3JNZXNzYWdlXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9zaGFyZWQvZG9tYWluJztcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV2ZW50Q29tcGxldGlvblBhcmFtcyB9IGZyb20gJy4uLy4uLy4uLy4uL2Nhc2UtZWRpdG9yL2RvbWFpbi9ldmVudC1jb21wbGV0aW9uLXBhcmFtcy5tb2RlbCc7XG5pbXBvcnQgeyBDYXNlTm90aWZpZXIsIENhc2VzU2VydmljZSwgV29ya0FsbG9jYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY2FzZS1lZGl0b3Ivc2VydmljZXMnO1xuaW1wb3J0IHsgQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uLCBRbUNhc2VRdWVyaWVzQ29sbGVjdGlvbiwgUXVlcnlDcmVhdGVDb250ZXh0LCBRdWVyeUxpc3RJdGVtIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IFF1ZXJ5TWFuYWdlbWVudFV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbHMvcXVlcnktbWFuYWdlbWVudC51dGlscyc7XG5pbXBvcnQgeyBGb3JtRG9jdW1lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvc2hhcmVkL2RvbWFpbi9kb2N1bWVudCc7XG5pbXBvcnQgeyBRdWFsaWZ5aW5nUXVlc3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcXVhbGlmeWluZy1xdWVzdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFRhc2sgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kb21haW4vd29yay1hbGxvY2F0aW9uL1Rhc2snO1xuaW1wb3J0IHsgVVNFUl9ERVRBSUxTIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY2QtcXVlcnktY2hlY2steW91ci1hbnN3ZXJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3F1ZXJ5LWNoZWNrLXlvdXItYW5zd2Vycy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3F1ZXJ5LWNoZWNrLXlvdXItYW5zd2Vycy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXJ5Q2hlY2tZb3VyQW5zd2Vyc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBSQUlTRV9BX1FVRVJZX0VWRU5UX1RSSUdHRVJfSUQgPSAncXVlcnlNYW5hZ2VtZW50UmFpc2VRdWVyeSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgUkVTUE9ORF9UT19RVUVSWV9FVkVOVF9UUklHR0VSX0lEID0gJ3F1ZXJ5TWFuYWdlbWVudFJlc3BvbmRRdWVyeSc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBDQVNFX1FVRVJJRVNfQ09MTEVDVElPTl9JRCA9ICdDYXNlUXVlcmllc0NvbGxlY3Rpb24nO1xuICBwdWJsaWMgcmVhZG9ubHkgRklFTERfVFlQRV9DT01QTEVYID0gJ0NvbXBsZXgnO1xuICBwdWJsaWMgcmVhZG9ubHkgRElTUExBWV9DT05URVhUX1JFQURPTkxZID0gJ1JFQURPTkxZJztcbiAgcHVibGljIHJlYWRvbmx5IFFNX1NFTEVDVF9GSVJTVF9DT0xMRUNUSU9OID0gJ3NlbGVjdEZpcnN0Q29sbGVjdGlvbic7XG4gIHB1YmxpYyByZWFkb25seSBRTV9DT0xMRUNUSU9OX1BST01QVCA9ICdwcm9tcHRRbUNvbGxlY3Rpb24nO1xuICBwdWJsaWMgcmVhZG9ubHkgQ0lWSUxfSlVSSVNESUNUSU9OID0gJ0NJVklMJztcblxuICBASW5wdXQoKSBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIHB1YmxpYyBxdWVyeUl0ZW06IFF1ZXJ5TGlzdEl0ZW07XG4gIEBJbnB1dCgpIHB1YmxpYyBxdWVyeUNyZWF0ZUNvbnRleHQ6IFF1ZXJ5Q3JlYXRlQ29udGV4dDtcbiAgQElucHV0KCkgcHVibGljIGV2ZW50RGF0YTogQ2FzZUV2ZW50VHJpZ2dlciB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGVGb2xsb3dVcEZlYXR1cmU6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBwdWJsaWMgYmFja0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcXVlcnlTdWJtaXR0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgY2FsbGJhY2tDb25maXJtYXRpb25NZXNzYWdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9PigpO1xuXG4gIHByaXZhdGUgY2FzZVZpZXdUcmlnZ2VyOiBDYXNlVmlld1RyaWdnZXI7XG4gIHB1YmxpYyBjYXNlRGV0YWlsczogQ2FzZVZpZXc7XG4gIHByaXZhdGUgcXVlcnlJZDogc3RyaW5nO1xuICBwcml2YXRlIHRpZDogc3RyaW5nO1xuICBwcml2YXRlIGNyZWF0ZUV2ZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgc2VhcmNoVGFza3NTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwdWJsaWMgcXVlcnlDcmVhdGVDb250ZXh0RW51bSA9IFF1ZXJ5Q3JlYXRlQ29udGV4dDtcbiAgcHVibGljIGV2ZW50Q29tcGxldGlvblBhcmFtczogRXZlbnRDb21wbGV0aW9uUGFyYW1zO1xuICBwdWJsaWMgY2FzZVF1ZXJpZXNDb2xsZWN0aW9uczogQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uW107XG4gIHB1YmxpYyBmaWVsZElkOiBzdHJpbmc7XG4gIHB1YmxpYyBhdHRhY2htZW50czogRm9ybURvY3VtZW50W107XG5cbiAgcHVibGljIGVycm9yTWVzc2FnZXM6IEVycm9yTWVzc2FnZVtdID0gW107XG4gIHB1YmxpYyBmaWx0ZXJlZFRhc2tzOiBUYXNrW10gPSBbXTtcbiAgcHVibGljIHJlYWR5VG9TdWJtaXQ6IGJvb2xlYW47XG4gIHB1YmxpYyBpc1N1Ym1pdHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZXNTZXJ2aWNlOiBDYXNlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlTm90aWZpZXI6IENhc2VOb3RpZmllcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdvcmtBbGxvY2F0aW9uU2VydmljZTogV29ya0FsbG9jYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBxdWFsaWZ5aW5nUXVlc3Rpb25TZXJ2aWNlOiBRdWFsaWZ5aW5nUXVlc3Rpb25TZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMucWlkO1xuICAgIHRoaXMudGlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcz8udGlkO1xuXG4gICAgdGhpcy5jYXNlTm90aWZpZXIuY2FzZVZpZXcucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKGNhc2VEZXRhaWxzKSA9PiB7XG4gICAgICB0aGlzLmNhc2VEZXRhaWxzID0gY2FzZURldGFpbHM7XG5cbiAgICAgIC8vIEZpbmQgdGhlIGFwcHJvcHJpYXRlIGV2ZW50IHRyaWdnZXIgYmFzZWQgb24gdGhlIHF1ZXJ5Q3JlYXRlQ29udGV4dFxuICAgICAgdGhpcy5jYXNlVmlld1RyaWdnZXIgPSB0aGlzLmNhc2VEZXRhaWxzLnRyaWdnZXJzLmZpbmQoKHRyaWdnZXIpID0+XG4gICAgICAgIHRoaXMucXVlcnlDcmVhdGVDb250ZXh0ICE9PSBRdWVyeUNyZWF0ZUNvbnRleHQuUkVTUE9ORFxuICAgICAgICAvLyBJZiB0aGUgY29udGV4dCBpcyBub3QgJ1JFU1BPTkQnLCBmaW5kIHRoZSB0cmlnZ2VyIHdpdGggdGhlIElEIGZvciByYWlzaW5nIGEgcXVlcnlcbiAgICAgICAgICA/IHRyaWdnZXIuaWQgPT09IHRoaXMuUkFJU0VfQV9RVUVSWV9FVkVOVF9UUklHR0VSX0lEXG4gICAgICAgIC8vIElmIHRoZSBjb250ZXh0IGlzICdSRVNQT05EJywgZmluZCB0aGUgdHJpZ2dlciB3aXRoIHRoZSBJRCBmb3IgcmVzcG9uZGluZyB0byBhIHF1ZXJ5XG4gICAgICAgICAgOiB0cmlnZ2VyLmlkID09PSB0aGlzLlJFU1BPTkRfVE9fUVVFUllfRVZFTlRfVFJJR0dFUl9JRFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8vIEdldCB0aGUgZG9jdW1lbnQgYXR0YWNobWVudHNcbiAgICB0aGlzLmdldERvY3VtZW50QXR0YWNobWVudHMoKTtcblxuICAgIHRoaXMuc2V0Q2FzZVF1ZXJpZXNDb2xsZWN0aW9uRGF0YSgpO1xuXG4gICAgaWYgKHRoaXMucXVlcnlDcmVhdGVDb250ZXh0ID09PSBRdWVyeUNyZWF0ZUNvbnRleHQuUkVTUE9ORCkge1xuICAgICAgdGhpcy5zZWFyY2hUYXNrc1N1YnNjcmlwdGlvbiA9IHRoaXMud29ya0FsbG9jYXRpb25TZXJ2aWNlLmdldFRhc2tzQnlDYXNlSWRBbmRFdmVudElkKHRoaXMuUkVTUE9ORF9UT19RVUVSWV9FVkVOVF9UUklHR0VSX0lELFxuICAgICAgICB0aGlzLmNhc2VEZXRhaWxzLmNhc2VfaWQsIHRoaXMuY2FzZURldGFpbHMuY2FzZV90eXBlLmlkLCB0aGlzLmNhc2VEZXRhaWxzLmNhc2VfdHlwZS5qdXJpc2RpY3Rpb24uaWQpXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgLy8gRmlsdGVyIHRhc2sgYnkgcXVlcnkgaWRcbiAgICAgICAgICAgIGlmICh0aGlzLnRpZCkge1xuICAgICAgICAgICAgICBpZiAocmVzcG9uc2UudGFza3M/Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkVGFza3MgPSByZXNwb25zZS50YXNrcz8uZmlsdGVyKCh0YXNrOiBUYXNrKSA9PiB0YXNrLmlkID09PSB0aGlzLnRpZCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFRhc2tzID0gcmVzcG9uc2UudGFza3M7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5yZWFkeVRvU3VibWl0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIHNlYXJjaFRhc2tzU3Vic2NyaXB0aW9uOicsIGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMucmVhZHlUb1N1Ym1pdCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVhZHlUb1N1Ym1pdCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlRXZlbnRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zZWFyY2hUYXNrc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnb0JhY2soKTogdm9pZCB7XG4gICAgdGhpcy5iYWNrQ2xpY2tlZC5lbWl0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIHN1Ym1pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBmaWVsZElkIGlzIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgaWYgKCF0aGlzLmZpZWxkSWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOiBGaWVsZCBJRCBpcyBtaXNzaW5nLiBDYW5ub3QgcHJvY2VlZCB3aXRoIHN1Ym1pc3Npb24uJyk7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ0Vycm9yJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgY2FzZSBpcyBub3QgY29uZmlndXJlZCBmb3IgcXVlcnkgbWFuYWdlbWVudC4nLFxuICAgICAgICAgIGZpZWxkSWQ6ICdmaWVsZC1pZCdcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IGxlZnQ6IDAsIHRvcDogMCwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdlbmVyYXRlQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uRGF0YSgpO1xuICAgIGNvbnN0IGNyZWF0ZUV2ZW50JCA9IHRoaXMuY3JlYXRlRXZlbnQoZGF0YSk7XG5cbiAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5xdWVyeUNyZWF0ZUNvbnRleHQgPT09IFF1ZXJ5Q3JlYXRlQ29udGV4dC5SRVNQT05EKSB7XG4gICAgICBpZiAodGhpcy5maWx0ZXJlZFRhc2tzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlRXZlbnRTdWJzY3JpcHRpb24gPSBjcmVhdGVFdmVudCQucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKGNyZWF0ZUV2ZW50UmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1hdGlvbkJvZHkgPSBjcmVhdGVFdmVudFJlc3BvbnNlPy5hZnRlcl9zdWJtaXRfY2FsbGJhY2tfcmVzcG9uc2U/LmNvbmZpcm1hdGlvbl9ib2R5O1xuICAgICAgICAgICAgY29uc3QgY29uZmlybWF0aW9uSGVhZGVyID0gY3JlYXRlRXZlbnRSZXNwb25zZT8uYWZ0ZXJfc3VibWl0X2NhbGxiYWNrX3Jlc3BvbnNlPy5jb25maXJtYXRpb25faGVhZGVyO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja0NvbmZpcm1hdGlvbk1lc3NhZ2UuZW1pdCh7IGJvZHk6IGNvbmZpcm1hdGlvbkJvZHksIGhlYWRlcjogY29uZmlybWF0aW9uSGVhZGVyIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy53b3JrQWxsb2NhdGlvblNlcnZpY2UuY29tcGxldGVUYXNrKFxuICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkVGFza3NbMF0uaWQsXG4gICAgICAgICAgICAgIHRoaXMuY2FzZVZpZXdUcmlnZ2VyLm5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICgpID0+IHRoaXMuZmluYWxpc2VTdWJtaXNzaW9uKCksXG4gICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnJvcilcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjogTm8gdGFzayB0byBjb21wbGV0ZSB3YXMgZm91bmQnKTtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiAnRXJyb3InLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdObyB0YXNrIHRvIGNvbXBsZXRlIHdhcyBmb3VuZCcsXG4gICAgICAgICAgICBmaWVsZElkOiAnZmllbGQtaWQnXG4gICAgICAgICAgfVxuICAgICAgICBdO1xuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyBsZWZ0OiAwLCB0b3A6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNyZWF0ZUV2ZW50U3Vic2NyaXB0aW9uID0gY3JlYXRlRXZlbnQkLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChjYWxsYmFja1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5maW5hbGlzZVN1Ym1pc3Npb24oKTtcbiAgICAgICAgICBjb25zdCBjb25maXJtYXRpb25Cb2R5ID0gY2FsbGJhY2tSZXNwb25zZT8uYWZ0ZXJfc3VibWl0X2NhbGxiYWNrX3Jlc3BvbnNlPy5jb25maXJtYXRpb25fYm9keTtcbiAgICAgICAgICBjb25zdCBjb25maXJtYXRpb25IZWFkZXIgPSBjYWxsYmFja1Jlc3BvbnNlPy5hZnRlcl9zdWJtaXRfY2FsbGJhY2tfcmVzcG9uc2U/LmNvbmZpcm1hdGlvbl9oZWFkZXI7XG4gICAgICAgICAgdGhpcy5jYWxsYmFja0NvbmZpcm1hdGlvbk1lc3NhZ2UuZW1pdCh7IGJvZHk6IGNvbmZpcm1hdGlvbkJvZHksIGhlYWRlcjogY29uZmlybWF0aW9uSGVhZGVyIH0pO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVycm9yKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFdmVudChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNhc2VzU2VydmljZS5jcmVhdGVFdmVudCh0aGlzLmNhc2VEZXRhaWxzLCB7XG4gICAgICBkYXRhLFxuICAgICAgZXZlbnQ6IHtcbiAgICAgICAgaWQ6IHRoaXMuY2FzZVZpZXdUcmlnZ2VyPy5pZCxcbiAgICAgICAgc3VtbWFyeTogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmNhc2VWaWV3VHJpZ2dlcj8uZGVzY3JpcHRpb25cbiAgICAgIH0sXG4gICAgICBldmVudF90b2tlbjogdGhpcy5ldmVudERhdGE/LmV2ZW50X3Rva2VuLFxuICAgICAgaWdub3JlX3dhcm5pbmc6IGZhbHNlXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZpbmFsaXNlU3VibWlzc2lvbigpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5U3VibWl0dGVkLmVtaXQodHJ1ZSk7XG4gICAgdGhpcy5xdWFsaWZ5aW5nUXVlc3Rpb25TZXJ2aWNlLmNsZWFyUXVhbGlmeWluZ1F1ZXN0aW9uU2VsZWN0aW9uKCk7XG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyb3I6IGFueSk6IHZvaWQge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIEFQSSBjYWxsczonLCBlcnJvcik7XG5cbiAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLycsICdzZXJ2aWNlLWRvd24nXSk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uRGF0YSgpOiBRbUNhc2VRdWVyaWVzQ29sbGVjdGlvbiB7XG4gICAgY29uc3QgY3VycmVudFVzZXJEZXRhaWxzID0gSlNPTi5wYXJzZSh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKFVTRVJfREVUQUlMUykpO1xuXG4gICAgY29uc3QgY2FzZU1lc3NhZ2UgPSB0aGlzLnF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gUXVlcnlDcmVhdGVDb250ZXh0Lk5FV19RVUVSWVxuICAgICAgPyBRdWVyeU1hbmFnZW1lbnRVdGlscy5nZXROZXdRdWVyeURhdGEodGhpcy5mb3JtR3JvdXAsIGN1cnJlbnRVc2VyRGV0YWlscylcbiAgICAgIDogUXVlcnlNYW5hZ2VtZW50VXRpbHMuZ2V0UmVzcG9uZE9yRm9sbG93dXBRdWVyeURhdGEodGhpcy5mb3JtR3JvdXAsIHRoaXMucXVlcnlJdGVtLCBjdXJyZW50VXNlckRldGFpbHMsIHRoaXMucXVlcnlDcmVhdGVDb250ZXh0KTtcblxuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmRhdGFpZDsgLy8gR2V0IHRoZSBtZXNzYWdlIElEIGZyb20gcm91dGUgcGFyYW1zIChpZiBwcmVzZW50KVxuICAgIGNvbnN0IGlzTmV3UXVlcnkgPSB0aGlzLnF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gUXVlcnlDcmVhdGVDb250ZXh0Lk5FV19RVUVSWTsgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIG5ldyBxdWVyeVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGZpZWxkIElEIGhhcyBiZWVuIHNldCBkeW5hbWljYWxseVxuICAgIGlmICghdGhpcy5maWVsZElkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjogRmllbGQgSUQgZm9yIENhc2VRdWVyaWVzQ29sbGVjdGlvbiBub3QgZm91bmQuIENhbm5vdCBwcm9jZWVkIHdpdGggZGF0YSBnZW5lcmF0aW9uLicpO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJywgJ3NlcnZpY2UtZG93biddKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIG5ldyBxdWVyeSBkYXRhIHN0cnVjdHVyZVxuICAgIGNvbnN0IG5ld1F1ZXJ5RGF0YTogUW1DYXNlUXVlcmllc0NvbGxlY3Rpb24gPSB7fTtcblxuICAgIGlmICh0aGlzLmNhc2VRdWVyaWVzQ29sbGVjdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgbGV0IG1hdGNoZWRDb2xsZWN0aW9uO1xuXG4gICAgICAvLyBJZiBpdCdzIG5vdCBhIG5ldyBxdWVyeSwgdHJ5IHRvIGZpbmQgdGhlIGV4aXN0aW5nIGNvbGxlY3Rpb24gd2l0aCB0aGUgbWVzc2FnZSBJRFxuICAgICAgaWYgKCFpc05ld1F1ZXJ5ICYmIG1lc3NhZ2VJZCkge1xuICAgICAgICBtYXRjaGVkQ29sbGVjdGlvbiA9IHRoaXMuY2FzZVF1ZXJpZXNDb2xsZWN0aW9ucy5maW5kKChjb2xsZWN0aW9uKSA9PlxuICAgICAgICAgIGNvbGxlY3Rpb24uY2FzZU1lc3NhZ2VzLnNvbWUoKG1lc3NhZ2UpID0+IG1lc3NhZ2UudmFsdWUuaWQgPT09IG1lc3NhZ2VJZClcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1hdGNoZWRDb2xsZWN0aW9uKSB7XG4gICAgICAgIC8vIEFwcGVuZCB0aGUgbmV3IGNhc2UgbWVzc2FnZSB0byB0aGUgbWF0Y2hlZCBjb2xsZWN0aW9uJ3MgY2FzZU1lc3NhZ2VzXG4gICAgICAgIG1hdGNoZWRDb2xsZWN0aW9uLmNhc2VNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICBpZDogbnVsbCxcbiAgICAgICAgICB2YWx1ZTogY2FzZU1lc3NhZ2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQWRkIHRoZSBtYXRjaGVkIGNvbGxlY3Rpb24gdG8gbmV3UXVlcnlEYXRhXG4gICAgICAgIG5ld1F1ZXJ5RGF0YVt0aGlzLmZpZWxkSWRdID0ge1xuICAgICAgICAgIC4uLm1hdGNoZWRDb2xsZWN0aW9uLCAvLyBLZWVwIGV4aXN0aW5nIGRhdGEgaW50YWN0XG4gICAgICAgICAgY2FzZU1lc3NhZ2VzOiBbLi4ubWF0Y2hlZENvbGxlY3Rpb24uY2FzZU1lc3NhZ2VzXSAvLyBBcHBlbmQgdGhlIHVwZGF0ZWQgbWVzc2FnZXMgYXJyYXlcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFVzZSBwYXJ0eU5hbWUgZnJvbSB0aGUgZmlyc3QgY29sbGVjdGlvbiAoYXNzdW1wdGlvbjogYWxsIHNoYXJlIHRoZSBzYW1lIHBhcnR5KVxuICAgICAgICBjb25zdCBvcmlnaW5hbFBhcnR5TmFtZSA9IHRoaXMuY2FzZVF1ZXJpZXNDb2xsZWN0aW9uc1swXS5wYXJ0eU5hbWU7XG5cbiAgICAgICAgLy8gSWYgbm8gY29sbGVjdGlvbiBtYXRjaGVzLCBvciBpdCdzIGEgbmV3IHF1ZXJ5XG4gICAgICAgIG5ld1F1ZXJ5RGF0YVt0aGlzLmZpZWxkSWRdID0ge1xuICAgICAgICAgIHBhcnR5TmFtZTogb3JpZ2luYWxQYXJ0eU5hbWUsXG4gICAgICAgICAgcm9sZU9uQ2FzZTogJycsIC8vIE5vdCByZXR1cm5lZCBieSBDQ0RcbiAgICAgICAgICBjYXNlTWVzc2FnZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6IG51bGwsXG4gICAgICAgICAgICAgIHZhbHVlOiBjYXNlTWVzc2FnZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJZiBjYXNlUXVlcmllc0NvbGxlY3Rpb25zIGlzIG5vdCBlbXB0eSwgYXBwZW5kIGl0cyBkYXRhXG4gICAgICAgIG5ld1F1ZXJ5RGF0YVt0aGlzLmZpZWxkSWRdLmNhc2VNZXNzYWdlcy5wdXNoKFxuICAgICAgICAgIC4uLnRoaXMuY2FzZVF1ZXJpZXNDb2xsZWN0aW9ucy5mbGF0TWFwKChjb2xsZWN0aW9uKSA9PiBjb2xsZWN0aW9uLmNhc2VNZXNzYWdlcylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGV4aXN0aW5nIGNvbGxlY3Rpb25zLCBjcmVhdGUgYSBuZXcgb25lIChlLmcuLCBmb3IgbmV3IHF1ZXJpZXMpXG4gICAgICBuZXdRdWVyeURhdGFbdGhpcy5maWVsZElkXSA9IHtcbiAgICAgICAgcGFydHlOYW1lOiBjdXJyZW50VXNlckRldGFpbHM/Lm5hbWUgfHwgYCR7Y3VycmVudFVzZXJEZXRhaWxzPy5mb3JlbmFtZX0gJHtjdXJyZW50VXNlckRldGFpbHM/LnN1cm5hbWV9YCwgLy8gTm90IHJldHVybmVkIGJ5IENDRFxuICAgICAgICByb2xlT25DYXNlOiAnJywgLy8gTm90IHJldHVybmVkIGJ5IENDRFxuICAgICAgICBjYXNlTWVzc2FnZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogbnVsbCxcbiAgICAgICAgICAgIHZhbHVlOiBjYXNlTWVzc2FnZVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1F1ZXJ5RGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDYXNlUXVlcmllc0NvbGxlY3Rpb25EYXRhKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV2ZW50RGF0YT8uY2FzZV9maWVsZHM/Lmxlbmd0aCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgbXVsdGlwbGUgcW1DYXNlUXVlcmllc0NvbGxlY3Rpb25zIHRoYXQgYXJlIG5vdCB0byBiZSBhcHBlYXJpbmcgaW4gdGhlIGV2ZW50RGF0YVxuICAgICAgLy8gQ291bnRzIG51bWJlciBxbUNhc2VRdWVyaWVzQ29sbGVjdGlvbnNcbiAgICAgIGNvbnN0IG51bWJlck9mQ2FzZVF1ZXJpZXNDb2xsZWN0aW9ucyA9IHRoaXMuZXZlbnREYXRhPy5jYXNlX2ZpZWxkcz8uZmlsdGVyKFxuICAgICAgICAoY2FzZUZpZWxkKSA9PlxuICAgICAgICAgIGNhc2VGaWVsZC5maWVsZF90eXBlLmlkID09PSB0aGlzLkNBU0VfUVVFUklFU19DT0xMRUNUSU9OX0lEICYmXG4gICAgICAgICAgY2FzZUZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gdGhpcy5GSUVMRF9UWVBFX0NPTVBMRVggJiYgY2FzZUZpZWxkLmRpc3BsYXlfY29udGV4dCAhPT0gdGhpcy5ESVNQTEFZX0NPTlRFWFRfUkVBRE9OTFlcbiAgICAgICk/Lmxlbmd0aCB8fCAwO1xuXG4gICAgICB0aGlzLmNhc2VRdWVyaWVzQ29sbGVjdGlvbnMgPSB0aGlzLmV2ZW50RGF0YS5jYXNlX2ZpZWxkcy5yZWR1Y2UoKGFjYywgY2FzZUZpZWxkKSA9PiB7XG4gICAgICAgIC8vIEV4dHJhY3QgdGhlIElEIGJhc2VkIG9uIGNvbmRpdGlvbnMsIHVwZGF0aW5nIHRoaXMuZmllbGRJZCBkeW5hbWljYWxseVxuICAgICAgICB0aGlzLmV4dHJhY3RDYXNlUXVlcnlJZChjYXNlRmllbGQsIG51bWJlck9mQ2FzZVF1ZXJpZXNDb2xsZWN0aW9ucyk7XG5cbiAgICAgICAgY29uc3QgZXh0cmFjdGVkQ2FzZVF1ZXJpZXNGcm9tQ2FzZUZpZWxkID0gUXVlcnlNYW5hZ2VtZW50VXRpbHMuZXh0cmFjdENhc2VRdWVyaWVzRnJvbUNhc2VGaWVsZChjYXNlRmllbGQpO1xuICAgICAgICBpZiAoZXh0cmFjdGVkQ2FzZVF1ZXJpZXNGcm9tQ2FzZUZpZWxkICYmIHR5cGVvZiBleHRyYWN0ZWRDYXNlUXVlcmllc0Zyb21DYXNlRmllbGQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgYWNjLnB1c2goZXh0cmFjdGVkQ2FzZVF1ZXJpZXNGcm9tQ2FzZUZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwgW10pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdENhc2VRdWVyeUlkKGRhdGE6IENhc2VGaWVsZCwgY291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHsgaWQsIHZhbHVlIH0gPSBkYXRhO1xuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmRhdGFpZDtcblxuICAgIC8vIENoZWNrIGlmIHRoZSBmaWVsZF90eXBlIG1hdGNoZXMgQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uIGFuZCB0eXBlIGlzIENvbXBsZXhcbiAgICBpZiAoZGF0YS5maWVsZF90eXBlLmlkID09PSB0aGlzLkNBU0VfUVVFUklFU19DT0xMRUNUSU9OX0lEICYmIGRhdGEuZmllbGRfdHlwZS50eXBlID09PSB0aGlzLkZJRUxEX1RZUEVfQ09NUExFWCkge1xuICAgICAgaWYgKHRoaXMuaXNOZXdRdWVyeUNvbnRleHQoZGF0YSkpIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBxbUNhc2VRdWVyaWVzQ29sbGVjdGlvbiwgcGljayB0aGUgb25lIHdpdGggdGhlIGxvd2VzdCBvcmRlclxuICAgICAgICBpZiAoY291bnQgPiAxKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmhhbmRsZU11bHRpcGxlQ29sbGVjdGlvbnMoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTZXQgdGhlIGZpZWxkIElEIGR5bmFtaWNhbGx5IGJhc2VkIG9uIHRoZSBleHRyYWN0ZWQgZGF0YVxuICAgICAgICAgIHRoaXMuZmllbGRJZCA9IGlkOyAvLyBTdG9yZSB0aGUgSUQgZm9yIHVzZSBpbiBnZW5lcmF0aW5nIG5ld1F1ZXJ5RGF0YVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIG1lc3NhZ2VJZCBpcyBwcmVzZW50LCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGNhc2UgbWVzc2FnZVxuICAgICAgdGhpcy5zZXRNZXNzYWdlRmllbGRJZChtZXNzYWdlSWQsIHZhbHVlLCBpZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRNZXNzYWdlRmllbGRJZChtZXNzYWdlSWQsIHZhbHVlLCBpZDogc3RyaW5nKSB7XG4gICAgaWYgKG1lc3NhZ2VJZCAmJiB2YWx1ZT8uY2FzZU1lc3NhZ2VzKSB7XG4gICAgICAvLyBJZiBhIG1hdGNoaW5nIG1lc3NhZ2UgaXMgZm91bmQsIHNldCB0aGUgZmllbGRJZCB0byB0aGUgY29ycmVzcG9uZGluZyBpZFxuICAgICAgY29uc3QgbWF0Y2hlZE1lc3NhZ2UgPSB2YWx1ZT8uY2FzZU1lc3NhZ2VzPy5maW5kKChtZXNzYWdlKSA9PiBtZXNzYWdlLnZhbHVlLmlkID09PSBtZXNzYWdlSWQpO1xuICAgICAgaWYgKG1hdGNoZWRNZXNzYWdlKSB7XG4gICAgICAgIHRoaXMuZmllbGRJZCA9IGlkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNOZXdRdWVyeUNvbnRleHQoZGF0YTogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlDcmVhdGVDb250ZXh0ID09PSBRdWVyeUNyZWF0ZUNvbnRleHQuTkVXX1FVRVJZICYmIGRhdGEuZGlzcGxheV9jb250ZXh0ICE9PSB0aGlzLkRJU1BMQVlfQ09OVEVYVF9SRUFET05MWTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTXVsdGlwbGVDb2xsZWN0aW9ucygpOiBib29sZWFuIHtcbiAgICBjb25zdCBqdXJpc2RpY3Rpb25JZCA9IHRoaXMuY2FzZURldGFpbHM/LmNhc2VfdHlwZT8uanVyaXNkaWN0aW9uPy5pZDtcblxuICAgIGlmICghanVyaXNkaWN0aW9uSWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0p1cmlzZGljdGlvbiBJRCBpcyBtaXNzaW5nLicpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmdldENvbGxlY3Rpb25TZWxlY3Rpb25NZXRob2QoanVyaXNkaWN0aW9uSWQpID09PSB0aGlzLlFNX1NFTEVDVF9GSVJTVF9DT0xMRUNUSU9OKSB7XG4gICAgICAvLyBQaWNrIHRoZSBjb2xsZWN0aW9uIHdpdGggdGhlIGxvd2VzdCBvcmRlclxuICAgICAgdGhpcy5maWVsZElkID0gdGhpcy5nZXRDYXNlUXVlcmllc0NvbGxlY3Rpb25GaWVsZE9yZGVyRnJvbVdpemFyZFBhZ2VzKCk/LmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEaXNwbGF5IEVycm9yLCBmb3Igbm93LCB1bnRpbCBFWFVJLTI2NDQgaXMgaW1wbGVtZW50ZWRcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yOiBNdWx0aXBsZSBDYXNlUXVlcmllc0NvbGxlY3Rpb25zIGFyZSBub3Qgc3VwcG9ydGVkIHlldCBmb3IgdGhlICR7anVyaXNkaWN0aW9uSWR9IGp1cmlzZGljdGlvbmApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYXNlUXVlcmllc0NvbGxlY3Rpb25GaWVsZE9yZGVyRnJvbVdpemFyZFBhZ2VzKCk6IENhc2VGaWVsZCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgY2FuZGlkYXRlRmllbGRzID0gdGhpcy5ldmVudERhdGE/LmNhc2VfZmllbGRzPy5maWx0ZXIoXG4gICAgICAoZmllbGQpID0+XG4gICAgICAgIGZpZWxkLmZpZWxkX3R5cGUuaWQgPT09IHRoaXMuQ0FTRV9RVUVSSUVTX0NPTExFQ1RJT05fSUQgJiZcbiAgICAgICAgZmllbGQuZmllbGRfdHlwZS50eXBlID09PSB0aGlzLkZJRUxEX1RZUEVfQ09NUExFWCAmJlxuICAgICAgICBmaWVsZC5kaXNwbGF5X2NvbnRleHQgIT09IHRoaXMuRElTUExBWV9DT05URVhUX1JFQURPTkxZXG4gICAgKTtcblxuICAgIGlmICghY2FuZGlkYXRlRmllbGRzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3RQYWdlRmllbGRzID0gdGhpcy5ldmVudERhdGE/LndpemFyZF9wYWdlcz8uWzBdPy53aXphcmRfcGFnZV9maWVsZHM7XG5cbiAgICBpZiAoIWZpcnN0UGFnZUZpZWxkcykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FuZGlkYXRlRmllbGRzXG4gICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICBjb25zdCB3aXphcmRGaWVsZCA9IGZpcnN0UGFnZUZpZWxkcy5maW5kKChmKSA9PiBmLmNhc2VfZmllbGRfaWQgPT09IGZpZWxkLmlkKTtcbiAgICAgICAgcmV0dXJuIHsgZmllbGQsIG9yZGVyOiB3aXphcmRGaWVsZD8ub3JkZXIgPz8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfTtcbiAgICAgIH0pXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpWzBdPy5maWVsZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29sbGVjdGlvblNlbGVjdGlvbk1ldGhvZChqdXJpc2RpY3Rpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGp1cmlzZGljdGlvbi50b1VwcGVyQ2FzZSgpID09PSB0aGlzLkNJVklMX0pVUklTRElDVElPTiA/IHRoaXMuUU1fU0VMRUNUX0ZJUlNUX0NPTExFQ1RJT04gOiB0aGlzLlFNX0NPTExFQ1RJT05fUFJPTVBUO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREb2N1bWVudEF0dGFjaG1lbnRzKCk6IHZvaWQge1xuICAgIGNvbnN0IGF0dGFjaG1lbnRzVmFsdWUgPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ2F0dGFjaG1lbnRzJykudmFsdWU7XG4gICAgaWYgKGF0dGFjaG1lbnRzVmFsdWUgJiYgYXR0YWNobWVudHNWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBkb2N1bWVudHMgPSBhdHRhY2htZW50c1ZhbHVlO1xuICAgICAgdGhpcy5hdHRhY2htZW50cyA9IGRvY3VtZW50cy5tYXAoUXVlcnlNYW5hZ2VtZW50VXRpbHMuZG9jdW1lbnRUb0NvbGxlY3Rpb25Gb3JtRG9jdW1lbnQpO1xuICAgIH1cbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1yb3dcIiAqbmdJZj1cInJlYWR5VG9TdWJtaXRcIj5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLXR3by10aGlyZHMtZnJvbS1kZXNrdG9wXCI+XG4gICAgPCEtLSBFcnJvciBtZXNzYWdlIHN1bW1hcnkgLS0+XG4gICAgPGRpdiAqbmdJZj1cImVycm9yTWVzc2FnZXMubGVuZ3RoID4gMFwiIGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeVwiXG4gICAgICBhcmlhLWxhYmVsbGVkYnk9XCJlcnJvci1zdW1tYXJ5LXRpdGxlXCIgcm9sZT1cImFsZXJ0XCIgdGFiaW5kZXg9XCItMVwiXG4gICAgICBkYXRhLW1vZHVsZT1cImdvdnVrLWVycm9yLXN1bW1hcnlcIj5cbiAgICAgPGgyIGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fdGl0bGVcIiBpZD1cImVycm9yLXN1bW1hcnktdGl0bGVcIj5cbiAgICAgICB7eyAnVGhlcmUgaXMgYSBwcm9ibGVtJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICA8L2gyPlxuICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZXJyb3Itc3VtbWFyeV9fYm9keVwiPlxuICAgICAgIDx1bCBjbGFzcz1cImdvdnVrLWxpc3QgZ292dWstZXJyb3Itc3VtbWFyeV9fbGlzdFwiPlxuICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBlcnJvck1lc3NhZ2Ugb2YgZXJyb3JNZXNzYWdlc1wiPlxuICAgICAgICAgICA8YSBbaWRdPVwiJ2Vycm9yLScgKyBlcnJvck1lc3NhZ2UuZmllbGRJZFwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxuICAgICAgICAgICAgIGNsYXNzPVwidmFsaWRhdGlvbi1lcnJvclwiPnt7IGVycm9yTWVzc2FnZS5kZXNjcmlwdGlvbiB8IHJweFRyYW5zbGF0ZSB9fTwvYT5cbiAgICAgICAgIDwvbGk+XG4gICAgICAgPC91bD5cbiAgICAgPC9kaXY+XG4gICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVyeUNyZWF0ZUNvbnRleHQgPT09IHF1ZXJ5Q3JlYXRlQ29udGV4dEVudW0uTkVXX1FVRVJZXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstY2FwdGlvbi1sXCI+e3sgJ1JhaXNlIGEgcXVlcnknIHwgcnB4VHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8aDEgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLWxcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVyeUNyZWF0ZUNvbnRleHQgPT09IHF1ZXJ5Q3JlYXRlQ29udGV4dEVudW0uUkVTUE9ORDsgZWxzZSBkZWZhdWx0Q2hlY2tZb3VyQW5zd2Vyc1RpdGxlXCI+XG4gICAgICAgIHt7ICdSZXZpZXcgcXVlcnkgcmVzcG9uc2UgZGV0YWlscycgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDaGVja1lvdXJBbnN3ZXJzVGl0bGU+XG4gICAgICAgIHt7ICdSZXZpZXcgcXVlcnkgZGV0YWlscycgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9oMT5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstIS1tYXJnaW4tYm90dG9tLTRcIj5cbiAgICAgIDxjY2QtcXVlcnktY2FzZS1kZXRhaWxzLWhlYWRlciBbY2FzZURldGFpbHNdPVwiY2FzZURldGFpbHNcIj48L2NjZC1xdWVyeS1jYXNlLWRldGFpbHMtaGVhZGVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRsICpuZ0lmPVwicXVlcnlDcmVhdGVDb250ZXh0ICE9PSBxdWVyeUNyZWF0ZUNvbnRleHRFbnVtLkZPTExPV1VQXCIgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3QgZ292dWstIS1tYXJnaW4tYm90dG9tLTBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX3Jvd1wiPlxuICAgICAgICA8ZHQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX2tleVwiPlxuICAgICAgICAgIHt7IHF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gcXVlcnlDcmVhdGVDb250ZXh0RW51bS5SRVNQT05EID8gJ1N1Ym1pdHRlZCBxdWVyeScgOiAnUXVlcnkgc3ViamVjdCcgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgPC9kdD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X192YWx1ZVwiPlxuICAgICAgICAgIHt7IHF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gcXVlcnlDcmVhdGVDb250ZXh0RW51bS5SRVNQT05EID8gcXVlcnlJdGVtLnN1YmplY3QgOiBmb3JtR3JvdXAuZ2V0KCdzdWJqZWN0Jyk/LnZhbHVlIH19XG4gICAgICAgIDwvZGQ+XG4gICAgICAgIDxkZCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fYWN0aW9uc1wiPlxuICAgICAgICAgIDxhICAqbmdJZj1cInF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gcXVlcnlDcmVhdGVDb250ZXh0RW51bS5ORVdfUVVFUllcIiBcbiAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cImdvdnVrLWxpbmtcIiAoY2xpY2spPVwiZ29CYWNrKClcIj5cbiAgICAgICAgICAgIHt7ICdDaGFuZ2UnIHwgcnB4VHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2RkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kbD5cblxuICAgIDxkbCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdCBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fcm93XCI+XG4gICAgICAgIDxkdCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fa2V5XCI+XG4gICAgICAgICAge3sgcXVlcnlDcmVhdGVDb250ZXh0ID09PSBxdWVyeUNyZWF0ZUNvbnRleHRFbnVtLlJFU1BPTkQgPyAnUmVzcG9uc2UgZGV0YWlsJyA6ICdRdWVyeSBkZXRhaWwnIHwgcnB4VHJhbnNsYXRlIH19XG4gICAgICAgIDwvZHQ+XG4gICAgICAgIDxkZCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fdmFsdWVcIj5cbiAgICAgICAgICB7eyBmb3JtR3JvdXAuZ2V0KCdib2R5Jyk/LnZhbHVlIH19XG4gICAgICAgIDwvZGQ+XG4gICAgICAgIDxkZCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fYWN0aW9uc1wiPlxuICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cImdvdnVrLWxpbmtcIiAoY2xpY2spPVwiZ29CYWNrKClcIj5cbiAgICAgICAgICAgIHt7ICdDaGFuZ2UnIHwgcnB4VHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2RkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kbD5cblxuICAgIDxkbCAqbmdJZj1cInF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gcXVlcnlDcmVhdGVDb250ZXh0RW51bS5ORVdfUVVFUllcIiBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdCBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fcm93XCI+XG4gICAgICAgIDxkdCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fa2V5XCI+XG4gICAgICAgICAge3sgJ0lzIHRoZSBxdWVyeSBoZWFyaW5nIHJlbGF0ZWQ/JyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2R0PlxuICAgICAgICA8ZGQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX3ZhbHVlXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm1Hcm91cC5nZXQoJ2lzSGVhcmluZ1JlbGF0ZWQnKT8udmFsdWUgPT09IHRydWU7IGVsc2UgaXNIZWFyaW5nUmVsYXRlZEZhbHNlXCI+XG4gICAgICAgICAgICB7eyAnSXMgdGhlIHF1ZXJ5IGhlYXJpbmcgcmVsYXRlZD8nIHwgcnB4VHJhbnNsYXRlOiBudWxsIDogJ1llcycgfX1cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzSGVhcmluZ1JlbGF0ZWRGYWxzZT5cbiAgICAgICAgICAgIHt7ICdJcyB0aGUgcXVlcnkgaGVhcmluZyByZWxhdGVkPycgfCBycHhUcmFuc2xhdGU6IG51bGwgOiAnTm8nIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kZD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19hY3Rpb25zXCI+XG4gICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwiZ292dWstbGlua1wiIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgICAgICAge3sgJ0NoYW5nZScgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cImZvcm1Hcm91cC5nZXQoJ2lzSGVhcmluZ1JlbGF0ZWQnKT8udmFsdWVcIiBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fcm93XCI+XG4gICAgICAgIDxkdCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fa2V5XCI+XG4gICAgICAgICAge3sgcXVlcnlDcmVhdGVDb250ZXh0ID09PSBxdWVyeUNyZWF0ZUNvbnRleHRFbnVtLk5FV19RVUVSWVxuICAgICAgICAgICAgPyAnV2hhdCBpcyB0aGUgZGF0ZSBvZiB0aGUgaGVhcmluZz8nXG4gICAgICAgICAgICA6ICdXaGF0IGlzIHRoZSBkYXRlIG9mIHRoZSBoZWFyaW5nIHlvdXIgcXVlcnkgaXMgcmVsYXRlZCB0bz8nIHwgcnB4VHJhbnNsYXRlIH19XG4gICAgICAgIDwvZHQ+XG4gICAgICAgIDxkZCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fdmFsdWVcIj5cbiAgICAgICAgICB7eyBmb3JtR3JvdXAuZ2V0KCdoZWFyaW5nRGF0ZScpPy52YWx1ZSB8IGRhdGU6ICdkZCBNTU0geXl5eScgfX1cbiAgICAgICAgPC9kZD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19hY3Rpb25zXCI+XG4gICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwiZ292dWstbGlua1wiIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgICAgICAge3sgJ0NoYW5nZScgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2RsPlxuICAgIDxkbCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdCBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tMFwiICpuZ0lmPVwidGhpcy5mb3JtR3JvdXAuZ2V0KCdhdHRhY2htZW50cycpLnZhbHVlLmxlbmd0aCA+IDBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX3Jvd1wiPlxuICAgICAgICA8ZHQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX2tleVwiPlxuICAgICAgICAgIHt7IHF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gcXVlcnlDcmVhdGVDb250ZXh0RW51bS5ORVdfUVVFUlkgPyAnVXBsb2FkIGEgZmlsZSB0byB0aGUgcXVlcnknIDogJ0RvY3VtZW50IGF0dGFjaGVkJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2R0PlxuICAgICAgICA8ZGQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX3ZhbHVlIGdvdnVrLXN1bW1hcnktbGlzdF9fdmFsdWUtLWRvY3VtZW50QXR0YWNoZWRcIj5cbiAgICAgICAgICA8Y2NkLXF1ZXJ5LWF0dGFjaG1lbnRzLXJlYWRcbiAgICAgICAgICAgICpuZ0lmPVwidGhpcy5mb3JtR3JvdXAuZ2V0KCdhdHRhY2htZW50cycpLnZhbHVlXCJcbiAgICAgICAgICAgIFthdHRhY2htZW50c109XCJhdHRhY2htZW50c1wiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvY2NkLXF1ZXJ5LWF0dGFjaG1lbnRzLXJlYWQ+XG4gICAgICAgIDwvZGQ+XG4gICAgICAgIDxkZCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fYWN0aW9uc1wiPlxuICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cImdvdnVrLWxpbmtcIiAoY2xpY2spPVwiZ29CYWNrKClcIj5cbiAgICAgICAgICAgIHt7ICdDaGFuZ2UnIHwgcnB4VHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2RkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kbD5cblxuICAgIDxicj5cblxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5IGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTNcIiBkYXRhLW1vZHVsZT1cImdvdnVrLWJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgICB7eyAnUHJldmlvdXMnIHwgcnB4VHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJnb3Z1ay1idXR0b25cIiBkYXRhLW1vZHVsZT1cImdvdnVrLWJ1dHRvblwiIHR5cGU9XCJzdWJtaXRcIiAoY2xpY2spPVwic3VibWl0KClcIj5cbiAgICAgICAge3sgJ1N1Ym1pdCcgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8Y2NkLXF1ZXJ5LWV2ZW50LWNvbXBsZXRpb24gW2V2ZW50Q29tcGxldGlvblBhcmFtc109XCJldmVudENvbXBsZXRpb25QYXJhbXNcIj4gICAgXG4gIDwvY2NkLXF1ZXJ5LWV2ZW50LWNvbXBsZXRpb24+XG48L2Rpdj5cbiJdfQ==
687
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY2hlY2steW91ci1hbnN3ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL3F1ZXJ5LW1hbmFnZW1lbnQvY29tcG9uZW50cy9xdWVyeS1jaGVjay15b3VyLWFuc3dlcnMvcXVlcnktY2hlY2steW91ci1hbnN3ZXJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9wYWxldHRlL3F1ZXJ5LW1hbmFnZW1lbnQvY29tcG9uZW50cy9xdWVyeS1jaGVjay15b3VyLWFuc3dlcnMvcXVlcnktY2hlY2steW91ci1hbnN3ZXJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBYyxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBVSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUNMLGdCQUFnQixFQUtqQixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hELE9BQU8sRUFBd0IscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV0RixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtDQUFrQyxD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a0JBQTNCLE1BQU07WUFDVSxjQUFjO2tCQUE5QixNQUFNO1lBQ1UsMkJBQTJCO2tCQUEzQyxNQUFNOztrRkFqQkksOEJBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBzd2l0Y2hNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBDYXNlRXZlbnRUcmlnZ2VyLFxuICBDYXNlRmllbGQsXG4gIENhc2VWaWV3LFxuICBDYXNlVmlld1RyaWdnZXIsXG4gIEVycm9yTWVzc2FnZVxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvc2hhcmVkL2RvbWFpbic7XG5pbXBvcnQgeyBFcnJvck5vdGlmaWVyU2VydmljZSwgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXZlbnRDb21wbGV0aW9uUGFyYW1zIH0gZnJvbSAnLi4vLi4vLi4vLi4vY2FzZS1lZGl0b3IvZG9tYWluL2V2ZW50LWNvbXBsZXRpb24tcGFyYW1zLm1vZGVsJztcbmltcG9ydCB7IENhc2VOb3RpZmllciwgQ2FzZXNTZXJ2aWNlLCBXb3JrQWxsb2NhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jYXNlLWVkaXRvci9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBDYXNlUXVlcmllc0NvbGxlY3Rpb24sIFFtQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uLCBRdWVyeUNyZWF0ZUNvbnRleHQsIFF1ZXJ5TGlzdEl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgUXVlcnlNYW5hZ2VtZW50VXRpbHMgfSBmcm9tICcuLi8uLi91dGlscy9xdWVyeS1tYW5hZ2VtZW50LnV0aWxzJztcbmltcG9ydCB7IEZvcm1Eb2N1bWVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9zaGFyZWQvZG9tYWluL2RvY3VtZW50JztcbmltcG9ydCB7IFF1YWxpZnlpbmdRdWVzdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xdWFsaWZ5aW5nLXF1ZXN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFzayB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RvbWFpbi93b3JrLWFsbG9jYXRpb24vVGFzayc7XG5pbXBvcnQgeyBVU0VSX0RFVEFJTFMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjZC1xdWVyeS1jaGVjay15b3VyLWFuc3dlcnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vcXVlcnktY2hlY2steW91ci1hbnN3ZXJzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVlcnktY2hlY2steW91ci1hbnN3ZXJzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUXVlcnlDaGVja1lvdXJBbnN3ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IFJBSVNFX0FfUVVFUllfRVZFTlRfVFJJR0dFUl9JRCA9ICdxdWVyeU1hbmFnZW1lbnRSYWlzZVF1ZXJ5JztcbiAgcHJpdmF0ZSByZWFkb25seSBSRVNQT05EX1RPX1FVRVJZX0VWRU5UX1RSSUdHRVJfSUQgPSAncXVlcnlNYW5hZ2VtZW50UmVzcG9uZFF1ZXJ5JztcblxuICBwcml2YXRlIHJlYWRvbmx5IENBU0VfUVVFUklFU19DT0xMRUNUSU9OX0lEID0gJ0Nhc2VRdWVyaWVzQ29sbGVjdGlvbic7XG4gIHB1YmxpYyByZWFkb25seSBGSUVMRF9UWVBFX0NPTVBMRVggPSAnQ29tcGxleCc7XG4gIHB1YmxpYyByZWFkb25seSBESVNQTEFZX0NPTlRFWFRfUkVBRE9OTFkgPSAnUkVBRE9OTFknO1xuICBwdWJsaWMgcmVhZG9ubHkgUU1fU0VMRUNUX0ZJUlNUX0NPTExFQ1RJT04gPSAnc2VsZWN0Rmlyc3RDb2xsZWN0aW9uJztcbiAgcHVibGljIHJlYWRvbmx5IFFNX0NPTExFQ1RJT05fUFJPTVBUID0gJ3Byb21wdFFtQ29sbGVjdGlvbic7XG4gIHB1YmxpYyByZWFkb25seSBDSVZJTF9KVVJJU0RJQ1RJT04gPSAnQ0lWSUwnO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgcHVibGljIHF1ZXJ5SXRlbTogUXVlcnlMaXN0SXRlbTtcbiAgQElucHV0KCkgcHVibGljIHF1ZXJ5Q3JlYXRlQ29udGV4dDogUXVlcnlDcmVhdGVDb250ZXh0O1xuICBASW5wdXQoKSBwdWJsaWMgZXZlbnREYXRhOiBDYXNlRXZlbnRUcmlnZ2VyIHwgbnVsbCA9IG51bGw7XG4gIEBPdXRwdXQoKSBwdWJsaWMgYmFja0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcXVlcnlTdWJtaXR0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgY2FsbGJhY2tDb25maXJtYXRpb25NZXNzYWdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9PigpO1xuXG4gIHByaXZhdGUgY2FzZVZpZXdUcmlnZ2VyOiBDYXNlVmlld1RyaWdnZXI7XG4gIHB1YmxpYyBjYXNlRGV0YWlsczogQ2FzZVZpZXc7XG4gIHByaXZhdGUgcXVlcnlJZDogc3RyaW5nO1xuICBwcml2YXRlIHRpZDogc3RyaW5nO1xuICBwcml2YXRlIGNyZWF0ZUV2ZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgc2VhcmNoVGFza3NTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwdWJsaWMgcXVlcnlDcmVhdGVDb250ZXh0RW51bSA9IFF1ZXJ5Q3JlYXRlQ29udGV4dDtcbiAgcHVibGljIGV2ZW50Q29tcGxldGlvblBhcmFtczogRXZlbnRDb21wbGV0aW9uUGFyYW1zO1xuICBwdWJsaWMgY2FzZVF1ZXJpZXNDb2xsZWN0aW9uczogQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uW107XG4gIHB1YmxpYyBmaWVsZElkOiBzdHJpbmc7XG4gIHB1YmxpYyBhdHRhY2htZW50czogRm9ybURvY3VtZW50W107XG5cbiAgcHVibGljIGVycm9yTWVzc2FnZXM6IEVycm9yTWVzc2FnZVtdID0gW107XG4gIHB1YmxpYyBmaWx0ZXJlZFRhc2tzOiBUYXNrW10gPSBbXTtcbiAgcHVibGljIHJlYWR5VG9TdWJtaXQ6IGJvb2xlYW47XG4gIHB1YmxpYyBpc1N1Ym1pdHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgY2FsbGJhY2tFcnJvcnNTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuICBwdWJsaWMgZXJyb3I6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZXNTZXJ2aWNlOiBDYXNlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlTm90aWZpZXI6IENhc2VOb3RpZmllcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdvcmtBbGxvY2F0aW9uU2VydmljZTogV29ya0FsbG9jYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBxdWFsaWZ5aW5nUXVlc3Rpb25TZXJ2aWNlOiBRdWFsaWZ5aW5nUXVlc3Rpb25TZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMucWlkO1xuICAgIHRoaXMudGlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcz8udGlkO1xuXG4gICAgdGhpcy5jYXNlTm90aWZpZXIuY2FzZVZpZXcucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKGNhc2VEZXRhaWxzKSA9PiB7XG4gICAgICB0aGlzLmNhc2VEZXRhaWxzID0gY2FzZURldGFpbHM7XG5cbiAgICAgIC8vIEZpbmQgdGhlIGFwcHJvcHJpYXRlIGV2ZW50IHRyaWdnZXIgYmFzZWQgb24gdGhlIHF1ZXJ5Q3JlYXRlQ29udGV4dFxuICAgICAgdGhpcy5jYXNlVmlld1RyaWdnZXIgPSB0aGlzLmNhc2VEZXRhaWxzLnRyaWdnZXJzLmZpbmQoKHRyaWdnZXIpID0+XG4gICAgICAgIHRoaXMucXVlcnlDcmVhdGVDb250ZXh0ICE9PSBRdWVyeUNyZWF0ZUNvbnRleHQuUkVTUE9ORFxuICAgICAgICAvLyBJZiB0aGUgY29udGV4dCBpcyBub3QgJ1JFU1BPTkQnLCBmaW5kIHRoZSB0cmlnZ2VyIHdpdGggdGhlIElEIGZvciByYWlzaW5nIGEgcXVlcnlcbiAgICAgICAgICA/IHRyaWdnZXIuaWQgPT09IHRoaXMuUkFJU0VfQV9RVUVSWV9FVkVOVF9UUklHR0VSX0lEXG4gICAgICAgIC8vIElmIHRoZSBjb250ZXh0IGlzICdSRVNQT05EJywgZmluZCB0aGUgdHJpZ2dlciB3aXRoIHRoZSBJRCBmb3IgcmVzcG9uZGluZyB0byBhIHF1ZXJ5XG4gICAgICAgICAgOiB0cmlnZ2VyLmlkID09PSB0aGlzLlJFU1BPTkRfVE9fUVVFUllfRVZFTlRfVFJJR0dFUl9JRFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIC8vIEdldCB0aGUgZG9jdW1lbnQgYXR0YWNobWVudHNcbiAgICB0aGlzLmdldERvY3VtZW50QXR0YWNobWVudHMoKTtcblxuICAgIHRoaXMuc2V0Q2FzZVF1ZXJpZXNDb2xsZWN0aW9uRGF0YSgpO1xuXG4gICAgaWYgKHRoaXMucXVlcnlDcmVhdGVDb250ZXh0ID09PSBRdWVyeUNyZWF0ZUNvbnRleHQuUkVTUE9ORCkge1xuICAgICAgdGhpcy5zZWFyY2hUYXNrc1N1YnNjcmlwdGlvbiA9IHRoaXMud29ya0FsbG9jYXRpb25TZXJ2aWNlLmdldFRhc2tzQnlDYXNlSWRBbmRFdmVudElkKHRoaXMuUkVTUE9ORF9UT19RVUVSWV9FVkVOVF9UUklHR0VSX0lELFxuICAgICAgICB0aGlzLmNhc2VEZXRhaWxzLmNhc2VfaWQsIHRoaXMuY2FzZURldGFpbHMuY2FzZV90eXBlLmlkLCB0aGlzLmNhc2VEZXRhaWxzLmNhc2VfdHlwZS5qdXJpc2RpY3Rpb24uaWQpXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgLy8gRmlsdGVyIHRhc2sgYnkgcXVlcnkgaWRcbiAgICAgICAgICAgIGlmICh0aGlzLnRpZCkge1xuICAgICAgICAgICAgICBpZiAocmVzcG9uc2UudGFza3M/Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkVGFza3MgPSByZXNwb25zZS50YXNrcz8uZmlsdGVyKCh0YXNrOiBUYXNrKSA9PiB0YXNrLmlkID09PSB0aGlzLnRpZCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFRhc2tzID0gcmVzcG9uc2UudGFza3M7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5yZWFkeVRvU3VibWl0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIHNlYXJjaFRhc2tzU3Vic2NyaXB0aW9uOicsIGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMucmVhZHlUb1N1Ym1pdCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVhZHlUb1N1Ym1pdCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlRXZlbnRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zZWFyY2hUYXNrc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnb0JhY2soKTogdm9pZCB7XG4gICAgdGhpcy5iYWNrQ2xpY2tlZC5lbWl0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIHN1Ym1pdCgpOiB2b2lkIHtcblxuICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgZmllbGRJZCBpcyBudWxsIG9yIHVuZGVmaW5lZFxuICAgIGlmICghdGhpcy5maWVsZElkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjogRmllbGQgSUQgaXMgbWlzc2luZy4gQ2Fubm90IHByb2NlZWQgd2l0aCBzdWJtaXNzaW9uLicpO1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgdGl0bGU6ICdFcnJvcicsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGlzIGNhc2UgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIHF1ZXJ5IG1hbmFnZW1lbnQuJyxcbiAgICAgICAgICBmaWVsZElkOiAnZmllbGQtaWQnXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgICB3aW5kb3cuc2Nyb2xsVG8oeyBsZWZ0OiAwLCB0b3A6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gdGhpcy5nZW5lcmF0ZUNhc2VRdWVyaWVzQ29sbGVjdGlvbkRhdGEoKTtcbiAgICBjb25zdCBjcmVhdGVFdmVudCQgPSB0aGlzLmNyZWF0ZUV2ZW50KGRhdGEpO1xuXG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMucXVlcnlDcmVhdGVDb250ZXh0ID09PSBRdWVyeUNyZWF0ZUNvbnRleHQuUkVTUE9ORCkge1xuICAgICAgaWYgKHRoaXMuZmlsdGVyZWRUYXNrcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNyZWF0ZUV2ZW50U3Vic2NyaXB0aW9uID0gY3JlYXRlRXZlbnQkLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKChjcmVhdGVFdmVudFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb25maXJtYXRpb25Cb2R5ID0gY3JlYXRlRXZlbnRSZXNwb25zZT8uYWZ0ZXJfc3VibWl0X2NhbGxiYWNrX3Jlc3BvbnNlPy5jb25maXJtYXRpb25fYm9keTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1hdGlvbkhlYWRlciA9IGNyZWF0ZUV2ZW50UmVzcG9uc2U/LmFmdGVyX3N1Ym1pdF9jYWxsYmFja19yZXNwb25zZT8uY29uZmlybWF0aW9uX2hlYWRlcjtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tDb25maXJtYXRpb25NZXNzYWdlLmVtaXQoeyBib2R5OiBjb25maXJtYXRpb25Cb2R5LCBoZWFkZXI6IGNvbmZpcm1hdGlvbkhlYWRlciB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMud29ya0FsbG9jYXRpb25TZXJ2aWNlLmNvbXBsZXRlVGFzayhcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFRhc2tzWzBdLmlkLFxuICAgICAgICAgICAgICB0aGlzLmNhc2VWaWV3VHJpZ2dlci5uYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pXG4gICAgICAgICkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoKSA9PiB0aGlzLmZpbmFsaXNlU3VibWlzc2lvbigpLFxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6IE5vIHRhc2sgdG8gY29tcGxldGUgd2FzIGZvdW5kJyk7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0Vycm9yJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTm8gdGFzayB0byBjb21wbGV0ZSB3YXMgZm91bmQnLFxuICAgICAgICAgICAgZmllbGRJZDogJ2ZpZWxkLWlkJ1xuICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKHsgbGVmdDogMCwgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jcmVhdGVFdmVudFN1YnNjcmlwdGlvbiA9IGNyZWF0ZUV2ZW50JC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoY2FsbGJhY2tSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuZmluYWxpc2VTdWJtaXNzaW9uKCk7XG4gICAgICAgICAgY29uc3QgY29uZmlybWF0aW9uQm9keSA9IGNhbGxiYWNrUmVzcG9uc2U/LmFmdGVyX3N1Ym1pdF9jYWxsYmFja19yZXNwb25zZT8uY29uZmlybWF0aW9uX2JvZHk7XG4gICAgICAgICAgY29uc3QgY29uZmlybWF0aW9uSGVhZGVyID0gY2FsbGJhY2tSZXNwb25zZT8uYWZ0ZXJfc3VibWl0X2NhbGxiYWNrX3Jlc3BvbnNlPy5jb25maXJtYXRpb25faGVhZGVyO1xuICAgICAgICAgIHRoaXMuY2FsbGJhY2tDb25maXJtYXRpb25NZXNzYWdlLmVtaXQoeyBib2R5OiBjb25maXJtYXRpb25Cb2R5LCBoZWFkZXI6IGNvbmZpcm1hdGlvbkhlYWRlciB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnJvcilcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRXZlbnQoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jYXNlc1NlcnZpY2UuY3JlYXRlRXZlbnQodGhpcy5jYXNlRGV0YWlscywge1xuICAgICAgZGF0YSxcbiAgICAgIGV2ZW50OiB7XG4gICAgICAgIGlkOiB0aGlzLmNhc2VWaWV3VHJpZ2dlcj8uaWQsXG4gICAgICAgIHN1bW1hcnk6ICcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5jYXNlVmlld1RyaWdnZXI/LmRlc2NyaXB0aW9uXG4gICAgICB9LFxuICAgICAgZXZlbnRfdG9rZW46IHRoaXMuZXZlbnREYXRhPy5ldmVudF90b2tlbixcbiAgICAgIGlnbm9yZV93YXJuaW5nOiBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5hbGlzZVN1Ym1pc3Npb24oKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeVN1Ym1pdHRlZC5lbWl0KHRydWUpO1xuICAgIHRoaXMucXVhbGlmeWluZ1F1ZXN0aW9uU2VydmljZS5jbGVhclF1YWxpZnlpbmdRdWVzdGlvblNlbGVjdGlvbigpO1xuICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBBUEkgY2FsbHM6JywgZXJyb3IpO1xuICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5pc1NlcnZpY2VFcnJvckZvdW5kKGVycm9yKSl7XG4gICAgICB0aGlzLmVycm9yID0gbnVsbDtcbiAgICAgIHRoaXMuY2FsbGJhY2tFcnJvcnNTdWJqZWN0Lm5leHQoZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgaWYgKGVycm9yICYmIGVycm9yLnN0YXR1cyAhPT0gNDAxICYmIGVycm9yLnN0YXR1cyAhPT0gNDAzKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nLCAnc2VydmljZS1kb3duJ10pO1xuICAgICAgIH1cbiAgICB9XG4gICAgd2luZG93LnNjcm9sbFRvKHsgbGVmdDogMCwgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uRGF0YSgpOiBRbUNhc2VRdWVyaWVzQ29sbGVjdGlvbiB7XG4gICAgY29uc3QgY3VycmVudFVzZXJEZXRhaWxzID0gSlNPTi5wYXJzZSh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKFVTRVJfREVUQUlMUykpO1xuXG4gICAgY29uc3QgY2FzZU1lc3NhZ2UgPSB0aGlzLnF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gUXVlcnlDcmVhdGVDb250ZXh0Lk5FV19RVUVSWVxuICAgICAgPyBRdWVyeU1hbmFnZW1lbnRVdGlscy5nZXROZXdRdWVyeURhdGEodGhpcy5mb3JtR3JvdXAsIGN1cnJlbnRVc2VyRGV0YWlscylcbiAgICAgIDogUXVlcnlNYW5hZ2VtZW50VXRpbHMuZ2V0UmVzcG9uZE9yRm9sbG93dXBRdWVyeURhdGEodGhpcy5mb3JtR3JvdXAsIHRoaXMucXVlcnlJdGVtLCBjdXJyZW50VXNlckRldGFpbHMpO1xuXG4gICAgY29uc3QgbWVzc2FnZUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZGF0YWlkOyAvLyBHZXQgdGhlIG1lc3NhZ2UgSUQgZnJvbSByb3V0ZSBwYXJhbXMgKGlmIHByZXNlbnQpXG4gICAgY29uc3QgaXNOZXdRdWVyeSA9IHRoaXMucXVlcnlDcmVhdGVDb250ZXh0ID09PSBRdWVyeUNyZWF0ZUNvbnRleHQuTkVXX1FVRVJZOyAvLyBDaGVjayBpZiB0aGlzIGlzIGEgbmV3IHF1ZXJ5XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgZmllbGQgSUQgaGFzIGJlZW4gc2V0IGR5bmFtaWNhbGx5XG4gICAgaWYgKCF0aGlzLmZpZWxkSWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOiBGaWVsZCBJRCBmb3IgQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uIG5vdCBmb3VuZC4gQ2Fubm90IHByb2NlZWQgd2l0aCBkYXRhIGdlbmVyYXRpb24uJyk7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nLCAnc2VydmljZS1kb3duJ10pO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgbmV3IHF1ZXJ5IGRhdGEgc3RydWN0dXJlXG4gICAgY29uc3QgbmV3UXVlcnlEYXRhOiBRbUNhc2VRdWVyaWVzQ29sbGVjdGlvbiA9IHt9O1xuXG4gICAgaWYgKHRoaXMuY2FzZVF1ZXJpZXNDb2xsZWN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICBsZXQgbWF0Y2hlZENvbGxlY3Rpb247XG5cbiAgICAgIC8vIElmIGl0J3Mgbm90IGEgbmV3IHF1ZXJ5LCB0cnkgdG8gZmluZCB0aGUgZXhpc3RpbmcgY29sbGVjdGlvbiB3aXRoIHRoZSBtZXNzYWdlIElEXG4gICAgICBpZiAoIWlzTmV3UXVlcnkgJiYgbWVzc2FnZUlkKSB7XG4gICAgICAgIG1hdGNoZWRDb2xsZWN0aW9uID0gdGhpcy5jYXNlUXVlcmllc0NvbGxlY3Rpb25zLmZpbmQoKGNvbGxlY3Rpb24pID0+XG4gICAgICAgICAgY29sbGVjdGlvbi5jYXNlTWVzc2FnZXMuc29tZSgobWVzc2FnZSkgPT4gbWVzc2FnZS52YWx1ZS5pZCA9PT0gbWVzc2FnZUlkKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAobWF0Y2hlZENvbGxlY3Rpb24pIHtcbiAgICAgICAgLy8gQXBwZW5kIHRoZSBuZXcgY2FzZSBtZXNzYWdlIHRvIHRoZSBtYXRjaGVkIGNvbGxlY3Rpb24ncyBjYXNlTWVzc2FnZXNcbiAgICAgICAgbWF0Y2hlZENvbGxlY3Rpb24uY2FzZU1lc3NhZ2VzLnB1c2goe1xuICAgICAgICAgIGlkOiBudWxsLFxuICAgICAgICAgIHZhbHVlOiBjYXNlTWVzc2FnZVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBBZGQgdGhlIG1hdGNoZWQgY29sbGVjdGlvbiB0byBuZXdRdWVyeURhdGFcbiAgICAgICAgbmV3UXVlcnlEYXRhW3RoaXMuZmllbGRJZF0gPSB7XG4gICAgICAgICAgLi4ubWF0Y2hlZENvbGxlY3Rpb24sIC8vIEtlZXAgZXhpc3RpbmcgZGF0YSBpbnRhY3RcbiAgICAgICAgICBjYXNlTWVzc2FnZXM6IFsuLi5tYXRjaGVkQ29sbGVjdGlvbi5jYXNlTWVzc2FnZXNdIC8vIEFwcGVuZCB0aGUgdXBkYXRlZCBtZXNzYWdlcyBhcnJheVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVXNlIHBhcnR5TmFtZSBmcm9tIHRoZSBmaXJzdCBjb2xsZWN0aW9uIChhc3N1bXB0aW9uOiBhbGwgc2hhcmUgdGhlIHNhbWUgcGFydHkpXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUGFydHlOYW1lID0gdGhpcy5jYXNlUXVlcmllc0NvbGxlY3Rpb25zWzBdLnBhcnR5TmFtZTtcblxuICAgICAgICAvLyBJZiBubyBjb2xsZWN0aW9uIG1hdGNoZXMsIG9yIGl0J3MgYSBuZXcgcXVlcnlcbiAgICAgICAgbmV3UXVlcnlEYXRhW3RoaXMuZmllbGRJZF0gPSB7XG4gICAgICAgICAgcGFydHlOYW1lOiBvcmlnaW5hbFBhcnR5TmFtZSxcbiAgICAgICAgICByb2xlT25DYXNlOiAnJywgLy8gTm90IHJldHVybmVkIGJ5IENDRFxuICAgICAgICAgIGNhc2VNZXNzYWdlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogbnVsbCxcbiAgICAgICAgICAgICAgdmFsdWU6IGNhc2VNZXNzYWdlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIElmIGNhc2VRdWVyaWVzQ29sbGVjdGlvbnMgaXMgbm90IGVtcHR5LCBhcHBlbmQgaXRzIGRhdGFcbiAgICAgICAgbmV3UXVlcnlEYXRhW3RoaXMuZmllbGRJZF0uY2FzZU1lc3NhZ2VzLnB1c2goXG4gICAgICAgICAgLi4udGhpcy5jYXNlUXVlcmllc0NvbGxlY3Rpb25zLmZsYXRNYXAoKGNvbGxlY3Rpb24pID0+IGNvbGxlY3Rpb24uY2FzZU1lc3NhZ2VzKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gZXhpc3RpbmcgY29sbGVjdGlvbnMsIGNyZWF0ZSBhIG5ldyBvbmUgKGUuZy4sIGZvciBuZXcgcXVlcmllcylcbiAgICAgIG5ld1F1ZXJ5RGF0YVt0aGlzLmZpZWxkSWRdID0ge1xuICAgICAgICBwYXJ0eU5hbWU6IGN1cnJlbnRVc2VyRGV0YWlscz8ubmFtZSB8fCBgJHtjdXJyZW50VXNlckRldGFpbHM/LmZvcmVuYW1lfSAke2N1cnJlbnRVc2VyRGV0YWlscz8uc3VybmFtZX1gLCAvLyBOb3QgcmV0dXJuZWQgYnkgQ0NEXG4gICAgICAgIHJvbGVPbkNhc2U6ICcnLCAvLyBOb3QgcmV0dXJuZWQgYnkgQ0NEXG4gICAgICAgIGNhc2VNZXNzYWdlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBudWxsLFxuICAgICAgICAgICAgdmFsdWU6IGNhc2VNZXNzYWdlXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbmV3UXVlcnlEYXRhO1xuICB9XG5cbiAgcHVibGljIHNldENhc2VRdWVyaWVzQ29sbGVjdGlvbkRhdGEoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZXZlbnREYXRhPy5jYXNlX2ZpZWxkcz8ubGVuZ3RoKSB7XG4gICAgICAvLyBXb3JrYXJvdW5kIGZvciBtdWx0aXBsZSBxbUNhc2VRdWVyaWVzQ29sbGVjdGlvbnMgdGhhdCBhcmUgbm90IHRvIGJlIGFwcGVhcmluZyBpbiB0aGUgZXZlbnREYXRhXG4gICAgICAvLyBDb3VudHMgbnVtYmVyIHFtQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uc1xuICAgICAgY29uc3QgbnVtYmVyT2ZDYXNlUXVlcmllc0NvbGxlY3Rpb25zID0gdGhpcy5ldmVudERhdGE/LmNhc2VfZmllbGRzPy5maWx0ZXIoXG4gICAgICAgIChjYXNlRmllbGQpID0+XG4gICAgICAgICAgY2FzZUZpZWxkLmZpZWxkX3R5cGUuaWQgPT09IHRoaXMuQ0FTRV9RVUVSSUVTX0NPTExFQ1RJT05fSUQgJiZcbiAgICAgICAgICBjYXNlRmllbGQuZmllbGRfdHlwZS50eXBlID09PSB0aGlzLkZJRUxEX1RZUEVfQ09NUExFWCAmJiBjYXNlRmllbGQuZGlzcGxheV9jb250ZXh0ICE9PSB0aGlzLkRJU1BMQVlfQ09OVEVYVF9SRUFET05MWVxuICAgICAgKT8ubGVuZ3RoIHx8IDA7XG5cbiAgICAgIHRoaXMuY2FzZVF1ZXJpZXNDb2xsZWN0aW9ucyA9IHRoaXMuZXZlbnREYXRhLmNhc2VfZmllbGRzLnJlZHVjZSgoYWNjLCBjYXNlRmllbGQpID0+IHtcbiAgICAgICAgLy8gRXh0cmFjdCB0aGUgSUQgYmFzZWQgb24gY29uZGl0aW9ucywgdXBkYXRpbmcgdGhpcy5maWVsZElkIGR5bmFtaWNhbGx5XG4gICAgICAgIHRoaXMuZXh0cmFjdENhc2VRdWVyeUlkKGNhc2VGaWVsZCwgbnVtYmVyT2ZDYXNlUXVlcmllc0NvbGxlY3Rpb25zKTtcblxuICAgICAgICBjb25zdCBleHRyYWN0ZWRDYXNlUXVlcmllc0Zyb21DYXNlRmllbGQgPSBRdWVyeU1hbmFnZW1lbnRVdGlscy5leHRyYWN0Q2FzZVF1ZXJpZXNGcm9tQ2FzZUZpZWxkKGNhc2VGaWVsZCk7XG4gICAgICAgIGlmIChleHRyYWN0ZWRDYXNlUXVlcmllc0Zyb21DYXNlRmllbGQgJiYgdHlwZW9mIGV4dHJhY3RlZENhc2VRdWVyaWVzRnJvbUNhc2VGaWVsZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBhY2MucHVzaChleHRyYWN0ZWRDYXNlUXVlcmllc0Zyb21DYXNlRmllbGQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0Q2FzZVF1ZXJ5SWQoZGF0YTogQ2FzZUZpZWxkLCBjb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgeyBpZCwgdmFsdWUgfSA9IGRhdGE7XG4gICAgY29uc3QgbWVzc2FnZUlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZGF0YWlkO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGZpZWxkX3R5cGUgbWF0Y2hlcyBDYXNlUXVlcmllc0NvbGxlY3Rpb24gYW5kIHR5cGUgaXMgQ29tcGxleFxuICAgIGlmIChkYXRhLmZpZWxkX3R5cGUuaWQgPT09IHRoaXMuQ0FTRV9RVUVSSUVTX0NPTExFQ1RJT05fSUQgJiYgZGF0YS5maWVsZF90eXBlLnR5cGUgPT09IHRoaXMuRklFTERfVFlQRV9DT01QTEVYKSB7XG4gICAgICBpZiAodGhpcy5pc05ld1F1ZXJ5Q29udGV4dChkYXRhKSkge1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHFtQ2FzZVF1ZXJpZXNDb2xsZWN0aW9uLCBwaWNrIHRoZSBvbmUgd2l0aCB0aGUgbG93ZXN0IG9yZGVyXG4gICAgICAgIGlmIChjb3VudCA+IDEpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFuZGxlTXVsdGlwbGVDb2xsZWN0aW9ucygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNldCB0aGUgZmllbGQgSUQgZHluYW1pY2FsbHkgYmFzZWQgb24gdGhlIGV4dHJhY3RlZCBkYXRhXG4gICAgICAgICAgdGhpcy5maWVsZElkID0gaWQ7IC8vIFN0b3JlIHRoZSBJRCBmb3IgdXNlIGluIGdlbmVyYXRpbmcgbmV3UXVlcnlEYXRhXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgbWVzc2FnZUlkIGlzIHByZXNlbnQsIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgY2FzZSBtZXNzYWdlXG4gICAgICB0aGlzLnNldE1lc3NhZ2VGaWVsZElkKG1lc3NhZ2VJZCwgdmFsdWUsIGlkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldE1lc3NhZ2VGaWVsZElkKG1lc3NhZ2VJZCwgdmFsdWUsIGlkOiBzdHJpbmcpIHtcbiAgICBpZiAobWVzc2FnZUlkICYmIHZhbHVlPy5jYXNlTWVzc2FnZXMpIHtcbiAgICAgIC8vIElmIGEgbWF0Y2hpbmcgbWVzc2FnZSBpcyBmb3VuZCwgc2V0IHRoZSBmaWVsZElkIHRvIHRoZSBjb3JyZXNwb25kaW5nIGlkXG4gICAgICBjb25zdCBtYXRjaGVkTWVzc2FnZSA9IHZhbHVlPy5jYXNlTWVzc2FnZXM/LmZpbmQoKG1lc3NhZ2UpID0+IG1lc3NhZ2UudmFsdWUuaWQgPT09IG1lc3NhZ2VJZCk7XG4gICAgICBpZiAobWF0Y2hlZE1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5maWVsZElkID0gaWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc05ld1F1ZXJ5Q29udGV4dChkYXRhOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeUNyZWF0ZUNvbnRleHQgPT09IFF1ZXJ5Q3JlYXRlQ29udGV4dC5ORVdfUVVFUlkgJiYgZGF0YS5kaXNwbGF5X2NvbnRleHQgIT09IHRoaXMuRElTUExBWV9DT05URVhUX1JFQURPTkxZO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVNdWx0aXBsZUNvbGxlY3Rpb25zKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGp1cmlzZGljdGlvbklkID0gdGhpcy5jYXNlRGV0YWlscz8uY2FzZV90eXBlPy5qdXJpc2RpY3Rpb24/LmlkO1xuXG4gICAgaWYgKCFqdXJpc2RpY3Rpb25JZCkge1xuICAgICAgY29uc29sZS5lcnJvcignSnVyaXNkaWN0aW9uIElEIGlzIG1pc3NpbmcuJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2V0Q29sbGVjdGlvblNlbGVjdGlvbk1ldGhvZChqdXJpc2RpY3Rpb25JZCkgPT09IHRoaXMuUU1fU0VMRUNUX0ZJUlNUX0NPTExFQ1RJT04pIHtcbiAgICAgIC8vIFBpY2sgdGhlIGNvbGxlY3Rpb24gd2l0aCB0aGUgbG93ZXN0IG9yZGVyXG4gICAgICB0aGlzLmZpZWxkSWQgPSB0aGlzLmdldENhc2VRdWVyaWVzQ29sbGVjdGlvbkZpZWxkT3JkZXJGcm9tV2l6YXJkUGFnZXMoKT8uaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERpc3BsYXkgRXJyb3IsIGZvciBub3csIHVudGlsIEVYVUktMjY0NCBpcyBpbXBsZW1lbnRlZFxuICAgICAgY29uc29sZS5lcnJvcihgRXJyb3I6IE11bHRpcGxlIENhc2VRdWVyaWVzQ29sbGVjdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0IGZvciB0aGUgJHtqdXJpc2RpY3Rpb25JZH0ganVyaXNkaWN0aW9uYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldENhc2VRdWVyaWVzQ29sbGVjdGlvbkZpZWxkT3JkZXJGcm9tV2l6YXJkUGFnZXMoKTogQ2FzZUZpZWxkIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjYW5kaWRhdGVGaWVsZHMgPSB0aGlzLmV2ZW50RGF0YT8uY2FzZV9maWVsZHM/LmZpbHRlcihcbiAgICAgIChmaWVsZCkgPT5cbiAgICAgICAgZmllbGQuZmllbGRfdHlwZS5pZCA9PT0gdGhpcy5DQVNFX1FVRVJJRVNfQ09MTEVDVElPTl9JRCAmJlxuICAgICAgICBmaWVsZC5maWVsZF90eXBlLnR5cGUgPT09IHRoaXMuRklFTERfVFlQRV9DT01QTEVYICYmXG4gICAgICAgIGZpZWxkLmRpc3BsYXlfY29udGV4dCAhPT0gdGhpcy5ESVNQTEFZX0NPTlRFWFRfUkVBRE9OTFlcbiAgICApO1xuXG4gICAgaWYgKCFjYW5kaWRhdGVGaWVsZHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBmaXJzdFBhZ2VGaWVsZHMgPSB0aGlzLmV2ZW50RGF0YT8ud2l6YXJkX3BhZ2VzPy5bMF0/LndpemFyZF9wYWdlX2ZpZWxkcztcblxuICAgIGlmICghZmlyc3RQYWdlRmllbGRzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBjYW5kaWRhdGVGaWVsZHNcbiAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IHdpemFyZEZpZWxkID0gZmlyc3RQYWdlRmllbGRzLmZpbmQoKGYpID0+IGYuY2FzZV9maWVsZF9pZCA9PT0gZmllbGQuaWQpO1xuICAgICAgICByZXR1cm4geyBmaWVsZCwgb3JkZXI6IHdpemFyZEZpZWxkPy5vcmRlciA/PyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB9O1xuICAgICAgfSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcilbMF0/LmZpZWxkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2xsZWN0aW9uU2VsZWN0aW9uTWV0aG9kKGp1cmlzZGljdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4ganVyaXNkaWN0aW9uLnRvVXBwZXJDYXNlKCkgPT09IHRoaXMuQ0lWSUxfSlVSSVNESUNUSU9OID8gdGhpcy5RTV9TRUxFQ1RfRklSU1RfQ09MTEVDVElPTiA6IHRoaXMuUU1fQ09MTEVDVElPTl9QUk9NUFQ7XG4gIH1cblxuICBwcml2YXRlIGdldERvY3VtZW50QXR0YWNobWVudHMoKTogdm9pZCB7XG4gICAgY29uc3QgYXR0YWNobWVudHNWYWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldCgnYXR0YWNobWVudHMnKS52YWx1ZTtcbiAgICBpZiAoYXR0YWNobWVudHNWYWx1ZSAmJiBhdHRhY2htZW50c1ZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGRvY3VtZW50cyA9IGF0dGFjaG1lbnRzVmFsdWU7XG4gICAgICB0aGlzLmF0dGFjaG1lbnRzID0gZG9jdW1lbnRzLm1hcChRdWVyeU1hbmFnZW1lbnRVdGlscy5kb2N1bWVudFRvQ29sbGVjdGlvbkZvcm1Eb2N1bWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzU2VydmljZUVycm9yRm91bmQoZXJyb3I6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShlcnJvcj8uY2FsbGJhY2tFcnJvcnM/Lmxlbmd0aCk7XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCIgKm5nSWY9XCJyZWFkeVRvU3VibWl0XCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi10d28tdGhpcmRzLWZyb20tZGVza3RvcFwiPlxuICAgIDwhLS0gRXJyb3IgbWVzc2FnZSBzdW1tYXJ5IC0tPlxuICAgIDxkaXYgKm5nSWY9XCJlcnJvck1lc3NhZ2VzLmxlbmd0aCA+IDBcIiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlcIlxuICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwiZXJyb3Itc3VtbWFyeS10aXRsZVwiIHJvbGU9XCJhbGVydFwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgZGF0YS1tb2R1bGU9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5XCI+XG4gICAgIDxoMiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX3RpdGxlXCIgaWQ9XCJlcnJvci1zdW1tYXJ5LXRpdGxlXCI+XG4gICAgICAge3sgJ1RoZXJlIGlzIGEgcHJvYmxlbScgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgPC9oMj5cbiAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX2JvZHlcIj5cbiAgICAgICA8dWwgY2xhc3M9XCJnb3Z1ay1saXN0IGdvdnVrLWVycm9yLXN1bW1hcnlfX2xpc3RcIj5cbiAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZXJyb3JNZXNzYWdlIG9mIGVycm9yTWVzc2FnZXNcIj5cbiAgICAgICAgICAgPGEgW2lkXT1cIidlcnJvci0nICsgZXJyb3JNZXNzYWdlLmZpZWxkSWRcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCJcbiAgICAgICAgICAgICBjbGFzcz1cInZhbGlkYXRpb24tZXJyb3JcIj57eyBlcnJvck1lc3NhZ2UuZGVzY3JpcHRpb24gfCBycHhUcmFuc2xhdGUgfX08L2E+XG4gICAgICAgICA8L2xpPlxuICAgICAgIDwvdWw+XG4gICAgIDwvZGl2PlxuICAgPC9kaXY+XG5cbiAgIDxkaXYgKm5nSWY9XCJlcnJvciAmJiAoZXJyb3IuZGV0YWlscyB8fCBlcnJvci5tZXNzYWdlKVwiIGNsYXNzPVwiZXJyb3Itc3VtbWFyeVwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWxsZWRieT1cImVkaXQtY2FzZS1ldmVudF9lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgPGgzIGNsYXNzPVwiaGVhZGluZy1oMyBlcnJvci1zdW1tYXJ5LWhlYWRpbmdcIiBpZD1cImV2ZW50X2Vycm9yLXN1bW1hcnktaGVhZGluZ1wiPlxuICAgICAgVGhlIGV2ZW50IGNvdWxkIG5vdCBiZSBjcmVhdGVkXG4gICAgPC9oMz5cbiAgICA8cD57e2Vycm9yLm1lc3NhZ2V9fTwvcD5cbiAgICA8dWwgKm5nSWY9XCJlcnJvci5kZXRhaWxzPy5maWVsZF9lcnJvcnNcIiBjbGFzcz1cImVycm9yLXN1bW1hcnktbGlzdFwiPlxuICAgICAgPGxpICpuZ0Zvcj1cImxldCBmaWVsZEVycm9yIG9mIGVycm9yLmRldGFpbHMuZmllbGRfZXJyb3JzXCIgY2xhc3M9XCJjY2QtZXJyb3Itc3VtbWFyeS1saVwiPnt7ZmllbGRFcnJvci5tZXNzYWdlfX08L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuXG4gIDxjY2QtY2FsbGJhY2stZXJyb3JzIFtjYWxsYmFja0Vycm9yc1N1YmplY3RdPVwiY2FsbGJhY2tFcnJvcnNTdWJqZWN0XCI+PC9jY2QtY2FsbGJhY2stZXJyb3JzPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gcXVlcnlDcmVhdGVDb250ZXh0RW51bS5ORVdfUVVFUllcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1jYXB0aW9uLWxcIj57eyAnUmFpc2UgYSBxdWVyeScgfCBycHhUcmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmctbFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXJ5Q3JlYXRlQ29udGV4dCA9PT0gcXVlcnlDcmVhdGVDb250ZXh0RW51bS5SRVNQT05EOyBlbHNlIGRlZmF1bHRDaGVja1lvdXJBbnN3ZXJzVGl0bGVcIj5cbiAgICAgICAge3sgJ1JldmlldyBxdWVyeSByZXNwb25zZSBkZXRhaWxzJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENoZWNrWW91ckFuc3dlcnNUaXRsZT5cbiAgICAgICAge3sgJ1JldmlldyBxdWVyeSBkZXRhaWxzJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2gxPlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay0hLW1hcmdpbi1ib3R0b20tNFwiPlxuICAgICAgPGNjZC1xdWVyeS1jYXNlLWRldGFpbHMtaGVhZGVyIFtjYXNlRGV0YWlsc109XCJjYXNlRGV0YWlsc1wiPjwvY2NkLXF1ZXJ5LWNhc2UtZGV0YWlscy1oZWFkZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGwgKm5nSWY9XCJxdWVyeUNyZWF0ZUNvbnRleHQgIT09IHF1ZXJ5Q3JlYXRlQ29udGV4dEVudW0uRk9MTE9XVVBcIiBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdCBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fcm93XCI+XG4gICAgICAgIDxkdCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fa2V5XCI+XG4gICAgICAgICAge3sgcXVlcnlDcmVhdGVDb250ZXh0ID09PSBxdWVyeUNyZWF0ZUNvbnRleHRFbnVtLlJFU1BPTkQgPyAnU3VibWl0dGVkIHF1ZXJ5JyA6ICdRdWVyeSBzdWJqZWN0JyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2R0PlxuICAgICAgICA8ZGQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX3ZhbHVlXCI+XG4gICAgICAgICAge3sgcXVlcnlDcmVhdGVDb250ZXh0ID09PSBxdWVyeUNyZWF0ZUNvbnRleHRFbnVtLlJFU1BPTkQgPyBxdWVyeUl0ZW0uc3ViamVjdCA6IGZvcm1Hcm91cC5nZXQoJ3N1YmplY3QnKT8udmFsdWUgfX1cbiAgICAgICAgPC9kZD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19hY3Rpb25zXCI+XG4gICAgICAgICAgPGEgICpuZ0lmPVwicXVlcnlDcmVhdGVDb250ZXh0ID09PSBxdWVyeUNyZWF0ZUNvbnRleHRFbnVtLk5FV19RVUVSWVwiIFxuICAgICAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwiZ292dWstbGlua1wiIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgICAgICAge3sgJ0NoYW5nZScgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2RsPlxuXG4gICAgPGRsIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0IGdvdnVrLSEtbWFyZ2luLWJvdHRvbS0wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19yb3dcIj5cbiAgICAgICAgPGR0IGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19rZXlcIj5cbiAgICAgICAgICB7eyBxdWVyeUNyZWF0ZUNvbnRleHQgPT09IHF1ZXJ5Q3JlYXRlQ29udGV4dEVudW0uUkVTUE9ORCA/ICdSZXNwb25zZSBkZXRhaWwnIDogJ1F1ZXJ5IGRldGFpbCcgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgPC9kdD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X192YWx1ZVwiPlxuICAgICAgICAgIHt7IGZvcm1Hcm91cC5nZXQoJ2JvZHknKT8udmFsdWUgfX1cbiAgICAgICAgPC9kZD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19hY3Rpb25zXCI+XG4gICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwiZ292dWstbGlua1wiIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgICAgICAge3sgJ0NoYW5nZScgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2RsPlxuXG4gICAgPGRsICpuZ0lmPVwicXVlcnlDcmVhdGVDb250ZXh0ID09PSBxdWVyeUNyZWF0ZUNvbnRleHRFbnVtLk5FV19RVUVSWVwiIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0IGdvdnVrLSEtbWFyZ2luLWJvdHRvbS0wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19yb3dcIj5cbiAgICAgICAgPGR0IGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19rZXlcIj5cbiAgICAgICAgICB7eyAnSXMgdGhlIHF1ZXJ5IGhlYXJpbmcgcmVsYXRlZD8nIHwgcnB4VHJhbnNsYXRlIH19XG4gICAgICAgIDwvZHQ+XG4gICAgICAgIDxkZCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fdmFsdWVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybUdyb3VwLmdldCgnaXNIZWFyaW5nUmVsYXRlZCcpPy52YWx1ZSA9PT0gdHJ1ZTsgZWxzZSBpc0hlYXJpbmdSZWxhdGVkRmFsc2VcIj5cbiAgICAgICAgICAgIHt7ICdJcyB0aGUgcXVlcnkgaGVhcmluZyByZWxhdGVkPycgfCBycHhUcmFuc2xhdGU6IG51bGwgOiAnWWVzJyB9fVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNIZWFyaW5nUmVsYXRlZEZhbHNlPlxuICAgICAgICAgICAge3sgJ0lzIHRoZSBxdWVyeSBoZWFyaW5nIHJlbGF0ZWQ/JyB8IHJweFRyYW5zbGF0ZTogbnVsbCA6ICdObycgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2RkPlxuICAgICAgICA8ZGQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX2FjdGlvbnNcIj5cbiAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJnb3Z1ay1saW5rXCIgKGNsaWNrKT1cImdvQmFjaygpXCI+XG4gICAgICAgICAgICB7eyAnQ2hhbmdlJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiZm9ybUdyb3VwLmdldCgnaXNIZWFyaW5nUmVsYXRlZCcpPy52YWx1ZVwiIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19yb3dcIj5cbiAgICAgICAgPGR0IGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19rZXlcIj5cbiAgICAgICAgICB7eyBxdWVyeUNyZWF0ZUNvbnRleHQgPT09IHF1ZXJ5Q3JlYXRlQ29udGV4dEVudW0uTkVXX1FVRVJZXG4gICAgICAgICAgICA/ICdXaGF0IGlzIHRoZSBkYXRlIG9mIHRoZSBoZWFyaW5nPydcbiAgICAgICAgICAgIDogJ1doYXQgaXMgdGhlIGRhdGUgb2YgdGhlIGhlYXJpbmcgeW91ciBxdWVyeSBpcyByZWxhdGVkIHRvPycgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgPC9kdD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X192YWx1ZVwiPlxuICAgICAgICAgIHt7IGZvcm1Hcm91cC5nZXQoJ2hlYXJpbmdEYXRlJyk/LnZhbHVlIHwgZGF0ZTogJ2RkIE1NTSB5eXl5JyB9fVxuICAgICAgICA8L2RkPlxuICAgICAgICA8ZGQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX2FjdGlvbnNcIj5cbiAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJnb3Z1ay1saW5rXCIgKGNsaWNrKT1cImdvQmFjaygpXCI+XG4gICAgICAgICAgICB7eyAnQ2hhbmdlJyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGw+XG4gICAgPGRsIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0IGdvdnVrLSEtbWFyZ2luLWJvdHRvbS0wXCIgKm5nSWY9XCJ0aGlzLmZvcm1Hcm91cC5nZXQoJ2F0dGFjaG1lbnRzJykudmFsdWUubGVuZ3RoID4gMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fcm93XCI+XG4gICAgICAgIDxkdCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fa2V5XCI+XG4gICAgICAgICAge3sgcXVlcnlDcmVhdGVDb250ZXh0ID09PSBxdWVyeUNyZWF0ZUNvbnRleHRFbnVtLk5FV19RVUVSWSA/ICdVcGxvYWQgYSBmaWxlIHRvIHRoZSBxdWVyeScgOiAnRG9jdW1lbnQgYXR0YWNoZWQnIHwgcnB4VHJhbnNsYXRlIH19XG4gICAgICAgIDwvZHQ+XG4gICAgICAgIDxkZCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fdmFsdWUgZ292dWstc3VtbWFyeS1saXN0X192YWx1ZS0tZG9jdW1lbnRBdHRhY2hlZFwiPlxuICAgICAgICAgIDxjY2QtcXVlcnktYXR0YWNobWVudHMtcmVhZFxuICAgICAgICAgICAgKm5nSWY9XCJ0aGlzLmZvcm1Hcm91cC5nZXQoJ2F0dGFjaG1lbnRzJykudmFsdWVcIlxuICAgICAgICAgICAgW2F0dGFjaG1lbnRzXT1cImF0dGFjaG1lbnRzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9jY2QtcXVlcnktYXR0YWNobWVudHMtcmVhZD5cbiAgICAgICAgPC9kZD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19hY3Rpb25zXCI+XG4gICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwiZ292dWstbGlua1wiIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgICAgICAge3sgJ0NoYW5nZScgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2RsPlxuXG4gICAgPGJyPlxuXG4gICAgPGRpdj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJnb3Z1ay1idXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnkgZ292dWstIS1tYXJnaW4tcmlnaHQtM1wiIGRhdGEtbW9kdWxlPVwiZ292dWstYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImdvQmFjaygpXCI+XG4gICAgICAgIHt7ICdQcmV2aW91cycgfCBycHhUcmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImdvdnVrLWJ1dHRvblwiIGRhdGEtbW9kdWxlPVwiZ292dWstYnV0dG9uXCIgdHlwZT1cInN1Ym1pdFwiIChjbGljayk9XCJzdWJtaXQoKVwiPlxuICAgICAgICB7eyAnU3VibWl0JyB8IHJweFRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxjY2QtcXVlcnktZXZlbnQtY29tcGxldGlvbiBbZXZlbnRDb21wbGV0aW9uUGFyYW1zXT1cImV2ZW50Q29tcGxldGlvblBhcmFtc1wiPiAgICBcbiAgPC9jY2QtcXVlcnktZXZlbnQtY29tcGxldGlvbj5cbjwvZGl2PlxuIl19