@qbs-origin/origin-form 0.6.4 → 0.6.5
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/formly/formly-checkboxes/formly-checkboxes.component.mjs +73 -0
- package/esm2022/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.mjs +52 -12
- package/esm2022/lib/formly/formly-field-stepper/formly-field-stepper.component.mjs +15 -3
- package/esm2022/lib/models/forms.model.mjs +4 -2
- package/esm2022/lib/origin-form.component.mjs +59 -13
- package/esm2022/lib/origin-form.module.mjs +6 -1
- package/esm2022/lib/shared-components/dictionaries-tree.component.mjs +10 -3
- package/esm2022/lib/shared-components/treeview/treeview.component.mjs +19 -3
- package/fesm2022/qbs-origin-origin-form.mjs +221 -30
- package/fesm2022/qbs-origin-origin-form.mjs.map +1 -1
- package/lib/formly/formly-checkboxes/formly-checkboxes.component.d.ts +17 -0
- package/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.d.ts +3 -0
- package/lib/models/forms.model.d.ts +5 -1
- package/lib/origin-form.module.d.ts +64 -63
- package/lib/shared-components/treeview/treeview.component.d.ts +1 -0
- package/package.json +2 -2
|
@@ -453,6 +453,12 @@ export class CollectorFormComponent {
|
|
|
453
453
|
fieldGroup: formlyFilteredSteps,
|
|
454
454
|
},
|
|
455
455
|
];
|
|
456
|
+
// For display mode, populate values immediately after config is built
|
|
457
|
+
if (this.showDisplayMode && this.formlyConfig[0]?.fieldGroup) {
|
|
458
|
+
for (const step of this.formlyConfig[0].fieldGroup) {
|
|
459
|
+
this.setPresentationControlValuesRecursively(step);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
456
462
|
}
|
|
457
463
|
async onSelectedPageChanging(stepTransition) {
|
|
458
464
|
let fromIndex;
|
|
@@ -491,7 +497,12 @@ export class CollectorFormComponent {
|
|
|
491
497
|
let filteredSteps = this.flux.filter((s) => {
|
|
492
498
|
if (s.dependentDictionary &&
|
|
493
499
|
s.dependentDictionary.isDictionaryDependent) {
|
|
494
|
-
const
|
|
500
|
+
const modelValue = this.model[s.dependentDictionary.dictionaryControlIdentifier];
|
|
501
|
+
// Skip dependency check for multiple selection (array)
|
|
502
|
+
if (Array.isArray(modelValue)) {
|
|
503
|
+
return true;
|
|
504
|
+
}
|
|
505
|
+
const selectedValue = modelValue?.id;
|
|
495
506
|
if (selectedValue &&
|
|
496
507
|
s.dependentDictionary.dependentValueIds.includes(selectedValue)) {
|
|
497
508
|
return true;
|
|
@@ -555,7 +566,32 @@ export class CollectorFormComponent {
|
|
|
555
566
|
if (associatedControlId) {
|
|
556
567
|
const found = this.findControlInFillDataControls(associatedControlId);
|
|
557
568
|
if (found) {
|
|
558
|
-
|
|
569
|
+
// Multiple selection - show values with comma
|
|
570
|
+
const valueIdsArray = found.fillValueIds || found.fillvalueids || found.FillValueIds;
|
|
571
|
+
const valuesArray = found.fillValues || found.fillvalues || found.FillValues;
|
|
572
|
+
if (valueIdsArray && Array.isArray(valueIdsArray) && valueIdsArray.length > 0) {
|
|
573
|
+
const currentLanguageId = this.getCurrentLanguageId();
|
|
574
|
+
const displayValues = [];
|
|
575
|
+
for (const valueId of valueIdsArray) {
|
|
576
|
+
const numericValueId = typeof valueId === 'string' ? parseInt(valueId, 10) : valueId;
|
|
577
|
+
for (const [key, dict] of this.dictionaryMap.entries()) {
|
|
578
|
+
const value = dict.values?.find((v) => v.id === numericValueId);
|
|
579
|
+
if (value) {
|
|
580
|
+
const translation = value.valueTranslations.find((t) => t.languageId == currentLanguageId);
|
|
581
|
+
displayValues.push(translation?.value || value.name);
|
|
582
|
+
break;
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
if (displayValues.length > 0) {
|
|
587
|
+
fg.defaultValue = displayValues.join(', ');
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
else if (valuesArray && Array.isArray(valuesArray) && valuesArray.length > 0) {
|
|
591
|
+
// Fallback: use fillValues array directly
|
|
592
|
+
fg.defaultValue = valuesArray.join(', ');
|
|
593
|
+
}
|
|
594
|
+
else if (found.fillValueId) {
|
|
559
595
|
const currentLanguageId = this.getCurrentLanguageId();
|
|
560
596
|
for (const [key, dict] of this.dictionaryMap.entries()) {
|
|
561
597
|
const value = dict.values?.find((v) => v.id == found.fillValueId);
|
|
@@ -628,7 +664,12 @@ export class CollectorFormComponent {
|
|
|
628
664
|
if (s.props && s.props['dependentDictionary']) {
|
|
629
665
|
const depDict = s.props['dependentDictionary'];
|
|
630
666
|
if (depDict && depDict.isDictionaryDependent) {
|
|
631
|
-
const
|
|
667
|
+
const modelValue = this.model[depDict.dictionaryControlIdentifier];
|
|
668
|
+
// Skip dependency check for multiple selection (array)
|
|
669
|
+
if (Array.isArray(modelValue)) {
|
|
670
|
+
return true;
|
|
671
|
+
}
|
|
672
|
+
const selectedValue = modelValue?.id;
|
|
632
673
|
if (selectedValue &&
|
|
633
674
|
depDict.dependentValueIds.includes(selectedValue)) {
|
|
634
675
|
return true;
|
|
@@ -871,7 +912,7 @@ export class CollectorFormComponent {
|
|
|
871
912
|
token: this.kycToken,
|
|
872
913
|
api_url: this.kycApiUrl,
|
|
873
914
|
appDataId: this.appDataUuid,
|
|
874
|
-
env: '
|
|
915
|
+
env: 'DOCKER', // Consider making this dynamic if needed
|
|
875
916
|
redirect_id: this.kycRedirectId,
|
|
876
917
|
phone_number: '',
|
|
877
918
|
lang_iso: this.kycLangIso,
|
|
@@ -1819,10 +1860,16 @@ export class CollectorFormComponent {
|
|
|
1819
1860
|
}
|
|
1820
1861
|
async constructDictionary(control, options) {
|
|
1821
1862
|
const specificData = control.specificControlData;
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1863
|
+
// Determine component type based on settings
|
|
1864
|
+
if (specificData.showAsCheckboxes === true) {
|
|
1865
|
+
options.type = 'formly-checkboxes';
|
|
1866
|
+
}
|
|
1867
|
+
else if (specificData.showAsRadioButtonsList === true) {
|
|
1868
|
+
options.type = 'formly-radio';
|
|
1869
|
+
}
|
|
1870
|
+
else {
|
|
1871
|
+
options.type = 'formly-dictionary-dropdown-tree';
|
|
1872
|
+
}
|
|
1826
1873
|
options.props['specificData'] = specificData;
|
|
1827
1874
|
const dictionaryUuid = specificData.dictionaryUUID;
|
|
1828
1875
|
if (dictionaryUuid) {
|
|
@@ -1834,10 +1881,7 @@ export class CollectorFormComponent {
|
|
|
1834
1881
|
this.attachToValueChanges(control.identifier, options);
|
|
1835
1882
|
}
|
|
1836
1883
|
else {
|
|
1837
|
-
|
|
1838
|
-
specificData.showAsRadioButtonsList === true
|
|
1839
|
-
? 'formly-radio'
|
|
1840
|
-
: 'formly-dictionary-dropdown-tree';
|
|
1884
|
+
// Type is already set at the beginning of the method
|
|
1841
1885
|
options.props['dictionaryId'] = dictionaryUuid;
|
|
1842
1886
|
this.constructDictionaryWithReferences(dictionary, options, specificData);
|
|
1843
1887
|
this.attachToValueChanges(control.identifier, options);
|
|
@@ -1943,6 +1987,8 @@ export class CollectorFormComponent {
|
|
|
1943
1987
|
}));
|
|
1944
1988
|
options.props['selectedRelatedDictionaries'] =
|
|
1945
1989
|
dictionaryControlData.selectedRelatedDictionaries || [];
|
|
1990
|
+
options.props['allowMultipleSelection'] =
|
|
1991
|
+
dictionaryControlData.allowMultipleSelection || false;
|
|
1946
1992
|
let initialValueObject = null;
|
|
1947
1993
|
const controlKey = options.key;
|
|
1948
1994
|
const dictionaryDefaultValueId = dictionaryControlData.dictionaryDefaultValueId;
|
|
@@ -2390,4 +2436,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
2390
2436
|
}], completionEvent: [{
|
|
2391
2437
|
type: Output
|
|
2392
2438
|
}] } });
|
|
2393
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JpZ2luLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9vcmlnaW4tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL29yaWdpbi1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBSU4sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxXQUFXLEdBR1osTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQ0wsT0FBTyxFQUNQLGNBQWMsRUFDZCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFlBQVksRUFDWixTQUFTLEVBQ1QsVUFBVSxFQUNWLEVBQUUsRUFDRixTQUFTLEVBRVQsR0FBRyxFQUNILFlBQVksR0FDYixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU8vQyxPQUFPLEVBS0wsUUFBUSxFQUNSLGFBQWEsRUFDYixlQUFlLEVBQ2Ysc0JBQXNCLEdBR3ZCLE1BQU0sc0JBQXNCLENBQUM7QUFLOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBWSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVVqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQVFsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUEwRSx1QkFBdUIsRUFBeUIsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7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c0JBQXZCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFjSSxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBGb3JtbHlGaWVsZCxcbiAgRm9ybWx5RmllbGRDb25maWcsXG4gIEZvcm1seUZvcm1PcHRpb25zLFxufSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7XG4gIFN1YmplY3QsXG4gIGZpcnN0VmFsdWVGcm9tLFxuICBzdGFydFdpdGgsXG4gIHBhaXJ3aXNlLFxuICBkZWJvdW5jZVRpbWUsXG4gIHN3aXRjaE1hcCxcbiAgY2F0Y2hFcnJvcixcbiAgb2YsXG4gIHRha2VVbnRpbCxcbiAgT2JzZXJ2YWJsZSxcbiAgbWFwLFxuICBTdWJzY3JpcHRpb24sXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTGFiZWxLZXlzIH0gZnJvbSAnLi9lbnVtcy9sYWJlbC5rZXlzJztcbmltcG9ydCB7IEFwaVZhbGlkYXRlUmVxdWVzdCB9IGZyb20gJy4vbW9kZWxzL2FwcGxpY2F0aW9uLm1vZGVsJztcbmltcG9ydCB7XG4gIERpY3Rpb25hcnlEdG8sXG4gIERpY3Rpb25hcnlWYWx1ZSxcbiAgRGljdGlvbmFyeVZhbHVlRHRvLFxufSBmcm9tICcuL21vZGVscy9kaWN0aW9uYXJ5Lm1vZGVsJztcbmltcG9ydCB7XG4gIEZvcm1Nb2RlbCxcbiAgRGlzcGxheU1vZGVsLFxuICBHZW5lcmFsRGF0YU1vZGVsLFxuICBTdGVwc1NldHRpbmdzLFxuICBGbHV4VHlwZSxcbiAgRGltZW5zaW9uVHlwZSxcbiAgU3RlcENvbnRyb2xUeXBlLFxuICBNYW51YWxJbnB1dENvbnRyb2xUeXBlLFxuICBQcmVzZW50YXRpb25QYXJhZ3JhcGhDb250cm9sLFxuICBEaWN0aW9uYXJ5Q29udHJvbERhdGEsXG59IGZyb20gJy4vbW9kZWxzL2Zvcm1zLm1vZGVsJztcbmltcG9ydCB7IExhYmVsSW5mbywgVHJhbnNsYXRpb25JbmZvIH0gZnJvbSAnLi9tb2RlbHMvbGFiZWwtaW5mby5tb2RlbCc7XG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gJy4vbW9kZWxzL2xhYmVsLm1vZGVsJztcbmltcG9ydCB7IExhbmd1YWdlIH0gZnJvbSAnLi9tb2RlbHMvbGFuZ3VhZ2UubW9kZWwnO1xuaW1wb3J0IHsgRGljdGlvbmFyeUxhYmVsSW5mbyB9IGZyb20gJy4vb3RoZXJzL2RpY3Rpb25hcnktbGFiZWwtaW5mbyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFR5cGUgfSBmcm9tICcuL290aGVycy9lbnZpcm9ubWVudC10eXBlJztcbmltcG9ydCB7IENzc1J1bGVzLCBVdGlscyB9IGZyb20gJy4vb3RoZXJzL3V0aWxzJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uRGF0YVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2FwcGxpY2F0aW9uRGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IExhYmVsU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvbGFiZWxzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJveHlTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wcm94eS5zZXJ2aWNlJztcbmltcG9ydCB7IERpY3Rpb25hcnlTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9kaWN0aW9uYXJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9yaWdpbkZvcm1BdXRoU2VydmljZSB9IGZyb20gJy4vb3JpZ2luLWZvcm0tYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1zU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZm9ybXMuc2VydmljZSc7XG5pbXBvcnQgeyBJbnB1dENvbmZpZyB9IGZyb20gJy4vb3JpZ2luLWZvcm0tY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL290aGVycy9jb25maWctc2VydmljZSc7XG5pbXBvcnQgeyBNb2RlbFBvcHVsYXRpb25IZWxwZXIgfSBmcm9tICcuL21vZGVsLXBvcHVsYXRpb24uaGVscGVyJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQge1xuICBPcGVyYXRpb25SZXN1bHQsXG4gIE9yaWdpbkZvcm1TaWduYWxySGFuZGxlclNlcnZpY2UsXG59IGZyb20gJy4vc2VydmljZXMvb3JpZ2luLWZvcm0tc2lnbmFsci1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aW9uU3RlcEhhbmRsZXIgfSBmcm9tICcuL2FjdGlvbi1zdGVwLWhhbmRsZXInO1xuaW1wb3J0IHsgU2Nyb2xsVG9FcnJvclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3Njcm9sbC10by1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1Dc3NIZWxwZXIgfSBmcm9tICcuL2Zvcm0tY3NzLmhlbHBlcic7XG5pbXBvcnQgeyBCYXNlQ29udHJvbCwgQ29udHJvbERhdGEsIERlcGVuZGVudERpY3Rpb25hcnlEYXRhLCBQcmVzZW50YXRpb25Db250cm9sLCBQcmVzZW50YXRpb25Db250cm9sVHlwZSwgU2VjdGlvbkRhdGEsIFN0ZXBEYXRhIH0gZnJvbSAnLi9tb2RlbHMvZmx1eC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1vcmlnaW4tZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9vcmlnaW4tZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL29yaWdpbi1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENvbGxlY3RvckZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGRyZW4oRm9ybWx5RmllbGQpIGZvcm1seUZpZWxkczogUXVlcnlMaXN0PEZvcm1seUZpZWxkPjtcbiAgXG4gIC8vdGhlc2UgYXJlIHNwZWNpZmljIHRvIHRoZSBsaWJcbiAgQElucHV0KCkgY29uZmlnQ29tcG9uZW50OiBJbnB1dENvbmZpZyB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgY29uZmlnVXVpZCE6IHN0cmluZztcbiAgQElucHV0KCkgY3VycmVudFN0ZXBJZDogc3RyaW5nO1xuICAvL2VuZCBzcGVjaWZpYyB0byBsaWJcblxuICBASW5wdXQoKSBhcHBNb2RlbDogRm9ybU1vZGVsO1xuICBASW5wdXQoKSBzaWduQmFzZVVybDogc3RyaW5nO1xuICBASW5wdXQoKSBjdXJyZW50TGFuZ3VhZ2VJc286IHN0cmluZztcbiAgQElucHV0KCkgZmlsbERhdGE6IGFueTtcbiAgQElucHV0KCkgZW52OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNob3dEaXNwbGF5TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93TGFuZ3VhZ2VTZWxlY3RvcjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGlzRGVtb01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNEZWJ1ZzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhcHBEYXRhVXVpZDogc3RyaW5nO1xuICBASW5wdXQoKSBibG9ja1ByZXZpb3VzU3RlcDogYm9vbGVhbjtcbiAgQElucHV0KCkgZGF0YVVybElkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG5vQnV0dG9uc0luVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGZsdXg6IFN0ZXBEYXRhW107XG4gIHByaXZhdGUgZGlzcGxheTogRGlzcGxheU1vZGVsO1xuICBwcml2YXRlIGRlc2lnbjogQ3NzUnVsZXM7XG4gIHByaXZhdGUgZ2VuZXJhbERhdGE6IEdlbmVyYWxEYXRhTW9kZWw7XG4gIHByaXZhdGUgbGFiZWxzOiBMYWJlbFtdO1xuICBwcml2YXRlIHN0ZXBEaWN0aW9uYXJ5RGVwZW5kZW50SWRzOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSBhdmFpbGFibGVMYW5ndWFnZXM6IExhbmd1YWdlW107XG4gIHByaXZhdGUgc3RlcHNTZXR0aW5nczogU3RlcHNTZXR0aW5ncztcbiAgZm9ybWx5Q29uZmlnVXBkYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgdmlzaWJsZUZpZWxkc1VwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgZm9ybWx5VXBkYXRlQW5kR29OZXh0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIGZvcm1seUdvTmV4dCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAT3V0cHV0KCkgY29tcGxldGlvbkV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgZm9ybWx5Q29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107XG4gIGZvcm1seUFsbFN0ZXBzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107XG4gIGFjdGl2ZVN0ZXAgPSAwO1xuICBtb2RlbDogYW55O1xuICBvcHRpb25zOiBGb3JtbHlGb3JtT3B0aW9ucyA9IHt9O1xuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGRpY3Rpb25hcnlNYXA6IE1hcDxzdHJpbmcsIERpY3Rpb25hcnlEdG8+ID0gbmV3IE1hcCgpO1xuICBkaWN0aW9uYXJ5SWRUb1V1aWRNYXA6IE1hcDxudW1iZXIsIHN0cmluZz4gPSBuZXcgTWFwKCk7XG4gIGdlbmVyYWxEYXRhS2V5cyA9IExhYmVsS2V5cy5hcHBDb25maWdFZGl0LmdlbmVyYWxEYXRhO1xuICBwcml2YXRlIGZpZWxkVW5zdWJzY3JpYmVTdWJqZWN0czogU3ViamVjdDx2b2lkPltdID0gW107XG4gIHByaXZhdGUgY29sbGVjdG9ySGFuZGxlclN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAvLyBBY3Rpb24gc3RlcCBleGVjdXRpb24gc3RhdGVcbiAgcHJpdmF0ZSBpc0V4ZWN1dGluZ0FjdGlvbnMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBhY3Rpb25TdGVwU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwdWJsaWMgaXNTYXZpbmdBZnRlckFjdGlvbnMgPSBmYWxzZTsgLy8gTWFrZSB0aGlzIHB1YmxpYyBzbyBzdGVwcGVyIGNhbiBhY2Nlc3MgaXRcblxuICAvLyBpZGVudGlmaWNhdGlvbiBreWMgY29tcG9uZW50XG4gIHB1YmxpYyBreWNBcGlVcmw6IHN0cmluZztcbiAgcHVibGljIGt5Y09yZGVySWQ6IHN0cmluZztcbiAgcHVibGljIGt5Y1Rva2VuOiBzdHJpbmc7XG4gIHB1YmxpYyBreWNFbnY6IHN0cmluZztcbiAgcHVibGljIGt5Y1JlZGlyZWN0SWQ6IHN0cmluZztcbiAgcHVibGljIGt5Y1Bob25lTnVtYmVyOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIGt5Y0xhbmdJc286IHN0cmluZyA9ICcnO1xuICBwdWJsaWMga3ljU2hvd0NpdGl6ZW5zaGlwOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBreWNTY3JvbGxNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIGVuZCBpZGVudGlmaWNhdGlvbiBreWMgY29tcG9uZW50XG4gIHB1YmxpYyBsYW5ndWFnZUZsYWdzOiBhbnlbXSA9IFtcbiAgICB7XG4gICAgICBsYW5ndWFnZTogJ0VuZ2xpc2gnLFxuICAgICAgY29kZTogJ2VuJyxcbiAgICAgIHR5cGU6ICdVUycsXG4gICAgICBpY29uOiAnL2Fzc2V0cy9pbWFnZXMvZmxhZy9pY29uLWZsYWctZW4uc3ZnJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhbmd1YWdlOiAnUm9tYW5hJyxcbiAgICAgIGNvZGU6ICdybycsXG4gICAgICBpY29uOiAnL2Fzc2V0cy9pbWFnZXMvZmxhZy9pY29uLWZsYWctcm8uc3ZnJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhbmd1YWdlOiAnRGV1dHNjaCcsXG4gICAgICBjb2RlOiAnZGUnLFxuICAgICAgaWNvbjogJy9hc3NldHMvaW1hZ2VzL2ZsYWcvaWNvbi1mbGFnLWRlLnN2ZycsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYW5ndWFnZTogJ0ZyYW7Dp2FpcycsXG4gICAgICBjb2RlOiAnZnInLFxuICAgICAgaWNvbjogJy9hc3NldHMvaW1hZ2VzL2ZsYWcvaWNvbi1mbGFnLWZyLnN2ZycsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYW5ndWFnZTogJ0l0YWxpYW5vJyxcbiAgICAgIGNvZGU6ICdpdCcsXG4gICAgICBpY29uOiAnL2Fzc2V0cy9pbWFnZXMvZmxhZy9pY29uLWZsYWctaXQuc3ZnJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhbmd1YWdlOiAnRXNwYcOxb2wnLFxuICAgICAgY29kZTogJ2VzJyxcbiAgICAgIGljb246ICcvYXNzZXRzL2ltYWdlcy9mbGFnL2ljb24tZmxhZy1lcy5zdmcnLFxuICAgIH0sXG4gIF07XG4gIGZvcm1seUNvbGxlY3RpbmdGaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW107XG4gIGZvcm1seVByZXNlbnRhdGlvbkZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXTtcbiAgY29udHJvbElkc1dpdGhWYWx1ZXM6IGFueTtcbiAgX3NlbGYgPSB0aGlzO1xuXG4gIFxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNlcnZpY2U6IERpY3Rpb25hcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcm94eTogUHJveHlTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGFiZWxTZXJ2aWNlOiBMYWJlbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvbkRhdGFTZXJ2aWNlOiBBcHBsaWNhdGlvbkRhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGFuZ1NlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBPcmlnaW5Gb3JtQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3Jtc1NlcnZpY2U6IEZvcm1zU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIG9yaWdpbkZvcm1TaWduYWxySGFuZGxlclNlcnZpY2U6IE9yaWdpbkZvcm1TaWduYWxySGFuZGxlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25TdGVwSGFuZGxlcjogQWN0aW9uU3RlcEhhbmRsZXIsXG4gICAgcHJpdmF0ZSBzY3JvbGxUb0Vycm9yU2VydmljZTogU2Nyb2xsVG9FcnJvclNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5reWNBcGlVcmwgPSBwcm94eS5hcGlVUkw7XG4gICAgdGhpcy5reWNPcmRlcklkID0gcHJveHkub3JkZXJJRCE7XG4gICAgdGhpcy5reWNUb2tlbiA9IHByb3h5LnRva2VuO1xuICAgIHRoaXMua3ljRW52ID0gcHJveHkuZW52O1xuXG4gICAgdGhpcy5reWNMYW5nSXNvID0gcHJveHkubGFuZ0lzbztcbiAgICBjb25zdCBpc0xvYWRpbmdTdWIgPVxuICAgICAgdGhpcy5vcmlnaW5Gb3JtU2lnbmFsckhhbmRsZXJTZXJ2aWNlLmlzTG9hZGluZyQuc3Vic2NyaWJlKChsb2FkaW5nKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGluZyAhPT0gbG9hZGluZykge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gbG9hZGluZztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhpcy5jb2xsZWN0b3JIYW5kbGVyU3Vic2NyaXB0aW9ucy5hZGQoaXNMb2FkaW5nU3ViKTtcblxuICAgICAgICBjb25zdCBvcGVyYXRpb25Db21wbGV0ZWRTdWIgPVxuICAgICAgdGhpcy5vcmlnaW5Gb3JtU2lnbmFsckhhbmRsZXJTZXJ2aWNlLm9wZXJhdGlvbkNvbXBsZXRlZCQuc3Vic2NyaWJlKFxuICAgICAgICBhc3luYyAocmVzdWx0OiBPcGVyYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0Lm9wZXJhdGlvbklkZW50aWZpZXIgPT09ICdLWUNfUFJPQ0VTU0lORycpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAnS1lDIFByb2Nlc3Npbmcgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCAodmlhIEhhbmRsZXIgU2VydmljZSk6JyxcbiAgICAgICAgICAgICAgICByZXN1bHQuZGF0YVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAocmVzdWx0LmRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGxEYXRhID0gSlNPTi5wYXJzZShyZXN1bHQuZGF0YS5maWxsRGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZU1vZGVsV2l0aEZpbGxEYXRhKHRoaXMuZmlsbERhdGEpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5mb3JtbHlVcGRhdGVBbmRHb05leHQuZW1pdCh7fSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICdLWUMgUHJvY2Vzc2luZyBmYWlsZWQgKHZpYSBIYW5kbGVyIFNlcnZpY2UpOicsXG4gICAgICAgICAgICAgICAgcmVzdWx0LmVycm9yXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIHRoaXMuY29sbGVjdG9ySGFuZGxlclN1YnNjcmlwdGlvbnMuYWRkKG9wZXJhdGlvbkNvbXBsZXRlZFN1Yik7XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gYWN0aW9uIHN0ZXAgZXhlY3V0aW9uIGV2ZW50c1xuICAgIGNvbnN0IGFjdGlvbkV4ZWN1dGluZ1N1YiA9XG4gICAgICB0aGlzLmFjdGlvblN0ZXBIYW5kbGVyLmFjdGlvbkV4ZWN1dGluZyQuc3Vic2NyaWJlKChleGVjdXRpbmcpID0+IHtcbiAgICAgICAgdGhpcy5pc0V4ZWN1dGluZ0FjdGlvbnMgPSBleGVjdXRpbmc7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZXhlY3V0aW5nO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuYWN0aW9uU3RlcFN1YnNjcmlwdGlvbnMuYWRkKGFjdGlvbkV4ZWN1dGluZ1N1Yik7XG5cbiAgICBjb25zdCBhY3Rpb25Db21wbGV0ZWRTdWIgPVxuICAgICAgdGhpcy5hY3Rpb25TdGVwSGFuZGxlci5hY3Rpb25Db21wbGV0ZWQkLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCfwn46sIEFjdGlvbiBzdGVwIGNvbXBsZXRlZDonLCByZXN1bHQpO1xuICAgICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcign4p2MIEFjdGlvbiBzdGVwIGZhaWxlZDonLCByZXN1bHQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGU6IFdlIGRvbid0IGF1dG8tcHJvZ3Jlc3MgaGVyZSBhcyBpdCdzIGhhbmRsZWQgaW4gZXhlY3V0ZUFjdGlvblN0ZXBzQmVmb3JlTW92aW5nXG4gICAgICB9KTtcbiAgICB0aGlzLmFjdGlvblN0ZXBTdWJzY3JpcHRpb25zLmFkZChhY3Rpb25Db21wbGV0ZWRTdWIpO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuZGF0YVVybElkKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuYXBwbGljYXRpb25EYXRhU2VydmljZS5nZXREYXRhVXJsKHRoaXMuZGF0YVVybElkKVxuICAgICAgKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5jb25maWdVdWlkID0gcmVzdWx0LmFwcElkO1xuICAgICAgICB0aGlzLmFwcERhdGFVdWlkID0gcmVzdWx0LmFwcERhdGFJZDtcbiAgICAgICAgdGhpcy5lbnYgPSByZXN1bHQuZW52O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFwcERhdGFVdWlkICYmIHRoaXMuY3VycmVudFN0ZXBJZCkge1xuICAgICAgdGhpcy5hcHBsaWNhdGlvbkRhdGFTZXJ2aWNlLnNldEN1cnJlbnRTdGVwKFxuICAgICAgICB0aGlzLmFwcERhdGFVdWlkLFxuICAgICAgICB0aGlzLmN1cnJlbnRTdGVwSWRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmFwcERhdGFVdWlkKSB7XG4gICAgICB0aGlzLmFwcERhdGFVdWlkID0gVXRpbHMuZ2VuZXJhdGVVVUlEKCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5jb25maWdDb21wb25lbnQgJiZcbiAgICAgIHRoaXMuY29uZmlnQ29tcG9uZW50LlRva2VuICYmXG4gICAgICB0aGlzLmNvbmZpZ0NvbXBvbmVudC5SZWZyZXNoVG9rZW5cbiAgICApIHtcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS51cGRhdGVDb25maWdGcm9tSW5wdXQodGhpcy5jb25maWdDb21wb25lbnQpO1xuICAgICAgYXdhaXQgdGhpcy5hdXRoU2VydmljZS5zZXRUb2tlbnMoXG4gICAgICAgIHRoaXMuY29uZmlnQ29tcG9uZW50LlRva2VuLFxuICAgICAgICB0aGlzLmNvbmZpZ0NvbXBvbmVudC5SZWZyZXNoVG9rZW5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMgfHwgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmxhbmdTZXJ2aWNlLmdldExhbmd1YWdlcygpKS50aGVuKChsaXN0KSA9PiB7XG4gICAgICAgIGlmIChsaXN0ICYmIGxpc3QuaXRlbXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyA9IGxpc3QuaXRlbXM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmxvYWRBcHBEYXRhKCk7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyAmJiB0aGlzLmFwcE1vZGVsKSB7XG4gICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyA9IHRoaXMuYXBwTW9kZWwuZ2VuZXJhbERhdGEuZGVmYXVsdExhbmd1YWdlO1xuICAgIH1cbiAgICBpZiAodGhpcy5hcHBNb2RlbCkge1xuICAgICAgYXdhaXQgdGhpcy5pbml0QXN5bmMoKTtcbiAgICB9XG4gIH1cblxuIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoY2hhbmdlc1snY29uZmlnQ29tcG9uZW50J10gJiYgIWNoYW5nZXNbJ2NvbmZpZ0NvbXBvbmVudCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY29uZmlnQ29tcG9uZW50ICYmXG4gICAgICAgIHRoaXMuY29uZmlnQ29tcG9uZW50LlRva2VuICYmXG4gICAgICAgIHRoaXMuY29uZmlnQ29tcG9uZW50LlJlZnJlc2hUb2tlblxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY29uZmlnU2VydmljZS51cGRhdGVDb25maWdGcm9tSW5wdXQodGhpcy5jb25maWdDb21wb25lbnQpO1xuICAgICAgICBhd2FpdCB0aGlzLmF1dGhTZXJ2aWNlLnNldFRva2VucyhcbiAgICAgICAgICB0aGlzLmNvbmZpZ0NvbXBvbmVudC5Ub2tlbixcbiAgICAgICAgICB0aGlzLmNvbmZpZ0NvbXBvbmVudC5SZWZyZXNoVG9rZW5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1snY3VycmVudExhbmd1YWdlSXNvJ10gJiZcbiAgICAgICFjaGFuZ2VzWydjdXJyZW50TGFuZ3VhZ2VJc28nXS5maXJzdENoYW5nZVxuICAgICkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIXRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzKSB7XG4gICAgICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5sYW5nU2VydmljZS5nZXRMYW5ndWFnZXMoKSkudGhlbigobGlzdCkgPT4ge1xuICAgICAgICAgICAgaWYgKGxpc3QgJiYgbGlzdC5pdGVtcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyA9IGxpc3QuaXRlbXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYXBwRGF0YVV1aWQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYXBwRGF0YSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25EYXRhU2VydmljZS5nZXRTdGVwcyhcbiAgICAgICAgICAgICAgdGhpcy5hcHBEYXRhVXVpZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChhcHBEYXRhICYmIGFwcERhdGEuZmlsbERhdGEpIHtcbiAgICAgICAgICAgICAgdGhpcy5maWxsRGF0YSA9IEpTT04ucGFyc2UoYXBwRGF0YS5maWxsRGF0YSk7XG4gICAgICAgICAgICAgIHRoaXMuYmxvY2tQcmV2aW91c1N0ZXAgPSBhcHBEYXRhLmJsb2NrUHJldmlvdXNTdGVwO1xuICAgICAgICAgICAgICBpZiAodGhpcy5maWxsRGF0YS5tZXRhZGF0YS5sYW5ndWFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvID0gdGhpcy5maWxsRGF0YS5tZXRhZGF0YS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZXRyaWV2aW5nIGFwcCBkYXRhJywgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmluaXRBc3luYygpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZEFwcERhdGEoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZTogeyBjb25maWd1cmF0aW9uOiBhbnk7IGZpbGxEYXRhPzogYW55IH0gPVxuICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgICB0aGlzLmZvcm1zU2VydmljZS5sb2FkRm9ybUJ5VXVpZCh0aGlzLmNvbmZpZ1V1aWQsIHRoaXMuZW52KVxuICAgICAgICApO1xuICAgICAgdGhpcy5hcHBNb2RlbCA9IEpTT04ucGFyc2UocmVzcG9uc2UuY29uZmlndXJhdGlvbik7XG4gICAgICB0aGlzLmZpbGxEYXRhID0gcmVzcG9uc2UuZmlsbERhdGEgPyBKU09OLnBhcnNlKHJlc3BvbnNlLmZpbGxEYXRhKSA6IG51bGw7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgZm9ybSBkYXRhJywgZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluaXRBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbUFsbEZpZWxkcygpO1xuICAgIGF3YWl0IHRoaXMuYnVpbGRGb3JtbHlBc3luYygpO1xuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVJlZmVyZW5jZUZpZWxkcyh0aGlzLmZvcm1seUNvbmZpZyk7XG4gICAgdGhpcy51cGRhdGVGb3JtbHlDb25maWcoKTtcbiAgICB0aGlzLmZvcm1seUNvbmZpZ1VwZGF0ZWQuZW1pdCgpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIGFwcGxpY2F0aW9uTGFuZ3VhZ2VzKCk6IExhbmd1YWdlW10ge1xuICAgIHJldHVybiB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcz8uZmlsdGVyKChhKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBNb2RlbD8uZ2VuZXJhbERhdGE/Lmxhbmd1YWdlcz8uaW5kZXhPZihhLmlzbykgPj0gMDtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZXR1cm5GTGFnKGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5sYW5ndWFnZUZsYWdzLmZpbmQoKGwpID0+IGwuY29kZSA9PSBsYW5ndWFnZSk/Lmljb247XG4gIH1cblxuICBjaGFuZ2VMYW5ndWFnZSgkZXZlbnQ6IHN0cmluZykge1xuICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvID0gJGV2ZW50O1xuICAgIHRoaXMuYXBwbGljYXRpb25EYXRhU2VydmljZVxuICAgICAgLmNoYW5nZUxhbmd1YWdlKHRoaXMuYXBwRGF0YVV1aWQsIHRoaXMuY3VycmVudExhbmd1YWdlSXNvKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaW5pdEFzeW5jKCk7XG4gIH1cbiAgZ2V0TGFuZ3VhZ2VOYW1lKGxhbmd1YWdlSXNvOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxhbmd1YWdlID0gdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMuZmluZChcbiAgICAgIChsYW5nKSA9PiBsYW5nLmlzbyA9PT0gbGFuZ3VhZ2VJc29cbiAgICApO1xuICAgIHJldHVybiBsYW5ndWFnZSA/IGxhbmd1YWdlLm5hbWUgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRGb3JtbHlBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28pIHtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0TGFiZWxzKCk7XG4gICAgfVxuXG4gICAgLy8gU1RFUCAxOiBJbml0aWFsaXplIGZsdXggYW5kIG90aGVyIHByb3BlcnRpZXMgZmlyc3RcbiAgICB0aGlzLmZsdXggPSB0aGlzLmFwcE1vZGVsLmZsdXg7XG4gICAgdGhpcy5kaXNwbGF5ID0gdGhpcy5hcHBNb2RlbC5kaXNwbGF5O1xuICAgIHRoaXMuZGVzaWduID0gdGhpcy5hcHBNb2RlbC5nZW5lcmF0ZWRDc3M7XG4gICAgdGhpcy5nZW5lcmFsRGF0YSA9IHRoaXMuYXBwTW9kZWwuZ2VuZXJhbERhdGE7XG4gICAgdGhpcy5hZGRSZW5kZXJlZENzcygpO1xuXG4gICAgLy8gU1RFUCAyOiBMb2FkIEFMTCBkaWN0aW9uYXJpZXMgdXBmcm9udCAobm93IHRoYXQgZmx1eCBpcyBpbml0aWFsaXplZClcbiAgICBhd2FpdCB0aGlzLmxvYWRBbGxSZXF1aXJlZERpY3Rpb25hcmllcygpO1xuXG4gICAgLy8gU1RFUCAzOiBDb250aW51ZSB3aXRoIGV4aXN0aW5nIGZvcm0gYnVpbGRpbmcgbG9naWNcbiAgICB0aGlzLmZvcm1seUNvbmZpZyA9IFtdO1xuICAgIHRoaXMuZm9ybWx5Q29sbGVjdGluZ0ZpZWxkcyA9IFtdO1xuICAgIHRoaXMuZm9ybWx5UHJlc2VudGF0aW9uRmllbGRzID0gW107XG4gICAgdGhpcy5tb2RlbCA9IHt9O1xuICAgIHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuXG4gICAgaWYgKHRoaXMuZmlsbERhdGEpIHtcbiAgICAgIHRoaXMucG9wdWxhdGVDb250cm9sSWRzV2l0aFZhbHVlRGljdGlvbmFyeSgpO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgbW9kZWwgd2l0aCBkZWZhdWx0IHZhbHVlcyBpZiBubyBmaWxsRGF0YVxuICAgIGlmICghdGhpcy5maWxsRGF0YSkge1xuICAgICAgdGhpcy5tb2RlbCA9IE1vZGVsUG9wdWxhdGlvbkhlbHBlci5hcHBseURlZmF1bHRzVG9Nb2RlbChcbiAgICAgICAgdGhpcy5mbHV4LFxuICAgICAgICB0aGlzLmRpY3Rpb25hcnlNYXAsXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBvcHVsYXRlTW9kZWxXaXRoRmlsbERhdGEodGhpcy5maWxsRGF0YSk7XG4gICAgICB0aGlzLnBvcHVsYXRlQ29udHJvbElkc1dpdGhWYWx1ZURpY3Rpb25hcnkoKTtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh0aGlzLm1vZGVsKTtcbiAgICBhd2FpdCB0aGlzLmJ1aWxkRm9ybWx5Q29uZmlnQXN5bmMoKTtcblxuICAgIC8vIEluaXRpYWxpemUgcmVmZXJlbmNlcyBmb3IgZGVmYXVsdCB2YWx1ZXNcbiAgICBpZiAoIXRoaXMuZmlsbERhdGEpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVJlZmVyZW5jZUZpZWxkcyh0aGlzLmZvcm1seUNvbmZpZyk7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoc3RhcnRXaXRoKG51bGwpLCBwYWlyd2lzZSgpKVxuICAgICAgLnN1YnNjcmliZSgoW3ByZXYsIG5leHRdOiBbYW55LCBhbnldKSA9PlxuICAgICAgICB0aGlzLmhhbmRsZUZvcm1WYWx1ZUNoYW5nZShbcHJldiwgbmV4dF0pXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGb3JtVmFsdWVDaGFuZ2UoW3ByZXYsIG5leHRdOiBbYW55LCBhbnldKSB7XG4gICAgY29uc3QgY3VycmVudExhbmd1YWdlSWQgPSBVdGlscy5maW5kTGFuZ3VhZ2VJZEJ5SXNvKFxuICAgICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMsXG4gICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gbmV4dCkge1xuICAgICAgaWYgKG5leHRba2V5XT8udmFsdWVUcmFuc2xhdGlvbnMpIHtcbiAgICAgICAgdmFyIHMgPSBKU09OLnN0cmluZ2lmeShuZXh0W2tleV0pO1xuICAgICAgICB2YXIgcmVwbGFjZWQgPSBzLnJlcGxhY2UoL1widmFsdWVUcmFuc2xhdGlvbnNcIjovZywgJ1widHJhbnNsYXRpb25zXCI6Jyk7XG4gICAgICAgIG5leHRba2V5XSA9IEpTT04ucGFyc2UocmVwbGFjZWQpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmZvcm1seVByZXNlbnRhdGlvbkZpZWxkcy5maWx0ZXIoXG4gICAgICAgIChpKSA9PiBpLnByb3BzICYmIGkucHJvcHNbJ2NvbGxlY3Rpb25Db250cm9sSWRlbnRpZmllciddID09PSBrZXlcbiAgICAgICk7XG4gICAgICBpZiAoZmllbGRzICYmIGZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgICAgICAgIHN3aXRjaCAodHlwZW9mIG5leHRba2V5XSkge1xuICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAgIHZhbHVlID0gbmV4dFtrZXldID8gJyZjaGVjazsnIDogJyZjcm9zczsnO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgaWYgKG5leHRba2V5XT8udHJhbnNsYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSBuZXh0W2tleV0udHJhbnNsYXRpb25zLmZpbmQoXG4gICAgICAgICAgICAgICAgICAodHJhbnNsYXRpb246IHsgbGFuZ3VhZ2VJZDogYW55IH0pID0+XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uLmxhbmd1YWdlSWQgPT09IGN1cnJlbnRMYW5ndWFnZUlkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRyYW5zbGF0aW9uID8gdHJhbnNsYXRpb24udmFsdWUgOiBudWxsO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbmV4dFtrZXldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZC5kZWZhdWx0VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdGVwRGljdGlvbmFyeURlcGVuZGVudElkcy5maW5kKChhKSA9PiBhID09IGtleSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG5leHRba2V5XT8uaWQgJiZcbiAgICAgICAgICAocHJldiA9PSBudWxsIHx8IHByZXZba2V5XT8uaWQgIT09IG5leHRba2V5XT8uaWQpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZm9ybWx5Q29uZmlnWzBdLmZpZWxkR3JvdXAgPSB0aGlzLmdldEZvcm1seUZpbHRlcmVkU3RlcHMoKTtcbiAgICAgICAgICB2YXIgZmlsdGVyZWRTdGVwc0lkZW50aWZpZXJzID0gdGhpcy5mb3JtbHlDb25maWdbMF0uZmllbGRHcm91cC5tYXAoXG4gICAgICAgICAgICAoZikgPT4gZi5wcm9wcz8uWydzdGVwSWQnXVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgdmlzaWJsZVN0ZXBzID0gdGhpcy5hY3Rpb25TdGVwSGFuZGxlci5maWx0ZXJWaXNpYmxlU3RlcHMoXG4gICAgICAgICAgICB0aGlzLmZsdXgsXG4gICAgICAgICAgICBmaWx0ZXJlZFN0ZXBzSWRlbnRpZmllcnNcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMudXBkYXRlRm9ybWx5Q29uZmlnKCk7XG4gICAgICAgICAgdGhpcy52aXNpYmxlRmllbGRzVXBkYXRlZC5lbWl0KHZpc2libGVTdGVwcyk7XG4gICAgICAgICAgdGhpcy5mb3JtbHlDb25maWdVcGRhdGVkLmVtaXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGFiZWxzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5sYWJlbFNlcnZpY2VcbiAgICAgICAgLmdldExhYmVscyh0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbywgZmFsc2UpXG4gICAgICAgIC5zdWJzY3JpYmUoKGwpID0+IHtcbiAgICAgICAgICB0aGlzLmxhYmVscyA9IGw7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcG9wdWxhdGVDb250cm9sSWRzV2l0aFZhbHVlRGljdGlvbmFyeSgpIHtcbiAgICB2YXIgY3VycmVudExhbmd1YWdlSWQgPSB0aGlzLmdldEN1cnJlbnRMYW5ndWFnZUlkKCk7XG4gICAgY29uc3QgY29udHJvbElkc1dpdGhWYWx1ZXMgPSB0aGlzLmZpbGxEYXRhLmZsdXhcbiAgICAgIC5mbGF0TWFwKChzdGVwOiB7IHNlY3Rpb25zOiB7IGNvbnRyb2xzOiBhbnlbXSB9W10gfSkgPT5cbiAgICAgICAgc3RlcC5zZWN0aW9ucy5mbGF0TWFwKChzZWN0aW9uOiB7IGNvbnRyb2xzOiBhbnlbXSB9KSA9PlxuICAgICAgICAgIHNlY3Rpb24uY29udHJvbHNcbiAgICAgICAgICAgIC5maWx0ZXIoKGNvbnRyb2wpID0+IGNvbnRyb2wuY29udHJvbElkICYmIGNvbnRyb2wuZmlsbFZhbHVlKVxuICAgICAgICAgICAgLm1hcCgoY29udHJvbCkgPT4gKHtcbiAgICAgICAgICAgICAgY29udHJvbElkOiBjb250cm9sLmNvbnRyb2xJZCxcbiAgICAgICAgICAgICAgZmlsbFZhbHVlOiBjb250cm9sLmZpbGxWYWx1ZSxcbiAgICAgICAgICAgICAgZmlsbFZhbHVlSWQ6IGNvbnRyb2wuZmlsbFZhbHVlSWQsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKFxuICAgICAgICAgIGRpY3Rpb25hcnk6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuICAgICAgICAgIHsgY29udHJvbElkLCBmaWxsVmFsdWUsIGZpbGxWYWx1ZUlkIH06IGFueVxuICAgICAgICApID0+IHtcbiAgICAgICAgICBpZiAoZmlsbFZhbHVlSWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgZGljdF0gb2YgdGhpcy5kaWN0aW9uYXJ5TWFwLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRpY3QudmFsdWVzPy5maW5kKCh2KSA9PiB2LmlkID09IGZpbGxWYWx1ZUlkKTtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSB2YWx1ZS52YWx1ZVRyYW5zbGF0aW9ucy5maW5kKFxuICAgICAgICAgICAgICAgICAgKHQpID0+IHQubGFuZ3VhZ2VJZCA9PSBjdXJyZW50TGFuZ3VhZ2VJZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5W2NvbnRyb2xJZF0gPSB0cmFuc2xhdGlvbi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaWN0aW9uYXJ5W2NvbnRyb2xJZF0gPSBmaWxsVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5O1xuICAgICAgICB9LFxuICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICAgICApO1xuICAgIHRoaXMuY29udHJvbElkc1dpdGhWYWx1ZXMgPSBjb250cm9sSWRzV2l0aFZhbHVlcztcbiAgfVxuICBwcml2YXRlIGdldEN1cnJlbnRMYW5ndWFnZUlkKCk6IG51bWJlciB7XG4gICAgY29uc3QgY3VycmVudExhbmd1YWdlSWQgPSBVdGlscy5maW5kTGFuZ3VhZ2VJZEJ5SXNvKFxuICAgICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMsXG4gICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICk7XG4gICAgcmV0dXJuIGN1cnJlbnRMYW5ndWFnZUlkO1xuICB9XG4gIHByaXZhdGUgYXN5bmMgYnVpbGRGb3JtbHlDb25maWdBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0ZXBzU2V0dGluZ3MgPSB7XG4gICAgICBzaG93Q291bnRlcjogdGhpcy5zaG93RGlzcGxheU1vZGVcbiAgICAgICAgPyBmYWxzZVxuICAgICAgICA6IHRoaXMuZ2VuZXJhbERhdGEuc2hvd0NvdW50ZXJTdGVwLFxuICAgICAgc2hvd0xhYmVsczogdGhpcy5zaG93RGlzcGxheU1vZGUgPyBmYWxzZSA6IHRoaXMuZ2VuZXJhbERhdGEuc2hvd05hbWVTdGVwLFxuICAgICAgc2hvd0FsbFN0ZXBzOiB0aGlzLnNob3dEaXNwbGF5TW9kZVxuICAgICAgICA/IGZhbHNlXG4gICAgICAgIDogdGhpcy5nZW5lcmFsRGF0YS5zaG93QWxsU3RlcHMsXG4gICAgICBzaG93UHJvZ3Jlc3NCYXI6XG4gICAgICAgIHRoaXMuZ2VuZXJhbERhdGEuc2hvd1Byb2dyZXNzQmFyICYmXG4gICAgICAgICAgdGhpcy5nZW5lcmFsRGF0YS5zaG93QWxsU3RlcHMgPT0gZmFsc2VcbiAgICAgICAgICA/IHRydWVcbiAgICAgICAgICA6IGZhbHNlLFxuICAgIH07XG5cbiAgICB0aGlzLmZvcm1seUFsbFN0ZXBzID0gYXdhaXQgdGhpcy5idWlsZEZvcm1seUZpZWxkR3JvdXBBc3luYygpO1xuICAgIHZhciBoYXNEaWN0aW9uYXJ5RGVwZW5kZW50U3RlcHMgPSB0aGlzLmZvcm1seUFsbFN0ZXBzLnNvbWUoXG4gICAgICAoZikgPT4gZi5wcm9wcz8uWydkZXBlbmRlbnREaWN0aW9uYXJ5J10/LmlzRGljdGlvbmFyeURlcGVuZGVudFxuICAgICk7XG5cbiAgICB2YXIgZm9ybWx5RmlsdGVyZWRTdGVwcyA9IHRoaXMuZ2V0Rm9ybWx5RmlsdGVyZWRTdGVwcygpO1xuICAgIHZhciBmaWx0ZXJlZFN0ZXBzSWRlbnRpZmllcnMgPSBmb3JtbHlGaWx0ZXJlZFN0ZXBzLm1hcChcbiAgICAgIChmKSA9PiBmLnByb3BzPy5bJ3N0ZXBJZCddXG4gICAgKTtcbiAgICAvLyBHZXQgdmlzaWJsZSBzdGVwcyBmb3IgYWNjdXJhdGUgc3RlcCBjb3VudGluZ1xuICAgIGNvbnN0IHZpc2libGVTdGVwcyA9IHRoaXMuYWN0aW9uU3RlcEhhbmRsZXIuZmlsdGVyVmlzaWJsZVN0ZXBzKHRoaXMuZmx1eCk7XG4gICAgY29uc3QgZmlsdGVyZWRWaXNpYmxlU3RlcHMgPSB0aGlzLmFjdGlvblN0ZXBIYW5kbGVyLmZpbHRlclZpc2libGVTdGVwcyhcbiAgICAgIHRoaXMuZmx1eCxcbiAgICAgIGZpbHRlcmVkU3RlcHNJZGVudGlmaWVyc1xuICAgICk7XG5cbiAgICB0aGlzLmZvcm1seUNvbmZpZyA9IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3N0ZXBwZXInLFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIGFwcERhdGFJZDogdGhpcy5maWxsRGF0YVxuICAgICAgICAgICAgPyB0aGlzLmZpbGxEYXRhPy5tZXRhZGF0YT8uYXBwRGF0YUlkXG4gICAgICAgICAgICA6IHRoaXMuYXBwRGF0YVV1aWQsXG4gICAgICAgICAgZGVzaWduOiB0aGlzLmRlc2lnbixcbiAgICAgICAgICBhcHBsaWNhdGlvbklkOiB0aGlzLmFwcE1vZGVsLmFwcGxpY2F0aW9uVXVpZCxcbiAgICAgICAgICBmbHV4OiB2aXNpYmxlU3RlcHMsIC8vIFBhc3Mgb25seSB2aXNpYmxlIHN0ZXBzIHRvIHN0ZXBwZXJcbiAgICAgICAgICBmaWx0ZXJlZEZsdXg6IGZpbHRlcmVkVmlzaWJsZVN0ZXBzLFxuICAgICAgICAgIGlzRGlzcGxheU1vZGU6IHRoaXMuc2hvd0Rpc3BsYXlNb2RlLFxuICAgICAgICAgIGZpbGxEYXRhOiB0aGlzLmZpbGxEYXRhLFxuICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZTogdGhpcy5hcHBNb2RlbC5nZW5lcmFsRGF0YS5kZWZhdWx0TGFuZ3VhZ2UsXG4gICAgICAgICAgZGlzcGxheTogdGhpcy5kaXNwbGF5LFxuICAgICAgICAgIGRlc2lnbkNvbmZpZzoge1xuICAgICAgICAgICAgYnV0dG9uc1ZlcnRpY2FsUG9zaXRpb246XG4gICAgICAgICAgICAgIHRoaXMuYXBwTW9kZWwuZGVzaWduLmJ1dHRvbnNWZXJ0aWNhbFBvc2l0aW9uLFxuICAgICAgICAgICAgYnV0dG9uc0hvcml6b250YWxQb3NpdGlvbjpcbiAgICAgICAgICAgICAgdGhpcy5hcHBNb2RlbC5kZXNpZ24uYnV0dG9uc0hvcml6b250YWxQb3NpdGlvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0ZXBzU2V0dGluZ3M6IHRoaXMuc3RlcHNTZXR0aW5ncyxcbiAgICAgICAgICBtZXRhRGF0YTogdGhpcy5maWxsRGF0YT8ubWV0YWRhdGEsXG4gICAgICAgICAgZGVtb01vZGU6IHRoaXMuaXNEZW1vTW9kZSxcbiAgICAgICAgICBpc0RlYnVnOiB0aGlzLmlzRGVidWcsXG4gICAgICAgICAgbm9CdXR0b25zSW5WaWV3OiB0aGlzLm5vQnV0dG9uc0luVmlldyxcbiAgICAgICAgICBibG9ja1ByZXZpb3VzU3RlcDogdGhpcy5ibG9ja1ByZXZpb3VzU3RlcCxcbiAgICAgICAgICBlbnY6IHRoaXMuZW52LFxuICAgICAgICAgIGhhc0RpY3Rpb25hcnlEZXBlbmRlbnRTdGVwczogaGFzRGljdGlvbmFyeURlcGVuZGVudFN0ZXBzLFxuICAgICAgICAgIGhhc0FjdGlvblN0ZXBzOiB0aGlzLmZsdXguc29tZSgoc3RlcCkgPT5cbiAgICAgICAgICAgIHRoaXMuYWN0aW9uU3RlcEhhbmRsZXIuaXNBY3Rpb25TdGVwKHN0ZXApXG4gICAgICAgICAgKSwgLy8gSW5kaWNhdGUgaWYgdGhlcmUgYXJlIGFjdGlvbiBzdGVwc1xuICAgICAgICAgIGNvbXBsZXRpb25FdmVudDogKCkgPT4gdGhpcy5vbkNvbXBsZXRpb24oKSxcbiAgICAgICAgICBvblNlbGVjdGVkUGFnZUNoYW5naW5nOiAoaW5kZXg6IG51bWJlcikgPT5cbiAgICAgICAgICAgIHRoaXMub25TZWxlY3RlZFBhZ2VDaGFuZ2luZyhpbmRleCksXG4gICAgICAgICAgb25TZWxlY3RlZFBhZ2VDaGFuZ2VkOiAoaW5kZXg6IG51bWJlcikgPT5cbiAgICAgICAgICAgIHRoaXMub25TZWxlY3RlZFBhZ2VDaGFuZ2VkKGluZGV4KSxcbiAgICAgICAgfSxcbiAgICAgICAgZmllbGRHcm91cDogZm9ybWx5RmlsdGVyZWRTdGVwcyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb25TZWxlY3RlZFBhZ2VDaGFuZ2luZyhzdGVwVHJhbnNpdGlvbjogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IGZyb21JbmRleDogbnVtYmVyO1xuICAgIGxldCB0b0luZGV4OiBudW1iZXI7XG4gICAgbGV0IGNhbGxiYWNrOiAoKSA9PiB2b2lkID0gKCkgPT4geyB9O1xuXG4gICAgaWYgKHR5cGVvZiBzdGVwVHJhbnNpdGlvbiA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRvSW5kZXggPSBzdGVwVHJhbnNpdGlvbjtcbiAgICAgIGZyb21JbmRleCA9IHRoaXMuYWN0aXZlU3RlcDtcbiAgICB9IGVsc2Uge1xuICAgICAgZnJvbUluZGV4ID0gc3RlcFRyYW5zaXRpb24uZnJvbTtcbiAgICAgIHRvSW5kZXggPSBzdGVwVHJhbnNpdGlvbi50bztcbiAgICAgIGNhbGxiYWNrID0gc3RlcFRyYW5zaXRpb24uY2FsbGJhY2sgfHwgKCgpID0+IHsgfSk7XG4gICAgfVxuXG4gICAgbGV0IGFjdGlvbnNFeGVjdXRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRvSW5kZXggPiBmcm9tSW5kZXgpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAn4p6h77iPIE1vdmluZyBmb3J3YXJkIC0gZXhlY3V0aW5nIGFjdGlvbiBzdGVwcyBhZnRlciBjdXJyZW50IHN0ZXAnXG4gICAgICApO1xuICAgICAgYWN0aW9uc0V4ZWN1dGVkID0gYXdhaXQgdGhpcy5leGVjdXRlQWN0aW9uU3RlcHNBZnRlckN1cnJlbnRTdGVwKFxuICAgICAgICBmcm9tSW5kZXhcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0b0luZGV4IDwgZnJvbUluZGV4KSB7XG4gICAgICBjb25zb2xlLmxvZygn4qyF77iPIE1vdmluZyBiYWNrd2FyZCAtIG5vIGFjdGlvbiBleGVjdXRpb24gbmVlZGVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCfwn5SEIFN0YXlpbmcgb24gc2FtZSBzdGVwIC0gbm8gYWN0aW9uIGV4ZWN1dGlvbiBuZWVkZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGl2ZVN0ZXAgPSB0b0luZGV4O1xuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb25zRXhlY3V0ZWQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVBY3Rpb25TdGVwc0FmdGVyQ3VycmVudFN0ZXAoXG4gICAgY3VycmVudFN0ZXBJbmRleDogbnVtYmVyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmFjdGlvblN0ZXBIYW5kbGVyLmlzRXhlY3V0aW5nQWN0aW9ucykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBmaWx0ZXJlZFN0ZXBzID0gdGhpcy5mbHV4LmZpbHRlcigocykgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBzLmRlcGVuZGVudERpY3Rpb25hcnkgJiZcbiAgICAgICAgcy5kZXBlbmRlbnREaWN0aW9uYXJ5LmlzRGljdGlvbmFyeURlcGVuZGVudFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPVxuICAgICAgICAgIHRoaXMubW9kZWxbcy5kZXBlbmRlbnREaWN0aW9uYXJ5LmRpY3Rpb25hcnlDb250cm9sSWRlbnRpZmllcl0/LmlkO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc2VsZWN0ZWRWYWx1ZSAmJlxuICAgICAgICAgIHMuZGVwZW5kZW50RGljdGlvbmFyeS5kZXBlbmRlbnRWYWx1ZUlkcy5pbmNsdWRlcyhzZWxlY3RlZFZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGFjdGlvblN0ZXBzID0gdGhpcy5hY3Rpb25TdGVwSGFuZGxlci5nZXRBY3Rpb25TdGVwc0F0SW5kZXgoXG4gICAgICBmaWx0ZXJlZFN0ZXBzLFxuICAgICAgY3VycmVudFN0ZXBJbmRleFxuICAgICk7XG5cbiAgICBpZiAoYWN0aW9uU3RlcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBpZiAoIXRoaXMuYXBwRGF0YVV1aWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgdGhlIHNhdmluZyBmbGFnIGJlZm9yZSBzdGFydGluZyBhY3Rpb25zXG4gICAgICB0aGlzLmlzU2F2aW5nQWZ0ZXJBY3Rpb25zID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hY3Rpb25TdGVwSGFuZGxlci5leGVjdXRlQWN0aW9uU3RlcHMoXG4gICAgICAgIGFjdGlvblN0ZXBzLFxuICAgICAgICB0aGlzLmFwcERhdGFVdWlkLFxuICAgICAgICAoc3RlcCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxvYWRpbmdNZXNzYWdlID0gVXRpbHMuZmluZFRyYW5zbGF0aW9uSW5mbyhcbiAgICAgICAgICAgICdsb2FkaW5nTWVzc2FnZVRyYW5zbGF0aW9ucycsXG4gICAgICAgICAgICBzdGVwLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdNZXNzYWdlID0gbG9hZGluZ01lc3NhZ2UgfHwgbnVsbDtcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCfinIUgQWN0aW9uIHN0ZXBzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICAvLyBLZWVwIGxvYWRpbmcgc3RhdGUgdHJ1ZSAtIGl0IHdpbGwgYmUgY2xlYXJlZCBhZnRlciBzYXZlQXBwRGF0YVN0ZXAgY29tcGxldGVzXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcign4p2MIEFjdGlvbiBzdGVwcyBleGVjdXRpb24gZmFpbGVkOicsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgIHRoaXMuaXNTYXZpbmdBZnRlckFjdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCfinYwgRXJyb3IgZXhlY3V0aW5nIGFjdGlvbiBzdGVwczonLCBlcnJvcik7XG4gICAgICB0aGlzLmlzU2F2aW5nQWZ0ZXJBY3Rpb25zID0gZmFsc2U7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25TZWxlY3RlZFBhZ2VDaGFuZ2VkKGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5mb3JtbHlDb25maWdbMF0uZmllbGRHcm91cCkge1xuICAgICAgdmFyIHNlbGVjdGVkUGFnZSA9IHRoaXMuZm9ybWx5Q29uZmlnWzBdLmZpZWxkR3JvdXBbaW5kZXhdO1xuICAgICAgdGhpcy5zZXRQcmVzZW50YXRpb25Db250cm9sVmFsdWVzUmVjdXJzaXZlbHkoc2VsZWN0ZWRQYWdlKTtcblxuICAgICAgTW9kZWxQb3B1bGF0aW9uSGVscGVyLmFwcGx5UHJlY29tcGxldGlvblRvTW9kZWwodGhpcy5tb2RlbCwgdGhpcy5mbHV4KTtcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0UHJlc2VudGF0aW9uQ29udHJvbFZhbHVlc1JlY3Vyc2l2ZWx5KGZjPzogYW55KSB7XG4gICAgZmM/LmZpZWxkR3JvdXA/LmZvckVhY2goKGZnOiBhbnkpID0+IHtcbiAgICAgIGlmIChmZy5wcm9wcyAmJiBmZy5wcm9wc1snaXNEaXNwbGF5TW9kZSddID09PSB0cnVlKSB7XG4gICAgICAgIHZhciBtZXRob2RGaWVsZElkID0gZmcucHJvcHNbJ2FwaU1ldGhvZEZpZWxkSWQnXTtcbiAgICAgICAgaWYgKG1ldGhvZEZpZWxkSWQpIHtcbiAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmZpbmRJbkFwaUNhbGxzUmVzcG9uc2VzKG1ldGhvZEZpZWxkSWQpO1xuICAgICAgICAgIGZnLmRlZmF1bHRWYWx1ZSA9IHZhbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgYXNzb2NpYXRlZENvbnRyb2xJZCA9IGZnLnByb3BzWydjb2xsZWN0aW9uQ29udHJvbElkZW50aWZpZXInXTtcbiAgICAgICAgICBpZiAoYXNzb2NpYXRlZENvbnRyb2xJZCkge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPVxuICAgICAgICAgICAgICB0aGlzLmZpbmRDb250cm9sSW5GaWxsRGF0YUNvbnRyb2xzKGFzc29jaWF0ZWRDb250cm9sSWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIGlmIChmb3VuZC5maWxsVmFsdWVJZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRMYW5ndWFnZUlkID0gdGhpcy5nZXRDdXJyZW50TGFuZ3VhZ2VJZCgpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgZGljdF0gb2YgdGhpcy5kaWN0aW9uYXJ5TWFwLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkaWN0LnZhbHVlcz8uZmluZChcbiAgICAgICAgICAgICAgICAgICAgKHYpID0+IHYuaWQgPT0gZm91bmQuZmlsbFZhbHVlSWRcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSB2YWx1ZS52YWx1ZVRyYW5zbGF0aW9ucy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICh0KSA9PiB0Lmxhbmd1YWdlSWQgPT0gY3VycmVudExhbmd1YWdlSWRcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZmcuZGVmYXVsdFZhbHVlID0gdHJhbnNsYXRpb24udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmcuZGVmYXVsdFZhbHVlID0gZm91bmQuZmlsbFZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmZpbmRJbkFwaUNhbGxzUmVzcG9uc2VzKGFzc29jaWF0ZWRDb250cm9sSWQpO1xuICAgICAgICAgICAgICBmZy5kZWZhdWx0VmFsdWUgPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldFByZXNlbnRhdGlvbkNvbnRyb2xWYWx1ZXNSZWN1cnNpdmVseShmZyk7XG4gICAgICB9XG4gICAgICBpZiAoZmcucHJvcHNbJ2NkciddKSB7XG4gICAgICAgIGZnLnByb3BzWydjZHInXS5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRDb250cm9sSW5GaWxsRGF0YUNvbnRyb2xzKGNvbnRyb2xJZDogc3RyaW5nKTogYW55IHtcbiAgICBsZXQgY29udHJvbERhdGE6IGFueSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5maWxsRGF0YSkge1xuICAgICAgdGhpcy5maWxsRGF0YS5mbHV4Py5mb3JFYWNoKChmOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFjb250cm9sRGF0YSkge1xuICAgICAgICAgIGYuc2VjdGlvbnM/LmZvckVhY2goKHM6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjb250cm9sRGF0YSkge1xuICAgICAgICAgICAgICBjb250cm9sRGF0YSA9IHMuY29udHJvbHM/LmZpbmQoXG4gICAgICAgICAgICAgICAgKGM6IGFueSkgPT4gYy5jb250cm9sSWQgPT09IGNvbnRyb2xJZFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoY29udHJvbERhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udHJvbERhdGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjb250cm9sRGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZEluQXBpQ2FsbHNSZXNwb25zZXMoZmllbGRJZDogc3RyaW5nKTogYW55IHtcbiAgICBsZXQgZm91bmRWYWx1ZTogYW55ID0gdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmZpbGxEYXRhKSB7XG4gICAgICB0aGlzLmZpbGxEYXRhLkFQSUNhbGxzPy5mb3JFYWNoKChhcGk6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIWZvdW5kVmFsdWUpIHtcbiAgICAgICAgICBhcGkuTWV0aG9kcz8uZm9yRWFjaCgobTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWZvdW5kVmFsdWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSBtLkZpZWxkcz8uW2ZpZWxkSWRdO1xuICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICBmb3VuZFZhbHVlID0gZm91bmQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmb3VuZFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGb3JtbHlGaWx0ZXJlZFN0ZXBzKCkge1xuICAgIGxldCBzdGVwcyA9IHRoaXMuZm9ybWx5QWxsU3RlcHMuZmlsdGVyKChzKSA9PiB7XG4gICAgICBpZiAocy5wcm9wcyAmJiBzLnByb3BzWydkZXBlbmRlbnREaWN0aW9uYXJ5J10pIHtcbiAgICAgICAgY29uc3QgZGVwRGljdCA9IHMucHJvcHNbXG4gICAgICAgICAgJ2RlcGVuZGVudERpY3Rpb25hcnknXG4gICAgICAgIF0gYXMgRGVwZW5kZW50RGljdGlvbmFyeURhdGE7XG4gICAgICAgIGlmIChkZXBEaWN0ICYmIGRlcERpY3QuaXNEaWN0aW9uYXJ5RGVwZW5kZW50KSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZSA9XG4gICAgICAgICAgICB0aGlzLm1vZGVsW2RlcERpY3QuZGljdGlvbmFyeUNvbnRyb2xJZGVudGlmaWVyXT8uaWQ7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZSAmJlxuICAgICAgICAgICAgZGVwRGljdC5kZXBlbmRlbnRWYWx1ZUlkcy5pbmNsdWRlcyhzZWxlY3RlZFZhbHVlKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3RlcHM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkRm9ybWx5RmllbGRHcm91cEFzeW5jKCk6IFByb21pc2U8Rm9ybWx5RmllbGRDb25maWdbXT4ge1xuICAgIHRoaXMuc3RlcERpY3Rpb25hcnlEZXBlbmRlbnRJZHMgPSBbXTtcbiAgICBpZiAodGhpcy5zaG93RGlzcGxheU1vZGUpIHtcbiAgICAgIGNvbnN0IHN0ZXAgPSBhd2FpdCB0aGlzLmJ1aWREaXNwbGF5U3RlcCgpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbc3RlcF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGaWx0ZXIgb3V0IGFjdGlvbiBzdGVwcyBmcm9tIHZpc2libGUgc3RlcHNcbiAgICAgIGNvbnN0IHZpc2libGVTdGVwcyA9IHRoaXMuYWN0aW9uU3RlcEhhbmRsZXIuZmlsdGVyVmlzaWJsZVN0ZXBzKHRoaXMuZmx1eCk7XG4gICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHZpc2libGVTdGVwcy5tYXAoKHN0ZXApID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5idWlsZEZvcm1seUZpZWxkQ29uZmlnQXN5bmMoc3RlcCk7XG4gICAgICAgIH0pID8/IFtdXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRGb3JtbHlGaWVsZENvbmZpZ0FzeW5jKFxuICAgIHN0ZXA6IFN0ZXBEYXRhXG4gICk6IFByb21pc2U8Rm9ybWx5RmllbGRDb25maWc+IHtcbiAgICBsZXQgc3RlcEZvcm1seUNvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSB7fTtcblxuICAgIGlmIChzdGVwLnR5cGUgIT09IEZsdXhUeXBlLkN1c3RvbSAmJiBzdGVwLnR5cGUgIT09IEZsdXhUeXBlLkZpbmFsKSB7XG4gICAgICBzdGVwRm9ybWx5Q29uZmlnID0gYXdhaXQgdGhpcy5idWlsZFN5c3RlbUZpZWxkRm9ybWx5Q29uZmlnKHN0ZXApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGVwRm9ybWx5Q29uZmlnID0ge1xuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIGxhYmVsOiBzdGVwLm5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHN0ZXAubmFtZSxcbiAgICAgICAgICBidXR0b25zOiB0aGlzLmNvbnN0cnVjdEJ1dHRvbnMoc3RlcC5idXR0b25zKSxcbiAgICAgICAgICBkZXBlbmRlbnREaWN0aW9uYXJ5OiBzdGVwLmRlcGVuZGVudERpY3Rpb25hcnksXG4gICAgICAgICAgc3RlcElkOiBzdGVwLmlkZW50aWZpZXIsXG4gICAgICAgIH0sXG4gICAgICAgIGZpZWxkR3JvdXA6IGF3YWl0IHRoaXMuYnVpbGRTZWN0aW9uc0ZpZWxkR3JvdXBBc3luYyhcbiAgICAgICAgICBzdGVwLFxuICAgICAgICAgIHN0ZXAuc2VjdGlvbnNcbiAgICAgICAgKSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChzdGVwLnRyYW5zbGF0aW9ucykge1xuICAgICAgICBzdGVwRm9ybWx5Q29uZmlnLnByb3BzIVsnbGFiZWwnXSA9IFV0aWxzLmZpbmRUcmFuc2xhdGlvbkluZm8oXG4gICAgICAgICAgJ25hbWUnLFxuICAgICAgICAgIHN0ZXAudHJhbnNsYXRpb25zLFxuICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICk7XG4gICAgICAgIHN0ZXBGb3JtbHlDb25maWcucHJvcHMhWydkZXNjcmlwdGlvbiddID0gVXRpbHMuZmluZFRyYW5zbGF0aW9uSW5mbyhcbiAgICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAgIHN0ZXAudHJhbnNsYXRpb25zLFxuICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0ZXBGb3JtbHlDb25maWcgJiYgc3RlcEZvcm1seUNvbmZpZy5wcm9wcykge1xuICAgICAgdGhpcy5zZXRTdGVwQmFzZVByb3BzKHN0ZXAsIHN0ZXBGb3JtbHlDb25maWcpO1xuICAgIH1cbiAgICBpZiAoc3RlcC5kZXBlbmRlbnREaWN0aW9uYXJ5Py5pc0RpY3Rpb25hcnlEZXBlbmRlbnQpIHtcbiAgICAgIHRoaXMuc3RlcERpY3Rpb25hcnlEZXBlbmRlbnRJZHMucHVzaChcbiAgICAgICAgc3RlcC5kZXBlbmRlbnREaWN0aW9uYXJ5LmRpY3Rpb25hcnlDb250cm9sSWRlbnRpZmllclxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0ZXBGb3JtbHlDb25maWc7XG4gIH1cblxuICB0cmlnZ2VyQ29tcG9uZW50VXBkYXRlKGNvbnRyb2xJZDogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZXRGb3JtbHlGaWVsZFZhbHVlKHRoaXMuZm9ybWx5QWxsU3RlcHMsIGNvbnRyb2xJZCwgdmFsdWUpO1xuICB9XG5cbiAgc2V0Rm9ybWx5RmllbGRWYWx1ZShcbiAgICBmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gfCB1bmRlZmluZWQsXG4gICAga2V5OiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueVxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIWZpZWxkcykgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgIGlmIChmaWVsZC5rZXkgPT09IGtleSkge1xuICAgICAgICBpZiAoZmllbGQuZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICBmaWVsZC5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXAgJiYgQXJyYXkuaXNBcnJheShmaWVsZC5maWVsZEdyb3VwKSkge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuc2V0Rm9ybWx5RmllbGRWYWx1ZShmaWVsZC5maWVsZEdyb3VwLCBrZXksIHZhbHVlKTtcbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkU3lzdGVtRmllbGRGb3JtbHlDb25maWcoXG4gICAgc3RlcDogU3RlcERhdGFcbiAgKTogUHJvbWlzZTxGb3JtbHlGaWVsZENvbmZpZz4ge1xuICAgIGNvbnN0IGZvcm1seUNvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICBwcm9wczoge1xuICAgICAgICBsYWJlbDogc3RlcC5uYW1lLFxuICAgICAgICBidXR0b25zOiB0aGlzLmNvbnN0cnVjdEJ1dHRvbnMoc3RlcC5idXR0b25zKSxcbiAgICAgICAgZmx1eFR5cGU6IHN0ZXAudHlwZSxcbiAgICAgIH0sXG4gICAgICBmaWVsZEdyb3VwOiBbXSxcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRTdGVwQmFzZVByb3BzKHN0ZXAsIGZvcm1seUNvbmZpZyk7XG4gICAgdmFyIGZpZWxkQ29uZmlnID0gdGhpcy5jcmVhdGVGb3JtbHlTeXN0ZW1GaWVsZENvbmZpZyhzdGVwKTtcblxuICAgIGlmIChmaWVsZENvbmZpZykge1xuICAgICAgaWYgKHN0ZXAudHJhbnNsYXRpb25zKSB7XG4gICAgICAgIGxldCBsYWJlbHM6IGFueSA9IHt9O1xuICAgICAgICBzdGVwLnRyYW5zbGF0aW9ucy5mb3JFYWNoKCh0cjogVHJhbnNsYXRpb25JbmZvKSA9PiB7XG4gICAgICAgICAgbGFiZWxzW3RyLm5hbWVdID0gVXRpbHMuZmluZFRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgdHIudmFsdWVzLFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgZmllbGRDb25maWcucHJvcHMhWydsYWJlbHMnXSA9IGxhYmVscztcbiAgICAgICAgZmllbGRDb25maWcucHJvcHMhWyduYW1lJ10gPSBVdGlscy5maW5kVHJhbnNsYXRpb25JbmZvKFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgICBzdGVwLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICApO1xuICAgICAgICBmaWVsZENvbmZpZy5wcm9wcyFbJ2Rlc2NyaXB0aW9uJ10gPSBVdGlscy5maW5kVHJhbnNsYXRpb25JbmZvKFxuICAgICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICAgc3RlcC50cmFuc2xhdGlvbnMsXG4gICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgKTtcbiAgICAgICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnbGFiZWwnXSA9IFV0aWxzLmZpbmRUcmFuc2xhdGlvbkluZm8oXG4gICAgICAgICAgJ25hbWUnLFxuICAgICAgICAgIHN0ZXAudHJhbnNsYXRpb25zLFxuICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICk7XG4gICAgICAgIGZvcm1seUNvbmZpZy5wcm9wcyFbJ2Rlc2NyaXB0aW9uJ10gPSBVdGlscy5maW5kVHJhbnNsYXRpb25JbmZvKFxuICAgICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICAgc3RlcC50cmFuc2xhdGlvbnMsXG4gICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGZpZWxkQ29uZmlnLnByb3BzIVsnc3RlcHNTZXR0aW5ncyddID0gdGhpcy5zdGVwc1NldHRpbmdzO1xuICAgICAgZm9ybWx5Q29uZmlnLmZpZWxkR3JvdXAhLnB1c2goZmllbGRDb25maWcpO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JtbHlDb25maWc7XG4gIH1cblxuICBwcml2YXRlIHNldFN0ZXBCYXNlUHJvcHMoc3RlcDogU3RlcERhdGEsIGZvcm1seUNvbmZpZzogRm9ybWx5RmllbGRDb25maWcpIHtcbiAgICBpZiAoZm9ybWx5Q29uZmlnLnByb3BzKSB7XG4gICAgICBmb3JtbHlDb25maWcucHJvcHNbJ25hbWUnXSA9IHN0ZXAubmFtZTtcbiAgICAgIGZvcm1seUNvbmZpZy5wcm9wc1snZmx1eFR5cGUnXSA9IHN0ZXAudHlwZTtcbiAgICAgIGZvcm1seUNvbmZpZy5wcm9wc1snc3RlcElkJ10gPSBzdGVwLmlkZW50aWZpZXI7XG4gICAgICBmb3JtbHlDb25maWcucHJvcHNbJ2lzVmlzaWJsZSddID0gc3RlcC5pc1Zpc2libGU7XG4gICAgICBmb3JtbHlDb25maWcucHJvcHNbJ2RlcGVuZGVudERpY3Rpb25hcnknXSA9IHN0ZXAuZGVwZW5kZW50RGljdGlvbmFyeTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIENyZWF0ZVNpZ25GaWVsZENvbmZpZyhzdGVwOiBTdGVwRGF0YSk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2Zvcm1seS1zaWduLWNvbXBvbmVudCcsXG4gICAgICBwcm9wczoge1xuICAgICAgICBhcHBEYXRhSWQ6IHRoaXMuYXBwRGF0YVV1aWQsXG4gICAgICAgIHN0ZXBEYXRhOiBzdGVwLFxuICAgICAgICBkZXNpZ246IHRoaXMuZGVzaWduLFxuICAgICAgICBlbnY6IHRoaXMuZW52LFxuICAgICAgICBmbHV4OiB0aGlzLmZsdXgsXG4gICAgICAgIHBhcmVudEZvcm06IHRoaXMuZm9ybSxcbiAgICAgICAgZ2V0TW9kZWw6ICgpID0+IHRoaXMubW9kZWwsXG4gICAgICAgIGV2ZW50OiBhc3luYyAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChldmVudCA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnN0ZXBwZXJHb05leHRBc3luYygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgQ3JlYXRlRG93bmxvYWREb2NzRmllbGRDb25maWcoXG4gICAgY29udHJvbERhdGE6IEJhc2VDb250cm9sXG4gICk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2Zvcm1seS1kb3dubG9hZC1kb2N1bWVudHMtY29tcG9uZW50JyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGFwcElkOiB0aGlzLmFwcE1vZGVsLmFwcGxpY2F0aW9uVXVpZCxcbiAgICAgICAgYXBwRGF0YUlkOiB0aGlzLmFwcERhdGFVdWlkLFxuICAgICAgICBjb250cm9sRGF0YTogY29udHJvbERhdGEsXG4gICAgICAgIGVudjogdGhpcy5lbnYsXG4gICAgICAgIGRvY3VtZW50c0RhdGE6IHRoaXMuYXBwTW9kZWwuZG9jdW1lbnRzLFxuICAgICAgICBsYW5nSXNvOiB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgQ3JlYXRlVmlld0RvY3NGaWVsZENvbmZpZyhcbiAgICBjb250cm9sRGF0YTogQmFzZUNvbnRyb2xcbiAgKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZm9ybWx5LXZpZXctZG9jdW1lbnRzLWNvbXBvbmVudCcsXG4gICAgICBwcm9wczoge1xuICAgICAgICBhcHBJZDogdGhpcy5hcHBNb2RlbC5hcHBsaWNhdGlvblV1aWQsXG4gICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhVXVpZCxcbiAgICAgICAgY29udHJvbERhdGE6IGNvbnRyb2xEYXRhLFxuICAgICAgICBlbnY6IHRoaXMuZW52LFxuICAgICAgICBkb2N1bWVudHNEYXRhOiB0aGlzLmFwcE1vZGVsLmRvY3VtZW50cyxcbiAgICAgICAgbGFuZ0lzbzogdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIENyZWF0ZVVwbG9hZERvY3NGaWVsZENvbmZpZyhcbiAgICBjb250cm9sRGF0YTogQmFzZUNvbnRyb2xcbiAgKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZm9ybWx5LXVwbG9hZC1kb2N1bWVudHMtY29tcG9uZW50JyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGFwcElkOiB0aGlzLmFwcE1vZGVsLmFwcGxpY2F0aW9uVXVpZCxcbiAgICAgICAgYXBwRGF0YUlkOiB0aGlzLmFwcERhdGFVdWlkLFxuICAgICAgICBjb250cm9sRGF0YTogY29udHJvbERhdGEsXG4gICAgICAgIGVudjogdGhpcy5lbnYsXG4gICAgICAgIGRvY3VtZW50c0RhdGE6IHRoaXMuYXBwTW9kZWwuZG9jdW1lbnRzLFxuICAgICAgICBsYW5nSXNvOiB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgQ3JlYXRlR2VuZXJhdGVEb2NzRmllbGRDb25maWcoc3RlcDogU3RlcERhdGEpOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdmb3JtbHktZ2VuZXJhdGUtZG9jdW1lbnRzLWNvbXBvbmVudCcsXG4gICAgICBwcm9wczoge1xuICAgICAgICBhcHBJZDogdGhpcy5hcHBNb2RlbC5hcHBsaWNhdGlvblV1aWQsXG4gICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhVXVpZCxcbiAgICAgICAgc3RlcERhdGE6IHN0ZXAsXG4gICAgICAgIGRvY3VtZW50c0RhdGE6IHRoaXMuYXBwTW9kZWwuZG9jdW1lbnRzLFxuICAgICAgICBsYW5nSXNvOiB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgICAgZXZlbnQ6IGFzeW5jIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50ID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RlcHBlckdvTmV4dEFzeW5jKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc3RlcHBlckdvTmV4dEFzeW5jKCkge1xuICAgIGNvbnN0IHN0ZXBwZXJDb21wb25lbnQgPSB0aGlzLmZvcm1seUNvbmZpZ1swXS5wcm9wcyFbJ2NvbXBvbmVudCddO1xuICAgIGlmIChzdGVwcGVyQ29tcG9uZW50ICYmIHN0ZXBwZXJDb21wb25lbnQubmF2aWdhdGVOZXh0QXN5bmMpIHtcbiAgICAgIGF3YWl0IHN0ZXBwZXJDb21wb25lbnQubmF2aWdhdGVOZXh0QXN5bmMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIENyZWF0ZUVucm9sbENhcmRGaWVsZENvbmZpZyhzdGVwOiBTdGVwRGF0YSk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICBsZXQgbGFiZWxzOiBhbnkgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhzdGVwLmNvbmZpZykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoa2V5LmVuZHNXaXRoKCdMYWJlbCcpKSB7XG4gICAgICAgIGxhYmVsc1trZXldID1cbiAgICAgICAgICBzdGVwPy5jb25maWdba2V5XT8uZmluZChcbiAgICAgICAgICAgIChpOiB7IGxhbmd1YWdlSXNvOiBzdHJpbmcgfSkgPT5cbiAgICAgICAgICAgICAgaS5sYW5ndWFnZUlzbyA9PT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgICApPy52YWx1ZSA/PyAnJztcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2Zvcm1seS1lbnJvbC1jYXJkLWNvbXBvbmVudCcsXG4gICAgICBwcm9wczoge1xuICAgICAgICBhcHBJZDogdGhpcy5hcHBNb2RlbC5hcHBsaWNhdGlvblV1aWQsXG4gICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhVXVpZCxcbiAgICAgICAgZGF0YVVybElkOiB0aGlzLmRhdGFVcmxJZCxcbiAgICAgICAgc3RlcERhdGE6IHN0ZXAsXG4gICAgICAgIGxhYmVsczogbGFiZWxzLFxuICAgICAgICBsYW5nSXNvOiB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICBwcml2YXRlIENyZWF0ZUlkU2NhbkZpZWxkQ29uZmlnKHN0ZXA6IFN0ZXBEYXRhKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIGxldCBlcnJvck1lc3NhZ2VzOiBhbnkgPSB7fTtcblxuICAgIGlmIChzdGVwLmVycm9yc1RyYW5zbGF0aW9ucykge1xuICAgICAgc3RlcC5lcnJvcnNUcmFuc2xhdGlvbnMuZm9yRWFjaCgoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBlcnJvck1lc3NhZ2VzW2Vycm9yLmNvZGVdID0gVXRpbHMuZmluZFRyYW5zbGF0aW9uKFxuICAgICAgICAgIGVycm9yLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdmb3JtbHktc2Nhbi1pZCcsXG4gICAgICBwcm9wczoge1xuICAgICAgICBjb25maWc6IHN0ZXAuY29uZmlnLFxuICAgICAgICBzdGVwVHlwZTogc3RlcC50eXBlLFxuICAgICAgICBzdGVwSWQ6IHN0ZXAuaWRlbnRpZmllcixcbiAgICAgICAgYXBwRGF0YUlkOiB0aGlzLmFwcERhdGFVdWlkIHx8IFV0aWxzLmdlbmVyYXRlVVVJRCgpLFxuICAgICAgICBhcHBJZDogdGhpcy5hcHBNb2RlbC5hcHBsaWNhdGlvblV1aWQsXG4gICAgICAgIGVycm9yTWVzc2FnZXM6IGVycm9yTWVzc2FnZXMsXG4gICAgICAgIGV2ZW50OiAoZXZlbnQ6IGFueSkgPT4gdGhpcy5vbklkU2NhbkNvbXBsZXRlZChldmVudCwgc3RlcCksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIENyZWF0ZUt5Y0ZpZWxkQ29uZmlnKHN0ZXA6IFN0ZXBEYXRhKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIGNvbnN0IGxvYWRpbmdNc2dUcmFuc2xhdGlvbnMgPSBzdGVwLnRyYW5zbGF0aW9ucz8uZmluZChcbiAgICAgICh0OiBhbnkpID0+IHQubmFtZSA9PT0gJ2xvYWRpbmdNZXNzYWdlVHJhbnNsYXRpb25zJ1xuICAgICk7XG5cbiAgICBjb25zdCB0cmFuc2xhdGVkTG9hZGluZ01lc3NhZ2UgPVxuICAgICAgbG9hZGluZ01zZ1RyYW5zbGF0aW9ucz8udmFsdWVzPy5maW5kKFxuICAgICAgICAodjogYW55KSA9PiB2Lmxhbmd1YWdlSXNvID09PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgKT8udmFsdWUgfHwgJyc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2Zvcm1seS1pZGVudGlmaWNhdGlvbi1jb21wb25lbnQnLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgdG9rZW46IHRoaXMua3ljVG9rZW4sXG4gICAgICAgIGFwaV91cmw6IHRoaXMua3ljQXBpVXJsLFxuICAgICAgICBhcHBEYXRhSWQ6IHRoaXMuYXBwRGF0YVV1aWQsXG4gICAgICAgIGVudjogJ1FBJywgLy8gQ29uc2lkZXIgbWFraW5nIHRoaXMgZHluYW1pYyBpZiBuZWVkZWRcbiAgICAgICAgcmVkaXJlY3RfaWQ6IHRoaXMua3ljUmVkaXJlY3RJZCxcbiAgICAgICAgcGhvbmVfbnVtYmVyOiAnJyxcbiAgICAgICAgbGFuZ19pc286IHRoaXMua3ljTGFuZ0lzbyxcbiAgICAgICAgc2hvd19jaXRpemVuc2hpcF9zZWxlY3RvcjogdGhpcy5reWNTaG93Q2l0aXplbnNoaXAsXG4gICAgICAgIHNjcm9sbF9tb2RlOiB0aGlzLmt5Y1Njcm9sbE1vZGUsXG4gICAgICAgIG1heFJldHJpZXM6IHN0ZXAuY29uZmlnPy5tYXhLeWNSZXRyaWVzID8/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/Lm5hbWUgfHwgJ25vIHN0YXR1cyBuYW1lJztcblxuICAgICAgZm9ybWx5Q29uZmlnLmRlZmF1bHRWYWx1ZSA9IHN0YXR1c05hbWU7XG4gICAgICBmb3JtbHlDb25maWcudHlwZSA9ICdmb3JtbHktcGFyYWdyYXBoJztcbiAgICAgIGZvcm1seUNvbmZpZy5jbGFzc05hbWUgPSAnY29tcG9uZW50LXRleHQtZmllbGQnO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbnRyb2wudHlwZSA9PSBQcmVzZW50YXRpb25Db250cm9sVHlwZS5GbHV4Q29tcG9uZW50ICYmXG4gICAgICAgIHRoaXMuY29udHJvbElkc1dpdGhWYWx1ZXMgJiZcbiAgICAgICAgY29udHJvbC5jb2xsZWN0aW9uQ29udHJvbElkZW50aWZpZXJcbiAgICAgICkge1xuICAgICAgICBjb25zdCBmaWxsVmFsdWUgPVxuICAgICAgICAgIHRoaXMuY29udHJvbElkc1dpdGhWYWx1ZXNbY29udHJvbC5jb2xsZWN0aW9uQ29udHJvbElkZW50aWZpZXJdO1xuICAgICAgICBpZiAoZmlsbFZhbHVlKSB7XG4gICAgICAgICAgc3dpdGNoICh0eXBlb2YgZmlsbFZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgICAgZm9ybWx5Q29uZmlnLmRlZmF1bHRWYWx1ZSA9IGZpbGxWYWx1ZSA/ICcmY2hlY2s7JyA6ICcmY3Jvc3M7JztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGlmIChmaWxsVmFsdWU/Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICBmb3JtbHlDb25maWcuZGVmYXVsdFZhbHVlID0gZmlsbFZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9ybWx5Q29uZmlnLmRlZmF1bHRWYWx1ZSA9IGZpbGxWYWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3JtbHlDb25maWcuaWQgPSBjb250cm9sLmlkZW50aWZpZXI7XG4gICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnaXNEaXNwbGF5TW9kZSddID0gdHJ1ZTtcbiAgICBmb3JtbHlDb25maWcucHJvcHMhWydjb2xsZWN0aW9uQ29udHJvbElkZW50aWZpZXInXSA9XG4gICAgICBjb250cm9sLmNvbGxlY3Rpb25Db250cm9sSWRlbnRpZmllcjtcbiAgICBmb3JtbHlDb25maWcucHJvcHMhWydsYWJlbCddID0gdHJhbnNsYXRlZFRpdGxlO1xuICAgIGZvcm1seUNvbmZpZy5wcm9wcyFbJ2xhbmdJc28nXSA9IHRoaXMuY3VycmVudExhbmd1YWdlSXNvO1xuXG4gICAgdGhpcy5mb3JtbHlQcmVzZW50YXRpb25GaWVsZHMucHVzaChmb3JtbHlDb25maWcpO1xuXG4gICAgcmV0dXJuIGZvcm1seUNvbmZpZztcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkQXBpTWV0aG9kRm9ybUZpZWxkQXN5bmMoXG4gICAgc3RlcDogU3RlcERhdGEgfCB1bmRlZmluZWQsXG4gICAgY29udHJvbDogUHJlc2VudGF0aW9uQ29udHJvbFxuICApOiBQcm9taXNlPEZvcm1seUZpZWxkQ29uZmlnPiB7XG4gICAgbGV0IGZvcm1seUNvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSB7IHByb3BzOiB7fSB9O1xuXG4gICAgZm9ybWx5Q29uZmlnLnR5cGUgPSAnZm9ybWx5LXBhcmFncmFwaCc7XG4gICAgZm9ybWx5Q29uZmlnLmNsYXNzTmFtZSA9ICdjb21wb25lbnQtdGV4dC1maWVsZCc7XG4gICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnZGVzaWduJ10gPSB0aGlzLmFwcE1vZGVsLmdlbmVyYXRlZENzcztcblxuICAgIHZhciB0cmFuc2xhdGVkVGl0bGUgPVxuICAgICAgY29udHJvbC50cmFuc2xhdGlvbnMuZmluZCgoZCkgPT4gZC5sYW5ndWFnZUlzbyA9PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbylcbiAgICAgICAgPy52YWx1ZSA/P1xuICAgICAgY29udHJvbC50aXRsZSA/P1xuICAgICAgJyc7XG5cbiAgICBmb3JtbHlDb25maWcuaWQgPSBjb250cm9sLmlkZW50aWZpZXI7XG4gICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnaXNEaXNwbGF5TW9kZSddID0gdHJ1ZTtcbiAgICBmb3JtbHlDb25maWcucHJvcHMhWydhcGlNZXRob2RJZCddID0gY29udHJvbC5hcGlNZXRob2RJZDtcbiAgICBmb3JtbHlDb25maWcucHJvcHMhWydhcGlNZXRob2RGaWVsZElkJ10gPSBjb250cm9sLmFwaU1ldGhvZEZpZWxkSWQ7XG4gICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnbGFiZWwnXSA9IHRyYW5zbGF0ZWRUaXRsZTtcblxuICAgIGlmIChjb250cm9sLmFwaU1ldGhvZEZpZWxkSWQpIHtcbiAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZmluZEluQXBpQ2FsbHNSZXNwb25zZXMoY29udHJvbC5hcGlNZXRob2RGaWVsZElkKTtcbiAgICAgIGZvcm1seUNvbmZpZy5kZWZhdWx0VmFsdWUgPSB2YWw7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtbHlQcmVzZW50YXRpb25GaWVsZHMucHVzaChmb3JtbHlDb25maWcpO1xuXG4gICAgcmV0dXJuIGZvcm1seUNvbmZpZztcbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoVG9EZXBlbmRlbnREaWN0aW9uYXJ5SWZOZWNlc3NhcnkoXG4gICAgZGVwZW5kZW50RGljdGlvbmFyeTogRGVwZW5kZW50RGljdGlvbmFyeURhdGEsXG4gICAgZm9ybWx5Q29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZ1xuICApIHtcbiAgICAvLyBIYW5kbGUgZGljdGlvbmFyeSBkZXBlbmRlbmNpZXNcbiAgICBpZiAoXG4gICAgICBkZXBlbmRlbnREaWN0aW9uYXJ5ICYmXG4gICAgICBkZXBlbmRlbnREaWN0aW9uYXJ5LmRpY3Rpb25hcnlDb250cm9sSWRlbnRpZmllclxuICAgICkge1xuICAgICAgY29uc3QgcGFyZW50S2V5ID0gZGVwZW5kZW50RGljdGlvbmFyeS5kaWN0aW9uYXJ5Q29udHJvbElkZW50aWZpZXI7XG4gICAgICBjb25zdCBkZXBlbmRlbnRWYWx1ZUlkcyA9IGRlcGVuZGVudERpY3Rpb25hcnkuZGVwZW5kZW50VmFsdWVJZHMgfHwgW107XG5cbiAgICAgIGZvcm1seUNvbmZpZy5leHByZXNzaW9ucyA9IHtcbiAgICAgICAgaGlkZTogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3VsZFNob3cgPSB0aGlzLnNob3VsZFNob3dEZXBlbmRlbnRGaWVsZChcbiAgICAgICAgICAgIHBhcmVudEtleSxcbiAgICAgICAgICAgIGRlcGVuZGVudFZhbHVlSWRzLFxuICAgICAgICAgICAgdGhpcy5tb2RlbFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuICFzaG91bGRTaG93O1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGF0dGFjaFRvVmFsdWVDaGFuZ2VzKGNvbnRyb2xJZDogc3RyaW5nLCBvcHRpb25zOiBGb3JtbHlGaWVsZENvbmZpZykge1xuICAgIG9wdGlvbnMucHJvcHMhWydvblNlbGVjdGVkVmFsdWVDaGFuZ2VkJ10gPSBhc3luYyAodmFsOiBhbnkpID0+IHtcbiAgICAgIHRoaXMubW9kZWxbY29udHJvbElkXSA9IHZhbDtcbiAgICAgIHZhciByZWZlcmVuY2VEaWN0aW9uYXJpZXMgPSBBcnJheS5mcm9tKFxuICAgICAgICB0aGlzLmRpY3Rpb25hcnlNYXAudmFsdWVzKClcbiAgICAgICkuZmlsdGVyKChkKSA9PiBkLnJlZmVyZW5jZUlkID09IHZhbC5kaWN0aW9uYXJ5SWQpO1xuICAgICAgaWYgKHJlZmVyZW5jZURpY3Rpb25hcmllcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnJlbW92ZVJlZmVyZW5jZUZpZWxkcyhvcHRpb25zKTtcblxuICAgICAgICB2YXIgcmVmZXJlbmNlRGljdGlvbmFyaWVzV2l0aEZpbHRlcmVkVmFsdWVzID1cbiAgICAgICAgICB0aGlzLmNyZWF0ZVJlZmVyZW5jZURpY3Rpb25hcmllc0Zyb21TZWxlY3RlZFZhbHVlKFxuICAgICAgICAgICAgcmVmZXJlbmNlRGljdGlvbmFyaWVzLFxuICAgICAgICAgICAgdmFsXG4gICAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcGFyZW50U3BlY2lmaWNEYXRhID0gb3B0aW9ucy5wcm9wcz8uW1xuICAgICAgICAgICdzcGVjaWZpY0RhdGEnXG4gICAgICAgIF0gYXMgRGljdGlvbmFyeUNvbnRyb2xEYXRhO1xuICAgICAgICBhd2FpdCB0aGlzLmFkZFJlZmVyZW5jZURpY3Rpb25hcnlGaWVsZHNJZk5lY2Vzc2FyeShcbiAgICAgICAgICByZWZlcmVuY2VEaWN0aW9uYXJpZXNXaXRoRmlsdGVyZWRWYWx1ZXMsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICBvcHRpb25zLnR5cGUsXG4gICAgICAgICAgcGFyZW50U3BlY2lmaWNEYXRhPy5yZWxhdGVkRGljdGlvbmFyaWVzVHJhbnNsYXRpb25zIHx8IFtdXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZVJlZmVyZW5jZUZpZWxkcyhvcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlRm9ybWx5Q29uZmlnKCk7XG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZVJlZmVyZW5jZURpY3Rpb25hcmllc0Zyb21TZWxlY3RlZFZhbHVlKFxuICAgIGFsbERpY3Rpb25hcmllczogRGljdGlvbmFyeUR0b1tdLFxuICAgIHNlbGVjdGVkVmFsdWU6IGFueVxuICApOiBEaWN0aW9uYXJ5RHRvW10ge1xuICAgIGNvbnN0IG5ld0RpY3Rpb25hcmllczogRGljdGlvbmFyeUR0b1tdID0gW107XG5cbiAgICBhbGxEaWN0aW9uYXJpZXMuZm9yRWFjaCgoZGljdGlvbmFyeSkgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyZWRWYWx1ZXMgPVxuICAgICAgICBkaWN0aW9uYXJ5LnZhbHVlcz8uZmlsdGVyKCh2YWx1ZSkgPT5cbiAgICAgICAgICB2YWx1ZS5yZWZlcmVuY2VWYWx1ZXMuc29tZShcbiAgICAgICAgICAgIChyZWZWYWx1ZSkgPT4gcmVmVmFsdWUuaWQgPT09IHNlbGVjdGVkVmFsdWUuaWRcbiAgICAgICAgICApXG4gICAgICAgICkgfHwgW107XG5cbiAgICAgIGlmIChmaWx0ZXJlZFZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG5ld0RpY3Rpb25hcnk6IERpY3Rpb25hcnlEdG8gPSB7XG4gICAgICAgICAgLi4uZGljdGlvbmFyeSxcbiAgICAgICAgICB2YWx1ZXM6IGZpbHRlcmVkVmFsdWVzLFxuICAgICAgICB9O1xuXG4gICAgICAgIG5ld0RpY3Rpb25hcmllcy5wdXNoKG5ld0RpY3Rpb25hcnkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ld0RpY3Rpb25hcmllcztcbiAgfVxuXG4gIHNob3VsZFNob3dEZXBlbmRlbnRGaWVsZChcbiAgICBwYXJlbnRLZXk6IHN0cmluZyxcbiAgICBkZXBlbmRlbnRWYWx1ZUlkczogbnVtYmVyW10sXG4gICAgbW9kZWw6IGFueSA9IHt9XG4gICk6IGJvb2xlYW4ge1xuICAgIC8vIFJldHJpZXZlIHRoZSB2YWx1ZSBvZiB0aGUgcGFyZW50IGRpY3Rpb25hcnkgY29udHJvbFxuICAgIGNvbnN0IHBhcmVudFZhbHVlID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShcbiAgICAgIG1vZGVsLFxuICAgICAgcGFyZW50S2V5XG4gICAgKSBhcyBEaWN0aW9uYXJ5VmFsdWU7XG5cbiAgICBjb25zdCBpZFZhbHVlID0gcGFyZW50VmFsdWU/LmlkXG4gICAgICA/IHBhcmVudFZhbHVlLmlkXG4gICAgICA6IChwYXJlbnRWYWx1ZSBhcyB1bmtub3duIGFzIG51bWJlcik7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHBhcmVudCB2YWx1ZSBpcyBpbiB0aGUgZGVwZW5kZW50VmFsdWVJZHNcbiAgICBpZiAocGFyZW50VmFsdWUgJiYgZGVwZW5kZW50VmFsdWVJZHMuaW5jbHVkZXMoaWRWYWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXROZXN0ZWRWYWx1ZShvYmo6IGFueSwgcGF0aDogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGxldCB2YWx1ZSA9IG9iajtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlW2tleV07XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzdWJtaXQoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0Zvcm0gRGF0YTonLCB0aGlzLmZvcm0udmFsdWUpO1xuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xuICAgICAgY29uc29sZS5sb2coJ0Zvcm0gZGF0YSBoYXMgdmFsaWRhdGlvbiBlcnJvcnMuJyk7XG4gICAgICB0aGlzLnNjcm9sbFRvRXJyb3JTZXJ2aWNlLnNjcm9sbFRvRmlyc3RFcnJvcih0aGlzLmZvcm0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaWMgbWV0aG9kIHRvIHRyaWdnZXIgc2Nyb2xsIHRvIGZpcnN0IGVycm9yIC0gY2FuIGJlIGNhbGxlZCBmcm9tIG90aGVyIGNvbXBvbmVudHNcbiAgICovXG4gIHB1YmxpYyBzY3JvbGxUb0ZpcnN0VmFsaWRhdGlvbkVycm9yKCk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsVG9FcnJvclNlcnZpY2Uuc2Nyb2xsVG9GaXJzdEVycm9yKHRoaXMuZm9ybSk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGljIG1ldGhvZCB0byBzY3JvbGwgdG8gYSBzcGVjaWZpYyBmaWVsZCBieSBuYW1lXG4gICAqL1xuICBwdWJsaWMgc2Nyb2xsVG9GaWVsZChmaWVsZE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsVG9FcnJvclNlcnZpY2Uuc2Nyb2xsVG9GaWVsZChmaWVsZE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYnVnIG1ldGhvZCB0byBoZWxwIHRyb3VibGVzaG9vdCBzY3JvbGwgaXNzdWVzXG4gICAqL1xuICBwdWJsaWMgZGVidWdGb3JtRWxlbWVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5zY3JvbGxUb0Vycm9yU2VydmljZS5kZWJ1Z0xvZ0Zvcm1FbGVtZW50cygpO1xuICB9XG5cbiAgYXN5bmMgY29uc3RydWN0RGljdGlvbmFyeShcbiAgICBjb250cm9sOiBDb250cm9sRGF0YSxcbiAgICBvcHRpb25zOiBGb3JtbHlGaWVsZENvbmZpZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzcGVjaWZpY0RhdGEgPSBjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE7XG4gICAgb3B0aW9ucy50eXBlID1cbiAgICAgIHNwZWNpZmljRGF0YS5zaG93QXNSYWRpb0J1dHRvbnNMaXN0ID09PSB0cnVlXG4gICAgICAgID8gYGZvcm1seS1yYWRpb2BcbiAgICAgICAgOiBgZm9ybWx5LWRpY3Rpb25hcnktZHJvcGRvd24tdHJlZWA7XG5cbiAgICBvcHRpb25zLnByb3BzIVsnc3BlY2lmaWNEYXRhJ10gPSBzcGVjaWZpY0RhdGE7XG5cbiAgICBjb25zdCBkaWN0aW9uYXJ5VXVpZCA9IHNwZWNpZmljRGF0YS5kaWN0aW9uYXJ5VVVJRDtcblxuICAgIGlmIChkaWN0aW9uYXJ5VXVpZCkge1xuICAgICAgY29uc3QgZGljdGlvbmFyeSA9IHRoaXMuZGljdGlvbmFyeU1hcC5nZXQoZGljdGlvbmFyeVV1aWQpO1xuICAgICAgaWYgKGRpY3Rpb25hcnkpIHtcbiAgICAgICAgaWYgKGRpY3Rpb25hcnkucmVmZXJlbmNlSWQpIHtcbiAgICAgICAgICBvcHRpb25zLnByb3BzIVsnZGljdGlvbmFyeUlkJ10gPSBkaWN0aW9uYXJ5VXVpZDtcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdERpY3Rpb25hcnlXaXRoUmVmZXJlbmNlcyhcbiAgICAgICAgICAgIGRpY3Rpb25hcnksXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgc3BlY2lmaWNEYXRhXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmF0dGFjaFRvVmFsdWVDaGFuZ2VzKGNvbnRyb2wuaWRlbnRpZmllciwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucy50eXBlID1cbiAgICAgICAgICAgIHNwZWNpZmljRGF0YS5zaG93QXNSYWRpb0J1dHRvbnNMaXN0ID09PSB0cnVlXG4gICAgICAgICAgICAgID8gJ2Zvcm1seS1yYWRpbydcbiAgICAgICAgICAgICAgOiAnZm9ybWx5LWRpY3Rpb25hcnktZHJvcGRvd24tdHJlZSc7XG4gICAgICAgICAgb3B0aW9ucy5wcm9wcyFbJ2RpY3Rpb25hcnlJZCddID0gZGljdGlvbmFyeVV1aWQ7XG4gICAgICAgICAgdGhpcy5jb25zdHJ1Y3REaWN0aW9uYXJ5V2l0aFJlZmVyZW5jZXMoXG4gICAgICAgICAgICBkaWN0aW9uYXJ5LFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIHNwZWNpZmljRGF0YVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5hdHRhY2hUb1ZhbHVlQ2hhbmdlcyhjb250cm9sLmlkZW50aWZpZXIsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oYERpY3Rpb25hcnkgbm90IGZvdW5kIGZvciBVVUlEICR7ZGljdGlvbmFyeVV1aWR9YCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFVVSUQgbm90IGZvdW5kIGZvciBkaWN0aW9uYXJ5IElEICR7c3BlY2lmaWNEYXRhLmRpY3Rpb25hcnlJZH1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluZERpY3Rpb25hcnlWYWx1ZU9iamVjdChcbiAgICBkaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5RHRvIHwgdW5kZWZpbmVkLFxuICAgIHZhbHVlOiBhbnlcbiAgKTogRGljdGlvbmFyeVZhbHVlRHRvIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoXG4gICAgICAhZGljdGlvbmFyeSB8fFxuICAgICAgIWRpY3Rpb25hcnkudmFsdWVzIHx8XG4gICAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgdmFsdWUgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWU/LmlkICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBkaWN0aW9uYXJ5LnZhbHVlcy5maW5kKCh2KSA9PiB2LmlkID09PSB2YWx1ZS5pZCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHZhbHVlSWQgPSBOdW1iZXIodmFsdWUpO1xuICAgICAgaWYgKCFpc05hTih2YWx1ZUlkKSkge1xuICAgICAgICByZXR1cm4gZGljdGlvbmFyeS52YWx1ZXMuZmluZCgodikgPT4gdi5pZCA9PT0gdmFsdWVJZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVSZWZlcmVuY2VGaWVsZHMoXG4gICAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdLFxuICAgIHJvb3RDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnW10gPSB0aGlzLmZvcm1seUNvbmZpZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWZpZWxkcykgcmV0dXJuO1xuICAgIGNvbnN0IGZpZWxkc1RvUHJvY2VzcyA9IFsuLi5maWVsZHNdO1xuXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHNUb1Byb2Nlc3MpIHtcbiAgICAgIGNvbnN0IGZpZWxkS2V5ID0gZmllbGQua2V5IGFzIHN0cmluZztcbiAgICAgIGlmIChcbiAgICAgICAgZmllbGRLZXkgJiZcbiAgICAgICAgZmllbGQucHJvcHM/LlsnZGljdGlvbmFyeUlkJ10gJiZcbiAgICAgICAgZmllbGQucHJvcHM/Llsnc3BlY2lmaWNEYXRhJ11cbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChmaWVsZEtleSk7XG4gICAgICAgIGNvbnN0IHNwZWNpZmljRGF0YSA9IGZpZWxkLnByb3BzW1xuICAgICAgICAgICdzcGVjaWZpY0RhdGEnXG4gICAgICAgIF0gYXMgRGljdGlvbmFyeUNvbnRyb2xEYXRhO1xuICAgICAgICBjb25zdCBkaWN0aW9uYXJ5VXVpZCA9IGZpZWxkLnByb3BzWydkaWN0aW9uYXJ5SWQnXSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IG1haW5EaWN0aW9uYXJ5ID0gdGhpcy5kaWN0aW9uYXJ5TWFwLmdldChkaWN0aW9uYXJ5VXVpZCk7XG5cbiAgICAgICAgbGV0IHZhbHVlVG9Vc2U6IGFueSA9IG51bGw7XG5cbiAgICAgICAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZSAhPT0gbnVsbCAmJiBjb250cm9sLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YWx1ZVRvVXNlID0gY29udHJvbC52YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBmaWVsZC5kZWZhdWx0VmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgICBmaWVsZC5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICB2YWx1ZVRvVXNlID0gZmllbGQuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHRoaXMubW9kZWwgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsW2ZpZWxkS2V5XSAhPT0gbnVsbCAmJlxuICAgICAgICAgIHRoaXMubW9kZWxbZmllbGRLZXldICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFsdWVUb1VzZSA9IHRoaXMubW9kZWxbZmllbGRLZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlbGVjdGVkVmFsdWVPYmplY3Q6IERpY3Rpb25hcnlWYWx1ZUR0byB8IHVuZGVmaW5lZCB8IG51bGwgPSBudWxsO1xuICAgICAgICBpZiAodmFsdWVUb1VzZSAhPT0gbnVsbCAmJiBtYWluRGljdGlvbmFyeT8uaWQgIT0gbnVsbCkge1xuICAgICAgICAgIHNlbGVjdGVkVmFsdWVPYmplY3QgPSB0aGlzLmZpbmREaWN0aW9uYXJ5VmFsdWVPYmplY3QoXG4gICAgICAgICAgICBtYWluRGljdGlvbmFyeSxcbiAgICAgICAgICAgIHZhbHVlVG9Vc2VcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmllbGRDb25maWdJblRyZWUgPSB0aGlzLmZpbmRGaWVsZEJ5S2V5KHJvb3RDb25maWcsIGZpZWxkS2V5KTtcbiAgICAgICAgaWYgKCFmaWVsZENvbmZpZ0luVHJlZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW1vdmVSZWZlcmVuY2VGaWVsZHMoZmllbGRDb25maWdJblRyZWUpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBzZWxlY3RlZFZhbHVlT2JqZWN0ICYmXG4gICAgICAgICAgc2VsZWN0ZWRWYWx1ZU9iamVjdC5pZCAhPSBudWxsICYmXG4gICAgICAgICAgbWFpbkRpY3Rpb25hcnk/LmlkICE9IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgcG90ZW50aWFsUmVmZXJlbmNlRGljdGlvbmFyaWVzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgIHRoaXMuZGljdGlvbmFyeU1hcC52YWx1ZXMoKVxuICAgICAgICAgICkuZmlsdGVyKChkaWN0KSA9PiBkaWN0LnJlZmVyZW5jZUlkID09PSBtYWluRGljdGlvbmFyeS5pZCk7XG5cbiAgICAgICAgICBpZiAocG90ZW50aWFsUmVmZXJlbmNlRGljdGlvbmFyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZURpY3Rpb25hcmllc1RvU2hvdyA9XG4gICAgICAgICAgICAgIHRoaXMuY3JlYXRlUmVmZXJlbmNlRGljdGlvbmFyaWVzRnJvbVNlbGVjdGVkVmFsdWUoXG4gICAgICAgICAgICAgICAgcG90ZW50aWFsUmVmZXJlbmNlRGljdGlvbmFyaWVzLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWVPYmplY3RcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHJlZmVyZW5jZURpY3Rpb25hcmllc1RvU2hvdy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkUmVmZXJlbmNlRGljdGlvbmFyeUZpZWxkc0lmTmVjZXNzYXJ5KFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZURpY3Rpb25hcmllc1RvU2hvdyxcbiAgICAgICAgICAgICAgICBmaWVsZENvbmZpZ0luVHJlZSxcbiAgICAgICAgICAgICAgICBmaWVsZENvbmZpZ0luVHJlZS50eXBlLFxuICAgICAgICAgICAgICAgIHNwZWNpZmljRGF0YT8ucmVsYXRlZERpY3Rpb25hcmllc1RyYW5zbGF0aW9ucyB8fCBbXVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmllbGQuZmllbGRHcm91cCAmJiBmaWVsZC5maWVsZEdyb3VwLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUmVmZXJlbmNlRmllbGRzKGZpZWxkLmZpZWxkR3JvdXAsIHJvb3RDb25maWcpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBmaWVsZHMgPT09IHRoaXMuZm9ybWx5Q29uZmlnIHx8XG4gICAgICBmaWVsZHMgPT09IHRoaXMuZm9ybWx5Q29uZmlnWzBdPy5maWVsZEdyb3VwXG4gICAgKSB7XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1seUNvbmZpZygpO1xuICAgICAgdGhpcy5mb3JtbHlDb25maWdVcGRhdGVkLmVtaXQoKTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdERpY3Rpb25hcnlXaXRoUmVmZXJlbmNlcyhcbiAgICBkaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5RHRvLFxuICAgIG9wdGlvbnM6IEZvcm1seUZpZWxkQ29uZmlnLFxuICAgIGRpY3Rpb25hcnlDb250cm9sRGF0YTogRGljdGlvbmFyeUNvbnRyb2xEYXRhXG4gICkge1xuICAgIGlmIChvcHRpb25zLnByb3BzKSB7XG4gICAgICB2YXIgY3VycmVudExhbmd1YWdlSWQgPSBVdGlscy5maW5kTGFuZ3VhZ2VJZEJ5SXNvKFxuICAgICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyxcbiAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICk7XG5cbiAgICAgIC8vIFBhc3MgcHJlbG9hZGVkIGRpY3Rpb25hcnkgZGF0YSB0byBmb3JtbHkgY29tcG9uZW50XG4gICAgICBvcHRpb25zLnByb3BzWydkaWN0aW9uYXJ5RGF0YSddID0gZGljdGlvbmFyeTtcbiAgICAgIG9wdGlvbnMucHJvcHNbJ2xhbmd1YWdlcyddID0gdGhpcy5hdmFpbGFibGVMYW5ndWFnZXM7XG4gICAgICBvcHRpb25zLnByb3BzWydwcmVsb2FkZWREaWN0aW9uYXJpZXMnXSA9IHRoaXMuZGljdGlvbmFyeU1hcDtcbiAgICAgIG9wdGlvbnMucHJvcHNbJ3VzZVByZWxvYWRlZERhdGEnXSA9IHRydWU7XG5cbiAgICAgIG9wdGlvbnMucHJvcHMub3B0aW9ucyA9IGRpY3Rpb25hcnkudmFsdWVzPy5tYXAoKHZhbHVlKSA9PiAoe1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGxhYmVsOlxuICAgICAgICAgIFV0aWxzLmZpbmRWYWx1ZVRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgdmFsdWUudmFsdWVUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgICBjdXJyZW50TGFuZ3VhZ2VJZFxuICAgICAgICAgICkgfHwgdmFsdWUubmFtZSxcbiAgICAgICAgY3VycmVudExhbmd1YWdlSXNvOiB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgICAgcmVsYXRlZERpY3Rpb25hcmllc1RyYW5zbGF0aW9uczpcbiAgICAgICAgICBkaWN0aW9uYXJ5Q29udHJvbERhdGEucmVsYXRlZERpY3Rpb25hcmllc1RyYW5zbGF0aW9ucyxcbiAgICAgIH0pKTtcblxuICAgICAgb3B0aW9ucy5wcm9wc1snc2VsZWN0ZWRSZWxhdGVkRGljdGlvbmFyaWVzJ10gPVxuICAgICAgICBkaWN0aW9uYXJ5Q29udHJvbERhdGEuc2VsZWN0ZWRSZWxhdGVkRGljdGlvbmFyaWVzIHx8IFtdO1xuXG4gICAgICBsZXQgaW5pdGlhbFZhbHVlT2JqZWN0OiBEaWN0aW9uYXJ5VmFsdWUgfCBudWxsID0gbnVsbDtcbiAgICAgIGNvbnN0IGNvbnRyb2xLZXkgPSBvcHRpb25zLmtleSBhcyBzdHJpbmc7XG4gICAgICBjb25zdCBkaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWQgPVxuICAgICAgICBkaWN0aW9uYXJ5Q29udHJvbERhdGEuZGljdGlvbmFyeURlZmF1bHRWYWx1ZUlkO1xuICAgICAgaWYgKFxuICAgICAgICAhKHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbFtjb250cm9sS2V5XSAhPSBudWxsKSAmJlxuICAgICAgICBkaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWQgIT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIGluaXRpYWxWYWx1ZU9iamVjdCA9IHRoaXMuZmluZEFuZE1hcERlZmF1bHRWYWx1ZShcbiAgICAgICAgICBkaWN0aW9uYXJ5LFxuICAgICAgICAgIGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zLmRlZmF1bHRWYWx1ZSA9IGluaXRpYWxWYWx1ZU9iamVjdDtcblxuICAgICAgLy8gUGFzcyBkZWZhdWx0IHZhbHVlIElEIHRvIGZvcm1seSBjb21wb25lbnRcbiAgICAgIG9wdGlvbnMucHJvcHNbJ2RpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZCddID0gZGljdGlvbmFyeURlZmF1bHRWYWx1ZUlkO1xuXG4gICAgICBjb25zdCBjb250cm9sSWQgPSBvcHRpb25zLmtleTtcbiAgICAgIGlmICh0aGlzLmZpbGxEYXRhICYmIHRoaXMuZmlsbERhdGEuZmx1eCkge1xuICAgICAgICBmb3IgKGNvbnN0IHN0ZXAgb2YgdGhpcy5maWxsRGF0YS5mbHV4KSB7XG4gICAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHN0ZXAuc2VjdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBzZWN0aW9uLmNvbnRyb2xzLmZpbmQoXG4gICAgICAgICAgICAgIChjdHJsOiB7XG4gICAgICAgICAgICAgICAgY29udHJvbElkOiBzdHJpbmcgfCBudW1iZXIgfCAoc3RyaW5nIHwgbnVtYmVyKVtdIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9KSA9PiBjdHJsLmNvbnRyb2xJZCA9PT0gY29udHJvbElkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC5maWxsVmFsdWUgJiYgY29udHJvbC5maWxsVmFsdWUubmFtZSkge1xuICAgICAgICAgICAgICBvcHRpb25zLnByb3BzWyd2YWx1ZSddID0gY29udHJvbC5maWxsVmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudXBkYXRlRm9ybWx5Q29uZmlnKCk7XG4gIH1cblxuICBhc3luYyBhZGRSZWZlcmVuY2VEaWN0aW9uYXJ5RmllbGRzSWZOZWNlc3NhcnkoXG4gICAgcmVmZXJyZW5jZWREaWN0aW9uYXJpZXM6IGFueVtdLFxuICAgIHBhcmVudERpY3Rpb25hcnlGaWVsZDogRm9ybWx5RmllbGRDb25maWcsXG4gICAgdHlwZTogYW55LFxuICAgIHJlbGF0ZWREaWN0aW9uYXJpZXNUcmFuc2xhdGlvbnM6IERpY3Rpb25hcnlMYWJlbEluZm9bXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocmVmZXJyZW5jZWREaWN0aW9uYXJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRSZWxhdGVkRGljdGlvbmFyaWVzID1cbiAgICAgICAgcGFyZW50RGljdGlvbmFyeUZpZWxkLnByb3BzPy5bJ3NlbGVjdGVkUmVsYXRlZERpY3Rpb25hcmllcyddIHx8IFtdO1xuXG4gICAgICBjb25zdCBzZWxlY3RlZERpY3Rpb25hcmllcyA9IHJlZmVycmVuY2VkRGljdGlvbmFyaWVzLmZpbHRlcigoZGljdCkgPT5cbiAgICAgICAgc2VsZWN0ZWRSZWxhdGVkRGljdGlvbmFyaWVzLmluY2x1ZGVzKGRpY3QudXVpZClcbiAgICAgICk7XG5cbiAgICAgIHNlbGVjdGVkRGljdGlvbmFyaWVzLmZvckVhY2goKHJlZmVyZW5jZURpY3Rpb25hcnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlRGljdGlvbmFyeVV1aWQgPSByZWZlcmVuY2VEaWN0aW9uYXJ5LnV1aWQ7XG5cbiAgICAgICAgY29uc3QgY29tcG9uZW50T25seUZvckNvbmZpZyA9IHRoaXMuZmx1eFxuICAgICAgICAgIC5mbGF0TWFwKChzKSA9PiBzLnNlY3Rpb25zKVxuICAgICAgICAgIC5mbGF0TWFwKChzZWMpID0+IHNlYy5jb250cm9scylcbiAgICAgICAgICAuZmluZChcbiAgICAgICAgICAgIChjdHJsKSA9PlxuICAgICAgICAgICAgICBjdHJsPy5zcGVjaWZpY0NvbnRyb2xEYXRhPy5kaWN0aW9uYXJ5VVVJRCA9PT1cbiAgICAgICAgICAgICAgcmVmZXJlbmNlRGljdGlvbmFyeVV1aWQgJiYgY3RybD8uaXNPbmx5Rm9yQ29uZmlnID09PSB0cnVlXG4gICAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBuZXdGaWVsZEtleSA9XG4gICAgICAgICAgY29tcG9uZW50T25seUZvckNvbmZpZz8uaWRlbnRpZmllciA/P1xuICAgICAgICAgIGBleHRyYV8ke3JlZmVyZW5jZURpY3Rpb25hcnlVdWlkfWA7XG5cbiAgICAgICAgbGV0IHJlZmVyZW5jZURpY3Rpb25hcnlMYWJlbCA9IHJlZmVyZW5jZURpY3Rpb25hcnkubmFtZTtcblxuICAgICAgICBjb25zdCBzcGVjaWZpY1RyYW5zbGF0aW9uVmFsdWUgPSByZWxhdGVkRGljdGlvbmFyaWVzVHJhbnNsYXRpb25zXG4gICAgICAgICAgLmZpbmQoKGQpID0+IGQuZGljdGlvbmFyeVVVSUQgPT0gcmVmZXJlbmNlRGljdGlvbmFyeVV1aWQpXG4gICAgICAgICAgPy50cmFuc2xhdGlvbnM/LmZpbmQoXG4gICAgICAgICAgICAodCkgPT4gdC5sYW5ndWFnZUlzbyA9PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICAgICk/LnZhbHVlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBzcGVjaWZpY1RyYW5zbGF0aW9uVmFsdWUgJiZcbiAgICAgICAgICBzcGVjaWZpY1RyYW5zbGF0aW9uVmFsdWUudHJpbSgpICE9PSAnJ1xuICAgICAgICApIHtcbiAgICAgICAgICByZWZlcmVuY2VEaWN0aW9uYXJ5TGFiZWwgPSBzcGVjaWZpY1RyYW5zbGF0aW9uVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVmZXJlbmNlRGljdGlvbmFyeUxhYmVsID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudExhbmd1YWdlSWQgPSBVdGlscy5maW5kTGFuZ3VhZ2VJZEJ5SXNvKFxuICAgICAgICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLFxuICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgbmV3RmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgIGtleTogbmV3RmllbGRLZXksXG4gICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgbGFiZWw6IHJlZmVyZW5jZURpY3Rpb25hcnlMYWJlbCxcbiAgICAgICAgICAgIGRlc2lnbjogdGhpcy5kZXNpZ24sXG4gICAgICAgICAgICBkaWN0aW9uYXJ5SWQ6IHJlZmVyZW5jZURpY3Rpb25hcnlVdWlkLFxuICAgICAgICAgICAgZGljdGlvbmFyeURhdGE6IHJlZmVyZW5jZURpY3Rpb25hcnksXG4gICAgICAgICAgICBsYW5ndWFnZXM6IHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLFxuICAgICAgICAgICAgcHJlbG9hZGVkRGljdGlvbmFyaWVzOiB0aGlzLmRpY3Rpb25hcnlNYXAsXG4gICAgICAgICAgICB1c2VQcmVsb2FkZWREYXRhOiB0cnVlLFxuICAgICAgICAgICAgY3VycmVudExhbmd1YWdlSXNvOiB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgICAgICAgIGN1cnJlbnRMYW5ndWFnZUlkOiBjdXJyZW50TGFuZ3VhZ2VJZCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICBzdHlsZTogdGhpcy5zdHlsZU9iamVjdFRvU3RyaW5nRXhjZXB0QmFja2dyb3VuZChcbiAgICAgICAgICAgICAgICB0aGlzLmRlc2lnbltgLmZvbnQtbGlzdGBdIHx8IHt9XG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3B0aW9uczogcmVmZXJlbmNlRGljdGlvbmFyeS52YWx1ZXM/Lm1hcCgodmFsdWU6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgICAgICBVdGlscy5maW5kVmFsdWVUcmFuc2xhdGlvbihcbiAgICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlVHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgICAgICAgY3VycmVudExhbmd1YWdlSWRcbiAgICAgICAgICAgICAgICApIHx8IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICAgIGN1cnJlbnRMYW5ndWFnZUlzbzogdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocmVmZXJlbmNlRGljdGlvbmFyeS5kZWZhdWx0VmFsdWVJZCkge1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB0aGlzLmZpbmRBbmRNYXBEZWZhdWx0VmFsdWUoXG4gICAgICAgICAgICByZWZlcmVuY2VEaWN0aW9uYXJ5LFxuICAgICAgICAgICAgcmVmZXJlbmNlRGljdGlvbmFyeS5kZWZhdWx0VmFsdWVJZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGRlZmF1bHRWYWwpIHtcbiAgICAgICAgICAgIG5ld0ZpZWxkLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50RmllbGRHcm91cCA9IHBhcmVudERpY3Rpb25hcnlGaWVsZC5wYXJlbnRcbiAgICAgICAgICA/IHBhcmVudERpY3Rpb25hcnlGaWVsZC5wYXJlbnQuZmllbGRHcm91cFxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgaWYgKHBhcmVudEZpZWxkR3JvdXApIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnRJbmRleCA9IHBhcmVudEZpZWxkR3JvdXAuZmluZEluZGV4KFxuICAgICAgICAgICAgKGZpZWxkKSA9PiBmaWVsZC5rZXkgPT09IHBhcmVudERpY3Rpb25hcnlGaWVsZC5rZXlcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChwYXJlbnRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy5maW5kTGFzdENoaWxkSW5kZXgoXG4gICAgICAgICAgICAgIHBhcmVudEZpZWxkR3JvdXAsXG4gICAgICAgICAgICAgIHBhcmVudEluZGV4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBwZXJjZW50YWdlVG9BZGQgPSB0aGlzLmdldEV4aXN0aW5nUGVyY2VudGFnZShcbiAgICAgICAgICAgICAgcGFyZW50RmllbGRHcm91cCxcbiAgICAgICAgICAgICAgcGFyZW50SW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBuZXdGaWVsZC5jbGFzc05hbWUgPSBwZXJjZW50YWdlVG9BZGQgPT09IDBcbiAgICAgICAgICAgICAgPyBwYXJlbnREaWN0aW9uYXJ5RmllbGQuY2xhc3NOYW1lXG4gICAgICAgICAgICAgIDogdGhpcy5nZXRQZXJjZW50YWdlQ2xhc3NOYW1lKHBlcmNlbnRhZ2VUb0FkZCk7XG5cbiAgICAgICAgICAgIHBhcmVudEZpZWxkR3JvdXAuc3BsaWNlKGVuZEluZGV4ICsgMSwgMCwgbmV3RmllbGQpO1xuXG4gICAgICAgICAgICBjb25zdCBjbGFzc05hbWVUb0FkZCA9XG4gICAgICAgICAgICAgIHR5cGUgPT09ICdyYWRpbycgPyBgIGNvbXBvbmVudC1yYWRpb2AgOiBgIGNvbXBvbmVudC1kYXRhYDtcbiAgICAgICAgICAgIG5ld0ZpZWxkLmNsYXNzTmFtZSArPSBjbGFzc05hbWVUb0FkZDtcbiAgICAgICAgICAgIHRoaXMuYXR0YWNoVG9WYWx1ZUNoYW5nZXMobmV3RmllbGRLZXksIG5ld0ZpZWxkKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybWx5Q29uZmlnKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRFeGlzdGluZ1BlcmNlbnRhZ2UoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdLCBpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgcGVyY2VudGFnZSA9IDA7XG4gICAgY29uc3QgZmllbGQgPSBmaWVsZHNbaW5kZXhdO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IGZpZWxkLmNsYXNzTmFtZTtcbiAgICBpZiAoZmllbGQudHlwZT8udG9TdHJpbmcoKSAhPT0gU3RlcENvbnRyb2xUeXBlLk5ld1Jvdy50b1N0cmluZygpKSB7XG4gICAgICBpZiAoY2xhc3NOYW1lICYmIGNsYXNzTmFtZS5zdGFydHNXaXRoKCdwZXJjZW50YWdlLXdpZHRoLScpKSB7XG4gICAgICAgIHBlcmNlbnRhZ2UgPVxuICAgICAgICAgIChwYXJzZUludChjbGFzc05hbWUucmVwbGFjZSgncGVyY2VudGFnZS13aWR0aC0nLCAnJyksIDEwKSAqIDEwMCkgLyAxMjtcbiAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lICYmIGNsYXNzTmFtZS5zdGFydHNXaXRoKCdwaXhlbC13aWR0aC0nKSkge1xuICAgICAgICBjb25zdCBwaXhlbHMgPSBwYXJzZUludChjbGFzc05hbWUucmVwbGFjZSgncGl4ZWwtd2lkdGgtJywgJycpLCAxMCk7XG4gICAgICAgIHBlcmNlbnRhZ2UgPSAocGl4ZWxzIC8gMTAwMCkgKiAxMDA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwZXJjZW50YWdlO1xuICB9XG5cbiAgY2FsY3VsYXRlUmVtYWluaW5nUGVyY2VudGFnZUZvclJhbmdlKFxuICAgIGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSxcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgZW5kSW5kZXg6IG51bWJlclxuICApOiBudW1iZXIge1xuICAgIGxldCByZW1haW5pbmdQZXJjZW50YWdlID0gMTAwO1xuXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7IGkrKykge1xuICAgICAgY29uc3QgcGVyY2VudGFnZSA9IHRoaXMuZ2V0RXhpc3RpbmdQZXJjZW50YWdlKGZpZWxkcywgaSk7XG4gICAgICByZW1haW5pbmdQZXJjZW50YWdlIC09IHBlcmNlbnRhZ2U7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLm1heChyZW1haW5pbmdQZXJjZW50YWdlLCAwKTtcbiAgfVxuXG4gIHJlbW92ZVJlZmVyZW5jZUZpZWxkcyhjdXJyZW50Rm9ybWx5RmllbGRDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnKSB7XG4gICAgY29uc3QgcmVmZXJyZWRJbkRpY3Rpb25hcmllc1VVSWRzID1cbiAgICAgIGN1cnJlbnRGb3JtbHlGaWVsZENvbmZpZy5wcm9wcz8uWydkaWN0aW9uYXJ5RGF0YSddXG4gICAgICAgID8ucmVmZXJyZWRJbkRpY3Rpb25hcmllc1VVSWRzO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVmZXJyZWRJbkRpY3Rpb25hcmllc1VVSWRzKSkge1xuICAgICAgY29uc3QgcGFyZW50RmllbGRHcm91cCA9IGN1cnJlbnRGb3JtbHlGaWVsZENvbmZpZy5wYXJlbnRcbiAgICAgICAgPyBjdXJyZW50Rm9ybWx5RmllbGRDb25maWcucGFyZW50LmZpZWxkR3JvdXBcbiAgICAgICAgOiBudWxsO1xuICAgICAgaWYgKHBhcmVudEZpZWxkR3JvdXApIHtcbiAgICAgICAgY29uc3QgcGFyZW50SW5kZXggPSBwYXJlbnRGaWVsZEdyb3VwLmZpbmRJbmRleChcbiAgICAgICAgICAoZmllbGQpID0+IGZpZWxkLmtleSA9PT0gY3VycmVudEZvcm1seUZpZWxkQ29uZmlnLmtleVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChwYXJlbnRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcmVmZXJyZWRJbkRpY3Rpb25hcmllc1VVSWRzKSB7XG4gICAgICAgICAgICBjb25zdCBpZFRvRmluZCA9ICdleHRyYV8nICsgaXRlbTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHBhcmVudEZpZWxkR3JvdXAubGVuZ3RoIC0gMTsgaSA+IHBhcmVudEluZGV4OyBpLS0pIHtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudEZpZWxkS2V5ID0gcGFyZW50RmllbGRHcm91cFtpXS5rZXk/LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIGlmIChjdXJyZW50RmllbGRLZXkgJiYgY3VycmVudEZpZWxkS2V5ID09PSBpZFRvRmluZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJGb3JtQ29udHJvbFZhbHVlKGlkVG9GaW5kKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRGaWVsZEdyb3VwLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFkZENoaWxkRGljdGlvbmFyeUZpZWxkKFxuICAgIGNoaWxkRGljdGlvbmFyeVV1aWQ6IHN0cmluZyxcbiAgICBwYXJlbnREaWN0aW9uYXJ5RmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnLFxuICAgIHR5cGU6IGFueSxcbiAgICByZWxhdGVkRGljdGlvbmFyaWVzVHJhbnNsYXRpb25zOiBEaWN0aW9uYXJ5TGFiZWxJbmZvW11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNoaWxkRGljdGlvbmFyeVV1aWQpIHtcbiAgICAgIGNvbnN0IGNoaWxkRGljdGlvbmFyeSA9IHRoaXMuZGljdGlvbmFyeU1hcC5nZXQoY2hpbGREaWN0aW9uYXJ5VXVpZCk7XG4gICAgICBpZiAoY2hpbGREaWN0aW9uYXJ5KSB7XG4gICAgICAgIGxldCBjaGlsZERpY3Rpb25hcnlMYWJlbCA9IGNoaWxkRGljdGlvbmFyeS5uYW1lO1xuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9XG4gICAgICAgICAgcmVsYXRlZERpY3Rpb25hcmllc1RyYW5zbGF0aW9uc1xuICAgICAgICAgICAgLmZpbmQoKGQpID0+IGQuZGljdGlvbmFyeVVVSUQgPT0gY2hpbGREaWN0aW9uYXJ5VXVpZClcbiAgICAgICAgICAgID8udHJhbnNsYXRpb25zLmZpbmQoKHQpID0+IHQubGFuZ3VhZ2VJc28gPT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28pXG4gICAgICAgICAgICA/LnZhbHVlIHx8ICcnO1xuICAgICAgICBpZiAodHJhbnNsYXRpb24pIHtcbiAgICAgICAgICBjaGlsZERpY3Rpb25hcnlMYWJlbCA9IHRyYW5zbGF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld0ZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgICBrZXk6IGAke3BhcmVudERpY3Rpb25hcnlGaWVsZC5rZXl9X2NoaWxkXyR7Y2hpbGREaWN0aW9uYXJ5VXVpZH1gLFxuICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGxhYmVsOiBjaGlsZERpY3Rpb25hcnlMYWJlbCxcbiAgICAgICAgICAgIGRpY3Rpb25hcnlEYXRhOiBjaGlsZERpY3Rpb25hcnksXG4gICAgICAgICAgICBsYW5ndWFnZXM6IHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLFxuICAgICAgICAgICAgcHJlbG9hZGVkRGljdGlvbmFyaWVzOiB0aGlzLmRpY3Rpb25hcnlNYXAsXG4gICAgICAgICAgICBvcHRpb25zOiBjaGlsZERpY3Rpb25hcnkudmFsdWVzPy5tYXAoKHZhbHVlKSA9PiAoe1xuICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUuaWQsXG4gICAgICAgICAgICAgIGxhYmVsOiB2YWx1ZS5uYW1lLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgIHN0eWxlOiB0aGlzLnN0eWxlT2JqZWN0VG9TdHJpbmdFeGNlcHRCYWNrZ3JvdW5kKFxuICAgICAgICAgICAgICAgIHRoaXMuZGVzaWduW2AuZm9udC1saXN0YF0gfHwge31cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBob29rczoge1xuICAgICAgICAgICAgb25Jbml0OiAoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAgICAgICAgICAgdGhpcy5maWVsZFVuc3Vic2NyaWJlU3ViamVjdHMucHVzaCh1bnN1YnNjcmliZSQpO1xuXG4gICAgICAgICAgICAgIGZpZWxkLmZvcm1Db250cm9sPy52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodW5zdWJzY3JpYmUkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGFzeW5jIChzZWxlY3RlZFZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IGNoaWxkRGljdGlvbmFyeS52YWx1ZXM/LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICh2YWwpID0+IHZhbC5pZCA9PT0gc2VsZWN0ZWRWYWx1ZVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbiAmJiBzZWxlY3RlZE9wdGlvbi5jaGlsZERpY3Rpb25hcnlVVUlEKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkQ2hpbGREaWN0aW9uYXJ5RmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb24uY2hpbGREaWN0aW9uYXJ5VVVJRCxcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWREaWN0aW9uYXJpZXNUcmFuc2xhdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGRGaWVsZHMoZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm1seUNvbmZpZygpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGZpZWxkLmhvb2tzIS5vbkRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICAgICAgICAgICAgICB1bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwYXJlbnRGaWVsZEdyb3VwID0gcGFyZW50RGljdGlvbmFyeUZpZWxkLnBhcmVudFxuICAgICAgICAgID8gcGFyZW50RGljdGlvbmFyeUZpZWxkLnBhcmVudC5maWVsZEdyb3VwXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICBpZiAocGFyZW50RmllbGRHcm91cCkge1xuICAgICAgICAgIGNvbnN0IHBhcmVudEluZGV4ID0gcGFyZW50RmllbGRHcm91cC5maW5kSW5kZXgoXG4gICAgICAgICAgICAoZmllbGQpID0+IGZpZWxkLmtleSA9PT0gcGFyZW50RGljdGlvbmFyeUZpZWxkLmtleVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHBhcmVudEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgZW5kSW5kZXggPSB0aGlzLmZpbmRMYXN0Q2hpbGRJbmRleChcbiAgICAgICAgICAgICAgcGFyZW50RmllbGRHcm91cCxcbiAgICAgICAgICAgICAgcGFyZW50SW5kZXhcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2VUb0FkZCA9IHRoaXMuZ2V0RXhpc3RpbmdQZXJjZW50YWdlKFxuICAgICAgICAgICAgICBwYXJlbnRGaWVsZEdyb3VwLFxuICAgICAgICAgICAgICBwYXJlbnRJbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG5ld0ZpZWxkLmNsYXNzTmFtZSA9IHRoaXMuZ2V0UGVyY2VudGFnZUNsYXNzTmFtZShwZXJjZW50YWdlVG9BZGQpO1xuICAgICAgICAgICAgcGFyZW50RmllbGRHcm91cC5zcGxpY2UoZW5kSW5kZXggKyAxLCAwLCBuZXdGaWVsZCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZVRvQWRkID1cbiAgICAgICAgICAgICAgdHlwZSA9PT0gJ3JhZGlvJyA/IGAgY29tcG9uZW50LXJhZGlvYCA6IGAgY29tcG9uZW50LWRhdGFgO1xuICAgICAgICAgICAgbmV3RmllbGQuY2xhc3NOYW1lICs9IGNsYXNzTmFtZVRvQWRkO1xuICAgICAgICAgICAgLy90aGlzLmF0dGFjaFRvVmFsdWVDaGFuZ2VzKG5ld0ZpZWxkS2V5LCBuZXdGaWVsZCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm1seUNvbmZpZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBDaGlsZCBkaWN0aW9uYXJ5IG5vdCBmb3VuZCBmb3IgVVVJRCAke2NoaWxkRGljdGlvbmFyeVV1aWR9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ29tcGxldGlvbigpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnT3JpZ2luIGZvcm0gY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgIHRoaXMuY29tcGxldGlvbkV2ZW50LmVtaXQoKTtcbiAgfVxuXG4gIGZpbmRMYXN0Q2hpbGRJbmRleChmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10sIHBhcmVudEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHBhcmVudEtleVByZWZpeCA9IGAke2ZpZWxkc1twYXJlbnRJbmRleF0ua2V5fV9gO1xuICAgIGxldCBsYXN0SW5kZXggPSBwYXJlbnRJbmRleDtcblxuICAgIGZvciAobGV0IGkgPSBwYXJlbnRJbmRleCArIDE7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChmaWVsZHNbaV0ua2V5Py50b1N0cmluZygpLnN0YXJ0c1dpdGgocGFyZW50S2V5UHJlZml4KSkge1xuICAgICAgICBsYXN0SW5kZXggPSBpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RJbmRleDtcbiAgfVxuXG4gIGZpbmRGaWVsZEJ5S2V5KFxuICAgIGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSxcbiAgICBrZXk6IHN0cmluZ1xuICApOiBGb3JtbHlGaWVsZENvbmZpZyB8IG51bGwge1xuICAgIGlmICghZmllbGRzKSByZXR1cm4gbnVsbDtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzdGVwcGVyJyAmJiBmaWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kSW5TdGVwcGVyID0gdGhpcy5maW5kRmllbGRCeUtleShmaWVsZC5maWVsZEdyb3VwLCBrZXkpO1xuICAgICAgICBpZiAoZm91bmRJblN0ZXBwZXIpIHJldHVybiBmb3VuZEluU3RlcHBlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kRmllbGRCeUtleShmaWVsZC5maWVsZEdyb3VwLCBrZXkpO1xuICAgICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZW1vdmVDaGlsZEZpZWxkcyhwYXJlbnRGaWVsZDogRm9ybWx5RmllbGRDb25maWcpIHtcbiAgICBjb25zdCBwYXJlbnRGaWVsZEdyb3VwID0gcGFyZW50RmllbGQucGFyZW50XG4gICAgICA/IHBhcmVudEZpZWxkLnBhcmVudC5maWVsZEdyb3VwXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAocGFyZW50RmllbGRHcm91cCkge1xuICAgICAgY29uc3QgcGFyZW50SW5kZXggPSBwYXJlbnRGaWVsZEdyb3VwLmZpbmRJbmRleChcbiAgICAgICAgKGZpZWxkKSA9PiBmaWVsZC5rZXkgPT09IHBhcmVudEZpZWxkLmtleVxuICAgICAgKTtcblxuICAgICAgaWYgKHBhcmVudEluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBwYXJlbnRLZXlQcmVmaXggPSBgJHtwYXJlbnRGaWVsZC5rZXl9X2NoaWxkX2A7XG5cbiAgICAgICAgLy8gUmVtb3ZlIG9ubHkgdGhlIHJlbGV2YW50IGNoaWxkIGZpZWxkc1xuICAgICAgICBmb3IgKGxldCBpID0gcGFyZW50RmllbGRHcm91cC5sZW5ndGggLSAxOyBpID4gcGFyZW50SW5kZXg7IGktLSkge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRGaWVsZEtleSA9IHBhcmVudEZpZWxkR3JvdXBbaV0ua2V5Py50b1N0cmluZygpO1xuICAgICAgICAgIGlmIChjdXJyZW50RmllbGRLZXkgJiYgY3VycmVudEZpZWxkS2V5LnN0YXJ0c1dpdGgocGFyZW50S2V5UHJlZml4KSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhckZvcm1Db250cm9sVmFsdWUoY3VycmVudEZpZWxkS2V5KTtcbiAgICAgICAgICAgIHBhcmVudEZpZWxkR3JvdXAuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBORVc6IExvYWQgQUxMIGRpY3Rpb25hcmllcyBuZWVkZWQgZm9yIHRoaXMgYXBwIHVzaW5nIHRoZSBuZXcgYXBwLWJhc2VkIGVuZHBvaW50XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGxvYWRBbGxSZXF1aXJlZERpY3Rpb25hcmllcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuYXBwTW9kZWw/LmFwcGxpY2F0aW9uVXVpZCkge1xuICAgICAgY29uc29sZS53YXJuKCdObyBhcHAgVVVJRCBhdmFpbGFibGUgZm9yIGRpY3Rpb25hcnkgbG9hZGluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICB0aGlzLnNlcnZpY2UubG9hZEFwcERpY3Rpb25hcmllcyhcbiAgICAgICAgICB0aGlzLmFwcE1vZGVsLmFwcGxpY2F0aW9uVXVpZCxcbiAgICAgICAgICBFbnZpcm9ubWVudFR5cGUuQ29uZmlnXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICAgIGlmICghcmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICfinYwgQmFja2VuZCBmYWlsZWQgdG8gbG9hZCBkaWN0aW9uYXJpZXM6JyxcbiAgICAgICAgICByZXNwb25zZS5lcnJvcnNcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBTaW1wbGUgYXNzaWdubWVudCAtIEFMTCBkaWN0aW9uYXJpZXMgYW5kIGRlcGVuZGVuY2llcyBhbHJlYWR5IGxvYWRlZCBieSBiYWNrZW5kXG4gICAgICBPYmplY3QuZW50cmllcyhyZXNwb25zZS5kaWN0aW9uYXJpZXMpLmZvckVhY2goKFt1dWlkLCBkaWN0XSkgPT4ge1xuICAgICAgICB0aGlzLmRpY3Rpb25hcnlNYXAuc2V0KHV1aWQsIGRpY3QpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCBGYWlsZWQgdG8gbG9hZCBhcHAgZGljdGlvbmFyaWVzOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckZvcm1Db250cm9sVmFsdWUoZmllbGRLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IGtleXMgPSBmaWVsZEtleS5zcGxpdCgnLicpO1xuICAgIGxldCBjb250cm9sID0gdGhpcy5mb3JtO1xuICAgIGxldCBtb2RlbCA9IHRoaXMubW9kZWw7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBjb250cm9sID0gY29udHJvbC5nZXQoa2V5c1tpXSkgYXMgRm9ybUdyb3VwO1xuICAgICAgbW9kZWwgPSBtb2RlbFtrZXlzW2ldXTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5hbEtleSA9IGtleXNba2V5cy5sZW5ndGggLSAxXTtcbiAgICBpZiAoY29udHJvbCAmJiBjb250cm9sLmdldChmaW5hbEtleSkpIHtcbiAgICAgIGNvbnRyb2wucmVtb3ZlQ29udHJvbChmaW5hbEtleSk7XG4gICAgfVxuXG4gICAgaWYgKG1vZGVsICYmIG1vZGVsW2ZpbmFsS2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgbW9kZWxbZmluYWxLZXldO1xuICAgIH1cbiAgfVxuXG4gIGZpbmRGaWVsZChcbiAgICBmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10sXG4gICAga2V5OiBzdHJpbmdcbiAgKTogRm9ybWx5RmllbGRDb25maWcgfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICAgIGNvbnN0IG5lc3RlZEZpZWxkID0gdGhpcy5maW5kRmllbGQoZmllbGQuZmllbGRHcm91cCwga2V5KTtcbiAgICAgICAgaWYgKG5lc3RlZEZpZWxkKSB7XG4gICAgICAgICAgcmV0dXJuIG5lc3RlZEZpZWxkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3B1bGF0ZU1vZGVsV2l0aEZpbGxEYXRhKGZpbGxEYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoZmlsbERhdGEpIHtcbiAgICAgIGxldCBhdXhNb2RlbCA9IE1vZGVsUG9wdWxhdGlvbkhlbHBlci5wb3B1bGF0ZU1vZGVsV2l0aEZpbGxEYXRhKFxuICAgICAgICBmaWxsRGF0YSxcbiAgICAgICAgdGhpcy5mbHV4LFxuICAgICAgICB0aGlzLmRpY3Rpb25hcnlNYXAsXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzXG4gICAgICApO1xuICAgICAgdGhpcy5tb2RlbCA9IHsgLi4uYXV4TW9kZWwgfTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluZEFuZE1hcERlZmF1bHRWYWx1ZShcbiAgICBkaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5RHRvIHwgdW5kZWZpbmVkLFxuICAgIGRlZmF1bHRWYWx1ZUlkOiBudW1iZXJcbiAgKTogRGljdGlvbmFyeVZhbHVlIHwgbnVsbCB7XG4gICAgcmV0dXJuIE1vZGVsUG9wdWxhdGlvbkhlbHBlci5maW5kQW5kTWFwRGVmYXVsdFZhbHVlKFxuICAgICAgZGljdGlvbmFyeSxcbiAgICAgIGRlZmF1bHRWYWx1ZUlkLFxuICAgICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXNcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlRm9ybWx5Q29uZmlnKCkge1xuICAgIHRoaXMuZm9ybWx5Q29uZmlnID0gWy4uLnRoaXMuZm9ybWx5Q29uZmlnXTtcbiAgfVxuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVGcm9tQWxsRmllbGRzKCkge1xuICAgIGZvciAoY29uc3Qgc3ViamVjdCBvZiB0aGlzLmZpZWxkVW5zdWJzY3JpYmVTdWJqZWN0cykge1xuICAgICAgc3ViamVjdC5uZXh0KCk7XG4gICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfVxuICAgIHRoaXMuZmllbGRVbnN1YnNjcmliZVN1YmplY3RzID0gW107XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbUFsbEZpZWxkcygpO1xuICAgIGlmICh0aGlzLmNvbGxlY3RvckhhbmRsZXJTdWJzY3JpcHRpb25zKSB7XG4gICAgICB0aGlzLmNvbGxlY3RvckhhbmRsZXJTdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmFjdGlvblN0ZXBTdWJzY3JpcHRpb25zKSB7XG4gICAgICB0aGlzLmFjdGlvblN0ZXBTdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmFjdGlvblN0ZXBIYW5kbGVyKSB7XG4gICAgICB0aGlzLmFjdGlvblN0ZXBIYW5kbGVyLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RCdXR0b25zKGJ1dHRvbnNDb25maWc6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghYnV0dG9uc0NvbmZpZyB8fCBidXR0b25zQ29uZmlnLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gYnV0dG9uc0NvbmZpZy5tYXAoKGJ1dHRvbikgPT4gKHtcbiAgICAgIHR5cGU6IGJ1dHRvbi52YWx1ZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgbGFiZWw6IGJ1dHRvbi50cmFuc2xhdGlvbnM/Llt0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb10gfHwgYnV0dG9uLnZhbHVlLFxuICAgICAgc3R5bGVLZXk6IGAuYnV0dG9uLSR7YnV0dG9uLnZhbHVlLnRvTG93ZXJDYXNlKCl9YCxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHN0eWxlT2JqZWN0VG9TdHJpbmdFeGNlcHRCYWNrZ3JvdW5kKHN0eWxlT2JqOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhzdHlsZU9iailcbiAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4ga2V5ICE9PSAnYmFja2dyb3VuZC1jb2xvcicpXG4gICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2tleX06ICR7dmFsdWV9YClcbiAgICAgIC5qb2luKCc7ICcpO1xuICB9XG5cbiAgdmFsaWRhdGVNZXRob2RBcGkoZGF0YTogQXBpVmFsaWRhdGVSZXF1ZXN0KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgaWYgKGRhdGEuYXBpSWQgPT09IHVuZGVmaW5lZCB8fCBkYXRhLmFwcElkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBwbGljYXRpb25EYXRhU2VydmljZS52YWxpZGF0ZUFwaShkYXRhKS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnQVBJIHZhbGlkYXRpb24gcmVzcG9uc2U6JywgcmVzcG9uc2UpO1xuICAgICAgICByZXR1cm4gISFyZXNwb25zZTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdmFsaWRhdGluZyAnICsgZGF0YS5kYXRhLCBlcnJvcik7XG4gICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGljIG1ldGhvZCB0byBjbGVhciB0aGUgc2F2aW5nIGFmdGVyIGFjdGlvbnMgc3RhdGVcbiAgICogQ2FsbGVkIGJ5IHN0ZXBwZXIgY29tcG9uZW50IGFmdGVyIHNhdmVBcHBEYXRhU3RlcCBjb21wbGV0ZXNcbiAgICovXG4gIHB1YmxpYyBjbGVhclNhdmluZ0FmdGVyQWN0aW9uc1N0YXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzU2F2aW5nQWZ0ZXJBY3Rpb25zKSB7XG4gICAgICB0aGlzLmlzU2F2aW5nQWZ0ZXJBY3Rpb25zID0gZmFsc2U7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG4gIGxvYWRpbmdNZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbn1cbiIsIjxkaXYgKm5nSWY9XCJpc0xvYWRpbmdcIiBjbGFzcz1cImxvYWRpbmctb3ZlcmxheVwiPlxuICA8bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj5cbjwvZGl2PlxuPGRpdiBbaGlkZGVuXT1cImlzTG9hZGluZ1wiPlxuICA8ZGl2ICpuZ0lmPVwic2hvd0xhbmd1YWdlU2VsZWN0b3JcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwicmlnaHQtYWxpZ25lZFwiPlxuICAgIDxidXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImZsYWdzXCIgbWF0LWljb24tYnV0dG9uIGNsYXNzPVwibS1yLTVcIj5cbiAgICAgIDxpbWdcbiAgICAgICAgW3NyY109XCJyZXR1cm5GTGFnKGN1cnJlbnRMYW5ndWFnZUlzbylcIlxuICAgICAgICBjbGFzcz1cInJvdW5kZWQtY2lyY2xlIG9iamVjdC1jb3ZlciBpY29uLTIwXCJcbiAgICAgIC8+XG4gICAgPC9idXR0b24+XG4gICAgPG1hdC1tZW51ICNmbGFncz1cIm1hdE1lbnVcIiBjbGFzcz1cImNhcmRXaXRoU2hhZG93XCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgKm5nRm9yPVwibGV0IGxhbmcgb2YgYXBwbGljYXRpb25MYW5ndWFnZXMoKVwiXG4gICAgICAgIChjbGljayk9XCJjaGFuZ2VMYW5ndWFnZShsYW5nLmlzbylcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIFtzcmNdPVwicmV0dXJuRkxhZyhsYW5nLmlzbylcIlxuICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkLWNpcmNsZSBvYmplY3QtY292ZXIgaWNvbi0yMFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdC1zdWJ0aXRsZS0xIGYtcy0xNFwiPnt7IGxhbmcubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC1tZW51PlxuICA8L2Rpdj5cblxuICA8YnIgLz5cbiAgPGRpdiBjbGFzcz1cImZvcm0tY29udGFpbmVyXCI+XG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cInN1Ym1pdCgpXCI+XG4gICAgICA8Zm9ybWx5LWZvcm1cbiAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcbiAgICAgICAgW2ZpZWxkc109XCJmb3JtbHlDb25maWdcIlxuICAgICAgICBbb3B0aW9uc109XCJvcHRpb25zXCJcbiAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgICA+PC9mb3JtbHktZm9ybT5cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
2439
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JpZ2luLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9vcmlnaW4tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL29yaWdpbi1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBSU4sWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxXQUFXLEdBR1osTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQ0wsT0FBTyxFQUNQLGNBQWMsRUFDZCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFlBQVksRUFDWixTQUFTLEVBQ1QsVUFBVSxFQUNWLEVBQUUsRUFDRixTQUFTLEVBRVQsR0FBRyxFQUNILFlBQVksR0FDYixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU8vQyxPQUFPLEVBS0wsUUFBUSxFQUNSLGFBQWEsRUFDYixlQUFlLEVBQ2Ysc0JBQXNCLEdBR3ZCLE1BQU0sc0JBQXNCLENBQUM7QUFLOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBWSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVVqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQVFsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUEwRSx1QkFBdUIsRUFBeUIsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7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QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFjSSxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBGb3JtbHlGaWVsZCxcbiAgRm9ybWx5RmllbGRDb25maWcsXG4gIEZvcm1seUZvcm1PcHRpb25zLFxufSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7XG4gIFN1YmplY3QsXG4gIGZpcnN0VmFsdWVGcm9tLFxuICBzdGFydFdpdGgsXG4gIHBhaXJ3aXNlLFxuICBkZWJvdW5jZVRpbWUsXG4gIHN3aXRjaE1hcCxcbiAgY2F0Y2hFcnJvcixcbiAgb2YsXG4gIHRha2VVbnRpbCxcbiAgT2JzZXJ2YWJsZSxcbiAgbWFwLFxuICBTdWJzY3JpcHRpb24sXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTGFiZWxLZXlzIH0gZnJvbSAnLi9lbnVtcy9sYWJlbC5rZXlzJztcbmltcG9ydCB7IEFwaVZhbGlkYXRlUmVxdWVzdCB9IGZyb20gJy4vbW9kZWxzL2FwcGxpY2F0aW9uLm1vZGVsJztcbmltcG9ydCB7XG4gIERpY3Rpb25hcnlEdG8sXG4gIERpY3Rpb25hcnlWYWx1ZSxcbiAgRGljdGlvbmFyeVZhbHVlRHRvLFxufSBmcm9tICcuL21vZGVscy9kaWN0aW9uYXJ5Lm1vZGVsJztcbmltcG9ydCB7XG4gIEZvcm1Nb2RlbCxcbiAgRGlzcGxheU1vZGVsLFxuICBHZW5lcmFsRGF0YU1vZGVsLFxuICBTdGVwc1NldHRpbmdzLFxuICBGbHV4VHlwZSxcbiAgRGltZW5zaW9uVHlwZSxcbiAgU3RlcENvbnRyb2xUeXBlLFxuICBNYW51YWxJbnB1dENvbnRyb2xUeXBlLFxuICBQcmVzZW50YXRpb25QYXJhZ3JhcGhDb250cm9sLFxuICBEaWN0aW9uYXJ5Q29udHJvbERhdGEsXG59IGZyb20gJy4vbW9kZWxzL2Zvcm1zLm1vZGVsJztcbmltcG9ydCB7IExhYmVsSW5mbywgVHJhbnNsYXRpb25JbmZvIH0gZnJvbSAnLi9tb2RlbHMvbGFiZWwtaW5mby5tb2RlbCc7XG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gJy4vbW9kZWxzL2xhYmVsLm1vZGVsJztcbmltcG9ydCB7IExhbmd1YWdlIH0gZnJvbSAnLi9tb2RlbHMvbGFuZ3VhZ2UubW9kZWwnO1xuaW1wb3J0IHsgRGljdGlvbmFyeUxhYmVsSW5mbyB9IGZyb20gJy4vb3RoZXJzL2RpY3Rpb25hcnktbGFiZWwtaW5mbyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFR5cGUgfSBmcm9tICcuL290aGVycy9lbnZpcm9ubWVudC10eXBlJztcbmltcG9ydCB7IENzc1J1bGVzLCBVdGlscyB9IGZyb20gJy4vb3RoZXJzL3V0aWxzJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uRGF0YVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2FwcGxpY2F0aW9uRGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IExhYmVsU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvbGFiZWxzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJveHlTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wcm94eS5zZXJ2aWNlJztcbmltcG9ydCB7IERpY3Rpb25hcnlTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9kaWN0aW9uYXJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9yaWdpbkZvcm1BdXRoU2VydmljZSB9IGZyb20gJy4vb3JpZ2luLWZvcm0tYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1zU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZm9ybXMuc2VydmljZSc7XG5pbXBvcnQgeyBJbnB1dENvbmZpZyB9IGZyb20gJy4vb3JpZ2luLWZvcm0tY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL290aGVycy9jb25maWctc2VydmljZSc7XG5pbXBvcnQgeyBNb2RlbFBvcHVsYXRpb25IZWxwZXIgfSBmcm9tICcuL21vZGVsLXBvcHVsYXRpb24uaGVscGVyJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQge1xuICBPcGVyYXRpb25SZXN1bHQsXG4gIE9yaWdpbkZvcm1TaWduYWxySGFuZGxlclNlcnZpY2UsXG59IGZyb20gJy4vc2VydmljZXMvb3JpZ2luLWZvcm0tc2lnbmFsci1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aW9uU3RlcEhhbmRsZXIgfSBmcm9tICcuL2FjdGlvbi1zdGVwLWhhbmRsZXInO1xuaW1wb3J0IHsgU2Nyb2xsVG9FcnJvclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3Njcm9sbC10by1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1Dc3NIZWxwZXIgfSBmcm9tICcuL2Zvcm0tY3NzLmhlbHBlcic7XG5pbXBvcnQgeyBCYXNlQ29udHJvbCwgQ29udHJvbERhdGEsIERlcGVuZGVudERpY3Rpb25hcnlEYXRhLCBQcmVzZW50YXRpb25Db250cm9sLCBQcmVzZW50YXRpb25Db250cm9sVHlwZSwgU2VjdGlvbkRhdGEsIFN0ZXBEYXRhIH0gZnJvbSAnLi9tb2RlbHMvZmx1eC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1vcmlnaW4tZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9vcmlnaW4tZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL29yaWdpbi1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIENvbGxlY3RvckZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGRyZW4oRm9ybWx5RmllbGQpIGZvcm1seUZpZWxkczogUXVlcnlMaXN0PEZvcm1seUZpZWxkPjtcbiAgXG4gIC8vdGhlc2UgYXJlIHNwZWNpZmljIHRvIHRoZSBsaWJcbiAgQElucHV0KCkgY29uZmlnQ29tcG9uZW50OiBJbnB1dENvbmZpZyB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgY29uZmlnVXVpZCE6IHN0cmluZztcbiAgQElucHV0KCkgY3VycmVudFN0ZXBJZDogc3RyaW5nO1xuICAvL2VuZCBzcGVjaWZpYyB0byBsaWJcblxuICBASW5wdXQoKSBhcHBNb2RlbDogRm9ybU1vZGVsO1xuICBASW5wdXQoKSBzaWduQmFzZVVybDogc3RyaW5nO1xuICBASW5wdXQoKSBjdXJyZW50TGFuZ3VhZ2VJc286IHN0cmluZztcbiAgQElucHV0KCkgZmlsbERhdGE6IGFueTtcbiAgQElucHV0KCkgZW52OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNob3dEaXNwbGF5TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93TGFuZ3VhZ2VTZWxlY3RvcjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGlzRGVtb01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNEZWJ1ZzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhcHBEYXRhVXVpZDogc3RyaW5nO1xuICBASW5wdXQoKSBibG9ja1ByZXZpb3VzU3RlcDogYm9vbGVhbjtcbiAgQElucHV0KCkgZGF0YVVybElkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG5vQnV0dG9uc0luVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGZsdXg6IFN0ZXBEYXRhW107XG4gIHByaXZhdGUgZGlzcGxheTogRGlzcGxheU1vZGVsO1xuICBwcml2YXRlIGRlc2lnbjogQ3NzUnVsZXM7XG4gIHByaXZhdGUgZ2VuZXJhbERhdGE6IEdlbmVyYWxEYXRhTW9kZWw7XG4gIHByaXZhdGUgbGFiZWxzOiBMYWJlbFtdO1xuICBwcml2YXRlIHN0ZXBEaWN0aW9uYXJ5RGVwZW5kZW50SWRzOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSBhdmFpbGFibGVMYW5ndWFnZXM6IExhbmd1YWdlW107XG4gIHByaXZhdGUgc3RlcHNTZXR0aW5nczogU3RlcHNTZXR0aW5ncztcbiAgZm9ybWx5Q29uZmlnVXBkYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgdmlzaWJsZUZpZWxkc1VwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgZm9ybWx5VXBkYXRlQW5kR29OZXh0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIGZvcm1seUdvTmV4dCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAT3V0cHV0KCkgY29tcGxldGlvbkV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgZm9ybWx5Q29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107XG4gIGZvcm1seUFsbFN0ZXBzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107XG4gIGFjdGl2ZVN0ZXAgPSAwO1xuICBtb2RlbDogYW55O1xuICBvcHRpb25zOiBGb3JtbHlGb3JtT3B0aW9ucyA9IHt9O1xuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGRpY3Rpb25hcnlNYXA6IE1hcDxzdHJpbmcsIERpY3Rpb25hcnlEdG8+ID0gbmV3IE1hcCgpO1xuICBkaWN0aW9uYXJ5SWRUb1V1aWRNYXA6IE1hcDxudW1iZXIsIHN0cmluZz4gPSBuZXcgTWFwKCk7XG4gIGdlbmVyYWxEYXRhS2V5cyA9IExhYmVsS2V5cy5hcHBDb25maWdFZGl0LmdlbmVyYWxEYXRhO1xuICBwcml2YXRlIGZpZWxkVW5zdWJzY3JpYmVTdWJqZWN0czogU3ViamVjdDx2b2lkPltdID0gW107XG4gIHByaXZhdGUgY29sbGVjdG9ySGFuZGxlclN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAvLyBBY3Rpb24gc3RlcCBleGVjdXRpb24gc3RhdGVcbiAgcHJpdmF0ZSBpc0V4ZWN1dGluZ0FjdGlvbnMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBhY3Rpb25TdGVwU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwdWJsaWMgaXNTYXZpbmdBZnRlckFjdGlvbnMgPSBmYWxzZTsgLy8gTWFrZSB0aGlzIHB1YmxpYyBzbyBzdGVwcGVyIGNhbiBhY2Nlc3MgaXRcblxuICAvLyBpZGVudGlmaWNhdGlvbiBreWMgY29tcG9uZW50XG4gIHB1YmxpYyBreWNBcGlVcmw6IHN0cmluZztcbiAgcHVibGljIGt5Y09yZGVySWQ6IHN0cmluZztcbiAgcHVibGljIGt5Y1Rva2VuOiBzdHJpbmc7XG4gIHB1YmxpYyBreWNFbnY6IHN0cmluZztcbiAgcHVibGljIGt5Y1JlZGlyZWN0SWQ6IHN0cmluZztcbiAgcHVibGljIGt5Y1Bob25lTnVtYmVyOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIGt5Y0xhbmdJc286IHN0cmluZyA9ICcnO1xuICBwdWJsaWMga3ljU2hvd0NpdGl6ZW5zaGlwOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBreWNTY3JvbGxNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIGVuZCBpZGVudGlmaWNhdGlvbiBreWMgY29tcG9uZW50XG4gIHB1YmxpYyBsYW5ndWFnZUZsYWdzOiBhbnlbXSA9IFtcbiAgICB7XG4gICAgICBsYW5ndWFnZTogJ0VuZ2xpc2gnLFxuICAgICAgY29kZTogJ2VuJyxcbiAgICAgIHR5cGU6ICdVUycsXG4gICAgICBpY29uOiAnL2Fzc2V0cy9pbWFnZXMvZmxhZy9pY29uLWZsYWctZW4uc3ZnJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhbmd1YWdlOiAnUm9tYW5hJyxcbiAgICAgIGNvZGU6ICdybycsXG4gICAgICBpY29uOiAnL2Fzc2V0cy9pbWFnZXMvZmxhZy9pY29uLWZsYWctcm8uc3ZnJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhbmd1YWdlOiAnRGV1dHNjaCcsXG4gICAgICBjb2RlOiAnZGUnLFxuICAgICAgaWNvbjogJy9hc3NldHMvaW1hZ2VzL2ZsYWcvaWNvbi1mbGFnLWRlLnN2ZycsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYW5ndWFnZTogJ0ZyYW7Dp2FpcycsXG4gICAgICBjb2RlOiAnZnInLFxuICAgICAgaWNvbjogJy9hc3NldHMvaW1hZ2VzL2ZsYWcvaWNvbi1mbGFnLWZyLnN2ZycsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYW5ndWFnZTogJ0l0YWxpYW5vJyxcbiAgICAgIGNvZGU6ICdpdCcsXG4gICAgICBpY29uOiAnL2Fzc2V0cy9pbWFnZXMvZmxhZy9pY29uLWZsYWctaXQuc3ZnJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhbmd1YWdlOiAnRXNwYcOxb2wnLFxuICAgICAgY29kZTogJ2VzJyxcbiAgICAgIGljb246ICcvYXNzZXRzL2ltYWdlcy9mbGFnL2ljb24tZmxhZy1lcy5zdmcnLFxuICAgIH0sXG4gIF07XG4gIGZvcm1seUNvbGxlY3RpbmdGaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW107XG4gIGZvcm1seVByZXNlbnRhdGlvbkZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXTtcbiAgY29udHJvbElkc1dpdGhWYWx1ZXM6IGFueTtcbiAgX3NlbGYgPSB0aGlzO1xuXG4gIFxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNlcnZpY2U6IERpY3Rpb25hcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcm94eTogUHJveHlTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGFiZWxTZXJ2aWNlOiBMYWJlbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvbkRhdGFTZXJ2aWNlOiBBcHBsaWNhdGlvbkRhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGFuZ1NlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBPcmlnaW5Gb3JtQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3Jtc1NlcnZpY2U6IEZvcm1zU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIG9yaWdpbkZvcm1TaWduYWxySGFuZGxlclNlcnZpY2U6IE9yaWdpbkZvcm1TaWduYWxySGFuZGxlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25TdGVwSGFuZGxlcjogQWN0aW9uU3RlcEhhbmRsZXIsXG4gICAgcHJpdmF0ZSBzY3JvbGxUb0Vycm9yU2VydmljZTogU2Nyb2xsVG9FcnJvclNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5reWNBcGlVcmwgPSBwcm94eS5hcGlVUkw7XG4gICAgdGhpcy5reWNPcmRlcklkID0gcHJveHkub3JkZXJJRCE7XG4gICAgdGhpcy5reWNUb2tlbiA9IHByb3h5LnRva2VuO1xuICAgIHRoaXMua3ljRW52ID0gcHJveHkuZW52O1xuXG4gICAgdGhpcy5reWNMYW5nSXNvID0gcHJveHkubGFuZ0lzbztcbiAgICBjb25zdCBpc0xvYWRpbmdTdWIgPVxuICAgICAgdGhpcy5vcmlnaW5Gb3JtU2lnbmFsckhhbmRsZXJTZXJ2aWNlLmlzTG9hZGluZyQuc3Vic2NyaWJlKChsb2FkaW5nKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGluZyAhPT0gbG9hZGluZykge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gbG9hZGluZztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhpcy5jb2xsZWN0b3JIYW5kbGVyU3Vic2NyaXB0aW9ucy5hZGQoaXNMb2FkaW5nU3ViKTtcblxuICAgICAgICBjb25zdCBvcGVyYXRpb25Db21wbGV0ZWRTdWIgPVxuICAgICAgdGhpcy5vcmlnaW5Gb3JtU2lnbmFsckhhbmRsZXJTZXJ2aWNlLm9wZXJhdGlvbkNvbXBsZXRlZCQuc3Vic2NyaWJlKFxuICAgICAgICBhc3luYyAocmVzdWx0OiBPcGVyYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0Lm9wZXJhdGlvbklkZW50aWZpZXIgPT09ICdLWUNfUFJPQ0VTU0lORycpIHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAnS1lDIFByb2Nlc3Npbmcgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCAodmlhIEhhbmRsZXIgU2VydmljZSk6JyxcbiAgICAgICAgICAgICAgICByZXN1bHQuZGF0YVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAocmVzdWx0LmRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGxEYXRhID0gSlNPTi5wYXJzZShyZXN1bHQuZGF0YS5maWxsRGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZU1vZGVsV2l0aEZpbGxEYXRhKHRoaXMuZmlsbERhdGEpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5mb3JtbHlVcGRhdGVBbmRHb05leHQuZW1pdCh7fSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICdLWUMgUHJvY2Vzc2luZyBmYWlsZWQgKHZpYSBIYW5kbGVyIFNlcnZpY2UpOicsXG4gICAgICAgICAgICAgICAgcmVzdWx0LmVycm9yXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIHRoaXMuY29sbGVjdG9ySGFuZGxlclN1YnNjcmlwdGlvbnMuYWRkKG9wZXJhdGlvbkNvbXBsZXRlZFN1Yik7XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gYWN0aW9uIHN0ZXAgZXhlY3V0aW9uIGV2ZW50c1xuICAgIGNvbnN0IGFjdGlvbkV4ZWN1dGluZ1N1YiA9XG4gICAgICB0aGlzLmFjdGlvblN0ZXBIYW5kbGVyLmFjdGlvbkV4ZWN1dGluZyQuc3Vic2NyaWJlKChleGVjdXRpbmcpID0+IHtcbiAgICAgICAgdGhpcy5pc0V4ZWN1dGluZ0FjdGlvbnMgPSBleGVjdXRpbmc7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZXhlY3V0aW5nO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuYWN0aW9uU3RlcFN1YnNjcmlwdGlvbnMuYWRkKGFjdGlvbkV4ZWN1dGluZ1N1Yik7XG5cbiAgICBjb25zdCBhY3Rpb25Db21wbGV0ZWRTdWIgPVxuICAgICAgdGhpcy5hY3Rpb25TdGVwSGFuZGxlci5hY3Rpb25Db21wbGV0ZWQkLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCfwn46sIEFjdGlvbiBzdGVwIGNvbXBsZXRlZDonLCByZXN1bHQpO1xuICAgICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcign4p2MIEFjdGlvbiBzdGVwIGZhaWxlZDonLCByZXN1bHQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGU6IFdlIGRvbid0IGF1dG8tcHJvZ3Jlc3MgaGVyZSBhcyBpdCdzIGhhbmRsZWQgaW4gZXhlY3V0ZUFjdGlvblN0ZXBzQmVmb3JlTW92aW5nXG4gICAgICB9KTtcbiAgICB0aGlzLmFjdGlvblN0ZXBTdWJzY3JpcHRpb25zLmFkZChhY3Rpb25Db21wbGV0ZWRTdWIpO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuZGF0YVVybElkKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuYXBwbGljYXRpb25EYXRhU2VydmljZS5nZXREYXRhVXJsKHRoaXMuZGF0YVVybElkKVxuICAgICAgKTtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5jb25maWdVdWlkID0gcmVzdWx0LmFwcElkO1xuICAgICAgICB0aGlzLmFwcERhdGFVdWlkID0gcmVzdWx0LmFwcERhdGFJZDtcbiAgICAgICAgdGhpcy5lbnYgPSByZXN1bHQuZW52O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFwcERhdGFVdWlkICYmIHRoaXMuY3VycmVudFN0ZXBJZCkge1xuICAgICAgdGhpcy5hcHBsaWNhdGlvbkRhdGFTZXJ2aWNlLnNldEN1cnJlbnRTdGVwKFxuICAgICAgICB0aGlzLmFwcERhdGFVdWlkLFxuICAgICAgICB0aGlzLmN1cnJlbnRTdGVwSWRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmFwcERhdGFVdWlkKSB7XG4gICAgICB0aGlzLmFwcERhdGFVdWlkID0gVXRpbHMuZ2VuZXJhdGVVVUlEKCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5jb25maWdDb21wb25lbnQgJiZcbiAgICAgIHRoaXMuY29uZmlnQ29tcG9uZW50LlRva2VuICYmXG4gICAgICB0aGlzLmNvbmZpZ0NvbXBvbmVudC5SZWZyZXNoVG9rZW5cbiAgICApIHtcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS51cGRhdGVDb25maWdGcm9tSW5wdXQodGhpcy5jb25maWdDb21wb25lbnQpO1xuICAgICAgYXdhaXQgdGhpcy5hdXRoU2VydmljZS5zZXRUb2tlbnMoXG4gICAgICAgIHRoaXMuY29uZmlnQ29tcG9uZW50LlRva2VuLFxuICAgICAgICB0aGlzLmNvbmZpZ0NvbXBvbmVudC5SZWZyZXNoVG9rZW5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMgfHwgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmxhbmdTZXJ2aWNlLmdldExhbmd1YWdlcygpKS50aGVuKChsaXN0KSA9PiB7XG4gICAgICAgIGlmIChsaXN0ICYmIGxpc3QuaXRlbXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyA9IGxpc3QuaXRlbXM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmxvYWRBcHBEYXRhKCk7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyAmJiB0aGlzLmFwcE1vZGVsKSB7XG4gICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyA9IHRoaXMuYXBwTW9kZWwuZ2VuZXJhbERhdGEuZGVmYXVsdExhbmd1YWdlO1xuICAgIH1cbiAgICBpZiAodGhpcy5hcHBNb2RlbCkge1xuICAgICAgYXdhaXQgdGhpcy5pbml0QXN5bmMoKTtcbiAgICB9XG4gIH1cblxuIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoY2hhbmdlc1snY29uZmlnQ29tcG9uZW50J10gJiYgIWNoYW5nZXNbJ2NvbmZpZ0NvbXBvbmVudCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY29uZmlnQ29tcG9uZW50ICYmXG4gICAgICAgIHRoaXMuY29uZmlnQ29tcG9uZW50LlRva2VuICYmXG4gICAgICAgIHRoaXMuY29uZmlnQ29tcG9uZW50LlJlZnJlc2hUb2tlblxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY29uZmlnU2VydmljZS51cGRhdGVDb25maWdGcm9tSW5wdXQodGhpcy5jb25maWdDb21wb25lbnQpO1xuICAgICAgICBhd2FpdCB0aGlzLmF1dGhTZXJ2aWNlLnNldFRva2VucyhcbiAgICAgICAgICB0aGlzLmNvbmZpZ0NvbXBvbmVudC5Ub2tlbixcbiAgICAgICAgICB0aGlzLmNvbmZpZ0NvbXBvbmVudC5SZWZyZXNoVG9rZW5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1snY3VycmVudExhbmd1YWdlSXNvJ10gJiZcbiAgICAgICFjaGFuZ2VzWydjdXJyZW50TGFuZ3VhZ2VJc28nXS5maXJzdENoYW5nZVxuICAgICkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIXRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzKSB7XG4gICAgICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5sYW5nU2VydmljZS5nZXRMYW5ndWFnZXMoKSkudGhlbigobGlzdCkgPT4ge1xuICAgICAgICAgICAgaWYgKGxpc3QgJiYgbGlzdC5pdGVtcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyA9IGxpc3QuaXRlbXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYXBwRGF0YVV1aWQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYXBwRGF0YSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25EYXRhU2VydmljZS5nZXRTdGVwcyhcbiAgICAgICAgICAgICAgdGhpcy5hcHBEYXRhVXVpZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChhcHBEYXRhICYmIGFwcERhdGEuZmlsbERhdGEpIHtcbiAgICAgICAgICAgICAgdGhpcy5maWxsRGF0YSA9IEpTT04ucGFyc2UoYXBwRGF0YS5maWxsRGF0YSk7XG4gICAgICAgICAgICAgIHRoaXMuYmxvY2tQcmV2aW91c1N0ZXAgPSBhcHBEYXRhLmJsb2NrUHJldmlvdXNTdGVwO1xuICAgICAgICAgICAgICBpZiAodGhpcy5maWxsRGF0YS5tZXRhZGF0YS5sYW5ndWFnZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvID0gdGhpcy5maWxsRGF0YS5tZXRhZGF0YS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZXRyaWV2aW5nIGFwcCBkYXRhJywgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmluaXRBc3luYygpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZEFwcERhdGEoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZTogeyBjb25maWd1cmF0aW9uOiBhbnk7IGZpbGxEYXRhPzogYW55IH0gPVxuICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgICB0aGlzLmZvcm1zU2VydmljZS5sb2FkRm9ybUJ5VXVpZCh0aGlzLmNvbmZpZ1V1aWQsIHRoaXMuZW52KVxuICAgICAgICApO1xuICAgICAgdGhpcy5hcHBNb2RlbCA9IEpTT04ucGFyc2UocmVzcG9uc2UuY29uZmlndXJhdGlvbik7XG4gICAgICB0aGlzLmZpbGxEYXRhID0gcmVzcG9uc2UuZmlsbERhdGEgPyBKU09OLnBhcnNlKHJlc3BvbnNlLmZpbGxEYXRhKSA6IG51bGw7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgZm9ybSBkYXRhJywgZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluaXRBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbUFsbEZpZWxkcygpO1xuICAgIGF3YWl0IHRoaXMuYnVpbGRGb3JtbHlBc3luYygpO1xuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVJlZmVyZW5jZUZpZWxkcyh0aGlzLmZvcm1seUNvbmZpZyk7XG4gICAgdGhpcy51cGRhdGVGb3JtbHlDb25maWcoKTtcbiAgICB0aGlzLmZvcm1seUNvbmZpZ1VwZGF0ZWQuZW1pdCgpO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIGFwcGxpY2F0aW9uTGFuZ3VhZ2VzKCk6IExhbmd1YWdlW10ge1xuICAgIHJldHVybiB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcz8uZmlsdGVyKChhKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBNb2RlbD8uZ2VuZXJhbERhdGE/Lmxhbmd1YWdlcz8uaW5kZXhPZihhLmlzbykgPj0gMDtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZXR1cm5GTGFnKGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5sYW5ndWFnZUZsYWdzLmZpbmQoKGwpID0+IGwuY29kZSA9PSBsYW5ndWFnZSk/Lmljb247XG4gIH1cblxuICBjaGFuZ2VMYW5ndWFnZSgkZXZlbnQ6IHN0cmluZykge1xuICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvID0gJGV2ZW50O1xuICAgIHRoaXMuYXBwbGljYXRpb25EYXRhU2VydmljZVxuICAgICAgLmNoYW5nZUxhbmd1YWdlKHRoaXMuYXBwRGF0YVV1aWQsIHRoaXMuY3VycmVudExhbmd1YWdlSXNvKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaW5pdEFzeW5jKCk7XG4gIH1cbiAgZ2V0TGFuZ3VhZ2VOYW1lKGxhbmd1YWdlSXNvOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxhbmd1YWdlID0gdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMuZmluZChcbiAgICAgIChsYW5nKSA9PiBsYW5nLmlzbyA9PT0gbGFuZ3VhZ2VJc29cbiAgICApO1xuICAgIHJldHVybiBsYW5ndWFnZSA/IGxhbmd1YWdlLm5hbWUgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRGb3JtbHlBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28pIHtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0TGFiZWxzKCk7XG4gICAgfVxuXG4gICAgLy8gU1RFUCAxOiBJbml0aWFsaXplIGZsdXggYW5kIG90aGVyIHByb3BlcnRpZXMgZmlyc3RcbiAgICB0aGlzLmZsdXggPSB0aGlzLmFwcE1vZGVsLmZsdXg7XG4gICAgdGhpcy5kaXNwbGF5ID0gdGhpcy5hcHBNb2RlbC5kaXNwbGF5O1xuICAgIHRoaXMuZGVzaWduID0gdGhpcy5hcHBNb2RlbC5nZW5lcmF0ZWRDc3M7XG4gICAgdGhpcy5nZW5lcmFsRGF0YSA9IHRoaXMuYXBwTW9kZWwuZ2VuZXJhbERhdGE7XG4gICAgdGhpcy5hZGRSZW5kZXJlZENzcygpO1xuXG4gICAgLy8gU1RFUCAyOiBMb2FkIEFMTCBkaWN0aW9uYXJpZXMgdXBmcm9udCAobm93IHRoYXQgZmx1eCBpcyBpbml0aWFsaXplZClcbiAgICBhd2FpdCB0aGlzLmxvYWRBbGxSZXF1aXJlZERpY3Rpb25hcmllcygpO1xuXG4gICAgLy8gU1RFUCAzOiBDb250aW51ZSB3aXRoIGV4aXN0aW5nIGZvcm0gYnVpbGRpbmcgbG9naWNcbiAgICB0aGlzLmZvcm1seUNvbmZpZyA9IFtdO1xuICAgIHRoaXMuZm9ybWx5Q29sbGVjdGluZ0ZpZWxkcyA9IFtdO1xuICAgIHRoaXMuZm9ybWx5UHJlc2VudGF0aW9uRmllbGRzID0gW107XG4gICAgdGhpcy5tb2RlbCA9IHt9O1xuICAgIHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuXG4gICAgaWYgKHRoaXMuZmlsbERhdGEpIHtcbiAgICAgIHRoaXMucG9wdWxhdGVDb250cm9sSWRzV2l0aFZhbHVlRGljdGlvbmFyeSgpO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgbW9kZWwgd2l0aCBkZWZhdWx0IHZhbHVlcyBpZiBubyBmaWxsRGF0YVxuICAgIGlmICghdGhpcy5maWxsRGF0YSkge1xuICAgICAgdGhpcy5tb2RlbCA9IE1vZGVsUG9wdWxhdGlvbkhlbHBlci5hcHBseURlZmF1bHRzVG9Nb2RlbChcbiAgICAgICAgdGhpcy5mbHV4LFxuICAgICAgICB0aGlzLmRpY3Rpb25hcnlNYXAsXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBvcHVsYXRlTW9kZWxXaXRoRmlsbERhdGEodGhpcy5maWxsRGF0YSk7XG4gICAgICB0aGlzLnBvcHVsYXRlQ29udHJvbElkc1dpdGhWYWx1ZURpY3Rpb25hcnkoKTtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh0aGlzLm1vZGVsKTtcbiAgICBhd2FpdCB0aGlzLmJ1aWxkRm9ybWx5Q29uZmlnQXN5bmMoKTtcblxuICAgIC8vIEluaXRpYWxpemUgcmVmZXJlbmNlcyBmb3IgZGVmYXVsdCB2YWx1ZXNcbiAgICBpZiAoIXRoaXMuZmlsbERhdGEpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVJlZmVyZW5jZUZpZWxkcyh0aGlzLmZvcm1seUNvbmZpZyk7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoc3RhcnRXaXRoKG51bGwpLCBwYWlyd2lzZSgpKVxuICAgICAgLnN1YnNjcmliZSgoW3ByZXYsIG5leHRdOiBbYW55LCBhbnldKSA9PlxuICAgICAgICB0aGlzLmhhbmRsZUZvcm1WYWx1ZUNoYW5nZShbcHJldiwgbmV4dF0pXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGb3JtVmFsdWVDaGFuZ2UoW3ByZXYsIG5leHRdOiBbYW55LCBhbnldKSB7XG4gICAgY29uc3QgY3VycmVudExhbmd1YWdlSWQgPSBVdGlscy5maW5kTGFuZ3VhZ2VJZEJ5SXNvKFxuICAgICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMsXG4gICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gbmV4dCkge1xuICAgICAgaWYgKG5leHRba2V5XT8udmFsdWVUcmFuc2xhdGlvbnMpIHtcbiAgICAgICAgdmFyIHMgPSBKU09OLnN0cmluZ2lmeShuZXh0W2tleV0pO1xuICAgICAgICB2YXIgcmVwbGFjZWQgPSBzLnJlcGxhY2UoL1widmFsdWVUcmFuc2xhdGlvbnNcIjovZywgJ1widHJhbnNsYXRpb25zXCI6Jyk7XG4gICAgICAgIG5leHRba2V5XSA9IEpTT04ucGFyc2UocmVwbGFjZWQpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmZvcm1seVByZXNlbnRhdGlvbkZpZWxkcy5maWx0ZXIoXG4gICAgICAgIChpKSA9PiBpLnByb3BzICYmIGkucHJvcHNbJ2NvbGxlY3Rpb25Db250cm9sSWRlbnRpZmllciddID09PSBrZXlcbiAgICAgICk7XG4gICAgICBpZiAoZmllbGRzICYmIGZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgICAgICAgIHN3aXRjaCAodHlwZW9mIG5leHRba2V5XSkge1xuICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAgIHZhbHVlID0gbmV4dFtrZXldID8gJyZjaGVjazsnIDogJyZjcm9zczsnO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgaWYgKG5leHRba2V5XT8udHJhbnNsYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSBuZXh0W2tleV0udHJhbnNsYXRpb25zLmZpbmQoXG4gICAgICAgICAgICAgICAgICAodHJhbnNsYXRpb246IHsgbGFuZ3VhZ2VJZDogYW55IH0pID0+XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uLmxhbmd1YWdlSWQgPT09IGN1cnJlbnRMYW5ndWFnZUlkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRyYW5zbGF0aW9uID8gdHJhbnNsYXRpb24udmFsdWUgOiBudWxsO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbmV4dFtrZXldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZC5kZWZhdWx0VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdGVwRGljdGlvbmFyeURlcGVuZGVudElkcy5maW5kKChhKSA9PiBhID09IGtleSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG5leHRba2V5XT8uaWQgJiZcbiAgICAgICAgICAocHJldiA9PSBudWxsIHx8IHByZXZba2V5XT8uaWQgIT09IG5leHRba2V5XT8uaWQpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZm9ybWx5Q29uZmlnWzBdLmZpZWxkR3JvdXAgPSB0aGlzLmdldEZvcm1seUZpbHRlcmVkU3RlcHMoKTtcbiAgICAgICAgICB2YXIgZmlsdGVyZWRTdGVwc0lkZW50aWZpZXJzID0gdGhpcy5mb3JtbHlDb25maWdbMF0uZmllbGRHcm91cC5tYXAoXG4gICAgICAgICAgICAoZikgPT4gZi5wcm9wcz8uWydzdGVwSWQnXVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgdmlzaWJsZVN0ZXBzID0gdGhpcy5hY3Rpb25TdGVwSGFuZGxlci5maWx0ZXJWaXNpYmxlU3RlcHMoXG4gICAgICAgICAgICB0aGlzLmZsdXgsXG4gICAgICAgICAgICBmaWx0ZXJlZFN0ZXBzSWRlbnRpZmllcnNcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMudXBkYXRlRm9ybWx5Q29uZmlnKCk7XG4gICAgICAgICAgdGhpcy52aXNpYmxlRmllbGRzVXBkYXRlZC5lbWl0KHZpc2libGVTdGVwcyk7XG4gICAgICAgICAgdGhpcy5mb3JtbHlDb25maWdVcGRhdGVkLmVtaXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGFiZWxzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5sYWJlbFNlcnZpY2VcbiAgICAgICAgLmdldExhYmVscyh0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbywgZmFsc2UpXG4gICAgICAgIC5zdWJzY3JpYmUoKGwpID0+IHtcbiAgICAgICAgICB0aGlzLmxhYmVscyA9IGw7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcG9wdWxhdGVDb250cm9sSWRzV2l0aFZhbHVlRGljdGlvbmFyeSgpIHtcbiAgICB2YXIgY3VycmVudExhbmd1YWdlSWQgPSB0aGlzLmdldEN1cnJlbnRMYW5ndWFnZUlkKCk7XG4gICAgY29uc3QgY29udHJvbElkc1dpdGhWYWx1ZXMgPSB0aGlzLmZpbGxEYXRhLmZsdXhcbiAgICAgIC5mbGF0TWFwKChzdGVwOiB7IHNlY3Rpb25zOiB7IGNvbnRyb2xzOiBhbnlbXSB9W10gfSkgPT5cbiAgICAgICAgc3RlcC5zZWN0aW9ucy5mbGF0TWFwKChzZWN0aW9uOiB7IGNvbnRyb2xzOiBhbnlbXSB9KSA9PlxuICAgICAgICAgIHNlY3Rpb24uY29udHJvbHNcbiAgICAgICAgICAgIC5maWx0ZXIoKGNvbnRyb2wpID0+IGNvbnRyb2wuY29udHJvbElkICYmIGNvbnRyb2wuZmlsbFZhbHVlKVxuICAgICAgICAgICAgLm1hcCgoY29udHJvbCkgPT4gKHtcbiAgICAgICAgICAgICAgY29udHJvbElkOiBjb250cm9sLmNvbnRyb2xJZCxcbiAgICAgICAgICAgICAgZmlsbFZhbHVlOiBjb250cm9sLmZpbGxWYWx1ZSxcbiAgICAgICAgICAgICAgZmlsbFZhbHVlSWQ6IGNvbnRyb2wuZmlsbFZhbHVlSWQsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKFxuICAgICAgICAgIGRpY3Rpb25hcnk6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuICAgICAgICAgIHsgY29udHJvbElkLCBmaWxsVmFsdWUsIGZpbGxWYWx1ZUlkIH06IGFueVxuICAgICAgICApID0+IHtcbiAgICAgICAgICBpZiAoZmlsbFZhbHVlSWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgZGljdF0gb2YgdGhpcy5kaWN0aW9uYXJ5TWFwLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRpY3QudmFsdWVzPy5maW5kKCh2KSA9PiB2LmlkID09IGZpbGxWYWx1ZUlkKTtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSB2YWx1ZS52YWx1ZVRyYW5zbGF0aW9ucy5maW5kKFxuICAgICAgICAgICAgICAgICAgKHQpID0+IHQubGFuZ3VhZ2VJZCA9PSBjdXJyZW50TGFuZ3VhZ2VJZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5W2NvbnRyb2xJZF0gPSB0cmFuc2xhdGlvbi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaWN0aW9uYXJ5W2NvbnRyb2xJZF0gPSBmaWxsVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBkaWN0aW9uYXJ5O1xuICAgICAgICB9LFxuICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICAgICApO1xuICAgIHRoaXMuY29udHJvbElkc1dpdGhWYWx1ZXMgPSBjb250cm9sSWRzV2l0aFZhbHVlcztcbiAgfVxuICBwcml2YXRlIGdldEN1cnJlbnRMYW5ndWFnZUlkKCk6IG51bWJlciB7XG4gICAgY29uc3QgY3VycmVudExhbmd1YWdlSWQgPSBVdGlscy5maW5kTGFuZ3VhZ2VJZEJ5SXNvKFxuICAgICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMsXG4gICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICk7XG4gICAgcmV0dXJuIGN1cnJlbnRMYW5ndWFnZUlkO1xuICB9XG4gIHByaXZhdGUgYXN5bmMgYnVpbGRGb3JtbHlDb25maWdBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0ZXBzU2V0dGluZ3MgPSB7XG4gICAgICBzaG93Q291bnRlcjogdGhpcy5zaG93RGlzcGxheU1vZGVcbiAgICAgICAgPyBmYWxzZVxuICAgICAgICA6IHRoaXMuZ2VuZXJhbERhdGEuc2hvd0NvdW50ZXJTdGVwLFxuICAgICAgc2hvd0xhYmVsczogdGhpcy5zaG93RGlzcGxheU1vZGUgPyBmYWxzZSA6IHRoaXMuZ2VuZXJhbERhdGEuc2hvd05hbWVTdGVwLFxuICAgICAgc2hvd0FsbFN0ZXBzOiB0aGlzLnNob3dEaXNwbGF5TW9kZVxuICAgICAgICA/IGZhbHNlXG4gICAgICAgIDogdGhpcy5nZW5lcmFsRGF0YS5zaG93QWxsU3RlcHMsXG4gICAgICBzaG93UHJvZ3Jlc3NCYXI6XG4gICAgICAgIHRoaXMuZ2VuZXJhbERhdGEuc2hvd1Byb2dyZXNzQmFyICYmXG4gICAgICAgICAgdGhpcy5nZW5lcmFsRGF0YS5zaG93QWxsU3RlcHMgPT0gZmFsc2VcbiAgICAgICAgICA/IHRydWVcbiAgICAgICAgICA6IGZhbHNlLFxuICAgIH07XG5cbiAgICB0aGlzLmZvcm1seUFsbFN0ZXBzID0gYXdhaXQgdGhpcy5idWlsZEZvcm1seUZpZWxkR3JvdXBBc3luYygpO1xuICAgIHZhciBoYXNEaWN0aW9uYXJ5RGVwZW5kZW50U3RlcHMgPSB0aGlzLmZvcm1seUFsbFN0ZXBzLnNvbWUoXG4gICAgICAoZikgPT4gZi5wcm9wcz8uWydkZXBlbmRlbnREaWN0aW9uYXJ5J10/LmlzRGljdGlvbmFyeURlcGVuZGVudFxuICAgICk7XG5cbiAgICB2YXIgZm9ybWx5RmlsdGVyZWRTdGVwcyA9IHRoaXMuZ2V0Rm9ybWx5RmlsdGVyZWRTdGVwcygpO1xuICAgIHZhciBmaWx0ZXJlZFN0ZXBzSWRlbnRpZmllcnMgPSBmb3JtbHlGaWx0ZXJlZFN0ZXBzLm1hcChcbiAgICAgIChmKSA9PiBmLnByb3BzPy5bJ3N0ZXBJZCddXG4gICAgKTtcbiAgICAvLyBHZXQgdmlzaWJsZSBzdGVwcyBmb3IgYWNjdXJhdGUgc3RlcCBjb3VudGluZ1xuICAgIGNvbnN0IHZpc2libGVTdGVwcyA9IHRoaXMuYWN0aW9uU3RlcEhhbmRsZXIuZmlsdGVyVmlzaWJsZVN0ZXBzKHRoaXMuZmx1eCk7XG4gICAgY29uc3QgZmlsdGVyZWRWaXNpYmxlU3RlcHMgPSB0aGlzLmFjdGlvblN0ZXBIYW5kbGVyLmZpbHRlclZpc2libGVTdGVwcyhcbiAgICAgIHRoaXMuZmx1eCxcbiAgICAgIGZpbHRlcmVkU3RlcHNJZGVudGlmaWVyc1xuICAgICk7XG5cbiAgICB0aGlzLmZvcm1seUNvbmZpZyA9IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3N0ZXBwZXInLFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIGFwcERhdGFJZDogdGhpcy5maWxsRGF0YVxuICAgICAgICAgICAgPyB0aGlzLmZpbGxEYXRhPy5tZXRhZGF0YT8uYXBwRGF0YUlkXG4gICAgICAgICAgICA6IHRoaXMuYXBwRGF0YVV1aWQsXG4gICAgICAgICAgZGVzaWduOiB0aGlzLmRlc2lnbixcbiAgICAgICAgICBhcHBsaWNhdGlvbklkOiB0aGlzLmFwcE1vZGVsLmFwcGxpY2F0aW9uVXVpZCxcbiAgICAgICAgICBmbHV4OiB2aXNpYmxlU3RlcHMsIC8vIFBhc3Mgb25seSB2aXNpYmxlIHN0ZXBzIHRvIHN0ZXBwZXJcbiAgICAgICAgICBmaWx0ZXJlZEZsdXg6IGZpbHRlcmVkVmlzaWJsZVN0ZXBzLFxuICAgICAgICAgIGlzRGlzcGxheU1vZGU6IHRoaXMuc2hvd0Rpc3BsYXlNb2RlLFxuICAgICAgICAgIGZpbGxEYXRhOiB0aGlzLmZpbGxEYXRhLFxuICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZTogdGhpcy5hcHBNb2RlbC5nZW5lcmFsRGF0YS5kZWZhdWx0TGFuZ3VhZ2UsXG4gICAgICAgICAgZGlzcGxheTogdGhpcy5kaXNwbGF5LFxuICAgICAgICAgIGRlc2lnbkNvbmZpZzoge1xuICAgICAgICAgICAgYnV0dG9uc1ZlcnRpY2FsUG9zaXRpb246XG4gICAgICAgICAgICAgIHRoaXMuYXBwTW9kZWwuZGVzaWduLmJ1dHRvbnNWZXJ0aWNhbFBvc2l0aW9uLFxuICAgICAgICAgICAgYnV0dG9uc0hvcml6b250YWxQb3NpdGlvbjpcbiAgICAgICAgICAgICAgdGhpcy5hcHBNb2RlbC5kZXNpZ24uYnV0dG9uc0hvcml6b250YWxQb3NpdGlvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0ZXBzU2V0dGluZ3M6IHRoaXMuc3RlcHNTZXR0aW5ncyxcbiAgICAgICAgICBtZXRhRGF0YTogdGhpcy5maWxsRGF0YT8ubWV0YWRhdGEsXG4gICAgICAgICAgZGVtb01vZGU6IHRoaXMuaXNEZW1vTW9kZSxcbiAgICAgICAgICBpc0RlYnVnOiB0aGlzLmlzRGVidWcsXG4gICAgICAgICAgbm9CdXR0b25zSW5WaWV3OiB0aGlzLm5vQnV0dG9uc0luVmlldyxcbiAgICAgICAgICBibG9ja1ByZXZpb3VzU3RlcDogdGhpcy5ibG9ja1ByZXZpb3VzU3RlcCxcbiAgICAgICAgICBlbnY6IHRoaXMuZW52LFxuICAgICAgICAgIGhhc0RpY3Rpb25hcnlEZXBlbmRlbnRTdGVwczogaGFzRGljdGlvbmFyeURlcGVuZGVudFN0ZXBzLFxuICAgICAgICAgIGhhc0FjdGlvblN0ZXBzOiB0aGlzLmZsdXguc29tZSgoc3RlcCkgPT5cbiAgICAgICAgICAgIHRoaXMuYWN0aW9uU3RlcEhhbmRsZXIuaXNBY3Rpb25TdGVwKHN0ZXApXG4gICAgICAgICAgKSwgLy8gSW5kaWNhdGUgaWYgdGhlcmUgYXJlIGFjdGlvbiBzdGVwc1xuICAgICAgICAgIGNvbXBsZXRpb25FdmVudDogKCkgPT4gdGhpcy5vbkNvbXBsZXRpb24oKSxcbiAgICAgICAgICBvblNlbGVjdGVkUGFnZUNoYW5naW5nOiAoaW5kZXg6IG51bWJlcikgPT5cbiAgICAgICAgICAgIHRoaXMub25TZWxlY3RlZFBhZ2VDaGFuZ2luZyhpbmRleCksXG4gICAgICAgICAgb25TZWxlY3RlZFBhZ2VDaGFuZ2VkOiAoaW5kZXg6IG51bWJlcikgPT5cbiAgICAgICAgICAgIHRoaXMub25TZWxlY3RlZFBhZ2VDaGFuZ2VkKGluZGV4KSxcbiAgICAgICAgfSxcbiAgICAgICAgZmllbGRHcm91cDogZm9ybWx5RmlsdGVyZWRTdGVwcyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIC8vIEZvciBkaXNwbGF5IG1vZGUsIHBvcHVsYXRlIHZhbHVlcyBpbW1lZGlhdGVseSBhZnRlciBjb25maWcgaXMgYnVpbHRcbiAgICBpZiAodGhpcy5zaG93RGlzcGxheU1vZGUgJiYgdGhpcy5mb3JtbHlDb25maWdbMF0/LmZpZWxkR3JvdXApIHtcbiAgICAgIGZvciAoY29uc3Qgc3RlcCBvZiB0aGlzLmZvcm1seUNvbmZpZ1swXS5maWVsZEdyb3VwKSB7XG4gICAgICAgIHRoaXMuc2V0UHJlc2VudGF0aW9uQ29udHJvbFZhbHVlc1JlY3Vyc2l2ZWx5KHN0ZXApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb25TZWxlY3RlZFBhZ2VDaGFuZ2luZyhzdGVwVHJhbnNpdGlvbjogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbGV0IGZyb21JbmRleDogbnVtYmVyO1xuICAgIGxldCB0b0luZGV4OiBudW1iZXI7XG4gICAgbGV0IGNhbGxiYWNrOiAoKSA9PiB2b2lkID0gKCkgPT4geyB9O1xuXG4gICAgaWYgKHR5cGVvZiBzdGVwVHJhbnNpdGlvbiA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRvSW5kZXggPSBzdGVwVHJhbnNpdGlvbjtcbiAgICAgIGZyb21JbmRleCA9IHRoaXMuYWN0aXZlU3RlcDtcbiAgICB9IGVsc2Uge1xuICAgICAgZnJvbUluZGV4ID0gc3RlcFRyYW5zaXRpb24uZnJvbTtcbiAgICAgIHRvSW5kZXggPSBzdGVwVHJhbnNpdGlvbi50bztcbiAgICAgIGNhbGxiYWNrID0gc3RlcFRyYW5zaXRpb24uY2FsbGJhY2sgfHwgKCgpID0+IHsgfSk7XG4gICAgfVxuXG4gICAgbGV0IGFjdGlvbnNFeGVjdXRlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRvSW5kZXggPiBmcm9tSW5kZXgpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAn4p6h77iPIE1vdmluZyBmb3J3YXJkIC0gZXhlY3V0aW5nIGFjdGlvbiBzdGVwcyBhZnRlciBjdXJyZW50IHN0ZXAnXG4gICAgICApO1xuICAgICAgYWN0aW9uc0V4ZWN1dGVkID0gYXdhaXQgdGhpcy5leGVjdXRlQWN0aW9uU3RlcHNBZnRlckN1cnJlbnRTdGVwKFxuICAgICAgICBmcm9tSW5kZXhcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0b0luZGV4IDwgZnJvbUluZGV4KSB7XG4gICAgICBjb25zb2xlLmxvZygn4qyF77iPIE1vdmluZyBiYWNrd2FyZCAtIG5vIGFjdGlvbiBleGVjdXRpb24gbmVlZGVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCfwn5SEIFN0YXlpbmcgb24gc2FtZSBzdGVwIC0gbm8gYWN0aW9uIGV4ZWN1dGlvbiBuZWVkZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGl2ZVN0ZXAgPSB0b0luZGV4O1xuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb25zRXhlY3V0ZWQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVBY3Rpb25TdGVwc0FmdGVyQ3VycmVudFN0ZXAoXG4gICAgY3VycmVudFN0ZXBJbmRleDogbnVtYmVyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmFjdGlvblN0ZXBIYW5kbGVyLmlzRXhlY3V0aW5nQWN0aW9ucykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBmaWx0ZXJlZFN0ZXBzID0gdGhpcy5mbHV4LmZpbHRlcigocykgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBzLmRlcGVuZGVudERpY3Rpb25hcnkgJiZcbiAgICAgICAgcy5kZXBlbmRlbnREaWN0aW9uYXJ5LmlzRGljdGlvbmFyeURlcGVuZGVudFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsVmFsdWUgPSB0aGlzLm1vZGVsW3MuZGVwZW5kZW50RGljdGlvbmFyeS5kaWN0aW9uYXJ5Q29udHJvbElkZW50aWZpZXJdO1xuICAgICAgICAvLyBTa2lwIGRlcGVuZGVuY3kgY2hlY2sgZm9yIG11bHRpcGxlIHNlbGVjdGlvbiAoYXJyYXkpXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGVsVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZSA9IG1vZGVsVmFsdWU/LmlkO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgc2VsZWN0ZWRWYWx1ZSAmJlxuICAgICAgICAgIHMuZGVwZW5kZW50RGljdGlvbmFyeS5kZXBlbmRlbnRWYWx1ZUlkcy5pbmNsdWRlcyhzZWxlY3RlZFZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGFjdGlvblN0ZXBzID0gdGhpcy5hY3Rpb25TdGVwSGFuZGxlci5nZXRBY3Rpb25TdGVwc0F0SW5kZXgoXG4gICAgICBmaWx0ZXJlZFN0ZXBzLFxuICAgICAgY3VycmVudFN0ZXBJbmRleFxuICAgICk7XG5cbiAgICBpZiAoYWN0aW9uU3RlcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBpZiAoIXRoaXMuYXBwRGF0YVV1aWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgdGhlIHNhdmluZyBmbGFnIGJlZm9yZSBzdGFydGluZyBhY3Rpb25zXG4gICAgICB0aGlzLmlzU2F2aW5nQWZ0ZXJBY3Rpb25zID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hY3Rpb25TdGVwSGFuZGxlci5leGVjdXRlQWN0aW9uU3RlcHMoXG4gICAgICAgIGFjdGlvblN0ZXBzLFxuICAgICAgICB0aGlzLmFwcERhdGFVdWlkLFxuICAgICAgICAoc3RlcCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxvYWRpbmdNZXNzYWdlID0gVXRpbHMuZmluZFRyYW5zbGF0aW9uSW5mbyhcbiAgICAgICAgICAgICdsb2FkaW5nTWVzc2FnZVRyYW5zbGF0aW9ucycsXG4gICAgICAgICAgICBzdGVwLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdNZXNzYWdlID0gbG9hZGluZ01lc3NhZ2UgfHwgbnVsbDtcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCfinIUgQWN0aW9uIHN0ZXBzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICAvLyBLZWVwIGxvYWRpbmcgc3RhdGUgdHJ1ZSAtIGl0IHdpbGwgYmUgY2xlYXJlZCBhZnRlciBzYXZlQXBwRGF0YVN0ZXAgY29tcGxldGVzXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcign4p2MIEFjdGlvbiBzdGVwcyBleGVjdXRpb24gZmFpbGVkOicsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgIHRoaXMuaXNTYXZpbmdBZnRlckFjdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCfinYwgRXJyb3IgZXhlY3V0aW5nIGFjdGlvbiBzdGVwczonLCBlcnJvcik7XG4gICAgICB0aGlzLmlzU2F2aW5nQWZ0ZXJBY3Rpb25zID0gZmFsc2U7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25TZWxlY3RlZFBhZ2VDaGFuZ2VkKGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5mb3JtbHlDb25maWdbMF0uZmllbGRHcm91cCkge1xuICAgICAgdmFyIHNlbGVjdGVkUGFnZSA9IHRoaXMuZm9ybWx5Q29uZmlnWzBdLmZpZWxkR3JvdXBbaW5kZXhdO1xuICAgICAgdGhpcy5zZXRQcmVzZW50YXRpb25Db250cm9sVmFsdWVzUmVjdXJzaXZlbHkoc2VsZWN0ZWRQYWdlKTtcblxuICAgICAgTW9kZWxQb3B1bGF0aW9uSGVscGVyLmFwcGx5UHJlY29tcGxldGlvblRvTW9kZWwodGhpcy5tb2RlbCwgdGhpcy5mbHV4KTtcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0UHJlc2VudGF0aW9uQ29udHJvbFZhbHVlc1JlY3Vyc2l2ZWx5KGZjPzogYW55KSB7XG4gICAgZmM/LmZpZWxkR3JvdXA/LmZvckVhY2goKGZnOiBhbnkpID0+IHtcbiAgICAgIGlmIChmZy5wcm9wcyAmJiBmZy5wcm9wc1snaXNEaXNwbGF5TW9kZSddID09PSB0cnVlKSB7XG4gICAgICAgIHZhciBtZXRob2RGaWVsZElkID0gZmcucHJvcHNbJ2FwaU1ldGhvZEZpZWxkSWQnXTtcbiAgICAgICAgaWYgKG1ldGhvZEZpZWxkSWQpIHtcbiAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLmZpbmRJbkFwaUNhbGxzUmVzcG9uc2VzKG1ldGhvZEZpZWxkSWQpO1xuICAgICAgICAgIGZnLmRlZmF1bHRWYWx1ZSA9IHZhbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgYXNzb2NpYXRlZENvbnRyb2xJZCA9IGZnLnByb3BzWydjb2xsZWN0aW9uQ29udHJvbElkZW50aWZpZXInXTtcbiAgICAgICAgICBpZiAoYXNzb2NpYXRlZENvbnRyb2xJZCkge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPVxuICAgICAgICAgICAgICB0aGlzLmZpbmRDb250cm9sSW5GaWxsRGF0YUNvbnRyb2xzKGFzc29jaWF0ZWRDb250cm9sSWQpO1xuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIC8vIE11bHRpcGxlIHNlbGVjdGlvbiAtIHNob3cgdmFsdWVzIHdpdGggY29tbWFcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVJZHNBcnJheSA9IGZvdW5kLmZpbGxWYWx1ZUlkcyB8fCBmb3VuZC5maWxsdmFsdWVpZHMgfHwgZm91bmQuRmlsbFZhbHVlSWRzO1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZXNBcnJheSA9IGZvdW5kLmZpbGxWYWx1ZXMgfHwgZm91bmQuZmlsbHZhbHVlcyB8fCBmb3VuZC5GaWxsVmFsdWVzO1xuXG4gICAgICAgICAgICAgIGlmICh2YWx1ZUlkc0FycmF5ICYmIEFycmF5LmlzQXJyYXkodmFsdWVJZHNBcnJheSkgJiYgdmFsdWVJZHNBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudExhbmd1YWdlSWQgPSB0aGlzLmdldEN1cnJlbnRMYW5ndWFnZUlkKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzcGxheVZhbHVlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlSWQgb2YgdmFsdWVJZHNBcnJheSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbnVtZXJpY1ZhbHVlSWQgPSB0eXBlb2YgdmFsdWVJZCA9PT0gJ3N0cmluZycgPyBwYXJzZUludCh2YWx1ZUlkLCAxMCkgOiB2YWx1ZUlkO1xuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBkaWN0XSBvZiB0aGlzLmRpY3Rpb25hcnlNYXAuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGljdC52YWx1ZXM/LmZpbmQoKHYpID0+IHYuaWQgPT09IG51bWVyaWNWYWx1ZUlkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSB2YWx1ZS52YWx1ZVRyYW5zbGF0aW9ucy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHQpID0+IHQubGFuZ3VhZ2VJZCA9PSBjdXJyZW50TGFuZ3VhZ2VJZFxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgZGlzcGxheVZhbHVlcy5wdXNoKHRyYW5zbGF0aW9uPy52YWx1ZSB8fCB2YWx1ZS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGlzcGxheVZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBmZy5kZWZhdWx0VmFsdWUgPSBkaXNwbGF5VmFsdWVzLmpvaW4oJywgJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlc0FycmF5ICYmIEFycmF5LmlzQXJyYXkodmFsdWVzQXJyYXkpICYmIHZhbHVlc0FycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBGYWxsYmFjazogdXNlIGZpbGxWYWx1ZXMgYXJyYXkgZGlyZWN0bHlcbiAgICAgICAgICAgICAgICBmZy5kZWZhdWx0VmFsdWUgPSB2YWx1ZXNBcnJheS5qb2luKCcsICcpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvdW5kLmZpbGxWYWx1ZUlkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudExhbmd1YWdlSWQgPSB0aGlzLmdldEN1cnJlbnRMYW5ndWFnZUlkKCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBkaWN0XSBvZiB0aGlzLmRpY3Rpb25hcnlNYXAuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRpY3QudmFsdWVzPy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAodikgPT4gdi5pZCA9PSBmb3VuZC5maWxsVmFsdWVJZFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHZhbHVlLnZhbHVlVHJhbnNsYXRpb25zLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgKHQpID0+IHQubGFuZ3VhZ2VJZCA9PSBjdXJyZW50TGFuZ3VhZ2VJZFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICBmZy5kZWZhdWx0VmFsdWUgPSB0cmFuc2xhdGlvbi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmZy5kZWZhdWx0VmFsdWUgPSBmb3VuZC5maWxsVmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZmluZEluQXBpQ2FsbHNSZXNwb25zZXMoYXNzb2NpYXRlZENvbnRyb2xJZCk7XG4gICAgICAgICAgICAgIGZnLmRlZmF1bHRWYWx1ZSA9IHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0UHJlc2VudGF0aW9uQ29udHJvbFZhbHVlc1JlY3Vyc2l2ZWx5KGZnKTtcbiAgICAgIH1cbiAgICAgIGlmIChmZy5wcm9wc1snY2RyJ10pIHtcbiAgICAgICAgZmcucHJvcHNbJ2NkciddLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZENvbnRyb2xJbkZpbGxEYXRhQ29udHJvbHMoY29udHJvbElkOiBzdHJpbmcpOiBhbnkge1xuICAgIGxldCBjb250cm9sRGF0YTogYW55ID0gdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmZpbGxEYXRhKSB7XG4gICAgICB0aGlzLmZpbGxEYXRhLmZsdXg/LmZvckVhY2goKGY6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIWNvbnRyb2xEYXRhKSB7XG4gICAgICAgICAgZi5zZWN0aW9ucz8uZm9yRWFjaCgoczogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWNvbnRyb2xEYXRhKSB7XG4gICAgICAgICAgICAgIGNvbnRyb2xEYXRhID0gcy5jb250cm9scz8uZmluZChcbiAgICAgICAgICAgICAgICAoYzogYW55KSA9PiBjLmNvbnRyb2xJZCA9PT0gY29udHJvbElkXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChjb250cm9sRGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sRGF0YTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRyb2xEYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kSW5BcGlDYWxsc1Jlc3BvbnNlcyhmaWVsZElkOiBzdHJpbmcpOiBhbnkge1xuICAgIGxldCBmb3VuZFZhbHVlOiBhbnkgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMuZmlsbERhdGEpIHtcbiAgICAgIHRoaXMuZmlsbERhdGEuQVBJQ2FsbHM/LmZvckVhY2goKGFwaTogYW55KSA9PiB7XG4gICAgICAgIGlmICghZm91bmRWYWx1ZSkge1xuICAgICAgICAgIGFwaS5NZXRob2RzPy5mb3JFYWNoKChtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICghZm91bmRWYWx1ZSkge1xuICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IG0uRmllbGRzPy5bZmllbGRJZF07XG4gICAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICAgIGZvdW5kVmFsdWUgPSBmb3VuZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZvdW5kVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldEZvcm1seUZpbHRlcmVkU3RlcHMoKSB7XG4gICAgbGV0IHN0ZXBzID0gdGhpcy5mb3JtbHlBbGxTdGVwcy5maWx0ZXIoKHMpID0+IHtcbiAgICAgIGlmIChzLnByb3BzICYmIHMucHJvcHNbJ2RlcGVuZGVudERpY3Rpb25hcnknXSkge1xuICAgICAgICBjb25zdCBkZXBEaWN0ID0gcy5wcm9wc1tcbiAgICAgICAgICAnZGVwZW5kZW50RGljdGlvbmFyeSdcbiAgICAgICAgXSBhcyBEZXBlbmRlbnREaWN0aW9uYXJ5RGF0YTtcbiAgICAgICAgaWYgKGRlcERpY3QgJiYgZGVwRGljdC5pc0RpY3Rpb25hcnlEZXBlbmRlbnQpIHtcbiAgICAgICAgICBjb25zdCBtb2RlbFZhbHVlID0gdGhpcy5tb2RlbFtkZXBEaWN0LmRpY3Rpb25hcnlDb250cm9sSWRlbnRpZmllcl07XG4gICAgICAgICAgLy8gU2tpcCBkZXBlbmRlbmN5IGNoZWNrIGZvciBtdWx0aXBsZSBzZWxlY3Rpb24gKGFycmF5KVxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGVsVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZSA9IG1vZGVsVmFsdWU/LmlkO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHNlbGVjdGVkVmFsdWUgJiZcbiAgICAgICAgICAgIGRlcERpY3QuZGVwZW5kZW50VmFsdWVJZHMuaW5jbHVkZXMoc2VsZWN0ZWRWYWx1ZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0ZXBzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBidWlsZEZvcm1seUZpZWxkR3JvdXBBc3luYygpOiBQcm9taXNlPEZvcm1seUZpZWxkQ29uZmlnW10+IHtcbiAgICB0aGlzLnN0ZXBEaWN0aW9uYXJ5RGVwZW5kZW50SWRzID0gW107XG4gICAgaWYgKHRoaXMuc2hvd0Rpc3BsYXlNb2RlKSB7XG4gICAgICBjb25zdCBzdGVwID0gYXdhaXQgdGhpcy5idWlkRGlzcGxheVN0ZXAoKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW3N0ZXBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmlsdGVyIG91dCBhY3Rpb24gc3RlcHMgZnJvbSB2aXNpYmxlIHN0ZXBzXG4gICAgICBjb25zdCB2aXNpYmxlU3RlcHMgPSB0aGlzLmFjdGlvblN0ZXBIYW5kbGVyLmZpbHRlclZpc2libGVTdGVwcyh0aGlzLmZsdXgpO1xuICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICB2aXNpYmxlU3RlcHMubWFwKChzdGVwKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRGb3JtbHlGaWVsZENvbmZpZ0FzeW5jKHN0ZXApO1xuICAgICAgICB9KSA/PyBbXVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkRm9ybWx5RmllbGRDb25maWdBc3luYyhcbiAgICBzdGVwOiBTdGVwRGF0YVxuICApOiBQcm9taXNlPEZvcm1seUZpZWxkQ29uZmlnPiB7XG4gICAgbGV0IHN0ZXBGb3JtbHlDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnID0ge307XG5cbiAgICBpZiAoc3RlcC50eXBlICE9PSBGbHV4VHlwZS5DdXN0b20gJiYgc3RlcC50eXBlICE9PSBGbHV4VHlwZS5GaW5hbCkge1xuICAgICAgc3RlcEZvcm1seUNvbmZpZyA9IGF3YWl0IHRoaXMuYnVpbGRTeXN0ZW1GaWVsZEZvcm1seUNvbmZpZyhzdGVwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RlcEZvcm1seUNvbmZpZyA9IHtcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBsYWJlbDogc3RlcC5uYW1lLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdGVwLm5hbWUsXG4gICAgICAgICAgYnV0dG9uczogdGhpcy5jb25zdHJ1Y3RCdXR0b25zKHN0ZXAuYnV0dG9ucyksXG4gICAgICAgICAgZGVwZW5kZW50RGljdGlvbmFyeTogc3RlcC5kZXBlbmRlbnREaWN0aW9uYXJ5LFxuICAgICAgICAgIHN0ZXBJZDogc3RlcC5pZGVudGlmaWVyLFxuICAgICAgICB9LFxuICAgICAgICBmaWVsZEdyb3VwOiBhd2FpdCB0aGlzLmJ1aWxkU2VjdGlvbnNGaWVsZEdyb3VwQXN5bmMoXG4gICAgICAgICAgc3RlcCxcbiAgICAgICAgICBzdGVwLnNlY3Rpb25zXG4gICAgICAgICksXG4gICAgICB9O1xuXG4gICAgICBpZiAoc3RlcC50cmFuc2xhdGlvbnMpIHtcbiAgICAgICAgc3RlcEZvcm1seUNvbmZpZy5wcm9wcyFbJ2xhYmVsJ10gPSBVdGlscy5maW5kVHJhbnNsYXRpb25JbmZvKFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgICBzdGVwLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICApO1xuICAgICAgICBzdGVwRm9ybWx5Q29uZmlnLnByb3BzIVsnZGVzY3JpcHRpb24nXSA9IFV0aWxzLmZpbmRUcmFuc2xhdGlvbkluZm8oXG4gICAgICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgICBzdGVwLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGVwRm9ybWx5Q29uZmlnICYmIHN0ZXBGb3JtbHlDb25maWcucHJvcHMpIHtcbiAgICAgIHRoaXMuc2V0U3RlcEJhc2VQcm9wcyhzdGVwLCBzdGVwRm9ybWx5Q29uZmlnKTtcbiAgICB9XG4gICAgaWYgKHN0ZXAuZGVwZW5kZW50RGljdGlvbmFyeT8uaXNEaWN0aW9uYXJ5RGVwZW5kZW50KSB7XG4gICAgICB0aGlzLnN0ZXBEaWN0aW9uYXJ5RGVwZW5kZW50SWRzLnB1c2goXG4gICAgICAgIHN0ZXAuZGVwZW5kZW50RGljdGlvbmFyeS5kaWN0aW9uYXJ5Q29udHJvbElkZW50aWZpZXJcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBzdGVwRm9ybWx5Q29uZmlnO1xuICB9XG5cbiAgdHJpZ2dlckNvbXBvbmVudFVwZGF0ZShjb250cm9sSWQ6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2V0Rm9ybWx5RmllbGRWYWx1ZSh0aGlzLmZvcm1seUFsbFN0ZXBzLCBjb250cm9sSWQsIHZhbHVlKTtcbiAgfVxuXG4gIHNldEZvcm1seUZpZWxkVmFsdWUoXG4gICAgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdIHwgdW5kZWZpbmVkLFxuICAgIGtleTogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnlcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFmaWVsZHMpIHJldHVybiBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICBpZiAoZmllbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgaWYgKGZpZWxkLmZvcm1Db250cm9sKSB7XG4gICAgICAgICAgZmllbGQuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWVsZC5maWVsZEdyb3VwICYmIEFycmF5LmlzQXJyYXkoZmllbGQuZmllbGRHcm91cCkpIHtcbiAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLnNldEZvcm1seUZpZWxkVmFsdWUoZmllbGQuZmllbGRHcm91cCwga2V5LCB2YWx1ZSk7XG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBidWlsZFN5c3RlbUZpZWxkRm9ybWx5Q29uZmlnKFxuICAgIHN0ZXA6IFN0ZXBEYXRhXG4gICk6IFByb21pc2U8Rm9ybWx5RmllbGRDb25maWc+IHtcbiAgICBjb25zdCBmb3JtbHlDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgcHJvcHM6IHtcbiAgICAgICAgbGFiZWw6IHN0ZXAubmFtZSxcbiAgICAgICAgYnV0dG9uczogdGhpcy5jb25zdHJ1Y3RCdXR0b25zKHN0ZXAuYnV0dG9ucyksXG4gICAgICAgIGZsdXhUeXBlOiBzdGVwLnR5cGUsXG4gICAgICB9LFxuICAgICAgZmllbGRHcm91cDogW10sXG4gICAgfTtcblxuICAgIHRoaXMuc2V0U3RlcEJhc2VQcm9wcyhzdGVwLCBmb3JtbHlDb25maWcpO1xuICAgIHZhciBmaWVsZENvbmZpZyA9IHRoaXMuY3JlYXRlRm9ybWx5U3lzdGVtRmllbGRDb25maWcoc3RlcCk7XG5cbiAgICBpZiAoZmllbGRDb25maWcpIHtcbiAgICAgIGlmIChzdGVwLnRyYW5zbGF0aW9ucykge1xuICAgICAgICBsZXQgbGFiZWxzOiBhbnkgPSB7fTtcbiAgICAgICAgc3RlcC50cmFuc2xhdGlvbnMuZm9yRWFjaCgodHI6IFRyYW5zbGF0aW9uSW5mbykgPT4ge1xuICAgICAgICAgIGxhYmVsc1t0ci5uYW1lXSA9IFV0aWxzLmZpbmRUcmFuc2xhdGlvbihcbiAgICAgICAgICAgIHRyLnZhbHVlcyxcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZpZWxkQ29uZmlnLnByb3BzIVsnbGFiZWxzJ10gPSBsYWJlbHM7XG4gICAgICAgIGZpZWxkQ29uZmlnLnByb3BzIVsnbmFtZSddID0gVXRpbHMuZmluZFRyYW5zbGF0aW9uSW5mbyhcbiAgICAgICAgICAnbmFtZScsXG4gICAgICAgICAgc3RlcC50cmFuc2xhdGlvbnMsXG4gICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgKTtcbiAgICAgICAgZmllbGRDb25maWcucHJvcHMhWydkZXNjcmlwdGlvbiddID0gVXRpbHMuZmluZFRyYW5zbGF0aW9uSW5mbyhcbiAgICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAgIHN0ZXAudHJhbnNsYXRpb25zLFxuICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICk7XG4gICAgICAgIGZvcm1seUNvbmZpZy5wcm9wcyFbJ2xhYmVsJ10gPSBVdGlscy5maW5kVHJhbnNsYXRpb25JbmZvKFxuICAgICAgICAgICduYW1lJyxcbiAgICAgICAgICBzdGVwLnRyYW5zbGF0aW9ucyxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICApO1xuICAgICAgICBmb3JtbHlDb25maWcucHJvcHMhWydkZXNjcmlwdGlvbiddID0gVXRpbHMuZmluZFRyYW5zbGF0aW9uSW5mbyhcbiAgICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAgIHN0ZXAudHJhbnNsYXRpb25zLFxuICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBmaWVsZENvbmZpZy5wcm9wcyFbJ3N0ZXBzU2V0dGluZ3MnXSA9IHRoaXMuc3RlcHNTZXR0aW5ncztcbiAgICAgIGZvcm1seUNvbmZpZy5maWVsZEdyb3VwIS5wdXNoKGZpZWxkQ29uZmlnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWx5Q29uZmlnO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdGVwQmFzZVByb3BzKHN0ZXA6IFN0ZXBEYXRhLCBmb3JtbHlDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnKSB7XG4gICAgaWYgKGZvcm1seUNvbmZpZy5wcm9wcykge1xuICAgICAgZm9ybWx5Q29uZmlnLnByb3BzWyduYW1lJ10gPSBzdGVwLm5hbWU7XG4gICAgICBmb3JtbHlDb25maWcucHJvcHNbJ2ZsdXhUeXBlJ10gPSBzdGVwLnR5cGU7XG4gICAgICBmb3JtbHlDb25maWcucHJvcHNbJ3N0ZXBJZCddID0gc3RlcC5pZGVudGlmaWVyO1xuICAgICAgZm9ybWx5Q29uZmlnLnByb3BzWydpc1Zpc2libGUnXSA9IHN0ZXAuaXNWaXNpYmxlO1xuICAgICAgZm9ybWx5Q29uZmlnLnByb3BzWydkZXBlbmRlbnREaWN0aW9uYXJ5J10gPSBzdGVwLmRlcGVuZGVudERpY3Rpb25hcnk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBDcmVhdGVTaWduRmllbGRDb25maWcoc3RlcDogU3RlcERhdGEpOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdmb3JtbHktc2lnbi1jb21wb25lbnQnLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgYXBwRGF0YUlkOiB0aGlzLmFwcERhdGFVdWlkLFxuICAgICAgICBzdGVwRGF0YTogc3RlcCxcbiAgICAgICAgZGVzaWduOiB0aGlzLmRlc2lnbixcbiAgICAgICAgZW52OiB0aGlzLmVudixcbiAgICAgICAgZmx1eDogdGhpcy5mbHV4LFxuICAgICAgICBwYXJlbnRGb3JtOiB0aGlzLmZvcm0sXG4gICAgICAgIGdldE1vZGVsOiAoKSA9PiB0aGlzLm1vZGVsLFxuICAgICAgICBldmVudDogYXN5bmMgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQgPT09ICdzdWNjZXNzJykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGVwcGVyR29OZXh0QXN5bmMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIENyZWF0ZURvd25sb2FkRG9jc0ZpZWxkQ29uZmlnKFxuICAgIGNvbnRyb2xEYXRhOiBCYXNlQ29udHJvbFxuICApOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdmb3JtbHktZG93bmxvYWQtZG9jdW1lbnRzLWNvbXBvbmVudCcsXG4gICAgICBwcm9wczoge1xuICAgICAgICBhcHBJZDogdGhpcy5hcHBNb2RlbC5hcHBsaWNhdGlvblV1aWQsXG4gICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhVXVpZCxcbiAgICAgICAgY29udHJvbERhdGE6IGNvbnRyb2xEYXRhLFxuICAgICAgICBlbnY6IHRoaXMuZW52LFxuICAgICAgICBkb2N1bWVudHNEYXRhOiB0aGlzLmFwcE1vZGVsLmRvY3VtZW50cyxcbiAgICAgICAgbGFuZ0lzbzogdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIENyZWF0ZVZpZXdEb2NzRmllbGRDb25maWcoXG4gICAgY29udHJvbERhdGE6IEJhc2VDb250cm9sXG4gICk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2Zvcm1seS12aWV3LWRvY3VtZW50cy1jb21wb25lbnQnLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgYXBwSWQ6IHRoaXMuYXBwTW9kZWwuYXBwbGljYXRpb25VdWlkLFxuICAgICAgICBhcHBEYXRhSWQ6IHRoaXMuYXBwRGF0YVV1aWQsXG4gICAgICAgIGNvbnRyb2xEYXRhOiBjb250cm9sRGF0YSxcbiAgICAgICAgZW52OiB0aGlzLmVudixcbiAgICAgICAgZG9jdW1lbnRzRGF0YTogdGhpcy5hcHBNb2RlbC5kb2N1bWVudHMsXG4gICAgICAgIGxhbmdJc286IHRoaXMuY3VycmVudExhbmd1YWdlSXNvLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBDcmVhdGVVcGxvYWREb2NzRmllbGRDb25maWcoXG4gICAgY29udHJvbERhdGE6IEJhc2VDb250cm9sXG4gICk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2Zvcm1seS11cGxvYWQtZG9jdW1lbnRzLWNvbXBvbmVudCcsXG4gICAgICBwcm9wczoge1xuICAgICAgICBhcHBJZDogdGhpcy5hcHBNb2RlbC5hcHBsaWNhdGlvblV1aWQsXG4gICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhVXVpZCxcbiAgICAgICAgY29udHJvbERhdGE6IGNvbnRyb2xEYXRhLFxuICAgICAgICBlbnY6IHRoaXMuZW52LFxuICAgICAgICBkb2N1bWVudHNEYXRhOiB0aGlzLmFwcE1vZGVsLmRvY3VtZW50cyxcbiAgICAgICAgbGFuZ0lzbzogdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIENyZWF0ZUdlbmVyYXRlRG9jc0ZpZWxkQ29uZmlnKHN0ZXA6IFN0ZXBEYXRhKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZm9ybWx5LWdlbmVyYXRlLWRvY3VtZW50cy1jb21wb25lbnQnLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgYXBwSWQ6IHRoaXMuYXBwTW9kZWwuYXBwbGljYXRpb25VdWlkLFxuICAgICAgICBhcHBEYXRhSWQ6IHRoaXMuYXBwRGF0YVV1aWQsXG4gICAgICAgIHN0ZXBEYXRhOiBzdGVwLFxuICAgICAgICBkb2N1bWVudHNEYXRhOiB0aGlzLmFwcE1vZGVsLmRvY3VtZW50cyxcbiAgICAgICAgbGFuZ0lzbzogdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICAgIGV2ZW50OiBhc3luYyAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChldmVudCA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnN0ZXBwZXJHb05leHRBc3luYygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHN0ZXBwZXJHb05leHRBc3luYygpIHtcbiAgICBjb25zdCBzdGVwcGVyQ29tcG9uZW50ID0gdGhpcy5mb3JtbHlDb25maWdbMF0ucHJvcHMhWydjb21wb25lbnQnXTtcbiAgICBpZiAoc3RlcHBlckNvbXBvbmVudCAmJiBzdGVwcGVyQ29tcG9uZW50Lm5hdmlnYXRlTmV4dEFzeW5jKSB7XG4gICAgICBhd2FpdCBzdGVwcGVyQ29tcG9uZW50Lm5hdmlnYXRlTmV4dEFzeW5jKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBDcmVhdGVFbnJvbGxDYXJkRmllbGRDb25maWcoc3RlcDogU3RlcERhdGEpOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gICAgbGV0IGxhYmVsczogYW55ID0ge307XG4gICAgT2JqZWN0LmtleXMoc3RlcC5jb25maWcpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleS5lbmRzV2l0aCgnTGFiZWwnKSkge1xuICAgICAgICBsYWJlbHNba2V5XSA9XG4gICAgICAgICAgc3RlcD8uY29uZmlnW2tleV0/LmZpbmQoXG4gICAgICAgICAgICAoaTogeyBsYW5ndWFnZUlzbzogc3RyaW5nIH0pID0+XG4gICAgICAgICAgICAgIGkubGFuZ3VhZ2VJc28gPT09IHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICAgKT8udmFsdWUgPz8gJyc7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdmb3JtbHktZW5yb2wtY2FyZC1jb21wb25lbnQnLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgYXBwSWQ6IHRoaXMuYXBwTW9kZWwuYXBwbGljYXRpb25VdWlkLFxuICAgICAgICBhcHBEYXRhSWQ6IHRoaXMuYXBwRGF0YVV1aWQsXG4gICAgICAgIGRhdGFVcmxJZDogdGhpcy5kYXRhVXJsSWQsXG4gICAgICAgIHN0ZXBEYXRhOiBzdGVwLFxuICAgICAgICBsYWJlbHM6IGxhYmVscyxcbiAgICAgICAgbGFuZ0lzbzogdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSBDcmVhdGVJZFNjYW5GaWVsZENvbmZpZyhzdGVwOiBTdGVwRGF0YSk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICBsZXQgZXJyb3JNZXNzYWdlczogYW55ID0ge307XG5cbiAgICBpZiAoc3RlcC5lcnJvcnNUcmFuc2xhdGlvbnMpIHtcbiAgICAgIHN0ZXAuZXJyb3JzVHJhbnNsYXRpb25zLmZvckVhY2goKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgZXJyb3JNZXNzYWdlc1tlcnJvci5jb2RlXSA9IFV0aWxzLmZpbmRUcmFuc2xhdGlvbihcbiAgICAgICAgICBlcnJvci50cmFuc2xhdGlvbnMsXG4gICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZm9ybWx5LXNjYW4taWQnLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgY29uZmlnOiBzdGVwLmNvbmZpZyxcbiAgICAgICAgc3RlcFR5cGU6IHN0ZXAudHlwZSxcbiAgICAgICAgc3RlcElkOiBzdGVwLmlkZW50aWZpZXIsXG4gICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhVXVpZCB8fCBVdGlscy5nZW5lcmF0ZVVVSUQoKSxcbiAgICAgICAgYXBwSWQ6IHRoaXMuYXBwTW9kZWwuYXBwbGljYXRpb25VdWlkLFxuICAgICAgICBlcnJvck1lc3NhZ2VzOiBlcnJvck1lc3NhZ2VzLFxuICAgICAgICBldmVudDogKGV2ZW50OiBhbnkpID0+IHRoaXMub25JZFNjYW5Db21wbGV0ZWQoZXZlbnQsIHN0ZXApLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBDcmVhdGVLeWNGaWVsZENvbmZpZyhzdGVwOiBTdGVwRGF0YSk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICBjb25zdCBsb2FkaW5nTXNnVHJhbnNsYXRpb25zID0gc3RlcC50cmFuc2xhdGlvbnM/LmZpbmQoXG4gICAgICAodDogYW55KSA9PiB0Lm5hbWUgPT09ICdsb2FkaW5nTWVzc2FnZVRyYW5zbGF0aW9ucydcbiAgICApO1xuXG4gICAgY29uc3QgdHJhbnNsYXRlZExvYWRpbmdNZXNzYWdlID1cbiAgICAgIGxvYWRpbmdNc2dUcmFuc2xhdGlvbnM/LnZhbHVlcz8uZmluZChcbiAgICAgICAgKHY6IGFueSkgPT4gdi5sYW5ndWFnZUlzbyA9PT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICk/LnZhbHVlIHx8ICcnO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdmb3JtbHktaWRlbnRpZmljYXRpb24tY29tcG9uZW50JyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIHRva2VuOiB0aGlzLmt5Y1Rva2VuLFxuICAgICAgICBhcGlfdXJsOiB0aGlzLmt5Y0FwaVVybCxcbiAgICAgICAgYXBwRGF0YUlkOiB0aGlzLmFwcERhdGFVdWlkLFxuICAgICAgICBlbnY6ICdET0NLRVInLCAvLyBDb25zaWRlciBtYWtpbmcgdGhpcyBkeW5hbWljIGlmIG5lZWRlZFxuICAgICAgICByZWRpcmVjdF9pZDogdGhpcy5reWNSZWRpcmVjdElkLFxuICAgICAgICBwaG9uZV9udW1iZXI6ICcnLFxuICAgICAgICBsYW5nX2lzbzogdGhpcy5reWNMYW5nSXNvLFxuICAgICAgICBzaG93X2NpdGl6ZW5zaGlwX3NlbGVjdG9yOiB0aGlzLmt5Y1Nob3dDaXRpemVuc2hpcCxcbiAgICAgICAgc2Nyb2xsX21vZGU6IHRoaXMua3ljU2Nyb2xsTW9kZSxcbiAgICAgICAgbWF4UmV0cmllczogc3RlcC5jb25maWc/Lm1heEt5Y1JldHJpZXMgPz8gMyxcbiAgICAgICAgbG9hZGluZ01lc3NhZ2U6IHRyYW5zbGF0ZWRMb2FkaW5nTWVzc2FnZSxcbiAgICAgICAgZWN0Q29tcGxldGVkOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nTWVzc2FnZSA9IHRyYW5zbGF0ZWRMb2FkaW5nTWVzc2FnZTtcbiAgICAgICAgICBhd2FpdCB0aGlzLm9yaWdpbkZvcm1TaWduYWxySGFuZGxlclNlcnZpY2UuaW5pdGlhdGVLeWNQcm9jZXNzaW5nKFxuICAgICAgICAgICAgdGhpcy5hcHBEYXRhVXVpZFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIENyZWF0ZVBob25lRW1haWxGaWVsZENvbmZpZyhzdGVwOiBTdGVwRGF0YSk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2Zvcm1seS12YWxpZGF0ZS1jb250YWN0LWluZm8nLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgc3RlcERhdGE6IHN0ZXAsXG4gICAgICAgIGFwcERhdGFJZDogdGhpcy5hcHBEYXRhVXVpZCxcbiAgICAgICAgZGVzaWduOiB0aGlzLmRlc2lnbixcbiAgICAgICAgZXZlbnQ6IGFzeW5jIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50ID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RlcHBlckdvTmV4dEFzeW5jKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBDcmVhdGVWaWV3T2ZmZXJGaWVsZENvbmZpZyhzdGVwOiBTdGVwRGF0YSk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2Zvcm1seS12aWV3LW9mZmVycycsXG4gICAgICBwcm9wczoge1xuICAgICAgICBhcHBEYXRhSWQ6IHRoaXMuYXBwRGF0YVV1aWQsXG4gICAgICAgIHN0ZXBEYXRhOiBzdGVwLFxuICAgICAgICBlbnY6IHRoaXMuZW52LFxuICAgICAgICBhcHBNb2RlbDogdGhpcy5hcHBNb2RlbCxcbiAgICAgICAgbGFuZ0lzbzogdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICAgIGV2ZW50OiAoZXZlbnQ6IGFueSkgPT4gdGhpcy5vbk9mZmVyU2VsZWN0ZWQoZXZlbnQsIHN0ZXApLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBDcmVhdGVQYXVzZUZpZWxkQ29uZmlnKHN0ZXA6IFN0ZXBEYXRhKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnZm9ybWx5LWZpZWxkLXBhdXNlJyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGlkZW50aWZpZXI6IHN0ZXAuaWRlbnRpZmllcixcbiAgICAgICAgY29uZmlnOiBzdGVwLmNvbmZpZyxcbiAgICAgICAgYXBwRGF0YUlkOiB0aGlzLmFwcERhdGFVdWlkLFxuICAgICAgICBzdGVwRGF0YTogc3RlcCxcbiAgICAgICAgZW52OiB0aGlzLmVudixcbiAgICAgICAgYXBwTW9kZWw6IHRoaXMuYXBwTW9kZWwsXG4gICAgICAgIGxhbmdJc286IHRoaXMuY3VycmVudExhbmd1YWdlSXNvLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBDcmVhdGVPcGVuQmFua2luZ0ZpZWxkQ29uZmlnKHN0ZXA6IFN0ZXBEYXRhKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIC8vIFBhc3MgdGhlIGZ1bGwgc3RlcCBkYXRhIHdoaWNoIGluY2x1ZGVzIGFsbCB0cmFuc2xhdGlvbnNcbiAgICAvLyBUaGUgY29tcG9uZW50IHdpbGwgZXh0cmFjdCB3aGF0IGl0IG5lZWRzIGJhc2VkIG9uIGN1cnJlbnQgbGFuZ3VhZ2VcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2Zvcm1seS1vcGVuLWJhbmtpbmcnLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgaWRlbnRpZmllcjogc3RlcC5pZGVudGlmaWVyLFxuICAgICAgICBjb25maWc6IHN0ZXAuY29uZmlnLFxuICAgICAgICBhcHBEYXRhSWQ6IHRoaXMuYXBwRGF0YVV1aWQsXG4gICAgICAgIHN0ZXBEYXRhOiBzdGVwLCAvLyBUaGlzIGNvbnRhaW5zIHRoZSBmdWxsIHRyYW5zbGF0aW9ucyBhcnJheVxuICAgICAgICBlbnY6IHRoaXMuZW52LFxuICAgICAgICBhcHBNb2RlbDogdGhpcy5hcHBNb2RlbCxcbiAgICAgICAgbGFuZ0lzbzogdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICAgIGxhYmVsczoge1xuICAgICAgICAgIGluaXRpYWxNZXNzYWdlOiBVdGlscy5maW5kVHJhbnNsYXRpb24oXG4gICAgICAgICAgICBzdGVwLmNvbmZpZz8uaW5pdGlhbE1lc3NhZ2VUcmFuc2xhdGlvbnMgfHwgW10sXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICAgICksXG4gICAgICAgICAgd2FpdGluZ01lc3NhZ2U6IFV0aWxzLmZpbmRUcmFuc2xhdGlvbihcbiAgICAgICAgICAgIHN0ZXAuY29uZmlnPy53YWl0aW5nTWVzc2FnZVRyYW5zbGF0aW9ucyB8fCBbXSxcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICAgKSxcbiAgICAgICAgICBjb25zZW50RXJyb3JNZXNzYWdlOiBVdGlscy5maW5kVHJhbnNsYXRpb24oXG4gICAgICAgICAgICBzdGVwLmNvbmZpZz8uY29uc2VudEVycm9yTWVzc2FnZVRyYW5zbGF0aW9ucyB8fCBbXSxcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICAgKSxcbiAgICAgICAgICBjb21wbGV0aW9uTWVzc2FnZTogVXRpbHMuZmluZFRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgc3RlcC5jb25maWc/LmNvbXBsZXRpb25NZXNzYWdlVHJhbnNsYXRpb25zIHx8IFtdLFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgICApLFxuICAgICAgICAgIHJldHJ5QnV0dG9uTGFiZWw6IFV0aWxzLmZpbmRUcmFuc2xhdGlvbihcbiAgICAgICAgICAgIHN0ZXAuY29uZmlnPy5yZXRyeUJ1dHRvbkxhYmVsVHJhbnNsYXRpb25zIHx8IFtdLFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBldmVudDogKGV2ZW50OiBhbnkpID0+IHRoaXMub25PcGVuQmFua2luZ0V2ZW50KGV2ZW50LCBzdGVwKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgQ3JlYXRlU3RhdHVzRmllbGRDb25maWcoc3RlcDogU3RlcERhdGEpOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdmb3JtbHktc3RhdHVzJyxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGNvbmZpZzogc3RlcC5jb25maWcsXG4gICAgICAgIHN0ZXBEYXRhOiBzdGVwLFxuICAgICAgICBhcHBEYXRhSWQ6IHRoaXMuYXBwRGF0YVV1aWQsXG4gICAgICAgIGFwcElkOiB0aGlzLmFwcE1vZGVsLmFwcGxpY2F0aW9uVXVpZCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRm9ybWx5U3lzdGVtRmllbGRDb25maWcoXG4gICAgc3RlcDogU3RlcERhdGFcbiAgKTogRm9ybWx5RmllbGRDb25maWcgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoc3RlcC50eXBlKSB7XG4gICAgICBjYXNlIEZsdXhUeXBlLkt5YzpcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZUt5Y0ZpZWxkQ29uZmlnKHN0ZXApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBGbHV4VHlwZS5FbWFpbDpcbiAgICAgIGNhc2UgRmx1eFR5cGUuUGhvbmU6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlUGhvbmVFbWFpbEZpZWxkQ29uZmlnKHN0ZXApO1xuICAgICAgfVxuICAgICAgY2FzZSBGbHV4VHlwZS5BY3Rpb246IHtcbiAgICAgICAgLy8gQWN0aW9uIHN0ZXBzIGFyZSBub3cgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IEFjdGlvblN0ZXBIYW5kbGVyXG4gICAgICAgIC8vIFRoZXkgc2hvdWxkIG5vdCBhcHBlYXIgYXMgdmlzaWJsZSBmb3JtbHkgY29tcG9uZW50c1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY2FzZSBGbHV4VHlwZS5JZFNjYW46IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlSWRTY2FuRmllbGRDb25maWcoc3RlcCk7XG4gICAgICB9XG4gICAgICBjYXNlIEZsdXhUeXBlLkdlbmVyYXRlRG9jdW1lbnQ6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlR2VuZXJhdGVEb2NzRmllbGRDb25maWcoc3RlcCk7XG4gICAgICB9XG4gICAgICBjYXNlIEZsdXhUeXBlLlNpZ246IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlU2lnbkZpZWxkQ29uZmlnKHN0ZXApO1xuICAgICAgfVxuICAgICAgY2FzZSBGbHV4VHlwZS5WaWV3T2ZmZXI6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuQ3JlYXRlVmlld09mZmVyRmllbGRDb25maWcoc3RlcCk7XG4gICAgICB9XG4gICAgICBjYXNlIEZsdXhUeXBlLlN0YXR1czoge1xuICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGVTdGF0dXNGaWVsZENvbmZpZyhzdGVwKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgRmx1eFR5cGUuRVVQTEFURVNDOiB7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZUVucm9sbENhcmRGaWVsZENvbmZpZyhzdGVwKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgRmx1eFR5cGUuTkVUT1BJQToge1xuICAgICAgICByZXR1cm4gdGhpcy5DcmVhdGVFbnJvbGxDYXJkRmllbGRDb25maWcoc3RlcCk7XG4gICAgICB9XG4gICAgICBjYXNlIEZsdXhUeXBlLlBhdXNlOiB7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZVBhdXNlRmllbGRDb25maWcoc3RlcCk7XG4gICAgICB9XG4gICAgICBjYXNlIEZsdXhUeXBlLk9wZW5CYW5raW5nOiB7XG4gICAgICAgIHJldHVybiB0aGlzLkNyZWF0ZU9wZW5CYW5raW5nRmllbGRDb25maWcoc3RlcCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBvbk9mZmVyU2VsZWN0ZWQob2ZmZXJJZDogYW55LCBzdGVwOiBTdGVwRGF0YSkge1xuICAgIHRoaXMuZm9ybWx5VXBkYXRlQW5kR29OZXh0LmVtaXQoeyBzZWxlY3RlZE9mZmVySWQ6IG9mZmVySWQgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uU2lnbkV2ZW50KGV2ZW50OiBhbnksIHN0ZXA6IFN0ZXBEYXRhKSB7XG4gICAgY29uc29sZS5sb2coJ1NpZ24gZXZlbnQgcmVjZWl2ZWQ6JywgZXZlbnQpO1xuICAgIHRoaXMudXBkYXRlU3RlcEJ1dHRvblN0YXRlKHN0ZXApO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk9wZW5CYW5raW5nRXZlbnQoZXZlbnQ6IGFueSwgc3RlcDogU3RlcERhdGEpIHtcbiAgICBjb25zb2xlLmxvZygnT3BlbkJhbmtpbmcgZXZlbnQgcmVjZWl2ZWQ6JywgZXZlbnQpO1xuICAgIGlmIChldmVudCA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAvLyBPcGVuIEJhbmtpbmcgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICB0aGlzLnVwZGF0ZVN0ZXBCdXR0b25TdGF0ZShzdGVwKTtcbiAgICAgIC8vIEF1dG8tcHJvY2VlZCB0byBuZXh0IHN0ZXBcbiAgICAgIHRoaXMuZm9ybWx5VXBkYXRlQW5kR29OZXh0LmVtaXQoe30pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25JZFNjYW5Db21wbGV0ZWQoZXZlbnQ6IGFueSwgc3RlcDogU3RlcERhdGEpIHtcbiAgICBjb25zb2xlLmxvZygnU2lnbiBldmVudCByZWNlaXZlZDonLCBldmVudCk7XG4gICAgY29uc3QgZmlsbERhdGEgPSBKU09OLnBhcnNlKGV2ZW50LmZpbGxEYXRhKTtcbiAgICBjb25zdCBzdGVwRmlsbERhdGEgPSBmaWxsRGF0YS5mbHV4LmZpbmQoXG4gICAgICAoczogeyBzdGVwSWQ6IHN0cmluZyB9KSA9PiBzLnN0ZXBJZCA9PSBzdGVwLmlkZW50aWZpZXJcbiAgICApO1xuICAgIHN0ZXBGaWxsRGF0YS5zZWN0aW9ucy5mb3JFYWNoKFxuICAgICAgKHM6IHtcbiAgICAgICAgY29udHJvbHM6IHtcbiAgICAgICAgICBjb250cm9sSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgICBmaWxsVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVtdO1xuICAgICAgfSkgPT4ge1xuICAgICAgICBzLmNvbnRyb2xzLmZvckVhY2goXG4gICAgICAgICAgKGM6IHtcbiAgICAgICAgICAgIGNvbnRyb2xJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgZmlsbFZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGMuY29udHJvbElkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0ge1xuICAgICAgICAgICAgICAgIFtjLmNvbnRyb2xJZF06IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBjLmZpbGxWYWx1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmICh0aGlzLmZvcm0uY29udGFpbnMoYy5jb250cm9sSWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGMuY29udHJvbElkLCBuZXcgRm9ybUNvbnRyb2woYy5maWxsVmFsdWUpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy51cGRhdGVTdGVwQnV0dG9uU3RhdGUoc3RlcCk7XG4gIH1cblxuICB1cGRhdGVTdGVwQnV0dG9uU3RhdGUoc3RlcDogU3RlcERhdGEpIHtcbiAgICBsZXQgZm9ybWx5U3RlcEZpZWxkID0gdGhpcy5mb3JtbHlDb25maWdbMF0uZmllbGRHcm91cD8uZmluZCgoZmllbGQpID0+XG4gICAgICBmaWVsZC5maWVsZEdyb3VwPy5maW5kKChmKSA9PiBmLnByb3BzPy5bJ3N0ZXBJZCddID09PSBzdGVwLmlkZW50aWZpZXIpXG4gICAgKTtcblxuICAgIGlmICghZm9ybWx5U3RlcEZpZWxkKSB7XG4gICAgICBmb3JtbHlTdGVwRmllbGQgPSB0aGlzLmZvcm1seUNvbmZpZ1swXS5maWVsZEdyb3VwPy5maW5kKFxuICAgICAgICAoZmllbGQpID0+IGZpZWxkLnByb3BzPy5bJ3N0ZXBJZCddID09PSBzdGVwLmlkZW50aWZpZXJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGZvcm1seVN0ZXBGaWVsZCkge1xuICAgICAgZm9ybWx5U3RlcEZpZWxkLnByb3BzID0ge1xuICAgICAgICAuLi5mb3JtbHlTdGVwRmllbGQucHJvcHMsXG4gICAgICAgIGJ1dHRvbnNEaXNhYmxlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgdGhpcy51cGRhdGVGb3JtbHlDb25maWcoKTtcbiAgICAgIHRoaXMuZm9ybWx5Q29uZmlnVXBkYXRlZC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRSZW5kZXJlZENzcygpIHtcbiAgICBjb25zdCBzdHlsZVN0cmluZyA9IEZvcm1Dc3NIZWxwZXIuY29udmVydFRvU3R5bGVTdHJpbmcoXG4gICAgICB0aGlzLmRlc2lnbixcbiAgICAgIHRoaXMuc2hvd0Rpc3BsYXlNb2RlXG4gICAgKTtcblxuICAgIGNvbnN0IHN0eWxlRWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICBzdHlsZUVsZW1lbnQuaWQgPSAncmVuZGVyZWQtY3NzJztcbiAgICBjb25zdCByZW5kRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVuZGVyZWQtY3NzJyk7XG4gICAgaWYgKHJlbmRFbCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChkb2N1bWVudC5ib2R5LCByZW5kRWwpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKFxuICAgICAgc3R5bGVFbGVtZW50LFxuICAgICAgdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0KFV0aWxzLnJlbW92ZU5ld0xpbmVzKHN0eWxlU3RyaW5nKSlcbiAgICApO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuYm9keSwgc3R5bGVFbGVtZW50KTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkU2VjdGlvbnNGaWVsZEdyb3VwQXN5bmMoXG4gICAgc3RlcDogU3RlcERhdGEgfCB1bmRlZmluZWQsXG4gICAgc2VjdGlvbnM6IFNlY3Rpb25EYXRhW11cbiAgKTogUHJvbWlzZTxGb3JtbHlGaWVsZENvbmZpZ1tdPiB7XG4gICAgY29uc3Qgc3RlcFNlY3Rpb25zOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IHNlY3Rpb25zICYmIGluZGV4IDwgc2VjdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBzZWN0aW9uID0gc2VjdGlvbnNbaW5kZXhdO1xuICAgICAgbGV0IHNlcGFyYXRvckZvcm1seUNvbmZpZzogYW55ID0ge307XG4gICAgICBpZiAoc2VjdGlvbi5zaG93U2VjdGlvblRpdGxlKSB7XG4gICAgICAgIHNlcGFyYXRvckZvcm1seUNvbmZpZyA9IHtcbiAgICAgICAgICB0eXBlOiAnc2VwYXJhdG9yJyxcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgdGl0bGU6XG4gICAgICAgICAgICAgIHNlY3Rpb24udHJhbnNsYXRpb25zPy5maW5kKFxuICAgICAgICAgICAgICAgICh0OiBhbnkpID0+IHQubGFuZ3VhZ2VJc28gPT09IHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICAgICAgICk/LnZhbHVlID8/ICcnLFxuXG4gICAgICAgICAgICBkZXNpZ246IHRoaXMuZGVzaWduLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWN0aW9uLnNob3dTZWN0aW9uU2VwYXJhdG9yKSB7XG4gICAgICAgIHNlcGFyYXRvckZvcm1seUNvbmZpZyA9IHtcbiAgICAgICAgICAuLi5zZXBhcmF0b3JGb3JtbHlDb25maWcsXG4gICAgICAgICAgdHlwZTogJ3NlcGFyYXRvcicsXG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIC4uLnNlcGFyYXRvckZvcm1seUNvbmZpZy5wcm9wcyxcbiAgICAgICAgICAgIHNob3dTZXBhcmF0b3I6IHNlY3Rpb24uc2hvd1NlY3Rpb25TZXBhcmF0b3IsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlY3Rpb24uZGVwZW5kZW50RGljdGlvbmFyeSkge1xuICAgICAgICB0aGlzLmF0dGFjaFRvRGVwZW5kZW50RGljdGlvbmFyeUlmTmVjZXNzYXJ5KFxuICAgICAgICAgIHNlY3Rpb24uZGVwZW5kZW50RGljdGlvbmFyeSxcbiAgICAgICAgICBzZXBhcmF0b3JGb3JtbHlDb25maWdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHN0ZXBTZWN0aW9ucy5wdXNoKHNlcGFyYXRvckZvcm1seUNvbmZpZyk7XG5cbiAgICAgIGNvbnN0IHNlY3Rpb25Gb3JtbHlDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICB0eXBlOiAnY3VzdG9tLXNlY3Rpb24nLFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIGxhYmVsOiBzZWN0aW9uLnRpdGxlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgc2VjdGlvbi50cmFuc2xhdGlvbnM/LmZpbmQoXG4gICAgICAgICAgICAgICh0OiBhbnkpID0+IHQubGFuZ3VhZ2VJc28gPT09IHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICAgICApPy52YWx1ZSA/PyAnJyxcbiAgICAgICAgICBkZXNpZ246IHRoaXMuZGVzaWduLFxuICAgICAgICB9LFxuICAgICAgICBmaWVsZEdyb3VwOiBhd2FpdCB0aGlzLmJ1aWxkQ29udHJvbHNGaWVsZEdyb3VwQXN5bmMoXG4gICAgICAgICAgc3RlcCxcbiAgICAgICAgICBzZWN0aW9uLmNvbnRyb2xzIHx8IFtdLFxuICAgICAgICAgIHNlY3Rpb24ucHJlc2VudGF0aW9uQ29udHJvbHMgfHwgW11cbiAgICAgICAgKSxcbiAgICAgICAgZmllbGRHcm91cENsYXNzTmFtZTogJ2Rpc3BsYXktZmxleCcsXG4gICAgICB9O1xuICAgICAgaWYgKHNlY3Rpb24uZGVwZW5kZW50RGljdGlvbmFyeSkge1xuICAgICAgICB0aGlzLmF0dGFjaFRvRGVwZW5kZW50RGljdGlvbmFyeUlmTmVjZXNzYXJ5KFxuICAgICAgICAgIHNlY3Rpb24uZGVwZW5kZW50RGljdGlvbmFyeSxcbiAgICAgICAgICBzZWN0aW9uRm9ybWx5Q29uZmlnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHN0ZXBTZWN0aW9ucy5wdXNoKHNlY3Rpb25Gb3JtbHlDb25maWcpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGVwU2VjdGlvbnM7XG4gIH1cblxuICBhc3luYyBidWlkRGlzcGxheVN0ZXAoKTogUHJvbWlzZTxGb3JtbHlGaWVsZENvbmZpZz4ge1xuICAgIGxldCBzdGVwRm9ybWx5Q29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZyA9IHt9O1xuICAgIGlmICh0aGlzLmRpc3BsYXk/LnNlY3Rpb25zPy5sZW5ndGggPiAwKSB7XG4gICAgICBzdGVwRm9ybWx5Q29uZmlnID0ge1xuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIC8vIGxhYmVsOiBzdGVwLm5hbWUsXG4gICAgICAgICAgLy8gYnV0dG9uczogdGhpcy5jb25zdHJ1Y3RCdXR0b25zKHN0ZXAuYnV0dG9ucyksXG4gICAgICAgICAgLy8gIGRlcGVuZGVudERpY3Rpb25hcnk6IHN0ZXAuZGVwZW5kZW50RGljdGlvbmFyeSxcbiAgICAgICAgfSxcbiAgICAgICAgZmllbGRHcm91cDogYXdhaXQgdGhpcy5idWlsZFNlY3Rpb25zRmllbGRHcm91cEFzeW5jKFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB0aGlzLmRpc3BsYXkuc2VjdGlvbnNcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBzdGVwRm9ybWx5Q29uZmlnO1xuICB9XG5cbiAgYWRkTmV3Um93VG9Gb3JtRmllbGRzSWZOZWNlc3NhcnkoXG4gICAgZmllbGRHcm91cDogRm9ybWx5RmllbGRDb25maWdbXSxcbiAgICBuZXdSb3c6IEZvcm1seUZpZWxkQ29uZmlnXG4gICkge1xuICAgIGlmIChuZXdSb3cuZmllbGRHcm91cCAmJiBuZXdSb3cuZmllbGRHcm91cC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNhbGN1bGF0ZUZvcm1GaWVsZHNXaWR0aChuZXdSb3cuZmllbGRHcm91cCk7XG4gICAgICBmaWVsZEdyb3VwLnB1c2gobmV3Um93KTtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVGb3JtRmllbGRzV2lkdGgoZm9ybUZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSkge1xuICAgIGNvbnN0IGNvbFdpZHRoUGVySXRlbSA9IDEyIC8gZm9ybUZpZWxkcy5sZW5ndGg7XG4gICAgZm9ybUZpZWxkcy5mb3JFYWNoKChmKSA9PiB7XG4gICAgICBmLmNsYXNzTmFtZSA9ICdjb2wtJyArIGNvbFdpZHRoUGVySXRlbTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFBlcmNlbnRhZ2VDbGFzc05hbWUocGVyY2VudGFnZURpbWVuc2lvbjogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCB0b3RhbENvbHVtbnMgPSAxMjsgLy8gMTItY29sdW1uIGdyaWRcbiAgICBjb25zdCBzcGFuID0gTWF0aC5yb3VuZCgocGVyY2VudGFnZURpbWVuc2lvbiAvIDEwMCkgKiB0b3RhbENvbHVtbnMpO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IGBwZXJjZW50YWdlLXdpZHRoLSR7c3Bhbn1gO1xuXG4gICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjbGFzc05hbWUpKSB7XG4gICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJztcbiAgICAgIHN0eWxlLmlkID0gY2xhc3NOYW1lO1xuICAgICAgc3R5bGUuaW5uZXJIVE1MID0gYFxuICAgICAgICAuJHtjbGFzc05hbWV9IHtcbiAgICAgICAgICBncmlkLWNvbHVtbjogc3BhbiAke3NwYW59O1xuICAgICAgICB9XG4gICAgICBgO1xuICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICBjcmVhdGVGaWxsZXJDb250cm9sKHNwYW46IG51bWJlcik6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ3Jvdy1maWxsZXInLFxuICAgICAgY2xhc3NOYW1lOiBgcGVyY2VudGFnZS13aWR0aC0ke3NwYW59YCxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAgIGhpZGU6IHRydWUsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkQ29udHJvbHNGaWVsZEdyb3VwQXN5bmMoXG4gICAgc3RlcDogU3RlcERhdGEgfCB1bmRlZmluZWQsXG4gICAgY29udHJvbHM6IENvbnRyb2xEYXRhW10sXG4gICAgcHJlc2VudGF0aW9uQ29udHJvbHM6IFByZXNlbnRhdGlvbkNvbnRyb2xbXVxuICApOiBQcm9taXNlPEZvcm1seUZpZWxkQ29uZmlnW10+IHtcbiAgICBjb25zdCByZXN1bHQ6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcbiAgICBsZXQgcm93SXRlbXM6IChDb250cm9sRGF0YSB8IFByZXNlbnRhdGlvbkNvbnRyb2wpW10gPSBbXTtcbiAgICBjb250cm9scyA9IGNvbnRyb2xzLmZpbHRlcigoYykgPT4gIWMuaXNPbmx5Rm9yQ29uZmlnKTtcblxuICAgIC8vIEZpbHRlciBvdXQgY29udHJvbHMgdGhhdCBhcmUgaW5jb21wbGV0ZVxuICAgIGNvbnRyb2xzID0gY29udHJvbHMuZmlsdGVyKChjKSA9PiB7XG4gICAgICAvLyBTa2lwIGNvbnRyb2xzIHRoYXQgYXJlIG1pc3NpbmcgZXNzZW50aWFsIGRhdGFcbiAgICAgIGlmIChcbiAgICAgICAgYy50eXBlID09PSBTdGVwQ29udHJvbFR5cGUuRGljdGlvbmFyeSAmJlxuICAgICAgICAhYy5zcGVjaWZpY0NvbnRyb2xEYXRhPy5kaWN0aW9uYXJ5VVVJRFxuICAgICAgKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHByb2Nlc3NSb3cgPSBhc3luYyAoXG4gICAgICBpdGVtczogKENvbnRyb2xEYXRhIHwgUHJlc2VudGF0aW9uQ29udHJvbClbXVxuICAgICkgPT4ge1xuICAgICAgY29uc3QgZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW107XG4gICAgICBjb25zdCB0b3RhbCA9IDEyO1xuICAgICAgY29uc3QgYnVpbHQ6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTtcbiAgICAgIGNvbnN0IGF1dG86IHtcbiAgICAgICAgYzogQ29udHJvbERhdGEgfCBQcmVzZW50YXRpb25Db250cm9sO1xuICAgICAgICBmOiBGb3JtbHlGaWVsZENvbmZpZztcbiAgICAgIH1bXSA9IFtdO1xuICAgICAgbGV0IHVzZWQgPSAwO1xuICAgICAgZm9yIChjb25zdCBpIG9mIGl0ZW1zKSB7XG4gICAgICAgIGlmICgnY29sbGVjdGlvbkNvbnRyb2xJZGVudGlmaWVyJyBpbiBpID09PSB0cnVlKSB7XG4gICAgICAgICAgYnVpbHQucHVzaChcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYnVpbGRQcmVzZW50YXRpb25Gb3JtRmllbGRBc3luYyhcbiAgICAgICAgICAgICAgc3RlcCxcbiAgICAgICAgICAgICAgaSBhcyBQcmVzZW50YXRpb25Db250cm9sXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICgnYXBpTWV0aG9kSWQnIGluIGkgPT09IHRydWUpIHtcbiAgICAgICAgICBidWlsdC5wdXNoKFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5idWlsZEFwaU1ldGhvZEZvcm1GaWVsZEFzeW5jKFxuICAgICAgICAgICAgICBzdGVwLFxuICAgICAgICAgICAgICBpIGFzIFByZXNlbnRhdGlvbkNvbnRyb2xcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1aWx0LnB1c2goYXdhaXQgdGhpcy5idWlsZEZvcm1GaWVsZEFzeW5jKHN0ZXAsIGkgYXMgQ29udHJvbERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjID0gaXRlbXNbaV07XG4gICAgICAgIGNvbnN0IGYgPSBidWlsdFtpXTtcbiAgICAgICAgaWYgKGMuZGltZW5zaW9uVHlwZSA9PT0gRGltZW5zaW9uVHlwZS5QZXJjZW50YWdlKSB7XG4gICAgICAgICAgaWYgKGMuYXV0b0RpbWVuc2lvbikge1xuICAgICAgICAgICAgYXV0by5wdXNoKHsgYywgZiB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcyA9IE1hdGgucm91bmQoKGMuZGltZW5zaW9uIC8gMTAwKSAqIHRvdGFsKTtcbiAgICAgICAgICAgIHVzZWQgKz0gcztcbiAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2VDbGFzcyA9IHRoaXMuZ2V0UGVyY2VudGFnZUNsYXNzTmFtZShjLmRpbWVuc2lvbik7XG4gICAgICAgICAgICBmLmNsYXNzTmFtZSA9IGAke2YuY2xhc3NOYW1lfSAke3BlcmNlbnRhZ2VDbGFzc31gO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjLmRpbWVuc2lvblR5cGUgPT09IERpbWVuc2lvblR5cGUuUGl4ZWxzKSB7XG4gICAgICAgICAgY29uc3QgcyA9IE1hdGgucm91bmQoKGMuZGltZW5zaW9uIC8gd2luZG93LmlubmVyV2lkdGgpICogdG90YWwpO1xuICAgICAgICAgIHVzZWQgKz0gcztcbiAgICAgICAgICBjb25zdCBwZXJjZW50YWdlQ2xhc3MgPSB0aGlzLmdldFBlcmNlbnRhZ2VDbGFzc05hbWUoXG4gICAgICAgICAgICAocyAvIHRvdGFsKSAqIDEwMFxuICAgICAgICAgICk7XG4gICAgICAgICAgZi5jbGFzc05hbWUgPSBgJHtmLmNsYXNzTmFtZX0gJHtwZXJjZW50YWdlQ2xhc3N9YDtcbiAgICAgICAgfSBlbHNlIGlmIChjLmF1dG9EaW1lbnNpb24pIHtcbiAgICAgICAgICBhdXRvLnB1c2goeyBjLCBmIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVzZWQgKz0gMTtcbiAgICAgICAgICBjb25zdCBwZXJjZW50YWdlQ2xhc3MgPSB0aGlzLmdldFBlcmNlbnRhZ2VDbGFzc05hbWUoXG4gICAgICAgICAgICAoMSAvIHRvdGFsKSAqIDEwMFxuICAgICAgICAgICk7XG4gICAgICAgICAgZi5jbGFzc05hbWUgPSBgJHtmLmNsYXNzTmFtZX0gJHtwZXJjZW50YWdlQ2xhc3N9YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgcmVtID0gdG90YWwgLSB1c2VkO1xuICAgICAgaWYgKGF1dG8ubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBzaGFyZSA9IE1hdGgubWF4KE1hdGguZmxvb3IocmVtIC8gYXV0by5sZW5ndGgpLCAxKTtcbiAgICAgICAgZm9yIChjb25zdCBhIG9mIGF1dG8pIHtcbiAgICAgICAgICBjb25zdCBwZXJjZW50YWdlQ2xhc3MgPSB0aGlzLmdldFBlcmNlbnRhZ2VDbGFzc05hbWUoXG4gICAgICAgICAgICAoc2hhcmUgLyB0b3RhbCkgKiAxMDBcbiAgICAgICAgICApO1xuICAgICAgICAgIGEuZi5jbGFzc05hbWUgPSBgJHthLmYuY2xhc3NOYW1lfSAke3BlcmNlbnRhZ2VDbGFzc31gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmaWVsZHMucHVzaCguLi5idWlsdCk7XG4gICAgICByZXR1cm4gZmllbGRzO1xuICAgIH07XG4gICAgZm9yIChjb25zdCBjIG9mIFsuLi5jb250cm9scywgLi4ucHJlc2VudGF0aW9uQ29udHJvbHNdKSB7XG4gICAgICBpZiAoXG4gICAgICAgICgndHlwZScgaW4gYyAmJiBjLnR5cGUgPT09IFN0ZXBDb250cm9sVHlwZS5OZXdSb3cpIHx8XG4gICAgICAgIGMudHlwZSA9PSBQcmVzZW50YXRpb25Db250cm9sVHlwZS5OZXdSb3dcbiAgICAgICkge1xuICAgICAgICBpZiAocm93SXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLihhd2FpdCBwcm9jZXNzUm93KHJvd0l0ZW1zKSkpO1xuICAgICAgICAgIHJvd0l0ZW1zID0gW107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvd0l0ZW1zLnB1c2goYyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyb3dJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXN1bHQucHVzaCguLi4oYXdhaXQgcHJvY2Vzc1Jvdyhyb3dJdGVtcykpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldFBpeGVsQ2xhc3NOYW1lKHBpeGVsRGltZW5zaW9uOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IGBwaXhlbC13aWR0aC0ke3BpeGVsRGltZW5zaW9ufWA7XG4gICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjbGFzc05hbWUpKSB7XG4gICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJztcbiAgICAgIHN0eWxlLmlkID0gY2xhc3NOYW1lO1xuICAgICAgc3R5bGUuaW5uZXJIVE1MID0gYFxuICAgICAgICAuJHtjbGFzc05hbWV9IHtcbiAgICAgICAgICB3aWR0aDogJHtwaXhlbERpbWVuc2lvbn1weDtcbiAgICAgICAgfVxuICAgICAgYDtcbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgYXN5bmMgYnVpbGRGb3JtRmllbGRBc3luYyhcbiAgICBzdGVwOiBTdGVwRGF0YSB8IHVuZGVmaW5lZCxcbiAgICBjb250cm9sOiBDb250cm9sRGF0YVxuICApOiBQcm9taXNlPEZvcm1seUZpZWxkQ29uZmlnPiB7XG4gICAgbGV0IGluaXRpYWxUeXBlID0gJ2lucHV0JzsgLy8gRGVmYXVsdCB0eXBlXG4gICAgbGV0IGNvbXBvbmVudFN0eWxlS2V5ID0gYC5jb21wb25lbnQtdGV4dC1maWVsZGA7IC8vIERlZmF1bHQgc3R5bGUgZm9yIHRleHQgaW5wdXRcbiAgICBjb25zdCBiYXNlU3R5bGUgPSB0aGlzLmRlc2lnbltgLmZvbnQtJHtpbml0aWFsVHlwZX1gXSB8fCB7fTtcbiAgICBjb25zdCBjb250cm9sU3R5bGVTdHJpbmcgPVxuICAgICAgdGhpcy5zdHlsZU9iamVjdFRvU3RyaW5nRXhjZXB0QmFja2dyb3VuZChiYXNlU3R5bGUpO1xuICAgIGxldCBwYXR0ZXJuID0gJyc7XG4gICAgaWYgKGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8uYWxsb3dlZENoYXJhY3RlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhdHRlcm4gPSBuZXcgUmVnRXhwKGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YS5hbGxvd2VkQ2hhcmFjdGVycylcbiAgICAgICAgICAuc291cmNlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdpbmNvcnJlY3QgcmVnZXggcGF0dGVybicsIGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudHNUb0V4Y2x1ZGVGcm9tU3R5bGUgPSBbXG4gICAgICAnLmNvbXBvbmVudC10ZXh0LWZpZWxkJyxcbiAgICAgICcuY29tcG9uZW50LWNoZWNrYm94JyxcbiAgICAgICcuY29tcG9uZW50LXJhZGlvJyxcbiAgICAgICcuY29tcG9uZW50LWRhdGUnLFxuICAgICAgJy5jb21wb25lbnQtZGF0YScsXG4gICAgXTtcbiAgICBsZXQgZm9ybWx5Q29uZmlnID0gdGhpcy5nZXREZWZhdWx0Rm9ybWx5RmllbGRDb25maWcoXG4gICAgICBjb250cm9sLFxuICAgICAgaW5pdGlhbFR5cGUsXG4gICAgICBwYXR0ZXJuLFxuICAgICAgY29tcG9uZW50U3R5bGVLZXksXG4gICAgICBjb21wb25lbnRzVG9FeGNsdWRlRnJvbVN0eWxlXG4gICAgKTtcbiAgICAvL2NvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YS50eXBlID09PSAzICBpcyBlbWFpbFxuICAgIGlmIChjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LnR5cGUgPT09IDMpIHtcbiAgICAgIHRoaXMuYWRkVmFsaWRhdG9ycyhmb3JtbHlDb25maWcsIGNvbnRyb2wpO1xuICAgIH1cblxuICAgIGlmIChjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LmlzQXBpVmFsaWRhdGlvbikge1xuICAgICAgdGhpcy5hZGRBcGlWYWxpZGF0b3JzKGZvcm1seUNvbmZpZywgY29udHJvbCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChjb250cm9sLnR5cGUpIHtcbiAgICAgIGNhc2UgU3RlcENvbnRyb2xUeXBlLk1hbnVhbElucHV0OiAvLyBUZXh0XG4gICAgICAgIHZhciBzdWJUeXBlID0gY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhXG4gICAgICAgICAgPy50eXBlIGFzIE1hbnVhbElucHV0Q29udHJvbFR5cGU7XG4gICAgICAgIHN3aXRjaCAoc3ViVHlwZSkge1xuICAgICAgICAgIGNhc2UgTWFudWFsSW5wdXRDb250cm9sVHlwZS5OdW1lcmljOlxuICAgICAgICAgICAgZm9ybWx5Q29uZmlnLnR5cGUgPSAnbnVtYmVyJztcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBNYW51YWxJbnB1dENvbnRyb2xUeXBlLkVtYWlsOlxuICAgICAgICAgIGNhc2UgTWFudWFsSW5wdXRDb250cm9sVHlwZS5UZXh0OlxuICAgICAgICAgIGNhc2UgTWFudWFsSW5wdXRDb250cm9sVHlwZS5QaG9uZTpcbiAgICAgICAgICAgIGZvcm1seUNvbmZpZy50eXBlID0gJ2lucHV0JztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgTWFudWFsSW5wdXRDb250cm9sVHlwZS5UZXh0QXJlYTpcbiAgICAgICAgICAgIGZvcm1seUNvbmZpZy50eXBlID0gJ2lucHV0JztcbiAgICAgICAgICAgIGZvcm1seUNvbmZpZy5wcm9wcyFbJ2F1dG9zaXplJ10gPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbXBvbmVudFN0eWxlS2V5ID0gJy5jb21wb25lbnQtdGV4dC1maWVsZCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIE1hbnVhbElucHV0Q29udHJvbFR5cGUuRGF0ZVRpbWU6XG4gICAgICAgICAgICBmb3JtbHlDb25maWcudHlwZSA9ICdkYXRlcGlja2VyJztcbiAgICAgICAgICAgIGZvcm1seUNvbmZpZy5wcm9wcyA9IHtcbiAgICAgICAgICAgICAgcmVhZG9ubHk6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29tcG9uZW50U3R5bGVLZXkgPSAnLmNvbXBvbmVudC1kYXRlJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBmb3JtbHlDb25maWcudHlwZSA9ICdpbnB1dCc7XG4gICAgICAgICAgICBjb21wb25lbnRTdHlsZUtleSA9ICcuY29tcG9uZW50LXRleHQtZmllbGQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN0ZXBDb250cm9sVHlwZS5QYXJhZ3JhcGg6IC8vIFBhcmFncmFwaFxuICAgICAgICBmb3JtbHlDb25maWcudHlwZSA9ICdmb3JtbHktcGFyYWdyYXBoJztcbiAgICAgICAgY29tcG9uZW50U3R5bGVLZXkgPSAnLmNvbXBvbmVudC10ZXh0LWZpZWxkJztcblxuICAgICAgICBjb25zdCB0cmFuc2xhdGVkRGVzY3JpcHRpb24gPVxuICAgICAgICAgIGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8uZGVzY3JpcHRpb25UcmFuc2xhdGlvbnM/LmZpbmQoXG4gICAgICAgICAgICAoZDogeyBsYW5ndWFnZUlzbzogc3RyaW5nIH0pID0+XG4gICAgICAgICAgICAgIGQubGFuZ3VhZ2VJc28gPT09IHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICAgKT8udmFsdWUgfHwgJyc7XG4gICAgICAgIGZvcm1seUNvbmZpZy5kZWZhdWx0VmFsdWUgPSB0cmFuc2xhdGVkRGVzY3JpcHRpb247XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN0ZXBDb250cm9sVHlwZS5DaGVja0JveDogLy8gQ2hlY2tib3hcbiAgICAgICAgZm9ybWx5Q29uZmlnLnR5cGUgPSAnZm9ybWx5LWNoZWNrYm94JztcbiAgICAgICAgY29tcG9uZW50U3R5bGVLZXkgPSAnLmNvbXBvbmVudC1jaGVja2JveCc7XG4gICAgICAgIHZhciBjaGVja2VkID0gY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5jaGVja2VkID8/IGZhbHNlO1xuICAgICAgICBmb3JtbHlDb25maWcucHJvcHMhWydjaGVja2VkJ10gPSBjaGVja2VkO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU3RlcENvbnRyb2xUeXBlLkRpY3Rpb25hcnk6IC8vIERpY3Rpb25hcnkgKGRyb3Bkb3duKVxuICAgICAgICBjb21wb25lbnRTdHlsZUtleSA9XG4gICAgICAgICAgY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhLnNob3dBc1JhZGlvQnV0dG9uc0xpc3QgPT09IHRydWVcbiAgICAgICAgICAgID8gJy5jb21wb25lbnQtcmFkaW8nXG4gICAgICAgICAgICA6ICcuY29tcG9uZW50LWRhdGEnO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbnN0cnVjdERpY3Rpb25hcnkoY29udHJvbCwgZm9ybWx5Q29uZmlnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN0ZXBDb250cm9sVHlwZS5CdXR0b25zOlxuICAgICAgICBmb3JtbHlDb25maWcudHlwZSA9ICcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU3RlcENvbnRyb2xUeXBlLkZsdXhJbmZvOlxuICAgICAgICBmb3JtbHlDb25maWcudHlwZSA9ICcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU3RlcENvbnRyb2xUeXBlLkRvd25sb2FkRG9jdW1lbnRzOlxuICAgICAgICBmb3JtbHlDb25maWcgPSB0aGlzLkNyZWF0ZURvd25sb2FkRG9jc0ZpZWxkQ29uZmlnKGNvbnRyb2wpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU3RlcENvbnRyb2xUeXBlLlZpZXdEb2N1bWVudHM6XG4gICAgICAgIGZvcm1seUNvbmZpZyA9IHRoaXMuQ3JlYXRlVmlld0RvY3NGaWVsZENvbmZpZyhjb250cm9sKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN0ZXBDb250cm9sVHlwZS5VcGxvYWREb2N1bWVudHM6XG4gICAgICAgIGZvcm1seUNvbmZpZyA9IHRoaXMuQ3JlYXRlVXBsb2FkRG9jc0ZpZWxkQ29uZmlnKGNvbnRyb2wpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU3RlcENvbnRyb2xUeXBlLk5ld1JvdzogLy8gTmV3IFJvd1xuICAgICAgICBmb3JtbHlDb25maWcudHlwZSA9ICcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGZvcm1seUNvbmZpZy50eXBlID0gJ2lucHV0JztcbiAgICAgICAgY29tcG9uZW50U3R5bGVLZXkgPSAnLmNvbXBvbmVudC10ZXh0LWZpZWxkJztcbiAgICB9XG4gICAgZm9ybWx5Q29uZmlnLmNsYXNzTmFtZSA9IGNvbXBvbmVudFN0eWxlS2V5LnN1YnN0cmluZygxKTtcblxuICAgIGlmICghY29tcG9uZW50c1RvRXhjbHVkZUZyb21TdHlsZS5maW5kKChjKSA9PiBjID09PSBjb21wb25lbnRTdHlsZUtleSkpIHtcbiAgICAgIGlmICh0aGlzLmRlc2lnbltjb21wb25lbnRTdHlsZUtleV0pIHtcbiAgICAgICAgZm9ybWx5Q29uZmlnLnByb3BzIS5hdHRyaWJ1dGVzIVsnc3R5bGUnXSArPVxuICAgICAgICAgICc7JyArXG4gICAgICAgICAgdGhpcy5zdHlsZU9iamVjdFRvU3RyaW5nRXhjZXB0QmFja2dyb3VuZChcbiAgICAgICAgICAgIHRoaXMuZGVzaWduW2NvbXBvbmVudFN0eWxlS2V5XVxuICAgICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IGxhYmVsIHN0eWxlc1xuICAgICAgY29uc3QgbGFiZWxTdHlsZUtleSA9IGAke2NvbXBvbmVudFN0eWxlS2V5fS1sYWJlbGA7XG4gICAgICBpZiAodGhpcy5kZXNpZ25bbGFiZWxTdHlsZUtleV0pIHtcbiAgICAgICAgZm9ybWx5Q29uZmlnLnByb3BzIS5hdHRyaWJ1dGVzIVsnc3R5bGUnXSArPVxuICAgICAgICAgICc7JyArXG4gICAgICAgICAgdGhpcy5zdHlsZU9iamVjdFRvU3RyaW5nRXhjZXB0QmFja2dyb3VuZChcbiAgICAgICAgICAgIHRoaXMuZGVzaWduW2NvbXBvbmVudFN0eWxlS2V5XVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb250cm9sLmRlcGVuZGVudERpY3Rpb25hcnkpIHtcbiAgICAgIHRoaXMuYXR0YWNoVG9EZXBlbmRlbnREaWN0aW9uYXJ5SWZOZWNlc3NhcnkoXG4gICAgICAgIGNvbnRyb2wuZGVwZW5kZW50RGljdGlvbmFyeSxcbiAgICAgICAgZm9ybWx5Q29uZmlnXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCB0cmFuc2xhdGVkVGl0bGUgPSBjb250cm9sLnRyYW5zbGF0aW9ucz8uZmluZChcbiAgICAgIChkOiB7IGxhbmd1YWdlSXNvOiBzdHJpbmcgfSkgPT4gZC5sYW5ndWFnZUlzbyA9PT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICApPy52YWx1ZTtcbiAgICBpZiAoIXRyYW5zbGF0ZWRUaXRsZSkge1xuICAgICAgdHJhbnNsYXRlZFRpdGxlID0gY29udHJvbC50aXRsZTtcbiAgICB9XG4gICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnbGFiZWwnXSA9IHRyYW5zbGF0ZWRUaXRsZTtcblxuICAgIHRoaXMuZm9ybWx5Q29sbGVjdGluZ0ZpZWxkcy5wdXNoKGZvcm1seUNvbmZpZyk7XG5cbiAgICByZXR1cm4gZm9ybWx5Q29uZmlnO1xuICB9XG5cbiAgYWRkVmFsaWRhdG9ycyhmb3JtbHlDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnLCBjb250cm9sOiBDb250cm9sRGF0YSkge1xuICAgIHZhciBlbWFpbEVycm9yTGFiZWwgPSB0aGlzLmZsdXg/LmZpbmQoXG4gICAgICAoZikgPT4gZj8uY29uZmlnPy5jb21wb25lbnRDb2xsZWN0ZWQgPT09IGNvbnRyb2w/LmlkZW50aWZpZXJcbiAgICApPy5jb25maWc/LmVtYWlsRXJyb3JMYWJlbDtcbiAgICB2YXIgZW1haWxFcnJvckxhYmVsVmFsdWUgPSAnJztcbiAgICBpZiAoZW1haWxFcnJvckxhYmVsICE9IG51bGwgJiYgQXJyYXkuaXNBcnJheShlbWFpbEVycm9yTGFiZWwpKSB7XG4gICAgICBlbWFpbEVycm9yTGFiZWxWYWx1ZSA9XG4gICAgICAgIChlbWFpbEVycm9yTGFiZWwgYXMgTGFiZWxJbmZvW10pLmZpbmQoXG4gICAgICAgICAgKGwpID0+IGwubGFuZ3VhZ2VJc28gPT09IHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICk/LnZhbHVlID8/ICcnO1xuICAgIH1cblxuICAgIGZvcm1seUNvbmZpZy52YWxpZGF0b3JzID0ge1xuICAgICAgZW1haWxWYWxpZDoge1xuICAgICAgICBleHByZXNzaW9uOiAoY29udDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBjb250LnZhbHVlO1xuICAgICAgICAgIGNvbnN0IGVtYWlsUGF0dGVybiA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXlthLXpBLVowLTkuXyUrLV0rQFthLXpBLVowLTkuLV0rXFxcXC5bYS16QS1aXXsyLH0kJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHZhbHVlICYmICFlbWFpbFBhdHRlcm4udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnQuc2V0RXJyb3JzKHsgaW52YWxpZEVtYWlsOiB0cnVlIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVzc2FnZTogZW1haWxFcnJvckxhYmVsVmFsdWUsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBhZGRBcGlWYWxpZGF0b3JzKGZvcm1seUNvbmZpZzogRm9ybWx5RmllbGRDb25maWcsIGNvbnRyb2w6IENvbnRyb2xEYXRhKSB7XG4gICAgZm9ybWx5Q29uZmlnLmFzeW5jVmFsaWRhdG9ycyA9IHtcbiAgICAgIHZhbGlkYXRlVGhyb3VnaEFwaToge1xuICAgICAgICBleHByZXNzaW9uOiAoY29udDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNvbnQudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxuICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwaVZhbGlkYXRpb25NZXRob2QgPVxuICAgICAgICAgICAgICAgICAgY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhLmFwaVZhbGlkYXRpb25NZXRob2Q7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBib2R5VmFsdWUgPSB0aGlzLmFwcE1vZGVsLnBhcnRuZXJzXG4gICAgICAgICAgICAgICAgICAuZmxhdE1hcCgocCkgPT4gcC5wYXJ0bmVyU2V0dGluZ3MucGFydG5lck1ldGhvZHNBcGkpXG4gICAgICAgICAgICAgICAgICAuZmluZCgocCkgPT4gcC5tZXRob2RJZCA9PT0gYXBpVmFsaWRhdGlvbk1ldGhvZClcbiAgICAgICAgICAgICAgICAgID8uYm9keUNvbmZpZ3VyYXRpb24uYm9keU1hcEZpZWxkcztcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkTWFwOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID1cbiAgICAgICAgICAgICAgICAgIGJvZHlWYWx1ZT8ucmVkdWNlKChhY2M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIGYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGYuZmx1eEZpZWxkSWQgPT09IGNvbnRyb2wuaWRlbnRpZmllcikge1xuICAgICAgICAgICAgICAgICAgICAgIGFjY1tmLnBhcnRuZXJGaWVsZF0gPSBjb250LnZhbHVlIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGFjY1tmLnBhcnRuZXJGaWVsZF0gPSAnJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgICAgICAgfSwge30pIHx8IHt9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YVJlcXVlc3Q6IEFwaVZhbGlkYXRlUmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICAgIGFwcElkOiB0aGlzLmFwcE1vZGVsLmFwcGxpY2F0aW9uSWQsXG4gICAgICAgICAgICAgICAgICBhcGlJZDogYXBpVmFsaWRhdGlvbk1ldGhvZCxcbiAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGZpZWxkTWFwKSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVNZXRob2RBcGkoZGF0YVJlcXVlc3QpLnBpcGUoXG4gICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKGZhbHNlKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSB8fCAnc3Nzc3Nzc3Nzc3Nzc3NzcydcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBtZXNzYWdlOiAnVmFsaWRhdGlvbiBmYWlsZWQuJyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHRGb3JtbHlGaWVsZENvbmZpZyhcbiAgICBjb250cm9sOiBDb250cm9sRGF0YSxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgcGF0dGVybjogc3RyaW5nLFxuICAgIGNvbXBvbmVudFN0eWxlS2V5OiBzdHJpbmcsXG4gICAgY29tcG9uZW50c1RvRXhjbHVkZUZyb21TdHlsZTogc3RyaW5nW11cbiAgKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIGNvbnN0IGN1cnJlbnRMYW5ndWFnZUlkID0gVXRpbHMuZmluZExhbmd1YWdlSWRCeUlzbyhcbiAgICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLFxuICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICApO1xuXG4gICAgbGV0IGZvcm1seUNvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSB7XG4gICAgICBrZXk6IGNvbnRyb2wuaWRlbnRpZmllciB8fCBjb250cm9sLnRpdGxlLFxuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIGN1cnJlbnRMYW5ndWFnZUlzbzogdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICAgIGN1cnJlbnRMYW5ndWFnZUlkOiBjdXJyZW50TGFuZ3VhZ2VJZCxcbiAgICAgICAgbGFiZWw6XG4gICAgICAgICAgY29udHJvbC50cmFuc2xhdGlvbnM/LmZpbmQoXG4gICAgICAgICAgICAodDogeyBsYW5ndWFnZUlzbzogc3RyaW5nIH0pID0+XG4gICAgICAgICAgICAgIHQubGFuZ3VhZ2VJc28gPT09IHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICAgKT8udmFsdWUgfHwgJycsXG5cbiAgICAgICAgdGl0bGU6XG4gICAgICAgICAgY29udHJvbC50cmFuc2xhdGlvbnM/LmZpbmQoXG4gICAgICAgICAgICAodDogeyBsYW5ndWFnZUlzbzogc3RyaW5nIH0pID0+XG4gICAgICAgICAgICAgIHQubGFuZ3VhZ2VJc28gPT09IHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICAgKT8udmFsdWUgfHwgJycsXG4gICAgICAgIGRlc2lnbjogdGhpcy5kZXNpZ24sXG4gICAgICAgIHJlcXVpcmVkOiBjb250cm9sLmlzTWFuZGF0b3J5LFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgc3R5bGU6IGNvbXBvbmVudHNUb0V4Y2x1ZGVGcm9tU3R5bGUuZmluZChcbiAgICAgICAgICAgIChjKSA9PiBjID09PSBjb21wb25lbnRTdHlsZUtleVxuICAgICAgICAgIClcbiAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgIDogY29tcG9uZW50U3R5bGVLZXksXG4gICAgICAgIH0sXG4gICAgICAgIGF1dG9zaXplOiB0cnVlLFxuICAgICAgICBvcHRpb25zOiBbe31dLFxuICAgICAgICBmaWVsZEdyb3VwOiBbXSxcbiAgICAgICAgYXV0b0RpbWVuc2lvbjogY29udHJvbC5hdXRvRGltZW5zaW9uLFxuICAgICAgfSxcbiAgICAgIGV4cHJlc3Npb25zOiB7fSxcbiAgICAgIGhvb2tzOiB7fSxcbiAgICAgIHZhbGlkYXRvcnM6IHt9LFxuICAgIH07XG4gICAgZm9ybWx5Q29uZmlnLnZhbGlkYXRpb24gPSB7fTtcblxuICAgIGlmIChjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LmlzTWFuZGF0b3J5ICYmIGZvcm1seUNvbmZpZy5wcm9wcykge1xuICAgICAgdmFyIHJlcXVpcmVkTWVzc2FnZSA9IFV0aWxzLmZpbmRFcnJvclRyYW5zbGF0aW9uVmFsdWVPckRlZmF1bHQoXG4gICAgICAgIGNvbnRyb2wuZXJyb3JzVHJhbnNsYXRpb25zLFxuICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgICAgJ2lzTWFuZGF0b3J5VmFsaWRhdGlvbidcbiAgICAgICk7XG5cbiAgICAgIGZvcm1seUNvbmZpZy5wcm9wcy5yZXF1aXJlZCA9IGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8uaXNNYW5kYXRvcnk7XG4gICAgICBmb3JtbHlDb25maWcudmFsaWRhdGlvbi5tZXNzYWdlcyA9IHtcbiAgICAgICAgLi4uZm9ybWx5Q29uZmlnLnZhbGlkYXRpb24/Lm1lc3NhZ2VzLFxuICAgICAgICByZXF1aXJlZDogcmVxdWlyZWRNZXNzYWdlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBjb250cm9sLnR5cGUgPT09IFN0ZXBDb250cm9sVHlwZS5EaWN0aW9uYXJ5ICYmXG4gICAgICBjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LmlzTWFuZGF0b3J5ICYmXG4gICAgICBjb250cm9sLmVycm9yc1RyYW5zbGF0aW9ucyAmJlxuICAgICAgZm9ybWx5Q29uZmlnLnByb3BzXG4gICAgKSB7XG4gICAgICB2YXIgcmVxdWlyZWRNZXNzYWdlID0gVXRpbHMuZmluZEVycm9yVHJhbnNsYXRpb25WYWx1ZU9yRGVmYXVsdChcbiAgICAgICAgY29udHJvbC5lcnJvcnNUcmFuc2xhdGlvbnMsXG4gICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvLFxuICAgICAgICAnaXNNYW5kYXRvcnknXG4gICAgICApO1xuXG4gICAgICBmb3JtbHlDb25maWcucHJvcHMucmVxdWlyZWQgPSBjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LmlzTWFuZGF0b3J5O1xuICAgICAgZm9ybWx5Q29uZmlnLnZhbGlkYXRpb24ubWVzc2FnZXMgPSB7XG4gICAgICAgIC4uLmZvcm1seUNvbmZpZy52YWxpZGF0aW9uPy5tZXNzYWdlcyxcbiAgICAgICAgcmVxdWlyZWQ6IHJlcXVpcmVkTWVzc2FnZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IHNpbXBsZVZhbGlkYXRpb25NZXNzYWdlID0gJyc7XG4gICAgaWYgKGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8uaXNTaW1wbGVWYWxpZGF0aW9uICYmIGZvcm1seUNvbmZpZy5wcm9wcykge1xuICAgICAgaWYgKFxuICAgICAgICBjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LmlzU2ltcGxlVmFsaWRhdGlvbiAmJlxuICAgICAgICBmb3JtbHlDb25maWcucHJvcHNcbiAgICAgICkge1xuICAgICAgICBzaW1wbGVWYWxpZGF0aW9uTWVzc2FnZSA9IFV0aWxzLmZpbmRFcnJvclRyYW5zbGF0aW9uVmFsdWVPckRlZmF1bHQoXG4gICAgICAgICAgY29udHJvbC5lcnJvcnNUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICAgICAgJ3NpbXBsZVZhbGlkYXRpb24nXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8ubWluVmFsdWU/LnRvU3RyaW5nKCkpIHtcbiAgICAgICAgICBmb3JtbHlDb25maWcucHJvcHMubWluID0gY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhLm1pblZhbHVlO1xuICAgICAgICAgIGZvcm1seUNvbmZpZy52YWxpZGF0aW9uLm1lc3NhZ2VzID0ge1xuICAgICAgICAgICAgLi4uZm9ybWx5Q29uZmlnLnZhbGlkYXRpb24/Lm1lc3NhZ2VzLFxuICAgICAgICAgICAgbWluOiBzaW1wbGVWYWxpZGF0aW9uTWVzc2FnZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8ubWF4VmFsdWU/LnRvU3RyaW5nKCkpIHtcbiAgICAgICAgICBmb3JtbHlDb25maWcucHJvcHMubWF4ID0gY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhLm1heFZhbHVlO1xuICAgICAgICAgIGZvcm1seUNvbmZpZy52YWxpZGF0aW9uLm1lc3NhZ2VzID0ge1xuICAgICAgICAgICAgLi4uZm9ybWx5Q29uZmlnLnZhbGlkYXRpb24/Lm1lc3NhZ2VzLFxuICAgICAgICAgICAgbWF4OiBzaW1wbGVWYWxpZGF0aW9uTWVzc2FnZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IHBhdHRlcm4gdmFsaWRhdGlvbiBpZiBhbGxvd2VkQ2hhcmFjdGVycyBpcyBkZWZpbmVkXG4gICAgICBpZiAoY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5hbGxvd2VkQ2hhcmFjdGVycykge1xuICAgICAgICBzaW1wbGVWYWxpZGF0aW9uTWVzc2FnZSA9IHNpbXBsZVZhbGlkYXRpb25NZXNzYWdlID1cbiAgICAgICAgICBVdGlscy5maW5kRXJyb3JUcmFuc2xhdGlvblZhbHVlT3JEZWZhdWx0KFxuICAgICAgICAgICAgY29udHJvbC5lcnJvcnNUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgICAgICAgICdzaW1wbGVWYWxpZGF0aW9uJ1xuICAgICAgICAgICk7XG5cbiAgICAgICAgZm9ybWx5Q29uZmlnLnZhbGlkYXRvcnMgPSB7XG4gICAgICAgICAgLi4uZm9ybWx5Q29uZmlnLnZhbGlkYXRvcnMsXG4gICAgICAgICAgY3VzdG9tUGF0dGVybjoge1xuICAgICAgICAgICAgZXhwcmVzc2lvbjogKGM6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWMudmFsdWUpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVnZXgudGVzdChjLnZhbHVlKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICAgc2ltcGxlVmFsaWRhdGlvbk1lc3NhZ2UgfHxcbiAgICAgICAgICAgICAgJ1ZhbHVlIGRvZXMgbm90IG1hdGNoIHRoZSByZXF1aXJlZCBwYXR0ZXJuJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGZvcm1seUNvbmZpZy52YWxpZGF0aW9uLm1lc3NhZ2VzID0ge1xuICAgICAgICAgIC4uLmZvcm1seUNvbmZpZy52YWxpZGF0aW9uPy5tZXNzYWdlcyxcbiAgICAgICAgICBwYXR0ZXJuOiBzaW1wbGVWYWxpZGF0aW9uTWVzc2FnZSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gQXBwbHkgbWF4TGVuZ3RoIHZhbGlkYXRpb24gaWYgbWF4Q2hhcmFjdGVycyBpcyBkZWZpbmVkXG4gICAgICBpZiAoY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5tYXhDaGFyYWN0ZXJzKSB7XG4gICAgICAgIGZvcm1seUNvbmZpZy5wcm9wcy5tYXhMZW5ndGggPVxuICAgICAgICAgIGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8ubWF4Q2hhcmFjdGVycztcbiAgICAgICAgZm9ybWx5Q29uZmlnLnZhbGlkYXRpb24ubWVzc2FnZXMgPSB7XG4gICAgICAgICAgLi4uZm9ybWx5Q29uZmlnLnZhbGlkYXRpb24/Lm1lc3NhZ2VzLFxuICAgICAgICAgIG1heExlbmd0aDogc2ltcGxlVmFsaWRhdGlvbk1lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8uYWxsb3dPbmx5RnV0dXJlIHx8XG4gICAgICAgIGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8uYWxsb3dPbmx5UGFzdFxuICAgICAgKSB7XG4gICAgICAgIGZvcm1seUNvbmZpZy50eXBlID0gJ2RhdGVwaWNrZXInO1xuICAgICAgICBjb25zdCBjaGVja0RhdGVWYWxpZGF0aW9uID0ge1xuICAgICAgICAgIGNoZWNrRGF0ZToge1xuICAgICAgICAgICAgZXhwcmVzc2lvbjogKGM6IEFic3RyYWN0Q29udHJvbCwgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgIHNpbXBsZVZhbGlkYXRpb25NZXNzYWdlID1cbiAgICAgICAgICAgICAgICBVdGlscy5maW5kRXJyb3JUcmFuc2xhdGlvblZhbHVlT3JEZWZhdWx0KFxuICAgICAgICAgICAgICAgICAgY29udHJvbC5lcnJvcnNUcmFuc2xhdGlvbnMsXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgICAgICAgICAgICAgICdzaW1wbGVWYWxpZGF0aW9uJ1xuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICBjdXJyZW50RGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcblxuICAgICAgICAgICAgICBpZiAoY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5hbGxvd09ubHlGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWMudmFsdWUgfHwgYy52YWx1ZSA9PT0gJycpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBjLnZhbHVlID4gY3VycmVudERhdGU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8uYWxsb3dPbmx5UGFzdCkge1xuICAgICAgICAgICAgICAgIGlmICghYy52YWx1ZSB8fCBjLnZhbHVlID09PSAnJykgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMudmFsdWUgPCBjdXJyZW50RGF0ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXNzYWdlOiAoZXJyb3I6IGFueSwgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBzaW1wbGVWYWxpZGF0aW9uTWVzc2FnZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgZm9ybWx5Q29uZmlnLnZhbGlkYXRvcnMgPSB7XG4gICAgICAgICAgLi4uZm9ybWx5Q29uZmlnLnZhbGlkYXRvcnMsXG4gICAgICAgICAgLi4uY2hlY2tEYXRlVmFsaWRhdGlvbixcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL2NvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YS50eXBlID09PSA0ICBpcyBwaG9uZVxuICAgIGlmIChjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LnR5cGUgPT09IDQpIHtcbiAgICAgIHZhciBwaG9uZUVycm9yTGFiZWwgPSB0aGlzLmZsdXg/LmZpbmQoXG4gICAgICAgIChmKSA9PiBmPy5jb25maWc/LmNvbXBvbmVudENvbGxlY3RlZCA9PT0gY29udHJvbD8uaWRlbnRpZmllclxuICAgICAgKT8uY29uZmlnPy5waG9uZUVycm9yTGFiZWw7XG4gICAgICB2YXIgcGhvbmVFcnJvckxhYmVsVmFsdWUgPSAnJztcbiAgICAgIGlmIChwaG9uZUVycm9yTGFiZWwgIT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KHBob25lRXJyb3JMYWJlbCkpIHtcbiAgICAgICAgcGhvbmVFcnJvckxhYmVsVmFsdWUgPVxuICAgICAgICAgIChwaG9uZUVycm9yTGFiZWwgYXMgTGFiZWxJbmZvW10pLmZpbmQoXG4gICAgICAgICAgICAobCkgPT4gbC5sYW5ndWFnZUlzbyA9PT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgICApPy52YWx1ZSA/PyAnJztcbiAgICAgIH1cblxuICAgICAgZm9ybWx5Q29uZmlnLnZhbGlkYXRvcnMgPSB7XG4gICAgICAgIHBob25lVmFsaWQ6IHtcbiAgICAgICAgICBleHByZXNzaW9uOiAoY29udDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbnQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBwaG9uZVBhdHRlcm4gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAnXihcXFxcKzR8KT8oMDdbMC04XXsxfVswLTldezF9fDAyWzAtOV17Mn18MDNbMC05XXsyfSl7MX0/KFxcXFxzfFxcXFwufC0pPyhbMC05XXszfShcXFxcc3xcXFxcLnwtfCkpezJ9JCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgIXBob25lUGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICBjb250LnNldEVycm9ycyh7IGludmFsaWRQaG9uZU51bWJlcjogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXNzYWdlOiBwaG9uZUVycm9yTGFiZWxWYWx1ZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YT8udHlwZSA9PT0gMikge1xuICAgICAgY29uc3QgY2hlY2tEYXRlMlZhbGlkYXRpb24gPSB7XG4gICAgICAgIGNoZWNrRGF0ZTI6IHtcbiAgICAgICAgICBleHByZXNzaW9uOiAoYzogQWJzdHJhY3RDb250cm9sLCBmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHtcbiAgICAgICAgICAgIHZhciBkYXRlVmFsdWUgPSBjLnZhbHVlO1xuICAgICAgICAgICAgaWYgKCFkYXRlVmFsdWUgJiYgY29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhPy5pc01hbmRhdG9yeSkge1xuICAgICAgICAgICAgICBzaW1wbGVWYWxpZGF0aW9uTWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgVXRpbHMuZmluZEVycm9yVHJhbnNsYXRpb25WYWx1ZU9yRGVmYXVsdChcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZXJyb3JzVHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICAgICAgICAgICAgICAnaXNNYW5kYXRvcnlWYWxpZGF0aW9uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaXNOYU4oRGF0ZS5wYXJzZShkYXRlVmFsdWUpKSAmJlxuICAgICAgICAgICAgICBjb250cm9sLnNwZWNpZmljQ29udHJvbERhdGE/LmlzTWFuZGF0b3J5XG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXNzYWdlOiAoZXJyb3I6IGFueSwgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2ltcGxlVmFsaWRhdGlvbk1lc3NhZ2UgPT09ICcnKVxuICAgICAgICAgICAgICByZXR1cm4gJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGRhdGUnO1xuXG4gICAgICAgICAgICByZXR1cm4gc2ltcGxlVmFsaWRhdGlvbk1lc3NhZ2U7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBmb3JtbHlDb25maWcudmFsaWRhdG9ycyA9IHtcbiAgICAgICAgLi4uZm9ybWx5Q29uZmlnLnZhbGlkYXRvcnMsXG4gICAgICAgIC4uLmNoZWNrRGF0ZTJWYWxpZGF0aW9uLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWx5Q29uZmlnO1xuICB9XG5cbiAgYXN5bmMgYnVpbGRQcmVzZW50YXRpb25Gb3JtRmllbGRBc3luYyhcbiAgICBzdGVwOiBTdGVwRGF0YSB8IHVuZGVmaW5lZCxcbiAgICBjb250cm9sOiBQcmVzZW50YXRpb25Db250cm9sXG4gICk6IFByb21pc2U8Rm9ybWx5RmllbGRDb25maWc+IHtcbiAgICBsZXQgZm9ybWx5Q29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZyA9IHsgcHJvcHM6IHt9IH07XG5cbiAgICBmb3JtbHlDb25maWcudHlwZSA9ICdmb3JtbHktcGFyYWdyYXBoJztcbiAgICBmb3JtbHlDb25maWcuY2xhc3NOYW1lID0gJ2NvbXBvbmVudC10ZXh0LWZpZWxkJztcbiAgICBmb3JtbHlDb25maWcucHJvcHMhWydkZXNpZ24nXSA9IHRoaXMuYXBwTW9kZWwuZ2VuZXJhdGVkQ3NzO1xuXG4gICAgdmFyIHRyYW5zbGF0ZWRUaXRsZSA9XG4gICAgICBjb250cm9sLnRyYW5zbGF0aW9ucy5maW5kKChkKSA9PiBkLmxhbmd1YWdlSXNvID09IHRoaXMuY3VycmVudExhbmd1YWdlSXNvKVxuICAgICAgICA/LnZhbHVlID8/XG4gICAgICBjb250cm9sLnRpdGxlID8/XG4gICAgICAnJztcblxuICAgIGlmIChjb250cm9sLnR5cGUgPT0gUHJlc2VudGF0aW9uQ29udHJvbFR5cGUuUGFyYWdyYXBoKSB7XG4gICAgICBjb25zdCBwYXJhZ3JhcGhDb250cm9sID0gY29udHJvbCBhcyBQcmVzZW50YXRpb25QYXJhZ3JhcGhDb250cm9sO1xuXG4gICAgICB2YXIgdHJhbnNsYXRlZERlc2NyaXB0aW9uID1cbiAgICAgICAgcGFyYWdyYXBoQ29udHJvbC5zcGVjaWZpY0NvbnRyb2xEYXRhLmRlc2NyaXB0aW9uVHJhbnNsYXRpb25zLmZpbmQoXG4gICAgICAgICAgKGQ6IGFueSkgPT4gZC5sYW5ndWFnZUlzbyA9PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICApPy52YWx1ZSA/PyAnJztcbiAgICAgIHZhciB0cmFuc2xhdGVkUGFyYWdyYXBoVGl0bGUgPVxuICAgICAgICBwYXJhZ3JhcGhDb250cm9sLnNwZWNpZmljQ29udHJvbERhdGEudGV4dC5maW5kKFxuICAgICAgICAgIChkOiBhbnkpID0+IGQubGFuZ3VhZ2VJc28gPT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc29cbiAgICAgICAgKT8udmFsdWUgPz8gJyc7XG5cbiAgICAgIGZvcm1seUNvbmZpZy5kZWZhdWx0VmFsdWUgPSB0cmFuc2xhdGVkRGVzY3JpcHRpb247XG4gICAgICBmb3JtbHlDb25maWcucHJvcHMhWyd0cmFuc2xhdGVkRGVzY3JpcHRpb24nXSA9IHRyYW5zbGF0ZWREZXNjcmlwdGlvbjtcbiAgICAgIGZvcm1seUNvbmZpZy5wcm9wcyFbJ3RyYW5zbGF0ZWRQYXJhZ3JhcGhUaXRsZSddID1cbiAgICAgICAgdHJhbnNsYXRlZFBhcmFncmFwaFRpdGxlO1xuICAgICAgZm9ybWx5Q29uZmlnLnR5cGUgPSAnZm9ybWx5LXBhcmFncmFwaCc7XG4gICAgICBmb3JtbHlDb25maWcuY2xhc3NOYW1lID0gJ2NvbXBvbmVudC10ZXh0LWZpZWxkJztcbiAgICB9IGVsc2UgaWYgKGNvbnRyb2wudHlwZSA9PSBQcmVzZW50YXRpb25Db250cm9sVHlwZS5Eb3dubG9hZCkge1xuICAgICAgZm9ybWx5Q29uZmlnID0gdGhpcy5DcmVhdGVEb3dubG9hZERvY3NGaWVsZENvbmZpZyhjb250cm9sKTtcbiAgICB9IGVsc2UgaWYgKGNvbnRyb2wudHlwZSA9PSBQcmVzZW50YXRpb25Db250cm9sVHlwZS5WaWV3KSB7XG4gICAgICBmb3JtbHlDb25maWcgPSB0aGlzLkNyZWF0ZVZpZXdEb2NzRmllbGRDb25maWcoY29udHJvbCk7XG4gICAgfSBlbHNlIGlmIChjb250cm9sLnR5cGUgPT0gUHJlc2VudGF0aW9uQ29udHJvbFR5cGUuU3RhdHVzKSB7XG4gICAgICBsZXQgc3RhdHVzTmFtZSA9XG4gICAgICAgIHRoaXMuYXBwTW9kZWwuc3RhdHVzZXMuZmluZChcbiAgICAgICAgICAocykgPT4gcy5pZCA9PT0gdGhpcy5maWxsRGF0YT8ubWV0YWRhdGEuc3RhdHVzSWRcbiAgICAgICAgKT8ubmFtZSB8fCAnbm8gc3RhdHVzIG5hbWUnO1xuXG4gICAgICBmb3JtbHlDb25maWcuZGVmYXVsdFZhbHVlID0gc3RhdHVzTmFtZTtcbiAgICAgIGZvcm1seUNvbmZpZy50eXBlID0gJ2Zvcm1seS1wYXJhZ3JhcGgnO1xuICAgICAgZm9ybWx5Q29uZmlnLmNsYXNzTmFtZSA9ICdjb21wb25lbnQtdGV4dC1maWVsZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgY29udHJvbC50eXBlID09IFByZXNlbnRhdGlvbkNvbnRyb2xUeXBlLkZsdXhDb21wb25lbnQgJiZcbiAgICAgICAgdGhpcy5jb250cm9sSWRzV2l0aFZhbHVlcyAmJlxuICAgICAgICBjb250cm9sLmNvbGxlY3Rpb25Db250cm9sSWRlbnRpZmllclxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGZpbGxWYWx1ZSA9XG4gICAgICAgICAgdGhpcy5jb250cm9sSWRzV2l0aFZhbHVlc1tjb250cm9sLmNvbGxlY3Rpb25Db250cm9sSWRlbnRpZmllcl07XG4gICAgICAgIGlmIChmaWxsVmFsdWUpIHtcbiAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBmaWxsVmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgICBmb3JtbHlDb25maWcuZGVmYXVsdFZhbHVlID0gZmlsbFZhbHVlID8gJyZjaGVjazsnIDogJyZjcm9zczsnO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgaWYgKGZpbGxWYWx1ZT8ubmFtZSkge1xuICAgICAgICAgICAgICAgIGZvcm1seUNvbmZpZy5kZWZhdWx0VmFsdWUgPSBmaWxsVmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtbHlDb25maWcuZGVmYXVsdFZhbHVlID0gZmlsbFZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvcm1seUNvbmZpZy5pZCA9IGNvbnRyb2wuaWRlbnRpZmllcjtcbiAgICBmb3JtbHlDb25maWcucHJvcHMhWydpc0Rpc3BsYXlNb2RlJ10gPSB0cnVlO1xuICAgIGZvcm1seUNvbmZpZy5wcm9wcyFbJ2NvbGxlY3Rpb25Db250cm9sSWRlbnRpZmllciddID1cbiAgICAgIGNvbnRyb2wuY29sbGVjdGlvbkNvbnRyb2xJZGVudGlmaWVyO1xuICAgIGZvcm1seUNvbmZpZy5wcm9wcyFbJ2xhYmVsJ10gPSB0cmFuc2xhdGVkVGl0bGU7XG4gICAgZm9ybWx5Q29uZmlnLnByb3BzIVsnbGFuZ0lzbyddID0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc287XG5cbiAgICB0aGlzLmZvcm1seVByZXNlbnRhdGlvbkZpZWxkcy5wdXNoKGZvcm1seUNvbmZpZyk7XG5cbiAgICByZXR1cm4gZm9ybWx5Q29uZmlnO1xuICB9XG5cbiAgYXN5bmMgYnVpbGRBcGlNZXRob2RGb3JtRmllbGRBc3luYyhcbiAgICBzdGVwOiBTdGVwRGF0YSB8IHVuZGVmaW5lZCxcbiAgICBjb250cm9sOiBQcmVzZW50YXRpb25Db250cm9sXG4gICk6IFByb21pc2U8Rm9ybWx5RmllbGRDb25maWc+IHtcbiAgICBsZXQgZm9ybWx5Q29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZyA9IHsgcHJvcHM6IHt9IH07XG5cbiAgICBmb3JtbHlDb25maWcudHlwZSA9ICdmb3JtbHktcGFyYWdyYXBoJztcbiAgICBmb3JtbHlDb25maWcuY2xhc3NOYW1lID0gJ2NvbXBvbmVudC10ZXh0LWZpZWxkJztcbiAgICBmb3JtbHlDb25maWcucHJvcHMhWydkZXNpZ24nXSA9IHRoaXMuYXBwTW9kZWwuZ2VuZXJhdGVkQ3NzO1xuXG4gICAgdmFyIHRyYW5zbGF0ZWRUaXRsZSA9XG4gICAgICBjb250cm9sLnRyYW5zbGF0aW9ucy5maW5kKChkKSA9PiBkLmxhbmd1YWdlSXNvID09IHRoaXMuY3VycmVudExhbmd1YWdlSXNvKVxuICAgICAgICA/LnZhbHVlID8/XG4gICAgICBjb250cm9sLnRpdGxlID8/XG4gICAgICAnJztcblxuICAgIGZvcm1seUNvbmZpZy5pZCA9IGNvbnRyb2wuaWRlbnRpZmllcjtcbiAgICBmb3JtbHlDb25maWcucHJvcHMhWydpc0Rpc3BsYXlNb2RlJ10gPSB0cnVlO1xuICAgIGZvcm1seUNvbmZpZy5wcm9wcyFbJ2FwaU1ldGhvZElkJ10gPSBjb250cm9sLmFwaU1ldGhvZElkO1xuICAgIGZvcm1seUNvbmZpZy5wcm9wcyFbJ2FwaU1ldGhvZEZpZWxkSWQnXSA9IGNvbnRyb2wuYXBpTWV0aG9kRmllbGRJZDtcbiAgICBmb3JtbHlDb25maWcucHJvcHMhWydsYWJlbCddID0gdHJhbnNsYXRlZFRpdGxlO1xuXG4gICAgaWYgKGNvbnRyb2wuYXBpTWV0aG9kRmllbGRJZCkge1xuICAgICAgY29uc3QgdmFsID0gdGhpcy5maW5kSW5BcGlDYWxsc1Jlc3BvbnNlcyhjb250cm9sLmFwaU1ldGhvZEZpZWxkSWQpO1xuICAgICAgZm9ybWx5Q29uZmlnLmRlZmF1bHRWYWx1ZSA9IHZhbDtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm1seVByZXNlbnRhdGlvbkZpZWxkcy5wdXNoKGZvcm1seUNvbmZpZyk7XG5cbiAgICByZXR1cm4gZm9ybWx5Q29uZmlnO1xuICB9XG5cbiAgcHJpdmF0ZSBhdHRhY2hUb0RlcGVuZGVudERpY3Rpb25hcnlJZk5lY2Vzc2FyeShcbiAgICBkZXBlbmRlbnREaWN0aW9uYXJ5OiBEZXBlbmRlbnREaWN0aW9uYXJ5RGF0YSxcbiAgICBmb3JtbHlDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnXG4gICkge1xuICAgIC8vIEhhbmRsZSBkaWN0aW9uYXJ5IGRlcGVuZGVuY2llc1xuICAgIGlmIChcbiAgICAgIGRlcGVuZGVudERpY3Rpb25hcnkgJiZcbiAgICAgIGRlcGVuZGVudERpY3Rpb25hcnkuZGljdGlvbmFyeUNvbnRyb2xJZGVudGlmaWVyXG4gICAgKSB7XG4gICAgICBjb25zdCBwYXJlbnRLZXkgPSBkZXBlbmRlbnREaWN0aW9uYXJ5LmRpY3Rpb25hcnlDb250cm9sSWRlbnRpZmllcjtcbiAgICAgIGNvbnN0IGRlcGVuZGVudFZhbHVlSWRzID0gZGVwZW5kZW50RGljdGlvbmFyeS5kZXBlbmRlbnRWYWx1ZUlkcyB8fCBbXTtcblxuICAgICAgZm9ybWx5Q29uZmlnLmV4cHJlc3Npb25zID0ge1xuICAgICAgICBoaWRlOiAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IHRoaXMuc2hvdWxkU2hvd0RlcGVuZGVudEZpZWxkKFxuICAgICAgICAgICAgcGFyZW50S2V5LFxuICAgICAgICAgICAgZGVwZW5kZW50VmFsdWVJZHMsXG4gICAgICAgICAgICB0aGlzLm1vZGVsXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gIXNob3VsZFNob3c7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoVG9WYWx1ZUNoYW5nZXMoY29udHJvbElkOiBzdHJpbmcsIG9wdGlvbnM6IEZvcm1seUZpZWxkQ29uZmlnKSB7XG4gICAgb3B0aW9ucy5wcm9wcyFbJ29uU2VsZWN0ZWRWYWx1ZUNoYW5nZWQnXSA9IGFzeW5jICh2YWw6IGFueSkgPT4ge1xuICAgICAgdGhpcy5tb2RlbFtjb250cm9sSWRdID0gdmFsO1xuICAgICAgdmFyIHJlZmVyZW5jZURpY3Rpb25hcmllcyA9IEFycmF5LmZyb20oXG4gICAgICAgIHRoaXMuZGljdGlvbmFyeU1hcC52YWx1ZXMoKVxuICAgICAgKS5maWx0ZXIoKGQpID0+IGQucmVmZXJlbmNlSWQgPT0gdmFsLmRpY3Rpb25hcnlJZCk7XG4gICAgICBpZiAocmVmZXJlbmNlRGljdGlvbmFyaWVzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlUmVmZXJlbmNlRmllbGRzKG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciByZWZlcmVuY2VEaWN0aW9uYXJpZXNXaXRoRmlsdGVyZWRWYWx1ZXMgPVxuICAgICAgICAgIHRoaXMuY3JlYXRlUmVmZXJlbmNlRGljdGlvbmFyaWVzRnJvbVNlbGVjdGVkVmFsdWUoXG4gICAgICAgICAgICByZWZlcmVuY2VEaWN0aW9uYXJpZXMsXG4gICAgICAgICAgICB2YWxcbiAgICAgICAgICApO1xuICAgICAgICBjb25zdCBwYXJlbnRTcGVjaWZpY0RhdGEgPSBvcHRpb25zLnByb3BzPy5bXG4gICAgICAgICAgJ3NwZWNpZmljRGF0YSdcbiAgICAgICAgXSBhcyBEaWN0aW9uYXJ5Q29udHJvbERhdGE7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRkUmVmZXJlbmNlRGljdGlvbmFyeUZpZWxkc0lmTmVjZXNzYXJ5KFxuICAgICAgICAgIHJlZmVyZW5jZURpY3Rpb25hcmllc1dpdGhGaWx0ZXJlZFZhbHVlcyxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIG9wdGlvbnMudHlwZSxcbiAgICAgICAgICBwYXJlbnRTcGVjaWZpY0RhdGE/LnJlbGF0ZWREaWN0aW9uYXJpZXNUcmFuc2xhdGlvbnMgfHwgW11cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlUmVmZXJlbmNlRmllbGRzKG9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVGb3JtbHlDb25maWcoKTtcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlUmVmZXJlbmNlRGljdGlvbmFyaWVzRnJvbVNlbGVjdGVkVmFsdWUoXG4gICAgYWxsRGljdGlvbmFyaWVzOiBEaWN0aW9uYXJ5RHRvW10sXG4gICAgc2VsZWN0ZWRWYWx1ZTogYW55XG4gICk6IERpY3Rpb25hcnlEdG9bXSB7XG4gICAgY29uc3QgbmV3RGljdGlvbmFyaWVzOiBEaWN0aW9uYXJ5RHRvW10gPSBbXTtcblxuICAgIGFsbERpY3Rpb25hcmllcy5mb3JFYWNoKChkaWN0aW9uYXJ5KSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZFZhbHVlcyA9XG4gICAgICAgIGRpY3Rpb25hcnkudmFsdWVzPy5maWx0ZXIoKHZhbHVlKSA9PlxuICAgICAgICAgIHZhbHVlLnJlZmVyZW5jZVZhbHVlcy5zb21lKFxuICAgICAgICAgICAgKHJlZlZhbHVlKSA9PiByZWZWYWx1ZS5pZCA9PT0gc2VsZWN0ZWRWYWx1ZS5pZFxuICAgICAgICAgIClcbiAgICAgICAgKSB8fCBbXTtcblxuICAgICAgaWYgKGZpbHRlcmVkVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV3RGljdGlvbmFyeTogRGljdGlvbmFyeUR0byA9IHtcbiAgICAgICAgICAuLi5kaWN0aW9uYXJ5LFxuICAgICAgICAgIHZhbHVlczogZmlsdGVyZWRWYWx1ZXMsXG4gICAgICAgIH07XG5cbiAgICAgICAgbmV3RGljdGlvbmFyaWVzLnB1c2gobmV3RGljdGlvbmFyeSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3RGljdGlvbmFyaWVzO1xuICB9XG5cbiAgc2hvdWxkU2hvd0RlcGVuZGVudEZpZWxkKFxuICAgIHBhcmVudEtleTogc3RyaW5nLFxuICAgIGRlcGVuZGVudFZhbHVlSWRzOiBudW1iZXJbXSxcbiAgICBtb2RlbDogYW55ID0ge31cbiAgKTogYm9vbGVhbiB7XG4gICAgLy8gUmV0cmlldmUgdGhlIHZhbHVlIG9mIHRoZSBwYXJlbnQgZGljdGlvbmFyeSBjb250cm9sXG4gICAgY29uc3QgcGFyZW50VmFsdWUgPSB0aGlzLmdldE5lc3RlZFZhbHVlKFxuICAgICAgbW9kZWwsXG4gICAgICBwYXJlbnRLZXlcbiAgICApIGFzIERpY3Rpb25hcnlWYWx1ZTtcblxuICAgIGNvbnN0IGlkVmFsdWUgPSBwYXJlbnRWYWx1ZT8uaWRcbiAgICAgID8gcGFyZW50VmFsdWUuaWRcbiAgICAgIDogKHBhcmVudFZhbHVlIGFzIHVua25vd24gYXMgbnVtYmVyKTtcbiAgICAvLyBDaGVjayBpZiB0aGUgcGFyZW50IHZhbHVlIGlzIGluIHRoZSBkZXBlbmRlbnRWYWx1ZUlkc1xuICAgIGlmIChwYXJlbnRWYWx1ZSAmJiBkZXBlbmRlbnRWYWx1ZUlkcy5pbmNsdWRlcyhpZFZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldE5lc3RlZFZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IGtleXMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgbGV0IHZhbHVlID0gb2JqO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIHZhbHVlID0gdmFsdWVba2V5XTtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHN1Ym1pdCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnRm9ybSBEYXRhOicsIHRoaXMuZm9ybS52YWx1ZSk7XG4gICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XG4gICAgICBjb25zb2xlLmxvZygnRm9ybSBkYXRhIGhhcyB2YWxpZGF0aW9uIGVycm9ycy4nKTtcbiAgICAgIHRoaXMuc2Nyb2xsVG9FcnJvclNlcnZpY2Uuc2Nyb2xsVG9GaXJzdEVycm9yKHRoaXMuZm9ybSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBtZXRob2QgdG8gdHJpZ2dlciBzY3JvbGwgdG8gZmlyc3QgZXJyb3IgLSBjYW4gYmUgY2FsbGVkIGZyb20gb3RoZXIgY29tcG9uZW50c1xuICAgKi9cbiAgcHVibGljIHNjcm9sbFRvRmlyc3RWYWxpZGF0aW9uRXJyb3IoKTogdm9pZCB7XG4gICAgdGhpcy5zY3JvbGxUb0Vycm9yU2VydmljZS5zY3JvbGxUb0ZpcnN0RXJyb3IodGhpcy5mb3JtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaWMgbWV0aG9kIHRvIHNjcm9sbCB0byBhIHNwZWNpZmljIGZpZWxkIGJ5IG5hbWVcbiAgICovXG4gIHB1YmxpYyBzY3JvbGxUb0ZpZWxkKGZpZWxkTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zY3JvbGxUb0Vycm9yU2VydmljZS5zY3JvbGxUb0ZpZWxkKGZpZWxkTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogRGVidWcgbWV0aG9kIHRvIGhlbHAgdHJvdWJsZXNob290IHNjcm9sbCBpc3N1ZXNcbiAgICovXG4gIHB1YmxpYyBkZWJ1Z0Zvcm1FbGVtZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLnNjcm9sbFRvRXJyb3JTZXJ2aWNlLmRlYnVnTG9nRm9ybUVsZW1lbnRzKCk7XG4gIH1cblxuICBhc3luYyBjb25zdHJ1Y3REaWN0aW9uYXJ5KFxuICAgIGNvbnRyb2w6IENvbnRyb2xEYXRhLFxuICAgIG9wdGlvbnM6IEZvcm1seUZpZWxkQ29uZmlnXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNwZWNpZmljRGF0YSA9IGNvbnRyb2wuc3BlY2lmaWNDb250cm9sRGF0YTtcblxuICAgIC8vIERldGVybWluZSBjb21wb25lbnQgdHlwZSBiYXNlZCBvbiBzZXR0aW5nc1xuICAgIGlmIChzcGVjaWZpY0RhdGEuc2hvd0FzQ2hlY2tib3hlcyA9PT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy50eXBlID0gJ2Zvcm1seS1jaGVja2JveGVzJztcbiAgICB9IGVsc2UgaWYgKHNwZWNpZmljRGF0YS5zaG93QXNSYWRpb0J1dHRvbnNMaXN0ID09PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLnR5cGUgPSAnZm9ybWx5LXJhZGlvJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucy50eXBlID0gJ2Zvcm1seS1kaWN0aW9uYXJ5LWRyb3Bkb3duLXRyZWUnO1xuICAgIH1cblxuICAgIG9wdGlvbnMucHJvcHMhWydzcGVjaWZpY0RhdGEnXSA9IHNwZWNpZmljRGF0YTtcblxuICAgIGNvbnN0IGRpY3Rpb25hcnlVdWlkID0gc3BlY2lmaWNEYXRhLmRpY3Rpb25hcnlVVUlEO1xuXG4gICAgaWYgKGRpY3Rpb25hcnlVdWlkKSB7XG4gICAgICBjb25zdCBkaWN0aW9uYXJ5ID0gdGhpcy5kaWN0aW9uYXJ5TWFwLmdldChkaWN0aW9uYXJ5VXVpZCk7XG4gICAgICBpZiAoZGljdGlvbmFyeSkge1xuICAgICAgICBpZiAoZGljdGlvbmFyeS5yZWZlcmVuY2VJZCkge1xuICAgICAgICAgIG9wdGlvbnMucHJvcHMhWydkaWN0aW9uYXJ5SWQnXSA9IGRpY3Rpb25hcnlVdWlkO1xuICAgICAgICAgIHRoaXMuY29uc3RydWN0RGljdGlvbmFyeVdpdGhSZWZlcmVuY2VzKFxuICAgICAgICAgICAgZGljdGlvbmFyeSxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBzcGVjaWZpY0RhdGFcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuYXR0YWNoVG9WYWx1ZUNoYW5nZXMoY29udHJvbC5pZGVudGlmaWVyLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUeXBlIGlzIGFscmVhZHkgc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1ldGhvZFxuICAgICAgICAgIG9wdGlvbnMucHJvcHMhWydkaWN0aW9uYXJ5SWQnXSA9IGRpY3Rpb25hcnlVdWlkO1xuICAgICAgICAgIHRoaXMuY29uc3RydWN0RGljdGlvbmFyeVdpdGhSZWZlcmVuY2VzKFxuICAgICAgICAgICAgZGljdGlvbmFyeSxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBzcGVjaWZpY0RhdGFcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuYXR0YWNoVG9WYWx1ZUNoYW5nZXMoY29udHJvbC5pZGVudGlmaWVyLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBEaWN0aW9uYXJ5IG5vdCBmb3VuZCBmb3IgVVVJRCAke2RpY3Rpb25hcnlVdWlkfWApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBVVUlEIG5vdCBmb3VuZCBmb3IgZGljdGlvbmFyeSBJRCAke3NwZWNpZmljRGF0YS5kaWN0aW9uYXJ5SWR9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmREaWN0aW9uYXJ5VmFsdWVPYmplY3QoXG4gICAgZGljdGlvbmFyeTogRGljdGlvbmFyeUR0byB8IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogYW55XG4gICk6IERpY3Rpb25hcnlWYWx1ZUR0byB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKFxuICAgICAgIWRpY3Rpb25hcnkgfHxcbiAgICAgICFkaWN0aW9uYXJ5LnZhbHVlcyB8fFxuICAgICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICAgIHZhbHVlID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlPy5pZCAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gZGljdGlvbmFyeS52YWx1ZXMuZmluZCgodikgPT4gdi5pZCA9PT0gdmFsdWUuaWQpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB2YWx1ZUlkID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgIGlmICghaXNOYU4odmFsdWVJZCkpIHtcbiAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnkudmFsdWVzLmZpbmQoKHYpID0+IHYuaWQgPT09IHZhbHVlSWQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplUmVmZXJlbmNlRmllbGRzKFxuICAgIGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSxcbiAgICByb290Q29uZmlnOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gdGhpcy5mb3JtbHlDb25maWdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFmaWVsZHMpIHJldHVybjtcbiAgICBjb25zdCBmaWVsZHNUb1Byb2Nlc3MgPSBbLi4uZmllbGRzXTtcblxuICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzVG9Qcm9jZXNzKSB7XG4gICAgICBjb25zdCBmaWVsZEtleSA9IGZpZWxkLmtleSBhcyBzdHJpbmc7XG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkS2V5ICYmXG4gICAgICAgIGZpZWxkLnByb3BzPy5bJ2RpY3Rpb25hcnlJZCddICYmXG4gICAgICAgIGZpZWxkLnByb3BzPy5bJ3NwZWNpZmljRGF0YSddXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoZmllbGRLZXkpO1xuICAgICAgICBjb25zdCBzcGVjaWZpY0RhdGEgPSBmaWVsZC5wcm9wc1tcbiAgICAgICAgICAnc3BlY2lmaWNEYXRhJ1xuICAgICAgICBdIGFzIERpY3Rpb25hcnlDb250cm9sRGF0YTtcbiAgICAgICAgY29uc3QgZGljdGlvbmFyeVV1aWQgPSBmaWVsZC5wcm9wc1snZGljdGlvbmFyeUlkJ10gYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBtYWluRGljdGlvbmFyeSA9IHRoaXMuZGljdGlvbmFyeU1hcC5nZXQoZGljdGlvbmFyeVV1aWQpO1xuXG4gICAgICAgIGxldCB2YWx1ZVRvVXNlOiBhbnkgPSBudWxsO1xuXG4gICAgICAgIGlmIChjb250cm9sICYmIGNvbnRyb2wudmFsdWUgIT09IG51bGwgJiYgY29udHJvbC52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFsdWVUb1VzZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgZmllbGQuZGVmYXVsdFZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgZmllbGQuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFsdWVUb1VzZSA9IGZpZWxkLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0aGlzLm1vZGVsICYmXG4gICAgICAgICAgdGhpcy5tb2RlbFtmaWVsZEtleV0gIT09IG51bGwgJiZcbiAgICAgICAgICB0aGlzLm1vZGVsW2ZpZWxkS2V5XSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHZhbHVlVG9Vc2UgPSB0aGlzLm1vZGVsW2ZpZWxkS2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzZWxlY3RlZFZhbHVlT2JqZWN0OiBEaWN0aW9uYXJ5VmFsdWVEdG8gfCB1bmRlZmluZWQgfCBudWxsID0gbnVsbDtcbiAgICAgICAgaWYgKHZhbHVlVG9Vc2UgIT09IG51bGwgJiYgbWFpbkRpY3Rpb25hcnk/LmlkICE9IG51bGwpIHtcbiAgICAgICAgICBzZWxlY3RlZFZhbHVlT2JqZWN0ID0gdGhpcy5maW5kRGljdGlvbmFyeVZhbHVlT2JqZWN0KFxuICAgICAgICAgICAgbWFpbkRpY3Rpb25hcnksXG4gICAgICAgICAgICB2YWx1ZVRvVXNlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpZWxkQ29uZmlnSW5UcmVlID0gdGhpcy5maW5kRmllbGRCeUtleShyb290Q29uZmlnLCBmaWVsZEtleSk7XG4gICAgICAgIGlmICghZmllbGRDb25maWdJblRyZWUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVtb3ZlUmVmZXJlbmNlRmllbGRzKGZpZWxkQ29uZmlnSW5UcmVlKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgc2VsZWN0ZWRWYWx1ZU9iamVjdCAmJlxuICAgICAgICAgIHNlbGVjdGVkVmFsdWVPYmplY3QuaWQgIT0gbnVsbCAmJlxuICAgICAgICAgIG1haW5EaWN0aW9uYXJ5Py5pZCAhPSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHBvdGVudGlhbFJlZmVyZW5jZURpY3Rpb25hcmllcyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgICB0aGlzLmRpY3Rpb25hcnlNYXAudmFsdWVzKClcbiAgICAgICAgICApLmZpbHRlcigoZGljdCkgPT4gZGljdC5yZWZlcmVuY2VJZCA9PT0gbWFpbkRpY3Rpb25hcnkuaWQpO1xuXG4gICAgICAgICAgaWYgKHBvdGVudGlhbFJlZmVyZW5jZURpY3Rpb25hcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCByZWZlcmVuY2VEaWN0aW9uYXJpZXNUb1Nob3cgPVxuICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVJlZmVyZW5jZURpY3Rpb25hcmllc0Zyb21TZWxlY3RlZFZhbHVlKFxuICAgICAgICAgICAgICAgIHBvdGVudGlhbFJlZmVyZW5jZURpY3Rpb25hcmllcyxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlT2JqZWN0XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VEaWN0aW9uYXJpZXNUb1Nob3cubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJlZmVyZW5jZURpY3Rpb25hcnlGaWVsZHNJZk5lY2Vzc2FyeShcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VEaWN0aW9uYXJpZXNUb1Nob3csXG4gICAgICAgICAgICAgICAgZmllbGRDb25maWdJblRyZWUsXG4gICAgICAgICAgICAgICAgZmllbGRDb25maWdJblRyZWUudHlwZSxcbiAgICAgICAgICAgICAgICBzcGVjaWZpY0RhdGE/LnJlbGF0ZWREaWN0aW9uYXJpZXNUcmFuc2xhdGlvbnMgfHwgW11cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXAgJiYgZmllbGQuZmllbGRHcm91cC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVJlZmVyZW5jZUZpZWxkcyhmaWVsZC5maWVsZEdyb3VwLCByb290Q29uZmlnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgZmllbGRzID09PSB0aGlzLmZvcm1seUNvbmZpZyB8fFxuICAgICAgZmllbGRzID09PSB0aGlzLmZvcm1seUNvbmZpZ1swXT8uZmllbGRHcm91cFxuICAgICkge1xuICAgICAgdGhpcy51cGRhdGVGb3JtbHlDb25maWcoKTtcbiAgICAgIHRoaXMuZm9ybWx5Q29uZmlnVXBkYXRlZC5lbWl0KCk7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3REaWN0aW9uYXJ5V2l0aFJlZmVyZW5jZXMoXG4gICAgZGljdGlvbmFyeTogRGljdGlvbmFyeUR0byxcbiAgICBvcHRpb25zOiBGb3JtbHlGaWVsZENvbmZpZyxcbiAgICBkaWN0aW9uYXJ5Q29udHJvbERhdGE6IERpY3Rpb25hcnlDb250cm9sRGF0YVxuICApIHtcbiAgICBpZiAob3B0aW9ucy5wcm9wcykge1xuICAgICAgdmFyIGN1cnJlbnRMYW5ndWFnZUlkID0gVXRpbHMuZmluZExhbmd1YWdlSWRCeUlzbyhcbiAgICAgICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMsXG4gICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICApO1xuXG4gICAgICAvLyBQYXNzIHByZWxvYWRlZCBkaWN0aW9uYXJ5IGRhdGEgdG8gZm9ybWx5IGNvbXBvbmVudFxuICAgICAgb3B0aW9ucy5wcm9wc1snZGljdGlvbmFyeURhdGEnXSA9IGRpY3Rpb25hcnk7XG4gICAgICBvcHRpb25zLnByb3BzWydsYW5ndWFnZXMnXSA9IHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzO1xuICAgICAgb3B0aW9ucy5wcm9wc1sncHJlbG9hZGVkRGljdGlvbmFyaWVzJ10gPSB0aGlzLmRpY3Rpb25hcnlNYXA7XG4gICAgICBvcHRpb25zLnByb3BzWyd1c2VQcmVsb2FkZWREYXRhJ10gPSB0cnVlO1xuXG4gICAgICBvcHRpb25zLnByb3BzLm9wdGlvbnMgPSBkaWN0aW9uYXJ5LnZhbHVlcz8ubWFwKCh2YWx1ZSkgPT4gKHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBsYWJlbDpcbiAgICAgICAgICBVdGlscy5maW5kVmFsdWVUcmFuc2xhdGlvbihcbiAgICAgICAgICAgIHZhbHVlLnZhbHVlVHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgY3VycmVudExhbmd1YWdlSWRcbiAgICAgICAgICApIHx8IHZhbHVlLm5hbWUsXG4gICAgICAgIGN1cnJlbnRMYW5ndWFnZUlzbzogdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICAgIHJlbGF0ZWREaWN0aW9uYXJpZXNUcmFuc2xhdGlvbnM6XG4gICAgICAgICAgZGljdGlvbmFyeUNvbnRyb2xEYXRhLnJlbGF0ZWREaWN0aW9uYXJpZXNUcmFuc2xhdGlvbnMsXG4gICAgICB9KSk7XG5cbiAgICAgIG9wdGlvbnMucHJvcHNbJ3NlbGVjdGVkUmVsYXRlZERpY3Rpb25hcmllcyddID1cbiAgICAgICAgZGljdGlvbmFyeUNvbnRyb2xEYXRhLnNlbGVjdGVkUmVsYXRlZERpY3Rpb25hcmllcyB8fCBbXTtcbiAgICAgIG9wdGlvbnMucHJvcHNbJ2FsbG93TXVsdGlwbGVTZWxlY3Rpb24nXSA9XG4gICAgICAgIGRpY3Rpb25hcnlDb250cm9sRGF0YS5hbGxvd011bHRpcGxlU2VsZWN0aW9uIHx8IGZhbHNlO1xuXG4gICAgICBsZXQgaW5pdGlhbFZhbHVlT2JqZWN0OiBEaWN0aW9uYXJ5VmFsdWUgfCBudWxsID0gbnVsbDtcbiAgICAgIGNvbnN0IGNvbnRyb2xLZXkgPSBvcHRpb25zLmtleSBhcyBzdHJpbmc7XG4gICAgICBjb25zdCBkaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWQgPVxuICAgICAgICBkaWN0aW9uYXJ5Q29udHJvbERhdGEuZGljdGlvbmFyeURlZmF1bHRWYWx1ZUlkO1xuICAgICAgaWYgKFxuICAgICAgICAhKHRoaXMubW9kZWwgJiYgdGhpcy5tb2RlbFtjb250cm9sS2V5XSAhPSBudWxsKSAmJlxuICAgICAgICBkaWN0aW9uYXJ5RGVmYXVsdFZhbHVlSWQgIT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIGluaXRpYWxWYWx1ZU9iamVjdCA9IHRoaXMuZmluZEFuZE1hcERlZmF1bHRWYWx1ZShcbiAgICAgICAgICBkaWN0aW9uYXJ5LFxuICAgICAgICAgIGRpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zLmRlZmF1bHRWYWx1ZSA9IGluaXRpYWxWYWx1ZU9iamVjdDtcblxuICAgICAgLy8gUGFzcyBkZWZhdWx0IHZhbHVlIElEIHRvIGZvcm1seSBjb21wb25lbnRcbiAgICAgIG9wdGlvbnMucHJvcHNbJ2RpY3Rpb25hcnlEZWZhdWx0VmFsdWVJZCddID0gZGljdGlvbmFyeURlZmF1bHRWYWx1ZUlkO1xuXG4gICAgICBjb25zdCBjb250cm9sSWQgPSBvcHRpb25zLmtleTtcbiAgICAgIGlmICh0aGlzLmZpbGxEYXRhICYmIHRoaXMuZmlsbERhdGEuZmx1eCkge1xuICAgICAgICBmb3IgKGNvbnN0IHN0ZXAgb2YgdGhpcy5maWxsRGF0YS5mbHV4KSB7XG4gICAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHN0ZXAuc2VjdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBzZWN0aW9uLmNvbnRyb2xzLmZpbmQoXG4gICAgICAgICAgICAgIChjdHJsOiB7XG4gICAgICAgICAgICAgICAgY29udHJvbElkOiBzdHJpbmcgfCBudW1iZXIgfCAoc3RyaW5nIHwgbnVtYmVyKVtdIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9KSA9PiBjdHJsLmNvbnRyb2xJZCA9PT0gY29udHJvbElkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC5maWxsVmFsdWUgJiYgY29udHJvbC5maWxsVmFsdWUubmFtZSkge1xuICAgICAgICAgICAgICBvcHRpb25zLnByb3BzWyd2YWx1ZSddID0gY29udHJvbC5maWxsVmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudXBkYXRlRm9ybWx5Q29uZmlnKCk7XG4gIH1cblxuICBhc3luYyBhZGRSZWZlcmVuY2VEaWN0aW9uYXJ5RmllbGRzSWZOZWNlc3NhcnkoXG4gICAgcmVmZXJyZW5jZWREaWN0aW9uYXJpZXM6IGFueVtdLFxuICAgIHBhcmVudERpY3Rpb25hcnlGaWVsZDogRm9ybWx5RmllbGRDb25maWcsXG4gICAgdHlwZTogYW55LFxuICAgIHJlbGF0ZWREaWN0aW9uYXJpZXNUcmFuc2xhdGlvbnM6IERpY3Rpb25hcnlMYWJlbEluZm9bXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocmVmZXJyZW5jZWREaWN0aW9uYXJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRSZWxhdGVkRGljdGlvbmFyaWVzID1cbiAgICAgICAgcGFyZW50RGljdGlvbmFyeUZpZWxkLnByb3BzPy5bJ3NlbGVjdGVkUmVsYXRlZERpY3Rpb25hcmllcyddIHx8IFtdO1xuXG4gICAgICBjb25zdCBzZWxlY3RlZERpY3Rpb25hcmllcyA9IHJlZmVycmVuY2VkRGljdGlvbmFyaWVzLmZpbHRlcigoZGljdCkgPT5cbiAgICAgICAgc2VsZWN0ZWRSZWxhdGVkRGljdGlvbmFyaWVzLmluY2x1ZGVzKGRpY3QudXVpZClcbiAgICAgICk7XG5cbiAgICAgIHNlbGVjdGVkRGljdGlvbmFyaWVzLmZvckVhY2goKHJlZmVyZW5jZURpY3Rpb25hcnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlRGljdGlvbmFyeVV1aWQgPSByZWZlcmVuY2VEaWN0aW9uYXJ5LnV1aWQ7XG5cbiAgICAgICAgY29uc3QgY29tcG9uZW50T25seUZvckNvbmZpZyA9IHRoaXMuZmx1eFxuICAgICAgICAgIC5mbGF0TWFwKChzKSA9PiBzLnNlY3Rpb25zKVxuICAgICAgICAgIC5mbGF0TWFwKChzZWMpID0+IHNlYy5jb250cm9scylcbiAgICAgICAgICAuZmluZChcbiAgICAgICAgICAgIChjdHJsKSA9PlxuICAgICAgICAgICAgICBjdHJsPy5zcGVjaWZpY0NvbnRyb2xEYXRhPy5kaWN0aW9uYXJ5VVVJRCA9PT1cbiAgICAgICAgICAgICAgcmVmZXJlbmNlRGljdGlvbmFyeVV1aWQgJiYgY3RybD8uaXNPbmx5Rm9yQ29uZmlnID09PSB0cnVlXG4gICAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBuZXdGaWVsZEtleSA9XG4gICAgICAgICAgY29tcG9uZW50T25seUZvckNvbmZpZz8uaWRlbnRpZmllciA/P1xuICAgICAgICAgIGBleHRyYV8ke3JlZmVyZW5jZURpY3Rpb25hcnlVdWlkfWA7XG5cbiAgICAgICAgbGV0IHJlZmVyZW5jZURpY3Rpb25hcnlMYWJlbCA9IHJlZmVyZW5jZURpY3Rpb25hcnkubmFtZTtcblxuICAgICAgICBjb25zdCBzcGVjaWZpY1RyYW5zbGF0aW9uVmFsdWUgPSByZWxhdGVkRGljdGlvbmFyaWVzVHJhbnNsYXRpb25zXG4gICAgICAgICAgLmZpbmQoKGQpID0+IGQuZGljdGlvbmFyeVVVSUQgPT0gcmVmZXJlbmNlRGljdGlvbmFyeVV1aWQpXG4gICAgICAgICAgPy50cmFuc2xhdGlvbnM/LmZpbmQoXG4gICAgICAgICAgICAodCkgPT4gdC5sYW5ndWFnZUlzbyA9PSB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb1xuICAgICAgICAgICk/LnZhbHVlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBzcGVjaWZpY1RyYW5zbGF0aW9uVmFsdWUgJiZcbiAgICAgICAgICBzcGVjaWZpY1RyYW5zbGF0aW9uVmFsdWUudHJpbSgpICE9PSAnJ1xuICAgICAgICApIHtcbiAgICAgICAgICByZWZlcmVuY2VEaWN0aW9uYXJ5TGFiZWwgPSBzcGVjaWZpY1RyYW5zbGF0aW9uVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVmZXJlbmNlRGljdGlvbmFyeUxhYmVsID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudExhbmd1YWdlSWQgPSBVdGlscy5maW5kTGFuZ3VhZ2VJZEJ5SXNvKFxuICAgICAgICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLFxuICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlSXNvXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgbmV3RmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnID0ge1xuICAgICAgICAgIGtleTogbmV3RmllbGRLZXksXG4gICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgbGFiZWw6IHJlZmVyZW5jZURpY3Rpb25hcnlMYWJlbCxcbiAgICAgICAgICAgIGRlc2lnbjogdGhpcy5kZXNpZ24sXG4gICAgICAgICAgICBkaWN0aW9uYXJ5SWQ6IHJlZmVyZW5jZURpY3Rpb25hcnlVdWlkLFxuICAgICAgICAgICAgZGljdGlvbmFyeURhdGE6IHJlZmVyZW5jZURpY3Rpb25hcnksXG4gICAgICAgICAgICBsYW5ndWFnZXM6IHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLFxuICAgICAgICAgICAgcHJlbG9hZGVkRGljdGlvbmFyaWVzOiB0aGlzLmRpY3Rpb25hcnlNYXAsXG4gICAgICAgICAgICB1c2VQcmVsb2FkZWREYXRhOiB0cnVlLFxuICAgICAgICAgICAgY3VycmVudExhbmd1YWdlSXNvOiB0aGlzLmN1cnJlbnRMYW5ndWFnZUlzbyxcbiAgICAgICAgICAgIGN1cnJlbnRMYW5ndWFnZUlkOiBjdXJyZW50TGFuZ3VhZ2VJZCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICBzdHlsZTogdGhpcy5zdHlsZU9iamVjdFRvU3RyaW5nRXhjZXB0QmFja2dyb3VuZChcbiAgICAgICAgICAgICAgICB0aGlzLmRlc2lnbltgLmZvbnQtbGlzdGBdIHx8IHt9XG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3B0aW9uczogcmVmZXJlbmNlRGljdGlvbmFyeS52YWx1ZXM/Lm1hcCgodmFsdWU6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgICAgICBVdGlscy5maW5kVmFsdWVUcmFuc2xhdGlvbihcbiAgICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlVHJhbnNsYXRpb25zLFxuICAgICAgICAgICAgICAgICAgY3VycmVudExhbmd1YWdlSWRcbiAgICAgICAgICAgICAgICApIHx8IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICAgIGN1cnJlbnRMYW5ndWFnZUlzbzogdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28sXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocmVmZXJlbmNlRGljdGlvbmFyeS5kZWZhdWx0VmFsdWVJZCkge1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWwgPSB0aGlzLmZpbmRBbmRNYXBEZWZhdWx0VmFsdWUoXG4gICAgICAgICAgICByZWZlcmVuY2VEaWN0aW9uYXJ5LFxuICAgICAgICAgICAgcmVmZXJlbmNlRGljdGlvbmFyeS5kZWZhdWx0VmFsdWVJZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGRlZmF1bHRWYWwpIHtcbiAgICAgICAgICAgIG5ld0ZpZWxkLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50RmllbGRHcm91cCA9IHBhcmVudERpY3Rpb25hcnlGaWVsZC5wYXJlbnRcbiAgICAgICAgICA/IHBhcmVudERpY3Rpb25hcnlGaWVsZC5wYXJlbnQuZmllbGRHcm91cFxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgaWYgKHBhcmVudEZpZWxkR3JvdXApIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnRJbmRleCA9IHBhcmVudEZpZWxkR3JvdXAuZmluZEluZGV4KFxuICAgICAgICAgICAgKGZpZWxkKSA9PiBmaWVsZC5rZXkgPT09IHBhcmVudERpY3Rpb25hcnlGaWVsZC5rZXlcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChwYXJlbnRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy5maW5kTGFzdENoaWxkSW5kZXgoXG4gICAgICAgICAgICAgIHBhcmVudEZpZWxkR3JvdXAsXG4gICAgICAgICAgICAgIHBhcmVudEluZGV4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBwZXJjZW50YWdlVG9BZGQgPSB0aGlzLmdldEV4aXN0aW5nUGVyY2VudGFnZShcbiAgICAgICAgICAgICAgcGFyZW50RmllbGRHcm91cCxcbiAgICAgICAgICAgICAgcGFyZW50SW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBuZXdGaWVsZC5jbGFzc05hbWUgPSBwZXJjZW50YWdlVG9BZGQgPT09IDBcbiAgICAgICAgICAgICAgPyBwYXJlbnREaWN0aW9uYXJ5RmllbGQuY2xhc3NOYW1lXG4gICAgICAgICAgICAgIDogdGhpcy5nZXRQZXJjZW50YWdlQ2xhc3NOYW1lKHBlcmNlbnRhZ2VUb0FkZCk7XG5cbiAgICAgICAgICAgIHBhcmVudEZpZWxkR3JvdXAuc3BsaWNlKGVuZEluZGV4ICsgMSwgMCwgbmV3RmllbGQpO1xuXG4gICAgICAgICAgICBjb25zdCBjbGFzc05hbWVUb0FkZCA9XG4gICAgICAgICAgICAgIHR5cGUgPT09ICdyYWRpbycgPyBgIGNvbXBvbmVudC1yYWRpb2AgOiBgIGNvbXBvbmVudC1kYXRhYDtcbiAgICAgICAgICAgIG5ld0ZpZWxkLmNsYXNzTmFtZSArPSBjbGFzc05hbWVUb0FkZDtcbiAgICAgICAgICAgIHRoaXMuYXR0YWNoVG9WYWx1ZUNoYW5nZXMobmV3RmllbGRLZXksIG5ld0ZpZWxkKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybWx5Q29uZmlnKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRFeGlzdGluZ1BlcmNlbnRhZ2UoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdLCBpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgcGVyY2VudGFnZSA9IDA7XG4gICAgY29uc3QgZmllbGQgPSBmaWVsZHNbaW5kZXhdO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IGZpZWxkLmNsYXNzTmFtZTtcbiAgICBpZiAoZmllbGQudHlwZT8udG9TdHJpbmcoKSAhPT0gU3RlcENvbnRyb2xUeXBlLk5ld1Jvdy50b1N0cmluZygpKSB7XG4gICAgICBpZiAoY2xhc3NOYW1lICYmIGNsYXNzTmFtZS5zdGFydHNXaXRoKCdwZXJjZW50YWdlLXdpZHRoLScpKSB7XG4gICAgICAgIHBlcmNlbnRhZ2UgPVxuICAgICAgICAgIChwYXJzZUludChjbGFzc05hbWUucmVwbGFjZSgncGVyY2VudGFnZS13aWR0aC0nLCAnJyksIDEwKSAqIDEwMCkgLyAxMjtcbiAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lICYmIGNsYXNzTmFtZS5zdGFydHNXaXRoKCdwaXhlbC13aWR0aC0nKSkge1xuICAgICAgICBjb25zdCBwaXhlbHMgPSBwYXJzZUludChjbGFzc05hbWUucmVwbGFjZSgncGl4ZWwtd2lkdGgtJywgJycpLCAxMCk7XG4gICAgICAgIHBlcmNlbnRhZ2UgPSAocGl4ZWxzIC8gMTAwMCkgKiAxMDA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwZXJjZW50YWdlO1xuICB9XG5cbiAgY2FsY3VsYXRlUmVtYWluaW5nUGVyY2VudGFnZUZvclJhbmdlKFxuICAgIGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSxcbiAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgZW5kSW5kZXg6IG51bWJlclxuICApOiBudW1iZXIge1xuICAgIGxldCByZW1haW5pbmdQZXJjZW50YWdlID0gMTAwO1xuXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7IGkrKykge1xuICAgICAgY29uc3QgcGVyY2VudGFnZSA9IHRoaXMuZ2V0RXhpc3RpbmdQZXJjZW50YWdlKGZpZWxkcywgaSk7XG4gICAgICByZW1haW5pbmdQZXJjZW50YWdlIC09IHBlcmNlbnRhZ2U7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLm1heChyZW1haW5pbmdQZXJjZW50YWdlLCAwKTtcbiAgfVxuXG4gIHJlbW92ZVJlZmVyZW5jZUZpZWxkcyhjdXJyZW50Rm9ybWx5RmllbGRDb25maWc6IEZvcm1seUZpZWxkQ29uZmlnKSB7XG4gICAgY29uc3QgcmVmZXJyZWRJbkRpY3Rpb25hcmllc1VVSWRzID1cbiAgICAgIGN1cnJlbnRGb3JtbHlGaWVsZENvbmZpZy5wcm9wcz8uWydkaWN0aW9uYXJ5RGF0YSddXG4gICAgICAgID8ucmVmZXJyZWRJbkRpY3Rpb25hcmllc1VVSWRzO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVmZXJyZWRJbkRpY3Rpb25hcmllc1VVSWRzKSkge1xuICAgICAgY29uc3QgcGFyZW50RmllbGRHcm91cCA9IGN1cnJlbnRGb3JtbHlGaWVsZENvbmZpZy5wYXJlbnRcbiAgICAgICAgPyBjdXJyZW50Rm9ybWx5RmllbGRDb25maWcucGFyZW50LmZpZWxkR3JvdXBcbiAgICAgICAgOiBudWxsO1xuICAgICAgaWYgKHBhcmVudEZpZWxkR3JvdXApIHtcbiAgICAgICAgY29uc3QgcGFyZW50SW5kZXggPSBwYXJlbnRGaWVsZEdyb3VwLmZpbmRJbmRleChcbiAgICAgICAgICAoZmllbGQpID0+IGZpZWxkLmtleSA9PT0gY3VycmVudEZvcm1seUZpZWxkQ29uZmlnLmtleVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChwYXJlbnRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcmVmZXJyZWRJbkRpY3Rpb25hcmllc1VVSWRzKSB7XG4gICAgICAgICAgICBjb25zdCBpZFRvRmluZCA9ICdleHRyYV8nICsgaXRlbTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHBhcmVudEZpZWxkR3JvdXAubGVuZ3RoIC0gMTsgaSA+IHBhcmVudEluZGV4OyBpLS0pIHtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudEZpZWxkS2V5ID0gcGFyZW50RmllbGRHcm91cFtpXS5rZXk/LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIGlmIChjdXJyZW50RmllbGRLZXkgJiYgY3VycmVudEZpZWxkS2V5ID09PSBpZFRvRmluZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJGb3JtQ29udHJvbFZhbHVlKGlkVG9GaW5kKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRGaWVsZEdyb3VwLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFkZENoaWxkRGljdGlvbmFyeUZpZWxkKFxuICAgIGNoaWxkRGljdGlvbmFyeVV1aWQ6IHN0cmluZyxcbiAgICBwYXJlbnREaWN0aW9uYXJ5RmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnLFxuICAgIHR5cGU6IGFueSxcbiAgICByZWxhdGVkRGljdGlvbmFyaWVzVHJhbnNsYXRpb25zOiBEaWN0aW9uYXJ5TGFiZWxJbmZvW11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNoaWxkRGljdGlvbmFyeVV1aWQpIHtcbiAgICAgIGNvbnN0IGNoaWxkRGljdGlvbmFyeSA9IHRoaXMuZGljdGlvbmFyeU1hcC5nZXQoY2hpbGREaWN0aW9uYXJ5VXVpZCk7XG4gICAgICBpZiAoY2hpbGREaWN0aW9uYXJ5KSB7XG4gICAgICAgIGxldCBjaGlsZERpY3Rpb25hcnlMYWJlbCA9IGNoaWxkRGljdGlvbmFyeS5uYW1lO1xuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9XG4gICAgICAgICAgcmVsYXRlZERpY3Rpb25hcmllc1RyYW5zbGF0aW9uc1xuICAgICAgICAgICAgLmZpbmQoKGQpID0+IGQuZGljdGlvbmFyeVVVSUQgPT0gY2hpbGREaWN0aW9uYXJ5VXVpZClcbiAgICAgICAgICAgID8udHJhbnNsYXRpb25zLmZpbmQoKHQpID0+IHQubGFuZ3VhZ2VJc28gPT0gdGhpcy5jdXJyZW50TGFuZ3VhZ2VJc28pXG4gICAgICAgICAgICA/LnZhbHVlIHx8ICcnO1xuICAgICAgICBpZiAodHJhbnNsYXRpb24pIHtcbiAgICAgICAgICBjaGlsZERpY3Rpb25hcnlMYWJlbCA9IHRyYW5zbGF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld0ZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgICAgICBrZXk6IGAke3BhcmVudERpY3Rpb25hcnlGaWVsZC5rZXl9X2NoaWxkXyR7Y2hpbGREaWN0aW9uYXJ5VXVpZH1gLFxuICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGxhYmVsOiBjaGlsZERpY3Rpb25hcnlMYWJlbCxcbiAgICAgICAgICAgIGRpY3Rpb25hcnlEYXRhOiBjaGlsZERpY3Rpb25hcnksXG4gICAgICAgICAgICBsYW5ndWFnZXM6IHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLFxuICAgICAgICAgICAgcHJlbG9hZGVkRGljdGlvbmFyaWVzOiB0aGlzLmRpY3Rpb25hcnlNYXAsXG4gICAgICAgICAgICBvcHRpb25zOiBjaGlsZERpY3Rpb25hcnkudmFsdWVzPy5tYXAoKHZhbHVlKSA9PiAoe1xuICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUuaWQsXG4gICAgICAgICAgICAgIGxhYmVsOiB2YWx1ZS5uYW1lLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgIHN0eWxlOiB0aGlzLnN0eWxlT2JqZWN0VG9TdHJpbmdFeGNlcHRCYWNrZ3JvdW5kKFxuICAgICAgICAgICAgICAgIHRoaXMuZGVzaWduW2AuZm9udC1saXN0YF0gfHwge31cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBob29rczoge1xuICAgICAgICAgICAgb25Jbml0OiAoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAgICAgICAgICAgdGhpcy5maWVsZFVuc3Vic2NyaWJlU3ViamVjdHMucHVzaCh1bnN1YnNjcmliZSQpO1xuXG4gICAgICAgICAgICAgIGZpZWxkLmZvcm1Db250cm9sPy52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodW5zdWJzY3JpYmUkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGFzeW5jIChzZWxlY3RlZFZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IGNoaWxkRGljdGlvbmFyeS52YWx1ZXM/LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICh2YWwpID0+IHZhbC5pZCA9PT0gc2VsZWN0ZWRWYWx1ZVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbiAmJiBzZWxlY3RlZE9wdGlvbi5jaGlsZERpY3Rpb25hcnlVVUlEKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYWRkQ2hpbGREaWN0aW9uYXJ5RmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb24uY2hpbGREaWN0aW9uYXJ5VVVJRCxcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWREaWN0aW9uYXJpZXNUcmFuc2xhdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGRGaWVsZHMoZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm1seUNvbmZpZygpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGZpZWxkLmhvb2tzIS5vbkRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICAgICAgICAgICAgICB1bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwYXJlbnRGaWVsZEdyb3VwID0gcGFyZW50RGljdGlvbmFyeUZpZWxkLnBhcmVudFxuICAgICAgICAgID8gcGFyZW50RGljdGlvbmFyeUZpZWxkLnBhcmVudC5maWVsZEdyb3VwXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICBpZiAocGFyZW50RmllbGRHcm91cCkge1xuICAgICAgICAgIGNvbnN0IHBhcmVudEluZGV4ID0gcGFyZW50RmllbGRHcm91cC5maW5kSW5kZXgoXG4gICAgICAgICAgICAoZmllbGQpID0+IGZpZWxkLmtleSA9PT0gcGFyZW50RGljdGlvbmFyeUZpZWxkLmtleVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHBhcmVudEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgY29uc3QgZW5kSW5kZXggPSB0aGlzLmZpbmRMYXN0Q2hpbGRJbmRleChcbiAgICAgICAgICAgICAgcGFyZW50RmllbGRHcm91cCxcbiAgICAgICAgICAgICAgcGFyZW50SW5kZXhcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2VUb0FkZCA9IHRoaXMuZ2V0RXhpc3RpbmdQZXJjZW50YWdlKFxuICAgICAgICAgICAgICBwYXJlbnRGaWVsZEdyb3VwLFxuICAgICAgICAgICAgICBwYXJlbnRJbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG5ld0ZpZWxkLmNsYXNzTmFtZSA9IHRoaXMuZ2V0UGVyY2VudGFnZUNsYXNzTmFtZShwZXJjZW50YWdlVG9BZGQpO1xuICAgICAgICAgICAgcGFyZW50RmllbGRHcm91cC5zcGxpY2UoZW5kSW5kZXggKyAxLCAwLCBuZXdGaWVsZCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZVRvQWRkID1cbiAgICAgICAgICAgICAgdHlwZSA9PT0gJ3JhZGlvJyA/IGAgY29tcG9uZW50LXJhZGlvYCA6IGAgY29tcG9uZW50LWRhdGFgO1xuICAgICAgICAgICAgbmV3RmllbGQuY2xhc3NOYW1lICs9IGNsYXNzTmFtZVRvQWRkO1xuICAgICAgICAgICAgLy90aGlzLmF0dGFjaFRvVmFsdWVDaGFuZ2VzKG5ld0ZpZWxkS2V5LCBuZXdGaWVsZCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm1seUNvbmZpZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBDaGlsZCBkaWN0aW9uYXJ5IG5vdCBmb3VuZCBmb3IgVVVJRCAke2NoaWxkRGljdGlvbmFyeVV1aWR9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ29tcGxldGlvbigpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnT3JpZ2luIGZvcm0gY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgIHRoaXMuY29tcGxldGlvbkV2ZW50LmVtaXQoKTtcbiAgfVxuXG4gIGZpbmRMYXN0Q2hpbGRJbmRleChmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10sIHBhcmVudEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHBhcmVudEtleVByZWZpeCA9IGAke2ZpZWxkc1twYXJlbnRJbmRleF0ua2V5fV9gO1xuICAgIGxldCBsYXN0SW5kZXggPSBwYXJlbnRJbmRleDtcblxuICAgIGZvciAobGV0IGkgPSBwYXJlbnRJbmRleCArIDE7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChmaWVsZHNbaV0ua2V5Py50b1N0cmluZygpLnN0YXJ0c1dpdGgocGFyZW50S2V5UHJlZml4KSkge1xuICAgICAgICBsYXN0SW5kZXggPSBpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhc3RJbmRleDtcbiAgfVxuXG4gIGZpbmRGaWVsZEJ5S2V5KFxuICAgIGZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSxcbiAgICBrZXk6IHN0cmluZ1xuICApOiBGb3JtbHlGaWVsZENvbmZpZyB8IG51bGwge1xuICAgIGlmICghZmllbGRzKSByZXR1cm4gbnVsbDtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzdGVwcGVyJyAmJiBmaWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kSW5TdGVwcGVyID0gdGhpcy5maW5kRmllbGRCeUtleShmaWVsZC5maWVsZEdyb3VwLCBrZXkpO1xuICAgICAgICBpZiAoZm91bmRJblN0ZXBwZXIpIHJldHVybiBmb3VuZEluU3RlcHBlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kRmllbGRCeUtleShmaWVsZC5maWVsZEdyb3VwLCBrZXkpO1xuICAgICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZW1vdmVDaGlsZEZpZWxkcyhwYXJlbnRGaWVsZDogRm9ybWx5RmllbGRDb25maWcpIHtcbiAgICBjb25zdCBwYXJlbnRGaWVsZEdyb3VwID0gcGFyZW50RmllbGQucGFyZW50XG4gICAgICA/IHBhcmVudEZpZWxkLnBhcmVudC5maWVsZEdyb3VwXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAocGFyZW50RmllbGRHcm91cCkge1xuICAgICAgY29uc3QgcGFyZW50SW5kZXggPSBwYXJlbnRGaWVsZEdyb3VwLmZpbmRJbmRleChcbiAgICAgICAgKGZpZWxkKSA9PiBmaWVsZC5rZXkgPT09IHBhcmVudEZpZWxkLmtleVxuICAgICAgKTtcblxuICAgICAgaWYgKHBhcmVudEluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBwYXJlbnRLZXlQcmVmaXggPSBgJHtwYXJlbnRGaWVsZC5rZXl9X2NoaWxkX2A7XG5cbiAgICAgICAgLy8gUmVtb3ZlIG9ubHkgdGhlIHJlbGV2YW50IGNoaWxkIGZpZWxkc1xuICAgICAgICBmb3IgKGxldCBpID0gcGFyZW50RmllbGRHcm91cC5sZW5ndGggLSAxOyBpID4gcGFyZW50SW5kZXg7IGktLSkge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRGaWVsZEtleSA9IHBhcmVudEZpZWxkR3JvdXBbaV0ua2V5Py50b1N0cmluZygpO1xuICAgICAgICAgIGlmIChjdXJyZW50RmllbGRLZXkgJiYgY3VycmVudEZpZWxkS2V5LnN0YXJ0c1dpdGgocGFyZW50S2V5UHJlZml4KSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhckZvcm1Db250cm9sVmFsdWUoY3VycmVudEZpZWxkS2V5KTtcbiAgICAgICAgICAgIHBhcmVudEZpZWxkR3JvdXAuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBORVc6IExvYWQgQUxMIGRpY3Rpb25hcmllcyBuZWVkZWQgZm9yIHRoaXMgYXBwIHVzaW5nIHRoZSBuZXcgYXBwLWJhc2VkIGVuZHBvaW50XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGxvYWRBbGxSZXF1aXJlZERpY3Rpb25hcmllcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuYXBwTW9kZWw/LmFwcGxpY2F0aW9uVXVpZCkge1xuICAgICAgY29uc29sZS53YXJuKCdObyBhcHAgVVVJRCBhdmFpbGFibGUgZm9yIGRpY3Rpb25hcnkgbG9hZGluZycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICB0aGlzLnNlcnZpY2UubG9hZEFwcERpY3Rpb25hcmllcyhcbiAgICAgICAgICB0aGlzLmFwcE1vZGVsLmFwcGxpY2F0aW9uVXVpZCxcbiAgICAgICAgICBFbnZpcm9ubWVudFR5cGUuQ29uZmlnXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICAgIGlmICghcmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICfinYwgQmFja2VuZCBmYWlsZWQgdG8gbG9hZCBkaWN0aW9uYXJpZXM6JyxcbiAgICAgICAgICByZXNwb25zZS5lcnJvcnNcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBTaW1wbGUgYXNzaWdubWVudCAtIEFMTCBkaWN0aW9uYXJpZXMgYW5kIGRlcGVuZGVuY2llcyBhbHJlYWR5IGxvYWRlZCBieSBiYWNrZW5kXG4gICAgICBPYmplY3QuZW50cmllcyhyZXNwb25zZS5kaWN0aW9uYXJpZXMpLmZvckVhY2goKFt1dWlkLCBkaWN0XSkgPT4ge1xuICAgICAgICB0aGlzLmRpY3Rpb25hcnlNYXAuc2V0KHV1aWQsIGRpY3QpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCBGYWlsZWQgdG8gbG9hZCBhcHAgZGljdGlvbmFyaWVzOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckZvcm1Db250cm9sVmFsdWUoZmllbGRLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IGtleXMgPSBmaWVsZEtleS5zcGxpdCgnLicpO1xuICAgIGxldCBjb250cm9sID0gdGhpcy5mb3JtO1xuICAgIGxldCBtb2RlbCA9IHRoaXMubW9kZWw7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBjb250cm9sID0gY29udHJvbC5nZXQoa2V5c1tpXSkgYXMgRm9ybUdyb3VwO1xuICAgICAgbW9kZWwgPSBtb2RlbFtrZXlzW2ldXTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5hbEtleSA9IGtleXNba2V5cy5sZW5ndGggLSAxXTtcbiAgICBpZiAoY29udHJvbCAmJiBjb250cm9sLmdldChmaW5hbEtleSkpIHtcbiAgICAgIGNvbnRyb2wucmVtb3ZlQ29udHJvbChmaW5hbEtleSk7XG4gICAgfVxuXG4gICAgaWYgKG1vZGVsICYmIG1vZGVsW2ZpbmFsS2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgbW9kZWxbZmluYWxLZXldO1xuICAgIH1cbiAgfVxuXG4gIGZpbmRGaWVsZChcbiAgICBmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10sXG4gICAga2V5OiBzdHJpbmdcbiAgKTogRm9ybWx5RmllbGRDb25maWcgfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICAgIGNvbnN0IG5lc3RlZEZpZWxkID0gdGhpcy5maW5kRmllbGQoZmllbGQuZmllbGRHcm91cCwga2V5KTtcbiAgICAgICAgaWYgKG5lc3RlZEZpZWxkKSB7XG4gICAgICAgICAgcmV0dXJuIG5lc3RlZEZpZWxkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3B1bGF0ZU1vZGVsV2l0aEZpbGxEYXRhKGZpbGxEYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoZmlsbERhdGEpIHtcbiAgICAgIGxldCBhdXhNb2RlbCA9IE1vZGVsUG9wdWxhdGlvbkhlbHBlci5wb3B1bGF0ZU1vZGVsV2l0aEZpbGxEYXRhKFxuICAgICAgICBmaWxsRGF0YSxcbiAgICAgICAgdGhpcy5mbHV4LFxuICAgICAgICB0aGlzLmRpY3Rpb25hcnlNYXAsXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzXG4gICAgICApO1xuICAgICAgdGhpcy5tb2RlbCA9IHsgLi4uYXV4TW9kZWwgfTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluZEFuZE1hcERlZmF1bHRWYWx1ZShcbiAgICBkaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5RHRvIHwgdW5kZWZpbmVkLFxuICAgIGRlZmF1bHRWYWx1ZUlkOiBudW1iZXJcbiAgKTogRGljdGlvbmFyeVZhbHVlIHwgbnVsbCB7XG4gICAgcmV0dXJuIE1vZGVsUG9wdWxhdGlvbkhlbHBlci5maW5kQW5kTWFwRGVmYXVsdFZhbHVlKFxuICAgICAgZGljdGlvbmFyeSxcbiAgICAgIGRlZmF1bHRWYWx1ZUlkLFxuICAgICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXNcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlRm9ybWx5Q29uZmlnKCkge1xuICAgIHRoaXMuZm9ybWx5Q29uZmlnID0gWy4uLnRoaXMuZm9ybWx5Q29uZmlnXTtcbiAgfVxuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVGcm9tQWxsRmllbGRzKCkge1xuICAgIGZvciAoY29uc3Qgc3ViamVjdCBvZiB0aGlzLmZpZWxkVW5zdWJzY3JpYmVTdWJqZWN0cykge1xuICAgICAgc3ViamVjdC5uZXh0KCk7XG4gICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfVxuICAgIHRoaXMuZmllbGRVbnN1YnNjcmliZVN1YmplY3RzID0gW107XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlRnJvbUFsbEZpZWxkcygpO1xuICAgIGlmICh0aGlzLmNvbGxlY3RvckhhbmRsZXJTdWJzY3JpcHRpb25zKSB7XG4gICAgICB0aGlzLmNvbGxlY3RvckhhbmRsZXJTdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmFjdGlvblN0ZXBTdWJzY3JpcHRpb25zKSB7XG4gICAgICB0aGlzLmFjdGlvblN0ZXBTdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmFjdGlvblN0ZXBIYW5kbGVyKSB7XG4gICAgICB0aGlzLmFjdGlvblN0ZXBIYW5kbGVyLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RCdXR0b25zKGJ1dHRvbnNDb25maWc6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghYnV0dG9uc0NvbmZpZyB8fCBidXR0b25zQ29uZmlnLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gYnV0dG9uc0NvbmZpZy5tYXAoKGJ1dHRvbikgPT4gKHtcbiAgICAgIHR5cGU6IGJ1dHRvbi52YWx1ZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgbGFiZWw6IGJ1dHRvbi50cmFuc2xhdGlvbnM/Llt0aGlzLmN1cnJlbnRMYW5ndWFnZUlzb10gfHwgYnV0dG9uLnZhbHVlLFxuICAgICAgc3R5bGVLZXk6IGAuYnV0dG9uLSR7YnV0dG9uLnZhbHVlLnRvTG93ZXJDYXNlKCl9YCxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHN0eWxlT2JqZWN0VG9TdHJpbmdFeGNlcHRCYWNrZ3JvdW5kKHN0eWxlT2JqOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhzdHlsZU9iailcbiAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4ga2V5ICE9PSAnYmFja2dyb3VuZC1jb2xvcicpXG4gICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2tleX06ICR7dmFsdWV9YClcbiAgICAgIC5qb2luKCc7ICcpO1xuICB9XG5cbiAgdmFsaWRhdGVNZXRob2RBcGkoZGF0YTogQXBpVmFsaWRhdGVSZXF1ZXN0KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgaWYgKGRhdGEuYXBpSWQgPT09IHVuZGVmaW5lZCB8fCBkYXRhLmFwcElkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBwbGljYXRpb25EYXRhU2VydmljZS52YWxpZGF0ZUFwaShkYXRhKS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnQVBJIHZhbGlkYXRpb24gcmVzcG9uc2U6JywgcmVzcG9uc2UpO1xuICAgICAgICByZXR1cm4gISFyZXNwb25zZTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdmFsaWRhdGluZyAnICsgZGF0YS5kYXRhLCBlcnJvcik7XG4gICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGljIG1ldGhvZCB0byBjbGVhciB0aGUgc2F2aW5nIGFmdGVyIGFjdGlvbnMgc3RhdGVcbiAgICogQ2FsbGVkIGJ5IHN0ZXBwZXIgY29tcG9uZW50IGFmdGVyIHNhdmVBcHBEYXRhU3RlcCBjb21wbGV0ZXNcbiAgICovXG4gIHB1YmxpYyBjbGVhclNhdmluZ0FmdGVyQWN0aW9uc1N0YXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzU2F2aW5nQWZ0ZXJBY3Rpb25zKSB7XG4gICAgICB0aGlzLmlzU2F2aW5nQWZ0ZXJBY3Rpb25zID0gZmFsc2U7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG4gIGxvYWRpbmdNZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbn1cbiIsIjxkaXYgKm5nSWY9XCJpc0xvYWRpbmdcIiBjbGFzcz1cImxvYWRpbmctb3ZlcmxheVwiPlxuICA8bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj5cbjwvZGl2PlxuPGRpdiBbaGlkZGVuXT1cImlzTG9hZGluZ1wiPlxuICA8ZGl2ICpuZ0lmPVwic2hvd0xhbmd1YWdlU2VsZWN0b3JcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwicmlnaHQtYWxpZ25lZFwiPlxuICAgIDxidXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImZsYWdzXCIgbWF0LWljb24tYnV0dG9uIGNsYXNzPVwibS1yLTVcIj5cbiAgICAgIDxpbWdcbiAgICAgICAgW3NyY109XCJyZXR1cm5GTGFnKGN1cnJlbnRMYW5ndWFnZUlzbylcIlxuICAgICAgICBjbGFzcz1cInJvdW5kZWQtY2lyY2xlIG9iamVjdC1jb3ZlciBpY29uLTIwXCJcbiAgICAgIC8+XG4gICAgPC9idXR0b24+XG4gICAgPG1hdC1tZW51ICNmbGFncz1cIm1hdE1lbnVcIiBjbGFzcz1cImNhcmRXaXRoU2hhZG93XCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgKm5nRm9yPVwibGV0IGxhbmcgb2YgYXBwbGljYXRpb25MYW5ndWFnZXMoKVwiXG4gICAgICAgIChjbGljayk9XCJjaGFuZ2VMYW5ndWFnZShsYW5nLmlzbylcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIFtzcmNdPVwicmV0dXJuRkxhZyhsYW5nLmlzbylcIlxuICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkLWNpcmNsZSBvYmplY3QtY292ZXIgaWNvbi0yMFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdC1zdWJ0aXRsZS0xIGYtcy0xNFwiPnt7IGxhbmcubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC1tZW51PlxuICA8L2Rpdj5cblxuICA8YnIgLz5cbiAgPGRpdiBjbGFzcz1cImZvcm0tY29udGFpbmVyXCI+XG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cInN1Ym1pdCgpXCI+XG4gICAgICA8Zm9ybWx5LWZvcm1cbiAgICAgICAgW21vZGVsXT1cIm1vZGVsXCJcbiAgICAgICAgW2ZpZWxkc109XCJmb3JtbHlDb25maWdcIlxuICAgICAgICBbb3B0aW9uc109XCJvcHRpb25zXCJcbiAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgICA+PC9mb3JtbHktZm9ybT5cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|