kwikid-forms 0.6.42 → 0.6.44
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/bundles/kwikid-forms.umd.js +1446 -957
- package/bundles/kwikid-forms.umd.js.map +1 -1
- package/esm2015/lib/builder/builder-form-editor/builder-form-editor.component.js +22 -32
- package/esm2015/lib/builder/builder-form-editor/builder-form-editor.definitions.js +2 -1
- package/esm2015/lib/builder/builder-form-editor/builder-form-editor.helper.js +2 -4
- package/esm2015/lib/builder/builder-form-editor/builder.form-editor.constants.js +5 -5
- package/esm2015/lib/builder/builder-form-editor/builder.form-editor.service.js +6 -5
- package/esm2015/lib/builder/builder-form-list/builder-forms-list.component.js +4 -6
- package/esm2015/lib/builder/builder.component.js +43 -53
- package/esm2015/lib/builder/builder.helper.js +11 -13
- package/esm2015/lib/renderer/config-converter/config-converter.constants.js +22 -7
- package/esm2015/lib/renderer/config-converter/config-converter.helper.js +9 -10
- package/esm2015/lib/renderer/config-converter/config-converter.js +90 -68
- package/esm2015/lib/renderer/form-view/definitions/form-view.actions.definition.js +3 -1
- package/esm2015/lib/renderer/form-view/definitions/form-view.apis.definition.js +1 -1
- package/esm2015/lib/renderer/form-view/definitions/form-view.commons.definition.js +2 -1
- package/esm2015/lib/renderer/form-view/definitions/form-view.fields.definition.js +2 -1
- package/esm2015/lib/renderer/form-view/definitions/form-view.logs.definition.js +2 -1
- package/esm2015/lib/renderer/form-view/form-view.api.service.js +25 -24
- package/esm2015/lib/renderer/form-view/form-view.component.js +527 -270
- package/esm2015/lib/renderer/form-view/form-view.constants.js +17 -0
- package/esm2015/lib/renderer/form-view/form-view.module.js +15 -3
- package/esm2015/lib/renderer/form-view/form-view.service.js +6 -7
- package/esm2015/lib/renderer/form-view/helpers/form-view.apis.helper.js +46 -60
- package/esm2015/lib/renderer/form-view/helpers/form-view.camera.helper.js +16 -20
- package/esm2015/lib/renderer/form-view/helpers/form-view.defaults.helper.js +65 -85
- package/esm2015/lib/renderer/form-view/helpers/form-view.fields.helper.js +101 -93
- package/esm2015/lib/renderer/form-view/helpers/form-view.form-validations.helper.js +23 -22
- package/esm2015/lib/renderer/form-view/helpers/form-view.tasks.helper.js +5 -5
- package/esm2015/lib/renderer/form-view/pipes/filter-image-url-or-base64-from-object.pipe.js +34 -0
- package/esm2015/lib/renderer/form-view/pipes/filter-video-url-or-base64-from-object.pipe.js +30 -0
- package/esm2015/lib/renderer/forms-list/forms-list.component.js +31 -39
- package/esm2015/lib/renderer/forms-list/forms-list.definitions.js +2 -1
- package/esm2015/lib/renderer/renderer.actions.definitions.js +1 -1
- package/esm2015/lib/renderer/renderer.component.js +88 -114
- package/esm2015/lib/renderer/renderer.definitions.js +2 -1
- package/esm2015/lib/renderer/renderer.helper.js +2 -4
- package/fesm2015/kwikid-forms.js +1213 -933
- package/fesm2015/kwikid-forms.js.map +1 -1
- package/lib/builder/builder-form-editor/builder-form-editor.component.d.ts +4 -5
- package/lib/builder/builder-form-editor/builder.form-editor.service.d.ts +0 -1
- package/lib/builder/builder-form-list/builder-forms-list.component.d.ts +3 -5
- package/lib/renderer/config-converter/config-converter.constants.d.ts +21 -6
- package/lib/renderer/config-converter/config-converter.helper.d.ts +1 -0
- package/lib/renderer/form-view/definitions/form-view.actions.definition.d.ts +2 -0
- package/lib/renderer/form-view/definitions/form-view.fields.definition.d.ts +52 -28
- package/lib/renderer/form-view/form-view.api.service.d.ts +0 -1
- package/lib/renderer/form-view/form-view.component.d.ts +23 -18
- package/lib/renderer/form-view/form-view.constants.d.ts +16 -0
- package/lib/renderer/form-view/form-view.module.d.ts +10 -8
- package/lib/renderer/form-view/form-view.service.d.ts +1 -2
- package/lib/renderer/form-view/helpers/form-view.camera.helper.d.ts +5 -7
- package/lib/renderer/form-view/helpers/form-view.defaults.helper.d.ts +4 -6
- package/lib/renderer/form-view/helpers/form-view.fields.helper.d.ts +1 -1
- package/lib/renderer/form-view/helpers/form-view.form-validations.helper.d.ts +1 -2
- package/lib/renderer/form-view/helpers/form-view.tasks.helper.d.ts +1 -1
- package/lib/renderer/form-view/pipes/filter-image-url-or-base64-from-object.pipe.d.ts +7 -0
- package/lib/renderer/form-view/pipes/filter-video-url-or-base64-from-object.pipe.d.ts +7 -0
- package/lib/renderer/forms-list/forms-list.component.d.ts +1 -2
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@ import { __decorate } from "tslib";
|
|
|
2
2
|
import { checkObjectKeyExists, checkObjectPathExists, getObjectDeepCopy, isEmptyValue, isNotEmptyValue, isObject, logMethod, mergeObjects, setMissingKeyValue, setValueToObjectPath } from "kwikid-toolkit";
|
|
3
3
|
import { EFieldType } from "../form-view/definitions/form-view.fields.definition";
|
|
4
4
|
import { FIELD_PROPERTIES } from "./config-converter.constants";
|
|
5
|
-
import {
|
|
5
|
+
import { getFormFields, getLanguage, getMaxDate, getMinDate, setFieldAsFormElement, setFieldKeyDisabled, setFieldKeyHidden, setFieldKeyValue, setMissingFieldKeyValue, updateLanguage } from "./config-converter.helper";
|
|
6
6
|
export class Converter {
|
|
7
7
|
updateFormConfigMiscellaneous(formConfig, args) {
|
|
8
8
|
if (checkObjectKeyExists(args, "formsListLength")) {
|
|
@@ -194,20 +194,18 @@ export class Converter {
|
|
|
194
194
|
if (typeof x === "string" || typeof x === "number") {
|
|
195
195
|
return { label: x, disabled: false, description: "" };
|
|
196
196
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
checkObjectKeyExists(x, "description")) {
|
|
201
|
-
return x;
|
|
202
|
-
}
|
|
203
|
-
if (!checkObjectKeyExists(x, "disabled")) {
|
|
204
|
-
x = Object.assign(Object.assign({}, x), { disabled: false });
|
|
205
|
-
}
|
|
206
|
-
if (!checkObjectKeyExists(x, "description")) {
|
|
207
|
-
x = Object.assign(Object.assign({}, x), { description: false });
|
|
208
|
-
}
|
|
197
|
+
if (checkObjectKeyExists(x, "label") &&
|
|
198
|
+
checkObjectKeyExists(x, "disabled") &&
|
|
199
|
+
checkObjectKeyExists(x, "description")) {
|
|
209
200
|
return x;
|
|
210
201
|
}
|
|
202
|
+
if (!checkObjectKeyExists(x, "disabled")) {
|
|
203
|
+
x = Object.assign(Object.assign({}, x), { disabled: false });
|
|
204
|
+
}
|
|
205
|
+
if (!checkObjectKeyExists(x, "description")) {
|
|
206
|
+
x = Object.assign(Object.assign({}, x), { description: false });
|
|
207
|
+
}
|
|
208
|
+
return x;
|
|
211
209
|
});
|
|
212
210
|
return field;
|
|
213
211
|
};
|
|
@@ -294,6 +292,13 @@ export class Converter {
|
|
|
294
292
|
}
|
|
295
293
|
return field;
|
|
296
294
|
};
|
|
295
|
+
const formatFieldTypeDataHolder = (field) => {
|
|
296
|
+
field = setFieldKeyHidden(field);
|
|
297
|
+
field = setFieldKeyDisabled(field);
|
|
298
|
+
field = setFieldAsFormElement(field, true);
|
|
299
|
+
field = updateFormFieldProperties(field);
|
|
300
|
+
return field;
|
|
301
|
+
};
|
|
297
302
|
const formatFieldTypeOtp = (field) => {
|
|
298
303
|
var _a, _b;
|
|
299
304
|
field = setFieldKeyHidden(field);
|
|
@@ -318,9 +323,18 @@ export class Converter {
|
|
|
318
323
|
return field;
|
|
319
324
|
};
|
|
320
325
|
const formatFieldTypeCapture = (field) => {
|
|
326
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
321
327
|
field = setFieldKeyHidden(field);
|
|
322
328
|
field = setFieldAsFormElement(field, true);
|
|
323
329
|
field = updateFormFieldProperties(field);
|
|
330
|
+
field.properties = getObjectDeepCopy(Object.assign(Object.assign({}, field.properties), { features: Object.assign(Object.assign({}, field.properties.features), { watermark: {
|
|
331
|
+
isEnabled: (_d = (_c = (_b = (_a = field === null || field === void 0 ? void 0 : field.properties) === null || _a === void 0 ? void 0 : _a.cameraConfig) === null || _b === void 0 ? void 0 : _b.others) === null || _c === void 0 ? void 0 : _c.isWatermark) !== null && _d !== void 0 ? _d : field.properties.features.watermark.isWatermark,
|
|
332
|
+
isWatermarkFromServer: (_h = (_g = (_f = (_e = field === null || field === void 0 ? void 0 : field.properties) === null || _e === void 0 ? void 0 : _e.cameraConfig) === null || _f === void 0 ? void 0 : _f.others) === null || _g === void 0 ? void 0 : _g.isWatermarkForServer) !== null && _h !== void 0 ? _h : field.properties.features.watermark.isWatermarkFromServer,
|
|
333
|
+
sources: (_k = (_j = field === null || field === void 0 ? void 0 : field.properties) === null || _j === void 0 ? void 0 : _j.watermarkDataSources) !== null && _k !== void 0 ? _k : field.properties.features.watermark.sources
|
|
334
|
+
} }) }));
|
|
335
|
+
delete field.properties.watermarkDataSources;
|
|
336
|
+
delete field.properties.cameraConfig.others.isWatermark;
|
|
337
|
+
delete field.properties.cameraConfig.others.isWatermarkForImageUpload;
|
|
324
338
|
return field;
|
|
325
339
|
};
|
|
326
340
|
const formatFieldTypeRecord = (field) => {
|
|
@@ -397,11 +411,11 @@ export class Converter {
|
|
|
397
411
|
case EFieldType.LIVE_LOCATION:
|
|
398
412
|
field = formatFieldTypeLiveLocation(field);
|
|
399
413
|
break;
|
|
414
|
+
case EFieldType.DATA_HOLDER:
|
|
415
|
+
field = formatFieldTypeDataHolder(field);
|
|
416
|
+
break;
|
|
400
417
|
case EFieldType.API:
|
|
401
418
|
field = formatFieldTypeApi(field);
|
|
402
|
-
case EFieldType.LIVE_LOCATION:
|
|
403
|
-
field = formatFieldTypeLiveLocation(field);
|
|
404
|
-
break;
|
|
405
419
|
break;
|
|
406
420
|
case EFieldType.OTP:
|
|
407
421
|
field = formatFieldTypeOtp(field);
|
|
@@ -436,7 +450,7 @@ export class Converter {
|
|
|
436
450
|
? field.validators
|
|
437
451
|
: {};
|
|
438
452
|
field = setMissingFieldKeyValue(field, "validators", {});
|
|
439
|
-
field = setFieldKeyValue(field, "validators", Object.assign(Object.assign({}, field
|
|
453
|
+
field = setFieldKeyValue(field, "validators", Object.assign(Object.assign({}, field.validators), { min: checkObjectKeyExists(validators, "min")
|
|
440
454
|
? isNotEmptyValue(validators.min)
|
|
441
455
|
? Number(validators.min)
|
|
442
456
|
: null
|
|
@@ -488,6 +502,10 @@ export class Converter {
|
|
|
488
502
|
delete field.validators.min;
|
|
489
503
|
delete field.validators.max;
|
|
490
504
|
break;
|
|
505
|
+
case EFieldType.DATA_HOLDER:
|
|
506
|
+
delete field.validators.min;
|
|
507
|
+
delete field.validators.max;
|
|
508
|
+
break;
|
|
491
509
|
case EFieldType.CHECKBOX:
|
|
492
510
|
delete field.validators.min;
|
|
493
511
|
delete field.validators.max;
|
|
@@ -547,47 +565,39 @@ export class Converter {
|
|
|
547
565
|
if (checkObjectKeyExists(field, "defaultValue")) {
|
|
548
566
|
return field;
|
|
549
567
|
}
|
|
550
|
-
|
|
568
|
+
if (checkObjectPathExists(field, "default.value.sources")) {
|
|
551
569
|
return field;
|
|
552
570
|
}
|
|
553
|
-
|
|
571
|
+
if (checkObjectPathExists(field, "default.value.rules") &&
|
|
572
|
+
checkObjectPathExists(field, "default.value.actions")) {
|
|
573
|
+
return field;
|
|
574
|
+
}
|
|
575
|
+
if (checkObjectPathExists(field, "default.value.value") &&
|
|
576
|
+
isNotEmptyValue(field.default.value.value)) {
|
|
577
|
+
return field;
|
|
578
|
+
}
|
|
579
|
+
if (!checkObjectPathExists(field, "default.value.sources")) {
|
|
554
580
|
const defaultValue = {
|
|
555
|
-
is_found: false,
|
|
556
581
|
value: "",
|
|
557
|
-
|
|
582
|
+
triggers: ["ON_INIT"],
|
|
583
|
+
rules: [],
|
|
584
|
+
actions: [
|
|
558
585
|
{
|
|
559
|
-
|
|
586
|
+
id: "1",
|
|
587
|
+
key: "SET_FIELD_DEFAULT_VALUE",
|
|
588
|
+
condition: "true",
|
|
560
589
|
props: {
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
}
|
|
565
|
-
},
|
|
566
|
-
value: "",
|
|
567
|
-
validation: {
|
|
568
|
-
is_valid: false,
|
|
569
|
-
triggers: ["ON_INIT"],
|
|
570
|
-
rules: [],
|
|
571
|
-
actions: [
|
|
572
|
-
{
|
|
573
|
-
id: "1",
|
|
574
|
-
key: "SET_FIELD_DEFAULT_VALUE",
|
|
575
|
-
condition: "1",
|
|
590
|
+
value: {
|
|
591
|
+
source: {
|
|
592
|
+
key: "OBJECT",
|
|
576
593
|
props: {
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
props: {
|
|
581
|
-
object: {
|
|
582
|
-
key: "FORM_DATA",
|
|
583
|
-
path: `$.${field.key}`
|
|
584
|
-
}
|
|
585
|
-
}
|
|
586
|
-
}
|
|
594
|
+
object: {
|
|
595
|
+
key: "FORM_DATA",
|
|
596
|
+
path: `$.${field.key}`
|
|
587
597
|
}
|
|
588
598
|
}
|
|
589
599
|
}
|
|
590
|
-
|
|
600
|
+
}
|
|
591
601
|
}
|
|
592
602
|
}
|
|
593
603
|
]
|
|
@@ -595,8 +605,8 @@ export class Converter {
|
|
|
595
605
|
field = setValueToObjectPath(field, "default.value", defaultValue);
|
|
596
606
|
return field;
|
|
597
607
|
}
|
|
598
|
-
delete field
|
|
599
|
-
delete field
|
|
608
|
+
delete field.defaultVal;
|
|
609
|
+
delete field.defaultValue;
|
|
600
610
|
}
|
|
601
611
|
return field;
|
|
602
612
|
};
|
|
@@ -624,24 +634,33 @@ export class Converter {
|
|
|
624
634
|
};
|
|
625
635
|
const setFormFields = (formConfig, fields) => {
|
|
626
636
|
if (checkObjectKeyExists(formConfig, "multiForm")) {
|
|
627
|
-
formConfig.multiForm
|
|
637
|
+
formConfig.multiForm.fields = fields;
|
|
628
638
|
}
|
|
629
639
|
else {
|
|
630
|
-
formConfig
|
|
640
|
+
formConfig.fields = fields;
|
|
631
641
|
}
|
|
632
642
|
return formConfig;
|
|
633
643
|
};
|
|
634
644
|
const setFormFieldGroups = (formConfig, groups) => {
|
|
635
|
-
formConfig
|
|
645
|
+
formConfig.fieldGroups = groups;
|
|
636
646
|
return formConfig;
|
|
637
647
|
};
|
|
648
|
+
const updateFieldGroupKey = (field) => {
|
|
649
|
+
if (checkObjectKeyExists(field, "groupKey") &&
|
|
650
|
+
!Array.isArray(field.groupKey)) {
|
|
651
|
+
field.groupKey = [field.groupKey];
|
|
652
|
+
}
|
|
653
|
+
return field;
|
|
654
|
+
};
|
|
638
655
|
const updateFormFieldGroups = (fieldGroups, field) => {
|
|
639
656
|
if (checkObjectKeyExists(field, "groupKey")) {
|
|
640
|
-
|
|
641
|
-
fieldGroups
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
657
|
+
for (const groupKey of field.groupKey) {
|
|
658
|
+
if (checkObjectKeyExists(fieldGroups, groupKey)) {
|
|
659
|
+
fieldGroups[groupKey].push(field.key);
|
|
660
|
+
}
|
|
661
|
+
else {
|
|
662
|
+
fieldGroups[groupKey] = [field.key];
|
|
663
|
+
}
|
|
645
664
|
}
|
|
646
665
|
}
|
|
647
666
|
return fieldGroups;
|
|
@@ -651,26 +670,28 @@ export class Converter {
|
|
|
651
670
|
field.label = updateLanguage(field.label, language);
|
|
652
671
|
}
|
|
653
672
|
if (checkObjectPathExists(field, "properties.placeholder")) {
|
|
654
|
-
field.properties
|
|
673
|
+
field.properties.placeholder = updateLanguage(field.properties.placeholder, language);
|
|
655
674
|
}
|
|
656
675
|
if (checkObjectPathExists(field, "properties.label")) {
|
|
657
|
-
field.properties
|
|
676
|
+
field.properties.label = updateLanguage(field.properties.label, language);
|
|
658
677
|
}
|
|
659
678
|
const updateApiStatus = (fieldApiStatus) => {
|
|
660
679
|
for (const status in fieldApiStatus) {
|
|
661
|
-
|
|
680
|
+
if (isNotEmptyValue(status)) {
|
|
681
|
+
fieldApiStatus[status] = updateLanguage(fieldApiStatus[status], language);
|
|
682
|
+
}
|
|
662
683
|
}
|
|
663
684
|
return fieldApiStatus;
|
|
664
685
|
};
|
|
665
686
|
switch (field.type) {
|
|
666
687
|
case EFieldType.HTML:
|
|
667
|
-
field
|
|
688
|
+
field.html = updateLanguage(field.html, language);
|
|
668
689
|
break;
|
|
669
690
|
case EFieldType.CAPTURE:
|
|
670
|
-
field.properties
|
|
691
|
+
field.properties.cameraConfig.header.title = updateLanguage(field.properties.cameraConfig.header.title, language);
|
|
671
692
|
break;
|
|
672
693
|
case EFieldType.RECORD:
|
|
673
|
-
field.properties
|
|
694
|
+
field.properties.cameraConfig.header.title = updateLanguage(field.properties.cameraConfig.header.title, language);
|
|
674
695
|
break;
|
|
675
696
|
case EFieldType.SELECT:
|
|
676
697
|
field.options = field.options.map((option) => {
|
|
@@ -712,22 +733,23 @@ export class Converter {
|
|
|
712
733
|
});
|
|
713
734
|
break;
|
|
714
735
|
case EFieldType.API_CALL:
|
|
715
|
-
field
|
|
736
|
+
field.api.status.labels = updateApiStatus(field.api.status.labels);
|
|
716
737
|
break;
|
|
717
738
|
case EFieldType.LIVE_LOCATION:
|
|
718
|
-
field
|
|
739
|
+
field.api.status.labels = updateApiStatus(field.api.status.labels);
|
|
719
740
|
break;
|
|
720
741
|
default:
|
|
721
742
|
break;
|
|
722
743
|
}
|
|
723
744
|
return field;
|
|
724
745
|
};
|
|
725
|
-
|
|
746
|
+
const fields = getFormFields(formConfig);
|
|
726
747
|
let fieldGroups = {};
|
|
727
748
|
for (let field of fields) {
|
|
728
749
|
field = updateFieldLanguage(field, getLanguage());
|
|
729
750
|
field = formatOnFieldType(field);
|
|
730
751
|
field = updateFieldDisability(field);
|
|
752
|
+
field = updateFieldGroupKey(field);
|
|
731
753
|
fieldGroups = updateFormFieldGroups(fieldGroups, field);
|
|
732
754
|
field = updateFieldDefaultValue(field);
|
|
733
755
|
field = updateFieldValidators(field);
|
|
@@ -751,4 +773,4 @@ __decorate([
|
|
|
751
773
|
__decorate([
|
|
752
774
|
logMethod
|
|
753
775
|
], Converter.prototype, "convertFormConfig", null);
|
|
754
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWNvbnZlcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL3JlbmRlcmVyL2NvbmZpZy1jb252ZXJ0ZXIvY29uZmlnLWNvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixlQUFlLEVBQ2YsUUFBUSxFQUNSLFNBQVMsRUFDVCxZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUNyQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxVQUFVLEVBRVgsTUFBTSxzREFBc0QsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsY0FBYyxFQUNkLGFBQWEsRUFDYixVQUFVLEVBQ1YsVUFBVSxFQUNWLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixXQUFXLEVBQ1osTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxNQUFNLE9BQU8sU0FBUztJQUVwQiw2QkFBNkIsQ0FBQyxVQUFlLEVBQUUsSUFBUztRQUN0RCxJQUFJLG9CQUFvQixDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxFQUFFO1lBQ2pELFVBQVUsR0FBRyxvQkFBb0IsQ0FDL0IsVUFBVSxFQUNWLGlCQUFpQixFQUNqQixJQUFJLENBQUMsZUFBZSxDQUNyQixDQUFDO1NBQ0g7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBR0QsOEJBQThCLENBQUMsVUFBZSxFQUFFLFVBQWU7UUFDN0QsSUFBSSxlQUFlLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQzdD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QixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3BDO1FBRUQsVUFBVSxHQUFHLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUV6RCxVQUFVLEdBQUcsYUFBYSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUvQyxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUE5M0JDO0lBREMsU0FBUzs4REFXVDtBQUdEO0lBREMsU0FBUzsrREFlVDtBQUdEO0lBREMsU0FBUzsyREFpRlQ7QUFHRDtJQURDLFNBQVM7a0RBNndCVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNoZWNrT2JqZWN0S2V5RXhpc3RzLFxuICBjaGVja09iamVjdFBhdGhFeGlzdHMsXG4gIGdldE9iamVjdERlZXBDb3B5LFxuICBpc0VtcHR5VmFsdWUsXG4gIGlzTm90RW1wdHlWYWx1ZSxcbiAgaXNPYmplY3QsXG4gIGxvZ01ldGhvZCxcbiAgbWVyZ2VPYmplY3RzLFxuICBzZXRNaXNzaW5nS2V5VmFsdWUsXG4gIHNldFZhbHVlVG9PYmplY3RQYXRoXG59IGZyb20gXCJrd2lraWQtdG9vbGtpdFwiO1xuaW1wb3J0IHtcbiAgRUZpZWxkVHlwZSxcbiAgVEZpZWxkXG59IGZyb20gXCIuLi9mb3JtLXZpZXcvZGVmaW5pdGlvbnMvZm9ybS12aWV3LmZpZWxkcy5kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBGSUVMRF9QUk9QRVJUSUVTIH0gZnJvbSBcIi4vY29uZmlnLWNvbnZlcnRlci5jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIHVwZGF0ZUxhbmd1YWdlLFxuICBnZXRGb3JtRmllbGRzLFxuICBnZXRNYXhEYXRlLFxuICBnZXRNaW5EYXRlLFxuICBzZXRGaWVsZEFzRm9ybUVsZW1lbnQsXG4gIHNldEZpZWxkS2V5SGlkZGVuLFxuICBzZXRGaWVsZEtleVZhbHVlLFxuICBzZXRNaXNzaW5nRmllbGRLZXlWYWx1ZSxcbiAgZ2V0TGFuZ3VhZ2Vcbn0gZnJvbSBcIi4vY29uZmlnLWNvbnZlcnRlci5oZWxwZXJcIjtcblxuZXhwb3J0IGNsYXNzIENvbnZlcnRlciB7XG4gIEBsb2dNZXRob2RcbiAgdXBkYXRlRm9ybUNvbmZpZ01pc2NlbGxhbmVvdXMoZm9ybUNvbmZpZzogYW55LCBhcmdzOiBhbnkpOiBhbnkge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhcmdzLCBcImZvcm1zTGlzdExlbmd0aFwiKSkge1xuICAgICAgZm9ybUNvbmZpZyA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICBmb3JtQ29uZmlnLFxuICAgICAgICBcImZvcm1zTGlzdExlbmd0aFwiLFxuICAgICAgICBhcmdzLmZvcm1zTGlzdExlbmd0aFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybUNvbmZpZztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgdXBkYXRlRm9ybUNvbmZpZ0Zyb21Vc2VyQ29uZmlnKGZvcm1Db25maWc6IGFueSwgdXNlckNvbmZpZzogYW55KTogYW55IHtcbiAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKHVzZXJDb25maWcpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModXNlckNvbmZpZywgXCJ0aGVtZVwiKSkge1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModXNlckNvbmZpZy50aGVtZSwgXCJjbGllbnRMb2dvXCIpKSB7XG4gICAgICAgICAgc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgICBmb3JtQ29uZmlnLFxuICAgICAgICAgICAgXCJwcm9wZXJ0aWVzLmhlYWRlci5sb2dvLnNyY1wiLFxuICAgICAgICAgICAgdXNlckNvbmZpZy50aGVtZS5jbGllbnRMb2dvXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmb3JtQ29uZmlnO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICB1cGRhdGVGb3JtQ29uZmlnUHJvcGVydGllcyhmb3JtQ29uZmlnOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGZvcm1WaWV3UHJvcGVydGllcyA9IHtcbiAgICAgIGhlYWRlcjoge1xuICAgICAgICBsb2dvOiB7XG4gICAgICAgICAgc3JjOiBcIlwiLFxuICAgICAgICAgIGFsdDogXCJMb2dvXCIsXG4gICAgICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgICAgICBzdHlsZXM6IFwiXCJcbiAgICAgICAgfSxcbiAgICAgICAgYmFja0J1dHRvbjoge1xuICAgICAgICAgIG1vZGU6IFwiVEFCQkVEXCIsXG4gICAgICAgICAgYnlwYXNzQ29uZmlybWF0aW9uOiBmYWxzZSxcbiAgICAgICAgICBoaWRkZW46IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgICAgIGxhYmVsOiBmb3JtQ29uZmlnPy50aXRsZSA/PyBmb3JtQ29uZmlnPy5wcm9wcy50aXRsZSA/PyBcIkZvcm1cIixcbiAgICAgICAgICBzdHlsZXM6IFwiXCJcbiAgICAgICAgfSxcbiAgICAgICAgc3RlcHM6IHtcbiAgICAgICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgICAgIHN0eWxlczogXCJcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgbWFpbjoge1xuICAgICAgICBzdHlsZXM6IFwiXCJcbiAgICAgIH0sXG4gICAgICBmb290ZXI6IHtcbiAgICAgICAgdmlld0Zvcm1zQnV0dG9uOiB7XG4gICAgICAgICAgYnlwYXNzQ29uZmlybWF0aW9uOiBmYWxzZSxcbiAgICAgICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgICAgIGxhYmVsOiBcIlZpZXcgRm9ybXNcIlxuICAgICAgICB9LFxuICAgICAgICBzYXZlQnV0dG9uOiB7XG4gICAgICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgICAgICBsYWJlbDogXCJTYXZlXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGlzVW5zYXZlZERhdGFBbGVydEVuYWJsZWQ6IGZhbHNlXG4gICAgfTtcblxuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtQ29uZmlnLCBcInByb3BlcnRpZXNcIikpIHtcbiAgICAgIGZvcm1Db25maWcucHJvcGVydGllcyA9IGdldE9iamVjdERlZXBDb3B5KFxuICAgICAgICBtZXJnZU9iamVjdHMoZm9ybVZpZXdQcm9wZXJ0aWVzLCBmb3JtQ29uZmlnLnByb3BlcnRpZXMpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXMgPSBmb3JtVmlld1Byb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZSgpO1xuXG4gICAgaWYgKGNoZWNrT2JqZWN0UGF0aEV4aXN0cyhmb3JtQ29uZmlnLCBcInByb3BlcnRpZXMuaGVhZGVyLnRpdGxlLmxhYmVsXCIpKSB7XG4gICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXMuaGVhZGVyLnRpdGxlLmxhYmVsID0gdXBkYXRlTGFuZ3VhZ2UoXG4gICAgICAgIGZvcm1Db25maWcucHJvcGVydGllcy5oZWFkZXIudGl0bGUubGFiZWwsXG4gICAgICAgIGxhbmd1YWdlXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0UGF0aEV4aXN0cyhcbiAgICAgICAgZm9ybUNvbmZpZyxcbiAgICAgICAgXCJwcm9wZXJ0aWVzLmZvb3Rlci52aWV3Rm9ybXNCdXR0b24ubGFiZWxcIlxuICAgICAgKVxuICAgICkge1xuICAgICAgZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci52aWV3Rm9ybXNCdXR0b24ubGFiZWwgPSB1cGRhdGVMYW5ndWFnZShcbiAgICAgICAgZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci52aWV3Rm9ybXNCdXR0b24ubGFiZWwsXG4gICAgICAgIGxhbmd1YWdlXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0UGF0aEV4aXN0cyhmb3JtQ29uZmlnLCBcInByb3BlcnRpZXMuZm9vdGVyLnNhdmVCdXR0b24ubGFiZWxcIilcbiAgICApIHtcbiAgICAgIGZvcm1Db25maWcucHJvcGVydGllcy5mb290ZXIuc2F2ZUJ1dHRvbi5sYWJlbCA9IHVwZGF0ZUxhbmd1YWdlKFxuICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnNhdmVCdXR0b24ubGFiZWwsXG4gICAgICAgIGxhbmd1YWdlXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JtQ29uZmlnO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBjb252ZXJ0Rm9ybUNvbmZpZyhmb3JtQ29uZmlnOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGZvcm1hdE9uRmllbGRUeXBlID0gKGZpZWxkOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlRm9ybUZpZWxkUHJvcGVydGllcyA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKEZJRUxEX1BST1BFUlRJRVMsIGZpZWxkLnR5cGUpKSB7XG4gICAgICAgICAgZmllbGQucHJvcGVydGllcyA9IG1lcmdlT2JqZWN0cyhcbiAgICAgICAgICAgIGdldE9iamVjdERlZXBDb3B5KEZJRUxEX1BST1BFUlRJRVNbZmllbGQudHlwZV0pLFxuICAgICAgICAgICAgZmllbGQucHJvcGVydGllc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVIdG1sID0gKGZpZWxkOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkS2V5SGlkZGVuKGZpZWxkKTtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEFzRm9ybUVsZW1lbnQoZmllbGQsIGZhbHNlKTtcblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgZm9ybWF0RmllbGRUeXBlVGl0bGUgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlIaWRkZW4oZmllbGQpO1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkQXNGb3JtRWxlbWVudChmaWVsZCwgZmFsc2UpO1xuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVCdXR0b24gPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0TWlzc2luZ0ZpZWxkS2V5VmFsdWUoZmllbGQsIFwiaGlkZGVuXCIsIGZhbHNlKTtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEFzRm9ybUVsZW1lbnQoZmllbGQsIGZhbHNlKTtcbiAgICAgICAgZmllbGQgPSB1cGRhdGVGb3JtRmllbGRQcm9wZXJ0aWVzKGZpZWxkKTtcblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgZm9ybWF0RmllbGRUeXBlVGV4dCA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleUhpZGRlbihmaWVsZCk7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRBc0Zvcm1FbGVtZW50KGZpZWxkLCB0cnVlKTtcbiAgICAgICAgZmllbGQgPSB1cGRhdGVGb3JtRmllbGRQcm9wZXJ0aWVzKGZpZWxkKTtcblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgZm9ybWF0RmllbGRUeXBlUGFzc3dvcmQgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlIaWRkZW4oZmllbGQpO1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkQXNGb3JtRWxlbWVudChmaWVsZCwgdHJ1ZSk7XG4gICAgICAgIGZpZWxkID0gdXBkYXRlRm9ybUZpZWxkUHJvcGVydGllcyhmaWVsZCk7XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcm1hdEZpZWxkVHlwZUVtYWlsID0gKGZpZWxkOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkS2V5SGlkZGVuKGZpZWxkKTtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEFzRm9ybUVsZW1lbnQoZmllbGQsIHRydWUpO1xuICAgICAgICBmaWVsZCA9IHVwZGF0ZUZvcm1GaWVsZFByb3BlcnRpZXMoZmllbGQpO1xuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVTdGFyUmF0aW5nID0gKGZpZWxkOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkS2V5SGlkZGVuKGZpZWxkKTtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEFzRm9ybUVsZW1lbnQoZmllbGQsIHRydWUpO1xuICAgICAgICBmaWVsZCA9IHVwZGF0ZUZvcm1GaWVsZFByb3BlcnRpZXMoZmllbGQpO1xuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVDdXJyZW5jeSA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleUhpZGRlbihmaWVsZCk7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRBc0Zvcm1FbGVtZW50KGZpZWxkLCB0cnVlKTtcbiAgICAgICAgZmllbGQgPSB1cGRhdGVGb3JtRmllbGRQcm9wZXJ0aWVzKGZpZWxkKTtcblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgZm9ybWF0RmllbGRUeXBlVGV4dGFyZWEgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlIaWRkZW4oZmllbGQpO1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkQXNGb3JtRWxlbWVudChmaWVsZCwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVDaGVja2JveCA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleUhpZGRlbihmaWVsZCk7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRBc0Zvcm1FbGVtZW50KGZpZWxkLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcm1hdEZpZWxkVHlwZU51bWJlciA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleUhpZGRlbihmaWVsZCk7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRBc0Zvcm1FbGVtZW50KGZpZWxkLCB0cnVlKTtcblxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwia2V5XCIpKSB7XG4gICAgICAgICAgaWYgKGZpZWxkLmtleSA9PT0gXCJhYWRoYWFyX251bWJlclwiKSB7XG4gICAgICAgICAgICBmaWVsZCA9IHNldEZpZWxkS2V5VmFsdWUoZmllbGQsIFwidHlwZVwiLCBcImFhZGhhYXJfbnVtYmVyXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmllbGQua2V5ID09PSBcImNvbnRhY3RfbnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlWYWx1ZShmaWVsZCwgXCJ0eXBlXCIsIFwicGhvbmVcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IFwicGhvbmVcIiB8fCBmaWVsZC50eXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBmaWVsZCA9IHVwZGF0ZUZvcm1GaWVsZFByb3BlcnRpZXMoZmllbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVJbWFnZSA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleUhpZGRlbihmaWVsZCk7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRBc0Zvcm1FbGVtZW50KGZpZWxkLCB0cnVlKTtcbiAgICAgICAgZmllbGQgPSB1cGRhdGVGb3JtRmllbGRQcm9wZXJ0aWVzKGZpZWxkKTtcblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgZm9ybWF0RmllbGRUeXBlRGF0ZSA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleUhpZGRlbihmaWVsZCk7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRBc0Zvcm1FbGVtZW50KGZpZWxkLCB0cnVlKTtcblxuICAgICAgICBmaWVsZC5wcm9wZXJ0aWVzID0gZ2V0T2JqZWN0RGVlcENvcHkoXG4gICAgICAgICAgbWVyZ2VPYmplY3RzKFxuICAgICAgICAgICAgZ2V0T2JqZWN0RGVlcENvcHkoRklFTERfUFJPUEVSVElFU1tmaWVsZC50eXBlXSksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG1heDogZ2V0TWF4RGF0ZShmaWVsZCksXG4gICAgICAgICAgICAgIG1pbjogZ2V0TWluRGF0ZShmaWVsZClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaWVsZC5wcm9wZXJ0aWVzXG4gICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVUaW1lID0gKGZpZWxkOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkS2V5SGlkZGVuKGZpZWxkKTtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEFzRm9ybUVsZW1lbnQoZmllbGQsIHRydWUpO1xuICAgICAgICBmaWVsZCA9IHVwZGF0ZUZvcm1GaWVsZFByb3BlcnRpZXMoZmllbGQpO1xuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVQaG9uZSA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleUhpZGRlbihmaWVsZCk7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRBc0Zvcm1FbGVtZW50KGZpZWxkLCB0cnVlKTtcbiAgICAgICAgZmllbGQgPSB1cGRhdGVGb3JtRmllbGRQcm9wZXJ0aWVzKGZpZWxkKTtcblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgZm9ybWF0RmllbGRUeXBlUmFkaW8gPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlIaWRkZW4oZmllbGQpO1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkQXNGb3JtRWxlbWVudChmaWVsZCwgdHJ1ZSk7XG4gICAgICAgIGZpZWxkID0gdXBkYXRlRm9ybUZpZWxkUHJvcGVydGllcyhmaWVsZCk7XG5cbiAgICAgICAgZmllbGQub3B0aW9ucyA9IGZpZWxkLm9wdGlvbnMubWFwKCh4OiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHsgbGFiZWw6IHgsIGRpc2FibGVkOiBmYWxzZSwgZGVzY3JpcHRpb246IFwiXCIgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyh4LCBcImxhYmVsXCIpICYmXG4gICAgICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKHgsIFwiZGlzYWJsZWRcIikgJiZcbiAgICAgICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoeCwgXCJkZXNjcmlwdGlvblwiKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyh4LCBcImRpc2FibGVkXCIpKSB7XG4gICAgICAgICAgICAgIHggPSB7IC4uLngsIGRpc2FibGVkOiBmYWxzZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyh4LCBcImRlc2NyaXB0aW9uXCIpKSB7XG4gICAgICAgICAgICAgIHggPSB7IC4uLngsIGRlc2NyaXB0aW9uOiBmYWxzZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgZm9ybWF0RmllbGRUeXBlU2xpZGVyID0gKGZpZWxkOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkS2V5SGlkZGVuKGZpZWxkKTtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEFzRm9ybUVsZW1lbnQoZmllbGQsIHRydWUpO1xuICAgICAgICBmaWVsZCA9IHVwZGF0ZUZvcm1GaWVsZFByb3BlcnRpZXMoZmllbGQpO1xuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVTZWxlY3QgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlIaWRkZW4oZmllbGQpO1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkQXNGb3JtRWxlbWVudChmaWVsZCwgdHJ1ZSk7XG4gICAgICAgIGZpZWxkID0gdXBkYXRlRm9ybUZpZWxkUHJvcGVydGllcyhmaWVsZCk7XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcm1hdEZpZWxkVHlwZUFwaSA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEFzRm9ybUVsZW1lbnQoZmllbGQsIHRydWUpO1xuICAgICAgICBmaWVsZCA9IHVwZGF0ZUZvcm1GaWVsZFByb3BlcnRpZXMoZmllbGQpO1xuXG4gICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwic2hvd0xvYWRlclwiKSkge1xuICAgICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlWYWx1ZShmaWVsZCwgXCJzaG93TG9hZGVyXCIsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiYXBpXCIpKSB7XG4gICAgICAgICAgY29uc3QgZmllbGRBcGlEZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIHVybDogXCJcIixcbiAgICAgICAgICAgIHJlcXVlc3Q6IHt9LFxuICAgICAgICAgICAgcmVzcG9uc2U6IHt9LFxuICAgICAgICAgICAgc3RhdHVzOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogXCJDYWxsIEFQSVwiLFxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IFwiQ2FsbCBBUElcIixcbiAgICAgICAgICAgICAgICByZXRyeTogXCJSZXRyeSBBUElcIixcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBcIkFQSSBTdWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgZmFpbGVkOiBcIkFQSSBGYWlsZWRcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBmaWVsZC5hcGkgPSBnZXRPYmplY3REZWVwQ29weShcbiAgICAgICAgICAgIG1lcmdlT2JqZWN0cyhmaWVsZEFwaURlZmF1bHRzLCBmaWVsZEFwaURlZmF1bHRzKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC5hcGksIFwicmVxdWVzdFwiKSAmJlxuICAgICAgICAgICFjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC5hcGksIFwiZW50cnlwb2ludFwiKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBhcGlFbnRyeXBvaW50ID0ge1xuICAgICAgICAgICAgdHJpZ2dlcnM6IFtcIk9OX0FQSV9DQUxMXCJdLFxuICAgICAgICAgICAgcnVsZXM6IFtdLFxuICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IFwiMVwiLFxuICAgICAgICAgICAgICAgIGtleTogXCJBUElfQ0FMTFwiLFxuICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgIGZpZWxkS2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICAgICAgICBhcGlLZXk6IGZpZWxkLmFwaS5lbmRwb2ludHNbMF0uYXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfTtcbiAgICAgICAgICBmaWVsZC5lbnRyeXBvaW50ID0gZ2V0T2JqZWN0RGVlcENvcHkoXG4gICAgICAgICAgICBtZXJnZU9iamVjdHMoYXBpRW50cnlwb2ludCwgZmllbGQuYXBpKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcm1hdEZpZWxkVHlwZUxpdmVMb2NhdGlvbiA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEFzRm9ybUVsZW1lbnQoZmllbGQsIHRydWUpO1xuICAgICAgICBmaWVsZCA9IHVwZGF0ZUZvcm1GaWVsZFByb3BlcnRpZXMoZmllbGQpO1xuXG4gICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwic2hvd0xvYWRlclwiKSkge1xuICAgICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlWYWx1ZShmaWVsZCwgXCJzaG93TG9hZGVyXCIsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiYXBpXCIpKSB7XG4gICAgICAgICAgY29uc3QgZmllbGRBcGlEZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIHVybDogXCJcIixcbiAgICAgICAgICAgIHJlcXVlc3Q6IHt9LFxuICAgICAgICAgICAgcmVzcG9uc2U6IHt9LFxuICAgICAgICAgICAgc3RhdHVzOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogXCJHZXQgTGl2ZSBMb2NhdGlvblwiLFxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IFwiR2V0dGluZyBMaXZlIExvY2F0aW9uXCIsXG4gICAgICAgICAgICAgICAgcmV0cnk6IFwiR2V0IExpdmUgTG9jYXRpb25cIixcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBcIkxpdmUgTG9jYXRpb25cIixcbiAgICAgICAgICAgICAgICBmYWlsZWQ6IFwiTGl2ZSBMb2NhdGlvblwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGZpZWxkLmFwaSA9IGdldE9iamVjdERlZXBDb3B5KFxuICAgICAgICAgICAgbWVyZ2VPYmplY3RzKGZpZWxkQXBpRGVmYXVsdHMsIGZpZWxkQXBpRGVmYXVsdHMpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVPdHAgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlIaWRkZW4oZmllbGQpO1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkQXNGb3JtRWxlbWVudChmaWVsZCwgdHJ1ZSk7XG5cbiAgICAgICAgZmllbGQucHJvcGVydGllcyA9IGdldE9iamVjdERlZXBDb3B5KFxuICAgICAgICAgIG1lcmdlT2JqZWN0cyhcbiAgICAgICAgICAgIGdldE9iamVjdERlZXBDb3B5KEZJRUxEX1BST1BFUlRJRVNbZmllbGQudHlwZV0pLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtYXNrOiBuZXcgQXJyYXkoZmllbGQ/LnByb3BlcnRpZXM/Lm90cExlbmd0aCA/PyA0KVxuICAgICAgICAgICAgICAgIC5maWxsKFwiI1wiKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiIFwiKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpZWxkLnByb3BlcnRpZXNcbiAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcm1hdEZpZWxkVHlwZUFhZGhhYXJOdW1iZXIgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlIaWRkZW4oZmllbGQpO1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkQXNGb3JtRWxlbWVudChmaWVsZCwgdHJ1ZSk7XG4gICAgICAgIGZpZWxkID0gdXBkYXRlRm9ybUZpZWxkUHJvcGVydGllcyhmaWVsZCk7XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcm1hdEZpZWxkVHlwZUZpbGUgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlIaWRkZW4oZmllbGQpO1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkQXNGb3JtRWxlbWVudChmaWVsZCwgdHJ1ZSk7XG4gICAgICAgIGZpZWxkID0gdXBkYXRlRm9ybUZpZWxkUHJvcGVydGllcyhmaWVsZCk7XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcm1hdEZpZWxkVHlwZUNhcHR1cmUgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlIaWRkZW4oZmllbGQpO1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkQXNGb3JtRWxlbWVudChmaWVsZCwgdHJ1ZSk7XG4gICAgICAgIGZpZWxkID0gdXBkYXRlRm9ybUZpZWxkUHJvcGVydGllcyhmaWVsZCk7XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcm1hdEZpZWxkVHlwZVJlY29yZCA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleUhpZGRlbihmaWVsZCk7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRBc0Zvcm1FbGVtZW50KGZpZWxkLCB0cnVlKTtcbiAgICAgICAgZmllbGQgPSB1cGRhdGVGb3JtRmllbGRQcm9wZXJ0aWVzKGZpZWxkKTtcblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9O1xuXG4gICAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkhUTUw6XG4gICAgICAgICAgZmllbGQgPSBmb3JtYXRGaWVsZFR5cGVIdG1sKGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLlRJVExFOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlVGl0bGUoZmllbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuQlVUVE9OOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlQnV0dG9uKGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLlRFWFQ6XG4gICAgICAgICAgZmllbGQgPSBmb3JtYXRGaWVsZFR5cGVUZXh0KGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLlBBU1NXT1JEOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlUGFzc3dvcmQoZmllbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuRU1BSUw6XG4gICAgICAgICAgZmllbGQgPSBmb3JtYXRGaWVsZFR5cGVFbWFpbChmaWVsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5URVhUQVJFQTpcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZVRleHRhcmVhKGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkNIRUNLQk9YOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlQ2hlY2tib3goZmllbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuTlVNQkVSOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlTnVtYmVyKGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLlBSRVZJRVdfSU1BR0U6XG4gICAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleVZhbHVlKGZpZWxkLCBcInR5cGVcIiwgXCJpbWFnZVwiKTtcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZUltYWdlKGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLklNQUdFOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlSW1hZ2UoZmllbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuREFURTpcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZURhdGUoZmllbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuVElNRTpcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZVRpbWUoZmllbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuUEhPTkU6XG4gICAgICAgICAgZmllbGQgPSBmb3JtYXRGaWVsZFR5cGVQaG9uZShmaWVsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5SQURJTzpcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZVJhZGlvKGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLlNMSURFUjpcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZVNsaWRlcihmaWVsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzZWFyY2gtdGV4dFwiOlxuICAgICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlWYWx1ZShmaWVsZCwgXCJ0eXBlXCIsIFwic2VsZWN0XCIpO1xuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlU2VsZWN0KGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkRST1BET1dOX1dJVEhfU0VBUkNIOlxuICAgICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlWYWx1ZShmaWVsZCwgXCJ0eXBlXCIsIFwic2VsZWN0XCIpO1xuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlU2VsZWN0KGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLlNFTEVDVDpcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZVNlbGVjdChmaWVsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5BUElfQ0FMTDpcbiAgICAgICAgICBmaWVsZCA9IHNldEZpZWxkS2V5VmFsdWUoZmllbGQsIFwidHlwZVwiLCBcImFwaVwiKTtcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZUFwaShmaWVsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5MSVZFX0xPQ0FUSU9OOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlTGl2ZUxvY2F0aW9uKGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkFQSTpcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZUFwaShmaWVsZCk7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5MSVZFX0xPQ0FUSU9OOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlTGl2ZUxvY2F0aW9uKGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLk9UUDpcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZU90cChmaWVsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5BQURIQUFSX05VTUJFUjpcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZUFhZGhhYXJOdW1iZXIoZmllbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuRklMRTpcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZUZpbGUoZmllbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuQ0FQVFVSRTpcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZUNhcHR1cmUoZmllbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuUkVDT1JEOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlUmVjb3JkKGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLlNUQVJfUkFUSU5HOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlU3RhclJhdGluZyhmaWVsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5DVVJSRU5DWTpcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZUN1cnJlbmN5KGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVGaWVsZFZhbGlkYXRvcnMgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAoZmllbGQuaXNGb3JtRWxlbWVudCkge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdG9yc1wiKVxuICAgICAgICAgID8gZmllbGQudmFsaWRhdG9yc1xuICAgICAgICAgIDoge307XG5cbiAgICAgICAgZmllbGQgPSBzZXRNaXNzaW5nRmllbGRLZXlWYWx1ZShmaWVsZCwgXCJ2YWxpZGF0b3JzXCIsIHt9KTtcblxuICAgICAgICBmaWVsZCA9IHNldEZpZWxkS2V5VmFsdWUoZmllbGQsIFwidmFsaWRhdG9yc1wiLCB7XG4gICAgICAgICAgLi4uZmllbGRbXCJ2YWxpZGF0b3JzXCJdLFxuICAgICAgICAgIG1pbjogY2hlY2tPYmplY3RLZXlFeGlzdHModmFsaWRhdG9ycywgXCJtaW5cIilcbiAgICAgICAgICAgID8gaXNOb3RFbXB0eVZhbHVlKHZhbGlkYXRvcnMubWluKVxuICAgICAgICAgICAgICA/IE51bWJlcih2YWxpZGF0b3JzLm1pbilcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICA6IGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcIm1pblwiKVxuICAgICAgICAgICAgPyBOdW1iZXIoZmllbGQubWluKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIG1heDogY2hlY2tPYmplY3RLZXlFeGlzdHModmFsaWRhdG9ycywgXCJtYXhcIilcbiAgICAgICAgICAgID8gaXNOb3RFbXB0eVZhbHVlKHZhbGlkYXRvcnMubWF4KVxuICAgICAgICAgICAgICA/IE51bWJlcih2YWxpZGF0b3JzLm1heClcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICA6IGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcIm1heFwiKVxuICAgICAgICAgICAgPyBOdW1iZXIoZmllbGQubWF4KVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIHJlcXVpcmVkOiBjaGVja09iamVjdEtleUV4aXN0cyh2YWxpZGF0b3JzLCBcInJlcXVpcmVkXCIpXG4gICAgICAgICAgICA/IEJvb2xlYW4odmFsaWRhdG9ycy5yZXF1aXJlZClcbiAgICAgICAgICAgIDogY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwicmVxdWlyZWRcIilcbiAgICAgICAgICAgID8gQm9vbGVhbihmaWVsZC5yZXF1aXJlZClcbiAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgbWluTGVuZ3RoOiBjaGVja09iamVjdEtleUV4aXN0cyh2YWxpZGF0b3JzLCBcIm1pbkxlbmd0aFwiKVxuICAgICAgICAgICAgPyBpc05vdEVtcHR5VmFsdWUodmFsaWRhdG9ycy5taW5MZW5ndGgpXG4gICAgICAgICAgICAgID8gTnVtYmVyKHZhbGlkYXRvcnMubWluTGVuZ3RoKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIDogY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwibWluTGVuZ3RoXCIpXG4gICAgICAgICAgICA/IE51bWJlcihmaWVsZC5taW5MZW5ndGgpXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgbWF4TGVuZ3RoOiBjaGVja09iamVjdEtleUV4aXN0cyh2YWxpZGF0b3JzLCBcIm1heExlbmd0aFwiKVxuICAgICAgICAgICAgPyBpc05vdEVtcHR5VmFsdWUodmFsaWRhdG9ycy5tYXhMZW5ndGgpXG4gICAgICAgICAgICAgID8gTnVtYmVyKHZhbGlkYXRvcnMubWF4TGVuZ3RoKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIDogY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwibGVuZ3RoXCIpXG4gICAgICAgICAgICA/IE51bWJlcihmaWVsZC5sZW5ndGgpXG4gICAgICAgICAgICA6IGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcIm1heExlbmd0aFwiKVxuICAgICAgICAgICAgPyBOdW1iZXIoZmllbGQubWF4TGVuZ3RoKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIHBhdHRlcm46IGNoZWNrT2JqZWN0S2V5RXhpc3RzKHZhbGlkYXRvcnMsIFwicGF0dGVyblwiKVxuICAgICAgICAgICAgPyBpc05vdEVtcHR5VmFsdWUodmFsaWRhdG9ycy5wYXR0ZXJuKVxuICAgICAgICAgICAgICA/IHZhbGlkYXRvcnMucGF0dGVyblxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJwYXR0ZXJuXCIpXG4gICAgICAgICAgICA/IHsga2V5OiBcIkNVU1RPTVwiLCBwYXR0ZXJuOiBTdHJpbmcoZmllbGQucGF0dGVybikgfVxuICAgICAgICAgICAgOiBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJyZWdleFwiKVxuICAgICAgICAgICAgPyB7IGtleTogXCJDVVNUT01cIiwgcGF0dGVybjogU3RyaW5nKGZpZWxkLnJlZ2V4KSB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcblxuICAgICAgICBkZWxldGUgZmllbGQubWluO1xuICAgICAgICBkZWxldGUgZmllbGQubWF4O1xuICAgICAgICBkZWxldGUgZmllbGQucmVxdWlyZWQ7XG4gICAgICAgIGRlbGV0ZSBmaWVsZC5taW5MZW5ndGg7XG4gICAgICAgIGRlbGV0ZSBmaWVsZC5sZW5ndGg7XG4gICAgICAgIGRlbGV0ZSBmaWVsZC5tYXhMZW5ndGg7XG4gICAgICAgIGRlbGV0ZSBmaWVsZC5wYXR0ZXJuO1xuICAgICAgICBkZWxldGUgZmllbGQucmVnZXg7XG5cbiAgICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgICAgY2FzZSBFRmllbGRUeXBlLlRFWFQ6XG4gICAgICAgICAgICBkZWxldGUgZmllbGQudmFsaWRhdG9ycy5taW47XG4gICAgICAgICAgICBkZWxldGUgZmllbGQudmFsaWRhdG9ycy5tYXg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIEVGaWVsZFR5cGUuQ0hFQ0tCT1g6XG4gICAgICAgICAgICBkZWxldGUgZmllbGQudmFsaWRhdG9ycy5taW47XG4gICAgICAgICAgICBkZWxldGUgZmllbGQudmFsaWRhdG9ycy5tYXg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIEVGaWVsZFR5cGUuUFJFVklFV19JTUFHRTpcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC52YWxpZGF0b3JzLm1pbjtcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC52YWxpZGF0b3JzLm1heDtcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC52YWxpZGF0b3JzLm1pbkxlbmd0aDtcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC52YWxpZGF0b3JzLm1heExlbmd0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgRUZpZWxkVHlwZS5GSUxFOlxuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWluO1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWF4O1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWluTGVuZ3RoO1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWF4TGVuZ3RoO1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMucGF0dGVybjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgRUZpZWxkVHlwZS5DQVBUVVJFOlxuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWluO1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWF4O1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWluTGVuZ3RoO1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWF4TGVuZ3RoO1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMucGF0dGVybjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgRUZpZWxkVHlwZS5SRUNPUkQ6XG4gICAgICAgICAgICBkZWxldGUgZmllbGQudmFsaWRhdG9ycy5taW47XG4gICAgICAgICAgICBkZWxldGUgZmllbGQudmFsaWRhdG9ycy5tYXg7XG4gICAgICAgICAgICBkZWxldGUgZmllbGQudmFsaWRhdG9ycy5taW5MZW5ndGg7XG4gICAgICAgICAgICBkZWxldGUgZmllbGQudmFsaWRhdG9ycy5tYXhMZW5ndGg7XG4gICAgICAgICAgICBkZWxldGUgZmllbGQudmFsaWRhdG9ycy5wYXR0ZXJuO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRW1wdHlWYWx1ZShmaWVsZC52YWxpZGF0b3JzPy5taW4pKSB7XG4gICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWluO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0VtcHR5VmFsdWUoZmllbGQudmFsaWRhdG9ycz8ubWF4KSkge1xuICAgICAgICAgIGRlbGV0ZSBmaWVsZC52YWxpZGF0b3JzLm1pbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNFbXB0eVZhbHVlKGZpZWxkLnZhbGlkYXRvcnM/Lm1pbkxlbmd0aCkpIHtcbiAgICAgICAgICBkZWxldGUgZmllbGQudmFsaWRhdG9ycy5taW5MZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRW1wdHlWYWx1ZShmaWVsZC52YWxpZGF0b3JzPy5tYXhMZW5ndGgpKSB7XG4gICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWF4TGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0VtcHR5VmFsdWUoZmllbGQudmFsaWRhdG9ycz8ucGF0dGVybikpIHtcbiAgICAgICAgICBkZWxldGUgZmllbGQudmFsaWRhdG9ycy5wYXR0ZXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZmllbGQuZm9jdXMgPSBmYWxzZTtcbiAgICAgICAgZmllbGQuaW52YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmllbGQ7XG4gICAgfTtcblxuICAgIGNvbnN0IHVwZGF0ZUZpZWxkRGVmYXVsdFZhbHVlID0gKGZpZWxkOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcImRlZmF1bHRWYWx1ZVwiKSkge1xuICAgICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgICAgfSBlbHNlIGlmIChjaGVja09iamVjdFBhdGhFeGlzdHMoZmllbGQsIFwiZGVmYXVsdC52YWx1ZS5zb3VyY2VzXCIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgICB9IGVsc2UgaWYgKCFjaGVja09iamVjdFBhdGhFeGlzdHMoZmllbGQsIFwiZGVmYXVsdC52YWx1ZS5zb3VyY2VzXCIpKSB7XG4gICAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0ge1xuICAgICAgICAgICAgaXNfZm91bmQ6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICAgICAgICBzb3VyY2VzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiT0JKRUNUXCIsXG4gICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IFwiRk9STV9EQVRBXCIsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGAkLiR7ZmllbGQua2V5fWBcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBcIlwiLFxuICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IHtcbiAgICAgICAgICAgICAgICAgIGlzX3ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIHRyaWdnZXJzOiBbXCJPTl9JTklUXCJdLFxuICAgICAgICAgICAgICAgICAgcnVsZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiMVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJTRVRfRklFTERfREVGQVVMVF9WQUxVRVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJPQkpFQ1RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJGT1JNX0RBVEFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogYCQuJHtmaWVsZC5rZXl9YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBmaWVsZCA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZpZWxkLCBcImRlZmF1bHQudmFsdWVcIiwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGUgZmllbGRbXCJkZWZhdWx0VmFsXCJdO1xuICAgICAgICBkZWxldGUgZmllbGRbXCJkZWZhdWx0VmFsdWVcIl07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlRmllbGREaXNhYmlsaXR5ID0gKGZpZWxkOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgZmllbGQgPSBzZXRNaXNzaW5nS2V5VmFsdWUoZmllbGQsIFwiZGlzYWJsZWRcIiwgZmFsc2UpO1xuXG4gICAgICByZXR1cm4gZmllbGQ7XG4gICAgfTtcblxuICAgIGNvbnN0IHVwZGF0ZUZpZWxkTWVzc2FnZXMgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAoZmllbGQuaXNGb3JtRWxlbWVudCkge1xuICAgICAgICBmaWVsZCA9IHNldE1pc3NpbmdGaWVsZEtleVZhbHVlKGZpZWxkLCBcIm1lc3NhZ2VzXCIsIFtdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVGaWVsZFJlc2V0QnV0dG9uID0gKGZpZWxkOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcImFjdGlvblwiKSAmJlxuICAgICAgICAgIGZpZWxkLmFjdGlvbiA9PT0gXCJyZXNldFwiICYmXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiZmllbGRzXCIpXG4gICAgICAgICkge1xuICAgICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlWYWx1ZShmaWVsZCwgXCJyZXNldFwiLCB7XG4gICAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0Rm9ybUZpZWxkcyA9IChmb3JtQ29uZmlnOiBhbnksIGZpZWxkczogYW55W10pOiBhbnkgPT4ge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm1Db25maWcsIFwibXVsdGlGb3JtXCIpKSB7XG4gICAgICAgIGZvcm1Db25maWcubXVsdGlGb3JtW1wiZmllbGRzXCJdID0gZmllbGRzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9ybUNvbmZpZ1tcImZpZWxkc1wiXSA9IGZpZWxkcztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZvcm1Db25maWc7XG4gICAgfTtcblxuICAgIGNvbnN0IHNldEZvcm1GaWVsZEdyb3VwcyA9IChmb3JtQ29uZmlnOiBhbnksIGdyb3VwczogYW55KTogYW55ID0+IHtcbiAgICAgIGZvcm1Db25maWdbXCJmaWVsZEdyb3Vwc1wiXSA9IGdyb3VwcztcblxuICAgICAgcmV0dXJuIGZvcm1Db25maWc7XG4gICAgfTtcblxuICAgIGNvbnN0IHVwZGF0ZUZvcm1GaWVsZEdyb3VwcyA9IChmaWVsZEdyb3VwczogYW55LCBmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJncm91cEtleVwiKSkge1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGRHcm91cHMsIGZpZWxkLmdyb3VwS2V5KSkge1xuICAgICAgICAgIGZpZWxkR3JvdXBzW2ZpZWxkLmdyb3VwS2V5XS5wdXNoKGZpZWxkLmtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRHcm91cHNbZmllbGQuZ3JvdXBLZXldID0gW2ZpZWxkLmtleV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpZWxkR3JvdXBzO1xuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVGaWVsZExhbmd1YWdlID0gKGZpZWxkOiBURmllbGQsIGxhbmd1YWdlOiBzdHJpbmcpOiBhbnkgPT4ge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcImxhYmVsXCIpKSB7XG4gICAgICAgIGZpZWxkLmxhYmVsID0gdXBkYXRlTGFuZ3VhZ2UoZmllbGQubGFiZWwsIGxhbmd1YWdlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoZWNrT2JqZWN0UGF0aEV4aXN0cyhmaWVsZCwgXCJwcm9wZXJ0aWVzLnBsYWNlaG9sZGVyXCIpKSB7XG4gICAgICAgIGZpZWxkLnByb3BlcnRpZXNbXCJwbGFjZWhvbGRlclwiXSA9IHVwZGF0ZUxhbmd1YWdlKFxuICAgICAgICAgIGZpZWxkLnByb3BlcnRpZXNbXCJwbGFjZWhvbGRlclwiXSxcbiAgICAgICAgICBsYW5ndWFnZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hlY2tPYmplY3RQYXRoRXhpc3RzKGZpZWxkLCBcInByb3BlcnRpZXMubGFiZWxcIikpIHtcbiAgICAgICAgZmllbGQucHJvcGVydGllc1tcImxhYmVsXCJdID0gdXBkYXRlTGFuZ3VhZ2UoXG4gICAgICAgICAgZmllbGQucHJvcGVydGllc1tcImxhYmVsXCJdLFxuICAgICAgICAgIGxhbmd1YWdlXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVwZGF0ZUFwaVN0YXR1cyA9IChmaWVsZEFwaVN0YXR1cykgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHN0YXR1cyBpbiBmaWVsZEFwaVN0YXR1cykge1xuICAgICAgICAgIGZpZWxkQXBpU3RhdHVzW3N0YXR1c10gPSB1cGRhdGVMYW5ndWFnZShcbiAgICAgICAgICAgIGZpZWxkQXBpU3RhdHVzW3N0YXR1c10sXG4gICAgICAgICAgICBsYW5ndWFnZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpZWxkQXBpU3RhdHVzO1xuICAgICAgfTtcblxuICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5IVE1MOlxuICAgICAgICAgIGZpZWxkW1wiaHRtbFwiXSA9IHVwZGF0ZUxhbmd1YWdlKGZpZWxkW1wiaHRtbFwiXSwgbGFuZ3VhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuQ0FQVFVSRTpcbiAgICAgICAgICBmaWVsZC5wcm9wZXJ0aWVzW1wiY2FtZXJhQ29uZmlnXCJdLmhlYWRlci50aXRsZSA9IHVwZGF0ZUxhbmd1YWdlKFxuICAgICAgICAgICAgZmllbGQucHJvcGVydGllc1tcImNhbWVyYUNvbmZpZ1wiXS5oZWFkZXIudGl0bGUsXG4gICAgICAgICAgICBsYW5ndWFnZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5SRUNPUkQ6XG4gICAgICAgICAgZmllbGQucHJvcGVydGllc1tcImNhbWVyYUNvbmZpZ1wiXS5oZWFkZXIudGl0bGUgPSB1cGRhdGVMYW5ndWFnZShcbiAgICAgICAgICAgIGZpZWxkLnByb3BlcnRpZXNbXCJjYW1lcmFDb25maWdcIl0uaGVhZGVyLnRpdGxlLFxuICAgICAgICAgICAgbGFuZ3VhZ2VcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuU0VMRUNUOlxuICAgICAgICAgIGZpZWxkLm9wdGlvbnMgPSBmaWVsZC5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNPYmplY3Qob3B0aW9uKSkge1xuICAgICAgICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMob3B0aW9uLCBcInRpdGxlXCIpKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uLnRpdGxlID0gdXBkYXRlTGFuZ3VhZ2Uob3B0aW9uLnRpdGxlLCBsYW5ndWFnZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uID0gdXBkYXRlTGFuZ3VhZ2Uob3B0aW9uLCBsYW5ndWFnZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5EUk9QRE9XTl9XSVRIX1NFQVJDSDpcbiAgICAgICAgICBmaWVsZC5vcHRpb25zID0gZmllbGQub3B0aW9ucy5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKG9wdGlvbiwgXCJ0aXRsZVwiKSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbi50aXRsZSA9IHVwZGF0ZUxhbmd1YWdlKG9wdGlvbi50aXRsZSwgbGFuZ3VhZ2UpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdGlvbiA9IHVwZGF0ZUxhbmd1YWdlKG9wdGlvbiwgbGFuZ3VhZ2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuUkFESU86XG4gICAgICAgICAgZmllbGQub3B0aW9ucyA9IGZpZWxkLm9wdGlvbnMubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChpc09iamVjdChvcHRpb24pKSB7XG4gICAgICAgICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhvcHRpb24sIFwibGFiZWxcIikpIHtcbiAgICAgICAgICAgICAgICBvcHRpb24ubGFiZWwgPSB1cGRhdGVMYW5ndWFnZShvcHRpb24ubGFiZWwsIGxhbmd1YWdlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvcHRpb24gPSB1cGRhdGVMYW5ndWFnZShvcHRpb24sIGxhbmd1YWdlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkFQSV9DQUxMOlxuICAgICAgICAgIGZpZWxkW1wiYXBpXCJdW1wic3RhdHVzXCJdW1wibGFiZWxzXCJdID0gdXBkYXRlQXBpU3RhdHVzKFxuICAgICAgICAgICAgZmllbGRbXCJhcGlcIl1bXCJzdGF0dXNcIl1bXCJsYWJlbHNcIl1cbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuTElWRV9MT0NBVElPTjpcbiAgICAgICAgICBmaWVsZFtcImFwaVwiXVtcInN0YXR1c1wiXVtcImxhYmVsc1wiXSA9IHVwZGF0ZUFwaVN0YXR1cyhcbiAgICAgICAgICAgIGZpZWxkW1wiYXBpXCJdW1wic3RhdHVzXCJdW1wibGFiZWxzXCJdXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH07XG5cbiAgICBsZXQgZmllbGRzOiBhbnlbXSA9IGdldEZvcm1GaWVsZHMoZm9ybUNvbmZpZyk7XG5cbiAgICBsZXQgZmllbGRHcm91cHM6IGFueSA9IHt9O1xuXG4gICAgZm9yIChsZXQgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICBmaWVsZCA9IHVwZGF0ZUZpZWxkTGFuZ3VhZ2UoZmllbGQsIGdldExhbmd1YWdlKCkpO1xuXG4gICAgICBmaWVsZCA9IGZvcm1hdE9uRmllbGRUeXBlKGZpZWxkKTtcblxuICAgICAgZmllbGQgPSB1cGRhdGVGaWVsZERpc2FiaWxpdHkoZmllbGQpO1xuXG4gICAgICBmaWVsZEdyb3VwcyA9IHVwZGF0ZUZvcm1GaWVsZEdyb3VwcyhmaWVsZEdyb3VwcywgZmllbGQpO1xuXG4gICAgICBmaWVsZCA9IHVwZGF0ZUZpZWxkRGVmYXVsdFZhbHVlKGZpZWxkKTtcblxuICAgICAgZmllbGQgPSB1cGRhdGVGaWVsZFZhbGlkYXRvcnMoZmllbGQpO1xuXG4gICAgICBmaWVsZCA9IHVwZGF0ZUZpZWxkUmVzZXRCdXR0b24oZmllbGQpO1xuXG4gICAgICBmaWVsZCA9IHVwZGF0ZUZpZWxkTWVzc2FnZXMoZmllbGQpO1xuICAgIH1cblxuICAgIGZvcm1Db25maWcgPSBzZXRGb3JtRmllbGRHcm91cHMoZm9ybUNvbmZpZywgZmllbGRHcm91cHMpO1xuXG4gICAgZm9ybUNvbmZpZyA9IHNldEZvcm1GaWVsZHMoZm9ybUNvbmZpZywgZmllbGRzKTtcblxuICAgIHJldHVybiBmb3JtQ29uZmlnO1xuICB9XG59XG4iXX0=
|
|
776
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWNvbnZlcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL3JlbmRlcmVyL2NvbmZpZy1jb252ZXJ0ZXIvY29uZmlnLWNvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixlQUFlLEVBQ2YsUUFBUSxFQUNSLFNBQVMsRUFDVCxZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUNyQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxVQUFVLEVBRVgsTUFBTSxzREFBc0QsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsYUFBYSxFQUNiLFdBQVcsRUFDWCxVQUFVLEVBQ1YsVUFBVSxFQUNWLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsY0FBYyxFQUNmLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsTUFBTSxPQUFPLFNBQVM7SUFFcEIsNkJBQTZCLENBQUMsVUFBZSxFQUFFLElBQVM7UUFDdEQsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsRUFBRTtZQUNqRCxVQUFVLEdBQUcsb0JBQW9CLENBQy9CLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsSUFBSSxDQUFDLGVBQWUsQ0FDckIsQ0FBQztTQUNIO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUdELDhCQUE4QixDQUFDLFVBQWUsRUFBRSxVQUFlO1FBQzdELElBQUksZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQy9CLElBQUksb0JBQW9CLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FB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Q0FBQztRQUVoRCxJQUFJLFdBQVcsR0FBUSxFQUFFLENBQUM7UUFFMUIsS0FBSyxJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUU7WUFDeEIsS0FBSyxHQUFHLG1CQUFtQixDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBRWxELEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVqQyxLQUFLLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFckMsS0FBSyxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRW5DLFdBQVcsR0FBRyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFeEQsS0FBSyxHQUFHLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXZDLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVyQyxLQUFLLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFdEMsS0FBSyxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3BDO1FBRUQsVUFBVSxHQUFHLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUV6RCxVQUFVLEdBQUcsYUFBYSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUvQyxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUExNkJDO0lBREMsU0FBUzs4REFXVDtBQUdEO0lBREMsU0FBUzsrREFlVDtBQUdEO0lBREMsU0FBUzsyREFpRlQ7QUFHRDtJQURDLFNBQVM7a0RBeXpCVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNoZWNrT2JqZWN0S2V5RXhpc3RzLFxuICBjaGVja09iamVjdFBhdGhFeGlzdHMsXG4gIGdldE9iamVjdERlZXBDb3B5LFxuICBpc0VtcHR5VmFsdWUsXG4gIGlzTm90RW1wdHlWYWx1ZSxcbiAgaXNPYmplY3QsXG4gIGxvZ01ldGhvZCxcbiAgbWVyZ2VPYmplY3RzLFxuICBzZXRNaXNzaW5nS2V5VmFsdWUsXG4gIHNldFZhbHVlVG9PYmplY3RQYXRoXG59IGZyb20gXCJrd2lraWQtdG9vbGtpdFwiO1xuaW1wb3J0IHtcbiAgRUZpZWxkVHlwZSxcbiAgVEZpZWxkXG59IGZyb20gXCIuLi9mb3JtLXZpZXcvZGVmaW5pdGlvbnMvZm9ybS12aWV3LmZpZWxkcy5kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBGSUVMRF9QUk9QRVJUSUVTIH0gZnJvbSBcIi4vY29uZmlnLWNvbnZlcnRlci5jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIGdldEZvcm1GaWVsZHMsXG4gIGdldExhbmd1YWdlLFxuICBnZXRNYXhEYXRlLFxuICBnZXRNaW5EYXRlLFxuICBzZXRGaWVsZEFzRm9ybUVsZW1lbnQsXG4gIHNldEZpZWxkS2V5RGlzYWJsZWQsXG4gIHNldEZpZWxkS2V5SGlkZGVuLFxuICBzZXRGaWVsZEtleVZhbHVlLFxuICBzZXRNaXNzaW5nRmllbGRLZXlWYWx1ZSxcbiAgdXBkYXRlTGFuZ3VhZ2Vcbn0gZnJvbSBcIi4vY29uZmlnLWNvbnZlcnRlci5oZWxwZXJcIjtcblxuZXhwb3J0IGNsYXNzIENvbnZlcnRlciB7XG4gIEBsb2dNZXRob2RcbiAgdXBkYXRlRm9ybUNvbmZpZ01pc2NlbGxhbmVvdXMoZm9ybUNvbmZpZzogYW55LCBhcmdzOiBhbnkpOiBhbnkge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhcmdzLCBcImZvcm1zTGlzdExlbmd0aFwiKSkge1xuICAgICAgZm9ybUNvbmZpZyA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICBmb3JtQ29uZmlnLFxuICAgICAgICBcImZvcm1zTGlzdExlbmd0aFwiLFxuICAgICAgICBhcmdzLmZvcm1zTGlzdExlbmd0aFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybUNvbmZpZztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgdXBkYXRlRm9ybUNvbmZpZ0Zyb21Vc2VyQ29uZmlnKGZvcm1Db25maWc6IGFueSwgdXNlckNvbmZpZzogYW55KTogYW55IHtcbiAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKHVzZXJDb25maWcpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModXNlckNvbmZpZywgXCJ0aGVtZVwiKSkge1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModXNlckNvbmZpZy50aGVtZSwgXCJjbGllbnRMb2dvXCIpKSB7XG4gICAgICAgICAgc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgICBmb3JtQ29uZmlnLFxuICAgICAgICAgICAgXCJwcm9wZXJ0aWVzLmhlYWRlci5sb2dvLnNyY1wiLFxuICAgICAgICAgICAgdXNlckNvbmZpZy50aGVtZS5jbGllbnRMb2dvXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmb3JtQ29uZmlnO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICB1cGRhdGVGb3JtQ29uZmlnUHJvcGVydGllcyhmb3JtQ29uZmlnOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGZvcm1WaWV3UHJvcGVydGllcyA9IHtcbiAgICAgIGhlYWRlcjoge1xuICAgICAgICBsb2dvOiB7XG4gICAgICAgICAgc3JjOiBcIlwiLFxuICAgICAgICAgIGFsdDogXCJMb2dvXCIsXG4gICAgICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgICAgICBzdHlsZXM6IFwiXCJcbiAgICAgICAgfSxcbiAgICAgICAgYmFja0J1dHRvbjoge1xuICAgICAgICAgIG1vZGU6IFwiVEFCQkVEXCIsXG4gICAgICAgICAgYnlwYXNzQ29uZmlybWF0aW9uOiBmYWxzZSxcbiAgICAgICAgICBoaWRkZW46IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgICAgIGxhYmVsOiBmb3JtQ29uZmlnPy50aXRsZSA/PyBmb3JtQ29uZmlnPy5wcm9wcy50aXRsZSA/PyBcIkZvcm1cIixcbiAgICAgICAgICBzdHlsZXM6IFwiXCJcbiAgICAgICAgfSxcbiAgICAgICAgc3RlcHM6IHtcbiAgICAgICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgICAgIHN0eWxlczogXCJcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgbWFpbjoge1xuICAgICAgICBzdHlsZXM6IFwiXCJcbiAgICAgIH0sXG4gICAgICBmb290ZXI6IHtcbiAgICAgICAgdmlld0Zvcm1zQnV0dG9uOiB7XG4gICAgICAgICAgYnlwYXNzQ29uZmlybWF0aW9uOiBmYWxzZSxcbiAgICAgICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgICAgIGxhYmVsOiBcIlZpZXcgRm9ybXNcIlxuICAgICAgICB9LFxuICAgICAgICBzYXZlQnV0dG9uOiB7XG4gICAgICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgICAgICBsYWJlbDogXCJTYXZlXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGlzVW5zYXZlZERhdGFBbGVydEVuYWJsZWQ6IGZhbHNlXG4gICAgfTtcblxuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtQ29uZmlnLCBcInByb3BlcnRpZXNcIikpIHtcbiAgICAgIGZvcm1Db25maWcucHJvcGVydGllcyA9IGdldE9iamVjdERlZXBDb3B5KFxuICAgICAgICBtZXJnZU9iamVjdHMoZm9ybVZpZXdQcm9wZXJ0aWVzLCBmb3JtQ29uZmlnLnByb3BlcnRpZXMpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXMgPSBmb3JtVmlld1Byb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZSgpO1xuXG4gICAgaWYgKGNoZWNrT2JqZWN0UGF0aEV4aXN0cyhmb3JtQ29uZmlnLCBcInByb3BlcnRpZXMuaGVhZGVyLnRpdGxlLmxhYmVsXCIpKSB7XG4gICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXMuaGVhZGVyLnRpdGxlLmxhYmVsID0gdXBkYXRlTGFuZ3VhZ2UoXG4gICAgICAgIGZvcm1Db25maWcucHJvcGVydGllcy5oZWFkZXIudGl0bGUubGFiZWwsXG4gICAgICAgIGxhbmd1YWdlXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0UGF0aEV4aXN0cyhcbiAgICAgICAgZm9ybUNvbmZpZyxcbiAgICAgICAgXCJwcm9wZXJ0aWVzLmZvb3Rlci52aWV3Rm9ybXNCdXR0b24ubGFiZWxcIlxuICAgICAgKVxuICAgICkge1xuICAgICAgZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci52aWV3Rm9ybXNCdXR0b24ubGFiZWwgPSB1cGRhdGVMYW5ndWFnZShcbiAgICAgICAgZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci52aWV3Rm9ybXNCdXR0b24ubGFiZWwsXG4gICAgICAgIGxhbmd1YWdlXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0UGF0aEV4aXN0cyhmb3JtQ29uZmlnLCBcInByb3BlcnRpZXMuZm9vdGVyLnNhdmVCdXR0b24ubGFiZWxcIilcbiAgICApIHtcbiAgICAgIGZvcm1Db25maWcucHJvcGVydGllcy5mb290ZXIuc2F2ZUJ1dHRvbi5sYWJlbCA9IHVwZGF0ZUxhbmd1YWdlKFxuICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnNhdmVCdXR0b24ubGFiZWwsXG4gICAgICAgIGxhbmd1YWdlXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JtQ29uZmlnO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBjb252ZXJ0Rm9ybUNvbmZpZyhmb3JtQ29uZmlnOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGZvcm1hdE9uRmllbGRUeXBlID0gKGZpZWxkOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlRm9ybUZpZWxkUHJvcGVydGllcyA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKEZJRUxEX1BST1BFUlRJRVMsIGZpZWxkLnR5cGUpKSB7XG4gICAgICAgICAgZmllbGQucHJvcGVydGllcyA9IG1lcmdlT2JqZWN0cyhcbiAgICAgICAgICAgIGdldE9iamVjdERlZXBDb3B5KEZJRUxEX1BST1BFUlRJRVNbZmllbGQudHlwZV0pLFxuICAgICAgICAgICAgZmllbGQucHJvcGVydGllc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVIdG1sID0gKGZpZWxkOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkS2V5SGlkZGVuKGZpZWxkKTtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEFzRm9ybUVsZW1lbnQoZmllbGQsIGZhbHNlKTtcblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgZm9ybWF0RmllbGRUeXBlVGl0bGUgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlIaWRkZW4oZmllbGQpO1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkQXNGb3JtRWxlbWVudChmaWVsZCwgZmFsc2UpO1xuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVCdXR0b24gPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0TWlzc2luZ0ZpZWxkS2V5VmFsdWUoZmllbGQsIFwiaGlkZGVuXCIsIGZhbHNlKTtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEFzRm9ybUVsZW1lbnQoZmllbGQsIGZhbHNlKTtcbiAgICAgICAgZmllbGQgPSB1cGRhdGVGb3JtRmllbGRQcm9wZXJ0aWVzKGZpZWxkKTtcblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgZm9ybWF0RmllbGRUeXBlVGV4dCA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleUhpZGRlbihmaWVsZCk7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRBc0Zvcm1FbGVtZW50KGZpZWxkLCB0cnVlKTtcbiAgICAgICAgZmllbGQgPSB1cGRhdGVGb3JtRmllbGRQcm9wZXJ0aWVzKGZpZWxkKTtcblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgZm9ybWF0RmllbGRUeXBlUGFzc3dvcmQgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlIaWRkZW4oZmllbGQpO1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkQXNGb3JtRWxlbWVudChmaWVsZCwgdHJ1ZSk7XG4gICAgICAgIGZpZWxkID0gdXBkYXRlRm9ybUZpZWxkUHJvcGVydGllcyhmaWVsZCk7XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcm1hdEZpZWxkVHlwZUVtYWlsID0gKGZpZWxkOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkS2V5SGlkZGVuKGZpZWxkKTtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEFzRm9ybUVsZW1lbnQoZmllbGQsIHRydWUpO1xuICAgICAgICBmaWVsZCA9IHVwZGF0ZUZvcm1GaWVsZFByb3BlcnRpZXMoZmllbGQpO1xuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVTdGFyUmF0aW5nID0gKGZpZWxkOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkS2V5SGlkZGVuKGZpZWxkKTtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEFzRm9ybUVsZW1lbnQoZmllbGQsIHRydWUpO1xuICAgICAgICBmaWVsZCA9IHVwZGF0ZUZvcm1GaWVsZFByb3BlcnRpZXMoZmllbGQpO1xuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVDdXJyZW5jeSA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleUhpZGRlbihmaWVsZCk7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRBc0Zvcm1FbGVtZW50KGZpZWxkLCB0cnVlKTtcbiAgICAgICAgZmllbGQgPSB1cGRhdGVGb3JtRmllbGRQcm9wZXJ0aWVzKGZpZWxkKTtcblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgZm9ybWF0RmllbGRUeXBlVGV4dGFyZWEgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlIaWRkZW4oZmllbGQpO1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkQXNGb3JtRWxlbWVudChmaWVsZCwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVDaGVja2JveCA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleUhpZGRlbihmaWVsZCk7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRBc0Zvcm1FbGVtZW50KGZpZWxkLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcm1hdEZpZWxkVHlwZU51bWJlciA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleUhpZGRlbihmaWVsZCk7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRBc0Zvcm1FbGVtZW50KGZpZWxkLCB0cnVlKTtcblxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwia2V5XCIpKSB7XG4gICAgICAgICAgaWYgKGZpZWxkLmtleSA9PT0gXCJhYWRoYWFyX251bWJlclwiKSB7XG4gICAgICAgICAgICBmaWVsZCA9IHNldEZpZWxkS2V5VmFsdWUoZmllbGQsIFwidHlwZVwiLCBcImFhZGhhYXJfbnVtYmVyXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmllbGQua2V5ID09PSBcImNvbnRhY3RfbnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlWYWx1ZShmaWVsZCwgXCJ0eXBlXCIsIFwicGhvbmVcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IFwicGhvbmVcIiB8fCBmaWVsZC50eXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBmaWVsZCA9IHVwZGF0ZUZvcm1GaWVsZFByb3BlcnRpZXMoZmllbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVJbWFnZSA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleUhpZGRlbihmaWVsZCk7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRBc0Zvcm1FbGVtZW50KGZpZWxkLCB0cnVlKTtcbiAgICAgICAgZmllbGQgPSB1cGRhdGVGb3JtRmllbGRQcm9wZXJ0aWVzKGZpZWxkKTtcblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgZm9ybWF0RmllbGRUeXBlRGF0ZSA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleUhpZGRlbihmaWVsZCk7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRBc0Zvcm1FbGVtZW50KGZpZWxkLCB0cnVlKTtcblxuICAgICAgICBmaWVsZC5wcm9wZXJ0aWVzID0gZ2V0T2JqZWN0RGVlcENvcHkoXG4gICAgICAgICAgbWVyZ2VPYmplY3RzKFxuICAgICAgICAgICAgZ2V0T2JqZWN0RGVlcENvcHkoRklFTERfUFJPUEVSVElFU1tmaWVsZC50eXBlXSksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG1heDogZ2V0TWF4RGF0ZShmaWVsZCksXG4gICAgICAgICAgICAgIG1pbjogZ2V0TWluRGF0ZShmaWVsZClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaWVsZC5wcm9wZXJ0aWVzXG4gICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVUaW1lID0gKGZpZWxkOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkS2V5SGlkZGVuKGZpZWxkKTtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEFzRm9ybUVsZW1lbnQoZmllbGQsIHRydWUpO1xuICAgICAgICBmaWVsZCA9IHVwZGF0ZUZvcm1GaWVsZFByb3BlcnRpZXMoZmllbGQpO1xuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVQaG9uZSA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleUhpZGRlbihmaWVsZCk7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRBc0Zvcm1FbGVtZW50KGZpZWxkLCB0cnVlKTtcbiAgICAgICAgZmllbGQgPSB1cGRhdGVGb3JtRmllbGRQcm9wZXJ0aWVzKGZpZWxkKTtcblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgZm9ybWF0RmllbGRUeXBlUmFkaW8gPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlIaWRkZW4oZmllbGQpO1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkQXNGb3JtRWxlbWVudChmaWVsZCwgdHJ1ZSk7XG4gICAgICAgIGZpZWxkID0gdXBkYXRlRm9ybUZpZWxkUHJvcGVydGllcyhmaWVsZCk7XG5cbiAgICAgICAgZmllbGQub3B0aW9ucyA9IGZpZWxkLm9wdGlvbnMubWFwKCh4OiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgeCA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgeCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHsgbGFiZWw6IHgsIGRpc2FibGVkOiBmYWxzZSwgZGVzY3JpcHRpb246IFwiXCIgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoeCwgXCJsYWJlbFwiKSAmJlxuICAgICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoeCwgXCJkaXNhYmxlZFwiKSAmJlxuICAgICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoeCwgXCJkZXNjcmlwdGlvblwiKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoeCwgXCJkaXNhYmxlZFwiKSkge1xuICAgICAgICAgICAgeCA9IHsgLi4ueCwgZGlzYWJsZWQ6IGZhbHNlIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoeCwgXCJkZXNjcmlwdGlvblwiKSkge1xuICAgICAgICAgICAgeCA9IHsgLi4ueCwgZGVzY3JpcHRpb246IGZhbHNlIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgZm9ybWF0RmllbGRUeXBlU2xpZGVyID0gKGZpZWxkOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkS2V5SGlkZGVuKGZpZWxkKTtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEFzRm9ybUVsZW1lbnQoZmllbGQsIHRydWUpO1xuICAgICAgICBmaWVsZCA9IHVwZGF0ZUZvcm1GaWVsZFByb3BlcnRpZXMoZmllbGQpO1xuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVTZWxlY3QgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlIaWRkZW4oZmllbGQpO1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkQXNGb3JtRWxlbWVudChmaWVsZCwgdHJ1ZSk7XG4gICAgICAgIGZpZWxkID0gdXBkYXRlRm9ybUZpZWxkUHJvcGVydGllcyhmaWVsZCk7XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcm1hdEZpZWxkVHlwZUFwaSA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEFzRm9ybUVsZW1lbnQoZmllbGQsIHRydWUpO1xuICAgICAgICBmaWVsZCA9IHVwZGF0ZUZvcm1GaWVsZFByb3BlcnRpZXMoZmllbGQpO1xuXG4gICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwic2hvd0xvYWRlclwiKSkge1xuICAgICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlWYWx1ZShmaWVsZCwgXCJzaG93TG9hZGVyXCIsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiYXBpXCIpKSB7XG4gICAgICAgICAgY29uc3QgZmllbGRBcGlEZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIHVybDogXCJcIixcbiAgICAgICAgICAgIHJlcXVlc3Q6IHt9LFxuICAgICAgICAgICAgcmVzcG9uc2U6IHt9LFxuICAgICAgICAgICAgc3RhdHVzOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogXCJDYWxsIEFQSVwiLFxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IFwiQ2FsbCBBUElcIixcbiAgICAgICAgICAgICAgICByZXRyeTogXCJSZXRyeSBBUElcIixcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBcIkFQSSBTdWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgZmFpbGVkOiBcIkFQSSBGYWlsZWRcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBmaWVsZC5hcGkgPSBnZXRPYmplY3REZWVwQ29weShcbiAgICAgICAgICAgIG1lcmdlT2JqZWN0cyhmaWVsZEFwaURlZmF1bHRzLCBmaWVsZEFwaURlZmF1bHRzKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC5hcGksIFwicmVxdWVzdFwiKSAmJlxuICAgICAgICAgICFjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC5hcGksIFwiZW50cnlwb2ludFwiKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBhcGlFbnRyeXBvaW50ID0ge1xuICAgICAgICAgICAgdHJpZ2dlcnM6IFtcIk9OX0FQSV9DQUxMXCJdLFxuICAgICAgICAgICAgcnVsZXM6IFtdLFxuICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IFwiMVwiLFxuICAgICAgICAgICAgICAgIGtleTogXCJBUElfQ0FMTFwiLFxuICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgIGZpZWxkS2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICAgICAgICBhcGlLZXk6IGZpZWxkLmFwaS5lbmRwb2ludHNbMF0uYXBpS2V5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfTtcbiAgICAgICAgICBmaWVsZC5lbnRyeXBvaW50ID0gZ2V0T2JqZWN0RGVlcENvcHkoXG4gICAgICAgICAgICBtZXJnZU9iamVjdHMoYXBpRW50cnlwb2ludCwgZmllbGQuYXBpKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcm1hdEZpZWxkVHlwZUxpdmVMb2NhdGlvbiA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEFzRm9ybUVsZW1lbnQoZmllbGQsIHRydWUpO1xuICAgICAgICBmaWVsZCA9IHVwZGF0ZUZvcm1GaWVsZFByb3BlcnRpZXMoZmllbGQpO1xuXG4gICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwic2hvd0xvYWRlclwiKSkge1xuICAgICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlWYWx1ZShmaWVsZCwgXCJzaG93TG9hZGVyXCIsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiYXBpXCIpKSB7XG4gICAgICAgICAgY29uc3QgZmllbGRBcGlEZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIHVybDogXCJcIixcbiAgICAgICAgICAgIHJlcXVlc3Q6IHt9LFxuICAgICAgICAgICAgcmVzcG9uc2U6IHt9LFxuICAgICAgICAgICAgc3RhdHVzOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgICAgbGFiZWxzOiB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogXCJHZXQgTGl2ZSBMb2NhdGlvblwiLFxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IFwiR2V0dGluZyBMaXZlIExvY2F0aW9uXCIsXG4gICAgICAgICAgICAgICAgcmV0cnk6IFwiR2V0IExpdmUgTG9jYXRpb25cIixcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBcIkxpdmUgTG9jYXRpb25cIixcbiAgICAgICAgICAgICAgICBmYWlsZWQ6IFwiTGl2ZSBMb2NhdGlvblwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGZpZWxkLmFwaSA9IGdldE9iamVjdERlZXBDb3B5KFxuICAgICAgICAgICAgbWVyZ2VPYmplY3RzKGZpZWxkQXBpRGVmYXVsdHMsIGZpZWxkQXBpRGVmYXVsdHMpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVEYXRhSG9sZGVyID0gKGZpZWxkOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkS2V5SGlkZGVuKGZpZWxkKTtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleURpc2FibGVkKGZpZWxkKTtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEFzRm9ybUVsZW1lbnQoZmllbGQsIHRydWUpO1xuICAgICAgICBmaWVsZCA9IHVwZGF0ZUZvcm1GaWVsZFByb3BlcnRpZXMoZmllbGQpO1xuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBmb3JtYXRGaWVsZFR5cGVPdHAgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlIaWRkZW4oZmllbGQpO1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkQXNGb3JtRWxlbWVudChmaWVsZCwgdHJ1ZSk7XG5cbiAgICAgICAgZmllbGQucHJvcGVydGllcyA9IGdldE9iamVjdERlZXBDb3B5KFxuICAgICAgICAgIG1lcmdlT2JqZWN0cyhcbiAgICAgICAgICAgIGdldE9iamVjdERlZXBDb3B5KEZJRUxEX1BST1BFUlRJRVNbZmllbGQudHlwZV0pLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtYXNrOiBuZXcgQXJyYXkoZmllbGQ/LnByb3BlcnRpZXM/Lm90cExlbmd0aCA/PyA0KVxuICAgICAgICAgICAgICAgIC5maWxsKFwiI1wiKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiIFwiKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpZWxkLnByb3BlcnRpZXNcbiAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcm1hdEZpZWxkVHlwZUFhZGhhYXJOdW1iZXIgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlIaWRkZW4oZmllbGQpO1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkQXNGb3JtRWxlbWVudChmaWVsZCwgdHJ1ZSk7XG4gICAgICAgIGZpZWxkID0gdXBkYXRlRm9ybUZpZWxkUHJvcGVydGllcyhmaWVsZCk7XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcm1hdEZpZWxkVHlwZUZpbGUgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlIaWRkZW4oZmllbGQpO1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkQXNGb3JtRWxlbWVudChmaWVsZCwgdHJ1ZSk7XG4gICAgICAgIGZpZWxkID0gdXBkYXRlRm9ybUZpZWxkUHJvcGVydGllcyhmaWVsZCk7XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcm1hdEZpZWxkVHlwZUNhcHR1cmUgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlIaWRkZW4oZmllbGQpO1xuICAgICAgICBmaWVsZCA9IHNldEZpZWxkQXNGb3JtRWxlbWVudChmaWVsZCwgdHJ1ZSk7XG4gICAgICAgIGZpZWxkID0gdXBkYXRlRm9ybUZpZWxkUHJvcGVydGllcyhmaWVsZCk7XG5cbiAgICAgICAgZmllbGQucHJvcGVydGllcyA9IGdldE9iamVjdERlZXBDb3B5KHtcbiAgICAgICAgICAuLi5maWVsZC5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGZlYXR1cmVzOiB7XG4gICAgICAgICAgICAuLi5maWVsZC5wcm9wZXJ0aWVzLmZlYXR1cmVzLFxuICAgICAgICAgICAgd2F0ZXJtYXJrOiB7XG4gICAgICAgICAgICAgIGlzRW5hYmxlZDpcbiAgICAgICAgICAgICAgICBmaWVsZD8ucHJvcGVydGllcz8uY2FtZXJhQ29uZmlnPy5vdGhlcnM/LmlzV2F0ZXJtYXJrID8/XG4gICAgICAgICAgICAgICAgZmllbGQucHJvcGVydGllcy5mZWF0dXJlcy53YXRlcm1hcmsuaXNXYXRlcm1hcmssXG4gICAgICAgICAgICAgIGlzV2F0ZXJtYXJrRnJvbVNlcnZlcjpcbiAgICAgICAgICAgICAgICBmaWVsZD8ucHJvcGVydGllcz8uY2FtZXJhQ29uZmlnPy5vdGhlcnM/LmlzV2F0ZXJtYXJrRm9yU2VydmVyID8/XG4gICAgICAgICAgICAgICAgZmllbGQucHJvcGVydGllcy5mZWF0dXJlcy53YXRlcm1hcmsuaXNXYXRlcm1hcmtGcm9tU2VydmVyLFxuICAgICAgICAgICAgICBzb3VyY2VzOlxuICAgICAgICAgICAgICAgIGZpZWxkPy5wcm9wZXJ0aWVzPy53YXRlcm1hcmtEYXRhU291cmNlcyA/P1xuICAgICAgICAgICAgICAgIGZpZWxkLnByb3BlcnRpZXMuZmVhdHVyZXMud2F0ZXJtYXJrLnNvdXJjZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlbGV0ZSBmaWVsZC5wcm9wZXJ0aWVzLndhdGVybWFya0RhdGFTb3VyY2VzO1xuICAgICAgICBkZWxldGUgZmllbGQucHJvcGVydGllcy5jYW1lcmFDb25maWcub3RoZXJzLmlzV2F0ZXJtYXJrO1xuICAgICAgICBkZWxldGUgZmllbGQucHJvcGVydGllcy5jYW1lcmFDb25maWcub3RoZXJzLmlzV2F0ZXJtYXJrRm9ySW1hZ2VVcGxvYWQ7XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGZvcm1hdEZpZWxkVHlwZVJlY29yZCA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleUhpZGRlbihmaWVsZCk7XG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRBc0Zvcm1FbGVtZW50KGZpZWxkLCB0cnVlKTtcbiAgICAgICAgZmllbGQgPSB1cGRhdGVGb3JtRmllbGRQcm9wZXJ0aWVzKGZpZWxkKTtcblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICB9O1xuXG4gICAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkhUTUw6XG4gICAgICAgICAgZmllbGQgPSBmb3JtYXRGaWVsZFR5cGVIdG1sKGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLlRJVExFOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlVGl0bGUoZmllbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuQlVUVE9OOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlQnV0dG9uKGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLlRFWFQ6XG4gICAgICAgICAgZmllbGQgPSBmb3JtYXRGaWVsZFR5cGVUZXh0KGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLlBBU1NXT1JEOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlUGFzc3dvcmQoZmllbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuRU1BSUw6XG4gICAgICAgICAgZmllbGQgPSBmb3JtYXRGaWVsZFR5cGVFbWFpbChmaWVsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5URVhUQVJFQTpcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZVRleHRhcmVhKGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkNIRUNLQk9YOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlQ2hlY2tib3goZmllbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuTlVNQkVSOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlTnVtYmVyKGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLlBSRVZJRVdfSU1BR0U6XG4gICAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleVZhbHVlKGZpZWxkLCBcInR5cGVcIiwgXCJpbWFnZVwiKTtcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZUltYWdlKGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLklNQUdFOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlSW1hZ2UoZmllbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuREFURTpcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZURhdGUoZmllbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuVElNRTpcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZVRpbWUoZmllbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuUEhPTkU6XG4gICAgICAgICAgZmllbGQgPSBmb3JtYXRGaWVsZFR5cGVQaG9uZShmaWVsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5SQURJTzpcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZVJhZGlvKGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLlNMSURFUjpcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZVNsaWRlcihmaWVsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzZWFyY2gtdGV4dFwiOlxuICAgICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlWYWx1ZShmaWVsZCwgXCJ0eXBlXCIsIFwic2VsZWN0XCIpO1xuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlU2VsZWN0KGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkRST1BET1dOX1dJVEhfU0VBUkNIOlxuICAgICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlWYWx1ZShmaWVsZCwgXCJ0eXBlXCIsIFwic2VsZWN0XCIpO1xuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlU2VsZWN0KGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLlNFTEVDVDpcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZVNlbGVjdChmaWVsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5BUElfQ0FMTDpcbiAgICAgICAgICBmaWVsZCA9IHNldEZpZWxkS2V5VmFsdWUoZmllbGQsIFwidHlwZVwiLCBcImFwaVwiKTtcbiAgICAgICAgICBmaWVsZCA9IGZvcm1hdEZpZWxkVHlwZUFwaShmaWVsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5MSVZFX0xPQ0FUSU9OOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlTGl2ZUxvY2F0aW9uKGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkRBVEFfSE9MREVSOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlRGF0YUhvbGRlcihmaWVsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5BUEk6XG4gICAgICAgICAgZmllbGQgPSBmb3JtYXRGaWVsZFR5cGVBcGkoZmllbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuT1RQOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlT3RwKGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkFBREhBQVJfTlVNQkVSOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlQWFkaGFhck51bWJlcihmaWVsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5GSUxFOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlRmlsZShmaWVsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5DQVBUVVJFOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlQ2FwdHVyZShmaWVsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5SRUNPUkQ6XG4gICAgICAgICAgZmllbGQgPSBmb3JtYXRGaWVsZFR5cGVSZWNvcmQoZmllbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuU1RBUl9SQVRJTkc6XG4gICAgICAgICAgZmllbGQgPSBmb3JtYXRGaWVsZFR5cGVTdGFyUmF0aW5nKGZpZWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkNVUlJFTkNZOlxuICAgICAgICAgIGZpZWxkID0gZm9ybWF0RmllbGRUeXBlQ3VycmVuY3koZmllbGQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmllbGQ7XG4gICAgfTtcblxuICAgIGNvbnN0IHVwZGF0ZUZpZWxkVmFsaWRhdG9ycyA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgIGlmIChmaWVsZC5pc0Zvcm1FbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0b3JzXCIpXG4gICAgICAgICAgPyBmaWVsZC52YWxpZGF0b3JzXG4gICAgICAgICAgOiB7fTtcblxuICAgICAgICBmaWVsZCA9IHNldE1pc3NpbmdGaWVsZEtleVZhbHVlKGZpZWxkLCBcInZhbGlkYXRvcnNcIiwge30pO1xuXG4gICAgICAgIGZpZWxkID0gc2V0RmllbGRLZXlWYWx1ZShmaWVsZCwgXCJ2YWxpZGF0b3JzXCIsIHtcbiAgICAgICAgICAuLi5maWVsZC52YWxpZGF0b3JzLFxuICAgICAgICAgIG1pbjogY2hlY2tPYmplY3RLZXlFeGlzdHModmFsaWRhdG9ycywgXCJtaW5cIilcbiAgICAgICAgICAgID8gaXNOb3RFbXB0eVZhbHVlKHZhbGlkYXRvcnMubWluKVxuICAgICAgICAgICAgICA/IE51bWJlcih2YWxpZGF0b3JzLm1pbilcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICA6IGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcIm1pblwiKVxuICAgICAgICAgICAgICA/IE51bWJlcihmaWVsZC5taW4pXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBtYXg6IGNoZWNrT2JqZWN0S2V5RXhpc3RzKHZhbGlkYXRvcnMsIFwibWF4XCIpXG4gICAgICAgICAgICA/IGlzTm90RW1wdHlWYWx1ZSh2YWxpZGF0b3JzLm1heClcbiAgICAgICAgICAgICAgPyBOdW1iZXIodmFsaWRhdG9ycy5tYXgpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgOiBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJtYXhcIilcbiAgICAgICAgICAgICAgPyBOdW1iZXIoZmllbGQubWF4KVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgcmVxdWlyZWQ6IGNoZWNrT2JqZWN0S2V5RXhpc3RzKHZhbGlkYXRvcnMsIFwicmVxdWlyZWRcIilcbiAgICAgICAgICAgID8gQm9vbGVhbih2YWxpZGF0b3JzLnJlcXVpcmVkKVxuICAgICAgICAgICAgOiBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJyZXF1aXJlZFwiKVxuICAgICAgICAgICAgICA/IEJvb2xlYW4oZmllbGQucmVxdWlyZWQpXG4gICAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgbWluTGVuZ3RoOiBjaGVja09iamVjdEtleUV4aXN0cyh2YWxpZGF0b3JzLCBcIm1pbkxlbmd0aFwiKVxuICAgICAgICAgICAgPyBpc05vdEVtcHR5VmFsdWUodmFsaWRhdG9ycy5taW5MZW5ndGgpXG4gICAgICAgICAgICAgID8gTnVtYmVyKHZhbGlkYXRvcnMubWluTGVuZ3RoKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIDogY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwibWluTGVuZ3RoXCIpXG4gICAgICAgICAgICAgID8gTnVtYmVyKGZpZWxkLm1pbkxlbmd0aClcbiAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIG1heExlbmd0aDogY2hlY2tPYmplY3RLZXlFeGlzdHModmFsaWRhdG9ycywgXCJtYXhMZW5ndGhcIilcbiAgICAgICAgICAgID8gaXNOb3RFbXB0eVZhbHVlKHZhbGlkYXRvcnMubWF4TGVuZ3RoKVxuICAgICAgICAgICAgICA/IE51bWJlcih2YWxpZGF0b3JzLm1heExlbmd0aClcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICA6IGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcImxlbmd0aFwiKVxuICAgICAgICAgICAgICA/IE51bWJlcihmaWVsZC5sZW5ndGgpXG4gICAgICAgICAgICAgIDogY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwibWF4TGVuZ3RoXCIpXG4gICAgICAgICAgICAgICAgPyBOdW1iZXIoZmllbGQubWF4TGVuZ3RoKVxuICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBwYXR0ZXJuOiBjaGVja09iamVjdEtleUV4aXN0cyh2YWxpZGF0b3JzLCBcInBhdHRlcm5cIilcbiAgICAgICAgICAgID8gaXNOb3RFbXB0eVZhbHVlKHZhbGlkYXRvcnMucGF0dGVybilcbiAgICAgICAgICAgICAgPyB2YWxpZGF0b3JzLnBhdHRlcm5cbiAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIDogY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwicGF0dGVyblwiKVxuICAgICAgICAgICAgICA/IHsga2V5OiBcIkNVU1RPTVwiLCBwYXR0ZXJuOiBTdHJpbmcoZmllbGQucGF0dGVybikgfVxuICAgICAgICAgICAgICA6IGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInJlZ2V4XCIpXG4gICAgICAgICAgICAgICAgPyB7IGtleTogXCJDVVNUT01cIiwgcGF0dGVybjogU3RyaW5nKGZpZWxkLnJlZ2V4KSB9XG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVsZXRlIGZpZWxkLm1pbjtcbiAgICAgICAgZGVsZXRlIGZpZWxkLm1heDtcbiAgICAgICAgZGVsZXRlIGZpZWxkLnJlcXVpcmVkO1xuICAgICAgICBkZWxldGUgZmllbGQubWluTGVuZ3RoO1xuICAgICAgICBkZWxldGUgZmllbGQubGVuZ3RoO1xuICAgICAgICBkZWxldGUgZmllbGQubWF4TGVuZ3RoO1xuICAgICAgICBkZWxldGUgZmllbGQucGF0dGVybjtcbiAgICAgICAgZGVsZXRlIGZpZWxkLnJlZ2V4O1xuXG4gICAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgICAgIGNhc2UgRUZpZWxkVHlwZS5URVhUOlxuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWluO1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWF4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBFRmllbGRUeXBlLkRBVEFfSE9MREVSOlxuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWluO1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWF4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBFRmllbGRUeXBlLkNIRUNLQk9YOlxuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWluO1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWF4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBFRmllbGRUeXBlLlBSRVZJRVdfSU1BR0U6XG4gICAgICAgICAgICBkZWxldGUgZmllbGQudmFsaWRhdG9ycy5taW47XG4gICAgICAgICAgICBkZWxldGUgZmllbGQudmFsaWRhdG9ycy5tYXg7XG4gICAgICAgICAgICBkZWxldGUgZmllbGQudmFsaWRhdG9ycy5taW5MZW5ndGg7XG4gICAgICAgICAgICBkZWxldGUgZmllbGQudmFsaWRhdG9ycy5tYXhMZW5ndGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIEVGaWVsZFR5cGUuRklMRTpcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC52YWxpZGF0b3JzLm1pbjtcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC52YWxpZGF0b3JzLm1heDtcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC52YWxpZGF0b3JzLm1pbkxlbmd0aDtcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC52YWxpZGF0b3JzLm1heExlbmd0aDtcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC52YWxpZGF0b3JzLnBhdHRlcm47XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIEVGaWVsZFR5cGUuQ0FQVFVSRTpcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC52YWxpZGF0b3JzLm1pbjtcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC52YWxpZGF0b3JzLm1heDtcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC52YWxpZGF0b3JzLm1pbkxlbmd0aDtcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC52YWxpZGF0b3JzLm1heExlbmd0aDtcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC52YWxpZGF0b3JzLnBhdHRlcm47XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIEVGaWVsZFR5cGUuUkVDT1JEOlxuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWluO1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWF4O1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWluTGVuZ3RoO1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWF4TGVuZ3RoO1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMucGF0dGVybjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0VtcHR5VmFsdWUoZmllbGQudmFsaWRhdG9ycz8ubWluKSkge1xuICAgICAgICAgIGRlbGV0ZSBmaWVsZC52YWxpZGF0b3JzLm1pbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNFbXB0eVZhbHVlKGZpZWxkLnZhbGlkYXRvcnM/Lm1heCkpIHtcbiAgICAgICAgICBkZWxldGUgZmllbGQudmFsaWRhdG9ycy5taW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRW1wdHlWYWx1ZShmaWVsZC52YWxpZGF0b3JzPy5taW5MZW5ndGgpKSB7XG4gICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMubWluTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0VtcHR5VmFsdWUoZmllbGQudmFsaWRhdG9ycz8ubWF4TGVuZ3RoKSkge1xuICAgICAgICAgIGRlbGV0ZSBmaWVsZC52YWxpZGF0b3JzLm1heExlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNFbXB0eVZhbHVlKGZpZWxkLnZhbGlkYXRvcnM/LnBhdHRlcm4pKSB7XG4gICAgICAgICAgZGVsZXRlIGZpZWxkLnZhbGlkYXRvcnMucGF0dGVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpZWxkLmZvY3VzID0gZmFsc2U7XG4gICAgICAgIGZpZWxkLmludmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVGaWVsZERlZmF1bHRWYWx1ZSA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgIGlmIChmaWVsZC5pc0Zvcm1FbGVtZW50KSB7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJkZWZhdWx0VmFsdWVcIikpIHtcbiAgICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0UGF0aEV4aXN0cyhmaWVsZCwgXCJkZWZhdWx0LnZhbHVlLnNvdXJjZXNcIikpIHtcbiAgICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoZWNrT2JqZWN0UGF0aEV4aXN0cyhmaWVsZCwgXCJkZWZhdWx0LnZhbHVlLnJ1bGVzXCIpICYmXG4gICAgICAgICAgY2hlY2tPYmplY3RQYXRoRXhpc3RzKGZpZWxkLCBcImRlZmF1bHQudmFsdWUuYWN0aW9uc1wiKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoZWNrT2JqZWN0UGF0aEV4aXN0cyhmaWVsZCwgXCJkZWZhdWx0LnZhbHVlLnZhbHVlXCIpICYmXG4gICAgICAgICAgaXNOb3RFbXB0eVZhbHVlKGZpZWxkLmRlZmF1bHQudmFsdWUudmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNoZWNrT2JqZWN0UGF0aEV4aXN0cyhmaWVsZCwgXCJkZWZhdWx0LnZhbHVlLnNvdXJjZXNcIikpIHtcbiAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB7XG4gICAgICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgICAgICAgIHRyaWdnZXJzOiBbXCJPTl9JTklUXCJdLFxuICAgICAgICAgICAgcnVsZXM6IFtdLFxuICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IFwiMVwiLFxuICAgICAgICAgICAgICAgIGtleTogXCJTRVRfRklFTERfREVGQVVMVF9WQUxVRVwiLFxuICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZToge1xuICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJPQkpFQ1RcIixcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJGT1JNX0RBVEFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogYCQuJHtmaWVsZC5rZXl9YFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBmaWVsZCA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZpZWxkLCBcImRlZmF1bHQudmFsdWVcIiwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGUgZmllbGQuZGVmYXVsdFZhbDtcbiAgICAgICAgZGVsZXRlIGZpZWxkLmRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVGaWVsZERpc2FiaWxpdHkgPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICBmaWVsZCA9IHNldE1pc3NpbmdLZXlWYWx1ZShmaWVsZCwgXCJkaXNhYmxlZFwiLCBmYWxzZSk7XG5cbiAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlRmllbGRNZXNzYWdlcyA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgIGlmIChmaWVsZC5pc0Zvcm1FbGVtZW50KSB7XG4gICAgICAgIGZpZWxkID0gc2V0TWlzc2luZ0ZpZWxkS2V5VmFsdWUoZmllbGQsIFwibWVzc2FnZXNcIiwgW10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmllbGQ7XG4gICAgfTtcblxuICAgIGNvbnN0IHVwZGF0ZUZpZWxkUmVzZXRCdXR0b24gPSAoZmllbGQ6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAoZmllbGQuaXNGb3JtRWxlbWVudCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiYWN0aW9uXCIpICYmXG4gICAgICAgICAgZmllbGQuYWN0aW9uID09PSBcInJlc2V0XCIgJiZcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJmaWVsZHNcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgZmllbGQgPSBzZXRGaWVsZEtleVZhbHVlKGZpZWxkLCBcInJlc2V0XCIsIHtcbiAgICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXRGb3JtRmllbGRzID0gKGZvcm1Db25maWc6IGFueSwgZmllbGRzOiBhbnlbXSk6IGFueSA9PiB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybUNvbmZpZywgXCJtdWx0aUZvcm1cIikpIHtcbiAgICAgICAgZm9ybUNvbmZpZy5tdWx0aUZvcm0uZmllbGRzID0gZmllbGRzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9ybUNvbmZpZy5maWVsZHMgPSBmaWVsZHM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3JtQ29uZmlnO1xuICAgIH07XG5cbiAgICBjb25zdCBzZXRGb3JtRmllbGRHcm91cHMgPSAoZm9ybUNvbmZpZzogYW55LCBncm91cHM6IGFueSk6IGFueSA9PiB7XG4gICAgICBmb3JtQ29uZmlnLmZpZWxkR3JvdXBzID0gZ3JvdXBzO1xuXG4gICAgICByZXR1cm4gZm9ybUNvbmZpZztcbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlRmllbGRHcm91cEtleSA9IChmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiZ3JvdXBLZXlcIikgJiZcbiAgICAgICAgIUFycmF5LmlzQXJyYXkoZmllbGQuZ3JvdXBLZXkpXG4gICAgICApIHtcbiAgICAgICAgZmllbGQuZ3JvdXBLZXkgPSBbZmllbGQuZ3JvdXBLZXldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmllbGQ7XG4gICAgfTtcblxuICAgIGNvbnN0IHVwZGF0ZUZvcm1GaWVsZEdyb3VwcyA9IChmaWVsZEdyb3VwczogYW55LCBmaWVsZDogYW55KTogYW55ID0+IHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJncm91cEtleVwiKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwS2V5IG9mIGZpZWxkLmdyb3VwS2V5KSB7XG4gICAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkR3JvdXBzLCBncm91cEtleSkpIHtcbiAgICAgICAgICAgIGZpZWxkR3JvdXBzW2dyb3VwS2V5XS5wdXNoKGZpZWxkLmtleSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkR3JvdXBzW2dyb3VwS2V5XSA9IFtmaWVsZC5rZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmllbGRHcm91cHM7XG4gICAgfTtcblxuICAgIGNvbnN0IHVwZGF0ZUZpZWxkTGFuZ3VhZ2UgPSAoZmllbGQ6IFRGaWVsZCwgbGFuZ3VhZ2U6IHN0cmluZyk6IGFueSA9PiB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwibGFiZWxcIikpIHtcbiAgICAgICAgZmllbGQubGFiZWwgPSB1cGRhdGVMYW5ndWFnZShmaWVsZC5sYWJlbCwgbGFuZ3VhZ2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hlY2tPYmplY3RQYXRoRXhpc3RzKGZpZWxkLCBcInByb3BlcnRpZXMucGxhY2Vob2xkZXJcIikpIHtcbiAgICAgICAgKGZpZWxkLnByb3BlcnRpZXMgYXMgYW55KS5wbGFjZWhvbGRlciA9IHVwZGF0ZUxhbmd1YWdlKFxuICAgICAgICAgIChmaWVsZC5wcm9wZXJ0aWVzIGFzIGFueSkucGxhY2Vob2xkZXIsXG4gICAgICAgICAgbGFuZ3VhZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoZWNrT2JqZWN0UGF0aEV4aXN0cyhmaWVsZCwgXCJwcm9wZXJ0aWVzLmxhYmVsXCIpKSB7XG4gICAgICAgIChmaWVsZC5wcm9wZXJ0aWVzIGFzIGFueSkubGFiZWwgPSB1cGRhdGVMYW5ndWFnZShcbiAgICAgICAgICAoZmllbGQucHJvcGVydGllcyBhcyBhbnkpLmxhYmVsLFxuICAgICAgICAgIGxhbmd1YWdlXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVwZGF0ZUFwaVN0YXR1cyA9IChmaWVsZEFwaVN0YXR1cykgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHN0YXR1cyBpbiBmaWVsZEFwaVN0YXR1cykge1xuICAgICAgICAgIGlmIChpc05vdEVtcHR5VmFsdWUoc3RhdHVzKSkge1xuICAgICAgICAgICAgZmllbGRBcGlTdGF0dXNbc3RhdHVzXSA9IHVwZGF0ZUxhbmd1YWdlKFxuICAgICAgICAgICAgICBmaWVsZEFwaVN0YXR1c1tzdGF0dXNdLFxuICAgICAgICAgICAgICBsYW5ndWFnZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpZWxkQXBpU3RhdHVzO1xuICAgICAgfTtcblxuICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5IVE1MOlxuICAgICAgICAgIChmaWVsZCBhcyBhbnkpLmh0bWwgPSB1cGRhdGVMYW5ndWFnZSgoZmllbGQgYXMgYW55KS5odG1sLCBsYW5ndWFnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5DQVBUVVJFOlxuICAgICAgICAgIChmaWVsZC5wcm9wZXJ0aWVzIGFzIGFueSkuY2FtZXJhQ29uZmlnLmhlYWRlci50aXRsZSA9IHVwZGF0ZUxhbmd1YWdlKFxuICAgICAgICAgICAgKGZpZWxkLnByb3BlcnRpZXMgYXMgYW55KS5jYW1lcmFDb25maWcuaGVhZGVyLnRpdGxlLFxuICAgICAgICAgICAgbGFuZ3VhZ2VcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuUkVDT1JEOlxuICAgICAgICAgIChmaWVsZC5wcm9wZXJ0aWVzIGFzIGFueSkuY2FtZXJhQ29uZmlnLmhlYWRlci50aXRsZSA9IHVwZGF0ZUxhbmd1YWdlKFxuICAgICAgICAgICAgKGZpZWxkLnByb3BlcnRpZXMgYXMgYW55KS5jYW1lcmFDb25maWcuaGVhZGVyLnRpdGxlLFxuICAgICAgICAgICAgbGFuZ3VhZ2VcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuU0VMRUNUOlxuICAgICAgICAgIGZpZWxkLm9wdGlvbnMgPSBmaWVsZC5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNPYmplY3Qob3B0aW9uKSkge1xuICAgICAgICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMob3B0aW9uLCBcInRpdGxlXCIpKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uLnRpdGxlID0gdXBkYXRlTGFuZ3VhZ2Uob3B0aW9uLnRpdGxlLCBsYW5ndWFnZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uID0gdXBkYXRlTGFuZ3VhZ2Uob3B0aW9uLCBsYW5ndWFnZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5EUk9QRE9XTl9XSVRIX1NFQVJDSDpcbiAgICAgICAgICBmaWVsZC5vcHRpb25zID0gZmllbGQub3B0aW9ucy5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKG9wdGlvbiwgXCJ0aXRsZVwiKSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbi50aXRsZSA9IHVwZGF0ZUxhbmd1YWdlKG9wdGlvbi50aXRsZSwgbGFuZ3VhZ2UpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdGlvbiA9IHVwZGF0ZUxhbmd1YWdlKG9wdGlvbiwgbGFuZ3VhZ2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuUkFESU86XG4gICAgICAgICAgZmllbGQub3B0aW9ucyA9IGZpZWxkLm9wdGlvbnMubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChpc09iamVjdChvcHRpb24pKSB7XG4gICAgICAgICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhvcHRpb24sIFwibGFiZWxcIikpIHtcbiAgICAgICAgICAgICAgICBvcHRpb24ubGFiZWwgPSB1cGRhdGVMYW5ndWFnZShvcHRpb24ubGFiZWwsIGxhbmd1YWdlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvcHRpb24gPSB1cGRhdGVMYW5ndWFnZShvcHRpb24sIGxhbmd1YWdlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkFQSV9DQUxMOlxuICAgICAgICAgIGZpZWxkLmFwaS5zdGF0dXMubGFiZWxzID0gdXBkYXRlQXBpU3RhdHVzKGZpZWxkLmFwaS5zdGF0dXMubGFiZWxzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkxJVkVfTE9DQVRJT046XG4gICAgICAgICAgZmllbGQuYXBpLnN0YXR1cy5sYWJlbHMgPSB1cGRhdGVBcGlTdGF0dXMoZmllbGQuYXBpLnN0YXR1cy5sYWJlbHMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmllbGQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGZpZWxkczogYW55W10gPSBnZXRGb3JtRmllbGRzKGZvcm1Db25maWcpO1xuXG4gICAgbGV0IGZpZWxkR3JvdXBzOiBhbnkgPSB7fTtcblxuICAgIGZvciAobGV0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgZmllbGQgPSB1cGRhdGVGaWVsZExhbmd1YWdlKGZpZWxkLCBnZXRMYW5ndWFnZSgpKTtcblxuICAgICAgZmllbGQgPSBmb3JtYXRPbkZpZWxkVHlwZShmaWVsZCk7XG5cbiAgICAgIGZpZWxkID0gdXBkYXRlRmllbGREaXNhYmlsaXR5KGZpZWxkKTtcblxuICAgICAgZmllbGQgPSB1cGRhdGVGaWVsZEdyb3VwS2V5KGZpZWxkKTtcblxuICAgICAgZmllbGRHcm91cHMgPSB1cGRhdGVGb3JtRmllbGRHcm91cHMoZmllbGRHcm91cHMsIGZpZWxkKTtcblxuICAgICAgZmllbGQgPSB1cGRhdGVGaWVsZERlZmF1bHRWYWx1ZShmaWVsZCk7XG5cbiAgICAgIGZpZWxkID0gdXBkYXRlRmllbGRWYWxpZGF0b3JzKGZpZWxkKTtcblxuICAgICAgZmllbGQgPSB1cGRhdGVGaWVsZFJlc2V0QnV0dG9uKGZpZWxkKTtcblxuICAgICAgZmllbGQgPSB1cGRhdGVGaWVsZE1lc3NhZ2VzKGZpZWxkKTtcbiAgICB9XG5cbiAgICBmb3JtQ29uZmlnID0gc2V0Rm9ybUZpZWxkR3JvdXBzKGZvcm1Db25maWcsIGZpZWxkR3JvdXBzKTtcblxuICAgIGZvcm1Db25maWcgPSBzZXRGb3JtRmllbGRzKGZvcm1Db25maWcsIGZpZWxkcyk7XG5cbiAgICByZXR1cm4gZm9ybUNvbmZpZztcbiAgfVxufVxuIl19
|