myrta-ui 13.0.26 → 13.0.27

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.
@@ -8,11 +8,15 @@ export const formattingToMoscowTimezone = (date, tz) => {
8
8
  return dayjs.utc(date).utcOffset(Timezone[tz], tz !== 'default').toISOString();
9
9
  };
10
10
  export const formattingFromMoscowTimezone = (date, tz) => {
11
- if (!date)
12
- return '';
13
- // Мы хотим получить объект Date, у которого локальные часы/минуты
14
- // будут такие же, как в Москве.
15
- const moscowDate = dayjs(date).tz('Europe/Moscow');
16
- return new Date(moscowDate.year(), moscowDate.month(), moscowDate.date(), moscowDate.hour(), moscowDate.minute()).toISOString();
11
+ const utcTime = dayjs.utc(date);
12
+ const moscowOffsetMinutes = dayjs().tz('Europe/Moscow').utcOffset();
13
+ const localOffsetMinutes = dayjs().utcOffset();
14
+ const offsetDifferenceMinutes = localOffsetMinutes - moscowOffsetMinutes;
15
+ if (offsetDifferenceMinutes >= 0) {
16
+ return utcTime.subtract(offsetDifferenceMinutes, 'minute').toISOString();
17
+ }
18
+ else {
19
+ return utcTime.add(Math.abs(offsetDifferenceMinutes), 'minute').toISOString();
20
+ }
17
21
  };
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0dGluZy1tb3Njb3ctdGltZXpvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0YS11aS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9pbnB1dC1kYXRlLXRpbWUvaGVscGVycy9mb3JtYXR0aW5nLW1vc2Nvdy10aW1lem9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFnQixNQUFNLGtCQUFrQixDQUFDO0FBRTFELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLFFBQVEsTUFBTSx1QkFBdUIsQ0FBQztBQUM3QyxPQUFPLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQztBQUVuQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ2pCLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7QUFFdEIsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBZ0IsRUFBVSxFQUFFO0lBQ2hGLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtBQUNoRixDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLElBQVMsRUFBRSxFQUFnQixFQUFVLEVBQUU7SUFDbEYsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNyQixtRUFBbUU7SUFDbkUsZ0NBQWdDO0lBQ2hDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbkQsT0FBTyxJQUFJLElBQUksQ0FDYixVQUFVLENBQUMsSUFBSSxFQUFFLEVBQ2pCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFDbEIsVUFBVSxDQUFDLElBQUksRUFBRSxFQUNqQixVQUFVLENBQUMsSUFBSSxFQUFFLEVBQ2pCLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FDcEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsQixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUaW1lem9uZSwgVGltZXpvbmVUeXBlIH0gZnJvbSAnLi4vZW51bS90aW1lem9uZSc7XHJcblxyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xyXG5pbXBvcnQgdGltZXpvbmUgZnJvbSAnZGF5anMvcGx1Z2luL3RpbWV6b25lJztcclxuaW1wb3J0IHV0YyBmcm9tICdkYXlqcy9wbHVnaW4vdXRjJztcclxuXHJcbmRheWpzLmV4dGVuZCh1dGMpXHJcbmRheWpzLmV4dGVuZCh0aW1lem9uZSlcclxuXHJcbmV4cG9ydCBjb25zdCBmb3JtYXR0aW5nVG9Nb3Njb3dUaW1lem9uZSA9IChkYXRlOiBhbnksIHR6OiBUaW1lem9uZVR5cGUpOiBzdHJpbmcgPT4ge1xyXG4gIHJldHVybiBkYXlqcy51dGMoZGF0ZSkudXRjT2Zmc2V0KFRpbWV6b25lW3R6XSwgdHogIT09ICdkZWZhdWx0JykudG9JU09TdHJpbmcoKVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZm9ybWF0dGluZ0Zyb21Nb3Njb3dUaW1lem9uZSA9IChkYXRlOiBhbnksIHR6OiBUaW1lem9uZVR5cGUpOiBzdHJpbmcgPT4ge1xyXG4gIGlmICghZGF0ZSkgcmV0dXJuICcnO1xyXG4gIC8vINCc0Ysg0YXQvtGC0LjQvCDQv9C+0LvRg9GH0LjRgtGMINC+0LHRitC10LrRgiBEYXRlLCDRgyDQutC+0YLQvtGA0L7Qs9C+INC70L7QutCw0LvRjNC90YvQtSDRh9Cw0YHRiy/QvNC40L3Rg9GC0YsgXHJcbiAgLy8g0LHRg9C00YPRgiDRgtCw0LrQuNC1INC20LUsINC60LDQuiDQsiDQnNC+0YHQutCy0LUuXHJcbiAgY29uc3QgbW9zY293RGF0ZSA9IGRheWpzKGRhdGUpLnR6KCdFdXJvcGUvTW9zY293Jyk7XHJcbiAgcmV0dXJuIG5ldyBEYXRlKFxyXG4gICAgbW9zY293RGF0ZS55ZWFyKCksXHJcbiAgICBtb3Njb3dEYXRlLm1vbnRoKCksXHJcbiAgICBtb3Njb3dEYXRlLmRhdGUoKSxcclxuICAgIG1vc2Nvd0RhdGUuaG91cigpLFxyXG4gICAgbW9zY293RGF0ZS5taW51dGUoKVxyXG4gICkudG9JU09TdHJpbmcoKTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiJdfQ==
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0dGluZy1tb3Njb3ctdGltZXpvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0YS11aS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9pbnB1dC1kYXRlLXRpbWUvaGVscGVycy9mb3JtYXR0aW5nLW1vc2Nvdy10aW1lem9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFnQixNQUFNLGtCQUFrQixDQUFDO0FBRTFELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLFFBQVEsTUFBTSx1QkFBdUIsQ0FBQztBQUM3QyxPQUFPLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQztBQUVuQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ2pCLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7QUFFdEIsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBZ0IsRUFBVSxFQUFFO0lBQ2hGLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtBQUNoRixDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLElBQVMsRUFBRSxFQUFnQixFQUFVLEVBQUU7SUFDbEYsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxNQUFNLG1CQUFtQixHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUNuRSxNQUFNLGtCQUFrQixHQUFHLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQy9DLE1BQU0sdUJBQXVCLEdBQUcsa0JBQWtCLEdBQUcsbUJBQW1CLENBQUM7SUFFekUsSUFBSSx1QkFBdUIsSUFBSSxDQUFDLEVBQUU7UUFDaEMsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO0tBQ3pFO1NBQU07UUFDTCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO0tBQzlFO0FBQ0gsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGltZXpvbmUsIFRpbWV6b25lVHlwZSB9IGZyb20gJy4uL2VudW0vdGltZXpvbmUnO1xyXG5cclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcclxuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZSc7XHJcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yyc7XHJcblxyXG5kYXlqcy5leHRlbmQodXRjKVxyXG5kYXlqcy5leHRlbmQodGltZXpvbmUpXHJcblxyXG5leHBvcnQgY29uc3QgZm9ybWF0dGluZ1RvTW9zY293VGltZXpvbmUgPSAoZGF0ZTogYW55LCB0ejogVGltZXpvbmVUeXBlKTogc3RyaW5nID0+IHtcclxuICByZXR1cm4gZGF5anMudXRjKGRhdGUpLnV0Y09mZnNldChUaW1lem9uZVt0el0sIHR6ICE9PSAnZGVmYXVsdCcpLnRvSVNPU3RyaW5nKClcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGZvcm1hdHRpbmdGcm9tTW9zY293VGltZXpvbmUgPSAoZGF0ZTogYW55LCB0ejogVGltZXpvbmVUeXBlKTogc3RyaW5nID0+IHtcclxuICBjb25zdCB1dGNUaW1lID0gZGF5anMudXRjKGRhdGUpO1xyXG4gIGNvbnN0IG1vc2Nvd09mZnNldE1pbnV0ZXMgPSBkYXlqcygpLnR6KCdFdXJvcGUvTW9zY293JykudXRjT2Zmc2V0KClcclxuICBjb25zdCBsb2NhbE9mZnNldE1pbnV0ZXMgPSBkYXlqcygpLnV0Y09mZnNldCgpO1xyXG4gIGNvbnN0IG9mZnNldERpZmZlcmVuY2VNaW51dGVzID0gbG9jYWxPZmZzZXRNaW51dGVzIC0gbW9zY293T2Zmc2V0TWludXRlcztcclxuXHJcbiAgaWYgKG9mZnNldERpZmZlcmVuY2VNaW51dGVzID49IDApIHtcclxuICAgIHJldHVybiB1dGNUaW1lLnN1YnRyYWN0KG9mZnNldERpZmZlcmVuY2VNaW51dGVzLCAnbWludXRlJykudG9JU09TdHJpbmcoKVxyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gdXRjVGltZS5hZGQoTWF0aC5hYnMob2Zmc2V0RGlmZmVyZW5jZU1pbnV0ZXMpLCAnbWludXRlJykudG9JU09TdHJpbmcoKVxyXG4gIH1cclxufVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiJdfQ==
@@ -4,7 +4,9 @@ import AirDatepicker from 'air-datepicker';
4
4
  import { InputDateTimeSizesEnum } from './input-date-time.enum';
5
5
  import { validateDateModel, validateTimeModel } from './helpers/validate-value-models';
6
6
  import { dateModelConstant, timeModelConstant } from './constants/value-models';
7
+ import { dateModelValueParse, timeModelValueParse } from './helpers/value-parser';
7
8
  import { markPosition } from './helpers/cursor-position';
9
+ import { cleanDate } from './helpers/clean-date';
8
10
  import { formattingFromMoscowTimezone, formattingToMoscowTimezone } from './helpers/formatting-moscow-timezone';
9
11
  import { formattingFromModels } from './helpers/formatting-from-models';
10
12
  import dayjs from 'dayjs';
@@ -115,23 +117,19 @@ export class InputDateTimeComponent {
115
117
  done();
116
118
  };
117
119
  },
118
- onSelect: ({ date, formattedDate }) => {
120
+ onSelect: ({ date, formattedDate, datepicker }) => {
119
121
  if (date instanceof Date && typeof formattedDate === 'string') {
120
- // Вместо использования объекта date, который "кривой" из-за +8
121
- // Мы берем строку formattedDate (она dd.mm.yyyy hh:mm)
122
- // и парсим её как московскую
123
122
  this.dateModel = validateDateModel(formattedDate);
124
123
  this.timeModel = validateTimeModel(formattedDate);
125
124
  this._checkExtraTime();
126
125
  if (this.isValidModels) {
127
- // Важно: создаем ISO строку, принудительно считая,
128
- // что выбранные цифры — это Москва
129
- const manualIso = dayjs(`${this.dateModel.year}-${this.dateModel.month}-${this.dateModel.day}T${this.timeModel.hour}:${this.timeModel.minute}:00`)
130
- .format('YYYY-MM-DDTHH:mm:ss') + '+03:00';
131
- this.updateValue(manualIso);
126
+ this.updateValueModel(this.dateModel, this.timeModel);
132
127
  }
133
128
  }
134
- }
129
+ else if (typeof formattedDate === 'object') {
130
+ this.updateValuesArray(date);
131
+ }
132
+ },
135
133
  });
136
134
  }
137
135
  ngOnChanges(changes) {
@@ -307,29 +305,25 @@ export class InputDateTimeComponent {
307
305
  }
308
306
  }
309
307
  writeValue(outsideValue) {
310
- if (outsideValue && typeof outsideValue === 'string') {
311
- this.value = outsideValue;
312
- // Переводим UTC в Московское время
313
- const moscowTime = dayjs(outsideValue).tz('Europe/Moscow');
314
- // Заполняем модели для инпута
315
- this.dateModel = {
316
- view: moscowTime.format('DD.MM.YYYY'),
317
- day: moscowTime.format('DD'),
318
- month: moscowTime.format('MM'),
319
- year: moscowTime.format('YYYY'),
320
- invalid: false
321
- };
322
- this.timeModel = {
323
- view: moscowTime.format('HH:mm'),
324
- hour: moscowTime.format('HH'),
325
- minute: moscowTime.format('mm'),
326
- invalid: false
327
- };
328
- // Чтобы календарь выделил правильную дату, даем ему объект Date
329
- // с "московскими" часами в локальном исполнении
330
- const fakeLocalDate = new Date(moscowTime.year(), moscowTime.month(), moscowTime.date(), moscowTime.hour(), moscowTime.minute());
331
- this.dt.selectDate(fakeLocalDate, { silent: true });
332
- this.dt.setViewDate(fakeLocalDate);
308
+ if (outsideValue) {
309
+ if (typeof outsideValue === 'string') {
310
+ this.value = cleanDate(outsideValue);
311
+ this.dateModel = dateModelValueParse(outsideValue, this.timezone);
312
+ this.timeModel = timeModelValueParse(outsideValue, this.timezone);
313
+ this.checkingInvalid(outsideValue, this.maxDate, this.minDate);
314
+ this.dt.selectDate(formattingFromModels(this.dateModel, this.timeModel, this.timepicker).toISOString(), {
315
+ updateTime: this.timepicker,
316
+ silent: true
317
+ });
318
+ this.dt.setViewDate(formattingFromModels(this.dateModel, this.timeModel, this.timepicker).toISOString());
319
+ }
320
+ else if (typeof outsideValue === 'object') {
321
+ this.value = outsideValue.map(date => cleanDate(date));
322
+ this.dt.selectDate(this.value, {
323
+ updateTime: this.timepicker,
324
+ silent: true
325
+ });
326
+ }
333
327
  }
334
328
  else {
335
329
  if (this.dt) {
@@ -437,4 +431,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
437
431
  }], blurred: [{
438
432
  type: Output
439
433
  }] } });
