@seniorsistemas/components-ai 2.4.0 → 2.4.1

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.
@@ -1,6 +1,6 @@
1
1
  import { Component, ViewChild } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
- import { ReactiveFormsModule, FormsModule } from '@angular/forms';
3
+ import { FormsModule } from '@angular/forms';
4
4
  import { InputMaskModule } from 'primeng/inputmask';
5
5
  import { CalendarModule } from 'primeng/calendar';
6
6
  import { ButtonModule } from 'primeng/button';
@@ -9,86 +9,197 @@ import { DynamicFieldWrapperComponent } from './dynamic-field-wrapper.component'
9
9
  import { DynamicFieldBaseComponent } from './dynamic-field-base.component';
10
10
  import * as i0 from "@angular/core";
11
11
  import * as i1 from "../../../services/translation.service";
12
- import * as i2 from "@angular/forms";
13
- import * as i3 from "primeng/inputmask";
14
- import * as i4 from "primeng/calendar";
15
- import * as i5 from "primeng/button";
16
- import * as i6 from "primeng/tooltip";
12
+ import * as i2 from "@angular/common";
13
+ import * as i3 from "@angular/forms";
14
+ import * as i4 from "primeng/inputmask";
15
+ import * as i5 from "primeng/calendar";
16
+ import * as i6 from "primeng/button";
17
+ import * as i7 from "primeng/tooltip";
18
+ /**
19
+ * DynamicFieldTimeComponent
20
+ *
21
+ * O FormControl.value armazena o horário no formato "HH:mm" (ex: "14:30").
22
+ * A variável `displayValue` mantém o valor formatado para exibição no input.
23
+ * Aceita valores de entrada em "HH:mm" ou "HH:mm:ss" (truncando os segundos).
24
+ */
17
25
  export class DynamicFieldTimeComponent extends DynamicFieldBaseComponent {
18
26
  timePicker;
19
- timeValue = null;
27
+ /** Valor de exibição "HH:mm" */
28
+ displayValue = null;
29
+ /** Valor do picker (Date) */
30
+ pickerValue = null;
31
+ /** Controla a renderização do p-calendar */
32
+ showPicker = false;
20
33
  valueSub;
34
+ updatingFromControl = false;
21
35
  constructor(translationService) {
22
36
  super(translationService);
23
37
  }
24
38
  ngOnInit() {
25
39
  const control = this.form.get(this.field.field);
26
40
  if (control) {
27
- if (control.value instanceof Date) {
28
- control.setValue(this.dateToTimeString(control.value), { emitEvent: false });
29
- }
41
+ this.syncDisplayFromControl(control.value);
30
42
  this.valueSub = control.valueChanges.subscribe(value => {
31
- if (value instanceof Date) {
32
- control.setValue(this.dateToTimeString(value), { emitEvent: false });
43
+ if (this.updatingFromControl) {
44
+ return;
33
45
  }
46
+ this.syncDisplayFromControl(value);
34
47
  });
35
48
  }
36
49
  }
37
50
  ngOnDestroy() {
38
51
  this.valueSub?.unsubscribe();
39
52
  }
53
+ /**
54
+ * Sincroniza o displayValue a partir do valor do FormControl.
55
+ * Aceita: "HH:mm", "HH:mm:ss", Date, ou null.
56
+ */
57
+ syncDisplayFromControl(value) {
58
+ if (!value) {
59
+ this.displayValue = null;
60
+ return;
61
+ }
62
+ if (value instanceof Date) {
63
+ const timeStr = this.dateToTimeString(value);
64
+ this.setControlValue(timeStr);
65
+ this.displayValue = timeStr;
66
+ return;
67
+ }
68
+ const s = String(value);
69
+ // "HH:mm:ss" → truncar para "HH:mm"
70
+ if (s.match(/^\d{2}:\d{2}:\d{2}$/)) {
71
+ const short = s.substring(0, 5);
72
+ this.displayValue = short;
73
+ this.setControlValue(short);
74
+ return;
75
+ }
76
+ // "HH:mm" → usar direto
77
+ if (s.match(/^\d{2}:\d{2}$/)) {
78
+ this.displayValue = s;
79
+ return;
80
+ }
81
+ // Valor incompleto
82
+ this.displayValue = null;
83
+ }
84
+ /** Chamado quando o usuário completa a digitação da máscara */
85
+ onDisplayValueComplete() {
86
+ this.syncControlFromDisplay();
87
+ }
88
+ /** Chamado quando o input perde foco */
89
+ onDisplayValueBlur() {
90
+ this.syncControlFromDisplay();
91
+ }
92
+ /** Converte o displayValue para o FormControl */
93
+ syncControlFromDisplay() {
94
+ const control = this.form.get(this.field.field);
95
+ if (!control) {
96
+ return;
97
+ }
98
+ if (!this.displayValue || this.displayValue.includes('_')) {
99
+ this.setControlValue(null);
100
+ control.markAsDirty();
101
+ return;
102
+ }
103
+ // Validar HH:mm
104
+ if (this.isValidTime(this.displayValue)) {
105
+ this.setControlValue(this.displayValue);
106
+ control.markAsDirty();
107
+ }
108
+ }
109
+ /** Seta o valor no control sem disparar o subscriber interno */
110
+ setControlValue(value) {
111
+ const control = this.form.get(this.field.field);
112
+ if (!control) {
113
+ return;
114
+ }
115
+ this.updatingFromControl = true;
116
+ control.setValue(value, { emitEvent: true });
117
+ this.updatingFromControl = false;
118
+ }
119
+ // ==================== CONVERSÕES ====================
40
120
  dateToTimeString(date) {
41
121
  return `${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}`;
42
122
  }
43
- stringToDate(value) {
44
- if (!value || value.includes('_'))
123
+ timeStringToDate(value) {
124
+ if (!value || value.includes('_')) {
45
125
  return null;
126
+ }
46
127
  const parts = value.split(':');
47
- if (parts.length !== 2)
128
+ if (parts.length < 2) {
48
129
  return null;
130
+ }
49
131
  const hours = parseInt(parts[0], 10);
50
132
  const minutes = parseInt(parts[1], 10);
51
- if (isNaN(hours) || isNaN(minutes) || hours < 0 || hours > 23 || minutes < 0 || minutes > 59)
133
+ if (isNaN(hours) || isNaN(minutes) || hours < 0 || hours > 23 || minutes < 0 || minutes > 59) {
52
134
  return null;
135
+ }
53
136
  const d = new Date();
54
137
  d.setHours(hours, minutes, 0, 0);
55
138
  return d;
56
139
  }
140
+ isValidTime(value) {
141
+ const parts = value.split(':');
142
+ if (parts.length !== 2) {
143
+ return false;
144
+ }
145
+ const h = parseInt(parts[0], 10);
146
+ const m = parseInt(parts[1], 10);
147
+ return !isNaN(h) && !isNaN(m) && h >= 0 && h <= 23 && m >= 0 && m <= 59;
148
+ }
149
+ // ==================== TIME PICKER ====================
57
150
  toggleTimePicker(event) {
58
151
  event.stopPropagation();
59
- const control = this.form.get(this.field.field);
60
- this.timeValue = control?.value ? this.stringToDate(control.value) : new Date();
152
+ if (this.displayValue && !this.displayValue.includes('_')) {
153
+ this.pickerValue = this.timeStringToDate(this.displayValue);
154
+ }
155
+ else {
156
+ this.pickerValue = new Date();
157
+ }
158
+ this.showPicker = true;
61
159
  setTimeout(() => {
62
- if (this.timePicker) {
63
- this.timePicker.showOverlay();
160
+ if (this.timePicker && this.timePicker.inputfieldViewChild) {
161
+ this.timePicker.inputfieldViewChild.nativeElement.click();
64
162
  }
65
163
  });
66
164
  }
67
165
  onTimeSelect(date) {
68
- const control = this.form.get(this.field.field);
69
- if (control && date) {
70
- control.setValue(this.dateToTimeString(date));
71
- control.markAsDirty();
166
+ if (date) {
167
+ const timeStr = this.dateToTimeString(date);
168
+ this.displayValue = timeStr;
169
+ this.setControlValue(timeStr);
170
+ const control = this.form.get(this.field.field);
171
+ if (control) {
172
+ control.markAsDirty();
173
+ }
72
174
  }
73
175
  }
176
+ isControlDisabled() {
177
+ const control = this.form.get(this.field.field);
178
+ return control ? control.disabled : false;
179
+ }
74
180
  getPlaceholder() {
75
181
  return this.field.placeholder || 'HH:mm';
76
182
  }
77
183
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DynamicFieldTimeComponent, deps: [{ token: i1.TranslationService }], target: i0.ɵɵFactoryTarget.Component });
78
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DynamicFieldTimeComponent, isStandalone: true, selector: "sia-dynamic-field-time", viewQueries: [{ propertyName: "timePicker", first: true, predicate: ["timePicker"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
184
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DynamicFieldTimeComponent, isStandalone: true, selector: "sia-dynamic-field-time", host: { styleAttribute: "display: block; width: 100%;" }, viewQueries: [{ propertyName: "timePicker", first: true, predicate: ["timePicker"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
79
185
  <sia-dynamic-field-wrapper [field]="field" [form]="form" [mode]="mode">
80
- <div [formGroup]="form" class="time-field">
186
+ <div class="time-field">
81
187
  <div class="time-input-group">
82
188
  <p-inputmask
83
189
  [inputId]="field.field"
84
- [formControlName]="field.field"
190
+ [(ngModel)]="displayValue"
191
+ [ngModelOptions]="{standalone: true}"
85
192
  mask="99:99"
86
193
  [placeholder]="getPlaceholder()"
87
194
  slotChar="_"
88
195
  [autoClear]="false"
89
- styleClass="time-input"
196
+ styleClass="time-input w-full"
197
+ [style]="{'width': '100%', 'display': 'block'}"
90
198
  [class.ng-invalid]="isFieldInvalid()"
91
- [class.ng-dirty]="isFieldDirty()">
199
+ [class.ng-dirty]="isFieldDirty()"
200
+ [disabled]="isControlDisabled()"
201
+ (onComplete)="onDisplayValueComplete()"
202
+ (onBlur)="onDisplayValueBlur()">
92
203
  </p-inputmask>
93
204
  <div class="time-buttons">
94
205
  <p-button
@@ -102,28 +213,31 @@ export class DynamicFieldTimeComponent extends DynamicFieldBaseComponent {
102
213
  size="small">
103
214
  </p-button>
104
215
  </div>
216
+ <p-calendar
217
+ *ngIf="showPicker"
218
+ #timePicker
219
+ [(ngModel)]="pickerValue"
220
+ [ngModelOptions]="{standalone: true}"
221
+ [timeOnly]="true"
222
+ [showSeconds]="false"
223
+ [hourFormat]="'24'"
224
+ [appendTo]="'body'"
225
+ [inline]="false"
226
+ [showIcon]="false"
227
+ (onSelect)="onTimeSelect($event)"
228
+ (onHide)="showPicker = false"
229
+ styleClass="hidden-calendar-input"
230
+ [style]="{'position': 'absolute', 'width': '0', 'height': '0', 'overflow': 'hidden', 'opacity': '0', 'pointer-events': 'none'}">
231
+ </p-calendar>
105
232
  </div>
106
- <p-calendar
107
- #timePicker
108
- [(ngModel)]="timeValue"
109
- [timeOnly]="true"
110
- [showSeconds]="false"
111
- [hourFormat]="'24'"
112
- [appendTo]="'body'"
113
- [inline]="false"
114
- [showIcon]="false"
115
- (onSelect)="onTimeSelect($event)"
116
- styleClass="hidden-calendar-input">
117
- </p-calendar>
118
233
  </div>
119
234
  </sia-dynamic-field-wrapper>
120
- `, isInline: true, styles: [".time-field{width:100%;position:relative}.time-input-group{position:relative;width:100%;::ng-deep p-inputmask{width:100%;display:block;input{width:100%;padding-right:2.5rem}}.time-buttons{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:flex;gap:2px;z-index:10}::ng-deep .p-button{width:2rem!important;height:2rem!important;min-width:2rem!important;min-height:2rem!important;padding:0!important;margin:0!important;display:flex!important;align-items:center!important;justify-content:center!important;box-sizing:border-box!important;.p-button-icon{margin:0!important;font-size:.875rem!important}.p-button-label{display:none!important}}}::ng-deep .hidden-calendar-input{position:absolute;width:0;height:0;overflow:hidden;opacity:0;pointer-events:none;input{width:0;height:0;padding:0;border:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: InputMaskModule }, { kind: "component", type: i3.InputMask, selector: "p-inputmask, p-inputMask, p-input-mask", inputs: ["type", "slotChar", "autoClear", "showClear", "style", "inputId", "styleClass", "placeholder", "size", "maxlength", "tabindex", "title", "variant", "ariaLabel", "ariaLabelledBy", "ariaRequired", "disabled", "readonly", "unmask", "name", "required", "characterPattern", "autofocus", "autoFocus", "autocomplete", "keepBuffer", "mask"], outputs: ["onComplete", "onFocus", "onBlur", "onInput", "onKeydown", "onClear"] }, { kind: "ngmodule", type: CalendarModule }, { kind: "component", type: i4.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "fluid", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i5.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: DynamicFieldWrapperComponent, selector: "sia-dynamic-field-wrapper", inputs: ["field", "form", "mode"] }] });
235
+ `, isInline: true, styles: [".time-field{width:100%;position:relative}.time-input-group{position:relative;width:100%;::ng-deep p-inputmask{width:100%;display:block;input{width:100%;padding-right:2.5rem}}.time-buttons{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:flex;gap:2px;z-index:10}::ng-deep .p-button{width:2rem!important;height:2rem!important;min-width:2rem!important;min-height:2rem!important;padding:0!important;margin:0!important;display:flex!important;align-items:center!important;justify-content:center!important;box-sizing:border-box!important;.p-button-icon{margin:0!important;font-size:.875rem!important}.p-button-label{display:none!important}}}.hidden-calendar-input,::ng-deep .hidden-calendar-input{position:absolute!important;width:0!important;height:0!important;overflow:hidden!important;opacity:0!important;pointer-events:none!important;margin:0!important;padding:0!important;border:none!important;top:0;left:0;input{width:0!important;height:0!important;padding:0!important;border:none!important}}>p-calendar{position:absolute!important;width:0!important;height:0!important;overflow:hidden!important;pointer-events:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: InputMaskModule }, { kind: "component", type: i4.InputMask, selector: "p-inputmask, p-inputMask, p-input-mask", inputs: ["type", "slotChar", "autoClear", "showClear", "style", "inputId", "styleClass", "placeholder", "size", "maxlength", "tabindex", "title", "variant", "ariaLabel", "ariaLabelledBy", "ariaRequired", "disabled", "readonly", "unmask", "name", "required", "characterPattern", "autofocus", "autoFocus", "autocomplete", "keepBuffer", "mask"], outputs: ["onComplete", "onFocus", "onBlur", "onInput", "onKeydown", "onClear"] }, { kind: "ngmodule", type: CalendarModule }, { kind: "component", type: i5.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "fluid", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i6.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: DynamicFieldWrapperComponent, selector: "sia-dynamic-field-wrapper", inputs: ["field", "form", "mode"] }] });
121
236
  }
122
237
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DynamicFieldTimeComponent, decorators: [{
123
238
  type: Component,
124
- args: [{ selector: 'sia-dynamic-field-time', standalone: true, imports: [
239
+ args: [{ selector: 'sia-dynamic-field-time', standalone: true, host: { style: 'display: block; width: 100%;' }, imports: [
125
240
  CommonModule,
126
- ReactiveFormsModule,
127
241
  FormsModule,
128
242
  InputMaskModule,
129
243
  CalendarModule,
@@ -132,18 +246,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
132
246
  DynamicFieldWrapperComponent
133
247
  ], template: `
134
248
  <sia-dynamic-field-wrapper [field]="field" [form]="form" [mode]="mode">
135
- <div [formGroup]="form" class="time-field">
249
+ <div class="time-field">
136
250
  <div class="time-input-group">
137
251
  <p-inputmask
138
252
  [inputId]="field.field"
139
- [formControlName]="field.field"
253
+ [(ngModel)]="displayValue"
254
+ [ngModelOptions]="{standalone: true}"
140
255
  mask="99:99"
141
256
  [placeholder]="getPlaceholder()"
142
257
  slotChar="_"
143
258
  [autoClear]="false"
144
- styleClass="time-input"
259
+ styleClass="time-input w-full"
260
+ [style]="{'width': '100%', 'display': 'block'}"
145
261
  [class.ng-invalid]="isFieldInvalid()"
146
- [class.ng-dirty]="isFieldDirty()">
262
+ [class.ng-dirty]="isFieldDirty()"
263
+ [disabled]="isControlDisabled()"
264
+ (onComplete)="onDisplayValueComplete()"
265
+ (onBlur)="onDisplayValueBlur()">
147
266
  </p-inputmask>
148
267
  <div class="time-buttons">
149
268
  <p-button
@@ -157,24 +276,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
157
276
  size="small">
158
277
  </p-button>
159
278
  </div>
279
+ <p-calendar
280
+ *ngIf="showPicker"
281
+ #timePicker
282
+ [(ngModel)]="pickerValue"
283
+ [ngModelOptions]="{standalone: true}"
284
+ [timeOnly]="true"
285
+ [showSeconds]="false"
286
+ [hourFormat]="'24'"
287
+ [appendTo]="'body'"
288
+ [inline]="false"
289
+ [showIcon]="false"
290
+ (onSelect)="onTimeSelect($event)"
291
+ (onHide)="showPicker = false"
292
+ styleClass="hidden-calendar-input"
293
+ [style]="{'position': 'absolute', 'width': '0', 'height': '0', 'overflow': 'hidden', 'opacity': '0', 'pointer-events': 'none'}">
294
+ </p-calendar>
160
295
  </div>
161
- <p-calendar
162
- #timePicker
163
- [(ngModel)]="timeValue"
164
- [timeOnly]="true"
165
- [showSeconds]="false"
166
- [hourFormat]="'24'"
167
- [appendTo]="'body'"
168
- [inline]="false"
169
- [showIcon]="false"
170
- (onSelect)="onTimeSelect($event)"
171
- styleClass="hidden-calendar-input">
172
- </p-calendar>
173
296
  </div>
174
297
  </sia-dynamic-field-wrapper>
175
- `, styles: [".time-field{width:100%;position:relative}.time-input-group{position:relative;width:100%;::ng-deep p-inputmask{width:100%;display:block;input{width:100%;padding-right:2.5rem}}.time-buttons{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:flex;gap:2px;z-index:10}::ng-deep .p-button{width:2rem!important;height:2rem!important;min-width:2rem!important;min-height:2rem!important;padding:0!important;margin:0!important;display:flex!important;align-items:center!important;justify-content:center!important;box-sizing:border-box!important;.p-button-icon{margin:0!important;font-size:.875rem!important}.p-button-label{display:none!important}}}::ng-deep .hidden-calendar-input{position:absolute;width:0;height:0;overflow:hidden;opacity:0;pointer-events:none;input{width:0;height:0;padding:0;border:none}}\n"] }]
298
+ `, styles: [".time-field{width:100%;position:relative}.time-input-group{position:relative;width:100%;::ng-deep p-inputmask{width:100%;display:block;input{width:100%;padding-right:2.5rem}}.time-buttons{position:absolute;right:4px;top:50%;transform:translateY(-50%);display:flex;gap:2px;z-index:10}::ng-deep .p-button{width:2rem!important;height:2rem!important;min-width:2rem!important;min-height:2rem!important;padding:0!important;margin:0!important;display:flex!important;align-items:center!important;justify-content:center!important;box-sizing:border-box!important;.p-button-icon{margin:0!important;font-size:.875rem!important}.p-button-label{display:none!important}}}.hidden-calendar-input,::ng-deep .hidden-calendar-input{position:absolute!important;width:0!important;height:0!important;overflow:hidden!important;opacity:0!important;pointer-events:none!important;margin:0!important;padding:0!important;border:none!important;top:0;left:0;input{width:0!important;height:0!important;padding:0!important;border:none!important}}>p-calendar{position:absolute!important;width:0!important;height:0!important;overflow:hidden!important;pointer-events:none!important}\n"] }]
176
299
  }], ctorParameters: () => [{ type: i1.TranslationService }], propDecorators: { timePicker: [{
177
300
  type: ViewChild,
178
301
  args: ['timePicker']
179
302
  }] } });
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZC10aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMtYWkvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9maWVsZHMvZHluYW1pYy1maWVsZC10aW1lLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBWSxNQUFNLGtCQUFrQixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHaEQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDakYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7O0FBZ0kzRSxNQUFNLE9BQU8seUJBQTBCLFNBQVEseUJBQXlCO0lBQzdDLFVBQVUsQ0FBWTtJQUUvQyxTQUFTLEdBQWdCLElBQUksQ0FBQztJQUN0QixRQUFRLENBQWdCO0lBRWhDLFlBQVksa0JBQXNDO1FBQ2hELEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxRQUFRO1FBQ04sTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxJQUFJ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QU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDOUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0lBRVEsY0FBYztRQUNyQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQztJQUMzQyxDQUFDO3dHQWxFVSx5QkFBeUI7NEZBQXpCLHlCQUF5QixtTkFqSDFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ1QsMjNCQW5EQyxZQUFZLDhCQUNaLG1CQUFtQixtbEJBQ25CLFdBQVcsc1BBQ1gsZUFBZSxxaUJBQ2YsY0FBYyxpekNBQ2QsWUFBWSxpYkFDWixhQUFhLHNYQUNiLDRCQUE0Qjs7NEZBbUhuQix5QkFBeUI7a0JBOUhyQyxTQUFTOytCQUNFLHdCQUF3QixjQUN0QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osYUFBYTt3QkFDYiw0QkFBNEI7cUJBQzdCLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBDVDt1RkF3RXdCLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW5wdXRNYXNrTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dG1hc2snO1xuaW1wb3J0IHsgQ2FsZW5kYXJNb2R1bGUsIENhbGVuZGFyIH0gZnJvbSAncHJpbWVuZy9jYWxlbmRhcic7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGRXcmFwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi9keW5hbWljLWZpZWxkLXdyYXBwZXIuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2R5bmFtaWMtZmllbGQtYmFzZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzaWEtZHluYW1pYy1maWVsZC10aW1lJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIElucHV0TWFza01vZHVsZSxcbiAgICBDYWxlbmRhck1vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBEeW5hbWljRmllbGRXcmFwcGVyQ29tcG9uZW50XG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPHNpYS1keW5hbWljLWZpZWxkLXdyYXBwZXIgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFttb2RlXT1cIm1vZGVcIj5cbiAgICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJ0aW1lLWZpZWxkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgPHAtaW5wdXRtYXNrXG4gICAgICAgICAgICBbaW5wdXRJZF09XCJmaWVsZC5maWVsZFwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmZpZWxkXCJcbiAgICAgICAgICAgIG1hc2s9XCI5OTo5OVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZ2V0UGxhY2Vob2xkZXIoKVwiXG4gICAgICAgICAgICBzbG90Q2hhcj1cIl9cIlxuICAgICAgICAgICAgW2F1dG9DbGVhcl09XCJmYWxzZVwiXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwidGltZS1pbnB1dFwiXG4gICAgICAgICAgICBbY2xhc3MubmctaW52YWxpZF09XCJpc0ZpZWxkSW52YWxpZCgpXCJcbiAgICAgICAgICAgIFtjbGFzcy5uZy1kaXJ0eV09XCJpc0ZpZWxkRGlydHkoKVwiPlxuICAgICAgICAgIDwvcC1pbnB1dG1hc2s+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtYnV0dG9uc1wiPlxuICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgIGljb249XCJwaSBwaS1jbG9ja1wiXG4gICAgICAgICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtyb3VuZGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJ0b2dnbGVUaW1lUGlja2VyKCRldmVudClcIlxuICAgICAgICAgICAgICBwVG9vbHRpcD1cIkFicmlyIHNlbGV0b3IgZGUgaG9yYVwiXG4gICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiPlxuICAgICAgICAgICAgPC9wLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxwLWNhbGVuZGFyXG4gICAgICAgICAgI3RpbWVQaWNrZXJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInRpbWVWYWx1ZVwiXG4gICAgICAgICAgW3RpbWVPbmx5XT1cInRydWVcIlxuICAgICAgICAgIFtzaG93U2Vjb25kc109XCJmYWxzZVwiXG4gICAgICAgICAgW2hvdXJGb3JtYXRdPVwiJzI0J1wiXG4gICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgW2lubGluZV09XCJmYWxzZVwiXG4gICAgICAgICAgW3Nob3dJY29uXT1cImZhbHNlXCJcbiAgICAgICAgICAob25TZWxlY3QpPVwib25UaW1lU2VsZWN0KCRldmVudClcIlxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJoaWRkZW4tY2FsZW5kYXItaW5wdXRcIj5cbiAgICAgICAgPC9wLWNhbGVuZGFyPlxuICAgICAgPC9kaXY+XG4gICAgPC9zaWEtZHluYW1pYy1maWVsZC13cmFwcGVyPlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLnRpbWUtZmllbGQge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuXG4gICAgLnRpbWUtaW5wdXQtZ3JvdXAge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgd2lkdGg6IDEwMCU7XG5cbiAgICAgIDo6bmctZGVlcCBwLWlucHV0bWFzayB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcblxuICAgICAgICBpbnB1dCB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogMi41cmVtO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC50aW1lLWJ1dHRvbnMge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHJpZ2h0OiA0cHg7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogMnB4O1xuICAgICAgICB6LWluZGV4OiAxMDtcbiAgICAgIH1cblxuICAgICAgOjpuZy1kZWVwIC5wLWJ1dHRvbiB7XG4gICAgICAgIHdpZHRoOiAycmVtICFpbXBvcnRhbnQ7XG4gICAgICAgIGhlaWdodDogMnJlbSAhaW1wb3J0YW50O1xuICAgICAgICBtaW4td2lkdGg6IDJyZW0gIWltcG9ydGFudDtcbiAgICAgICAgbWluLWhlaWdodDogMnJlbSAhaW1wb3J0YW50O1xuICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICAgICAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50O1xuXG4gICAgICAgIC5wLWJ1dHRvbi1pY29uIHtcbiAgICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICAgICAgICBmb250LXNpemU6IDAuODc1cmVtICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAucC1idXR0b24tbGFiZWwge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIDo6bmctZGVlcCAuaGlkZGVuLWNhbGVuZGFyLWlucHV0IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHdpZHRoOiAwO1xuICAgICAgaGVpZ2h0OiAwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAgICAgaW5wdXQge1xuICAgICAgICB3aWR0aDogMDtcbiAgICAgICAgaGVpZ2h0OiAwO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljRmllbGRUaW1lQ29tcG9uZW50IGV4dGVuZHMgRHluYW1pY0ZpZWxkQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgndGltZVBpY2tlcicpIHRpbWVQaWNrZXIhOiBDYWxlbmRhcjtcbiAgXG4gIHRpbWVWYWx1ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHZhbHVlU3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlKSB7XG4gICAgc3VwZXIodHJhbnNsYXRpb25TZXJ2aWNlKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KHRoaXMuZmllbGQuZmllbGQpO1xuICAgIGlmIChjb250cm9sKSB7XG4gICAgICBpZiAoY29udHJvbC52YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgY29udHJvbC5zZXRWYWx1ZSh0aGlzLmRhdGVUb1RpbWVTdHJpbmcoY29udHJvbC52YWx1ZSksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudmFsdWVTdWIgPSBjb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgY29udHJvbC5zZXRWYWx1ZSh0aGlzLmRhdGVUb1RpbWVTdHJpbmcodmFsdWUpLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVTdWI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGRhdGVUb1RpbWVTdHJpbmcoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke1N0cmluZyhkYXRlLmdldEhvdXJzKCkpLnBhZFN0YXJ0KDIsICcwJyl9OiR7U3RyaW5nKGRhdGUuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ1RvRGF0ZSh2YWx1ZTogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIGlmICghdmFsdWUgfHwgdmFsdWUuaW5jbHVkZXMoJ18nKSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcGFydHMgPSB2YWx1ZS5zcGxpdCgnOicpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDIpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGhvdXJzID0gcGFyc2VJbnQocGFydHNbMF0sIDEwKTtcbiAgICBjb25zdCBtaW51dGVzID0gcGFyc2VJbnQocGFydHNbMV0sIDEwKTtcbiAgICBpZiAoaXNOYU4oaG91cnMpIHx8IGlzTmFOKG1pbnV0ZXMpIHx8IGhvdXJzIDwgMCB8fCBob3VycyA+IDIzIHx8IG1pbnV0ZXMgPCAwIHx8IG1pbnV0ZXMgPiA1OSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgZCA9IG5ldyBEYXRlKCk7XG4gICAgZC5zZXRIb3Vycyhob3VycywgbWludXRlcywgMCwgMCk7XG4gICAgcmV0dXJuIGQ7XG4gIH1cblxuICB0b2dnbGVUaW1lUGlja2VyKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KHRoaXMuZmllbGQuZmllbGQpO1xuICAgIHRoaXMudGltZVZhbHVlID0gY29udHJvbD8udmFsdWUgPyB0aGlzLnN0cmluZ1RvRGF0ZShjb250cm9sLnZhbHVlKSA6IG5ldyBEYXRlKCk7XG4gICAgXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy50aW1lUGlja2VyKSB7XG4gICAgICAgIHRoaXMudGltZVBpY2tlci5zaG93T3ZlcmxheSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25UaW1lU2VsZWN0KGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldCh0aGlzLmZpZWxkLmZpZWxkKTtcbiAgICBpZiAoY29udHJvbCAmJiBkYXRlKSB7XG4gICAgICBjb250cm9sLnNldFZhbHVlKHRoaXMuZGF0ZVRvVGltZVN0cmluZyhkYXRlKSk7XG4gICAgICBjb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZC5wbGFjZWhvbGRlciB8fCAnSEg6bW0nO1xuICB9XG59XG4iXX0=
303
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZC10aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMtYWkvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9maWVsZHMvZHluYW1pYy1maWVsZC10aW1lLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBWSxNQUFNLGtCQUFrQixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHaEQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDakYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7OztBQUUzRTs7Ozs7O0dBTUc7QUFzSkgsTUFBTSxPQUFPLHlCQUEwQixTQUFRLHlCQUF5QjtJQUM3QyxVQUFVLENBQVk7SUFFL0MsZ0NBQWdDO0lBQ2hDLFlBQVksR0FBa0IsSUFBSSxDQUFDO0lBRW5DLDZCQUE2QjtJQUM3QixXQUFXLEdBQWdCLElBQUksQ0FBQztJQUVoQyw0Q0FBNEM7SUFDNUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUVYLFFBQVEsQ0FBZ0I7SUFDeEIsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBRXBDLFlBQVksa0JBQXNDO1FBQ2hELEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxRQUFRO1FBQ04sTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUUzQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNyRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO29CQUFDLE9BQU87Z0JBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssc0JBQXNCLENBQUMsS0FBYztRQUMzQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN6QixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksS0FBSyxZQUFZLElBQUksRUFBRSxDQUFDO1lBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDO1lBQzVCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhCLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsT0FBTztRQUNULENBQUM7UUFFRCx3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7WUFDdEIsT0FBTztRQUNULENBQUM7UUFFRCxtQkFBbUI7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVELCtEQUErRDtJQUMvRCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELGlEQUFpRDtJQUN6QyxzQkFBc0I7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFBQyxPQUFPO1FBQUMsQ0FBQztRQUV6QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RCLE9BQU87UUFDVCxDQUFDO1FBRUQsZ0JBQWdCO1FBQ2hCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN4QyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFRCxnRUFBZ0U7SUFDeEQsZUFBZSxDQUFDLEtBQW9CO1FBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQUMsT0FBTztRQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUNoQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVELHVEQUF1RDtJQUUvQyxnQkFBZ0IsQ0FBQyxJQUFVO1FBQ2pDLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ3JHLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFhO1FBQ3BDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQUMsT0FBTyxJQUFJLENBQUM7UUFBQyxDQUFDO1FBQ25ELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQUMsT0FBTyxJQUFJLENBQUM7UUFBQyxDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksT0FBTyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQUMsT0FBTyxJQUFJLENBQUM7UUFBQyxDQUFDO1FBQzlHLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqQyxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTyxXQUFXLENBQUMsS0FBYTtRQUMvQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUFDLE9BQU8sS0FBSyxDQUFDO1FBQUMsQ0FBQztRQUN6QyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFFLENBQUM7SUFFRCx3REFBd0Q7SUFFeEQsZ0JBQWdCLENBQUMsS0FBWTtRQUMzQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUMzRCxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVU7UUFDckIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQztZQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7WUFBQyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzVDLENBQUM7SUFFUSxjQUFjO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDO0lBQzNDLENBQUM7d0dBMUtVLHlCQUF5Qjs0RkFBekIseUJBQXlCLDZRQXhJMUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1EVCxxc0NBM0RDLFlBQVksa0lBQ1osV0FBVyw4VkFDWCxlQUFlLHFpQkFDZixjQUFjLGl6Q0FDZCxZQUFZLGliQUNaLGFBQWEsc1hBQ2IsNEJBQTRCOzs0RkEwSW5CLHlCQUF5QjtrQkFySnJDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBQ3RCLElBQUksUUFDVixFQUFFLEtBQUssRUFBRSw4QkFBOEIsRUFBRSxXQUN0Qzt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osYUFBYTt3QkFDYiw0QkFBNEI7cUJBQzdCLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1EVDt1RkFzRndCLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW5wdXRNYXNrTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dG1hc2snO1xuaW1wb3J0IHsgQ2FsZW5kYXJNb2R1bGUsIENhbGVuZGFyIH0gZnJvbSAncHJpbWVuZy9jYWxlbmRhcic7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGRXcmFwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi9keW5hbWljLWZpZWxkLXdyYXBwZXIuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2R5bmFtaWMtZmllbGQtYmFzZS5jb21wb25lbnQnO1xuXG4vKipcbiAqIER5bmFtaWNGaWVsZFRpbWVDb21wb25lbnRcbiAqXG4gKiBPIEZvcm1Db250cm9sLnZhbHVlIGFybWF6ZW5hIG8gaG9yw6FyaW8gbm8gZm9ybWF0byBcIkhIOm1tXCIgKGV4OiBcIjE0OjMwXCIpLlxuICogQSB2YXJpw6F2ZWwgYGRpc3BsYXlWYWx1ZWAgbWFudMOpbSBvIHZhbG9yIGZvcm1hdGFkbyBwYXJhIGV4aWJpw6fDo28gbm8gaW5wdXQuXG4gKiBBY2VpdGEgdmFsb3JlcyBkZSBlbnRyYWRhIGVtIFwiSEg6bW1cIiBvdSBcIkhIOm1tOnNzXCIgKHRydW5jYW5kbyBvcyBzZWd1bmRvcykuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NpYS1keW5hbWljLWZpZWxkLXRpbWUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBob3N0OiB7IHN0eWxlOiAnZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMDAlOycgfSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBJbnB1dE1hc2tNb2R1bGUsXG4gICAgQ2FsZW5kYXJNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIFRvb2x0aXBNb2R1bGUsXG4gICAgRHluYW1pY0ZpZWxkV3JhcHBlckNvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxzaWEtZHluYW1pYy1maWVsZC13cmFwcGVyIFtmaWVsZF09XCJmaWVsZFwiIFtmb3JtXT1cImZvcm1cIiBbbW9kZV09XCJtb2RlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGltZS1maWVsZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1pbnB1dC1ncm91cFwiPlxuICAgICAgICAgIDxwLWlucHV0bWFza1xuICAgICAgICAgICAgW2lucHV0SWRdPVwiZmllbGQuZmllbGRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkaXNwbGF5VmFsdWVcIlxuICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXG4gICAgICAgICAgICBtYXNrPVwiOTk6OTlcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImdldFBsYWNlaG9sZGVyKClcIlxuICAgICAgICAgICAgc2xvdENoYXI9XCJfXCJcbiAgICAgICAgICAgIFthdXRvQ2xlYXJdPVwiZmFsc2VcIlxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInRpbWUtaW5wdXQgdy1mdWxsXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJ7J3dpZHRoJzogJzEwMCUnLCAnZGlzcGxheSc6ICdibG9jayd9XCJcbiAgICAgICAgICAgIFtjbGFzcy5uZy1pbnZhbGlkXT1cImlzRmllbGRJbnZhbGlkKClcIlxuICAgICAgICAgICAgW2NsYXNzLm5nLWRpcnR5XT1cImlzRmllbGREaXJ0eSgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0NvbnRyb2xEaXNhYmxlZCgpXCJcbiAgICAgICAgICAgIChvbkNvbXBsZXRlKT1cIm9uRGlzcGxheVZhbHVlQ29tcGxldGUoKVwiXG4gICAgICAgICAgICAob25CbHVyKT1cIm9uRGlzcGxheVZhbHVlQmx1cigpXCI+XG4gICAgICAgICAgPC9wLWlucHV0bWFzaz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1idXR0b25zXCI+XG4gICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWNsb2NrXCJcbiAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cInRvZ2dsZVRpbWVQaWNrZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHBUb29sdGlwPVwiQWJyaXIgc2VsZXRvciBkZSBob3JhXCJcbiAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgICAgICA8L3AtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxwLWNhbGVuZGFyXG4gICAgICAgICAgICAqbmdJZj1cInNob3dQaWNrZXJcIlxuICAgICAgICAgICAgI3RpbWVQaWNrZXJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwicGlja2VyVmFsdWVcIlxuICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXG4gICAgICAgICAgICBbdGltZU9ubHldPVwidHJ1ZVwiXG4gICAgICAgICAgICBbc2hvd1NlY29uZHNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2hvdXJGb3JtYXRdPVwiJzI0J1wiXG4gICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgIFtpbmxpbmVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3Nob3dJY29uXT1cImZhbHNlXCJcbiAgICAgICAgICAgIChvblNlbGVjdCk9XCJvblRpbWVTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAob25IaWRlKT1cInNob3dQaWNrZXIgPSBmYWxzZVwiXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwiaGlkZGVuLWNhbGVuZGFyLWlucHV0XCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJ7J3Bvc2l0aW9uJzogJ2Fic29sdXRlJywgJ3dpZHRoJzogJzAnLCAnaGVpZ2h0JzogJzAnLCAnb3ZlcmZsb3cnOiAnaGlkZGVuJywgJ29wYWNpdHknOiAnMCcsICdwb2ludGVyLWV2ZW50cyc6ICdub25lJ31cIj5cbiAgICAgICAgICA8L3AtY2FsZW5kYXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9zaWEtZHluYW1pYy1maWVsZC13cmFwcGVyPlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLnRpbWUtZmllbGQge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuXG4gICAgLnRpbWUtaW5wdXQtZ3JvdXAge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgd2lkdGg6IDEwMCU7XG5cbiAgICAgIDo6bmctZGVlcCBwLWlucHV0bWFzayB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcblxuICAgICAgICBpbnB1dCB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogMi41cmVtO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC50aW1lLWJ1dHRvbnMge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHJpZ2h0OiA0cHg7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogMnB4O1xuICAgICAgICB6LWluZGV4OiAxMDtcbiAgICAgIH1cblxuICAgICAgOjpuZy1kZWVwIC5wLWJ1dHRvbiB7XG4gICAgICAgIHdpZHRoOiAycmVtICFpbXBvcnRhbnQ7XG4gICAgICAgIGhlaWdodDogMnJlbSAhaW1wb3J0YW50O1xuICAgICAgICBtaW4td2lkdGg6IDJyZW0gIWltcG9ydGFudDtcbiAgICAgICAgbWluLWhlaWdodDogMnJlbSAhaW1wb3J0YW50O1xuICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICAgICAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50O1xuXG4gICAgICAgIC5wLWJ1dHRvbi1pY29uIHtcbiAgICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICAgICAgICBmb250LXNpemU6IDAuODc1cmVtICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAucC1idXR0b24tbGFiZWwge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5oaWRkZW4tY2FsZW5kYXItaW5wdXQsXG4gICAgOjpuZy1kZWVwIC5oaWRkZW4tY2FsZW5kYXItaW5wdXQge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gICAgICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICAgICAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG4gICAgICBvcGFjaXR5OiAwICFpbXBvcnRhbnQ7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7XG5cbiAgICAgIGlucHV0IHtcbiAgICAgICAgd2lkdGg6IDAgIWltcG9ydGFudDtcbiAgICAgICAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgPiBwLWNhbGVuZGFyIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xuICAgICAgd2lkdGg6IDAgIWltcG9ydGFudDtcbiAgICAgIGhlaWdodDogMCAhaW1wb3J0YW50O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNGaWVsZFRpbWVDb21wb25lbnQgZXh0ZW5kcyBEeW5hbWljRmllbGRCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCd0aW1lUGlja2VyJykgdGltZVBpY2tlciE6IENhbGVuZGFyO1xuXG4gIC8qKiBWYWxvciBkZSBleGliacOnw6NvIFwiSEg6bW1cIiAqL1xuICBkaXNwbGF5VmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBWYWxvciBkbyBwaWNrZXIgKERhdGUpICovXG4gIHBpY2tlclZhbHVlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIENvbnRyb2xhIGEgcmVuZGVyaXphw6fDo28gZG8gcC1jYWxlbmRhciAqL1xuICBzaG93UGlja2VyID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSB2YWx1ZVN1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB1cGRhdGluZ0Zyb21Db250cm9sID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IodHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UpIHtcbiAgICBzdXBlcih0cmFuc2xhdGlvblNlcnZpY2UpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQodGhpcy5maWVsZC5maWVsZCk7XG4gICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgIHRoaXMuc3luY0Rpc3BsYXlGcm9tQ29udHJvbChjb250cm9sLnZhbHVlKTtcblxuICAgICAgdGhpcy52YWx1ZVN1YiA9IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnVwZGF0aW5nRnJvbUNvbnRyb2wpIHsgcmV0dXJuOyB9XG4gICAgICAgIHRoaXMuc3luY0Rpc3BsYXlGcm9tQ29udHJvbCh2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlU3ViPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpbmNyb25pemEgbyBkaXNwbGF5VmFsdWUgYSBwYXJ0aXIgZG8gdmFsb3IgZG8gRm9ybUNvbnRyb2wuXG4gICAqIEFjZWl0YTogXCJISDptbVwiLCBcIkhIOm1tOnNzXCIsIERhdGUsIG91IG51bGwuXG4gICAqL1xuICBwcml2YXRlIHN5bmNEaXNwbGF5RnJvbUNvbnRyb2wodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgY29uc3QgdGltZVN0ciA9IHRoaXMuZGF0ZVRvVGltZVN0cmluZyh2YWx1ZSk7XG4gICAgICB0aGlzLnNldENvbnRyb2xWYWx1ZSh0aW1lU3RyKTtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGltZVN0cjtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzID0gU3RyaW5nKHZhbHVlKTtcblxuICAgIC8vIFwiSEg6bW06c3NcIiDihpIgdHJ1bmNhciBwYXJhIFwiSEg6bW1cIlxuICAgIGlmIChzLm1hdGNoKC9eXFxkezJ9OlxcZHsyfTpcXGR7Mn0kLykpIHtcbiAgICAgIGNvbnN0IHNob3J0ID0gcy5zdWJzdHJpbmcoMCwgNSk7XG4gICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHNob3J0O1xuICAgICAgdGhpcy5zZXRDb250cm9sVmFsdWUoc2hvcnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFwiSEg6bW1cIiDihpIgdXNhciBkaXJldG9cbiAgICBpZiAocy5tYXRjaCgvXlxcZHsyfTpcXGR7Mn0kLykpIHtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gcztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWYWxvciBpbmNvbXBsZXRvXG4gICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBudWxsO1xuICB9XG5cbiAgLyoqIENoYW1hZG8gcXVhbmRvIG8gdXN1w6FyaW8gY29tcGxldGEgYSBkaWdpdGHDp8OjbyBkYSBtw6FzY2FyYSAqL1xuICBvbkRpc3BsYXlWYWx1ZUNvbXBsZXRlKCk6IHZvaWQge1xuICAgIHRoaXMuc3luY0NvbnRyb2xGcm9tRGlzcGxheSgpO1xuICB9XG5cbiAgLyoqIENoYW1hZG8gcXVhbmRvIG8gaW5wdXQgcGVyZGUgZm9jbyAqL1xuICBvbkRpc3BsYXlWYWx1ZUJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5zeW5jQ29udHJvbEZyb21EaXNwbGF5KCk7XG4gIH1cblxuICAvKiogQ29udmVydGUgbyBkaXNwbGF5VmFsdWUgcGFyYSBvIEZvcm1Db250cm9sICovXG4gIHByaXZhdGUgc3luY0NvbnRyb2xGcm9tRGlzcGxheSgpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldCh0aGlzLmZpZWxkLmZpZWxkKTtcbiAgICBpZiAoIWNvbnRyb2wpIHsgcmV0dXJuOyB9XG5cbiAgICBpZiAoIXRoaXMuZGlzcGxheVZhbHVlIHx8IHRoaXMuZGlzcGxheVZhbHVlLmluY2x1ZGVzKCdfJykpIHtcbiAgICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlKG51bGwpO1xuICAgICAgY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXIgSEg6bW1cbiAgICBpZiAodGhpcy5pc1ZhbGlkVGltZSh0aGlzLmRpc3BsYXlWYWx1ZSkpIHtcbiAgICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlKHRoaXMuZGlzcGxheVZhbHVlKTtcbiAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICB9XG4gIH1cblxuICAvKiogU2V0YSBvIHZhbG9yIG5vIGNvbnRyb2wgc2VtIGRpc3BhcmFyIG8gc3Vic2NyaWJlciBpbnRlcm5vICovXG4gIHByaXZhdGUgc2V0Q29udHJvbFZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQodGhpcy5maWVsZC5maWVsZCk7XG4gICAgaWYgKCFjb250cm9sKSB7IHJldHVybjsgfVxuICAgIHRoaXMudXBkYXRpbmdGcm9tQ29udHJvbCA9IHRydWU7XG4gICAgY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgdGhpcy51cGRhdGluZ0Zyb21Db250cm9sID0gZmFsc2U7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBDT05WRVJTw5VFUyA9PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgZGF0ZVRvVGltZVN0cmluZyhkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7U3RyaW5nKGRhdGUuZ2V0SG91cnMoKSkucGFkU3RhcnQoMiwgJzAnKX06JHtTdHJpbmcoZGF0ZS5nZXRNaW51dGVzKCkpLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgfVxuXG4gIHByaXZhdGUgdGltZVN0cmluZ1RvRGF0ZSh2YWx1ZTogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIGlmICghdmFsdWUgfHwgdmFsdWUuaW5jbHVkZXMoJ18nKSkgeyByZXR1cm4gbnVsbDsgfVxuICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc3BsaXQoJzonKTtcbiAgICBpZiAocGFydHMubGVuZ3RoIDwgMikgeyByZXR1cm4gbnVsbDsgfVxuICAgIGNvbnN0IGhvdXJzID0gcGFyc2VJbnQocGFydHNbMF0sIDEwKTtcbiAgICBjb25zdCBtaW51dGVzID0gcGFyc2VJbnQocGFydHNbMV0sIDEwKTtcbiAgICBpZiAoaXNOYU4oaG91cnMpIHx8IGlzTmFOKG1pbnV0ZXMpIHx8IGhvdXJzIDwgMCB8fCBob3VycyA+IDIzIHx8IG1pbnV0ZXMgPCAwIHx8IG1pbnV0ZXMgPiA1OSkgeyByZXR1cm4gbnVsbDsgfVxuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSgpO1xuICAgIGQuc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIDAsIDApO1xuICAgIHJldHVybiBkO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkVGltZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFydHMgPSB2YWx1ZS5zcGxpdCgnOicpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDIpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgY29uc3QgaCA9IHBhcnNlSW50KHBhcnRzWzBdLCAxMCk7XG4gICAgY29uc3QgbSA9IHBhcnNlSW50KHBhcnRzWzFdLCAxMCk7XG4gICAgcmV0dXJuICFpc05hTihoKSAmJiAhaXNOYU4obSkgJiYgaCA+PSAwICYmIGggPD0gMjMgJiYgbSA+PSAwICYmIG0gPD0gNTk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBUSU1FIFBJQ0tFUiA9PT09PT09PT09PT09PT09PT09PVxuXG4gIHRvZ2dsZVRpbWVQaWNrZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuZGlzcGxheVZhbHVlICYmICF0aGlzLmRpc3BsYXlWYWx1ZS5pbmNsdWRlcygnXycpKSB7XG4gICAgICB0aGlzLnBpY2tlclZhbHVlID0gdGhpcy50aW1lU3RyaW5nVG9EYXRlKHRoaXMuZGlzcGxheVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5waWNrZXJWYWx1ZSA9IG5ldyBEYXRlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93UGlja2VyID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRpbWVQaWNrZXIgJiYgdGhpcy50aW1lUGlja2VyLmlucHV0ZmllbGRWaWV3Q2hpbGQpIHtcbiAgICAgICAgdGhpcy50aW1lUGlja2VyLmlucHV0ZmllbGRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25UaW1lU2VsZWN0KGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAoZGF0ZSkge1xuICAgICAgY29uc3QgdGltZVN0ciA9IHRoaXMuZGF0ZVRvVGltZVN0cmluZyhkYXRlKTtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGltZVN0cjtcbiAgICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlKHRpbWVTdHIpO1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQodGhpcy5maWVsZC5maWVsZCk7XG4gICAgICBpZiAoY29udHJvbCkgeyBjb250cm9sLm1hcmtBc0RpcnR5KCk7IH1cbiAgICB9XG4gIH1cblxuICBpc0NvbnRyb2xEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldCh0aGlzLmZpZWxkLmZpZWxkKTtcbiAgICByZXR1cm4gY29udHJvbCA/IGNvbnRyb2wuZGlzYWJsZWQgOiBmYWxzZTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldFBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGQucGxhY2Vob2xkZXIgfHwgJ0hIOm1tJztcbiAgfVxufVxuIl19