@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.
- package/esm2022/lib/components/dynamic-form/dynamic-form.component.mjs +32 -80
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-date.component.mjs +212 -82
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-datetime.component.mjs +211 -87
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-time.component.mjs +185 -62
- package/fesm2022/seniorsistemas-components-ai.mjs +627 -301
- package/fesm2022/seniorsistemas-components-ai.mjs.map +1 -1
- package/lib/components/dynamic-form/fields/dynamic-field-date.component.d.ts +36 -4
- package/lib/components/dynamic-form/fields/dynamic-field-datetime.component.d.ts +34 -4
- package/lib/components/dynamic-form/fields/dynamic-field-time.component.d.ts +30 -2
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Component, ViewChild } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
-
import {
|
|
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';
|
|
@@ -10,16 +10,24 @@ 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
12
|
import * as i2 from "../../../services/locale.service";
|
|
13
|
-
import * as i3 from "@angular/
|
|
14
|
-
import * as i4 from "
|
|
15
|
-
import * as i5 from "primeng/
|
|
16
|
-
import * as i6 from "primeng/
|
|
17
|
-
import * as i7 from "primeng/
|
|
13
|
+
import * as i3 from "@angular/common";
|
|
14
|
+
import * as i4 from "@angular/forms";
|
|
15
|
+
import * as i5 from "primeng/inputmask";
|
|
16
|
+
import * as i6 from "primeng/calendar";
|
|
17
|
+
import * as i7 from "primeng/button";
|
|
18
|
+
import * as i8 from "primeng/tooltip";
|
|
18
19
|
const DATETIME_MASK_CONFIGS = {
|
|
19
20
|
'pt-BR': { mask: '99/99/9999 99:99', placeholder: 'dd/mm/aaaa HH:mm', format: 'dmy' },
|
|
20
21
|
'en-US': { mask: '99/99/9999 99:99', placeholder: 'mm/dd/yyyy HH:mm', format: 'mdy' },
|
|
21
22
|
'es-ES': { mask: '99/99/9999 99:99', placeholder: 'dd/mm/aaaa HH:mm', format: 'dmy' }
|
|
22
23
|
};
|
|
24
|
+
/**
|
|
25
|
+
* DynamicFieldDatetimeComponent
|
|
26
|
+
*
|
|
27
|
+
* O FormControl.value SEMPRE armazena o datetime no formato ISO: "yyyy-MM-ddTHH:mm:ss.sssZ".
|
|
28
|
+
* A variável `displayValue` mantém o valor formatado no locale do usuário para exibição no input.
|
|
29
|
+
* Isso garante que qualquer componente que acesse form.value receba o valor pronto para o backend.
|
|
30
|
+
*/
|
|
23
31
|
export class DynamicFieldDatetimeComponent extends DynamicFieldBaseComponent {
|
|
24
32
|
localeService;
|
|
25
33
|
cdr;
|
|
@@ -27,9 +35,14 @@ export class DynamicFieldDatetimeComponent extends DynamicFieldBaseComponent {
|
|
|
27
35
|
currentDateFormat = 'dd/mm/yy';
|
|
28
36
|
datetimeMask = '99/99/9999 99:99';
|
|
29
37
|
calendarValue = null;
|
|
38
|
+
/** Valor de exibição no formato locale (ex: "18/05/2026 14:30" para pt-BR) */
|
|
39
|
+
displayValue = null;
|
|
40
|
+
/** Controla a renderização do p-calendar (só existe no DOM quando necessário) */
|
|
41
|
+
showCalendar = false;
|
|
30
42
|
langSub;
|
|
31
43
|
valueSub;
|
|
32
44
|
currentLocale = 'pt-BR';
|
|
45
|
+
updatingFromControl = false;
|
|
33
46
|
constructor(translationService, localeService, cdr) {
|
|
34
47
|
super(translationService);
|
|
35
48
|
this.localeService = localeService;
|
|
@@ -38,46 +51,111 @@ export class DynamicFieldDatetimeComponent extends DynamicFieldBaseComponent {
|
|
|
38
51
|
ngOnInit() {
|
|
39
52
|
this.currentLocale = this.translationService.getCurrentLanguage();
|
|
40
53
|
this.updateDatetimeFormat();
|
|
41
|
-
this.initializeValue();
|
|
42
|
-
this.langSub = this.translationService.currentLanguage$.subscribe((lang) => {
|
|
43
|
-
this.currentLocale = lang;
|
|
44
|
-
this.updateDatetimeFormat();
|
|
45
|
-
this.convertValueToNewLocale();
|
|
46
|
-
});
|
|
47
54
|
const control = this.form.get(this.field.field);
|
|
48
55
|
if (control) {
|
|
56
|
+
// Inicializar displayValue a partir do valor ISO do control
|
|
57
|
+
this.syncDisplayFromControl(control.value);
|
|
58
|
+
// Observar mudanças externas no control (patchValue, setValue)
|
|
49
59
|
this.valueSub = control.valueChanges.subscribe(value => {
|
|
50
|
-
if (
|
|
51
|
-
|
|
60
|
+
if (this.updatingFromControl) {
|
|
61
|
+
return;
|
|
52
62
|
}
|
|
63
|
+
this.syncDisplayFromControl(value);
|
|
53
64
|
});
|
|
54
65
|
}
|
|
66
|
+
this.langSub = this.translationService.currentLanguage$.subscribe((lang) => {
|
|
67
|
+
this.currentLocale = lang;
|
|
68
|
+
this.updateDatetimeFormat();
|
|
69
|
+
// Re-formatar o display com o novo locale
|
|
70
|
+
const ctrl = this.form.get(this.field.field);
|
|
71
|
+
if (ctrl) {
|
|
72
|
+
this.syncDisplayFromControl(ctrl.value);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
55
75
|
}
|
|
56
76
|
ngOnDestroy() {
|
|
57
77
|
this.langSub?.unsubscribe();
|
|
58
78
|
this.valueSub?.unsubscribe();
|
|
59
79
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
80
|
+
/**
|
|
81
|
+
* Sincroniza o displayValue a partir do valor ISO do FormControl.
|
|
82
|
+
* Aceita: ISO string, Date, locale string, ou null.
|
|
83
|
+
*/
|
|
84
|
+
syncDisplayFromControl(value) {
|
|
85
|
+
if (!value) {
|
|
86
|
+
this.displayValue = null;
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (value instanceof Date) {
|
|
90
|
+
const iso = value.toISOString();
|
|
91
|
+
this.setControlValue(iso);
|
|
92
|
+
this.displayValue = this.isoToLocale(value);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const s = String(value);
|
|
96
|
+
// ISO datetime string (contém T)
|
|
97
|
+
if (s.includes('T')) {
|
|
98
|
+
const d = new Date(s);
|
|
99
|
+
if (!isNaN(d.getTime())) {
|
|
100
|
+
this.displayValue = this.isoToLocale(d);
|
|
101
|
+
}
|
|
102
|
+
return;
|
|
64
103
|
}
|
|
104
|
+
// Formato locale "dd/MM/yyyy HH:mm" ou "MM/dd/yyyy HH:mm"
|
|
105
|
+
if (s.match(/^\d{2}\/\d{2}\/\d{4} \d{2}:\d{2}$/)) {
|
|
106
|
+
const iso = this.localeToIso(s);
|
|
107
|
+
if (iso) {
|
|
108
|
+
this.setControlValue(iso);
|
|
109
|
+
this.displayValue = s;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
this.displayValue = s;
|
|
113
|
+
}
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
// Valor incompleto
|
|
117
|
+
this.displayValue = s.includes('_') ? null : null;
|
|
65
118
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
this.
|
|
69
|
-
this.currentDateFormat = this.field?.dateFormat || this.localeService.getPrimeNGDateFormat();
|
|
119
|
+
/** Chamado quando o usuário completa a digitação da máscara */
|
|
120
|
+
onDisplayValueComplete() {
|
|
121
|
+
this.syncControlFromDisplay();
|
|
70
122
|
}
|
|
71
|
-
|
|
123
|
+
/** Chamado quando o input perde foco */
|
|
124
|
+
onDisplayValueBlur() {
|
|
125
|
+
this.syncControlFromDisplay();
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Converte o displayValue (locale) para ISO e seta no FormControl.
|
|
129
|
+
*/
|
|
130
|
+
syncControlFromDisplay() {
|
|
72
131
|
const control = this.form.get(this.field.field);
|
|
73
|
-
if (
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
132
|
+
if (!control) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (!this.displayValue || this.displayValue.includes('_')) {
|
|
136
|
+
this.setControlValue(null);
|
|
137
|
+
control.markAsDirty();
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const iso = this.localeToIso(this.displayValue);
|
|
141
|
+
if (iso) {
|
|
142
|
+
this.setControlValue(iso);
|
|
143
|
+
control.markAsDirty();
|
|
78
144
|
}
|
|
79
145
|
}
|
|
80
|
-
|
|
146
|
+
/** Seta o valor no control sem disparar o subscriber interno */
|
|
147
|
+
setControlValue(value) {
|
|
148
|
+
const control = this.form.get(this.field.field);
|
|
149
|
+
if (!control) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
this.updatingFromControl = true;
|
|
153
|
+
control.setValue(value, { emitEvent: true });
|
|
154
|
+
this.updatingFromControl = false;
|
|
155
|
+
}
|
|
156
|
+
// ==================== CONVERSÕES ====================
|
|
157
|
+
/** Converte Date para locale display string */
|
|
158
|
+
isoToLocale(date) {
|
|
81
159
|
const day = String(date.getDate()).padStart(2, '0');
|
|
82
160
|
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
83
161
|
const year = String(date.getFullYear());
|
|
@@ -88,33 +166,54 @@ export class DynamicFieldDatetimeComponent extends DynamicFieldBaseComponent {
|
|
|
88
166
|
? `${month}/${day}/${year} ${hours}:${minutes}`
|
|
89
167
|
: `${day}/${month}/${year} ${hours}:${minutes}`;
|
|
90
168
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
if (parts.length !== 2)
|
|
169
|
+
/** Converte locale string para ISO datetime string */
|
|
170
|
+
localeToIso(locale) {
|
|
171
|
+
const parts = locale.split(' ');
|
|
172
|
+
if (parts.length !== 2) {
|
|
96
173
|
return null;
|
|
174
|
+
}
|
|
97
175
|
const dateParts = parts[0].split('/');
|
|
98
176
|
const timeParts = parts[1].split(':');
|
|
99
|
-
if (dateParts.length !== 3 || timeParts.length !== 2)
|
|
177
|
+
if (dateParts.length !== 3 || timeParts.length !== 2) {
|
|
100
178
|
return null;
|
|
179
|
+
}
|
|
101
180
|
const config = DATETIME_MASK_CONFIGS[this.currentLocale] || DATETIME_MASK_CONFIGS['pt-BR'];
|
|
102
181
|
const [p0, p1, p2] = dateParts.map(p => parseInt(p, 10));
|
|
103
182
|
const [day, month, year] = config.format === 'mdy' ? [p1, p0, p2] : [p0, p1, p2];
|
|
104
183
|
const hours = parseInt(timeParts[0], 10);
|
|
105
184
|
const minutes = parseInt(timeParts[1], 10);
|
|
106
|
-
if (isNaN(day) || isNaN(month) || isNaN(year) || isNaN(hours) || isNaN(minutes))
|
|
185
|
+
if (isNaN(day) || isNaN(month) || isNaN(year) || isNaN(hours) || isNaN(minutes)) {
|
|
107
186
|
return null;
|
|
108
|
-
|
|
187
|
+
}
|
|
188
|
+
if (month < 1 || month > 12 || day < 1 || day > 31 || hours < 0 || hours > 23 || minutes < 0 || minutes > 59) {
|
|
109
189
|
return null;
|
|
190
|
+
}
|
|
110
191
|
const date = new Date(year, month - 1, day, hours, minutes);
|
|
111
|
-
return isNaN(date.getTime()) ? null : date;
|
|
192
|
+
return isNaN(date.getTime()) ? null : date.toISOString();
|
|
193
|
+
}
|
|
194
|
+
/** Converte locale string para Date */
|
|
195
|
+
localeToDate(value) {
|
|
196
|
+
const iso = this.localeToIso(value);
|
|
197
|
+
if (!iso) {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
return new Date(iso);
|
|
201
|
+
}
|
|
202
|
+
// ==================== CALENDAR ====================
|
|
203
|
+
updateDatetimeFormat() {
|
|
204
|
+
const config = DATETIME_MASK_CONFIGS[this.currentLocale] || DATETIME_MASK_CONFIGS['pt-BR'];
|
|
205
|
+
this.datetimeMask = config.mask;
|
|
206
|
+
this.currentDateFormat = this.field?.dateFormat || this.localeService.getPrimeNGDateFormat();
|
|
112
207
|
}
|
|
113
208
|
toggleCalendar(event) {
|
|
114
209
|
event.stopPropagation();
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
210
|
+
if (this.displayValue && !this.displayValue.includes('_')) {
|
|
211
|
+
this.calendarValue = this.localeToDate(this.displayValue);
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
this.calendarValue = new Date();
|
|
215
|
+
}
|
|
216
|
+
this.showCalendar = true;
|
|
118
217
|
setTimeout(() => {
|
|
119
218
|
if (this.calendarPicker && this.calendarPicker.inputfieldViewChild) {
|
|
120
219
|
this.calendarPicker.inputfieldViewChild.nativeElement.click();
|
|
@@ -122,39 +221,53 @@ export class DynamicFieldDatetimeComponent extends DynamicFieldBaseComponent {
|
|
|
122
221
|
});
|
|
123
222
|
}
|
|
124
223
|
onCalendarSelect(date) {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
224
|
+
if (date) {
|
|
225
|
+
const iso = date.toISOString();
|
|
226
|
+
this.displayValue = this.isoToLocale(date);
|
|
227
|
+
this.setControlValue(iso);
|
|
228
|
+
const control = this.form.get(this.field.field);
|
|
229
|
+
if (control) {
|
|
230
|
+
control.markAsDirty();
|
|
231
|
+
}
|
|
129
232
|
}
|
|
130
233
|
}
|
|
131
234
|
onCalendarClear() {
|
|
235
|
+
this.displayValue = null;
|
|
236
|
+
this.setControlValue(null);
|
|
132
237
|
const control = this.form.get(this.field.field);
|
|
133
238
|
if (control) {
|
|
134
|
-
control.setValue(null);
|
|
135
239
|
control.markAsDirty();
|
|
136
240
|
}
|
|
137
241
|
}
|
|
242
|
+
isControlDisabled() {
|
|
243
|
+
const control = this.form.get(this.field.field);
|
|
244
|
+
return control ? control.disabled : false;
|
|
245
|
+
}
|
|
138
246
|
getPlaceholder() {
|
|
139
|
-
if (this.field.placeholder)
|
|
247
|
+
if (this.field.placeholder) {
|
|
140
248
|
return this.field.placeholder;
|
|
249
|
+
}
|
|
141
250
|
return DATETIME_MASK_CONFIGS[this.currentLocale]?.placeholder || 'dd/mm/aaaa HH:mm';
|
|
142
251
|
}
|
|
143
252
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DynamicFieldDatetimeComponent, deps: [{ token: i1.TranslationService }, { token: i2.LocaleService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
144
253
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DynamicFieldDatetimeComponent, isStandalone: true, selector: "sia-dynamic-field-datetime", viewQueries: [{ propertyName: "calendarPicker", first: true, predicate: ["calendarPicker"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
|
|
145
254
|
<sia-dynamic-field-wrapper [field]="field" [form]="form" [mode]="mode">
|
|
146
|
-
<div
|
|
255
|
+
<div class="datetime-field">
|
|
147
256
|
<div class="datetime-input-group">
|
|
148
257
|
<p-inputmask
|
|
149
258
|
[inputId]="field.field"
|
|
150
|
-
[
|
|
259
|
+
[(ngModel)]="displayValue"
|
|
260
|
+
[ngModelOptions]="{standalone: true}"
|
|
151
261
|
[mask]="datetimeMask"
|
|
152
262
|
[placeholder]="getPlaceholder()"
|
|
153
263
|
slotChar="_"
|
|
154
264
|
[autoClear]="false"
|
|
155
265
|
styleClass="datetime-input"
|
|
156
266
|
[class.ng-invalid]="isFieldInvalid()"
|
|
157
|
-
[class.ng-dirty]="isFieldDirty()"
|
|
267
|
+
[class.ng-dirty]="isFieldDirty()"
|
|
268
|
+
[disabled]="isControlDisabled()"
|
|
269
|
+
(onComplete)="onDisplayValueComplete()"
|
|
270
|
+
(onBlur)="onDisplayValueBlur()">
|
|
158
271
|
</p-inputmask>
|
|
159
272
|
<div class="datetime-buttons">
|
|
160
273
|
<p-button
|
|
@@ -168,31 +281,34 @@ export class DynamicFieldDatetimeComponent extends DynamicFieldBaseComponent {
|
|
|
168
281
|
size="small">
|
|
169
282
|
</p-button>
|
|
170
283
|
</div>
|
|
284
|
+
<p-calendar
|
|
285
|
+
*ngIf="showCalendar"
|
|
286
|
+
#calendarPicker
|
|
287
|
+
[(ngModel)]="calendarValue"
|
|
288
|
+
[ngModelOptions]="{standalone: true}"
|
|
289
|
+
[dateFormat]="currentDateFormat"
|
|
290
|
+
[showTime]="true"
|
|
291
|
+
[showSeconds]="false"
|
|
292
|
+
[hourFormat]="'24'"
|
|
293
|
+
[showButtonBar]="true"
|
|
294
|
+
[appendTo]="'body'"
|
|
295
|
+
[inline]="false"
|
|
296
|
+
[showIcon]="false"
|
|
297
|
+
(onSelect)="onCalendarSelect($event)"
|
|
298
|
+
(onClearClick)="onCalendarClear()"
|
|
299
|
+
(onHide)="showCalendar = false"
|
|
300
|
+
styleClass="hidden-calendar-input"
|
|
301
|
+
[style]="{'position': 'absolute', 'width': '0', 'height': '0', 'overflow': 'hidden', 'opacity': '0', 'pointer-events': 'none'}">
|
|
302
|
+
</p-calendar>
|
|
171
303
|
</div>
|
|
172
|
-
<p-calendar
|
|
173
|
-
#calendarPicker
|
|
174
|
-
[(ngModel)]="calendarValue"
|
|
175
|
-
[dateFormat]="currentDateFormat"
|
|
176
|
-
[showTime]="true"
|
|
177
|
-
[showSeconds]="false"
|
|
178
|
-
[hourFormat]="'24'"
|
|
179
|
-
[showButtonBar]="true"
|
|
180
|
-
[appendTo]="'body'"
|
|
181
|
-
[inline]="false"
|
|
182
|
-
[showIcon]="false"
|
|
183
|
-
(onSelect)="onCalendarSelect($event)"
|
|
184
|
-
(onClearClick)="onCalendarClear()"
|
|
185
|
-
styleClass="hidden-calendar-input">
|
|
186
|
-
</p-calendar>
|
|
187
304
|
</div>
|
|
188
305
|
</sia-dynamic-field-wrapper>
|
|
189
|
-
`, isInline: true, styles: [".datetime-field{width:100%;position:relative}.datetime-input-group{position:relative;width:100%;::ng-deep p-inputmask{width:100%;display:block;input{width:100%;padding-right:2.5rem}}.datetime-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}}}
|
|
306
|
+
`, isInline: true, styles: [".datetime-field{width:100%;position:relative}.datetime-input-group{position:relative;width:100%;::ng-deep p-inputmask{width:100%;display:block;input{width:100%;padding-right:2.5rem}}.datetime-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: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: InputMaskModule }, { kind: "component", type: i5.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: i6.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: i7.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: i8.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"] }] });
|
|
190
307
|
}
|
|
191
308
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DynamicFieldDatetimeComponent, decorators: [{
|
|
192
309
|
type: Component,
|
|
193
310
|
args: [{ selector: 'sia-dynamic-field-datetime', standalone: true, imports: [
|
|
194
311
|
CommonModule,
|
|
195
|
-
ReactiveFormsModule,
|
|
196
312
|
FormsModule,
|
|
197
313
|
InputMaskModule,
|
|
198
314
|
CalendarModule,
|
|
@@ -201,18 +317,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
201
317
|
DynamicFieldWrapperComponent
|
|
202
318
|
], template: `
|
|
203
319
|
<sia-dynamic-field-wrapper [field]="field" [form]="form" [mode]="mode">
|
|
204
|
-
<div
|
|
320
|
+
<div class="datetime-field">
|
|
205
321
|
<div class="datetime-input-group">
|
|
206
322
|
<p-inputmask
|
|
207
323
|
[inputId]="field.field"
|
|
208
|
-
[
|
|
324
|
+
[(ngModel)]="displayValue"
|
|
325
|
+
[ngModelOptions]="{standalone: true}"
|
|
209
326
|
[mask]="datetimeMask"
|
|
210
327
|
[placeholder]="getPlaceholder()"
|
|
211
328
|
slotChar="_"
|
|
212
329
|
[autoClear]="false"
|
|
213
330
|
styleClass="datetime-input"
|
|
214
331
|
[class.ng-invalid]="isFieldInvalid()"
|
|
215
|
-
[class.ng-dirty]="isFieldDirty()"
|
|
332
|
+
[class.ng-dirty]="isFieldDirty()"
|
|
333
|
+
[disabled]="isControlDisabled()"
|
|
334
|
+
(onComplete)="onDisplayValueComplete()"
|
|
335
|
+
(onBlur)="onDisplayValueBlur()">
|
|
216
336
|
</p-inputmask>
|
|
217
337
|
<div class="datetime-buttons">
|
|
218
338
|
<p-button
|
|
@@ -226,27 +346,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
226
346
|
size="small">
|
|
227
347
|
</p-button>
|
|
228
348
|
</div>
|
|
349
|
+
<p-calendar
|
|
350
|
+
*ngIf="showCalendar"
|
|
351
|
+
#calendarPicker
|
|
352
|
+
[(ngModel)]="calendarValue"
|
|
353
|
+
[ngModelOptions]="{standalone: true}"
|
|
354
|
+
[dateFormat]="currentDateFormat"
|
|
355
|
+
[showTime]="true"
|
|
356
|
+
[showSeconds]="false"
|
|
357
|
+
[hourFormat]="'24'"
|
|
358
|
+
[showButtonBar]="true"
|
|
359
|
+
[appendTo]="'body'"
|
|
360
|
+
[inline]="false"
|
|
361
|
+
[showIcon]="false"
|
|
362
|
+
(onSelect)="onCalendarSelect($event)"
|
|
363
|
+
(onClearClick)="onCalendarClear()"
|
|
364
|
+
(onHide)="showCalendar = false"
|
|
365
|
+
styleClass="hidden-calendar-input"
|
|
366
|
+
[style]="{'position': 'absolute', 'width': '0', 'height': '0', 'overflow': 'hidden', 'opacity': '0', 'pointer-events': 'none'}">
|
|
367
|
+
</p-calendar>
|
|
229
368
|
</div>
|
|
230
|
-
<p-calendar
|
|
231
|
-
#calendarPicker
|
|
232
|
-
[(ngModel)]="calendarValue"
|
|
233
|
-
[dateFormat]="currentDateFormat"
|
|
234
|
-
[showTime]="true"
|
|
235
|
-
[showSeconds]="false"
|
|
236
|
-
[hourFormat]="'24'"
|
|
237
|
-
[showButtonBar]="true"
|
|
238
|
-
[appendTo]="'body'"
|
|
239
|
-
[inline]="false"
|
|
240
|
-
[showIcon]="false"
|
|
241
|
-
(onSelect)="onCalendarSelect($event)"
|
|
242
|
-
(onClearClick)="onCalendarClear()"
|
|
243
|
-
styleClass="hidden-calendar-input">
|
|
244
|
-
</p-calendar>
|
|
245
369
|
</div>
|
|
246
370
|
</sia-dynamic-field-wrapper>
|
|
247
|
-
`, styles: [".datetime-field{width:100%;position:relative}.datetime-input-group{position:relative;width:100%;::ng-deep p-inputmask{width:100%;display:block;input{width:100%;padding-right:2.5rem}}.datetime-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}}}
|
|
371
|
+
`, styles: [".datetime-field{width:100%;position:relative}.datetime-input-group{position:relative;width:100%;::ng-deep p-inputmask{width:100%;display:block;input{width:100%;padding-right:2.5rem}}.datetime-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"] }]
|
|
248
372
|
}], ctorParameters: () => [{ type: i1.TranslationService }, { type: i2.LocaleService }, { type: i0.ChangeDetectorRef }], propDecorators: { calendarPicker: [{
|
|
249
373
|
type: ViewChild,
|
|
250
374
|
args: ['calendarPicker']
|
|
251
375
|
}] } });
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZC1kYXRldGltZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLWFpL3NyYy9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vZmllbGRzL2R5bmFtaWMtZmllbGQtZGF0ZXRpbWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXdDLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUloRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7O0FBVzNFLE1BQU0scUJBQXFCLEdBQWtEO0lBQzNFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtJQUNyRixPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7SUFDckYsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxrQkFBa0Is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SSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVc7WUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQzFELE9BQU8scUJBQXFCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFdBQVcsSUFBSSxrQkFBa0IsQ0FBQztJQUN0RixDQUFDO3dHQXJJVSw2QkFBNkI7NEZBQTdCLDZCQUE2QiwrTkFwSDlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Q1QsdTRCQXREQyxZQUFZLDhCQUNaLG1CQUFtQixtbEJBQ25CLFdBQVcsc1BBQ1gsZUFBZSxxaUJBQ2YsY0FBYyxpekNBQ2QsWUFBWSxpYkFDWixhQUFhLHNYQUNiLDRCQUE0Qjs7NEZBc0huQiw2QkFBNkI7a0JBakl6QyxTQUFTOytCQUNFLDRCQUE0QixjQUMxQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osYUFBYTt3QkFDYiw0QkFBNEI7cUJBQzdCLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZDVDttSkF3RTRCLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW5wdXRNYXNrTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dG1hc2snO1xuaW1wb3J0IHsgQ2FsZW5kYXJNb2R1bGUsIENhbGVuZGFyIH0gZnJvbSAncHJpbWVuZy9jYWxlbmRhcic7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlLCBTdXBwb3J0ZWRMYW5ndWFnZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9jYWxlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2xvY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7IER5bmFtaWNGaWVsZFdyYXBwZXJDb21wb25lbnQgfSBmcm9tICcuL2R5bmFtaWMtZmllbGQtd3JhcHBlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vZHluYW1pYy1maWVsZC1iYXNlLmNvbXBvbmVudCc7XG5cbi8qKlxuICogQ29uZmlndXJhw6fDo28gZGUgbcOhc2NhcmEgZGUgZGF0ZXRpbWUgcG9yIGxvY2FsZVxuICovXG5pbnRlcmZhY2UgRGF0ZXRpbWVNYXNrQ29uZmlnIHtcbiAgbWFzazogc3RyaW5nO1xuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBmb3JtYXQ6ICdkbXknIHwgJ21keSc7XG59XG5cbmNvbnN0IERBVEVUSU1FX01BU0tfQ09ORklHUzogUmVjb3JkPFN1cHBvcnRlZExhbmd1YWdlLCBEYXRldGltZU1hc2tDb25maWc+ID0ge1xuICAncHQtQlInOiB7IG1hc2s6ICc5OS85OS85OTk5IDk5Ojk5JywgcGxhY2Vob2xkZXI6ICdkZC9tbS9hYWFhIEhIOm1tJywgZm9ybWF0OiAnZG15JyB9LFxuICAnZW4tVVMnOiB7IG1hc2s6ICc5OS85OS85OTk5IDk5Ojk5JywgcGxhY2Vob2xkZXI6ICdtbS9kZC95eXl5IEhIOm1tJywgZm9ybWF0OiAnbWR5JyB9LFxuICAnZXMtRVMnOiB7IG1hc2s6ICc5OS85OS85OTk5IDk5Ojk5JywgcGxhY2Vob2xkZXI6ICdkZC9tbS9hYWFhIEhIOm1tJywgZm9ybWF0OiAnZG15JyB9XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzaWEtZHluYW1pYy1maWVsZC1kYXRldGltZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBJbnB1dE1hc2tNb2R1bGUsXG4gICAgQ2FsZW5kYXJNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIFRvb2x0aXBNb2R1bGUsXG4gICAgRHluYW1pY0ZpZWxkV3JhcHBlckNvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxzaWEtZHluYW1pYy1maWVsZC13cmFwcGVyIFtmaWVsZF09XCJmaWVsZFwiIFtmb3JtXT1cImZvcm1cIiBbbW9kZV09XCJtb2RlXCI+XG4gICAgICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiZGF0ZXRpbWUtZmllbGRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGV0aW1lLWlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgPHAtaW5wdXRtYXNrXG4gICAgICAgICAgICBbaW5wdXRJZF09XCJmaWVsZC5maWVsZFwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmZpZWxkXCJcbiAgICAgICAgICAgIFttYXNrXT1cImRhdGV0aW1lTWFza1wiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZ2V0UGxhY2Vob2xkZXIoKVwiXG4gICAgICAgICAgICBzbG90Q2hhcj1cIl9cIlxuICAgICAgICAgICAgW2F1dG9DbGVhcl09XCJmYWxzZVwiXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwiZGF0ZXRpbWUtaW5wdXRcIlxuICAgICAgICAgICAgW2NsYXNzLm5nLWludmFsaWRdPVwiaXNGaWVsZEludmFsaWQoKVwiXG4gICAgICAgICAgICBbY2xhc3MubmctZGlydHldPVwiaXNGaWVsZERpcnR5KClcIj5cbiAgICAgICAgICA8L3AtaW5wdXRtYXNrPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRldGltZS1idXR0b25zXCI+XG4gICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWNhbGVuZGFyXCJcbiAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cInRvZ2dsZUNhbGVuZGFyKCRldmVudClcIlxuICAgICAgICAgICAgICBwVG9vbHRpcD1cIkFicmlyIGNhbGVuZMOhcmlvXCJcbiAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgICAgICA8L3AtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHAtY2FsZW5kYXJcbiAgICAgICAgICAjY2FsZW5kYXJQaWNrZXJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImNhbGVuZGFyVmFsdWVcIlxuICAgICAgICAgIFtkYXRlRm9ybWF0XT1cImN1cnJlbnREYXRlRm9ybWF0XCJcbiAgICAgICAgICBbc2hvd1RpbWVdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCJcbiAgICAgICAgICBbaG91ckZvcm1hdF09XCInMjQnXCJcbiAgICAgICAgICBbc2hvd0J1dHRvbkJhcl09XCJ0cnVlXCJcbiAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICBbaW5saW5lXT1cImZhbHNlXCJcbiAgICAgICAgICBbc2hvd0ljb25dPVwiZmFsc2VcIlxuICAgICAgICAgIChvblNlbGVjdCk9XCJvbkNhbGVuZGFyU2VsZWN0KCRldmVudClcIlxuICAgICAgICAgIChvbkNsZWFyQ2xpY2spPVwib25DYWxlbmRhckNsZWFyKClcIlxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJoaWRkZW4tY2FsZW5kYXItaW5wdXRcIj5cbiAgICAgICAgPC9wLWNhbGVuZGFyPlxuICAgICAgPC9kaXY+XG4gICAgPC9zaWEtZHluYW1pYy1maWVsZC13cmFwcGVyPlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLmRhdGV0aW1lLWZpZWxkIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cblxuICAgIC5kYXRldGltZS1pbnB1dC1ncm91cCB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMTAwJTtcblxuICAgICAgOjpuZy1kZWVwIHAtaW5wdXRtYXNrIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgICAgIGlucHV0IHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAyLjVyZW07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmRhdGV0aW1lLWJ1dHRvbnMge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHJpZ2h0OiA0cHg7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogMnB4O1xuICAgICAgICB6LWluZGV4OiAxMDtcbiAgICAgIH1cblxuICAgICAgOjpuZy1kZWVwIC5wLWJ1dHRvbiB7XG4gICAgICAgIHdpZHRoOiAycmVtICFpbXBvcnRhbnQ7XG4gICAgICAgIGhlaWdodDogMnJlbSAhaW1wb3J0YW50O1xuICAgICAgICBtaW4td2lkdGg6IDJyZW0gIWltcG9ydGFudDtcbiAgICAgICAgbWluLWhlaWdodDogMnJlbSAhaW1wb3J0YW50O1xuICAgICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICAgICAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50O1xuXG4gICAgICAgIC5wLWJ1dHRvbi1pY29uIHtcbiAgICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICAgICAgICBmb250LXNpemU6IDAuODc1cmVtICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAucC1idXR0b24tbGFiZWwge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIDo6bmctZGVlcCAuaGlkZGVuLWNhbGVuZGFyLWlucHV0IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHdpZHRoOiAwO1xuICAgICAgaGVpZ2h0OiAwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIG9wYWNpdHk6IDA7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAgICAgaW5wdXQge1xuICAgICAgICB3aWR0aDogMDtcbiAgICAgICAgaGVpZ2h0OiAwO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljRmllbGREYXRldGltZUNvbXBvbmVudCBleHRlbmRzIER5bmFtaWNGaWVsZEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyUGlja2VyJykgY2FsZW5kYXJQaWNrZXIhOiBDYWxlbmRhcjtcbiAgXG4gIGN1cnJlbnREYXRlRm9ybWF0ID0gJ2RkL21tL3l5JztcbiAgZGF0ZXRpbWVNYXNrID0gJzk5Lzk5Lzk5OTkgOTk6OTknO1xuICBjYWxlbmRhclZhbHVlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIFxuICBwcml2YXRlIGxhbmdTdWI/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgdmFsdWVTdWI/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgY3VycmVudExvY2FsZTogU3VwcG9ydGVkTGFuZ3VhZ2UgPSAncHQtQlInO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYWxlU2VydmljZTogTG9jYWxlU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgc3VwZXIodHJhbnNsYXRpb25TZXJ2aWNlKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudExvY2FsZSA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRMYW5ndWFnZSgpO1xuICAgIHRoaXMudXBkYXRlRGF0ZXRpbWVGb3JtYXQoKTtcbiAgICB0aGlzLmluaXRpYWxpemVWYWx1ZSgpO1xuICAgIFxuICAgIHRoaXMubGFuZ1N1YiA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZSQuc3Vic2NyaWJlKChsYW5nKSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRMb2NhbGUgPSBsYW5nO1xuICAgICAgdGhpcy51cGRhdGVEYXRldGltZUZvcm1hdCgpO1xuICAgICAgdGhpcy5jb252ZXJ0VmFsdWVUb05ld0xvY2FsZSgpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQodGhpcy5maWVsZC5maWVsZCk7XG4gICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgIHRoaXMudmFsdWVTdWIgPSBjb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgY29udHJvbC5zZXRWYWx1ZSh0aGlzLmRhdGVUb1N0cmluZyh2YWx1ZSksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5sYW5nU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudmFsdWVTdWI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVWYWx1ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldCh0aGlzLmZpZWxkLmZpZWxkKTtcbiAgICBpZiAoY29udHJvbD8udmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBjb250cm9sLnNldFZhbHVlKHRoaXMuZGF0ZVRvU3RyaW5nKGNvbnRyb2wudmFsdWUpLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRldGltZUZvcm1hdCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSBEQVRFVElNRV9NQVNLX0NPTkZJR1NbdGhpcy5jdXJyZW50TG9jYWxlXSB8fCBEQVRFVElNRV9NQVNLX0NPTkZJR1NbJ3B0LUJSJ107XG4gICAgdGhpcy5kYXRldGltZU1hc2sgPSBjb25maWcubWFzaztcbiAgICB0aGlzLmN1cnJlbnREYXRlRm9ybWF0ID0gdGhpcy5maWVsZD8uZGF0ZUZvcm1hdCB8fCB0aGlzLmxvY2FsZVNlcnZpY2UuZ2V0UHJpbWVOR0RhdGVGb3JtYXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFZhbHVlVG9OZXdMb2NhbGUoKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQodGhpcy5maWVsZC5maWVsZCk7XG4gICAgaWYgKGNvbnRyb2w/LnZhbHVlICYmIHR5cGVvZiBjb250cm9sLnZhbHVlID09PSAnc3RyaW5nJyAmJiAhY29udHJvbC52YWx1ZS5pbmNsdWRlcygnXycpKSB7XG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5zdHJpbmdUb0RhdGUoY29udHJvbC52YWx1ZSk7XG4gICAgICBpZiAoZGF0ZSkge1xuICAgICAgICBjb250cm9sLnNldFZhbHVlKHRoaXMuZGF0ZVRvU3RyaW5nKGRhdGUpLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkYXRlVG9TdHJpbmcoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF5ID0gU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IG1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgeWVhciA9IFN0cmluZyhkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgIGNvbnN0IGhvdXJzID0gU3RyaW5nKGRhdGUuZ2V0SG91cnMoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCBtaW51dGVzID0gU3RyaW5nKGRhdGUuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IGNvbmZpZyA9IERBVEVUSU1FX01BU0tfQ09ORklHU1t0aGlzLmN1cnJlbnRMb2NhbGVdIHx8IERBVEVUSU1FX01BU0tfQ09ORklHU1sncHQtQlInXTtcbiAgICByZXR1cm4gY29uZmlnLmZvcm1hdCA9PT0gJ21keScgXG4gICAgICA/IGAke21vbnRofS8ke2RheX0vJHt5ZWFyfSAke2hvdXJzfToke21pbnV0ZXN9YCBcbiAgICAgIDogYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9ICR7aG91cnN9OiR7bWludXRlc31gO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdUb0RhdGUodmFsdWU6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoIXZhbHVlIHx8IHZhbHVlLmluY2x1ZGVzKCdfJykpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc3BsaXQoJyAnKTtcbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSAyKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBkYXRlUGFydHMgPSBwYXJ0c1swXS5zcGxpdCgnLycpO1xuICAgIGNvbnN0IHRpbWVQYXJ0cyA9IHBhcnRzWzFdLnNwbGl0KCc6Jyk7XG4gICAgaWYgKGRhdGVQYXJ0cy5sZW5ndGggIT09IDMgfHwgdGltZVBhcnRzLmxlbmd0aCAhPT0gMikgcmV0dXJuIG51bGw7XG4gICAgXG4gICAgY29uc3QgY29uZmlnID0gREFURVRJTUVfTUFTS19DT05GSUdTW3RoaXMuY3VycmVudExvY2FsZV0gfHwgREFURVRJTUVfTUFTS19DT05GSUdTWydwdC1CUiddO1xuICAgIGNvbnN0IFtwMCwgcDEsIHAyXSA9IGRhdGVQYXJ0cy5tYXAocCA9PiBwYXJzZUludChwLCAxMCkpO1xuICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IGNvbmZpZy5mb3JtYXQgPT09ICdtZHknID8gW3AxLCBwMCwgcDJdIDogW3AwLCBwMSwgcDJdO1xuICAgIGNvbnN0IGhvdXJzID0gcGFyc2VJbnQodGltZVBhcnRzWzBdLCAxMCk7XG4gICAgY29uc3QgbWludXRlcyA9IHBhcnNlSW50KHRpbWVQYXJ0c1sxXSwgMTApO1xuICAgIFxuICAgIGlmIChpc05hTihkYXkpIHx8IGlzTmFOKG1vbnRoKSB8fCBpc05hTih5ZWFyKSB8fCBpc05hTihob3VycykgfHwgaXNOYU4obWludXRlcykpIHJldHVybiBudWxsO1xuICAgIGlmIChtb250aCA8IDEgfHwgbW9udGggPiAxMiB8fCBkYXkgPCAxIHx8IGRheSA+IDMxIHx8IGhvdXJzIDwgMCB8fCBob3VycyA+IDIzIHx8IG1pbnV0ZXMgPCAwIHx8IG1pbnV0ZXMgPiA1OSkgcmV0dXJuIG51bGw7XG4gICAgXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5LCBob3VycywgbWludXRlcyk7XG4gICAgcmV0dXJuIGlzTmFOKGRhdGUuZ2V0VGltZSgpKSA/IG51bGwgOiBkYXRlO1xuICB9XG5cbiAgdG9nZ2xlQ2FsZW5kYXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQodGhpcy5maWVsZC5maWVsZCk7XG4gICAgdGhpcy5jYWxlbmRhclZhbHVlID0gY29udHJvbD8udmFsdWUgPyB0aGlzLnN0cmluZ1RvRGF0ZShjb250cm9sLnZhbHVlKSA6IG5ldyBEYXRlKCk7XG4gICAgXG4gICAgLy8gU2ltdWxhciBjbGlxdWUgbm8gaW5wdXQgZG8gY2FsZW5kYXIgcGFyYSBhYnJpciBvIG92ZXJsYXlcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNhbGVuZGFyUGlja2VyICYmIHRoaXMuY2FsZW5kYXJQaWNrZXIuaW5wdXRmaWVsZFZpZXdDaGlsZCkge1xuICAgICAgICB0aGlzLmNhbGVuZGFyUGlja2VyLmlucHV0ZmllbGRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25DYWxlbmRhclNlbGVjdChkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQodGhpcy5maWVsZC5maWVsZCk7XG4gICAgaWYgKGNvbnRyb2wgJiYgZGF0ZSkge1xuICAgICAgY29udHJvbC5zZXRWYWx1ZSh0aGlzLmRhdGVUb1N0cmluZyhkYXRlKSk7XG4gICAgICBjb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuICB9XG5cbiAgb25DYWxlbmRhckNsZWFyKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KHRoaXMuZmllbGQuZmllbGQpO1xuICAgIGlmIChjb250cm9sKSB7XG4gICAgICBjb250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgICAgY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIGdldFBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZmllbGQucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmZpZWxkLnBsYWNlaG9sZGVyO1xuICAgIHJldHVybiBEQVRFVElNRV9NQVNLX0NPTkZJR1NbdGhpcy5jdXJyZW50TG9jYWxlXT8ucGxhY2Vob2xkZXIgfHwgJ2RkL21tL2FhYWEgSEg6bW0nO1xuICB9XG59XG4iXX0=
|
|
376
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZC1kYXRldGltZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLWFpL3NyYy9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vZmllbGRzL2R5bmFtaWMtZmllbGQtZGF0ZXRpbWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXdDLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFZLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUloRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7OztBQVczRSxNQUFNLHFCQUFxQixHQUFrRDtJQUMzRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7SUFDckYsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO0lBQ3JGLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxF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QUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUFDLE9BQU8sSUFBSSxDQUFDO1FBQUMsQ0FBQztRQUV0RSxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUkscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0YsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6RCxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakYsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTNDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQUMsT0FBTyxJQUFJLENBQUM7UUFBQyxDQUFDO1FBQ2pHLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxPQUFPLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFBQyxPQUFPLElBQUksQ0FBQztRQUFDLENBQUM7UUFFOUgsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1RCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0QsQ0FBQztJQUVELHVDQUF1QztJQUMvQixZQUFZLENBQUMsS0FBYTtRQUNoQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUFDLE9BQU8sSUFBSSxDQUFDO1FBQUMsQ0FBQztRQUMxQixPQUFPLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxxREFBcUQ7SUFFN0Msb0JBQW9CO1FBQzFCLE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzRixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsVUFBVSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUMvRixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQVk7UUFDekIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFVO1FBQ3pCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRCxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELElBQUksT0FBTyxFQUFFLENBQUM7WUFBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxpQkFBaUI7UUFDZixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDNUMsQ0FBQztJQUVRLGNBQWM7UUFDckIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUFDLENBQUM7UUFDOUQsT0FBTyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsV0FBVyxJQUFJLGtCQUFrQixDQUFDO0lBQ3RGLENBQUM7d0dBek9VLDZCQUE2Qjs0RkFBN0IsNkJBQTZCLCtOQTFJOUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcURULGl0Q0E3REMsWUFBWSxrSUFDWixXQUFXLDhWQUNYLGVBQWUscWlCQUNmLGNBQWMsaXpDQUNkLFlBQVksaWJBQ1osYUFBYSxzWEFDYiw0QkFBNEI7OzRGQTRJbkIsNkJBQTZCO2tCQXRKekMsU0FBUzsrQkFDRSw0QkFBNEIsY0FDMUIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixhQUFhO3dCQUNiLDRCQUE0QjtxQkFDN0IsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxRFQ7bUpBc0Y0QixjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIENoYW5nZURldGVjdG9yUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElucHV0TWFza01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXRtYXNrJztcbmltcG9ydCB7IENhbGVuZGFyTW9kdWxlLCBDYWxlbmRhciB9IGZyb20gJ3ByaW1lbmcvY2FsZW5kYXInO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSwgU3VwcG9ydGVkTGFuZ3VhZ2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sb2NhbGUuc2VydmljZSc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGRXcmFwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi9keW5hbWljLWZpZWxkLXdyYXBwZXIuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2R5bmFtaWMtZmllbGQtYmFzZS5jb21wb25lbnQnO1xuXG4vKipcbiAqIENvbmZpZ3VyYcOnw6NvIGRlIG3DoXNjYXJhIGRlIGRhdGV0aW1lIHBvciBsb2NhbGVcbiAqL1xuaW50ZXJmYWNlIERhdGV0aW1lTWFza0NvbmZpZyB7XG4gIG1hc2s6IHN0cmluZztcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgZm9ybWF0OiAnZG15JyB8ICdtZHknO1xufVxuXG5jb25zdCBEQVRFVElNRV9NQVNLX0NPTkZJR1M6IFJlY29yZDxTdXBwb3J0ZWRMYW5ndWFnZSwgRGF0ZXRpbWVNYXNrQ29uZmlnPiA9IHtcbiAgJ3B0LUJSJzogeyBtYXNrOiAnOTkvOTkvOTk5OSA5OTo5OScsIHBsYWNlaG9sZGVyOiAnZGQvbW0vYWFhYSBISDptbScsIGZvcm1hdDogJ2RteScgfSxcbiAgJ2VuLVVTJzogeyBtYXNrOiAnOTkvOTkvOTk5OSA5OTo5OScsIHBsYWNlaG9sZGVyOiAnbW0vZGQveXl5eSBISDptbScsIGZvcm1hdDogJ21keScgfSxcbiAgJ2VzLUVTJzogeyBtYXNrOiAnOTkvOTkvOTk5OSA5OTo5OScsIHBsYWNlaG9sZGVyOiAnZGQvbW0vYWFhYSBISDptbScsIGZvcm1hdDogJ2RteScgfVxufTtcblxuLyoqXG4gKiBEeW5hbWljRmllbGREYXRldGltZUNvbXBvbmVudFxuICpcbiAqIE8gRm9ybUNvbnRyb2wudmFsdWUgU0VNUFJFIGFybWF6ZW5hIG8gZGF0ZXRpbWUgbm8gZm9ybWF0byBJU086IFwieXl5eS1NTS1kZFRISDptbTpzcy5zc3NaXCIuXG4gKiBBIHZhcmnDoXZlbCBgZGlzcGxheVZhbHVlYCBtYW50w6ltIG8gdmFsb3IgZm9ybWF0YWRvIG5vIGxvY2FsZSBkbyB1c3XDoXJpbyBwYXJhIGV4aWJpw6fDo28gbm8gaW5wdXQuXG4gKiBJc3NvIGdhcmFudGUgcXVlIHF1YWxxdWVyIGNvbXBvbmVudGUgcXVlIGFjZXNzZSBmb3JtLnZhbHVlIHJlY2ViYSBvIHZhbG9yIHByb250byBwYXJhIG8gYmFja2VuZC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2lhLWR5bmFtaWMtZmllbGQtZGF0ZXRpbWUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIElucHV0TWFza01vZHVsZSxcbiAgICBDYWxlbmRhck1vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBEeW5hbWljRmllbGRXcmFwcGVyQ29tcG9uZW50XG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPHNpYS1keW5hbWljLWZpZWxkLXdyYXBwZXIgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFttb2RlXT1cIm1vZGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRldGltZS1maWVsZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXRpbWUtaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICA8cC1pbnB1dG1hc2tcbiAgICAgICAgICAgIFtpbnB1dElkXT1cImZpZWxkLmZpZWxkXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGlzcGxheVZhbHVlXCJcbiAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgICAgICAgICAgW21hc2tdPVwiZGF0ZXRpbWVNYXNrXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnZXRQbGFjZWhvbGRlcigpXCJcbiAgICAgICAgICAgIHNsb3RDaGFyPVwiX1wiXG4gICAgICAgICAgICBbYXV0b0NsZWFyXT1cImZhbHNlXCJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJkYXRldGltZS1pbnB1dFwiXG4gICAgICAgICAgICBbY2xhc3MubmctaW52YWxpZF09XCJpc0ZpZWxkSW52YWxpZCgpXCJcbiAgICAgICAgICAgIFtjbGFzcy5uZy1kaXJ0eV09XCJpc0ZpZWxkRGlydHkoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNDb250cm9sRGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAob25Db21wbGV0ZSk9XCJvbkRpc3BsYXlWYWx1ZUNvbXBsZXRlKClcIlxuICAgICAgICAgICAgKG9uQmx1cik9XCJvbkRpc3BsYXlWYWx1ZUJsdXIoKVwiPlxuICAgICAgICAgIDwvcC1pbnB1dG1hc2s+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGV0aW1lLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICBpY29uPVwicGkgcGktY2FsZW5kYXJcIlxuICAgICAgICAgICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICBbcm91bmRlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwidG9nZ2xlQ2FsZW5kYXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHBUb29sdGlwPVwiQWJyaXIgY2FsZW5kw6FyaW9cIlxuICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIj5cbiAgICAgICAgICAgIDwvcC1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHAtY2FsZW5kYXJcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd0NhbGVuZGFyXCJcbiAgICAgICAgICAgICNjYWxlbmRhclBpY2tlclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjYWxlbmRhclZhbHVlXCJcbiAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgICAgICAgICAgW2RhdGVGb3JtYXRdPVwiY3VycmVudERhdGVGb3JtYXRcIlxuICAgICAgICAgICAgW3Nob3dUaW1lXT1cInRydWVcIlxuICAgICAgICAgICAgW3Nob3dTZWNvbmRzXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtob3VyRm9ybWF0XT1cIicyNCdcIlxuICAgICAgICAgICAgW3Nob3dCdXR0b25CYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgIFtpbmxpbmVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3Nob3dJY29uXT1cImZhbHNlXCJcbiAgICAgICAgICAgIChvblNlbGVjdCk9XCJvbkNhbGVuZGFyU2VsZWN0KCRldmVudClcIlxuICAgICAgICAgICAgKG9uQ2xlYXJDbGljayk9XCJvbkNhbGVuZGFyQ2xlYXIoKVwiXG4gICAgICAgICAgICAob25IaWRlKT1cInNob3dDYWxlbmRhciA9IGZhbHNlXCJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJoaWRkZW4tY2FsZW5kYXItaW5wdXRcIlxuICAgICAgICAgICAgW3N0eWxlXT1cInsncG9zaXRpb24nOiAnYWJzb2x1dGUnLCAnd2lkdGgnOiAnMCcsICdoZWlnaHQnOiAnMCcsICdvdmVyZmxvdyc6ICdoaWRkZW4nLCAnb3BhY2l0eSc6ICcwJywgJ3BvaW50ZXItZXZlbnRzJzogJ25vbmUnfVwiPlxuICAgICAgICAgIDwvcC1jYWxlbmRhcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NpYS1keW5hbWljLWZpZWxkLXdyYXBwZXI+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICAuZGF0ZXRpbWUtZmllbGQge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuXG4gICAgLmRhdGV0aW1lLWlucHV0LWdyb3VwIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgICA6Om5nLWRlZXAgcC1pbnB1dG1hc2sge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAgICAgaW5wdXQge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDIuNXJlbTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuZGF0ZXRpbWUtYnV0dG9ucyB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgcmlnaHQ6IDRweDtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiAycHg7XG4gICAgICAgIHotaW5kZXg6IDEwO1xuICAgICAgfVxuXG4gICAgICA6Om5nLWRlZXAgLnAtYnV0dG9uIHtcbiAgICAgICAgd2lkdGg6IDJyZW0gIWltcG9ydGFudDtcbiAgICAgICAgaGVpZ2h0OiAycmVtICFpbXBvcnRhbnQ7XG4gICAgICAgIG1pbi13aWR0aDogMnJlbSAhaW1wb3J0YW50O1xuICAgICAgICBtaW4taGVpZ2h0OiAycmVtICFpbXBvcnRhbnQ7XG4gICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50O1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94ICFpbXBvcnRhbnQ7XG5cbiAgICAgICAgLnAtYnV0dG9uLWljb24ge1xuICAgICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICAgICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW0gIWltcG9ydGFudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5wLWJ1dHRvbi1sYWJlbCB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmhpZGRlbi1jYWxlbmRhci1pbnB1dCxcbiAgICA6Om5nLWRlZXAgLmhpZGRlbi1jYWxlbmRhci1pbnB1dCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDtcbiAgICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgICBoZWlnaHQ6IDAgIWltcG9ydGFudDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICAgIG9wYWNpdHk6IDAgIWltcG9ydGFudDtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDtcblxuICAgICAgaW5wdXQge1xuICAgICAgICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICAgICAgICBoZWlnaHQ6IDAgIWltcG9ydGFudDtcbiAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICA+IHAtY2FsZW5kYXIge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gICAgICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICAgICAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY0ZpZWxkRGF0ZXRpbWVDb21wb25lbnQgZXh0ZW5kcyBEeW5hbWljRmllbGRCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdjYWxlbmRhclBpY2tlcicpIGNhbGVuZGFyUGlja2VyITogQ2FsZW5kYXI7XG5cbiAgY3VycmVudERhdGVGb3JtYXQgPSAnZGQvbW0veXknO1xuICBkYXRldGltZU1hc2sgPSAnOTkvOTkvOTk5OSA5OTo5OSc7XG4gIGNhbGVuZGFyVmFsdWU6IERhdGUgfCBudWxsID0gbnVsbDtcblxuICAvKiogVmFsb3IgZGUgZXhpYmnDp8OjbyBubyBmb3JtYXRvIGxvY2FsZSAoZXg6IFwiMTgvMDUvMjAyNiAxNDozMFwiIHBhcmEgcHQtQlIpICovXG4gIGRpc3BsYXlWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIENvbnRyb2xhIGEgcmVuZGVyaXphw6fDo28gZG8gcC1jYWxlbmRhciAoc8OzIGV4aXN0ZSBubyBET00gcXVhbmRvIG5lY2Vzc8OhcmlvKSAqL1xuICBzaG93Q2FsZW5kYXIgPSBmYWxzZTtcblxuICBwcml2YXRlIGxhbmdTdWI/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgdmFsdWVTdWI/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgY3VycmVudExvY2FsZTogU3VwcG9ydGVkTGFuZ3VhZ2UgPSAncHQtQlInO1xuICBwcml2YXRlIHVwZGF0aW5nRnJvbUNvbnRyb2wgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsZVNlcnZpY2U6IExvY2FsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKHRyYW5zbGF0aW9uU2VydmljZSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRMb2NhbGUgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5nZXRDdXJyZW50TGFuZ3VhZ2UoKTtcbiAgICB0aGlzLnVwZGF0ZURhdGV0aW1lRm9ybWF0KCk7XG5cbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldCh0aGlzLmZpZWxkLmZpZWxkKTtcbiAgICBpZiAoY29udHJvbCkge1xuICAgICAgLy8gSW5pY2lhbGl6YXIgZGlzcGxheVZhbHVlIGEgcGFydGlyIGRvIHZhbG9yIElTTyBkbyBjb250cm9sXG4gICAgICB0aGlzLnN5bmNEaXNwbGF5RnJvbUNvbnRyb2woY29udHJvbC52YWx1ZSk7XG5cbiAgICAgIC8vIE9ic2VydmFyIG11ZGFuw6dhcyBleHRlcm5hcyBubyBjb250cm9sIChwYXRjaFZhbHVlLCBzZXRWYWx1ZSlcbiAgICAgIHRoaXMudmFsdWVTdWIgPSBjb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICBpZiAodGhpcy51cGRhdGluZ0Zyb21Db250cm9sKSB7IHJldHVybjsgfVxuICAgICAgICB0aGlzLnN5bmNEaXNwbGF5RnJvbUNvbnRyb2wodmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5sYW5nU3ViID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuY3VycmVudExhbmd1YWdlJC5zdWJzY3JpYmUoKGxhbmcpID0+IHtcbiAgICAgIHRoaXMuY3VycmVudExvY2FsZSA9IGxhbmc7XG4gICAgICB0aGlzLnVwZGF0ZURhdGV0aW1lRm9ybWF0KCk7XG4gICAgICAvLyBSZS1mb3JtYXRhciBvIGRpc3BsYXkgY29tIG8gbm92byBsb2NhbGVcbiAgICAgIGNvbnN0IGN0cmwgPSB0aGlzLmZvcm0uZ2V0KHRoaXMuZmllbGQuZmllbGQpO1xuICAgICAgaWYgKGN0cmwpIHtcbiAgICAgICAgdGhpcy5zeW5jRGlzcGxheUZyb21Db250cm9sKGN0cmwudmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5sYW5nU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudmFsdWVTdWI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogU2luY3Jvbml6YSBvIGRpc3BsYXlWYWx1ZSBhIHBhcnRpciBkbyB2YWxvciBJU08gZG8gRm9ybUNvbnRyb2wuXG4gICAqIEFjZWl0YTogSVNPIHN0cmluZywgRGF0ZSwgbG9jYWxlIHN0cmluZywgb3UgbnVsbC5cbiAgICovXG4gIHByaXZhdGUgc3luY0Rpc3BsYXlGcm9tQ29udHJvbCh2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBjb25zdCBpc28gPSB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgICAgdGhpcy5zZXRDb250cm9sVmFsdWUoaXNvKTtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGhpcy5pc29Ub0xvY2FsZSh2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcyA9IFN0cmluZyh2YWx1ZSk7XG5cbiAgICAvLyBJU08gZGF0ZXRpbWUgc3RyaW5nIChjb250w6ltIFQpXG4gICAgaWYgKHMuaW5jbHVkZXMoJ1QnKSkge1xuICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKHMpO1xuICAgICAgaWYgKCFpc05hTihkLmdldFRpbWUoKSkpIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB0aGlzLmlzb1RvTG9jYWxlKGQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZvcm1hdG8gbG9jYWxlIFwiZGQvTU0veXl5eSBISDptbVwiIG91IFwiTU0vZGQveXl5eSBISDptbVwiXG4gICAgaWYgKHMubWF0Y2goL15cXGR7Mn1cXC9cXGR7Mn1cXC9cXGR7NH0gXFxkezJ9OlxcZHsyfSQvKSkge1xuICAgICAgY29uc3QgaXNvID0gdGhpcy5sb2NhbGVUb0lzbyhzKTtcbiAgICAgIGlmIChpc28pIHtcbiAgICAgICAgdGhpcy5zZXRDb250cm9sVmFsdWUoaXNvKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBzO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbG9yIGluY29tcGxldG9cbiAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHMuaW5jbHVkZXMoJ18nKSA/IG51bGwgOiBudWxsO1xuICB9XG5cbiAgLyoqIENoYW1hZG8gcXVhbmRvIG8gdXN1w6FyaW8gY29tcGxldGEgYSBkaWdpdGHDp8OjbyBkYSBtw6FzY2FyYSAqL1xuICBvbkRpc3BsYXlWYWx1ZUNvbXBsZXRlKCk6IHZvaWQge1xuICAgIHRoaXMuc3luY0NvbnRyb2xGcm9tRGlzcGxheSgpO1xuICB9XG5cbiAgLyoqIENoYW1hZG8gcXVhbmRvIG8gaW5wdXQgcGVyZGUgZm9jbyAqL1xuICBvbkRpc3BsYXlWYWx1ZUJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5zeW5jQ29udHJvbEZyb21EaXNwbGF5KCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydGUgbyBkaXNwbGF5VmFsdWUgKGxvY2FsZSkgcGFyYSBJU08gZSBzZXRhIG5vIEZvcm1Db250cm9sLlxuICAgKi9cbiAgcHJpdmF0ZSBzeW5jQ29udHJvbEZyb21EaXNwbGF5KCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KHRoaXMuZmllbGQuZmllbGQpO1xuICAgIGlmICghY29udHJvbCkgeyByZXR1cm47IH1cblxuICAgIGlmICghdGhpcy5kaXNwbGF5VmFsdWUgfHwgdGhpcy5kaXNwbGF5VmFsdWUuaW5jbHVkZXMoJ18nKSkge1xuICAgICAgdGhpcy5zZXRDb250cm9sVmFsdWUobnVsbCk7XG4gICAgICBjb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXNvID0gdGhpcy5sb2NhbGVUb0lzbyh0aGlzLmRpc3BsYXlWYWx1ZSk7XG4gICAgaWYgKGlzbykge1xuICAgICAgdGhpcy5zZXRDb250cm9sVmFsdWUoaXNvKTtcbiAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICB9XG4gIH1cblxuICAvKiogU2V0YSBvIHZhbG9yIG5vIGNvbnRyb2wgc2VtIGRpc3BhcmFyIG8gc3Vic2NyaWJlciBpbnRlcm5vICovXG4gIHByaXZhdGUgc2V0Q29udHJvbFZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQodGhpcy5maWVsZC5maWVsZCk7XG4gICAgaWYgKCFjb250cm9sKSB7IHJldHVybjsgfVxuICAgIHRoaXMudXBkYXRpbmdGcm9tQ29udHJvbCA9IHRydWU7XG4gICAgY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgdGhpcy51cGRhdGluZ0Zyb21Db250cm9sID0gZmFsc2U7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBDT05WRVJTw5VFUyA9PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKiBDb252ZXJ0ZSBEYXRlIHBhcmEgbG9jYWxlIGRpc3BsYXkgc3RyaW5nICovXG4gIHByaXZhdGUgaXNvVG9Mb2NhbGUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF5ID0gU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IG1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgeWVhciA9IFN0cmluZyhkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgIGNvbnN0IGhvdXJzID0gU3RyaW5nKGRhdGUuZ2V0SG91cnMoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCBtaW51dGVzID0gU3RyaW5nKGRhdGUuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IGNvbmZpZyA9IERBVEVUSU1FX01BU0tfQ09ORklHU1t0aGlzLmN1cnJlbnRMb2NhbGVdIHx8IERBVEVUSU1FX01BU0tfQ09ORklHU1sncHQtQlInXTtcbiAgICByZXR1cm4gY29uZmlnLmZvcm1hdCA9PT0gJ21keSdcbiAgICAgID8gYCR7bW9udGh9LyR7ZGF5fS8ke3llYXJ9ICR7aG91cnN9OiR7bWludXRlc31gXG4gICAgICA6IGAke2RheX0vJHttb250aH0vJHt5ZWFyfSAke2hvdXJzfToke21pbnV0ZXN9YDtcbiAgfVxuXG4gIC8qKiBDb252ZXJ0ZSBsb2NhbGUgc3RyaW5nIHBhcmEgSVNPIGRhdGV0aW1lIHN0cmluZyAqL1xuICBwcml2YXRlIGxvY2FsZVRvSXNvKGxvY2FsZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgcGFydHMgPSBsb2NhbGUuc3BsaXQoJyAnKTtcbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSAyKSB7IHJldHVybiBudWxsOyB9XG4gICAgY29uc3QgZGF0ZVBhcnRzID0gcGFydHNbMF0uc3BsaXQoJy8nKTtcbiAgICBjb25zdCB0aW1lUGFydHMgPSBwYXJ0c1sxXS5zcGxpdCgnOicpO1xuICAgIGlmIChkYXRlUGFydHMubGVuZ3RoICE9PSAzIHx8IHRpbWVQYXJ0cy5sZW5ndGggIT09IDIpIHsgcmV0dXJuIG51bGw7IH1cblxuICAgIGNvbnN0IGNvbmZpZyA9IERBVEVUSU1FX01BU0tfQ09ORklHU1t0aGlzLmN1cnJlbnRMb2NhbGVdIHx8IERBVEVUSU1FX01BU0tfQ09ORklHU1sncHQtQlInXTtcbiAgICBjb25zdCBbcDAsIHAxLCBwMl0gPSBkYXRlUGFydHMubWFwKHAgPT4gcGFyc2VJbnQocCwgMTApKTtcbiAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSBjb25maWcuZm9ybWF0ID09PSAnbWR5JyA/IFtwMSwgcDAsIHAyXSA6IFtwMCwgcDEsIHAyXTtcbiAgICBjb25zdCBob3VycyA9IHBhcnNlSW50KHRpbWVQYXJ0c1swXSwgMTApO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBwYXJzZUludCh0aW1lUGFydHNbMV0sIDEwKTtcblxuICAgIGlmIChpc05hTihkYXkpIHx8IGlzTmFOKG1vbnRoKSB8fCBpc05hTih5ZWFyKSB8fCBpc05hTihob3VycykgfHwgaXNOYU4obWludXRlcykpIHsgcmV0dXJuIG51bGw7IH1cbiAgICBpZiAobW9udGggPCAxIHx8IG1vbnRoID4gMTIgfHwgZGF5IDwgMSB8fCBkYXkgPiAzMSB8fCBob3VycyA8IDAgfHwgaG91cnMgPiAyMyB8fCBtaW51dGVzIDwgMCB8fCBtaW51dGVzID4gNTkpIHsgcmV0dXJuIG51bGw7IH1cblxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSwgaG91cnMsIG1pbnV0ZXMpO1xuICAgIHJldHVybiBpc05hTihkYXRlLmdldFRpbWUoKSkgPyBudWxsIDogZGF0ZS50b0lTT1N0cmluZygpO1xuICB9XG5cbiAgLyoqIENvbnZlcnRlIGxvY2FsZSBzdHJpbmcgcGFyYSBEYXRlICovXG4gIHByaXZhdGUgbG9jYWxlVG9EYXRlKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3QgaXNvID0gdGhpcy5sb2NhbGVUb0lzbyh2YWx1ZSk7XG4gICAgaWYgKCFpc28pIHsgcmV0dXJuIG51bGw7IH1cbiAgICByZXR1cm4gbmV3IERhdGUoaXNvKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09IENBTEVOREFSID09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRldGltZUZvcm1hdCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSBEQVRFVElNRV9NQVNLX0NPTkZJR1NbdGhpcy5jdXJyZW50TG9jYWxlXSB8fCBEQVRFVElNRV9NQVNLX0NPTkZJR1NbJ3B0LUJSJ107XG4gICAgdGhpcy5kYXRldGltZU1hc2sgPSBjb25maWcubWFzaztcbiAgICB0aGlzLmN1cnJlbnREYXRlRm9ybWF0ID0gdGhpcy5maWVsZD8uZGF0ZUZvcm1hdCB8fCB0aGlzLmxvY2FsZVNlcnZpY2UuZ2V0UHJpbWVOR0RhdGVGb3JtYXQoKTtcbiAgfVxuXG4gIHRvZ2dsZUNhbGVuZGFyKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLmRpc3BsYXlWYWx1ZSAmJiAhdGhpcy5kaXNwbGF5VmFsdWUuaW5jbHVkZXMoJ18nKSkge1xuICAgICAgdGhpcy5jYWxlbmRhclZhbHVlID0gdGhpcy5sb2NhbGVUb0RhdGUodGhpcy5kaXNwbGF5VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhbGVuZGFyVmFsdWUgPSBuZXcgRGF0ZSgpO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd0NhbGVuZGFyID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNhbGVuZGFyUGlja2VyICYmIHRoaXMuY2FsZW5kYXJQaWNrZXIuaW5wdXRmaWVsZFZpZXdDaGlsZCkge1xuICAgICAgICB0aGlzLmNhbGVuZGFyUGlja2VyLmlucHV0ZmllbGRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25DYWxlbmRhclNlbGVjdChkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIGNvbnN0IGlzbyA9IGRhdGUudG9JU09TdHJpbmcoKTtcbiAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGhpcy5pc29Ub0xvY2FsZShkYXRlKTtcbiAgICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlKGlzbyk7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldCh0aGlzLmZpZWxkLmZpZWxkKTtcbiAgICAgIGlmIChjb250cm9sKSB7IGNvbnRyb2wubWFya0FzRGlydHkoKTsgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ2FsZW5kYXJDbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IG51bGw7XG4gICAgdGhpcy5zZXRDb250cm9sVmFsdWUobnVsbCk7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQodGhpcy5maWVsZC5maWVsZCk7XG4gICAgaWYgKGNvbnRyb2wpIHsgY29udHJvbC5tYXJrQXNEaXJ0eSgpOyB9XG4gIH1cblxuICBpc0NvbnRyb2xEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldCh0aGlzLmZpZWxkLmZpZWxkKTtcbiAgICByZXR1cm4gY29udHJvbCA/IGNvbnRyb2wuZGlzYWJsZWQgOiBmYWxzZTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldFBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZmllbGQucGxhY2Vob2xkZXIpIHsgcmV0dXJuIHRoaXMuZmllbGQucGxhY2Vob2xkZXI7IH1cbiAgICByZXR1cm4gREFURVRJTUVfTUFTS19DT05GSUdTW3RoaXMuY3VycmVudExvY2FsZV0/LnBsYWNlaG9sZGVyIHx8ICdkZC9tbS9hYWFhIEhIOm1tJztcbiAgfVxufVxuIl19
|