440
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZGF0ZS10aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2lucHV0LWRhdGUtdGltZS9pbnB1dC1kYXRlLXRpbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vaW5wdXQtZGF0ZS10aW1lL2lucHV0LWRhdGUtdGltZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ1UsdUJBQXVCLEVBQ3RDLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLGFBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQWEsc0JBQXNCLEVBQTJCLE1BQU0sd0JBQXdCLENBQUM7QUFDcEcsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWhGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUVoSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMs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ZTtzQkFBOUIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxNQUFNO3NCQUFyQixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFFVSxlQUFlO3NCQUE5QixLQUFLO2dCQUNVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBRVUsU0FBUztzQkFBeEIsS0FBSztnQkFFVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNVLGNBQWM7c0JBQTdCLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFa0IsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUVMLE9BQU87c0JBQXZCLE1BQU07Z0JBQ1UsV0FBVztzQkFBM0IsTUFBTTtnQkFDVSxPQUFPO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IEFpckRhdGVwaWNrZXIgZnJvbSAnYWlyLWRhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBFeHRyYVRpbWUsIElucHV0RGF0ZVRpbWVTaXplc0VudW0sIElucHV0RGF0ZVRpbWVTaXplc1R5cGVzIH0gZnJvbSAnLi9pbnB1dC1kYXRlLXRpbWUuZW51bSc7XHJcbmltcG9ydCB7IERhdGVNb2RlbCwgVGltZU1vZGVsLCB2YWxpZGF0ZURhdGVNb2RlbCwgdmFsaWRhdGVUaW1lTW9kZWwgfSBmcm9tICcuL2hlbHBlcnMvdmFsaWRhdGUtdmFsdWUtbW9kZWxzJztcclxuaW1wb3J0IHsgZGF0ZU1vZGVsQ29uc3RhbnQsIHRpbWVNb2RlbENvbnN0YW50IH0gZnJvbSAnLi9jb25zdGFudHMvdmFsdWUtbW9kZWxzJztcclxuaW1wb3J0IHsgZGF0ZU1vZGVsVmFsdWVQYXJzZSwgdGltZU1vZGVsVmFsdWVQYXJzZSB9IGZyb20gJy4vaGVscGVycy92YWx1ZS1wYXJzZXInO1xyXG5pbXBvcnQgeyBtYXJrUG9zaXRpb24gfSBmcm9tICcuL2hlbHBlcnMvY3Vyc29yLXBvc2l0aW9uJztcclxuaW1wb3J0IHsgY2xlYW5EYXRlIH0gZnJvbSAnLi9oZWxwZXJzL2NsZWFuLWRhdGUnO1xyXG5pbXBvcnQgeyBmb3JtYXR0aW5nRnJvbU1vc2Nvd1RpbWV6b25lLCBmb3JtYXR0aW5nVG9Nb3Njb3dUaW1lem9uZSB9IGZyb20gJy4vaGVscGVycy9mb3JtYXR0aW5nLW1vc2Nvdy10aW1lem9uZSc7XHJcbmltcG9ydCB7IFRpbWV6b25lVHlwZSB9IGZyb20gJy4vZW51bS90aW1lem9uZSc7XHJcbmltcG9ydCB7IGZvcm1hdHRpbmdGcm9tTW9kZWxzIH0gZnJvbSAnLi9oZWxwZXJzL2Zvcm1hdHRpbmctZnJvbS1tb2RlbHMnO1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xyXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcclxuaW1wb3J0IHsgY3JlYXRlUG9wcGVyLCBQbGFjZW1lbnQgfSBmcm9tICdAcG9wcGVyanMvY29yZSc7XHJcbmltcG9ydCB7IEZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBJbnB1dERhdGVUaW1lVmFsdWVUeXBlcywgSW5wdXREYXRlVGltZVZhbHVlV2l0aElkIH0gZnJvbSAnLi9tb2RlbHMvaW5wdXQtZGF0ZS10aW1lLm1vZGVsJztcclxuXHJcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUnO1xyXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMnO1xyXG5cclxuZGF5anMuZXh0ZW5kKHV0Yyk7XHJcbmRheWpzLmV4dGVuZCh0aW1lem9uZSk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ21yeC1pbnB1dC1kYXRlLXRpbWUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnaW5wdXQtZGF0ZS10aW1lLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnaW5wdXQtZGF0ZS10aW1lLmNvbXBvbmVudHMubGVzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge3Byb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbnB1dERhdGVUaW1lQ29tcG9uZW50KSwgbXVsdGk6IHRydWV9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXREYXRlVGltZUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xyXG4gIHB1YmxpYyBkdDogYW55O1xyXG4gIHB1YmxpYyB2YWx1ZTogYW55ID0gJyc7XHJcbiAgcHVibGljIGRhdGVNb2RlbDogRGF0ZU1vZGVsID0gZGF0ZU1vZGVsQ29uc3RhbnQ7XHJcbiAgcHVibGljIHRpbWVNb2RlbDogVGltZU1vZGVsID0gdGltZU1vZGVsQ29uc3RhbnQ7XHJcblxyXG4gIHB1YmxpYyBpbm5lckludmFsaWQgPSBmYWxzZTtcclxuICBwdWJsaWMgaW5uZXJJbnZhbGlkTWVzc2FnZSA9ICcnO1xyXG5cclxuICAvLyBTQVZFIFNUQVRFXHJcbiAgcHVibGljIHV1aWQ6IHN0cmluZyA9IHV1aWR2NCgpO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmaWVsZHM6IEZpZWxkW10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIHNpemU6IElucHV0RGF0ZVRpbWVTaXplc1R5cGVzID0gJ2xhcmdlJztcclxuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tQ2xhc3NlcyA9ICcnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRlTGFiZWwgPSAnJztcclxuICBASW5wdXQoKSBwdWJsaWMgdGltZUxhYmVsID0gJyc7XHJcbiAgQElucHV0KCkgcHVibGljIGRhdGVQbGFjZWhvbGRlciA9ICfQtNC0LtC80Lwu0LPQs9Cz0LMnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0aW1lUGxhY2Vob2xkZXIgPSAnMDA6MDAnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyByZWFkb25seSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyByZXF1aXJlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0aW1lcGlja2VyID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIHJhbmdlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIHRpbWV6b25lOiBUaW1lem9uZVR5cGUgPSAnZGVmYXVsdCc7XHJcbiAgQElucHV0KCkgcHVibGljIGlubGluZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpc01hbnVhbElucHV0ID0gdHJ1ZTtcclxuICBASW5wdXQoKSBwdWJsaWMgYWRkTWluVGltZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBhZGRNYXhUaW1lID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGFkZE1pblRpbWVPYmohOiBFeHRyYVRpbWU7XHJcbiAgQElucHV0KCkgcHVibGljIGFkZE1heFRpbWVPYmohOiBFeHRyYVRpbWU7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlVmFsaWRhdGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZUluY2x1ZGVzID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBjb250YWluZXIgPSAnZGl2LnBhZ2Utd3JhcHBlcic7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBpbnZhbGlkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGludmFsaWRNZXNzYWdlOiBzdHJpbmcgfCBzdHJpbmdbXSA9ICcnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjaGVja0ludmFsaWQ6IHRydWUgfCBmYWxzZSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSBtaW5EYXRlOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBtYXhEYXRlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgQElucHV0KCkgY2FsZW5kYXJQb3NpdGlvbjogUGxhY2VtZW50ID0gJ2JvdHRvbS1zdGFydCdcclxuXHJcbiAgQFZpZXdDaGlsZCgnZGF0ZUlucHV0JykgZGF0ZUlucHV0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBjaGFuZ2VkOiBFdmVudEVtaXR0ZXI8SW5wdXREYXRlVGltZVZhbHVlVHlwZXM+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgbW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJbnB1dERhdGVUaW1lVmFsdWVXaXRoSWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJbnB1dERhdGVUaW1lVmFsdWVXaXRoSWQ+KCk7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBibHVycmVkOiBFdmVudEVtaXR0ZXI8SW5wdXREYXRlVGltZVZhbHVlV2l0aElkPiA9IG5ldyBFdmVudEVtaXR0ZXI8SW5wdXREYXRlVGltZVZhbHVlV2l0aElkPigpO1xyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmR0ID0gbmV3IEFpckRhdGVwaWNrZXIodGhpcy5kYXRlSW5wdXQubmF0aXZlRWxlbWVudCwge1xyXG4gICAgICBjb250YWluZXI6IHRoaXMuY29udGFpbmVyLFxyXG4gICAgICBsb2NhbGU6IHtcclxuICAgICAgICBkYXRlRm9ybWF0OiAnZGQuTU0ueXl5eScsXHJcbiAgICAgICAgdGltZUZvcm1hdDogJ0hIOm1tJyxcclxuICAgICAgfSxcclxuICAgICAgYXV0b0Nsb3NlOiB0cnVlLFxyXG4gICAgICByYW5nZTogdGhpcy5yYW5nZSxcclxuICAgICAgbXVsdGlwbGVEYXRlc1NlcGFyYXRvcjogJyAtICcsXHJcbiAgICAgIHRpbWVwaWNrZXI6IHRoaXMudGltZXBpY2tlcixcclxuICAgICAgbWluRGF0ZTogdGhpcy5taW5EYXRlID8gZm9ybWF0dGluZ0Zyb21Nb3Njb3dUaW1lem9uZSh0aGlzLm1pbkRhdGUsIHRoaXMudGltZXpvbmUpIDogJycsXHJcbiAgICAgIG1heERhdGU6IHRoaXMubWF4RGF0ZSA/IGZvcm1hdHRpbmdGcm9tTW9zY293VGltZXpvbmUodGhpcy5tYXhEYXRlLCB0aGlzLnRpbWV6b25lKSA6ICcnLFxyXG4gICAgICBpbmxpbmU6IHRoaXMuaW5saW5lLFxyXG4gICAgICBwb3NpdGlvbjogKHskZGF0ZXBpY2tlciwgJHRhcmdldCwgJHBvaW50ZXIsIGRvbmV9KSA9PiB7XHJcbiAgICAgICAgbGV0IHBvcHBlciA9IGNyZWF0ZVBvcHBlcigkdGFyZ2V0LCAkZGF0ZXBpY2tlciwge1xyXG4gICAgICAgICAgcGxhY2VtZW50OiB0aGlzLmNhbGVuZGFyUG9zaXRpb24sXHJcbiAgICAgICAgICBtb2RpZmllcnM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIG5hbWU6ICdmbGlwJyxcclxuICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiB7XHJcbiAgICAgICAgICAgICAgICAgIHRvcDogNjRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcclxuICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IFswLCAxMF1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBuYW1lOiAnYXJyb3cnLFxyXG4gICAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6ICRwb2ludGVyXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBjb21wbGV0ZUhpZGUoKSB7XHJcbiAgICAgICAgICBwb3BwZXIuZGVzdHJveSgpO1xyXG4gICAgICAgICAgZG9uZSgpO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uU2VsZWN0OiAoe2RhdGUsIGZvcm1hdHRlZERhdGV9KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmIHR5cGVvZiBmb3JtYXR0ZWREYXRlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgLy8g0JLQvNC10YHRgtC+INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPINC+0LHRitC10LrRgtCwIGRhdGUsINC60L7RgtC+0YDRi9C5IFwi0LrRgNC40LLQvtC5XCIg0LjQty3Qt9CwICs4XHJcbiAgICAgICAgICAvLyDQnNGLINCx0LXRgNC10Lwg0YHRgtGA0L7QutGDIGZvcm1hdHRlZERhdGUgKNC+0L3QsCBkZC5tbS55eXl5IGhoOm1tKSBcclxuICAgICAgICAgIC8vINC4INC/0LDRgNGB0LjQvCDQtdGRINC60LDQuiDQvNC+0YHQutC+0LLRgdC60YPRjlxyXG4gICAgICAgICAgdGhpcy5kYXRlTW9kZWwgPSB2YWxpZGF0ZURhdGVNb2RlbChmb3JtYXR0ZWREYXRlKTtcclxuICAgICAgICAgIHRoaXMudGltZU1vZGVsID0gdmFsaWRhdGVUaW1lTW9kZWwoZm9ybWF0dGVkRGF0ZSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5fY2hlY2tFeHRyYVRpbWUoKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkTW9kZWxzKSB7XHJcbiAgICAgICAgICAgIC8vINCS0LDQttC90L46INGB0L7Qt9C00LDQtdC8IElTTyDRgdGC0YDQvtC60YMsINC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+INGB0YfQuNGC0LDRjywgXHJcbiAgICAgICAgICAgIC8vINGH0YLQviDQstGL0LHRgNCw0L3QvdGL0LUg0YbQuNGE0YDRiyDigJQg0Y3RgtC+INCc0L7RgdC60LLQsFxyXG4gICAgICAgICAgICBjb25zdCBtYW51YWxJc28gPSBkYXlqcyhgJHt0aGlzLmRhdGVNb2RlbC55ZWFyfS0ke3RoaXMuZGF0ZU1vZGVsLm1vbnRofS0ke3RoaXMuZGF0ZU1vZGVsLmRheX1UJHt0aGlzLnRpbWVNb2RlbC5ob3VyfToke3RoaXMudGltZU1vZGVsLm1pbnV0ZX06MDBgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KCdZWVlZLU1NLUREVEhIOm1tOnNzJykgKyAnKzAzOjAwJzsgXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKG1hbnVhbElzbyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmR0KSB7XHJcbiAgICAgIGlmIChjaGFuZ2VzWydtYXhEYXRlJ10pIHtcclxuICAgICAgICB0aGlzLmR0LnVwZGF0ZSh7bWF4RGF0ZTogdGhpcy5tYXhEYXRlfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLmR0LnNlbGVjdERhdGUoZm9ybWF0dGluZ0Zyb21Nb2RlbHModGhpcy5kYXRlTW9kZWwsIHRoaXMudGltZU1vZGVsLCB0aGlzLnRpbWVwaWNrZXIpLnRvSVNPU3RyaW5nKCksIHtcclxuICAgICAgICAgICAgdXBkYXRlVGltZTogdGhpcy50aW1lcGlja2VyLFxyXG4gICAgICAgICAgICBzaWxlbnQ6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVWYWxpZGF0ZSkge1xyXG4gICAgICAgICAgY29uc3QgaW52YWxpZCA9IHRoaXMuaW5uZXJJbnZhbGlkO1xyXG4gICAgICAgICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuY2hlY2tpbmdJbnZhbGlkKHRoaXMudmFsdWUsIHRoaXMubWF4RGF0ZSwgdGhpcy5taW5EYXRlKTtcclxuXHJcbiAgICAgICAgICBpZiAoaW52YWxpZCAmJiBpc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVNb2RlbCh0aGlzLmRhdGVNb2RlbCwgdGhpcy50aW1lTW9kZWwpO1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjaGFuZ2VzWydtaW5EYXRlJ10pIHtcclxuICAgICAgICB0aGlzLmR0LnVwZGF0ZSh7bWluRGF0ZTogdGhpcy5taW5EYXRlfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLmR0LnNlbGVjdERhdGUoZm9ybWF0dGluZ0Zyb21Nb2RlbHModGhpcy5kYXRlTW9kZWwsIHRoaXMudGltZU1vZGVsLCB0aGlzLnRpbWVwaWNrZXIpLnRvSVNPU3RyaW5nKCksIHtcclxuICAgICAgICAgICAgdXBkYXRlVGltZTogdGhpcy50aW1lcGlja2VyLFxyXG4gICAgICAgICAgICBzaWxlbnQ6IHRydWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVWYWxpZGF0ZSkge1xyXG4gICAgICAgICAgY29uc3QgaW52YWxpZCA9IHRoaXMuaW5uZXJJbnZhbGlkO1xyXG4gICAgICAgICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuY2hlY2tpbmdJbnZhbGlkKHRoaXMudmFsdWUsIHRoaXMubWF4RGF0ZSwgdGhpcy5taW5EYXRlKTtcclxuXHJcbiAgICAgICAgICBpZiAoaW52YWxpZCAmJiBpc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVNb2RlbCh0aGlzLmRhdGVNb2RlbCwgdGhpcy50aW1lTW9kZWwpO1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZ2V0RGF0ZVZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy5kYXRlTW9kZWwudmlld30ke3RoaXMudGltZU1vZGVsLnZpZXcgPyAnICcgKyB0aGlzLnRpbWVNb2RlbC52aWV3IDogJyd9YDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZ2V0Q2xhc3NlcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke0lucHV0RGF0ZVRpbWVTaXplc0VudW1bdGhpcy5zaXplXX0gJHt0aGlzLmN1c3RvbUNsYXNzZXN9ICR7dGhpcy5jaGVja1ZhbGlkQ2xhc3Nlc31gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgaXNWYWxpZE1vZGVscygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5kYXRlTW9kZWwuaW52YWxpZCAmJiAodGhpcy50aW1lcGlja2VyID8gIXRoaXMudGltZU1vZGVsLmludmFsaWQgOiB0cnVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNWaWV3Q2xlYW5JY29uKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5kYXRlSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNoZWNrVmFsaWRDbGFzc2VzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGVja0ludmFsaWQgPT09IGZhbHNlID8gJ21yeC1pbnB1dC1jaGVja2VkLXN1Y2Nlc3MnIDogdGhpcy5jaGVja0ludmFsaWQgPT09IHRydWUgPyAnbXJ4LWlucHV0LWNoZWNrZWQtZXJyb3InIDogJyc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jaGVja0V4dHJhVGltZSgpIHtcclxuICAgIGlmICh0aGlzLmFkZE1heFRpbWUgJiYgIXRoaXMudGltZXBpY2tlcikge1xyXG4gICAgICB0aGlzLnRpbWVNb2RlbC5ob3VyID0gJzIzJztcclxuICAgICAgdGhpcy50aW1lTW9kZWwubWludXRlID0gJzU5JztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFkZE1pblRpbWUgJiYgIXRoaXMudGltZXBpY2tlcikge1xyXG4gICAgICB0aGlzLnRpbWVNb2RlbC5ob3VyID0gJzAwJztcclxuICAgICAgdGhpcy50aW1lTW9kZWwubWludXRlID0gJzAwJztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFkZE1heFRpbWVPYmogJiYgIXRoaXMudGltZXBpY2tlcikge1xyXG4gICAgICB0aGlzLnRpbWVNb2RlbC5ob3VyID0gdGhpcy5hZGRNYXhUaW1lT2JqLmhvdXI7XHJcbiAgICAgIHRoaXMudGltZU1vZGVsLm1pbnV0ZSA9IHRoaXMuYWRkTWF4VGltZU9iai5taW51dGU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5hZGRNaW5UaW1lT2JqICYmICF0aGlzLnRpbWVwaWNrZXIpIHtcclxuICAgICAgdGhpcy50aW1lTW9kZWwuaG91ciA9IHRoaXMuYWRkTWluVGltZU9iai5ob3VyO1xyXG4gICAgICB0aGlzLnRpbWVNb2RlbC5taW51dGUgPSB0aGlzLmFkZE1pblRpbWVPYmoubWludXRlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsaWNrVG9JY29uQ2FsZW5kYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRhdGVJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xpY2tUb0ljb25DbGVhcigpOiB2b2lkIHtcclxuICAgIHRoaXMuZHQuc2V0Vmlld0RhdGUobmV3IERhdGUoKSk7XHJcbiAgICB0aGlzLmR0ICYmIHRoaXMuZHQuY2xlYXIoKTtcclxuICAgIHRoaXMuZGF0ZU1vZGVsID0gZGF0ZU1vZGVsQ29uc3RhbnQ7XHJcbiAgICB0aGlzLnRpbWVNb2RlbCA9IHRpbWVNb2RlbENvbnN0YW50O1xyXG5cclxuICAgIGlmICghdGhpcy5yYW5nZSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKCcnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlubmVySW52YWxpZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pbm5lckludmFsaWRNZXNzYWdlID0gJyc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVZhbHVlTW9kZWwoZGF0ZU1vZGVsOiBEYXRlTW9kZWwsIHRpbWVNb2RlbDogVGltZU1vZGVsLCBib2w6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgaWYgKGRhdGVNb2RlbC52aWV3ID09PSAnJykge1xyXG4gICAgICB0aGlzLmNsaWNrVG9JY29uQ2xlYXIoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGRhdGUgPSBmb3JtYXR0aW5nRnJvbU1vZGVscyhkYXRlTW9kZWwsIHRpbWVNb2RlbCwgdGhpcy50aW1lcGlja2VyIHx8IHRoaXMuYWRkTWF4VGltZSB8fCB0aGlzLmFkZE1pblRpbWUpO1xyXG5cclxuICAgICAgY29uc3QgZm9ybWF0dGluZ0RhdGUgPSBmb3JtYXR0aW5nVG9Nb3Njb3dUaW1lem9uZShkYXRlLnRvSVNPU3RyaW5nKCksIHRoaXMudGltZXpvbmUpO1xyXG5cclxuICAgICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuY2hlY2tpbmdJbnZhbGlkKGZvcm1hdHRpbmdEYXRlLCB0aGlzLm1heERhdGUsIHRoaXMubWluRGF0ZSk7XHJcblxyXG4gICAgICBpZiAoZGF0ZS5pc1ZhbGlkKCkgJiYgaXNWYWxpZCkge1xyXG4gICAgICAgIHRoaXMuZHQuc2VsZWN0RGF0ZShmb3JtYXR0aW5nRnJvbU1vZGVscyhkYXRlTW9kZWwsIHRpbWVNb2RlbCwgdGhpcy50aW1lcGlja2VyKS50b0lTT1N0cmluZygpLCB7XHJcbiAgICAgICAgICB1cGRhdGVUaW1lOiB0aGlzLnRpbWVwaWNrZXIsXHJcbiAgICAgICAgICBzaWxlbnQ6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmR0LnNldFZpZXdEYXRlKGZvcm1hdHRpbmdGcm9tTW9kZWxzKGRhdGVNb2RlbCwgdGltZU1vZGVsLCB0aGlzLnRpbWVwaWNrZXIpLnRvSVNPU3RyaW5nKCkpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUoZm9ybWF0dGluZ0RhdGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVZhbHVlc0FycmF5ID0gKHZhbHVlczogYW55W10pID0+IHtcclxuICAgIGNvbnN0IGRhdGVzID0gdmFsdWVzLm1hcChkYXRlID0+IHtcclxuICAgICAgcmV0dXJuIGZvcm1hdHRpbmdUb01vc2Nvd1RpbWV6b25lKGRhdGUudG9JU09TdHJpbmcoKSwgdGhpcy50aW1lem9uZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVZhbHVlKGRhdGVzKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIGludmFsaWRNZXNzYWdlT24obWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmlubmVySW52YWxpZCA9IHRydWU7XHJcbiAgICB0aGlzLmlubmVySW52YWxpZE1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnZhbGlkTWVzc2FnZU9mZigpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5uZXJJbnZhbGlkID0gZmFsc2U7XHJcbiAgICB0aGlzLmlubmVySW52YWxpZE1lc3NhZ2UgPSAnJztcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVEYXRlVmFsdWUoZGF0ZUlucHV0OiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IGRhdGVJbnB1dC5zZWxlY3Rpb25TdGFydDtcclxuICAgIHRoaXMuZGF0ZU1vZGVsID0gdmFsaWRhdGVEYXRlTW9kZWwoZGF0ZUlucHV0LnZhbHVlKTtcclxuICAgIHRoaXMudGltZU1vZGVsID0gdmFsaWRhdGVUaW1lTW9kZWwoZGF0ZUlucHV0LnZhbHVlKTtcclxuXHJcbiAgICBkYXRlSW5wdXQudmFsdWUgPSB0aGlzLmdldERhdGVWYWx1ZTtcclxuICAgIGRhdGVJbnB1dC5zZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0O1xyXG4gICAgZGF0ZUlucHV0LnNlbGVjdGlvbkVuZCA9IGRhdGVJbnB1dC5zZWxlY3Rpb25TdGFydDtcclxuXHJcbiAgICB0aGlzLl9jaGVja0V4dHJhVGltZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVmFsaWRNb2RlbHMgfHwgdGhpcy5kYXRlTW9kZWwudmlldyA9PT0gJycpIHtcclxuICAgICAgdGhpcy51cGRhdGVWYWx1ZU1vZGVsKHRoaXMuZGF0ZU1vZGVsLCB0aGlzLnRpbWVNb2RlbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xpY2tUb0lucHV0KGlucHV0OiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XHJcbiAgICBpZiAoaW5wdXQuc2VsZWN0aW9uU3RhcnQgPT09IGlucHV0LnNlbGVjdGlvbkVuZCAmJiAoaW5wdXQuc2VsZWN0aW9uU3RhcnQgJiYgaW5wdXQuc2VsZWN0aW9uU3RhcnQgPiAwKSkge1xyXG4gICAgICBjb25zdCB7c3RhcnQsIGVuZH0gPSBtYXJrUG9zaXRpb24oaW5wdXQuc2VsZWN0aW9uU3RhcnQsIGlucHV0LnNlbGVjdGlvbkVuZCk7XHJcbiAgICAgIGlucHV0LnNlbGVjdGlvblN0YXJ0ID0gc3RhcnQ7XHJcbiAgICAgIGlucHV0LnNlbGVjdGlvbkVuZCA9IGVuZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tpbmdJbnZhbGlkKHZhbHVlOiBzdHJpbmcsIG1heERhdGU6IHN0cmluZywgbWluRGF0ZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgdmFsaWRNYXhEYXRlID0gJyc7XHJcbiAgICBsZXQgdmFsaWRNaW5EYXRlID0gJyc7XHJcblxyXG4gICAgaWYgKHRoaXMudGltZXBpY2tlcikge1xyXG4gICAgICB2YWxpZE1heERhdGUgPSB0aGlzLm1heERhdGU7XHJcbiAgICAgIHZhbGlkTWluRGF0ZSA9IHRoaXMubWluRGF0ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLm1heERhdGUpIHtcclxuICAgICAgICB2YWxpZE1heERhdGUgPSBkYXlqcyh0aGlzLm1heERhdGUpLnR6KHRoaXMudGltZXpvbmUpLmhvdXIoMjMpLm1pbnV0ZSg1OSkuc2Vjb25kKDU5KS5taWxsaXNlY29uZCgwKS50b0lTT1N0cmluZygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5taW5EYXRlKSB7XHJcbiAgICAgICAgdmFsaWRNaW5EYXRlID0gZGF5anModGhpcy5taW5EYXRlKS50eih0aGlzLnRpbWV6b25lKS5ob3VyKDApLm1pbnV0ZSgwKS5zZWNvbmQoMCAtIDEpLm1pbGxpc2Vjb25kKDApLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kaXNhYmxlVmFsaWRhdGUpIHtcclxuICAgICAgdGhpcy5pbnZhbGlkTWVzc2FnZU9mZigpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsaWRNYXhEYXRlICYmIChkYXlqcyh2YWx1ZSkuZGlmZihkYXlqcyh2YWxpZE1heERhdGUpKSA9PT0gMCkgJiYgIXRoaXMuZGlzYWJsZUluY2x1ZGVzKSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZE1lc3NhZ2VPbign0JTQsNGC0LAg0Lgg0LLRgNC10LzRjyDQvtC60L7QvdGH0LDQvdC40Y8g0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMINGA0LDQstC90LAg0LTQsNGC0LUg0Lgg0LLRgNC10LzQtdC90Lgg0L3QsNGH0LDQu9CwJyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodmFsaWRNYXhEYXRlICYmIChkYXlqcyh2YWx1ZSkuZGlmZihkYXlqcyh2YWxpZE1heERhdGUpKSA+IDApKSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZE1lc3NhZ2VPbign0JTQsNGC0LAg0L7QutC+0L3Rh9Cw0L3QuNGPINC90LUg0LzQvtC20LXRgiDQsdGL0YLRjCDRgNCw0L3RjNGI0LUg0LTQsNGC0Ysg0L3QsNGH0LDQu9CwJyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodmFsaWRNaW5EYXRlICYmIChkYXlqcyh2YWx1ZSkuZGlmZihkYXlqcyh2YWxpZE1pbkRhdGUpKSA9PT0gMCkgJiYgIXRoaXMuZGlzYWJsZUluY2x1ZGVzKSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZE1lc3NhZ2VPbign0JTQsNGC0LAg0Lgg0LLRgNC10LzRjyDQvtC60L7QvdGH0LDQvdC40Y8g0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMINGA0LDQstC90LAg0LTQsNGC0LUg0Lgg0LLRgNC10LzQtdC90Lgg0L3QsNGH0LDQu9CwJyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodmFsaWRNaW5EYXRlICYmIGRheWpzKHZhbHVlKS5kaWZmKGRheWpzKHZhbGlkTWluRGF0ZSkpIDwgMCkge1xyXG4gICAgICB0aGlzLmludmFsaWRNZXNzYWdlT24oJ9CU0LDRgtCwINC+0LrQvtC90YfQsNC90LjRjyDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0YDQsNC90YzRiNC1INC00LDRgtGLINC90LDRh9Cw0LvQsCcpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmludmFsaWRNZXNzYWdlT2ZmKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHdyaXRlVmFsdWUob3V0c2lkZVZhbHVlOiBJbnB1dERhdGVUaW1lVmFsdWVUeXBlcykge1xyXG4gICAgaWYgKG91dHNpZGVWYWx1ZSAmJiB0eXBlb2Ygb3V0c2lkZVZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLnZhbHVlID0gb3V0c2lkZVZhbHVlO1xyXG4gICAgICBcclxuICAgICAgLy8g0J/QtdGA0LXQstC+0LTQuNC8IFVUQyDQsiDQnNC+0YHQutC+0LLRgdC60L7QtSDQstGA0LXQvNGPXHJcbiAgICAgIGNvbnN0IG1vc2Nvd1RpbWUgPSBkYXlqcyhvdXRzaWRlVmFsdWUpLnR6KCdFdXJvcGUvTW9zY293Jyk7XHJcbiAgICAgIFxyXG4gICAgICAvLyDQl9Cw0L/QvtC70L3Rj9C10Lwg0LzQvtC00LXQu9C4INC00LvRjyDQuNC90L/Rg9GC0LBcclxuICAgICAgdGhpcy5kYXRlTW9kZWwgPSB7XHJcbiAgICAgICAgdmlldzogbW9zY293VGltZS5mb3JtYXQoJ0RELk1NLllZWVknKSxcclxuICAgICAgICBkYXk6IG1vc2Nvd1RpbWUuZm9ybWF0KCdERCcpLFxyXG4gICAgICAgIG1vbnRoOiBtb3Njb3dUaW1lLmZvcm1hdCgnTU0nKSxcclxuICAgICAgICB5ZWFyOiBtb3Njb3dUaW1lLmZvcm1hdCgnWVlZWScpLFxyXG4gICAgICAgIGludmFsaWQ6IGZhbHNlXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMudGltZU1vZGVsID0ge1xyXG4gICAgICAgIHZpZXc6IG1vc2Nvd1RpbWUuZm9ybWF0KCdISDptbScpLFxyXG4gICAgICAgIGhvdXI6IG1vc2Nvd1RpbWUuZm9ybWF0KCdISCcpLFxyXG4gICAgICAgIG1pbnV0ZTogbW9zY293VGltZS5mb3JtYXQoJ21tJyksXHJcbiAgICAgICAgaW52YWxpZDogZmFsc2VcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vINCn0YLQvtCx0Ysg0LrQsNC70LXQvdC00LDRgNGMINCy0YvQtNC10LvQuNC7INC/0YDQsNCy0LjQu9GM0L3Rg9GOINC00LDRgtGDLCDQtNCw0LXQvCDQtdC80YMg0L7QsdGK0LXQutGCIERhdGUgXHJcbiAgICAgIC8vINGBIFwi0LzQvtGB0LrQvtCy0YHQutC40LzQuFwiINGH0LDRgdCw0LzQuCDQsiDQu9C+0LrQsNC70YzQvdC+0Lwg0LjRgdC/0L7Qu9C90LXQvdC40LhcclxuICAgICAgY29uc3QgZmFrZUxvY2FsRGF0ZSA9IG5ldyBEYXRlKFxyXG4gICAgICAgIG1vc2Nvd1RpbWUueWVhcigpLCBtb3Njb3dUaW1lLm1vbnRoKCksIG1vc2Nvd1RpbWUuZGF0ZSgpLCBcclxuICAgICAgICBtb3Njb3dUaW1lLmhvdXIoKSwgbW9zY293VGltZS5taW51dGUoKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5kdC5zZWxlY3REYXRlKGZha2VMb2NhbERhdGUsIHsgc2lsZW50OiB0cnVlIH0pO1xyXG4gICAgICB0aGlzLmR0LnNldFZpZXdEYXRlKGZha2VMb2NhbERhdGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuZHQpIHtcclxuICAgICAgICB0aGlzLmR0LmNsZWFyKHtzaWxlbnQ6IHRydWV9KTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gJyc7XHJcbiAgICAgICAgdGhpcy5kYXRlTW9kZWwgPSBkYXRlTW9kZWxDb25zdGFudDtcclxuICAgICAgICB0aGlzLnRpbWVNb2RlbCA9IHRpbWVNb2RlbENvbnN0YW50O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQ2hhbmdlID0gKHZhbHVlOiBhbnkpID0+IHtcclxuICB9O1xyXG4gIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4ge1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4ge30pOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVWYWx1ZShpbnNpZGVWYWx1ZTogSW5wdXREYXRlVGltZVZhbHVlVHlwZXMpIHtcclxuICAgIHRoaXMudmFsdWUgPSBpbnNpZGVWYWx1ZTtcclxuICAgIHRoaXMuY2hhbmdlZC5lbWl0KGluc2lkZVZhbHVlKTtcclxuICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh7dmFsdWU6IGluc2lkZVZhbHVlLCBpZDogdGhpcy51dWlkfSk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKGluc2lkZVZhbHVlKTtcclxuICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25CbHVyKGV2ZW50OiBFdmVudCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYmx1cnJlZC5lbWl0KHt2YWx1ZTogdGhpcy52YWx1ZSwgaWQ6IHRoaXMudXVpZH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICBjbGFzcz1cIm1yeC1pbnB1dC1kYXRlXCJcclxuICBbY2xhc3MubXJ4LWlucHV0LWVycm9yXT1cImludmFsaWQgfHwgaW5uZXJJbnZhbGlkXCJcclxuICBbY2xhc3MubXJ4LWlucHV0LXJlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICBbY2xhc3NdPVwiZ2V0Q2xhc3Nlc1wiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiXCI+XHJcbiAgICA8bXJ4LWxhYmVsICpuZ0lmPVwidGltZUxhYmVsIHx8IGRhdGVMYWJlbFwiPnt7IGRhdGVMYWJlbCB9fTwvbXJ4LWxhYmVsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1yeC1pbnB1dC1kYXRlX193cmFwcGVyXCI+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgICNkYXRlSW5wdXRcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwibm9wZVwiXHJcbiAgICAgICAgY2xhc3M9XCJtcngtaW5wdXQtZGF0ZV9faW5wdXQgbXJ4LWlucHV0LWRhdGVfX2RhdGVcIlxyXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRlUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgIFtuZ01vZGVsXT1cImdldERhdGVWYWx1ZVwiXHJcbiAgICAgICAgW21hc2tdPVwiJzAwLjAwLjAwMDAgMDA6bTAnXCJcclxuICAgICAgICBbbGVhZFplcm9EYXRlVGltZV09XCJ0cnVlXCJcclxuICAgICAgICBbdmFsaWRhdGlvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICBbcmVhZE9ubHldPVwiIWlzTWFudWFsSW5wdXRcIlxyXG4gICAgICAgIChpbnB1dCk9XCJ1cGRhdGVEYXRlVmFsdWUoZGF0ZUlucHV0KVwiXHJcbiAgICAgICAgKGNsaWNrKT1cImNsaWNrVG9JbnB1dChkYXRlSW5wdXQpXCJcclxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXHJcbiAgICAgIC8+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWRpc2FibGVkXCIgY2xhc3M9XCJtcngtaW5wdXQtZGF0ZV9faWNvbnNcIj5cclxuICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgIGNsYXNzPVwibXJ4LWljb24gaWNvbi1jbG9zZVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiaXNWaWV3Q2xlYW5JY29uXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrVG9JY29uQ2xlYXIoKVwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5pY29uLWZvbnQtMTZdPVwic2l6ZSA9PT0gJ3NtYWxsJ1wiXHJcbiAgICAgICAgICAgIFtjbGFzcy5pY29uLWZvbnQtMjRdPVwic2l6ZSA9PT0gJ21lZGl1bScgfHwgc2l6ZSA9PT0gJ2xhcmdlJ1wiXHJcbiAgICAgICAgICA+PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICBjbGFzcz1cIm1yeC1pY29uIGljb24tY2FsZW5kYXJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImNsaWNrVG9JY29uQ2FsZW5kYXIoKVwiXHJcbiAgICAgICAgICBbY2xhc3MuaWNvbi1mb250LTE2XT1cInNpemUgPT09ICdzbWFsbCdcIlxyXG4gICAgICAgICAgW2NsYXNzLmljb24tZm9udC0yNF09XCJzaXplID09PSAnbWVkaXVtJyB8fCBzaXplID09PSAnbGFyZ2UnXCJcclxuICAgICAgICA+PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bXJ4LWVycm9yLW1lc3NhZ2VcclxuICAgICpuZ0lmPVwiaW52YWxpZDsgZWxzZSBpbm5lckludmFsaWRUZW1wbGF0ZVwiXHJcbiAgICBbaW52YWxpZE1lc3NhZ2VdPVwiaW52YWxpZE1lc3NhZ2VcIlxyXG4gID48L21yeC1lcnJvci1tZXNzYWdlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2lubmVySW52YWxpZFRlbXBsYXRlPlxyXG4gICAgPG1yeC1lcnJvci1tZXNzYWdlXHJcbiAgICAgICpuZ0lmPVwiaW5uZXJJbnZhbGlkXCJcclxuICAgICAgW2ludmFsaWRNZXNzYWdlXT1cImlubmVySW52YWxpZE1lc3NhZ2VcIlxyXG4gICAgPjwvbXJ4LWVycm9yLW1lc3NhZ2U+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG1yeC1zYXZlLXN0YXRlIFtpZF09XCJ1dWlkXCIgW2ZpZWxkc109XCJmaWVsZHNcIj48L21yeC1zYXZlLXN0YXRlPlxyXG48L2Rpdj5cclxuIl19
434
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtZGF0ZS10aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRhLXVpL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2lucHV0LWRhdGUtdGltZS9pbnB1dC1kYXRlLXRpbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGEtdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vaW5wdXQtZGF0ZS10aW1lL2lucHV0LWRhdGUtdGltZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ1UsdUJBQXVCLEVBQ3RDLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLGFBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQWEsc0JBQXNCLEVBQTJCLE1BQU0sd0JBQXdCLENBQUM7QUFDcEcsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFaEgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0s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O2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsS0FBSztzQkFBcEIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLE1BQU07c0JBQXJCLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFDVSxhQUFhO3NCQUE1QixLQUFLO2dCQUVVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBQ1UsZUFBZTtzQkFBOUIsS0FBSztnQkFFVSxTQUFTO3NCQUF4QixLQUFLO2dCQUVVLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1UsY0FBYztzQkFBN0IsS0FBSztnQkFDVSxZQUFZO3NCQUEzQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVrQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBRUwsT0FBTztzQkFBdkIsTUFBTTtnQkFDVSxXQUFXO3NCQUEzQixNQUFNO2dCQUNVLE9BQU87c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBmb3J3YXJkUmVmLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgQWlyRGF0ZXBpY2tlciBmcm9tICdhaXItZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IEV4dHJhVGltZSwgSW5wdXREYXRlVGltZVNpemVzRW51bSwgSW5wdXREYXRlVGltZVNpemVzVHlwZXMgfSBmcm9tICcuL2lucHV0LWRhdGUtdGltZS5lbnVtJztcclxuaW1wb3J0IHsgRGF0ZU1vZGVsLCBUaW1lTW9kZWwsIHZhbGlkYXRlRGF0ZU1vZGVsLCB2YWxpZGF0ZVRpbWVNb2RlbCB9IGZyb20gJy4vaGVscGVycy92YWxpZGF0ZS12YWx1ZS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBkYXRlTW9kZWxDb25zdGFudCwgdGltZU1vZGVsQ29uc3RhbnQgfSBmcm9tICcuL2NvbnN0YW50cy92YWx1ZS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBkYXRlTW9kZWxWYWx1ZVBhcnNlLCB0aW1lTW9kZWxWYWx1ZVBhcnNlIH0gZnJvbSAnLi9oZWxwZXJzL3ZhbHVlLXBhcnNlcic7XHJcbmltcG9ydCB7IG1hcmtQb3NpdGlvbiB9IGZyb20gJy4vaGVscGVycy9jdXJzb3ItcG9zaXRpb24nO1xyXG5pbXBvcnQgeyBjbGVhbkRhdGUgfSBmcm9tICcuL2hlbHBlcnMvY2xlYW4tZGF0ZSc7XHJcbmltcG9ydCB7IGZvcm1hdHRpbmdGcm9tTW9zY293VGltZXpvbmUsIGZvcm1hdHRpbmdUb01vc2Nvd1RpbWV6b25lIH0gZnJvbSAnLi9oZWxwZXJzL2Zvcm1hdHRpbmctbW9zY293LXRpbWV6b25lJztcclxuaW1wb3J0IHsgVGltZXpvbmVUeXBlIH0gZnJvbSAnLi9lbnVtL3RpbWV6b25lJztcclxuaW1wb3J0IHsgZm9ybWF0dGluZ0Zyb21Nb2RlbHMgfSBmcm9tICcuL2hlbHBlcnMvZm9ybWF0dGluZy1mcm9tLW1vZGVscyc7XHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgeyBjcmVhdGVQb3BwZXIsIFBsYWNlbWVudCB9IGZyb20gJ0Bwb3BwZXJqcy9jb3JlJztcclxuaW1wb3J0IHsgRmllbGQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IElucHV0RGF0ZVRpbWVWYWx1ZVR5cGVzLCBJbnB1dERhdGVUaW1lVmFsdWVXaXRoSWQgfSBmcm9tICcuL21vZGVscy9pbnB1dC1kYXRlLXRpbWUubW9kZWwnO1xyXG5cclxuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZSc7XHJcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yyc7XHJcblxyXG5kYXlqcy5leHRlbmQodXRjKTtcclxuZGF5anMuZXh0ZW5kKHRpbWV6b25lKTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbXJ4LWlucHV0LWRhdGUtdGltZScsXHJcbiAgdGVtcGxhdGVVcmw6ICdpbnB1dC1kYXRlLXRpbWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydpbnB1dC1kYXRlLXRpbWUuY29tcG9uZW50cy5sZXNzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElucHV0RGF0ZVRpbWVDb21wb25lbnQpLCBtdWx0aTogdHJ1ZX1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnB1dERhdGVUaW1lQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcHVibGljIGR0OiBhbnk7XHJcbiAgcHVibGljIHZhbHVlOiBhbnkgPSAnJztcclxuICBwdWJsaWMgZGF0ZU1vZGVsOiBEYXRlTW9kZWwgPSBkYXRlTW9kZWxDb25zdGFudDtcclxuICBwdWJsaWMgdGltZU1vZGVsOiBUaW1lTW9kZWwgPSB0aW1lTW9kZWxDb25zdGFudDtcclxuXHJcbiAgcHVibGljIGlubmVySW52YWxpZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbm5lckludmFsaWRNZXNzYWdlID0gJyc7XHJcblxyXG4gIC8vIFNBVkUgU1RBVEVcclxuICBwdWJsaWMgdXVpZDogc3RyaW5nID0gdXVpZHY0KCk7XHJcbiAgQElucHV0KCkgcHVibGljIGZpZWxkczogRmllbGRbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgc2l6ZTogSW5wdXREYXRlVGltZVNpemVzVHlwZXMgPSAnbGFyZ2UnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21DbGFzc2VzID0gJyc7XHJcbiAgQElucHV0KCkgcHVibGljIGRhdGVMYWJlbCA9ICcnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0aW1lTGFiZWwgPSAnJztcclxuICBASW5wdXQoKSBwdWJsaWMgZGF0ZVBsYWNlaG9sZGVyID0gJ9C00LQu0LzQvC7Qs9Cz0LPQsyc7XHJcbiAgQElucHV0KCkgcHVibGljIHRpbWVQbGFjZWhvbGRlciA9ICcwMDowMCc7XHJcbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIHJlYWRvbmx5ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIHJlcXVpcmVkID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIHRpbWVwaWNrZXIgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgcmFuZ2UgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgdGltZXpvbmU6IFRpbWV6b25lVHlwZSA9ICdkZWZhdWx0JztcclxuICBASW5wdXQoKSBwdWJsaWMgaW5saW5lID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGlzTWFudWFsSW5wdXQgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBhZGRNaW5UaW1lID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGFkZE1heFRpbWUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgYWRkTWluVGltZU9iaiE6IEV4dHJhVGltZTtcclxuICBASW5wdXQoKSBwdWJsaWMgYWRkTWF4VGltZU9iaiE6IEV4dHJhVGltZTtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVWYWxpZGF0ZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlSW5jbHVkZXMgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGNvbnRhaW5lciA9ICdkaXYucGFnZS13cmFwcGVyJztcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGludmFsaWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgaW52YWxpZE1lc3NhZ2U6IHN0cmluZyB8IHN0cmluZ1tdID0gJyc7XHJcbiAgQElucHV0KCkgcHVibGljIGNoZWNrSW52YWxpZDogdHJ1ZSB8IGZhbHNlIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBJbnB1dCgpIG1pbkRhdGU6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIG1heERhdGU6IHN0cmluZyA9ICcnO1xyXG5cclxuICBASW5wdXQoKSBjYWxlbmRhclBvc2l0aW9uOiBQbGFjZW1lbnQgPSAnYm90dG9tLXN0YXJ0J1xyXG5cclxuICBAVmlld0NoaWxkKCdkYXRlSW5wdXQnKSBkYXRlSW5wdXQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBAT3V0cHV0KCkgcHVibGljIGNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxJbnB1dERhdGVUaW1lVmFsdWVUeXBlcz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBtb2RlbENoYW5nZTogRXZlbnRFbWl0dGVyPElucHV0RGF0ZVRpbWVWYWx1ZVdpdGhJZD4gPSBuZXcgRXZlbnRFbWl0dGVyPElucHV0RGF0ZVRpbWVWYWx1ZVdpdGhJZD4oKTtcclxuICBAT3V0cHV0KCkgcHVibGljIGJsdXJyZWQ6IEV2ZW50RW1pdHRlcjxJbnB1dERhdGVUaW1lVmFsdWVXaXRoSWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJbnB1dERhdGVUaW1lVmFsdWVXaXRoSWQ+KCk7XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZHQgPSBuZXcgQWlyRGF0ZXBpY2tlcih0aGlzLmRhdGVJbnB1dC5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgIGNvbnRhaW5lcjogdGhpcy5jb250YWluZXIsXHJcbiAgICAgIGxvY2FsZToge1xyXG4gICAgICAgIGRhdGVGb3JtYXQ6ICdkZC5NTS55eXl5JyxcclxuICAgICAgICB0aW1lRm9ybWF0OiAnSEg6bW0nLFxyXG4gICAgICB9LFxyXG4gICAgICBhdXRvQ2xvc2U6IHRydWUsXHJcbiAgICAgIHJhbmdlOiB0aGlzLnJhbmdlLFxyXG4gICAgICBtdWx0aXBsZURhdGVzU2VwYXJhdG9yOiAnIC0gJyxcclxuICAgICAgdGltZXBpY2tlcjogdGhpcy50aW1lcGlja2VyLFxyXG4gICAgICBtaW5EYXRlOiB0aGlzLm1pbkRhdGUgPyBmb3JtYXR0aW5nRnJvbU1vc2Nvd1RpbWV6b25lKHRoaXMubWluRGF0ZSwgdGhpcy50aW1lem9uZSkgOiAnJyxcclxuICAgICAgbWF4RGF0ZTogdGhpcy5tYXhEYXRlID8gZm9ybWF0dGluZ0Zyb21Nb3Njb3dUaW1lem9uZSh0aGlzLm1heERhdGUsIHRoaXMudGltZXpvbmUpIDogJycsXHJcbiAgICAgIGlubGluZTogdGhpcy5pbmxpbmUsXHJcbiAgICAgIHBvc2l0aW9uOiAoeyRkYXRlcGlja2VyLCAkdGFyZ2V0LCAkcG9pbnRlciwgZG9uZX0pID0+IHtcclxuICAgICAgICBsZXQgcG9wcGVyID0gY3JlYXRlUG9wcGVyKCR0YXJnZXQsICRkYXRlcGlja2VyLCB7XHJcbiAgICAgICAgICBwbGFjZW1lbnQ6IHRoaXMuY2FsZW5kYXJQb3NpdGlvbixcclxuICAgICAgICAgIG1vZGlmaWVyczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgbmFtZTogJ2ZsaXAnLFxyXG4gICAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IHtcclxuICAgICAgICAgICAgICAgICAgdG9wOiA2NFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIG5hbWU6ICdvZmZzZXQnLFxyXG4gICAgICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgIG9mZnNldDogWzAsIDEwXVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIG5hbWU6ICdhcnJvdycsXHJcbiAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogJHBvaW50ZXJcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIF1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbXBsZXRlSGlkZSgpIHtcclxuICAgICAgICAgIHBvcHBlci5kZXN0cm95KCk7XHJcbiAgICAgICAgICBkb25lKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSxcclxuICAgICAgb25TZWxlY3Q6ICh7ZGF0ZSwgZm9ybWF0dGVkRGF0ZSwgZGF0ZXBpY2tlcn0pID0+IHtcclxuICAgICAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgdHlwZW9mIGZvcm1hdHRlZERhdGUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGVNb2RlbCA9IHZhbGlkYXRlRGF0ZU1vZGVsKGZvcm1hdHRlZERhdGUpO1xyXG4gICAgICAgICAgdGhpcy50aW1lTW9kZWwgPSB2YWxpZGF0ZVRpbWVNb2RlbChmb3JtYXR0ZWREYXRlKTtcclxuXHJcbiAgICAgICAgICB0aGlzLl9jaGVja0V4dHJhVGltZSgpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWRNb2RlbHMpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU1vZGVsKHRoaXMuZGF0ZU1vZGVsLCB0aGlzLnRpbWVNb2RlbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZm9ybWF0dGVkRGF0ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVzQXJyYXkoZGF0ZSBhcyBEYXRlW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZHQpIHtcclxuICAgICAgaWYgKGNoYW5nZXNbJ21heERhdGUnXSkge1xyXG4gICAgICAgIHRoaXMuZHQudXBkYXRlKHttYXhEYXRlOiB0aGlzLm1heERhdGV9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMuZHQuc2VsZWN0RGF0ZShmb3JtYXR0aW5nRnJvbU1vZGVscyh0aGlzLmRhdGVNb2RlbCwgdGhpcy50aW1lTW9kZWwsIHRoaXMudGltZXBpY2tlcikudG9JU09TdHJpbmcoKSwge1xyXG4gICAgICAgICAgICB1cGRhdGVUaW1lOiB0aGlzLnRpbWVwaWNrZXIsXHJcbiAgICAgICAgICAgIHNpbGVudDogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZVZhbGlkYXRlKSB7XHJcbiAgICAgICAgICBjb25zdCBpbnZhbGlkID0gdGhpcy5pbm5lckludmFsaWQ7XHJcbiAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5jaGVja2luZ0ludmFsaWQodGhpcy52YWx1ZSwgdGhpcy5tYXhEYXRlLCB0aGlzLm1pbkRhdGUpO1xyXG5cclxuICAgICAgICAgIGlmIChpbnZhbGlkICYmIGlzVmFsaWQpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU1vZGVsKHRoaXMuZGF0ZU1vZGVsLCB0aGlzLnRpbWVNb2RlbCk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNoYW5nZXNbJ21pbkRhdGUnXSkge1xyXG4gICAgICAgIHRoaXMuZHQudXBkYXRlKHttaW5EYXRlOiB0aGlzLm1pbkRhdGV9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMuZHQuc2VsZWN0RGF0ZShmb3JtYXR0aW5nRnJvbU1vZGVscyh0aGlzLmRhdGVNb2RlbCwgdGhpcy50aW1lTW9kZWwsIHRoaXMudGltZXBpY2tlcikudG9JU09TdHJpbmcoKSwge1xyXG4gICAgICAgICAgICB1cGRhdGVUaW1lOiB0aGlzLnRpbWVwaWNrZXIsXHJcbiAgICAgICAgICAgIHNpbGVudDogdHJ1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZVZhbGlkYXRlKSB7XHJcbiAgICAgICAgICBjb25zdCBpbnZhbGlkID0gdGhpcy5pbm5lckludmFsaWQ7XHJcbiAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5jaGVja2luZ0ludmFsaWQodGhpcy52YWx1ZSwgdGhpcy5tYXhEYXRlLCB0aGlzLm1pbkRhdGUpO1xyXG5cclxuICAgICAgICAgIGlmIChpbnZhbGlkICYmIGlzVmFsaWQpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZU1vZGVsKHRoaXMuZGF0ZU1vZGVsLCB0aGlzLnRpbWVNb2RlbCk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBnZXREYXRlVmFsdWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt0aGlzLmRhdGVNb2RlbC52aWV3fSR7dGhpcy50aW1lTW9kZWwudmlldyA/ICcgJyArIHRoaXMudGltZU1vZGVsLnZpZXcgOiAnJ31gO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBnZXRDbGFzc2VzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7SW5wdXREYXRlVGltZVNpemVzRW51bVt0aGlzLnNpemVdfSAke3RoaXMuY3VzdG9tQ2xhc3Nlc30gJHt0aGlzLmNoZWNrVmFsaWRDbGFzc2VzfWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBpc1ZhbGlkTW9kZWxzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLmRhdGVNb2RlbC5pbnZhbGlkICYmICh0aGlzLnRpbWVwaWNrZXIgPyAhdGhpcy50aW1lTW9kZWwuaW52YWxpZCA6IHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpc1ZpZXdDbGVhbkljb24oKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLmRhdGVJbnB1dD8ubmF0aXZlRWxlbWVudC52YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2hlY2tWYWxpZENsYXNzZXMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrSW52YWxpZCA9PT0gZmFsc2UgPyAnbXJ4LWlucHV0LWNoZWNrZWQtc3VjY2VzcycgOiB0aGlzLmNoZWNrSW52YWxpZCA9PT0gdHJ1ZSA/ICdtcngtaW5wdXQtY2hlY2tlZC1lcnJvcicgOiAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NoZWNrRXh0cmFUaW1lKCkge1xyXG4gICAgaWYgKHRoaXMuYWRkTWF4VGltZSAmJiAhdGhpcy50aW1lcGlja2VyKSB7XHJcbiAgICAgIHRoaXMudGltZU1vZGVsLmhvdXIgPSAnMjMnO1xyXG4gICAgICB0aGlzLnRpbWVNb2RlbC5taW51dGUgPSAnNTknO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWRkTWluVGltZSAmJiAhdGhpcy50aW1lcGlja2VyKSB7XHJcbiAgICAgIHRoaXMudGltZU1vZGVsLmhvdXIgPSAnMDAnO1xyXG4gICAgICB0aGlzLnRpbWVNb2RlbC5taW51dGUgPSAnMDAnO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWRkTWF4VGltZU9iaiAmJiAhdGhpcy50aW1lcGlja2VyKSB7XHJcbiAgICAgIHRoaXMudGltZU1vZGVsLmhvdXIgPSB0aGlzLmFkZE1heFRpbWVPYmouaG91cjtcclxuICAgICAgdGhpcy50aW1lTW9kZWwubWludXRlID0gdGhpcy5hZGRNYXhUaW1lT2JqLm1pbnV0ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFkZE1pblRpbWVPYmogJiYgIXRoaXMudGltZXBpY2tlcikge1xyXG4gICAgICB0aGlzLnRpbWVNb2RlbC5ob3VyID0gdGhpcy5hZGRNaW5UaW1lT2JqLmhvdXI7XHJcbiAgICAgIHRoaXMudGltZU1vZGVsLm1pbnV0ZSA9IHRoaXMuYWRkTWluVGltZU9iai5taW51dGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xpY2tUb0ljb25DYWxlbmRhcigpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGlja1RvSWNvbkNsZWFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kdC5zZXRWaWV3RGF0ZShuZXcgRGF0ZSgpKTtcclxuICAgIHRoaXMuZHQgJiYgdGhpcy5kdC5jbGVhcigpO1xyXG4gICAgdGhpcy5kYXRlTW9kZWwgPSBkYXRlTW9kZWxDb25zdGFudDtcclxuICAgIHRoaXMudGltZU1vZGVsID0gdGltZU1vZGVsQ29uc3RhbnQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLnJhbmdlKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlVmFsdWUoJycpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5uZXJJbnZhbGlkID0gZmFsc2U7XHJcbiAgICB0aGlzLmlubmVySW52YWxpZE1lc3NhZ2UgPSAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVmFsdWVNb2RlbChkYXRlTW9kZWw6IERhdGVNb2RlbCwgdGltZU1vZGVsOiBUaW1lTW9kZWwsIGJvbDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoZGF0ZU1vZGVsLnZpZXcgPT09ICcnKSB7XHJcbiAgICAgIHRoaXMuY2xpY2tUb0ljb25DbGVhcigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZGF0ZSA9IGZvcm1hdHRpbmdGcm9tTW9kZWxzKGRhdGVNb2RlbCwgdGltZU1vZGVsLCB0aGlzLnRpbWVwaWNrZXIgfHwgdGhpcy5hZGRNYXhUaW1lIHx8IHRoaXMuYWRkTWluVGltZSk7XHJcblxyXG4gICAgICBjb25zdCBmb3JtYXR0aW5nRGF0ZSA9IGZvcm1hdHRpbmdUb01vc2Nvd1RpbWV6b25lKGRhdGUudG9JU09TdHJpbmcoKSwgdGhpcy50aW1lem9uZSk7XHJcblxyXG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy5jaGVja2luZ0ludmFsaWQoZm9ybWF0dGluZ0RhdGUsIHRoaXMubWF4RGF0ZSwgdGhpcy5taW5EYXRlKTtcclxuXHJcbiAgICAgIGlmIChkYXRlLmlzVmFsaWQoKSAmJiBpc1ZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5kdC5zZWxlY3REYXRlKGZvcm1hdHRpbmdGcm9tTW9kZWxzKGRhdGVNb2RlbCwgdGltZU1vZGVsLCB0aGlzLnRpbWVwaWNrZXIpLnRvSVNPU3RyaW5nKCksIHtcclxuICAgICAgICAgIHVwZGF0ZVRpbWU6IHRoaXMudGltZXBpY2tlcixcclxuICAgICAgICAgIHNpbGVudDogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZHQuc2V0Vmlld0RhdGUoZm9ybWF0dGluZ0Zyb21Nb2RlbHMoZGF0ZU1vZGVsLCB0aW1lTW9kZWwsIHRoaXMudGltZXBpY2tlcikudG9JU09TdHJpbmcoKSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZShmb3JtYXR0aW5nRGF0ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVmFsdWVzQXJyYXkgPSAodmFsdWVzOiBhbnlbXSkgPT4ge1xyXG4gICAgY29uc3QgZGF0ZXMgPSB2YWx1ZXMubWFwKGRhdGUgPT4ge1xyXG4gICAgICByZXR1cm4gZm9ybWF0dGluZ1RvTW9zY293VGltZXpvbmUoZGF0ZS50b0lTT1N0cmluZygpLCB0aGlzLnRpbWV6b25lKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXBkYXRlVmFsdWUoZGF0ZXMpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgaW52YWxpZE1lc3NhZ2VPbihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5uZXJJbnZhbGlkID0gdHJ1ZTtcclxuICAgIHRoaXMuaW5uZXJJbnZhbGlkTWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGludmFsaWRNZXNzYWdlT2ZmKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbm5lckludmFsaWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaW5uZXJJbnZhbGlkTWVzc2FnZSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZURhdGVWYWx1ZShkYXRlSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gZGF0ZUlucHV0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgdGhpcy5kYXRlTW9kZWwgPSB2YWxpZGF0ZURhdGVNb2RlbChkYXRlSW5wdXQudmFsdWUpO1xyXG4gICAgdGhpcy50aW1lTW9kZWwgPSB2YWxpZGF0ZVRpbWVNb2RlbChkYXRlSW5wdXQudmFsdWUpO1xyXG5cclxuICAgIGRhdGVJbnB1dC52YWx1ZSA9IHRoaXMuZ2V0RGF0ZVZhbHVlO1xyXG4gICAgZGF0ZUlucHV0LnNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICBkYXRlSW5wdXQuc2VsZWN0aW9uRW5kID0gZGF0ZUlucHV0LnNlbGVjdGlvblN0YXJ0O1xyXG5cclxuICAgIHRoaXMuX2NoZWNrRXh0cmFUaW1lKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNWYWxpZE1vZGVscyB8fCB0aGlzLmRhdGVNb2RlbC52aWV3ID09PSAnJykge1xyXG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlTW9kZWwodGhpcy5kYXRlTW9kZWwsIHRoaXMudGltZU1vZGVsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGlja1RvSW5wdXQoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIGlmIChpbnB1dC5zZWxlY3Rpb25TdGFydCA9PT0gaW5wdXQuc2VsZWN0aW9uRW5kICYmIChpbnB1dC5zZWxlY3Rpb25TdGFydCAmJiBpbnB1dC5zZWxlY3Rpb25TdGFydCA+IDApKSB7XHJcbiAgICAgIGNvbnN0IHtzdGFydCwgZW5kfSA9IG1hcmtQb3NpdGlvbihpbnB1dC5zZWxlY3Rpb25TdGFydCwgaW5wdXQuc2VsZWN0aW9uRW5kKTtcclxuICAgICAgaW5wdXQuc2VsZWN0aW9uU3RhcnQgPSBzdGFydDtcclxuICAgICAgaW5wdXQuc2VsZWN0aW9uRW5kID0gZW5kO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja2luZ0ludmFsaWQodmFsdWU6IHN0cmluZywgbWF4RGF0ZTogc3RyaW5nLCBtaW5EYXRlOiBzdHJpbmcpIHtcclxuICAgIGxldCB2YWxpZE1heERhdGUgPSAnJztcclxuICAgIGxldCB2YWxpZE1pbkRhdGUgPSAnJztcclxuXHJcbiAgICBpZiAodGhpcy50aW1lcGlja2VyKSB7XHJcbiAgICAgIHZhbGlkTWF4RGF0ZSA9IHRoaXMubWF4RGF0ZTtcclxuICAgICAgdmFsaWRNaW5EYXRlID0gdGhpcy5taW5EYXRlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMubWF4RGF0ZSkge1xyXG4gICAgICAgIHZhbGlkTWF4RGF0ZSA9IGRheWpzKHRoaXMubWF4RGF0ZSkudHoodGhpcy50aW1lem9uZSkuaG91cigyMykubWludXRlKDU5KS5zZWNvbmQoNTkpLm1pbGxpc2Vjb25kKDApLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm1pbkRhdGUpIHtcclxuICAgICAgICB2YWxpZE1pbkRhdGUgPSBkYXlqcyh0aGlzLm1pbkRhdGUpLnR6KHRoaXMudGltZXpvbmUpLmhvdXIoMCkubWludXRlKDApLnNlY29uZCgwIC0gMSkubWlsbGlzZWNvbmQoMCkudG9JU09TdHJpbmcoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRpc2FibGVWYWxpZGF0ZSkge1xyXG4gICAgICB0aGlzLmludmFsaWRNZXNzYWdlT2ZmKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWxpZE1heERhdGUgJiYgKGRheWpzKHZhbHVlKS5kaWZmKGRheWpzKHZhbGlkTWF4RGF0ZSkpID09PSAwKSAmJiAhdGhpcy5kaXNhYmxlSW5jbHVkZXMpIHtcclxuICAgICAgdGhpcy5pbnZhbGlkTWVzc2FnZU9uKCfQlNCw0YLQsCDQuCDQstGA0LXQvNGPINC+0LrQvtC90YfQsNC90LjRjyDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0YDQsNCy0L3QsCDQtNCw0YLQtSDQuCDQstGA0LXQvNC10L3QuCDQvdCw0YfQsNC70LAnKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh2YWxpZE1heERhdGUgJiYgKGRheWpzKHZhbHVlKS5kaWZmKGRheWpzKHZhbGlkTWF4RGF0ZSkpID4gMCkpIHtcclxuICAgICAgdGhpcy5pbnZhbGlkTWVzc2FnZU9uKCfQlNCw0YLQsCDQvtC60L7QvdGH0LDQvdC40Y8g0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMINGA0LDQvdGM0YjQtSDQtNCw0YLRiyDQvdCw0YfQsNC70LAnKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh2YWxpZE1pbkRhdGUgJiYgKGRheWpzKHZhbHVlKS5kaWZmKGRheWpzKHZhbGlkTWluRGF0ZSkpID09PSAwKSAmJiAhdGhpcy5kaXNhYmxlSW5jbHVkZXMpIHtcclxuICAgICAgdGhpcy5pbnZhbGlkTWVzc2FnZU9uKCfQlNCw0YLQsCDQuCDQstGA0LXQvNGPINC+0LrQvtC90YfQsNC90LjRjyDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0YDQsNCy0L3QsCDQtNCw0YLQtSDQuCDQstGA0LXQvNC10L3QuCDQvdCw0YfQsNC70LAnKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh2YWxpZE1pbkRhdGUgJiYgZGF5anModmFsdWUpLmRpZmYoZGF5anModmFsaWRNaW5EYXRlKSkgPCAwKSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZE1lc3NhZ2VPbign0JTQsNGC0LAg0L7QutC+0L3Rh9Cw0L3QuNGPINC90LUg0LzQvtC20LXRgiDQsdGL0YLRjCDRgNCw0L3RjNGI0LUg0LTQsNGC0Ysg0L3QsNGH0LDQu9CwJyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW52YWxpZE1lc3NhZ2VPZmYoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgd3JpdGVWYWx1ZShvdXRzaWRlVmFsdWU6IElucHV0RGF0ZVRpbWVWYWx1ZVR5cGVzKSB7XHJcbiAgICBpZiAob3V0c2lkZVZhbHVlKSB7XHJcbiAgICAgIGlmICh0eXBlb2Ygb3V0c2lkZVZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBjbGVhbkRhdGUob3V0c2lkZVZhbHVlKTtcclxuICAgICAgICB0aGlzLmRhdGVNb2RlbCA9IGRhdGVNb2RlbFZhbHVlUGFyc2Uob3V0c2lkZVZhbHVlLCB0aGlzLnRpbWV6b25lKTtcclxuICAgICAgICB0aGlzLnRpbWVNb2RlbCA9IHRpbWVNb2RlbFZhbHVlUGFyc2Uob3V0c2lkZVZhbHVlLCB0aGlzLnRpbWV6b25lKTtcclxuXHJcbiAgICAgICAgdGhpcy5jaGVja2luZ0ludmFsaWQob3V0c2lkZVZhbHVlLCB0aGlzLm1heERhdGUsIHRoaXMubWluRGF0ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZHQuc2VsZWN0RGF0ZShmb3JtYXR0aW5nRnJvbU1vZGVscyh0aGlzLmRhdGVNb2RlbCwgdGhpcy50aW1lTW9kZWwsIHRoaXMudGltZXBpY2tlcikudG9JU09TdHJpbmcoKSwge1xyXG4gICAgICAgICAgdXBkYXRlVGltZTogdGhpcy50aW1lcGlja2VyLFxyXG4gICAgICAgICAgc2lsZW50OiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5kdC5zZXRWaWV3RGF0ZShmb3JtYXR0aW5nRnJvbU1vZGVscyh0aGlzLmRhdGVNb2RlbCwgdGhpcy50aW1lTW9kZWwsIHRoaXMudGltZXBpY2tlcikudG9JU09TdHJpbmcoKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG91dHNpZGVWYWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gb3V0c2lkZVZhbHVlLm1hcChkYXRlID0+IGNsZWFuRGF0ZShkYXRlKSk7XHJcblxyXG4gICAgICAgIHRoaXMuZHQuc2VsZWN0RGF0ZSh0aGlzLnZhbHVlLCB7XHJcbiAgICAgICAgICB1cGRhdGVUaW1lOiB0aGlzLnRpbWVwaWNrZXIsXHJcbiAgICAgICAgICBzaWxlbnQ6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuZHQpIHtcclxuICAgICAgICB0aGlzLmR0LmNsZWFyKHtzaWxlbnQ6IHRydWV9KTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gJyc7XHJcbiAgICAgICAgdGhpcy5kYXRlTW9kZWwgPSBkYXRlTW9kZWxDb25zdGFudDtcclxuICAgICAgICB0aGlzLnRpbWVNb2RlbCA9IHRpbWVNb2RlbENvbnN0YW50O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQ2hhbmdlID0gKHZhbHVlOiBhbnkpID0+IHtcclxuICB9O1xyXG4gIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4ge1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4ge30pOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVWYWx1ZShpbnNpZGVWYWx1ZTogSW5wdXREYXRlVGltZVZhbHVlVHlwZXMpIHtcclxuICAgIHRoaXMudmFsdWUgPSBpbnNpZGVWYWx1ZTtcclxuICAgIHRoaXMuY2hhbmdlZC5lbWl0KGluc2lkZVZhbHVlKTtcclxuICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh7dmFsdWU6IGluc2lkZVZhbHVlLCBpZDogdGhpcy51dWlkfSk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKGluc2lkZVZhbHVlKTtcclxuICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25CbHVyKGV2ZW50OiBFdmVudCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYmx1cnJlZC5lbWl0KHt2YWx1ZTogdGhpcy52YWx1ZSwgaWQ6IHRoaXMudXVpZH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICBjbGFzcz1cIm1yeC1pbnB1dC1kYXRlXCJcclxuICBbY2xhc3MubXJ4LWlucHV0LWVycm9yXT1cImludmFsaWQgfHwgaW5uZXJJbnZhbGlkXCJcclxuICBbY2xhc3MubXJ4LWlucHV0LXJlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICBbY2xhc3NdPVwiZ2V0Q2xhc3Nlc1wiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiXCI+XHJcbiAgICA8bXJ4LWxhYmVsICpuZ0lmPVwidGltZUxhYmVsIHx8IGRhdGVMYWJlbFwiPnt7IGRhdGVMYWJlbCB9fTwvbXJ4LWxhYmVsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1yeC1pbnB1dC1kYXRlX193cmFwcGVyXCI+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgICNkYXRlSW5wdXRcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwibm9wZVwiXHJcbiAgICAgICAgY2xhc3M9XCJtcngtaW5wdXQtZGF0ZV9faW5wdXQgbXJ4LWlucHV0LWRhdGVfX2RhdGVcIlxyXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRlUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgIFtuZ01vZGVsXT1cImdldERhdGVWYWx1ZVwiXHJcbiAgICAgICAgW21hc2tdPVwiJzAwLjAwLjAwMDAgMDA6bTAnXCJcclxuICAgICAgICBbbGVhZFplcm9EYXRlVGltZV09XCJ0cnVlXCJcclxuICAgICAgICBbdmFsaWRhdGlvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICBbcmVhZE9ubHldPVwiIWlzTWFudWFsSW5wdXRcIlxyXG4gICAgICAgIChpbnB1dCk9XCJ1cGRhdGVEYXRlVmFsdWUoZGF0ZUlucHV0KVwiXHJcbiAgICAgICAgKGNsaWNrKT1cImNsaWNrVG9JbnB1dChkYXRlSW5wdXQpXCJcclxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXHJcbiAgICAgIC8+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWRpc2FibGVkXCIgY2xhc3M9XCJtcngtaW5wdXQtZGF0ZV9faWNvbnNcIj5cclxuICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgIGNsYXNzPVwibXJ4LWljb24gaWNvbi1jbG9zZVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiaXNWaWV3Q2xlYW5JY29uXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrVG9JY29uQ2xlYXIoKVwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5pY29uLWZvbnQtMTZdPVwic2l6ZSA9PT0gJ3NtYWxsJ1wiXHJcbiAgICAgICAgICAgIFtjbGFzcy5pY29uLWZvbnQtMjRdPVwic2l6ZSA9PT0gJ21lZGl1bScgfHwgc2l6ZSA9PT0gJ2xhcmdlJ1wiXHJcbiAgICAgICAgICA+PC9zcGFuPlxyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICBjbGFzcz1cIm1yeC1pY29uIGljb24tY2FsZW5kYXJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImNsaWNrVG9JY29uQ2FsZW5kYXIoKVwiXHJcbiAgICAgICAgICBbY2xhc3MuaWNvbi1mb250LTE2XT1cInNpemUgPT09ICdzbWFsbCdcIlxyXG4gICAgICAgICAgW2NsYXNzLmljb24tZm9udC0yNF09XCJzaXplID09PSAnbWVkaXVtJyB8fCBzaXplID09PSAnbGFyZ2UnXCJcclxuICAgICAgICA+PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bXJ4LWVycm9yLW1lc3NhZ2VcclxuICAgICpuZ0lmPVwiaW52YWxpZDsgZWxzZSBpbm5lckludmFsaWRUZW1wbGF0ZVwiXHJcbiAgICBbaW52YWxpZE1lc3NhZ2VdPVwiaW52YWxpZE1lc3NhZ2VcIlxyXG4gID48L21yeC1lcnJvci1tZXNzYWdlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2lubmVySW52YWxpZFRlbXBsYXRlPlxyXG4gICAgPG1yeC1lcnJvci1tZXNzYWdlXHJcbiAgICAgICpuZ0lmPVwiaW5uZXJJbnZhbGlkXCJcclxuICAgICAgW2ludmFsaWRNZXNzYWdlXT1cImlubmVySW52YWxpZE1lc3NhZ2VcIlxyXG4gICAgPjwvbXJ4LWVycm9yLW1lc3NhZ2U+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG1yeC1zYXZlLXN0YXRlIFtpZF09XCJ1dWlkXCIgW2ZpZWxkc109XCJmaWVsZHNcIj48L21yeC1zYXZlLXN0YXRlPlxyXG48L2Rpdj5cclxuIl19
@@ -38,7 +38,7 @@ import localeRu from 'air-datepicker/locale/ru';
38
38
  import * as i1$7 from 'ngx-mask';
