@rangertechnologies/ngnxt 2.1.48 → 2.1.50

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.
@@ -1,6 +1,9 @@
1
- import { Component, Input, Output, EventEmitter, Inject } from '@angular/core';
1
+ import { Component, Input, Output, EventEmitter, Inject, ViewChild } from '@angular/core';
2
2
  import { ErrorWrapper } from '../../model/errorWrapper';
3
3
  import { DOCUMENT } from '@angular/common';
4
+ import { BehaviorSubject } from 'rxjs';
5
+ import { ComponenthostDirective } from '../../directives/componenthost/componenthost.directive';
6
+ import { CustomCalendarComponent } from '../../components/custom-calendar/custom-calendar.component';
4
7
  import * as i0 from "@angular/core";
5
8
  import * as i1 from "../../services/salesforce.service";
6
9
  import * as i2 from "../../services/data.service";
@@ -9,13 +12,13 @@ import * as i4 from "../../services/storage.service";
9
12
  import * as i5 from "../../i18n.service";
10
13
  import * as i6 from "@angular/common";
11
14
  import * as i7 from "@angular/forms";
12
- import * as i8 from "@angular/material/tooltip";
13
- import * as i9 from "@angular/cdk/bidi";
14
- import * as i10 from "../../components/pick-location/pick-location.component";
15
- import * as i11 from "../../components/custom-input/custom-input.component";
16
- import * as i12 from "../../components/custom-text-area/custom-text-area.component";
17
- import * as i13 from "../../components/custom-table/custom-table.component";
18
- import * as i14 from "../../components/custom-calendar/custom-calendar.component";
15
+ import * as i8 from "../../directives/componenthost/componenthost.directive";
16
+ import * as i9 from "@angular/material/tooltip";
17
+ import * as i10 from "@angular/cdk/bidi";
18
+ import * as i11 from "../../components/pick-location/pick-location.component";
19
+ import * as i12 from "../../components/custom-input/custom-input.component";
20
+ import * as i13 from "../../components/custom-text-area/custom-text-area.component";
21
+ import * as i14 from "../../components/custom-table/custom-table.component";
19
22
  import * as i15 from "../../components/custom-date-picker/custom-date-picker.component";
20
23
  import * as i16 from "../../components/custom-dropdown/custom-dropdown.component";
21
24
  import * as i17 from "../../components/search-box/search-box.component";
@@ -35,6 +38,7 @@ export class QuestionbookComponent {
35
38
  changeService;
36
39
  storageService;
37
40
  i18nService;
41
+ cdr;
38
42
  document;
39
43
  qbItem;
40
44
  questionItem;
@@ -46,8 +50,10 @@ export class QuestionbookComponent {
46
50
  handleDropDown = new EventEmitter();
47
51
  handleQuestion = new EventEmitter(); // VD 19Jul01 - get updated question
48
52
  dropDownData;
53
+ dynamicHost;
49
54
  subQuestions;
50
55
  selectedFileData = [];
56
+ loadComponent$ = new BehaviorSubject(false);
51
57
  // HA 28DEC23 Added styling and logics to load the book type questions
52
58
  qbRef;
53
59
  // HA 19DEC23 Declaration for Salesforce Styling
@@ -56,13 +62,16 @@ export class QuestionbookComponent {
56
62
  bookStyle;
57
63
  subscription;
58
64
  hadleDropDownDependent = new EventEmitter();
65
+ // VD 06Sep24 calendar changes
66
+ handleCalendarDate = new EventEmitter();
59
67
  bookQuestionsMap = new Map();
60
- constructor(sfService, dataService, changeService, storageService, i18nService, document) {
68
+ constructor(sfService, dataService, changeService, storageService, i18nService, cdr, document) {
61
69
  this.sfService = sfService;
62
70
  this.dataService = dataService;
63
71
  this.changeService = changeService;
64
72
  this.storageService = storageService;
65
73
  this.i18nService = i18nService;
74
+ this.cdr = cdr;
66
75
  this.document = document;
67
76
  }
68
77
  ngOnInit() {
@@ -116,41 +125,41 @@ export class QuestionbookComponent {
116
125
  qb['questionbook'].Style__c = this.qbItem.Style__c;
117
126
  }
118
127
  // Book type question styling
119
- qb['questionbook'].Style__c.labelClass = qb['questionbook'].Style__c.labelClass ? qb['questionbook'].Style__c.labelClass : "";
120
- qb['questionbook'].Style__c.labelStyle = qb['questionbook'].Style__c.labelStyle ? qb['questionbook'].Style__c.labelStyle : "";
121
- qb['questionbook'].Style__c.labelValueStyle = qb['questionbook'].Style__c.labelValueStyle ? qb['questionbook'].Style__c.labelValueStyle : "";
122
- qb['questionbook'].Style__c.inputClass = qb['questionbook'].Style__c.inputClass ? qb['questionbook'].Style__c.inputClass : "";
123
- qb['questionbook'].Style__c.inputStyle = qb['questionbook'].Style__c.inputStyle ? qb['questionbook'].Style__c.inputStyle : "";
124
- qb['questionbook'].Style__c.bookStyle = qb['questionbook'].Style__c.bookStyle ? qb['questionbook'].Style__c.bookStyle : "";
125
- qb['questionbook'].Style__c.showLabel = qb['questionbook'].Style__c.showLabel ? qb['questionbook'].Style__c.showLabel : true;
126
- qb['questionbook'].Style__c.questionStyle = qb['questionbook'].Style__c.questionStyle ? qb['questionbook'].Style__c.questionStyle : "";
127
- qb['langDirection'] = qb['questionbook'].Style__c.direction ? qb['questionbook'].Style__c.direction : this.langDirection;
128
+ qb['questionbook'].Style__c.labelClass = qb['questionbook'].Style__c?.labelClass ? qb['questionbook'].Style__c?.labelClass : "";
129
+ qb['questionbook'].Style__c.labelStyle = qb['questionbook'].Style__c?.labelStyle ? qb['questionbook'].Style__c?.labelStyle : "";
130
+ qb['questionbook'].Style__c.labelValueStyle = qb['questionbook'].Style__?.labelValueStyle ? qb['questionbook'].Style__c.labelValueStyle : "";
131
+ qb['questionbook'].Style__c.inputClass = qb['questionbook'].Style__c?.inputClass ? qb['questionbook'].Style__c?.inputClass : "";
132
+ qb['questionbook'].Style__c.inputStyle = qb['questionbook'].Style__c?.inputStyle ? qb['questionbook'].Style__c?.inputStyle : "";
133
+ qb['questionbook'].Style__c.bookStyle = qb['questionbook'].Style__c?.bookStyle ? qb['questionbook'].Style__c?.bookStyle : "";
134
+ qb['questionbook'].Style__c.showLabel = qb['questionbook'].Style__c?.showLabel ? qb['questionbook'].Style__c?.showLabel : true;
135
+ qb['questionbook'].Style__c.questionStyle = qb['questionbook'].Style__c?.questionStyle ? qb['questionbook'].Style__c?.questionStyle : "";
136
+ qb['langDirection'] = qb['questionbook'].Style__c.direction ? qb['questionbook'].Style__c?.direction : this.langDirection;
128
137
  // Loop for each question in the book
129
138
  qb['questionbook'].Questions__r.records.forEach(questionFromBook => {
130
139
  questionFromBook.Style__c = questionFromBook.Style__c ? questionFromBook.Style__c : qb['questionbook'].Style__c;
131
- questionFromBook.Style__c.labelClass = questionFromBook.Style__c.labelClass ? questionFromBook.Style__c.labelClass : "";
132
- questionFromBook.Style__c.labelStyle = questionFromBook.Style__c.labelStyle ? questionFromBook.Style__c.labelStyle : "";
133
- questionFromBook.Style__c.labelValueStyle = questionFromBook.Style__c.labelValueStyle ? questionFromBook.Style__c.labelValueStyle : "";
134
- questionFromBook.Style__c.inputClass = questionFromBook.Style__c.inputClass ? questionFromBook.Style__c.inputClass : "";
135
- questionFromBook.Style__c.inputStyle = questionFromBook.Style__c.inputStyle ? questionFromBook.Style__c.inputStyle : "";
136
- questionFromBook.Style__c.bookStyle = questionFromBook.Style__c.bookStyle ? questionFromBook.Style__c.bookStyle : "";
137
- questionFromBook.Style__c.showLabel = questionFromBook.Style__c.showLabel ? questionFromBook.Style__c.showLabel : true;
138
- questionFromBook.Style__c.questionStyle = questionFromBook.Style__c.questionStyle ? questionFromBook.Style__c.questionStyle : "";
139
- questionFromBook['langDirection'] = questionFromBook.Style__c.direction ? questionFromBook.Style__c.direction : this.langDirection;
140
+ questionFromBook.Style__c.labelClass = questionFromBook.Style__c?.labelClass ? questionFromBook.Style__c?.labelClass : "";
141
+ questionFromBook.Style__c.labelStyle = questionFromBook.Style__c?.labelStyle ? questionFromBook.Style__c?.labelStyle : "";
142
+ questionFromBook.Style__c.labelValueStyle = questionFromBook.Style__c?.labelValueStyle ? questionFromBook.Style__c?.labelValueStyle : "";
143
+ questionFromBook.Style__c.inputClass = questionFromBook.Style__c?.inputClass ? questionFromBook.Style__c?.inputClass : "";
144
+ questionFromBook.Style__c.inputStyle = questionFromBook.Style__c?.inputStyle ? questionFromBook.Style__c?.inputStyle : "";
145
+ questionFromBook.Style__c.bookStyle = questionFromBook.Style__c?.bookStyle ? questionFromBook.Style__c?.bookStyle : "";
146
+ questionFromBook.Style__c.showLabel = questionFromBook.Style__c?.showLabel ? questionFromBook.Style__c?.showLabel : true;
147
+ questionFromBook.Style__c.questionStyle = questionFromBook.Style__c?.questionStyle ? questionFromBook.Style__c?.questionStyle : "";
148
+ questionFromBook['langDirection'] = questionFromBook.Style__c?.direction ? questionFromBook.Style__c?.direction : this.langDirection;
140
149
  });
141
150
  element['qbItem'] = qb['questionbook'];
142
151
  }
143
152
  }
144
153
  element.Style__c = element.Style__c ? typeof element.Style__c === 'string' ? JSON.parse('' + element?.Style__c) : element?.Style__c : this.qbItem?.Style__c;
145
- element.Style__c.labelClass = element.Style__c.labelClass ? element.Style__c.labelClass : "";
146
- element.Style__c.labelStyle = element.Style__c.labelStyle ? element.Style__c.labelStyle : "";
147
- element.Style__c.labelValueStyle = element.Style__c.labelValueStyle ? element.Style__c.labelValueStyle : "";
148
- element.Style__c.inputClass = element.Style__c.inputClass ? element.Style__c.inputClass : "";
149
- element.Style__c.inputStyle = element.Style__c.inputStyle ? element.Style__c.inputStyle : "";
150
- element.Style__c.bookStyle = element.Style__c.bookStyle ? element.Style__c.bookStyle : "";
151
- element.Style__c.showLabel = element.Style__c.showLabel ? true : false;
152
- element.Style__c.questionStyle = element.Style__c.questionStyle ? element.Style__c.questionStyle : "";
153
- element['langDirection'] = element.Style__c.direction ? element.Style__c.direction : this.langDirection;
154
+ element.Style__c.labelClass = element.Style__c?.labelClass ? element.Style__c?.labelClass : "";
155
+ element.Style__c.labelStyle = element.Style__c?.labelStyle ? element.Style__c?.labelStyle : "";
156
+ element.Style__c.labelValueStyle = element.Style__c?.labelValueStyle ? element.Style__c.labelValueStyle : "";
157
+ element.Style__c.inputClass = element.Style__c?.inputClass ? element.Style__c?.inputClass : "";
158
+ element.Style__c.inputStyle = element.Style__c.inputStyle ? element.Style__c?.inputStyle : "";
159
+ element.Style__c.bookStyle = element.Style__c?.bookStyle ? element.Style__c?.bookStyle : "";
160
+ element.Style__c.showLabel = element.Style__c?.showLabel ? element.Style__c?.showLabel : true;
161
+ element.Style__c.questionStyle = element.Style__c?.questionStyle ? element.Style__c?.questionStyle : "";
162
+ element['langDirection'] = element.Style__c?.direction ? element.Style__c?.direction : this.langDirection;
154
163
  //VD 02Aug24 dependent field show/hide changes
155
164
  if (element.Reference_Field__c) {
156
165
  element.dependentRef = element.Reference_Field__c;
@@ -191,6 +200,10 @@ export class QuestionbookComponent {
191
200
  });
192
201
  this.storageService.update(element);
193
202
  }
203
+ // VD 06-09-24 to call the calendar component
204
+ if (element.Type__c === 'Calendar') {
205
+ this.openCalendarComponent(element);
206
+ }
194
207
  });
195
208
  this.subQuestions = [];
196
209
  this.setSubQuestions(this.questions);
