@seniorsistemas/components-ai 2.3.0-master-cf18cf97 → 2.4.0-master-bdd92d4e
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 -85
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-date.component.mjs +169 -48
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-datetime.component.mjs +162 -47
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-time.component.mjs +144 -23
- package/fesm2022/seniorsistemas-components-ai.mjs +503 -199
- package/fesm2022/seniorsistemas-components-ai.mjs.map +1 -1
- package/lib/components/dynamic-form/fields/dynamic-field-date.component.d.ts +34 -4
- package/lib/components/dynamic-form/fields/dynamic-field-datetime.component.d.ts +32 -4
- package/lib/components/dynamic-form/fields/dynamic-field-time.component.d.ts +30 -2
- package/package.json +1 -1
|
@@ -194,55 +194,42 @@ export class DynamicFormComponent {
|
|
|
194
194
|
processEntityData(entity) {
|
|
195
195
|
const data = { ...entity };
|
|
196
196
|
this.allFields.forEach(field => {
|
|
197
|
+
// Date: pass ISO string directly — field component handles display conversion
|
|
197
198
|
if (field.type === 'date' && data[field.field]) {
|
|
198
199
|
const v = data[field.field];
|
|
199
|
-
if (
|
|
200
|
-
|
|
201
|
-
const parts = v.substring(0, 10).split('-');
|
|
202
|
-
if (parts.length === 3) {
|
|
203
|
-
const [year, month, day] = parts;
|
|
204
|
-
const locale = this.translationService.getCurrentLanguage();
|
|
205
|
-
data[field.field] = locale === 'en-US'
|
|
206
|
-
? `${month}/${day}/${year}`
|
|
207
|
-
: `${day}/${month}/${year}`;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
else if (v instanceof Date) {
|
|
211
|
-
const day = String(v.getDate()).padStart(2, '0');
|
|
212
|
-
const month = String(v.getMonth() + 1).padStart(2, '0');
|
|
213
|
-
const year = String(v.getFullYear());
|
|
214
|
-
const locale = this.translationService.getCurrentLanguage();
|
|
215
|
-
data[field.field] = locale === 'en-US'
|
|
216
|
-
? `${month}/${day}/${year}`
|
|
217
|
-
: `${day}/${month}/${year}`;
|
|
200
|
+
if (v instanceof Date) {
|
|
201
|
+
data[field.field] = `${v.getFullYear()}-${String(v.getMonth() + 1).padStart(2, '0')}-${String(v.getDate()).padStart(2, '0')}`;
|
|
218
202
|
}
|
|
203
|
+
// String values (ISO "yyyy-MM-dd") are passed as-is to the field component
|
|
219
204
|
}
|
|
205
|
+
// Time: normalize to "HH:mm:ss" — field component handles display conversion
|
|
220
206
|
if (field.type === 'time' && data[field.field]) {
|
|
221
207
|
const v = data[field.field];
|
|
222
|
-
if (
|
|
208
|
+
if (v instanceof Date) {
|
|
209
|
+
data[field.field] = `${String(v.getHours()).padStart(2, '0')}:${String(v.getMinutes()).padStart(2, '0')}:00`;
|
|
210
|
+
}
|
|
211
|
+
else if (typeof v === 'string') {
|
|
223
212
|
const parts = v.split(':');
|
|
224
|
-
if (parts.length
|
|
225
|
-
data[field.field] = `${parts[0].padStart(2, '0')}:${parts[1].padStart(2, '0')}`;
|
|
213
|
+
if (parts.length === 2) {
|
|
214
|
+
data[field.field] = `${parts[0].padStart(2, '0')}:${parts[1].padStart(2, '0')}:00`;
|
|
226
215
|
}
|
|
227
|
-
|
|
228
|
-
else if (v instanceof Date) {
|
|
229
|
-
data[field.field] = `${String(v.getHours()).padStart(2, '0')}:${String(v.getMinutes()).padStart(2, '0')}`;
|
|
216
|
+
// "HH:mm:ss" is passed as-is
|
|
230
217
|
}
|
|
231
218
|
}
|
|
219
|
+
// Datetime: normalize to ISO string — field component handles display conversion
|
|
232
220
|
if (field.type === 'datetime' && data[field.field]) {
|
|
233
221
|
const v = data[field.field];
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
const day = String(d.getDate()).padStart(2, '0');
|
|
237
|
-
const month = String(d.getMonth() + 1).padStart(2, '0');
|
|
238
|
-
const year = String(d.getFullYear());
|
|
239
|
-
const hours = String(d.getHours()).padStart(2, '0');
|
|
240
|
-
const minutes = String(d.getMinutes()).padStart(2, '0');
|
|
241
|
-
const locale = this.translationService.getCurrentLanguage();
|
|
242
|
-
data[field.field] = locale === 'en-US'
|
|
243
|
-
? `${month}/${day}/${year} ${hours}:${minutes}`
|
|
244
|
-
: `${day}/${month}/${year} ${hours}:${minutes}`;
|
|
222
|
+
if (v instanceof Date) {
|
|
223
|
+
data[field.field] = v.toISOString();
|
|
245
224
|
}
|
|
225
|
+
else if (typeof v === 'string' && !v.includes('T')) {
|
|
226
|
+
// Try to parse non-ISO string
|
|
227
|
+
const d = new Date(v);
|
|
228
|
+
if (!isNaN(d.getTime())) {
|
|
229
|
+
data[field.field] = d.toISOString();
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// ISO strings with T are passed as-is
|
|
246
233
|
}
|
|
247
234
|
if (field.type === 'lookup' && data[field.field]) {
|
|
248
235
|
const v = data[field.field];
|
|
@@ -291,49 +278,20 @@ export class DynamicFormComponent {
|
|
|
291
278
|
out[field.field] = null;
|
|
292
279
|
}
|
|
293
280
|
else if (field.type === 'date') {
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
const parts = v.split('/');
|
|
297
|
-
const locale = this.translationService.getCurrentLanguage();
|
|
298
|
-
const [day, month, year] = locale === 'en-US'
|
|
299
|
-
? [parts[1], parts[0], parts[2]]
|
|
300
|
-
: [parts[0], parts[1], parts[2]];
|
|
301
|
-
out[field.field] = `${year}-${month}-${day}`;
|
|
302
|
-
}
|
|
303
|
-
else if (v instanceof Date) {
|
|
304
|
-
out[field.field] = `${v.getFullYear()}-${String(v.getMonth() + 1).padStart(2, '0')}-${String(v.getDate()).padStart(2, '0')}`;
|
|
305
|
-
}
|
|
306
|
-
else if (!v || (typeof v === 'string' && v.includes('_'))) {
|
|
281
|
+
// Value is already in ISO format "yyyy-MM-dd" from the field component
|
|
282
|
+
if (!v || (typeof v === 'string' && v.includes('_'))) {
|
|
307
283
|
out[field.field] = null;
|
|
308
284
|
}
|
|
309
285
|
}
|
|
310
286
|
else if (field.type === 'time') {
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
}
|
|
314
|
-
else if (v instanceof Date) {
|
|
315
|
-
out[field.field] = `${String(v.getHours()).padStart(2, '0')}:${String(v.getMinutes()).padStart(2, '0')}:00`;
|
|
316
|
-
}
|
|
317
|
-
else if (!v || (typeof v === 'string' && v.includes('_'))) {
|
|
287
|
+
// Value is already in ISO format "HH:mm:ss" from the field component
|
|
288
|
+
if (!v || (typeof v === 'string' && v.includes('_'))) {
|
|
318
289
|
out[field.field] = null;
|
|
319
290
|
}
|
|
320
291
|
}
|
|
321
292
|
else if (field.type === 'datetime') {
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
const [datePart, timePart] = v.split(' ');
|
|
325
|
-
const dateParts = datePart.split('/');
|
|
326
|
-
const locale = this.translationService.getCurrentLanguage();
|
|
327
|
-
const [day, month, year] = locale === 'en-US'
|
|
328
|
-
? [parseInt(dateParts[1], 10), parseInt(dateParts[0], 10), parseInt(dateParts[2], 10)]
|
|
329
|
-
: [parseInt(dateParts[0], 10), parseInt(dateParts[1], 10), parseInt(dateParts[2], 10)];
|
|
330
|
-
const [hours, minutes] = timePart.split(':').map(p => parseInt(p, 10));
|
|
331
|
-
out[field.field] = new Date(year, month - 1, day, hours, minutes).toISOString();
|
|
332
|
-
}
|
|
333
|
-
else if (v instanceof Date) {
|
|
334
|
-
out[field.field] = v.toISOString();
|
|
335
|
-
}
|
|
336
|
-
else if (!v || (typeof v === 'string' && v.includes('_'))) {
|
|
293
|
+
// Value is already in ISO format from the field component
|
|
294
|
+
if (!v || (typeof v === 'string' && v.includes('_'))) {
|
|
337
295
|
out[field.field] = null;
|
|
338
296
|
}
|
|
339
297
|
}
|
|
@@ -493,17 +451,8 @@ export class DynamicFormComponent {
|
|
|
493
451
|
if (field?.type === 'lookup' && value && typeof value === 'object') {
|
|
494
452
|
control.setValue(value);
|
|
495
453
|
}
|
|
496
|
-
else if (field?.type === 'date' && value && typeof value === 'string') {
|
|
497
|
-
const parts = value.substring(0, 10).split('-');
|
|
498
|
-
if (parts.length === 3) {
|
|
499
|
-
const d = new Date(+parts[0], +parts[1] - 1, +parts[2]);
|
|
500
|
-
control.setValue(!isNaN(d.getTime()) ? d : value);
|
|
501
|
-
}
|
|
502
|
-
else {
|
|
503
|
-
control.setValue(value);
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
454
|
else {
|
|
455
|
+
// Date, time, datetime values are already in ISO format in the control
|
|
507
456
|
control.setValue(value);
|
|
508
457
|
}
|
|
509
458
|
}
|
|
@@ -529,9 +478,7 @@ export class DynamicFormComponent {
|
|
|
529
478
|
if (field?.type === 'lookup' && value && typeof value !== 'object') {
|
|
530
479
|
value = { id: value };
|
|
531
480
|
}
|
|
532
|
-
|
|
533
|
-
value = `${value.getFullYear()}-${String(value.getMonth() + 1).padStart(2, '0')}-${String(value.getDate()).padStart(2, '0')}`;
|
|
534
|
-
}
|
|
481
|
+
// Date, time, datetime values are already in ISO format from the field component
|
|
535
482
|
this.fieldSave.emit({ field: fieldName, value });
|
|
536
483
|
}
|
|
537
484
|
cancelInlineEdit() {
|
|
@@ -681,4 +628,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
681
628
|
}], fieldSave: [{
|
|
682
629
|
type: Output
|
|
683
630
|
}] } });
|
|
684
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMtYWkvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9keW5hbWljLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy1haS9zcmMvbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUEwQixtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBVzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMxRixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwyQ0FBMkMs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Qjt3QkFDM0IseUJBQXlCO3dCQUN6Qiw2QkFBNkI7d0JBQzdCLDZCQUE2Qjt3QkFDN0IsMkJBQTJCO3dCQUMzQiw2QkFBNkI7d0JBQzdCLHlCQUF5Qjt3QkFDekIsNkJBQTZCO3dCQUM3QixnQ0FBZ0M7d0JBQ2hDLDBCQUEwQjtxQkFDM0I7dUtBS1EsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUksU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFBhbmVsTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9wYW5lbCc7XG5pbXBvcnQgeyBEaWFsb2dNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XG5pbXBvcnQgeyBEcmF3ZXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RyYXdlcic7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQge1xuICBEeW5hbWljRm9ybUZpZWxkQ29uZmlnLFxuICBEeW5hbWljRm9ybUZpZWxkU2l6ZSxcbiAgRHluYW1pY0Zvcm1TZWN0aW9uLFxuICBEeW5hbWljRm9ybURpYWxvZ0NvbmZpZyxcbiAgRHluYW1pY0Zvcm1EcmF3ZXJDb25maWdcbn0gZnJvbSAnLi9tb2RlbHMvZHluYW1pYy1mb3JtLm1vZGVscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE1hc2tTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFzay5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbGUuc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkVGV4dENvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQtdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkTnVtYmVyQ29tcG9uZW50IH0gZnJvbSAnLi9maWVsZHMvZHluYW1pYy1maWVsZC1udW1iZXIuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZERhdGVDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLWRhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZERhdGV0aW1lQ29tcG9uZW50IH0gZnJvbSAnLi9maWVsZHMvZHluYW1pYy1maWVsZC1kYXRldGltZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLWRyb3Bkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGRMb29rdXBDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLWxvb2t1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkVGV4dGFyZWFDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLXRleHRhcmVhLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGRUaW1lQ29tcG9uZW50IH0gZnJvbSAnLi9maWVsZHMvZHluYW1pYy1maWVsZC10aW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGRDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQtY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZE11bHRpc2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi9maWVsZHMvZHluYW1pYy1maWVsZC1tdWx0aXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkSW1hZ2VDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLWltYWdlLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NpYS1keW5hbWljLWZvcm0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgUGFuZWxNb2R1bGUsXG4gICAgRGlhbG9nTW9kdWxlLFxuICAgIERyYXdlck1vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgICBEeW5hbWljRmllbGRUZXh0Q29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZE51bWJlckNvbXBvbmVudCxcbiAgICBEeW5hbWljRmllbGREYXRlQ29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZERhdGV0aW1lQ29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZERyb3Bkb3duQ29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZExvb2t1cENvbXBvbmVudCxcbiAgICBEeW5hbWljRmllbGRUZXh0YXJlYUNvbXBvbmVudCxcbiAgICBEeW5hbWljRmllbGRUaW1lQ29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZENoZWNrYm94Q29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZE11bHRpc2VsZWN0Q29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZEltYWdlQ29tcG9uZW50XG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZHluYW1pYy1mb3JtLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgc2VjdGlvbnM6IER5bmFtaWNGb3JtU2VjdGlvbltdID0gW107XG4gIEBJbnB1dCgpIGVudGl0eURhdGE6IGFueSA9IG51bGw7XG4gIEBJbnB1dCgpIG1vZGU6ICdmb3JtJyB8ICdpbmxpbmUtZWRpdCcgPSAnZm9ybSc7XG5cbiAgLy8gRGlzcGxheSBNb2RlIOKAlCBvcHRpb25hbC4gSWYgbm90IHNldCwgcmVuZGVycyBpbmxpbmUgd2l0aG91dCBidXR0b25zLlxuICBASW5wdXQoKSBkaXNwbGF5TW9kZT86ICdkaWFsb2cnIHwgJ2RyYXdlcic7XG4gIEBJbnB1dCgpIHZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGlhbG9nQ29uZmlnOiBEeW5hbWljRm9ybURpYWxvZ0NvbmZpZyA9IHt9O1xuICBASW5wdXQoKSBkcmF3ZXJDb25maWc6IER5bmFtaWNGb3JtRHJhd2VyQ29uZmlnID0ge307XG5cbiAgLy8gQnV0dG9uIENvbmZpZ3VyYXRpb25cbiAgQElucHV0KCkgc2hvd1N1Ym1pdEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93Q2FuY2VsQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN1Ym1pdEJ1dHRvbkxhYmVsPzogc3RyaW5nO1xuICBASW5wdXQoKSBjYW5jZWxCdXR0b25MYWJlbD86IHN0cmluZztcbiAgQElucHV0KCkgc3VibWl0QnV0dG9uSWNvbjogc3RyaW5nID0gJ3BpIHBpLWNoZWNrJztcbiAgQElucHV0KCkgY2FuY2VsQnV0dG9uSWNvbjogc3RyaW5nID0gJ3BpIHBpLXRpbWVzJztcblxuICBAT3V0cHV0KCkgZm9ybVJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtR3JvdXA+KCk7XG4gIEBPdXRwdXQoKSBmb3JtU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgb25DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBmaWVsZFNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZmllbGQ6IHN0cmluZywgdmFsdWU6IGFueSB9PigpO1xuXG4gIGZvcm0hOiBGb3JtR3JvdXA7XG4gIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBJbmxpbmUgZWRpdCBzdGF0ZVxuICBlZGl0aW5nRmllbGQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBzYXZpbmdGaWVsZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIC0tLSBDb21wdXRlZCBwcm9wZXJ0aWVzIC0tLVxuXG4gIGdldCBhbGxGaWVsZHMoKTogRHluYW1pY0Zvcm1GaWVsZENvbmZpZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5zZWN0aW9ucy5mbGF0TWFwKHNlY3Rpb24gPT4gc2VjdGlvbi5maWVsZHMpO1xuICB9XG5cbiAgZ2V0IGlzSW5saW5lRWRpdE1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ2lubGluZS1lZGl0JztcbiAgfVxuXG4gIGdldCBpc0RpYWxvZ01vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheU1vZGUgPT09ICdkaWFsb2cnO1xuICB9XG5cbiAgZ2V0IGlzRHJhd2VyTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TW9kZSA9PT0gJ2RyYXdlcic7XG4gIH1cblxuICBnZXQgaXNJbmxpbmVNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5kaXNwbGF5TW9kZTtcbiAgfVxuXG4gIC8vIERpYWxvZyBjb25maWcgd2l0aCBkZWZhdWx0c1xuICBnZXQgZGlhbG9nSGVhZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlhbG9nQ29uZmlnLmhlYWRlciB8fCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ2Rlc2lnbi5jb21wb25lbnRzX2FpLmZvcm0nKTtcbiAgfVxuICBnZXQgZGlhbG9nV2lkdGgoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZGlhbG9nQ29uZmlnLndpZHRoIHx8ICc2MDBweCc7IH1cbiAgZ2V0IGRpYWxvZ0RyYWdnYWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZGlhbG9nQ29uZmlnLmRyYWdnYWJsZSA/PyBmYWxzZTsgfVxuICBnZXQgZGlhbG9nUmVzaXphYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5kaWFsb2dDb25maWcucmVzaXphYmxlID8/IGZhbHNlOyB9XG4gIGdldCBkaWFsb2dNYXhpbWl6YWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZGlhbG9nQ29uZmlnLm1heGltaXphYmxlID8/IGZhbHNlOyB9XG4gIGdldCBkaWFsb2dDbG9zZU9uRXNjYXBlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5kaWFsb2dDb25maWcuY2xvc2VPbkVzY2FwZSA/PyB0cnVlOyB9XG4gIGdldCBkaWFsb2dEaXNtaXNzYWJsZU1hc2soKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmRpYWxvZ0NvbmZpZy5kaXNtaXNzYWJsZU1hc2sgPz8gZmFsc2U7IH1cblxuICAvLyBEcmF3ZXIgY29uZmlnIHdpdGggZGVmYXVsdHNcbiAgZ2V0IGRyYXdlckhlYWRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRyYXdlckNvbmZpZy5oZWFkZXIgfHwgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdkZXNpZ24uY29tcG9uZW50c19haS5mb3JtJyk7XG4gIH1cbiAgZ2V0IGRyYXdlclBvc2l0aW9uKCk6ICdsZWZ0JyB8ICdyaWdodCcgfCAndG9wJyB8ICdib3R0b20nIHsgcmV0dXJuIHRoaXMuZHJhd2VyQ29uZmlnLnBvc2l0aW9uIHx8ICdyaWdodCc7IH1cbiAgZ2V0IGRyYXdlclNob3dDbG9zZUljb24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmRyYXdlckNvbmZpZy5zaG93Q2xvc2VJY29uID8/IHRydWU7IH1cbiAgZ2V0IGRyYXdlckNsb3NlT25Fc2NhcGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmRyYXdlckNvbmZpZy5jbG9zZU9uRXNjYXBlID8/IHRydWU7IH1cbiAgZ2V0IGRyYXdlckRpc21pc3NhYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5kcmF3ZXJDb25maWcuZGlzbWlzc2FibGUgPz8gdHJ1ZTsgfVxuXG4gIGdldCBkcmF3ZXJTdHlsZSgpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZHJhd2VyUG9zaXRpb247XG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gcG9zaXRpb24gPT09ICdsZWZ0JyB8fCBwb3NpdGlvbiA9PT0gJ3JpZ2h0JztcbiAgICBpZiAodGhpcy5kcmF3ZXJDb25maWcuY3VzdG9tV2lkdGgpIHtcbiAgICAgIHJldHVybiBpc0hvcml6b250YWwgPyB7IHdpZHRoOiB0aGlzLmRyYXdlckNvbmZpZy5jdXN0b21XaWR0aCB9IDogeyBoZWlnaHQ6IHRoaXMuZHJhd2VyQ29uZmlnLmN1c3RvbVdpZHRoIH07XG4gICAgfVxuICAgIGNvbnN0IHNpemUgPSB0aGlzLmRyYXdlckNvbmZpZy5zaXplIHx8ICdtZWRpdW0nO1xuICAgIGNvbnN0IHNpemVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBzbWFsbDogaXNIb3Jpem9udGFsID8gJzI1JScgOiAnMjV2aCcsXG4gICAgICBtZWRpdW06IGlzSG9yaXpvbnRhbCA/ICc0MCUnIDogJzQwdmgnLFxuICAgICAgbGFyZ2U6IGlzSG9yaXpvbnRhbCA/ICc2MCUnIDogJzYwdmgnLFxuICAgICAgeGxhcmdlOiBpc0hvcml6b250YWwgPyAnODAlJyA6ICc4MHZoJyxcbiAgICAgIGZ1bGw6IGlzSG9yaXpvbnRhbCA/ICcxMDAlJyA6ICcxMDB2aCdcbiAgICB9O1xuICAgIHJldHVybiBpc0hvcml6b250YWwgPyB7IHdpZHRoOiBzaXplTWFwW3NpemVdIH0gOiB7IGhlaWdodDogc2l6ZU1hcFtzaXplXSB9O1xuICB9XG5cbiAgZ2V0IHN1Ym1pdExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VibWl0QnV0dG9uTGFiZWwgfHwgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdkZXNpZ24uY29tcG9uZW50c19haS5zYXZlJyk7XG4gIH1cbiAgZ2V0IGNhbmNlbExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2FuY2VsQnV0dG9uTGFiZWwgfHwgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdkZXNpZ24uY29tcG9uZW50c19haS5jYW5jZWwnKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtYXNrU2VydmljZTogTWFza1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlOiBMb2NhbGVTZXJ2aWNlXG4gICkge31cblxuICAvLyAtLS0gTGlmZWN5Y2xlIC0tLVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICBpZiAodGhpcy5lbnRpdHlEYXRhKSB7XG4gICAgICB0aGlzLmxvYWRFbnRpdHlEYXRhKCk7XG4gICAgfVxuICAgIHRoaXMuc2V0dXBDb25kaXRpb25hbEZpZWxkc1dhdGNoZXIoKTtcbiAgICB0aGlzLmZvcm1SZWFkeS5lbWl0KHRoaXMuZm9ybSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2VudGl0eURhdGEnXSAmJiB0aGlzLmZvcm0pIHtcbiAgICAgIHRoaXMuZW50aXR5RGF0YSA/IHRoaXMubG9hZEVudGl0eURhdGEoKSA6IHRoaXMucmVzZXRGb3JtKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWyd2aXNpYmxlJ10gJiYgY2hhbmdlc1sndmlzaWJsZSddLmN1cnJlbnRWYWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5lbnRpdHlEYXRhICYmIHRoaXMuZm9ybSkge1xuICAgICAgICB0aGlzLmxvYWRFbnRpdHlEYXRhKCk7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmVudGl0eURhdGEgJiYgdGhpcy5mb3JtKSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIEZvcm0gaW5pdCAtLS1cblxuICBpbml0Rm9ybSgpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtQ29udHJvbHM6IGFueSA9IHt9O1xuICAgIHRoaXMuYWxsRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdGhpcy5nZXREZWZhdWx0VmFsdWUoZmllbGQpO1xuICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IFsuLi4oZmllbGQudmFsaWRhdG9ycyB8fCBbXSldO1xuICAgICAgaWYgKGZpZWxkLnJlcXVpcmVkKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgIH1cbiAgICAgIGZvcm1Db250cm9sc1tmaWVsZC5maWVsZF0gPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgIHsgdmFsdWU6IGRlZmF1bHRWYWx1ZSwgZGlzYWJsZWQ6IGZpZWxkLmRpc2FibGVkIHx8IGZhbHNlIH0sXG4gICAgICAgIHZhbGlkYXRvcnNcbiAgICAgICk7XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cChmb3JtQ29udHJvbHMpO1xuICAgIHRoaXMuYXBwbHlJbml0aWFsRGlzYWJsZWRTdGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0VmFsdWUoZmllbGQ6IER5bmFtaWNGb3JtRmllbGRDb25maWcpOiBhbnkge1xuICAgIGlmIChmaWVsZC5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGZpZWxkLmRlZmF1bHRWYWx1ZTtcbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6IGNhc2UgJ2N1cnJlbmN5JzogY2FzZSAnZGF0ZSc6IGNhc2UgJ2RhdGV0aW1lJzogY2FzZSAndGltZSc6IGNhc2UgJ2xvb2t1cCc6IHJldHVybiBudWxsO1xuICAgICAgY2FzZSAnY2hlY2tib3gnOiByZXR1cm4gZmFsc2U7XG4gICAgICBjYXNlICdtdWx0aXNlbGVjdCc6IHJldHVybiBbXTtcbiAgICAgIGNhc2UgJ2Ryb3Bkb3duJzogY2FzZSAnZW51bSc6IHJldHVybiAnJztcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5SW5pdGlhbERpc2FibGVkU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5hbGxGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICBpZiAoZmllbGQuZGlzYWJsZWRXaGVuKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGZpZWxkLmZpZWxkKTtcbiAgICAgICAgaWYgKGNvbnRyb2wgJiYgdGhpcy5pc0ZpZWxkRGlzYWJsZWQoZmllbGQpKSB7XG4gICAgICAgICAgY29udHJvbC5kaXNhYmxlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLSBEYXRhIGxvYWRpbmcgLS0tXG5cbiAgbG9hZEVudGl0eURhdGEoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZW50aXR5RGF0YSAmJiB0aGlzLmZvcm0pIHtcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMucHJvY2Vzc0VudGl0eURhdGEodGhpcy5lbnRpdHlEYXRhKSk7XG4gICAgICB0aGlzLnVwZGF0ZURpc2FibGVkRmllbGRzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzRW50aXR5RGF0YShlbnRpdHk6IGFueSk6IGFueSB7XG4gICAgY29uc3QgZGF0YSA9IHsgLi4uZW50aXR5IH07XG4gICAgdGhpcy5hbGxGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2RhdGUnICYmIGRhdGFbZmllbGQuZmllbGRdKSB7XG4gICAgICAgIGNvbnN0IHYgPSBkYXRhW2ZpZWxkLmZpZWxkXTtcbiAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIC8vIENvbnZlcnQgeXl5eS1NTS1kZCB0byBsb2NhbGUgZm9ybWF0IHN0cmluZ1xuICAgICAgICAgIGNvbnN0IHBhcnRzID0gdi5zdWJzdHJpbmcoMCwgMTApLnNwbGl0KCctJyk7XG4gICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgY29uc3QgW3llYXIsIG1vbnRoLCBkYXldID0gcGFydHM7XG4gICAgICAgICAgICBjb25zdCBsb2NhbGUgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5nZXRDdXJyZW50TGFuZ3VhZ2UoKTtcbiAgICAgICAgICAgIGRhdGFbZmllbGQuZmllbGRdID0gbG9jYWxlID09PSAnZW4tVVMnIFxuICAgICAgICAgICAgICA/IGAke21vbnRofS8ke2RheX0vJHt5ZWFyfWAgXG4gICAgICAgICAgICAgIDogYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICBjb25zdCBkYXkgPSBTdHJpbmcodi5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgICAgY29uc3QgbW9udGggPSBTdHJpbmcodi5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgICBjb25zdCB5ZWFyID0gU3RyaW5nKHYuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuZ2V0Q3VycmVudExhbmd1YWdlKCk7XG4gICAgICAgICAgZGF0YVtmaWVsZC5maWVsZF0gPSBsb2NhbGUgPT09ICdlbi1VUycgXG4gICAgICAgICAgICA/IGAke21vbnRofS8ke2RheX0vJHt5ZWFyfWAgXG4gICAgICAgICAgICA6IGAke2RheX0vJHttb250aH0vJHt5ZWFyfWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAndGltZScgJiYgZGF0YVtmaWVsZC5maWVsZF0pIHtcbiAgICAgICAgY29uc3QgdiA9IGRhdGFbZmllbGQuZmllbGRdO1xuICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgY29uc3QgcGFydHMgPSB2LnNwbGl0KCc6Jyk7XG4gICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICBkYXRhW2ZpZWxkLmZpZWxkXSA9IGAke3BhcnRzWzBdLnBhZFN0YXJ0KDIsICcwJyl9OiR7cGFydHNbMV0ucGFkU3RhcnQoMiwgJzAnKX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh2IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIGRhdGFbZmllbGQuZmllbGRdID0gYCR7U3RyaW5nKHYuZ2V0SG91cnMoKSkucGFkU3RhcnQoMiwgJzAnKX06JHtTdHJpbmcodi5nZXRNaW51dGVzKCkpLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdkYXRldGltZScgJiYgZGF0YVtmaWVsZC5maWVsZF0pIHtcbiAgICAgICAgY29uc3QgdiA9IGRhdGFbZmllbGQuZmllbGRdO1xuICAgICAgICBjb25zdCBkID0gdHlwZW9mIHYgPT09ICdzdHJpbmcnID8gbmV3IERhdGUodikgOiB2O1xuICAgICAgICBpZiAoZCBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGQuZ2V0VGltZSgpKSkge1xuICAgICAgICAgIGNvbnN0IGRheSA9IFN0cmluZyhkLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgICBjb25zdCBtb250aCA9IFN0cmluZyhkLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICAgIGNvbnN0IHllYXIgPSBTdHJpbmcoZC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICBjb25zdCBob3VycyA9IFN0cmluZyhkLmdldEhvdXJzKCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgICAgY29uc3QgbWludXRlcyA9IFN0cmluZyhkLmdldE1pbnV0ZXMoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgICBjb25zdCBsb2NhbGUgPSB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5nZXRDdXJyZW50TGFuZ3VhZ2UoKTtcbiAgICAgICAgICBkYXRhW2ZpZWxkLmZpZWxkXSA9IGxvY2FsZSA9PT0gJ2VuLVVTJyBcbiAgICAgICAgICAgID8gYCR7bW9udGh9LyR7ZGF5fS8ke3llYXJ9ICR7aG91cnN9OiR7bWludXRlc31gIFxuICAgICAgICAgICAgOiBgJHtkYXl9LyR7bW9udGh9LyR7eWVhcn0gJHtob3Vyc306JHttaW51dGVzfWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnbG9va3VwJyAmJiBkYXRhW2ZpZWxkLmZpZWxkXSkge1xuICAgICAgICBjb25zdCB2ID0gZGF0YVtmaWVsZC5maWVsZF07XG4gICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdi5pZCkge1xuICAgICAgICAgIGNvbnN0IGhhc0Rpc3BsYXkgPSBmaWVsZC5sb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgICAgICA/IGZpZWxkLmxvb2t1cERpc3BsYXlGaWVsZHMuc29tZShmID0+IHRoaXMuZ2V0TmVzdGVkVmFsdWUodiwgZikpXG4gICAgICAgICAgICA6IHZbZmllbGQubG9va3VwRGlzcGxheUZpZWxkIHx8ICduYW1lJ107XG4gICAgICAgICAgaWYgKCFoYXNEaXNwbGF5KSBkYXRhW2ZpZWxkLmZpZWxkXSA9IHYuaWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TmVzdGVkVmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHBhdGguc3BsaXQoJy4nKS5yZWR1Y2UoKGN1ciwga2V5KSA9PiBjdXI/LltrZXldLCBvYmopO1xuICB9XG5cbiAgcmVzZXRGb3JtKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm0pIHtcbiAgICAgIC8vIEZpcnN0IHNldCBhbGwgY29udHJvbHMgdG8gYSBzZW50aW5lbCB2YWx1ZSB0byBlbnN1cmUgdmFsdWVDaGFuZ2VzIGZpcmVzXG4gICAgICAvLyBldmVuIHdoZW4gdGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgdmFsdWUgKGUuZy4gJycgLT4gJycpXG4gICAgICAvLyBUaGlzIGlzIGNyaXRpY2FsIGZvciBsb29rdXAgZmllbGRzIHRoYXQgbWFpbnRhaW4gaW50ZXJuYWwgZGlzcGxheSBzdGF0ZS5cbiAgICAgIHRoaXMuYWxsRmllbGRzLmZvckVhY2goZiA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGYuZmllbGQpO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUobnVsbCwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB2YWx1ZXM6IGFueSA9IHt9O1xuICAgICAgdGhpcy5hbGxGaWVsZHMuZm9yRWFjaChmID0+IHZhbHVlc1tmLmZpZWxkXSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGYpKTtcbiAgICAgIHRoaXMuZm9ybS5yZXNldCh2YWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBWYWx1ZSBwcm9jZXNzaW5nIG9uIHN1Ym1pdCAtLS1cblxuICBwcml2YXRlIHByb2Nlc3NGb3JtVmFsdWUoZm9ybVZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IG91dCA9IHsgLi4uZm9ybVZhbHVlIH07XG4gICAgaWYgKHRoaXMuZW50aXR5RGF0YT8uaWQpIG91dC5pZCA9IHRoaXMuZW50aXR5RGF0YS5pZDtcblxuICAgIHRoaXMuYWxsRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgY29uc3QgdiA9IG91dFtmaWVsZC5maWVsZF07XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2xvb2t1cCcpIHtcbiAgICAgICAgaWYgKHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnKSB7IC8qIGtlZXAgKi8gfVxuICAgICAgICBlbHNlIGlmICh2ICYmIHYgIT09ICcnKSBvdXRbZmllbGQuZmllbGRdID0geyBpZDogdiB9O1xuICAgICAgICBlbHNlIG91dFtmaWVsZC5maWVsZF0gPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lm1hdGNoKC9eXFxkezJ9XFwvXFxkezJ9XFwvXFxkezR9JC8pKSB7XG4gICAgICAgICAgLy8gUGFyc2UgbG9jYWxlIHN0cmluZyB0byB5eXl5LU1NLWRkXG4gICAgICAgICAgY29uc3QgcGFydHMgPSB2LnNwbGl0KCcvJyk7XG4gICAgICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuZ2V0Q3VycmVudExhbmd1YWdlKCk7XG4gICAgICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gbG9jYWxlID09PSAnZW4tVVMnIFxuICAgICAgICAgICAgPyBbcGFydHNbMV0sIHBhcnRzWzBdLCBwYXJ0c1syXV0gXG4gICAgICAgICAgICA6IFtwYXJ0c1swXSwgcGFydHNbMV0sIHBhcnRzWzJdXTtcbiAgICAgICAgICBvdXRbZmllbGQuZmllbGRdID0gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcbiAgICAgICAgfSBlbHNlIGlmICh2IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIG91dFtmaWVsZC5maWVsZF0gPSBgJHt2LmdldEZ1bGxZZWFyKCl9LSR7U3RyaW5nKHYuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyl9LSR7U3RyaW5nKHYuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gICAgICAgIH0gZWxzZSBpZiAoIXYgfHwgKHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2LmluY2x1ZGVzKCdfJykpKSB7XG4gICAgICAgICAgb3V0W2ZpZWxkLmZpZWxkXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ3RpbWUnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgdi5tYXRjaCgvXlxcZHsyfTpcXGR7Mn0kLykpIHtcbiAgICAgICAgICBvdXRbZmllbGQuZmllbGRdID0gYCR7dn06MDBgO1xuICAgICAgICB9IGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgb3V0W2ZpZWxkLmZpZWxkXSA9IGAke1N0cmluZyh2LmdldEhvdXJzKCkpLnBhZFN0YXJ0KDIsICcwJyl9OiR7U3RyaW5nKHYuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpfTowMGA7XG4gICAgICAgIH0gZWxzZSBpZiAoIXYgfHwgKHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2LmluY2x1ZGVzKCdfJykpKSB7XG4gICAgICAgICAgb3V0W2ZpZWxkLmZpZWxkXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ2RhdGV0aW1lJykge1xuICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYubWF0Y2goL15cXGR7Mn1cXC9cXGR7Mn1cXC9cXGR7NH0gXFxkezJ9OlxcZHsyfSQvKSkge1xuICAgICAgICAgIC8vIFBhcnNlIGxvY2FsZSBzdHJpbmcgdG8gRGF0ZVxuICAgICAgICAgIGNvbnN0IFtkYXRlUGFydCwgdGltZVBhcnRdID0gdi5zcGxpdCgnICcpO1xuICAgICAgICAgIGNvbnN0IGRhdGVQYXJ0cyA9IGRhdGVQYXJ0LnNwbGl0KCcvJyk7XG4gICAgICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuZ2V0Q3VycmVudExhbmd1YWdlKCk7XG4gICAgICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gbG9jYWxlID09PSAnZW4tVVMnIFxuICAgICAgICAgICAgPyBbcGFyc2VJbnQoZGF0ZVBhcnRzWzFdLCAxMCksIHBhcnNlSW50KGRhdGVQYXJ0c1swXSwgMTApLCBwYXJzZUludChkYXRlUGFydHNbMl0sIDEwKV0gXG4gICAgICAgICAgICA6IFtwYXJzZUludChkYXRlUGFydHNbMF0sIDEwKSwgcGFyc2VJbnQoZGF0ZVBhcnRzWzFdLCAxMCksIHBhcnNlSW50KGRhdGVQYXJ0c1syXSwgMTApXTtcbiAgICAgICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZVBhcnQuc3BsaXQoJzonKS5tYXAocCA9PiBwYXJzZUludChwLCAxMCkpO1xuICAgICAgICAgIG91dFtmaWVsZC5maWVsZF0gPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSwgaG91cnMsIG1pbnV0ZXMpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICBvdXRbZmllbGQuZmllbGRdID0gdi50b0lTT1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYgKCF2IHx8ICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgdi5pbmNsdWRlcygnXycpKSkge1xuICAgICAgICAgIG91dFtmaWVsZC5maWVsZF0gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFsndGV4dCcsICd0ZXh0YXJlYScsICdudW1iZXInLCAnY3VycmVuY3knLCAnZW51bScsICdkcm9wZG93biddLmluY2x1ZGVzKGZpZWxkLnR5cGUpKSB7XG4gICAgICAgIGlmICh2ID09PSAnJyB8fCB2ID09PSB1bmRlZmluZWQpIG91dFtmaWVsZC5maWVsZF0gPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICAvLyAtLS0gTGF5b3V0IC0tLVxuXG4gIGdldEZpZWxkR3JpZENsYXNzKGZpZWxkOiBEeW5hbWljRm9ybUZpZWxkQ29uZmlnKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWZhdWx0U2l6ZTogRHluYW1pY0Zvcm1GaWVsZFNpemUgPSB7IHhsOiA2LCBsZzogNiwgbWQ6IDYsIHNtOiAxMiB9O1xuICAgIGNvbnN0IHNpemU6IER5bmFtaWNGb3JtRmllbGRTaXplID0gdHlwZW9mIGZpZWxkLnNpemUgPT09ICdmdW5jdGlvbidcbiAgICAgID8gZmllbGQuc2l6ZSh0aGlzLmZvcm0/LnZhbHVlIHx8IHt9KVxuICAgICAgOiAoZmllbGQuc2l6ZSB8fCBkZWZhdWx0U2l6ZSk7XG5cbiAgICBjb25zdCBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIC8vIEJhc2UgY2xhc3MgZnJvbSB4bCBvciBmYWxsYmFjayA2XG4gICAgY2xhc3Nlcy5wdXNoKGBjb2wtJHtzaXplLnhsID8/IHNpemUubGcgPz8gc2l6ZS5tZCA/PyBzaXplLnNtID8/IDZ9YCk7XG4gICAgaWYgKHNpemUueHMgIT09IHVuZGVmaW5lZCkgY2xhc3Nlcy5wdXNoKGBjb2wteHMtJHtzaXplLnhzfWApO1xuICAgIGlmIChzaXplLnNtICE9PSB1bmRlZmluZWQpIGNsYXNzZXMucHVzaChgY29sLXNtLSR7c2l6ZS5zbX1gKTtcbiAgICBpZiAoc2l6ZS5tZCAhPT0gdW5kZWZpbmVkKSBjbGFzc2VzLnB1c2goYGNvbC1tZC0ke3NpemUubWR9YCk7XG4gICAgaWYgKHNpemUubGcgIT09IHVuZGVmaW5lZCkgY2xhc3Nlcy5wdXNoKGBjb2wtbGctJHtzaXplLmxnfWApO1xuICAgIGlmIChzaXplLnhsICE9PSB1bmRlZmluZWQpIGNsYXNzZXMucHVzaChgY29sLXhsLSR7c2l6ZS54bH1gKTtcbiAgICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG4gIH1cblxuICAvLyAtLS0gQ29uZGl0aW9uYWwgdmlzaWJpbGl0eS9kaXNhYmxlZCAtLS1cblxuICBpc0ZpZWxkVmlzaWJsZShmaWVsZDogRHluYW1pY0Zvcm1GaWVsZENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGlmICghZmllbGQudmlzaWJsZVdoZW4pIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmaWVsZC52aXNpYmxlV2hlbih0aGlzLmZvcm0/LnZhbHVlIHx8IHt9KTtcbiAgfVxuXG4gIGlzRmllbGREaXNhYmxlZChmaWVsZDogRHluYW1pY0Zvcm1GaWVsZENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGlmIChmaWVsZC5kaXNhYmxlZCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKCFmaWVsZC5kaXNhYmxlZFdoZW4pIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gZmllbGQuZGlzYWJsZWRXaGVuKHRoaXMuZm9ybT8udmFsdWUgfHwge30pO1xuICB9XG5cbiAgc2V0dXBDb25kaXRpb25hbEZpZWxkc1dhdGNoZXIoKTogdm9pZCB7XG4gICAgLy8gU2luY2UgdmlzaWJsZVdoZW4vZGlzYWJsZWRXaGVuIGFyZSBub3cgZnVuY3Rpb25zIHRoYXQgY2FuIGRlcGVuZCBvbiBhbnkgZmllbGQsXG4gICAgLy8gd2Ugd2F0Y2ggYWxsIGZpZWxkcyBmb3IgY2hhbmdlcyBhbmQgcmUtZXZhbHVhdGVcbiAgICBjb25zdCBoYXNDb25kaXRpb25hbCA9IHRoaXMuYWxsRmllbGRzLnNvbWUoZiA9PiBmLnZpc2libGVXaGVuIHx8IGYuZGlzYWJsZWRXaGVuKTtcbiAgICBpZiAoIWhhc0NvbmRpdGlvbmFsKSByZXR1cm47XG5cbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNsZWFySGlkZGVuRmllbGRzKCk7XG4gICAgICB0aGlzLnVwZGF0ZURpc2FibGVkRmllbGRzKCk7XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVEaXNhYmxlZEZpZWxkcygpOiB2b2lkIHtcbiAgICB0aGlzLmFsbEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGlmIChmaWVsZC5kaXNhYmxlZFdoZW4pIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoZmllbGQuZmllbGQpO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgIGNvbnN0IHNob3VsZERpc2FibGUgPSB0aGlzLmlzRmllbGREaXNhYmxlZChmaWVsZCk7XG4gICAgICAgICAgaWYgKHNob3VsZERpc2FibGUgJiYgY29udHJvbC5lbmFibGVkKSB7XG4gICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmICghc2hvdWxkRGlzYWJsZSAmJiBjb250cm9sLmRpc2FibGVkICYmICFmaWVsZC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgY29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2xlYXJIaWRkZW5GaWVsZHMoKTogdm9pZCB7XG4gICAgdGhpcy5hbGxGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICBpZiAoZmllbGQudmlzaWJsZVdoZW4gJiYgIXRoaXMuaXNGaWVsZFZpc2libGUoZmllbGQpKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGZpZWxkLmZpZWxkKTtcbiAgICAgICAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZSAhPT0gdGhpcy5nZXREZWZhdWx0VmFsdWUoZmllbGQpKSB7XG4gICAgICAgICAgY29udHJvbC5zZXRWYWx1ZSh0aGlzLmdldERlZmF1bHRWYWx1ZShmaWVsZCksIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICBjb250cm9sLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgICAgIGNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tIFB1YmxpYyBtZXRob2RzIC0tLVxuXG4gIGdldEZvcm0oKTogRm9ybUdyb3VwIHsgcmV0dXJuIHRoaXMuZm9ybTsgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmb3JtIHZhbHVlcyB3aXRoIGRhdGUvdGltZS9sb29rdXAgZmllbGRzIGFscmVhZHkgY29udmVydGVkXG4gICAqIHRvIHRoZSBiYWNrZW5kLWV4cGVjdGVkIGZvcm1hdCAoZGF0ZSDihpIgeXl5eS1NTS1kZCwgdGltZSDihpIgSEg6bW06c3MsIGxvb2t1cCDihpIgb2JqZWN0IHdpdGggaWQpLlxuICAgKiBVc2UgdGhpcyBpbnN0ZWFkIG9mIGdldEZvcm0oKS52YWx1ZSB3aGVuIHlvdSBuZWVkIHByb2Nlc3NlZCB2YWx1ZXMgd2l0aG91dCB0cmlnZ2VyaW5nIGZvcm1TdWJtaXQuXG4gICAqL1xuICBnZXRQcm9jZXNzZWRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb2Nlc3NGb3JtVmFsdWUodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpO1xuICB9XG4gIG9wZW4oZW50aXR5PzogYW55KTogdm9pZCB7XG4gICAgaWYgKGVudGl0eSkge1xuICAgICAgdGhpcy5lbnRpdHlEYXRhID0gZW50aXR5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVudGl0eURhdGEgPSBudWxsO1xuICAgICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICB9XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgIHRoaXMub25DYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgaGFuZGxlQ2FuY2VsKCk6IHZvaWQgeyB0aGlzLmNsb3NlKCk7IH1cblxuICBoYW5kbGVTdWJtaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ2Zvcm0nICYmIHRoaXMuZm9ybS5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIC8vIFVzZSBnZXRSYXdWYWx1ZSgpIHRvIGluY2x1ZGUgZGlzYWJsZWQgZmllbGRzIGluIHRoZSBwYXlsb2FkXG4gICAgdGhpcy5mb3JtU3VibWl0LmVtaXQodGhpcy5wcm9jZXNzRm9ybVZhbHVlKHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKSk7XG4gIH1cblxuICBvbkZvcm1LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnVEVYVEFSRUEnKSByZXR1cm47XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgLy8gSW4gaW5saW5lLWVkaXQgbW9kZSwgRW50ZXIgc2F2ZXMgdGhlIGN1cnJlbnQgZmllbGQgYnV0IG5ldmVyIHRyaWdnZXJzIGZvcm0gc3VibWl0XG4gICAgICBpZiAodGhpcy5pc0lubGluZUVkaXRNb2RlKSB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRpbmdGaWVsZCkge1xuICAgICAgICAgIHRoaXMuc2F2ZUlubGluZUZpZWxkKHRoaXMuZWRpdGluZ0ZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oYW5kbGVTdWJtaXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAtLS0gU2VjdGlvbiBoZWxwZXJzIC0tLVxuXG4gIGdldFNlY3Rpb25TdHlsZShzZWN0aW9uOiBEeW5hbWljRm9ybVNlY3Rpb24pOiBzdHJpbmcge1xuICAgIGlmICghc2VjdGlvbi50aXRsZSkgcmV0dXJuICdub25lJztcbiAgICByZXR1cm4gc2VjdGlvbi5zdHlsZSB8fCAnbm9uZSc7XG4gIH1cblxuICAvLyAtLS0gSW5saW5lIEVkaXQgLS0tXG5cbiAgc3RhcnRFZGl0RmllbGQoZmllbGROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNJbmxpbmVFZGl0TW9kZSkgcmV0dXJuO1xuICAgIHRoaXMuZWRpdGluZ0ZpZWxkID0gZmllbGROYW1lO1xuICAgIGlmICh0aGlzLmVudGl0eURhdGEpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuYWxsRmllbGRzLmZpbmQoZiA9PiBmLmZpZWxkID09PSBmaWVsZE5hbWUpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZW50aXR5RGF0YVtmaWVsZE5hbWVdO1xuICAgICAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICdsb29rdXAnICYmIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZD8udHlwZSA9PT0gJ2RhdGUnICYmIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBjb25zdCBwYXJ0cyA9IHZhbHVlLnN1YnN0cmluZygwLCAxMCkuc3BsaXQoJy0nKTtcbiAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjb25zdCBkID0gbmV3IERhdGUoK3BhcnRzWzBdLCArcGFydHNbMV0gLSAxLCArcGFydHNbMl0pO1xuICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZSghaXNOYU4oZC5nZXRUaW1lKCkpID8gZCA6IHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEF1dG8tZm9jdXMgdGhlIGlucHV0IGFmdGVyIEFuZ3VsYXIgcmVuZGVycyB0aGUgZWRpdCBmaWVsZFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuaW5saW5lLWVkaXQtZmllbGQgaW5wdXRbaWQ9XCIke2ZpZWxkTmFtZX1cIl0sIC5pbmxpbmUtZWRpdC1maWVsZCB0ZXh0YXJlYVtpZD1cIiR7ZmllbGROYW1lfVwiXWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgZWw/LmZvY3VzKCk7XG4gICAgfSk7XG4gIH1cblxuICBpc0ZpZWxkRWRpdGluZyhmaWVsZE5hbWU6IHN0cmluZyk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5lZGl0aW5nRmllbGQgPT09IGZpZWxkTmFtZTsgfVxuXG4gIHNhdmVJbmxpbmVGaWVsZChmaWVsZE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0lubGluZUVkaXRNb2RlKSByZXR1cm47XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoZmllbGROYW1lKTtcbiAgICBpZiAoIWNvbnRyb2wgfHwgY29udHJvbC5pbnZhbGlkKSB7IGNvbnRyb2w/Lm1hcmtBc1RvdWNoZWQoKTsgcmV0dXJuOyB9XG5cbiAgICB0aGlzLnNhdmluZ0ZpZWxkID0gdHJ1ZTtcbiAgICBsZXQgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5hbGxGaWVsZHMuZmluZChmID0+IGYuZmllbGQgPT09IGZpZWxkTmFtZSk7XG5cbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICdsb29rdXAnICYmIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHZhbHVlID0geyBpZDogdmFsdWUgfTtcbiAgICB9XG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAnZGF0ZScgJiYgdmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICB2YWx1ZSA9IGAke3ZhbHVlLmdldEZ1bGxZZWFyKCl9LSR7U3RyaW5nKHZhbHVlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpfS0ke1N0cmluZyh2YWx1ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgICB9XG4gICAgdGhpcy5maWVsZFNhdmUuZW1pdCh7IGZpZWxkOiBmaWVsZE5hbWUsIHZhbHVlIH0pO1xuICB9XG5cbiAgY2FuY2VsSW5saW5lRWRpdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0lubGluZUVkaXRNb2RlICYmIHRoaXMuZWRpdGluZ0ZpZWxkKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldCh0aGlzLmVkaXRpbmdGaWVsZCk7XG4gICAgICBpZiAoY29udHJvbCAmJiB0aGlzLmVudGl0eURhdGEpIHtcbiAgICAgICAgY29udHJvbC5zZXRWYWx1ZSh0aGlzLmVudGl0eURhdGFbdGhpcy5lZGl0aW5nRmllbGRdKTtcbiAgICAgICAgY29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICBjb250cm9sLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgfVxuICAgICAgdGhpcy5lZGl0aW5nRmllbGQgPSBudWxsO1xuICAgICAgdGhpcy5zYXZpbmdGaWVsZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBsZXRlSW5saW5lRWRpdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRpbmdGaWVsZCA9IG51bGw7XG4gICAgdGhpcy5zYXZpbmdGaWVsZCA9IGZhbHNlO1xuICB9XG5cbiAgLy8gLS0tIERpc3BsYXkgdmFsdWUgZm9yIGlubGluZS1lZGl0IG1vZGUgLS0tXG5cbiAgZ2V0RmllbGREaXNwbGF5VmFsdWUoZmllbGROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5lbnRpdHlEYXRhKSByZXR1cm4gJyc7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmFsbEZpZWxkcy5maW5kKGYgPT4gZi5maWVsZCA9PT0gZmllbGROYW1lKTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZW50aXR5RGF0YVtmaWVsZE5hbWVdO1xuICAgIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IGZhbHNlICYmIHZhbHVlICE9PSAwKSByZXR1cm4gJyc7XG5cbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICdsb29rdXAnICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChmaWVsZC5sb29rdXBEaXNwbGF5RmllbGRzKSB7XG4gICAgICAgIHJldHVybiBmaWVsZC5sb29rdXBEaXNwbGF5RmllbGRzLm1hcChmID0+IHRoaXMuZ2V0TmVzdGVkVmFsdWUodmFsdWUsIGYpKS5maWx0ZXIodiA9PiB2KS5qb2luKCcgLSAnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVtmaWVsZC5sb29rdXBEaXNwbGF5RmllbGQgfHwgJ25hbWUnXSB8fCAnJztcbiAgICB9XG5cbiAgICBpZiAoKGZpZWxkPy50eXBlID09PSAnZHJvcGRvd24nIHx8IGZpZWxkPy50eXBlID09PSAnZW51bScpICYmIGZpZWxkKSB7XG4gICAgICBjb25zdCBvcHRzID0gZmllbGQub3B0aW9ucyB8fCBmaWVsZC5lbnVtT3B0aW9ucyB8fCBbXTtcbiAgICAgIGNvbnN0IG9wdFZhbCA9IGZpZWxkLm9wdGlvblZhbHVlIHx8ICd2YWx1ZSc7XG4gICAgICBjb25zdCBvcHRMYmwgPSBmaWVsZC5vcHRpb25MYWJlbCB8fCAnbGFiZWwnO1xuICAgICAgY29uc3QgbWF0Y2ggPSBvcHRzLmZpbmQoKG86IGFueSkgPT4gKHR5cGVvZiBvID09PSAnb2JqZWN0JyA/IG9bb3B0VmFsXSA6IG8pID09PSB2YWx1ZSk7XG4gICAgICBpZiAobWF0Y2gpIHJldHVybiB0eXBlb2YgbWF0Y2ggPT09ICdvYmplY3QnID8gbWF0Y2hbb3B0TGJsXSA6IG1hdGNoO1xuICAgIH1cblxuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ2N1cnJlbmN5JyAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBtb25leUNvbmZpZyA9IHRoaXMubWFza1NlcnZpY2UuZ2V0TW9uZXlDb25maWcoKTtcbiAgICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoZmllbGQubG9jYWxlIHx8IG1vbmV5Q29uZmlnLmxvY2FsZSwge1xuICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgY3VycmVuY3k6IGZpZWxkLmN1cnJlbmN5IHx8IG1vbmV5Q29uZmlnLmN1cnJlbmN5XG4gICAgICB9KS5mb3JtYXQodmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCgncHQtQlInLCB7XG4gICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogZmllbGQubWluRnJhY3Rpb25EaWdpdHMgfHwgMCxcbiAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBmaWVsZC5tYXhGcmFjdGlvbkRpZ2l0cyB8fCAyXG4gICAgICB9KS5mb3JtYXQodmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ2RhdGUnICYmIHZhbHVlKSByZXR1cm4gdGhpcy5sb2NhbGVTZXJ2aWNlLmZvcm1hdERhdGUodmFsdWUpO1xuXG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAndGltZScgJiYgdmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBgJHtTdHJpbmcodmFsdWUuZ2V0SG91cnMoKSkucGFkU3RhcnQoMiwgJzAnKX06JHtTdHJpbmcodmFsdWUuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBIYW5kbGUgSEg6bW06c3Mgb3IgSEg6bW0gZm9ybWF0XG4gICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMCwgNSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA/IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnZGVzaWduLmNvbXBvbmVudHNfYWkuYm9vbGVhbl90cnVlJylcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ2Rlc2lnbi5jb21wb25lbnRzX2FpLmJvb2xlYW5fZmFsc2UnKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICdtdWx0aXNlbGVjdCcgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IG9wdHMgPSBmaWVsZC5vcHRpb25zIHx8IGZpZWxkLmVudW1PcHRpb25zIHx8IFtdO1xuICAgICAgY29uc3Qgb3B0VmFsID0gZmllbGQub3B0aW9uVmFsdWUgfHwgJ3ZhbHVlJztcbiAgICAgIGNvbnN0IG9wdExibCA9IGZpZWxkLm9wdGlvbkxhYmVsIHx8ICdsYWJlbCc7XG4gICAgICByZXR1cm4gdmFsdWUubWFwKHYgPT4ge1xuICAgICAgICBjb25zdCBvID0gb3B0cy5maW5kKChvcHQ6IGFueSkgPT4gKHR5cGVvZiBvcHQgPT09ICdvYmplY3QnID8gb3B0W29wdFZhbF0gOiBvcHQpID09PSB2KTtcbiAgICAgICAgcmV0dXJuIG8gPyAodHlwZW9mIG8gPT09ICdvYmplY3QnID8gb1tvcHRMYmxdIDogbykgOiB2O1xuICAgICAgfSkuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICd0ZXh0JyAmJiBmaWVsZC5tYXNrID09PSAnZG9jdW1lbnQnICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCB0eXBlUGVyc29uID0gdGhpcy5lbnRpdHlEYXRhW2ZpZWxkLm1hc2tEZXBlbmRzT24gfHwgJ3R5cGVQZXJzb24nXSB8fCAnSlVSSURJQ0FMX1BFUlNPTic7XG4gICAgICByZXR1cm4gdGhpcy5tYXNrU2VydmljZS5hcHBseURvY3VtZW50TWFzayhTdHJpbmcodmFsdWUpLCB0eXBlUGVyc29uKTtcbiAgICB9XG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAndGV4dCcgJiYgZmllbGQubWFzayA9PT0gJ2NwZicgJiYgdmFsdWUpIHJldHVybiB0aGlzLm1hc2tTZXJ2aWNlLmFwcGx5Q3BmTWFzayhTdHJpbmcodmFsdWUpKTtcbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICd0ZXh0JyAmJiBmaWVsZC5tYXNrID09PSAnY25waicgJiYgdmFsdWUpIHJldHVybiB0aGlzLm1hc2tTZXJ2aWNlLmFwcGx5Q25wak1hc2soU3RyaW5nKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxufVxuIiwiPCEtLSBJbmxpbmUgTW9kZSAobm8gZGlzcGxheU1vZGUgc2V0KSAtLT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJpc0lubGluZU1vZGVcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvcm1Db250ZW50XCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPCEtLSBEaWFsb2cgTW9kZSAtLT5cbjxwLWRpYWxvZ1xuICAqbmdJZj1cImlzRGlhbG9nTW9kZVwiXG4gIFsodmlzaWJsZSldPVwidmlzaWJsZVwiXG4gIFtoZWFkZXJdPVwiZGlhbG9nSGVhZGVyIHwgdHJhbnNsYXRlXCJcbiAgW21vZGFsXT1cInRydWVcIlxuICBbc3R5bGVdPVwieyB3aWR0aDogZGlhbG9nV2lkdGggfVwiXG4gIFtkcmFnZ2FibGVdPVwiZGlhbG9nRHJhZ2dhYmxlXCJcbiAgW3Jlc2l6YWJsZV09XCJkaWFsb2dSZXNpemFibGVcIlxuICBbbWF4aW1pemFibGVdPVwiZGlhbG9nTWF4aW1pemFibGVcIlxuICBbY2xvc2VPbkVzY2FwZV09XCJkaWFsb2dDbG9zZU9uRXNjYXBlXCJcbiAgW2Rpc21pc3NhYmxlTWFza109XCJkaWFsb2dEaXNtaXNzYWJsZU1hc2tcIlxuICAob25IaWRlKT1cImNsb3NlKClcIj5cblxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybUNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCIgKm5nSWY9XCJzaG93U3VibWl0QnV0dG9uIHx8IHNob3dDYW5jZWxCdXR0b25cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWZvb3RlclwiPlxuICAgICAgPHAtYnV0dG9uICpuZ0lmPVwic2hvd0NhbmNlbEJ1dHRvblwiIFtsYWJlbF09XCJjYW5jZWxMYWJlbCB8IHRyYW5zbGF0ZVwiIFtpY29uXT1cImNhbmNlbEJ1dHRvbkljb25cIiBzZXZlcml0eT1cInNlY29uZGFyeVwiIChvbkNsaWNrKT1cImhhbmRsZUNhbmNlbCgpXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdcIj48L3AtYnV0dG9uPlxuICAgICAgPHAtYnV0dG9uICpuZ0lmPVwic2hvd1N1Ym1pdEJ1dHRvblwiIFtsYWJlbF09XCJzdWJtaXRMYWJlbCB8IHRyYW5zbGF0ZVwiIFtpY29uXT1cInN1Ym1pdEJ1dHRvbkljb25cIiAob25DbGljayk9XCJoYW5kbGVTdWJtaXQoKVwiIFtsb2FkaW5nXT1cImxvYWRpbmdcIiBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCI+PC9wLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvcC1kaWFsb2c+XG5cbjwhLS0gRHJhd2VyIE1vZGUgLS0+XG48cC1kcmF3ZXJcbiAgKm5nSWY9XCJpc0RyYXdlck1vZGVcIlxuICBbKHZpc2libGUpXT1cInZpc2libGVcIlxuICBbaGVhZGVyXT1cImRyYXdlckhlYWRlciB8IHRyYW5zbGF0ZVwiXG4gIFtwb3NpdGlvbl09XCJkcmF3ZXJQb3NpdGlvblwiXG4gIFtzdHlsZV09XCJkcmF3ZXJTdHlsZVwiXG4gIFtzaG93Q2xvc2VJY29uXT1cImRyYXdlclNob3dDbG9zZUljb25cIlxuICBbY2xvc2VPbkVzY2FwZV09XCJkcmF3ZXJDbG9zZU9uRXNjYXBlXCJcbiAgW21vZGFsXT1cImRyYXdlckRpc21pc3NhYmxlXCJcbiAgKG9uSGlkZSk9XCJjbG9zZSgpXCI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvcm1Db250ZW50XCI+PC9uZy1jb250YWluZXI+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiICpuZ0lmPVwic2hvd1N1Ym1pdEJ1dHRvbiB8fCBzaG93Q2FuY2VsQnV0dG9uXCI+XG4gICAgPGRpdiBjbGFzcz1cImRyYXdlci1mb290ZXJcIj5cbiAgICAgIDxwLWJ1dHRvbiAqbmdJZj1cInNob3dDYW5jZWxCdXR0b25cIiBbbGFiZWxdPVwiY2FuY2VsTGFiZWwgfCB0cmFuc2xhdGVcIiBbaWNvbl09XCJjYW5jZWxCdXR0b25JY29uXCIgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiAob25DbGljayk9XCJoYW5kbGVDYW5jZWwoKVwiIFtkaXNhYmxlZF09XCJsb2FkaW5nXCI+PC9wLWJ1dHRvbj5cbiAgICAgIDxwLWJ1dHRvbiAqbmdJZj1cInNob3dTdWJtaXRCdXR0b25cIiBbbGFiZWxdPVwic3VibWl0TGFiZWwgfCB0cmFuc2xhdGVcIiBbaWNvbl09XCJzdWJtaXRCdXR0b25JY29uXCIgKG9uQ2xpY2spPVwiaGFuZGxlU3VibWl0KClcIiBbbG9hZGluZ109XCJsb2FkaW5nXCIgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZFwiPjwvcC1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtZHJhd2VyPlxuXG48IS0tIEZvcm0gQ29udGVudCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjZm9ybUNvbnRlbnQ+XG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiZHluYW1pYy1mb3JtXCIgKGtleWRvd24pPVwib25Gb3JtS2V5ZG93bigkZXZlbnQpXCIgKHN1Ym1pdCk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBzZWN0aW9uc1wiPlxuICAgICAgPCEtLSBObyB0aXRsZSA9IGJhcmUgZmllbGRzIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzZWN0aW9uLnRpdGxlXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaXNJbmxpbmVFZGl0TW9kZVwiIGNsYXNzPVwiZ3JpZFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHNlY3Rpb24uZmllbGRzXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNGaWVsZFZpc2libGUoZmllbGQpXCIgW25nQ2xhc3NdPVwiZ2V0RmllbGRHcmlkQ2xhc3MoZmllbGQpXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWVsZFRlbXBsYXRlOyBjb250ZXh0OiB7IGZpZWxkOiBmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0lubGluZUVkaXRNb2RlXCIgY2xhc3M9XCJpbmxpbmUtZWRpdC1maWVsZHNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBzZWN0aW9uLmZpZWxkc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRmllbGRWaXNpYmxlKGZpZWxkKVwiIGNsYXNzPVwiaW5saW5lLWVkaXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlubGluZUVkaXRGaWVsZFRlbXBsYXRlOyBjb250ZXh0OiB7IGZpZWxkOiBmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBCb3JkZXJlZCBzZWN0aW9uIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cInNlY3Rpb24udGl0bGUgJiYgZ2V0U2VjdGlvblN0eWxlKHNlY3Rpb24pID09PSAnYm9yZGVyZWQnXCIgY2xhc3M9XCJib3JkZXJlZC1zZWN0aW9uXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInNlY3Rpb24taGVhZGluZ1wiPlxuICAgICAgICAgIDxpICpuZ0lmPVwic2VjdGlvbi5pY29uXCIgW2NsYXNzXT1cInNlY3Rpb24uaWNvbiArICcgc2VjdGlvbi1pY29uJ1wiPjwvaT5cbiAgICAgICAgICB7eyBzZWN0aW9uLnRpdGxlIH19XG4gICAgICAgIDwvaDM+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaXNJbmxpbmVFZGl0TW9kZVwiIGNsYXNzPVwiZ3JpZFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHNlY3Rpb24uZmllbGRzXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNGaWVsZFZpc2libGUoZmllbGQpXCIgW25nQ2xhc3NdPVwiZ2V0RmllbGRHcmlkQ2xhc3MoZmllbGQpXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWVsZFRlbXBsYXRlOyBjb250ZXh0OiB7IGZpZWxkOiBmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0lubGluZUVkaXRNb2RlXCIgY2xhc3M9XCJpbmxpbmUtZWRpdC1maWVsZHNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBzZWN0aW9uLmZpZWxkc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRmllbGRWaXNpYmxlKGZpZWxkKVwiIGNsYXNzPVwiaW5saW5lLWVkaXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlubGluZUVkaXRGaWVsZFRlbXBsYXRlOyBjb250ZXh0OiB7IGZpZWxkOiBmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBQYW5lbCBzZWN0aW9uIC0tPlxuICAgICAgPHAtcGFuZWxcbiAgICAgICAgKm5nSWY9XCJzZWN0aW9uLnRpdGxlICYmIGdldFNlY3Rpb25TdHlsZShzZWN0aW9uKSA9PT0gJ3BhbmVsJ1wiXG4gICAgICAgIFt0b2dnbGVhYmxlXT1cInRydWVcIlxuICAgICAgICBbY29sbGFwc2VkXT1cInNlY3Rpb24uY29sbGFwc2VkIHx8IGZhbHNlXCJcbiAgICAgICAgc3R5bGVDbGFzcz1cInNlY3Rpb24tcGFuZWxcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICAgICAgPGkgKm5nSWY9XCJzZWN0aW9uLmljb25cIiBbY2xhc3NdPVwic2VjdGlvbi5pY29uICsgJyBzZWN0aW9uLWljb24nXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+e3sgc2VjdGlvbi50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0lubGluZUVkaXRNb2RlXCIgY2xhc3M9XCJncmlkXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2Ygc2VjdGlvbi5maWVsZHNcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0ZpZWxkVmlzaWJsZShmaWVsZClcIiBbbmdDbGFzc109XCJnZXRGaWVsZEdyaWRDbGFzcyhmaWVsZClcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHsgZmllbGQ6IGZpZWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzSW5saW5lRWRpdE1vZGVcIiBjbGFzcz1cImlubGluZS1lZGl0LWZpZWxkc1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHNlY3Rpb24uZmllbGRzXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNGaWVsZFZpc2libGUoZmllbGQpXCIgY2xhc3M9XCJpbmxpbmUtZWRpdC1maWVsZFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5saW5lRWRpdEZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHsgZmllbGQ6IGZpZWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvcC1wYW5lbD5cblxuICAgICAgPCEtLSBIZWFkaW5nLW9ubHkgc2VjdGlvbiAodGl0bGUgcHJlc2VudCwgc3R5bGU9J25vbmUnIG9yIG9taXR0ZWQpIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cInNlY3Rpb24udGl0bGUgJiYgZ2V0U2VjdGlvblN0eWxlKHNlY3Rpb24pID09PSAnbm9uZSdcIiBjbGFzcz1cImhlYWRpbmctc2VjdGlvblwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLWhlYWRpbmdcIj5cbiAgICAgICAgICA8aSAqbmdJZj1cInNlY3Rpb24uaWNvblwiIFtjbGFzc109XCJzZWN0aW9uLmljb24gKyAnIHNlY3Rpb24taWNvbidcIj48L2k+XG4gICAgICAgICAge3sgc2VjdGlvbi50aXRsZSB9fVxuICAgICAgICA8L2gzPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzSW5saW5lRWRpdE1vZGVcIiBjbGFzcz1cImdyaWRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBzZWN0aW9uLmZpZWxkc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRmllbGRWaXNpYmxlKGZpZWxkKVwiIFtuZ0NsYXNzXT1cImdldEZpZWxkR3JpZENsYXNzKGZpZWxkKVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmllbGRUZW1wbGF0ZTsgY29udGV4dDogeyBmaWVsZDogZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNJbmxpbmVFZGl0TW9kZVwiIGNsYXNzPVwiaW5saW5lLWVkaXQtZmllbGRzXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2Ygc2VjdGlvbi5maWVsZHNcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0ZpZWxkVmlzaWJsZShmaWVsZClcIiBjbGFzcz1cImlubGluZS1lZGl0LWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbmxpbmVFZGl0RmllbGRUZW1wbGF0ZTsgY29udGV4dDogeyBmaWVsZDogZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIEN1c3RvbSBjb250ZW50IHByb2plY3Rpb24gLS0+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L2Zvcm0+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIEZpZWxkIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlIGxldC1maWVsZD1cImZpZWxkXCI+XG4gIDxzaWEtZHluYW1pYy1maWVsZC10ZXh0ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ3RleHQnXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFttb2RlXT1cIidmb3JtJ1wiPjwvc2lhLWR5bmFtaWMtZmllbGQtdGV4dD5cbiAgPHNpYS1keW5hbWljLWZpZWxkLXRleHRhcmVhICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ3RleHRhcmVhJ1wiIFtmaWVsZF09XCJmaWVsZFwiIFtmb3JtXT1cImZvcm1cIiBbbW9kZV09XCInZm9ybSdcIj48L3NpYS1keW5hbWljLWZpZWxkLXRleHRhcmVhPlxuICA8c2lhLWR5bmFtaWMtZmllbGQtbnVtYmVyICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ251bWJlcicgfHwgZmllbGQudHlwZSA9PT0gJ2N1cnJlbmN5J1wiIFtmaWVsZF09XCJmaWVsZFwiIFtmb3JtXT1cImZvcm1cIiBbbW9kZV09XCInZm9ybSdcIj48L3NpYS1keW5hbWljLWZpZWxkLW51bWJlcj5cbiAgPHNpYS1keW5hbWljLWZpZWxkLWRhdGUgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnZGF0ZSdcIiBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW21vZGVdPVwiJ2Zvcm0nXCI+PC9zaWEtZHluYW1pYy1maWVsZC1kYXRlPlxuICA8c2lhLWR5bmFtaWMtZmllbGQtZGF0ZXRpbWUgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnZGF0ZXRpbWUnXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFttb2RlXT1cIidmb3JtJ1wiPjwvc2lhLWR5bmFtaWMtZmllbGQtZGF0ZXRpbWU+XG4gIDxzaWEtZHluYW1pYy1maWVsZC1kcm9wZG93biAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdkcm9wZG93bicgfHwgZmllbGQudHlwZSA9PT0gJ2VudW0nXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFttb2RlXT1cIidmb3JtJ1wiPjwvc2lhLWR5bmFtaWMtZmllbGQtZHJvcGRvd24+XG4gIDxzaWEtZHluYW1pYy1maWVsZC1sb29rdXAgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnbG9va3VwJ1wiIFtmaWVsZF09XCJmaWVsZFwiIFtmb3JtXT1cImZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBbbW9kZV09XCInZm9ybSdcIj48L3NpYS1keW5hbWljLWZpZWxkLWxvb2t1cD5cbiAgPHNpYS1keW5hbWljLWZpZWxkLXRpbWUgKm5nSWY9XCJmaWVsZC50eXBlID09PSAndGltZSdcIiBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW21vZGVdPVwiJ2Zvcm0nXCI+PC9zaWEtZHluYW1pYy1maWVsZC10aW1lPlxuICA8c2lhLWR5bmFtaWMtZmllbGQtY2hlY2tib3ggKm5nSWY9XCJmaWVsZC50eXBlID09PSAnY2hlY2tib3gnXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFttb2RlXT1cIidmb3JtJ1wiPjwvc2lhLWR5bmFtaWMtZmllbGQtY2hlY2tib3g+XG4gIDxzaWEtZHluYW1pYy1maWVsZC1tdWx0aXNlbGVjdCAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdtdWx0aXNlbGVjdCdcIiBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW21vZGVdPVwiJ2Zvcm0nXCI+PC9zaWEtZHluYW1pYy1maWVsZC1tdWx0aXNlbGVjdD5cbiAgPHNpYS1keW5hbWljLWZpZWxkLWltYWdlICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ2ltYWdlJ1wiIFtmaWVsZF09XCJmaWVsZFwiIFtmb3JtXT1cImZvcm1cIiBbbW9kZV09XCInZm9ybSdcIj48L3NpYS1keW5hbWljLWZpZWxkLWltYWdlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBJbmxpbmUgRWRpdCBGaWVsZCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjaW5saW5lRWRpdEZpZWxkVGVtcGxhdGUgbGV0LWZpZWxkPVwiZmllbGRcIj5cbiAgPGxhYmVsIGNsYXNzPVwiZmllbGQtbGFiZWxcIj57eyBmaWVsZC5sYWJlbCB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gIDxkaXYgY2xhc3M9XCJmaWVsZC1kaXNwbGF5XCIgKm5nSWY9XCIhaXNGaWVsZEVkaXRpbmcoZmllbGQuZmllbGQpXCIgKGNsaWNrKT1cInN0YXJ0RWRpdEZpZWxkKGZpZWxkLmZpZWxkKVwiIFtjbGFzcy5kaXNhYmxlZF09XCJmaWVsZC5kaXNhYmxlZFwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZGlzcGxheS12YWx1ZVwiIFthdHRyLmRhdGEtcGxhY2Vob2xkZXJdPVwiZmllbGQucGxhY2Vob2xkZXIgfHwgKCdkZXNpZ24uY29tcG9uZW50c19haS5ub3RfaW5mb3JtZWQnIHwgdHJhbnNsYXRlKVwiPnt7IGdldEZpZWxkRGlzcGxheVZhbHVlKGZpZWxkLmZpZWxkKSB9fTwvc3Bhbj5cbiAgICA8aSBjbGFzcz1cInBpIHBpLXBlbmNpbCBlZGl0LWljb25cIiAqbmdJZj1cIiFmaWVsZC5kaXNhYmxlZFwiPjwvaT5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJmaWVsZC1lZGl0XCIgKm5nSWY9XCJpc0ZpZWxkRWRpdGluZyhmaWVsZC5maWVsZClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmllbGRUZW1wbGF0ZTsgY29udGV4dDogeyBmaWVsZDogZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJlZGl0LWFjdGlvbnNcIj5cbiAgICAgIDxwLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWNoZWNrXCIgW3JvdW5kZWRdPVwidHJ1ZVwiIFt0ZXh0XT1cInRydWVcIiBzZXZlcml0eT1cInN1Y2Nlc3NcIiAob25DbGljayk9XCJzYXZlSW5saW5lRmllbGQoZmllbGQuZmllbGQpXCIgW2xvYWRpbmddPVwic2F2aW5nRmllbGRcIiBbZGlzYWJsZWRdPVwiZm9ybS5nZXQoZmllbGQuZmllbGQpPy5pbnZhbGlkXCIgc2l6ZT1cInNtYWxsXCI+PC9wLWJ1dHRvbj5cbiAgICAgIDxwLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXRpbWVzXCIgW3JvdW5kZWRdPVwidHJ1ZVwiIFt0ZXh0XT1cInRydWVcIiBzZXZlcml0eT1cImRhbmdlclwiIChvbkNsaWNrKT1cImNhbmNlbElubGluZUVkaXQoKVwiIFtkaXNhYmxlZF09XCJzYXZpbmdGaWVsZFwiIHNpemU9XCJzbWFsbFwiPjwvcC1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
631
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMtYWkvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9keW5hbWljLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy1haS9zcmMvbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUEwQixtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBVzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNsRixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMxRixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwyQ0FBMkMs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QkFBb0I7a0JBMUJoQyxTQUFTOytCQUNFLGtCQUFrQixjQUNoQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixZQUFZO3dCQUNaLFlBQVk7d0JBQ1osYUFBYTt3QkFDYix5QkFBeUI7d0JBQ3pCLDJCQUEyQjt3QkFDM0IseUJBQXlCO3dCQUN6Qiw2QkFBNkI7d0JBQzdCLDZCQUE2Qjt3QkFDN0IsMkJBQTJCO3dCQUMzQiw2QkFBNkI7d0JBQzdCLHlCQUF5Qjt3QkFDekIsNkJBQTZCO3dCQUM3QixnQ0FBZ0M7d0JBQ2hDLDBCQUEwQjtxQkFDM0I7dUtBS1EsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUksU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFBhbmVsTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9wYW5lbCc7XG5pbXBvcnQgeyBEaWFsb2dNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XG5pbXBvcnQgeyBEcmF3ZXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RyYXdlcic7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQge1xuICBEeW5hbWljRm9ybUZpZWxkQ29uZmlnLFxuICBEeW5hbWljRm9ybUZpZWxkU2l6ZSxcbiAgRHluYW1pY0Zvcm1TZWN0aW9uLFxuICBEeW5hbWljRm9ybURpYWxvZ0NvbmZpZyxcbiAgRHluYW1pY0Zvcm1EcmF3ZXJDb25maWdcbn0gZnJvbSAnLi9tb2RlbHMvZHluYW1pYy1mb3JtLm1vZGVscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE1hc2tTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFzay5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbGUuc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkVGV4dENvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQtdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkTnVtYmVyQ29tcG9uZW50IH0gZnJvbSAnLi9maWVsZHMvZHluYW1pYy1maWVsZC1udW1iZXIuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZERhdGVDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLWRhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZERhdGV0aW1lQ29tcG9uZW50IH0gZnJvbSAnLi9maWVsZHMvZHluYW1pYy1maWVsZC1kYXRldGltZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLWRyb3Bkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGRMb29rdXBDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLWxvb2t1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkVGV4dGFyZWFDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLXRleHRhcmVhLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGRUaW1lQ29tcG9uZW50IH0gZnJvbSAnLi9maWVsZHMvZHluYW1pYy1maWVsZC10aW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGRDaGVja2JveENvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQtY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZE11bHRpc2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi9maWVsZHMvZHluYW1pYy1maWVsZC1tdWx0aXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkSW1hZ2VDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLWltYWdlLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NpYS1keW5hbWljLWZvcm0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgUGFuZWxNb2R1bGUsXG4gICAgRGlhbG9nTW9kdWxlLFxuICAgIERyYXdlck1vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgICBEeW5hbWljRmllbGRUZXh0Q29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZE51bWJlckNvbXBvbmVudCxcbiAgICBEeW5hbWljRmllbGREYXRlQ29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZERhdGV0aW1lQ29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZERyb3Bkb3duQ29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZExvb2t1cENvbXBvbmVudCxcbiAgICBEeW5hbWljRmllbGRUZXh0YXJlYUNvbXBvbmVudCxcbiAgICBEeW5hbWljRmllbGRUaW1lQ29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZENoZWNrYm94Q29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZE11bHRpc2VsZWN0Q29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZEltYWdlQ29tcG9uZW50XG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZHluYW1pYy1mb3JtLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgc2VjdGlvbnM6IER5bmFtaWNGb3JtU2VjdGlvbltdID0gW107XG4gIEBJbnB1dCgpIGVudGl0eURhdGE6IGFueSA9IG51bGw7XG4gIEBJbnB1dCgpIG1vZGU6ICdmb3JtJyB8ICdpbmxpbmUtZWRpdCcgPSAnZm9ybSc7XG5cbiAgLy8gRGlzcGxheSBNb2RlIOKAlCBvcHRpb25hbC4gSWYgbm90IHNldCwgcmVuZGVycyBpbmxpbmUgd2l0aG91dCBidXR0b25zLlxuICBASW5wdXQoKSBkaXNwbGF5TW9kZT86ICdkaWFsb2cnIHwgJ2RyYXdlcic7XG4gIEBJbnB1dCgpIHZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGlhbG9nQ29uZmlnOiBEeW5hbWljRm9ybURpYWxvZ0NvbmZpZyA9IHt9O1xuICBASW5wdXQoKSBkcmF3ZXJDb25maWc6IER5bmFtaWNGb3JtRHJhd2VyQ29uZmlnID0ge307XG5cbiAgLy8gQnV0dG9uIENvbmZpZ3VyYXRpb25cbiAgQElucHV0KCkgc2hvd1N1Ym1pdEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93Q2FuY2VsQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN1Ym1pdEJ1dHRvbkxhYmVsPzogc3RyaW5nO1xuICBASW5wdXQoKSBjYW5jZWxCdXR0b25MYWJlbD86IHN0cmluZztcbiAgQElucHV0KCkgc3VibWl0QnV0dG9uSWNvbjogc3RyaW5nID0gJ3BpIHBpLWNoZWNrJztcbiAgQElucHV0KCkgY2FuY2VsQnV0dG9uSWNvbjogc3RyaW5nID0gJ3BpIHBpLXRpbWVzJztcblxuICBAT3V0cHV0KCkgZm9ybVJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtR3JvdXA+KCk7XG4gIEBPdXRwdXQoKSBmb3JtU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgb25DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBmaWVsZFNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZmllbGQ6IHN0cmluZywgdmFsdWU6IGFueSB9PigpO1xuXG4gIGZvcm0hOiBGb3JtR3JvdXA7XG4gIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBJbmxpbmUgZWRpdCBzdGF0ZVxuICBlZGl0aW5nRmllbGQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBzYXZpbmdGaWVsZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIC0tLSBDb21wdXRlZCBwcm9wZXJ0aWVzIC0tLVxuXG4gIGdldCBhbGxGaWVsZHMoKTogRHluYW1pY0Zvcm1GaWVsZENvbmZpZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5zZWN0aW9ucy5mbGF0TWFwKHNlY3Rpb24gPT4gc2VjdGlvbi5maWVsZHMpO1xuICB9XG5cbiAgZ2V0IGlzSW5saW5lRWRpdE1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ2lubGluZS1lZGl0JztcbiAgfVxuXG4gIGdldCBpc0RpYWxvZ01vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheU1vZGUgPT09ICdkaWFsb2cnO1xuICB9XG5cbiAgZ2V0IGlzRHJhd2VyTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TW9kZSA9PT0gJ2RyYXdlcic7XG4gIH1cblxuICBnZXQgaXNJbmxpbmVNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5kaXNwbGF5TW9kZTtcbiAgfVxuXG4gIC8vIERpYWxvZyBjb25maWcgd2l0aCBkZWZhdWx0c1xuICBnZXQgZGlhbG9nSGVhZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlhbG9nQ29uZmlnLmhlYWRlciB8fCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ2Rlc2lnbi5jb21wb25lbnRzX2FpLmZvcm0nKTtcbiAgfVxuICBnZXQgZGlhbG9nV2lkdGgoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZGlhbG9nQ29uZmlnLndpZHRoIHx8ICc2MDBweCc7IH1cbiAgZ2V0IGRpYWxvZ0RyYWdnYWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZGlhbG9nQ29uZmlnLmRyYWdnYWJsZSA/PyBmYWxzZTsgfVxuICBnZXQgZGlhbG9nUmVzaXphYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5kaWFsb2dDb25maWcucmVzaXphYmxlID8/IGZhbHNlOyB9XG4gIGdldCBkaWFsb2dNYXhpbWl6YWJsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZGlhbG9nQ29uZmlnLm1heGltaXphYmxlID8/IGZhbHNlOyB9XG4gIGdldCBkaWFsb2dDbG9zZU9uRXNjYXBlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5kaWFsb2dDb25maWcuY2xvc2VPbkVzY2FwZSA/PyB0cnVlOyB9XG4gIGdldCBkaWFsb2dEaXNtaXNzYWJsZU1hc2soKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmRpYWxvZ0NvbmZpZy5kaXNtaXNzYWJsZU1hc2sgPz8gZmFsc2U7IH1cblxuICAvLyBEcmF3ZXIgY29uZmlnIHdpdGggZGVmYXVsdHNcbiAgZ2V0IGRyYXdlckhlYWRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRyYXdlckNvbmZpZy5oZWFkZXIgfHwgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdkZXNpZ24uY29tcG9uZW50c19haS5mb3JtJyk7XG4gIH1cbiAgZ2V0IGRyYXdlclBvc2l0aW9uKCk6ICdsZWZ0JyB8ICdyaWdodCcgfCAndG9wJyB8ICdib3R0b20nIHsgcmV0dXJuIHRoaXMuZHJhd2VyQ29uZmlnLnBvc2l0aW9uIHx8ICdyaWdodCc7IH1cbiAgZ2V0IGRyYXdlclNob3dDbG9zZUljb24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmRyYXdlckNvbmZpZy5zaG93Q2xvc2VJY29uID8/IHRydWU7IH1cbiAgZ2V0IGRyYXdlckNsb3NlT25Fc2NhcGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmRyYXdlckNvbmZpZy5jbG9zZU9uRXNjYXBlID8/IHRydWU7IH1cbiAgZ2V0IGRyYXdlckRpc21pc3NhYmxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5kcmF3ZXJDb25maWcuZGlzbWlzc2FibGUgPz8gdHJ1ZTsgfVxuXG4gIGdldCBkcmF3ZXJTdHlsZSgpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZHJhd2VyUG9zaXRpb247XG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gcG9zaXRpb24gPT09ICdsZWZ0JyB8fCBwb3NpdGlvbiA9PT0gJ3JpZ2h0JztcbiAgICBpZiAodGhpcy5kcmF3ZXJDb25maWcuY3VzdG9tV2lkdGgpIHtcbiAgICAgIHJldHVybiBpc0hvcml6b250YWwgPyB7IHdpZHRoOiB0aGlzLmRyYXdlckNvbmZpZy5jdXN0b21XaWR0aCB9IDogeyBoZWlnaHQ6IHRoaXMuZHJhd2VyQ29uZmlnLmN1c3RvbVdpZHRoIH07XG4gICAgfVxuICAgIGNvbnN0IHNpemUgPSB0aGlzLmRyYXdlckNvbmZpZy5zaXplIHx8ICdtZWRpdW0nO1xuICAgIGNvbnN0IHNpemVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBzbWFsbDogaXNIb3Jpem9udGFsID8gJzI1JScgOiAnMjV2aCcsXG4gICAgICBtZWRpdW06IGlzSG9yaXpvbnRhbCA/ICc0MCUnIDogJzQwdmgnLFxuICAgICAgbGFyZ2U6IGlzSG9yaXpvbnRhbCA/ICc2MCUnIDogJzYwdmgnLFxuICAgICAgeGxhcmdlOiBpc0hvcml6b250YWwgPyAnODAlJyA6ICc4MHZoJyxcbiAgICAgIGZ1bGw6IGlzSG9yaXpvbnRhbCA/ICcxMDAlJyA6ICcxMDB2aCdcbiAgICB9O1xuICAgIHJldHVybiBpc0hvcml6b250YWwgPyB7IHdpZHRoOiBzaXplTWFwW3NpemVdIH0gOiB7IGhlaWdodDogc2l6ZU1hcFtzaXplXSB9O1xuICB9XG5cbiAgZ2V0IHN1Ym1pdExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VibWl0QnV0dG9uTGFiZWwgfHwgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdkZXNpZ24uY29tcG9uZW50c19haS5zYXZlJyk7XG4gIH1cbiAgZ2V0IGNhbmNlbExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2FuY2VsQnV0dG9uTGFiZWwgfHwgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdkZXNpZ24uY29tcG9uZW50c19haS5jYW5jZWwnKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtYXNrU2VydmljZTogTWFza1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlOiBMb2NhbGVTZXJ2aWNlXG4gICkge31cblxuICAvLyAtLS0gTGlmZWN5Y2xlIC0tLVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICBpZiAodGhpcy5lbnRpdHlEYXRhKSB7XG4gICAgICB0aGlzLmxvYWRFbnRpdHlEYXRhKCk7XG4gICAgfVxuICAgIHRoaXMuc2V0dXBDb25kaXRpb25hbEZpZWxkc1dhdGNoZXIoKTtcbiAgICB0aGlzLmZvcm1SZWFkeS5lbWl0KHRoaXMuZm9ybSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2VudGl0eURhdGEnXSAmJiB0aGlzLmZvcm0pIHtcbiAgICAgIHRoaXMuZW50aXR5RGF0YSA/IHRoaXMubG9hZEVudGl0eURhdGEoKSA6IHRoaXMucmVzZXRGb3JtKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWyd2aXNpYmxlJ10gJiYgY2hhbmdlc1sndmlzaWJsZSddLmN1cnJlbnRWYWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5lbnRpdHlEYXRhICYmIHRoaXMuZm9ybSkge1xuICAgICAgICB0aGlzLmxvYWRFbnRpdHlEYXRhKCk7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmVudGl0eURhdGEgJiYgdGhpcy5mb3JtKSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIEZvcm0gaW5pdCAtLS1cblxuICBpbml0Rm9ybSgpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtQ29udHJvbHM6IGFueSA9IHt9O1xuICAgIHRoaXMuYWxsRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdGhpcy5nZXREZWZhdWx0VmFsdWUoZmllbGQpO1xuICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IFsuLi4oZmllbGQudmFsaWRhdG9ycyB8fCBbXSldO1xuICAgICAgaWYgKGZpZWxkLnJlcXVpcmVkKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgIH1cbiAgICAgIGZvcm1Db250cm9sc1tmaWVsZC5maWVsZF0gPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgIHsgdmFsdWU6IGRlZmF1bHRWYWx1ZSwgZGlzYWJsZWQ6IGZpZWxkLmRpc2FibGVkIHx8IGZhbHNlIH0sXG4gICAgICAgIHZhbGlkYXRvcnNcbiAgICAgICk7XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cChmb3JtQ29udHJvbHMpO1xuICAgIHRoaXMuYXBwbHlJbml0aWFsRGlzYWJsZWRTdGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0VmFsdWUoZmllbGQ6IER5bmFtaWNGb3JtRmllbGRDb25maWcpOiBhbnkge1xuICAgIGlmIChmaWVsZC5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGZpZWxkLmRlZmF1bHRWYWx1ZTtcbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6IGNhc2UgJ2N1cnJlbmN5JzogY2FzZSAnZGF0ZSc6IGNhc2UgJ2RhdGV0aW1lJzogY2FzZSAndGltZSc6IGNhc2UgJ2xvb2t1cCc6IHJldHVybiBudWxsO1xuICAgICAgY2FzZSAnY2hlY2tib3gnOiByZXR1cm4gZmFsc2U7XG4gICAgICBjYXNlICdtdWx0aXNlbGVjdCc6IHJldHVybiBbXTtcbiAgICAgIGNhc2UgJ2Ryb3Bkb3duJzogY2FzZSAnZW51bSc6IHJldHVybiAnJztcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5SW5pdGlhbERpc2FibGVkU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5hbGxGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICBpZiAoZmllbGQuZGlzYWJsZWRXaGVuKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGZpZWxkLmZpZWxkKTtcbiAgICAgICAgaWYgKGNvbnRyb2wgJiYgdGhpcy5pc0ZpZWxkRGlzYWJsZWQoZmllbGQpKSB7XG4gICAgICAgICAgY29udHJvbC5kaXNhYmxlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLSBEYXRhIGxvYWRpbmcgLS0tXG5cbiAgbG9hZEVudGl0eURhdGEoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZW50aXR5RGF0YSAmJiB0aGlzLmZvcm0pIHtcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMucHJvY2Vzc0VudGl0eURhdGEodGhpcy5lbnRpdHlEYXRhKSk7XG4gICAgICB0aGlzLnVwZGF0ZURpc2FibGVkRmllbGRzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzRW50aXR5RGF0YShlbnRpdHk6IGFueSk6IGFueSB7XG4gICAgY29uc3QgZGF0YSA9IHsgLi4uZW50aXR5IH07XG4gICAgdGhpcy5hbGxGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAvLyBEYXRlOiBwYXNzIElTTyBzdHJpbmcgZGlyZWN0bHkg4oCUIGZpZWxkIGNvbXBvbmVudCBoYW5kbGVzIGRpc3BsYXkgY29udmVyc2lvblxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdkYXRlJyAmJiBkYXRhW2ZpZWxkLmZpZWxkXSkge1xuICAgICAgICBjb25zdCB2ID0gZGF0YVtmaWVsZC5maWVsZF07XG4gICAgICAgIGlmICh2IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIGRhdGFbZmllbGQuZmllbGRdID0gYCR7di5nZXRGdWxsWWVhcigpfS0ke1N0cmluZyh2LmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpfS0ke1N0cmluZyh2LmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKX1gO1xuICAgICAgICB9XG4gICAgICAgIC8vIFN0cmluZyB2YWx1ZXMgKElTTyBcInl5eXktTU0tZGRcIikgYXJlIHBhc3NlZCBhcy1pcyB0byB0aGUgZmllbGQgY29tcG9uZW50XG4gICAgICB9XG4gICAgICAvLyBUaW1lOiBub3JtYWxpemUgdG8gXCJISDptbTpzc1wiIOKAlCBmaWVsZCBjb21wb25lbnQgaGFuZGxlcyBkaXNwbGF5IGNvbnZlcnNpb25cbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAndGltZScgJiYgZGF0YVtmaWVsZC5maWVsZF0pIHtcbiAgICAgICAgY29uc3QgdiA9IGRhdGFbZmllbGQuZmllbGRdO1xuICAgICAgICBpZiAodiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICBkYXRhW2ZpZWxkLmZpZWxkXSA9IGAke1N0cmluZyh2LmdldEhvdXJzKCkpLnBhZFN0YXJ0KDIsICcwJyl9OiR7U3RyaW5nKHYuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpfTowMGA7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgY29uc3QgcGFydHMgPSB2LnNwbGl0KCc6Jyk7XG4gICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgZGF0YVtmaWVsZC5maWVsZF0gPSBgJHtwYXJ0c1swXS5wYWRTdGFydCgyLCAnMCcpfToke3BhcnRzWzFdLnBhZFN0YXJ0KDIsICcwJyl9OjAwYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gXCJISDptbTpzc1wiIGlzIHBhc3NlZCBhcy1pc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBEYXRldGltZTogbm9ybWFsaXplIHRvIElTTyBzdHJpbmcg4oCUIGZpZWxkIGNvbXBvbmVudCBoYW5kbGVzIGRpc3BsYXkgY29udmVyc2lvblxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdkYXRldGltZScgJiYgZGF0YVtmaWVsZC5maWVsZF0pIHtcbiAgICAgICAgY29uc3QgdiA9IGRhdGFbZmllbGQuZmllbGRdO1xuICAgICAgICBpZiAodiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICBkYXRhW2ZpZWxkLmZpZWxkXSA9IHYudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgIXYuaW5jbHVkZXMoJ1QnKSkge1xuICAgICAgICAgIC8vIFRyeSB0byBwYXJzZSBub24tSVNPIHN0cmluZ1xuICAgICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSh2KTtcbiAgICAgICAgICBpZiAoIWlzTmFOKGQuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgZGF0YVtmaWVsZC5maWVsZF0gPSBkLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElTTyBzdHJpbmdzIHdpdGggVCBhcmUgcGFzc2VkIGFzLWlzXG4gICAgICB9XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2xvb2t1cCcgJiYgZGF0YVtmaWVsZC5maWVsZF0pIHtcbiAgICAgICAgY29uc3QgdiA9IGRhdGFbZmllbGQuZmllbGRdO1xuICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYuaWQpIHtcbiAgICAgICAgICBjb25zdCBoYXNEaXNwbGF5ID0gZmllbGQubG9va3VwRGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgPyBmaWVsZC5sb29rdXBEaXNwbGF5RmllbGRzLnNvbWUoZiA9PiB0aGlzLmdldE5lc3RlZFZhbHVlKHYsIGYpKVxuICAgICAgICAgICAgOiB2W2ZpZWxkLmxvb2t1cERpc3BsYXlGaWVsZCB8fCAnbmFtZSddO1xuICAgICAgICAgIGlmICghaGFzRGlzcGxheSkgZGF0YVtmaWVsZC5maWVsZF0gPSB2LmlkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIGdldE5lc3RlZFZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChjdXIsIGtleSkgPT4gY3VyPy5ba2V5XSwgb2JqKTtcbiAgfVxuXG4gIHJlc2V0Rm9ybSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtKSB7XG4gICAgICAvLyBGaXJzdCBzZXQgYWxsIGNvbnRyb2xzIHRvIGEgc2VudGluZWwgdmFsdWUgdG8gZW5zdXJlIHZhbHVlQ2hhbmdlcyBmaXJlc1xuICAgICAgLy8gZXZlbiB3aGVuIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IHZhbHVlIChlLmcuICcnIC0+ICcnKVxuICAgICAgLy8gVGhpcyBpcyBjcml0aWNhbCBmb3IgbG9va3VwIGZpZWxkcyB0aGF0IG1haW50YWluIGludGVybmFsIGRpc3BsYXkgc3RhdGUuXG4gICAgICB0aGlzLmFsbEZpZWxkcy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChmLmZpZWxkKTtcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICBjb250cm9sLnNldFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdmFsdWVzOiBhbnkgPSB7fTtcbiAgICAgIHRoaXMuYWxsRmllbGRzLmZvckVhY2goZiA9PiB2YWx1ZXNbZi5maWVsZF0gPSB0aGlzLmdldERlZmF1bHRWYWx1ZShmKSk7XG4gICAgICB0aGlzLmZvcm0ucmVzZXQodmFsdWVzKTtcbiAgICB9XG4gIH1cblxuICAvLyAtLS0gVmFsdWUgcHJvY2Vzc2luZyBvbiBzdWJtaXQgLS0tXG5cbiAgcHJpdmF0ZSBwcm9jZXNzRm9ybVZhbHVlKGZvcm1WYWx1ZTogYW55KTogYW55IHtcbiAgICBjb25zdCBvdXQgPSB7IC4uLmZvcm1WYWx1ZSB9O1xuICAgIGlmICh0aGlzLmVudGl0eURhdGE/LmlkKSBvdXQuaWQgPSB0aGlzLmVudGl0eURhdGEuaWQ7XG5cbiAgICB0aGlzLmFsbEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGNvbnN0IHYgPSBvdXRbZmllbGQuZmllbGRdO1xuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdsb29rdXAnKSB7XG4gICAgICAgIGlmICh2ICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JykgeyAvKiBrZWVwICovIH1cbiAgICAgICAgZWxzZSBpZiAodiAmJiB2ICE9PSAnJykgb3V0W2ZpZWxkLmZpZWxkXSA9IHsgaWQ6IHYgfTtcbiAgICAgICAgZWxzZSBvdXRbZmllbGQuZmllbGRdID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgIC8vIFZhbHVlIGlzIGFscmVhZHkgaW4gSVNPIGZvcm1hdCBcInl5eXktTU0tZGRcIiBmcm9tIHRoZSBmaWVsZCBjb21wb25lbnRcbiAgICAgICAgaWYgKCF2IHx8ICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgdi5pbmNsdWRlcygnXycpKSkge1xuICAgICAgICAgIG91dFtmaWVsZC5maWVsZF0gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICd0aW1lJykge1xuICAgICAgICAvLyBWYWx1ZSBpcyBhbHJlYWR5IGluIElTTyBmb3JtYXQgXCJISDptbTpzc1wiIGZyb20gdGhlIGZpZWxkIGNvbXBvbmVudFxuICAgICAgICBpZiAoIXYgfHwgKHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2LmluY2x1ZGVzKCdfJykpKSB7XG4gICAgICAgICAgb3V0W2ZpZWxkLmZpZWxkXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ2RhdGV0aW1lJykge1xuICAgICAgICAvLyBWYWx1ZSBpcyBhbHJlYWR5IGluIElTTyBmb3JtYXQgZnJvbSB0aGUgZmllbGQgY29tcG9uZW50XG4gICAgICAgIGlmICghdiB8fCAodHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYuaW5jbHVkZXMoJ18nKSkpIHtcbiAgICAgICAgICBvdXRbZmllbGQuZmllbGRdID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChbJ3RleHQnLCAndGV4dGFyZWEnLCAnbnVtYmVyJywgJ2N1cnJlbmN5JywgJ2VudW0nLCAnZHJvcGRvd24nXS5pbmNsdWRlcyhmaWVsZC50eXBlKSkge1xuICAgICAgICBpZiAodiA9PT0gJycgfHwgdiA9PT0gdW5kZWZpbmVkKSBvdXRbZmllbGQuZmllbGRdID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLy8gLS0tIExheW91dCAtLS1cblxuICBnZXRGaWVsZEdyaWRDbGFzcyhmaWVsZDogRHluYW1pY0Zvcm1GaWVsZENvbmZpZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVmYXVsdFNpemU6IER5bmFtaWNGb3JtRmllbGRTaXplID0geyB4bDogNiwgbGc6IDYsIG1kOiA2LCBzbTogMTIgfTtcbiAgICBjb25zdCBzaXplOiBEeW5hbWljRm9ybUZpZWxkU2l6ZSA9IHR5cGVvZiBmaWVsZC5zaXplID09PSAnZnVuY3Rpb24nXG4gICAgICA/IGZpZWxkLnNpemUodGhpcy5mb3JtPy52YWx1ZSB8fCB7fSlcbiAgICAgIDogKGZpZWxkLnNpemUgfHwgZGVmYXVsdFNpemUpO1xuXG4gICAgY29uc3QgY2xhc3Nlczogc3RyaW5nW10gPSBbXTtcbiAgICAvLyBCYXNlIGNsYXNzIGZyb20geGwgb3IgZmFsbGJhY2sgNlxuICAgIGNsYXNzZXMucHVzaChgY29sLSR7c2l6ZS54bCA/PyBzaXplLmxnID8/IHNpemUubWQgPz8gc2l6ZS5zbSA/PyA2fWApO1xuICAgIGlmIChzaXplLnhzICE9PSB1bmRlZmluZWQpIGNsYXNzZXMucHVzaChgY29sLXhzLSR7c2l6ZS54c31gKTtcbiAgICBpZiAoc2l6ZS5zbSAhPT0gdW5kZWZpbmVkKSBjbGFzc2VzLnB1c2goYGNvbC1zbS0ke3NpemUuc219YCk7XG4gICAgaWYgKHNpemUubWQgIT09IHVuZGVmaW5lZCkgY2xhc3Nlcy5wdXNoKGBjb2wtbWQtJHtzaXplLm1kfWApO1xuICAgIGlmIChzaXplLmxnICE9PSB1bmRlZmluZWQpIGNsYXNzZXMucHVzaChgY29sLWxnLSR7c2l6ZS5sZ31gKTtcbiAgICBpZiAoc2l6ZS54bCAhPT0gdW5kZWZpbmVkKSBjbGFzc2VzLnB1c2goYGNvbC14bC0ke3NpemUueGx9YCk7XG4gICAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuICB9XG5cbiAgLy8gLS0tIENvbmRpdGlvbmFsIHZpc2liaWxpdHkvZGlzYWJsZWQgLS0tXG5cbiAgaXNGaWVsZFZpc2libGUoZmllbGQ6IER5bmFtaWNGb3JtRmllbGRDb25maWcpOiBib29sZWFuIHtcbiAgICBpZiAoIWZpZWxkLnZpc2libGVXaGVuKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmllbGQudmlzaWJsZVdoZW4odGhpcy5mb3JtPy52YWx1ZSB8fCB7fSk7XG4gIH1cblxuICBpc0ZpZWxkRGlzYWJsZWQoZmllbGQ6IER5bmFtaWNGb3JtRmllbGRDb25maWcpOiBib29sZWFuIHtcbiAgICBpZiAoZmllbGQuZGlzYWJsZWQpIHJldHVybiB0cnVlO1xuICAgIGlmICghZmllbGQuZGlzYWJsZWRXaGVuKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGZpZWxkLmRpc2FibGVkV2hlbih0aGlzLmZvcm0/LnZhbHVlIHx8IHt9KTtcbiAgfVxuXG4gIHNldHVwQ29uZGl0aW9uYWxGaWVsZHNXYXRjaGVyKCk6IHZvaWQge1xuICAgIC8vIFNpbmNlIHZpc2libGVXaGVuL2Rpc2FibGVkV2hlbiBhcmUgbm93IGZ1bmN0aW9ucyB0aGF0IGNhbiBkZXBlbmQgb24gYW55IGZpZWxkLFxuICAgIC8vIHdlIHdhdGNoIGFsbCBmaWVsZHMgZm9yIGNoYW5nZXMgYW5kIHJlLWV2YWx1YXRlXG4gICAgY29uc3QgaGFzQ29uZGl0aW9uYWwgPSB0aGlzLmFsbEZpZWxkcy5zb21lKGYgPT4gZi52aXNpYmxlV2hlbiB8fCBmLmRpc2FibGVkV2hlbik7XG4gICAgaWYgKCFoYXNDb25kaXRpb25hbCkgcmV0dXJuO1xuXG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jbGVhckhpZGRlbkZpZWxkcygpO1xuICAgICAgdGhpcy51cGRhdGVEaXNhYmxlZEZpZWxkcygpO1xuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlRGlzYWJsZWRGaWVsZHMoKTogdm9pZCB7XG4gICAgdGhpcy5hbGxGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICBpZiAoZmllbGQuZGlzYWJsZWRXaGVuKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGZpZWxkLmZpZWxkKTtcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICBjb25zdCBzaG91bGREaXNhYmxlID0gdGhpcy5pc0ZpZWxkRGlzYWJsZWQoZmllbGQpO1xuICAgICAgICAgIGlmIChzaG91bGREaXNhYmxlICYmIGNvbnRyb2wuZW5hYmxlZCkge1xuICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICBjb250cm9sLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXNob3VsZERpc2FibGUgJiYgY29udHJvbC5kaXNhYmxlZCAmJiAhZmllbGQuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFySGlkZGVuRmllbGRzKCk6IHZvaWQge1xuICAgIHRoaXMuYWxsRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgaWYgKGZpZWxkLnZpc2libGVXaGVuICYmICF0aGlzLmlzRmllbGRWaXNpYmxlKGZpZWxkKSkge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChmaWVsZC5maWVsZCk7XG4gICAgICAgIGlmIChjb250cm9sICYmIGNvbnRyb2wudmFsdWUgIT09IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGZpZWxkKSkge1xuICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodGhpcy5nZXREZWZhdWx0VmFsdWUoZmllbGQpLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgY29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgICAgICBjb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLSBQdWJsaWMgbWV0aG9kcyAtLS1cblxuICBnZXRGb3JtKCk6IEZvcm1Hcm91cCB7IHJldHVybiB0aGlzLmZvcm07IH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZm9ybSB2YWx1ZXMgd2l0aCBkYXRlL3RpbWUvbG9va3VwIGZpZWxkcyBhbHJlYWR5IGNvbnZlcnRlZFxuICAgKiB0byB0aGUgYmFja2VuZC1leHBlY3RlZCBmb3JtYXQgKGRhdGUg4oaSIHl5eXktTU0tZGQsIHRpbWUg4oaSIEhIOm1tOnNzLCBsb29rdXAg4oaSIG9iamVjdCB3aXRoIGlkKS5cbiAgICogVXNlIHRoaXMgaW5zdGVhZCBvZiBnZXRGb3JtKCkudmFsdWUgd2hlbiB5b3UgbmVlZCBwcm9jZXNzZWQgdmFsdWVzIHdpdGhvdXQgdHJpZ2dlcmluZyBmb3JtU3VibWl0LlxuICAgKi9cbiAgZ2V0UHJvY2Vzc2VkVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzRm9ybVZhbHVlKHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKTtcbiAgfVxuICBvcGVuKGVudGl0eT86IGFueSk6IHZvaWQge1xuICAgIGlmIChlbnRpdHkpIHtcbiAgICAgIHRoaXMuZW50aXR5RGF0YSA9IGVudGl0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbnRpdHlEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgfVxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gIH1cblxuICBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICB0aGlzLm9uQ2FuY2VsLmVtaXQoKTtcbiAgfVxuXG4gIGhhbmRsZUNhbmNlbCgpOiB2b2lkIHsgdGhpcy5jbG9zZSgpOyB9XG5cbiAgaGFuZGxlU3VibWl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdmb3JtJyAmJiB0aGlzLmZvcm0uaW52YWxpZCkge1xuICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAvLyBVc2UgZ2V0UmF3VmFsdWUoKSB0byBpbmNsdWRlIGRpc2FibGVkIGZpZWxkcyBpbiB0aGUgcGF5bG9hZFxuICAgIHRoaXMuZm9ybVN1Ym1pdC5lbWl0KHRoaXMucHJvY2Vzc0Zvcm1WYWx1ZSh0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSkpO1xuICB9XG5cbiAgb25Gb3JtS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJykgcmV0dXJuO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIC8vIEluIGlubGluZS1lZGl0IG1vZGUsIEVudGVyIHNhdmVzIHRoZSBjdXJyZW50IGZpZWxkIGJ1dCBuZXZlciB0cmlnZ2VycyBmb3JtIHN1Ym1pdFxuICAgICAgaWYgKHRoaXMuaXNJbmxpbmVFZGl0TW9kZSkge1xuICAgICAgICBpZiAodGhpcy5lZGl0aW5nRmllbGQpIHtcbiAgICAgICAgICB0aGlzLnNhdmVJbmxpbmVGaWVsZCh0aGlzLmVkaXRpbmdGaWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlU3VibWl0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIFNlY3Rpb24gaGVscGVycyAtLS1cblxuICBnZXRTZWN0aW9uU3R5bGUoc2VjdGlvbjogRHluYW1pY0Zvcm1TZWN0aW9uKTogc3RyaW5nIHtcbiAgICBpZiAoIXNlY3Rpb24udGl0bGUpIHJldHVybiAnbm9uZSc7XG4gICAgcmV0dXJuIHNlY3Rpb24uc3R5bGUgfHwgJ25vbmUnO1xuICB9XG5cbiAgLy8gLS0tIElubGluZSBFZGl0IC0tLVxuXG4gIHN0YXJ0RWRpdEZpZWxkKGZpZWxkTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzSW5saW5lRWRpdE1vZGUpIHJldHVybjtcbiAgICB0aGlzLmVkaXRpbmdGaWVsZCA9IGZpZWxkTmFtZTtcbiAgICBpZiAodGhpcy5lbnRpdHlEYXRhKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChmaWVsZE5hbWUpO1xuICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmFsbEZpZWxkcy5maW5kKGYgPT4gZi5maWVsZCA9PT0gZmllbGROYW1lKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmVudGl0eURhdGFbZmllbGROYW1lXTtcbiAgICAgICAgaWYgKGZpZWxkPy50eXBlID09PSAnbG9va3VwJyAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRGF0ZSwgdGltZSwgZGF0ZXRpbWUgdmFsdWVzIGFyZSBhbHJlYWR5IGluIElTTyBmb3JtYXQgaW4gdGhlIGNvbnRyb2xcbiAgICAgICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBBdXRvLWZvY3VzIHRoZSBpbnB1dCBhZnRlciBBbmd1bGFyIHJlbmRlcnMgdGhlIGVkaXQgZmllbGRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLmlubGluZS1lZGl0LWZpZWxkIGlucHV0W2lkPVwiJHtmaWVsZE5hbWV9XCJdLCAuaW5saW5lLWVkaXQtZmllbGQgdGV4dGFyZWFbaWQ9XCIke2ZpZWxkTmFtZX1cIl1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGVsPy5mb2N1cygpO1xuICAgIH0pO1xuICB9XG5cbiAgaXNGaWVsZEVkaXRpbmcoZmllbGROYW1lOiBzdHJpbmcpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZWRpdGluZ0ZpZWxkID09PSBmaWVsZE5hbWU7IH1cblxuICBzYXZlSW5saW5lRmllbGQoZmllbGROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNJbmxpbmVFZGl0TW9kZSkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGZpZWxkTmFtZSk7XG4gICAgaWYgKCFjb250cm9sIHx8IGNvbnRyb2wuaW52YWxpZCkgeyBjb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7IHJldHVybjsgfVxuXG4gICAgdGhpcy5zYXZpbmdGaWVsZCA9IHRydWU7XG4gICAgbGV0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuYWxsRmllbGRzLmZpbmQoZiA9PiBmLmZpZWxkID09PSBmaWVsZE5hbWUpO1xuXG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAnbG9va3VwJyAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICB2YWx1ZSA9IHsgaWQ6IHZhbHVlIH07XG4gICAgfVxuICAgIC8vIERhdGUsIHRpbWUsIGRhdGV0aW1lIHZhbHVlcyBhcmUgYWxyZWFkeSBpbiBJU08gZm9ybWF0IGZyb20gdGhlIGZpZWxkIGNvbXBvbmVudFxuICAgIHRoaXMuZmllbGRTYXZlLmVtaXQoeyBmaWVsZDogZmllbGROYW1lLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIGNhbmNlbElubGluZUVkaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNJbmxpbmVFZGl0TW9kZSAmJiB0aGlzLmVkaXRpbmdGaWVsZCkge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQodGhpcy5lZGl0aW5nRmllbGQpO1xuICAgICAgaWYgKGNvbnRyb2wgJiYgdGhpcy5lbnRpdHlEYXRhKSB7XG4gICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodGhpcy5lbnRpdHlEYXRhW3RoaXMuZWRpdGluZ0ZpZWxkXSk7XG4gICAgICAgIGNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgY29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZWRpdGluZ0ZpZWxkID0gbnVsbDtcbiAgICAgIHRoaXMuc2F2aW5nRmllbGQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjb21wbGV0ZUlubGluZUVkaXQoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0aW5nRmllbGQgPSBudWxsO1xuICAgIHRoaXMuc2F2aW5nRmllbGQgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIC0tLSBEaXNwbGF5IHZhbHVlIGZvciBpbmxpbmUtZWRpdCBtb2RlIC0tLVxuXG4gIGdldEZpZWxkRGlzcGxheVZhbHVlKGZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuZW50aXR5RGF0YSkgcmV0dXJuICcnO1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5hbGxGaWVsZHMuZmluZChmID0+IGYuZmllbGQgPT09IGZpZWxkTmFtZSk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmVudGl0eURhdGFbZmllbGROYW1lXTtcbiAgICBpZiAoIXZhbHVlICYmIHZhbHVlICE9PSBmYWxzZSAmJiB2YWx1ZSAhPT0gMCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAnbG9va3VwJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoZmllbGQubG9va3VwRGlzcGxheUZpZWxkcykge1xuICAgICAgICByZXR1cm4gZmllbGQubG9va3VwRGlzcGxheUZpZWxkcy5tYXAoZiA9PiB0aGlzLmdldE5lc3RlZFZhbHVlKHZhbHVlLCBmKSkuZmlsdGVyKHYgPT4gdikuam9pbignIC0gJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVbZmllbGQubG9va3VwRGlzcGxheUZpZWxkIHx8ICduYW1lJ10gfHwgJyc7XG4gICAgfVxuXG4gICAgaWYgKChmaWVsZD8udHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBmaWVsZD8udHlwZSA9PT0gJ2VudW0nKSAmJiBmaWVsZCkge1xuICAgICAgY29uc3Qgb3B0cyA9IGZpZWxkLm9wdGlvbnMgfHwgZmllbGQuZW51bU9wdGlvbnMgfHwgW107XG4gICAgICBjb25zdCBvcHRWYWwgPSBmaWVsZC5vcHRpb25WYWx1ZSB8fCAndmFsdWUnO1xuICAgICAgY29uc3Qgb3B0TGJsID0gZmllbGQub3B0aW9uTGFiZWwgfHwgJ2xhYmVsJztcbiAgICAgIGNvbnN0IG1hdGNoID0gb3B0cy5maW5kKChvOiBhbnkpID0+ICh0eXBlb2YgbyA9PT0gJ29iamVjdCcgPyBvW29wdFZhbF0gOiBvKSA9PT0gdmFsdWUpO1xuICAgICAgaWYgKG1hdGNoKSByZXR1cm4gdHlwZW9mIG1hdGNoID09PSAnb2JqZWN0JyA/IG1hdGNoW29wdExibF0gOiBtYXRjaDtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICdjdXJyZW5jeScgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3QgbW9uZXlDb25maWcgPSB0aGlzLm1hc2tTZXJ2aWNlLmdldE1vbmV5Q29uZmlnKCk7XG4gICAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KGZpZWxkLmxvY2FsZSB8fCBtb25leUNvbmZpZy5sb2NhbGUsIHtcbiAgICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgICAgIGN1cnJlbmN5OiBmaWVsZC5jdXJyZW5jeSB8fCBtb25leUNvbmZpZy5jdXJyZW5jeVxuICAgICAgfSkuZm9ybWF0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICdudW1iZXInICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ3B0LUJSJywge1xuICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IGZpZWxkLm1pbkZyYWN0aW9uRGlnaXRzIHx8IDAsXG4gICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogZmllbGQubWF4RnJhY3Rpb25EaWdpdHMgfHwgMlxuICAgICAgfSkuZm9ybWF0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICdkYXRlJyAmJiB2YWx1ZSkgcmV0dXJuIHRoaXMubG9jYWxlU2VydmljZS5mb3JtYXREYXRlKHZhbHVlKTtcblxuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ3RpbWUnICYmIHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gYCR7U3RyaW5nKHZhbHVlLmdldEhvdXJzKCkpLnBhZFN0YXJ0KDIsICcwJyl9OiR7U3RyaW5nKHZhbHVlLmdldE1pbnV0ZXMoKSkucGFkU3RhcnQoMiwgJzAnKX1gO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gSGFuZGxlIEhIOm1tOnNzIG9yIEhIOm1tIGZvcm1hdFxuICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIDUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPyB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ2Rlc2lnbi5jb21wb25lbnRzX2FpLmJvb2xlYW5fdHJ1ZScpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdkZXNpZ24uY29tcG9uZW50c19haS5ib29sZWFuX2ZhbHNlJyk7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAnbXVsdGlzZWxlY3QnICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBjb25zdCBvcHRzID0gZmllbGQub3B0aW9ucyB8fCBmaWVsZC5lbnVtT3B0aW9ucyB8fCBbXTtcbiAgICAgIGNvbnN0IG9wdFZhbCA9IGZpZWxkLm9wdGlvblZhbHVlIHx8ICd2YWx1ZSc7XG4gICAgICBjb25zdCBvcHRMYmwgPSBmaWVsZC5vcHRpb25MYWJlbCB8fCAnbGFiZWwnO1xuICAgICAgcmV0dXJuIHZhbHVlLm1hcCh2ID0+IHtcbiAgICAgICAgY29uc3QgbyA9IG9wdHMuZmluZCgob3B0OiBhbnkpID0+ICh0eXBlb2Ygb3B0ID09PSAnb2JqZWN0JyA/IG9wdFtvcHRWYWxdIDogb3B0KSA9PT0gdik7XG4gICAgICAgIHJldHVybiBvID8gKHR5cGVvZiBvID09PSAnb2JqZWN0JyA/IG9bb3B0TGJsXSA6IG8pIDogdjtcbiAgICAgIH0pLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAndGV4dCcgJiYgZmllbGQubWFzayA9PT0gJ2RvY3VtZW50JyAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgdHlwZVBlcnNvbiA9IHRoaXMuZW50aXR5RGF0YVtmaWVsZC5tYXNrRGVwZW5kc09uIHx8ICd0eXBlUGVyc29uJ10gfHwgJ0pVUklESUNBTF9QRVJTT04nO1xuICAgICAgcmV0dXJuIHRoaXMubWFza1NlcnZpY2UuYXBwbHlEb2N1bWVudE1hc2soU3RyaW5nKHZhbHVlKSwgdHlwZVBlcnNvbik7XG4gICAgfVxuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ3RleHQnICYmIGZpZWxkLm1hc2sgPT09ICdjcGYnICYmIHZhbHVlKSByZXR1cm4gdGhpcy5tYXNrU2VydmljZS5hcHBseUNwZk1hc2soU3RyaW5nKHZhbHVlKSk7XG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAndGV4dCcgJiYgZmllbGQubWFzayA9PT0gJ2NucGonICYmIHZhbHVlKSByZXR1cm4gdGhpcy5tYXNrU2VydmljZS5hcHBseUNucGpNYXNrKFN0cmluZyh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cbn1cbiIsIjwhLS0gSW5saW5lIE1vZGUgKG5vIGRpc3BsYXlNb2RlIHNldCkgLS0+XG48bmctY29udGFpbmVyICpuZ0lmPVwiaXNJbmxpbmVNb2RlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb3JtQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjwhLS0gRGlhbG9nIE1vZGUgLS0+XG48cC1kaWFsb2dcbiAgKm5nSWY9XCJpc0RpYWxvZ01vZGVcIlxuICBbKHZpc2libGUpXT1cInZpc2libGVcIlxuICBbaGVhZGVyXT1cImRpYWxvZ0hlYWRlciB8IHRyYW5zbGF0ZVwiXG4gIFttb2RhbF09XCJ0cnVlXCJcbiAgW3N0eWxlXT1cInsgd2lkdGg6IGRpYWxvZ1dpZHRoIH1cIlxuICBbZHJhZ2dhYmxlXT1cImRpYWxvZ0RyYWdnYWJsZVwiXG4gIFtyZXNpemFibGVdPVwiZGlhbG9nUmVzaXphYmxlXCJcbiAgW21heGltaXphYmxlXT1cImRpYWxvZ01heGltaXphYmxlXCJcbiAgW2Nsb3NlT25Fc2NhcGVdPVwiZGlhbG9nQ2xvc2VPbkVzY2FwZVwiXG4gIFtkaXNtaXNzYWJsZU1hc2tdPVwiZGlhbG9nRGlzbWlzc2FibGVNYXNrXCJcbiAgKG9uSGlkZSk9XCJjbG9zZSgpXCI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvcm1Db250ZW50XCI+PC9uZy1jb250YWluZXI+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiICpuZ0lmPVwic2hvd1N1Ym1pdEJ1dHRvbiB8fCBzaG93Q2FuY2VsQnV0dG9uXCI+XG4gICAgPGRpdiBjbGFzcz1cImRpYWxvZy1mb290ZXJcIj5cbiAgICAgIDxwLWJ1dHRvbiAqbmdJZj1cInNob3dDYW5jZWxCdXR0b25cIiBbbGFiZWxdPVwiY2FuY2VsTGFiZWwgfCB0cmFuc2xhdGVcIiBbaWNvbl09XCJjYW5jZWxCdXR0b25JY29uXCIgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiAob25DbGljayk9XCJoYW5kbGVDYW5jZWwoKVwiIFtkaXNhYmxlZF09XCJsb2FkaW5nXCI+PC9wLWJ1dHRvbj5cbiAgICAgIDxwLWJ1dHRvbiAqbmdJZj1cInNob3dTdWJtaXRCdXR0b25cIiBbbGFiZWxdPVwic3VibWl0TGFiZWwgfCB0cmFuc2xhdGVcIiBbaWNvbl09XCJzdWJtaXRCdXR0b25JY29uXCIgKG9uQ2xpY2spPVwiaGFuZGxlU3VibWl0KClcIiBbbG9hZGluZ109XCJsb2FkaW5nXCIgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZFwiPjwvcC1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtZGlhbG9nPlxuXG48IS0tIERyYXdlciBNb2RlIC0tPlxuPHAtZHJhd2VyXG4gICpuZ0lmPVwiaXNEcmF3ZXJNb2RlXCJcbiAgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCJcbiAgW2hlYWRlcl09XCJkcmF3ZXJIZWFkZXIgfCB0cmFuc2xhdGVcIlxuICBbcG9zaXRpb25dPVwiZHJhd2VyUG9zaXRpb25cIlxuICBbc3R5bGVdPVwiZHJhd2VyU3R5bGVcIlxuICBbc2hvd0Nsb3NlSWNvbl09XCJkcmF3ZXJTaG93Q2xvc2VJY29uXCJcbiAgW2Nsb3NlT25Fc2NhcGVdPVwiZHJhd2VyQ2xvc2VPbkVzY2FwZVwiXG4gIFttb2RhbF09XCJkcmF3ZXJEaXNtaXNzYWJsZVwiXG4gIChvbkhpZGUpPVwiY2xvc2UoKVwiPlxuXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb3JtQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmb290ZXJcIiAqbmdJZj1cInNob3dTdWJtaXRCdXR0b24gfHwgc2hvd0NhbmNlbEJ1dHRvblwiPlxuICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItZm9vdGVyXCI+XG4gICAgICA8cC1idXR0b24gKm5nSWY9XCJzaG93Q2FuY2VsQnV0dG9uXCIgW2xhYmVsXT1cImNhbmNlbExhYmVsIHwgdHJhbnNsYXRlXCIgW2ljb25dPVwiY2FuY2VsQnV0dG9uSWNvblwiIHNldmVyaXR5PVwic2Vjb25kYXJ5XCIgKG9uQ2xpY2spPVwiaGFuZGxlQ2FuY2VsKClcIiBbZGlzYWJsZWRdPVwibG9hZGluZ1wiPjwvcC1idXR0b24+XG4gICAgICA8cC1idXR0b24gKm5nSWY9XCJzaG93U3VibWl0QnV0dG9uXCIgW2xhYmVsXT1cInN1Ym1pdExhYmVsIHwgdHJhbnNsYXRlXCIgW2ljb25dPVwic3VibWl0QnV0dG9uSWNvblwiIChvbkNsaWNrKT1cImhhbmRsZVN1Ym1pdCgpXCIgW2xvYWRpbmddPVwibG9hZGluZ1wiIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIj48L3AtYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLWRyYXdlcj5cblxuPCEtLSBGb3JtIENvbnRlbnQgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI2Zvcm1Db250ZW50PlxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImR5bmFtaWMtZm9ybVwiIChrZXlkb3duKT1cIm9uRm9ybUtleWRvd24oJGV2ZW50KVwiIChzdWJtaXQpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2Ygc2VjdGlvbnNcIj5cbiAgICAgIDwhLS0gTm8gdGl0bGUgPSBiYXJlIGZpZWxkcyAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VjdGlvbi50aXRsZVwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzSW5saW5lRWRpdE1vZGVcIiBjbGFzcz1cImdyaWRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBzZWN0aW9uLmZpZWxkc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRmllbGRWaXNpYmxlKGZpZWxkKVwiIFtuZ0NsYXNzXT1cImdldEZpZWxkR3JpZENsYXNzKGZpZWxkKVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmllbGRUZW1wbGF0ZTsgY29udGV4dDogeyBmaWVsZDogZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNJbmxpbmVFZGl0TW9kZVwiIGNsYXNzPVwiaW5saW5lLWVkaXQtZmllbGRzXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2Ygc2VjdGlvbi5maWVsZHNcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0ZpZWxkVmlzaWJsZShmaWVsZClcIiBjbGFzcz1cImlubGluZS1lZGl0LWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbmxpbmVFZGl0RmllbGRUZW1wbGF0ZTsgY29udGV4dDogeyBmaWVsZDogZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gQm9yZGVyZWQgc2VjdGlvbiAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJzZWN0aW9uLnRpdGxlICYmIGdldFNlY3Rpb25TdHlsZShzZWN0aW9uKSA9PT0gJ2JvcmRlcmVkJ1wiIGNsYXNzPVwiYm9yZGVyZWQtc2VjdGlvblwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLWhlYWRpbmdcIj5cbiAgICAgICAgICA8aSAqbmdJZj1cInNlY3Rpb24uaWNvblwiIFtjbGFzc109XCJzZWN0aW9uLmljb24gKyAnIHNlY3Rpb24taWNvbidcIj48L2k+XG4gICAgICAgICAge3sgc2VjdGlvbi50aXRsZSB9fVxuICAgICAgICA8L2gzPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzSW5saW5lRWRpdE1vZGVcIiBjbGFzcz1cImdyaWRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBzZWN0aW9uLmZpZWxkc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRmllbGRWaXNpYmxlKGZpZWxkKVwiIFtuZ0NsYXNzXT1cImdldEZpZWxkR3JpZENsYXNzKGZpZWxkKVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmllbGRUZW1wbGF0ZTsgY29udGV4dDogeyBmaWVsZDogZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNJbmxpbmVFZGl0TW9kZVwiIGNsYXNzPVwiaW5saW5lLWVkaXQtZmllbGRzXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2Ygc2VjdGlvbi5maWVsZHNcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0ZpZWxkVmlzaWJsZShmaWVsZClcIiBjbGFzcz1cImlubGluZS1lZGl0LWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbmxpbmVFZGl0RmllbGRUZW1wbGF0ZTsgY29udGV4dDogeyBmaWVsZDogZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUGFuZWwgc2VjdGlvbiAtLT5cbiAgICAgIDxwLXBhbmVsXG4gICAgICAgICpuZ0lmPVwic2VjdGlvbi50aXRsZSAmJiBnZXRTZWN0aW9uU3R5bGUoc2VjdGlvbikgPT09ICdwYW5lbCdcIlxuICAgICAgICBbdG9nZ2xlYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgW2NvbGxhcHNlZF09XCJzZWN0aW9uLmNvbGxhcHNlZCB8fCBmYWxzZVwiXG4gICAgICAgIHN0eWxlQ2xhc3M9XCJzZWN0aW9uLXBhbmVsXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxpICpuZ0lmPVwic2VjdGlvbi5pY29uXCIgW2NsYXNzXT1cInNlY3Rpb24uaWNvbiArICcgc2VjdGlvbi1pY29uJ1wiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPnt7IHNlY3Rpb24udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaXNJbmxpbmVFZGl0TW9kZVwiIGNsYXNzPVwiZ3JpZFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHNlY3Rpb24uZmllbGRzXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNGaWVsZFZpc2libGUoZmllbGQpXCIgW25nQ2xhc3NdPVwiZ2V0RmllbGRHcmlkQ2xhc3MoZmllbGQpXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWVsZFRlbXBsYXRlOyBjb250ZXh0OiB7IGZpZWxkOiBmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0lubGluZUVkaXRNb2RlXCIgY2xhc3M9XCJpbmxpbmUtZWRpdC1maWVsZHNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBzZWN0aW9uLmZpZWxkc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRmllbGRWaXNpYmxlKGZpZWxkKVwiIGNsYXNzPVwiaW5saW5lLWVkaXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlubGluZUVkaXRGaWVsZFRlbXBsYXRlOyBjb250ZXh0OiB7IGZpZWxkOiBmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3AtcGFuZWw+XG5cbiAgICAgIDwhLS0gSGVhZGluZy1vbmx5IHNlY3Rpb24gKHRpdGxlIHByZXNlbnQsIHN0eWxlPSdub25lJyBvciBvbWl0dGVkKSAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJzZWN0aW9uLnRpdGxlICYmIGdldFNlY3Rpb25TdHlsZShzZWN0aW9uKSA9PT0gJ25vbmUnXCIgY2xhc3M9XCJoZWFkaW5nLXNlY3Rpb25cIj5cbiAgICAgICAgPGgzIGNsYXNzPVwic2VjdGlvbi1oZWFkaW5nXCI+XG4gICAgICAgICAgPGkgKm5nSWY9XCJzZWN0aW9uLmljb25cIiBbY2xhc3NdPVwic2VjdGlvbi5pY29uICsgJyBzZWN0aW9uLWljb24nXCI+PC9pPlxuICAgICAgICAgIHt7IHNlY3Rpb24udGl0bGUgfX1cbiAgICAgICAgPC9oMz5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0lubGluZUVkaXRNb2RlXCIgY2xhc3M9XCJncmlkXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2Ygc2VjdGlvbi5maWVsZHNcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0ZpZWxkVmlzaWJsZShmaWVsZClcIiBbbmdDbGFzc109XCJnZXRGaWVsZEdyaWRDbGFzcyhmaWVsZClcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHsgZmllbGQ6IGZpZWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzSW5saW5lRWRpdE1vZGVcIiBjbGFzcz1cImlubGluZS1lZGl0LWZpZWxkc1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHNlY3Rpb24uZmllbGRzXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNGaWVsZFZpc2libGUoZmllbGQpXCIgY2xhc3M9XCJpbmxpbmUtZWRpdC1maWVsZFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5saW5lRWRpdEZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHsgZmllbGQ6IGZpZWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBDdXN0b20gY29udGVudCBwcm9qZWN0aW9uIC0tPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC9mb3JtPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBGaWVsZCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSBsZXQtZmllbGQ9XCJmaWVsZFwiPlxuICA8c2lhLWR5bmFtaWMtZmllbGQtdGV4dCAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICd0ZXh0J1wiIFtmaWVsZF09XCJmaWVsZFwiIFtmb3JtXT1cImZvcm1cIiBbbW9kZV09XCInZm9ybSdcIj48L3NpYS1keW5hbWljLWZpZWxkLXRleHQ+XG4gIDxzaWEtZHluYW1pYy1maWVsZC10ZXh0YXJlYSAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICd0ZXh0YXJlYSdcIiBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW21vZGVdPVwiJ2Zvcm0nXCI+PC9zaWEtZHluYW1pYy1maWVsZC10ZXh0YXJlYT5cbiAgPHNpYS1keW5hbWljLWZpZWxkLW51bWJlciAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdudW1iZXInIHx8IGZpZWxkLnR5cGUgPT09ICdjdXJyZW5jeSdcIiBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW21vZGVdPVwiJ2Zvcm0nXCI+PC9zaWEtZHluYW1pYy1maWVsZC1udW1iZXI+XG4gIDxzaWEtZHluYW1pYy1maWVsZC1kYXRlICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ2RhdGUnXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFttb2RlXT1cIidmb3JtJ1wiPjwvc2lhLWR5bmFtaWMtZmllbGQtZGF0ZT5cbiAgPHNpYS1keW5hbWljLWZpZWxkLWRhdGV0aW1lICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ2RhdGV0aW1lJ1wiIFtmaWVsZF09XCJmaWVsZFwiIFtmb3JtXT1cImZvcm1cIiBbbW9kZV09XCInZm9ybSdcIj48L3NpYS1keW5hbWljLWZpZWxkLWRhdGV0aW1lPlxuICA8c2lhLWR5bmFtaWMtZmllbGQtZHJvcGRvd24gKm5nSWY9XCJmaWVsZC50eXBlID09PSAnZHJvcGRvd24nIHx8IGZpZWxkLnR5cGUgPT09ICdlbnVtJ1wiIFtmaWVsZF09XCJmaWVsZFwiIFtmb3JtXT1cImZvcm1cIiBbbW9kZV09XCInZm9ybSdcIj48L3NpYS1keW5hbWljLWZpZWxkLWRyb3Bkb3duPlxuICA8c2lhLWR5bmFtaWMtZmllbGQtbG9va3VwICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ2xvb2t1cCdcIiBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgW21vZGVdPVwiJ2Zvcm0nXCI+PC9zaWEtZHluYW1pYy1maWVsZC1sb29rdXA+XG4gIDxzaWEtZHluYW1pYy1maWVsZC10aW1lICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ3RpbWUnXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFttb2RlXT1cIidmb3JtJ1wiPjwvc2lhLWR5bmFtaWMtZmllbGQtdGltZT5cbiAgPHNpYS1keW5hbWljLWZpZWxkLWNoZWNrYm94ICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ2NoZWNrYm94J1wiIFtmaWVsZF09XCJmaWVsZFwiIFtmb3JtXT1cImZvcm1cIiBbbW9kZV09XCInZm9ybSdcIj48L3NpYS1keW5hbWljLWZpZWxkLWNoZWNrYm94PlxuICA8c2lhLWR5bmFtaWMtZmllbGQtbXVsdGlzZWxlY3QgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnbXVsdGlzZWxlY3QnXCIgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFttb2RlXT1cIidmb3JtJ1wiPjwvc2lhLWR5bmFtaWMtZmllbGQtbXVsdGlzZWxlY3Q+XG4gIDxzaWEtZHluYW1pYy1maWVsZC1pbWFnZSAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdpbWFnZSdcIiBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW21vZGVdPVwiJ2Zvcm0nXCI+PC9zaWEtZHluYW1pYy1maWVsZC1pbWFnZT5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gSW5saW5lIEVkaXQgRmllbGQgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI2lubGluZUVkaXRGaWVsZFRlbXBsYXRlIGxldC1maWVsZD1cImZpZWxkXCI+XG4gIDxsYWJlbCBjbGFzcz1cImZpZWxkLWxhYmVsXCI+e3sgZmllbGQubGFiZWwgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQtZGlzcGxheVwiICpuZ0lmPVwiIWlzRmllbGRFZGl0aW5nKGZpZWxkLmZpZWxkKVwiIChjbGljayk9XCJzdGFydEVkaXRGaWVsZChmaWVsZC5maWVsZClcIiBbY2xhc3MuZGlzYWJsZWRdPVwiZmllbGQuZGlzYWJsZWRcIj5cbiAgICA8c3BhbiBjbGFzcz1cImRpc3BsYXktdmFsdWVcIiBbYXR0ci5kYXRhLXBsYWNlaG9sZGVyXT1cImZpZWxkLnBsYWNlaG9sZGVyIHx8ICgnZGVzaWduLmNvbXBvbmVudHNfYWkubm90X2luZm9ybWVkJyB8IHRyYW5zbGF0ZSlcIj57eyBnZXRGaWVsZERpc3BsYXlWYWx1ZShmaWVsZC5maWVsZCkgfX08L3NwYW4+XG4gICAgPGkgY2xhc3M9XCJwaSBwaS1wZW5jaWwgZWRpdC1pY29uXCIgKm5nSWY9XCIhZmllbGQuZGlzYWJsZWRcIj48L2k+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZmllbGQtZWRpdFwiICpuZ0lmPVwiaXNGaWVsZEVkaXRpbmcoZmllbGQuZmllbGQpXCI+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWNvbnRhaW5lclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHsgZmllbGQ6IGZpZWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZWRpdC1hY3Rpb25zXCI+XG4gICAgICA8cC1idXR0b24gdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1jaGVja1wiIFtyb3VuZGVkXT1cInRydWVcIiBbdGV4dF09XCJ0cnVlXCIgc2V2ZXJpdHk9XCJzdWNjZXNzXCIgKG9uQ2xpY2spPVwic2F2ZUlubGluZUZpZWxkKGZpZWxkLmZpZWxkKVwiIFtsb2FkaW5nXT1cInNhdmluZ0ZpZWxkXCIgW2Rpc2FibGVkXT1cImZvcm0uZ2V0KGZpZWxkLmZpZWxkKT8uaW52YWxpZFwiIHNpemU9XCJzbWFsbFwiPjwvcC1idXR0b24+XG4gICAgICA8cC1idXR0b24gdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS10aW1lc1wiIFtyb3VuZGVkXT1cInRydWVcIiBbdGV4dF09XCJ0cnVlXCIgc2V2ZXJpdHk9XCJkYW5nZXJcIiAob25DbGljayk9XCJjYW5jZWxJbmxpbmVFZGl0KClcIiBbZGlzYWJsZWRdPVwic2F2aW5nRmllbGRcIiBzaXplPVwic21hbGxcIj48L3AtYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|