jconsumer-shared 0.0.2 → 1.0.0

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 (128) hide show
  1. package/esm2022/lib/account-service.mjs +170 -0
  2. package/esm2022/lib/auth-service.mjs +163 -0
  3. package/esm2022/lib/booking-service.mjs +480 -0
  4. package/esm2022/lib/calendar/date-time/datetime-processor.service.mjs +448 -0
  5. package/esm2022/lib/common.service.mjs +188 -0
  6. package/esm2022/lib/confirm/confirm-box.component.mjs +159 -0
  7. package/esm2022/lib/confirm/confirm-box.module.mjs +62 -0
  8. package/esm2022/lib/consumer-service.mjs +780 -0
  9. package/esm2022/lib/currency-service.mjs +12 -0
  10. package/esm2022/lib/environment.service.mjs +23 -0
  11. package/esm2022/lib/error-message.module.mjs +23 -0
  12. package/esm2022/lib/error-message.service.mjs +22 -0
  13. package/esm2022/lib/file-service.mjs +235 -0
  14. package/esm2022/lib/form-message/field-error-display/field-error-display.component.mjs +21 -0
  15. package/esm2022/lib/form-message/form-message-display.module.mjs +35 -0
  16. package/esm2022/lib/form-message/form-message-display.service.mjs +44 -0
  17. package/esm2022/lib/form-message/form-success-display/form-success-display.component.mjs +18 -0
  18. package/esm2022/lib/group-storage.service.mjs +66 -0
  19. package/esm2022/lib/i8n.module.mjs +43 -0
  20. package/esm2022/lib/injector-resolver.mjs +28 -0
  21. package/esm2022/lib/local-storage.service.mjs +77 -0
  22. package/esm2022/lib/media-service.mjs +49 -0
  23. package/esm2022/lib/order.service.mjs +16 -1
  24. package/esm2022/lib/payment/modes/payment-modes.component.mjs +35 -0
  25. package/esm2022/lib/payment/modes/payment-modes.module.mjs +24 -0
  26. package/esm2022/lib/payment/payment.module.mjs +26 -0
  27. package/esm2022/lib/paytm.service.mjs +131 -0
  28. package/esm2022/lib/phone-input/phone-input.component.mjs +131 -0
  29. package/esm2022/lib/phone-input/phone-input.module.mjs +24 -0
  30. package/esm2022/lib/pipes/autolink/autolink.module.mjs +20 -0
  31. package/esm2022/lib/pipes/autolink/autolink.pipe.mjs +22 -0
  32. package/esm2022/lib/pipes/capitalize/capitalize.module.mjs +20 -0
  33. package/esm2022/lib/pipes/capitalize/capitalize.pipe.mjs +18 -0
  34. package/esm2022/lib/pipes/date-format/date-format.module.mjs +19 -0
  35. package/esm2022/lib/pipes/date-format/date-format.pipe.mjs +42 -0
  36. package/esm2022/lib/pipes/filter/filter.pipe.mjs +24 -0
  37. package/esm2022/lib/pipes/limit-to/limitTo.pipe.mjs +18 -0
  38. package/esm2022/lib/pipes/safe-html/safehtml.module.mjs +20 -0
  39. package/esm2022/lib/pipes/safe-html/safehtml.pipe.mjs +19 -0
  40. package/esm2022/lib/project-constants.mjs +310 -0
  41. package/esm2022/lib/project-messages.mjs +146 -0
  42. package/esm2022/lib/questionaire/edit/questionnaire.component.mjs +1427 -0
  43. package/esm2022/lib/questionaire/edit/questionnaire.module.mjs +78 -0
  44. package/esm2022/lib/questionaire/questionaire-service.mjs +92 -0
  45. package/esm2022/lib/razorpay.service.mjs +157 -0
  46. package/esm2022/lib/request-dialog/request-dialog.component.mjs +29 -0
  47. package/esm2022/lib/request-dialog/request-dialog.module.mjs +24 -0
  48. package/esm2022/lib/session-storage.service.mjs +57 -0
  49. package/esm2022/lib/shared-account.guard.mjs +41 -0
  50. package/esm2022/lib/shared-account.resolver.mjs +22 -0
  51. package/esm2022/lib/shared.service.mjs +107 -10
  52. package/esm2022/lib/showuploadfile/showuploadfile.component.mjs +61 -0
  53. package/esm2022/lib/showuploadfile/showuploadfile.module.mjs +28 -0
  54. package/esm2022/lib/spinner/loading-spinner.component.mjs +22 -0
  55. package/esm2022/lib/spinner/loading-spinner.module.mjs +28 -0
  56. package/esm2022/lib/storage.service.mjs +75 -0
  57. package/esm2022/lib/theme.service.mjs +30 -0
  58. package/esm2022/lib/timezone-converter.mjs +49 -0
  59. package/esm2022/lib/toast.service.mjs +2 -2
  60. package/esm2022/lib/twilio-service.mjs +466 -0
  61. package/esm2022/lib/word-processor.service.mjs +181 -0
  62. package/esm2022/public-api.mjs +58 -1
  63. package/fesm2022/jconsumer-shared.mjs +6989 -39
  64. package/fesm2022/jconsumer-shared.mjs.map +1 -1
  65. package/jconsumer-shared-1.0.0.tgz +0 -0
  66. package/lib/account-service.d.ts +48 -0
  67. package/lib/auth-service.d.ts +44 -0
  68. package/lib/booking-service.d.ts +101 -0
  69. package/lib/calendar/date-time/datetime-processor.service.d.ts +120 -0
  70. package/lib/common.service.d.ts +20 -0
  71. package/lib/confirm/confirm-box.component.d.ts +43 -0
  72. package/lib/confirm/confirm-box.module.d.ts +16 -0
  73. package/lib/consumer-service.d.ts +178 -0
  74. package/lib/currency-service.d.ts +4 -0
  75. package/lib/environment.service.d.ts +9 -0
  76. package/lib/error-message.module.d.ts +7 -0
  77. package/lib/error-message.service.d.ts +5 -0
  78. package/lib/file-service.d.ts +29 -0
  79. package/lib/form-message/field-error-display/field-error-display.component.d.ts +8 -0
  80. package/lib/form-message/form-message-display.module.d.ts +10 -0
  81. package/lib/form-message/form-message-display.service.d.ts +13 -0
  82. package/lib/form-message/form-success-display/form-success-display.component.d.ts +7 -0
  83. package/lib/group-storage.service.d.ts +14 -0
  84. package/lib/i8n.module.d.ts +12 -0
  85. package/lib/injector-resolver.d.ts +2 -0
  86. package/lib/local-storage.service.d.ts +34 -0
  87. package/lib/media-service.d.ts +9 -0
  88. package/lib/order.service.d.ts +4 -0
  89. package/lib/payment/modes/payment-modes.component.d.ts +15 -0
  90. package/lib/payment/modes/payment-modes.module.d.ts +9 -0
  91. package/lib/payment/payment.module.d.ts +7 -0
  92. package/lib/paytm.service.d.ts +13 -0
  93. package/lib/phone-input/phone-input.component.d.ts +27 -0
  94. package/lib/phone-input/phone-input.module.d.ts +9 -0
  95. package/lib/pipes/autolink/autolink.module.d.ts +8 -0
  96. package/lib/pipes/autolink/autolink.pipe.d.ts +7 -0
  97. package/lib/pipes/capitalize/capitalize.module.d.ts +8 -0
  98. package/lib/pipes/capitalize/capitalize.pipe.d.ts +7 -0
  99. package/lib/pipes/date-format/date-format.module.d.ts +8 -0
  100. package/lib/pipes/date-format/date-format.pipe.d.ts +12 -0
  101. package/lib/pipes/filter/filter.pipe.d.ts +7 -0
  102. package/lib/pipes/limit-to/limitTo.pipe.d.ts +7 -0
  103. package/lib/pipes/safe-html/safehtml.module.d.ts +8 -0
  104. package/lib/pipes/safe-html/safehtml.pipe.d.ts +10 -0
  105. package/lib/project-constants.d.ts +227 -0
  106. package/lib/project-messages.d.ts +1 -0
  107. package/lib/questionaire/edit/questionnaire.component.d.ts +154 -0
  108. package/lib/questionaire/edit/questionnaire.module.d.ts +20 -0
  109. package/lib/questionaire/questionaire-service.d.ts +28 -0
  110. package/lib/razorpay.service.d.ts +26 -0
  111. package/lib/request-dialog/request-dialog.component.d.ts +11 -0
  112. package/lib/request-dialog/request-dialog.module.d.ts +9 -0
  113. package/lib/session-storage.service.d.ts +26 -0
  114. package/lib/shared-account.guard.d.ts +11 -0
  115. package/lib/shared-account.resolver.d.ts +10 -0
  116. package/lib/shared.service.d.ts +43 -7
  117. package/lib/showuploadfile/showuploadfile.component.d.ts +21 -0
  118. package/lib/showuploadfile/showuploadfile.module.d.ts +9 -0
  119. package/lib/spinner/loading-spinner.component.d.ts +11 -0
  120. package/lib/spinner/loading-spinner.module.d.ts +9 -0
  121. package/lib/storage.service.d.ts +16 -0
  122. package/lib/theme.service.d.ts +10 -0
  123. package/lib/timezone-converter.d.ts +8 -0
  124. package/lib/twilio-service.d.ts +60 -0
  125. package/lib/word-processor.service.d.ts +80 -0
  126. package/package.json +1 -1
  127. package/public-api.d.ts +57 -0
  128. package/jconsumer-shared-0.0.2.tgz +0 -0