@@ -246,55 +259,51 @@ export class QuestionbookComponent {
246
259
  // console.log('inside QuestionbookComponent childEventCapture');
247
260
  console.log(event);
248
261
  this.changeService.announceChange(event);
249
- // Process the changes in Table and Dropdown and store right value in ques.input
250
- if (ques.Type__c == 'Dropdown' || ques.Type__c == 'Radio') {
251
- // HA 19JAN24 Correction of dropdown values
252
- ques.selectedObj = event.valueObj ? event.valueObj : null;
253
- ques.input = event.selectedObj ? event.selectedObj : event.valueObj;
254
- ques.selectedValue = event.valueObj ? event.valueObj : null;
255
- // emit the dropdown data to parent
256
- dropdownData['event'] = event.valueObj;
257
- dropdownData['ques'] = ques;
258
- if (dropdownData['event']) {
259
- this.handleDropDown.emit(dropdownData);
260
- } // VD 21DEC23 - dependent field change
261
- }
262
- else if (ques.Type__c == 'Location') {
263
- ques.input = event.valueObj;
264
- ques.selectedValue = event.valueObj.address;
265
- }
266
- else if (ques.Type__c == 'File') {
267
- ques.input = this.selectedFileData = event;
268
- }
269
- else if (ques.Type__c == 'Date' || ques.Type__c == 'DateTime') { // HA 24JAN24 Converting Date and DateTime to UTC
270
- if (event.value) {
271
- let d = new Date(event.value);
272
- let utcString = d.toISOString();
273
- ques.input = utcString;
262
+ if (ques) {
263
+ if (ques.Type__c == 'Dropdown' || ques.Type__c == 'Radio') {
264
+ // HA 19JAN24 Correction of dropdown values
265
+ ques.selectedObj = event.valueObj ? event.valueObj : null;
266
+ ques.input = event.selectedObj ? event.selectedObj : event.valueObj;
267
+ ques.selectedValue = event.valueObj ? event.valueObj : null;
268
+ // emit the dropdown data to parent
269
+ dropdownData['event'] = event.valueObj;
270
+ dropdownData['ques'] = ques;
271
+ if (dropdownData['event']) {
272
+ this.handleDropDown.emit(dropdownData);
273
+ } // VD 21DEC23 - dependent field change
274
+ }
275
+ else if (ques.Type__c == 'Location') {
276
+ ques.input = event.valueObj;
277
+ ques.selectedValue = event.valueObj.address;
278
+ }
279
+ else if (ques.Type__c == 'File') {
280
+ ques.input = this.selectedFileData = event;
281
+ }
282
+ else if (ques.Type__c == 'Date' || ques.Type__c == 'DateTime') { // HA 24JAN24 Converting Date and DateTime to UTC
283
+ if (event.value) {
284
+ let d = new Date(event.value);
285
+ let utcString = d.toISOString();
286
+ ques.input = utcString;
287
+ }
288
+ else {
289
+ ques.input = '';
290
+ }
291
+ }
292
+ else if (ques.Type__c == 'List') {
293
+ // VD 20Aug24 handling the list type handle multiple object values
294
+ ques.input = this.dataService.getValue(event.valueObj, event.field);
274
295
  }
275
296
  else {
276
- ques.input = '';
297
+ ques.input = event;
277
298
  }
299
+ // validating error message
300
+ const hasError = ques.Error_Message__c && ((ques.Type__c === 'File' && ques.input.length == 0) || (ques.Type__c != 'File' && !ques.input));
301
+ ques.error = hasError ? new ErrorWrapper() : null;
302
+ // Once the right value is stored in ques.input store the ques (with input) in storageService
303
+ this.storageService.update(ques);
304
+ // VD 19Jul01 - get updated question
305
+ this.handleQuestion.emit(ques);
278
306
  }
279
- else if (ques.Type__c == 'List') {
280
- // VD 20Aug24 handling the list type handle multiple object values
281
- ques.input = this.dataService.getValue(event.valueObj, event.field);
282
- }
283
- else {
284
- ques.input = event;
285
- }
286
- // validating error message
287
- const hasError = ques.Error_Message__c && ((ques.Type__c === 'File' && ques.input.length == 0) || (ques.Type__c != 'File' && !ques.input));
288
- ques.error = hasError ? new ErrorWrapper() : null;
289
- // if(ques.Is_Optional__c && !ques.input){
290
- // ques.error = new ErrorWrapper
291
- // }else{
292
- // ques.error = null;
293
- // }
294
- // Once the right value is stored in ques.input store the ques (with input) in storageService
295
- this.storageService.update(ques);
296
- // VD 19Jul01 - get updated question
297
- this.handleQuestion.emit(ques);
298
307
  }
299
308
  deleteFile(fileData) {
300
309
  console.log('fileDATA', fileData);
@@ -302,13 +311,33 @@ export class QuestionbookComponent {
302
311
  getDropDown(event) {
303
312
  this.hadleDropDownDependent.emit(event);
304
313
  }
305
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: QuestionbookComponent, deps: [{ token: i1.SalesforceService }, { token: i2.DataService }, { token: i3.ChangeService }, { token: i4.StorageService }, { token: i5.I18nService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
306
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: QuestionbookComponent, selector: "lib-questionbook", inputs: { qbItem: "qbItem", questionItem: "questionItem", translatedQuestions: "translatedQuestions", questions: "questions", errorFieldId: "errorFieldId", labelValue: "labelValue", token: "token", dropDownData: "dropDownData" }, outputs: { handleDropDown: "handleDropDown", handleQuestion: "handleQuestion", hadleDropDownDependent: "hadleDropDownDependent" }, ngImport: i0, template: "<!-- HA 20DEC23 Book Style from salesforce -->\n<!-- HA 28DEC23 Removed IsShengel(removal of shengel values applies for this reason) and direct styling of books to avoid styling issues-->\n<!-- HA 18JAN24 Added class for styling -->\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\n <div class=\"form-row\">\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\n <div\n [class]=\"'col-lg-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.Id\" [dir]=\"ques.langDirection\" [style]=\"ques?.Style__c?.questionStyle\">\n <!-- Sub Question Label -->\n <!-- HA 20DEC23 Label Style from salesforce -->\n <!-- VD 09May24 is hide field change-->\n <div *ngIf=\"!ques.Is_Hide__c\">\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n\n </div>\n <!-- VD 20JUN24 - help text changes-->\n <!-- VD 01Aug24 - validation change-->\n <!-- // VD 02Aug24 - label value style-->\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\" *ngIf=\"ques.Style__c.showLabel\" [style]=\"ques.Style__c.labelStyle\">\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.Style__c.labelValueStyle\">{{ ques?.Question_Text__c }} \n <div *ngIf=\"ques.Is_Optional__c\" style=\"color: red;\">*</div>\n <div *ngIf=\"ques.Question_Text__c && ques?.Help_Text__c\" class=\"icon\" [matTooltip]=\"ques?.Help_Text__c\">i</div></span>\n </div>\n <!-- // VD 12Jun24 - readonly change-->\n <!-- DateTime -->\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [error]=\"ques.error\" [errorMessage]=\"ques.Error_Message__c\" [readOnly]=\"ques.Read_Only__c\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date-picker>\n </div>\n\n <!-- Date-->\n <div *ngIf=\"ques.Type__c === 'Date'\">\n <app-custom-date [date]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.Error_Message__c\" [readOnly]=\"ques.Read_Only__c\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date>\n </div>\n\n <!-- Time-->\n <div *ngIf=\"ques.Type__c === 'Time'\">\n <app-custom-time [time]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.Error_Message__c\" [readOnly]=\"ques.Read_Only__c\" (timeChange)=\"childEventCapture($event, ques)\">\n </app-custom-time>\n </div>\n <!-- calendar -->\n <div *ngIf=\"ques.Type__c === 'Calendar'\">\n <app-custom-calendar [question]=\"ques\" (eventSelected)=\"childEventCapture($event, ques)\"></app-custom-calendar>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <app-custom-input [value]=\"ques.input\" [ngClassValue]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\" [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [idValue]=\"ques.Tracking_ID__c\" [focusEvent]=\"clearSQError(ques.Id)\"\n [error]=\"ques.error\" [placeholder]=\"ques.Question__c\" (inputValue)=\"childEventCapture($event, ques)\">\n </app-custom-input>\n </div>\n \n <!-- for pick location -->\n <!-- VD 21DEC23 - dependent field change -->\n <div *ngIf=\"ques.Type__c === 'Location'\">\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['Api_Key__c']\" [address]=\"ques.selectedValue\" [question]=\"ques\" (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n </div>\n\n <!-- for text area -->\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\n <app-custom-text-area [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \"\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.Type__c === 'Email'\">\n <input type=\"email\" readOnly=\"ques.Read_Only__c\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\n <app-custom-table [question]=\"ques\" [apiMeta]=\"ques.Sub_Text__c\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-table>\n </div>\n\n <!-- Table Appendix -->\n <div *ngIf=\"ques.Type__c === 'TableAppendix'\" class=\"\">\n <app-table-appendix [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-table-appendix>\n </div>\n <!-- list -->\n <!-- VD 20Aug24 used correct attribute -->\n <div *ngIf=\"ques.Type__c === 'List'\" class=\"\">\n <lib-search-box [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [placeHolderText]=\"ques.Question__c\" [filterName]=\"ques.input\" (searchValueChange)=\"childEventCapture($event, ques)\">\n </lib-search-box>\n </div>\n\n <!-- Dropdown -->\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\n <div *ngIf=\"ques.Type__c === 'Dropdown' && ques?.Question_Options__r?.records\" class=\"\">\n <!-- HA 20DEC23 For Translation --> <!-- VD 19JAN24 - getting token as input -->\n <app-custom-dropdown [options]=\"ques.Question_Options__r.records\" [token]=\"token\"\n [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [selectedValue]=\"ques.selectedValue\" placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques.Error_Message__c\" [error]=\"ques.error\"\n [referenceField]=\"ques.Reference_Field__c\"\n [readOnly]=\"ques.Read_Only__c\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-dropdown>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"ques?.input?.length > 0\"></i>\n </div>\n <!-- // VD 02Aug24 custom-radio component -->\n <div *ngIf=\"ques.Type__c === 'Radio' && ques?.Question_Options__r?.records\" class=\"\">\n <app-custom-radio [options]=\"ques.Question_Options__r.records\" [token]=\"token\"\n [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [selectedValue]=\"ques.selectedValue\"\n [errorMessage]=\"ques.Error_Message__c\" [error]=\"ques.error\"\n [referenceField]=\"ques.Reference_Field__c\"\n [readOnly]=\"ques.Read_Only__c\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-radio>\n </div>\n\n <!-- Attachment / Files -->\n <div *ngIf=\"ques.Type__c === 'File'\" class=\"\">\n <app-file-upload [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\" [allFiles]=\"ques.input\" [tableFile]=\"false\"\n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\n </div>\n <div *ngIf=\"ques.Type__c === 'PopUpMessage'\" class=\"\">\n <app-dependent-table [alertMessage]=\"ques.Error_Message__c\">\n </app-dependent-table>\n </div>\n <div *ngIf=\"ques.Type__c === 'Label'\" class=\"\">\n <app-custom-label [labelStyle]=\"ques.Title__c\" [labelValue]=\"ques.Question__c\">\n </app-custom-label>\n </div>\n <!-- // VD 02Aug24 image component -->\n <div *ngIf=\"ques.Type__c === 'Image'\" class=\"\">\n <app-custom-image [question]=\"ques\">\n </app-custom-image>\n </div>\n <!-- 08NOV23 - button type question added -->\n <!-- Button -->\n <div *ngIf=\"ques.Type__c === 'Button'\" class=\"\">\n <app-custom-button [height]=\"'50px'\" \n [width]=\"'150px'\" \n [buttonText]=\"ques?.Question__c\"\n [value]=\"ques?.Question__c\"\n (buttonValue)=\"childEventCapture($event, ques)\"\n >\n </app-custom-button>\n </div>\n <!-- HA 20DEC23 This is to load book type questions-->\n <div *ngIf=\"ques.Type__c === 'Book'\">\n <!-- HA 09FEB24 Added ternary operator -->\n <lib-questionbook [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\" [questions]=\"ques.qbItem?.Questions__r?.records\" (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\n </div>\n </div>\n </div>\n </div>", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:flex;flex-wrap:wrap}}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i9.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i10.PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: i11.CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "readOnly", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: i12.CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error", "question", "readOnly"], outputs: ["textareaValueChange"] }, { kind: "component", type: i13.CustomTableComponent, selector: "app-custom-table", inputs: ["question", "apiMeta"], outputs: ["valueChange"] }, { kind: "component", type: i14.CustomCalendarComponent, selector: "app-custom-calendar", inputs: ["allEvents", "question"], outputs: ["eventSelected"] }, { kind: "component", type: i15.CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate", "error", "errorMessage", "readOnly"], outputs: ["dateChange"] }, { kind: "component", type: i16.CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "component", type: i17.SearchBoxComponent, selector: "lib-search-box", inputs: ["placeHolderText", "question", "apiMeta", "id", "readOnly", "filterName"], outputs: ["searchValueChange"] }, { kind: "component", type: QuestionbookComponent, selector: "lib-questionbook", inputs: ["qbItem", "questionItem", "translatedQuestions", "questions", "errorFieldId", "labelValue", "token", "dropDownData"], outputs: ["handleDropDown", "handleQuestion", "hadleDropDownDependent"] }, { kind: "component", type: i18.FileUploadComponent, selector: "app-file-upload", inputs: ["allFiles", "limitFileUploading", "isDeleteFileButtonVisible", "isShowNoFileIcon", "tableFile", "question", "error"], outputs: ["selectedFileData", "deletedFileData"] }, { kind: "component", type: i19.DependentTableComponent, selector: "app-dependent-table", inputs: ["alertMessage"] }, { kind: "component", type: i20.CustomLabelComponent, selector: "app-custom-label", inputs: ["labelValue", "labelStyle"] }, { kind: "component", type: i21.TableAppendixComponent, selector: "app-table-appendix", inputs: ["question"], outputs: ["valueChange"] }, { kind: "component", type: i22.CustomDateComponent, selector: "app-custom-date", inputs: ["date", "readOnly", "error", "errorMessage"], outputs: ["dateChange"] }, { kind: "component", type: i23.CustomTimeComponent, selector: "app-custom-time", inputs: ["time", "readOnly", "error", "errorMessage"], outputs: ["timeChange"] }, { kind: "component", type: i24.CustomButtonComponent, selector: "app-custom-button", inputs: ["height", "width", "textColor", "buttonText", "value", "backgroundColor"], outputs: ["buttonValue"] }, { kind: "component", type: i25.CustomImageComponent, selector: "app-custom-image", inputs: ["alt", "src", "imageStyle", "question"] }, { kind: "component", type: i26.CustomRadioComponent, selector: "app-custom-radio", inputs: ["options", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "pipe", type: i27.I18nPipe, name: "i18n" }] });
314
+ // VD 06Sep24 calendar changes
315
+ getCurrentCalendar(event) {
316
+ this.handleCalendarDate.emit(event);
317
+ }
318
+ // VD 06Sep24 remove the special charecters and tags
319
+ // from the questionText
320
+ removeCharacters(questionText) {
321
+ let updatedText = questionText?.replace(/<[^>]*>/g, '');
322
+ return updatedText;
323
+ }
324
+ openCalendarComponent(ques) {
325
+ const viewContainerRef = this.dynamicHost.viewContainerRef;
326
+ if (viewContainerRef) {
327
+ viewContainerRef.clear();
328
+ const componentRef = viewContainerRef.createComponent(CustomCalendarComponent);
329
+ componentRef.instance.question = ques;
330
+ componentRef.instance.eventSelected.subscribe((event) => this.childEventCapture(event));
331
+ componentRef.instance.dateSelected.subscribe((event) => this.getCurrentCalendar(event));
332
+ }
333
+ }
334
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: QuestionbookComponent, deps: [{ token: i1.SalesforceService }, { token: i2.DataService }, { token: i3.ChangeService }, { token: i4.StorageService }, { token: i5.I18nService }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
335
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: QuestionbookComponent, selector: "lib-questionbook", inputs: { qbItem: "qbItem", questionItem: "questionItem", translatedQuestions: "translatedQuestions", questions: "questions", errorFieldId: "errorFieldId", labelValue: "labelValue", token: "token", dropDownData: "dropDownData" }, outputs: { handleDropDown: "handleDropDown", handleQuestion: "handleQuestion", hadleDropDownDependent: "hadleDropDownDependent", handleCalendarDate: "handleCalendarDate" }, viewQueries: [{ propertyName: "dynamicHost", first: true, predicate: ComponenthostDirective, descendants: true, static: true }], ngImport: i0, template: "<!-- HA 20DEC23 Book Style from salesforce -->\n<!-- HA 28DEC23 Removed IsShengel(removal of shengel values applies for this reason) and direct styling of books to avoid styling issues-->\n<!-- HA 18JAN24 Added class for styling -->\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\n <div class=\"form-row\">\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\n <div\n [class]=\"'col-lg-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.Id\" [dir]=\"ques.langDirection\" [style]=\"ques?.Style__c?.questionStyle\">\n <!-- Sub Question Label -->\n <!-- HA 20DEC23 Label Style from salesforce -->\n <!-- VD 09May24 is hide field change-->\n <div *ngIf=\"!ques.Is_Hide__c\">\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n\n </div>\n <!-- VD 20JUN24 - help text changes-->\n <!-- VD 01Aug24 - validation change-->\n <!-- // VD 02Aug24 - label value style-->\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\" *ngIf=\"ques.Style__c?.showLabel ? ques.Style__c?.showLabel : true\" [style]=\"ques.Style__c?.labelStyle\">\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.Style__c?.labelValueStyle\">{{ removeCharacters(ques?.Question_Text__c) }} \n <div *ngIf=\"ques.Is_Optional__c\" style=\"color: red;\">*</div>\n <div *ngIf=\"ques.Question_Text__c && ques?.Help_Text__c\" class=\"icon\" [matTooltip]=\"ques?.Help_Text__c\">i</div></span>\n </div>\n <!-- // VD 12Jun24 - readonly change-->\n <!-- DateTime -->\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [error]=\"ques.error\" [errorMessage]=\"ques.Error_Message__c\" [readOnly]=\"ques.Read_Only__c\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date-picker>\n </div>\n\n <!-- Date-->\n <div *ngIf=\"ques.Type__c === 'Date'\">\n <app-custom-date [date]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.Error_Message__c\" [readOnly]=\"ques.Read_Only__c\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date>\n </div>\n\n <!-- Time-->\n <div *ngIf=\"ques.Type__c === 'Time'\">\n <app-custom-time [time]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.Error_Message__c\" [readOnly]=\"ques.Read_Only__c\" (timeChange)=\"childEventCapture($event, ques)\">\n </app-custom-time>\n </div>\n <!-- calendar -->\n <div *ngIf=\"ques.Type__c === 'Calendar'\">\n <!-- <app-custom-calendar [question]=\"ques\" (eventSelected)=\"childEventCapture($event, ques)\" (dateSelected)=\"getCurrentCalendar($event)\"></app-custom-calendar> -->\n </div>\n <!-- Text -->\n <div *ngIf=\"ques.Type__c === 'Text' || ques.Type__c === 'Link'\" >\n <app-custom-input [value]=\"ques.input\" [ngClassValue]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\" [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [idValue]=\"ques.Tracking_ID__c\" [focusEvent]=\"clearSQError(ques.Id)\"\n [error]=\"ques.error\" [placeholder]=\"ques.Question__c\" (inputValue)=\"childEventCapture($event, ques)\">\n </app-custom-input>\n </div>\n \n <!-- for pick location -->\n <!-- VD 21DEC23 - dependent field change -->\n <div *ngIf=\"ques.Type__c === 'Location'\">\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['Api_Key__c']\" [address]=\"ques.selectedValue\" [question]=\"ques\" (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n </div>\n\n <!-- for text area -->\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\n <app-custom-text-area [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \"\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.Type__c === 'Email'\">\n <input type=\"email\" readOnly=\"ques.Read_Only__c\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\n <app-custom-table [question]=\"ques\" [apiMeta]=\"ques.Sub_Text__c\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-table>\n </div>\n\n <!-- Table Appendix -->\n <div *ngIf=\"ques.Type__c === 'TableAppendix'\" class=\"\">\n <app-table-appendix [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-table-appendix>\n </div>\n <!-- list -->\n <!-- VD 20Aug24 used correct attribute -->\n <div *ngIf=\"ques.Type__c === 'List'\" class=\"\">\n <lib-search-box [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [placeHolderText]=\"ques.Question__c\" [filterName]=\"ques.input\" (searchValueChange)=\"childEventCapture($event, ques)\">\n </lib-search-box>\n </div>\n\n <!-- Dropdown -->\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\n <div *ngIf=\"ques.Type__c === 'Dropdown' && ques?.Question_Options__r?.records\" class=\"\">\n <!-- HA 20DEC23 For Translation --> <!-- VD 19JAN24 - getting token as input -->\n <app-custom-dropdown [options]=\"ques.Question_Options__r.records\" [token]=\"token\"\n [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [selectedValue]=\"ques.selectedValue\" placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques.Error_Message__c\" [error]=\"ques.error\"\n [referenceField]=\"ques.Reference_Field__c\"\n [readOnly]=\"ques.Read_Only__c\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-dropdown>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"ques?.input?.length > 0\"></i>\n </div>\n <!-- // VD 02Aug24 custom-radio component -->\n <div *ngIf=\"ques.Type__c === 'Radio' && ques?.Question_Options__r?.records\" class=\"\">\n <app-custom-radio [options]=\"ques.Question_Options__r.records\" [token]=\"token\"\n [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [selectedValue]=\"ques.selectedValue\"\n [errorMessage]=\"ques.Error_Message__c\" [error]=\"ques.error\"\n [referenceField]=\"ques.Reference_Field__c\"\n [readOnly]=\"ques.Read_Only__c\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-radio>\n </div>\n\n <!-- Attachment / Files -->\n <div *ngIf=\"ques.Type__c === 'File'\" class=\"\">\n <app-file-upload [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\" [allFiles]=\"ques.input\" [tableFile]=\"false\"\n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\n </div>\n <div *ngIf=\"ques.Type__c === 'PopUpMessage'\" class=\"\">\n <app-dependent-table [alertMessage]=\"ques.Error_Message__c\">\n </app-dependent-table>\n </div>\n <div *ngIf=\"ques.Type__c === 'Label'\" class=\"\">\n <app-custom-label [labelStyle]=\"ques.Title__c\" [labelValue]=\"ques.Question__c\">\n </app-custom-label>\n </div>\n <!-- // VD 02Aug24 image component -->\n <div *ngIf=\"ques.Type__c === 'Image'\" class=\"\">\n <app-custom-image [question]=\"ques\">\n </app-custom-image>\n </div>\n <!-- 08NOV23 - button type question added -->\n <!-- Button -->\n <div *ngIf=\"ques.Type__c === 'Button'\" class=\"\">\n <app-custom-button [height]=\"'50px'\" \n [width]=\"'150px'\" \n [buttonText]=\"ques?.Question__c\"\n [value]=\"ques?.Question__c\"\n (buttonValue)=\"childEventCapture($event, ques)\"\n >\n </app-custom-button>\n </div>\n <!-- HA 20DEC23 This is to load book type questions-->\n <div *ngIf=\"ques.Type__c === 'Book'\">\n <!-- HA 09FEB24 Added ternary operator -->\n <lib-questionbook [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\" [questions]=\"ques.qbItem?.Questions__r?.records\" (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\n </div>\n </div>\n </div>\n </div>\n\n <!-- 06-09-24 for calendar type-->\n<ng-template dynamicComponentHost></ng-template>", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:flex;flex-wrap:wrap}}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.ComponenthostDirective, selector: "[dynamicComponentHost]" }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i10.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i11.PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: i12.CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "readOnly", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: i13.CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error", "question", "readOnly"], outputs: ["textareaValueChange"] }, { kind: "component", type: i14.CustomTableComponent, selector: "app-custom-table", inputs: ["question", "apiMeta"], outputs: ["valueChange"] }, { kind: "component", type: i15.CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate", "error", "errorMessage", "readOnly"], outputs: ["dateChange"] }, { kind: "component", type: i16.CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "component", type: i17.SearchBoxComponent, selector: "lib-search-box", inputs: ["placeHolderText", "question", "apiMeta", "id", "readOnly", "filterName"], outputs: ["searchValueChange"] }, { kind: "component", type: QuestionbookComponent, selector: "lib-questionbook", inputs: ["qbItem", "questionItem", "translatedQuestions", "questions", "errorFieldId", "labelValue", "token", "dropDownData"], outputs: ["handleDropDown", "handleQuestion", "hadleDropDownDependent", "handleCalendarDate"] }, { kind: "component", type: i18.FileUploadComponent, selector: "app-file-upload", inputs: ["allFiles", "limitFileUploading", "isDeleteFileButtonVisible", "isShowNoFileIcon", "tableFile", "question", "error"], outputs: ["selectedFileData", "deletedFileData"] }, { kind: "component", type: i19.DependentTableComponent, selector: "app-dependent-table", inputs: ["alertMessage"] }, { kind: "component", type: i20.CustomLabelComponent, selector: "app-custom-label", inputs: ["labelValue", "labelStyle"] }, { kind: "component", type: i21.TableAppendixComponent, selector: "app-table-appendix", inputs: ["question"], outputs: ["valueChange"] }, { kind: "component", type: i22.CustomDateComponent, selector: "app-custom-date", inputs: ["date", "readOnly", "error", "errorMessage"], outputs: ["dateChange"] }, { kind: "component", type: i23.CustomTimeComponent, selector: "app-custom-time", inputs: ["time", "readOnly", "error", "errorMessage"], outputs: ["timeChange"] }, { kind: "component", type: i24.CustomButtonComponent, selector: "app-custom-button", inputs: ["height", "width", "textColor", "buttonText", "value", "backgroundColor"], outputs: ["buttonValue"] }, { kind: "component", type: i25.CustomImageComponent, selector: "app-custom-image", inputs: ["alt", "src", "imageStyle", "question"] }, { kind: "component", type: i26.CustomRadioComponent, selector: "app-custom-radio", inputs: ["options", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "pipe", type: i27.I18nPipe, name: "i18n" }] });
307
336
  }
