@qbs-origin/origin-form 0.8.0 → 0.8.2
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/action-step-handler.mjs +17 -1
- package/esm2022/lib/formly/formly-field-stepper/formly-field-stepper.component.mjs +8 -6
- package/esm2022/lib/models/forms.model.mjs +28 -3
- package/esm2022/lib/origin-form.component.mjs +88 -27
- package/fesm2022/qbs-origin-origin-form.mjs +137 -33
- package/fesm2022/qbs-origin-origin-form.mjs.map +1 -1
- package/lib/action-step-handler.d.ts +5 -0
- package/lib/models/forms.model.d.ts +21 -2
- package/lib/origin-form.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -186,6 +186,8 @@ export class CollectorFormComponent {
|
|
|
186
186
|
}
|
|
187
187
|
if (this.appModel) {
|
|
188
188
|
await this.initAsync();
|
|
189
|
+
// Execute any action/status steps that appear before the first visible step
|
|
190
|
+
await this.executeLeadingActionSteps();
|
|
189
191
|
}
|
|
190
192
|
}
|
|
191
193
|
async ngOnChanges(changes) {
|
|
@@ -224,6 +226,8 @@ export class CollectorFormComponent {
|
|
|
224
226
|
}
|
|
225
227
|
}
|
|
226
228
|
await this.initAsync();
|
|
229
|
+
// Execute any action/status steps that appear before the first visible step
|
|
230
|
+
await this.executeLeadingActionSteps();
|
|
227
231
|
}
|
|
228
232
|
catch (error) {
|
|
229
233
|
}
|
|
@@ -291,7 +295,8 @@ export class CollectorFormComponent {
|
|
|
291
295
|
this.formlyPresentationFields = [];
|
|
292
296
|
this.model = {};
|
|
293
297
|
this.form = new FormGroup({});
|
|
294
|
-
if
|
|
298
|
+
// Populate control IDs with values if fillData or initFlowValues exist
|
|
299
|
+
if (this.fillData || this.initFlowValues) {
|
|
295
300
|
this.populateControlIdsWithValueDictionary();
|
|
296
301
|
}
|
|
297
302
|
// Initialize model with default values if no fillData
|
|
@@ -300,7 +305,6 @@ export class CollectorFormComponent {
|
|
|
300
305
|
}
|
|
301
306
|
else {
|
|
302
307
|
this.populateModelWithFillData(this.fillData);
|
|
303
|
-
this.populateControlIdsWithValueDictionary();
|
|
304
308
|
}
|
|
305
309
|
this.form.patchValue(this.model);
|
|
306
310
|
await this.buildFormlyConfigAsync();
|
|
@@ -366,33 +370,49 @@ export class CollectorFormComponent {
|
|
|
366
370
|
}
|
|
367
371
|
populateControlIdsWithValueDictionary() {
|
|
368
372
|
var currentLanguageId = this.getCurrentLanguageId();
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
const
|
|
383
|
-
if (
|
|
384
|
-
|
|
385
|
-
|
|
373
|
+
// Build dictionary from fillData.flux if available, otherwise start empty
|
|
374
|
+
const controlIdsWithValues = this.fillData?.flux
|
|
375
|
+
? this.fillData.flux
|
|
376
|
+
.flatMap((step) => step.sections.flatMap((section) => section.controls
|
|
377
|
+
.filter((control) => control.controlId && control.fillValue)
|
|
378
|
+
.map((control) => ({
|
|
379
|
+
controlId: control.controlId,
|
|
380
|
+
fillValue: control.fillValue,
|
|
381
|
+
fillValueId: control.fillValueId,
|
|
382
|
+
}))))
|
|
383
|
+
.reduce((dictionary, { controlId, fillValue, fillValueId }) => {
|
|
384
|
+
if (fillValueId) {
|
|
385
|
+
for (const [key, dict] of this.dictionaryMap.entries()) {
|
|
386
|
+
const value = dict.values?.find((v) => v.id == fillValueId);
|
|
387
|
+
if (value) {
|
|
388
|
+
const translation = value.valueTranslations.find((t) => t.languageId == currentLanguageId);
|
|
389
|
+
if (translation) {
|
|
390
|
+
dictionary[controlId] = translation.value;
|
|
391
|
+
break;
|
|
392
|
+
}
|
|
386
393
|
}
|
|
387
394
|
}
|
|
388
395
|
}
|
|
396
|
+
else {
|
|
397
|
+
dictionary[controlId] = fillValue;
|
|
398
|
+
}
|
|
399
|
+
return dictionary;
|
|
400
|
+
}, {})
|
|
401
|
+
: {};
|
|
402
|
+
// Get initFlowValues from fillData or from direct input (this.initFlowValues)
|
|
403
|
+
let initFlowValues = this.fillData?.initFlowValues;
|
|
404
|
+
// If not in fillData, try to parse from direct initFlowValues input
|
|
405
|
+
if (!initFlowValues && this.initFlowValues) {
|
|
406
|
+
try {
|
|
407
|
+
initFlowValues =
|
|
408
|
+
typeof this.initFlowValues === 'string'
|
|
409
|
+
? JSON.parse(this.initFlowValues)
|
|
410
|
+
: this.initFlowValues;
|
|
389
411
|
}
|
|
390
|
-
|
|
391
|
-
|
|
412
|
+
catch (e) {
|
|
413
|
+
console.warn('Failed to parse initFlowValues:', e);
|
|
392
414
|
}
|
|
393
|
-
|
|
394
|
-
}, {});
|
|
395
|
-
const initFlowValues = this.fillData?.initFlowValues;
|
|
415
|
+
}
|
|
396
416
|
const addInitFlowValues = (node, pathParts) => {
|
|
397
417
|
if (node === null || node === undefined) {
|
|
398
418
|
if (pathParts.length > 0) {
|
|
@@ -571,6 +591,35 @@ export class CollectorFormComponent {
|
|
|
571
591
|
return false;
|
|
572
592
|
}
|
|
573
593
|
}
|
|
594
|
+
async executeLeadingActionSteps() {
|
|
595
|
+
if (!this.appDataUuid || !this.flux || this.flux.length === 0) {
|
|
596
|
+
return;
|
|
597
|
+
}
|
|
598
|
+
const leadingActionSteps = this.actionStepHandler.getActionStepsBeforeFirstVisibleStep(this.flux);
|
|
599
|
+
if (leadingActionSteps.length === 0) {
|
|
600
|
+
return;
|
|
601
|
+
}
|
|
602
|
+
console.log(`🎬 Executing ${leadingActionSteps.length} leading action steps before first visible step`);
|
|
603
|
+
this.isLoading = true;
|
|
604
|
+
try {
|
|
605
|
+
const result = await this.actionStepHandler.executeActionSteps(leadingActionSteps, this.appDataUuid, (step) => {
|
|
606
|
+
const loadingMessage = Utils.findTranslationInfo('loadingMessageTranslations', step.translations, this.currentLanguageIso);
|
|
607
|
+
this.loadingMessage = loadingMessage || null;
|
|
608
|
+
});
|
|
609
|
+
if (result.success) {
|
|
610
|
+
console.log('✅ Leading action steps executed successfully');
|
|
611
|
+
}
|
|
612
|
+
else {
|
|
613
|
+
console.error('❌ Leading action steps failed:', result.error);
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
catch (error) {
|
|
617
|
+
console.error('❌ Error executing leading action steps:', error);
|
|
618
|
+
}
|
|
619
|
+
finally {
|
|
620
|
+
this.loadingMessage = null;
|
|
621
|
+
}
|
|
622
|
+
}
|
|
574
623
|
onSelectedPageChanged(index) {
|
|
575
624
|
if (this.formlyConfig[0].fieldGroup) {
|
|
576
625
|
var selectedPage = this.formlyConfig[0].fieldGroup[index];
|
|
@@ -635,8 +684,15 @@ export class CollectorFormComponent {
|
|
|
635
684
|
}
|
|
636
685
|
}
|
|
637
686
|
else {
|
|
638
|
-
|
|
639
|
-
|
|
687
|
+
// Check controlIdsWithValues for initFlowValues
|
|
688
|
+
const initFlowValue = this.controlIdsWithValues?.[associatedControlId];
|
|
689
|
+
if (initFlowValue !== undefined) {
|
|
690
|
+
fg.defaultValue = initFlowValue;
|
|
691
|
+
}
|
|
692
|
+
else {
|
|
693
|
+
const val = this.findInApiCallsResponses(associatedControlId);
|
|
694
|
+
fg.defaultValue = val;
|
|
695
|
+
}
|
|
640
696
|
}
|
|
641
697
|
}
|
|
642
698
|
}
|
|
@@ -1762,6 +1818,11 @@ export class CollectorFormComponent {
|
|
|
1762
1818
|
}
|
|
1763
1819
|
}
|
|
1764
1820
|
}
|
|
1821
|
+
// Ensure type is set for presentation controls
|
|
1822
|
+
if (!formlyConfig.type) {
|
|
1823
|
+
formlyConfig.type = 'formly-paragraph';
|
|
1824
|
+
formlyConfig.className = 'component-text-field';
|
|
1825
|
+
}
|
|
1765
1826
|
formlyConfig.id = control.identifier;
|
|
1766
1827
|
formlyConfig.props['isDisplayMode'] = true;
|
|
1767
1828
|
formlyConfig.props['collectionControlIdentifier'] =
|
|
@@ -2464,4 +2525,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
2464
2525
|
}], completionEvent: [{
|
|
2465
2526
|
type: Output
|
|
2466
2527
|
}] } });
|
|
2467
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JpZ2luLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9vcmlnaW4tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL29yaWdpbi1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBSU4sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxXQUFXLEdBR1osTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQ0wsT0FBTyxFQUNQLGNBQWMsRUFDZCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFlBQVksRUFDWixTQUFTLEVBQ1QsVUFBVSxFQUNWLEVBQUUsRUFDRixTQUFTLEVBRVQsR0FBRyxFQUNILFlBQVksR0FDYixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU8vQyxPQUFPLEVBS0wsUUFBUSxFQUNSLGFBQWEsRUFDYixlQUFlLEVBQ2Ysc0JBQXNCLEdBR3ZCLE1BQU0sc0JBQXNCLENBQUM7QUFLOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBWSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVVqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQVFsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUEwRSx1QkFBdUIsRUFBeUIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3SixP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Q0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQzsrR0FuckdVLHNCQUFzQjttR0FBdEIsc0JBQXNCLG1wQkFDbkIsV0FBVyxxRUNyRjNCLGd1Q0F3Q0E7OzRGRDRDYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsaUJBQWlCO3VmQUtBLFlBQVk7c0JBQXRDLFlBQVk7dUJBQUMsV0FBVztnQkFHaEIsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFjSSxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBGb3JtbHlGaWVsZCxcbiAgRm9ybWx5RmllbGRDb25maWcsXG4gIEZvcm1seUZvcm1PcHRpb25zLFxufSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7XG4gIFN1YmplY3QsXG4gIGZpcnN0VmFsdWVGcm9tLFxuICBzdGFydFdpdGgsXG4gIHBhaXJ3aXNlLFxuICBkZWJvdW5jZVRpbWUsXG4gIHN3aXRjaE1hcCxcbiAgY2F0Y2hFcnJvcixcbiAgb2YsXG4gIHRha2VVbnRpbCxcbiAgT2JzZXJ2YWJsZSxcbiAgbWFwLFxuICBTdWJzY3JpcHRpb24sXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTGFiZWxLZXlzIH0gZnJvbSAnLi9lbnVtcy9sYWJlbC5rZXlzJztcbmltcG9ydCB7IEFwaVZhbGlkYXRlUmVxdWVzdCB9IGZyb20gJy4vbW9kZWxzL2FwcGxpY2F0aW9uLm1vZGVsJztcbmltcG9ydCB7XG4gIERpY3Rpb25hcnlEdG8sXG4gIERpY3Rpb25hcnlWYWx1ZSxcbiAgRGljdGlvbmFyeVZhbHVlRHRvLFxufSBmcm9tICcuL21vZGVscy9kaWN0aW9uYXJ5Lm1vZGVsJztcbmltcG9ydCB7XG4gIEZvcm1Nb2RlbCxcbiAgRGlzcGxheU1vZGVsLFxuICBHZW5lcmFsRGF0YU1vZGVsLFxuICBTdGVwc1NldHRpbmdzLFxuICBGbHV4VHlwZSxcbiAgRGltZW5zaW9uVHlwZSxcbiAgU3RlcENvbnRyb2xUeXBlLFxuICBNYW51YWxJbnB1dENvbnRyb2xUeXBlLFxuICBQcmVzZW50YXRpb25QYXJhZ3JhcGhDb250cm9sLFxuICBEaWN0aW9uYXJ5Q29udHJvbERhdGEsXG59IGZyb20gJy4vbW9kZWxzL2Zvcm1zLm1vZGVsJztcbmltcG9ydCB7IExhYmVsSW5mbywgVHJhbnNsYXRpb25JbmZvIH0gZnJvbSAnLi9tb2RlbHMvbGFiZWwtaW5mby5tb2RlbCc7XG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gJy4vbW9kZWxzL2xhYmVsLm1vZGVsJztcbmltcG9ydCB7IExhbmd1YWdlIH0gZnJvbSAnLi9tb2RlbHMvbGFuZ3VhZ2UubW9kZWwnO1xuaW1wb3J0IHsgRGljdGlvbmFyeUxhYmVsSW5mbyB9IGZyb20gJy4vb3RoZXJzL2RpY3Rpb25hcnktbGFiZWwtaW5mbyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFR5cGUgfSBmcm9tICcuL290aGVycy9lbnZpcm9ubWVudC10eXBlJztcbmltcG9ydCB7IENzc1J1bGVzLCBVdGlscyB9IGZyb20gJy4vb3RoZXJzL3V0aWxzJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uRGF0YVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2FwcGxpY2F0aW9uRGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IExhYmVsU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvbGFiZWxzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJveHlTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wcm94eS5zZXJ2aWNlJztcbmltcG9ydCB7IERpY3Rpb25hcnlTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9kaWN0aW9uYXJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9yaWdpbkZvcm1BdXRoU2VydmljZSB9IGZyb20gJy4vb3JpZ2luLWZvcm0tYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1zU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZm9ybXMuc2VydmljZSc7XG5pbXBvcnQgeyBJbnB1dENvbmZpZyB9IGZyb20gJy4vb3JpZ2luLWZvcm0tY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL290aGVycy9jb25maWctc2VydmljZSc7XG5pbXBvcnQgeyBNb2RlbFBvcHVsYXRpb25IZWxwZXIgfSBmcm9tICcuL21vZGVsLXBvcHVsYXRpb24uaGVscGVyJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQge1xuICBPcGVyYXRpb25SZXN1bHQsXG4gIE9yaWdpbkZvcm1TaWduYWxySGFuZGxlclNlcnZpY2UsXG59IGZyb20gJy4vc2VydmljZXMvb3JpZ2luLWZvcm0tc2lnbmFsci1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aW9uU3RlcEhhbmRsZXIgfSBmcm9tICcuL2FjdGlvbi1zdGVwLWhhbmRsZXInO1xuaW1wb3J0IHsgU2Nyb2xsVG9FcnJvclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3Njcm9sbC10by1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1Dc3NIZWxwZXIgfSBmcm9tICcuL2Zvcm0tY3NzLmhlbHBlcic7XG5pbXBvcnQgeyBCYXNlQ29udHJvbCwgQ29udHJvbERhdGEsIERlcGVuZGVudERpY3Rpb25hcnlEYXRhLCBQcmVzZW50YXRpb25Db250cm9sLCBQcmVzZW50YXRpb25Db250cm9sVHlwZSwgU2VjdGlvbkRhdGEsIFN0ZXBEYXRhIH0gZnJvbSAnLi9tb2RlbHMvZmx1eC5tb2RlbCc7XG5pbXBvcnQgeyBGTEFHX0lDT05TIH0gZnJvbSAnLi9mbGFnLWljb25zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW9yaWdpbi1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL29yaWdpbi1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vb3JpZ2luLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29sbGVjdG9yRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZHJlbihGb3JtbHlGaWVsZCkgZm9ybWx5RmllbGRzOiBRdWVyeUxpc3Q8Rm9ybWx5RmllbGQ+O1xuICBcbiAgLy90aGVzZSBhcmUgc3BlY2lmaWMgdG8gdGhlIGxpYlxuICBASW5wdXQoKSBjb25maWdDb21wb25lbnQ6IElucHV0Q29uZmlnIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBjb25maWdVdWlkITogc3RyaW5nO1xuICBASW5wdXQoKSBjdXJyZW50U3RlcElkOiBzdHJpbmc7XG4gIC8vZW5kIHNwZWNpZmljIHRvIGxpYlxuXG4gIEBJbnB1dCgpIGFwcE1vZGVsOiBGb3JtTW9kZWw7XG4gIEBJbnB1dCgpIHNpZ25CYXNlVXJsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGN1cnJlbnRMYW5ndWFnZUlzbzogc3RyaW5nO1xuICBASW5wdXQoKSBmaWxsRGF0YTogYW55O1xuICBASW5wdXQoKSBpbml0Rmxvd1ZhbHVlczogc3RyaW5nO1xuICBASW5wdXQoKSBlbnY6IHN0cmluZztcbiAgQElucHV0KCkgc2hvd0Rpc3BsYXlNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dMYW5ndWFnZVNlbGVjdG9yOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgaXNEZW1vTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0RlYnVnOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFwcERhdGFVdWlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJsb2NrUHJldmlvdXNTdGVwOiBib29sZWFuO1xuICBASW5wdXQoKSBkYXRhVXJsSWQ6IHN0cmluZztcbiAgQElucHV0KCkgbm9CdXR0b25zSW5WaWV3OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgZmx1eDogU3RlcERhdGFbXTtcbiAgcHJpdmF0ZSBkaXNwbGF5OiBEaXNwbGF5TW9kZWw7XG4gIHByaXZhdGUgZGVzaWduOiBDc3NSdWxlcztcbiAgcHJpdmF0ZSBnZW5lcmFsRGF0YTogR2VuZXJhbERhdGFNb2RlbDtcbiAgcHJpdmF0ZSBsYWJlbHM6IExhYmVsW107XG4gIHByaXZhdGUgc3RlcERpY3Rpb25hcnlEZXBlbmRlbnRJZHM6IHN0cmluZ1tdO1xuICBwcml2YXRlIGF2YWlsYWJsZUxhbmd1YWdlczogTGFuZ3VhZ2VbXTtcbiAgcHJpdmF0ZSBzdGVwc1NldHRpbmdzOiBTdGVwc1NldHRpbmdzO1xuICBmb3JtbHlDb25maWdVcGRhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICB2aXNpYmxlRmllbGRzVXBkYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBmb3JtbHlVcGRhdGVBbmRHb05leHQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgZm9ybWx5R29OZXh0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBPdXRwdXQoKSBjb21wbGV0aW9uRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICBmb3JtbHlDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcbiAgZm9ybWx5QWxsU3RlcHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcbiAgYWN0aXZlU3RlcCA9IDA7XG4gIG1vZGVsOiBhbnk7XG4gIG9wdGlvbnM6IEZvcm1seUZvcm1PcHRpb25zID0ge307XG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgZGljdGlvbmFyeU1hcDogTWFwPHN0cmluZywgRGljdGlvbmFyeUR0bz4gPSBuZXcgTWFwKCk7XG4gIGRpY3Rpb25hcnlJZFRvVXVpZE1hcDogTWFwPG51bWJlciwgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgZ2VuZXJhbERhdGFLZXlzID0gTGFiZWxLZXlzLmFwcENvbmZpZ0VkaXQuZ2VuZXJhbERhdGE7XG4gIHByaXZhdGUgZmllbGRVbnN1YnNjcmliZVN1YmplY3RzOiBTdWJqZWN0PHZvaWQ+W10gPSBbXTtcbiAgcHJpdmF0ZSBjb2xsZWN0b3JIYW5kbGVyU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIC8vIEFjdGlvbiBzdGVwIGV4ZWN1dGlvbiBzdGF0ZVxuICBwcml2YXRlIGlzRXhlY3V0aW5nQWN0aW9ucyA9IGZhbHNlO1xuICBwcml2YXRlIGFjdGlvblN0ZXBTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHB1YmxpYyBpc1NhdmluZ0FmdGVyQWN0aW9ucyA9IGZhbHNlOyAvLyBNYWtlIHRoaXMgcHVibGljIHNvIHN0ZXBwZXIgY2FuIGFjY2VzcyBpdFxuXG4gIC8vIGlkZW50aWZpY2F0aW9uIGt5YyBjb21wb25lbnRcbiAgcHVibGljIGt5Y0FwaVVybDogc3RyaW5nO1xuICBwdWJsaWMga3ljT3JkZXJJZDogc3RyaW5nO1xuICBwdWJsaWMga3ljVG9rZW46IHN0cmluZztcbiAgcHVibGljIGt5Y0Vudjogc3RyaW5nO1xuICBwdWJsaWMga3ljUmVkaXJlY3RJZDogc3RyaW5nO1xuICBwdWJsaWMga3ljUGhvbmVOdW1iZXI6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMga3ljTGFuZ0lzbzogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBreWNTaG93Q2l0aXplbnNoaXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGt5Y1Njcm9sbE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gZW5kIGlkZW50aWZpY2F0aW9uIGt5YyBjb21wb25lbnRcbiAgcHVibGljIGxhbmd1YWdlRmxhZ3M6IGFueVtdID0gW1xuICAgIHtcbiAgICAgIGxhbmd1YWdlOiAnRW5nbGlzaCcsXG4gICAgICBjb2RlOiAnZW4nLFxuICAgICAgdHlwZTogJ1VTJyxcbiAgICAgIGljb246IEZMQUdfSUNPTlMuZW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBsYW5ndWFnZTogJ1JvbWFuYScsXG4gICAgICBjb2RlOiAncm8nLFxuICAgICAgaWNvbjogRkxBR19JQ09OUy5ybyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhbmd1YWdlOiAnRGV1dHNjaCcsXG4gICAgICBjb2RlOiAnZGUnLFxuICAgICAgaWNvbjogRkxBR19JQ09OUy5kZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhbmd1YWdlOiAnRnJhbsOnYWlzJyxcbiAgICAgIGNvZGU6ICdmcicsXG4gICAgICBpY29uOiBGTEFHX0lDT05TLmZyLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFuZ3VhZ2U6ICdJdGFsaWFubycsXG4gICAgICBjb2RlOiAnaXQnLFxuICAgICAgaWNvbjogRkxBR19JQ09OUy5pdCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhbmd1YWdlOiAnRXNwYcOxb2wnLFxuICAgICAgY29kZTogJ2VzJyxcbiAgICAgIGljb246IEZMQUdfSUNPTlMuZXMsXG4gICAgfSxcbiAgXTtcbiAgZm9ybWx5Q29sbGVjdGluZ0ZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXTtcbiAgZm9ybWx5UHJlc2VudGF0aW9uRmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdO1xuICBjb250cm9sSWRzV2l0aFZhbHVlczogYW55O1xuICBfc2VsZiA9IHRoaXM7XG5cbiAgXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2VydmljZTogRGljdGlvbmFyeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByb3h5OiBQcm94eVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYWJlbFNlcnZpY2U6IExhYmVsU2VydmljZSxcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uRGF0YVNlcnZpY2U6IEFwcGxpY2F0aW9uRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5nU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IE9yaWdpbkZvcm1BdXRoU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1zU2VydmljZTogRm9ybXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgb3JpZ2luRm9ybVNpZ25hbHJIYW5kbGVyU2VydmljZTogT3JpZ2luRm9ybVNpZ25hbHJIYW5kbGVyU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGlvblN0ZXBIYW5kbGVyOiBBY3Rpb25TdGVwSGFuZGxlcixcbiAgICBwcml2YXRlIHNjcm9sbFRvRXJyb3JTZXJ2aWNlOiBTY3JvbGxUb0Vycm9yU2VydmljZVxuICApIHtcbiAgICB0aGlzLmt5Y0FwaVVybCA9IHByb3h5LmFwaVVSTDtcbiAgICB0aGlzLmt5Y09yZGVySWQgPSBwcm94eS5vcmRlcklEITtcbiAgICB0aGlzLmt5Y1Rva2VuID0gcHJveHkudG9rZW47XG4gICAgdGhpcy5reWNFbnYgPSBwcm94eS5lbnY7XG5cbiAgICB0aGlzLmt5Y0xhbmdJc28gPSBwcm94eS5sYW5nSXNvO1xuICAgIGNvbnN0IGlzTG9hZGluZ1N1YiA9XG4gICAgICB0aGlzLm9yaWdpbkZvcm1TaWduYWxySGFuZGxlclNlcnZpY2UuaXNMb2FkaW5nJC5zdWJzY3JpYmUoKGxvYWRpbmcpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNMb2FkaW5nICE9PSBsb2FkaW5nKSB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBsb2FkaW5nO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aGlzLmNvbGxlY3RvckhhbmRsZXJTdWJzY3JpcHRpb25zLmFkZChpc0xvYWRpbmdTdWIpO1xuXG4gICAgICAgIGNvbnN0IG9wZXJhdGlvbkNvbXBsZXRlZFN1YiA9XG4gICAgICB0aGlzLm9yaWdpbkZvcm1TaWduYWxySGFuZGxlclNlcnZpY2Uub3BlcmF0aW9uQ29tcGxldGVkJC5zdWJzY3JpYmUoXG4gICAgICAgIGFzeW5jIChyZXN1bHQ6IE9wZXJhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQub3BlcmF0aW9uSWRlbnRpZmllciA9PT0gJ0tZQ19QUk9DRVNTSU5HJykge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICdLWUMgUHJvY2Vzc2luZyBzdWNjZXNzZnVsbHkgY29tcGxldGVkICh2aWEgSGFuZGxlciBTZXJ2aWNlKTonLFxuICAgICAgICAgICAgICAgIHJlc3VsdC5kYXRhXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChyZXN1bHQuZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsbERhdGEgPSBKU09OLnBhcnNlKHJlc3VsdC5kYXRhLmZpbGxEYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVsYXRlTW9kZWxXaXRoRmlsbERhdGEodGhpcy5maWxsRGF0YSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLmZvcm1seVVwZGF0ZUFuZEdvTmV4dC5lbWl0KHt9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgJ0tZQyBQcm9jZXNzaW5nIGZhaWxlZCAodmlhIEhhbmRsZXIgU2VydmljZSk6JyxcbiAgICAgICAgICAgICAgICByZXN1bHQuZXJyb3JcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgdGhpcy5jb2xsZWN0b3JIYW5kbGVyU3Vic2NyaXB0aW9ucy5hZGQob3BlcmF0aW9uQ29tcGxldGVkU3ViKTtcblxuICAgIC8vIFN1YnNjcmliZSB0byBhY3Rpb24gc3RlcCBleGVjdXRpb24gZXZlbnRzXG4gICAgY29uc3QgYWN0aW9uRXhlY3V0aW5nU3ViID1cbiAgICAgIHRoaXMuYWN0aW9uU3RlcEhhbmRsZXIuYWN0aW9uRXhlY3V0aW5nJC5zdWJzY3JpYmUoKGV4ZWN1dGluZykgPT4ge1xuICAgICAgICB0aGlzLmlzRXhlY3V0aW5nQWN0aW9ucyA9IGV4ZWN1dGluZztcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBleGVjdXRpbmc7XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgdGhpcy5hY3Rpb25TdGVwU3Vic2NyaXB0aW9ucy5hZGQoYWN0aW9uRXhlY3V0aW5nU3ViKTtcblxuICAgIGNvbnN0IGFjdGlvbkNvbXBsZXRlZFN1YiA9XG4gICAgICB0aGlzLmFjdGlvblN0ZXBIYW5kbGVyLmFjdGlvbkNvbXBsZXRlZCQuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ/CfjqwgQWN0aW9uIHN0ZXAgY29tcGxldGVkOicsIHJlc3VsdCk7XG4gICAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCfinYwgQWN0aW9uIHN0ZXAgZmFpbGVkOicsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgYXV0by1wcm9ncmVzcyBoZXJlIGFzIGl0J3MgaGFuZGxlZCBpbiBleGVjdXRlQWN0aW9uU3RlcHNCZWZvcmVNb3ZpbmdcbiAgICAgIH0pO1xuICAgIHRoaXMuYWN0aW9uU3RlcFN1YnNjcmlwdGlvbnMuYWRkKGFjdGlvbkNvbXBsZXRlZFN1Yik7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5kYXRhVXJsSWQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgdGhpcy5hcHBsaWNhdGlvbkRhdGFTZXJ2aWNlLmdldERhdGFVcmwodGhpcy5kYXRhVXJsSWQpXG4gICAgICApO1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLmNvbmZpZ1V1aWQgPSByZXN1bHQuYXBwSWQ7XG4gICAgICAgIHRoaXMuYXBwRGF0YVV1aWQgPSByZXN1bHQuYXBwRGF0YUlkO1xuICAgICAgICB0aGlzLmVudiA9IHJlc3VsdC5lbnY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYXBwRGF0YVV1aWQgJiYgdGhpcy5jdXJyZW50U3RlcElkKSB7XG4gICAgICB0aGlzLmFwcGxpY2F0aW9uRGF0YVNlcnZpY2Uuc2V0Q3VycmVudFN0ZXAoXG4gICAgICAgIHRoaXMuYXBwRGF0YVV1aWQsXG4gICAgICAgIHRoaXMuY3VycmVudFN0ZXBJZFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYXBwRGF0YVV1aWQpIHtcbiAgICAgIHRoaXMuYXBwRGF0YVV1aWQgPSBVdGlscy5nZW5lcmF0ZVVVSUQoKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbmZpZ0NvbXBvbmVudCAmJlxuICAgICAgdGhpcy5jb25maWdDb21wb25lbnQuVG9rZW4gJiZcbiAgICAgIHRoaXMuY29uZmlnQ29tcG9uZW50LlJlZnJlc2hUb2tlblxuICAgICkge1xuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLnVwZGF0ZUNvbmZpZ0Zyb21JbnB1dCh0aGlzLmNvbmZpZ0NvbXBvbmVudCk7XG4gICAgICBhd2FpdCB0aGlzLmF1dGhTZXJ2aWNlLnNldFRva2VucyhcbiAgICAgICAgdGhpcy5jb25maWdDb21wb25lbnQuVG9rZW4sXG4gICAgICAgIHRoaXMuY29uZmlnQ29tcG9uZW50LlJlZnJlc2hUb2tlblxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyB8fCB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMubGFuZ1NlcnZpY2UuZ2V0TGFuZ3VhZ2VzKCkpLnRoZW4oKGxpc3QpID0+IHtcbiAgICAgICAgaWYgKGxpc3QgJiYgbGlzdC5pdGVtcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzID0gbGlzdC5pdGVtcztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMubG9hZEFwcERhdGEoKTtcbiAgICBpZiAoIXRoaXMuY3VycmVudExhbmd1YWdlSXNvICYmIHRoaXMuYXBwTW9kZWwpIHtcbiAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvID0gdGhpcy5hcHBNb2RlbC5nZW5lcmFsRGF0YS5kZWZhdWx0TGFuZ3VhZ2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmFwcE1vZGVsKSB7XG4gICAgICBhd2FpdCB0aGlzLmluaXRBc3luYygpO1xuICAgIH1cbiAgfVxuXG4gYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChjaGFuZ2VzWydjb25maWdDb21wb25lbnQnXSAmJiAhY2hhbmdlc1snY29uZmlnQ29tcG9uZW50J10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jb25maWdDb21wb25lbnQgJiZcbiAgICAgICAgdGhpcy5jb25maWdDb21wb25lbnQuVG9rZW4gJiZcbiAgICAgICAgdGhpcy5jb25maWdDb21wb25lbnQuUmVmcmVzaFRva2VuXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLnVwZGF0ZUNvbmZpZ0Zyb21JbnB1dCh0aGlzLmNvbmZpZ0NvbXBvbmVudCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYXV0aFNlcnZpY2Uuc2V0VG9rZW5zKFxuICAgICAgICAgIHRoaXMuY29uZmlnQ29tcG9uZW50LlRva2VuLFxuICAgICAgICAgIHRoaXMuY29uZmlnQ29tcG9uZW50LlJlZnJlc2hUb2tlblxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzWydjdXJyZW50TGFuZ3VhZ2VJc28nXSAmJlxuICAgICAgIWNoYW5nZXNbJ2N1cnJlbnRMYW5ndWFnZUlzbyddLmZpcnN0Q2hhbmdlXG4gICAgKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMpIHtcbiAgICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmxhbmdTZXJ2aWNlLmdldExhbmd1YWdlcygpKS50aGVuKChsaXN0KSA9PiB7XG4gICAgICAgICAgICBpZiAobGlzdCAmJiBsaXN0Lml0ZW1zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzID0gbGlzdC5pdGVtcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hcHBEYXRhVXVpZCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhcHBEYXRhID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvbkRhdGFTZXJ2aWNlLmdldFN0ZXBzKFxuICAgICAgICAgICAgICB0aGlzLmFwcERhdGFVdWlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGFwcERhdGEgJiYgYXBwRGF0YS5maWxsRGF0YSkge1xuICAgICAgICAgICAgICB0aGlzLmZpbGxEYXRhID0gSlNPTi5wYXJzZShhcHBEYXRhLmZpbGxEYXRhKTtcbiAgICAgICAgICAgICAgdGhpcy5ibG9ja1ByZXZpb3VzU3RlcCA9IGFwcERhdGEuYmxvY2tQcmV2aW91c1N0ZXA7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmZpbGxEYXRhLm1ldGFkYXRhLmxhbmd1YWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28gPSB0aGlzLmZpbGxEYXRhLm1ldGFkYXRhLmxhbmd1YWdlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJldHJpZXZpbmcgYXBwIGRhdGEnLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdEFzeW5jKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkQXBwRGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiB7IGNvbmZpZ3VyYXRpb246IGFueTsgZmlsbERhdGE/OiBhbnkgfSA9XG4gICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgIHRoaXMuZm9ybXNTZXJ2aWNlLmxvYWRGb3JtQnlVdWlkKHRoaXMuY29uZmlnVXVpZCwgdGhpcy5lbnYpXG4gICAgICAgICk7XG4gICAgICB0aGlzLmFwcE1vZGVsID0gSlNPTi5wYXJzZShyZXNwb25zZS5jb25maWd1cmF0aW9uKTtcbiAgICAgIHRoaXMuZmlsbERhdGEgPSByZXNwb25zZS5maWxsRGF0YSA/IEpTT04ucGFyc2UocmVzcG9uc2UuZmlsbERhdGEpIDogbnVsbDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBmb3JtIGRhdGEnLCBlcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5pdEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tQWxsRmllbGRzKCk7XG4gICAgYXdhaXQgdGhpcy5idWlsZEZvcm1seUFzeW5jKCk7XG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUmVmZXJlbmNlRmllbGRzKHRoaXMuZm9ybWx5Q29uZmlnKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1seUNvbmZpZygpO1xuICAgIHRoaXMuZm9ybWx5Q29uZmlnVXBkYXRlZC5lbWl0KCk7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgYXBwbGljYXRpb25MYW5ndWFnZXMoKTogTGFuZ3VhZ2VbXSB7XG4gICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzPy5maWx0ZXIoKGEpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmFwcE1vZGVsPy5nZW5lcmFsRGF0YT8ubGFuZ3VhZ2VzPy5pbmRleE9mKGEuaXNvKSA+PSAwO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJldHVybkZMYWcobGFuZ3VhZ2U6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmxhbmd1YWdlRmxhZ3MuZmluZCgobCkgPT4gbC5jb2RlID09IGxhbmd1YWdlKT8uaWNvbjtcbiAgfVxuXG4gIGNoYW5nZUxhbmd1YWdlKCRldmVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28gPSAkZXZlbnQ7XG4gICAgdGhpcy5hcHBsaWNhdGlvbkRhdGFTZXJ2aWNlXG4gICAgICAuY2hhbmdlTGFuZ3VhZ2UodGhpcy5hcHBEYXRhVXVpZCwgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28pXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5pbml0QXN5bmMoKTtcbiAgfVxuICBnZXRMYW5ndWFnZU5hbWUobGFuZ3VhZ2VJc286IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcy5maW5kKFxuICAgICAgKGxhbmcpID0+IGxhbmcuaXNvID09PSBsYW5ndWFnZUlzb1xuICAgICk7XG4gICAgcmV0dXJuIGxhbmd1YWdlID8gbGFuZ3VhZ2UubmFtZSA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBidWlsZEZvcm1seUFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbykge1xuICAgICAgYXdhaXQgdGhpcy5nZXRMYWJlbHMoKTtcbiAgICB9XG5cbiAgICAvLyBTVEVQIDE6IEluaXRpYWxpemUgZmx1eCBhbmQgb3RoZXIgcHJvcGVydGllcyBmaXJzdFxuICAgIHRoaXMuZmx1eCA9IHRoaXMuYXBwTW9kZWwuZmx1eDtcbiAgICB0aGlzLmRpc3BsYXkgPSB0aGlzLmFwcE1vZGVsLmRpc3BsYXk7XG4gICAgdGhpcy5kZXNpZ24gPSB0aGlzLmFwcE1vZGVsLmdlbmVyYXRlZENzcztcbiAgICB0aGlzLmdlbmVyYWxEYXRhID0gdGhpcy5hcHBNb2RlbC5nZW5lcmFsRGF0YTtcbiAgICB0aGlzLmFkZFJlbmRlcmVkQ3NzKCk7XG5cbiAgICAvLyBTVEVQIDI6IExvYWQgQUxMIGRpY3Rpb25hcmllcyB1cGZyb250IChub3cgdGhhdCBmbHV4IGlzIGluaXRpYWxpemVkKVxuICAgIGF3YWl0IHRoaXMubG9hZEFsbFJlcXVpcmVkRGljdGlvbmFyaWVzKCk7XG5cbiAgICAvLyBTVEVQIDM6IENvbnRpbnVlIHdpdGggZXhpc3RpbmcgZm9ybSBidWlsZGluZyBsb2dpY1xuICAgIHRoaXMuZm9ybWx5Q29uZmlnID0gW107XG4gICAgdGhpcy5mb3JtbHlDb2xsZWN0aW5nRmllbGRzID0gW107XG4gICAgdGhpcy5mb3JtbHlQcmVzZW50YXRpb25GaWVsZHMgPSBbXTtcbiAgICB0aGlzLm1vZGVsID0ge307XG4gICAgdGhpcy5mb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgICBpZiAodGhpcy5maWxsRGF0YSkge1xuICAgICAgdGhpcy5wb3B1bGF0ZUNvbnRyb2xJZHNXaXRoVmFsdWVEaWN0aW9uYXJ5KCk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBtb2RlbCB3aXRoIGRlZmF1bHQgdmFsdWVzIGlmIG5vIGZpbGxEYXRhXG4gICAgaWYgKCF0aGlzLmZpbGxEYXRhKSB7XG4gICAgICB0aGlzLm1vZGVsID0gTW9kZWxQb3B1bGF0aW9uSGVscGVyLmFwcGx5RGVmYXVsdHNUb01vZGVsKFxuICAgICAgICB0aGlzLmZsdXgsXG4gICAgICAgIHRoaXMuZGljdGlvbmFyeU1hcCxcbiAgICAgICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucG9wdWxhdGVNb2RlbFdpdGhGaWxsRGF0YSh0aGlzLmZpbGxEYXRhKTtcbiAgICAgIHRoaXMucG9wdWxhdGVDb250cm9sSWRzV2l0aFZhbHVlRGljdGlvbmFyeSgpO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwpO1xuICAgIGF3YWl0IHRoaXMuYnVpbGRGb3JtbHlDb25maWdBc3luYygpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSByZWZlcmVuY2VzIGZvciBkZWZhdWx0IHZhbHVlc1xuICAgIGlmICghdGhpcy5maWxsRGF0YSkge1xuICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUmVmZXJlbmNlRmllbGRzKHRoaXMuZm9ybWx5Q29uZmlnKTtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShzdGFydFdpdGgobnVsbCksIHBhaXJ3aXNlKCkpXG4gICAgICAuc3Vic2NyaWJlKChbcHJldiwgbmV4dF06IFthbnksIGFueV0pID0+XG4gICAgICAgIHRoaXMuaGFuZGxlRm9ybVZhbHVlQ2hhbmdlKFtwcmV2LCBuZXh0XSlcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZvcm1WYWx1ZUNoYW5nZShbcHJldiwgbmV4dF06IFthbnksIGFueV0pIHtcbiAgICBjb25zdCBjdXJyZW50TGFuZ3VhZ2VJZCA9IFV0aWxzLmZpbmRMYW5ndWFnZUlkQnlJc28oXG4gICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyxcbiAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBuZXh0KSB7XG4gICAgICBpZiAobmV4dFtrZXldPy52YWx1ZVRyYW5zbGF0aW9ucykge1xuICAgICAgICB2YXIgcyA9IEpTT04uc3RyaW5naWZ5KG5leHRba2V5XSk7XG4gICAgICAgIHZhciByZXBsYWNlZCA9IHMucmVwbGFjZSgvXCJ2YWx1ZVRyYW5zbGF0aW9uc1wiOi9nLCAnXCJ0cmFuc2xhdGlvbnNcIjonKTtcbiAgICAgICAgbmV4dFtrZXldID0gSlNPTi5wYXJzZShyZXBsYWNlZCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZm9ybWx5UHJlc2VudGF0aW9uRmllbGRzLmZpbHRlcihcbiAgICAgICAgKGkpID0+IGkucHJvcHMgJiYgaS5wcm9wc1snY29sbGVjdGlvbkNvbnRyb2xJZGVudGlmaWVyJ10gPT09IGtleVxuICAgICAgKTtcbiAgICAgIGlmIChmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgbGV0IHZhbHVlID0gJyc7XG4gICAgICAgICAgc3dpdGNoICh0eXBlb2YgbmV4dFtrZXldKSB7XG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgICAgdmFsdWUgPSBuZXh0W2tleV0gPyAnJmNoZWNrOycgOiAnJmNyb3NzOyc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBpZiAobmV4dFtrZXldPy50cmFuc2xhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IG5leHRba2V5XS50cmFuc2xhdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICh0cmFuc2xhdGlvbjogeyBsYW5ndWFnZUlkOiBhbnkgfSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb24ubGFuZ3VhZ2VJZCA9PT0gY3VycmVudExhbmd1YWdlSWRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdHJhbnNsYXRpb24gPyB0cmFuc2xhdGlvbi52YWx1ZSA6IG51bGw7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBuZXh0W2tleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZpZWxkLmRlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnN0ZXBEaWN0aW9uYXJ5RGVwZW5kZW50SWRzLmZpbmQoKGEpID0+IGEgPT0ga2V5KSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbmV4dFtrZXldPy5pZCAmJlxuICAgICAgICAgIChwcmV2ID09IG51bGwgfHwgcHJldltrZXldPy5pZCAhPT0gbmV4dFtrZXldPy5pZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5mb3JtbHlDb25maWdbMF0uZmllbGRHcm91cCA9IHRoaXMuZ2V0Rm9ybWx5RmlsdGVyZWRTdGVwcygpO1xuICAgICAgICAgIHZhciBmaWx0ZXJlZFN0ZXBzSWRlbnRpZmllcnMgPSB0aGlzLmZvcm1seUNvbmZpZ1swXS5maWVsZEdyb3VwLm1hcChcbiAgICAgICAgICAgIChmKSA9PiBmLnByb3BzPy5bJ3N0ZXBJZCddXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB2aXNpYmxlU3RlcHMgPSB0aGlzLmFjdGlvblN0ZXBIYW5kbGVyLmZpbHRlclZpc2libGVTdGVwcyhcbiAgICAgICAgICAgIHRoaXMuZmx1eCxcbiAgICAgICAgICAgIGZpbHRlcmVkU3RlcHNJZGVudGlmaWVyc1xuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy51cGRhdGVGb3JtbHlDb25maWcoKTtcbiAgICAgICAgICB0aGlzLnZpc2libGVGaWVsZHNVcGRhdGVkLmVtaXQodmlzaWJsZVN0ZXBzKTtcbiAgICAgICAgICB0aGlzLmZvcm1seUNvbmZpZ1VwZGF0ZWQuZW1pdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYWJlbHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLmxhYmVsU2VydmljZVxuICAgICAgICAuZ2V0TGFiZWxzKHRoaXMuY3VycmVudExhbmd1YWdlSXNvLCBmYWxzZSlcbiAgICAgICAgLnN1YnNjcmliZSgobCkgPT4ge1xuICAgICAgICAgIHRoaXMubGFiZWxzID0gbDtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3B1bGF0ZUNvbnRyb2xJZHNXaXRoVmFsdWVEaWN0aW9uYXJ5KCkge1xuICAgIHZhciBjdXJyZW50TGFuZ3VhZ2VJZCA9IHRoaXMuZ2V0Q3VycmVudExhbmd1YWdlSWQoKTtcbiAgICBjb25zdCBjb250cm9sSWRzV2l0aFZhbHVlcyA9IHRoaXMuZmlsbERhdGEuZmx1eFxuICAgICAgLmZsYXRNYXAoKHN0ZXA6IHsgc2VjdGlvbnM6IHsgY29udHJvbHM6IGFueVtdIH1bXSB9KSA9PlxuICAgICAgICBzdGVwLnNlY3Rpb25zLmZsYXRNYXAoKHNlY3Rpb246IHsgY29udHJvbHM6IGFueVtdIH0pID0+XG4gICAgICAgICAgc2VjdGlvbi5jb250cm9sc1xuICAgICAgICAgICAgLmZpbHRlcigoY29udHJvbCkgPT4gY29udHJvbC5jb250cm9sSWQgJiYgY29udHJvbC5maWxsVmFsdWUpXG4gICAgICAgICAgICAubWFwKChjb250cm9sKSA9PiAoe1xuICAgICAgICAgICAgICBjb250cm9sSWQ6IGNvbnRyb2wuY29udHJvbElkLFxuICAgICAgICAgICAgICBmaWxsVmFsdWU6IGNvbnRyb2wuZmlsbFZhbHVlLFxuICAgICAgICAgICAgICBmaWxsVmFsdWVJZDogY29udHJvbC5maWxsVmFsdWVJZCxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoXG4gICAgICAgICAgZGljdGlvbmFyeTogeyBbeDogc3RyaW5nXTogYW55IH0sXG4gICAgICAgICAgeyBjb250cm9sSWQsIGZpbGxWYWx1ZSwgZmlsbFZhbHVlSWQgfTogYW55XG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIGlmIChmaWxsVmFsdWVJZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBkaWN0XSBvZiB0aGlzLmRpY3Rpb25hcnlNYXAuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGljdC52YWx1ZXM/LmZpbmQoKHYpID0+IHYuaWQgPT0gZmlsbFZhbHVlSWQpO1xuICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHZhbHVlLnZhbHVlVHJhbnNsYXRpb25zLmZpbmQoXG4gICAgICAgICAgICAgICAgICAodCkgPT4gdC5sYW5ndWFnZUlkID09IGN1cnJlbnRMYW5ndWFnZUlkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnlbY29udHJvbElkXSA9IHRyYW5zbGF0aW9uLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRpY3Rpb25hcnlbY29udHJvbElkXSA9IGZpbGxWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnk7XG4gICAgICAgIH0sXG4gICAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIGFueT5cbiAgICAgICk7XG5cbiAgICBjb25zdCBpbml0Rmxvd1ZhbHVlcyA9IHRoaXMuZmlsbERhdGE/LmluaXRGbG93VmFsdWVzO1xuICAgIGNvbnN0IGFkZEluaXRGbG93VmFsdWVzID0gKG5vZGU6IGFueSwgcGF0aFBhcnRzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgaWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChwYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnRyb2xJZHNXaXRoVmFsdWVzW2Bpbml0Rmxvd1ZhbHVlc18ke3BhdGhQYXJ0cy5qb2luKCdfJyl9YF0gPSAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgICAgIG5vZGUuZm9yRWFjaCgoY2hpbGQsIGlkeCkgPT5cbiAgICAgICAgICBhZGRJbml0Rmxvd1ZhbHVlcyhjaGlsZCwgWy4uLnBhdGhQYXJ0cywgU3RyaW5nKGlkeCldKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgT2JqZWN0LmtleXMobm9kZSkuZm9yRWFjaCgoaykgPT5cbiAgICAgICAgICBhZGRJbml0Rmxvd1ZhbHVlcyhub2RlW2tdLCBbLi4ucGF0aFBhcnRzLCBrXSlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29udHJvbElkc1dpdGhWYWx1ZXNbYGluaXRGbG93VmFsdWVzXyR7cGF0aFBhcnRzLmpvaW4oJ18nKX1gXSA9XG4gICAgICAgICAgU3RyaW5nKG5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoaW5pdEZsb3dWYWx1ZXMgIT09IG51bGwgJiYgaW5pdEZsb3dWYWx1ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYWRkSW5pdEZsb3dWYWx1ZXMoaW5pdEZsb3dWYWx1ZXMsIFtdKTtcbiAgICB9XG4gICAgdGhpcy5jb250cm9sSWRzV2l0aFZhbHVlcyA9IGNvbnRyb2xJZHNXaXRoVmFsdWVzO1xuICB9XG4gIHByaXZhdGUgZ2V0Q3VycmVudExhbmd1YWdlSWQoKTogbnVtYmVyIHtcbiAgICBjb25zdCBjdXJyZW50TGFuZ3VhZ2VJZCA9IFV0aWxzLmZpbmRMYW5ndWFnZUlkQnlJc28oXG4gICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyxcbiAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgKTtcbiAgICByZXR1cm4gY3VycmVudExhbmd1YWdlSWQ7XG4gIH1cbiAgcHJpdmF0ZSBhc3luYyBidWlsZEZvcm1seUNvbmZpZ0FzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3RlcHNTZXR0aW5ncyA9IHtcbiAgICAgIHNob3dDb3VudGVyOiB0aGlzLnNob3dEaXNwbGF5TW9kZVxuICAgICAgICA/IGZhbHNlXG4gICAgICAgIDogdGhpcy5nZW5lcmFsRGF0YS5zaG93Q291bnRlclN0ZXAsXG4gICAgICBzaG93TGFiZWxzOiB0aGlzLnNob3dEaXNwbGF5TW9kZSA/IGZhbHNlIDogdGhpcy5nZW5lcmFsRGF0YS5zaG93TmFtZVN0ZXAsXG4gICAgICBzaG93QWxsU3RlcHM6IHRoaXMuc2hvd0Rpc3BsYXlNb2RlXG4gICAgICAgID8gZmFsc2VcbiAgICAgICAgOiB0aGlzLmdlbmVyYWxEYXRhLnNob3dBbGxTdGVwcyxcbiAgICAgIHNob3dQcm9ncmVzc0JhcjpcbiAgICAgICAgdGhpcy5nZW5lcmFsRGF0YS5zaG93UHJvZ3Jlc3NCYXIgJiZcbiAgICAgICAgICB0aGlzLmdlbmVyYWxEYXRhLnNob3dBbGxTdGVwcyA9PSBmYWxzZVxuICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgIDogZmFsc2UsXG4gICAgfTtcblxuICAgIHRoaXMuZm9ybWx5QWxsU3RlcHMgPSBhd2FpdCB0aGlzLmJ1aWxkRm9ybWx5RmllbGRHcm91cEFzeW5jKCk7XG4gICAgdmFyIGhhc0RpY3Rpb25hcnlEZXBlbmRlbnRTdGVwcyA9IHRoaXMuZm9ybWx5QWxsU3RlcHMuc29tZShcbiAgICAgIChmKSA9PiBmLnByb3BzPy5bJ2RlcGVuZGVudERpY3Rpb25hcnknXT8uaXNEaWN0aW9uYXJ5RGVwZW5kZW50XG4gICAgKTtcblxuICAgIHZhciBmb3JtbHlGaWx0ZXJlZFN0ZXBzID0gdGhpcy5nZXRGb3JtbHlGaWx0ZXJlZFN0ZXBzKCk7XG4gICAgdmFyIGZpbHRlcmVkU3RlcHNJZGVudGlmaWVycyA9IGZvcm1seUZpbHRlcmVkU3RlcHMubWFwKFxuICAgICAgKGYpID0+IGYucHJvcHM/Llsnc3RlcElkJ11cbiAgICApO1xuICAgIC8vIEdldCB2aXNpYmxlIHN0ZXBzIGZvciBhY2N1cmF0ZSBzdGVwIGNvdW50aW5nXG4gICAgY29uc3QgdmlzaWJsZVN0ZXBzID0gdGhpcy5hY3Rpb25TdGVwSGFuZGxlci5maWx0ZXJWaXNpYmxlU3RlcHModGhpcy5mbHV4KTtcbiAgICBjb25zdCBmaWx0ZXJlZFZpc2libGVTdGVwcyA9IHRoaXMuYWN0aW9uU3RlcEhhbmRsZXIuZmlsdGVyVmlzaWJsZVN0ZXBzKFxuICAgICAgdGhpcy5mbHV4LFxuICAgICAgZmlsdGVyZWRTdGVwc0lkZW50aWZpZXJzXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybWx5Q29uZmlnID0gW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnc3RlcHBlcicsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgYXBwRGF0YUlkOiB0aGlzLmZpbGxEYXRhXG4gICAgICAgICAgICA/IHRoaXMuZmlsbERhdGE/Lm1ldGFkYXRhPy5hcHBEYXRhSWRcbiAgICAgICAgICAgIDogdGhpcy5hcHBEYXRhVXVpZCxcbiAgICAgICAgICBkZXNpZ246IHRoaXMuZGVzaWduLFxuICAgICAgICAgIGFwcGxpY2F0aW9uSWQ6IHRoaXMuYXBwTW9kZWwuYXBwbGljYXRpb25VdWlkLFxuICAgICAgICAgIGZsdXg6IHZpc2libGVTdGVwcywgLy8gUGFzcyBvbmx5IHZpc2libGUgc3RlcHMgdG8gc3RlcHBlclxuICAgICAgICAgIGZpbHRlcmVkRmx1eDogZmlsdGVyZWRWaXNpYmxlU3RlcHMsXG4gICAgICAgICAgaXNEaXNwbGF5TW9kZTogdGhpcy5zaG93RGlzcGxheU1vZGUsXG4gICAgICAgICAgZmlsbERhdGE6IHRoaXMuZmlsbERhdGEsXG4gICAgICAgICAgaW5pdEZsb3dWYWx1ZXM6IHRoaXMuaW5pdEZsb3dWYWx1ZXMsXG4gICAgICAgICAgZGVmYXVsdExhbmd1YWdlOiB0aGlzLmFwcE1vZGVsLmdlbmVyYWxEYXRhLmRlZmF1bHRMYW5ndWFnZSxcbiAgICAgICAgICBkaXNwbGF5OiB0aGlzLmRpc3BsYXksXG4gICAgICAgICAgZGVzaWduQ29uZmlnOiB7XG4gICAgICAgICAgICBidXR0b25zVmVydGljYWxQb3NpdGlvbjpcbiAgICAgICAgICAgICAgdGhpcy5hcHBNb2RlbC5kZXNpZ24uYnV0dG9uc1ZlcnRpY2FsUG9zaXRpb24sXG4gICAgICAgICAgICBidXR0b25zSG9yaXpvbnRhbFBvc2l0aW9uOlxuICAgICAgICAgICAgICB0aGlzLmFwcE1vZGVsLmRlc2lnbi5idXR0b25zSG9yaXpvbnRhbFBvc2l0aW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RlcHNTZXR0aW5nczogdGhpcy5zdGVwc1NldHRpbmdzLFxuICAgICAgICAgIG1ldGFEYXRhOiB0aGlzLmZpbGxEYXRhPy5tZXRhZGF0YSxcbiAgICAgICAgICBkZW1vTW9kZTogdGhpcy5pc0RlbW9Nb2RlLFxuICAgICAgICAgIGlzRGVidWc6IHRoaXMuaXNEZWJ1ZyxcbiAgICAgICAgICBub0J1dHRvbnNJblZpZXc6IHRoaXMubm9CdXR0b25zSW5WaWV3LFxuICAgICAgICAgIGJsb2NrUHJldmlvdXNTdGVwOiB0aGlzLmJsb2NrUHJldmlvdXNTdGVwLFxuICAgICAgICAgIGVudjogdGhpcy5lbnYsXG4gICAgICAgICAgaGFzRGljdGlvbmFyeURlcGVuZGVudFN0ZXBzOiBoYXNEaWN0aW9uYXJ5RGVwZW5kZW50U3RlcHMsXG4gICAgICAgICAgaGFzQWN0aW9uU3RlcHM6IHRoaXMuZmx1eC5zb21lKChzdGVwKSA9PlxuICAgICAgICAgICAgdGhpcy5hY3Rpb25TdGVwSGFuZGxlci5pc0FjdGlvblN0ZXAoc3RlcClcbiAgICAgICAgICApLCAvLyBJbmRpY2F0ZSBpZiB0aGVyZSBhcmUgYWN0aW9uIHN0ZXBzXG4gICAgICAgICAgY29tcGxldGlvbkV2ZW50OiAoKSA9PiB0aGlzLm9uQ29tcGxldGlvbigpLFxuICAgICAgICAgIG9uU2VsZWN0ZWRQYWdlQ2hhbmdpbmc6IChpbmRleDogbnVtYmVyKSA9PlxuICAgICAgICAgICAgdGhpcy5vblNlbGVjdGVkUGFnZUNoYW5naW5nKGluZGV4KSxcbiAgICAgICAgICBvblNlbGVjdGVkUGFnZUNoYW5nZWQ6IChpbmRleDogbnVtYmVyKSA9PlxuICAgICAgICAgICAgdGhpcy5vblNlbGVjdGVkUGFnZUNoYW5nZWQoaW5kZXgpLFxuICAgICAgICB9LFxuICAgICAgICBmaWVsZEdyb3VwOiBmb3JtbHlGaWx0ZXJlZFN0ZXBzLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgLy8gRm9yIGRpc3BsYXkgbW9kZSwgcG9wdWxhdGUgdmFsdWVzIGltbWVkaWF0ZWx5IGFmdGVyIGNvbmZpZyBpcyBidWlsdFxuICAgIGlmICh0aGlzLnNob3dEaXNwbGF5TW9kZSAmJiB0aGlzLmZvcm1seUNvbmZpZ1swXT8uZmllbGRHcm91cCkge1xuICAgICAgZm9yIChjb25zdCBzdGVwIG9mIHRoaXMuZm9ybWx5Q29uZmlnWzBdLmZpZWxkR3JvdXApIHtcbiAgICAgICAgdGhpcy5zZXRQcmVzZW50YXRpb25Db250cm9sVmFsdWVzUmVjdXJzaXZlbHkoc3RlcCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvblNlbGVjdGVkUGFnZUNoYW5naW5nKHN0ZXBUcmFuc2l0aW9uOiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsZXQgZnJvbUluZGV4OiBudW1iZXI7XG4gICAgbGV0IHRvSW5kZXg6IG51bWJlcjtcbiAgICBsZXQgY2FsbGJhY2s6ICgpID0+IHZvaWQgPSAoKSA9PiB7IH07XG5cbiAgICBpZiAodHlwZW9mIHN0ZXBUcmFuc2l0aW9uID09PSAnbnVtYmVyJykge1xuICAgICAgdG9JbmRleCA9IHN0ZXBUcmFuc2l0aW9uO1xuICAgICAgZnJvbUluZGV4ID0gdGhpcy5hY3RpdmVTdGVwO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcm9tSW5kZXggPSBzdGVwVHJhbnNpdGlvbi5mcm9tO1xuICAgICAgdG9JbmRleCA9IHN0ZXBUcmFuc2l0aW9uLnRvO1xuICAgICAgY2FsbGJhY2sgPSBzdGVwVHJhbnNpdGlvbi5jYWxsYmFjayB8fCAoKCkgPT4geyB9KTtcbiAgICB9XG5cbiAgICBsZXQgYWN0aW9uc0V4ZWN1dGVkID0gZmFsc2U7XG5cbiAgICBpZiAodG9JbmRleCA+IGZyb21JbmRleCkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICfinqHvuI8gTW92aW5nIGZvcndhcmQgLSBleGVjdXRpbmcgYWN0aW9uIHN0ZXBzIGFmdGVyIGN1cnJlbnQgc3RlcCdcbiAgICAgICk7XG4gICAgICBhY3Rpb25zRXhlY3V0ZWQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBY3Rpb25TdGVwc0FmdGVyQ3VycmVudFN0ZXAoXG4gICAgICAgIGZyb21JbmRleFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRvSW5kZXggPCBmcm9tSW5kZXgpIHtcbiAgICAgIGNvbnNvbGUubG9nKCfirIXvuI8gTW92aW5nIGJhY2t3YXJkIC0gbm8gYWN0aW9uIGV4ZWN1dGlvbiBuZWVkZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ/CflIQgU3RheWluZyBvbiBzYW1lIHN0ZXAgLSBubyBhY3Rpb24gZXhlY3V0aW9uIG5lZWRlZCcpO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZlU3RlcCA9IHRvSW5kZXg7XG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGlvbnNFeGVjdXRlZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZUFjdGlvblN0ZXBzQWZ0ZXJDdXJyZW50U3RlcChcbiAgICBjdXJyZW50U3RlcEluZGV4OiBudW1iZXJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuYWN0aW9uU3RlcEhhbmRsZXIuaXNFeGVjdXRpbmdBY3Rpb25zKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGZpbHRlcmVkU3RlcHMgPSB0aGlzLmZsdXguZmlsdGVyKChzKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHMuZGVwZW5kZW50RGljdGlvbmFyeSAmJlxuICAgICAgICBzLmRlcGVuZGVudERpY3Rpb25hcnkuaXNEaWN0aW9uYXJ5RGVwZW5kZW50XG4gICAgICApIHtcbiAgICAgICAgY29uc3QgbW9kZWxWYWx1ZSA9IHRoaXMubW9kZWxbcy5kZXBlbmRlbnREaWN0aW9uYXJ5LmRpY3Rpb25hcnlDb250cm9sSWRlbnRpZmllcl07XG4gICAgICAgIC8vIFNraXAgZGVwZW5kZW5jeSBjaGVjayBmb3IgbXVsdGlwbGUgc2VsZWN0aW9uIChhcnJheSlcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobW9kZWxWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gbW9kZWxWYWx1ZT8uaWQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzZWxlY3RlZFZhbHVlICYmXG4gICAgICAgICAgcy5kZXBlbmRlbnREaWN0aW9uYXJ5LmRlcGVuZGVudFZhbHVlSWRzLmluY2x1ZGVzKHNlbGVjdGVkVmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgYWN0aW9uU3RlcHMgPSB0aGlzLmFjdGlvblN0ZXBIYW5kbGVyLmdldEFjdGlvblN0ZXBzQXRJbmRleChcbiAgICAgIGZpbHRlcmVkU3RlcHMsXG4gICAgICBjdXJyZW50U3RlcEluZGV4XG4gICAgKTtcblxuICAgIGlmIChhY3Rpb25TdGVwcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGlmICghdGhpcy5hcHBEYXRhVXVpZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB0aGUgc2F2aW5nIGZsYWcgYmVmb3JlIHN0YXJ0aW5nIGFjdGlvbnNcbiAgICAgIHRoaXMuaXNTYXZpbmdBZnRlckFjdGlvbnMgPSB0cnVlO1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFjdGlvblN0ZXBIYW5kbGVyLmV4ZWN1dGVBY3Rpb25TdGVwcyhcbiAgICAgICAgYWN0aW9uU3RlcHMsXG4gICAgICAgIHRoaXMuYXBwRGF0YVV1aWQsXG4gICAgICAgIChzdGVwKSA9PiB7XG4gICAgICAgICAgY29uc3QgbG9hZGluZ01lc3NhZ2UgPSBVdGlscy5maW5kVHJhbnNsYXRpb25JbmZvKFxuICAgICAgICAgICAgJ2xvYWRpbmdNZXNzYWdlVHJhbnNsYXRpb25zJyxcbiAgICAgICAgICAgIHN0ZXAudHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMubG9hZGluZ01lc3NhZ2UgPSBsb2FkaW5nTWVzc2FnZSB8fCBudWxsO1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ+KchSBBY3Rpb24gc3RlcHMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgIC8vIEtlZXAgbG9hZGluZyBzdGF0ZSB0cnVlIC0gaXQgd2lsbCBiZSBjbGVhcmVkIGFmdGVyIHNhdmVBcHBEYXRhU3RlcCBjb21wbGV0ZXNcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCfinYwgQWN0aW9uIHN0ZXBzIGV4ZWN1dGlvbiBmYWlsZWQ6JywgcmVzdWx0LmVycm9yKTtcbiAgICAgICAgdGhpcy5pc1NhdmluZ0FmdGVyQWN0aW9ucyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCBFcnJvciBleGVjdXRpbmcgYWN0aW9uIHN0ZXBzOicsIGVycm9yKTtcbiAgICAgIHRoaXMuaXNTYXZpbmdBZnRlckFjdGlvbnMgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvblNlbGVjdGVkUGFnZUNoYW5nZWQoaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmZvcm1seUNvbmZpZ1swXS5maWVsZEdyb3VwKSB7XG4gICAgICB2YXIgc2VsZWN0ZWRQYWdlID0gdGhpcy5mb3JtbHlDb25maWdbMF0uZmllbGRHcm91cFtpbmRleF07XG4gICAgICB0aGlzLnNldFByZXNlbnRhdGlvbkNvbnRyb2xWYWx1ZXNSZWN1cnNpdmVseShzZWxlY3RlZFBhZ2UpO1xuXG4gICAgICBNb2RlbFBvcHVsYXRpb25IZWxwZXIuYXBwbHlQcmVjb21wbGV0aW9uVG9Nb2RlbCh0aGlzLm1vZGVsLCB0aGlzLmZsdXgpO1xuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodGhpcy5tb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRQcmVzZW50YXRpb25Db250cm9sVmFsdWVzUmVjdXJzaXZlbHkoZmM/OiBhbnkpIHtcbiAgICBmYz8uZmllbGRHcm91cD8uZm9yRWFjaCgoZmc6IGFueSkgPT4ge1xuICAgICAgaWYgKGZnLnByb3BzICYmIGZnLnByb3BzWydpc0Rpc3BsYXlNb2RlJ10gPT09IHRydWUpIHtcbiAgICAgICAgdmFyIG1ldGhvZEZpZWxkSWQgPSBmZy5wcm9wc1snYXBpTWV0aG9kRmllbGRJZCddO1xuICAgICAgICBpZiAobWV0aG9kRmllbGRJZCkge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZmluZEluQXBpQ2FsbHNSZXNwb25zZXMobWV0aG9kRmllbGRJZCk7XG4gICAgICAgICAgZmcuZGVmYXVsdFZhbHVlID0gdmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBhc3NvY2lhdGVkQ29udHJvbElkID0gZmcucHJvcHNbJ2NvbGxlY3Rpb25Db250cm9sSWRlbnRpZmllciddO1xuICAgICAgICAgIGlmIChhc3NvY2lhdGVkQ29udHJvbElkKSB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9XG4gICAgICAgICAgICAgIHRoaXMuZmluZENvbnRyb2xJbkZpbGxEYXRhQ29udHJvbHMoYXNzb2NpYXRlZENvbnRyb2xJZCk7XG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9uIC0gc2hvdyB2YWx1ZXMgd2l0aCBjb21tYVxuICAgICAgICAgICAgICBjb25zdCB2YWx1ZUlkc0FycmF5ID0gZm91bmQuZmlsbFZhbHVlSWRzIHx8IGZvdW5kLmZpbGx2YWx1ZWlkcyB8fCBmb3VuZC5GaWxsVmFsdWVJZHM7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlc0FycmF5ID0gZm91bmQuZmlsbFZhbHVlcyB8fCBmb3VuZC5maWxsdmFsdWVzIHx8IGZvdW5kLkZpbGxWYWx1ZXM7XG5cbiAgICAgICAgICAgICAgaWYgKHZhbHVlSWRzQXJyYXkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZUlkc0FycmF5KSAmJiB2YWx1ZUlkc0FycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50TGFuZ3VhZ2VJZCA9IHRoaXMuZ2V0Q3VycmVudExhbmd1YWdlSWQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5VmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWVJZCBvZiB2YWx1ZUlkc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBudW1lcmljVmFsdWVJZCA9IHR5cGVvZiB2YWx1ZUlkID09PSAnc3RyaW5nJyA/IHBhcnNlSW50KHZhbHVlSWQsIDEwKSA6IHZhbHVlSWQ7XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGRpY3RdIG9mIHRoaXMuZGljdGlvbmFyeU1hcC5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkaWN0LnZhbHVlcz8uZmluZCgodikgPT4gdi5pZCA9PT0gbnVtZXJpY1ZhbHVlSWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHZhbHVlLnZhbHVlVHJhbnNsYXRpb25zLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAodCkgPT4gdC5sYW5ndWFnZUlkID09IGN1cnJlbnRMYW5ndWFnZUlkXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5VmFsdWVzLnB1c2godHJhbnNsYXRpb24/LnZhbHVlIHx8IHZhbHVlLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkaXNwbGF5VmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGZnLmRlZmF1bHRWYWx1ZSA9IGRpc3BsYXlWYWx1ZXMuam9pbignLCAnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVzQXJyYXkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZXNBcnJheSkgJiYgdmFsdWVzQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrOiB1c2UgZmlsbFZhbHVlcyBhcnJheSBkaXJlY3RseVxuICAgICAgICAgICAgICAgIGZnLmRlZmF1bHRWYWx1ZSA9IHZhbHVlc0FycmF5LmpvaW4oJywgJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm91bmQuZmlsbFZhbHVlSWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50TGFuZ3VhZ2VJZCA9IHRoaXMuZ2V0Q3VycmVudExhbmd1YWdlSWQoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGRpY3RdIG9mIHRoaXMuZGljdGlvbmFyeU1hcC5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGljdC52YWx1ZXM/LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICh2KSA9PiB2LmlkID09IGZvdW5kLmZpbGxWYWx1ZUlkXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdmFsdWUudmFsdWVUcmFuc2xhdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAodCkgPT4gdC5sYW5ndWFnZUlkID09IGN1cnJlbnRMYW5ndWFnZUlkXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgIGZnLmRlZmF1bHRWYWx1ZSA9IHRyYW5zbGF0aW9uLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZnLmRlZmF1bHRWYWx1ZSA9IGZvdW5kLmZpbGxWYWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5maW5kSW5BcGlDYWxsc1Jlc3BvbnNlcyhhc3NvY2lhdGVkQ29udHJvbElkKTtcbiAgICAgICAgICAgICAgZmcuZGVmYXVsdFZhbHVlID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXRQcmVzZW50YXRpb25Db250cm9sVmFsdWVzUmVjdXJzaXZlbHkoZmcpO1xuICAgICAgfVxuICAgICAgaWYgKGZnLnByb3BzWydjZHInXSkge1xuICAgICAgICBmZy5wcm9wc1snY2RyJ10uZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQ29udHJvbEluRmlsbERhdGFDb250cm9scyhjb250cm9sSWQ6IHN0cmluZyk6IGFueSB7XG4gICAgbGV0IGNvbnRyb2xEYXRhOiBhbnkgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMuZmlsbERhdGEpIHtcbiAgICAgIHRoaXMuZmlsbERhdGEuZmx1eD8uZm9yRWFjaCgoZjogYW55KSA9PiB7XG4gICAgICAgIGlmICghY29udHJvbERhdGEpIHtcbiAgICAgICAgICBmLnNlY3Rpb25zPy5mb3JFYWNoKChzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICghY29udHJvbERhdGEpIHtcbiAgICAgICAgICAgICAgY29udHJvbERhdGEgPSBzLmNvbnRyb2xzPy5maW5kKFxuICAgICAgICAgICAgICAgIChjOiBhbnkpID0+IGMuY29udHJvbElkID09PSBjb250cm9sSWRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRyb2xEYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xEYXRhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udHJvbERhdGE7XG4gIH1cblxuICBwcml2YXRlIGZpbmRJbkFwaUNhbGxzUmVzcG9uc2VzKGZpZWxkSWQ6IHN0cmluZyk6IGFueSB7XG4gICAgbGV0IGZvdW5kVmFsdWU6IGFueSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5maWxsRGF0YSkge1xuICAgICAgdGhpcy5maWxsRGF0YS5BUElDYWxscz8uZm9yRWFjaCgoYXBpOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFmb3VuZFZhbHVlKSB7XG4gICAgICAgICAgYXBpLk1ldGhvZHM/LmZvckVhY2goKG06IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFmb3VuZFZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gbS5GaWVsZHM/LltmaWVsZElkXTtcbiAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgZm91bmRWYWx1ZSA9IGZvdW5kO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZm91bmRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rm9ybWx5RmlsdGVyZWRTdGVwcygpIHtcbiAgICBsZXQgc3RlcHMgPSB0aGlzLmZvcm1seUFsbFN0ZXBzLmZpbHRlcigocykgPT4ge1xuICAgICAgaWYgKHMucHJvcHMgJiYgcy5wcm9wc1snZGVwZW5kZW50RGljdGlvbmFyeSddKSB7XG4gICAgICAgIGNvbnN0IGRlcERpY3QgPSBzLnByb3BzW1xuICAgICAgICAgICdkZXBlbmRlbnREaWN0aW9uYXJ5J1xuICAgICAgICBdIGFzIERlcGVuZGVudERpY3Rpb25hcnlEYXRhO1xuICAgICAgICBpZiAoZGVwRGljdCAmJiBkZXBEaWN0LmlzRGljdGlvbmFyeURlcGVuZGVudCkge1xuICAgICAgICAgIGNvbnN0IG1vZGVsVmFsdWUgPSB0aGlzLm1vZGVsW2RlcERpY3QuZGljdGlvbmFyeUNvbnRyb2xJZGVudGlmaWVyXTtcbiAgICAgICAgICAvLyBTa2lwIGRlcGVuZGVuY3kgY2hlY2sgZm9yIG11bHRpcGxlIHNlbGVjdGlvbiAoYXJyYXkpXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobW9kZWxWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gbW9kZWxWYWx1ZT8uaWQ7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZSAmJlxuICAgICAgICAgICAgZGVwRGljdC5kZXBlbmRlbnRWYWx1ZUlkcy5pbmNsdWRlcyhzZWxlY3RlZFZhbHVlKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3RlcHM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkRm9ybWx5RmllbGRHcm91cEFzeW5jKCk6IFByb21pc2U8Rm9ybWx5RmllbGRDb25maWdbXT4ge1xuICAgIHRoaXMuc3RlcERpY3Rpb25hcnlEZXBlbmRlbnRJZHMgPSBbXTtcbiAgICBpZiAodGhpcy5zaG93RGlzcGxheU1vZGUpIHtcbiAgICAgIGNvbnN0IHN0ZXAgPSBhd2FpdCB0aGlzLmJ1aWREaXNwbGF5U3RlcCgpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbc3RlcF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGaWx0ZXIgb3V0IGFjdGlvbiBzdGVwcyBmcm9tIHZpc2libGUgc3RlcHNcbiAgICAgIGNvbnN0IHZpc2libGVTdGVwcyA9IHRoaXMuYWN0aW9uU3RlcEhhbmRsZXIuZmlsdGVyVmlzaWJsZVN0ZXBzKHRoaXMuZmx1eCk7XG4gICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHZpc2libGVTdGVwcy5tYXAoKHN0ZXApID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5idWlsZEZvcm1seUZpZWxkQ29uZmlnQXN5bmMoc3RlcCk7XG4gICAgICAgIH0pID8/IFtdXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRGb3JtbHlGaWVsZENvbmZpZ0FzeW5jKFxuICAgIHN0ZXA6IFN0ZXBEYXRhXG4gICk6IFByb21pc2U8Rm9ybWx5RmllbGRDb25maWc+IHtcbiAgICBsZXQgc3RlcEZvcm1seUNvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSB7fTtcblxuICAgIGlmIChzdGVwLnR5cGUgIT09IEZsdXhUeXBlLkN1c3RvbSAmJiBzdGVwLnR5cGUgIT09IEZsdXhUeXBlLkZpbmFsKSB7XG4gICAgICBzdGVwRm9ybWx5Q29uZmlnID0gYXdhaXQgdGhpcy5idWlsZFN5c3RlbUZpZWxkRm9ybWx5Q29uZmlnKHN0ZXApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGVwRm9ybWx5Q29uZmlnID0ge1xuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIGxhYmVsOiBzdGVwLm5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHN0ZXAubmFtZSxcbiAgICAgICAgICBidXR0b25zOiB0aGlzLmNvbnN0cnVjdEJ1dHRvbnMoc3RlcC5idXR0b25zKSxcbiAgICAgICAgICBkZXBlbmRlbnREaWN0aW9uYXJ5OiBzdGVwLmRlcGVuZGVudERpY3Rpb25hcnksXG4gICAgICAgICAgc3RlcElkOiBzdGVwLmlkZW50aWZpZXIsXG4gICAgICAgIH0sXG4gICAgICAgIGZpZWxkR3JvdXA6IGF3YWl0IHRoaXMuYnVpbGRTZWN0aW9uc0ZpZWxkR3JvdXBBc3luYyhcbiAgICAgICAgICBzdGVwLFxuICAgICAgICAgIHN0ZXAuc2VjdGlvbnNcbiAgICAgICAgKSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChzdGVwLnRyYW5zbGF0aW9ucykge1xuICAgICAgICBzdGVwRm9ybWx5Q29uZmlnLnByb3BzIVsnbGFiZWwnXSA9IFV0aWxzLmZpbmRUcmFuc2xhdGlvbkluZm8oXG4gICAgICAgICAgJ25hbWUnLFxuICAgICAgICAgIHN0ZXAudHJhbnNsYXRpb25zLFxuICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICk7XG4gICAgICAgIHN0ZXBGb3JtbHlDb25maWcucHJvcHMhWydkZXNjcmlwdGlvbiddID0gVXRpbHMuZmluZFRyYW5zbGF0aW9uSW5mbyhcbiAgICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAgIHN0ZXAudHJhbnNsYXRpb25zLFxuICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0ZXBGb3JtbHlDb25maWcgJiYgc3RlcEZvcm1seUNvbmZpZy5wcm9wcykge1xuICAgICAgdGhpcy5zZXRTdGVwQmFzZVByb3BzKHN0ZXAsIHN0ZXBGb3JtbHlDb25maWcpO1xuICAgIH1cbiAgICBpZiAoc3RlcC5kZXBlbmRlbnREaWN0aW9uYXJ5Py5pc0RpY3Rpb25hcnlEZXBlbmRlbnQpIHtcbiAgICAgIHRoaXMuc3RlcERpY3Rpb25hcnlEZXBlbmRlbnRJZHMucHVzaChcbiAgICAgICAgc3RlcC5kZXBlbmRlbnREaWN0aW9uYXJ5LmRpY3Rpb25hcnlDb250cm9sSWRlbnRpZmllclxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0ZXBGb3JtbHlDb25maWc7XG4gIH1cblxuICB0cmlnZ2VyQ29tcG9uZW50VXBkYXRlKGNvbnRyb2xJZDogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZXRGb3JtbHlGaWVsZFZhbHVlKHRoaXMuZm9ybWx5QWxsU3RlcHMsIGNvbnRyb2xJZCwgdmFsdWUpO1xuICB9XG5cbiAgc2V0Rm9ybWx5RmllbGRWYWx1ZShcbiAgICBmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gfCB1bmRlZmluZWQsXG4gICAga2V5OiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueVxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIWZpZWxkcykgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgIGlmIChmaWVsZC5rZXkgPT09IGtleSkge1xuICAgICAgICBpZiAoZmllbGQuZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICBmaWVsZC5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXAgJiYgQXJyYXkuaXNBcnJheShmaWVsZC5maWVsZEdyb3VwKSkge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuc2V0Rm9ybWx5RmllbGRWYWx1ZShmaWVsZC5maWVsZEdyb3VwLCBrZXksIHZhbHVlKTtcbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkU3lzdGVtRmllbGRGb3JtbHlDb25maWcoXG4gICAgc3RlcDogU3RlcERhdGFcbiAgKTogUHJvbWlzZTxGb3JtbHlGaWVsZENvbmZpZz4ge1xuICAgIGNvbnN0IGZvcm1seUNvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICBwcm9wczoge1xuICAgICAgICBsYWJlbDogc3RlcC5uYW1lLFxuICAgICAgICBidXR0b25zOiB0aGlzLmNvbnN0cnVjdEJ1dHRvbnMoc3RlcC5idXR0b25zKSxcbiAgICAgICAgZmx1eFR5cGU6IHN0ZXAudHlwZSxcbiAgICAgIH0sXG4gICAgICBmaWVsZEdyb3VwOiBbXSxcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRTdGVwQmFzZVByb3BzKHN0ZXAsIGZvcm1seUNvbmZpZyk7XG4gICAgdmFyIGZpZWxkQ29uZmlnID0gdGhpcy5jcmVhdGVGb3JtbHlTeXN0ZW1GaWVsZENvbmZpZyhzdGVwKTtcblxuICAgIGlmIChmaWVsZENvbmZpZykge1xuICAgICAgaWYgKHN0ZXAudHJhbnNsYXRpb25zKSB7XG4gICAgICAgIGxldCBsYWJlbHM6IGFueSA9IHt9O1xuICAgICAgICBzdGVwLnRyYW5zbGF0aW9ucy5mb3JFYWNoKCh0cjogVHJhbnNsYXRpb25JbmZvKSA9PiB7XG4gICAgICAgICAgbGFiZWxzW3RyLm5hbWVdID0gVXRpbHMuZmluZFRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgdHIudmFsdWVzLFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgZmllbGRDb25maWcucHJvcHMhWydsYWJlbHMnXSA9IGxhYmVscztcbiAgICAgICAgZmllbGRDb25maWcucHJvcHMhWyduYW1lJ10gPSBVdGlscy5maW5kVHJhbnNsYXRpb25JbmZvKFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgICBzdGVwLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICApO1xuICAgICAgICBmaWVsZENvbmZpZy5wcm9wcyFbJ2Rlc2NyaXB0aW9uJ10gPSBVdGlscy5maW5kVHJhbnNsYXRpb25JbmZvKFxuICAgICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICAgc3RlcC50cmFuc2xhdGlvbnMsXG4gICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgKTtcbiAgICAgICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnbGFiZWwnXSA9IFV0aWxzLmZpbmRUcmFuc2xhdGlvbkluZm8oXG4gICAgICAgICAgJ25hbWUnLFxuICAgICAgICAgIHN0ZXAudHJhbnNsYXRpb25zLFxuICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICk7XG4gICAgICAgIGZvcm1seUNvbmZpZy5wcm9wcyFbJ2Rlc2NyaXB0aW9uJ10gPSBVdGlscy5maW5kVHJhbnNsYXRpb25JbmZvKFxuICAgICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICAgc3RlcC50cmFuc2xhdGlvbnMsXG4gICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGZpZWxkQ29uZmlnLnByb3BzIVsnc3RlcHNTZXR0aW5ncyddID0gdGhpcy5zdGVwc1NldHRpbmdzO1xuICAgICAgZm9ybWx5Q29uZmlnLmZpZWxkR3JvdXAhLnB1c2goZmllbGRDb25maWcpO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JtbHlDb25maWc7XG4gIH1cblxuICBwcml2YXRlIHNldFN0ZXBCYXNlUHJvcHMoc3RlcDogU3RlcERhdGEsIGZvcm1seUNvbmZpZzogRm9ybWx5RmllbGRDb25maWcpIHtcbiAgICBpZiAoZm9ybWx5Q29uZmlnLnByb3BzKSB7XG4gICAgICBmb3JtbHlDb25maWcucHJvcHNbJ25hbWUnXSA9IHN0ZXAubmFtZTtcbiAgICAgIGZvcm1seUNvbmZpZy5wcm9wc1snZmx1eFR5cGUnXSA9IHN0ZXAudHlwZTtcbiAgICAgIGZvcm1seUNvbmZpZy5wcm9wc1snc3RlcElkJ10gPSBzdGVwLmlkZW50aWZpZXI7XG4gICAgICBmb3JtbHlDb25maWcucHJvcHNbJ2lzVmlzaWJsZSddID0gc3RlcC5pc1Zpc2libGU7XG4gICAgICBmb3JtbHlDb25maWcucHJvcHNbJ2RlcGVuZGVudERpY3Rpb25hcnknXSA9IHN0ZXAuZGVwZW5kZW50RGljdGlvbmFyeTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIENyZWF0ZVNpZ25GaWVsZENvbmZpZyhzdGVwOiBTdGVwRGF0YSk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2Zvcm1seS1zaWduLWNvbXBvbmVudCcsXG4gICAgICBwcm9wczoge1xuICAgICAgICBhcHBEYXRhSWQ6IHRoaXMuYXBwRGF0YVV1aWQsXG4gICAgICAgIHN0ZXBEYXRhOiBzdGVwLFxuICAgICAgICBkZXNpZ246IHRoaXMuZGVzaWduLFxuICAgICAgICBlbnY6IHRoaXMuZW52LFxuICAgICAgICBmbHV4OiB0aGlzLmZsdXgsXG4gICAgICAgIHBhcmVudEZvcm06IHRoaXMuZm9ybSxcbiAgICAgICAgZ2V0TW9kZWw6ICgpID0+IHRoaXMubW9kZWwsXG4gICAgICAgIGV2ZW50OiBhc3luYyAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChldmVudCA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnN0ZXBwZXJHb05leHRBc3luYygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgQ3JlYXRlRG93bmxvYWREb2NzRmllbGRDb25maWcoXG4gICAgY29udHJvbERhdGE6IEJhc2VDb250cm9sXG4gICk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2Zvcm1seS1kb3dubG9hZC1kb2N1bWVudHMtY29tcG9uZW50JyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGFwcElkOiB0aGlzLmFwcE1vZGVsLmFwcGxpY2F0aW9uVXVpZCxcbiAgICAgICAgYXBwRGF0YUlkOiB0aGlzLmFwcERhdGFVdWlkLFxuICAgICAgICBjb250cm9sRGF0YTogY29udHJvbERhdGEsXG4gICAgICAgIGVudjogdGhpcy5lbnYsXG4gICAgICAgIGRvY3VtZW50c0RhdGE6IHRoaXMuYXBwTW9kZWwuZG9jdW1lbnRzLFxuICAgICAgICBsYW5nSXNvOiB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgQ3JlYXRlVmlld0RvY3NGaWVsZENvbmZpZyhcbiAgICBjb250cm9sRGF0YTogQmFzZUNvbnRyb2xcbiAgKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZm9ybWx5LXZpZXctZG9jdW1lbnRzLWNvbXBvbmVudCcsXG4gICAgICBwcm9wczoge1xuICAgICAgICBhcHBJZDogdGhpcy5hcHBNb2RlbC5hcHBsaWNhdGlvblV1aWQsXG4gICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhVXVpZCxcbiAgICAgICAgY29udHJvbERhdGE6IGNvbnRyb2xEYXRhLFxuICAgICAgICBlbnY6IHRoaXMuZW52LFxuICAgICAgICBkb2N1bWVudHNEYXRhOiB0aGlzLmFwcE1vZGVsLmRvY3VtZW50cyxcbiAgICAgICAgbGFuZ0lzbzogdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIENyZWF0ZVVwbG9hZERvY3NGaWVsZENvbmZpZyhcbiAgICBjb250cm9sRGF0YTogQmFzZUNvbnRyb2xcbiAgKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZm9ybWx5LXVwbG9hZC1kb2N1bWVudHMtY29tcG9uZW50JyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGFwcElkOiB0aGlzLmFwcE1vZGVsLmFwcGxpY2F0aW9uVXVpZCxcbiAgICAgICAgYXBwRGF0YUlkOiB0aGlzLmFwcERhdGFVdWlkLFxuICAgICAgICBjb250cm9sRGF0YTogY29udHJvbERhdGEsXG4gICAgICAgIGVudjogdGhpcy5lbnYsXG4gICAgICAgIGRvY3VtZW50c0RhdGE6IHRoaXMuYXBwTW9kZWwuZG9jdW1lbnRzLFxuICAgICAgICBsYW5nSXNvOiB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgQ3JlYXRlR2VuZXJhdGVEb2NzRmllbGRDb25maWcoc3RlcDogU3RlcERhdGEpOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdmb3JtbHktZ2VuZXJhdGUtZG9jdW1lbnRzLWNvbXBvbmVudCcsXG4gICAgICBwcm9wczoge1xuICAgICAgICBhcHBJZDogdGhpcy5hcHBNb2RlbC5hcHBsaWNhdGlvblV1aWQsXG4gICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhVXVpZCxcbiAgICAgICAgc3RlcERhdGE6IHN0ZXAsXG4gICAgICAgIGRvY3VtZW50c0RhdGE6IHRoaXMuYXBwTW9kZWwuZG9jdW1lbnRzLFxuICAgICAgICBsYW5nSXNvOiB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgICAgZXZlbnQ6IGFzeW5jIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50ID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RlcHBlckdvTmV4dEFzeW5jKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc3RlcHBlckdvTmV4dEFzeW5jKCkge1xuICAgIGNvbnN0IHN0ZXBwZXJDb21wb25lbnQgPSB0aGlzLmZvcm1seUNvbmZpZ1swXS5wcm9wcyFbJ2NvbXBvbmVudCddO1xuICAgIGlmIChzdGVwcGVyQ29tcG9uZW50ICYmIHN0ZXBwZXJDb21wb25lbnQubmF2aWdhdGVOZXh0QXN5bmMpIHtcbiAgICAgIGF3YWl0IHN0ZXBwZXJDb21wb25lbnQubmF2aWdhdGVOZXh0QXN5bmMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIENyZWF0ZUVucm9sbENhcmRGaWVsZENvbmZpZyhzdGVwOiBTdGVwRGF0YSk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICBsZXQgbGFiZWxzOiBhbnkgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhzdGVwLmNvbmZpZykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoa2V5LmVuZHNXaXRoKCdMYWJlbCcpKSB7XG4gICAgICAgIGxhYmVsc1trZXldID1cbiAgICAgICAgICBzdGVwPy5jb25maWdba2V5XT8uZmluZChcbiAgICAgICAgICAgIChpOiB7IGxhbmd1YWdlSXNvOiBzdHJpbmcgfSkgPT5cbiAgICAgICAgICAgICAgaS5sYW5ndWFnZUlzbyA9PT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgICApPy52YWx1ZSA/PyAnJztcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2Zvcm1seS1lbnJvbC1jYXJkLWNvbXBvbmVudCcsXG4gICAgICBwcm9wczoge1xuICAgICAgICBhcHBJZDogdGhpcy5hcHBNb2RlbC5hcHBsaWNhdGlvblV1aWQsXG4gICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhVXVpZCxcbiAgICAgICAgZGF0YVVybElkOiB0aGlzLmRhdGFVcmxJZCxcbiAgICAgICAgc3RlcERhdGE6IHN0ZXAsXG4gICAgICAgIGxhYmVsczogbGFiZWxzLFxuICAgICAgICBsYW5nSXNvOiB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICBwcml2YXRlIENyZWF0ZUlkU2NhbkZpZWxkQ29uZmlnKHN0ZXA6IFN0ZXBEYXRhKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIGxldCBlcnJvck1lc3NhZ2VzOiBhbnkgPSB7fTtcblxuICAgIGlmIChzdGVwLmVycm9yc1RyYW5zbGF0aW9ucykge1xuICAgICAgc3RlcC5lcnJvcnNUcmFuc2xhdGlvbnMuZm9yRWFjaCgoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBlcnJvck1lc3NhZ2VzW2Vycm9yLmNvZGVdID0gVXRpbHMuZmluZFRyYW5zbGF0aW9uKFxuICAgICAgICAgIGVycm9yLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdmb3JtbHktc2Nhbi1pZCcsXG4gICAgICBwcm9wczoge1xuICAgICAgICBjb25maWc6IHN0ZXAuY29uZmlnLFxuICAgICAgICBzdGVwVHlwZTogc3RlcC50eXBlLFxuICAgICAgICBzdGVwSWQ6IHN0ZXAuaWRlbnRpZmllcixcbiAgICAgICAgYXBwRGF0YUlkOiB0aGlzLmFwcERhdGFVdWlkIHx8IFV0aWxzLmdlbmVyYXRlVVVJRCgpLFxuICAgICAgICBhcHBJZDogdGhpcy5hcHBNb2RlbC5hcHBsaWNhdGlvblV1aWQsXG4gICAgICAgIGVycm9yTWVzc2FnZXM6IGVycm9yTWVzc2FnZXMsXG4gICAgICAgIGV2ZW50OiAoZXZlbnQ6IGFueSkgPT4gdGhpcy5vbklkU2NhbkNvbXBsZXRlZChldmVudCwgc3RlcCksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIENyZWF0ZUt5Y0ZpZWxkQ29uZmlnKHN0ZXA6IFN0ZXBEYXRhKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIGNvbnN0IGxvYWRpbmdNc2dUcmFuc2xhdGlvbnMgPSBzdGVwLnRyYW5zbGF0aW9ucz8uZmluZChcbiAgICAgICh0OiBhbnkpID0+IHQubmFtZSA9PT0gJ2xvYWRpbmdNZXNzYWdlVHJhbnNsYXRpb25zJ1xuICAgICk7XG5cbiAgICBjb25zdCB0cmFuc2xhdGVkTG9hZGluZ01lc3NhZ2UgPVxuICAgICAgbG9hZGluZ01zZ1RyYW5zbGF0aW9ucz8udmFsdWVzPy5maW5kKFxuICAgICAgICAodjogYW55KSA9PiB2Lmxhbmd1YWdlSXNvID09PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgKT8udmFsdWUgfHwgJyc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2Zvcm1seS1pZGVudGlmaWNhdGlvbi1jb21wb25lbnQnLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgdG9rZW46IHRoaXMua3ljVG9rZW4sXG4gICAgICAgIGFwaV91cmw6IHRoaXMua3ljQXBpVXJsLFxuICAgICAgICBhcHBEYXRhSWQ6IHRoaXMuYXBwRGF0YVV1aWQsXG4gICAgICAgIGVudjogJ0RPQ0tFUicsIC8vIENvbnNpZGVyIG1ha2luZyB0aGlzIGR5bmFtaWMgaWYgbmVlZGVkXG4gICAgICAgIHJlZGlyZWN0X2lkOiB0aGlzLmt5Y1JlZGlyZWN0SWQsXG4gICAgICAgIHBob25lX251bWJlcjogJycsXG4gICAgICAgIGxhbmdfaXNvOiB0aGlzLmt5Y0xhbmdJc28sXG4gICAgICAgIHNob3dfY2l0aXplbnNoaXBfc2VsZWN0b3I6IHRoaXMua3ljU2hvd0NpdGl6ZW5zaGlwLFxuICAgICAgICBzY3JvbGxfbW9kZTogdGhpcy5reWNTY3JvbGxNb2RlLFxuICAgICAgICBtYXhSZXRyaWVzOiBzdGVwLmNvbmZpZz8ubWF4S3ljUmV0cmllcyA/PyAzLFxuICAgICAgICBsb2FkaW5nTWVzc2FnZTogdHJhbnNsYXRlZExvYWRpbmdNZXNzYWdlLFxuICAgICAgICBlY3RDb21wbGV0ZWQ6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdNZXNzYWdlID0gdHJhbnNsYXRlZExvYWRpbmdNZXNzYWdlO1xuICAgICAgICAgIGF3YWl0IHRoaXMub3JpZ2luRm9ybVNpZ25hbHJIYW5kbGVyU2VydmljZS5pbml0aWF0ZUt5Y1Byb2Nlc3NpbmcoXG4gICAgICAgICAgICB0aGlzLmFwcERhdGFVdWlkXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgQ3JlYXRlUGhvbmVFbWFpbEZpZWxkQ29uZmlnKHN0ZXA6IFN0ZXBEYXRhKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZm9ybWx5LXZhbGlkYXRlLWNvbnRhY3QtaW5mbycsXG4gICAgICBwcm9wczoge1xuICAgICAgICBzdGVwRGF0YTogc3RlcCxcbiAgICAgICAgYXBwRGF0YUlkOiB0aGlzLmFwcERhdGFVdWlkLFxuICAgICAgICBkZXNpZ246IHRoaXMuZGVzaWduLFxuICAgICAgICBldmVudDogYXN5bmMgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQgPT09ICdzdWNjZXNzJykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGVwcGVyR29OZXh0QXN5bmMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIENyZWF0ZVZpZXdPZmZlckZpZWxkQ29uZmlnKHN0ZXA6IFN0ZXBEYXRhKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZm9ybWx5LXZpZXctb2ZmZXJzJyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhVXVpZCxcbiAgICAgICAgc3RlcERhdGE6IHN0ZXAsXG4gICAgICAgIGVudjogdGhpcy5lbnYsXG4gICAgICAgIGFwcE1vZGVsOiB0aGlzLmFwcE1vZGVsLFxuICAgICAgICBsYW5nSXNvOiB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgICAgZXZlbnQ6IChldmVudDogYW55KSA9PiB0aGlzLm9uT2ZmZXJTZWxlY3RlZChldmVudCwgc3RlcCksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIENyZWF0ZVBhdXNlRmllbGRDb25maWcoc3RlcDogU3RlcERhdGEpOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdmb3JtbHktZmllbGQtcGF1c2UnLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgaWRlbnRpZmllcjogc3RlcC5pZGVudGlmaWVyLFxuICAgICAgICBjb25maWc6IHN0ZXAuY29uZmlnLFxuICAgICAgICBhcHBEYXRhSWQ6IHRoaXMuYXBwRGF0YVV1aWQsXG4gICAgICAgIHN0ZXBEYXRhOiBzdGVwLFxuICAgICAgICBlbnY6IHRoaXMuZW52LFxuICAgICAgICBhcHBNb2RlbDogdGhpcy5hcHBNb2RlbCxcbiAgICAgICAgbGFuZ0lzbzogdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIENyZWF0ZU9wZW5CYW5raW5nRmllbGRDb25maWcoc3RlcDogU3RlcERhdGEpOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gICAgLy8gUGFzcyB0aGUgZnVsbCBzdGVwIGRhdGEgd2hpY2ggaW5jbHVkZXMgYWxsIHRyYW5zbGF0aW9uc1xuICAgIC8vIFRoZSBjb21wb25lbnQgd2lsbCBleHRyYWN0IHdoYXQgaXQgbmVlZHMgYmFzZWQgb24gY3VycmVudCBsYW5ndWFnZVxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZm9ybWx5LW9wZW4tYmFua2luZycsXG4gICAgICBwcm9wczoge1xuICAgICAgICBpZGVudGlmaWVyOiBzdGVwLmlkZW50aWZpZXIsXG4gICAgICAgIGNvbmZpZzogc3RlcC5jb25maWcsXG4gICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhVXVpZCxcbiAgICAgICAgc3RlcERhdGE6IHN0ZXAsIC8vIFRoaXMgY29udGFpbnMgdGhlIGZ1bGwgdHJhbnNsYXRpb25zIGFycmF5XG4gICAgICAgIGVudjogdGhpcy5lbnYsXG4gICAgICAgIGFwcE1vZGVsOiB0aGlzLmFwcE1vZGVsLFxuICAgICAgICBsYW5nSXNvOiB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgaW5pdGlhbE1lc3NhZ2U6IFV0aWxzLmZpbmRUcmFuc2xhdGlvbihcbiAgICAgICAgICAgIHN0ZXAuY29uZmlnPy5pbml0aWFsTWVzc2FnZVRyYW5zbGF0aW9ucyB8fCBbXSxcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3YWl0aW5nTWVzc2FnZTogVXRpbHMuZmluZFRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgc3RlcC5jb25maWc/LndhaXRpbmdNZXNzYWdlVHJhbnNsYXRpb25zIHx8IFtdLFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgICApLFxuICAgICAgICAgIGNvbnNlbnRFcnJvck1lc3NhZ2U6IFV0aWxzLmZpbmRUcmFuc2xhdGlvbihcbiAgICAgICAgICAgIHN0ZXAuY29uZmlnPy5jb25zZW50RXJyb3JNZXNzYWdlVHJhbnNsYXRpb25zIHx8IFtdLFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgICApLFxuICAgICAgICAgIGNvbXBsZXRpb25NZXNzYWdlOiBVdGlscy5maW5kVHJhbnNsYXRpb24oXG4gICAgICAgICAgICBzdGVwLmNvbmZpZz8uY29tcGxldGlvbk1lc3NhZ2VUcmFuc2xhdGlvbnMgfHwgW10sXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICAgICksXG4gICAgICAgICAgcmV0cnlCdXR0b25MYWJlbDogVXRpbHMuZmluZFRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgc3RlcC5jb25maWc/LnJldHJ5QnV0dG9uTGFiZWxUcmFuc2xhdGlvbnMgfHwgW10sXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50OiAoZXZlbnQ6IGFueSkgPT4gdGhpcy5vbk9wZW5CYW5raW5nRXZlbnQoZXZlbnQsIHN0ZXApLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBDcmVhdGVTdGF0dXNGaWVsZENvbmZpZyhzdGVwOiBTdGVwRGF0YSk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2Zvcm1seS1zdGF0dXMnLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgY29uZmlnOiBzdGVwLmNvbmZpZyxcbiAgICAgICAgc3RlcERhdGE6IHN0ZXAsXG4gICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhVXVpZCxcbiAgICAgICAgYXBwSWQ6IHRoaXMuYXBwTW9kZWwuYXBwbGljYXRpb25VdWlkLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtbHlTeXN0ZW1GaWVsZENvbmZpZyhcbiAgICBzdGVwOiBTdGVwRGF0YVxuICApOiBGb3JtbHlGaWVsZENvbmZpZyB8IHVuZGVmaW5lZCB7XG4gICAgc3dpdGNoIChzdGVwLnR5cGUpIHtcbiAgICAgIGNhc2UgRmx1eFR5cGUuS3ljOlxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlS3ljRmllbGRDb25maWcoc3RlcCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEZsdXhUeXBlLkVtYWlsOlxuICAgICAgY2FzZSBGbHV4VHlwZS5QaG9uZToge1xuICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGVQaG9uZUVtYWlsRmllbGRDb25maWcoc3RlcCk7XG4gICAgICB9XG4gICAgICBjYXNlIEZsdXhUeXBlLkFjdGlvbjoge1xuICAgICAgICAvLyBBY3Rpb24gc3RlcHMgYXJlIG5vdyBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgYnkgQWN0aW9uU3RlcEhhbmRsZXJcbiAgICAgICAgLy8gVGhleSBzaG91bGQgbm90IGFwcGVhciBhcyB2aXNpYmxlIGZvcm1seSBjb21wb25lbnRzXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjYXNlIEZsdXhUeXBlLklkU2Nhbjoge1xuICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGVJZFNjYW5GaWVsZENvbmZpZyhzdGVwKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgRmx1eFR5cGUuR2VuZXJhdGVEb2N1bWVudDoge1xuICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGVHZW5lcmF0ZURvY3NGaWVsZENvbmZpZyhzdGVwKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgRmx1eFR5cGUuU2lnbjoge1xuICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGVTaWduRmllbGRDb25maWcoc3RlcCk7XG4gICAgICB9XG4gICAgICBjYXNlIEZsdXhUeXBlLlZpZXdPZmZlcjoge1xuICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGVWaWV3T2ZmZXJGaWVsZENvbmZpZyhzdGVwKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgRmx1eFR5cGUuU3RhdHVzOiB7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZVN0YXR1c0ZpZWxkQ29uZmlnKHN0ZXApO1xuICAgICAgfVxuICAgICAgY2FzZSBGbHV4VHlwZS5FVVBMQVRFU0M6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlRW5yb2xsQ2FyZEZpZWxkQ29uZmlnKHN0ZXApO1xuICAgICAgfVxuICAgICAgY2FzZSBGbHV4VHlwZS5ORVRPUElBOiB7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZUVucm9sbENhcmRGaWVsZENvbmZpZyhzdGVwKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgRmx1eFR5cGUuUGF1c2U6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlUGF1c2VGaWVsZENvbmZpZyhzdGVwKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgRmx1eFR5cGUuT3BlbkJhbmtpbmc6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlT3BlbkJhbmtpbmdGaWVsZENvbmZpZyhzdGVwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIG9uT2ZmZXJTZWxlY3RlZChvZmZlcklkOiBhbnksIHN0ZXA6IFN0ZXBEYXRhKSB7XG4gICAgdGhpcy5mb3JtbHlVcGRhdGVBbmRHb05leHQuZW1pdCh7IHNlbGVjdGVkT2ZmZXJJZDogb2ZmZXJJZCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25TaWduRXZlbnQoZXZlbnQ6IGFueSwgc3RlcDogU3RlcERhdGEpIHtcbiAgICBjb25zb2xlLmxvZygnU2lnbiBldmVudCByZWNlaXZlZDonLCBldmVudCk7XG4gICAgdGhpcy51cGRhdGVTdGVwQnV0dG9uU3RhdGUoc3RlcCk7XG4gIH1cblxuICBwcml2YXRlIG9uT3BlbkJhbmtpbmdFdmVudChldmVudDogYW55LCBzdGVwOiBTdGVwRGF0YSkge1xuICAgIGNvbnNvbGUubG9nKCdPcGVuQmFua2luZyBldmVudCByZWNlaXZlZDonLCBldmVudCk7XG4gICAgaWYgKGV2ZW50ID09PSAnc3VjY2VzcycpIHtcbiAgICAgIC8vIE9wZW4gQmFua2luZyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiAgICAgIHRoaXMudXBkYXRlU3RlcEJ1dHRvblN0YXRlKHN0ZXApO1xuICAgICAgLy8gQXV0by1wcm9jZWVkIHRvIG5leHQgc3RlcFxuICAgICAgdGhpcy5mb3JtbHlVcGRhdGVBbmRHb05leHQuZW1pdCh7fSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbklkU2NhbkNvbXBsZXRlZChldmVudDogYW55LCBzdGVwOiBTdGVwRGF0YSkge1xuICAgIGNvbnNvbGUubG9nKCdTaWduIGV2ZW50IHJlY2VpdmVkOicsIGV2ZW50KTtcbiAgICBjb25zdCBmaWxsRGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZmlsbERhdGEpO1xuICAgIGNvbnN0IHN0ZXBGaWxsRGF0YSA9IGZpbGxEYXRhLmZsdXguZmluZChcbiAgICAgIChzOiB7IHN0ZXBJZDogc3RyaW5nIH0pID0+IHMuc3RlcElkID09IHN0ZXAuaWRlbnRpZmllclxuICAgICk7XG4gICAgc3RlcEZpbGxEYXRhLnNlY3Rpb25zLmZvckVhY2goXG4gICAgICAoczoge1xuICAgICAgICBjb250cm9sczoge1xuICAgICAgICAgIGNvbnRyb2xJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGZpbGxWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICB9W107XG4gICAgICB9KSA9PiB7XG4gICAgICAgIHMuY29udHJvbHMuZm9yRWFjaChcbiAgICAgICAgICAoYzoge1xuICAgICAgICAgICAgY29udHJvbElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICBmaWxsVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgICB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoYy5jb250cm9sSWQpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgW2MuY29udHJvbElkXToge1xuICAgICAgICAgICAgICAgICAgdmFsdWU6IGMuZmlsbFZhbHVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS5jb250YWlucyhjLmNvbnRyb2xJZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmFkZENvbnRyb2woYy5jb250cm9sSWQsIG5ldyBGb3JtQ29udHJvbChjLmZpbGxWYWx1ZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLnVwZGF0ZVN0ZXBCdXR0b25TdGF0ZShzdGVwKTtcbiAgfVxuXG4gIHVwZGF0ZVN0ZXBCdXR0b25TdGF0ZShzdGVwOiBTdGVwRGF0YSkge1xuICAgIGxldCBmb3JtbHlTdGVwRmllbGQgPSB0aGlzLmZvcm1seUNvbmZpZ1swXS5maWVsZEdyb3VwPy5maW5kKChmaWVsZCkgPT5cbiAgICAgIGZpZWxkLmZpZWxkR3JvdXA/LmZpbmQoKGYpID0+IGYucHJvcHM/Llsnc3RlcElkJ10gPT09IHN0ZXAuaWRlbnRpZmllcilcbiAgICApO1xuXG4gICAgaWYgKCFmb3JtbHlTdGVwRmllbGQpIHtcbiAgICAgIGZvcm1seVN0ZXBGaWVsZCA9IHRoaXMuZm9ybWx5Q29uZmlnWzBdLmZpZWxkR3JvdXA/LmZpbmQoXG4gICAgICAgIChmaWVsZCkgPT4gZmllbGQucHJvcHM/Llsnc3RlcElkJ10gPT09IHN0ZXAuaWRlbnRpZmllclxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWx5U3RlcEZpZWxkKSB7XG4gICAgICBmb3JtbHlTdGVwRmllbGQucHJvcHMgPSB7XG4gICAgICAgIC4uLmZvcm1seVN0ZXBGaWVsZC5wcm9wcyxcbiAgICAgICAgYnV0dG9uc0Rpc2FibGVkOiBmYWxzZSxcbiAgICAgIH07XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1seUNvbmZpZygpO1xuICAgICAgdGhpcy5mb3JtbHlDb25maWdVcGRhdGVkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZFJlbmRlcmVkQ3NzKCkge1xuICAgIGNvbnN0IHN0eWxlU3RyaW5nID0gRm9ybUNzc0hlbHBlci5jb252ZXJ0VG9TdHlsZVN0cmluZyhcbiAgICAgIHRoaXMuZGVzaWduLFxuICAgICAgdGhpcy5zaG93RGlzcGxheU1vZGVcbiAgICApO1xuXG4gICAgY29uc3Qgc3R5bGVFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlRWxlbWVudC5pZCA9ICdyZW5kZXJlZC1jc3MnO1xuICAgIGNvbnN0IHJlbmRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZW5kZXJlZC1jc3MnKTtcbiAgICBpZiAocmVuZEVsKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKGRvY3VtZW50LmJvZHksIHJlbmRFbCk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoXG4gICAgICBzdHlsZUVsZW1lbnQsXG4gICAgICB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRleHQoVXRpbHMucmVtb3ZlTmV3TGluZXMoc3R5bGVTdHJpbmcpKVxuICAgICk7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5ib2R5LCBzdHlsZUVsZW1lbnQpO1xuICB9XG5cbiAgYXN5bmMgYnVpbGRTZWN0aW9uc0ZpZWxkR3JvdXBBc3luYyhcbiAgICBzdGVwOiBTdGVwRGF0YSB8IHVuZGVmaW5lZCxcbiAgICBzZWN0aW9uczogU2VjdGlvbkRhdGFbXVxuICApOiBQcm9taXNlPEZvcm1seUZpZWxkQ29uZmlnW10+IHtcbiAgICBjb25zdCBzdGVwU2VjdGlvbnM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgc2VjdGlvbnMgJiYgaW5kZXggPCBzZWN0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IHNlY3Rpb24gPSBzZWN0aW9uc1tpbmRleF07XG4gICAgICBsZXQgc2VwYXJhdG9yRm9ybWx5Q29uZmlnOiBhbnkgPSB7fTtcbiAgICAgIGlmIChzZWN0aW9uLnNob3dTZWN0aW9uVGl0bGUpIHtcbiAgICAgICAgc2VwYXJhdG9yRm9ybWx5Q29uZmlnID0ge1xuICAgICAgICAgIHR5cGU6ICdzZXBhcmF0b3InLFxuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICB0aXRsZTpcbiAgICAgICAgICAgICAgc2VjdGlvbi50cmFuc2xhdGlvbnM/LmZpbmQoXG4gICAgICAgICAgICAgICAgKHQ6IGFueSkgPT4gdC5sYW5ndWFnZUlzbyA9PT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgICAgICAgKT8udmFsdWUgPz8gJycsXG5cbiAgICAgICAgICAgIGRlc2lnbjogdGhpcy5kZXNpZ24sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlY3Rpb24uc2hvd1NlY3Rpb25TZXBhcmF0b3IpIHtcbiAgICAgICAgc2VwYXJhdG9yRm9ybWx5Q29uZmlnID0ge1xuICAgICAgICAgIC4uLnNlcGFyYXRvckZvcm1seUNvbmZpZyxcbiAgICAgICAgICB0eXBlOiAnc2VwYXJhdG9yJyxcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgLi4uc2VwYXJhdG9yRm9ybWx5Q29uZmlnLnByb3BzLFxuICAgICAgICAgICAgc2hvd1NlcGFyYXRvcjogc2VjdGlvbi5zaG93U2VjdGlvblNlcGFyYXRvcixcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VjdGlvbi5kZXBlbmRlbnREaWN0aW9uYXJ5KSB7XG4gICAgICAgIHRoaXMuYXR0YWNoVG9EZXBlbmRlbnREaWN0aW9uYXJ5SWZOZWNlc3NhcnkoXG4gICAgICAgICAgc2VjdGlvbi5kZXBlbmRlbnREaWN0aW9uYXJ5LFxuICAgICAgICAgIHNlcGFyYXRvckZvcm1seUNvbmZpZ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc3RlcFNlY3Rpb25zLnB1c2goc2VwYXJhdG9yRm9ybWx5Q29uZmlnKTtcblxuICAgICAgY29uc3Qgc2VjdGlvbkZvcm1seUNvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICAgIHR5cGU6ICdjdXN0b20tc2VjdGlvbicsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgbGFiZWw6IHNlY3Rpb24udGl0bGUsXG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICBzZWN0aW9uLnRyYW5zbGF0aW9ucz8uZmluZChcbiAgICAgICAgICAgICAgKHQ6IGFueSkgPT4gdC5sYW5ndWFnZUlzbyA9PT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgICAgICk/LnZhbHVlID8/ICcnLFxuICAgICAgICAgIGRlc2lnbjogdGhpcy5kZXNpZ24sXG4gICAgICAgIH0sXG4gICAgICAgIGZpZWxkR3JvdXA6IGF3YWl0IHRoaXMuYnVpbGRDb250cm9sc0ZpZWxkR3JvdXBBc3luYyhcbiAgICAgICAgICBzdGVwLFxuICAgICAgICAgIHNlY3Rpb24uY29udHJvbHMgfHwgW10sXG4gICAgICAgICAgc2VjdGlvbi5wcmVzZW50YXRpb25Db250cm9scyB8fCBbXVxuICAgICAgICApLFxuICAgICAgICBmaWVsZEdyb3VwQ2xhc3NOYW1lOiAnZGlzcGxheS1mbGV4JyxcbiAgICAgIH07XG4gICAgICBpZiAoc2VjdGlvbi5kZXBlbmRlbnREaWN0aW9uYXJ5KSB7XG4gICAgICAgIHRoaXMuYXR0YWNoVG9EZXBlbmRlbnREaWN0aW9uYXJ5SWZOZWNlc3NhcnkoXG4gICAgICAgICAgc2VjdGlvbi5kZXBlbmRlbnREaWN0aW9uYXJ5LFxuICAgICAgICAgIHNlY3Rpb25Gb3JtbHlDb25maWdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgc3RlcFNlY3Rpb25zLnB1c2goc2VjdGlvbkZvcm1seUNvbmZpZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0ZXBTZWN0aW9ucztcbiAgfVxuXG4gIGFzeW5jIGJ1aWREaXNwbGF5U3RlcCgpOiBQcm9taXNlPEZvcm1seUZpZWxkQ29uZmlnPiB7XG4gICAgbGV0IHN0ZXBGb3JtbHlDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnID0ge307XG4gICAgaWYgKHRoaXMuZGlzcGxheT8uc2VjdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHN0ZXBGb3JtbHlDb25maWcgPSB7XG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgLy8gbGFiZWw6IHN0ZXAubmFtZSxcbiAgICAgICAgICAvLyBidXR0b25zOiB0aGlzLmNvbnN0cnVjdEJ1dHRvbnMoc3RlcC5idXR0b25zKSxcbiAgICAgICAgICAvLyAgZGVwZW5kZW50RGljdGlvbmFyeTogc3RlcC5kZXBlbmRlbnREaWN0aW9uYXJ5LFxuICAgICAgICB9LFxuICAgICAgICBmaWVsZEdyb3VwOiBhd2FpdCB0aGlzLmJ1aWxkU2VjdGlvbnNGaWVsZEdyb3VwQXN5bmMoXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHRoaXMuZGlzcGxheS5zZWN0aW9uc1xuICAgICAgICApLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHN0ZXBGb3JtbHlDb25maWc7XG4gIH1cblxuICBhZGROZXdSb3dUb0Zvcm1GaWVsZHNJZk5lY2Vzc2FyeShcbiAgICBmaWVsZEdyb3VwOiBGb3JtbHlGaWVsZENvbmZpZ1tdLFxuICAgIG5ld1JvdzogRm9ybWx5RmllbGRDb25maWdcbiAgKSB7XG4gICAgaWYgKG5ld1Jvdy5maWVsZEdyb3VwICYmIG5ld1Jvdy5maWVsZEdyb3VwLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlRm9ybUZpZWxkc1dpZHRoKG5ld1Jvdy5maWVsZEdyb3VwKTtcbiAgICAgIGZpZWxkR3JvdXAucHVzaChuZXdSb3cpO1xuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZUZvcm1GaWVsZHNXaWR0aChmb3JtRmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdKSB7XG4gICAgY29uc3QgY29sV2lkdGhQZXJJdGVtID0gMTIgLyBmb3JtRmllbGRzLmxlbmd0aDtcbiAgICBmb3JtRmllbGRzLmZvckVhY2goKGYpID0+IHtcbiAgICAgIGYuY2xhc3NOYW1lID0gJ2NvbC0nICsgY29sV2lkdGhQZXJJdGVtO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0UGVyY2VudGFnZUNsYXNzTmFtZShwZXJjZW50YWdlRGltZW5zaW9uOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRvdGFsQ29sdW1ucyA9IDEyOyAvLyAxMi1jb2x1bW4gZ3JpZFxuICAgIGNvbnN0IHNwYW4gPSBNYXRoLnJvdW5kKChwZXJjZW50YWdlRGltZW5zaW9uIC8gMTAwKSAqIHRvdGFsQ29sdW1ucyk7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gYHBlcmNlbnRhZ2Utd2lkdGgtJHtzcGFufWA7XG5cbiAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNsYXNzTmFtZSkpIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgc3R5bGUuaWQgPSBjbGFzc05hbWU7XG4gICAgICBzdHlsZS5pbm5lckhUTUwgPSBgXG4gICAgICAgIC4ke2NsYXNzTmFtZX0ge1xuICAgICAgICAgIGdyaWQtY29sdW1uOiBzcGFuICR7c3Bhbn07XG4gICAgICAgIH1cbiAgICAgIGA7XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxuXG4gIGNyZWF0ZUZpbGxlckNvbnRyb2woc3BhbjogbnVtYmVyKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAncm93LWZpbGxlcicsXG4gICAgICBjbGFzc05hbWU6IGBwZXJjZW50YWdlLXdpZHRoLSR7c3Bhbn1gLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgICAgaGlkZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRDb250cm9sc0ZpZWxkR3JvdXBBc3luYyhcbiAgICBzdGVwOiBTdGVwRGF0YSB8IHVuZGVmaW5lZCxcbiAgICBjb250cm9sczogQ29udHJvbERhdGFbXSxcbiAgICBwcmVzZW50YXRpb25Db250cm9sczogUHJlc2VudGF0aW9uQ29udHJvbFtdXG4gICk6IFByb21pc2U8Rm9ybWx5RmllbGRDb25maWdbXT4ge1xuICAgIGNvbnN0IHJlc3VsdDogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xuICAgIGxldCByb3dJdGVtczogKENvbnRyb2xEYXRhIHwgUHJlc2VudGF0aW9uQ29udHJvbClbXSA9IFtdO1xuICAgIGNvbnRyb2xzID0gY29udHJvbHMuZmlsdGVyKChjKSA9PiAhYy5pc09ubHlGb3JDb25maWcpO1xuXG4gICAgLy8gRmlsdGVyIG91dCBjb250cm9scyB0aGF0IGFyZSBpbmNvbXBsZXRlXG4gICAgY29udHJvbHMgPSBjb250cm9scy5maWx0ZXIoKGMpID0+IHtcbiAgICAgIC8vIFNraXAgY29udHJvbHMgdGhhdCBhcmUgbWlzc2luZyBlc3NlbnRpYWwgZGF0YVxuICAgICAgaWYgKFxuICAgICAgICBjLnR5cGUgPT09IFN0ZXBDb250cm9sVHlwZS5EaWN0aW9uYXJ5ICYmXG4gICAgICAgICFjLnNwZWNpZmljQ29udHJvbERhdGE/LmRpY3Rpb25hcnlVVUlEXG4gICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcHJvY2Vzc1JvdyA9IGFzeW5jIChcbiAgICAgIGl0ZW1zOiAoQ29udHJvbERhdGEgfCBQcmVzZW50YXRpb25Db250cm9sKVtdXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcbiAgICAgIGNvbnN0IHRvdGFsID0gMTI7XG4gICAgICBjb25zdCBidWlsdDogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xuICAgICAgY29uc3QgYXV0bzoge1xuICAgICAgICBjOiBDb250cm9sRGF0YSB8IFByZXNlbnRhdGlvbkNvbnRyb2w7XG4gICAgICAgIGY6IEZvcm1seUZpZWxkQ29uZmlnO1xuICAgICAgfVtdID0gW107XG4gICAgICBsZXQgdXNlZCA9IDA7XG4gICAgICBmb3IgKGNvbnN0IGkgb2YgaXRlbXMpIHtcbiAgICAgICAgaWYgKCdjb2xsZWN0aW9uQ29udHJvbElkZW50aWZpZXInIGluIGkgPT09IHRydWUpIHtcbiAgICAgICAgICBidWlsdC5wdXNoKFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5idWlsZFByZXNlbnRhdGlvbkZvcm1GaWVsZEFzeW5jKFxuICAgICAgICAgICAgICBzdGVwLFxuICAgICAgICAgICAgICBpIGFzIFByZXNlbnRhdGlvbkNvbnRyb2xcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKCdhcGlNZXRob2RJZCcgaW4gaSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGJ1aWx0LnB1c2goXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmJ1aWxkQXBpTWV0aG9kRm9ybUZpZWxkQXN5bmMoXG4gICAgICAgICAgICAgIHN0ZXAsXG4gICAgICAgICAgICAgIGkgYXMgUHJlc2VudGF0aW9uQ29udHJvbFxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVpbHQucHVzaChhd2FpdCB0aGlzLmJ1aWxkRm9ybUZpZWxkQXN5bmMoc3RlcCwgaSBhcyBDb250cm9sRGF0YSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGMgPSBpdGVtc1tpXTtcbiAgICAgICAgY29uc3QgZiA9IGJ1aWx0W2ldO1xuICAgICAgICBpZiAoYy5kaW1lbnNpb25UeXBlID09PSBEaW1lbnNpb25UeXBlLlBlcmNlbnRhZ2UpIHtcbiAgICAgICAgICBpZiAoYy5hdXRvRGltZW5zaW9uKSB7XG4gICAgICAgICAgICBhdXRvLnB1c2goeyBjLCBmIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzID0gTWF0aC5yb3VuZCgoYy5kaW1lbnNpb24gLyAxMDApICogdG90YWwpO1xuICAgICAgICAgICAgdXNlZCArPSBzO1xuICAgICAgICAgICAgY29uc3QgcGVyY2VudGFnZUNsYXNzID0gdGhpcy5nZXRQZXJjZW50YWdlQ2xhc3NOYW1lKGMuZGltZW5zaW9uKTtcbiAgICAgICAgICAgIGYuY2xhc3NOYW1lID0gYCR7Zi5jbGFzc05hbWV9ICR7cGVyY2VudGFnZUNsYXNzfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGMuZGltZW5zaW9uVHlwZSA9PT0gRGltZW5zaW9uVHlwZS5QaXhlbHMpIHtcbiAgICAgICAgICBjb25zdCBzID0gTWF0aC5yb3VuZCgoYy5kaW1lbnNpb24gLyB3aW5kb3cuaW5uZXJXaWR0aCkgKiB0b3RhbCk7XG4gICAgICAgICAgdXNlZCArPSBzO1xuICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2VDbGFzcyA9IHRoaXMuZ2V0UGVyY2VudGFnZUNsYXNzTmFtZShcbiAgICAgICAgICAgIChzIC8gdG90YWwpICogMTAwXG4gICAgICAgICAgKTtcbiAgICAgICAgICBmLmNsYXNzTmFtZSA9IGAke2YuY2xhc3NOYW1lfSAke3BlcmNlbnRhZ2VDbGFzc31gO1xuICAgICAgICB9IGVsc2UgaWYgKGMuYXV0b0RpbWVuc2lvbikge1xuICAgICAgICAgIGF1dG8ucHVzaCh7IGMsIGYgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXNlZCArPSAxO1xuICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2VDbGFzcyA9IHRoaXMuZ2V0UGVyY2VudGFnZUNsYXNzTmFtZShcbiAgICAgICAgICAgICgxIC8gdG90YWwpICogMTAwXG4gICAgICAgICAgKTtcbiAgICAgICAgICBmLmNsYXNzTmFtZSA9IGAke2YuY2xhc3NOYW1lfSAke3BlcmNlbnRhZ2VDbGFzc31gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCByZW0gPSB0b3RhbCAtIHVzZWQ7XG4gICAgICBpZiAoYXV0by5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHNoYXJlID0gTWF0aC5tYXgoTWF0aC5mbG9vcihyZW0gLyBhdXRvLmxlbmd0aCksIDEpO1xuICAgICAgICBmb3IgKGNvbnN0IGEgb2YgYXV0bykge1xuICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2VDbGFzcyA9IHRoaXMuZ2V0UGVyY2VudGFnZUNsYXNzTmFtZShcbiAgICAgICAgICAgIChzaGFyZSAvIHRvdGFsKSAqIDEwMFxuICAgICAgICAgICk7XG4gICAgICAgICAgYS5mLmNsYXNzTmFtZSA9IGAke2EuZi5jbGFzc05hbWV9ICR7cGVyY2VudGFnZUNsYXNzfWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZpZWxkcy5wdXNoKC4uLmJ1aWx0KTtcbiAgICAgIHJldHVybiBmaWVsZHM7XG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGMgb2YgWy4uLmNvbnRyb2xzLCAuLi5wcmVzZW50YXRpb25Db250cm9sc10pIHtcbiAgICAgIGlmIChcbiAgICAgICAgKCd0eXBlJyBpbiBjICYmIGMudHlwZSA9PT0gU3RlcENvbnRyb2xUeXBlLk5ld1JvdykgfHxcbiAgICAgICAgYy50eXBlID09IFByZXNlbnRhdGlvbkNvbnRyb2xUeXBlLk5ld1Jvd1xuICAgICAgKSB7XG4gICAgICAgIGlmIChyb3dJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goLi4uKGF3YWl0IHByb2Nlc3NSb3cocm93SXRlbXMpKSk7XG4gICAgICAgICAgcm93SXRlbXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93SXRlbXMucHVzaChjKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJvd0l0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3VsdC5wdXNoKC4uLihhd2FpdCBwcm9jZXNzUm93KHJvd0l0ZW1zKSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0UGl4ZWxDbGFzc05hbWUocGl4ZWxEaW1lbnNpb246IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgY2xhc3NOYW1lID0gYHBpeGVsLXdpZHRoLSR7cGl4ZWxEaW1lbnNpb259YDtcbiAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNsYXNzTmFtZSkpIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgc3R5bGUuaWQgPSBjbGFzc05hbWU7XG4gICAgICBzdHlsZS5pbm5lckhUTUwgPSBgXG4gICAgICAgIC4ke2NsYXNzTmFtZX0ge1xuICAgICAgICAgIHdpZHRoOiAke3BpeGVsRGltZW5zaW9ufXB4O1xuICAgICAgICB9XG4gICAgICBgO1xuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICBhc3luYyBidWlsZEZvcm1GaWVsZEFzeW5jKFxuICAgIHN0ZXA6IFN0ZXBEYXRhIHwgdW5kZWZpbmVkLFxuICAgIGNvbnRyb2w6IENvbnRyb2xEYXRhXG4gICk6IFByb21pc2U8Rm9ybWx5RmllbGRDb25maWc+IHtcbiAgICBsZXQgaW5pdGlhbFR5cGUgPSAnaW5wdXQnOyAvLyBEZWZhdWx0IHR5cGVcbiAgICBsZXQgY29tcG9uZW50U3R5bGVLZXkgPSBgLmNvbXBvbmVudC10ZXh0LWZpZWxkYDsgLy8gRGVmYXVsdCBzdHlsZSBmb3IgdGV4dCBpbnB1dFxuICAgIGNvbnN0IGJhc2VTdHlsZSA9IHRoaXMuZGVzaWduW2AuZm9udC0ke2luaXRpYWxUeXBlfWBdIHx8IHt9O1xuICAgIGNvbnN0IGNvbnRyb2xTdHlsZVN0cmluZyA9XG4gICAgICB0aGlzLnN0eWxlT2JqZWN0VG9TdHJpbmdFeGNlcHRCYWNrZ3JvdW5kKGJhc2VTdHlsZSk7XG4gICAgbGV0IHBhdHRlcm4gPSAnJztcbiAgICBpZiAoY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5hbGxvd2VkQ2hhcmFjdGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGF0dGVybiA9IG5ldyBSZWdFeHAoY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhLmFsbG93ZWRDaGFyYWN0ZXJzKVxuICAgICAgICAgIC5zb3VyY2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2luY29ycmVjdCByZWdleCBwYXR0ZXJuJywgZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50c1RvRXhjbHVkZUZyb21TdHlsZSA9IFtcbiAgICAgICcuY29tcG9uZW50LXRleHQtZmllbGQnLFxuICAgICAgJy5jb21wb25lbnQtY2hlY2tib3gnLFxuICAgICAgJy5jb21wb25lbnQtcmFkaW8nLFxuICAgICAgJy5jb21wb25lbnQtZGF0ZScsXG4gICAgICAnLmNvbXBvbmVudC1kYXRhJyxcbiAgICBdO1xuICAgIGxldCBmb3JtbHlDb25maWcgPSB0aGlzLmdldERlZmF1bHRGb3JtbHlGaWVsZENvbmZpZyhcbiAgICAgIGNvbnRyb2wsXG4gICAgICBpbml0aWFsVHlwZSxcbiAgICAgIHBhdHRlcm4sXG4gICAgICBjb21wb25lbnRTdHlsZUtleSxcbiAgICAgIGNvbXBvbmVudHNUb0V4Y2x1ZGVGcm9tU3R5bGVcbiAgICApO1xuICAgIC8vY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhLnR5cGUgPT09IDMgIGlzIGVtYWlsXG4gICAgaWYgKGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8udHlwZSA9PT0gMykge1xuICAgICAgdGhpcy5hZGRWYWxpZGF0b3JzKGZvcm1seUNvbmZpZywgY29udHJvbCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8uaXNBcGlWYWxpZGF0aW9uKSB7XG4gICAgICB0aGlzLmFkZEFwaVZhbGlkYXRvcnMoZm9ybWx5Q29uZmlnLCBjb250cm9sKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvbnRyb2wudHlwZSkge1xuICAgICAgY2FzZSBTdGVwQ29udHJvbFR5cGUuTWFudWFsSW5wdXQ6IC8vIFRleHRcbiAgICAgICAgdmFyIHN1YlR5cGUgPSBjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGFcbiAgICAgICAgICA/LnR5cGUgYXMgTWFudWFsSW5wdXRDb250cm9sVHlwZTtcbiAgICAgICAgc3dpdGNoIChzdWJUeXBlKSB7XG4gICAgICAgICAgY2FzZSBNYW51YWxJbnB1dENvbnRyb2xUeXBlLk51bWVyaWM6XG4gICAgICAgICAgICBmb3JtbHlDb25maWcudHlwZSA9ICdudW1iZXInO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIE1hbnVhbElucHV0Q29udHJvbFR5cGUuRW1haWw6XG4gICAgICAgICAgY2FzZSBNYW51YWxJbnB1dENvbnRyb2xUeXBlLlRleHQ6XG4gICAgICAgICAgY2FzZSBNYW51YWxJbnB1dENvbnRyb2xUeXBlLlBob25lOlxuICAgICAgICAgICAgZm9ybWx5Q29uZmlnLnR5cGUgPSAnaW5wdXQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBNYW51YWxJbnB1dENvbnRyb2xUeXBlLlRleHRBcmVhOlxuICAgICAgICAgICAgZm9ybWx5Q29uZmlnLnR5cGUgPSAnaW5wdXQnO1xuICAgICAgICAgICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnYXV0b3NpemUnXSA9IGZhbHNlO1xuICAgICAgICAgICAgY29tcG9uZW50U3R5bGVLZXkgPSAnLmNvbXBvbmVudC10ZXh0LWZpZWxkJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgTWFudWFsSW5wdXRDb250cm9sVHlwZS5EYXRlVGltZTpcbiAgICAgICAgICAgIGZvcm1seUNvbmZpZy50eXBlID0gJ2RhdGVwaWNrZXInO1xuICAgICAgICAgICAgZm9ybWx5Q29uZmlnLnByb3BzID0ge1xuICAgICAgICAgICAgICByZWFkb25seTogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb21wb25lbnRTdHlsZUtleSA9ICcuY29tcG9uZW50LWRhdGUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGZvcm1seUNvbmZpZy50eXBlID0gJ2lucHV0JztcbiAgICAgICAgICAgIGNvbXBvbmVudFN0eWxlS2V5ID0gJy5jb21wb25lbnQtdGV4dC1maWVsZCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU3RlcENvbnRyb2xUeXBlLlBhcmFncmFwaDogLy8gUGFyYWdyYXBoXG4gICAgICAgIGZvcm1seUNvbmZpZy50eXBlID0gJ2Zvcm1seS1wYXJhZ3JhcGgnO1xuICAgICAgICBjb21wb25lbnRTdHlsZUtleSA9ICcuY29tcG9uZW50LXRleHQtZmllbGQnO1xuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWREZXNjcmlwdGlvbiA9XG4gICAgICAgICAgY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5kZXNjcmlwdGlvblRyYW5zbGF0aW9ucz8uZmluZChcbiAgICAgICAgICAgIChkOiB7IGxhbmd1YWdlSXNvOiBzdHJpbmcgfSkgPT5cbiAgICAgICAgICAgICAgZC5sYW5ndWFnZUlzbyA9PT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgICApPy52YWx1ZSB8fCAnJztcbiAgICAgICAgZm9ybWx5Q29uZmlnLmRlZmF1bHRWYWx1ZSA9IHRyYW5zbGF0ZWREZXNjcmlwdGlvbjtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU3RlcENvbnRyb2xUeXBlLkNoZWNrQm94OiAvLyBDaGVja2JveFxuICAgICAgICBmb3JtbHlDb25maWcudHlwZSA9ICdmb3JtbHktY2hlY2tib3gnO1xuICAgICAgICBjb21wb25lbnRTdHlsZUtleSA9ICcuY29tcG9uZW50LWNoZWNrYm94JztcbiAgICAgICAgdmFyIGNoZWNrZWQgPSBjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LmNoZWNrZWQgPz8gZmFsc2U7XG4gICAgICAgIGZvcm1seUNvbmZpZy5wcm9wcyFbJ2NoZWNrZWQnXSA9IGNoZWNrZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTdGVwQ29udHJvbFR5cGUuRGljdGlvbmFyeTogLy8gRGljdGlvbmFyeSAoZHJvcGRvd24pXG4gICAgICAgIGNvbXBvbmVudFN0eWxlS2V5ID1cbiAgICAgICAgICBjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGEuc2hvd0FzUmFkaW9CdXR0b25zTGlzdCA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyAnLmNvbXBvbmVudC1yYWRpbydcbiAgICAgICAgICAgIDogJy5jb21wb25lbnQtZGF0YSc7XG4gICAgICAgIGF3YWl0IHRoaXMuY29uc3RydWN0RGljdGlvbmFyeShjb250cm9sLCBmb3JtbHlDb25maWcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU3RlcENvbnRyb2xUeXBlLkJ1dHRvbnM6XG4gICAgICAgIGZvcm1seUNvbmZpZy50eXBlID0gJyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTdGVwQ29udHJvbFR5cGUuRmx1eEluZm86XG4gICAgICAgIGZvcm1seUNvbmZpZy50eXBlID0gJyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTdGVwQ29udHJvbFR5cGUuRG93bmxvYWREb2N1bWVudHM6XG4gICAgICAgIGZvcm1seUNvbmZpZyA9IHRoaXMuQ3JlYXRlRG93bmxvYWREb2NzRmllbGRDb25maWcoY29udHJvbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTdGVwQ29udHJvbFR5cGUuVmlld0RvY3VtZW50czpcbiAgICAgICAgZm9ybWx5Q29uZmlnID0gdGhpcy5DcmVhdGVWaWV3RG9jc0ZpZWxkQ29uZmlnKGNvbnRyb2wpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU3RlcENvbnRyb2xUeXBlLlVwbG9hZERvY3VtZW50czpcbiAgICAgICAgZm9ybWx5Q29uZmlnID0gdGhpcy5DcmVhdGVVcGxvYWREb2NzRmllbGRDb25maWcoY29udHJvbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTdGVwQ29udHJvbFR5cGUuTmV3Um93OiAvLyBOZXcgUm93XG4gICAgICAgIGZvcm1seUNvbmZpZy50eXBlID0gJyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZm9ybWx5Q29uZmlnLnR5cGUgPSAnaW5wdXQnO1xuICAgICAgICBjb21wb25lbnRTdHlsZUtleSA9ICcuY29tcG9uZW50LXRleHQtZmllbGQnO1xuICAgIH1cbiAgICBmb3JtbHlDb25maWcuY2xhc3NOYW1lID0gY29tcG9uZW50U3R5bGVLZXkuc3Vic3RyaW5nKDEpO1xuXG4gICAgaWYgKCFjb21wb25lbnRzVG9FeGNsdWRlRnJvbVN0eWxlLmZpbmQoKGMpID0+IGMgPT09IGNvbXBvbmVudFN0eWxlS2V5KSkge1xuICAgICAgaWYgKHRoaXMuZGVzaWduW2NvbXBvbmVudFN0eWxlS2V5XSkge1xuICAgICAgICBmb3JtbHlDb25maWcucHJvcHMhLmF0dHJpYnV0ZXMhWydzdHlsZSddICs9XG4gICAgICAgICAgJzsnICtcbiAgICAgICAgICB0aGlzLnN0eWxlT2JqZWN0VG9TdHJpbmdFeGNlcHRCYWNrZ3JvdW5kKFxuICAgICAgICAgICAgdGhpcy5kZXNpZ25bY29tcG9uZW50U3R5bGVLZXldXG4gICAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgbGFiZWwgc3R5bGVzXG4gICAgICBjb25zdCBsYWJlbFN0eWxlS2V5ID0gYCR7Y29tcG9uZW50U3R5bGVLZXl9LWxhYmVsYDtcbiAgICAgIGlmICh0aGlzLmRlc2lnbltsYWJlbFN0eWxlS2V5XSkge1xuICAgICAgICBmb3JtbHlDb25maWcucHJvcHMhLmF0dHJpYnV0ZXMhWydzdHlsZSddICs9XG4gICAgICAgICAgJzsnICtcbiAgICAgICAgICB0aGlzLnN0eWxlT2JqZWN0VG9TdHJpbmdFeGNlcHRCYWNrZ3JvdW5kKFxuICAgICAgICAgICAgdGhpcy5kZXNpZ25bY29tcG9uZW50U3R5bGVLZXldXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbnRyb2wuZGVwZW5kZW50RGljdGlvbmFyeSkge1xuICAgICAgdGhpcy5hdHRhY2hUb0RlcGVuZGVudERpY3Rpb25hcnlJZk5lY2Vzc2FyeShcbiAgICAgICAgY29udHJvbC5kZXBlbmRlbnREaWN0aW9uYXJ5LFxuICAgICAgICBmb3JtbHlDb25maWdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHRyYW5zbGF0ZWRUaXRsZSA9IGNvbnRyb2wudHJhbnNsYXRpb25zPy5maW5kKFxuICAgICAgKGQ6IHsgbGFuZ3VhZ2VJc286IHN0cmluZyB9KSA9PiBkLmxhbmd1YWdlSXNvID09PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICk/LnZhbHVlO1xuICAgIGlmICghdHJhbnNsYXRlZFRpdGxlKSB7XG4gICAgICB0cmFuc2xhdGVkVGl0bGUgPSBjb250cm9sLnRpdGxlO1xuICAgIH1cbiAgICBmb3JtbHlDb25maWcucHJvcHMhWydsYWJlbCddID0gdHJhbnNsYXRlZFRpdGxlO1xuXG4gICAgdGhpcy5mb3JtbHlDb2xsZWN0aW5nRmllbGRzLnB1c2goZm9ybWx5Q29uZmlnKTtcblxuICAgIHJldHVybiBmb3JtbHlDb25maWc7XG4gIH1cblxuICBhZGRWYWxpZGF0b3JzKGZvcm1seUNvbmZpZzogRm9ybWx5RmllbGRDb25maWcsIGNvbnRyb2w6IENvbnRyb2xEYXRhKSB7XG4gICAgdmFyIGVtYWlsRXJyb3JMYWJlbCA9IHRoaXMuZmx1eD8uZmluZChcbiAgICAgIChmKSA9PiBmPy5jb25maWc/LmNvbXBvbmVudENvbGxlY3RlZCA9PT0gY29udHJvbD8uaWRlbnRpZmllclxuICAgICk/LmNvbmZpZz8uZW1haWxFcnJvckxhYmVsO1xuICAgIHZhciBlbWFpbEVycm9yTGFiZWxWYWx1ZSA9ICcnO1xuICAgIGlmIChlbWFpbEVycm9yTGFiZWwgIT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KGVtYWlsRXJyb3JMYWJlbCkpIHtcbiAgICAgIGVtYWlsRXJyb3JMYWJlbFZhbHVlID1cbiAgICAgICAgKGVtYWlsRXJyb3JMYWJlbCBhcyBMYWJlbEluZm9bXSkuZmluZChcbiAgICAgICAgICAobCkgPT4gbC5sYW5ndWFnZUlzbyA9PT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgKT8udmFsdWUgPz8gJyc7XG4gICAgfVxuXG4gICAgZm9ybWx5Q29uZmlnLnZhbGlkYXRvcnMgPSB7XG4gICAgICBlbWFpbFZhbGlkOiB7XG4gICAgICAgIGV4cHJlc3Npb246IChjb250OiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbnQudmFsdWU7XG4gICAgICAgICAgY29uc3QgZW1haWxQYXR0ZXJuID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeW2EtekEtWjAtOS5fJSstXStAW2EtekEtWjAtOS4tXStcXFxcLlthLXpBLVpdezIsfSQnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgIWVtYWlsUGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgY29udC5zZXRFcnJvcnMoeyBpbnZhbGlkRW1haWw6IHRydWUgfSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBtZXNzYWdlOiBlbWFpbEVycm9yTGFiZWxWYWx1ZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGFkZEFwaVZhbGlkYXRvcnMoZm9ybWx5Q29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZywgY29udHJvbDogQ29udHJvbERhdGEpIHtcbiAgICBmb3JtbHlDb25maWcuYXN5bmNWYWxpZGF0b3JzID0ge1xuICAgICAgdmFsaWRhdGVUaHJvdWdoQXBpOiB7XG4gICAgICAgIGV4cHJlc3Npb246IChjb250OiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY29udC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXBpVmFsaWRhdGlvbk1ldGhvZCA9XG4gICAgICAgICAgICAgICAgICBjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGEuYXBpVmFsaWRhdGlvbk1ldGhvZDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHlWYWx1ZSA9IHRoaXMuYXBwTW9kZWwucGFydG5lcnNcbiAgICAgICAgICAgICAgICAgIC5mbGF0TWFwKChwKSA9PiBwLnBhcnRuZXJTZXR0aW5ncy5wYXJ0bmVyTWV0aG9kc0FwaSlcbiAgICAgICAgICAgICAgICAgIC5maW5kKChwKSA9PiBwLm1ldGhvZElkID09PSBhcGlWYWxpZGF0aW9uTWV0aG9kKVxuICAgICAgICAgICAgICAgICAgPy5ib2R5Q29uZmlndXJhdGlvbi5ib2R5TWFwRmllbGRzO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPVxuICAgICAgICAgICAgICAgICAgYm9keVZhbHVlPy5yZWR1Y2UoKGFjYzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSwgZikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZi5mbHV4RmllbGRJZCA9PT0gY29udHJvbC5pZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYWNjW2YucGFydG5lckZpZWxkXSA9IGNvbnQudmFsdWUgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgYWNjW2YucGFydG5lckZpZWxkXSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICAgICAgICB9LCB7fSkgfHwge307XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhUmVxdWVzdDogQXBpVmFsaWRhdGVSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgICAgYXBwSWQ6IHRoaXMuYXBwTW9kZWwuYXBwbGljYXRpb25JZCxcbiAgICAgICAgICAgICAgICAgIGFwaUlkOiBhcGlWYWxpZGF0aW9uTWV0aG9kLFxuICAgICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoZmllbGRNYXApLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZU1ldGhvZEFwaShkYXRhUmVxdWVzdCkucGlwZShcbiAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoZmFsc2UpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApIHx8ICdzc3Nzc3Nzc3Nzc3Nzc3NzJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lc3NhZ2U6ICdWYWxpZGF0aW9uIGZhaWxlZC4nLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdEZvcm1seUZpZWxkQ29uZmlnKFxuICAgIGNvbnRyb2w6IENvbnRyb2xEYXRhLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBwYXR0ZXJuOiBzdHJpbmcsXG4gICAgY29tcG9uZW50U3R5bGVLZXk6IHN0cmluZyxcbiAgICBjb21wb25lbnRzVG9FeGNsdWRlRnJvbVN0eWxlOiBzdHJpbmdbXVxuICApOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gICAgY29uc3QgY3VycmVudExhbmd1YWdlSWQgPSBVdGlscy5maW5kTGFuZ3VhZ2VJZEJ5SXNvKFxuICAgICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMsXG4gICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICk7XG5cbiAgICBsZXQgZm9ybWx5Q29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgIGtleTogY29udHJvbC5pZGVudGlmaWVyIHx8IGNvbnRyb2wudGl0bGUsXG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgY3VycmVudExhbmd1YWdlSXNvOiB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgICAgY3VycmVudExhbmd1YWdlSWQ6IGN1cnJlbnRMYW5ndWFnZUlkLFxuICAgICAgICBsYWJlbDpcbiAgICAgICAgICBjb250cm9sLnRyYW5zbGF0aW9ucz8uZmluZChcbiAgICAgICAgICAgICh0OiB7IGxhbmd1YWdlSXNvOiBzdHJpbmcgfSkgPT5cbiAgICAgICAgICAgICAgdC5sYW5ndWFnZUlzbyA9PT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgICApPy52YWx1ZSB8fCAnJyxcblxuICAgICAgICB0aXRsZTpcbiAgICAgICAgICBjb250cm9sLnRyYW5zbGF0aW9ucz8uZmluZChcbiAgICAgICAgICAgICh0OiB7IGxhbmd1YWdlSXNvOiBzdHJpbmcgfSkgPT5cbiAgICAgICAgICAgICAgdC5sYW5ndWFnZUlzbyA9PT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgICApPy52YWx1ZSB8fCAnJyxcbiAgICAgICAgZGVzaWduOiB0aGlzLmRlc2lnbixcbiAgICAgICAgcmVxdWlyZWQ6IGNvbnRyb2wuaXNNYW5kYXRvcnksXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBzdHlsZTogY29tcG9uZW50c1RvRXhjbHVkZUZyb21TdHlsZS5maW5kKFxuICAgICAgICAgICAgKGMpID0+IGMgPT09IGNvbXBvbmVudFN0eWxlS2V5XG4gICAgICAgICAgKVxuICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgOiBjb21wb25lbnRTdHlsZUtleSxcbiAgICAgICAgfSxcbiAgICAgICAgYXV0b3NpemU6IHRydWUsXG4gICAgICAgIG9wdGlvbnM6IFt7fV0sXG4gICAgICAgIGZpZWxkR3JvdXA6IFtdLFxuICAgICAgICBhdXRvRGltZW5zaW9uOiBjb250cm9sLmF1dG9EaW1lbnNpb24sXG4gICAgICB9LFxuICAgICAgZXhwcmVzc2lvbnM6IHt9LFxuICAgICAgaG9va3M6IHt9LFxuICAgICAgdmFsaWRhdG9yczoge30sXG4gICAgfTtcbiAgICBmb3JtbHlDb25maWcudmFsaWRhdGlvbiA9IHt9O1xuXG4gICAgaWYgKGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8uaXNNYW5kYXRvcnkgJiYgZm9ybWx5Q29uZmlnLnByb3BzKSB7XG4gICAgICB2YXIgcmVxdWlyZWRNZXNzYWdlID0gVXRpbHMuZmluZEVycm9yVHJhbnNsYXRpb25WYWx1ZU9yRGVmYXVsdChcbiAgICAgICAgY29udHJvbC5lcnJvcnNUcmFuc2xhdGlvbnMsXG4gICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvLFxuICAgICAgICAnaXNNYW5kYXRvcnlWYWxpZGF0aW9uJ1xuICAgICAgKTtcblxuICAgICAgZm9ybWx5Q29uZmlnLnByb3BzLnJlcXVpcmVkID0gY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5pc01hbmRhdG9yeTtcbiAgICAgIGZvcm1seUNvbmZpZy52YWxpZGF0aW9uLm1lc3NhZ2VzID0ge1xuICAgICAgICAuLi5mb3JtbHlDb25maWcudmFsaWRhdGlvbj8ubWVzc2FnZXMsXG4gICAgICAgIHJlcXVpcmVkOiByZXF1aXJlZE1lc3NhZ2UsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGNvbnRyb2wudHlwZSA9PT0gU3RlcENvbnRyb2xUeXBlLkRpY3Rpb25hcnkgJiZcbiAgICAgIGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8uaXNNYW5kYXRvcnkgJiZcbiAgICAgIGNvbnRyb2wuZXJyb3JzVHJhbnNsYXRpb25zICYmXG4gICAgICBmb3JtbHlDb25maWcucHJvcHNcbiAgICApIHtcbiAgICAgIHZhciByZXF1aXJlZE1lc3NhZ2UgPSBVdGlscy5maW5kRXJyb3JUcmFuc2xhdGlvblZhbHVlT3JEZWZhdWx0KFxuICAgICAgICBjb250cm9sLmVycm9yc1RyYW5zbGF0aW9ucyxcbiAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICAgICdpc01hbmRhdG9yeSdcbiAgICAgICk7XG5cbiAgICAgIGZvcm1seUNvbmZpZy5wcm9wcy5yZXF1aXJlZCA9IGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8uaXNNYW5kYXRvcnk7XG4gICAgICBmb3JtbHlDb25maWcudmFsaWRhdGlvbi5tZXNzYWdlcyA9IHtcbiAgICAgICAgLi4uZm9ybWx5Q29uZmlnLnZhbGlkYXRpb24/Lm1lc3NhZ2VzLFxuICAgICAgICByZXF1aXJlZDogcmVxdWlyZWRNZXNzYWdlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBsZXQgc2ltcGxlVmFsaWRhdGlvbk1lc3NhZ2UgPSAnJztcbiAgICBpZiAoY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5pc1NpbXBsZVZhbGlkYXRpb24gJiYgZm9ybWx5Q29uZmlnLnByb3BzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8uaXNTaW1wbGVWYWxpZGF0aW9uICYmXG4gICAgICAgIGZvcm1seUNvbmZpZy5wcm9wc1xuICAgICAgKSB7XG4gICAgICAgIHNpbXBsZVZhbGlkYXRpb25NZXNzYWdlID0gVXRpbHMuZmluZEVycm9yVHJhbnNsYXRpb25WYWx1ZU9yRGVmYXVsdChcbiAgICAgICAgICBjb250cm9sLmVycm9yc1RyYW5zbGF0aW9ucyxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgICAgICAnc2ltcGxlVmFsaWRhdGlvbidcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5taW5WYWx1ZT8udG9TdHJpbmcoKSkge1xuICAgICAgICAgIGZvcm1seUNvbmZpZy5wcm9wcy5taW4gPSBjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGEubWluVmFsdWU7XG4gICAgICAgICAgZm9ybWx5Q29uZmlnLnZhbGlkYXRpb24ubWVzc2FnZXMgPSB7XG4gICAgICAgICAgICAuLi5mb3JtbHlDb25maWcudmFsaWRhdGlvbj8ubWVzc2FnZXMsXG4gICAgICAgICAgICBtaW46IHNpbXBsZVZhbGlkYXRpb25NZXNzYWdlLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5tYXhWYWx1ZT8udG9TdHJpbmcoKSkge1xuICAgICAgICAgIGZvcm1seUNvbmZpZy5wcm9wcy5tYXggPSBjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGEubWF4VmFsdWU7XG4gICAgICAgICAgZm9ybWx5Q29uZmlnLnZhbGlkYXRpb24ubWVzc2FnZXMgPSB7XG4gICAgICAgICAgICAuLi5mb3JtbHlDb25maWcudmFsaWRhdGlvbj8ubWVzc2FnZXMsXG4gICAgICAgICAgICBtYXg6IHNpbXBsZVZhbGlkYXRpb25NZXNzYWdlLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgcGF0dGVybiB2YWxpZGF0aW9uIGlmIGFsbG93ZWRDaGFyYWN0ZXJzIGlzIGRlZmluZWRcbiAgICAgIGlmIChjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LmFsbG93ZWRDaGFyYWN0ZXJzKSB7XG4gICAgICAgIHNpbXBsZVZhbGlkYXRpb25NZXNzYWdlID0gc2ltcGxlVmFsaWRhdGlvbk1lc3NhZ2UgPVxuICAgICAgICAgIFV0aWxzLmZpbmRFcnJvclRyYW5zbGF0aW9uVmFsdWVPckRlZmF1bHQoXG4gICAgICAgICAgICBjb250cm9sLmVycm9yc1RyYW5zbGF0aW9ucyxcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvLFxuICAgICAgICAgICAgJ3NpbXBsZVZhbGlkYXRpb24nXG4gICAgICAgICAgKTtcblxuICAgICAgICBmb3JtbHlDb25maWcudmFsaWRhdG9ycyA9IHtcbiAgICAgICAgICAuLi5mb3JtbHlDb25maWcudmFsaWRhdG9ycyxcbiAgICAgICAgICBjdXN0b21QYXR0ZXJuOiB7XG4gICAgICAgICAgICBleHByZXNzaW9uOiAoYzogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghYy52YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHBhdHRlcm4pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZWdleC50ZXN0KGMudmFsdWUpO1xuICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICBzaW1wbGVWYWxpZGF0aW9uTWVzc2FnZSB8fFxuICAgICAgICAgICAgICAnVmFsdWUgZG9lcyBub3QgbWF0Y2ggdGhlIHJlcXVpcmVkIHBhdHRlcm4nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgZm9ybWx5Q29uZmlnLnZhbGlkYXRpb24ubWVzc2FnZXMgPSB7XG4gICAgICAgICAgLi4uZm9ybWx5Q29uZmlnLnZhbGlkYXRpb24/Lm1lc3NhZ2VzLFxuICAgICAgICAgIHBhdHRlcm46IHNpbXBsZVZhbGlkYXRpb25NZXNzYWdlLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSBtYXhMZW5ndGggdmFsaWRhdGlvbiBpZiBtYXhDaGFyYWN0ZXJzIGlzIGRlZmluZWRcbiAgICAgIGlmIChjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/Lm1heENoYXJhY3RlcnMpIHtcbiAgICAgICAgZm9ybWx5Q29uZmlnLnByb3BzLm1heExlbmd0aCA9XG4gICAgICAgICAgY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5tYXhDaGFyYWN0ZXJzO1xuICAgICAgICBmb3JtbHlDb25maWcudmFsaWRhdGlvbi5tZXNzYWdlcyA9IHtcbiAgICAgICAgICAuLi5mb3JtbHlDb25maWcudmFsaWRhdGlvbj8ubWVzc2FnZXMsXG4gICAgICAgICAgbWF4TGVuZ3RoOiBzaW1wbGVWYWxpZGF0aW9uTWVzc2FnZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5hbGxvd09ubHlGdXR1cmUgfHxcbiAgICAgICAgY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5hbGxvd09ubHlQYXN0XG4gICAgICApIHtcbiAgICAgICAgZm9ybWx5Q29uZmlnLnR5cGUgPSAnZGF0ZXBpY2tlcic7XG4gICAgICAgIGNvbnN0IGNoZWNrRGF0ZVZhbGlkYXRpb24gPSB7XG4gICAgICAgICAgY2hlY2tEYXRlOiB7XG4gICAgICAgICAgICBleHByZXNzaW9uOiAoYzogQWJzdHJhY3RDb250cm9sLCBmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHtcbiAgICAgICAgICAgICAgc2ltcGxlVmFsaWRhdGlvbk1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIFV0aWxzLmZpbmRFcnJvclRyYW5zbGF0aW9uVmFsdWVPckRlZmF1bHQoXG4gICAgICAgICAgICAgICAgICBjb250cm9sLmVycm9yc1RyYW5zbGF0aW9ucyxcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvLFxuICAgICAgICAgICAgICAgICAgJ3NpbXBsZVZhbGlkYXRpb24nXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgIGN1cnJlbnREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuXG4gICAgICAgICAgICAgIGlmIChjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LmFsbG93T25seUZ1dHVyZSkge1xuICAgICAgICAgICAgICAgIGlmICghYy52YWx1ZSB8fCBjLnZhbHVlID09PSAnJykgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMudmFsdWUgPiBjdXJyZW50RGF0ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5hbGxvd09ubHlQYXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjLnZhbHVlIHx8IGMudmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYy52YWx1ZSA8IGN1cnJlbnREYXRlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IChlcnJvcjogYW55LCBmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNpbXBsZVZhbGlkYXRpb25NZXNzYWdlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBmb3JtbHlDb25maWcudmFsaWRhdG9ycyA9IHtcbiAgICAgICAgICAuLi5mb3JtbHlDb25maWcudmFsaWRhdG9ycyxcbiAgICAgICAgICAuLi5jaGVja0RhdGVWYWxpZGF0aW9uLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhLnR5cGUgPT09IDQgIGlzIHBob25lXG4gICAgaWYgKGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8udHlwZSA9PT0gNCkge1xuICAgICAgdmFyIHBob25lRXJyb3JMYWJlbCA9IHRoaXMuZmx1eD8uZmluZChcbiAgICAgICAgKGYpID0+IGY/LmNvbmZpZz8uY29tcG9uZW50Q29sbGVjdGVkID09PSBjb250cm9sPy5pZGVudGlmaWVyXG4gICAgICApPy5jb25maWc/LnBob25lRXJyb3JMYWJlbDtcbiAgICAgIHZhciBwaG9uZUVycm9yTGFiZWxWYWx1ZSA9ICcnO1xuICAgICAgaWYgKHBob25lRXJyb3JMYWJlbCAhPSBudWxsICYmIEFycmF5LmlzQXJyYXkocGhvbmVFcnJvckxhYmVsKSkge1xuICAgICAgICBwaG9uZUVycm9yTGFiZWxWYWx1ZSA9XG4gICAgICAgICAgKHBob25lRXJyb3JMYWJlbCBhcyBMYWJlbEluZm9bXSkuZmluZChcbiAgICAgICAgICAgIChsKSA9PiBsLmxhbmd1YWdlSXNvID09PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICAgICk/LnZhbHVlID8/ICcnO1xuICAgICAgfVxuXG4gICAgICBmb3JtbHlDb25maWcudmFsaWRhdG9ycyA9IHtcbiAgICAgICAgcGhvbmVWYWxpZDoge1xuICAgICAgICAgIGV4cHJlc3Npb246IChjb250OiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29udC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHBob25lUGF0dGVybiA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICdeKFxcXFwrNHwpPygwN1swLThdezF9WzAtOV17MX18MDJbMC05XXsyfXwwM1swLTldezJ9KXsxfT8oXFxcXHN8XFxcXC58LSk/KFswLTldezN9KFxcXFxzfFxcXFwufC18KSl7Mn0kJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAhcGhvbmVQYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgIGNvbnQuc2V0RXJyb3JzKHsgaW52YWxpZFBob25lTnVtYmVyOiB0cnVlIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2U6IHBob25lRXJyb3JMYWJlbFZhbHVlLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy50eXBlID09PSAyKSB7XG4gICAgICBjb25zdCBjaGVja0RhdGUyVmFsaWRhdGlvbiA9IHtcbiAgICAgICAgY2hlY2tEYXRlMjoge1xuICAgICAgICAgIGV4cHJlc3Npb246IChjOiBBYnN0cmFjdENvbnRyb2wsIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4ge1xuICAgICAgICAgICAgdmFyIGRhdGVWYWx1ZSA9IGMudmFsdWU7XG4gICAgICAgICAgICBpZiAoIWRhdGVWYWx1ZSAmJiBjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LmlzTWFuZGF0b3J5KSB7XG4gICAgICAgICAgICAgIHNpbXBsZVZhbGlkYXRpb25NZXNzYWdlID1cbiAgICAgICAgICAgICAgICBVdGlscy5maW5kRXJyb3JUcmFuc2xhdGlvblZhbHVlT3JEZWZhdWx0KFxuICAgICAgICAgICAgICAgICAgY29udHJvbC5lcnJvcnNUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgICAgICAgICAgICAgICdpc01hbmRhdG9yeVZhbGlkYXRpb24nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBpc05hTihEYXRlLnBhcnNlKGRhdGVWYWx1ZSkpICYmXG4gICAgICAgICAgICAgIGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8uaXNNYW5kYXRvcnlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2U6IChlcnJvcjogYW55LCBmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHtcbiAgICAgICAgICAgIGlmIChzaW1wbGVWYWxpZGF0aW9uTWVzc2FnZSA9PT0gJycpXG4gICAgICAgICAgICAgIHJldHVybiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgZGF0ZSc7XG5cbiAgICAgICAgICAgIHJldHVybiBzaW1wbGVWYWxpZGF0aW9uTWVzc2FnZTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGZvcm1seUNvbmZpZy52YWxpZGF0b3JzID0ge1xuICAgICAgICAuLi5mb3JtbHlDb25maWcudmFsaWRhdG9ycyxcbiAgICAgICAgLi4uY2hlY2tEYXRlMlZhbGlkYXRpb24sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBmb3JtbHlDb25maWc7XG4gIH1cblxuICBhc3luYyBidWlsZFByZXNlbnRhdGlvbkZvcm1GaWVsZEFzeW5jKFxuICAgIHN0ZXA6IFN0ZXBEYXRhIHwgdW5kZWZpbmVkLFxuICAgIGNvbnRyb2w6IFByZXNlbnRhdGlvbkNvbnRyb2xcbiAgKTogUHJvbWlzZTxGb3JtbHlGaWVsZENvbmZpZz4ge1xuICAgIGxldCBmb3JtbHlDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnID0geyBwcm9wczoge30gfTtcblxuICAgIGZvcm1seUNvbmZpZy50eXBlID0gJ2Zvcm1seS1wYXJhZ3JhcGgnO1xuICAgIGZvcm1seUNvbmZpZy5jbGFzc05hbWUgPSAnY29tcG9uZW50LXRleHQtZmllbGQnO1xuICAgIGZvcm1seUNvbmZpZy5wcm9wcyFbJ2Rlc2lnbiddID0gdGhpcy5hcHBNb2RlbC5nZW5lcmF0ZWRDc3M7XG5cbiAgICB2YXIgdHJhbnNsYXRlZFRpdGxlID1cbiAgICAgIGNvbnRyb2wudHJhbnNsYXRpb25zLmZpbmQoKGQpID0+IGQubGFuZ3VhZ2VJc28gPT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28pXG4gICAgICAgID8udmFsdWUgPz9cbiAgICAgIGNvbnRyb2wudGl0bGUgPz9cbiAgICAgICcnO1xuXG4gICAgaWYgKGNvbnRyb2wudHlwZSA9PSBQcmVzZW50YXRpb25Db250cm9sVHlwZS5QYXJhZ3JhcGgpIHtcbiAgICAgIGNvbnN0IHBhcmFncmFwaENvbnRyb2wgPSBjb250cm9sIGFzIFByZXNlbnRhdGlvblBhcmFncmFwaENvbnRyb2w7XG5cbiAgICAgIHZhciB0cmFuc2xhdGVkRGVzY3JpcHRpb24gPVxuICAgICAgICBwYXJhZ3JhcGhDb250cm9sLnNwZWNpZmljQ29udHJvbERhdGEuZGVzY3JpcHRpb25UcmFuc2xhdGlvbnMuZmluZChcbiAgICAgICAgICAoZDogYW55KSA9PiBkLmxhbmd1YWdlSXNvID09IHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICk/LnZhbHVlID8/ICcnO1xuICAgICAgdmFyIHRyYW5zbGF0ZWRQYXJhZ3JhcGhUaXRsZSA9XG4gICAgICAgIHBhcmFncmFwaENvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YS50ZXh0LmZpbmQoXG4gICAgICAgICAgKGQ6IGFueSkgPT4gZC5sYW5ndWFnZUlzbyA9PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICApPy52YWx1ZSA/PyAnJztcblxuICAgICAgZm9ybWx5Q29uZmlnLmRlZmF1bHRWYWx1ZSA9IHRyYW5zbGF0ZWREZXNjcmlwdGlvbjtcbiAgICAgIGZvcm1seUNvbmZpZy5wcm9wcyFbJ3RyYW5zbGF0ZWREZXNjcmlwdGlvbiddID0gdHJhbnNsYXRlZERlc2NyaXB0aW9uO1xuICAgICAgZm9ybWx5Q29uZmlnLnByb3BzIVsndHJhbnNsYXRlZFBhcmFncmFwaFRpdGxlJ10gPVxuICAgICAgICB0cmFuc2xhdGVkUGFyYWdyYXBoVGl0bGU7XG4gICAgICBmb3JtbHlDb25maWcudHlwZSA9ICdmb3JtbHktcGFyYWdyYXBoJztcbiAgICAgIGZvcm1seUNvbmZpZy5jbGFzc05hbWUgPSAnY29tcG9uZW50LXRleHQtZmllbGQnO1xuICAgIH0gZWxzZSBpZiAoY29udHJvbC50eXBlID09IFByZXNlbnRhdGlvbkNvbnRyb2xUeXBlLkRvd25sb2FkKSB7XG4gICAgICBmb3JtbHlDb25maWcgPSB0aGlzLkNyZWF0ZURvd25sb2FkRG9jc0ZpZWxkQ29uZmlnKGNvbnRyb2wpO1xuICAgIH0gZWxzZSBpZiAoY29udHJvbC50eXBlID09IFByZXNlbnRhdGlvbkNvbnRyb2xUeXBlLlZpZXcpIHtcbiAgICAgIGZvcm1seUNvbmZpZyA9IHRoaXMuQ3JlYXRlVmlld0RvY3NGaWVsZENvbmZpZyhjb250cm9sKTtcbiAgICB9IGVsc2UgaWYgKGNvbnRyb2wudHlwZSA9PSBQcmVzZW50YXRpb25Db250cm9sVHlwZS5TdGF0dXMpIHtcbiAgICAgIGxldCBzdGF0dXNOYW1lID1cbiAgICAgICAgdGhpcy5hcHBNb2RlbC5zdGF0dXNlcy5maW5kKFxuICAgICAgICAgIChzKSA9PiBzLmlkID09PSB0aGlzLmZpbGxEYXRhPy5tZXRhZGF0YS5zdGF0dXNJZFxuICAgICAgICApPy5uYW1lIHx8ICdubyBzdGF0dXMgbmFtZSc7XG5cbiAgICAgIGZvcm1seUNvbmZpZy5kZWZhdWx0VmFsdWUgPSBzdGF0dXNOYW1lO1xuICAgICAgZm9ybWx5Q29uZmlnLnR5cGUgPSAnZm9ybWx5LXBhcmFncmFwaCc7XG4gICAgICBmb3JtbHlDb25maWcuY2xhc3NOYW1lID0gJ2NvbXBvbmVudC10ZXh0LWZpZWxkJztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICBjb250cm9sLnR5cGUgPT0gUHJlc2VudGF0aW9uQ29udHJvbFR5cGUuRmx1eENvbXBvbmVudCAmJlxuICAgICAgICB0aGlzLmNvbnRyb2xJZHNXaXRoVmFsdWVzICYmXG4gICAgICAgIGNvbnRyb2wuY29sbGVjdGlvbkNvbnRyb2xJZGVudGlmaWVyXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgZmlsbFZhbHVlID1cbiAgICAgICAgICB0aGlzLmNvbnRyb2xJZHNXaXRoVmFsdWVzW2NvbnRyb2wuY29sbGVjdGlvbkNvbnRyb2xJZGVudGlmaWVyXTtcbiAgICAgICAgaWYgKGZpbGxWYWx1ZSkge1xuICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGZpbGxWYWx1ZSkge1xuICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAgIGZvcm1seUNvbmZpZy5kZWZhdWx0VmFsdWUgPSBmaWxsVmFsdWUgPyAnJmNoZWNrOycgOiAnJmNyb3NzOyc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBpZiAoZmlsbFZhbHVlPy5uYW1lKSB7XG4gICAgICAgICAgICAgICAgZm9ybWx5Q29uZmlnLmRlZmF1bHRWYWx1ZSA9IGZpbGxWYWx1ZS5uYW1lO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvcm1seUNvbmZpZy5kZWZhdWx0VmFsdWUgPSBmaWxsVmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9ybWx5Q29uZmlnLmlkID0gY29udHJvbC5pZGVudGlmaWVyO1xuICAgIGZvcm1seUNvbmZpZy5wcm9wcyFbJ2lzRGlzcGxheU1vZGUnXSA9IHRydWU7XG4gICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnY29sbGVjdGlvbkNvbnRyb2xJZGVudGlmaWVyJ10gPVxuICAgICAgY29udHJvbC5jb2xsZWN0aW9uQ29udHJvbElkZW50aWZpZXI7XG4gICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnbGFiZWwnXSA9IHRyYW5zbGF0ZWRUaXRsZTtcbiAgICBmb3JtbHlDb25maWcucHJvcHMhWydsYW5nSXNvJ10gPSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbztcblxuICAgIHRoaXMuZm9ybWx5UHJlc2VudGF0aW9uRmllbGRzLnB1c2goZm9ybWx5Q29uZmlnKTtcblxuICAgIHJldHVybiBmb3JtbHlDb25maWc7XG4gIH1cblxuICBhc3luYyBidWlsZEFwaU1ldGhvZEZvcm1GaWVsZEFzeW5jKFxuICAgIHN0ZXA6IFN0ZXBEYXRhIHwgdW5kZWZpbmVkLFxuICAgIGNvbnRyb2w6IFByZXNlbnRhdGlvbkNvbnRyb2xcbiAgKTogUHJvbWlzZTxGb3JtbHlGaWVsZENvbmZpZz4ge1xuICAgIGxldCBmb3JtbHlDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnID0geyBwcm9wczoge30gfTtcblxuICAgIGZvcm1seUNvbmZpZy50eXBlID0gJ2Zvcm1seS1wYXJhZ3JhcGgnO1xuICAgIGZvcm1seUNvbmZpZy5jbGFzc05hbWUgPSAnY29tcG9uZW50LXRleHQtZmllbGQnO1xuICAgIGZvcm1seUNvbmZpZy5wcm9wcyFbJ2Rlc2lnbiddID0gdGhpcy5hcHBNb2RlbC5nZW5lcmF0ZWRDc3M7XG5cbiAgICB2YXIgdHJhbnNsYXRlZFRpdGxlID1cbiAgICAgIGNvbnRyb2wudHJhbnNsYXRpb25zLmZpbmQoKGQpID0+IGQubGFuZ3VhZ2VJc28gPT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28pXG4gICAgICAgID8udmFsdWUgPz9cbiAgICAgIGNvbnRyb2wudGl0bGUgPz9cbiAgICAgICcnO1xuXG4gICAgZm9ybWx5Q29uZmlnLmlkID0gY29udHJvbC5pZGVudGlmaWVyO1xuICAgIGZvcm1seUNvbmZpZy5wcm9wcyFbJ2lzRGlzcGxheU1vZGUnXSA9IHRydWU7XG4gICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnYXBpTWV0aG9kSWQnXSA9IGNvbnRyb2wuYXBpTWV0aG9kSWQ7XG4gICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnYXBpTWV0aG9kRmllbGRJZCddID0gY29udHJvbC5hcGlNZXRob2RGaWVsZElkO1xuICAgIGZvcm1seUNvbmZpZy5wcm9wcyFbJ2xhYmVsJ10gPSB0cmFuc2xhdGVkVGl0bGU7XG5cbiAgICBpZiAoY29udHJvbC5hcGlNZXRob2RGaWVsZElkKSB7XG4gICAgICBjb25zdCB2YWwgPSB0aGlzLmZpbmRJbkFwaUNhbGxzUmVzcG9uc2VzKGNvbnRyb2wuYXBpTWV0aG9kRmllbGRJZCk7XG4gICAgICBmb3JtbHlDb25maWcuZGVmYXVsdFZhbHVlID0gdmFsO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybWx5UHJlc2VudGF0aW9uRmllbGRzLnB1c2goZm9ybWx5Q29uZmlnKTtcblxuICAgIHJldHVybiBmb3JtbHlDb25maWc7XG4gIH1cblxuICBwcml2YXRlIGF0dGFjaFRvRGVwZW5kZW50RGljdGlvbmFyeUlmTmVjZXNzYXJ5KFxuICAgIGRlcGVuZGVudERpY3Rpb25hcnk6IERlcGVuZGVudERpY3Rpb25hcnlEYXRhLFxuICAgIGZvcm1seUNvbmZpZzogRm9ybWx5RmllbGRDb25maWdcbiAgKSB7XG4gICAgLy8gSGFuZGxlIGRpY3Rpb25hcnkgZGVwZW5kZW5jaWVzXG4gICAgaWYgKFxuICAgICAgZGVwZW5kZW50RGljdGlvbmFyeSAmJlxuICAgICAgZGVwZW5kZW50RGljdGlvbmFyeS5kaWN0aW9uYXJ5Q29udHJvbElkZW50aWZpZXJcbiAgICApIHtcbiAgICAgIGNvbnN0IHBhcmVudEtleSA9IGRlcGVuZGVudERpY3Rpb25hcnkuZGljdGlvbmFyeUNvbnRyb2xJZGVudGlmaWVyO1xuICAgICAgY29uc3QgZGVwZW5kZW50VmFsdWVJZHMgPSBkZXBlbmRlbnREaWN0aW9uYXJ5LmRlcGVuZGVudFZhbHVlSWRzIHx8IFtdO1xuXG4gICAgICBmb3JtbHlDb25maWcuZXhwcmVzc2lvbnMgPSB7XG4gICAgICAgIGhpZGU6IChmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHtcbiAgICAgICAgICBjb25zdCBzaG91bGRTaG93ID0gdGhpcy5zaG91bGRTaG93RGVwZW5kZW50RmllbGQoXG4gICAgICAgICAgICBwYXJlbnRLZXksXG4gICAgICAgICAgICBkZXBlbmRlbnRWYWx1ZUlkcyxcbiAgICAgICAgICAgIHRoaXMubW9kZWxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiAhc2hvdWxkU2hvdztcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2hUb1ZhbHVlQ2hhbmdlcyhjb250cm9sSWQ6IHN0cmluZywgb3B0aW9uczogRm9ybWx5RmllbGRDb25maWcpIHtcbiAgICBvcHRpb25zLnByb3BzIVsnb25TZWxlY3RlZFZhbHVlQ2hhbmdlZCddID0gYXN5bmMgKHZhbDogYW55KSA9PiB7XG4gICAgICB0aGlzLm1vZGVsW2NvbnRyb2xJZF0gPSB2YWw7XG4gICAgICB2YXIgcmVmZXJlbmNlRGljdGlvbmFyaWVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgdGhpcy5kaWN0aW9uYXJ5TWFwLnZhbHVlcygpXG4gICAgICApLmZpbHRlcigoZCkgPT4gZC5yZWZlcmVuY2VJZCA9PSB2YWwuZGljdGlvbmFyeUlkKTtcbiAgICAgIGlmIChyZWZlcmVuY2VEaWN0aW9uYXJpZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5yZW1vdmVSZWZlcmVuY2VGaWVsZHMob3B0aW9ucyk7XG5cbiAgICAgICAgdmFyIHJlZmVyZW5jZURpY3Rpb25hcmllc1dpdGhGaWx0ZXJlZFZhbHVlcyA9XG4gICAgICAgICAgdGhpcy5jcmVhdGVSZWZlcmVuY2VEaWN0aW9uYXJpZXNGcm9tU2VsZWN0ZWRWYWx1ZShcbiAgICAgICAgICAgIHJlZmVyZW5jZURpY3Rpb25hcmllcyxcbiAgICAgICAgICAgIHZhbFxuICAgICAgICAgICk7XG4gICAgICAgIGNvbnN0IHBhcmVudFNwZWNpZmljRGF0YSA9IG9wdGlvbnMucHJvcHM/LltcbiAgICAgICAgICAnc3BlY2lmaWNEYXRhJ1xuICAgICAgICBdIGFzIERpY3Rpb25hcnlDb250cm9sRGF0YTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGRSZWZlcmVuY2VEaWN0aW9uYXJ5RmllbGRzSWZOZWNlc3NhcnkoXG4gICAgICAgICAgcmVmZXJlbmNlRGljdGlvbmFyaWVzV2l0aEZpbHRlcmVkVmFsdWVzLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgb3B0aW9ucy50eXBlLFxuICAgICAgICAgIHBhcmVudFNwZWNpZmljRGF0YT8ucmVsYXRlZERpY3Rpb25hcmllc1RyYW5zbGF0aW9ucyB8fCBbXVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVSZWZlcmVuY2VGaWVsZHMob3B0aW9ucyk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1seUNvbmZpZygpO1xuICAgIH07XG4gIH1cblxuICBjcmVhdGVSZWZlcmVuY2VEaWN0aW9uYXJpZXNGcm9tU2VsZWN0ZWRWYWx1ZShcbiAgICBhbGxEaWN0aW9uYXJpZXM6IERpY3Rpb25hcnlEdG9bXSxcbiAgICBzZWxlY3RlZFZhbHVlOiBhbnlcbiAgKTogRGljdGlvbmFyeUR0b1tdIHtcbiAgICBjb25zdCBuZXdEaWN0aW9uYXJpZXM6IERpY3Rpb25hcnlEdG9bXSA9IFtdO1xuXG4gICAgYWxsRGljdGlvbmFyaWVzLmZvckVhY2goKGRpY3Rpb25hcnkpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkVmFsdWVzID1cbiAgICAgICAgZGljdGlvbmFyeS52YWx1ZXM/LmZpbHRlcigodmFsdWUpID0+XG4gICAgICAgICAgdmFsdWUucmVmZXJlbmNlVmFsdWVzLnNvbWUoXG4gICAgICAgICAgICAocmVmVmFsdWUpID0+IHJlZlZhbHVlLmlkID09PSBzZWxlY3RlZFZhbHVlLmlkXG4gICAgICAgICAgKVxuICAgICAgICApIHx8IFtdO1xuXG4gICAgICBpZiAoZmlsdGVyZWRWYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBuZXdEaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5RHRvID0ge1xuICAgICAgICAgIC4uLmRpY3Rpb25hcnksXG4gICAgICAgICAgdmFsdWVzOiBmaWx0ZXJlZFZhbHVlcyxcbiAgICAgICAgfTtcblxuICAgICAgICBuZXdEaWN0aW9uYXJpZXMucHVzaChuZXdEaWN0aW9uYXJ5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBuZXdEaWN0aW9uYXJpZXM7XG4gIH1cblxuICBzaG91bGRTaG93RGVwZW5kZW50RmllbGQoXG4gICAgcGFyZW50S2V5OiBzdHJpbmcsXG4gICAgZGVwZW5kZW50VmFsdWVJZHM6IG51bWJlcltdLFxuICAgIG1vZGVsOiBhbnkgPSB7fVxuICApOiBib29sZWFuIHtcbiAgICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWUgb2YgdGhlIHBhcmVudCBkaWN0aW9uYXJ5IGNvbnRyb2xcbiAgICBjb25zdCBwYXJlbnRWYWx1ZSA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUoXG4gICAgICBtb2RlbCxcbiAgICAgIHBhcmVudEtleVxuICAgICkgYXMgRGljdGlvbmFyeVZhbHVlO1xuXG4gICAgY29uc3QgaWRWYWx1ZSA9IHBhcmVudFZhbHVlPy5pZFxuICAgICAgPyBwYXJlbnRWYWx1ZS5pZFxuICAgICAgOiAocGFyZW50VmFsdWUgYXMgdW5rbm93biBhcyBudW1iZXIpO1xuICAgIC8vIENoZWNrIGlmIHRoZSBwYXJlbnQgdmFsdWUgaXMgaW4gdGhlIGRlcGVuZGVudFZhbHVlSWRzXG4gICAgaWYgKHBhcmVudFZhbHVlICYmIGRlcGVuZGVudFZhbHVlSWRzLmluY2x1ZGVzKGlkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0TmVzdGVkVmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICBsZXQgdmFsdWUgPSBvYmo7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgdmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgc3VibWl0KCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdGb3JtIERhdGE6JywgdGhpcy5mb3JtLnZhbHVlKTtcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdGb3JtIGRhdGEgaGFzIHZhbGlkYXRpb24gZXJyb3JzLicpO1xuICAgICAgdGhpcy5zY3JvbGxUb0Vycm9yU2VydmljZS5zY3JvbGxUb0ZpcnN0RXJyb3IodGhpcy5mb3JtKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHVibGljIG1ldGhvZCB0byB0cmlnZ2VyIHNjcm9sbCB0byBmaXJzdCBlcnJvciAtIGNhbiBiZSBjYWxsZWQgZnJvbSBvdGhlciBjb21wb25lbnRzXG4gICAqL1xuICBwdWJsaWMgc2Nyb2xsVG9GaXJzdFZhbGlkYXRpb25FcnJvcigpOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbFRvRXJyb3JTZXJ2aWNlLnNjcm9sbFRvRmlyc3RFcnJvcih0aGlzLmZvcm0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBtZXRob2QgdG8gc2Nyb2xsIHRvIGEgc3BlY2lmaWMgZmllbGQgYnkgbmFtZVxuICAgKi9cbiAgcHVibGljIHNjcm9sbFRvRmllbGQoZmllbGROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbFRvRXJyb3JTZXJ2aWNlLnNjcm9sbFRvRmllbGQoZmllbGROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWJ1ZyBtZXRob2QgdG8gaGVscCB0cm91Ymxlc2hvb3Qgc2Nyb2xsIGlzc3Vlc1xuICAgKi9cbiAgcHVibGljIGRlYnVnRm9ybUVsZW1lbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsVG9FcnJvclNlcnZpY2UuZGVidWdMb2dGb3JtRWxlbWVudHMoKTtcbiAgfVxuXG4gIGFzeW5jIGNvbnN0cnVjdERpY3Rpb25hcnkoXG4gICAgY29udHJvbDogQ29udHJvbERhdGEsXG4gICAgb3B0aW9uczogRm9ybWx5RmllbGRDb25maWdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3BlY2lmaWNEYXRhID0gY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGNvbXBvbmVudCB0eXBlIGJhc2VkIG9uIHNldHRpbmdzXG4gICAgaWYgKHNwZWNpZmljRGF0YS5zaG93QXNDaGVja2JveGVzID09PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLnR5cGUgPSAnZm9ybWx5LWNoZWNrYm94ZXMnO1xuICAgIH0gZWxzZSBpZiAoc3BlY2lmaWNEYXRhLnNob3dBc1JhZGlvQnV0dG9uc0xpc3QgPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMudHlwZSA9ICdmb3JtbHktcmFkaW8nO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLnR5cGUgPSAnZm9ybWx5LWRpY3Rpb25hcnktZHJvcGRvd24tdHJlZSc7XG4gICAgfVxuXG4gICAgb3B0aW9ucy5wcm9wcyFbJ3NwZWNpZmljRGF0YSddID0gc3BlY2lmaWNEYXRhO1xuXG4gICAgY29uc3QgZGljdGlvbmFyeVV1aWQgPSBzcGVjaWZpY0RhdGEuZGljdGlvbmFyeVVVSUQ7XG5cbiAgICBpZiAoZGljdGlvbmFyeVV1aWQpIHtcbiAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB0aGlzLmRpY3Rpb25hcnlNYXAuZ2V0KGRpY3Rpb25hcnlVdWlkKTtcbiAgICAgIGlmIChkaWN0aW9uYXJ5KSB7XG4gICAgICAgIGlmIChkaWN0aW9uYXJ5LnJlZmVyZW5jZUlkKSB7XG4gICAgICAgICAgb3B0aW9ucy5wcm9wcyFbJ2RpY3Rpb25hcnlJZCddID0gZGljdGlvbmFyeVV1aWQ7XG4gICAgICAgICAgdGhpcy5jb25zdHJ1Y3REaWN0aW9uYXJ5V2l0aFJlZmVyZW5jZXMoXG4gICAgICAgICAgICBkaWN0aW9uYXJ5LFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIHNwZWNpZmljRGF0YVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5hdHRhY2hUb1ZhbHVlQ2hhbmdlcyhjb250cm9sLmlkZW50aWZpZXIsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFR5cGUgaXMgYWxyZWFkeSBzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbWV0aG9kXG4gICAgICAgICAgb3B0aW9ucy5wcm9wcyFbJ2RpY3Rpb25hcnlJZCddID0gZGljdGlvbmFyeVV1aWQ7XG4gICAgICAgICAgdGhpcy5jb25zdHJ1Y3REaWN0aW9uYXJ5V2l0aFJlZmVyZW5jZXMoXG4gICAgICAgICAgICBkaWN0aW9uYXJ5LFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIHNwZWNpZmljRGF0YVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5hdHRhY2hUb1ZhbHVlQ2hhbmdlcyhjb250cm9sLmlkZW50aWZpZXIsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oYERpY3Rpb25hcnkgbm90IGZvdW5kIGZvciBVVUlEICR7ZGljdGlvbmFyeVV1aWR9YCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFVVSUQgbm90IGZvdW5kIGZvciBkaWN0aW9uYXJ5IElEICR7c3BlY2lmaWNEYXRhLmRpY3Rpb25hcnlJZH1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluZERpY3Rpb25hcnlWYWx1ZU9iamVjdChcbiAgICBkaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5RHRvIHwgdW5kZWZpbmVkLFxuICAgIHZhbHVlOiBhbnlcbiAgKTogRGljdGlvbmFyeVZhbHVlRHRvIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoXG4gICAgICAhZGljdGlvbmFyeSB8fFxuICAgICAgIWRpY3Rpb25hcnkudmFsdWVzIHx8XG4gICAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWU/LmlkICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBkaWN0aW9uYXJ5LnZhbHVlcy5maW5kKCh2KSA9PiB2LmlkID09PSB2YWx1ZS5pZCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHZhbHVlSWQgPSBOdW1iZXIodmFsdWUpO1xuICAgICAgaWYgKCFpc05hTih2YWx1ZUlkKSkge1xuICAgICAgICByZXR1cm4gZGljdGlvbmFyeS52YWx1ZXMuZmluZCgodikgPT4gdi5pZCA9PT0gdmFsdWVJZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVSZWZlcmVuY2VGaWVsZHMoXG4gICAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdLFxuICAgIHJvb3RDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnW10gPSB0aGlzLmZvcm1seUNvbmZpZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWZpZWxkcykgcmV0dXJuO1xuICAgIGNvbnN0IGZpZWxkc1RvUHJvY2VzcyA9IFsuLi5maWVsZHNdO1xuXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHNUb1Byb2Nlc3MpIHtcbiAgICAgIGNvbnN0IGZpZWxkS2V5ID0gZmllbGQua2V5IGFzIHN0cmluZztcbiAgICAgIGlmIChcbiAgICAgICAgZmllbGRLZXkgJiZcbiAgICAgICAgZmllbGQucHJvcHM/LlsnZGljdGlvbmFyeUlkJ10gJiZcbiAgICAgICAgZmllbGQucHJvcHM/Llsnc3BlY2lmaWNEYXRhJ11cbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChmaWVsZEtleSk7XG4gICAgICAgIGNvbnN0IHNwZWNpZmljRGF0YSA9IGZpZWxkLnByb3BzW1xuICAgICAgICAgICdzcGVjaWZpY0RhdGEnXG4gICAgICAgIF0gYXMgRGljdGlvbmFyeUNvbnRyb2xEYXRhO1xuICAgICAgICBjb25zdCBkaWN0aW9uYXJ5VXVpZCA9IGZpZWxkLnByb3BzWydkaWN0aW9uYXJ5SWQnXSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IG1haW5EaWN0aW9uYXJ5ID0gdGhpcy5kaWN0aW9uYXJ5TWFwLmdldChkaWN0aW9uYXJ5VXVpZCk7XG5cbiAgICAgICAgbGV0IHZhbHVlVG9Vc2U6IGFueSA9IG51bGw7XG5cbiAgICAgICAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZSAhPT0gbnVsbCAmJiBjb250cm9sLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YWx1ZVRvVXNlID0gY29udHJvbC52YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBmaWVsZC5kZWZhdWx0VmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgICBmaWVsZC5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZVRvVXNlID0gZmllbGQuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHRoaXMubW9kZWwgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsW2ZpZWxkS2V5XSAhPT0gbnVsbCAmJlxuICAgICAgICAgIHRoaXMubW9kZWxbZmllbGRLZXldICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFsdWVUb1VzZSA9IHRoaXMubW9kZWxbZmllbGRLZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlbGVjdGVkVmFsdWVPYmplY3Q6IERpY3Rpb25hcnlWYWx1ZUR0byB8IHVuZGVmaW5lZCB8IG51bGwgPSBudWxsO1xuICAgICAgICBpZiAodmFsdWVUb1VzZSAhPT0gbnVsbCAmJiBtYWluRGljdGlvbmFyeT8uaWQgIT0gbnVsbCkge1xuICAgICAgICAgIHNlbGVjdGVkVmFsdWVPYmplY3QgPSB0aGlzLmZpbmREaWN0aW9uYXJ5VmFsdWVPYmplY3QoXG4gICAgICAgICAgICBtYWluRGljdGlvbmFyeSxcbiAgICAgICAgICAgIHZhbHVlVG9Vc2VcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmllbGRDb25maWdJblRyZWUgPSB0aGlzLmZpbmRGaWVsZEJ5S2V5KHJvb3RDb25maWcsIGZpZWxkS2V5KTtcbiAgICAgICAgaWYgKCFmaWVsZENvbmZpZ0luVHJlZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW1vdmVSZWZlcmVuY2VGaWVsZHMoZmllbGRDb25maWdJblRyZWUpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBzZWxlY3RlZFZhbHVlT2JqZWN0ICYmXG4gICAgICAgICAgc2VsZWN0ZWRWYWx1ZU9iamVjdC5pZCAhPSBudWxsICYmXG4gICAgICAgICAgbWFpbkRpY3Rpb25hcnk/LmlkICE9IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgcG90ZW50aWFsUmVmZXJlbmNlRGljdGlvbmFyaWVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgIHRoaXMuZGljdGlvbmFyeU1hcC52YWx1ZXMoKVxuICAgICAgICAgICkuZmlsdGVyKChkaWN0KSA9PiBkaWN0LnJlZmVyZW5jZUlkID09PSBtYWluRGljdGlvbmFyeS5pZCk7XG5cbiAgICAgICAgICBpZiAocG90ZW50aWFsUmVmZXJlbmNlRGljdGlvbmFyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZURpY3Rpb25hcmllc1RvU2hvdyA9XG4gICAgICAgICAgICAgIHRoaXMuY3JlYXRlUmVmZXJlbmNlRGljdGlvbmFyaWVzRnJvbVNlbGVjdGVkVmFsdWUoXG4gICAgICAgICAgICAgICAgcG90ZW50aWFsUmVmZXJlbmNlRGljdGlvbmFyaWVzLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWVPYmplY3RcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHJlZmVyZW5jZURpY3Rpb25hcmllc1RvU2hvdy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkUmVmZXJlbmNlRGljdGlvbmFyeUZpZWxkc0lmTmVjZXNzYXJ5KFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZURpY3Rpb25hcmllc1RvU2hvdyxcbiAgICAgICAgICAgICAgICBmaWVsZENvbmZpZ0luVHJlZSxcbiAgICAgICAgICAgICAgICBmaWVsZENvbmZpZ0luVHJlZS50eXBlLFxuICAgICAgICAgICAgICAgIHNwZWNpZmljRGF0YT8ucmVsYXRlZERpY3Rpb25hcmllc1RyYW5zbGF0aW9ucyB8fCBbXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmllbGQuZmllbGRHcm91cCAmJiBmaWVsZC5maWVsZEdyb3VwLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUmVmZXJlbmNlRmllbGRzKGZpZWxkLmZpZWxkR3JvdXAsIHJvb3RDb25maWcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBmaWVsZHMgPT09IHRoaXMuZm9ybWx5Q29uZmlnIHx8XG4gICAgICBmaWVsZHMgPT09IHRoaXMuZm9ybWx5Q29uZmlnWzBdPy5maWVsZEdyb3VwXG4gICAgKSB7XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1seUNvbmZpZygpO1xuICAgICAgdGhpcy5mb3JtbHlDb25maWdVcGRhdGVkLmVtaXQoKTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdERpY3Rpb25hcnlXaXRoUmVmZXJlbmNlcyhcbiAgICBkaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5RHRvLFxuICAgIG9wdGlvbnM6IEZvcm1seUZpZWxkQ29uZmlnLFxuICAgIGRpY3Rpb25hcnlDb250cm9sRGF0YTogRGljdGlvbmFyeUNvbnRyb2xEYXRhXG4gICkge1xuICAgIGlmIChvcHRpb25zLnByb3BzKSB7XG4gICAgICB2YXIgY3VycmVudExhbmd1YWdlSWQgPSBVdGlscy5maW5kTGFuZ3VhZ2VJZEJ5SXNvKFxuICAgICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyxcbiAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICk7XG5cbiAgICAgIC8vIFBhc3MgcHJlbG9hZGVkIGRpY3Rpb25hcnkgZGF0YSB0byBmb3JtbHkgY29tcG9uZW50XG4gICAgICBvcHRpb25zLnByb3BzWydkaWN0aW9uYXJ5RGF0YSddID0gZGljdGlvbmFyeTtcbiAgICAgIG9wdGlvbnMucHJvcHNbJ2xhbmd1YWdlcyddID0gdGhpcy5hdmFpbGFibGVMYW5ndWFnZXM7XG4gICAgICBvcHRpb25zLnByb3BzWydwcmVsb2FkZWREaWN0aW9uYXJpZXMnXSA9IHRoaXMuZGljdGlvbmFyeU1hcDtcbiAgICAgIG9wdGlvbnMucHJvcHNbJ3VzZVByZWxvYWRlZERhdGEnXSA9IHRydWU7XG5cbiAgICAgIG9wdGlvbnMucHJvcHMub3B0aW9ucyA9IGRpY3Rpb25hcnkudmFsdWVzPy5tYXAoKHZhbHVlKSA9PiAoe1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGxhYmVsOlxuICAgICAgICAgIFV0aWxzLmZpbmRWYWx1ZVRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgdmFsdWUudmFsdWVUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgICBjdXJyZW50TGFuZ3VhZ2VJZFxuICAgICAgICAgICkgfHwgdmFsdWUubmFtZSxcbiAgICAgICAgY3VycmVudExhbmd1YWdlSXNvOiB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgICAgcmVsYXRlZERpY3Rpb25hcmllc1RyYW5zbGF0aW9uczpcbiAgICAgICAgICBkaWN0aW9uYXJ5Q29udHJvbERhdGEucmVsYXRlZERpY3Rpb25hcmllc1RyYW5zbGF0aW9ucyxcbiAgICAgIH0pKTtcblxuICAgICAgb3B0aW9ucy5wcm9wc1snc2VsZWN0ZWRSZWxhdGVkRGljdGlvbmFyaWVzJ10gPVxuICAgICAgICBkaWN0aW9uYXJ5Q29udHJvbERhdGEuc2VsZWN0ZWRSZWxhdGVkRGljdGlvbmFyaWVzIHx8IFtdO1xuICAgICAgb3B0aW9ucy5wcm9wc1snYWxsb3dNdWx0aXBsZVNlbGVjdGlvbiddID1cbiAgICAgICAgZGljdGlvbmFyeUNvbnRyb2xEYXRhLmFsbG93TXVsdGlwbGVTZWxlY3Rpb24gfHwgZmFsc2U7XG5cbiAgICAgIGxldCBpbml0aWFsVmFsdWVPYmplY3Q6IERpY3Rpb25hcnlWYWx1ZSB8IG51bGwgPSBudWxsO1xuICAgICAgY29uc3QgY29udHJvbEtleSA9IG9wdGlvbnMua2V5IGFzIHN0cmluZztcbiAgICAgIGNvbnN0IGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZCA9XG4gICAgICAgIGRpY3Rpb25hcnlDb250cm9sRGF0YS5kaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWQ7XG4gICAgICBpZiAoXG4gICAgICAgICEodGhpcy5tb2RlbCAmJiB0aGlzLm1vZGVsW2NvbnRyb2xLZXldICE9IG51bGwpICYmXG4gICAgICAgIGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZCAhPSBudWxsXG4gICAgICApIHtcbiAgICAgICAgaW5pdGlhbFZhbHVlT2JqZWN0ID0gdGhpcy5maW5kQW5kTWFwRGVmYXVsdFZhbHVlKFxuICAgICAgICAgIGRpY3Rpb25hcnksXG4gICAgICAgICAgZGljdGlvbmFyeURlZmF1bHRWYWx1ZUlkXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbnMuZGVmYXVsdFZhbHVlID0gaW5pdGlhbFZhbHVlT2JqZWN0O1xuXG4gICAgICAvLyBQYXNzIGRlZmF1bHQgdmFsdWUgSUQgdG8gZm9ybWx5IGNvbXBvbmVudFxuICAgICAgb3B0aW9ucy5wcm9wc1snZGljdGlvbmFyeURlZmF1bHRWYWx1ZUlkJ10gPSBkaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWQ7XG5cbiAgICAgIGNvbnN0IGNvbnRyb2xJZCA9IG9wdGlvbnMua2V5O1xuICAgICAgaWYgKHRoaXMuZmlsbERhdGEgJiYgdGhpcy5maWxsRGF0YS5mbHV4KSB7XG4gICAgICAgIGZvciAoY29uc3Qgc3RlcCBvZiB0aGlzLmZpbGxEYXRhLmZsdXgpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc3RlcC5zZWN0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHNlY3Rpb24uY29udHJvbHMuZmluZChcbiAgICAgICAgICAgICAgKGN0cmw6IHtcbiAgICAgICAgICAgICAgICBjb250cm9sSWQ6IHN0cmluZyB8IG51bWJlciB8IChzdHJpbmcgfCBudW1iZXIpW10gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH0pID0+IGN0cmwuY29udHJvbElkID09PSBjb250cm9sSWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoY29udHJvbCAmJiBjb250cm9sLmZpbGxWYWx1ZSAmJiBjb250cm9sLmZpbGxWYWx1ZS5uYW1lKSB7XG4gICAgICAgICAgICAgIG9wdGlvbnMucHJvcHNbJ3ZhbHVlJ10gPSBjb250cm9sLmZpbGxWYWx1ZS5uYW1lO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGVGb3JtbHlDb25maWcoKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFJlZmVyZW5jZURpY3Rpb25hcnlGaWVsZHNJZk5lY2Vzc2FyeShcbiAgICByZWZlcnJlbmNlZERpY3Rpb25hcmllczogYW55W10sXG4gICAgcGFyZW50RGljdGlvbmFyeUZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyxcbiAgICB0eXBlOiBhbnksXG4gICAgcmVsYXRlZERpY3Rpb25hcmllc1RyYW5zbGF0aW9uczogRGljdGlvbmFyeUxhYmVsSW5mb1tdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChyZWZlcnJlbmNlZERpY3Rpb25hcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZFJlbGF0ZWREaWN0aW9uYXJpZXMgPVxuICAgICAgICBwYXJlbnREaWN0aW9uYXJ5RmllbGQucHJvcHM/Llsnc2VsZWN0ZWRSZWxhdGVkRGljdGlvbmFyaWVzJ10gfHwgW107XG5cbiAgICAgIGNvbnN0IHNlbGVjdGVkRGljdGlvbmFyaWVzID0gcmVmZXJyZW5jZWREaWN0aW9uYXJpZXMuZmlsdGVyKChkaWN0KSA9PlxuICAgICAgICBzZWxlY3RlZFJlbGF0ZWREaWN0aW9uYXJpZXMuaW5jbHVkZXMoZGljdC51dWlkKVxuICAgICAgKTtcblxuICAgICAgc2VsZWN0ZWREaWN0aW9uYXJpZXMuZm9yRWFjaCgocmVmZXJlbmNlRGljdGlvbmFyeSkgPT4ge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VEaWN0aW9uYXJ5VXVpZCA9IHJlZmVyZW5jZURpY3Rpb25hcnkudXVpZDtcblxuICAgICAgICBjb25zdCBjb21wb25lbnRPbmx5Rm9yQ29uZmlnID0gdGhpcy5mbHV4XG4gICAgICAgICAgLmZsYXRNYXAoKHMpID0+IHMuc2VjdGlvbnMpXG4gICAgICAgICAgLmZsYXRNYXAoKHNlYykgPT4gc2VjLmNvbnRyb2xzKVxuICAgICAgICAgIC5maW5kKFxuICAgICAgICAgICAgKGN0cmwpID0+XG4gICAgICAgICAgICAgIGN0cmw/LnNwZWNpZmljQ29udHJvbERhdGE/LmRpY3Rpb25hcnlVVUlEID09PVxuICAgICAgICAgICAgICByZWZlcmVuY2VEaWN0aW9uYXJ5VXVpZCAmJiBjdHJsPy5pc09ubHlGb3JDb25maWcgPT09IHRydWVcbiAgICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG5ld0ZpZWxkS2V5ID1cbiAgICAgICAgICBjb21wb25lbnRPbmx5Rm9yQ29uZmlnPy5pZGVudGlmaWVyID8/XG4gICAgICAgICAgYGV4dHJhXyR7cmVmZXJlbmNlRGljdGlvbmFyeVV1aWR9YDtcblxuICAgICAgICBsZXQgcmVmZXJlbmNlRGljdGlvbmFyeUxhYmVsID0gcmVmZXJlbmNlRGljdGlvbmFyeS5uYW1lO1xuXG4gICAgICAgIGNvbnN0IHNwZWNpZmljVHJhbnNsYXRpb25WYWx1ZSA9IHJlbGF0ZWREaWN0aW9uYXJpZXNUcmFuc2xhdGlvbnNcbiAgICAgICAgICAuZmluZCgoZCkgPT4gZC5kaWN0aW9uYXJ5VVVJRCA9PSByZWZlcmVuY2VEaWN0aW9uYXJ5VXVpZClcbiAgICAgICAgICA/LnRyYW5zbGF0aW9ucz8uZmluZChcbiAgICAgICAgICAgICh0KSA9PiB0Lmxhbmd1YWdlSXNvID09IHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICAgKT8udmFsdWU7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNwZWNpZmljVHJhbnNsYXRpb25WYWx1ZSAmJlxuICAgICAgICAgIHNwZWNpZmljVHJhbnNsYXRpb25WYWx1ZS50cmltKCkgIT09ICcnXG4gICAgICAgICkge1xuICAgICAgICAgIHJlZmVyZW5jZURpY3Rpb25hcnlMYWJlbCA9IHNwZWNpZmljVHJhbnNsYXRpb25WYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZlcmVuY2VEaWN0aW9uYXJ5TGFiZWwgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50TGFuZ3VhZ2VJZCA9IFV0aWxzLmZpbmRMYW5ndWFnZUlkQnlJc28oXG4gICAgICAgICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMsXG4gICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBuZXdGaWVsZDogRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICAgICAga2V5OiBuZXdGaWVsZEtleSxcbiAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBsYWJlbDogcmVmZXJlbmNlRGljdGlvbmFyeUxhYmVsLFxuICAgICAgICAgICAgZGVzaWduOiB0aGlzLmRlc2lnbixcbiAgICAgICAgICAgIGRpY3Rpb25hcnlJZDogcmVmZXJlbmNlRGljdGlvbmFyeVV1aWQsXG4gICAgICAgICAgICBkaWN0aW9uYXJ5RGF0YTogcmVmZXJlbmNlRGljdGlvbmFyeSxcbiAgICAgICAgICAgIGxhbmd1YWdlczogdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMsXG4gICAgICAgICAgICBwcmVsb2FkZWREaWN0aW9uYXJpZXM6IHRoaXMuZGljdGlvbmFyeU1hcCxcbiAgICAgICAgICAgIHVzZVByZWxvYWRlZERhdGE6IHRydWUsXG4gICAgICAgICAgICBjdXJyZW50TGFuZ3VhZ2VJc286IHRoaXMuY3VycmVudExhbmd1YWdlSXNvLFxuICAgICAgICAgICAgY3VycmVudExhbmd1YWdlSWQ6IGN1cnJlbnRMYW5ndWFnZUlkLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgIHN0eWxlOiB0aGlzLnN0eWxlT2JqZWN0VG9TdHJpbmdFeGNlcHRCYWNrZ3JvdW5kKFxuICAgICAgICAgICAgICAgIHRoaXMuZGVzaWduW2AuZm9udC1saXN0YF0gfHwge31cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcHRpb25zOiByZWZlcmVuY2VEaWN0aW9uYXJ5LnZhbHVlcz8ubWFwKCh2YWx1ZTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgIGxhYmVsOlxuICAgICAgICAgICAgICAgIFV0aWxzLmZpbmRWYWx1ZVRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgICAgICAgdmFsdWUudmFsdWVUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50TGFuZ3VhZ2VJZFxuICAgICAgICAgICAgICAgICkgfHwgdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgY3VycmVudExhbmd1YWdlSXNvOiB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChyZWZlcmVuY2VEaWN0aW9uYXJ5LmRlZmF1bHRWYWx1ZUlkKSB7XG4gICAgICAgICAgY29uc3QgZGVmYXVsdFZhbCA9IHRoaXMuZmluZEFuZE1hcERlZmF1bHRWYWx1ZShcbiAgICAgICAgICAgIHJlZmVyZW5jZURpY3Rpb25hcnksXG4gICAgICAgICAgICByZWZlcmVuY2VEaWN0aW9uYXJ5LmRlZmF1bHRWYWx1ZUlkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZGVmYXVsdFZhbCkge1xuICAgICAgICAgICAgbmV3RmllbGQuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRGaWVsZEdyb3VwID0gcGFyZW50RGljdGlvbmFyeUZpZWxkLnBhcmVudFxuICAgICAgICAgID8gcGFyZW50RGljdGlvbmFyeUZpZWxkLnBhcmVudC5maWVsZEdyb3VwXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICBpZiAocGFyZW50RmllbGRHcm91cCkge1xuICAgICAgICAgIGNvbnN0IHBhcmVudEluZGV4ID0gcGFyZW50RmllbGRHcm91cC5maW5kSW5kZXgoXG4gICAgICAgICAgICAoZmllbGQpID0+IGZpZWxkLmtleSA9PT0gcGFyZW50RGljdGlvbmFyeUZpZWxkLmtleVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHBhcmVudEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgZW5kSW5kZXggPSB0aGlzLmZpbmRMYXN0Q2hpbGRJbmRleChcbiAgICAgICAgICAgICAgcGFyZW50RmllbGRHcm91cCxcbiAgICAgICAgICAgICAgcGFyZW50SW5kZXhcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2VUb0FkZCA9IHRoaXMuZ2V0RXhpc3RpbmdQZXJjZW50YWdlKFxuICAgICAgICAgICAgICBwYXJlbnRGaWVsZEdyb3VwLFxuICAgICAgICAgICAgICBwYXJlbnRJbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG5ld0ZpZWxkLmNsYXNzTmFtZSA9IHBlcmNlbnRhZ2VUb0FkZCA9PT0gMFxuICAgICAgICAgICAgICA/IHBhcmVudERpY3Rpb25hcnlGaWVsZC5jbGFzc05hbWVcbiAgICAgICAgICAgICAgOiB0aGlzLmdldFBlcmNlbnRhZ2VDbGFzc05hbWUocGVyY2VudGFnZVRvQWRkKTtcblxuICAgICAgICAgICAgcGFyZW50RmllbGRHcm91cC5zcGxpY2UoZW5kSW5kZXggKyAxLCAwLCBuZXdGaWVsZCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZVRvQWRkID1cbiAgICAgICAgICAgICAgdHlwZSA9PT0gJ3JhZGlvJyA/IGAgY29tcG9uZW50LXJhZGlvYCA6IGAgY29tcG9uZW50LWRhdGFgO1xuICAgICAgICAgICAgbmV3RmllbGQuY2xhc3NOYW1lICs9IGNsYXNzTmFtZVRvQWRkO1xuICAgICAgICAgICAgdGhpcy5hdHRhY2hUb1ZhbHVlQ2hhbmdlcyhuZXdGaWVsZEtleSwgbmV3RmllbGQpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGb3JtbHlDb25maWcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldEV4aXN0aW5nUGVyY2VudGFnZShmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10sIGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBwZXJjZW50YWdlID0gMDtcbiAgICBjb25zdCBmaWVsZCA9IGZpZWxkc1tpbmRleF07XG4gICAgY29uc3QgY2xhc3NOYW1lID0gZmllbGQuY2xhc3NOYW1lO1xuICAgIGlmIChmaWVsZC50eXBlPy50b1N0cmluZygpICE9PSBTdGVwQ29udHJvbFR5cGUuTmV3Um93LnRvU3RyaW5nKCkpIHtcbiAgICAgIGlmIChjbGFzc05hbWUgJiYgY2xhc3NOYW1lLnN0YXJ0c1dpdGgoJ3BlcmNlbnRhZ2Utd2lkdGgtJykpIHtcbiAgICAgICAgcGVyY2VudGFnZSA9XG4gICAgICAgICAgKHBhcnNlSW50KGNsYXNzTmFtZS5yZXBsYWNlKCdwZXJjZW50YWdlLXdpZHRoLScsICcnKSwgMTApICogMTAwKSAvIDEyO1xuICAgICAgfSBlbHNlIGlmIChjbGFzc05hbWUgJiYgY2xhc3NOYW1lLnN0YXJ0c1dpdGgoJ3BpeGVsLXdpZHRoLScpKSB7XG4gICAgICAgIGNvbnN0IHBpeGVscyA9IHBhcnNlSW50KGNsYXNzTmFtZS5yZXBsYWNlKCdwaXhlbC13aWR0aC0nLCAnJyksIDEwKTtcbiAgICAgICAgcGVyY2VudGFnZSA9IChwaXhlbHMgLyAxMDAwKSAqIDEwMDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBlcmNlbnRhZ2U7XG4gIH1cblxuICBjYWxjdWxhdGVSZW1haW5pbmdQZXJjZW50YWdlRm9yUmFuZ2UoXG4gICAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdLFxuICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICBlbmRJbmRleDogbnVtYmVyXG4gICk6IG51bWJlciB7XG4gICAgbGV0IHJlbWFpbmluZ1BlcmNlbnRhZ2UgPSAxMDA7XG5cbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgaSsrKSB7XG4gICAgICBjb25zdCBwZXJjZW50YWdlID0gdGhpcy5nZXRFeGlzdGluZ1BlcmNlbnRhZ2UoZmllbGRzLCBpKTtcbiAgICAgIHJlbWFpbmluZ1BlcmNlbnRhZ2UgLT0gcGVyY2VudGFnZTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgubWF4KHJlbWFpbmluZ1BlcmNlbnRhZ2UsIDApO1xuICB9XG5cbiAgcmVtb3ZlUmVmZXJlbmNlRmllbGRzKGN1cnJlbnRGb3JtbHlGaWVsZENvbmZpZzogRm9ybWx5RmllbGRDb25maWcpIHtcbiAgICBjb25zdCByZWZlcnJlZEluRGljdGlvbmFyaWVzVVVJZHMgPVxuICAgICAgY3VycmVudEZvcm1seUZpZWxkQ29uZmlnLnByb3BzPy5bJ2RpY3Rpb25hcnlEYXRhJ11cbiAgICAgICAgPy5yZWZlcnJlZEluRGljdGlvbmFyaWVzVVVJZHM7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZWZlcnJlZEluRGljdGlvbmFyaWVzVVVJZHMpKSB7XG4gICAgICBjb25zdCBwYXJlbnRGaWVsZEdyb3VwID0gY3VycmVudEZvcm1seUZpZWxkQ29uZmlnLnBhcmVudFxuICAgICAgICA/IGN1cnJlbnRGb3JtbHlGaWVsZENvbmZpZy5wYXJlbnQuZmllbGRHcm91cFxuICAgICAgICA6IG51bGw7XG4gICAgICBpZiAocGFyZW50RmllbGRHcm91cCkge1xuICAgICAgICBjb25zdCBwYXJlbnRJbmRleCA9IHBhcmVudEZpZWxkR3JvdXAuZmluZEluZGV4KFxuICAgICAgICAgIChmaWVsZCkgPT4gZmllbGQua2V5ID09PSBjdXJyZW50Rm9ybWx5RmllbGRDb25maWcua2V5XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHBhcmVudEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiByZWZlcnJlZEluRGljdGlvbmFyaWVzVVVJZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkVG9GaW5kID0gJ2V4dHJhXycgKyBpdGVtO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gcGFyZW50RmllbGRHcm91cC5sZW5ndGggLSAxOyBpID4gcGFyZW50SW5kZXg7IGktLSkge1xuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RmllbGRLZXkgPSBwYXJlbnRGaWVsZEdyb3VwW2ldLmtleT8udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGaWVsZEtleSAmJiBjdXJyZW50RmllbGRLZXkgPT09IGlkVG9GaW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckZvcm1Db250cm9sVmFsdWUoaWRUb0ZpbmQpO1xuICAgICAgICAgICAgICAgIHBhcmVudEZpZWxkR3JvdXAuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYWRkQ2hpbGREaWN0aW9uYXJ5RmllbGQoXG4gICAgY2hpbGREaWN0aW9uYXJ5VXVpZDogc3RyaW5nLFxuICAgIHBhcmVudERpY3Rpb25hcnlGaWVsZDogRm9ybWx5RmllbGRDb25maWcsXG4gICAgdHlwZTogYW55LFxuICAgIHJlbGF0ZWREaWN0aW9uYXJpZXNUcmFuc2xhdGlvbnM6IERpY3Rpb25hcnlMYWJlbEluZm9bXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoY2hpbGREaWN0aW9uYXJ5VXVpZCkge1xuICAgICAgY29uc3QgY2hpbGREaWN0aW9uYXJ5ID0gdGhpcy5kaWN0aW9uYXJ5TWFwLmdldChjaGlsZERpY3Rpb25hcnlVdWlkKTtcbiAgICAgIGlmIChjaGlsZERpY3Rpb25hcnkpIHtcbiAgICAgICAgbGV0IGNoaWxkRGljdGlvbmFyeUxhYmVsID0gY2hpbGREaWN0aW9uYXJ5Lm5hbWU7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID1cbiAgICAgICAgICByZWxhdGVkRGljdGlvbmFyaWVzVHJhbnNsYXRpb25zXG4gICAgICAgICAgICAuZmluZCgoZCkgPT4gZC5kaWN0aW9uYXJ5VVVJRCA9PSBjaGlsZERpY3Rpb25hcnlVdWlkKVxuICAgICAgICAgICAgPy50cmFuc2xhdGlvbnMuZmluZCgodCkgPT4gdC5sYW5ndWFnZUlzbyA9PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbylcbiAgICAgICAgICAgID8udmFsdWUgfHwgJyc7XG4gICAgICAgIGlmICh0cmFuc2xhdGlvbikge1xuICAgICAgICAgIGNoaWxkRGljdGlvbmFyeUxhYmVsID0gdHJhbnNsYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3RmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgIGtleTogYCR7cGFyZW50RGljdGlvbmFyeUZpZWxkLmtleX1fY2hpbGRfJHtjaGlsZERpY3Rpb25hcnlVdWlkfWAsXG4gICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgbGFiZWw6IGNoaWxkRGljdGlvbmFyeUxhYmVsLFxuICAgICAgICAgICAgZGljdGlvbmFyeURhdGE6IGNoaWxkRGljdGlvbmFyeSxcbiAgICAgICAgICAgIGxhbmd1YWdlczogdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMsXG4gICAgICAgICAgICBwcmVsb2FkZWREaWN0aW9uYXJpZXM6IHRoaXMuZGljdGlvbmFyeU1hcCxcbiAgICAgICAgICAgIG9wdGlvbnM6IGNoaWxkRGljdGlvbmFyeS52YWx1ZXM/Lm1hcCgodmFsdWUpID0+ICh7XG4gICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS5pZCxcbiAgICAgICAgICAgICAgbGFiZWw6IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgc3R5bGU6IHRoaXMuc3R5bGVPYmplY3RUb1N0cmluZ0V4Y2VwdEJhY2tncm91bmQoXG4gICAgICAgICAgICAgICAgdGhpcy5kZXNpZ25bYC5mb250LWxpc3RgXSB8fCB7fVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhvb2tzOiB7XG4gICAgICAgICAgICBvbkluaXQ6IChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgICAgICAgICAgICB0aGlzLmZpZWxkVW5zdWJzY3JpYmVTdWJqZWN0cy5wdXNoKHVuc3Vic2NyaWJlJCk7XG5cbiAgICAgICAgICAgICAgZmllbGQuZm9ybUNvbnRyb2w/LnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh1bnN1YnNjcmliZSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKHNlbGVjdGVkVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gY2hpbGREaWN0aW9uYXJ5LnZhbHVlcz8uZmluZChcbiAgICAgICAgICAgICAgICAgICAgKHZhbCkgPT4gdmFsLmlkID09PSBzZWxlY3RlZFZhbHVlXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uICYmIHNlbGVjdGVkT3B0aW9uLmNoaWxkRGljdGlvbmFyeVVVSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRDaGlsZERpY3Rpb25hcnlGaWVsZChcbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZE9wdGlvbi5jaGlsZERpY3Rpb25hcnlVVUlELFxuICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZERpY3Rpb25hcmllc1RyYW5zbGF0aW9uc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZEZpZWxkcyhmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybWx5Q29uZmlnKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgZmllbGQuaG9va3MhLm9uRGVzdHJveSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB1bnN1YnNjcmliZSQubmV4dCgpO1xuICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHBhcmVudEZpZWxkR3JvdXAgPSBwYXJlbnREaWN0aW9uYXJ5RmllbGQucGFyZW50XG4gICAgICAgICAgPyBwYXJlbnREaWN0aW9uYXJ5RmllbGQucGFyZW50LmZpZWxkR3JvdXBcbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGlmIChwYXJlbnRGaWVsZEdyb3VwKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50SW5kZXggPSBwYXJlbnRGaWVsZEdyb3VwLmZpbmRJbmRleChcbiAgICAgICAgICAgIChmaWVsZCkgPT4gZmllbGQua2V5ID09PSBwYXJlbnREaWN0aW9uYXJ5RmllbGQua2V5XG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAocGFyZW50SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMuZmluZExhc3RDaGlsZEluZGV4KFxuICAgICAgICAgICAgICBwYXJlbnRGaWVsZEdyb3VwLFxuICAgICAgICAgICAgICBwYXJlbnRJbmRleFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgcGVyY2VudGFnZVRvQWRkID0gdGhpcy5nZXRFeGlzdGluZ1BlcmNlbnRhZ2UoXG4gICAgICAgICAgICAgIHBhcmVudEZpZWxkR3JvdXAsXG4gICAgICAgICAgICAgIHBhcmVudEluZGV4XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbmV3RmllbGQuY2xhc3NOYW1lID0gdGhpcy5nZXRQZXJjZW50YWdlQ2xhc3NOYW1lKHBlcmNlbnRhZ2VUb0FkZCk7XG4gICAgICAgICAgICBwYXJlbnRGaWVsZEdyb3VwLnNwbGljZShlbmRJbmRleCArIDEsIDAsIG5ld0ZpZWxkKTtcblxuICAgICAgICAgICAgY29uc3QgY2xhc3NOYW1lVG9BZGQgPVxuICAgICAgICAgICAgICB0eXBlID09PSAncmFkaW8nID8gYCBjb21wb25lbnQtcmFkaW9gIDogYCBjb21wb25lbnQtZGF0YWA7XG4gICAgICAgICAgICBuZXdGaWVsZC5jbGFzc05hbWUgKz0gY2xhc3NOYW1lVG9BZGQ7XG4gICAgICAgICAgICAvL3RoaXMuYXR0YWNoVG9WYWx1ZUNoYW5nZXMobmV3RmllbGRLZXksIG5ld0ZpZWxkKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybWx5Q29uZmlnKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYENoaWxkIGRpY3Rpb25hcnkgbm90IGZvdW5kIGZvciBVVUlEICR7Y2hpbGREaWN0aW9uYXJ5VXVpZH1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Db21wbGV0aW9uKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdPcmlnaW4gZm9ybSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgdGhpcy5jb21wbGV0aW9uRXZlbnQuZW1pdCgpO1xuICB9XG5cbiAgZmluZExhc3RDaGlsZEluZGV4KGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSwgcGFyZW50SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgcGFyZW50S2V5UHJlZml4ID0gYCR7ZmllbGRzW3BhcmVudEluZGV4XS5rZXl9X2A7XG4gICAgbGV0IGxhc3RJbmRleCA9IHBhcmVudEluZGV4O1xuXG4gICAgZm9yIChsZXQgaSA9IHBhcmVudEluZGV4ICsgMTsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGZpZWxkc1tpXS5rZXk/LnRvU3RyaW5nKCkuc3RhcnRzV2l0aChwYXJlbnRLZXlQcmVmaXgpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IGk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdEluZGV4O1xuICB9XG5cbiAgZmluZEZpZWxkQnlLZXkoXG4gICAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdLFxuICAgIGtleTogc3RyaW5nXG4gICk6IEZvcm1seUZpZWxkQ29uZmlnIHwgbnVsbCB7XG4gICAgaWYgKCFmaWVsZHMpIHJldHVybiBudWxsO1xuICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3N0ZXBwZXInICYmIGZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgICAgY29uc3QgZm91bmRJblN0ZXBwZXIgPSB0aGlzLmZpbmRGaWVsZEJ5S2V5KGZpZWxkLmZpZWxkR3JvdXAsIGtleSk7XG4gICAgICAgIGlmIChmb3VuZEluU3RlcHBlcikgcmV0dXJuIGZvdW5kSW5TdGVwcGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmllbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmRGaWVsZEJ5S2V5KGZpZWxkLmZpZWxkR3JvdXAsIGtleSk7XG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlbW92ZUNoaWxkRmllbGRzKHBhcmVudEZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykge1xuICAgIGNvbnN0IHBhcmVudEZpZWxkR3JvdXAgPSBwYXJlbnRGaWVsZC5wYXJlbnRcbiAgICAgID8gcGFyZW50RmllbGQucGFyZW50LmZpZWxkR3JvdXBcbiAgICAgIDogbnVsbDtcblxuICAgIGlmIChwYXJlbnRGaWVsZEdyb3VwKSB7XG4gICAgICBjb25zdCBwYXJlbnRJbmRleCA9IHBhcmVudEZpZWxkR3JvdXAuZmluZEluZGV4KFxuICAgICAgICAoZmllbGQpID0+IGZpZWxkLmtleSA9PT0gcGFyZW50RmllbGQua2V5XG4gICAgICApO1xuXG4gICAgICBpZiAocGFyZW50SW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudEtleVByZWZpeCA9IGAke3BhcmVudEZpZWxkLmtleX1fY2hpbGRfYDtcblxuICAgICAgICAvLyBSZW1vdmUgb25seSB0aGUgcmVsZXZhbnQgY2hpbGQgZmllbGRzXG4gICAgICAgIGZvciAobGV0IGkgPSBwYXJlbnRGaWVsZEdyb3VwLmxlbmd0aCAtIDE7IGkgPiBwYXJlbnRJbmRleDsgaS0tKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudEZpZWxkS2V5ID0gcGFyZW50RmllbGRHcm91cFtpXS5rZXk/LnRvU3RyaW5nKCk7XG4gICAgICAgICAgaWYgKGN1cnJlbnRGaWVsZEtleSAmJiBjdXJyZW50RmllbGRLZXkuc3RhcnRzV2l0aChwYXJlbnRLZXlQcmVmaXgpKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyRm9ybUNvbnRyb2xWYWx1ZShjdXJyZW50RmllbGRLZXkpO1xuICAgICAgICAgICAgcGFyZW50RmllbGRHcm91cC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5FVzogTG9hZCBBTEwgZGljdGlvbmFyaWVzIG5lZWRlZCBmb3IgdGhpcyBhcHAgdXNpbmcgdGhlIG5ldyBhcHAtYmFzZWQgZW5kcG9pbnRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZEFsbFJlcXVpcmVkRGljdGlvbmFyaWVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5hcHBNb2RlbD8uYXBwbGljYXRpb25VdWlkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vIGFwcCBVVUlEIGF2YWlsYWJsZSBmb3IgZGljdGlvbmFyeSBsb2FkaW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuc2VydmljZS5sb2FkQXBwRGljdGlvbmFyaWVzKFxuICAgICAgICAgIHRoaXMuYXBwTW9kZWwuYXBwbGljYXRpb25VdWlkLFxuICAgICAgICAgIEVudmlyb25tZW50VHlwZS5Db25maWdcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgaWYgKCFyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ+KdjCBCYWNrZW5kIGZhaWxlZCB0byBsb2FkIGRpY3Rpb25hcmllczonLFxuICAgICAgICAgIHJlc3BvbnNlLmVycm9yc1xuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNpbXBsZSBhc3NpZ25tZW50IC0gQUxMIGRpY3Rpb25hcmllcyBhbmQgZGVwZW5kZW5jaWVzIGFscmVhZHkgbG9hZGVkIGJ5IGJhY2tlbmRcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlLmRpY3Rpb25hcmllcykuZm9yRWFjaCgoW3V1aWQsIGRpY3RdKSA9PiB7XG4gICAgICAgIHRoaXMuZGljdGlvbmFyeU1hcC5zZXQodXVpZCwgZGljdCk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcign4p2MIEZhaWxlZCB0byBsb2FkIGFwcCBkaWN0aW9uYXJpZXM6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRm9ybUNvbnRyb2xWYWx1ZShmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgY29uc3Qga2V5cyA9IGZpZWxkS2V5LnNwbGl0KCcuJyk7XG4gICAgbGV0IGNvbnRyb2wgPSB0aGlzLmZvcm07XG4gICAgbGV0IG1vZGVsID0gdGhpcy5tb2RlbDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGNvbnRyb2wgPSBjb250cm9sLmdldChrZXlzW2ldKSBhcyBGb3JtR3JvdXA7XG4gICAgICBtb2RlbCA9IG1vZGVsW2tleXNbaV1dO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmFsS2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdO1xuICAgIGlmIChjb250cm9sICYmIGNvbnRyb2wuZ2V0KGZpbmFsS2V5KSkge1xuICAgICAgY29udHJvbC5yZW1vdmVDb250cm9sKGZpbmFsS2V5KTtcbiAgICB9XG5cbiAgICBpZiAobW9kZWwgJiYgbW9kZWxbZmluYWxLZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSBtb2RlbFtmaW5hbEtleV07XG4gICAgfVxuICB9XG5cbiAgZmluZEZpZWxkKFxuICAgIGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSxcbiAgICBrZXk6IHN0cmluZ1xuICApOiBGb3JtbHlGaWVsZENvbmZpZyB8IG51bGwge1xuICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICBpZiAoZmllbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgICAgY29uc3QgbmVzdGVkRmllbGQgPSB0aGlzLmZpbmRGaWVsZChmaWVsZC5maWVsZEdyb3VwLCBrZXkpO1xuICAgICAgICBpZiAobmVzdGVkRmllbGQpIHtcbiAgICAgICAgICByZXR1cm4gbmVzdGVkRmllbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIHBvcHVsYXRlTW9kZWxXaXRoRmlsbERhdGEoZmlsbERhdGE6IGFueSk6IHZvaWQge1xuICAgIGlmIChmaWxsRGF0YSkge1xuICAgICAgbGV0IGF1eE1vZGVsID0gTW9kZWxQb3B1bGF0aW9uSGVscGVyLnBvcHVsYXRlTW9kZWxXaXRoRmlsbERhdGEoXG4gICAgICAgIGZpbGxEYXRhLFxuICAgICAgICB0aGlzLmZsdXgsXG4gICAgICAgIHRoaXMuZGljdGlvbmFyeU1hcCxcbiAgICAgICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXNcbiAgICAgICk7XG4gICAgICB0aGlzLm1vZGVsID0geyAuLi5hdXhNb2RlbCB9O1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQW5kTWFwRGVmYXVsdFZhbHVlKFxuICAgIGRpY3Rpb25hcnk6IERpY3Rpb25hcnlEdG8gfCB1bmRlZmluZWQsXG4gICAgZGVmYXVsdFZhbHVlSWQ6IG51bWJlclxuICApOiBEaWN0aW9uYXJ5VmFsdWUgfCBudWxsIHtcbiAgICByZXR1cm4gTW9kZWxQb3B1bGF0aW9uSGVscGVyLmZpbmRBbmRNYXBEZWZhdWx0VmFsdWUoXG4gICAgICBkaWN0aW9uYXJ5LFxuICAgICAgZGVmYXVsdFZhbHVlSWQsXG4gICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlc1xuICAgICk7XG4gIH1cblxuICB1cGRhdGVGb3JtbHlDb25maWcoKSB7XG4gICAgdGhpcy5mb3JtbHlDb25maWcgPSBbLi4udGhpcy5mb3JtbHlDb25maWddO1xuICB9XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUZyb21BbGxGaWVsZHMoKSB7XG4gICAgZm9yIChjb25zdCBzdWJqZWN0IG9mIHRoaXMuZmllbGRVbnN1YnNjcmliZVN1YmplY3RzKSB7XG4gICAgICBzdWJqZWN0Lm5leHQoKTtcbiAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICB9XG4gICAgdGhpcy5maWVsZFVuc3Vic2NyaWJlU3ViamVjdHMgPSBbXTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tQWxsRmllbGRzKCk7XG4gICAgaWYgKHRoaXMuY29sbGVjdG9ySGFuZGxlclN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIHRoaXMuY29sbGVjdG9ySGFuZGxlclN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWN0aW9uU3RlcFN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIHRoaXMuYWN0aW9uU3RlcFN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWN0aW9uU3RlcEhhbmRsZXIpIHtcbiAgICAgIHRoaXMuYWN0aW9uU3RlcEhhbmRsZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdEJ1dHRvbnMoYnV0dG9uc0NvbmZpZzogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFidXR0b25zQ29uZmlnIHx8IGJ1dHRvbnNDb25maWcubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiBidXR0b25zQ29uZmlnLm1hcCgoYnV0dG9uKSA9PiAoe1xuICAgICAgdHlwZTogYnV0dG9uLnZhbHVlLnRvTG93ZXJDYXNlKCksXG4gICAgICBsYWJlbDogYnV0dG9uLnRyYW5zbGF0aW9ucz8uW3RoaXMuY3VycmVudExhbmd1YWdlSXNvXSB8fCBidXR0b24udmFsdWUsXG4gICAgICBzdHlsZUtleTogYC5idXR0b24tJHtidXR0b24udmFsdWUudG9Mb3dlckNhc2UoKX1gLFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgc3R5bGVPYmplY3RUb1N0cmluZ0V4Y2VwdEJhY2tncm91bmQoc3R5bGVPYmo6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHN0eWxlT2JqKVxuICAgICAgLmZpbHRlcigoW2tleSwgdmFsdWVdKSA9PiBrZXkgIT09ICdiYWNrZ3JvdW5kLWNvbG9yJylcbiAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fTogJHt2YWx1ZX1gKVxuICAgICAgLmpvaW4oJzsgJyk7XG4gIH1cblxuICB2YWxpZGF0ZU1ldGhvZEFwaShkYXRhOiBBcGlWYWxpZGF0ZVJlcXVlc3QpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBpZiAoZGF0YS5hcGlJZCA9PT0gdW5kZWZpbmVkIHx8IGRhdGEuYXBwSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvbkRhdGFTZXJ2aWNlLnZhbGlkYXRlQXBpKGRhdGEpLnBpcGUoXG4gICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdBUEkgdmFsaWRhdGlvbiByZXNwb25zZTonLCByZXNwb25zZSk7XG4gICAgICAgIHJldHVybiAhIXJlc3BvbnNlO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB2YWxpZGF0aW5nICcgKyBkYXRhLmRhdGEsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaWMgbWV0aG9kIHRvIGNsZWFyIHRoZSBzYXZpbmcgYWZ0ZXIgYWN0aW9ucyBzdGF0ZVxuICAgKiBDYWxsZWQgYnkgc3RlcHBlciBjb21wb25lbnQgYWZ0ZXIgc2F2ZUFwcERhdGFTdGVwIGNvbXBsZXRlc1xuICAgKi9cbiAgcHVibGljIGNsZWFyU2F2aW5nQWZ0ZXJBY3Rpb25zU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNTYXZpbmdBZnRlckFjdGlvbnMpIHtcbiAgICAgIHRoaXMuaXNTYXZpbmdBZnRlckFjdGlvbnMgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cbiAgbG9hZGluZ01lc3NhZ2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xufVxuIiwiPGRpdiAqbmdJZj1cImlzTG9hZGluZ1wiIGNsYXNzPVwibG9hZGluZy1vdmVybGF5XCI+XG4gIDxtYXQtc3Bpbm5lcj48L21hdC1zcGlubmVyPlxuPC9kaXY+XG48ZGl2IFtoaWRkZW5dPVwiaXNMb2FkaW5nXCI+XG4gIDxkaXYgKm5nSWY9XCJzaG93TGFuZ3VhZ2VTZWxlY3RvclwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJyaWdodC1hbGlnbmVkXCI+XG4gICAgPGJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZmxhZ3NcIiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJtLXItNVwiPlxuICAgICAgPGltZ1xuICAgICAgICBbc3JjXT1cInJldHVybkZMYWcoY3VycmVudExhbmd1YWdlSXNvKVwiXG4gICAgICAgIGNsYXNzPVwicm91bmRlZC1jaXJjbGUgb2JqZWN0LWNvdmVyIGljb24tMjBcIlxuICAgICAgLz5cbiAgICA8L2J1dHRvbj5cbiAgICA8bWF0LW1lbnUgI2ZsYWdzPVwibWF0TWVudVwiIGNsYXNzPVwiY2FyZFdpdGhTaGFkb3dcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAqbmdGb3I9XCJsZXQgbGFuZyBvZiBhcHBsaWNhdGlvbkxhbmd1YWdlcygpXCJcbiAgICAgICAgKGNsaWNrKT1cImNoYW5nZUxhbmd1YWdlKGxhbmcuaXNvKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgW3NyY109XCJyZXR1cm5GTGFnKGxhbmcuaXNvKVwiXG4gICAgICAgICAgICBjbGFzcz1cInJvdW5kZWQtY2lyY2xlIG9iamVjdC1jb3ZlciBpY29uLTIwXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LXN1YnRpdGxlLTEgZi1zLTE0XCI+e3sgbGFuZy5uYW1lIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LW1lbnU+XG4gIDwvZGl2PlxuXG4gIDxiciAvPlxuICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250YWluZXJcIj5cbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAobmdTdWJtaXQpPVwic3VibWl0KClcIj5cbiAgICAgIDxmb3JtbHktZm9ybVxuICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgICBbZmllbGRzXT1cImZvcm1seUNvbmZpZ1wiXG4gICAgICAgIFtvcHRpb25zXT1cIm9wdGlvbnNcIlxuICAgICAgICBbZm9ybV09XCJmb3JtXCJcbiAgICAgID48L2Zvcm1seS1mb3JtPlxuICAgIDwvZm9ybT5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
2528
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JpZ2luLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9vcmlnaW4tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL29yaWdpbi1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBSU4sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxXQUFXLEdBR1osTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQ0wsT0FBTyxFQUNQLGNBQWMsRUFDZCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFlBQVksRUFDWixTQUFTLEVBQ1QsVUFBVSxFQUNWLEVBQUUsRUFDRixTQUFTLEVBRVQsR0FBRyxFQUNILFlBQVksR0FDYixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU8vQyxPQUFPLEVBS0wsUUFBUSxFQUNSLGFBQWEsRUFDYixlQUFlLEVBQ2Ysc0JBQXNCLEdBR3ZCLE1BQU0sc0JBQXNCLENBQUM7QUFLOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBWSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVVqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQVFsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUEwRSx1QkFBdUIsRUFBeUIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3SixP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QUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztZQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDOytHQWp3R1Usc0JBQXNCO21HQUF0QixzQkFBc0IsbXBCQUNuQixXQUFXLHFFQ3JGM0IsZ3VDQXdDQTs7NEZENENhLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxpQkFBaUI7dWZBS0EsWUFBWTtzQkFBdEMsWUFBWTt1QkFBQyxXQUFXO2dCQUdoQixlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQWNJLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEZvcm1seUZpZWxkLFxuICBGb3JtbHlGaWVsZENvbmZpZyxcbiAgRm9ybWx5Rm9ybU9wdGlvbnMsXG59IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHtcbiAgU3ViamVjdCxcbiAgZmlyc3RWYWx1ZUZyb20sXG4gIHN0YXJ0V2l0aCxcbiAgcGFpcndpc2UsXG4gIGRlYm91bmNlVGltZSxcbiAgc3dpdGNoTWFwLFxuICBjYXRjaEVycm9yLFxuICBvZixcbiAgdGFrZVVudGlsLFxuICBPYnNlcnZhYmxlLFxuICBtYXAsXG4gIFN1YnNjcmlwdGlvbixcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMYWJlbEtleXMgfSBmcm9tICcuL2VudW1zL2xhYmVsLmtleXMnO1xuaW1wb3J0IHsgQXBpVmFsaWRhdGVSZXF1ZXN0IH0gZnJvbSAnLi9tb2RlbHMvYXBwbGljYXRpb24ubW9kZWwnO1xuaW1wb3J0IHtcbiAgRGljdGlvbmFyeUR0byxcbiAgRGljdGlvbmFyeVZhbHVlLFxuICBEaWN0aW9uYXJ5VmFsdWVEdG8sXG59IGZyb20gJy4vbW9kZWxzL2RpY3Rpb25hcnkubW9kZWwnO1xuaW1wb3J0IHtcbiAgRm9ybU1vZGVsLFxuICBEaXNwbGF5TW9kZWwsXG4gIEdlbmVyYWxEYXRhTW9kZWwsXG4gIFN0ZXBzU2V0dGluZ3MsXG4gIEZsdXhUeXBlLFxuICBEaW1lbnNpb25UeXBlLFxuICBTdGVwQ29udHJvbFR5cGUsXG4gIE1hbnVhbElucHV0Q29udHJvbFR5cGUsXG4gIFByZXNlbnRhdGlvblBhcmFncmFwaENvbnRyb2wsXG4gIERpY3Rpb25hcnlDb250cm9sRGF0YSxcbn0gZnJvbSAnLi9tb2RlbHMvZm9ybXMubW9kZWwnO1xuaW1wb3J0IHsgTGFiZWxJbmZvLCBUcmFuc2xhdGlvbkluZm8gfSBmcm9tICcuL21vZGVscy9sYWJlbC1pbmZvLm1vZGVsJztcbmltcG9ydCB7IExhYmVsIH0gZnJvbSAnLi9tb2RlbHMvbGFiZWwubW9kZWwnO1xuaW1wb3J0IHsgTGFuZ3VhZ2UgfSBmcm9tICcuL21vZGVscy9sYW5ndWFnZS5tb2RlbCc7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5TGFiZWxJbmZvIH0gZnJvbSAnLi9vdGhlcnMvZGljdGlvbmFyeS1sYWJlbC1pbmZvJztcbmltcG9ydCB7IEVudmlyb25tZW50VHlwZSB9IGZyb20gJy4vb3RoZXJzL2Vudmlyb25tZW50LXR5cGUnO1xuaW1wb3J0IHsgQ3NzUnVsZXMsIFV0aWxzIH0gZnJvbSAnLi9vdGhlcnMvdXRpbHMnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25EYXRhU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYXBwbGljYXRpb25EYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGFiZWxTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9sYWJlbHMuc2VydmljZSc7XG5pbXBvcnQgeyBQcm94eVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3Byb3h5LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGljdGlvbmFyeVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2RpY3Rpb25hcnkuc2VydmljZSc7XG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2xhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3JpZ2luRm9ybUF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9vcmlnaW4tZm9ybS1hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybXNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9mb3Jtcy5zZXJ2aWNlJztcbmltcG9ydCB7IElucHV0Q29uZmlnIH0gZnJvbSAnLi9vcmlnaW4tZm9ybS1jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4vb3RoZXJzL2NvbmZpZy1zZXJ2aWNlJztcbmltcG9ydCB7IE1vZGVsUG9wdWxhdGlvbkhlbHBlciB9IGZyb20gJy4vbW9kZWwtcG9wdWxhdGlvbi5oZWxwZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIE9wZXJhdGlvblJlc3VsdCxcbiAgT3JpZ2luRm9ybVNpZ25hbHJIYW5kbGVyU2VydmljZSxcbn0gZnJvbSAnLi9zZXJ2aWNlcy9vcmlnaW4tZm9ybS1zaWduYWxyLWhhbmRsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBY3Rpb25TdGVwSGFuZGxlciB9IGZyb20gJy4vYWN0aW9uLXN0ZXAtaGFuZGxlcic7XG5pbXBvcnQgeyBTY3JvbGxUb0Vycm9yU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvc2Nyb2xsLXRvLWVycm9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUNzc0hlbHBlciB9IGZyb20gJy4vZm9ybS1jc3MuaGVscGVyJztcbmltcG9ydCB7IEJhc2VDb250cm9sLCBDb250cm9sRGF0YSwgRGVwZW5kZW50RGljdGlvbmFyeURhdGEsIFByZXNlbnRhdGlvbkNvbnRyb2wsIFByZXNlbnRhdGlvbkNvbnRyb2xUeXBlLCBTZWN0aW9uRGF0YSwgU3RlcERhdGEgfSBmcm9tICcuL21vZGVscy9mbHV4Lm1vZGVsJztcbmltcG9ydCB7IEZMQUdfSUNPTlMgfSBmcm9tICcuL2ZsYWctaWNvbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtb3JpZ2luLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vb3JpZ2luLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vcmlnaW4tZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDb2xsZWN0b3JGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkcmVuKEZvcm1seUZpZWxkKSBmb3JtbHlGaWVsZHM6IFF1ZXJ5TGlzdDxGb3JtbHlGaWVsZD47XG4gIFxuICAvL3RoZXNlIGFyZSBzcGVjaWZpYyB0byB0aGUgbGliXG4gIEBJbnB1dCgpIGNvbmZpZ0NvbXBvbmVudDogSW5wdXRDb25maWcgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGNvbmZpZ1V1aWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGN1cnJlbnRTdGVwSWQ6IHN0cmluZztcbiAgLy9lbmQgc3BlY2lmaWMgdG8gbGliXG5cbiAgQElucHV0KCkgYXBwTW9kZWw6IEZvcm1Nb2RlbDtcbiAgQElucHV0KCkgc2lnbkJhc2VVcmw6IHN0cmluZztcbiAgQElucHV0KCkgY3VycmVudExhbmd1YWdlSXNvOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZpbGxEYXRhOiBhbnk7XG4gIEBJbnB1dCgpIGluaXRGbG93VmFsdWVzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGVudjogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93RGlzcGxheU1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0xhbmd1YWdlU2VsZWN0b3I6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBpc0RlbW9Nb2RlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzRGVidWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYXBwRGF0YVV1aWQ6IHN0cmluZztcbiAgQElucHV0KCkgYmxvY2tQcmV2aW91c1N0ZXA6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRhdGFVcmxJZDogc3RyaW5nO1xuICBASW5wdXQoKSBub0J1dHRvbnNJblZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBmbHV4OiBTdGVwRGF0YVtdO1xuICBwcml2YXRlIGRpc3BsYXk6IERpc3BsYXlNb2RlbDtcbiAgcHJpdmF0ZSBkZXNpZ246IENzc1J1bGVzO1xuICBwcml2YXRlIGdlbmVyYWxEYXRhOiBHZW5lcmFsRGF0YU1vZGVsO1xuICBwcml2YXRlIGxhYmVsczogTGFiZWxbXTtcbiAgcHJpdmF0ZSBzdGVwRGljdGlvbmFyeURlcGVuZGVudElkczogc3RyaW5nW107XG4gIHByaXZhdGUgYXZhaWxhYmxlTGFuZ3VhZ2VzOiBMYW5ndWFnZVtdO1xuICBwcml2YXRlIHN0ZXBzU2V0dGluZ3M6IFN0ZXBzU2V0dGluZ3M7XG4gIGZvcm1seUNvbmZpZ1VwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIHZpc2libGVGaWVsZHNVcGRhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIGZvcm1seVVwZGF0ZUFuZEdvTmV4dCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBmb3JtbHlHb05leHQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpIGNvbXBsZXRpb25FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBmb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIGZvcm1seUNvbmZpZzogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xuICBmb3JtbHlBbGxTdGVwczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xuICBhY3RpdmVTdGVwID0gMDtcbiAgbW9kZWw6IGFueTtcbiAgb3B0aW9uczogRm9ybWx5Rm9ybU9wdGlvbnMgPSB7fTtcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcblxuICBkaWN0aW9uYXJ5TWFwOiBNYXA8c3RyaW5nLCBEaWN0aW9uYXJ5RHRvPiA9IG5ldyBNYXAoKTtcbiAgZGljdGlvbmFyeUlkVG9VdWlkTWFwOiBNYXA8bnVtYmVyLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuICBnZW5lcmFsRGF0YUtleXMgPSBMYWJlbEtleXMuYXBwQ29uZmlnRWRpdC5nZW5lcmFsRGF0YTtcbiAgcHJpdmF0ZSBmaWVsZFVuc3Vic2NyaWJlU3ViamVjdHM6IFN1YmplY3Q8dm9pZD5bXSA9IFtdO1xuICBwcml2YXRlIGNvbGxlY3RvckhhbmRsZXJTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgLy8gQWN0aW9uIHN0ZXAgZXhlY3V0aW9uIHN0YXRlXG4gIHByaXZhdGUgaXNFeGVjdXRpbmdBY3Rpb25zID0gZmFsc2U7XG4gIHByaXZhdGUgYWN0aW9uU3RlcFN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHVibGljIGlzU2F2aW5nQWZ0ZXJBY3Rpb25zID0gZmFsc2U7IC8vIE1ha2UgdGhpcyBwdWJsaWMgc28gc3RlcHBlciBjYW4gYWNjZXNzIGl0XG5cbiAgLy8gaWRlbnRpZmljYXRpb24ga3ljIGNvbXBvbmVudFxuICBwdWJsaWMga3ljQXBpVXJsOiBzdHJpbmc7XG4gIHB1YmxpYyBreWNPcmRlcklkOiBzdHJpbmc7XG4gIHB1YmxpYyBreWNUb2tlbjogc3RyaW5nO1xuICBwdWJsaWMga3ljRW52OiBzdHJpbmc7XG4gIHB1YmxpYyBreWNSZWRpcmVjdElkOiBzdHJpbmc7XG4gIHB1YmxpYyBreWNQaG9uZU51bWJlcjogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBreWNMYW5nSXNvOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIGt5Y1Nob3dDaXRpemVuc2hpcDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMga3ljU2Nyb2xsTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvLyBlbmQgaWRlbnRpZmljYXRpb24ga3ljIGNvbXBvbmVudFxuICBwdWJsaWMgbGFuZ3VhZ2VGbGFnczogYW55W10gPSBbXG4gICAge1xuICAgICAgbGFuZ3VhZ2U6ICdFbmdsaXNoJyxcbiAgICAgIGNvZGU6ICdlbicsXG4gICAgICB0eXBlOiAnVVMnLFxuICAgICAgaWNvbjogRkxBR19JQ09OUy5lbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhbmd1YWdlOiAnUm9tYW5hJyxcbiAgICAgIGNvZGU6ICdybycsXG4gICAgICBpY29uOiBGTEFHX0lDT05TLnJvLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFuZ3VhZ2U6ICdEZXV0c2NoJyxcbiAgICAgIGNvZGU6ICdkZScsXG4gICAgICBpY29uOiBGTEFHX0lDT05TLmRlLFxuICAgIH0sXG4gICAge1xuICAgICAgbGFuZ3VhZ2U6ICdGcmFuw6dhaXMnLFxuICAgICAgY29kZTogJ2ZyJyxcbiAgICAgIGljb246IEZMQUdfSUNPTlMuZnIsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYW5ndWFnZTogJ0l0YWxpYW5vJyxcbiAgICAgIGNvZGU6ICdpdCcsXG4gICAgICBpY29uOiBGTEFHX0lDT05TLml0LFxuICAgIH0sXG4gICAge1xuICAgICAgbGFuZ3VhZ2U6ICdFc3Bhw7FvbCcsXG4gICAgICBjb2RlOiAnZXMnLFxuICAgICAgaWNvbjogRkxBR19JQ09OUy5lcyxcbiAgICB9LFxuICBdO1xuICBmb3JtbHlDb2xsZWN0aW5nRmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdO1xuICBmb3JtbHlQcmVzZW50YXRpb25GaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW107XG4gIGNvbnRyb2xJZHNXaXRoVmFsdWVzOiBhbnk7XG4gIF9zZWxmID0gdGhpcztcblxuICBcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBEaWN0aW9uYXJ5U2VydmljZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJveHk6IFByb3h5U2VydmljZSxcbiAgICBwcml2YXRlIGxhYmVsU2VydmljZTogTGFiZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25EYXRhU2VydmljZTogQXBwbGljYXRpb25EYXRhU2VydmljZSxcbiAgICBwcml2YXRlIGxhbmdTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogT3JpZ2luRm9ybUF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybXNTZXJ2aWNlOiBGb3Jtc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcmlnaW5Gb3JtU2lnbmFsckhhbmRsZXJTZXJ2aWNlOiBPcmlnaW5Gb3JtU2lnbmFsckhhbmRsZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aW9uU3RlcEhhbmRsZXI6IEFjdGlvblN0ZXBIYW5kbGVyLFxuICAgIHByaXZhdGUgc2Nyb2xsVG9FcnJvclNlcnZpY2U6IFNjcm9sbFRvRXJyb3JTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMua3ljQXBpVXJsID0gcHJveHkuYXBpVVJMO1xuICAgIHRoaXMua3ljT3JkZXJJZCA9IHByb3h5Lm9yZGVySUQhO1xuICAgIHRoaXMua3ljVG9rZW4gPSBwcm94eS50b2tlbjtcbiAgICB0aGlzLmt5Y0VudiA9IHByb3h5LmVudjtcblxuICAgIHRoaXMua3ljTGFuZ0lzbyA9IHByb3h5LmxhbmdJc287XG4gICAgY29uc3QgaXNMb2FkaW5nU3ViID1cbiAgICAgIHRoaXMub3JpZ2luRm9ybVNpZ25hbHJIYW5kbGVyU2VydmljZS5pc0xvYWRpbmckLnN1YnNjcmliZSgobG9hZGluZykgPT4ge1xuICAgICAgICBpZiAodGhpcy5pc0xvYWRpbmcgIT09IGxvYWRpbmcpIHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGxvYWRpbmc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRoaXMuY29sbGVjdG9ySGFuZGxlclN1YnNjcmlwdGlvbnMuYWRkKGlzTG9hZGluZ1N1Yik7XG5cbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uQ29tcGxldGVkU3ViID1cbiAgICAgIHRoaXMub3JpZ2luRm9ybVNpZ25hbHJIYW5kbGVyU2VydmljZS5vcGVyYXRpb25Db21wbGV0ZWQkLnN1YnNjcmliZShcbiAgICAgICAgYXN5bmMgKHJlc3VsdDogT3BlcmF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdC5vcGVyYXRpb25JZGVudGlmaWVyID09PSAnS1lDX1BST0NFU1NJTkcnKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgJ0tZQyBQcm9jZXNzaW5nIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgKHZpYSBIYW5kbGVyIFNlcnZpY2UpOicsXG4gICAgICAgICAgICAgICAgcmVzdWx0LmRhdGFcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdC5kYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxsRGF0YSA9IEpTT04ucGFyc2UocmVzdWx0LmRhdGEuZmlsbERhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMucG9wdWxhdGVNb2RlbFdpdGhGaWxsRGF0YSh0aGlzLmZpbGxEYXRhKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuZm9ybWx5VXBkYXRlQW5kR29OZXh0LmVtaXQoe30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAnS1lDIFByb2Nlc3NpbmcgZmFpbGVkICh2aWEgSGFuZGxlciBTZXJ2aWNlKTonLFxuICAgICAgICAgICAgICAgIHJlc3VsdC5lcnJvclxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB0aGlzLmNvbGxlY3RvckhhbmRsZXJTdWJzY3JpcHRpb25zLmFkZChvcGVyYXRpb25Db21wbGV0ZWRTdWIpO1xuXG4gICAgLy8gU3Vic2NyaWJlIHRvIGFjdGlvbiBzdGVwIGV4ZWN1dGlvbiBldmVudHNcbiAgICBjb25zdCBhY3Rpb25FeGVjdXRpbmdTdWIgPVxuICAgICAgdGhpcy5hY3Rpb25TdGVwSGFuZGxlci5hY3Rpb25FeGVjdXRpbmckLnN1YnNjcmliZSgoZXhlY3V0aW5nKSA9PiB7XG4gICAgICAgIHRoaXMuaXNFeGVjdXRpbmdBY3Rpb25zID0gZXhlY3V0aW5nO1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGV4ZWN1dGluZztcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgICB0aGlzLmFjdGlvblN0ZXBTdWJzY3JpcHRpb25zLmFkZChhY3Rpb25FeGVjdXRpbmdTdWIpO1xuXG4gICAgY29uc3QgYWN0aW9uQ29tcGxldGVkU3ViID1cbiAgICAgIHRoaXMuYWN0aW9uU3RlcEhhbmRsZXIuYWN0aW9uQ29tcGxldGVkJC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygn8J+OrCBBY3Rpb24gc3RlcCBjb21wbGV0ZWQ6JywgcmVzdWx0KTtcbiAgICAgICAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCBBY3Rpb24gc3RlcCBmYWlsZWQ6JywgcmVzdWx0LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlOiBXZSBkb24ndCBhdXRvLXByb2dyZXNzIGhlcmUgYXMgaXQncyBoYW5kbGVkIGluIGV4ZWN1dGVBY3Rpb25TdGVwc0JlZm9yZU1vdmluZ1xuICAgICAgfSk7XG4gICAgdGhpcy5hY3Rpb25TdGVwU3Vic2NyaXB0aW9ucy5hZGQoYWN0aW9uQ29tcGxldGVkU3ViKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmRhdGFVcmxJZCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICB0aGlzLmFwcGxpY2F0aW9uRGF0YVNlcnZpY2UuZ2V0RGF0YVVybCh0aGlzLmRhdGFVcmxJZClcbiAgICAgICk7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMuY29uZmlnVXVpZCA9IHJlc3VsdC5hcHBJZDtcbiAgICAgICAgdGhpcy5hcHBEYXRhVXVpZCA9IHJlc3VsdC5hcHBEYXRhSWQ7XG4gICAgICAgIHRoaXMuZW52ID0gcmVzdWx0LmVudjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5hcHBEYXRhVXVpZCAmJiB0aGlzLmN1cnJlbnRTdGVwSWQpIHtcbiAgICAgIHRoaXMuYXBwbGljYXRpb25EYXRhU2VydmljZS5zZXRDdXJyZW50U3RlcChcbiAgICAgICAgdGhpcy5hcHBEYXRhVXVpZCxcbiAgICAgICAgdGhpcy5jdXJyZW50U3RlcElkXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5hcHBEYXRhVXVpZCkge1xuICAgICAgdGhpcy5hcHBEYXRhVXVpZCA9IFV0aWxzLmdlbmVyYXRlVVVJRCgpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuY29uZmlnQ29tcG9uZW50ICYmXG4gICAgICB0aGlzLmNvbmZpZ0NvbXBvbmVudC5Ub2tlbiAmJlxuICAgICAgdGhpcy5jb25maWdDb21wb25lbnQuUmVmcmVzaFRva2VuXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UudXBkYXRlQ29uZmlnRnJvbUlucHV0KHRoaXMuY29uZmlnQ29tcG9uZW50KTtcbiAgICAgIGF3YWl0IHRoaXMuYXV0aFNlcnZpY2Uuc2V0VG9rZW5zKFxuICAgICAgICB0aGlzLmNvbmZpZ0NvbXBvbmVudC5Ub2tlbixcbiAgICAgICAgdGhpcy5jb25maWdDb21wb25lbnQuUmVmcmVzaFRva2VuXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzIHx8IHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5sYW5nU2VydmljZS5nZXRMYW5ndWFnZXMoKSkudGhlbigobGlzdCkgPT4ge1xuICAgICAgICBpZiAobGlzdCAmJiBsaXN0Lml0ZW1zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMgPSBsaXN0Lml0ZW1zO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5sb2FkQXBwRGF0YSgpO1xuICAgIGlmICghdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28gJiYgdGhpcy5hcHBNb2RlbCkge1xuICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28gPSB0aGlzLmFwcE1vZGVsLmdlbmVyYWxEYXRhLmRlZmF1bHRMYW5ndWFnZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYXBwTW9kZWwpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdEFzeW5jKCk7XG4gICAgICAvLyBFeGVjdXRlIGFueSBhY3Rpb24vc3RhdHVzIHN0ZXBzIHRoYXQgYXBwZWFyIGJlZm9yZSB0aGUgZmlyc3QgdmlzaWJsZSBzdGVwXG4gICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVMZWFkaW5nQWN0aW9uU3RlcHMoKTtcbiAgICB9XG4gIH1cblxuIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoY2hhbmdlc1snY29uZmlnQ29tcG9uZW50J10gJiYgIWNoYW5nZXNbJ2NvbmZpZ0NvbXBvbmVudCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY29uZmlnQ29tcG9uZW50ICYmXG4gICAgICAgIHRoaXMuY29uZmlnQ29tcG9uZW50LlRva2VuICYmXG4gICAgICAgIHRoaXMuY29uZmlnQ29tcG9uZW50LlJlZnJlc2hUb2tlblxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY29uZmlnU2VydmljZS51cGRhdGVDb25maWdGcm9tSW5wdXQodGhpcy5jb25maWdDb21wb25lbnQpO1xuICAgICAgICBhd2FpdCB0aGlzLmF1dGhTZXJ2aWNlLnNldFRva2VucyhcbiAgICAgICAgICB0aGlzLmNvbmZpZ0NvbXBvbmVudC5Ub2tlbixcbiAgICAgICAgICB0aGlzLmNvbmZpZ0NvbXBvbmVudC5SZWZyZXNoVG9rZW5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1snY3VycmVudExhbmd1YWdlSXNvJ10gJiZcbiAgICAgICFjaGFuZ2VzWydjdXJyZW50TGFuZ3VhZ2VJc28nXS5maXJzdENoYW5nZVxuICAgICkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIXRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzKSB7XG4gICAgICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5sYW5nU2VydmljZS5nZXRMYW5ndWFnZXMoKSkudGhlbigobGlzdCkgPT4ge1xuICAgICAgICAgICAgaWYgKGxpc3QgJiYgbGlzdC5pdGVtcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyA9IGxpc3QuaXRlbXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYXBwRGF0YVV1aWQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYXBwRGF0YSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25EYXRhU2VydmljZS5nZXRTdGVwcyhcbiAgICAgICAgICAgICAgdGhpcy5hcHBEYXRhVXVpZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChhcHBEYXRhICYmIGFwcERhdGEuZmlsbERhdGEpIHtcbiAgICAgICAgICAgICAgdGhpcy5maWxsRGF0YSA9IEpTT04ucGFyc2UoYXBwRGF0YS5maWxsRGF0YSk7XG4gICAgICAgICAgICAgIHRoaXMuYmxvY2tQcmV2aW91c1N0ZXAgPSBhcHBEYXRhLmJsb2NrUHJldmlvdXNTdGVwO1xuICAgICAgICAgICAgICBpZiAodGhpcy5maWxsRGF0YS5tZXRhZGF0YS5sYW5ndWFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvID0gdGhpcy5maWxsRGF0YS5tZXRhZGF0YS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZXRyaWV2aW5nIGFwcCBkYXRhJywgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmluaXRBc3luYygpO1xuICAgICAgICAvLyBFeGVjdXRlIGFueSBhY3Rpb24vc3RhdHVzIHN0ZXBzIHRoYXQgYXBwZWFyIGJlZm9yZSB0aGUgZmlyc3QgdmlzaWJsZSBzdGVwXG4gICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZUxlYWRpbmdBY3Rpb25TdGVwcygpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZEFwcERhdGEoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZTogeyBjb25maWd1cmF0aW9uOiBhbnk7IGZpbGxEYXRhPzogYW55IH0gPVxuICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgICB0aGlzLmZvcm1zU2VydmljZS5sb2FkRm9ybUJ5VXVpZCh0aGlzLmNvbmZpZ1V1aWQsIHRoaXMuZW52KVxuICAgICAgICApO1xuICAgICAgdGhpcy5hcHBNb2RlbCA9IEpTT04ucGFyc2UocmVzcG9uc2UuY29uZmlndXJhdGlvbik7XG4gICAgICB0aGlzLmZpbGxEYXRhID0gcmVzcG9uc2UuZmlsbERhdGEgPyBKU09OLnBhcnNlKHJlc3BvbnNlLmZpbGxEYXRhKSA6IG51bGw7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgZm9ybSBkYXRhJywgZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluaXRBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbUFsbEZpZWxkcygpO1xuICAgIGF3YWl0IHRoaXMuYnVpbGRGb3JtbHlBc3luYygpO1xuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVJlZmVyZW5jZUZpZWxkcyh0aGlzLmZvcm1seUNvbmZpZyk7XG4gICAgdGhpcy51cGRhdGVGb3JtbHlDb25maWcoKTtcbiAgICB0aGlzLmZvcm1seUNvbmZpZ1VwZGF0ZWQuZW1pdCgpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIGFwcGxpY2F0aW9uTGFuZ3VhZ2VzKCk6IExhbmd1YWdlW10ge1xuICAgIHJldHVybiB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcz8uZmlsdGVyKChhKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBNb2RlbD8uZ2VuZXJhbERhdGE/Lmxhbmd1YWdlcz8uaW5kZXhPZihhLmlzbykgPj0gMDtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZXR1cm5GTGFnKGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5sYW5ndWFnZUZsYWdzLmZpbmQoKGwpID0+IGwuY29kZSA9PSBsYW5ndWFnZSk/Lmljb247XG4gIH1cblxuICBjaGFuZ2VMYW5ndWFnZSgkZXZlbnQ6IHN0cmluZykge1xuICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvID0gJGV2ZW50O1xuICAgIHRoaXMuYXBwbGljYXRpb25EYXRhU2VydmljZVxuICAgICAgLmNoYW5nZUxhbmd1YWdlKHRoaXMuYXBwRGF0YVV1aWQsIHRoaXMuY3VycmVudExhbmd1YWdlSXNvKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaW5pdEFzeW5jKCk7XG4gIH1cbiAgZ2V0TGFuZ3VhZ2VOYW1lKGxhbmd1YWdlSXNvOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxhbmd1YWdlID0gdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMuZmluZChcbiAgICAgIChsYW5nKSA9PiBsYW5nLmlzbyA9PT0gbGFuZ3VhZ2VJc29cbiAgICApO1xuICAgIHJldHVybiBsYW5ndWFnZSA/IGxhbmd1YWdlLm5hbWUgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRGb3JtbHlBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28pIHtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0TGFiZWxzKCk7XG4gICAgfVxuXG4gICAgLy8gU1RFUCAxOiBJbml0aWFsaXplIGZsdXggYW5kIG90aGVyIHByb3BlcnRpZXMgZmlyc3RcbiAgICB0aGlzLmZsdXggPSB0aGlzLmFwcE1vZGVsLmZsdXg7XG4gICAgdGhpcy5kaXNwbGF5ID0gdGhpcy5hcHBNb2RlbC5kaXNwbGF5O1xuICAgIHRoaXMuZGVzaWduID0gdGhpcy5hcHBNb2RlbC5nZW5lcmF0ZWRDc3M7XG4gICAgdGhpcy5nZW5lcmFsRGF0YSA9IHRoaXMuYXBwTW9kZWwuZ2VuZXJhbERhdGE7XG4gICAgdGhpcy5hZGRSZW5kZXJlZENzcygpO1xuXG4gICAgLy8gU1RFUCAyOiBMb2FkIEFMTCBkaWN0aW9uYXJpZXMgdXBmcm9udCAobm93IHRoYXQgZmx1eCBpcyBpbml0aWFsaXplZClcbiAgICBhd2FpdCB0aGlzLmxvYWRBbGxSZXF1aXJlZERpY3Rpb25hcmllcygpO1xuXG4gICAgLy8gU1RFUCAzOiBDb250aW51ZSB3aXRoIGV4aXN0aW5nIGZvcm0gYnVpbGRpbmcgbG9naWNcbiAgICB0aGlzLmZvcm1seUNvbmZpZyA9IFtdO1xuICAgIHRoaXMuZm9ybWx5Q29sbGVjdGluZ0ZpZWxkcyA9IFtdO1xuICAgIHRoaXMuZm9ybWx5UHJlc2VudGF0aW9uRmllbGRzID0gW107XG4gICAgdGhpcy5tb2RlbCA9IHt9O1xuICAgIHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuXG4gICAgLy8gUG9wdWxhdGUgY29udHJvbCBJRHMgd2l0aCB2YWx1ZXMgaWYgZmlsbERhdGEgb3IgaW5pdEZsb3dWYWx1ZXMgZXhpc3RcbiAgICBpZiAodGhpcy5maWxsRGF0YSB8fCB0aGlzLmluaXRGbG93VmFsdWVzKSB7XG4gICAgICB0aGlzLnBvcHVsYXRlQ29udHJvbElkc1dpdGhWYWx1ZURpY3Rpb25hcnkoKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIG1vZGVsIHdpdGggZGVmYXVsdCB2YWx1ZXMgaWYgbm8gZmlsbERhdGFcbiAgICBpZiAoIXRoaXMuZmlsbERhdGEpIHtcbiAgICAgIHRoaXMubW9kZWwgPSBNb2RlbFBvcHVsYXRpb25IZWxwZXIuYXBwbHlEZWZhdWx0c1RvTW9kZWwoXG4gICAgICAgIHRoaXMuZmx1eCxcbiAgICAgICAgdGhpcy5kaWN0aW9uYXJ5TWFwLFxuICAgICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wb3B1bGF0ZU1vZGVsV2l0aEZpbGxEYXRhKHRoaXMuZmlsbERhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwpO1xuICAgIGF3YWl0IHRoaXMuYnVpbGRGb3JtbHlDb25maWdBc3luYygpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSByZWZlcmVuY2VzIGZvciBkZWZhdWx0IHZhbHVlc1xuICAgIGlmICghdGhpcy5maWxsRGF0YSkge1xuICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUmVmZXJlbmNlRmllbGRzKHRoaXMuZm9ybWx5Q29uZmlnKTtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShzdGFydFdpdGgobnVsbCksIHBhaXJ3aXNlKCkpXG4gICAgICAuc3Vic2NyaWJlKChbcHJldiwgbmV4dF06IFthbnksIGFueV0pID0+XG4gICAgICAgIHRoaXMuaGFuZGxlRm9ybVZhbHVlQ2hhbmdlKFtwcmV2LCBuZXh0XSlcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZvcm1WYWx1ZUNoYW5nZShbcHJldiwgbmV4dF06IFthbnksIGFueV0pIHtcbiAgICBjb25zdCBjdXJyZW50TGFuZ3VhZ2VJZCA9IFV0aWxzLmZpbmRMYW5ndWFnZUlkQnlJc28oXG4gICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyxcbiAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBuZXh0KSB7XG4gICAgICBpZiAobmV4dFtrZXldPy52YWx1ZVRyYW5zbGF0aW9ucykge1xuICAgICAgICB2YXIgcyA9IEpTT04uc3RyaW5naWZ5KG5leHRba2V5XSk7XG4gICAgICAgIHZhciByZXBsYWNlZCA9IHMucmVwbGFjZSgvXCJ2YWx1ZVRyYW5zbGF0aW9uc1wiOi9nLCAnXCJ0cmFuc2xhdGlvbnNcIjonKTtcbiAgICAgICAgbmV4dFtrZXldID0gSlNPTi5wYXJzZShyZXBsYWNlZCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZm9ybWx5UHJlc2VudGF0aW9uRmllbGRzLmZpbHRlcihcbiAgICAgICAgKGkpID0+IGkucHJvcHMgJiYgaS5wcm9wc1snY29sbGVjdGlvbkNvbnRyb2xJZGVudGlmaWVyJ10gPT09IGtleVxuICAgICAgKTtcbiAgICAgIGlmIChmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgbGV0IHZhbHVlID0gJyc7XG4gICAgICAgICAgc3dpdGNoICh0eXBlb2YgbmV4dFtrZXldKSB7XG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgICAgdmFsdWUgPSBuZXh0W2tleV0gPyAnJmNoZWNrOycgOiAnJmNyb3NzOyc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBpZiAobmV4dFtrZXldPy50cmFuc2xhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IG5leHRba2V5XS50cmFuc2xhdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICh0cmFuc2xhdGlvbjogeyBsYW5ndWFnZUlkOiBhbnkgfSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb24ubGFuZ3VhZ2VJZCA9PT0gY3VycmVudExhbmd1YWdlSWRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdHJhbnNsYXRpb24gPyB0cmFuc2xhdGlvbi52YWx1ZSA6IG51bGw7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBuZXh0W2tleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZpZWxkLmRlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnN0ZXBEaWN0aW9uYXJ5RGVwZW5kZW50SWRzLmZpbmQoKGEpID0+IGEgPT0ga2V5KSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbmV4dFtrZXldPy5pZCAmJlxuICAgICAgICAgIChwcmV2ID09IG51bGwgfHwgcHJldltrZXldPy5pZCAhPT0gbmV4dFtrZXldPy5pZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5mb3JtbHlDb25maWdbMF0uZmllbGRHcm91cCA9IHRoaXMuZ2V0Rm9ybWx5RmlsdGVyZWRTdGVwcygpO1xuICAgICAgICAgIHZhciBmaWx0ZXJlZFN0ZXBzSWRlbnRpZmllcnMgPSB0aGlzLmZvcm1seUNvbmZpZ1swXS5maWVsZEdyb3VwLm1hcChcbiAgICAgICAgICAgIChmKSA9PiBmLnByb3BzPy5bJ3N0ZXBJZCddXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB2aXNpYmxlU3RlcHMgPSB0aGlzLmFjdGlvblN0ZXBIYW5kbGVyLmZpbHRlclZpc2libGVTdGVwcyhcbiAgICAgICAgICAgIHRoaXMuZmx1eCxcbiAgICAgICAgICAgIGZpbHRlcmVkU3RlcHNJZGVudGlmaWVyc1xuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy51cGRhdGVGb3JtbHlDb25maWcoKTtcbiAgICAgICAgICB0aGlzLnZpc2libGVGaWVsZHNVcGRhdGVkLmVtaXQodmlzaWJsZVN0ZXBzKTtcbiAgICAgICAgICB0aGlzLmZvcm1seUNvbmZpZ1VwZGF0ZWQuZW1pdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYWJlbHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLmxhYmVsU2VydmljZVxuICAgICAgICAuZ2V0TGFiZWxzKHRoaXMuY3VycmVudExhbmd1YWdlSXNvLCBmYWxzZSlcbiAgICAgICAgLnN1YnNjcmliZSgobCkgPT4ge1xuICAgICAgICAgIHRoaXMubGFiZWxzID0gbDtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3B1bGF0ZUNvbnRyb2xJZHNXaXRoVmFsdWVEaWN0aW9uYXJ5KCkge1xuICAgIHZhciBjdXJyZW50TGFuZ3VhZ2VJZCA9IHRoaXMuZ2V0Q3VycmVudExhbmd1YWdlSWQoKTtcblxuICAgIC8vIEJ1aWxkIGRpY3Rpb25hcnkgZnJvbSBmaWxsRGF0YS5mbHV4IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHN0YXJ0IGVtcHR5XG4gICAgY29uc3QgY29udHJvbElkc1dpdGhWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB0aGlzLmZpbGxEYXRhPy5mbHV4XG4gICAgICA/IHRoaXMuZmlsbERhdGEuZmx1eFxuICAgICAgICAgIC5mbGF0TWFwKChzdGVwOiB7IHNlY3Rpb25zOiB7IGNvbnRyb2xzOiBhbnlbXSB9W10gfSkgPT5cbiAgICAgICAgICAgIHN0ZXAuc2VjdGlvbnMuZmxhdE1hcCgoc2VjdGlvbjogeyBjb250cm9sczogYW55W10gfSkgPT5cbiAgICAgICAgICAgICAgc2VjdGlvbi5jb250cm9sc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNvbnRyb2wpID0+IGNvbnRyb2wuY29udHJvbElkICYmIGNvbnRyb2wuZmlsbFZhbHVlKVxuICAgICAgICAgICAgICAgIC5tYXAoKGNvbnRyb2wpID0+ICh7XG4gICAgICAgICAgICAgICAgICBjb250cm9sSWQ6IGNvbnRyb2wuY29udHJvbElkLFxuICAgICAgICAgICAgICAgICAgZmlsbFZhbHVlOiBjb250cm9sLmZpbGxWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIGZpbGxWYWx1ZUlkOiBjb250cm9sLmZpbGxWYWx1ZUlkLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAucmVkdWNlKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICBkaWN0aW9uYXJ5OiB7IFt4OiBzdHJpbmddOiBhbnkgfSxcbiAgICAgICAgICAgICAgeyBjb250cm9sSWQsIGZpbGxWYWx1ZSwgZmlsbFZhbHVlSWQgfTogYW55XG4gICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgaWYgKGZpbGxWYWx1ZUlkKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBkaWN0XSBvZiB0aGlzLmRpY3Rpb25hcnlNYXAuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRpY3QudmFsdWVzPy5maW5kKCh2KSA9PiB2LmlkID09IGZpbGxWYWx1ZUlkKTtcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHZhbHVlLnZhbHVlVHJhbnNsYXRpb25zLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgKHQpID0+IHQubGFuZ3VhZ2VJZCA9PSBjdXJyZW50TGFuZ3VhZ2VJZFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5W2NvbnRyb2xJZF0gPSB0cmFuc2xhdGlvbi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5W2NvbnRyb2xJZF0gPSBmaWxsVmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgYW55PlxuICAgICAgICAgIClcbiAgICAgIDoge307XG5cbiAgICAvLyBHZXQgaW5pdEZsb3dWYWx1ZXMgZnJvbSBmaWxsRGF0YSBvciBmcm9tIGRpcmVjdCBpbnB1dCAodGhpcy5pbml0Rmxvd1ZhbHVlcylcbiAgICBsZXQgaW5pdEZsb3dWYWx1ZXMgPSB0aGlzLmZpbGxEYXRhPy5pbml0Rmxvd1ZhbHVlcztcblxuICAgIC8vIElmIG5vdCBpbiBmaWxsRGF0YSwgdHJ5IHRvIHBhcnNlIGZyb20gZGlyZWN0IGluaXRGbG93VmFsdWVzIGlucHV0XG4gICAgaWYgKCFpbml0Rmxvd1ZhbHVlcyAmJiB0aGlzLmluaXRGbG93VmFsdWVzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpbml0Rmxvd1ZhbHVlcyA9XG4gICAgICAgICAgdHlwZW9mIHRoaXMuaW5pdEZsb3dWYWx1ZXMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IEpTT04ucGFyc2UodGhpcy5pbml0Rmxvd1ZhbHVlcylcbiAgICAgICAgICAgIDogdGhpcy5pbml0Rmxvd1ZhbHVlcztcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gcGFyc2UgaW5pdEZsb3dWYWx1ZXM6JywgZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYWRkSW5pdEZsb3dWYWx1ZXMgPSAobm9kZTogYW55LCBwYXRoUGFydHM6IHN0cmluZ1tdKSA9PiB7XG4gICAgICBpZiAobm9kZSA9PT0gbnVsbCB8fCBub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29udHJvbElkc1dpdGhWYWx1ZXNbYGluaXRGbG93VmFsdWVzXyR7cGF0aFBhcnRzLmpvaW4oJ18nKX1gXSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICAgICAgbm9kZS5mb3JFYWNoKChjaGlsZCwgaWR4KSA9PlxuICAgICAgICAgIGFkZEluaXRGbG93VmFsdWVzKGNoaWxkLCBbLi4ucGF0aFBhcnRzLCBTdHJpbmcoaWR4KV0pXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBPYmplY3Qua2V5cyhub2RlKS5mb3JFYWNoKChrKSA9PlxuICAgICAgICAgIGFkZEluaXRGbG93VmFsdWVzKG5vZGVba10sIFsuLi5wYXRoUGFydHMsIGtdKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb250cm9sSWRzV2l0aFZhbHVlc1tgaW5pdEZsb3dWYWx1ZXNfJHtwYXRoUGFydHMuam9pbignXycpfWBdID1cbiAgICAgICAgICBTdHJpbmcobm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChpbml0Rmxvd1ZhbHVlcyAhPT0gbnVsbCAmJiBpbml0Rmxvd1ZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhZGRJbml0Rmxvd1ZhbHVlcyhpbml0Rmxvd1ZhbHVlcywgW10pO1xuICAgIH1cbiAgICB0aGlzLmNvbnRyb2xJZHNXaXRoVmFsdWVzID0gY29udHJvbElkc1dpdGhWYWx1ZXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDdXJyZW50TGFuZ3VhZ2VJZCgpOiBudW1iZXIge1xuICAgIGNvbnN0IGN1cnJlbnRMYW5ndWFnZUlkID0gVXRpbHMuZmluZExhbmd1YWdlSWRCeUlzbyhcbiAgICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLFxuICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICApO1xuICAgIHJldHVybiBjdXJyZW50TGFuZ3VhZ2VJZDtcbiAgfVxuICBwcml2YXRlIGFzeW5jIGJ1aWxkRm9ybWx5Q29uZmlnQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGVwc1NldHRpbmdzID0ge1xuICAgICAgc2hvd0NvdW50ZXI6IHRoaXMuc2hvd0Rpc3BsYXlNb2RlXG4gICAgICAgID8gZmFsc2VcbiAgICAgICAgOiB0aGlzLmdlbmVyYWxEYXRhLnNob3dDb3VudGVyU3RlcCxcbiAgICAgIHNob3dMYWJlbHM6IHRoaXMuc2hvd0Rpc3BsYXlNb2RlID8gZmFsc2UgOiB0aGlzLmdlbmVyYWxEYXRhLnNob3dOYW1lU3RlcCxcbiAgICAgIHNob3dBbGxTdGVwczogdGhpcy5zaG93RGlzcGxheU1vZGVcbiAgICAgICAgPyBmYWxzZVxuICAgICAgICA6IHRoaXMuZ2VuZXJhbERhdGEuc2hvd0FsbFN0ZXBzLFxuICAgICAgc2hvd1Byb2dyZXNzQmFyOlxuICAgICAgICB0aGlzLmdlbmVyYWxEYXRhLnNob3dQcm9ncmVzc0JhciAmJlxuICAgICAgICAgIHRoaXMuZ2VuZXJhbERhdGEuc2hvd0FsbFN0ZXBzID09IGZhbHNlXG4gICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgdGhpcy5mb3JtbHlBbGxTdGVwcyA9IGF3YWl0IHRoaXMuYnVpbGRGb3JtbHlGaWVsZEdyb3VwQXN5bmMoKTtcbiAgICB2YXIgaGFzRGljdGlvbmFyeURlcGVuZGVudFN0ZXBzID0gdGhpcy5mb3JtbHlBbGxTdGVwcy5zb21lKFxuICAgICAgKGYpID0+IGYucHJvcHM/LlsnZGVwZW5kZW50RGljdGlvbmFyeSddPy5pc0RpY3Rpb25hcnlEZXBlbmRlbnRcbiAgICApO1xuXG4gICAgdmFyIGZvcm1seUZpbHRlcmVkU3RlcHMgPSB0aGlzLmdldEZvcm1seUZpbHRlcmVkU3RlcHMoKTtcbiAgICB2YXIgZmlsdGVyZWRTdGVwc0lkZW50aWZpZXJzID0gZm9ybWx5RmlsdGVyZWRTdGVwcy5tYXAoXG4gICAgICAoZikgPT4gZi5wcm9wcz8uWydzdGVwSWQnXVxuICAgICk7XG4gICAgLy8gR2V0IHZpc2libGUgc3RlcHMgZm9yIGFjY3VyYXRlIHN0ZXAgY291bnRpbmdcbiAgICBjb25zdCB2aXNpYmxlU3RlcHMgPSB0aGlzLmFjdGlvblN0ZXBIYW5kbGVyLmZpbHRlclZpc2libGVTdGVwcyh0aGlzLmZsdXgpO1xuICAgIGNvbnN0IGZpbHRlcmVkVmlzaWJsZVN0ZXBzID0gdGhpcy5hY3Rpb25TdGVwSGFuZGxlci5maWx0ZXJWaXNpYmxlU3RlcHMoXG4gICAgICB0aGlzLmZsdXgsXG4gICAgICBmaWx0ZXJlZFN0ZXBzSWRlbnRpZmllcnNcbiAgICApO1xuXG4gICAgdGhpcy5mb3JtbHlDb25maWcgPSBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdzdGVwcGVyJyxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBhcHBEYXRhSWQ6IHRoaXMuZmlsbERhdGFcbiAgICAgICAgICAgID8gdGhpcy5maWxsRGF0YT8ubWV0YWRhdGE/LmFwcERhdGFJZFxuICAgICAgICAgICAgOiB0aGlzLmFwcERhdGFVdWlkLFxuICAgICAgICAgIGRlc2lnbjogdGhpcy5kZXNpZ24sXG4gICAgICAgICAgYXBwbGljYXRpb25JZDogdGhpcy5hcHBNb2RlbC5hcHBsaWNhdGlvblV1aWQsXG4gICAgICAgICAgZmx1eDogdmlzaWJsZVN0ZXBzLCAvLyBQYXNzIG9ubHkgdmlzaWJsZSBzdGVwcyB0byBzdGVwcGVyXG4gICAgICAgICAgZmlsdGVyZWRGbHV4OiBmaWx0ZXJlZFZpc2libGVTdGVwcyxcbiAgICAgICAgICBpc0Rpc3BsYXlNb2RlOiB0aGlzLnNob3dEaXNwbGF5TW9kZSxcbiAgICAgICAgICBmaWxsRGF0YTogdGhpcy5maWxsRGF0YSxcbiAgICAgICAgICBpbml0Rmxvd1ZhbHVlczogdGhpcy5pbml0Rmxvd1ZhbHVlcyxcbiAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2U6IHRoaXMuYXBwTW9kZWwuZ2VuZXJhbERhdGEuZGVmYXVsdExhbmd1YWdlLFxuICAgICAgICAgIGRpc3BsYXk6IHRoaXMuZGlzcGxheSxcbiAgICAgICAgICBkZXNpZ25Db25maWc6IHtcbiAgICAgICAgICAgIGJ1dHRvbnNWZXJ0aWNhbFBvc2l0aW9uOlxuICAgICAgICAgICAgICB0aGlzLmFwcE1vZGVsLmRlc2lnbi5idXR0b25zVmVydGljYWxQb3NpdGlvbixcbiAgICAgICAgICAgIGJ1dHRvbnNIb3Jpem9udGFsUG9zaXRpb246XG4gICAgICAgICAgICAgIHRoaXMuYXBwTW9kZWwuZGVzaWduLmJ1dHRvbnNIb3Jpem9udGFsUG9zaXRpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGVwc1NldHRpbmdzOiB0aGlzLnN0ZXBzU2V0dGluZ3MsXG4gICAgICAgICAgbWV0YURhdGE6IHRoaXMuZmlsbERhdGE/Lm1ldGFkYXRhLFxuICAgICAgICAgIGRlbW9Nb2RlOiB0aGlzLmlzRGVtb01vZGUsXG4gICAgICAgICAgaXNEZWJ1ZzogdGhpcy5pc0RlYnVnLFxuICAgICAgICAgIG5vQnV0dG9uc0luVmlldzogdGhpcy5ub0J1dHRvbnNJblZpZXcsXG4gICAgICAgICAgYmxvY2tQcmV2aW91c1N0ZXA6IHRoaXMuYmxvY2tQcmV2aW91c1N0ZXAsXG4gICAgICAgICAgZW52OiB0aGlzLmVudixcbiAgICAgICAgICBoYXNEaWN0aW9uYXJ5RGVwZW5kZW50U3RlcHM6IGhhc0RpY3Rpb25hcnlEZXBlbmRlbnRTdGVwcyxcbiAgICAgICAgICBoYXNBY3Rpb25TdGVwczogdGhpcy5mbHV4LnNvbWUoKHN0ZXApID0+XG4gICAgICAgICAgICB0aGlzLmFjdGlvblN0ZXBIYW5kbGVyLmlzQWN0aW9uU3RlcChzdGVwKVxuICAgICAgICAgICksIC8vIEluZGljYXRlIGlmIHRoZXJlIGFyZSBhY3Rpb24gc3RlcHNcbiAgICAgICAgICBjb21wbGV0aW9uRXZlbnQ6ICgpID0+IHRoaXMub25Db21wbGV0aW9uKCksXG4gICAgICAgICAgb25TZWxlY3RlZFBhZ2VDaGFuZ2luZzogKGluZGV4OiBudW1iZXIpID0+XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0ZWRQYWdlQ2hhbmdpbmcoaW5kZXgpLFxuICAgICAgICAgIG9uU2VsZWN0ZWRQYWdlQ2hhbmdlZDogKGluZGV4OiBudW1iZXIpID0+XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0ZWRQYWdlQ2hhbmdlZChpbmRleCksXG4gICAgICAgIH0sXG4gICAgICAgIGZpZWxkR3JvdXA6IGZvcm1seUZpbHRlcmVkU3RlcHMsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICAvLyBGb3IgZGlzcGxheSBtb2RlLCBwb3B1bGF0ZSB2YWx1ZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgY29uZmlnIGlzIGJ1aWx0XG4gICAgaWYgKHRoaXMuc2hvd0Rpc3BsYXlNb2RlICYmIHRoaXMuZm9ybWx5Q29uZmlnWzBdPy5maWVsZEdyb3VwKSB7XG4gICAgICBmb3IgKGNvbnN0IHN0ZXAgb2YgdGhpcy5mb3JtbHlDb25maWdbMF0uZmllbGRHcm91cCkge1xuICAgICAgICB0aGlzLnNldFByZXNlbnRhdGlvbkNvbnRyb2xWYWx1ZXNSZWN1cnNpdmVseShzdGVwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG9uU2VsZWN0ZWRQYWdlQ2hhbmdpbmcoc3RlcFRyYW5zaXRpb246IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxldCBmcm9tSW5kZXg6IG51bWJlcjtcbiAgICBsZXQgdG9JbmRleDogbnVtYmVyO1xuICAgIGxldCBjYWxsYmFjazogKCkgPT4gdm9pZCA9ICgpID0+IHsgfTtcblxuICAgIGlmICh0eXBlb2Ygc3RlcFRyYW5zaXRpb24gPT09ICdudW1iZXInKSB7XG4gICAgICB0b0luZGV4ID0gc3RlcFRyYW5zaXRpb247XG4gICAgICBmcm9tSW5kZXggPSB0aGlzLmFjdGl2ZVN0ZXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZyb21JbmRleCA9IHN0ZXBUcmFuc2l0aW9uLmZyb207XG4gICAgICB0b0luZGV4ID0gc3RlcFRyYW5zaXRpb24udG87XG4gICAgICBjYWxsYmFjayA9IHN0ZXBUcmFuc2l0aW9uLmNhbGxiYWNrIHx8ICgoKSA9PiB7IH0pO1xuICAgIH1cblxuICAgIGxldCBhY3Rpb25zRXhlY3V0ZWQgPSBmYWxzZTtcblxuICAgIGlmICh0b0luZGV4ID4gZnJvbUluZGV4KSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgJ+Keoe+4jyBNb3ZpbmcgZm9yd2FyZCAtIGV4ZWN1dGluZyBhY3Rpb24gc3RlcHMgYWZ0ZXIgY3VycmVudCBzdGVwJ1xuICAgICAgKTtcbiAgICAgIGFjdGlvbnNFeGVjdXRlZCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUFjdGlvblN0ZXBzQWZ0ZXJDdXJyZW50U3RlcChcbiAgICAgICAgZnJvbUluZGV4XG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodG9JbmRleCA8IGZyb21JbmRleCkge1xuICAgICAgY29uc29sZS5sb2coJ+Kshe+4jyBNb3ZpbmcgYmFja3dhcmQgLSBubyBhY3Rpb24gZXhlY3V0aW9uIG5lZWRlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygn8J+UhCBTdGF5aW5nIG9uIHNhbWUgc3RlcCAtIG5vIGFjdGlvbiBleGVjdXRpb24gbmVlZGVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5hY3RpdmVTdGVwID0gdG9JbmRleDtcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9uc0V4ZWN1dGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlQWN0aW9uU3RlcHNBZnRlckN1cnJlbnRTdGVwKFxuICAgIGN1cnJlbnRTdGVwSW5kZXg6IG51bWJlclxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5hY3Rpb25TdGVwSGFuZGxlci5pc0V4ZWN1dGluZ0FjdGlvbnMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgZmlsdGVyZWRTdGVwcyA9IHRoaXMuZmx1eC5maWx0ZXIoKHMpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgcy5kZXBlbmRlbnREaWN0aW9uYXJ5ICYmXG4gICAgICAgIHMuZGVwZW5kZW50RGljdGlvbmFyeS5pc0RpY3Rpb25hcnlEZXBlbmRlbnRcbiAgICAgICkge1xuICAgICAgICBjb25zdCBtb2RlbFZhbHVlID0gdGhpcy5tb2RlbFtzLmRlcGVuZGVudERpY3Rpb25hcnkuZGljdGlvbmFyeUNvbnRyb2xJZGVudGlmaWVyXTtcbiAgICAgICAgLy8gU2tpcCBkZXBlbmRlbmN5IGNoZWNrIGZvciBtdWx0aXBsZSBzZWxlY3Rpb24gKGFycmF5KVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSBtb2RlbFZhbHVlPy5pZDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNlbGVjdGVkVmFsdWUgJiZcbiAgICAgICAgICBzLmRlcGVuZGVudERpY3Rpb25hcnkuZGVwZW5kZW50VmFsdWVJZHMuaW5jbHVkZXMoc2VsZWN0ZWRWYWx1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBhY3Rpb25TdGVwcyA9IHRoaXMuYWN0aW9uU3RlcEhhbmRsZXIuZ2V0QWN0aW9uU3RlcHNBdEluZGV4KFxuICAgICAgZmlsdGVyZWRTdGVwcyxcbiAgICAgIGN1cnJlbnRTdGVwSW5kZXhcbiAgICApO1xuXG4gICAgaWYgKGFjdGlvblN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgaWYgKCF0aGlzLmFwcERhdGFVdWlkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHRoZSBzYXZpbmcgZmxhZyBiZWZvcmUgc3RhcnRpbmcgYWN0aW9uc1xuICAgICAgdGhpcy5pc1NhdmluZ0FmdGVyQWN0aW9ucyA9IHRydWU7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYWN0aW9uU3RlcEhhbmRsZXIuZXhlY3V0ZUFjdGlvblN0ZXBzKFxuICAgICAgICBhY3Rpb25TdGVwcyxcbiAgICAgICAgdGhpcy5hcHBEYXRhVXVpZCxcbiAgICAgICAgKHN0ZXApID0+IHtcbiAgICAgICAgICBjb25zdCBsb2FkaW5nTWVzc2FnZSA9IFV0aWxzLmZpbmRUcmFuc2xhdGlvbkluZm8oXG4gICAgICAgICAgICAnbG9hZGluZ01lc3NhZ2VUcmFuc2xhdGlvbnMnLFxuICAgICAgICAgICAgc3RlcC50cmFuc2xhdGlvbnMsXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nTWVzc2FnZSA9IGxvYWRpbmdNZXNzYWdlIHx8IG51bGw7XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmxvZygn4pyFIEFjdGlvbiBzdGVwcyBleGVjdXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgICAgLy8gS2VlcCBsb2FkaW5nIHN0YXRlIHRydWUgLSBpdCB3aWxsIGJlIGNsZWFyZWQgYWZ0ZXIgc2F2ZUFwcERhdGFTdGVwIGNvbXBsZXRlc1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCBBY3Rpb24gc3RlcHMgZXhlY3V0aW9uIGZhaWxlZDonLCByZXN1bHQuZXJyb3IpO1xuICAgICAgICB0aGlzLmlzU2F2aW5nQWZ0ZXJBY3Rpb25zID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcign4p2MIEVycm9yIGV4ZWN1dGluZyBhY3Rpb24gc3RlcHM6JywgZXJyb3IpO1xuICAgICAgdGhpcy5pc1NhdmluZ0FmdGVyQWN0aW9ucyA9IGZhbHNlO1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVMZWFkaW5nQWN0aW9uU3RlcHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmFwcERhdGFVdWlkIHx8ICF0aGlzLmZsdXggfHwgdGhpcy5mbHV4Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxlYWRpbmdBY3Rpb25TdGVwcyA9XG4gICAgICB0aGlzLmFjdGlvblN0ZXBIYW5kbGVyLmdldEFjdGlvblN0ZXBzQmVmb3JlRmlyc3RWaXNpYmxlU3RlcCh0aGlzLmZsdXgpO1xuXG4gICAgaWYgKGxlYWRpbmdBY3Rpb25TdGVwcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGDwn46sIEV4ZWN1dGluZyAke2xlYWRpbmdBY3Rpb25TdGVwcy5sZW5ndGh9IGxlYWRpbmcgYWN0aW9uIHN0ZXBzIGJlZm9yZSBmaXJzdCB2aXNpYmxlIHN0ZXBgXG4gICAgKTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hY3Rpb25TdGVwSGFuZGxlci5leGVjdXRlQWN0aW9uU3RlcHMoXG4gICAgICAgIGxlYWRpbmdBY3Rpb25TdGVwcyxcbiAgICAgICAgdGhpcy5hcHBEYXRhVXVpZCxcbiAgICAgICAgKHN0ZXApID0+IHtcbiAgICAgICAgICBjb25zdCBsb2FkaW5nTWVzc2FnZSA9IFV0aWxzLmZpbmRUcmFuc2xhdGlvbkluZm8oXG4gICAgICAgICAgICAnbG9hZGluZ01lc3NhZ2VUcmFuc2xhdGlvbnMnLFxuICAgICAgICAgICAgc3RlcC50cmFuc2xhdGlvbnMsXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nTWVzc2FnZSA9IGxvYWRpbmdNZXNzYWdlIHx8IG51bGw7XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmxvZygn4pyFIExlYWRpbmcgYWN0aW9uIHN0ZXBzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcign4p2MIExlYWRpbmcgYWN0aW9uIHN0ZXBzIGZhaWxlZDonLCByZXN1bHQuZXJyb3IpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCfinYwgRXJyb3IgZXhlY3V0aW5nIGxlYWRpbmcgYWN0aW9uIHN0ZXBzOicsIGVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5sb2FkaW5nTWVzc2FnZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvblNlbGVjdGVkUGFnZUNoYW5nZWQoaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmZvcm1seUNvbmZpZ1swXS5maWVsZEdyb3VwKSB7XG4gICAgICB2YXIgc2VsZWN0ZWRQYWdlID0gdGhpcy5mb3JtbHlDb25maWdbMF0uZmllbGRHcm91cFtpbmRleF07XG4gICAgICB0aGlzLnNldFByZXNlbnRhdGlvbkNvbnRyb2xWYWx1ZXNSZWN1cnNpdmVseShzZWxlY3RlZFBhZ2UpO1xuXG4gICAgICBNb2RlbFBvcHVsYXRpb25IZWxwZXIuYXBwbHlQcmVjb21wbGV0aW9uVG9Nb2RlbCh0aGlzLm1vZGVsLCB0aGlzLmZsdXgpO1xuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodGhpcy5tb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRQcmVzZW50YXRpb25Db250cm9sVmFsdWVzUmVjdXJzaXZlbHkoZmM/OiBhbnkpIHtcbiAgICBmYz8uZmllbGRHcm91cD8uZm9yRWFjaCgoZmc6IGFueSkgPT4ge1xuICAgICAgaWYgKGZnLnByb3BzICYmIGZnLnByb3BzWydpc0Rpc3BsYXlNb2RlJ10gPT09IHRydWUpIHtcbiAgICAgICAgdmFyIG1ldGhvZEZpZWxkSWQgPSBmZy5wcm9wc1snYXBpTWV0aG9kRmllbGRJZCddO1xuICAgICAgICBpZiAobWV0aG9kRmllbGRJZCkge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZmluZEluQXBpQ2FsbHNSZXNwb25zZXMobWV0aG9kRmllbGRJZCk7XG4gICAgICAgICAgZmcuZGVmYXVsdFZhbHVlID0gdmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBhc3NvY2lhdGVkQ29udHJvbElkID0gZmcucHJvcHNbJ2NvbGxlY3Rpb25Db250cm9sSWRlbnRpZmllciddO1xuICAgICAgICAgIGlmIChhc3NvY2lhdGVkQ29udHJvbElkKSB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9XG4gICAgICAgICAgICAgIHRoaXMuZmluZENvbnRyb2xJbkZpbGxEYXRhQ29udHJvbHMoYXNzb2NpYXRlZENvbnRyb2xJZCk7XG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgLy8gTXVsdGlwbGUgc2VsZWN0aW9uIC0gc2hvdyB2YWx1ZXMgd2l0aCBjb21tYVxuICAgICAgICAgICAgICBjb25zdCB2YWx1ZUlkc0FycmF5ID0gZm91bmQuZmlsbFZhbHVlSWRzIHx8IGZvdW5kLmZpbGx2YWx1ZWlkcyB8fCBmb3VuZC5GaWxsVmFsdWVJZHM7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlc0FycmF5ID0gZm91bmQuZmlsbFZhbHVlcyB8fCBmb3VuZC5maWxsdmFsdWVzIHx8IGZvdW5kLkZpbGxWYWx1ZXM7XG5cbiAgICAgICAgICAgICAgaWYgKHZhbHVlSWRzQXJyYXkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZUlkc0FycmF5KSAmJiB2YWx1ZUlkc0FycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50TGFuZ3VhZ2VJZCA9IHRoaXMuZ2V0Q3VycmVudExhbmd1YWdlSWQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5VmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWVJZCBvZiB2YWx1ZUlkc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBudW1lcmljVmFsdWVJZCA9IHR5cGVvZiB2YWx1ZUlkID09PSAnc3RyaW5nJyA/IHBhcnNlSW50KHZhbHVlSWQsIDEwKSA6IHZhbHVlSWQ7XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGRpY3RdIG9mIHRoaXMuZGljdGlvbmFyeU1hcC5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkaWN0LnZhbHVlcz8uZmluZCgodikgPT4gdi5pZCA9PT0gbnVtZXJpY1ZhbHVlSWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHZhbHVlLnZhbHVlVHJhbnNsYXRpb25zLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAodCkgPT4gdC5sYW5ndWFnZUlkID09IGN1cnJlbnRMYW5ndWFnZUlkXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5VmFsdWVzLnB1c2godHJhbnNsYXRpb24/LnZhbHVlIHx8IHZhbHVlLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkaXNwbGF5VmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGZnLmRlZmF1bHRWYWx1ZSA9IGRpc3BsYXlWYWx1ZXMuam9pbignLCAnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVzQXJyYXkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZXNBcnJheSkgJiYgdmFsdWVzQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrOiB1c2UgZmlsbFZhbHVlcyBhcnJheSBkaXJlY3RseVxuICAgICAgICAgICAgICAgIGZnLmRlZmF1bHRWYWx1ZSA9IHZhbHVlc0FycmF5LmpvaW4oJywgJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm91bmQuZmlsbFZhbHVlSWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50TGFuZ3VhZ2VJZCA9IHRoaXMuZ2V0Q3VycmVudExhbmd1YWdlSWQoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGRpY3RdIG9mIHRoaXMuZGljdGlvbmFyeU1hcC5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGljdC52YWx1ZXM/LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICh2KSA9PiB2LmlkID09IGZvdW5kLmZpbGxWYWx1ZUlkXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdmFsdWUudmFsdWVUcmFuc2xhdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAodCkgPT4gdC5sYW5ndWFnZUlkID09IGN1cnJlbnRMYW5ndWFnZUlkXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgIGZnLmRlZmF1bHRWYWx1ZSA9IHRyYW5zbGF0aW9uLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZnLmRlZmF1bHRWYWx1ZSA9IGZvdW5kLmZpbGxWYWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gQ2hlY2sgY29udHJvbElkc1dpdGhWYWx1ZXMgZm9yIGluaXRGbG93VmFsdWVzXG4gICAgICAgICAgICAgIGNvbnN0IGluaXRGbG93VmFsdWUgPSB0aGlzLmNvbnRyb2xJZHNXaXRoVmFsdWVzPy5bYXNzb2NpYXRlZENvbnRyb2xJZF07XG4gICAgICAgICAgICAgIGlmIChpbml0Rmxvd1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBmZy5kZWZhdWx0VmFsdWUgPSBpbml0Rmxvd1ZhbHVlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZmluZEluQXBpQ2FsbHNSZXNwb25zZXMoYXNzb2NpYXRlZENvbnRyb2xJZCk7XG4gICAgICAgICAgICAgICAgZmcuZGVmYXVsdFZhbHVlID0gdmFsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldFByZXNlbnRhdGlvbkNvbnRyb2xWYWx1ZXNSZWN1cnNpdmVseShmZyk7XG4gICAgICB9XG4gICAgICBpZiAoZmcucHJvcHNbJ2NkciddKSB7XG4gICAgICAgIGZnLnByb3BzWydjZHInXS5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRDb250cm9sSW5GaWxsRGF0YUNvbnRyb2xzKGNvbnRyb2xJZDogc3RyaW5nKTogYW55IHtcbiAgICBsZXQgY29udHJvbERhdGE6IGFueSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5maWxsRGF0YSkge1xuICAgICAgdGhpcy5maWxsRGF0YS5mbHV4Py5mb3JFYWNoKChmOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFjb250cm9sRGF0YSkge1xuICAgICAgICAgIGYuc2VjdGlvbnM/LmZvckVhY2goKHM6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjb250cm9sRGF0YSkge1xuICAgICAgICAgICAgICBjb250cm9sRGF0YSA9IHMuY29udHJvbHM/LmZpbmQoXG4gICAgICAgICAgICAgICAgKGM6IGFueSkgPT4gYy5jb250cm9sSWQgPT09IGNvbnRyb2xJZFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoY29udHJvbERhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udHJvbERhdGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjb250cm9sRGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZEluQXBpQ2FsbHNSZXNwb25zZXMoZmllbGRJZDogc3RyaW5nKTogYW55IHtcbiAgICBsZXQgZm91bmRWYWx1ZTogYW55ID0gdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmZpbGxEYXRhKSB7XG4gICAgICB0aGlzLmZpbGxEYXRhLkFQSUNhbGxzPy5mb3JFYWNoKChhcGk6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIWZvdW5kVmFsdWUpIHtcbiAgICAgICAgICBhcGkuTWV0aG9kcz8uZm9yRWFjaCgobTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWZvdW5kVmFsdWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSBtLkZpZWxkcz8uW2ZpZWxkSWRdO1xuICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICBmb3VuZFZhbHVlID0gZm91bmQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmb3VuZFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGb3JtbHlGaWx0ZXJlZFN0ZXBzKCkge1xuICAgIGxldCBzdGVwcyA9IHRoaXMuZm9ybWx5QWxsU3RlcHMuZmlsdGVyKChzKSA9PiB7XG4gICAgICBpZiAocy5wcm9wcyAmJiBzLnByb3BzWydkZXBlbmRlbnREaWN0aW9uYXJ5J10pIHtcbiAgICAgICAgY29uc3QgZGVwRGljdCA9IHMucHJvcHNbXG4gICAgICAgICAgJ2RlcGVuZGVudERpY3Rpb25hcnknXG4gICAgICAgIF0gYXMgRGVwZW5kZW50RGljdGlvbmFyeURhdGE7XG4gICAgICAgIGlmIChkZXBEaWN0ICYmIGRlcERpY3QuaXNEaWN0aW9uYXJ5RGVwZW5kZW50KSB7XG4gICAgICAgICAgY29uc3QgbW9kZWxWYWx1ZSA9IHRoaXMubW9kZWxbZGVwRGljdC5kaWN0aW9uYXJ5Q29udHJvbElkZW50aWZpZXJdO1xuICAgICAgICAgIC8vIFNraXAgZGVwZW5kZW5jeSBjaGVjayBmb3IgbXVsdGlwbGUgc2VsZWN0aW9uIChhcnJheSlcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbFZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSBtb2RlbFZhbHVlPy5pZDtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBzZWxlY3RlZFZhbHVlICYmXG4gICAgICAgICAgICBkZXBEaWN0LmRlcGVuZGVudFZhbHVlSWRzLmluY2x1ZGVzKHNlbGVjdGVkVmFsdWUpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzdGVwcztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRGb3JtbHlGaWVsZEdyb3VwQXN5bmMoKTogUHJvbWlzZTxGb3JtbHlGaWVsZENvbmZpZ1tdPiB7XG4gICAgdGhpcy5zdGVwRGljdGlvbmFyeURlcGVuZGVudElkcyA9IFtdO1xuICAgIGlmICh0aGlzLnNob3dEaXNwbGF5TW9kZSkge1xuICAgICAgY29uc3Qgc3RlcCA9IGF3YWl0IHRoaXMuYnVpZERpc3BsYXlTdGVwKCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtzdGVwXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZpbHRlciBvdXQgYWN0aW9uIHN0ZXBzIGZyb20gdmlzaWJsZSBzdGVwc1xuICAgICAgY29uc3QgdmlzaWJsZVN0ZXBzID0gdGhpcy5hY3Rpb25TdGVwSGFuZGxlci5maWx0ZXJWaXNpYmxlU3RlcHModGhpcy5mbHV4KTtcbiAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgdmlzaWJsZVN0ZXBzLm1hcCgoc3RlcCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmJ1aWxkRm9ybWx5RmllbGRDb25maWdBc3luYyhzdGVwKTtcbiAgICAgICAgfSkgPz8gW11cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBidWlsZEZvcm1seUZpZWxkQ29uZmlnQXN5bmMoXG4gICAgc3RlcDogU3RlcERhdGFcbiAgKTogUHJvbWlzZTxGb3JtbHlGaWVsZENvbmZpZz4ge1xuICAgIGxldCBzdGVwRm9ybWx5Q29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZyA9IHt9O1xuXG4gICAgaWYgKHN0ZXAudHlwZSAhPT0gRmx1eFR5cGUuQ3VzdG9tICYmIHN0ZXAudHlwZSAhPT0gRmx1eFR5cGUuRmluYWwpIHtcbiAgICAgIHN0ZXBGb3JtbHlDb25maWcgPSBhd2FpdCB0aGlzLmJ1aWxkU3lzdGVtRmllbGRGb3JtbHlDb25maWcoc3RlcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ZXBGb3JtbHlDb25maWcgPSB7XG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgbGFiZWw6IHN0ZXAubmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogc3RlcC5uYW1lLFxuICAgICAgICAgIGJ1dHRvbnM6IHRoaXMuY29uc3RydWN0QnV0dG9ucyhzdGVwLmJ1dHRvbnMpLFxuICAgICAgICAgIGRlcGVuZGVudERpY3Rpb25hcnk6IHN0ZXAuZGVwZW5kZW50RGljdGlvbmFyeSxcbiAgICAgICAgICBzdGVwSWQ6IHN0ZXAuaWRlbnRpZmllcixcbiAgICAgICAgfSxcbiAgICAgICAgZmllbGRHcm91cDogYXdhaXQgdGhpcy5idWlsZFNlY3Rpb25zRmllbGRHcm91cEFzeW5jKFxuICAgICAgICAgIHN0ZXAsXG4gICAgICAgICAgc3RlcC5zZWN0aW9uc1xuICAgICAgICApLFxuICAgICAgfTtcblxuICAgICAgaWYgKHN0ZXAudHJhbnNsYXRpb25zKSB7XG4gICAgICAgIHN0ZXBGb3JtbHlDb25maWcucHJvcHMhWydsYWJlbCddID0gVXRpbHMuZmluZFRyYW5zbGF0aW9uSW5mbyhcbiAgICAgICAgICAnbmFtZScsXG4gICAgICAgICAgc3RlcC50cmFuc2xhdGlvbnMsXG4gICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgKTtcbiAgICAgICAgc3RlcEZvcm1seUNvbmZpZy5wcm9wcyFbJ2Rlc2NyaXB0aW9uJ10gPSBVdGlscy5maW5kVHJhbnNsYXRpb25JbmZvKFxuICAgICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICAgc3RlcC50cmFuc2xhdGlvbnMsXG4gICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RlcEZvcm1seUNvbmZpZyAmJiBzdGVwRm9ybWx5Q29uZmlnLnByb3BzKSB7XG4gICAgICB0aGlzLnNldFN0ZXBCYXNlUHJvcHMoc3RlcCwgc3RlcEZvcm1seUNvbmZpZyk7XG4gICAgfVxuICAgIGlmIChzdGVwLmRlcGVuZGVudERpY3Rpb25hcnk/LmlzRGljdGlvbmFyeURlcGVuZGVudCkge1xuICAgICAgdGhpcy5zdGVwRGljdGlvbmFyeURlcGVuZGVudElkcy5wdXNoKFxuICAgICAgICBzdGVwLmRlcGVuZGVudERpY3Rpb25hcnkuZGljdGlvbmFyeUNvbnRyb2xJZGVudGlmaWVyXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gc3RlcEZvcm1seUNvbmZpZztcbiAgfVxuXG4gIHRyaWdnZXJDb21wb25lbnRVcGRhdGUoY29udHJvbElkOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNldEZvcm1seUZpZWxkVmFsdWUodGhpcy5mb3JtbHlBbGxTdGVwcywgY29udHJvbElkLCB2YWx1ZSk7XG4gIH1cblxuICBzZXRGb3JtbHlGaWVsZFZhbHVlKFxuICAgIGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSB8IHVuZGVmaW5lZCxcbiAgICBrZXk6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55XG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghZmllbGRzKSByZXR1cm4gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgIGlmIChmaWVsZC5mb3JtQ29udHJvbCkge1xuICAgICAgICAgIGZpZWxkLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmllbGQuZmllbGRHcm91cCAmJiBBcnJheS5pc0FycmF5KGZpZWxkLmZpZWxkR3JvdXApKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5zZXRGb3JtbHlGaWVsZFZhbHVlKGZpZWxkLmZpZWxkR3JvdXAsIGtleSwgdmFsdWUpO1xuICAgICAgICBpZiAoZm91bmQpIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRTeXN0ZW1GaWVsZEZvcm1seUNvbmZpZyhcbiAgICBzdGVwOiBTdGVwRGF0YVxuICApOiBQcm9taXNlPEZvcm1seUZpZWxkQ29uZmlnPiB7XG4gICAgY29uc3QgZm9ybWx5Q29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGxhYmVsOiBzdGVwLm5hbWUsXG4gICAgICAgIGJ1dHRvbnM6IHRoaXMuY29uc3RydWN0QnV0dG9ucyhzdGVwLmJ1dHRvbnMpLFxuICAgICAgICBmbHV4VHlwZTogc3RlcC50eXBlLFxuICAgICAgfSxcbiAgICAgIGZpZWxkR3JvdXA6IFtdLFxuICAgIH07XG5cbiAgICB0aGlzLnNldFN0ZXBCYXNlUHJvcHMoc3RlcCwgZm9ybWx5Q29uZmlnKTtcbiAgICB2YXIgZmllbGRDb25maWcgPSB0aGlzLmNyZWF0ZUZvcm1seVN5c3RlbUZpZWxkQ29uZmlnKHN0ZXApO1xuXG4gICAgaWYgKGZpZWxkQ29uZmlnKSB7XG4gICAgICBpZiAoc3RlcC50cmFuc2xhdGlvbnMpIHtcbiAgICAgICAgbGV0IGxhYmVsczogYW55ID0ge307XG4gICAgICAgIHN0ZXAudHJhbnNsYXRpb25zLmZvckVhY2goKHRyOiBUcmFuc2xhdGlvbkluZm8pID0+IHtcbiAgICAgICAgICBsYWJlbHNbdHIubmFtZV0gPSBVdGlscy5maW5kVHJhbnNsYXRpb24oXG4gICAgICAgICAgICB0ci52YWx1ZXMsXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICBmaWVsZENvbmZpZy5wcm9wcyFbJ2xhYmVscyddID0gbGFiZWxzO1xuICAgICAgICBmaWVsZENvbmZpZy5wcm9wcyFbJ25hbWUnXSA9IFV0aWxzLmZpbmRUcmFuc2xhdGlvbkluZm8oXG4gICAgICAgICAgJ25hbWUnLFxuICAgICAgICAgIHN0ZXAudHJhbnNsYXRpb25zLFxuICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICk7XG4gICAgICAgIGZpZWxkQ29uZmlnLnByb3BzIVsnZGVzY3JpcHRpb24nXSA9IFV0aWxzLmZpbmRUcmFuc2xhdGlvbkluZm8oXG4gICAgICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgICBzdGVwLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICApO1xuICAgICAgICBmb3JtbHlDb25maWcucHJvcHMhWydsYWJlbCddID0gVXRpbHMuZmluZFRyYW5zbGF0aW9uSW5mbyhcbiAgICAgICAgICAnbmFtZScsXG4gICAgICAgICAgc3RlcC50cmFuc2xhdGlvbnMsXG4gICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgKTtcbiAgICAgICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnZGVzY3JpcHRpb24nXSA9IFV0aWxzLmZpbmRUcmFuc2xhdGlvbkluZm8oXG4gICAgICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgICBzdGVwLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZmllbGRDb25maWcucHJvcHMhWydzdGVwc1NldHRpbmdzJ10gPSB0aGlzLnN0ZXBzU2V0dGluZ3M7XG4gICAgICBmb3JtbHlDb25maWcuZmllbGRHcm91cCEucHVzaChmaWVsZENvbmZpZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1seUNvbmZpZztcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3RlcEJhc2VQcm9wcyhzdGVwOiBTdGVwRGF0YSwgZm9ybWx5Q29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZykge1xuICAgIGlmIChmb3JtbHlDb25maWcucHJvcHMpIHtcbiAgICAgIGZvcm1seUNvbmZpZy5wcm9wc1snbmFtZSddID0gc3RlcC5uYW1lO1xuICAgICAgZm9ybWx5Q29uZmlnLnByb3BzWydmbHV4VHlwZSddID0gc3RlcC50eXBlO1xuICAgICAgZm9ybWx5Q29uZmlnLnByb3BzWydzdGVwSWQnXSA9IHN0ZXAuaWRlbnRpZmllcjtcbiAgICAgIGZvcm1seUNvbmZpZy5wcm9wc1snaXNWaXNpYmxlJ10gPSBzdGVwLmlzVmlzaWJsZTtcbiAgICAgIGZvcm1seUNvbmZpZy5wcm9wc1snZGVwZW5kZW50RGljdGlvbmFyeSddID0gc3RlcC5kZXBlbmRlbnREaWN0aW9uYXJ5O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgQ3JlYXRlU2lnbkZpZWxkQ29uZmlnKHN0ZXA6IFN0ZXBEYXRhKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZm9ybWx5LXNpZ24tY29tcG9uZW50JyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhVXVpZCxcbiAgICAgICAgc3RlcERhdGE6IHN0ZXAsXG4gICAgICAgIGRlc2lnbjogdGhpcy5kZXNpZ24sXG4gICAgICAgIGVudjogdGhpcy5lbnYsXG4gICAgICAgIGZsdXg6IHRoaXMuZmx1eCxcbiAgICAgICAgcGFyZW50Rm9ybTogdGhpcy5mb3JtLFxuICAgICAgICBnZXRNb2RlbDogKCkgPT4gdGhpcy5tb2RlbCxcbiAgICAgICAgZXZlbnQ6IGFzeW5jIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50ID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RlcHBlckdvTmV4dEFzeW5jKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBDcmVhdGVEb3dubG9hZERvY3NGaWVsZENvbmZpZyhcbiAgICBjb250cm9sRGF0YTogQmFzZUNvbnRyb2xcbiAgKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZm9ybWx5LWRvd25sb2FkLWRvY3VtZW50cy1jb21wb25lbnQnLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgYXBwSWQ6IHRoaXMuYXBwTW9kZWwuYXBwbGljYXRpb25VdWlkLFxuICAgICAgICBhcHBEYXRhSWQ6IHRoaXMuYXBwRGF0YVV1aWQsXG4gICAgICAgIGNvbnRyb2xEYXRhOiBjb250cm9sRGF0YSxcbiAgICAgICAgZW52OiB0aGlzLmVudixcbiAgICAgICAgZG9jdW1lbnRzRGF0YTogdGhpcy5hcHBNb2RlbC5kb2N1bWVudHMsXG4gICAgICAgIGxhbmdJc286IHRoaXMuY3VycmVudExhbmd1YWdlSXNvLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBDcmVhdGVWaWV3RG9jc0ZpZWxkQ29uZmlnKFxuICAgIGNvbnRyb2xEYXRhOiBCYXNlQ29udHJvbFxuICApOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdmb3JtbHktdmlldy1kb2N1bWVudHMtY29tcG9uZW50JyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGFwcElkOiB0aGlzLmFwcE1vZGVsLmFwcGxpY2F0aW9uVXVpZCxcbiAgICAgICAgYXBwRGF0YUlkOiB0aGlzLmFwcERhdGFVdWlkLFxuICAgICAgICBjb250cm9sRGF0YTogY29udHJvbERhdGEsXG4gICAgICAgIGVudjogdGhpcy5lbnYsXG4gICAgICAgIGRvY3VtZW50c0RhdGE6IHRoaXMuYXBwTW9kZWwuZG9jdW1lbnRzLFxuICAgICAgICBsYW5nSXNvOiB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgQ3JlYXRlVXBsb2FkRG9jc0ZpZWxkQ29uZmlnKFxuICAgIGNvbnRyb2xEYXRhOiBCYXNlQ29udHJvbFxuICApOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdmb3JtbHktdXBsb2FkLWRvY3VtZW50cy1jb21wb25lbnQnLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgYXBwSWQ6IHRoaXMuYXBwTW9kZWwuYXBwbGljYXRpb25VdWlkLFxuICAgICAgICBhcHBEYXRhSWQ6IHRoaXMuYXBwRGF0YVV1aWQsXG4gICAgICAgIGNvbnRyb2xEYXRhOiBjb250cm9sRGF0YSxcbiAgICAgICAgZW52OiB0aGlzLmVudixcbiAgICAgICAgZG9jdW1lbnRzRGF0YTogdGhpcy5hcHBNb2RlbC5kb2N1bWVudHMsXG4gICAgICAgIGxhbmdJc286IHRoaXMuY3VycmVudExhbmd1YWdlSXNvLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBDcmVhdGVHZW5lcmF0ZURvY3NGaWVsZENvbmZpZyhzdGVwOiBTdGVwRGF0YSk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2Zvcm1seS1nZW5lcmF0ZS1kb2N1bWVudHMtY29tcG9uZW50JyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGFwcElkOiB0aGlzLmFwcE1vZGVsLmFwcGxpY2F0aW9uVXVpZCxcbiAgICAgICAgYXBwRGF0YUlkOiB0aGlzLmFwcERhdGFVdWlkLFxuICAgICAgICBzdGVwRGF0YTogc3RlcCxcbiAgICAgICAgZG9jdW1lbnRzRGF0YTogdGhpcy5hcHBNb2RlbC5kb2N1bWVudHMsXG4gICAgICAgIGxhbmdJc286IHRoaXMuY3VycmVudExhbmd1YWdlSXNvLFxuICAgICAgICBldmVudDogYXN5bmMgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQgPT09ICdzdWNjZXNzJykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGVwcGVyR29OZXh0QXN5bmMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBhc3luYyBzdGVwcGVyR29OZXh0QXN5bmMoKSB7XG4gICAgY29uc3Qgc3RlcHBlckNvbXBvbmVudCA9IHRoaXMuZm9ybWx5Q29uZmlnWzBdLnByb3BzIVsnY29tcG9uZW50J107XG4gICAgaWYgKHN0ZXBwZXJDb21wb25lbnQgJiYgc3RlcHBlckNvbXBvbmVudC5uYXZpZ2F0ZU5leHRBc3luYykge1xuICAgICAgYXdhaXQgc3RlcHBlckNvbXBvbmVudC5uYXZpZ2F0ZU5leHRBc3luYygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgQ3JlYXRlRW5yb2xsQ2FyZEZpZWxkQ29uZmlnKHN0ZXA6IFN0ZXBEYXRhKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIGxldCBsYWJlbHM6IGFueSA9IHt9O1xuICAgIE9iamVjdC5rZXlzKHN0ZXAuY29uZmlnKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmIChrZXkuZW5kc1dpdGgoJ0xhYmVsJykpIHtcbiAgICAgICAgbGFiZWxzW2tleV0gPVxuICAgICAgICAgIHN0ZXA/LmNvbmZpZ1trZXldPy5maW5kKFxuICAgICAgICAgICAgKGk6IHsgbGFuZ3VhZ2VJc286IHN0cmluZyB9KSA9PlxuICAgICAgICAgICAgICBpLmxhbmd1YWdlSXNvID09PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICAgICk/LnZhbHVlID8/ICcnO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZm9ybWx5LWVucm9sLWNhcmQtY29tcG9uZW50JyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGFwcElkOiB0aGlzLmFwcE1vZGVsLmFwcGxpY2F0aW9uVXVpZCxcbiAgICAgICAgYXBwRGF0YUlkOiB0aGlzLmFwcERhdGFVdWlkLFxuICAgICAgICBkYXRhVXJsSWQ6IHRoaXMuZGF0YVVybElkLFxuICAgICAgICBzdGVwRGF0YTogc3RlcCxcbiAgICAgICAgbGFiZWxzOiBsYWJlbHMsXG4gICAgICAgIGxhbmdJc286IHRoaXMuY3VycmVudExhbmd1YWdlSXNvLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG4gIHByaXZhdGUgQ3JlYXRlSWRTY2FuRmllbGRDb25maWcoc3RlcDogU3RlcERhdGEpOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gICAgbGV0IGVycm9yTWVzc2FnZXM6IGFueSA9IHt9O1xuXG4gICAgaWYgKHN0ZXAuZXJyb3JzVHJhbnNsYXRpb25zKSB7XG4gICAgICBzdGVwLmVycm9yc1RyYW5zbGF0aW9ucy5mb3JFYWNoKChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIGVycm9yTWVzc2FnZXNbZXJyb3IuY29kZV0gPSBVdGlscy5maW5kVHJhbnNsYXRpb24oXG4gICAgICAgICAgZXJyb3IudHJhbnNsYXRpb25zLFxuICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2Zvcm1seS1zY2FuLWlkJyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGNvbmZpZzogc3RlcC5jb25maWcsXG4gICAgICAgIHN0ZXBUeXBlOiBzdGVwLnR5cGUsXG4gICAgICAgIHN0ZXBJZDogc3RlcC5pZGVudGlmaWVyLFxuICAgICAgICBhcHBEYXRhSWQ6IHRoaXMuYXBwRGF0YVV1aWQgfHwgVXRpbHMuZ2VuZXJhdGVVVUlEKCksXG4gICAgICAgIGFwcElkOiB0aGlzLmFwcE1vZGVsLmFwcGxpY2F0aW9uVXVpZCxcbiAgICAgICAgZXJyb3JNZXNzYWdlczogZXJyb3JNZXNzYWdlcyxcbiAgICAgICAgZXZlbnQ6IChldmVudDogYW55KSA9PiB0aGlzLm9uSWRTY2FuQ29tcGxldGVkKGV2ZW50LCBzdGVwKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgQ3JlYXRlS3ljRmllbGRDb25maWcoc3RlcDogU3RlcERhdGEpOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gICAgY29uc3QgbG9hZGluZ01zZ1RyYW5zbGF0aW9ucyA9IHN0ZXAudHJhbnNsYXRpb25zPy5maW5kKFxuICAgICAgKHQ6IGFueSkgPT4gdC5uYW1lID09PSAnbG9hZGluZ01lc3NhZ2VUcmFuc2xhdGlvbnMnXG4gICAgKTtcblxuICAgIGNvbnN0IHRyYW5zbGF0ZWRMb2FkaW5nTWVzc2FnZSA9XG4gICAgICBsb2FkaW5nTXNnVHJhbnNsYXRpb25zPy52YWx1ZXM/LmZpbmQoXG4gICAgICAgICh2OiBhbnkpID0+IHYubGFuZ3VhZ2VJc28gPT09IHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICApPy52YWx1ZSB8fCAnJztcblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZm9ybWx5LWlkZW50aWZpY2F0aW9uLWNvbXBvbmVudCcsXG4gICAgICBwcm9wczoge1xuICAgICAgICB0b2tlbjogdGhpcy5reWNUb2tlbixcbiAgICAgICAgYXBpX3VybDogdGhpcy5reWNBcGlVcmwsXG4gICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhVXVpZCxcbiAgICAgICAgZW52OiAnRE9DS0VSJywgLy8gQ29uc2lkZXIgbWFraW5nIHRoaXMgZHluYW1pYyBpZiBuZWVkZWRcbiAgICAgICAgcmVkaXJlY3RfaWQ6IHRoaXMua3ljUmVkaXJlY3RJZCxcbiAgICAgICAgcGhvbmVfbnVtYmVyOiAnJyxcbiAgICAgICAgbGFuZ19pc286IHRoaXMua3ljTGFuZ0lzbyxcbiAgICAgICAgc2hvd19jaXRpemVuc2hpcF9zZWxlY3RvcjogdGhpcy5reWNTaG93Q2l0aXplbnNoaXAsXG4gICAgICAgIHNjcm9sbF9tb2RlOiB0aGlzLmt5Y1Njcm9sbE1vZGUsXG4gICAgICAgIG1heFJldHJpZXM6IHN0ZXAuY29uZmlnPy5tYXhLeWNSZXRyaWVzID8/IDMsXG4gICAgICAgIGxvYWRpbmdNZXNzYWdlOiB0cmFuc2xhdGVkTG9hZGluZ01lc3NhZ2UsXG4gICAgICAgIGVjdENvbXBsZXRlZDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZ01lc3NhZ2UgPSB0cmFuc2xhdGVkTG9hZGluZ01lc3NhZ2U7XG4gICAgICAgICAgYXdhaXQgdGhpcy5vcmlnaW5Gb3JtU2lnbmFsckhhbmRsZXJTZXJ2aWNlLmluaXRpYXRlS3ljUHJvY2Vzc2luZyhcbiAgICAgICAgICAgIHRoaXMuYXBwRGF0YVV1aWRcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBDcmVhdGVQaG9uZUVtYWlsRmllbGRDb25maWcoc3RlcDogU3RlcERhdGEpOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdmb3JtbHktdmFsaWRhdGUtY29udGFjdC1pbmZvJyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHN0ZXBEYXRhOiBzdGVwLFxuICAgICAgICBhcHBEYXRhSWQ6IHRoaXMuYXBwRGF0YVV1aWQsXG4gICAgICAgIGRlc2lnbjogdGhpcy5kZXNpZ24sXG4gICAgICAgIGV2ZW50OiBhc3luYyAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChldmVudCA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnN0ZXBwZXJHb05leHRBc3luYygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgQ3JlYXRlVmlld09mZmVyRmllbGRDb25maWcoc3RlcDogU3RlcERhdGEpOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdmb3JtbHktdmlldy1vZmZlcnMnLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgYXBwRGF0YUlkOiB0aGlzLmFwcERhdGFVdWlkLFxuICAgICAgICBzdGVwRGF0YTogc3RlcCxcbiAgICAgICAgZW52OiB0aGlzLmVudixcbiAgICAgICAgYXBwTW9kZWw6IHRoaXMuYXBwTW9kZWwsXG4gICAgICAgIGxhbmdJc286IHRoaXMuY3VycmVudExhbmd1YWdlSXNvLFxuICAgICAgICBldmVudDogKGV2ZW50OiBhbnkpID0+IHRoaXMub25PZmZlclNlbGVjdGVkKGV2ZW50LCBzdGVwKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgQ3JlYXRlUGF1c2VGaWVsZENvbmZpZyhzdGVwOiBTdGVwRGF0YSk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2Zvcm1seS1maWVsZC1wYXVzZScsXG4gICAgICBwcm9wczoge1xuICAgICAgICBpZGVudGlmaWVyOiBzdGVwLmlkZW50aWZpZXIsXG4gICAgICAgIGNvbmZpZzogc3RlcC5jb25maWcsXG4gICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhVXVpZCxcbiAgICAgICAgc3RlcERhdGE6IHN0ZXAsXG4gICAgICAgIGVudjogdGhpcy5lbnYsXG4gICAgICAgIGFwcE1vZGVsOiB0aGlzLmFwcE1vZGVsLFxuICAgICAgICBsYW5nSXNvOiB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgQ3JlYXRlT3BlbkJhbmtpbmdGaWVsZENvbmZpZyhzdGVwOiBTdGVwRGF0YSk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICAvLyBQYXNzIHRoZSBmdWxsIHN0ZXAgZGF0YSB3aGljaCBpbmNsdWRlcyBhbGwgdHJhbnNsYXRpb25zXG4gICAgLy8gVGhlIGNvbXBvbmVudCB3aWxsIGV4dHJhY3Qgd2hhdCBpdCBuZWVkcyBiYXNlZCBvbiBjdXJyZW50IGxhbmd1YWdlXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdmb3JtbHktb3Blbi1iYW5raW5nJyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGlkZW50aWZpZXI6IHN0ZXAuaWRlbnRpZmllcixcbiAgICAgICAgY29uZmlnOiBzdGVwLmNvbmZpZyxcbiAgICAgICAgYXBwRGF0YUlkOiB0aGlzLmFwcERhdGFVdWlkLFxuICAgICAgICBzdGVwRGF0YTogc3RlcCwgLy8gVGhpcyBjb250YWlucyB0aGUgZnVsbCB0cmFuc2xhdGlvbnMgYXJyYXlcbiAgICAgICAgZW52OiB0aGlzLmVudixcbiAgICAgICAgYXBwTW9kZWw6IHRoaXMuYXBwTW9kZWwsXG4gICAgICAgIGxhbmdJc286IHRoaXMuY3VycmVudExhbmd1YWdlSXNvLFxuICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICBpbml0aWFsTWVzc2FnZTogVXRpbHMuZmluZFRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgc3RlcC5jb25maWc/LmluaXRpYWxNZXNzYWdlVHJhbnNsYXRpb25zIHx8IFtdLFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgICApLFxuICAgICAgICAgIHdhaXRpbmdNZXNzYWdlOiBVdGlscy5maW5kVHJhbnNsYXRpb24oXG4gICAgICAgICAgICBzdGVwLmNvbmZpZz8ud2FpdGluZ01lc3NhZ2VUcmFuc2xhdGlvbnMgfHwgW10sXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICAgICksXG4gICAgICAgICAgY29uc2VudEVycm9yTWVzc2FnZTogVXRpbHMuZmluZFRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgc3RlcC5jb25maWc/LmNvbnNlbnRFcnJvck1lc3NhZ2VUcmFuc2xhdGlvbnMgfHwgW10sXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICAgICksXG4gICAgICAgICAgY29tcGxldGlvbk1lc3NhZ2U6IFV0aWxzLmZpbmRUcmFuc2xhdGlvbihcbiAgICAgICAgICAgIHN0ZXAuY29uZmlnPy5jb21wbGV0aW9uTWVzc2FnZVRyYW5zbGF0aW9ucyB8fCBbXSxcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICAgKSxcbiAgICAgICAgICByZXRyeUJ1dHRvbkxhYmVsOiBVdGlscy5maW5kVHJhbnNsYXRpb24oXG4gICAgICAgICAgICBzdGVwLmNvbmZpZz8ucmV0cnlCdXR0b25MYWJlbFRyYW5zbGF0aW9ucyB8fCBbXSxcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgZXZlbnQ6IChldmVudDogYW55KSA9PiB0aGlzLm9uT3BlbkJhbmtpbmdFdmVudChldmVudCwgc3RlcCksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIENyZWF0ZVN0YXR1c0ZpZWxkQ29uZmlnKHN0ZXA6IFN0ZXBEYXRhKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZm9ybWx5LXN0YXR1cycsXG4gICAgICBwcm9wczoge1xuICAgICAgICBjb25maWc6IHN0ZXAuY29uZmlnLFxuICAgICAgICBzdGVwRGF0YTogc3RlcCxcbiAgICAgICAgYXBwRGF0YUlkOiB0aGlzLmFwcERhdGFVdWlkLFxuICAgICAgICBhcHBJZDogdGhpcy5hcHBNb2RlbC5hcHBsaWNhdGlvblV1aWQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZvcm1seVN5c3RlbUZpZWxkQ29uZmlnKFxuICAgIHN0ZXA6IFN0ZXBEYXRhXG4gICk6IEZvcm1seUZpZWxkQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKHN0ZXAudHlwZSkge1xuICAgICAgY2FzZSBGbHV4VHlwZS5LeWM6XG4gICAgICAgIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGVLeWNGaWVsZENvbmZpZyhzdGVwKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRmx1eFR5cGUuRW1haWw6XG4gICAgICBjYXNlIEZsdXhUeXBlLlBob25lOiB7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZVBob25lRW1haWxGaWVsZENvbmZpZyhzdGVwKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgRmx1eFR5cGUuQWN0aW9uOiB7XG4gICAgICAgIC8vIEFjdGlvbiBzdGVwcyBhcmUgbm93IGhhbmRsZWQgYXV0b21hdGljYWxseSBieSBBY3Rpb25TdGVwSGFuZGxlclxuICAgICAgICAvLyBUaGV5IHNob3VsZCBub3QgYXBwZWFyIGFzIHZpc2libGUgZm9ybWx5IGNvbXBvbmVudHNcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGNhc2UgRmx1eFR5cGUuSWRTY2FuOiB7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZUlkU2NhbkZpZWxkQ29uZmlnKHN0ZXApO1xuICAgICAgfVxuICAgICAgY2FzZSBGbHV4VHlwZS5HZW5lcmF0ZURvY3VtZW50OiB7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZUdlbmVyYXRlRG9jc0ZpZWxkQ29uZmlnKHN0ZXApO1xuICAgICAgfVxuICAgICAgY2FzZSBGbHV4VHlwZS5TaWduOiB7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZVNpZ25GaWVsZENvbmZpZyhzdGVwKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgRmx1eFR5cGUuVmlld09mZmVyOiB7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZVZpZXdPZmZlckZpZWxkQ29uZmlnKHN0ZXApO1xuICAgICAgfVxuICAgICAgY2FzZSBGbHV4VHlwZS5TdGF0dXM6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlU3RhdHVzRmllbGRDb25maWcoc3RlcCk7XG4gICAgICB9XG4gICAgICBjYXNlIEZsdXhUeXBlLkVVUExBVEVTQzoge1xuICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGVFbnJvbGxDYXJkRmllbGRDb25maWcoc3RlcCk7XG4gICAgICB9XG4gICAgICBjYXNlIEZsdXhUeXBlLk5FVE9QSUE6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlRW5yb2xsQ2FyZEZpZWxkQ29uZmlnKHN0ZXApO1xuICAgICAgfVxuICAgICAgY2FzZSBGbHV4VHlwZS5QYXVzZToge1xuICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGVQYXVzZUZpZWxkQ29uZmlnKHN0ZXApO1xuICAgICAgfVxuICAgICAgY2FzZSBGbHV4VHlwZS5PcGVuQmFua2luZzoge1xuICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGVPcGVuQmFua2luZ0ZpZWxkQ29uZmlnKHN0ZXApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgb25PZmZlclNlbGVjdGVkKG9mZmVySWQ6IGFueSwgc3RlcDogU3RlcERhdGEpIHtcbiAgICB0aGlzLmZvcm1seVVwZGF0ZUFuZEdvTmV4dC5lbWl0KHsgc2VsZWN0ZWRPZmZlcklkOiBvZmZlcklkIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvblNpZ25FdmVudChldmVudDogYW55LCBzdGVwOiBTdGVwRGF0YSkge1xuICAgIGNvbnNvbGUubG9nKCdTaWduIGV2ZW50IHJlY2VpdmVkOicsIGV2ZW50KTtcbiAgICB0aGlzLnVwZGF0ZVN0ZXBCdXR0b25TdGF0ZShzdGVwKTtcbiAgfVxuXG4gIHByaXZhdGUgb25PcGVuQmFua2luZ0V2ZW50KGV2ZW50OiBhbnksIHN0ZXA6IFN0ZXBEYXRhKSB7XG4gICAgY29uc29sZS5sb2coJ09wZW5CYW5raW5nIGV2ZW50IHJlY2VpdmVkOicsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQgPT09ICdzdWNjZXNzJykge1xuICAgICAgLy8gT3BlbiBCYW5raW5nIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVxuICAgICAgdGhpcy51cGRhdGVTdGVwQnV0dG9uU3RhdGUoc3RlcCk7XG4gICAgICAvLyBBdXRvLXByb2NlZWQgdG8gbmV4dCBzdGVwXG4gICAgICB0aGlzLmZvcm1seVVwZGF0ZUFuZEdvTmV4dC5lbWl0KHt9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uSWRTY2FuQ29tcGxldGVkKGV2ZW50OiBhbnksIHN0ZXA6IFN0ZXBEYXRhKSB7XG4gICAgY29uc29sZS5sb2coJ1NpZ24gZXZlbnQgcmVjZWl2ZWQ6JywgZXZlbnQpO1xuICAgIGNvbnN0IGZpbGxEYXRhID0gSlNPTi5wYXJzZShldmVudC5maWxsRGF0YSk7XG4gICAgY29uc3Qgc3RlcEZpbGxEYXRhID0gZmlsbERhdGEuZmx1eC5maW5kKFxuICAgICAgKHM6IHsgc3RlcElkOiBzdHJpbmcgfSkgPT4gcy5zdGVwSWQgPT0gc3RlcC5pZGVudGlmaWVyXG4gICAgKTtcbiAgICBzdGVwRmlsbERhdGEuc2VjdGlvbnMuZm9yRWFjaChcbiAgICAgIChzOiB7XG4gICAgICAgIGNvbnRyb2xzOiB7XG4gICAgICAgICAgY29udHJvbElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgZmlsbFZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIH1bXTtcbiAgICAgIH0pID0+IHtcbiAgICAgICAgcy5jb250cm9scy5mb3JFYWNoKFxuICAgICAgICAgIChjOiB7XG4gICAgICAgICAgICBjb250cm9sSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGZpbGxWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChjLmNvbnRyb2xJZCkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHtcbiAgICAgICAgICAgICAgICBbYy5jb250cm9sSWRdOiB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZTogYy5maWxsVmFsdWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtLmNvbnRhaW5zKGMuY29udHJvbElkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbChjLmNvbnRyb2xJZCwgbmV3IEZvcm1Db250cm9sKGMuZmlsbFZhbHVlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlU3RlcEJ1dHRvblN0YXRlKHN0ZXApO1xuICB9XG5cbiAgdXBkYXRlU3RlcEJ1dHRvblN0YXRlKHN0ZXA6IFN0ZXBEYXRhKSB7XG4gICAgbGV0IGZvcm1seVN0ZXBGaWVsZCA9IHRoaXMuZm9ybWx5Q29uZmlnWzBdLmZpZWxkR3JvdXA/LmZpbmQoKGZpZWxkKSA9PlxuICAgICAgZmllbGQuZmllbGRHcm91cD8uZmluZCgoZikgPT4gZi5wcm9wcz8uWydzdGVwSWQnXSA9PT0gc3RlcC5pZGVudGlmaWVyKVxuICAgICk7XG5cbiAgICBpZiAoIWZvcm1seVN0ZXBGaWVsZCkge1xuICAgICAgZm9ybWx5U3RlcEZpZWxkID0gdGhpcy5mb3JtbHlDb25maWdbMF0uZmllbGRHcm91cD8uZmluZChcbiAgICAgICAgKGZpZWxkKSA9PiBmaWVsZC5wcm9wcz8uWydzdGVwSWQnXSA9PT0gc3RlcC5pZGVudGlmaWVyXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChmb3JtbHlTdGVwRmllbGQpIHtcbiAgICAgIGZvcm1seVN0ZXBGaWVsZC5wcm9wcyA9IHtcbiAgICAgICAgLi4uZm9ybWx5U3RlcEZpZWxkLnByb3BzLFxuICAgICAgICBidXR0b25zRGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgfTtcbiAgICAgIHRoaXMudXBkYXRlRm9ybWx5Q29uZmlnKCk7XG4gICAgICB0aGlzLmZvcm1seUNvbmZpZ1VwZGF0ZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkUmVuZGVyZWRDc3MoKSB7XG4gICAgY29uc3Qgc3R5bGVTdHJpbmcgPSBGb3JtQ3NzSGVscGVyLmNvbnZlcnRUb1N0eWxlU3RyaW5nKFxuICAgICAgdGhpcy5kZXNpZ24sXG4gICAgICB0aGlzLnNob3dEaXNwbGF5TW9kZVxuICAgICk7XG5cbiAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgc3R5bGVFbGVtZW50LmlkID0gJ3JlbmRlcmVkLWNzcyc7XG4gICAgY29uc3QgcmVuZEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlbmRlcmVkLWNzcycpO1xuICAgIGlmIChyZW5kRWwpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuYm9keSwgcmVuZEVsKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChcbiAgICAgIHN0eWxlRWxlbWVudCxcbiAgICAgIHRoaXMucmVuZGVyZXIuY3JlYXRlVGV4dChVdGlscy5yZW1vdmVOZXdMaW5lcyhzdHlsZVN0cmluZykpXG4gICAgKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmJvZHksIHN0eWxlRWxlbWVudCk7XG4gIH1cblxuICBhc3luYyBidWlsZFNlY3Rpb25zRmllbGRHcm91cEFzeW5jKFxuICAgIHN0ZXA6IFN0ZXBEYXRhIHwgdW5kZWZpbmVkLFxuICAgIHNlY3Rpb25zOiBTZWN0aW9uRGF0YVtdXG4gICk6IFByb21pc2U8Rm9ybWx5RmllbGRDb25maWdbXT4ge1xuICAgIGNvbnN0IHN0ZXBTZWN0aW9uczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBzZWN0aW9ucyAmJiBpbmRleCA8IHNlY3Rpb25zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3Qgc2VjdGlvbiA9IHNlY3Rpb25zW2luZGV4XTtcbiAgICAgIGxldCBzZXBhcmF0b3JGb3JtbHlDb25maWc6IGFueSA9IHt9O1xuICAgICAgaWYgKHNlY3Rpb24uc2hvd1NlY3Rpb25UaXRsZSkge1xuICAgICAgICBzZXBhcmF0b3JGb3JtbHlDb25maWcgPSB7XG4gICAgICAgICAgdHlwZTogJ3NlcGFyYXRvcicsXG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIHRpdGxlOlxuICAgICAgICAgICAgICBzZWN0aW9uLnRyYW5zbGF0aW9ucz8uZmluZChcbiAgICAgICAgICAgICAgICAodDogYW55KSA9PiB0Lmxhbmd1YWdlSXNvID09PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICAgICAgICApPy52YWx1ZSA/PyAnJyxcblxuICAgICAgICAgICAgZGVzaWduOiB0aGlzLmRlc2lnbixcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VjdGlvbi5zaG93U2VjdGlvblNlcGFyYXRvcikge1xuICAgICAgICBzZXBhcmF0b3JGb3JtbHlDb25maWcgPSB7XG4gICAgICAgICAgLi4uc2VwYXJhdG9yRm9ybWx5Q29uZmlnLFxuICAgICAgICAgIHR5cGU6ICdzZXBhcmF0b3InLFxuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAuLi5zZXBhcmF0b3JGb3JtbHlDb25maWcucHJvcHMsXG4gICAgICAgICAgICBzaG93U2VwYXJhdG9yOiBzZWN0aW9uLnNob3dTZWN0aW9uU2VwYXJhdG9yLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWN0aW9uLmRlcGVuZGVudERpY3Rpb25hcnkpIHtcbiAgICAgICAgdGhpcy5hdHRhY2hUb0RlcGVuZGVudERpY3Rpb25hcnlJZk5lY2Vzc2FyeShcbiAgICAgICAgICBzZWN0aW9uLmRlcGVuZGVudERpY3Rpb25hcnksXG4gICAgICAgICAgc2VwYXJhdG9yRm9ybWx5Q29uZmlnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzdGVwU2VjdGlvbnMucHVzaChzZXBhcmF0b3JGb3JtbHlDb25maWcpO1xuXG4gICAgICBjb25zdCBzZWN0aW9uRm9ybWx5Q29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgdHlwZTogJ2N1c3RvbS1zZWN0aW9uJyxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBsYWJlbDogc2VjdGlvbi50aXRsZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgIHNlY3Rpb24udHJhbnNsYXRpb25zPy5maW5kKFxuICAgICAgICAgICAgICAodDogYW55KSA9PiB0Lmxhbmd1YWdlSXNvID09PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICAgICAgKT8udmFsdWUgPz8gJycsXG4gICAgICAgICAgZGVzaWduOiB0aGlzLmRlc2lnbixcbiAgICAgICAgfSxcbiAgICAgICAgZmllbGRHcm91cDogYXdhaXQgdGhpcy5idWlsZENvbnRyb2xzRmllbGRHcm91cEFzeW5jKFxuICAgICAgICAgIHN0ZXAsXG4gICAgICAgICAgc2VjdGlvbi5jb250cm9scyB8fCBbXSxcbiAgICAgICAgICBzZWN0aW9uLnByZXNlbnRhdGlvbkNvbnRyb2xzIHx8IFtdXG4gICAgICAgICksXG4gICAgICAgIGZpZWxkR3JvdXBDbGFzc05hbWU6ICdkaXNwbGF5LWZsZXgnLFxuICAgICAgfTtcbiAgICAgIGlmIChzZWN0aW9uLmRlcGVuZGVudERpY3Rpb25hcnkpIHtcbiAgICAgICAgdGhpcy5hdHRhY2hUb0RlcGVuZGVudERpY3Rpb25hcnlJZk5lY2Vzc2FyeShcbiAgICAgICAgICBzZWN0aW9uLmRlcGVuZGVudERpY3Rpb25hcnksXG4gICAgICAgICAgc2VjdGlvbkZvcm1seUNvbmZpZ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBzdGVwU2VjdGlvbnMucHVzaChzZWN0aW9uRm9ybWx5Q29uZmlnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RlcFNlY3Rpb25zO1xuICB9XG5cbiAgYXN5bmMgYnVpZERpc3BsYXlTdGVwKCk6IFByb21pc2U8Rm9ybWx5RmllbGRDb25maWc+IHtcbiAgICBsZXQgc3RlcEZvcm1seUNvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSB7fTtcbiAgICBpZiAodGhpcy5kaXNwbGF5Py5zZWN0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgc3RlcEZvcm1seUNvbmZpZyA9IHtcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAvLyBsYWJlbDogc3RlcC5uYW1lLFxuICAgICAgICAgIC8vIGJ1dHRvbnM6IHRoaXMuY29uc3RydWN0QnV0dG9ucyhzdGVwLmJ1dHRvbnMpLFxuICAgICAgICAgIC8vICBkZXBlbmRlbnREaWN0aW9uYXJ5OiBzdGVwLmRlcGVuZGVudERpY3Rpb25hcnksXG4gICAgICAgIH0sXG4gICAgICAgIGZpZWxkR3JvdXA6IGF3YWl0IHRoaXMuYnVpbGRTZWN0aW9uc0ZpZWxkR3JvdXBBc3luYyhcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdGhpcy5kaXNwbGF5LnNlY3Rpb25zXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gc3RlcEZvcm1seUNvbmZpZztcbiAgfVxuXG4gIGFkZE5ld1Jvd1RvRm9ybUZpZWxkc0lmTmVjZXNzYXJ5KFxuICAgIGZpZWxkR3JvdXA6IEZvcm1seUZpZWxkQ29uZmlnW10sXG4gICAgbmV3Um93OiBGb3JtbHlGaWVsZENvbmZpZ1xuICApIHtcbiAgICBpZiAobmV3Um93LmZpZWxkR3JvdXAgJiYgbmV3Um93LmZpZWxkR3JvdXAubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5jYWxjdWxhdGVGb3JtRmllbGRzV2lkdGgobmV3Um93LmZpZWxkR3JvdXApO1xuICAgICAgZmllbGRHcm91cC5wdXNoKG5ld1Jvdyk7XG4gICAgfVxuICB9XG5cbiAgY2FsY3VsYXRlRm9ybUZpZWxkc1dpZHRoKGZvcm1GaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10pIHtcbiAgICBjb25zdCBjb2xXaWR0aFBlckl0ZW0gPSAxMiAvIGZvcm1GaWVsZHMubGVuZ3RoO1xuICAgIGZvcm1GaWVsZHMuZm9yRWFjaCgoZikgPT4ge1xuICAgICAgZi5jbGFzc05hbWUgPSAnY29sLScgKyBjb2xXaWR0aFBlckl0ZW07XG4gICAgfSk7XG4gIH1cblxuICBnZXRQZXJjZW50YWdlQ2xhc3NOYW1lKHBlcmNlbnRhZ2VEaW1lbnNpb246IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgdG90YWxDb2x1bW5zID0gMTI7IC8vIDEyLWNvbHVtbiBncmlkXG4gICAgY29uc3Qgc3BhbiA9IE1hdGgucm91bmQoKHBlcmNlbnRhZ2VEaW1lbnNpb24gLyAxMDApICogdG90YWxDb2x1bW5zKTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBgcGVyY2VudGFnZS13aWR0aC0ke3NwYW59YDtcblxuICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2xhc3NOYW1lKSkge1xuICAgICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICBzdHlsZS5pZCA9IGNsYXNzTmFtZTtcbiAgICAgIHN0eWxlLmlubmVySFRNTCA9IGBcbiAgICAgICAgLiR7Y2xhc3NOYW1lfSB7XG4gICAgICAgICAgZ3JpZC1jb2x1bW46IHNwYW4gJHtzcGFufTtcbiAgICAgICAgfVxuICAgICAgYDtcbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgY3JlYXRlRmlsbGVyQ29udHJvbChzcGFuOiBudW1iZXIpOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdyb3ctZmlsbGVyJyxcbiAgICAgIGNsYXNzTmFtZTogYHBlcmNlbnRhZ2Utd2lkdGgtJHtzcGFufWAsXG4gICAgICBwcm9wczoge1xuICAgICAgICBsYWJlbDogJycsXG4gICAgICAgIGRpc2FibGVkOiB0cnVlLFxuICAgICAgICBoaWRlOiB0cnVlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBidWlsZENvbnRyb2xzRmllbGRHcm91cEFzeW5jKFxuICAgIHN0ZXA6IFN0ZXBEYXRhIHwgdW5kZWZpbmVkLFxuICAgIGNvbnRyb2xzOiBDb250cm9sRGF0YVtdLFxuICAgIHByZXNlbnRhdGlvbkNvbnRyb2xzOiBQcmVzZW50YXRpb25Db250cm9sW11cbiAgKTogUHJvbWlzZTxGb3JtbHlGaWVsZENvbmZpZ1tdPiB7XG4gICAgY29uc3QgcmVzdWx0OiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107XG4gICAgbGV0IHJvd0l0ZW1zOiAoQ29udHJvbERhdGEgfCBQcmVzZW50YXRpb25Db250cm9sKVtdID0gW107XG4gICAgY29udHJvbHMgPSBjb250cm9scy5maWx0ZXIoKGMpID0+ICFjLmlzT25seUZvckNvbmZpZyk7XG5cbiAgICAvLyBGaWx0ZXIgb3V0IGNvbnRyb2xzIHRoYXQgYXJlIGluY29tcGxldGVcbiAgICBjb250cm9scyA9IGNvbnRyb2xzLmZpbHRlcigoYykgPT4ge1xuICAgICAgLy8gU2tpcCBjb250cm9scyB0aGF0IGFyZSBtaXNzaW5nIGVzc2VudGlhbCBkYXRhXG4gICAgICBpZiAoXG4gICAgICAgIGMudHlwZSA9PT0gU3RlcENvbnRyb2xUeXBlLkRpY3Rpb25hcnkgJiZcbiAgICAgICAgIWMuc3BlY2lmaWNDb250cm9sRGF0YT8uZGljdGlvbmFyeVVVSURcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBwcm9jZXNzUm93ID0gYXN5bmMgKFxuICAgICAgaXRlbXM6IChDb250cm9sRGF0YSB8IFByZXNlbnRhdGlvbkNvbnRyb2wpW11cbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdO1xuICAgICAgY29uc3QgdG90YWwgPSAxMjtcbiAgICAgIGNvbnN0IGJ1aWx0OiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107XG4gICAgICBjb25zdCBhdXRvOiB7XG4gICAgICAgIGM6IENvbnRyb2xEYXRhIHwgUHJlc2VudGF0aW9uQ29udHJvbDtcbiAgICAgICAgZjogRm9ybWx5RmllbGRDb25maWc7XG4gICAgICB9W10gPSBbXTtcbiAgICAgIGxldCB1c2VkID0gMDtcbiAgICAgIGZvciAoY29uc3QgaSBvZiBpdGVtcykge1xuICAgICAgICBpZiAoJ2NvbGxlY3Rpb25Db250cm9sSWRlbnRpZmllcicgaW4gaSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGJ1aWx0LnB1c2goXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmJ1aWxkUHJlc2VudGF0aW9uRm9ybUZpZWxkQXN5bmMoXG4gICAgICAgICAgICAgIHN0ZXAsXG4gICAgICAgICAgICAgIGkgYXMgUHJlc2VudGF0aW9uQ29udHJvbFxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoJ2FwaU1ldGhvZElkJyBpbiBpID09PSB0cnVlKSB7XG4gICAgICAgICAgYnVpbHQucHVzaChcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYnVpbGRBcGlNZXRob2RGb3JtRmllbGRBc3luYyhcbiAgICAgICAgICAgICAgc3RlcCxcbiAgICAgICAgICAgICAgaSBhcyBQcmVzZW50YXRpb25Db250cm9sXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBidWlsdC5wdXNoKGF3YWl0IHRoaXMuYnVpbGRGb3JtRmllbGRBc3luYyhzdGVwLCBpIGFzIENvbnRyb2xEYXRhKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYyA9IGl0ZW1zW2ldO1xuICAgICAgICBjb25zdCBmID0gYnVpbHRbaV07XG4gICAgICAgIGlmIChjLmRpbWVuc2lvblR5cGUgPT09IERpbWVuc2lvblR5cGUuUGVyY2VudGFnZSkge1xuICAgICAgICAgIGlmIChjLmF1dG9EaW1lbnNpb24pIHtcbiAgICAgICAgICAgIGF1dG8ucHVzaCh7IGMsIGYgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSBNYXRoLnJvdW5kKChjLmRpbWVuc2lvbiAvIDEwMCkgKiB0b3RhbCk7XG4gICAgICAgICAgICB1c2VkICs9IHM7XG4gICAgICAgICAgICBjb25zdCBwZXJjZW50YWdlQ2xhc3MgPSB0aGlzLmdldFBlcmNlbnRhZ2VDbGFzc05hbWUoYy5kaW1lbnNpb24pO1xuICAgICAgICAgICAgZi5jbGFzc05hbWUgPSBgJHtmLmNsYXNzTmFtZX0gJHtwZXJjZW50YWdlQ2xhc3N9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYy5kaW1lbnNpb25UeXBlID09PSBEaW1lbnNpb25UeXBlLlBpeGVscykge1xuICAgICAgICAgIGNvbnN0IHMgPSBNYXRoLnJvdW5kKChjLmRpbWVuc2lvbiAvIHdpbmRvdy5pbm5lcldpZHRoKSAqIHRvdGFsKTtcbiAgICAgICAgICB1c2VkICs9IHM7XG4gICAgICAgICAgY29uc3QgcGVyY2VudGFnZUNsYXNzID0gdGhpcy5nZXRQZXJjZW50YWdlQ2xhc3NOYW1lKFxuICAgICAgICAgICAgKHMgLyB0b3RhbCkgKiAxMDBcbiAgICAgICAgICApO1xuICAgICAgICAgIGYuY2xhc3NOYW1lID0gYCR7Zi5jbGFzc05hbWV9ICR7cGVyY2VudGFnZUNsYXNzfWA7XG4gICAgICAgIH0gZWxzZSBpZiAoYy5hdXRvRGltZW5zaW9uKSB7XG4gICAgICAgICAgYXV0by5wdXNoKHsgYywgZiB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1c2VkICs9IDE7XG4gICAgICAgICAgY29uc3QgcGVyY2VudGFnZUNsYXNzID0gdGhpcy5nZXRQZXJjZW50YWdlQ2xhc3NOYW1lKFxuICAgICAgICAgICAgKDEgLyB0b3RhbCkgKiAxMDBcbiAgICAgICAgICApO1xuICAgICAgICAgIGYuY2xhc3NOYW1lID0gYCR7Zi5jbGFzc05hbWV9ICR7cGVyY2VudGFnZUNsYXNzfWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlbSA9IHRvdGFsIC0gdXNlZDtcbiAgICAgIGlmIChhdXRvLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qgc2hhcmUgPSBNYXRoLm1heChNYXRoLmZsb29yKHJlbSAvIGF1dG8ubGVuZ3RoKSwgMSk7XG4gICAgICAgIGZvciAoY29uc3QgYSBvZiBhdXRvKSB7XG4gICAgICAgICAgY29uc3QgcGVyY2VudGFnZUNsYXNzID0gdGhpcy5nZXRQZXJjZW50YWdlQ2xhc3NOYW1lKFxuICAgICAgICAgICAgKHNoYXJlIC8gdG90YWwpICogMTAwXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhLmYuY2xhc3NOYW1lID0gYCR7YS5mLmNsYXNzTmFtZX0gJHtwZXJjZW50YWdlQ2xhc3N9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZmllbGRzLnB1c2goLi4uYnVpbHQpO1xuICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICB9O1xuICAgIGZvciAoY29uc3QgYyBvZiBbLi4uY29udHJvbHMsIC4uLnByZXNlbnRhdGlvbkNvbnRyb2xzXSkge1xuICAgICAgaWYgKFxuICAgICAgICAoJ3R5cGUnIGluIGMgJiYgYy50eXBlID09PSBTdGVwQ29udHJvbFR5cGUuTmV3Um93KSB8fFxuICAgICAgICBjLnR5cGUgPT0gUHJlc2VudGF0aW9uQ29udHJvbFR5cGUuTmV3Um93XG4gICAgICApIHtcbiAgICAgICAgaWYgKHJvd0l0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaCguLi4oYXdhaXQgcHJvY2Vzc1Jvdyhyb3dJdGVtcykpKTtcbiAgICAgICAgICByb3dJdGVtcyA9IFtdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3dJdGVtcy5wdXNoKGMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocm93SXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0LnB1c2goLi4uKGF3YWl0IHByb2Nlc3NSb3cocm93SXRlbXMpKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXRQaXhlbENsYXNzTmFtZShwaXhlbERpbWVuc2lvbjogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBgcGl4ZWwtd2lkdGgtJHtwaXhlbERpbWVuc2lvbn1gO1xuICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2xhc3NOYW1lKSkge1xuICAgICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICBzdHlsZS5pZCA9IGNsYXNzTmFtZTtcbiAgICAgIHN0eWxlLmlubmVySFRNTCA9IGBcbiAgICAgICAgLiR7Y2xhc3NOYW1lfSB7XG4gICAgICAgICAgd2lkdGg6ICR7cGl4ZWxEaW1lbnNpb259cHg7XG4gICAgICAgIH1cbiAgICAgIGA7XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkRm9ybUZpZWxkQXN5bmMoXG4gICAgc3RlcDogU3RlcERhdGEgfCB1bmRlZmluZWQsXG4gICAgY29udHJvbDogQ29udHJvbERhdGFcbiAgKTogUHJvbWlzZTxGb3JtbHlGaWVsZENvbmZpZz4ge1xuICAgIGxldCBpbml0aWFsVHlwZSA9ICdpbnB1dCc7IC8vIERlZmF1bHQgdHlwZVxuICAgIGxldCBjb21wb25lbnRTdHlsZUtleSA9IGAuY29tcG9uZW50LXRleHQtZmllbGRgOyAvLyBEZWZhdWx0IHN0eWxlIGZvciB0ZXh0IGlucHV0XG4gICAgY29uc3QgYmFzZVN0eWxlID0gdGhpcy5kZXNpZ25bYC5mb250LSR7aW5pdGlhbFR5cGV9YF0gfHwge307XG4gICAgY29uc3QgY29udHJvbFN0eWxlU3RyaW5nID1cbiAgICAgIHRoaXMuc3R5bGVPYmplY3RUb1N0cmluZ0V4Y2VwdEJhY2tncm91bmQoYmFzZVN0eWxlKTtcbiAgICBsZXQgcGF0dGVybiA9ICcnO1xuICAgIGlmIChjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LmFsbG93ZWRDaGFyYWN0ZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwYXR0ZXJuID0gbmV3IFJlZ0V4cChjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGEuYWxsb3dlZENoYXJhY3RlcnMpXG4gICAgICAgICAgLnNvdXJjZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignaW5jb3JyZWN0IHJlZ2V4IHBhdHRlcm4nLCBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb21wb25lbnRzVG9FeGNsdWRlRnJvbVN0eWxlID0gW1xuICAgICAgJy5jb21wb25lbnQtdGV4dC1maWVsZCcsXG4gICAgICAnLmNvbXBvbmVudC1jaGVja2JveCcsXG4gICAgICAnLmNvbXBvbmVudC1yYWRpbycsXG4gICAgICAnLmNvbXBvbmVudC1kYXRlJyxcbiAgICAgICcuY29tcG9uZW50LWRhdGEnLFxuICAgIF07XG4gICAgbGV0IGZvcm1seUNvbmZpZyA9IHRoaXMuZ2V0RGVmYXVsdEZvcm1seUZpZWxkQ29uZmlnKFxuICAgICAgY29udHJvbCxcbiAgICAgIGluaXRpYWxUeXBlLFxuICAgICAgcGF0dGVybixcbiAgICAgIGNvbXBvbmVudFN0eWxlS2V5LFxuICAgICAgY29tcG9uZW50c1RvRXhjbHVkZUZyb21TdHlsZVxuICAgICk7XG4gICAgLy9jb250cm9sLnNwZWNpZmljQ29udHJvbERhdGEudHlwZSA9PT0gMyAgaXMgZW1haWxcbiAgICBpZiAoY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy50eXBlID09PSAzKSB7XG4gICAgICB0aGlzLmFkZFZhbGlkYXRvcnMoZm9ybWx5Q29uZmlnLCBjb250cm9sKTtcbiAgICB9XG5cbiAgICBpZiAoY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5pc0FwaVZhbGlkYXRpb24pIHtcbiAgICAgIHRoaXMuYWRkQXBpVmFsaWRhdG9ycyhmb3JtbHlDb25maWcsIGNvbnRyb2wpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoY29udHJvbC50eXBlKSB7XG4gICAgICBjYXNlIFN0ZXBDb250cm9sVHlwZS5NYW51YWxJbnB1dDogLy8gVGV4dFxuICAgICAgICB2YXIgc3ViVHlwZSA9IGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YVxuICAgICAgICAgID8udHlwZSBhcyBNYW51YWxJbnB1dENvbnRyb2xUeXBlO1xuICAgICAgICBzd2l0Y2ggKHN1YlR5cGUpIHtcbiAgICAgICAgICBjYXNlIE1hbnVhbElucHV0Q29udHJvbFR5cGUuTnVtZXJpYzpcbiAgICAgICAgICAgIGZvcm1seUNvbmZpZy50eXBlID0gJ251bWJlcic7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgTWFudWFsSW5wdXRDb250cm9sVHlwZS5FbWFpbDpcbiAgICAgICAgICBjYXNlIE1hbnVhbElucHV0Q29udHJvbFR5cGUuVGV4dDpcbiAgICAgICAgICBjYXNlIE1hbnVhbElucHV0Q29udHJvbFR5cGUuUGhvbmU6XG4gICAgICAgICAgICBmb3JtbHlDb25maWcudHlwZSA9ICdpbnB1dCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIE1hbnVhbElucHV0Q29udHJvbFR5cGUuVGV4dEFyZWE6XG4gICAgICAgICAgICBmb3JtbHlDb25maWcudHlwZSA9ICdpbnB1dCc7XG4gICAgICAgICAgICBmb3JtbHlDb25maWcucHJvcHMhWydhdXRvc2l6ZSddID0gZmFsc2U7XG4gICAgICAgICAgICBjb21wb25lbnRTdHlsZUtleSA9ICcuY29tcG9uZW50LXRleHQtZmllbGQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBNYW51YWxJbnB1dENvbnRyb2xUeXBlLkRhdGVUaW1lOlxuICAgICAgICAgICAgZm9ybWx5Q29uZmlnLnR5cGUgPSAnZGF0ZXBpY2tlcic7XG4gICAgICAgICAgICBmb3JtbHlDb25maWcucHJvcHMgPSB7XG4gICAgICAgICAgICAgIHJlYWRvbmx5OiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbXBvbmVudFN0eWxlS2V5ID0gJy5jb21wb25lbnQtZGF0ZSc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgZm9ybWx5Q29uZmlnLnR5cGUgPSAnaW5wdXQnO1xuICAgICAgICAgICAgY29tcG9uZW50U3R5bGVLZXkgPSAnLmNvbXBvbmVudC10ZXh0LWZpZWxkJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTdGVwQ29udHJvbFR5cGUuUGFyYWdyYXBoOiAvLyBQYXJhZ3JhcGhcbiAgICAgICAgZm9ybWx5Q29uZmlnLnR5cGUgPSAnZm9ybWx5LXBhcmFncmFwaCc7XG4gICAgICAgIGNvbXBvbmVudFN0eWxlS2V5ID0gJy5jb21wb25lbnQtdGV4dC1maWVsZCc7XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZERlc2NyaXB0aW9uID1cbiAgICAgICAgICBjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LmRlc2NyaXB0aW9uVHJhbnNsYXRpb25zPy5maW5kKFxuICAgICAgICAgICAgKGQ6IHsgbGFuZ3VhZ2VJc286IHN0cmluZyB9KSA9PlxuICAgICAgICAgICAgICBkLmxhbmd1YWdlSXNvID09PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICAgICk/LnZhbHVlIHx8ICcnO1xuICAgICAgICBmb3JtbHlDb25maWcuZGVmYXVsdFZhbHVlID0gdHJhbnNsYXRlZERlc2NyaXB0aW9uO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTdGVwQ29udHJvbFR5cGUuQ2hlY2tCb3g6IC8vIENoZWNrYm94XG4gICAgICAgIGZvcm1seUNvbmZpZy50eXBlID0gJ2Zvcm1seS1jaGVja2JveCc7XG4gICAgICAgIGNvbXBvbmVudFN0eWxlS2V5ID0gJy5jb21wb25lbnQtY2hlY2tib3gnO1xuICAgICAgICB2YXIgY2hlY2tlZCA9IGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8uY2hlY2tlZCA/PyBmYWxzZTtcbiAgICAgICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnY2hlY2tlZCddID0gY2hlY2tlZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN0ZXBDb250cm9sVHlwZS5EaWN0aW9uYXJ5OiAvLyBEaWN0aW9uYXJ5IChkcm9wZG93bilcbiAgICAgICAgY29tcG9uZW50U3R5bGVLZXkgPVxuICAgICAgICAgIGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YS5zaG93QXNSYWRpb0J1dHRvbnNMaXN0ID09PSB0cnVlXG4gICAgICAgICAgICA/ICcuY29tcG9uZW50LXJhZGlvJ1xuICAgICAgICAgICAgOiAnLmNvbXBvbmVudC1kYXRhJztcbiAgICAgICAgYXdhaXQgdGhpcy5jb25zdHJ1Y3REaWN0aW9uYXJ5KGNvbnRyb2wsIGZvcm1seUNvbmZpZyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTdGVwQ29udHJvbFR5cGUuQnV0dG9uczpcbiAgICAgICAgZm9ybWx5Q29uZmlnLnR5cGUgPSAnJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN0ZXBDb250cm9sVHlwZS5GbHV4SW5mbzpcbiAgICAgICAgZm9ybWx5Q29uZmlnLnR5cGUgPSAnJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN0ZXBDb250cm9sVHlwZS5Eb3dubG9hZERvY3VtZW50czpcbiAgICAgICAgZm9ybWx5Q29uZmlnID0gdGhpcy5DcmVhdGVEb3dubG9hZERvY3NGaWVsZENvbmZpZyhjb250cm9sKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN0ZXBDb250cm9sVHlwZS5WaWV3RG9jdW1lbnRzOlxuICAgICAgICBmb3JtbHlDb25maWcgPSB0aGlzLkNyZWF0ZVZpZXdEb2NzRmllbGRDb25maWcoY29udHJvbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTdGVwQ29udHJvbFR5cGUuVXBsb2FkRG9jdW1lbnRzOlxuICAgICAgICBmb3JtbHlDb25maWcgPSB0aGlzLkNyZWF0ZVVwbG9hZERvY3NGaWVsZENvbmZpZyhjb250cm9sKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN0ZXBDb250cm9sVHlwZS5OZXdSb3c6IC8vIE5ldyBSb3dcbiAgICAgICAgZm9ybWx5Q29uZmlnLnR5cGUgPSAnJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBmb3JtbHlDb25maWcudHlwZSA9ICdpbnB1dCc7XG4gICAgICAgIGNvbXBvbmVudFN0eWxlS2V5ID0gJy5jb21wb25lbnQtdGV4dC1maWVsZCc7XG4gICAgfVxuICAgIGZvcm1seUNvbmZpZy5jbGFzc05hbWUgPSBjb21wb25lbnRTdHlsZUtleS5zdWJzdHJpbmcoMSk7XG5cbiAgICBpZiAoIWNvbXBvbmVudHNUb0V4Y2x1ZGVGcm9tU3R5bGUuZmluZCgoYykgPT4gYyA9PT0gY29tcG9uZW50U3R5bGVLZXkpKSB7XG4gICAgICBpZiAodGhpcy5kZXNpZ25bY29tcG9uZW50U3R5bGVLZXldKSB7XG4gICAgICAgIGZvcm1seUNvbmZpZy5wcm9wcyEuYXR0cmlidXRlcyFbJ3N0eWxlJ10gKz1cbiAgICAgICAgICAnOycgK1xuICAgICAgICAgIHRoaXMuc3R5bGVPYmplY3RUb1N0cmluZ0V4Y2VwdEJhY2tncm91bmQoXG4gICAgICAgICAgICB0aGlzLmRlc2lnbltjb21wb25lbnRTdHlsZUtleV1cbiAgICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSBsYWJlbCBzdHlsZXNcbiAgICAgIGNvbnN0IGxhYmVsU3R5bGVLZXkgPSBgJHtjb21wb25lbnRTdHlsZUtleX0tbGFiZWxgO1xuICAgICAgaWYgKHRoaXMuZGVzaWduW2xhYmVsU3R5bGVLZXldKSB7XG4gICAgICAgIGZvcm1seUNvbmZpZy5wcm9wcyEuYXR0cmlidXRlcyFbJ3N0eWxlJ10gKz1cbiAgICAgICAgICAnOycgK1xuICAgICAgICAgIHRoaXMuc3R5bGVPYmplY3RUb1N0cmluZ0V4Y2VwdEJhY2tncm91bmQoXG4gICAgICAgICAgICB0aGlzLmRlc2lnbltjb21wb25lbnRTdHlsZUtleV1cbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29udHJvbC5kZXBlbmRlbnREaWN0aW9uYXJ5KSB7XG4gICAgICB0aGlzLmF0dGFjaFRvRGVwZW5kZW50RGljdGlvbmFyeUlmTmVjZXNzYXJ5KFxuICAgICAgICBjb250cm9sLmRlcGVuZGVudERpY3Rpb25hcnksXG4gICAgICAgIGZvcm1seUNvbmZpZ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgdHJhbnNsYXRlZFRpdGxlID0gY29udHJvbC50cmFuc2xhdGlvbnM/LmZpbmQoXG4gICAgICAoZDogeyBsYW5ndWFnZUlzbzogc3RyaW5nIH0pID0+IGQubGFuZ3VhZ2VJc28gPT09IHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgKT8udmFsdWU7XG4gICAgaWYgKCF0cmFuc2xhdGVkVGl0bGUpIHtcbiAgICAgIHRyYW5zbGF0ZWRUaXRsZSA9IGNvbnRyb2wudGl0bGU7XG4gICAgfVxuICAgIGZvcm1seUNvbmZpZy5wcm9wcyFbJ2xhYmVsJ10gPSB0cmFuc2xhdGVkVGl0bGU7XG5cbiAgICB0aGlzLmZvcm1seUNvbGxlY3RpbmdGaWVsZHMucHVzaChmb3JtbHlDb25maWcpO1xuXG4gICAgcmV0dXJuIGZvcm1seUNvbmZpZztcbiAgfVxuXG4gIGFkZFZhbGlkYXRvcnMoZm9ybWx5Q29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZywgY29udHJvbDogQ29udHJvbERhdGEpIHtcbiAgICB2YXIgZW1haWxFcnJvckxhYmVsID0gdGhpcy5mbHV4Py5maW5kKFxuICAgICAgKGYpID0+IGY/LmNvbmZpZz8uY29tcG9uZW50Q29sbGVjdGVkID09PSBjb250cm9sPy5pZGVudGlmaWVyXG4gICAgKT8uY29uZmlnPy5lbWFpbEVycm9yTGFiZWw7XG4gICAgdmFyIGVtYWlsRXJyb3JMYWJlbFZhbHVlID0gJyc7XG4gICAgaWYgKGVtYWlsRXJyb3JMYWJlbCAhPSBudWxsICYmIEFycmF5LmlzQXJyYXkoZW1haWxFcnJvckxhYmVsKSkge1xuICAgICAgZW1haWxFcnJvckxhYmVsVmFsdWUgPVxuICAgICAgICAoZW1haWxFcnJvckxhYmVsIGFzIExhYmVsSW5mb1tdKS5maW5kKFxuICAgICAgICAgIChsKSA9PiBsLmxhbmd1YWdlSXNvID09PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICApPy52YWx1ZSA/PyAnJztcbiAgICB9XG5cbiAgICBmb3JtbHlDb25maWcudmFsaWRhdG9ycyA9IHtcbiAgICAgIGVtYWlsVmFsaWQ6IHtcbiAgICAgICAgZXhwcmVzc2lvbjogKGNvbnQ6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29udC52YWx1ZTtcbiAgICAgICAgICBjb25zdCBlbWFpbFBhdHRlcm4gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ15bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcXFwuW2EtekEtWl17Mix9JCdcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiAhZW1haWxQYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICBjb250LnNldEVycm9ycyh7IGludmFsaWRFbWFpbDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIG1lc3NhZ2U6IGVtYWlsRXJyb3JMYWJlbFZhbHVlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgYWRkQXBpVmFsaWRhdG9ycyhmb3JtbHlDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnLCBjb250cm9sOiBDb250cm9sRGF0YSkge1xuICAgIGZvcm1seUNvbmZpZy5hc3luY1ZhbGlkYXRvcnMgPSB7XG4gICAgICB2YWxpZGF0ZVRocm91Z2hBcGk6IHtcbiAgICAgICAgZXhwcmVzc2lvbjogKGNvbnQ6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjb250LnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcGlWYWxpZGF0aW9uTWV0aG9kID1cbiAgICAgICAgICAgICAgICAgIGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YS5hcGlWYWxpZGF0aW9uTWV0aG9kO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYm9keVZhbHVlID0gdGhpcy5hcHBNb2RlbC5wYXJ0bmVyc1xuICAgICAgICAgICAgICAgICAgLmZsYXRNYXAoKHApID0+IHAucGFydG5lclNldHRpbmdzLnBhcnRuZXJNZXRob2RzQXBpKVxuICAgICAgICAgICAgICAgICAgLmZpbmQoKHApID0+IHAubWV0aG9kSWQgPT09IGFwaVZhbGlkYXRpb25NZXRob2QpXG4gICAgICAgICAgICAgICAgICA/LmJvZHlDb25maWd1cmF0aW9uLmJvZHlNYXBGaWVsZHM7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZE1hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9XG4gICAgICAgICAgICAgICAgICBib2R5VmFsdWU/LnJlZHVjZSgoYWNjOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LCBmKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmLmZsdXhGaWVsZElkID09PSBjb250cm9sLmlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhY2NbZi5wYXJ0bmVyRmllbGRdID0gY29udC52YWx1ZSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBhY2NbZi5wYXJ0bmVyRmllbGRdID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgICAgICAgIH0sIHt9KSB8fCB7fTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFSZXF1ZXN0OiBBcGlWYWxpZGF0ZVJlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgICBhcHBJZDogdGhpcy5hcHBNb2RlbC5hcHBsaWNhdGlvbklkLFxuICAgICAgICAgICAgICAgICAgYXBpSWQ6IGFwaVZhbGlkYXRpb25NZXRob2QsXG4gICAgICAgICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShmaWVsZE1hcCksXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlTWV0aG9kQXBpKGRhdGFSZXF1ZXN0KS5waXBlKFxuICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZihmYWxzZSkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkgfHwgJ3Nzc3Nzc3Nzc3Nzc3Nzc3MnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVzc2FnZTogJ1ZhbGlkYXRpb24gZmFpbGVkLicsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0Rm9ybWx5RmllbGRDb25maWcoXG4gICAgY29udHJvbDogQ29udHJvbERhdGEsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIHBhdHRlcm46IHN0cmluZyxcbiAgICBjb21wb25lbnRTdHlsZUtleTogc3RyaW5nLFxuICAgIGNvbXBvbmVudHNUb0V4Y2x1ZGVGcm9tU3R5bGU6IHN0cmluZ1tdXG4gICk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICBjb25zdCBjdXJyZW50TGFuZ3VhZ2VJZCA9IFV0aWxzLmZpbmRMYW5ndWFnZUlkQnlJc28oXG4gICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyxcbiAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgKTtcblxuICAgIGxldCBmb3JtbHlDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAga2V5OiBjb250cm9sLmlkZW50aWZpZXIgfHwgY29udHJvbC50aXRsZSxcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBwcm9wczoge1xuICAgICAgICBjdXJyZW50TGFuZ3VhZ2VJc286IHRoaXMuY3VycmVudExhbmd1YWdlSXNvLFxuICAgICAgICBjdXJyZW50TGFuZ3VhZ2VJZDogY3VycmVudExhbmd1YWdlSWQsXG4gICAgICAgIGxhYmVsOlxuICAgICAgICAgIGNvbnRyb2wudHJhbnNsYXRpb25zPy5maW5kKFxuICAgICAgICAgICAgKHQ6IHsgbGFuZ3VhZ2VJc286IHN0cmluZyB9KSA9PlxuICAgICAgICAgICAgICB0Lmxhbmd1YWdlSXNvID09PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICAgICk/LnZhbHVlIHx8ICcnLFxuXG4gICAgICAgIHRpdGxlOlxuICAgICAgICAgIGNvbnRyb2wudHJhbnNsYXRpb25zPy5maW5kKFxuICAgICAgICAgICAgKHQ6IHsgbGFuZ3VhZ2VJc286IHN0cmluZyB9KSA9PlxuICAgICAgICAgICAgICB0Lmxhbmd1YWdlSXNvID09PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICAgICk/LnZhbHVlIHx8ICcnLFxuICAgICAgICBkZXNpZ246IHRoaXMuZGVzaWduLFxuICAgICAgICByZXF1aXJlZDogY29udHJvbC5pc01hbmRhdG9yeSxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIHN0eWxlOiBjb21wb25lbnRzVG9FeGNsdWRlRnJvbVN0eWxlLmZpbmQoXG4gICAgICAgICAgICAoYykgPT4gYyA9PT0gY29tcG9uZW50U3R5bGVLZXlcbiAgICAgICAgICApXG4gICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICA6IGNvbXBvbmVudFN0eWxlS2V5LFxuICAgICAgICB9LFxuICAgICAgICBhdXRvc2l6ZTogdHJ1ZSxcbiAgICAgICAgb3B0aW9uczogW3t9XSxcbiAgICAgICAgZmllbGRHcm91cDogW10sXG4gICAgICAgIGF1dG9EaW1lbnNpb246IGNvbnRyb2wuYXV0b0RpbWVuc2lvbixcbiAgICAgIH0sXG4gICAgICBleHByZXNzaW9uczoge30sXG4gICAgICBob29rczoge30sXG4gICAgICB2YWxpZGF0b3JzOiB7fSxcbiAgICB9O1xuICAgIGZvcm1seUNvbmZpZy52YWxpZGF0aW9uID0ge307XG5cbiAgICBpZiAoY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5pc01hbmRhdG9yeSAmJiBmb3JtbHlDb25maWcucHJvcHMpIHtcbiAgICAgIHZhciByZXF1aXJlZE1lc3NhZ2UgPSBVdGlscy5maW5kRXJyb3JUcmFuc2xhdGlvblZhbHVlT3JEZWZhdWx0KFxuICAgICAgICBjb250cm9sLmVycm9yc1RyYW5zbGF0aW9ucyxcbiAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICAgICdpc01hbmRhdG9yeVZhbGlkYXRpb24nXG4gICAgICApO1xuXG4gICAgICBmb3JtbHlDb25maWcucHJvcHMucmVxdWlyZWQgPSBjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LmlzTWFuZGF0b3J5O1xuICAgICAgZm9ybWx5Q29uZmlnLnZhbGlkYXRpb24ubWVzc2FnZXMgPSB7XG4gICAgICAgIC4uLmZvcm1seUNvbmZpZy52YWxpZGF0aW9uPy5tZXNzYWdlcyxcbiAgICAgICAgcmVxdWlyZWQ6IHJlcXVpcmVkTWVzc2FnZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgY29udHJvbC50eXBlID09PSBTdGVwQ29udHJvbFR5cGUuRGljdGlvbmFyeSAmJlxuICAgICAgY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5pc01hbmRhdG9yeSAmJlxuICAgICAgY29udHJvbC5lcnJvcnNUcmFuc2xhdGlvbnMgJiZcbiAgICAgIGZvcm1seUNvbmZpZy5wcm9wc1xuICAgICkge1xuICAgICAgdmFyIHJlcXVpcmVkTWVzc2FnZSA9IFV0aWxzLmZpbmRFcnJvclRyYW5zbGF0aW9uVmFsdWVPckRlZmF1bHQoXG4gICAgICAgIGNvbnRyb2wuZXJyb3JzVHJhbnNsYXRpb25zLFxuICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgICAgJ2lzTWFuZGF0b3J5J1xuICAgICAgKTtcblxuICAgICAgZm9ybWx5Q29uZmlnLnByb3BzLnJlcXVpcmVkID0gY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5pc01hbmRhdG9yeTtcbiAgICAgIGZvcm1seUNvbmZpZy52YWxpZGF0aW9uLm1lc3NhZ2VzID0ge1xuICAgICAgICAuLi5mb3JtbHlDb25maWcudmFsaWRhdGlvbj8ubWVzc2FnZXMsXG4gICAgICAgIHJlcXVpcmVkOiByZXF1aXJlZE1lc3NhZ2UsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBzaW1wbGVWYWxpZGF0aW9uTWVzc2FnZSA9ICcnO1xuICAgIGlmIChjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LmlzU2ltcGxlVmFsaWRhdGlvbiAmJiBmb3JtbHlDb25maWcucHJvcHMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5pc1NpbXBsZVZhbGlkYXRpb24gJiZcbiAgICAgICAgZm9ybWx5Q29uZmlnLnByb3BzXG4gICAgICApIHtcbiAgICAgICAgc2ltcGxlVmFsaWRhdGlvbk1lc3NhZ2UgPSBVdGlscy5maW5kRXJyb3JUcmFuc2xhdGlvblZhbHVlT3JEZWZhdWx0KFxuICAgICAgICAgIGNvbnRyb2wuZXJyb3JzVHJhbnNsYXRpb25zLFxuICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvLFxuICAgICAgICAgICdzaW1wbGVWYWxpZGF0aW9uJ1xuICAgICAgICApO1xuXG4gICAgICAgIGlmIChjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/Lm1pblZhbHVlPy50b1N0cmluZygpKSB7XG4gICAgICAgICAgZm9ybWx5Q29uZmlnLnByb3BzLm1pbiA9IGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YS5taW5WYWx1ZTtcbiAgICAgICAgICBmb3JtbHlDb25maWcudmFsaWRhdGlvbi5tZXNzYWdlcyA9IHtcbiAgICAgICAgICAgIC4uLmZvcm1seUNvbmZpZy52YWxpZGF0aW9uPy5tZXNzYWdlcyxcbiAgICAgICAgICAgIG1pbjogc2ltcGxlVmFsaWRhdGlvbk1lc3NhZ2UsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/Lm1heFZhbHVlPy50b1N0cmluZygpKSB7XG4gICAgICAgICAgZm9ybWx5Q29uZmlnLnByb3BzLm1heCA9IGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YS5tYXhWYWx1ZTtcbiAgICAgICAgICBmb3JtbHlDb25maWcudmFsaWRhdGlvbi5tZXNzYWdlcyA9IHtcbiAgICAgICAgICAgIC4uLmZvcm1seUNvbmZpZy52YWxpZGF0aW9uPy5tZXNzYWdlcyxcbiAgICAgICAgICAgIG1heDogc2ltcGxlVmFsaWRhdGlvbk1lc3NhZ2UsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSBwYXR0ZXJuIHZhbGlkYXRpb24gaWYgYWxsb3dlZENoYXJhY3RlcnMgaXMgZGVmaW5lZFxuICAgICAgaWYgKGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8uYWxsb3dlZENoYXJhY3RlcnMpIHtcbiAgICAgICAgc2ltcGxlVmFsaWRhdGlvbk1lc3NhZ2UgPSBzaW1wbGVWYWxpZGF0aW9uTWVzc2FnZSA9XG4gICAgICAgICAgVXRpbHMuZmluZEVycm9yVHJhbnNsYXRpb25WYWx1ZU9yRGVmYXVsdChcbiAgICAgICAgICAgIGNvbnRyb2wuZXJyb3JzVHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICAgICAgICAnc2ltcGxlVmFsaWRhdGlvbidcbiAgICAgICAgICApO1xuXG4gICAgICAgIGZvcm1seUNvbmZpZy52YWxpZGF0b3JzID0ge1xuICAgICAgICAgIC4uLmZvcm1seUNvbmZpZy52YWxpZGF0b3JzLFxuICAgICAgICAgIGN1c3RvbVBhdHRlcm46IHtcbiAgICAgICAgICAgIGV4cHJlc3Npb246IChjOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjLnZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAocGF0dGVybik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QoYy52YWx1ZSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgIHNpbXBsZVZhbGlkYXRpb25NZXNzYWdlIHx8XG4gICAgICAgICAgICAgICdWYWx1ZSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgcGF0dGVybicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICBmb3JtbHlDb25maWcudmFsaWRhdGlvbi5tZXNzYWdlcyA9IHtcbiAgICAgICAgICAuLi5mb3JtbHlDb25maWcudmFsaWRhdGlvbj8ubWVzc2FnZXMsXG4gICAgICAgICAgcGF0dGVybjogc2ltcGxlVmFsaWRhdGlvbk1lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IG1heExlbmd0aCB2YWxpZGF0aW9uIGlmIG1heENoYXJhY3RlcnMgaXMgZGVmaW5lZFxuICAgICAgaWYgKGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8ubWF4Q2hhcmFjdGVycykge1xuICAgICAgICBmb3JtbHlDb25maWcucHJvcHMubWF4TGVuZ3RoID1cbiAgICAgICAgICBjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/Lm1heENoYXJhY3RlcnM7XG4gICAgICAgIGZvcm1seUNvbmZpZy52YWxpZGF0aW9uLm1lc3NhZ2VzID0ge1xuICAgICAgICAgIC4uLmZvcm1seUNvbmZpZy52YWxpZGF0aW9uPy5tZXNzYWdlcyxcbiAgICAgICAgICBtYXhMZW5ndGg6IHNpbXBsZVZhbGlkYXRpb25NZXNzYWdlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LmFsbG93T25seUZ1dHVyZSB8fFxuICAgICAgICBjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LmFsbG93T25seVBhc3RcbiAgICAgICkge1xuICAgICAgICBmb3JtbHlDb25maWcudHlwZSA9ICdkYXRlcGlja2VyJztcbiAgICAgICAgY29uc3QgY2hlY2tEYXRlVmFsaWRhdGlvbiA9IHtcbiAgICAgICAgICBjaGVja0RhdGU6IHtcbiAgICAgICAgICAgIGV4cHJlc3Npb246IChjOiBBYnN0cmFjdENvbnRyb2wsIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4ge1xuICAgICAgICAgICAgICBzaW1wbGVWYWxpZGF0aW9uTWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgVXRpbHMuZmluZEVycm9yVHJhbnNsYXRpb25WYWx1ZU9yRGVmYXVsdChcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZXJyb3JzVHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICAgICAgICAgICAgICAnc2ltcGxlVmFsaWRhdGlvbidcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgY3VycmVudERhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG5cbiAgICAgICAgICAgICAgaWYgKGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8uYWxsb3dPbmx5RnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjLnZhbHVlIHx8IGMudmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYy52YWx1ZSA+IGN1cnJlbnREYXRlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LmFsbG93T25seVBhc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWMudmFsdWUgfHwgYy52YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBjLnZhbHVlIDwgY3VycmVudERhdGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWVzc2FnZTogKGVycm9yOiBhbnksIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gc2ltcGxlVmFsaWRhdGlvbk1lc3NhZ2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGZvcm1seUNvbmZpZy52YWxpZGF0b3JzID0ge1xuICAgICAgICAgIC4uLmZvcm1seUNvbmZpZy52YWxpZGF0b3JzLFxuICAgICAgICAgIC4uLmNoZWNrRGF0ZVZhbGlkYXRpb24sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9jb250cm9sLnNwZWNpZmljQ29udHJvbERhdGEudHlwZSA9PT0gNCAgaXMgcGhvbmVcbiAgICBpZiAoY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy50eXBlID09PSA0KSB7XG4gICAgICB2YXIgcGhvbmVFcnJvckxhYmVsID0gdGhpcy5mbHV4Py5maW5kKFxuICAgICAgICAoZikgPT4gZj8uY29uZmlnPy5jb21wb25lbnRDb2xsZWN0ZWQgPT09IGNvbnRyb2w/LmlkZW50aWZpZXJcbiAgICAgICk/LmNvbmZpZz8ucGhvbmVFcnJvckxhYmVsO1xuICAgICAgdmFyIHBob25lRXJyb3JMYWJlbFZhbHVlID0gJyc7XG4gICAgICBpZiAocGhvbmVFcnJvckxhYmVsICE9IG51bGwgJiYgQXJyYXkuaXNBcnJheShwaG9uZUVycm9yTGFiZWwpKSB7XG4gICAgICAgIHBob25lRXJyb3JMYWJlbFZhbHVlID1cbiAgICAgICAgICAocGhvbmVFcnJvckxhYmVsIGFzIExhYmVsSW5mb1tdKS5maW5kKFxuICAgICAgICAgICAgKGwpID0+IGwubGFuZ3VhZ2VJc28gPT09IHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICAgKT8udmFsdWUgPz8gJyc7XG4gICAgICB9XG5cbiAgICAgIGZvcm1seUNvbmZpZy52YWxpZGF0b3JzID0ge1xuICAgICAgICBwaG9uZVZhbGlkOiB7XG4gICAgICAgICAgZXhwcmVzc2lvbjogKGNvbnQ6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb250LnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgcGhvbmVQYXR0ZXJuID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgJ14oXFxcXCs0fCk/KDA3WzAtOF17MX1bMC05XXsxfXwwMlswLTldezJ9fDAzWzAtOV17Mn0pezF9PyhcXFxcc3xcXFxcLnwtKT8oWzAtOV17M30oXFxcXHN8XFxcXC58LXwpKXsyfSQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmICFwaG9uZVBhdHRlcm4udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgY29udC5zZXRFcnJvcnMoeyBpbnZhbGlkUGhvbmVOdW1iZXI6IHRydWUgfSk7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZTogcGhvbmVFcnJvckxhYmVsVmFsdWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LnR5cGUgPT09IDIpIHtcbiAgICAgIGNvbnN0IGNoZWNrRGF0ZTJWYWxpZGF0aW9uID0ge1xuICAgICAgICBjaGVja0RhdGUyOiB7XG4gICAgICAgICAgZXhwcmVzc2lvbjogKGM6IEFic3RyYWN0Q29udHJvbCwgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICB2YXIgZGF0ZVZhbHVlID0gYy52YWx1ZTtcbiAgICAgICAgICAgIGlmICghZGF0ZVZhbHVlICYmIGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8uaXNNYW5kYXRvcnkpIHtcbiAgICAgICAgICAgICAgc2ltcGxlVmFsaWRhdGlvbk1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIFV0aWxzLmZpbmRFcnJvclRyYW5zbGF0aW9uVmFsdWVPckRlZmF1bHQoXG4gICAgICAgICAgICAgICAgICBjb250cm9sLmVycm9yc1RyYW5zbGF0aW9ucyxcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvLFxuICAgICAgICAgICAgICAgICAgJ2lzTWFuZGF0b3J5VmFsaWRhdGlvbidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGlzTmFOKERhdGUucGFyc2UoZGF0ZVZhbHVlKSkgJiZcbiAgICAgICAgICAgICAgY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5pc01hbmRhdG9yeVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZTogKGVycm9yOiBhbnksIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4ge1xuICAgICAgICAgICAgaWYgKHNpbXBsZVZhbGlkYXRpb25NZXNzYWdlID09PSAnJylcbiAgICAgICAgICAgICAgcmV0dXJuICdQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlJztcblxuICAgICAgICAgICAgcmV0dXJuIHNpbXBsZVZhbGlkYXRpb25NZXNzYWdlO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgZm9ybWx5Q29uZmlnLnZhbGlkYXRvcnMgPSB7XG4gICAgICAgIC4uLmZvcm1seUNvbmZpZy52YWxpZGF0b3JzLFxuICAgICAgICAuLi5jaGVja0RhdGUyVmFsaWRhdGlvbixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1seUNvbmZpZztcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkUHJlc2VudGF0aW9uRm9ybUZpZWxkQXN5bmMoXG4gICAgc3RlcDogU3RlcERhdGEgfCB1bmRlZmluZWQsXG4gICAgY29udHJvbDogUHJlc2VudGF0aW9uQ29udHJvbFxuICApOiBQcm9taXNlPEZvcm1seUZpZWxkQ29uZmlnPiB7XG4gICAgbGV0IGZvcm1seUNvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSB7IHByb3BzOiB7fSB9O1xuXG4gICAgZm9ybWx5Q29uZmlnLnR5cGUgPSAnZm9ybWx5LXBhcmFncmFwaCc7XG4gICAgZm9ybWx5Q29uZmlnLmNsYXNzTmFtZSA9ICdjb21wb25lbnQtdGV4dC1maWVsZCc7XG4gICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnZGVzaWduJ10gPSB0aGlzLmFwcE1vZGVsLmdlbmVyYXRlZENzcztcblxuICAgIHZhciB0cmFuc2xhdGVkVGl0bGUgPVxuICAgICAgY29udHJvbC50cmFuc2xhdGlvbnMuZmluZCgoZCkgPT4gZC5sYW5ndWFnZUlzbyA9PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbylcbiAgICAgICAgPy52YWx1ZSA/P1xuICAgICAgY29udHJvbC50aXRsZSA/P1xuICAgICAgJyc7XG5cbiAgICBpZiAoY29udHJvbC50eXBlID09IFByZXNlbnRhdGlvbkNvbnRyb2xUeXBlLlBhcmFncmFwaCkge1xuICAgICAgY29uc3QgcGFyYWdyYXBoQ29udHJvbCA9IGNvbnRyb2wgYXMgUHJlc2VudGF0aW9uUGFyYWdyYXBoQ29udHJvbDtcblxuICAgICAgdmFyIHRyYW5zbGF0ZWREZXNjcmlwdGlvbiA9XG4gICAgICAgIHBhcmFncmFwaENvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YS5kZXNjcmlwdGlvblRyYW5zbGF0aW9ucy5maW5kKFxuICAgICAgICAgIChkOiBhbnkpID0+IGQubGFuZ3VhZ2VJc28gPT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgKT8udmFsdWUgPz8gJyc7XG4gICAgICB2YXIgdHJhbnNsYXRlZFBhcmFncmFwaFRpdGxlID1cbiAgICAgICAgcGFyYWdyYXBoQ29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhLnRleHQuZmluZChcbiAgICAgICAgICAoZDogYW55KSA9PiBkLmxhbmd1YWdlSXNvID09IHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICk/LnZhbHVlID8/ICcnO1xuXG4gICAgICBmb3JtbHlDb25maWcuZGVmYXVsdFZhbHVlID0gdHJhbnNsYXRlZERlc2NyaXB0aW9uO1xuICAgICAgZm9ybWx5Q29uZmlnLnByb3BzIVsndHJhbnNsYXRlZERlc2NyaXB0aW9uJ10gPSB0cmFuc2xhdGVkRGVzY3JpcHRpb247XG4gICAgICBmb3JtbHlDb25maWcucHJvcHMhWyd0cmFuc2xhdGVkUGFyYWdyYXBoVGl0bGUnXSA9XG4gICAgICAgIHRyYW5zbGF0ZWRQYXJhZ3JhcGhUaXRsZTtcbiAgICAgIGZvcm1seUNvbmZpZy50eXBlID0gJ2Zvcm1seS1wYXJhZ3JhcGgnO1xuICAgICAgZm9ybWx5Q29uZmlnLmNsYXNzTmFtZSA9ICdjb21wb25lbnQtdGV4dC1maWVsZCc7XG4gICAgfSBlbHNlIGlmIChjb250cm9sLnR5cGUgPT0gUHJlc2VudGF0aW9uQ29udHJvbFR5cGUuRG93bmxvYWQpIHtcbiAgICAgIGZvcm1seUNvbmZpZyA9IHRoaXMuQ3JlYXRlRG93bmxvYWREb2NzRmllbGRDb25maWcoY29udHJvbCk7XG4gICAgfSBlbHNlIGlmIChjb250cm9sLnR5cGUgPT0gUHJlc2VudGF0aW9uQ29udHJvbFR5cGUuVmlldykge1xuICAgICAgZm9ybWx5Q29uZmlnID0gdGhpcy5DcmVhdGVWaWV3RG9jc0ZpZWxkQ29uZmlnKGNvbnRyb2wpO1xuICAgIH0gZWxzZSBpZiAoY29udHJvbC50eXBlID09IFByZXNlbnRhdGlvbkNvbnRyb2xUeXBlLlN0YXR1cykge1xuICAgICAgbGV0IHN0YXR1c05hbWUgPVxuICAgICAgICB0aGlzLmFwcE1vZGVsLnN0YXR1c2VzLmZpbmQoXG4gICAgICAgICAgKHMpID0+IHMuaWQgPT09IHRoaXMuZmlsbERhdGE/Lm1ldGFkYXRhLnN0YXR1c0lkXG4gICAgICAgICk/Lm5hbWUgfHwgJ25vIHN0YXR1cyBuYW1lJztcblxuICAgICAgZm9ybWx5Q29uZmlnLmRlZmF1bHRWYWx1ZSA9IHN0YXR1c05hbWU7XG4gICAgICBmb3JtbHlDb25maWcudHlwZSA9ICdmb3JtbHktcGFyYWdyYXBoJztcbiAgICAgIGZvcm1seUNvbmZpZy5jbGFzc05hbWUgPSAnY29tcG9uZW50LXRleHQtZmllbGQnO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbnRyb2wudHlwZSA9PSBQcmVzZW50YXRpb25Db250cm9sVHlwZS5GbHV4Q29tcG9uZW50ICYmXG4gICAgICAgIHRoaXMuY29udHJvbElkc1dpdGhWYWx1ZXMgJiZcbiAgICAgICAgY29udHJvbC5jb2xsZWN0aW9uQ29udHJvbElkZW50aWZpZXJcbiAgICAgICkge1xuICAgICAgICBjb25zdCBmaWxsVmFsdWUgPVxuICAgICAgICAgIHRoaXMuY29udHJvbElkc1dpdGhWYWx1ZXNbY29udHJvbC5jb2xsZWN0aW9uQ29udHJvbElkZW50aWZpZXJdO1xuXG4gICAgICAgIGlmIChmaWxsVmFsdWUpIHtcbiAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBmaWxsVmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgICBmb3JtbHlDb25maWcuZGVmYXVsdFZhbHVlID0gZmlsbFZhbHVlID8gJyZjaGVjazsnIDogJyZjcm9zczsnO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgaWYgKGZpbGxWYWx1ZT8ubmFtZSkge1xuICAgICAgICAgICAgICAgIGZvcm1seUNvbmZpZy5kZWZhdWx0VmFsdWUgPSBmaWxsVmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtbHlDb25maWcuZGVmYXVsdFZhbHVlID0gZmlsbFZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEVuc3VyZSB0eXBlIGlzIHNldCBmb3IgcHJlc2VudGF0aW9uIGNvbnRyb2xzXG4gICAgaWYgKCFmb3JtbHlDb25maWcudHlwZSkge1xuICAgICAgZm9ybWx5Q29uZmlnLnR5cGUgPSAnZm9ybWx5LXBhcmFncmFwaCc7XG4gICAgICBmb3JtbHlDb25maWcuY2xhc3NOYW1lID0gJ2NvbXBvbmVudC10ZXh0LWZpZWxkJztcbiAgICB9XG5cbiAgICBmb3JtbHlDb25maWcuaWQgPSBjb250cm9sLmlkZW50aWZpZXI7XG4gICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnaXNEaXNwbGF5TW9kZSddID0gdHJ1ZTtcbiAgICBmb3JtbHlDb25maWcucHJvcHMhWydjb2xsZWN0aW9uQ29udHJvbElkZW50aWZpZXInXSA9XG4gICAgICBjb250cm9sLmNvbGxlY3Rpb25Db250cm9sSWRlbnRpZmllcjtcbiAgICBmb3JtbHlDb25maWcucHJvcHMhWydsYWJlbCddID0gdHJhbnNsYXRlZFRpdGxlO1xuICAgIGZvcm1seUNvbmZpZy5wcm9wcyFbJ2xhbmdJc28nXSA9IHRoaXMuY3VycmVudExhbmd1YWdlSXNvO1xuXG4gICAgdGhpcy5mb3JtbHlQcmVzZW50YXRpb25GaWVsZHMucHVzaChmb3JtbHlDb25maWcpO1xuXG4gICAgcmV0dXJuIGZvcm1seUNvbmZpZztcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkQXBpTWV0aG9kRm9ybUZpZWxkQXN5bmMoXG4gICAgc3RlcDogU3RlcERhdGEgfCB1bmRlZmluZWQsXG4gICAgY29udHJvbDogUHJlc2VudGF0aW9uQ29udHJvbFxuICApOiBQcm9taXNlPEZvcm1seUZpZWxkQ29uZmlnPiB7XG4gICAgbGV0IGZvcm1seUNvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSB7IHByb3BzOiB7fSB9O1xuXG4gICAgZm9ybWx5Q29uZmlnLnR5cGUgPSAnZm9ybWx5LXBhcmFncmFwaCc7XG4gICAgZm9ybWx5Q29uZmlnLmNsYXNzTmFtZSA9ICdjb21wb25lbnQtdGV4dC1maWVsZCc7XG4gICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnZGVzaWduJ10gPSB0aGlzLmFwcE1vZGVsLmdlbmVyYXRlZENzcztcblxuICAgIHZhciB0cmFuc2xhdGVkVGl0bGUgPVxuICAgICAgY29udHJvbC50cmFuc2xhdGlvbnMuZmluZCgoZCkgPT4gZC5sYW5ndWFnZUlzbyA9PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbylcbiAgICAgICAgPy52YWx1ZSA/P1xuICAgICAgY29udHJvbC50aXRsZSA/P1xuICAgICAgJyc7XG5cbiAgICBmb3JtbHlDb25maWcuaWQgPSBjb250cm9sLmlkZW50aWZpZXI7XG4gICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnaXNEaXNwbGF5TW9kZSddID0gdHJ1ZTtcbiAgICBmb3JtbHlDb25maWcucHJvcHMhWydhcGlNZXRob2RJZCddID0gY29udHJvbC5hcGlNZXRob2RJZDtcbiAgICBmb3JtbHlDb25maWcucHJvcHMhWydhcGlNZXRob2RGaWVsZElkJ10gPSBjb250cm9sLmFwaU1ldGhvZEZpZWxkSWQ7XG4gICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnbGFiZWwnXSA9IHRyYW5zbGF0ZWRUaXRsZTtcblxuICAgIGlmIChjb250cm9sLmFwaU1ldGhvZEZpZWxkSWQpIHtcbiAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZmluZEluQXBpQ2FsbHNSZXNwb25zZXMoY29udHJvbC5hcGlNZXRob2RGaWVsZElkKTtcbiAgICAgIGZvcm1seUNvbmZpZy5kZWZhdWx0VmFsdWUgPSB2YWw7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtbHlQcmVzZW50YXRpb25GaWVsZHMucHVzaChmb3JtbHlDb25maWcpO1xuXG4gICAgcmV0dXJuIGZvcm1seUNvbmZpZztcbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoVG9EZXBlbmRlbnREaWN0aW9uYXJ5SWZOZWNlc3NhcnkoXG4gICAgZGVwZW5kZW50RGljdGlvbmFyeTogRGVwZW5kZW50RGljdGlvbmFyeURhdGEsXG4gICAgZm9ybWx5Q29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZ1xuICApIHtcbiAgICAvLyBIYW5kbGUgZGljdGlvbmFyeSBkZXBlbmRlbmNpZXNcbiAgICBpZiAoXG4gICAgICBkZXBlbmRlbnREaWN0aW9uYXJ5ICYmXG4gICAgICBkZXBlbmRlbnREaWN0aW9uYXJ5LmRpY3Rpb25hcnlDb250cm9sSWRlbnRpZmllclxuICAgICkge1xuICAgICAgY29uc3QgcGFyZW50S2V5ID0gZGVwZW5kZW50RGljdGlvbmFyeS5kaWN0aW9uYXJ5Q29udHJvbElkZW50aWZpZXI7XG4gICAgICBjb25zdCBkZXBlbmRlbnRWYWx1ZUlkcyA9IGRlcGVuZGVudERpY3Rpb25hcnkuZGVwZW5kZW50VmFsdWVJZHMgfHwgW107XG5cbiAgICAgIGZvcm1seUNvbmZpZy5leHByZXNzaW9ucyA9IHtcbiAgICAgICAgaGlkZTogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3VsZFNob3cgPSB0aGlzLnNob3VsZFNob3dEZXBlbmRlbnRGaWVsZChcbiAgICAgICAgICAgIHBhcmVudEtleSxcbiAgICAgICAgICAgIGRlcGVuZGVudFZhbHVlSWRzLFxuICAgICAgICAgICAgdGhpcy5tb2RlbFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuICFzaG91bGRTaG93O1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGF0dGFjaFRvVmFsdWVDaGFuZ2VzKGNvbnRyb2xJZDogc3RyaW5nLCBvcHRpb25zOiBGb3JtbHlGaWVsZENvbmZpZykge1xuICAgIG9wdGlvbnMucHJvcHMhWydvblNlbGVjdGVkVmFsdWVDaGFuZ2VkJ10gPSBhc3luYyAodmFsOiBhbnkpID0+IHtcbiAgICAgIHRoaXMubW9kZWxbY29udHJvbElkXSA9IHZhbDtcbiAgICAgIHZhciByZWZlcmVuY2VEaWN0aW9uYXJpZXMgPSBBcnJheS5mcm9tKFxuICAgICAgICB0aGlzLmRpY3Rpb25hcnlNYXAudmFsdWVzKClcbiAgICAgICkuZmlsdGVyKChkKSA9PiBkLnJlZmVyZW5jZUlkID09IHZhbC5kaWN0aW9uYXJ5SWQpO1xuICAgICAgaWYgKHJlZmVyZW5jZURpY3Rpb25hcmllcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnJlbW92ZVJlZmVyZW5jZUZpZWxkcyhvcHRpb25zKTtcblxuICAgICAgICB2YXIgcmVmZXJlbmNlRGljdGlvbmFyaWVzV2l0aEZpbHRlcmVkVmFsdWVzID1cbiAgICAgICAgICB0aGlzLmNyZWF0ZVJlZmVyZW5jZURpY3Rpb25hcmllc0Zyb21TZWxlY3RlZFZhbHVlKFxuICAgICAgICAgICAgcmVmZXJlbmNlRGljdGlvbmFyaWVzLFxuICAgICAgICAgICAgdmFsXG4gICAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcGFyZW50U3BlY2lmaWNEYXRhID0gb3B0aW9ucy5wcm9wcz8uW1xuICAgICAgICAgICdzcGVjaWZpY0RhdGEnXG4gICAgICAgIF0gYXMgRGljdGlvbmFyeUNvbnRyb2xEYXRhO1xuICAgICAgICBhd2FpdCB0aGlzLmFkZFJlZmVyZW5jZURpY3Rpb25hcnlGaWVsZHNJZk5lY2Vzc2FyeShcbiAgICAgICAgICByZWZlcmVuY2VEaWN0aW9uYXJpZXNXaXRoRmlsdGVyZWRWYWx1ZXMsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICBvcHRpb25zLnR5cGUsXG4gICAgICAgICAgcGFyZW50U3BlY2lmaWNEYXRhPy5yZWxhdGVkRGljdGlvbmFyaWVzVHJhbnNsYXRpb25zIHx8IFtdXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZVJlZmVyZW5jZUZpZWxkcyhvcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlRm9ybWx5Q29uZmlnKCk7XG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZVJlZmVyZW5jZURpY3Rpb25hcmllc0Zyb21TZWxlY3RlZFZhbHVlKFxuICAgIGFsbERpY3Rpb25hcmllczogRGljdGlvbmFyeUR0b1tdLFxuICAgIHNlbGVjdGVkVmFsdWU6IGFueVxuICApOiBEaWN0aW9uYXJ5RHRvW10ge1xuICAgIGNvbnN0IG5ld0RpY3Rpb25hcmllczogRGljdGlvbmFyeUR0b1tdID0gW107XG5cbiAgICBhbGxEaWN0aW9uYXJpZXMuZm9yRWFjaCgoZGljdGlvbmFyeSkgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyZWRWYWx1ZXMgPVxuICAgICAgICBkaWN0aW9uYXJ5LnZhbHVlcz8uZmlsdGVyKCh2YWx1ZSkgPT5cbiAgICAgICAgICB2YWx1ZS5yZWZlcmVuY2VWYWx1ZXMuc29tZShcbiAgICAgICAgICAgIChyZWZWYWx1ZSkgPT4gcmVmVmFsdWUuaWQgPT09IHNlbGVjdGVkVmFsdWUuaWRcbiAgICAgICAgICApXG4gICAgICAgICkgfHwgW107XG5cbiAgICAgIGlmIChmaWx0ZXJlZFZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG5ld0RpY3Rpb25hcnk6IERpY3Rpb25hcnlEdG8gPSB7XG4gICAgICAgICAgLi4uZGljdGlvbmFyeSxcbiAgICAgICAgICB2YWx1ZXM6IGZpbHRlcmVkVmFsdWVzLFxuICAgICAgICB9O1xuXG4gICAgICAgIG5ld0RpY3Rpb25hcmllcy5wdXNoKG5ld0RpY3Rpb25hcnkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ld0RpY3Rpb25hcmllcztcbiAgfVxuXG4gIHNob3VsZFNob3dEZXBlbmRlbnRGaWVsZChcbiAgICBwYXJlbnRLZXk6IHN0cmluZyxcbiAgICBkZXBlbmRlbnRWYWx1ZUlkczogbnVtYmVyW10sXG4gICAgbW9kZWw6IGFueSA9IHt9XG4gICk6IGJvb2xlYW4ge1xuICAgIC8vIFJldHJpZXZlIHRoZSB2YWx1ZSBvZiB0aGUgcGFyZW50IGRpY3Rpb25hcnkgY29udHJvbFxuICAgIGNvbnN0IHBhcmVudFZhbHVlID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShcbiAgICAgIG1vZGVsLFxuICAgICAgcGFyZW50S2V5XG4gICAgKSBhcyBEaWN0aW9uYXJ5VmFsdWU7XG5cbiAgICBjb25zdCBpZFZhbHVlID0gcGFyZW50VmFsdWU/LmlkXG4gICAgICA/IHBhcmVudFZhbHVlLmlkXG4gICAgICA6IChwYXJlbnRWYWx1ZSBhcyB1bmtub3duIGFzIG51bWJlcik7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHBhcmVudCB2YWx1ZSBpcyBpbiB0aGUgZGVwZW5kZW50VmFsdWVJZHNcbiAgICBpZiAocGFyZW50VmFsdWUgJiYgZGVwZW5kZW50VmFsdWVJZHMuaW5jbHVkZXMoaWRWYWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXROZXN0ZWRWYWx1ZShvYmo6IGFueSwgcGF0aDogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGxldCB2YWx1ZSA9IG9iajtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlW2tleV07XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzdWJtaXQoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0Zvcm0gRGF0YTonLCB0aGlzLmZvcm0udmFsdWUpO1xuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xuICAgICAgY29uc29sZS5sb2coJ0Zvcm0gZGF0YSBoYXMgdmFsaWRhdGlvbiBlcnJvcnMuJyk7XG4gICAgICB0aGlzLnNjcm9sbFRvRXJyb3JTZXJ2aWNlLnNjcm9sbFRvRmlyc3RFcnJvcih0aGlzLmZvcm0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaWMgbWV0aG9kIHRvIHRyaWdnZXIgc2Nyb2xsIHRvIGZpcnN0IGVycm9yIC0gY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIGNvbXBvbmVudHNcbiAgICovXG4gIHB1YmxpYyBzY3JvbGxUb0ZpcnN0VmFsaWRhdGlvbkVycm9yKCk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsVG9FcnJvclNlcnZpY2Uuc2Nyb2xsVG9GaXJzdEVycm9yKHRoaXMuZm9ybSk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGljIG1ldGhvZCB0byBzY3JvbGwgdG8gYSBzcGVjaWZpYyBmaWVsZCBieSBuYW1lXG4gICAqL1xuICBwdWJsaWMgc2Nyb2xsVG9GaWVsZChmaWVsZE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsVG9FcnJvclNlcnZpY2Uuc2Nyb2xsVG9GaWVsZChmaWVsZE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYnVnIG1ldGhvZCB0byBoZWxwIHRyb3VibGVzaG9vdCBzY3JvbGwgaXNzdWVzXG4gICAqL1xuICBwdWJsaWMgZGVidWdGb3JtRWxlbWVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5zY3JvbGxUb0Vycm9yU2VydmljZS5kZWJ1Z0xvZ0Zvcm1FbGVtZW50cygpO1xuICB9XG5cbiAgYXN5bmMgY29uc3RydWN0RGljdGlvbmFyeShcbiAgICBjb250cm9sOiBDb250cm9sRGF0YSxcbiAgICBvcHRpb25zOiBGb3JtbHlGaWVsZENvbmZpZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzcGVjaWZpY0RhdGEgPSBjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE7XG5cbiAgICAvLyBEZXRlcm1pbmUgY29tcG9uZW50IHR5cGUgYmFzZWQgb24gc2V0dGluZ3NcbiAgICBpZiAoc3BlY2lmaWNEYXRhLnNob3dBc0NoZWNrYm94ZXMgPT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMudHlwZSA9ICdmb3JtbHktY2hlY2tib3hlcyc7XG4gICAgfSBlbHNlIGlmIChzcGVjaWZpY0RhdGEuc2hvd0FzUmFkaW9CdXR0b25zTGlzdCA9PT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy50eXBlID0gJ2Zvcm1seS1yYWRpbyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMudHlwZSA9ICdmb3JtbHktZGljdGlvbmFyeS1kcm9wZG93bi10cmVlJztcbiAgICB9XG5cbiAgICBvcHRpb25zLnByb3BzIVsnc3BlY2lmaWNEYXRhJ10gPSBzcGVjaWZpY0RhdGE7XG5cbiAgICBjb25zdCBkaWN0aW9uYXJ5VXVpZCA9IHNwZWNpZmljRGF0YS5kaWN0aW9uYXJ5VVVJRDtcblxuICAgIGlmIChkaWN0aW9uYXJ5VXVpZCkge1xuICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHRoaXMuZGljdGlvbmFyeU1hcC5nZXQoZGljdGlvbmFyeVV1aWQpO1xuICAgICAgaWYgKGRpY3Rpb25hcnkpIHtcbiAgICAgICAgaWYgKGRpY3Rpb25hcnkucmVmZXJlbmNlSWQpIHtcbiAgICAgICAgICBvcHRpb25zLnByb3BzIVsnZGljdGlvbmFyeUlkJ10gPSBkaWN0aW9uYXJ5VXVpZDtcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdERpY3Rpb25hcnlXaXRoUmVmZXJlbmNlcyhcbiAgICAgICAgICAgIGRpY3Rpb25hcnksXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgc3BlY2lmaWNEYXRhXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmF0dGFjaFRvVmFsdWVDaGFuZ2VzKGNvbnRyb2wuaWRlbnRpZmllciwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVHlwZSBpcyBhbHJlYWR5IHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtZXRob2RcbiAgICAgICAgICBvcHRpb25zLnByb3BzIVsnZGljdGlvbmFyeUlkJ10gPSBkaWN0aW9uYXJ5VXVpZDtcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdERpY3Rpb25hcnlXaXRoUmVmZXJlbmNlcyhcbiAgICAgICAgICAgIGRpY3Rpb25hcnksXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgc3BlY2lmaWNEYXRhXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmF0dGFjaFRvVmFsdWVDaGFuZ2VzKGNvbnRyb2wuaWRlbnRpZmllciwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgRGljdGlvbmFyeSBub3QgZm91bmQgZm9yIFVVSUQgJHtkaWN0aW9uYXJ5VXVpZH1gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgVVVJRCBub3QgZm91bmQgZm9yIGRpY3Rpb25hcnkgSUQgJHtzcGVjaWZpY0RhdGEuZGljdGlvbmFyeUlkfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaW5kRGljdGlvbmFyeVZhbHVlT2JqZWN0KFxuICAgIGRpY3Rpb25hcnk6IERpY3Rpb25hcnlEdG8gfCB1bmRlZmluZWQsXG4gICAgdmFsdWU6IGFueVxuICApOiBEaWN0aW9uYXJ5VmFsdWVEdG8gfCB1bmRlZmluZWQge1xuICAgIGlmIChcbiAgICAgICFkaWN0aW9uYXJ5IHx8XG4gICAgICAhZGljdGlvbmFyeS52YWx1ZXMgfHxcbiAgICAgIHZhbHVlID09PSBudWxsIHx8XG4gICAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZT8uaWQgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGRpY3Rpb25hcnkudmFsdWVzLmZpbmQoKHYpID0+IHYuaWQgPT09IHZhbHVlLmlkKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdmFsdWVJZCA9IE51bWJlcih2YWx1ZSk7XG4gICAgICBpZiAoIWlzTmFOKHZhbHVlSWQpKSB7XG4gICAgICAgIHJldHVybiBkaWN0aW9uYXJ5LnZhbHVlcy5maW5kKCh2KSA9PiB2LmlkID09PSB2YWx1ZUlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVJlZmVyZW5jZUZpZWxkcyhcbiAgICBmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10sXG4gICAgcm9vdENvbmZpZzogRm9ybWx5RmllbGRDb25maWdbXSA9IHRoaXMuZm9ybWx5Q29uZmlnXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghZmllbGRzKSByZXR1cm47XG4gICAgY29uc3QgZmllbGRzVG9Qcm9jZXNzID0gWy4uLmZpZWxkc107XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkc1RvUHJvY2Vzcykge1xuICAgICAgY29uc3QgZmllbGRLZXkgPSBmaWVsZC5rZXkgYXMgc3RyaW5nO1xuICAgICAgaWYgKFxuICAgICAgICBmaWVsZEtleSAmJlxuICAgICAgICBmaWVsZC5wcm9wcz8uWydkaWN0aW9uYXJ5SWQnXSAmJlxuICAgICAgICBmaWVsZC5wcm9wcz8uWydzcGVjaWZpY0RhdGEnXVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGZpZWxkS2V5KTtcbiAgICAgICAgY29uc3Qgc3BlY2lmaWNEYXRhID0gZmllbGQucHJvcHNbXG4gICAgICAgICAgJ3NwZWNpZmljRGF0YSdcbiAgICAgICAgXSBhcyBEaWN0aW9uYXJ5Q29udHJvbERhdGE7XG4gICAgICAgIGNvbnN0IGRpY3Rpb25hcnlVdWlkID0gZmllbGQucHJvcHNbJ2RpY3Rpb25hcnlJZCddIGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgbWFpbkRpY3Rpb25hcnkgPSB0aGlzLmRpY3Rpb25hcnlNYXAuZ2V0KGRpY3Rpb25hcnlVdWlkKTtcblxuICAgICAgICBsZXQgdmFsdWVUb1VzZTogYW55ID0gbnVsbDtcblxuICAgICAgICBpZiAoY29udHJvbCAmJiBjb250cm9sLnZhbHVlICE9PSBudWxsICYmIGNvbnRyb2wudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhbHVlVG9Vc2UgPSBjb250cm9sLnZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGZpZWxkLmRlZmF1bHRWYWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgIGZpZWxkLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHZhbHVlVG9Vc2UgPSBmaWVsZC5kZWZhdWx0VmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGhpcy5tb2RlbCAmJlxuICAgICAgICAgIHRoaXMubW9kZWxbZmllbGRLZXldICE9PSBudWxsICYmXG4gICAgICAgICAgdGhpcy5tb2RlbFtmaWVsZEtleV0gIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZVRvVXNlID0gdGhpcy5tb2RlbFtmaWVsZEtleV07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2VsZWN0ZWRWYWx1ZU9iamVjdDogRGljdGlvbmFyeVZhbHVlRHRvIHwgdW5kZWZpbmVkIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGlmICh2YWx1ZVRvVXNlICE9PSBudWxsICYmIG1haW5EaWN0aW9uYXJ5Py5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IHRoaXMuZmluZERpY3Rpb25hcnlWYWx1ZU9iamVjdChcbiAgICAgICAgICAgIG1haW5EaWN0aW9uYXJ5LFxuICAgICAgICAgICAgdmFsdWVUb1VzZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWVsZENvbmZpZ0luVHJlZSA9IHRoaXMuZmluZEZpZWxkQnlLZXkocm9vdENvbmZpZywgZmllbGRLZXkpO1xuICAgICAgICBpZiAoIWZpZWxkQ29uZmlnSW5UcmVlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbW92ZVJlZmVyZW5jZUZpZWxkcyhmaWVsZENvbmZpZ0luVHJlZSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNlbGVjdGVkVmFsdWVPYmplY3QgJiZcbiAgICAgICAgICBzZWxlY3RlZFZhbHVlT2JqZWN0LmlkICE9IG51bGwgJiZcbiAgICAgICAgICBtYWluRGljdGlvbmFyeT8uaWQgIT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBwb3RlbnRpYWxSZWZlcmVuY2VEaWN0aW9uYXJpZXMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgICAgdGhpcy5kaWN0aW9uYXJ5TWFwLnZhbHVlcygpXG4gICAgICAgICAgKS5maWx0ZXIoKGRpY3QpID0+IGRpY3QucmVmZXJlbmNlSWQgPT09IG1haW5EaWN0aW9uYXJ5LmlkKTtcblxuICAgICAgICAgIGlmIChwb3RlbnRpYWxSZWZlcmVuY2VEaWN0aW9uYXJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlRGljdGlvbmFyaWVzVG9TaG93ID1cbiAgICAgICAgICAgICAgdGhpcy5jcmVhdGVSZWZlcmVuY2VEaWN0aW9uYXJpZXNGcm9tU2VsZWN0ZWRWYWx1ZShcbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxSZWZlcmVuY2VEaWN0aW9uYXJpZXMsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZU9iamVjdFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlRGljdGlvbmFyaWVzVG9TaG93Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRSZWZlcmVuY2VEaWN0aW9uYXJ5RmllbGRzSWZOZWNlc3NhcnkoXG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlRGljdGlvbmFyaWVzVG9TaG93LFxuICAgICAgICAgICAgICAgIGZpZWxkQ29uZmlnSW5UcmVlLFxuICAgICAgICAgICAgICAgIGZpZWxkQ29uZmlnSW5UcmVlLnR5cGUsXG4gICAgICAgICAgICAgICAgc3BlY2lmaWNEYXRhPy5yZWxhdGVkRGljdGlvbmFyaWVzVHJhbnNsYXRpb25zIHx8IFtdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWVsZC5maWVsZEdyb3VwICYmIGZpZWxkLmZpZWxkR3JvdXAubGVuZ3RoID4gMCkge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVSZWZlcmVuY2VGaWVsZHMoZmllbGQuZmllbGRHcm91cCwgcm9vdENvbmZpZyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGZpZWxkcyA9PT0gdGhpcy5mb3JtbHlDb25maWcgfHxcbiAgICAgIGZpZWxkcyA9PT0gdGhpcy5mb3JtbHlDb25maWdbMF0/LmZpZWxkR3JvdXBcbiAgICApIHtcbiAgICAgIHRoaXMudXBkYXRlRm9ybWx5Q29uZmlnKCk7XG4gICAgICB0aGlzLmZvcm1seUNvbmZpZ1VwZGF0ZWQuZW1pdCgpO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0RGljdGlvbmFyeVdpdGhSZWZlcmVuY2VzKFxuICAgIGRpY3Rpb25hcnk6IERpY3Rpb25hcnlEdG8sXG4gICAgb3B0aW9uczogRm9ybWx5RmllbGRDb25maWcsXG4gICAgZGljdGlvbmFyeUNvbnRyb2xEYXRhOiBEaWN0aW9uYXJ5Q29udHJvbERhdGFcbiAgKSB7XG4gICAgaWYgKG9wdGlvbnMucHJvcHMpIHtcbiAgICAgIHZhciBjdXJyZW50TGFuZ3VhZ2VJZCA9IFV0aWxzLmZpbmRMYW5ndWFnZUlkQnlJc28oXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLFxuICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgKTtcblxuICAgICAgLy8gUGFzcyBwcmVsb2FkZWQgZGljdGlvbmFyeSBkYXRhIHRvIGZvcm1seSBjb21wb25lbnRcbiAgICAgIG9wdGlvbnMucHJvcHNbJ2RpY3Rpb25hcnlEYXRhJ10gPSBkaWN0aW9uYXJ5O1xuICAgICAgb3B0aW9ucy5wcm9wc1snbGFuZ3VhZ2VzJ10gPSB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcztcbiAgICAgIG9wdGlvbnMucHJvcHNbJ3ByZWxvYWRlZERpY3Rpb25hcmllcyddID0gdGhpcy5kaWN0aW9uYXJ5TWFwO1xuICAgICAgb3B0aW9ucy5wcm9wc1sndXNlUHJlbG9hZGVkRGF0YSddID0gdHJ1ZTtcblxuICAgICAgb3B0aW9ucy5wcm9wcy5vcHRpb25zID0gZGljdGlvbmFyeS52YWx1ZXM/Lm1hcCgodmFsdWUpID0+ICh7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgbGFiZWw6XG4gICAgICAgICAgVXRpbHMuZmluZFZhbHVlVHJhbnNsYXRpb24oXG4gICAgICAgICAgICB2YWx1ZS52YWx1ZVRyYW5zbGF0aW9ucyxcbiAgICAgICAgICAgIGN1cnJlbnRMYW5ndWFnZUlkXG4gICAgICAgICAgKSB8fCB2YWx1ZS5uYW1lLFxuICAgICAgICBjdXJyZW50TGFuZ3VhZ2VJc286IHRoaXMuY3VycmVudExhbmd1YWdlSXNvLFxuICAgICAgICByZWxhdGVkRGljdGlvbmFyaWVzVHJhbnNsYXRpb25zOlxuICAgICAgICAgIGRpY3Rpb25hcnlDb250cm9sRGF0YS5yZWxhdGVkRGljdGlvbmFyaWVzVHJhbnNsYXRpb25zLFxuICAgICAgfSkpO1xuXG4gICAgICBvcHRpb25zLnByb3BzWydzZWxlY3RlZFJlbGF0ZWREaWN0aW9uYXJpZXMnXSA9XG4gICAgICAgIGRpY3Rpb25hcnlDb250cm9sRGF0YS5zZWxlY3RlZFJlbGF0ZWREaWN0aW9uYXJpZXMgfHwgW107XG4gICAgICBvcHRpb25zLnByb3BzWydhbGxvd011bHRpcGxlU2VsZWN0aW9uJ10gPVxuICAgICAgICBkaWN0aW9uYXJ5Q29udHJvbERhdGEuYWxsb3dNdWx0aXBsZVNlbGVjdGlvbiB8fCBmYWxzZTtcblxuICAgICAgbGV0IGluaXRpYWxWYWx1ZU9iamVjdDogRGljdGlvbmFyeVZhbHVlIHwgbnVsbCA9IG51bGw7XG4gICAgICBjb25zdCBjb250cm9sS2V5ID0gb3B0aW9ucy5rZXkgYXMgc3RyaW5nO1xuICAgICAgY29uc3QgZGljdGlvbmFyeURlZmF1bHRWYWx1ZUlkID1cbiAgICAgICAgZGljdGlvbmFyeUNvbnRyb2xEYXRhLmRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZDtcbiAgICAgIGlmIChcbiAgICAgICAgISh0aGlzLm1vZGVsICYmIHRoaXMubW9kZWxbY29udHJvbEtleV0gIT0gbnVsbCkgJiZcbiAgICAgICAgZGljdGlvbmFyeURlZmF1bHRWYWx1ZUlkICE9IG51bGxcbiAgICAgICkge1xuICAgICAgICBpbml0aWFsVmFsdWVPYmplY3QgPSB0aGlzLmZpbmRBbmRNYXBEZWZhdWx0VmFsdWUoXG4gICAgICAgICAgZGljdGlvbmFyeSxcbiAgICAgICAgICBkaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWRcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgb3B0aW9ucy5kZWZhdWx0VmFsdWUgPSBpbml0aWFsVmFsdWVPYmplY3Q7XG5cbiAgICAgIC8vIFBhc3MgZGVmYXVsdCB2YWx1ZSBJRCB0byBmb3JtbHkgY29tcG9uZW50XG4gICAgICBvcHRpb25zLnByb3BzWydkaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWQnXSA9IGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZDtcblxuICAgICAgY29uc3QgY29udHJvbElkID0gb3B0aW9ucy5rZXk7XG4gICAgICBpZiAodGhpcy5maWxsRGF0YSAmJiB0aGlzLmZpbGxEYXRhLmZsdXgpIHtcbiAgICAgICAgZm9yIChjb25zdCBzdGVwIG9mIHRoaXMuZmlsbERhdGEuZmx1eCkge1xuICAgICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzdGVwLnNlY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gc2VjdGlvbi5jb250cm9scy5maW5kKFxuICAgICAgICAgICAgICAoY3RybDoge1xuICAgICAgICAgICAgICAgIGNvbnRyb2xJZDogc3RyaW5nIHwgbnVtYmVyIHwgKHN0cmluZyB8IG51bWJlcilbXSB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgfSkgPT4gY3RybC5jb250cm9sSWQgPT09IGNvbnRyb2xJZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjb250cm9sICYmIGNvbnRyb2wuZmlsbFZhbHVlICYmIGNvbnRyb2wuZmlsbFZhbHVlLm5hbWUpIHtcbiAgICAgICAgICAgICAgb3B0aW9ucy5wcm9wc1sndmFsdWUnXSA9IGNvbnRyb2wuZmlsbFZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUZvcm1seUNvbmZpZygpO1xuICB9XG5cbiAgYXN5bmMgYWRkUmVmZXJlbmNlRGljdGlvbmFyeUZpZWxkc0lmTmVjZXNzYXJ5KFxuICAgIHJlZmVycmVuY2VkRGljdGlvbmFyaWVzOiBhbnlbXSxcbiAgICBwYXJlbnREaWN0aW9uYXJ5RmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnLFxuICAgIHR5cGU6IGFueSxcbiAgICByZWxhdGVkRGljdGlvbmFyaWVzVHJhbnNsYXRpb25zOiBEaWN0aW9uYXJ5TGFiZWxJbmZvW11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHJlZmVycmVuY2VkRGljdGlvbmFyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkUmVsYXRlZERpY3Rpb25hcmllcyA9XG4gICAgICAgIHBhcmVudERpY3Rpb25hcnlGaWVsZC5wcm9wcz8uWydzZWxlY3RlZFJlbGF0ZWREaWN0aW9uYXJpZXMnXSB8fCBbXTtcblxuICAgICAgY29uc3Qgc2VsZWN0ZWREaWN0aW9uYXJpZXMgPSByZWZlcnJlbmNlZERpY3Rpb25hcmllcy5maWx0ZXIoKGRpY3QpID0+XG4gICAgICAgIHNlbGVjdGVkUmVsYXRlZERpY3Rpb25hcmllcy5pbmNsdWRlcyhkaWN0LnV1aWQpXG4gICAgICApO1xuXG4gICAgICBzZWxlY3RlZERpY3Rpb25hcmllcy5mb3JFYWNoKChyZWZlcmVuY2VEaWN0aW9uYXJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZURpY3Rpb25hcnlVdWlkID0gcmVmZXJlbmNlRGljdGlvbmFyeS51dWlkO1xuXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudE9ubHlGb3JDb25maWcgPSB0aGlzLmZsdXhcbiAgICAgICAgICAuZmxhdE1hcCgocykgPT4gcy5zZWN0aW9ucylcbiAgICAgICAgICAuZmxhdE1hcCgoc2VjKSA9PiBzZWMuY29udHJvbHMpXG4gICAgICAgICAgLmZpbmQoXG4gICAgICAgICAgICAoY3RybCkgPT5cbiAgICAgICAgICAgICAgY3RybD8uc3BlY2lmaWNDb250cm9sRGF0YT8uZGljdGlvbmFyeVVVSUQgPT09XG4gICAgICAgICAgICAgIHJlZmVyZW5jZURpY3Rpb25hcnlVdWlkICYmIGN0cmw/LmlzT25seUZvckNvbmZpZyA9PT0gdHJ1ZVxuICAgICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgbmV3RmllbGRLZXkgPVxuICAgICAgICAgIGNvbXBvbmVudE9ubHlGb3JDb25maWc/LmlkZW50aWZpZXIgPz9cbiAgICAgICAgICBgZXh0cmFfJHtyZWZlcmVuY2VEaWN0aW9uYXJ5VXVpZH1gO1xuXG4gICAgICAgIGxldCByZWZlcmVuY2VEaWN0aW9uYXJ5TGFiZWwgPSByZWZlcmVuY2VEaWN0aW9uYXJ5Lm5hbWU7XG5cbiAgICAgICAgY29uc3Qgc3BlY2lmaWNUcmFuc2xhdGlvblZhbHVlID0gcmVsYXRlZERpY3Rpb25hcmllc1RyYW5zbGF0aW9uc1xuICAgICAgICAgIC5maW5kKChkKSA9PiBkLmRpY3Rpb25hcnlVVUlEID09IHJlZmVyZW5jZURpY3Rpb25hcnlVdWlkKVxuICAgICAgICAgID8udHJhbnNsYXRpb25zPy5maW5kKFxuICAgICAgICAgICAgKHQpID0+IHQubGFuZ3VhZ2VJc28gPT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgICApPy52YWx1ZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgc3BlY2lmaWNUcmFuc2xhdGlvblZhbHVlICYmXG4gICAgICAgICAgc3BlY2lmaWNUcmFuc2xhdGlvblZhbHVlLnRyaW0oKSAhPT0gJydcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVmZXJlbmNlRGljdGlvbmFyeUxhYmVsID0gc3BlY2lmaWNUcmFuc2xhdGlvblZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZmVyZW5jZURpY3Rpb25hcnlMYWJlbCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMYW5ndWFnZUlkID0gVXRpbHMuZmluZExhbmd1YWdlSWRCeUlzbyhcbiAgICAgICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG5ld0ZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgICBrZXk6IG5ld0ZpZWxkS2V5LFxuICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGxhYmVsOiByZWZlcmVuY2VEaWN0aW9uYXJ5TGFiZWwsXG4gICAgICAgICAgICBkZXNpZ246IHRoaXMuZGVzaWduLFxuICAgICAgICAgICAgZGljdGlvbmFyeUlkOiByZWZlcmVuY2VEaWN0aW9uYXJ5VXVpZCxcbiAgICAgICAgICAgIGRpY3Rpb25hcnlEYXRhOiByZWZlcmVuY2VEaWN0aW9uYXJ5LFxuICAgICAgICAgICAgbGFuZ3VhZ2VzOiB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyxcbiAgICAgICAgICAgIHByZWxvYWRlZERpY3Rpb25hcmllczogdGhpcy5kaWN0aW9uYXJ5TWFwLFxuICAgICAgICAgICAgdXNlUHJlbG9hZGVkRGF0YTogdHJ1ZSxcbiAgICAgICAgICAgIGN1cnJlbnRMYW5ndWFnZUlzbzogdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICAgICAgICBjdXJyZW50TGFuZ3VhZ2VJZDogY3VycmVudExhbmd1YWdlSWQsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgc3R5bGU6IHRoaXMuc3R5bGVPYmplY3RUb1N0cmluZ0V4Y2VwdEJhY2tncm91bmQoXG4gICAgICAgICAgICAgICAgdGhpcy5kZXNpZ25bYC5mb250LWxpc3RgXSB8fCB7fVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9wdGlvbnM6IHJlZmVyZW5jZURpY3Rpb25hcnkudmFsdWVzPy5tYXAoKHZhbHVlOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgbGFiZWw6XG4gICAgICAgICAgICAgICAgVXRpbHMuZmluZFZhbHVlVHJhbnNsYXRpb24oXG4gICAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZVRyYW5zbGF0aW9ucyxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRMYW5ndWFnZUlkXG4gICAgICAgICAgICAgICAgKSB8fCB2YWx1ZS5uYW1lLFxuICAgICAgICAgICAgICBjdXJyZW50TGFuZ3VhZ2VJc286IHRoaXMuY3VycmVudExhbmd1YWdlSXNvLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHJlZmVyZW5jZURpY3Rpb25hcnkuZGVmYXVsdFZhbHVlSWQpIHtcbiAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsID0gdGhpcy5maW5kQW5kTWFwRGVmYXVsdFZhbHVlKFxuICAgICAgICAgICAgcmVmZXJlbmNlRGljdGlvbmFyeSxcbiAgICAgICAgICAgIHJlZmVyZW5jZURpY3Rpb25hcnkuZGVmYXVsdFZhbHVlSWRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChkZWZhdWx0VmFsKSB7XG4gICAgICAgICAgICBuZXdGaWVsZC5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudEZpZWxkR3JvdXAgPSBwYXJlbnREaWN0aW9uYXJ5RmllbGQucGFyZW50XG4gICAgICAgICAgPyBwYXJlbnREaWN0aW9uYXJ5RmllbGQucGFyZW50LmZpZWxkR3JvdXBcbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGlmIChwYXJlbnRGaWVsZEdyb3VwKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50SW5kZXggPSBwYXJlbnRGaWVsZEdyb3VwLmZpbmRJbmRleChcbiAgICAgICAgICAgIChmaWVsZCkgPT4gZmllbGQua2V5ID09PSBwYXJlbnREaWN0aW9uYXJ5RmllbGQua2V5XG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAocGFyZW50SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMuZmluZExhc3RDaGlsZEluZGV4KFxuICAgICAgICAgICAgICBwYXJlbnRGaWVsZEdyb3VwLFxuICAgICAgICAgICAgICBwYXJlbnRJbmRleFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgcGVyY2VudGFnZVRvQWRkID0gdGhpcy5nZXRFeGlzdGluZ1BlcmNlbnRhZ2UoXG4gICAgICAgICAgICAgIHBhcmVudEZpZWxkR3JvdXAsXG4gICAgICAgICAgICAgIHBhcmVudEluZGV4XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbmV3RmllbGQuY2xhc3NOYW1lID0gcGVyY2VudGFnZVRvQWRkID09PSAwXG4gICAgICAgICAgICAgID8gcGFyZW50RGljdGlvbmFyeUZpZWxkLmNsYXNzTmFtZVxuICAgICAgICAgICAgICA6IHRoaXMuZ2V0UGVyY2VudGFnZUNsYXNzTmFtZShwZXJjZW50YWdlVG9BZGQpO1xuXG4gICAgICAgICAgICBwYXJlbnRGaWVsZEdyb3VwLnNwbGljZShlbmRJbmRleCArIDEsIDAsIG5ld0ZpZWxkKTtcblxuICAgICAgICAgICAgY29uc3QgY2xhc3NOYW1lVG9BZGQgPVxuICAgICAgICAgICAgICB0eXBlID09PSAncmFkaW8nID8gYCBjb21wb25lbnQtcmFkaW9gIDogYCBjb21wb25lbnQtZGF0YWA7XG4gICAgICAgICAgICBuZXdGaWVsZC5jbGFzc05hbWUgKz0gY2xhc3NOYW1lVG9BZGQ7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaFRvVmFsdWVDaGFuZ2VzKG5ld0ZpZWxkS2V5LCBuZXdGaWVsZCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm1seUNvbmZpZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RXhpc3RpbmdQZXJjZW50YWdlKGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSwgaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IHBlcmNlbnRhZ2UgPSAwO1xuICAgIGNvbnN0IGZpZWxkID0gZmllbGRzW2luZGV4XTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBmaWVsZC5jbGFzc05hbWU7XG4gICAgaWYgKGZpZWxkLnR5cGU/LnRvU3RyaW5nKCkgIT09IFN0ZXBDb250cm9sVHlwZS5OZXdSb3cudG9TdHJpbmcoKSkge1xuICAgICAgaWYgKGNsYXNzTmFtZSAmJiBjbGFzc05hbWUuc3RhcnRzV2l0aCgncGVyY2VudGFnZS13aWR0aC0nKSkge1xuICAgICAgICBwZXJjZW50YWdlID1cbiAgICAgICAgICAocGFyc2VJbnQoY2xhc3NOYW1lLnJlcGxhY2UoJ3BlcmNlbnRhZ2Utd2lkdGgtJywgJycpLCAxMCkgKiAxMDApIC8gMTI7XG4gICAgICB9IGVsc2UgaWYgKGNsYXNzTmFtZSAmJiBjbGFzc05hbWUuc3RhcnRzV2l0aCgncGl4ZWwtd2lkdGgtJykpIHtcbiAgICAgICAgY29uc3QgcGl4ZWxzID0gcGFyc2VJbnQoY2xhc3NOYW1lLnJlcGxhY2UoJ3BpeGVsLXdpZHRoLScsICcnKSwgMTApO1xuICAgICAgICBwZXJjZW50YWdlID0gKHBpeGVscyAvIDEwMDApICogMTAwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGVyY2VudGFnZTtcbiAgfVxuXG4gIGNhbGN1bGF0ZVJlbWFpbmluZ1BlcmNlbnRhZ2VGb3JSYW5nZShcbiAgICBmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgIGVuZEluZGV4OiBudW1iZXJcbiAgKTogbnVtYmVyIHtcbiAgICBsZXQgcmVtYWluaW5nUGVyY2VudGFnZSA9IDEwMDtcblxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyBpKyspIHtcbiAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSB0aGlzLmdldEV4aXN0aW5nUGVyY2VudGFnZShmaWVsZHMsIGkpO1xuICAgICAgcmVtYWluaW5nUGVyY2VudGFnZSAtPSBwZXJjZW50YWdlO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5tYXgocmVtYWluaW5nUGVyY2VudGFnZSwgMCk7XG4gIH1cblxuICByZW1vdmVSZWZlcmVuY2VGaWVsZHMoY3VycmVudEZvcm1seUZpZWxkQ29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZykge1xuICAgIGNvbnN0IHJlZmVycmVkSW5EaWN0aW9uYXJpZXNVVUlkcyA9XG4gICAgICBjdXJyZW50Rm9ybWx5RmllbGRDb25maWcucHJvcHM/LlsnZGljdGlvbmFyeURhdGEnXVxuICAgICAgICA/LnJlZmVycmVkSW5EaWN0aW9uYXJpZXNVVUlkcztcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlZmVycmVkSW5EaWN0aW9uYXJpZXNVVUlkcykpIHtcbiAgICAgIGNvbnN0IHBhcmVudEZpZWxkR3JvdXAgPSBjdXJyZW50Rm9ybWx5RmllbGRDb25maWcucGFyZW50XG4gICAgICAgID8gY3VycmVudEZvcm1seUZpZWxkQ29uZmlnLnBhcmVudC5maWVsZEdyb3VwXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGlmIChwYXJlbnRGaWVsZEdyb3VwKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudEluZGV4ID0gcGFyZW50RmllbGRHcm91cC5maW5kSW5kZXgoXG4gICAgICAgICAgKGZpZWxkKSA9PiBmaWVsZC5rZXkgPT09IGN1cnJlbnRGb3JtbHlGaWVsZENvbmZpZy5rZXlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAocGFyZW50SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHJlZmVycmVkSW5EaWN0aW9uYXJpZXNVVUlkcykge1xuICAgICAgICAgICAgY29uc3QgaWRUb0ZpbmQgPSAnZXh0cmFfJyArIGl0ZW07XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBwYXJlbnRGaWVsZEdyb3VwLmxlbmd0aCAtIDE7IGkgPiBwYXJlbnRJbmRleDsgaS0tKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRGaWVsZEtleSA9IHBhcmVudEZpZWxkR3JvdXBbaV0ua2V5Py50b1N0cmluZygpO1xuICAgICAgICAgICAgICBpZiAoY3VycmVudEZpZWxkS2V5ICYmIGN1cnJlbnRGaWVsZEtleSA9PT0gaWRUb0ZpbmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyRm9ybUNvbnRyb2xWYWx1ZShpZFRvRmluZCk7XG4gICAgICAgICAgICAgICAgcGFyZW50RmllbGRHcm91cC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBhZGRDaGlsZERpY3Rpb25hcnlGaWVsZChcbiAgICBjaGlsZERpY3Rpb25hcnlVdWlkOiBzdHJpbmcsXG4gICAgcGFyZW50RGljdGlvbmFyeUZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyxcbiAgICB0eXBlOiBhbnksXG4gICAgcmVsYXRlZERpY3Rpb25hcmllc1RyYW5zbGF0aW9uczogRGljdGlvbmFyeUxhYmVsSW5mb1tdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChjaGlsZERpY3Rpb25hcnlVdWlkKSB7XG4gICAgICBjb25zdCBjaGlsZERpY3Rpb25hcnkgPSB0aGlzLmRpY3Rpb25hcnlNYXAuZ2V0KGNoaWxkRGljdGlvbmFyeVV1aWQpO1xuICAgICAgaWYgKGNoaWxkRGljdGlvbmFyeSkge1xuICAgICAgICBsZXQgY2hpbGREaWN0aW9uYXJ5TGFiZWwgPSBjaGlsZERpY3Rpb25hcnkubmFtZTtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPVxuICAgICAgICAgIHJlbGF0ZWREaWN0aW9uYXJpZXNUcmFuc2xhdGlvbnNcbiAgICAgICAgICAgIC5maW5kKChkKSA9PiBkLmRpY3Rpb25hcnlVVUlEID09IGNoaWxkRGljdGlvbmFyeVV1aWQpXG4gICAgICAgICAgICA/LnRyYW5zbGF0aW9ucy5maW5kKCh0KSA9PiB0Lmxhbmd1YWdlSXNvID09IHRoaXMuY3VycmVudExhbmd1YWdlSXNvKVxuICAgICAgICAgICAgPy52YWx1ZSB8fCAnJztcbiAgICAgICAgaWYgKHRyYW5zbGF0aW9uKSB7XG4gICAgICAgICAgY2hpbGREaWN0aW9uYXJ5TGFiZWwgPSB0cmFuc2xhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdGaWVsZDogRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICAgICAga2V5OiBgJHtwYXJlbnREaWN0aW9uYXJ5RmllbGQua2V5fV9jaGlsZF8ke2NoaWxkRGljdGlvbmFyeVV1aWR9YCxcbiAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBsYWJlbDogY2hpbGREaWN0aW9uYXJ5TGFiZWwsXG4gICAgICAgICAgICBkaWN0aW9uYXJ5RGF0YTogY2hpbGREaWN0aW9uYXJ5LFxuICAgICAgICAgICAgbGFuZ3VhZ2VzOiB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyxcbiAgICAgICAgICAgIHByZWxvYWRlZERpY3Rpb25hcmllczogdGhpcy5kaWN0aW9uYXJ5TWFwLFxuICAgICAgICAgICAgb3B0aW9uczogY2hpbGREaWN0aW9uYXJ5LnZhbHVlcz8ubWFwKCh2YWx1ZSkgPT4gKHtcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLmlkLFxuICAgICAgICAgICAgICBsYWJlbDogdmFsdWUubmFtZSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICBzdHlsZTogdGhpcy5zdHlsZU9iamVjdFRvU3RyaW5nRXhjZXB0QmFja2dyb3VuZChcbiAgICAgICAgICAgICAgICB0aGlzLmRlc2lnbltgLmZvbnQtbGlzdGBdIHx8IHt9XG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaG9va3M6IHtcbiAgICAgICAgICAgIG9uSW5pdDogKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgICAgICAgICAgIHRoaXMuZmllbGRVbnN1YnNjcmliZVN1YmplY3RzLnB1c2godW5zdWJzY3JpYmUkKTtcblxuICAgICAgICAgICAgICBmaWVsZC5mb3JtQ29udHJvbD8udmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHVuc3Vic2NyaWJlJCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShhc3luYyAoc2VsZWN0ZWRWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSBjaGlsZERpY3Rpb25hcnkudmFsdWVzPy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAodmFsKSA9PiB2YWwuaWQgPT09IHNlbGVjdGVkVmFsdWVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb24gJiYgc2VsZWN0ZWRPcHRpb24uY2hpbGREaWN0aW9uYXJ5VVVJRCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFkZENoaWxkRGljdGlvbmFyeUZpZWxkKFxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uLmNoaWxkRGljdGlvbmFyeVVVSUQsXG4gICAgICAgICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGVkRGljdGlvbmFyaWVzVHJhbnNsYXRpb25zXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkRmllbGRzKGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVGb3JtbHlDb25maWcoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBmaWVsZC5ob29rcyEub25EZXN0cm95ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgdW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcGFyZW50RmllbGRHcm91cCA9IHBhcmVudERpY3Rpb25hcnlGaWVsZC5wYXJlbnRcbiAgICAgICAgICA/IHBhcmVudERpY3Rpb25hcnlGaWVsZC5wYXJlbnQuZmllbGRHcm91cFxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgaWYgKHBhcmVudEZpZWxkR3JvdXApIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnRJbmRleCA9IHBhcmVudEZpZWxkR3JvdXAuZmluZEluZGV4KFxuICAgICAgICAgICAgKGZpZWxkKSA9PiBmaWVsZC5rZXkgPT09IHBhcmVudERpY3Rpb25hcnlGaWVsZC5rZXlcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChwYXJlbnRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy5maW5kTGFzdENoaWxkSW5kZXgoXG4gICAgICAgICAgICAgIHBhcmVudEZpZWxkR3JvdXAsXG4gICAgICAgICAgICAgIHBhcmVudEluZGV4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBwZXJjZW50YWdlVG9BZGQgPSB0aGlzLmdldEV4aXN0aW5nUGVyY2VudGFnZShcbiAgICAgICAgICAgICAgcGFyZW50RmllbGRHcm91cCxcbiAgICAgICAgICAgICAgcGFyZW50SW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBuZXdGaWVsZC5jbGFzc05hbWUgPSB0aGlzLmdldFBlcmNlbnRhZ2VDbGFzc05hbWUocGVyY2VudGFnZVRvQWRkKTtcbiAgICAgICAgICAgIHBhcmVudEZpZWxkR3JvdXAuc3BsaWNlKGVuZEluZGV4ICsgMSwgMCwgbmV3RmllbGQpO1xuXG4gICAgICAgICAgICBjb25zdCBjbGFzc05hbWVUb0FkZCA9XG4gICAgICAgICAgICAgIHR5cGUgPT09ICdyYWRpbycgPyBgIGNvbXBvbmVudC1yYWRpb2AgOiBgIGNvbXBvbmVudC1kYXRhYDtcbiAgICAgICAgICAgIG5ld0ZpZWxkLmNsYXNzTmFtZSArPSBjbGFzc05hbWVUb0FkZDtcbiAgICAgICAgICAgIC8vdGhpcy5hdHRhY2hUb1ZhbHVlQ2hhbmdlcyhuZXdGaWVsZEtleSwgbmV3RmllbGQpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGb3JtbHlDb25maWcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgQ2hpbGQgZGljdGlvbmFyeSBub3QgZm91bmQgZm9yIFVVSUQgJHtjaGlsZERpY3Rpb25hcnlVdWlkfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNvbXBsZXRpb24oKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ09yaWdpbiBmb3JtIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICB0aGlzLmNvbXBsZXRpb25FdmVudC5lbWl0KCk7XG4gIH1cblxuICBmaW5kTGFzdENoaWxkSW5kZXgoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdLCBwYXJlbnRJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBwYXJlbnRLZXlQcmVmaXggPSBgJHtmaWVsZHNbcGFyZW50SW5kZXhdLmtleX1fYDtcbiAgICBsZXQgbGFzdEluZGV4ID0gcGFyZW50SW5kZXg7XG5cbiAgICBmb3IgKGxldCBpID0gcGFyZW50SW5kZXggKyAxOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZmllbGRzW2ldLmtleT8udG9TdHJpbmcoKS5zdGFydHNXaXRoKHBhcmVudEtleVByZWZpeCkpIHtcbiAgICAgICAgbGFzdEluZGV4ID0gaTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsYXN0SW5kZXg7XG4gIH1cblxuICBmaW5kRmllbGRCeUtleShcbiAgICBmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10sXG4gICAga2V5OiBzdHJpbmdcbiAgKTogRm9ybWx5RmllbGRDb25maWcgfCBudWxsIHtcbiAgICBpZiAoIWZpZWxkcykgcmV0dXJuIG51bGw7XG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnc3RlcHBlcicgJiYgZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgICBjb25zdCBmb3VuZEluU3RlcHBlciA9IHRoaXMuZmluZEZpZWxkQnlLZXkoZmllbGQuZmllbGRHcm91cCwga2V5KTtcbiAgICAgICAgaWYgKGZvdW5kSW5TdGVwcGVyKSByZXR1cm4gZm91bmRJblN0ZXBwZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWVsZC5rZXkgPT09IGtleSkge1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZEZpZWxkQnlLZXkoZmllbGQuZmllbGRHcm91cCwga2V5KTtcbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmVtb3ZlQ2hpbGRGaWVsZHMocGFyZW50RmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSB7XG4gICAgY29uc3QgcGFyZW50RmllbGRHcm91cCA9IHBhcmVudEZpZWxkLnBhcmVudFxuICAgICAgPyBwYXJlbnRGaWVsZC5wYXJlbnQuZmllbGRHcm91cFxuICAgICAgOiBudWxsO1xuXG4gICAgaWYgKHBhcmVudEZpZWxkR3JvdXApIHtcbiAgICAgIGNvbnN0IHBhcmVudEluZGV4ID0gcGFyZW50RmllbGRHcm91cC5maW5kSW5kZXgoXG4gICAgICAgIChmaWVsZCkgPT4gZmllbGQua2V5ID09PSBwYXJlbnRGaWVsZC5rZXlcbiAgICAgICk7XG5cbiAgICAgIGlmIChwYXJlbnRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgcGFyZW50S2V5UHJlZml4ID0gYCR7cGFyZW50RmllbGQua2V5fV9jaGlsZF9gO1xuXG4gICAgICAgIC8vIFJlbW92ZSBvbmx5IHRoZSByZWxldmFudCBjaGlsZCBmaWVsZHNcbiAgICAgICAgZm9yIChsZXQgaSA9IHBhcmVudEZpZWxkR3JvdXAubGVuZ3RoIC0gMTsgaSA+IHBhcmVudEluZGV4OyBpLS0pIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RmllbGRLZXkgPSBwYXJlbnRGaWVsZEdyb3VwW2ldLmtleT8udG9TdHJpbmcoKTtcbiAgICAgICAgICBpZiAoY3VycmVudEZpZWxkS2V5ICYmIGN1cnJlbnRGaWVsZEtleS5zdGFydHNXaXRoKHBhcmVudEtleVByZWZpeCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJGb3JtQ29udHJvbFZhbHVlKGN1cnJlbnRGaWVsZEtleSk7XG4gICAgICAgICAgICBwYXJlbnRGaWVsZEdyb3VwLnNwbGljZShpLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTkVXOiBMb2FkIEFMTCBkaWN0aW9uYXJpZXMgbmVlZGVkIGZvciB0aGlzIGFwcCB1c2luZyB0aGUgbmV3IGFwcC1iYXNlZCBlbmRwb2ludFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsb2FkQWxsUmVxdWlyZWREaWN0aW9uYXJpZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmFwcE1vZGVsPy5hcHBsaWNhdGlvblV1aWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignTm8gYXBwIFVVSUQgYXZhaWxhYmxlIGZvciBkaWN0aW9uYXJ5IGxvYWRpbmcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmxvYWRBcHBEaWN0aW9uYXJpZXMoXG4gICAgICAgICAgdGhpcy5hcHBNb2RlbC5hcHBsaWNhdGlvblV1aWQsXG4gICAgICAgICAgRW52aXJvbm1lbnRUeXBlLkNvbmZpZ1xuICAgICAgICApXG4gICAgICApO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAn4p2MIEJhY2tlbmQgZmFpbGVkIHRvIGxvYWQgZGljdGlvbmFyaWVzOicsXG4gICAgICAgICAgcmVzcG9uc2UuZXJyb3JzXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2ltcGxlIGFzc2lnbm1lbnQgLSBBTEwgZGljdGlvbmFyaWVzIGFuZCBkZXBlbmRlbmNpZXMgYWxyZWFkeSBsb2FkZWQgYnkgYmFja2VuZFxuICAgICAgT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuZGljdGlvbmFyaWVzKS5mb3JFYWNoKChbdXVpZCwgZGljdF0pID0+IHtcbiAgICAgICAgdGhpcy5kaWN0aW9uYXJ5TWFwLnNldCh1dWlkLCBkaWN0KTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCfinYwgRmFpbGVkIHRvIGxvYWQgYXBwIGRpY3Rpb25hcmllczonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJGb3JtQ29udHJvbFZhbHVlKGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXlzID0gZmllbGRLZXkuc3BsaXQoJy4nKTtcbiAgICBsZXQgY29udHJvbCA9IHRoaXMuZm9ybTtcbiAgICBsZXQgbW9kZWwgPSB0aGlzLm1vZGVsO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgY29udHJvbCA9IGNvbnRyb2wuZ2V0KGtleXNbaV0pIGFzIEZvcm1Hcm91cDtcbiAgICAgIG1vZGVsID0gbW9kZWxba2V5c1tpXV07XG4gICAgfVxuXG4gICAgY29uc3QgZmluYWxLZXkgPSBrZXlzW2tleXMubGVuZ3RoIC0gMV07XG4gICAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC5nZXQoZmluYWxLZXkpKSB7XG4gICAgICBjb250cm9sLnJlbW92ZUNvbnRyb2woZmluYWxLZXkpO1xuICAgIH1cblxuICAgIGlmIChtb2RlbCAmJiBtb2RlbFtmaW5hbEtleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVsZXRlIG1vZGVsW2ZpbmFsS2V5XTtcbiAgICB9XG4gIH1cblxuICBmaW5kRmllbGQoXG4gICAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdLFxuICAgIGtleTogc3RyaW5nXG4gICk6IEZvcm1seUZpZWxkQ29uZmlnIHwgbnVsbCB7XG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgIGlmIChmaWVsZC5rZXkgPT09IGtleSkge1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9XG4gICAgICBpZiAoZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgICBjb25zdCBuZXN0ZWRGaWVsZCA9IHRoaXMuZmluZEZpZWxkKGZpZWxkLmZpZWxkR3JvdXAsIGtleSk7XG4gICAgICAgIGlmIChuZXN0ZWRGaWVsZCkge1xuICAgICAgICAgIHJldHVybiBuZXN0ZWRGaWVsZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgcG9wdWxhdGVNb2RlbFdpdGhGaWxsRGF0YShmaWxsRGF0YTogYW55KTogdm9pZCB7XG4gICAgaWYgKGZpbGxEYXRhKSB7XG4gICAgICBsZXQgYXV4TW9kZWwgPSBNb2RlbFBvcHVsYXRpb25IZWxwZXIucG9wdWxhdGVNb2RlbFdpdGhGaWxsRGF0YShcbiAgICAgICAgZmlsbERhdGEsXG4gICAgICAgIHRoaXMuZmx1eCxcbiAgICAgICAgdGhpcy5kaWN0aW9uYXJ5TWFwLFxuICAgICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlc1xuICAgICAgKTtcbiAgICAgIHRoaXMubW9kZWwgPSB7IC4uLmF1eE1vZGVsIH07XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmRBbmRNYXBEZWZhdWx0VmFsdWUoXG4gICAgZGljdGlvbmFyeTogRGljdGlvbmFyeUR0byB8IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0VmFsdWVJZDogbnVtYmVyXG4gICk6IERpY3Rpb25hcnlWYWx1ZSB8IG51bGwge1xuICAgIHJldHVybiBNb2RlbFBvcHVsYXRpb25IZWxwZXIuZmluZEFuZE1hcERlZmF1bHRWYWx1ZShcbiAgICAgIGRpY3Rpb25hcnksXG4gICAgICBkZWZhdWx0VmFsdWVJZCxcbiAgICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUZvcm1seUNvbmZpZygpIHtcbiAgICB0aGlzLmZvcm1seUNvbmZpZyA9IFsuLi50aGlzLmZvcm1seUNvbmZpZ107XG4gIH1cblxuICBwcml2YXRlIHVuc3Vic2NyaWJlRnJvbUFsbEZpZWxkcygpIHtcbiAgICBmb3IgKGNvbnN0IHN1YmplY3Qgb2YgdGhpcy5maWVsZFVuc3Vic2NyaWJlU3ViamVjdHMpIHtcbiAgICAgIHN1YmplY3QubmV4dCgpO1xuICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH1cbiAgICB0aGlzLmZpZWxkVW5zdWJzY3JpYmVTdWJqZWN0cyA9IFtdO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZUZyb21BbGxGaWVsZHMoKTtcbiAgICBpZiAodGhpcy5jb2xsZWN0b3JIYW5kbGVyU3Vic2NyaXB0aW9ucykge1xuICAgICAgdGhpcy5jb2xsZWN0b3JIYW5kbGVyU3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5hY3Rpb25TdGVwU3Vic2NyaXB0aW9ucykge1xuICAgICAgdGhpcy5hY3Rpb25TdGVwU3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5hY3Rpb25TdGVwSGFuZGxlcikge1xuICAgICAgdGhpcy5hY3Rpb25TdGVwSGFuZGxlci5kZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0QnV0dG9ucyhidXR0b25zQ29uZmlnOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIWJ1dHRvbnNDb25maWcgfHwgYnV0dG9uc0NvbmZpZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1dHRvbnNDb25maWcubWFwKChidXR0b24pID0+ICh7XG4gICAgICB0eXBlOiBidXR0b24udmFsdWUudG9Mb3dlckNhc2UoKSxcbiAgICAgIGxhYmVsOiBidXR0b24udHJhbnNsYXRpb25zPy5bdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29dIHx8IGJ1dHRvbi52YWx1ZSxcbiAgICAgIHN0eWxlS2V5OiBgLmJ1dHRvbi0ke2J1dHRvbi52YWx1ZS50b0xvd2VyQ2FzZSgpfWAsXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHlsZU9iamVjdFRvU3RyaW5nRXhjZXB0QmFja2dyb3VuZChzdHlsZU9iajogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoc3R5bGVPYmopXG4gICAgICAuZmlsdGVyKChba2V5LCB2YWx1ZV0pID0+IGtleSAhPT0gJ2JhY2tncm91bmQtY29sb3InKVxuICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9OiAke3ZhbHVlfWApXG4gICAgICAuam9pbignOyAnKTtcbiAgfVxuXG4gIHZhbGlkYXRlTWV0aG9kQXBpKGRhdGE6IEFwaVZhbGlkYXRlUmVxdWVzdCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGlmIChkYXRhLmFwaUlkID09PSB1bmRlZmluZWQgfHwgZGF0YS5hcHBJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uRGF0YVNlcnZpY2UudmFsaWRhdGVBcGkoZGF0YSkucGlwZShcbiAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ0FQSSB2YWxpZGF0aW9uIHJlc3BvbnNlOicsIHJlc3BvbnNlKTtcbiAgICAgICAgcmV0dXJuICEhcmVzcG9uc2U7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHZhbGlkYXRpbmcgJyArIGRhdGEuZGF0YSwgZXJyb3IpO1xuICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBtZXRob2QgdG8gY2xlYXIgdGhlIHNhdmluZyBhZnRlciBhY3Rpb25zIHN0YXRlXG4gICAqIENhbGxlZCBieSBzdGVwcGVyIGNvbXBvbmVudCBhZnRlciBzYXZlQXBwRGF0YVN0ZXAgY29tcGxldGVzXG4gICAqL1xuICBwdWJsaWMgY2xlYXJTYXZpbmdBZnRlckFjdGlvbnNTdGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1NhdmluZ0FmdGVyQWN0aW9ucykge1xuICAgICAgdGhpcy5pc1NhdmluZ0FmdGVyQWN0aW9ucyA9IGZhbHNlO1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuICBsb2FkaW5nTWVzc2FnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG59XG4iLCI8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nXCIgY2xhc3M9XCJsb2FkaW5nLW92ZXJsYXlcIj5cbiAgPG1hdC1zcGlubmVyPjwvbWF0LXNwaW5uZXI+XG48L2Rpdj5cbjxkaXYgW2hpZGRlbl09XCJpc0xvYWRpbmdcIj5cbiAgPGRpdiAqbmdJZj1cInNob3dMYW5ndWFnZVNlbGVjdG9yXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInJpZ2h0LWFsaWduZWRcIj5cbiAgICA8YnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJmbGFnc1wiIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cIm0tci01XCI+XG4gICAgICA8aW1nXG4gICAgICAgIFtzcmNdPVwicmV0dXJuRkxhZyhjdXJyZW50TGFuZ3VhZ2VJc28pXCJcbiAgICAgICAgY2xhc3M9XCJyb3VuZGVkLWNpcmNsZSBvYmplY3QtY292ZXIgaWNvbi0yMFwiXG4gICAgICAvPlxuICAgIDwvYnV0dG9uPlxuICAgIDxtYXQtbWVudSAjZmxhZ3M9XCJtYXRNZW51XCIgY2xhc3M9XCJjYXJkV2l0aFNoYWRvd1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgICpuZ0Zvcj1cImxldCBsYW5nIG9mIGFwcGxpY2F0aW9uTGFuZ3VhZ2VzKClcIlxuICAgICAgICAoY2xpY2spPVwiY2hhbmdlTGFuZ3VhZ2UobGFuZy5pc28pXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICBbc3JjXT1cInJldHVybkZMYWcobGFuZy5pc28pXCJcbiAgICAgICAgICAgIGNsYXNzPVwicm91bmRlZC1jaXJjbGUgb2JqZWN0LWNvdmVyIGljb24tMjBcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXQtc3VidGl0bGUtMSBmLXMtMTRcIj57eyBsYW5nLm5hbWUgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtbWVudT5cbiAgPC9kaXY+XG5cbiAgPGJyIC8+XG4gIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRhaW5lclwiPlxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChuZ1N1Ym1pdCk9XCJzdWJtaXQoKVwiPlxuICAgICAgPGZvcm1seS1mb3JtXG4gICAgICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgICAgIFtmaWVsZHNdPVwiZm9ybWx5Q29uZmlnXCJcbiAgICAgICAgW29wdGlvbnNdPVwib3B0aW9uc1wiXG4gICAgICAgIFtmb3JtXT1cImZvcm1cIlxuICAgICAgPjwvZm9ybWx5LWZvcm0+XG4gICAgPC9mb3JtPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|