39
39
  import { NgxMaskModule } from 'ngx-mask';
40
40
  import utc from 'dayjs/plugin/utc';
41
- import timezone from 'dayjs/plugin/timezone';
41
+ import tz from 'dayjs/plugin/timezone';
42
42
  import localeRu$1 from '@angular/common/locales/ru';
43
43
  import * as lpn from 'google-libphonenumber';
44
44
  import * as i1$8 from 'jodit-angular';
@@ -5584,7 +5584,7 @@ const timeModelConstant$2 = {
5584
5584
  invalid: true
5585
5585
  };
5586
5586
 
5587
- const dateModelValueParse = (value, format) => {
5587
+ const dateModelValueParse$1 = (value, format) => {
5588
5588
  const date = dayjs(value, format);
5589
5589
  const day = date.date();
5590
5590
  const month = date.month() + 1;
@@ -5601,7 +5601,7 @@ const dateModelValueParse = (value, format) => {
5601
5601
  invalid: !(dayjs(dateString).isValid() && dateString.length === 10)
5602
5602
  };
5603
5603
  };
5604
- const timeModelValueParse$1 = (value, format) => {
5604
+ const timeModelValueParse$2 = (value, format) => {
5605
5605
  const date = dayjs(value, format);
5606
5606
  const hour = date.hour();
5607
5607
  const minute = date.minute();
@@ -5653,7 +5653,7 @@ const markPosition$2 = (start, end, pattern = 'date') => {
5653
5653
  }
5654
5654
  };
5655
5655
 
5656
- const cleanDate$2 = (value, format) => {
5656
+ const cleanDate$3 = (value, format) => {
5657
5657
  return dayjs(value).format(format);
5658
5658
  };
5659
5659
 
@@ -5910,9 +5910,9 @@ class InputDatepickerComponent {
5910
5910
  }
5911
5911
  writeValue(outsideValue) {
5912
5912
  if (outsideValue) {
5913
- this.value = cleanDate$2(outsideValue, this.format);
5914
- this.dateModel = dateModelValueParse(outsideValue, this.format);
5915
- this.timeModel = timeModelValueParse$1(outsideValue, this.format);
5913
+ this.value = cleanDate$3(outsideValue, this.format);
5914
+ this.dateModel = dateModelValueParse$1(outsideValue, this.format);
5915
+ this.timeModel = timeModelValueParse$2(outsideValue, this.format);
5916
5916
  if (!this.disableValidation) {
5917
5917
  this.checkingInvalid(outsideValue, this.maxDate, this.minDate);
5918
5918
  }
@@ -6285,7 +6285,7 @@ var Timezone$1;
6285
6285
  })(Timezone$1 || (Timezone$1 = {}));
6286
6286
 
6287
6287
  dayjs.extend(utc);
6288
- dayjs.extend(timezone);
6288
+ dayjs.extend(tz);
6289
6289
  registerLocaleData(localeRu$1);
6290
6290
  const changeTimezone = (value, timezone) => {
6291
6291
  const date = timezone === 'default' ? dayjs(value) : dayjs.utc(value).utcOffset(Timezone$1[timezone]);
@@ -9928,13 +9928,13 @@ function getDaysInMonth(year, month) {
9928
9928
  return new Date(year, month + 1, 0).getDate();
9929
9929
  }
9930
9930
  function isDateInRange(date, minDate, maxDate) {
9931
- const min = minDate ? cleanDate$1(minDate) : null;
9932
- const max = maxDate ? cleanDate$1(maxDate) : null;
9931
+ const min = minDate ? cleanDate$2(minDate) : null;
9932
+ const max = maxDate ? cleanDate$2(maxDate) : null;
9933
9933
  return (!min || date >= min) && (!max || date <= max);
9934
9934
  }
9935
9935
  function clampDate(date, minDate, maxDate) {
9936
- const min = minDate ? cleanDate$1(minDate) : null;
9937
- const max = maxDate ? cleanDate$1(maxDate) : null;
9936
+ const min = minDate ? cleanDate$2(minDate) : null;
9937
+ const max = maxDate ? cleanDate$2(maxDate) : null;
9938
9938
  if (min && date < min)
9939
9939
  return new Date(min);
9940
9940
  if (max && date > max)
@@ -9942,8 +9942,8 @@ function clampDate(date, minDate, maxDate) {
9942
9942
  return date;
9943
9943
  }
9944
9944
  function getRangeErrorMessage(date, minDate, maxDate) {
9945
- const min = minDate ? cleanDate$1(minDate) : null;
9946
- const max = maxDate ? cleanDate$1(maxDate) : null;
9945
+ const min = minDate ? cleanDate$2(minDate) : null;
9946
+ const max = maxDate ? cleanDate$2(maxDate) : null;
9947
9947
  if (min && date < min)
9948
9948
  return 'Дата меньше минимальной';
9949
9949
  if (max && date > max)
@@ -9974,7 +9974,7 @@ function adjustInvalidDate(year, month, day) {
9974
9974
  month = Math.min(Math.max(month, 0), 11);
9975
9975
  return { year, month, day };
9976
9976
  }
9977
- const cleanDate$1 = (date) => {
9977
+ const cleanDate$2 = (date) => {
9978
9978
  return new Date(new Date(date).setHours(0, 0, 0, 0));
9979
9979
  };
9980
9980
 
@@ -10027,8 +10027,8 @@ class DateCalendarComponent {
10027
10027
  return this._maxDateStr;
10028
10028
  }
10029
10029
  updateDateBounds() {
10030
- this._minDate = this._minDateStr ? cleanDate$1(this._minDateStr) : null;
10031
- this._maxDate = this._maxDateStr ? cleanDate$1(this._maxDateStr) : null;
10030
+ this._minDate = this._minDateStr ? cleanDate$2(this._minDateStr) : null;
10031
+ this._maxDate = this._maxDateStr ? cleanDate$2(this._maxDateStr) : null;
10032
10032
  }
10033
10033
  get headerText() {
10034
10034
  switch (this.view) {
@@ -10639,6 +10639,48 @@ const timeModelConstant$1 = {
10639
10639
  invalid: true
10640
10640
  };
10641
10641
 
10642
+ var Timezone;
10643
+ (function (Timezone) {
10644
+ Timezone[Timezone["default"] = 0] = "default";
10645
+ Timezone[Timezone["Europe/Moscow"] = 3] = "Europe/Moscow";
10646
+ Timezone[Timezone["America/New_York"] = -5] = "America/New_York";
10647
+ })(Timezone || (Timezone = {}));
10648
+
10649
+ const dateModelValueParse = (value, timezone) => {
10650
+ dayjs.extend(utc);
10651
+ dayjs.extend(tz);
10652
+ const date = timezone === 'default' ? dayjs(value) : dayjs.utc(value).utcOffset(Timezone[timezone]);
10653
+ const day = date.date();
10654
+ const month = date.month() + 1;
10655
+ const year = date.year();
10656
+ const formattedDay = String(day).length === 2 ? String(day) : String('0' + day);
10657
+ const formattedMonth = String(month).length === 2 ? String(month) : String('0' + month);
10658
+ const dateString = `${String(year)}.${String(formattedMonth)}.${String(formattedDay)}`;
10659
+ return {
10660
+ view: dayjs(dateString).format('DD.MM.YYYY'),
10661
+ day: formattedDay,
10662
+ month: formattedMonth,
10663
+ year: String(year),
10664
+ invalid: !(dayjs(dateString).isValid() && dateString.length === 10)
10665
+ };
10666
+ };
10667
+ const timeModelValueParse$1 = (value, timezone) => {
10668
+ dayjs.extend(utc);
10669
+ dayjs.extend(tz);
10670
+ const date = timezone === 'default' ? dayjs(value) : dayjs.utc(value).utcOffset(Timezone[timezone]);
10671
+ const hour = date.hour();
10672
+ const minute = date.minute();
10673
+ const formattedHour = String(hour).length === 2 ? String(hour) : String('0' + hour);
10674
+ const formattedMinute = String(minute).length === 2 ? String(minute) : String('0' + minute);
10675
+ const timeString = `${formattedHour}:${formattedMinute}`;
10676
+ return {
10677
+ view: timeString,
10678
+ hour: formattedHour,
10679
+ minute: formattedMinute,
10680
+ invalid: timeString.length !== 5
10681
+ };
10682
+ };
10683
+
10642
10684
  const markPosition$1 = (start, end, pattern = 'date') => {
10643
10685
  if (start) {
10644
10686
  if (start === 1) {
@@ -10662,25 +10704,26 @@ const markPosition$1 = (start, end, pattern = 'date') => {
10662
10704
  }
10663
10705
  };
10664
10706
 
10665
- var Timezone;
10666
- (function (Timezone) {
10667
- Timezone[Timezone["default"] = 0] = "default";
10668
- Timezone[Timezone["Europe/Moscow"] = 3] = "Europe/Moscow";
10669
- Timezone[Timezone["America/New_York"] = -5] = "America/New_York";
10670
- })(Timezone || (Timezone = {}));
10707
+ const cleanDate$1 = (value) => {
10708
+ return dayjs(value).second(0).millisecond(0).toISOString();
10709
+ };
10671
10710
 
10672
10711
  dayjs.extend(utc);
10673
- dayjs.extend(timezone);
10712
+ dayjs.extend(tz);
10674
10713
  const formattingToMoscowTimezone = (date, tz) => {
10675
10714
  return dayjs.utc(date).utcOffset(Timezone[tz], tz !== 'default').toISOString();
10676
10715
  };
10677
10716
  const formattingFromMoscowTimezone = (date, tz) => {
10678
- if (!date)
10679
- return '';
10680
- // Мы хотим получить объект Date, у которого локальные часы/минуты
10681
- // будут такие же, как в Москве.
10682
- const moscowDate = dayjs(date).tz('Europe/Moscow');
10683
- return new Date(moscowDate.year(), moscowDate.month(), moscowDate.date(), moscowDate.hour(), moscowDate.minute()).toISOString();
10717
+ const utcTime = dayjs.utc(date);
10718
+ const moscowOffsetMinutes = dayjs().tz('Europe/Moscow').utcOffset();
10719
+ const localOffsetMinutes = dayjs().utcOffset();
10720
+ const offsetDifferenceMinutes = localOffsetMinutes - moscowOffsetMinutes;
10721
+ if (offsetDifferenceMinutes >= 0) {
10722
+ return utcTime.subtract(offsetDifferenceMinutes, 'minute').toISOString();
10723
+ }
10724
+ else {
10725
+ return utcTime.add(Math.abs(offsetDifferenceMinutes), 'minute').toISOString();
10726
+ }
10684
10727
  };
10685
10728
 
10686
10729
  const formattingFromModels = (dateModel, timeModel, timepicker) => {
@@ -10693,7 +10736,7 @@ const formattingFromModels = (dateModel, timeModel, timepicker) => {
10693
10736
  };
10694
10737
 
10695
10738
  dayjs.extend(utc);
10696
- dayjs.extend(timezone);
10739
+ dayjs.extend(tz);
10697
10740
  class InputDateTimeComponent {
10698
10741
  constructor() {
10699
10742
  this.value = '';
@@ -10788,23 +10831,19 @@ class InputDateTimeComponent {
10788
10831
  done();
10789
10832
  };
10790
10833
  },
10791
- onSelect: ({ date, formattedDate }) => {
10834
+ onSelect: ({ date, formattedDate, datepicker }) => {
10792
10835
  if (date instanceof Date && typeof formattedDate === 'string') {
10793
- // Вместо использования объекта date, который "кривой" из-за +8
10794
- // Мы берем строку formattedDate (она dd.mm.yyyy hh:mm)
10795
- // и парсим её как московскую
10796
10836
  this.dateModel = validateDateModel(formattedDate);
10797
10837
  this.timeModel = validateTimeModel$1(formattedDate);
10798
10838
  this._checkExtraTime();
10799
10839
  if (this.isValidModels) {
10800
- // Важно: создаем ISO строку, принудительно считая,
10801
- // что выбранные цифры — это Москва
10802
- const manualIso = dayjs(`${this.dateModel.year}-${this.dateModel.month}-${this.dateModel.day}T${this.timeModel.hour}:${this.timeModel.minute}:00`)
10803
- .format('YYYY-MM-DDTHH:mm:ss') + '+03:00';
10804
- this.updateValue(manualIso);
10840
+ this.updateValueModel(this.dateModel, this.timeModel);
10805
10841
  }
10806
10842
  }
10807
- }
10843
+ else if (typeof formattedDate === 'object') {
10844
+ this.updateValuesArray(date);
10845
+ }
10846
+ },
10808
10847
  });
10809
10848
  }
10810
10849
  ngOnChanges(changes) {
@@ -10981,29 +11020,25 @@ class InputDateTimeComponent {
10981
11020
  }
10982
11021
  }
10983
11022
  writeValue(outsideValue) {
10984
- if (outsideValue && typeof outsideValue === 'string') {
10985
- this.value = outsideValue;
10986
- // Переводим UTC в Московское время
10987
- const moscowTime = dayjs(outsideValue).tz('Europe/Moscow');
10988
- // Заполняем модели для инпута
10989
- this.dateModel = {
10990
- view: moscowTime.format('DD.MM.YYYY'),
10991
- day: moscowTime.format('DD'),
10992
- month: moscowTime.format('MM'),
10993
- year: moscowTime.format('YYYY'),
10994
- invalid: false
10995
- };
10996
- this.timeModel = {
10997
- view: moscowTime.format('HH:mm'),
10998
- hour: moscowTime.format('HH'),
10999
- minute: moscowTime.format('mm'),
11000
- invalid: false
11001
- };
11002
- // Чтобы календарь выделил правильную дату, даем ему объект Date
11003
- // с "московскими" часами в локальном исполнении
11004
- const fakeLocalDate = new Date(moscowTime.year(), moscowTime.month(), moscowTime.date(), moscowTime.hour(), moscowTime.minute());
11005
- this.dt.selectDate(fakeLocalDate, { silent: true });
11006
- this.dt.setViewDate(fakeLocalDate);
11023
+ if (outsideValue) {
11024
+ if (typeof outsideValue === 'string') {
11025
+ this.value = cleanDate$1(outsideValue);
11026
+ this.dateModel = dateModelValueParse(outsideValue, this.timezone);
11027
+ this.timeModel = timeModelValueParse$1(outsideValue, this.timezone);
11028
+ this.checkingInvalid(outsideValue, this.maxDate, this.minDate);
11029
+ this.dt.selectDate(formattingFromModels(this.dateModel, this.timeModel, this.timepicker).toISOString(), {
11030
+ updateTime: this.timepicker,
11031
+ silent: true
11032
+ });
11033
+ this.dt.setViewDate(formattingFromModels(this.dateModel, this.timeModel, this.timepicker).toISOString());
11034
+ }
11035
+ else if (typeof outsideValue === 'object') {
11036
+ this.value = outsideValue.map(date => cleanDate$1(date));
11037
+ this.dt.selectDate(this.value, {
11038
+ updateTime: this.timepicker,
11039
+ silent: true
11040
+ });
11041
+ }
11007
11042
  }
11008
11043
  else {
11009
11044
  if (this.dt) {
@@ -16715,13 +16750,13 @@ const sliceDate = (date, formatDate, formatTime) => {
16715
16750
  return { year, month: formatMonth, day, hour, minute, second };
16716
16751
  };
16717
16752
 
16718
- const formattingIsoToString = (value, timezone$1 = 'default', time = true, format) => {
16753
+ const formattingIsoToString = (value, timezone = 'default', time = true, format) => {
16719
16754
  dayjs.extend(utc);
16720
- dayjs.extend(timezone);
16755
+ dayjs.extend(tz);
16721
16756
  const defaultFormat = time ? 'DD.MM.YYYY HH:mm' : 'DD.MM.YYYY';
16722
- return timezone$1 === 'default' ?
16757
+ return timezone === 'default' ?
16723
16758
  dayjs(value.toString()).format(format || defaultFormat) :
16724
- dayjs.utc(value.toString()).utcOffset(Timezone$1[timezone$1]).format(format || defaultFormat);
16759
+ dayjs.utc(value.toString()).utcOffset(Timezone$1[timezone]).format(format || defaultFormat);
16725
16760
  };
16726
16761
 
16727
16762
  const dateTimeFormat = (date, config) => {