mis-crystal-design-system 18.1.6-signal → 18.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/async-search-dropdown/async-dropdown.component.d.ts +44 -3
- package/datepicker_v2/tz-dp-container/tz-dp-container.component.d.ts +4 -0
- package/daterangepicker_v2/tz-drp-container/tz-drp-container.component.d.ts +14 -5
- package/esm2022/async-search-dropdown/async-dropdown.component.mjs +147 -37
- package/esm2022/checkbox/checkbox.component.mjs +4 -4
- package/esm2022/chip/chip.component.mjs +4 -4
- package/esm2022/datepicker_v2/tz-datepicker.directive.mjs +2 -34
- package/esm2022/datepicker_v2/tz-dp-container/tz-dp-container.component.mjs +87 -32
- package/esm2022/daterangepicker_v2/tz-daterangepicker.directive.mjs +6 -3
- package/esm2022/daterangepicker_v2/tz-drp-container/tz-drp-container.component.mjs +324 -142
- package/esm2022/drawer/drawer-body/drawer-body.component.mjs +4 -4
- package/esm2022/fab/fab.component.mjs +4 -4
- package/esm2022/input/mis-input.component.mjs +3 -11
- package/esm2022/loader/loader.component.mjs +13 -7
- package/esm2022/modal/module-wrapper/module-wrapper.component.mjs +4 -4
- package/esm2022/phone-input/phone-input.component.mjs +4 -4
- package/esm2022/radio-button/radio-button.component.mjs +4 -4
- package/esm2022/ske-loader/ske-loader.component.mjs +4 -4
- package/esm2022/slider/slider.component.mjs +4 -4
- package/esm2022/snackbar/snackbar/snackbar.component.mjs +4 -4
- package/esm2022/specificdatepicker/tz-sdp-container/tz-sdp-container.component.mjs +23 -19
- package/esm2022/table/sort-icons.directive.mjs +24 -5
- package/esm2022/table/sub-table/sub-table.component.mjs +18 -5
- package/esm2022/table/table.component.mjs +236 -101
- package/esm2022/table/table.module.mjs +7 -5
- package/esm2022/timepicker/timepicker.component.mjs +41 -14
- package/esm2022/timerangepicker/timerangepicker.component.mjs +29 -21
- package/esm2022/toast/toast.component.mjs +4 -4
- package/esm2022/tooltip/tooltip-container/tooltip.component.mjs +4 -4
- package/esm2022/virtual-scroll/virtual-scroll.component.mjs +4 -4
- package/fesm2022/mis-crystal-design-system-async-search-dropdown.mjs +146 -36
- package/fesm2022/mis-crystal-design-system-async-search-dropdown.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-checkbox.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-checkbox.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-chip.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-chip.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-datepicker_v2.mjs +87 -64
- package/fesm2022/mis-crystal-design-system-datepicker_v2.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs +328 -143
- package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-drawer.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-drawer.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-fab.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-fab.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-input.mjs +2 -10
- package/fesm2022/mis-crystal-design-system-input.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-loader.mjs +12 -6
- package/fesm2022/mis-crystal-design-system-loader.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-modal.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-modal.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-phone-input.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-phone-input.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-radio-button.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-radio-button.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-ske-loader.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-ske-loader.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-slider.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-slider.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-snackbar.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-snackbar.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-specificdatepicker.mjs +22 -18
- package/fesm2022/mis-crystal-design-system-specificdatepicker.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-table.mjs +279 -111
- package/fesm2022/mis-crystal-design-system-table.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-timepicker.mjs +40 -13
- package/fesm2022/mis-crystal-design-system-timepicker.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-timerangepicker.mjs +28 -20
- package/fesm2022/mis-crystal-design-system-timerangepicker.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-toast.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-toast.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-tooltip.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-tooltip.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-virtual-scroll.mjs +3 -3
- package/fesm2022/mis-crystal-design-system-virtual-scroll.mjs.map +1 -1
- package/input/mis-input.component.scss +2 -3
- package/loader/loader.component.d.ts +7 -1
- package/package.json +7 -7
- package/specificdatepicker/tz-sdp-container/tz-sdp-container.component.d.ts +2 -2
- package/table/table.component.d.ts +14 -1
- package/table/table.module.d.ts +2 -1
- package/timepicker/timepicker.component.d.ts +3 -1
- package/timerangepicker/timerangepicker.component.d.ts +3 -1
|
@@ -44,7 +44,7 @@ function TzDrpContainerComponent_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
|
44
44
|
let tmp_1_0;
|
|
45
45
|
const ctx_r3 = i0.ɵɵnextContext();
|
|
46
46
|
i0.ɵɵadvance();
|
|
47
|
-
i0.ɵɵproperty("ngForOf", (tmp_1_0 = ctx_r3.data == null ? null :
|
|
47
|
+
i0.ɵɵproperty("ngForOf", (tmp_1_0 = (tmp_1_0 = ctx_r3.data()) == null ? null : tmp_1_0.dpConfig == null ? null : tmp_1_0.dpConfig.ranges) !== null && tmp_1_0 !== undefined ? tmp_1_0 : i0.ɵɵpureFunction0(2, _c1));
|
|
48
48
|
i0.ɵɵadvance(2);
|
|
49
49
|
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c2, ctx_r3.selectedItemLabel() === "Custom Range"));
|
|
50
50
|
} }
|
|
@@ -194,9 +194,62 @@ dayjs.extend(customParseFormat);
|
|
|
194
194
|
dayjs.extend(isSameOrAfter);
|
|
195
195
|
dayjs.extend(isSameOrBefore);
|
|
196
196
|
export class TzDrpContainerComponent {
|
|
197
|
-
|
|
197
|
+
/**
|
|
198
|
+
* Parse date string using configured format with fallback
|
|
199
|
+
*/
|
|
200
|
+
parseDateWithMultipleFormats(dateString) {
|
|
201
|
+
if (!dateString || dateString === 'Invalid Date' || dateString === 'undefined' || dateString === 'null') {
|
|
202
|
+
return dayjs('invalid');
|
|
203
|
+
}
|
|
204
|
+
// First try the configured format
|
|
205
|
+
const configuredFormat = this.data().dpConfig?.format;
|
|
206
|
+
if (configuredFormat) {
|
|
207
|
+
try {
|
|
208
|
+
const parsed = dayjs(dateString, configuredFormat);
|
|
209
|
+
if (parsed.isValid()) {
|
|
210
|
+
return parsed;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
// Continue to fallback formats
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// Fallback to common formats if configured format fails
|
|
218
|
+
const fallbackFormats = [
|
|
219
|
+
'DD/MMM/YYYY',
|
|
220
|
+
'DD/MM/YYYY',
|
|
221
|
+
'DD-MMM-YYYY',
|
|
222
|
+
'DD-MM-YYYY',
|
|
223
|
+
'YYYY-MM-DD'
|
|
224
|
+
];
|
|
225
|
+
for (const format of fallbackFormats) {
|
|
226
|
+
try {
|
|
227
|
+
const parsed = dayjs(dateString, format);
|
|
228
|
+
if (parsed.isValid()) {
|
|
229
|
+
return parsed;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
// Continue to next format
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// If all formats fail, try parsing without format (let dayjs guess)
|
|
237
|
+
try {
|
|
238
|
+
const parsed = dayjs(dateString);
|
|
239
|
+
if (parsed.isValid()) {
|
|
240
|
+
return parsed;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
console.warn('Failed to parse date with any format:', dateString, error);
|
|
245
|
+
}
|
|
246
|
+
return dayjs('invalid');
|
|
247
|
+
}
|
|
248
|
+
constructor(injectedData, toast) {
|
|
249
|
+
this.injectedData = injectedData;
|
|
198
250
|
this.toast = toast;
|
|
199
251
|
this.CUSTOM_RANGE_LABEL = "Custom Range";
|
|
252
|
+
this.data = signal(this.injectedData);
|
|
200
253
|
this.dayjsInstance = (...args) => {
|
|
201
254
|
return dayjs(...args);
|
|
202
255
|
};
|
|
@@ -231,17 +284,23 @@ export class TzDrpContainerComponent {
|
|
|
231
284
|
this.currentMonthNumber = computed(() => this.currentMonthNumberSignal());
|
|
232
285
|
this.currentMonth = computed(() => this.currentMonthSignal());
|
|
233
286
|
this.currentYearNumber = computed(() => this.currentYearNumberSignal());
|
|
234
|
-
this.currentMonthDates = computed(() => this.currentMonthDatesSignal());
|
|
235
287
|
this.nextMonthNumber = computed(() => this.nextMonthNumberSignal());
|
|
236
288
|
this.nextMonth = computed(() => this.nextMonthSignal());
|
|
237
289
|
this.nextYearNumber = computed(() => this.nextYearNumberSignal());
|
|
238
|
-
this.nextMonthDates = computed(() => this.nextMonthDatesSignal());
|
|
239
290
|
this.isPreviousMonthDisabled = computed(() => this.isPreviousMonthDisabledSignal());
|
|
240
291
|
this.isNextMonthDisabled = computed(() => this.isNextMonthDisabledSignal());
|
|
241
292
|
this.selectionStarted = computed(() => this.selectionStartedSignal());
|
|
242
293
|
this.localSelectedDates = computed(() => this.localSelectedDatesSignal());
|
|
243
294
|
this.isDatesValid = computed(() => this.isDatesValidSignal());
|
|
244
295
|
this.selectedItemLabel = computed(() => this.selectedItemLabelSignal());
|
|
296
|
+
this.currentMonthDates = computed(() => {
|
|
297
|
+
// Dependencies: currentMonthNumberSignal, currentYearNumberSignal, localSelectedDatesSignal
|
|
298
|
+
return this.generateDates(this.currentMonthNumberSignal(), this.currentYearNumberSignal());
|
|
299
|
+
});
|
|
300
|
+
this.nextMonthDates = computed(() => {
|
|
301
|
+
// Dependencies: nextMonthNumberSignal, nextYearNumberSignal, localSelectedDatesSignal
|
|
302
|
+
return this.generateDates(this.nextMonthNumberSignal(), this.nextYearNumberSignal());
|
|
303
|
+
});
|
|
245
304
|
// Time functionality computed properties
|
|
246
305
|
this.startHour = computed(() => this.startHourSignal());
|
|
247
306
|
this.startMinute = computed(() => this.startMinuteSignal());
|
|
@@ -251,21 +310,21 @@ export class TzDrpContainerComponent {
|
|
|
251
310
|
this.endAmPm = computed(() => this.endAmPmSignal());
|
|
252
311
|
this.startHour24 = computed(() => this.startHour24Signal());
|
|
253
312
|
this.endHour24 = computed(() => this.endHour24Signal());
|
|
254
|
-
this.data =
|
|
255
|
-
this.localSelectedDatesSignal.set(this.data.dates);
|
|
313
|
+
this.data = signal(this.injectedData);
|
|
314
|
+
this.localSelectedDatesSignal.set(this.data().dates);
|
|
256
315
|
this.isDatesValidSignal.set(false);
|
|
257
|
-
if (this.data.dates.startDate && this.data.dates.endDate) {
|
|
316
|
+
if (this.data().dates.startDate && this.data().dates.endDate) {
|
|
258
317
|
this.isDatesValidSignal.set(true);
|
|
259
318
|
}
|
|
260
319
|
// Initialize selectedItemLabel from data.selectedRangeLabel if available
|
|
261
|
-
if (this.data.selectedRangeLabel) {
|
|
262
|
-
this.selectedItemLabelSignal.set(this.data.selectedRangeLabel);
|
|
320
|
+
if (this.data().selectedRangeLabel) {
|
|
321
|
+
this.selectedItemLabelSignal.set(this.data().selectedRangeLabel);
|
|
263
322
|
}
|
|
264
323
|
// Initialize dayjsInstance with timezone handling
|
|
265
|
-
if (this.data?.dpConfig?.timezone) {
|
|
324
|
+
if (this.data()?.dpConfig?.timezone) {
|
|
266
325
|
this.dayjsInstance = (...args) => {
|
|
267
326
|
try {
|
|
268
|
-
return dayjs.tz(args[0], args[1] || 'DD/MM/YYYY', this.data.dpConfig.timezone);
|
|
327
|
+
return dayjs.tz(args[0], args[1] || 'DD/MM/YYYY', this.data().dpConfig.timezone);
|
|
269
328
|
}
|
|
270
329
|
catch (error) {
|
|
271
330
|
console.warn('Error parsing date with timezone:', error, 'args:', args);
|
|
@@ -284,18 +343,19 @@ export class TzDrpContainerComponent {
|
|
|
284
343
|
label: `${day[0]}${day.slice(1).toLowerCase()}`,
|
|
285
344
|
isCurrentDay: this.dayjsInstance().day() === index
|
|
286
345
|
})));
|
|
287
|
-
if (!this.data?.dpConfig?.format) {
|
|
288
|
-
this.data.dpConfig = {
|
|
289
|
-
...this.data.dpConfig,
|
|
346
|
+
if (!this.data()?.dpConfig?.format) {
|
|
347
|
+
this.data().dpConfig = {
|
|
348
|
+
...this.data().dpConfig,
|
|
290
349
|
format: DATE_FORMAT
|
|
291
350
|
};
|
|
292
351
|
}
|
|
352
|
+
// Update calendar from initial selected dates
|
|
353
|
+
this.updateCalendarFromSelectedDates();
|
|
293
354
|
}
|
|
294
355
|
ngOnInit() {
|
|
295
|
-
this.currentDateInstance();
|
|
296
356
|
this.calculateMinMaxDays();
|
|
297
357
|
this.initializeTimeValues();
|
|
298
|
-
if (this.data?.showPrevMonth && !this.isPreviousMonthDisabled) {
|
|
358
|
+
if (this.data()?.showPrevMonth && !this.isPreviousMonthDisabled) {
|
|
299
359
|
this.navigateMonth('PREVIOUS');
|
|
300
360
|
}
|
|
301
361
|
}
|
|
@@ -305,53 +365,13 @@ export class TzDrpContainerComponent {
|
|
|
305
365
|
closeOnEsc() {
|
|
306
366
|
this.cancelDatePicker();
|
|
307
367
|
}
|
|
308
|
-
currentDateInstance() {
|
|
309
|
-
if (!this.localSelectedDatesSignal()?.startDate) {
|
|
310
|
-
this.currentMonthDatesSignal.set(this.generateDates(this.currentMonthNumberSignal(), this.currentYearNumberSignal()));
|
|
311
|
-
this.nextMonthDatesSignal.set(this.generateDates(this.nextMonthNumberSignal(), this.nextYearNumberSignal()));
|
|
312
|
-
return;
|
|
313
|
-
}
|
|
314
|
-
// Extract date part for parsing (handle both date-only and datetime formats)
|
|
315
|
-
const startDateString = this.localSelectedDatesSignal()?.startDate?.split(' ')[0] || this.localSelectedDatesSignal()?.startDate;
|
|
316
|
-
const endDateString = this.localSelectedDatesSignal()?.endDate?.split(' ')[0] || this.localSelectedDatesSignal()?.endDate;
|
|
317
|
-
// Validate date strings before parsing
|
|
318
|
-
if (!startDateString || startDateString === 'Invalid Date' || startDateString === 'undefined' || startDateString === 'null') {
|
|
319
|
-
this.currentMonthDatesSignal.set(this.generateDates(this.currentMonthNumberSignal(), this.currentYearNumberSignal()));
|
|
320
|
-
this.nextMonthDatesSignal.set(this.generateDates(this.nextMonthNumberSignal(), this.nextYearNumberSignal()));
|
|
321
|
-
return;
|
|
322
|
-
}
|
|
323
|
-
const selectedStartDate = this.dayjsInstance(startDateString, 'DD/MM/YYYY');
|
|
324
|
-
const selectedEndDate = endDateString ? this.dayjsInstance(endDateString, 'DD/MM/YYYY') : null;
|
|
325
|
-
if (selectedStartDate.isValid()) {
|
|
326
|
-
this.currentYearNumberSignal.set(selectedStartDate.year());
|
|
327
|
-
this.nextYearNumberSignal.set(selectedStartDate.add(1, "month").year());
|
|
328
|
-
this.currentMonthNumberSignal.set(selectedStartDate.get("month"));
|
|
329
|
-
this.nextMonthNumberSignal.set(selectedStartDate.add(1, "month").month());
|
|
330
|
-
if (this.currentMonthNumberSignal() === -1) {
|
|
331
|
-
this.currentMonthNumberSignal.set(11);
|
|
332
|
-
}
|
|
333
|
-
if (this.nextMonthNumberSignal() === -1) {
|
|
334
|
-
this.nextMonthNumberSignal.set(11);
|
|
335
|
-
}
|
|
336
|
-
this.currentMonthSignal.set(getMonth(this.currentMonthNumberSignal()));
|
|
337
|
-
this.nextMonthSignal.set(getMonth(this.nextMonthNumberSignal()));
|
|
338
|
-
}
|
|
339
|
-
// If we have an end date, use it to determine the next month
|
|
340
|
-
if (selectedEndDate && selectedEndDate.isValid() && selectedEndDate.isAfter(selectedStartDate, 'month')) {
|
|
341
|
-
this.nextMonthNumberSignal.set(selectedEndDate.month());
|
|
342
|
-
this.nextYearNumberSignal.set(selectedEndDate.year());
|
|
343
|
-
this.nextMonthSignal.set(getMonth(this.nextMonthNumberSignal()));
|
|
344
|
-
}
|
|
345
|
-
this.currentMonthDatesSignal.set(this.generateDates(this.currentMonthNumberSignal(), this.currentYearNumberSignal()));
|
|
346
|
-
this.nextMonthDatesSignal.set(this.generateDates(this.nextMonthNumberSignal(), this.nextYearNumberSignal()));
|
|
347
|
-
}
|
|
348
368
|
calculateMinMaxDays() {
|
|
349
369
|
const currentInstance = this.dayjsInstance().year(this.currentYearNumberSignal()).month(this.currentMonthNumberSignal());
|
|
350
|
-
const minDate = !!this.data.dpConfig.minDate ? this.dayjsInstance(this.data.dpConfig.minDate, this.data.dpConfig.format) : dayjs('invalid');
|
|
370
|
+
const minDate = !!this.data().dpConfig.minDate ? this.dayjsInstance(this.data().dpConfig.minDate, this.data().dpConfig.format) : dayjs('invalid');
|
|
351
371
|
if (minDate.isValid()) {
|
|
352
372
|
this.isPreviousMonthDisabledSignal.set(minDate.isSameOrAfter(currentInstance, "month"));
|
|
353
373
|
}
|
|
354
|
-
const maxDate = !!this.data.dpConfig.maxDate ? this.dayjsInstance(this.data.dpConfig.maxDate, this.data.dpConfig.format) : dayjs('invalid');
|
|
374
|
+
const maxDate = !!this.data().dpConfig.maxDate ? this.dayjsInstance(this.data().dpConfig.maxDate, this.data().dpConfig.format) : dayjs('invalid');
|
|
355
375
|
if (maxDate.isValid()) {
|
|
356
376
|
this.isNextMonthDisabledSignal.set(maxDate.isSameOrBefore(currentInstance, "month"));
|
|
357
377
|
}
|
|
@@ -366,8 +386,8 @@ export class TzDrpContainerComponent {
|
|
|
366
386
|
}
|
|
367
387
|
this.currentMonthNumberSignal.set(thisMonth.month());
|
|
368
388
|
this.nextMonthNumberSignal.set(thisMonth.clone().add(1, "month").month());
|
|
369
|
-
this.currentMonthSignal.set(getMonth(this.
|
|
370
|
-
this.nextMonthSignal.set(getMonth(this.
|
|
389
|
+
this.currentMonthSignal.set(getMonth(this.currentMonthNumberSignal()));
|
|
390
|
+
this.nextMonthSignal.set(getMonth(this.nextMonthNumberSignal()));
|
|
371
391
|
if (this.nextMonthNumberSignal() === 0 && direction === "PREVIOUS") {
|
|
372
392
|
this.currentYearNumberSignal.set(this.currentYearNumberSignal() - 1);
|
|
373
393
|
}
|
|
@@ -387,35 +407,65 @@ export class TzDrpContainerComponent {
|
|
|
387
407
|
this.nextMonthDatesSignal.set(this.generateDates(this.nextMonthNumber(), this.nextYearNumber()));
|
|
388
408
|
this.calculateMinMaxDays();
|
|
389
409
|
}
|
|
410
|
+
/**
|
|
411
|
+
* Update calendar month/year based on selected dates
|
|
412
|
+
* This method is called whenever localSelectedDatesSignal changes to keep calendar in sync
|
|
413
|
+
*/
|
|
414
|
+
updateCalendarFromSelectedDates() {
|
|
415
|
+
const localSelectedDates = this.localSelectedDatesSignal();
|
|
416
|
+
let selectedStartDate;
|
|
417
|
+
if (localSelectedDates?.startDate) {
|
|
418
|
+
selectedStartDate = this.parseDateWithMultipleFormats(localSelectedDates.startDate);
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
selectedStartDate = dayjs('invalid');
|
|
422
|
+
}
|
|
423
|
+
if (selectedStartDate.isValid()) {
|
|
424
|
+
this.currentYearNumberSignal.set(selectedStartDate.year());
|
|
425
|
+
this.nextYearNumberSignal.set(selectedStartDate.add(1, "month").year());
|
|
426
|
+
this.currentMonthNumberSignal.set(selectedStartDate.get("month"));
|
|
427
|
+
this.nextMonthNumberSignal.set(selectedStartDate.add(1, "month").month());
|
|
428
|
+
const selectedEndDate = localSelectedDates?.endDate ? this.parseDateWithMultipleFormats(localSelectedDates.endDate) : null;
|
|
429
|
+
if (selectedEndDate && selectedEndDate.isValid() && selectedEndDate.isAfter(selectedStartDate, 'month')) {
|
|
430
|
+
this.nextMonthNumberSignal.set(selectedEndDate.month());
|
|
431
|
+
this.nextYearNumberSignal.set(selectedEndDate.year());
|
|
432
|
+
}
|
|
433
|
+
// Update month labels
|
|
434
|
+
this.currentMonthSignal.set(getMonth(this.currentMonthNumberSignal()));
|
|
435
|
+
this.nextMonthSignal.set(getMonth(this.nextMonthNumberSignal()));
|
|
436
|
+
// Update calendar dates to reflect the selected dates
|
|
437
|
+
this.currentMonthDatesSignal.set(this.generateDates(this.currentMonthNumberSignal(), this.currentYearNumberSignal()));
|
|
438
|
+
this.nextMonthDatesSignal.set(this.generateDates(this.nextMonthNumberSignal(), this.nextYearNumberSignal()));
|
|
439
|
+
}
|
|
440
|
+
}
|
|
390
441
|
generateDates(month, currentYearNumber) {
|
|
391
442
|
let dates = [];
|
|
392
443
|
const daysInMonth = dayjs().year(currentYearNumber).month(month).daysInMonth();
|
|
393
444
|
for (let currentDate = 1; currentDate <= daysInMonth; currentDate++) {
|
|
394
445
|
const date = dayjs().year(currentYearNumber).month(month).date(currentDate);
|
|
395
|
-
const dateString = date.format(this.data.dpConfig.format);
|
|
396
|
-
let isDisabledDay = this.data.datesDisabled.some(d => d === dateString);
|
|
446
|
+
const dateString = date.format(this.data().dpConfig.format);
|
|
447
|
+
let isDisabledDay = this.data().datesDisabled.some(d => d === dateString);
|
|
397
448
|
// Parse min/max dates safely - try date-only format first, then full format
|
|
398
449
|
let minDate = null;
|
|
399
450
|
let maxDate = null;
|
|
400
|
-
if (this.data.dpConfig.minDate) {
|
|
451
|
+
if (this.data().dpConfig.minDate) {
|
|
401
452
|
try {
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
minDate = dayjs(minDateStr, 'DD/MM/YYYY');
|
|
453
|
+
const minDateStr = this.data().dpConfig.minDate.split(' ')[0];
|
|
454
|
+
minDate = this.parseDateWithMultipleFormats(minDateStr);
|
|
405
455
|
if (!minDate.isValid()) {
|
|
406
|
-
minDate = dayjs(this.data.dpConfig.minDate, this.data.dpConfig.format);
|
|
456
|
+
minDate = dayjs(this.data().dpConfig.minDate, this.data().dpConfig.format);
|
|
407
457
|
}
|
|
408
458
|
}
|
|
409
459
|
catch (error) {
|
|
410
460
|
console.warn('Error parsing min date:', error);
|
|
411
461
|
}
|
|
412
462
|
}
|
|
413
|
-
if (this.data.dpConfig.maxDate) {
|
|
463
|
+
if (this.data().dpConfig.maxDate) {
|
|
414
464
|
try {
|
|
415
|
-
const maxDateStr = this.data.dpConfig.maxDate.split(' ')[0];
|
|
416
|
-
maxDate =
|
|
465
|
+
const maxDateStr = this.data().dpConfig.maxDate.split(' ')[0];
|
|
466
|
+
maxDate = this.parseDateWithMultipleFormats(maxDateStr);
|
|
417
467
|
if (!maxDate.isValid()) {
|
|
418
|
-
maxDate = dayjs(this.data.dpConfig.maxDate, this.data.dpConfig.format);
|
|
468
|
+
maxDate = dayjs(this.data().dpConfig.maxDate, this.data().dpConfig.format);
|
|
419
469
|
}
|
|
420
470
|
}
|
|
421
471
|
catch (error) {
|
|
@@ -428,32 +478,63 @@ export class TzDrpContainerComponent {
|
|
|
428
478
|
if (!isDisabledDay && maxDate && maxDate.isValid()) {
|
|
429
479
|
isDisabledDay = maxDate.isBefore(date, "day");
|
|
430
480
|
}
|
|
431
|
-
if (this.data?.dpConfig?.maxAllowedRange > 0 &&
|
|
481
|
+
if (this.data()?.dpConfig?.maxAllowedRange > 0 &&
|
|
432
482
|
!isDisabledDay &&
|
|
433
483
|
(this.localSelectedDatesSignal()?.startDate ?? false) && (!(this.localSelectedDatesSignal().endDate ?? false))) {
|
|
434
|
-
const startDate =
|
|
435
|
-
const maxEndDate = startDate.clone().add(this.data.dpConfig.maxAllowedRange - 1, 'days');
|
|
484
|
+
const startDate = this.parseDateWithMultipleFormats(this.localSelectedDatesSignal()?.startDate).startOf('day');
|
|
485
|
+
const maxEndDate = startDate.clone().add(this.data().dpConfig.maxAllowedRange - 1, 'days');
|
|
436
486
|
isDisabledDay = date.isAfter(maxEndDate, 'day');
|
|
437
487
|
}
|
|
438
|
-
const isCurrentDay = this.dayjsInstance().year(currentYearNumber).month(month).date(currentDate).format(this.data.dpConfig.format) ===
|
|
439
|
-
this.dayjsInstance().format(this.data.dpConfig.format);
|
|
488
|
+
const isCurrentDay = this.dayjsInstance().year(currentYearNumber).month(month).date(currentDate).format(this.data().dpConfig.format) ===
|
|
489
|
+
this.dayjsInstance().format(this.data().dpConfig.format);
|
|
440
490
|
// Extract date part for comparison (handle both date-only and datetime formats)
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
//
|
|
444
|
-
|
|
491
|
+
let startDateString = this.localSelectedDatesSignal()?.startDate;
|
|
492
|
+
let endDateString = this.localSelectedDatesSignal()?.endDate;
|
|
493
|
+
// Only extract date part if the format contains time components
|
|
494
|
+
if (this.data().dpConfig.format.includes('HH') || this.data().dpConfig.format.includes('mm') || this.data().dpConfig.format.includes('A')) {
|
|
495
|
+
// For datetime formats, we need to extract just the date part
|
|
496
|
+
// Try to parse the full string and then format it as date-only for comparison
|
|
497
|
+
if (startDateString) {
|
|
498
|
+
const parsedStart = this.parseDateWithMultipleFormats(startDateString);
|
|
499
|
+
if (parsedStart.isValid()) {
|
|
500
|
+
// Extract date part by finding the time boundary - handle spaces in date part
|
|
501
|
+
const timeStartMatch = this.data().dpConfig.format.match(/(\s+)(HH|mm|ss|A|a)/);
|
|
502
|
+
if (timeStartMatch) {
|
|
503
|
+
const timeStartIndex = this.data().dpConfig.format.indexOf(timeStartMatch[0]);
|
|
504
|
+
const dateOnlyFormat = this.data().dpConfig.format.substring(0, timeStartIndex);
|
|
505
|
+
startDateString = parsedStart.format(dateOnlyFormat);
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
if (endDateString) {
|
|
510
|
+
const parsedEnd = this.parseDateWithMultipleFormats(endDateString);
|
|
511
|
+
if (parsedEnd.isValid()) {
|
|
512
|
+
// Extract date part by finding the time boundary - handle spaces in date part
|
|
513
|
+
const timeStartMatch = this.data().dpConfig.format.match(/(\s+)(HH|mm|ss|A|a)/);
|
|
514
|
+
if (timeStartMatch) {
|
|
515
|
+
const timeStartIndex = this.data().dpConfig.format.indexOf(timeStartMatch[0]);
|
|
516
|
+
const dateOnlyFormat = this.data().dpConfig.format.substring(0, timeStartIndex);
|
|
517
|
+
endDateString = parsedEnd.format(dateOnlyFormat);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
// Parse the selected dates to get proper dayjs instances for comparison
|
|
523
|
+
const startDateParsed = startDateString ? this.parseDateWithMultipleFormats(startDateString) : null;
|
|
524
|
+
const endDateParsed = endDateString ? this.parseDateWithMultipleFormats(endDateString) : null;
|
|
445
525
|
const isSelectedStartDay = !isDisabledDay &&
|
|
446
|
-
|
|
447
|
-
|
|
526
|
+
startDateParsed &&
|
|
527
|
+
startDateParsed.isValid() &&
|
|
528
|
+
date.isSame(startDateParsed, 'day');
|
|
448
529
|
const isSelectedEndDay = !isDisabledDay &&
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
const
|
|
454
|
-
const
|
|
455
|
-
const
|
|
456
|
-
|
|
530
|
+
endDateParsed &&
|
|
531
|
+
endDateParsed.isValid() &&
|
|
532
|
+
date.isSame(endDateParsed, 'day');
|
|
533
|
+
// For range calculation, use the already parsed dates
|
|
534
|
+
const isAfterSelectedStartDate = startDateParsed ? this.dayjsInstance(date).isAfter(startDateParsed, "day") : false;
|
|
535
|
+
const isBeforeSelectedEndDate = endDateParsed ? this.dayjsInstance(date).isBefore(endDateParsed, "day") : false;
|
|
536
|
+
const inRangeDay = startDateParsed && endDateParsed &&
|
|
537
|
+
startDateParsed.isValid() && endDateParsed.isValid() &&
|
|
457
538
|
isAfterSelectedStartDate &&
|
|
458
539
|
isBeforeSelectedEndDate;
|
|
459
540
|
dates.push({
|
|
@@ -463,7 +544,7 @@ export class TzDrpContainerComponent {
|
|
|
463
544
|
isSelectedStartDay,
|
|
464
545
|
isSelectedEndDay,
|
|
465
546
|
inRangeDay,
|
|
466
|
-
toastMessage: this.data.messages.find(q => date.format(this.data.dpConfig.format) === q.date)?.message || "",
|
|
547
|
+
toastMessage: this.data().messages.find(q => date.format(this.data().dpConfig.format) === q.date)?.message || "",
|
|
467
548
|
isDisabledDay
|
|
468
549
|
});
|
|
469
550
|
}
|
|
@@ -473,64 +554,134 @@ export class TzDrpContainerComponent {
|
|
|
473
554
|
return dates;
|
|
474
555
|
}
|
|
475
556
|
selectDay(from, day) {
|
|
476
|
-
if (day.date <= 0)
|
|
557
|
+
if (day.date <= 0)
|
|
477
558
|
return;
|
|
478
|
-
}
|
|
479
559
|
if (!day.isDisabledDay) {
|
|
480
560
|
this.selectedItemLabelSignal.set(this.CUSTOM_RANGE_LABEL);
|
|
481
|
-
if (this.
|
|
561
|
+
if (this.selectionStartedSignal()) {
|
|
482
562
|
const dayjsDay = dayjs()
|
|
483
563
|
.year(from === "LEFT" ? this.currentYearNumberSignal() : this.nextYearNumberSignal())
|
|
484
564
|
.month(from === "LEFT" ? this.currentMonthNumberSignal() : this.nextMonthNumberSignal())
|
|
485
565
|
.date(day.date);
|
|
486
566
|
// Extract date part from existing start date for comparison
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
567
|
+
let startDateString = this.localSelectedDatesSignal().startDate;
|
|
568
|
+
// Only extract date part if the format contains time components
|
|
569
|
+
if (this.data().dpConfig.format.includes('HH') || this.data().dpConfig.format.includes('mm') || this.data().dpConfig.format.includes('A')) {
|
|
570
|
+
// For datetime formats, we need to extract just the date part
|
|
571
|
+
// Try to parse the full string and then format it as date-only for comparison
|
|
572
|
+
if (startDateString) {
|
|
573
|
+
const parsedStart = this.parseDateWithMultipleFormats(startDateString);
|
|
574
|
+
if (parsedStart.isValid()) {
|
|
575
|
+
// Extract date part by finding the time boundary - handle spaces in date part
|
|
576
|
+
const timeStartMatch = this.data().dpConfig.format.match(/(\s+)(HH|mm|ss|A|a)/);
|
|
577
|
+
if (timeStartMatch) {
|
|
578
|
+
const timeStartIndex = this.data().dpConfig.format.indexOf(timeStartMatch[0]);
|
|
579
|
+
const dateOnlyFormat = this.data().dpConfig.format.substring(0, timeStartIndex);
|
|
580
|
+
startDateString = parsedStart.format(dateOnlyFormat);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
}
|
|
501
584
|
}
|
|
585
|
+
const startDate = startDateString ? this.parseDateWithMultipleFormats(startDateString) : null;
|
|
502
586
|
// If the selected date is before the start date, make it the new start date
|
|
503
587
|
if (startDate && dayjsDay.isBefore(startDate, "day")) {
|
|
588
|
+
let formattedDate = dayjsDay.format(this.data().dpConfig.format);
|
|
589
|
+
// If time is enabled, append current time to the date
|
|
590
|
+
if (this.data().dpConfig.enableTime === true) {
|
|
591
|
+
const now = dayjs();
|
|
592
|
+
// Extract date part from the configured format - handle spaces in date part
|
|
593
|
+
// Look for the pattern where time starts (HH, mm, ss, A, a)
|
|
594
|
+
const timeStartMatch = this.data().dpConfig.format.match(/(\s+)(HH|mm|ss|A|a)/);
|
|
595
|
+
if (timeStartMatch) {
|
|
596
|
+
const timeStartIndex = this.data().dpConfig.format.indexOf(timeStartMatch[0]);
|
|
597
|
+
const dateOnlyFormat = this.data().dpConfig.format.substring(0, timeStartIndex);
|
|
598
|
+
const timeOnlyFormat = this.data().dpConfig.format.substring(timeStartIndex + timeStartMatch[1].length);
|
|
599
|
+
const dateString = dayjsDay.format(dateOnlyFormat);
|
|
600
|
+
const timeString = now.format(timeOnlyFormat);
|
|
601
|
+
formattedDate = dateString + timeStartMatch[1] + timeString;
|
|
602
|
+
}
|
|
603
|
+
else {
|
|
604
|
+
// Fallback if no time pattern found
|
|
605
|
+
formattedDate = dayjsDay.format(this.data().dpConfig.format);
|
|
606
|
+
}
|
|
607
|
+
}
|
|
504
608
|
this.localSelectedDatesSignal.set({
|
|
505
|
-
startDate:
|
|
609
|
+
startDate: formattedDate,
|
|
506
610
|
endDate: null,
|
|
507
611
|
selectedRangeLabel: this.CUSTOM_RANGE_LABEL
|
|
508
612
|
});
|
|
509
|
-
this.
|
|
510
|
-
this.nextMonthDatesSignal.set(this.generateDates(this.nextMonthNumber(), this.nextYearNumber()));
|
|
613
|
+
this.updateCalendarFromSelectedDates();
|
|
511
614
|
return;
|
|
512
615
|
}
|
|
513
616
|
this.selectionStartedSignal.set(false);
|
|
617
|
+
let formattedEndDate = dayjsDay.format(this.data().dpConfig.format);
|
|
618
|
+
// If time is enabled, append current time to the date
|
|
619
|
+
if (this.data().dpConfig.enableTime === true) {
|
|
620
|
+
const now = dayjs();
|
|
621
|
+
// Extract date part from the configured format - handle spaces in date part
|
|
622
|
+
// Look for the pattern where time starts (HH, mm, ss, A, a)
|
|
623
|
+
const timeStartMatch = this.data().dpConfig.format.match(/(\s+)(HH|mm|ss|A|a)/);
|
|
624
|
+
if (timeStartMatch) {
|
|
625
|
+
const timeStartIndex = this.data().dpConfig.format.indexOf(timeStartMatch[0]);
|
|
626
|
+
const dateOnlyFormat = this.data().dpConfig.format.substring(0, timeStartIndex);
|
|
627
|
+
const timeOnlyFormat = this.data().dpConfig.format.substring(timeStartIndex + timeStartMatch[1].length);
|
|
628
|
+
const dateString = dayjsDay.format(dateOnlyFormat);
|
|
629
|
+
const timeString = now.format(timeOnlyFormat);
|
|
630
|
+
formattedEndDate = dateString + timeStartMatch[1] + timeString;
|
|
631
|
+
}
|
|
632
|
+
else {
|
|
633
|
+
// Fallback if no time pattern found
|
|
634
|
+
formattedEndDate = dayjsDay.format(this.data().dpConfig.format);
|
|
635
|
+
}
|
|
636
|
+
}
|
|
514
637
|
this.localSelectedDatesSignal.set({
|
|
515
638
|
...this.localSelectedDatesSignal(),
|
|
516
|
-
endDate:
|
|
639
|
+
endDate: formattedEndDate,
|
|
517
640
|
selectedRangeLabel: this.CUSTOM_RANGE_LABEL
|
|
518
641
|
});
|
|
642
|
+
this.updateCalendarFromSelectedDates();
|
|
519
643
|
}
|
|
520
644
|
else {
|
|
521
645
|
this.selectionStartedSignal.set(true);
|
|
646
|
+
let formattedStartDate = dayjs()
|
|
647
|
+
.year(from === "LEFT" ? this.currentYearNumberSignal() : this.nextYearNumberSignal())
|
|
648
|
+
.month(from === "LEFT" ? this.currentMonthNumberSignal() : this.nextMonthNumberSignal())
|
|
649
|
+
.date(day.date)
|
|
650
|
+
.format(this.data().dpConfig.format);
|
|
651
|
+
// If time is enabled, append current time to the date
|
|
652
|
+
if (this.data().dpConfig.enableTime === true) {
|
|
653
|
+
const now = dayjs();
|
|
654
|
+
// Extract date part from the configured format - handle spaces in date part
|
|
655
|
+
// Look for the pattern where time starts (HH, mm, ss, A, a)
|
|
656
|
+
const timeStartMatch = this.data().dpConfig.format.match(/(\s+)(HH|mm|ss|A|a)/);
|
|
657
|
+
if (timeStartMatch) {
|
|
658
|
+
const timeStartIndex = this.data().dpConfig.format.indexOf(timeStartMatch[0]);
|
|
659
|
+
const dateOnlyFormat = this.data().dpConfig.format.substring(0, timeStartIndex);
|
|
660
|
+
const timeOnlyFormat = this.data().dpConfig.format.substring(timeStartIndex + timeStartMatch[1].length);
|
|
661
|
+
const dateString = dayjs()
|
|
662
|
+
.year(from === "LEFT" ? this.currentYearNumberSignal() : this.nextYearNumberSignal())
|
|
663
|
+
.month(from === "LEFT" ? this.currentMonthNumberSignal() : this.nextMonthNumberSignal())
|
|
664
|
+
.date(day.date)
|
|
665
|
+
.format(dateOnlyFormat);
|
|
666
|
+
const timeString = now.format(timeOnlyFormat);
|
|
667
|
+
formattedStartDate = dateString + timeStartMatch[1] + timeString;
|
|
668
|
+
}
|
|
669
|
+
else {
|
|
670
|
+
// Fallback if no time pattern found
|
|
671
|
+
formattedStartDate = dayjs()
|
|
672
|
+
.year(from === "LEFT" ? this.currentYearNumberSignal() : this.nextYearNumberSignal())
|
|
673
|
+
.month(from === "LEFT" ? this.currentMonthNumberSignal() : this.nextMonthNumberSignal())
|
|
674
|
+
.date(day.date)
|
|
675
|
+
.format(this.data().dpConfig.format);
|
|
676
|
+
}
|
|
677
|
+
}
|
|
522
678
|
this.localSelectedDatesSignal.set({
|
|
523
|
-
startDate:
|
|
524
|
-
.year(from === "LEFT" ? this.currentYearNumberSignal() : this.nextYearNumberSignal())
|
|
525
|
-
.month(from === "LEFT" ? this.currentMonthNumberSignal() : this.nextMonthNumberSignal())
|
|
526
|
-
.date(day.date)
|
|
527
|
-
.format(this.data.dpConfig.format),
|
|
679
|
+
startDate: formattedStartDate,
|
|
528
680
|
endDate: null,
|
|
529
681
|
selectedRangeLabel: this.CUSTOM_RANGE_LABEL
|
|
530
682
|
});
|
|
683
|
+
this.updateCalendarFromSelectedDates();
|
|
531
684
|
}
|
|
532
|
-
this.currentMonthDatesSignal.set(this.generateDates(this.currentMonthNumber(), this.currentYearNumber()));
|
|
533
|
-
this.nextMonthDatesSignal.set(this.generateDates(this.nextMonthNumber(), this.nextYearNumber()));
|
|
534
685
|
this.isDatesValidSignal.set(false);
|
|
535
686
|
if (this.localSelectedDatesSignal().startDate && this.localSelectedDatesSignal().endDate) {
|
|
536
687
|
this.isDatesValidSignal.set(true);
|
|
@@ -545,11 +696,11 @@ export class TzDrpContainerComponent {
|
|
|
545
696
|
return;
|
|
546
697
|
let startDate = this.dayjsInstance(item.value[0]);
|
|
547
698
|
let endDate = this.dayjsInstance(item.value[1]);
|
|
548
|
-
const startDateStr = startDate.format(this.data.dpConfig.format);
|
|
549
|
-
const endDateStr = endDate.format(this.data.dpConfig.format);
|
|
550
|
-
const isAnyDateDisabled = this.data.datesDisabled.some((date) => this.dayjsInstance(date, this.data.dpConfig.format).isBetween(startDateStr, endDateStr, null, '[]'));
|
|
551
|
-
const minDate = !!this.data.dpConfig.minDate ? this.dayjsInstance(this.data.dpConfig.minDate, this.data.dpConfig.format) : dayjs('invalid');
|
|
552
|
-
const maxDate = !!this.data.dpConfig.maxDate ? this.dayjsInstance(this.data.dpConfig.maxDate, this.data.dpConfig.format) : dayjs('invalid');
|
|
699
|
+
const startDateStr = startDate.format(this.data().dpConfig.format);
|
|
700
|
+
const endDateStr = endDate.format(this.data().dpConfig.format);
|
|
701
|
+
const isAnyDateDisabled = this.data().datesDisabled.some((date) => this.dayjsInstance(date, this.data().dpConfig.format).isBetween(startDateStr, endDateStr, null, '[]'));
|
|
702
|
+
const minDate = !!this.data().dpConfig.minDate ? this.dayjsInstance(this.data().dpConfig.minDate, this.data().dpConfig.format) : dayjs('invalid');
|
|
703
|
+
const maxDate = !!this.data().dpConfig.maxDate ? this.dayjsInstance(this.data().dpConfig.maxDate, this.data().dpConfig.format) : dayjs('invalid');
|
|
553
704
|
const isWithinLimits = (!minDate.isValid() || !startDate.isBefore(minDate, "day")) &&
|
|
554
705
|
(!maxDate.isValid() || !endDate.isAfter(maxDate, "day"));
|
|
555
706
|
if (!isWithinLimits || isAnyDateDisabled) {
|
|
@@ -572,10 +723,10 @@ export class TzDrpContainerComponent {
|
|
|
572
723
|
endDate: endDateStr,
|
|
573
724
|
selectedRangeLabel: item.label
|
|
574
725
|
});
|
|
575
|
-
this.currentMonthSignal.set(getMonth(this.
|
|
576
|
-
this.nextMonthSignal.set(getMonth(this.
|
|
577
|
-
this.currentMonthDatesSignal.set(this.generateDates(this.
|
|
578
|
-
this.nextMonthDatesSignal.set(this.generateDates(this.
|
|
726
|
+
this.currentMonthSignal.set(getMonth(this.currentMonthNumberSignal()));
|
|
727
|
+
this.nextMonthSignal.set(getMonth(this.nextMonthNumberSignal()));
|
|
728
|
+
this.currentMonthDatesSignal.set(this.generateDates(this.currentMonthNumberSignal(), this.currentYearNumberSignal()));
|
|
729
|
+
this.nextMonthDatesSignal.set(this.generateDates(this.nextMonthNumberSignal(), this.nextYearNumberSignal()));
|
|
579
730
|
this.isDatesValidSignal.set(!!(this.localSelectedDatesSignal().startDate && this.localSelectedDatesSignal().endDate));
|
|
580
731
|
}
|
|
581
732
|
resetRange() {
|
|
@@ -592,7 +743,7 @@ export class TzDrpContainerComponent {
|
|
|
592
743
|
}
|
|
593
744
|
applyDates() {
|
|
594
745
|
// If time is enabled, append time to the dates before applying
|
|
595
|
-
if (this.data.dpConfig.enableTime === true) {
|
|
746
|
+
if (this.data().dpConfig.enableTime === true) {
|
|
596
747
|
let startTime;
|
|
597
748
|
let endTime;
|
|
598
749
|
if (this.is12HourFormat()) {
|
|
@@ -604,21 +755,51 @@ export class TzDrpContainerComponent {
|
|
|
604
755
|
endTime = this.formatTime(this.endHour24(), this.endMinute(), '');
|
|
605
756
|
}
|
|
606
757
|
// Extract only the date part (before any existing time) and append the selected time
|
|
607
|
-
const
|
|
608
|
-
|
|
758
|
+
const localDates = this.localSelectedDatesSignal();
|
|
759
|
+
let startDateOnly = localDates.startDate;
|
|
760
|
+
let endDateOnly = localDates.endDate;
|
|
761
|
+
// Only extract date part if the format contains time components
|
|
762
|
+
if (this.data().dpConfig.format.includes('HH') || this.data().dpConfig.format.includes('mm') || this.data().dpConfig.format.includes('A')) {
|
|
763
|
+
// For datetime formats, we need to extract just the date part
|
|
764
|
+
// Try to parse the full string and then format it as date-only for comparison
|
|
765
|
+
if (startDateOnly) {
|
|
766
|
+
const parsedStart = this.parseDateWithMultipleFormats(startDateOnly);
|
|
767
|
+
if (parsedStart.isValid()) {
|
|
768
|
+
// Extract date part by finding the time boundary - handle spaces in date part
|
|
769
|
+
const timeStartMatch = this.data().dpConfig.format.match(/(\s+)(HH|mm|ss|A|a)/);
|
|
770
|
+
if (timeStartMatch) {
|
|
771
|
+
const timeStartIndex = this.data().dpConfig.format.indexOf(timeStartMatch[0]);
|
|
772
|
+
const dateOnlyFormat = this.data().dpConfig.format.substring(0, timeStartIndex);
|
|
773
|
+
startDateOnly = parsedStart.format(dateOnlyFormat);
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
if (endDateOnly) {
|
|
778
|
+
const parsedEnd = this.parseDateWithMultipleFormats(endDateOnly);
|
|
779
|
+
if (parsedEnd.isValid()) {
|
|
780
|
+
// Extract date part by finding the time boundary - handle spaces in date part
|
|
781
|
+
const timeStartMatch = this.data().dpConfig.format.match(/(\s+)(HH|mm|ss|A|a)/);
|
|
782
|
+
if (timeStartMatch) {
|
|
783
|
+
const timeStartIndex = this.data().dpConfig.format.indexOf(timeStartMatch[0]);
|
|
784
|
+
const dateOnlyFormat = this.data().dpConfig.format.substring(0, timeStartIndex);
|
|
785
|
+
endDateOnly = parsedEnd.format(dateOnlyFormat);
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
}
|
|
609
790
|
const startDateWithTime = startDateOnly + ' ' + startTime;
|
|
610
791
|
const endDateWithTime = endDateOnly + ' ' + endTime;
|
|
611
|
-
this.data.dateChange({
|
|
792
|
+
this.data().dateChange({
|
|
612
793
|
startDate: startDateWithTime,
|
|
613
794
|
endDate: endDateWithTime
|
|
614
795
|
});
|
|
615
796
|
}
|
|
616
797
|
else {
|
|
617
|
-
this.data.dateChange(this.localSelectedDatesSignal());
|
|
798
|
+
this.data().dateChange(this.localSelectedDatesSignal());
|
|
618
799
|
}
|
|
619
800
|
}
|
|
620
801
|
cancelDatePicker() {
|
|
621
|
-
this.data.close();
|
|
802
|
+
this.data().close();
|
|
622
803
|
}
|
|
623
804
|
// Time-related methods
|
|
624
805
|
onStartHourInput() {
|
|
@@ -677,7 +858,7 @@ export class TzDrpContainerComponent {
|
|
|
677
858
|
return minute;
|
|
678
859
|
}
|
|
679
860
|
is12HourFormat() {
|
|
680
|
-
return this.data.dpConfig.format.includes('A') || this.data.dpConfig.format.includes('a');
|
|
861
|
+
return this.data().dpConfig.format.includes('A') || this.data().dpConfig.format.includes('a');
|
|
681
862
|
}
|
|
682
863
|
formatTime(hour, minute, amPm) {
|
|
683
864
|
if (this.is12HourFormat()) {
|
|
@@ -692,7 +873,7 @@ export class TzDrpContainerComponent {
|
|
|
692
873
|
// Initialize time values from existing selected dates if they contain time
|
|
693
874
|
let startTimeInitialized = false;
|
|
694
875
|
let endTimeInitialized = false;
|
|
695
|
-
if (this.data.dpConfig.enableTime && this.localSelectedDatesSignal().startDate) {
|
|
876
|
+
if (this.data().dpConfig.enableTime && this.localSelectedDatesSignal().startDate && typeof this.localSelectedDatesSignal().startDate === 'string') {
|
|
696
877
|
const startDateParts = this.localSelectedDatesSignal().startDate.split(' ');
|
|
697
878
|
if (startDateParts.length > 1) {
|
|
698
879
|
const timePart = startDateParts.slice(1).join(' '); // Handle multiple spaces
|
|
@@ -700,7 +881,7 @@ export class TzDrpContainerComponent {
|
|
|
700
881
|
startTimeInitialized = true;
|
|
701
882
|
}
|
|
702
883
|
}
|
|
703
|
-
if (this.data.dpConfig.enableTime && this.localSelectedDatesSignal().endDate) {
|
|
884
|
+
if (this.data().dpConfig.enableTime && this.localSelectedDatesSignal().endDate && typeof this.localSelectedDatesSignal().endDate === 'string') {
|
|
704
885
|
const endDateParts = this.localSelectedDatesSignal().endDate.split(' ');
|
|
705
886
|
if (endDateParts.length > 1) {
|
|
706
887
|
const timePart = endDateParts.slice(1).join(' '); // Handle multiple spaces
|
|
@@ -709,7 +890,7 @@ export class TzDrpContainerComponent {
|
|
|
709
890
|
}
|
|
710
891
|
}
|
|
711
892
|
// If no existing time found, set current time as default
|
|
712
|
-
if (this.data.dpConfig.enableTime) {
|
|
893
|
+
if (this.data().dpConfig.enableTime) {
|
|
713
894
|
if (!startTimeInitialized) {
|
|
714
895
|
this.setCurrentTimeAsDefault(true);
|
|
715
896
|
}
|
|
@@ -936,9 +1117,10 @@ export class TzDrpContainerComponent {
|
|
|
936
1117
|
i0.ɵɵtext(38, "Apply");
|
|
937
1118
|
i0.ɵɵelementEnd()()();
|
|
938
1119
|
} if (rf & 2) {
|
|
1120
|
+
let tmp_1_0;
|
|
939
1121
|
i0.ɵɵproperty("cdkTrapFocusAutoCapture", true);
|
|
940
1122
|
i0.ɵɵadvance(3);
|
|
941
|
-
i0.ɵɵproperty("ngIf", (ctx.data == null ? null :
|
|
1123
|
+
i0.ɵɵproperty("ngIf", ((tmp_1_0 = ctx.data()) == null ? null : tmp_1_0.dpConfig == null ? null : tmp_1_0.dpConfig.ranges == null ? null : tmp_1_0.dpConfig.ranges.length) > 0);
|
|
942
1124
|
i0.ɵɵadvance(3);
|
|
943
1125
|
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(15, _c0, ctx.isPreviousMonthDisabled()));
|
|
944
1126
|
i0.ɵɵadvance(4);
|
|
@@ -958,14 +1140,14 @@ export class TzDrpContainerComponent {
|
|
|
958
1140
|
i0.ɵɵadvance(2);
|
|
959
1141
|
i0.ɵɵproperty("ngForOf", ctx.nextMonthDates());
|
|
960
1142
|
i0.ɵɵadvance();
|
|
961
|
-
i0.ɵɵproperty("ngIf", ctx.data.dpConfig.enableTime === true);
|
|
1143
|
+
i0.ɵɵproperty("ngIf", ctx.data().dpConfig.enableTime === true);
|
|
962
1144
|
i0.ɵɵadvance(4);
|
|
963
1145
|
i0.ɵɵproperty("disabled", !ctx.isDatesValid());
|
|
964
1146
|
} }, dependencies: [i2.NgClass, i2.NgForOf, i2.NgIf, i3.NgSelectOption, i3.ɵNgSelectMultipleOption, i3.DefaultValueAccessor, i3.NumberValueAccessor, i3.SelectControlValueAccessor, i3.NgControlStatus, i3.MinValidator, i3.MaxValidator, i3.NgModel, i4.ButtonDirective, i5.CdkTrapFocus], styles: ["[_ngcontent-%COMP%]:root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3;--brand-primary: #0937B2;--brand-primary-light: #3C68D0;--brand-primary-dark: #062A99;--brand-primary-darker: #041F80;--brand-primary-lighter: #638FE7;--brand-primary-lightest: #CBDDFB;--brand-primary-hover: #F0F3FA;--brand-primary-active: #DAE1F3;--brand-secondary: #ED711C;--brand-secondary-light: #F09E65;--brand-secondary-dark: #B23600;--brand-secondary-lighter: #FFC6F2;--brand-accent: #10ADAE;--brand-accent-light: #16CBBC;--brand-accent-dark: #035F6B;--brand-accent-lighter: #ACDADA;--brand-success: #38AF49;--brand-success-light: #4CAF50;--brand-success-dark: #216531;--brand-success-lighter: #E4F5E9;--brand-success-lightest: #F1FFF3;--brand-error: #B00020;--brand-error-light: #F04E4E;--brand-error-dark: #A60060;--brand-error-lighter: #FAE1EA;--brand-error-lightest: #FDF2F2;--brand-warning: #FF9D00;--brand-warning-light: #D4900C;--brand-warning-dark: #624000;--brand-warning-lighter: #F4E7C3;--brand-warning-lightest: #FAEFED;--brand-info: #0091FF;--brand-info-light: #35A1FF;--brand-info-dark: #0087B2;--brand-info-lighter: #CFECF9;--text-primary: #181F33;--text-secondary: #6A737D;--text-tertiary: #929DAB;--text-disabled: #929DAB;--text-primary-87: rgba(24, 31, 51, .87);--text-primary-60: rgba(24, 31, 51, .6);--text-primary-38: rgba(24, 31, 51, .38);--text-primary-12: rgba(24, 31, 51, .12);--bg-primary: #FFFFFF;--bg-secondary: #FAFAFA;--bg-tertiary: #F5F5F5;--bg-overlay: rgba(0, 0, 0, .32);--bg-overlay-light: rgba(0, 0, 0, .12);--bg-overlay-lighter: rgba(0, 0, 0, .08);--bg-overlay-lightest: rgba(0, 0, 0, .04);--border-primary: #E0E0E0;--border-secondary: #D6DCE2;--border-tertiary: #C8CDD3;--border-light: #F1F4F8;--border-primary-12: rgba(0, 0, 0, .12);--border-primary-08: rgba(0, 0, 0, .08);--border-primary-06: rgba(0, 0, 0, .06);--shadow-primary: rgba(0, 0, 0, .12);--shadow-secondary: rgba(0, 0, 0, .08);--shadow-tertiary: rgba(0, 0, 0, .04);--shadow-light: rgba(0, 0, 0, .06);--status-available: #929DAB;--status-unavailable: #CCD3DA;--status-hotseat: #857BFF;--status-multiteam: #10ADAE;--status-selected: #10ADAE;--status-upcoming: #D4900C;--status-room: #38AF49;--status-room-booked: #B23600;--status-room-unavailable: #181F33;--team-color-1: #F8C52E;--team-color-2: #FA8E20;--team-color-3: #987CDD;--team-color-4: #16CBBC;--team-color-5: #E65010;--team-color-6: #A60060;--team-color-7: #ED323B;--team-color-8: #35A1FF;--team-color-9: #80D348}.daterangepicker-container[_ngcontent-%COMP%]{background:var(--bg-primary, #FFFFFF);border:1px solid var(--border-primary, #E0E0E0);box-shadow:0 12px 24px #0000001f,0 4px 8px #0000001f;border-radius:12px;display:flex;flex-direction:column;font-family:Lato;overflow:hidden;-webkit-user-select:none;user-select:none}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%]{max-width:100vw;border:none}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%]{display:flex;gap:24px;padding:16px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__ranges[_ngcontent-%COMP%]{display:flex;flex-direction:column}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .mis-btn[_ngcontent-%COMP%]{background:none;outline:none;border:none;cursor:pointer;border-radius:4px;vertical-align:middle;text-align:center;box-sizing:border-box;display:flex;align-items:center;text-decoration:none;justify-content:center;padding:10px 16px;font-size:16px;line-height:24px;background-color:transparent;color:var(--brand-primary, #0937B2)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .active-range[_ngcontent-%COMP%]{background-color:var(--brand-primary-lightest, #CBDDFB)}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%]{flex-direction:column;align-items:center;position:fixed;bottom:0;left:0;background-color:#fff;width:100%;max-height:68vh;overflow-y:auto;border-radius:30px;gap:24px;padding:10% 0 30%;box-shadow:0 -4px 8px 10000px #0000001f;scrollbar-width:none;-ms-overflow-style:none}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%]::-webkit-scrollbar{display:none}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .datepicker__left[_ngcontent-%COMP%], .daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .datepicker__right[_ngcontent-%COMP%]{display:flex;flex-direction:column}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .datepicker__left[_ngcontent-%COMP%], .daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .datepicker__right[_ngcontent-%COMP%]{width:90%}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%]{display:flex;height:32px;justify-content:space-between;align-items:center;width:100%;padding-bottom:10%}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:16px;font-style:normal;font-weight:700;line-height:24px;letter-spacing:.2px;text-align:center}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{margin:0 auto;font-size:4vw}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .daterangepicker-container__arrow__icon[_ngcontent-%COMP%]{height:20px;width:20px;display:flex;align-items:center;justify-content:center;border-radius:4px;padding:4px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .daterangepicker-container__arrow__icon.disabled-month[_ngcontent-%COMP%]{opacity:.5;cursor:not-allowed}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .daterangepicker-container__arrow__icon[_ngcontent-%COMP%]:not(.disabled-month):hover{cursor:pointer;background-color:var(--brand-primary-lightest, #CBDDFB)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .daterangepicker-container__arrow__icon[_ngcontent-%COMP%]:nth-child(1){transform:rotate(180deg)}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .daterangepicker-container__arrow__icon[_ngcontent-%COMP%]{width:7%}}@media only screen and (min-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .mobile_view[_ngcontent-%COMP%]{display:none}}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__header__prabu[_ngcontent-%COMP%] .pc_view[_ngcontent-%COMP%]{display:none}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%]{height:100%;width:252px}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%]{width:100%}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%]{width:100%;display:flex;padding-bottom:10px}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%]{display:flex;flex-direction:row;flex-wrap:wrap;flex:0 0 14.2857142857%}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%] .daterangepicker-container__weekday[_ngcontent-%COMP%]{width:36px;height:18px;text-align:center}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%] .daterangepicker-container__weekday[_ngcontent-%COMP%]{margin:0 auto}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%] .daterangepicker-container__weekday[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:12px;font-style:normal;font-weight:400;line-height:18px;letter-spacing:.2px;text-align:center;color:var(--text-secondary, #6A737D)}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%] .daterangepicker-container__weekday[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:3vw}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__weekdays[_ngcontent-%COMP%] .daterangepicker-container__weekday[_ngcontent-%COMP%] span.current-day[_ngcontent-%COMP%]{font-weight:700;letter-spacing:.25px;color:var(--text-primary, #181F33)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%]{display:flex;flex-direction:row;flex-wrap:wrap;flex:0 0 14.2857142857%}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%]{width:36px;height:36px;display:flex;align-items:center;justify-content:center}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%]{flex:0 0 14.2857142857%;width:14.2857142857%;height:14.2857142857%;aspect-ratio:1}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%]:not(.in-range-day):not(.selected-start-day):not(.selected-end-day){border-radius:4px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day.disabled-day[_ngcontent-%COMP%]{cursor:default}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day.disabled-day[_ngcontent-%COMP%]:hover{background-color:transparent}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day.disabled-day[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--text-secondary, #6A737D)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day.is-valid-date[_ngcontent-%COMP%]:not(.disabled-day):not(.selected-start-day):not(.selected-end-day) > span[_ngcontent-%COMP%]{color:var(--text-primary, #181F33)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day.is-valid-date[_ngcontent-%COMP%]:not(.disabled-day):not(.selected-start-day):not(.selected-end-day):hover{background-color:var(--brand-primary-lightest, #CBDDFB);cursor:pointer}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.2px;text-align:center;color:var(--text-primary, #181F33)}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:3.4vw}}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%] span.current-day[_ngcontent-%COMP%]{font-weight:700;letter-spacing:.25px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%] span.selected-day[_ngcontent-%COMP%]{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .daterangepicker-container__day[_ngcontent-%COMP%] span.disabled-day[_ngcontent-%COMP%]{color:var(--text-secondary, #6A737D)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .selected-same-day[_ngcontent-%COMP%]{background-color:var(--brand-primary, #0937B2);border-radius:50%!important}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .selected-same-day[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .selected-start-day[_ngcontent-%COMP%]{background-color:var(--brand-primary, #0937B2);border-radius:20px 4px 4px 20px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .selected-start-day[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .selected-end-day[_ngcontent-%COMP%]{background-color:var(--brand-primary, #0937B2);border-radius:0 20px 20px 0}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .selected-end-day[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__view[_ngcontent-%COMP%] .daterangepicker-container__body[_ngcontent-%COMP%] .daterangepicker-container__days[_ngcontent-%COMP%] .in-range-day[_ngcontent-%COMP%]:not(.disabled-day){background-color:var(--brand-primary-lightest, #CBDDFB)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%]{border-top:1px solid var(--border-primary, #E0E0E0);padding:16px 24px;background-color:#f8f9fa;display:flex;gap:24px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%]{flex:1}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0 0 8px;font-size:14px;font-weight:600;color:#333}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .time-input[_ngcontent-%COMP%]{width:60px;padding:8px;border:1px solid #ddd;border-radius:4px;text-align:center;font-size:14px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .time-input[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--brand-primary, #0937B2);box-shadow:0 0 0 2px #0937b233}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .time-input.hour-input[_ngcontent-%COMP%], .daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .time-input.minute-input[_ngcontent-%COMP%]{width:50px}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .time-separator[_ngcontent-%COMP%]{font-size:16px;font-weight:600;color:#666}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .am-pm-selector[_ngcontent-%COMP%]{padding:7.1px 12px;border:1px solid #ddd;border-radius:4px;background-color:#fff;font-size:14px;cursor:pointer}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker-container__time[_ngcontent-%COMP%] .time-section[_ngcontent-%COMP%] .time-inputs[_ngcontent-%COMP%] .am-pm-selector[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--brand-primary, #0937B2)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker__footer[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;border-top:1px solid var(--border-primary, #E0E0E0);padding:16px 24px;gap:24px}@media only screen and (max-width: 900px){.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker__footer[_ngcontent-%COMP%]{justify-content:space-evenly;padding:2% 0;background-color:var(--bg-primary, #FFFFFF);position:fixed;bottom:0;left:0;width:100%;height:8vh;border-top:2px solid var(--text-disabled, #C8CDD3)}.daterangepicker-container[_ngcontent-%COMP%] .daterangepicker__footer[_ngcontent-%COMP%] #mobile-footer-btn[_ngcontent-%COMP%]{width:36%;font-size:3.8vw}}"] }); }
|
|
965
1147
|
}
|
|
966
1148
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TzDrpContainerComponent, [{
|
|
967
1149
|
type: Component,
|
|
968
|
-
args: [{ selector: "mis-tz-drp", template: "<div class=\"daterangepicker-container\" aria-label=\"date range picker\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <div class=\"daterangepicker-container__view\">\n <div tabindex=\"-1\" cdkFocusInitial></div>\n <div *ngIf=\"data?.dpConfig?.ranges?.length > 0\" class=\"daterangepicker-container__ranges\">\n <div *ngFor=\"let item of data?.dpConfig?.ranges ?? []\" >\n <button\n [ngClass]=\"{'active-range' : selectedItemLabel() === item.label}\"\n (click)=\"selectRange(item)\"\n class=\"mis-btn\"\n >\n {{ item.label }}\n </button>\n </div>\n <div> <button class=\"mis-btn\" [ngClass]=\"{'active-range' : selectedItemLabel() === 'Custom Range'}\" (click)=\"resetRange()\">Custom Range</button> </div>\n </div>\n <div class=\"datepicker__left\">\n <div class=\"daterangepicker-container__header__prabu\">\n <div\n class=\"daterangepicker-container__arrow__icon\"\n tabindex=\"0\"\n (click)=\"!isPreviousMonthDisabled() && navigateMonth('PREVIOUS')\"\n (keyup.enter)=\"!isPreviousMonthDisabled() && navigateMonth('PREVIOUS')\"\n aria-label=\"Previous Month\"\n [ngClass]=\"{\n 'disabled-month': isPreviousMonthDisabled()\n }\"\n >\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z\"\n fill=\"#181F33\"\n ></path>\n </svg>\n </div>\n <span> {{ currentMonth() }} {{ currentYearNumber() }} </span>\n <div></div>\n <!-- Button visible in mobile view -->\n <div\n class=\"daterangepicker-container__arrow__icon mobile_view\"\n tabindex=\"0\"\n (click)=\"!isNextMonthDisabled() && navigateMonth('NEXT')\"\n (keyup.enter)=\"!isNextMonthDisabled() && navigateMonth('NEXT')\"\n aria-label=\"Next Month\"\n [ngClass]=\"{\n 'disabled-month': isNextMonthDisabled()\n }\"\n >\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z\"\n fill=\"#181F33\"\n ></path>\n </svg>\n </div>\n </div>\n <div class=\"daterangepicker-container__body\">\n <div class=\"daterangepicker-container__weekdays\">\n <div class=\"daterangepicker-container__weekday\" *ngFor=\"let weekDay of weekDays()\">\n <span>{{ weekDay.label }}</span>\n </div>\n </div>\n <div class=\"daterangepicker-container__days\">\n <div\n class=\"daterangepicker-container__day\" \n [ngClass]=\"{\n 'selected-same-day': day.isSelectedStartDay && day.isSelectedEndDay,\n 'selected-start-day': day.isSelectedStartDay,\n 'selected-end-day': day.isSelectedEndDay,\n 'disabled-day': day.isDisabledDay,\n 'in-range-day': day.inRangeDay,\n 'is-valid-date': day.date > 0 && !(day.isSelectedStartDay && day.isSelectedEndDay)\n }\"\n *ngFor=\"let day of currentMonthDates()\"\n (click)=\"selectDay('LEFT', day)\"\n (keyup.enter)=\"selectDay('LEFT', day)\"\n >\n <span *ngIf=\"day.date > 0\"\n [tabindex]=\"day.isDisabledDay ? -1 : 0\"\n [attr.aria-label]=\"retractDayMonth(day.date, currentMonth(), currentYearNumber())\">\n {{ day.date }}\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"datepicker__right\">\n <div class=\"daterangepicker-container__header__prabu\">\n <div></div>\n <span> {{ nextMonth() }} {{ nextYearNumber() }} </span>\n <div\n class=\"daterangepicker-container__arrow__icon pc_view\"\n tabindex=\"0\"\n (click)=\"!isNextMonthDisabled() && navigateMonth('NEXT')\"\n (keyup.enter)=\"!isNextMonthDisabled() && navigateMonth('NEXT')\"\n [ngClass]=\"{\n 'disabled-month': isNextMonthDisabled()\n }\"\n >\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z\"\n fill=\"#181F33\"\n ></path>\n </svg>\n </div>\n </div>\n <div class=\"daterangepicker-container__body\">\n <div class=\"daterangepicker-container__weekdays\">\n <div class=\"daterangepicker-container__weekday\" *ngFor=\"let weekDay of weekDays()\">\n <span>{{ weekDay.label }}</span>\n </div>\n </div>\n <div class=\"daterangepicker-container__days\">\n <div\n class=\"daterangepicker-container__day\"\n [ngClass]=\"{\n 'selected-same-day': day.isSelectedStartDay && day.isSelectedEndDay,\n 'selected-start-day': day.isSelectedStartDay,\n 'selected-end-day': day.isSelectedEndDay,\n 'disabled-day': day.isDisabledDay,\n 'in-range-day': day.inRangeDay,\n 'is-valid-date': day.date > 0 && !(day.isSelectedStartDay && day.isSelectedEndDay)\n }\"\n *ngFor=\"let day of nextMonthDates()\"\n (click)=\"selectDay('RIGHT', day)\"\n (keyup.enter)=\"selectDay('RIGHT', day)\"\n >\n <span *ngIf=\"day.date > 0\"\n [tabindex]=\"day.isDisabledDay ? -1 : 0\"\n [attr.aria-label]=\"retractDayMonth(day.date, nextMonth(), nextYearNumber())\">\n {{ day.date }}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n \n <!-- Time Selection Section -->\n <div class=\"daterangepicker-container__time\" *ngIf=\"data.dpConfig.enableTime === true\">\n <div class=\"time-section\">\n <h4>From</h4>\n <div class=\"time-inputs\">\n <input \n type=\"number\" \n [ngModel]=\"is12HourFormat() ? startHour() : startHour24()\" \n (ngModelChange)=\"is12HourFormat() ? startHourSignal.set($event) : startHour24Signal.set($event); onStartHourInput()\"\n [min]=\"is12HourFormat() ? 1 : 0\" \n [max]=\"is12HourFormat() ? 12 : 23\" \n step=\"1\"\n class=\"time-input hour-input\"\n placeholder=\"HH\">\n <span class=\"time-separator\">:</span>\n <input \n type=\"number\" \n [ngModel]=\"startMinute()\" (ngModelChange)=\"startMinuteSignal.set($event)\" \n (input)=\"onStartMinuteInput()\"\n min=\"0\" \n max=\"59\" \n step=\"1\"\n class=\"time-input minute-input\"\n placeholder=\"MM\">\n <select \n [ngModel]=\"startAmPm()\" (ngModelChange)=\"startAmPmSignal.set($event)\" \n class=\"am-pm-selector\"\n *ngIf=\"is12HourFormat()\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n \n <div class=\"time-section\">\n <h4>To</h4>\n <div class=\"time-inputs\">\n <input \n type=\"number\" \n [ngModel]=\"is12HourFormat() ? endHour() : endHour24()\" \n (ngModelChange)=\"is12HourFormat() ? endHourSignal.set($event) : endHour24Signal.set($event); onEndHourInput()\"\n [min]=\"is12HourFormat() ? 1 : 0\" \n [max]=\"is12HourFormat() ? 12 : 23\" \n step=\"1\"\n class=\"time-input hour-input\"\n placeholder=\"HH\">\n <span class=\"time-separator\">:</span>\n <input \n type=\"number\" \n [ngModel]=\"endMinute()\" (ngModelChange)=\"endMinuteSignal.set($event)\" \n (input)=\"onEndMinuteInput()\"\n min=\"0\" \n max=\"59\" \n step=\"1\"\n class=\"time-input minute-input\"\n placeholder=\"MM\">\n <select \n [ngModel]=\"endAmPm()\" (ngModelChange)=\"endAmPmSignal.set($event)\" \n class=\"am-pm-selector\"\n *ngIf=\"is12HourFormat()\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n \n <div class=\"daterangepicker__footer\">\n <button mis-button type=\"none\" id='mobile-footer-btn' (click)=\"cancelDatePicker()\">Cancel</button>\n <button mis-button type=\"primary\" id=\"mobile-footer-btn\" (click)=\"applyDates()\" [disabled]=\"!isDatesValid()\">Apply</button>\n </div>\n</div>", styles: [":root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3;--brand-primary: #0937B2;--brand-primary-light: #3C68D0;--brand-primary-dark: #062A99;--brand-primary-darker: #041F80;--brand-primary-lighter: #638FE7;--brand-primary-lightest: #CBDDFB;--brand-primary-hover: #F0F3FA;--brand-primary-active: #DAE1F3;--brand-secondary: #ED711C;--brand-secondary-light: #F09E65;--brand-secondary-dark: #B23600;--brand-secondary-lighter: #FFC6F2;--brand-accent: #10ADAE;--brand-accent-light: #16CBBC;--brand-accent-dark: #035F6B;--brand-accent-lighter: #ACDADA;--brand-success: #38AF49;--brand-success-light: #4CAF50;--brand-success-dark: #216531;--brand-success-lighter: #E4F5E9;--brand-success-lightest: #F1FFF3;--brand-error: #B00020;--brand-error-light: #F04E4E;--brand-error-dark: #A60060;--brand-error-lighter: #FAE1EA;--brand-error-lightest: #FDF2F2;--brand-warning: #FF9D00;--brand-warning-light: #D4900C;--brand-warning-dark: #624000;--brand-warning-lighter: #F4E7C3;--brand-warning-lightest: #FAEFED;--brand-info: #0091FF;--brand-info-light: #35A1FF;--brand-info-dark: #0087B2;--brand-info-lighter: #CFECF9;--text-primary: #181F33;--text-secondary: #6A737D;--text-tertiary: #929DAB;--text-disabled: #929DAB;--text-primary-87: rgba(24, 31, 51, .87);--text-primary-60: rgba(24, 31, 51, .6);--text-primary-38: rgba(24, 31, 51, .38);--text-primary-12: rgba(24, 31, 51, .12);--bg-primary: #FFFFFF;--bg-secondary: #FAFAFA;--bg-tertiary: #F5F5F5;--bg-overlay: rgba(0, 0, 0, .32);--bg-overlay-light: rgba(0, 0, 0, .12);--bg-overlay-lighter: rgba(0, 0, 0, .08);--bg-overlay-lightest: rgba(0, 0, 0, .04);--border-primary: #E0E0E0;--border-secondary: #D6DCE2;--border-tertiary: #C8CDD3;--border-light: #F1F4F8;--border-primary-12: rgba(0, 0, 0, .12);--border-primary-08: rgba(0, 0, 0, .08);--border-primary-06: rgba(0, 0, 0, .06);--shadow-primary: rgba(0, 0, 0, .12);--shadow-secondary: rgba(0, 0, 0, .08);--shadow-tertiary: rgba(0, 0, 0, .04);--shadow-light: rgba(0, 0, 0, .06);--status-available: #929DAB;--status-unavailable: #CCD3DA;--status-hotseat: #857BFF;--status-multiteam: #10ADAE;--status-selected: #10ADAE;--status-upcoming: #D4900C;--status-room: #38AF49;--status-room-booked: #B23600;--status-room-unavailable: #181F33;--team-color-1: #F8C52E;--team-color-2: #FA8E20;--team-color-3: #987CDD;--team-color-4: #16CBBC;--team-color-5: #E65010;--team-color-6: #A60060;--team-color-7: #ED323B;--team-color-8: #35A1FF;--team-color-9: #80D348}.daterangepicker-container{background:var(--bg-primary, #FFFFFF);border:1px solid var(--border-primary, #E0E0E0);box-shadow:0 12px 24px #0000001f,0 4px 8px #0000001f;border-radius:12px;display:flex;flex-direction:column;font-family:Lato;overflow:hidden;-webkit-user-select:none;user-select:none}@media only screen and (max-width: 900px){.daterangepicker-container{max-width:100vw;border:none}}.daterangepicker-container .daterangepicker-container__view{display:flex;gap:24px;padding:16px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__ranges{display:flex;flex-direction:column}.daterangepicker-container .daterangepicker-container__view .mis-btn{background:none;outline:none;border:none;cursor:pointer;border-radius:4px;vertical-align:middle;text-align:center;box-sizing:border-box;display:flex;align-items:center;text-decoration:none;justify-content:center;padding:10px 16px;font-size:16px;line-height:24px;background-color:transparent;color:var(--brand-primary, #0937B2)}.daterangepicker-container .daterangepicker-container__view .active-range{background-color:var(--brand-primary-lightest, #CBDDFB)}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view{flex-direction:column;align-items:center;position:fixed;bottom:0;left:0;background-color:#fff;width:100%;max-height:68vh;overflow-y:auto;border-radius:30px;gap:24px;padding:10% 0 30%;box-shadow:0 -4px 8px 10000px #0000001f;scrollbar-width:none;-ms-overflow-style:none}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__view::-webkit-scrollbar{display:none}}.daterangepicker-container .daterangepicker-container__view .datepicker__left,.daterangepicker-container .daterangepicker-container__view .datepicker__right{display:flex;flex-direction:column}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .datepicker__left,.daterangepicker-container .daterangepicker-container__view .datepicker__right{width:90%}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu{display:flex;height:32px;justify-content:space-between;align-items:center;width:100%;padding-bottom:10%}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu span{font-size:16px;font-style:normal;font-weight:700;line-height:24px;letter-spacing:.2px;text-align:center}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu span{margin:0 auto;font-size:4vw}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon{height:20px;width:20px;display:flex;align-items:center;justify-content:center;border-radius:4px;padding:4px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon.disabled-month{opacity:.5;cursor:not-allowed}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon:not(.disabled-month):hover{cursor:pointer;background-color:var(--brand-primary-lightest, #CBDDFB)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon:nth-child(1){transform:rotate(180deg)}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon{width:7%}}@media only screen and (min-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .mobile_view{display:none}}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .pc_view{display:none}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body{height:100%;width:252px}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body{width:100%}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays{width:100%;display:flex;padding-bottom:10px}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays{display:flex;flex-direction:row;flex-wrap:wrap;flex:0 0 14.2857142857%}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday{width:36px;height:18px;text-align:center}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday{margin:0 auto}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday span{font-size:12px;font-style:normal;font-weight:400;line-height:18px;letter-spacing:.2px;text-align:center;color:var(--text-secondary, #6A737D)}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday span{font-size:3vw}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday span.current-day{font-weight:700;letter-spacing:.25px;color:var(--text-primary, #181F33)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days{display:flex;flex-wrap:wrap}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days{display:flex;flex-direction:row;flex-wrap:wrap;flex:0 0 14.2857142857%}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day{width:36px;height:36px;display:flex;align-items:center;justify-content:center}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day{flex:0 0 14.2857142857%;width:14.2857142857%;height:14.2857142857%;aspect-ratio:1}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day:not(.in-range-day):not(.selected-start-day):not(.selected-end-day){border-radius:4px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.disabled-day{cursor:default}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.disabled-day:hover{background-color:transparent}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.disabled-day>span{color:var(--text-secondary, #6A737D)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.is-valid-date:not(.disabled-day):not(.selected-start-day):not(.selected-end-day)>span{color:var(--text-primary, #181F33)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.is-valid-date:not(.disabled-day):not(.selected-start-day):not(.selected-end-day):hover{background-color:var(--brand-primary-lightest, #CBDDFB);cursor:pointer}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span{font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.2px;text-align:center;color:var(--text-primary, #181F33)}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span{font-size:3.4vw}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span.current-day{font-weight:700;letter-spacing:.25px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span.selected-day{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span.disabled-day{color:var(--text-secondary, #6A737D)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-same-day{background-color:var(--brand-primary, #0937B2);border-radius:50%!important}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-same-day>span{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-start-day{background-color:var(--brand-primary, #0937B2);border-radius:20px 4px 4px 20px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-start-day>span{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-end-day{background-color:var(--brand-primary, #0937B2);border-radius:0 20px 20px 0}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-end-day>span{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .in-range-day:not(.disabled-day){background-color:var(--brand-primary-lightest, #CBDDFB)}.daterangepicker-container .daterangepicker-container__time{border-top:1px solid var(--border-primary, #E0E0E0);padding:16px 24px;background-color:#f8f9fa;display:flex;gap:24px}.daterangepicker-container .daterangepicker-container__time .time-section{flex:1}.daterangepicker-container .daterangepicker-container__time .time-section h4{margin:0 0 8px;font-size:14px;font-weight:600;color:#333}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs{display:flex;align-items:center;gap:8px}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-input{width:60px;padding:8px;border:1px solid #ddd;border-radius:4px;text-align:center;font-size:14px}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-input:focus{outline:none;border-color:var(--brand-primary, #0937B2);box-shadow:0 0 0 2px #0937b233}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-input.hour-input,.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-input.minute-input{width:50px}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-separator{font-size:16px;font-weight:600;color:#666}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .am-pm-selector{padding:7.1px 12px;border:1px solid #ddd;border-radius:4px;background-color:#fff;font-size:14px;cursor:pointer}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .am-pm-selector:focus{outline:none;border-color:var(--brand-primary, #0937B2)}.daterangepicker-container .daterangepicker__footer{display:flex;justify-content:flex-end;border-top:1px solid var(--border-primary, #E0E0E0);padding:16px 24px;gap:24px}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker__footer{justify-content:space-evenly;padding:2% 0;background-color:var(--bg-primary, #FFFFFF);position:fixed;bottom:0;left:0;width:100%;height:8vh;border-top:2px solid var(--text-disabled, #C8CDD3)}.daterangepicker-container .daterangepicker__footer #mobile-footer-btn{width:36%;font-size:3.8vw}}\n"] }]
|
|
1150
|
+
args: [{ selector: "mis-tz-drp", template: "<div class=\"daterangepicker-container\" aria-label=\"date range picker\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"true\">\n <div class=\"daterangepicker-container__view\">\n <div tabindex=\"-1\" cdkFocusInitial></div>\n <div *ngIf=\"data()?.dpConfig?.ranges?.length > 0\" class=\"daterangepicker-container__ranges\">\n <div *ngFor=\"let item of data()?.dpConfig?.ranges ?? []\" >\n <button\n [ngClass]=\"{'active-range' : selectedItemLabel() === item.label}\"\n (click)=\"selectRange(item)\"\n class=\"mis-btn\"\n >\n {{ item.label }}\n </button>\n </div>\n <div> <button class=\"mis-btn\" [ngClass]=\"{'active-range' : selectedItemLabel() === 'Custom Range'}\" (click)=\"resetRange()\">Custom Range</button> </div>\n </div>\n <div class=\"datepicker__left\">\n <div class=\"daterangepicker-container__header__prabu\">\n <div\n class=\"daterangepicker-container__arrow__icon\"\n tabindex=\"0\"\n (click)=\"!isPreviousMonthDisabled() && navigateMonth('PREVIOUS')\"\n (keyup.enter)=\"!isPreviousMonthDisabled() && navigateMonth('PREVIOUS')\"\n aria-label=\"Previous Month\"\n [ngClass]=\"{\n 'disabled-month': isPreviousMonthDisabled()\n }\"\n >\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z\"\n fill=\"#181F33\"\n ></path>\n </svg>\n </div>\n <span> {{ currentMonth() }} {{ currentYearNumber() }} </span>\n <div></div>\n <!-- Button visible in mobile view -->\n <div\n class=\"daterangepicker-container__arrow__icon mobile_view\"\n tabindex=\"0\"\n (click)=\"!isNextMonthDisabled() && navigateMonth('NEXT')\"\n (keyup.enter)=\"!isNextMonthDisabled() && navigateMonth('NEXT')\"\n aria-label=\"Next Month\"\n [ngClass]=\"{\n 'disabled-month': isNextMonthDisabled()\n }\"\n >\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z\"\n fill=\"#181F33\"\n ></path>\n </svg>\n </div>\n </div>\n <div class=\"daterangepicker-container__body\">\n <div class=\"daterangepicker-container__weekdays\">\n <div class=\"daterangepicker-container__weekday\" *ngFor=\"let weekDay of weekDays()\">\n <span>{{ weekDay.label }}</span>\n </div>\n </div>\n <div class=\"daterangepicker-container__days\">\n <div\n class=\"daterangepicker-container__day\" \n [ngClass]=\"{\n 'selected-same-day': day.isSelectedStartDay && day.isSelectedEndDay,\n 'selected-start-day': day.isSelectedStartDay,\n 'selected-end-day': day.isSelectedEndDay,\n 'disabled-day': day.isDisabledDay,\n 'in-range-day': day.inRangeDay,\n 'is-valid-date': day.date > 0 && !(day.isSelectedStartDay && day.isSelectedEndDay)\n }\"\n *ngFor=\"let day of currentMonthDates()\"\n (click)=\"selectDay('LEFT', day)\"\n (keyup.enter)=\"selectDay('LEFT', day)\"\n >\n <span *ngIf=\"day.date > 0\"\n [tabindex]=\"day.isDisabledDay ? -1 : 0\"\n [attr.aria-label]=\"retractDayMonth(day.date, currentMonth(), currentYearNumber())\">\n {{ day.date }}\n </span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"datepicker__right\">\n <div class=\"daterangepicker-container__header__prabu\">\n <div></div>\n <span> {{ nextMonth() }} {{ nextYearNumber() }} </span>\n <div\n class=\"daterangepicker-container__arrow__icon pc_view\"\n tabindex=\"0\"\n (click)=\"!isNextMonthDisabled() && navigateMonth('NEXT')\"\n (keyup.enter)=\"!isNextMonthDisabled() && navigateMonth('NEXT')\"\n [ngClass]=\"{\n 'disabled-month': isNextMonthDisabled()\n }\"\n >\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.7071 8.70711C20.0976 8.31658 20.0976 7.68342 19.7071 7.29289L13.3431 0.928933C12.9526 0.538409 12.3195 0.538409 11.9289 0.928933C11.5384 1.31946 11.5384 1.95262 11.9289 2.34315L17.5858 8L11.9289 13.6569C11.5384 14.0474 11.5384 14.6805 11.9289 15.0711C12.3195 15.4616 12.9526 15.4616 13.3431 15.0711L19.7071 8.70711ZM-8.74228e-08 9L19 9L19 7L8.74228e-08 7L-8.74228e-08 9Z\"\n fill=\"#181F33\"\n ></path>\n </svg>\n </div>\n </div>\n <div class=\"daterangepicker-container__body\">\n <div class=\"daterangepicker-container__weekdays\">\n <div class=\"daterangepicker-container__weekday\" *ngFor=\"let weekDay of weekDays()\">\n <span>{{ weekDay.label }}</span>\n </div>\n </div>\n <div class=\"daterangepicker-container__days\">\n <div\n class=\"daterangepicker-container__day\"\n [ngClass]=\"{\n 'selected-same-day': day.isSelectedStartDay && day.isSelectedEndDay,\n 'selected-start-day': day.isSelectedStartDay,\n 'selected-end-day': day.isSelectedEndDay,\n 'disabled-day': day.isDisabledDay,\n 'in-range-day': day.inRangeDay,\n 'is-valid-date': day.date > 0 && !(day.isSelectedStartDay && day.isSelectedEndDay)\n }\"\n *ngFor=\"let day of nextMonthDates()\"\n (click)=\"selectDay('RIGHT', day)\"\n (keyup.enter)=\"selectDay('RIGHT', day)\"\n >\n <span *ngIf=\"day.date > 0\"\n [tabindex]=\"day.isDisabledDay ? -1 : 0\"\n [attr.aria-label]=\"retractDayMonth(day.date, nextMonth(), nextYearNumber())\">\n {{ day.date }}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n \n <!-- Time Selection Section -->\n <div class=\"daterangepicker-container__time\" *ngIf=\"data().dpConfig.enableTime === true\">\n <div class=\"time-section\">\n <h4>From</h4>\n <div class=\"time-inputs\">\n <input \n type=\"number\" \n [ngModel]=\"is12HourFormat() ? startHour() : startHour24()\" \n (ngModelChange)=\"is12HourFormat() ? startHourSignal.set($event) : startHour24Signal.set($event); onStartHourInput()\"\n [min]=\"is12HourFormat() ? 1 : 0\" \n [max]=\"is12HourFormat() ? 12 : 23\" \n step=\"1\"\n class=\"time-input hour-input\"\n placeholder=\"HH\">\n <span class=\"time-separator\">:</span>\n <input \n type=\"number\" \n [ngModel]=\"startMinute()\" (ngModelChange)=\"startMinuteSignal.set($event)\" \n (input)=\"onStartMinuteInput()\"\n min=\"0\" \n max=\"59\" \n step=\"1\"\n class=\"time-input minute-input\"\n placeholder=\"MM\">\n <select \n [ngModel]=\"startAmPm()\" (ngModelChange)=\"startAmPmSignal.set($event)\" \n class=\"am-pm-selector\"\n *ngIf=\"is12HourFormat()\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n \n <div class=\"time-section\">\n <h4>To</h4>\n <div class=\"time-inputs\">\n <input \n type=\"number\" \n [ngModel]=\"is12HourFormat() ? endHour() : endHour24()\" \n (ngModelChange)=\"is12HourFormat() ? endHourSignal.set($event) : endHour24Signal.set($event); onEndHourInput()\"\n [min]=\"is12HourFormat() ? 1 : 0\" \n [max]=\"is12HourFormat() ? 12 : 23\" \n step=\"1\"\n class=\"time-input hour-input\"\n placeholder=\"HH\">\n <span class=\"time-separator\">:</span>\n <input \n type=\"number\" \n [ngModel]=\"endMinute()\" (ngModelChange)=\"endMinuteSignal.set($event)\" \n (input)=\"onEndMinuteInput()\"\n min=\"0\" \n max=\"59\" \n step=\"1\"\n class=\"time-input minute-input\"\n placeholder=\"MM\">\n <select \n [ngModel]=\"endAmPm()\" (ngModelChange)=\"endAmPmSignal.set($event)\" \n class=\"am-pm-selector\"\n *ngIf=\"is12HourFormat()\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n \n <div class=\"daterangepicker__footer\">\n <button mis-button type=\"none\" id='mobile-footer-btn' (click)=\"cancelDatePicker()\">Cancel</button>\n <button mis-button type=\"primary\" id=\"mobile-footer-btn\" (click)=\"applyDates()\" [disabled]=\"!isDatesValid()\">Apply</button>\n </div>\n</div>", styles: [":root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3;--brand-primary: #0937B2;--brand-primary-light: #3C68D0;--brand-primary-dark: #062A99;--brand-primary-darker: #041F80;--brand-primary-lighter: #638FE7;--brand-primary-lightest: #CBDDFB;--brand-primary-hover: #F0F3FA;--brand-primary-active: #DAE1F3;--brand-secondary: #ED711C;--brand-secondary-light: #F09E65;--brand-secondary-dark: #B23600;--brand-secondary-lighter: #FFC6F2;--brand-accent: #10ADAE;--brand-accent-light: #16CBBC;--brand-accent-dark: #035F6B;--brand-accent-lighter: #ACDADA;--brand-success: #38AF49;--brand-success-light: #4CAF50;--brand-success-dark: #216531;--brand-success-lighter: #E4F5E9;--brand-success-lightest: #F1FFF3;--brand-error: #B00020;--brand-error-light: #F04E4E;--brand-error-dark: #A60060;--brand-error-lighter: #FAE1EA;--brand-error-lightest: #FDF2F2;--brand-warning: #FF9D00;--brand-warning-light: #D4900C;--brand-warning-dark: #624000;--brand-warning-lighter: #F4E7C3;--brand-warning-lightest: #FAEFED;--brand-info: #0091FF;--brand-info-light: #35A1FF;--brand-info-dark: #0087B2;--brand-info-lighter: #CFECF9;--text-primary: #181F33;--text-secondary: #6A737D;--text-tertiary: #929DAB;--text-disabled: #929DAB;--text-primary-87: rgba(24, 31, 51, .87);--text-primary-60: rgba(24, 31, 51, .6);--text-primary-38: rgba(24, 31, 51, .38);--text-primary-12: rgba(24, 31, 51, .12);--bg-primary: #FFFFFF;--bg-secondary: #FAFAFA;--bg-tertiary: #F5F5F5;--bg-overlay: rgba(0, 0, 0, .32);--bg-overlay-light: rgba(0, 0, 0, .12);--bg-overlay-lighter: rgba(0, 0, 0, .08);--bg-overlay-lightest: rgba(0, 0, 0, .04);--border-primary: #E0E0E0;--border-secondary: #D6DCE2;--border-tertiary: #C8CDD3;--border-light: #F1F4F8;--border-primary-12: rgba(0, 0, 0, .12);--border-primary-08: rgba(0, 0, 0, .08);--border-primary-06: rgba(0, 0, 0, .06);--shadow-primary: rgba(0, 0, 0, .12);--shadow-secondary: rgba(0, 0, 0, .08);--shadow-tertiary: rgba(0, 0, 0, .04);--shadow-light: rgba(0, 0, 0, .06);--status-available: #929DAB;--status-unavailable: #CCD3DA;--status-hotseat: #857BFF;--status-multiteam: #10ADAE;--status-selected: #10ADAE;--status-upcoming: #D4900C;--status-room: #38AF49;--status-room-booked: #B23600;--status-room-unavailable: #181F33;--team-color-1: #F8C52E;--team-color-2: #FA8E20;--team-color-3: #987CDD;--team-color-4: #16CBBC;--team-color-5: #E65010;--team-color-6: #A60060;--team-color-7: #ED323B;--team-color-8: #35A1FF;--team-color-9: #80D348}.daterangepicker-container{background:var(--bg-primary, #FFFFFF);border:1px solid var(--border-primary, #E0E0E0);box-shadow:0 12px 24px #0000001f,0 4px 8px #0000001f;border-radius:12px;display:flex;flex-direction:column;font-family:Lato;overflow:hidden;-webkit-user-select:none;user-select:none}@media only screen and (max-width: 900px){.daterangepicker-container{max-width:100vw;border:none}}.daterangepicker-container .daterangepicker-container__view{display:flex;gap:24px;padding:16px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__ranges{display:flex;flex-direction:column}.daterangepicker-container .daterangepicker-container__view .mis-btn{background:none;outline:none;border:none;cursor:pointer;border-radius:4px;vertical-align:middle;text-align:center;box-sizing:border-box;display:flex;align-items:center;text-decoration:none;justify-content:center;padding:10px 16px;font-size:16px;line-height:24px;background-color:transparent;color:var(--brand-primary, #0937B2)}.daterangepicker-container .daterangepicker-container__view .active-range{background-color:var(--brand-primary-lightest, #CBDDFB)}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view{flex-direction:column;align-items:center;position:fixed;bottom:0;left:0;background-color:#fff;width:100%;max-height:68vh;overflow-y:auto;border-radius:30px;gap:24px;padding:10% 0 30%;box-shadow:0 -4px 8px 10000px #0000001f;scrollbar-width:none;-ms-overflow-style:none}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__view::-webkit-scrollbar{display:none}}.daterangepicker-container .daterangepicker-container__view .datepicker__left,.daterangepicker-container .daterangepicker-container__view .datepicker__right{display:flex;flex-direction:column}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .datepicker__left,.daterangepicker-container .daterangepicker-container__view .datepicker__right{width:90%}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu{display:flex;height:32px;justify-content:space-between;align-items:center;width:100%;padding-bottom:10%}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu span{font-size:16px;font-style:normal;font-weight:700;line-height:24px;letter-spacing:.2px;text-align:center}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu span{margin:0 auto;font-size:4vw}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon{height:20px;width:20px;display:flex;align-items:center;justify-content:center;border-radius:4px;padding:4px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon.disabled-month{opacity:.5;cursor:not-allowed}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon:not(.disabled-month):hover{cursor:pointer;background-color:var(--brand-primary-lightest, #CBDDFB)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon:nth-child(1){transform:rotate(180deg)}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .daterangepicker-container__arrow__icon{width:7%}}@media only screen and (min-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .mobile_view{display:none}}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__header__prabu .pc_view{display:none}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body{height:100%;width:252px}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body{width:100%}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays{width:100%;display:flex;padding-bottom:10px}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays{display:flex;flex-direction:row;flex-wrap:wrap;flex:0 0 14.2857142857%}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday{width:36px;height:18px;text-align:center}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday{margin:0 auto}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday span{font-size:12px;font-style:normal;font-weight:400;line-height:18px;letter-spacing:.2px;text-align:center;color:var(--text-secondary, #6A737D)}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday span{font-size:3vw}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__weekdays .daterangepicker-container__weekday span.current-day{font-weight:700;letter-spacing:.25px;color:var(--text-primary, #181F33)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days{display:flex;flex-wrap:wrap}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days{display:flex;flex-direction:row;flex-wrap:wrap;flex:0 0 14.2857142857%}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day{width:36px;height:36px;display:flex;align-items:center;justify-content:center}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day{flex:0 0 14.2857142857%;width:14.2857142857%;height:14.2857142857%;aspect-ratio:1}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day:not(.in-range-day):not(.selected-start-day):not(.selected-end-day){border-radius:4px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.disabled-day{cursor:default}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.disabled-day:hover{background-color:transparent}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.disabled-day>span{color:var(--text-secondary, #6A737D)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.is-valid-date:not(.disabled-day):not(.selected-start-day):not(.selected-end-day)>span{color:var(--text-primary, #181F33)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day.is-valid-date:not(.disabled-day):not(.selected-start-day):not(.selected-end-day):hover{background-color:var(--brand-primary-lightest, #CBDDFB);cursor:pointer}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span{font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.2px;text-align:center;color:var(--text-primary, #181F33)}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span{font-size:3.4vw}}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span.current-day{font-weight:700;letter-spacing:.25px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span.selected-day{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .daterangepicker-container__day span.disabled-day{color:var(--text-secondary, #6A737D)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-same-day{background-color:var(--brand-primary, #0937B2);border-radius:50%!important}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-same-day>span{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-start-day{background-color:var(--brand-primary, #0937B2);border-radius:20px 4px 4px 20px}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-start-day>span{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-end-day{background-color:var(--brand-primary, #0937B2);border-radius:0 20px 20px 0}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .selected-end-day>span{color:var(--bg-primary, #FFFFFF)}.daterangepicker-container .daterangepicker-container__view .daterangepicker-container__body .daterangepicker-container__days .in-range-day:not(.disabled-day){background-color:var(--brand-primary-lightest, #CBDDFB)}.daterangepicker-container .daterangepicker-container__time{border-top:1px solid var(--border-primary, #E0E0E0);padding:16px 24px;background-color:#f8f9fa;display:flex;gap:24px}.daterangepicker-container .daterangepicker-container__time .time-section{flex:1}.daterangepicker-container .daterangepicker-container__time .time-section h4{margin:0 0 8px;font-size:14px;font-weight:600;color:#333}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs{display:flex;align-items:center;gap:8px}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-input{width:60px;padding:8px;border:1px solid #ddd;border-radius:4px;text-align:center;font-size:14px}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-input:focus{outline:none;border-color:var(--brand-primary, #0937B2);box-shadow:0 0 0 2px #0937b233}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-input.hour-input,.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-input.minute-input{width:50px}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .time-separator{font-size:16px;font-weight:600;color:#666}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .am-pm-selector{padding:7.1px 12px;border:1px solid #ddd;border-radius:4px;background-color:#fff;font-size:14px;cursor:pointer}.daterangepicker-container .daterangepicker-container__time .time-section .time-inputs .am-pm-selector:focus{outline:none;border-color:var(--brand-primary, #0937B2)}.daterangepicker-container .daterangepicker__footer{display:flex;justify-content:flex-end;border-top:1px solid var(--border-primary, #E0E0E0);padding:16px 24px;gap:24px}@media only screen and (max-width: 900px){.daterangepicker-container .daterangepicker__footer{justify-content:space-evenly;padding:2% 0;background-color:var(--bg-primary, #FFFFFF);position:fixed;bottom:0;left:0;width:100%;height:8vh;border-top:2px solid var(--text-disabled, #C8CDD3)}.daterangepicker-container .daterangepicker__footer #mobile-footer-btn{width:36%;font-size:3.8vw}}\n"] }]
|
|
969
1151
|
}], () => [{ type: undefined, decorators: [{
|
|
970
1152
|
type: Inject,
|
|
971
1153
|
args: [CONTAINER_DATA]
|
|
@@ -974,4 +1156,4 @@ export class TzDrpContainerComponent {
|
|
|
974
1156
|
args: ["keydown.esc"]
|
|
975
1157
|
}] }); })();
|
|
976
1158
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TzDrpContainerComponent, { className: "TzDrpContainerComponent" }); })();
|
|
977
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9kYXRlcmFuZ2VwaWNrZXJfdjIvdHotZHJwLWNvbnRhaW5lci90ei1kcnAtY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2RhdGVyYW5nZXBpY2tlcl92Mi90ei1kcnAtY29udGFpbmVyL3R6LWRycC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUzRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBR3BDLE9BQU8sS0FBZ0IsTUFBTSxPQUFPLENBQUM7QUFDckMsT0FBTyxRQUFRLE1BQU0sdUJBQXVCLENBQUM7QUFDN0MsT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUM7QUFDbkMsT0FBTyxhQUFhLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxjQUFjLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUM5RCxPQUFPLFNBQVMsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7OztJQ1B2QyxBQURGLDJCQUF3RCxpQkFLckQ7SUFGQyxvTkFBUywyQkFBaUIsS0FBQztJQUczQixZQUNGO0lBQ0YsQUFERSxpQkFBUyxFQUNMOzs7O0lBTkosY0FBaUU7SUFBakUsa0dBQWlFO0lBSS9ELGNBQ0Y7SUFERSw4Q0FDRjs7OztJQVJKLCtCQUEwRjtJQUN4RiwrRUFBd0Q7SUFTbEQsQUFBTiwyQkFBSyxpQkFBc0g7SUFBdkIsbUxBQVMsbUJBQVksS0FBQztJQUFDLDRCQUFZO0lBQzNJLEFBRHFKLEFBQVYsaUJBQVMsRUFBTyxFQUNySjs7OztJQVZvQixjQUErQjtJQUEvQiw2TUFBK0I7SUFTdkIsZUFBcUU7SUFBckUsbUdBQXFFOzs7SUE2QzdGLEFBREYsK0JBQW1GLFdBQzNFO0lBQUEsWUFBbUI7SUFDM0IsQUFEMkIsaUJBQU8sRUFDNUI7OztJQURFLGVBQW1CO0lBQW5CLHNDQUFtQjs7O0lBa0J6QixnQ0FFcUY7SUFDbkYsWUFDRjtJQUFBLGlCQUFPOzs7O0lBSEwsd0RBQXVDOztJQUV2QyxjQUNGO0lBREUsNENBQ0Y7Ozs7SUFsQkYsK0JBYUM7SUFEQyxBQURBLDBNQUFTLGlCQUFVLE1BQU0sU0FBTSxLQUFDLHlNQUNqQixpQkFBVSxNQUFNLFNBQU0sS0FBQztJQUV0QyxrRkFFcUY7SUFHdkYsaUJBQU07OztJQWpCSixtUkFPRTtJQUtLLGNBQWtCO0lBQWxCLHNDQUFrQjs7O0lBaUN6QixBQURGLCtCQUFtRixXQUMzRTtJQUFBLFlBQW1CO0lBQzNCLEFBRDJCLGlCQUFPLEVBQzVCOzs7SUFERSxlQUFtQjtJQUFuQixzQ0FBbUI7OztJQWtCekIsZ0NBRStFO0lBQzdFLFlBQ0Y7SUFBQSxpQkFBTzs7OztJQUhMLHlEQUF1Qzs7SUFFdkMsY0FDRjtJQURFLDZDQUNGOzs7O0lBbEJGLCtCQWFDO0lBREMsQUFEQSwyTUFBUyxpQkFBVSxPQUFPLFVBQU0sS0FBQywwTUFDbEIsaUJBQVUsT0FBTyxVQUFNLEtBQUM7SUFFdkMsa0ZBRStFO0lBR2pGLGlCQUFNOzs7SUFqQkosNFJBT0U7SUFLSyxjQUFrQjtJQUFsQix1Q0FBa0I7Ozs7SUFtQzdCLGtDQUcyQjtJQUZELHFOQUFpQixrQ0FBMkIsS0FBQztJQUdyRSxrQ0FBbUI7SUFBQSxrQkFBRTtJQUFBLGlCQUFTO0lBQzlCLGtDQUFtQjtJQUFBLGtCQUFFO0lBQ3ZCLEFBRHVCLGlCQUFTLEVBQ3ZCOzs7SUFMUCw0Q0FBdUI7Ozs7SUErQnpCLGtDQUcyQjtJQUZILHNOQUFpQixnQ0FBeUIsS0FBQztJQUdqRSxrQ0FBbUI7SUFBQSxrQkFBRTtJQUFBLGlCQUFTO0lBQzlCLGtDQUFtQjtJQUFBLGtCQUFFO0lBQ3ZCLEFBRHVCLGlCQUFTLEVBQ3ZCOzs7SUFMUCwwQ0FBcUI7Ozs7SUF0RHpCLEFBREYsQUFERiwrQkFBdUYsY0FDM0QsU0FDcEI7SUFBQSxvQkFBSTtJQUFBLGlCQUFLO0lBRVgsQUFERiwrQkFBeUIsZ0JBU0o7SUFMakIsb0xBQWlCLHVCQUFnQixHQUFHLGtDQUEyQixHQUFHLG9DQUE2Qix3QkFBRSx5QkFBa0IsS0FBQztJQUh0SCxpQkFRbUI7SUFDbkIsZ0NBQTZCO0lBQUEsaUJBQUM7SUFBQSxpQkFBTztJQUNyQyxpQ0FRbUI7SUFMakIsQUFEMEIsME1BQWlCLG9DQUE2QixLQUFDLHVLQUNoRSwyQkFBb0IsS0FBQztJQUhoQyxpQkFRbUI7SUFDbkIsc0ZBRzJCO0lBSy9CLEFBREUsaUJBQU0sRUFDRjtJQUdKLEFBREYsZ0NBQTBCLFVBQ3BCO0lBQUEsbUJBQUU7SUFBQSxpQkFBSztJQUVULEFBREYsZ0NBQXlCLGlCQVNKO0lBTGpCLHFMQUFpQix1QkFBZ0IsR0FBRyxnQ0FBeUIsR0FBRyxrQ0FBMkIsd0JBQUUsdUJBQWdCLEtBQUM7SUFIaEgsaUJBUW1CO0lBQ25CLGlDQUE2QjtJQUFBLGtCQUFDO0lBQUEsaUJBQU87SUFDckMsa0NBUW1CO0lBTGpCLEFBRHdCLDJNQUFpQixrQ0FBMkIsS0FBQyx3S0FDNUQseUJBQWtCLEtBQUM7SUFIOUIsaUJBUW1CO0lBQ25CLHdGQUcyQjtJQU1qQyxBQURFLEFBREUsaUJBQU0sRUFDRixFQUNGOzs7SUExREUsZUFBMEQ7SUFHMUQsQUFEQSxBQUZBLDZGQUEwRCx3Q0FFMUIsMENBQ0U7SUFPbEMsZUFBeUI7SUFBekIsOENBQXlCO0lBVXhCLGNBQXNCO0lBQXRCLDhDQUFzQjtJQVl2QixlQUFzRDtJQUd0RCxBQURBLEFBRkEseUZBQXNELHdDQUV0QiwwQ0FDRTtJQU9sQyxlQUF1QjtJQUF2Qiw0Q0FBdUI7SUFVdEIsY0FBc0I7SUFBdEIsOENBQXNCOztBRHhMakMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN4QixLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ2hDLEtBQUssQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDNUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQU83QixNQUFNLE9BQU8sdUJBQXVCO0lBOERsQyxZQUFvQyxJQUFxQixFQUFVLEtBQW1CO1FBQW5CLFVBQUssR0FBTCxLQUFLLENBQWM7UUE3RHJFLHVCQUFrQixHQUFHLGNBQWMsQ0FBQztRQUU3QyxrQkFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRTtZQUNsQyxPQUFPLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3hCLENBQUMsQ0FBQztRQUNNLGdCQUFXLEdBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVsRixnQ0FBZ0M7UUFDZixtQkFBYyxHQUFHLE1BQU0sQ0FBYSxFQUFFLENBQUMsQ0FBQztRQUN4Qyw2QkFBd0IsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsdUJBQWtCLEdBQUcsTUFBTSxDQUFnQixTQUFTLENBQUMsQ0FBQztRQUN0RCw0QkFBdUIsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsNEJBQXVCLEdBQUcsTUFBTSxDQUF1QixFQUFFLENBQUMsQ0FBQztRQUMzRCwwQkFBcUIsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsb0JBQWUsR0FBRyxNQUFNLENBQWdCLFNBQVMsQ0FBQyxDQUFDO1FBQ25ELHlCQUFvQixHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUN6Qyx5QkFBb0IsR0FBRyxNQUFNLENBQXVCLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELGtDQUE2QixHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN2RCw4QkFBeUIsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbkQsMkJBQXNCLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2hELDZCQUF3QixHQUFHLE1BQU0sQ0FBdUIsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVGLHVCQUFrQixHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUM1Qyw0QkFBdUIsR0FBRyxNQUFNLENBQVMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFbkYseUJBQXlCO1FBQ2hCLG9CQUFlLEdBQUcsTUFBTSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLHNCQUFpQixHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUN0QyxvQkFBZSxHQUFHLE1BQU0sQ0FBUyxJQUFJLENBQUMsQ0FBQztRQUN2QyxrQkFBYSxHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUNuQyxvQkFBZSxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUNwQyxrQkFBYSxHQUFHLE1BQU0sQ0FBUyxJQUFJLENBQUMsQ0FBQztRQUNyQyxzQkFBaUIsR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDdkMsb0JBQWUsR0FBRyxNQUFNLENBQVMsRUFBRSxDQUFDLENBQUM7UUFFOUMsMENBQTBDO1FBQzFDLGFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDakQsdUJBQWtCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7UUFDckUsaUJBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUN6RCxzQkFBaUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQztRQUNuRSxzQkFBaUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQztRQUNuRSxvQkFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDbkQsbUJBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUM3RCxtQkFBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQzdELDRCQUF1QixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLHdCQUFtQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLHFCQUFnQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLHVCQUFrQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLGlCQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFDekQsc0JBQWlCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUM7UUFFbkUseUNBQXlDO1FBQ3pDLGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDbkQsZ0JBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUN2RCxjQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELFlBQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDL0MsY0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNuRCxZQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLGdCQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDdkQsY0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUdqRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN6RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFFRCx5RUFBeUU7UUFDekUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVELGtEQUFrRDtRQUNsRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFO2dCQUMvQixJQUFJLENBQUM7b0JBQ0gsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNqRixDQUFDO2dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7b0JBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUN4RSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7WUFDSCxDQUFDLENBQUM7UUFDSixDQUFDO1FBRUQsMENBQTBDO1FBQzFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1RCxLQUFLLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUMvQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEtBQUs7U0FDbkQsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRztnQkFDbkIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7Z0JBQ3JCLE1BQU0sRUFBRSxXQUFXO2FBQ3BCLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUU1QixJQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFRLEVBQUUsS0FBVSxFQUFFLElBQVM7UUFDN0MsT0FBTyxHQUFHLEdBQUcsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUdELFVBQVU7UUFDUixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0csT0FBTztRQUNULENBQUM7UUFFRCw2RUFBNkU7UUFDN0UsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxTQUFTLENBQUM7UUFDaEksTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxPQUFPLENBQUM7UUFFMUgsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxlQUFlLElBQUksZUFBZSxLQUFLLGNBQWMsSUFBSSxlQUFlLEtBQUssV0FBVyxJQUFJLGVBQWUsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUM1SCxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0csT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzVFLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUUvRixJQUFJLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDMUUsSUFBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7WUFDRCxJQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckMsQ0FBQztZQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCw2REFBNkQ7UUFDN0QsSUFBSSxlQUFlLElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRSxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN4RyxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0SCxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pILENBQUM7SUFFTyxtQkFBbUI7UUFDekIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3pILE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUksSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsNkJBQTZCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDMUYsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUksSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDdkYsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsU0FBOEI7UUFDMUMsSUFBSSxTQUFTLEdBQVUsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7UUFDM0csSUFBSSxTQUFTLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDMUIsU0FBUyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7YUFBTSxJQUFJLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsSUFBSSxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0RSxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxFQUFFLElBQUksU0FBUyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzNFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQzthQUFLLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxJQUFJLFNBQVMsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN6RSxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDNUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO2FBQUksQ0FBQztZQUNMLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFhLEVBQUUsaUJBQXlCO1FBQzVELElBQUksS0FBSyxHQUF5QixFQUFFLENBQUM7UUFDckMsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9FLEtBQUssSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFLFdBQVcsSUFBSSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUNwRSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzVFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUQsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDO1lBQ3hFLDRFQUE0RTtZQUM1RSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDbkIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBRW5CLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQztvQkFDSCx3Q0FBd0M7b0JBQ3hDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzVELE9BQU8sR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO29CQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7d0JBQ3ZCLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN6RSxDQUFDO2dCQUNILENBQUM7Z0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztvQkFDZixPQUFPLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNqRCxDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQztvQkFDSCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM1RCxPQUFPLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztvQkFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO3dCQUN2QixPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDekUsQ0FBQztnQkFDSCxDQUFDO2dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7b0JBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDakQsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLENBQUMsYUFBYSxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDbkQsYUFBYSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQy9DLENBQUM7WUFDRCxJQUFJLENBQUMsYUFBYSxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDbkQsYUFBYSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2hELENBQUM7WUFDRCxJQUNFLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLGVBQWUsR0FBRyxDQUFDO2dCQUN4QyxDQUFDLGFBQWE7Z0JBQ2QsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxTQUFTLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQzlHLENBQUM7Z0JBQ0QsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdHLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDekYsYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ2pELENBQUM7WUFDRCxNQUFNLFlBQVksR0FDaEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDN0csSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUV6RCxnRkFBZ0Y7WUFDaEYsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxTQUFTLENBQUM7WUFDaEksTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxPQUFPLENBQUM7WUFFMUgsdUVBQXVFO1lBQ3ZFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFN0QsTUFBTSxrQkFBa0IsR0FDdEIsQ0FBQyxhQUFhO2dCQUNkLENBQUMsZUFBZSxJQUFJLEtBQUssQ0FBQztnQkFDMUIsYUFBYSxLQUFLLGVBQWUsQ0FBQztZQUVwQyxNQUFNLGdCQUFnQixHQUNwQixDQUFDLGFBQWE7Z0JBQ2QsQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDO2dCQUN4QixhQUFhLEtBQUssYUFBYSxDQUFDO1lBRWxDLGtFQUFrRTtZQUNsRSxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUM3RixNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUV2RixNQUFNLHdCQUF3QixHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDeEcsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBRXBHLE1BQU0sVUFBVSxHQUNkLFNBQVMsSUFBSSxPQUFPO2dCQUNwQix3QkFBd0I7Z0JBQ3hCLHVCQUF1QixDQUFDO1lBQzFCLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ1QsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNuQixZQUFZO2dCQUNaLGtCQUFrQjtnQkFDbEIsZ0JBQWdCO2dCQUNoQixVQUFVO2dCQUNWLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLElBQUksRUFBRTtnQkFDNUcsYUFBYTthQUNkLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsU0FBUyxDQUFDLElBQXNCLEVBQUUsR0FBdUI7UUFFdkQsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzFELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxRQUFRLEdBQUcsS0FBSyxFQUFFO3FCQUNyQixJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO3FCQUNwRixLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO3FCQUN2RixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUVsQiw0REFBNEQ7Z0JBQzVELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsU0FBUyxDQUFDO2dCQUM5SCxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFFN0YscUZBQXFGO2dCQUNyRixJQUFJLFNBQVMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUNuRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDO3dCQUNoQyxTQUFTLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7d0JBQ3JELE9BQU8sRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQzt3QkFDbkQsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtxQkFDNUMsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3ZDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDakcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDbEMsT0FBTztnQkFDVCxDQUFDO2dCQUVELDRFQUE0RTtnQkFDNUUsSUFBSSxTQUFTLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDckQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQzt3QkFDaEMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO3dCQUNyRCxPQUFPLEVBQUUsSUFBSTt3QkFDYixrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO3FCQUM1QyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDMUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNqRyxPQUFPO2dCQUNULENBQUM7Z0JBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQztvQkFDaEMsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUU7b0JBQ2xDLE9BQU8sRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztvQkFDbkQsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtpQkFDNUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUM7b0JBQ2hDLFNBQVMsRUFBRSxLQUFLLEVBQUU7eUJBQ2YsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzt5QkFDcEYsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQzt5QkFDdkYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7eUJBQ2QsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztvQkFDcEMsT0FBTyxFQUFFLElBQUk7b0JBQ2Isa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtpQkFDNUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2pHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3pGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO0lBQ0QsV0FBVyxDQUFDLElBQWU7UUFDekIsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBRWxCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWhELE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakUsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU3RCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQzlELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDckcsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUksTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1SSxNQUFNLGNBQWMsR0FDbEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNELENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRTNELElBQUksQ0FBQyxjQUFjLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyw2REFBNkQsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMzRixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVuRCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNwRSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFFRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDO1lBQ2hDLFNBQVMsRUFBRSxZQUFZO1lBQ3ZCLE9BQU8sRUFBRSxVQUFVO1lBQ25CLGtCQUFrQixFQUFFLElBQUksQ0FBQyxLQUFLO1NBQy9CLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVqRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3hILENBQUM7SUFDRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDO1lBQ2hDLFNBQVMsRUFBRSxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUk7WUFDYixrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1NBQzVDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRUQsVUFBVTtRQUNSLCtEQUErRDtRQUMvRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMzQyxJQUFJLFNBQWlCLENBQUM7WUFDdEIsSUFBSSxPQUFlLENBQUM7WUFFcEIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztnQkFDMUIsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztnQkFDcEYsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUM5RSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDeEUsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNwRSxDQUFDO1lBRUQscUZBQXFGO1lBQ3JGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsU0FBUyxDQUFDO1lBQzVILE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsT0FBTyxDQUFDO1lBRXRILE1BQU0saUJBQWlCLEdBQUcsYUFBYSxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUM7WUFDMUQsTUFBTSxlQUFlLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUM7WUFFcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQ25CLFNBQVMsRUFBRSxpQkFBaUI7Z0JBQzVCLE9BQU8sRUFBRSxlQUFlO2FBQ3pCLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQztRQUN4RCxDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELHVCQUF1QjtJQUN2QixnQkFBZ0I7UUFDZCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRSxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqRSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQVk7UUFDNUIsK0JBQStCO1FBQy9CLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7WUFDMUIsdUJBQXVCO1lBQ3ZCLElBQUksSUFBSSxHQUFHLENBQUM7Z0JBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUN2QixJQUFJLElBQUksR0FBRyxFQUFFO2dCQUFFLElBQUksR0FBRyxFQUFFLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTix1QkFBdUI7WUFDdkIsSUFBSSxJQUFJLEdBQUcsQ0FBQztnQkFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksSUFBSSxHQUFHLEVBQUU7Z0JBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsd0NBQXdDO0lBQ3hDLG1CQUFtQixDQUFDLElBQVk7UUFDOUIsSUFBSSxJQUFJLEdBQUcsQ0FBQztZQUFFLElBQUksR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxJQUFJLEdBQUcsRUFBRTtZQUFFLElBQUksR0FBRyxFQUFFLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBYztRQUNoQyxJQUFJLE1BQU0sR0FBRyxDQUFDO1lBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLE1BQU0sR0FBRyxFQUFFO1lBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUM3QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU0sY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRU8sVUFBVSxDQUFDLElBQVksRUFBRSxNQUFjLEVBQUUsSUFBWTtRQUMzRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1lBQzFCLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM3RixDQUFDO2FBQU0sQ0FBQztZQUNOLHNEQUFzRDtZQUN0RCxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNyRixDQUFDO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQiwyRUFBMkU7UUFDM0UsSUFBSSxvQkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDakMsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFL0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDL0UsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1RSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMseUJBQXlCO2dCQUM3RSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDckMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBQzlCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0UsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4RSxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMseUJBQXlCO2dCQUMzRSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDdEMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDO1FBRUQseURBQXlEO1FBQ3pELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxPQUFnQjtRQUM5QyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztRQUNwQixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRW5DLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7WUFDMUIseUNBQXlDO1lBQ3pDLElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQztZQUN6QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7WUFFaEIsSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ1osSUFBSSxHQUFHLElBQUksQ0FBQztZQUNkLENBQUM7aUJBQU0sSUFBSSxXQUFXLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ1osSUFBSSxHQUFHLElBQUksQ0FBQztZQUNkLENBQUM7aUJBQU0sSUFBSSxXQUFXLEdBQUcsRUFBRSxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sR0FBRyxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUMxQixJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksR0FBRyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDMUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLCtDQUErQztZQUMvQyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzFDLDBDQUEwQztnQkFDMUMsSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakMsQ0FBQztxQkFBTSxJQUFJLFdBQVcsS0FBSyxFQUFFLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO3FCQUFNLElBQUksV0FBVyxHQUFHLEVBQUUsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQzNDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDeEMsMENBQTBDO2dCQUMxQyxJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQixDQUFDO3FCQUFNLElBQUksV0FBVyxLQUFLLEVBQUUsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLENBQUM7cUJBQU0sSUFBSSxXQUFXLEdBQUcsRUFBRSxFQUFFLENBQUM7b0JBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsVUFBa0IsRUFBRSxPQUFnQjtRQUMxRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1lBQzFCLG1DQUFtQztZQUNuQyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDekQsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUVwQyxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDL0IseUNBQXlDO29CQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUMxRyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDN0IseUNBQXlDO29CQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDeEcsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLGdDQUFnQztZQUNoQyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzlDLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRWxDLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1osbUNBQW1DO29CQUNuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNuQyw0RUFBNEU7b0JBQzVFLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUNqQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2pDLENBQUM7eUJBQU0sSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7d0JBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDakMsQ0FBQzt5QkFBTSxJQUFJLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQzt3QkFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO3dCQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDakMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUNqQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDakMsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sbUNBQW1DO29CQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ2pDLDRFQUE0RTtvQkFDNUUsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDL0IsQ0FBQzt5QkFBTSxJQUFJLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQzt3QkFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvQixDQUFDO3lCQUFNLElBQUksTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDO3dCQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7d0JBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvQixDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvQixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7d0hBanRCVSx1QkFBdUIsdUJBOERkLGNBQWM7b0VBOUR2Qix1QkFBdUI7WUFBdkIsd0dBQUEsZ0JBQVksSUFBVzs7WUN4QmxDLEFBREYsOEJBQW9ILGFBQ3JFO1lBQzNDLHlCQUF5QztZQUN6Qyx3RUFBMEY7WUFjdEYsQUFERixBQURGLDhCQUE4QixhQUMwQixhQVVuRDtZQUxDLEFBREEsa0dBQVUsNkJBQXlCLElBQUksa0JBQWMsVUFBVSxDQUFDLElBQUMsaUdBQ2pELDZCQUF5QixJQUFJLGtCQUFjLFVBQVUsQ0FBQyxJQUFDOztZQU12RSw4QkFBK0Y7WUFDN0YsMEJBR1E7WUFFWixBQURFLGlCQUFNLEVBQ0Y7O1lBQ04sNEJBQU07WUFBQyxhQUErQztZQUFBLGlCQUFPO1lBQzdELHVCQUFXO1lBRVgsK0JBU0M7WUFMQyxBQURBLG1HQUFVLHlCQUFxQixJQUFJLGtCQUFjLE1BQU0sQ0FBQyxJQUFDLGtHQUN6Qyx5QkFBcUIsSUFBSSxrQkFBYyxNQUFNLENBQUMsSUFBQzs7WUFNL0QsK0JBQStGO1lBQzdGLDJCQUdRO1lBR2QsQUFERSxBQURFLGlCQUFNLEVBQ0YsRUFDRjs7WUFFSixBQURGLGdDQUE2QyxlQUNNO1lBQy9DLDJFQUFtRjtZQUdyRixpQkFBTTtZQUNOLGdDQUE2QztZQUMzQywyRUFhQztZQVNQLEFBREUsQUFERSxpQkFBTSxFQUNGLEVBQ0Y7WUFFSixBQURGLGdDQUErQixjQUN5QjtZQUNwRCx1QkFBVztZQUNYLDZCQUFNO1lBQUMsYUFBeUM7WUFBQSxpQkFBTztZQUN2RCxnQ0FRQztZQUpDLEFBREEsbUdBQVUseUJBQXFCLElBQUksa0JBQWMsTUFBTSxDQUFDLElBQUMsa0dBQ3pDLHlCQUFxQixJQUFJLGtCQUFjLE1BQU0sQ0FBQyxJQUFDOztZQUsvRCwrQkFBK0Y7WUFDN0YsMkJBR1E7WUFHZCxBQURFLEFBREUsaUJBQU0sRUFDRixFQUNGOztZQUVKLEFBREYsZ0NBQTZDLGVBQ007WUFDL0MsMkVBQW1GO1lBR3JGLGlCQUFNO1lBQ04sZ0NBQTZDO1lBQzNDLDJFQWFDO1lBVVQsQUFERSxBQURFLEFBREUsaUJBQU0sRUFDRixFQUNGLEVBQ0Y7WUFHTiw2RUFBdUY7WUFtRXJGLEFBREYsZ0NBQXFDLGtCQUNnRDtZQUE3QixxR0FBUyxzQkFBa0IsSUFBQztZQUFDLHVCQUFNO1lBQUEsaUJBQVM7WUFDbEcsbUNBQTZHO1lBQXBELHFHQUFTLGdCQUFZLElBQUM7WUFBOEIsc0JBQUs7WUFFdEgsQUFERSxBQURvSCxpQkFBUyxFQUN2SCxFQUNGOztZQWpONkUsOENBQWdDO1lBR3pHLGVBQXdDO1lBQXhDLG1LQUF3QztZQW9CeEMsZUFFRTtZQUZGLG9GQUVFO1lBU0csZUFBK0M7WUFBL0MsaUZBQStDO1lBU3BELGVBRUU7WUFGRixnRkFFRTtZQVlrRSxlQUFhO1lBQWIsd0NBQWE7WUFlL0QsZUFBc0I7WUFBdEIsaURBQXNCO1lBZ0JuQyxlQUF5QztZQUF6QywyRUFBeUM7WUFNOUMsY0FFRTtZQUZGLGdGQUVFO1lBWWtFLGVBQWE7WUFBYix3Q0FBYTtZQWUvRCxlQUFtQjtZQUFuQiw4Q0FBbUI7WUFnQkMsY0FBdUM7WUFBdkMsNERBQXVDO1lBb0VILGVBQTRCO1lBQTVCLDhDQUE0Qjs7O2lGRHRMbkcsdUJBQXVCO2NBTG5DLFNBQVM7MkJBQ0UsWUFBWTs7c0JBa0VULE1BQU07dUJBQUMsY0FBYztnREE0RGxDLFVBQVU7a0JBRFQsWUFBWTttQkFBQyxhQUFhOztrRkF6SGhCLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9uSW5pdCwgc2lnbmFsLCBjb21wdXRlZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDT05UQUlORVJfREFUQSwgREFURV9GT1JNQVQgfSBmcm9tIFwiLi4vZGF0ZXJhbmdlcGlja2VyLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgSUN1cnJlbnRNb250aCwgSUN1cnJlbnRNb250aERhdGVzLCBJRGF0ZVBpY2tlckRhdGEsIElXZWVrRGF5LCBJU2VsZWN0ZWREYXRlc0NvbmZpZywgUmFuZ2VJdGVtIH0gZnJvbSBcIi4uL21vZGVscy9kcnAtY29uZmlnLm1vZGVsXCI7XG5pbXBvcnQgeyBnZXRNb250aCB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcIm1pcy1jcnlzdGFsLWRlc2lnbi1zeXN0ZW0vdG9hc3RcIjtcblxuaW1wb3J0IGRheWpzLCB7IERheWpzIH0gZnJvbSAnZGF5anMnO1xuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZSc7XG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMnO1xuaW1wb3J0IGlzU2FtZU9yQWZ0ZXIgZnJvbSAnZGF5anMvcGx1Z2luL2lzU2FtZU9yQWZ0ZXInO1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckJlZm9yZSc7XG5pbXBvcnQgY3VzdG9tUGFyc2VGb3JtYXQgZnJvbSAnZGF5anMvcGx1Z2luL2N1c3RvbVBhcnNlRm9ybWF0J1xuaW1wb3J0IGlzQmV0d2VlbiBmcm9tICdkYXlqcy9wbHVnaW4vaXNCZXR3ZWVuJztcbmRheWpzLmV4dGVuZChpc0JldHdlZW4pO1xuZGF5anMuZXh0ZW5kKHV0Yyk7XG5kYXlqcy5leHRlbmQodGltZXpvbmUpO1xuZGF5anMuZXh0ZW5kKGN1c3RvbVBhcnNlRm9ybWF0KTtcbmRheWpzLmV4dGVuZChpc1NhbWVPckFmdGVyKTtcbmRheWpzLmV4dGVuZChpc1NhbWVPckJlZm9yZSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtaXMtdHotZHJwXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vdHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBUekRycENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgQ1VTVE9NX1JBTkdFX0xBQkVMID0gXCJDdXN0b20gUmFuZ2VcIjtcbiAgZGF0YTogSURhdGVQaWNrZXJEYXRhO1xuICBwcml2YXRlIGRheWpzSW5zdGFuY2UgPSAoLi4uYXJncykgPT4ge1xuICAgIHJldHVybiBkYXlqcyguLi5hcmdzKTtcbiAgfTtcbiAgcHJpdmF0ZSByYXdXZWVrRGF5czogc3RyaW5nW10gPSBbXCJTVU5cIiwgXCJNT05cIiwgXCJUVUVcIiwgXCJXRURcIiwgXCJUSFVcIiwgXCJGUklcIiwgXCJTQVRcIl07XG4gIFxuICAvLyBTaWduYWwtYmFzZWQgc3RhdGUgbWFuYWdlbWVudFxuICBwcml2YXRlIHJlYWRvbmx5IHdlZWtEYXlzU2lnbmFsID0gc2lnbmFsPElXZWVrRGF5W10+KFtdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50TW9udGhOdW1iZXJTaWduYWwgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50TW9udGhTaWduYWwgPSBzaWduYWw8SUN1cnJlbnRNb250aD4oXCJKYW51YXJ5XCIpO1xuICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudE1vbnRoRGF0ZXNTaWduYWwgPSBzaWduYWw8SUN1cnJlbnRNb250aERhdGVzW10+KFtdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBuZXh0TW9udGhOdW1iZXJTaWduYWwgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBuZXh0TW9udGhTaWduYWwgPSBzaWduYWw8SUN1cnJlbnRNb250aD4oXCJKYW51YXJ5XCIpO1xuICBwcml2YXRlIHJlYWRvbmx5IG5leHRZZWFyTnVtYmVyU2lnbmFsID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmV4dE1vbnRoRGF0ZXNTaWduYWwgPSBzaWduYWw8SUN1cnJlbnRNb250aERhdGVzW10+KFtdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc1ByZXZpb3VzTW9udGhEaXNhYmxlZFNpZ25hbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNOZXh0TW9udGhEaXNhYmxlZFNpZ25hbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0aW9uU3RhcnRlZFNpZ25hbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsID0gc2lnbmFsPElTZWxlY3RlZERhdGVzQ29uZmlnPih7IHN0YXJ0RGF0ZTogbnVsbCwgZW5kRGF0ZTogbnVsbCB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc0RhdGVzVmFsaWRTaWduYWwgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGVkSXRlbUxhYmVsU2lnbmFsID0gc2lnbmFsPHN0cmluZz4odGhpcy5DVVNUT01fUkFOR0VfTEFCRUwpO1xuICBcbiAgLy8gVGltZSBzZWxlY3Rpb24gc2lnbmFsc1xuICByZWFkb25seSBzdGFydEhvdXJTaWduYWwgPSBzaWduYWw8bnVtYmVyPigxMik7XG4gIHJlYWRvbmx5IHN0YXJ0TWludXRlU2lnbmFsID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IHN0YXJ0QW1QbVNpZ25hbCA9IHNpZ25hbDxzdHJpbmc+KCdBTScpO1xuICByZWFkb25seSBlbmRIb3VyU2lnbmFsID0gc2lnbmFsPG51bWJlcj4oMTIpO1xuICByZWFkb25seSBlbmRNaW51dGVTaWduYWwgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcmVhZG9ubHkgZW5kQW1QbVNpZ25hbCA9IHNpZ25hbDxzdHJpbmc+KCdBTScpO1xuICByZWFkb25seSBzdGFydEhvdXIyNFNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDEyKTtcbiAgcmVhZG9ubHkgZW5kSG91cjI0U2lnbmFsID0gc2lnbmFsPG51bWJlcj4oMTIpO1xuICBcbiAgLy8gQ29tcHV0ZWQgcHJvcGVydGllcyBmb3IgdGVtcGxhdGUgYWNjZXNzXG4gIHdlZWtEYXlzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy53ZWVrRGF5c1NpZ25hbCgpKTtcbiAgY3VycmVudE1vbnRoTnVtYmVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSk7XG4gIGN1cnJlbnRNb250aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3VycmVudE1vbnRoU2lnbmFsKCkpO1xuICBjdXJyZW50WWVhck51bWJlciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSk7XG4gIGN1cnJlbnRNb250aERhdGVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbCgpKTtcbiAgbmV4dE1vbnRoTnVtYmVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKSk7XG4gIG5leHRNb250aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMubmV4dE1vbnRoU2lnbmFsKCkpO1xuICBuZXh0WWVhck51bWJlciA9IGNvbXB1dGVkKCgpID0+IHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwoKSk7XG4gIG5leHRNb250aERhdGVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5uZXh0TW9udGhEYXRlc1NpZ25hbCgpKTtcbiAgaXNQcmV2aW91c01vbnRoRGlzYWJsZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlzUHJldmlvdXNNb250aERpc2FibGVkU2lnbmFsKCkpO1xuICBpc05leHRNb250aERpc2FibGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pc05leHRNb250aERpc2FibGVkU2lnbmFsKCkpO1xuICBzZWxlY3Rpb25TdGFydGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3Rpb25TdGFydGVkU2lnbmFsKCkpO1xuICBsb2NhbFNlbGVjdGVkRGF0ZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpKTtcbiAgaXNEYXRlc1ZhbGlkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pc0RhdGVzVmFsaWRTaWduYWwoKSk7XG4gIHNlbGVjdGVkSXRlbUxhYmVsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZEl0ZW1MYWJlbFNpZ25hbCgpKTtcbiAgXG4gIC8vIFRpbWUgZnVuY3Rpb25hbGl0eSBjb21wdXRlZCBwcm9wZXJ0aWVzXG4gIHN0YXJ0SG91ciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhcnRIb3VyU2lnbmFsKCkpO1xuICBzdGFydE1pbnV0ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhcnRNaW51dGVTaWduYWwoKSk7XG4gIHN0YXJ0QW1QbSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhcnRBbVBtU2lnbmFsKCkpO1xuICBlbmRIb3VyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5lbmRIb3VyU2lnbmFsKCkpO1xuICBlbmRNaW51dGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVuZE1pbnV0ZVNpZ25hbCgpKTtcbiAgZW5kQW1QbSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZW5kQW1QbVNpZ25hbCgpKTtcbiAgc3RhcnRIb3VyMjQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXJ0SG91cjI0U2lnbmFsKCkpO1xuICBlbmRIb3VyMjQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVuZEhvdXIyNFNpZ25hbCgpKTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KENPTlRBSU5FUl9EQVRBKSBkYXRhOiBJRGF0ZVBpY2tlckRhdGEsIHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwuc2V0KHRoaXMuZGF0YS5kYXRlcyk7XG4gICAgdGhpcy5pc0RhdGVzVmFsaWRTaWduYWwuc2V0KGZhbHNlKTtcbiAgICBpZiAodGhpcy5kYXRhLmRhdGVzLnN0YXJ0RGF0ZSAmJiB0aGlzLmRhdGEuZGF0ZXMuZW5kRGF0ZSkge1xuICAgICAgdGhpcy5pc0RhdGVzVmFsaWRTaWduYWwuc2V0KHRydWUpO1xuICAgIH1cbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHNlbGVjdGVkSXRlbUxhYmVsIGZyb20gZGF0YS5zZWxlY3RlZFJhbmdlTGFiZWwgaWYgYXZhaWxhYmxlXG4gICAgaWYgKHRoaXMuZGF0YS5zZWxlY3RlZFJhbmdlTGFiZWwpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtTGFiZWxTaWduYWwuc2V0KHRoaXMuZGF0YS5zZWxlY3RlZFJhbmdlTGFiZWwpO1xuICAgIH1cbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGRheWpzSW5zdGFuY2Ugd2l0aCB0aW1lem9uZSBoYW5kbGluZ1xuICAgIGlmICh0aGlzLmRhdGE/LmRwQ29uZmlnPy50aW1lem9uZSkge1xuICAgICAgdGhpcy5kYXlqc0luc3RhbmNlID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gZGF5anMudHooYXJnc1swXSwgYXJnc1sxXSB8fCAnREQvTU0vWVlZWScsIHRoaXMuZGF0YS5kcENvbmZpZy50aW1lem9uZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdFcnJvciBwYXJzaW5nIGRhdGUgd2l0aCB0aW1lem9uZTonLCBlcnJvciwgJ2FyZ3M6JywgYXJncyk7XG4gICAgICAgICAgcmV0dXJuIGRheWpzKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFNldCBkZWZhdWx0IHZhbHVlcyBzYWZlbHkgdXNpbmcgc2lnbmFsc1xuICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldCh0aGlzLmRheWpzSW5zdGFuY2UoKS5tb250aCgpKTtcbiAgICB0aGlzLm5leHRNb250aE51bWJlclNpZ25hbC5zZXQodGhpcy5kYXlqc0luc3RhbmNlKCkuYWRkKDEsIFwibW9udGhcIikubW9udGgoKSk7XG4gICAgdGhpcy5jdXJyZW50TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcbiAgICB0aGlzLm5leHRNb250aFNpZ25hbC5zZXQoZ2V0TW9udGgodGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKSkpO1xuICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwuc2V0KHRoaXMuZGF5anNJbnN0YW5jZSgpLnllYXIoKSk7XG4gICAgdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbC5zZXQodGhpcy5kYXlqc0luc3RhbmNlKCkuYWRkKDEsIFwibW9udGhcIikueWVhcigpKTtcbiAgICB0aGlzLndlZWtEYXlzU2lnbmFsLnNldCh0aGlzLnJhd1dlZWtEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4gKHtcbiAgICAgIGxhYmVsOiBgJHtkYXlbMF19JHtkYXkuc2xpY2UoMSkudG9Mb3dlckNhc2UoKX1gLFxuICAgICAgaXNDdXJyZW50RGF5OiB0aGlzLmRheWpzSW5zdGFuY2UoKS5kYXkoKSA9PT0gaW5kZXhcbiAgICB9KSkpO1xuICAgIFxuICAgIGlmICghdGhpcy5kYXRhPy5kcENvbmZpZz8uZm9ybWF0KSB7XG4gICAgICB0aGlzLmRhdGEuZHBDb25maWcgPSB7XG4gICAgICAgIC4uLnRoaXMuZGF0YS5kcENvbmZpZyxcbiAgICAgICAgZm9ybWF0OiBEQVRFX0ZPUk1BVFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnREYXRlSW5zdGFuY2UoKTtcbiAgICB0aGlzLmNhbGN1bGF0ZU1pbk1heERheXMoKTtcbiAgICB0aGlzLmluaXRpYWxpemVUaW1lVmFsdWVzKCk7XG5cbiAgICBpZih0aGlzLmRhdGE/LnNob3dQcmV2TW9udGggJiYgIXRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQpe1xuICAgICAgdGhpcy5uYXZpZ2F0ZU1vbnRoKCdQUkVWSU9VUycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHJhY3REYXlNb250aChkYXk6IGFueSwgbW9udGg6IGFueSwgeWVhcjogYW55KTogYW55IHtcbiAgICByZXR1cm4gYCR7ZGF5fSAke21vbnRofSAke3llYXJ9YDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoXCJrZXlkb3duLmVzY1wiKVxuICBjbG9zZU9uRXNjKCkge1xuICAgIHRoaXMuY2FuY2VsRGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBjdXJyZW50RGF0ZUluc3RhbmNlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKT8uc3RhcnREYXRlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aERhdGVzU2lnbmFsLnNldCh0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSwgdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKSk7XG4gICAgICB0aGlzLm5leHRNb250aERhdGVzU2lnbmFsLnNldCh0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKSwgdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbCgpKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGZvciBwYXJzaW5nIChoYW5kbGUgYm90aCBkYXRlLW9ubHkgYW5kIGRhdGV0aW1lIGZvcm1hdHMpXG4gICAgY29uc3Qgc3RhcnREYXRlU3RyaW5nID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKT8uc3RhcnREYXRlPy5zcGxpdCgnICcpWzBdIHx8IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCk/LnN0YXJ0RGF0ZTtcbiAgICBjb25zdCBlbmREYXRlU3RyaW5nID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKT8uZW5kRGF0ZT8uc3BsaXQoJyAnKVswXSB8fCB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpPy5lbmREYXRlO1xuICAgIFxuICAgIC8vIFZhbGlkYXRlIGRhdGUgc3RyaW5ncyBiZWZvcmUgcGFyc2luZ1xuICAgIGlmICghc3RhcnREYXRlU3RyaW5nIHx8IHN0YXJ0RGF0ZVN0cmluZyA9PT0gJ0ludmFsaWQgRGF0ZScgfHwgc3RhcnREYXRlU3RyaW5nID09PSAndW5kZWZpbmVkJyB8fCBzdGFydERhdGVTdHJpbmcgPT09ICdudWxsJykge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkpO1xuICAgICAgdGhpcy5uZXh0TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwoKSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBzZWxlY3RlZFN0YXJ0RGF0ZSA9IHRoaXMuZGF5anNJbnN0YW5jZShzdGFydERhdGVTdHJpbmcsICdERC9NTS9ZWVlZJyk7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbmREYXRlID0gZW5kRGF0ZVN0cmluZyA/IHRoaXMuZGF5anNJbnN0YW5jZShlbmREYXRlU3RyaW5nLCAnREQvTU0vWVlZWScpIDogbnVsbDtcbiAgICBcbiAgICBpZiAoc2VsZWN0ZWRTdGFydERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLnNldChzZWxlY3RlZFN0YXJ0RGF0ZS55ZWFyKCkpO1xuICAgICAgdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbC5zZXQoc2VsZWN0ZWRTdGFydERhdGUuYWRkKDEsIFwibW9udGhcIikueWVhcigpKTtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldChzZWxlY3RlZFN0YXJ0RGF0ZS5nZXQoXCJtb250aFwiKSk7XG4gICAgICB0aGlzLm5leHRNb250aE51bWJlclNpZ25hbC5zZXQoc2VsZWN0ZWRTdGFydERhdGUuYWRkKDEsIFwibW9udGhcIikubW9udGgoKSk7XG4gICAgICBpZih0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpID09PSAtMSl7XG4gICAgICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldCgxMSk7XG4gICAgICB9XG4gICAgICBpZih0aGlzLm5leHRNb250aE51bWJlclNpZ25hbCgpID09PSAtMSl7XG4gICAgICAgIHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsLnNldCgxMSk7XG4gICAgICB9XG4gICAgICB0aGlzLmN1cnJlbnRNb250aFNpZ25hbC5zZXQoZ2V0TW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSkpO1xuICAgICAgdGhpcy5uZXh0TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcbiAgICB9XG4gICAgXG4gICAgLy8gSWYgd2UgaGF2ZSBhbiBlbmQgZGF0ZSwgdXNlIGl0IHRvIGRldGVybWluZSB0aGUgbmV4dCBtb250aFxuICAgIGlmIChzZWxlY3RlZEVuZERhdGUgJiYgc2VsZWN0ZWRFbmREYXRlLmlzVmFsaWQoKSAmJiBzZWxlY3RlZEVuZERhdGUuaXNBZnRlcihzZWxlY3RlZFN0YXJ0RGF0ZSwgJ21vbnRoJykpIHtcbiAgICAgIHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsLnNldChzZWxlY3RlZEVuZERhdGUubW9udGgoKSk7XG4gICAgICB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsLnNldChzZWxlY3RlZEVuZERhdGUueWVhcigpKTtcbiAgICAgIHRoaXMubmV4dE1vbnRoU2lnbmFsLnNldChnZXRNb250aCh0aGlzLm5leHRNb250aE51bWJlclNpZ25hbCgpKSk7XG4gICAgfVxuICAgIFxuICAgICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkpO1xuICAgICAgdGhpcy5uZXh0TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwoKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVNaW5NYXhEYXlzKCkge1xuICAgIGNvbnN0IGN1cnJlbnRJbnN0YW5jZSA9IHRoaXMuZGF5anNJbnN0YW5jZSgpLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKS5tb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKTtcbiAgICBjb25zdCBtaW5EYXRlID0gISF0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSA/IHRoaXMuZGF5anNJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgOiBkYXlqcygnaW52YWxpZCcpO1xuICAgIGlmIChtaW5EYXRlLmlzVmFsaWQoKSkge1xuICAgICAgdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZFNpZ25hbC5zZXQobWluRGF0ZS5pc1NhbWVPckFmdGVyKGN1cnJlbnRJbnN0YW5jZSwgXCJtb250aFwiKSk7XG4gICAgfVxuICAgIGNvbnN0IG1heERhdGUgPSAhIXRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlID8gdGhpcy5kYXlqc0luc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA6IGRheWpzKCdpbnZhbGlkJyk7XG4gICAgaWYgKG1heERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLmlzTmV4dE1vbnRoRGlzYWJsZWRTaWduYWwuc2V0KG1heERhdGUuaXNTYW1lT3JCZWZvcmUoY3VycmVudEluc3RhbmNlLCBcIm1vbnRoXCIpKTtcbiAgICB9XG4gIH1cblxuICBuYXZpZ2F0ZU1vbnRoKGRpcmVjdGlvbjogXCJORVhUXCIgfCBcIlBSRVZJT1VTXCIpOiB2b2lkIHtcbiAgICBsZXQgdGhpc01vbnRoOiBEYXlqcyA9IGRheWpzKCkueWVhcih0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpO1xuICAgIGlmIChkaXJlY3Rpb24gPT09IFwiTkVYVFwiKSB7XG4gICAgIHRoaXNNb250aCA9IHRoaXNNb250aC5hZGQoMSwgXCJtb250aFwiKTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gXCJQUkVWSU9VU1wiKSB7XG4gICAgIHRoaXNNb250aCA9IHRoaXNNb250aC5zdWJ0cmFjdCgxLCBcIm1vbnRoXCIpO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbC5zZXQodGhpc01vbnRoLm1vbnRoKCkpO1xuICAgIHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsLnNldCh0aGlzTW9udGguY2xvbmUoKS5hZGQoMSwgXCJtb250aFwiKS5tb250aCgpKTtcbiAgICB0aGlzLmN1cnJlbnRNb250aFNpZ25hbC5zZXQoZ2V0TW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXIoKSkpO1xuICAgIHRoaXMubmV4dE1vbnRoU2lnbmFsLnNldChnZXRNb250aCh0aGlzLm5leHRNb250aE51bWJlcigpKSk7XG4gICAgaWYgKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkgPT09IDAgJiYgZGlyZWN0aW9uID09PSBcIlBSRVZJT1VTXCIpIHtcbiAgICAgdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbC5zZXQodGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpIC0gMSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpID09PSAxMSAmJiBkaXJlY3Rpb24gPT09IFwiTkVYVFwiKSB7XG4gICAgIHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwuc2V0KHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwoKSArIDEpO1xuICAgIH1lbHNlIGlmICh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpID09PSAwICYmIGRpcmVjdGlvbiA9PT0gXCJORVhUXCIpIHtcbiAgICAgdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbC5zZXQodGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpICsgMSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm5leHRNb250aE51bWJlclNpZ25hbCgpID09PSAxMSAmJiBkaXJlY3Rpb24gPT09IFwiUFJFVklPVVNcIikge1xuICAgICB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsKCkgLSAxKTtcbiAgICB9ZWxzZXtcbiAgICAgdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbC5zZXQodGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXIoKSkpO1xuICAgIHRoaXMubmV4dE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlcigpLCB0aGlzLm5leHRZZWFyTnVtYmVyKCkpKTtcbiAgICB0aGlzLmNhbGN1bGF0ZU1pbk1heERheXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVEYXRlcyhtb250aDogbnVtYmVyLCBjdXJyZW50WWVhck51bWJlcjogbnVtYmVyKTogSUN1cnJlbnRNb250aERhdGVzW10ge1xuICAgIGxldCBkYXRlczogSUN1cnJlbnRNb250aERhdGVzW10gPSBbXTtcbiAgICBjb25zdCBkYXlzSW5Nb250aCA9IGRheWpzKCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRheXNJbk1vbnRoKCk7XG4gICAgZm9yIChsZXQgY3VycmVudERhdGUgPSAxOyBjdXJyZW50RGF0ZSA8PSBkYXlzSW5Nb250aDsgY3VycmVudERhdGUrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IGRheWpzKCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRhdGUoY3VycmVudERhdGUpO1xuICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGRhdGUuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgbGV0IGlzRGlzYWJsZWREYXkgPSB0aGlzLmRhdGEuZGF0ZXNEaXNhYmxlZC5zb21lKGQgPT4gZCA9PT0gZGF0ZVN0cmluZyk7XG4gICAgICAvLyBQYXJzZSBtaW4vbWF4IGRhdGVzIHNhZmVseSAtIHRyeSBkYXRlLW9ubHkgZm9ybWF0IGZpcnN0LCB0aGVuIGZ1bGwgZm9ybWF0XG4gICAgICBsZXQgbWluRGF0ZSA9IG51bGw7XG4gICAgICBsZXQgbWF4RGF0ZSA9IG51bGw7XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IG9ubHkgZm9yIGNvbXBhcmlzb25cbiAgICAgICAgICBjb25zdCBtaW5EYXRlU3RyID0gdGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUuc3BsaXQoJyAnKVswXTtcbiAgICAgICAgICBtaW5EYXRlID0gZGF5anMobWluRGF0ZVN0ciwgJ0REL01NL1lZWVknKTtcbiAgICAgICAgICBpZiAoIW1pbkRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICBtaW5EYXRlID0gZGF5anModGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0Vycm9yIHBhcnNpbmcgbWluIGRhdGU6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1heERhdGVTdHIgPSB0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZS5zcGxpdCgnICcpWzBdO1xuICAgICAgICAgIG1heERhdGUgPSBkYXlqcyhtYXhEYXRlU3RyLCAnREQvTU0vWVlZWScpO1xuICAgICAgICAgIGlmICghbWF4RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIG1heERhdGUgPSBkYXlqcyh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUud2FybignRXJyb3IgcGFyc2luZyBtYXggZGF0ZTonLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKCFpc0Rpc2FibGVkRGF5ICYmIG1pbkRhdGUgJiYgbWluRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgaXNEaXNhYmxlZERheSA9IG1pbkRhdGUuaXNBZnRlcihkYXRlLCBcImRheVwiKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNEaXNhYmxlZERheSAmJiBtYXhEYXRlICYmIG1heERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgIGlzRGlzYWJsZWREYXkgPSBtYXhEYXRlLmlzQmVmb3JlKGRhdGUsIFwiZGF5XCIpO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmRhdGE/LmRwQ29uZmlnPy5tYXhBbGxvd2VkUmFuZ2UgPiAwICYmXG4gICAgICAgICFpc0Rpc2FibGVkRGF5ICYmXG4gICAgICAgICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpPy5zdGFydERhdGUgPz8gZmFsc2UpICYmICghKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuZW5kRGF0ZSA/PyBmYWxzZSkpXG4gICAgICApIHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gZGF5anModGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKS5zdGFydERhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICBjb25zdCBtYXhFbmREYXRlID0gc3RhcnREYXRlLmNsb25lKCkuYWRkKHRoaXMuZGF0YS5kcENvbmZpZy5tYXhBbGxvd2VkUmFuZ2UgLSAxLCAnZGF5cycpO1xuICAgICAgICBpc0Rpc2FibGVkRGF5ID0gZGF0ZS5pc0FmdGVyKG1heEVuZERhdGUsICdkYXknKSBcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzQ3VycmVudERheSA9XG4gICAgICAgIHRoaXMuZGF5anNJbnN0YW5jZSgpLnllYXIoY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKG1vbnRoKS5kYXRlKGN1cnJlbnREYXRlKS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgPT09XG4gICAgICAgIHRoaXMuZGF5anNJbnN0YW5jZSgpLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgIFxuICAgICAgLy8gRXh0cmFjdCBkYXRlIHBhcnQgZm9yIGNvbXBhcmlzb24gKGhhbmRsZSBib3RoIGRhdGUtb25seSBhbmQgZGF0ZXRpbWUgZm9ybWF0cylcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZVN0cmluZyA9IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCk/LnN0YXJ0RGF0ZT8uc3BsaXQoJyAnKVswXSB8fCB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpPy5zdGFydERhdGU7XG4gICAgICBjb25zdCBlbmREYXRlU3RyaW5nID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKT8uZW5kRGF0ZT8uc3BsaXQoJyAnKVswXSB8fCB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpPy5lbmREYXRlO1xuICAgICAgXG4gICAgICAvLyBVc2UgdGhlIGN1c3RvbSBmb3JtYXQgZm9yIGNvbXBhcmlzb24gaW5zdGVhZCBvZiBoYXJkY29kZWQgREQvTU0vWVlZWVxuICAgICAgY29uc3QgZGF0ZUZvcm1hdHRlZCA9IGRhdGUuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgXG4gICAgICBjb25zdCBpc1NlbGVjdGVkU3RhcnREYXkgPVxuICAgICAgICAhaXNEaXNhYmxlZERheSAmJlxuICAgICAgICAoc3RhcnREYXRlU3RyaW5nID8/IGZhbHNlKSAmJlxuICAgICAgICBkYXRlRm9ybWF0dGVkID09PSBzdGFydERhdGVTdHJpbmc7XG4gICAgICAgIFxuICAgICAgY29uc3QgaXNTZWxlY3RlZEVuZERheSA9XG4gICAgICAgICFpc0Rpc2FibGVkRGF5ICYmXG4gICAgICAgIChlbmREYXRlU3RyaW5nID8/IGZhbHNlKSAmJlxuICAgICAgICBkYXRlRm9ybWF0dGVkID09PSBlbmREYXRlU3RyaW5nO1xuICAgICAgICBcbiAgICAgIC8vIEZvciByYW5nZSBjYWxjdWxhdGlvbiwgcGFyc2UgZGF0ZXMgcHJvcGVybHkgdXNpbmcgY3VzdG9tIGZvcm1hdFxuICAgICAgY29uc3Qgc3RhcnREYXRlID0gc3RhcnREYXRlU3RyaW5nID8gZGF5anMoc3RhcnREYXRlU3RyaW5nLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA6IG51bGw7XG4gICAgICBjb25zdCBlbmREYXRlID0gZW5kRGF0ZVN0cmluZyA/IGRheWpzKGVuZERhdGVTdHJpbmcsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpIDogbnVsbDtcbiAgICAgIFxuICAgICAgY29uc3QgaXNBZnRlclNlbGVjdGVkU3RhcnREYXRlID0gc3RhcnREYXRlID8gdGhpcy5kYXlqc0luc3RhbmNlKGRhdGUpLmlzQWZ0ZXIoc3RhcnREYXRlLCBcImRheVwiKSA6IGZhbHNlO1xuICAgICAgY29uc3QgaXNCZWZvcmVTZWxlY3RlZEVuZERhdGUgPSBlbmREYXRlID8gdGhpcy5kYXlqc0luc3RhbmNlKGRhdGUpLmlzQmVmb3JlKGVuZERhdGUsIFwiZGF5XCIpIDogZmFsc2U7XG4gICAgICBcbiAgICAgIGNvbnN0IGluUmFuZ2VEYXkgPVxuICAgICAgICBzdGFydERhdGUgJiYgZW5kRGF0ZSAmJlxuICAgICAgICBpc0FmdGVyU2VsZWN0ZWRTdGFydERhdGUgJiZcbiAgICAgICAgaXNCZWZvcmVTZWxlY3RlZEVuZERhdGU7XG4gICAgICBkYXRlcy5wdXNoKHtcbiAgICAgICAgZGF0ZTogY3VycmVudERhdGUsXG4gICAgICAgIHdlZWtEYXk6IGRhdGUuZGF5KCksXG4gICAgICAgIGlzQ3VycmVudERheSxcbiAgICAgICAgaXNTZWxlY3RlZFN0YXJ0RGF5LFxuICAgICAgICBpc1NlbGVjdGVkRW5kRGF5LFxuICAgICAgICBpblJhbmdlRGF5LFxuICAgICAgICB0b2FzdE1lc3NhZ2U6IHRoaXMuZGF0YS5tZXNzYWdlcy5maW5kKHEgPT4gZGF0ZS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgPT09IHEuZGF0ZSk/Lm1lc3NhZ2UgfHwgXCJcIixcbiAgICAgICAgaXNEaXNhYmxlZERheVxuICAgICAgfSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBkYXRlc1swXS53ZWVrRGF5OyBpID4gMDsgaS0tKSB7XG4gICAgICBkYXRlcy51bnNoaWZ0KHsgZGF0ZTogMCwgd2Vla0RheTogaSAtIDEgfSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlcztcbiAgfVxuXG4gIHNlbGVjdERheShmcm9tOiBcIkxFRlRcIiB8IFwiUklHSFRcIiwgZGF5OiBJQ3VycmVudE1vbnRoRGF0ZXMpIHtcbiAgICBcbiAgICBpZiAoZGF5LmRhdGUgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWRheS5pc0Rpc2FibGVkRGF5KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbUxhYmVsU2lnbmFsLnNldCh0aGlzLkNVU1RPTV9SQU5HRV9MQUJFTCk7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25TdGFydGVkKCkpIHtcbiAgICAgICAgY29uc3QgZGF5anNEYXkgPSBkYXlqcygpXG4gICAgICAgICAgLnllYXIoZnJvbSA9PT0gXCJMRUZUXCIgPyB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgOiB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsKCkpXG4gICAgICAgICAgLm1vbnRoKGZyb20gPT09IFwiTEVGVFwiID8gdGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSA6IHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkpXG4gICAgICAgICAgLmRhdGUoZGF5LmRhdGUpO1xuICAgICAgICAgIFxuICAgICAgICAvLyBFeHRyYWN0IGRhdGUgcGFydCBmcm9tIGV4aXN0aW5nIHN0YXJ0IGRhdGUgZm9yIGNvbXBhcmlzb25cbiAgICAgICAgY29uc3Qgc3RhcnREYXRlU3RyaW5nID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKS5zdGFydERhdGU/LnNwbGl0KCcgJylbMF0gfHwgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKS5zdGFydERhdGU7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZVN0cmluZyA/IGRheWpzKHN0YXJ0RGF0ZVN0cmluZywgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgOiBudWxsO1xuICAgICAgICBcbiAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGVkIGRhdGUgaXMgdGhlIHNhbWUgYXMgdGhlIHN0YXJ0IGRhdGUsIG1ha2UgaXQgYSBzaW5nbGUgZGF5IHNlbGVjdGlvblxuICAgICAgICBpZiAoc3RhcnREYXRlICYmIGRheWpzRGF5LmlzU2FtZShzdGFydERhdGUsIFwiZGF5XCIpKSB7XG4gICAgICAgICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwuc2V0KHtcbiAgICAgICAgICAgIHN0YXJ0RGF0ZTogZGF5anNEYXkuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpLFxuICAgICAgICAgICAgZW5kRGF0ZTogZGF5anNEYXkuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpLFxuICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZUxhYmVsOiB0aGlzLkNVU1RPTV9SQU5HRV9MQUJFTFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRlZFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlcigpLCB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyKCkpKTtcbiAgICAgICAgICB0aGlzLm5leHRNb250aERhdGVzU2lnbmFsLnNldCh0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5uZXh0TW9udGhOdW1iZXIoKSwgdGhpcy5uZXh0WWVhck51bWJlcigpKSk7XG4gICAgICAgICAgdGhpcy5pc0RhdGVzVmFsaWRTaWduYWwuc2V0KHRydWUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGVkIGRhdGUgaXMgYmVmb3JlIHRoZSBzdGFydCBkYXRlLCBtYWtlIGl0IHRoZSBuZXcgc3RhcnQgZGF0ZVxuICAgICAgICBpZiAoc3RhcnREYXRlICYmIGRheWpzRGF5LmlzQmVmb3JlKHN0YXJ0RGF0ZSwgXCJkYXlcIikpIHtcbiAgICAgICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbC5zZXQoe1xuICAgICAgICAgICAgc3RhcnREYXRlOiBkYXlqc0RheS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCksXG4gICAgICAgICAgICBlbmREYXRlOiBudWxsLFxuICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZUxhYmVsOiB0aGlzLkNVU1RPTV9SQU5HRV9MQUJFTFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlcigpLCB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyKCkpKTtcbiAgICAgICAgICB0aGlzLm5leHRNb250aERhdGVzU2lnbmFsLnNldCh0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5uZXh0TW9udGhOdW1iZXIoKSwgdGhpcy5uZXh0WWVhck51bWJlcigpKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRlZFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbC5zZXQoe1xuICAgICAgICAgIC4uLnRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCksXG4gICAgICAgICAgZW5kRGF0ZTogZGF5anNEYXkuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpLFxuICAgICAgICAgIHNlbGVjdGVkUmFuZ2VMYWJlbDogdGhpcy5DVVNUT01fUkFOR0VfTEFCRUxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ZWRTaWduYWwuc2V0KHRydWUpO1xuICAgICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbC5zZXQoe1xuICAgICAgICAgIHN0YXJ0RGF0ZTogZGF5anMoKVxuICAgICAgICAgICAgLnllYXIoZnJvbSA9PT0gXCJMRUZUXCIgPyB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgOiB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsKCkpXG4gICAgICAgICAgICAubW9udGgoZnJvbSA9PT0gXCJMRUZUXCIgPyB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpIDogdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKSlcbiAgICAgICAgICAgIC5kYXRlKGRheS5kYXRlKVxuICAgICAgICAgICAgLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSxcbiAgICAgICAgICBlbmREYXRlOiBudWxsLFxuICAgICAgICAgIHNlbGVjdGVkUmFuZ2VMYWJlbDogdGhpcy5DVVNUT01fUkFOR0VfTEFCRUxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmN1cnJlbnRNb250aERhdGVzU2lnbmFsLnNldCh0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5jdXJyZW50TW9udGhOdW1iZXIoKSwgdGhpcy5jdXJyZW50WWVhck51bWJlcigpKSk7XG4gICAgICB0aGlzLm5leHRNb250aERhdGVzU2lnbmFsLnNldCh0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5uZXh0TW9udGhOdW1iZXIoKSwgdGhpcy5uZXh0WWVhck51bWJlcigpKSk7XG4gICAgICB0aGlzLmlzRGF0ZXNWYWxpZFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgICAgaWYgKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuc3RhcnREYXRlICYmIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuZW5kRGF0ZSkge1xuICAgICAgICB0aGlzLmlzRGF0ZXNWYWxpZFNpZ25hbC5zZXQodHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXkudG9hc3RNZXNzYWdlKSB7XG4gICAgICB0aGlzLnRvYXN0LmRpc3BsYXlNc2coZGF5LnRvYXN0TWVzc2FnZSwgNDAwMCk7XG4gICAgfVxuICB9XG4gIHNlbGVjdFJhbmdlKGl0ZW06IFJhbmdlSXRlbSkge1xuICAgIGlmICghaXRlbSkgcmV0dXJuO1xuICBcbiAgICBsZXQgc3RhcnREYXRlID0gdGhpcy5kYXlqc0luc3RhbmNlKGl0ZW0udmFsdWVbMF0pOyAgXG4gICAgbGV0IGVuZERhdGUgPSB0aGlzLmRheWpzSW5zdGFuY2UoaXRlbS52YWx1ZVsxXSk7ICBcbiAgXG4gICAgY29uc3Qgc3RhcnREYXRlU3RyID0gc3RhcnREYXRlLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICBjb25zdCBlbmREYXRlU3RyID0gZW5kRGF0ZS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gIFxuICAgIGNvbnN0IGlzQW55RGF0ZURpc2FibGVkID0gdGhpcy5kYXRhLmRhdGVzRGlzYWJsZWQuc29tZSgoZGF0ZSkgPT5cbiAgICAgIHRoaXMuZGF5anNJbnN0YW5jZShkYXRlICwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkuaXNCZXR3ZWVuKHN0YXJ0RGF0ZVN0ciwgZW5kRGF0ZVN0ciwgbnVsbCwgJ1tdJylcbiAgICApO1xuICBcbiAgICBjb25zdCBtaW5EYXRlID0gISF0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSA/IHRoaXMuZGF5anNJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgOiBkYXlqcygnaW52YWxpZCcpO1xuICAgIGNvbnN0IG1heERhdGUgPSAhIXRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlID8gdGhpcy5kYXlqc0luc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA6IGRheWpzKCdpbnZhbGlkJyk7XG4gIFxuICAgIGNvbnN0IGlzV2l0aGluTGltaXRzID1cbiAgICAgICghbWluRGF0ZS5pc1ZhbGlkKCkgfHwgIXN0YXJ0RGF0ZS5pc0JlZm9yZShtaW5EYXRlLCBcImRheVwiKSkgJiZcbiAgICAgICghbWF4RGF0ZS5pc1ZhbGlkKCkgfHwgIWVuZERhdGUuaXNBZnRlcihtYXhEYXRlLCBcImRheVwiKSk7XG4gIFxuICAgIGlmICghaXNXaXRoaW5MaW1pdHMgfHwgaXNBbnlEYXRlRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMudG9hc3QuZGlzcGxheU1zZyhcIlNlbGVjdGVkIHJhbmdlIGNvbnRhaW5zIGRpc2FibGVkIGRhdGVzIG9yIGlzIG91dCBvZiBib3VuZHMuXCIsIDQwMDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1MYWJlbFNpZ25hbC5zZXQoaXRlbS5sYWJlbCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwuc2V0KHN0YXJ0RGF0ZS5tb250aCgpKTtcbiAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLnNldChzdGFydERhdGUueWVhcigpKTtcbiAgXG4gICAgaWYgKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkgPT09IDExKSB7XG4gICAgICB0aGlzLm5leHRNb250aE51bWJlclNpZ25hbC5zZXQoMCk7XG4gICAgICB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgKyAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwuc2V0KHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkgKyAxKTtcbiAgICAgIHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwuc2V0KHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSk7XG4gICAgfVxuICBcbiAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbC5zZXQoeyBcbiAgICAgIHN0YXJ0RGF0ZTogc3RhcnREYXRlU3RyLCBcbiAgICAgIGVuZERhdGU6IGVuZERhdGVTdHIsXG4gICAgICBzZWxlY3RlZFJhbmdlTGFiZWw6IGl0ZW0ubGFiZWxcbiAgICB9KTtcbiAgICB0aGlzLmN1cnJlbnRNb250aFNpZ25hbC5zZXQoZ2V0TW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXIoKSkpO1xuICAgIHRoaXMubmV4dE1vbnRoU2lnbmFsLnNldChnZXRNb250aCh0aGlzLm5leHRNb250aE51bWJlcigpKSk7XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXIoKSkpO1xuICAgIHRoaXMubmV4dE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlcigpLCB0aGlzLm5leHRZZWFyTnVtYmVyKCkpKTtcbiAgXG4gICAgdGhpcy5pc0RhdGVzVmFsaWRTaWduYWwuc2V0KCEhKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuc3RhcnREYXRlICYmIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuZW5kRGF0ZSkpO1xuICB9XG4gIHJlc2V0UmFuZ2UoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1MYWJlbFNpZ25hbC5zZXQodGhpcy5DVVNUT01fUkFOR0VfTEFCRUwpO1xuICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsLnNldCh7XG4gICAgICBzdGFydERhdGU6IG51bGwsXG4gICAgICBlbmREYXRlOiBudWxsLFxuICAgICAgc2VsZWN0ZWRSYW5nZUxhYmVsOiB0aGlzLkNVU1RPTV9SQU5HRV9MQUJFTFxuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRlZFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuaXNEYXRlc1ZhbGlkU2lnbmFsLnNldChmYWxzZSk7XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXIoKSkpO1xuICAgIHRoaXMubmV4dE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlcigpLCB0aGlzLm5leHRZZWFyTnVtYmVyKCkpKTtcbiAgfVxuICBcbiAgYXBwbHlEYXRlcygpIHtcbiAgICAvLyBJZiB0aW1lIGlzIGVuYWJsZWQsIGFwcGVuZCB0aW1lIHRvIHRoZSBkYXRlcyBiZWZvcmUgYXBwbHlpbmdcbiAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUpIHtcbiAgICAgIGxldCBzdGFydFRpbWU6IHN0cmluZztcbiAgICAgIGxldCBlbmRUaW1lOiBzdHJpbmc7XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmlzMTJIb3VyRm9ybWF0KCkpIHtcbiAgICAgICAgc3RhcnRUaW1lID0gdGhpcy5mb3JtYXRUaW1lKHRoaXMuc3RhcnRIb3VyKCksIHRoaXMuc3RhcnRNaW51dGUoKSwgdGhpcy5zdGFydEFtUG0oKSk7XG4gICAgICAgIGVuZFRpbWUgPSB0aGlzLmZvcm1hdFRpbWUodGhpcy5lbmRIb3VyKCksIHRoaXMuZW5kTWludXRlKCksIHRoaXMuZW5kQW1QbSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0VGltZSA9IHRoaXMuZm9ybWF0VGltZSh0aGlzLnN0YXJ0SG91cjI0KCksIHRoaXMuc3RhcnRNaW51dGUoKSwgJycpO1xuICAgICAgICBlbmRUaW1lID0gdGhpcy5mb3JtYXRUaW1lKHRoaXMuZW5kSG91cjI0KCksIHRoaXMuZW5kTWludXRlKCksICcnKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRXh0cmFjdCBvbmx5IHRoZSBkYXRlIHBhcnQgKGJlZm9yZSBhbnkgZXhpc3RpbmcgdGltZSkgYW5kIGFwcGVuZCB0aGUgc2VsZWN0ZWQgdGltZVxuICAgICAgY29uc3Qgc3RhcnREYXRlT25seSA9IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuc3RhcnREYXRlPy5zcGxpdCgnICcpWzBdIHx8IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuc3RhcnREYXRlO1xuICAgICAgY29uc3QgZW5kRGF0ZU9ubHkgPSB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLmVuZERhdGU/LnNwbGl0KCcgJylbMF0gfHwgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKS5lbmREYXRlO1xuICAgICAgXG4gICAgICBjb25zdCBzdGFydERhdGVXaXRoVGltZSA9IHN0YXJ0RGF0ZU9ubHkgKyAnICcgKyBzdGFydFRpbWU7XG4gICAgICBjb25zdCBlbmREYXRlV2l0aFRpbWUgPSBlbmREYXRlT25seSArICcgJyArIGVuZFRpbWU7XG4gICAgICBcbiAgICAgIHRoaXMuZGF0YS5kYXRlQ2hhbmdlKHtcbiAgICAgICAgc3RhcnREYXRlOiBzdGFydERhdGVXaXRoVGltZSxcbiAgICAgICAgZW5kRGF0ZTogZW5kRGF0ZVdpdGhUaW1lXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhLmRhdGVDaGFuZ2UodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKSk7XG4gICAgfVxuICB9XG4gIFxuICBjYW5jZWxEYXRlUGlja2VyKCkge1xuICAgIHRoaXMuZGF0YS5jbG9zZSgpO1xuICB9XG4gIFxuICAvLyBUaW1lLXJlbGF0ZWQgbWV0aG9kc1xuICBvblN0YXJ0SG91cklucHV0KCkge1xuICAgIGlmICh0aGlzLmlzMTJIb3VyRm9ybWF0KCkpIHtcbiAgICAgIHRoaXMuc3RhcnRIb3VyU2lnbmFsLnNldCh0aGlzLnZhbGlkYXRlSG91cklucHV0KHRoaXMuc3RhcnRIb3VyKCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGFydEhvdXIyNFNpZ25hbC5zZXQodGhpcy52YWxpZGF0ZUhvdXJJbnB1dDI0KHRoaXMuc3RhcnRIb3VyMjQoKSkpO1xuICAgIH1cbiAgfVxuICBcbiAgb25TdGFydE1pbnV0ZUlucHV0KCkge1xuICAgIHRoaXMuc3RhcnRNaW51dGVTaWduYWwuc2V0KHRoaXMudmFsaWRhdGVNaW51dGVJbnB1dCh0aGlzLnN0YXJ0TWludXRlKCkpKTtcbiAgfVxuICBcbiAgb25FbmRIb3VySW5wdXQoKSB7XG4gICAgaWYgKHRoaXMuaXMxMkhvdXJGb3JtYXQoKSkge1xuICAgICAgdGhpcy5lbmRIb3VyU2lnbmFsLnNldCh0aGlzLnZhbGlkYXRlSG91cklucHV0KHRoaXMuZW5kSG91cigpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5kSG91cjI0U2lnbmFsLnNldCh0aGlzLnZhbGlkYXRlSG91cklucHV0MjQodGhpcy5lbmRIb3VyMjQoKSkpO1xuICAgIH1cbiAgfVxuICBcbiAgb25FbmRNaW51dGVJbnB1dCgpIHtcbiAgICB0aGlzLmVuZE1pbnV0ZVNpZ25hbC5zZXQodGhpcy52YWxpZGF0ZU1pbnV0ZUlucHV0KHRoaXMuZW5kTWludXRlKCkpKTtcbiAgfVxuICBcbiAgdmFsaWRhdGVIb3VySW5wdXQoaG91cjogbnVtYmVyKSB7XG4gICAgLy8gQXBwbHkgYm91bmRzIGJhc2VkIG9uIGZvcm1hdFxuICAgIGlmICh0aGlzLmlzMTJIb3VyRm9ybWF0KCkpIHtcbiAgICAgIC8vIDEyLWhvdXIgZm9ybWF0OiAxLTEyXG4gICAgICBpZiAoaG91ciA8IDEpIGhvdXIgPSAxO1xuICAgICAgaWYgKGhvdXIgPiAxMikgaG91ciA9IDEyO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAyNC1ob3VyIGZvcm1hdDogMC0yM1xuICAgICAgaWYgKGhvdXIgPCAwKSBob3VyID0gMDtcbiAgICAgIGlmIChob3VyID4gMjMpIGhvdXIgPSAyMztcbiAgICB9XG4gICAgcmV0dXJuIGhvdXI7XG4gIH1cbiAgXG4gIC8vIFNwZWNpYWwgdmFsaWRhdGlvbiBmb3IgMjQtaG91ciBmb3JtYXRcbiAgdmFsaWRhdGVIb3VySW5wdXQyNChob3VyOiBudW1iZXIpIHtcbiAgICBpZiAoaG91ciA8IDApIGhvdXIgPSAwO1xuICAgIGlmIChob3VyID4gMjMpIGhvdXIgPSAyMztcbiAgICByZXR1cm4gaG91cjtcbiAgfVxuICBcbiAgdmFsaWRhdGVNaW51dGVJbnB1dChtaW51dGU6IG51bWJlcikge1xuICAgIGlmIChtaW51dGUgPCAwKSBtaW51dGUgPSAwO1xuICAgIGlmIChtaW51dGUgPiA1OSkgbWludXRlID0gNTk7XG4gICAgcmV0dXJuIG1pbnV0ZTtcbiAgfVxuICBcbiAgcHVibGljIGlzMTJIb3VyRm9ybWF0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdBJykgfHwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdC5pbmNsdWRlcygnYScpO1xuICB9XG4gIFxuICBwcml2YXRlIGZvcm1hdFRpbWUoaG91cjogbnVtYmVyLCBtaW51dGU6IG51bWJlciwgYW1QbTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICByZXR1cm4gYCR7aG91ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bWludXRlLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0gJHthbVBtfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciAyNC1ob3VyIGZvcm1hdCwganVzdCByZXR1cm4gdGhlIGhvdXIgYW5kIG1pbnV0ZVxuICAgICAgcmV0dXJuIGAke2hvdXIudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVUaW1lVmFsdWVzKCk6IHZvaWQge1xuICAgIC8vIEluaXRpYWxpemUgdGltZSB2YWx1ZXMgZnJvbSBleGlzdGluZyBzZWxlY3RlZCBkYXRlcyBpZiB0aGV5IGNvbnRhaW4gdGltZVxuICAgIGxldCBzdGFydFRpbWVJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIGxldCBlbmRUaW1lSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICBcbiAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgJiYgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKS5zdGFydERhdGUpIHtcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZVBhcnRzID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKS5zdGFydERhdGUuc3BsaXQoJyAnKTtcbiAgICAgIGlmIChzdGFydERhdGVQYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gc3RhcnREYXRlUGFydHMuc2xpY2UoMSkuam9pbignICcpOyAvLyBIYW5kbGUgbXVsdGlwbGUgc3BhY2VzXG4gICAgICAgIHRoaXMucGFyc2VUaW1lU3RyaW5nKHRpbWVQYXJ0LCB0cnVlKTtcbiAgICAgICAgc3RhcnRUaW1lSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgJiYgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKS5lbmREYXRlKSB7XG4gICAgICBjb25zdCBlbmREYXRlUGFydHMgPSB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLmVuZERhdGUuc3BsaXQoJyAnKTtcbiAgICAgIGlmIChlbmREYXRlUGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zdCB0aW1lUGFydCA9IGVuZERhdGVQYXJ0cy5zbGljZSgxKS5qb2luKCcgJyk7IC8vIEhhbmRsZSBtdWx0aXBsZSBzcGFjZXNcbiAgICAgICAgdGhpcy5wYXJzZVRpbWVTdHJpbmcodGltZVBhcnQsIGZhbHNlKTtcbiAgICAgICAgZW5kVGltZUluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gSWYgbm8gZXhpc3RpbmcgdGltZSBmb3VuZCwgc2V0IGN1cnJlbnQgdGltZSBhcyBkZWZhdWx0XG4gICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lKSB7XG4gICAgICBpZiAoIXN0YXJ0VGltZUluaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMuc2V0Q3VycmVudFRpbWVBc0RlZmF1bHQodHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoIWVuZFRpbWVJbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLnNldEN1cnJlbnRUaW1lQXNEZWZhdWx0KGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEN1cnJlbnRUaW1lQXNEZWZhdWx0KGlzU3RhcnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBkYXlqcygpO1xuICAgIGNvbnN0IGN1cnJlbnRIb3VyID0gbm93LmhvdXIoKTtcbiAgICBjb25zdCBjdXJyZW50TWludXRlID0gbm93Lm1pbnV0ZSgpO1xuICAgIFxuICAgIGlmICh0aGlzLmlzMTJIb3VyRm9ybWF0KCkpIHtcbiAgICAgIC8vIENvbnZlcnQgY3VycmVudCB0aW1lIHRvIDEyLWhvdXIgZm9ybWF0XG4gICAgICBsZXQgaG91cjEyID0gY3VycmVudEhvdXI7XG4gICAgICBsZXQgYW1QbSA9ICdBTSc7XG4gICAgICBcbiAgICAgIGlmIChjdXJyZW50SG91ciA9PT0gMCkge1xuICAgICAgICBob3VyMTIgPSAxMjtcbiAgICAgICAgYW1QbSA9ICdBTSc7XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRIb3VyID09PSAxMikge1xuICAgICAgICBob3VyMTIgPSAxMjtcbiAgICAgICAgYW1QbSA9ICdQTSc7XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRIb3VyID4gMTIpIHtcbiAgICAgICAgaG91cjEyID0gY3VycmVudEhvdXIgLSAxMjtcbiAgICAgICAgYW1QbSA9ICdQTSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbVBtID0gJ0FNJztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKGlzU3RhcnQpIHtcbiAgICAgICAgdGhpcy5zdGFydEhvdXJTaWduYWwuc2V0KGhvdXIxMik7XG4gICAgICAgIHRoaXMuc3RhcnRNaW51dGVTaWduYWwuc2V0KGN1cnJlbnRNaW51dGUpO1xuICAgICAgICB0aGlzLnN0YXJ0QW1QbVNpZ25hbC5zZXQoYW1QbSk7XG4gICAgICAgIHRoaXMuc3RhcnRIb3VyMjRTaWduYWwuc2V0KGN1cnJlbnRIb3VyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW5kSG91clNpZ25hbC5zZXQoaG91cjEyKTtcbiAgICAgICAgdGhpcy5lbmRNaW51dGVTaWduYWwuc2V0KGN1cnJlbnRNaW51dGUpO1xuICAgICAgICB0aGlzLmVuZEFtUG1TaWduYWwuc2V0KGFtUG0pO1xuICAgICAgICB0aGlzLmVuZEhvdXIyNFNpZ25hbC5zZXQoY3VycmVudEhvdXIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVc2UgY3VycmVudCB0aW1lIGRpcmVjdGx5IGZvciAyNC1ob3VyIGZvcm1hdFxuICAgICAgaWYgKGlzU3RhcnQpIHtcbiAgICAgICAgdGhpcy5zdGFydEhvdXIyNFNpZ25hbC5zZXQoY3VycmVudEhvdXIpO1xuICAgICAgICB0aGlzLnN0YXJ0TWludXRlU2lnbmFsLnNldChjdXJyZW50TWludXRlKTtcbiAgICAgICAgLy8gQWxzbyBzZXQgMTItaG91ciB2YWx1ZXMgZm9yIGNvbnNpc3RlbmN5XG4gICAgICAgIGlmIChjdXJyZW50SG91ciA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuc3RhcnRIb3VyU2lnbmFsLnNldCgxMik7XG4gICAgICAgICAgdGhpcy5zdGFydEFtUG1TaWduYWwuc2V0KCdBTScpO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRIb3VyID09PSAxMikge1xuICAgICAgICAgIHRoaXMuc3RhcnRIb3VyU2lnbmFsLnNldCgxMik7XG4gICAgICAgICAgdGhpcy5zdGFydEFtUG1TaWduYWwuc2V0KCdQTScpO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRIb3VyID4gMTIpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0SG91clNpZ25hbC5zZXQoY3VycmVudEhvdXIgLSAxMik7XG4gICAgICAgICAgdGhpcy5zdGFydEFtUG1TaWduYWwuc2V0KCdQTScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3RhcnRIb3VyU2lnbmFsLnNldChjdXJyZW50SG91cik7XG4gICAgICAgICAgdGhpcy5zdGFydEFtUG1TaWduYWwuc2V0KCdBTScpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuZEhvdXIyNFNpZ25hbC5zZXQoY3VycmVudEhvdXIpO1xuICAgICAgICB0aGlzLmVuZE1pbnV0ZVNpZ25hbC5zZXQoY3VycmVudE1pbnV0ZSk7XG4gICAgICAgIC8vIEFsc28gc2V0IDEyLWhvdXIgdmFsdWVzIGZvciBjb25zaXN0ZW5jeVxuICAgICAgICBpZiAoY3VycmVudEhvdXIgPT09IDApIHtcbiAgICAgICAgICB0aGlzLmVuZEhvdXJTaWduYWwuc2V0KDEyKTtcbiAgICAgICAgICB0aGlzLmVuZEFtUG1TaWduYWwuc2V0KCdBTScpO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRIb3VyID09PSAxMikge1xuICAgICAgICAgIHRoaXMuZW5kSG91clNpZ25hbC5zZXQoMTIpO1xuICAgICAgICAgIHRoaXMuZW5kQW1QbVNpZ25hbC5zZXQoJ1BNJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEhvdXIgPiAxMikge1xuICAgICAgICAgIHRoaXMuZW5kSG91clNpZ25hbC5zZXQoY3VycmVudEhvdXIgLSAxMik7XG4gICAgICAgICAgdGhpcy5lbmRBbVBtU2lnbmFsLnNldCgnUE0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVuZEhvdXJTaWduYWwuc2V0KGN1cnJlbnRIb3VyKTtcbiAgICAgICAgICB0aGlzLmVuZEFtUG1TaWduYWwuc2V0KCdBTScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVRpbWVTdHJpbmcodGltZVN0cmluZzogc3RyaW5nLCBpc1N0YXJ0OiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXMxMkhvdXJGb3JtYXQoKSkge1xuICAgICAgLy8gUGFyc2UgMTItaG91ciBmb3JtYXQ6IFwiMTA6MDAgUE1cIlxuICAgICAgY29uc3QgbWF0Y2ggPSB0aW1lU3RyaW5nLm1hdGNoKC8oXFxkKyk6KFxcZCspXFxzKihBTXxQTSkvaSk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgaG91ciA9IHBhcnNlSW50KG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3QgbWludXRlID0gcGFyc2VJbnQobWF0Y2hbMl0pO1xuICAgICAgICBjb25zdCBhbVBtID0gbWF0Y2hbM10udG9VcHBlckNhc2UoKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChpc1N0YXJ0KSB7XG4gICAgICAgICAgdGhpcy5zdGFydEhvdXJTaWduYWwuc2V0KGhvdXIpO1xuICAgICAgICAgIHRoaXMuc3RhcnRNaW51dGVTaWduYWwuc2V0KG1pbnV0ZSk7XG4gICAgICAgICAgdGhpcy5zdGFydEFtUG1TaWduYWwuc2V0KGFtUG0pO1xuICAgICAgICAgIC8vIEFsc28gc2V0IDI0LWhvdXIgdmFsdWUgZm9yIGNvbnNpc3RlbmN5XG4gICAgICAgICAgdGhpcy5zdGFydEhvdXIyNFNpZ25hbC5zZXQoaG91ciA9PT0gMTIgPyAoYW1QbSA9PT0gJ1BNJyA/IDEyIDogMCkgOiAoYW1QbSA9PT0gJ1BNJyA/IGhvdXIgKyAxMiA6IGhvdXIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVuZEhvdXJTaWduYWwuc2V0KGhvdXIpO1xuICAgICAgICAgIHRoaXMuZW5kTWludXRlU2lnbmFsLnNldChtaW51dGUpO1xuICAgICAgICAgIHRoaXMuZW5kQW1QbVNpZ25hbC5zZXQoYW1QbSk7XG4gICAgICAgICAgLy8gQWxzbyBzZXQgMjQtaG91ciB2YWx1ZSBmb3IgY29uc2lzdGVuY3lcbiAgICAgICAgICB0aGlzLmVuZEhvdXIyNFNpZ25hbC5zZXQoaG91ciA9PT0gMTIgPyAoYW1QbSA9PT0gJ1BNJyA/IDEyIDogMCkgOiAoYW1QbSA9PT0gJ1BNJyA/IGhvdXIgKyAxMiA6IGhvdXIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQYXJzZSAyNC1ob3VyIGZvcm1hdDogXCIyMjowMFwiXG4gICAgICBjb25zdCBtYXRjaCA9IHRpbWVTdHJpbmcubWF0Y2goLyhcXGQrKTooXFxkKykvKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBob3VyMjQgPSBwYXJzZUludChtYXRjaFsxXSk7XG4gICAgICAgIGNvbnN0IG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoWzJdKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChpc1N0YXJ0KSB7XG4gICAgICAgICAgLy8gU3RvcmUgZGlyZWN0bHkgaW4gMjQtaG91ciBmb3JtYXRcbiAgICAgICAgICB0aGlzLnN0YXJ0SG91cjI0U2lnbmFsLnNldChob3VyMjQpO1xuICAgICAgICAgIHRoaXMuc3RhcnRNaW51dGVTaWduYWwuc2V0KG1pbnV0ZSk7XG4gICAgICAgICAgLy8gQWxzbyBzZXQgMTItaG91ciB2YWx1ZXMgZm9yIGNvbnNpc3RlbmN5ICh0aG91Z2ggbm90IHVzZWQgaW4gMjQtaG91ciBtb2RlKVxuICAgICAgICAgIGlmIChob3VyMjQgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRIb3VyU2lnbmFsLnNldCgxMik7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0QW1QbVNpZ25hbC5zZXQoJ0FNJyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChob3VyMjQgPT09IDEyKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0SG91clNpZ25hbC5zZXQoMTIpO1xuICAgICAgICAgICAgdGhpcy5zdGFydEFtUG1TaWduYWwuc2V0KCdQTScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaG91cjI0ID4gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRIb3VyU2lnbmFsLnNldChob3VyMjQgLSAxMik7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0QW1QbVNpZ25hbC5zZXQoJ1BNJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRIb3VyU2lnbmFsLnNldChob3VyMjQpO1xuICAgICAgICAgICAgdGhpcy5zdGFydEFtUG1TaWduYWwuc2V0KCdBTScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTdG9yZSBkaXJlY3RseSBpbiAyNC1ob3VyIGZvcm1hdFxuICAgICAgICAgIHRoaXMuZW5kSG91cjI0U2lnbmFsLnNldChob3VyMjQpO1xuICAgICAgICAgIHRoaXMuZW5kTWludXRlU2lnbmFsLnNldChtaW51dGUpO1xuICAgICAgICAgIC8vIEFsc28gc2V0IDEyLWhvdXIgdmFsdWVzIGZvciBjb25zaXN0ZW5jeSAodGhvdWdoIG5vdCB1c2VkIGluIDI0LWhvdXIgbW9kZSlcbiAgICAgICAgICBpZiAoaG91cjI0ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmVuZEhvdXJTaWduYWwuc2V0KDEyKTtcbiAgICAgICAgICAgIHRoaXMuZW5kQW1QbVNpZ25hbC5zZXQoJ0FNJyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChob3VyMjQgPT09IDEyKSB7XG4gICAgICAgICAgICB0aGlzLmVuZEhvdXJTaWduYWwuc2V0KDEyKTtcbiAgICAgICAgICAgIHRoaXMuZW5kQW1QbVNpZ25hbC5zZXQoJ1BNJyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChob3VyMjQgPiAxMikge1xuICAgICAgICAgICAgdGhpcy5lbmRIb3VyU2lnbmFsLnNldChob3VyMjQgLSAxMik7XG4gICAgICAgICAgICB0aGlzLmVuZEFtUG1TaWduYWwuc2V0KCdQTScpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVuZEhvdXJTaWduYWwuc2V0KGhvdXIyNCk7XG4gICAgICAgICAgICB0aGlzLmVuZEFtUG1TaWduYWwuc2V0KCdBTScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJcIiBhcmlhLWxhYmVsPVwiZGF0ZSByYW5nZSBwaWNrZXJcIiBjZGtUcmFwRm9jdXMgW2Nka1RyYXBGb2N1c0F1dG9DYXB0dXJlXT1cInRydWVcIj5cbiAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX3ZpZXdcIj5cbiAgICA8ZGl2IHRhYmluZGV4PVwiLTFcIiBjZGtGb2N1c0luaXRpYWw+PC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImRhdGE/LmRwQ29uZmlnPy5yYW5nZXM/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX3Jhbmdlc1wiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhPy5kcENvbmZpZz8ucmFuZ2VzID8/IFtdXCIgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlLXJhbmdlJyA6IHNlbGVjdGVkSXRlbUxhYmVsKCkgPT09IGl0ZW0ubGFiZWx9XCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UmFuZ2UoaXRlbSlcIlxuICAgICAgICAgIGNsYXNzPVwibWlzLWJ0blwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PiA8YnV0dG9uIGNsYXNzPVwibWlzLWJ0blwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlLXJhbmdlJyA6IHNlbGVjdGVkSXRlbUxhYmVsKCkgPT09ICdDdXN0b20gUmFuZ2UnfVwiIChjbGljayk9XCJyZXNldFJhbmdlKClcIj5DdXN0b20gUmFuZ2U8L2J1dHRvbj4gPC9kaXY+XG4gIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkYXRlcGlja2VyX19sZWZ0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9faGVhZGVyX19wcmFidVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19hcnJvd19faWNvblwiXG4gICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAoY2xpY2spPVwiIWlzUHJldmlvdXNNb250aERpc2FibGVkKCkgJiYgbmF2aWdhdGVNb250aCgnUFJFVklPVVMnKVwiXG4gICAgICAgICAgKGtleXVwLmVudGVyKT1cIiFpc1ByZXZpb3VzTW9udGhEaXNhYmxlZCgpICYmIG5hdmlnYXRlTW9udGgoJ1BSRVZJT1VTJylcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJQcmV2aW91cyBNb250aFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2Rpc2FibGVkLW1vbnRoJzogaXNQcmV2aW91c01vbnRoRGlzYWJsZWQoKVxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBkPVwiTTE5LjcwNzEgOC43MDcxMUMyMC4wOTc2IDguMzE2NTggMjAuMDk3NiA3LjY4MzQyIDE5LjcwNzEgNy4yOTI4OUwxMy4zNDMxIDAuOTI4OTMzQzEyLjk1MjYgMC41Mzg0MDkgMTIuMzE5NSAwLjUzODQwOSAxMS45Mjg5IDAuOTI4OTMzQzExLjUzODQgMS4zMTk0NiAxMS41Mzg0IDEuOTUyNjIgMTEuOTI4OSAyLjM0MzE1TDE3LjU4NTggOEwxMS45Mjg5IDEzLjY1NjlDMTEuNTM4NCAxNC4wNDc0IDExLjUzODQgMTQuNjgwNSAxMS45Mjg5IDE1LjA3MTFDMTIuMzE5NSAxNS40NjE2IDEyLjk1MjYgMTUuNDYxNiAxMy4zNDMxIDE1LjA3MTFMMTkuNzA3MSA4LjcwNzExWk0tOC43NDIyOGUtMDggOUwxOSA5TDE5IDdMOC43NDIyOGUtMDggN0wtOC43NDIyOGUtMDggOVpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzE4MUYzM1wiXG4gICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4+IHt7IGN1cnJlbnRNb250aCgpIH19IHt7IGN1cnJlbnRZZWFyTnVtYmVyKCkgfX0gPC9zcGFuPlxuICAgICAgICA8ZGl2PjwvZGl2PlxuICAgICAgICA8IS0tIEJ1dHRvbiB2aXNpYmxlIGluIG1vYmlsZSB2aWV3IC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19hcnJvd19faWNvbiBtb2JpbGVfdmlld1wiXG4gICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAoY2xpY2spPVwiIWlzTmV4dE1vbnRoRGlzYWJsZWQoKSAmJiBuYXZpZ2F0ZU1vbnRoKCdORVhUJylcIlxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCIhaXNOZXh0TW9udGhEaXNhYmxlZCgpICYmIG5hdmlnYXRlTW9udGgoJ05FWFQnKVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIk5leHQgTW9udGhcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdkaXNhYmxlZC1tb250aCc6IGlzTmV4dE1vbnRoRGlzYWJsZWQoKVxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBkPVwiTTE5LjcwNzEgOC43MDcxMUMyMC4wOTc2IDguMzE2NTggMjAuMDk3NiA3LjY4MzQyIDE5LjcwNzEgNy4yOTI4OUwxMy4zNDMxIDAuOTI4OTMzQzEyLjk1MjYgMC41Mzg0MDkgMTIuMzE5NSAwLjUzODQwOSAxMS45Mjg5IDAuOTI4OTMzQzExLjUzODQgMS4zMTk0NiAxMS41Mzg0IDEuOTUyNjIgMTEuOTI4OSAyLjM0MzE1TDE3LjU4NTggOEwxMS45Mjg5IDEzLjY1NjlDMTEuNTM4NCAxNC4wNDc0IDExLjUzODQgMTQuNjgwNSAxMS45Mjg5IDE1LjA3MTFDMTIuMzE5NSAxNS40NjE2IDEyLjk1MjYgMTUuNDYxNiAxMy4zNDMxIDE1LjA3MTFMMTkuNzA3MSA4LjcwNzExWk0tOC43NDIyOGUtMDggOUwxOSA5TDE5IDdMOC43NDIyOGUtMDggN0wtOC43NDIyOGUtMDggOVpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzE4MUYzM1wiXG4gICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2JvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX3dlZWtkYXlzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX3dlZWtkYXlcIiAqbmdGb3I9XCJsZXQgd2Vla0RheSBvZiB3ZWVrRGF5cygpXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyB3ZWVrRGF5LmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2RheXNcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2RheVwiIFxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnc2VsZWN0ZWQtc2FtZS1kYXknOiBkYXkuaXNTZWxlY3RlZFN0YXJ0RGF5ICYmIGRheS5pc1NlbGVjdGVkRW5kRGF5LFxuICAgICAgICAgICAgICAnc2VsZWN0ZWQtc3RhcnQtZGF5JzogZGF5LmlzU2VsZWN0ZWRTdGFydERheSxcbiAgICAgICAgICAgICAgJ3NlbGVjdGVkLWVuZC1kYXknOiBkYXkuaXNTZWxlY3RlZEVuZERheSxcbiAgICAgICAgICAgICAgJ2Rpc2FibGVkLWRheSc6IGRheS5pc0Rpc2FibGVkRGF5LFxuICAgICAgICAgICAgICAnaW4tcmFuZ2UtZGF5JzogZGF5LmluUmFuZ2VEYXksXG4gICAgICAgICAgICAgICdpcy12YWxpZC1kYXRlJzogZGF5LmRhdGUgPiAwICYmICEoZGF5LmlzU2VsZWN0ZWRTdGFydERheSAmJiBkYXkuaXNTZWxlY3RlZEVuZERheSlcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRheSBvZiBjdXJyZW50TW9udGhEYXRlcygpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3REYXkoJ0xFRlQnLCBkYXkpXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWxlY3REYXkoJ0xFRlQnLCBkYXkpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRheS5kYXRlID4gMFwiXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCJkYXkuaXNEaXNhYmxlZERheSA/IC0xIDogMFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmV0cmFjdERheU1vbnRoKGRheS5kYXRlLCBjdXJyZW50TW9udGgoKSwgY3VycmVudFllYXJOdW1iZXIoKSlcIj5cbiAgICAgICAgICAgICAge3sgZGF5LmRhdGUgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlcl9fcmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19oZWFkZXJfX3ByYWJ1XCI+XG4gICAgICAgIDxkaXY+PC9kaXY+XG4gICAgICAgIDxzcGFuPiB7eyBuZXh0TW9udGgoKSB9fSB7eyBuZXh0WWVhck51bWJlcigpIH19IDwvc3Bhbj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fYXJyb3dfX2ljb24gcGNfdmlld1wiXG4gICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAoY2xpY2spPVwiIWlzTmV4dE1vbnRoRGlzYWJsZWQoKSAmJiBuYXZpZ2F0ZU1vbnRoKCdORVhUJylcIlxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCIhaXNOZXh0TW9udGhEaXNhYmxlZCgpICYmIG5hdmlnYXRlTW9udGgoJ05FWFQnKVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2Rpc2FibGVkLW1vbnRoJzogaXNOZXh0TW9udGhEaXNhYmxlZCgpXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMTkuNzA3MSA4LjcwNzExQzIwLjA5NzYgOC4zMTY1OCAyMC4wOTc2IDcuNjgzNDIgMTkuNzA3MSA3LjI5Mjg5TDEzLjM0MzEgMC45Mjg5MzNDMTIuOTUyNiAwLjUzODQwOSAxMi4zMTk1IDAuNTM4NDA5IDExLjkyODkgMC45Mjg5MzNDMTEuNTM4NCAxLjMxOTQ2IDExLjUzODQgMS45NTI2MiAxMS45Mjg5IDIuMzQzMTVMMTcuNTg1OCA4TDExLjkyODkgMTMuNjU2OUMxMS41Mzg0IDE0LjA0NzQgMTEuNTM4NCAxNC42ODA1IDExLjkyODkgMTUuMDcxMUMxMi4zMTk1IDE1LjQ2MTYgMTIuOTUyNiAxNS40NjE2IDEzLjM0MzEgMTUuMDcxMUwxOS43MDcxIDguNzA3MTFaTS04Ljc0MjI4ZS0wOCA5TDE5IDlMMTkgN0w4Ljc0MjI4ZS0wOCA3TC04Ljc0MjI4ZS0wOCA5WlwiXG4gICAgICAgICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fYm9keVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fd2Vla2RheXNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fd2Vla2RheVwiICpuZ0Zvcj1cImxldCB3ZWVrRGF5IG9mIHdlZWtEYXlzKClcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHdlZWtEYXkubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fZGF5c1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fZGF5XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ3NlbGVjdGVkLXNhbWUtZGF5JzogZGF5LmlzU2VsZWN0ZWRTdGFydERheSAmJiBkYXkuaXNTZWxlY3RlZEVuZERheSxcbiAgICAgICAgICAgICAgJ3NlbGVjdGVkLXN0YXJ0LWRheSc6IGRheS5pc1NlbGVjdGVkU3RhcnREYXksXG4gICAgICAgICAgICAgICdzZWxlY3RlZC1lbmQtZGF5JzogZGF5LmlzU2VsZWN0ZWRFbmREYXksXG4gICAgICAgICAgICAgICdkaXNhYmxlZC1kYXknOiBkYXkuaXNEaXNhYmxlZERheSxcbiAgICAgICAgICAgICAgJ2luLXJhbmdlLWRheSc6IGRheS5pblJhbmdlRGF5LFxuICAgICAgICAgICAgICAnaXMtdmFsaWQtZGF0ZSc6IGRheS5kYXRlID4gMCAmJiAhKGRheS5pc1NlbGVjdGVkU3RhcnREYXkgJiYgZGF5LmlzU2VsZWN0ZWRFbmREYXkpXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXkgb2YgbmV4dE1vbnRoRGF0ZXMoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RGF5KCdSSUdIVCcsIGRheSlcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlbGVjdERheSgnUklHSFQnLCBkYXkpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRheS5kYXRlID4gMFwiXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCJkYXkuaXNEaXNhYmxlZERheSA/IC0xIDogMFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicmV0cmFjdERheU1vbnRoKGRheS5kYXRlLCBuZXh0TW9udGgoKSwgbmV4dFllYXJOdW1iZXIoKSlcIj5cbiAgICAgICAgICAgICAge3sgZGF5LmRhdGUgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIFxuICA8IS0tIFRpbWUgU2VsZWN0aW9uIFNlY3Rpb24gLS0+XG4gIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX190aW1lXCIgKm5nSWY9XCJkYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWVcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGltZS1zZWN0aW9uXCI+XG4gICAgICA8aDQ+RnJvbTwvaDQ+XG4gICAgICA8ZGl2IGNsYXNzPVwidGltZS1pbnB1dHNcIj5cbiAgICAgICAgPGlucHV0IFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIiBcbiAgICAgICAgICBbbmdNb2RlbF09XCJpczEySG91ckZvcm1hdCgpID8gc3RhcnRIb3VyKCkgOiBzdGFydEhvdXIyNCgpXCIgXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiaXMxMkhvdXJGb3JtYXQoKSA/IHN0YXJ0SG91clNpZ25hbC5zZXQoJGV2ZW50KSA6IHN0YXJ0SG91cjI0U2lnbmFsLnNldCgkZXZlbnQpOyBvblN0YXJ0SG91cklucHV0KClcIlxuICAgICAgICAgIFttaW5dPVwiaXMxMkhvdXJGb3JtYXQoKSA/IDEgOiAwXCIgXG4gICAgICAgICAgW21heF09XCJpczEySG91ckZvcm1hdCgpID8gMTIgOiAyM1wiIFxuICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICBjbGFzcz1cInRpbWUtaW5wdXQgaG91ci1pbnB1dFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJISFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWUtc2VwYXJhdG9yXCI+Ojwvc3Bhbj5cbiAgICAgICAgPGlucHV0IFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIiBcbiAgICAgICAgICBbbmdNb2RlbF09XCJzdGFydE1pbnV0ZSgpXCIgKG5nTW9kZWxDaGFuZ2UpPVwic3RhcnRNaW51dGVTaWduYWwuc2V0KCRldmVudClcIiBcbiAgICAgICAgICAoaW5wdXQpPVwib25TdGFydE1pbnV0ZUlucHV0KClcIlxuICAgICAgICAgIG1pbj1cIjBcIiBcbiAgICAgICAgICBtYXg9XCI1OVwiIFxuICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICBjbGFzcz1cInRpbWUtaW5wdXQgbWludXRlLWlucHV0XCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIk1NXCI+XG4gICAgICAgIDxzZWxlY3QgXG4gICAgICAgICAgW25nTW9kZWxdPVwic3RhcnRBbVBtKClcIiAobmdNb2RlbENoYW5nZSk9XCJzdGFydEFtUG1TaWduYWwuc2V0KCRldmVudClcIiBcbiAgICAgICAgICBjbGFzcz1cImFtLXBtLXNlbGVjdG9yXCJcbiAgICAgICAgICAqbmdJZj1cImlzMTJIb3VyRm9ybWF0KClcIj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQU1cIj5BTTwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJQTVwiPlBNPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgXG4gICAgPGRpdiBjbGFzcz1cInRpbWUtc2VjdGlvblwiPlxuICAgICAgPGg0PlRvPC9oND5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWlucHV0c1wiPlxuICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiIFxuICAgICAgICAgIFtuZ01vZGVsXT1cImlzMTJIb3VyRm9ybWF0KCkgPyBlbmRIb3VyKCkgOiBlbmRIb3VyMjQoKVwiIFxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImlzMTJIb3VyRm9ybWF0KCkgPyBlbmRIb3VyU2lnbmFsLnNldCgkZXZlbnQpIDogZW5kSG91cjI0U2lnbmFsLnNldCgkZXZlbnQpOyBvbkVuZEhvdXJJbnB1dCgpXCJcbiAgICAgICAgICBbbWluXT1cImlzMTJIb3VyRm9ybWF0KCkgPyAxIDogMFwiIFxuICAgICAgICAgIFttYXhdPVwiaXMxMkhvdXJGb3JtYXQoKSA/IDEyIDogMjNcIiBcbiAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgY2xhc3M9XCJ0aW1lLWlucHV0IGhvdXItaW5wdXRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiSEhcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lLXNlcGFyYXRvclwiPjo8L3NwYW4+XG4gICAgICAgIDxpbnB1dCBcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCIgXG4gICAgICAgICAgW25nTW9kZWxdPVwiZW5kTWludXRlKClcIiAobmdNb2RlbENoYW5nZSk9XCJlbmRNaW51dGVTaWduYWwuc2V0KCRldmVudClcIiBcbiAgICAgICAgICAoaW5wdXQpPVwib25FbmRNaW51dGVJbnB1dCgpXCJcbiAgICAgICAgICBtaW49XCIwXCIgXG4gICAgICAgICAgbWF4PVwiNTlcIiBcbiAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgY2xhc3M9XCJ0aW1lLWlucHV0IG1pbnV0ZS1pbnB1dFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJNTVwiPlxuICAgICAgICA8c2VsZWN0IFxuICAgICAgICAgIFtuZ01vZGVsXT1cImVuZEFtUG0oKVwiIChuZ01vZGVsQ2hhbmdlKT1cImVuZEFtUG1TaWduYWwuc2V0KCRldmVudClcIiBcbiAgICAgICAgICBjbGFzcz1cImFtLXBtLXNlbGVjdG9yXCJcbiAgICAgICAgICAqbmdJZj1cImlzMTJIb3VyRm9ybWF0KClcIj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQU1cIj5BTTwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJQTVwiPlBNPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICBcbiAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlcl9fZm9vdGVyXCI+XG4gICAgPGJ1dHRvbiBtaXMtYnV0dG9uIHR5cGU9XCJub25lXCIgaWQ9J21vYmlsZS1mb290ZXItYnRuJyAoY2xpY2spPVwiY2FuY2VsRGF0ZVBpY2tlcigpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtaXMtYnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgaWQ9XCJtb2JpbGUtZm9vdGVyLWJ0blwiIChjbGljayk9XCJhcHBseURhdGVzKClcIiBbZGlzYWJsZWRdPVwiIWlzRGF0ZXNWYWxpZCgpXCI+QXBwbHk8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
|
|
1159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9kYXRlcmFuZ2VwaWNrZXJfdjIvdHotZHJwLWNvbnRhaW5lci90ei1kcnAtY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2RhdGVyYW5nZXBpY2tlcl92Mi90ei1kcnAtY29udGFpbmVyL3R6LWRycC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUzRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBR3BDLE9BQU8sS0FBZ0IsTUFBTSxPQUFPLENBQUM7QUFDckMsT0FBTyxRQUFRLE1BQU0sdUJBQXVCLENBQUM7QUFDN0MsT0FBTyxHQUFHLE1BQU0sa0JBQWtCLENBQUM7QUFDbkMsT0FBTyxhQUFhLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxjQUFjLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxpQkFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUM5RCxPQUFPLFNBQVMsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7OztJQ1B2QyxBQURGLDJCQUEwRCxpQkFLdkQ7SUFGQyxvTkFBUywyQkFBaUIsS0FBQztJQUczQixZQUNGO0lBQ0YsQUFERSxpQkFBUyxFQUNMOzs7O0lBTkosY0FBaUU7SUFBakUsa0dBQWlFO0lBSS9ELGNBQ0Y7SUFERSw4Q0FDRjs7OztJQVJKLCtCQUE0RjtJQUMxRiwrRUFBMEQ7SUFTcEQs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SCxBQURFLEFBRG9ILGlCQUFTLEVBQ3ZILEVBQ0Y7OztZQWpONkUsOENBQWdDO1lBR3pHLGVBQTBDO1lBQTFDLDhLQUEwQztZQW9CMUMsZUFFRTtZQUZGLG9GQUVFO1lBU0csZUFBK0M7WUFBL0MsaUZBQStDO1lBU3BELGVBRUU7WUFGRixnRkFFRTtZQVlrRSxlQUFhO1lBQWIsd0NBQWE7WUFlL0QsZUFBc0I7WUFBdEIsaURBQXNCO1lBZ0JuQyxlQUF5QztZQUF6QywyRUFBeUM7WUFNOUMsY0FFRTtZQUZGLGdGQUVFO1lBWWtFLGVBQWE7WUFBYix3Q0FBYTtZQWUvRCxlQUFtQjtZQUFuQiw4Q0FBbUI7WUFnQkMsY0FBeUM7WUFBekMsOERBQXlDO1lBb0VMLGVBQTRCO1lBQTVCLDhDQUE0Qjs7O2lGRHRMbkcsdUJBQXVCO2NBTG5DLFNBQVM7MkJBQ0UsWUFBWTs7c0JBK0hULE1BQU07dUJBQUMsY0FBYztnREE4RGxDLFVBQVU7a0JBRFQsWUFBWTttQkFBQyxhQUFhOztrRkF4TGhCLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9uSW5pdCwgc2lnbmFsLCBjb21wdXRlZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDT05UQUlORVJfREFUQSwgREFURV9GT1JNQVQgfSBmcm9tIFwiLi4vZGF0ZXJhbmdlcGlja2VyLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgSUN1cnJlbnRNb250aCwgSUN1cnJlbnRNb250aERhdGVzLCBJRGF0ZVBpY2tlckRhdGEsIElXZWVrRGF5LCBJU2VsZWN0ZWREYXRlc0NvbmZpZywgUmFuZ2VJdGVtIH0gZnJvbSBcIi4uL21vZGVscy9kcnAtY29uZmlnLm1vZGVsXCI7XG5pbXBvcnQgeyBnZXRNb250aCB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcIm1pcy1jcnlzdGFsLWRlc2lnbi1zeXN0ZW0vdG9hc3RcIjtcblxuaW1wb3J0IGRheWpzLCB7IERheWpzIH0gZnJvbSAnZGF5anMnO1xuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZSc7XG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMnO1xuaW1wb3J0IGlzU2FtZU9yQWZ0ZXIgZnJvbSAnZGF5anMvcGx1Z2luL2lzU2FtZU9yQWZ0ZXInO1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckJlZm9yZSc7XG5pbXBvcnQgY3VzdG9tUGFyc2VGb3JtYXQgZnJvbSAnZGF5anMvcGx1Z2luL2N1c3RvbVBhcnNlRm9ybWF0J1xuaW1wb3J0IGlzQmV0d2VlbiBmcm9tICdkYXlqcy9wbHVnaW4vaXNCZXR3ZWVuJztcbmRheWpzLmV4dGVuZChpc0JldHdlZW4pO1xuZGF5anMuZXh0ZW5kKHV0Yyk7XG5kYXlqcy5leHRlbmQodGltZXpvbmUpO1xuZGF5anMuZXh0ZW5kKGN1c3RvbVBhcnNlRm9ybWF0KTtcbmRheWpzLmV4dGVuZChpc1NhbWVPckFmdGVyKTtcbmRheWpzLmV4dGVuZChpc1NhbWVPckJlZm9yZSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtaXMtdHotZHJwXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vdHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBUekRycENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgQ1VTVE9NX1JBTkdFX0xBQkVMID0gXCJDdXN0b20gUmFuZ2VcIjtcbiAgcmVhZG9ubHkgZGF0YSA9IHNpZ25hbDxJRGF0ZVBpY2tlckRhdGE+KHRoaXMuaW5qZWN0ZWREYXRhKTtcbiAgcHJpdmF0ZSBkYXlqc0luc3RhbmNlID0gKC4uLmFyZ3MpID0+IHtcbiAgICByZXR1cm4gZGF5anMoLi4uYXJncyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFBhcnNlIGRhdGUgc3RyaW5nIHVzaW5nIGNvbmZpZ3VyZWQgZm9ybWF0IHdpdGggZmFsbGJhY2tcbiAgICovXG4gIHByaXZhdGUgcGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhkYXRlU3RyaW5nOiBzdHJpbmcpOiBkYXlqcy5EYXlqcyB7XG4gICAgaWYgKCFkYXRlU3RyaW5nIHx8IGRhdGVTdHJpbmcgPT09ICdJbnZhbGlkIERhdGUnIHx8IGRhdGVTdHJpbmcgPT09ICd1bmRlZmluZWQnIHx8IGRhdGVTdHJpbmcgPT09ICdudWxsJykge1xuICAgICAgcmV0dXJuIGRheWpzKCdpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgLy8gRmlyc3QgdHJ5IHRoZSBjb25maWd1cmVkIGZvcm1hdFxuICAgIGNvbnN0IGNvbmZpZ3VyZWRGb3JtYXQgPSB0aGlzLmRhdGEoKS5kcENvbmZpZz8uZm9ybWF0O1xuICAgIGlmIChjb25maWd1cmVkRm9ybWF0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBkYXlqcyhkYXRlU3RyaW5nLCBjb25maWd1cmVkRm9ybWF0KTtcbiAgICAgICAgaWYgKHBhcnNlZC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBDb250aW51ZSB0byBmYWxsYmFjayBmb3JtYXRzXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgdG8gY29tbW9uIGZvcm1hdHMgaWYgY29uZmlndXJlZCBmb3JtYXQgZmFpbHNcbiAgICBjb25zdCBmYWxsYmFja0Zvcm1hdHMgPSBbXG4gICAgICAnREQvTU1NL1lZWVknLFxuICAgICAgJ0REL01NL1lZWVknLFxuICAgICAgJ0RELU1NTS1ZWVlZJyxcbiAgICAgICdERC1NTS1ZWVlZJyxcbiAgICAgICdZWVlZLU1NLUREJ1xuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IGZvcm1hdCBvZiBmYWxsYmFja0Zvcm1hdHMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IGRheWpzKGRhdGVTdHJpbmcsIGZvcm1hdCk7XG4gICAgICAgIGlmIChwYXJzZWQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gQ29udGludWUgdG8gbmV4dCBmb3JtYXRcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBhbGwgZm9ybWF0cyBmYWlsLCB0cnkgcGFyc2luZyB3aXRob3V0IGZvcm1hdCAobGV0IGRheWpzIGd1ZXNzKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBkYXlqcyhkYXRlU3RyaW5nKTtcbiAgICAgIGlmIChwYXJzZWQuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHBhcnNlIGRhdGUgd2l0aCBhbnkgZm9ybWF0OicsIGRhdGVTdHJpbmcsIGVycm9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF5anMoJ2ludmFsaWQnKTtcbiAgfVxuICBwcml2YXRlIHJhd1dlZWtEYXlzOiBzdHJpbmdbXSA9IFtcIlNVTlwiLCBcIk1PTlwiLCBcIlRVRVwiLCBcIldFRFwiLCBcIlRIVVwiLCBcIkZSSVwiLCBcIlNBVFwiXTtcbiAgXG4gIC8vIFNpZ25hbC1iYXNlZCBzdGF0ZSBtYW5hZ2VtZW50XG4gIHByaXZhdGUgcmVhZG9ubHkgd2Vla0RheXNTaWduYWwgPSBzaWduYWw8SVdlZWtEYXlbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRNb250aE51bWJlclNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRNb250aFNpZ25hbCA9IHNpZ25hbDxJQ3VycmVudE1vbnRoPihcIkphbnVhcnlcIik7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudFllYXJOdW1iZXJTaWduYWwgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50TW9udGhEYXRlc1NpZ25hbCA9IHNpZ25hbDxJQ3VycmVudE1vbnRoRGF0ZXNbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IG5leHRNb250aE51bWJlclNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBwcml2YXRlIHJlYWRvbmx5IG5leHRNb250aFNpZ25hbCA9IHNpZ25hbDxJQ3VycmVudE1vbnRoPihcIkphbnVhcnlcIik7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmV4dFllYXJOdW1iZXJTaWduYWwgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBuZXh0TW9udGhEYXRlc1NpZ25hbCA9IHNpZ25hbDxJQ3VycmVudE1vbnRoRGF0ZXNbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzUHJldmlvdXNNb250aERpc2FibGVkU2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc05leHRNb250aERpc2FibGVkU2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3Rpb25TdGFydGVkU2lnbmFsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwgPSBzaWduYWw8SVNlbGVjdGVkRGF0ZXNDb25maWc+KHsgc3RhcnREYXRlOiBudWxsLCBlbmREYXRlOiBudWxsIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzRGF0ZXNWYWxpZFNpZ25hbCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtTGFiZWxTaWduYWwgPSBzaWduYWw8c3RyaW5nPih0aGlzLkNVU1RPTV9SQU5HRV9MQUJFTCk7XG4gIFxuICAvLyBUaW1lIHNlbGVjdGlvbiBzaWduYWxzXG4gIHJlYWRvbmx5IHN0YXJ0SG91clNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDEyKTtcbiAgcmVhZG9ubHkgc3RhcnRNaW51dGVTaWduYWwgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcmVhZG9ubHkgc3RhcnRBbVBtU2lnbmFsID0gc2lnbmFsPHN0cmluZz4oJ0FNJyk7XG4gIHJlYWRvbmx5IGVuZEhvdXJTaWduYWwgPSBzaWduYWw8bnVtYmVyPigxMik7XG4gIHJlYWRvbmx5IGVuZE1pbnV0ZVNpZ25hbCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICByZWFkb25seSBlbmRBbVBtU2lnbmFsID0gc2lnbmFsPHN0cmluZz4oJ0FNJyk7XG4gIHJlYWRvbmx5IHN0YXJ0SG91cjI0U2lnbmFsID0gc2lnbmFsPG51bWJlcj4oMTIpO1xuICByZWFkb25seSBlbmRIb3VyMjRTaWduYWwgPSBzaWduYWw8bnVtYmVyPigxMik7XG4gIFxuICAvLyBDb21wdXRlZCBwcm9wZXJ0aWVzIGZvciB0ZW1wbGF0ZSBhY2Nlc3NcbiAgd2Vla0RheXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLndlZWtEYXlzU2lnbmFsKCkpO1xuICBjdXJyZW50TW9udGhOdW1iZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKTtcbiAgY3VycmVudE1vbnRoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jdXJyZW50TW9udGhTaWduYWwoKSk7XG4gIGN1cnJlbnRZZWFyTnVtYmVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbCgpKTtcbiAgbmV4dE1vbnRoTnVtYmVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKSk7XG4gIG5leHRNb250aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMubmV4dE1vbnRoU2lnbmFsKCkpO1xuICBuZXh0WWVhck51bWJlciA9IGNvbXB1dGVkKCgpID0+IHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwoKSk7XG4gIGlzUHJldmlvdXNNb250aERpc2FibGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZFNpZ25hbCgpKTtcbiAgaXNOZXh0TW9udGhEaXNhYmxlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNOZXh0TW9udGhEaXNhYmxlZFNpZ25hbCgpKTtcbiAgc2VsZWN0aW9uU3RhcnRlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0aW9uU3RhcnRlZFNpZ25hbCgpKTtcbiAgbG9jYWxTZWxlY3RlZERhdGVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKSk7XG4gIGlzRGF0ZXNWYWxpZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNEYXRlc1ZhbGlkU2lnbmFsKCkpO1xuICBzZWxlY3RlZEl0ZW1MYWJlbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRJdGVtTGFiZWxTaWduYWwoKSk7XG4gIGN1cnJlbnRNb250aERhdGVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIC8vIERlcGVuZGVuY2llczogY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLCBjdXJyZW50WWVhck51bWJlclNpZ25hbCwgbG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsXG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpLCB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpO1xuICB9KTtcbiAgbmV4dE1vbnRoRGF0ZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAvLyBEZXBlbmRlbmNpZXM6IG5leHRNb250aE51bWJlclNpZ25hbCwgbmV4dFllYXJOdW1iZXJTaWduYWwsIGxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbFxuICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlclNpZ25hbCgpLCB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsKCkpO1xuICB9KTtcblxuXG4gIC8vIFRpbWUgZnVuY3Rpb25hbGl0eSBjb21wdXRlZCBwcm9wZXJ0aWVzXG4gIHN0YXJ0SG91ciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhcnRIb3VyU2lnbmFsKCkpO1xuICBzdGFydE1pbnV0ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhcnRNaW51dGVTaWduYWwoKSk7XG4gIHN0YXJ0QW1QbSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhcnRBbVBtU2lnbmFsKCkpO1xuICBlbmRIb3VyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5lbmRIb3VyU2lnbmFsKCkpO1xuICBlbmRNaW51dGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVuZE1pbnV0ZVNpZ25hbCgpKTtcbiAgZW5kQW1QbSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZW5kQW1QbVNpZ25hbCgpKTtcbiAgc3RhcnRIb3VyMjQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXJ0SG91cjI0U2lnbmFsKCkpO1xuICBlbmRIb3VyMjQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVuZEhvdXIyNFNpZ25hbCgpKTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KENPTlRBSU5FUl9EQVRBKSBwcml2YXRlIGluamVjdGVkRGF0YTogSURhdGVQaWNrZXJEYXRhLCBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UpIHtcbiAgICB0aGlzLmRhdGEgPSBzaWduYWw8SURhdGVQaWNrZXJEYXRhPih0aGlzLmluamVjdGVkRGF0YSk7IFxuICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsLnNldCh0aGlzLmRhdGEoKS5kYXRlcyk7XG4gICAgdGhpcy5pc0RhdGVzVmFsaWRTaWduYWwuc2V0KGZhbHNlKTtcbiAgICBpZiAodGhpcy5kYXRhKCkuZGF0ZXMuc3RhcnREYXRlICYmIHRoaXMuZGF0YSgpLmRhdGVzLmVuZERhdGUpIHtcbiAgICAgIHRoaXMuaXNEYXRlc1ZhbGlkU2lnbmFsLnNldCh0cnVlKTtcbiAgICB9XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBzZWxlY3RlZEl0ZW1MYWJlbCBmcm9tIGRhdGEuc2VsZWN0ZWRSYW5nZUxhYmVsIGlmIGF2YWlsYWJsZVxuICAgIGlmICh0aGlzLmRhdGEoKS5zZWxlY3RlZFJhbmdlTGFiZWwpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtTGFiZWxTaWduYWwuc2V0KHRoaXMuZGF0YSgpLnNlbGVjdGVkUmFuZ2VMYWJlbCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEluaXRpYWxpemUgZGF5anNJbnN0YW5jZSB3aXRoIHRpbWV6b25lIGhhbmRsaW5nXG4gICAgaWYgKHRoaXMuZGF0YSgpPy5kcENvbmZpZz8udGltZXpvbmUpIHtcbiAgICAgIHRoaXMuZGF5anNJbnN0YW5jZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGRheWpzLnR6KGFyZ3NbMF0sIGFyZ3NbMV0gfHwgJ0REL01NL1lZWVknLCB0aGlzLmRhdGEoKS5kcENvbmZpZy50aW1lem9uZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdFcnJvciBwYXJzaW5nIGRhdGUgd2l0aCB0aW1lem9uZTonLCBlcnJvciwgJ2FyZ3M6JywgYXJncyk7XG4gICAgICAgICAgcmV0dXJuIGRheWpzKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFNldCBkZWZhdWx0IHZhbHVlcyBzYWZlbHkgdXNpbmcgc2lnbmFsc1xuICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldCh0aGlzLmRheWpzSW5zdGFuY2UoKS5tb250aCgpKTtcbiAgICB0aGlzLm5leHRNb250aE51bWJlclNpZ25hbC5zZXQodGhpcy5kYXlqc0luc3RhbmNlKCkuYWRkKDEsIFwibW9udGhcIikubW9udGgoKSk7XG4gICAgdGhpcy5jdXJyZW50TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcbiAgICB0aGlzLm5leHRNb250aFNpZ25hbC5zZXQoZ2V0TW9udGgodGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKSkpO1xuICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwuc2V0KHRoaXMuZGF5anNJbnN0YW5jZSgpLnllYXIoKSk7XG4gICAgdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbC5zZXQodGhpcy5kYXlqc0luc3RhbmNlKCkuYWRkKDEsIFwibW9udGhcIikueWVhcigpKTtcbiAgICB0aGlzLndlZWtEYXlzU2lnbmFsLnNldCh0aGlzLnJhd1dlZWtEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4gKHtcbiAgICAgIGxhYmVsOiBgJHtkYXlbMF19JHtkYXkuc2xpY2UoMSkudG9Mb3dlckNhc2UoKX1gLFxuICAgICAgaXNDdXJyZW50RGF5OiB0aGlzLmRheWpzSW5zdGFuY2UoKS5kYXkoKSA9PT0gaW5kZXhcbiAgICB9KSkpO1xuICAgIFxuICAgIGlmICghdGhpcy5kYXRhKCk/LmRwQ29uZmlnPy5mb3JtYXQpIHtcbiAgICAgIHRoaXMuZGF0YSgpLmRwQ29uZmlnID0ge1xuICAgICAgICAuLi50aGlzLmRhdGEoKS5kcENvbmZpZyxcbiAgICAgICAgZm9ybWF0OiBEQVRFX0ZPUk1BVFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgY2FsZW5kYXIgZnJvbSBpbml0aWFsIHNlbGVjdGVkIGRhdGVzXG4gICAgdGhpcy51cGRhdGVDYWxlbmRhckZyb21TZWxlY3RlZERhdGVzKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbGN1bGF0ZU1pbk1heERheXMoKTtcbiAgICB0aGlzLmluaXRpYWxpemVUaW1lVmFsdWVzKCk7XG5cbiAgICBpZih0aGlzLmRhdGEoKT8uc2hvd1ByZXZNb250aCAmJiAhdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZCl7XG4gICAgICB0aGlzLm5hdmlnYXRlTW9udGgoJ1BSRVZJT1VTJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0cmFjdERheU1vbnRoKGRheTogYW55LCBtb250aDogYW55LCB5ZWFyOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBgJHtkYXl9ICR7bW9udGh9ICR7eWVhcn1gO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcihcImtleWRvd24uZXNjXCIpXG4gIGNsb3NlT25Fc2MoKSB7XG4gICAgdGhpcy5jYW5jZWxEYXRlUGlja2VyKCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZU1pbk1heERheXMoKSB7XG4gICAgY29uc3QgY3VycmVudEluc3RhbmNlID0gdGhpcy5kYXlqc0luc3RhbmNlKCkueWVhcih0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpO1xuICAgIGNvbnN0IG1pbkRhdGUgPSAhIXRoaXMuZGF0YSgpLmRwQ29uZmlnLm1pbkRhdGUgPyB0aGlzLmRheWpzSW5zdGFuY2UodGhpcy5kYXRhKCkuZHBDb25maWcubWluRGF0ZSwgdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KSA6IGRheWpzKCdpbnZhbGlkJyk7XG4gICAgaWYgKG1pbkRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLmlzUHJldmlvdXNNb250aERpc2FibGVkU2lnbmFsLnNldChtaW5EYXRlLmlzU2FtZU9yQWZ0ZXIoY3VycmVudEluc3RhbmNlLCBcIm1vbnRoXCIpKTtcbiAgICB9XG4gICAgY29uc3QgbWF4RGF0ZSA9ICEhdGhpcy5kYXRhKCkuZHBDb25maWcubWF4RGF0ZSA/IHRoaXMuZGF5anNJbnN0YW5jZSh0aGlzLmRhdGEoKS5kcENvbmZpZy5tYXhEYXRlLCB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpIDogZGF5anMoJ2ludmFsaWQnKTtcbiAgICBpZiAobWF4RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMuaXNOZXh0TW9udGhEaXNhYmxlZFNpZ25hbC5zZXQobWF4RGF0ZS5pc1NhbWVPckJlZm9yZShjdXJyZW50SW5zdGFuY2UsIFwibW9udGhcIikpO1xuICAgIH1cbiAgfVxuXG4gIG5hdmlnYXRlTW9udGgoZGlyZWN0aW9uOiBcIk5FWFRcIiB8IFwiUFJFVklPVVNcIik6IHZvaWQge1xuICAgIGxldCB0aGlzTW9udGg6IERheWpzID0gZGF5anMoKS55ZWFyKHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkubW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSk7XG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gXCJORVhUXCIpIHtcbiAgICAgdGhpc01vbnRoID0gdGhpc01vbnRoLmFkZCgxLCBcIm1vbnRoXCIpO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBcIlBSRVZJT1VTXCIpIHtcbiAgICAgdGhpc01vbnRoID0gdGhpc01vbnRoLnN1YnRyYWN0KDEsIFwibW9udGhcIik7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldCh0aGlzTW9udGgubW9udGgoKSk7XG4gICAgdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwuc2V0KHRoaXNNb250aC5jbG9uZSgpLmFkZCgxLCBcIm1vbnRoXCIpLm1vbnRoKCkpO1xuICAgIHRoaXMuY3VycmVudE1vbnRoU2lnbmFsLnNldChnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKSk7XG4gICAgdGhpcy5uZXh0TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcbiAgICBpZiAodGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKSA9PT0gMCAmJiBkaXJlY3Rpb24gPT09IFwiUFJFVklPVVNcIikge1xuICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgLSAxKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkgPT09IDExICYmIGRpcmVjdGlvbiA9PT0gXCJORVhUXCIpIHtcbiAgICAgdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbC5zZXQodGhpcy5uZXh0WWVhck51bWJlclNpZ25hbCgpICsgMSk7XG4gICAgfWVsc2UgaWYgKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkgPT09IDAgJiYgZGlyZWN0aW9uID09PSBcIk5FWFRcIikge1xuICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgKyAxKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkgPT09IDExICYmIGRpcmVjdGlvbiA9PT0gXCJQUkVWSU9VU1wiKSB7XG4gICAgIHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwuc2V0KHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwoKSAtIDEpO1xuICAgIH1lbHNle1xuICAgICB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRNb250aERhdGVzU2lnbmFsLnNldCh0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5jdXJyZW50TW9udGhOdW1iZXIoKSwgdGhpcy5jdXJyZW50WWVhck51bWJlcigpKSk7XG4gICAgdGhpcy5uZXh0TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMubmV4dE1vbnRoTnVtYmVyKCksIHRoaXMubmV4dFllYXJOdW1iZXIoKSkpO1xuICAgIHRoaXMuY2FsY3VsYXRlTWluTWF4RGF5cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBjYWxlbmRhciBtb250aC95ZWFyIGJhc2VkIG9uIHNlbGVjdGVkIGRhdGVzXG4gICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBsb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwgY2hhbmdlcyB0byBrZWVwIGNhbGVuZGFyIGluIHN5bmNcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlQ2FsZW5kYXJGcm9tU2VsZWN0ZWREYXRlcygpOiB2b2lkIHtcbiAgICBjb25zdCBsb2NhbFNlbGVjdGVkRGF0ZXMgPSB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpO1xuICAgIGxldCBzZWxlY3RlZFN0YXJ0RGF0ZTogRGF5anM7XG5cbiAgICBpZiAobG9jYWxTZWxlY3RlZERhdGVzPy5zdGFydERhdGUpIHtcbiAgICAgICAgc2VsZWN0ZWRTdGFydERhdGUgPSB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHMobG9jYWxTZWxlY3RlZERhdGVzLnN0YXJ0RGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0ZWRTdGFydERhdGUgPSBkYXlqcygnaW52YWxpZCcpO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3RlZFN0YXJ0RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50WWVhck51bWJlclNpZ25hbC5zZXQoc2VsZWN0ZWRTdGFydERhdGUueWVhcigpKTtcbiAgICAgICAgdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbC5zZXQoc2VsZWN0ZWRTdGFydERhdGUuYWRkKDEsIFwibW9udGhcIikueWVhcigpKTtcbiAgICAgICAgdGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwuc2V0KHNlbGVjdGVkU3RhcnREYXRlLmdldChcIm1vbnRoXCIpKTtcbiAgICAgICAgdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwuc2V0KHNlbGVjdGVkU3RhcnREYXRlLmFkZCgxLCBcIm1vbnRoXCIpLm1vbnRoKCkpO1xuICAgICAgICBcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbmREYXRlID0gbG9jYWxTZWxlY3RlZERhdGVzPy5lbmREYXRlID8gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKGxvY2FsU2VsZWN0ZWREYXRlcy5lbmREYXRlKSA6IG51bGw7XG4gICAgICAgIFxuICAgICAgICBpZiAoc2VsZWN0ZWRFbmREYXRlICYmIHNlbGVjdGVkRW5kRGF0ZS5pc1ZhbGlkKCkgJiYgc2VsZWN0ZWRFbmREYXRlLmlzQWZ0ZXIoc2VsZWN0ZWRTdGFydERhdGUsICdtb250aCcpKSB7XG4gICAgICAgICAgICB0aGlzLm5leHRNb250aE51bWJlclNpZ25hbC5zZXQoc2VsZWN0ZWRFbmREYXRlLm1vbnRoKCkpO1xuICAgICAgICAgICAgdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbC5zZXQoc2VsZWN0ZWRFbmREYXRlLnllYXIoKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgbW9udGggbGFiZWxzXG4gICAgICAgIHRoaXMuY3VycmVudE1vbnRoU2lnbmFsLnNldChnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpKSk7XG4gICAgICAgIHRoaXMubmV4dE1vbnRoU2lnbmFsLnNldChnZXRNb250aCh0aGlzLm5leHRNb250aE51bWJlclNpZ25hbCgpKSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGNhbGVuZGFyIGRhdGVzIHRvIHJlZmxlY3QgdGhlIHNlbGVjdGVkIGRhdGVzXG4gICAgICAgIHRoaXMuY3VycmVudE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpLCB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkpKTtcbiAgICAgICAgdGhpcy5uZXh0TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwoKSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVEYXRlcyhtb250aDogbnVtYmVyLCBjdXJyZW50WWVhck51bWJlcjogbnVtYmVyKTogSUN1cnJlbnRNb250aERhdGVzW10ge1xuICAgIGxldCBkYXRlczogSUN1cnJlbnRNb250aERhdGVzW10gPSBbXTtcbiAgICBjb25zdCBkYXlzSW5Nb250aCA9IGRheWpzKCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRheXNJbk1vbnRoKCk7XG4gICAgZm9yIChsZXQgY3VycmVudERhdGUgPSAxOyBjdXJyZW50RGF0ZSA8PSBkYXlzSW5Nb250aDsgY3VycmVudERhdGUrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IGRheWpzKCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRhdGUoY3VycmVudERhdGUpO1xuICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGRhdGUuZm9ybWF0KHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICBsZXQgaXNEaXNhYmxlZERheSA9IHRoaXMuZGF0YSgpLmRhdGVzRGlzYWJsZWQuc29tZShkID0+IGQgPT09IGRhdGVTdHJpbmcpO1xuICAgICAgLy8gUGFyc2UgbWluL21heCBkYXRlcyBzYWZlbHkgLSB0cnkgZGF0ZS1vbmx5IGZvcm1hdCBmaXJzdCwgdGhlbiBmdWxsIGZvcm1hdFxuICAgICAgbGV0IG1pbkRhdGUgPSBudWxsO1xuICAgICAgbGV0IG1heERhdGUgPSBudWxsO1xuICAgICAgXG4gICAgXG4gICAgICBpZiAodGhpcy5kYXRhKCkuZHBDb25maWcubWluRGF0ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1pbkRhdGVTdHIgPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5taW5EYXRlLnNwbGl0KCcgJylbMF07XG4gICAgICAgICAgbWluRGF0ZSA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhtaW5EYXRlU3RyKTtcbiAgICAgICAgICBpZiAoIW1pbkRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICBtaW5EYXRlID0gZGF5anModGhpcy5kYXRhKCkuZHBDb25maWcubWluRGF0ZSwgdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdFcnJvciBwYXJzaW5nIG1pbiBkYXRlOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAodGhpcy5kYXRhKCkuZHBDb25maWcubWF4RGF0ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1heERhdGVTdHIgPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5tYXhEYXRlLnNwbGl0KCcgJylbMF07XG4gICAgICAgICAgbWF4RGF0ZSA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhtYXhEYXRlU3RyKTtcbiAgICAgICAgICBpZiAoIW1heERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICBtYXhEYXRlID0gZGF5anModGhpcy5kYXRhKCkuZHBDb25maWcubWF4RGF0ZSwgdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdFcnJvciBwYXJzaW5nIG1heCBkYXRlOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoIWlzRGlzYWJsZWREYXkgJiYgbWluRGF0ZSAmJiBtaW5EYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICAgIGlzRGlzYWJsZWREYXkgPSBtaW5EYXRlLmlzQWZ0ZXIoZGF0ZSwgXCJkYXlcIik7XG4gICAgICB9XG4gICAgICBpZiAoIWlzRGlzYWJsZWREYXkgJiYgbWF4RGF0ZSAmJiBtYXhEYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICAgIGlzRGlzYWJsZWREYXkgPSBtYXhEYXRlLmlzQmVmb3JlKGRhdGUsIFwiZGF5XCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuZGF0YSgpPy5kcENvbmZpZz8ubWF4QWxsb3dlZFJhbmdlID4gMCAmJlxuICAgICAgICAhaXNEaXNhYmxlZERheSAmJlxuICAgICAgICAodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKT8uc3RhcnREYXRlID8/IGZhbHNlKSAmJiAoISh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLmVuZERhdGUgPz8gZmFsc2UpKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpPy5zdGFydERhdGUpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICBjb25zdCBtYXhFbmREYXRlID0gc3RhcnREYXRlLmNsb25lKCkuYWRkKHRoaXMuZGF0YSgpLmRwQ29uZmlnLm1heEFsbG93ZWRSYW5nZSAtIDEsICdkYXlzJyk7XG4gICAgICAgIGlzRGlzYWJsZWREYXkgPSBkYXRlLmlzQWZ0ZXIobWF4RW5kRGF0ZSwgJ2RheScpIFxuICAgICAgfVxuICAgICAgY29uc3QgaXNDdXJyZW50RGF5ID1cbiAgICAgICAgdGhpcy5kYXlqc0luc3RhbmNlKCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRhdGUoY3VycmVudERhdGUpLmZvcm1hdCh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpID09PVxuICAgICAgICB0aGlzLmRheWpzSW5zdGFuY2UoKS5mb3JtYXQodGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgIFxuICAgICAgLy8gRXh0cmFjdCBkYXRlIHBhcnQgZm9yIGNvbXBhcmlzb24gKGhhbmRsZSBib3RoIGRhdGUtb25seSBhbmQgZGF0ZXRpbWUgZm9ybWF0cylcbiAgICAgIGxldCBzdGFydERhdGVTdHJpbmcgPSB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpPy5zdGFydERhdGU7XG4gICAgICBsZXQgZW5kRGF0ZVN0cmluZyA9IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCk/LmVuZERhdGU7XG4gICAgICBcbiAgICAgIC8vIE9ubHkgZXh0cmFjdCBkYXRlIHBhcnQgaWYgdGhlIGZvcm1hdCBjb250YWlucyB0aW1lIGNvbXBvbmVudHNcbiAgICAgIGlmICh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuaW5jbHVkZXMoJ0hIJykgfHwgdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdtbScpIHx8IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmNsdWRlcygnQScpKSB7XG4gICAgICAgIC8vIEZvciBkYXRldGltZSBmb3JtYXRzLCB3ZSBuZWVkIHRvIGV4dHJhY3QganVzdCB0aGUgZGF0ZSBwYXJ0XG4gICAgICAgIC8vIFRyeSB0byBwYXJzZSB0aGUgZnVsbCBzdHJpbmcgYW5kIHRoZW4gZm9ybWF0IGl0IGFzIGRhdGUtb25seSBmb3IgY29tcGFyaXNvblxuICAgICAgICBpZiAoc3RhcnREYXRlU3RyaW5nKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkU3RhcnQgPSB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHMoc3RhcnREYXRlU3RyaW5nKTtcbiAgICAgICAgICBpZiAocGFyc2VkU3RhcnQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBFeHRyYWN0IGRhdGUgcGFydCBieSBmaW5kaW5nIHRoZSB0aW1lIGJvdW5kYXJ5IC0gaGFuZGxlIHNwYWNlcyBpbiBkYXRlIHBhcnRcbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdGFydE1hdGNoID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0Lm1hdGNoKC8oXFxzKykoSEh8bW18c3N8QXxhKS8pO1xuICAgICAgICAgICAgaWYgKHRpbWVTdGFydE1hdGNoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVTdGFydEluZGV4ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluZGV4T2YodGltZVN0YXJ0TWF0Y2hbMF0pO1xuICAgICAgICAgICAgICBjb25zdCBkYXRlT25seUZvcm1hdCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5zdWJzdHJpbmcoMCwgdGltZVN0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgICBzdGFydERhdGVTdHJpbmcgPSBwYXJzZWRTdGFydC5mb3JtYXQoZGF0ZU9ubHlGb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5kRGF0ZVN0cmluZykge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZEVuZCA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhlbmREYXRlU3RyaW5nKTtcbiAgICAgICAgICBpZiAocGFyc2VkRW5kLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gRXh0cmFjdCBkYXRlIHBhcnQgYnkgZmluZGluZyB0aGUgdGltZSBib3VuZGFyeSAtIGhhbmRsZSBzcGFjZXMgaW4gZGF0ZSBwYXJ0XG4gICAgICAgICAgICBjb25zdCB0aW1lU3RhcnRNYXRjaCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5tYXRjaCgvKFxccyspKEhIfG1tfHNzfEF8YSkvKTtcbiAgICAgICAgICAgIGlmICh0aW1lU3RhcnRNYXRjaCkge1xuICAgICAgICAgICAgICBjb25zdCB0aW1lU3RhcnRJbmRleCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmRleE9mKHRpbWVTdGFydE1hdGNoWzBdKTtcbiAgICAgICAgICAgICAgY29uc3QgZGF0ZU9ubHlGb3JtYXQgPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuc3Vic3RyaW5nKDAsIHRpbWVTdGFydEluZGV4KTtcbiAgICAgICAgICAgICAgZW5kRGF0ZVN0cmluZyA9IHBhcnNlZEVuZC5mb3JtYXQoZGF0ZU9ubHlGb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBQYXJzZSB0aGUgc2VsZWN0ZWQgZGF0ZXMgdG8gZ2V0IHByb3BlciBkYXlqcyBpbnN0YW5jZXMgZm9yIGNvbXBhcmlzb25cbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZVBhcnNlZCA9IHN0YXJ0RGF0ZVN0cmluZyA/IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhzdGFydERhdGVTdHJpbmcpIDogbnVsbDtcbiAgICAgIGNvbnN0IGVuZERhdGVQYXJzZWQgPSBlbmREYXRlU3RyaW5nID8gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKGVuZERhdGVTdHJpbmcpIDogbnVsbDtcbiAgICAgIFxuICAgICAgY29uc3QgaXNTZWxlY3RlZFN0YXJ0RGF5ID1cbiAgICAgICAgIWlzRGlzYWJsZWREYXkgJiZcbiAgICAgICAgc3RhcnREYXRlUGFyc2VkICYmXG4gICAgICAgIHN0YXJ0RGF0ZVBhcnNlZC5pc1ZhbGlkKCkgJiZcbiAgICAgICAgZGF0ZS5pc1NhbWUoc3RhcnREYXRlUGFyc2VkLCAnZGF5Jyk7XG4gICAgICAgIFxuICAgICAgY29uc3QgaXNTZWxlY3RlZEVuZERheSA9XG4gICAgICAgICFpc0Rpc2FibGVkRGF5ICYmXG4gICAgICAgIGVuZERhdGVQYXJzZWQgJiZcbiAgICAgICAgZW5kRGF0ZVBhcnNlZC5pc1ZhbGlkKCkgJiZcbiAgICAgICAgZGF0ZS5pc1NhbWUoZW5kRGF0ZVBhcnNlZCwgJ2RheScpO1xuICAgICAgICBcbiAgICAgIC8vIEZvciByYW5nZSBjYWxjdWxhdGlvbiwgdXNlIHRoZSBhbHJlYWR5IHBhcnNlZCBkYXRlc1xuICAgICAgY29uc3QgaXNBZnRlclNlbGVjdGVkU3RhcnREYXRlID0gc3RhcnREYXRlUGFyc2VkID8gdGhpcy5kYXlqc0luc3RhbmNlKGRhdGUpLmlzQWZ0ZXIoc3RhcnREYXRlUGFyc2VkLCBcImRheVwiKSA6IGZhbHNlO1xuICAgICAgY29uc3QgaXNCZWZvcmVTZWxlY3RlZEVuZERhdGUgPSBlbmREYXRlUGFyc2VkID8gdGhpcy5kYXlqc0luc3RhbmNlKGRhdGUpLmlzQmVmb3JlKGVuZERhdGVQYXJzZWQsIFwiZGF5XCIpIDogZmFsc2U7XG4gICAgICBcbiAgICAgIGNvbnN0IGluUmFuZ2VEYXkgPVxuICAgICAgICBzdGFydERhdGVQYXJzZWQgJiYgZW5kRGF0ZVBhcnNlZCAmJlxuICAgICAgICBzdGFydERhdGVQYXJzZWQuaXNWYWxpZCgpICYmIGVuZERhdGVQYXJzZWQuaXNWYWxpZCgpICYmXG4gICAgICAgIGlzQWZ0ZXJTZWxlY3RlZFN0YXJ0RGF0ZSAmJlxuICAgICAgICBpc0JlZm9yZVNlbGVjdGVkRW5kRGF0ZTtcbiAgICAgIGRhdGVzLnB1c2goe1xuICAgICAgICBkYXRlOiBjdXJyZW50RGF0ZSxcbiAgICAgICAgd2Vla0RheTogZGF0ZS5kYXkoKSxcbiAgICAgICAgaXNDdXJyZW50RGF5LFxuICAgICAgICBpc1NlbGVjdGVkU3RhcnREYXksXG4gICAgICAgIGlzU2VsZWN0ZWRFbmREYXksXG4gICAgICAgIGluUmFuZ2VEYXksXG4gICAgICAgIHRvYXN0TWVzc2FnZTogdGhpcy5kYXRhKCkubWVzc2FnZXMuZmluZChxID0+IGRhdGUuZm9ybWF0KHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdCkgPT09IHEuZGF0ZSk/Lm1lc3NhZ2UgfHwgXCJcIixcbiAgICAgICAgaXNEaXNhYmxlZERheVxuICAgICAgfSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBkYXRlc1swXS53ZWVrRGF5OyBpID4gMDsgaS0tKSB7XG4gICAgICBkYXRlcy51bnNoaWZ0KHsgZGF0ZTogMCwgd2Vla0RheTogaSAtIDEgfSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlcztcbiAgfVxuXG5zZWxlY3REYXkoZnJvbTogXCJMRUZUXCIgfCBcIlJJR0hUXCIsIGRheTogSUN1cnJlbnRNb250aERhdGVzKSB7XG4gIGlmIChkYXkuZGF0ZSA8PSAwKSByZXR1cm47XG4gIGlmICghZGF5LmlzRGlzYWJsZWREYXkpIHtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbUxhYmVsU2lnbmFsLnNldCh0aGlzLkNVU1RPTV9SQU5HRV9MQUJFTCk7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uU3RhcnRlZFNpZ25hbCgpKSB7XG4gICAgICBjb25zdCBkYXlqc0RheSA9IGRheWpzKClcbiAgICAgICAgLnllYXIoZnJvbSA9PT0gXCJMRUZUXCIgPyB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgOiB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsKCkpXG4gICAgICAgIC5tb250aChmcm9tID09PSBcIkxFRlRcIiA/IHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkgOiB0aGlzLm5leHRNb250aE51bWJlclNpZ25hbCgpKVxuICAgICAgICAuZGF0ZShkYXkuZGF0ZSk7XG4gICAgICAgIFxuICAgICAgLy8gRXh0cmFjdCBkYXRlIHBhcnQgZnJvbSBleGlzdGluZyBzdGFydCBkYXRlIGZvciBjb21wYXJpc29uXG4gICAgICBsZXQgc3RhcnREYXRlU3RyaW5nID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKS5zdGFydERhdGU7XG4gICAgICBcbiAgICAgIC8vIE9ubHkgZXh0cmFjdCBkYXRlIHBhcnQgaWYgdGhlIGZvcm1hdCBjb250YWlucyB0aW1lIGNvbXBvbmVudHNcbiAgICAgIGlmICh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuaW5jbHVkZXMoJ0hIJykgfHwgdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdtbScpIHx8IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmNsdWRlcygnQScpKSB7XG4gICAgICAgIC8vIEZvciBkYXRldGltZSBmb3JtYXRzLCB3ZSBuZWVkIHRvIGV4dHJhY3QganVzdCB0aGUgZGF0ZSBwYXJ0XG4gICAgICAgIC8vIFRyeSB0byBwYXJzZSB0aGUgZnVsbCBzdHJpbmcgYW5kIHRoZW4gZm9ybWF0IGl0IGFzIGRhdGUtb25seSBmb3IgY29tcGFyaXNvblxuICAgICAgICBpZiAoc3RhcnREYXRlU3RyaW5nKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkU3RhcnQgPSB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHMoc3RhcnREYXRlU3RyaW5nKTtcbiAgICAgICAgICBpZiAocGFyc2VkU3RhcnQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBFeHRyYWN0IGRhdGUgcGFydCBieSBmaW5kaW5nIHRoZSB0aW1lIGJvdW5kYXJ5IC0gaGFuZGxlIHNwYWNlcyBpbiBkYXRlIHBhcnRcbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdGFydE1hdGNoID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0Lm1hdGNoKC8oXFxzKykoSEh8bW18c3N8QXxhKS8pO1xuICAgICAgICAgICAgaWYgKHRpbWVTdGFydE1hdGNoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVTdGFydEluZGV4ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluZGV4T2YodGltZVN0YXJ0TWF0Y2hbMF0pO1xuICAgICAgICAgICAgICBjb25zdCBkYXRlT25seUZvcm1hdCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5zdWJzdHJpbmcoMCwgdGltZVN0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgICBzdGFydERhdGVTdHJpbmcgPSBwYXJzZWRTdGFydC5mb3JtYXQoZGF0ZU9ubHlGb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBzdGFydERhdGUgPSBzdGFydERhdGVTdHJpbmcgPyB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHMoc3RhcnREYXRlU3RyaW5nKSA6IG51bGw7XG4gICAgICBcbiAgICAgIC8vIElmIHRoZSBzZWxlY3RlZCBkYXRlIGlzIGJlZm9yZSB0aGUgc3RhcnQgZGF0ZSwgbWFrZSBpdCB0aGUgbmV3IHN0YXJ0IGRhdGVcbiAgICAgIGlmIChzdGFydERhdGUgJiYgZGF5anNEYXkuaXNCZWZvcmUoc3RhcnREYXRlLCBcImRheVwiKSkge1xuICAgICAgICBsZXQgZm9ybWF0dGVkRGF0ZSA9IGRheWpzRGF5LmZvcm1hdCh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICBcbiAgICAgICAgLy8gSWYgdGltZSBpcyBlbmFibGVkLCBhcHBlbmQgY3VycmVudCB0aW1lIHRvIHRoZSBkYXRlXG4gICAgICAgIGlmICh0aGlzLmRhdGEoKS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlKSB7XG4gICAgICAgICAgY29uc3Qgbm93ID0gZGF5anMoKTtcbiAgICAgICAgICAvLyBFeHRyYWN0IGRhdGUgcGFydCBmcm9tIHRoZSBjb25maWd1cmVkIGZvcm1hdCAtIGhhbmRsZSBzcGFjZXMgaW4gZGF0ZSBwYXJ0XG4gICAgICAgICAgLy8gTG9vayBmb3IgdGhlIHBhdHRlcm4gd2hlcmUgdGltZSBzdGFydHMgKEhILCBtbSwgc3MsIEEsIGEpXG4gICAgICAgICAgY29uc3QgdGltZVN0YXJ0TWF0Y2ggPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQubWF0Y2goLyhcXHMrKShISHxtbXxzc3xBfGEpLyk7XG4gICAgICAgICAgaWYgKHRpbWVTdGFydE1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lU3RhcnRJbmRleCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmRleE9mKHRpbWVTdGFydE1hdGNoWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVPbmx5Rm9ybWF0ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LnN1YnN0cmluZygwLCB0aW1lU3RhcnRJbmRleCk7XG4gICAgICAgICAgICBjb25zdCB0aW1lT25seUZvcm1hdCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5zdWJzdHJpbmcodGltZVN0YXJ0SW5kZXggKyB0aW1lU3RhcnRNYXRjaFsxXS5sZW5ndGgpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBkYXRlU3RyaW5nID0gZGF5anNEYXkuZm9ybWF0KGRhdGVPbmx5Rm9ybWF0KTtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdHJpbmcgPSBub3cuZm9ybWF0KHRpbWVPbmx5Rm9ybWF0KTtcbiAgICAgICAgICAgIGZvcm1hdHRlZERhdGUgPSBkYXRlU3RyaW5nICsgdGltZVN0YXJ0TWF0Y2hbMV0gKyB0aW1lU3RyaW5nO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGYWxsYmFjayBpZiBubyB0aW1lIHBhdHRlcm4gZm91bmRcbiAgICAgICAgICAgIGZvcm1hdHRlZERhdGUgPSBkYXlqc0RheS5mb3JtYXQodGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsLnNldCh7XG4gICAgICAgICAgc3RhcnREYXRlOiBmb3JtYXR0ZWREYXRlLFxuICAgICAgICAgIGVuZERhdGU6IG51bGwsXG4gICAgICAgICAgc2VsZWN0ZWRSYW5nZUxhYmVsOiB0aGlzLkNVU1RPTV9SQU5HRV9MQUJFTFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVDYWxlbmRhckZyb21TZWxlY3RlZERhdGVzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRlZFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgICAgXG4gICAgICBsZXQgZm9ybWF0dGVkRW5kRGF0ZSA9IGRheWpzRGF5LmZvcm1hdCh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgXG4gICAgICAvLyBJZiB0aW1lIGlzIGVuYWJsZWQsIGFwcGVuZCBjdXJyZW50IHRpbWUgdG8gdGhlIGRhdGVcbiAgICAgIGlmICh0aGlzLmRhdGEoKS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IGRheWpzKCk7XG4gICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGZyb20gdGhlIGNvbmZpZ3VyZWQgZm9ybWF0IC0gaGFuZGxlIHNwYWNlcyBpbiBkYXRlIHBhcnRcbiAgICAgICAgLy8gTG9vayBmb3IgdGhlIHBhdHRlcm4gd2hlcmUgdGltZSBzdGFydHMgKEhILCBtbSwgc3MsIEEsIGEpXG4gICAgICAgIGNvbnN0IHRpbWVTdGFydE1hdGNoID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0Lm1hdGNoKC8oXFxzKykoSEh8bW18c3N8QXxhKS8pO1xuICAgICAgICBpZiAodGltZVN0YXJ0TWF0Y2gpIHtcbiAgICAgICAgICBjb25zdCB0aW1lU3RhcnRJbmRleCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmRleE9mKHRpbWVTdGFydE1hdGNoWzBdKTtcbiAgICAgICAgICBjb25zdCBkYXRlT25seUZvcm1hdCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5zdWJzdHJpbmcoMCwgdGltZVN0YXJ0SW5kZXgpO1xuICAgICAgICAgIGNvbnN0IHRpbWVPbmx5Rm9ybWF0ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LnN1YnN0cmluZyh0aW1lU3RhcnRJbmRleCArIHRpbWVTdGFydE1hdGNoWzFdLmxlbmd0aCk7XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGRheWpzRGF5LmZvcm1hdChkYXRlT25seUZvcm1hdCk7XG4gICAgICAgICAgY29uc3QgdGltZVN0cmluZyA9IG5vdy5mb3JtYXQodGltZU9ubHlGb3JtYXQpO1xuICAgICAgICAgIGZvcm1hdHRlZEVuZERhdGUgPSBkYXRlU3RyaW5nICsgdGltZVN0YXJ0TWF0Y2hbMV0gKyB0aW1lU3RyaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIGlmIG5vIHRpbWUgcGF0dGVybiBmb3VuZFxuICAgICAgICAgIGZvcm1hdHRlZEVuZERhdGUgPSBkYXlqc0RheS5mb3JtYXQodGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbC5zZXQoe1xuICAgICAgICAuLi50aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLFxuICAgICAgICBlbmREYXRlOiBmb3JtYXR0ZWRFbmREYXRlLFxuICAgICAgICBzZWxlY3RlZFJhbmdlTGFiZWw6IHRoaXMuQ1VTVE9NX1JBTkdFX0xBQkVMXG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJGcm9tU2VsZWN0ZWREYXRlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ZWRTaWduYWwuc2V0KHRydWUpO1xuICAgICAgXG4gICAgICBsZXQgZm9ybWF0dGVkU3RhcnREYXRlID0gZGF5anMoKVxuICAgICAgICAueWVhcihmcm9tID09PSBcIkxFRlRcIiA/IHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSA6IHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwoKSlcbiAgICAgICAgLm1vbnRoKGZyb20gPT09IFwiTEVGVFwiID8gdGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSA6IHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkpXG4gICAgICAgIC5kYXRlKGRheS5kYXRlKVxuICAgICAgICAuZm9ybWF0KHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICBcbiAgICAgIC8vIElmIHRpbWUgaXMgZW5hYmxlZCwgYXBwZW5kIGN1cnJlbnQgdGltZSB0byB0aGUgZGF0ZVxuICAgICAgaWYgKHRoaXMuZGF0YSgpLmRwQ29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUpIHtcbiAgICAgICAgY29uc3Qgbm93ID0gZGF5anMoKTtcbiAgICAgICAgLy8gRXh0cmFjdCBkYXRlIHBhcnQgZnJvbSB0aGUgY29uZmlndXJlZCBmb3JtYXQgLSBoYW5kbGUgc3BhY2VzIGluIGRhdGUgcGFydFxuICAgICAgICAvLyBMb29rIGZvciB0aGUgcGF0dGVybiB3aGVyZSB0aW1lIHN0YXJ0cyAoSEgsIG1tLCBzcywgQSwgYSlcbiAgICAgICAgY29uc3QgdGltZVN0YXJ0TWF0Y2ggPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQubWF0Y2goLyhcXHMrKShISHxtbXxzc3xBfGEpLyk7XG4gICAgICAgIGlmICh0aW1lU3RhcnRNYXRjaCkge1xuICAgICAgICAgIGNvbnN0IHRpbWVTdGFydEluZGV4ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluZGV4T2YodGltZVN0YXJ0TWF0Y2hbMF0pO1xuICAgICAgICAgIGNvbnN0IGRhdGVPbmx5Rm9ybWF0ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LnN1YnN0cmluZygwLCB0aW1lU3RhcnRJbmRleCk7XG4gICAgICAgICAgY29uc3QgdGltZU9ubHlGb3JtYXQgPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuc3Vic3RyaW5nKHRpbWVTdGFydEluZGV4ICsgdGltZVN0YXJ0TWF0Y2hbMV0ubGVuZ3RoKTtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBkYXRlU3RyaW5nID0gZGF5anMoKVxuICAgICAgICAgICAgLnllYXIoZnJvbSA9PT0gXCJMRUZUXCIgPyB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgOiB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsKCkpXG4gICAgICAgICAgICAubW9udGgoZnJvbSA9PT0gXCJMRUZUXCIgPyB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpIDogdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKSlcbiAgICAgICAgICAgIC5kYXRlKGRheS5kYXRlKVxuICAgICAgICAgICAgLmZvcm1hdChkYXRlT25seUZvcm1hdCk7XG4gICAgICAgICAgY29uc3QgdGltZVN0cmluZyA9IG5vdy5mb3JtYXQodGltZU9ubHlGb3JtYXQpO1xuICAgICAgICAgIGZvcm1hdHRlZFN0YXJ0RGF0ZSA9IGRhdGVTdHJpbmcgKyB0aW1lU3RhcnRNYXRjaFsxXSArIHRpbWVTdHJpbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRmFsbGJhY2sgaWYgbm8gdGltZSBwYXR0ZXJuIGZvdW5kXG4gICAgICAgICAgZm9ybWF0dGVkU3RhcnREYXRlID0gZGF5anMoKVxuICAgICAgICAgICAgLnllYXIoZnJvbSA9PT0gXCJMRUZUXCIgPyB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgOiB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsKCkpXG4gICAgICAgICAgICAubW9udGgoZnJvbSA9PT0gXCJMRUZUXCIgPyB0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpIDogdGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKSlcbiAgICAgICAgICAgIC5kYXRlKGRheS5kYXRlKVxuICAgICAgICAgICAgLmZvcm1hdCh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsLnNldCh7XG4gICAgICAgIHN0YXJ0RGF0ZTogZm9ybWF0dGVkU3RhcnREYXRlLFxuICAgICAgICBlbmREYXRlOiBudWxsLFxuICAgICAgICBzZWxlY3RlZFJhbmdlTGFiZWw6IHRoaXMuQ1VTVE9NX1JBTkdFX0xBQkVMXG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJGcm9tU2VsZWN0ZWREYXRlcygpO1xuICAgIH1cbiAgICB0aGlzLmlzRGF0ZXNWYWxpZFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgIGlmICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLnN0YXJ0RGF0ZSAmJiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLmVuZERhdGUpIHtcbiAgICAgIHRoaXMuaXNEYXRlc1ZhbGlkU2lnbmFsLnNldCh0cnVlKTtcbiAgICB9XG4gIH1cbiAgaWYgKGRheS50b2FzdE1lc3NhZ2UpIHtcbiAgICB0aGlzLnRvYXN0LmRpc3BsYXlNc2coZGF5LnRvYXN0TWVzc2FnZSwgNDAwMCk7XG4gIH1cbn1cbnNlbGVjdFJhbmdlKGl0ZW06IFJhbmdlSXRlbSkge1xuICBpZiAoIWl0ZW0pIHJldHVybjtcblxuICBsZXQgc3RhcnREYXRlID0gdGhpcy5kYXlqc0luc3RhbmNlKGl0ZW0udmFsdWVbMF0pOyAgXG4gIGxldCBlbmREYXRlID0gdGhpcy5kYXlqc0luc3RhbmNlKGl0ZW0udmFsdWVbMV0pOyAgXG5cbiAgY29uc3Qgc3RhcnREYXRlU3RyID0gc3RhcnREYXRlLmZvcm1hdCh0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQpO1xuICBjb25zdCBlbmREYXRlU3RyID0gZW5kRGF0ZS5mb3JtYXQodGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0KTtcblxuICBjb25zdCBpc0FueURhdGVEaXNhYmxlZCA9IHRoaXMuZGF0YSgpLmRhdGVzRGlzYWJsZWQuc29tZSgoZGF0ZSkgPT5cbiAgICB0aGlzLmRheWpzSW5zdGFuY2UoZGF0ZSAsIHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdCkuaXNCZXR3ZWVuKHN0YXJ0RGF0ZVN0ciwgZW5kRGF0ZVN0ciwgbnVsbCwgJ1tdJylcbiAgKTtcblxuICBjb25zdCBtaW5EYXRlID0gISF0aGlzLmRhdGEoKS5kcENvbmZpZy5taW5EYXRlID8gdGhpcy5kYXlqc0luc3RhbmNlKHRoaXMuZGF0YSgpLmRwQ29uZmlnLm1pbkRhdGUsIHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdCkgOiBkYXlqcygnaW52YWxpZCcpO1xuICBjb25zdCBtYXhEYXRlID0gISF0aGlzLmRhdGEoKS5kcENvbmZpZy5tYXhEYXRlID8gdGhpcy5kYXlqc0luc3RhbmNlKHRoaXMuZGF0YSgpLmRwQ29uZmlnLm1heERhdGUsIHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdCkgOiBkYXlqcygnaW52YWxpZCcpO1xuXG4gIGNvbnN0IGlzV2l0aGluTGltaXRzID1cbiAgICAoIW1pbkRhdGUuaXNWYWxpZCgpIHx8ICFzdGFydERhdGUuaXNCZWZvcmUobWluRGF0ZSwgXCJkYXlcIikpICYmXG4gICAgKCFtYXhEYXRlLmlzVmFsaWQoKSB8fCAhZW5kRGF0ZS5pc0FmdGVyKG1heERhdGUsIFwiZGF5XCIpKTtcblxuICBpZiAoIWlzV2l0aGluTGltaXRzIHx8IGlzQW55RGF0ZURpc2FibGVkKSB7XG4gICAgdGhpcy50b2FzdC5kaXNwbGF5TXNnKFwiU2VsZWN0ZWQgcmFuZ2UgY29udGFpbnMgZGlzYWJsZWQgZGF0ZXMgb3IgaXMgb3V0IG9mIGJvdW5kcy5cIiwgNDAwMCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5zZWxlY3RlZEl0ZW1MYWJlbFNpZ25hbC5zZXQoaXRlbS5sYWJlbCk7XG4gIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsLnNldChzdGFydERhdGUubW9udGgoKSk7XG4gIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwuc2V0KHN0YXJ0RGF0ZS55ZWFyKCkpO1xuXG4gIGlmICh0aGlzLmN1cnJlbnRNb250aE51bWJlclNpZ25hbCgpID09PSAxMSkge1xuICAgIHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsLnNldCgwKTtcbiAgICB0aGlzLm5leHRZZWFyTnVtYmVyU2lnbmFsLnNldCh0aGlzLmN1cnJlbnRZZWFyTnVtYmVyU2lnbmFsKCkgKyAxKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm5leHRNb250aE51bWJlclNpZ25hbC5zZXQodGhpcy5jdXJyZW50TW9udGhOdW1iZXJTaWduYWwoKSArIDEpO1xuICAgIHRoaXMubmV4dFllYXJOdW1iZXJTaWduYWwuc2V0KHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSk7XG4gIH1cblxuICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbC5zZXQoeyBcbiAgICBzdGFydERhdGU6IHN0YXJ0RGF0ZVN0ciwgXG4gICAgZW5kRGF0ZTogZW5kRGF0ZVN0cixcbiAgICBzZWxlY3RlZFJhbmdlTGFiZWw6IGl0ZW0ubGFiZWxcbiAgfSk7XG5cbiAgdGhpcy5jdXJyZW50TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcbiAgdGhpcy5uZXh0TW9udGhTaWduYWwuc2V0KGdldE1vbnRoKHRoaXMubmV4dE1vbnRoTnVtYmVyU2lnbmFsKCkpKTtcbiAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyU2lnbmFsKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXJTaWduYWwoKSkpO1xuICB0aGlzLm5leHRNb250aERhdGVzU2lnbmFsLnNldCh0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5uZXh0TW9udGhOdW1iZXJTaWduYWwoKSwgdGhpcy5uZXh0WWVhck51bWJlclNpZ25hbCgpKSk7XG5cbiAgdGhpcy5pc0RhdGVzVmFsaWRTaWduYWwuc2V0KCEhKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuc3RhcnREYXRlICYmIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuZW5kRGF0ZSkpO1xufVxuXG4gIHJlc2V0UmFuZ2UoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1MYWJlbFNpZ25hbC5zZXQodGhpcy5DVVNUT01fUkFOR0VfTEFCRUwpO1xuICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsLnNldCh7XG4gICAgICBzdGFydERhdGU6IG51bGwsXG4gICAgICBlbmREYXRlOiBudWxsLFxuICAgICAgc2VsZWN0ZWRSYW5nZUxhYmVsOiB0aGlzLkNVU1RPTV9SQU5HRV9MQUJFTFxuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRlZFNpZ25hbC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuaXNEYXRlc1ZhbGlkU2lnbmFsLnNldChmYWxzZSk7XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlc1NpZ25hbC5zZXQodGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKCksIHRoaXMuY3VycmVudFllYXJOdW1iZXIoKSkpO1xuICAgIHRoaXMubmV4dE1vbnRoRGF0ZXNTaWduYWwuc2V0KHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlcigpLCB0aGlzLm5leHRZZWFyTnVtYmVyKCkpKTtcbiAgfVxuXG4gIFxuICBhcHBseURhdGVzKCkge1xuICAgIC8vIElmIHRpbWUgaXMgZW5hYmxlZCwgYXBwZW5kIHRpbWUgdG8gdGhlIGRhdGVzIGJlZm9yZSBhcHBseWluZ1xuICAgIGlmICh0aGlzLmRhdGEoKS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlKSB7XG4gICAgICBsZXQgc3RhcnRUaW1lOiBzdHJpbmc7XG4gICAgICBsZXQgZW5kVGltZTogc3RyaW5nO1xuICAgICAgXG4gICAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAgIHN0YXJ0VGltZSA9IHRoaXMuZm9ybWF0VGltZSh0aGlzLnN0YXJ0SG91cigpLCB0aGlzLnN0YXJ0TWludXRlKCksIHRoaXMuc3RhcnRBbVBtKCkpO1xuICAgICAgICBlbmRUaW1lID0gdGhpcy5mb3JtYXRUaW1lKHRoaXMuZW5kSG91cigpLCB0aGlzLmVuZE1pbnV0ZSgpLCB0aGlzLmVuZEFtUG0oKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydFRpbWUgPSB0aGlzLmZvcm1hdFRpbWUodGhpcy5zdGFydEhvdXIyNCgpLCB0aGlzLnN0YXJ0TWludXRlKCksICcnKTtcbiAgICAgICAgZW5kVGltZSA9IHRoaXMuZm9ybWF0VGltZSh0aGlzLmVuZEhvdXIyNCgpLCB0aGlzLmVuZE1pbnV0ZSgpLCAnJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEV4dHJhY3Qgb25seSB0aGUgZGF0ZSBwYXJ0IChiZWZvcmUgYW55IGV4aXN0aW5nIHRpbWUpIGFuZCBhcHBlbmQgdGhlIHNlbGVjdGVkIHRpbWVcbiAgICAgIGNvbnN0IGxvY2FsRGF0ZXMgPSB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpO1xuICAgICAgbGV0IHN0YXJ0RGF0ZU9ubHkgPSBsb2NhbERhdGVzLnN0YXJ0RGF0ZTtcbiAgICAgIGxldCBlbmREYXRlT25seSA9IGxvY2FsRGF0ZXMuZW5kRGF0ZTtcbiAgICAgIFxuICAgICAgLy8gT25seSBleHRyYWN0IGRhdGUgcGFydCBpZiB0aGUgZm9ybWF0IGNvbnRhaW5zIHRpbWUgY29tcG9uZW50c1xuICAgICAgaWYgKHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmNsdWRlcygnSEgnKSB8fCB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuaW5jbHVkZXMoJ21tJykgfHwgdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdBJykpIHtcbiAgICAgICAgLy8gRm9yIGRhdGV0aW1lIGZvcm1hdHMsIHdlIG5lZWQgdG8gZXh0cmFjdCBqdXN0IHRoZSBkYXRlIHBhcnRcbiAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSBmdWxsIHN0cmluZyBhbmQgdGhlbiBmb3JtYXQgaXQgYXMgZGF0ZS1vbmx5IGZvciBjb21wYXJpc29uXG4gICAgICAgIGlmIChzdGFydERhdGVPbmx5KSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkU3RhcnQgPSB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHMoc3RhcnREYXRlT25seSk7XG4gICAgICAgICAgaWYgKHBhcnNlZFN0YXJ0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gRXh0cmFjdCBkYXRlIHBhcnQgYnkgZmluZGluZyB0aGUgdGltZSBib3VuZGFyeSAtIGhhbmRsZSBzcGFjZXMgaW4gZGF0ZSBwYXJ0XG4gICAgICAgICAgICBjb25zdCB0aW1lU3RhcnRNYXRjaCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5tYXRjaCgvKFxccyspKEhIfG1tfHNzfEF8YSkvKTtcbiAgICAgICAgICAgIGlmICh0aW1lU3RhcnRNYXRjaCkge1xuICAgICAgICAgICAgICBjb25zdCB0aW1lU3RhcnRJbmRleCA9IHRoaXMuZGF0YSgpLmRwQ29uZmlnLmZvcm1hdC5pbmRleE9mKHRpbWVTdGFydE1hdGNoWzBdKTtcbiAgICAgICAgICAgICAgY29uc3QgZGF0ZU9ubHlGb3JtYXQgPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuc3Vic3RyaW5nKDAsIHRpbWVTdGFydEluZGV4KTtcbiAgICAgICAgICAgICAgc3RhcnREYXRlT25seSA9IHBhcnNlZFN0YXJ0LmZvcm1hdChkYXRlT25seUZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbmREYXRlT25seSkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZEVuZCA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhlbmREYXRlT25seSk7XG4gICAgICAgICAgaWYgKHBhcnNlZEVuZC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGJ5IGZpbmRpbmcgdGhlIHRpbWUgYm91bmRhcnkgLSBoYW5kbGUgc3BhY2VzIGluIGRhdGUgcGFydFxuICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0TWF0Y2ggPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQubWF0Y2goLyhcXHMrKShISHxtbXxzc3xBfGEpLyk7XG4gICAgICAgICAgICBpZiAodGltZVN0YXJ0TWF0Y2gpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0SW5kZXggPSB0aGlzLmRhdGEoKS5kcENvbmZpZy5mb3JtYXQuaW5kZXhPZih0aW1lU3RhcnRNYXRjaFswXSk7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGVPbmx5Rm9ybWF0ID0gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LnN1YnN0cmluZygwLCB0aW1lU3RhcnRJbmRleCk7XG4gICAgICAgICAgICAgIGVuZERhdGVPbmx5ID0gcGFyc2VkRW5kLmZvcm1hdChkYXRlT25seUZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZVdpdGhUaW1lID0gc3RhcnREYXRlT25seSArICcgJyArIHN0YXJ0VGltZTtcbiAgICAgIGNvbnN0IGVuZERhdGVXaXRoVGltZSA9IGVuZERhdGVPbmx5ICsgJyAnICsgZW5kVGltZTtcbiAgICAgIFxuICAgICAgdGhpcy5kYXRhKCkuZGF0ZUNoYW5nZSh7XG4gICAgICAgIHN0YXJ0RGF0ZTogc3RhcnREYXRlV2l0aFRpbWUsXG4gICAgICAgIGVuZERhdGU6IGVuZERhdGVXaXRoVGltZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YSgpLmRhdGVDaGFuZ2UodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKSk7XG4gICAgfVxuICB9XG5cbiAgXG4gIGNhbmNlbERhdGVQaWNrZXIoKSB7XG4gICAgdGhpcy5kYXRhKCkuY2xvc2UoKTtcbiAgfVxuICBcbiAgLy8gVGltZS1yZWxhdGVkIG1ldGhvZHNcbiAgb25TdGFydEhvdXJJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICB0aGlzLnN0YXJ0SG91clNpZ25hbC5zZXQodGhpcy52YWxpZGF0ZUhvdXJJbnB1dCh0aGlzLnN0YXJ0SG91cigpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnRIb3VyMjRTaWduYWwuc2V0KHRoaXMudmFsaWRhdGVIb3VySW5wdXQyNCh0aGlzLnN0YXJ0SG91cjI0KCkpKTtcbiAgICB9XG4gIH1cbiAgXG4gIG9uU3RhcnRNaW51dGVJbnB1dCgpIHtcbiAgICB0aGlzLnN0YXJ0TWludXRlU2lnbmFsLnNldCh0aGlzLnZhbGlkYXRlTWludXRlSW5wdXQodGhpcy5zdGFydE1pbnV0ZSgpKSk7XG4gIH1cbiAgXG4gIG9uRW5kSG91cklucHV0KCkge1xuICAgIGlmICh0aGlzLmlzMTJIb3VyRm9ybWF0KCkpIHtcbiAgICAgIHRoaXMuZW5kSG91clNpZ25hbC5zZXQodGhpcy52YWxpZGF0ZUhvdXJJbnB1dCh0aGlzLmVuZEhvdXIoKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuZEhvdXIyNFNpZ25hbC5zZXQodGhpcy52YWxpZGF0ZUhvdXJJbnB1dDI0KHRoaXMuZW5kSG91cjI0KCkpKTtcbiAgICB9XG4gIH1cbiAgXG4gIG9uRW5kTWludXRlSW5wdXQoKSB7XG4gICAgdGhpcy5lbmRNaW51dGVTaWduYWwuc2V0KHRoaXMudmFsaWRhdGVNaW51dGVJbnB1dCh0aGlzLmVuZE1pbnV0ZSgpKSk7XG4gIH1cbiAgXG4gIHZhbGlkYXRlSG91cklucHV0KGhvdXI6IG51bWJlcikge1xuICAgIC8vIEFwcGx5IGJvdW5kcyBiYXNlZCBvbiBmb3JtYXRcbiAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAvLyAxMi1ob3VyIGZvcm1hdDogMS0xMlxuICAgICAgaWYgKGhvdXIgPCAxKSBob3VyID0gMTtcbiAgICAgIGlmIChob3VyID4gMTIpIGhvdXIgPSAxMjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMjQtaG91ciBmb3JtYXQ6IDAtMjNcbiAgICAgIGlmIChob3VyIDwgMCkgaG91ciA9IDA7XG4gICAgICBpZiAoaG91ciA+IDIzKSBob3VyID0gMjM7XG4gICAgfVxuICAgIHJldHVybiBob3VyO1xuICB9XG4gIFxuICAvLyBTcGVjaWFsIHZhbGlkYXRpb24gZm9yIDI0LWhvdXIgZm9ybWF0XG4gIHZhbGlkYXRlSG91cklucHV0MjQoaG91cjogbnVtYmVyKSB7XG4gICAgaWYgKGhvdXIgPCAwKSBob3VyID0gMDtcbiAgICBpZiAoaG91ciA+IDIzKSBob3VyID0gMjM7XG4gICAgcmV0dXJuIGhvdXI7XG4gIH1cbiAgXG4gIHZhbGlkYXRlTWludXRlSW5wdXQobWludXRlOiBudW1iZXIpIHtcbiAgICBpZiAobWludXRlIDwgMCkgbWludXRlID0gMDtcbiAgICBpZiAobWludXRlID4gNTkpIG1pbnV0ZSA9IDU5O1xuICAgIHJldHVybiBtaW51dGU7XG4gIH1cbiAgXG4gIHB1YmxpYyBpczEySG91ckZvcm1hdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdBJykgfHwgdGhpcy5kYXRhKCkuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdhJyk7XG4gIH1cbiAgXG4gIHByaXZhdGUgZm9ybWF0VGltZShob3VyOiBudW1iZXIsIG1pbnV0ZTogbnVtYmVyLCBhbVBtOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzMTJIb3VyRm9ybWF0KCkpIHtcbiAgICAgIHJldHVybiBgJHtob3VyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHttaW51dGUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfSAke2FtUG19YDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIDI0LWhvdXIgZm9ybWF0LCBqdXN0IHJldHVybiB0aGUgaG91ciBhbmQgbWludXRlXG4gICAgICByZXR1cm4gYCR7aG91ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bWludXRlLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVRpbWVWYWx1ZXMoKTogdm9pZCB7XG4gICAgLy8gSW5pdGlhbGl6ZSB0aW1lIHZhbHVlcyBmcm9tIGV4aXN0aW5nIHNlbGVjdGVkIGRhdGVzIGlmIHRoZXkgY29udGFpbiB0aW1lXG4gICAgbGV0IHN0YXJ0VGltZUluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgbGV0IGVuZFRpbWVJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIFxuICAgIGlmICh0aGlzLmRhdGEoKS5kcENvbmZpZy5lbmFibGVUaW1lICYmIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuc3RhcnREYXRlICYmIHR5cGVvZiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLnN0YXJ0RGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZVBhcnRzID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXNTaWduYWwoKS5zdGFydERhdGUuc3BsaXQoJyAnKTtcbiAgICAgIGlmIChzdGFydERhdGVQYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gc3RhcnREYXRlUGFydHMuc2xpY2UoMSkuam9pbignICcpOyAvLyBIYW5kbGUgbXVsdGlwbGUgc3BhY2VzXG4gICAgICAgIHRoaXMucGFyc2VUaW1lU3RyaW5nKHRpbWVQYXJ0LCB0cnVlKTtcbiAgICAgICAgc3RhcnRUaW1lSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5kYXRhKCkuZHBDb25maWcuZW5hYmxlVGltZSAmJiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlc1NpZ25hbCgpLmVuZERhdGUgJiYgdHlwZW9mIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuZW5kRGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGVuZERhdGVQYXJ0cyA9IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzU2lnbmFsKCkuZW5kRGF0ZS5zcGxpdCgnICcpO1xuICAgICAgaWYgKGVuZERhdGVQYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gZW5kRGF0ZVBhcnRzLnNsaWNlKDEpLmpvaW4oJyAnKTsgLy8gSGFuZGxlIG11bHRpcGxlIHNwYWNlc1xuICAgICAgICB0aGlzLnBhcnNlVGltZVN0cmluZyh0aW1lUGFydCwgZmFsc2UpO1xuICAgICAgICBlbmRUaW1lSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBJZiBubyBleGlzdGluZyB0aW1lIGZvdW5kLCBzZXQgY3VycmVudCB0aW1lIGFzIGRlZmF1bHRcbiAgICBpZiAodGhpcy5kYXRhKCkuZHBDb25maWcuZW5hYmxlVGltZSkge1xuICAgICAgaWYgKCFzdGFydFRpbWVJbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLnNldEN1cnJlbnRUaW1lQXNEZWZhdWx0KHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKCFlbmRUaW1lSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50VGltZUFzRGVmYXVsdChmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDdXJyZW50VGltZUFzRGVmYXVsdChpc1N0YXJ0OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gZGF5anMoKTtcbiAgICBjb25zdCBjdXJyZW50SG91ciA9IG5vdy5ob3VyKCk7XG4gICAgY29uc3QgY3VycmVudE1pbnV0ZSA9IG5vdy5taW51dGUoKTtcbiAgICBcbiAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAvLyBDb252ZXJ0IGN1cnJlbnQgdGltZSB0byAxMi1ob3VyIGZvcm1hdFxuICAgICAgbGV0IGhvdXIxMiA9IGN1cnJlbnRIb3VyO1xuICAgICAgbGV0IGFtUG0gPSAnQU0nO1xuICAgICAgXG4gICAgICBpZiAoY3VycmVudEhvdXIgPT09IDApIHtcbiAgICAgICAgaG91cjEyID0gMTI7XG4gICAgICAgIGFtUG0gPSAnQU0nO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA9PT0gMTIpIHtcbiAgICAgICAgaG91cjEyID0gMTI7XG4gICAgICAgIGFtUG0gPSAnUE0nO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA+IDEyKSB7XG4gICAgICAgIGhvdXIxMiA9IGN1cnJlbnRIb3VyIC0gMTI7XG4gICAgICAgIGFtUG0gPSAnUE0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYW1QbSA9ICdBTSc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChpc1N0YXJ0KSB7XG4gICAgICAgIHRoaXMuc3RhcnRIb3VyU2lnbmFsLnNldChob3VyMTIpO1xuICAgICAgICB0aGlzLnN0YXJ0TWludXRlU2lnbmFsLnNldChjdXJyZW50TWludXRlKTtcbiAgICAgICAgdGhpcy5zdGFydEFtUG1TaWduYWwuc2V0KGFtUG0pO1xuICAgICAgICB0aGlzLnN0YXJ0SG91cjI0U2lnbmFsLnNldChjdXJyZW50SG91cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuZEhvdXJTaWduYWwuc2V0KGhvdXIxMik7XG4gICAgICAgIHRoaXMuZW5kTWludXRlU2lnbmFsLnNldChjdXJyZW50TWludXRlKTtcbiAgICAgICAgdGhpcy5lbmRBbVBtU2lnbmFsLnNldChhbVBtKTtcbiAgICAgICAgdGhpcy5lbmRIb3VyMjRTaWduYWwuc2V0KGN1cnJlbnRIb3VyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXNlIGN1cnJlbnQgdGltZSBkaXJlY3RseSBmb3IgMjQtaG91ciBmb3JtYXRcbiAgICAgIGlmIChpc1N0YXJ0KSB7XG4gICAgICAgIHRoaXMuc3RhcnRIb3VyMjRTaWduYWwuc2V0KGN1cnJlbnRIb3VyKTtcbiAgICAgICAgdGhpcy5zdGFydE1pbnV0ZVNpZ25hbC5zZXQoY3VycmVudE1pbnV0ZSk7XG4gICAgICAgIC8vIEFsc28gc2V0IDEyLWhvdXIgdmFsdWVzIGZvciBjb25zaXN0ZW5jeVxuICAgICAgICBpZiAoY3VycmVudEhvdXIgPT09IDApIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0SG91clNpZ25hbC5zZXQoMTIpO1xuICAgICAgICAgIHRoaXMuc3RhcnRBbVBtU2lnbmFsLnNldCgnQU0nKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA9PT0gMTIpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0SG91clNpZ25hbC5zZXQoMTIpO1xuICAgICAgICAgIHRoaXMuc3RhcnRBbVBtU2lnbmFsLnNldCgnUE0nKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA+IDEyKSB7XG4gICAgICAgICAgdGhpcy5zdGFydEhvdXJTaWduYWwuc2V0KGN1cnJlbnRIb3VyIC0gMTIpO1xuICAgICAgICAgIHRoaXMuc3RhcnRBbVBtU2lnbmFsLnNldCgnUE0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0SG91clNpZ25hbC5zZXQoY3VycmVudEhvdXIpO1xuICAgICAgICAgIHRoaXMuc3RhcnRBbVBtU2lnbmFsLnNldCgnQU0nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbmRIb3VyMjRTaWduYWwuc2V0KGN1cnJlbnRIb3VyKTtcbiAgICAgICAgdGhpcy5lbmRNaW51dGVTaWduYWwuc2V0KGN1cnJlbnRNaW51dGUpO1xuICAgICAgICAvLyBBbHNvIHNldCAxMi1ob3VyIHZhbHVlcyBmb3IgY29uc2lzdGVuY3lcbiAgICAgICAgaWYgKGN1cnJlbnRIb3VyID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5lbmRIb3VyU2lnbmFsLnNldCgxMik7XG4gICAgICAgICAgdGhpcy5lbmRBbVBtU2lnbmFsLnNldCgnQU0nKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA9PT0gMTIpIHtcbiAgICAgICAgICB0aGlzLmVuZEhvdXJTaWduYWwuc2V0KDEyKTtcbiAgICAgICAgICB0aGlzLmVuZEFtUG1TaWduYWwuc2V0KCdQTScpO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRIb3VyID4gMTIpIHtcbiAgICAgICAgICB0aGlzLmVuZEhvdXJTaWduYWwuc2V0KGN1cnJlbnRIb3VyIC0gMTIpO1xuICAgICAgICAgIHRoaXMuZW5kQW1QbVNpZ25hbC5zZXQoJ1BNJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbmRIb3VyU2lnbmFsLnNldChjdXJyZW50SG91cik7XG4gICAgICAgICAgdGhpcy5lbmRBbVBtU2lnbmFsLnNldCgnQU0nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VUaW1lU3RyaW5nKHRpbWVTdHJpbmc6IHN0cmluZywgaXNTdGFydDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzMTJIb3VyRm9ybWF0KCkpIHtcbiAgICAgIC8vIFBhcnNlIDEyLWhvdXIgZm9ybWF0OiBcIjEwOjAwIFBNXCJcbiAgICAgIGNvbnN0IG1hdGNoID0gdGltZVN0cmluZy5tYXRjaCgvKFxcZCspOihcXGQrKVxccyooQU18UE0pL2kpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGhvdXIgPSBwYXJzZUludChtYXRjaFsxXSk7XG4gICAgICAgIGNvbnN0IG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoWzJdKTtcbiAgICAgICAgY29uc3QgYW1QbSA9IG1hdGNoWzNdLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIFxuICAgICAgICBpZiAoaXNTdGFydCkge1xuICAgICAgICAgIHRoaXMuc3RhcnRIb3VyU2lnbmFsLnNldChob3VyKTtcbiAgICAgICAgICB0aGlzLnN0YXJ0TWludXRlU2lnbmFsLnNldChtaW51dGUpO1xuICAgICAgICAgIHRoaXMuc3RhcnRBbVBtU2lnbmFsLnNldChhbVBtKTtcbiAgICAgICAgICAvLyBBbHNvIHNldCAyNC1ob3VyIHZhbHVlIGZvciBjb25zaXN0ZW5jeVxuICAgICAgICAgIHRoaXMuc3RhcnRIb3VyMjRTaWduYWwuc2V0KGhvdXIgPT09IDEyID8gKGFtUG0gPT09ICdQTScgPyAxMiA6IDApIDogKGFtUG0gPT09ICdQTScgPyBob3VyICsgMTIgOiBob3VyKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbmRIb3VyU2lnbmFsLnNldChob3VyKTtcbiAgICAgICAgICB0aGlzLmVuZE1pbnV0ZVNpZ25hbC5zZXQobWludXRlKTtcbiAgICAgICAgICB0aGlzLmVuZEFtUG1TaWduYWwuc2V0KGFtUG0pO1xuICAgICAgICAgIC8vIEFsc28gc2V0IDI0LWhvdXIgdmFsdWUgZm9yIGNvbnNpc3RlbmN5XG4gICAgICAgICAgdGhpcy5lbmRIb3VyMjRTaWduYWwuc2V0KGhvdXIgPT09IDEyID8gKGFtUG0gPT09ICdQTScgPyAxMiA6IDApIDogKGFtUG0gPT09ICdQTScgPyBob3VyICsgMTIgOiBob3VyKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUGFyc2UgMjQtaG91ciBmb3JtYXQ6IFwiMjI6MDBcIlxuICAgICAgY29uc3QgbWF0Y2ggPSB0aW1lU3RyaW5nLm1hdGNoKC8oXFxkKyk6KFxcZCspLyk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgaG91cjI0ID0gcGFyc2VJbnQobWF0Y2hbMV0pO1xuICAgICAgICBjb25zdCBtaW51dGUgPSBwYXJzZUludChtYXRjaFsyXSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoaXNTdGFydCkge1xuICAgICAgICAgIC8vIFN0b3JlIGRpcmVjdGx5IGluIDI0LWhvdXIgZm9ybWF0XG4gICAgICAgICAgdGhpcy5zdGFydEhvdXIyNFNpZ25hbC5zZXQoaG91cjI0KTtcbiAgICAgICAgICB0aGlzLnN0YXJ0TWludXRlU2lnbmFsLnNldChtaW51dGUpO1xuICAgICAgICAgIC8vIEFsc28gc2V0IDEyLWhvdXIgdmFsdWVzIGZvciBjb25zaXN0ZW5jeSAodGhvdWdoIG5vdCB1c2VkIGluIDI0LWhvdXIgbW9kZSlcbiAgICAgICAgICBpZiAoaG91cjI0ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0SG91clNpZ25hbC5zZXQoMTIpO1xuICAgICAgICAgICAgdGhpcy5zdGFydEFtUG1TaWduYWwuc2V0KCdBTScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaG91cjI0ID09PSAxMikge1xuICAgICAgICAgICAgdGhpcy5zdGFydEhvdXJTaWduYWwuc2V0KDEyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRBbVBtU2lnbmFsLnNldCgnUE0nKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIyNCA+IDEyKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0SG91clNpZ25hbC5zZXQoaG91cjI0IC0gMTIpO1xuICAgICAgICAgICAgdGhpcy5zdGFydEFtUG1TaWduYWwuc2V0KCdQTScpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0SG91clNpZ25hbC5zZXQoaG91cjI0KTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRBbVBtU2lnbmFsLnNldCgnQU0nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU3RvcmUgZGlyZWN0bHkgaW4gMjQtaG91ciBmb3JtYXRcbiAgICAgICAgICB0aGlzLmVuZEhvdXIyNFNpZ25hbC5zZXQoaG91cjI0KTtcbiAgICAgICAgICB0aGlzLmVuZE1pbnV0ZVNpZ25hbC5zZXQobWludXRlKTtcbiAgICAgICAgICAvLyBBbHNvIHNldCAxMi1ob3VyIHZhbHVlcyBmb3IgY29uc2lzdGVuY3kgKHRob3VnaCBub3QgdXNlZCBpbiAyNC1ob3VyIG1vZGUpXG4gICAgICAgICAgaWYgKGhvdXIyNCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5lbmRIb3VyU2lnbmFsLnNldCgxMik7XG4gICAgICAgICAgICB0aGlzLmVuZEFtUG1TaWduYWwuc2V0KCdBTScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaG91cjI0ID09PSAxMikge1xuICAgICAgICAgICAgdGhpcy5lbmRIb3VyU2lnbmFsLnNldCgxMik7XG4gICAgICAgICAgICB0aGlzLmVuZEFtUG1TaWduYWwuc2V0KCdQTScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaG91cjI0ID4gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kSG91clNpZ25hbC5zZXQoaG91cjI0IC0gMTIpO1xuICAgICAgICAgICAgdGhpcy5lbmRBbVBtU2lnbmFsLnNldCgnUE0nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbmRIb3VyU2lnbmFsLnNldChob3VyMjQpO1xuICAgICAgICAgICAgdGhpcy5lbmRBbVBtU2lnbmFsLnNldCgnQU0nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyXCIgYXJpYS1sYWJlbD1cImRhdGUgcmFuZ2UgcGlja2VyXCIgY2RrVHJhcEZvY3VzIFtjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZV09XCJ0cnVlXCI+XG4gIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX192aWV3XCI+XG4gICAgPGRpdiB0YWJpbmRleD1cIi0xXCIgY2RrRm9jdXNJbml0aWFsPjwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJkYXRhKCk/LmRwQ29uZmlnPy5yYW5nZXM/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX3Jhbmdlc1wiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhKCk/LmRwQ29uZmlnPy5yYW5nZXMgPz8gW11cIiA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUtcmFuZ2UnIDogc2VsZWN0ZWRJdGVtTGFiZWwoKSA9PT0gaXRlbS5sYWJlbH1cIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RSYW5nZShpdGVtKVwiXG4gICAgICAgICAgY2xhc3M9XCJtaXMtYnRuXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+IDxidXR0b24gY2xhc3M9XCJtaXMtYnRuXCIgW25nQ2xhc3NdPVwieydhY3RpdmUtcmFuZ2UnIDogc2VsZWN0ZWRJdGVtTGFiZWwoKSA9PT0gJ0N1c3RvbSBSYW5nZSd9XCIgKGNsaWNrKT1cInJlc2V0UmFuZ2UoKVwiPkN1c3RvbSBSYW5nZTwvYnV0dG9uPiA8L2Rpdj5cbiAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXJfX2xlZnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19oZWFkZXJfX3ByYWJ1XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2Fycm93X19pY29uXCJcbiAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgIChjbGljayk9XCIhaXNQcmV2aW91c01vbnRoRGlzYWJsZWQoKSAmJiBuYXZpZ2F0ZU1vbnRoKCdQUkVWSU9VUycpXCJcbiAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiIWlzUHJldmlvdXNNb250aERpc2FibGVkKCkgJiYgbmF2aWdhdGVNb250aCgnUFJFVklPVVMnKVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIlByZXZpb3VzIE1vbnRoXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnZGlzYWJsZWQtbW9udGgnOiBpc1ByZXZpb3VzTW9udGhEaXNhYmxlZCgpXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMTkuNzA3MSA4LjcwNzExQzIwLjA5NzYgOC4zMTY1OCAyMC4wOTc2IDcuNjgzNDIgMTkuNzA3MSA3LjI5Mjg5TDEzLjM0MzEgMC45Mjg5MzNDMTIuOTUyNiAwLjUzODQwOSAxMi4zMTk1IDAuNTM4NDA5IDExLjkyODkgMC45Mjg5MzNDMTEuNTM4NCAxLjMxOTQ2IDExLjUzODQgMS45NTI2MiAxMS45Mjg5IDIuMzQzMTVMMTcuNTg1OCA4TDExLjkyODkgMTMuNjU2OUMxMS41Mzg0IDE0LjA0NzQgMTEuNTM4NCAxNC42ODA1IDExLjkyODkgMTUuMDcxMUMxMi4zMTk1IDE1LjQ2MTYgMTIuOTUyNiAxNS40NjE2IDEzLjM0MzEgMTUuMDcxMUwxOS43MDcxIDguNzA3MTFaTS04Ljc0MjI4ZS0wOCA5TDE5IDlMMTkgN0w4Ljc0MjI4ZS0wOCA3TC04Ljc0MjI4ZS0wOCA5WlwiXG4gICAgICAgICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3Bhbj4ge3sgY3VycmVudE1vbnRoKCkgfX0ge3sgY3VycmVudFllYXJOdW1iZXIoKSB9fSA8L3NwYW4+XG4gICAgICAgIDxkaXY+PC9kaXY+XG4gICAgICAgIDwhLS0gQnV0dG9uIHZpc2libGUgaW4gbW9iaWxlIHZpZXcgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2Fycm93X19pY29uIG1vYmlsZV92aWV3XCJcbiAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgIChjbGljayk9XCIhaXNOZXh0TW9udGhEaXNhYmxlZCgpICYmIG5hdmlnYXRlTW9udGgoJ05FWFQnKVwiXG4gICAgICAgICAgKGtleXVwLmVudGVyKT1cIiFpc05leHRNb250aERpc2FibGVkKCkgJiYgbmF2aWdhdGVNb250aCgnTkVYVCcpXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiTmV4dCBNb250aFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2Rpc2FibGVkLW1vbnRoJzogaXNOZXh0TW9udGhEaXNhYmxlZCgpXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMTkuNzA3MSA4LjcwNzExQzIwLjA5NzYgOC4zMTY1OCAyMC4wOTc2IDcuNjgzNDIgMTkuNzA3MSA3LjI5Mjg5TDEzLjM0MzEgMC45Mjg5MzNDMTIuOTUyNiAwLjUzODQwOSAxMi4zMTk1IDAuNTM4NDA5IDExLjkyODkgMC45Mjg5MzNDMTEuNTM4NCAxLjMxOTQ2IDExLjUzODQgMS45NTI2MiAxMS45Mjg5IDIuMzQzMTVMMTcuNTg1OCA4TDExLjkyODkgMTMuNjU2OUMxMS41Mzg0IDE0LjA0NzQgMTEuNTM4NCAxNC42ODA1IDExLjkyODkgMTUuMDcxMUMxMi4zMTk1IDE1LjQ2MTYgMTIuOTUyNiAxNS40NjE2IDEzLjM0MzEgMTUuMDcxMUwxOS43MDcxIDguNzA3MTFaTS04Ljc0MjI4ZS0wOCA5TDE5IDlMMTkgN0w4Ljc0MjI4ZS0wOCA3TC04Ljc0MjI4ZS0wOCA5WlwiXG4gICAgICAgICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fYm9keVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fd2Vla2RheXNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fd2Vla2RheVwiICpuZ0Zvcj1cImxldCB3ZWVrRGF5IG9mIHdlZWtEYXlzKClcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHdlZWtEYXkubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fZGF5c1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fZGF5XCIgXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdzZWxlY3RlZC1zYW1lLWRheSc6IGRheS5pc1NlbGVjdGVkU3RhcnREYXkgJiYgZGF5LmlzU2VsZWN0ZWRFbmREYXksXG4gICAgICAgICAgICAgICdzZWxlY3RlZC1zdGFydC1kYXknOiBkYXkuaXNTZWxlY3RlZFN0YXJ0RGF5LFxuICAgICAgICAgICAgICAnc2VsZWN0ZWQtZW5kLWRheSc6IGRheS5pc1NlbGVjdGVkRW5kRGF5LFxuICAgICAgICAgICAgICAnZGlzYWJsZWQtZGF5JzogZGF5LmlzRGlzYWJsZWREYXksXG4gICAgICAgICAgICAgICdpbi1yYW5nZS1kYXknOiBkYXkuaW5SYW5nZURheSxcbiAgICAgICAgICAgICAgJ2lzLXZhbGlkLWRhdGUnOiBkYXkuZGF0ZSA+IDAgJiYgIShkYXkuaXNTZWxlY3RlZFN0YXJ0RGF5ICYmIGRheS5pc1NlbGVjdGVkRW5kRGF5KVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF5IG9mIGN1cnJlbnRNb250aERhdGVzKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdERheSgnTEVGVCcsIGRheSlcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlbGVjdERheSgnTEVGVCcsIGRheSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF5LmRhdGUgPiAwXCJcbiAgICAgICAgICAgICAgW3RhYmluZGV4XT1cImRheS5pc0Rpc2FibGVkRGF5ID8gLTEgOiAwXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXRyYWN0RGF5TW9udGgoZGF5LmRhdGUsIGN1cnJlbnRNb250aCgpLCBjdXJyZW50WWVhck51bWJlcigpKVwiPlxuICAgICAgICAgICAgICB7eyBkYXkuZGF0ZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkYXRlcGlja2VyX19yaWdodFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2hlYWRlcl9fcHJhYnVcIj5cbiAgICAgICAgPGRpdj48L2Rpdj5cbiAgICAgICAgPHNwYW4+IHt7IG5leHRNb250aCgpIH19IHt7IG5leHRZZWFyTnVtYmVyKCkgfX0gPC9zcGFuPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19hcnJvd19faWNvbiBwY192aWV3XCJcbiAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgIChjbGljayk9XCIhaXNOZXh0TW9udGhEaXNhYmxlZCgpICYmIG5hdmlnYXRlTW9udGgoJ05FWFQnKVwiXG4gICAgICAgICAgKGtleXVwLmVudGVyKT1cIiFpc05leHRNb250aERpc2FibGVkKCkgJiYgbmF2aWdhdGVNb250aCgnTkVYVCcpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnZGlzYWJsZWQtbW9udGgnOiBpc05leHRNb250aERpc2FibGVkKClcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyMCAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk0xOS43MDcxIDguNzA3MTFDMjAuMDk3NiA4LjMxNjU4IDIwLjA5NzYgNy42ODM0MiAxOS43MDcxIDcuMjkyODlMMTMuMzQzMSAwLjkyODkzM0MxMi45NTI2IDAuNTM4NDA5IDEyLjMxOTUgMC41Mzg0MDkgMTEuOTI4OSAwLjkyODkzM0MxMS41Mzg0IDEuMzE5NDYgMTEuNTM4NCAxLjk1MjYyIDExLjkyODkgMi4zNDMxNUwxNy41ODU4IDhMMTEuOTI4OSAxMy42NTY5QzExLjUzODQgMTQuMDQ3NCAxMS41Mzg0IDE0LjY4MDUgMTEuOTI4OSAxNS4wNzExQzEyLjMxOTUgMTUuNDYxNiAxMi45NTI2IDE1LjQ2MTYgMTMuMzQzMSAxNS4wNzExTDE5LjcwNzEgOC43MDcxMVpNLTguNzQyMjhlLTA4IDlMMTkgOUwxOSA3TDguNzQyMjhlLTA4IDdMLTguNzQyMjhlLTA4IDlaXCJcbiAgICAgICAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19ib2R5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX193ZWVrZGF5c1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX193ZWVrZGF5XCIgKm5nRm9yPVwibGV0IHdlZWtEYXkgb2Ygd2Vla0RheXMoKVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgd2Vla0RheS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19kYXlzXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19kYXlcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnc2VsZWN0ZWQtc2FtZS1kYXknOiBkYXkuaXNTZWxlY3RlZFN0YXJ0RGF5ICYmIGRheS5pc1NlbGVjdGVkRW5kRGF5LFxuICAgICAgICAgICAgICAnc2VsZWN0ZWQtc3RhcnQtZGF5JzogZGF5LmlzU2VsZWN0ZWRTdGFydERheSxcbiAgICAgICAgICAgICAgJ3NlbGVjdGVkLWVuZC1kYXknOiBkYXkuaXNTZWxlY3RlZEVuZERheSxcbiAgICAgICAgICAgICAgJ2Rpc2FibGVkLWRheSc6IGRheS5pc0Rpc2FibGVkRGF5LFxuICAgICAgICAgICAgICAnaW4tcmFuZ2UtZGF5JzogZGF5LmluUmFuZ2VEYXksXG4gICAgICAgICAgICAgICdpcy12YWxpZC1kYXRlJzogZGF5LmRhdGUgPiAwICYmICEoZGF5LmlzU2VsZWN0ZWRTdGFydERheSAmJiBkYXkuaXNTZWxlY3RlZEVuZERheSlcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRheSBvZiBuZXh0TW9udGhEYXRlcygpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3REYXkoJ1JJR0hUJywgZGF5KVwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VsZWN0RGF5KCdSSUdIVCcsIGRheSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF5LmRhdGUgPiAwXCJcbiAgICAgICAgICAgICAgW3RhYmluZGV4XT1cImRheS5pc0Rpc2FibGVkRGF5ID8gLTEgOiAwXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXRyYWN0RGF5TW9udGgoZGF5LmRhdGUsIG5leHRNb250aCgpLCBuZXh0WWVhck51bWJlcigpKVwiPlxuICAgICAgICAgICAgICB7eyBkYXkuZGF0ZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgXG4gIDwhLS0gVGltZSBTZWxlY3Rpb24gU2VjdGlvbiAtLT5cbiAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX3RpbWVcIiAqbmdJZj1cImRhdGEoKS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlXCI+XG4gICAgPGRpdiBjbGFzcz1cInRpbWUtc2VjdGlvblwiPlxuICAgICAgPGg0PkZyb208L2g0PlxuICAgICAgPGRpdiBjbGFzcz1cInRpbWUtaW5wdXRzXCI+XG4gICAgICAgIDxpbnB1dCBcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCIgXG4gICAgICAgICAgW25nTW9kZWxdPVwiaXMxMkhvdXJGb3JtYXQoKSA/IHN0YXJ0SG91cigpIDogc3RhcnRIb3VyMjQoKVwiIFxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImlzMTJIb3VyRm9ybWF0KCkgPyBzdGFydEhvdXJTaWduYWwuc2V0KCRldmVudCkgOiBzdGFydEhvdXIyNFNpZ25hbC5zZXQoJGV2ZW50KTsgb25TdGFydEhvdXJJbnB1dCgpXCJcbiAgICAgICAgICBbbWluXT1cImlzMTJIb3VyRm9ybWF0KCkgPyAxIDogMFwiIFxuICAgICAgICAgIFttYXhdPVwiaXMxMkhvdXJGb3JtYXQoKSA/IDEyIDogMjNcIiBcbiAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgY2xhc3M9XCJ0aW1lLWlucHV0IGhvdXItaW5wdXRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiSEhcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lLXNlcGFyYXRvclwiPjo8L3NwYW4+XG4gICAgICAgIDxpbnB1dCBcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCIgXG4gICAgICAgICAgW25nTW9kZWxdPVwic3RhcnRNaW51dGUoKVwiIChuZ01vZGVsQ2hhbmdlKT1cInN0YXJ0TWludXRlU2lnbmFsLnNldCgkZXZlbnQpXCIgXG4gICAgICAgICAgKGlucHV0KT1cIm9uU3RhcnRNaW51dGVJbnB1dCgpXCJcbiAgICAgICAgICBtaW49XCIwXCIgXG4gICAgICAgICAgbWF4PVwiNTlcIiBcbiAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgY2xhc3M9XCJ0aW1lLWlucHV0IG1pbnV0ZS1pbnB1dFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJNTVwiPlxuICAgICAgICA8c2VsZWN0IFxuICAgICAgICAgIFtuZ01vZGVsXT1cInN0YXJ0QW1QbSgpXCIgKG5nTW9kZWxDaGFuZ2UpPVwic3RhcnRBbVBtU2lnbmFsLnNldCgkZXZlbnQpXCIgXG4gICAgICAgICAgY2xhc3M9XCJhbS1wbS1zZWxlY3RvclwiXG4gICAgICAgICAgKm5nSWY9XCJpczEySG91ckZvcm1hdCgpXCI+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFNXCI+QU08L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUE1cIj5QTTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIFxuICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXNlY3Rpb25cIj5cbiAgICAgIDxoND5UbzwvaDQ+XG4gICAgICA8ZGl2IGNsYXNzPVwidGltZS1pbnB1dHNcIj5cbiAgICAgICAgPGlucHV0IFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIiBcbiAgICAgICAgICBbbmdNb2RlbF09XCJpczEySG91ckZvcm1hdCgpID8gZW5kSG91cigpIDogZW5kSG91cjI0KClcIiBcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJpczEySG91ckZvcm1hdCgpID8gZW5kSG91clNpZ25hbC5zZXQoJGV2ZW50KSA6IGVuZEhvdXIyNFNpZ25hbC5zZXQoJGV2ZW50KTsgb25FbmRIb3VySW5wdXQoKVwiXG4gICAgICAgICAgW21pbl09XCJpczEySG91ckZvcm1hdCgpID8gMSA6IDBcIiBcbiAgICAgICAgICBbbWF4XT1cImlzMTJIb3VyRm9ybWF0KCkgPyAxMiA6IDIzXCIgXG4gICAgICAgICAgc3RlcD1cIjFcIlxuICAgICAgICAgIGNsYXNzPVwidGltZS1pbnB1dCBob3VyLWlucHV0XCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkhIXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGltZS1zZXBhcmF0b3JcIj46PC9zcGFuPlxuICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiIFxuICAgICAgICAgIFtuZ01vZGVsXT1cImVuZE1pbnV0ZSgpXCIgKG5nTW9kZWxDaGFuZ2UpPVwiZW5kTWludXRlU2lnbmFsLnNldCgkZXZlbnQpXCIgXG4gICAgICAgICAgKGlucHV0KT1cIm9uRW5kTWludXRlSW5wdXQoKVwiXG4gICAgICAgICAgbWluPVwiMFwiIFxuICAgICAgICAgIG1heD1cIjU5XCIgXG4gICAgICAgICAgc3RlcD1cIjFcIlxuICAgICAgICAgIGNsYXNzPVwidGltZS1pbnB1dCBtaW51dGUtaW5wdXRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTU1cIj5cbiAgICAgICAgPHNlbGVjdCBcbiAgICAgICAgICBbbmdNb2RlbF09XCJlbmRBbVBtKClcIiAobmdNb2RlbENoYW5nZSk9XCJlbmRBbVBtU2lnbmFsLnNldCgkZXZlbnQpXCIgXG4gICAgICAgICAgY2xhc3M9XCJhbS1wbS1zZWxlY3RvclwiXG4gICAgICAgICAgKm5nSWY9XCJpczEySG91ckZvcm1hdCgpXCI+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFNXCI+QU08L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUE1cIj5QTTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgXG4gIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXJfX2Zvb3RlclwiPlxuICAgIDxidXR0b24gbWlzLWJ1dHRvbiB0eXBlPVwibm9uZVwiIGlkPSdtb2JpbGUtZm9vdGVyLWJ0bicgKGNsaWNrKT1cImNhbmNlbERhdGVQaWNrZXIoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWlzLWJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIGlkPVwibW9iaWxlLWZvb3Rlci1idG5cIiAoY2xpY2spPVwiYXBwbHlEYXRlcygpXCIgW2Rpc2FibGVkXT1cIiFpc0RhdGVzVmFsaWQoKVwiPkFwcGx5PC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+Il19
|