@seniorsistemas/angular-components 17.1.4 → 17.1.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/bundles/seniorsistemas-angular-components.umd.js +168 -130
- package/bundles/seniorsistemas-angular-components.umd.js.map +1 -1
- package/bundles/seniorsistemas-angular-components.umd.min.js +2 -2
- package/bundles/seniorsistemas-angular-components.umd.min.js.map +1 -1
- package/components/dynamic-form/components/lookup/lookup.component.d.ts +46 -14
- package/components/gantt/components/gantt/gantt.d.ts +1 -3
- package/components/gantt/components/side-table/side-table.component.d.ts +4 -1
- package/components/gantt/gantt.component.d.ts +1 -0
- package/components/gantt/models/view-mode.d.ts +1 -0
- package/esm2015/components/dynamic-form/components/lookup/lookup.component.js +43 -52
- package/esm2015/components/dynamic-form/configurations/fields/lookup-field.js +1 -11
- package/esm2015/components/dynamic-form/dynamic-form.module.js +3 -1
- package/esm2015/components/gantt/components/gantt/bar.js +2 -2
- package/esm2015/components/gantt/components/gantt/gantt.js +92 -64
- package/esm2015/components/gantt/components/gantt/utils/date-utils.js +3 -2
- package/esm2015/components/gantt/components/side-table/side-table.component.js +7 -1
- package/esm2015/components/gantt/gantt.component.js +14 -3
- package/esm2015/components/gantt/models/view-mode.js +2 -1
- package/esm2015/locale/fallback.js +11 -1
- package/esm5/components/dynamic-form/components/lookup/lookup.component.js +43 -52
- package/esm5/components/dynamic-form/configurations/fields/lookup-field.js +1 -11
- package/esm5/components/dynamic-form/dynamic-form.module.js +3 -1
- package/esm5/components/gantt/components/gantt/bar.js +2 -2
- package/esm5/components/gantt/components/gantt/gantt.js +95 -67
- package/esm5/components/gantt/components/gantt/utils/date-utils.js +3 -2
- package/esm5/components/gantt/components/side-table/side-table.component.js +7 -1
- package/esm5/components/gantt/gantt.component.js +14 -3
- package/esm5/components/gantt/models/view-mode.js +2 -1
- package/esm5/locale/fallback.js +11 -1
- package/fesm2015/seniorsistemas-angular-components.js +165 -127
- package/fesm2015/seniorsistemas-angular-components.js.map +1 -1
- package/fesm5/seniorsistemas-angular-components.js +168 -130
- package/fesm5/seniorsistemas-angular-components.js.map +1 -1
- package/package.json +1 -1
- package/seniorsistemas-angular-components.metadata.json +1 -1
|
@@ -179,7 +179,11 @@ var Gantt = /** @class */ (function () {
|
|
|
179
179
|
Gantt.prototype.update_view_scale = function (view_mode) {
|
|
180
180
|
this.options.viewMode = view_mode;
|
|
181
181
|
// this.isHourView = false;
|
|
182
|
-
if (view_mode === ViewMode.
|
|
182
|
+
if (view_mode === ViewMode.QuarterHour) {
|
|
183
|
+
this.options.step = 24 / 24 / 4;
|
|
184
|
+
this.options.columnWidth = 50;
|
|
185
|
+
}
|
|
186
|
+
else if (view_mode === ViewMode.Hour) {
|
|
183
187
|
this.options.step = 24 / 24;
|
|
184
188
|
this.options.columnWidth = 50;
|
|
185
189
|
}
|
|
@@ -213,12 +217,12 @@ var Gantt = /** @class */ (function () {
|
|
|
213
217
|
};
|
|
214
218
|
Gantt.prototype.setup_gantt_dates = function () {
|
|
215
219
|
var e_3, _a;
|
|
216
|
-
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
220
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
|
|
217
221
|
this._minDate = null;
|
|
218
222
|
this._maxDate = null;
|
|
219
223
|
try {
|
|
220
|
-
for (var
|
|
221
|
-
var task =
|
|
224
|
+
for (var _t = __values(this.tasks), _u = _t.next(); !_u.done; _u = _t.next()) {
|
|
225
|
+
var task = _u.value;
|
|
222
226
|
// set global start and end date
|
|
223
227
|
if (!this.minDate || task.start < this.minDate) {
|
|
224
228
|
this._minDate = DateUtils.startOf(task.start, 'day');
|
|
@@ -231,40 +235,41 @@ var Gantt = /** @class */ (function () {
|
|
|
231
235
|
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
232
236
|
finally {
|
|
233
237
|
try {
|
|
234
|
-
if (
|
|
238
|
+
if (_u && !_u.done && (_a = _t.return)) _a.call(_t);
|
|
235
239
|
}
|
|
236
240
|
finally { if (e_3) throw e_3.error; }
|
|
237
241
|
}
|
|
238
|
-
this._realMinDate = this.minDate;
|
|
239
|
-
this._realMaxDate = this.maxDate;
|
|
240
242
|
switch (this.options.viewMode) {
|
|
243
|
+
case ViewMode.QuarterHour:
|
|
244
|
+
this._minDate = DateUtils.add(this.minDate, -((_b = this.options.marginBeforeStart) !== null && _b !== void 0 ? _b : 15), "minutes");
|
|
245
|
+
this._maxDate = DateUtils.add(this.maxDate, (_c = this.options.marginAfterEnd) !== null && _c !== void 0 ? _c : 15, "minutes");
|
|
241
246
|
case ViewMode.Hour:
|
|
242
|
-
this._minDate = DateUtils.add(this.minDate, -((
|
|
243
|
-
this._maxDate = DateUtils.add(this.maxDate, (
|
|
247
|
+
this._minDate = DateUtils.add(this.minDate, -((_d = this.options.marginBeforeStart) !== null && _d !== void 0 ? _d : 1), "hour");
|
|
248
|
+
this._maxDate = DateUtils.add(this.maxDate, (_e = this.options.marginAfterEnd) !== null && _e !== void 0 ? _e : 1, "hour");
|
|
244
249
|
break;
|
|
245
250
|
case ViewMode.QuarterDay:
|
|
246
|
-
this._minDate = DateUtils.add(this.minDate, -((
|
|
247
|
-
this._maxDate = DateUtils.add(this.maxDate, (
|
|
251
|
+
this._minDate = DateUtils.add(this.minDate, -((_f = this.options.marginBeforeStart) !== null && _f !== void 0 ? _f : 6), "hour");
|
|
252
|
+
this._maxDate = DateUtils.add(this.maxDate, (_g = this.options.marginAfterEnd) !== null && _g !== void 0 ? _g : 6, "hour");
|
|
248
253
|
break;
|
|
249
254
|
case ViewMode.HalfDay:
|
|
250
|
-
this._minDate = DateUtils.add(this.minDate, -((
|
|
251
|
-
this._maxDate = DateUtils.add(this.maxDate, (
|
|
255
|
+
this._minDate = DateUtils.add(this.minDate, -((_h = this.options.marginBeforeStart) !== null && _h !== void 0 ? _h : 12), "hour");
|
|
256
|
+
this._maxDate = DateUtils.add(this.maxDate, (_j = this.options.marginAfterEnd) !== null && _j !== void 0 ? _j : 12, "hour");
|
|
252
257
|
break;
|
|
253
258
|
case ViewMode.Day:
|
|
254
|
-
this._minDate = DateUtils.add(this.minDate, -((
|
|
255
|
-
this._maxDate = DateUtils.add(this.maxDate, (
|
|
259
|
+
this._minDate = DateUtils.add(this.minDate, -((_k = this.options.marginBeforeStart) !== null && _k !== void 0 ? _k : 1), "day");
|
|
260
|
+
this._maxDate = DateUtils.add(this.maxDate, (_l = this.options.marginAfterEnd) !== null && _l !== void 0 ? _l : 1, "day");
|
|
256
261
|
break;
|
|
257
262
|
case ViewMode.Week:
|
|
258
|
-
this._minDate = DateUtils.add(this.minDate, -((
|
|
259
|
-
this._maxDate = DateUtils.add(this.maxDate, (
|
|
263
|
+
this._minDate = DateUtils.add(this.minDate, -((_m = this.options.marginBeforeStart) !== null && _m !== void 0 ? _m : 1), "week");
|
|
264
|
+
this._maxDate = DateUtils.add(this.maxDate, (_o = this.options.marginAfterEnd) !== null && _o !== void 0 ? _o : 1, "week");
|
|
260
265
|
break;
|
|
261
266
|
case ViewMode.Month:
|
|
262
|
-
this._minDate = DateUtils.add(this.minDate, -((
|
|
263
|
-
this._maxDate = DateUtils.add(this.maxDate, (
|
|
267
|
+
this._minDate = DateUtils.add(this.minDate, -((_p = this.options.marginBeforeStart) !== null && _p !== void 0 ? _p : 1), "month");
|
|
268
|
+
this._maxDate = DateUtils.add(this.maxDate, (_q = this.options.marginAfterEnd) !== null && _q !== void 0 ? _q : 1, "month");
|
|
264
269
|
break;
|
|
265
270
|
case ViewMode.Year:
|
|
266
|
-
this._minDate = DateUtils.add(this.minDate, -((
|
|
267
|
-
this._maxDate = DateUtils.add(this.maxDate, (
|
|
271
|
+
this._minDate = DateUtils.add(this.minDate, -((_r = this.options.marginBeforeStart) !== null && _r !== void 0 ? _r : 1), "year");
|
|
272
|
+
this._maxDate = DateUtils.add(this.maxDate, (_s = this.options.marginAfterEnd) !== null && _s !== void 0 ? _s : 1, "year");
|
|
268
273
|
break;
|
|
269
274
|
}
|
|
270
275
|
};
|
|
@@ -292,8 +297,6 @@ var Gantt = /** @class */ (function () {
|
|
|
292
297
|
var columnWidth = (this.options.containerWidth - 1) / this.dates.length;
|
|
293
298
|
this.options.columnWidth = columnWidth < 45 ? 45 : columnWidth;
|
|
294
299
|
}
|
|
295
|
-
console.log("cur_date", cur_date);
|
|
296
|
-
console.log("dates", this.dates);
|
|
297
300
|
};
|
|
298
301
|
Gantt.prototype.bind_events = function () {
|
|
299
302
|
this.bind_grid_click();
|
|
@@ -413,23 +416,24 @@ var Gantt = /** @class */ (function () {
|
|
|
413
416
|
for (var _b = __values(this.dates), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
414
417
|
var date = _c.value;
|
|
415
418
|
var tick_class = "tick";
|
|
416
|
-
|
|
417
|
-
|
|
419
|
+
if (this.view_is(ViewMode.QuarterHour) && date.getHours() === 0 && date.getMinutes() === 0) {
|
|
420
|
+
// thick tick for first hour of day.
|
|
421
|
+
tick_class += " thick";
|
|
422
|
+
}
|
|
423
|
+
else if (this.view_is([ViewMode.Hour, ViewMode.QuarterDay, ViewMode.HalfDay]) && date.getHours() === 0) {
|
|
424
|
+
// thick tick for first hour of day.
|
|
418
425
|
tick_class += " thick";
|
|
419
426
|
}
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
date.getDate() >= 1 &&
|
|
423
|
-
date.getDate() < 8) {
|
|
427
|
+
else if (this.view_is(ViewMode.Day) && date.getDate() === 1) {
|
|
428
|
+
// thick tick for monday
|
|
424
429
|
tick_class += " thick";
|
|
425
430
|
}
|
|
426
|
-
|
|
427
|
-
|
|
431
|
+
else if (this.view_is(ViewMode.Week) && date.getDate() >= 1 && date.getDate() < 8) {
|
|
432
|
+
// thick tick for first week
|
|
428
433
|
tick_class += " thick";
|
|
429
434
|
}
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
date.getHours() == 0) {
|
|
435
|
+
else if (this.view_is(ViewMode.Month) && date.getMonth() % 3 === 0) {
|
|
436
|
+
// thick ticks for quarters
|
|
433
437
|
tick_class += " thick";
|
|
434
438
|
}
|
|
435
439
|
createSVG("path", {
|
|
@@ -469,7 +473,7 @@ var Gantt = /** @class */ (function () {
|
|
|
469
473
|
for (var _b = __values(this.dates), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
470
474
|
var date = _c.value;
|
|
471
475
|
var y = (this.options.headerHeight + this.options.padding) / 2;
|
|
472
|
-
var isToday = date
|
|
476
|
+
var isToday = date == DateUtils.today();
|
|
473
477
|
var isWeekend = (date.getDay() == 0 || date.getDay() == 6);
|
|
474
478
|
var className = void 0;
|
|
475
479
|
if (isToday) {
|
|
@@ -507,19 +511,8 @@ var Gantt = /** @class */ (function () {
|
|
|
507
511
|
};
|
|
508
512
|
Gantt.prototype.make_dates = function () {
|
|
509
513
|
var dates = this.get_dates_to_draw();
|
|
510
|
-
var isHourView = this.view_is([ViewMode.Hour, ViewMode.QuarterDay, ViewMode.HalfDay]);
|
|
511
|
-
var counter = 0;
|
|
512
514
|
for (var i = 0; i < dates.length; i++) {
|
|
513
515
|
var date = dates[i];
|
|
514
|
-
if (isHourView && date.date >= this._realMinDate && date.date <= this._realMaxDate) {
|
|
515
|
-
createSVG("text", {
|
|
516
|
-
x: date.lower_x,
|
|
517
|
-
y: date.lower_y,
|
|
518
|
-
innerHTML: "H" + counter++ * this.options.step,
|
|
519
|
-
class: "title-1",
|
|
520
|
-
append_to: this.layers.date,
|
|
521
|
-
});
|
|
522
|
-
}
|
|
523
516
|
createSVG("text", {
|
|
524
517
|
x: date.lower_x,
|
|
525
518
|
y: date.lower_y + 20,
|
|
@@ -527,6 +520,15 @@ var Gantt = /** @class */ (function () {
|
|
|
527
520
|
class: "title-2",
|
|
528
521
|
append_to: this.layers.date,
|
|
529
522
|
});
|
|
523
|
+
if (date.middle_text) {
|
|
524
|
+
createSVG("text", {
|
|
525
|
+
x: date.middle_x,
|
|
526
|
+
y: date.middle_y,
|
|
527
|
+
innerHTML: date.middle_text,
|
|
528
|
+
class: "middle-text",
|
|
529
|
+
append_to: this.layers.date,
|
|
530
|
+
});
|
|
531
|
+
}
|
|
530
532
|
if (date.upper_text) {
|
|
531
533
|
var $upper_text = createSVG("text", {
|
|
532
534
|
x: date.upper_x,
|
|
@@ -557,67 +559,93 @@ var Gantt = /** @class */ (function () {
|
|
|
557
559
|
last_date = DateUtils.add(date, 1, "year");
|
|
558
560
|
}
|
|
559
561
|
var date_text = {
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
halfDayLower: DateUtils.format(date, "HH:mm", this.options.language),
|
|
563
|
-
dayLower: DateUtils.format(date, "D", this.options.language),
|
|
564
|
-
weekLower: date.getMonth() !== last_date.getMonth()
|
|
562
|
+
// quarter hour
|
|
563
|
+
quarterHourUpper: date.getDate() !== last_date.getDate()
|
|
565
564
|
? DateUtils.format(date, "D MMM", this.options.language)
|
|
566
|
-
:
|
|
567
|
-
|
|
568
|
-
|
|
565
|
+
: "",
|
|
566
|
+
quarterHourLower: DateUtils.format(date, "HH:mm", this.options.language),
|
|
567
|
+
// hour
|
|
568
|
+
hourUpper: date.getDate() !== last_date.getDate()
|
|
569
|
+
? DateUtils.format(date, "D MMM", this.options.language)
|
|
570
|
+
: "",
|
|
571
|
+
hourLower: DateUtils.format(date, "HH:mm", this.options.language),
|
|
572
|
+
// quarter day
|
|
569
573
|
quarterDayUpper: date.getDate() !== last_date.getDate()
|
|
570
574
|
? DateUtils.format(date, "D MMM", this.options.language)
|
|
571
575
|
: "",
|
|
576
|
+
quarterDayLower: DateUtils.format(date, "HH:mm", this.options.language),
|
|
577
|
+
// half day
|
|
572
578
|
halfDayUpper: (date.getDate() !== last_date.getDate())
|
|
573
579
|
? (((date.getMonth() !== last_date.getMonth()) || i < 2)
|
|
574
580
|
? DateUtils.format(date, "D MMM", this.options.language)
|
|
575
581
|
: DateUtils.format(date, "D", this.options.language))
|
|
576
582
|
: "",
|
|
583
|
+
halfDayLower: DateUtils.format(date, "HH:mm", this.options.language),
|
|
584
|
+
// day
|
|
577
585
|
dayUpper: ((date.getMonth() !== last_date.getMonth()) || i === 0)
|
|
578
586
|
? DateUtils.format(date, "MMMM", this.options.language)
|
|
579
587
|
: "",
|
|
588
|
+
dayMiddle: DateUtils.format(date, "ddd", this.options.language),
|
|
589
|
+
dayLower: DateUtils.format(date, "D", this.options.language),
|
|
590
|
+
// week
|
|
580
591
|
weekUpper: date.getMonth() !== last_date.getMonth()
|
|
581
592
|
? DateUtils.format(date, "MMMM", this.options.language)
|
|
582
593
|
: "",
|
|
594
|
+
weekLower: date.getMonth() !== last_date.getMonth()
|
|
595
|
+
? DateUtils.format(date, "D MMM", this.options.language)
|
|
596
|
+
: DateUtils.format(date, "D", this.options.language),
|
|
597
|
+
// month
|
|
583
598
|
monthUpper: date.getFullYear() !== last_date.getFullYear()
|
|
584
599
|
? DateUtils.format(date, "YYYY", this.options.language)
|
|
585
600
|
: "",
|
|
601
|
+
monthLower: DateUtils.format(date, "MMMM", this.options.language),
|
|
602
|
+
// year
|
|
586
603
|
yearUpper: date.getFullYear() !== last_date.getFullYear()
|
|
587
604
|
? DateUtils.format(date, "YYYY", this.options.language)
|
|
588
605
|
: "",
|
|
589
|
-
|
|
590
|
-
? DateUtils.format(date, "D MMM", this.options.language)
|
|
591
|
-
: "",
|
|
606
|
+
yearLower: DateUtils.format(date, "YYYY", this.options.language),
|
|
592
607
|
};
|
|
593
608
|
// Descontando 20 para adcionar uma segunda linha de informação no cabeçalho
|
|
594
609
|
var base_pos = {
|
|
595
610
|
x: i * this.options.columnWidth,
|
|
596
|
-
lower_y: this.options.headerHeight - 20,
|
|
597
611
|
upper_y: this.options.headerHeight - 20 - 25,
|
|
612
|
+
middle_y: this.options.headerHeight - 20,
|
|
613
|
+
lower_y: this.options.headerHeight - 20,
|
|
598
614
|
};
|
|
599
|
-
debugger;
|
|
600
615
|
var x_pos = {
|
|
601
|
-
|
|
616
|
+
quarterHourUpper: (this.dates.length < 14) ? (this.options.columnWidth) : (this.options.columnWidth * 24 / 2),
|
|
617
|
+
quarterHourMiddle: this.options.columnWidth / 2,
|
|
618
|
+
quarterHourLower: this.options.columnWidth / 2,
|
|
602
619
|
hourUpper: (this.dates.length < 14) ? (this.options.columnWidth) : (this.options.columnWidth * 24 / 2),
|
|
603
|
-
|
|
620
|
+
hourMiddle: this.options.columnWidth / 2,
|
|
621
|
+
hourLower: this.options.columnWidth / 2,
|
|
604
622
|
quarterDayUpper: this.options.columnWidth * 4 / 2,
|
|
605
|
-
|
|
623
|
+
quarterDayMiddle: this.options.columnWidth / 2,
|
|
624
|
+
quarterDayLower: this.options.columnWidth / 2,
|
|
606
625
|
halfDayUpper: this.options.columnWidth * 2 / 2,
|
|
607
|
-
|
|
626
|
+
halfDayMiddle: this.options.columnWidth / 2,
|
|
627
|
+
halfDayLower: this.options.columnWidth / 2,
|
|
608
628
|
dayUpper: (this.dates.length < 15) ? (this.options.columnWidth) : ((this.options.columnWidth * 30) / 2),
|
|
609
|
-
|
|
629
|
+
dayMiddle: this.options.columnWidth / 2 - 12,
|
|
630
|
+
dayLower: this.options.columnWidth / 2,
|
|
610
631
|
weekUpper: (this.options.columnWidth * 4) / 2,
|
|
632
|
+
weekMiddle: 0,
|
|
633
|
+
weekLower: 0,
|
|
634
|
+
monthUpper: (this.dates.length < 15) ? (this.options.columnWidth) : ((this.options.columnWidth * 12) / 2),
|
|
635
|
+
monthMiddle: 0,
|
|
611
636
|
monthLower: this.options.columnWidth / 2,
|
|
612
|
-
monthUpper: (this.options.columnWidth * 12) / 2,
|
|
613
|
-
yearLower: this.options.columnWidth / 2,
|
|
614
637
|
yearUpper: (this.options.columnWidth * 30) / 2,
|
|
638
|
+
yearMiddle: this.options.columnWidth / 2,
|
|
639
|
+
yearLower: this.options.columnWidth / 2,
|
|
615
640
|
};
|
|
616
641
|
return {
|
|
617
642
|
upper_text: date_text[this.options.viewMode + "Upper"],
|
|
643
|
+
middle_text: date_text[this.options.viewMode + "Middle"],
|
|
618
644
|
lower_text: date_text[this.options.viewMode + "Lower"],
|
|
619
645
|
upper_x: base_pos.x + x_pos[this.options.viewMode + "Upper"],
|
|
620
646
|
upper_y: base_pos.upper_y,
|
|
647
|
+
middle_x: base_pos.x + x_pos[this.options.viewMode + "Middle"],
|
|
648
|
+
middle_y: base_pos.middle_y,
|
|
621
649
|
lower_x: base_pos.x + x_pos[this.options.viewMode + "Lower"],
|
|
622
650
|
lower_y: base_pos.lower_y,
|
|
623
651
|
date: date,
|
|
@@ -893,4 +921,4 @@ export { Gantt };
|
|
|
893
921
|
function generate_id(task) {
|
|
894
922
|
return task.name + "_" + Math.random().toString(36).slice(2, 12);
|
|
895
923
|
}
|
|
896
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9nYW50dC9jb21wb25lbnRzL2dhbnR0L2dhbnR0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR2xEO0lBNEJJLGVBQVksT0FBWSxFQUFFLEtBQWEsRUFBRSxPQUFpQjtRQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFmRCxzQkFBVywwQkFBTzthQUFsQjtZQUNJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUVELHNCQUFXLDBCQUFPO2FBQWxCO1lBQ0ksT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3pCLENBQUM7OztPQUFBO0lBV08sNkJBQWEsR0FBckIsVUFBc0IsT0FBWTtRQUM5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RWIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM3QixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ25HO2FBQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwQyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ25HO2FBQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDM0MsUUFBUSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxDQUFD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O0lBQzdCLENBQUM7SUFDTCxZQUFDO0FBQUQsQ0FBQyxBQTU1QkQsSUE0NUJDOztBQUVELFNBQVMsV0FBVyxDQUFDLElBQVM7SUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVVdGlscyB9IGZyb20gXCIuL3V0aWxzL2RhdGUtdXRpbHNcIjtcbmltcG9ydCB7ICQsIGNyZWF0ZVNWRyB9IGZyb20gXCIuL3V0aWxzL3N2Zy11dGlsc1wiO1xuaW1wb3J0IHsgQmFyIH0gZnJvbSBcIi4vYmFyXCI7XG5pbXBvcnQgeyBQb3B1cCB9IGZyb20gXCIuL3BvcHVwXCI7XG5pbXBvcnQgeyBBcnJvdyB9IGZyb20gXCIuL2Fycm93XCI7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSBcIi4uLy4uL21vZGVscy9vcHRpb25zXCI7XG5pbXBvcnQgeyBkZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuL2dhbnR0LW9wdGlvbnNcIjtcbmltcG9ydCB7IFZpZXdNb2RlIH0gZnJvbSBcIi4uLy4uL21vZGVscy92aWV3LW1vZGVcIjtcbmltcG9ydCB7IFRhc2ssIEVucmljaGVkVGFzayB9IGZyb20gXCIuLi8uLi9tb2RlbHNcIjtcblxuZXhwb3J0IGNsYXNzIEdhbnR0IHtcbiAgICBwdWJsaWMgb3B0aW9uczogT3B0aW9ucztcbiAgICBwdWJsaWMgdGFza3M6IEVucmljaGVkVGFza1tdO1xuICAgIHB1YmxpYyBkZXBlbmRlbmN5X21hcDogYW55O1xuXG4gICAgcHJpdmF0ZSBfbWluRGF0ZTogRGF0ZTtcbiAgICBwcml2YXRlIF9tYXhEYXRlOiBEYXRlO1xuICAgIHByaXZhdGUgX3JlYWxNaW5EYXRlOiBEYXRlO1xuICAgIHByaXZhdGUgX3JlYWxNYXhEYXRlOiBEYXRlO1xuXG4gICAgcHVibGljIGRhdGVzOiBhbnk7XG4gICAgcHVibGljIGxheWVyczogYW55O1xuICAgIHB1YmxpYyBiYXJzOiBCYXJbXTtcbiAgICBwdWJsaWMgYXJyb3dzOiBBcnJvd1tdO1xuICAgIHB1YmxpYyBiYXJfYmVpbmdfZHJhZ2dlZDogYW55O1xuICAgIHB1YmxpYyAkc3ZnOiBhbnk7XG4gICAgcHVibGljICRjb250YWluZXI6IEhUTUxEaXZFbGVtZW50O1xuICAgIHB1YmxpYyBwb3B1cF93cmFwcGVyOiBIVE1MRGl2RWxlbWVudDtcbiAgICBwdWJsaWMgcG9wdXA6IGFueTtcblxuICAgIHB1YmxpYyBnZXQgbWluRGF0ZSgpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbkRhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtYXhEYXRlKCk6IERhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4RGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcih3cmFwcGVyOiBhbnksIHRhc2tzOiBUYXNrW10sIG9wdGlvbnM/OiBPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuc2V0dXBfb3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgdGhpcy5zZXR1cF93cmFwcGVyKHdyYXBwZXIpO1xuICAgICAgICB0aGlzLnNldHVwX3Rhc2tzKHRhc2tzKTtcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSB3aXRoIGRlZmF1bHQgdmlldyBtb2RlXG4gICAgICAgIHRoaXMuY2hhbmdlX3ZpZXdfbW9kZSgpO1xuICAgICAgICB0aGlzLmJpbmRfZXZlbnRzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cF93cmFwcGVyKGVsZW1lbnQ6IGFueSkge1xuICAgICAgICBsZXQgc3ZnX2VsZW1lbnQsIHdyYXBwZXJfZWxlbWVudDtcblxuICAgICAgICAvLyBDU1MgU2VsZWN0b3IgaXMgcGFzc2VkXG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnZXQgdGhlIFNWR0VsZW1lbnRcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgd3JhcHBlcl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgICAgIHN2Z19lbGVtZW50ID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwic3ZnXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTVkdFbGVtZW50KSB7XG4gICAgICAgICAgICBzdmdfZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIFwiRnJhcHDDqSBHYW50dCBvbmx5IHN1cHBvcnRzIHVzYWdlIG9mIGEgc3RyaW5nIENTUyBzZWxlY3RvciwgSFRNTCBET00gZWxlbWVudCBvciBTVkcgRE9NIGVsZW1lbnQgZm9yIHRoZSBcXCdlbGVtZW50XFwnIHBhcmFtZXRlclwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3ZnIGVsZW1lbnRcbiAgICAgICAgaWYgKCFzdmdfZWxlbWVudCkge1xuICAgICAgICAgICAgLy8gY3JlYXRlIGl0XG4gICAgICAgICAgICB0aGlzLiRzdmcgPSBjcmVhdGVTVkcoXCJzdmdcIiwge1xuICAgICAgICAgICAgICAgIGFwcGVuZF90bzogd3JhcHBlcl9lbGVtZW50LFxuICAgICAgICAgICAgICAgIGNsYXNzOiBcImdhbnR0XCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuJHN2ZyA9IHN2Z19lbGVtZW50O1xuICAgICAgICAgICAgdGhpcy4kc3ZnLmNsYXNzTGlzdC5hZGQoXCJnYW50dFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdyYXBwZXIgZWxlbWVudFxuICAgICAgICB0aGlzLiRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB0aGlzLiRjb250YWluZXIuY2xhc3NMaXN0LmFkZChcImdhbnR0LWNvbnRhaW5lclwiKTtcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmNvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLiRjb250YWluZXIuc3R5bGUud2lkdGggPSB0aGlzLm9wdGlvbnMuY29udGFpbmVyV2lkdGggKyAncHgnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50X2VsZW1lbnQgPSB0aGlzLiRzdmcucGFyZW50RWxlbWVudDtcbiAgICAgICAgcGFyZW50X2VsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy4kY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy4kY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuJHN2Zyk7XG5cbiAgICAgICAgLy8gcG9wdXAgd3JhcHBlclxuICAgICAgICB0aGlzLnBvcHVwX3dyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB0aGlzLnBvcHVwX3dyYXBwZXIuY2xhc3NMaXN0LmFkZChcInBvcHVwLXdyYXBwZXJcIik7XG4gICAgICAgIHRoaXMuJGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnBvcHVwX3dyYXBwZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBfb3B0aW9ucyhvcHRpb25zOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXR1cF90YXNrcyh0YXNrczogYW55KSB7XG4gICAgICAgIC8vIHByZXBhcmUgdGFza3NcbiAgICAgICAgdGhpcy50YXNrcyA9IHRhc2tzLm1hcCgodGFzazogYW55LCBpOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vc3RhbmRhcmQgY29sb3JzIGlmIG5lZWRlZFxuICAgICAgICAgICAgdGFzay5jb2xvciA9IHRhc2suY29sb3IgfHwgJyM3ODkyQTEnO1xuXG4gICAgICAgICAgICAvLyBjb252ZXJ0IHRvIERhdGUgb2JqZWN0c1xuICAgICAgICAgICAgdGFzay5fc3RhcnQgPSBEYXRlVXRpbHMucGFyc2UodGFzay5zdGFydCk7XG4gICAgICAgICAgICB0YXNrLl9lbmQgPSBEYXRlVXRpbHMucGFyc2UodGFzay5lbmQpO1xuXG4gICAgICAgICAgICAvLyBtYWtlIHRhc2sgaW52YWxpZCBpZiBkdXJhdGlvbiB0b28gbGFyZ2VcbiAgICAgICAgICAgIGlmIChEYXRlVXRpbHMuZGlmZih0YXNrLl9lbmQsIHRhc2suX3N0YXJ0LCBcInllYXJcIikgPiAxMCkge1xuICAgICAgICAgICAgICAgIHRhc2suZW5kID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2FjaGUgaW5kZXhcbiAgICAgICAgICAgIHRhc2suX2luZGV4ID0gaTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXNrLl9yb3dfaWQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICB0YXNrLl9pbmRleCA9IHRhc2suX3Jvd19pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaW52YWxpZCBkYXRlc1xuICAgICAgICAgICAgaWYgKCF0YXNrLnN0YXJ0ICYmICF0YXNrLmVuZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvZGF5ID0gRGF0ZVV0aWxzLnRvZGF5KCk7XG4gICAgICAgICAgICAgICAgdGFzay5fc3RhcnQgPSB0b2RheTtcbiAgICAgICAgICAgICAgICB0YXNrLl9lbmQgPSBEYXRlVXRpbHMuYWRkKHRvZGF5LCAyLCBcImRheVwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0YXNrLnN0YXJ0ICYmIHRhc2suZW5kKSB7XG4gICAgICAgICAgICAgICAgdGFzay5fc3RhcnQgPSBEYXRlVXRpbHMuYWRkKHRhc2suX2VuZCwgLTIsICdkYXknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRhc2suc3RhcnQgJiYgIXRhc2suZW5kKSB7XG4gICAgICAgICAgICAgICAgdGFzay5fZW5kID0gRGF0ZVV0aWxzLmFkZCh0YXNrLl9zdGFydCwgMiwgXCJkYXlcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIGhvdXJzIGlzIG5vdCBzZXQsIGFzc3VtZSB0aGUgbGFzdCBkYXkgaXMgZnVsbCBkYXlcbiAgICAgICAgICAgIC8vIGUuZzogMjAxOC0wOS0wOSBiZWNvbWVzIDIwMTgtMDktMDkgMjM6NTk6NTlcbiAgICAgICAgICAgIGNvbnN0IHRhc2tfZW5kX3ZhbHVlcyA9IERhdGVVdGlscy5nZXREYXRlVmFsdWVzKHRhc2suX2VuZCk7XG4gICAgICAgICAgICBpZiAodGFza19lbmRfdmFsdWVzLnNsaWNlKDMpLmV2ZXJ5KChkKSA9PiBkID09PSAwKSkge1xuICAgICAgICAgICAgICAgIHRhc2suX2VuZCA9IERhdGVVdGlscy5hZGQodGFzay5fZW5kLCAyNCwgXCJob3VyXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpbnZhbGlkIGZsYWdcbiAgICAgICAgICAgIGlmICghdGFzay5zdGFydCB8fCAhdGFzay5lbmQpIHtcbiAgICAgICAgICAgICAgICB0YXNrLmludmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkZXBlbmRlbmNpZXNcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGFzay5kZXBlbmRlbmNpZXMgPT09IFwic3RyaW5nXCIgfHwgIXRhc2suZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRlcHMgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAodGFzay5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwcyA9IHRhc2suZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoZDogYW55KSA9PiBkLnRyaW0oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGQ6IGFueSkgPT4gZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhc2suZGVwZW5kZW5jaWVzID0gZGVwcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdWlkc1xuICAgICAgICAgICAgaWYgKCF0YXNrLmlkKSB7XG4gICAgICAgICAgICAgICAgdGFzay5pZCA9IGdlbmVyYXRlX2lkKHRhc2spO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGFzaztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zZXR1cF9kZXBlbmRlbmNpZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwX2RlcGVuZGVuY2llcygpIHtcbiAgICAgICAgdGhpcy5kZXBlbmRlbmN5X21hcCA9IHt9O1xuICAgICAgICBmb3IgKGxldCB0IG9mIHRoaXMudGFza3MpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGQgb2YgdC5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlcGVuZGVuY3lfbWFwW2RdID0gdGhpcy5kZXBlbmRlbmN5X21hcFtkXSB8fCBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlcGVuZGVuY3lfbWFwW2RdLnB1c2godC5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVmcmVzaCh0YXNrczogVGFza1tdKSB7XG4gICAgICAgIHRoaXMuc2V0dXBfdGFza3ModGFza3MpO1xuICAgICAgICB0aGlzLmNoYW5nZV92aWV3X21vZGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlX3ZpZXdfbW9kZShtb2RlID0gdGhpcy5vcHRpb25zLnZpZXdNb2RlKSB7XG4gICAgICAgIHRoaXMuc2V0dXBfZ2FudHRfZGF0ZXMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVfdmlld19zY2FsZShtb2RlKTtcbiAgICAgICAgdGhpcy5zZXR1cF9kYXRlcygpO1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICAvLyBmaXJlIHZpZXdtb2RlX2NoYW5nZSBldmVudFxuICAgICAgICB0aGlzLnRyaWdnZXJfZXZlbnQoXCJvblZpZXdDaGFuZ2VcIiwgW21vZGVdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZV92aWV3X3NjYWxlKHZpZXdfbW9kZTogYW55KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy52aWV3TW9kZSA9IHZpZXdfbW9kZTtcbiAgICAgICAgLy8gdGhpcy5pc0hvdXJWaWV3ID0gZmFsc2U7XG4gICAgICAgIGlmICh2aWV3X21vZGUgPT09IFZpZXdNb2RlLkhvdXIpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMjQgLyAyNDtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCA9IDUwO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuRGF5KSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcCA9IDI0O1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gNTA7XG4gICAgICAgIH0gZWxzZSBpZiAodmlld19tb2RlID09PSBWaWV3TW9kZS5IYWxmRGF5KSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcCA9IDI0IC8gMjtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCA9IDUwO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuUXVhcnRlckRheSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAvIDQ7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggPSA1MDtcbiAgICAgICAgfSBlbHNlIGlmICh2aWV3X21vZGUgPT09IFZpZXdNb2RlLldlZWspIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMjQgKiA3O1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gMTQwO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuTW9udGgpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMjQgKiAzMDtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCA9IDEyMDtcbiAgICAgICAgfSBlbHNlIGlmICh2aWV3X21vZGUgPT09IFZpZXdNb2RlLlllYXIpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMjQgKiAzNjU7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggPSAxMjA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwX2RhdGVzKCkge1xuICAgICAgICB0aGlzLnNldHVwX2RhdGVfdmFsdWVzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cF9nYW50dF9kYXRlcygpIHtcbiAgICAgICAgdGhpcy5fbWluRGF0ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX21heERhdGUgPSBudWxsO1xuXG4gICAgICAgIGZvciAobGV0IHRhc2sgb2YgdGhpcy50YXNrcykge1xuICAgICAgICAgICAgLy8gc2V0IGdsb2JhbCBzdGFydCBhbmQgZW5kIGRhdGVcbiAgICAgICAgICAgIGlmICghdGhpcy5taW5EYXRlIHx8IHRhc2suc3RhcnQgPCB0aGlzLm1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gRGF0ZVV0aWxzLnN0YXJ0T2YodGFzay5zdGFydCwgJ2RheScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLm1heERhdGUgfHwgdGFzay5lbmQgPiB0aGlzLm1heERhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gdGFzay5lbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yZWFsTWluRGF0ZSA9IHRoaXMubWluRGF0ZTtcbiAgICAgICAgdGhpcy5fcmVhbE1heERhdGUgPSB0aGlzLm1heERhdGU7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLm9wdGlvbnMudmlld01vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgVmlld01vZGUuSG91cjpcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1pbkRhdGUsIC0odGhpcy5vcHRpb25zLm1hcmdpbkJlZm9yZVN0YXJ0ID8/IDEpLCBcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5tYXhEYXRlLCB0aGlzLm9wdGlvbnMubWFyZ2luQWZ0ZXJFbmQgPz8gMSwgXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5RdWFydGVyRGF5OlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWluRGF0ZSwgLSh0aGlzLm9wdGlvbnMubWFyZ2luQmVmb3JlU3RhcnQgPz8gNiksIFwiaG91clwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1heERhdGUsIHRoaXMub3B0aW9ucy5tYXJnaW5BZnRlckVuZCA/PyA2LCBcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFZpZXdNb2RlLkhhbGZEYXk6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyAxMiksIFwiaG91clwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1heERhdGUsIHRoaXMub3B0aW9ucy5tYXJnaW5BZnRlckVuZCA/PyAxMiwgXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5EYXk6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyAxKSwgXCJkYXlcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5tYXhEYXRlLCB0aGlzLm9wdGlvbnMubWFyZ2luQWZ0ZXJFbmQgPz8gMSwgXCJkYXlcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFZpZXdNb2RlLldlZWs6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyAxKSwgXCJ3ZWVrXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21heERhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWF4RGF0ZSwgdGhpcy5vcHRpb25zLm1hcmdpbkFmdGVyRW5kID8/IDEsIFwid2Vla1wiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVmlld01vZGUuTW9udGg6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyAxKSwgXCJtb250aFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1heERhdGUsIHRoaXMub3B0aW9ucy5tYXJnaW5BZnRlckVuZCA/PyAxLCBcIm1vbnRoXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5ZZWFyOlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWluRGF0ZSwgLSh0aGlzLm9wdGlvbnMubWFyZ2luQmVmb3JlU3RhcnQgPz8gMSksIFwieWVhclwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1heERhdGUsIHRoaXMub3B0aW9ucy5tYXJnaW5BZnRlckVuZCA/PyAxLCBcInllYXJcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwX2RhdGVfdmFsdWVzKCkge1xuICAgICAgICB0aGlzLmRhdGVzID0gW107XG4gICAgICAgIGxldCBjdXJfZGF0ZSA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKGN1cl9kYXRlID09PSBudWxsIHx8IGN1cl9kYXRlIDwgdGhpcy5tYXhEYXRlKSB7XG4gICAgICAgICAgICBpZiAoIWN1cl9kYXRlKSB7XG4gICAgICAgICAgICAgICAgY3VyX2RhdGUgPSBEYXRlVXRpbHMuY2xvbmUodGhpcy5taW5EYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5ZZWFyKSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJfZGF0ZSA9IERhdGVVdGlscy5hZGQoY3VyX2RhdGUsIDEsIFwieWVhclwiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5Nb250aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VyX2RhdGUgPSBEYXRlVXRpbHMuYWRkKGN1cl9kYXRlLCAxLCBcIm1vbnRoXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cl9kYXRlID0gRGF0ZVV0aWxzLmFkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9kYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaG91cidcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRhdGVzLnB1c2goY3VyX2RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb250YWluZXJXaWR0aCkge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uV2lkdGggPSAodGhpcy5vcHRpb25zLmNvbnRhaW5lcldpZHRoIC0gMSkgLyB0aGlzLmRhdGVzLmxlbmd0aFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gY29sdW1uV2lkdGggPCA0NSA/IDQ1IDogY29sdW1uV2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZyhcImN1cl9kYXRlXCIsIGN1cl9kYXRlKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJkYXRlc1wiLCB0aGlzLmRhdGVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRfZXZlbnRzKCkge1xuICAgICAgICB0aGlzLmJpbmRfZ3JpZF9jbGljaygpO1xuICAgICAgICB0aGlzLmJpbmRfYmFyX2V2ZW50cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc2V0dXBfbGF5ZXJzKCk7XG4gICAgICAgIHRoaXMubWFrZV9ncmlkKCk7XG4gICAgICAgIHRoaXMubWFrZV9kYXRlcygpO1xuICAgICAgICB0aGlzLm1ha2VfYmFycygpO1xuICAgICAgICB0aGlzLm1ha2VfYXJyb3dzKCk7XG4gICAgICAgIHRoaXMubWFwX2Fycm93c19vbl9iYXJzKCk7XG4gICAgICAgIHRoaXMuc2V0X3dpZHRoKCk7XG4gICAgICAgIHRoaXMuc2V0X3Njcm9sbF9wb3NpdGlvbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBfbGF5ZXJzKCkge1xuICAgICAgICB0aGlzLmxheWVycyA9IHt9O1xuICAgICAgICBjb25zdCBsYXllcnMgPSBbXCJncmlkXCIsIFwiZGF0ZVwiLCBcImFycm93XCIsIFwicHJvZ3Jlc3NcIiwgXCJiYXJcIiwgXCJkZXRhaWxzXCJdO1xuICAgICAgICAvLyBtYWtlIGdyb3VwIGxheWVyc1xuICAgICAgICBmb3IgKGxldCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgICAgIHRoaXMubGF5ZXJzW2xheWVyXSA9IGNyZWF0ZVNWRygnZycsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogbGF5ZXIsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLiRzdmcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZV9ncmlkKCkge1xuICAgICAgICB0aGlzLm1ha2VfZ3JpZF9iYWNrZ3JvdW5kKCk7XG4gICAgICAgIHRoaXMubWFrZV9ncmlkX3Jvd3MoKTtcbiAgICAgICAgdGhpcy5tYWtlX2dyaWRfaGVhZGVyKCk7XG4gICAgICAgIHRoaXMubWFrZV9ncmlkX2hpZ2hsaWdodHMoKTtcbiAgICAgICAgdGhpcy5tYWtlX2dyaWRfdGlja3MoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1ha2VfZ3JpZF9iYWNrZ3JvdW5kKCkge1xuICAgICAgICBsZXQgZ3JpZF93aWR0aCA9IHRoaXMuZGF0ZXMubGVuZ3RoICogdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgICAgIGdyaWRfd2lkdGggPSB0aGlzLm9wdGlvbnMuY29udGFpbmVyV2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaXN0aW5jdF9yb3dzID0gWy4uLm5ldyBTZXQodGhpcy50YXNrcy5tYXAoKHg6IGFueSkgPT4geC5fcm93X2lkKSldO1xuICAgICAgICBjb25zdCBncmlkX2hlaWdodCA9IHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQgK1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBhZGRpbmcgLyAyICtcbiAgICAgICAgICAgICh0aGlzLm9wdGlvbnMuYmFySGVpZ2h0ICsgdGhpcy5vcHRpb25zLnBhZGRpbmcpICpcbiAgICAgICAgICAgIGRpc3RpbmN0X3Jvd3MubGVuZ3RoO1xuXG4gICAgICAgIGNyZWF0ZVNWRyhcInJlY3RcIiwge1xuICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICB3aWR0aDogZ3JpZF93aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogZ3JpZF9oZWlnaHQsXG4gICAgICAgICAgICBjbGFzczogXCJncmlkLWJhY2tncm91bmRcIixcbiAgICAgICAgICAgIGFwcGVuZF90bzogdGhpcy5sYXllcnMuZ3JpZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJC5hdHRyKHRoaXMuJHN2Zywge1xuICAgICAgICAgICAgaGVpZ2h0OiBncmlkX2hlaWdodCxcbiAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgfSwgbnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYWtlX2dyaWRfcm93cygpIHtcbiAgICAgICAgY29uc3Qgcm93c19sYXllciA9IGNyZWF0ZVNWRyhcImdcIiwgeyBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmdyaWQgfSk7XG4gICAgICAgIGNvbnN0IGxpbmVzX2xheWVyID0gY3JlYXRlU1ZHKFwiZ1wiLCB7IGFwcGVuZF90bzogdGhpcy5sYXllcnMuZ3JpZCB9KTtcblxuICAgICAgICBjb25zdCByb3dfd2lkdGggPSB0aGlzLmRhdGVzLmxlbmd0aCAqIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aDtcbiAgICAgICAgY29uc3Qgcm93X2hlaWdodCA9IHRoaXMub3B0aW9ucy5iYXJIZWlnaHQgKyB0aGlzLm9wdGlvbnMucGFkZGluZztcbiAgICAgICAgLy9UT0RPOiAgYWp1c3RhciBvIHBvc2ljaW9uYW1lbnRvIGRhcyBsaW5oYXNcbiAgICAgICAgbGV0IHJvd195ID0gdGhpcy5vcHRpb25zLmhlYWRlckhlaWdodCArIHRoaXMub3B0aW9ucy5wYWRkaW5nIC8gMjtcblxuICAgICAgICB0aGlzLnRhc2tzLmZvckVhY2goXyA9PiB7XG4gICAgICAgICAgICBjcmVhdGVTVkcoXCJyZWN0XCIsIHtcbiAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgIHk6IHJvd195LFxuICAgICAgICAgICAgICAgIHdpZHRoOiByb3dfd2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiByb3dfaGVpZ2h0LFxuICAgICAgICAgICAgICAgIGNsYXNzOiBcImdyaWQtcm93XCIsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiByb3dzX2xheWVyLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNyZWF0ZVNWRyhcImxpbmVcIiwge1xuICAgICAgICAgICAgICAgIHgxOiAwLFxuICAgICAgICAgICAgICAgIHkxOiByb3dfeSArIHJvd19oZWlnaHQsXG4gICAgICAgICAgICAgICAgeDI6IHJvd193aWR0aCxcbiAgICAgICAgICAgICAgICB5Mjogcm93X3kgKyByb3dfaGVpZ2h0LFxuICAgICAgICAgICAgICAgIGNsYXNzOiBcInJvdy1saW5lXCIsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiBsaW5lc19sYXllcixcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByb3dfeSArPSB0aGlzLm9wdGlvbnMuYmFySGVpZ2h0ICsgdGhpcy5vcHRpb25zLnBhZGRpbmc7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZV9ncmlkX2hlYWRlcigpIHtcbiAgICAgICAgLy8gY29uc3QgYWRkSXNIb3VyVmlldyA9IHRoaXMuaXNIb3VyVmlldyA/IDI1IDogMTBcbiAgICAgICAgY29uc3QgaGVhZGVyX3dpZHRoID0gdGhpcy5kYXRlcy5sZW5ndGggKiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGg7XG4gICAgICAgIGNvbnN0IGhlYWRlcl9oZWlnaHQgPSB0aGlzLm9wdGlvbnMuaGVhZGVySGVpZ2h0ICsgMTA7XG4gICAgICAgIGNyZWF0ZVNWRyhcInJlY3RcIiwge1xuICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICB3aWR0aDogaGVhZGVyX3dpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBoZWFkZXJfaGVpZ2h0LFxuICAgICAgICAgICAgY2xhc3M6IFwiZ3JpZC1oZWFkZXJcIixcbiAgICAgICAgICAgIGFwcGVuZF90bzogdGhpcy5sYXllcnMuZ3JpZCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYWtlX2dyaWRfdGlja3MoKSB7XG4gICAgICAgIGxldCB0aWNrX3ggPSAwO1xuICAgICAgICBsZXQgdGlja195ID0gdGhpcy5vcHRpb25zLmhlYWRlckhlaWdodCArIHRoaXMub3B0aW9ucy5wYWRkaW5nIC8gMjtcbiAgICAgICAgbGV0IHRpY2tfaGVpZ2h0ID1cbiAgICAgICAgICAgICh0aGlzLm9wdGlvbnMuYmFySGVpZ2h0ICsgdGhpcy5vcHRpb25zLnBhZGRpbmcpICpcbiAgICAgICAgICAgIHRoaXMudGFza3MubGVuZ3RoO1xuXG4gICAgICAgIGZvciAobGV0IGRhdGUgb2YgdGhpcy5kYXRlcykge1xuICAgICAgICAgICAgbGV0IHRpY2tfY2xhc3MgPSBcInRpY2tcIjtcbiAgICAgICAgICAgIC8vIHRoaWNrIHRpY2sgZm9yIG1vbmRheVxuICAgICAgICAgICAgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5EYXkpICYmIGRhdGUuZ2V0RGF0ZSgpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGlja19jbGFzcyArPSBcIiB0aGlja1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGhpY2sgdGljayBmb3IgZmlyc3Qgd2Vla1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMudmlld19pcyhWaWV3TW9kZS5XZWVrKSAmJlxuICAgICAgICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpID49IDEgJiZcbiAgICAgICAgICAgICAgICBkYXRlLmdldERhdGUoKSA8IDhcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRpY2tfY2xhc3MgKz0gXCIgdGhpY2tcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRoaWNrIHRpY2tzIGZvciBxdWFydGVyc1xuICAgICAgICAgICAgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5Nb250aCkgJiYgZGF0ZS5nZXRNb250aCgpICUgMyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRpY2tfY2xhc3MgKz0gXCIgdGhpY2tcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoaWNrIHRpY2tzIGZvciBob3Vyc1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMudmlld19pcyhWaWV3TW9kZS5Ib3VyKSAmJlxuICAgICAgICAgICAgICAgIGRhdGUuZ2V0SG91cnMoKSA9PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aWNrX2NsYXNzICs9IFwiIHRoaWNrXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNyZWF0ZVNWRyhcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgIGQ6IGBNICR7dGlja194fSAke3RpY2tfeX0gdiAke3RpY2tfaGVpZ2h0fWAsXG4gICAgICAgICAgICAgICAgY2xhc3M6IHRpY2tfY2xhc3MsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5ncmlkLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuTW9udGgpKSB7XG4gICAgICAgICAgICAgICAgdGlja194ICs9XG4gICAgICAgICAgICAgICAgICAgIChEYXRlVXRpbHMuZ2V0RGF5c0luTW9udGgoZGF0ZSkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoKSAvXG4gICAgICAgICAgICAgICAgICAgIDMwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aWNrX3ggKz0gdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWFrZV9ncmlkX2hpZ2hsaWdodHMoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuRGF5KSkge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGg7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSAodGhpcy5vcHRpb25zLmJhckhlaWdodCArIHRoaXMub3B0aW9ucy5wYWRkaW5nKSAqXG4gICAgICAgICAgICAgICAgdGhpcy50YXNrcy5sZW5ndGggK1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQgK1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYWRkaW5nIC8gMjtcblxuICAgICAgICAgICAgbGV0IHggPSAwO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBkYXRlIG9mIHRoaXMuZGF0ZXMpIHtcblxuICAgICAgICAgICAgICAgIGxldCB5ID0gKHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQgKyB0aGlzLm9wdGlvbnMucGFkZGluZykgLyAyO1xuXG4gICAgICAgICAgICAgICAgbGV0IGlzVG9kYXkgPSBkYXRlLnRvU3RyaW5nKCkgPT0gRGF0ZVV0aWxzLnRvZGF5KCk7XG4gICAgICAgICAgICAgICAgbGV0IGlzV2Vla2VuZCA9IChkYXRlLmdldERheSgpID09IDAgfHwgZGF0ZS5nZXREYXkoKSA9PSA2KTtcbiAgICAgICAgICAgICAgICBsZXQgY2xhc3NOYW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzVG9kYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gXCJ0b2RheS1oaWdobGlnaHRcIjtcbiAgICAgICAgICAgICAgICAgICAgeSA9ICh0aGlzLm9wdGlvbnMuaGVhZGVySGVpZ2h0ICsgdGhpcy5vcHRpb25zLnBhZGRpbmcpIC8gMjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzV2Vla2VuZCkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSBcIndlZWtlbmQtaGlnaGxpZ2h0XCI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcnggPSAzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ5ID0gMztcblxuICAgICAgICAgICAgICAgIGlmIChpc1RvZGF5IHx8IGlzV2Vla2VuZCkge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVTVkcoXCJyZWN0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcngsXG4gICAgICAgICAgICAgICAgICAgICAgICByeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IGNsYXNzTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZF90bzogdGhpcy5sYXllcnMuZ3JpZFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB4ICs9IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZV9kYXRlcygpIHtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLmdldF9kYXRlc190b19kcmF3KCk7XG4gICAgICAgIGNvbnN0IGlzSG91clZpZXcgPSB0aGlzLnZpZXdfaXMoW1ZpZXdNb2RlLkhvdXIsIFZpZXdNb2RlLlF1YXJ0ZXJEYXksIFZpZXdNb2RlLkhhbGZEYXldKTtcbiAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBkYXRlc1tpXTtcblxuICAgICAgICAgICAgaWYgKGlzSG91clZpZXcgJiYgZGF0ZS5kYXRlID49IHRoaXMuX3JlYWxNaW5EYXRlICYmIGRhdGUuZGF0ZSA8PSB0aGlzLl9yZWFsTWF4RGF0ZSkge1xuICAgICAgICAgICAgICAgIGNyZWF0ZVNWRyhcInRleHRcIiwge1xuICAgICAgICAgICAgICAgICAgICB4OiBkYXRlLmxvd2VyX3gsXG4gICAgICAgICAgICAgICAgICAgIHk6IGRhdGUubG93ZXJfeSxcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBgSCR7Y291bnRlcisrICogdGhpcy5vcHRpb25zLnN0ZXB9YCxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFwidGl0bGUtMVwiLFxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmRhdGUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNyZWF0ZVNWRyhcInRleHRcIiwge1xuICAgICAgICAgICAgICAgIHg6IGRhdGUubG93ZXJfeCxcbiAgICAgICAgICAgICAgICB5OiBkYXRlLmxvd2VyX3kgKyAyMCxcbiAgICAgICAgICAgICAgICBpbm5lckhUTUw6IGRhdGUubG93ZXJfdGV4dCxcbiAgICAgICAgICAgICAgICBjbGFzczogXCJ0aXRsZS0yXCIsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5kYXRlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChkYXRlLnVwcGVyX3RleHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCAkdXBwZXJfdGV4dCA9IGNyZWF0ZVNWRyhcInRleHRcIiwge1xuICAgICAgICAgICAgICAgICAgICB4OiBkYXRlLnVwcGVyX3gsXG4gICAgICAgICAgICAgICAgICAgIHk6IGRhdGUudXBwZXJfeSxcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBkYXRlLnVwcGVyX3RleHQsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcInVwcGVyLXRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5kYXRlLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG91dC1vZi1ib3VuZCBkYXRlc1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgJHVwcGVyX3RleHQuZ2V0QkJveCgpLngyID4gdGhpcy5sYXllcnMuZ3JpZC5nZXRCQm94KCkud2lkdGhcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgJHVwcGVyX3RleHQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRfZGF0ZXNfdG9fZHJhdygpIHtcbiAgICAgICAgbGV0IGxhc3RfZGF0ZTogYW55ID0gbnVsbDtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLmRhdGVzLm1hcCgoZGF0ZTogYW55LCBpOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSB0aGlzLmdldF9kYXRlX2luZm8oZGF0ZSwgbGFzdF9kYXRlLCBpKTtcbiAgICAgICAgICAgIGxhc3RfZGF0ZSA9IGRhdGU7XG4gICAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkYXRlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldF9kYXRlX2luZm8oZGF0ZTogRGF0ZSwgbGFzdF9kYXRlOiBEYXRlLCBpOiBhbnkpIHtcbiAgICAgICAgaWYgKCFsYXN0X2RhdGUpIHtcbiAgICAgICAgICAgIGxhc3RfZGF0ZSA9IERhdGVVdGlscy5hZGQoZGF0ZSwgMSwgXCJ5ZWFyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGVfdGV4dCA9IHtcbiAgICAgICAgICAgIGhvdXJMb3dlcjogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIkhIOm1tXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIHF1YXJ0ZXJEYXlMb3dlcjogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIkhIOm1tXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIGhhbGZEYXlMb3dlcjogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIkhIOm1tXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIGRheUxvd2VyOiBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsIFwiRFwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICB3ZWVrTG93ZXI6IGRhdGUuZ2V0TW9udGgoKSAhPT0gbGFzdF9kYXRlLmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJEIE1NTVwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgOiBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsIFwiRFwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICBtb250aExvd2VyOiBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsIFwiTU1NTVwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICB5ZWFyTG93ZXI6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJZWVlZXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIHF1YXJ0ZXJEYXlVcHBlcjogZGF0ZS5nZXREYXRlKCkgIT09IGxhc3RfZGF0ZS5nZXREYXRlKClcbiAgICAgICAgICAgICAgICA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJEIE1NTVwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgOiBcIlwiLFxuXG4gICAgICAgICAgICBoYWxmRGF5VXBwZXI6IChkYXRlLmdldERhdGUoKSAhPT0gbGFzdF9kYXRlLmdldERhdGUoKSlcbiAgICAgICAgICAgICAgICA/ICgoKGRhdGUuZ2V0TW9udGgoKSAhPT0gbGFzdF9kYXRlLmdldE1vbnRoKCkpIHx8IGkgPCAyKVxuICAgICAgICAgICAgICAgICAgICA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJEIE1NTVwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgICAgIDogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIkRcIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKSlcbiAgICAgICAgICAgICAgICA6IFwiXCIsXG5cbiAgICAgICAgICAgIGRheVVwcGVyOiAoKGRhdGUuZ2V0TW9udGgoKSAhPT0gbGFzdF9kYXRlLmdldE1vbnRoKCkpIHx8IGkgPT09IDApXG4gICAgICAgICAgICAgICAgPyBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsIFwiTU1NTVwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgOiBcIlwiLFxuXG4gICAgICAgICAgICB3ZWVrVXBwZXI6IGRhdGUuZ2V0TW9udGgoKSAhPT0gbGFzdF9kYXRlLmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJNTU1NXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSlcbiAgICAgICAgICAgICAgICA6IFwiXCIsXG5cbiAgICAgICAgICAgIG1vbnRoVXBwZXI6IGRhdGUuZ2V0RnVsbFllYXIoKSAhPT0gbGFzdF9kYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgICAgICA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJZWVlZXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSlcbiAgICAgICAgICAgICAgICA6IFwiXCIsXG5cbiAgICAgICAgICAgIHllYXJVcHBlcjogZGF0ZS5nZXRGdWxsWWVhcigpICE9PSBsYXN0X2RhdGUuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgICAgID8gRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIllZWVlcIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKVxuICAgICAgICAgICAgICAgIDogXCJcIixcblxuICAgICAgICAgICAgaG91clVwcGVyOiBkYXRlLmdldERhdGUoKSAhPT0gbGFzdF9kYXRlLmdldERhdGUoKVxuICAgICAgICAgICAgICAgID8gRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIkQgTU1NXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSlcbiAgICAgICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gRGVzY29udGFuZG8gMjAgcGFyYSBhZGNpb25hciB1bWEgc2VndW5kYSBsaW5oYSBkZSBpbmZvcm1hw6fDo28gbm8gY2FiZcOnYWxob1xuICAgICAgICBjb25zdCBiYXNlX3BvcyA9IHtcbiAgICAgICAgICAgIHg6IGkgKiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGgsXG4gICAgICAgICAgICBsb3dlcl95OiB0aGlzLm9wdGlvbnMuaGVhZGVySGVpZ2h0IC0gMjAsXG4gICAgICAgICAgICB1cHBlcl95OiB0aGlzLm9wdGlvbnMuaGVhZGVySGVpZ2h0IC0gMjAgLSAyNSxcbiAgICAgICAgfTtcbmRlYnVnZ2VyO1xuICAgICAgICBjb25zdCB4X3BvcyA9IHtcbiAgICAgICAgICAgIGhvdXJMb3dlcjogdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoIC8gMixcbiAgICAgICAgICAgIGhvdXJVcHBlcjogKHRoaXMuZGF0ZXMubGVuZ3RoIDwgMTQpID8gKHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCkgOiAodGhpcy5vcHRpb25zLmNvbHVtbldpZHRoICogMjQgLyAyKSxcbiAgICAgICAgICAgIHF1YXJ0ZXJEYXlMb3dlcjogdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoIC8gMixcbiAgICAgICAgICAgIHF1YXJ0ZXJEYXlVcHBlcjogdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoICogNCAvIDIsXG4gICAgICAgICAgICBoYWxmRGF5TG93ZXI6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDIsXG4gICAgICAgICAgICBoYWxmRGF5VXBwZXI6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAqIDIgLyAyLFxuICAgICAgICAgICAgZGF5TG93ZXI6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDIsXG4gICAgICAgICAgICBkYXlVcHBlcjogKHRoaXMuZGF0ZXMubGVuZ3RoIDwgMTUpID8gKHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCkgOiAoKHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAqIDMwKSAvIDIpLFxuICAgICAgICAgICAgd2Vla0xvd2VyOiAwLFxuICAgICAgICAgICAgd2Vla1VwcGVyOiAodGhpcy5vcHRpb25zLmNvbHVtbldpZHRoICogNCkgLyAyLFxuICAgICAgICAgICAgbW9udGhMb3dlcjogdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoIC8gMixcbiAgICAgICAgICAgIG1vbnRoVXBwZXI6ICh0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggKiAxMikgLyAyLFxuICAgICAgICAgICAgeWVhckxvd2VyOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyAyLFxuICAgICAgICAgICAgeWVhclVwcGVyOiAodGhpcy5vcHRpb25zLmNvbHVtbldpZHRoICogMzApIC8gMixcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdXBwZXJfdGV4dDogZGF0ZV90ZXh0W2Ake3RoaXMub3B0aW9ucy52aWV3TW9kZX1VcHBlcmBdLFxuICAgICAgICAgICAgbG93ZXJfdGV4dDogZGF0ZV90ZXh0W2Ake3RoaXMub3B0aW9ucy52aWV3TW9kZX1Mb3dlcmBdLFxuICAgICAgICAgICAgdXBwZXJfeDogYmFzZV9wb3MueCArIHhfcG9zW2Ake3RoaXMub3B0aW9ucy52aWV3TW9kZX1VcHBlcmBdLFxuICAgICAgICAgICAgdXBwZXJfeTogYmFzZV9wb3MudXBwZXJfeSxcbiAgICAgICAgICAgIGxvd2VyX3g6IGJhc2VfcG9zLnggKyB4X3Bvc1tgJHt0aGlzLm9wdGlvbnMudmlld01vZGV9TG93ZXJgXSxcbiAgICAgICAgICAgIGxvd2VyX3k6IGJhc2VfcG9zLmxvd2VyX3ksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZV9iYXJzKCkge1xuICAgICAgICB0aGlzLmJhcnMgPSB0aGlzLnRhc2tzLm1hcCgodGFzazogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXIgPSBuZXcgQmFyKHRoaXMsIHRhc2spO1xuICAgICAgICAgICAgdGhpcy5sYXllcnMuYmFyLmFwcGVuZENoaWxkKGJhci5ncm91cCk7XG4gICAgICAgICAgICByZXR1cm4gYmFyO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1ha2VfYXJyb3dzKCkge1xuICAgICAgICB0aGlzLmFycm93cyA9IFtdO1xuICAgICAgICBmb3IgKGxldCB0YXNrIG9mIHRoaXMudGFza3MpIHtcbiAgICAgICAgICAgIGxldCBhcnJvd3MgPSBbXTtcbiAgICAgICAgICAgIGFycm93cyA9IHRhc2suZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICAgICAgLm1hcCgodGFza19pZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcGVuZGVuY3kgPSB0aGlzLmdldF90YXNrKHRhc2tfaWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRlcGVuZGVuY3kpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyb3cgPSBuZXcgQXJyb3coXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXJzW2RlcGVuZGVuY3kuX2luZGV4XSwgLy8gZnJvbV90YXNrXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhcnNbdGFzay5faW5kZXhdIC8vIHRvX3Rhc2tcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllcnMuYXJyb3cuYXBwZW5kQ2hpbGQoYXJyb3cuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJvdztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbik7IC8vIGZpbHRlciBmYWxzeSB2YWx1ZXNcbiAgICAgICAgICAgIHRoaXMuYXJyb3dzID0gdGhpcy5hcnJvd3MuY29uY2F0KGFycm93cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1hcF9hcnJvd3Nfb25fYmFycygpIHtcbiAgICAgICAgZm9yIChsZXQgYmFyIG9mIHRoaXMuYmFycykge1xuICAgICAgICAgICAgYmFyLmFycm93cyA9IHRoaXMuYXJyb3dzLmZpbHRlcigoYXJyb3c6IEFycm93KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgYXJyb3cuZnJvbVRhc2sudGFzay5pZCA9PT0gYmFyLnRhc2suaWQgfHxcbiAgICAgICAgICAgICAgICAgICAgYXJyb3cudG9UYXNrLnRhc2suaWQgPT09IGJhci50YXNrLmlkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRfd2lkdGgoKSB7XG4gICAgICAgIGNvbnN0IGN1cl93aWR0aCA9IHRoaXMuJHN2Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgY29uc3QgYWN0dWFsX3dpZHRoID0gdGhpcy4kc3ZnXG4gICAgICAgICAgICAucXVlcnlTZWxlY3RvcihcIi5ncmlkIC5ncmlkLXJvd1wiKVxuICAgICAgICAgICAgLmdldEF0dHJpYnV0ZShcIndpZHRoXCIpO1xuICAgICAgICBpZiAoY3VyX3dpZHRoIDwgYWN0dWFsX3dpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLiRzdmcuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgYWN0dWFsX3dpZHRoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0X3Njcm9sbF9wb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgcGFyZW50X2VsZW1lbnQgPSB0aGlzLiRzdmcucGFyZW50RWxlbWVudDtcbiAgICAgICAgaWYgKCFwYXJlbnRfZWxlbWVudCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGhvdXJzX2JlZm9yZV9maXJzdF90YXNrID0gRGF0ZVV0aWxzLmRpZmYoXG4gICAgICAgICAgICB0aGlzLmdldF9vbGRlc3Rfc3RhcnRpbmdfZGF0ZSgpLFxuICAgICAgICAgICAgdGhpcy5taW5EYXRlLFxuICAgICAgICAgICAgXCJob3VyXCJcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBzY3JvbGxfcG9zID1cbiAgICAgICAgICAgIChob3Vyc19iZWZvcmVfZmlyc3RfdGFzayAvIHRoaXMub3B0aW9ucy5zdGVwKSAqXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLVxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoO1xuXG4gICAgICAgIHBhcmVudF9lbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxfcG9zO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZF9ncmlkX2NsaWNrKCkge1xuICAgICAgICAkLm9uKFxuICAgICAgICAgICAgdGhpcy4kc3ZnLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvcHVwVHJpZ2dlcixcbiAgICAgICAgICAgIFwiLmdyaWQtcm93LCAuZ3JpZC1oZWFkZXJcIixcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0X2FsbCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZV9wb3B1cCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZF9iYXJfZXZlbnRzKCkge1xuICAgICAgICBsZXQgaXNfZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IHhfb25fc3RhcnQgPSAwO1xuICAgICAgICBsZXQgaXNfcmVzaXppbmdfbGVmdCA9IGZhbHNlO1xuICAgICAgICBsZXQgaXNfcmVzaXppbmdfcmlnaHQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHBhcmVudF9iYXJfaWQ6IGFueSA9IG51bGw7XG4gICAgICAgIGxldCBiYXJzOiBCYXJbXSA9IFtdO1xuICAgICAgICB0aGlzLmJhcl9iZWluZ19kcmFnZ2VkID0gbnVsbDtcblxuICAgICAgICBmdW5jdGlvbiBhY3Rpb25faW5fcHJvZ3Jlc3MoKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNfZHJhZ2dpbmcgfHwgaXNfcmVzaXppbmdfbGVmdCB8fCBpc19yZXNpemluZ19yaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgICQub24odGhpcy4kc3ZnLCBcIm1vdXNlZG93blwiLCBcIi5iYXItd3JhcHBlciwgLmhhbmRsZVwiLCAoZTogYW55LCBlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJhcl93cmFwcGVyID0gJC5jbG9zZXN0KFwiLmJhci13cmFwcGVyXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJsZWZ0XCIpKSB7XG4gICAgICAgICAgICAgICAgaXNfcmVzaXppbmdfbGVmdCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicmlnaHRcIikpIHtcbiAgICAgICAgICAgICAgICBpc19yZXNpemluZ19yaWdodCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYmFyLXdyYXBwZXJcIikgJiYgdGhpcy5vcHRpb25zLmFsbG93TW92ZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpc19kcmFnZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJhcl93cmFwcGVyLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG5cbiAgICAgICAgICAgIHhfb25fc3RhcnQgPSBlLm9mZnNldFg7XG5cbiAgICAgICAgICAgIHBhcmVudF9iYXJfaWQgPSBiYXJfd3JhcHBlci5nZXRBdHRyaWJ1dGUoXCJkYXRhLWlkXCIpO1xuICAgICAgICAgICAgY29uc3QgaWRzID0gW1xuICAgICAgICAgICAgICAgIHBhcmVudF9iYXJfaWQsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nZXRfYWxsX2RlcGVuZGVudF90YXNrcyhwYXJlbnRfYmFyX2lkKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBiYXJzID0gaWRzLm1hcCgoaWQpID0+IHRoaXMuZ2V0X2JhcihpZCkpO1xuXG4gICAgICAgICAgICB0aGlzLmJhcl9iZWluZ19kcmFnZ2VkID0gcGFyZW50X2Jhcl9pZDtcblxuICAgICAgICAgICAgYmFycy5mb3JFYWNoKChiYXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCAkYmFyID0gYmFyLmVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgJGJhci5veCA9ICRiYXIuZ2V0WCgpO1xuICAgICAgICAgICAgICAgICRiYXIub3kgPSAkYmFyLmdldFkoKTtcbiAgICAgICAgICAgICAgICAkYmFyLm93aWR0aCA9ICRiYXIuZ2V0V2lkdGgoKTtcbiAgICAgICAgICAgICAgICAkYmFyLmZpbmFsZHggPSAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgJC5vbih0aGlzLiRzdmcsIFwibW91c2Vtb3ZlXCIsIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICghYWN0aW9uX2luX3Byb2dyZXNzKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGR4ID0gZS5vZmZzZXRYIC0geF9vbl9zdGFydDtcblxuICAgICAgICAgICAgYmFycy5mb3JFYWNoKChiYXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCAkYmFyID0gYmFyLmVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgJGJhci5maW5hbGR4ID0gdGhpcy5nZXRfc25hcF9wb3NpdGlvbihkeCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlX3BvcHVwKCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzX3Jlc2l6aW5nX2xlZnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudF9iYXJfaWQgPT09IGJhci50YXNrLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYXIudXBkYXRlQmFyUG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6ICRiYXIub3ggKyAkYmFyLmZpbmFsZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICRiYXIub3dpZHRoIC0gJGJhci5maW5hbGR4LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYXIudXBkYXRlQmFyUG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6ICRiYXIub3ggKyAkYmFyLmZpbmFsZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNfcmVzaXppbmdfcmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudF9iYXJfaWQgPT09IGJhci50YXNrLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYXIudXBkYXRlQmFyUG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAkYmFyLm93aWR0aCArICRiYXIuZmluYWxkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc19kcmFnZ2luZykge1xuICAgICAgICAgICAgICAgICAgICBiYXIudXBkYXRlQmFyUG9zaXRpb24oeyB4OiAkYmFyLm94ICsgJGJhci5maW5hbGR4IH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBudWxsKTtcblxuXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChpc19kcmFnZ2luZyB8fCBpc19yZXNpemluZ19sZWZ0IHx8IGlzX3Jlc2l6aW5nX3JpZ2h0IHx8ICF0aGlzLm9wdGlvbnMuYWxsb3dNb3ZlbWVudCkge1xuICAgICAgICAgICAgICAgIGJhcnMuZm9yRWFjaCgoYmFyKSA9PiBiYXIuZ3JvdXAuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlzX2RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBpc19yZXNpemluZ19sZWZ0ID0gZmFsc2U7XG4gICAgICAgICAgICBpc19yZXNpemluZ19yaWdodCA9IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICAkLm9uKHRoaXMuJHN2ZywgXCJtb3VzZXVwXCIsIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmFyX2JlaW5nX2RyYWdnZWQgPSBudWxsO1xuICAgICAgICAgICAgYmFycy5mb3JFYWNoKChiYXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCAkYmFyID0gYmFyLmVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKCEkYmFyLmZpbmFsZHgpIHJldHVybjtcbiAgICAgICAgICAgICAgICBiYXIuZGF0ZUNoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICBiYXIuc2V0QWN0aW9uQ29tcGxldGVkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgbnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRfYWxsX2RlcGVuZGVudF90YXNrcyh0YXNrX2lkOiBhbnkpIHtcbiAgICAgICAgbGV0IG91dDogYW55W10gPSBbXTtcbiAgICAgICAgbGV0IHRvX3Byb2Nlc3MgPSBbdGFza19pZF07XG4gICAgICAgIHdoaWxlICh0b19wcm9jZXNzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZGVwcyA9IHRvX3Byb2Nlc3MucmVkdWNlKChhY2MsIGN1cnIpID0+IHtcbiAgICAgICAgICAgICAgICBhY2MgPSBhY2MuY29uY2F0KHRoaXMuZGVwZW5kZW5jeV9tYXBbY3Vycl0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgICAgIG91dCA9IG91dC5jb25jYXQoZGVwcyk7XG4gICAgICAgICAgICB0b19wcm9jZXNzID0gZGVwcy5maWx0ZXIoKGQ6IGFueSkgPT4gIXRvX3Byb2Nlc3MuaW5jbHVkZXMoZCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG91dC5maWx0ZXIoQm9vbGVhbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRfc25hcF9wb3NpdGlvbihkeDogYW55KSB7XG4gICAgICAgIGxldCBvZHggPSBkeCxcbiAgICAgICAgICAgIHJlbSxcbiAgICAgICAgICAgIHBvc2l0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuSG91cikpIHtcbiAgICAgICAgICAgIHJlbSA9IGR4ICUgKHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDYpO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBvZHggLSByZW0gKyAocmVtIDwgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoIC8gMTIgPyAwIDogdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoIC8gNik7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWV3X2lzKFZpZXdNb2RlLldlZWspKSB7XG4gICAgICAgICAgICByZW0gPSBkeCAlICh0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyA3KTtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gb2R4IC0gcmVtICsgKHJlbSA8IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDE0ID8gMCA6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDcpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5Nb250aCkpIHtcbiAgICAgICAgICAgIHJlbSA9IGR4ICUgKHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDMwKTtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gb2R4IC0gcmVtICsgKHJlbSA8IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDYwID8gMCA6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDMwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbSA9IGR4ICUgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBvZHggLSByZW0gKyAocmVtIDwgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoIC8gMiA/IDAgOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3NpdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgdW5zZWxlY3RfYWxsKCkge1xuICAgICAgICBbLi4udGhpcy4kc3ZnLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYmFyLXdyYXBwZXJcIildLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmlld19pcyhtb2RlczogVmlld01vZGUgfCBWaWV3TW9kZVtdKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vZGVzLnNvbWUoKG1vZGUpID0+IHRoaXMub3B0aW9ucy52aWV3TW9kZSA9PT0gbW9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZpZXdNb2RlID09PSBtb2RlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldF90YXNrKGlkOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFza3MuZmluZCgodGFzazogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGFzay5pZCA9PT0gaWQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfYmFyKGlkOiBhbnkpOiBCYXIge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXJzLmZpbmQoKGJhcjogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYmFyLnRhc2suaWQgPT09IGlkO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd19wb3B1cChvcHRpb25zOiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBvcHVwKSB7XG4gICAgICAgICAgICB0aGlzLnBvcHVwID0gbmV3IFBvcHVwKFxuICAgICAgICAgICAgICAgIHRoaXMucG9wdXBfd3JhcHBlcixcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuY3VzdG9tUG9wdXBIdG1sXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9wdXAuc2hvdyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGlkZV9wb3B1cCgpIHtcbiAgICAgICAgdGhpcy5wb3B1cCAmJiB0aGlzLnBvcHVwLmhpZGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJpZ2dlcl9ldmVudChldmVudDogc3RyaW5nLCBhcmdzOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uc1tldmVudF0pIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc1tldmVudF0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldF9vbGRlc3Rfc3RhcnRpbmdfZGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFza3NcbiAgICAgICAgICAgIC5tYXAoKHRhc2s6IGFueSkgPT4gdGFzay5fc3RhcnQpXG4gICAgICAgICAgICAucmVkdWNlKChwcmV2X2RhdGU6IGFueSwgY3VyX2RhdGU6IGFueSkgPT5cbiAgICAgICAgICAgICAgICBjdXJfZGF0ZSA8PSBwcmV2X2RhdGUgPyBjdXJfZGF0ZSA6IHByZXZfZGF0ZVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyKCkge1xuICAgICAgICB0aGlzLiRzdmcuaW5uZXJIVE1MID0gJyc7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZV9pZCh0YXNrOiBhbnkpIHtcbiAgICByZXR1cm4gdGFzay5uYW1lICsgXCJfXCIgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCAxMik7XG59XG4iXX0=
|
|
924
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FudHQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9nYW50dC9jb21wb25lbnRzL2dhbnR0L2dhbnR0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR2xEO0lBMEJJLGVBQVksT0FBWSxFQUFFLEtBQWEsRUFBRSxPQUFpQjtRQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFmRCxzQkFBVywwQkFBTzthQUFsQjtZQUNJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUVELHNCQUFXLDBCQUFPO2FBQWxCO1lBQ0ksT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3pCLENBQUM7OztPQUFBO0lBV08sNkJBQWEsR0FBckIsVUFBc0IsT0FBWTtRQUM5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IGZyb20gXCIuL3V0aWxzL2RhdGUtdXRpbHNcIjtcbmltcG9ydCB7ICQsIGNyZWF0ZVNWRyB9IGZyb20gXCIuL3V0aWxzL3N2Zy11dGlsc1wiO1xuaW1wb3J0IHsgQmFyIH0gZnJvbSBcIi4vYmFyXCI7XG5pbXBvcnQgeyBQb3B1cCB9IGZyb20gXCIuL3BvcHVwXCI7XG5pbXBvcnQgeyBBcnJvdyB9IGZyb20gXCIuL2Fycm93XCI7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSBcIi4uLy4uL21vZGVscy9vcHRpb25zXCI7XG5pbXBvcnQgeyBkZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuL2dhbnR0LW9wdGlvbnNcIjtcbmltcG9ydCB7IFZpZXdNb2RlIH0gZnJvbSBcIi4uLy4uL21vZGVscy92aWV3LW1vZGVcIjtcbmltcG9ydCB7IFRhc2ssIEVucmljaGVkVGFzayB9IGZyb20gXCIuLi8uLi9tb2RlbHNcIjtcblxuZXhwb3J0IGNsYXNzIEdhbnR0IHtcbiAgICBwdWJsaWMgb3B0aW9uczogT3B0aW9ucztcbiAgICBwdWJsaWMgdGFza3M6IEVucmljaGVkVGFza1tdO1xuICAgIHB1YmxpYyBkZXBlbmRlbmN5X21hcDogYW55O1xuXG4gICAgcHJpdmF0ZSBfbWluRGF0ZTogRGF0ZTtcbiAgICBwcml2YXRlIF9tYXhEYXRlOiBEYXRlO1xuXG4gICAgcHVibGljIGRhdGVzOiBEYXRlW107XG4gICAgcHVibGljIGxheWVyczogYW55O1xuICAgIHB1YmxpYyBiYXJzOiBCYXJbXTtcbiAgICBwdWJsaWMgYXJyb3dzOiBBcnJvd1tdO1xuICAgIHB1YmxpYyBiYXJfYmVpbmdfZHJhZ2dlZDogYW55O1xuICAgIHB1YmxpYyAkc3ZnOiBhbnk7XG4gICAgcHVibGljICRjb250YWluZXI6IEhUTUxEaXZFbGVtZW50O1xuICAgIHB1YmxpYyBwb3B1cF93cmFwcGVyOiBIVE1MRGl2RWxlbWVudDtcbiAgICBwdWJsaWMgcG9wdXA6IGFueTtcblxuICAgIHB1YmxpYyBnZXQgbWluRGF0ZSgpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbkRhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtYXhEYXRlKCk6IERhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4RGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcih3cmFwcGVyOiBhbnksIHRhc2tzOiBUYXNrW10sIG9wdGlvbnM/OiBPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuc2V0dXBfb3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgdGhpcy5zZXR1cF93cmFwcGVyKHdyYXBwZXIpO1xuICAgICAgICB0aGlzLnNldHVwX3Rhc2tzKHRhc2tzKTtcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSB3aXRoIGRlZmF1bHQgdmlldyBtb2RlXG4gICAgICAgIHRoaXMuY2hhbmdlX3ZpZXdfbW9kZSgpO1xuICAgICAgICB0aGlzLmJpbmRfZXZlbnRzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cF93cmFwcGVyKGVsZW1lbnQ6IGFueSkge1xuICAgICAgICBsZXQgc3ZnX2VsZW1lbnQsIHdyYXBwZXJfZWxlbWVudDtcblxuICAgICAgICAvLyBDU1MgU2VsZWN0b3IgaXMgcGFzc2VkXG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnZXQgdGhlIFNWR0VsZW1lbnRcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgd3JhcHBlcl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgICAgIHN2Z19lbGVtZW50ID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwic3ZnXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTVkdFbGVtZW50KSB7XG4gICAgICAgICAgICBzdmdfZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgIFwiRnJhcHDDqSBHYW50dCBvbmx5IHN1cHBvcnRzIHVzYWdlIG9mIGEgc3RyaW5nIENTUyBzZWxlY3RvciwgSFRNTCBET00gZWxlbWVudCBvciBTVkcgRE9NIGVsZW1lbnQgZm9yIHRoZSBcXCdlbGVtZW50XFwnIHBhcmFtZXRlclwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3ZnIGVsZW1lbnRcbiAgICAgICAgaWYgKCFzdmdfZWxlbWVudCkge1xuICAgICAgICAgICAgLy8gY3JlYXRlIGl0XG4gICAgICAgICAgICB0aGlzLiRzdmcgPSBjcmVhdGVTVkcoXCJzdmdcIiwge1xuICAgICAgICAgICAgICAgIGFwcGVuZF90bzogd3JhcHBlcl9lbGVtZW50LFxuICAgICAgICAgICAgICAgIGNsYXNzOiBcImdhbnR0XCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuJHN2ZyA9IHN2Z19lbGVtZW50O1xuICAgICAgICAgICAgdGhpcy4kc3ZnLmNsYXNzTGlzdC5hZGQoXCJnYW50dFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdyYXBwZXIgZWxlbWVudFxuICAgICAgICB0aGlzLiRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB0aGlzLiRjb250YWluZXIuY2xhc3NMaXN0LmFkZChcImdhbnR0LWNvbnRhaW5lclwiKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb250YWluZXJXaWR0aCkge1xuICAgICAgICAgICAgdGhpcy4kY29udGFpbmVyLnN0eWxlLndpZHRoID0gdGhpcy5vcHRpb25zLmNvbnRhaW5lcldpZHRoICsgJ3B4JztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudF9lbGVtZW50ID0gdGhpcy4kc3ZnLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIHBhcmVudF9lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuJGNvbnRhaW5lcik7XG4gICAgICAgIHRoaXMuJGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLiRzdmcpO1xuXG4gICAgICAgIC8vIHBvcHVwIHdyYXBwZXJcbiAgICAgICAgdGhpcy5wb3B1cF93cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdGhpcy5wb3B1cF93cmFwcGVyLmNsYXNzTGlzdC5hZGQoXCJwb3B1cC13cmFwcGVyXCIpO1xuICAgICAgICB0aGlzLiRjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5wb3B1cF93cmFwcGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwX29wdGlvbnMob3B0aW9uczogYW55KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0dXBfdGFza3ModGFza3M6IGFueSkge1xuICAgICAgICAvLyBwcmVwYXJlIHRhc2tzXG4gICAgICAgIHRoaXMudGFza3MgPSB0YXNrcy5tYXAoKHRhc2s6IGFueSwgaTogYW55KSA9PiB7XG4gICAgICAgICAgICAvL3N0YW5kYXJkIGNvbG9ycyBpZiBuZWVkZWRcbiAgICAgICAgICAgIHRhc2suY29sb3IgPSB0YXNrLmNvbG9yIHx8ICcjNzg5MkExJztcblxuICAgICAgICAgICAgLy8gY29udmVydCB0byBEYXRlIG9iamVjdHNcbiAgICAgICAgICAgIHRhc2suX3N0YXJ0ID0gRGF0ZVV0aWxzLnBhcnNlKHRhc2suc3RhcnQpO1xuICAgICAgICAgICAgdGFzay5fZW5kID0gRGF0ZVV0aWxzLnBhcnNlKHRhc2suZW5kKTtcblxuICAgICAgICAgICAgLy8gbWFrZSB0YXNrIGludmFsaWQgaWYgZHVyYXRpb24gdG9vIGxhcmdlXG4gICAgICAgICAgICBpZiAoRGF0ZVV0aWxzLmRpZmYodGFzay5fZW5kLCB0YXNrLl9zdGFydCwgXCJ5ZWFyXCIpID4gMTApIHtcbiAgICAgICAgICAgICAgICB0YXNrLmVuZCA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNhY2hlIGluZGV4XG4gICAgICAgICAgICB0YXNrLl9pbmRleCA9IGk7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGFzay5fcm93X2lkID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgdGFzay5faW5kZXggPSB0YXNrLl9yb3dfaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGludmFsaWQgZGF0ZXNcbiAgICAgICAgICAgIGlmICghdGFzay5zdGFydCAmJiAhdGFzay5lbmQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b2RheSA9IERhdGVVdGlscy50b2RheSgpO1xuICAgICAgICAgICAgICAgIHRhc2suX3N0YXJ0ID0gdG9kYXk7XG4gICAgICAgICAgICAgICAgdGFzay5fZW5kID0gRGF0ZVV0aWxzLmFkZCh0b2RheSwgMiwgXCJkYXlcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGFzay5zdGFydCAmJiB0YXNrLmVuZCkge1xuICAgICAgICAgICAgICAgIHRhc2suX3N0YXJ0ID0gRGF0ZVV0aWxzLmFkZCh0YXNrLl9lbmQsIC0yLCAnZGF5Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0YXNrLnN0YXJ0ICYmICF0YXNrLmVuZCkge1xuICAgICAgICAgICAgICAgIHRhc2suX2VuZCA9IERhdGVVdGlscy5hZGQodGFzay5fc3RhcnQsIDIsIFwiZGF5XCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBob3VycyBpcyBub3Qgc2V0LCBhc3N1bWUgdGhlIGxhc3QgZGF5IGlzIGZ1bGwgZGF5XG4gICAgICAgICAgICAvLyBlLmc6IDIwMTgtMDktMDkgYmVjb21lcyAyMDE4LTA5LTA5IDIzOjU5OjU5XG4gICAgICAgICAgICBjb25zdCB0YXNrX2VuZF92YWx1ZXMgPSBEYXRlVXRpbHMuZ2V0RGF0ZVZhbHVlcyh0YXNrLl9lbmQpO1xuICAgICAgICAgICAgaWYgKHRhc2tfZW5kX3ZhbHVlcy5zbGljZSgzKS5ldmVyeSgoZCkgPT4gZCA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICB0YXNrLl9lbmQgPSBEYXRlVXRpbHMuYWRkKHRhc2suX2VuZCwgMjQsIFwiaG91clwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaW52YWxpZCBmbGFnXG4gICAgICAgICAgICBpZiAoIXRhc2suc3RhcnQgfHwgIXRhc2suZW5kKSB7XG4gICAgICAgICAgICAgICAgdGFzay5pbnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRhc2suZGVwZW5kZW5jaWVzID09PSBcInN0cmluZ1wiIHx8ICF0YXNrLmRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgICAgIGxldCBkZXBzID0gW107XG4gICAgICAgICAgICAgICAgaWYgKHRhc2suZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlcHMgPSB0YXNrLmRlcGVuZGVuY2llc1xuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGQ6IGFueSkgPT4gZC50cmltKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChkOiBhbnkpID0+IGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YXNrLmRlcGVuZGVuY2llcyA9IGRlcHM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHVpZHNcbiAgICAgICAgICAgIGlmICghdGFzay5pZCkge1xuICAgICAgICAgICAgICAgIHRhc2suaWQgPSBnZW5lcmF0ZV9pZCh0YXNrKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRhc2s7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2V0dXBfZGVwZW5kZW5jaWVzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cF9kZXBlbmRlbmNpZXMoKSB7XG4gICAgICAgIHRoaXMuZGVwZW5kZW5jeV9tYXAgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgdCBvZiB0aGlzLnRhc2tzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBkIG9mIHQuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXBlbmRlbmN5X21hcFtkXSA9IHRoaXMuZGVwZW5kZW5jeV9tYXBbZF0gfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5kZXBlbmRlbmN5X21hcFtkXS5wdXNoKHQuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlZnJlc2godGFza3M6IFRhc2tbXSkge1xuICAgICAgICB0aGlzLnNldHVwX3Rhc2tzKHRhc2tzKTtcbiAgICAgICAgdGhpcy5jaGFuZ2Vfdmlld19tb2RlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZV92aWV3X21vZGUobW9kZSA9IHRoaXMub3B0aW9ucy52aWV3TW9kZSkge1xuICAgICAgICB0aGlzLnNldHVwX2dhbnR0X2RhdGVzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlX3ZpZXdfc2NhbGUobW9kZSk7XG4gICAgICAgIHRoaXMuc2V0dXBfZGF0ZXMoKTtcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgLy8gZmlyZSB2aWV3bW9kZV9jaGFuZ2UgZXZlbnRcbiAgICAgICAgdGhpcy50cmlnZ2VyX2V2ZW50KFwib25WaWV3Q2hhbmdlXCIsIFttb2RlXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVfdmlld19zY2FsZSh2aWV3X21vZGU6IGFueSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMudmlld01vZGUgPSB2aWV3X21vZGU7XG4gICAgICAgIC8vIHRoaXMuaXNIb3VyVmlldyA9IGZhbHNlO1xuICAgICAgICBpZiAodmlld19tb2RlID09PSBWaWV3TW9kZS5RdWFydGVySG91cikge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAvIDI0IC8gNDtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCA9IDUwO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuSG91cikge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAvIDI0O1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gNTA7XG4gICAgICAgIH0gZWxzZSBpZiAodmlld19tb2RlID09PSBWaWV3TW9kZS5EYXkpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMjQ7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggPSA1MDtcbiAgICAgICAgfSBlbHNlIGlmICh2aWV3X21vZGUgPT09IFZpZXdNb2RlLkhhbGZEYXkpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zdGVwID0gMjQgLyAyO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gNTA7XG4gICAgICAgIH0gZWxzZSBpZiAodmlld19tb2RlID09PSBWaWV3TW9kZS5RdWFydGVyRGF5KSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcCA9IDI0IC8gNDtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCA9IDUwO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuV2Vlaykge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAqIDc7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggPSAxNDA7XG4gICAgICAgIH0gZWxzZSBpZiAodmlld19tb2RlID09PSBWaWV3TW9kZS5Nb250aCkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAqIDMwO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gMTIwO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdfbW9kZSA9PT0gVmlld01vZGUuWWVhcikge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAyNCAqIDM2NTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCA9IDEyMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBfZGF0ZXMoKSB7XG4gICAgICAgIHRoaXMuc2V0dXBfZGF0ZV92YWx1ZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwX2dhbnR0X2RhdGVzKCkge1xuICAgICAgICB0aGlzLl9taW5EYXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IG51bGw7XG5cbiAgICAgICAgZm9yIChsZXQgdGFzayBvZiB0aGlzLnRhc2tzKSB7XG4gICAgICAgICAgICAvLyBzZXQgZ2xvYmFsIHN0YXJ0IGFuZCBlbmQgZGF0ZVxuICAgICAgICAgICAgaWYgKCF0aGlzLm1pbkRhdGUgfHwgdGFzay5zdGFydCA8IHRoaXMubWluRGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuc3RhcnRPZih0YXNrLnN0YXJ0LCAnZGF5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMubWF4RGF0ZSB8fCB0YXNrLmVuZCA+IHRoaXMubWF4RGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21heERhdGUgPSB0YXNrLmVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLnZpZXdNb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFZpZXdNb2RlLlF1YXJ0ZXJIb3VyOlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWluRGF0ZSwgLSh0aGlzLm9wdGlvbnMubWFyZ2luQmVmb3JlU3RhcnQgPz8gMTUpLCBcIm1pbnV0ZXNcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5tYXhEYXRlLCB0aGlzLm9wdGlvbnMubWFyZ2luQWZ0ZXJFbmQgPz8gMTUsIFwibWludXRlc1wiKTtcbiAgICAgICAgICAgIGNhc2UgVmlld01vZGUuSG91cjpcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5EYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1pbkRhdGUsIC0odGhpcy5vcHRpb25zLm1hcmdpbkJlZm9yZVN0YXJ0ID8/IDEpLCBcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5tYXhEYXRlLCB0aGlzLm9wdGlvbnMubWFyZ2luQWZ0ZXJFbmQgPz8gMSwgXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5RdWFydGVyRGF5OlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWluRGF0ZSwgLSh0aGlzLm9wdGlvbnMubWFyZ2luQmVmb3JlU3RhcnQgPz8gNiksIFwiaG91clwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1heERhdGUsIHRoaXMub3B0aW9ucy5tYXJnaW5BZnRlckVuZCA/PyA2LCBcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFZpZXdNb2RlLkhhbGZEYXk6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyAxMiksIFwiaG91clwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1heERhdGUsIHRoaXMub3B0aW9ucy5tYXJnaW5BZnRlckVuZCA/PyAxMiwgXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5EYXk6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyAxKSwgXCJkYXlcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4RGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5tYXhEYXRlLCB0aGlzLm9wdGlvbnMubWFyZ2luQWZ0ZXJFbmQgPz8gMSwgXCJkYXlcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFZpZXdNb2RlLldlZWs6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyAxKSwgXCJ3ZWVrXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21heERhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWF4RGF0ZSwgdGhpcy5vcHRpb25zLm1hcmdpbkFmdGVyRW5kID8/IDEsIFwid2Vla1wiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVmlld01vZGUuTW9udGg6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluRGF0ZSA9IERhdGVVdGlscy5hZGQodGhpcy5taW5EYXRlLCAtKHRoaXMub3B0aW9ucy5tYXJnaW5CZWZvcmVTdGFydCA/PyAxKSwgXCJtb250aFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1heERhdGUsIHRoaXMub3B0aW9ucy5tYXJnaW5BZnRlckVuZCA/PyAxLCBcIm1vbnRoXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWaWV3TW9kZS5ZZWFyOlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbkRhdGUgPSBEYXRlVXRpbHMuYWRkKHRoaXMubWluRGF0ZSwgLSh0aGlzLm9wdGlvbnMubWFyZ2luQmVmb3JlU3RhcnQgPz8gMSksIFwieWVhclwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhEYXRlID0gRGF0ZVV0aWxzLmFkZCh0aGlzLm1heERhdGUsIHRoaXMub3B0aW9ucy5tYXJnaW5BZnRlckVuZCA/PyAxLCBcInllYXJcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwX2RhdGVfdmFsdWVzKCkge1xuICAgICAgICB0aGlzLmRhdGVzID0gW107XG4gICAgICAgIGxldCBjdXJfZGF0ZSA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKGN1cl9kYXRlID09PSBudWxsIHx8IGN1cl9kYXRlIDwgdGhpcy5tYXhEYXRlKSB7XG4gICAgICAgICAgICBpZiAoIWN1cl9kYXRlKSB7XG4gICAgICAgICAgICAgICAgY3VyX2RhdGUgPSBEYXRlVXRpbHMuY2xvbmUodGhpcy5taW5EYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5ZZWFyKSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJfZGF0ZSA9IERhdGVVdGlscy5hZGQoY3VyX2RhdGUsIDEsIFwieWVhclwiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5Nb250aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VyX2RhdGUgPSBEYXRlVXRpbHMuYWRkKGN1cl9kYXRlLCAxLCBcIm1vbnRoXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cl9kYXRlID0gRGF0ZVV0aWxzLmFkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9kYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaG91cidcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRhdGVzLnB1c2goY3VyX2RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb250YWluZXJXaWR0aCkge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uV2lkdGggPSAodGhpcy5vcHRpb25zLmNvbnRhaW5lcldpZHRoIC0gMSkgLyB0aGlzLmRhdGVzLmxlbmd0aFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoID0gY29sdW1uV2lkdGggPCA0NSA/IDQ1IDogY29sdW1uV2lkdGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRfZXZlbnRzKCkge1xuICAgICAgICB0aGlzLmJpbmRfZ3JpZF9jbGljaygpO1xuICAgICAgICB0aGlzLmJpbmRfYmFyX2V2ZW50cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc2V0dXBfbGF5ZXJzKCk7XG4gICAgICAgIHRoaXMubWFrZV9ncmlkKCk7XG4gICAgICAgIHRoaXMubWFrZV9kYXRlcygpO1xuICAgICAgICB0aGlzLm1ha2VfYmFycygpO1xuICAgICAgICB0aGlzLm1ha2VfYXJyb3dzKCk7XG4gICAgICAgIHRoaXMubWFwX2Fycm93c19vbl9iYXJzKCk7XG4gICAgICAgIHRoaXMuc2V0X3dpZHRoKCk7XG4gICAgICAgIHRoaXMuc2V0X3Njcm9sbF9wb3NpdGlvbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBfbGF5ZXJzKCkge1xuICAgICAgICB0aGlzLmxheWVycyA9IHt9O1xuICAgICAgICBjb25zdCBsYXllcnMgPSBbXCJncmlkXCIsIFwiZGF0ZVwiLCBcImFycm93XCIsIFwicHJvZ3Jlc3NcIiwgXCJiYXJcIiwgXCJkZXRhaWxzXCJdO1xuICAgICAgICAvLyBtYWtlIGdyb3VwIGxheWVyc1xuICAgICAgICBmb3IgKGxldCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgICAgIHRoaXMubGF5ZXJzW2xheWVyXSA9IGNyZWF0ZVNWRygnZycsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogbGF5ZXIsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLiRzdmcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZV9ncmlkKCkge1xuICAgICAgICB0aGlzLm1ha2VfZ3JpZF9iYWNrZ3JvdW5kKCk7XG4gICAgICAgIHRoaXMubWFrZV9ncmlkX3Jvd3MoKTtcbiAgICAgICAgdGhpcy5tYWtlX2dyaWRfaGVhZGVyKCk7XG4gICAgICAgIHRoaXMubWFrZV9ncmlkX2hpZ2hsaWdodHMoKTtcbiAgICAgICAgdGhpcy5tYWtlX2dyaWRfdGlja3MoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1ha2VfZ3JpZF9iYWNrZ3JvdW5kKCkge1xuICAgICAgICBsZXQgZ3JpZF93aWR0aCA9IHRoaXMuZGF0ZXMubGVuZ3RoICogdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgICAgIGdyaWRfd2lkdGggPSB0aGlzLm9wdGlvbnMuY29udGFpbmVyV2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaXN0aW5jdF9yb3dzID0gWy4uLm5ldyBTZXQodGhpcy50YXNrcy5tYXAoKHg6IGFueSkgPT4geC5fcm93X2lkKSldO1xuICAgICAgICBjb25zdCBncmlkX2hlaWdodCA9IHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQgK1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBhZGRpbmcgLyAyICtcbiAgICAgICAgICAgICh0aGlzLm9wdGlvbnMuYmFySGVpZ2h0ICsgdGhpcy5vcHRpb25zLnBhZGRpbmcpICpcbiAgICAgICAgICAgIGRpc3RpbmN0X3Jvd3MubGVuZ3RoO1xuXG4gICAgICAgIGNyZWF0ZVNWRyhcInJlY3RcIiwge1xuICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICB3aWR0aDogZ3JpZF93aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogZ3JpZF9oZWlnaHQsXG4gICAgICAgICAgICBjbGFzczogXCJncmlkLWJhY2tncm91bmRcIixcbiAgICAgICAgICAgIGFwcGVuZF90bzogdGhpcy5sYXllcnMuZ3JpZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJC5hdHRyKHRoaXMuJHN2Zywge1xuICAgICAgICAgICAgaGVpZ2h0OiBncmlkX2hlaWdodCxcbiAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgfSwgbnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYWtlX2dyaWRfcm93cygpIHtcbiAgICAgICAgY29uc3Qgcm93c19sYXllciA9IGNyZWF0ZVNWRyhcImdcIiwgeyBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmdyaWQgfSk7XG4gICAgICAgIGNvbnN0IGxpbmVzX2xheWVyID0gY3JlYXRlU1ZHKFwiZ1wiLCB7IGFwcGVuZF90bzogdGhpcy5sYXllcnMuZ3JpZCB9KTtcblxuICAgICAgICBjb25zdCByb3dfd2lkdGggPSB0aGlzLmRhdGVzLmxlbmd0aCAqIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aDtcbiAgICAgICAgY29uc3Qgcm93X2hlaWdodCA9IHRoaXMub3B0aW9ucy5iYXJIZWlnaHQgKyB0aGlzLm9wdGlvbnMucGFkZGluZztcbiAgICAgICAgLy9UT0RPOiAgYWp1c3RhciBvIHBvc2ljaW9uYW1lbnRvIGRhcyBsaW5oYXNcbiAgICAgICAgbGV0IHJvd195ID0gdGhpcy5vcHRpb25zLmhlYWRlckhlaWdodCArIHRoaXMub3B0aW9ucy5wYWRkaW5nIC8gMjtcblxuICAgICAgICB0aGlzLnRhc2tzLmZvckVhY2goXyA9PiB7XG4gICAgICAgICAgICBjcmVhdGVTVkcoXCJyZWN0XCIsIHtcbiAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgIHk6IHJvd195LFxuICAgICAgICAgICAgICAgIHdpZHRoOiByb3dfd2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiByb3dfaGVpZ2h0LFxuICAgICAgICAgICAgICAgIGNsYXNzOiBcImdyaWQtcm93XCIsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiByb3dzX2xheWVyLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNyZWF0ZVNWRyhcImxpbmVcIiwge1xuICAgICAgICAgICAgICAgIHgxOiAwLFxuICAgICAgICAgICAgICAgIHkxOiByb3dfeSArIHJvd19oZWlnaHQsXG4gICAgICAgICAgICAgICAgeDI6IHJvd193aWR0aCxcbiAgICAgICAgICAgICAgICB5Mjogcm93X3kgKyByb3dfaGVpZ2h0LFxuICAgICAgICAgICAgICAgIGNsYXNzOiBcInJvdy1saW5lXCIsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiBsaW5lc19sYXllcixcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByb3dfeSArPSB0aGlzLm9wdGlvbnMuYmFySGVpZ2h0ICsgdGhpcy5vcHRpb25zLnBhZGRpbmc7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZV9ncmlkX2hlYWRlcigpIHtcbiAgICAgICAgLy8gY29uc3QgYWRkSXNIb3VyVmlldyA9IHRoaXMuaXNIb3VyVmlldyA/IDI1IDogMTBcbiAgICAgICAgY29uc3QgaGVhZGVyX3dpZHRoID0gdGhpcy5kYXRlcy5sZW5ndGggKiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGg7XG4gICAgICAgIGNvbnN0IGhlYWRlcl9oZWlnaHQgPSB0aGlzLm9wdGlvbnMuaGVhZGVySGVpZ2h0ICsgMTA7XG4gICAgICAgIGNyZWF0ZVNWRyhcInJlY3RcIiwge1xuICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICB3aWR0aDogaGVhZGVyX3dpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBoZWFkZXJfaGVpZ2h0LFxuICAgICAgICAgICAgY2xhc3M6IFwiZ3JpZC1oZWFkZXJcIixcbiAgICAgICAgICAgIGFwcGVuZF90bzogdGhpcy5sYXllcnMuZ3JpZCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYWtlX2dyaWRfdGlja3MoKSB7XG4gICAgICAgIGxldCB0aWNrX3ggPSAwO1xuICAgICAgICBsZXQgdGlja195ID0gdGhpcy5vcHRpb25zLmhlYWRlckhlaWdodCArIHRoaXMub3B0aW9ucy5wYWRkaW5nIC8gMjtcbiAgICAgICAgbGV0IHRpY2tfaGVpZ2h0ID1cbiAgICAgICAgICAgICh0aGlzLm9wdGlvbnMuYmFySGVpZ2h0ICsgdGhpcy5vcHRpb25zLnBhZGRpbmcpICpcbiAgICAgICAgICAgIHRoaXMudGFza3MubGVuZ3RoO1xuXG4gICAgICAgIGZvciAobGV0IGRhdGUgb2YgdGhpcy5kYXRlcykge1xuICAgICAgICAgICAgbGV0IHRpY2tfY2xhc3MgPSBcInRpY2tcIjtcblxuICAgICAgICAgICAgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5RdWFydGVySG91cikgJiYgZGF0ZS5nZXRIb3VycygpID09PSAwICYmIGRhdGUuZ2V0TWludXRlcygpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpY2sgdGljayBmb3IgZmlyc3QgaG91ciBvZiBkYXkuXG4gICAgICAgICAgICAgICAgdGlja19jbGFzcyArPSBcIiB0aGlja1wiO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdfaXMoW1ZpZXdNb2RlLkhvdXIsIFZpZXdNb2RlLlF1YXJ0ZXJEYXksIFZpZXdNb2RlLkhhbGZEYXldKSAmJiBkYXRlLmdldEhvdXJzKCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyB0aGljayB0aWNrIGZvciBmaXJzdCBob3VyIG9mIGRheS5cbiAgICAgICAgICAgICAgICB0aWNrX2NsYXNzICs9IFwiIHRoaWNrXCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5EYXkpICYmIGRhdGUuZ2V0RGF0ZSgpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpY2sgdGljayBmb3IgbW9uZGF5XG4gICAgICAgICAgICAgICAgdGlja19jbGFzcyArPSBcIiB0aGlja1wiO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuV2VlaykgJiYgZGF0ZS5nZXREYXRlKCkgPj0gMSAmJiBkYXRlLmdldERhdGUoKSA8IDgpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGljayB0aWNrIGZvciBmaXJzdCB3ZWVrXG4gICAgICAgICAgICAgICAgdGlja19jbGFzcyArPSBcIiB0aGlja1wiO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuTW9udGgpICYmIGRhdGUuZ2V0TW9udGgoKSAlIDMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyB0aGljayB0aWNrcyBmb3IgcXVhcnRlcnNcbiAgICAgICAgICAgICAgICB0aWNrX2NsYXNzICs9IFwiIHRoaWNrXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNyZWF0ZVNWRyhcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgIGQ6IGBNICR7dGlja194fSAke3RpY2tfeX0gdiAke3RpY2tfaGVpZ2h0fWAsXG4gICAgICAgICAgICAgICAgY2xhc3M6IHRpY2tfY2xhc3MsXG4gICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5ncmlkLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuTW9udGgpKSB7XG4gICAgICAgICAgICAgICAgdGlja194ICs9XG4gICAgICAgICAgICAgICAgICAgIChEYXRlVXRpbHMuZ2V0RGF5c0luTW9udGgoZGF0ZSkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoKSAvXG4gICAgICAgICAgICAgICAgICAgIDMwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aWNrX3ggKz0gdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWFrZV9ncmlkX2hpZ2hsaWdodHMoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuRGF5KSkge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGg7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSAodGhpcy5vcHRpb25zLmJhckhlaWdodCArIHRoaXMub3B0aW9ucy5wYWRkaW5nKSAqXG4gICAgICAgICAgICAgICAgdGhpcy50YXNrcy5sZW5ndGggK1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQgK1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYWRkaW5nIC8gMjtcblxuICAgICAgICAgICAgbGV0IHggPSAwO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBkYXRlIG9mIHRoaXMuZGF0ZXMpIHtcblxuICAgICAgICAgICAgICAgIGxldCB5ID0gKHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQgKyB0aGlzLm9wdGlvbnMucGFkZGluZykgLyAyO1xuXG4gICAgICAgICAgICAgICAgbGV0IGlzVG9kYXkgPSBkYXRlID09IERhdGVVdGlscy50b2RheSgpO1xuICAgICAgICAgICAgICAgIGxldCBpc1dlZWtlbmQgPSAoZGF0ZS5nZXREYXkoKSA9PSAwIHx8IGRhdGUuZ2V0RGF5KCkgPT0gNik7XG4gICAgICAgICAgICAgICAgbGV0IGNsYXNzTmFtZTtcblxuICAgICAgICAgICAgICAgIGlmIChpc1RvZGF5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IFwidG9kYXktaGlnaGxpZ2h0XCI7XG4gICAgICAgICAgICAgICAgICAgIHkgPSAodGhpcy5vcHRpb25zLmhlYWRlckhlaWdodCArIHRoaXMub3B0aW9ucy5wYWRkaW5nKSAvIDI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1dlZWtlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gXCJ3ZWVrZW5kLWhpZ2hsaWdodFwiO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHJ4ID0gMztcbiAgICAgICAgICAgICAgICBjb25zdCByeSA9IDM7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNUb2RheSB8fCBpc1dlZWtlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlU1ZHKFwicmVjdFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ4LFxuICAgICAgICAgICAgICAgICAgICAgICAgcnksXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBjbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmdyaWRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgeCArPSB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1ha2VfZGF0ZXMoKSB7XG4gICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy5nZXRfZGF0ZXNfdG9fZHJhdygpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBkYXRlc1tpXTtcblxuICAgICAgICAgICAgY3JlYXRlU1ZHKFwidGV4dFwiLCB7XG4gICAgICAgICAgICAgICAgeDogZGF0ZS5sb3dlcl94LFxuICAgICAgICAgICAgICAgIHk6IGRhdGUubG93ZXJfeSArIDIwLFxuICAgICAgICAgICAgICAgIGlubmVySFRNTDogZGF0ZS5sb3dlcl90ZXh0LFxuICAgICAgICAgICAgICAgIGNsYXNzOiBcInRpdGxlLTJcIixcbiAgICAgICAgICAgICAgICBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmRhdGUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGRhdGUubWlkZGxlX3RleHQpIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVTVkcoXCJ0ZXh0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgeDogZGF0ZS5taWRkbGVfeCxcbiAgICAgICAgICAgICAgICAgICAgeTogZGF0ZS5taWRkbGVfeSxcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBkYXRlLm1pZGRsZV90ZXh0LFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogXCJtaWRkbGUtdGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRfdG86IHRoaXMubGF5ZXJzLmRhdGUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRlLnVwcGVyX3RleHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCAkdXBwZXJfdGV4dCA9IGNyZWF0ZVNWRyhcInRleHRcIiwge1xuICAgICAgICAgICAgICAgICAgICB4OiBkYXRlLnVwcGVyX3gsXG4gICAgICAgICAgICAgICAgICAgIHk6IGRhdGUudXBwZXJfeSxcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBkYXRlLnVwcGVyX3RleHQsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBcInVwcGVyLXRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kX3RvOiB0aGlzLmxheWVycy5kYXRlLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG91dC1vZi1ib3VuZCBkYXRlc1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgJHVwcGVyX3RleHQuZ2V0QkJveCgpLngyID4gdGhpcy5sYXllcnMuZ3JpZC5nZXRCQm94KCkud2lkdGhcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgJHVwcGVyX3RleHQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRfZGF0ZXNfdG9fZHJhdygpIHtcbiAgICAgICAgbGV0IGxhc3RfZGF0ZTogYW55ID0gbnVsbDtcbiAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLmRhdGVzLm1hcCgoZGF0ZTogYW55LCBpOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSB0aGlzLmdldF9kYXRlX2luZm8oZGF0ZSwgbGFzdF9kYXRlLCBpKTtcbiAgICAgICAgICAgIGxhc3RfZGF0ZSA9IGRhdGU7XG4gICAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkYXRlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldF9kYXRlX2luZm8oZGF0ZTogRGF0ZSwgbGFzdF9kYXRlOiBEYXRlLCBpOiBhbnkpIHtcbiAgICAgICAgaWYgKCFsYXN0X2RhdGUpIHtcbiAgICAgICAgICAgIGxhc3RfZGF0ZSA9IERhdGVVdGlscy5hZGQoZGF0ZSwgMSwgXCJ5ZWFyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0ZV90ZXh0ID0ge1xuICAgICAgICAgICAgLy8gcXVhcnRlciBob3VyXG4gICAgICAgICAgICBxdWFydGVySG91clVwcGVyOiBkYXRlLmdldERhdGUoKSAhPT0gbGFzdF9kYXRlLmdldERhdGUoKVxuICAgICAgICAgICAgICAgID8gRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIkQgTU1NXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSlcbiAgICAgICAgICAgICAgICA6IFwiXCIsXG5cbiAgICAgICAgICAgIHF1YXJ0ZXJIb3VyTG93ZXI6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJISDptbVwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICAvLyBob3VyXG4gICAgICAgICAgICBob3VyVXBwZXI6IGRhdGUuZ2V0RGF0ZSgpICE9PSBsYXN0X2RhdGUuZ2V0RGF0ZSgpXG4gICAgICAgICAgICAgICAgPyBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsIFwiRCBNTU1cIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKVxuICAgICAgICAgICAgICAgIDogXCJcIixcblxuICAgICAgICAgICAgaG91ckxvd2VyOiBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsIFwiSEg6bW1cIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKSxcblxuICAgICAgICAgICAgLy8gcXVhcnRlciBkYXlcbiAgICAgICAgICAgIHF1YXJ0ZXJEYXlVcHBlcjogZGF0ZS5nZXREYXRlKCkgIT09IGxhc3RfZGF0ZS5nZXREYXRlKClcbiAgICAgICAgICAgICAgICA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJEIE1NTVwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgOiBcIlwiLFxuXG4gICAgICAgICAgICBxdWFydGVyRGF5TG93ZXI6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJISDptbVwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICAvLyBoYWxmIGRheVxuICAgICAgICAgICAgaGFsZkRheVVwcGVyOiAoZGF0ZS5nZXREYXRlKCkgIT09IGxhc3RfZGF0ZS5nZXREYXRlKCkpXG4gICAgICAgICAgICAgICAgPyAoKChkYXRlLmdldE1vbnRoKCkgIT09IGxhc3RfZGF0ZS5nZXRNb250aCgpKSB8fCBpIDwgMilcbiAgICAgICAgICAgICAgICAgICAgPyBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsIFwiRCBNTU1cIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKVxuICAgICAgICAgICAgICAgICAgICA6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJEXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSkpXG4gICAgICAgICAgICAgICAgOiBcIlwiLFxuXG4gICAgICAgICAgICBoYWxmRGF5TG93ZXI6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJISDptbVwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpLFxuXG4gICAgICAgICAgICAvLyBkYXlcbiAgICAgICAgICAgIGRheVVwcGVyOiAoKGRhdGUuZ2V0TW9udGgoKSAhPT0gbGFzdF9kYXRlLmdldE1vbnRoKCkpIHx8IGkgPT09IDApXG4gICAgICAgICAgICAgICAgPyBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsIFwiTU1NTVwiLCB0aGlzLm9wdGlvbnMubGFuZ3VhZ2UpXG4gICAgICAgICAgICAgICAgOiBcIlwiLFxuXG4gICAgICAgICAgICBkYXlNaWRkbGU6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJkZGRcIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKSxcblxuICAgICAgICAgICAgZGF5TG93ZXI6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJEXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIC8vIHdlZWtcbiAgICAgICAgICAgIHdlZWtVcHBlcjogZGF0ZS5nZXRNb250aCgpICE9PSBsYXN0X2RhdGUuZ2V0TW9udGgoKVxuICAgICAgICAgICAgICAgID8gRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIk1NTU1cIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKVxuICAgICAgICAgICAgICAgIDogXCJcIixcblxuICAgICAgICAgICAgd2Vla0xvd2VyOiBkYXRlLmdldE1vbnRoKCkgIT09IGxhc3RfZGF0ZS5nZXRNb250aCgpXG4gICAgICAgICAgICAgICAgPyBEYXRlVXRpbHMuZm9ybWF0KGRhdGUsIFwiRCBNTU1cIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKVxuICAgICAgICAgICAgICAgIDogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIkRcIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKSxcblxuICAgICAgICAgICAgLy8gbW9udGhcbiAgICAgICAgICAgIG1vbnRoVXBwZXI6IGRhdGUuZ2V0RnVsbFllYXIoKSAhPT0gbGFzdF9kYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgICAgICA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJZWVlZXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSlcbiAgICAgICAgICAgICAgICA6IFwiXCIsXG5cbiAgICAgICAgICAgIG1vbnRoTG93ZXI6IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJNTU1NXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSksXG5cbiAgICAgICAgICAgIC8vIHllYXJcbiAgICAgICAgICAgIHllYXJVcHBlcjogZGF0ZS5nZXRGdWxsWWVhcigpICE9PSBsYXN0X2RhdGUuZ2V0RnVsbFllYXIoKSBcbiAgICAgICAgICAgICAgICA/IERhdGVVdGlscy5mb3JtYXQoZGF0ZSwgXCJZWVlZXCIsIHRoaXMub3B0aW9ucy5sYW5ndWFnZSlcbiAgICAgICAgICAgICAgICA6IFwiXCIsXG5cbiAgICAgICAgICAgIHllYXJMb3dlcjogRGF0ZVV0aWxzLmZvcm1hdChkYXRlLCBcIllZWVlcIiwgdGhpcy5vcHRpb25zLmxhbmd1YWdlKSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBEZXNjb250YW5kbyAyMCBwYXJhIGFkY2lvbmFyIHVtYSBzZWd1bmRhIGxpbmhhIGRlIGluZm9ybWHDp8OjbyBubyBjYWJlw6dhbGhvXG4gICAgICAgIGNvbnN0IGJhc2VfcG9zID0ge1xuICAgICAgICAgICAgeDogaSAqIHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCxcbiAgICAgICAgICAgIHVwcGVyX3k6IHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQgLSAyMCAtIDI1LFxuICAgICAgICAgICAgbWlkZGxlX3k6IHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQgLSAyMCxcbiAgICAgICAgICAgIGxvd2VyX3k6IHRoaXMub3B0aW9ucy5oZWFkZXJIZWlnaHQgLSAyMCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeF9wb3MgPSB7XG4gICAgICAgICAgICBxdWFydGVySG91clVwcGVyOiAodGhpcy5kYXRlcy5sZW5ndGggPCAxNCkgPyAodGhpcy5vcHRpb25zLmNvbHVtbldpZHRoKSA6ICh0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggKiAyNCAvIDIpLFxuICAgICAgICAgICAgcXVhcnRlckhvdXJNaWRkbGU6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDIsXG4gICAgICAgICAgICBxdWFydGVySG91ckxvd2VyOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyAyLFxuXG4gICAgICAgICAgICBob3VyVXBwZXI6ICh0aGlzLmRhdGVzLmxlbmd0aCA8IDE0KSA/ICh0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGgpIDogKHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAqIDI0IC8gMiksXG4gICAgICAgICAgICBob3VyTWlkZGxlOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyAyLFxuICAgICAgICAgICAgaG91ckxvd2VyOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyAyLFxuXG4gICAgICAgICAgICBxdWFydGVyRGF5VXBwZXI6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAqIDQgLyAyLFxuICAgICAgICAgICAgcXVhcnRlckRheU1pZGRsZTogdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoIC8gMixcbiAgICAgICAgICAgIHF1YXJ0ZXJEYXlMb3dlcjogdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoIC8gMixcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaGFsZkRheVVwcGVyOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggKiAyIC8gMixcbiAgICAgICAgICAgIGhhbGZEYXlNaWRkbGU6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDIsXG4gICAgICAgICAgICBoYWxmRGF5TG93ZXI6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDIsXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGRheVVwcGVyOiAodGhpcy5kYXRlcy5sZW5ndGggPCAxNSkgPyAodGhpcy5vcHRpb25zLmNvbHVtbldpZHRoKSA6ICgodGhpcy5vcHRpb25zLmNvbHVtbldpZHRoICogMzApIC8gMiksXG4gICAgICAgICAgICBkYXlNaWRkbGU6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDIgLSAxMixcbiAgICAgICAgICAgIGRheUxvd2VyOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyAyLFxuICAgICAgICAgICAgXG4gICAgICAgICAgICB3ZWVrVXBwZXI6ICh0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggKiA0KSAvIDIsXG4gICAgICAgICAgICB3ZWVrTWlkZGxlOiAwLFxuICAgICAgICAgICAgd2Vla0xvd2VyOiAwLFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBtb250aFVwcGVyOiAodGhpcy5kYXRlcy5sZW5ndGggPCAxNSkgPyAodGhpcy5vcHRpb25zLmNvbHVtbldpZHRoKSA6ICgodGhpcy5vcHRpb25zLmNvbHVtbldpZHRoICogMTIpIC8gMiksXG4gICAgICAgICAgICBtb250aE1pZGRsZTogMCxcbiAgICAgICAgICAgIG1vbnRoTG93ZXI6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDIsXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHllYXJVcHBlcjogKHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAqIDMwKSAvIDIsXG4gICAgICAgICAgICB5ZWFyTWlkZGxlOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyAyLFxuICAgICAgICAgICAgeWVhckxvd2VyOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyAyLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB1cHBlcl90ZXh0OiBkYXRlX3RleHRbYCR7dGhpcy5vcHRpb25zLnZpZXdNb2RlfVVwcGVyYF0sXG4gICAgICAgICAgICBtaWRkbGVfdGV4dDogZGF0ZV90ZXh0W2Ake3RoaXMub3B0aW9ucy52aWV3TW9kZX1NaWRkbGVgXSxcbiAgICAgICAgICAgIGxvd2VyX3RleHQ6IGRhdGVfdGV4dFtgJHt0aGlzLm9wdGlvbnMudmlld01vZGV9TG93ZXJgXSxcbiAgICAgICAgICAgIHVwcGVyX3g6IGJhc2VfcG9zLnggKyB4X3Bvc1tgJHt0aGlzLm9wdGlvbnMudmlld01vZGV9VXBwZXJgXSxcbiAgICAgICAgICAgIHVwcGVyX3k6IGJhc2VfcG9zLnVwcGVyX3ksXG4gICAgICAgICAgICBtaWRkbGVfeDogYmFzZV9wb3MueCArIHhfcG9zW2Ake3RoaXMub3B0aW9ucy52aWV3TW9kZX1NaWRkbGVgXSxcbiAgICAgICAgICAgIG1pZGRsZV95OiBiYXNlX3Bvcy5taWRkbGVfeSxcbiAgICAgICAgICAgIGxvd2VyX3g6IGJhc2VfcG9zLnggKyB4X3Bvc1tgJHt0aGlzLm9wdGlvbnMudmlld01vZGV9TG93ZXJgXSxcbiAgICAgICAgICAgIGxvd2VyX3k6IGJhc2VfcG9zLmxvd2VyX3ksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFrZV9iYXJzKCkge1xuICAgICAgICB0aGlzLmJhcnMgPSB0aGlzLnRhc2tzLm1hcCgodGFzazogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXIgPSBuZXcgQmFyKHRoaXMsIHRhc2spO1xuICAgICAgICAgICAgdGhpcy5sYXllcnMuYmFyLmFwcGVuZENoaWxkKGJhci5ncm91cCk7XG4gICAgICAgICAgICByZXR1cm4gYmFyO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1ha2VfYXJyb3dzKCkge1xuICAgICAgICB0aGlzLmFycm93cyA9IFtdO1xuICAgICAgICBmb3IgKGxldCB0YXNrIG9mIHRoaXMudGFza3MpIHtcbiAgICAgICAgICAgIGxldCBhcnJvd3MgPSBbXTtcbiAgICAgICAgICAgIGFycm93cyA9IHRhc2suZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICAgICAgLm1hcCgodGFza19pZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlcGVuZGVuY3kgPSB0aGlzLmdldF90YXNrKHRhc2tfaWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRlcGVuZGVuY3kpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyb3cgPSBuZXcgQXJyb3coXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXJzW2RlcGVuZGVuY3kuX2luZGV4XSwgLy8gZnJvbV90YXNrXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhcnNbdGFzay5faW5kZXhdIC8vIHRvX3Rhc2tcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllcnMuYXJyb3cuYXBwZW5kQ2hpbGQoYXJyb3cuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJvdztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbik7IC8vIGZpbHRlciBmYWxzeSB2YWx1ZXNcbiAgICAgICAgICAgIHRoaXMuYXJyb3dzID0gdGhpcy5hcnJvd3MuY29uY2F0KGFycm93cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1hcF9hcnJvd3Nfb25fYmFycygpIHtcbiAgICAgICAgZm9yIChsZXQgYmFyIG9mIHRoaXMuYmFycykge1xuICAgICAgICAgICAgYmFyLmFycm93cyA9IHRoaXMuYXJyb3dzLmZpbHRlcigoYXJyb3c6IEFycm93KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgYXJyb3cuZnJvbVRhc2sudGFzay5pZCA9PT0gYmFyLnRhc2suaWQgfHxcbiAgICAgICAgICAgICAgICAgICAgYXJyb3cudG9UYXNrLnRhc2suaWQgPT09IGJhci50YXNrLmlkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRfd2lkdGgoKSB7XG4gICAgICAgIGNvbnN0IGN1cl93aWR0aCA9IHRoaXMuJHN2Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgY29uc3QgYWN0dWFsX3dpZHRoID0gdGhpcy4kc3ZnXG4gICAgICAgICAgICAucXVlcnlTZWxlY3RvcihcIi5ncmlkIC5ncmlkLXJvd1wiKVxuICAgICAgICAgICAgLmdldEF0dHJpYnV0ZShcIndpZHRoXCIpO1xuICAgICAgICBpZiAoY3VyX3dpZHRoIDwgYWN0dWFsX3dpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLiRzdmcuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgYWN0dWFsX3dpZHRoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0X3Njcm9sbF9wb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgcGFyZW50X2VsZW1lbnQgPSB0aGlzLiRzdmcucGFyZW50RWxlbWVudDtcbiAgICAgICAgaWYgKCFwYXJlbnRfZWxlbWVudCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGhvdXJzX2JlZm9yZV9maXJzdF90YXNrID0gRGF0ZVV0aWxzLmRpZmYoXG4gICAgICAgICAgICB0aGlzLmdldF9vbGRlc3Rfc3RhcnRpbmdfZGF0ZSgpLFxuICAgICAgICAgICAgdGhpcy5taW5EYXRlLFxuICAgICAgICAgICAgXCJob3VyXCJcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBzY3JvbGxfcG9zID1cbiAgICAgICAgICAgIChob3Vyc19iZWZvcmVfZmlyc3RfdGFzayAvIHRoaXMub3B0aW9ucy5zdGVwKSAqXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLVxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoO1xuXG4gICAgICAgIHBhcmVudF9lbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxfcG9zO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZF9ncmlkX2NsaWNrKCkge1xuICAgICAgICAkLm9uKFxuICAgICAgICAgICAgdGhpcy4kc3ZnLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBvcHVwVHJpZ2dlcixcbiAgICAgICAgICAgIFwiLmdyaWQtcm93LCAuZ3JpZC1oZWFkZXJcIixcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0X2FsbCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZV9wb3B1cCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZF9iYXJfZXZlbnRzKCkge1xuICAgICAgICBsZXQgaXNfZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IHhfb25fc3RhcnQgPSAwO1xuICAgICAgICBsZXQgaXNfcmVzaXppbmdfbGVmdCA9IGZhbHNlO1xuICAgICAgICBsZXQgaXNfcmVzaXppbmdfcmlnaHQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHBhcmVudF9iYXJfaWQ6IGFueSA9IG51bGw7XG4gICAgICAgIGxldCBiYXJzOiBCYXJbXSA9IFtdO1xuICAgICAgICB0aGlzLmJhcl9iZWluZ19kcmFnZ2VkID0gbnVsbDtcblxuICAgICAgICBmdW5jdGlvbiBhY3Rpb25faW5fcHJvZ3Jlc3MoKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNfZHJhZ2dpbmcgfHwgaXNfcmVzaXppbmdfbGVmdCB8fCBpc19yZXNpemluZ19yaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgICQub24odGhpcy4kc3ZnLCBcIm1vdXNlZG93blwiLCBcIi5iYXItd3JhcHBlciwgLmhhbmRsZVwiLCAoZTogYW55LCBlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJhcl93cmFwcGVyID0gJC5jbG9zZXN0KFwiLmJhci13cmFwcGVyXCIsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJsZWZ0XCIpKSB7XG4gICAgICAgICAgICAgICAgaXNfcmVzaXppbmdfbGVmdCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicmlnaHRcIikpIHtcbiAgICAgICAgICAgICAgICBpc19yZXNpemluZ19yaWdodCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYmFyLXdyYXBwZXJcIikgJiYgdGhpcy5vcHRpb25zLmFsbG93TW92ZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpc19kcmFnZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJhcl93cmFwcGVyLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XG5cbiAgICAgICAgICAgIHhfb25fc3RhcnQgPSBlLm9mZnNldFg7XG5cbiAgICAgICAgICAgIHBhcmVudF9iYXJfaWQgPSBiYXJfd3JhcHBlci5nZXRBdHRyaWJ1dGUoXCJkYXRhLWlkXCIpO1xuICAgICAgICAgICAgY29uc3QgaWRzID0gW1xuICAgICAgICAgICAgICAgIHBhcmVudF9iYXJfaWQsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nZXRfYWxsX2RlcGVuZGVudF90YXNrcyhwYXJlbnRfYmFyX2lkKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBiYXJzID0gaWRzLm1hcCgoaWQpID0+IHRoaXMuZ2V0X2JhcihpZCkpO1xuXG4gICAgICAgICAgICB0aGlzLmJhcl9iZWluZ19kcmFnZ2VkID0gcGFyZW50X2Jhcl9pZDtcblxuICAgICAgICAgICAgYmFycy5mb3JFYWNoKChiYXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCAkYmFyID0gYmFyLmVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgJGJhci5veCA9ICRiYXIuZ2V0WCgpO1xuICAgICAgICAgICAgICAgICRiYXIub3kgPSAkYmFyLmdldFkoKTtcbiAgICAgICAgICAgICAgICAkYmFyLm93aWR0aCA9ICRiYXIuZ2V0V2lkdGgoKTtcbiAgICAgICAgICAgICAgICAkYmFyLmZpbmFsZHggPSAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgJC5vbih0aGlzLiRzdmcsIFwibW91c2Vtb3ZlXCIsIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICghYWN0aW9uX2luX3Byb2dyZXNzKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGR4ID0gZS5vZmZzZXRYIC0geF9vbl9zdGFydDtcblxuICAgICAgICAgICAgYmFycy5mb3JFYWNoKChiYXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCAkYmFyID0gYmFyLmVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgJGJhci5maW5hbGR4ID0gdGhpcy5nZXRfc25hcF9wb3NpdGlvbihkeCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlX3BvcHVwKCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzX3Jlc2l6aW5nX2xlZnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudF9iYXJfaWQgPT09IGJhci50YXNrLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYXIudXBkYXRlQmFyUG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6ICRiYXIub3ggKyAkYmFyLmZpbmFsZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICRiYXIub3dpZHRoIC0gJGJhci5maW5hbGR4LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYXIudXBkYXRlQmFyUG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6ICRiYXIub3ggKyAkYmFyLmZpbmFsZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNfcmVzaXppbmdfcmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudF9iYXJfaWQgPT09IGJhci50YXNrLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYXIudXBkYXRlQmFyUG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAkYmFyLm93aWR0aCArICRiYXIuZmluYWxkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc19kcmFnZ2luZykge1xuICAgICAgICAgICAgICAgICAgICBiYXIudXBkYXRlQmFyUG9zaXRpb24oeyB4OiAkYmFyLm94ICsgJGJhci5maW5hbGR4IH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBudWxsKTtcblxuXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChpc19kcmFnZ2luZyB8fCBpc19yZXNpemluZ19sZWZ0IHx8IGlzX3Jlc2l6aW5nX3JpZ2h0IHx8ICF0aGlzLm9wdGlvbnMuYWxsb3dNb3ZlbWVudCkge1xuICAgICAgICAgICAgICAgIGJhcnMuZm9yRWFjaCgoYmFyKSA9PiBiYXIuZ3JvdXAuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlzX2RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBpc19yZXNpemluZ19sZWZ0ID0gZmFsc2U7XG4gICAgICAgICAgICBpc19yZXNpemluZ19yaWdodCA9IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICAkLm9uKHRoaXMuJHN2ZywgXCJtb3VzZXVwXCIsIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmFyX2JlaW5nX2RyYWdnZWQgPSBudWxsO1xuICAgICAgICAgICAgYmFycy5mb3JFYWNoKChiYXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCAkYmFyID0gYmFyLmVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKCEkYmFyLmZpbmFsZHgpIHJldHVybjtcbiAgICAgICAgICAgICAgICBiYXIuZGF0ZUNoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICBiYXIuc2V0QWN0aW9uQ29tcGxldGVkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgbnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRfYWxsX2RlcGVuZGVudF90YXNrcyh0YXNrX2lkOiBhbnkpIHtcbiAgICAgICAgbGV0IG91dDogYW55W10gPSBbXTtcbiAgICAgICAgbGV0IHRvX3Byb2Nlc3MgPSBbdGFza19pZF07XG4gICAgICAgIHdoaWxlICh0b19wcm9jZXNzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZGVwcyA9IHRvX3Byb2Nlc3MucmVkdWNlKChhY2MsIGN1cnIpID0+IHtcbiAgICAgICAgICAgICAgICBhY2MgPSBhY2MuY29uY2F0KHRoaXMuZGVwZW5kZW5jeV9tYXBbY3Vycl0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgICAgIG91dCA9IG91dC5jb25jYXQoZGVwcyk7XG4gICAgICAgICAgICB0b19wcm9jZXNzID0gZGVwcy5maWx0ZXIoKGQ6IGFueSkgPT4gIXRvX3Byb2Nlc3MuaW5jbHVkZXMoZCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG91dC5maWx0ZXIoQm9vbGVhbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRfc25hcF9wb3NpdGlvbihkeDogYW55KSB7XG4gICAgICAgIGxldCBvZHggPSBkeCxcbiAgICAgICAgICAgIHJlbSxcbiAgICAgICAgICAgIHBvc2l0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLnZpZXdfaXMoVmlld01vZGUuSG91cikpIHtcbiAgICAgICAgICAgIHJlbSA9IGR4ICUgKHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDYpO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBvZHggLSByZW0gKyAocmVtIDwgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoIC8gMTIgPyAwIDogdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoIC8gNik7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52aWV3X2lzKFZpZXdNb2RlLldlZWspKSB7XG4gICAgICAgICAgICByZW0gPSBkeCAlICh0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGggLyA3KTtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gb2R4IC0gcmVtICsgKHJlbSA8IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDE0ID8gMCA6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDcpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmlld19pcyhWaWV3TW9kZS5Nb250aCkpIHtcbiAgICAgICAgICAgIHJlbSA9IGR4ICUgKHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDMwKTtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gb2R4IC0gcmVtICsgKHJlbSA8IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDYwID8gMCA6IHRoaXMub3B0aW9ucy5jb2x1bW5XaWR0aCAvIDMwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbSA9IGR4ICUgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBvZHggLSByZW0gKyAocmVtIDwgdGhpcy5vcHRpb25zLmNvbHVtbldpZHRoIC8gMiA/IDAgOiB0aGlzLm9wdGlvbnMuY29sdW1uV2lkdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3NpdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgdW5zZWxlY3RfYWxsKCkge1xuICAgICAgICBbLi4udGhpcy4kc3ZnLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYmFyLXdyYXBwZXJcIildLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmlld19pcyhtb2RlczogVmlld01vZGUgfCBWaWV3TW9kZVtdKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vZGVzLnNvbWUoKG1vZGUpID0+IHRoaXMub3B0aW9ucy52aWV3TW9kZSA9PT0gbW9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnZpZXdNb2RlID09PSBtb2RlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldF90YXNrKGlkOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFza3MuZmluZCgodGFzazogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGFzay5pZCA9PT0gaWQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfYmFyKGlkOiBhbnkpOiBCYXIge1xuICAgICAgICByZXR1cm4gdGhpcy5iYXJzLmZpbmQoKGJhcjogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYmFyLnRhc2suaWQgPT09IGlkO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd19wb3B1cChvcHRpb25zOiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBvcHVwKSB7XG4gICAgICAgICAgICB0aGlzLnBvcHVwID0gbmV3IFBvcHVwKFxuICAgICAgICAgICAgICAgIHRoaXMucG9wdXBfd3JhcHBlcixcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuY3VzdG9tUG9wdXBIdG1sXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9wdXAuc2hvdyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGlkZV9wb3B1cCgpIHtcbiAgICAgICAgdGhpcy5wb3B1cCAmJiB0aGlzLnBvcHVwLmhpZGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJpZ2dlcl9ldmVudChldmVudDogc3RyaW5nLCBhcmdzOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uc1tldmVudF0pIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc1tldmVudF0uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldF9vbGRlc3Rfc3RhcnRpbmdfZGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFza3NcbiAgICAgICAgICAgIC5tYXAoKHRhc2s6IGFueSkgPT4gdGFzay5fc3RhcnQpXG4gICAgICAgICAgICAucmVkdWNlKChwcmV2X2RhdGU6IGFueSwgY3VyX2RhdGU6IGFueSkgPT5cbiAgICAgICAgICAgICAgICBjdXJfZGF0ZSA8PSBwcmV2X2RhdGUgPyBjdXJfZGF0ZSA6IHByZXZfZGF0ZVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyKCkge1xuICAgICAgICB0aGlzLiRzdmcuaW5uZXJIVE1MID0gJyc7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZV9pZCh0YXNrOiBhbnkpIHtcbiAgICByZXR1cm4gdGFzay5uYW1lICsgXCJfXCIgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCAxMik7XG59XG4iXX0=
|