@@ -0,0 +1,1427 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import { ButtonsStrategy, ButtonType, Image } from '@ks89/angular-modal-gallery';
3
+ import { ShowuploadfileComponent } from '../../showuploadfile/showuploadfile.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/router";
6
+ import * as i2 from "../../word-processor.service";
7
+ import * as i3 from "../../local-storage.service";
8
+ import * as i4 from "../../calendar/date-time/datetime-processor.service";
9
+ import * as i5 from "@angular/material/dialog";
10
+ import * as i6 from "../../file-service";
11
+ import * as i7 from "../../common.service";
12
+ import * as i8 from "../questionaire-service";
13
+ import * as i9 from "../../error-message.service";
14
+ import * as i10 from "../../toast.service";
15
+ import * as i11 from "@ks89/angular-modal-gallery";
16
+ import * as i12 from "../../shared.service";
17
+ import * as i13 from "@angular/common";
18
+ import * as i14 from "@angular/forms";
19
+ import * as i15 from "../../spinner/loading-spinner.component";
20
+ import * as i16 from "@angular/material/datepicker";
21
+ import * as i17 from "@angular/material/core";
22
+ import * as i18 from "@angular/material/form-field";
23
+ import * as i19 from "@angular/material/select";
24
+ import * as i20 from "../../pipes/capitalize/capitalize.pipe";
25
+ import * as i21 from "../../pipes/safe-html/safehtml.pipe";
26
+ export class QuestionnaireComponent {
27
+ activated_route;
28
+ wordProcessor;
29
+ lStorageService;
30
+ dateProcessor;
31
+ dialog;
32
+ fileService;
33
+ commonService;
34
+ questionaireService;
35
+ errorService;
36
+ toastService;
37
+ modalGalleryService;
38
+ sharedService;
39
+ location;
40
+ questionnaireList;
41
+ source;
42
+ accountId;
43
+ questionAnswers;
44
+ customerDetails;
45
+ uuid;
46
+ type;
47
+ waitlistStatus;
48
+ orderStatus;
49
+ donationDetails;
50
+ service;
51
+ mode; // Added by mani to check the file upload
52
+ fileChanged = new EventEmitter();
53
+ returnAnswers = new EventEmitter();
54
+ tempType;
55
+ bookingType;
56
+ answers = {};
57
+ showDataGrid = {};
58
+ selectedMessage = [];
59
+ apiError = [];
60
+ params;
61
+ fileuploadpreAnswers = {};
62
+ loading = false;
63
+ buttonDisable = false;
64
+ questions = [];
65
+ selectedDocs = [];
66
+ documentsToUpload = [];
67
+ subscription;
68
+ uploadFilesTemp = [];
69
+ filestoUpload = [];
70
+ changeHappened = false;
71
+ uploadedFiles = [];
72
+ uploadedImages = [];
73
+ bookingDetails = [];
74
+ file2;
75
+ customButtonsFontAwesomeConfig = {
76
+ visible: true,
77
+ strategy: ButtonsStrategy.CUSTOM,
78
+ buttons: [
79
+ {
80
+ className: 'fa fa-download',
81
+ type: ButtonType.DOWNLOAD,
82
+ ariaLabel: 'custom close aria label',
83
+ title: 'Download',
84
+ fontSize: '20px'
85
+ },
86
+ {
87
+ className: 'inside close-image',
88
+ type: ButtonType.CLOSE,
89
+ ariaLabel: 'custom close aria label',
90
+ title: 'Close',
91
+ fontSize: '20px'
92
+ }
93
+ ]
94
+ };
95
+ image_list_popup;
96
+ questionnaire_heading = '';
97
+ customer_label = '';
98
+ editQuestionnaire = false;
99
+ audioVideoFiles = [];
100
+ groupedQnr = [];
101
+ dataGridColumns = {};
102
+ dataGridColumnsAnswerList = [];
103
+ updatedGridIndex = {};
104
+ newTimeDateFormat = '';
105
+ qnrStatus = '';
106
+ comments = {};
107
+ tday = new Date();
108
+ minday = new Date(1900, 0, 1);
109
+ dataGridListColumns = {};
110
+ showqnr;
111
+ item;
112
+ showItem = false;
113
+ totalPrice;
114
+ itemLength;
115
+ itemArray = [];
116
+ dataGridList = [];
117
+ id = 0;
118
+ post_Data;
119
+ dgList;
120
+ sequenceId;
121
+ finalObjectList = [];
122
+ showservice = false;
123
+ quesStore;
124
+ allList = '';
125
+ popSearches;
126
+ serviceTotalPrice = 0;
127
+ editableItem;
128
+ cdnPath = '';
129
+ constructor(activated_route, wordProcessor, lStorageService, dateProcessor, dialog, fileService, commonService, questionaireService, errorService, toastService, modalGalleryService, sharedService, location) {
130
+ this.activated_route = activated_route;
131
+ this.wordProcessor = wordProcessor;
132
+ this.lStorageService = lStorageService;
133
+ this.dateProcessor = dateProcessor;
134
+ this.dialog = dialog;
135
+ this.fileService = fileService;
136
+ this.commonService = commonService;
137
+ this.questionaireService = questionaireService;
138
+ this.errorService = errorService;
139
+ this.toastService = toastService;
140
+ this.modalGalleryService = modalGalleryService;
141
+ this.sharedService = sharedService;
142
+ this.location = location;
143
+ this.cdnPath = this.sharedService.getCDNPath();
144
+ this.activated_route.queryParams.subscribe(qparams => {
145
+ this.params = qparams;
146
+ if (this.params.type) {
147
+ this.source = this.params.type;
148
+ console.log(this.source);
149
+ }
150
+ if (this.params.providerId) {
151
+ this.accountId = this.params.providerId;
152
+ }
153
+ if (this.params.uuid) {
154
+ this.uuid = this.params.uuid;
155
+ }
156
+ });
157
+ this.subscription = this.questionaireService.getMessage().subscribe(message => {
158
+ switch (message.type) {
159
+ case 'qnrValidateError':
160
+ this.setValidateError(message.value);
161
+ break;
162
+ }
163
+ });
164
+ }
165
+ ngOnDestroy() {
166
+ if (this.subscription) {
167
+ this.subscription.unsubscribe();
168
+ }
169
+ }
170
+ ngOnChanges() {
171
+ if (this.questionAnswers && this.questionAnswers.filestoUpload && this.source === 'proLead') {
172
+ this.filestoUpload = this.questionAnswers.filestoUpload;
173
+ }
174
+ }
175
+ ngOnInit() {
176
+ console.log("Service Details:", this.questionnaireList);
177
+ console.log("Service Details:", this.service);
178
+ if (this.lStorageService.getitemfromLocalStorage('itemArray')) {
179
+ this.itemArray = this.lStorageService.getitemfromLocalStorage('itemArray');
180
+ if (this.itemArray) {
181
+ this.showItem = true;
182
+ console.log("this.itemArray", this.itemArray);
183
+ }
184
+ }
185
+ this.customer_label = this.wordProcessor.getTerminologyTerm('customer');
186
+ if (this.questionnaireList) {
187
+ console.log(this.source);
188
+ if (this.source === 'customer-create' || this.source === 'onetime') {
189
+ if (this.questionnaireList.labels && this.questionnaireList.labels.length > 0) {
190
+ this.questions = this.questionnaireList.labels[0].questions;
191
+ this.groupQuestionsBySection();
192
+ // this.getAnswers(this.questions, 'get');
193
+ }
194
+ if (this.customerDetails && this.customerDetails[0] && this.customerDetails[0].questionnaire && this.customerDetails[0].questionnaire.questionAnswers) {
195
+ this.getAnswers(this.customerDetails[0].questionnaire.questionAnswers, 'get');
196
+ }
197
+ }
198
+ else if (this.source === 'qnrDetails') {
199
+ this.questions = this.questionnaireList.questions;
200
+ this.groupQuestionsBySection();
201
+ }
202
+ else if (this.source === 'serviceOptionAppt') {
203
+ this.showservice = true;
204
+ this.questions = this.questionnaireList.labels;
205
+ this.groupQuestionsBySection();
206
+ }
207
+ else if (this.source === 'qnrpaper') {
208
+ this.questions = this.questionnaireList[0].labels;
209
+ this.groupQuestionsBySection();
210
+ }
211
+ else if (!this.uuid && this.questionnaireList.labels) {
212
+ this.questions = this.questionnaireList.labels;
213
+ this.groupQuestionsBySection();
214
+ }
215
+ else if (this.source === 'qnrView' && this.questionnaireList.labels) {
216
+ this.questions = this.questionnaireList.labels;
217
+ this.groupQuestionsBySection();
218
+ }
219
+ else if (this.source === 'condumerOrder' && this.questionnaireList.labels) {
220
+ this.questions = this.questionnaireList.labels;
221
+ this.groupQuestionsBySection();
222
+ }
223
+ else if (this.source === 'ivr' && this.questionnaireList && this.questionnaireList[0].labels) {
224
+ this.questions = this.questionnaireList[0].labels;
225
+ console.log("Questions:", this.questions);
226
+ this.groupQuestionsBySection();
227
+ }
228
+ }
229
+ if (this.source === 'customer-details' && this.customerDetails[0] && this.customerDetails[0].questionnaire) {
230
+ this.questionnaireList = this.customerDetails[0].questionnaire;
231
+ this.questions = this.customerDetails[0].questionnaire.questionAnswers;
232
+ this.groupQuestionsBySection();
233
+ this.getAnswers(this.questions, 'get');
234
+ }
235
+ if (this.questionAnswers) {
236
+ if (this.questionAnswers.files) {
237
+ this.selectedMessage = this.questionAnswers.files;
238
+ }
239
+ if (this.questionAnswers.audioVideo) {
240
+ this.audioVideoFiles = this.questionAnswers.audioVideo;
241
+ }
242
+ if (this.questionAnswers.filestoUpload) {
243
+ this.filestoUpload = this.questionAnswers.filestoUpload;
244
+ }
245
+ if (this.questionAnswers.dataGridColumnsAnswerList) {
246
+ this.dataGridColumnsAnswerList = this.questionAnswers.dataGridColumnsAnswerList;
247
+ }
248
+ if (this.questionAnswers.comments) {
249
+ this.comments = this.questionAnswers.comments;
250
+ }
251
+ if (this.questionAnswers.answers) {
252
+ this.getAnswers(this.questionAnswers.answers.answerLine, 'init');
253
+ }
254
+ if (this.source == 'ivr') {
255
+ this.getAnswers(this.questionAnswers, 'get');
256
+ }
257
+ }
258
+ if (this.donationDetails && this.donationDetails.questionnaire) {
259
+ this.questionnaireList = this.donationDetails.questionnaire;
260
+ this.questions = this.questionnaireList.questionAnswers;
261
+ this.groupQuestionsBySection();
262
+ if (this.questions && this.questions.length > 0) {
263
+ this.getAnswers(this.questions, 'get');
264
+ }
265
+ }
266
+ if (this.uuid) {
267
+ if (this.questionnaireList.questionAnswers) {
268
+ this.questions = this.questionnaireList.questionAnswers;
269
+ this.qnrStatus = 'submitted';
270
+ this.groupQuestionsBySection();
271
+ }
272
+ else if (this.questionnaireList.labels) {
273
+ this.questions = this.questionnaireList.labels;
274
+ this.qnrStatus = 'released';
275
+ this.groupQuestionsBySection();
276
+ }
277
+ else if (this.questionnaireList[0] && this.questionnaireList[0].labels) {
278
+ this.questions = this.questionnaireList[0].labels;
279
+ this.qnrStatus = 'released';
280
+ this.groupQuestionsBySection();
281
+ }
282
+ if (this.questions && this.questions.length > 0) {
283
+ this.getAnswers(this.questions, 'get');
284
+ }
285
+ }
286
+ this.disableField();
287
+ }
288
+ //disable field
289
+ disableField() {
290
+ if (this.tempType && (this.tempType === 'Loan Sanction' || this.tempType === 'Rejected')) {
291
+ this.buttonDisable = true;
292
+ // this.disableInput();
293
+ }
294
+ }
295
+ // *.component.ts
296
+ asIsOrder(a, b) {
297
+ return 1;
298
+ }
299
+ groupQuestionsBySection() {
300
+ if (this.source === 'customer-create' || this.source === 'qnrDetails' || this.source === 'onetime') {
301
+ this.groupedQnr = this.commonService.groupBy(this.questions, 'sectionName');
302
+ }
303
+ else if (this.source === 'proLead') {
304
+ this.groupedQnr = this.questions.reduce(function (rv, x) {
305
+ (rv[x.question['sequnceId']] = rv[x.question['sequnceId']] || []).push(x);
306
+ return rv;
307
+ }, {});
308
+ }
309
+ else {
310
+ this.groupedQnr = this.questions.reduce(function (rv, x) {
311
+ (rv[x.question['sectionOrder']] = rv[x.question['sectionOrder']] || []).push(x);
312
+ return rv;
313
+ }, {});
314
+ }
315
+ }
316
+ setValidateError(errors) {
317
+ this.apiError = [];
318
+ if (errors.length > 0) {
319
+ for (let error of errors) {
320
+ this.apiError[error.questionField] = [];
321
+ this.apiError[error.questionField].push(error.error);
322
+ }
323
+ this.buttonDisable = false;
324
+ }
325
+ }
326
+ getAnswers(answerData, type) {
327
+ this.answers = new Object();
328
+ this.dataGridColumns = {};
329
+ if (type === 'get') {
330
+ this.selectedMessage = [];
331
+ this.uploadedImages = [];
332
+ this.uploadedFiles = [];
333
+ for (let answ of answerData) {
334
+ if (answ.answerLine) {
335
+ if (answ.question.fieldDataType === 'fileUpload') {
336
+ if (this.source === 'proLead') {
337
+ if (answ.answerLine.answer[answ.question.fieldDataType] && answ.answerLine.answer[answ.question.fieldDataType].length > 0) {
338
+ for (let i = 0; i < answ.answerLine.answer[answ.question.fieldDataType].length; i++) {
339
+ answ.answerLine.answer[answ.question.fieldDataType][i].action = 'add';
340
+ answ.answerLine.answer[answ.question.fieldDataType][i].status = 'COMPLETE';
341
+ answ.answerLine.answer[answ.question.fieldDataType][i].s3path = answ.answerLine.answer[answ.question.fieldDataType][i].s3path;
342
+ answ.answerLine.answer[answ.question.fieldDataType][i].uid = answ.answerLine.answer[answ.question.fieldDataType][i].uid;
343
+ answ.answerLine.answer[answ.question.fieldDataType][i].driveId = answ.answerLine.answer[answ.question.fieldDataType][i].driveId;
344
+ answ.answerLine.answer[answ.question.fieldDataType][i].url = answ.answerLine.answer[answ.question.fieldDataType][i].keyName;
345
+ }
346
+ this.answers[answ.answerLine.labelName] = answ.answerLine.answer[answ.question.fieldDataType];
347
+ }
348
+ }
349
+ if (answ.answerLine.answer && answ.answerLine.answer[answ.question.fieldDataType] && answ.answerLine.answer[answ.question.fieldDataType].length > 0) {
350
+ for (let i = 0; i < answ.answerLine.answer[answ.question.fieldDataType].length; i++) {
351
+ if (type === 'get') {
352
+ this.uploadedImages.push(answ.answerLine.answer[answ.question.fieldDataType][i]);
353
+ if (!this.uploadedFiles[answ.answerLine.labelName]) {
354
+ this.uploadedFiles[answ.answerLine.labelName] = {};
355
+ }
356
+ if (!this.uploadedFiles[answ.answerLine.labelName][answ.answerLine.answer[answ.question.fieldDataType][i].caption]) {
357
+ this.uploadedFiles[answ.answerLine.labelName][answ.answerLine.answer[answ.question.fieldDataType][i].caption] = {};
358
+ }
359
+ this.comments[answ.answerLine.labelName + '=' + answ.answerLine.answer[answ.question.fieldDataType][i].caption] = answ.answerLine.answer[answ.question.fieldDataType][i].comments;
360
+ this.uploadedFiles[answ.answerLine.labelName][answ.answerLine.answer[answ.question.fieldDataType][i].caption] = answ.answerLine.answer[answ.question.fieldDataType][i];
361
+ }
362
+ else {
363
+ this.selectedMessage.push(answ.answerLine.answer[answ.question.fieldDataType][i]);
364
+ if (!this.filestoUpload[answ.answerLine.labelName]) {
365
+ this.filestoUpload[answ.answerLine.labelName] = {};
366
+ }
367
+ if (!this.filestoUpload[answ.answerLine.labelName][answ.answerLine.answer[answ.question.fieldDataType][i].caption]) {
368
+ this.filestoUpload[answ.answerLine.labelName][answ.answerLine.answer[answ.question.fieldDataType][i].caption] = {};
369
+ }
370
+ this.filestoUpload[answ.answerLine.labelName][answ.answerLine.answer[answ.question.fieldDataType][i].caption] = answ.answerLine.answer[answ.question.fieldDataType][i];
371
+ }
372
+ }
373
+ }
374
+ }
375
+ else if (answ.question.fieldDataType === 'dataGrid') {
376
+ for (let row of answ.answerLine.answer[answ.question.fieldDataType]) {
377
+ let columns = [];
378
+ for (let i = 0; i < row.dataGridColumn.length; i++) {
379
+ columns[i + 1] = row.dataGridColumn[i].column[Object.keys(row.dataGridColumn[i].column)[0]];
380
+ }
381
+ if (!this.dataGridColumnsAnswerList[answ.answerLine.labelName]) {
382
+ this.dataGridColumnsAnswerList[answ.answerLine.labelName] = [];
383
+ }
384
+ this.dataGridColumnsAnswerList[answ.answerLine.labelName].push(columns);
385
+ }
386
+ }
387
+ else {
388
+ this.answers[answ.answerLine.labelName] = answ.answerLine.answer[answ.question.fieldDataType];
389
+ }
390
+ }
391
+ }
392
+ }
393
+ else {
394
+ for (let answ of answerData) {
395
+ if (answ.answer[Object.keys(answ.answer)[0]]) {
396
+ this.answers[answ.labelName] = answ.answer[Object.keys(answ.answer)[0]];
397
+ }
398
+ }
399
+ }
400
+ if (type === 'get') {
401
+ Object.keys(this.uploadedFiles).forEach(key => {
402
+ this.uploadFilesTemp[key] = [];
403
+ Object.keys(this.uploadedFiles[key]).forEach(key1 => {
404
+ if (this.uploadedFiles[key][key1]) {
405
+ if (!this.uploadFilesTemp[key]) {
406
+ this.uploadFilesTemp[key] = [];
407
+ }
408
+ const type = this.uploadedFiles[key][key1].type.split('/');
409
+ if (type[0] !== 'audio' && type[0] !== 'video' || ((type[0] === 'audio' || type[0] === 'video') && this.uploadedFiles[key][key1].status === 'COMPLETE')) {
410
+ this.uploadFilesTemp[key].push(key1);
411
+ }
412
+ }
413
+ });
414
+ });
415
+ }
416
+ else {
417
+ Object.keys(this.filestoUpload).forEach(key => {
418
+ Object.keys(this.filestoUpload[key]).forEach(key1 => {
419
+ if (this.filestoUpload[key][key1]) {
420
+ if (!this.uploadFilesTemp[key]) {
421
+ this.uploadFilesTemp[key] = [];
422
+ }
423
+ this.uploadFilesTemp[key].push(key1);
424
+ }
425
+ });
426
+ });
427
+ }
428
+ this.onSubmit('init');
429
+ }
430
+ filesSelected(event, question, document) {
431
+ const input = event.target.files;
432
+ if (input) {
433
+ for (const file of input) {
434
+ const fileInput = {
435
+ caption: document,
436
+ file: file,
437
+ labelName: question.labelName
438
+ };
439
+ this.fileChanged.emit(fileInput);
440
+ let type = file.type.split('/');
441
+ this.apiError[question.labelName] = [];
442
+ if (!this.filestoUpload[question.labelName]) {
443
+ this.filestoUpload[question.labelName] = {};
444
+ }
445
+ if (!this.filestoUpload[question.labelName][document]) {
446
+ this.filestoUpload[question.labelName][document] = {};
447
+ }
448
+ if (this.filestoUpload[question.labelName] && this.filestoUpload[question.labelName][document]) {
449
+ let index;
450
+ if (type[0] === 'application' || type[0] === 'image') {
451
+ index = this.selectedMessage.indexOf(this.filestoUpload[question.labelName][document]);
452
+ }
453
+ else {
454
+ index = this.audioVideoFiles.indexOf(this.filestoUpload[question.labelName][document]);
455
+ }
456
+ if (index !== -1) {
457
+ if (type[0] === 'application' || type[0] === 'image') {
458
+ this.selectedMessage.splice(index, 1);
459
+ }
460
+ else {
461
+ this.audioVideoFiles.splice(index, 1);
462
+ }
463
+ delete this.filestoUpload[question.labelName][document];
464
+ delete this.answers[question.labelName][index];
465
+ }
466
+ }
467
+ this.filestoUpload[question.labelName][document] = file;
468
+ if (type[0] === 'application' || type[0] === 'image') {
469
+ this.selectedMessage.push(file);
470
+ const indx = this.selectedMessage.indexOf(file);
471
+ if (indx !== -1) {
472
+ const reader = new FileReader();
473
+ reader.onload = (e) => {
474
+ this.selectedMessage[indx]['path'] = e.target['result'];
475
+ };
476
+ reader.readAsDataURL(file);
477
+ }
478
+ }
479
+ else {
480
+ this.audioVideoFiles.push(file);
481
+ const indx = this.audioVideoFiles.indexOf(file);
482
+ if (indx !== -1) {
483
+ const reader = new FileReader();
484
+ reader.onload = (e) => {
485
+ this.audioVideoFiles[indx]['path'] = e.target['result'];
486
+ };
487
+ reader.readAsDataURL(file);
488
+ }
489
+ }
490
+ }
491
+ if (this.file2 && this.file2.nativeElement.value) {
492
+ this.file2.nativeElement.value = '';
493
+ }
494
+ this.onSubmit('inputChange');
495
+ }
496
+ }
497
+ changeImageSelected(question, document) {
498
+ if (this.filestoUpload[question.labelName] && this.filestoUpload[question.labelName][document]) {
499
+ let type = this.filestoUpload[question.labelName][document].type.split('/');
500
+ type = type[0];
501
+ let index;
502
+ if (type === 'application' || type === 'image') {
503
+ index = this.selectedMessage.indexOf(this.filestoUpload[question.labelName][document]);
504
+ }
505
+ else {
506
+ index = this.audioVideoFiles.indexOf(this.filestoUpload[question.labelName][document]);
507
+ }
508
+ if (index !== -1) {
509
+ if (type === 'application' || type === 'image') {
510
+ this.selectedMessage.splice(index, 1);
511
+ }
512
+ else {
513
+ this.audioVideoFiles.splice(index, 1);
514
+ }
515
+ delete this.filestoUpload[question.labelName][document];
516
+ this.comments[question.labelName + '=' + document] = '';
517
+ if (this.answers[question.labelName] && this.answers[question.labelName].length > 0) {
518
+ const filteredAnswer = this.answers[question.labelName].filter((answer) => answer.caption === document);
519
+ if (filteredAnswer[0]) {
520
+ const index = this.answers[question.labelName].indexOf(filteredAnswer[0]);
521
+ if (index !== -1) {
522
+ this.answers[question.labelName].splice(index, 1);
523
+ }
524
+ }
525
+ }
526
+ }
527
+ if (Object.keys(this.filestoUpload[question.labelName]).length === 0) {
528
+ delete this.filestoUpload[question.labelName];
529
+ }
530
+ if (this.answers[question.labelName] && this.answers[question.labelName].length === 0) {
531
+ delete this.answers[question.labelName];
532
+ }
533
+ }
534
+ else if (this.uploadedFiles[question.labelName] && this.uploadedFiles[question.labelName][document]) {
535
+ const index = this.uploadedImages.indexOf(this.uploadedFiles[question.labelName][document]);
536
+ if (index !== -1) {
537
+ this.uploadedFiles[question.labelName][document] = 'remove';
538
+ this.comments[question.labelName + '=' + document] = '';
539
+ }
540
+ }
541
+ this.onSubmit('inputChange');
542
+ }
543
+ isNumeric(evt) {
544
+ return this.commonService.isNumeric(evt);
545
+ }
546
+ onSubmit(keytype) {
547
+ Object.keys(this.filestoUpload).forEach(key => {
548
+ if (!this.answers[key]) {
549
+ this.answers[key] = [];
550
+ }
551
+ if (Object.keys(this.filestoUpload[key]).length > 0) {
552
+ Object.keys(this.filestoUpload[key]).forEach(key1 => {
553
+ if (this.filestoUpload[key][key1]) {
554
+ let type = this.filestoUpload[key][key1].type.split('/');
555
+ type = type[0];
556
+ let indx;
557
+ if (type === 'application' || type === 'image') {
558
+ indx = this.selectedMessage.indexOf(this.filestoUpload[key][key1]);
559
+ }
560
+ else {
561
+ indx = this.audioVideoFiles.indexOf(this.filestoUpload[key][key1]);
562
+ }
563
+ if (indx !== -1) {
564
+ let status = 'add';
565
+ if (this.uploadedFiles[key] && this.uploadedFiles[key][key1]) {
566
+ status = 'update';
567
+ }
568
+ if (this.answers[key] && this.answers[key].length > 0) {
569
+ const filteredAnswer = this.answers[key].filter((answer) => answer.caption === key1);
570
+ if (filteredAnswer[0]) {
571
+ const index = this.answers[key].indexOf(filteredAnswer[0]);
572
+ if (index !== -1) {
573
+ this.answers[key].splice(index, 1);
574
+ }
575
+ }
576
+ }
577
+ let type = this.filestoUpload[key][key1].type.split('/');
578
+ type = type[0];
579
+ if (type === 'application' || type === 'image') {
580
+ this.answers[key].push({ caption: key1, action: status, mimeType: this.filestoUpload[key][key1].type, url: this.filestoUpload[key][key1].name, size: this.filestoUpload[key][key1].size, comments: this.comments[key + '=' + key1], driveId: this.filestoUpload[key][key1].driveId, uid: this.filestoUpload[key][key1].uid, status: 'COMPLETE' });
581
+ }
582
+ else {
583
+ this.answers[key].push({ caption: key1, action: status, mimeType: this.filestoUpload[key][key1].type, url: this.filestoUpload[key][key1].name, size: this.filestoUpload[key][key1].size, comments: this.comments[key + '=' + key1], driveId: this.filestoUpload[key][key1].driveId, uid: this.filestoUpload[key][key1].uid, status: 'COMPLETE' });
584
+ }
585
+ }
586
+ }
587
+ else {
588
+ if (this.answers[key] && this.answers[key].length > 0) {
589
+ const filteredAnswer = this.answers[key].filter((answer) => answer.caption === key1);
590
+ if (filteredAnswer[0]) {
591
+ const index = this.answers[key].indexOf(filteredAnswer[0]);
592
+ if (index !== -1) {
593
+ this.answers[key].splice(index, 1);
594
+ }
595
+ }
596
+ }
597
+ }
598
+ });
599
+ }
600
+ else {
601
+ delete this.answers[key];
602
+ }
603
+ if (this.answers[key] && this.answers[key].length === 0) {
604
+ delete this.answers[key];
605
+ }
606
+ });
607
+ Object.keys(this.uploadedFiles).forEach(key => {
608
+ if (!this.answers[key]) {
609
+ this.answers[key] = [];
610
+ }
611
+ if (this.uploadedFiles[key] && Object.keys(this.uploadedFiles[key]).length > 0) {
612
+ Object.keys(this.uploadedFiles[key]).forEach(key1 => {
613
+ if ((!this.filestoUpload[key] || (this.filestoUpload[key] && !this.filestoUpload[key][key1])) && this.uploadedFiles[key][key1] && this.uploadedFiles[key][key1] === 'remove') {
614
+ if (this.answers[key] && this.answers[key].length > 0) {
615
+ const filteredAnswer = this.answers[key].filter((answer) => answer.caption === key1);
616
+ if (filteredAnswer[0]) {
617
+ const index = this.answers[key].indexOf(filteredAnswer[0]);
618
+ if (index !== -1) {
619
+ this.answers[key].splice(index, 1);
620
+ }
621
+ }
622
+ }
623
+ this.answers[key].push({ caption: key1, action: 'remove' });
624
+ }
625
+ });
626
+ if (this.answers[key].length === 0) {
627
+ delete this.answers[key];
628
+ }
629
+ }
630
+ });
631
+ let data = [];
632
+ Object.keys(this.dataGridColumnsAnswerList).forEach(key => {
633
+ let newFiled = {};
634
+ let question = this.questions.filter((quest) => this.getQuestion(quest).labelName === key);
635
+ question = question[0].question;
636
+ for (let gridAnswer of this.dataGridColumnsAnswerList[key]) {
637
+ let columnData = [];
638
+ Object.keys(gridAnswer).forEach(key1 => {
639
+ let newType = {};
640
+ const columnDetails = question.dataGridProperties.dataGridColumns.filter((clmn) => clmn.order === JSON.parse(key1));
641
+ if (columnDetails[0]) {
642
+ const columnType = columnDetails[0].dataType;
643
+ newType[columnType] = gridAnswer[key1];
644
+ columnData.push({
645
+ columnId: columnDetails[0].columnId,
646
+ column: newType
647
+ });
648
+ }
649
+ });
650
+ let newMap = {};
651
+ newMap['dataGridColumn'] = columnData;
652
+ if (!newFiled[question.fieldDataType]) {
653
+ newFiled[question.fieldDataType] = [];
654
+ }
655
+ newFiled[question.fieldDataType].push(newMap);
656
+ }
657
+ data.push({
658
+ 'labelName': key,
659
+ 'answer': newFiled
660
+ });
661
+ });
662
+ Object.keys(this.answers).forEach(key => {
663
+ this.apiError[key] = [];
664
+ let newMap = {};
665
+ let question = this.questions.filter((quest) => this.getQuestion(quest).labelName === key);
666
+ if (this.source === 'customer-create' || this.source === 'qnrDetails' || this.source === 'onetime') {
667
+ question = question[0];
668
+ }
669
+ else {
670
+ question = question[0].question;
671
+ }
672
+ if (this.answers[key] || question.fieldDataType === 'bool') {
673
+ let answer = this.answers[key];
674
+ if (question.fieldDataType === 'date') {
675
+ answer = this.dateProcessor.transformToYMDFormat(answer);
676
+ }
677
+ newMap[question.fieldDataType] = answer;
678
+ data.push({
679
+ 'labelName': key,
680
+ 'answer': newMap
681
+ });
682
+ }
683
+ else {
684
+ // newMap = '';
685
+ // data.push({
686
+ // 'labelName': key,
687
+ // });
688
+ }
689
+ });
690
+ let postData;
691
+ if (this.source === 'qnrpaper') {
692
+ postData = {
693
+ 'questionnaireId': (this.questionnaireList[0].id) ? this.questionnaireList[0].id : this.questionnaireList[0].questionnaireId,
694
+ 'answerLine': data
695
+ };
696
+ }
697
+ else if (keytype === 'serviceOption') {
698
+ postData = {
699
+ 'questionnaireId': (this.questionnaireList.id) ? this.questionnaireList.id : this.questionnaireList[0].questionnaireId,
700
+ 'answerLine': this.finalObjectList
701
+ };
702
+ }
703
+ else if (this.source === 'ivr' && this.params.customId) {
704
+ console.log('fffffffffffffffffffff', this.questionnaireList);
705
+ postData = {
706
+ 'questionnaireId': (this.questionnaireList[0].id) ? this.questionnaireList[0].id : this.questionnaireList[0].questionnaireId,
707
+ 'answerLine': data
708
+ };
709
+ }
710
+ else {
711
+ console.log('questionnaireList', this.questionnaireList);
712
+ postData = {
713
+ 'questionnaireId': (this.questionnaireList.id) ? this.questionnaireList.id : this.questionnaireList.questionnaireId,
714
+ 'answerLine': data
715
+ };
716
+ }
717
+ const passData = { 'answers': postData, 'files': this.selectedMessage, 'audioVideo': this.audioVideoFiles, 'filestoUpload': this.filestoUpload, 'dataGridColumnsAnswerList': this.dataGridColumnsAnswerList, 'comments': this.comments };
718
+ if (keytype === 'inputChange') {
719
+ this.changeHappened = true;
720
+ }
721
+ if (keytype === 'submit') {
722
+ if (this.changeHappened) {
723
+ this.submitQuestionnaire(passData);
724
+ }
725
+ else {
726
+ if (!this.type) {
727
+ this.location.back();
728
+ }
729
+ else {
730
+ if (this.type === 'qnr-link') {
731
+ this.returnAnswers.emit('nochange');
732
+ }
733
+ else {
734
+ this.editQnr();
735
+ }
736
+ }
737
+ }
738
+ }
739
+ else {
740
+ this.returnAnswers.emit(passData);
741
+ }
742
+ }
743
+ getDate(date) {
744
+ return new Date(date);
745
+ }
746
+ listChange(ev, value, question, column) {
747
+ if (question.fieldDataType !== 'dataGrid') {
748
+ if (ev.target.checked) {
749
+ if (!this.answers[question.labelName]) {
750
+ this.answers[question.labelName] = [];
751
+ }
752
+ if (question.listPropertie && question.listPropertie.maxAnswers && question.listPropertie.maxAnswers > 1) {
753
+ this.answers[question.labelName].push(value);
754
+ }
755
+ else {
756
+ this.answers[question.labelName][0] = value;
757
+ }
758
+ }
759
+ else {
760
+ const indx = this.answers[question.labelName].indexOf(value);
761
+ this.answers[question.labelName].splice(indx, 1);
762
+ }
763
+ if (this.answers[question.labelName].length === 0) {
764
+ this.answers[question.labelName] = '';
765
+ }
766
+ }
767
+ else {
768
+ if (ev.target.checked) {
769
+ if (!this.dataGridColumns[question.labelName + '=' + column.order]) {
770
+ this.dataGridColumns[question.labelName + '=' + column.order] = [];
771
+ }
772
+ this.dataGridColumns[question.labelName + '=' + column.order].push(value);
773
+ }
774
+ else {
775
+ const indx = this.dataGridColumns[question.labelName + '=' + column.order].indexOf(value);
776
+ this.dataGridColumns[question.labelName + '=' + column.order].splice(indx, 1);
777
+ }
778
+ }
779
+ this.onSubmit('inputChange');
780
+ }
781
+ isChecked(value, question, column) {
782
+ if (question.fieldDataType !== 'dataGrid') {
783
+ if (this.answers[question.labelName]) {
784
+ const indx = this.answers[question.labelName].indexOf(value);
785
+ if (indx !== -1) {
786
+ return true;
787
+ }
788
+ else {
789
+ return false;
790
+ }
791
+ }
792
+ else {
793
+ return false;
794
+ }
795
+ }
796
+ else {
797
+ if (this.dataGridColumns[question.labelName + '=' + column.order]) {
798
+ const indx = this.dataGridColumns[question.labelName + '=' + column.order].indexOf(value);
799
+ if (indx !== -1) {
800
+ return true;
801
+ }
802
+ else {
803
+ return false;
804
+ }
805
+ }
806
+ else {
807
+ return false;
808
+ }
809
+ }
810
+ }
811
+ booleanChange(ev, value, question, column) {
812
+ if (question.fieldDataType !== 'dataGrid') {
813
+ if (ev.target.checked) {
814
+ if (!this.answers[question.labelName]) {
815
+ this.answers[question.labelName] = {};
816
+ }
817
+ this.answers[question.labelName] = (value.toLowerCase() === 'yes') ? true : false;
818
+ }
819
+ }
820
+ else {
821
+ if (ev.target.checked) {
822
+ this.dataGridColumns[question.labelName + '=' + column.order] = (value === 'yes') ? true : false;
823
+ }
824
+ }
825
+ this.onSubmit('inputChange');
826
+ }
827
+ isBooleanChecked(value, question, column) {
828
+ value = (value.toLowerCase() === 'yes') ? true : false;
829
+ if (question.fieldDataType !== 'dataGrid') {
830
+ if (this.answers[question.labelName] !== '' && typeof this.answers[question.labelName] === 'string') {
831
+ this.answers[question.labelName] = JSON.parse(this.answers[question.labelName]);
832
+ }
833
+ if (this.answers[question.labelName] === value) {
834
+ return true;
835
+ }
836
+ else {
837
+ return false;
838
+ }
839
+ }
840
+ else {
841
+ if (this.dataGridColumns[question.labelName + '=' + column.order] !== '' && typeof this.dataGridColumns[question.labelName + '=' + column.order] === 'string') {
842
+ this.dataGridColumns[question.labelName + '=' + column.order] = JSON.parse(this.dataGridColumns[question.labelName + '=' + column.order]);
843
+ }
844
+ if (this.dataGridColumns[question.labelName + '=' + column.order] === value) {
845
+ return true;
846
+ }
847
+ else {
848
+ return false;
849
+ }
850
+ }
851
+ }
852
+ submitQuestionnaire(passData) {
853
+ console.log('fdff', passData);
854
+ const dataToSend = new FormData();
855
+ const blobpost_Data = new Blob([JSON.stringify(passData.answers)], { type: 'application/json' });
856
+ dataToSend.append('question', blobpost_Data);
857
+ this.buttonDisable = true;
858
+ }
859
+ uploadAudioVideo(data, type) {
860
+ if (data.urls && data.urls.length > 0) {
861
+ let postData = {
862
+ urls: []
863
+ };
864
+ for (const url of data.urls) {
865
+ const file = this.filestoUpload[url.labelName][url.document];
866
+ this.questionaireService.videoaudioS3Upload(file, url.url)
867
+ .subscribe(() => {
868
+ postData['urls'].push({ uid: url.uid, labelName: url.labelName });
869
+ if (data.urls.length === postData['urls'].length) {
870
+ if (type === 'consCheckin') {
871
+ this.questionaireService.consumerWaitlistQnrUploadStatusUpdate(this.uuid, this.accountId, postData)
872
+ .subscribe((data) => {
873
+ this.successGoback();
874
+ }, error => {
875
+ let errorObj = this.errorService.getApiError(error);
876
+ this.toastService.showError(this.wordProcessor.getProjectErrorMesssages(errorObj));
877
+ this.buttonDisable = false;
878
+ });
879
+ }
880
+ else if (type === 'consAppt') {
881
+ this.questionaireService.consumerApptQnrUploadStatusUpdate(this.uuid, this.accountId, postData)
882
+ .subscribe((data) => {
883
+ this.successGoback();
884
+ }, error => {
885
+ let errorObj = this.errorService.getApiError(error);
886
+ this.toastService.showError(this.wordProcessor.getProjectErrorMesssages(errorObj));
887
+ this.buttonDisable = false;
888
+ });
889
+ }
890
+ else if (type === 'consOrder' || type === 'paper') {
891
+ this.questionaireService.consumerOrderQnrUploadStatusUpdate(this.uuid, this.accountId, postData)
892
+ .subscribe((data) => {
893
+ this.successGoback();
894
+ }, error => {
895
+ this.toastService.showError(this.wordProcessor.getProjectErrorMesssages(error));
896
+ this.buttonDisable = false;
897
+ });
898
+ }
899
+ else if (type === 'consDonationDetails') {
900
+ this.questionaireService.consumerDonationQnrUploadStatusUpdate(this.uuid, this.accountId, postData)
901
+ .subscribe(() => {
902
+ this.successGoback();
903
+ }, (error) => {
904
+ let errorObj = this.errorService.getApiError(error);
905
+ this.toastService.showError(this.wordProcessor.getProjectErrorMesssages(errorObj));
906
+ this.buttonDisable = false;
907
+ });
908
+ }
909
+ }
910
+ }, (error) => {
911
+ let errorObj = this.errorService.getApiError(error);
912
+ this.toastService.showError(this.wordProcessor.getProjectErrorMesssages(errorObj));
913
+ this.buttonDisable = false;
914
+ });
915
+ }
916
+ }
917
+ else {
918
+ this.successGoback();
919
+ }
920
+ }
921
+ goBack() {
922
+ this.location.back();
923
+ }
924
+ getQuestion(question) {
925
+ if (this.source === 'customer-create' || this.source === 'qnrDetails' || this.source === 'onetime' || this.source === 'serviceOptionAppt') {
926
+ return question;
927
+ }
928
+ else {
929
+ return question.question;
930
+ }
931
+ }
932
+ validateQuestionnaire(src) {
933
+ if (!this.questionAnswers) {
934
+ this.questionAnswers = {
935
+ answers: {
936
+ answerLine: [],
937
+ questionnaireId: (this.questionnaireList.id) ? this.questionnaireList.id : this.questionnaireList.questionnaireId,
938
+ }
939
+ };
940
+ }
941
+ }
942
+ getImg(question, document) {
943
+ if (this.filestoUpload[question.labelName] && this.filestoUpload[question.labelName][document]) {
944
+ let type = this.filestoUpload[question.labelName][document].type.split('/');
945
+ let file;
946
+ if (type[0] === 'video' || type[0] === 'audio') {
947
+ file = this.audioVideoFiles;
948
+ }
949
+ else {
950
+ file = this.selectedMessage;
951
+ }
952
+ const indx = file.indexOf(this.filestoUpload[question.labelName][document]);
953
+ if (indx !== -1) {
954
+ let path = this.fileService.getImage(null, this.filestoUpload[question.labelName][document]);
955
+ if (path && path !== null) {
956
+ return path;
957
+ }
958
+ path = file[indx].path;
959
+ return path;
960
+ }
961
+ }
962
+ else if (this.uploadedFiles[question.labelName] && this.uploadedFiles[question.labelName][document]) {
963
+ const indx = this.uploadedImages.indexOf(this.uploadedFiles[question.labelName][document]);
964
+ if (indx !== -1) {
965
+ let path = this.fileService.getImage(null, this.uploadedImages[indx]);
966
+ if (path && path !== null) {
967
+ return path;
968
+ }
969
+ path = this.uploadedImages[indx].s3path;
970
+ return path;
971
+ }
972
+ }
973
+ }
974
+ onButtonBeforeHook(event) {
975
+ if (!event || !event.button) {
976
+ return;
977
+ }
978
+ if (event.button.type === ButtonType.DOWNLOAD) {
979
+ }
980
+ }
981
+ openAttachmentGallery(question, document) {
982
+ this.image_list_popup = [];
983
+ let count = 0;
984
+ let imagePath;
985
+ let caption = '';
986
+ if (this.filestoUpload[question.labelName] && this.filestoUpload[question.labelName][document]) {
987
+ let type = this.filestoUpload[question.labelName][document].type.split('/');
988
+ if (type[0] === 'video' || type[0] === 'audio') {
989
+ const indx = this.audioVideoFiles.indexOf(this.filestoUpload[question.labelName][document]);
990
+ this.showAudioVideoFile(this.audioVideoFiles[indx]);
991
+ }
992
+ else {
993
+ const indx = this.selectedMessage.indexOf(this.filestoUpload[question.labelName][document]);
994
+ if (indx !== -1) {
995
+ if (type[1] === 'pdf' || type[1] === 'docx' || type[1] === 'txt' || type[1] === 'doc') {
996
+ if (this.selectedMessage[indx].s3path) {
997
+ window.open(this.selectedMessage[indx].s3path, '_blank');
998
+ }
999
+ else {
1000
+ window.open(this.selectedMessage[indx].path, '_blank');
1001
+ }
1002
+ }
1003
+ else {
1004
+ imagePath = this.uploadedImages[indx].path;
1005
+ caption = this.comments[question.labelName + '=' + document];
1006
+ }
1007
+ }
1008
+ }
1009
+ }
1010
+ else if (this.uploadedFiles[question.labelName] && this.uploadedFiles[question.labelName][document]) {
1011
+ const indx = this.uploadedImages.indexOf(this.uploadedFiles[question.labelName][document]);
1012
+ let type = this.uploadedFiles[question.labelName][document].type.split('/');
1013
+ let ext = type[1];
1014
+ type = type[0];
1015
+ if (indx !== -1) {
1016
+ if (type === 'video' || type === 'audio') {
1017
+ this.showAudioVideoFile(this.uploadedImages[indx]);
1018
+ }
1019
+ else if (ext === 'pdf' || ext === 'docx' || ext === 'txt' || ext === 'doc' || ext === 'vnd.openxmlformats-officedocument.spreadsheetml.sheet') {
1020
+ window.open(this.uploadedFiles[question.labelName][document].s3path, '_blank');
1021
+ }
1022
+ else {
1023
+ // console.log('typetxt2',this.uploadedImages[indx]);
1024
+ if (this.uploadedImages && this.uploadedImages[indx] && this.uploadedImages[indx]['keyName'] &&
1025
+ this.uploadedImages[indx]['keyName'].includes('docx')) {
1026
+ window.open(this.uploadedFiles[question.labelName][document].s3path, '_blank');
1027
+ }
1028
+ else {
1029
+ imagePath = this.uploadedImages[indx].s3path;
1030
+ caption = this.uploadedImages[indx].comments;
1031
+ }
1032
+ }
1033
+ }
1034
+ }
1035
+ if (imagePath) {
1036
+ const imgobj = new Image(count, {
1037
+ img: imagePath,
1038
+ description: caption
1039
+ });
1040
+ this.image_list_popup.push(imgobj);
1041
+ count++;
1042
+ }
1043
+ if (count > 0) {
1044
+ setTimeout(() => {
1045
+ this.openImageModalRow(this.image_list_popup[0]);
1046
+ }, 200);
1047
+ }
1048
+ }
1049
+ openImageModalRow(image) {
1050
+ const index = this.getCurrentIndexCustomLayout(image, this.image_list_popup);
1051
+ this.openModal(1, index, this.customButtonsFontAwesomeConfig);
1052
+ }
1053
+ getCurrentIndexCustomLayout(image, images) {
1054
+ return image ? images.indexOf(image) : -1;
1055
+ }
1056
+ openModal(id, imageIndex, buttonsConfig) {
1057
+ const dialogRef = this.modalGalleryService.open({
1058
+ id: id,
1059
+ images: this.image_list_popup,
1060
+ currentImage: this.image_list_popup[imageIndex],
1061
+ libConfig: {
1062
+ buttonsConfig: buttonsConfig,
1063
+ currentImageConfig: {
1064
+ downloadable: true
1065
+ }
1066
+ }
1067
+ });
1068
+ }
1069
+ showAudioVideoFile(file) {
1070
+ const fileviewdialogRef = this.dialog.open(ShowuploadfileComponent, {
1071
+ width: '50%',
1072
+ panelClass: ['popup-class', 'commonpopupmainclass', 'uploadfilecomponentclass'],
1073
+ disableClose: true,
1074
+ data: {
1075
+ file: file,
1076
+ source: 'qnr'
1077
+ }
1078
+ });
1079
+ fileviewdialogRef.afterClosed().subscribe(result => {
1080
+ });
1081
+ }
1082
+ editQnr() {
1083
+ this.editQuestionnaire = !this.editQuestionnaire;
1084
+ }
1085
+ getDocuments(question) {
1086
+ if (question.filePropertie.maxNoOfFile > 1 && question.filePropertie.minNoOfFile !== question.filePropertie.maxNoOfFile) {
1087
+ return this.uploadFilesTemp[question.labelName];
1088
+ }
1089
+ else {
1090
+ return question.filePropertie.allowedDocuments;
1091
+ }
1092
+ }
1093
+ showProviderText(question) {
1094
+ if (question.whoCanAnswer && question.whoCanAnswer === 'PROVIDER_ONLY') {
1095
+ return true;
1096
+ }
1097
+ return false;
1098
+ }
1099
+ successGoback() {
1100
+ this.buttonDisable = false;
1101
+ if (!this.type) {
1102
+ this.location.back();
1103
+ }
1104
+ else {
1105
+ this.filestoUpload = [];
1106
+ this.editQnr();
1107
+ this.returnAnswers.emit('reload');
1108
+ if (this.type !== 'qnr-link') {
1109
+ this.toastService.showSuccess('Updated Successfully');
1110
+ }
1111
+ }
1112
+ }
1113
+ showDataGridAddSection(question, value) {
1114
+ this.showDataGrid[question.labelName] = value;
1115
+ this.updatedGridIndex[question.labelName] = null;
1116
+ }
1117
+ showDataGridAddSectionn(question, value) {
1118
+ this.quesStore = question;
1119
+ this.lStorageService.setitemonLocalStorage('quesStore', this.quesStore);
1120
+ this.showDataGrid[question.labelName] = value;
1121
+ this.updatedGridIndex[question.labelName] = null;
1122
+ this.qnrPopup(question, true);
1123
+ }
1124
+ saveDataGridColumn(question) {
1125
+ let columns = [];
1126
+ for (let column of question.dataGridProperties.dataGridColumns) {
1127
+ if (this.dataGridColumns[question.labelName + '=' + column.order] || column.dataType === 'bool') {
1128
+ columns[column.order] = this.dataGridColumns[question.labelName + '=' + column.order];
1129
+ }
1130
+ else {
1131
+ if (column.dataType === 'list' || column.dataType === 'fileUpload') {
1132
+ columns[column.order] = [];
1133
+ }
1134
+ else {
1135
+ columns[column.order] = '';
1136
+ }
1137
+ }
1138
+ }
1139
+ if (!this.dataGridColumnsAnswerList[question.labelName]) {
1140
+ this.dataGridColumnsAnswerList[question.labelName] = [];
1141
+ }
1142
+ if (this.updatedGridIndex[question.labelName] !== null) {
1143
+ this.dataGridColumnsAnswerList[question.labelName][this.updatedGridIndex[question.labelName]] = columns;
1144
+ }
1145
+ else {
1146
+ this.dataGridColumnsAnswerList[question.labelName].push(columns);
1147
+ }
1148
+ this.cancelAddorUpdate(question);
1149
+ this.onSubmit('inputChange');
1150
+ }
1151
+ editDataGrid(question, column) {
1152
+ const index = this.dataGridColumnsAnswerList[question.labelName].indexOf(column);
1153
+ Object.keys(column).forEach(key => {
1154
+ this.dataGridColumns[question.labelName + '=' + key] = column[key];
1155
+ });
1156
+ this.updatedGridIndex[question.labelName] = index;
1157
+ this.showDataGrid[question.labelName] = true;
1158
+ }
1159
+ deleteDataGrid(question, column) {
1160
+ const index = this.dataGridColumnsAnswerList[question.labelName].indexOf(column);
1161
+ this.dataGridColumnsAnswerList[question.labelName].splice(index, 1);
1162
+ this.onSubmit('inputChange');
1163
+ }
1164
+ cancelAddorUpdate(question) {
1165
+ this.showDataGrid[question.labelName] = false;
1166
+ this.updatedGridIndex[question.labelName] = null;
1167
+ for (let column of question.dataGridProperties.dataGridColumns) {
1168
+ this.dataGridColumns[question.labelName + '=' + column.order] = '';
1169
+ }
1170
+ }
1171
+ getColumnType(columns, column) {
1172
+ const columnDetails = columns.filter((clmn) => clmn.order === JSON.parse(column));
1173
+ if (columnDetails[0]) {
1174
+ return columnDetails[0].dataType;
1175
+ }
1176
+ }
1177
+ getSectionCount() {
1178
+ return Object.keys(this.groupedQnr).length;
1179
+ }
1180
+ getBoolValue(value) {
1181
+ value = (value !== '' && typeof value === 'string') ? JSON.parse(value) : value;
1182
+ if (value === true) {
1183
+ return 'Yes';
1184
+ }
1185
+ return 'No';
1186
+ }
1187
+ getMaxdate(data) {
1188
+ let date;
1189
+ if (this.getQuestion(data).dateProperties && this.getQuestion(data).dateProperties.endDate) {
1190
+ const dt = this.reverse(this.getQuestion(data).dateProperties.endDate);
1191
+ date = new Date(dt);
1192
+ }
1193
+ else {
1194
+ date = this.tday;
1195
+ }
1196
+ return date;
1197
+ }
1198
+ getMindate(data) {
1199
+ let date;
1200
+ if (this.getQuestion(data).dateProperties && this.getQuestion(data).dateProperties.startDate) {
1201
+ const dt = this.reverse(this.getQuestion(data).dateProperties.startDate);
1202
+ date = new Date(dt);
1203
+ }
1204
+ else {
1205
+ date = this.minday;
1206
+ }
1207
+ return date;
1208
+ }
1209
+ reverse(s) {
1210
+ return s.split("-").reverse().join("-");
1211
+ }
1212
+ qnrPopup(question, value) {
1213
+ // if (value === 'edit') {
1214
+ // this.quesStore = this.lStorageService.getitemfromLocalStorage('quesStore');
1215
+ // this.showqnr = true;
1216
+ // this.editableItem = question;
1217
+ // console.log(JSON.stringify(this.quesStore))
1218
+ // const removeitemdialogRef = this.dialog.open(QnrDialogComponent, {
1219
+ // width: '50%',
1220
+ // panelClass: ['popup-class', 'commonpopupmainclass', 'confirmationmainclass'],
1221
+ // disableClose: true,
1222
+ // data: {
1223
+ // data: this.quesStore,
1224
+ // qnr_type: 'service_option',
1225
+ // view: 'qnrView',
1226
+ // isEdit: 'edit',
1227
+ // editableItem: this.editableItem,
1228
+ // servDetails: this.service
1229
+ // }
1230
+ // });
1231
+ // removeitemdialogRef.afterClosed().subscribe(result => {
1232
+ // if (result) {
1233
+ // console.log("result.data.answerLine", result.data.answerLine)
1234
+ // this.dataGridList = result.data.answerLine;
1235
+ // this.post_Data = result.data;
1236
+ // this.showItem = true;
1237
+ // this.item = result.data.answerLine[0].answer.dataGridList[0].dataGridListColumn[0].column.list[0];
1238
+ // if (result.data.totalPrice) {
1239
+ // this.totalPrice = result.data.totalPrice
1240
+ // }
1241
+ // let index1 = this.itemArray.findIndex(x => x.id === this.editableItem.id)
1242
+ // if (index1 > -1) {
1243
+ // this.itemArray.splice(index1, 1);
1244
+ // }
1245
+ // let dummyArray = { id: this.id, sequenceId: this.sequenceId, item: this.item, price: this.totalPrice, columnItem: this.dataGridList }
1246
+ // this.itemArray.push(dummyArray)
1247
+ // if (this.itemArray) {
1248
+ // this.lStorageService.setitemonLocalStorage('itemArray', this.itemArray);
1249
+ // }
1250
+ // this.serviceTotalPrice = 0;
1251
+ // this.itemArray.forEach((item: any) => {
1252
+ // this.serviceTotalPrice = this.serviceTotalPrice + item.price;
1253
+ // this.lStorageService.setitemonLocalStorage('serviceTotalPrice', this.serviceTotalPrice);
1254
+ // });
1255
+ // this.id = this.id + 1
1256
+ // let obj = { sequenceId: this.sequenceId, dgList: this.post_Data.answerLine };
1257
+ // this.finalObjectList.push(obj);
1258
+ // this.onSubmit('serviceOption')
1259
+ // }
1260
+ // });
1261
+ // }
1262
+ // else {
1263
+ // this.showqnr = true;
1264
+ // console.log("this.sequenceId", question)
1265
+ // this.sequenceId = question.sequnceId;
1266
+ // const removeitemdialogRef = this.dialog.open(QnrDialogComponent, {
1267
+ // width: '50%',
1268
+ // panelClass: ['popup-class', 'commonpopupmainclass', 'confirmationmainclass'],
1269
+ // disableClose: true,
1270
+ // data: {
1271
+ // data: question,
1272
+ // qnr_type: 'service_option',
1273
+ // view: 'qnrView',
1274
+ // isEdit: 'add',
1275
+ // servDetails: this.service
1276
+ // }
1277
+ // });
1278
+ // removeitemdialogRef.afterClosed().subscribe(result => {
1279
+ // if (result) {
1280
+ // this.dataGridList = result.data.answerLine;
1281
+ // this.post_Data = result.data;
1282
+ // this.showItem = true;
1283
+ // this.item = result.data.answerLine[0].answer.dataGridList[0].dataGridListColumn[0].column.list[0];
1284
+ // if (result.data.totalPrice) {
1285
+ // this.totalPrice = result.data.totalPrice
1286
+ // }
1287
+ // let dummyArray = { id: this.id, sequenceId: this.sequenceId, item: this.item, price: this.totalPrice, columnItem: this.dataGridList }
1288
+ // this.itemArray.push(dummyArray)
1289
+ // if (this.itemArray) {
1290
+ // this.lStorageService.setitemonLocalStorage('itemArray', this.itemArray);
1291
+ // }
1292
+ // this.serviceTotalPrice = 0;
1293
+ // this.itemArray.forEach((item: any) => {
1294
+ // let quantity = item.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity;
1295
+ // this.serviceTotalPrice = (this.serviceTotalPrice + item.price) * quantity;
1296
+ // this.lStorageService.setitemonLocalStorage('serviceTotalPrice', this.serviceTotalPrice);
1297
+ // });
1298
+ // this.id = this.id + 1
1299
+ // let obj = { sequenceId: this.sequenceId, dgList: this.post_Data.answerLine };
1300
+ // this.finalObjectList.push(obj);
1301
+ // this.onSubmit('serviceOption')
1302
+ // }
1303
+ // });
1304
+ // }
1305
+ }
1306
+ increment(item) {
1307
+ // const removeitemdialogRef = this.dialog.open(QnrDialogComponent, {
1308
+ // width: '100%',
1309
+ // panelClass: ['popup-class', 'commonpopupmainclass', 'confirmationmainclass'],
1310
+ // disableClose: true,
1311
+ // data: {
1312
+ // item: item,
1313
+ // data: this.questionnaireList,
1314
+ // view: 'qnrrepeatView',
1315
+ // servDetails: this.service
1316
+ // }
1317
+ // });
1318
+ // removeitemdialogRef.afterClosed().subscribe(result => {
1319
+ // if (result) {
1320
+ // if (result === 'addNew') {
1321
+ // this.quesStore = this.lStorageService.getitemfromLocalStorage('quesStore');
1322
+ // this.qnrPopup(this.quesStore, true)
1323
+ // } else {
1324
+ // if (!this.sequenceId) {
1325
+ // this.sequenceId = item.sequenceId
1326
+ // }
1327
+ // let dummyArray = { id: this.id, sequenceId: this.sequenceId, item: result.repeatItem.item, price: result.repeatItem.price, columnItem: result.repeatItem.columnItem }
1328
+ // let items = dummyArray.columnItem[0].answer.dataGridList[0].dataGridListColumn;
1329
+ // for (let i = 0; i < items.length; i++) {
1330
+ // items[i].quantity = items[i].quantity + 1;
1331
+ // }
1332
+ // if (this.itemArray) {
1333
+ // this.lStorageService.setitemonLocalStorage('itemArray', this.itemArray);
1334
+ // }
1335
+ // console.log("This.ItemArray", this.itemArray)
1336
+ // this.serviceTotalPrice = 0;
1337
+ // this.itemArray.forEach((item: any) => {
1338
+ // let quantity = item.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity;
1339
+ // console.log("quantity", quantity)
1340
+ // this.serviceTotalPrice += item.price * quantity;
1341
+ // });
1342
+ // console.log("serviceTotalPrice", this.serviceTotalPrice)
1343
+ // this.lStorageService.setitemonLocalStorage('serviceTotalPrice', this.serviceTotalPrice);
1344
+ // this.id = this.id + 1
1345
+ // let obj = { sequenceId: this.sequenceId, dgList: result.repeatItem.columnItem };
1346
+ // this.finalObjectList.push(obj);
1347
+ // this.onSubmit('serviceOption')
1348
+ // }
1349
+ // }
1350
+ // });
1351
+ }
1352
+ getItemQuantity(item) {
1353
+ let quantity = item.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity;
1354
+ return quantity;
1355
+ // console.log("item", item)
1356
+ }
1357
+ decrement(removingItem) {
1358
+ let index = this.itemArray.findIndex((x) => x.id === removingItem.id);
1359
+ if (index > -1) {
1360
+ console.log("this.itemArray[index]", this.itemArray[index]);
1361
+ if (this.getItemQuantity(this.itemArray[index]) == 1) {
1362
+ this.itemArray.splice(index, 1); // 2nd parameter means remove one item only
1363
+ }
1364
+ else {
1365
+ let items = this.itemArray[index].columnItem[0].answer.dataGridList[0].dataGridListColumn;
1366
+ for (let i = 0; i < items.length; i++) {
1367
+ items[i].quantity = items[i].quantity - 1;
1368
+ }
1369
+ }
1370
+ if (this.itemArray) {
1371
+ this.lStorageService.setitemonLocalStorage('itemArray', this.itemArray);
1372
+ }
1373
+ this.serviceTotalPrice = 0;
1374
+ this.itemArray.forEach((item) => {
1375
+ this.serviceTotalPrice = this.serviceTotalPrice + item.price;
1376
+ });
1377
+ this.lStorageService.setitemonLocalStorage('serviceTotalPrice', this.serviceTotalPrice);
1378
+ this.finalObjectList.splice(index, 1);
1379
+ }
1380
+ this.onSubmit('serviceOption');
1381
+ }
1382
+ disableInput() {
1383
+ return false;
1384
+ }
1385
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QuestionnaireComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.WordProcessor }, { token: i3.LocalStorageService }, { token: i4.DateTimeProcessor }, { token: i5.MatDialog }, { token: i6.FileService }, { token: i7.CommonService }, { token: i8.QuestionaireService }, { token: i9.ErrorMessagingService }, { token: i10.ToastService }, { token: i11.ModalGalleryService }, { token: i12.SharedService }, { token: i13.Location }], target: i0.ɵɵFactoryTarget.Component });
1386
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: QuestionnaireComponent, selector: "app-questionnaire", inputs: { questionnaireList: "questionnaireList", source: "source", accountId: "accountId", questionAnswers: "questionAnswers", customerDetails: "customerDetails", uuid: "uuid", type: "type", waitlistStatus: "waitlistStatus", orderStatus: "orderStatus", donationDetails: "donationDetails", service: "service", mode: "mode", tempType: "tempType", bookingType: "bookingType" }, outputs: { fileChanged: "fileChanged", returnAnswers: "returnAnswers" }, viewQueries: [{ propertyName: "file2", first: true, predicate: ["logofile1"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<section class=\"cons-inbox no-padding-small\" *ngIf=\"!showservice\">\r\n <div class=\"container consumer-dashhome p-0\" *ngIf=\"!type && source!='proLead'\">\r\n <div class=\"card title-gb rounded-0\" *ngIf=\"uuid\">\r\n <h5 class=\"mt-2 bold\">{{questionnaire_heading | capitalizeFirst}} <a class=\"pull-left me-4 back-btn\"\r\n (click)=\"goBack()\"><i class=\"fa fa-arrow-left\"></i></a></h5>\r\n </div>\r\n </div>\r\n <app-common-innerloading-spinner *ngIf=\"loading\"></app-common-innerloading-spinner>\r\n <div class=\"d-flex flex-column-fluid pull-right me-2 mb-4\"\r\n *ngIf=\"type !== 'qnrLinkProvider' && !buttonDisable && waitlistStatus\">\r\n <button class=\"normal-btn edit\" mat-flat-button (click)=\"editQnr()\">Edit</button>\r\n </div>\r\n <div class=\"d-flex flex-column-fluid width-100\" [class.qnrDisableState]=\"disableInput()\"\r\n [class.p-0]=\"uuid && (source === 'consCheckin' || source === 'consAppt' || source === 'consOrder' || source === 'paper' || source === 'consDonationDetails' || source === 'ivr')\">\r\n <div class=\"col-xl-12 force_center\" [class.p-0]=\"uuid\" [class.no-padding-small]=\"source && source=='ivr'\">\r\n <div class=\"\">\r\n <div class=\"qnrsec\" *ngFor=\"let qnr of groupedQnr | keyvalue: asIsOrder\"\r\n [class.section-shadow]=\"getSectionCount() > 1\" [class.no-padding-small]=\"source && source=='ivr'\">\r\n <div class=\"form-group card mgn-0\" *ngFor=\"let question of qnr.value\">\r\n <label class=\"col-12 quest\">{{getQuestion(question).label}}\r\n <i class=\"fa fa-plus-circle pull-right\" aria-hidden=\"true\"\r\n [class.addicon]=\"!buttonDisable && !disableInput()\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'dataGrid' && !showDataGrid[getQuestion(question).labelName]\"\r\n (click)=\"!buttonDisable && !disableInput() && showDataGridAddSection(getQuestion(question), true)\"></i>\r\n <div class=\"pro-only\" *ngIf=\"showProviderText(getQuestion(question))\">For Providers</div>\r\n <span class=\"red\" *ngIf=\"getQuestion(question).mandatory\">*</span>\r\n <div class=\"form-level-settings\" *ngIf=\"getQuestion(question).hint\"\r\n [innerHTML]=\"getQuestion(question).hint | safeHtml\">\r\n </div>\r\n </label>\r\n <!-- for file upload -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'fileUpload'\">\r\n <mat-select multiple #deptsel [disabled]=\"buttonDisable || disableInput()\"\r\n *ngIf=\"getQuestion(question).filePropertie.maxNoOfFile > 1 && getQuestion(question).filePropertie.minNoOfFile !== getQuestion(question).filePropertie.maxNoOfFile\"\r\n [(ngModel)]=\"uploadFilesTemp[getQuestion(question).labelName]\" class=\"select-box\" placeholder=\"Select\">\r\n <mat-option *ngFor=\"let document of getQuestion(question).filePropertie.allowedDocuments\"\r\n [value]=\"document\" (click)=\"changeImageSelected(getQuestion(question), document)\">\r\n {{document}}</mat-option>\r\n </mat-select>\r\n <div class=\"col-lg-12 col-12 col-md-12 col-sm-12 p-0 mt-4\"\r\n *ngIf=\"getDocuments(getQuestion(question)) && getDocuments(getQuestion(question)).length > 0\">\r\n <div class=\"dropzone dropzone-default dropzone-primary dz-clickable\"\r\n [class.single-file]=\"getQuestion(question).filePropertie.allowedDocuments.length==1\"\r\n style=\"cursor: auto;\">\r\n <ng-container *ngFor=\"let doc of getDocuments(getQuestion(question))\">\r\n <div class=\"dz-preview dz-processing dz-image-preview dz-error dz-complete\"\r\n *ngIf=\"getImg(getQuestion(question), doc)\">\r\n <div class=\"docname\" *ngIf=\"getQuestion(question).filePropertie.allowedDocuments.length > 1\">\r\n {{doc}}</div>\r\n <div class=\"dzimage pointer-cursor\" (click)=\"openAttachmentGallery(getQuestion(question), doc)\">\r\n <img alt=\"\" class=\"img_fit\" [src]=\"getImg(getQuestion(question), doc)\">\r\n </div>\r\n <input [disabled]=\"buttonDisable || disableInput()\" (blur)=\"onSubmit('inputChange');\"\r\n [(ngModel)]=\"comments[getQuestion(question).labelName + '=' + doc]\">\r\n <div class=\"gal_action\" *ngIf=\"!buttonDisable && !disableInput() && mode!=='read'\"\r\n (click)=\"changeImageSelected(getQuestion(question), doc)\">\r\n <i class=\"fa fa-times-circle\" aria-hidden=\"true\"></i>\r\n </div>\r\n </div>\r\n <div class=\"dz-preview dz-processing dz-image-preview dz-error dz-complete\"\r\n (click)=\"logofile1.click()\" *ngIf=\"!getImg(getQuestion(question), doc)\">\r\n <div class=\"docname\" *ngIf=\"getQuestion(question).filePropertie.allowedDocuments.length > 1\">\r\n {{doc}}</div>\r\n <div class=\"dz-image pointer-cursor\">\r\n </div>\r\n <input #logofile1 type=\"file\" accept=\"/*;capture=camera\" style=\"display:none;\"\r\n [disabled]=\"buttonDisable || disableInput()\"\r\n (change)=\"filesSelected($event, getQuestion(question), doc)\">\r\n <div class=\"dz-error-mark\">\r\n <a class=\"btn btn-icon btn-light-success btn-circle mr-2\"><i\r\n class=\"text-dark-50 flaticon-upload\"></i></a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for checkbox -->\r\n <div class=\"col-12\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'list' && getQuestion(question).listPropertie.maxAnswers > 1\">\r\n <div class=\"checkbox-list\">\r\n <label class=\"checkbox\" *ngFor=\"let value of getQuestion(question).labelValues\">\r\n <input type=\"checkbox\" [checked]=\"isChecked(value, getQuestion(question))\"\r\n (change)=\"listChange($event, value, getQuestion(question))\"\r\n [disabled]=\"buttonDisable || disableInput()\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for radio -->\r\n <div class=\"col-12\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'list' && getQuestion(question).listPropertie.maxAnswers === 1\">\r\n <div class=\"radio-list\">\r\n <label class=\"radio\" *ngFor=\"let value of getQuestion(question).labelValues\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isChecked(value, getQuestion(question))\"\r\n (change)=\"listChange($event, value, getQuestion(question))\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for toggel boolean -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'bool'\">\r\n <div class=\"radio-list\">\r\n <label class=\"radio\" *ngFor=\"let value of getQuestion(question).labelValues\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isBooleanChecked(value, getQuestion(question))\"\r\n (change)=\"booleanChange($event, value, getQuestion(question))\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Text -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'plainText'\">\r\n <input *ngIf=\"getQuestion(question).plainTextPropertie.maxNoOfLetter<=100\"\r\n [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\" \r\n [minlength]=\"getQuestion(question).plainTextPropertie.minNoOfLetter\"\r\n [maxlength]=\"getQuestion(question).plainTextPropertie.maxNoOfLetter\"\r\n class=\"form-control1 form-control-solid\" type=\"text\" [disabled]=\"buttonDisable || disableInput()\">\r\n <textarea rows=\"3\" *ngIf=\"getQuestion(question).plainTextPropertie.maxNoOfLetter>100\"\r\n [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\"\r\n [minlength]=\"getQuestion(question).plainTextPropertie.minNoOfLetter\"\r\n [maxlength]=\"getQuestion(question).plainTextPropertie.maxNoOfLetter\" [disabled]=\"buttonDisable || disableInput()\"\r\n class=\"form-control2 form-control-solid\"></textarea>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Number -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'number'\">\r\n <input [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\"\r\n [min]=\"getQuestion(question).numberPropertie.start\" [max]=\"getQuestion(question).numberPropertie.end\"\r\n [disabled]=\"buttonDisable || disableInput()\" class=\"form-control1 form-control-solid\" type=\"number\"\r\n (keypress)=\"isNumeric($event)\">\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Date -->\r\n <div class=\"col-12 disp-flex\" *ngIf=\"getQuestion(question).fieldDataType === 'date'\">\r\n <input class=\"form-control1\" [matDatepicker]=\"picker\" [max]=\"getMaxdate(question)\"\r\n [min]=\"getMindate(question)\" [(ngModel)]=\"answers[getQuestion(question).labelName]\"\r\n (dateChange)=\"onSubmit('inputChange')\" [disabled]=\"buttonDisable || disableInput()\"\r\n (click)=\"picker.open()\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker [disabled]=\"buttonDisable || disableInput()\"></mat-datepicker>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Datagrid -->\r\n <div class=\"table-responsive1\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'dataGrid' && dataGridColumnsAnswerList[getQuestion(question).labelName] && dataGridColumnsAnswerList[getQuestion(question).labelName].length > 0\">\r\n <table class=\"table table-head-custom table-head-bg table-borderless table-vertical-center\">\r\n <thead>\r\n <th *ngFor=\"let column of getQuestion(question).dataGridProperties.dataGridColumns\">\r\n {{column.columnId}}</th>\r\n <th *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n </th>\r\n <th *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n </th>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let column of dataGridColumnsAnswerList[getQuestion(question).labelName];let i =index\">\r\n <td *ngFor=\"let data of column | keyvalue\">\r\n <div\r\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) === 'date'\">\r\n {{data.value | date : newTimeDateFormat}}\r\n </div>\r\n <div\r\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) === 'bool'\">\r\n {{getBoolValue(data.value)}}\r\n </div>\r\n <div\r\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) !== 'date' && getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) !== 'bool'\">\r\n {{data.value}}\r\n </div>\r\n </td>\r\n <td *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n <i class=\"fa fa-pen\" (click)=\"editDataGrid(getQuestion(question), column)\"></i>\r\n </td>\r\n <td *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n <i class=\"fa fa-trash\" (click)=\"deleteDataGrid(getQuestion(question), column)\"></i>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"gridSection\" *ngIf=\"showDataGrid[getQuestion(question).labelName]\">\r\n <div class=\"gridColumn\" *ngFor=\"let column of getQuestion(question).dataGridProperties.dataGridColumns\">\r\n <label>{{column.label}}\r\n <span class=\"red\" *ngIf=\"column.mandatory\">*</span>\r\n </label>\r\n <!-- for checkbox -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'list'\">\r\n <div class=\"checkbox-list\">\r\n <label class=\"checkbox\" *ngFor=\"let value of column.listPropertie.values\">\r\n <input type=\"checkbox\" [checked]=\"isChecked(value, getQuestion(question), column)\"\r\n (change)=\"listChange($event, value, getQuestion(question), column)\"\r\n [disabled]=\"buttonDisable || disableInput()\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n </div>\r\n <!-- for toggel boolean -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'bool'\">\r\n <div class=\"radio-list\">\r\n <label class=\"radio\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isBooleanChecked('yes', getQuestion(question), column)\"\r\n (change)=\"booleanChange($event, 'yes', getQuestion(question), column)\">\r\n <span></span>\r\n Yes\r\n </label>\r\n <label class=\"radio\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isBooleanChecked('no', getQuestion(question), column)\"\r\n (change)=\"booleanChange($event, 'no', getQuestion(question), column)\">\r\n <span></span>\r\n No\r\n </label>\r\n </div>\r\n </div>\r\n <!-- for Text -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'plainText'\">\r\n <input [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\r\n [disabled]=\"buttonDisable || disableInput()\" class=\"form-control1 form-control-solid\" type=\"text\">\r\n </div>\r\n <!-- for Number -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'number'\">\r\n <input [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\r\n [disabled]=\"buttonDisable || disableInput()\" [min]=\"column.numberPropertie.start\"\r\n [max]=\"column.numberPropertie.end\" class=\"form-control1 form-control-solid\" type=\"number\">\r\n </div>\r\n <!-- for Date -->\r\n <div class=\"col-12 disp-flex\" *ngIf=\"column.dataType === 'date'\">\r\n <input class=\"form-control1\" [matDatepicker]=\"picker\" [max]=\"getMaxdate(question)\"\r\n [min]=\"getMindate(question)\"\r\n [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\r\n [disabled]=\"buttonDisable || disableInput()\" (click)=\"picker.open()\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker [disabled]=\"buttonDisable || disableInput()\">\r\n </mat-datepicker>\r\n </div>\r\n </div>\r\n <div class=\"act-btns\">\r\n <button type=\"button\" class=\"btn btn-light-primary font-weight-bold\"\r\n (click)=\"cancelAddorUpdate(getQuestion(question))\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary font-weight-bold\"\r\n (click)=\"saveDataGridColumn(getQuestion(question))\">Add</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 col-12 col-sm-12 col-lg-12 p-0 submit-pad\"\r\n *ngIf=\"type !== 'qnrLinkProvider' && source!=='proLead' && (uuid || source === 'customer-details' || source === 'proDonation') && !disableInput()\">\r\n <button class=\"normal-btn\" mat-flat-button [class.spinner]=\"buttonDisable\"\r\n [class.spinner-darker-success]=\"buttonDisable\" [class.spinner-center]=\"buttonDisable\"\r\n (click)=\"!buttonDisable && onSubmit('submit')\" [disabled]=\"buttonDisable\"\r\n [class.disabled]=\"buttonDisable\">{{(type == 'qnr-link') ? 'Submit' : 'Update'}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n<ks-modal-gallery [id]=\"0\" *ngIf=\"image_list_popup && image_list_popup.length>0\" [modalImages]=\"image_list_popup\"\r\n [plainGalleryConfig]=\"customPlainGalleryRowConfig\" [buttonsConfig]=\"customButtonsFontAwesomeConfig\"\r\n (buttonBeforeHook)=\"onButtonBeforeHook($event)\"></ks-modal-gallery>\r\n<section class=\"cons-inbox no-padding-small\" *ngIf=\"showservice\">\r\n <div class=\"container consumer-dashhome\" *ngIf=\"!type\">\r\n <div class=\"card title-gb rounded-0\" *ngIf=\"uuid\">\r\n <h5 class=\"mt-2 bold\">{{questionnaire_heading | capitalizeFirst}} <a class=\"pull-left me-4 back-btn\"\r\n (click)=\"goBack()\"><i class=\"fa fa-arrow-left\"></i></a></h5>\r\n </div>\r\n </div>\r\n <app-common-innerloading-spinner *ngIf=\"loading\"></app-common-innerloading-spinner>\r\n <div class=\"d-flex flex-column-fluid pull-right me-2 mb-4\"\r\n *ngIf=\"type !== 'qnrLinkProvider' && !buttonDisable && waitlistStatus\">\r\n <button class=\"normal-btn edit\" mat-flat-button (click)=\"editQnr()\">Edit</button>\r\n </div>\r\n <div class=\"d-flex flex-column-fluid width-100\" [class.qnrDisableState]=\"disableInput()\"\r\n [class.p-0]=\"uuid && (source === 'consCheckin' || source === 'consAppt' || source === 'consDonationDetails' )\">\r\n <div class=\"col-xl-12 force_center p-0\" [class.p-0]=\"uuid\"\r\n [class.no-padding-small]=\"source && source=='ivr'\">\r\n <div class=\"\">\r\n <div class=\"\" *ngFor=\"let qnr of groupedQnr | keyvalue\" [class.section-shadow]=\"getSectionCount() > 1\">\r\n <div *ngIf=\"itemArray.length == 0 \">\r\n <div class=\"form-group mgn-0 border-dashed text-center\" *ngFor=\"let question of qnr.value\">\r\n <div class=\"qnr-section\" *ngIf=\"getSectionCount() > 1\">\r\n {{getQuestion(question).question.sectionName}}</div>\r\n <label class=\"col-12 quest pointer-cursor\"\r\n (click)=\"showDataGridAddSectionn(getQuestion(question).question, true)\">\r\n <div>\r\n <img src=\"{{cdnPath}}assets/images/service-options.svg\" alt=\"Service Options\" class=\"img-fluid pb-0\"\r\n width=\"300\" height=\"300\">\r\n </div>\r\n <div class=\"pro-only\" *ngIf=\"showProviderText(getQuestion(question).question)\">For Providers</div>\r\n <span class=\"red\" *ngIf=\"getQuestion(question).question.mandatory\">*</span>\r\n <div>\r\n <span class=\"text-primary font-weight-bold\">Please Choose your Pet</span>\r\n </div>\r\n <div class=\"mt-3\">\r\n <span class=\"btn btn-light font-weight-bold\">Continue</span>\r\n </div>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 col-12 col-sm-12 mb-4 p-0\" *ngIf=\"showItem\">\r\n <div>\r\n <div class=\"card-border\" *ngFor=\" let items of itemArray\">\r\n\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <div class=\"text-capitalize\">\r\n <div class=\"\">\r\n <span class=\"text-primary\">\r\n {{items.item}}<br>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex border-apply px-0\">\r\n <div (click)=\"decrement(items);\" class=\"pointer-cursor quantity quantity-1\">\r\n <span class=\"p-10\">-</span>\r\n </div>\r\n <div class=\"mx-2 pointer-cursor\"><span class=\"quantity\"\r\n *ngIf=\"items && items.columnItem && items.columnItem[0] && items.columnItem[0].answer && items.columnItem[0].answer.dataGridList && items.columnItem[0].answer.dataGridList[0] && items.columnItem[0].answer.dataGridList[0].dataGridListColumn && items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0] && items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity\">\r\n {{items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity}}</span>\r\n </div>\r\n <div (click)=\"increment(items);\" class=\"pointer-cursor quantity quantity-1\">\r\n <span class=\"p-10\">+</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <span class=\"text-primary\"><span><i class=\"fa fa-inr\"></i>\r\n {{items.price * getItemQuantity(items)}}/-\r\n </span>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n <div *ngIf=\"showItem &&itemArray.length > 0\">\r\n <div *ngFor=\"let qnr of groupedQnr | keyvalue\" [class.section-shadow]=\"getSectionCount() > 1\">\r\n <div *ngFor=\"let question of qnr.value\">\r\n <label class=\"col-12 quest pointer-cursor\"\r\n (click)=\"showDataGridAddSectionn(getQuestion(question).question, true)\">\r\n <span class=\"btn btn-light font-weight-bold\"><i class=\"fa fa-plus text-white\"></i>Add</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>", styles: [".dropzone{min-height:auto!important}.question-box{margin-top:10px}.btn-light{background-color:#1e4079!important;padding:5px 25px!important;color:#fff!important}.quest-outer{padding:10px}.error-msg{color:red}.upload-btn{background:#fff;border:1px solid;font-size:small}.card-border{box-shadow:0 0 5px 5px #f0f0f0!important;padding:10px 30px!important;margin:20px 10px!important;cursor:pointer!important;border-radius:10px!important}.border-apply{border:2px solid #1e4079!important;border-radius:20px!important}.quantity{font-size:20px!important;font-weight:700!important}.quantity-1:hover{background-color:#1e4079!important;color:#fff!important;font-weight:700!important;border-radius:50%!important;padding:-2px 12px!important}::ng-deep .mat-checkbox-layout{font-weight:400!important}.force_center{margin-left:auto;margin-right:auto}.input-group-text{display:-webkit-box;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.65rem 1rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#3f4254;text-align:center;white-space:nowrap;background-color:#f3f6f9!important;border:1px solid #E4E6EF!important;border-radius:.42rem;border-top-left-radius:0;border-bottom-left-radius:0;cursor:pointer}.w_100{width:100%}.img_fit{width:120px;height:120px}.dropzone .dropzone-default{border:1px dashed #EBEDF3!important}.select-box{padding:10px!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important}.normal-btn{padding:5px 20px;border:none!important}.edit{padding:3px 25px;border-radius:20px!important}.mgn-0{margin-left:0!important;margin-right:0!important;margin-bottom:10px!important}.quest{font-size:1.1rem!important}.mt-3 a:hover{text-decoration:underline!important}.dzimage,.dz-image{border:1px dashed #ccc}.gal_action{position:absolute;top:20px;right:-10px;background:#00000080;width:20px;height:20px;text-align:center;border-radius:50%;cursor:pointer}.single-file{padding:0!important;text-align:initial!important;border:none!important}.single-file .dz-preview{position:relative!important;display:inline-block!important;vertical-align:top!important;margin:16px!important;min-height:100px!important}.single-file .gal_action{top:-5px!important}.pro-only{float:right;color:red;font-size:.8rem}.qnrDisableState .card,.qnrDisableState .dropzone-default,.qnrDisableState .dz-image-preview{background:#eeeeee9e!important}.qnr-section{font-weight:700;padding-bottom:10px;text-transform:uppercase}.section-shadow{margin:20px 10px;padding:20px!important;box-shadow:0 0 10px #0000001f!important}.gridSection .gridColumn{padding:15px}.gridSection .gridColumn label{padding:0 12.5px!important;font-weight:400!important;color:#3f4254!important;font-size:.9rem!important}.gridSection .act-btns .btn{padding:5px 10px!important;margin:5px!important}.gridSection .act-btns{padding:0 20px}.fa-plus-circle{font-size:1.5rem!important}.addicon{color:#1e4079!important;cursor:pointer}.fa-trash,.fa-pen{color:#000!important;font-size:1rem!important}.dz-preview input{width:121px!important;border:1px solid #ccc}.submit-pad{padding:0 10px 20px!important}.form-group.card{border:1px solid #dadce063!important;border-radius:8px!important;padding:5px!important}.docname{width:120px;margin-bottom:5px;text-overflow:ellipsis!important;overflow:hidden!important;white-space:nowrap!important}@media (max-width: 750px){.normal-btn{padding:3px 10px;border:none!important}.edit{padding:2px 12px;border-radius:10px!important}}.col-xl-12,.col-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;width:100%;padding-right:12.5px;padding-left:12.5px}@media (min-width: 1200px){.col-xl-12{flex:0 0 100%;max-width:100%}}.qnrsec{padding:10px}.p-10{padding:8px!important}.form-control1{display:block!important;width:100%!important;height:calc(1.5em + 1.3rem + 2px)!important;padding:.65rem 1rem!important;font-size:1rem!important;font-weight:400!important;line-height:1.5!important;color:#3f4254!important;background-color:#fff!important;background-clip:padding-box!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important;box-shadow:none!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out!important}.form-control2{display:block!important;width:100%!important;padding:.65rem 1rem!important;font-size:1rem!important;font-weight:400!important;line-height:1.5!important;color:#3f4254!important;background-color:#fff!important;background-clip:padding-box!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important;box-shadow:none!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out!important}.form-group label{font-size:1rem;font-weight:400;color:#3f4254}label{display:inline-block;margin-bottom:.5rem}.col-12{flex:0 0 100%;max-width:100%}.radio-list .radio span{margin-right:.75rem}.radio>span{background-color:#ebedf3;border:1px solid transparent}.radio>span{height:18px;width:18px}.radio>span{border-radius:50%;background-color:none;display:flex;align-items:center;justify-content:center;flex-shrink:0}.radio-list .radio{margin-bottom:1rem}.radio{display:flex;align-items:center;position:relative;text-align:left;cursor:pointer;font-size:1rem;transition:all .3s ease;margin:0}.radio>input{position:absolute;z-index:-1;opacity:0}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid #EBEDF3;border-radius:.42rem}.radio-list .radio:last-child{margin-bottom:0}@media (min-width: 992px){.col-lg-12{flex:0 0 100%;max-width:100%}}.dropzone.dropzone-default .dz-preview .dz-image{border-radius:.42rem}.btn.btn-icon i{padding:0;margin:0}.btn i{font-size:1.3rem;padding-right:.35rem;vertical-align:middle;line-height:1;display:inline-flex}.btn i{transition:color .15s ease,background-color .15s ease,border-color .15s ease,box-shadow .15s ease}.text-dark-50{color:#7e8299!important}.btn.btn-icon.btn-circle{border-radius:50%}.btn.btn-light-success{color:#1bc5bd;background-color:#c9f7f5;border-color:transparent}.btn.btn-icon{display:inline-flex;align-items:center;justify-content:center;padding:0;height:calc(1.5em + 1.3rem + 2px);width:calc(1.5em + 1.3rem + 2px)}.btn{display:inline-block;font-weight:400;color:#3f4254;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.65rem 1rem;font-size:1rem;line-height:1.5;border-radius:.42rem;transition:color .3s ease-in-out,background-color .3s ease-in-out,border-color .3s ease-in-out,box-shadow .3s ease-in-out}.radio>input:checked~span{background-color:#1e4079}.radio>input:checked~span:after{background-color:#fff;border-color:#fff}.radio>input:checked~span:after{display:block}.radio>span:after{width:6px;height:6px}.radio>span:after{content:\"\";border-radius:100%!important}i{font-size:1.25rem;color:#b5b5c3}.dropzone{min-height:auto}.btn.btn-light-primary{background-color:#f9e2a7;border-color:transparent}.checkbox-lis .checkbox span{margin-right:.75rem}.checkbox>span{background-color:#ebedf3;border:1px solid transparent}.checkbox>span{height:18px;width:18px}.checkbox>span{background-color:none;display:flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:.42rem}.checkbox>span:after{width:5px;height:10px}.checkbox>span:after{content:\"\";border-color:transparent;border-style:solid;border-width:0 2px 2px 0!important;transform:rotate(45deg);margin-top:-2px}.checkbox-list{display:flex;flex-direction:column}.checkbox>input{position:absolute;z-index:-1;opacity:0}.checkbox>input:checked~span{background-color:#1e4079}.checkbox>input:checked~span:after{border-color:#fff}.checkbox{display:flex;align-items:center;position:relative;text-align:left;cursor:pointer;font-size:1rem;transition:all .3s ease;margin:0}.add-plus{color:#fff!important}.border-dashed{padding:10px!important}.add-plus-black{color:#000!important}.plus-black .fa .fa-plus{color:#000!important;font-size:12px!important}.checkbox-list .checkbox{margin-bottom:1rem}.checkbox-list .checkbox span{margin-right:.75rem}.checkbox-list .checkbox:last-child{margin-bottom:0}.btn.btn-primary{color:#fff;background-color:#1e4079;border-color:#1e4079}.font-weight-bold{font-weight:500!important}button{font-family:inherit}.form-control1:focus{color:#3f4254!important;background-color:#fff!important;border-color:#69b3ff!important;outline:0!important}.table.table-head-bg thead th:first-child{border-radius:.42rem}.table.table-head-bg thead tr,.table.table-head-bg thead th{background-color:#f3f6f9;border-bottom:0;letter-spacing:1px}.table.table-head-custom thead tr,.table.table-head-custom thead th{font-weight:600;color:#b5b5c3!important;font-size:.9rem;text-transform:uppercase}.table thead th{font-weight:600;font-size:1rem;border-bottom-width:1px;padding-top:1rem;padding-bottom:1rem}.table th,.table td{padding:.75rem}.table.table-head-bg thead tr:last-child,.table.table-head-bg thead th:last-child{border-top-right-radius:.42rem;border-bottom-right-radius:.42rem}.table-responsive1{display:block;width:100%;overflow-x:auto}.text-white{color:#fff!important;font-size:15px!important}.details{border:2px solid #1e4079!important;border-radius:10px!important;max-width:13%}.text-primary{color:#1e4079!important}.text-link{color:#1a6888}@media (min-width: 300px) and (max-width: 750px){.item{font-size:10px!important}.item_price{font-size:9px!important}.details{border:2px solid #1e4079!important;border-radius:10px!important;max-width:23%}}@media (max-width: 450px){.item{font-size:10px!important}.item_price{font-size:9px!important}}@media (min-width: 600px) and (max-width: 992px){.items{font-size:18px!important}.item_prices{font-size:16px!important}}@media (max-width: 450px){.incre{border:2px solid blue!important;border-radius:100px!important;max-width:20.66667%!important}}.font-weight-bold{font-weight:700!important}@media (max-width: 750px){.incre{max-width:20.66667%!important}}.incre{border:2px solid blue!important;border-radius:100px!important;max-width:10.66667%}@media (max-width: 893px){.disp-none-small{display:none!important}}@media (min-width: 800px){.disp-none-large{display:none!important}}.fa-inr{font-size:15px!important;color:#1e4079!important}.text-primary{font-weight:700!important}.flaticon-upload:before{content:\"\\f11d\"}[class*=\" flaticon-\"]:before{font-family:Flaticon;font-style:normal;font-weight:400;font-feature-settings:normal;font-variant:normal;line-height:1;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-smoothing:antialiased}.dropzone{position:relative!important;display:inline-block!important;vertical-align:top!important;min-height:100px!important}.dz-image{border-radius:20px;overflow:hidden;width:120px;height:120px;position:relative;display:block;z-index:10}.dz-image{border:1px dashed #ccc}.dropzone .dz-preview .dz-success-mark,.dropzone .dz-preview .dz-error-mark{pointer-events:none;z-index:500;position:absolute;display:block;top:50%;left:50%;margin-left:-27px;margin-top:-27px}\n"], dependencies: [{ kind: "directive", type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i14.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i14.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i14.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i14.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i14.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i14.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i14.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i15.LoadingSpinnerComponent, selector: "app-common-innerloading-spinner", inputs: ["spinnerParams"] }, { kind: "component", type: i16.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i16.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i16.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i17.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i18.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i19.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "pipe", type: i13.DatePipe, name: "date" }, { kind: "pipe", type: i13.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i20.CapitalizeFirstPipe, name: "capitalizeFirst" }, { kind: "pipe", type: i21.SafeHtmlPipe, name: "safeHtml" }] });
1387
+ }
1388
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QuestionnaireComponent, decorators: [{
1389
+ type: Component,
1390
+ args: [{ selector: 'app-questionnaire', template: "<section class=\"cons-inbox no-padding-small\" *ngIf=\"!showservice\">\r\n <div class=\"container consumer-dashhome p-0\" *ngIf=\"!type && source!='proLead'\">\r\n <div class=\"card title-gb rounded-0\" *ngIf=\"uuid\">\r\n <h5 class=\"mt-2 bold\">{{questionnaire_heading | capitalizeFirst}} <a class=\"pull-left me-4 back-btn\"\r\n (click)=\"goBack()\"><i class=\"fa fa-arrow-left\"></i></a></h5>\r\n </div>\r\n </div>\r\n <app-common-innerloading-spinner *ngIf=\"loading\"></app-common-innerloading-spinner>\r\n <div class=\"d-flex flex-column-fluid pull-right me-2 mb-4\"\r\n *ngIf=\"type !== 'qnrLinkProvider' && !buttonDisable && waitlistStatus\">\r\n <button class=\"normal-btn edit\" mat-flat-button (click)=\"editQnr()\">Edit</button>\r\n </div>\r\n <div class=\"d-flex flex-column-fluid width-100\" [class.qnrDisableState]=\"disableInput()\"\r\n [class.p-0]=\"uuid && (source === 'consCheckin' || source === 'consAppt' || source === 'consOrder' || source === 'paper' || source === 'consDonationDetails' || source === 'ivr')\">\r\n <div class=\"col-xl-12 force_center\" [class.p-0]=\"uuid\" [class.no-padding-small]=\"source && source=='ivr'\">\r\n <div class=\"\">\r\n <div class=\"qnrsec\" *ngFor=\"let qnr of groupedQnr | keyvalue: asIsOrder\"\r\n [class.section-shadow]=\"getSectionCount() > 1\" [class.no-padding-small]=\"source && source=='ivr'\">\r\n <div class=\"form-group card mgn-0\" *ngFor=\"let question of qnr.value\">\r\n <label class=\"col-12 quest\">{{getQuestion(question).label}}\r\n <i class=\"fa fa-plus-circle pull-right\" aria-hidden=\"true\"\r\n [class.addicon]=\"!buttonDisable && !disableInput()\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'dataGrid' && !showDataGrid[getQuestion(question).labelName]\"\r\n (click)=\"!buttonDisable && !disableInput() && showDataGridAddSection(getQuestion(question), true)\"></i>\r\n <div class=\"pro-only\" *ngIf=\"showProviderText(getQuestion(question))\">For Providers</div>\r\n <span class=\"red\" *ngIf=\"getQuestion(question).mandatory\">*</span>\r\n <div class=\"form-level-settings\" *ngIf=\"getQuestion(question).hint\"\r\n [innerHTML]=\"getQuestion(question).hint | safeHtml\">\r\n </div>\r\n </label>\r\n <!-- for file upload -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'fileUpload'\">\r\n <mat-select multiple #deptsel [disabled]=\"buttonDisable || disableInput()\"\r\n *ngIf=\"getQuestion(question).filePropertie.maxNoOfFile > 1 && getQuestion(question).filePropertie.minNoOfFile !== getQuestion(question).filePropertie.maxNoOfFile\"\r\n [(ngModel)]=\"uploadFilesTemp[getQuestion(question).labelName]\" class=\"select-box\" placeholder=\"Select\">\r\n <mat-option *ngFor=\"let document of getQuestion(question).filePropertie.allowedDocuments\"\r\n [value]=\"document\" (click)=\"changeImageSelected(getQuestion(question), document)\">\r\n {{document}}</mat-option>\r\n </mat-select>\r\n <div class=\"col-lg-12 col-12 col-md-12 col-sm-12 p-0 mt-4\"\r\n *ngIf=\"getDocuments(getQuestion(question)) && getDocuments(getQuestion(question)).length > 0\">\r\n <div class=\"dropzone dropzone-default dropzone-primary dz-clickable\"\r\n [class.single-file]=\"getQuestion(question).filePropertie.allowedDocuments.length==1\"\r\n style=\"cursor: auto;\">\r\n <ng-container *ngFor=\"let doc of getDocuments(getQuestion(question))\">\r\n <div class=\"dz-preview dz-processing dz-image-preview dz-error dz-complete\"\r\n *ngIf=\"getImg(getQuestion(question), doc)\">\r\n <div class=\"docname\" *ngIf=\"getQuestion(question).filePropertie.allowedDocuments.length > 1\">\r\n {{doc}}</div>\r\n <div class=\"dzimage pointer-cursor\" (click)=\"openAttachmentGallery(getQuestion(question), doc)\">\r\n <img alt=\"\" class=\"img_fit\" [src]=\"getImg(getQuestion(question), doc)\">\r\n </div>\r\n <input [disabled]=\"buttonDisable || disableInput()\" (blur)=\"onSubmit('inputChange');\"\r\n [(ngModel)]=\"comments[getQuestion(question).labelName + '=' + doc]\">\r\n <div class=\"gal_action\" *ngIf=\"!buttonDisable && !disableInput() && mode!=='read'\"\r\n (click)=\"changeImageSelected(getQuestion(question), doc)\">\r\n <i class=\"fa fa-times-circle\" aria-hidden=\"true\"></i>\r\n </div>\r\n </div>\r\n <div class=\"dz-preview dz-processing dz-image-preview dz-error dz-complete\"\r\n (click)=\"logofile1.click()\" *ngIf=\"!getImg(getQuestion(question), doc)\">\r\n <div class=\"docname\" *ngIf=\"getQuestion(question).filePropertie.allowedDocuments.length > 1\">\r\n {{doc}}</div>\r\n <div class=\"dz-image pointer-cursor\">\r\n </div>\r\n <input #logofile1 type=\"file\" accept=\"/*;capture=camera\" style=\"display:none;\"\r\n [disabled]=\"buttonDisable || disableInput()\"\r\n (change)=\"filesSelected($event, getQuestion(question), doc)\">\r\n <div class=\"dz-error-mark\">\r\n <a class=\"btn btn-icon btn-light-success btn-circle mr-2\"><i\r\n class=\"text-dark-50 flaticon-upload\"></i></a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for checkbox -->\r\n <div class=\"col-12\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'list' && getQuestion(question).listPropertie.maxAnswers > 1\">\r\n <div class=\"checkbox-list\">\r\n <label class=\"checkbox\" *ngFor=\"let value of getQuestion(question).labelValues\">\r\n <input type=\"checkbox\" [checked]=\"isChecked(value, getQuestion(question))\"\r\n (change)=\"listChange($event, value, getQuestion(question))\"\r\n [disabled]=\"buttonDisable || disableInput()\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for radio -->\r\n <div class=\"col-12\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'list' && getQuestion(question).listPropertie.maxAnswers === 1\">\r\n <div class=\"radio-list\">\r\n <label class=\"radio\" *ngFor=\"let value of getQuestion(question).labelValues\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isChecked(value, getQuestion(question))\"\r\n (change)=\"listChange($event, value, getQuestion(question))\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for toggel boolean -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'bool'\">\r\n <div class=\"radio-list\">\r\n <label class=\"radio\" *ngFor=\"let value of getQuestion(question).labelValues\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isBooleanChecked(value, getQuestion(question))\"\r\n (change)=\"booleanChange($event, value, getQuestion(question))\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Text -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'plainText'\">\r\n <input *ngIf=\"getQuestion(question).plainTextPropertie.maxNoOfLetter<=100\"\r\n [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\" \r\n [minlength]=\"getQuestion(question).plainTextPropertie.minNoOfLetter\"\r\n [maxlength]=\"getQuestion(question).plainTextPropertie.maxNoOfLetter\"\r\n class=\"form-control1 form-control-solid\" type=\"text\" [disabled]=\"buttonDisable || disableInput()\">\r\n <textarea rows=\"3\" *ngIf=\"getQuestion(question).plainTextPropertie.maxNoOfLetter>100\"\r\n [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\"\r\n [minlength]=\"getQuestion(question).plainTextPropertie.minNoOfLetter\"\r\n [maxlength]=\"getQuestion(question).plainTextPropertie.maxNoOfLetter\" [disabled]=\"buttonDisable || disableInput()\"\r\n class=\"form-control2 form-control-solid\"></textarea>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Number -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'number'\">\r\n <input [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\"\r\n [min]=\"getQuestion(question).numberPropertie.start\" [max]=\"getQuestion(question).numberPropertie.end\"\r\n [disabled]=\"buttonDisable || disableInput()\" class=\"form-control1 form-control-solid\" type=\"number\"\r\n (keypress)=\"isNumeric($event)\">\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Date -->\r\n <div class=\"col-12 disp-flex\" *ngIf=\"getQuestion(question).fieldDataType === 'date'\">\r\n <input class=\"form-control1\" [matDatepicker]=\"picker\" [max]=\"getMaxdate(question)\"\r\n [min]=\"getMindate(question)\" [(ngModel)]=\"answers[getQuestion(question).labelName]\"\r\n (dateChange)=\"onSubmit('inputChange')\" [disabled]=\"buttonDisable || disableInput()\"\r\n (click)=\"picker.open()\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker [disabled]=\"buttonDisable || disableInput()\"></mat-datepicker>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Datagrid -->\r\n <div class=\"table-responsive1\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'dataGrid' && dataGridColumnsAnswerList[getQuestion(question).labelName] && dataGridColumnsAnswerList[getQuestion(question).labelName].length > 0\">\r\n <table class=\"table table-head-custom table-head-bg table-borderless table-vertical-center\">\r\n <thead>\r\n <th *ngFor=\"let column of getQuestion(question).dataGridProperties.dataGridColumns\">\r\n {{column.columnId}}</th>\r\n <th *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n </th>\r\n <th *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n </th>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let column of dataGridColumnsAnswerList[getQuestion(question).labelName];let i =index\">\r\n <td *ngFor=\"let data of column | keyvalue\">\r\n <div\r\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) === 'date'\">\r\n {{data.value | date : newTimeDateFormat}}\r\n </div>\r\n <div\r\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) === 'bool'\">\r\n {{getBoolValue(data.value)}}\r\n </div>\r\n <div\r\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) !== 'date' && getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) !== 'bool'\">\r\n {{data.value}}\r\n </div>\r\n </td>\r\n <td *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n <i class=\"fa fa-pen\" (click)=\"editDataGrid(getQuestion(question), column)\"></i>\r\n </td>\r\n <td *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n <i class=\"fa fa-trash\" (click)=\"deleteDataGrid(getQuestion(question), column)\"></i>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"gridSection\" *ngIf=\"showDataGrid[getQuestion(question).labelName]\">\r\n <div class=\"gridColumn\" *ngFor=\"let column of getQuestion(question).dataGridProperties.dataGridColumns\">\r\n <label>{{column.label}}\r\n <span class=\"red\" *ngIf=\"column.mandatory\">*</span>\r\n </label>\r\n <!-- for checkbox -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'list'\">\r\n <div class=\"checkbox-list\">\r\n <label class=\"checkbox\" *ngFor=\"let value of column.listPropertie.values\">\r\n <input type=\"checkbox\" [checked]=\"isChecked(value, getQuestion(question), column)\"\r\n (change)=\"listChange($event, value, getQuestion(question), column)\"\r\n [disabled]=\"buttonDisable || disableInput()\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n </div>\r\n <!-- for toggel boolean -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'bool'\">\r\n <div class=\"radio-list\">\r\n <label class=\"radio\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isBooleanChecked('yes', getQuestion(question), column)\"\r\n (change)=\"booleanChange($event, 'yes', getQuestion(question), column)\">\r\n <span></span>\r\n Yes\r\n </label>\r\n <label class=\"radio\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isBooleanChecked('no', getQuestion(question), column)\"\r\n (change)=\"booleanChange($event, 'no', getQuestion(question), column)\">\r\n <span></span>\r\n No\r\n </label>\r\n </div>\r\n </div>\r\n <!-- for Text -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'plainText'\">\r\n <input [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\r\n [disabled]=\"buttonDisable || disableInput()\" class=\"form-control1 form-control-solid\" type=\"text\">\r\n </div>\r\n <!-- for Number -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'number'\">\r\n <input [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\r\n [disabled]=\"buttonDisable || disableInput()\" [min]=\"column.numberPropertie.start\"\r\n [max]=\"column.numberPropertie.end\" class=\"form-control1 form-control-solid\" type=\"number\">\r\n </div>\r\n <!-- for Date -->\r\n <div class=\"col-12 disp-flex\" *ngIf=\"column.dataType === 'date'\">\r\n <input class=\"form-control1\" [matDatepicker]=\"picker\" [max]=\"getMaxdate(question)\"\r\n [min]=\"getMindate(question)\"\r\n [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\r\n [disabled]=\"buttonDisable || disableInput()\" (click)=\"picker.open()\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker [disabled]=\"buttonDisable || disableInput()\">\r\n </mat-datepicker>\r\n </div>\r\n </div>\r\n <div class=\"act-btns\">\r\n <button type=\"button\" class=\"btn btn-light-primary font-weight-bold\"\r\n (click)=\"cancelAddorUpdate(getQuestion(question))\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary font-weight-bold\"\r\n (click)=\"saveDataGridColumn(getQuestion(question))\">Add</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 col-12 col-sm-12 col-lg-12 p-0 submit-pad\"\r\n *ngIf=\"type !== 'qnrLinkProvider' && source!=='proLead' && (uuid || source === 'customer-details' || source === 'proDonation') && !disableInput()\">\r\n <button class=\"normal-btn\" mat-flat-button [class.spinner]=\"buttonDisable\"\r\n [class.spinner-darker-success]=\"buttonDisable\" [class.spinner-center]=\"buttonDisable\"\r\n (click)=\"!buttonDisable && onSubmit('submit')\" [disabled]=\"buttonDisable\"\r\n [class.disabled]=\"buttonDisable\">{{(type == 'qnr-link') ? 'Submit' : 'Update'}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n<ks-modal-gallery [id]=\"0\" *ngIf=\"image_list_popup && image_list_popup.length>0\" [modalImages]=\"image_list_popup\"\r\n [plainGalleryConfig]=\"customPlainGalleryRowConfig\" [buttonsConfig]=\"customButtonsFontAwesomeConfig\"\r\n (buttonBeforeHook)=\"onButtonBeforeHook($event)\"></ks-modal-gallery>\r\n<section class=\"cons-inbox no-padding-small\" *ngIf=\"showservice\">\r\n <div class=\"container consumer-dashhome\" *ngIf=\"!type\">\r\n <div class=\"card title-gb rounded-0\" *ngIf=\"uuid\">\r\n <h5 class=\"mt-2 bold\">{{questionnaire_heading | capitalizeFirst}} <a class=\"pull-left me-4 back-btn\"\r\n (click)=\"goBack()\"><i class=\"fa fa-arrow-left\"></i></a></h5>\r\n </div>\r\n </div>\r\n <app-common-innerloading-spinner *ngIf=\"loading\"></app-common-innerloading-spinner>\r\n <div class=\"d-flex flex-column-fluid pull-right me-2 mb-4\"\r\n *ngIf=\"type !== 'qnrLinkProvider' && !buttonDisable && waitlistStatus\">\r\n <button class=\"normal-btn edit\" mat-flat-button (click)=\"editQnr()\">Edit</button>\r\n </div>\r\n <div class=\"d-flex flex-column-fluid width-100\" [class.qnrDisableState]=\"disableInput()\"\r\n [class.p-0]=\"uuid && (source === 'consCheckin' || source === 'consAppt' || source === 'consDonationDetails' )\">\r\n <div class=\"col-xl-12 force_center p-0\" [class.p-0]=\"uuid\"\r\n [class.no-padding-small]=\"source && source=='ivr'\">\r\n <div class=\"\">\r\n <div class=\"\" *ngFor=\"let qnr of groupedQnr | keyvalue\" [class.section-shadow]=\"getSectionCount() > 1\">\r\n <div *ngIf=\"itemArray.length == 0 \">\r\n <div class=\"form-group mgn-0 border-dashed text-center\" *ngFor=\"let question of qnr.value\">\r\n <div class=\"qnr-section\" *ngIf=\"getSectionCount() > 1\">\r\n {{getQuestion(question).question.sectionName}}</div>\r\n <label class=\"col-12 quest pointer-cursor\"\r\n (click)=\"showDataGridAddSectionn(getQuestion(question).question, true)\">\r\n <div>\r\n <img src=\"{{cdnPath}}assets/images/service-options.svg\" alt=\"Service Options\" class=\"img-fluid pb-0\"\r\n width=\"300\" height=\"300\">\r\n </div>\r\n <div class=\"pro-only\" *ngIf=\"showProviderText(getQuestion(question).question)\">For Providers</div>\r\n <span class=\"red\" *ngIf=\"getQuestion(question).question.mandatory\">*</span>\r\n <div>\r\n <span class=\"text-primary font-weight-bold\">Please Choose your Pet</span>\r\n </div>\r\n <div class=\"mt-3\">\r\n <span class=\"btn btn-light font-weight-bold\">Continue</span>\r\n </div>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 col-12 col-sm-12 mb-4 p-0\" *ngIf=\"showItem\">\r\n <div>\r\n <div class=\"card-border\" *ngFor=\" let items of itemArray\">\r\n\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <div class=\"text-capitalize\">\r\n <div class=\"\">\r\n <span class=\"text-primary\">\r\n {{items.item}}<br>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex border-apply px-0\">\r\n <div (click)=\"decrement(items);\" class=\"pointer-cursor quantity quantity-1\">\r\n <span class=\"p-10\">-</span>\r\n </div>\r\n <div class=\"mx-2 pointer-cursor\"><span class=\"quantity\"\r\n *ngIf=\"items && items.columnItem && items.columnItem[0] && items.columnItem[0].answer && items.columnItem[0].answer.dataGridList && items.columnItem[0].answer.dataGridList[0] && items.columnItem[0].answer.dataGridList[0].dataGridListColumn && items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0] && items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity\">\r\n {{items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity}}</span>\r\n </div>\r\n <div (click)=\"increment(items);\" class=\"pointer-cursor quantity quantity-1\">\r\n <span class=\"p-10\">+</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <span class=\"text-primary\"><span><i class=\"fa fa-inr\"></i>\r\n {{items.price * getItemQuantity(items)}}/-\r\n </span>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n <div *ngIf=\"showItem &&itemArray.length > 0\">\r\n <div *ngFor=\"let qnr of groupedQnr | keyvalue\" [class.section-shadow]=\"getSectionCount() > 1\">\r\n <div *ngFor=\"let question of qnr.value\">\r\n <label class=\"col-12 quest pointer-cursor\"\r\n (click)=\"showDataGridAddSectionn(getQuestion(question).question, true)\">\r\n <span class=\"btn btn-light font-weight-bold\"><i class=\"fa fa-plus text-white\"></i>Add</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>", styles: [".dropzone{min-height:auto!important}.question-box{margin-top:10px}.btn-light{background-color:#1e4079!important;padding:5px 25px!important;color:#fff!important}.quest-outer{padding:10px}.error-msg{color:red}.upload-btn{background:#fff;border:1px solid;font-size:small}.card-border{box-shadow:0 0 5px 5px #f0f0f0!important;padding:10px 30px!important;margin:20px 10px!important;cursor:pointer!important;border-radius:10px!important}.border-apply{border:2px solid #1e4079!important;border-radius:20px!important}.quantity{font-size:20px!important;font-weight:700!important}.quantity-1:hover{background-color:#1e4079!important;color:#fff!important;font-weight:700!important;border-radius:50%!important;padding:-2px 12px!important}::ng-deep .mat-checkbox-layout{font-weight:400!important}.force_center{margin-left:auto;margin-right:auto}.input-group-text{display:-webkit-box;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.65rem 1rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#3f4254;text-align:center;white-space:nowrap;background-color:#f3f6f9!important;border:1px solid #E4E6EF!important;border-radius:.42rem;border-top-left-radius:0;border-bottom-left-radius:0;cursor:pointer}.w_100{width:100%}.img_fit{width:120px;height:120px}.dropzone .dropzone-default{border:1px dashed #EBEDF3!important}.select-box{padding:10px!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important}.normal-btn{padding:5px 20px;border:none!important}.edit{padding:3px 25px;border-radius:20px!important}.mgn-0{margin-left:0!important;margin-right:0!important;margin-bottom:10px!important}.quest{font-size:1.1rem!important}.mt-3 a:hover{text-decoration:underline!important}.dzimage,.dz-image{border:1px dashed #ccc}.gal_action{position:absolute;top:20px;right:-10px;background:#00000080;width:20px;height:20px;text-align:center;border-radius:50%;cursor:pointer}.single-file{padding:0!important;text-align:initial!important;border:none!important}.single-file .dz-preview{position:relative!important;display:inline-block!important;vertical-align:top!important;margin:16px!important;min-height:100px!important}.single-file .gal_action{top:-5px!important}.pro-only{float:right;color:red;font-size:.8rem}.qnrDisableState .card,.qnrDisableState .dropzone-default,.qnrDisableState .dz-image-preview{background:#eeeeee9e!important}.qnr-section{font-weight:700;padding-bottom:10px;text-transform:uppercase}.section-shadow{margin:20px 10px;padding:20px!important;box-shadow:0 0 10px #0000001f!important}.gridSection .gridColumn{padding:15px}.gridSection .gridColumn label{padding:0 12.5px!important;font-weight:400!important;color:#3f4254!important;font-size:.9rem!important}.gridSection .act-btns .btn{padding:5px 10px!important;margin:5px!important}.gridSection .act-btns{padding:0 20px}.fa-plus-circle{font-size:1.5rem!important}.addicon{color:#1e4079!important;cursor:pointer}.fa-trash,.fa-pen{color:#000!important;font-size:1rem!important}.dz-preview input{width:121px!important;border:1px solid #ccc}.submit-pad{padding:0 10px 20px!important}.form-group.card{border:1px solid #dadce063!important;border-radius:8px!important;padding:5px!important}.docname{width:120px;margin-bottom:5px;text-overflow:ellipsis!important;overflow:hidden!important;white-space:nowrap!important}@media (max-width: 750px){.normal-btn{padding:3px 10px;border:none!important}.edit{padding:2px 12px;border-radius:10px!important}}.col-xl-12,.col-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;width:100%;padding-right:12.5px;padding-left:12.5px}@media (min-width: 1200px){.col-xl-12{flex:0 0 100%;max-width:100%}}.qnrsec{padding:10px}.p-10{padding:8px!important}.form-control1{display:block!important;width:100%!important;height:calc(1.5em + 1.3rem + 2px)!important;padding:.65rem 1rem!important;font-size:1rem!important;font-weight:400!important;line-height:1.5!important;color:#3f4254!important;background-color:#fff!important;background-clip:padding-box!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important;box-shadow:none!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out!important}.form-control2{display:block!important;width:100%!important;padding:.65rem 1rem!important;font-size:1rem!important;font-weight:400!important;line-height:1.5!important;color:#3f4254!important;background-color:#fff!important;background-clip:padding-box!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important;box-shadow:none!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out!important}.form-group label{font-size:1rem;font-weight:400;color:#3f4254}label{display:inline-block;margin-bottom:.5rem}.col-12{flex:0 0 100%;max-width:100%}.radio-list .radio span{margin-right:.75rem}.radio>span{background-color:#ebedf3;border:1px solid transparent}.radio>span{height:18px;width:18px}.radio>span{border-radius:50%;background-color:none;display:flex;align-items:center;justify-content:center;flex-shrink:0}.radio-list .radio{margin-bottom:1rem}.radio{display:flex;align-items:center;position:relative;text-align:left;cursor:pointer;font-size:1rem;transition:all .3s ease;margin:0}.radio>input{position:absolute;z-index:-1;opacity:0}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid #EBEDF3;border-radius:.42rem}.radio-list .radio:last-child{margin-bottom:0}@media (min-width: 992px){.col-lg-12{flex:0 0 100%;max-width:100%}}.dropzone.dropzone-default .dz-preview .dz-image{border-radius:.42rem}.btn.btn-icon i{padding:0;margin:0}.btn i{font-size:1.3rem;padding-right:.35rem;vertical-align:middle;line-height:1;display:inline-flex}.btn i{transition:color .15s ease,background-color .15s ease,border-color .15s ease,box-shadow .15s ease}.text-dark-50{color:#7e8299!important}.btn.btn-icon.btn-circle{border-radius:50%}.btn.btn-light-success{color:#1bc5bd;background-color:#c9f7f5;border-color:transparent}.btn.btn-icon{display:inline-flex;align-items:center;justify-content:center;padding:0;height:calc(1.5em + 1.3rem + 2px);width:calc(1.5em + 1.3rem + 2px)}.btn{display:inline-block;font-weight:400;color:#3f4254;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.65rem 1rem;font-size:1rem;line-height:1.5;border-radius:.42rem;transition:color .3s ease-in-out,background-color .3s ease-in-out,border-color .3s ease-in-out,box-shadow .3s ease-in-out}.radio>input:checked~span{background-color:#1e4079}.radio>input:checked~span:after{background-color:#fff;border-color:#fff}.radio>input:checked~span:after{display:block}.radio>span:after{width:6px;height:6px}.radio>span:after{content:\"\";border-radius:100%!important}i{font-size:1.25rem;color:#b5b5c3}.dropzone{min-height:auto}.btn.btn-light-primary{background-color:#f9e2a7;border-color:transparent}.checkbox-lis .checkbox span{margin-right:.75rem}.checkbox>span{background-color:#ebedf3;border:1px solid transparent}.checkbox>span{height:18px;width:18px}.checkbox>span{background-color:none;display:flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:.42rem}.checkbox>span:after{width:5px;height:10px}.checkbox>span:after{content:\"\";border-color:transparent;border-style:solid;border-width:0 2px 2px 0!important;transform:rotate(45deg);margin-top:-2px}.checkbox-list{display:flex;flex-direction:column}.checkbox>input{position:absolute;z-index:-1;opacity:0}.checkbox>input:checked~span{background-color:#1e4079}.checkbox>input:checked~span:after{border-color:#fff}.checkbox{display:flex;align-items:center;position:relative;text-align:left;cursor:pointer;font-size:1rem;transition:all .3s ease;margin:0}.add-plus{color:#fff!important}.border-dashed{padding:10px!important}.add-plus-black{color:#000!important}.plus-black .fa .fa-plus{color:#000!important;font-size:12px!important}.checkbox-list .checkbox{margin-bottom:1rem}.checkbox-list .checkbox span{margin-right:.75rem}.checkbox-list .checkbox:last-child{margin-bottom:0}.btn.btn-primary{color:#fff;background-color:#1e4079;border-color:#1e4079}.font-weight-bold{font-weight:500!important}button{font-family:inherit}.form-control1:focus{color:#3f4254!important;background-color:#fff!important;border-color:#69b3ff!important;outline:0!important}.table.table-head-bg thead th:first-child{border-radius:.42rem}.table.table-head-bg thead tr,.table.table-head-bg thead th{background-color:#f3f6f9;border-bottom:0;letter-spacing:1px}.table.table-head-custom thead tr,.table.table-head-custom thead th{font-weight:600;color:#b5b5c3!important;font-size:.9rem;text-transform:uppercase}.table thead th{font-weight:600;font-size:1rem;border-bottom-width:1px;padding-top:1rem;padding-bottom:1rem}.table th,.table td{padding:.75rem}.table.table-head-bg thead tr:last-child,.table.table-head-bg thead th:last-child{border-top-right-radius:.42rem;border-bottom-right-radius:.42rem}.table-responsive1{display:block;width:100%;overflow-x:auto}.text-white{color:#fff!important;font-size:15px!important}.details{border:2px solid #1e4079!important;border-radius:10px!important;max-width:13%}.text-primary{color:#1e4079!important}.text-link{color:#1a6888}@media (min-width: 300px) and (max-width: 750px){.item{font-size:10px!important}.item_price{font-size:9px!important}.details{border:2px solid #1e4079!important;border-radius:10px!important;max-width:23%}}@media (max-width: 450px){.item{font-size:10px!important}.item_price{font-size:9px!important}}@media (min-width: 600px) and (max-width: 992px){.items{font-size:18px!important}.item_prices{font-size:16px!important}}@media (max-width: 450px){.incre{border:2px solid blue!important;border-radius:100px!important;max-width:20.66667%!important}}.font-weight-bold{font-weight:700!important}@media (max-width: 750px){.incre{max-width:20.66667%!important}}.incre{border:2px solid blue!important;border-radius:100px!important;max-width:10.66667%}@media (max-width: 893px){.disp-none-small{display:none!important}}@media (min-width: 800px){.disp-none-large{display:none!important}}.fa-inr{font-size:15px!important;color:#1e4079!important}.text-primary{font-weight:700!important}.flaticon-upload:before{content:\"\\f11d\"}[class*=\" flaticon-\"]:before{font-family:Flaticon;font-style:normal;font-weight:400;font-feature-settings:normal;font-variant:normal;line-height:1;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-smoothing:antialiased}.dropzone{position:relative!important;display:inline-block!important;vertical-align:top!important;min-height:100px!important}.dz-image{border-radius:20px;overflow:hidden;width:120px;height:120px;position:relative;display:block;z-index:10}.dz-image{border:1px dashed #ccc}.dropzone .dz-preview .dz-success-mark,.dropzone .dz-preview .dz-error-mark{pointer-events:none;z-index:500;position:absolute;display:block;top:50%;left:50%;margin-left:-27px;margin-top:-27px}\n"] }]
1391
+ }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.WordProcessor }, { type: i3.LocalStorageService }, { type: i4.DateTimeProcessor }, { type: i5.MatDialog }, { type: i6.FileService }, { type: i7.CommonService }, { type: i8.QuestionaireService }, { type: i9.ErrorMessagingService }, { type: i10.ToastService }, { type: i11.ModalGalleryService }, { type: i12.SharedService }, { type: i13.Location }], propDecorators: { questionnaireList: [{
1392
+ type: Input
1393
+ }], source: [{
1394
+ type: Input
1395
+ }], accountId: [{
1396
+ type: Input
1397
+ }], questionAnswers: [{
1398
+ type: Input
1399
+ }], customerDetails: [{
1400
+ type: Input
1401
+ }], uuid: [{
1402
+ type: Input
1403
+ }], type: [{
1404
+ type: Input
1405
+ }], waitlistStatus: [{
1406
+ type: Input
1407
+ }], orderStatus: [{
1408
+ type: Input
1409
+ }], donationDetails: [{
1410
+ type: Input
1411
+ }], service: [{
1412
+ type: Input
1413
+ }], mode: [{
1414
+ type: Input
1415
+ }], fileChanged: [{
1416
+ type: Output
1417
+ }], returnAnswers: [{
1418
+ type: Output
1419
+ }], tempType: [{
1420
+ type: Input
1421
+ }], bookingType: [{
1422
+ type: Input
1423
+ }], file2: [{
1424
+ type: ViewChild,
1425
+ args: ['logofile1']
1426
+ }] } });
1427
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9qY29uc3VtZXItc2hhcmVkL3NyYy9saWIvcXVlc3Rpb25haXJlL2VkaXQvcXVlc3Rpb25uYWlyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9qY29uc3VtZXItc2hhcmVkL3NyYy9saWIvcXVlc3Rpb25haXJlL2VkaXQvcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakgsT0FBTyxFQUFpQixlQUFlLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBNEUsTUFBTSw2QkFBNkIsQ0FBQztBQVExSyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVeEYsTUFBTSxPQUFPLHNCQUFzQjtJQTJGdkI7SUFDQTtJQUNBO0lBQ0E7SUFDRDtJQUNDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUF0R0QsaUJBQWlCLENBQU07SUFDdkIsTUFBTSxDQUFNO0lBQ1osU0FBUyxDQUFNO0lBQ2YsZUFBZSxDQUFNO0lBQ3JCLGVBQWUsQ0FBTTtJQUNyQixJQUFJLENBQU07SUFDVixJQUFJLENBQU07SUFDVixjQUFjLENBQU07SUFDcEIsV0FBVyxDQUFNO0lBQ2pCLGVBQWUsQ0FBTTtJQUNyQixPQUFPLENBQU07SUFDYixJQUFJLENBQU0sQ0FBQyx5Q0FBeUM7SUFDbkQsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDdEMsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDekMsUUFBUSxDQUFNO0lBQ2QsV0FB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Z0NBQy9DLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQzs0QkFDcFYsQ0FBQztpQ0FBTSxDQUFDO2dDQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFD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S0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0UsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQW1Ca0IsS0FBSztzQkFBNUIsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEJ1dHRvbnNDb25maWcsIEJ1dHRvbnNTdHJhdGVneSwgQnV0dG9uVHlwZSwgSW1hZ2UsIE1vZGFsR2FsbGVyeVJlZiwgTW9kYWxMaWJDb25maWcsIE1vZGFsR2FsbGVyeUNvbmZpZywgTW9kYWxHYWxsZXJ5U2VydmljZSB9IGZyb20gJ0Brczg5L2FuZ3VsYXItbW9kYWwtZ2FsbGVyeSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBRdWVzdGlvbmFpcmVTZXJ2aWNlIH0gZnJvbSAnLi4vcXVlc3Rpb25haXJlLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9maWxlLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2hvd3VwbG9hZGZpbGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaG93dXBsb2FkZmlsZS9zaG93dXBsb2FkZmlsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEYXRlVGltZVByb2Nlc3NvciB9IGZyb20gJy4uLy4uL2NhbGVuZGFyL2RhdGUtdGltZS9kYXRldGltZS1wcm9jZXNzb3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IEVycm9yTWVzc2FnaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL2Vycm9yLW1lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmRQcm9jZXNzb3IgfSBmcm9tICcuLi8uLi93b3JkLXByb2Nlc3Nvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC5zZXJ2aWNlJztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtcXVlc3Rpb25uYWlyZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbm5haXJlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIHF1ZXN0aW9ubmFpcmVMaXN0OiBhbnk7XHJcbiAgQElucHV0KCkgc291cmNlOiBhbnk7XHJcbiAgQElucHV0KCkgYWNjb3VudElkOiBhbnk7XHJcbiAgQElucHV0KCkgcXVlc3Rpb25BbnN3ZXJzOiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tZXJEZXRhaWxzOiBhbnk7XHJcbiAgQElucHV0KCkgdXVpZDogYW55O1xyXG4gIEBJbnB1dCgpIHR5cGU6IGFueTtcclxuICBASW5wdXQoKSB3YWl0bGlzdFN0YXR1czogYW55O1xyXG4gIEBJbnB1dCgpIG9yZGVyU3RhdHVzOiBhbnk7XHJcbiAgQElucHV0KCkgZG9uYXRpb25EZXRhaWxzOiBhbnk7XHJcbiAgQElucHV0KCkgc2VydmljZTogYW55O1xyXG4gIEBJbnB1dCgpIG1vZGU6IGFueTsgLy8gQWRkZWQgYnkgbWFuaSB0byBjaGVjayB0aGUgZmlsZSB1cGxvYWRcclxuICBAT3V0cHV0KCkgZmlsZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgcmV0dXJuQW5zd2VycyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBJbnB1dCgpIHRlbXBUeXBlOiBhbnk7XHJcbiAgQElucHV0KCkgYm9va2luZ1R5cGU6IGFueTtcclxuICBhbnN3ZXJzOiBhbnkgPSB7fTtcclxuICBzaG93RGF0YUdyaWQ6IGFueSA9IHt9O1xyXG4gIHNlbGVjdGVkTWVzc2FnZTogYW55ID0gW107XHJcbiAgYXBpRXJyb3I6IGFueSA9IFtdO1xyXG4gIHBhcmFtczogYW55O1xyXG4gIGZpbGV1cGxvYWRwcmVBbnN3ZXJzOiBhbnkgPSB7fTtcclxuICBsb2FkaW5nID0gZmFsc2U7XHJcbiAgYnV0dG9uRGlzYWJsZSA9IGZhbHNlO1xyXG4gIHF1ZXN0aW9uczogYW55ID0gW107XHJcbiAgc2VsZWN0ZWREb2NzOiBhbnkgPSBbXTtcclxuICBkb2N1bWVudHNUb1VwbG9hZDogYW55ID0gW107XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgdXBsb2FkRmlsZXNUZW1wOiBhbnkgPSBbXTtcclxuICBmaWxlc3RvVXBsb2FkOiBhbnkgPSBbXTtcclxuICBjaGFuZ2VIYXBwZW5lZCA9IGZhbHNlO1xyXG4gIHVwbG9hZGVkRmlsZXM6IGFueSA9IFtdO1xyXG4gIHVwbG9hZGVkSW1hZ2VzOiBhbnkgPSBbXTtcclxuICBib29raW5nRGV0YWlsczogYW55ID0gW107XHJcbiAgQFZpZXdDaGlsZCgnbG9nb2ZpbGUxJykgZmlsZTIhOiBFbGVtZW50UmVmO1xyXG4gIGN1c3RvbUJ1dHRvbnNGb250QXdlc29tZUNvbmZpZzogQnV0dG9uc0NvbmZpZyA9IHtcclxuICAgIHZpc2libGU6IHRydWUsXHJcbiAgICBzdHJhdGVneTogQnV0dG9uc1N0cmF0ZWd5LkNVU1RPTSxcclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAge1xyXG4gICAgICAgIGNsYXNzTmFtZTogJ2ZhIGZhLWRvd25sb2FkJyxcclxuICAgICAgICB0eXBlOiBCdXR0b25UeXBlLkRPV05MT0FELFxyXG4gICAgICAgIGFyaWFMYWJlbDogJ2N1c3RvbSBjbG9zZSBhcmlhIGxhYmVsJyxcclxuICAgICAgICB0aXRsZTogJ0Rvd25sb2FkJyxcclxuICAgICAgICBmb250U2l6ZTogJzIwcHgnXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBjbGFzc05hbWU6ICdpbnNpZGUgY2xvc2UtaW1hZ2UnLFxyXG4gICAgICAgIHR5cGU6IEJ1dHRvblR5cGUuQ0xPU0UsXHJcbiAgICAgICAgYXJpYUxhYmVsOiAnY3VzdG9tIGNsb3NlIGFyaWEgbGFiZWwnLFxyXG4gICAgICAgIHRpdGxlOiAnQ2xvc2UnLFxyXG4gICAgICAgIGZvbnRTaXplOiAnMjBweCdcclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH07XHJcbiAgaW1hZ2VfbGlzdF9wb3B1cCE6IEltYWdlW107XHJcbiAgcXVlc3Rpb25uYWlyZV9oZWFkaW5nID0gJyc7XHJcbiAgY3VzdG9tZXJfbGFiZWwgPSAnJztcclxuICBlZGl0UXVlc3Rpb25uYWlyZSA9IGZhbHNlO1xyXG4gIGF1ZGlvVmlkZW9GaWxlczogYW55ID0gW107XHJcbiAgZ3JvdXBlZFFucjogYW55ID0gW107XHJcbiAgZGF0YUdyaWRDb2x1bW5zOiBhbnkgPSB7fTtcclxuICBkYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0OiBhbnkgPSBbXTtcclxuICB1cGRhdGVkR3JpZEluZGV4OiBhbnkgPSB7fTtcclxuICBuZXdUaW1lRGF0ZUZvcm1hdCA9ICcnO1xyXG4gIHFuclN0YXR1cyA9ICcnO1xyXG4gIGNvbW1lbnRzOiBhbnkgPSB7fTtcclxuICB0ZGF5ID0gbmV3IERhdGUoKTtcclxuICBtaW5kYXkgPSBuZXcgRGF0ZSgxOTAwLCAwLCAxKTtcclxuICBkYXRhR3JpZExpc3RDb2x1bW5zOiBhbnkgPSB7fTtcclxuICBzaG93cW5yITogYm9vbGVhbjtcclxuICBpdGVtOiBhbnk7XHJcbiAgc2hvd0l0ZW0gPSBmYWxzZTtcclxuICB0b3RhbFByaWNlOiBhbnk7XHJcbiAgaXRlbUxlbmd0aDogYW55O1xyXG4gIGl0ZW1BcnJheTogYW55ID0gW107XHJcbiAgZGF0YUdyaWRMaXN0OiBhbnkgPSBbXTtcclxuICBpZDogbnVtYmVyID0gMDtcclxuICBwb3N0X0RhdGE6IGFueTtcclxuICBkZ0xpc3Q6IGFueTtcclxuICBzZXF1ZW5jZUlkOiBhbnk7XHJcbiAgZmluYWxPYmplY3RMaXN0OiBhbnkgPSBbXTtcclxuICBzaG93c2VydmljZSA9IGZhbHNlO1xyXG4gIHF1ZXNTdG9yZTogYW55O1xyXG4gIGFsbExpc3Q6IHN0cmluZyA9ICcnO1xyXG4gIHBvcFNlYXJjaGVzOiBhbnk7XHJcbiAgc2VydmljZVRvdGFsUHJpY2U6IG51bWJlciA9IDA7XHJcbiAgZWRpdGFibGVJdGVtOiBhbnk7XHJcbiAgY2RuUGF0aDogc3RyaW5nPScnO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRfcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSB3b3JkUHJvY2Vzc29yOiBXb3JkUHJvY2Vzc29yLFxyXG4gICAgcHJpdmF0ZSBsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhdGVQcm9jZXNzb3I6IERhdGVUaW1lUHJvY2Vzc29yLFxyXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBmaWxlU2VydmljZTogRmlsZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHF1ZXN0aW9uYWlyZVNlcnZpY2U6IFF1ZXN0aW9uYWlyZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVycm9yU2VydmljZTogRXJyb3JNZXNzYWdpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kYWxHYWxsZXJ5U2VydmljZTogTW9kYWxHYWxsZXJ5U2VydmljZSxcclxuICAgIHByaXZhdGUgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcclxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uKSB7XHJcbiAgICAgIHRoaXMuY2RuUGF0aCA9IHRoaXMuc2hhcmVkU2VydmljZS5nZXRDRE5QYXRoKCk7XHJcbiAgICB0aGlzLmFjdGl2YXRlZF9yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocXBhcmFtcyA9PiB7XHJcbiAgICAgIHRoaXMucGFyYW1zID0gcXBhcmFtcztcclxuICAgICAgaWYgKHRoaXMucGFyYW1zLnR5cGUpIHtcclxuICAgICAgICB0aGlzLnNvdXJjZSA9IHRoaXMucGFyYW1zLnR5cGU7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5zb3VyY2UpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucGFyYW1zLnByb3ZpZGVySWQpIHtcclxuICAgICAgICB0aGlzLmFjY291bnRJZCA9IHRoaXMucGFyYW1zLnByb3ZpZGVySWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucGFyYW1zLnV1aWQpIHtcclxuICAgICAgICB0aGlzLnV1aWQgPSB0aGlzLnBhcmFtcy51dWlkO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5xdWVzdGlvbmFpcmVTZXJ2aWNlLmdldE1lc3NhZ2UoKS5zdWJzY3JpYmUobWVzc2FnZSA9PiB7XHJcbiAgICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XHJcbiAgICAgICAgY2FzZSAncW5yVmFsaWRhdGVFcnJvcic6XHJcbiAgICAgICAgICB0aGlzLnNldFZhbGlkYXRlRXJyb3IobWVzc2FnZS52YWx1ZSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgaWYgKHRoaXMucXVlc3Rpb25BbnN3ZXJzICYmIHRoaXMucXVlc3Rpb25BbnN3ZXJzLmZpbGVzdG9VcGxvYWQgJiYgdGhpcy5zb3VyY2UgPT09ICdwcm9MZWFkJykge1xyXG4gICAgICB0aGlzLmZpbGVzdG9VcGxvYWQgPSB0aGlzLnF1ZXN0aW9uQW5zd2Vycy5maWxlc3RvVXBsb2FkO1xyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcIlNlcnZpY2UgRGV0YWlsczpcIiwgdGhpcy5xdWVzdGlvbm5haXJlTGlzdCk7XHJcbiAgICBjb25zb2xlLmxvZyhcIlNlcnZpY2UgRGV0YWlsczpcIiwgdGhpcy5zZXJ2aWNlKTtcclxuICAgIGlmICh0aGlzLmxTdG9yYWdlU2VydmljZS5nZXRpdGVtZnJvbUxvY2FsU3RvcmFnZSgnaXRlbUFycmF5JykpIHtcclxuICAgICAgdGhpcy5pdGVtQXJyYXkgPSB0aGlzLmxTdG9yYWdlU2VydmljZS5nZXRpdGVtZnJvbUxvY2FsU3RvcmFnZSgnaXRlbUFycmF5Jyk7XHJcbiAgICAgIGlmICh0aGlzLml0ZW1BcnJheSkge1xyXG4gICAgICAgIHRoaXMuc2hvd0l0ZW0gPSB0cnVlO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5pdGVtQXJyYXlcIiwgdGhpcy5pdGVtQXJyYXkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmN1c3RvbWVyX2xhYmVsID0gdGhpcy53b3JkUHJvY2Vzc29yLmdldFRlcm1pbm9sb2d5VGVybSgnY3VzdG9tZXInKTtcclxuXHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdCkge1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnNvdXJjZSlcclxuICAgICAgaWYgKHRoaXMuc291cmNlID09PSAnY3VzdG9tZXItY3JlYXRlJyB8fCB0aGlzLnNvdXJjZSA9PT0gJ29uZXRpbWUnKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzICYmIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHNbMF0ucXVlc3Rpb25zO1xyXG4gICAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICAgICAgLy8gdGhpcy5nZXRBbnN3ZXJzKHRoaXMucXVlc3Rpb25zLCAnZ2V0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbWVyRGV0YWlscyAmJiB0aGlzLmN1c3RvbWVyRGV0YWlsc1swXSAmJiB0aGlzLmN1c3RvbWVyRGV0YWlsc1swXS5xdWVzdGlvbm5haXJlICYmIHRoaXMuY3VzdG9tZXJEZXRhaWxzWzBdLnF1ZXN0aW9ubmFpcmUucXVlc3Rpb25BbnN3ZXJzKSB7XHJcbiAgICAgICAgICB0aGlzLmdldEFuc3dlcnModGhpcy5jdXN0b21lckRldGFpbHNbMF0ucXVlc3Rpb25uYWlyZS5xdWVzdGlvbkFuc3dlcnMsICdnZXQnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zb3VyY2UgPT09ICdxbnJEZXRhaWxzJykge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5xdWVzdGlvbnM7XHJcbiAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc291cmNlID09PSAnc2VydmljZU9wdGlvbkFwcHQnKSB7XHJcbiAgICAgICAgdGhpcy5zaG93c2VydmljZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVscztcclxuICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zb3VyY2UgPT09ICdxbnJwYXBlcicpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0ubGFiZWxzO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgfSBlbHNlIGlmICghdGhpcy51dWlkICYmIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVscztcclxuICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zb3VyY2UgPT09ICdxbnJWaWV3JyAmJiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVscykge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHM7XHJcbiAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuc291cmNlID09PSAnY29uZHVtZXJPcmRlcicgJiYgdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHMpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNvdXJjZSA9PT0gJ2l2cicgJiYgdGhpcy5xdWVzdGlvbm5haXJlTGlzdCAmJiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmxhYmVscykge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5sYWJlbHM7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJRdWVzdGlvbnM6XCIsIHRoaXMucXVlc3Rpb25zKTtcclxuICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zb3VyY2UgPT09ICdjdXN0b21lci1kZXRhaWxzJyAmJiB0aGlzLmN1c3RvbWVyRGV0YWlsc1swXSAmJiB0aGlzLmN1c3RvbWVyRGV0YWlsc1swXS5xdWVzdGlvbm5haXJlKSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QgPSB0aGlzLmN1c3RvbWVyRGV0YWlsc1swXS5xdWVzdGlvbm5haXJlO1xyXG4gICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMuY3VzdG9tZXJEZXRhaWxzWzBdLnF1ZXN0aW9ubmFpcmUucXVlc3Rpb25BbnN3ZXJzO1xyXG4gICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgIHRoaXMuZ2V0QW5zd2Vycyh0aGlzLnF1ZXN0aW9ucywgJ2dldCcpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucXVlc3Rpb25BbnN3ZXJzKSB7XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uQW5zd2Vycy5maWxlcykge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNZXNzYWdlID0gdGhpcy5xdWVzdGlvbkFuc3dlcnMuZmlsZXM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25BbnN3ZXJzLmF1ZGlvVmlkZW8pIHtcclxuICAgICAgICB0aGlzLmF1ZGlvVmlkZW9GaWxlcyA9IHRoaXMucXVlc3Rpb25BbnN3ZXJzLmF1ZGlvVmlkZW87XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25BbnN3ZXJzLmZpbGVzdG9VcGxvYWQpIHtcclxuICAgICAgICB0aGlzLmZpbGVzdG9VcGxvYWQgPSB0aGlzLnF1ZXN0aW9uQW5zd2Vycy5maWxlc3RvVXBsb2FkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uQW5zd2Vycy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0KSB7XHJcbiAgICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0ID0gdGhpcy5xdWVzdGlvbkFuc3dlcnMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdDtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkFuc3dlcnMuY29tbWVudHMpIHtcclxuICAgICAgICB0aGlzLmNvbW1lbnRzID0gdGhpcy5xdWVzdGlvbkFuc3dlcnMuY29tbWVudHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25BbnN3ZXJzLmFuc3dlcnMpIHtcclxuICAgICAgICB0aGlzLmdldEFuc3dlcnModGhpcy5xdWVzdGlvbkFuc3dlcnMuYW5zd2Vycy5hbnN3ZXJMaW5lLCAnaW5pdCcpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNvdXJjZSA9PSAnaXZyJykge1xyXG4gICAgICAgIHRoaXMuZ2V0QW5zd2Vycyh0aGlzLnF1ZXN0aW9uQW5zd2VycywgJ2dldCcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kb25hdGlvbkRldGFpbHMgJiYgdGhpcy5kb25hdGlvbkRldGFpbHMucXVlc3Rpb25uYWlyZSkge1xyXG4gICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0ID0gdGhpcy5kb25hdGlvbkRldGFpbHMucXVlc3Rpb25uYWlyZTtcclxuICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LnF1ZXN0aW9uQW5zd2VycztcclxuICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbnMgJiYgdGhpcy5xdWVzdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuZ2V0QW5zd2Vycyh0aGlzLnF1ZXN0aW9ucywgJ2dldCcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudXVpZCkge1xyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdC5xdWVzdGlvbkFuc3dlcnMpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QucXVlc3Rpb25BbnN3ZXJzO1xyXG4gICAgICAgIHRoaXMucW5yU3RhdHVzID0gJ3N1Ym1pdHRlZCc7XHJcbiAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVscztcclxuICAgICAgICB0aGlzLnFuclN0YXR1cyA9ICdyZWxlYXNlZCc7XHJcbiAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0gJiYgdGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5sYWJlbHMpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0ubGFiZWxzO1xyXG4gICAgICAgIHRoaXMucW5yU3RhdHVzID0gJ3JlbGVhc2VkJztcclxuICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25zICYmIHRoaXMucXVlc3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmdldEFuc3dlcnModGhpcy5xdWVzdGlvbnMsICdnZXQnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlzYWJsZUZpZWxkKClcclxuICB9XHJcblxyXG4gIC8vZGlzYWJsZSBmaWVsZFxyXG4gIGRpc2FibGVGaWVsZCgpIHtcclxuICAgIGlmICh0aGlzLnRlbXBUeXBlICYmICh0aGlzLnRlbXBUeXBlID09PSAnTG9hbiBTYW5jdGlvbicgfHwgdGhpcy50ZW1wVHlwZSA9PT0gJ1JlamVjdGVkJykpIHtcclxuICAgICAgdGhpcy5idXR0b25EaXNhYmxlID0gdHJ1ZTtcclxuICAgICAgLy8gdGhpcy5kaXNhYmxlSW5wdXQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gKi5jb21wb25lbnQudHNcclxuICBhc0lzT3JkZXIoYTogYW55LCBiOiBhbnkpIHtcclxuICAgIHJldHVybiAxO1xyXG4gIH1cclxuICBncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gJ2N1c3RvbWVyLWNyZWF0ZScgfHwgdGhpcy5zb3VyY2UgPT09ICdxbnJEZXRhaWxzJyB8fCB0aGlzLnNvdXJjZSA9PT0gJ29uZXRpbWUnKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBlZFFuciA9IHRoaXMuY29tbW9uU2VydmljZS5ncm91cEJ5KHRoaXMucXVlc3Rpb25zLCAnc2VjdGlvbk5hbWUnKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlID09PSAncHJvTGVhZCcpIHtcclxuICAgICAgdGhpcy5ncm91cGVkUW5yID0gdGhpcy5xdWVzdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChydjogYW55LCB4OiBhbnkpIHtcclxuICAgICAgICAocnZbeC5xdWVzdGlvblsnc2VxdW5jZUlkJ11dID0gcnZbeC5xdWVzdGlvblsnc2VxdW5jZUlkJ11dIHx8IFtdKS5wdXNoKHgpO1xyXG4gICAgICAgIHJldHVybiBydjtcclxuICAgICAgfSwge30pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBlZFFuciA9IHRoaXMucXVlc3Rpb25zLnJlZHVjZShmdW5jdGlvbiAocnY6IGFueSwgeDogYW55KSB7XHJcbiAgICAgICAgKHJ2W3gucXVlc3Rpb25bJ3NlY3Rpb25PcmRlciddXSA9IHJ2W3gucXVlc3Rpb25bJ3NlY3Rpb25PcmRlciddXSB8fCBbXSkucHVzaCh4KTtcclxuICAgICAgICByZXR1cm4gcnY7XHJcbiAgICAgIH0sIHt9KTtcclxuICAgIH1cclxuICB9XHJcbiAgc2V0VmFsaWRhdGVFcnJvcihlcnJvcnM6IGFueSkge1xyXG4gICAgdGhpcy5hcGlFcnJvciA9IFtdO1xyXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IGVycm9yIG9mIGVycm9ycykge1xyXG4gICAgICAgIHRoaXMuYXBpRXJyb3JbZXJyb3IucXVlc3Rpb25GaWVsZF0gPSBbXTtcclxuICAgICAgICB0aGlzLmFwaUVycm9yW2Vycm9yLnF1ZXN0aW9uRmllbGRdLnB1c2goZXJyb3IuZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRBbnN3ZXJzKGFuc3dlckRhdGE6IGFueSwgdHlwZT86IGFueSkge1xyXG4gICAgdGhpcy5hbnN3ZXJzID0gbmV3IE9iamVjdCgpO1xyXG4gICAgdGhpcy5kYXRhR3JpZENvbHVtbnMgPSB7fTtcclxuICAgIGlmICh0eXBlID09PSAnZ2V0Jykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWVzc2FnZSA9IFtdO1xyXG4gICAgICB0aGlzLnVwbG9hZGVkSW1hZ2VzID0gW107XHJcbiAgICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBhbnN3IG9mIGFuc3dlckRhdGEpIHtcclxuXHJcbiAgICAgICAgaWYgKGFuc3cuYW5zd2VyTGluZSkge1xyXG4gICAgICAgICAgaWYgKGFuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZSA9PT0gJ2ZpbGVVcGxvYWQnKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5zb3VyY2UgPT09ICdwcm9MZWFkJykge1xyXG4gICAgICAgICAgICAgIGlmIChhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV0gJiYgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5hY3Rpb24gPSAnYWRkJztcclxuICAgICAgICAgICAgICAgICAgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLnN0YXR1cyA9ICdDT01QTEVURSc7XHJcbiAgICAgICAgICAgICAgICAgIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5zM3BhdGggPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uczNwYXRoO1xyXG4gICAgICAgICAgICAgICAgICBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0udWlkID0gYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLnVpZDtcclxuICAgICAgICAgICAgICAgICAgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmRyaXZlSWQgPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uZHJpdmVJZDtcclxuICAgICAgICAgICAgICAgICAgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLnVybCA9IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5rZXlOYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdID0gYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGFuc3cuYW5zd2VyTGluZS5hbnN3ZXIgJiYgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdICYmIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnZ2V0Jykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkSW1hZ2VzLnB1c2goYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVwbG9hZGVkRmlsZXNbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXNbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV0gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudXBsb2FkZWRGaWxlc1thbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXVthbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uY2FwdGlvbl0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXNbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV1bYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmNhcHRpb25dID0ge307XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5jb21tZW50c1thbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lICsgJz0nICsgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmNhcHRpb25dID0gYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmNvbW1lbnRzO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXNbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV1bYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmNhcHRpb25dID0gYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldO1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVzc2FnZS5wdXNoKGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5maWxlc3RvVXBsb2FkW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlc3RvVXBsb2FkW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdID0ge307XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpbGVzdG9VcGxvYWRbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV1bYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmNhcHRpb25dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlc3RvVXBsb2FkW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdW2Fuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5jYXB0aW9uXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXN0b1VwbG9hZFthbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXVthbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uY2FwdGlvbl0gPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV07XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChhbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGUgPT09ICdkYXRhR3JpZCcpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXSkge1xyXG4gICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gW107XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3cuZGF0YUdyaWRDb2x1bW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbHVtbnNbaSArIDFdID0gcm93LmRhdGFHcmlkQ29sdW1uW2ldLmNvbHVtbltPYmplY3Qua2V5cyhyb3cuZGF0YUdyaWRDb2x1bW5baV0uY29sdW1uKVswXV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdLnB1c2goY29sdW1ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYW5zd2Vyc1thbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXSA9IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZvciAobGV0IGFuc3cgb2YgYW5zd2VyRGF0YSkge1xyXG4gICAgICAgIGlmIChhbnN3LmFuc3dlcltPYmplY3Qua2V5cyhhbnN3LmFuc3dlcilbMF1dKSB7XHJcbiAgICAgICAgICB0aGlzLmFuc3dlcnNbYW5zdy5sYWJlbE5hbWVdID0gYW5zdy5hbnN3ZXJbT2JqZWN0LmtleXMoYW5zdy5hbnN3ZXIpWzBdXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSAnZ2V0Jykge1xyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnVwbG9hZGVkRmlsZXMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICB0aGlzLnVwbG9hZEZpbGVzVGVtcFtrZXldID0gW107XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy51cGxvYWRlZEZpbGVzW2tleV0pLmZvckVhY2goa2V5MSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy51cGxvYWRlZEZpbGVzW2tleV1ba2V5MV0pIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnVwbG9hZEZpbGVzVGVtcFtrZXldKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlc1RlbXBba2V5XSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnVwbG9hZGVkRmlsZXNba2V5XVtrZXkxXS50eXBlLnNwbGl0KCcvJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZVswXSAhPT0gJ2F1ZGlvJyAmJiB0eXBlWzBdICE9PSAndmlkZW8nIHx8ICgodHlwZVswXSA9PT0gJ2F1ZGlvJyB8fCB0eXBlWzBdID09PSAndmlkZW8nKSAmJiB0aGlzLnVwbG9hZGVkRmlsZXNba2V5XVtrZXkxXS5zdGF0dXMgPT09ICdDT01QTEVURScpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlc1RlbXBba2V5XS5wdXNoKGtleTEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5maWxlc3RvVXBsb2FkKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWxlc3RvVXBsb2FkW2tleV0pLmZvckVhY2goa2V5MSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0pIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnVwbG9hZEZpbGVzVGVtcFtrZXldKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlc1RlbXBba2V5XSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZXNUZW1wW2tleV0ucHVzaChrZXkxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uU3VibWl0KCdpbml0Jyk7XHJcbiAgfVxyXG4gIGZpbGVzU2VsZWN0ZWQoZXZlbnQ6IGFueSwgcXVlc3Rpb246IGFueSwgZG9jdW1lbnQ6IGFueSkge1xyXG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQuZmlsZXM7XHJcbiAgICBpZiAoaW5wdXQpIHtcclxuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGlucHV0KSB7XHJcbiAgICAgICAgY29uc3QgZmlsZUlucHV0ID0ge1xyXG4gICAgICAgICAgY2FwdGlvbjogZG9jdW1lbnQsXHJcbiAgICAgICAgICBmaWxlOiBmaWxlLFxyXG4gICAgICAgICAgbGFiZWxOYW1lOiBxdWVzdGlvbi5sYWJlbE5hbWVcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWxlQ2hhbmdlZC5lbWl0KGZpbGVJbnB1dCk7XHJcbiAgICAgICAgbGV0IHR5cGUgPSBmaWxlLnR5cGUuc3BsaXQoJy8nKTtcclxuXHJcbiAgICAgICAgdGhpcy5hcGlFcnJvcltxdWVzdGlvbi5sYWJlbE5hbWVdID0gW107XHJcbiAgICAgICAgaWYgKCF0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXSkge1xyXG4gICAgICAgICAgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pIHtcclxuICAgICAgICAgIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV0gJiYgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKSB7XHJcbiAgICAgICAgICBsZXQgaW5kZXg7XHJcbiAgICAgICAgICBpZiAodHlwZVswXSA9PT0gJ2FwcGxpY2F0aW9uJyB8fCB0eXBlWzBdID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgICAgIGluZGV4ID0gdGhpcy5zZWxlY3RlZE1lc3NhZ2UuaW5kZXhPZih0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW5kZXggPSB0aGlzLmF1ZGlvVmlkZW9GaWxlcy5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlWzBdID09PSAnYXBwbGljYXRpb24nIHx8IHR5cGVbMF0gPT09ICdpbWFnZScpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVzc2FnZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuYXVkaW9WaWRlb0ZpbGVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XTtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdW2luZGV4XTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdID0gZmlsZTtcclxuICAgICAgICBpZiAodHlwZVswXSA9PT0gJ2FwcGxpY2F0aW9uJyB8fCB0eXBlWzBdID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVzc2FnZS5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgY29uc3QgaW5keCA9IHRoaXMuc2VsZWN0ZWRNZXNzYWdlLmluZGV4T2YoZmlsZSk7XHJcbiAgICAgICAgICBpZiAoaW5keCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVzc2FnZVtpbmR4XVsncGF0aCddID0gZS50YXJnZXRbJ3Jlc3VsdCddO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hdWRpb1ZpZGVvRmlsZXMucHVzaChmaWxlKTtcclxuICAgICAgICAgIGNvbnN0IGluZHggPSB0aGlzLmF1ZGlvVmlkZW9GaWxlcy5pbmRleE9mKGZpbGUpO1xyXG4gICAgICAgICAgaWYgKGluZHggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hdWRpb1ZpZGVvRmlsZXNbaW5keF1bJ3BhdGgnXSA9IGUudGFyZ2V0WydyZXN1bHQnXTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpbGUyICYmIHRoaXMuZmlsZTIubmF0aXZlRWxlbWVudC52YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuZmlsZTIubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMub25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNoYW5nZUltYWdlU2VsZWN0ZWQocXVlc3Rpb246IGFueSwgZG9jdW1lbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdICYmIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSkge1xyXG4gICAgICBsZXQgdHlwZSA9IHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XS50eXBlLnNwbGl0KCcvJyk7XHJcbiAgICAgIHR5cGUgPSB0eXBlWzBdO1xyXG4gICAgICBsZXQgaW5kZXg7XHJcbiAgICAgIGlmICh0eXBlID09PSAnYXBwbGljYXRpb24nIHx8IHR5cGUgPT09ICdpbWFnZScpIHtcclxuICAgICAgICBpbmRleCA9IHRoaXMuc2VsZWN0ZWRNZXNzYWdlLmluZGV4T2YodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbmRleCA9IHRoaXMuYXVkaW9WaWRlb0ZpbGVzLmluZGV4T2YodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09ICdhcHBsaWNhdGlvbicgfHwgdHlwZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2Uuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hdWRpb1ZpZGVvRmlsZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XTtcclxuICAgICAgICB0aGlzLmNvbW1lbnRzW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGRvY3VtZW50XSA9ICcnO1xyXG4gICAgICAgIGlmICh0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSAmJiB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZEFuc3dlciA9IHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLmZpbHRlcigoYW5zd2VyOiBhbnkpID0+IGFuc3dlci5jYXB0aW9uID09PSBkb2N1bWVudCk7XHJcbiAgICAgICAgICBpZiAoZmlsdGVyZWRBbnN3ZXJbMF0pIHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXS5pbmRleE9mKGZpbHRlcmVkQW5zd2VyWzBdKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdICYmIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXSAmJiB0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pIHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnVwbG9hZGVkSW1hZ2VzLmluZGV4T2YodGhpcy51cGxvYWRlZEZpbGVzW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKTtcclxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSA9ICdyZW1vdmUnO1xyXG4gICAgICAgIHRoaXMuY29tbWVudHNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgZG9jdW1lbnRdID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMub25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XHJcbiAgfVxyXG4gIGlzTnVtZXJpYyhldnQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU2VydmljZS5pc051bWVyaWMoZXZ0KTtcclxuICB9XHJcbiAgb25TdWJtaXQoa2V5dHlwZT86IGFueSkge1xyXG5cclxuICAgIE9iamVjdC5rZXlzKHRoaXMuZmlsZXN0b1VwbG9hZCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuYW5zd2Vyc1trZXldKSB7XHJcbiAgICAgICAgdGhpcy5hbnN3ZXJzW2tleV0gPSBbXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5maWxlc3RvVXBsb2FkW2tleV0pLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZpbGVzdG9VcGxvYWRba2V5XSkuZm9yRWFjaChrZXkxID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXSkge1xyXG4gICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLnR5cGUuc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgdHlwZSA9IHR5cGVbMF07XHJcbiAgICAgICAgICAgIGxldCBpbmR4O1xyXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2FwcGxpY2F0aW9uJyB8fCB0eXBlID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgICAgICAgaW5keCA9IHRoaXMuc2VsZWN0ZWRNZXNzYWdlLmluZGV4T2YodGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGluZHggPSB0aGlzLmF1ZGlvVmlkZW9GaWxlcy5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaW5keCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICBsZXQgc3RhdHVzID0gJ2FkZCc7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMudXBsb2FkZWRGaWxlc1trZXldICYmIHRoaXMudXBsb2FkZWRGaWxlc1trZXldW2tleTFdKSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXMgPSAndXBkYXRlJztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYW5zd2Vyc1trZXldICYmIHRoaXMuYW5zd2Vyc1trZXldLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQW5zd2VyID0gdGhpcy5hbnN3ZXJzW2tleV0uZmlsdGVyKChhbnN3ZXI6IGFueSkgPT4gYW5zd2VyLmNhcHRpb24gPT09IGtleTEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkQW5zd2VyWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5hbnN3ZXJzW2tleV0uaW5kZXhPZihmaWx0ZXJlZEFuc3dlclswXSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuc3dlcnNba2V5XS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0udHlwZS5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAgIHR5cGUgPSB0eXBlWzBdO1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlID09PSAnYXBwbGljYXRpb24nIHx8IHR5cGUgPT09ICdpbWFnZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5zd2Vyc1trZXldLnB1c2goeyBjYXB0aW9uOiBrZXkxLCBhY3Rpb246IHN0YXR1cywgbWltZVR5cGU6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLnR5cGUsIHVybDogdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0ubmFtZSwgc2l6ZTogdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0uc2l6ZSwgY29tbWVudHM6IHRoaXMuY29tbWVudHNba2V5ICsgJz0nICsga2V5MV0sIGRyaXZlSWQ6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLmRyaXZlSWQsIHVpZDogdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0udWlkLCBzdGF0dXM6ICdDT01QTEVURScgfSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5zd2Vyc1trZXldLnB1c2goeyBjYXB0aW9uOiBrZXkxLCBhY3Rpb246IHN0YXR1cywgbWltZVR5cGU6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLnR5cGUsIHVybDogdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0ubmFtZSwgc2l6ZTogdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0uc2l6ZSwgY29tbWVudHM6IHRoaXMuY29tbWVudHNba2V5ICsgJz0nICsga2V5MV0sIGRyaXZlSWQ6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLmRyaXZlSWQsIHVpZDogdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0udWlkLCBzdGF0dXM6ICdDT01QTEVURScgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hbnN3ZXJzW2tleV0gJiYgdGhpcy5hbnN3ZXJzW2tleV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQW5zd2VyID0gdGhpcy5hbnN3ZXJzW2tleV0uZmlsdGVyKChhbnN3ZXI6IGFueSkgPT4gYW5zd2VyLmNhcHRpb24gPT09IGtleTEpO1xyXG4gICAgICAgICAgICAgIGlmIChmaWx0ZXJlZEFuc3dlclswXSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmFuc3dlcnNba2V5XS5pbmRleE9mKGZpbHRlcmVkQW5zd2VyWzBdKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2tleV0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5hbnN3ZXJzW2tleV07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuYW5zd2Vyc1trZXldICYmIHRoaXMuYW5zd2Vyc1trZXldLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmFuc3dlcnNba2V5XTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgT2JqZWN0LmtleXModGhpcy51cGxvYWRlZEZpbGVzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5hbnN3ZXJzW2tleV0pIHtcclxuICAgICAgICB0aGlzLmFuc3dlcnNba2V5XSA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZXNba2V5XSAmJiBPYmplY3Qua2V5cyh0aGlzLnVwbG9hZGVkRmlsZXNba2V5XSkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMudXBsb2FkZWRGaWxlc1trZXldKS5mb3JFYWNoKGtleTEgPT4ge1xyXG4gICAgICAgICAgaWYgKCghdGhpcy5maWxlc3RvVXBsb2FkW2tleV0gfHwgKHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldICYmICF0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXSkpICYmIHRoaXMudXBsb2FkZWRGaWxlc1trZXldW2tleTFdICYmIHRoaXMudXBsb2FkZWRGaWxlc1trZXldW2tleTFdID09PSAncmVtb3ZlJykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hbnN3ZXJzW2tleV0gJiYgdGhpcy5hbnN3ZXJzW2tleV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQW5zd2VyID0gdGhpcy5hbnN3ZXJzW2tleV0uZmlsdGVyKChhbnN3ZXI6IGFueSkgPT4gYW5zd2VyLmNhcHRpb24gPT09IGtleTEpO1xyXG4gICAgICAgICAgICAgIGlmIChmaWx0ZXJlZEFuc3dlclswXSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmFuc3dlcnNba2V5XS5pbmRleE9mKGZpbHRlcmVkQW5zd2VyWzBdKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2tleV0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2tleV0ucHVzaCh7IGNhcHRpb246IGtleTEsIGFjdGlvbjogJ3JlbW92ZScgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuYW5zd2Vyc1trZXldLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgZGVsZXRlIHRoaXMuYW5zd2Vyc1trZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGRhdGE6IGFueSA9IFtdO1xyXG4gICAgT2JqZWN0LmtleXModGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0KS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIGxldCBuZXdGaWxlZDogYW55ID0ge307XHJcbiAgICAgIGxldCBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25zLmZpbHRlcigocXVlc3Q6IGFueSkgPT4gdGhpcy5nZXRRdWVzdGlvbihxdWVzdCkubGFiZWxOYW1lID09PSBrZXkpO1xyXG4gICAgICBxdWVzdGlvbiA9IHF1ZXN0aW9uWzBdLnF1ZXN0aW9uO1xyXG4gICAgICBmb3IgKGxldCBncmlkQW5zd2VyIG9mIHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtrZXldKSB7XHJcbiAgICAgICAgbGV0IGNvbHVtbkRhdGE6IGFueSA9IFtdO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGdyaWRBbnN3ZXIpLmZvckVhY2goa2V5MSA9PiB7XHJcbiAgICAgICAgICBsZXQgbmV3VHlwZTogYW55ID0ge307XHJcbiAgICAgICAgICBjb25zdCBjb2x1bW5EZXRhaWxzID0gcXVlc3Rpb24uZGF0YUdyaWRQcm9wZXJ0aWVzLmRhdGFHcmlkQ29sdW1ucy5maWx0ZXIoKGNsbW46IGFueSkgPT4gY2xtbi5vcmRlciA9PT0gSlNPTi5wYXJzZShrZXkxKSk7XHJcbiAgICAgICAgICBpZiAoY29sdW1uRGV0YWlsc1swXSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5UeXBlID0gY29sdW1uRGV0YWlsc1swXS5kYXRhVHlwZTtcclxuICAgICAgICAgICAgbmV3VHlwZVtjb2x1bW5UeXBlXSA9IGdyaWRBbnN3ZXJba2V5MV07XHJcbiAgICAgICAgICAgIGNvbHVtbkRhdGEucHVzaCh7XHJcbiAgICAgICAgICAgICAgY29sdW1uSWQ6IGNvbHVtbkRldGFpbHNbMF0uY29sdW1uSWQsXHJcbiAgICAgICAgICAgICAgY29sdW1uOiBuZXdUeXBlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBuZXdNYXA6IGFueSA9IHt9O1xyXG4gICAgICAgIG5ld01hcFsnZGF0YUdyaWRDb2x1bW4nXSA9IGNvbHVtbkRhdGE7XHJcbiAgICAgICAgaWYgKCFuZXdGaWxlZFtxdWVzdGlvbi5maWVsZERhdGFUeXBlXSkge1xyXG4gICAgICAgICAgbmV3RmlsZWRbcXVlc3Rpb24uZmllbGREYXRhVHlwZV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmV3RmlsZWRbcXVlc3Rpb24uZmllbGREYXRhVHlwZV0ucHVzaChuZXdNYXApO1xyXG4gICAgICB9XHJcbiAgICAgIGRhdGEucHVzaCh7XHJcbiAgICAgICAgJ2xhYmVsTmFtZSc6IGtleSxcclxuICAgICAgICAnYW5zd2VyJzogbmV3RmlsZWRcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmFuc3dlcnMpLmZvckVhY2goa2V5ID0+IHtcclxuXHJcbiAgICAgIHRoaXMuYXBpRXJyb3Jba2V5XSA9IFtdO1xyXG4gICAgICBsZXQgbmV3TWFwOiBhbnkgPSB7fTtcclxuICAgICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbnMuZmlsdGVyKChxdWVzdDogYW55KSA9PiB0aGlzLmdldFF1ZXN0aW9uKHF1ZXN0KS5sYWJlbE5hbWUgPT09IGtleSk7XHJcbiAgICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gJ2N1c3RvbWVyLWNyZWF0ZScgfHwgdGhpcy5zb3VyY2UgPT09ICdxbnJEZXRhaWxzJyB8fCB0aGlzLnNvdXJjZSA9PT0gJ29uZXRpbWUnKSB7XHJcbiAgICAgICAgcXVlc3Rpb24gPSBxdWVzdGlvblswXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBxdWVzdGlvbiA9IHF1ZXN0aW9uWzBdLnF1ZXN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmFuc3dlcnNba2V5XSB8fCBxdWVzdGlvbi5maWVsZERhdGFUeXBlID09PSAnYm9vbCcpIHtcclxuICAgICAgICBsZXQgYW5zd2VyID0gdGhpcy5hbnN3ZXJzW2tleV07XHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmZpZWxkRGF0YVR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgYW5zd2VyID0gdGhpcy5kYXRlUHJvY2Vzc29yLnRyYW5zZm9ybVRvWU1ERm9ybWF0KGFuc3dlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5ld01hcFtxdWVzdGlvbi5maWVsZERhdGFUeXBlXSA9IGFuc3dlcjtcclxuICAgICAgICBkYXRhLnB1c2goe1xyXG4gICAgICAgICAgJ2xhYmVsTmFtZSc6IGtleSxcclxuICAgICAgICAgICdhbnN3ZXInOiBuZXdNYXBcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBuZXdNYXAgPSAnJztcclxuICAgICAgICAvLyBkYXRhLnB1c2goe1xyXG4gICAgICAgIC8vICdsYWJlbE5hbWUnOiBrZXksXHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgbGV0IHBvc3REYXRhO1xyXG4gICAgaWYgKHRoaXMuc291cmNlID09PSAncW5ycGFwZXInKSB7XHJcbiAgICAgIHBvc3REYXRhID0ge1xyXG4gICAgICAgICdxdWVzdGlvbm5haXJlSWQnOiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5pZCkgPyB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmlkIDogdGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5xdWVzdGlvbm5haXJlSWQsXHJcbiAgICAgICAgJ2Fuc3dlckxpbmUnOiBkYXRhXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGtleXR5cGUgPT09ICdzZXJ2aWNlT3B0aW9uJykge1xyXG4gICAgICBwb3N0RGF0YSA9IHtcclxuICAgICAgICAncXVlc3Rpb25uYWlyZUlkJzogKHRoaXMucXVlc3Rpb25uYWlyZUxpc3QuaWQpID8gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5pZCA6IHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0ucXVlc3Rpb25uYWlyZUlkLFxyXG4gICAgICAgICdhbnN3ZXJMaW5lJzogdGhpcy5maW5hbE9iamVjdExpc3RcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5zb3VyY2UgPT09ICdpdnInICYmIHRoaXMucGFyYW1zLmN1c3RvbUlkKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdmZmZmZmZmZmZmZmZmZmZmZmZmZmYnLCB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0KVxyXG4gICAgICBwb3N0RGF0YSA9IHtcclxuICAgICAgICAncXVlc3Rpb25uYWlyZUlkJzogKHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0uaWQpID8gdGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5pZCA6IHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0ucXVlc3Rpb25uYWlyZUlkLFxyXG4gICAgICAgICdhbnN3ZXJMaW5lJzogZGF0YVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ3F1ZXN0aW9ubmFpcmVMaXN0JywgdGhpcy5xdWVzdGlvbm5haXJlTGlzdClcclxuICAgICAgcG9zdERhdGEgPSB7XHJcbiAgICAgICAgJ3F1ZXN0aW9ubmFpcmVJZCc6ICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmlkKSA/IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QuaWQgOiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LnF1ZXN0aW9ubmFpcmVJZCxcclxuICAgICAgICAnYW5zd2VyTGluZSc6IGRhdGFcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgcGFzc0RhdGEgPSB7ICdhbnN3ZXJzJzogcG9zdERhdGEsICdmaWxlcyc6IHRoaXMuc2VsZWN0ZWRNZXNzYWdlLCAnYXVkaW9WaWRlbyc6IHRoaXMuYXVkaW9WaWRlb0ZpbGVzLCAnZmlsZXN0b1VwbG9hZCc6IHRoaXMuZmlsZXN0b1VwbG9hZCwgJ2RhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3QnOiB0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3QsICdjb21tZW50cyc6IHRoaXMuY29tbWVudHMgfTtcclxuICAgIGlmIChrZXl0eXBlID09PSAnaW5wdXRDaGFuZ2UnKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlSGFwcGVuZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKGtleXR5cGUgPT09ICdzdWJtaXQnKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoYW5nZUhhcHBlbmVkKSB7XHJcbiAgICAgICAgdGhpcy5zdWJtaXRRdWVzdGlvbm5haXJlKHBhc3NEYXRhKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMudHlwZSkge1xyXG4gICAgICAgICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdxbnItbGluaycpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXR1cm5BbnN3ZXJzLmVtaXQoJ25vY2hhbmdlJyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmVkaXRRbnIoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICB0aGlzLnJldHVybkFuc3dlcnMuZW1pdChwYXNzRGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldERhdGUoZGF0ZTogYW55KSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZSk7XHJcbiAgfVxyXG4gIGxpc3RDaGFuZ2UoZXY6IGFueSwgdmFsdWU6IGFueSwgcXVlc3Rpb246IGFueSwgY29sdW1uPzogYW55KSB7XHJcbiAgICBpZiAocXVlc3Rpb24uZmllbGREYXRhVHlwZSAhPT0gJ2RhdGFHcmlkJykge1xyXG4gICAgICBpZiAoZXYudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgICBpZiAoIXRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdKSB7XHJcbiAgICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocXVlc3Rpb24ubGlzdFByb3BlcnRpZSAmJiBxdWVzdGlvbi5saXN0UHJvcGVydGllLm1heEFuc3dlcnMgJiYgcXVlc3Rpb24ubGlzdFByb3BlcnRpZS5tYXhBbnN3ZXJzID4gMSkge1xyXG4gICAgICAgICAgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0ucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdWzBdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGluZHggPSB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXS5pbmRleE9mKHZhbHVlKTtcclxuICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXS5zcGxpY2UoaW5keCwgMSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChldi50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICAgIGlmICghdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSkge1xyXG4gICAgICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdLnB1c2godmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGluZHggPSB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdLmluZGV4T2YodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0uc3BsaWNlKGluZHgsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uU3VibWl0KCdpbnB1dENoYW5nZScpO1xyXG4gIH1cclxuICBpc0NoZWNrZWQodmFsdWU6IGFueSwgcXVlc3Rpb246IGFueSwgY29sdW1uPzogYW55KSB7XHJcbiAgICBpZiAocXVlc3Rpb24uZmllbGREYXRhVHlwZSAhPT0gJ2RhdGFHcmlkJykge1xyXG4gICAgICBpZiAodGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0pIHtcclxuICAgICAgICBjb25zdCBpbmR4ID0gdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0uaW5kZXhPZih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKGluZHggIT09IC0xKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdKSB7XHJcbiAgICAgICAgY29uc3QgaW5keCA9IHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0uaW5kZXhPZih2YWx1ZSk7XHJcbiAgICAgICAgaWYgKGluZHggIT09IC0xKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgYm9vbGVhbkNoYW5nZShldjogYW55LCB2YWx1ZTogYW55LCBxdWVzdGlvbjogYW55LCBjb2x1bW4/OiBhbnkpIHtcclxuICAgIGlmIChxdWVzdGlvbi5maWVsZERhdGFUeXBlICE9PSAnZGF0YUdyaWQnKSB7XHJcbiAgICAgIGlmIChldi50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICAgIGlmICghdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0pIHtcclxuICAgICAgICAgIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdID0gKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICd5ZXMnKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGV2LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSA9ICh2YWx1ZSA9PT0gJ3llcycpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uU3VibWl0KCdpbnB1dENoYW5nZScpO1xyXG4gIH1cclxuICBpc0Jvb2xlYW5DaGVja2VkKHZhbHVlOiBhbnksIHF1ZXN0aW9uOiBhbnksIGNvbHVtbj86IGFueSkge1xyXG4gICAgdmFsdWUgPSAodmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ3llcycpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgaWYgKHF1ZXN0aW9uLmZpZWxkRGF0YVR5cGUgIT09ICdkYXRhR3JpZCcpIHtcclxuICAgICAgaWYgKHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdICE9PSAnJyAmJiB0eXBlb2YgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBKU09OLnBhcnNlKHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdKVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSA9PT0gdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdICE9PSAnJyAmJiB0eXBlb2YgdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdID0gSlNPTi5wYXJzZSh0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdKVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdID09PSB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBzdWJtaXRRdWVzdGlvbm5haXJlKHBhc3NEYXRhOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKCdmZGZmJywgcGFzc0RhdGEpXHJcbiAgICBjb25zdCBkYXRhVG9TZW5kOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgY29uc3QgYmxvYnBvc3RfRGF0YSA9IG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeShwYXNzRGF0YS5hbnN3ZXJzKV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pO1xyXG4gICAgZGF0YVRvU2VuZC5hcHBlbmQoJ3F1ZXN0aW9uJywgYmxvYnBvc3RfRGF0YSk7XHJcbiAgICB0aGlzLmJ1dHRvbkRpc2FibGUgPSB0cnVlO1xyXG5cclxuICB9XHJcblxyXG5cclxuICB1cGxvYWRBdWRpb1ZpZGVvKGRhdGE6IGFueSwgdHlwZTogYW55KSB7XHJcbiAgICBpZiAoZGF0YS51cmxzICYmIGRhdGEudXJscy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBwb3N0RGF0YTogYW55ID0ge1xyXG4gICAgICAgIHVybHM6IFtdXHJcbiAgICAgIH07XHJcbiAgICAgIGZvciAoY29uc3QgdXJsIG9mIGRhdGEudXJscykge1xyXG4gICAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLmZpbGVzdG9VcGxvYWRbdXJsLmxhYmVsTmFtZV1bdXJsLmRvY3VtZW50XTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uYWlyZVNlcnZpY2UudmlkZW9hdWRpb1MzVXBsb2FkKGZpbGUsIHVybC51cmwpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgcG9zdERhdGFbJ3VybHMnXS5wdXNoKHsgdWlkOiB1cmwudWlkLCBsYWJlbE5hbWU6IHVybC5sYWJlbE5hbWUgfSk7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLnVybHMubGVuZ3RoID09PSBwb3N0RGF0YVsndXJscyddLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlID09PSAnY29uc0NoZWNraW4nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uYWlyZVNlcnZpY2UuY29uc3VtZXJXYWl0bGlzdFFuclVwbG9hZFN0YXR1c1VwZGF0ZSh0aGlzLnV1aWQsIHRoaXMuYWNjb3VudElkLCBwb3N0RGF0YSlcclxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2Vzc0dvYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBlcnJvck9iaiA9IHRoaXMuZXJyb3JTZXJ2aWNlLmdldEFwaUVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dFcnJvcih0aGlzLndvcmRQcm9jZXNzb3IuZ2V0UHJvamVjdEVycm9yTWVzc3NhZ2VzKGVycm9yT2JqKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbkRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjb25zQXBwdCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25haXJlU2VydmljZS5jb25zdW1lckFwcHRRbnJVcGxvYWRTdGF0dXNVcGRhdGUodGhpcy51dWlkLCB0aGlzLmFjY291bnRJZCwgcG9zdERhdGEpXHJcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NHb2JhY2soKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JPYmogPSB0aGlzLmVycm9yU2VydmljZS5nZXRBcGlFcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93RXJyb3IodGhpcy53b3JkUHJvY2Vzc29yLmdldFByb2plY3RFcnJvck1lc3NzYWdlcyhlcnJvck9iaikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5idXR0b25EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnY29uc09yZGVyJyB8fCB0eXBlID09PSAncGFwZXInKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uYWlyZVNlcnZpY2UuY29uc3VtZXJPcmRlclFuclVwbG9hZFN0YXR1c1VwZGF0ZSh0aGlzLnV1aWQsIHRoaXMuYWNjb3VudElkLCBwb3N0RGF0YSlcclxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2Vzc0dvYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dFcnJvcih0aGlzLndvcmRQcm9jZXNzb3IuZ2V0UHJvamVjdEVycm9yTWVzc3NhZ2VzKGVycm9yKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbkRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjb25zRG9uYXRpb25EZXRhaWxzJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbmFpcmVTZXJ2aWNlLmNvbnN1bWVyRG9uYXRpb25RbnJVcGxvYWRTdGF0dXNVcGRhdGUodGhpcy51dWlkLCB0aGlzLmFjY291bnRJZCwgcG9zdERhdGEpXHJcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2Vzc0dvYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnJvck9iaiA9IHRoaXMuZXJyb3JTZXJ2aWNlLmdldEFwaUVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93RXJyb3IodGhpcy53b3JkUHJvY2Vzc29yLmdldFByb2plY3RFcnJvck1lc3NzYWdlcyhlcnJvck9iaikpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBlcnJvck9iaiA9IHRoaXMuZXJyb3JTZXJ2aWNlLmdldEFwaUVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvd0Vycm9yKHRoaXMud29yZFByb2Nlc3Nvci5nZXRQcm9qZWN0RXJyb3JNZXNzc2FnZXMoZXJyb3JPYmopKTtcclxuICAgICAgICAgICAgdGhpcy5idXR0b25EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdWNjZXNzR29iYWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdvQmFjaygpIHtcclxuICAgIHRoaXMubG9jYXRpb24uYmFjaygpO1xyXG4gIH1cclxuICBnZXRRdWVzdGlvbihxdWVzdGlvbjogYW55KSB7XHJcbiAgICBpZiAodGhpcy5zb3VyY2UgPT09ICdjdXN0b21lci1jcmVhdGUnIHx8IHRoaXMuc291cmNlID09PSAncW5yRGV0YWlscycgfHwgdGhpcy5zb3VyY2UgPT09ICdvbmV0aW1lJyB8fCB0aGlzLnNvdXJjZSA9PT0gJ3NlcnZpY2VPcHRpb25BcHB0Jykge1xyXG4gICAgICByZXR1cm4gcXVlc3Rpb247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gcXVlc3Rpb24ucXVlc3Rpb247XHJcbiAgICB9XHJcbiAgfVxyXG4gIHZhbGlkYXRlUXVlc3Rpb25uYWlyZShzcmM/OiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5xdWVzdGlvbkFuc3dlcnMpIHtcclxuICAgICAgdGhpcy5xdWVzdGlvbkFuc3dlcnMgPSB7XHJcbiAgICAgICAgYW5zd2Vyczoge1xyXG4gICAgICAgICAgYW5zd2VyTGluZTogW10sXHJcbiAgICAgICAgICBxdWVzdGlvbm5haXJlSWQ6ICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmlkKSA/IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QuaWQgOiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LnF1ZXN0aW9ubmFpcmVJZCxcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEltZyhxdWVzdGlvbjogYW55LCBkb2N1bWVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV0gJiYgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKSB7XHJcbiAgICAgIGxldCB0eXBlID0gdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdLnR5cGUuc3BsaXQoJy8nKTtcclxuICAgICAgbGV0IGZpbGU7XHJcbiAgICAgIGlmICh0eXBlWzBdID09PSAndmlkZW8nIHx8IHR5cGVbMF0gPT09ICdhdWRpbycpIHtcclxuICAgICAgICBmaWxlID0gdGhpcy5hdWRpb1ZpZGVvRmlsZXM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmlsZSA9IHRoaXMuc2VsZWN0ZWRNZXNzYWdlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGluZHggPSBmaWxlLmluZGV4T2YodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKTtcclxuICAgICAgaWYgKGluZHggIT09IC0xKSB7XHJcbiAgICAgICAgbGV0IHBhdGggPSB0aGlzLmZpbGVTZXJ2aWNlLmdldEltYWdlKG51bGwsIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcblxyXG4gICAgICAgIGlmIChwYXRoICYmIHBhdGggIT09IG51bGwpIHtcclxuICAgICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYXRoID0gZmlsZVtpbmR4XS5wYXRoO1xyXG4gICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdICYmIHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSkge1xyXG4gICAgICBjb25zdCBpbmR4ID0gdGhpcy51cGxvYWRlZEltYWdlcy5pbmRleE9mKHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xyXG4gICAgICAgIGxldCBwYXRoID0gdGhpcy5maWxlU2VydmljZS5nZXRJbWFnZShudWxsLCB0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdKTtcclxuICAgICAgICBpZiAocGF0aCAmJiBwYXRoICE9PSBudWxsKSB7XHJcbiAgICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGF0aCA9IHRoaXMudXBsb2FkZWRJbWFnZXNbaW5keF0uczNwYXRoO1xyXG4gICAgICAgIHJldHVybiBwYXRoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uQnV0dG9uQmVmb3JlSG9vayhldmVudDogYW55KSB7XHJcbiAgICBpZiAoIWV2ZW50IHx8ICFldmVudC5idXR0b24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGV2ZW50LmJ1dHRvbi50eXBlID09PSBCdXR0b25UeXBlLkRPV05MT0FEKSB7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9wZW5BdHRhY2htZW50R2FsbGVyeShxdWVzdGlvbjogYW55LCBkb2N1bWVudDogYW55KSB7XHJcbiAgICB0aGlzLmltYWdlX2xpc3RfcG9wdXAgPSBbXTtcclxuICAgIGxldCBjb3VudCA9IDA7XHJcbiAgICBsZXQgaW1hZ2VQYXRoO1xyXG4gICAgbGV0IGNhcHRpb24gPSAnJztcclxuICAgIGlmICh0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXSAmJiB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pIHtcclxuICAgICAgbGV0IHR5cGUgPSB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0udHlwZS5zcGxpdCgnLycpO1xyXG4gICAgICBpZiAodHlwZVswXSA9PT0gJ3ZpZGVvJyB8fCB0eXBlWzBdID09PSAnYXVkaW8nKSB7XHJcbiAgICAgICAgY29uc3QgaW5keCA9IHRoaXMuYXVkaW9WaWRlb0ZpbGVzLmluZGV4T2YodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKTtcclxuICAgICAgICB0aGlzLnNob3dBdWRpb1ZpZGVvRmlsZSh0aGlzLmF1ZGlvVmlkZW9GaWxlc1tpbmR4XSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgaW5keCA9IHRoaXMuc2VsZWN0ZWRNZXNzYWdlLmluZGV4T2YodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKTtcclxuICAgICAgICBpZiAoaW5keCAhPT0gLTEpIHtcclxuICAgICAgICAgIGlmICh0eXBlWzFdID09PSAncGRmJyB8fCB0eXBlWzFdID09PSAnZG9jeCcgfHwgdHlwZVsxXSA9PT0gJ3R4dCcgfHwgdHlwZVsxXSA9PT0gJ2RvYycpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZXNzYWdlW2luZHhdLnMzcGF0aCkge1xyXG4gICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMuc2VsZWN0ZWRNZXNzYWdlW2luZHhdLnMzcGF0aCwgJ19ibGFuaycpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMuc2VsZWN0ZWRNZXNzYWdlW2luZHhdLnBhdGgsICdfYmxhbmsnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1hZ2VQYXRoID0gdGhpcy51cGxvYWRlZEltYWdlc1tpbmR4XS5wYXRoO1xyXG4gICAgICAgICAgICBjYXB0aW9uID0gdGhpcy5jb21tZW50c1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBkb2N1bWVudF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdICYmIHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSkge1xyXG4gICAgICBjb25zdCBpbmR4ID0gdGhpcy51cGxvYWRlZEltYWdlcy5pbmRleE9mKHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgIGxldCB0eXBlID0gdGhpcy51cGxvYWRlZEZpbGVzW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdLnR5cGUuc3BsaXQoJy8nKTtcclxuICAgICAgbGV0IGV4dCA9IHR5cGVbMV07XHJcbiAgICAgIHR5cGUgPSB0eXBlWzBdO1xyXG4gICAgICBpZiAoaW5keCAhPT0gLTEpIHtcclxuICAgICAgICBpZiAodHlwZSA9PT0gJ3ZpZGVvJyB8fCB0eXBlID09PSAnYXVkaW8nKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dBdWRpb1ZpZGVvRmlsZSh0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGV4dCA9PT0gJ3BkZicgfHwgZXh0ID09PSAnZG9jeCcgfHwgZXh0ID09PSAndHh0JyB8fCBleHQgPT09ICdkb2MnIHx8IGV4dCA9PT0gJ3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Jykge1xyXG4gICAgICAgICAgd2luZG93Lm9wZW4odGhpcy51cGxvYWRlZEZpbGVzW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdLnMzcGF0aCwgJ19ibGFuaycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygndHlwZXR4dDInLHRoaXMudXBsb2FkZWRJbWFnZXNbaW5keF0pO1xyXG4gICAgICAgICAgaWYgKHRoaXMudXBsb2FkZWRJbWFnZXMgJiYgdGhpcy51cGxvYWRlZEltYWdlc1tpbmR4XSAmJiB0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdWydrZXlOYW1lJ10gJiZcclxuICAgICAgICAgICAgdGhpcy51cGxvYWRlZEltYWdlc1tpbmR4XVsna2V5TmFtZSddLmluY2x1ZGVzKCdkb2N4JykpIHtcclxuICAgICAgICAgICAgd2luZG93Lm9wZW4odGhpcy51cGxvYWRlZEZpbGVzW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdLnMzcGF0aCwgJ19ibGFuaycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGltYWdlUGF0aCA9IHRoaXMudXBsb2FkZWRJbWFnZXNbaW5keF0uczNwYXRoO1xyXG4gICAgICAgICAgICBjYXB0aW9uID0gdGhpcy51cGxvYWRlZEltYWdlc1tpbmR4XS5jb21tZW50cztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaW1hZ2VQYXRoKSB7XHJcblxyXG4gICAgICBjb25zdCBpbWdvYmogPSBuZXcgSW1hZ2UoXHJcbiAgICAgICAgY291bnQsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaW1nOiBpbWFnZVBhdGgsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogY2FwdGlvblxyXG4gICAgICAgIH0sXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuaW1hZ2VfbGlzdF9wb3B1cC5wdXNoKGltZ29iaik7XHJcbiAgICAgIGNvdW50Kys7XHJcbiAgICB9XHJcbiAgICBpZiAoY291bnQgPiAwKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMub3BlbkltYWdlTW9kYWxSb3codGhpcy5pbWFnZV9saXN0X3BvcHVwWzBdKTtcclxuICAgICAgfSwgMjAwKTtcclxuICAgIH1cclxuICB9XHJcbiAgb3BlbkltYWdlTW9kYWxSb3coaW1hZ2U6IEltYWdlKSB7XHJcbiAgICBjb25zdCBpbmRleDogbnVtYmVyID0gdGhpcy5nZXRDdXJyZW50SW5kZXhDdXN0b21MYXlvdXQoaW1hZ2UsIHRoaXMuaW1hZ2VfbGlzdF9wb3B1cCk7XHJcbiAgICB0aGlzLm9wZW5Nb2RhbCgxLCBpbmRleCwgdGhpcy5jdXN0b21CdXR0b25zRm9udEF3ZXNvbWVDb25maWcpO1xyXG4gIH1cclxuICBwcml2YXRlIGdldEN1cnJlbnRJbmRleEN1c3RvbUxheW91dChpbWFnZTogSW1hZ2UsIGltYWdlczogSW1hZ2VbXSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZXMuaW5kZXhPZihpbWFnZSkgOiAtMTtcclxuICB9XHJcbiAgb3Blbk1vZGFsKGlkOiBudW1iZXIsIGltYWdlSW5kZXg6IG51bWJlciwgYnV0dG9uc0NvbmZpZzogQnV0dG9uc0NvbmZpZyk6IHZvaWQge1xyXG4gICAgY29uc3QgZGlhbG9nUmVmOiBNb2RhbEdhbGxlcnlSZWYgPSB0aGlzLm1vZGFsR2FsbGVyeVNlcnZpY2Uub3Blbih7XHJcbiAgICAgIGlkOiBpZCxcclxuICAgICAgaW1hZ2VzOiB0aGlzLmltYWdlX2xpc3RfcG9wdXAsXHJcbiAgICAgIGN1cnJlbnRJbWFnZTogdGhpcy5pbWFnZV9saXN0X3BvcHVwW2ltYWdlSW5kZXhdLFxyXG4gICAgICBsaWJDb25maWc6IHtcclxuICAgICAgICBidXR0b25zQ29uZmlnOiBidXR0b25zQ29uZmlnLFxyXG4gICAgICAgIGN1cnJlbnRJbWFnZUNvbmZpZzoge1xyXG4gICAgICAgICAgZG93bmxvYWRhYmxlOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGFzIE1vZGFsTGliQ29uZmlnXHJcbiAgICB9IGFzIE1vZGFsR2FsbGVyeUNvbmZpZykgYXMgTW9kYWxHYWxsZXJ5UmVmO1xyXG4gIH1cclxuICBzaG93QXVkaW9WaWRlb0ZpbGUoZmlsZTogYW55KSB7XHJcbiAgICBjb25zdCBmaWxldmlld2RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU2hvd3VwbG9hZGZpbGVDb21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6ICc1MCUnLFxyXG4gICAgICBwYW5lbENsYXNzOiBbJ3BvcHVwLWNsYXNzJywgJ2NvbW1vbnBvcHVwbWFpbmNsYXNzJywgJ3VwbG9hZGZpbGVjb21wb25lbnRjbGFzcyddLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBmaWxlOiBmaWxlLFxyXG4gICAgICAgIHNvdXJjZTogJ3FucidcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBmaWxldmlld2RpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGVkaXRRbnIoKSB7XHJcbiAgICB0aGlzLmVkaXRRdWVzdGlvbm5haXJlID0gIXRoaXMuZWRpdFF1ZXN0aW9ubmFpcmU7XHJcbiAgfVxyXG4gIGdldERvY3VtZW50cyhxdWVzdGlvbjogYW55KSB7XHJcbiAgICBpZiAocXVlc3Rpb24uZmlsZVByb3BlcnRpZS5tYXhOb09mRmlsZSA+IDEgJiYgcXVlc3Rpb24uZmlsZVByb3BlcnRpZS5taW5Ob09mRmlsZSAhPT0gcXVlc3Rpb24uZmlsZVByb3BlcnRpZS5tYXhOb09mRmlsZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRGaWxlc1RlbXBbcXVlc3Rpb24ubGFiZWxOYW1lXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBxdWVzdGlvbi5maWxlUHJvcGVydGllLmFsbG93ZWREb2N1bWVudHM7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNob3dQcm92aWRlclRleHQocXVlc3Rpb246IGFueSkge1xyXG4gICAgaWYgKHF1ZXN0aW9uLndob0NhbkFuc3dlciAmJiBxdWVzdGlvbi53aG9DYW5BbnN3ZXIgPT09ICdQUk9WSURFUl9PTkxZJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgc3VjY2Vzc0dvYmFjaygpIHtcclxuICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzLnR5cGUpIHtcclxuICAgICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbGVzdG9VcGxvYWQgPSBbXTtcclxuICAgICAgdGhpcy5lZGl0UW5yKCk7XHJcbiAgICAgIHRoaXMucmV0dXJuQW5zd2Vycy5lbWl0KCdyZWxvYWQnKTtcclxuICAgICAgaWYgKHRoaXMudHlwZSAhPT0gJ3Fuci1saW5rJykge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dTdWNjZXNzKCdVcGRhdGVkIFN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNob3dEYXRhR3JpZEFkZFNlY3Rpb24ocXVlc3Rpb246IGFueSwgdmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5zaG93RGF0YUdyaWRbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IHZhbHVlO1xyXG4gICAgdGhpcy51cGRhdGVkR3JpZEluZGV4W3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBudWxsO1xyXG4gIH1cclxuICBzaG93RGF0YUdyaWRBZGRTZWN0aW9ubihxdWVzdGlvbjogYW55LCB2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnF1ZXNTdG9yZSA9IHF1ZXN0aW9uO1xyXG4gICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdxdWVzU3RvcmUnLCB0aGlzLnF1ZXNTdG9yZSk7XHJcbiAgICB0aGlzLnNob3dEYXRhR3JpZFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gdmFsdWU7XHJcbiAgICB0aGlzLnVwZGF0ZWRHcmlkSW5kZXhbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IG51bGw7XHJcbiAgICB0aGlzLnFuclBvcHVwKHF1ZXN0aW9uLCB0cnVlKVxyXG4gIH1cclxuICBzYXZlRGF0YUdyaWRDb2x1bW4ocXVlc3Rpb246IGFueSkge1xyXG4gICAgbGV0IGNvbHVtbnMgPSBbXTtcclxuICAgIGZvciAobGV0IGNvbHVtbiBvZiBxdWVzdGlvbi5kYXRhR3JpZFByb3BlcnRpZXMuZGF0YUdyaWRDb2x1bW5zKSB7XHJcbiAgICAgIGlmICh0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgY29sdW1uc1tjb2x1bW4ub3JkZXJdID0gdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoY29sdW1uLmRhdGFUeXBlID09PSAnbGlzdCcgfHwgY29sdW1uLmRhdGFUeXBlID09PSAnZmlsZVVwbG9hZCcpIHtcclxuICAgICAgICAgIGNvbHVtbnNbY29sdW1uLm9yZGVyXSA9IFtdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb2x1bW5zW2NvbHVtbi5vcmRlcl0gPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W3F1ZXN0aW9uLmxhYmVsTmFtZV0pIHtcclxuICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBbXTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnVwZGF0ZWRHcmlkSW5kZXhbcXVlc3Rpb24ubGFiZWxOYW1lXSAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbcXVlc3Rpb24ubGFiZWxOYW1lXVt0aGlzLnVwZGF0ZWRHcmlkSW5kZXhbcXVlc3Rpb24ubGFiZWxOYW1lXV0gPSBjb2x1bW5zO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W3F1ZXN0aW9uLmxhYmVsTmFtZV0ucHVzaChjb2x1bW5zKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2FuY2VsQWRkb3JVcGRhdGUocXVlc3Rpb24pO1xyXG4gICAgdGhpcy5vblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcclxuICB9XHJcbiAgZWRpdERhdGFHcmlkKHF1ZXN0aW9uOiBhbnksIGNvbHVtbjogYW55KSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtxdWVzdGlvbi5sYWJlbE5hbWVdLmluZGV4T2YoY29sdW1uKTtcclxuICAgIE9iamVjdC5rZXlzKGNvbHVtbikuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBrZXldID0gY29sdW1uW2tleV07XHJcbiAgICB9KTtcclxuICAgIHRoaXMudXBkYXRlZEdyaWRJbmRleFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gaW5kZXg7XHJcbiAgICB0aGlzLnNob3dEYXRhR3JpZFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gdHJ1ZTtcclxuICB9XHJcbiAgZGVsZXRlRGF0YUdyaWQocXVlc3Rpb246IGFueSwgY29sdW1uOiBhbnkpIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W3F1ZXN0aW9uLmxhYmVsTmFtZV0uaW5kZXhPZihjb2x1bW4pO1xyXG4gICAgdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W3F1ZXN0aW9uLmxhYmVsTmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIHRoaXMub25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XHJcbiAgfVxyXG4gIGNhbmNlbEFkZG9yVXBkYXRlKHF1ZXN0aW9uOiBhbnkpIHtcclxuICAgIHRoaXMuc2hvd0RhdGFHcmlkW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBmYWxzZTtcclxuICAgIHRoaXMudXBkYXRlZEdyaWRJbmRleFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gbnVsbDtcclxuICAgIGZvciAobGV0IGNvbHVtbiBvZiBxdWVzdGlvbi5kYXRhR3JpZFByb3BlcnRpZXMuZGF0YUdyaWRDb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0gPSAnJztcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0Q29sdW1uVHlwZShjb2x1bW5zOiBhbnksIGNvbHVtbjogYW55KSB7XHJcbiAgICBjb25zdCBjb2x1bW5EZXRhaWxzID0gY29sdW1ucy5maWx0ZXIoKGNsbW46IGFueSkgPT4gY2xtbi5vcmRlciA9PT0gSlNPTi5wYXJzZShjb2x1bW4pKTtcclxuICAgIGlmIChjb2x1bW5EZXRhaWxzWzBdKSB7XHJcbiAgICAgIHJldHVybiBjb2x1bW5EZXRhaWxzWzBdLmRhdGFUeXBlO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRTZWN0aW9uQ291bnQoKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5ncm91cGVkUW5yKS5sZW5ndGg7XHJcbiAgfVxyXG4gIGdldEJvb2xWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICB2YWx1ZSA9ICh2YWx1ZSAhPT0gJycgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgPyBKU09OLnBhcnNlKHZhbHVlKSA6IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiAnWWVzJztcclxuICAgIH1cclxuICAgIHJldHVybiAnTm8nO1xyXG4gIH1cclxuICBnZXRNYXhkYXRlKGRhdGE6IGFueSkge1xyXG4gICAgbGV0IGRhdGU7XHJcbiAgICBpZiAodGhpcy5nZXRRdWVzdGlvbihkYXRhKS5kYXRlUHJvcGVydGllcyAmJiB0aGlzLmdldFF1ZXN0aW9uKGRhdGEpLmRhdGVQcm9wZXJ0aWVzLmVuZERhdGUpIHtcclxuICAgICAgY29uc3QgZHQgPSB0aGlzLnJldmVyc2UodGhpcy5nZXRRdWVzdGlvbihkYXRhKS5kYXRlUHJvcGVydGllcy5lbmREYXRlKTtcclxuICAgICAgZGF0ZSA9IG5ldyBEYXRlKGR0KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0ZSA9IHRoaXMudGRheTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRlO1xyXG4gIH1cclxuICBnZXRNaW5kYXRlKGRhdGE6IGFueSkge1xyXG4gICAgbGV0IGRhdGU7XHJcbiAgICBpZiAodGhpcy5nZXRRdWVzdGlvbihkYXRhKS5kYXRlUHJvcGVydGllcyAmJiB0aGlzLmdldFF1ZXN0aW9uKGRhdGEpLmRhdGVQcm9wZXJ0aWVzLnN0YXJ0RGF0ZSkge1xyXG4gICAgICBjb25zdCBkdCA9IHRoaXMucmV2ZXJzZSh0aGlzLmdldFF1ZXN0aW9uKGRhdGEpLmRhdGVQcm9wZXJ0aWVzLnN0YXJ0RGF0ZSk7XHJcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZShkdClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRhdGUgPSB0aGlzLm1pbmRheTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0ZTtcclxuICB9XHJcbiAgcmV2ZXJzZShzOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBzLnNwbGl0KFwiLVwiKS5yZXZlcnNlKCkuam9pbihcIi1cIik7XHJcbiAgfVxyXG4gIHFuclBvcHVwKHF1ZXN0aW9uOiBhbnksIHZhbHVlOiBhbnkpIHtcclxuICAgIC8vIGlmICh2YWx1ZSA9PT0gJ2VkaXQnKSB7XHJcbiAgICAvLyAgIHRoaXMucXVlc1N0b3JlID0gdGhpcy5sU3RvcmFnZVNlcnZpY2UuZ2V0aXRlbWZyb21Mb2NhbFN0b3JhZ2UoJ3F1ZXNTdG9yZScpO1xyXG4gICAgLy8gICB0aGlzLnNob3dxbnIgPSB0cnVlO1xyXG4gICAgLy8gICB0aGlzLmVkaXRhYmxlSXRlbSA9IHF1ZXN0aW9uO1xyXG4gICAgLy8gICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXNTdG9yZSkpXHJcbiAgICAvLyAgIGNvbnN0IHJlbW92ZWl0ZW1kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFFuckRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgLy8gICAgIHdpZHRoOiAnNTAlJyxcclxuICAgIC8vICAgICBwYW5lbENsYXNzOiBbJ3BvcHVwLWNsYXNzJywgJ2NvbW1vbnBvcHVwbWFpbmNsYXNzJywgJ2NvbmZpcm1hdGlvbm1haW5jbGFzcyddLFxyXG4gICAgLy8gICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgIC8vICAgICBkYXRhOiB7XHJcbiAgICAvLyAgICAgICBkYXRhOiB0aGlzLnF1ZXNTdG9yZSxcclxuICAgIC8vICAgICAgIHFucl90eXBlOiAnc2VydmljZV9vcHRpb24nLFxyXG4gICAgLy8gICAgICAgdmlldzogJ3FuclZpZXcnLFxyXG4gICAgLy8gICAgICAgaXNFZGl0OiAnZWRpdCcsXHJcbiAgICAvLyAgICAgICBlZGl0YWJsZUl0ZW06IHRoaXMuZWRpdGFibGVJdGVtLFxyXG4gICAgLy8gICAgICAgc2VydkRldGFpbHM6IHRoaXMuc2VydmljZVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyAgIHJlbW92ZWl0ZW1kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgIC8vICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAvLyAgICAgICBjb25zb2xlLmxvZyhcInJlc3VsdC5kYXRhLmFuc3dlckxpbmVcIiwgcmVzdWx0LmRhdGEuYW5zd2VyTGluZSlcclxuICAgIC8vICAgICAgIHRoaXMuZGF0YUdyaWRMaXN0ID0gcmVzdWx0LmRhdGEuYW5zd2VyTGluZTtcclxuICAgIC8vICAgICAgIHRoaXMucG9zdF9EYXRhID0gcmVzdWx0LmRhdGE7XHJcbiAgICAvLyAgICAgICB0aGlzLnNob3dJdGVtID0gdHJ1ZTtcclxuICAgIC8vICAgICAgIHRoaXMuaXRlbSA9IHJlc3VsdC5kYXRhLmFuc3dlckxpbmVbMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW5bMF0uY29sdW1uLmxpc3RbMF07XHJcbiAgICAvLyAgICAgICBpZiAocmVzdWx0LmRhdGEudG90YWxQcmljZSkge1xyXG4gICAgLy8gICAgICAgICB0aGlzLnRvdGFsUHJpY2UgPSByZXN1bHQuZGF0YS50b3RhbFByaWNlXHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBsZXQgaW5kZXgxID0gdGhpcy5pdGVtQXJyYXkuZmluZEluZGV4KHggPT4geC5pZCA9PT0gdGhpcy5lZGl0YWJsZUl0ZW0uaWQpXHJcbiAgICAvLyAgICAgICBpZiAoaW5kZXgxID4gLTEpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5pdGVtQXJyYXkuc3BsaWNlKGluZGV4MSwgMSk7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBsZXQgZHVtbXlBcnJheSA9IHsgaWQ6IHRoaXMuaWQsIHNlcXVlbmNlSWQ6IHRoaXMuc2VxdWVuY2VJZCwgaXRlbTogdGhpcy5pdGVtLCBwcmljZTogdGhpcy50b3RhbFByaWNlLCBjb2x1bW5JdGVtOiB0aGlzLmRhdGFHcmlkTGlzdCB9XHJcbiAgICAvLyAgICAgICB0aGlzLml0ZW1BcnJheS5wdXNoKGR1bW15QXJyYXkpXHJcbiAgICAvLyAgICAgICBpZiAodGhpcy5pdGVtQXJyYXkpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdpdGVtQXJyYXknLCB0aGlzLml0ZW1BcnJheSk7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICB0aGlzLnNlcnZpY2VUb3RhbFByaWNlID0gMDtcclxuICAgIC8vICAgICAgIHRoaXMuaXRlbUFycmF5LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgLy8gICAgICAgICB0aGlzLnNlcnZpY2VUb3RhbFByaWNlID0gdGhpcy5zZXJ2aWNlVG90YWxQcmljZSArIGl0ZW0ucHJpY2U7XHJcbiAgICAvLyAgICAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgnc2VydmljZVRvdGFsUHJpY2UnLCB0aGlzLnNlcnZpY2VUb3RhbFByaWNlKTtcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgdGhpcy5pZCA9IHRoaXMuaWQgKyAxXHJcbiAgICAvLyAgICAgICBsZXQgb2JqID0geyBzZXF1ZW5jZUlkOiB0aGlzLnNlcXVlbmNlSWQsIGRnTGlzdDogdGhpcy5wb3N0X0RhdGEuYW5zd2VyTGluZSB9O1xyXG4gICAgLy8gICAgICAgdGhpcy5maW5hbE9iamVjdExpc3QucHVzaChvYmopO1xyXG4gICAgLy8gICAgICAgdGhpcy5vblN1Ym1pdCgnc2VydmljZU9wdGlvbicpXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH1cclxuICAgIC8vIGVsc2Uge1xyXG4gICAgLy8gICB0aGlzLnNob3dxbnIgPSB0cnVlO1xyXG4gICAgLy8gICBjb25zb2xlLmxvZyhcInRoaXMuc2VxdWVuY2VJZFwiLCBxdWVzdGlvbilcclxuICAgIC8vICAgdGhpcy5zZXF1ZW5jZUlkID0gcXVlc3Rpb24uc2VxdW5jZUlkO1xyXG4gICAgLy8gICBjb25zdCByZW1vdmVpdGVtZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihRbnJEaWFsb2dDb21wb25lbnQsIHtcclxuICAgIC8vICAgICB3aWR0aDogJzUwJScsXHJcbiAgICAvLyAgICAgcGFuZWxDbGFzczogWydwb3B1cC1jbGFzcycsICdjb21tb25wb3B1cG1haW5jbGFzcycsICdjb25maXJtYXRpb25tYWluY2xhc3MnXSxcclxuICAgIC8vICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAvLyAgICAgZGF0YToge1xyXG4gICAgLy8gICAgICAgZGF0YTogcXVlc3Rpb24sXHJcbiAgICAvLyAgICAgICBxbnJfdHlwZTogJ3NlcnZpY2Vfb3B0aW9uJyxcclxuICAgIC8vICAgICAgIHZpZXc6ICdxbnJWaWV3JyxcclxuICAgIC8vICAgICAgIGlzRWRpdDogJ2FkZCcsXHJcbiAgICAvLyAgICAgICBzZXJ2RGV0YWlsczogdGhpcy5zZXJ2aWNlXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vICAgcmVtb3ZlaXRlbWRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgLy8gICAgIGlmIChyZXN1bHQpIHtcclxuICAgIC8vICAgICAgIHRoaXMuZGF0YUdyaWRMaXN0ID0gcmVzdWx0LmRhdGEuYW5zd2VyTGluZTtcclxuICAgIC8vICAgICAgIHRoaXMucG9zdF9EYXRhID0gcmVzdWx0LmRhdGE7XHJcbiAgICAvLyAgICAgICB0aGlzLnNob3dJdGVtID0gdHJ1ZTtcclxuICAgIC8vICAgICAgIHRoaXMuaXRlbSA9IHJlc3VsdC5kYXRhLmFuc3dlckxpbmVbMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW5bMF0uY29sdW1uLmxpc3RbMF07XHJcblxyXG4gICAgLy8gICAgICAgaWYgKHJlc3VsdC5kYXRhLnRvdGFsUHJpY2UpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy50b3RhbFByaWNlID0gcmVzdWx0LmRhdGEudG90YWxQcmljZVxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgbGV0IGR1bW15QXJyYXkgPSB7IGlkOiB0aGlzLmlkLCBzZXF1ZW5jZUlkOiB0aGlzLnNlcXVlbmNlSWQsIGl0ZW06IHRoaXMuaXRlbSwgcHJpY2U6IHRoaXMudG90YWxQcmljZSwgY29sdW1uSXRlbTogdGhpcy5kYXRhR3JpZExpc3QgfVxyXG4gICAgLy8gICAgICAgdGhpcy5pdGVtQXJyYXkucHVzaChkdW1teUFycmF5KVxyXG5cclxuICAgIC8vICAgICAgIGlmICh0aGlzLml0ZW1BcnJheSkge1xyXG4gICAgLy8gICAgICAgICB0aGlzLmxTdG9yYWdlU2VydmljZS5zZXRpdGVtb25Mb2NhbFN0b3JhZ2UoJ2l0ZW1BcnJheScsIHRoaXMuaXRlbUFycmF5KTtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIHRoaXMuc2VydmljZVRvdGFsUHJpY2UgPSAwO1xyXG4gICAgLy8gICAgICAgdGhpcy5pdGVtQXJyYXkuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgICAgIGxldCBxdWFudGl0eSA9IGl0ZW0uY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtblswXS5xdWFudGl0eTtcclxuICAgIC8vICAgICAgICAgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSA9ICh0aGlzLnNlcnZpY2VUb3RhbFByaWNlICsgaXRlbS5wcmljZSkgKiBxdWFudGl0eTtcclxuICAgIC8vICAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdzZXJ2aWNlVG90YWxQcmljZScsIHRoaXMuc2VydmljZVRvdGFsUHJpY2UpO1xyXG4gICAgLy8gICAgICAgfSk7XHJcbiAgICAvLyAgICAgICB0aGlzLmlkID0gdGhpcy5pZCArIDFcclxuICAgIC8vICAgICAgIGxldCBvYmogPSB7IHNlcXVlbmNlSWQ6IHRoaXMuc2VxdWVuY2VJZCwgZGdMaXN0OiB0aGlzLnBvc3RfRGF0YS5hbnN3ZXJMaW5lIH07XHJcbiAgICAvLyAgICAgICB0aGlzLmZpbmFsT2JqZWN0TGlzdC5wdXNoKG9iaik7XHJcbiAgICAvLyAgICAgICB0aGlzLm9uU3VibWl0KCdzZXJ2aWNlT3B0aW9uJylcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuICBpbmNyZW1lbnQoaXRlbTogYW55KSB7XHJcbiAgICAvLyBjb25zdCByZW1vdmVpdGVtZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihRbnJEaWFsb2dDb21wb25lbnQsIHtcclxuICAgIC8vICAgd2lkdGg6ICcxMDAlJyxcclxuICAgIC8vICAgcGFuZWxDbGFzczogWydwb3B1cC1jbGFzcycsICdjb21tb25wb3B1cG1haW5jbGFzcycsICdjb25maXJtYXRpb25tYWluY2xhc3MnXSxcclxuICAgIC8vICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgLy8gICBkYXRhOiB7XHJcbiAgICAvLyAgICAgaXRlbTogaXRlbSxcclxuICAgIC8vICAgICBkYXRhOiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LFxyXG4gICAgLy8gICAgIHZpZXc6ICdxbnJyZXBlYXRWaWV3JyxcclxuICAgIC8vICAgICBzZXJ2RGV0YWlsczogdGhpcy5zZXJ2aWNlXHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pO1xyXG4gICAgLy8gcmVtb3ZlaXRlbWRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgLy8gICBpZiAocmVzdWx0KSB7XHJcbiAgICAvLyAgICAgaWYgKHJlc3VsdCA9PT0gJ2FkZE5ldycpIHtcclxuICAgIC8vICAgICAgIHRoaXMucXVlc1N0b3JlID0gdGhpcy5sU3RvcmFnZVNlcnZpY2UuZ2V0aXRlbWZyb21Mb2NhbFN0b3JhZ2UoJ3F1ZXNTdG9yZScpO1xyXG4gICAgLy8gICAgICAgdGhpcy5xbnJQb3B1cCh0aGlzLnF1ZXNTdG9yZSwgdHJ1ZSlcclxuICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgaWYgKCF0aGlzLnNlcXVlbmNlSWQpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5zZXF1ZW5jZUlkID0gaXRlbS5zZXF1ZW5jZUlkXHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBsZXQgZHVtbXlBcnJheSA9IHsgaWQ6IHRoaXMuaWQsIHNlcXVlbmNlSWQ6IHRoaXMuc2VxdWVuY2VJZCwgaXRlbTogcmVzdWx0LnJlcGVhdEl0ZW0uaXRlbSwgcHJpY2U6IHJlc3VsdC5yZXBlYXRJdGVtLnByaWNlLCBjb2x1bW5JdGVtOiByZXN1bHQucmVwZWF0SXRlbS5jb2x1bW5JdGVtIH1cclxuICAgIC8vICAgICAgIGxldCBpdGVtcyA9IGR1bW15QXJyYXkuY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtbjtcclxuICAgIC8vICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgIC8vICAgICAgICAgaXRlbXNbaV0ucXVhbnRpdHkgPSBpdGVtc1tpXS5xdWFudGl0eSArIDE7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBpZiAodGhpcy5pdGVtQXJyYXkpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdpdGVtQXJyYXknLCB0aGlzLml0ZW1BcnJheSk7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBjb25zb2xlLmxvZyhcIlRoaXMuSXRlbUFycmF5XCIsIHRoaXMuaXRlbUFycmF5KVxyXG4gICAgLy8gICAgICAgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSA9IDA7XHJcbiAgICAvLyAgICAgICB0aGlzLml0ZW1BcnJheS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgIC8vICAgICAgICAgbGV0IHF1YW50aXR5ID0gaXRlbS5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0uZGF0YUdyaWRMaXN0Q29sdW1uWzBdLnF1YW50aXR5O1xyXG4gICAgLy8gICAgICAgICBjb25zb2xlLmxvZyhcInF1YW50aXR5XCIsIHF1YW50aXR5KVxyXG4gICAgLy8gICAgICAgICB0aGlzLnNlcnZpY2VUb3RhbFByaWNlICs9IGl0ZW0ucHJpY2UgKiBxdWFudGl0eTtcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgY29uc29sZS5sb2coXCJzZXJ2aWNlVG90YWxQcmljZVwiLCB0aGlzLnNlcnZpY2VUb3RhbFByaWNlKVxyXG4gICAgLy8gICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdzZXJ2aWNlVG90YWxQcmljZScsIHRoaXMuc2VydmljZVRvdGFsUHJpY2UpO1xyXG4gICAgLy8gICAgICAgdGhpcy5pZCA9IHRoaXMuaWQgKyAxXHJcbiAgICAvLyAgICAgICBsZXQgb2JqID0geyBzZXF1ZW5jZUlkOiB0aGlzLnNlcXVlbmNlSWQsIGRnTGlzdDogcmVzdWx0LnJlcGVhdEl0ZW0uY29sdW1uSXRlbSB9O1xyXG4gICAgLy8gICAgICAgdGhpcy5maW5hbE9iamVjdExpc3QucHVzaChvYmopO1xyXG4gICAgLy8gICAgICAgdGhpcy5vblN1Ym1pdCgnc2VydmljZU9wdGlvbicpXHJcbiAgICAvLyAgICAgfVxyXG5cclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG4gIGdldEl0ZW1RdWFudGl0eShpdGVtOiBhbnkpIHtcclxuICAgIGxldCBxdWFudGl0eSA9IGl0ZW0uY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtblswXS5xdWFudGl0eTtcclxuICAgIHJldHVybiBxdWFudGl0eVxyXG4gICAgLy8gY29uc29sZS5sb2coXCJpdGVtXCIsIGl0ZW0pXHJcbiAgfVxyXG4gIGRlY3JlbWVudChyZW1vdmluZ0l0ZW06IGFueSkge1xyXG4gICAgbGV0IGluZGV4ID0gdGhpcy5pdGVtQXJyYXkuZmluZEluZGV4KCh4OiBhbnkpID0+IHguaWQgPT09IHJlbW92aW5nSXRlbS5pZClcclxuICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5pdGVtQXJyYXlbaW5kZXhdXCIsIHRoaXMuaXRlbUFycmF5W2luZGV4XSlcclxuICAgICAgaWYgKHRoaXMuZ2V0SXRlbVF1YW50aXR5KHRoaXMuaXRlbUFycmF5W2luZGV4XSkgPT0gMSkge1xyXG4gICAgICAgIHRoaXMuaXRlbUFycmF5LnNwbGljZShpbmRleCwgMSk7IC8vIDJuZCBwYXJhbWV0ZXIgbWVhbnMgcmVtb3ZlIG9uZSBpdGVtIG9ubHlcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1BcnJheVtpbmRleF0uY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtbjtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpdGVtc1tpXS5xdWFudGl0eSA9IGl0ZW1zW2ldLnF1YW50aXR5IC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXRlbUFycmF5KSB7XHJcbiAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdpdGVtQXJyYXknLCB0aGlzLml0ZW1BcnJheSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUFycmF5LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VydmljZVRvdGFsUHJpY2UgPSB0aGlzLnNlcnZpY2VUb3RhbFByaWNlICsgaXRlbS5wcmljZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgnc2VydmljZVRvdGFsUHJpY2UnLCB0aGlzLnNlcnZpY2VUb3RhbFByaWNlKTtcclxuICAgICAgdGhpcy5maW5hbE9iamVjdExpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuICAgIHRoaXMub25TdWJtaXQoJ3NlcnZpY2VPcHRpb24nKVxyXG4gIH1cclxuICBkaXNhYmxlSW5wdXQoKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGNsYXNzPVwiY29ucy1pbmJveCBuby1wYWRkaW5nLXNtYWxsXCIgKm5nSWY9XCIhc2hvd3NlcnZpY2VcIj5cclxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGNvbnN1bWVyLWRhc2hob21lIHAtMFwiICpuZ0lmPVwiIXR5cGUgJiYgc291cmNlIT0ncHJvTGVhZCdcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIHRpdGxlLWdiIHJvdW5kZWQtMFwiICpuZ0lmPVwidXVpZFwiPlxyXG4gICAgICA8aDUgY2xhc3M9XCJtdC0yIGJvbGRcIj57e3F1ZXN0aW9ubmFpcmVfaGVhZGluZyB8IGNhcGl0YWxpemVGaXJzdH19IDxhIGNsYXNzPVwicHVsbC1sZWZ0IG1lLTQgYmFjay1idG5cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImdvQmFjaygpXCI+PGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1sZWZ0XCI+PC9pPjwvYT48L2g1PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGFwcC1jb21tb24taW5uZXJsb2FkaW5nLXNwaW5uZXIgKm5nSWY9XCJsb2FkaW5nXCI+PC9hcHAtY29tbW9uLWlubmVybG9hZGluZy1zcGlubmVyPlxyXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4tZmx1aWQgcHVsbC1yaWdodCBtZS0yIG1iLTRcIlxyXG4gICAgKm5nSWY9XCJ0eXBlICE9PSAncW5yTGlua1Byb3ZpZGVyJyAmJiAhYnV0dG9uRGlzYWJsZSAmJiB3YWl0bGlzdFN0YXR1c1wiPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cIm5vcm1hbC1idG4gZWRpdFwiIG1hdC1mbGF0LWJ1dHRvbiAoY2xpY2spPVwiZWRpdFFucigpXCI+RWRpdDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4tZmx1aWQgd2lkdGgtMTAwXCIgW2NsYXNzLnFuckRpc2FibGVTdGF0ZV09XCJkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICBbY2xhc3MucC0wXT1cInV1aWQgJiYgKHNvdXJjZSA9PT0gJ2NvbnNDaGVja2luJyB8fCBzb3VyY2UgPT09ICdjb25zQXBwdCcgfHwgc291cmNlID09PSAnY29uc09yZGVyJyB8fCBzb3VyY2UgPT09ICdwYXBlcicgfHwgc291cmNlID09PSAnY29uc0RvbmF0aW9uRGV0YWlscycgfHwgc291cmNlID09PSAnaXZyJylcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wteGwtMTIgZm9yY2VfY2VudGVyXCIgW2NsYXNzLnAtMF09XCJ1dWlkXCIgW2NsYXNzLm5vLXBhZGRpbmctc21hbGxdPVwic291cmNlICYmIHNvdXJjZT09J2l2cidcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJxbnJzZWNcIiAqbmdGb3I9XCJsZXQgcW5yIG9mIGdyb3VwZWRRbnIgfCBrZXl2YWx1ZTogYXNJc09yZGVyXCJcclxuICAgICAgICAgIFtjbGFzcy5zZWN0aW9uLXNoYWRvd109XCJnZXRTZWN0aW9uQ291bnQoKSA+IDFcIiBbY2xhc3Mubm8tcGFkZGluZy1zbWFsbF09XCJzb3VyY2UgJiYgc291cmNlPT0naXZyJ1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgY2FyZCBtZ24tMFwiICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBxbnIudmFsdWVcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLTEyIHF1ZXN0XCI+e3tnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWx9fVxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1cy1jaXJjbGUgcHVsbC1yaWdodFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWRkaWNvbl09XCIhYnV0dG9uRGlzYWJsZSAmJiAhZGlzYWJsZUlucHV0KClcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmllbGREYXRhVHlwZSA9PT0gJ2RhdGFHcmlkJyAmJiAhc2hvd0RhdGFHcmlkW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCIhYnV0dG9uRGlzYWJsZSAmJiAhZGlzYWJsZUlucHV0KCkgJiYgc2hvd0RhdGFHcmlkQWRkU2VjdGlvbihnZXRRdWVzdGlvbihxdWVzdGlvbiksIHRydWUpXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm8tb25seVwiICpuZ0lmPVwic2hvd1Byb3ZpZGVyVGV4dChnZXRRdWVzdGlvbihxdWVzdGlvbikpXCI+Rm9yIFByb3ZpZGVyczwvZGl2PlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVkXCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikubWFuZGF0b3J5XCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1sZXZlbC1zZXR0aW5nc1wiICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmhpbnRcIlxyXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuaGludCB8IHNhZmVIdG1sXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwhLS0gZm9yIGZpbGUgdXBsb2FkIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmllbGREYXRhVHlwZSA9PT0gJ2ZpbGVVcGxvYWQnXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgbXVsdGlwbGUgI2RlcHRzZWwgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmlsZVByb3BlcnRpZS5tYXhOb09mRmlsZSA+IDEgJiYgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpbGVQcm9wZXJ0aWUubWluTm9PZkZpbGUgIT09IGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWxlUHJvcGVydGllLm1heE5vT2ZGaWxlXCJcclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidXBsb2FkRmlsZXNUZW1wW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCIgY2xhc3M9XCJzZWxlY3QtYm94XCIgcGxhY2Vob2xkZXI9XCJTZWxlY3RcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBkb2N1bWVudCBvZiBnZXRRdWVzdGlvbihxdWVzdGlvbikuZmlsZVByb3BlcnRpZS5hbGxvd2VkRG9jdW1lbnRzXCJcclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImRvY3VtZW50XCIgKGNsaWNrKT1cImNoYW5nZUltYWdlU2VsZWN0ZWQoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBkb2N1bWVudClcIj5cclxuICAgICAgICAgICAgICAgICAge3tkb2N1bWVudH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIGNvbC0xMiBjb2wtbWQtMTIgY29sLXNtLTEyIHAtMCBtdC00XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0RG9jdW1lbnRzKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSkgJiYgZ2V0RG9jdW1lbnRzKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSkubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3B6b25lIGRyb3B6b25lLWRlZmF1bHQgZHJvcHpvbmUtcHJpbWFyeSBkei1jbGlja2FibGVcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3Muc2luZ2xlLWZpbGVdPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpbGVQcm9wZXJ0aWUuYWxsb3dlZERvY3VtZW50cy5sZW5ndGg9PTFcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogYXV0bztcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZG9jIG9mIGdldERvY3VtZW50cyhnZXRRdWVzdGlvbihxdWVzdGlvbikpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR6LXByZXZpZXcgZHotcHJvY2Vzc2luZyBkei1pbWFnZS1wcmV2aWV3IGR6LWVycm9yIGR6LWNvbXBsZXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0SW1nKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgZG9jKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvY25hbWVcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWxlUHJvcGVydGllLmFsbG93ZWREb2N1bWVudHMubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2RvY319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHppbWFnZSBwb2ludGVyLWN1cnNvclwiIChjbGljayk9XCJvcGVuQXR0YWNobWVudEdhbGxlcnkoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBkb2MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgYWx0PVwiXCIgY2xhc3M9XCJpbWdfZml0XCIgW3NyY109XCJnZXRJbWcoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBkb2MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiIChibHVyKT1cIm9uU3VibWl0KCdpbnB1dENoYW5nZScpO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29tbWVudHNbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZSArICc9JyArIGRvY11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnYWxfYWN0aW9uXCIgKm5nSWY9XCIhYnV0dG9uRGlzYWJsZSAmJiAhZGlzYWJsZUlucHV0KCkgJiYgbW9kZSE9PSdyZWFkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VJbWFnZVNlbGVjdGVkKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgZG9jKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkei1wcmV2aWV3IGR6LXByb2Nlc3NpbmcgZHotaW1hZ2UtcHJldmlldyBkei1lcnJvciBkei1jb21wbGV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9nb2ZpbGUxLmNsaWNrKClcIiAqbmdJZj1cIiFnZXRJbWcoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBkb2MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jbmFtZVwiICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpbGVQcm9wZXJ0aWUuYWxsb3dlZERvY3VtZW50cy5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ZG9jfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkei1pbWFnZSBwb2ludGVyLWN1cnNvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgI2xvZ29maWxlMSB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cIi8qO2NhcHR1cmU9Y2FtZXJhXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImZpbGVzU2VsZWN0ZWQoJGV2ZW50LCBnZXRRdWVzdGlvbihxdWVzdGlvbiksIGRvYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkei1lcnJvci1tYXJrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1pY29uIGJ0bi1saWdodC1zdWNjZXNzIGJ0bi1jaXJjbGUgbXItMlwiPjxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFyay01MCBmbGF0aWNvbi11cGxvYWRcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1kYW5nZXJcIiAqbmdJZj1cImFwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XHJcbiAgICAgICAgICAgICAgICB7e2FwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gZm9yIGNoZWNrYm94IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnbGlzdCcgJiYgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxpc3RQcm9wZXJ0aWUubWF4QW5zd2VycyA+IDFcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3gtbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2hlY2tib3hcIiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsVmFsdWVzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJpc0NoZWNrZWQodmFsdWUsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwibGlzdENoYW5nZSgkZXZlbnQsIHZhbHVlLCBnZXRRdWVzdGlvbihxdWVzdGlvbikpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7dmFsdWV9fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB0ZXh0LWRhbmdlclwiICpuZ0lmPVwiYXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgIHt7YXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV19fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBmb3IgcmFkaW8gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpZWxkRGF0YVR5cGUgPT09ICdsaXN0JyAmJiBnZXRRdWVzdGlvbihxdWVzdGlvbikubGlzdFByb3BlcnRpZS5tYXhBbnN3ZXJzID09PSAxXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhZGlvLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInJhZGlvXCIgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbFZhbHVlc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQ2hlY2tlZCh2YWx1ZSwgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJsaXN0Q2hhbmdlKCRldmVudCwgdmFsdWUsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7e3ZhbHVlfX1cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1kYW5nZXJcIiAqbmdJZj1cImFwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XHJcbiAgICAgICAgICAgICAgICB7e2FwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gZm9yIHRvZ2dlbCBib29sZWFuIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmllbGREYXRhVHlwZSA9PT0gJ2Jvb2wnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhZGlvLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInJhZGlvXCIgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbFZhbHVlc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQm9vbGVhbkNoZWNrZWQodmFsdWUsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiYm9vbGVhbkNoYW5nZSgkZXZlbnQsIHZhbHVlLCBnZXRRdWVzdGlvbihxdWVzdGlvbikpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3t2YWx1ZX19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHRleHQtZGFuZ2VyXCIgKm5nSWY9XCJhcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAge3thcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXX19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIGZvciBUZXh0IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmllbGREYXRhVHlwZSA9PT0gJ3BsYWluVGV4dCdcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikucGxhaW5UZXh0UHJvcGVydGllLm1heE5vT2ZMZXR0ZXI8PTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYW5zd2Vyc1tnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiIChpbnB1dCk9XCJvblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcIiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICBbbWlubGVuZ3RoXT1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5wbGFpblRleHRQcm9wZXJ0aWUubWluTm9PZkxldHRlclwiXHJcbiAgICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLnBsYWluVGV4dFByb3BlcnRpZS5tYXhOb09mTGV0dGVyXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wxIGZvcm0tY29udHJvbC1zb2xpZFwiIHR5cGU9XCJ0ZXh0XCIgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIj5cclxuICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSByb3dzPVwiM1wiICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLnBsYWluVGV4dFByb3BlcnRpZS5tYXhOb09mTGV0dGVyPjEwMFwiXHJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYW5zd2Vyc1tnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiIChpbnB1dCk9XCJvblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcIlxyXG4gICAgICAgICAgICAgICAgICBbbWlubGVuZ3RoXT1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5wbGFpblRleHRQcm9wZXJ0aWUubWluTm9PZkxldHRlclwiXHJcbiAgICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLnBsYWluVGV4dFByb3BlcnRpZS5tYXhOb09mTGV0dGVyXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbDIgZm9ybS1jb250cm9sLXNvbGlkXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB0ZXh0LWRhbmdlclwiICpuZ0lmPVwiYXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgIHt7YXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV19fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBmb3IgTnVtYmVyIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmllbGREYXRhVHlwZSA9PT0gJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJhbnN3ZXJzW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCIgKGlucHV0KT1cIm9uU3VibWl0KCdpbnB1dENoYW5nZScpO1wiXHJcbiAgICAgICAgICAgICAgICBbbWluXT1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5udW1iZXJQcm9wZXJ0aWUuc3RhcnRcIiBbbWF4XT1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5udW1iZXJQcm9wZXJ0aWUuZW5kXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wxIGZvcm0tY29udHJvbC1zb2xpZFwiIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cImlzTnVtZXJpYygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1kYW5nZXJcIiAqbmdJZj1cImFwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XHJcbiAgICAgICAgICAgICAgICB7e2FwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gZm9yIERhdGUgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZGlzcC1mbGV4XCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmllbGREYXRhVHlwZSA9PT0gJ2RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sMVwiIFttYXREYXRlcGlja2VyXT1cInBpY2tlclwiIFttYXhdPVwiZ2V0TWF4ZGF0ZShxdWVzdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgW21pbl09XCJnZXRNaW5kYXRlKHF1ZXN0aW9uKVwiIFsobmdNb2RlbCldPVwiYW5zd2Vyc1tnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiXHJcbiAgICAgICAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJvblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKVwiIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwaWNrZXIub3BlbigpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlciBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1kYW5nZXJcIiAqbmdJZj1cImFwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XHJcbiAgICAgICAgICAgICAgICB7e2FwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gZm9yIERhdGFncmlkIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZTFcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpZWxkRGF0YVR5cGUgPT09ICdkYXRhR3JpZCcgJiYgZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXSAmJiBkYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1oZWFkLWN1c3RvbSB0YWJsZS1oZWFkLWJnIHRhYmxlLWJvcmRlcmxlc3MgdGFibGUtdmVydGljYWwtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5kYXRhR3JpZFByb3BlcnRpZXMuZGF0YUdyaWRDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tjb2x1bW4uY29sdW1uSWR9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cIiFidXR0b25EaXNhYmxlICYmICFkaXNhYmxlSW5wdXQoKSAmJiAhc2hvd0RhdGFHcmlkW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cIiFidXR0b25EaXNhYmxlICYmICFkaXNhYmxlSW5wdXQoKSAmJiAhc2hvd0RhdGFHcmlkW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBkYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdO2xldCBpID1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgZGF0YSBvZiBjb2x1bW4gfCBrZXl2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldENvbHVtblR5cGUoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmRhdGFHcmlkUHJvcGVydGllcy5kYXRhR3JpZENvbHVtbnMsIGRhdGEua2V5KSA9PT0gJ2RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGF0YS52YWx1ZSB8IGRhdGUgOiBuZXdUaW1lRGF0ZUZvcm1hdH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRDb2x1bW5UeXBlKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5kYXRhR3JpZFByb3BlcnRpZXMuZGF0YUdyaWRDb2x1bW5zLCBkYXRhLmtleSkgPT09ICdib29sJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2dldEJvb2xWYWx1ZShkYXRhLnZhbHVlKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRDb2x1bW5UeXBlKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5kYXRhR3JpZFByb3BlcnRpZXMuZGF0YUdyaWRDb2x1bW5zLCBkYXRhLmtleSkgIT09ICdkYXRlJyAmJiBnZXRDb2x1bW5UeXBlKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5kYXRhR3JpZFByb3BlcnRpZXMuZGF0YUdyaWRDb2x1bW5zLCBkYXRhLmtleSkgIT09ICdib29sJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGEudmFsdWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCIhYnV0dG9uRGlzYWJsZSAmJiAhZGlzYWJsZUlucHV0KCkgJiYgIXNob3dEYXRhR3JpZFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wZW5cIiAoY2xpY2spPVwiZWRpdERhdGFHcmlkKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgY29sdW1uKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIiFidXR0b25EaXNhYmxlICYmICFkaXNhYmxlSW5wdXQoKSAmJiAhc2hvd0RhdGFHcmlkW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoXCIgKGNsaWNrKT1cImRlbGV0ZURhdGFHcmlkKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgY29sdW1uKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRTZWN0aW9uXCIgKm5nSWY9XCJzaG93RGF0YUdyaWRbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZENvbHVtblwiICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmRhdGFHcmlkUHJvcGVydGllcy5kYXRhR3JpZENvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD57e2NvbHVtbi5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVkXCIgKm5nSWY9XCJjb2x1bW4ubWFuZGF0b3J5XCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8IS0tIGZvciBjaGVja2JveCAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ2xpc3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2hlY2tib3hcIiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgY29sdW1uLmxpc3RQcm9wZXJ0aWUudmFsdWVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiaXNDaGVja2VkKHZhbHVlLCBnZXRRdWVzdGlvbihxdWVzdGlvbiksIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImxpc3RDaGFuZ2UoJGV2ZW50LCB2YWx1ZSwgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7dmFsdWV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIGZvciB0b2dnZWwgYm9vbGVhbiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ2Jvb2wnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYWRpby1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicmFkaW9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQm9vbGVhbkNoZWNrZWQoJ3llcycsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiYm9vbGVhbkNoYW5nZSgkZXZlbnQsICd5ZXMnLCBnZXRRdWVzdGlvbihxdWVzdGlvbiksIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIFllc1xyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicmFkaW9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQm9vbGVhbkNoZWNrZWQoJ25vJywgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJib29sZWFuQ2hhbmdlKCRldmVudCwgJ25vJywgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICBOb1xyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIGZvciBUZXh0IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAncGxhaW5UZXh0J1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJkYXRhR3JpZENvbHVtbnNbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wxIGZvcm0tY29udHJvbC1zb2xpZFwiIHR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gZm9yIE51bWJlciAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiZGF0YUdyaWRDb2x1bW5zW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiIFttaW5dPVwiY29sdW1uLm51bWJlclByb3BlcnRpZS5zdGFydFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21heF09XCJjb2x1bW4ubnVtYmVyUHJvcGVydGllLmVuZFwiIGNsYXNzPVwiZm9ybS1jb250cm9sMSBmb3JtLWNvbnRyb2wtc29saWRcIiB0eXBlPVwibnVtYmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gZm9yIERhdGUgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGRpc3AtZmxleFwiICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sMVwiIFttYXREYXRlcGlja2VyXT1cInBpY2tlclwiIFttYXhdPVwiZ2V0TWF4ZGF0ZShxdWVzdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgIFttaW5dPVwiZ2V0TWluZGF0ZShxdWVzdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGF0YUdyaWRDb2x1bW5zW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiIChjbGljayk9XCJwaWNrZXIub3BlbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0LWJ0bnNcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodC1wcmltYXJ5IGZvbnQtd2VpZ2h0LWJvbGRcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsQWRkb3JVcGRhdGUoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKVwiPlxyXG4gICAgICAgICAgICAgICAgICBDYW5jZWxcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgZm9udC13ZWlnaHQtYm9sZFwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlRGF0YUdyaWRDb2x1bW4oZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKVwiPkFkZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBjb2wtMTIgY29sLXNtLTEyIGNvbC1sZy0xMiBwLTAgc3VibWl0LXBhZFwiXHJcbiAgICAgICAgKm5nSWY9XCJ0eXBlICE9PSAncW5yTGlua1Byb3ZpZGVyJyAmJiBzb3VyY2UhPT0ncHJvTGVhZCcgJiYgKHV1aWQgfHwgc291cmNlID09PSAnY3VzdG9tZXItZGV0YWlscycgfHwgc291cmNlID09PSAncHJvRG9uYXRpb24nKSAmJiAhZGlzYWJsZUlucHV0KClcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibm9ybWFsLWJ0blwiIG1hdC1mbGF0LWJ1dHRvbiBbY2xhc3Muc3Bpbm5lcl09XCJidXR0b25EaXNhYmxlXCJcclxuICAgICAgICAgIFtjbGFzcy5zcGlubmVyLWRhcmtlci1zdWNjZXNzXT1cImJ1dHRvbkRpc2FibGVcIiBbY2xhc3Muc3Bpbm5lci1jZW50ZXJdPVwiYnV0dG9uRGlzYWJsZVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiIWJ1dHRvbkRpc2FibGUgJiYgb25TdWJtaXQoJ3N1Ym1pdCcpXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGVcIlxyXG4gICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImJ1dHRvbkRpc2FibGVcIj57eyh0eXBlID09ICdxbnItbGluaycpID8gJ1N1Ym1pdCcgOiAnVXBkYXRlJ319PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuPGtzLW1vZGFsLWdhbGxlcnkgW2lkXT1cIjBcIiAqbmdJZj1cImltYWdlX2xpc3RfcG9wdXAgJiYgaW1hZ2VfbGlzdF9wb3B1cC5sZW5ndGg+MFwiIFttb2RhbEltYWdlc109XCJpbWFnZV9saXN0X3BvcHVwXCJcclxuICBbcGxhaW5HYWxsZXJ5Q29uZmlnXT1cImN1c3RvbVBsYWluR2FsbGVyeVJvd0NvbmZpZ1wiIFtidXR0b25zQ29uZmlnXT1cImN1c3RvbUJ1dHRvbnNGb250QXdlc29tZUNvbmZpZ1wiXHJcbiAgKGJ1dHRvbkJlZm9yZUhvb2spPVwib25CdXR0b25CZWZvcmVIb29rKCRldmVudClcIj48L2tzLW1vZGFsLWdhbGxlcnk+XHJcbjxzZWN0aW9uIGNsYXNzPVwiY29ucy1pbmJveCBuby1wYWRkaW5nLXNtYWxsXCIgKm5nSWY9XCJzaG93c2VydmljZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXIgY29uc3VtZXItZGFzaGhvbWVcIiAqbmdJZj1cIiF0eXBlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZCB0aXRsZS1nYiByb3VuZGVkLTBcIiAqbmdJZj1cInV1aWRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibXQtMiBib2xkXCI+e3txdWVzdGlvbm5haXJlX2hlYWRpbmcgfCBjYXBpdGFsaXplRmlyc3R9fSA8YSBjbGFzcz1cInB1bGwtbGVmdCBtZS00IGJhY2stYnRuXCJcclxuICAgICAgICAgIChjbGljayk9XCJnb0JhY2soKVwiPjxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctbGVmdFwiPjwvaT48L2E+PC9oNT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxhcHAtY29tbW9uLWlubmVybG9hZGluZy1zcGlubmVyICpuZ0lmPVwibG9hZGluZ1wiPjwvYXBwLWNvbW1vbi1pbm5lcmxvYWRpbmctc3Bpbm5lcj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uLWZsdWlkIHB1bGwtcmlnaHQgbWUtMiBtYi00XCJcclxuICAgICpuZ0lmPVwidHlwZSAhPT0gJ3FuckxpbmtQcm92aWRlcicgJiYgIWJ1dHRvbkRpc2FibGUgJiYgd2FpdGxpc3RTdGF0dXNcIj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJub3JtYWwtYnRuIGVkaXRcIiBtYXQtZmxhdC1idXR0b24gKGNsaWNrKT1cImVkaXRRbnIoKVwiPkVkaXQ8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uLWZsdWlkIHdpZHRoLTEwMFwiIFtjbGFzcy5xbnJEaXNhYmxlU3RhdGVdPVwiZGlzYWJsZUlucHV0KClcIlxyXG4gICAgW2NsYXNzLnAtMF09XCJ1dWlkICYmIChzb3VyY2UgPT09ICdjb25zQ2hlY2tpbicgfHwgc291cmNlID09PSAnY29uc0FwcHQnIHx8IHNvdXJjZSA9PT0gJ2NvbnNEb25hdGlvbkRldGFpbHMnIClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wteGwtMTIgZm9yY2VfY2VudGVyIHAtMFwiIFtjbGFzcy5wLTBdPVwidXVpZFwiXHJcbiAgICAgIFtjbGFzcy5uby1wYWRkaW5nLXNtYWxsXT1cInNvdXJjZSAmJiBzb3VyY2U9PSdpdnInXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nRm9yPVwibGV0IHFuciBvZiBncm91cGVkUW5yIHwga2V5dmFsdWVcIiBbY2xhc3Muc2VjdGlvbi1zaGFkb3ddPVwiZ2V0U2VjdGlvbkNvdW50KCkgPiAxXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbUFycmF5Lmxlbmd0aCA9PSAwIFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtZ24tMCBib3JkZXItZGFzaGVkIHRleHQtY2VudGVyXCIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIHFuci52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJxbnItc2VjdGlvblwiICpuZ0lmPVwiZ2V0U2VjdGlvbkNvdW50KCkgPiAxXCI+XHJcbiAgICAgICAgICAgICAgICB7e2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5xdWVzdGlvbi5zZWN0aW9uTmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLTEyIHF1ZXN0IHBvaW50ZXItY3Vyc29yXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RGF0YUdyaWRBZGRTZWN0aW9ubihnZXRRdWVzdGlvbihxdWVzdGlvbikucXVlc3Rpb24sIHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cInt7Y2RuUGF0aH19YXNzZXRzL2ltYWdlcy9zZXJ2aWNlLW9wdGlvbnMuc3ZnXCIgYWx0PVwiU2VydmljZSBPcHRpb25zXCIgY2xhc3M9XCJpbWctZmx1aWQgcGItMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIzMDBcIiBoZWlnaHQ9XCIzMDBcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByby1vbmx5XCIgKm5nSWY9XCJzaG93UHJvdmlkZXJUZXh0KGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5xdWVzdGlvbilcIj5Gb3IgUHJvdmlkZXJzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlZFwiICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLnF1ZXN0aW9uLm1hbmRhdG9yeVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcHJpbWFyeSBmb250LXdlaWdodC1ib2xkXCI+UGxlYXNlIENob29zZSB5b3VyIFBldDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGZvbnQtd2VpZ2h0LWJvbGRcIj5Db250aW51ZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBjb2wtMTIgY29sLXNtLTEyIG1iLTQgcC0wXCIgKm5nSWY9XCJzaG93SXRlbVwiPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9yZGVyXCIgKm5nRm9yPVwiIGxldCBpdGVtcyBvZiBpdGVtQXJyYXlcIj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2FwaXRhbGl6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbXMuaXRlbX19PGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBib3JkZXItYXBwbHkgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkZWNyZW1lbnQoaXRlbXMpO1wiIGNsYXNzPVwicG9pbnRlci1jdXJzb3IgcXVhbnRpdHkgcXVhbnRpdHktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC0xMFwiPi08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiBwb2ludGVyLWN1cnNvclwiPjxzcGFuIGNsYXNzPVwicXVhbnRpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtcyAmJiBpdGVtcy5jb2x1bW5JdGVtICYmIGl0ZW1zLmNvbHVtbkl0ZW1bMF0gJiYgaXRlbXMuY29sdW1uSXRlbVswXS5hbnN3ZXIgJiYgaXRlbXMuY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0ICYmIGl0ZW1zLmNvbHVtbkl0ZW1bMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXSAmJiBpdGVtcy5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0uZGF0YUdyaWRMaXN0Q29sdW1uICYmIGl0ZW1zLmNvbHVtbkl0ZW1bMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW5bMF0gJiYgaXRlbXMuY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtblswXS5xdWFudGl0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3tpdGVtcy5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0uZGF0YUdyaWRMaXN0Q29sdW1uWzBdLnF1YW50aXR5fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJpbmNyZW1lbnQoaXRlbXMpO1wiIGNsYXNzPVwicG9pbnRlci1jdXJzb3IgcXVhbnRpdHkgcXVhbnRpdHktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC0xMFwiPis8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1wcmltYXJ5XCI+PHNwYW4+PGkgY2xhc3M9XCJmYSBmYS1pbnJcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAge3tpdGVtcy5wcmljZSAqIGdldEl0ZW1RdWFudGl0eShpdGVtcyl9fS8tXHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0l0ZW0gJiZpdGVtQXJyYXkubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHFuciBvZiBncm91cGVkUW5yIHwga2V5dmFsdWVcIiBbY2xhc3Muc2VjdGlvbi1zaGFkb3ddPVwiZ2V0U2VjdGlvbkNvdW50KCkgPiAxXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBxbnIudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLTEyIHF1ZXN0IHBvaW50ZXItY3Vyc29yXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0RhdGFHcmlkQWRkU2VjdGlvbm4oZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLnF1ZXN0aW9uLCB0cnVlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBmb250LXdlaWdodC1ib2xkXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzIHRleHQtd2hpdGVcIj48L2k+QWRkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj4iXX0=