@doolehealth/service-lib 0.0.4 → 0.0.6
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/README.md +112 -13
- package/esm2022/lib/configuration.mjs +1 -1
- package/esm2022/lib/models/notifications/notification-options.mjs +192 -0
- package/esm2022/lib/models/shared-care-plan.mjs +223 -0
- package/esm2022/lib/models/user.mjs +1 -1
- package/esm2022/lib/service-lib.component.mjs +5 -5
- package/esm2022/lib/service-lib.module.mjs +4 -4
- package/esm2022/lib/services/analytics.service.mjs +20 -11
- package/esm2022/lib/services/api-endpoints.service.mjs +22 -6
- package/esm2022/lib/services/authentication.service.mjs +74 -52
- package/esm2022/lib/services/change-endpoints.service.mjs +46 -22
- package/esm2022/lib/services/date.service.mjs +106 -45
- package/esm2022/lib/services/doole.service.mjs +658 -221
- package/esm2022/lib/services/encryption.service.mjs +3 -3
- package/esm2022/lib/services/error.service.mjs +3 -3
- package/esm2022/lib/services/events.service.mjs +5 -5
- package/esm2022/lib/services/firebase/auth/firebase-auth.service.mjs +154 -0
- package/esm2022/lib/services/firebase/auth/firebase-profile.model.mjs +7 -0
- package/esm2022/lib/services/health.service.mjs +303 -0
- package/esm2022/lib/services/highcharts.service.mjs +37 -67
- package/esm2022/lib/services/http.service.mjs +14 -14
- package/esm2022/lib/services/language.model.mjs +3 -0
- package/esm2022/lib/services/language.service.mjs +6 -6
- package/esm2022/lib/services/loading.service.mjs +3 -3
- package/esm2022/lib/services/logging.service.mjs +4 -4
- package/esm2022/lib/services/navigation.service.mjs +108 -9
- package/esm2022/lib/services/network.service.mjs +7 -7
- package/esm2022/lib/services/notification.service.mjs +10 -96
- package/esm2022/lib/services/opentok.service.mjs +10 -7
- package/esm2022/lib/services/permission.service.mjs +94 -0
- package/esm2022/lib/services/roles.service.mjs +9 -8
- package/esm2022/lib/services/shared-care-plan/shared-care-plan.service.mjs +103 -0
- package/esm2022/lib/services/storage.service.mjs +3 -3
- package/esm2022/lib/services/token.service.mjs +7 -7
- package/esm2022/lib/utils/chatParameters.mjs +17 -0
- package/esm2022/lib/utils/data-store.mjs +62 -0
- package/esm2022/lib/utils/query-string-parameters.mjs +11 -0
- package/esm2022/lib/utils/url-builder.mjs +15 -0
- package/esm2022/public-api.mjs +8 -9
- package/fesm2022/doolehealth-service-lib.mjs +2055 -1228
- package/fesm2022/doolehealth-service-lib.mjs.map +1 -1
- package/lib/configuration.d.ts +4 -2
- package/lib/{util → models/notifications}/notification-options.d.ts +0 -32
- package/lib/models/shared-care-plan.d.ts +206 -0
- package/lib/models/user.d.ts +2 -0
- package/lib/service-lib.component.d.ts +1 -1
- package/lib/services/analytics.service.d.ts +6 -3
- package/lib/services/api-endpoints.service.d.ts +3 -0
- package/lib/services/authentication.service.d.ts +27 -25
- package/lib/services/change-endpoints.service.d.ts +1 -0
- package/lib/services/date.service.d.ts +15 -8
- package/lib/services/doole.service.d.ts +64 -23
- package/lib/services/{auth → firebase/auth}/firebase-auth.service.d.ts +1 -1
- package/lib/services/{auth → firebase/auth}/firebase-profile.model.d.ts +1 -1
- package/lib/services/health.service.d.ts +49 -0
- package/lib/services/highcharts.service.d.ts +1 -2
- package/lib/services/http.service.d.ts +1 -1
- package/lib/services/language.service.d.ts +1 -1
- package/lib/services/navigation.service.d.ts +6 -1
- package/lib/services/notification.service.d.ts +2 -7
- package/lib/services/permission.service.d.ts +33 -0
- package/lib/services/roles.service.d.ts +3 -2
- package/lib/services/shared-care-plan/shared-care-plan.service.d.ts +20 -0
- package/lib/{util → utils}/data-store.d.ts +3 -1
- package/package.json +2 -15
- package/public-api.d.ts +7 -8
- package/esm2022/lib/services/auth/firebase-auth.service.mjs +0 -155
- package/esm2022/lib/services/auth/firebase-profile.model.mjs +0 -7
- package/esm2022/lib/services/pusher/pusher-alarm.service.mjs +0 -39
- package/esm2022/lib/services/pusher/pusher-challenge-notifications.service.mjs +0 -110
- package/esm2022/lib/services/pusher/pusher-connection.service.mjs +0 -73
- package/esm2022/lib/services/pusher/pusher-message.service.mjs +0 -27
- package/esm2022/lib/services/pusher/pusher-notification.service.mjs +0 -116
- package/esm2022/lib/util/chatParameters.mjs +0 -17
- package/esm2022/lib/util/data-store.mjs +0 -54
- package/esm2022/lib/util/environment.mjs +0 -29
- package/esm2022/lib/util/language.model.mjs +0 -3
- package/esm2022/lib/util/notification-options.mjs +0 -245
- package/esm2022/lib/util/query-string-parameters.mjs +0 -11
- package/esm2022/lib/util/url-builder.mjs +0 -15
- package/lib/services/pusher/pusher-alarm.service.d.ts +0 -16
- package/lib/services/pusher/pusher-challenge-notifications.service.d.ts +0 -40
- package/lib/services/pusher/pusher-connection.service.d.ts +0 -24
- package/lib/services/pusher/pusher-message.service.d.ts +0 -13
- package/lib/services/pusher/pusher-notification.service.d.ts +0 -32
- package/lib/util/environment.d.ts +0 -18
- /package/lib/{util → services}/language.model.d.ts +0 -0
- /package/lib/{util → utils}/chatParameters.d.ts +0 -0
- /package/lib/{util → utils}/query-string-parameters.d.ts +0 -0
- /package/lib/{util → utils}/url-builder.d.ts +0 -0
|
@@ -55,7 +55,6 @@ export class HighchartsService {
|
|
|
55
55
|
break;
|
|
56
56
|
default:
|
|
57
57
|
this.scrollMinWidth = 500;
|
|
58
|
-
break;
|
|
59
58
|
}
|
|
60
59
|
}
|
|
61
60
|
addTooltip(interval) {
|
|
@@ -70,11 +69,10 @@ export class HighchartsService {
|
|
|
70
69
|
this.withTooltip = true;
|
|
71
70
|
break;
|
|
72
71
|
case '1y':
|
|
73
|
-
this.withTooltip = false;
|
|
74
72
|
break;
|
|
73
|
+
this.withTooltip = false;
|
|
75
74
|
default:
|
|
76
75
|
this.withTooltip = false;
|
|
77
|
-
break;
|
|
78
76
|
}
|
|
79
77
|
}
|
|
80
78
|
getWeekday() {
|
|
@@ -103,7 +101,7 @@ export class HighchartsService {
|
|
|
103
101
|
this.xAxis = { type: type, maxRange: maxRange, categories: categories, crosshair: true };
|
|
104
102
|
}
|
|
105
103
|
setYAxis(minY, maxY, ranges, text) {
|
|
106
|
-
console.log('[ActivityGoalPage] generateChart() maxY: ', maxY);
|
|
104
|
+
//console.log('[ActivityGoalPage] generateChart() maxY: ', maxY);
|
|
107
105
|
//Solo para HPC requieren que el valor mínimo de gráfica sea 0, aquí valido que si no hay valores negativos se el minY = 0;
|
|
108
106
|
const y_min = minY; // (minY > 0) ? 0 : minY;
|
|
109
107
|
const y_max = (maxY) ? maxY : this.maxY;
|
|
@@ -135,7 +133,7 @@ export class HighchartsService {
|
|
|
135
133
|
}
|
|
136
134
|
}
|
|
137
135
|
getOptionsChart(graphBaseOn) {
|
|
138
|
-
|
|
136
|
+
////console.log('[ActivityGoalPage] generateChart() graphBaseOn: ', graphBaseOn);
|
|
139
137
|
let charts; //= HighCharts
|
|
140
138
|
switch (graphBaseOn) {
|
|
141
139
|
case 'avg':
|
|
@@ -276,57 +274,43 @@ export class HighchartsService {
|
|
|
276
274
|
return charts;
|
|
277
275
|
}
|
|
278
276
|
groupByCategory(interval, element) {
|
|
279
|
-
|
|
277
|
+
let language = this.languageService.getCurrent();
|
|
278
|
+
////console.log('[HighchartsService] groupByCategory ', element.date_value);
|
|
280
279
|
let elementDate = new Date(element.date_value);
|
|
281
280
|
let groupByDate = "";
|
|
282
281
|
let tooltip = "";
|
|
283
|
-
|
|
282
|
+
////console.log('[HighchartsService] groupByCategory ', element.date_value);
|
|
284
283
|
switch (interval) {
|
|
285
284
|
case '1d': // group by day
|
|
286
285
|
let hour = element.date?.split(' ')[1];
|
|
287
286
|
groupByDate = hour;
|
|
288
287
|
// let isAllValue = (this.graphBaseOn == 'lasValue' || this.graphBaseOn == 'range')? true:false
|
|
289
288
|
// groupByDate = isAllValue? hour : hour.split(':')[0] + ':' + hour.split(':')[1];
|
|
290
|
-
tooltip = moment(elementDate, "YYYY-MM-DD").locale('es').date() + '/' + elementDate.toLocaleString(
|
|
289
|
+
tooltip = moment(elementDate, "YYYY-MM-DD").locale('es').date() + '/' + elementDate.toLocaleString('es-ES', { month: 'short' }) + '/' + elementDate.getFullYear() + ' ' + groupByDate;
|
|
291
290
|
break;
|
|
292
291
|
case '1w':
|
|
293
292
|
let date = this.formatSelectedDate(element.date_value);
|
|
294
|
-
let day = date.toLocaleString(
|
|
293
|
+
let day = date.toLocaleString(language, { weekday: 'short' });
|
|
295
294
|
groupByDate = this.titleCase(day) + ' ' + this.formatSelectedDate2(element.date_value, 'd');
|
|
296
|
-
tooltip = moment(elementDate, "YYYY-MM-DD").locale('es').date() + '/' + elementDate.toLocaleString(
|
|
295
|
+
tooltip = moment(elementDate, "YYYY-MM-DD").locale('es').date() + '/' + elementDate.toLocaleString('es-ES', { month: 'short' }) + '/' + elementDate.getFullYear();
|
|
297
296
|
break;
|
|
298
297
|
case '1m':
|
|
299
298
|
//let month = elementDate.toLocaleString('es-ES', { month: 'short' });
|
|
300
299
|
groupByDate = this.formatSelectedDate2(element.date_value, 'd'); //+ ' ' + month
|
|
301
|
-
tooltip = moment(elementDate, "YYYY-MM-DD").locale('es').date() + '/' + elementDate.toLocaleString(
|
|
300
|
+
tooltip = moment(elementDate, "YYYY-MM-DD").locale('es').date() + '/' + elementDate.toLocaleString('es-ES', { month: 'short' }) + '/' + elementDate.getFullYear();
|
|
302
301
|
break;
|
|
303
302
|
case '1y':
|
|
304
303
|
let month = new Date();
|
|
305
304
|
month.setMonth(Number(element.date_value) - 1);
|
|
306
|
-
groupByDate = month.toLocaleString(
|
|
305
|
+
groupByDate = month.toLocaleString(language, { month: 'short' });
|
|
307
306
|
groupByDate = this.titleCase(groupByDate);
|
|
308
|
-
tooltip = month.toLocaleString(
|
|
307
|
+
tooltip = month.toLocaleString(language, { month: 'short' }) + '/' + month.getFullYear();
|
|
309
308
|
break;
|
|
310
309
|
default:
|
|
311
310
|
break;
|
|
312
311
|
}
|
|
313
312
|
return { groupByDate: groupByDate, tooltip: tooltip };
|
|
314
313
|
}
|
|
315
|
-
returnShortDate() {
|
|
316
|
-
const idioma = this.setLocale();
|
|
317
|
-
switch (idioma) {
|
|
318
|
-
case 'es':
|
|
319
|
-
return 'es-ES';
|
|
320
|
-
case 'en':
|
|
321
|
-
return 'en-US';
|
|
322
|
-
case 'ca':
|
|
323
|
-
return 'ca-ES';
|
|
324
|
-
case 'fr':
|
|
325
|
-
return 'fr-FR';
|
|
326
|
-
default:
|
|
327
|
-
return idioma;
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
314
|
formatSelectedDate2(d, format) {
|
|
331
315
|
var auxdate = d.split(' ');
|
|
332
316
|
d = d.replace(' ', 'T');
|
|
@@ -378,7 +362,7 @@ export class HighchartsService {
|
|
|
378
362
|
groups[group.groupByDate].tooltip = group.tooltip;
|
|
379
363
|
return groups;
|
|
380
364
|
}, {});
|
|
381
|
-
|
|
365
|
+
////console.log('[HighchartsService] rangeGraph', groups);
|
|
382
366
|
Object.keys(groups).map((date) => {
|
|
383
367
|
datesA.push(date);
|
|
384
368
|
valuesA.push(groups[date].value);
|
|
@@ -389,7 +373,7 @@ export class HighchartsService {
|
|
|
389
373
|
tooltip.push(groups[date].tooltip);
|
|
390
374
|
graphData.push([date, groups[date].value]);
|
|
391
375
|
});
|
|
392
|
-
|
|
376
|
+
////console.log('[HighchartsService] graphData', graphData);
|
|
393
377
|
groupData = { dates: datesA, valuesA: valuesA, graphData: graphData };
|
|
394
378
|
break;
|
|
395
379
|
case 'range':
|
|
@@ -408,7 +392,7 @@ export class HighchartsService {
|
|
|
408
392
|
groups[group.groupByDate].tooltip = group.tooltip;
|
|
409
393
|
return groups;
|
|
410
394
|
}, {});
|
|
411
|
-
|
|
395
|
+
////console.log('[HighchartsService] rangeGraph', groups);
|
|
412
396
|
Object.keys(groups).map((date) => {
|
|
413
397
|
datesA.push(date);
|
|
414
398
|
valuesA.push(groups[date].valueMax);
|
|
@@ -420,7 +404,7 @@ export class HighchartsService {
|
|
|
420
404
|
tooltip.push(groups[date].tooltip);
|
|
421
405
|
graphData.push([date, groups[date].valueMin, groups[date].valueMax]);
|
|
422
406
|
});
|
|
423
|
-
|
|
407
|
+
////console.log('[HighchartsService] graphData', graphData);
|
|
424
408
|
groupData = { dates: datesA, valuesA: valuesA, valuesB: valuesB, graphData: graphData };
|
|
425
409
|
break;
|
|
426
410
|
case 'sum':
|
|
@@ -436,7 +420,7 @@ export class HighchartsService {
|
|
|
436
420
|
groups[group.groupByDate].tooltip = group.tooltip;
|
|
437
421
|
return groups;
|
|
438
422
|
}, {});
|
|
439
|
-
|
|
423
|
+
////console.log('[HighchartsService] rangeGraph', groups);
|
|
440
424
|
Object.keys(groups).map((date) => {
|
|
441
425
|
datesA.push(date);
|
|
442
426
|
valuesA.push(groups[date].value);
|
|
@@ -447,7 +431,7 @@ export class HighchartsService {
|
|
|
447
431
|
tooltip.push(groups[date].tooltip);
|
|
448
432
|
graphData.push([date, groups[date].value]);
|
|
449
433
|
});
|
|
450
|
-
|
|
434
|
+
////console.log('[HighchartsService] graphData', graphData);
|
|
451
435
|
groupData = { dates: datesA, valuesA: valuesA, graphData: graphData };
|
|
452
436
|
break;
|
|
453
437
|
case 'lasValue':
|
|
@@ -456,28 +440,14 @@ export class HighchartsService {
|
|
|
456
440
|
const value = Number(element.value);
|
|
457
441
|
const group = this.groupByCategory(interval, element);
|
|
458
442
|
// If date doesn't exist in array, then create it
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
groups[group.groupByDate] = [];
|
|
463
|
-
groups[group.groupByDate].value = value;
|
|
464
|
-
groups[group.groupByDate].tooltip = group.tooltip;
|
|
465
|
-
}
|
|
466
|
-
// }
|
|
467
|
-
}
|
|
468
|
-
else {
|
|
469
|
-
groups[group.groupByDate].value += value;
|
|
470
|
-
groups[group.groupByDate].tooltip = group.tooltip;
|
|
443
|
+
if (!groups[group.groupByDate]) {
|
|
444
|
+
groups[group.groupByDate] = [];
|
|
445
|
+
groups[group.groupByDate].value = 0;
|
|
471
446
|
}
|
|
447
|
+
groups[group.groupByDate].value += value;
|
|
448
|
+
groups[group.groupByDate].tooltip = group.tooltip;
|
|
472
449
|
});
|
|
473
|
-
|
|
474
|
-
groups[group.groupByDate] = [];
|
|
475
|
-
groups[group.groupByDate].value = 0;
|
|
476
|
-
}
|
|
477
|
-
groups[group.groupByDate].value += value;
|
|
478
|
-
groups[group.groupByDate].tooltip = group.tooltip
|
|
479
|
-
})*/
|
|
480
|
-
//console.log('[HighchartsService] rangeGraph', groups);
|
|
450
|
+
////console.log('[HighchartsService] rangeGraph', groups);
|
|
481
451
|
Object.keys(groups).map((date) => {
|
|
482
452
|
datesA.push(date);
|
|
483
453
|
valuesA.push(groups[date].value);
|
|
@@ -488,7 +458,7 @@ export class HighchartsService {
|
|
|
488
458
|
tooltip.push(groups[date].tooltip);
|
|
489
459
|
graphData.push([date, groups[date].value]);
|
|
490
460
|
});
|
|
491
|
-
|
|
461
|
+
////console.log('[HighchartsService] graphData', graphData);
|
|
492
462
|
groupData = { dates: datesA, valuesA: valuesA, graphData: graphData };
|
|
493
463
|
break;
|
|
494
464
|
}
|
|
@@ -504,13 +474,13 @@ export class HighchartsService {
|
|
|
504
474
|
var r = [];
|
|
505
475
|
var color;
|
|
506
476
|
/*
|
|
507
|
-
|
|
508
|
-
|
|
477
|
+
* No toma en cuenta los decimales con coma (,)
|
|
478
|
+
*/
|
|
509
479
|
range.value1 = parseFloat(range.value1?.replace(",", "."));
|
|
510
480
|
range.value2 = parseFloat(range.value2?.replace(",", "."));
|
|
511
481
|
if (range.rangeCondition == '>' || range.rangeCondition == '=>') {
|
|
512
482
|
r["from"] = range.value1;
|
|
513
|
-
|
|
483
|
+
const maxValue = this.getMaxRange(range.value1, max);
|
|
514
484
|
//console.log('[ActivityGoalPage] maxValue ', maxValue);
|
|
515
485
|
r["to"] = this.getMaxRange(range.value1, max);
|
|
516
486
|
}
|
|
@@ -549,7 +519,7 @@ export class HighchartsService {
|
|
|
549
519
|
outRangeValue: outRangeValue,
|
|
550
520
|
dangerValue: dangerValue
|
|
551
521
|
};
|
|
552
|
-
console.log('[ActivityGoalPage] getRanges() ranges: ', rangesElement);
|
|
522
|
+
//console.log('[ActivityGoalPage] getRanges() ranges: ', rangesElement);
|
|
553
523
|
return rangesElement;
|
|
554
524
|
}
|
|
555
525
|
else
|
|
@@ -590,10 +560,10 @@ export class HighchartsService {
|
|
|
590
560
|
ranges = this.getRanges(json, minY, maxY);
|
|
591
561
|
this.ranges = ranges;
|
|
592
562
|
pointWidth = this.setPointWidth(interval);
|
|
593
|
-
console.log("* valuesA: ", valuesA);
|
|
594
|
-
console.log("* valuesB: ", valuesB);
|
|
595
|
-
console.log("* dates: ", datesA);
|
|
596
|
-
console.log("* graphic: ", graphData);
|
|
563
|
+
//console.log("* valuesA: ", valuesA);
|
|
564
|
+
//console.log("* valuesB: ", valuesB);
|
|
565
|
+
//console.log("* dates: ", datesA);
|
|
566
|
+
//console.log("* graphic: ", graphData);
|
|
597
567
|
switch (opt) {
|
|
598
568
|
case 'range':
|
|
599
569
|
typeChart = 'arearange';
|
|
@@ -609,13 +579,13 @@ export class HighchartsService {
|
|
|
609
579
|
this.setYAxis(minY, maxY, ranges, units);
|
|
610
580
|
this.setSeries(name, graphData, pointWidth);
|
|
611
581
|
}
|
|
612
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.
|
|
613
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.
|
|
582
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HighchartsService, deps: [{ token: i1.LanguageService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
583
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HighchartsService, providedIn: 'root' }); }
|
|
614
584
|
}
|
|
615
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
585
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HighchartsService, decorators: [{
|
|
616
586
|
type: Injectable,
|
|
617
587
|
args: [{
|
|
618
588
|
providedIn: 'root'
|
|
619
589
|
}]
|
|
620
590
|
}], ctorParameters: () => [{ type: i1.LanguageService }] });
|
|
621
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGNoYXJ0cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2VydmljZS1saWIvc3JjL2xpYi9zZXJ2aWNlcy9oaWdoY2hhcnRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLGNBQWMsTUFBTSw0QkFBNEIsQ0FBQztBQUV4RCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFGM0MsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBb0IzQixNQUFNLE9BQU8saUJBQWlCO0lBaUI1QixZQUNVLGVBQWdDO1FBQWhDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQWpCMUMsZUFBVSxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDdkYsZUFBVSxHQUFHLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFFOUYsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUdmLFdBQU0sR0FBVSxFQUFFLENBQUE7UUFPbEIsZ0JBQVcsR0FBRyxLQUFLLENBQUE7UUFFbkIsbUJBQWMsR0FBRyxHQUFHLENBQUE7SUFHaEIsQ0FBQztJQUVMLFFBQVEsQ0FBQyxLQUFLO1FBQ1osSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFLO1FBQ1osSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQztJ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UUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNaLEtBQUssT0FBTztnQkFDVixTQUFTLEdBQUcsV0FBVyxDQUFBO2dCQUN2QixNQUFNO1lBQ1IsS0FBSyxLQUFLLENBQUM7WUFDWCxLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssVUFBVSxDQUFDO1lBQ2hCO2dCQUNFLFNBQVMsR0FBRyxVQUFVLENBQUE7Z0JBQ3RCLE1BQU07UUFDVixDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDN0MsQ0FBQzsrR0Ezb0JVLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07OzRGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuL2xhbmd1YWdlLnNlcnZpY2UnXG5pbXBvcnQgKiBhcyBIaWdoQ2hhcnRzIGZyb20gJ2hpZ2hjaGFydHMnO1xuaW1wb3J0IGhpZ2hjaGFydHNNb3JlIGZyb20gJ2hpZ2hjaGFydHMvaGlnaGNoYXJ0cy1tb3JlJztcbmhpZ2hjaGFydHNNb3JlKEhpZ2hDaGFydHMpO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuZXhwb3J0IGludGVyZmFjZSBzZXJpZSB7XG4gIG5hbWU6IHN0cmluZyxcbiAgdHlwZT86IHN0cmluZyxcbiAgY29sb3JLZXk/OiBzdHJpbmcsXG4gIHBvaW50V2lkdGg/OiBudW1iZXIsXG4gIGNvbG9yQnlQb2ludD86IGJvb2xlYW4sXG4gIGNvbG9yPzogc3RyaW5nLFxuICBkYXRhOiBBcnJheTxhbnk+LFxuICBsaW5lV2lkdGg/OiBudW1iZXIsXG4gIG1hcmtlcj86IHtcbiAgICByYWRpdXM6IG51bWJlclxuICB9XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEhpZ2hjaGFydHNTZXJ2aWNlIHtcbiAgd2Vla2RheXNFUyA9IFsnRG9taW5nbycsICdMdW5lcycsICdNYXJ0ZXMnLCAnTWllcmNvbGVzJywgJ0p1ZXZlcycsICdWaWVybmVzJywgJ1PDoWJhZG8nXVxuICB3ZWVrZGF5c0NBID0gWydEaXVtZW5nZScsICdEaWxsdW5zJywgJ0RpbWFydHMnLCAnRGltZWNyZXMnLCAnRGlqb3VzJywgJ0RpdmVuZHJlcycsICdEaXNzYWJ0ZSddXG4gIHRpdGxlOiBzdHJpbmc7XG4gIGdyYXBoRGF0YSA9IFtdO1xuICByYW5nZXM6IGFueTtcbiAgdW5pdHM6IHN0cmluZztcbiAgc2VyaWVzOiBhbnlbXSA9IFtdXG4gIHhBeGlzOiBhbnlcbiAgeUF4aXM6IGFueVxuICBtaW5ZOiBhbnlcbiAgbWF4WTogYW55XG4gIGdyYXBoQmFzZU9uOiBzdHJpbmdcbiAgcG9pbnRXaWR0aDogbnVtYmVyO1xuICB3aXRoVG9vbHRpcCA9IGZhbHNlXG4gIGV4dHJhVG9vbHRpcDogYW55O1xuICBzY3JvbGxNaW5XaWR0aCA9IDU1MFxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxuICApIHsgfVxuXG4gIHNldFRpdGxlKHRpdGxlKXtcbiAgICB0aGlzLnRpdGxlID0gdGl0bGVcbiAgfVxuXG4gIHNldFVuaXRzKHVuaXRzKXtcbiAgICB0aGlzLnVuaXRzID0gdW5pdHNcbiAgfVxuXG4gIHNldExvY2FsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sYW5ndWFnZVNlcnZpY2UuZ2V0Q3VycmVudCgpO1xuICB9XG5cbiAgc2V0UG9pbnRXaWR0aChpbnRlcnZhbCk6IG51bWJlcntcbiAgICBzd2l0Y2ggKGludGVydmFsKSB7XG4gICAgICBjYXNlICcxZCc6ICAgICAgICBcbiAgICAgICAgcmV0dXJuIDEyO1xuICAgICAgY2FzZSAnMXcnOiAgICAgICAgXG4gICAgICAgIHJldHVybiAxMjsgIFxuICAgICAgY2FzZSAnMW0nOiAgICAgICAgXG4gICAgICAgIHJldHVybiA4OyAgIFxuICAgICAgY2FzZSAnMXknOiAgICAgICAgXG4gICAgICAgIHJldHVybiAxMjsgIFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIDIwO1xuICAgIH1cbiAgfVxuXG4gIHNldFNjcm9sbE1pbldpZHRoKGludGVydmFsKXtcbiAgICBzd2l0Y2ggKGludGVydmFsKSB7XG4gICAgICBjYXNlICcxZCc6ICAgICAgICBcbiAgICAgICAgdGhpcy5zY3JvbGxNaW5XaWR0aCA9IDYwMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcxdyc6ICAgICAgICBcbiAgICAgICAgdGhpcy5zY3JvbGxNaW5XaWR0aCA9IDUwMDsgXG4gICAgICAgIGJyZWFrOyBcbiAgICAgIGNhc2UgJzFtJzogICAgICAgIFxuICAgICAgICB0aGlzLnNjcm9sbE1pbldpZHRoID0gNjAwOyAgIFxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJzF5JzogICAgICAgIFxuICAgICAgICB0aGlzLnNjcm9sbE1pbldpZHRoID0gNTAwOyAgXG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5zY3JvbGxNaW5XaWR0aCA9IDUwMDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgYWRkVG9vbHRpcChpbnRlcnZhbDogc3RyaW5nKSB7XG4gICAgc3dpdGNoIChpbnRlcnZhbCkge1xuICAgICAgY2FzZSAnMWQnOlxuICAgICAgICB0aGlzLndpdGhUb29sdGlwID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnMXcnOlxuICAgICAgICB0aGlzLndpdGhUb29sdGlwID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnMW0nOlxuICAgICAgICB0aGlzLndpdGhUb29sdGlwID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcxeSc6XG4gICAgICAgIHRoaXMud2l0aFRvb2x0aXAgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLndpdGhUb29sdGlwID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGdldFdlZWtkYXkoKXtcbiAgIHJldHVybiAodGhpcy5zZXRMb2NhbGUoKSA9PSAnZXMnKSA/IHRoaXMud2Vla2RheXNFUyA6IHRoaXMud2Vla2RheXNDQVxuICB9XG5cbiAgc2V0U2VyaWVzKG5hbWUsIGRhdGEsIHBvaW50V2lkdGg/LCBsaW5lV2lkdGg/LCBjb2xvcj8sIGNvbG9yS2V5PywgY29sb3JCeVBvaW50Pyl7XG4gICAgY29uc3Qgc2VyaWVfbmFtZSA9IG5hbWU/IG5hbWU6IHRoaXMudW5pdHM7XG4gICAgY29uc3Qgc2VyaWVfZGF0YSA9IChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCk/IGRhdGE6IHRoaXMuZ3JhcGhEYXRhXG4gICAgY29uc3Qgc2VyaWVfcG9pbnRXaWR0aCA9IHBvaW50V2lkdGg/IHBvaW50V2lkdGg6dGhpcy5wb2ludFdpZHRoXG4gICAgY29uc3Qgc2VyaWVfY29sb3JCeVBvaW50ID0gY29sb3JCeVBvaW50PyB0cnVlOmZhbHNlO1xuICAgIGxldCBzZXJpZTogc2VyaWUgPSB7IG5hbWU6IHNlcmllX25hbWUsIGRhdGE6IHNlcmllX2RhdGEsIHBvaW50V2lkdGg6c2VyaWVfcG9pbnRXaWR0aCwgY29sb3JCeVBvaW50OiAgc2VyaWVfY29sb3JCeVBvaW50fVxuICAgIC8vaWYgKHBvaW50V2lkdGggIT0gdW5kZWZpbmVkKSBzZXJpZVsncG9pbnRXaWR0aCddID0gcG9pbnRXaWR0aFxuICAgIGlmIChsaW5lV2lkdGgpIHNlcmllWydsaW5lV2lkdGgnXSA9IGxpbmVXaWR0aFxuICAgIGlmIChjb2xvcikgc2VyaWVbJ2NvbG9yJ10gPSBjb2xvclxuICAgIGlmIChjb2xvcktleSkgc2VyaWVbJ2NvbG9yS2V5J10gPSBjb2xvcktleVxuICAgIHRoaXMuc2VyaWVzID0gW11cbiAgICB0aGlzLnNlcmllcy5wdXNoKHNlcmllKVxuICB9XG5cbiAgLy8gdHlwZTogdGhpcy50eXBlQ2hhcnQsXG4gIC8vIG1heFJhbmdlOiB0aGlzLm1pbi5nZXRUaW1lKCksXG4gIC8vIGNhdGVnb3JpZXM6IHRoaXMud2l0aFRvb2x0aXA/IHRoaXMuZ3JhcGhEYXRlczogbnVsbFxuICBzZXRYQXhpcyh0eXBlLCBjYXRlZ29yaWVzLCBtYXhSYW5nZT8pe1xuICAgIHRoaXMueEF4aXMgPSB7dHlwZTogdHlwZSwgbWF4UmFuZ2U6IG1heFJhbmdlLCBjYXRlZ29yaWVzOiBjYXRlZ29yaWVzLCAgY3Jvc3NoYWlyOiB0cnVlfVxuICB9XG5cbiAgc2V0WUF4aXMobWluWSxtYXhZLCByYW5nZXMsIHRleHQpe1xuICAgIGNvbnNvbGUubG9nKCdbQWN0aXZpdHlHb2FsUGFnZV0gZ2VuZXJhdGVDaGFydCgpIG1heFk6ICcsIG1heFkpO1xuICAgIC8vU29sbyBwYXJhIEhQQyByZXF1aWVyZW4gcXVlIGVsIHZhbG9yIG3DrW5pbW8gZGUgZ3LDoWZpY2Egc2VhIDAsIGFxdcOtIHZhbGlkbyBxdWUgc2kgbm8gaGF5IHZhbG9yZXMgbmVnYXRpdm9zIHNlIGVsIG1pblkgPSAwO1xuICAgIGNvbnN0IHlfbWluID0gIG1pblk7Ly8gKG1pblkgPiAwKSA/IDAgOiBtaW5ZO1xuICAgIGNvbnN0IHlfbWF4ID0gKG1heFkpPyBtYXhZOiB0aGlzLm1heFlcbiAgICBjb25zdCB5X3RpdGxlID0ge3RleHQ6IHRleHQsIGFsaWduOiAnaGlnaCd9XG4gICAgdGhpcy55QXhpcyA9IHttaW46IHlfbWluLCBtYXg6IHlfbWF4LCBhbGlnblRpY2tzOiBmYWxzZSwgdGlja0ludGVydmFsOiBudWxsLCBzdGFydE9uVGljazogZmFsc2UsIHRpdGxlOnlfdGl0bGUsIG9wcG9zaXRlOiB0cnVlLCBwbG90QmFuZHM6IHJhbmdlc31cbiAgfVxuXG4gIHNldE1pblkodmFsdWVzQSwgdmFsdWVzQil7XG4gICAgaWYodmFsdWVzQSAmJiB2YWx1ZXNCICYmIHZhbHVlc0IubGVuZ3RoID4gMCl7XG4gICAgICBjb25zdCBBID0gTWF0aC5taW4uYXBwbHkobnVsbCwgdmFsdWVzQSlcbiAgICAgIGNvbnN0IEIgPSBNYXRoLm1pbi5hcHBseShudWxsLCB2YWx1ZXNCKVxuICAgICAgdGhpcy5taW5ZID0gQT5CPyBCOkFcbiAgICAgIHJldHVybiB0aGlzLm1pbllcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMubWluWSA9IE1hdGgubWluLmFwcGx5KG51bGwsIHZhbHVlc0EpXG4gICAgICByZXR1cm4gdGhpcy5taW5ZXG4gICAgfVxuICB9XG5cbiAgc2V0TWF4WSh2YWx1ZXNBLCB2YWx1ZXNCKXtcbiAgICBpZih2YWx1ZXNBICYmIHZhbHVlc0IgJiYgdmFsdWVzQi5sZW5ndGggPiAwKXtcbiAgICAgIGNvbnN0IEEgPSBNYXRoLm1heC5hcHBseShudWxsLCB2YWx1ZXNBKVxuICAgICAgY29uc3QgQiA9IE1hdGgubWF4LmFwcGx5KG51bGwsIHZhbHVlc0IpXG4gICAgICB0aGlzLm1heFkgPSBBPkI/IEE6QlxuICAgICAgcmV0dXJuIHRoaXMubWF4WVxuICAgIH1lbHNle1xuICAgICAgdGhpcy5tYXhZID0gIE1hdGgubWF4LmFwcGx5KG51bGwsIHZhbHVlc0EpXG4gICAgICByZXR1cm4gdGhpcy5tYXhZXG4gICAgfVxuICB9XG5cblxuICBnZXRPcHRpb25zQ2hhcnQoZ3JhcGhCYXNlT24pIHtcbiAgICAvL2NvbnNvbGUubG9nKCdbQWN0aXZpdHlHb2FsUGFnZV0gZ2VuZXJhdGVDaGFydCgpIGdyYXBoQmFzZU9uOiAnLCBncmFwaEJhc2VPbik7XG4gICAgbGV0ICBjaGFydHMgLy89IEhpZ2hDaGFydHNcbiAgICBzd2l0Y2ggKGdyYXBoQmFzZU9uKSB7XG4gICAgICBjYXNlICdhdmcnOiAgXG4gICAgICAgIC8vY2hhcnRzLmNoYXJ0KCdjb250YWluZXInLCB7XG4gICAgICAgIGNoYXJ0cyA9IHtcbiAgICAgICAgICBjaGFydDoge1xuICAgICAgICAgICAgcmVuZGVyVG86ICdjb250YWluZXInLFxuICAgICAgICAgICAgdHlwZTogJ2NvbHVtbicsXG4gICAgICAgICAgICB6b29tVHlwZTogJ3gnLFxuICAgICAgICAgICAgc2Nyb2xsYWJsZVBsb3RBcmVhOiB7XG4gICAgICAgICAgICAgIG1pbldpZHRoOiB0aGlzLnNjcm9sbE1pbldpZHRoLFxuICAgICAgICAgICAgICBzY3JvbGxQb3NpdGlvblg6IDFcbiAgICAgICAgICAgIH0gICBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRpdGxlIFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeEF4aXM6ICB0aGlzLnhBeGlzLFxuICAgICAgICAgIHlBeGlzOiB0aGlzLnlBeGlzLFxuICAgICAgICAgIHJhbmdlU2VsZWN0b3I6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBsb3RPcHRpb25zOiB7XG4gICAgICAgICAgICBzZXJpZXM6IHtcbiAgICAgICAgICAgICAgYWxsb3dQb2ludFNlbGVjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgICAgICAgIGRhdGFMYWJlbHM6IHtcbiAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZvcm1hdDogJ3twb2ludC55fSdcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGxlZ2VuZDoge1xuICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNyZWRpdHM6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXJpZXM6IHRoaXMuc2VyaWVzLFxuICAgICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgIHZhbHVlU3VmZml4OiBgICR7dGhpcy51bml0c31gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsYW5nOiB7XG4gICAgICAgICAgICB3ZWVrZGF5czogdGhpcy5nZXRXZWVrZGF5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JhbmdlJzogICBcbiAgICAgICAvL2NoYXJ0cy5jaGFydCgnY29udGFpbmVyJywge1xuICAgICAgICBjaGFydHMgPSB7XG4gICAgICAgICAgY2hhcnQ6IHtcbiAgICAgICAgICAgIHJlbmRlclRvOiAnY29udGFpbmVyJyxcbiAgICAgICAgICAgIHR5cGU6ICdhcmVhcmFuZ2UnLFxuICAgICAgICAgICAgem9vbVR5cGU6ICd4JyxcbiAgICAgICAgICAgIHNjcm9sbGFibGVQbG90QXJlYToge1xuICAgICAgICAgICAgICAgIG1pbldpZHRoOiB0aGlzLnNjcm9sbE1pbldpZHRoLFxuICAgICAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uWDogMVxuICAgICAgICAgICAgfSAgICBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRpdGxlIFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeEF4aXM6IHRoaXMueEF4aXMsXG4gICAgICAgICAgeUF4aXM6IHRoaXMueUF4aXMsXG4gICAgICAgICAgbGVnZW5kOiB7XG4gICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY3JlZGl0czoge1xuICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlcmllczogdGhpcy5zZXJpZXMsXG4gICAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgdmFsdWVTdWZmaXg6IGAgJHt0aGlzLnVuaXRzfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxhbmc6IHtcbiAgICAgICAgICAgIHdlZWtkYXlzOiB0aGlzLmdldFdlZWtkYXkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyk7XG4gICAgICAgIFxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xhc1ZhbHVlJzogLy9iYXJyYSBvIHB1bnRvIHZhbG9yIGRlIDAgYWwgaW5pY2lvXG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvL2NoYXJ0cy5jaGFydCgnY29udGFpbmVyJywge1xuICAgICAgICBjaGFydHMgPSB7XG4gICAgICAgICAgY2hhcnQ6IHtcbiAgICAgICAgICAgIHJlbmRlclRvOiAnY29udGFpbmVyJyxcbiAgICAgICAgICAgIHR5cGU6ICdjb2x1bW4nLFxuICAgICAgICAgICAgem9vbVR5cGU6ICd4JyxcbiAgICAgICAgICAgIHNjcm9sbGFibGVQbG90QXJlYToge1xuICAgICAgICAgICAgICBtaW5XaWR0aDogdGhpcy5zY3JvbGxNaW5XaWR0aCxcbiAgICAgICAgICAgICAgc2Nyb2xsUG9zaXRpb25YOiAxXG4gICAgICAgICAgICB9ICAgXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgdGV4dDogdGhpcy50aXRsZSBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHhBeGlzOiAgdGhpcy54QXhpcyxcbiAgICAgICAgICB5QXhpczogdGhpcy55QXhpcyxcbiAgICAgICAgICByYW5nZVNlbGVjdG9yOiB7XG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwbG90T3B0aW9uczoge1xuICAgICAgICAgICAgc2VyaWVzOiB7XG4gICAgICAgICAgICAgIGFsbG93UG9pbnRTZWxlY3Q6IHRydWUsXG4gICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgICAgICAgICBkYXRhTGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmb3JtYXQ6ICd7cG9pbnQueX0nXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBsZWdlbmQ6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjcmVkaXRzOiB7XG4gICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VyaWVzOiB0aGlzLnNlcmllcyxcbiAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICB2YWx1ZVN1ZmZpeDogYCAke3RoaXMudW5pdHN9YFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGFuZzoge1xuICAgICAgICAgICAgd2Vla2RheXM6IHRoaXMuZ2V0V2Vla2RheSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG5cbiAgICBpZih0aGlzLndpdGhUb29sdGlwKXtcbiAgICAgIGxldCB0b29sID0gYDx0YWJsZT48dHI+PHRoIGNvbHNwYW49XCIxXCI+e3BvaW50LmtleX0gJHt0aGlzLmV4dHJhVG9vbHRpcH08L3RoPjwvdHI+YCAvL1xuICAgICAgSGlnaENoYXJ0cy5zZXRPcHRpb25zKHtcbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgIGhlYWRlckZvcm1hdDogdG9vbCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjaGFydHNcbiAgfVxuXG4gIGdyb3VwQnlDYXRlZ29yeShpbnRlcnZhbCwgZWxlbWVudCl7XG4gICAgLy9jb25zb2xlLmxvZygnW0hpZ2hjaGFydHNTZXJ2aWNlXSBncm91cEJ5Q2F0ZWdvcnkgJywgZWxlbWVudC5kYXRlX3ZhbHVlKTtcbiAgICBsZXQgZWxlbWVudERhdGUgPSBuZXcgRGF0ZShlbGVtZW50LmRhdGVfdmFsdWUpO1xuICAgIGxldCBncm91cEJ5RGF0ZSA9IFwiXCI7XG4gICAgbGV0IHRvb2x0aXAgPSBcIlwiO1xuICAgIC8vY29uc29sZS5sb2coJ1tIaWdoY2hhcnRzU2VydmljZV0gZ3JvdXBCeUNhdGVnb3J5ICcsIGVsZW1lbnQuZGF0ZV92YWx1ZSk7XG4gICAgc3dpdGNoIChpbnRlcnZhbCkge1xuICAgICAgY2FzZSAnMWQnOi8vIGdyb3VwIGJ5IGRheVxuICAgICAgICBsZXQgaG91ciA9IGVsZW1lbnQuZGF0ZT8uc3BsaXQoJyAnKVsxXVxuICAgICAgICBncm91cEJ5RGF0ZSA9IGhvdXJcbiAgICAgICAgLy8gbGV0IGlzQWxsVmFsdWUgPSAodGhpcy5ncmFwaEJhc2VPbiA9PSAnbGFzVmFsdWUnIHx8IHRoaXMuZ3JhcGhCYXNlT24gPT0gJ3JhbmdlJyk/IHRydWU6ZmFsc2VcbiAgICAgICAgLy8gZ3JvdXBCeURhdGUgPSBpc0FsbFZhbHVlPyBob3VyIDogaG91ci5zcGxpdCgnOicpWzBdICsgJzonICsgaG91ci5zcGxpdCgnOicpWzFdO1xuICAgICAgICB0b29sdGlwID0gbW9tZW50KGVsZW1lbnREYXRlLCBcIllZWVktTU0tRERcIikubG9jYWxlKCdlcycpLmRhdGUoKSArICcvJyArIGVsZW1lbnREYXRlLnRvTG9jYWxlU3RyaW5nKHRoaXMucmV0dXJuU2hvcnREYXRlKCksIHsgbW9udGg6ICdzaG9ydCcgfSkgKyAnLycgKyBlbGVtZW50RGF0ZS5nZXRGdWxsWWVhcigpKycgJytncm91cEJ5RGF0ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcxdyc6XG4gICAgICAgIGxldCBkYXRlID0gdGhpcy5mb3JtYXRTZWxlY3RlZERhdGUoZWxlbWVudC5kYXRlX3ZhbHVlKVxuICAgICAgICBsZXQgZGF5ID0gZGF0ZS50b0xvY2FsZVN0cmluZyh0aGlzLnJldHVyblNob3J0RGF0ZSgpLCB7IHdlZWtkYXk6ICdzaG9ydCcgfSlcbiAgICAgICAgZ3JvdXBCeURhdGUgPSB0aGlzLnRpdGxlQ2FzZShkYXkpICsnICcrIHRoaXMuZm9ybWF0U2VsZWN0ZWREYXRlMihlbGVtZW50LmRhdGVfdmFsdWUsICdkJylcbiAgICAgICAgdG9vbHRpcCA9IG1vbWVudChlbGVtZW50RGF0ZSwgXCJZWVlZLU1NLUREXCIpLmxvY2FsZSgnZXMnKS5kYXRlKCkgKyAnLycgKyBlbGVtZW50RGF0ZS50b0xvY2FsZVN0cmluZyh0aGlzLnJldHVyblNob3J0RGF0ZSgpLCB7IG1vbnRoOiAnc2hvcnQnIH0pICsgJy8nICsgZWxlbWVudERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcxbSc6XG4gICAgICAgIC8vbGV0IG1vbnRoID0gZWxlbWVudERhdGUudG9Mb2NhbGVTdHJpbmcoJ2VzLUVTJywgeyBtb250aDogJ3Nob3J0JyB9KTtcbiAgICAgICAgZ3JvdXBCeURhdGUgPSB0aGlzLmZvcm1hdFNlbGVjdGVkRGF0ZTIoZWxlbWVudC5kYXRlX3ZhbHVlLCAnZCcpIC8vKyAnICcgKyBtb250aFxuICAgICAgICB0b29sdGlwID0gbW9tZW50KGVsZW1lbnREYXRlLCBcIllZWVktTU0tRERcIikubG9jYWxlKCdlcycpLmRhdGUoKSArICcvJyArIGVsZW1lbnREYXRlLnRvTG9jYWxlU3RyaW5nKHRoaXMucmV0dXJuU2hvcnREYXRlKCksIHsgbW9udGg6ICdzaG9ydCcgfSkgKyAnLycgKyBlbGVtZW50RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJzF5JzpcbiAgICAgICAgbGV0IG1vbnRoID0gbmV3IERhdGUoKTsgbW9udGguc2V0TW9udGgoTnVtYmVyKGVsZW1lbnQuZGF0ZV92YWx1ZSktMSk7IFxuICAgICAgICBncm91cEJ5RGF0ZSA9IG1vbnRoLnRvTG9jYWxlU3RyaW5nKHRoaXMucmV0dXJuU2hvcnREYXRlKCksIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgICAgICAgZ3JvdXBCeURhdGUgPSB0aGlzLnRpdGxlQ2FzZShncm91cEJ5RGF0ZSkgO1xuICAgICAgICB0b29sdGlwID0gIG1vbnRoLnRvTG9jYWxlU3RyaW5nKHRoaXMucmV0dXJuU2hvcnREYXRlKCksIHsgbW9udGg6ICdzaG9ydCcgfSkgKyAnLycgKyBtb250aC5nZXRGdWxsWWVhcigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICAgIHJldHVybiB7Z3JvdXBCeURhdGU6IGdyb3VwQnlEYXRlLCB0b29sdGlwOiB0b29sdGlwfVxuICB9XG5cbiAgcmV0dXJuU2hvcnREYXRlKCk6IHN0cmluZ3tcbiAgICBjb25zdCBpZGlvbWEgPSB0aGlzLnNldExvY2FsZSgpO1xuICAgIHN3aXRjaCAoaWRpb21hKSB7XG4gICAgICBjYXNlICdlcyc6XG4gICAgICAgIHJldHVybiAnZXMtRVMnO1xuICAgICAgY2FzZSAnZW4nOlxuICAgICAgICByZXR1cm4gJ2VuLVVTJztcbiAgICAgIGNhc2UgJ2NhJzpcbiAgICAgICAgcmV0dXJuICdjYS1FUyc7XG4gICAgICBjYXNlICdmcic6XG4gICAgICAgIHJldHVybiAnZnItRlInO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGlkaW9tYTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXRTZWxlY3RlZERhdGUyKGQsIGZvcm1hdCkge1xuICAgIHZhciBhdXhkYXRlID0gZC5zcGxpdCgnICcpXG4gICAgZCA9IGQucmVwbGFjZSgnICcsICdUJylcbiAgICBsZXQgZGF0ZTAgPSBuZXcgRGF0ZShkKS50b1VUQ1N0cmluZygpO1xuICAgIGxldCBkYXRlID0gbmV3IERhdGUoZGF0ZTApO1xuICAgIGxldCB0aW1lID0gYXV4ZGF0ZVsxXTtcbiAgICBkYXRlLnNldEhvdXJzKHRpbWUuc3Vic3RyaW5nKDAsIDIpKTtcbiAgICBkYXRlLnNldE1pbnV0ZXModGltZS5zdWJzdHJpbmcoMywgNSkpO1xuICAgIGxldCBsYW5ndWFnZSA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLmdldEN1cnJlbnQoKTtcbiAgICBjb25zdCBkYXRlUGlwZTogRGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuJyk7XG4gICAgcmV0dXJuIGRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCBmb3JtYXQpO1xuICB9XG5cbiAgZm9ybWF0U2VsZWN0ZWREYXRlKGQpIHtcbiAgICB2YXIgYXV4ZGF0ZSA9IGQuc3BsaXQoJyAnKVxuICAgIGQgPSBkLnJlcGxhY2UoJyAnLCAnVCcpXG4gICAgbGV0IGRhdGUwID0gbmV3IERhdGUoZCkudG9VVENTdHJpbmcoKTtcbiAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKGRhdGUwKTtcbiAgICBsZXQgdGltZSA9IGF1eGRhdGVbMV07XG4gICAgZGF0ZS5zZXRIb3Vycyh0aW1lLnN1YnN0cmluZygwLCAyKSk7XG4gICAgZGF0ZS5zZXRNaW51dGVzKHRpbWUuc3Vic3RyaW5nKDMsIDUpKTtcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgdGl0bGVDYXNlKHdvcmQpe1xuICAgIHJldHVybiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKVxuICB9XG5cbiAgZ2V0R3JvdXBlZERhdGEoanNvbiwgaW50ZXJ2YWwsIHdpdGhvVG9sdGlwPzpib29sZWFuKXtcbiAgICBsZXQgd2l0aFRvb2x0aXA6IGJvb2xlYW4gPSBmYWxzZVxuICAgIGxldCB0b29sdGlwID0gW11cbiAgICBsZXQgZ3JvdXBEYXRhOiBhbnk7XG4gICAgbGV0IGdyb3VwcyA9IFtdXG4gICAgbGV0IHZhbHVlc0EgPSBbXTtcbiAgICBsZXQgdmFsdWVzQiA9IFtdO1xuICAgIGxldCBkYXRlc0EgPSBbXTtcbiAgICBsZXQgZ3JhcGhEYXRhID0gW107XG4gICAgbGV0IGdyYXBoQmFzZU9uID0ganNvbi5ncmFwaEJhc2VPblxuICAgIHRoaXMuZ3JhcGhCYXNlT24gPSBqc29uLmdyYXBoQmFzZU9uO1xuICAgIHN3aXRjaCAoZ3JhcGhCYXNlT24pIHtcbiAgICAgIGNhc2UgJ2F2ZXJhZ2UnOiBcbiAgICAgIGNhc2UgJ2F2Zyc6IFxuICAgICAgICBncm91cHMgPSBqc29uLnZhbHVlcy5yZWR1Y2UoKGdyb3VwcywgZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKGVsZW1lbnQuYXZnKTtcbiAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBCeUNhdGVnb3J5KGludGVydmFsLCBlbGVtZW50KVxuICAgICAgICAgIC8vIElmIGRhdGUgZG9lc24ndCBleGlzdCBpbiBhcnJheSwgdGhlbiBjcmVhdGUgaXRcbiAgICAgICAgICBpZiAoIWdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0pIHtcbiAgICAgICAgICAgIGdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0gPSBbXTtcbiAgICAgICAgICAgIGdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0udmFsdWUgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBncm91cHNbZ3JvdXAuZ3JvdXBCeURhdGVdLnZhbHVlICs9IHZhbHVlO1xuICAgICAgICAgIGdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0udG9vbHRpcCA9IGdyb3VwLnRvb2x0aXAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIGdyb3VwcztcbiAgICAgICAgfSwge30pOyBcbiAgICAgICAgLy9jb25zb2xlLmxvZygnW0hpZ2hjaGFydHNTZXJ2aWNlXSByYW5nZUdyYXBoJywgZ3JvdXBzKTsgXG4gICAgICAgIE9iamVjdC5rZXlzKGdyb3VwcykubWFwKChkYXRlKSA9PiB7XG4gICAgICAgICAgZGF0ZXNBLnB1c2goZGF0ZSk7XG4gICAgICAgICAgdmFsdWVzQS5wdXNoKGdyb3Vwc1tkYXRlXS52YWx1ZSk7XG4gICAgICAgICAgLy8gaWYod2l0aFRvb2x0aXApXG4gICAgICAgICAgLy8gICBncmFwaERhdGEucHVzaCh7eTogZ3JvdXBzW2RhdGVdLnRvdGFsLCB0b29sdGlwOiBncm91cHNbZGF0ZV0udG9vbHRpcH0pO1xuICAgICAgICAgIC8vIGVsc2VcbiAgICAgICAgICAgIGlmKHdpdGhUb29sdGlwKVxuICAgICAgICAgICAgdG9vbHRpcC5wdXNoKGdyb3Vwc1tkYXRlXS50b29sdGlwKVxuICAgICAgICAgICAgZ3JhcGhEYXRhLnB1c2goW2RhdGUsIGdyb3Vwc1tkYXRlXS52YWx1ZV0pO1xuICAgIFxuICAgICAgICB9KTsgIFxuICAgICAgICAvL2NvbnNvbGUubG9nKCdbSGlnaGNoYXJ0c1NlcnZpY2VdIGdyYXBoRGF0YScsIGdyYXBoRGF0YSk7XG4gICAgICAgIGdyb3VwRGF0YSA9IHtkYXRlczogZGF0ZXNBLCB2YWx1ZXNBOiB2YWx1ZXNBLCBncmFwaERhdGE6IGdyYXBoRGF0YX1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3JhbmdlJzogXG4gICAgICAgIGdyb3VwcyA9IGpzb24udmFsdWVzLnJlZHVjZSgoZ3JvdXBzLCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZU1heCA9IE51bWJlcihlbGVtZW50Lm1heCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZU1pbiA9IE51bWJlcihlbGVtZW50Lm1pbik7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBCeUNhdGVnb3J5KGludGVydmFsLCBlbGVtZW50KVxuICAgICAgICAgICAgLy8gSWYgZGF0ZSBkb2Vzbid0IGV4aXN0IGluIGFycmF5LCB0aGVuIGNyZWF0ZSBpdFxuICAgICAgICAgICAgaWYgKCFncm91cHNbZ3JvdXAuZ3JvdXBCeURhdGVdKSB7XG4gICAgICAgICAgICAgIGdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0gPSBbXTtcbiAgICAgICAgICAgICAgZ3JvdXBzW2dyb3VwLmdyb3VwQnlEYXRlXS52YWx1ZU1heCA9IDA7XG4gICAgICAgICAgICAgIGdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0udmFsdWVNaW4gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JvdXBzW2dyb3VwLmdyb3VwQnlEYXRlXS52YWx1ZU1heCArPSB2YWx1ZU1heDtcbiAgICAgICAgICAgIGdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0udmFsdWVNaW4gKz0gdmFsdWVNaW47XG4gICAgICAgICAgICBncm91cHNbZ3JvdXAuZ3JvdXBCeURhdGVdLnRvb2x0aXAgPSBncm91cC50b29sdGlwXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBncm91cHM7XG4gICAgICAgICAgfSwge30pO1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdbSGlnaGNoYXJ0c1NlcnZpY2VdIHJhbmdlR3JhcGgnLCBncm91cHMpOyBcbiAgICAgICAgICBPYmplY3Qua2V5cyhncm91cHMpLm1hcCgoZGF0ZSkgPT4ge1xuICAgICAgICAgICAgZGF0ZXNBLnB1c2goZGF0ZSk7XG4gICAgICAgICAgICB2YWx1ZXNBLnB1c2goZ3JvdXBzW2RhdGVdLnZhbHVlTWF4KTtcbiAgICAgICAgICAgIHZhbHVlc0IucHVzaChncm91cHNbZGF0ZV0udmFsdWVNaW4pO1xuICAgICAgICAgICAgLy8gaWYod2l0aFRvb2x0aXApXG4gICAgICAgICAgICAvLyAgIGdyYXBoRGF0YS5wdXNoKHt5OiBncm91cHNbZGF0ZV0udG90YWwsIHRvb2x0aXA6IGdyb3Vwc1tkYXRlXS50b29sdGlwfSk7XG4gICAgICAgICAgICAvLyBlbHNlXG4gICAgICAgICAgICAgIGlmKHdpdGhUb29sdGlwKVxuICAgICAgICAgICAgICB0b29sdGlwLnB1c2goZ3JvdXBzW2RhdGVdLnRvb2x0aXApXG4gICAgICAgICAgICAgIGdyYXBoRGF0YS5wdXNoKFtkYXRlLCBncm91cHNbZGF0ZV0udmFsdWVNaW4sIGdyb3Vwc1tkYXRlXS52YWx1ZU1heF0pO1xuICAgICAgXG4gICAgICAgICAgfSk7ICBcbiAgICAgICAgLy9jb25zb2xlLmxvZygnW0hpZ2hjaGFydHNTZXJ2aWNlXSBncmFwaERhdGEnLCBncmFwaERhdGEpO1xuICAgICAgICBncm91cERhdGEgPSB7ZGF0ZXM6IGRhdGVzQSwgdmFsdWVzQTogdmFsdWVzQSwgdmFsdWVzQjogdmFsdWVzQiwgZ3JhcGhEYXRhOiBncmFwaERhdGF9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzdW0nOiAgXG4gICAgICAgIGdyb3VwcyA9IGpzb24udmFsdWVzLnJlZHVjZSgoZ3JvdXBzLCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IE51bWJlcihlbGVtZW50LnZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cEJ5Q2F0ZWdvcnkoaW50ZXJ2YWwsIGVsZW1lbnQpXG4gICAgICAgICAgICAvLyBJZiBkYXRlIGRvZXNuJ3QgZXhpc3QgaW4gYXJyYXksIHRoZW4gY3JlYXRlIGl0XG4gICAgICAgICAgICBpZiAoIWdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0pIHtcbiAgICAgICAgICAgICAgZ3JvdXBzW2dyb3VwLmdyb3VwQnlEYXRlXSA9IFtdO1xuICAgICAgICAgICAgICBncm91cHNbZ3JvdXAuZ3JvdXBCeURhdGVdLnZhbHVlID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0udmFsdWUgKz0gdmFsdWU7XG4gICAgICAgICAgICBncm91cHNbZ3JvdXAuZ3JvdXBCeURhdGVdLnRvb2x0aXAgPSBncm91cC50b29sdGlwICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIGdyb3VwcztcbiAgICAgICAgfSwge30pOyBcbiAgICAgICAgLy9jb25zb2xlLmxvZygnW0hpZ2hjaGFydHNTZXJ2aWNlXSByYW5nZUdyYXBoJywgZ3JvdXBzKTsgXG4gICAgICAgIE9iamVjdC5rZXlzKGdyb3VwcykubWFwKChkYXRlKSA9PiB7XG4gICAgICAgICAgZGF0ZXNBLnB1c2goZGF0ZSk7XG4gICAgICAgICAgdmFsdWVzQS5wdXNoKGdyb3Vwc1tkYXRlXS52YWx1ZSk7XG4gICAgICAgICAgLy8gaWYod2l0aFRvb2x0aXApXG4gICAgICAgICAgLy8gICBncmFwaERhdGEucHVzaCh7eTogZ3JvdXBzW2RhdGVdLnRvdGFsLCB0b29sdGlwOiBncm91cHNbZGF0ZV0udG9vbHRpcH0pO1xuICAgICAgICAgIC8vIGVsc2VcbiAgICAgICAgICAgIGlmKHdpdGhUb29sdGlwKVxuICAgICAgICAgICAgdG9vbHRpcC5wdXNoKGdyb3Vwc1tkYXRlXS50b29sdGlwKVxuICAgICAgICAgICAgZ3JhcGhEYXRhLnB1c2goW2RhdGUsIGdyb3Vwc1tkYXRlXS52YWx1ZV0pO1xuICAgICAgICB9KTsgIFxuICAgICAgICAvL2NvbnNvbGUubG9nKCdbSGlnaGNoYXJ0c1NlcnZpY2VdIGdyYXBoRGF0YScsIGdyYXBoRGF0YSk7XG4gICAgICAgIGdyb3VwRGF0YSA9IHtkYXRlczogZGF0ZXNBLCB2YWx1ZXNBOiB2YWx1ZXNBLCBncmFwaERhdGE6IGdyYXBoRGF0YX1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2xhc1ZhbHVlJzogIFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAganNvbi52YWx1ZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IE51bWJlcihlbGVtZW50LnZhbHVlKTtcbiAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBCeUNhdGVnb3J5KGludGVydmFsLCBlbGVtZW50KVxuICAgICAgICAgIC8vIElmIGRhdGUgZG9lc24ndCBleGlzdCBpbiBhcnJheSwgdGhlbiBjcmVhdGUgaXRcblxuICAgICAgICAgICAvLyBDb24gZXN0ZSBjb2RpZ28gc29sbyBzZSBoYWNlIHN1bWF0b3JpYSBkZSBsb3MgcGFzb3MgZW4gbG9zIGRpYXMuIGxvcyBkZW1hcyBhdHJpYnV0b3Mgc29sbyBtdWVzdHJhIGVsIHVsdGltbyB2YWxvclxuICAgICAgICAgICAgaWYoZWxlbWVudC5lbGVtZW50X2lkICE9PSAzOCl7Ly9hY2EgZXMgMzhcbiAgICAgICAgICAgICAgaWYgKCFncm91cHNbZ3JvdXAuZ3JvdXBCeURhdGVdKSB7ICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIGdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0gPSBbXTtcbiAgICAgICAgICAgICAgZ3JvdXBzW2dyb3VwLmdyb3VwQnlEYXRlXS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICBncm91cHNbZ3JvdXAuZ3JvdXBCeURhdGVdLnRvb2x0aXAgPSBncm91cC50b29sdGlwfVxuICAgICAgICAgIC8vICB9XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgIFxuICAgICAgICAgICAgZ3JvdXBzW2dyb3VwLmdyb3VwQnlEYXRlXS52YWx1ZSArPSB2YWx1ZTtcbiAgICAgICAgICAgIGdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0udG9vbHRpcCA9IGdyb3VwLnRvb2x0aXAgICAgIFxuICAgICAgICAgIH19KVxuICAgICAgICAgLyogaWYgKCFncm91cHNbZ3JvdXAuZ3JvdXBCeURhdGVdKSB7XG4gICAgICAgICAgICBncm91cHNbZ3JvdXAuZ3JvdXBCeURhdGVdID0gW107XG4gICAgICAgICAgICBncm91cHNbZ3JvdXAuZ3JvdXBCeURhdGVdLnZhbHVlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZ3JvdXBzW2dyb3VwLmdyb3VwQnlEYXRlXS52YWx1ZSArPSB2YWx1ZTtcbiAgICAgICAgICBncm91cHNbZ3JvdXAuZ3JvdXBCeURhdGVdLnRvb2x0aXAgPSBncm91cC50b29sdGlwICAgICBcbiAgICAgICAgfSkqL1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdbSGlnaGNoYXJ0c1NlcnZpY2VdIHJhbmdlR3JhcGgnLCBncm91cHMpOyBcbiAgICAgICAgT2JqZWN0LmtleXMoZ3JvdXBzKS5tYXAoKGRhdGUpID0+IHtcbiAgICAgICAgICBkYXRlc0EucHVzaChkYXRlKTtcbiAgICAgICAgICB2YWx1ZXNBLnB1c2goZ3JvdXBzW2RhdGVdLnZhbHVlKTtcbiAgICAgICAgICAvLyBpZih3aXRoVG9vbHRpcClcbiAgICAgICAgICAvLyAgIGdyYXBoRGF0YS5wdXNoKHt5OiBncm91cHNbZGF0ZV0udG90YWwsIHRvb2x0aXA6IGdyb3Vwc1tkYXRlXS50b29sdGlwfSk7XG4gICAgICAgICAgLy8gZWxzZVxuICAgICAgICAgICAgaWYod2l0aFRvb2x0aXApXG4gICAgICAgICAgICB0b29sdGlwLnB1c2goZ3JvdXBzW2RhdGVdLnRvb2x0aXApXG4gICAgICAgICAgICBncmFwaERhdGEucHVzaChbZGF0ZSwgZ3JvdXBzW2RhdGVdLnZhbHVlXSk7ICAgXG4gICAgICAgIH0pOyAgXG4gICAgICAgIC8vY29uc29sZS5sb2coJ1tIaWdoY2hhcnRzU2VydmljZV0gZ3JhcGhEYXRhJywgZ3JhcGhEYXRhKTtcbiAgICAgICAgZ3JvdXBEYXRhID0ge2RhdGVzOiBkYXRlc0EsIHZhbHVlc0E6IHZhbHVlc0EsIGdyYXBoRGF0YTogZ3JhcGhEYXRhfVxuICAgICAgICBicmVha1xuICAgIH1cbiAgICByZXR1cm4gZ3JvdXBEYXRhO1xuICB9XG5cbiAgZ2V0UmFuZ2VzKGVsZW1lbnQsIG1pbiwgbWF4KSB7XG4gICAgbGV0IG5vcm1hbFZhbHVlID0gW11cbiAgICBsZXQgb3V0UmFuZ2VWYWx1ZSA9IFtdXG4gICAgbGV0IGRhbmdlclZhbHVlID0gW11cbiAgICBsZXQgdmFsdWUgPSBbXVxuICAgIGxldCByYW5nZXMgPSBlbGVtZW50LnJhbmdlcztcblxuICAgIHJhbmdlcy5mb3JFYWNoKHJhbmdlID0+IHtcbiAgICAgIHZhciByID0gW107XG4gICAgICB2YXIgY29sb3I7XG5cbiAgICAgIC8qXG4gICAgICAqIE5vIHRvbWEgZW4gY3VlbnRhIGxvcyBkZWNpbWFsZXMgY29uIGNvbWEgKCwpXG4gICAgICAqL1xuICAgICAgcmFuZ2UudmFsdWUxID0gIHBhcnNlRmxvYXQocmFuZ2UudmFsdWUxPy5yZXBsYWNlKFwiLFwiLFwiLlwiKSk7XG4gICAgICByYW5nZS52YWx1ZTIgPSAgcGFyc2VGbG9hdChyYW5nZS52YWx1ZTI/LnJlcGxhY2UoXCIsXCIsXCIuXCIpKTtcblxuICAgICAgaWYgKHJhbmdlLnJhbmdlQ29uZGl0aW9uID09ICc+JyB8fCByYW5nZS5yYW5nZUNvbmRpdGlvbiA9PSAnPT4nKSB7XG4gICAgICAgIHJbXCJmcm9tXCJdID0gcmFuZ2UudmFsdWUxO1xuICAgICAgICAvL2NvbnN0IG1heFZhbHVlID0gdGhpcy5nZXRNYXhSYW5nZShyYW5nZS52YWx1ZTEsIG1heCkgO1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdbQWN0aXZpdHlHb2FsUGFnZV0gbWF4VmFsdWUgJywgbWF4VmFsdWUpO1xuICAgICAgICByW1widG9cIl0gPSB0aGlzLmdldE1heFJhbmdlKHJhbmdlLnZhbHVlMSwgbWF4KSA7XG4gICAgICB9XG5cbiAgICAgIGlmIChyYW5nZS5yYW5nZUNvbmRpdGlvbiA9PSAnPCcgfHwgcmFuZ2UucmFuZ2VDb25kaXRpb24gPT0gJzw9Jykge1xuICAgICAgICByW1wiZnJvbVwiXSA9IG1pbjtcbiAgICAgICAgcltcInRvXCJdID0gcmFuZ2UudmFsdWUxO1xuICAgICAgfVxuXG4gICAgICBpZiAocmFuZ2UucmFuZ2VDb25kaXRpb24gPT0gJ2E8eDxiJykge1xuICAgICAgICByW1wiZnJvbVwiXSA9IHJhbmdlLnZhbHVlMTtcbiAgICAgICAgcltcInRvXCJdID0gcmFuZ2UudmFsdWUyO1xuICAgICAgfVxuXG4gICAgICBpZiAocmFuZ2UucmFuZ2VUeXBlID09IFwic3VjY2Vzc1wiKVxuICAgICAgICBjb2xvciA9ICdyZ2JhKDk2LCAxNzMsIDEyMSwgMC4xKSc7XG4gICAgICBlbHNlIGlmIChyYW5nZS5yYW5nZVR5cGUgPT0gXCJ3YXJuaW5nXCIpXG4gICAgICAgIGNvbG9yID0gJ3JnYmEoMjQ1LCAxNTcsIDI0LCAwLjEpJzsgLy8ncmdiKDI0MywgMTU2LCAxOCwgMC4xKSdcbiAgICAgIGVsc2UgaWYgKHJhbmdlLnJhbmdlVHlwZSA9PSBcImRhbmdlclwiKVxuICAgICAgICBjb2xvciA9ICdyZ2JhKDI0NSwgNDYsIDI0LCAwLjEpJzsgLy8ncmdiKDIzMSwgNzYsIDYwLCAwLjEpJ1xuXG4gICAgICByW1wiY29sb3JcIl0gPSBjb2xvcjtcbiAgICAgIHZhbHVlLnB1c2gocik7XG5cbiAgICAgIGlmIChyYW5nZS5yYW5nZVR5cGUgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIG5vcm1hbFZhbHVlLnB1c2gocmFuZ2UuY29uZGl0aW9uU3RyaW5nKVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAocmFuZ2UucmFuZ2VUeXBlID09IFwid2FybmluZ1wiKSB7XG4gICAgICAgIG91dFJhbmdlVmFsdWUucHVzaChyYW5nZS5jb25kaXRpb25TdHJpbmcpXG4gICAgICB9XG4gICAgICBlbHNlIGlmIChyYW5nZS5yYW5nZVR5cGUgPT0gXCJkYW5nZXJcIikge1xuICAgICAgICBkYW5nZXJWYWx1ZS5wdXNoKHJhbmdlLmNvbmRpdGlvblN0cmluZylcbiAgICAgIH1cblxuICAgIH0pO1xuICAgIGlmICh2YWx1ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IHJhbmdlc0VsZW1lbnQgPSB7XG4gICAgICAgIG5hbWU6IGVsZW1lbnQubmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IGVsZW1lbnQuZGVzY3JpcHRpb24sXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgbm9ybWFsVmFsdWU6IG5vcm1hbFZhbHVlLFxuICAgICAgICBvdXRSYW5nZVZhbHVlOiBvdXRSYW5nZVZhbHVlLFxuICAgICAgICBkYW5nZXJWYWx1ZTogZGFuZ2VyVmFsdWVcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKCdbQWN0aXZpdHlHb2FsUGFnZV0gZ2V0UmFuZ2VzKCkgcmFuZ2VzOiAnLCByYW5nZXNFbGVtZW50KTtcbiAgICAgIHJldHVybiByYW5nZXNFbGVtZW50XG4gICAgfVxuICAgIGVsc2UgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIC8vQXF1aSBzZSBzZXRlYSBlbCB2YWxvciBtYXggZW4gWSBzdW1hbmRvIGVsIHJhbmdvIG3DoXhpbW8geSB2YWxvciBtw6F4aW1vIGluZ3Jlc2FkbyBkaXZkaWRvIGVudHJlIDJcbiAgZ2V0TWF4UmFuZ2UocmFuZ2VNYXgsIG1heCl7XG4gICAgbGV0IHZhbHVlMSA9IE51bWJlcihyYW5nZU1heClcbiAgICBsZXQgdmFsdWUyID0gTnVtYmVyKG1heClcbiAgICBpZih2YWx1ZTIgPD0gdmFsdWUxKVxuICAgICAgdGhpcy5tYXhZID0gdmFsdWUxICsgdmFsdWUyLzI7ICAgXG4gICAgZWxzZSBcbiAgICAgIHRoaXMubWF4WSA9IHZhbHVlMlxuICAgICAgcmV0dXJuIHRoaXMubWF4WSBcbiAgfVxuXG4gIHNldEhpZ2hjaGFydHNPcHRpb25zKGpzb24sIHBhcmFtcyl7XG4gICAgbGV0IG9wdCA9IGpzb24/LmdyYXBoQmFzZU9uXG4gICAgbGV0IGludGVydmFsID0gcGFyYW1zLmludGVydmFsXG4gICAgbGV0IG5hbWUgPSBqc29uPy5uYW1lXG4gICAgbGV0IHR5cGVDaGFydCA9ICcnXG4gICAgbGV0IHZhbHVlc0EgPSBbXTtcbiAgICBsZXQgdmFsdWVzQiA9IFtdO1xuICAgIGxldCBkYXRlc0EgPSBbXTtcbiAgICBsZXQgZ3JhcGhEYXRhID0gW107XG4gICAgbGV0IHJhbmdlcztcbiAgICBsZXQgbWluWTtcbiAgICBsZXQgbWF4WTtcbiAgICBsZXQgcG9pbnRXaWR0aCA9IDIwXG4gICAgbGV0IHVuaXRzID0ganNvbj8udW5pdHNcblxuICAgIHRoaXMudW5pdHMgPSBqc29uLnVuaXRzXG5cbiAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRHcm91cGVkRGF0YShqc29uLCBpbnRlcnZhbCk7XG4gICAgZ3JhcGhEYXRhID0gZGF0YT8uZ3JhcGhEYXRhXG4gICAgdmFsdWVzQSA9IGRhdGE/LnZhbHVlc0FcbiAgICB2YWx1ZXNCID0gZGF0YT8udmFsdWVzQlxuICAgIGRhdGVzQSA9IGRhdGE/LmRhdGVzXG5cbiAgICBtaW5ZID0gdGhpcy5zZXRNaW5ZKCB2YWx1ZXNBLCB2YWx1ZXNCKTtcbiAgICBtYXhZID0gdGhpcy5zZXRNYXhZKCB2YWx1ZXNBLCB2YWx1ZXNCKTtcbiAgICByYW5nZXMgPSB0aGlzLmdldFJhbmdlcyhqc29uLCBtaW5ZLCBtYXhZKVxuICAgIHRoaXMucmFuZ2VzID0gcmFuZ2VzXG4gICAgcG9pbnRXaWR0aCA9IHRoaXMuc2V0UG9pbnRXaWR0aChpbnRlcnZhbClcblxuICAgIGNvbnNvbGUubG9nKFwiKiB2YWx1ZXNBOiBcIiwgdmFsdWVzQSk7XG4gICAgY29uc29sZS5sb2coXCIqIHZhbHVlc0I6IFwiLCB2YWx1ZXNCKTtcbiAgICBjb25zb2xlLmxvZyhcIiogZGF0ZXM6IFwiLCBkYXRlc0EpO1xuICAgIGNvbnNvbGUubG9nKFwiKiBncmFwaGljOiBcIiwgZ3JhcGhEYXRhKTtcblxuICAgIHN3aXRjaCAob3B0KSB7XG4gICAgICBjYXNlICdyYW5nZSc6XG4gICAgICAgIHR5cGVDaGFydCA9ICdhcmVhcmFuZ2UnXG4gICAgICAgIGJyZWFrOyBcbiAgICAgIGNhc2UgJ3N1bSc6XG4gICAgICBjYXNlICdhdmcnOlxuICAgICAgY2FzZSAnbGFzVmFsdWUnOiBcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHR5cGVDaGFydCA9ICdjYXRlZ29yeSdcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRYQXhpcyh0eXBlQ2hhcnQsIGRhdGVzQSlcbiAgICB0aGlzLnNldFlBeGlzKG1pblksbWF4WSwgcmFuZ2VzLCB1bml0cylcbiAgICB0aGlzLnNldFNlcmllcyhuYW1lLCBncmFwaERhdGEsIHBvaW50V2lkdGgpXG4gIH1cblxufVxuIl19
|
|
591
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGNoYXJ0cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2VydmljZS1saWIvc3JjL2xpYi9zZXJ2aWNlcy9oaWdoY2hhcnRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLGNBQWMsTUFBTSw0QkFBNEIsQ0FBQztBQUV4RCxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFGM0MsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBb0IzQixNQUFNLE9BQU8saUJBQWlCO0lBaUI1QixZQUNVLGVBQWdDO1FBQWhDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQWpCMUMsZUFBVSxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDdkYsZUFBVSxHQUFHLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFFOUYsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUdmLFdBQU0sR0FBVSxFQUFFLENBQUE7UUFPbEIsZ0JBQVcsR0FBRyxLQUFLLENBQUE7UUFFbkIsbUJBQWMsR0FBRyxHQUFHLENBQUE7SUFHaEIsQ0FBQztJQUVMLFFBQVEsQ0FBQyxLQUFLO1FBQ1osSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFLO1FBQ1osSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQztJ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QUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXpDLHNDQUFzQztRQUN0QyxzQ0FBc0M7UUFDdEMsbUNBQW1DO1FBQ25DLHdDQUF3QztRQUV4QyxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ1osS0FBSyxPQUFPO2dCQUNWLFNBQVMsR0FBRyxXQUFXLENBQUE7Z0JBQ3ZCLE1BQU07WUFDUixLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssS0FBSyxDQUFDO1lBQ1gsS0FBSyxVQUFVLENBQUM7WUFDaEI7Z0JBQ0UsU0FBUyxHQUFHLFVBQVUsQ0FBQTtnQkFDdEIsTUFBTTtRQUNWLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUM3QyxDQUFDOytHQTdtQlUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSB9IGZyb20gJy4vbGFuZ3VhZ2Uuc2VydmljZSc7XG5pbXBvcnQgKiBhcyBIaWdoQ2hhcnRzIGZyb20gJ2hpZ2hjaGFydHMnO1xuaW1wb3J0IGhpZ2hjaGFydHNNb3JlIGZyb20gJ2hpZ2hjaGFydHMvaGlnaGNoYXJ0cy1tb3JlJztcbmhpZ2hjaGFydHNNb3JlKEhpZ2hDaGFydHMpO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuZXhwb3J0IGludGVyZmFjZSBzZXJpZSB7XG4gIG5hbWU6IHN0cmluZyxcbiAgdHlwZT86IHN0cmluZyxcbiAgY29sb3JLZXk/OiBzdHJpbmcsXG4gIHBvaW50V2lkdGg/OiBudW1iZXIsXG4gIGNvbG9yQnlQb2ludD86IGJvb2xlYW4sXG4gIGNvbG9yPzogc3RyaW5nLFxuICBkYXRhOiBBcnJheTxhbnk+LFxuICBsaW5lV2lkdGg/OiBudW1iZXIsXG4gIG1hcmtlcj86IHtcbiAgICByYWRpdXM6IG51bWJlclxuICB9XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEhpZ2hjaGFydHNTZXJ2aWNlIHtcbiAgd2Vla2RheXNFUyA9IFsnRG9taW5nbycsICdMdW5lcycsICdNYXJ0ZXMnLCAnTWllcmNvbGVzJywgJ0p1ZXZlcycsICdWaWVybmVzJywgJ1PDoWJhZG8nXVxuICB3ZWVrZGF5c0NBID0gWydEaXVtZW5nZScsICdEaWxsdW5zJywgJ0RpbWFydHMnLCAnRGltZWNyZXMnLCAnRGlqb3VzJywgJ0RpdmVuZHJlcycsICdEaXNzYWJ0ZSddXG4gIHRpdGxlOiBzdHJpbmc7XG4gIGdyYXBoRGF0YSA9IFtdO1xuICByYW5nZXM6IGFueTtcbiAgdW5pdHM6IHN0cmluZztcbiAgc2VyaWVzOiBhbnlbXSA9IFtdXG4gIHhBeGlzOiBhbnlcbiAgeUF4aXM6IGFueVxuICBtaW5ZOiBhbnlcbiAgbWF4WTogYW55XG4gIGdyYXBoQmFzZU9uOiBzdHJpbmdcbiAgcG9pbnRXaWR0aDogbnVtYmVyO1xuICB3aXRoVG9vbHRpcCA9IGZhbHNlXG4gIGV4dHJhVG9vbHRpcDogYW55O1xuICBzY3JvbGxNaW5XaWR0aCA9IDU1MFxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxuICApIHsgfVxuXG4gIHNldFRpdGxlKHRpdGxlKXtcbiAgICB0aGlzLnRpdGxlID0gdGl0bGVcbiAgfVxuXG4gIHNldFVuaXRzKHVuaXRzKXtcbiAgICB0aGlzLnVuaXRzID0gdW5pdHNcbiAgfVxuXG4gIHNldExvY2FsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sYW5ndWFnZVNlcnZpY2UuZ2V0Q3VycmVudCgpO1xuICB9XG5cbiAgc2V0UG9pbnRXaWR0aChpbnRlcnZhbCk6IG51bWJlcntcbiAgICBzd2l0Y2ggKGludGVydmFsKSB7XG4gICAgICBjYXNlICcxZCc6ICAgICAgICBcbiAgICAgICAgcmV0dXJuIDEyO1xuICAgICAgY2FzZSAnMXcnOiAgICAgICAgXG4gICAgICAgIHJldHVybiAxMjsgIFxuICAgICAgY2FzZSAnMW0nOiAgICAgICAgXG4gICAgICAgIHJldHVybiA4OyAgIFxuICAgICAgY2FzZSAnMXknOiAgICAgICAgXG4gICAgICAgIHJldHVybiAxMjsgIFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIDIwO1xuICAgIH1cbiAgfVxuXG4gIHNldFNjcm9sbE1pbldpZHRoKGludGVydmFsKXtcbiAgICBzd2l0Y2ggKGludGVydmFsKSB7XG4gICAgICBjYXNlICcxZCc6ICAgICAgICBcbiAgICAgICAgdGhpcy5zY3JvbGxNaW5XaWR0aCA9IDYwMDtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJzF3JzogICAgICAgIFxuICAgICAgICB0aGlzLnNjcm9sbE1pbldpZHRoID0gNTAwOyAgXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICcxbSc6ICAgICAgICBcbiAgICAgICAgdGhpcy5zY3JvbGxNaW5XaWR0aCA9IDYwMDsgICBcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJzF5JzogICAgICAgIFxuICAgICAgICB0aGlzLnNjcm9sbE1pbldpZHRoID0gNTAwOyAgXG4gICAgICAgIGJyZWFrXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLnNjcm9sbE1pbldpZHRoID0gNTAwO1xuICAgIH1cbiAgfVxuXG4gIGFkZFRvb2x0aXAoaW50ZXJ2YWwpe1xuICAgIHN3aXRjaCAoaW50ZXJ2YWwpIHtcbiAgICAgIGNhc2UgJzFkJzogICAgICAgIFxuICAgICAgICB0aGlzLndpdGhUb29sdGlwID0gZmFsc2U7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICcxdyc6ICAgICAgICBcbiAgICAgIHRoaXMud2l0aFRvb2x0aXAgPSBmYWxzZTsgXG4gICAgICBicmVha1xuICAgICAgY2FzZSAnMW0nOiAgICAgICAgXG4gICAgICB0aGlzLndpdGhUb29sdGlwID0gdHJ1ZTsgXG4gICAgICBicmVha1xuICAgICAgY2FzZSAnMXknOiAgICBcbiAgICAgIGJyZWFrICAgIFxuICAgICAgdGhpcy53aXRoVG9vbHRpcCA9IGZhbHNlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgIHRoaXMud2l0aFRvb2x0aXAgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBnZXRXZWVrZGF5KCl7XG4gICByZXR1cm4gKHRoaXMuc2V0TG9jYWxlKCkgPT0gJ2VzJykgPyB0aGlzLndlZWtkYXlzRVMgOiB0aGlzLndlZWtkYXlzQ0FcbiAgfVxuXG4gIHNldFNlcmllcyhuYW1lLCBkYXRhLCBwb2ludFdpZHRoPywgbGluZVdpZHRoPywgY29sb3I/LCBjb2xvcktleT8sIGNvbG9yQnlQb2ludD8pe1xuICAgIGNvbnN0IHNlcmllX25hbWUgPSBuYW1lPyBuYW1lOiB0aGlzLnVuaXRzO1xuICAgIGNvbnN0IHNlcmllX2RhdGEgPSAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApPyBkYXRhOiB0aGlzLmdyYXBoRGF0YVxuICAgIGNvbnN0IHNlcmllX3BvaW50V2lkdGggPSBwb2ludFdpZHRoPyBwb2ludFdpZHRoOnRoaXMucG9pbnRXaWR0aFxuICAgIGNvbnN0IHNlcmllX2NvbG9yQnlQb2ludCA9IGNvbG9yQnlQb2ludD8gdHJ1ZTpmYWxzZTtcbiAgICBsZXQgc2VyaWU6IHNlcmllID0geyBuYW1lOiBzZXJpZV9uYW1lLCBkYXRhOiBzZXJpZV9kYXRhLCBwb2ludFdpZHRoOnNlcmllX3BvaW50V2lkdGgsIGNvbG9yQnlQb2ludDogIHNlcmllX2NvbG9yQnlQb2ludH1cbiAgICAvL2lmIChwb2ludFdpZHRoICE9IHVuZGVmaW5lZCkgc2VyaWVbJ3BvaW50V2lkdGgnXSA9IHBvaW50V2lkdGhcbiAgICBpZiAobGluZVdpZHRoKSBzZXJpZVsnbGluZVdpZHRoJ10gPSBsaW5lV2lkdGhcbiAgICBpZiAoY29sb3IpIHNlcmllWydjb2xvciddID0gY29sb3JcbiAgICBpZiAoY29sb3JLZXkpIHNlcmllWydjb2xvcktleSddID0gY29sb3JLZXlcbiAgICB0aGlzLnNlcmllcyA9IFtdXG4gICAgdGhpcy5zZXJpZXMucHVzaChzZXJpZSlcbiAgfVxuXG4gIC8vIHR5cGU6IHRoaXMudHlwZUNoYXJ0LFxuICAvLyBtYXhSYW5nZTogdGhpcy5taW4uZ2V0VGltZSgpLFxuICAvLyBjYXRlZ29yaWVzOiB0aGlzLndpdGhUb29sdGlwPyB0aGlzLmdyYXBoRGF0ZXM6IG51bGxcbiAgc2V0WEF4aXModHlwZSwgY2F0ZWdvcmllcywgbWF4UmFuZ2U/KXtcbiAgICB0aGlzLnhBeGlzID0ge3R5cGU6IHR5cGUsIG1heFJhbmdlOiBtYXhSYW5nZSwgY2F0ZWdvcmllczogY2F0ZWdvcmllcywgIGNyb3NzaGFpcjogdHJ1ZX1cbiAgfVxuXG4gIHNldFlBeGlzKG1pblksbWF4WSwgcmFuZ2VzLCB0ZXh0KXtcbiAgICAvL2NvbnNvbGUubG9nKCdbQWN0aXZpdHlHb2FsUGFnZV0gZ2VuZXJhdGVDaGFydCgpIG1heFk6ICcsIG1heFkpO1xuICAgIC8vU29sbyBwYXJhIEhQQyByZXF1aWVyZW4gcXVlIGVsIHZhbG9yIG3DrW5pbW8gZGUgZ3LDoWZpY2Egc2VhIDAsIGFxdcOtIHZhbGlkbyBxdWUgc2kgbm8gaGF5IHZhbG9yZXMgbmVnYXRpdm9zIHNlIGVsIG1pblkgPSAwO1xuICAgIGNvbnN0IHlfbWluID0gIG1pblk7Ly8gKG1pblkgPiAwKSA/IDAgOiBtaW5ZO1xuICAgIGNvbnN0IHlfbWF4ID0gKG1heFkpPyBtYXhZOiB0aGlzLm1heFlcbiAgICBjb25zdCB5X3RpdGxlID0ge3RleHQ6IHRleHQsIGFsaWduOiAnaGlnaCd9XG4gICAgdGhpcy55QXhpcyA9IHttaW46IHlfbWluLCBtYXg6IHlfbWF4LCBhbGlnblRpY2tzOiBmYWxzZSwgdGlja0ludGVydmFsOiBudWxsLCBzdGFydE9uVGljazogZmFsc2UsIHRpdGxlOnlfdGl0bGUsIG9wcG9zaXRlOiB0cnVlLCBwbG90QmFuZHM6IHJhbmdlc31cbiAgfVxuXG4gIHNldE1pblkodmFsdWVzQSwgdmFsdWVzQil7XG4gICAgaWYodmFsdWVzQSAmJiB2YWx1ZXNCICYmIHZhbHVlc0IubGVuZ3RoID4gMCl7XG4gICAgICBjb25zdCBBID0gTWF0aC5taW4uYXBwbHkobnVsbCwgdmFsdWVzQSlcbiAgICAgIGNvbnN0IEIgPSBNYXRoLm1pbi5hcHBseShudWxsLCB2YWx1ZXNCKVxuICAgICAgdGhpcy5taW5ZID0gQT5CPyBCOkFcbiAgICAgIHJldHVybiB0aGlzLm1pbllcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMubWluWSA9IE1hdGgubWluLmFwcGx5KG51bGwsIHZhbHVlc0EpXG4gICAgICByZXR1cm4gdGhpcy5taW5ZXG4gICAgfVxuICB9XG5cbiAgc2V0TWF4WSh2YWx1ZXNBLCB2YWx1ZXNCKXtcbiAgICBpZih2YWx1ZXNBICYmIHZhbHVlc0IgJiYgdmFsdWVzQi5sZW5ndGggPiAwKXtcbiAgICAgIGNvbnN0IEEgPSBNYXRoLm1heC5hcHBseShudWxsLCB2YWx1ZXNBKVxuICAgICAgY29uc3QgQiA9IE1hdGgubWF4LmFwcGx5KG51bGwsIHZhbHVlc0IpXG4gICAgICB0aGlzLm1heFkgPSBBPkI/IEE6QlxuICAgICAgcmV0dXJuIHRoaXMubWF4WVxuICAgIH1lbHNle1xuICAgICAgdGhpcy5tYXhZID0gIE1hdGgubWF4LmFwcGx5KG51bGwsIHZhbHVlc0EpXG4gICAgICByZXR1cm4gdGhpcy5tYXhZXG4gICAgfVxuICB9XG5cblxuICBnZXRPcHRpb25zQ2hhcnQoZ3JhcGhCYXNlT24pIHtcbiAgICAvLy8vY29uc29sZS5sb2coJ1tBY3Rpdml0eUdvYWxQYWdlXSBnZW5lcmF0ZUNoYXJ0KCkgZ3JhcGhCYXNlT246ICcsIGdyYXBoQmFzZU9uKTtcbiAgICBsZXQgIGNoYXJ0cyAvLz0gSGlnaENoYXJ0c1xuICAgIHN3aXRjaCAoZ3JhcGhCYXNlT24pIHtcbiAgICAgIGNhc2UgJ2F2Zyc6ICBcbiAgICAgICAgLy9jaGFydHMuY2hhcnQoJ2NvbnRhaW5lcicsIHtcbiAgICAgICAgY2hhcnRzID0ge1xuICAgICAgICAgIGNoYXJ0OiB7XG4gICAgICAgICAgICByZW5kZXJUbzogJ2NvbnRhaW5lcicsXG4gICAgICAgICAgICB0eXBlOiAnY29sdW1uJyxcbiAgICAgICAgICAgIHpvb21UeXBlOiAneCcsXG4gICAgICAgICAgICBzY3JvbGxhYmxlUGxvdEFyZWE6IHtcbiAgICAgICAgICAgICAgbWluV2lkdGg6IHRoaXMuc2Nyb2xsTWluV2lkdGgsXG4gICAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uWDogMVxuICAgICAgICAgICAgfSAgIFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgIHRleHQ6IHRoaXMudGl0bGUgXG4gICAgICAgICAgfSxcbiAgICAgICAgICB4QXhpczogIHRoaXMueEF4aXMsXG4gICAgICAgICAgeUF4aXM6IHRoaXMueUF4aXMsXG4gICAgICAgICAgcmFuZ2VTZWxlY3Rvcjoge1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGxvdE9wdGlvbnM6IHtcbiAgICAgICAgICAgIHNlcmllczoge1xuICAgICAgICAgICAgICBhbGxvd1BvaW50U2VsZWN0OiB0cnVlLFxuICAgICAgICAgICAgICBib3JkZXJXaWR0aDogMSxcbiAgICAgICAgICAgICAgZGF0YUxhYmVsczoge1xuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiAne3BvaW50Lnl9J1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGVnZW5kOiB7XG4gICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY3JlZGl0czoge1xuICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlcmllczogdGhpcy5zZXJpZXMsXG4gICAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgICAgdmFsdWVTdWZmaXg6IGAgJHt0aGlzLnVuaXRzfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxhbmc6IHtcbiAgICAgICAgICAgIHdlZWtkYXlzOiB0aGlzLmdldFdlZWtkYXkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmFuZ2UnOiAgIFxuICAgICAgIC8vY2hhcnRzLmNoYXJ0KCdjb250YWluZXInLCB7XG4gICAgICAgIGNoYXJ0cyA9IHtcbiAgICAgICAgICBjaGFydDoge1xuICAgICAgICAgICAgcmVuZGVyVG86ICdjb250YWluZXInLFxuICAgICAgICAgICAgdHlwZTogJ2FyZWFyYW5nZScsXG4gICAgICAgICAgICB6b29tVHlwZTogJ3gnLFxuICAgICAgICAgICAgc2Nyb2xsYWJsZVBsb3RBcmVhOiB7XG4gICAgICAgICAgICAgICAgbWluV2lkdGg6IHRoaXMuc2Nyb2xsTWluV2lkdGgsXG4gICAgICAgICAgICAgICAgc2Nyb2xsUG9zaXRpb25YOiAxXG4gICAgICAgICAgICB9ICAgIFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgIHRleHQ6IHRoaXMudGl0bGUgXG4gICAgICAgICAgfSxcbiAgICAgICAgICB4QXhpczogdGhpcy54QXhpcyxcbiAgICAgICAgICB5QXhpczogdGhpcy55QXhpcyxcbiAgICAgICAgICBsZWdlbmQ6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjcmVkaXRzOiB7XG4gICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VyaWVzOiB0aGlzLnNlcmllcyxcbiAgICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgICB2YWx1ZVN1ZmZpeDogYCAke3RoaXMudW5pdHN9YFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGFuZzoge1xuICAgICAgICAgICAgd2Vla2RheXM6IHRoaXMuZ2V0V2Vla2RheSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vKTtcbiAgICAgICAgXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbGFzVmFsdWUnOiAvL2JhcnJhIG8gcHVudG8gdmFsb3IgZGUgMCBhbCBpbmljaW9cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vY2hhcnRzLmNoYXJ0KCdjb250YWluZXInLCB7XG4gICAgICAgIGNoYXJ0cyA9IHtcbiAgICAgICAgICBjaGFydDoge1xuICAgICAgICAgICAgcmVuZGVyVG86ICdjb250YWluZXInLFxuICAgICAgICAgICAgdHlwZTogJ2NvbHVtbicsXG4gICAgICAgICAgICB6b29tVHlwZTogJ3gnLFxuICAgICAgICAgICAgc2Nyb2xsYWJsZVBsb3RBcmVhOiB7XG4gICAgICAgICAgICAgIG1pbldpZHRoOiB0aGlzLnNjcm9sbE1pbldpZHRoLFxuICAgICAgICAgICAgICBzY3JvbGxQb3NpdGlvblg6IDFcbiAgICAgICAgICAgIH0gICBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRpdGxlIFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeEF4aXM6ICB0aGlzLnhBeGlzLFxuICAgICAgICAgIHlBeGlzOiB0aGlzLnlBeGlzLFxuICAgICAgICAgIHJhbmdlU2VsZWN0b3I6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBsb3RPcHRpb25zOiB7XG4gICAgICAgICAgICBzZXJpZXM6IHtcbiAgICAgICAgICAgICAgYWxsb3dQb2ludFNlbGVjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDEsXG4gICAgICAgICAgICAgIGRhdGFMYWJlbHM6IHtcbiAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZvcm1hdDogJ3twb2ludC55fSdcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGxlZ2VuZDoge1xuICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNyZWRpdHM6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXJpZXM6IHRoaXMuc2VyaWVzLFxuICAgICAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgICAgIHZhbHVlU3VmZml4OiBgICR7dGhpcy51bml0c31gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsYW5nOiB7XG4gICAgICAgICAgICB3ZWVrZGF5czogdGhpcy5nZXRXZWVrZGF5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8pO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cblxuICAgIGlmKHRoaXMud2l0aFRvb2x0aXApe1xuICAgICAgbGV0IHRvb2wgPSBgPHRhYmxlPjx0cj48dGggY29sc3Bhbj1cIjFcIj57cG9pbnQua2V5fSAke3RoaXMuZXh0cmFUb29sdGlwfTwvdGg+PC90cj5gIC8vXG4gICAgICBIaWdoQ2hhcnRzLnNldE9wdGlvbnMoe1xuICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgaGVhZGVyRm9ybWF0OiB0b29sLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYXJ0c1xuICB9XG5cbiAgZ3JvdXBCeUNhdGVnb3J5KGludGVydmFsLCBlbGVtZW50KXtcbiAgIGxldCBsYW5ndWFnZT0gdGhpcy5sYW5ndWFnZVNlcnZpY2UuZ2V0Q3VycmVudCgpO1xuICAgIC8vLy9jb25zb2xlLmxvZygnW0hpZ2hjaGFydHNTZXJ2aWNlXSBncm91cEJ5Q2F0ZWdvcnkgJywgZWxlbWVudC5kYXRlX3ZhbHVlKTtcbiAgICBsZXQgZWxlbWVudERhdGUgPSBuZXcgRGF0ZShlbGVtZW50LmRhdGVfdmFsdWUpO1xuICAgIGxldCBncm91cEJ5RGF0ZSA9IFwiXCI7XG4gICAgbGV0IHRvb2x0aXAgPSBcIlwiO1xuICAgIC8vLy9jb25zb2xlLmxvZygnW0hpZ2hjaGFydHNTZXJ2aWNlXSBncm91cEJ5Q2F0ZWdvcnkgJywgZWxlbWVudC5kYXRlX3ZhbHVlKTtcbiAgICBzd2l0Y2ggKGludGVydmFsKSB7XG4gICAgICBjYXNlICcxZCc6Ly8gZ3JvdXAgYnkgZGF5XG4gICAgICAgIGxldCBob3VyID0gZWxlbWVudC5kYXRlPy5zcGxpdCgnICcpWzFdXG4gICAgICAgIGdyb3VwQnlEYXRlID0gaG91clxuICAgICAgICAvLyBsZXQgaXNBbGxWYWx1ZSA9ICh0aGlzLmdyYXBoQmFzZU9uID09ICdsYXNWYWx1ZScgfHwgdGhpcy5ncmFwaEJhc2VPbiA9PSAncmFuZ2UnKT8gdHJ1ZTpmYWxzZVxuICAgICAgICAvLyBncm91cEJ5RGF0ZSA9IGlzQWxsVmFsdWU/IGhvdXIgOiBob3VyLnNwbGl0KCc6JylbMF0gKyAnOicgKyBob3VyLnNwbGl0KCc6JylbMV07XG4gICAgICAgIHRvb2x0aXAgPSBtb21lbnQoZWxlbWVudERhdGUsIFwiWVlZWS1NTS1ERFwiKS5sb2NhbGUoJ2VzJykuZGF0ZSgpICsgJy8nICsgZWxlbWVudERhdGUudG9Mb2NhbGVTdHJpbmcoJ2VzLUVTJywgeyBtb250aDogJ3Nob3J0JyB9KSArICcvJyArIGVsZW1lbnREYXRlLmdldEZ1bGxZZWFyKCkrJyAnK2dyb3VwQnlEYXRlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJzF3JzpcbiAgICAgICAgbGV0IGRhdGUgPSB0aGlzLmZvcm1hdFNlbGVjdGVkRGF0ZShlbGVtZW50LmRhdGVfdmFsdWUpXG4gICAgICAgIGxldCBkYXkgPSBkYXRlLnRvTG9jYWxlU3RyaW5nKGxhbmd1YWdlLCB7IHdlZWtkYXk6ICdzaG9ydCcgfSlcbiAgICAgICAgZ3JvdXBCeURhdGUgPSB0aGlzLnRpdGxlQ2FzZShkYXkpICsnICcrIHRoaXMuZm9ybWF0U2VsZWN0ZWREYXRlMihlbGVtZW50LmRhdGVfdmFsdWUsICdkJylcbiAgICAgICAgdG9vbHRpcCA9IG1vbWVudChlbGVtZW50RGF0ZSwgXCJZWVlZLU1NLUREXCIpLmxvY2FsZSgnZXMnKS5kYXRlKCkgKyAnLycgKyBlbGVtZW50RGF0ZS50b0xvY2FsZVN0cmluZygnZXMtRVMnLCB7IG1vbnRoOiAnc2hvcnQnIH0pICsgJy8nICsgZWxlbWVudERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcxbSc6XG4gICAgICAgIC8vbGV0IG1vbnRoID0gZWxlbWVudERhdGUudG9Mb2NhbGVTdHJpbmcoJ2VzLUVTJywgeyBtb250aDogJ3Nob3J0JyB9KTtcbiAgICAgICAgZ3JvdXBCeURhdGUgPSB0aGlzLmZvcm1hdFNlbGVjdGVkRGF0ZTIoZWxlbWVudC5kYXRlX3ZhbHVlLCAnZCcpIC8vKyAnICcgKyBtb250aFxuICAgICAgICB0b29sdGlwID0gbW9tZW50KGVsZW1lbnREYXRlLCBcIllZWVktTU0tRERcIikubG9jYWxlKCdlcycpLmRhdGUoKSArICcvJyArIGVsZW1lbnREYXRlLnRvTG9jYWxlU3RyaW5nKCdlcy1FUycsIHsgbW9udGg6ICdzaG9ydCcgfSkgKyAnLycgKyBlbGVtZW50RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJzF5JzpcbiAgICAgICAgbGV0IG1vbnRoID0gbmV3IERhdGUoKTsgbW9udGguc2V0TW9udGgoTnVtYmVyKGVsZW1lbnQuZGF0ZV92YWx1ZSktMSk7IFxuICAgICAgICBncm91cEJ5RGF0ZSA9IG1vbnRoLnRvTG9jYWxlU3RyaW5nKGxhbmd1YWdlLCB7IG1vbnRoOiAnc2hvcnQnIH0pXG4gICAgICAgIGdyb3VwQnlEYXRlID0gdGhpcy50aXRsZUNhc2UoZ3JvdXBCeURhdGUpIDtcbiAgICAgICAgdG9vbHRpcCA9ICBtb250aC50b0xvY2FsZVN0cmluZyhsYW5ndWFnZSwgeyBtb250aDogJ3Nob3J0JyB9KSArICcvJyArIG1vbnRoLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gICAgcmV0dXJuIHtncm91cEJ5RGF0ZTogZ3JvdXBCeURhdGUsIHRvb2x0aXA6IHRvb2x0aXB9XG4gIH1cblxuICBmb3JtYXRTZWxlY3RlZERhdGUyKGQsIGZvcm1hdCkge1xuICAgIHZhciBhdXhkYXRlID0gZC5zcGxpdCgnICcpXG4gICAgZCA9IGQucmVwbGFjZSgnICcsICdUJylcbiAgICBsZXQgZGF0ZTAgPSBuZXcgRGF0ZShkKS50b1VUQ1N0cmluZygpO1xuICAgIGxldCBkYXRlID0gbmV3IERhdGUoZGF0ZTApO1xuICAgIGxldCB0aW1lID0gYXV4ZGF0ZVsxXTtcbiAgICBkYXRlLnNldEhvdXJzKHRpbWUuc3Vic3RyaW5nKDAsIDIpKTtcbiAgICBkYXRlLnNldE1pbnV0ZXModGltZS5zdWJzdHJpbmcoMywgNSkpO1xuICAgIGxldCBsYW5ndWFnZSA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLmdldEN1cnJlbnQoKTtcbiAgICBjb25zdCBkYXRlUGlwZTogRGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuJyk7XG4gICAgcmV0dXJuIGRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCBmb3JtYXQpO1xuICB9XG5cbiAgZm9ybWF0U2VsZWN0ZWREYXRlKGQpIHtcbiAgICB2YXIgYXV4ZGF0ZSA9IGQuc3BsaXQoJyAnKVxuICAgIGQgPSBkLnJlcGxhY2UoJyAnLCAnVCcpXG4gICAgbGV0IGRhdGUwID0gbmV3IERhdGUoZCkudG9VVENTdHJpbmcoKTtcbiAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKGRhdGUwKTtcbiAgICBsZXQgdGltZSA9IGF1eGRhdGVbMV07XG4gICAgZGF0ZS5zZXRIb3Vycyh0aW1lLnN1YnN0cmluZygwLCAyKSk7XG4gICAgZGF0ZS5zZXRNaW51dGVzKHRpbWUuc3Vic3RyaW5nKDMsIDUpKTtcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgdGl0bGVDYXNlKHdvcmQpe1xuICAgIHJldHVybiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKVxuICB9XG5cbiAgZ2V0R3JvdXBlZERhdGEoanNvbiwgaW50ZXJ2YWwsIHdpdGhvVG9sdGlwPzpib29sZWFuKXtcbiAgICBsZXQgd2l0aFRvb2x0aXA6IGJvb2xlYW4gPSBmYWxzZVxuICAgIGxldCB0b29sdGlwID0gW11cbiAgICBsZXQgZ3JvdXBEYXRhOiBhbnk7XG4gICAgbGV0IGdyb3VwcyA9IFtdXG4gICAgbGV0IHZhbHVlc0EgPSBbXTtcbiAgICBsZXQgdmFsdWVzQiA9IFtdO1xuICAgIGxldCBkYXRlc0EgPSBbXTtcbiAgICBsZXQgZ3JhcGhEYXRhID0gW107XG4gICAgbGV0IGdyYXBoQmFzZU9uID0ganNvbi5ncmFwaEJhc2VPblxuICAgIHRoaXMuZ3JhcGhCYXNlT24gPSBqc29uLmdyYXBoQmFzZU9uO1xuICAgIHN3aXRjaCAoZ3JhcGhCYXNlT24pIHtcbiAgICAgIGNhc2UgJ2F2ZXJhZ2UnOiBcbiAgICAgIGNhc2UgJ2F2Zyc6IFxuICAgICAgICBncm91cHMgPSBqc29uLnZhbHVlcy5yZWR1Y2UoKGdyb3VwcywgZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKGVsZW1lbnQuYXZnKTtcbiAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBCeUNhdGVnb3J5KGludGVydmFsLCBlbGVtZW50KVxuICAgICAgICAgIC8vIElmIGRhdGUgZG9lc24ndCBleGlzdCBpbiBhcnJheSwgdGhlbiBjcmVhdGUgaXRcbiAgICAgICAgICBpZiAoIWdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0pIHtcbiAgICAgICAgICAgIGdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0gPSBbXTtcbiAgICAgICAgICAgIGdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0udmFsdWUgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBncm91cHNbZ3JvdXAuZ3JvdXBCeURhdGVdLnZhbHVlICs9IHZhbHVlO1xuICAgICAgICAgIGdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0udG9vbHRpcCA9IGdyb3VwLnRvb2x0aXAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIGdyb3VwcztcbiAgICAgICAgfSwge30pOyBcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKCdbSGlnaGNoYXJ0c1NlcnZpY2VdIHJhbmdlR3JhcGgnLCBncm91cHMpOyBcbiAgICAgICAgT2JqZWN0LmtleXMoZ3JvdXBzKS5tYXAoKGRhdGUpID0+IHtcbiAgICAgICAgICBkYXRlc0EucHVzaChkYXRlKTtcbiAgICAgICAgICB2YWx1ZXNBLnB1c2goZ3JvdXBzW2RhdGVdLnZhbHVlKTtcbiAgICAgICAgICAvLyBpZih3aXRoVG9vbHRpcClcbiAgICAgICAgICAvLyAgIGdyYXBoRGF0YS5wdXNoKHt5OiBncm91cHNbZGF0ZV0udG90YWwsIHRvb2x0aXA6IGdyb3Vwc1tkYXRlXS50b29sdGlwfSk7XG4gICAgICAgICAgLy8gZWxzZVxuICAgICAgICAgICAgaWYod2l0aFRvb2x0aXApXG4gICAgICAgICAgICB0b29sdGlwLnB1c2goZ3JvdXBzW2RhdGVdLnRvb2x0aXApXG4gICAgICAgICAgICBncmFwaERhdGEucHVzaChbZGF0ZSwgZ3JvdXBzW2RhdGVdLnZhbHVlXSk7XG4gICAgXG4gICAgICAgIH0pOyAgXG4gICAgICAgIC8vLy9jb25zb2xlLmxvZygnW0hpZ2hjaGFydHNTZXJ2aWNlXSBncmFwaERhdGEnLCBncmFwaERhdGEpO1xuICAgICAgICBncm91cERhdGEgPSB7ZGF0ZXM6IGRhdGVzQSwgdmFsdWVzQTogdmFsdWVzQSwgZ3JhcGhEYXRhOiBncmFwaERhdGF9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyYW5nZSc6IFxuICAgICAgICBncm91cHMgPSBqc29uLnZhbHVlcy5yZWR1Y2UoKGdyb3VwcywgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVNYXggPSBOdW1iZXIoZWxlbWVudC5tYXgpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVNaW4gPSBOdW1iZXIoZWxlbWVudC5taW4pO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3VwQnlDYXRlZ29yeShpbnRlcnZhbCwgZWxlbWVudClcbiAgICAgICAgICAgIC8vIElmIGRhdGUgZG9lc24ndCBleGlzdCBpbiBhcnJheSwgdGhlbiBjcmVhdGUgaXRcbiAgICAgICAgICAgIGlmICghZ3JvdXBzW2dyb3VwLmdyb3VwQnlEYXRlXSkge1xuICAgICAgICAgICAgICBncm91cHNbZ3JvdXAuZ3JvdXBCeURhdGVdID0gW107XG4gICAgICAgICAgICAgIGdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0udmFsdWVNYXggPSAwO1xuICAgICAgICAgICAgICBncm91cHNbZ3JvdXAuZ3JvdXBCeURhdGVdLnZhbHVlTWluID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0udmFsdWVNYXggKz0gdmFsdWVNYXg7XG4gICAgICAgICAgICBncm91cHNbZ3JvdXAuZ3JvdXBCeURhdGVdLnZhbHVlTWluICs9IHZhbHVlTWluO1xuICAgICAgICAgICAgZ3JvdXBzW2dyb3VwLmdyb3VwQnlEYXRlXS50b29sdGlwID0gZ3JvdXAudG9vbHRpcFxuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBzO1xuICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKCdbSGlnaGNoYXJ0c1NlcnZpY2VdIHJhbmdlR3JhcGgnLCBncm91cHMpOyBcbiAgICAgICAgICBPYmplY3Qua2V5cyhncm91cHMpLm1hcCgoZGF0ZSkgPT4ge1xuICAgICAgICAgICAgZGF0ZXNBLnB1c2goZGF0ZSk7XG4gICAgICAgICAgICB2YWx1ZXNBLnB1c2goZ3JvdXBzW2RhdGVdLnZhbHVlTWF4KTtcbiAgICAgICAgICAgIHZhbHVlc0IucHVzaChncm91cHNbZGF0ZV0udmFsdWVNaW4pO1xuICAgICAgICAgICAgLy8gaWYod2l0aFRvb2x0aXApXG4gICAgICAgICAgICAvLyAgIGdyYXBoRGF0YS5wdXNoKHt5OiBncm91cHNbZGF0ZV0udG90YWwsIHRvb2x0aXA6IGdyb3Vwc1tkYXRlXS50b29sdGlwfSk7XG4gICAgICAgICAgICAvLyBlbHNlXG4gICAgICAgICAgICAgIGlmKHdpdGhUb29sdGlwKVxuICAgICAgICAgICAgICB0b29sdGlwLnB1c2goZ3JvdXBzW2RhdGVdLnRvb2x0aXApXG4gICAgICAgICAgICAgIGdyYXBoRGF0YS5wdXNoKFtkYXRlLCBncm91cHNbZGF0ZV0udmFsdWVNaW4sIGdyb3Vwc1tkYXRlXS52YWx1ZU1heF0pO1xuICAgICAgXG4gICAgICAgICAgfSk7ICBcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKCdbSGlnaGNoYXJ0c1NlcnZpY2VdIGdyYXBoRGF0YScsIGdyYXBoRGF0YSk7XG4gICAgICAgIGdyb3VwRGF0YSA9IHtkYXRlczogZGF0ZXNBLCB2YWx1ZXNBOiB2YWx1ZXNBLCB2YWx1ZXNCOiB2YWx1ZXNCLCBncmFwaERhdGE6IGdyYXBoRGF0YX1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3N1bSc6ICBcbiAgICAgICAgZ3JvdXBzID0ganNvbi52YWx1ZXMucmVkdWNlKChncm91cHMsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gTnVtYmVyKGVsZW1lbnQudmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3VwQnlDYXRlZ29yeShpbnRlcnZhbCwgZWxlbWVudClcbiAgICAgICAgICAgIC8vIElmIGRhdGUgZG9lc24ndCBleGlzdCBpbiBhcnJheSwgdGhlbiBjcmVhdGUgaXRcbiAgICAgICAgICAgIGlmICghZ3JvdXBzW2dyb3VwLmdyb3VwQnlEYXRlXSkge1xuICAgICAgICAgICAgICBncm91cHNbZ3JvdXAuZ3JvdXBCeURhdGVdID0gW107XG4gICAgICAgICAgICAgIGdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0udmFsdWUgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JvdXBzW2dyb3VwLmdyb3VwQnlEYXRlXS52YWx1ZSArPSB2YWx1ZTtcbiAgICAgICAgICAgIGdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0udG9vbHRpcCA9IGdyb3VwLnRvb2x0aXAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBzO1xuICAgICAgICB9LCB7fSk7IFxuICAgICAgICAvLy8vY29uc29sZS5sb2coJ1tIaWdoY2hhcnRzU2VydmljZV0gcmFuZ2VHcmFwaCcsIGdyb3Vwcyk7IFxuICAgICAgICBPYmplY3Qua2V5cyhncm91cHMpLm1hcCgoZGF0ZSkgPT4ge1xuICAgICAgICAgIGRhdGVzQS5wdXNoKGRhdGUpO1xuICAgICAgICAgIHZhbHVlc0EucHVzaChncm91cHNbZGF0ZV0udmFsdWUpO1xuICAgICAgICAgIC8vIGlmKHdpdGhUb29sdGlwKVxuICAgICAgICAgIC8vICAgZ3JhcGhEYXRhLnB1c2goe3k6IGdyb3Vwc1tkYXRlXS50b3RhbCwgdG9vbHRpcDogZ3JvdXBzW2RhdGVdLnRvb2x0aXB9KTtcbiAgICAgICAgICAvLyBlbHNlXG4gICAgICAgICAgICBpZih3aXRoVG9vbHRpcClcbiAgICAgICAgICAgIHRvb2x0aXAucHVzaChncm91cHNbZGF0ZV0udG9vbHRpcClcbiAgICAgICAgICAgIGdyYXBoRGF0YS5wdXNoKFtkYXRlLCBncm91cHNbZGF0ZV0udmFsdWVdKTtcbiAgICAgICAgfSk7ICBcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKCdbSGlnaGNoYXJ0c1NlcnZpY2VdIGdyYXBoRGF0YScsIGdyYXBoRGF0YSk7XG4gICAgICAgIGdyb3VwRGF0YSA9IHtkYXRlczogZGF0ZXNBLCB2YWx1ZXNBOiB2YWx1ZXNBLCBncmFwaERhdGE6IGdyYXBoRGF0YX1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2xhc1ZhbHVlJzogIFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAganNvbi52YWx1ZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IE51bWJlcihlbGVtZW50LnZhbHVlKTtcbiAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBCeUNhdGVnb3J5KGludGVydmFsLCBlbGVtZW50KVxuICAgICAgICAgIC8vIElmIGRhdGUgZG9lc24ndCBleGlzdCBpbiBhcnJheSwgdGhlbiBjcmVhdGUgaXRcbiAgICAgICAgICBpZiAoIWdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0pIHtcbiAgICAgICAgICAgIGdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0gPSBbXTtcbiAgICAgICAgICAgIGdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0udmFsdWUgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBncm91cHNbZ3JvdXAuZ3JvdXBCeURhdGVdLnZhbHVlICs9IHZhbHVlO1xuICAgICAgICAgIGdyb3Vwc1tncm91cC5ncm91cEJ5RGF0ZV0udG9vbHRpcCA9IGdyb3VwLnRvb2x0aXAgICAgIFxuICAgICAgICB9KVxuICAgICAgICAvLy8vY29uc29sZS5sb2coJ1tIaWdoY2hhcnRzU2VydmljZV0gcmFuZ2VHcmFwaCcsIGdyb3Vwcyk7IFxuICAgICAgICBPYmplY3Qua2V5cyhncm91cHMpLm1hcCgoZGF0ZSkgPT4ge1xuICAgICAgICAgIGRhdGVzQS5wdXNoKGRhdGUpO1xuICAgICAgICAgIHZhbHVlc0EucHVzaChncm91cHNbZGF0ZV0udmFsdWUpO1xuICAgICAgICAgIC8vIGlmKHdpdGhUb29sdGlwKVxuICAgICAgICAgIC8vICAgZ3JhcGhEYXRhLnB1c2goe3k6IGdyb3Vwc1tkYXRlXS50b3RhbCwgdG9vbHRpcDogZ3JvdXBzW2RhdGVdLnRvb2x0aXB9KTtcbiAgICAgICAgICAvLyBlbHNlXG4gICAgICAgICAgICBpZih3aXRoVG9vbHRpcClcbiAgICAgICAgICAgIHRvb2x0aXAucHVzaChncm91cHNbZGF0ZV0udG9vbHRpcClcbiAgICAgICAgICAgIGdyYXBoRGF0YS5wdXNoKFtkYXRlLCBncm91cHNbZGF0ZV0udmFsdWVdKTsgICBcbiAgICAgICAgfSk7ICBcbiAgICAgICAgLy8vL2NvbnNvbGUubG9nKCdbSGlnaGNoYXJ0c1NlcnZpY2VdIGdyYXBoRGF0YScsIGdyYXBoRGF0YSk7XG4gICAgICAgIGdyb3VwRGF0YSA9IHtkYXRlczogZGF0ZXNBLCB2YWx1ZXNBOiB2YWx1ZXNBLCBncmFwaERhdGE6IGdyYXBoRGF0YX1cbiAgICAgICAgYnJlYWtcbiAgICB9XG4gICAgcmV0dXJuIGdyb3VwRGF0YTtcbiAgfVxuXG4gIGdldFJhbmdlcyhlbGVtZW50LCBtaW4sIG1heCkge1xuICAgIGxldCBub3JtYWxWYWx1ZSA9IFtdXG4gICAgbGV0IG91dFJhbmdlVmFsdWUgPSBbXVxuICAgIGxldCBkYW5nZXJWYWx1ZSA9IFtdXG4gICAgbGV0IHZhbHVlID0gW11cbiAgICBsZXQgcmFuZ2VzID0gZWxlbWVudC5yYW5nZXM7XG5cbiAgICByYW5nZXMuZm9yRWFjaChyYW5nZSA9PiB7XG4gICAgICB2YXIgciA9IFtdO1xuICAgICAgdmFyIGNvbG9yO1xuXG4gICAgICAgIC8qXG4gICAgICAqIE5vIHRvbWEgZW4gY3VlbnRhIGxvcyBkZWNpbWFsZXMgY29uIGNvbWEgKCwpXG4gICAgICAqL1xuICAgICAgcmFuZ2UudmFsdWUxID0gIHBhcnNlRmxvYXQocmFuZ2UudmFsdWUxPy5yZXBsYWNlKFwiLFwiLFwiLlwiKSk7XG4gICAgICByYW5nZS52YWx1ZTIgPSAgcGFyc2VGbG9hdChyYW5nZS52YWx1ZTI/LnJlcGxhY2UoXCIsXCIsXCIuXCIpKTtcblxuICAgICAgaWYgKHJhbmdlLnJhbmdlQ29uZGl0aW9uID09ICc+JyB8fCByYW5nZS5yYW5nZUNvbmRpdGlvbiA9PSAnPT4nKSB7XG4gICAgICAgIHJbXCJmcm9tXCJdID0gcmFuZ2UudmFsdWUxO1xuICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IHRoaXMuZ2V0TWF4UmFuZ2UocmFuZ2UudmFsdWUxLCBtYXgpIDtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnW0FjdGl2aXR5R29hbFBhZ2VdIG1heFZhbHVlICcsIG1heFZhbHVlKTtcbiAgICAgICAgcltcInRvXCJdID0gdGhpcy5nZXRNYXhSYW5nZShyYW5nZS52YWx1ZTEsIG1heCkgO1xuICAgICAgfVxuXG4gICAgICBpZiAocmFuZ2UucmFuZ2VDb25kaXRpb24gPT0gJzwnIHx8IHJhbmdlLnJhbmdlQ29uZGl0aW9uID09ICc8PScpIHtcbiAgICAgICAgcltcImZyb21cIl0gPSBtaW47XG4gICAgICAgIHJbXCJ0b1wiXSA9IHJhbmdlLnZhbHVlMTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJhbmdlLnJhbmdlQ29uZGl0aW9uID09ICdhPHg8YicpIHtcbiAgICAgICAgcltcImZyb21cIl0gPSByYW5nZS52YWx1ZTE7XG4gICAgICAgIHJbXCJ0b1wiXSA9IHJhbmdlLnZhbHVlMjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJhbmdlLnJhbmdlVHlwZSA9PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgY29sb3IgPSAncmdiYSg5NiwgMTczLCAxMjEsIDAuMSknO1xuICAgICAgZWxzZSBpZiAocmFuZ2UucmFuZ2VUeXBlID09IFwid2FybmluZ1wiKVxuICAgICAgICBjb2xvciA9ICdyZ2JhKDI0NSwgMTU3LCAyNCwgMC4xKSc7IC8vJ3JnYigyNDMsIDE1NiwgMTgsIDAuMSknXG4gICAgICBlbHNlIGlmIChyYW5nZS5yYW5nZVR5cGUgPT0gXCJkYW5nZXJcIilcbiAgICAgICAgY29sb3IgPSAncmdiYSgyNDUsIDQ2LCAyNCwgMC4xKSc7IC8vJ3JnYigyMzEsIDc2LCA2MCwgMC4xKSdcblxuICAgICAgcltcImNvbG9yXCJdID0gY29sb3I7XG4gICAgICB2YWx1ZS5wdXNoKHIpO1xuXG4gICAgICBpZiAocmFuZ2UucmFuZ2VUeXBlID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICBub3JtYWxWYWx1ZS5wdXNoKHJhbmdlLmNvbmRpdGlvblN0cmluZylcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHJhbmdlLnJhbmdlVHlwZSA9PSBcIndhcm5pbmdcIikge1xuICAgICAgICBvdXRSYW5nZVZhbHVlLnB1c2gocmFuZ2UuY29uZGl0aW9uU3RyaW5nKVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAocmFuZ2UucmFuZ2VUeXBlID09IFwiZGFuZ2VyXCIpIHtcbiAgICAgICAgZGFuZ2VyVmFsdWUucHVzaChyYW5nZS5jb25kaXRpb25TdHJpbmcpXG4gICAgICB9XG5cbiAgICB9KTtcbiAgICBpZiAodmFsdWU/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCByYW5nZXNFbGVtZW50ID0ge1xuICAgICAgICBuYW1lOiBlbGVtZW50Lm5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBlbGVtZW50LmRlc2NyaXB0aW9uLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIG5vcm1hbFZhbHVlOiBub3JtYWxWYWx1ZSxcbiAgICAgICAgb3V0UmFuZ2VWYWx1ZTogb3V0UmFuZ2VWYWx1ZSxcbiAgICAgICAgZGFuZ2VyVmFsdWU6IGRhbmdlclZhbHVlXG4gICAgICB9XG4gICAgICAvL2NvbnNvbGUubG9nKCdbQWN0aXZpdHlHb2FsUGFnZV0gZ2V0UmFuZ2VzKCkgcmFuZ2VzOiAnLCByYW5nZXNFbGVtZW50KTtcbiAgICAgIHJldHVybiByYW5nZXNFbGVtZW50XG4gICAgfVxuICAgIGVsc2UgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIC8vQXF1aSBzZSBzZXRlYSBlbCB2YWxvciBtYXggZW4gWSBzdW1hbmRvIGVsIHJhbmdvIG3DoXhpbW8geSB2YWxvciBtw6F4aW1vIGluZ3Jlc2FkbyBkaXZkaWRvIGVudHJlIDJcbiAgZ2V0TWF4UmFuZ2UocmFuZ2VNYXgsIG1heCl7XG4gICAgbGV0IHZhbHVlMSA9IE51bWJlcihyYW5nZU1heClcbiAgICBsZXQgdmFsdWUyID0gTnVtYmVyKG1heClcbiAgICBpZih2YWx1ZTIgPD0gdmFsdWUxKVxuICAgICAgdGhpcy5tYXhZID0gdmFsdWUxICsgdmFsdWUyLzI7ICAgXG4gICAgZWxzZSBcbiAgICAgIHRoaXMubWF4WSA9IHZhbHVlMlxuICAgICAgcmV0dXJuIHRoaXMubWF4WSBcbiAgfVxuXG4gIHNldEhpZ2hjaGFydHNPcHRpb25zKGpzb24sIHBhcmFtcyl7XG4gICAgbGV0IG9wdCA9IGpzb24/LmdyYXBoQmFzZU9uXG4gICAgbGV0IGludGVydmFsID0gcGFyYW1zLmludGVydmFsXG4gICAgbGV0IG5hbWUgPSBqc29uPy5uYW1lXG4gICAgbGV0IHR5cGVDaGFydCA9ICcnXG4gICAgbGV0IHZhbHVlc0EgPSBbXTtcbiAgICBsZXQgdmFsdWVzQiA9IFtdO1xuICAgIGxldCBkYXRlc0EgPSBbXTtcbiAgICBsZXQgZ3JhcGhEYXRhID0gW107XG4gICAgbGV0IHJhbmdlcztcbiAgICBsZXQgbWluWTtcbiAgICBsZXQgbWF4WTtcbiAgICBsZXQgcG9pbnRXaWR0aCA9IDIwXG4gICAgbGV0IHVuaXRzID0ganNvbj8udW5pdHNcblxuICAgIHRoaXMudW5pdHMgPSBqc29uLnVuaXRzXG5cbiAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRHcm91cGVkRGF0YShqc29uLCBpbnRlcnZhbCk7XG4gICAgZ3JhcGhEYXRhID0gZGF0YT8uZ3JhcGhEYXRhXG4gICAgdmFsdWVzQSA9IGRhdGE/LnZhbHVlc0FcbiAgICB2YWx1ZXNCID0gZGF0YT8udmFsdWVzQlxuICAgIGRhdGVzQSA9IGRhdGE/LmRhdGVzXG5cbiAgICBtaW5ZID0gdGhpcy5zZXRNaW5ZKCB2YWx1ZXNBLCB2YWx1ZXNCKTtcbiAgICBtYXhZID0gdGhpcy5zZXRNYXhZKCB2YWx1ZXNBLCB2YWx1ZXNCKTtcbiAgICByYW5nZXMgPSB0aGlzLmdldFJhbmdlcyhqc29uLCBtaW5ZLCBtYXhZKVxuICAgIHRoaXMucmFuZ2VzID0gcmFuZ2VzXG4gICAgcG9pbnRXaWR0aCA9IHRoaXMuc2V0UG9pbnRXaWR0aChpbnRlcnZhbClcblxuICAgIC8vY29uc29sZS5sb2coXCIqIHZhbHVlc0E6IFwiLCB2YWx1ZXNBKTtcbiAgICAvL2NvbnNvbGUubG9nKFwiKiB2YWx1ZXNCOiBcIiwgdmFsdWVzQik7XG4gICAgLy9jb25zb2xlLmxvZyhcIiogZGF0ZXM6IFwiLCBkYXRlc0EpO1xuICAgIC8vY29uc29sZS5sb2coXCIqIGdyYXBoaWM6IFwiLCBncmFwaERhdGEpO1xuXG4gICAgc3dpdGNoIChvcHQpIHtcbiAgICAgIGNhc2UgJ3JhbmdlJzpcbiAgICAgICAgdHlwZUNoYXJ0ID0gJ2FyZWFyYW5nZSdcbiAgICAgICAgYnJlYWs7IFxuICAgICAgY2FzZSAnc3VtJzpcbiAgICAgIGNhc2UgJ2F2Zyc6XG4gICAgICBjYXNlICdsYXNWYWx1ZSc6IFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdHlwZUNoYXJ0ID0gJ2NhdGVnb3J5J1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnNldFhBeGlzKHR5cGVDaGFydCwgZGF0ZXNBKVxuICAgIHRoaXMuc2V0WUF4aXMobWluWSxtYXhZLCByYW5nZXMsIHVuaXRzKVxuICAgIHRoaXMuc2V0U2VyaWVzKG5hbWUsIGdyYXBoRGF0YSwgcG9pbnRXaWR0aClcbiAgfVxuXG59XG4iXX0=
|