308
337
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: QuestionbookComponent, decorators: [{
309
338
  type: Component,
310
- args: [{ selector: 'lib-questionbook', template: "<!-- HA 20DEC23 Book Style from salesforce -->\n<!-- HA 28DEC23 Removed IsShengel(removal of shengel values applies for this reason) and direct styling of books to avoid styling issues-->\n<!-- HA 18JAN24 Added class for styling -->\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\n <div class=\"form-row\">\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\n <div\n [class]=\"'col-lg-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.Id\" [dir]=\"ques.langDirection\" [style]=\"ques?.Style__c?.questionStyle\">\n <!-- Sub Question Label -->\n <!-- HA 20DEC23 Label Style from salesforce -->\n <!-- VD 09May24 is hide field change-->\n <div *ngIf=\"!ques.Is_Hide__c\">\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n\n </div>\n <!-- VD 20JUN24 - help text changes-->\n <!-- VD 01Aug24 - validation change-->\n <!-- // VD 02Aug24 - label value style-->\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\" *ngIf=\"ques.Style__c.showLabel\" [style]=\"ques.Style__c.labelStyle\">\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.Style__c.labelValueStyle\">{{ ques?.Question_Text__c }} \n <div *ngIf=\"ques.Is_Optional__c\" style=\"color: red;\">*</div>\n <div *ngIf=\"ques.Question_Text__c && ques?.Help_Text__c\" class=\"icon\" [matTooltip]=\"ques?.Help_Text__c\">i</div></span>\n </div>\n <!-- // VD 12Jun24 - readonly change-->\n <!-- DateTime -->\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [error]=\"ques.error\" [errorMessage]=\"ques.Error_Message__c\" [readOnly]=\"ques.Read_Only__c\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date-picker>\n </div>\n\n <!-- Date-->\n <div *ngIf=\"ques.Type__c === 'Date'\">\n <app-custom-date [date]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.Error_Message__c\" [readOnly]=\"ques.Read_Only__c\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date>\n </div>\n\n <!-- Time-->\n <div *ngIf=\"ques.Type__c === 'Time'\">\n <app-custom-time [time]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.Error_Message__c\" [readOnly]=\"ques.Read_Only__c\" (timeChange)=\"childEventCapture($event, ques)\">\n </app-custom-time>\n </div>\n <!-- calendar -->\n <div *ngIf=\"ques.Type__c === 'Calendar'\">\n <app-custom-calendar [question]=\"ques\" (eventSelected)=\"childEventCapture($event, ques)\"></app-custom-calendar>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <app-custom-input [value]=\"ques.input\" [ngClassValue]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\" [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [idValue]=\"ques.Tracking_ID__c\" [focusEvent]=\"clearSQError(ques.Id)\"\n [error]=\"ques.error\" [placeholder]=\"ques.Question__c\" (inputValue)=\"childEventCapture($event, ques)\">\n </app-custom-input>\n </div>\n \n <!-- for pick location -->\n <!-- VD 21DEC23 - dependent field change -->\n <div *ngIf=\"ques.Type__c === 'Location'\">\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['Api_Key__c']\" [address]=\"ques.selectedValue\" [question]=\"ques\" (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n </div>\n\n <!-- for text area -->\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\n <app-custom-text-area [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \"\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.Type__c === 'Email'\">\n <input type=\"email\" readOnly=\"ques.Read_Only__c\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\n <app-custom-table [question]=\"ques\" [apiMeta]=\"ques.Sub_Text__c\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-table>\n </div>\n\n <!-- Table Appendix -->\n <div *ngIf=\"ques.Type__c === 'TableAppendix'\" class=\"\">\n <app-table-appendix [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-table-appendix>\n </div>\n <!-- list -->\n <!-- VD 20Aug24 used correct attribute -->\n <div *ngIf=\"ques.Type__c === 'List'\" class=\"\">\n <lib-search-box [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [placeHolderText]=\"ques.Question__c\" [filterName]=\"ques.input\" (searchValueChange)=\"childEventCapture($event, ques)\">\n </lib-search-box>\n </div>\n\n <!-- Dropdown -->\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\n <div *ngIf=\"ques.Type__c === 'Dropdown' && ques?.Question_Options__r?.records\" class=\"\">\n <!-- HA 20DEC23 For Translation --> <!-- VD 19JAN24 - getting token as input -->\n <app-custom-dropdown [options]=\"ques.Question_Options__r.records\" [token]=\"token\"\n [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [selectedValue]=\"ques.selectedValue\" placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques.Error_Message__c\" [error]=\"ques.error\"\n [referenceField]=\"ques.Reference_Field__c\"\n [readOnly]=\"ques.Read_Only__c\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-dropdown>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"ques?.input?.length > 0\"></i>\n </div>\n <!-- // VD 02Aug24 custom-radio component -->\n <div *ngIf=\"ques.Type__c === 'Radio' && ques?.Question_Options__r?.records\" class=\"\">\n <app-custom-radio [options]=\"ques.Question_Options__r.records\" [token]=\"token\"\n [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [selectedValue]=\"ques.selectedValue\"\n [errorMessage]=\"ques.Error_Message__c\" [error]=\"ques.error\"\n [referenceField]=\"ques.Reference_Field__c\"\n [readOnly]=\"ques.Read_Only__c\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-radio>\n </div>\n\n <!-- Attachment / Files -->\n <div *ngIf=\"ques.Type__c === 'File'\" class=\"\">\n <app-file-upload [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\" [allFiles]=\"ques.input\" [tableFile]=\"false\"\n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\n </div>\n <div *ngIf=\"ques.Type__c === 'PopUpMessage'\" class=\"\">\n <app-dependent-table [alertMessage]=\"ques.Error_Message__c\">\n </app-dependent-table>\n </div>\n <div *ngIf=\"ques.Type__c === 'Label'\" class=\"\">\n <app-custom-label [labelStyle]=\"ques.Title__c\" [labelValue]=\"ques.Question__c\">\n </app-custom-label>\n </div>\n <!-- // VD 02Aug24 image component -->\n <div *ngIf=\"ques.Type__c === 'Image'\" class=\"\">\n <app-custom-image [question]=\"ques\">\n </app-custom-image>\n </div>\n <!-- 08NOV23 - button type question added -->\n <!-- Button -->\n <div *ngIf=\"ques.Type__c === 'Button'\" class=\"\">\n <app-custom-button [height]=\"'50px'\" \n [width]=\"'150px'\" \n [buttonText]=\"ques?.Question__c\"\n [value]=\"ques?.Question__c\"\n (buttonValue)=\"childEventCapture($event, ques)\"\n >\n </app-custom-button>\n </div>\n <!-- HA 20DEC23 This is to load book type questions-->\n <div *ngIf=\"ques.Type__c === 'Book'\">\n <!-- HA 09FEB24 Added ternary operator -->\n <lib-questionbook [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\" [questions]=\"ques.qbItem?.Questions__r?.records\" (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\n </div>\n </div>\n </div>\n </div>", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:flex;flex-wrap:wrap}}\n"] }]
311
- }], ctorParameters: function () { return [{ type: i1.SalesforceService }, { type: i2.DataService }, { type: i3.ChangeService }, { type: i4.StorageService }, { type: i5.I18nService }, { type: Document, decorators: [{
339
+ args: [{ selector: 'lib-questionbook', template: "<!-- HA 20DEC23 Book Style from salesforce -->\n<!-- HA 28DEC23 Removed IsShengel(removal of shengel values applies for this reason) and direct styling of books to avoid styling issues-->\n<!-- HA 18JAN24 Added class for styling -->\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\n <div class=\"form-row\">\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\n <div\n [class]=\"'col-lg-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.Id\" [dir]=\"ques.langDirection\" [style]=\"ques?.Style__c?.questionStyle\">\n <!-- Sub Question Label -->\n <!-- HA 20DEC23 Label Style from salesforce -->\n <!-- VD 09May24 is hide field change-->\n <div *ngIf=\"!ques.Is_Hide__c\">\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n\n </div>\n <!-- VD 20JUN24 - help text changes-->\n <!-- VD 01Aug24 - validation change-->\n <!-- // VD 02Aug24 - label value style-->\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\" *ngIf=\"ques.Style__c?.showLabel ? ques.Style__c?.showLabel : true\" [style]=\"ques.Style__c?.labelStyle\">\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.Style__c?.labelValueStyle\">{{ removeCharacters(ques?.Question_Text__c) }} \n <div *ngIf=\"ques.Is_Optional__c\" style=\"color: red;\">*</div>\n <div *ngIf=\"ques.Question_Text__c && ques?.Help_Text__c\" class=\"icon\" [matTooltip]=\"ques?.Help_Text__c\">i</div></span>\n </div>\n <!-- // VD 12Jun24 - readonly change-->\n <!-- DateTime -->\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [error]=\"ques.error\" [errorMessage]=\"ques.Error_Message__c\" [readOnly]=\"ques.Read_Only__c\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date-picker>\n </div>\n\n <!-- Date-->\n <div *ngIf=\"ques.Type__c === 'Date'\">\n <app-custom-date [date]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.Error_Message__c\" [readOnly]=\"ques.Read_Only__c\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date>\n </div>\n\n <!-- Time-->\n <div *ngIf=\"ques.Type__c === 'Time'\">\n <app-custom-time [time]=\"ques.input\" [error]=\"ques.error\" [errorMessage]=\"ques.Error_Message__c\" [readOnly]=\"ques.Read_Only__c\" (timeChange)=\"childEventCapture($event, ques)\">\n </app-custom-time>\n </div>\n <!-- calendar -->\n <div *ngIf=\"ques.Type__c === 'Calendar'\">\n <!-- <app-custom-calendar [question]=\"ques\" (eventSelected)=\"childEventCapture($event, ques)\" (dateSelected)=\"getCurrentCalendar($event)\"></app-custom-calendar> -->\n </div>\n <!-- Text -->\n <div *ngIf=\"ques.Type__c === 'Text' || ques.Type__c === 'Link'\" >\n <app-custom-input [value]=\"ques.input\" [ngClassValue]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\" [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [idValue]=\"ques.Tracking_ID__c\" [focusEvent]=\"clearSQError(ques.Id)\"\n [error]=\"ques.error\" [placeholder]=\"ques.Question__c\" (inputValue)=\"childEventCapture($event, ques)\">\n </app-custom-input>\n </div>\n \n <!-- for pick location -->\n <!-- VD 21DEC23 - dependent field change -->\n <div *ngIf=\"ques.Type__c === 'Location'\">\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['Api_Key__c']\" [address]=\"ques.selectedValue\" [question]=\"ques\" (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n </div>\n\n <!-- for text area -->\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\n <app-custom-text-area [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \"\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.Type__c === 'Email'\">\n <input type=\"email\" readOnly=\"ques.Read_Only__c\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\n <app-custom-table [question]=\"ques\" [apiMeta]=\"ques.Sub_Text__c\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-table>\n </div>\n\n <!-- Table Appendix -->\n <div *ngIf=\"ques.Type__c === 'TableAppendix'\" class=\"\">\n <app-table-appendix [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-table-appendix>\n </div>\n <!-- list -->\n <!-- VD 20Aug24 used correct attribute -->\n <div *ngIf=\"ques.Type__c === 'List'\" class=\"\">\n <lib-search-box [question]=\"ques\" [readOnly]=\"ques.Read_Only__c\" [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [placeHolderText]=\"ques.Question__c\" [filterName]=\"ques.input\" (searchValueChange)=\"childEventCapture($event, ques)\">\n </lib-search-box>\n </div>\n\n <!-- Dropdown -->\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\n <div *ngIf=\"ques.Type__c === 'Dropdown' && ques?.Question_Options__r?.records\" class=\"\">\n <!-- HA 20DEC23 For Translation --> <!-- VD 19JAN24 - getting token as input -->\n <app-custom-dropdown [options]=\"ques.Question_Options__r.records\" [token]=\"token\"\n [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [selectedValue]=\"ques.selectedValue\" placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques.Error_Message__c\" [error]=\"ques.error\"\n [referenceField]=\"ques.Reference_Field__c\"\n [readOnly]=\"ques.Read_Only__c\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-dropdown>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"ques?.input?.length > 0\"></i>\n </div>\n <!-- // VD 02Aug24 custom-radio component -->\n <div *ngIf=\"ques.Type__c === 'Radio' && ques?.Question_Options__r?.records\" class=\"\">\n <app-custom-radio [options]=\"ques.Question_Options__r.records\" [token]=\"token\"\n [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [selectedValue]=\"ques.selectedValue\"\n [errorMessage]=\"ques.Error_Message__c\" [error]=\"ques.error\"\n [referenceField]=\"ques.Reference_Field__c\"\n [readOnly]=\"ques.Read_Only__c\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-radio>\n </div>\n\n <!-- Attachment / Files -->\n <div *ngIf=\"ques.Type__c === 'File'\" class=\"\">\n <app-file-upload [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\" [allFiles]=\"ques.input\" [tableFile]=\"false\"\n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\n </div>\n <div *ngIf=\"ques.Type__c === 'PopUpMessage'\" class=\"\">\n <app-dependent-table [alertMessage]=\"ques.Error_Message__c\">\n </app-dependent-table>\n </div>\n <div *ngIf=\"ques.Type__c === 'Label'\" class=\"\">\n <app-custom-label [labelStyle]=\"ques.Title__c\" [labelValue]=\"ques.Question__c\">\n </app-custom-label>\n </div>\n <!-- // VD 02Aug24 image component -->\n <div *ngIf=\"ques.Type__c === 'Image'\" class=\"\">\n <app-custom-image [question]=\"ques\">\n </app-custom-image>\n </div>\n <!-- 08NOV23 - button type question added -->\n <!-- Button -->\n <div *ngIf=\"ques.Type__c === 'Button'\" class=\"\">\n <app-custom-button [height]=\"'50px'\" \n [width]=\"'150px'\" \n [buttonText]=\"ques?.Question__c\"\n [value]=\"ques?.Question__c\"\n (buttonValue)=\"childEventCapture($event, ques)\"\n >\n </app-custom-button>\n </div>\n <!-- HA 20DEC23 This is to load book type questions-->\n <div *ngIf=\"ques.Type__c === 'Book'\">\n <!-- HA 09FEB24 Added ternary operator -->\n <lib-questionbook [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\" [questions]=\"ques.qbItem?.Questions__r?.records\" (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\n </div>\n </div>\n </div>\n </div>\n\n <!-- 06-09-24 for calendar type-->\n<ng-template dynamicComponentHost></ng-template>", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:flex;flex-wrap:wrap}}\n"] }]
340
+ }], ctorParameters: function () { return [{ type: i1.SalesforceService }, { type: i2.DataService }, { type: i3.ChangeService }, { type: i4.StorageService }, { type: i5.I18nService }, { type: i0.ChangeDetectorRef }, { type: Document, decorators: [{
312
341
  type: Inject,
313
342
  args: [DOCUMENT]
314
343
  }] }]; }, propDecorators: { qbItem: [{
@@ -331,7 +360,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
331
360
  type: Output
332
361
  }], dropDownData: [{
333
362
  type: Input
363
+ }], dynamicHost: [{
364
+ type: ViewChild,
365
+ args: [ComponenthostDirective, { static: true }]
334
366
  }], hadleDropDownDependent: [{
335
367
  type: Output
368
+ }], handleCalendarDate: [{
369
+ type: Output
336
370
  }] } });
337
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25ib29rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBT3ZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUzNDLE1BQU0sT0FBTyxxQkFBcUI7SUF1Qlo7SUFDVjtJQUNBO0lBQ0E7SUFDRDtJQUNtQjtJQTNCbkIsTUFBTSxDQUFlO0lBQ3JCLFlBQVksQ0FBVztJQUN2QixtQkFBbUIsR0FBVyxFQUFFLENBQUEsQ0FBRSxtQ0FBbUM7SUFDckUsU0FBUyxDQUFhO0lBQ3RCLFlBQVksQ0FBSztJQUNqQixVQUFVLENBQVE7SUFDbEIsS0FBSyxDQUFRLENBQUMsc0NBQXNDO0lBQ25ELGNBQWMsR0FBcUIsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUMzRCxjQUFjLEdBQXFCLElBQUksWUFBWSxFQUFPLENBQUMsQ0FBQyxvQ0FBb0M7SUFDakcsWUFBWSxDQUFLO0lBQzFCLFlBQVksQ0FBYTtJQUN6QixnQkFBZ0IsR0FBVSxFQUFFLENBQUM7SUFDN0IsdUVBQXVFO0lBQ3ZFLEtBQUssQ0FBZTtJQUNwQixpREFBaUQ7SUFDakQsS0FBSyxDQUFNO0lBQ1gsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUN0QixTQUFTLENBQU07SUFDZixZQUFZLENBQWU7SUFDakIsc0JBQXNCLEdBQXFCLElBQUksWUFBWSxFQUFFLENBQUM7SUFDakUsZ0JBQWdCLEdBQVEsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUV6QyxZQUFvQixTQUE0QixFQUN0QyxXQUF3QixFQUN4QixhQUE0QixFQUM1QixjQUE4QixFQUMvQixXQUF3QixFQUNMLFFBQWtCO1FBTDFCLGNBQVMsR0FBVCxTQUFTLENBQW1CO1FBQ3RDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUMvQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNMLGFBQVEsR0FBUixRQUFRLENBQVU7SUFFOUMsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDbkQsc0NBQXNDO1FBQ3RDLCtCQUErQjtRQUMvQiwwREFBMEQ7UUFDMUQsMkJBQTJCO1FBQzNCLElBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUM7WUFDdkIsdUVBQXVFO1lBQ3ZFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUM5SCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMxSCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMxRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4RyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFD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QUNGO1lBQ0QsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDO1lBRTFKLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzdGLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzdGLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVHLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzdGLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzdGLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLE9BQU8s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T0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUMsUUFBUSxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUNELFdBQVcsQ0FBQyxLQUFTO1FBQ25CLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsQ0FBQzt3R0FsUlUscUJBQXFCLG9LQTRCdEIsUUFBUTs0RkE1QlAscUJBQXFCLGlhQ25CbEMseW1UQTRKVSw2ekdEeklHLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxrQkFBa0I7OzBCQWdDekIsTUFBTTsyQkFBQyxRQUFROzRDQTNCVCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRSxZQUFZO3NCQUFwQixLQUFLO2dCQVVJLHNCQUFzQjtzQkFBL0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUXVlc3Rpb24sIFF1ZXN0aW9uQm9vayB9IGZyb20gJy4uLy4uL3dyYXBwZXInO1xuaW1wb3J0IHsgU2FsZXNmb3JjZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2FsZXNmb3JjZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBFcnJvcldyYXBwZXIgfSBmcm9tICcuLi8uLi9tb2RlbC9lcnJvcldyYXBwZXInO1xuLy8gSEEgMTlERUMyMyBpbXBvcnRlZCB0cmFuc2xhdGlvbiBzZXJ2aWNlXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uL2kxOG4uc2VydmljZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERlcGVuZGVuY3lNZXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9kZXBlbmRlbmN5TWV0YSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1xdWVzdGlvbmJvb2snLFxuICB0ZW1wbGF0ZVVybDogJy4vcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVlc3Rpb25ib29rLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbmJvb2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBxYkl0ZW06IFF1ZXN0aW9uQm9vaztcbiAgQElucHV0KCkgcXVlc3Rpb25JdGVtOiBRdWVzdGlvbjtcbiAgQElucHV0KCkgdHJhbnNsYXRlZFF1ZXN0aW9ucyA6IGFueVtdID0gW10gIC8vIFZEIDExSnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gIEBJbnB1dCgpIHF1ZXN0aW9uczogUXVlc3Rpb25bXTtcbiAgQElucHV0KCkgZXJyb3JGaWVsZElkOmFueTtcbiAgQElucHV0KCkgbGFiZWxWYWx1ZTpzdHJpbmc7IFxuICBASW5wdXQoKSB0b2tlbjpzdHJpbmc7IC8vIFZEIDE5SkFOMjQgLSBnZXR0aW5nIHRva2VuIGFzIGlucHV0XG4gIEBPdXRwdXQoKSBoYW5kbGVEcm9wRG93bjpFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgaGFuZGxlUXVlc3Rpb246RXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTsgLy8gVkQgMTlKdWwwMSAtIGdldCB1cGRhdGVkIHF1ZXN0aW9uXG4gIEBJbnB1dCgpIGRyb3BEb3duRGF0YTphbnk7XG4gIHN1YlF1ZXN0aW9uczogUXVlc3Rpb25bXTtcbiAgc2VsZWN0ZWRGaWxlRGF0YTogYW55W10gPSBbXTtcbiAgLy8gSEEgMjhERUMyMyBBZGRlZCBzdHlsaW5nIGFuZCBsb2dpY3MgdG8gbG9hZCB0aGUgYm9vayB0eXBlIHF1ZXN0aW9ucyBcbiAgcWJSZWY6IFF1ZXN0aW9uQm9vaztcbiAgLy8gIEhBIDE5REVDMjMgRGVjbGFyYXRpb24gZm9yIFNhbGVzZm9yY2UgU3R5bGluZ1xuICBzdHlsZTogYW55O1xuICBsYW5nRGlyZWN0aW9uID0gJ2x0cic7XG4gIGJvb2tTdHlsZTogYW55O1xuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgQE91dHB1dCgpIGhhZGxlRHJvcERvd25EZXBlbmRlbnQ6RXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBib29rUXVlc3Rpb25zTWFwOiBhbnkgPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZlNlcnZpY2U6IFNhbGVzZm9yY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlU2VydmljZTogQ2hhbmdlU2VydmljZSwgXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXG4gICAgcHVibGljIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZSxcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudFxuICAgICkgeyBcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdpbnNpZGUgUXVlc3Rpb25Cb29rQ29tcG9uZW50IE9uSW5pdCcpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdxYkl0ZW0nLCB0aGlzLnFiSXRlbSk7XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvbnMpO1xuICAgIC8vICBIQSAxOURFQzIzIExvZ2ljIGZvciBRdWVzdGlvbiBCb29rIFN0eWxpbmcoU2xhZXNmb3JjZSlcbiAgICAvLyBIQSAwOUZFQjI0IEFkZGVkIHRlcm5hcnlcbiAgICBpZih0aGlzLnFiSXRlbT8uU3R5bGVfX2Mpe1xuICAgICAgLy8gSEEgMjhERUMyMyBBZGRlZCBzdHlsaW5nIGFuZCBsb2dpY3MgdG8gbG9hZCB0aGUgYm9vayB0eXBlIHF1ZXN0aW9ucyBcbiAgICAgIHRoaXMucWJJdGVtLlN0eWxlX19jID0gdHlwZW9mIHRoaXMucWJJdGVtLlN0eWxlX19jID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoJycrdGhpcy5xYkl0ZW0/LlN0eWxlX19jKSA6IHRoaXMucWJJdGVtLlN0eWxlX19jO1xuICAgICAgdGhpcy5xYkl0ZW0uU3R5bGVfX2MubGFiZWxDbGFzcyA9IHRoaXMucWJJdGVtLlN0eWxlX19jPy5sYWJlbENsYXNzID8gdGhpcy5xYkl0ZW0uU3R5bGVfX2M/LmxhYmVsQ2xhc3MgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uU3R5bGVfX2MubGFiZWxTdHlsZSA9IHRoaXMucWJJdGVtLlN0eWxlX19jPy5sYWJlbFN0eWxlID8gdGhpcy5xYkl0ZW0uU3R5bGVfX2M/LmxhYmVsU3R5bGUgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uU3R5bGVfX2MubGFiZWxWYWx1ZVN0eWxlID0gdGhpcy5xYkl0ZW0uU3R5bGVfX2M/LmxhYmVsVmFsdWVTdHlsZSA/IHRoaXMucWJJdGVtLlN0eWxlX19jPy5sYWJlbFZhbHVlU3R5bGUgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uU3R5bGVfX2MuaW5wdXRDbGFzcyA9IHRoaXMucWJJdGVtLlN0eWxlX19jPy5pbnB1dENsYXNzID8gdGhpcy5xYkl0ZW0uU3R5bGVfX2M/LmlucHV0Q2xhc3MgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uU3R5bGVfX2MuaW5wdXRTdHlsZSA9IHRoaXMucWJJdGVtLlN0eWxlX19jLmlucHV0U3R5bGUgPyB0aGlzLnFiSXRlbS5TdHlsZV9fYz8uaW5wdXRTdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5TdHlsZV9fYy5ib29rU3R5bGUgPSB0aGlzLnFiSXRlbS5TdHlsZV9fYz8uYm9va1N0eWxlID8gdGhpcy5xYkl0ZW0uU3R5bGVfX2M/LmJvb2tTdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5TdHlsZV9fYy5zaG93TGFiZWwgPSB0aGlzLnFiSXRlbS5TdHlsZV9fYz8uc2hvd0xhYmVsID8gdGhpcy5xYkl0ZW0uU3R5bGVfX2M/LnNob3dMYWJlbCA6IHRydWU7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICBpZiggdGhpcy5xYkl0ZW0pe1xuICAgICAgICB0aGlzLnFiSXRlbS5TdHlsZV9fYyA9IHtcbiAgICAgICAgICBcImxhYmVsQ2xhc3NcIiA6IFwiXCIsXG4gICAgICAgICAgXCJsYWJlbFN0eWxlXCIgOiBcIlwiLFxuICAgICAgICAgIFwibGFiZWxWYWx1ZVN0eWxlXCIgOiBcIlwiLFxuICAgICAgICAgIFwiaW5wdXRDbGFzc1wiIDogXCJcIixcbiAgICAgICAgICBcImlucHV0U3R5bGVcIiA6IFwiXCIsXG4gICAgICAgICAgXCJib29rU3R5bGVcIiA6IFwiXCIsXG4gICAgICAgICAgXCJzaG93TGFiZWxcIjogdHJ1ZSxcbiAgICAgICAgICBcImRpcmVjdGlvblwiIDogXCJsdHJcIixcbiAgICAgICAgICBcInF1ZXN0aW9uU3R5bGVcIjogXCJcIlxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnFiSXRlbS5TdHlsZV9fYy5xdWVzdGlvblN0eWxlID0gdGhpcy5xYkl0ZW0/LlN0eWxlX19jPy5xdWVzdGlvblN0eWxlID8gdGhpcy5xYkl0ZW0/LlN0eWxlX19jLnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xuICAgIHRoaXMubGFuZ0RpcmVjdGlvbiA9IHRoaXMucWJJdGVtLlN0eWxlX19jLmRpcmVjdGlvbiA9IHRoaXMucWJJdGVtPy5TdHlsZV9fYz8uZGlyZWN0aW9uID8gdGhpcy5xYkl0ZW0/LlN0eWxlX19jPy5kaXJlY3Rpb24gOiAnbHRyJztcbiAgICB0aGlzLmJvb2tTdHlsZSA9IHRoaXMucWJJdGVtPy5TdHlsZV9fYz8uYm9va1N0eWxlO1xuICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICB2YXIgaHRtbEVsZW1lbnQgPSBlbGVtZW50Py5RdWVzdGlvbl9UZXh0X19jIDtcbiAgICAgIHZhciB0ZXh0T25seSA9IGh0bWxFbGVtZW50Py5yZXBsYWNlKC88W14+XSo+L2csICcnKVxuICAgICAgZWxlbWVudC5RdWVzdGlvbl9UZXh0X19jID0gdGV4dE9ubHk7XG4gICAgICAvLyAgSEEgMTlERUMyMyBMb2dpYyBmb3IgUXVlc3Rpb24gU3R5bGluZyhTbGFlc2ZvcmNlKVxuICAgICAgLy8gSEEgMjhERUMyMyBBZGRlZCBzdHlsaW5nIGFuZCBsb2dpY3MgdG8gbG9hZCB0aGUgYm9vayB0eXBlIHF1ZXN0aW9ucyBcbiAgICAgIGlmKGVsZW1lbnQuVHlwZV9fYyA9PT0gJ0Jvb2snKXtcbiAgICAgICAgaWYoZWxlbWVudFsnUUJfUmVmZXJlbmNlX1F1ZXN0aW9uc19fYyddKXtcbiAgICAgICAgICB2YXIgcWIgPSBKU09OLnBhcnNlKGVsZW1lbnRbJ1FCX1JlZmVyZW5jZV9RdWVzdGlvbnNfX2MnXSk7XG4gICAgICAgICAgaWYocWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jKXtcbiAgICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYyA9IHR5cGVvZiBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSgnJytxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MpIDogcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jID0gdGhpcy5xYkl0ZW0uU3R5bGVfX2M7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQm9vayB0eXBlIHF1ZXN0aW9uIHN0eWxpbmdcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MubGFiZWxDbGFzcyA9IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5sYWJlbENsYXNzID8gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmxhYmVsQ2xhc3MgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5sYWJlbFN0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmxhYmVsU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmxhYmVsVmFsdWVTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5sYWJlbFZhbHVlU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MubGFiZWxWYWx1ZVN0eWxlIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MuaW5wdXRDbGFzcyA9IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5pbnB1dENsYXNzID8gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmlucHV0Q2xhc3MgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5pbnB1dFN0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmlucHV0U3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MuaW5wdXRTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmJvb2tTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5ib29rU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MuYm9va1N0eWxlIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2Muc2hvd0xhYmVsID0gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLnNob3dMYWJlbCA/IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5zaG93TGFiZWwgOiB0cnVlO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5xdWVzdGlvblN0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLnF1ZXN0aW9uU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MucXVlc3Rpb25TdHlsZSA6IFwiXCI7XG4gICAgICAgICAgcWJbJ2xhbmdEaXJlY3Rpb24nXSA9IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5kaXJlY3Rpb24gPyBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MuZGlyZWN0aW9uIDogdGhpcy5sYW5nRGlyZWN0aW9uO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIExvb3AgZm9yIGVhY2ggcXVlc3Rpb24gaW4gdGhlIGJvb2tcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uUXVlc3Rpb25zX19yLnJlY29yZHMuZm9yRWFjaChxdWVzdGlvbkZyb21Cb29rID0+IHtcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MgPSBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jID8gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYyA6IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYztcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MubGFiZWxDbGFzcyA9IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MubGFiZWxDbGFzcyA/IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MubGFiZWxDbGFzcyA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLmxhYmVsU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLmxhYmVsU3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLmxhYmVsU3R5bGUgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5sYWJlbFZhbHVlU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLmxhYmVsVmFsdWVTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MubGFiZWxWYWx1ZVN0eWxlIDogXCJcIjtcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MuaW5wdXRDbGFzcyA9IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MuaW5wdXRDbGFzcyA/IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MuaW5wdXRDbGFzcyA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLmlucHV0U3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLmlucHV0U3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLmlucHV0U3R5bGUgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5ib29rU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLmJvb2tTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MuYm9va1N0eWxlIDogXCJcIjtcbiAgICAgICAgICAgIHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2Muc2hvd0xhYmVsID0gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5zaG93TGFiZWwgPyBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLnNob3dMYWJlbCA6IHRydWU7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLnF1ZXN0aW9uU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLnF1ZXN0aW9uU3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9va1snbGFuZ0RpcmVjdGlvbiddID0gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5kaXJlY3Rpb24gPyBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jLmRpcmVjdGlvbiA6IHRoaXMubGFuZ0RpcmVjdGlvbjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBlbGVtZW50WydxYkl0ZW0nXSA9IHFiWydxdWVzdGlvbmJvb2snXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxlbWVudC5TdHlsZV9fYyA9IGVsZW1lbnQuU3R5bGVfX2MgPyB0eXBlb2YgZWxlbWVudC5TdHlsZV9fYyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKCcnK2VsZW1lbnQ/LlN0eWxlX19jKSA6IGVsZW1lbnQ/LlN0eWxlX19jIDogdGhpcy5xYkl0ZW0/LlN0eWxlX19jO1xuXG4gICAgICBlbGVtZW50LlN0eWxlX19jLmxhYmVsQ2xhc3MgPSBlbGVtZW50LlN0eWxlX19jLmxhYmVsQ2xhc3MgPyBlbGVtZW50LlN0eWxlX19jLmxhYmVsQ2xhc3MgOiBcIlwiO1xuICAgICAgZWxlbWVudC5TdHlsZV9fYy5sYWJlbFN0eWxlID0gZWxlbWVudC5TdHlsZV9fYy5sYWJlbFN0eWxlID8gZWxlbWVudC5TdHlsZV9fYy5sYWJlbFN0eWxlIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuU3R5bGVfX2MubGFiZWxWYWx1ZVN0eWxlID0gZWxlbWVudC5TdHlsZV9fYy5sYWJlbFZhbHVlU3R5bGUgPyBlbGVtZW50LlN0eWxlX19jLmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XG4gICAgICBlbGVtZW50LlN0eWxlX19jLmlucHV0Q2xhc3MgPSBlbGVtZW50LlN0eWxlX19jLmlucHV0Q2xhc3MgPyBlbGVtZW50LlN0eWxlX19jLmlucHV0Q2xhc3MgOiBcIlwiO1xuICAgICAgZWxlbWVudC5TdHlsZV9fYy5pbnB1dFN0eWxlID0gZWxlbWVudC5TdHlsZV9fYy5pbnB1dFN0eWxlID8gZWxlbWVudC5TdHlsZV9fYy5pbnB1dFN0eWxlIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuU3R5bGVfX2MuYm9va1N0eWxlID0gZWxlbWVudC5TdHlsZV9fYy5ib29rU3R5bGUgPyBlbGVtZW50LlN0eWxlX19jLmJvb2tTdHlsZSA6IFwiXCI7XG4gICAgICBlbGVtZW50LlN0eWxlX19jLnNob3dMYWJlbCA9IGVsZW1lbnQuU3R5bGVfX2Muc2hvd0xhYmVsID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgZWxlbWVudC5TdHlsZV9fYy5xdWVzdGlvblN0eWxlID0gZWxlbWVudC5TdHlsZV9fYy5xdWVzdGlvblN0eWxlID8gZWxlbWVudC5TdHlsZV9fYy5xdWVzdGlvblN0eWxlIDogXCJcIjtcblxuICAgICAgZWxlbWVudFsnbGFuZ0RpcmVjdGlvbiddID0gZWxlbWVudC5TdHlsZV9fYy5kaXJlY3Rpb24gPyBlbGVtZW50LlN0eWxlX19jLmRpcmVjdGlvbiA6IHRoaXMubGFuZ0RpcmVjdGlvbjtcblxuXG4gICAgICAvL1ZEIDAyQXVnMjQgZGVwZW5kZW50IGZpZWxkIHNob3cvaGlkZSBjaGFuZ2VzXG4gICAgICBpZihlbGVtZW50LlJlZmVyZW5jZV9GaWVsZF9fYyl7XG4gICAgICAgIGVsZW1lbnQuZGVwZW5kZW50UmVmID0gZWxlbWVudC5SZWZlcmVuY2VfRmllbGRfX2M7XG4gICAgICB9XG4gICAgICBpZihlbGVtZW50LlN1Yl9UZXh0X19jKXtcbiAgICAgICAgIGxldCBkZXBlbmRlbmN5T2JqOiBEZXBlbmRlbmN5TWV0YSA9IEpTT04ucGFyc2UoZWxlbWVudC5TdWJfVGV4dF9fYyk7XG4gICAgICAgICBpZihkZXBlbmRlbmN5T2JqLmlzRGVwZW5kZW50RmllbGQpe1xuICAgICAgICAgICAgZWxlbWVudC5Jc19IaWRlX19jID0gdHJ1ZTtcbiAgICAgICAgIH1cbiAgICAgICAgLy8gVkQgMDdBdWcyNCAtIGlzRGVwZW5kZW50RmllbGQgY2hhbmdlXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgIC8vIFZEIDIwQXVnMjQgLSBpc0RlcGVuZGVudEZpZWxkIGNoYW5nZVxuICAgICAgICAgICAgICBpZihjaGFuZ2VWYWx1ZSAhPSB1bmRlZmluZWQgJiYgZGVwZW5kZW5jeU9iai5pc0RlcGVuZGVudEZpZWxkKSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBzdWJzY3JpcHRpb24gZm9yIHRoZSBjaGFuZ2UnKTtcbiAgICAgICAgICAgICAgICBpZihjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAhPSB1bmRlZmluZWQgJiYgY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgPT0gZGVwZW5kZW5jeU9iai5zb3VyY2VRdWVzdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ291dHNpZGUtLT4nLGVsZW1lbnQuSXNfSGlkZV9fYyk7XG4gICAgICAgICAgICAgICAgICAgLy8gZWxlbWVudC5pc0hpZGRlbkZpZWxkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGlmKGRlcGVuZGVuY3lPYmouZGVwZW5kZW50VmFsdWUgPT0gY2hhbmdlVmFsdWUudmFsdWVPYmope1xuICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5Jc19IaWRlX19jID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNlbGVjdGVkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmKGVsZW1lbnQuZGVwZW5kZW50UmVmID09IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkKXtcbiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LlJlZmVyZW5jZV9GaWVsZF9fYyA9IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuSXNfSGlkZV9fYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5wdXQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZWxlY3RlZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVEZXBlbmRlbnRFbGVtZW50cyhlbGVtZW50LklkKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZGVwZW5kZW50IHNlbGVjdGlvbiByZW1vdmUgdGhlIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgICBpZihlbGVtZW50LmRlcGVuZGVudFJlZiA9PSBjaGFuZ2VWYWx1ZS5yZWZlcmVuY2VGaWVsZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LlJlZmVyZW5jZV9GaWVsZF9fYyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGUoZWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5zdWJRdWVzdGlvbnMgPSBbXTtcbiAgICB0aGlzLnNldFN1YlF1ZXN0aW9ucyh0aGlzLnF1ZXN0aW9ucyk7XG4gICAgdGhpcy5wcm9jZXNzVHJhbnNsYXRlZFF1ZXN0aW9ucygpOyBcbiAgfVxuLy8gVkQgMDdBdWcyNCAtIGlzRGVwZW5kZW50RmllbGQgY2hhbmdlXG4gIGhpZGVEZXBlbmRlbnRFbGVtZW50cyhlbGVtZW50SWQpIHtcbiAgICBsZXQgZWxlbWVudHNUb0hpZGUgPSB0aGlzLnF1ZXN0aW9ucy5maWx0ZXIoZWwgPT4ge1xuICAgICAgICBpZiAoZWwuU3ViX1RleHRfX2MpIHtcbiAgICAgICAgICAgIGxldCBkZXBPYmogPSBKU09OLnBhcnNlKGVsLlN1Yl9UZXh0X19jKTtcbiAgICAgICAgICAgIHJldHVybiBkZXBPYmouc291cmNlUXVlc3Rpb25JZCA9PSBlbGVtZW50SWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuXG4gICAgZWxlbWVudHNUb0hpZGUuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgIGVsLklzX0hpZGVfX2MgPSB0cnVlO1xuICAgICAgICBlbC5pbnB1dCA9ICcnO1xuICAgICAgICBlbC5zZWxlY3RlZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZShlbCk7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGhpZGUgZWxlbWVudHMgZGVwZW5kZW50IG9uIHRoaXMgb25lXG4gICAgICAgIHRoaXMuaGlkZURlcGVuZGVudEVsZW1lbnRzKGVsLklkKTtcbiAgICB9KTtcbn1cblxuICBjbGVhclNRRXJyb3IocXVlc0lkKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBRdWVzdGlvbkJvb2tDb21wb25lbnQgY2xlYXJTUUVycm9yJyk7XG4gICAgdmFyIHNxTGlzdCA9IHRoaXMuc3ViUXVlc3Rpb25zPy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uSWQgPT0gcXVlc0lkKTtcbiAgICBmb3IgKHZhciBzcSBvZiBzcUxpc3QpIHtcbiAgICAgIHNxLmVycm9yID0gbnVsbDtcbiAgICB9XG4gIH1cbiAvLyBWRCAxMUp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICBwcm9jZXNzVHJhbnNsYXRlZFF1ZXN0aW9ucygpe1xuICAgIGlmICh0aGlzLnRyYW5zbGF0ZWRRdWVzdGlvbnMgJiYgdGhpcy50cmFuc2xhdGVkUXVlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2goKG9yZ1F1ZXN0aW9uOiBhbnkpPT4ge1xuICAgICAgICAgIHRoaXMudHJhbnNsYXRlZFF1ZXN0aW9ucy5mb3JFYWNoKCh0cmFuc1F1ZXN0aW9uOmFueSkgPT4ge1xuICAgICAgICAgICAgIGlmKG9yZ1F1ZXN0aW9uLlVuaXF1ZV9JZGVudGlmaWVyX19jID09IHRyYW5zUXVlc3Rpb24uaWRlbnRpZmllcil7XG4gICAgICAgICAgICAgICBvcmdRdWVzdGlvbi5RdWVzdGlvbl9UZXh0X19jID0gdHJhbnNRdWVzdGlvbi5sYWJlbDtcbiAgICAgICAgICAgICAgIG9yZ1F1ZXN0aW9uLlF1ZXN0aW9uX19jID0gdHJhbnNRdWVzdGlvbi5wbGFjZUhvbGRlcjtcbiAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgY29uc29sZS5sb2coJ29yaWdpbmFsUXVlc3Rpb24nICsgdGhpcy5xdWVzdGlvbnMpO1xuICAgICBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgc2V0U3ViUXVlc3Rpb25zKHJlY29yZHMpIHtcbiAgICBjb25zb2xlLmxvZygnaW5zaWRlIFF1ZXN0aW9uYm9va0NvbXBvbmVudCBzZXRTdWJRdWVzdGlvbnMnKTtcbiAgICB0aGlzLnN1YlF1ZXN0aW9ucy5wdXNoKHJlY29yZHMpO1xuICB9XG5cbiAgLy8gQ2FwdHVyZSBhbmQgUHJvY2VzcyBDaGlsZCBFdmVudFxuICBjaGlsZEV2ZW50Q2FwdHVyZShldmVudCwgcXVlcz86YW55KSB7XG4gICAgbGV0IGRyb3Bkb3duRGF0YSA9ICB7fTtcbiAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgUXVlc3Rpb25ib29rQ29tcG9uZW50IGNoaWxkRXZlbnRDYXB0dXJlJyk7XG4gICAgY29uc29sZS5sb2coZXZlbnQpO1xuICAgIHRoaXMuY2hhbmdlU2VydmljZS5hbm5vdW5jZUNoYW5nZShldmVudCk7XG4gICAgLy8gUHJvY2VzcyB0aGUgY2hhbmdlcyBpbiBUYWJsZSBhbmQgRHJvcGRvd24gYW5kIHN0b3JlIHJpZ2h0IHZhbHVlIGluIHF1ZXMuaW5wdXRcbiAgICBpZihxdWVzLlR5cGVfX2MgPT0gJ0Ryb3Bkb3duJyB8fHF1ZXMuVHlwZV9fYyA9PSAnUmFkaW8nICkge1xuICAgICAgLy8gSEEgMTlKQU4yNCBDb3JyZWN0aW9uIG9mIGRyb3Bkb3duIHZhbHVlc1xuICAgICAgcXVlcy5zZWxlY3RlZE9iaiA9IGV2ZW50LnZhbHVlT2JqID8gZXZlbnQudmFsdWVPYmogOiBudWxsO1xuICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50LnNlbGVjdGVkT2JqID8gZXZlbnQuc2VsZWN0ZWRPYmogOiBldmVudC52YWx1ZU9iajtcbiAgICAgIHF1ZXMuc2VsZWN0ZWRWYWx1ZSA9IGV2ZW50LnZhbHVlT2JqID8gZXZlbnQudmFsdWVPYmogOiBudWxsO1xuICAgICAgLy8gZW1pdCB0aGUgZHJvcGRvd24gZGF0YSB0byBwYXJlbnRcbiAgICAgIGRyb3Bkb3duRGF0YVsnZXZlbnQnXSA9IGV2ZW50LnZhbHVlT2JqO1xuICAgICAgZHJvcGRvd25EYXRhWydxdWVzJ10gPSBxdWVzO1xuICAgICAgaWYoZHJvcGRvd25EYXRhWydldmVudCddKXtcbiAgICAgICAgdGhpcy5oYW5kbGVEcm9wRG93bi5lbWl0KGRyb3Bkb3duRGF0YSk7XG4gICAgICB9ICAvLyBWRCAyMURFQzIzIC0gZGVwZW5kZW50IGZpZWxkIGNoYW5nZVxuICAgIH0gZWxzZSBpZihxdWVzLlR5cGVfX2MgPT0gJ0xvY2F0aW9uJyl7XG4gICAgICBxdWVzLmlucHV0ID0gZXZlbnQudmFsdWVPYmo7XG4gICAgICBxdWVzLnNlbGVjdGVkVmFsdWUgPSBldmVudC52YWx1ZU9iai5hZGRyZXNzO1xuICAgIH1lbHNlIGlmKHF1ZXMuVHlwZV9fYyA9PSAnRmlsZScpeyBcbiAgICAgIHF1ZXMuaW5wdXQgPSB0aGlzLnNlbGVjdGVkRmlsZURhdGEgPSBldmVudDtcbiAgICB9ZWxzZSBpZihxdWVzLlR5cGVfX2MgPT0gJ0RhdGUnIHx8IHF1ZXMuVHlwZV9fYyA9PSAnRGF0ZVRpbWUnKXsgLy8gSEEgMjRKQU4yNCBDb252ZXJ0aW5nIERhdGUgYW5kIERhdGVUaW1lIHRvIFVUQ1xuICAgICAgIGlmKGV2ZW50LnZhbHVlKXtcbiAgICAgICAgbGV0IGQgPSBuZXcgRGF0ZShldmVudC52YWx1ZSk7XG4gICAgICAgIGxldCB1dGNTdHJpbmcgPSBkLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSB1dGNTdHJpbmc7XG4gICAgICAgfWVsc2Uge1xuICAgICAgICBxdWVzLmlucHV0ID0gJyc7XG4gICAgICAgfVxuICAgIH1lbHNlIGlmKHF1ZXMuVHlwZV9fYyA9PSAnTGlzdCcpe1xuICAgICAgLy8gVkQgMjBBdWcyNCBoYW5kbGluZyB0aGUgbGlzdCB0eXBlICBoYW5kbGUgbXVsdGlwbGUgb2JqZWN0IHZhbHVlc1xuICAgICAgcXVlcy5pbnB1dCA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoZXZlbnQudmFsdWVPYmosZXZlbnQuZmllbGQpO1xuICAgIH1lbHNle1xuICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50O1xuICAgIH1cbiAgICAvLyB2YWxpZGF0aW5nICAgZXJyb3IgbWVzc2FnZVxuICAgIGNvbnN0IGhhc0Vycm9yID0gcXVlcy5FcnJvcl9NZXNzYWdlX19jICYmICgocXVlcy5UeXBlX19jID09PSAnRmlsZScgJiYgcXVlcy5pbnB1dC5sZW5ndGggPT0gMCkgfHwgKHF1ZXMuVHlwZV9fYyAhPSAnRmlsZScgJiYgIXF1ZXMuaW5wdXQpKTtcbiAgICBxdWVzLmVycm9yID0gaGFzRXJyb3IgPyBuZXcgRXJyb3JXcmFwcGVyKCkgOiBudWxsO1xuICAgICAgLy8gaWYocXVlcy5Jc19PcHRpb25hbF9fYyAmJiAhcXVlcy5pbnB1dCl7XG4gICAgICAvLyAgIHF1ZXMuZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyXG4gICAgICAvLyB9ZWxzZXtcbiAgICAgIC8vICAgcXVlcy5lcnJvciA9IG51bGw7ICBcbiAgICAgIC8vIH1cbiAgXG4gICAgLy8gT25jZSB0aGUgcmlnaHQgdmFsdWUgaXMgc3RvcmVkIGluIHF1ZXMuaW5wdXQgc3RvcmUgdGhlIHF1ZXMgKHdpdGggaW5wdXQpIGluIHN0b3JhZ2VTZXJ2aWNlXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGUocXVlcyk7XG4gICAgLy8gVkQgMTlKdWwwMSAtIGdldCB1cGRhdGVkIHF1ZXN0aW9uXG4gICAgdGhpcy5oYW5kbGVRdWVzdGlvbi5lbWl0KHF1ZXMpO1xuICB9XG4gIGRlbGV0ZUZpbGUoZmlsZURhdGE6YW55KXtcbiAgICBjb25zb2xlLmxvZygnZmlsZURBVEEnLGZpbGVEYXRhKVxuICB9XG4gIGdldERyb3BEb3duKGV2ZW50OmFueSl7XG4gICAgdGhpcy5oYWRsZURyb3BEb3duRGVwZW5kZW50LmVtaXQoZXZlbnQpO1xuICB9XG59XG4iLCI8IS0tIEhBIDIwREVDMjMgQm9vayBTdHlsZSBmcm9tIHNhbGVzZm9yY2UgLS0+XG48IS0tIEhBIDI4REVDMjMgIFJlbW92ZWQgSXNTaGVuZ2VsKHJlbW92YWwgb2Ygc2hlbmdlbCB2YWx1ZXMgYXBwbGllcyBmb3IgdGhpcyByZWFzb24pIGFuZCBkaXJlY3Qgc3R5bGluZyBvZiBib29rcyB0byBhdm9pZCBzdHlsaW5nIGlzc3Vlcy0tPlxuPCEtLSBIQSAxOEpBTjI0ICBBZGRlZCBjbGFzcyBmb3Igc3R5bGluZyAtLT5cbjxkaXYgW3N0eWxlXT1cImJvb2tTdHlsZVwiIGNsYXNzPVwiY29udGVudC1ib3ggZm9ybS1ncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgICA8IS0tIEhBIDIwREVDMjMgRGlyZWN0aXZlIGFuZCBRdWVzdGlvbiBTdHlsZSBmcm9tIHNhbGVzZm9yY2UgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtjbGFzc109XCInY29sLWxnLScgKyBxdWVzLlNpemVfX2MgKyAnIHBhZGRpbmdub25lJ1wiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgcXVlcyBvZiBxdWVzdGlvbnM7bGV0IGkgPSBpbmRleFwiIFtpZF09XCJxdWVzLklkXCIgW2Rpcl09XCJxdWVzLmxhbmdEaXJlY3Rpb25cIiBbc3R5bGVdPVwicXVlcz8uU3R5bGVfX2M/LnF1ZXN0aW9uU3R5bGVcIj5cbiAgICAgICAgICAgIDwhLS0gU3ViIFF1ZXN0aW9uIExhYmVsIC0tPlxuICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzIExhYmVsIFN0eWxlIGZyb20gc2FsZXNmb3JjZSAtLT5cbiAgICAgICAgICAgIDwhLS0gVkQgMDlNYXkyNCBpcyBoaWRlIGZpZWxkIGNoYW5nZS0tPlxuICAgICAgICAgPGRpdiAqbmdJZj1cIiFxdWVzLklzX0hpZGVfX2NcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdEYXRlVGltZSdcIj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIFZEIDIwSlVOMjQgLSBoZWxwIHRleHQgY2hhbmdlcy0tPlxuICAgICAgICAgICAgPCEtLSBWRCAwMUF1ZzI0IC0gdmFsaWRhdGlvbiBjaGFuZ2UtLT5cbiAgICAgICAgICAgIDwhLS0gLy8gVkQgMDJBdWcyNCAtIGxhYmVsIHZhbHVlIHN0eWxlLS0+XG4gICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgZG93bjI6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jIH1cIiAqbmdJZj1cInF1ZXMuU3R5bGVfX2Muc2hvd0xhYmVsXCIgW3N0eWxlXT1cInF1ZXMuU3R5bGVfX2MubGFiZWxTdHlsZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCInZGlzLWZsZXggc2hlbmdlbC1teXQtZm9udDMgbXl0LWZvbnQ3ICdcIiBbc3R5bGVdPVwicXVlcy5TdHlsZV9fYy5sYWJlbFZhbHVlU3R5bGVcIj57eyBxdWVzPy5RdWVzdGlvbl9UZXh0X19jIH19IFxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICAqbmdJZj1cInF1ZXMuSXNfT3B0aW9uYWxfX2NcIiBzdHlsZT1cImNvbG9yOiByZWQ7XCI+KjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5RdWVzdGlvbl9UZXh0X19jICYmIHF1ZXM/LkhlbHBfVGV4dF9fY1wiIGNsYXNzPVwiaWNvblwiIFttYXRUb29sdGlwXT1cInF1ZXM/LkhlbHBfVGV4dF9fY1wiPmk8L2Rpdj48L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gLy8gVkQgMTJKdW4yNCAtIHJlYWRvbmx5IGNoYW5nZS0tPlxuICAgICAgICAgICAgPCEtLSBEYXRlVGltZSAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdEYXRlVGltZSdcIj5cbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1kYXRlLXBpY2tlciBbbWluRGF0ZV09XCJxdWVzLm1pbkRhdGVcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5FcnJvcl9NZXNzYWdlX19jXCIgW3JlYWRPbmx5XT1cInF1ZXMuUmVhZF9Pbmx5X19jXCIgW2RhdGVdPVwicXVlcy5pbnB1dFwiIChkYXRlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tZGF0ZS1waWNrZXI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgIDwhLS0gRGF0ZS0tPlxuICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdEYXRlJ1wiPlxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRhdGUgIFtkYXRlXT1cInF1ZXMuaW5wdXRcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5FcnJvcl9NZXNzYWdlX19jXCIgW3JlYWRPbmx5XT1cInF1ZXMuUmVhZF9Pbmx5X19jXCIgKGRhdGVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1kYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICA8IS0tIFRpbWUtLT5cbiAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnVGltZSdcIj5cbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS10aW1lICBbdGltZV09XCJxdWVzLmlucHV0XCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuRXJyb3JfTWVzc2FnZV9fY1wiIFtyZWFkT25seV09XCJxdWVzLlJlYWRfT25seV9fY1wiICh0aW1lQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tdGltZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICA8IS0tIGNhbGVuZGFyICAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdDYWxlbmRhcidcIj5cbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1jYWxlbmRhciBbcXVlc3Rpb25dPVwicXVlc1wiICAoZXZlbnRTZWxlY3RlZCk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+PC9hcHAtY3VzdG9tLWNhbGVuZGFyPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gVGV4dCAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUZXh0J1wiPlxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWlucHV0IFt2YWx1ZV09XCJxdWVzLmlucHV0XCIgW25nQ2xhc3NWYWx1ZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAnZGlzLWZsZXggZHQtbGluZSBkYXRlLWxpbmUgYm9va1RleHQgYm94b3V0bGluZSBteXQtZm9udDEnOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEJveDogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcbiAgICAgICAgICAgICAgICAgICAgfVwiIFtxdWVzdGlvbl09XCJxdWVzXCIgW3JlYWRPbmx5XT1cInF1ZXMuUmVhZF9Pbmx5X19jXCIgW2lkVmFsdWVdPVwicXVlcy5UcmFja2luZ19JRF9fY1wiIFtmb2N1c0V2ZW50XT1cImNsZWFyU1FFcnJvcihxdWVzLklkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJxdWVzLmVycm9yXCIgW3BsYWNlaG9sZGVyXT1cInF1ZXMuUXVlc3Rpb25fX2NcIiAoaW5wdXRWYWx1ZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWlucHV0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDwhLS0gZm9yIHBpY2sgbG9jYXRpb24gLS0+XG4gICAgICAgICAgICA8IS0tICAgVkQgMjFERUMyMyAtIGRlcGVuZGVudCBmaWVsZCBjaGFuZ2UgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnTG9jYXRpb24nXCI+XG4gICAgICAgICAgICA8IS0tIEhBMTAwMTIwMjQgQWRkZWQgQXBpIGtleSBhcyBpbnB1dCAtLT5cbiAgICAgICAgICAgICAgICA8YXBwLXBpY2stbG9jYXRpb24gW2FwaUtleV09XCJxYkl0ZW1bJ0FwaV9LZXlfX2MnXVwiIFthZGRyZXNzXT1cInF1ZXMuc2VsZWN0ZWRWYWx1ZVwiIFtxdWVzdGlvbl09XCJxdWVzXCIgKGxvY2F0aW9uU2VsZWN0ZWQpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLXBpY2stbG9jYXRpb24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBmb3IgIHRleHQgYXJlYSAgIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1RleHRBcmVhJ1wiPlxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXRleHQtYXJlYSBbcXVlc3Rpb25dPVwicXVlc1wiIFtyZWFkT25seV09XCJxdWVzLlJlYWRfT25seV9fY1wiIFt2YWx1ZV09XCJxdWVzLmlucHV0XCIgW3Jvd3NdPVwiM1wiIFtlcnJvcl09XCJxdWVzLmVycm9yXCIgW3BsYWNlaG9sZGVyXT1cInF1ZXMuUXVlc3Rpb25fX2MgXCJcbiAgICAgICAgICAgICAgICAgICAgKHRleHRhcmVhVmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPjwvYXBwLWN1c3RvbS10ZXh0LWFyZWE+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBFbWFpbCAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdFbWFpbCdcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgcmVhZE9ubHk9XCJxdWVzLlJlYWRfT25seV9fY1wiIFsobmdNb2RlbCldPVwicXVlcy5pbnB1dFwiIFtpZF09XCJxdWVzLklkXCIgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJTUUVycm9yKHF1ZXMuSWQpXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgcXVlcy5lcnJvciA/ICdyZWQnIDogJycgfX1cIiBwbGFjZWhvbGRlcj1cInt7IHF1ZXMuUXVlc3Rpb25fX2MgfX1cIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gVGFibGUgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnVGFibGUnXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS10YWJsZSBbcXVlc3Rpb25dPVwicXVlc1wiIFthcGlNZXRhXT1cInF1ZXMuU3ViX1RleHRfX2NcIiAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuSWQpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLXRhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPCEtLSBUYWJsZSBBcHBlbmRpeCAtLT5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1RhYmxlQXBwZW5kaXgnXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICA8YXBwLXRhYmxlLWFwcGVuZGl4IFtxdWVzdGlvbl09XCJxdWVzXCIgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLklkKVwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLXRhYmxlLWFwcGVuZGl4PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgPCEtLSBsaXN0IC0tPlxuICAgICAgICAgICAgIDwhLS0gVkQgMjBBdWcyNCB1c2VkIGNvcnJlY3QgYXR0cmlidXRlIC0tPlxuICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdMaXN0J1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1zZWFyY2gtYm94IFtxdWVzdGlvbl09XCJxdWVzXCIgW3JlYWRPbmx5XT1cInF1ZXMuUmVhZF9Pbmx5X19jXCIgW2FwaU1ldGFdPVwicXVlcy5TdWJfVGV4dF9fY1wiIFtpZF09XCJxdWVzLklkXCIgW3BsYWNlSG9sZGVyVGV4dF09XCJxdWVzLlF1ZXN0aW9uX19jXCIgIFtmaWx0ZXJOYW1lXT1cInF1ZXMuaW5wdXRcIiAoc2VhcmNoVmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxuICAgICAgICAgICAgICAgIDwvbGliLXNlYXJjaC1ib3g+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBEcm9wZG93biAtLT5cbiAgICAgICAgICAgIDwhLS0gSEEgMDlGRUIyNCBBZGRlZCBjb25kaXRpb24gb2Ygc3FPcHRpb24gdG8gdGhlIGRyb3Bkb3duIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0Ryb3Bkb3duJyAmJiBxdWVzPy5RdWVzdGlvbl9PcHRpb25zX19yPy5yZWNvcmRzXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPiA8IS0tIFZEIDE5SkFOMjQgLSBnZXR0aW5nIHRva2VuIGFzIGlucHV0IC0tPlxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRyb3Bkb3duIFtvcHRpb25zXT1cInF1ZXMuUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzXCIgW3Rva2VuXT1cInRva2VuXCJcbiAgICAgICAgICAgICAgICAgICAgW2FwaU1ldGFdPVwicXVlcy5TdWJfVGV4dF9fY1wiIFtpZF09XCJxdWVzLklkXCIgW3NlbGVjdGVkVmFsdWVdPVwicXVlcy5zZWxlY3RlZFZhbHVlXCIgcGxhY2Vob2xkZXI9XCItLS17eydzZWxlY3QnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fS0tLVwiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5FcnJvcl9NZXNzYWdlX19jXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICBbcmVmZXJlbmNlRmllbGRdPVwicXVlcy5SZWZlcmVuY2VfRmllbGRfX2NcIlxuICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwicXVlcy5SZWFkX09ubHlfX2NcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuSWQpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCJxdWVzPy5pbnB1dD8ubGVuZ3RoID4gMFwiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSAvLyBWRCAwMkF1ZzI0IGN1c3RvbS1yYWRpbyBjb21wb25lbnQgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnUmFkaW8nICYmIHF1ZXM/LlF1ZXN0aW9uX09wdGlvbnNfX3I/LnJlY29yZHNcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXJhZGlvIFtvcHRpb25zXT1cInF1ZXMuUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzXCIgW3Rva2VuXT1cInRva2VuXCJcbiAgICAgICAgICAgICAgICAgICAgW2FwaU1ldGFdPVwicXVlcy5TdWJfVGV4dF9fY1wiIFtpZF09XCJxdWVzLklkXCIgW3NlbGVjdGVkVmFsdWVdPVwicXVlcy5zZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yTWVzc2FnZV09XCJxdWVzLkVycm9yX01lc3NhZ2VfX2NcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWZlcmVuY2VGaWVsZF09XCJxdWVzLlJlZmVyZW5jZV9GaWVsZF9fY1wiXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJxdWVzLlJlYWRfT25seV9fY1wiXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5JZClcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tcmFkaW8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBBdHRhY2htZW50IC8gRmlsZXMgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRmlsZSdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgIDxhcHAtZmlsZS11cGxvYWQgW2xpbWl0RmlsZVVwbG9hZGluZ109XCI1XCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcXVlc3Rpb25dPVwicXVlc1wiIFthbGxGaWxlc109XCJxdWVzLmlucHV0XCIgW3RhYmxlRmlsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkRmlsZURhdGEpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiIChkZWxldGVkRmlsZURhdGEpPVwiZGVsZXRlRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbaXNEZWxldGVGaWxlQnV0dG9uVmlzaWJsZV09XCJ0cnVlXCI+PC9hcHAtZmlsZS11cGxvYWQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdQb3BVcE1lc3NhZ2UnXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICA8YXBwLWRlcGVuZGVudC10YWJsZSBbYWxlcnRNZXNzYWdlXT1cInF1ZXMuRXJyb3JfTWVzc2FnZV9fY1wiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWRlcGVuZGVudC10YWJsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0xhYmVsJ1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tbGFiZWwgW2xhYmVsU3R5bGVdPVwicXVlcy5UaXRsZV9fY1wiIFtsYWJlbFZhbHVlXT1cInF1ZXMuUXVlc3Rpb25fX2NcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICA8IS0tIC8vIFZEIDAyQXVnMjQgaW1hZ2UgY29tcG9uZW50IC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0ltYWdlJ1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20taW1hZ2UgW3F1ZXN0aW9uXT1cInF1ZXNcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20taW1hZ2U+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gMDhOT1YyMyAtIGJ1dHRvbiB0eXBlIHF1ZXN0aW9uIGFkZGVkIC0tPlxuICAgICAgICAgICAgIDwhLS0gQnV0dG9uIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0J1dHRvbidcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWJ1dHRvbiBbaGVpZ2h0XT1cIic1MHB4J1wiICBcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiJzE1MHB4J1wiIFxuICAgICAgICAgICAgICAgIFtidXR0b25UZXh0XT1cInF1ZXM/LlF1ZXN0aW9uX19jXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwicXVlcz8uUXVlc3Rpb25fX2NcIlxuICAgICAgICAgICAgICAgIChidXR0b25WYWx1ZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzICBUaGlzIGlzIHRvIGxvYWQgYm9vayB0eXBlIHF1ZXN0aW9ucy0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0Jvb2snXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBIQSAwOUZFQjI0IEFkZGVkIHRlcm5hcnkgb3BlcmF0b3IgLS0+XG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbmJvb2sgW3FiSXRlbV09XCJxdWVzLnFiSXRlbVwiIFtsYWJlbFZhbHVlXT1cImxhYmVsVmFsdWVcIiBbcXVlc3Rpb25zXT1cInF1ZXMucWJJdGVtPy5RdWVzdGlvbnNfX3I/LnJlY29yZHNcIiAgKGhhbmRsZURyb3BEb3duKT1cImdldERyb3BEb3duKCRldmVudClcIj48L2xpYi1xdWVzdGlvbmJvb2s+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4iXX0=
371
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25ib29rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFPckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUVqRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNoRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPckcsTUFBTSxPQUFPLHFCQUFxQjtJQTJCWjtJQUNWO0lBQ0E7SUFDQTtJQUNEO0lBQ0M7SUFDa0I7SUFoQ25CLE1BQU0sQ0FBZTtJQUNyQixZQUFZLENBQVc7SUFDdkIsbUJBQW1CLEdBQVcsRUFBRSxDQUFBLENBQUUsbUNBQW1DO0lBQ3JFLFNBQVMsQ0FBYTtJQUN0QixZQUFZLENBQUs7SUFDakIsVUFBVSxDQUFRO0lBQ2xCLEtBQUssQ0FBUSxDQUFDLHNDQUFzQztJQUNuRCxjQUFjLEdBQXFCLElBQUksWUFBWSxFQUFPLENBQUM7SUFDM0QsY0FBYyxHQUFxQixJQUFJLFlBQVksRUFBTyxDQUFDLENBQUMsb0NBQW9DO0lBQ2pHLFlBQVksQ0FBSztJQUMyQixXQUFXLENBQXlCO0lBQ3pGLFlBQVksQ0FBYTtJQUN6QixnQkFBZ0IsR0FBVSxFQUFFLENBQUM7SUFDN0IsY0FBYyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3JELHVFQUF1RTtJQUN2RSxLQUFLLENBQWU7SUFDcEIsaURBQWlEO0lBQ2pELEtBQUssQ0FBTTtJQUNYLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDdEIsU0FBUyxDQUFNO0lBQ2YsWUFBWSxDQUFlO0lBQ2pCLHNCQUFzQixHQUFxQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ3hFLDhCQUE4QjtJQUNwQixrQkFBa0IsR0FBcUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUM3RCxnQkFBZ0IsR0FBUSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRXpDLFlBQW9CLFNBQTRCLEVBQ3RDLFdBQXdCLEVBQ3hCLGFBQTRCLEVBQzVCLGNBQThCLEVBQy9CLFdBQXdCLEVBQ3ZCLEdBQXNCLEVBQ0osUUFBa0I7UUFOMUIsY0FBUyxHQUFULFNBQVMsQ0FBbUI7UUFDdEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQy9CLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3ZCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ0osYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUU5QyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUNuRCxzQ0FBc0M7UUFDdEMsK0JBQStCO1FBQy9CLDBEQUEwRDtRQUMxRCwyQkFBMkI7UUFDM0IsSUFBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBQztZQUN2Qix1RUFBdUU7WUFDdkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQzlILElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzFILElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQzNHO2FBQ0c7WUFDRixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUM7Z0JBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUc7b0JBQ3JCLFlBQVksRUFBRyxFQUFFO29CQUNqQixZQUFZLEVBQUcsRUFBRTtvQkFDakIsaUJBQWlCLEVBQUcsRUFBRTtvQkFDdEIsWUFBWSxFQUFHLEVBQUU7b0JBQ2pCLFlBQVksRUFBRyxFQUFFO29CQUNqQixXQUFXLEVBQUcsRUFBRTtvQkFDaEIsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLFdBQVcsRUFBRyxLQUFLO29CQUNuQixlQUFlLEVBQUUsRUFBRTtpQkFDcEIsQ0FBQzthQUNIO1NBQ0Y7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNySCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2xJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQy9CLElBQUksV0FBVyxHQUFHLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBRTtZQUM3QyxJQUFJLFFBQVEsR0FBRyxXQUFXLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQTtZQUNuRCxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO1lBQ3BDLHFEQUFxRDtZQUNyRCx1RUFBdUU7WUFDdkUsSUFBRyxPQUFPLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBQztnQkFDNUIsSUFBRyxPQUFPLENBQUMsMkJBQTJCLENBQUMsRUFBQztvQkFDdEMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDO29CQUMxRCxJQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUM7d0JBQzdCLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEdBQUcsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDO3FCQUMxSjt5QkFDRzt3QkFDRixFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO3FCQUNwRDtvQkFFRCw2QkFBNkI7b0JBQzdCLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNoSSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDaEksRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzdJLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNoSSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDaEksRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzdILEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUMvSCxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDekksRUFBRSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztvQkFFMUgscUNBQXFDO29CQUNyQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRTt3QkFDakUsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDO3dCQUNoSCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDMUgsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQzFILGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUN6SSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDMUgsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQzFILGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUN2SCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzt3QkFDekgsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFR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b21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIFZpZXdDaGlsZCwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFF1ZXN0aW9uLCBRdWVzdGlvbkJvb2sgfSBmcm9tICcuLi8uLi93cmFwcGVyJztcbmltcG9ydCB7IFNhbGVzZm9yY2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NhbGVzZm9yY2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgRXJyb3JXcmFwcGVyIH0gZnJvbSAnLi4vLi4vbW9kZWwvZXJyb3JXcmFwcGVyJztcbi8vIEhBIDE5REVDMjMgaW1wb3J0ZWQgdHJhbnNsYXRpb24gc2VydmljZVxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9pMThuLnNlcnZpY2UnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERlcGVuZGVuY3lNZXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9kZXBlbmRlbmN5TWV0YSc7XG5pbXBvcnQgeyBDb21wb25lbnRob3N0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jb21wb25lbnRob3N0L2NvbXBvbmVudGhvc3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IEN1c3RvbUNhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jdXN0b20tY2FsZW5kYXIvY3VzdG9tLWNhbGVuZGFyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1xdWVzdGlvbmJvb2snLFxuICB0ZW1wbGF0ZVVybDogJy4vcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVlc3Rpb25ib29rLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbmJvb2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBxYkl0ZW06IFF1ZXN0aW9uQm9vaztcbiAgQElucHV0KCkgcXVlc3Rpb25JdGVtOiBRdWVzdGlvbjtcbiAgQElucHV0KCkgdHJhbnNsYXRlZFF1ZXN0aW9ucyA6IGFueVtdID0gW10gIC8vIFZEIDExSnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gIEBJbnB1dCgpIHF1ZXN0aW9uczogUXVlc3Rpb25bXTtcbiAgQElucHV0KCkgZXJyb3JGaWVsZElkOmFueTtcbiAgQElucHV0KCkgbGFiZWxWYWx1ZTpzdHJpbmc7IFxuICBASW5wdXQoKSB0b2tlbjpzdHJpbmc7IC8vIFZEIDE5SkFOMjQgLSBnZXR0aW5nIHRva2VuIGFzIGlucHV0XG4gIEBPdXRwdXQoKSBoYW5kbGVEcm9wRG93bjpFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgaGFuZGxlUXVlc3Rpb246RXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTsgLy8gVkQgMTlKdWwwMSAtIGdldCB1cGRhdGVkIHF1ZXN0aW9uXG4gIEBJbnB1dCgpIGRyb3BEb3duRGF0YTphbnk7XG4gIEBWaWV3Q2hpbGQoQ29tcG9uZW50aG9zdERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgZHluYW1pY0hvc3Q6IENvbXBvbmVudGhvc3REaXJlY3RpdmU7XG4gIHN1YlF1ZXN0aW9uczogUXVlc3Rpb25bXTtcbiAgc2VsZWN0ZWRGaWxlRGF0YTogYW55W10gPSBbXTtcbiAgbG9hZENvbXBvbmVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgLy8gSEEgMjhERUMyMyBBZGRlZCBzdHlsaW5nIGFuZCBsb2dpY3MgdG8gbG9hZCB0aGUgYm9vayB0eXBlIHF1ZXN0aW9ucyBcbiAgcWJSZWY6IFF1ZXN0aW9uQm9vaztcbiAgLy8gIEhBIDE5REVDMjMgRGVjbGFyYXRpb24gZm9yIFNhbGVzZm9yY2UgU3R5bGluZ1xuICBzdHlsZTogYW55O1xuICBsYW5nRGlyZWN0aW9uID0gJ2x0cic7XG4gIGJvb2tTdHlsZTogYW55O1xuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgQE91dHB1dCgpIGhhZGxlRHJvcERvd25EZXBlbmRlbnQ6RXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xuICBAT3V0cHV0KCkgaGFuZGxlQ2FsZW5kYXJEYXRlOkV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgYm9va1F1ZXN0aW9uc01hcDogYW55ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsIFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlLFxuICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50XG4gICAgKSB7IFxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ2luc2lkZSBRdWVzdGlvbkJvb2tDb21wb25lbnQgT25Jbml0Jyk7XG4gICAgLy8gY29uc29sZS5sb2coJ3FiSXRlbScsIHRoaXMucWJJdGVtKTtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9ucyk7XG4gICAgLy8gIEhBIDE5REVDMjMgTG9naWMgZm9yIFF1ZXN0aW9uIEJvb2sgU3R5bGluZyhTbGFlc2ZvcmNlKVxuICAgIC8vIEhBIDA5RkVCMjQgQWRkZWQgdGVybmFyeVxuICAgIGlmKHRoaXMucWJJdGVtPy5TdHlsZV9fYyl7XG4gICAgICAvLyBIQSAyOERFQzIzIEFkZGVkIHN0eWxpbmcgYW5kIGxvZ2ljcyB0byBsb2FkIHRoZSBib29rIHR5cGUgcXVlc3Rpb25zIFxuICAgICAgdGhpcy5xYkl0ZW0uU3R5bGVfX2MgPSB0eXBlb2YgdGhpcy5xYkl0ZW0uU3R5bGVfX2MgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSgnJyt0aGlzLnFiSXRlbT8uU3R5bGVfX2MpIDogdGhpcy5xYkl0ZW0uU3R5bGVfX2M7XG4gICAgICB0aGlzLnFiSXRlbS5TdHlsZV9fYy5sYWJlbENsYXNzID0gdGhpcy5xYkl0ZW0uU3R5bGVfX2M/LmxhYmVsQ2xhc3MgPyB0aGlzLnFiSXRlbS5TdHlsZV9fYz8ubGFiZWxDbGFzcyA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5TdHlsZV9fYy5sYWJlbFN0eWxlID0gdGhpcy5xYkl0ZW0uU3R5bGVfX2M/LmxhYmVsU3R5bGUgPyB0aGlzLnFiSXRlbS5TdHlsZV9fYz8ubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5TdHlsZV9fYy5sYWJlbFZhbHVlU3R5bGUgPSB0aGlzLnFiSXRlbS5TdHlsZV9fYz8ubGFiZWxWYWx1ZVN0eWxlID8gdGhpcy5xYkl0ZW0uU3R5bGVfX2M/LmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5TdHlsZV9fYy5pbnB1dENsYXNzID0gdGhpcy5xYkl0ZW0uU3R5bGVfX2M/LmlucHV0Q2xhc3MgPyB0aGlzLnFiSXRlbS5TdHlsZV9fYz8uaW5wdXRDbGFzcyA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5TdHlsZV9fYy5pbnB1dFN0eWxlID0gdGhpcy5xYkl0ZW0uU3R5bGVfX2MuaW5wdXRTdHlsZSA/IHRoaXMucWJJdGVtLlN0eWxlX19jPy5pbnB1dFN0eWxlIDogXCJcIjtcbiAgICAgIHRoaXMucWJJdGVtLlN0eWxlX19jLmJvb2tTdHlsZSA9IHRoaXMucWJJdGVtLlN0eWxlX19jPy5ib29rU3R5bGUgPyB0aGlzLnFiSXRlbS5TdHlsZV9fYz8uYm9va1N0eWxlIDogXCJcIjtcbiAgICAgIHRoaXMucWJJdGVtLlN0eWxlX19jLnNob3dMYWJlbCA9IHRoaXMucWJJdGVtLlN0eWxlX19jPy5zaG93TGFiZWwgPyB0aGlzLnFiSXRlbS5TdHlsZV9fYz8uc2hvd0xhYmVsIDogdHJ1ZTtcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIGlmKCB0aGlzLnFiSXRlbSl7XG4gICAgICAgIHRoaXMucWJJdGVtLlN0eWxlX19jID0ge1xuICAgICAgICAgIFwibGFiZWxDbGFzc1wiIDogXCJcIixcbiAgICAgICAgICBcImxhYmVsU3R5bGVcIiA6IFwiXCIsXG4gICAgICAgICAgXCJsYWJlbFZhbHVlU3R5bGVcIiA6IFwiXCIsXG4gICAgICAgICAgXCJpbnB1dENsYXNzXCIgOiBcIlwiLFxuICAgICAgICAgIFwiaW5wdXRTdHlsZVwiIDogXCJcIixcbiAgICAgICAgICBcImJvb2tTdHlsZVwiIDogXCJcIixcbiAgICAgICAgICBcInNob3dMYWJlbFwiOiB0cnVlLFxuICAgICAgICAgIFwiZGlyZWN0aW9uXCIgOiBcImx0clwiLFxuICAgICAgICAgIFwicXVlc3Rpb25TdHlsZVwiOiBcIlwiXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucWJJdGVtLlN0eWxlX19jLnF1ZXN0aW9uU3R5bGUgPSB0aGlzLnFiSXRlbT8uU3R5bGVfX2M/LnF1ZXN0aW9uU3R5bGUgPyB0aGlzLnFiSXRlbT8uU3R5bGVfX2MucXVlc3Rpb25TdHlsZSA6IFwiXCI7XG4gICAgdGhpcy5sYW5nRGlyZWN0aW9uID0gdGhpcy5xYkl0ZW0uU3R5bGVfX2MuZGlyZWN0aW9uID0gdGhpcy5xYkl0ZW0/LlN0eWxlX19jPy5kaXJlY3Rpb24gPyB0aGlzLnFiSXRlbT8uU3R5bGVfX2M/LmRpcmVjdGlvbiA6ICdsdHInO1xuICAgIHRoaXMuYm9va1N0eWxlID0gdGhpcy5xYkl0ZW0/LlN0eWxlX19jPy5ib29rU3R5bGU7XG4gICAgdGhpcy5xdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIHZhciBodG1sRWxlbWVudCA9IGVsZW1lbnQ/LlF1ZXN0aW9uX1RleHRfX2MgO1xuICAgICAgdmFyIHRleHRPbmx5ID0gaHRtbEVsZW1lbnQ/LnJlcGxhY2UoLzxbXj5dKj4vZywgJycpXG4gICAgICBlbGVtZW50LlF1ZXN0aW9uX1RleHRfX2MgPSB0ZXh0T25seTtcbiAgICAgIC8vICBIQSAxOURFQzIzIExvZ2ljIGZvciBRdWVzdGlvbiBTdHlsaW5nKFNsYWVzZm9yY2UpXG4gICAgICAvLyBIQSAyOERFQzIzIEFkZGVkIHN0eWxpbmcgYW5kIGxvZ2ljcyB0byBsb2FkIHRoZSBib29rIHR5cGUgcXVlc3Rpb25zIFxuICAgICAgaWYoZWxlbWVudC5UeXBlX19jID09PSAnQm9vaycpe1xuICAgICAgICBpZihlbGVtZW50WydRQl9SZWZlcmVuY2VfUXVlc3Rpb25zX19jJ10pe1xuICAgICAgICAgIHZhciBxYiA9IEpTT04ucGFyc2UoZWxlbWVudFsnUUJfUmVmZXJlbmNlX1F1ZXN0aW9uc19fYyddKTtcbiAgICAgICAgICBpZihxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2Mpe1xuICAgICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jID0gdHlwZW9mIHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKCcnK3FiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYykgOiBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2M7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MgPSB0aGlzLnFiSXRlbS5TdHlsZV9fYztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBCb29rIHR5cGUgcXVlc3Rpb24gc3R5bGluZ1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5sYWJlbENsYXNzID0gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jPy5sYWJlbENsYXNzID8gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jPy5sYWJlbENsYXNzIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MubGFiZWxTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYz8ubGFiZWxTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYz8ubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmxhYmVsVmFsdWVTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fPy5sYWJlbFZhbHVlU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MubGFiZWxWYWx1ZVN0eWxlIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MuaW5wdXRDbGFzcyA9IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYz8uaW5wdXRDbGFzcyA/IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYz8uaW5wdXRDbGFzcyA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLmlucHV0U3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2M/LmlucHV0U3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2M/LmlucHV0U3R5bGUgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYy5ib29rU3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2M/LmJvb2tTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5TdHlsZV9fYz8uYm9va1N0eWxlIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2Muc2hvd0xhYmVsID0gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jPy5zaG93TGFiZWwgPyBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2M/LnNob3dMYWJlbCA6IHRydWU7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jLnF1ZXN0aW9uU3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2M/LnF1ZXN0aW9uU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2M/LnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xuICAgICAgICAgIHFiWydsYW5nRGlyZWN0aW9uJ10gPSBxYlsncXVlc3Rpb25ib29rJ10uU3R5bGVfX2MuZGlyZWN0aW9uID8gcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jPy5kaXJlY3Rpb24gOiB0aGlzLmxhbmdEaXJlY3Rpb247XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gTG9vcCBmb3IgZWFjaCBxdWVzdGlvbiBpbiB0aGUgYm9va1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5RdWVzdGlvbnNfX3IucmVjb3Jkcy5mb3JFYWNoKHF1ZXN0aW9uRnJvbUJvb2sgPT4ge1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYyA9IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2MgPyBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jIDogcWJbJ3F1ZXN0aW9uYm9vayddLlN0eWxlX19jO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5sYWJlbENsYXNzID0gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYz8ubGFiZWxDbGFzcyA/IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2M/LmxhYmVsQ2xhc3MgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5sYWJlbFN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYz8ubGFiZWxTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2M/LmxhYmVsU3R5bGUgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5sYWJlbFZhbHVlU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jPy5sYWJlbFZhbHVlU3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jPy5sYWJlbFZhbHVlU3R5bGUgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5pbnB1dENsYXNzID0gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYz8uaW5wdXRDbGFzcyA/IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2M/LmlucHV0Q2xhc3MgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5pbnB1dFN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYz8uaW5wdXRTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2M/LmlucHV0U3R5bGUgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5ib29rU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jPy5ib29rU3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jPy5ib29rU3R5bGUgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5zaG93TGFiZWwgPSBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jPy5zaG93TGFiZWwgPyBxdWVzdGlvbkZyb21Cb29rLlN0eWxlX19jPy5zaG93TGFiZWwgOiB0cnVlO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYy5xdWVzdGlvblN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYz8ucXVlc3Rpb25TdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suU3R5bGVfX2M/LnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9va1snbGFuZ0RpcmVjdGlvbiddID0gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYz8uZGlyZWN0aW9uID8gcXVlc3Rpb25Gcm9tQm9vay5TdHlsZV9fYz8uZGlyZWN0aW9uIDogdGhpcy5sYW5nRGlyZWN0aW9uO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVsZW1lbnRbJ3FiSXRlbSddID0gcWJbJ3F1ZXN0aW9uYm9vayddO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbGVtZW50LlN0eWxlX19jID0gZWxlbWVudC5TdHlsZV9fYyA/IHR5cGVvZiBlbGVtZW50LlN0eWxlX19jID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoJycrZWxlbWVudD8uU3R5bGVfX2MpIDogZWxlbWVudD8uU3R5bGVfX2MgOiB0aGlzLnFiSXRlbT8uU3R5bGVfX2M7XG5cbiAgICAgIGVsZW1lbnQuU3R5bGVfX2MubGFiZWxDbGFzcyA9IGVsZW1lbnQuU3R5bGVfX2M/LmxhYmVsQ2xhc3MgPyBlbGVtZW50LlN0eWxlX19jPy5sYWJlbENsYXNzIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuU3R5bGVfX2MubGFiZWxTdHlsZSA9IGVsZW1lbnQuU3R5bGVfX2M/LmxhYmVsU3R5bGUgPyBlbGVtZW50LlN0eWxlX19jPy5sYWJlbFN0eWxlIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuU3R5bGVfX2MubGFiZWxWYWx1ZVN0eWxlID0gZWxlbWVudC5TdHlsZV9fYz8ubGFiZWxWYWx1ZVN0eWxlID8gZWxlbWVudC5TdHlsZV9fYy5sYWJlbFZhbHVlU3R5bGUgOiBcIlwiO1xuICAgICAgZWxlbWVudC5TdHlsZV9fYy5pbnB1dENsYXNzID0gZWxlbWVudC5TdHlsZV9fYz8uaW5wdXRDbGFzcyA/IGVsZW1lbnQuU3R5bGVfX2M/LmlucHV0Q2xhc3MgOiBcIlwiO1xuICAgICAgZWxlbWVudC5TdHlsZV9fYy5pbnB1dFN0eWxlID0gZWxlbWVudC5TdHlsZV9fYy5pbnB1dFN0eWxlID8gZWxlbWVudC5TdHlsZV9fYz8uaW5wdXRTdHlsZSA6IFwiXCI7XG4gICAgICBlbGVtZW50LlN0eWxlX19jLmJvb2tTdHlsZSA9IGVsZW1lbnQuU3R5bGVfX2M/LmJvb2tTdHlsZSA/IGVsZW1lbnQuU3R5bGVfX2M/LmJvb2tTdHlsZSA6IFwiXCI7XG4gICAgICBlbGVtZW50LlN0eWxlX19jLnNob3dMYWJlbCA9IGVsZW1lbnQuU3R5bGVfX2M/LnNob3dMYWJlbCA/IGVsZW1lbnQuU3R5bGVfX2M/LnNob3dMYWJlbCA6IHRydWU7XG4gICAgICBlbGVtZW50LlN0eWxlX19jLnF1ZXN0aW9uU3R5bGUgPSBlbGVtZW50LlN0eWxlX19jPy5xdWVzdGlvblN0eWxlID8gZWxlbWVudC5TdHlsZV9fYz8ucXVlc3Rpb25TdHlsZSA6IFwiXCI7XG5cbiAgICAgIGVsZW1lbnRbJ2xhbmdEaXJlY3Rpb24nXSA9IGVsZW1lbnQuU3R5bGVfX2M/LmRpcmVjdGlvbiA/IGVsZW1lbnQuU3R5bGVfX2M/LmRpcmVjdGlvbiA6IHRoaXMubGFuZ0RpcmVjdGlvbjtcblxuXG4gICAgICAvL1ZEIDAyQXVnMjQgZGVwZW5kZW50IGZpZWxkIHNob3cvaGlkZSBjaGFuZ2VzXG4gICAgICBpZihlbGVtZW50LlJlZmVyZW5jZV9GaWVsZF9fYyl7XG4gICAgICAgIGVsZW1lbnQuZGVwZW5kZW50UmVmID0gZWxlbWVudC5SZWZlcmVuY2VfRmllbGRfX2M7XG4gICAgICB9XG4gICAgICBpZihlbGVtZW50LlN1Yl9UZXh0X19jKXtcbiAgICAgICAgIGxldCBkZXBlbmRlbmN5T2JqOiBEZXBlbmRlbmN5TWV0YSA9IEpTT04ucGFyc2UoZWxlbWVudC5TdWJfVGV4dF9fYyk7XG4gICAgICAgICBpZihkZXBlbmRlbmN5T2JqLmlzRGVwZW5kZW50RmllbGQpe1xuICAgICAgICAgICAgZWxlbWVudC5Jc19IaWRlX19jID0gdHJ1ZTtcbiAgICAgICAgIH1cbiAgICAgICAgLy8gVkQgMDdBdWcyNCAtIGlzRGVwZW5kZW50RmllbGQgY2hhbmdlXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgIC8vIFZEIDIwQXVnMjQgLSBpc0RlcGVuZGVudEZpZWxkIGNoYW5nZVxuICAgICAgICAgICAgICBpZihjaGFuZ2VWYWx1ZSAhPSB1bmRlZmluZWQgJiYgZGVwZW5kZW5jeU9iai5pc0RlcGVuZGVudEZpZWxkKSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBzdWJzY3JpcHRpb24gZm9yIHRoZSBjaGFuZ2UnKTtcbiAgICAgICAgICAgICAgICBpZihjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAhPSB1bmRlZmluZWQgJiYgY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgPT0gZGVwZW5kZW5jeU9iai5zb3VyY2VRdWVzdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ291dHNpZGUtLT4nLGVsZW1lbnQuSXNfSGlkZV9fYyk7XG4gICAgICAgICAgICAgICAgICAgLy8gZWxlbWVudC5pc0hpZGRlbkZpZWxkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGlmKGRlcGVuZGVuY3lPYmouZGVwZW5kZW50VmFsdWUgPT0gY2hhbmdlVmFsdWUudmFsdWVPYmope1xuICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5Jc19IaWRlX19jID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNlbGVjdGVkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmKGVsZW1lbnQuZGVwZW5kZW50UmVmID09IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkKXtcbiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LlJlZmVyZW5jZV9GaWVsZF9fYyA9IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuSXNfSGlkZV9fYyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5wdXQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZWxlY3RlZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVEZXBlbmRlbnRFbGVtZW50cyhlbGVtZW50LklkKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZGVwZW5kZW50IHNlbGVjdGlvbiByZW1vdmUgdGhlIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgICBpZihlbGVtZW50LmRlcGVuZGVudFJlZiA9PSBjaGFuZ2VWYWx1ZS5yZWZlcmVuY2VGaWVsZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LlJlZmVyZW5jZV9GaWVsZF9fYyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGUoZWxlbWVudCk7XG4gICAgICB9XG4gICAgICAvLyBWRCAwNi0wOS0yNCB0byBjYWxsIHRoZSBjYWxlbmRhciBjb21wb25lbnRcbiAgICAgIGlmIChlbGVtZW50LlR5cGVfX2MgPT09ICdDYWxlbmRhcicpIHtcbiAgICAgICAgdGhpcy5vcGVuQ2FsZW5kYXJDb21wb25lbnQoZWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5zdWJRdWVzdGlvbnMgPSBbXTtcbiAgICB0aGlzLnNldFN1YlF1ZXN0aW9ucyh0aGlzLnF1ZXN0aW9ucyk7XG4gICAgdGhpcy5wcm9jZXNzVHJhbnNsYXRlZFF1ZXN0aW9ucygpOyBcbiAgfVxuLy8gVkQgMDdBdWcyNCAtIGlzRGVwZW5kZW50RmllbGQgY2hhbmdlXG4gIGhpZGVEZXBlbmRlbnRFbGVtZW50cyhlbGVtZW50SWQpIHtcbiAgICBsZXQgZWxlbWVudHNUb0hpZGUgPSB0aGlzLnF1ZXN0aW9ucy5maWx0ZXIoZWwgPT4ge1xuICAgICAgICBpZiAoZWwuU3ViX1RleHRfX2MpIHtcbiAgICAgICAgICAgIGxldCBkZXBPYmogPSBKU09OLnBhcnNlKGVsLlN1Yl9UZXh0X19jKTtcbiAgICAgICAgICAgIHJldHVybiBkZXBPYmouc291cmNlUXVlc3Rpb25JZCA9PSBlbGVtZW50SWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuXG4gICAgZWxlbWVudHNUb0hpZGUuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgIGVsLklzX0hpZGVfX2MgPSB0cnVlO1xuICAgICAgICBlbC5pbnB1dCA9ICcnO1xuICAgICAgICBlbC5zZWxlY3RlZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZShlbCk7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGhpZGUgZWxlbWVudHMgZGVwZW5kZW50IG9uIHRoaXMgb25lXG4gICAgICAgIHRoaXMuaGlkZURlcGVuZGVudEVsZW1lbnRzKGVsLklkKTtcbiAgICB9KTtcbn1cblxuICBjbGVhclNRRXJyb3IocXVlc0lkKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBRdWVzdGlvbkJvb2tDb21wb25lbnQgY2xlYXJTUUVycm9yJyk7XG4gICAgdmFyIHNxTGlzdCA9IHRoaXMuc3ViUXVlc3Rpb25zPy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uSWQgPT0gcXVlc0lkKTtcbiAgICBmb3IgKHZhciBzcSBvZiBzcUxpc3QpIHtcbiAgICAgIHNxLmVycm9yID0gbnVsbDtcbiAgICB9XG4gIH1cbiAvLyBWRCAxMUp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICBwcm9jZXNzVHJhbnNsYXRlZFF1ZXN0aW9ucygpe1xuICAgIGlmICh0aGlzLnRyYW5zbGF0ZWRRdWVzdGlvbnMgJiYgdGhpcy50cmFuc2xhdGVkUXVlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2goKG9yZ1F1ZXN0aW9uOiBhbnkpPT4ge1xuICAgICAgICAgIHRoaXMudHJhbnNsYXRlZFF1ZXN0aW9ucy5mb3JFYWNoKCh0cmFuc1F1ZXN0aW9uOmFueSkgPT4ge1xuICAgICAgICAgICAgIGlmKG9yZ1F1ZXN0aW9uLlVuaXF1ZV9JZGVudGlmaWVyX19jID09IHRyYW5zUXVlc3Rpb24uaWRlbnRpZmllcil7XG4gICAgICAgICAgICAgICBvcmdRdWVzdGlvbi5RdWVzdGlvbl9UZXh0X19jID0gdHJhbnNRdWVzdGlvbi5sYWJlbDtcbiAgICAgICAgICAgICAgIG9yZ1F1ZXN0aW9uLlF1ZXN0aW9uX19jID0gdHJhbnNRdWVzdGlvbi5wbGFjZUhvbGRlcjtcbiAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgY29uc29sZS5sb2coJ29yaWdpbmFsUXVlc3Rpb24nICsgdGhpcy5xdWVzdGlvbnMpO1xuICAgICBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgc2V0U3ViUXVlc3Rpb25zKHJlY29yZHMpIHtcbiAgICBjb25zb2xlLmxvZygnaW5zaWRlIFF1ZXN0aW9uYm9va0NvbXBvbmVudCBzZXRTdWJRdWVzdGlvbnMnKTtcbiAgICB0aGlzLnN1YlF1ZXN0aW9ucy5wdXNoKHJlY29yZHMpO1xuICB9XG5cbiAgLy8gQ2FwdHVyZSBhbmQgUHJvY2VzcyBDaGlsZCBFdmVudFxuICBjaGlsZEV2ZW50Q2FwdHVyZShldmVudCwgcXVlcz86YW55KSB7XG4gICAgbGV0IGRyb3Bkb3duRGF0YSA9ICB7fTtcbiAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgUXVlc3Rpb25ib29rQ29tcG9uZW50IGNoaWxkRXZlbnRDYXB0dXJlJyk7XG4gICAgY29uc29sZS5sb2coZXZlbnQpO1xuICAgIHRoaXMuY2hhbmdlU2VydmljZS5hbm5vdW5jZUNoYW5nZShldmVudCk7XG4gICAgaWYocXVlcyl7XG4gICAgICBpZihxdWVzLlR5cGVfX2MgPT0gJ0Ryb3Bkb3duJyB8fHF1ZXMuVHlwZV9fYyA9PSAnUmFkaW8nICkge1xuICAgICAgICAvLyBIQSAxOUpBTjI0IENvcnJlY3Rpb24gb2YgZHJvcGRvd24gdmFsdWVzXG4gICAgICAgIHF1ZXMuc2VsZWN0ZWRPYmogPSBldmVudC52YWx1ZU9iaiA/IGV2ZW50LnZhbHVlT2JqIDogbnVsbDtcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50LnNlbGVjdGVkT2JqID8gZXZlbnQuc2VsZWN0ZWRPYmogOiBldmVudC52YWx1ZU9iajtcbiAgICAgICAgcXVlcy5zZWxlY3RlZFZhbHVlID0gZXZlbnQudmFsdWVPYmogPyBldmVudC52YWx1ZU9iaiA6IG51bGw7XG4gICAgICAgIC8vIGVtaXQgdGhlIGRyb3Bkb3duIGRhdGEgdG8gcGFyZW50XG4gICAgICAgIGRyb3Bkb3duRGF0YVsnZXZlbnQnXSA9IGV2ZW50LnZhbHVlT2JqO1xuICAgICAgICBkcm9wZG93bkRhdGFbJ3F1ZXMnXSA9IHF1ZXM7XG4gICAgICAgIGlmKGRyb3Bkb3duRGF0YVsnZXZlbnQnXSl7XG4gICAgICAgICAgdGhpcy5oYW5kbGVEcm9wRG93bi5lbWl0KGRyb3Bkb3duRGF0YSk7XG4gICAgICAgIH0gIC8vIFZEIDIxREVDMjMgLSBkZXBlbmRlbnQgZmllbGQgY2hhbmdlXG4gICAgICB9IGVsc2UgaWYocXVlcy5UeXBlX19jID09ICdMb2NhdGlvbicpe1xuICAgICAgICBxdWVzLmlucHV0ID0gZXZlbnQudmFsdWVPYmo7XG4gICAgICAgIHF1ZXMuc2VsZWN0ZWRWYWx1ZSA9IGV2ZW50LnZhbHVlT2JqLmFkZHJlc3M7XG4gICAgICB9ZWxzZSBpZihxdWVzLlR5cGVfX2MgPT0gJ0ZpbGUnKXsgXG4gICAgICAgIHF1ZXMuaW5wdXQgPSB0aGlzLnNlbGVjdGVkRmlsZURhdGEgPSBldmVudDtcbiAgICAgIH1lbHNlIGlmKHF1ZXMuVHlwZV9fYyA9PSAnRGF0ZScgfHwgcXVlcy5UeXBlX19jID09ICdEYXRlVGltZScpeyAvLyBIQSAyNEpBTjI0IENvbnZlcnRpbmcgRGF0ZSBhbmQgRGF0ZVRpbWUgdG8gVVRDXG4gICAgICAgICBpZihldmVudC52YWx1ZSl7XG4gICAgICAgICAgbGV0IGQgPSBuZXcgRGF0ZShldmVudC52YWx1ZSk7XG4gICAgICAgICAgbGV0IHV0Y1N0cmluZyA9IGQudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICBxdWVzLmlucHV0ID0gdXRjU3RyaW5nO1xuICAgICAgICAgfWVsc2Uge1xuICAgICAgICAgIHF1ZXMuaW5wdXQgPSAnJztcbiAgICAgICAgIH1cbiAgICAgIH1lbHNlIGlmKHF1ZXMuVHlwZV9fYyA9PSAnTGlzdCcpe1xuICAgICAgICAvLyBWRCAyMEF1ZzI0IGhhbmRsaW5nIHRoZSBsaXN0IHR5cGUgIGhhbmRsZSBtdWx0aXBsZSBvYmplY3QgdmFsdWVzXG4gICAgICAgIHF1ZXMuaW5wdXQgPSB0aGlzLmRhdGFTZXJ2aWNlLmdldFZhbHVlKGV2ZW50LnZhbHVlT2JqLGV2ZW50LmZpZWxkKTtcbiAgICAgIH1lbHNle1xuICAgICAgICBxdWVzLmlucHV0ID0gZXZlbnQ7XG4gICAgICB9XG4gICAgICAvLyB2YWxpZGF0aW5nICAgZXJyb3IgbWVzc2FnZVxuICAgICAgY29uc3QgaGFzRXJyb3IgPSBxdWVzLkVycm9yX01lc3NhZ2VfX2MgJiYgKChxdWVzLlR5cGVfX2MgPT09ICdGaWxlJyAmJiBxdWVzLmlucHV0Lmxlbmd0aCA9PSAwKSB8fCAocXVlcy5UeXBlX19jICE9ICdGaWxlJyAmJiAhcXVlcy5pbnB1dCkpO1xuICAgICAgcXVlcy5lcnJvciA9IGhhc0Vycm9yID8gbmV3IEVycm9yV3JhcHBlcigpIDogbnVsbDtcbiAgICAgIC8vIE9uY2UgdGhlIHJpZ2h0IHZhbHVlIGlzIHN0b3JlZCBpbiBxdWVzLmlucHV0IHN0b3JlIHRoZSBxdWVzICh3aXRoIGlucHV0KSBpbiBzdG9yYWdlU2VydmljZVxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGUocXVlcyk7XG4gICAgICAvLyBWRCAxOUp1bDAxIC0gZ2V0IHVwZGF0ZWQgcXVlc3Rpb25cbiAgICAgIHRoaXMuaGFuZGxlUXVlc3Rpb24uZW1pdChxdWVzKTtcbiAgICB9XG4gIH1cbiAgZGVsZXRlRmlsZShmaWxlRGF0YTphbnkpe1xuICAgIGNvbnNvbGUubG9nKCdmaWxlREFUQScsZmlsZURhdGEpXG4gIH1cbiAgZ2V0RHJvcERvd24oZXZlbnQ6YW55KXtcbiAgICB0aGlzLmhhZGxlRHJvcERvd25EZXBlbmRlbnQuZW1pdChldmVudCk7XG4gIH1cbi8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xuICBnZXRDdXJyZW50Q2FsZW5kYXIoZXZlbnQ6YW55KXtcbiAgICB0aGlzLmhhbmRsZUNhbGVuZGFyRGF0ZS5lbWl0KGV2ZW50KTtcbiAgfVxuIC8vIFZEIDA2U2VwMjQgcmVtb3ZlIHRoZSBzcGVjaWFsIGNoYXJlY3RlcnMgYW5kIHRhZ3MgXG4gIC8vIGZyb20gdGhlIHF1ZXN0aW9uVGV4dFxuICByZW1vdmVDaGFyYWN0ZXJzKHF1ZXN0aW9uVGV4dDpzdHJpbmcpe1xuICAgICBsZXQgdXBkYXRlZFRleHQgPSBxdWVzdGlvblRleHQ/LnJlcGxhY2UoLzxbXj5dKj4vZywgJycpO1xuICAgICByZXR1cm4gdXBkYXRlZFRleHQ7XG4gIH1cblxuXG4gIG9wZW5DYWxlbmRhckNvbXBvbmVudChxdWVzKSB7XG4gICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZiA9IHRoaXMuZHluYW1pY0hvc3Qudmlld0NvbnRhaW5lclJlZjtcbiAgICBpZih2aWV3Q29udGFpbmVyUmVmKXtcbiAgICAgIHZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KEN1c3RvbUNhbGVuZGFyQ29tcG9uZW50KTtcbiAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5xdWVzdGlvbiA9IHF1ZXM7XG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZXZlbnRTZWxlY3RlZC5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHRoaXMuY2hpbGRFdmVudENhcHR1cmUoZXZlbnQpKTtcbiAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5kYXRlU2VsZWN0ZWQuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB0aGlzLmdldEN1cnJlbnRDYWxlbmRhcihldmVudCkpO1xuICAgIH1cbiAgfVxufVxuIiwiPCEtLSBIQSAyMERFQzIzIEJvb2sgU3R5bGUgZnJvbSBzYWxlc2ZvcmNlIC0tPlxuPCEtLSBIQSAyOERFQzIzICBSZW1vdmVkIElzU2hlbmdlbChyZW1vdmFsIG9mIHNoZW5nZWwgdmFsdWVzIGFwcGxpZXMgZm9yIHRoaXMgcmVhc29uKSBhbmQgZGlyZWN0IHN0eWxpbmcgb2YgYm9va3MgdG8gYXZvaWQgc3R5bGluZyBpc3N1ZXMtLT5cbjwhLS0gSEEgMThKQU4yNCAgQWRkZWQgY2xhc3MgZm9yIHN0eWxpbmcgLS0+XG48ZGl2IFtzdHlsZV09XCJib29rU3R5bGVcIiBjbGFzcz1cImNvbnRlbnQtYm94IGZvcm0tZ3JvdXBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgPCEtLSBIQSAyMERFQzIzIERpcmVjdGl2ZSBhbmQgUXVlc3Rpb24gU3R5bGUgZnJvbSBzYWxlc2ZvcmNlIC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbY2xhc3NdPVwiJ2NvbC1sZy0nICsgcXVlcy5TaXplX19jICsgJyBwYWRkaW5nbm9uZSdcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXMgb2YgcXVlc3Rpb25zO2xldCBpID0gaW5kZXhcIiBbaWRdPVwicXVlcy5JZFwiIFtkaXJdPVwicXVlcy5sYW5nRGlyZWN0aW9uXCIgW3N0eWxlXT1cInF1ZXM/LlN0eWxlX19jPy5xdWVzdGlvblN0eWxlXCI+XG4gICAgICAgICAgICA8IS0tIFN1YiBRdWVzdGlvbiBMYWJlbCAtLT5cbiAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBMYWJlbCBTdHlsZSBmcm9tIHNhbGVzZm9yY2UgLS0+XG4gICAgICAgICAgICA8IS0tIFZEIDA5TWF5MjQgaXMgaGlkZSBmaWVsZCBjaGFuZ2UtLT5cbiAgICAgICAgIDxkaXYgKm5nSWY9XCIhcXVlcy5Jc19IaWRlX19jXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRGF0ZVRpbWUnXCI+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBWRCAyMEpVTjI0IC0gaGVscCB0ZXh0IGNoYW5nZXMtLT5cbiAgICAgICAgICAgIDwhLS0gVkQgMDFBdWcyNCAtIHZhbGlkYXRpb24gY2hhbmdlLS0+XG4gICAgICAgICAgICA8IS0tIC8vIFZEIDAyQXVnMjQgLSBsYWJlbCB2YWx1ZSBzdHlsZS0tPlxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGRvd24yOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCIgKm5nSWY9XCJxdWVzLlN0eWxlX19jPy5zaG93TGFiZWwgPyBxdWVzLlN0eWxlX19jPy5zaG93TGFiZWwgOiB0cnVlXCIgW3N0eWxlXT1cInF1ZXMuU3R5bGVfX2M/LmxhYmVsU3R5bGVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiJ2Rpcy1mbGV4IHNoZW5nZWwtbXl0LWZvbnQzIG15dC1mb250NyAnXCIgW3N0eWxlXT1cInF1ZXMuU3R5bGVfX2M/LmxhYmVsVmFsdWVTdHlsZVwiPnt7IHJlbW92ZUNoYXJhY3RlcnMocXVlcz8uUXVlc3Rpb25fVGV4dF9fYykgfX0gXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgICpuZ0lmPVwicXVlcy5Jc19PcHRpb25hbF9fY1wiIHN0eWxlPVwiY29sb3I6IHJlZDtcIj4qPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlF1ZXN0aW9uX1RleHRfX2MgJiYgcXVlcz8uSGVscF9UZXh0X19jXCIgY2xhc3M9XCJpY29uXCIgW21hdFRvb2x0aXBdPVwicXVlcz8uSGVscF9UZXh0X19jXCI+aTwvZGl2Pjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSAvLyBWRCAxMkp1bjI0IC0gcmVhZG9ubHkgY2hhbmdlLS0+XG4gICAgICAgICAgICA8IS0tIERhdGVUaW1lIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0RhdGVUaW1lJ1wiPlxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRhdGUtcGlja2VyIFttaW5EYXRlXT1cInF1ZXMubWluRGF0ZVwiIFtlcnJvcl09XCJxdWVzLmVycm9yXCIgW2Vycm9yTWVzc2FnZV09XCJxdWVzLkVycm9yX01lc3NhZ2VfX2NcIiBbcmVhZE9ubHldPVwicXVlcy5SZWFkX09ubHlfX2NcIiBbZGF0ZV09XCJxdWVzLmlucHV0XCIgKGRhdGVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1kYXRlLXBpY2tlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgPCEtLSBEYXRlLS0+XG4gICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0RhdGUnXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tZGF0ZSAgW2RhdGVdPVwicXVlcy5pbnB1dFwiIFtlcnJvcl09XCJxdWVzLmVycm9yXCIgW2Vycm9yTWVzc2FnZV09XCJxdWVzLkVycm9yX01lc3NhZ2VfX2NcIiBbcmVhZE9ubHldPVwicXVlcy5SZWFkX09ubHlfX2NcIiAoZGF0ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWRhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgIDwhLS0gVGltZS0tPlxuICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUaW1lJ1wiPlxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXRpbWUgIFt0aW1lXT1cInF1ZXMuaW5wdXRcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5FcnJvcl9NZXNzYWdlX19jXCIgW3JlYWRPbmx5XT1cInF1ZXMuUmVhZF9Pbmx5X19jXCIgKHRpbWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS10aW1lPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgIDwhLS0gY2FsZW5kYXIgIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0NhbGVuZGFyJ1wiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGFwcC1jdXN0b20tY2FsZW5kYXIgW3F1ZXN0aW9uXT1cInF1ZXNcIiAgKGV2ZW50U2VsZWN0ZWQpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiIChkYXRlU2VsZWN0ZWQpPVwiZ2V0Q3VycmVudENhbGVuZGFyKCRldmVudClcIj48L2FwcC1jdXN0b20tY2FsZW5kYXI+IC0tPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIFRleHQgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnVGV4dCcgfHwgcXVlcy5UeXBlX19jID09PSAnTGluaydcIiA+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20taW5wdXQgW3ZhbHVlXT1cInF1ZXMuaW5wdXRcIiBbbmdDbGFzc1ZhbHVlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICdkaXMtZmxleCBkdC1saW5lIGRhdGUtbGluZSBib29rVGV4dCBib3hvdXRsaW5lIG15dC1mb250MSc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Qm94OiAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1xuICAgICAgICAgICAgICAgICAgICB9XCIgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbcmVhZE9ubHldPVwicXVlcy5SZWFkX09ubHlfX2NcIiBbaWRWYWx1ZV09XCJxdWVzLlRyYWNraW5nX0lEX19jXCIgW2ZvY3VzRXZlbnRdPVwiY2xlYXJTUUVycm9yKHF1ZXMuSWQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcGxhY2Vob2xkZXJdPVwicXVlcy5RdWVzdGlvbl9fY1wiIChpbnB1dFZhbHVlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPCEtLSBmb3IgcGljayBsb2NhdGlvbiAtLT5cbiAgICAgICAgICAgIDwhLS0gICBWRCAyMURFQzIzIC0gZGVwZW5kZW50IGZpZWxkIGNoYW5nZSAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdMb2NhdGlvbidcIj5cbiAgICAgICAgICAgIDwhLS0gSEExMDAxMjAyNCBBZGRlZCBBcGkga2V5IGFzIGlucHV0IC0tPlxuICAgICAgICAgICAgICAgIDxhcHAtcGljay1sb2NhdGlvbiBbYXBpS2V5XT1cInFiSXRlbVsnQXBpX0tleV9fYyddXCIgW2FkZHJlc3NdPVwicXVlcy5zZWxlY3RlZFZhbHVlXCIgW3F1ZXN0aW9uXT1cInF1ZXNcIiAobG9jYXRpb25TZWxlY3RlZCk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtcGljay1sb2NhdGlvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIGZvciAgdGV4dCBhcmVhICAgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnVGV4dEFyZWEnXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tdGV4dC1hcmVhIFtxdWVzdGlvbl09XCJxdWVzXCIgW3JlYWRPbmx5XT1cInF1ZXMuUmVhZF9Pbmx5X19jXCIgW3ZhbHVlXT1cInF1ZXMuaW5wdXRcIiBbcm93c109XCIzXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcGxhY2Vob2xkZXJdPVwicXVlcy5RdWVzdGlvbl9fYyBcIlxuICAgICAgICAgICAgICAgICAgICAodGV4dGFyZWFWYWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+PC9hcHAtY3VzdG9tLXRleHQtYXJlYT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIEVtYWlsIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0VtYWlsJ1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiByZWFkT25seT1cInF1ZXMuUmVhZF9Pbmx5X19jXCIgWyhuZ01vZGVsKV09XCJxdWVzLmlucHV0XCIgW2lkXT1cInF1ZXMuSWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhclNRRXJyb3IocXVlcy5JZClcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5ib3JkZXItY29sb3I9XCJ7eyBxdWVzLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiIHBsYWNlaG9sZGVyPVwie3sgcXVlcy5RdWVzdGlvbl9fYyB9fVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBUYWJsZSAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUYWJsZSdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXRhYmxlIFtxdWVzdGlvbl09XCJxdWVzXCIgW2FwaU1ldGFdPVwicXVlcy5TdWJfVGV4dF9fY1wiICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5JZClcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tdGFibGU+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8IS0tIFRhYmxlIEFwcGVuZGl4IC0tPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnVGFibGVBcHBlbmRpeCdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgIDxhcHAtdGFibGUtYXBwZW5kaXggW3F1ZXN0aW9uXT1cInF1ZXNcIiAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuSWQpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtdGFibGUtYXBwZW5kaXg+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICA8IS0tIGxpc3QgLS0+XG4gICAgICAgICAgICAgPCEtLSBWRCAyMEF1ZzI0IHVzZWQgY29ycmVjdCBhdHRyaWJ1dGUgLS0+XG4gICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0xpc3QnXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICA8bGliLXNlYXJjaC1ib3ggW3F1ZXN0aW9uXT1cInF1ZXNcIiBbcmVhZE9ubHldPVwicXVlcy5SZWFkX09ubHlfX2NcIiBbYXBpTWV0YV09XCJxdWVzLlN1Yl9UZXh0X19jXCIgW2lkXT1cInF1ZXMuSWRcIiBbcGxhY2VIb2xkZXJUZXh0XT1cInF1ZXMuUXVlc3Rpb25fX2NcIiAgW2ZpbHRlck5hbWVdPVwicXVlcy5pbnB1dFwiIChzZWFyY2hWYWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XG4gICAgICAgICAgICAgICAgPC9saWItc2VhcmNoLWJveD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxuICAgICAgICAgICAgPCEtLSBIQSAwOUZFQjI0IEFkZGVkIGNvbmRpdGlvbiBvZiBzcU9wdGlvbiB0byB0aGUgZHJvcGRvd24gLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRHJvcGRvd24nICYmIHF1ZXM/LlF1ZXN0aW9uX09wdGlvbnNfX3I/LnJlY29yZHNcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+IDwhLS0gVkQgMTlKQU4yNCAtIGdldHRpbmcgdG9rZW4gYXMgaW5wdXQgLS0+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tZHJvcGRvd24gW29wdGlvbnNdPVwicXVlcy5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHNcIiBbdG9rZW5dPVwidG9rZW5cIlxuICAgICAgICAgICAgICAgICAgICBbYXBpTWV0YV09XCJxdWVzLlN1Yl9UZXh0X19jXCIgW2lkXT1cInF1ZXMuSWRcIiBbc2VsZWN0ZWRWYWx1ZV09XCJxdWVzLnNlbGVjdGVkVmFsdWVcIiBwbGFjZWhvbGRlcj1cIi0tLXt7J3NlbGVjdCcgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19LS0tXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yTWVzc2FnZV09XCJxdWVzLkVycm9yX01lc3NhZ2VfX2NcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWZlcmVuY2VGaWVsZF09XCJxdWVzLlJlZmVyZW5jZV9GaWVsZF9fY1wiXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJxdWVzLlJlYWRfT25seV9fY1wiXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5JZClcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cInF1ZXM/LmlucHV0Py5sZW5ndGggPiAwXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIC8vIFZEIDAyQXVnMjQgY3VzdG9tLXJhZGlvIGNvbXBvbmVudCAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdSYWRpbycgJiYgcXVlcz8uUXVlc3Rpb25fT3B0aW9uc19fcj8ucmVjb3Jkc1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tcmFkaW8gW29wdGlvbnNdPVwicXVlcy5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHNcIiBbdG9rZW5dPVwidG9rZW5cIlxuICAgICAgICAgICAgICAgICAgICBbYXBpTWV0YV09XCJxdWVzLlN1Yl9UZXh0X19jXCIgW2lkXT1cInF1ZXMuSWRcIiBbc2VsZWN0ZWRWYWx1ZV09XCJxdWVzLnNlbGVjdGVkVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuRXJyb3JfTWVzc2FnZV9fY1wiIFtlcnJvcl09XCJxdWVzLmVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlZmVyZW5jZUZpZWxkXT1cInF1ZXMuUmVmZXJlbmNlX0ZpZWxkX19jXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInF1ZXMuUmVhZF9Pbmx5X19jXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLklkKVwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1yYWRpbz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIEF0dGFjaG1lbnQgLyBGaWxlcyAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdGaWxlJ1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1maWxlLXVwbG9hZCBbbGltaXRGaWxlVXBsb2FkaW5nXT1cIjVcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtxdWVzdGlvbl09XCJxdWVzXCIgW2FsbEZpbGVzXT1cInF1ZXMuaW5wdXRcIiBbdGFibGVGaWxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWRGaWxlRGF0YSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCIgKGRlbGV0ZWRGaWxlRGF0YSk9XCJkZWxldGVGaWxlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtpc0RlbGV0ZUZpbGVCdXR0b25WaXNpYmxlXT1cInRydWVcIj48L2FwcC1maWxlLXVwbG9hZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1BvcFVwTWVzc2FnZSdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgIDxhcHAtZGVwZW5kZW50LXRhYmxlIFthbGVydE1lc3NhZ2VdPVwicXVlcy5FcnJvcl9NZXNzYWdlX19jXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtZGVwZW5kZW50LXRhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnTGFiZWwnXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1sYWJlbCBbbGFiZWxTdHlsZV09XCJxdWVzLlRpdGxlX19jXCIgW2xhYmVsVmFsdWVdPVwicXVlcy5RdWVzdGlvbl9fY1wiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgIDwhLS0gLy8gVkQgMDJBdWcyNCBpbWFnZSBjb21wb25lbnQgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnSW1hZ2UnXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1pbWFnZSBbcXVlc3Rpb25dPVwicXVlc1wiPlxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1pbWFnZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSAwOE5PVjIzIC0gYnV0dG9uIHR5cGUgcXVlc3Rpb24gYWRkZWQgLS0+XG4gICAgICAgICAgICAgPCEtLSBCdXR0b24gLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnQnV0dG9uJ1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tYnV0dG9uIFtoZWlnaHRdPVwiJzUwcHgnXCIgIFxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCInMTUwcHgnXCIgXG4gICAgICAgICAgICAgICAgW2J1dHRvblRleHRdPVwicXVlcz8uUXVlc3Rpb25fX2NcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJxdWVzPy5RdWVzdGlvbl9fY1wiXG4gICAgICAgICAgICAgICAgKGJ1dHRvblZhbHVlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgIFRoaXMgaXMgdG8gbG9hZCBib29rIHR5cGUgcXVlc3Rpb25zLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnQm9vaydcIj5cbiAgICAgICAgICAgICAgICA8IS0tIEhBIDA5RkVCMjQgQWRkZWQgdGVybmFyeSBvcGVyYXRvciAtLT5cbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uYm9vayBbcWJJdGVtXT1cInF1ZXMucWJJdGVtXCIgW2xhYmVsVmFsdWVdPVwibGFiZWxWYWx1ZVwiIFtxdWVzdGlvbnNdPVwicXVlcy5xYkl0ZW0/LlF1ZXN0aW9uc19fcj8ucmVjb3Jkc1wiICAoaGFuZGxlRHJvcERvd24pPVwiZ2V0RHJvcERvd24oJGV2ZW50KVwiPjwvbGliLXF1ZXN0aW9uYm9vaz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gIDwhLS0gMDYtMDktMjQgZm9yIGNhbGVuZGFyIHR5cGUtLT5cbjxuZy10ZW1wbGF0ZSBkeW5hbWljQ29tcG9uZW50SG9zdD48L25nLXRlbXBsYXRlPiJdfQ==