vcomply-workflow-engine 3.0.278 → 3.0.279
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/add-multiple-responsibility/add-multiple-responsibility.component.mjs +2 -2
- package/esm2020/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.mjs +310 -123
- package/esm2020/lib/add-multiple-risk/add-multiple-risk.component.mjs +128 -64
- package/esm2020/lib/log-an-issue/log-an-issue.component.mjs +2 -2
- package/esm2020/lib/sharedComponents/frequency/frequency-annual/frequency-annual.component.mjs +2 -2
- package/esm2020/lib/sharedComponents/frequency/frequency-biannual/frequency-biannual.component.mjs +2 -2
- package/esm2020/lib/sharedComponents/frequency/frequency-container/frequency-container.component.mjs +2 -2
- package/esm2020/lib/sharedComponents/frequency/frequency-daily/frequency-daily.component.mjs +2 -2
- package/esm2020/lib/sharedComponents/frequency/frequency-lifecycle/frequency-lifecycle.component.mjs +2 -2
- package/esm2020/lib/sharedComponents/frequency/frequency-monthly/frequency-monthly.component.mjs +2 -2
- package/esm2020/lib/sharedComponents/frequency/frequency-on-completion-of/frequency-on-completion-of.component.mjs +26 -11
- package/esm2020/lib/sharedComponents/frequency/frequency-one-time/frequency-one-time.component.mjs +2 -2
- package/esm2020/lib/sharedComponents/frequency/frequency-quarterly/frequency-quarterly.component.mjs +2 -2
- package/esm2020/lib/sharedComponents/frequency/frequency-top/frequency-top.component.mjs +21 -8
- package/esm2020/lib/sharedComponents/frequency/frequency-weekly/frequency-weekly.component.mjs +2 -2
- package/esm2020/lib/sharedComponents/frequency/frequency.service.mjs +5 -3
- package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-annual/frequency-dialog-annual.component.mjs +113 -23
- package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-biannual/frequency-dialog-biannual.component.mjs +60 -21
- package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.mjs +53 -43
- package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-monthly/frequency-dialog-monthly.component.mjs +64 -25
- package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-one-time/frequency-dialog-one-time.component.mjs +63 -20
- package/esm2020/lib/sharedComponents/frequency-dialog/frequency-dialog-quarterly/frequency-dialog-quarterly.component.mjs +65 -23
- package/esm2020/lib/workflow-compliance/workflow-compliance.component.mjs +2 -2
- package/esm2020/lib/workflow-policy/workflow-policy.component.mjs +2 -2
- package/esm2020/lib/workflow-risk/workflow-risk.component.mjs +365 -131
- package/fesm2015/vcomply-workflow-engine.mjs +1304 -537
- package/fesm2015/vcomply-workflow-engine.mjs.map +1 -1
- package/fesm2020/vcomply-workflow-engine.mjs +1320 -541
- package/fesm2020/vcomply-workflow-engine.mjs.map +1 -1
- package/lib/sharedComponents/frequency/frequency-lifecycle/frequency-lifecycle.component.d.ts +1 -1
- package/lib/sharedComponents/frequency/frequency-on-completion-of/frequency-on-completion-of.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
1
|
+
import { Component, Input, Output, EventEmitter, } from '@angular/core';
|
|
2
2
|
import { cloneDeep } from 'lodash-es';
|
|
3
|
-
import
|
|
3
|
+
import moment from 'moment/moment';
|
|
4
4
|
import * as XLSX from 'xlsx';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "../workflow-services/add-risk.service";
|
|
@@ -27,7 +27,19 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
27
27
|
this.isNotificationPending = 0;
|
|
28
28
|
this.closeAddMultipleResponsibility = new EventEmitter();
|
|
29
29
|
this.queryParam = '';
|
|
30
|
-
this.recentResponsibilityUrl = {
|
|
30
|
+
this.recentResponsibilityUrl = {
|
|
31
|
+
byResponsibilities: { type: ['recent_responsibilities'], subType: ['CC'] },
|
|
32
|
+
byStatus: { type: [], subType: [] },
|
|
33
|
+
filterObject: {
|
|
34
|
+
responsibilityCenter: [],
|
|
35
|
+
entrustedBy: [],
|
|
36
|
+
entrustedTo: [],
|
|
37
|
+
riskIds: [],
|
|
38
|
+
responsibilityCategory: [],
|
|
39
|
+
},
|
|
40
|
+
timePeriodDetails: { type: '', selectedPeriod: '', selectedYear: '' },
|
|
41
|
+
status: '',
|
|
42
|
+
};
|
|
31
43
|
this.url = 'q={"byResponsibilities":{"type":["responsibilities_in_queue"],"subType":["CC"]},"byStatus":{"type":["responsibilities_in_queue"],"subType":[]},"filterObject":{"responsibilityCenter":[],"entrustedBy":[],"entrustedTo":[],"riskIds":[],"responsibilityCategory":[]},"timePeriodDetails":{"type":"","selectedPeriod":"","selectedYear":""},"status":""}';
|
|
32
44
|
this.responsibilityBulkUpload = {
|
|
33
45
|
header: [],
|
|
@@ -37,7 +49,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
37
49
|
this.tabIndex = {
|
|
38
50
|
frequency: 0,
|
|
39
51
|
ongoing: 1,
|
|
40
|
-
onCompletion: 2
|
|
52
|
+
onCompletion: 2,
|
|
41
53
|
};
|
|
42
54
|
this.bulkUpload = {
|
|
43
55
|
frequency: {
|
|
@@ -54,7 +66,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
54
66
|
header: [],
|
|
55
67
|
subHeading: [],
|
|
56
68
|
reports: [],
|
|
57
|
-
}
|
|
69
|
+
},
|
|
58
70
|
};
|
|
59
71
|
this.templateInfo = {
|
|
60
72
|
categoryList: [],
|
|
@@ -63,7 +75,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
63
75
|
assigneesList: [],
|
|
64
76
|
reviewerList: [],
|
|
65
77
|
parentResponsibility: [],
|
|
66
|
-
memberId: ''
|
|
78
|
+
memberId: '',
|
|
67
79
|
};
|
|
68
80
|
this.isLoader = false;
|
|
69
81
|
this.showCategoryList = false;
|
|
@@ -78,14 +90,24 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
78
90
|
this.fileResponse = [];
|
|
79
91
|
this.memberId = 0;
|
|
80
92
|
this.organizationId = 0;
|
|
81
|
-
this.errorMessage =
|
|
93
|
+
this.errorMessage = ' invalid file error';
|
|
82
94
|
this.downloadStatus = 'NOT_DOWNLOADING';
|
|
83
95
|
this.downloadPercent = 0;
|
|
84
96
|
this.defaultOwner = '';
|
|
85
97
|
this.smileyMessage = `You're All Set! We're processing your request and you will be notified via email upon completion.`;
|
|
86
98
|
this.actionButtons = [
|
|
87
|
-
{
|
|
88
|
-
|
|
99
|
+
{
|
|
100
|
+
buttonText: 'Entrust More Responsibilities',
|
|
101
|
+
class: 'white-btn',
|
|
102
|
+
id: 'addMore',
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
buttonText: this.isNotificationPending
|
|
106
|
+
? 'View Responsibilities In Queue'
|
|
107
|
+
: 'View Responsibilities',
|
|
108
|
+
class: 'blue-btn',
|
|
109
|
+
id: 'view',
|
|
110
|
+
},
|
|
89
111
|
];
|
|
90
112
|
this.showSmiley = false;
|
|
91
113
|
this.member_obj_id = '';
|
|
@@ -93,15 +115,16 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
93
115
|
set uploadedFileData(data) {
|
|
94
116
|
this.uploadedFile(data);
|
|
95
117
|
}
|
|
96
|
-
ngOnChanges(changes) {
|
|
97
|
-
}
|
|
118
|
+
ngOnChanges(changes) { }
|
|
98
119
|
ngOnInit() {
|
|
99
120
|
this.pickerChanged.emit(false);
|
|
100
121
|
this.organizationId = this.authService.getOrganizationId();
|
|
101
122
|
this.memberId = this.authService.getMemberId();
|
|
102
123
|
this.member_obj_id = this.authService.getUserDetails()._id;
|
|
103
124
|
this.userInfo = this.authService.getUserDetails().user;
|
|
104
|
-
this.defaultOwner =
|
|
125
|
+
this.defaultOwner = this.userInfo
|
|
126
|
+
? this.userInfo.name + ' (' + this.userInfo.email + ')'
|
|
127
|
+
: '';
|
|
105
128
|
this.getUserDetails();
|
|
106
129
|
this.authService.getOrganizationDetails().subscribe((res) => {
|
|
107
130
|
this.riskClassEnabled = res.enable_riskclass;
|
|
@@ -131,7 +154,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
131
154
|
assigneesList: [],
|
|
132
155
|
reviewerList: [],
|
|
133
156
|
parentResponsibility: [],
|
|
134
|
-
memberId: ''
|
|
157
|
+
memberId: '',
|
|
135
158
|
};
|
|
136
159
|
this.uploadedFiles = [];
|
|
137
160
|
const reference = document.querySelector('#scrollReference');
|
|
@@ -173,7 +196,8 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
173
196
|
case 'on completion responsibilities':
|
|
174
197
|
this.setDataForDifferentTabs(sheetReport3, sheet);
|
|
175
198
|
break;
|
|
176
|
-
default:
|
|
199
|
+
default:
|
|
200
|
+
break;
|
|
177
201
|
}
|
|
178
202
|
});
|
|
179
203
|
};
|
|
@@ -197,7 +221,8 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
197
221
|
subHeading: [],
|
|
198
222
|
};
|
|
199
223
|
let sheetValue = XLSX.utils.sheet_to_json(ws, {
|
|
200
|
-
header: 1,
|
|
224
|
+
header: 1,
|
|
225
|
+
raw: false,
|
|
201
226
|
});
|
|
202
227
|
let data = sheetValue.filter((res) => {
|
|
203
228
|
let isUndefined = '';
|
|
@@ -212,22 +237,28 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
212
237
|
}
|
|
213
238
|
});
|
|
214
239
|
if (this.fileName.substr(-5) !== '.xlsx') {
|
|
215
|
-
this.errorMessage =
|
|
240
|
+
this.errorMessage =
|
|
241
|
+
'The incorrect file has been uploaded. Please upload the template which you downloaded from here.' +
|
|
242
|
+
' RETRY';
|
|
216
243
|
this.isWrongFile = true;
|
|
217
244
|
return;
|
|
218
245
|
}
|
|
219
246
|
responsibilityBulkUpload.header = cloneDeep(data[2]);
|
|
220
247
|
responsibilityBulkUpload.subHeading = cloneDeep(data[3]);
|
|
221
248
|
data = data.slice(5);
|
|
222
|
-
if (
|
|
223
|
-
this.errorMessage =
|
|
249
|
+
if (this.member_obj_id != this.templateInfo.memberId) {
|
|
250
|
+
this.errorMessage =
|
|
251
|
+
'The incorrect file has been uploaded. Please upload the template which you downloaded from here.' +
|
|
252
|
+
' RETRY';
|
|
224
253
|
this.isWrongFile = true;
|
|
225
254
|
return;
|
|
226
255
|
}
|
|
227
256
|
const responsibilityData = data.filter((dataElement) => dataElement.length > 0);
|
|
228
257
|
responsibilityData.forEach((report) => {
|
|
229
258
|
let validDate;
|
|
230
|
-
const validUser = this.returnIds(report[2], 'entrusted_to')
|
|
259
|
+
const validUser = this.returnIds(report[2], 'entrusted_to')
|
|
260
|
+
? true
|
|
261
|
+
: false;
|
|
231
262
|
if (responsibilityBulkUpload.header[1] === 'Program') {
|
|
232
263
|
validDate = this.compareWithCurrentDate(report[4], report[5]);
|
|
233
264
|
}
|
|
@@ -238,20 +269,24 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
238
269
|
if (sheet?.toLowerCase() === 'frequency responsibilities') {
|
|
239
270
|
responsibilityBulkUpload.reports.push(this.setReportDetails(report, 'frequency', responsibilityBulkUpload.header[1] === 'Program' ? true : false));
|
|
240
271
|
this.bulkUpload.frequency.header = responsibilityBulkUpload?.header;
|
|
241
|
-
this.bulkUpload.frequency.subHeading =
|
|
272
|
+
this.bulkUpload.frequency.subHeading =
|
|
273
|
+
responsibilityBulkUpload?.subHeading;
|
|
242
274
|
this.bulkUpload.frequency.reports = responsibilityBulkUpload?.reports;
|
|
243
275
|
}
|
|
244
276
|
if (sheet?.toLowerCase() === 'ongoing responsibilities') {
|
|
245
277
|
responsibilityBulkUpload.reports.push(this.setReportDetails(report, 'ongoing', responsibilityBulkUpload.header[1] === 'Program' ? true : false));
|
|
246
278
|
this.bulkUpload.ongoing.header = responsibilityBulkUpload?.header;
|
|
247
|
-
this.bulkUpload.ongoing.subHeading =
|
|
279
|
+
this.bulkUpload.ongoing.subHeading =
|
|
280
|
+
responsibilityBulkUpload?.subHeading;
|
|
248
281
|
this.bulkUpload.ongoing.reports = responsibilityBulkUpload?.reports;
|
|
249
282
|
}
|
|
250
283
|
if (sheet?.toLowerCase() === 'on completion responsibilities') {
|
|
251
284
|
responsibilityBulkUpload.reports.push(this.setReportDetails(report, 'onCompletion', responsibilityBulkUpload.header[1] === 'Program' ? true : false));
|
|
252
285
|
this.bulkUpload.onCompletion.header = responsibilityBulkUpload?.header;
|
|
253
|
-
this.bulkUpload.onCompletion.subHeading =
|
|
254
|
-
|
|
286
|
+
this.bulkUpload.onCompletion.subHeading =
|
|
287
|
+
responsibilityBulkUpload?.subHeading;
|
|
288
|
+
this.bulkUpload.onCompletion.reports =
|
|
289
|
+
responsibilityBulkUpload?.reports;
|
|
255
290
|
}
|
|
256
291
|
});
|
|
257
292
|
const isEmpty = this.checkEmptyFile(data);
|
|
@@ -259,14 +294,19 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
259
294
|
empty it will check if the file is the correct file, if it is not the correct file it will
|
|
260
295
|
return an error message. If it is the correct file it will call the fileUpload() function. */
|
|
261
296
|
if (isEmpty) {
|
|
262
|
-
this.errorMessage =
|
|
297
|
+
this.errorMessage =
|
|
298
|
+
'You have uploaded a blank template. Please add details for all mandatory fields. RETRY';
|
|
263
299
|
this.isFileEmpty = true;
|
|
264
300
|
this.isWrongFile = false;
|
|
265
301
|
this.isWrongFormat = false;
|
|
266
302
|
return;
|
|
267
303
|
}
|
|
268
|
-
else if (this.bulkUpload?.frequency?.header[0] !== 'Responsibility Name*' &&
|
|
269
|
-
this.
|
|
304
|
+
else if (this.bulkUpload?.frequency?.header[0] !== 'Responsibility Name*' &&
|
|
305
|
+
this.bulkUpload?.ongoing?.header[0] !== 'Responsibility Name*' &&
|
|
306
|
+
this.bulkUpload?.onCompletion?.header[0] !== 'Responsibility Name*') {
|
|
307
|
+
this.errorMessage =
|
|
308
|
+
'The incorrect file has been uploaded. Please upload the template which you downloaded from here.' +
|
|
309
|
+
' RETRY';
|
|
270
310
|
this.isWrongFile = false;
|
|
271
311
|
this.isWrongFormat = true;
|
|
272
312
|
return;
|
|
@@ -339,19 +379,23 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
339
379
|
else {
|
|
340
380
|
const monthAndYear = month.split("'");
|
|
341
381
|
const startDate = moment(day + '-' + monthAndYear[0] + '-' + 20 + monthAndYear[1] + ' 00:00:00', 'DD-MMMM-YYYY HH:mm:ss').format('YYYY-MM-DD HH:mm:ss');
|
|
342
|
-
if (startDate ==
|
|
382
|
+
if (startDate == 'Invalid date') {
|
|
343
383
|
return false;
|
|
344
384
|
}
|
|
345
|
-
setTimeout(() => {
|
|
346
|
-
}, 5);
|
|
385
|
+
setTimeout(() => { }, 5);
|
|
347
386
|
const date_value = new Date();
|
|
348
|
-
date_value.setMonth(typeof month !== 'number'
|
|
387
|
+
date_value.setMonth(typeof month !== 'number'
|
|
388
|
+
? monthNames.filter((x) => x.month === month?.substring(0, 3))[0]
|
|
389
|
+
?.value - 1
|
|
390
|
+
: month);
|
|
349
391
|
date_value.setFullYear(Number(20 + month.split("'")[1]));
|
|
350
392
|
date_value.setDate(Number(day));
|
|
351
393
|
// const reportDate = new Date(day + month.split("'"));
|
|
352
394
|
// console.log((currentDate.toJSON().split('T')[0])+"&&"+(date_value.toJSON().split('T')[0]))
|
|
353
395
|
// debugger
|
|
354
|
-
if (
|
|
396
|
+
if (currentDate.toJSON().split('T')[0] !=
|
|
397
|
+
date_value.toJSON().split('T')[0] &&
|
|
398
|
+
currentDate > date_value) {
|
|
355
399
|
return false;
|
|
356
400
|
}
|
|
357
401
|
else {
|
|
@@ -384,7 +428,10 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
384
428
|
else {
|
|
385
429
|
// const reportDate = new Date(day + month.split("'"));
|
|
386
430
|
const date_value = new Date();
|
|
387
|
-
date_value.setMonth(typeof month !== 'number'
|
|
431
|
+
date_value.setMonth(typeof month !== 'number'
|
|
432
|
+
? monthNames.filter((x) => x.month === month?.substring(0, 3))[0]
|
|
433
|
+
?.value - 1
|
|
434
|
+
: month);
|
|
388
435
|
date_value.setFullYear(Number(20 + month.split("'")[1]));
|
|
389
436
|
date_value.setDate(Number(day));
|
|
390
437
|
if (currentDate > date_value) {
|
|
@@ -430,21 +477,31 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
430
477
|
}
|
|
431
478
|
const rcDetails = this.returnIds(report?.responsibilityCenter, 'rc_id');
|
|
432
479
|
const reviewerDetails = this.returnIds(report?.reviewer, 'reviewer');
|
|
433
|
-
const assignorDetails =
|
|
480
|
+
const assignorDetails = report?.assignor
|
|
481
|
+
? this.returnIds(report?.assignor, 'assignor')
|
|
482
|
+
: '';
|
|
434
483
|
// const ccDetails: any = this.returnIds(report.alwaysNotify, 'cc');
|
|
435
484
|
const ccDetails = this.returnIds(report?.overseer, 'cc');
|
|
436
485
|
const ccFailureDetails = this.returnIds(report.notifyOnFailure, 'ccFailure');
|
|
437
486
|
const currentDate = moment().format('YYYY-MM-DD');
|
|
438
487
|
// const categoryName = (report.responsibilityCategory.includes('[WITHIN]')) ? report.responsibilityCategory.split(' [')[0] : report.responsibilityCategory
|
|
439
|
-
let ongoingReminderType = {
|
|
488
|
+
let ongoingReminderType = { Weekly: 1, Monthly: 2, Quarterly: 3 };
|
|
440
489
|
const ongoingValues = {
|
|
441
490
|
setReminder: report?.setReminder,
|
|
442
|
-
frequencyReminder: ongoingReminderType[report?.frequencyReminder]
|
|
491
|
+
frequencyReminder: ongoingReminderType[report?.frequencyReminder],
|
|
443
492
|
};
|
|
444
493
|
const frequencyValue = this.frequencyService.shortHand_freqCal(report?.frequency, report?.day, report?.month, '', report?.dueDate, ongoingValues);
|
|
445
494
|
// const frequencyValue = this.frequencyService.shortHand_freqCal(report?.frequency, report?.day, report?.month, '');
|
|
446
495
|
const dateAndMonth = report?.month?.split("'");
|
|
447
|
-
const startDate = dateAndMonth
|
|
496
|
+
const startDate = dateAndMonth
|
|
497
|
+
? moment(report?.day +
|
|
498
|
+
'-' +
|
|
499
|
+
dateAndMonth[0] +
|
|
500
|
+
'-' +
|
|
501
|
+
20 +
|
|
502
|
+
dateAndMonth[1] +
|
|
503
|
+
' 00:00:00', 'DD-MMMM-YYYY HH:mm:ss').format('YYYY-MM-DD HH:mm:ss')
|
|
504
|
+
: '';
|
|
448
505
|
let completeDays;
|
|
449
506
|
let notCompleteDays;
|
|
450
507
|
const frequencyType = frequencyValue?.split('~')[0];
|
|
@@ -465,77 +522,143 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
465
522
|
const obj = {
|
|
466
523
|
userId: this.templateInfo?.memberId,
|
|
467
524
|
organisation_id: this.organizationId,
|
|
468
|
-
member_id:
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
525
|
+
member_id: assignorDetails
|
|
526
|
+
? assignorDetails?.memberId
|
|
527
|
+
: this.memberId,
|
|
528
|
+
member_name: assignorDetails
|
|
529
|
+
? report?.assignor
|
|
530
|
+
? report?.assignor.split(' (')[0]
|
|
531
|
+
: ''
|
|
532
|
+
: this.defaultOwner
|
|
533
|
+
? this.defaultOwner?.split(' (')[0]
|
|
534
|
+
: '',
|
|
535
|
+
member_email: assignorDetails
|
|
536
|
+
? report?.assignor
|
|
537
|
+
? report?.assignor?.split(' (')[1]?.replace(')', '')
|
|
538
|
+
: ''
|
|
539
|
+
: this.defaultOwner
|
|
540
|
+
? this.defaultOwner?.split(' (')[1].replace(')', '')
|
|
541
|
+
: '',
|
|
542
|
+
created_by: assignorDetails ? this.memberId : 0,
|
|
472
543
|
report_name: report?.responsibilityName ?? '',
|
|
473
544
|
entrusted_to: report?.assignee?.split(' (')[0] ?? '',
|
|
474
|
-
entrusted_to_id: this.isGroupSelected(report?.assignee)
|
|
475
|
-
|
|
545
|
+
entrusted_to_id: this.isGroupSelected(report?.assignee)
|
|
546
|
+
? this.getEmployeeIdFromGroup(report?.assignee)
|
|
547
|
+
: this.returnIds(report?.assignee, 'entrusted_to')?.toString() ??
|
|
548
|
+
'',
|
|
549
|
+
email_address: !this.isGroupSelected(report?.assignee)
|
|
550
|
+
? report?.assignee?.split(' (')[1]?.replace(')', '') ?? ''
|
|
551
|
+
: '',
|
|
476
552
|
isGroupAssignTo: report?.assigneeType?.includes('Any') ? 1 : 0,
|
|
477
553
|
// category_name: categoryName,
|
|
478
554
|
category_name_with_tree: '',
|
|
479
555
|
category_id: this.getProgramId(report?.program, report?.programCategory).categoryId?.toString() ?? '',
|
|
480
|
-
program_cat_ids: this.getProgramId(report?.program, report?.programCategory)?.programId
|
|
556
|
+
program_cat_ids: this.getProgramId(report?.program, report?.programCategory)?.programId
|
|
557
|
+
? [
|
|
558
|
+
this.getProgramId(report?.program, report?.programCategory)
|
|
559
|
+
?.programId,
|
|
560
|
+
]
|
|
561
|
+
: [],
|
|
481
562
|
rc_name: rcDetails ? rcDetails?.name : '',
|
|
482
563
|
rc_id: rcDetails ? rcDetails?.rcId : 0,
|
|
483
|
-
entity_tree:
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
564
|
+
entity_tree: rcDetails && rcDetails?.rcId
|
|
565
|
+
? [
|
|
566
|
+
{
|
|
567
|
+
parent_rc_ids: rcDetails ? rcDetails?.parentIds : [],
|
|
568
|
+
rc_id: rcDetails ? rcDetails?.rcId : 0,
|
|
569
|
+
},
|
|
570
|
+
]
|
|
571
|
+
: [],
|
|
487
572
|
userGroupIds: {
|
|
488
|
-
assigneeAllGroupIds:
|
|
489
|
-
|
|
573
|
+
assigneeAllGroupIds: !report?.assigneeType?.includes('Any') &&
|
|
574
|
+
this.isGroupSelected(report?.assignee)
|
|
575
|
+
? [this.returnIds(report?.assignee, 'entrusted_to')]
|
|
576
|
+
: [],
|
|
577
|
+
assigneeAnyoneGroupIds: report?.assigneeType?.includes('Any') &&
|
|
578
|
+
this.isGroupSelected(report?.assignee)
|
|
579
|
+
? [this.returnIds(report?.assignee, 'entrusted_to')]
|
|
580
|
+
: [],
|
|
490
581
|
ccEmailGroupIds: [],
|
|
491
582
|
failureCCEmailGroupIds: [],
|
|
492
|
-
reviewerGroupIds: []
|
|
583
|
+
reviewerGroupIds: [],
|
|
493
584
|
},
|
|
494
585
|
frequency_handler: frequencyValue,
|
|
495
586
|
compliance_type: frequencyValue?.split('~')[0],
|
|
496
587
|
frequency_description: report?.frequency,
|
|
497
|
-
start_date:
|
|
588
|
+
start_date: report?.day ? startDate : currentDate + ' 00:00:00',
|
|
498
589
|
risk_class: report?.reportClass ?? '',
|
|
499
|
-
risk_classId:
|
|
590
|
+
risk_classId: report?.reportClass
|
|
591
|
+
? this.returnIds(report?.reportClass, 'risk_class')
|
|
592
|
+
: this.riskClassEnabled
|
|
593
|
+
? 1
|
|
594
|
+
: 2,
|
|
500
595
|
doc_utc: 0,
|
|
501
596
|
comment: report?.notes ?? '',
|
|
502
597
|
cc_mail: ccDetails ? ccDetails?.email : '',
|
|
503
598
|
cc_mail_id: ccDetails ? ccDetails?.employeeId : '',
|
|
504
599
|
cc_failed_mail: ccFailureDetails ? ccFailureDetails?.email : '',
|
|
505
600
|
cc_failure_id: ccFailureDetails ? ccFailureDetails?.employeeId : 0,
|
|
506
|
-
send_reminder:
|
|
507
|
-
responsibilityWindow:
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
601
|
+
send_reminder: '',
|
|
602
|
+
responsibilityWindow: frequencyType === '1'
|
|
603
|
+
? 0
|
|
604
|
+
: completeDays && completeDays != ''
|
|
605
|
+
? completeDays
|
|
606
|
+
: 0,
|
|
607
|
+
failed_after: notCompleteDays && notCompleteDays != '' ? notCompleteDays : 0,
|
|
608
|
+
excel_sheet_name: '',
|
|
609
|
+
report_upload_flag: report?.isFormat === 'Yes' &&
|
|
610
|
+
report?.formatForResponsibility?.length
|
|
611
|
+
? 1
|
|
612
|
+
: 0,
|
|
511
613
|
report_id: 0,
|
|
512
614
|
is_assigned_flag: 0,
|
|
513
615
|
private_library_id: 0,
|
|
514
|
-
keycompliance:
|
|
515
|
-
key_compliance:
|
|
616
|
+
keycompliance: report?.keyResponsibility === 'Yes' ? 'Yes' : 'No',
|
|
617
|
+
key_compliance: report?.keyResponsibility === 'Yes' ? 1 : 0,
|
|
516
618
|
reviewerId: reviewerDetails ? reviewerDetails?.employeeId : 0,
|
|
517
|
-
reviewer_arr:
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
619
|
+
reviewer_arr: reviewerDetails && reviewerDetails?.employeeId
|
|
620
|
+
? {
|
|
621
|
+
level1: {
|
|
622
|
+
reviewers: [
|
|
623
|
+
{
|
|
624
|
+
member_id: reviewerDetails
|
|
625
|
+
? reviewerDetails?.employeeId
|
|
626
|
+
: 0,
|
|
627
|
+
reviewer_accept: 0,
|
|
628
|
+
},
|
|
629
|
+
],
|
|
630
|
+
type: 'SEQUENTIAL',
|
|
631
|
+
},
|
|
524
632
|
}
|
|
525
|
-
|
|
526
|
-
reviewerWindow:
|
|
527
|
-
|
|
633
|
+
: {},
|
|
634
|
+
reviewerWindow: report?.reviewToBeCompletedWithin &&
|
|
635
|
+
report?.reviewToBeCompletedWithin !== ''
|
|
636
|
+
? report?.reviewToBeCompletedWithin
|
|
637
|
+
: 2,
|
|
638
|
+
reviewerFailure: report?.reviewWillBeFailedAfter &&
|
|
639
|
+
report?.reviewWillBeFailedAfter !== ''
|
|
640
|
+
? report?.reviewWillBeFailedAfter
|
|
641
|
+
: 2,
|
|
528
642
|
reviewer_email: reviewerDetails ? reviewerDetails?.email : '',
|
|
529
|
-
formatForResponsibility: report?.formatForResponsibility
|
|
643
|
+
formatForResponsibility: report?.formatForResponsibility
|
|
644
|
+
? report.formatForResponsibility
|
|
645
|
+
: '',
|
|
530
646
|
documentaryEvidence: report?.evidenceNotes ?? '',
|
|
531
|
-
isdocumentaryEvidence:
|
|
647
|
+
isdocumentaryEvidence: report.documentEvidenceRequired === 'Yes' ? 1 : 0,
|
|
532
648
|
objective: report.objective ?? '',
|
|
533
649
|
excel_sheet_info: this.fileResponse,
|
|
534
650
|
showList: false,
|
|
535
651
|
custom_tags: '[]',
|
|
536
652
|
questionnaire_type: '',
|
|
537
|
-
on_completion_of_type:
|
|
538
|
-
|
|
653
|
+
on_completion_of_type: report?.frequency === 'On Completion of' ||
|
|
654
|
+
report?.frequency?.toLowerCase() === 'ongoing'
|
|
655
|
+
? 1
|
|
656
|
+
: 0,
|
|
657
|
+
on_completion_of: this.returnIds(report?.parentResponsibility, 'parentResponsibility')
|
|
658
|
+
? [
|
|
659
|
+
this.returnIds(report?.parentResponsibility, 'parentResponsibility'),
|
|
660
|
+
]
|
|
661
|
+
: [],
|
|
539
662
|
};
|
|
540
663
|
payload.push(obj);
|
|
541
664
|
}
|
|
@@ -546,7 +669,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
546
669
|
this.showExcel = false;
|
|
547
670
|
this.showSmiley = true;
|
|
548
671
|
this.responsibilityData = res;
|
|
549
|
-
}, err => {
|
|
672
|
+
}, (err) => {
|
|
550
673
|
console.log(err);
|
|
551
674
|
this.loader = false;
|
|
552
675
|
this.showExcel = false;
|
|
@@ -566,7 +689,11 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
566
689
|
else {
|
|
567
690
|
name = rc_element.name;
|
|
568
691
|
}
|
|
569
|
-
rcObj = {
|
|
692
|
+
rcObj = {
|
|
693
|
+
name,
|
|
694
|
+
rcId: rc_element.rc_id,
|
|
695
|
+
parentIds: rc_element.parentIds,
|
|
696
|
+
};
|
|
570
697
|
}
|
|
571
698
|
});
|
|
572
699
|
return rcObj;
|
|
@@ -578,7 +705,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
578
705
|
reviewerObj = {
|
|
579
706
|
name: reviewerElement.name,
|
|
580
707
|
employeeId: reviewerElement.my_member_id,
|
|
581
|
-
email: reviewerElement.email
|
|
708
|
+
email: reviewerElement.email,
|
|
582
709
|
};
|
|
583
710
|
}
|
|
584
711
|
});
|
|
@@ -591,7 +718,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
591
718
|
assignorObj = {
|
|
592
719
|
name: assignorElement.name,
|
|
593
720
|
email: assignorElement.email,
|
|
594
|
-
memberId: assignorElement.member_id
|
|
721
|
+
memberId: assignorElement.member_id,
|
|
595
722
|
};
|
|
596
723
|
}
|
|
597
724
|
});
|
|
@@ -604,7 +731,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
604
731
|
ccObj = {
|
|
605
732
|
name: ccElement.name,
|
|
606
733
|
employeeId: ccElement.employee_id,
|
|
607
|
-
email: ccElement.email
|
|
734
|
+
email: ccElement.email,
|
|
608
735
|
};
|
|
609
736
|
}
|
|
610
737
|
});
|
|
@@ -617,7 +744,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
617
744
|
ccfObj = {
|
|
618
745
|
name: ccfElement.name,
|
|
619
746
|
employeeId: ccfElement.employee_id,
|
|
620
|
-
email: ccfElement.email
|
|
747
|
+
email: ccfElement.email,
|
|
621
748
|
};
|
|
622
749
|
}
|
|
623
750
|
});
|
|
@@ -680,7 +807,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
680
807
|
header: [],
|
|
681
808
|
subHeading: [],
|
|
682
809
|
reports: [],
|
|
683
|
-
}
|
|
810
|
+
},
|
|
684
811
|
};
|
|
685
812
|
this.templateInfo = {
|
|
686
813
|
categoryList: [],
|
|
@@ -688,7 +815,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
688
815
|
assignorsList: [],
|
|
689
816
|
assigneesList: [],
|
|
690
817
|
reviewerList: [],
|
|
691
|
-
memberId: ''
|
|
818
|
+
memberId: '',
|
|
692
819
|
};
|
|
693
820
|
this.isFileEmpty = false;
|
|
694
821
|
this.isWrongFile = false;
|
|
@@ -722,7 +849,8 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
722
849
|
urlSubstring = 'compliance/manage-responsibility?' + this.url;
|
|
723
850
|
}
|
|
724
851
|
else {
|
|
725
|
-
urlSubstring =
|
|
852
|
+
urlSubstring =
|
|
853
|
+
'compliance/manage-responsibilities/responsibilities-queue';
|
|
726
854
|
}
|
|
727
855
|
}
|
|
728
856
|
else {
|
|
@@ -754,7 +882,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
754
882
|
this.fileResponse.push(res);
|
|
755
883
|
}
|
|
756
884
|
this.loader = false;
|
|
757
|
-
}, err => {
|
|
885
|
+
}, (err) => {
|
|
758
886
|
console.error(err);
|
|
759
887
|
this.loader = false;
|
|
760
888
|
this.snackBar.show('OOPS! Something went wrong and the page could not be loaded. Could you please try one more time?', 'alert');
|
|
@@ -765,13 +893,15 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
765
893
|
this.templateInfo.memberId = tempList[0][18];
|
|
766
894
|
}
|
|
767
895
|
else {
|
|
768
|
-
this.errorMessage =
|
|
896
|
+
this.errorMessage =
|
|
897
|
+
'The incorrect file has been uploaded. Please upload the template which you downloaded from here.' +
|
|
898
|
+
' RETRY';
|
|
769
899
|
this.isWrongFile = true;
|
|
770
900
|
return;
|
|
771
901
|
}
|
|
772
902
|
tempList.forEach((element) => {
|
|
773
903
|
/* Pushing the value of regulations Programs into the categoryList array. */
|
|
774
|
-
if (element[26] && typeof
|
|
904
|
+
if (element[26] && typeof element[26] === 'number') {
|
|
775
905
|
const regulations = {
|
|
776
906
|
programName: element[22],
|
|
777
907
|
programId: element[26],
|
|
@@ -783,7 +913,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
783
913
|
this.templateInfo.categoryList.push(regulations);
|
|
784
914
|
}
|
|
785
915
|
/* Pushing the value of standards Programs into the categoryList array. */
|
|
786
|
-
if (element[27] && typeof
|
|
916
|
+
if (element[27] && typeof element[27] === 'number') {
|
|
787
917
|
const standards = {
|
|
788
918
|
programName: element[23],
|
|
789
919
|
programId: element[27],
|
|
@@ -795,7 +925,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
795
925
|
this.templateInfo.categoryList.push(standards);
|
|
796
926
|
}
|
|
797
927
|
/* Pushing the value of internal Controls Programs into the categoryList array. */
|
|
798
|
-
if (element[28] && typeof
|
|
928
|
+
if (element[28] && typeof element[28] === 'number') {
|
|
799
929
|
const internalControls = {
|
|
800
930
|
programName: element[24],
|
|
801
931
|
programId: element[28],
|
|
@@ -807,7 +937,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
807
937
|
this.templateInfo.categoryList.push(internalControls);
|
|
808
938
|
}
|
|
809
939
|
/* Pushing the value of others Programs into the categoryList array. */
|
|
810
|
-
if (element[29] && typeof
|
|
940
|
+
if (element[29] && typeof element[29] === 'number') {
|
|
811
941
|
const others = {
|
|
812
942
|
programName: element[25],
|
|
813
943
|
programId: element[29],
|
|
@@ -824,7 +954,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
824
954
|
const rc = {
|
|
825
955
|
name: element[9],
|
|
826
956
|
rc_id: element[10],
|
|
827
|
-
parentIds: JSON.parse(element[11])
|
|
957
|
+
parentIds: JSON.parse(element[11]),
|
|
828
958
|
};
|
|
829
959
|
this.templateInfo.rcList.push(rc);
|
|
830
960
|
}
|
|
@@ -837,7 +967,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
837
967
|
name: element[19],
|
|
838
968
|
email: element[19],
|
|
839
969
|
employee_id: element[20],
|
|
840
|
-
my_member_id: JSON.parse(element[21])
|
|
970
|
+
my_member_id: JSON.parse(element[21]),
|
|
841
971
|
};
|
|
842
972
|
this.templateInfo.assigneesList.push(assignee);
|
|
843
973
|
}
|
|
@@ -848,7 +978,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
848
978
|
name: element[0],
|
|
849
979
|
email: element[1],
|
|
850
980
|
employee_id: element[3],
|
|
851
|
-
my_member_id: element[4]
|
|
981
|
+
my_member_id: element[4],
|
|
852
982
|
};
|
|
853
983
|
this.templateInfo.reviewerList.push(reviewer);
|
|
854
984
|
}
|
|
@@ -870,7 +1000,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
870
1000
|
if (element[17]) {
|
|
871
1001
|
const parentResponsibility = {
|
|
872
1002
|
name: element[16],
|
|
873
|
-
id: JSON.parse(element[17])
|
|
1003
|
+
id: JSON.parse(element[17]),
|
|
874
1004
|
};
|
|
875
1005
|
this.templateInfo.parentResponsibility.push(parentResponsibility);
|
|
876
1006
|
}
|
|
@@ -979,14 +1109,22 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
979
1109
|
reviewToBeCompletedWithin: report[21],
|
|
980
1110
|
reviewWillBeFailedAfter: report[22],
|
|
981
1111
|
overseer: report[23],
|
|
982
|
-
notifyOnFailure: report[24]
|
|
1112
|
+
notifyOnFailure: report[24],
|
|
983
1113
|
};
|
|
984
1114
|
obj['isValidData'] = this.isValidData(obj);
|
|
985
|
-
obj['isValidUser'] = this.returnIds(obj?.assignee, 'entrusted_to')
|
|
1115
|
+
obj['isValidUser'] = this.returnIds(obj?.assignee, 'entrusted_to')
|
|
1116
|
+
? true
|
|
1117
|
+
: false;
|
|
986
1118
|
obj['userValidateWithProgram'] = this.validateDataWithProgram(obj);
|
|
987
1119
|
obj['validDate'] = this.compareWithCurrentDate(obj?.day, obj?.month);
|
|
988
1120
|
obj['isPastDate'] = this.isPastDate(obj?.day, obj?.month);
|
|
989
|
-
obj['isValid'] =
|
|
1121
|
+
obj['isValid'] =
|
|
1122
|
+
obj['isValidData'] &&
|
|
1123
|
+
obj['validDate'] &&
|
|
1124
|
+
!obj['isPastDate'] &&
|
|
1125
|
+
obj?.frequency?.length &&
|
|
1126
|
+
!Object.values(obj['userValidateWithProgram']).includes(false) &&
|
|
1127
|
+
obj['isValidUser'];
|
|
990
1128
|
return obj;
|
|
991
1129
|
}
|
|
992
1130
|
else {
|
|
@@ -1015,14 +1153,21 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
1015
1153
|
reviewToBeCompletedWithin: report[18],
|
|
1016
1154
|
reviewWillBeFailedAfter: report[19],
|
|
1017
1155
|
overseer: report[20],
|
|
1018
|
-
notifyOnFailure: report[21]
|
|
1156
|
+
notifyOnFailure: report[21],
|
|
1019
1157
|
};
|
|
1020
1158
|
obj['isValidData'] = this.isValidData(obj);
|
|
1021
1159
|
obj['userValidateWithProgram'] = this.validateDataWithProgram(obj);
|
|
1022
|
-
obj['isValidUser'] = this.returnIds(obj?.assignee, 'entrusted_to')
|
|
1160
|
+
obj['isValidUser'] = this.returnIds(obj?.assignee, 'entrusted_to')
|
|
1161
|
+
? true
|
|
1162
|
+
: false;
|
|
1023
1163
|
obj['validDate'] = this.compareWithCurrentDate(obj?.day, obj?.month);
|
|
1024
1164
|
obj['isPastDate'] = this.isPastDate(obj?.day, obj?.month);
|
|
1025
|
-
obj['isValid'] =
|
|
1165
|
+
obj['isValid'] =
|
|
1166
|
+
obj['isValidData'] &&
|
|
1167
|
+
obj['validDate'] &&
|
|
1168
|
+
!obj['isPastDate'] &&
|
|
1169
|
+
obj?.frequency?.length &&
|
|
1170
|
+
obj['isValidUser'];
|
|
1026
1171
|
return obj;
|
|
1027
1172
|
}
|
|
1028
1173
|
break;
|
|
@@ -1055,12 +1200,17 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
1055
1200
|
reviewToBeCompletedWithin: report[19],
|
|
1056
1201
|
reviewWillBeFailedAfter: report[20],
|
|
1057
1202
|
overseer: report[21],
|
|
1058
|
-
notifyOnFailure: report[22]
|
|
1203
|
+
notifyOnFailure: report[22],
|
|
1059
1204
|
};
|
|
1060
1205
|
obj['isValidData'] = this.isValidData(obj);
|
|
1061
1206
|
obj['userValidateWithProgram'] = this.validateDataWithProgram(obj);
|
|
1062
|
-
obj['isValidUser'] = this.returnIds(obj?.assignee, 'entrusted_to')
|
|
1063
|
-
|
|
1207
|
+
obj['isValidUser'] = this.returnIds(obj?.assignee, 'entrusted_to')
|
|
1208
|
+
? true
|
|
1209
|
+
: false;
|
|
1210
|
+
obj['isValid'] =
|
|
1211
|
+
obj['isValidData'] &&
|
|
1212
|
+
!Object.values(obj['userValidateWithProgram']).includes(false) &&
|
|
1213
|
+
obj['isValidUser'];
|
|
1064
1214
|
return obj;
|
|
1065
1215
|
}
|
|
1066
1216
|
else {
|
|
@@ -1087,11 +1237,13 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
1087
1237
|
reviewToBeCompletedWithin: report[16],
|
|
1088
1238
|
reviewWillBeFailedAfter: report[17],
|
|
1089
1239
|
overseer: report[18],
|
|
1090
|
-
notifyOnFailure: report[19]
|
|
1240
|
+
notifyOnFailure: report[19],
|
|
1091
1241
|
};
|
|
1092
1242
|
obj['isValidData'] = this.isValidData(obj);
|
|
1093
1243
|
obj['userValidateWithProgram'] = this.validateDataWithProgram(obj);
|
|
1094
|
-
obj['isValidUser'] = this.returnIds(obj?.assignee, 'entrusted_to')
|
|
1244
|
+
obj['isValidUser'] = this.returnIds(obj?.assignee, 'entrusted_to')
|
|
1245
|
+
? true
|
|
1246
|
+
: false;
|
|
1095
1247
|
obj['isValid'] = obj['isValidData'] && obj['isValidUser'];
|
|
1096
1248
|
return obj;
|
|
1097
1249
|
}
|
|
@@ -1126,12 +1278,18 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
1126
1278
|
reviewToBeCompletedWithin: report[21],
|
|
1127
1279
|
reviewWillBeFailedAfter: report[22],
|
|
1128
1280
|
overseer: report[23],
|
|
1129
|
-
notifyOnFailure: report[24]
|
|
1281
|
+
notifyOnFailure: report[24],
|
|
1130
1282
|
};
|
|
1131
1283
|
obj['isValidData'] = this.isValidData(obj);
|
|
1132
1284
|
obj['userValidateWithProgram'] = this.validateDataWithProgram(obj);
|
|
1133
|
-
obj['isValidUser'] = this.returnIds(obj?.assignee, 'entrusted_to')
|
|
1134
|
-
|
|
1285
|
+
obj['isValidUser'] = this.returnIds(obj?.assignee, 'entrusted_to')
|
|
1286
|
+
? true
|
|
1287
|
+
: false;
|
|
1288
|
+
obj['isValid'] =
|
|
1289
|
+
obj['isValidData'] &&
|
|
1290
|
+
!Object.values(obj['userValidateWithProgram']).includes(false) &&
|
|
1291
|
+
obj?.parentResponsibility?.length &&
|
|
1292
|
+
obj['isValidUser'];
|
|
1135
1293
|
return obj;
|
|
1136
1294
|
}
|
|
1137
1295
|
else {
|
|
@@ -1160,12 +1318,17 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
1160
1318
|
reviewToBeCompletedWithin: report[18],
|
|
1161
1319
|
reviewWillBeFailedAfter: report[19],
|
|
1162
1320
|
overseer: report[20],
|
|
1163
|
-
notifyOnFailure: report[21]
|
|
1321
|
+
notifyOnFailure: report[21],
|
|
1164
1322
|
};
|
|
1165
1323
|
obj['isValidData'] = this.isValidData(obj);
|
|
1166
1324
|
obj['userValidateWithProgram'] = this.validateDataWithProgram(obj);
|
|
1167
|
-
obj['isValidUser'] = this.returnIds(obj?.assignee, 'entrusted_to')
|
|
1168
|
-
|
|
1325
|
+
obj['isValidUser'] = this.returnIds(obj?.assignee, 'entrusted_to')
|
|
1326
|
+
? true
|
|
1327
|
+
: false;
|
|
1328
|
+
obj['isValid'] =
|
|
1329
|
+
obj['isValidData'] &&
|
|
1330
|
+
obj?.parentResponsibility?.length &&
|
|
1331
|
+
obj['isValidUser'];
|
|
1169
1332
|
return obj;
|
|
1170
1333
|
}
|
|
1171
1334
|
}
|
|
@@ -1193,7 +1356,9 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
1193
1356
|
* @returns A boolean value.
|
|
1194
1357
|
*/
|
|
1195
1358
|
isValidData(data) {
|
|
1196
|
-
const responsibility = this.checkValidResponsibilityName(data?.responsibilityName)?.length
|
|
1359
|
+
const responsibility = this.checkValidResponsibilityName(data?.responsibilityName)?.length
|
|
1360
|
+
? true
|
|
1361
|
+
: false;
|
|
1197
1362
|
const assignee = data?.assignee?.length ? true : false;
|
|
1198
1363
|
const frequency = data?.frequency?.length ? true : false;
|
|
1199
1364
|
if (assignee && responsibility && frequency && this.isValidUsers(data)) {
|
|
@@ -1214,12 +1379,23 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
1214
1379
|
* @returns A boolean value.
|
|
1215
1380
|
*/
|
|
1216
1381
|
isValidUsers(data) {
|
|
1217
|
-
if ((data?.assignor &&
|
|
1218
|
-
(
|
|
1219
|
-
|
|
1220
|
-
(
|
|
1221
|
-
|
|
1222
|
-
|
|
1382
|
+
if ((data?.assignor &&
|
|
1383
|
+
(data?.assignor == data?.overseer ||
|
|
1384
|
+
data?.assignor == data?.notifyOnFailure)) ||
|
|
1385
|
+
(!data?.assignor &&
|
|
1386
|
+
(this.defaultOwner == data?.overseer ||
|
|
1387
|
+
this.defaultOwner == data?.notifyOnFailure)) ||
|
|
1388
|
+
(data?.assignee &&
|
|
1389
|
+
(data?.assignee == data?.reviewer ||
|
|
1390
|
+
data?.assignee == data?.overseer ||
|
|
1391
|
+
data?.assignee == data?.notifyOnFailure)) ||
|
|
1392
|
+
(!data?.assignee &&
|
|
1393
|
+
(this.defaultOwner == data?.overseer ||
|
|
1394
|
+
this.defaultOwner == data?.notifyOnFailure)) ||
|
|
1395
|
+
(data?.reviewer &&
|
|
1396
|
+
(data?.reviewer == data?.overseer ||
|
|
1397
|
+
data?.reviewer == data?.notifyOnFailure)) ||
|
|
1398
|
+
!data?.assignee) {
|
|
1223
1399
|
return false;
|
|
1224
1400
|
}
|
|
1225
1401
|
else {
|
|
@@ -1251,16 +1427,24 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
1251
1427
|
let isValidNotifyOnFailure = true;
|
|
1252
1428
|
if (program && this.orgDetails?.hasProgramFullPermission) {
|
|
1253
1429
|
if (program[0]?.assignee?.length && selectedAssignee?.length) {
|
|
1254
|
-
isValidAssignee = program[0]?.assignee?.includes(selectedAssignee[0]?.my_member_id)
|
|
1430
|
+
isValidAssignee = program[0]?.assignee?.includes(selectedAssignee[0]?.my_member_id)
|
|
1431
|
+
? true
|
|
1432
|
+
: false;
|
|
1255
1433
|
}
|
|
1256
1434
|
if (program[0]?.reviewer?.length && selectedReviewer?.length) {
|
|
1257
|
-
isValidReviewer = program[0]?.reviewer?.includes(selectedReviewer[0]?.my_member_id)
|
|
1435
|
+
isValidReviewer = program[0]?.reviewer?.includes(selectedReviewer[0]?.my_member_id)
|
|
1436
|
+
? true
|
|
1437
|
+
: false;
|
|
1258
1438
|
}
|
|
1259
1439
|
if (program[0]?.overseer?.length && selectedOverseer?.length) {
|
|
1260
|
-
isValidOverseer = program[0]?.overseer?.includes(selectedOverseer[0]?.my_member_id)
|
|
1440
|
+
isValidOverseer = program[0]?.overseer?.includes(selectedOverseer[0]?.my_member_id)
|
|
1441
|
+
? true
|
|
1442
|
+
: false;
|
|
1261
1443
|
}
|
|
1262
1444
|
if (program[0]?.overseer?.length && selectedNotifyOnFailure?.length) {
|
|
1263
|
-
isValidNotifyOnFailure = program[0]?.overseer?.includes(selectedNotifyOnFailure[0]?.my_member_id)
|
|
1445
|
+
isValidNotifyOnFailure = program[0]?.overseer?.includes(selectedNotifyOnFailure[0]?.my_member_id)
|
|
1446
|
+
? true
|
|
1447
|
+
: false;
|
|
1264
1448
|
}
|
|
1265
1449
|
}
|
|
1266
1450
|
return {
|
|
@@ -1291,7 +1475,8 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
1291
1475
|
subProgramId = subProgram?.length ? subProgram[0]?.id : undefined;
|
|
1292
1476
|
}
|
|
1293
1477
|
if (subProgramId && program?.length) {
|
|
1294
|
-
categoryId =
|
|
1478
|
+
categoryId =
|
|
1479
|
+
program[0]?.programId?.toString() + ',' + subProgramId?.toString();
|
|
1295
1480
|
}
|
|
1296
1481
|
else if (program?.length) {
|
|
1297
1482
|
categoryId = program[0]?.programId?.toString();
|
|
@@ -1333,7 +1518,9 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
1333
1518
|
isGroupSelected(item) {
|
|
1334
1519
|
let isGroup = false;
|
|
1335
1520
|
this.templateInfo.assigneesList.forEach((enElement) => {
|
|
1336
|
-
if (enElement.nameAndEmail == item &&
|
|
1521
|
+
if (enElement.nameAndEmail == item &&
|
|
1522
|
+
(item?.includes('Users)') || item?.includes('User)')) &&
|
|
1523
|
+
typeof enElement?.my_member_id == 'object') {
|
|
1337
1524
|
isGroup = true;
|
|
1338
1525
|
}
|
|
1339
1526
|
});
|
|
@@ -1363,4 +1550,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
1363
1550
|
}], featureflag: [{
|
|
1364
1551
|
type: Input
|
|
1365
1552
|
}] } });
|
|
1366
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi9hZGQtbXVsdGlwbGUtcmVzcG9uc2liaWxpdHktd2l0aC10YWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7QUFjN0IsTUFBTSxPQUFPLHlDQUF5QztJQXVGcEQsWUFDVSxXQUEyQixFQUMzQixxQkFBNEMsRUFDNUMsV0FBd0IsRUFDeEIsZ0JBQXNDLEVBQ3RDLFFBQXlCO1FBSnpCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBc0I7UUFDdEMsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUEzRnpCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakQsMEJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLG1DQUE4QixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDOUQsZUFBVSxHQUFVLEVBQUUsQ0FBQztRQUN2Qiw0QkFBdUIsR0FBUSxFQUFDLG9CQUFvQixFQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMseUJBQXlCLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxFQUFDLFVBQVUsRUFBQyxFQUFDLE1BQU0sRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxFQUFDLGNBQWMsRUFBQyxFQUFDLHNCQUFzQixFQUFDLEVBQUUsRUFBQyxhQUFhLEVBQUMsRUFBRSxFQUFDLGFBQWEsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyx3QkFBd0IsRUFBQyxFQUFFLEVBQUMsRUFBQyxtQkFBbUIsRUFBQyxFQUFDLE1BQU0sRUFBQyxFQUFFLEVBQUMsZ0JBQWdCLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsRUFBQyxRQUFRLEVBQUMsRUFBRSxFQUFDLENBQUM7UUFPeFYsUUFBRyxHQUFFLHlWQUF5VixDQUFBO1FBQzlWLDZCQUF3QixHQUFRO1lBQzlCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFBO1FBQ0QsWUFBTyxHQUE2QyxXQUFXLENBQUM7UUFDaEUsYUFBUSxHQUFRO1lBQ2QsU0FBUyxFQUFDLENBQUM7WUFDWCxPQUFPLEVBQUMsQ0FBQztZQUNULFlBQVksRUFBQyxDQUFDO1NBQ2YsQ0FBQTtRQUVELGVBQVUsR0FBUTtZQUNoQixTQUFTLEVBQUU7Z0JBQ1QsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsT0FBTyxFQUFFLEVBQUU7YUFDWjtZQUNELE9BQU8sRUFBRTtnQkFDUCxNQUFNLEVBQUUsRUFBRTtnQkFDVixVQUFVLEVBQUUsRUFBRTtnQkFDZCxPQUFPLEVBQUUsRUFBRTthQUNaO1lBQ0QsWUFBWSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxFQUFFO2dCQUNWLFVBQVUsRUFBRSxFQUFFO2dCQUNkLE9BQU8sRUFBRSxFQUFFO2FBQ1o7U0FDRixDQUFBO1FBRUQsaUJBQVksR0FBUTtZQUVsQixZQUFZLEVBQUUsRUFBRTtZQUNoQixNQUFNLEVBQUUsRUFBRTtZQUNWLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLFlBQVksRUFBRSxFQUFFO1lBQ2hCLG9CQUFvQixFQUFFLEVBQUU7WUFDeEIsUUFBUSxFQUFFLEVBQUU7U0FDYixDQUFBO1FBQ0QsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUMzQixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2YsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFHdEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUN4QixpQkFBWSxHQUFRLEVBQUUsQ0FBQztRQUV2QixhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDbkIsaUJBQVksR0FBRyxxQkFBcUIsQ0FBQTtRQUNwQyxtQkFBYyxHQUFXLGlCQUFpQixDQUFDO1FBQzNDLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLGlCQUFZLEdBQUcsRUFBRSxDQUFBO1FBQ2pCLGtCQUFhLEdBQUcsbUdBQW1HLENBQUM7UUFDcEgsa0JBQWEsR0FBRztZQUNkLEVBQUUsVUFBVSxFQUFFLCtCQUErQixFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRTtZQUNsRixFQUFFLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFO1NBQ3pJLENBQUM7UUFDRixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGtCQUFhLEdBQUcsRUFBRSxDQUFDO0lBYW5CLENBQUM7SUFwRkQsSUFBMkIsZ0JBQWdCLENBQUMsSUFBUztRQUNuRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFvRkQsV0FBVyxDQUFDLE9BQXNCO0lBRWxDLENBQUM7SUFDRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDM0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQztRQUN2RCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUMvRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFBO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckQsSUFBSSxPQUFPLEVBQUU7WUFDWCxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBQ0QsY0FBYztRQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDcEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVSxFQUFFLE9BQVk7UUFDbkMsSUFBSTtZQUNGLElBQUksQ0FBQyx3QkFBd0IsR0FBRztnQkFDOUIsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsT0FBTyxFQUFFLEVBQUU7YUFDWixDQUFBO1lBRUQsSUFBSSxDQUFDLFlBQVksR0FBRztnQkFDbEIsWUFBWSxFQUFFLEVBQUU7Z0JBQ2hCLE1BQU0sRUFBRSxFQUFFO2dCQUNWLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsWUFBWSxFQUFDLEVBQUU7Z0JBQ2Ysb0JBQW9CLEVBQUUsRUFBRTtnQkFDeEIsUUFBUSxFQUFFLEVBQUU7YUFFYixDQUFBO1lBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDeEIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzdELElBQUksU0FBUyxFQUFFO2dCQUNiLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2FBQ25FO1lBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDM0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QyxNQUFNLE1BQU0sR0FBaUIsS0FBSyxDQUFDLE1BQXNCLENBQUM7WUFDMUQsa0NBQWtDO1lBQ2xDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDNUUsTUFBTSxNQUFNLEdBQWUsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUM1QyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQ3pCLE1BQU0sSUFBSSxHQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUNyQyxNQUFNLEVBQUUsR0FBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDOUQsTUFBTSxNQUFNLEdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxNQUFNLEdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxNQUFNLEdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxPQUFPLEdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekMsTUFBTSxFQUFFLEdBQW1CLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdDLE1BQU0sWUFBWSxHQUFtQixFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN2RCxNQUFNLFlBQVksR0FBbUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdkQsTUFBTSxRQUFRLEdBQW1CLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3BELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBUSxDQUFDO2dCQUN2RSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBZ0IsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDNUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN0QyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO29CQUNuQyxRQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRTt3QkFDM0IsS0FBSyw0QkFBNEI7NEJBQy9CLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUE7NEJBQ3ZDLE1BQU07d0JBQ1IsS0FBSywwQkFBMEI7NEJBQzdCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7NEJBQ2xELE1BQU07d0JBQ1IsS0FBSyxnQ0FBZ0M7NEJBQ25DLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUE7NEJBQ2pELE1BQU07d0JBQ1IsT0FBUSxDQUFDLENBQUMsTUFBTTtxQkFDakI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUM7WUFDRixNQUFNLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVDO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVix1Q0FBdUM7WUFDdkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsQjtJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHVCQUF1QixDQUFDLEVBQWtCLEVBQUUsS0FBYTtRQUN2RCxJQUFJLHdCQUF3QixHQUFRO1lBQ2xDLE1BQU0sRUFBRSxFQUFFO1lBQ1YsT0FBTyxFQUFFLEVBQUU7WUFDWCxVQUFVLEVBQUMsRUFBRTtTQUNkLENBQUE7UUFDRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSztTQUN0QixDQUFRLENBQUM7UUFDVixJQUFJLElBQUksR0FBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDekMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTtnQkFDdEIsV0FBVyxHQUFHLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUksU0FBUyxFQUFDO2dCQUNoRCxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2FBQ3BFO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7YUFDcEU7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUVGLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFlBQVksR0FBRyxrR0FBa0csR0FBRyxRQUFRLENBQUM7WUFDbEksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsT0FBTztTQUNSO1FBRUQsd0JBQXdCLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCx3QkFBd0IsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpELElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdEQsSUFBSSxDQUFDLFlBQVksR0FBRyxrR0FBa0csR0FBRyxRQUFRLENBQUM7WUFDbEksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsT0FBTztTQUNSO1FBRUQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBZ0IsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyRixrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUN6QyxJQUFJLFNBQVMsQ0FBQztZQUNkLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUMzRSxJQUFHLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSSxTQUFTLEVBQUU7Z0JBQ2xELFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBRS9EO2lCQUNJO2dCQUNILFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQy9EO1lBQ0QsMkVBQTJFO1lBQzNFLElBQUcsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLDRCQUE0QixFQUFDO2dCQUN2RCx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDbEosSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLHdCQUF3QixFQUFFLE1BQU0sQ0FBQztnQkFDcEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLHdCQUF3QixFQUFFLFVBQVUsQ0FBQztnQkFDNUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLHdCQUF3QixFQUFFLE9BQU8sQ0FBQzthQUN2RTtZQUNELElBQUcsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLDBCQUEwQixFQUFDO2dCQUNyRCx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDaEosSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLHdCQUF3QixFQUFFLE1BQU0sQ0FBQztnQkFDbEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLHdCQUF3QixFQUFFLFVBQVUsQ0FBQztnQkFDMUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLHdCQUF3QixFQUFFLE9BQU8sQ0FBQzthQUNyRTtZQUNELElBQUcsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLGdDQUFnQyxFQUFDO2dCQUMzRCx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDckosSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLHdCQUF3QixFQUFFLE1BQU0sQ0FBQztnQkFDdkUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLHdCQUF3QixFQUFFLFVBQVUsQ0FBQztnQkFDL0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLHdCQUF3QixFQUFFLE9BQU8sQ0FBQzthQUMxRTtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQzs7cUdBRTZGO1FBQzdGLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxDQUFDLFlBQVksR0FBRyx3RkFBd0YsQ0FBQztZQUM3RyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixPQUFPO1NBQ1I7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxzQkFBc0IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssc0JBQXNCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLHNCQUFzQixFQUFFO1lBQ3BOLElBQUksQ0FBQyxZQUFZLEdBQUcsa0dBQWtHLEdBQUcsUUFBUSxDQUFDO1lBQ2xJLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLE9BQU87U0FDUjthQUFNO1lBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsY0FBYyxDQUFDLElBQVU7UUFDdkIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtZQUM5QyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUM7WUFDM0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUM7U0FDNUI7YUFBTSxJQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7WUFDbkQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDO1lBQ3pELElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1NBQzFCO2FBQU0sSUFBRyxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO1lBQ3hELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQztZQUM5RCxJQUFJLENBQUMsT0FBTyxHQUFHLGNBQWMsQ0FBQztTQUMvQjthQUFNO1lBQ0wsT0FBTyxHQUFHLElBQUksQ0FBQztTQUNoQjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxHQUFRLEVBQUUsS0FBVTtRQUN6QyxNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9CLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzFCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzFCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzFCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzFCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzFCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzFCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzFCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzFCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzFCLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzNCLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQzNCLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1NBQzVCLENBQUM7UUFFRixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUM7U0FDYjthQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUMxQixPQUFPLEtBQUssQ0FBQztTQUNkO2FBQU07WUFDTCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXRDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUN4SixJQUFJLFNBQVMsSUFBSSxjQUFjLEVBQUU7Z0JBQy9CLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBRWhCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNOLE1BQU0sVUFBVSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFFOUIsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwSSxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoQyx1REFBdUQ7WUFDdkQsNkZBQTZGO1lBQzdGLFdBQVc7WUFDWCxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsRUFBRTtnQkFFL0csT0FBTyxLQUFLLENBQUM7YUFDZDtpQkFBTTtnQkFDTCxPQUFPLElBQUksQ0FBQzthQUNiO1NBRUY7SUFDSCxDQUFDO0lBQ0QsVUFBVSxDQUFDLEdBQVEsRUFBRSxLQUFVO1FBQzdCLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFL0IsTUFBTSxVQUFVLEdBQUc7WUFDakIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDMUIsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDM0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDM0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7U0FDNUIsQ0FBQztRQUVGLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNuQixPQUFPLEtBQUssQ0FBQztTQUNkO2FBQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQzFCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7YUFBTTtZQUNMLHVEQUF1RDtZQUN2RCxNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzlCLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEksVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pELFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEMsSUFBSSxXQUFXLEdBQUcsVUFBVSxFQUFFO2dCQUM1QixPQUFPLElBQUksQ0FBQzthQUNiO2lCQUFNO2dCQUNMLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjtJQUVILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztRQUNwQyxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztRQUN6QixNQUFNLFlBQVksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxRCxNQUFNLFFBQVEsR0FBRyw0QkFBNEIsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUUxRyxJQUFJLENBQUMsV0FBVyxDQUFDLDhCQUE4QixFQUFFLENBQUMsU0FBUyxDQUN6RCxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQ1osSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNmLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDekQ7WUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ2IsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQy9GLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNWO1FBRUgsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxjQUFjLEdBQUcsWUFBWSxDQUFDO1FBQ3JDLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELDhCQUE4QjtRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixNQUFNLE9BQU8sR0FBUSxFQUFFLENBQUM7UUFDeEIsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUUsQ0FBQztRQUNyRSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xELDZCQUE2QjtRQUM3QixJQUFJLHdCQUF3QixHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZKLG1FQUFtRTtRQUNuRSx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUMvQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ2xCLElBQUcsTUFBTSxFQUFFLHNCQUFzQixLQUFLLElBQUksRUFBQztvQkFDekMsTUFBTSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztpQkFDcEM7Z0JBQ0QsTUFBTSxTQUFTLEdBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzdFLE1BQU0sZUFBZSxHQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDMUUsTUFBTSxlQUFlLEdBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNwRyxvRUFBb0U7Z0JBQ3BFLE1BQU0sU0FBUyxHQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDOUQsTUFBTSxnQkFBZ0IsR0FBUSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ2xGLE1BQU0sV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFFbEQsMkpBQTJKO2dCQUMzSixJQUFJLG1CQUFtQixHQUFRLEVBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUMsQ0FBQTtnQkFDMUUsTUFBTSxhQUFhLEdBQUc7b0JBQ3BCLFdBQVcsRUFBRSxNQUFNLEVBQUUsV0FBVztvQkFDaEMsaUJBQWlCLEVBQUcsbUJBQW1CLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDO2lCQUNuRSxDQUFBO2dCQUNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFDbEoscUhBQXFIO2dCQUNySCxNQUFNLFlBQVksR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDL0MsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBRW5MLElBQUksWUFBWSxDQUFDO2dCQUNqQixJQUFJLGVBQWUsQ0FBQTtnQkFDbkIsTUFBTSxhQUFhLEdBQUcsY0FBYyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxNQUFNLENBQUMsb0JBQW9CLElBQUksTUFBTSxDQUFDLG9CQUFvQixLQUFLLEVBQUUsRUFBRTtvQkFDckUsWUFBWSxHQUFHLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQztpQkFDN0M7cUJBQU0sSUFBSSxrQkFBa0IsRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUU7b0JBQ3RELE1BQU0sWUFBWSxHQUFHLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDaEUsWUFBWSxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztpQkFDNUM7Z0JBQ0QsSUFBSSxNQUFNLEVBQUUsV0FBVyxJQUFJLE1BQU0sRUFBRSxXQUFXLEtBQUssRUFBRSxFQUFFO29CQUNyRCxlQUFlLEdBQUcsTUFBTSxFQUFFLFdBQVcsQ0FBQztpQkFDdkM7cUJBQU0sSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUU7b0JBQ3JELE1BQU0sWUFBWSxHQUFHLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDaEUsZUFBZSxHQUFHLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUNsRDtnQkFDRCxNQUFNLEdBQUcsR0FBRztvQkFDVixNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRO29CQUNuQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWM7b0JBQ3BDLFNBQVMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUTtvQkFDeEUsV0FBVyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDN0osWUFBWSxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ2xNLFVBQVUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqRCxXQUFXLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixJQUFJLEVBQUU7b0JBQzdDLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUNwRCxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO29CQUM1SyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUN4SCxlQUFlLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUQsK0JBQStCO29CQUMvQix1QkFBdUIsRUFBRSxFQUFFO29CQUMzQixXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtvQkFDckcsZUFBZSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3ZLLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3pDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3RDLFdBQVcsRUFBRSxDQUFDLFNBQVMsSUFBSSxTQUFTLEVBQUUsSUFBSSxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQzlDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7NEJBQ3BELEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQ3ZDLENBQUMsQ0FBQSxDQUFDLENBQUEsRUFBRTtvQkFDTCxZQUFZLEVBQUc7d0JBQ2IsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ2pLLHNCQUFzQixFQUFFLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDbkssZUFBZSxFQUFFLEVBQUU7d0JBQ25CLHNCQUFzQixFQUFFLEVBQUU7d0JBQzFCLGdCQUFnQixFQUFFLEVBQUU7cUJBQ3JCO29CQUNELGlCQUFpQixFQUFFLGNBQWM7b0JBQ2pDLGVBQWUsRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUMscUJBQXFCLEVBQUUsTUFBTSxFQUFFLFNBQVM7b0JBQ3hDLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsV0FBVztvQkFDakUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLElBQUksRUFBRTtvQkFDckMsWUFBWSxFQUFFLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzNILE9BQU8sRUFBRSxDQUFDO29CQUNWLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUU7b0JBQzVCLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQzFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ2xELGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUMvRCxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEUsYUFBYSxFQUFFLEVBQUU7b0JBQ2pCLG9CQUFvQixFQUFFLENBQUMsYUFBYSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMzRyxZQUFZLEVBQUUsQ0FBQyxlQUFlLElBQUksZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlFLGdCQUFnQixFQUFFLEVBQUU7b0JBQ3BCLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxLQUFLLEtBQUssQ0FBQyxJQUFJLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNyRyxTQUFTLEVBQUUsQ0FBQztvQkFDWixnQkFBZ0IsRUFBRSxDQUFDO29CQUNuQixrQkFBa0IsRUFBRSxDQUFDO29CQUNyQixhQUFhLEVBQUUsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtvQkFDbkUsY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLGlCQUFpQixLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzdELFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzdELFlBQVksRUFBRSxDQUFFLGVBQWUsSUFBSSxlQUFlLEVBQUUsVUFBVSxDQUFFLENBQUEsQ0FBQyxDQUFDO3dCQUNoRSxNQUFNLEVBQUU7NEJBQ04sU0FBUyxFQUFFLENBQUM7b0NBQ1YsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQ0FDNUQsZUFBZSxFQUFFLENBQUM7aUNBQ25CLENBQUM7NEJBQ0YsSUFBSSxFQUFFLFlBQVk7eUJBQ25CO3FCQUNGLENBQUEsQ0FBQyxDQUFBLEVBQUU7b0JBRUosY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLHlCQUF5QixJQUFJLE1BQU0sRUFBRSx5QkFBeUIsS0FBSyxFQUFFLENBQUMsQ0FBRSxDQUFDLENBQUMsTUFBTSxFQUFFLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN4SSxlQUFlLEVBQUUsQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLElBQUksTUFBTSxFQUFFLHVCQUF1QixLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xJLGNBQWMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQzdELHVCQUF1QixFQUFFLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUM5RixtQkFBbUIsRUFBRSxNQUFNLEVBQUUsYUFBYSxJQUFJLEVBQUU7b0JBQ2hELHFCQUFxQixFQUFFLENBQUMsTUFBTSxDQUFDLHdCQUF3QixLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzFFLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxJQUFJLEVBQUU7b0JBQ2pDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxZQUFZO29CQUNuQyxRQUFRLEVBQUUsS0FBSztvQkFDZixXQUFXLEVBQUUsSUFBSTtvQkFDakIsa0JBQWtCLEVBQUUsRUFBRTtvQkFDdEIscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxLQUFLLGtCQUFrQixJQUFJLE1BQU0sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDM0gsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7aUJBQ3JLLENBQUE7Z0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNuQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsbUdBQW1HO1FBQ25HLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUMvRSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDO1FBRWhDLENBQUMsRUFDQyxHQUFHLENBQUMsRUFBRTtZQUNKLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0dBQWtHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEksQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBR0QsU0FBUyxDQUFDLElBQVMsRUFBRSxHQUFXO1FBQzlCLFFBQVEsR0FBRyxFQUFFO1lBQ1gsS0FBSyxPQUFPO2dCQUNWLElBQUksS0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBZSxFQUFFLEVBQUU7b0JBQ25ELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUU7d0JBQzNCLElBQUksSUFBSSxDQUFDO3dCQUNULElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7NEJBQ3hDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTt5QkFDOUM7NkJBQU07NEJBQ0wsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7eUJBQ3hCO3dCQUNELEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO3FCQUMzRTtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLEtBQUssQ0FBQTtnQkFDWixNQUFNO1lBQ1IsS0FBSyxVQUFVO2dCQUNiLElBQUksV0FBVyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDekQsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBb0IsRUFBRSxFQUFFO29CQUMvRCxJQUFJLGVBQWUsQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFO3dCQUN4QyxXQUFXLEdBQUc7NEJBQ1osSUFBSSxFQUFFLGVBQWUsQ0FBQyxJQUFJOzRCQUMxQixVQUFVLEVBQUUsZUFBZSxDQUFDLFlBQVk7NEJBQ3hDLEtBQUssRUFBRSxlQUFlLENBQUMsS0FBSzt5QkFDN0IsQ0FBQTtxQkFDRjtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLFdBQVcsQ0FBQztnQkFFbkIsTUFBTTtZQUNSLEtBQUssVUFBVTtnQkFDYixJQUFJLFdBQVcsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGVBQW9CLEVBQUUsRUFBRTtvQkFDL0QsSUFBSSxlQUFlLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRTt3QkFDeEMsV0FBVyxHQUFHOzRCQUNaLElBQUksRUFBRSxlQUFlLENBQUMsSUFBSTs0QkFDMUIsS0FBSyxFQUFFLGVBQWUsQ0FBQyxLQUFLOzRCQUM1QixRQUFRLEVBQUUsZUFBZSxDQUFDLFNBQVM7eUJBQ3BDLENBQUE7cUJBQ0Y7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxXQUFXLENBQUM7Z0JBRW5CLE1BQU07WUFDUixLQUFLLElBQUk7Z0JBQ1AsSUFBSSxLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFBO2dCQUNsRCxJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFjLEVBQUUsRUFBRTtvQkFDekQsSUFBSSxTQUFTLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRTt3QkFDbEMsS0FBSyxHQUFHOzRCQUNOLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTs0QkFDcEIsVUFBVSxFQUFFLFNBQVMsQ0FBQyxXQUFXOzRCQUNqQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUs7eUJBQ3ZCLENBQUE7cUJBQ0Y7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxLQUFLLENBQUM7Z0JBQ2IsTUFBTTtZQUNSLEtBQUssV0FBVztnQkFDZCxJQUFJLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQWUsRUFBRSxFQUFFO29CQUMxRCxJQUFJLFVBQVUsQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFO3dCQUNuQyxNQUFNLEdBQUc7NEJBQ1AsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJOzRCQUNyQixVQUFVLEVBQUUsVUFBVSxDQUFDLFdBQVc7NEJBQ2xDLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSzt5QkFDeEIsQ0FBQTtxQkFDRjtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLE1BQU0sQ0FBQztnQkFDZCxNQUFNO1lBRVIsS0FBSyxjQUFjO2dCQUNqQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUE7Z0JBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBYyxFQUFFLEVBQUU7b0JBQ3pELElBQUksU0FBUyxDQUFDLFlBQVksSUFBSSxJQUFJLEVBQUU7d0JBQ2xDLEtBQUssR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDO3FCQUMvQjtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLEtBQUssQ0FBQTtnQkFDWixNQUFNO1lBRVIsS0FBSyxzQkFBc0I7Z0JBQ3pCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQTtnQkFDVixJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQW1CLEVBQUUsRUFBRTtvQkFDckUsSUFBSSxjQUFjLEVBQUUsSUFBSSxLQUFLLElBQUksRUFBRTt3QkFDakMsRUFBRSxHQUFHLGNBQWMsQ0FBQyxFQUFFLENBQUM7cUJBQ3hCO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU07WUFHUixLQUFLLFlBQVk7Z0JBRWYsSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFO29CQUNqQixPQUFPLENBQUMsQ0FBQTtpQkFDVDtxQkFBTSxJQUFJLElBQUksSUFBSSxZQUFZLEVBQUU7b0JBQy9CLE9BQU8sQ0FBQyxDQUFBO2lCQUNUO3FCQUFNLElBQUksSUFBSSxJQUFJLGFBQWEsRUFBRTtvQkFDaEMsT0FBTyxDQUFDLENBQUE7aUJBQ1Q7cUJBQU0sSUFBSSxJQUFJLElBQUksTUFBTSxFQUFFO29CQUN6QixPQUFPLENBQUMsQ0FBQTtpQkFDVDtxQkFBTTtvQkFDTCxPQUFPLENBQUMsQ0FBQTtpQkFDVDtnQkFDRCxNQUFNO1NBQ1Q7SUFFSCxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyx3QkFBd0IsR0FBRztZQUM5QixNQUFNLEVBQUUsRUFBRTtZQUNWLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQTtRQUNELElBQUksQ0FBQyxVQUFVLEdBQUc7WUFDaEIsU0FBUyxFQUFFO2dCQUNULE1BQU0sRUFBRSxFQUFFO2dCQUNWLFVBQVUsRUFBRSxFQUFFO2dCQUNkLE9BQU8sRUFBRSxFQUFFO2FBQ1o7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsT0FBTyxFQUFFLEVBQUU7YUFDWjtZQUNELFlBQVksRUFBRTtnQkFDWixNQUFNLEVBQUUsRUFBRTtnQkFDVixVQUFVLEVBQUUsRUFBRTtnQkFDZCxPQUFPLEVBQUUsRUFBRTthQUNaO1NBQ0YsQ0FBQTtRQUVELElBQUksQ0FBQyxZQUFZLEdBQUc7WUFDbEIsWUFBWSxFQUFFLEVBQUU7WUFDaEIsTUFBTSxFQUFFLEVBQUU7WUFDVixhQUFhLEVBQUUsRUFBRTtZQUNqQixhQUFhLEVBQUUsRUFBRTtZQUNqQixZQUFZLEVBQUUsRUFBRTtZQUNoQixRQUFRLEVBQUUsRUFBRTtTQUViLENBQUE7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUV4QixJQUFJLENBQUMsOEJBQThCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUNELE1BQU0sQ0FBQyxLQUFhO1FBQ2xCLFFBQVEsS0FBSyxFQUFFO1lBQ2IsS0FBSyxTQUFTO2dCQUNaLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDYixNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM1QixNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQVU7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsSUFBSSxHQUFXLENBQUM7UUFDaEIsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDOUIsSUFBRyxJQUFJLENBQUMsV0FBVyxFQUFDO2dCQUNsQixZQUFZLEdBQUcsbUNBQW1DLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQzthQUMvRDtpQkFBSTtnQkFDTCxZQUFZLEdBQUcsMkRBQTJELENBQUM7YUFDMUU7U0FDRjthQUFNO1lBQ0wsSUFBRyxJQUFJLENBQUMsV0FBVyxFQUFDO2dCQUNsQixJQUFJLENBQUMsVUFBVSxHQUFJLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUE7Z0JBQ2hFLFlBQVksR0FBRyxxQ0FBcUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO2FBQ3hFO2lCQUFJO2dCQUNMLFlBQVksR0FBRyxvQ0FBb0MsQ0FBQzthQUNuRDtTQUNGO1FBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDaEQsR0FBRyxHQUFHLFNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsR0FBRyxZQUFZLENBQUM7U0FDMUU7YUFBTTtZQUNMLEdBQUcsR0FBRyxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDO1NBQzNFO1FBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQzdCLENBQUM7SUFFRCw0QkFBNEI7SUFDNUIsVUFBVTtRQUNSLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQyxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDckUsSUFBSSxHQUFHLEVBQUUsUUFBUSxFQUFFO2dCQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM3QjtZQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBRXRCLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNQLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0dBQWtHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFbEksQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsUUFBYTtRQUNsQyxJQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFDO1lBQzlDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM5QzthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxrR0FBa0csR0FBRyxRQUFRLENBQUM7WUFDbEksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsT0FBTztTQUNSO1FBQ0QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO1lBRWhDLDRFQUE0RTtZQUM1RSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxPQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO2dCQUNuRCxNQUFNLFdBQVcsR0FBRztvQkFDbEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ3hCLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDakMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2xFLFdBQVcsRUFBRSxDQUFDO2lCQUNmLENBQUE7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2xEO1lBRUQsMEVBQTBFO1lBQzFFLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLE9BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7Z0JBQ25ELE1BQU0sU0FBUyxHQUFHO29CQUNoQixXQUFXLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDeEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ3RCLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDakMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNqQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDbEUsV0FBVyxFQUFFLENBQUM7aUJBQ2YsQ0FBQTtnQkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDaEQ7WUFFRCxrRkFBa0Y7WUFDbEYsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksT0FBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDbkQsTUFBTSxnQkFBZ0IsR0FBRztvQkFDdkIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ3hCLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDakMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2xFLFdBQVcsRUFBRSxDQUFDO2lCQUNmLENBQUE7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDdkQ7WUFFRCx1RUFBdUU7WUFDdkUsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksT0FBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDbkQsTUFBTSxNQUFNLEdBQUc7b0JBQ2IsV0FBVyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ3hCLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDakMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2xFLFdBQVcsRUFBRSxDQUFDO2lCQUNmLENBQUE7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzdDO1lBRUQ7aUVBQ3FEO1lBQ3JELElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBRSxHQUFHLEVBQUU7Z0JBQ2pDLE1BQU0sRUFBRSxHQUFHO29CQUNULElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUNoQixLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDbEIsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUNuQyxDQUFBO2dCQUNELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNuQztZQUNEO2lHQUNxRjtZQUNyRixJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUUsR0FBRyxFQUFFO2dCQUNuQyxNQUFNLFFBQVEsR0FBRztvQkFDZixZQUFZLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDekIsb0NBQW9DO29CQUNwQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDakIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ2xCLFdBQVcsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUN4QixZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUU7aUJBQ3ZDLENBQUE7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ2hEO1lBRUQsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFFLEdBQUcsRUFBRTtnQkFDakMsTUFBTSxRQUFRLEdBQUc7b0JBQ2YsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ3hCLG9DQUFvQztvQkFDcEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUNqQixXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDdkIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7aUJBQ3pCLENBQUE7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQy9DO1lBQ0Q7K0ZBQ21GO1lBQ25GLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBRSxHQUFHLEVBQUU7Z0JBQ2pDLE1BQU0sUUFBUSxHQUFHO29CQUNmLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUN4QixJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDaEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ2pCLG9DQUFvQztvQkFDcEMsc0RBQXNEO29CQUN0RCxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztpQkFDdEIsQ0FBQTtnQkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDaEQ7WUFFRDt1RUFDMkQ7WUFDM0QsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ2YsTUFBTSxvQkFBb0IsR0FBRztvQkFDM0IsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ2pCLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDNUIsQ0FBQTtnQkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2FBQ25FO1FBRUgsQ0FBQyxDQUFDLENBQUM7UUFFSCxnR0FBZ0c7UUFDaEcsSUFBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUU7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBYSxFQUFFLENBQVMsRUFBRSxFQUFFO2dCQUNuRSxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDdEQsSUFBRyxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQ2YsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO29CQUN2QiwwQ0FBMEM7b0JBQzFDLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBQzt3QkFDckIsSUFBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDOzRCQUNuQyxNQUFNLFFBQVEsR0FBRztnQ0FDZixJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRSxDQUFDLENBQUM7Z0NBQzNCLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDOzZCQUN2QixDQUFBOzRCQUNELGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7eUJBQzlCOzZCQUFNOzRCQUNMLE1BQU07eUJBQ1A7cUJBQ0Y7b0JBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsYUFBYSxDQUFDO2lCQUNwRTtZQUNILENBQUMsQ0FBQyxDQUFBO1NBQ0g7UUFFRCx5RkFBeUY7SUFDM0YsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztPQWlCRztJQUNILFdBQVcsQ0FBQyxLQUErQztRQUN6RCxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixRQUFPLEtBQUssRUFBRTtZQUNaLEtBQUssV0FBVztnQkFDZCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUM7Z0JBQzNELE1BQU07WUFDUixLQUFLLFNBQVM7Z0JBQ1osSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDO2dCQUN6RCxNQUFNO1lBQ1IsS0FBSyxjQUFjO2dCQUNqQixJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUM7Z0JBQzlELE1BQU07WUFDUjtnQkFDRSxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUM7Z0JBQzNELE1BQU07U0FDVDtRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUM5RixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxnQkFBZ0IsQ0FBQyxNQUFXLEVBQUUsT0FBZSxFQUFFLFNBQWtCO1FBQy9ELElBQUksR0FBUSxDQUFDO1FBQ2IsUUFBTyxPQUFPLEVBQUM7WUFDYixLQUFLLFdBQVcsQ0FBQyxDQUFDO2dCQUNoQixJQUFHLFNBQVMsRUFBQztvQkFDWCxHQUFHLEdBQUc7d0JBQ0osa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDN0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3RCLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNsQixlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDMUIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ25CLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNuQixZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDdkIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDNUIsc0JBQXNCLEVBQUUsSUFBSTt3QkFDNUIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3BCLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNkLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNqQixvQkFBb0IsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNoQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDdkIsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDaEMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3ZCLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNyQixLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDakIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3BCLHVCQUF1QixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ25DLHdCQUF3QixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3BDLDZCQUE2Qjt3QkFDN0IsMkJBQTJCO3dCQUMzQixRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEIseUJBQXlCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDckMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDbkMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3BCLGVBQWUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3FCQUM1QixDQUFBO29CQUNELEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMzQyxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDbEYsR0FBRyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNuRSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNyRSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDMUQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDaE0sT0FBTyxHQUFHLENBQUM7aUJBQ1o7cUJBQU07b0JBQ0wsR0FBRyxHQUFHO3dCQUNKLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQzdCLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNuQixRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDbkIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3ZCLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQzVCLHNCQUFzQixFQUFFLElBQUk7d0JBQzVCLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNwQixHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDZCxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDaEIsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDL0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3RCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ2hDLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUN2QixTQUFTLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDckIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ2pCLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNwQix1QkFBdUIsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNuQyx3QkFBd0IsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNwQyw2QkFBNkI7d0JBQzdCLDJCQUEyQjt3QkFDM0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3BCLHlCQUF5QixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3JDLHVCQUF1QixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ25DLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNwQixlQUFlLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztxQkFDNUIsQ0FBQTtvQkFDRCxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDM0MsR0FBRyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNuRSxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDbEYsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDckUsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQzFELEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDOUgsT0FBTyxHQUFHLENBQUM7aUJBQ1o7Z0JBQ0QsTUFBTTthQUNQO1lBQ0QsS0FBSyxTQUFTLENBQUMsQ0FBQztnQkFDZCxJQUFHLFNBQVMsRUFBQztvQkFDWCxHQUFHLEdBQUc7d0JBQ0osa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDN0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3RCLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNsQixlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDMUIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ25CLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNuQixZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDdkIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDNUIsc0JBQXNCLEVBQUUsSUFBSTt3QkFDNUIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3BCLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUN0QixpQkFBaUIsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUM3QixvQkFBb0IsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNoQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDdkIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3JCLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEIsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDbkMsd0JBQXdCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEMsNkJBQTZCO3dCQUM3QiwyQkFBMkI7d0JBQzNCLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNwQix5QkFBeUIsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNyQyx1QkFBdUIsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNuQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEIsZUFBZSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7cUJBQzVCLENBQUE7b0JBQ0QsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzNDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDbkUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQ2xGLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDN0gsT0FBTyxHQUFHLENBQUM7aUJBQ1o7cUJBQU07b0JBQ0wsR0FBRyxHQUFHO3dCQUNKLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQzdCLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNuQixRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDbkIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3ZCLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQzVCLHNCQUFzQixFQUFFLElBQUk7d0JBQzVCLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNwQixXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDdEIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDNUIsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDL0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3RCLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNyQixLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDakIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3BCLHVCQUF1QixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ25DLHdCQUF3QixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3BDLDZCQUE2Qjt3QkFDN0IsMkJBQTJCO3dCQUMzQixRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEIseUJBQXlCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDckMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDbkMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3BCLGVBQWUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3FCQUM1QixDQUFBO29CQUNELEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMzQyxHQUFHLENBQUMseUJBQXlCLENBQUMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ25FLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO29CQUNsRixHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDMUQsT0FBTyxHQUFHLENBQUM7aUJBQ1o7YUFDRjtZQUNELEtBQUssY0FBYyxDQUFDLENBQUM7Z0JBQ25CLElBQUcsU0FBUyxFQUFDO29CQUNYLEdBQUcsR0FBRzt3QkFDSixrQkFBa0IsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUM3QixXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDdEIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ2xCLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUMxQixRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDbkIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ25CLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUN2QixpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUM1QixzQkFBc0IsRUFBRSxJQUFJO3dCQUM1QixTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDcEIsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDL0IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ25CLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ2hDLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUN2QixvQkFBb0IsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNoQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDdkIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3JCLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEIsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDbkMsd0JBQXdCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEMsNkJBQTZCO3dCQUM3QiwyQkFBMkI7d0JBQzNCLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNwQix5QkFBeUIsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNyQyx1QkFBdUIsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNuQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEIsZUFBZSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7cUJBQzVCLENBQUE7b0JBQ0QsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzNDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDbkUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQ2xGLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUNsSyxPQUFPLEdBQUcsQ0FBQztpQkFDWjtxQkFBTTtvQkFDTCxHQUFHLEdBQUc7d0JBQ0osa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDN0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ25CLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNuQixZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDdkIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDNUIsc0JBQXNCLEVBQUUsSUFBSTt3QkFDNUIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ3BCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQy9CLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUNsQixvQkFBb0IsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO3dCQUMvQixXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQzt3QkFDdEIsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDaEMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3ZCLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUNyQixLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDakIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3BCLHVCQUF1QixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ25DLHdCQUF3QixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3BDLDZCQUE2Qjt3QkFDN0IsMkJBQTJCO3dCQUMzQixRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEIseUJBQXlCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDckMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDbkMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3BCLGVBQWUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO3FCQUM1QixDQUFBO29CQUNELEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMzQyxHQUFHLENBQUMseUJBQXlCLENBQUMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ25FLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO29CQUNsRixHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUMvRixPQUFPLEdBQUcsQ0FBQztpQkFDWjthQUNGO1lBQ0QsT0FBTyxDQUFDLENBQUM7YUFFUjtTQUNGO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCw0QkFBNEIsQ0FBQyxJQUFTO1FBQ3BDLE1BQU0sRUFBRSxHQUFHLGNBQWMsQ0FBQztRQUMxQixJQUFJLElBQUksRUFBRTtZQUNSLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pELFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNoRDtRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxJQUFTO1FBQ25CLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzFHLE1BQU0sUUFBUSxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN2RCxNQUFNLFNBQVMsR0FBRyxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDekQsSUFBRyxRQUFRLElBQUksY0FBYyxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3JFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsWUFBWSxDQUFDLElBQVM7UUFDcEIsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLElBQUksQ0FBRSxDQUFDLElBQUksRUFBRSxRQUFRLElBQUksSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUN4RyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBRSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUMvRyxDQUFDLElBQUksRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxRQUFRLElBQUksSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxJQUFJLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQzNJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQzlHLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxJQUFJLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQ3JHLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUM7WUFDbEIsT0FBTyxLQUFLLENBQUE7U0FDYjthQUFNO1lBQ1AsT0FBTyxJQUFJLENBQUM7U0FDWDtJQUNILENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsdUJBQXVCLENBQUUsSUFBUztRQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxXQUFXLEtBQUssSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2xILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxLQUFLLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNoSSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLFlBQVksS0FBSyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEksTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxZQUFZLEtBQUssSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQy9ILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxLQUFLLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvSCxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLGVBQW9CLEVBQUUsRUFBRSxDQUFDLGVBQWUsRUFBRSxZQUFZLEtBQUssSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzNKLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFHLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLHdCQUF3QixFQUFFO1lBQ3ZELElBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLElBQUksZ0JBQWdCLEVBQUUsTUFBTSxFQUFDO2dCQUMxRCxlQUFlLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQ3BHO1lBQ0QsSUFBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sSUFBSSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUM7Z0JBQzFELGVBQWUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDcEc7WUFDRCxJQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxJQUFJLGdCQUFnQixFQUFFLE1BQU0sRUFBQztnQkFDMUQsZUFBZSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQzthQUNwRztZQUNELElBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLElBQUksdUJBQXVCLEVBQUUsTUFBTSxFQUFDO2dCQUNqRSxzQkFBc0IsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDbEg7U0FDRjtRQUNELE9BQU87WUFDTCxlQUFlLEVBQUUsZUFBZTtZQUNoQyxlQUFlLEVBQUUsZUFBZTtZQUNoQyxlQUFlLEVBQUUsZUFBZTtZQUNoQyxlQUFlLEVBQUUsZUFBZTtZQUNoQyxzQkFBc0IsRUFBRSxzQkFBc0I7U0FDL0MsQ0FBQTtJQUNILENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxZQUFZLENBQUMsV0FBbUIsRUFBRSxZQUFxQjtRQUNyRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxXQUFXLEtBQUssV0FBVyxDQUFDLENBQUM7UUFDaEgsSUFBSSxVQUFVLENBQUM7UUFDZixJQUFJLFlBQVksQ0FBQztRQUNqQixJQUFJLFVBQVUsQ0FBQztRQUNmLElBQUcsWUFBWSxFQUFFLE1BQU0sSUFBSSxPQUFPLEVBQUUsTUFBTSxFQUFFO1lBQzFDLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFVBQWUsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQTtZQUN0RyxZQUFZLEdBQUcsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1NBQ25FO1FBRUQsSUFBRyxZQUFZLElBQUksT0FBTyxFQUFFLE1BQU0sRUFBRTtZQUNsQyxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLEdBQUksWUFBWSxFQUFFLFFBQVEsRUFBRSxDQUFDO1NBQ2xGO2FBQU0sSUFBRyxPQUFPLEVBQUUsTUFBTSxFQUFFO1lBQ3pCLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFBO1NBQy9DO1FBQ0QsT0FBTztZQUNMLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQzlELGNBQWMsRUFBRSxZQUFZO1lBQzVCLFVBQVUsRUFBRyxVQUFVO1NBQ3hCLENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHNCQUFzQixDQUFDLElBQVM7UUFDOUIsSUFBSSxLQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ3BCLElBQUksV0FBVyxHQUFRLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFjLEVBQUUsRUFBRTtZQUMzRCxJQUFJLFNBQVMsRUFBRSxZQUFZLElBQUksSUFBSSxFQUFFO2dCQUNuQyxLQUFLLEdBQUcsU0FBUyxFQUFFLFlBQVksQ0FBQzthQUNqQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBRyxLQUFLLEVBQUUsTUFBTSxFQUFFO1lBQ2hCLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTtnQkFDekIsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7b0JBQ3BELElBQUksSUFBSSxFQUFFLFlBQVksSUFBSSxFQUFFLEVBQUU7d0JBQzVCLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFBO3FCQUNyQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFBO1NBQ0g7UUFDRCxPQUFPLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLElBQVM7UUFDdkIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQWMsRUFBTyxFQUFFO1lBQzlELElBQUcsU0FBUyxDQUFDLFlBQVksSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxPQUFNLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxJQUFJLFFBQVEsRUFBRTtnQkFDekksT0FBTyxHQUFJLElBQUksQ0FBQzthQUNqQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs7c0lBNTJDVSx5Q0FBeUM7MEhBQXpDLHlDQUF5Qyx3YkNsQnRELCtxRkErQ2dNOzJGRDdCbkwseUNBQXlDO2tCQUxyRCxTQUFTOytCQUNFLDBDQUEwQztvT0FLMUMsYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUVHLDhCQUE4QjtzQkFBdkMsTUFBTTtnQkFJb0IsZ0JBQWdCO3NCQUExQyxLQUFLO3VCQUFDLGNBQWM7Z0JBR1osVUFBVTtzQkFBbEIsS0FBSztnQkF3RUcsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFNpbXBsZUNoYW5nZXMsIE9uQ2hhbmdlcywgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XHJcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xyXG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWRkUmlza1NlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9hZGQtcmlzay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGcmVxdWVuY3lCdWxrU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2ZyZXF1ZW5jeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzcG9uc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvcmVzcG9uc2liaWxpdHkuc2VydmljZSc7XHJcblxyXG50eXBlIEFPQSA9IGFueVtdW107XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hZGQtbXVsdGlwbGUtcmVzcG9uc2liaWxpdHktd2l0aC10YWInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGQtbXVsdGlwbGUtcmVzcG9uc2liaWxpdHktd2l0aC10YWIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQubGVzcycsICcuLi9mb3Jtcy5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZE11bHRpcGxlUmVzcG9uc2liaWxpdHlXaXRoVGFiQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAT3V0cHV0KCkgcGlja2VyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcG9wdWxhdGVPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGRpc2Nvbm5lY3RSZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGlzTm90aWZpY2F0aW9uUGVuZGluZyA9IDA7XHJcbiAgQE91dHB1dCgpIGNsb3NlQWRkTXVsdGlwbGVSZXNwb25zaWJpbGl0eSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBxdWVyeVBhcmFtOiBzdHJpbmcgPScnO1xyXG4gIHJlY2VudFJlc3BvbnNpYmlsaXR5VXJsOiBhbnkgPSB7XCJieVJlc3BvbnNpYmlsaXRpZXNcIjp7XCJ0eXBlXCI6W1wicmVjZW50X3Jlc3BvbnNpYmlsaXRpZXNcIl0sXCJzdWJUeXBlXCI6W1wiQ0NcIl19LFwiYnlTdGF0dXNcIjp7XCJ0eXBlXCI6W10sXCJzdWJUeXBlXCI6W119LFwiZmlsdGVyT2JqZWN0XCI6e1wicmVzcG9uc2liaWxpdHlDZW50ZXJcIjpbXSxcImVudHJ1c3RlZEJ5XCI6W10sXCJlbnRydXN0ZWRUb1wiOltdLFwicmlza0lkc1wiOltdLFwicmVzcG9uc2liaWxpdHlDYXRlZ29yeVwiOltdfSxcInRpbWVQZXJpb2REZXRhaWxzXCI6e1widHlwZVwiOlwiXCIsXCJzZWxlY3RlZFBlcmlvZFwiOlwiXCIsXCJzZWxlY3RlZFllYXJcIjpcIlwifSxcInN0YXR1c1wiOlwiXCJ9O1xyXG5cclxuICBASW5wdXQoJ3VwbG9hZGVkRmlsZScpIHNldCB1cGxvYWRlZEZpbGVEYXRhKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy51cGxvYWRlZEZpbGUoZGF0YSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIG9yZ0RldGFpbHMhOiBhbnk7XHJcblxyXG4gIHVybCA9J3E9e1wiYnlSZXNwb25zaWJpbGl0aWVzXCI6e1widHlwZVwiOltcInJlc3BvbnNpYmlsaXRpZXNfaW5fcXVldWVcIl0sXCJzdWJUeXBlXCI6W1wiQ0NcIl19LFwiYnlTdGF0dXNcIjp7XCJ0eXBlXCI6W1wicmVzcG9uc2liaWxpdGllc19pbl9xdWV1ZVwiXSxcInN1YlR5cGVcIjpbXX0sXCJmaWx0ZXJPYmplY3RcIjp7XCJyZXNwb25zaWJpbGl0eUNlbnRlclwiOltdLFwiZW50cnVzdGVkQnlcIjpbXSxcImVudHJ1c3RlZFRvXCI6W10sXCJyaXNrSWRzXCI6W10sXCJyZXNwb25zaWJpbGl0eUNhdGVnb3J5XCI6W119LFwidGltZVBlcmlvZERldGFpbHNcIjp7XCJ0eXBlXCI6XCJcIixcInNlbGVjdGVkUGVyaW9kXCI6XCJcIixcInNlbGVjdGVkWWVhclwiOlwiXCJ9LFwic3RhdHVzXCI6XCJcIn0nXHJcbiAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkOiBhbnkgPSB7XHJcbiAgICBoZWFkZXI6IFtdLFxyXG4gICAgcmVwb3J0czogW10sXHJcbiAgfVxyXG4gIHRhYlR5cGU6ICdmcmVxdWVuY3knIHwgJ29uZ29pbmcnIHwgJ29uQ29tcGxldGlvbicgPSAnZnJlcXVlbmN5JztcclxuICB0YWJJbmRleDogYW55ID0ge1xyXG4gICAgZnJlcXVlbmN5OjAsXHJcbiAgICBvbmdvaW5nOjEsXHJcbiAgICBvbkNvbXBsZXRpb246MlxyXG4gIH1cclxuXHJcbiAgYnVsa1VwbG9hZDogYW55ID0ge1xyXG4gICAgZnJlcXVlbmN5OiB7XHJcbiAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgIH0sXHJcbiAgICBvbmdvaW5nOiB7XHJcbiAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgIH0sXHJcbiAgICBvbkNvbXBsZXRpb246IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdGVtcGxhdGVJbmZvOiBhbnkgPSB7XHJcblxyXG4gICAgY2F0ZWdvcnlMaXN0OiBbXSxcclxuICAgIHJjTGlzdDogW10sXHJcbiAgICBhc3NpZ25vcnNMaXN0OiBbXSxcclxuICAgIGFzc2lnbmVlc0xpc3Q6IFtdLFxyXG4gICAgcmV2aWV3ZXJMaXN0OiBbXSxcclxuICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiBbXSxcclxuICAgIG1lbWJlcklkOiAnJ1xyXG4gIH1cclxuICBpc0xvYWRlciA9IGZhbHNlO1xyXG4gIHNob3dDYXRlZ29yeUxpc3QgPSBmYWxzZTtcclxuICB0ZW1wbGF0ZURvd25sb2FkZWQgPSBmYWxzZTtcclxuICBkb3dubG9hZEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICBsb2FkZXIgPSBmYWxzZTtcclxuICBpc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gIGlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gIGZpbGVOYW1lOiBhbnk7XHJcbiAgZGF0YTogYW55O1xyXG4gIHNob3dFeGNlbCA9IGZhbHNlO1xyXG4gIHVwbG9hZGVkRmlsZXM6IGFueSA9IFtdO1xyXG4gIGZpbGVSZXNwb25zZTogYW55ID0gW107XHJcbiAgZmlsZVZhbHVlOiBhbnk7XHJcbiAgbWVtYmVySWQgPSAwO1xyXG4gIG9yZ2FuaXphdGlvbklkID0gMDtcclxuICBlcnJvck1lc3NhZ2UgPSBcIiBpbnZhbGlkIGZpbGUgZXJyb3JcIlxyXG4gIGRvd25sb2FkU3RhdHVzOiBzdHJpbmcgPSAnTk9UX0RPV05MT0FESU5HJztcclxuICBkb3dubG9hZFBlcmNlbnQgPSAwO1xyXG4gIGRlZmF1bHRPd25lciA9ICcnXHJcbiAgc21pbGV5TWVzc2FnZSA9IGBZb3UncmUgQWxsIFNldCEgV2UncmUgcHJvY2Vzc2luZyB5b3VyIHJlcXVlc3QgYW5kIHlvdSB3aWxsIGJlIG5vdGlmaWVkIHZpYSBlbWFpbCB1cG9uIGNvbXBsZXRpb24uYDtcclxuICBhY3Rpb25CdXR0b25zID0gW1xyXG4gICAgeyBidXR0b25UZXh0OiAnRW50cnVzdCBNb3JlIFJlc3BvbnNpYmlsaXRpZXMnLCBjbGFzczogJ3doaXRlLWJ0bicsIGlkOiAnYWRkTW9yZScgfSxcclxuICAgIHsgYnV0dG9uVGV4dDogKHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nKSA/ICdWaWV3IFJlc3BvbnNpYmlsaXRpZXMgSW4gUXVldWUnIDogJ1ZpZXcgUmVzcG9uc2liaWxpdGllcycsIGNsYXNzOiAnYmx1ZS1idG4nLCBpZDogJ3ZpZXcnIH0sXHJcbiAgXTtcclxuICBzaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgbWVtYmVyX29ial9pZCA9ICcnO1xyXG4gIHJpc2tDbGFzc0VuYWJsZWQ6IGFueTtcclxuICB1c2VySW5mbyAhOiBhbnk7XHJcbiAgcmVzcG9uc2liaWxpdHlEYXRhICE6IGFueTtcclxuICBASW5wdXQoKSBmZWF0dXJlZmxhZyA6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJpc2tTZXJ2aWNlOiBBZGRSaXNrU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVzcG9uc2liaWxpdHlTZXJ2aWNlOiBSZXNwb25zaWJpbGl0eVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgZnJlcXVlbmN5U2VydmljZTogRnJlcXVlbmN5QnVsa1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBTbmFja0JhclNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuXHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG5cclxuICAgIHRoaXMub3JnYW5pemF0aW9uSWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbklkKCk7XHJcbiAgICB0aGlzLm1lbWJlcklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRNZW1iZXJJZCgpO1xyXG4gICAgdGhpcy5tZW1iZXJfb2JqX2lkID0gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyRGV0YWlscygpLl9pZDtcclxuICAgIHRoaXMudXNlckluZm8gPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKCkudXNlcjtcclxuICAgIHRoaXMuZGVmYXVsdE93bmVyID0gKHRoaXMudXNlckluZm8pID8gdGhpcy51c2VySW5mby5uYW1lICsgJyAoJyArIHRoaXMudXNlckluZm8uZW1haWwgKyAnKScgOiAnJztcclxuICAgIHRoaXMuZ2V0VXNlckRldGFpbHMoKTtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uRGV0YWlscygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5yaXNrQ2xhc3NFbmFibGVkID0gcmVzLmVuYWJsZV9yaXNrY2xhc3NcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlckJyb3dzZUZpbGUoKSB7XHJcbiAgICBjb25zdCBnZXRGaWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVJbnB1dCcpO1xyXG4gICAgaWYgKGdldEZpbGUpIHtcclxuICAgICAgZ2V0RmlsZS5jbGljaygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRVc2VyRGV0YWlscygpIHtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlckluZm8oKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nID0gcmVzLm5vdGlmaWNhdGlvbl9wZW5kaW5nX2ZsYWc7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdXBsb2FkZWRGaWxlKGV2ZW50OiBhbnksIHRhYlR5cGU/OmFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB7XHJcbiAgICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgICByZXBvcnRzOiBbXSxcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy50ZW1wbGF0ZUluZm8gPSB7XHJcbiAgICAgICAgY2F0ZWdvcnlMaXN0OiBbXSxcclxuICAgICAgICByY0xpc3Q6IFtdLFxyXG4gICAgICAgIGFzc2lnbm9yc0xpc3Q6IFtdLFxyXG4gICAgICAgIGFzc2lnbmVlc0xpc3Q6IFtdLFxyXG4gICAgICAgIHJldmlld2VyTGlzdDpbXSxcclxuICAgICAgICBwYXJlbnRSZXNwb25zaWJpbGl0eTogW10sXHJcbiAgICAgICAgbWVtYmVySWQ6ICcnXHJcblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IFtdO1xyXG4gICAgICBjb25zdCByZWZlcmVuY2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2Nyb2xsUmVmZXJlbmNlJyk7XHJcbiAgICAgIGlmIChyZWZlcmVuY2UpIHtcclxuICAgICAgICByZWZlcmVuY2Uuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZmlsZU5hbWUgPSBldmVudC50YXJnZXQuZmlsZXNbMF0ubmFtZTtcclxuICAgICAgdGhpcy51cGxvYWRlZEZpbGVzLnB1c2goZXZlbnQudGFyZ2V0LmZpbGVzKTtcclxuICAgICAgY29uc3QgdGFyZ2V0OiBEYXRhVHJhbnNmZXIgPSBldmVudC50YXJnZXQgYXMgRGF0YVRyYW5zZmVyO1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGN1cmx5XHJcbiAgICAgIGlmICh0YXJnZXQuZmlsZXMubGVuZ3RoICE9PSAxKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgbXVsdGlwbGUgZmlsZXMnKTtcclxuICAgICAgY29uc3QgcmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBic3RyOiBzdHJpbmcgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgY29uc3Qgd2I6IFhMU1guV29ya0Jvb2sgPSBYTFNYLnJlYWQoYnN0ciwgeyB0eXBlOiAnYmluYXJ5JyB9KTtcclxuICAgICAgICBjb25zdCB3c25hbWU6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbMV07XHJcbiAgICAgICAgY29uc3Qgc2hlZXQyOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzWzJdO1xyXG4gICAgICAgIGNvbnN0IHNoZWV0Mzogc3RyaW5nID0gd2IuU2hlZXROYW1lc1szXTtcclxuICAgICAgICBjb25zdCB3c25hbWUxOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzWzRdO1xyXG4gICAgICAgIGNvbnN0IHdzOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWVdO1xyXG4gICAgICAgIGNvbnN0IHNoZWV0UmVwb3J0MjogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbc2hlZXQyXTtcclxuICAgICAgICBjb25zdCBzaGVldFJlcG9ydDM6IFhMU1guV29ya1NoZWV0ID0gd2IuU2hlZXRzW3NoZWV0M107XHJcbiAgICAgICAgY29uc3QgdGVtcERhdGE6IFhMU1guV29ya1NoZWV0ID0gd2IuU2hlZXRzW3dzbmFtZTFdO1xyXG4gICAgICAgIGNvbnN0IHREYXRhID0gWExTWC51dGlscy5zaGVldF90b19qc29uKHRlbXBEYXRhLCB7IGhlYWRlcjogMSB9KSBhcyBBT0E7XHJcbiAgICAgICAgY29uc3QgdGVtcExpc3QgPSB0RGF0YS5maWx0ZXIoKGRhdGFFbGVtZW50OiBhbnkpID0+IGRhdGFFbGVtZW50Lmxlbmd0aCA+IDApO1xyXG4gICAgICAgIHRoaXMuc2V0T3JnYW5pemF0aW9uRGV0YWlscyh0ZW1wTGlzdCk7XHJcbiAgICAgICAgd2IuU2hlZXROYW1lcy5mb3JFYWNoKChzaGVldDogYW55KSA9PiB7XHJcbiAgICAgICAgICBzd2l0Y2goc2hlZXQ/LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY2FzZSAnZnJlcXVlbmN5IHJlc3BvbnNpYmlsaXRpZXMnOlxyXG4gICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUZvckRpZmZlcmVudFRhYnMod3MsIHNoZWV0KVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdvbmdvaW5nIHJlc3BvbnNpYmlsaXRpZXMnIDpcclxuICAgICAgICAgICAgICB0aGlzLnNldERhdGFGb3JEaWZmZXJlbnRUYWJzKHNoZWV0UmVwb3J0Miwgc2hlZXQpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdvbiBjb21wbGV0aW9uIHJlc3BvbnNpYmlsaXRpZXMnOlxyXG4gICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUZvckRpZmZlcmVudFRhYnMoc2hlZXRSZXBvcnQzLCBzaGVldClcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdCA6IGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9O1xyXG4gICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKHRhcmdldC5maWxlc1swXSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxyXG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYSB3b3Jrc2hlZXQgYW5kIGEgc2hlZXQgbmFtZSwgYW5kIHRoZW4gaXQgc2V0cyB0aGUgZGF0YSBmb3IgZGlmZmVyZW50IHRhYnMuXHJcbiAgICogQHBhcmFtIHdzIC0gWExTWC5Xb3JrU2hlZXQsIHNoZWV0OiBzdHJpbmdcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2hlZXQgLSBzdHJpbmcgLSB0aGUgbmFtZSBvZiB0aGUgc2hlZXQgaW4gdGhlIGV4Y2VsIGZpbGVcclxuICAgKiBAcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIFwicmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkXCIgd2hpY2ggaXMgYW4gb2JqZWN0LlxyXG4gICAqL1xyXG4gIHNldERhdGFGb3JEaWZmZXJlbnRUYWJzKHdzOiBYTFNYLldvcmtTaGVldCwgc2hlZXQ6IHN0cmluZykge1xyXG4gICAgbGV0IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZDogYW55ID0ge1xyXG4gICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgICAgc3ViSGVhZGluZzpbXSxcclxuICAgIH1cclxuICAgIGxldCBzaGVldFZhbHVlID0gWExTWC51dGlscy5zaGVldF90b19qc29uKHdzLCB7XHJcbiAgICAgIGhlYWRlcjogMSwgcmF3OiBmYWxzZSxcclxuICAgIH0pIGFzIEFPQTtcclxuICAgIGxldCBkYXRhICA9IHNoZWV0VmFsdWUuZmlsdGVyKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgaXNVbmRlZmluZWQgPSAnJztcclxuICAgICAgcmVzLmZvckVhY2goKGVsOiBhbnkgKT0+IHtcclxuICAgICAgICBpc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkICsgZWw7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZihzaGVldFZhbHVlWzJdICYmIHNoZWV0VmFsdWVbMl1bMV0gPT09J1Byb2dyYW0nKXtcclxuICAgICAgICByZXR1cm4gIShyZXM/Lmxlbmd0aCA9PT0gOSAmJiByZXNbOF0gPT09ICcnICYmICFpc1VuZGVmaW5lZC5sZW5ndGgpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuICEocmVzPy5sZW5ndGggPT09IDYgJiYgcmVzWzVdID09PSAnJyAmJiAhaXNVbmRlZmluZWQubGVuZ3RoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGlmICh0aGlzLmZpbGVOYW1lLnN1YnN0cigtNSkgIT09ICcueGxzeCcpIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnVGhlIGluY29ycmVjdCBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkLiBQbGVhc2UgdXBsb2FkIHRoZSB0ZW1wbGF0ZSB3aGljaCB5b3UgZG93bmxvYWRlZCBmcm9tIGhlcmUuJyArICcgUkVUUlknO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXIgPSBjbG9uZURlZXAoZGF0YVsyXSk7XHJcbiAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuc3ViSGVhZGluZyA9IGNsb25lRGVlcChkYXRhWzNdKTtcclxuXHJcbiAgICBkYXRhID0gZGF0YS5zbGljZSg1KTtcclxuICAgIGlmICgodGhpcy5tZW1iZXJfb2JqX2lkICE9IHRoaXMudGVtcGxhdGVJbmZvLm1lbWJlcklkKSkge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIHdoaWNoIHlvdSBkb3dubG9hZGVkIGZyb20gaGVyZS4nICsgJyBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnN0IHJlc3BvbnNpYmlsaXR5RGF0YSA9IGRhdGEuZmlsdGVyKChkYXRhRWxlbWVudDogYW55KSA9PiBkYXRhRWxlbWVudC5sZW5ndGggPiAwKTtcclxuICAgIHJlc3BvbnNpYmlsaXR5RGF0YS5mb3JFYWNoKChyZXBvcnQ6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdmFsaWREYXRlO1xyXG4gICAgICBjb25zdCB2YWxpZFVzZXIgPSB0aGlzLnJldHVybklkcyhyZXBvcnRbMl0sICdlbnRydXN0ZWRfdG8nKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgaWYocmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlclsxXSA9PT0nUHJvZ3JhbScpIHtcclxuICAgICAgICB2YWxpZERhdGUgPSB0aGlzLmNvbXBhcmVXaXRoQ3VycmVudERhdGUocmVwb3J0WzRdLCByZXBvcnRbNV0pO1xyXG4gICAgICAgIFxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHZhbGlkRGF0ZSA9IHRoaXMuY29tcGFyZVdpdGhDdXJyZW50RGF0ZShyZXBvcnRbNV0sIHJlcG9ydFs2XSk7XHJcbiAgICAgIH1cclxuICAgICAgLyogUHVzaGluZyB0aGUgcmVwb3J0IGRldGFpbHMgaW50byB0aGUgYnVsa1VwbG9hZCBvYmplY3QgYXMgcGVyIHRhYiB0YWJzICovXHJcbiAgICAgIGlmKHNoZWV0Py50b0xvd2VyQ2FzZSgpID09PSAnZnJlcXVlbmN5IHJlc3BvbnNpYmlsaXRpZXMnKXtcclxuICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQucmVwb3J0cy5wdXNoKHRoaXMuc2V0UmVwb3J0RGV0YWlscyhyZXBvcnQsICdmcmVxdWVuY3knLCByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuaGVhZGVyWzFdID09PSdQcm9ncmFtJyA/IHRydWUgOiBmYWxzZSkpO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5mcmVxdWVuY3kuaGVhZGVyID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5oZWFkZXI7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLmZyZXF1ZW5jeS5zdWJIZWFkaW5nID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5zdWJIZWFkaW5nO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5mcmVxdWVuY3kucmVwb3J0cyA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8ucmVwb3J0cztcclxuICAgICAgfVxyXG4gICAgICBpZihzaGVldD8udG9Mb3dlckNhc2UoKSA9PT0gJ29uZ29pbmcgcmVzcG9uc2liaWxpdGllcycpe1xyXG4gICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5yZXBvcnRzLnB1c2godGhpcy5zZXRSZXBvcnREZXRhaWxzKHJlcG9ydCwgJ29uZ29pbmcnLCByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuaGVhZGVyWzFdID09PSdQcm9ncmFtJyA/IHRydWUgOiBmYWxzZSkpO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5vbmdvaW5nLmhlYWRlciA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5vbmdvaW5nLnN1YkhlYWRpbmcgPSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uZ29pbmcucmVwb3J0cyA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8ucmVwb3J0cztcclxuICAgICAgfVxyXG4gICAgICBpZihzaGVldD8udG9Mb3dlckNhc2UoKSA9PT0gJ29uIGNvbXBsZXRpb24gcmVzcG9uc2liaWxpdGllcycpe1xyXG4gICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5yZXBvcnRzLnB1c2godGhpcy5zZXRSZXBvcnREZXRhaWxzKHJlcG9ydCwgJ29uQ29tcGxldGlvbicsIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXJbMV0gPT09J1Byb2dyYW0nID8gdHJ1ZSA6IGZhbHNlKSk7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uQ29tcGxldGlvbi5oZWFkZXIgPSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LmhlYWRlcjtcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQub25Db21wbGV0aW9uLnN1YkhlYWRpbmcgPSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uQ29tcGxldGlvbi5yZXBvcnRzID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5yZXBvcnRzO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBpc0VtcHR5ID0gdGhpcy5jaGVja0VtcHR5RmlsZShkYXRhKTtcclxuICAgIC8qIENoZWNraW5nIGlmIHRoZSBmaWxlIGlzIGVtcHR5LCBpZiBpdCBpcyBlbXB0eSBpdCB3aWxsIHJldHVybiBhbiBlcnJvciBtZXNzYWdlLiBJZiBpdCBpcyBub3RcclxuICAgIGVtcHR5IGl0IHdpbGwgY2hlY2sgaWYgdGhlIGZpbGUgaXMgdGhlIGNvcnJlY3QgZmlsZSwgaWYgaXQgaXMgbm90IHRoZSBjb3JyZWN0IGZpbGUgaXQgd2lsbFxyXG4gICAgcmV0dXJuIGFuIGVycm9yIG1lc3NhZ2UuIElmIGl0IGlzIHRoZSBjb3JyZWN0IGZpbGUgaXQgd2lsbCBjYWxsIHRoZSBmaWxlVXBsb2FkKCkgZnVuY3Rpb24uICovXHJcbiAgICBpZiAoaXNFbXB0eSkge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdZb3UgaGF2ZSB1cGxvYWRlZCBhIGJsYW5rIHRlbXBsYXRlLiBQbGVhc2UgYWRkIGRldGFpbHMgZm9yIGFsbCBtYW5kYXRvcnkgZmllbGRzLiBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYnVsa1VwbG9hZD8uZnJlcXVlbmN5Py5oZWFkZXJbMF0gIT09ICdSZXNwb25zaWJpbGl0eSBOYW1lKicgJiYgdGhpcy5idWxrVXBsb2FkPy5vbmdvaW5nPy5oZWFkZXJbMF0gIT09ICdSZXNwb25zaWJpbGl0eSBOYW1lKicgJiYgdGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb24/LmhlYWRlclswXSAhPT0gJ1Jlc3BvbnNpYmlsaXR5IE5hbWUqJykge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIHdoaWNoIHlvdSBkb3dubG9hZGVkIGZyb20gaGVyZS4nICsgJyBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZpbGVVcGxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0V4Y2VsID0gdHJ1ZTtcclxuICAgIHRoaXMuZmlsZVZhbHVlID0gJyc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QgaGFzIGEgZnJlcXVlbmN5IG9iamVjdCB3aXRoIGEgcmVwb3J0cyBhcnJheSwgc2V0IHRoZVxyXG4gICAqIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB0byB0aGUgZnJlcXVlbmN5IG9iamVjdCBhbmQgc2V0IHRoZSB0YWJUeXBlIHRvIGZyZXF1ZW5jeS4gSWYgbm90LCBjaGVja1xyXG4gICAqIGlmIHRoZSBidWxrVXBsb2FkIG9iamVjdCBoYXMgYW4gb25nb2luZyBvYmplY3Qgd2l0aCBhIHJlcG9ydHMgYXJyYXksIHNldCB0aGVcclxuICAgKiByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdG8gdGhlIG9uZ29pbmcgb2JqZWN0IGFuZCBzZXQgdGhlIHRhYlR5cGUgdG8gb25nb2luZy4gSWYgbm90LCBjaGVjayBpZlxyXG4gICAqIHRoZSBidWxrVXBsb2FkIG9iamVjdCBoYXMgYW4gb25Db21wbGV0aW9uIG9iamVjdCB3aXRoIGEgcmVwb3J0cyBhcnJheSwgc2V0IHRoZVxyXG4gICAqIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB0byB0aGUgb25Db21wbGV0aW9uIG9iamVjdCBhbmQgc2V0IHRoZSB0YWJUeXBlIHRvIG9uQ29tcGxldGlvbi4gSWYgbm90LFxyXG4gICAqIHJldHVybiB0cnVlLlxyXG4gICAqIDwvY29kZT5cclxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSA9IHtcclxuICAgKiBAcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUuXHJcbiAgICovXHJcbiAgY2hlY2tFbXB0eUZpbGUoZGF0YT86IGFueSkge1xyXG4gICAgbGV0IGlzRW1wdHkgPSBmYWxzZTtcclxuICAgIGlmKHRoaXMuYnVsa1VwbG9hZD8uZnJlcXVlbmN5Py5yZXBvcnRzPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeTtcclxuICAgICAgdGhpcy50YWJUeXBlID0gJ2ZyZXF1ZW5jeSc7XHJcbiAgICB9IGVsc2UgaWYodGhpcy5idWxrVXBsb2FkPy5vbmdvaW5nPy5yZXBvcnRzPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/Lm9uZ29pbmc7XHJcbiAgICAgIHRoaXMudGFiVHlwZSA9ICdvbmdvaW5nJztcclxuICAgIH0gZWxzZSBpZih0aGlzLmJ1bGtVcGxvYWQ/Lm9uQ29tcGxldGlvbj8ucmVwb3J0cz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb247XHJcbiAgICAgIHRoaXMudGFiVHlwZSA9ICdvbkNvbXBsZXRpb24nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXNFbXB0eSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNFbXB0eTtcclxuICB9XHJcblxyXG4gIGNvbXBhcmVXaXRoQ3VycmVudERhdGUoZGF5OiBhbnksIG1vbnRoOiBhbnkpIHtcclxuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXHJcbiAgICAgIHsgdmFsdWU6IDEsIG1vbnRoOiAnSmFuJyB9LFxyXG4gICAgICB7IHZhbHVlOiAyLCBtb250aDogJ0ZlYicgfSxcclxuICAgICAgeyB2YWx1ZTogMywgbW9udGg6ICdNYXInIH0sXHJcbiAgICAgIHsgdmFsdWU6IDQsIG1vbnRoOiAnQXByJyB9LFxyXG4gICAgICB7IHZhbHVlOiA1LCBtb250aDogJ01heScgfSxcclxuICAgICAgeyB2YWx1ZTogNiwgbW9udGg6ICdKdW4nIH0sXHJcbiAgICAgIHsgdmFsdWU6IDcsIG1vbnRoOiAnSnVsJyB9LFxyXG4gICAgICB7IHZhbHVlOiA4LCBtb250aDogJ0F1ZycgfSxcclxuICAgICAgeyB2YWx1ZTogOSwgbW9udGg6ICdTZXAnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDEwLCBtb250aDogJ09jdCcgfSxcclxuICAgICAgeyB2YWx1ZTogMTEsIG1vbnRoOiAnTm92JyB9LFxyXG4gICAgICB7IHZhbHVlOiAxMiwgbW9udGg6ICdEZWMnIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGlmICghKGRheSB8fCBtb250aCkpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKCEoZGF5ICYmIG1vbnRoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBtb250aEFuZFllYXIgPSBtb250aC5zcGxpdChcIidcIik7XHJcblxyXG4gICAgICBjb25zdCBzdGFydERhdGUgPSBtb21lbnQoZGF5ICsgJy0nICsgbW9udGhBbmRZZWFyWzBdICsgJy0nICsgMjAgKyBtb250aEFuZFllYXJbMV0gKyAnIDAwOjAwOjAwJywgJ0RELU1NTU0tWVlZWSBISDptbTpzcycpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpO1xyXG4gICAgICBpZiAoc3RhcnREYXRlID09IFwiSW52YWxpZCBkYXRlXCIpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgfSwgNSk7XHJcbiAgICAgIGNvbnN0IGRhdGVfdmFsdWUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgZGF0ZV92YWx1ZS5zZXRNb250aCh0eXBlb2YgbW9udGggIT09ICdudW1iZXInID8gbW9udGhOYW1lcy5maWx0ZXIoKHgpID0+IHgubW9udGggPT09IG1vbnRoPy5zdWJzdHJpbmcoMCwgMykpWzBdPy52YWx1ZSAtIDEgOiBtb250aCk7XHJcbiAgICAgIGRhdGVfdmFsdWUuc2V0RnVsbFllYXIoTnVtYmVyKDIwICsgbW9udGguc3BsaXQoXCInXCIpWzFdKSk7XHJcbiAgICAgIGRhdGVfdmFsdWUuc2V0RGF0ZShOdW1iZXIoZGF5KSk7XHJcbiAgICAgIC8vIGNvbnN0IHJlcG9ydERhdGUgPSBuZXcgRGF0ZShkYXkgKyBtb250aC5zcGxpdChcIidcIikpO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZygoY3VycmVudERhdGUudG9KU09OKCkuc3BsaXQoJ1QnKVswXSkrXCImJlwiKyhkYXRlX3ZhbHVlLnRvSlNPTigpLnNwbGl0KCdUJylbMF0pKVxyXG4gICAgICAvLyBkZWJ1Z2dlclxyXG4gICAgICBpZiAoKChjdXJyZW50RGF0ZS50b0pTT04oKS5zcGxpdCgnVCcpWzBdKSAhPSAoZGF0ZV92YWx1ZS50b0pTT04oKS5zcGxpdCgnVCcpWzBdKSkgJiYgKGN1cnJlbnREYXRlID4gZGF0ZV92YWx1ZSkpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH1cclxuICBpc1Bhc3REYXRlKGRheTogYW55LCBtb250aDogYW55KSB7XHJcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtcclxuICAgICAgeyB2YWx1ZTogMSwgbW9udGg6ICdKYW4nIH0sXHJcbiAgICAgIHsgdmFsdWU6IDIsIG1vbnRoOiAnRmViJyB9LFxyXG4gICAgICB7IHZhbHVlOiAzLCBtb250aDogJ01hcicgfSxcclxuICAgICAgeyB2YWx1ZTogNCwgbW9udGg6ICdBcHInIH0sXHJcbiAgICAgIHsgdmFsdWU6IDUsIG1vbnRoOiAnTWF5JyB9LFxyXG4gICAgICB7IHZhbHVlOiA2LCBtb250aDogJ0p1bicgfSxcclxuICAgICAgeyB2YWx1ZTogNywgbW9udGg6ICdKdWwnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDgsIG1vbnRoOiAnQXVnJyB9LFxyXG4gICAgICB7IHZhbHVlOiA5LCBtb250aDogJ1NlcCcgfSxcclxuICAgICAgeyB2YWx1ZTogMTAsIG1vbnRoOiAnT2N0JyB9LFxyXG4gICAgICB7IHZhbHVlOiAxMSwgbW9udGg6ICdOb3YnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDEyLCBtb250aDogJ0RlYycgfSxcclxuICAgIF07XHJcblxyXG4gICAgaWYgKCEoZGF5IHx8IG1vbnRoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKCEoZGF5ICYmIG1vbnRoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBjb25zdCByZXBvcnREYXRlID0gbmV3IERhdGUoZGF5ICsgbW9udGguc3BsaXQoXCInXCIpKTtcclxuICAgICAgY29uc3QgZGF0ZV92YWx1ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIGRhdGVfdmFsdWUuc2V0TW9udGgodHlwZW9mIG1vbnRoICE9PSAnbnVtYmVyJyA/IG1vbnRoTmFtZXMuZmlsdGVyKCh4KSA9PiB4Lm1vbnRoID09PSBtb250aD8uc3Vic3RyaW5nKDAsIDMpKVswXT8udmFsdWUgLSAxIDogbW9udGgpO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldEZ1bGxZZWFyKE51bWJlcigyMCArIG1vbnRoLnNwbGl0KFwiJ1wiKVsxXSkpO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldERhdGUoTnVtYmVyKGRheSkpO1xyXG4gICAgICBpZiAoY3VycmVudERhdGUgPiBkYXRlX3ZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRUZW1wbGF0ZSgpIHtcclxuICAgIHRoaXMuZG93bmxvYWRTdGF0dXMgPSAnRE9XTkxPQURJTkcnO1xyXG4gICAgdGhpcy5kb3dubG9hZFBlcmNlbnQgPSAwO1xyXG4gICAgY29uc3QgZG93bmxvYWREYXRlID0gbmV3IERhdGUoKS50b0RhdGVTdHJpbmcoKS5zcGxpdCgnICcpO1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSBgRW50cnVzdCBSZXNwb25zaWJpbGl0aWVzLSR7ZG93bmxvYWREYXRlWzJdfS0ke2Rvd25sb2FkRGF0ZVsxXX0tJHtkb3dubG9hZERhdGVbM119Lnhsc3hgO1xyXG5cclxuICAgIHRoaXMucmlza1NlcnZpY2UuZG93bmxvYWRSZXNwb25zaWJpbGl0eVRlbXBsYXRlKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEubG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmRvd25sb2FkUGVyY2VudCA9IDEwMCAqIChkYXRhLmxvYWRlZCAvIGRhdGEudG90YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGF0YS5ib2R5KSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9IHRoaXMucmlza1NlcnZpY2UuZG93bkxvYWRGaWxlKGRhdGEuYm9keSwgJ2FwcGxpY2F0aW9uL3hsc3gnLCBmaWxlTmFtZSk7XHJcbiAgICAgICAgICB9LCAxNTAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB0aGlzLmRvd25sb2FkU3RhdHVzID0gJ0RPV05MT0FERUQnO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc3VibWl0UmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkKCkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0gW107XHJcbiAgICBjb25zdCBmcmVxdWVuY3lUeXBlQXJyYXkgPSBbJzEnLCAnMicsICczJywgJzQnLCAnNycsICcwJywgJzYnLCAnOScgXTtcclxuICAgIGNvbnN0IGRlZmF1bHRXaW5kb3cgPSBbMCwgMiwgNywgMzAsIDcsIDE1LCAzLCAzMF07XHJcbiAgICBjb25zdCBkZWZhdWx0RmFpbGVkRGF5ID0gWzEsIDIsIDUsIDUsIDUsIDUsIDUsIDVdO1xyXG4gICAgLy8gdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3lcclxuICAgIGxldCByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeT8ucmVwb3J0cz8uY29uY2F0KHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZz8ucmVwb3J0cyAsIHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uPy5yZXBvcnRzKTtcclxuICAgIC8vIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLnJlcG9ydHMuZm9yRWFjaCgocmVwb3J0OiBhbnkpID0+IHtcclxuICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5mb3JFYWNoKChyZXBvcnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVwb3J0LmlzVmFsaWQpIHtcclxuICAgICAgICBpZihyZXBvcnQ/LnJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnkgPT09IG51bGwpe1xyXG4gICAgICAgICAgcmVwb3J0LnJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnkgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmNEZXRhaWxzOiBhbnkgPSB0aGlzLnJldHVybklkcyhyZXBvcnQ/LnJlc3BvbnNpYmlsaXR5Q2VudGVyLCAncmNfaWQnKTtcclxuICAgICAgICBjb25zdCByZXZpZXdlckRldGFpbHM6IGFueSA9IHRoaXMucmV0dXJuSWRzKHJlcG9ydD8ucmV2aWV3ZXIsICdyZXZpZXdlcicpO1xyXG4gICAgICAgIGNvbnN0IGFzc2lnbm9yRGV0YWlsczogYW55ID0gKHJlcG9ydD8uYXNzaWdub3IpID8gdGhpcy5yZXR1cm5JZHMocmVwb3J0Py5hc3NpZ25vciwgJ2Fzc2lnbm9yJykgOiAnJztcclxuICAgICAgICAvLyBjb25zdCBjY0RldGFpbHM6IGFueSA9IHRoaXMucmV0dXJuSWRzKHJlcG9ydC5hbHdheXNOb3RpZnksICdjYycpO1xyXG4gICAgICAgIGNvbnN0IGNjRGV0YWlsczogYW55ID0gdGhpcy5yZXR1cm5JZHMocmVwb3J0Py5vdmVyc2VlciwgJ2NjJyk7XHJcbiAgICAgICAgY29uc3QgY2NGYWlsdXJlRGV0YWlsczogYW55ID0gdGhpcy5yZXR1cm5JZHMocmVwb3J0Lm5vdGlmeU9uRmFpbHVyZSwgJ2NjRmFpbHVyZScpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbW9tZW50KCkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcblxyXG4gICAgICAgIC8vIGNvbnN0IGNhdGVnb3J5TmFtZSA9IChyZXBvcnQucmVzcG9uc2liaWxpdHlDYXRlZ29yeS5pbmNsdWRlcygnW1dJVEhJTl0nKSkgPyByZXBvcnQucmVzcG9uc2liaWxpdHlDYXRlZ29yeS5zcGxpdCgnIFsnKVswXSA6IHJlcG9ydC5yZXNwb25zaWJpbGl0eUNhdGVnb3J5XHJcbiAgICAgICAgbGV0IG9uZ29pbmdSZW1pbmRlclR5cGU6IGFueSA9IHsnV2Vla2x5JzogMSwgJ01vbnRobHknOiAyLCAnUXVhcnRlcmx5JzogM31cclxuICAgICAgICBjb25zdCBvbmdvaW5nVmFsdWVzID0ge1xyXG4gICAgICAgICAgc2V0UmVtaW5kZXI6IHJlcG9ydD8uc2V0UmVtaW5kZXIsXHJcbiAgICAgICAgICBmcmVxdWVuY3lSZW1pbmRlciA6IG9uZ29pbmdSZW1pbmRlclR5cGVbcmVwb3J0Py5mcmVxdWVuY3lSZW1pbmRlcl1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZnJlcXVlbmN5VmFsdWUgPSB0aGlzLmZyZXF1ZW5jeVNlcnZpY2Uuc2hvcnRIYW5kX2ZyZXFDYWwocmVwb3J0Py5mcmVxdWVuY3ksIHJlcG9ydD8uZGF5LCByZXBvcnQ/Lm1vbnRoLCAnJywgcmVwb3J0Py5kdWVEYXRlLCBvbmdvaW5nVmFsdWVzKTtcclxuICAgICAgICAvLyBjb25zdCBmcmVxdWVuY3lWYWx1ZSA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5zaG9ydEhhbmRfZnJlcUNhbChyZXBvcnQ/LmZyZXF1ZW5jeSwgcmVwb3J0Py5kYXksIHJlcG9ydD8ubW9udGgsICcnKTtcclxuICAgICAgICBjb25zdCBkYXRlQW5kTW9udGggPSByZXBvcnQ/Lm1vbnRoPy5zcGxpdChcIidcIik7XHJcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gZGF0ZUFuZE1vbnRoID8gbW9tZW50KHJlcG9ydD8uZGF5ICsgJy0nICsgZGF0ZUFuZE1vbnRoWzBdICsgJy0nICsgMjAgKyBkYXRlQW5kTW9udGhbMV0gKyAnIDAwOjAwOjAwJywgJ0RELU1NTU0tWVlZWSBISDptbTpzcycpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpOiAnJztcclxuXHJcbiAgICAgICAgbGV0IGNvbXBsZXRlRGF5cztcclxuICAgICAgICBsZXQgbm90Q29tcGxldGVEYXlzXHJcbiAgICAgICAgY29uc3QgZnJlcXVlbmN5VHlwZSA9IGZyZXF1ZW5jeVZhbHVlPy5zcGxpdCgnficpWzBdO1xyXG4gICAgICAgIGlmIChyZXBvcnQucmVzcG9uc2liaWxpdHlXaW5kb3cgJiYgcmVwb3J0LnJlc3BvbnNpYmlsaXR5V2luZG93ICE9PSAnJykge1xyXG4gICAgICAgICAgY29tcGxldGVEYXlzID0gcmVwb3J0Py5yZXNwb25zaWJpbGl0eVdpbmRvdztcclxuICAgICAgICB9IGVsc2UgaWYgKGZyZXF1ZW5jeVR5cGVBcnJheT8uaW5jbHVkZXMoZnJlcXVlbmN5VHlwZSkpIHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4T2ZBcnJheSA9IGZyZXF1ZW5jeVR5cGVBcnJheT8uaW5kZXhPZihmcmVxdWVuY3lUeXBlKTtcclxuICAgICAgICAgIGNvbXBsZXRlRGF5cyA9IGRlZmF1bHRXaW5kb3dbaW5kZXhPZkFycmF5XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcG9ydD8uZmFpbGVkQWZ0ZXIgJiYgcmVwb3J0Py5mYWlsZWRBZnRlciAhPT0gJycpIHtcclxuICAgICAgICAgIG5vdENvbXBsZXRlRGF5cyA9IHJlcG9ydD8uZmFpbGVkQWZ0ZXI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3lUeXBlQXJyYXkuaW5jbHVkZXMoZnJlcXVlbmN5VHlwZSkpIHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4T2ZBcnJheSA9IGZyZXF1ZW5jeVR5cGVBcnJheT8uaW5kZXhPZihmcmVxdWVuY3lUeXBlKTtcclxuICAgICAgICAgIG5vdENvbXBsZXRlRGF5cyA9IGRlZmF1bHRGYWlsZWREYXlbaW5kZXhPZkFycmF5XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb2JqID0ge1xyXG4gICAgICAgICAgdXNlcklkOiB0aGlzLnRlbXBsYXRlSW5mbz8ubWVtYmVySWQsXHJcbiAgICAgICAgICBvcmdhbmlzYXRpb25faWQ6IHRoaXMub3JnYW5pemF0aW9uSWQsXHJcbiAgICAgICAgICBtZW1iZXJfaWQ6IChhc3NpZ25vckRldGFpbHMpID8gYXNzaWdub3JEZXRhaWxzPy5tZW1iZXJJZCA6IHRoaXMubWVtYmVySWQsXHJcbiAgICAgICAgICBtZW1iZXJfbmFtZTogKGFzc2lnbm9yRGV0YWlscykgPyAoKHJlcG9ydD8uYXNzaWdub3IpID8gcmVwb3J0Py5hc3NpZ25vci5zcGxpdCgnICgnKVswXSA6ICcnKSA6ICgodGhpcy5kZWZhdWx0T3duZXIpID8gdGhpcy5kZWZhdWx0T3duZXI/LnNwbGl0KCcgKCcpWzBdIDogJycpLFxyXG4gICAgICAgICAgbWVtYmVyX2VtYWlsOiAoYXNzaWdub3JEZXRhaWxzKSA/ICgocmVwb3J0Py5hc3NpZ25vcikgPyByZXBvcnQ/LmFzc2lnbm9yPy5zcGxpdCgnICgnKVsxXT8ucmVwbGFjZSgnKScsICcnKSA6ICcnKSA6ICgodGhpcy5kZWZhdWx0T3duZXIpID8gdGhpcy5kZWZhdWx0T3duZXI/LnNwbGl0KCcgKCcpWzFdLnJlcGxhY2UoJyknLCAnJykgOiAnJyksXHJcbiAgICAgICAgICBjcmVhdGVkX2J5OiAoYXNzaWdub3JEZXRhaWxzKSA/IHRoaXMubWVtYmVySWQgOiAwLFxyXG4gICAgICAgICAgcmVwb3J0X25hbWU6IHJlcG9ydD8ucmVzcG9uc2liaWxpdHlOYW1lID8/ICcnLFxyXG4gICAgICAgICAgZW50cnVzdGVkX3RvOiByZXBvcnQ/LmFzc2lnbmVlPy5zcGxpdCgnICgnKVswXSA/PyAnJyxcclxuICAgICAgICAgIGVudHJ1c3RlZF90b19pZDogdGhpcy5pc0dyb3VwU2VsZWN0ZWQocmVwb3J0Py5hc3NpZ25lZSkgPyB0aGlzLmdldEVtcGxveWVlSWRGcm9tR3JvdXAocmVwb3J0Py5hc3NpZ25lZSkgOiB0aGlzLnJldHVybklkcyhyZXBvcnQ/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJyk/LnRvU3RyaW5nKCkgPz8gJycsXHJcbiAgICAgICAgICBlbWFpbF9hZGRyZXNzOiAhdGhpcy5pc0dyb3VwU2VsZWN0ZWQocmVwb3J0Py5hc3NpZ25lZSkgPyAocmVwb3J0Py5hc3NpZ25lZT8uc3BsaXQoJyAoJylbMV0/LnJlcGxhY2UoJyknLCAnJykgPz8gJycpIDogJycsXHJcbiAgICAgICAgICBpc0dyb3VwQXNzaWduVG86IHJlcG9ydD8uYXNzaWduZWVUeXBlPy5pbmNsdWRlcygnQW55JykgPyAxIDogMCxcclxuICAgICAgICAgIC8vIGNhdGVnb3J5X25hbWU6IGNhdGVnb3J5TmFtZSxcclxuICAgICAgICAgIGNhdGVnb3J5X25hbWVfd2l0aF90cmVlOiAnJyxcclxuICAgICAgICAgIGNhdGVnb3J5X2lkOiB0aGlzLmdldFByb2dyYW1JZChyZXBvcnQ/LnByb2dyYW0sIHJlcG9ydD8ucHJvZ3JhbUNhdGVnb3J5KS5jYXRlZ29yeUlkPy50b1N0cmluZygpID8/ICcnLFxyXG4gICAgICAgICAgcHJvZ3JhbV9jYXRfaWRzOiB0aGlzLmdldFByb2dyYW1JZChyZXBvcnQ/LnByb2dyYW0sIHJlcG9ydD8ucHJvZ3JhbUNhdGVnb3J5KT8ucHJvZ3JhbUlkID8gW3RoaXMuZ2V0UHJvZ3JhbUlkKHJlcG9ydD8ucHJvZ3JhbSwgcmVwb3J0Py5wcm9ncmFtQ2F0ZWdvcnkpPy5wcm9ncmFtSWRdIDogW10sXHJcbiAgICAgICAgICByY19uYW1lOiByY0RldGFpbHMgPyByY0RldGFpbHM/Lm5hbWUgOiAnJyxcclxuICAgICAgICAgIHJjX2lkOiByY0RldGFpbHMgPyByY0RldGFpbHM/LnJjSWQgOiAwLFxyXG4gICAgICAgICAgZW50aXR5X3RyZWU6IChyY0RldGFpbHMgJiYgcmNEZXRhaWxzPy5yY0lkICkgPyBbe1xyXG4gICAgICAgICAgICBwYXJlbnRfcmNfaWRzOiByY0RldGFpbHMgPyByY0RldGFpbHM/LnBhcmVudElkcyA6IFtdLFxyXG4gICAgICAgICAgICByY19pZDogcmNEZXRhaWxzID8gcmNEZXRhaWxzPy5yY0lkIDogMFxyXG4gICAgICAgICAgfV06W10sXHJcbiAgICAgICAgICB1c2VyR3JvdXBJZHMgOiB7XHJcbiAgICAgICAgICAgIGFzc2lnbmVlQWxsR3JvdXBJZHM6ICghcmVwb3J0Py5hc3NpZ25lZVR5cGU/LmluY2x1ZGVzKCdBbnknKSAmJiB0aGlzLmlzR3JvdXBTZWxlY3RlZChyZXBvcnQ/LmFzc2lnbmVlKSkgPyBbdGhpcy5yZXR1cm5JZHMocmVwb3J0Py5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpXSA6IFtdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZUFueW9uZUdyb3VwSWRzOiAocmVwb3J0Py5hc3NpZ25lZVR5cGU/LmluY2x1ZGVzKCdBbnknKSAmJiB0aGlzLmlzR3JvdXBTZWxlY3RlZChyZXBvcnQ/LmFzc2lnbmVlKSkgPyBbdGhpcy5yZXR1cm5JZHMocmVwb3J0Py5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpXSA6IFtdLFxyXG4gICAgICAgICAgICBjY0VtYWlsR3JvdXBJZHM6IFtdLFxyXG4gICAgICAgICAgICBmYWlsdXJlQ0NFbWFpbEdyb3VwSWRzOiBbXSxcclxuICAgICAgICAgICAgcmV2aWV3ZXJHcm91cElkczogW11cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmcmVxdWVuY3lfaGFuZGxlcjogZnJlcXVlbmN5VmFsdWUsXHJcbiAgICAgICAgICBjb21wbGlhbmNlX3R5cGU6IGZyZXF1ZW5jeVZhbHVlPy5zcGxpdCgnficpWzBdLFxyXG4gICAgICAgICAgZnJlcXVlbmN5X2Rlc2NyaXB0aW9uOiByZXBvcnQ/LmZyZXF1ZW5jeSxcclxuICAgICAgICAgIHN0YXJ0X2RhdGU6IChyZXBvcnQ/LmRheSkgPyBzdGFydERhdGUgOiBjdXJyZW50RGF0ZSArICcgMDA6MDA6MDAnLFxyXG4gICAgICAgICAgcmlza19jbGFzczogcmVwb3J0Py5yZXBvcnRDbGFzcyA/PyAnJyxcclxuICAgICAgICAgIHJpc2tfY2xhc3NJZDogKHJlcG9ydD8ucmVwb3J0Q2xhc3MpID8gdGhpcy5yZXR1cm5JZHMocmVwb3J0Py5yZXBvcnRDbGFzcywgJ3Jpc2tfY2xhc3MnKSA6ICgodGhpcy5yaXNrQ2xhc3NFbmFibGVkKSA/IDEgOiAyKSxcclxuICAgICAgICAgIGRvY191dGM6IDAsXHJcbiAgICAgICAgICBjb21tZW50OiByZXBvcnQ/Lm5vdGVzID8/ICcnLFxyXG4gICAgICAgICAgY2NfbWFpbDogY2NEZXRhaWxzID8gY2NEZXRhaWxzPy5lbWFpbCA6ICcnLFxyXG4gICAgICAgICAgY2NfbWFpbF9pZDogY2NEZXRhaWxzID8gY2NEZXRhaWxzPy5lbXBsb3llZUlkIDogJycsXHJcbiAgICAgICAgICBjY19mYWlsZWRfbWFpbDogY2NGYWlsdXJlRGV0YWlscyA/IGNjRmFpbHVyZURldGFpbHM/LmVtYWlsIDogJycsXHJcbiAgICAgICAgICBjY19mYWlsdXJlX2lkOiBjY0ZhaWx1cmVEZXRhaWxzID8gY2NGYWlsdXJlRGV0YWlscz8uZW1wbG95ZWVJZCA6IDAsXHJcbiAgICAgICAgICBzZW5kX3JlbWluZGVyOiBcIlwiLFxyXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlXaW5kb3c6IChmcmVxdWVuY3lUeXBlID09PSAnMScpID8gMCA6IChjb21wbGV0ZURheXMgJiYgY29tcGxldGVEYXlzICE9ICcnKSA/IGNvbXBsZXRlRGF5cyA6IDAsXHJcbiAgICAgICAgICBmYWlsZWRfYWZ0ZXI6IChub3RDb21wbGV0ZURheXMgJiYgbm90Q29tcGxldGVEYXlzICE9ICcnKSA/IG5vdENvbXBsZXRlRGF5cyA6IDAsXHJcbiAgICAgICAgICBleGNlbF9zaGVldF9uYW1lOiBcIlwiLFxyXG4gICAgICAgICAgcmVwb3J0X3VwbG9hZF9mbGFnOiAoKHJlcG9ydD8uaXNGb3JtYXQgPT09ICdZZXMnKSAmJiByZXBvcnQ/LmZvcm1hdEZvclJlc3BvbnNpYmlsaXR5Py5sZW5ndGgpID8gMSA6IDAsXHJcbiAgICAgICAgICByZXBvcnRfaWQ6IDAsXHJcbiAgICAgICAgICBpc19hc3NpZ25lZF9mbGFnOiAwLFxyXG4gICAgICAgICAgcHJpdmF0ZV9saWJyYXJ5X2lkOiAwLFxyXG4gICAgICAgICAga2V5Y29tcGxpYW5jZTogKHJlcG9ydD8ua2V5UmVzcG9uc2liaWxpdHkgPT09ICdZZXMnKSA/ICdZZXMnIDogJ05vJyxcclxuICAgICAgICAgIGtleV9jb21wbGlhbmNlOiAocmVwb3J0Py5rZXlSZXNwb25zaWJpbGl0eSA9PT0gJ1llcycpID8gMSA6IDAsXHJcbiAgICAgICAgICByZXZpZXdlcklkOiByZXZpZXdlckRldGFpbHMgPyByZXZpZXdlckRldGFpbHM/LmVtcGxveWVlSWQgOiAwLFxyXG4gICAgICAgICAgcmV2aWV3ZXJfYXJyOiAoIHJldmlld2VyRGV0YWlscyAmJiByZXZpZXdlckRldGFpbHM/LmVtcGxveWVlSWQgKT8ge1xyXG4gICAgICAgICAgICBsZXZlbDE6IHtcclxuICAgICAgICAgICAgICByZXZpZXdlcnM6IFt7XHJcbiAgICAgICAgICAgICAgICBtZW1iZXJfaWQ6IHJldmlld2VyRGV0YWlscyA/IHJldmlld2VyRGV0YWlscz8uZW1wbG95ZWVJZCA6IDAsXHJcbiAgICAgICAgICAgICAgICByZXZpZXdlcl9hY2NlcHQ6IDBcclxuICAgICAgICAgICAgICB9XSxcclxuICAgICAgICAgICAgICB0eXBlOiBcIlNFUVVFTlRJQUxcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9Ont9XHJcbiAgICAgICAgICAsXHJcbiAgICAgICAgICByZXZpZXdlcldpbmRvdzogKHJlcG9ydD8ucmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbiAmJiByZXBvcnQ/LnJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW4gIT09ICcnKSAgPyByZXBvcnQ/LnJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW4gOiAyLFxyXG4gICAgICAgICAgcmV2aWV3ZXJGYWlsdXJlOiAocmVwb3J0Py5yZXZpZXdXaWxsQmVGYWlsZWRBZnRlciAmJiByZXBvcnQ/LnJldmlld1dpbGxCZUZhaWxlZEFmdGVyICE9PSAnJykgPyByZXBvcnQ/LnJldmlld1dpbGxCZUZhaWxlZEFmdGVyIDogMixcclxuICAgICAgICAgIHJldmlld2VyX2VtYWlsOiByZXZpZXdlckRldGFpbHMgPyByZXZpZXdlckRldGFpbHM/LmVtYWlsIDogJycsXHJcbiAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0Py5mb3JtYXRGb3JSZXNwb25zaWJpbGl0eSA/IHJlcG9ydC5mb3JtYXRGb3JSZXNwb25zaWJpbGl0eSA6ICcnLFxyXG4gICAgICAgICAgZG9jdW1lbnRhcnlFdmlkZW5jZTogcmVwb3J0Py5ldmlkZW5jZU5vdGVzID8/ICcnLFxyXG4gICAgICAgICAgaXNkb2N1bWVudGFyeUV2aWRlbmNlOiAocmVwb3J0LmRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZCA9PT0gJ1llcycpID8gMSA6IDAsXHJcbiAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydC5vYmplY3RpdmUgPz8gJycsXHJcbiAgICAgICAgICBleGNlbF9zaGVldF9pbmZvOiB0aGlzLmZpbGVSZXNwb25zZSxcclxuICAgICAgICAgIHNob3dMaXN0OiBmYWxzZSxcclxuICAgICAgICAgIGN1c3RvbV90YWdzOiAnW10nLFxyXG4gICAgICAgICAgcXVlc3Rpb25uYWlyZV90eXBlOiAnJyxcclxuICAgICAgICAgIG9uX2NvbXBsZXRpb25fb2ZfdHlwZTogKHJlcG9ydD8uZnJlcXVlbmN5ID09PSAnT24gQ29tcGxldGlvbiBvZicgfHwgcmVwb3J0Py5mcmVxdWVuY3k/LnRvTG93ZXJDYXNlKCkgPT09ICdvbmdvaW5nJykgPyAxIDogMCxcclxuICAgICAgICAgIG9uX2NvbXBsZXRpb25fb2Y6IHRoaXMucmV0dXJuSWRzKHJlcG9ydD8ucGFyZW50UmVzcG9uc2liaWxpdHksICdwYXJlbnRSZXNwb25zaWJpbGl0eScpID8gW3RoaXMucmV0dXJuSWRzKHJlcG9ydD8ucGFyZW50UmVzcG9uc2liaWxpdHksICdwYXJlbnRSZXNwb25zaWJpbGl0eScpXSA6IFtdLFxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXlsb2FkLnB1c2gob2JqKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInBheWxvYWRwYXlsb2FkXCIscGF5bG9hZCwgXCJyZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPT0+XCIsIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCApXHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5hZGRCdWxrUmVzcG9uc2liaWxpdHkocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNob3dTbWlsZXkgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YSA9IHJlcztcclxuXHJcbiAgICB9LFxyXG4gICAgICBlcnIgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdygnT09QUyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSBsb2FkZWQuIENvdWxkIHlvdSBwbGVhc2UgdHJ5IG9uZSBtb3JlIHRpbWU/JywgJ2FsZXJ0Jyk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcmV0dXJuSWRzKGl0ZW06IGFueSwga2V5OiBzdHJpbmcpIDogYW55IHtcclxuICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgIGNhc2UgJ3JjX2lkJzpcclxuICAgICAgICBsZXQgcmNPYmogPSB7IG5hbWU6ICcnLCByY0lkOiAwLCBwYXJlbnRJZHM6IFtdIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ucmNMaXN0LmZvckVhY2goKHJjX2VsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJjX2VsZW1lbnQubmFtZSA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIGxldCBuYW1lO1xyXG4gICAgICAgICAgICBpZiAocmNfZWxlbWVudC5uYW1lLmluY2x1ZGVzKCdbV0lUSElOXScpKSB7XHJcbiAgICAgICAgICAgICAgbmFtZSA9IHJjX2VsZW1lbnQubmFtZS5zcGxpdCgnIFtXSVRISU5dICcpWzBdXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbmFtZSA9IHJjX2VsZW1lbnQubmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByY09iaiA9IHsgbmFtZSwgcmNJZDogcmNfZWxlbWVudC5yY19pZCwgcGFyZW50SWRzOiByY19lbGVtZW50LnBhcmVudElkcyB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByY09ialxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXZpZXdlcic6XHJcbiAgICAgICAgbGV0IHJldmlld2VyT2JqID0geyBuYW1lOiAnJywgZW1wbG95ZWVJZDogMCwgZW1haWw6ICcnIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdC5mb3JFYWNoKChyZXZpZXdlckVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJldmlld2VyRWxlbWVudC5uYW1lQW5kRW1haWwgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICByZXZpZXdlck9iaiA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiByZXZpZXdlckVsZW1lbnQubmFtZSxcclxuICAgICAgICAgICAgICBlbXBsb3llZUlkOiByZXZpZXdlckVsZW1lbnQubXlfbWVtYmVyX2lkLFxyXG4gICAgICAgICAgICAgIGVtYWlsOiByZXZpZXdlckVsZW1lbnQuZW1haWxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXZpZXdlck9iajtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Fzc2lnbm9yJzpcclxuICAgICAgICBsZXQgYXNzaWdub3JPYmogPSB7IG5hbWU6ICcnLCBtZW1iZXJJZDogMCwgZW1haWw6ICcnIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uYXNzaWdub3JzTGlzdC5mb3JFYWNoKChhc3NpZ25vckVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGFzc2lnbm9yRWxlbWVudC5uYW1lQW5kRW1haWwgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBhc3NpZ25vck9iaiA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBhc3NpZ25vckVsZW1lbnQubmFtZSxcclxuICAgICAgICAgICAgICBlbWFpbDogYXNzaWdub3JFbGVtZW50LmVtYWlsLFxyXG4gICAgICAgICAgICAgIG1lbWJlcklkOiBhc3NpZ25vckVsZW1lbnQubWVtYmVyX2lkXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYXNzaWdub3JPYmo7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjYyc6XHJcbiAgICAgICAgbGV0IGNjT2JqID0geyBuYW1lOiAnJywgZW1wbG95ZWVJZDogMCwgZW1haWw6ICcnIH1cclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0LmZvckVhY2goKGNjRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2NFbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIGNjT2JqID0ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IGNjRWxlbWVudC5uYW1lLFxyXG4gICAgICAgICAgICAgIGVtcGxveWVlSWQ6IGNjRWxlbWVudC5lbXBsb3llZV9pZCxcclxuICAgICAgICAgICAgICBlbWFpbDogY2NFbGVtZW50LmVtYWlsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gY2NPYmo7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NjRmFpbHVyZSc6XHJcbiAgICAgICAgbGV0IGNjZk9iaiA9IHsgbmFtZTogJycsIGVtcGxveWVlSWQ6IDAsIGVtYWlsOiAnJyB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3QuZm9yRWFjaCgoY2NmRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2NmRWxlbWVudC5uYW1lQW5kRW1haWwgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBjY2ZPYmogPSB7XHJcbiAgICAgICAgICAgICAgbmFtZTogY2NmRWxlbWVudC5uYW1lLFxyXG4gICAgICAgICAgICAgIGVtcGxveWVlSWQ6IGNjZkVsZW1lbnQuZW1wbG95ZWVfaWQsXHJcbiAgICAgICAgICAgICAgZW1haWw6IGNjZkVsZW1lbnQuZW1haWxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBjY2ZPYmo7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdlbnRydXN0ZWRfdG8nOlxyXG4gICAgICAgIGxldCBlbXBJZCA9IDBcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5hc3NpZ25lZXNMaXN0LmZvckVhY2goKGVuRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZW5FbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIGVtcElkID0gZW5FbGVtZW50LmVtcGxveWVlX2lkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBlbXBJZFxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAncGFyZW50UmVzcG9uc2liaWxpdHknOlxyXG4gICAgICAgIGxldCBpZCA9IDBcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5wYXJlbnRSZXNwb25zaWJpbGl0eS5mb3JFYWNoKChyZXNwb25zaWJpbGl0eTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2liaWxpdHk/Lm5hbWUgPT09IGl0ZW0pIHtcclxuICAgICAgICAgICAgaWQgPSByZXNwb25zaWJpbGl0eS5pZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gaWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSAncmlza19jbGFzcyc6XHJcblxyXG4gICAgICAgIGlmIChpdGVtID09ICdMb3cnKSB7XHJcbiAgICAgICAgICByZXR1cm4gMVxyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PSAnTG93LU1lZGl1bScpIHtcclxuICAgICAgICAgIHJldHVybiAyXHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09ICdNZWRpdW0tSGlnaCcpIHtcclxuICAgICAgICAgIHJldHVybiAzXHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09ICdIaWdoJykge1xyXG4gICAgICAgICAgcmV0dXJuIDRcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIDBcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgcmVwb3J0czogW10sXHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1bGtVcGxvYWQgPSB7XHJcbiAgICAgIGZyZXF1ZW5jeToge1xyXG4gICAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICAgICAgcmVwb3J0czogW10sXHJcbiAgICAgIH0sXHJcbiAgICAgIG9uZ29pbmc6IHtcclxuICAgICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgICBvbkNvbXBsZXRpb246IHtcclxuICAgICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50ZW1wbGF0ZUluZm8gPSB7XHJcbiAgICAgIGNhdGVnb3J5TGlzdDogW10sXHJcbiAgICAgIHJjTGlzdDogW10sXHJcbiAgICAgIGFzc2lnbm9yc0xpc3Q6IFtdLFxyXG4gICAgICBhc3NpZ25lZXNMaXN0OiBbXSxcclxuICAgICAgcmV2aWV3ZXJMaXN0OiBbXSxcclxuICAgICAgbWVtYmVySWQ6ICcnXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5maWxlTmFtZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZGF0YSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2hvd0V4Y2VsID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmNsb3NlQWRkTXVsdGlwbGVSZXNwb25zaWJpbGl0eS5lbWl0KCk7XHJcbiAgfVxyXG4gIGFjdGlvbihldmVudDogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50KSB7XHJcbiAgICAgIGNhc2UgJ2FkZE1vcmUnOlxyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndmlldyc6XHJcbiAgICAgICAgdGhpcy52aWV3UmVzcG9uc2liaWxpdGllcygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VTbWlsZXkoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmNsb3NlV29ya2Zsb3cuZW1pdCh7IGV2dDogdGhpcy5yZXNwb25zaWJpbGl0eURhdGEsIGNvbmZpcm06IGZhbHNlIH0pO1xyXG4gIH1cclxuXHJcbiAgdmlld1Jlc3BvbnNpYmlsaXRpZXMoKTogdm9pZCB7XHJcbiAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICBsZXQgdXJsU3Vic3RyaW5nID0gJyc7XHJcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xyXG4gICAgaWYgKHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nKSB7XHJcbiAgICAgIGlmKHRoaXMuZmVhdHVyZWZsYWcpe1xyXG4gICAgICAgIHVybFN1YnN0cmluZyA9ICdjb21wbGlhbmNlL21hbmFnZS1yZXNwb25zaWJpbGl0eT8nICsgdGhpcy51cmw7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICB1cmxTdWJzdHJpbmcgPSAnY29tcGxpYW5jZS9tYW5hZ2UtcmVzcG9uc2liaWxpdGllcy9yZXNwb25zaWJpbGl0aWVzLXF1ZXVlJztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYodGhpcy5mZWF0dXJlZmxhZyl7XHJcbiAgICAgICAgdGhpcy5xdWVyeVBhcmFtID0gIEpTT04/LnN0cmluZ2lmeSh0aGlzLnJlY2VudFJlc3BvbnNpYmlsaXR5VXJsKVxyXG4gICAgICAgIHVybFN1YnN0cmluZyA9ICdjb21wbGlhbmNlL21hbmFnZS1yZXNwb25zaWJpbGl0eT9xPScgKyB0aGlzLnF1ZXJ5UGFyYW07XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICB1cmxTdWJzdHJpbmcgPSAnY29tcGxpYW5jZS9tYW5hZ2UtcmVzcG9uc2liaWxpdGllcyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh3aW5kb3cubG9jYXRpb24uaG9zdC5zdGFydHNXaXRoKCdsb2NhbGhvc3QnKSkge1xyXG4gICAgICB1cmwgPSAnaHR0cDovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArICcvY29tcGxpYW5jZS8jLycgKyB1cmxTdWJzdHJpbmc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1cmwgPSAnaHR0cHM6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyAnL2NvbXBsaWFuY2UvIy8nICsgdXJsU3Vic3RyaW5nO1xyXG4gICAgfVxyXG4gICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7XHJcbiAgfVxyXG5cclxuICAvLyBVcGxvYWQgRmlsZSB0byB0aGUgc2VydmVyXHJcbiAgZmlsZVVwbG9hZCgpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBjb25zdCBmaWxlID0gdGhpcy51cGxvYWRlZEZpbGVzWzBdWzBdO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdzb3VyY2VmaWxlJywgZmlsZSk7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2Rlc3RpbmF0aW9uJywgJ2J1bGt1cGxvYWQvZW50cnVzdC8nICsgdGhpcy51c2VySW5mby5lbWFpbCk7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5maWxlVXBsb2FkKGZvcm1EYXRhKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXM/LmZpbGVuYW1lKSB7XHJcbiAgICAgICAgdGhpcy5maWxlUmVzcG9uc2UucHVzaChyZXMpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcblxyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsICdhbGVydCcpO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0T3JnYW5pemF0aW9uRGV0YWlscyh0ZW1wTGlzdDogYW55KSB7XHJcbiAgICBpZih0ZW1wTGlzdFswXSAhPT0gdW5kZWZpbmVkICYmIHRlbXBMaXN0WzBdWzE4XSl7XHJcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvLm1lbWJlcklkID0gdGVtcExpc3RbMF1bMThdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnVGhlIGluY29ycmVjdCBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkLiBQbGVhc2UgdXBsb2FkIHRoZSB0ZW1wbGF0ZSB3aGljaCB5b3UgZG93bmxvYWRlZCBmcm9tIGhlcmUuJyArICcgUkVUUlknO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGVtcExpc3QuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcblxyXG4gICAgICAvKiBQdXNoaW5nIHRoZSB2YWx1ZSBvZiByZWd1bGF0aW9ucyBQcm9ncmFtcyBpbnRvIHRoZSBjYXRlZ29yeUxpc3QgYXJyYXkuICovXHJcbiAgICAgIGlmIChlbGVtZW50WzI2XSAmJiB0eXBlb2YoZWxlbWVudFsyNl0pID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIGNvbnN0IHJlZ3VsYXRpb25zID0ge1xyXG4gICAgICAgICAgcHJvZ3JhbU5hbWU6IGVsZW1lbnRbMjJdLFxyXG4gICAgICAgICAgcHJvZ3JhbUlkOiBlbGVtZW50WzI2XSxcclxuICAgICAgICAgIGFzc2lnbmVlOiBKU09OLnBhcnNlKGVsZW1lbnRbMzBdKSxcclxuICAgICAgICAgIHJldmlld2VyOiBKU09OLnBhcnNlKGVsZW1lbnRbMzFdKSxcclxuICAgICAgICAgIG92ZXJzZWVyOiBKU09OLnBhcnNlKGVsZW1lbnRbMzJdKT8uY29uY2F0KEpTT04ucGFyc2UoZWxlbWVudFszM10pKSxcclxuICAgICAgICAgIHByb2dyYW1UeXBlOiAxLFxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3QucHVzaChyZWd1bGF0aW9ucyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIFB1c2hpbmcgdGhlIHZhbHVlIG9mIHN0YW5kYXJkcyBQcm9ncmFtcyBpbnRvIHRoZSBjYXRlZ29yeUxpc3QgYXJyYXkuICovXHJcbiAgICAgIGlmIChlbGVtZW50WzI3XSAmJiB0eXBlb2YoZWxlbWVudFsyN10pID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIGNvbnN0IHN0YW5kYXJkcyA9IHtcclxuICAgICAgICAgIHByb2dyYW1OYW1lOiBlbGVtZW50WzIzXSxcclxuICAgICAgICAgIHByb2dyYW1JZDogZWxlbWVudFsyN10sXHJcbiAgICAgICAgICBhc3NpZ25lZTogSlNPTi5wYXJzZShlbGVtZW50WzM0XSksXHJcbiAgICAgICAgICByZXZpZXdlcjogSlNPTi5wYXJzZShlbGVtZW50WzM1XSksXHJcbiAgICAgICAgICBvdmVyc2VlcjogSlNPTi5wYXJzZShlbGVtZW50WzM2XSk/LmNvbmNhdChKU09OLnBhcnNlKGVsZW1lbnRbMzddKSksXHJcbiAgICAgICAgICBwcm9ncmFtVHlwZTogMixcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0LnB1c2goc3RhbmRhcmRzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLyogUHVzaGluZyB0aGUgdmFsdWUgb2YgaW50ZXJuYWwgQ29udHJvbHMgUHJvZ3JhbXMgaW50byB0aGUgY2F0ZWdvcnlMaXN0IGFycmF5LiAqL1xyXG4gICAgICBpZiAoZWxlbWVudFsyOF0gJiYgdHlwZW9mKGVsZW1lbnRbMjhdKSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICBjb25zdCBpbnRlcm5hbENvbnRyb2xzID0ge1xyXG4gICAgICAgICAgcHJvZ3JhbU5hbWU6IGVsZW1lbnRbMjRdLFxyXG4gICAgICAgICAgcHJvZ3JhbUlkOiBlbGVtZW50WzI4XSxcclxuICAgICAgICAgIGFzc2lnbmVlOiBKU09OLnBhcnNlKGVsZW1lbnRbMzhdKSxcclxuICAgICAgICAgIHJldmlld2VyOiBKU09OLnBhcnNlKGVsZW1lbnRbMzldKSxcclxuICAgICAgICAgIG92ZXJzZWVyOiBKU09OLnBhcnNlKGVsZW1lbnRbNDBdKT8uY29uY2F0KEpTT04ucGFyc2UoZWxlbWVudFs0MV0pKSxcclxuICAgICAgICAgIHByb2dyYW1UeXBlOiAzLFxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3QucHVzaChpbnRlcm5hbENvbnRyb2xzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLyogUHVzaGluZyB0aGUgdmFsdWUgb2Ygb3RoZXJzIFByb2dyYW1zIGludG8gdGhlIGNhdGVnb3J5TGlzdCBhcnJheS4gKi9cclxuICAgICAgaWYgKGVsZW1lbnRbMjldICYmIHR5cGVvZihlbGVtZW50WzI5XSkgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgY29uc3Qgb3RoZXJzID0ge1xyXG4gICAgICAgICAgcHJvZ3JhbU5hbWU6IGVsZW1lbnRbMjVdLFxyXG4gICAgICAgICAgcHJvZ3JhbUlkOiBlbGVtZW50WzI5XSxcclxuICAgICAgICAgIGFzc2lnbmVlOiBKU09OLnBhcnNlKGVsZW1lbnRbNDJdKSxcclxuICAgICAgICAgIHJldmlld2VyOiBKU09OLnBhcnNlKGVsZW1lbnRbNDNdKSxcclxuICAgICAgICAgIG92ZXJzZWVyOiBKU09OLnBhcnNlKGVsZW1lbnRbNDRdKT8uY29uY2F0KEpTT04ucGFyc2UoZWxlbWVudFs0NV0pKSxcclxuICAgICAgICAgIHByb2dyYW1UeXBlOiAwLFxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3QucHVzaChvdGhlcnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvKiBDaGVja2luZyBpZiB0aGUgZWxlbWVudFs5XSBpcyBub3QgbnVsbCBhbmQgbm90IGVtcHR5LiBJZiBpdCBpcyBub3QgbnVsbCBhbmQgbm90IGVtcHR5LCBpdCBpc1xyXG4gICAgICBwdXNoaW5nIHRoZSBlbGVtZW50WzldIChSQykgdG8gdGhlIGFycmF5IChyY0xpc3QpLiAqL1xyXG4gICAgICBpZiAoZWxlbWVudFs5XSAmJiBlbGVtZW50WzldIT0nICcpIHtcclxuICAgICAgICBjb25zdCByYyA9IHtcclxuICAgICAgICAgIG5hbWU6IGVsZW1lbnRbOV0sXHJcbiAgICAgICAgICByY19pZDogZWxlbWVudFsxMF0sXHJcbiAgICAgICAgICBwYXJlbnRJZHM6IEpTT04ucGFyc2UoZWxlbWVudFsxMV0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnJjTGlzdC5wdXNoKHJjKTtcclxuICAgICAgfVxyXG4gICAgICAvKiBDaGVja2luZyBpZiB0aGUgZWxlbWVudFsyXSBpcyBub3QgZW1wdHkgYW5kIG5vdCBlcXVhbCB0byBzcGFjZS4gSWYgaXQgaXMgbm90IGVtcHR5IGFuZCBub3RcclxuICAgICAgZXF1YWwgdG8gc3BhY2UsIHRoZW4gaXQgaXMgcHVzaGluZyB0aGUgYXNzaWduZWUgb2JqZWN0IHRvIHRoZSBhc3NpZ25lZXNMaXN0IGFycmF5LiAqL1xyXG4gICAgICBpZiAoZWxlbWVudFsxOV0gJiYgZWxlbWVudFsxOV0hPScgJykge1xyXG4gICAgICAgIGNvbnN0IGFzc2lnbmVlID0ge1xyXG4gICAgICAgICAgbmFtZUFuZEVtYWlsOiBlbGVtZW50WzE5XSxcclxuICAgICAgICAgIC8vIG5hbWU6IGVsZW1lbnRbMTFdLnNwbGl0KCcgKCcpWzBdLFxyXG4gICAgICAgICAgbmFtZTogZWxlbWVudFsxOV0sXHJcbiAgICAgICAgICBlbWFpbDogZWxlbWVudFsxOV0sXHJcbiAgICAgICAgICBlbXBsb3llZV9pZDogZWxlbWVudFsyMF0sXHJcbiAgICAgICAgICBteV9tZW1iZXJfaWQ6IEpTT04ucGFyc2UoZWxlbWVudFsyMV0gKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5hc3NpZ25lZXNMaXN0LnB1c2goYXNzaWduZWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZWxlbWVudFsyXSAmJiBlbGVtZW50WzJdIT0nICcpIHtcclxuICAgICAgICBjb25zdCByZXZpZXdlciA9IHtcclxuICAgICAgICAgIG5hbWVBbmRFbWFpbDogZWxlbWVudFsyXSxcclxuICAgICAgICAgIC8vIG5hbWU6IGVsZW1lbnRbMTFdLnNwbGl0KCcgKCcpWzBdLFxyXG4gICAgICAgICAgbmFtZTogZWxlbWVudFswXSxcclxuICAgICAgICAgIGVtYWlsOiBlbGVtZW50WzFdLFxyXG4gICAgICAgICAgZW1wbG95ZWVfaWQ6IGVsZW1lbnRbM10sXHJcbiAgICAgICAgICBteV9tZW1iZXJfaWQ6IGVsZW1lbnRbNF1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ucmV2aWV3ZXJMaXN0LnB1c2gocmV2aWV3ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIC8qIENoZWNraW5nIGlmIHRoZSBlbGVtZW50WzJdIGlzIG5vdCBlbXB0eSBhbmQgbm90IGVxdWFsIHRvIHNwYWNlLiBJZiBpdCBpcyBub3QgZW1wdHkgYW5kIG5vdFxyXG4gICAgICBlcXVhbCB0byBzcGFjZSwgaXQgd2lsbCBjcmVhdGUgYW4gb2JqZWN0IGFuZCBwdXNoIGl0IHRvIHRoZSBhc3NpZ25vcnNMaXN0IGFycmF5LiAqL1xyXG4gICAgICBpZiAoZWxlbWVudFsyXSAmJiBlbGVtZW50WzJdIT0nICcpIHtcclxuICAgICAgICBjb25zdCBhc3NpZ25vciA9IHtcclxuICAgICAgICAgIG5hbWVBbmRFbWFpbDogZWxlbWVudFsyXSxcclxuICAgICAgICAgIG5hbWU6IGVsZW1lbnRbMF0sXHJcbiAgICAgICAgICBlbWFpbDogZWxlbWVudFsxXSxcclxuICAgICAgICAgIC8vIG5hbWU6IGVsZW1lbnRbMTRdLnNwbGl0KCcgKCcpWzBdLFxyXG4gICAgICAgICAgLy8gZW1haWw6IGVsZW1lbnRbMTRdLnNwbGl0KCcgKCcpWzFdLnJlcGxhY2UoJyknLCAnJyksXHJcbiAgICAgICAgICBtZW1iZXJfaWQ6IGVsZW1lbnRbNF0sXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbm9yc0xpc3QucHVzaChhc3NpZ25vcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIENoZWNraW5nIGlmIHRoZSAxN3RoIGVsZW1lbnQgb2YgdGhlIGFycmF5IGlzIHRydWUuIElmIGl0IGlzLCBpdCBpcyBjcmVhdGluZyBhbiBvYmplY3Qgd2l0aCB0aGVcclxuICAgICAgMTZ0aCBlbGVtZW50IGFzIHRoZSBuYW1lIGFuZCB0aGUgMTd0aCBlbGVtZW50IGFzIHRoZSBpZC4gKi9cclxuICAgICAgaWYgKGVsZW1lbnRbMTddKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50UmVzcG9uc2liaWxpdHkgPSB7XHJcbiAgICAgICAgICBuYW1lOiBlbGVtZW50WzE2XSxcclxuICAgICAgICAgIGlkOiBKU09OLnBhcnNlKGVsZW1lbnRbMTddKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5wYXJlbnRSZXNwb25zaWJpbGl0eS5wdXNoKHBhcmVudFJlc3BvbnNpYmlsaXR5KTtcclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIC8qIENyZWF0aW5nIGEgbGlzdCBvZiBjaGlsZCBjYXRlZ29yaWVzLiBhbmQgcHVzaCB0aGUgY2hpbGQgY2F0ZWdvcmllcyB0byB0aGVpciBwYXJlbnQgcHJvZ3JhbSAqL1xyXG4gICAgaWYodGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0Py5mb3JFYWNoKChjYXRlZ29yeTogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICBsZXQgaW5kZXggPSB0ZW1wTGlzdFswXT8uaW5kZXhPZihjYXRlZ29yeT8ucHJvZ3JhbUlkKTtcclxuICAgICAgICBpZihpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgIGxldCBjaGlsZENhdGVnb3J5ID0gW107XHJcbiAgICAgICAgICAvKiBDcmVhdGluZyBhIGxpc3Qgb2YgY2hpbGQgY2F0ZWdvcmllcy4gKi9cclxuICAgICAgICAgIGZvcihsZXQgaj0xOyB0cnVlOyBqKyspe1xyXG4gICAgICAgICAgICBpZih0ZW1wTGlzdFtqXSAmJiB0ZW1wTGlzdFtqXVtpbmRleF0pe1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5ID0ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogdGVtcExpc3Rbal1baW5kZXggLTFdLFxyXG4gICAgICAgICAgICAgICAgaWQ6IHRlbXBMaXN0W2pdW2luZGV4XSxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY2hpbGRDYXRlZ29yeS5wdXNoKGNhdGVnb3J5KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0W2ldWydjaGlsZENhdGVnb3J5J10gPSBjaGlsZENhdGVnb3J5O1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb25zb2xlLmxvZygndGhpcy51cGxvYWRlZEZpbGVzIHRoaXMudGVtcGxhdGVJbmZvJyx0aGlzLnRlbXBsYXRlSW5mbywgdGhpcy5idWxrVXBsb2FkKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYW4gZXZlbnQsIHdoaWNoIGlzIGEgc3RyaW5nLCBhbmQgdGhlbiBpdCBzZXRzIHRoZSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdmFyaWFibGUgdG9cclxuICAgKiB0aGUgdmFsdWUgb2YgdGhlIGJ1bGtVcGxvYWQgdmFyaWFibGUsIHdoaWNoIGlzIGFuIG9iamVjdCwgYW5kIHRoZW4gaXQgYWNjZXNzZXMgdGhlIHByb3BlcnR5IG9mXHJcbiAgICogdGhhdCBvYmplY3QgdGhhdCBtYXRjaGVzIHRoZSBldmVudCBzdHJpbmcuXHJcbiAgICogXHJcbiAgICogU28gaWYgdGhlIGV2ZW50IHN0cmluZyBpcyAnZnJlcXVlbmN5JywgdGhlbiB0aGUgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvXHJcbiAgICogdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgcHJvcGVydHkgb2YgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0LlxyXG4gICAqIFxyXG4gICAqIElmIHRoZSBldmVudCBzdHJpbmcgaXMgJ29uZ29pbmcnLCB0aGVuIHRoZSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdmFyaWFibGUgd2lsbCBiZSBzZXQgdG8gdGhlXHJcbiAgICogdmFsdWUgb2YgdGhlIG9uZ29pbmcgcHJvcGVydHkgb2YgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0LlxyXG4gICAqIFxyXG4gICAqIElmIHRoZSBldmVudCBzdHJpbmcgaXMgJ29uQ29tcGxldGlvbicsIHRoZW4gdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB3aWxsIGJlIHNldCB0byB0aGVcclxuICAgKiB2YWx1ZSBvZiB0aGUgb25Db21wbGV0aW9uIHByb3BlcnR5IG9mIHRoZSBidWxrVXBsb2FkIG9iamVjdC5cclxuICAgKiBcclxuICAgKiBJZiB0aGUgZXZlbnQgc3RyaW5nIGlzIGFueXRoaW5nIGVsc2UsIHRoZW4gdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB3aWxsIGJlIHNldCB0b1xyXG4gICAqIHRoZSB2YWx1ZSBvZiB0aGUgZnJlcXVlbmN5IHByb3BlcnR5IG9mIHRoZSBidWxrVXBsb2FkIG9iamVjdC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgLSBzdHJpbmcgLSB0aGUgZXZlbnQgdGhhdCBpcyBlbWl0dGVkIGZyb20gdGhlIGNoaWxkIGNvbXBvbmVudCAoZnJlcXVlbmN5IHwgb25nb2luZyB8IG9uQ29tcGxldGlvbilcclxuICAgKi9cclxuICBzZWxlY3RlZFRhYihldmVudDogJ2ZyZXF1ZW5jeScgfCAnb25nb2luZycgfCAnb25Db21wbGV0aW9uJykge1xyXG4gICAgY29uc29sZS5sb2coJ3NlbGVjdGVkVGFiJywgZXZlbnQpO1xyXG4gICAgdGhpcy50YWJUeXBlID0gZXZlbnQ7XHJcbiAgICBzd2l0Y2goZXZlbnQpIHtcclxuICAgICAgY2FzZSAnZnJlcXVlbmN5JyA6IFxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ29uZ29pbmcnOiBcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnb25Db21wbGV0aW9uJzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0IDpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8uZnJlcXVlbmN5O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coJ3RoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkJywgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQsIHRoaXMuYnVsa1VwbG9hZClcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgaW4gYSByZXBvcnQsIGEgdGFiIHR5cGUsIGFuZCBhIGJvb2xlYW4gdmFsdWUuIEl0IHRoZW4gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBhIGJ1bmNoIG9mXHJcbiAgICogcHJvcGVydGllcy5cclxuICAgKiA8L2NvZGU+XHJcbiAgICogQHBhcmFtIHthbnl9IHJlcG9ydCAtIGFueSA9Jmd0OyB0aGUgYXJyYXkgb2YgZGF0YVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJUeXBlIC0gc3RyaW5nIC0gdGhpcyBpcyB0aGUgdHlwZSBvZiB0YWIgdGhhdCBpcyBzZWxlY3RlZC5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUHJvZ3JhbSAtIGJvb2xlYW5cclxuICAgKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XHJcbiAgICovXHJcbiAgc2V0UmVwb3J0RGV0YWlscyhyZXBvcnQ6IGFueSwgdGFiVHlwZTogc3RyaW5nLCBpc1Byb2dyYW06IGJvb2xlYW4pIHtcclxuICAgIGxldCBvYmo6IGFueTtcclxuICAgIHN3aXRjaCh0YWJUeXBlKXtcclxuICAgICAgY2FzZSAnZnJlcXVlbmN5Jzoge1xyXG4gICAgICAgIGlmKGlzUHJvZ3JhbSl7XHJcbiAgICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5TmFtZTogcmVwb3J0WzBdLFxyXG4gICAgICAgICAgICBwcm9ncmFtVHlwZTogcmVwb3J0WzFdLFxyXG4gICAgICAgICAgICBwcm9ncmFtOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIHByb2dyYW1DYXRlZ29yeTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZTogcmVwb3J0WzVdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZVR5cGU6IHJlcG9ydFs2XSxcclxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogbnVsbCxcclxuICAgICAgICAgICAgZnJlcXVlbmN5OiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIGRheTogcmVwb3J0WzldLFxyXG4gICAgICAgICAgICBtb250aDogcmVwb3J0WzEwXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlXaW5kb3c6IHJlcG9ydFsxMV0sXHJcbiAgICAgICAgICAgIGZhaWxlZEFmdGVyOiByZXBvcnRbMTJdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzEzXSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzE1XSxcclxuICAgICAgICAgICAgbm90ZXM6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzE4XSxcclxuICAgICAgICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiByZXBvcnRbMTldLFxyXG4gICAgICAgICAgICAvLyBldmlkZW5jZU5vdGVzOiByZXBvcnRbMTldLFxyXG4gICAgICAgICAgICAvLyBhc3Nlc3NtZW50czogcmVwb3J0WzIwXSxcclxuICAgICAgICAgICAgcmV2aWV3ZXI6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIHJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW46IHJlcG9ydFsyMV0sXHJcbiAgICAgICAgICAgIHJldmlld1dpbGxCZUZhaWxlZEFmdGVyOiByZXBvcnRbMjJdLFxyXG4gICAgICAgICAgICBvdmVyc2VlcjogcmVwb3J0WzIzXSxcclxuICAgICAgICAgICAgbm90aWZ5T25GYWlsdXJlOiByZXBvcnRbMjRdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJykgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3ZhbGlkRGF0ZSddID0gdGhpcy5jb21wYXJlV2l0aEN1cnJlbnREYXRlKG9iaj8uZGF5LCBvYmo/Lm1vbnRoKTtcclxuICAgICAgICAgIG9ialsnaXNQYXN0RGF0ZSddID0gdGhpcy5pc1Bhc3REYXRlKG9iaj8uZGF5LCBvYmo/Lm1vbnRoKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZCddID0gb2JqWydpc1ZhbGlkRGF0YSddICYmIG9ialsndmFsaWREYXRlJ10gJiYgIW9ialsnaXNQYXN0RGF0ZSddICYmIG9iaj8uZnJlcXVlbmN5Py5sZW5ndGggJiYgIU9iamVjdC52YWx1ZXMob2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddKS5pbmNsdWRlcyhmYWxzZSkgJiYgb2JqWydpc1ZhbGlkVXNlciddO1xyXG4gICAgICAgICAgcmV0dXJuIG9iajtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcclxuICAgICAgICAgICAgYXNzaWdub3I6IHJlcG9ydFsxXSxcclxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IG51bGwsXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogcmVwb3J0WzVdLFxyXG4gICAgICAgICAgICBkYXk6IHJlcG9ydFs2XSxcclxuICAgICAgICAgICAgbW9udGg6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlXaW5kb3c6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgZmFpbGVkQWZ0ZXI6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIHJlcG9ydENsYXNzOiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydFsxMl0sXHJcbiAgICAgICAgICAgIG5vdGVzOiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICBpc0Zvcm1hdDogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgLy8gZXZpZGVuY2VOb3RlczogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgLy8gYXNzZXNzbWVudHM6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICByZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluOiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzIxXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xyXG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddID0gdGhpcy5yZXR1cm5JZHMob2JqPy5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgb2JqWyd2YWxpZERhdGUnXSA9IHRoaXMuY29tcGFyZVdpdGhDdXJyZW50RGF0ZShvYmo/LmRheSwgb2JqPy5tb250aCk7XHJcbiAgICAgICAgICBvYmpbJ2lzUGFzdERhdGUnXSA9IHRoaXMuaXNQYXN0RGF0ZShvYmo/LmRheSwgb2JqPy5tb250aCk7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9IG9ialsnaXNWYWxpZERhdGEnXSAmJiBvYmpbJ3ZhbGlkRGF0ZSddICYmICFvYmpbJ2lzUGFzdERhdGUnXSAmJiBvYmo/LmZyZXF1ZW5jeT8ubGVuZ3RoICYmIG9ialsnaXNWYWxpZFVzZXInXTtcclxuICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ29uZ29pbmcnOiB7XHJcbiAgICAgICAgaWYoaXNQcm9ncmFtKXtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIHByb2dyYW1UeXBlOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIHByb2dyYW06IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgcHJvZ3JhbUNhdGVnb3J5OiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbNV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzddLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgc2V0UmVtaW5kZXI6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgZnJlcXVlbmN5UmVtaW5kZXI6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzEyXSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIC8vIGFzc2Vzc21lbnRzOiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE4XSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjFdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyMl1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSA9IHRoaXMuaXNWYWxpZERhdGEob2JqKTtcclxuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZCddID0gb2JqWydpc1ZhbGlkRGF0YSddICAmJiAhT2JqZWN0LnZhbHVlcyhvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10pLmluY2x1ZGVzKGZhbHNlKSAmJiBvYmpbJ2lzVmFsaWRVc2VyJ107XHJcbiAgICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5TmFtZTogcmVwb3J0WzBdLFxyXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzFdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZTogcmVwb3J0WzJdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZVR5cGU6IHJlcG9ydFszXSxcclxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs0XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogbnVsbCxcclxuICAgICAgICAgICAgZnJlcXVlbmN5OiByZXBvcnRbNV0sXHJcbiAgICAgICAgICAgIHNldFJlbWluZGVyOiByZXBvcnRbNl0sXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeVJlbWluZGVyOiByZXBvcnRbN10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIHJlcG9ydENsYXNzOiByZXBvcnRbOV0sXHJcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzEwXSxcclxuICAgICAgICAgICAgbm90ZXM6IHJlcG9ydFsxMV0sXHJcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMTJdLFxyXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzEzXSxcclxuICAgICAgICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiByZXBvcnRbMTRdLFxyXG4gICAgICAgICAgICAvLyBldmlkZW5jZU5vdGVzOiByZXBvcnRbMTRdLFxyXG4gICAgICAgICAgICAvLyBhc3Nlc3NtZW50czogcmVwb3J0WzE1XSxcclxuICAgICAgICAgICAgcmV2aWV3ZXI6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIHJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW46IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIHJldmlld1dpbGxCZUZhaWxlZEFmdGVyOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICBvdmVyc2VlcjogcmVwb3J0WzE4XSxcclxuICAgICAgICAgICAgbm90aWZ5T25GYWlsdXJlOiByZXBvcnRbMTldXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJykgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9IG9ialsnaXNWYWxpZERhdGEnXSAmJiBvYmpbJ2lzVmFsaWRVc2VyJ107XHJcbiAgICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjYXNlICdvbkNvbXBsZXRpb24nOiB7XHJcbiAgICAgICAgaWYoaXNQcm9ncmFtKXtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIHByb2dyYW1UeXBlOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIHByb2dyYW06IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgcHJvZ3JhbUNhdGVnb3J5OiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbNV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzddLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgcGFyZW50UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgZHVlRGF0ZTogcmVwb3J0WzEwXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlXaW5kb3c6IHJlcG9ydFsxMV0sXHJcbiAgICAgICAgICAgIGZhaWxlZEFmdGVyOiByZXBvcnRbMTJdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzEzXSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzE1XSxcclxuICAgICAgICAgICAgbm90ZXM6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzE4XSxcclxuICAgICAgICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiByZXBvcnRbMTldLFxyXG4gICAgICAgICAgICAvLyBldmlkZW5jZU5vdGVzOiByZXBvcnRbMTldLFxyXG4gICAgICAgICAgICAvLyBhc3Nlc3NtZW50czogcmVwb3J0WzIwXSxcclxuICAgICAgICAgICAgcmV2aWV3ZXI6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIHJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW46IHJlcG9ydFsyMV0sXHJcbiAgICAgICAgICAgIHJldmlld1dpbGxCZUZhaWxlZEFmdGVyOiByZXBvcnRbMjJdLFxyXG4gICAgICAgICAgICBvdmVyc2VlcjogcmVwb3J0WzIzXSxcclxuICAgICAgICAgICAgbm90aWZ5T25GYWlsdXJlOiByZXBvcnRbMjRdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJykgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9IG9ialsnaXNWYWxpZERhdGEnXSAgJiYgIU9iamVjdC52YWx1ZXMob2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddKS5pbmNsdWRlcyhmYWxzZSkgJiYgb2JqPy5wYXJlbnRSZXNwb25zaWJpbGl0eT8ubGVuZ3RoICYmIG9ialsnaXNWYWxpZFVzZXInXTtcclxuICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs1XSxcclxuICAgICAgICAgICAgcGFyZW50UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs2XSxcclxuICAgICAgICAgICAgZHVlRGF0ZTogcmVwb3J0WzddLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eVdpbmRvdzogcmVwb3J0WzhdLFxyXG4gICAgICAgICAgICBmYWlsZWRBZnRlcjogcmVwb3J0WzldLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzEwXSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFsxMV0sXHJcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzEyXSxcclxuICAgICAgICAgICAgbm90ZXM6IHJlcG9ydFsxM10sXHJcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMTRdLFxyXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzE1XSxcclxuICAgICAgICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICAvLyBldmlkZW5jZU5vdGVzOiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICAvLyBhc3Nlc3NtZW50czogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgcmV2aWV3ZXI6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIHJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW46IHJlcG9ydFsxOF0sXHJcbiAgICAgICAgICAgIHJldmlld1dpbGxCZUZhaWxlZEFmdGVyOiByZXBvcnRbMTldLFxyXG4gICAgICAgICAgICBvdmVyc2VlcjogcmVwb3J0WzIwXSxcclxuICAgICAgICAgICAgbm90aWZ5T25GYWlsdXJlOiByZXBvcnRbMjFdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJykgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9IG9ialsnaXNWYWxpZERhdGEnXSAmJiBvYmo/LnBhcmVudFJlc3BvbnNpYmlsaXR5Py5sZW5ndGggJiYgb2JqWydpc1ZhbGlkVXNlciddO1xyXG4gICAgICAgICAgcmV0dXJuIG9iajtcclxuICAgICAgICB9XHJcbiAgICAgIH0gXHJcbiAgICAgIGRlZmF1bHQ6IHtcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIGEgc3RyaW5nLCByZW1vdmVzIGFsbCB3aGl0ZXNwYWNlLCBhbmQgcmV0dXJucyB0aGUgc3RyaW5nXHJcbiAgICogQHBhcmFtIHthbnl9IG5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgcmVzcG9uc2liaWxpdHlcclxuICAgKiBAcmV0dXJucyB0aGUgdHJpbW1lZE5hbWUgdmFyaWFibGUuXHJcbiAgICovXHJcbiAgY2hlY2tWYWxpZFJlc3BvbnNpYmlsaXR5TmFtZShuYW1lOiBhbnkpe1xyXG4gICAgY29uc3QgcmUgPSAvJm5ic3A7fDxicj4vZztcclxuICAgIGlmIChuYW1lKSB7XHJcbiAgICAgIHZhciB0cmltbWVkTmFtZSA9IG5hbWUudG9TdHJpbmcoKS5yZXBsYWNlKHJlLCAnJykudHJpbSgpO1xyXG4gICAgICB0cmltbWVkTmFtZSA9IHRyaW1tZWROYW1lLnJlcGxhY2UoLyAgKy9nLCAnICcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRyaW1tZWROYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIHJlc3BvbnNpYmlsaXR5IG5hbWUgaXMgdmFsaWQsIGFuZCB0aGUgYXNzaWduZWUgYW5kIGFzc2lnbm9yIGFyZSBub3QgZW1wdHksIHRoZW4gcmV0dXJuXHJcbiAgICogdHJ1ZS4gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2VcclxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSAtIHRoZSBkYXRhIHRoYXQgaXMgYmVpbmcgcGFzc2VkIGluXHJcbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlLlxyXG4gICAqL1xyXG4gIGlzVmFsaWREYXRhKGRhdGE6IGFueSl7XHJcbiAgICBjb25zdCByZXNwb25zaWJpbGl0eSA9IHRoaXMuY2hlY2tWYWxpZFJlc3BvbnNpYmlsaXR5TmFtZShkYXRhPy5yZXNwb25zaWJpbGl0eU5hbWUpPy5sZW5ndGggPyB0cnVlIDogZmFsc2U7XHJcbiAgICBjb25zdCBhc3NpZ25lZSA9IGRhdGE/LmFzc2lnbmVlPy5sZW5ndGggPyB0cnVlIDogZmFsc2U7XHJcbiAgICBjb25zdCBmcmVxdWVuY3kgPSBkYXRhPy5mcmVxdWVuY3k/Lmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcclxuICAgIGlmKGFzc2lnbmVlICYmIHJlc3BvbnNpYmlsaXR5ICYmIGZyZXF1ZW5jeSAmJiB0aGlzLmlzVmFsaWRVc2VycyhkYXRhKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBhc3NpZ25vciBpcyB0aGUgc2FtZSBhcyB0aGUgb3ZlcnNlZXIgb3IgdGhlIE5vdGlmeU9uRmFpbHVyZSwgb3IgaWYgdGhlIGFzc2lnbm9yIGlzIG5vdCBzZXRcclxuICAgKiBhbmQgdGhlIGRlZmF1bHRPd25lciBpcyB0aGUgc2FtZSBhcyB0aGUgb3ZlcnNlZXIgb3IgdGhlIE5vdGlmeU9uRmFpbHVyZSwgb3IgaWYgdGhlIGFzc2lnbmVlIGlzIHRoZVxyXG4gICAqIHNhbWUgYXMgdGhlIHJldmlld2VyLCBvdmVyc2Vlciwgb3IgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgYXNzaWduZWUgaXMgbm90IHNldCBhbmQgdGhlXHJcbiAgICogZGVmYXVsdE93bmVyIGlzIHRoZSBzYW1lIGFzIHRoZSBvdmVyc2VlciBvciB0aGUgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgcmV2aWV3ZXIgaXMgdGhlIHNhbWUgYXNcclxuICAgKiB0aGUgb3ZlcnNlZXIgb3IgdGhlIE5vdGlmeU9uRmFpbHVyZSwgb3IgaWYgdGhlIGFzc2lnbmVlIGlzIG5vdCBzZXQsIHRoZW4gcmV0dXJuIGZhbHNlLiBPdGhlcndpc2UsXHJcbiAgICogcmV0dXJuIHRydWVcclxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSAtIHRoaXMgaXMgdGhlIGRhdGEgdGhhdCBpcyBwYXNzZWQgaW4gZnJvbSB0aGUgZm9ybS5cclxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gdmFsdWUuXHJcbiAgICovXHJcbiAgaXNWYWxpZFVzZXJzKGRhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKChkYXRhPy5hc3NpZ25vciAmJiAoIChkYXRhPy5hc3NpZ25vciA9PSBkYXRhPy5vdmVyc2VlcikgfHwgKGRhdGE/LmFzc2lnbm9yID09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZSkpKSB8fCBcclxuICAgICAgKCghZGF0YT8uYXNzaWdub3IpICYmICggKHRoaXMuZGVmYXVsdE93bmVyID09IGRhdGE/Lm92ZXJzZWVyKSB8fCAodGhpcy5kZWZhdWx0T3duZXIgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkpIHx8IFxyXG4gICAgICAoZGF0YT8uYXNzaWduZWUgJiYgKChkYXRhPy5hc3NpZ25lZSA9PSBkYXRhPy5yZXZpZXdlcikgfHwgKGRhdGE/LmFzc2lnbmVlID09IGRhdGE/Lm92ZXJzZWVyKSB8fCAoZGF0YT8uYXNzaWduZWUgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkpIHx8IFxyXG4gICAgICAoKCFkYXRhPy5hc3NpZ25lZSkgJiYgKCh0aGlzLmRlZmF1bHRPd25lciA9PSBkYXRhPy5vdmVyc2VlcikgfHwgKHRoaXMuZGVmYXVsdE93bmVyID09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZSkpKSB8fCBcclxuICAgICAgKGRhdGE/LnJldmlld2VyICYmICgoZGF0YT8ucmV2aWV3ZXIgPT0gZGF0YT8ub3ZlcnNlZXIpIHx8IChkYXRhPy5yZXZpZXdlciA9PSBkYXRhPy5ub3RpZnlPbkZhaWx1cmUpKSkgfHwgXHJcbiAgICAgICghZGF0YT8uYXNzaWduZWUpKXtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBpbiBhIGRhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIDQgYm9vbGVhbiBwcm9wZXJ0aWVzLlxyXG4gICAqIFRoZSBib29sZWFuIHByb3BlcnRpZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIHZhbHVlcyBvZiB0aGUgZGF0YSBvYmplY3QuXHJcbiAgICogQHBhcmFtIHthbnl9IGRhdGEgLSBhbnkgPSB7XHJcbiAgICogQHJldHVybnMge1xyXG4gICAqICAgaXNWYWxpZEFzc2lnbmVlOiB0cnVlLFxyXG4gICAqICAgaXNWYWxpZEFzc2lnbm9yOiB0cnVlLFxyXG4gICAqICAgaXNWYWxpZFJldmlld2VyOiB0cnVlLFxyXG4gICAqICAgaXNWYWxpZE92ZXJzZWVyOiB0cnVlXHJcbiAgICogfVxyXG4gICAqL1xyXG4gIHZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKCBkYXRhOiBhbnkpOiBhbnkge1xyXG4gICAgY29uc3QgcHJvZ3JhbSA9IHRoaXMudGVtcGxhdGVJbmZvPy5jYXRlZ29yeUxpc3Q/LmZpbHRlcigocHJvZ3JhbTogYW55KSA9PiBwcm9ncmFtPy5wcm9ncmFtTmFtZSA9PT0gZGF0YT8ucHJvZ3JhbSk7XHJcbiAgICBjb25zdCBzZWxlY3RlZEFzc2lnbmVlID0gdGhpcy50ZW1wbGF0ZUluZm8/LmFzc2lnbmVlc0xpc3Q/LmZpbHRlcigoYXNzaWduZWU6IGFueSkgPT4gYXNzaWduZWU/Lm5hbWVBbmRFbWFpbCA9PT0gZGF0YT8uYXNzaWduZWUpO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRBc3NpZ25vciA9IHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25vcnNMaXN0Py5maWx0ZXIoKGFzc2lnbm9yOiBhbnkpID0+IGFzc2lnbm9yPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/LmFzc2lnbm9yKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkUmV2aWV3ZXIgPSB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0Py5maWx0ZXIoKHJldmlld2VyOiBhbnkpID0+IHJldmlld2VyPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/LnJldmlld2VyKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkT3ZlcnNlZXIgPSB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0Py5maWx0ZXIoKG92ZXJzZWVyOiBhbnkpID0+IG92ZXJzZWVyPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/Lm92ZXJzZWVyKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkTm90aWZ5T25GYWlsdXJlID0gdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdD8uZmlsdGVyKChub3RpZnlPbkZhaWx1cmU6IGFueSkgPT4gbm90aWZ5T25GYWlsdXJlPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZSk7XHJcbiAgICBsZXQgaXNWYWxpZEFzc2lnbmVlID0gdHJ1ZTtcclxuICAgIGxldCBpc1ZhbGlkQXNzaWdub3IgPSB0cnVlO1xyXG4gICAgbGV0IGlzVmFsaWRSZXZpZXdlciA9IHRydWU7XHJcbiAgICBsZXQgaXNWYWxpZE92ZXJzZWVyID0gdHJ1ZTtcclxuICAgIGxldCBpc1ZhbGlkTm90aWZ5T25GYWlsdXJlID0gdHJ1ZTtcclxuICAgIGlmKHByb2dyYW0gJiYgdGhpcy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb24pIHtcclxuICAgICAgaWYocHJvZ3JhbVswXT8uYXNzaWduZWU/Lmxlbmd0aCAmJiBzZWxlY3RlZEFzc2lnbmVlPy5sZW5ndGgpe1xyXG4gICAgICAgIGlzVmFsaWRBc3NpZ25lZSA9IHByb2dyYW1bMF0/LmFzc2lnbmVlPy5pbmNsdWRlcyhzZWxlY3RlZEFzc2lnbmVlWzBdPy5teV9tZW1iZXJfaWQpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHByb2dyYW1bMF0/LnJldmlld2VyPy5sZW5ndGggJiYgc2VsZWN0ZWRSZXZpZXdlcj8ubGVuZ3RoKXtcclxuICAgICAgICBpc1ZhbGlkUmV2aWV3ZXIgPSBwcm9ncmFtWzBdPy5yZXZpZXdlcj8uaW5jbHVkZXMoc2VsZWN0ZWRSZXZpZXdlclswXT8ubXlfbWVtYmVyX2lkKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZihwcm9ncmFtWzBdPy5vdmVyc2Vlcj8ubGVuZ3RoICYmIHNlbGVjdGVkT3ZlcnNlZXI/Lmxlbmd0aCl7XHJcbiAgICAgICAgaXNWYWxpZE92ZXJzZWVyID0gcHJvZ3JhbVswXT8ub3ZlcnNlZXI/LmluY2x1ZGVzKHNlbGVjdGVkT3ZlcnNlZXJbMF0/Lm15X21lbWJlcl9pZCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYocHJvZ3JhbVswXT8ub3ZlcnNlZXI/Lmxlbmd0aCAmJiBzZWxlY3RlZE5vdGlmeU9uRmFpbHVyZT8ubGVuZ3RoKXtcclxuICAgICAgICBpc1ZhbGlkTm90aWZ5T25GYWlsdXJlID0gcHJvZ3JhbVswXT8ub3ZlcnNlZXI/LmluY2x1ZGVzKHNlbGVjdGVkTm90aWZ5T25GYWlsdXJlWzBdPy5teV9tZW1iZXJfaWQpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpc1ZhbGlkQXNzaWduZWU6IGlzVmFsaWRBc3NpZ25lZSxcclxuICAgICAgaXNWYWxpZEFzc2lnbm9yOiBpc1ZhbGlkQXNzaWdub3IsXHJcbiAgICAgIGlzVmFsaWRSZXZpZXdlcjogaXNWYWxpZFJldmlld2VyLFxyXG4gICAgICBpc1ZhbGlkT3ZlcnNlZXI6IGlzVmFsaWRPdmVyc2VlcixcclxuICAgICAgaXNWYWxpZE5vdGlmeU9uRmFpbHVyZTogaXNWYWxpZE5vdGlmeU9uRmFpbHVyZSxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIHR3byBzdHJpbmdzIGFzIGFyZ3VtZW50cywgYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggdGhyZWUgcHJvcGVydGllc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9ncmFtTmFtZSAtIHN0cmluZyAtJmd0OyBOYW1lIG9mIHRoZSBwcm9ncmFtXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGlsZVByb2dyYW1dIC0gc3RyaW5nID0mZ3Q7IHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIHN1Yi1wcm9ncmFtXHJcbiAgICogQHJldHVybnMge1xyXG4gICAqICAgcHJvZ3JhbUlkOiAxLFxyXG4gICAqICAgY2hpbGRQcm9ncmFtSWQ6IDIsXHJcbiAgICogICBjYXRlZ29yeUlkOiAnMSwyJ1xyXG4gICAqIH1cclxuICAgKi9cclxuICBnZXRQcm9ncmFtSWQocHJvZ3JhbU5hbWU6IHN0cmluZywgY2hpbGVQcm9ncmFtPzogc3RyaW5nKTogYW55IHtcclxuICAgIGNvbnN0IHByb2dyYW0gPSB0aGlzLnRlbXBsYXRlSW5mbz8uY2F0ZWdvcnlMaXN0Py5maWx0ZXIoKHByb2dyYW06IGFueSkgPT4gcHJvZ3JhbT8ucHJvZ3JhbU5hbWUgPT09IHByb2dyYW1OYW1lKTtcclxuICAgIGxldCBzdWJQcm9ncmFtO1xyXG4gICAgbGV0IHN1YlByb2dyYW1JZDtcclxuICAgIGxldCBjYXRlZ29yeUlkO1xyXG4gICAgaWYoY2hpbGVQcm9ncmFtPy5sZW5ndGggJiYgcHJvZ3JhbT8ubGVuZ3RoKSB7XHJcbiAgICAgIHN1YlByb2dyYW0gPSBwcm9ncmFtWzBdPy5jaGlsZENhdGVnb3J5Py5maWx0ZXIoKHN1YlByb2dyYW06IGFueSkgPT4gc3ViUHJvZ3JhbT8ubmFtZSA9PT0gY2hpbGVQcm9ncmFtKVxyXG4gICAgICBzdWJQcm9ncmFtSWQgPSBzdWJQcm9ncmFtPy5sZW5ndGggPyBzdWJQcm9ncmFtWzBdPy5pZCA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBpZihzdWJQcm9ncmFtSWQgJiYgcHJvZ3JhbT8ubGVuZ3RoKSB7XHJcbiAgICAgIGNhdGVnb3J5SWQgPSBwcm9ncmFtWzBdPy5wcm9ncmFtSWQ/LnRvU3RyaW5nKCkgKyAnLCcgKyAgc3ViUHJvZ3JhbUlkPy50b1N0cmluZygpO1xyXG4gICAgfSBlbHNlIGlmKHByb2dyYW0/Lmxlbmd0aCkge1xyXG4gICAgICBjYXRlZ29yeUlkID0gcHJvZ3JhbVswXT8ucHJvZ3JhbUlkPy50b1N0cmluZygpXHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBwcm9ncmFtSWQ6IHByb2dyYW0/Lmxlbmd0aCA/IHByb2dyYW1bMF0/LnByb2dyYW1JZCA6IHVuZGVmaW5lZCxcclxuICAgICAgY2hpbGRQcm9ncmFtSWQ6IHN1YlByb2dyYW1JZCxcclxuICAgICAgY2F0ZWdvcnlJZCA6IGNhdGVnb3J5SWQsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBhIHN0cmluZyBhcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyBhIHN0cmluZy5cclxuICAgKiBAcGFyYW0ge2FueX0gaXRlbSAtIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGdyb3VwIHRoYXQgaXMgc2VsZWN0ZWQgZnJvbSB0aGUgZHJvcGRvd24uXHJcbiAgICogaXQgd2lsbCByZXR1cm4gZW1wbG95ZWUgaWQgaW4gdGhpcyBmb3JtICcxMjM0LDIzNDUnLlxyXG4gICAqL1xyXG4gIGdldEVtcGxveWVlSWRGcm9tR3JvdXAoaXRlbTogYW55KXtcclxuICAgIGxldCBlbXBJZDogYW55ID0gW107XHJcbiAgICBsZXQgZW1wbG95ZWVfaWQ6IGFueSA9IFtdO1xyXG4gICAgdGhpcy50ZW1wbGF0ZUluZm8/LmFzc2lnbmVlc0xpc3Q/LmZvckVhY2goKGVuRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChlbkVsZW1lbnQ/Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgZW1wSWQgPSBlbkVsZW1lbnQ/Lm15X21lbWJlcl9pZDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZihlbXBJZD8ubGVuZ3RoKSB7XHJcbiAgICAgIGVtcElkPy5mb3JFYWNoKChpZDogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdC5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICh1c2VyPy5teV9tZW1iZXJfaWQgPT0gaWQpIHtcclxuICAgICAgICAgICAgZW1wbG95ZWVfaWQ/LnB1c2godXNlcj8uZW1wbG95ZWVfaWQpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZW1wbG95ZWVfaWQ/LnRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgaXRlbSBpcyBhIGdyb3VwLCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKiBAcGFyYW0ge2FueX0gaXRlbSAtIGFueSAtIHRoZSBpdGVtIHRoYXQgaXMgYmVpbmcgY2hlY2tlZFxyXG4gICAqL1xyXG4gIGlzR3JvdXBTZWxlY3RlZChpdGVtOiBhbnkpIHtcclxuICAgIGxldCBpc0dyb3VwID0gZmFsc2U7XHJcbiAgICB0aGlzLnRlbXBsYXRlSW5mby5hc3NpZ25lZXNMaXN0LmZvckVhY2goKGVuRWxlbWVudDogYW55KTogYW55ID0+IHtcclxuICAgICAgaWYoZW5FbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtICYmIChpdGVtPy5pbmNsdWRlcygnVXNlcnMpJykgfHwgaXRlbT8uaW5jbHVkZXMoJ1VzZXIpJykpICYmIHR5cGVvZihlbkVsZW1lbnQ/Lm15X21lbWJlcl9pZCkgPT0gJ29iamVjdCcpIHtcclxuICAgICAgICBpc0dyb3VwID0gIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGlzR3JvdXA7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuIiwiPCEtLSA8ZGl2IGNsYXNzPVwiYWRkLW11bHRpcGxlLXJpc2tcIiBbYXR0ci5pZF09XCInc2Nyb2xsUmVmZXJlbmNlJ1wiID5cclxuICAgIDwhLSAtIG1haW4gY29udGFpbmVyIHN0YXJ0cyBoZXJlIC0gLT5cclxuICAgIDxkaXYgY2xhc3M9XCJhZGQtbXVsdGlwbGUtcmlzay1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFkZC1tdWx0aXBsZS1yaXNrLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L3NwcmVhZHNoZWV0LW11bHRpcGxlLWNhdGVnb3J5LnN2Z1wiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8aDQ+WW91IGNhbiBlbnRydXN0IG11bHRpcGxlIHJlc3BvbnNpYmlsaXRpZXMgaW4ganVzdCB0d28gZWFzeSBzdGVwczo8L2g0PlxyXG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bGk+RG93bmxvYWQgdGhlIHRlbXBsYXRlIGFuZCBmaWxsIGluIHRoZSBkZXRhaWxzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VXBsb2FkIHRoZSAueGxzeCBmaWxlIGFuZCB5b3XigJlyZSBnb29kIHRvIGdvITwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZG93bmxvYWRcIiAqbmdJZj1cImRvd25sb2FkU3RhdHVzID09PSAnTk9UX0RPV05MT0FESU5HJ1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZFRlbXBsYXRlKClcIiB0eXBlPVwiYnV0dG9uXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MWI7PC9pPiBEb3dubG9hZCBUZW1wbGF0ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnVsay1idG4tcHJvZ3Jlc3NcIiAqbmdJZj1cImRvd25sb2FkU3RhdHVzID09PSAnRE9XTkxPQURJTkcnXCI+XHJcbiAgICAgICAgICAgICAgICBEb3dubG9hZCBpbiBQcm9ncmVzc1xyXG4gICAgICAgICAgICAgICAgPGFwcC1saW5lLWxvYWRlciBbbG9hZGVySGVpZ2h0XT1cIicyJ1wiPjwvYXBwLWxpbmUtbG9hZGVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvd25sb2FkU3RhdHVzID09PSAnRE9XTkxPQURFRCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidWxrLWJ0bi1wcm9ncmVzc1wiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTFjOzwvaT5Eb3dubG9hZCBDb21wbGV0ZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1bGstYnRuLWFnYWluXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgSXMgdGhlIGZpbGUgbm90IGRvd25sb2FkZWQ/XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZG93bmxvYWRUZW1wbGF0ZSgpXCI+UmV0cnkgRG93bmxvYWQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJpc1dyb25nRmlsZSB8fCBpc1dyb25nRm9ybWF0fHwgaXNGaWxlRW1wdHlcIlxyXG4gICAgICAgICAgICA+e3tlcnJvck1lc3NhZ2V9fTwvcD4gIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiAtLT5cclxuPGFwcC1idWxrLXJlc3BvbnNpYmlsaXR5LXZpZXcgKm5nSWY9XCJzaG93RXhjZWxcIlxyXG4gICAgW3Jlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZF09XCJyZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWRcIlxyXG4gICAgW2J1bGtVcGxvYWRdPVwiYnVsa1VwbG9hZFwiXHJcbiAgICBbZmlsZU5hbWVdPVwiZmlsZU5hbWVcIlxyXG4gICAgW2xvYWRlcl09XCJsb2FkZXJcIlxyXG4gICAgW2RlZmF1bHRPd25lcl09XCJkZWZhdWx0T3duZXJcIlxyXG4gICAgW3RhYlR5cGVdPVwidGFiVHlwZVwiXHJcbiAgICBbYnVsa1VwbG9hZF09XCJidWxrVXBsb2FkXCJcclxuICAgIChzdWJtaXRSZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQpPVwic3VibWl0UmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkKClcIlxyXG4gICAgKHNlbGVjdGVkVGFiKT1cInNlbGVjdGVkVGFiKCRldmVudClcIlxyXG4gICAgKGNhbmNlbCk9XCJyZXNldCgpXCJcclxuICAgIFtyZXNwb25zaWJpbGl0eVR5cGVdPVwiJ211bHRpVGFiJ1wiPlxyXG48L2FwcC1idWxrLXJlc3BvbnNpYmlsaXR5LXZpZXc+XHJcbjxhcHAtbG9hZGVyLWlubGluZSAqbmdJZj1cImxvYWRlclwiPjwvYXBwLWxvYWRlci1pbmxpbmU+XHJcblxyXG48aW5wdXQgdHlwZT1cImZpbGVcIiBbKG5nTW9kZWwpXT1cImZpbGVWYWx1ZVwiIGlkPVwiZmlsZUlucHV0XCIgY2xhc3M9XCJoaWRkZW4taW5wdXRcIiBhY2NlcHQ9XCIueGxzeFwiIChjaGFuZ2UpPVwidXBsb2FkZWRGaWxlKCRldmVudClcIiBtdWx0aXBsZSAvPlxyXG48YXBwLXNtaWxleS1kaWFsb2ctaW5saW5lICpuZ0lmPVwic2hvd1NtaWxleVwiIFttZXNzYWdlXT1cInNtaWxleU1lc3NhZ2VcIiBbYWN0aW9uQnV0dG9uc109XCJhY3Rpb25CdXR0b25zXCIgKGFjdGlvbik9XCJhY3Rpb24oJGV2ZW50KVwiIChjbG9zZVNtaWxleSk9XCJjbG9zZVNtaWxleSgkZXZlbnQpXCI+PC9hcHAtc21pbGV5LWRpYWxvZy1pbmxpbmU+Il19
|
|
1553
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi9hZGQtbXVsdGlwbGUtcmVzcG9uc2liaWxpdHktd2l0aC10YWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxHQUliLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ25DLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7QUFpQjdCLE1BQU0sT0FBTyx5Q0FBeUM7SUE2R3BELFlBQ1UsV0FBMkIsRUFDM0IscUJBQTRDLEVBQzVDLFdBQXdCLEVBQ3hCLGdCQUFzQyxFQUN0QyxRQUF5QjtRQUp6QixnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDM0IsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXNCO1FBQ3RDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBakh6QixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFB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dUJBQUMsY0FBYztnQkFHWixVQUFVO3NCQUFsQixLQUFLO2dCQWtGRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uSW5pdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQvbW9tZW50JztcclxuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcclxuaW1wb3J0IHsgU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vdWkta2l0L3NuYWNrLWJhci9zbmFjay1iYXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFkZFJpc2tTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvYWRkLXJpc2suc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRnJlcXVlbmN5QnVsa1NlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9mcmVxdWVuY3kuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlc3BvbnNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3Jlc3BvbnNpYmlsaXR5LnNlcnZpY2UnO1xyXG5cclxudHlwZSBBT0EgPSBhbnlbXVtdO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQubGVzcycsXHJcbiAgICAnLi4vZm9ybXMubGVzcycsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZE11bHRpcGxlUmVzcG9uc2liaWxpdHlXaXRoVGFiQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAT3V0cHV0KCkgcGlja2VyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcG9wdWxhdGVPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGRpc2Nvbm5lY3RSZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGlzTm90aWZpY2F0aW9uUGVuZGluZyA9IDA7XHJcbiAgQE91dHB1dCgpIGNsb3NlQWRkTXVsdGlwbGVSZXNwb25zaWJpbGl0eSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBxdWVyeVBhcmFtOiBzdHJpbmcgPSAnJztcclxuICByZWNlbnRSZXNwb25zaWJpbGl0eVVybDogYW55ID0ge1xyXG4gICAgYnlSZXNwb25zaWJpbGl0aWVzOiB7IHR5cGU6IFsncmVjZW50X3Jlc3BvbnNpYmlsaXRpZXMnXSwgc3ViVHlwZTogWydDQyddIH0sXHJcbiAgICBieVN0YXR1czogeyB0eXBlOiBbXSwgc3ViVHlwZTogW10gfSxcclxuICAgIGZpbHRlck9iamVjdDoge1xyXG4gICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogW10sXHJcbiAgICAgIGVudHJ1c3RlZEJ5OiBbXSxcclxuICAgICAgZW50cnVzdGVkVG86IFtdLFxyXG4gICAgICByaXNrSWRzOiBbXSxcclxuICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogW10sXHJcbiAgICB9LFxyXG4gICAgdGltZVBlcmlvZERldGFpbHM6IHsgdHlwZTogJycsIHNlbGVjdGVkUGVyaW9kOiAnJywgc2VsZWN0ZWRZZWFyOiAnJyB9LFxyXG4gICAgc3RhdHVzOiAnJyxcclxuICB9O1xyXG5cclxuICBASW5wdXQoJ3VwbG9hZGVkRmlsZScpIHNldCB1cGxvYWRlZEZpbGVEYXRhKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy51cGxvYWRlZEZpbGUoZGF0YSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIG9yZ0RldGFpbHMhOiBhbnk7XHJcblxyXG4gIHVybCA9XHJcbiAgICAncT17XCJieVJlc3BvbnNpYmlsaXRpZXNcIjp7XCJ0eXBlXCI6W1wicmVzcG9uc2liaWxpdGllc19pbl9xdWV1ZVwiXSxcInN1YlR5cGVcIjpbXCJDQ1wiXX0sXCJieVN0YXR1c1wiOntcInR5cGVcIjpbXCJyZXNwb25zaWJpbGl0aWVzX2luX3F1ZXVlXCJdLFwic3ViVHlwZVwiOltdfSxcImZpbHRlck9iamVjdFwiOntcInJlc3BvbnNpYmlsaXR5Q2VudGVyXCI6W10sXCJlbnRydXN0ZWRCeVwiOltdLFwiZW50cnVzdGVkVG9cIjpbXSxcInJpc2tJZHNcIjpbXSxcInJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnlcIjpbXX0sXCJ0aW1lUGVyaW9kRGV0YWlsc1wiOntcInR5cGVcIjpcIlwiLFwic2VsZWN0ZWRQZXJpb2RcIjpcIlwiLFwic2VsZWN0ZWRZZWFyXCI6XCJcIn0sXCJzdGF0dXNcIjpcIlwifSc7XHJcbiAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkOiBhbnkgPSB7XHJcbiAgICBoZWFkZXI6IFtdLFxyXG4gICAgcmVwb3J0czogW10sXHJcbiAgfTtcclxuICB0YWJUeXBlOiAnZnJlcXVlbmN5JyB8ICdvbmdvaW5nJyB8ICdvbkNvbXBsZXRpb24nID0gJ2ZyZXF1ZW5jeSc7XHJcbiAgdGFiSW5kZXg6IGFueSA9IHtcclxuICAgIGZyZXF1ZW5jeTogMCxcclxuICAgIG9uZ29pbmc6IDEsXHJcbiAgICBvbkNvbXBsZXRpb246IDIsXHJcbiAgfTtcclxuXHJcbiAgYnVsa1VwbG9hZDogYW55ID0ge1xyXG4gICAgZnJlcXVlbmN5OiB7XHJcbiAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgIH0sXHJcbiAgICBvbmdvaW5nOiB7XHJcbiAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgIH0sXHJcbiAgICBvbkNvbXBsZXRpb246IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgfSxcclxuICB9O1xyXG5cclxuICB0ZW1wbGF0ZUluZm86IGFueSA9IHtcclxuICAgIGNhdGVnb3J5TGlzdDogW10sXHJcbiAgICByY0xpc3Q6IFtdLFxyXG4gICAgYXNzaWdub3JzTGlzdDogW10sXHJcbiAgICBhc3NpZ25lZXNMaXN0OiBbXSxcclxuICAgIHJldmlld2VyTGlzdDogW10sXHJcbiAgICBwYXJlbnRSZXNwb25zaWJpbGl0eTogW10sXHJcbiAgICBtZW1iZXJJZDogJycsXHJcbiAgfTtcclxuICBpc0xvYWRlciA9IGZhbHNlO1xyXG4gIHNob3dDYXRlZ29yeUxpc3QgPSBmYWxzZTtcclxuICB0ZW1wbGF0ZURvd25sb2FkZWQgPSBmYWxzZTtcclxuICBkb3dubG9hZEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICBsb2FkZXIgPSBmYWxzZTtcclxuICBpc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gIGlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gIGZpbGVOYW1lOiBhbnk7XHJcbiAgZGF0YTogYW55O1xyXG4gIHNob3dFeGNlbCA9IGZhbHNlO1xyXG4gIHVwbG9hZGVkRmlsZXM6IGFueSA9IFtdO1xyXG4gIGZpbGVSZXNwb25zZTogYW55ID0gW107XHJcbiAgZmlsZVZhbHVlOiBhbnk7XHJcbiAgbWVtYmVySWQgPSAwO1xyXG4gIG9yZ2FuaXphdGlvbklkID0gMDtcclxuICBlcnJvck1lc3NhZ2UgPSAnIGludmFsaWQgZmlsZSBlcnJvcic7XHJcbiAgZG93bmxvYWRTdGF0dXM6IHN0cmluZyA9ICdOT1RfRE9XTkxPQURJTkcnO1xyXG4gIGRvd25sb2FkUGVyY2VudCA9IDA7XHJcbiAgZGVmYXVsdE93bmVyID0gJyc7XHJcbiAgc21pbGV5TWVzc2FnZSA9IGBZb3UncmUgQWxsIFNldCEgV2UncmUgcHJvY2Vzc2luZyB5b3VyIHJlcXVlc3QgYW5kIHlvdSB3aWxsIGJlIG5vdGlmaWVkIHZpYSBlbWFpbCB1cG9uIGNvbXBsZXRpb24uYDtcclxuICBhY3Rpb25CdXR0b25zID0gW1xyXG4gICAge1xyXG4gICAgICBidXR0b25UZXh0OiAnRW50cnVzdCBNb3JlIFJlc3BvbnNpYmlsaXRpZXMnLFxyXG4gICAgICBjbGFzczogJ3doaXRlLWJ0bicsXHJcbiAgICAgIGlkOiAnYWRkTW9yZScsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBidXR0b25UZXh0OiB0aGlzLmlzTm90aWZpY2F0aW9uUGVuZGluZ1xyXG4gICAgICAgID8gJ1ZpZXcgUmVzcG9uc2liaWxpdGllcyBJbiBRdWV1ZSdcclxuICAgICAgICA6ICdWaWV3IFJlc3BvbnNpYmlsaXRpZXMnLFxyXG4gICAgICBjbGFzczogJ2JsdWUtYnRuJyxcclxuICAgICAgaWQ6ICd2aWV3JyxcclxuICAgIH0sXHJcbiAgXTtcclxuICBzaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgbWVtYmVyX29ial9pZCA9ICcnO1xyXG4gIHJpc2tDbGFzc0VuYWJsZWQ6IGFueTtcclxuICB1c2VySW5mbyE6IGFueTtcclxuICByZXNwb25zaWJpbGl0eURhdGEhOiBhbnk7XHJcbiAgQElucHV0KCkgZmVhdHVyZWZsYWc6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJpc2tTZXJ2aWNlOiBBZGRSaXNrU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVzcG9uc2liaWxpdHlTZXJ2aWNlOiBSZXNwb25zaWJpbGl0eVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgZnJlcXVlbmN5U2VydmljZTogRnJlcXVlbmN5QnVsa1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBTbmFja0JhclNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHt9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChmYWxzZSk7XHJcblxyXG4gICAgdGhpcy5vcmdhbml6YXRpb25JZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSWQoKTtcclxuICAgIHRoaXMubWVtYmVySWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE1lbWJlcklkKCk7XHJcbiAgICB0aGlzLm1lbWJlcl9vYmpfaWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKCkuX2lkO1xyXG4gICAgdGhpcy51c2VySW5mbyA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlckRldGFpbHMoKS51c2VyO1xyXG4gICAgdGhpcy5kZWZhdWx0T3duZXIgPSB0aGlzLnVzZXJJbmZvXHJcbiAgICAgID8gdGhpcy51c2VySW5mby5uYW1lICsgJyAoJyArIHRoaXMudXNlckluZm8uZW1haWwgKyAnKSdcclxuICAgICAgOiAnJztcclxuICAgIHRoaXMuZ2V0VXNlckRldGFpbHMoKTtcclxuICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uRGV0YWlscygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5yaXNrQ2xhc3NFbmFibGVkID0gcmVzLmVuYWJsZV9yaXNrY2xhc3M7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJCcm93c2VGaWxlKCkge1xyXG4gICAgY29uc3QgZ2V0RmlsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlSW5wdXQnKTtcclxuICAgIGlmIChnZXRGaWxlKSB7XHJcbiAgICAgIGdldEZpbGUuY2xpY2soKTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0VXNlckRldGFpbHMoKSB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJJbmZvKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmlzTm90aWZpY2F0aW9uUGVuZGluZyA9IHJlcy5ub3RpZmljYXRpb25fcGVuZGluZ19mbGFnO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRlZEZpbGUoZXZlbnQ6IGFueSwgdGFiVHlwZT86IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB7XHJcbiAgICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgICByZXBvcnRzOiBbXSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvID0ge1xyXG4gICAgICAgIGNhdGVnb3J5TGlzdDogW10sXHJcbiAgICAgICAgcmNMaXN0OiBbXSxcclxuICAgICAgICBhc3NpZ25vcnNMaXN0OiBbXSxcclxuICAgICAgICBhc3NpZ25lZXNMaXN0OiBbXSxcclxuICAgICAgICByZXZpZXdlckxpc3Q6IFtdLFxyXG4gICAgICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiBbXSxcclxuICAgICAgICBtZW1iZXJJZDogJycsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IFtdO1xyXG4gICAgICBjb25zdCByZWZlcmVuY2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2Nyb2xsUmVmZXJlbmNlJyk7XHJcbiAgICAgIGlmIChyZWZlcmVuY2UpIHtcclxuICAgICAgICByZWZlcmVuY2Uuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZmlsZU5hbWUgPSBldmVudC50YXJnZXQuZmlsZXNbMF0ubmFtZTtcclxuICAgICAgdGhpcy51cGxvYWRlZEZpbGVzLnB1c2goZXZlbnQudGFyZ2V0LmZpbGVzKTtcclxuICAgICAgY29uc3QgdGFyZ2V0OiBEYXRhVHJhbnNmZXIgPSBldmVudC50YXJnZXQgYXMgRGF0YVRyYW5zZmVyO1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGN1cmx5XHJcbiAgICAgIGlmICh0YXJnZXQuZmlsZXMubGVuZ3RoICE9PSAxKVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSBtdWx0aXBsZSBmaWxlcycpO1xyXG4gICAgICBjb25zdCByZWFkZXI6IEZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGJzdHI6IHN0cmluZyA9IGUudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gucmVhZChic3RyLCB7IHR5cGU6ICdiaW5hcnknIH0pO1xyXG4gICAgICAgIGNvbnN0IHdzbmFtZTogc3RyaW5nID0gd2IuU2hlZXROYW1lc1sxXTtcclxuICAgICAgICBjb25zdCBzaGVldDI6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbMl07XHJcbiAgICAgICAgY29uc3Qgc2hlZXQzOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzWzNdO1xyXG4gICAgICAgIGNvbnN0IHdzbmFtZTE6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbNF07XHJcbiAgICAgICAgY29uc3Qgd3M6IFhMU1guV29ya1NoZWV0ID0gd2IuU2hlZXRzW3dzbmFtZV07XHJcbiAgICAgICAgY29uc3Qgc2hlZXRSZXBvcnQyOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1tzaGVldDJdO1xyXG4gICAgICAgIGNvbnN0IHNoZWV0UmVwb3J0MzogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbc2hlZXQzXTtcclxuICAgICAgICBjb25zdCB0ZW1wRGF0YTogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbd3NuYW1lMV07XHJcbiAgICAgICAgY29uc3QgdERhdGEgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24odGVtcERhdGEsIHsgaGVhZGVyOiAxIH0pIGFzIEFPQTtcclxuICAgICAgICBjb25zdCB0ZW1wTGlzdCA9IHREYXRhLmZpbHRlcihcclxuICAgICAgICAgIChkYXRhRWxlbWVudDogYW55KSA9PiBkYXRhRWxlbWVudC5sZW5ndGggPiAwXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldE9yZ2FuaXphdGlvbkRldGFpbHModGVtcExpc3QpO1xyXG4gICAgICAgIHdiLlNoZWV0TmFtZXMuZm9yRWFjaCgoc2hlZXQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgc3dpdGNoIChzaGVldD8udG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjYXNlICdmcmVxdWVuY3kgcmVzcG9uc2liaWxpdGllcyc6XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhRm9yRGlmZmVyZW50VGFicyh3cywgc2hlZXQpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdvbmdvaW5nIHJlc3BvbnNpYmlsaXRpZXMnOlxyXG4gICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUZvckRpZmZlcmVudFRhYnMoc2hlZXRSZXBvcnQyLCBzaGVldCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ29uIGNvbXBsZXRpb24gcmVzcG9uc2liaWxpdGllcyc6XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhRm9yRGlmZmVyZW50VGFicyhzaGVldFJlcG9ydDMsIHNoZWV0KTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0YXJnZXQuZmlsZXNbMF0pO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIGEgd29ya3NoZWV0IGFuZCBhIHNoZWV0IG5hbWUsIGFuZCB0aGVuIGl0IHNldHMgdGhlIGRhdGEgZm9yIGRpZmZlcmVudCB0YWJzLlxyXG4gICAqIEBwYXJhbSB3cyAtIFhMU1guV29ya1NoZWV0LCBzaGVldDogc3RyaW5nXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNoZWV0IC0gc3RyaW5nIC0gdGhlIG5hbWUgb2YgdGhlIHNoZWV0IGluIHRoZSBleGNlbCBmaWxlXHJcbiAgICogQHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBcInJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZFwiIHdoaWNoIGlzIGFuIG9iamVjdC5cclxuICAgKi9cclxuICBzZXREYXRhRm9yRGlmZmVyZW50VGFicyh3czogWExTWC5Xb3JrU2hlZXQsIHNoZWV0OiBzdHJpbmcpIHtcclxuICAgIGxldCByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ6IGFueSA9IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgcmVwb3J0czogW10sXHJcbiAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgfTtcclxuICAgIGxldCBzaGVldFZhbHVlID0gWExTWC51dGlscy5zaGVldF90b19qc29uKHdzLCB7XHJcbiAgICAgIGhlYWRlcjogMSxcclxuICAgICAgcmF3OiBmYWxzZSxcclxuICAgIH0pIGFzIEFPQTtcclxuICAgIGxldCBkYXRhID0gc2hlZXRWYWx1ZS5maWx0ZXIoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGxldCBpc1VuZGVmaW5lZCA9ICcnO1xyXG4gICAgICByZXMuZm9yRWFjaCgoZWw6IGFueSkgPT4ge1xyXG4gICAgICAgIGlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQgKyBlbDtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChzaGVldFZhbHVlWzJdICYmIHNoZWV0VmFsdWVbMl1bMV0gPT09ICdQcm9ncmFtJykge1xyXG4gICAgICAgIHJldHVybiAhKHJlcz8ubGVuZ3RoID09PSA5ICYmIHJlc1s4XSA9PT0gJycgJiYgIWlzVW5kZWZpbmVkLmxlbmd0aCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuICEocmVzPy5sZW5ndGggPT09IDYgJiYgcmVzWzVdID09PSAnJyAmJiAhaXNVbmRlZmluZWQubGVuZ3RoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZmlsZU5hbWUuc3Vic3RyKC01KSAhPT0gJy54bHN4Jykge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgJ1RoZSBpbmNvcnJlY3QgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZC4gUGxlYXNlIHVwbG9hZCB0aGUgdGVtcGxhdGUgd2hpY2ggeW91IGRvd25sb2FkZWQgZnJvbSBoZXJlLicgK1xyXG4gICAgICAgICcgUkVUUlknO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXIgPSBjbG9uZURlZXAoZGF0YVsyXSk7XHJcbiAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuc3ViSGVhZGluZyA9IGNsb25lRGVlcChkYXRhWzNdKTtcclxuXHJcbiAgICBkYXRhID0gZGF0YS5zbGljZSg1KTtcclxuICAgIGlmICh0aGlzLm1lbWJlcl9vYmpfaWQgIT0gdGhpcy50ZW1wbGF0ZUluZm8ubWVtYmVySWQpIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIHdoaWNoIHlvdSBkb3dubG9hZGVkIGZyb20gaGVyZS4nICtcclxuICAgICAgICAnIFJFVFJZJztcclxuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXNwb25zaWJpbGl0eURhdGEgPSBkYXRhLmZpbHRlcihcclxuICAgICAgKGRhdGFFbGVtZW50OiBhbnkpID0+IGRhdGFFbGVtZW50Lmxlbmd0aCA+IDBcclxuICAgICk7XHJcbiAgICByZXNwb25zaWJpbGl0eURhdGEuZm9yRWFjaCgocmVwb3J0OiBhbnkpID0+IHtcclxuICAgICAgbGV0IHZhbGlkRGF0ZTtcclxuICAgICAgY29uc3QgdmFsaWRVc2VyID0gdGhpcy5yZXR1cm5JZHMocmVwb3J0WzJdLCAnZW50cnVzdGVkX3RvJylcclxuICAgICAgICA/IHRydWVcclxuICAgICAgICA6IGZhbHNlO1xyXG4gICAgICBpZiAocmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlclsxXSA9PT0gJ1Byb2dyYW0nKSB7XHJcbiAgICAgICAgdmFsaWREYXRlID0gdGhpcy5jb21wYXJlV2l0aEN1cnJlbnREYXRlKHJlcG9ydFs0XSwgcmVwb3J0WzVdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YWxpZERhdGUgPSB0aGlzLmNvbXBhcmVXaXRoQ3VycmVudERhdGUocmVwb3J0WzVdLCByZXBvcnRbNl0pO1xyXG4gICAgICB9XHJcbiAgICAgIC8qIFB1c2hpbmcgdGhlIHJlcG9ydCBkZXRhaWxzIGludG8gdGhlIGJ1bGtVcGxvYWQgb2JqZWN0IGFzIHBlciB0YWIgdGFicyAqL1xyXG4gICAgICBpZiAoc2hlZXQ/LnRvTG93ZXJDYXNlKCkgPT09ICdmcmVxdWVuY3kgcmVzcG9uc2liaWxpdGllcycpIHtcclxuICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQucmVwb3J0cy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5zZXRSZXBvcnREZXRhaWxzKFxyXG4gICAgICAgICAgICByZXBvcnQsXHJcbiAgICAgICAgICAgICdmcmVxdWVuY3knLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuaGVhZGVyWzFdID09PSAnUHJvZ3JhbScgPyB0cnVlIDogZmFsc2VcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5mcmVxdWVuY3kuaGVhZGVyID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5oZWFkZXI7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLmZyZXF1ZW5jeS5zdWJIZWFkaW5nID1cclxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uc3ViSGVhZGluZztcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQuZnJlcXVlbmN5LnJlcG9ydHMgPSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnJlcG9ydHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNoZWV0Py50b0xvd2VyQ2FzZSgpID09PSAnb25nb2luZyByZXNwb25zaWJpbGl0aWVzJykge1xyXG4gICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5yZXBvcnRzLnB1c2goXHJcbiAgICAgICAgICB0aGlzLnNldFJlcG9ydERldGFpbHMoXHJcbiAgICAgICAgICAgIHJlcG9ydCxcclxuICAgICAgICAgICAgJ29uZ29pbmcnLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuaGVhZGVyWzFdID09PSAnUHJvZ3JhbScgPyB0cnVlIDogZmFsc2VcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5vbmdvaW5nLmhlYWRlciA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5vbmdvaW5nLnN1YkhlYWRpbmcgPVxyXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5zdWJIZWFkaW5nO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5vbmdvaW5nLnJlcG9ydHMgPSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnJlcG9ydHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNoZWV0Py50b0xvd2VyQ2FzZSgpID09PSAnb24gY29tcGxldGlvbiByZXNwb25zaWJpbGl0aWVzJykge1xyXG4gICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5yZXBvcnRzLnB1c2goXHJcbiAgICAgICAgICB0aGlzLnNldFJlcG9ydERldGFpbHMoXHJcbiAgICAgICAgICAgIHJlcG9ydCxcclxuICAgICAgICAgICAgJ29uQ29tcGxldGlvbicsXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXJbMV0gPT09ICdQcm9ncmFtJyA/IHRydWUgOiBmYWxzZVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uQ29tcGxldGlvbi5oZWFkZXIgPSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LmhlYWRlcjtcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQub25Db21wbGV0aW9uLnN1YkhlYWRpbmcgPVxyXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5zdWJIZWFkaW5nO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5vbkNvbXBsZXRpb24ucmVwb3J0cyA9XHJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnJlcG9ydHM7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGlzRW1wdHkgPSB0aGlzLmNoZWNrRW1wdHlGaWxlKGRhdGEpO1xyXG4gICAgLyogQ2hlY2tpbmcgaWYgdGhlIGZpbGUgaXMgZW1wdHksIGlmIGl0IGlzIGVtcHR5IGl0IHdpbGwgcmV0dXJuIGFuIGVycm9yIG1lc3NhZ2UuIElmIGl0IGlzIG5vdFxyXG4gICAgZW1wdHkgaXQgd2lsbCBjaGVjayBpZiB0aGUgZmlsZSBpcyB0aGUgY29ycmVjdCBmaWxlLCBpZiBpdCBpcyBub3QgdGhlIGNvcnJlY3QgZmlsZSBpdCB3aWxsXHJcbiAgICByZXR1cm4gYW4gZXJyb3IgbWVzc2FnZS4gSWYgaXQgaXMgdGhlIGNvcnJlY3QgZmlsZSBpdCB3aWxsIGNhbGwgdGhlIGZpbGVVcGxvYWQoKSBmdW5jdGlvbi4gKi9cclxuICAgIGlmIChpc0VtcHR5KSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAnWW91IGhhdmUgdXBsb2FkZWQgYSBibGFuayB0ZW1wbGF0ZS4gUGxlYXNlIGFkZCBkZXRhaWxzIGZvciBhbGwgbWFuZGF0b3J5IGZpZWxkcy4gUkVUUlknO1xyXG4gICAgICB0aGlzLmlzRmlsZUVtcHR5ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k/LmhlYWRlclswXSAhPT0gJ1Jlc3BvbnNpYmlsaXR5IE5hbWUqJyAmJlxyXG4gICAgICB0aGlzLmJ1bGtVcGxvYWQ/Lm9uZ29pbmc/LmhlYWRlclswXSAhPT0gJ1Jlc3BvbnNpYmlsaXR5IE5hbWUqJyAmJlxyXG4gICAgICB0aGlzLmJ1bGtVcGxvYWQ/Lm9uQ29tcGxldGlvbj8uaGVhZGVyWzBdICE9PSAnUmVzcG9uc2liaWxpdHkgTmFtZSonXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIHdoaWNoIHlvdSBkb3dubG9hZGVkIGZyb20gaGVyZS4nICtcclxuICAgICAgICAnIFJFVFJZJztcclxuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZmlsZVVwbG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93RXhjZWwgPSB0cnVlO1xyXG4gICAgdGhpcy5maWxlVmFsdWUgPSAnJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBidWxrVXBsb2FkIG9iamVjdCBoYXMgYSBmcmVxdWVuY3kgb2JqZWN0IHdpdGggYSByZXBvcnRzIGFycmF5LCBzZXQgdGhlXHJcbiAgICogcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHRvIHRoZSBmcmVxdWVuY3kgb2JqZWN0IGFuZCBzZXQgdGhlIHRhYlR5cGUgdG8gZnJlcXVlbmN5LiBJZiBub3QsIGNoZWNrXHJcbiAgICogaWYgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0IGhhcyBhbiBvbmdvaW5nIG9iamVjdCB3aXRoIGEgcmVwb3J0cyBhcnJheSwgc2V0IHRoZVxyXG4gICAqIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB0byB0aGUgb25nb2luZyBvYmplY3QgYW5kIHNldCB0aGUgdGFiVHlwZSB0byBvbmdvaW5nLiBJZiBub3QsIGNoZWNrIGlmXHJcbiAgICogdGhlIGJ1bGtVcGxvYWQgb2JqZWN0IGhhcyBhbiBvbkNvbXBsZXRpb24gb2JqZWN0IHdpdGggYSByZXBvcnRzIGFycmF5LCBzZXQgdGhlXHJcbiAgICogcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHRvIHRoZSBvbkNvbXBsZXRpb24gb2JqZWN0IGFuZCBzZXQgdGhlIHRhYlR5cGUgdG8gb25Db21wbGV0aW9uLiBJZiBub3QsXHJcbiAgICogcmV0dXJuIHRydWUuXHJcbiAgICogPC9jb2RlPlxyXG4gICAqIEBwYXJhbSB7YW55fSBkYXRhIC0gYW55ID0ge1xyXG4gICAqIEByZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZS5cclxuICAgKi9cclxuICBjaGVja0VtcHR5RmlsZShkYXRhPzogYW55KSB7XHJcbiAgICBsZXQgaXNFbXB0eSA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuYnVsa1VwbG9hZD8uZnJlcXVlbmN5Py5yZXBvcnRzPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeTtcclxuICAgICAgdGhpcy50YWJUeXBlID0gJ2ZyZXF1ZW5jeSc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZz8ucmVwb3J0cz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbmdvaW5nO1xyXG4gICAgICB0aGlzLnRhYlR5cGUgPSAnb25nb2luZyc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uPy5yZXBvcnRzPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/Lm9uQ29tcGxldGlvbjtcclxuICAgICAgdGhpcy50YWJUeXBlID0gJ29uQ29tcGxldGlvbic7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpc0VtcHR5ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBpc0VtcHR5O1xyXG4gIH1cclxuXHJcbiAgY29tcGFyZVdpdGhDdXJyZW50RGF0ZShkYXk6IGFueSwgbW9udGg6IGFueSkge1xyXG4gICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtcclxuICAgICAgeyB2YWx1ZTogMSwgbW9udGg6ICdKYW4nIH0sXHJcbiAgICAgIHsgdmFsdWU6IDIsIG1vbnRoOiAnRmViJyB9LFxyXG4gICAgICB7IHZhbHVlOiAzLCBtb250aDogJ01hcicgfSxcclxuICAgICAgeyB2YWx1ZTogNCwgbW9udGg6ICdBcHInIH0sXHJcbiAgICAgIHsgdmFsdWU6IDUsIG1vbnRoOiAnTWF5JyB9LFxyXG4gICAgICB7IHZhbHVlOiA2LCBtb250aDogJ0p1bicgfSxcclxuICAgICAgeyB2YWx1ZTogNywgbW9udGg6ICdKdWwnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDgsIG1vbnRoOiAnQXVnJyB9LFxyXG4gICAgICB7IHZhbHVlOiA5LCBtb250aDogJ1NlcCcgfSxcclxuICAgICAgeyB2YWx1ZTogMTAsIG1vbnRoOiAnT2N0JyB9LFxyXG4gICAgICB7IHZhbHVlOiAxMSwgbW9udGg6ICdOb3YnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDEyLCBtb250aDogJ0RlYycgfSxcclxuICAgIF07XHJcblxyXG4gICAgaWYgKCEoZGF5IHx8IG1vbnRoKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoIShkYXkgJiYgbW9udGgpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IG1vbnRoQW5kWWVhciA9IG1vbnRoLnNwbGl0KFwiJ1wiKTtcclxuXHJcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IG1vbWVudChcclxuICAgICAgICBkYXkgKyAnLScgKyBtb250aEFuZFllYXJbMF0gKyAnLScgKyAyMCArIG1vbnRoQW5kWWVhclsxXSArICcgMDA6MDA6MDAnLFxyXG4gICAgICAgICdERC1NTU1NLVlZWVkgSEg6bW06c3MnXHJcbiAgICAgICkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJyk7XHJcbiAgICAgIGlmIChzdGFydERhdGUgPT0gJ0ludmFsaWQgZGF0ZScpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge30sIDUpO1xyXG4gICAgICBjb25zdCBkYXRlX3ZhbHVlID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICAgIGRhdGVfdmFsdWUuc2V0TW9udGgoXHJcbiAgICAgICAgdHlwZW9mIG1vbnRoICE9PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgPyBtb250aE5hbWVzLmZpbHRlcigoeCkgPT4geC5tb250aCA9PT0gbW9udGg/LnN1YnN0cmluZygwLCAzKSlbMF1cclxuICAgICAgICAgICAgICA/LnZhbHVlIC0gMVxyXG4gICAgICAgICAgOiBtb250aFxyXG4gICAgICApO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldEZ1bGxZZWFyKE51bWJlcigyMCArIG1vbnRoLnNwbGl0KFwiJ1wiKVsxXSkpO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldERhdGUoTnVtYmVyKGRheSkpO1xyXG4gICAgICAvLyBjb25zdCByZXBvcnREYXRlID0gbmV3IERhdGUoZGF5ICsgbW9udGguc3BsaXQoXCInXCIpKTtcclxuICAgICAgLy8gY29uc29sZS5sb2coKGN1cnJlbnREYXRlLnRvSlNPTigpLnNwbGl0KCdUJylbMF0pK1wiJiZcIisoZGF0ZV92YWx1ZS50b0pTT04oKS5zcGxpdCgnVCcpWzBdKSlcclxuICAgICAgLy8gZGVidWdnZXJcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGN1cnJlbnREYXRlLnRvSlNPTigpLnNwbGl0KCdUJylbMF0gIT1cclxuICAgICAgICAgIGRhdGVfdmFsdWUudG9KU09OKCkuc3BsaXQoJ1QnKVswXSAmJlxyXG4gICAgICAgIGN1cnJlbnREYXRlID4gZGF0ZV92YWx1ZVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgaXNQYXN0RGF0ZShkYXk6IGFueSwgbW9udGg6IGFueSkge1xyXG4gICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXHJcbiAgICAgIHsgdmFsdWU6IDEsIG1vbnRoOiAnSmFuJyB9LFxyXG4gICAgICB7IHZhbHVlOiAyLCBtb250aDogJ0ZlYicgfSxcclxuICAgICAgeyB2YWx1ZTogMywgbW9udGg6ICdNYXInIH0sXHJcbiAgICAgIHsgdmFsdWU6IDQsIG1vbnRoOiAnQXByJyB9LFxyXG4gICAgICB7IHZhbHVlOiA1LCBtb250aDogJ01heScgfSxcclxuICAgICAgeyB2YWx1ZTogNiwgbW9udGg6ICdKdW4nIH0sXHJcbiAgICAgIHsgdmFsdWU6IDcsIG1vbnRoOiAnSnVsJyB9LFxyXG4gICAgICB7IHZhbHVlOiA4LCBtb250aDogJ0F1ZycgfSxcclxuICAgICAgeyB2YWx1ZTogOSwgbW9udGg6ICdTZXAnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDEwLCBtb250aDogJ09jdCcgfSxcclxuICAgICAgeyB2YWx1ZTogMTEsIG1vbnRoOiAnTm92JyB9LFxyXG4gICAgICB7IHZhbHVlOiAxMiwgbW9udGg6ICdEZWMnIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGlmICghKGRheSB8fCBtb250aCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICghKGRheSAmJiBtb250aCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gY29uc3QgcmVwb3J0RGF0ZSA9IG5ldyBEYXRlKGRheSArIG1vbnRoLnNwbGl0KFwiJ1wiKSk7XHJcbiAgICAgIGNvbnN0IGRhdGVfdmFsdWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldE1vbnRoKFxyXG4gICAgICAgIHR5cGVvZiBtb250aCAhPT0gJ251bWJlcidcclxuICAgICAgICAgID8gbW9udGhOYW1lcy5maWx0ZXIoKHgpID0+IHgubW9udGggPT09IG1vbnRoPy5zdWJzdHJpbmcoMCwgMykpWzBdXHJcbiAgICAgICAgICAgICAgPy52YWx1ZSAtIDFcclxuICAgICAgICAgIDogbW9udGhcclxuICAgICAgKTtcclxuICAgICAgZGF0ZV92YWx1ZS5zZXRGdWxsWWVhcihOdW1iZXIoMjAgKyBtb250aC5zcGxpdChcIidcIilbMV0pKTtcclxuICAgICAgZGF0ZV92YWx1ZS5zZXREYXRlKE51bWJlcihkYXkpKTtcclxuICAgICAgaWYgKGN1cnJlbnREYXRlID4gZGF0ZV92YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRUZW1wbGF0ZSgpIHtcclxuICAgIHRoaXMuZG93bmxvYWRTdGF0dXMgPSAnRE9XTkxPQURJTkcnO1xyXG4gICAgdGhpcy5kb3dubG9hZFBlcmNlbnQgPSAwO1xyXG4gICAgY29uc3QgZG93bmxvYWREYXRlID0gbmV3IERhdGUoKS50b0RhdGVTdHJpbmcoKS5zcGxpdCgnICcpO1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSBgRW50cnVzdCBSZXNwb25zaWJpbGl0aWVzLSR7ZG93bmxvYWREYXRlWzJdfS0ke2Rvd25sb2FkRGF0ZVsxXX0tJHtkb3dubG9hZERhdGVbM119Lnhsc3hgO1xyXG5cclxuICAgIHRoaXMucmlza1NlcnZpY2UuZG93bmxvYWRSZXNwb25zaWJpbGl0eVRlbXBsYXRlKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEubG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmRvd25sb2FkUGVyY2VudCA9IDEwMCAqIChkYXRhLmxvYWRlZCAvIGRhdGEudG90YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGF0YS5ib2R5KSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9IHRoaXMucmlza1NlcnZpY2UuZG93bkxvYWRGaWxlKFxyXG4gICAgICAgICAgICAgIGRhdGEuYm9keSxcclxuICAgICAgICAgICAgICAnYXBwbGljYXRpb24veGxzeCcsXHJcbiAgICAgICAgICAgICAgZmlsZU5hbWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0sIDE1MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9ICdET1dOTE9BREVEJztcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdFJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCgpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgZnJlcXVlbmN5VHlwZUFycmF5ID0gWycxJywgJzInLCAnMycsICc0JywgJzcnLCAnMCcsICc2JywgJzknXTtcclxuICAgIGNvbnN0IGRlZmF1bHRXaW5kb3cgPSBbMCwgMiwgNywgMzAsIDcsIDE1LCAzLCAzMF07XHJcbiAgICBjb25zdCBkZWZhdWx0RmFpbGVkRGF5ID0gWzEsIDIsIDUsIDUsIDUsIDUsIDUsIDVdO1xyXG4gICAgLy8gdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3lcclxuICAgIGxldCByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeT8ucmVwb3J0cz8uY29uY2F0KFxyXG4gICAgICB0aGlzLmJ1bGtVcGxvYWQ/Lm9uZ29pbmc/LnJlcG9ydHMsXHJcbiAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uPy5yZXBvcnRzXHJcbiAgICApO1xyXG4gICAgLy8gdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQucmVwb3J0cy5mb3JFYWNoKChyZXBvcnQ6IGFueSkgPT4ge1xyXG4gICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmZvckVhY2goKHJlcG9ydDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXBvcnQuaXNWYWxpZCkge1xyXG4gICAgICAgIGlmIChyZXBvcnQ/LnJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnkgPT09IG51bGwpIHtcclxuICAgICAgICAgIHJlcG9ydC5yZXNwb25zaWJpbGl0eUNhdGVnb3J5ID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJjRGV0YWlsczogYW55ID0gdGhpcy5yZXR1cm5JZHMoXHJcbiAgICAgICAgICByZXBvcnQ/LnJlc3BvbnNpYmlsaXR5Q2VudGVyLFxyXG4gICAgICAgICAgJ3JjX2lkJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcmV2aWV3ZXJEZXRhaWxzOiBhbnkgPSB0aGlzLnJldHVybklkcyhcclxuICAgICAgICAgIHJlcG9ydD8ucmV2aWV3ZXIsXHJcbiAgICAgICAgICAncmV2aWV3ZXInXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBhc3NpZ25vckRldGFpbHM6IGFueSA9IHJlcG9ydD8uYXNzaWdub3JcclxuICAgICAgICAgID8gdGhpcy5yZXR1cm5JZHMocmVwb3J0Py5hc3NpZ25vciwgJ2Fzc2lnbm9yJylcclxuICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgLy8gY29uc3QgY2NEZXRhaWxzOiBhbnkgPSB0aGlzLnJldHVybklkcyhyZXBvcnQuYWx3YXlzTm90aWZ5LCAnY2MnKTtcclxuICAgICAgICBjb25zdCBjY0RldGFpbHM6IGFueSA9IHRoaXMucmV0dXJuSWRzKHJlcG9ydD8ub3ZlcnNlZXIsICdjYycpO1xyXG4gICAgICAgIGNvbnN0IGNjRmFpbHVyZURldGFpbHM6IGFueSA9IHRoaXMucmV0dXJuSWRzKFxyXG4gICAgICAgICAgcmVwb3J0Lm5vdGlmeU9uRmFpbHVyZSxcclxuICAgICAgICAgICdjY0ZhaWx1cmUnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG1vbWVudCgpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xyXG5cclxuICAgICAgICAvLyBjb25zdCBjYXRlZ29yeU5hbWUgPSAocmVwb3J0LnJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnkuaW5jbHVkZXMoJ1tXSVRISU5dJykpID8gcmVwb3J0LnJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnkuc3BsaXQoJyBbJylbMF0gOiByZXBvcnQucmVzcG9uc2liaWxpdHlDYXRlZ29yeVxyXG4gICAgICAgIGxldCBvbmdvaW5nUmVtaW5kZXJUeXBlOiBhbnkgPSB7IFdlZWtseTogMSwgTW9udGhseTogMiwgUXVhcnRlcmx5OiAzIH07XHJcbiAgICAgICAgY29uc3Qgb25nb2luZ1ZhbHVlcyA9IHtcclxuICAgICAgICAgIHNldFJlbWluZGVyOiByZXBvcnQ/LnNldFJlbWluZGVyLFxyXG4gICAgICAgICAgZnJlcXVlbmN5UmVtaW5kZXI6IG9uZ29pbmdSZW1pbmRlclR5cGVbcmVwb3J0Py5mcmVxdWVuY3lSZW1pbmRlcl0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBmcmVxdWVuY3lWYWx1ZSA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5zaG9ydEhhbmRfZnJlcUNhbChcclxuICAgICAgICAgIHJlcG9ydD8uZnJlcXVlbmN5LFxyXG4gICAgICAgICAgcmVwb3J0Py5kYXksXHJcbiAgICAgICAgICByZXBvcnQ/Lm1vbnRoLFxyXG4gICAgICAgICAgJycsXHJcbiAgICAgICAgICByZXBvcnQ/LmR1ZURhdGUsXHJcbiAgICAgICAgICBvbmdvaW5nVmFsdWVzXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjb25zdCBmcmVxdWVuY3lWYWx1ZSA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5zaG9ydEhhbmRfZnJlcUNhbChyZXBvcnQ/LmZyZXF1ZW5jeSwgcmVwb3J0Py5kYXksIHJlcG9ydD8ubW9udGgsICcnKTtcclxuICAgICAgICBjb25zdCBkYXRlQW5kTW9udGggPSByZXBvcnQ/Lm1vbnRoPy5zcGxpdChcIidcIik7XHJcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gZGF0ZUFuZE1vbnRoXHJcbiAgICAgICAgICA/IG1vbWVudChcclxuICAgICAgICAgICAgICByZXBvcnQ/LmRheSArXHJcbiAgICAgICAgICAgICAgICAnLScgK1xyXG4gICAgICAgICAgICAgICAgZGF0ZUFuZE1vbnRoWzBdICtcclxuICAgICAgICAgICAgICAgICctJyArXHJcbiAgICAgICAgICAgICAgICAyMCArXHJcbiAgICAgICAgICAgICAgICBkYXRlQW5kTW9udGhbMV0gK1xyXG4gICAgICAgICAgICAgICAgJyAwMDowMDowMCcsXHJcbiAgICAgICAgICAgICAgJ0RELU1NTU0tWVlZWSBISDptbTpzcydcclxuICAgICAgICAgICAgKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKVxyXG4gICAgICAgICAgOiAnJztcclxuXHJcbiAgICAgICAgbGV0IGNvbXBsZXRlRGF5cztcclxuICAgICAgICBsZXQgbm90Q29tcGxldGVEYXlzO1xyXG4gICAgICAgIGNvbnN0IGZyZXF1ZW5jeVR5cGUgPSBmcmVxdWVuY3lWYWx1ZT8uc3BsaXQoJ34nKVswXTtcclxuICAgICAgICBpZiAocmVwb3J0LnJlc3BvbnNpYmlsaXR5V2luZG93ICYmIHJlcG9ydC5yZXNwb25zaWJpbGl0eVdpbmRvdyAhPT0gJycpIHtcclxuICAgICAgICAgIGNvbXBsZXRlRGF5cyA9IHJlcG9ydD8ucmVzcG9uc2liaWxpdHlXaW5kb3c7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmcmVxdWVuY3lUeXBlQXJyYXk/LmluY2x1ZGVzKGZyZXF1ZW5jeVR5cGUpKSB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleE9mQXJyYXkgPSBmcmVxdWVuY3lUeXBlQXJyYXk/LmluZGV4T2YoZnJlcXVlbmN5VHlwZSk7XHJcbiAgICAgICAgICBjb21wbGV0ZURheXMgPSBkZWZhdWx0V2luZG93W2luZGV4T2ZBcnJheV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXBvcnQ/LmZhaWxlZEFmdGVyICYmIHJlcG9ydD8uZmFpbGVkQWZ0ZXIgIT09ICcnKSB7XHJcbiAgICAgICAgICBub3RDb21wbGV0ZURheXMgPSByZXBvcnQ/LmZhaWxlZEFmdGVyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5VHlwZUFycmF5LmluY2x1ZGVzKGZyZXF1ZW5jeVR5cGUpKSB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleE9mQXJyYXkgPSBmcmVxdWVuY3lUeXBlQXJyYXk/LmluZGV4T2YoZnJlcXVlbmN5VHlwZSk7XHJcbiAgICAgICAgICBub3RDb21wbGV0ZURheXMgPSBkZWZhdWx0RmFpbGVkRGF5W2luZGV4T2ZBcnJheV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgICAgIHVzZXJJZDogdGhpcy50ZW1wbGF0ZUluZm8/Lm1lbWJlcklkLFxyXG4gICAgICAgICAgb3JnYW5pc2F0aW9uX2lkOiB0aGlzLm9yZ2FuaXphdGlvbklkLFxyXG4gICAgICAgICAgbWVtYmVyX2lkOiBhc3NpZ25vckRldGFpbHNcclxuICAgICAgICAgICAgPyBhc3NpZ25vckRldGFpbHM/Lm1lbWJlcklkXHJcbiAgICAgICAgICAgIDogdGhpcy5tZW1iZXJJZCxcclxuICAgICAgICAgIG1lbWJlcl9uYW1lOiBhc3NpZ25vckRldGFpbHNcclxuICAgICAgICAgICAgPyByZXBvcnQ/LmFzc2lnbm9yXHJcbiAgICAgICAgICAgICAgPyByZXBvcnQ/LmFzc2lnbm9yLnNwbGl0KCcgKCcpWzBdXHJcbiAgICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgICAgICA6IHRoaXMuZGVmYXVsdE93bmVyXHJcbiAgICAgICAgICAgID8gdGhpcy5kZWZhdWx0T3duZXI/LnNwbGl0KCcgKCcpWzBdXHJcbiAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICBtZW1iZXJfZW1haWw6IGFzc2lnbm9yRGV0YWlsc1xyXG4gICAgICAgICAgICA/IHJlcG9ydD8uYXNzaWdub3JcclxuICAgICAgICAgICAgICA/IHJlcG9ydD8uYXNzaWdub3I/LnNwbGl0KCcgKCcpWzFdPy5yZXBsYWNlKCcpJywgJycpXHJcbiAgICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgICAgICA6IHRoaXMuZGVmYXVsdE93bmVyXHJcbiAgICAgICAgICAgID8gdGhpcy5kZWZhdWx0T3duZXI/LnNwbGl0KCcgKCcpWzFdLnJlcGxhY2UoJyknLCAnJylcclxuICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICAgIGNyZWF0ZWRfYnk6IGFzc2lnbm9yRGV0YWlscyA/IHRoaXMubWVtYmVySWQgOiAwLFxyXG4gICAgICAgICAgcmVwb3J0X25hbWU6IHJlcG9ydD8ucmVzcG9uc2liaWxpdHlOYW1lID8/ICcnLFxyXG4gICAgICAgICAgZW50cnVzdGVkX3RvOiByZXBvcnQ/LmFzc2lnbmVlPy5zcGxpdCgnICgnKVswXSA/PyAnJyxcclxuICAgICAgICAgIGVudHJ1c3RlZF90b19pZDogdGhpcy5pc0dyb3VwU2VsZWN0ZWQocmVwb3J0Py5hc3NpZ25lZSlcclxuICAgICAgICAgICAgPyB0aGlzLmdldEVtcGxveWVlSWRGcm9tR3JvdXAocmVwb3J0Py5hc3NpZ25lZSlcclxuICAgICAgICAgICAgOiB0aGlzLnJldHVybklkcyhyZXBvcnQ/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJyk/LnRvU3RyaW5nKCkgPz9cclxuICAgICAgICAgICAgICAnJyxcclxuICAgICAgICAgIGVtYWlsX2FkZHJlc3M6ICF0aGlzLmlzR3JvdXBTZWxlY3RlZChyZXBvcnQ/LmFzc2lnbmVlKVxyXG4gICAgICAgICAgICA/IHJlcG9ydD8uYXNzaWduZWU/LnNwbGl0KCcgKCcpWzFdPy5yZXBsYWNlKCcpJywgJycpID8/ICcnXHJcbiAgICAgICAgICAgIDogJycsXHJcbiAgICAgICAgICBpc0dyb3VwQXNzaWduVG86IHJlcG9ydD8uYXNzaWduZWVUeXBlPy5pbmNsdWRlcygnQW55JykgPyAxIDogMCxcclxuICAgICAgICAgIC8vIGNhdGVnb3J5X25hbWU6IGNhdGVnb3J5TmFtZSxcclxuICAgICAgICAgIGNhdGVnb3J5X25hbWVfd2l0aF90cmVlOiAnJyxcclxuICAgICAgICAgIGNhdGVnb3J5X2lkOlxyXG4gICAgICAgICAgICB0aGlzLmdldFByb2dyYW1JZChcclxuICAgICAgICAgICAgICByZXBvcnQ/LnByb2dyYW0sXHJcbiAgICAgICAgICAgICAgcmVwb3J0Py5wcm9ncmFtQ2F0ZWdvcnlcclxuICAgICAgICAgICAgKS5jYXRlZ29yeUlkPy50b1N0cmluZygpID8/ICcnLFxyXG4gICAgICAgICAgcHJvZ3JhbV9jYXRfaWRzOiB0aGlzLmdldFByb2dyYW1JZChcclxuICAgICAgICAgICAgcmVwb3J0Py5wcm9ncmFtLFxyXG4gICAgICAgICAgICByZXBvcnQ/LnByb2dyYW1DYXRlZ29yeVxyXG4gICAgICAgICAgKT8ucHJvZ3JhbUlkXHJcbiAgICAgICAgICAgID8gW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQcm9ncmFtSWQocmVwb3J0Py5wcm9ncmFtLCByZXBvcnQ/LnByb2dyYW1DYXRlZ29yeSlcclxuICAgICAgICAgICAgICAgICAgPy5wcm9ncmFtSWQsXHJcbiAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICA6IFtdLFxyXG4gICAgICAgICAgcmNfbmFtZTogcmNEZXRhaWxzID8gcmNEZXRhaWxzPy5uYW1lIDogJycsXHJcbiAgICAgICAgICByY19pZDogcmNEZXRhaWxzID8gcmNEZXRhaWxzPy5yY0lkIDogMCxcclxuICAgICAgICAgIGVudGl0eV90cmVlOlxyXG4gICAgICAgICAgICByY0RldGFpbHMgJiYgcmNEZXRhaWxzPy5yY0lkXHJcbiAgICAgICAgICAgICAgPyBbXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRfcmNfaWRzOiByY0RldGFpbHMgPyByY0RldGFpbHM/LnBhcmVudElkcyA6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIHJjX2lkOiByY0RldGFpbHMgPyByY0RldGFpbHM/LnJjSWQgOiAwLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgIDogW10sXHJcbiAgICAgICAgICB1c2VyR3JvdXBJZHM6IHtcclxuICAgICAgICAgICAgYXNzaWduZWVBbGxHcm91cElkczpcclxuICAgICAgICAgICAgICAhcmVwb3J0Py5hc3NpZ25lZVR5cGU/LmluY2x1ZGVzKCdBbnknKSAmJlxyXG4gICAgICAgICAgICAgIHRoaXMuaXNHcm91cFNlbGVjdGVkKHJlcG9ydD8uYXNzaWduZWUpXHJcbiAgICAgICAgICAgICAgICA/IFt0aGlzLnJldHVybklkcyhyZXBvcnQ/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJyldXHJcbiAgICAgICAgICAgICAgICA6IFtdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZUFueW9uZUdyb3VwSWRzOlxyXG4gICAgICAgICAgICAgIHJlcG9ydD8uYXNzaWduZWVUeXBlPy5pbmNsdWRlcygnQW55JykgJiZcclxuICAgICAgICAgICAgICB0aGlzLmlzR3JvdXBTZWxlY3RlZChyZXBvcnQ/LmFzc2lnbmVlKVxyXG4gICAgICAgICAgICAgICAgPyBbdGhpcy5yZXR1cm5JZHMocmVwb3J0Py5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpXVxyXG4gICAgICAgICAgICAgICAgOiBbXSxcclxuICAgICAgICAgICAgY2NFbWFpbEdyb3VwSWRzOiBbXSxcclxuICAgICAgICAgICAgZmFpbHVyZUNDRW1haWxHcm91cElkczogW10sXHJcbiAgICAgICAgICAgIHJldmlld2VyR3JvdXBJZHM6IFtdLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZyZXF1ZW5jeV9oYW5kbGVyOiBmcmVxdWVuY3lWYWx1ZSxcclxuICAgICAgICAgIGNvbXBsaWFuY2VfdHlwZTogZnJlcXVlbmN5VmFsdWU/LnNwbGl0KCd+JylbMF0sXHJcbiAgICAgICAgICBmcmVxdWVuY3lfZGVzY3JpcHRpb246IHJlcG9ydD8uZnJlcXVlbmN5LFxyXG4gICAgICAgICAgc3RhcnRfZGF0ZTogcmVwb3J0Py5kYXkgPyBzdGFydERhdGUgOiBjdXJyZW50RGF0ZSArICcgMDA6MDA6MDAnLFxyXG4gICAgICAgICAgcmlza19jbGFzczogcmVwb3J0Py5yZXBvcnRDbGFzcyA/PyAnJyxcclxuICAgICAgICAgIHJpc2tfY2xhc3NJZDogcmVwb3J0Py5yZXBvcnRDbGFzc1xyXG4gICAgICAgICAgICA/IHRoaXMucmV0dXJuSWRzKHJlcG9ydD8ucmVwb3J0Q2xhc3MsICdyaXNrX2NsYXNzJylcclxuICAgICAgICAgICAgOiB0aGlzLnJpc2tDbGFzc0VuYWJsZWRcclxuICAgICAgICAgICAgPyAxXHJcbiAgICAgICAgICAgIDogMixcclxuICAgICAgICAgIGRvY191dGM6IDAsXHJcbiAgICAgICAgICBjb21tZW50OiByZXBvcnQ/Lm5vdGVzID8/ICcnLFxyXG4gICAgICAgICAgY2NfbWFpbDogY2NEZXRhaWxzID8gY2NEZXRhaWxzPy5lbWFpbCA6ICcnLFxyXG4gICAgICAgICAgY2NfbWFpbF9pZDogY2NEZXRhaWxzID8gY2NEZXRhaWxzPy5lbXBsb3llZUlkIDogJycsXHJcbiAgICAgICAgICBjY19mYWlsZWRfbWFpbDogY2NGYWlsdXJlRGV0YWlscyA/IGNjRmFpbHVyZURldGFpbHM/LmVtYWlsIDogJycsXHJcbiAgICAgICAgICBjY19mYWlsdXJlX2lkOiBjY0ZhaWx1cmVEZXRhaWxzID8gY2NGYWlsdXJlRGV0YWlscz8uZW1wbG95ZWVJZCA6IDAsXHJcbiAgICAgICAgICBzZW5kX3JlbWluZGVyOiAnJyxcclxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OlxyXG4gICAgICAgICAgICBmcmVxdWVuY3lUeXBlID09PSAnMSdcclxuICAgICAgICAgICAgICA/IDBcclxuICAgICAgICAgICAgICA6IGNvbXBsZXRlRGF5cyAmJiBjb21wbGV0ZURheXMgIT0gJydcclxuICAgICAgICAgICAgICA/IGNvbXBsZXRlRGF5c1xyXG4gICAgICAgICAgICAgIDogMCxcclxuICAgICAgICAgIGZhaWxlZF9hZnRlcjpcclxuICAgICAgICAgICAgbm90Q29tcGxldGVEYXlzICYmIG5vdENvbXBsZXRlRGF5cyAhPSAnJyA/IG5vdENvbXBsZXRlRGF5cyA6IDAsXHJcbiAgICAgICAgICBleGNlbF9zaGVldF9uYW1lOiAnJyxcclxuICAgICAgICAgIHJlcG9ydF91cGxvYWRfZmxhZzpcclxuICAgICAgICAgICAgcmVwb3J0Py5pc0Zvcm1hdCA9PT0gJ1llcycgJiZcclxuICAgICAgICAgICAgcmVwb3J0Py5mb3JtYXRGb3JSZXNwb25zaWJpbGl0eT8ubGVuZ3RoXHJcbiAgICAgICAgICAgICAgPyAxXHJcbiAgICAgICAgICAgICAgOiAwLFxyXG4gICAgICAgICAgcmVwb3J0X2lkOiAwLFxyXG4gICAgICAgICAgaXNfYXNzaWduZWRfZmxhZzogMCxcclxuICAgICAgICAgIHByaXZhdGVfbGlicmFyeV9pZDogMCxcclxuICAgICAgICAgIGtleWNvbXBsaWFuY2U6IHJlcG9ydD8ua2V5UmVzcG9uc2liaWxpdHkgPT09ICdZZXMnID8gJ1llcycgOiAnTm8nLFxyXG4gICAgICAgICAga2V5X2NvbXBsaWFuY2U6IHJlcG9ydD8ua2V5UmVzcG9uc2liaWxpdHkgPT09ICdZZXMnID8gMSA6IDAsXHJcbiAgICAgICAgICByZXZpZXdlcklkOiByZXZpZXdlckRldGFpbHMgPyByZXZpZXdlckRldGFpbHM/LmVtcGxveWVlSWQgOiAwLFxyXG4gICAgICAgICAgcmV2aWV3ZXJfYXJyOlxyXG4gICAgICAgICAgICByZXZpZXdlckRldGFpbHMgJiYgcmV2aWV3ZXJEZXRhaWxzPy5lbXBsb3llZUlkXHJcbiAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgIGxldmVsMToge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldmlld2VyczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXJfaWQ6IHJldmlld2VyRGV0YWlsc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gcmV2aWV3ZXJEZXRhaWxzPy5lbXBsb3llZUlkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXZpZXdlcl9hY2NlcHQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1NFUVVFTlRJQUwnLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDoge30sXHJcbiAgICAgICAgICByZXZpZXdlcldpbmRvdzpcclxuICAgICAgICAgICAgcmVwb3J0Py5yZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluICYmXHJcbiAgICAgICAgICAgIHJlcG9ydD8ucmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbiAhPT0gJydcclxuICAgICAgICAgICAgICA/IHJlcG9ydD8ucmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpblxyXG4gICAgICAgICAgICAgIDogMixcclxuICAgICAgICAgIHJldmlld2VyRmFpbHVyZTpcclxuICAgICAgICAgICAgcmVwb3J0Py5yZXZpZXdXaWxsQmVGYWlsZWRBZnRlciAmJlxyXG4gICAgICAgICAgICByZXBvcnQ/LnJldmlld1dpbGxCZUZhaWxlZEFmdGVyICE9PSAnJ1xyXG4gICAgICAgICAgICAgID8gcmVwb3J0Py5yZXZpZXdXaWxsQmVGYWlsZWRBZnRlclxyXG4gICAgICAgICAgICAgIDogMixcclxuICAgICAgICAgIHJldmlld2VyX2VtYWlsOiByZXZpZXdlckRldGFpbHMgPyByZXZpZXdlckRldGFpbHM/LmVtYWlsIDogJycsXHJcbiAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0Py5mb3JtYXRGb3JSZXNwb25zaWJpbGl0eVxyXG4gICAgICAgICAgICA/IHJlcG9ydC5mb3JtYXRGb3JSZXNwb25zaWJpbGl0eVxyXG4gICAgICAgICAgICA6ICcnLFxyXG4gICAgICAgICAgZG9jdW1lbnRhcnlFdmlkZW5jZTogcmVwb3J0Py5ldmlkZW5jZU5vdGVzID8/ICcnLFxyXG4gICAgICAgICAgaXNkb2N1bWVudGFyeUV2aWRlbmNlOlxyXG4gICAgICAgICAgICByZXBvcnQuZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkID09PSAnWWVzJyA/IDEgOiAwLFxyXG4gICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnQub2JqZWN0aXZlID8/ICcnLFxyXG4gICAgICAgICAgZXhjZWxfc2hlZXRfaW5mbzogdGhpcy5maWxlUmVzcG9uc2UsXHJcbiAgICAgICAgICBzaG93TGlzdDogZmFsc2UsXHJcbiAgICAgICAgICBjdXN0b21fdGFnczogJ1tdJyxcclxuICAgICAgICAgIHF1ZXN0aW9ubmFpcmVfdHlwZTogJycsXHJcbiAgICAgICAgICBvbl9jb21wbGV0aW9uX29mX3R5cGU6XHJcbiAgICAgICAgICAgIHJlcG9ydD8uZnJlcXVlbmN5ID09PSAnT24gQ29tcGxldGlvbiBvZicgfHxcclxuICAgICAgICAgICAgcmVwb3J0Py5mcmVxdWVuY3k/LnRvTG93ZXJDYXNlKCkgPT09ICdvbmdvaW5nJ1xyXG4gICAgICAgICAgICAgID8gMVxyXG4gICAgICAgICAgICAgIDogMCxcclxuICAgICAgICAgIG9uX2NvbXBsZXRpb25fb2Y6IHRoaXMucmV0dXJuSWRzKFxyXG4gICAgICAgICAgICByZXBvcnQ/LnBhcmVudFJlc3BvbnNpYmlsaXR5LFxyXG4gICAgICAgICAgICAncGFyZW50UmVzcG9uc2liaWxpdHknXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAgID8gW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXR1cm5JZHMoXHJcbiAgICAgICAgICAgICAgICAgIHJlcG9ydD8ucGFyZW50UmVzcG9uc2liaWxpdHksXHJcbiAgICAgICAgICAgICAgICAgICdwYXJlbnRSZXNwb25zaWJpbGl0eSdcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICA6IFtdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcGF5bG9hZC5wdXNoKG9iaik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJwYXlsb2FkcGF5bG9hZFwiLHBheWxvYWQsIFwicmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID09PlwiLCByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgKVxyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuYWRkQnVsa1Jlc3BvbnNpYmlsaXR5KHBheWxvYWQpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd1NtaWxleSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eURhdGEgPSByZXM7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93RXhjZWwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coXHJcbiAgICAgICAgICAnT09QUyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSBsb2FkZWQuIENvdWxkIHlvdSBwbGVhc2UgdHJ5IG9uZSBtb3JlIHRpbWU/JyxcclxuICAgICAgICAgICdhbGVydCdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuSWRzKGl0ZW06IGFueSwga2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgY2FzZSAncmNfaWQnOlxyXG4gICAgICAgIGxldCByY09iaiA9IHsgbmFtZTogJycsIHJjSWQ6IDAsIHBhcmVudElkczogW10gfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5yY0xpc3QuZm9yRWFjaCgocmNfZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmNfZWxlbWVudC5uYW1lID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgbGV0IG5hbWU7XHJcbiAgICAgICAgICAgIGlmIChyY19lbGVtZW50Lm5hbWUuaW5jbHVkZXMoJ1tXSVRISU5dJykpIHtcclxuICAgICAgICAgICAgICBuYW1lID0gcmNfZWxlbWVudC5uYW1lLnNwbGl0KCcgW1dJVEhJTl0gJylbMF07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbmFtZSA9IHJjX2VsZW1lbnQubmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByY09iaiA9IHtcclxuICAgICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICAgIHJjSWQ6IHJjX2VsZW1lbnQucmNfaWQsXHJcbiAgICAgICAgICAgICAgcGFyZW50SWRzOiByY19lbGVtZW50LnBhcmVudElkcyxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmNPYmo7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jldmlld2VyJzpcclxuICAgICAgICBsZXQgcmV2aWV3ZXJPYmogPSB7IG5hbWU6ICcnLCBlbXBsb3llZUlkOiAwLCBlbWFpbDogJycgfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0LmZvckVhY2goKHJldmlld2VyRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmV2aWV3ZXJFbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldmlld2VyT2JqID0ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IHJldmlld2VyRWxlbWVudC5uYW1lLFxyXG4gICAgICAgICAgICAgIGVtcGxveWVlSWQ6IHJldmlld2VyRWxlbWVudC5teV9tZW1iZXJfaWQsXHJcbiAgICAgICAgICAgICAgZW1haWw6IHJldmlld2VyRWxlbWVudC5lbWFpbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmV2aWV3ZXJPYmo7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhc3NpZ25vcic6XHJcbiAgICAgICAgbGV0IGFzc2lnbm9yT2JqID0geyBuYW1lOiAnJywgbWVtYmVySWQ6IDAsIGVtYWlsOiAnJyB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbm9yc0xpc3QuZm9yRWFjaCgoYXNzaWdub3JFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChhc3NpZ25vckVsZW1lbnQubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgYXNzaWdub3JPYmogPSB7XHJcbiAgICAgICAgICAgICAgbmFtZTogYXNzaWdub3JFbGVtZW50Lm5hbWUsXHJcbiAgICAgICAgICAgICAgZW1haWw6IGFzc2lnbm9yRWxlbWVudC5lbWFpbCxcclxuICAgICAgICAgICAgICBtZW1iZXJJZDogYXNzaWdub3JFbGVtZW50Lm1lbWJlcl9pZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYXNzaWdub3JPYmo7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjYyc6XHJcbiAgICAgICAgbGV0IGNjT2JqID0geyBuYW1lOiAnJywgZW1wbG95ZWVJZDogMCwgZW1haWw6ICcnIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdC5mb3JFYWNoKChjY0VsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNjRWxlbWVudC5uYW1lQW5kRW1haWwgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBjY09iaiA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBjY0VsZW1lbnQubmFtZSxcclxuICAgICAgICAgICAgICBlbXBsb3llZUlkOiBjY0VsZW1lbnQuZW1wbG95ZWVfaWQsXHJcbiAgICAgICAgICAgICAgZW1haWw6IGNjRWxlbWVudC5lbWFpbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gY2NPYmo7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NjRmFpbHVyZSc6XHJcbiAgICAgICAgbGV0IGNjZk9iaiA9IHsgbmFtZTogJycsIGVtcGxveWVlSWQ6IDAsIGVtYWlsOiAnJyB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3QuZm9yRWFjaCgoY2NmRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2NmRWxlbWVudC5uYW1lQW5kRW1haWwgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBjY2ZPYmogPSB7XHJcbiAgICAgICAgICAgICAgbmFtZTogY2NmRWxlbWVudC5uYW1lLFxyXG4gICAgICAgICAgICAgIGVtcGxveWVlSWQ6IGNjZkVsZW1lbnQuZW1wbG95ZWVfaWQsXHJcbiAgICAgICAgICAgICAgZW1haWw6IGNjZkVsZW1lbnQuZW1haWwsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGNjZk9iajtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ2VudHJ1c3RlZF90byc6XHJcbiAgICAgICAgbGV0IGVtcElkID0gMDtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5hc3NpZ25lZXNMaXN0LmZvckVhY2goKGVuRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZW5FbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIGVtcElkID0gZW5FbGVtZW50LmVtcGxveWVlX2lkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBlbXBJZDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ3BhcmVudFJlc3BvbnNpYmlsaXR5JzpcclxuICAgICAgICBsZXQgaWQgPSAwO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnBhcmVudFJlc3BvbnNpYmlsaXR5LmZvckVhY2goXHJcbiAgICAgICAgICAocmVzcG9uc2liaWxpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2liaWxpdHk/Lm5hbWUgPT09IGl0ZW0pIHtcclxuICAgICAgICAgICAgICBpZCA9IHJlc3BvbnNpYmlsaXR5LmlkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gaWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdyaXNrX2NsYXNzJzpcclxuICAgICAgICBpZiAoaXRlbSA9PSAnTG93Jykge1xyXG4gICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09ICdMb3ctTWVkaXVtJykge1xyXG4gICAgICAgICAgcmV0dXJuIDI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09ICdNZWRpdW0tSGlnaCcpIHtcclxuICAgICAgICAgIHJldHVybiAzO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PSAnSGlnaCcpIHtcclxuICAgICAgICAgIHJldHVybiA0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0ge1xyXG4gICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgIH07XHJcbiAgICB0aGlzLmJ1bGtVcGxvYWQgPSB7XHJcbiAgICAgIGZyZXF1ZW5jeToge1xyXG4gICAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICAgICAgcmVwb3J0czogW10sXHJcbiAgICAgIH0sXHJcbiAgICAgIG9uZ29pbmc6IHtcclxuICAgICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgICBvbkNvbXBsZXRpb246IHtcclxuICAgICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnRlbXBsYXRlSW5mbyA9IHtcclxuICAgICAgY2F0ZWdvcnlMaXN0OiBbXSxcclxuICAgICAgcmNMaXN0OiBbXSxcclxuICAgICAgYXNzaWdub3JzTGlzdDogW10sXHJcbiAgICAgIGFzc2lnbmVlc0xpc3Q6IFtdLFxyXG4gICAgICByZXZpZXdlckxpc3Q6IFtdLFxyXG4gICAgICBtZW1iZXJJZDogJycsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5maWxlTmFtZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZGF0YSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2hvd0V4Y2VsID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmNsb3NlQWRkTXVsdGlwbGVSZXNwb25zaWJpbGl0eS5lbWl0KCk7XHJcbiAgfVxyXG4gIGFjdGlvbihldmVudDogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50KSB7XHJcbiAgICAgIGNhc2UgJ2FkZE1vcmUnOlxyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndmlldyc6XHJcbiAgICAgICAgdGhpcy52aWV3UmVzcG9uc2liaWxpdGllcygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VTbWlsZXkoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmNsb3NlV29ya2Zsb3cuZW1pdCh7IGV2dDogdGhpcy5yZXNwb25zaWJpbGl0eURhdGEsIGNvbmZpcm06IGZhbHNlIH0pO1xyXG4gIH1cclxuXHJcbiAgdmlld1Jlc3BvbnNpYmlsaXRpZXMoKTogdm9pZCB7XHJcbiAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICBsZXQgdXJsU3Vic3RyaW5nID0gJyc7XHJcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xyXG4gICAgaWYgKHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nKSB7XHJcbiAgICAgIGlmICh0aGlzLmZlYXR1cmVmbGFnKSB7XHJcbiAgICAgICAgdXJsU3Vic3RyaW5nID0gJ2NvbXBsaWFuY2UvbWFuYWdlLXJlc3BvbnNpYmlsaXR5PycgKyB0aGlzLnVybDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB1cmxTdWJzdHJpbmcgPVxyXG4gICAgICAgICAgJ2NvbXBsaWFuY2UvbWFuYWdlLXJlc3BvbnNpYmlsaXRpZXMvcmVzcG9uc2liaWxpdGllcy1xdWV1ZSc7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmZlYXR1cmVmbGFnKSB7XHJcbiAgICAgICAgdGhpcy5xdWVyeVBhcmFtID0gSlNPTj8uc3RyaW5naWZ5KHRoaXMucmVjZW50UmVzcG9uc2liaWxpdHlVcmwpO1xyXG4gICAgICAgIHVybFN1YnN0cmluZyA9ICdjb21wbGlhbmNlL21hbmFnZS1yZXNwb25zaWJpbGl0eT9xPScgKyB0aGlzLnF1ZXJ5UGFyYW07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdXJsU3Vic3RyaW5nID0gJ2NvbXBsaWFuY2UvbWFuYWdlLXJlc3BvbnNpYmlsaXRpZXMnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAod2luZG93LmxvY2F0aW9uLmhvc3Quc3RhcnRzV2l0aCgnbG9jYWxob3N0JykpIHtcclxuICAgICAgdXJsID0gJ2h0dHA6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyAnL2NvbXBsaWFuY2UvIy8nICsgdXJsU3Vic3RyaW5nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gJ2h0dHBzOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgJy9jb21wbGlhbmNlLyMvJyArIHVybFN1YnN0cmluZztcclxuICAgIH1cclxuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xyXG4gIH1cclxuXHJcbiAgLy8gVXBsb2FkIEZpbGUgdG8gdGhlIHNlcnZlclxyXG4gIGZpbGVVcGxvYWQoKSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgY29uc3QgZmlsZSA9IHRoaXMudXBsb2FkZWRGaWxlc1swXVswXTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnc291cmNlZmlsZScsIGZpbGUpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdkZXN0aW5hdGlvbicsICdidWxrdXBsb2FkL2VudHJ1c3QvJyArIHRoaXMudXNlckluZm8uZW1haWwpO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZmlsZVVwbG9hZChmb3JtRGF0YSkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzPy5maWxlbmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5maWxlUmVzcG9uc2UucHVzaChyZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxyXG4gICAgICAgICAgJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsXHJcbiAgICAgICAgICAnYWxlcnQnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldE9yZ2FuaXphdGlvbkRldGFpbHModGVtcExpc3Q6IGFueSkge1xyXG4gICAgaWYgKHRlbXBMaXN0WzBdICE9PSB1bmRlZmluZWQgJiYgdGVtcExpc3RbMF1bMThdKSB7XHJcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvLm1lbWJlcklkID0gdGVtcExpc3RbMF1bMThdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIHdoaWNoIHlvdSBkb3dubG9hZGVkIGZyb20gaGVyZS4nICtcclxuICAgICAgICAnIFJFVFJZJztcclxuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRlbXBMaXN0LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAvKiBQdXNoaW5nIHRoZSB2YWx1ZSBvZiByZWd1bGF0aW9ucyBQcm9ncmFtcyBpbnRvIHRoZSBjYXRlZ29yeUxpc3QgYXJyYXkuICovXHJcbiAgICAgIGlmIChlbGVtZW50WzI2XSAmJiB0eXBlb2YgZWxlbWVudFsyNl0gPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgY29uc3QgcmVndWxhdGlvbnMgPSB7XHJcbiAgICAgICAgICBwcm9ncmFtTmFtZTogZWxlbWVudFsyMl0sXHJcbiAgICAgICAgICBwcm9ncmFtSWQ6IGVsZW1lbnRbMjZdLFxyXG4gICAgICAgICAgYXNzaWduZWU6IEpTT04ucGFyc2UoZWxlbWVudFszMF0pLFxyXG4gICAgICAgICAgcmV2aWV3ZXI6IEpTT04ucGFyc2UoZWxlbWVudFszMV0pLFxyXG4gICAgICAgICAgb3ZlcnNlZXI6IEpTT04ucGFyc2UoZWxlbWVudFszMl0pPy5jb25jYXQoSlNPTi5wYXJzZShlbGVtZW50WzMzXSkpLFxyXG4gICAgICAgICAgcHJvZ3JhbVR5cGU6IDEsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3QucHVzaChyZWd1bGF0aW9ucyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIFB1c2hpbmcgdGhlIHZhbHVlIG9mIHN0YW5kYXJkcyBQcm9ncmFtcyBpbnRvIHRoZSBjYXRlZ29yeUxpc3QgYXJyYXkuICovXHJcbiAgICAgIGlmIChlbGVtZW50WzI3XSAmJiB0eXBlb2YgZWxlbWVudFsyN10gPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgY29uc3Qgc3RhbmRhcmRzID0ge1xyXG4gICAgICAgICAgcHJvZ3JhbU5hbWU6IGVsZW1lbnRbMjNdLFxyXG4gICAgICAgICAgcHJvZ3JhbUlkOiBlbGVtZW50WzI3XSxcclxuICAgICAgICAgIGFzc2lnbmVlOiBKU09OLnBhcnNlKGVsZW1lbnRbMzRdKSxcclxuICAgICAgICAgIHJldmlld2VyOiBKU09OLnBhcnNlKGVsZW1lbnRbMzVdKSxcclxuICAgICAgICAgIG92ZXJzZWVyOiBKU09OLnBhcnNlKGVsZW1lbnRbMzZdKT8uY29uY2F0KEpTT04ucGFyc2UoZWxlbWVudFszN10pKSxcclxuICAgICAgICAgIHByb2dyYW1UeXBlOiAyLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0LnB1c2goc3RhbmRhcmRzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLyogUHVzaGluZyB0aGUgdmFsdWUgb2YgaW50ZXJuYWwgQ29udHJvbHMgUHJvZ3JhbXMgaW50byB0aGUgY2F0ZWdvcnlMaXN0IGFycmF5LiAqL1xyXG4gICAgICBpZiAoZWxlbWVudFsyOF0gJiYgdHlwZW9mIGVsZW1lbnRbMjhdID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIGNvbnN0IGludGVybmFsQ29udHJvbHMgPSB7XHJcbiAgICAgICAgICBwcm9ncmFtTmFtZTogZWxlbWVudFsyNF0sXHJcbiAgICAgICAgICBwcm9ncmFtSWQ6IGVsZW1lbnRbMjhdLFxyXG4gICAgICAgICAgYXNzaWduZWU6IEpTT04ucGFyc2UoZWxlbWVudFszOF0pLFxyXG4gICAgICAgICAgcmV2aWV3ZXI6IEpTT04ucGFyc2UoZWxlbWVudFszOV0pLFxyXG4gICAgICAgICAgb3ZlcnNlZXI6IEpTT04ucGFyc2UoZWxlbWVudFs0MF0pPy5jb25jYXQoSlNPTi5wYXJzZShlbGVtZW50WzQxXSkpLFxyXG4gICAgICAgICAgcHJvZ3JhbVR5cGU6IDMsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3QucHVzaChpbnRlcm5hbENvbnRyb2xzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLyogUHVzaGluZyB0aGUgdmFsdWUgb2Ygb3RoZXJzIFByb2dyYW1zIGludG8gdGhlIGNhdGVnb3J5TGlzdCBhcnJheS4gKi9cclxuICAgICAgaWYgKGVsZW1lbnRbMjldICYmIHR5cGVvZiBlbGVtZW50WzI5XSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICBjb25zdCBvdGhlcnMgPSB7XHJcbiAgICAgICAgICBwcm9ncmFtTmFtZTogZWxlbWVudFsyNV0sXHJcbiAgICAgICAgICBwcm9ncmFtSWQ6IGVsZW1lbnRbMjldLFxyXG4gICAgICAgICAgYXNzaWduZWU6IEpTT04ucGFyc2UoZWxlbWVudFs0Ml0pLFxyXG4gICAgICAgICAgcmV2aWV3ZXI6IEpTT04ucGFyc2UoZWxlbWVudFs0M10pLFxyXG4gICAgICAgICAgb3ZlcnNlZXI6IEpTT04ucGFyc2UoZWxlbWVudFs0NF0pPy5jb25jYXQoSlNPTi5wYXJzZShlbGVtZW50WzQ1XSkpLFxyXG4gICAgICAgICAgcHJvZ3JhbVR5cGU6IDAsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3QucHVzaChvdGhlcnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvKiBDaGVja2luZyBpZiB0aGUgZWxlbWVudFs5XSBpcyBub3QgbnVsbCBhbmQgbm90IGVtcHR5LiBJZiBpdCBpcyBub3QgbnVsbCBhbmQgbm90IGVtcHR5LCBpdCBpc1xyXG4gICAgICBwdXNoaW5nIHRoZSBlbGVtZW50WzldIChSQykgdG8gdGhlIGFycmF5IChyY0xpc3QpLiAqL1xyXG4gICAgICBpZiAoZWxlbWVudFs5XSAmJiBlbGVtZW50WzldICE9ICcgJykge1xyXG4gICAgICAgIGNvbnN0IHJjID0ge1xyXG4gICAgICAgICAgbmFtZTogZWxlbWVudFs5XSxcclxuICAgICAgICAgIHJjX2lkOiBlbGVtZW50WzEwXSxcclxuICAgICAgICAgIHBhcmVudElkczogSlNPTi5wYXJzZShlbGVtZW50WzExXSksXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5yY0xpc3QucHVzaChyYyk7XHJcbiAgICAgIH1cclxuICAgICAgLyogQ2hlY2tpbmcgaWYgdGhlIGVsZW1lbnRbMl0gaXMgbm90IGVtcHR5IGFuZCBub3QgZXF1YWwgdG8gc3BhY2UuIElmIGl0IGlzIG5vdCBlbXB0eSBhbmQgbm90XHJcbiAgICAgIGVxdWFsIHRvIHNwYWNlLCB0aGVuIGl0IGlzIHB1c2hpbmcgdGhlIGFzc2lnbmVlIG9iamVjdCB0byB0aGUgYXNzaWduZWVzTGlzdCBhcnJheS4gKi9cclxuICAgICAgaWYgKGVsZW1lbnRbMTldICYmIGVsZW1lbnRbMTldICE9ICcgJykge1xyXG4gICAgICAgIGNvbnN0IGFzc2lnbmVlID0ge1xyXG4gICAgICAgICAgbmFtZUFuZEVtYWlsOiBlbGVtZW50WzE5XSxcclxuICAgICAgICAgIC8vIG5hbWU6IGVsZW1lbnRbMTFdLnNwbGl0KCcgKCcpWzBdLFxyXG4gICAgICAgICAgbmFtZTogZWxlbWVudFsxOV0sXHJcbiAgICAgICAgICBlbWFpbDogZWxlbWVudFsxOV0sXHJcbiAgICAgICAgICBlbXBsb3llZV9pZDogZWxlbWVudFsyMF0sXHJcbiAgICAgICAgICBteV9tZW1iZXJfaWQ6IEpTT04ucGFyc2UoZWxlbWVudFsyMV0pLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uYXNzaWduZWVzTGlzdC5wdXNoKGFzc2lnbmVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGVsZW1lbnRbMl0gJiYgZWxlbWVudFsyXSAhPSAnICcpIHtcclxuICAgICAgICBjb25zdCByZXZpZXdlciA9IHtcclxuICAgICAgICAgIG5hbWVBbmRFbWFpbDogZWxlbWVudFsyXSxcclxuICAgICAgICAgIC8vIG5hbWU6IGVsZW1lbnRbMTFdLnNwbGl0KCcgKCcpWzBdLFxyXG4gICAgICAgICAgbmFtZTogZWxlbWVudFswXSxcclxuICAgICAgICAgIGVtYWlsOiBlbGVtZW50WzFdLFxyXG4gICAgICAgICAgZW1wbG95ZWVfaWQ6IGVsZW1lbnRbM10sXHJcbiAgICAgICAgICBteV9tZW1iZXJfaWQ6IGVsZW1lbnRbNF0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5yZXZpZXdlckxpc3QucHVzaChyZXZpZXdlcik7XHJcbiAgICAgIH1cclxuICAgICAgLyogQ2hlY2tpbmcgaWYgdGhlIGVsZW1lbnRbMl0gaXMgbm90IGVtcHR5IGFuZCBub3QgZXF1YWwgdG8gc3BhY2UuIElmIGl0IGlzIG5vdCBlbXB0eSBhbmQgbm90XHJcbiAgICAgIGVxdWFsIHRvIHNwYWNlLCBpdCB3aWxsIGNyZWF0ZSBhbiBvYmplY3QgYW5kIHB1c2ggaXQgdG8gdGhlIGFzc2lnbm9yc0xpc3QgYXJyYXkuICovXHJcbiAgICAgIGlmIChlbGVtZW50WzJdICYmIGVsZW1lbnRbMl0gIT0gJyAnKSB7XHJcbiAgICAgICAgY29uc3QgYXNzaWdub3IgPSB7XHJcbiAgICAgICAgICBuYW1lQW5kRW1haWw6IGVsZW1lbnRbMl0sXHJcbiAgICAgICAgICBuYW1lOiBlbGVtZW50WzBdLFxyXG4gICAgICAgICAgZW1haWw6IGVsZW1lbnRbMV0sXHJcbiAgICAgICAgICAvLyBuYW1lOiBlbGVtZW50WzE0XS5zcGxpdCgnICgnKVswXSxcclxuICAgICAgICAgIC8vIGVtYWlsOiBlbGVtZW50WzE0XS5zcGxpdCgnICgnKVsxXS5yZXBsYWNlKCcpJywgJycpLFxyXG4gICAgICAgICAgbWVtYmVyX2lkOiBlbGVtZW50WzRdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uYXNzaWdub3JzTGlzdC5wdXNoKGFzc2lnbm9yKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLyogQ2hlY2tpbmcgaWYgdGhlIDE3dGggZWxlbWVudCBvZiB0aGUgYXJyYXkgaXMgdHJ1ZS4gSWYgaXQgaXMsIGl0IGlzIGNyZWF0aW5nIGFuIG9iamVjdCB3aXRoIHRoZVxyXG4gICAgICAxNnRoIGVsZW1lbnQgYXMgdGhlIG5hbWUgYW5kIHRoZSAxN3RoIGVsZW1lbnQgYXMgdGhlIGlkLiAqL1xyXG4gICAgICBpZiAoZWxlbWVudFsxN10pIHtcclxuICAgICAgICBjb25zdCBwYXJlbnRSZXNwb25zaWJpbGl0eSA9IHtcclxuICAgICAgICAgIG5hbWU6IGVsZW1lbnRbMTZdLFxyXG4gICAgICAgICAgaWQ6IEpTT04ucGFyc2UoZWxlbWVudFsxN10pLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ucGFyZW50UmVzcG9uc2liaWxpdHkucHVzaChwYXJlbnRSZXNwb25zaWJpbGl0eSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qIENyZWF0aW5nIGEgbGlzdCBvZiBjaGlsZCBjYXRlZ29yaWVzLiBhbmQgcHVzaCB0aGUgY2hpbGQgY2F0ZWdvcmllcyB0byB0aGVpciBwYXJlbnQgcHJvZ3JhbSAqL1xyXG4gICAgaWYgKHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdD8uZm9yRWFjaCgoY2F0ZWdvcnk6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdGVtcExpc3RbMF0/LmluZGV4T2YoY2F0ZWdvcnk/LnByb2dyYW1JZCk7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgbGV0IGNoaWxkQ2F0ZWdvcnkgPSBbXTtcclxuICAgICAgICAgIC8qIENyZWF0aW5nIGEgbGlzdCBvZiBjaGlsZCBjYXRlZ29yaWVzLiAqL1xyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDE7IHRydWU7IGorKykge1xyXG4gICAgICAgICAgICBpZiAodGVtcExpc3Rbal0gJiYgdGVtcExpc3Rbal1baW5kZXhdKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0ZW1wTGlzdFtqXVtpbmRleCAtIDFdLFxyXG4gICAgICAgICAgICAgICAgaWQ6IHRlbXBMaXN0W2pdW2luZGV4XSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGNoaWxkQ2F0ZWdvcnkucHVzaChjYXRlZ29yeSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdFtpXVsnY2hpbGRDYXRlZ29yeSddID0gY2hpbGRDYXRlZ29yeTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLnVwbG9hZGVkRmlsZXMgdGhpcy50ZW1wbGF0ZUluZm8nLHRoaXMudGVtcGxhdGVJbmZvLCB0aGlzLmJ1bGtVcGxvYWQpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBhbiBldmVudCwgd2hpY2ggaXMgYSBzdHJpbmcsIGFuZCB0aGVuIGl0IHNldHMgdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB0b1xyXG4gICAqIHRoZSB2YWx1ZSBvZiB0aGUgYnVsa1VwbG9hZCB2YXJpYWJsZSwgd2hpY2ggaXMgYW4gb2JqZWN0LCBhbmQgdGhlbiBpdCBhY2Nlc3NlcyB0aGUgcHJvcGVydHkgb2ZcclxuICAgKiB0aGF0IG9iamVjdCB0aGF0IG1hdGNoZXMgdGhlIGV2ZW50IHN0cmluZy5cclxuICAgKlxyXG4gICAqIFNvIGlmIHRoZSBldmVudCBzdHJpbmcgaXMgJ2ZyZXF1ZW5jeScsIHRoZW4gdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB3aWxsIGJlIHNldCB0b1xyXG4gICAqIHRoZSB2YWx1ZSBvZiB0aGUgZnJlcXVlbmN5IHByb3BlcnR5IG9mIHRoZSBidWxrVXBsb2FkIG9iamVjdC5cclxuICAgKlxyXG4gICAqIElmIHRoZSBldmVudCBzdHJpbmcgaXMgJ29uZ29pbmcnLCB0aGVuIHRoZSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdmFyaWFibGUgd2lsbCBiZSBzZXQgdG8gdGhlXHJcbiAgICogdmFsdWUgb2YgdGhlIG9uZ29pbmcgcHJvcGVydHkgb2YgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogSWYgdGhlIGV2ZW50IHN0cmluZyBpcyAnb25Db21wbGV0aW9uJywgdGhlbiB0aGUgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIHRoZVxyXG4gICAqIHZhbHVlIG9mIHRoZSBvbkNvbXBsZXRpb24gcHJvcGVydHkgb2YgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogSWYgdGhlIGV2ZW50IHN0cmluZyBpcyBhbnl0aGluZyBlbHNlLCB0aGVuIHRoZSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdmFyaWFibGUgd2lsbCBiZSBzZXQgdG9cclxuICAgKiB0aGUgdmFsdWUgb2YgdGhlIGZyZXF1ZW5jeSBwcm9wZXJ0eSBvZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IC0gc3RyaW5nIC0gdGhlIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBmcm9tIHRoZSBjaGlsZCBjb21wb25lbnQgKGZyZXF1ZW5jeSB8IG9uZ29pbmcgfCBvbkNvbXBsZXRpb24pXHJcbiAgICovXHJcbiAgc2VsZWN0ZWRUYWIoZXZlbnQ6ICdmcmVxdWVuY3knIHwgJ29uZ29pbmcnIHwgJ29uQ29tcGxldGlvbicpIHtcclxuICAgIGNvbnNvbGUubG9nKCdzZWxlY3RlZFRhYicsIGV2ZW50KTtcclxuICAgIHRoaXMudGFiVHlwZSA9IGV2ZW50O1xyXG4gICAgc3dpdGNoIChldmVudCkge1xyXG4gICAgICBjYXNlICdmcmVxdWVuY3knOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ29uZ29pbmcnOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbmdvaW5nO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvbkNvbXBsZXRpb24nOlxyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAndGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQnLFxyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCxcclxuICAgICAgdGhpcy5idWxrVXBsb2FkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgaW4gYSByZXBvcnQsIGEgdGFiIHR5cGUsIGFuZCBhIGJvb2xlYW4gdmFsdWUuIEl0IHRoZW4gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBhIGJ1bmNoIG9mXHJcbiAgICogcHJvcGVydGllcy5cclxuICAgKiA8L2NvZGU+XHJcbiAgICogQHBhcmFtIHthbnl9IHJlcG9ydCAtIGFueSA9Jmd0OyB0aGUgYXJyYXkgb2YgZGF0YVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJUeXBlIC0gc3RyaW5nIC0gdGhpcyBpcyB0aGUgdHlwZSBvZiB0YWIgdGhhdCBpcyBzZWxlY3RlZC5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUHJvZ3JhbSAtIGJvb2xlYW5cclxuICAgKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XHJcbiAgICovXHJcbiAgc2V0UmVwb3J0RGV0YWlscyhyZXBvcnQ6IGFueSwgdGFiVHlwZTogc3RyaW5nLCBpc1Byb2dyYW06IGJvb2xlYW4pIHtcclxuICAgIGxldCBvYmo6IGFueTtcclxuICAgIHN3aXRjaCAodGFiVHlwZSkge1xyXG4gICAgICBjYXNlICdmcmVxdWVuY3knOiB7XHJcbiAgICAgICAgaWYgKGlzUHJvZ3JhbSkge1xyXG4gICAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcclxuICAgICAgICAgICAgcHJvZ3JhbVR5cGU6IHJlcG9ydFsxXSxcclxuICAgICAgICAgICAgcHJvZ3JhbTogcmVwb3J0WzJdLFxyXG4gICAgICAgICAgICBwcm9ncmFtQ2F0ZWdvcnk6IHJlcG9ydFszXSxcclxuICAgICAgICAgICAgYXNzaWdub3I6IHJlcG9ydFs0XSxcclxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFs1XSxcclxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbNl0sXHJcbiAgICAgICAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiByZXBvcnRbN10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IG51bGwsXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogcmVwb3J0WzhdLFxyXG4gICAgICAgICAgICBkYXk6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgbW9udGg6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBmYWlsZWRBZnRlcjogcmVwb3J0WzEyXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFsxM10sXHJcbiAgICAgICAgICAgIHJlcG9ydENsYXNzOiByZXBvcnRbMTRdLFxyXG4gICAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIG5vdGVzOiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICBpc0Zvcm1hdDogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydFsxOF0sXHJcbiAgICAgICAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgLy8gZXZpZGVuY2VOb3RlczogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgLy8gYXNzZXNzbWVudHM6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICByZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluOiByZXBvcnRbMjFdLFxyXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzIyXSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyM10sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzI0XSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcclxuICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3ZhbGlkRGF0ZSddID0gdGhpcy5jb21wYXJlV2l0aEN1cnJlbnREYXRlKG9iaj8uZGF5LCBvYmo/Lm1vbnRoKTtcclxuICAgICAgICAgIG9ialsnaXNQYXN0RGF0ZSddID0gdGhpcy5pc1Bhc3REYXRlKG9iaj8uZGF5LCBvYmo/Lm1vbnRoKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZCddID1cclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddICYmXHJcbiAgICAgICAgICAgIG9ialsndmFsaWREYXRlJ10gJiZcclxuICAgICAgICAgICAgIW9ialsnaXNQYXN0RGF0ZSddICYmXHJcbiAgICAgICAgICAgIG9iaj8uZnJlcXVlbmN5Py5sZW5ndGggJiZcclxuICAgICAgICAgICAgIU9iamVjdC52YWx1ZXMob2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddKS5pbmNsdWRlcyhmYWxzZSkgJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddO1xyXG4gICAgICAgICAgcmV0dXJuIG9iajtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcclxuICAgICAgICAgICAgYXNzaWdub3I6IHJlcG9ydFsxXSxcclxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IG51bGwsXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogcmVwb3J0WzVdLFxyXG4gICAgICAgICAgICBkYXk6IHJlcG9ydFs2XSxcclxuICAgICAgICAgICAgbW9udGg6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlXaW5kb3c6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgZmFpbGVkQWZ0ZXI6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIHJlcG9ydENsYXNzOiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydFsxMl0sXHJcbiAgICAgICAgICAgIG5vdGVzOiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICBpc0Zvcm1hdDogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgLy8gZXZpZGVuY2VOb3RlczogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgLy8gYXNzZXNzbWVudHM6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICByZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluOiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzIxXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcclxuICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ3ZhbGlkRGF0ZSddID0gdGhpcy5jb21wYXJlV2l0aEN1cnJlbnREYXRlKG9iaj8uZGF5LCBvYmo/Lm1vbnRoKTtcclxuICAgICAgICAgIG9ialsnaXNQYXN0RGF0ZSddID0gdGhpcy5pc1Bhc3REYXRlKG9iaj8uZGF5LCBvYmo/Lm1vbnRoKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZCddID1cclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddICYmXHJcbiAgICAgICAgICAgIG9ialsndmFsaWREYXRlJ10gJiZcclxuICAgICAgICAgICAgIW9ialsnaXNQYXN0RGF0ZSddICYmXHJcbiAgICAgICAgICAgIG9iaj8uZnJlcXVlbmN5Py5sZW5ndGggJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddO1xyXG4gICAgICAgICAgcmV0dXJuIG9iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnb25nb2luZyc6IHtcclxuICAgICAgICBpZiAoaXNQcm9ncmFtKSB7XHJcbiAgICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5TmFtZTogcmVwb3J0WzBdLFxyXG4gICAgICAgICAgICBwcm9ncmFtVHlwZTogcmVwb3J0WzFdLFxyXG4gICAgICAgICAgICBwcm9ncmFtOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIHByb2dyYW1DYXRlZ29yeTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZTogcmVwb3J0WzVdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZVR5cGU6IHJlcG9ydFs2XSxcclxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogbnVsbCxcclxuICAgICAgICAgICAgZnJlcXVlbmN5OiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIHNldFJlbWluZGVyOiByZXBvcnRbOV0sXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeVJlbWluZGVyOiByZXBvcnRbMTBdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFsxMl0sXHJcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzEzXSxcclxuICAgICAgICAgICAgbm90ZXM6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICAvLyBldmlkZW5jZU5vdGVzOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICAvLyBhc3Nlc3NtZW50czogcmVwb3J0WzE4XSxcclxuICAgICAgICAgICAgcmV2aWV3ZXI6IHJlcG9ydFsxOF0sXHJcbiAgICAgICAgICAgIHJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW46IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIHJldmlld1dpbGxCZUZhaWxlZEFmdGVyOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICBvdmVyc2VlcjogcmVwb3J0WzIxXSxcclxuICAgICAgICAgICAgbm90aWZ5T25GYWlsdXJlOiByZXBvcnRbMjJdLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSA9IHRoaXMuaXNWYWxpZERhdGEob2JqKTtcclxuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKVxyXG4gICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZCddID1cclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddICYmXHJcbiAgICAgICAgICAgICFPYmplY3QudmFsdWVzKG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSkuaW5jbHVkZXMoZmFsc2UpICYmXHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXTtcclxuICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs1XSxcclxuICAgICAgICAgICAgc2V0UmVtaW5kZXI6IHJlcG9ydFs2XSxcclxuICAgICAgICAgICAgZnJlcXVlbmN5UmVtaW5kZXI6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTBdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxMl0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIC8vIGFzc2Vzc21lbnRzOiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE1XSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xyXG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddID0gdGhpcy5yZXR1cm5JZHMob2JqPy5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkJ10gPSBvYmpbJ2lzVmFsaWREYXRhJ10gJiYgb2JqWydpc1ZhbGlkVXNlciddO1xyXG4gICAgICAgICAgcmV0dXJuIG9iajtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnb25Db21wbGV0aW9uJzoge1xyXG4gICAgICAgIGlmIChpc1Byb2dyYW0pIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIHByb2dyYW1UeXBlOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIHByb2dyYW06IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgcHJvZ3JhbUNhdGVnb3J5OiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbNV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzddLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgcGFyZW50UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgZHVlRGF0ZTogcmVwb3J0WzEwXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlXaW5kb3c6IHJlcG9ydFsxMV0sXHJcbiAgICAgICAgICAgIGZhaWxlZEFmdGVyOiByZXBvcnRbMTJdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzEzXSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzE1XSxcclxuICAgICAgICAgICAgbm90ZXM6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzE4XSxcclxuICAgICAgICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiByZXBvcnRbMTldLFxyXG4gICAgICAgICAgICAvLyBldmlkZW5jZU5vdGVzOiByZXBvcnRbMTldLFxyXG4gICAgICAgICAgICAvLyBhc3Nlc3NtZW50czogcmVwb3J0WzIwXSxcclxuICAgICAgICAgICAgcmV2aWV3ZXI6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIHJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW46IHJlcG9ydFsyMV0sXHJcbiAgICAgICAgICAgIHJldmlld1dpbGxCZUZhaWxlZEFmdGVyOiByZXBvcnRbMjJdLFxyXG4gICAgICAgICAgICBvdmVyc2VlcjogcmVwb3J0WzIzXSxcclxuICAgICAgICAgICAgbm90aWZ5T25GYWlsdXJlOiByZXBvcnRbMjRdLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSA9IHRoaXMuaXNWYWxpZERhdGEob2JqKTtcclxuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKVxyXG4gICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZCddID1cclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddICYmXHJcbiAgICAgICAgICAgICFPYmplY3QudmFsdWVzKG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSkuaW5jbHVkZXMoZmFsc2UpICYmXHJcbiAgICAgICAgICAgIG9iaj8ucGFyZW50UmVzcG9uc2liaWxpdHk/Lmxlbmd0aCAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ107XHJcbiAgICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5TmFtZTogcmVwb3J0WzBdLFxyXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzFdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZTogcmVwb3J0WzJdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZVR5cGU6IHJlcG9ydFszXSxcclxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs0XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogbnVsbCxcclxuICAgICAgICAgICAgZnJlcXVlbmN5OiByZXBvcnRbNV0sXHJcbiAgICAgICAgICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiByZXBvcnRbNl0sXHJcbiAgICAgICAgICAgIGR1ZURhdGU6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlXaW5kb3c6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgZmFpbGVkQWZ0ZXI6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIHJlcG9ydENsYXNzOiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBvYmplY3RpdmU6IHJlcG9ydFsxMl0sXHJcbiAgICAgICAgICAgIG5vdGVzOiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICBpc0Zvcm1hdDogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHk6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgLy8gZXZpZGVuY2VOb3RlczogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgLy8gYXNzZXNzbWVudHM6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIHJldmlld2VyOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICByZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluOiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICByZXZpZXdXaWxsQmVGYWlsZWRBZnRlcjogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgb3ZlcnNlZXI6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIG5vdGlmeU9uRmFpbHVyZTogcmVwb3J0WzIxXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcclxuICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSAmJlxyXG4gICAgICAgICAgICBvYmo/LnBhcmVudFJlc3BvbnNpYmlsaXR5Py5sZW5ndGggJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddO1xyXG4gICAgICAgICAgcmV0dXJuIG9iajtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDoge1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBhIHN0cmluZywgcmVtb3ZlcyBhbGwgd2hpdGVzcGFjZSwgYW5kIHJldHVybnMgdGhlIHN0cmluZ1xyXG4gICAqIEBwYXJhbSB7YW55fSBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlIHJlc3BvbnNpYmlsaXR5XHJcbiAgICogQHJldHVybnMgdGhlIHRyaW1tZWROYW1lIHZhcmlhYmxlLlxyXG4gICAqL1xyXG4gIGNoZWNrVmFsaWRSZXNwb25zaWJpbGl0eU5hbWUobmFtZTogYW55KSB7XHJcbiAgICBjb25zdCByZSA9IC8mbmJzcDt8PGJyPi9nO1xyXG4gICAgaWYgKG5hbWUpIHtcclxuICAgICAgdmFyIHRyaW1tZWROYW1lID0gbmFtZS50b1N0cmluZygpLnJlcGxhY2UocmUsICcnKS50cmltKCk7XHJcbiAgICAgIHRyaW1tZWROYW1lID0gdHJpbW1lZE5hbWUucmVwbGFjZSgvICArL2csICcgJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJpbW1lZE5hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgcmVzcG9uc2liaWxpdHkgbmFtZSBpcyB2YWxpZCwgYW5kIHRoZSBhc3NpZ25lZSBhbmQgYXNzaWdub3IgYXJlIG5vdCBlbXB0eSwgdGhlbiByZXR1cm5cclxuICAgKiB0cnVlLiBPdGhlcndpc2UsIHJldHVybiBmYWxzZVxyXG4gICAqIEBwYXJhbSB7YW55fSBkYXRhIC0gYW55IC0gdGhlIGRhdGEgdGhhdCBpcyBiZWluZyBwYXNzZWQgaW5cclxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gdmFsdWUuXHJcbiAgICovXHJcbiAgaXNWYWxpZERhdGEoZGF0YTogYW55KSB7XHJcbiAgICBjb25zdCByZXNwb25zaWJpbGl0eSA9IHRoaXMuY2hlY2tWYWxpZFJlc3BvbnNpYmlsaXR5TmFtZShcclxuICAgICAgZGF0YT8ucmVzcG9uc2liaWxpdHlOYW1lXHJcbiAgICApPy5sZW5ndGhcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogZmFsc2U7XHJcbiAgICBjb25zdCBhc3NpZ25lZSA9IGRhdGE/LmFzc2lnbmVlPy5sZW5ndGggPyB0cnVlIDogZmFsc2U7XHJcbiAgICBjb25zdCBmcmVxdWVuY3kgPSBkYXRhPy5mcmVxdWVuY3k/Lmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcclxuICAgIGlmIChhc3NpZ25lZSAmJiByZXNwb25zaWJpbGl0eSAmJiBmcmVxdWVuY3kgJiYgdGhpcy5pc1ZhbGlkVXNlcnMoZGF0YSkpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgYXNzaWdub3IgaXMgdGhlIHNhbWUgYXMgdGhlIG92ZXJzZWVyIG9yIHRoZSBOb3RpZnlPbkZhaWx1cmUsIG9yIGlmIHRoZSBhc3NpZ25vciBpcyBub3Qgc2V0XHJcbiAgICogYW5kIHRoZSBkZWZhdWx0T3duZXIgaXMgdGhlIHNhbWUgYXMgdGhlIG92ZXJzZWVyIG9yIHRoZSBOb3RpZnlPbkZhaWx1cmUsIG9yIGlmIHRoZSBhc3NpZ25lZSBpcyB0aGVcclxuICAgKiBzYW1lIGFzIHRoZSByZXZpZXdlciwgb3ZlcnNlZXIsIG9yIE5vdGlmeU9uRmFpbHVyZSwgb3IgaWYgdGhlIGFzc2lnbmVlIGlzIG5vdCBzZXQgYW5kIHRoZVxyXG4gICAqIGRlZmF1bHRPd25lciBpcyB0aGUgc2FtZSBhcyB0aGUgb3ZlcnNlZXIgb3IgdGhlIE5vdGlmeU9uRmFpbHVyZSwgb3IgaWYgdGhlIHJldmlld2VyIGlzIHRoZSBzYW1lIGFzXHJcbiAgICogdGhlIG92ZXJzZWVyIG9yIHRoZSBOb3RpZnlPbkZhaWx1cmUsIG9yIGlmIHRoZSBhc3NpZ25lZSBpcyBub3Qgc2V0LCB0aGVuIHJldHVybiBmYWxzZS4gT3RoZXJ3aXNlLFxyXG4gICAqIHJldHVybiB0cnVlXHJcbiAgICogQHBhcmFtIHthbnl9IGRhdGEgLSBhbnkgLSB0aGlzIGlzIHRoZSBkYXRhIHRoYXQgaXMgcGFzc2VkIGluIGZyb20gdGhlIGZvcm0uXHJcbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlLlxyXG4gICAqL1xyXG4gIGlzVmFsaWRVc2VycyhkYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmIChcclxuICAgICAgKGRhdGE/LmFzc2lnbm9yICYmXHJcbiAgICAgICAgKGRhdGE/LmFzc2lnbm9yID09IGRhdGE/Lm92ZXJzZWVyIHx8XHJcbiAgICAgICAgICBkYXRhPy5hc3NpZ25vciA9PSBkYXRhPy5ub3RpZnlPbkZhaWx1cmUpKSB8fFxyXG4gICAgICAoIWRhdGE/LmFzc2lnbm9yICYmXHJcbiAgICAgICAgKHRoaXMuZGVmYXVsdE93bmVyID09IGRhdGE/Lm92ZXJzZWVyIHx8XHJcbiAgICAgICAgICB0aGlzLmRlZmF1bHRPd25lciA9PSBkYXRhPy5ub3RpZnlPbkZhaWx1cmUpKSB8fFxyXG4gICAgICAoZGF0YT8uYXNzaWduZWUgJiZcclxuICAgICAgICAoZGF0YT8uYXNzaWduZWUgPT0gZGF0YT8ucmV2aWV3ZXIgfHxcclxuICAgICAgICAgIGRhdGE/LmFzc2lnbmVlID09IGRhdGE/Lm92ZXJzZWVyIHx8XHJcbiAgICAgICAgICBkYXRhPy5hc3NpZ25lZSA9PSBkYXRhPy5ub3RpZnlPbkZhaWx1cmUpKSB8fFxyXG4gICAgICAoIWRhdGE/LmFzc2lnbmVlICYmXHJcbiAgICAgICAgKHRoaXMuZGVmYXVsdE93bmVyID09IGRhdGE/Lm92ZXJzZWVyIHx8XHJcbiAgICAgICAgICB0aGlzLmRlZmF1bHRPd25lciA9PSBkYXRhPy5ub3RpZnlPbkZhaWx1cmUpKSB8fFxyXG4gICAgICAoZGF0YT8ucmV2aWV3ZXIgJiZcclxuICAgICAgICAoZGF0YT8ucmV2aWV3ZXIgPT0gZGF0YT8ub3ZlcnNlZXIgfHxcclxuICAgICAgICAgIGRhdGE/LnJldmlld2VyID09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZSkpIHx8XHJcbiAgICAgICFkYXRhPy5hc3NpZ25lZVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgaW4gYSBkYXRhIG9iamVjdCBhbmQgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCA0IGJvb2xlYW4gcHJvcGVydGllcy5cclxuICAgKiBUaGUgYm9vbGVhbiBwcm9wZXJ0aWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZXMgb2YgdGhlIGRhdGEgb2JqZWN0LlxyXG4gICAqIEBwYXJhbSB7YW55fSBkYXRhIC0gYW55ID0ge1xyXG4gICAqIEByZXR1cm5zIHtcclxuICAgKiAgIGlzVmFsaWRBc3NpZ25lZTogdHJ1ZSxcclxuICAgKiAgIGlzVmFsaWRBc3NpZ25vcjogdHJ1ZSxcclxuICAgKiAgIGlzVmFsaWRSZXZpZXdlcjogdHJ1ZSxcclxuICAgKiAgIGlzVmFsaWRPdmVyc2VlcjogdHJ1ZVxyXG4gICAqIH1cclxuICAgKi9cclxuICB2YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShkYXRhOiBhbnkpOiBhbnkge1xyXG4gICAgY29uc3QgcHJvZ3JhbSA9IHRoaXMudGVtcGxhdGVJbmZvPy5jYXRlZ29yeUxpc3Q/LmZpbHRlcihcclxuICAgICAgKHByb2dyYW06IGFueSkgPT4gcHJvZ3JhbT8ucHJvZ3JhbU5hbWUgPT09IGRhdGE/LnByb2dyYW1cclxuICAgICk7XHJcbiAgICBjb25zdCBzZWxlY3RlZEFzc2lnbmVlID0gdGhpcy50ZW1wbGF0ZUluZm8/LmFzc2lnbmVlc0xpc3Q/LmZpbHRlcihcclxuICAgICAgKGFzc2lnbmVlOiBhbnkpID0+IGFzc2lnbmVlPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/LmFzc2lnbmVlXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRBc3NpZ25vciA9IHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25vcnNMaXN0Py5maWx0ZXIoXHJcbiAgICAgIChhc3NpZ25vcjogYW55KSA9PiBhc3NpZ25vcj8ubmFtZUFuZEVtYWlsID09PSBkYXRhPy5hc3NpZ25vclxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkUmV2aWV3ZXIgPSB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0Py5maWx0ZXIoXHJcbiAgICAgIChyZXZpZXdlcjogYW55KSA9PiByZXZpZXdlcj8ubmFtZUFuZEVtYWlsID09PSBkYXRhPy5yZXZpZXdlclxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkT3ZlcnNlZXIgPSB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0Py5maWx0ZXIoXHJcbiAgICAgIChvdmVyc2VlcjogYW55KSA9PiBvdmVyc2Vlcj8ubmFtZUFuZEVtYWlsID09PSBkYXRhPy5vdmVyc2VlclxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkTm90aWZ5T25GYWlsdXJlID0gdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdD8uZmlsdGVyKFxyXG4gICAgICAobm90aWZ5T25GYWlsdXJlOiBhbnkpID0+XHJcbiAgICAgICAgbm90aWZ5T25GYWlsdXJlPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZVxyXG4gICAgKTtcclxuICAgIGxldCBpc1ZhbGlkQXNzaWduZWUgPSB0cnVlO1xyXG4gICAgbGV0IGlzVmFsaWRBc3NpZ25vciA9IHRydWU7XHJcbiAgICBsZXQgaXNWYWxpZFJldmlld2VyID0gdHJ1ZTtcclxuICAgIGxldCBpc1ZhbGlkT3ZlcnNlZXIgPSB0cnVlO1xyXG4gICAgbGV0IGlzVmFsaWROb3RpZnlPbkZhaWx1cmUgPSB0cnVlO1xyXG4gICAgaWYgKHByb2dyYW0gJiYgdGhpcy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb24pIHtcclxuICAgICAgaWYgKHByb2dyYW1bMF0/LmFzc2lnbmVlPy5sZW5ndGggJiYgc2VsZWN0ZWRBc3NpZ25lZT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgaXNWYWxpZEFzc2lnbmVlID0gcHJvZ3JhbVswXT8uYXNzaWduZWU/LmluY2x1ZGVzKFxyXG4gICAgICAgICAgc2VsZWN0ZWRBc3NpZ25lZVswXT8ubXlfbWVtYmVyX2lkXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9ncmFtWzBdPy5yZXZpZXdlcj8ubGVuZ3RoICYmIHNlbGVjdGVkUmV2aWV3ZXI/Lmxlbmd0aCkge1xyXG4gICAgICAgIGlzVmFsaWRSZXZpZXdlciA9IHByb2dyYW1bMF0/LnJldmlld2VyPy5pbmNsdWRlcyhcclxuICAgICAgICAgIHNlbGVjdGVkUmV2aWV3ZXJbMF0/Lm15X21lbWJlcl9pZFxyXG4gICAgICAgIClcclxuICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocHJvZ3JhbVswXT8ub3ZlcnNlZXI/Lmxlbmd0aCAmJiBzZWxlY3RlZE92ZXJzZWVyPy5sZW5ndGgpIHtcclxuICAgICAgICBpc1ZhbGlkT3ZlcnNlZXIgPSBwcm9ncmFtWzBdPy5vdmVyc2Vlcj8uaW5jbHVkZXMoXHJcbiAgICAgICAgICBzZWxlY3RlZE92ZXJzZWVyWzBdPy5teV9tZW1iZXJfaWRcclxuICAgICAgICApXHJcbiAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb2dyYW1bMF0/Lm92ZXJzZWVyPy5sZW5ndGggJiYgc2VsZWN0ZWROb3RpZnlPbkZhaWx1cmU/Lmxlbmd0aCkge1xyXG4gICAgICAgIGlzVmFsaWROb3RpZnlPbkZhaWx1cmUgPSBwcm9ncmFtWzBdPy5vdmVyc2Vlcj8uaW5jbHVkZXMoXHJcbiAgICAgICAgICBzZWxlY3RlZE5vdGlmeU9uRmFpbHVyZVswXT8ubXlfbWVtYmVyX2lkXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpc1ZhbGlkQXNzaWduZWU6IGlzVmFsaWRBc3NpZ25lZSxcclxuICAgICAgaXNWYWxpZEFzc2lnbm9yOiBpc1ZhbGlkQXNzaWdub3IsXHJcbiAgICAgIGlzVmFsaWRSZXZpZXdlcjogaXNWYWxpZFJldmlld2VyLFxyXG4gICAgICBpc1ZhbGlkT3ZlcnNlZXI6IGlzVmFsaWRPdmVyc2VlcixcclxuICAgICAgaXNWYWxpZE5vdGlmeU9uRmFpbHVyZTogaXNWYWxpZE5vdGlmeU9uRmFpbHVyZSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyB0d28gc3RyaW5ncyBhcyBhcmd1bWVudHMsIGFuZCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIHRocmVlIHByb3BlcnRpZXNcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvZ3JhbU5hbWUgLSBzdHJpbmcgLSZndDsgTmFtZSBvZiB0aGUgcHJvZ3JhbVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hpbGVQcm9ncmFtXSAtIHN0cmluZyA9Jmd0OyB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBzdWItcHJvZ3JhbVxyXG4gICAqIEByZXR1cm5zIHtcclxuICAgKiAgIHByb2dyYW1JZDogMSxcclxuICAgKiAgIGNoaWxkUHJvZ3JhbUlkOiAyLFxyXG4gICAqICAgY2F0ZWdvcnlJZDogJzEsMidcclxuICAgKiB9XHJcbiAgICovXHJcbiAgZ2V0UHJvZ3JhbUlkKHByb2dyYW1OYW1lOiBzdHJpbmcsIGNoaWxlUHJvZ3JhbT86IHN0cmluZyk6IGFueSB7XHJcbiAgICBjb25zdCBwcm9ncmFtID0gdGhpcy50ZW1wbGF0ZUluZm8/LmNhdGVnb3J5TGlzdD8uZmlsdGVyKFxyXG4gICAgICAocHJvZ3JhbTogYW55KSA9PiBwcm9ncmFtPy5wcm9ncmFtTmFtZSA9PT0gcHJvZ3JhbU5hbWVcclxuICAgICk7XHJcbiAgICBsZXQgc3ViUHJvZ3JhbTtcclxuICAgIGxldCBzdWJQcm9ncmFtSWQ7XHJcbiAgICBsZXQgY2F0ZWdvcnlJZDtcclxuICAgIGlmIChjaGlsZVByb2dyYW0/Lmxlbmd0aCAmJiBwcm9ncmFtPy5sZW5ndGgpIHtcclxuICAgICAgc3ViUHJvZ3JhbSA9IHByb2dyYW1bMF0/LmNoaWxkQ2F0ZWdvcnk/LmZpbHRlcihcclxuICAgICAgICAoc3ViUHJvZ3JhbTogYW55KSA9PiBzdWJQcm9ncmFtPy5uYW1lID09PSBjaGlsZVByb2dyYW1cclxuICAgICAgKTtcclxuICAgICAgc3ViUHJvZ3JhbUlkID0gc3ViUHJvZ3JhbT8ubGVuZ3RoID8gc3ViUHJvZ3JhbVswXT8uaWQgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHN1YlByb2dyYW1JZCAmJiBwcm9ncmFtPy5sZW5ndGgpIHtcclxuICAgICAgY2F0ZWdvcnlJZCA9XHJcbiAgICAgICAgcHJvZ3JhbVswXT8ucHJvZ3JhbUlkPy50b1N0cmluZygpICsgJywnICsgc3ViUHJvZ3JhbUlkPy50b1N0cmluZygpO1xyXG4gICAgfSBlbHNlIGlmIChwcm9ncmFtPy5sZW5ndGgpIHtcclxuICAgICAgY2F0ZWdvcnlJZCA9IHByb2dyYW1bMF0/LnByb2dyYW1JZD8udG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHByb2dyYW1JZDogcHJvZ3JhbT8ubGVuZ3RoID8gcHJvZ3JhbVswXT8ucHJvZ3JhbUlkIDogdW5kZWZpbmVkLFxyXG4gICAgICBjaGlsZFByb2dyYW1JZDogc3ViUHJvZ3JhbUlkLFxyXG4gICAgICBjYXRlZ29yeUlkOiBjYXRlZ29yeUlkLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIGEgc3RyaW5nIGFzIGFuIGFyZ3VtZW50IGFuZCByZXR1cm5zIGEgc3RyaW5nLlxyXG4gICAqIEBwYXJhbSB7YW55fSBpdGVtIC0gdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgZ3JvdXAgdGhhdCBpcyBzZWxlY3RlZCBmcm9tIHRoZSBkcm9wZG93bi5cclxuICAgKiBpdCB3aWxsIHJldHVybiBlbXBsb3llZSBpZCBpbiB0aGlzIGZvcm0gJzEyMzQsMjM0NScuXHJcbiAgICovXHJcbiAgZ2V0RW1wbG95ZWVJZEZyb21Hcm91cChpdGVtOiBhbnkpIHtcclxuICAgIGxldCBlbXBJZDogYW55ID0gW107XHJcbiAgICBsZXQgZW1wbG95ZWVfaWQ6IGFueSA9IFtdO1xyXG4gICAgdGhpcy50ZW1wbGF0ZUluZm8/LmFzc2lnbmVlc0xpc3Q/LmZvckVhY2goKGVuRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChlbkVsZW1lbnQ/Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgZW1wSWQgPSBlbkVsZW1lbnQ/Lm15X21lbWJlcl9pZDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAoZW1wSWQ/Lmxlbmd0aCkge1xyXG4gICAgICBlbXBJZD8uZm9yRWFjaCgoaWQ6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3QuZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAodXNlcj8ubXlfbWVtYmVyX2lkID09IGlkKSB7XHJcbiAgICAgICAgICAgIGVtcGxveWVlX2lkPy5wdXNoKHVzZXI/LmVtcGxveWVlX2lkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZW1wbG95ZWVfaWQ/LnRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgaXRlbSBpcyBhIGdyb3VwLCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKiBAcGFyYW0ge2FueX0gaXRlbSAtIGFueSAtIHRoZSBpdGVtIHRoYXQgaXMgYmVpbmcgY2hlY2tlZFxyXG4gICAqL1xyXG4gIGlzR3JvdXBTZWxlY3RlZChpdGVtOiBhbnkpIHtcclxuICAgIGxldCBpc0dyb3VwID0gZmFsc2U7XHJcbiAgICB0aGlzLnRlbXBsYXRlSW5mby5hc3NpZ25lZXNMaXN0LmZvckVhY2goKGVuRWxlbWVudDogYW55KTogYW55ID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGVuRWxlbWVudC5uYW1lQW5kRW1haWwgPT0gaXRlbSAmJlxyXG4gICAgICAgIChpdGVtPy5pbmNsdWRlcygnVXNlcnMpJykgfHwgaXRlbT8uaW5jbHVkZXMoJ1VzZXIpJykpICYmXHJcbiAgICAgICAgdHlwZW9mIGVuRWxlbWVudD8ubXlfbWVtYmVyX2lkID09ICdvYmplY3QnXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlzR3JvdXAgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpc0dyb3VwO1xyXG4gIH1cclxufVxyXG4iLCI8IS0tIDxkaXYgY2xhc3M9XCJhZGQtbXVsdGlwbGUtcmlza1wiIFthdHRyLmlkXT1cIidzY3JvbGxSZWZlcmVuY2UnXCIgPlxyXG4gICAgPCEtIC0gbWFpbiBjb250YWluZXIgc3RhcnRzIGhlcmUgLSAtPlxyXG4gICAgPGRpdiBjbGFzcz1cImFkZC1tdWx0aXBsZS1yaXNrLWJvZHlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkLW11bHRpcGxlLXJpc2stY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL3dvcmtmbG93LWVuZ2luZS9hc3NldHMvd29ya2Zsb3cvc3ByZWFkc2hlZXQtbXVsdGlwbGUtY2F0ZWdvcnkuc3ZnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxoND5Zb3UgY2FuIGVudHJ1c3QgbXVsdGlwbGUgcmVzcG9uc2liaWxpdGllcyBpbiBqdXN0IHR3byBlYXN5IHN0ZXBzOjwvaDQ+XHJcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3RcIj5cclxuICAgICAgICAgICAgICAgIDxsaT5Eb3dubG9hZCB0aGUgdGVtcGxhdGUgYW5kIGZpbGwgaW4gdGhlIGRldGFpbHMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5VcGxvYWQgdGhlIC54bHN4IGZpbGUgYW5kIHlvdeKAmXJlIGdvb2QgdG8gZ28hPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkb3dubG9hZFwiICpuZ0lmPVwiZG93bmxvYWRTdGF0dXMgPT09ICdOT1RfRE9XTkxPQURJTkcnXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkVGVtcGxhdGUoKVwiIHR5cGU9XCJidXR0b25cIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZTkxYjs8L2k+IERvd25sb2FkIFRlbXBsYXRlPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidWxrLWJ0bi1wcm9ncmVzc1wiICpuZ0lmPVwiZG93bmxvYWRTdGF0dXMgPT09ICdET1dOTE9BRElORydcIj5cclxuICAgICAgICAgICAgICAgIERvd25sb2FkIGluIFByb2dyZXNzXHJcbiAgICAgICAgICAgICAgICA8YXBwLWxpbmUtbG9hZGVyIFtsb2FkZXJIZWlnaHRdPVwiJzInXCI+PC9hcHAtbGluZS1sb2FkZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZG93bmxvYWRTdGF0dXMgPT09ICdET1dOTE9BREVEJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1bGstYnRuLXByb2dyZXNzXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MWM7PC9pPkRvd25sb2FkIENvbXBsZXRlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnVsay1idG4tYWdhaW5cIj5cclxuICAgICAgICAgICAgICAgICAgICBJcyB0aGUgZmlsZSBub3QgZG93bmxvYWRlZD9cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJkb3dubG9hZFRlbXBsYXRlKClcIj5SZXRyeSBEb3dubG9hZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImlzV3JvbmdGaWxlIHx8IGlzV3JvbmdGb3JtYXR8fCBpc0ZpbGVFbXB0eVwiXHJcbiAgICAgICAgICAgID57e2Vycm9yTWVzc2FnZX19PC9wPiAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+IC0tPlxyXG48YXBwLWJ1bGstcmVzcG9uc2liaWxpdHktdmlldyAqbmdJZj1cInNob3dFeGNlbFwiXHJcbiAgICBbcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkXT1cInJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZFwiXHJcbiAgICBbYnVsa1VwbG9hZF09XCJidWxrVXBsb2FkXCJcclxuICAgIFtmaWxlTmFtZV09XCJmaWxlTmFtZVwiXHJcbiAgICBbbG9hZGVyXT1cImxvYWRlclwiXHJcbiAgICBbZGVmYXVsdE93bmVyXT1cImRlZmF1bHRPd25lclwiXHJcbiAgICBbdGFiVHlwZV09XCJ0YWJUeXBlXCJcclxuICAgIFtidWxrVXBsb2FkXT1cImJ1bGtVcGxvYWRcIlxyXG4gICAgKHN1Ym1pdFJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCk9XCJzdWJtaXRSZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQoKVwiXHJcbiAgICAoc2VsZWN0ZWRUYWIpPVwic2VsZWN0ZWRUYWIoJGV2ZW50KVwiXHJcbiAgICAoY2FuY2VsKT1cInJlc2V0KClcIlxyXG4gICAgW3Jlc3BvbnNpYmlsaXR5VHlwZV09XCInbXVsdGlUYWInXCI+XHJcbjwvYXBwLWJ1bGstcmVzcG9uc2liaWxpdHktdmlldz5cclxuPGFwcC1sb2FkZXItaW5saW5lICpuZ0lmPVwibG9hZGVyXCI+PC9hcHAtbG9hZGVyLWlubGluZT5cclxuXHJcbjxpbnB1dCB0eXBlPVwiZmlsZVwiIFsobmdNb2RlbCldPVwiZmlsZVZhbHVlXCIgaWQ9XCJmaWxlSW5wdXRcIiBjbGFzcz1cImhpZGRlbi1pbnB1dFwiIGFjY2VwdD1cIi54bHN4XCIgKGNoYW5nZSk9XCJ1cGxvYWRlZEZpbGUoJGV2ZW50KVwiIG11bHRpcGxlIC8+XHJcbjxhcHAtc21pbGV5LWRpYWxvZy1pbmxpbmUgKm5nSWY9XCJzaG93U21pbGV5XCIgW21lc3NhZ2VdPVwic21pbGV5TWVzc2FnZVwiIFthY3Rpb25CdXR0b25zXT1cImFjdGlvbkJ1dHRvbnNcIiAoYWN0aW9uKT1cImFjdGlvbigkZXZlbnQpXCIgKGNsb3NlU21pbGV5KT1cImNsb3NlU21pbGV5KCRldmVudClcIj48L2FwcC1zbWlsZXktZGlhbG9nLWlubGluZT4iXX0=
|