kwikid-forms 0.6.13 → 0.6.15
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 +464 -388
- package/bundles/kwikid-forms.umd.js.map +1 -1
- package/esm2015/lib/renderer/config-converter/config-converter.helper.js +19 -1
- package/esm2015/lib/renderer/config-converter/config-converter.js +36 -5
- package/esm2015/lib/renderer/form-view/definitions/from-view.logs.definition.js +5 -0
- package/esm2015/lib/renderer/form-view/form-view.component.js +21 -13
- package/esm2015/lib/renderer/form-view/form-view.service.js +2 -7
- package/esm2015/lib/renderer/forms-list/forms-list.component.js +15 -2
- package/esm2015/lib/renderer/renderer.component.js +12 -3
- package/fesm2015/kwikid-forms.js +98 -22
- package/fesm2015/kwikid-forms.js.map +1 -1
- package/lib/renderer/config-converter/config-converter.helper.d.ts +3 -0
- package/lib/renderer/form-view/definitions/from-view.logs.definition.d.ts +3 -0
- package/lib/renderer/form-view/form-view.component.d.ts +2 -1
- package/lib/renderer/forms-list/forms-list.component.d.ts +1 -0
- package/lib/renderer/renderer.component.d.ts +3 -1
- package/package.json +1 -1
|
@@ -19,6 +19,8 @@ import { Apis } from "./helpers/form-view.apis.helper";
|
|
|
19
19
|
import { appendFormFieldMessage, convertFormFieldEmptyValueToKwikUIFormat, convertFormFieldValueToKwikUIFormat, convertFormFieldValueToStandardFormat, filterDuplicatesFiles, filterDuplicatesMediaFiles, getFormFieldByKey, getFormFieldIndexByKey, highlightFormFieldError, removeFormFieldMessage, showFormFieldError } from "./helpers/form-view.fields.helper";
|
|
20
20
|
import { FormValidation } from "./helpers/form-view.form-validations.helper";
|
|
21
21
|
import { Tasks } from "./helpers/form-view.tasks.helper";
|
|
22
|
+
import { ETypeLogs } from "./definitions/from-view.logs.definition";
|
|
23
|
+
import { getLanguage, updateDisplayLanguage } from "../config-converter/config-converter.helper";
|
|
22
24
|
import * as i0 from "@angular/core";
|
|
23
25
|
import * as i1 from "./form-view.service";
|
|
24
26
|
import * as i2 from "kwikui";
|
|
@@ -45,6 +47,7 @@ export class KwikIDFormViewComponent {
|
|
|
45
47
|
this.getUnsavedDataState = new EventEmitter();
|
|
46
48
|
this.onClickSaveForm = new EventEmitter();
|
|
47
49
|
this.onClickApiCall = new EventEmitter();
|
|
50
|
+
this.getLogs = new EventEmitter();
|
|
48
51
|
this.onActionShowPopupForm = new EventEmitter();
|
|
49
52
|
this.onClickFormFieldButton = new EventEmitter();
|
|
50
53
|
this.fieldGroups = {};
|
|
@@ -853,7 +856,7 @@ export class KwikIDFormViewComponent {
|
|
|
853
856
|
});
|
|
854
857
|
}
|
|
855
858
|
executeApiCall(api, object) {
|
|
856
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
859
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
857
860
|
return __awaiter(this, void 0, void 0, function* () {
|
|
858
861
|
const apis = new Apis(object, this.takeAction.bind(this));
|
|
859
862
|
api = yield apis.setUrl();
|
|
@@ -871,12 +874,13 @@ export class KwikIDFormViewComponent {
|
|
|
871
874
|
resolve(api.request.url.props.mockedData);
|
|
872
875
|
}, 1000); // 1000 ms = 1 sec
|
|
873
876
|
});
|
|
877
|
+
apiCallResponseStatusCode = (_b = (_a = api.request.url.props) === null || _a === void 0 ? void 0 : _a.statusCode) !== null && _b !== void 0 ? _b : 200; // Default Status Code for Mocked APIs
|
|
874
878
|
}
|
|
875
879
|
else {
|
|
876
880
|
const url = api.request.url.value;
|
|
877
|
-
const method = (
|
|
878
|
-
const headers = Object.assign({ "Content-Type": "application/json" }, (((
|
|
879
|
-
const body = (
|
|
881
|
+
const method = (_d = (_c = api.request) === null || _c === void 0 ? void 0 : _c.method) !== null && _d !== void 0 ? _d : "POST";
|
|
882
|
+
const headers = Object.assign({ "Content-Type": "application/json" }, (((_f = (_e = api.request) === null || _e === void 0 ? void 0 : _e.headers) === null || _f === void 0 ? void 0 : _f.value) || {}));
|
|
883
|
+
const body = (_j = (_h = (_g = api.request) === null || _g === void 0 ? void 0 : _g.body) === null || _h === void 0 ? void 0 : _h.value) !== null && _j !== void 0 ? _j : null;
|
|
880
884
|
if (method === "GET") {
|
|
881
885
|
try {
|
|
882
886
|
const response = yield fetch(url, {
|
|
@@ -907,6 +911,14 @@ export class KwikIDFormViewComponent {
|
|
|
907
911
|
}
|
|
908
912
|
api.response = setValueToObjectPath(api.response, "value", apiCallResponse);
|
|
909
913
|
api.response = setValueToObjectPath(api.response, "status", apiCallResponseStatusCode);
|
|
914
|
+
this.getLogs.emit({
|
|
915
|
+
type: ETypeLogs.API,
|
|
916
|
+
timestamp: new Date().getTime(),
|
|
917
|
+
data: {
|
|
918
|
+
request: api.request,
|
|
919
|
+
response: api.response
|
|
920
|
+
}
|
|
921
|
+
});
|
|
910
922
|
}
|
|
911
923
|
return api;
|
|
912
924
|
});
|
|
@@ -1344,7 +1356,6 @@ export class KwikIDFormViewComponent {
|
|
|
1344
1356
|
}
|
|
1345
1357
|
}, sourceValue);
|
|
1346
1358
|
object.FIELD_CONFIG = source.object.FIELD_CONFIG;
|
|
1347
|
-
console.log("PRINT0", getObjectDeepCopy(source), sourceValue);
|
|
1348
1359
|
});
|
|
1349
1360
|
}
|
|
1350
1361
|
setApiHeaderValue(action, object) {
|
|
@@ -1361,7 +1372,6 @@ export class KwikIDFormViewComponent {
|
|
|
1361
1372
|
}
|
|
1362
1373
|
}, sourceValue);
|
|
1363
1374
|
object.API_CONFIG = source.object.API_CONFIG;
|
|
1364
|
-
console.log("PRINT1", getObjectDeepCopy(source), sourceValue);
|
|
1365
1375
|
});
|
|
1366
1376
|
}
|
|
1367
1377
|
setApiHeaderValidity(action, object) {
|
|
@@ -1378,7 +1388,6 @@ export class KwikIDFormViewComponent {
|
|
|
1378
1388
|
}
|
|
1379
1389
|
}, sourceValue);
|
|
1380
1390
|
object.API_CONFIG = source.object.API_CONFIG;
|
|
1381
|
-
console.log("PRINT2", getObjectDeepCopy(source), sourceValue);
|
|
1382
1391
|
});
|
|
1383
1392
|
}
|
|
1384
1393
|
setApiBodyValue(action, object) {
|
|
@@ -1395,7 +1404,6 @@ export class KwikIDFormViewComponent {
|
|
|
1395
1404
|
}
|
|
1396
1405
|
}, sourceValue);
|
|
1397
1406
|
object.API_CONFIG = source.object.API_CONFIG;
|
|
1398
|
-
console.log("PRINT3", getObjectDeepCopy(source), sourceValue);
|
|
1399
1407
|
});
|
|
1400
1408
|
}
|
|
1401
1409
|
setApiBodyValidity(action, object) {
|
|
@@ -1412,13 +1420,11 @@ export class KwikIDFormViewComponent {
|
|
|
1412
1420
|
}
|
|
1413
1421
|
}, sourceValue);
|
|
1414
1422
|
object.API_CONFIG = source.object.API_CONFIG;
|
|
1415
|
-
console.log("PRINT4", getObjectDeepCopy(source), sourceValue);
|
|
1416
1423
|
});
|
|
1417
1424
|
}
|
|
1418
1425
|
setFieldValidity(action, object) {
|
|
1419
1426
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1420
1427
|
const source = new Source(object);
|
|
1421
|
-
console.log(getObjectDeepCopy(object));
|
|
1422
1428
|
const sourceValue = action.props.valid;
|
|
1423
1429
|
source.setValueToSource({
|
|
1424
1430
|
key: ESourceKey.OBJECT,
|
|
@@ -1430,7 +1436,6 @@ export class KwikIDFormViewComponent {
|
|
|
1430
1436
|
}
|
|
1431
1437
|
}, sourceValue);
|
|
1432
1438
|
object.API_CONFIG = source.object.API_CONFIG;
|
|
1433
|
-
console.log("PRINT5", getObjectDeepCopy(source), sourceValue);
|
|
1434
1439
|
});
|
|
1435
1440
|
}
|
|
1436
1441
|
setDropdownOptions(action, object) {
|
|
@@ -1775,6 +1780,7 @@ export class KwikIDFormViewComponent {
|
|
|
1775
1780
|
}
|
|
1776
1781
|
action = setValueToObjectPath(action, "props.message.message", fieldErrorShowSourceValue);
|
|
1777
1782
|
}
|
|
1783
|
+
action.props.message.message = updateDisplayLanguage(action.props.message.message, getLanguage());
|
|
1778
1784
|
this.fieldErrorShow(action.props.fieldKey, action.props.message);
|
|
1779
1785
|
break;
|
|
1780
1786
|
case EActionKey.FIELD_ERROR_HIDE:
|
|
@@ -1916,7 +1922,7 @@ export class KwikIDFormViewComponent {
|
|
|
1916
1922
|
}
|
|
1917
1923
|
}
|
|
1918
1924
|
/** @nocollapse */ KwikIDFormViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: KwikIDFormViewComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.KwikIDFormViewService }, { token: TuiPushService }, { token: TuiAlertService }, { token: TuiPreviewDialogService }, { token: TuiDialogService }, { token: i2.KwikUILoaderService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1919
|
-
/** @nocollapse */ KwikIDFormViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDFormViewComponent, selector: "kwikid-form-view", inputs: { formConfig: "formConfig", formData: "formData", isMobileView: "isMobileView", allFormsData: "allFormsData", userConfig: "userConfig", apiCallResponse: "apiCallResponse", buttonClickResponse: "buttonClickResponse", popupFormCallback: "popupFormCallback" }, outputs: { onClickGoBack: "onClickGoBack", onClickViewForms: "onClickViewForms", getUnsavedDataState: "getUnsavedDataState", onClickSaveForm: "onClickSaveForm", onClickApiCall: "onClickApiCall", onActionShowPopupForm: "onActionShowPopupForm", onClickFormFieldButton: "onClickFormFieldButton" }, providers: [KwikIDFormViewService], viewQueries: [{ propertyName: "preview", first: true, predicate: ["preview"], descendants: true }, { propertyName: "dialog", first: true, predicate: ["dialog"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"kwikid-form-container\"\n *ngIf=\"!loading\"\n>\n <div\n id=\"uf-form-fields-header-container\"\n *ngIf=\"\n !formConfig.properties?.header?.title?.hidden ||\n !formConfig.properties?.header?.logo?.hidden ||\n !formConfig.properties?.header?.steps?.hidden ||\n !formConfig.properties?.header?.backButton?.hidden\n \"\n >\n <img\n id=\"uf-header-logo\"\n *ngIf=\"!formConfig.properties?.header?.logo?.hidden && isMobileView\"\n [src]=\"formConfig.properties?.header?.logo?.src\"\n [alt]=\"formConfig.properties?.header?.logo?.alt\"\n [style]=\"\n formConfig.properties?.header?.logo?.styles ?? '' | styleSanitizer\n \"\n />\n <div id=\"uf-form-fields-header-main\">\n <div id=\"uf-form-fields-header-left\">\n <kwikui-button\n *ngIf=\"\n !formConfig.properties?.header.backButton.hidden && isMobileView\n \"\n [disabled]=\"backButton.disabled\"\n [showLoader]=\"backButton.showLoader\"\n appearance=\"mono\"\n icon=\"tuiIconArrowLeft\"\n shape=\"rounded\"\n (onClick)=\"\n handleOnClickGoBack(\n $event,\n formConfig.properties?.header.backButton.mode\n )\n \"\n ></kwikui-button>\n </div>\n <div id=\"uf-form-fields-header-right\">\n <div\n id=\"uf-form-fields-title\"\n *ngIf=\"!formConfig.properties?.header.title.hidden\"\n >{{ formConfig.properties?.header.title.label }}</div\n >\n <div\n id=\"uf-form-fields-steps\"\n *ngIf=\"!formConfig.properties?.header.steps.hidden\"\n >\n Step {{ formConfig.sequenceNo }} of {{ formConfig.formsListLength }}\n </div>\n </div>\n </div>\n <hr\n *ngIf=\"\n !formConfig.properties?.header.title.hidden ||\n !formConfig.properties?.header.steps.hidden ||\n !formConfig.properties?.header.backButton.hidden\n \"\n />\n </div>\n <form\n class=\"kwikid-form show\"\n [style]=\"formConfig.properties?.main?.styles ?? '' | styleSanitizer\"\n [formGroup]=\"formGroup\"\n >\n <ng-container\n *ngFor=\"\n let field of formFields;\n let i = index;\n trackBy: getUniqueIdentifier\n \"\n >\n <ng-container [ngSwitch]=\"field.type\">\n <!-- HTML Content -->\n <ng-container *ngSwitchCase=\"'html'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <div [innerHtml]=\"field.html | kwikuiSafeHtml\"></div>\n </div>\n </ng-container>\n <!-- Form Title -->\n <ng-container *ngSwitchCase=\"'title'\">\n <div\n class=\"title\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n [class.hidden]=\"field?.hidden\"\n id=\"field_{{ field.key }}\"\n >\n <div>\n {{ field.label }}\n </div>\n <kwikui-button\n *ngIf=\"field?.reset\"\n appearance=\"whiteblock\"\n size=\"s\"\n label=\"Reset\"\n (onClick)=\"handleOnClickResetFormFields($event, field)\"\n ></kwikui-button>\n </div>\n </ng-container>\n <!-- Button -->\n <ng-container *ngSwitchCase=\"'button'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-button\n [appearance]=\"field?.properties?.appearance ?? 'primary'\"\n [class]=\"field?.properties?.class\"\n [disabled]=\"field?.disabled\"\n [icon]=\"field?.properties?.icon\"\n [iconRight]=\"field?.properties?.iconRight\"\n [id]=\"field?.key\"\n [label]=\"field?.label\"\n [shape]=\"field?.properties?.shape\"\n [showLoader]=\"field?.properties?.loading ?? false\"\n [size]=\"field?.properties?.size\"\n [styles]=\"field?.properties?.styles\"\n [type]=\"'button'\"\n (onClick)=\"handleOnClickFormFieldButton(field)\"\n ></kwikui-button>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Text -->\n <ng-container *ngSwitchCase=\"'text'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input\n [case]=\"field?.properties?.case\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [type]=\"'text'\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Email -->\n <ng-container *ngSwitchCase=\"'email'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-email\n [case]=\"field?.properties?.case\"\n [disabled]=\"field?.disabled\"\n [domains]=\"field?.properties?.domains\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-email>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Password -->\n <ng-container *ngSwitchCase=\"'password'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-password\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [hintContent]=\"field?.properties?.hintContent\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-password>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Textarea -->\n <ng-container *ngSwitchCase=\"'textarea'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-textarea\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-textarea>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Checkbox -->\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-checkbox\n [contentAlign]=\"field?.properties?.contentAlign ?? 'left'\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.properties?.placeholder\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [size]=\"field?.properties?.size ?? 'l'\"\n [validators]=\"field?.validators\"\n [variant]=\"field?.properties?.variant ?? 'block'\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-checkbox>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Number -->\n <ng-container *ngSwitchCase=\"'number'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-number\n [decimal]=\"field?.properties?.decimal\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [max]=\"field?.properties?.max\"\n [min]=\"field?.properties?.min\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix ?? ''\"\n [precision]=\"field?.properties?.precision\"\n [prefix]=\"field?.properties?.prefix ?? ''\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-number>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Date -->\n <ng-container *ngSwitchCase=\"'date'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-date\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [max]=\"field?.properties?.max\"\n [maxCalculatedFromToday]=\"\n field?.properties?.maxCalculatedFromToday\n \"\n [min]=\"field?.properties?.min\"\n [minCalculatedFromToday]=\"\n field?.properties?.minCalculatedFromToday\n \"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-date>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Phone -->\n <ng-container *ngSwitchCase=\"'phone'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-phone\n [countryCode]=\"field?.properties?.countryCode\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [phoneMaskAfterCountryCode]=\"\n field?.properties?.phoneMaskAfterCountryCode\n \"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [removeCountryCodeFromValue]=\"\n field?.properties?.removeCountryCodeFromValue\n \"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-phone>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Radio -->\n <ng-container *ngSwitchCase=\"'radio'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <label\n [tuiLabel]=\"labelTemplate\"\n style=\"min-height: auto; padding: 0px 0.5rem\"\n >\n <kwikui-input-radio\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [items]=\"field?.options\"\n [label]=\"field?.label\"\n [orientation]=\"field?.properties?.orientation\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [size]=\"field?.properties?.size\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-radio>\n </label>\n <ng-template #labelTemplate>\n <p\n class=\"tui-space_bottom-2\"\n [hidden]=\"field?.hidden\"\n id=\"field_{{ field.key }}\"\n >\n <b>\n {{ field.label }}\n <span *ngIf=\"field.validators?.required\">*</span>\n </b>\n </p>\n </ng-template>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Dropdown -->\n <ng-container *ngSwitchCase=\"'select'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-select\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [options]=\"field.options\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [searchable]=\"field?.properties?.searchable\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-select>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Slider -->\n <ng-container *ngSwitchCase=\"'slider'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-slider\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [max]=\"field?.properties?.max\"\n [min]=\"field?.properties?.min\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [quantum]=\"field?.properties?.quantum\"\n [size]=\"field?.properties?.size\"\n [steps]=\"field?.properties?.steps\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-slider>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- API Call -->\n <ng-container *ngSwitchCase=\"'api'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-button-api-call\n [apiStatus]=\"field?.api?.status?.value\"\n [class]=\"field?.class\"\n [disabled]=\"field?.disabled\"\n [id]=\"field.key\"\n [label]=\"field?.api?.status?.labels[field?.api?.status?.value]\"\n [showLoader]=\"field?.disabled === 'loading'\"\n styles=\"width: fit-content\"\n (onClick)=\"handleOnClickApiCall($event)\"\n ></kwikui-button-api-call>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Mobile OTP -->\n <ng-container *ngSwitchCase=\"'otp'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-otp\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [mask]=\"field?.properties?.mask\"\n [mode]=\"field?.properties?.mode\"\n [otpLength]=\"field?.properties?.otpLength\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [size]=\"field?.properties?.size\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-otp>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Aadhaar Number -->\n <ng-container *ngSwitchCase=\"'aadhaar-number'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-aadhaar\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [mask]=\"field?.properties?.mask\"\n [placeholder]=\"field?.placeholder\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-aadhaar>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Preview Image -->\n <ng-container *ngSwitchCase=\"'image'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-image\n [altText]=\"field?.properties?.altText\"\n [class]=\"field?.properties?.class\"\n [html]=\"field?.properties?.html\"\n [id]=\"field.key\"\n [imageSrc]=\"field?.default?.value?.value ?? ''\"\n [imageType]=\"field?.properties?.imageType\"\n [loadingType]=\"field?.properties?.loadingType\"\n [styles]=\"field?.properties?.styles\"\n ></kwikui-image>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- File Upload -->\n <ng-container *ngSwitchCase=\"'file'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <label\n [tuiLabel]=\"labelTemplate\"\n style=\"min-height: auto\"\n >\n <kwikui-input-files\n [accept]=\"field?.properties?.accept\"\n [class]=\"field?.properties?.class\"\n [disabled]=\"field?.disabled\"\n [files]=\"files[field.key]\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field?.key\"\n [label]=\"field?.properties?.label\"\n [link]=\"field?.properties?.link\"\n [maxFileSize]=\"field?.properties?.maxFileSize\"\n [multiple]=\"field?.properties?.multiple\"\n [setFileTypesToForm]=\"['NORMAL']\"\n [styles]=\"field?.properties?.styles\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValueFile($event)\"\n (getRemovedFile)=\"handleRemovedFile($event)\"\n ></kwikui-input-files>\n </label>\n <ng-template #labelTemplate>\n <p\n style=\"padding: 0px 0.25rem; margin-bottom: 0.25rem\"\n [hidden]=\"field?.hidden\"\n id=\"field_{{ field.key }}\"\n >\n <b>\n {{ field.label }}\n <span *ngIf=\"field.validators?.required\">*</span>\n </b>\n </p>\n </ng-template>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Camera Capture -->\n <ng-container *ngSwitchCase=\"'capture'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <label\n *ngIf=\"\n field?.label !== '' &&\n field?.label !== undefined &&\n field?.label !== null\n \"\n style=\"min-height: auto\"\n >\n <p\n *ngIf=\"field?.label !== ''\"\n style=\"padding: 0px 0.25rem; margin-bottom: 0.5rem\"\n [hidden]=\"field?.hidden\"\n id=\"field_{{ field.key }}\"\n >\n <b>\n {{ field.label }}\n <span *ngIf=\"field.validators?.required\">*</span>\n </b>\n </p>\n </label>\n <kwikui-input-camera\n [buttonText]=\"field?.properties?.buttonText\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [icon]=\"field?.properties?.icon\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [mediaFiles]=\"mediaFiles[field.key]\"\n [properties]=\"field?.properties\"\n [showMediaFiles]=\"field?.properties?.showMediaFiles\"\n [type]=\"'CAPTURE'\"\n [validators]=\"field?.validators\"\n (onClick)=\"handleOnClickInputCamera($event, field)\"\n (getRemovedFile)=\"handleOnClickGetRemovedMediaFile($event)\"\n ></kwikui-input-camera>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Star Rating -->\n <ng-container *ngSwitchCase=\"'star-rating'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <label\n [tuiLabel]=\"labelTemplate\"\n style=\"min-height: auto; padding: 0px 0.5rem\"\n >\n <kwikui-star-rating\n [color]=\"field?.properties?.color\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [icon]=\"field?.properties?.icon\"\n [iconMarked]=\"field?.properties?.iconMarked\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [max]=\"field?.properties?.max\"\n [min]=\"field?.properties?.min\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [size]=\"field?.properties?.size\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-star-rating>\n </label>\n <ng-template #labelTemplate>\n <p>\n <b\n >{{ field?.properties?.placeholder }}\n <span *ngIf=\"field.validators?.required\">*</span></b\n >\n </p>\n </ng-template>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </form>\n <div\n class=\"kwikid-form-buttons\"\n *ngIf=\"\n !formConfig.properties.footer.viewFormsButton.hidden ||\n !formConfig.properties.footer.saveButton.hidden\n \"\n >\n <kwikui-button\n *ngIf=\"\n !formConfig.properties.footer.viewFormsButton.hidden && isMobileView\n \"\n [appearance]=\"'secondary'\"\n [disabled]=\"viewFormsButton.disabled\"\n [label]=\"formConfig.properties.footer.viewFormsButton.label\"\n [showLoader]=\"viewFormsButton.showLoader\"\n [styles]=\"'width: 100%'\"\n (onClick)=\"handleOnClickViewForms($event)\"\n ></kwikui-button>\n <kwikui-button\n *ngIf=\"!formConfig.properties.footer.saveButton.hidden\"\n [disabled]=\"saveFormButton.disabled\"\n [label]=\"formConfig.properties.footer.saveButton.label\"\n [showLoader]=\"saveFormButton.showLoader\"\n [styles]=\"'width: 100%'\"\n (onClick)=\"handleOnClickSaveForm($event)\"\n ></kwikui-button>\n </div>\n</div>\n<div\n class=\"kwikid-form-container-loading\"\n *ngIf=\"loading\"\n>\n <div\n *ngFor=\"let item of [].constructor(7); let i = index\"\n class=\"large-wrapper tui-skeleton tui-skeleton_rounded\"\n >\n </div>\n</div>\n\n<kwikui-loader></kwikui-loader>\n\n<tui-push\n id=\"field-error-notification\"\n *tuiPush=\"showErrorNotification\"\n heading=\"Missing/Incorrect Fields!\"\n type=\"Error\"\n (close)=\"toggleErrorNotification(false)\"\n>\n <tui-svg\n src=\"tuiIconXCircle\"\n style=\"color: #fff !important\"\n >\n </tui-svg>\n</tui-push>\n\n<ng-template\n #preview\n let-preview\n>\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n class=\"preview-container\"\n >\n <tui-preview-title *ngIf=\"previewProperties.title !== ''\">{{\n previewProperties.title\n }}</tui-preview-title>\n\n <ng-container *ngIf=\"!previewProperties.unavailable\">\n <div\n *ngIf=\"previewProperties?.html?.before !== ''\"\n class=\"preview-html preview-html-before\"\n [style]=\"previewProperties?.html?.beforeStyles ?? '' | styleSanitizer\"\n [innerHtml]=\"previewProperties.html.before | kwikuiSafeHtml\"\n ></div>\n\n <!-- Content within the iframe -->\n <div\n class=\"preview-iframe-content\"\n [style]=\"\n previewProperties?.iframe?.containerStyles ?? '' | styleSanitizer\n \"\n *ngIf=\"previewProperties.iframe.src !== ''\"\n >\n <!-- Your HTML content here -->\n <iframe\n [src]=\"previewProperties.iframe.src | kwikuiSafeUrl\"\n frameborder=\"0\"\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n allowfullscreen\n [title]=\"previewProperties.iframe.title\"\n class=\"preview-iframe\"\n scrolling=\"auto\"\n ></iframe>\n </div>\n\n <div\n *ngIf=\"previewProperties?.html?.after !== ''\"\n class=\"preview-html preview-html-after\"\n [style]=\"previewProperties?.html?.afterStyles ?? '' | styleSanitizer\"\n [innerHtml]=\"previewProperties.html.after | kwikuiSafeHtml\"\n ></div>\n </ng-container>\n\n <ng-container *ngIf=\"previewProperties.unavailable\">\n <div class=\"preview-unavailable\">\n <tui-svg\n src=\"tuiIconFileLarge\"\n class=\"t-icon\"\n ></tui-svg>\n <div>Preview unavailable</div>\n </div>\n </ng-container>\n\n <button\n tuiIconButton\n tuiPreviewAction\n icon=\"tuiIconCloseLarge\"\n title=\"Close\"\n type=\"button\"\n (click)=\"preview.complete()\"\n ></button>\n </tui-preview>\n</ng-template>\n\n<ng-template\n #dialog\n let-dialog\n>\n <div class=\"preview-container\">\n <ng-container *ngIf=\"!previewProperties.unavailable\">\n <div\n *ngIf=\"previewProperties?.html?.before !== ''\"\n class=\"preview-html preview-html-before\"\n [style]=\"previewProperties?.html?.beforeStyles ?? '' | styleSanitizer\"\n [innerHtml]=\"previewProperties.html.before | kwikuiSafeHtml\"\n ></div>\n\n <!-- Content within the iframe -->\n <div\n class=\"preview-iframe-content\"\n [style]=\"\n previewProperties?.iframe?.containerStyles ?? '' | styleSanitizer\n \"\n *ngIf=\"previewProperties.iframe.src !== ''\"\n >\n <!-- Your HTML content here -->\n <iframe\n [src]=\"previewProperties.iframe.src | kwikuiSafeUrl\"\n frameborder=\"0\"\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n allowfullscreen\n [title]=\"previewProperties.iframe.title\"\n class=\"preview-iframe\"\n scrolling=\"auto\"\n ></iframe>\n </div>\n\n <div\n *ngIf=\"previewProperties?.html?.after !== ''\"\n class=\"preview-html preview-html-after\"\n [style]=\"previewProperties?.html?.afterStyles ?? '' | styleSanitizer\"\n [innerHtml]=\"previewProperties.html.after | kwikuiSafeHtml\"\n ></div>\n </ng-container>\n\n <ng-container *ngIf=\"previewProperties.unavailable\">\n <div class=\"preview-unavailable\">\n <tui-svg\n src=\"tuiIconFileLarge\"\n class=\"t-icon\"\n ></tui-svg>\n <div>Preview unavailable</div>\n </div>\n </ng-container>\n </div>\n</ng-template>\n\n<div\n id=\"kwikid-camera-container\"\n *ngIf=\"isShowCameraCapture\"\n>\n <div\n id=\"kwikid-camera-wrapper\"\n [class.fullscreen]=\"isShowCameraFullscreen\"\n >\n <kwikid-camera\n [type]=\"'CAPTURE'\"\n [image]=\"cameraCaptureImage\"\n [config]=\"cameraCaptureConfig\"\n (getImage)=\"handleGetImage($event)\"\n (onClickSave)=\"handleOnClickSaveCameraCapture($event)\"\n >\n <ng-container slot=\"header\">\n <div style=\"display: flex; width: 100%; max-width: 100%; padding: 0rem\">\n <div style=\"flex: 1; text-align: left\"> </div>\n <kwikui-button\n *ngIf=\"cameraCaptureConfig?.header?.title !== ''\"\n appearance=\"whiteblock\"\n [label]=\"cameraCaptureConfig?.header?.title\"\n shape=\"rounded\"\n style=\"\n flex: 1;\n width: 100%;\n min-width: max-content;\n text-align: center;\n margin: auto;\n \"\n size=\"s\"\n ></kwikui-button>\n <div\n style=\"\n flex: 1;\n text-align: right;\n display: flex;\n justify-content: flex-end;\n gap: 1rem;\n \"\n >\n <kwikui-button\n *ngIf=\"cameraCaptureConfig?.header?.isExpand\"\n id=\"kwikid-camera-header-enlarge-button\"\n appearance=\"whiteblock\"\n [icon]=\"\n isShowCameraFullscreen ? 'tuiIconMinimize2' : 'tuiIconMaximize2'\n \"\n shape=\"rounded\"\n size=\"s\"\n (click)=\"isShowCameraFullscreen = !isShowCameraFullscreen\"\n ></kwikui-button>\n <kwikui-button\n *ngIf=\"cameraCaptureConfig?.header?.isClose\"\n id=\"kwikid-camera-header-close-button\"\n appearance=\"whiteblock\"\n icon=\"tuiIconCloseLarge\"\n shape=\"rounded\"\n size=\"s\"\n (click)=\"handleOnClickCloseCamera($event)\"\n ></kwikui-button>\n </div>\n </div>\n </ng-container>\n </kwikid-camera>\n </div>\n</div>\n", styles: [".kwikid-form-container{width:100%;height:100%;margin:0 auto;display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center}.kwikid-form.show{width:100%;height:100%;padding:1rem;overflow-y:auto;display:flex;flex-direction:column;align-content:center;justify-content:flex-start;align-items:stretch}.kwikid-form.show>*:not(:last-child){margin-bottom:1rem}.kwikid-form-buttons{width:100%;bottom:0px;padding:1rem;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}.kwikid-form-buttons>*:not(:last-child){margin-right:1rem}.kwikid-form-buttons *{flex-grow:1}#uf-form-fields-header-container{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:flex-start;padding:1rem 1rem 0}#uf-form-fields-header-container>*:not(:last-child){margin-bottom:.5rem}#uf-form-fields-header-container #uf-header-logo{width:-moz-fit-content;width:fit-content;height:50px}#uf-form-fields-header-container #uf-form-fields-header-main{display:flex;flex-direction:row;align-content:center;justify-content:flex-start;align-items:center;width:100%}#uf-form-fields-header-container #uf-form-fields-header-main>*:not(:last-child){margin-right:.25rem}#uf-form-fields-header-container #uf-form-fields-header-main #uf-form-fields-header-right{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:flex-start}#uf-form-fields-header-container #uf-form-fields-header-main #uf-form-fields-header-right>*{margin-bottom:.5rem}#uf-form-fields-header-container hr{width:100%}#uf-form-fields-title{color:#000;font-size:1.75em;font-weight:bold}#uf-form-fields-steps{color:var(--color-on-secondary-container);font-size:1rem}.title{border-left:.25rem solid var(--tui-primary);padding:.75rem;font-size:1.4em;font-weight:bold;background-color:var(--tui-secondary);display:flex;flex-direction:row;align-content:center;justify-content:space-between;align-items:center}.title>*:not(:last-child){margin-right:.5rem}.title:not(:first-child){margin-top:.5rem}.title.hidden{display:none}.large-wrapper{width:100%;height:60px}.large-wrapper:first-child{margin-bottom:auto}.large-wrapper:last-child{margin-top:auto}.kwikid-form-container-loading{width:100%;height:100%;margin:0 auto;display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center;padding:1rem}.kwikid-form-container-loading>* :not(:last-child){margin-bottom:1rem}#field-error-notification{background-color:var(--tui-error-fill);color:#fff!important}#field-error-notification .t-top{color:#fff!important}#field-error-notification .t-close{color:#fff!important}.preview-container{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;align-content:center;height:calc(100vh - 3rem)}.preview-container>*:not(:last-child){margin-bottom:1rem}.preview-container .preview-html{flex-grow:1}.preview-container .preview-iframe-content{height:100%;flex-grow:1}.preview-container .preview-iframe-content .preview-iframe{width:100%;height:100%}.preview-container .preview-unavailable{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:center;color:#fff;font-size:1.2rem;top:50%;left:50%;width:100%;height:100vh}.preview-container .preview-unavailable>*:not(:last-child){margin-bottom:1rem}#kwikid-camera-container{width:100%;height:100%;position:fixed;top:50%;left:50%;background-color:#0000008f;transform:translate(-50%,-50%);z-index:100}#kwikid-camera-container #kwikid-camera-wrapper{width:min(80%);height:max(85%);box-shadow:#0000008f 0 22px 70px 4px;overflow:hidden;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:1rem;background-color:#000;transition:5s linear ease}#kwikid-camera-container #kwikid-camera-wrapper.fullscreen{width:100%;height:100%;border-radius:0;transition:5s linear ease}@media only screen and (max-width: 600px){#kwikid-camera-container #kwikid-camera-wrapper{width:100%;height:100%;border-radius:0;transition:5s linear ease}#kwikid-camera-container #kwikid-camera-wrapper #kwikid-camera-header-enlarge-button{display:none}}\n", "::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{border-radius:10px}::-webkit-scrollbar-thumb{background:lightgray;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:gray}\n"], components: [{ type: i2.KwikUIButtonComponent, selector: "kwikui-button", inputs: ["appearance", "class", "disabled", "icon", "iconRight", "id", "label", "shape", "showLoader", "size", "styles", "type"], outputs: ["onClick"] }, { type: i2.KwikUIMessagesComponent, selector: "kwikui-messages", inputs: ["id", "messages"] }, { type: i2.KwikUIInputComponent, selector: "kwikui-input", inputs: ["case", "disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "placeholder", "postfix", "prefix", "properties", "size", "type", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputEmailComponent, selector: "kwikui-input-email", inputs: ["case", "disabled", "domains", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputPasswordComponent, selector: "kwikui-input-password", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUITextareaComponent, selector: "kwikui-textarea", inputs: ["disabled", "focus", "formControl", "formControlName", "id", "invalid", "label", "placeholder", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUICheckboxComponent, selector: "kwikui-checkbox", inputs: ["contentAlign", "disabled", "focus", "formControl", "formControlName", "id", "invalid", "label", "placeholder", "properties", "size", "validators", "variant"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputNumberComponent, selector: "kwikui-input-number", inputs: ["decimal", "disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "max", "min", "placeholder", "postfix", "precision", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputDateComponent, selector: "kwikui-input-date", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "max", "maxCalculatedFromToday", "min", "minCalculatedFromToday", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputPhoneComponent, selector: "kwikui-input-phone", inputs: ["countryCode", "disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "phoneMaskAfterCountryCode", "placeholder", "postfix", "prefix", "properties", "removeCountryCodeFromValue", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.TuiLabelComponent, selector: "label[tuiLabel]", inputs: ["tuiLabel", "context"] }, { type: i2.KwikUIInputRadioComponent, selector: "kwikui-input-radio", inputs: ["disabled", "focus", "formControl", "formControlName", "id", "invalid", "items", "label", "orientation", "placeholder", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputSelectComponent, selector: "kwikui-input-select", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "options", "placeholder", "properties", "searchable", "size", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputSliderComponent, selector: "kwikui-input-slider", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "max", "min", "placeholder", "postfix", "prefix", "properties", "quantum", "size", "steps", "type", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUIButtonApiCallComponent, selector: "kwikui-button-api-call", inputs: ["apiStatus", "class", "disabled", "id", "label", "shape", "showLoader", "size", "styles"], outputs: ["onClick"] }, { type: i2.KwikUIInputOtpComponent, selector: "kwikui-input-otp", inputs: ["disabled", "focus", "formControl", "formControlName", "id", "invalid", "label", "mask", "mode", "otpLength", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputAadhaarComponent, selector: "kwikui-input-aadhaar", inputs: ["disabled", "focus", "formControl", "formControlName", "id", "invalid", "label", "mask", "placeholder", "properties", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUIImageComponent, selector: "kwikui-image", inputs: ["altText", "class", "html", "id", "imageSrc", "imageType", "loadingType", "styles"], outputs: ["onClick"] }, { type: i2.KwikUIInputFilesComponent, selector: "kwikui-input-files", inputs: ["accept", "class", "disabled", "files", "formControl", "formControlName", "icon", "id", "label", "link", "maxFileSize", "multiple", "setFileTypesToForm", "showAddedFiles", "size", "styles", "validators"], outputs: ["getKeyValue", "getRemovedFile"] }, { type: i4.KwikUIInputCameraComponent, selector: "kwikui-input-camera", inputs: ["buttonText", "disabled", "focus", "formControl", "formControlName", "icon", "id", "invalid", "mediaFiles", "properties", "showMediaFiles", "size", "type", "validators"], outputs: ["onClick", "getRemovedFile"] }, { type: i2.KwikUIStarRatingComponent, selector: "kwikui-star-rating", inputs: ["color", "disabled", "focus", "formControl", "formControlName", "icon", "iconMarked", "id", "invalid", "label", "max", "min", "placeholder", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUILoaderComponent, selector: "kwikui-loader" }, { type: i5.TuiPushComponent, selector: "tui-push", inputs: ["heading", "type", "timestamp"], outputs: ["close"] }, { type: i3.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { type: i6.TuiPreviewComponent, selector: "tui-preview", inputs: ["zoomable", "rotatable"] }, { type: i6.TuiPreviewTitleComponent, selector: "tui-preview-title" }, { type: i3.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }, { type: i4.KwikIDCameraComponent, selector: "kwikid-camera", inputs: ["type", "config", "data", "image"], outputs: ["getImage", "onClickSave"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i8.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i7.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i8.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i5.TuiPushAlertDirective, selector: "[tuiPush]", inputs: ["tuiPush"] }, { type: i5.TuiPushDirective, selector: "tui-push" }, { type: i6.TuiPreviewActionDirective, selector: "[tuiPreviewAction]" }], pipes: { "styleSanitizer": i9.StyleSanitizerPipe, "kwikuiSafeHtml": i2.KwikUISafeHtmlPipe, "kwikuiSafeUrl": i2.KwikUISafeUrlPipe } });
|
|
1925
|
+
/** @nocollapse */ KwikIDFormViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDFormViewComponent, selector: "kwikid-form-view", inputs: { formConfig: "formConfig", formData: "formData", isMobileView: "isMobileView", allFormsData: "allFormsData", userConfig: "userConfig", apiCallResponse: "apiCallResponse", buttonClickResponse: "buttonClickResponse", popupFormCallback: "popupFormCallback" }, outputs: { onClickGoBack: "onClickGoBack", onClickViewForms: "onClickViewForms", getUnsavedDataState: "getUnsavedDataState", onClickSaveForm: "onClickSaveForm", onClickApiCall: "onClickApiCall", getLogs: "getLogs", onActionShowPopupForm: "onActionShowPopupForm", onClickFormFieldButton: "onClickFormFieldButton" }, providers: [KwikIDFormViewService], viewQueries: [{ propertyName: "preview", first: true, predicate: ["preview"], descendants: true }, { propertyName: "dialog", first: true, predicate: ["dialog"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"kwikid-form-container\"\n *ngIf=\"!loading\"\n>\n <div\n id=\"uf-form-fields-header-container\"\n *ngIf=\"\n !formConfig.properties?.header?.title?.hidden ||\n !formConfig.properties?.header?.logo?.hidden ||\n !formConfig.properties?.header?.steps?.hidden ||\n !formConfig.properties?.header?.backButton?.hidden\n \"\n >\n <img\n id=\"uf-header-logo\"\n *ngIf=\"!formConfig.properties?.header?.logo?.hidden && isMobileView\"\n [src]=\"formConfig.properties?.header?.logo?.src\"\n [alt]=\"formConfig.properties?.header?.logo?.alt\"\n [style]=\"\n formConfig.properties?.header?.logo?.styles ?? '' | styleSanitizer\n \"\n />\n <div id=\"uf-form-fields-header-main\">\n <div id=\"uf-form-fields-header-left\">\n <kwikui-button\n *ngIf=\"\n !formConfig.properties?.header.backButton.hidden && isMobileView\n \"\n [disabled]=\"backButton.disabled\"\n [showLoader]=\"backButton.showLoader\"\n appearance=\"mono\"\n icon=\"tuiIconArrowLeft\"\n shape=\"rounded\"\n (onClick)=\"\n handleOnClickGoBack(\n $event,\n formConfig.properties?.header.backButton.mode\n )\n \"\n ></kwikui-button>\n </div>\n <div id=\"uf-form-fields-header-right\">\n <div\n id=\"uf-form-fields-title\"\n *ngIf=\"!formConfig.properties?.header.title.hidden\"\n >{{ formConfig.properties?.header.title.label }}</div\n >\n <div\n id=\"uf-form-fields-steps\"\n *ngIf=\"!formConfig.properties?.header.steps.hidden\"\n >\n Step {{ formConfig.sequenceNo }} of {{ formConfig.formsListLength }}\n </div>\n </div>\n </div>\n <hr\n *ngIf=\"\n !formConfig.properties?.header.title.hidden ||\n !formConfig.properties?.header.steps.hidden ||\n !formConfig.properties?.header.backButton.hidden\n \"\n />\n </div>\n <form\n class=\"kwikid-form show\"\n [style]=\"formConfig.properties?.main?.styles ?? '' | styleSanitizer\"\n [formGroup]=\"formGroup\"\n >\n <ng-container\n *ngFor=\"\n let field of formFields;\n let i = index;\n trackBy: getUniqueIdentifier\n \"\n >\n <ng-container [ngSwitch]=\"field.type\">\n <!-- HTML Content -->\n <ng-container *ngSwitchCase=\"'html'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <div [innerHtml]=\"field.html | kwikuiSafeHtml\"></div>\n </div>\n </ng-container>\n <!-- Form Title -->\n <ng-container *ngSwitchCase=\"'title'\">\n <div\n class=\"title\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n [class.hidden]=\"field?.hidden\"\n id=\"field_{{ field.key }}\"\n >\n <div>\n {{ field.label }}\n </div>\n <kwikui-button\n *ngIf=\"field?.reset\"\n appearance=\"whiteblock\"\n size=\"s\"\n label=\"Reset\"\n (onClick)=\"handleOnClickResetFormFields($event, field)\"\n ></kwikui-button>\n </div>\n </ng-container>\n <!-- Button -->\n <ng-container *ngSwitchCase=\"'button'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-button\n [appearance]=\"field?.properties?.appearance ?? 'primary'\"\n [class]=\"field?.properties?.class\"\n [disabled]=\"field?.disabled\"\n [icon]=\"field?.properties?.icon\"\n [iconRight]=\"field?.properties?.iconRight\"\n [id]=\"field?.key\"\n [label]=\"field?.label\"\n [shape]=\"field?.properties?.shape\"\n [showLoader]=\"field?.properties?.loading ?? false\"\n [size]=\"field?.properties?.size\"\n [styles]=\"field?.properties?.styles\"\n [type]=\"'button'\"\n (onClick)=\"handleOnClickFormFieldButton(field)\"\n ></kwikui-button>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Text -->\n <ng-container *ngSwitchCase=\"'text'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input\n [case]=\"field?.properties?.case\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [type]=\"'text'\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Email -->\n <ng-container *ngSwitchCase=\"'email'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-email\n [case]=\"field?.properties?.case\"\n [disabled]=\"field?.disabled\"\n [domains]=\"field?.properties?.domains\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-email>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Password -->\n <ng-container *ngSwitchCase=\"'password'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-password\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [hintContent]=\"field?.properties?.hintContent\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-password>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Textarea -->\n <ng-container *ngSwitchCase=\"'textarea'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-textarea\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-textarea>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Checkbox -->\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-checkbox\n [contentAlign]=\"field?.properties?.contentAlign ?? 'left'\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.properties?.placeholder\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [size]=\"field?.properties?.size ?? 'l'\"\n [validators]=\"field?.validators\"\n [variant]=\"field?.properties?.variant ?? 'block'\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-checkbox>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Number -->\n <ng-container *ngSwitchCase=\"'number'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-number\n [decimal]=\"field?.properties?.decimal\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [max]=\"field?.properties?.max\"\n [min]=\"field?.properties?.min\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix ?? ''\"\n [precision]=\"field?.properties?.precision\"\n [prefix]=\"field?.properties?.prefix ?? ''\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-number>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Date -->\n <ng-container *ngSwitchCase=\"'date'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-date\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [max]=\"field?.properties?.max\"\n [maxCalculatedFromToday]=\"\n field?.properties?.maxCalculatedFromToday\n \"\n [min]=\"field?.properties?.min\"\n [minCalculatedFromToday]=\"\n field?.properties?.minCalculatedFromToday\n \"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-date>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Phone -->\n <ng-container *ngSwitchCase=\"'phone'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-phone\n [countryCode]=\"field?.properties?.countryCode\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [phoneMaskAfterCountryCode]=\"\n field?.properties?.phoneMaskAfterCountryCode\n \"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [removeCountryCodeFromValue]=\"\n field?.properties?.removeCountryCodeFromValue\n \"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-phone>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Radio -->\n <ng-container *ngSwitchCase=\"'radio'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <label\n [tuiLabel]=\"labelTemplate\"\n style=\"min-height: auto; padding: 0px 0.5rem\"\n >\n <kwikui-input-radio\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [items]=\"field?.options\"\n [label]=\"field?.label\"\n [orientation]=\"field?.properties?.orientation\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [size]=\"field?.properties?.size\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-radio>\n </label>\n <ng-template #labelTemplate>\n <p\n class=\"tui-space_bottom-2\"\n [hidden]=\"field?.hidden\"\n id=\"field_{{ field.key }}\"\n >\n <b>\n {{ field.label }}\n <span *ngIf=\"field.validators?.required\">*</span>\n </b>\n </p>\n </ng-template>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Dropdown -->\n <ng-container *ngSwitchCase=\"'select'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-select\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [options]=\"field.options\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [searchable]=\"field?.properties?.searchable\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-select>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Input Slider -->\n <ng-container *ngSwitchCase=\"'slider'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-slider\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [max]=\"field?.properties?.max\"\n [min]=\"field?.properties?.min\"\n [placeholder]=\"field?.properties?.placeholder\"\n [postfix]=\"field?.properties?.postfix\"\n [prefix]=\"field?.properties?.prefix\"\n [properties]=\"field?.properties\"\n [quantum]=\"field?.properties?.quantum\"\n [size]=\"field?.properties?.size\"\n [steps]=\"field?.properties?.steps\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-slider>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- API Call -->\n <ng-container *ngSwitchCase=\"'api'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-button-api-call\n [apiStatus]=\"field?.api?.status?.value\"\n [class]=\"field?.class\"\n [disabled]=\"field?.disabled\"\n [id]=\"field.key\"\n [label]=\"field?.api?.status?.labels[field?.api?.status?.value]\"\n [showLoader]=\"field?.disabled === 'loading'\"\n styles=\"width: fit-content\"\n (onClick)=\"handleOnClickApiCall($event)\"\n ></kwikui-button-api-call>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Mobile OTP -->\n <ng-container *ngSwitchCase=\"'otp'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-otp\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [mask]=\"field?.properties?.mask\"\n [mode]=\"field?.properties?.mode\"\n [otpLength]=\"field?.properties?.otpLength\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [size]=\"field?.properties?.size\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-otp>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Aadhaar Number -->\n <ng-container *ngSwitchCase=\"'aadhaar-number'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-input-aadhaar\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [mask]=\"field?.properties?.mask\"\n [placeholder]=\"field?.placeholder\"\n [properties]=\"field?.properties\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-input-aadhaar>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Preview Image -->\n <ng-container *ngSwitchCase=\"'image'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <kwikui-image\n [altText]=\"field?.properties?.altText\"\n [class]=\"field?.properties?.class\"\n [html]=\"field?.properties?.html\"\n [id]=\"field.key\"\n [imageSrc]=\"field?.default?.value?.value ?? ''\"\n [imageType]=\"field?.properties?.imageType\"\n [loadingType]=\"field?.properties?.loadingType\"\n [styles]=\"field?.properties?.styles\"\n ></kwikui-image>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- File Upload -->\n <ng-container *ngSwitchCase=\"'file'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <label\n [tuiLabel]=\"labelTemplate\"\n style=\"min-height: auto\"\n >\n <kwikui-input-files\n [accept]=\"field?.properties?.accept\"\n [class]=\"field?.properties?.class\"\n [disabled]=\"field?.disabled\"\n [files]=\"files[field.key]\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [id]=\"field?.key\"\n [label]=\"field?.properties?.label\"\n [link]=\"field?.properties?.link\"\n [maxFileSize]=\"field?.properties?.maxFileSize\"\n [multiple]=\"field?.properties?.multiple\"\n [setFileTypesToForm]=\"['NORMAL']\"\n [styles]=\"field?.properties?.styles\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValueFile($event)\"\n (getRemovedFile)=\"handleRemovedFile($event)\"\n ></kwikui-input-files>\n </label>\n <ng-template #labelTemplate>\n <p\n style=\"padding: 0px 0.25rem; margin-bottom: 0.25rem\"\n [hidden]=\"field?.hidden\"\n id=\"field_{{ field.key }}\"\n >\n <b>\n {{ field.label }}\n <span *ngIf=\"field.validators?.required\">*</span>\n </b>\n </p>\n </ng-template>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Camera Capture -->\n <ng-container *ngSwitchCase=\"'capture'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <label\n *ngIf=\"\n field?.label !== '' &&\n field?.label !== undefined &&\n field?.label !== null\n \"\n style=\"min-height: auto\"\n >\n <p\n *ngIf=\"field?.label !== ''\"\n style=\"padding: 0px 0.25rem; margin-bottom: 0.5rem\"\n [hidden]=\"field?.hidden\"\n id=\"field_{{ field.key }}\"\n >\n <b>\n {{ field.label }}\n <span *ngIf=\"field.validators?.required\">*</span>\n </b>\n </p>\n </label>\n <kwikui-input-camera\n [buttonText]=\"field?.properties?.buttonText\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [icon]=\"field?.properties?.icon\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [mediaFiles]=\"mediaFiles[field.key]\"\n [properties]=\"field?.properties\"\n [showMediaFiles]=\"field?.properties?.showMediaFiles\"\n [type]=\"'CAPTURE'\"\n [validators]=\"field?.validators\"\n (onClick)=\"handleOnClickInputCamera($event, field)\"\n (getRemovedFile)=\"handleOnClickGetRemovedMediaFile($event)\"\n ></kwikui-input-camera>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n <!-- Star Rating -->\n <ng-container *ngSwitchCase=\"'star-rating'\">\n <div\n [hidden]=\"field?.hidden\"\n [style]=\"field?.properties?.containerStyles ?? '' | styleSanitizer\"\n id=\"field_{{ field.key }}\"\n >\n <label\n [tuiLabel]=\"labelTemplate\"\n style=\"min-height: auto; padding: 0px 0.5rem\"\n >\n <kwikui-star-rating\n [color]=\"field?.properties?.color\"\n [disabled]=\"field?.disabled\"\n [focus]=\"field?.focus\"\n [formControl]=\"formGroup.controls[field.key]\"\n [formControlName]=\"field.key\"\n [icon]=\"field?.properties?.icon\"\n [iconMarked]=\"field?.properties?.iconMarked\"\n [id]=\"field.key\"\n [invalid]=\"field?.invalid\"\n [label]=\"field?.label\"\n [max]=\"field?.properties?.max\"\n [min]=\"field?.properties?.min\"\n [placeholder]=\"field?.properties?.placeholder\"\n [properties]=\"field?.properties\"\n [size]=\"field?.properties?.size\"\n [validators]=\"field?.validators\"\n (getKeyValue)=\"handleGetKeyValue($event)\"\n ></kwikui-star-rating>\n </label>\n <ng-template #labelTemplate>\n <p>\n <b\n >{{ field?.properties?.placeholder }}\n <span *ngIf=\"field.validators?.required\">*</span></b\n >\n </p>\n </ng-template>\n <kwikui-messages\n [messages]=\"field.messages\"\n [id]=\"field.key\"\n ></kwikui-messages>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n </form>\n <div\n class=\"kwikid-form-buttons\"\n *ngIf=\"\n !formConfig.properties.footer.viewFormsButton.hidden ||\n !formConfig.properties.footer.saveButton.hidden\n \"\n >\n <kwikui-button\n *ngIf=\"\n !formConfig.properties.footer.viewFormsButton.hidden && isMobileView\n \"\n [appearance]=\"'secondary'\"\n [disabled]=\"viewFormsButton.disabled\"\n [label]=\"formConfig.properties.footer.viewFormsButton.label\"\n [showLoader]=\"viewFormsButton.showLoader\"\n [styles]=\"'width: 100%'\"\n (onClick)=\"handleOnClickViewForms($event)\"\n ></kwikui-button>\n <kwikui-button\n *ngIf=\"!formConfig.properties.footer.saveButton.hidden\"\n [disabled]=\"saveFormButton.disabled\"\n [label]=\"formConfig.properties.footer.saveButton.label\"\n [showLoader]=\"saveFormButton.showLoader\"\n [styles]=\"'width: 100%'\"\n (onClick)=\"handleOnClickSaveForm($event)\"\n ></kwikui-button>\n </div>\n</div>\n<div\n class=\"kwikid-form-container-loading\"\n *ngIf=\"loading\"\n>\n <div\n *ngFor=\"let item of [].constructor(7); let i = index\"\n class=\"large-wrapper tui-skeleton tui-skeleton_rounded\"\n >\n </div>\n</div>\n\n<kwikui-loader></kwikui-loader>\n\n<tui-push\n id=\"field-error-notification\"\n *tuiPush=\"showErrorNotification\"\n heading=\"Missing/Incorrect Fields!\"\n type=\"Error\"\n (close)=\"toggleErrorNotification(false)\"\n>\n <tui-svg\n src=\"tuiIconXCircle\"\n style=\"color: #fff !important\"\n >\n </tui-svg>\n</tui-push>\n\n<ng-template\n #preview\n let-preview\n>\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n class=\"preview-container\"\n >\n <tui-preview-title *ngIf=\"previewProperties.title !== ''\">{{\n previewProperties.title\n }}</tui-preview-title>\n\n <ng-container *ngIf=\"!previewProperties.unavailable\">\n <div\n *ngIf=\"previewProperties?.html?.before !== ''\"\n class=\"preview-html preview-html-before\"\n [style]=\"previewProperties?.html?.beforeStyles ?? '' | styleSanitizer\"\n [innerHtml]=\"previewProperties.html.before | kwikuiSafeHtml\"\n ></div>\n\n <!-- Content within the iframe -->\n <div\n class=\"preview-iframe-content\"\n [style]=\"\n previewProperties?.iframe?.containerStyles ?? '' | styleSanitizer\n \"\n *ngIf=\"previewProperties.iframe.src !== ''\"\n >\n <!-- Your HTML content here -->\n <iframe\n [src]=\"previewProperties.iframe.src | kwikuiSafeUrl\"\n frameborder=\"0\"\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n allowfullscreen\n [title]=\"previewProperties.iframe.title\"\n class=\"preview-iframe\"\n scrolling=\"auto\"\n ></iframe>\n </div>\n\n <div\n *ngIf=\"previewProperties?.html?.after !== ''\"\n class=\"preview-html preview-html-after\"\n [style]=\"previewProperties?.html?.afterStyles ?? '' | styleSanitizer\"\n [innerHtml]=\"previewProperties.html.after | kwikuiSafeHtml\"\n ></div>\n </ng-container>\n\n <ng-container *ngIf=\"previewProperties.unavailable\">\n <div class=\"preview-unavailable\">\n <tui-svg\n src=\"tuiIconFileLarge\"\n class=\"t-icon\"\n ></tui-svg>\n <div>Preview unavailable</div>\n </div>\n </ng-container>\n\n <button\n tuiIconButton\n tuiPreviewAction\n icon=\"tuiIconCloseLarge\"\n title=\"Close\"\n type=\"button\"\n (click)=\"preview.complete()\"\n ></button>\n </tui-preview>\n</ng-template>\n\n<ng-template\n #dialog\n let-dialog\n>\n <div class=\"preview-container\">\n <ng-container *ngIf=\"!previewProperties.unavailable\">\n <div\n *ngIf=\"previewProperties?.html?.before !== ''\"\n class=\"preview-html preview-html-before\"\n [style]=\"previewProperties?.html?.beforeStyles ?? '' | styleSanitizer\"\n [innerHtml]=\"previewProperties.html.before | kwikuiSafeHtml\"\n ></div>\n\n <!-- Content within the iframe -->\n <div\n class=\"preview-iframe-content\"\n [style]=\"\n previewProperties?.iframe?.containerStyles ?? '' | styleSanitizer\n \"\n *ngIf=\"previewProperties.iframe.src !== ''\"\n >\n <!-- Your HTML content here -->\n <iframe\n [src]=\"previewProperties.iframe.src | kwikuiSafeUrl\"\n frameborder=\"0\"\n allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n allowfullscreen\n [title]=\"previewProperties.iframe.title\"\n class=\"preview-iframe\"\n scrolling=\"auto\"\n ></iframe>\n </div>\n\n <div\n *ngIf=\"previewProperties?.html?.after !== ''\"\n class=\"preview-html preview-html-after\"\n [style]=\"previewProperties?.html?.afterStyles ?? '' | styleSanitizer\"\n [innerHtml]=\"previewProperties.html.after | kwikuiSafeHtml\"\n ></div>\n </ng-container>\n\n <ng-container *ngIf=\"previewProperties.unavailable\">\n <div class=\"preview-unavailable\">\n <tui-svg\n src=\"tuiIconFileLarge\"\n class=\"t-icon\"\n ></tui-svg>\n <div>Preview unavailable</div>\n </div>\n </ng-container>\n </div>\n</ng-template>\n\n<div\n id=\"kwikid-camera-container\"\n *ngIf=\"isShowCameraCapture\"\n>\n <div\n id=\"kwikid-camera-wrapper\"\n [class.fullscreen]=\"isShowCameraFullscreen\"\n >\n <kwikid-camera\n [type]=\"'CAPTURE'\"\n [image]=\"cameraCaptureImage\"\n [config]=\"cameraCaptureConfig\"\n (getImage)=\"handleGetImage($event)\"\n (onClickSave)=\"handleOnClickSaveCameraCapture($event)\"\n >\n <ng-container slot=\"header\">\n <div style=\"display: flex; width: 100%; max-width: 100%; padding: 0rem\">\n <div style=\"flex: 1; text-align: left\"> </div>\n <kwikui-button\n *ngIf=\"cameraCaptureConfig?.header?.title !== ''\"\n appearance=\"whiteblock\"\n [label]=\"cameraCaptureConfig?.header?.title\"\n shape=\"rounded\"\n style=\"\n flex: 1;\n width: 100%;\n min-width: max-content;\n text-align: center;\n margin: auto;\n \"\n size=\"s\"\n ></kwikui-button>\n <div\n style=\"\n flex: 1;\n text-align: right;\n display: flex;\n justify-content: flex-end;\n gap: 1rem;\n \"\n >\n <kwikui-button\n *ngIf=\"cameraCaptureConfig?.header?.isExpand\"\n id=\"kwikid-camera-header-enlarge-button\"\n appearance=\"whiteblock\"\n [icon]=\"\n isShowCameraFullscreen ? 'tuiIconMinimize2' : 'tuiIconMaximize2'\n \"\n shape=\"rounded\"\n size=\"s\"\n (click)=\"isShowCameraFullscreen = !isShowCameraFullscreen\"\n ></kwikui-button>\n <kwikui-button\n *ngIf=\"cameraCaptureConfig?.header?.isClose\"\n id=\"kwikid-camera-header-close-button\"\n appearance=\"whiteblock\"\n icon=\"tuiIconCloseLarge\"\n shape=\"rounded\"\n size=\"s\"\n (click)=\"handleOnClickCloseCamera($event)\"\n ></kwikui-button>\n </div>\n </div>\n </ng-container>\n </kwikid-camera>\n </div>\n</div>\n", styles: [".kwikid-form-container{width:100%;height:100%;margin:0 auto;display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center}.kwikid-form.show{width:100%;height:100%;padding:1rem;overflow-y:auto;display:flex;flex-direction:column;align-content:center;justify-content:flex-start;align-items:stretch}.kwikid-form.show>*:not(:last-child){margin-bottom:1rem}.kwikid-form-buttons{width:100%;bottom:0px;padding:1rem;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}.kwikid-form-buttons>*:not(:last-child){margin-right:1rem}.kwikid-form-buttons *{flex-grow:1}#uf-form-fields-header-container{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:flex-start;padding:1rem 1rem 0}#uf-form-fields-header-container>*:not(:last-child){margin-bottom:.5rem}#uf-form-fields-header-container #uf-header-logo{width:-moz-fit-content;width:fit-content;height:50px}#uf-form-fields-header-container #uf-form-fields-header-main{display:flex;flex-direction:row;align-content:center;justify-content:flex-start;align-items:center;width:100%}#uf-form-fields-header-container #uf-form-fields-header-main>*:not(:last-child){margin-right:.25rem}#uf-form-fields-header-container #uf-form-fields-header-main #uf-form-fields-header-right{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:flex-start}#uf-form-fields-header-container #uf-form-fields-header-main #uf-form-fields-header-right>*{margin-bottom:.5rem}#uf-form-fields-header-container hr{width:100%}#uf-form-fields-title{color:#000;font-size:1.75em;font-weight:bold}#uf-form-fields-steps{color:var(--color-on-secondary-container);font-size:1rem}.title{border-left:.25rem solid var(--tui-primary);padding:.75rem;font-size:1.4em;font-weight:bold;background-color:var(--tui-secondary);display:flex;flex-direction:row;align-content:center;justify-content:space-between;align-items:center}.title>*:not(:last-child){margin-right:.5rem}.title:not(:first-child){margin-top:.5rem}.title.hidden{display:none}.large-wrapper{width:100%;height:60px}.large-wrapper:first-child{margin-bottom:auto}.large-wrapper:last-child{margin-top:auto}.kwikid-form-container-loading{width:100%;height:100%;margin:0 auto;display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center;padding:1rem}.kwikid-form-container-loading>* :not(:last-child){margin-bottom:1rem}#field-error-notification{background-color:var(--tui-error-fill);color:#fff!important}#field-error-notification .t-top{color:#fff!important}#field-error-notification .t-close{color:#fff!important}.preview-container{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;align-content:center;height:calc(100vh - 3rem)}.preview-container>*:not(:last-child){margin-bottom:1rem}.preview-container .preview-html{flex-grow:1}.preview-container .preview-iframe-content{height:100%;flex-grow:1}.preview-container .preview-iframe-content .preview-iframe{width:100%;height:100%}.preview-container .preview-unavailable{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:center;color:#fff;font-size:1.2rem;top:50%;left:50%;width:100%;height:100vh}.preview-container .preview-unavailable>*:not(:last-child){margin-bottom:1rem}#kwikid-camera-container{width:100%;height:100%;position:fixed;top:50%;left:50%;background-color:#0000008f;transform:translate(-50%,-50%);z-index:100}#kwikid-camera-container #kwikid-camera-wrapper{width:min(80%);height:max(85%);box-shadow:#0000008f 0 22px 70px 4px;overflow:hidden;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:1rem;background-color:#000;transition:5s linear ease}#kwikid-camera-container #kwikid-camera-wrapper.fullscreen{width:100%;height:100%;border-radius:0;transition:5s linear ease}@media only screen and (max-width: 600px){#kwikid-camera-container #kwikid-camera-wrapper{width:100%;height:100%;border-radius:0;transition:5s linear ease}#kwikid-camera-container #kwikid-camera-wrapper #kwikid-camera-header-enlarge-button{display:none}}\n", "::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{border-radius:10px}::-webkit-scrollbar-thumb{background:lightgray;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:gray}\n"], components: [{ type: i2.KwikUIButtonComponent, selector: "kwikui-button", inputs: ["appearance", "class", "disabled", "icon", "iconRight", "id", "label", "shape", "showLoader", "size", "styles", "type"], outputs: ["onClick"] }, { type: i2.KwikUIMessagesComponent, selector: "kwikui-messages", inputs: ["id", "messages"] }, { type: i2.KwikUIInputComponent, selector: "kwikui-input", inputs: ["case", "disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "placeholder", "postfix", "prefix", "properties", "size", "type", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputEmailComponent, selector: "kwikui-input-email", inputs: ["case", "disabled", "domains", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputPasswordComponent, selector: "kwikui-input-password", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUITextareaComponent, selector: "kwikui-textarea", inputs: ["disabled", "focus", "formControl", "formControlName", "id", "invalid", "label", "placeholder", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUICheckboxComponent, selector: "kwikui-checkbox", inputs: ["contentAlign", "disabled", "focus", "formControl", "formControlName", "id", "invalid", "label", "placeholder", "properties", "size", "validators", "variant"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputNumberComponent, selector: "kwikui-input-number", inputs: ["decimal", "disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "max", "min", "placeholder", "postfix", "precision", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputDateComponent, selector: "kwikui-input-date", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "max", "maxCalculatedFromToday", "min", "minCalculatedFromToday", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputPhoneComponent, selector: "kwikui-input-phone", inputs: ["countryCode", "disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "phoneMaskAfterCountryCode", "placeholder", "postfix", "prefix", "properties", "removeCountryCodeFromValue", "size", "validators"], outputs: ["getKeyValue"] }, { type: i3.TuiLabelComponent, selector: "label[tuiLabel]", inputs: ["tuiLabel", "context"] }, { type: i2.KwikUIInputRadioComponent, selector: "kwikui-input-radio", inputs: ["disabled", "focus", "formControl", "formControlName", "id", "invalid", "items", "label", "orientation", "placeholder", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputSelectComponent, selector: "kwikui-input-select", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "options", "placeholder", "properties", "searchable", "size", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputSliderComponent, selector: "kwikui-input-slider", inputs: ["disabled", "focus", "formControl", "formControlName", "hintContent", "icon", "id", "invalid", "label", "max", "min", "placeholder", "postfix", "prefix", "properties", "quantum", "size", "steps", "type", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUIButtonApiCallComponent, selector: "kwikui-button-api-call", inputs: ["apiStatus", "class", "disabled", "id", "label", "shape", "showLoader", "size", "styles"], outputs: ["onClick"] }, { type: i2.KwikUIInputOtpComponent, selector: "kwikui-input-otp", inputs: ["disabled", "focus", "formControl", "formControlName", "id", "invalid", "label", "mask", "mode", "otpLength", "placeholder", "postfix", "prefix", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputAadhaarComponent, selector: "kwikui-input-aadhaar", inputs: ["disabled", "focus", "formControl", "formControlName", "id", "invalid", "label", "mask", "placeholder", "properties", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUIImageComponent, selector: "kwikui-image", inputs: ["altText", "class", "html", "id", "imageSrc", "imageType", "loadingType", "styles"], outputs: ["onClick"] }, { type: i2.KwikUIInputFilesComponent, selector: "kwikui-input-files", inputs: ["accept", "class", "disabled", "files", "formControl", "formControlName", "icon", "id", "label", "link", "maxFileSize", "multiple", "setFileTypesToForm", "showAddedFiles", "size", "styles", "validators"], outputs: ["getKeyValue", "getRemovedFile"] }, { type: i4.KwikUIInputCameraComponent, selector: "kwikui-input-camera", inputs: ["buttonText", "disabled", "focus", "formControl", "formControlName", "icon", "id", "invalid", "mediaFiles", "properties", "showMediaFiles", "size", "type", "validators"], outputs: ["onClick", "getRemovedFile"] }, { type: i2.KwikUIStarRatingComponent, selector: "kwikui-star-rating", inputs: ["color", "disabled", "focus", "formControl", "formControlName", "icon", "iconMarked", "id", "invalid", "label", "max", "min", "placeholder", "properties", "size", "validators"], outputs: ["getKeyValue"] }, { type: i2.KwikUILoaderComponent, selector: "kwikui-loader" }, { type: i5.TuiPushComponent, selector: "tui-push", inputs: ["heading", "type", "timestamp"], outputs: ["close"] }, { type: i3.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { type: i6.TuiPreviewComponent, selector: "tui-preview", inputs: ["zoomable", "rotatable"] }, { type: i6.TuiPreviewTitleComponent, selector: "tui-preview-title" }, { type: i3.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }, { type: i4.KwikIDCameraComponent, selector: "kwikid-camera", inputs: ["type", "config", "data", "image"], outputs: ["getImage", "onClickSave"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i8.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i7.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i8.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i5.TuiPushAlertDirective, selector: "[tuiPush]", inputs: ["tuiPush"] }, { type: i5.TuiPushDirective, selector: "tui-push" }, { type: i6.TuiPreviewActionDirective, selector: "[tuiPreviewAction]" }], pipes: { "styleSanitizer": i9.StyleSanitizerPipe, "kwikuiSafeHtml": i2.KwikUISafeHtmlPipe, "kwikuiSafeUrl": i2.KwikUISafeUrlPipe } });
|
|
1920
1926
|
__decorate([
|
|
1921
1927
|
logMethod
|
|
1922
1928
|
], KwikIDFormViewComponent.prototype, "ngOnInit", null);
|
|
@@ -2203,9 +2209,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
2203
2209
|
type: Output
|
|
2204
2210
|
}], onClickApiCall: [{
|
|
2205
2211
|
type: Output
|
|
2212
|
+
}], getLogs: [{
|
|
2213
|
+
type: Output
|
|
2206
2214
|
}], onActionShowPopupForm: [{
|
|
2207
2215
|
type: Output
|
|
2208
2216
|
}], onClickFormFieldButton: [{
|
|
2209
2217
|
type: Output
|
|
2210
2218
|
}], ngOnInit: [], ngAfterViewInit: [], ngOnChanges: [], initFormConfig: [], setFormFieldsFromFormConfig: [], setFormFieldGroupsFromFormConfig: [], setFormDataFromAllFormsData: [], handleConnectedElementFieldGroupActions: [], handleConnectedElementFieldGroup: [], handleConnectedElementFieldActions: [], handleConnectedElementFields: [], handleConnectedElements: [], handleRemovedFile: [], handleGetKeyValueFile: [], handleOnClickGetRemovedMediaFile: [], handleOnClickInputCamera: [], setImage: [], handleOnClickSaveCameraCapture: [], handleGetImage: [], handleOnClickCloseCamera: [], updateFiles: [], uploadFile: [], handleOnClickFormFieldButton: [], handleGetKeyValue: [], handleOnClickResetFormFields: [], handleFieldApiCall: [], handleApiCall: [], executeApiCall: [], isValidRequestHeadersAndBody: [], handleOnClickApiCall: [], handleOnClickGoBack: [], handleOnClickViewForms: [], handleOnClickSaveForm: [], toggleErrorNotification: [], fieldHide: [], fieldGroupHide: [], fieldShow: [], fieldGroupShow: [], fieldDisable: [], fieldGroupDisable: [], fieldEnable: [], fieldGroupEnable: [], fieldReset: [], fieldErrorShow: [], fieldErrorHide: [], fieldMessageShow: [], fieldMessageHide: [], setValue: [], setFieldDefaultValue: [], setApiStatus: [], setApiHeaderValue: [], setApiHeaderValidity: [], setApiBodyValue: [], setApiBodyValidity: [], setFieldValidity: [], setDropdownOptions: [], apiCall: [], fieldApiCall: [], fieldMultipleApiCalls: [], fieldMultipleApiCallsEnd: [], taskApiCall: [], taskMultipleApiCalls: [], taskMultipleApiCallsEnd: [], dialogShow: [], dialogHide: [], redirectToUrl: [], patchFieldControlValue: [], setFieldControlValue: [], patchFormGroup: [], isFieldValid: [], isFieldEnabled: [], getFormGroupRawValues: [], showPreview: [], showErrorPreview: [], showPopupForm: [], alertShow: [], takeActionOnFieldGroup: [], takeAction: [] } });
|
|
2211
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL3JlbmRlcmVyL2Zvcm0tdmlldy9mb3JtLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2Zvcm0tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBR04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsZUFBZSxFQUVmLGdCQUFnQixFQUNoQixlQUFlLEVBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBQ1YsSUFBSSxFQUNKLE1BQU0sRUFHTixVQUFVLEVBQ1Ysb0JBQW9CLEVBRXBCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsYUFBYSxFQUNiLFlBQVksRUFDWixlQUFlLEVBQ2YsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3JCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFD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LE1BWWhCLGdCQUFnQixNQVlWLFFBQVEsTUFpQlIsb0JBQW9CLE1Bd0NwQixZQUFZLE1Bd0JaLGlCQUFpQixNQXdCakIsb0JBQW9CLE1Bd0JwQixlQUFlLE1Bd0JmLGtCQUFrQixNQXdCbEIsZ0JBQWdCLE1BMEJoQixrQkFBa0IsTUF1Q2xCLE9BQU8sTUFxQlAsWUFBWSxNQVNaLHFCQUFxQixNQWdCckIsd0JBQXdCLE1BbUJ4QixXQUFXLE1BZVgsb0JBQW9CLE1BMkNwQix1QkFBdUIsTUF3QjdCLFVBQVUsTUFlVixVQUFVLE1BT1YsYUFBYSxNQXNCYixzQkFBc0IsTUFLdEIsb0JBQW9CLE1BS3BCLGNBQWMsTUFpQmQsWUFBWSxNQUtaLGNBQWMsTUFLZCxxQkFBcUIsTUFLckIsV0FBVyxNQWlGWCxnQkFBZ0IsTUFVaEIsYUFBYSxNQWNiLFNBQVMsTUFrQkgsc0JBQXNCLE1Bb0J0QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBUdWlQcmV2aWV3RGlhbG9nU2VydmljZSB9IGZyb20gXCJAdGFpZ2EtdWkvYWRkb24tcHJldmlld1wiO1xuaW1wb3J0IHtcbiAgVHVpQWxlcnRTZXJ2aWNlLFxuICBUdWlEaWFsb2dDb250ZXh0LFxuICBUdWlEaWFsb2dTZXJ2aWNlLFxuICBUdWlOb3RpZmljYXRpb25cbn0gZnJvbSBcIkB0YWlnYS11aS9jb3JlXCI7XG5pbXBvcnQgeyBUdWlQdXNoU2VydmljZSB9IGZyb20gXCJAdGFpZ2EtdWkva2l0XCI7XG5pbXBvcnQge1xuICBBY3Rpb24sXG4gIENvbmRpdGlvbixcbiAgRVNvdXJjZUtleSxcbiAgUnVsZSxcbiAgU291cmNlLFxuICBUQWN0aW9uLFxuICBUVmFsaWRhdGlvbixcbiAgVmFsaWRhdGlvbixcbiAgY2hlY2tPYmplY3RLZXlFeGlzdHMsXG4gIGNoZWNrT2JqZWN0UGF0aEV4aXN0cyxcbiAgZ2V0T2JqZWN0RGVlcENvcHksXG4gIGdldE9iamVjdFZhbHVlRnJvbVBhdGgsXG4gIGlzRW1wdHlTdHJpbmcsXG4gIGlzRW1wdHlWYWx1ZSxcbiAgaXNOb3RFbXB0eVZhbHVlLFxuICBpc051bGwsXG4gIGlzVW5kZWZpbmVkLFxuICBsb2dNZXRob2QsXG4gIG1lcmdlT2JqZWN0cyxcbiAgbWVyZ2VPYmplY3RzRGVlcCxcbiAgcmVwbGFjZVN0cmluZyxcbiAgc2V0VmFsdWVUb09iamVjdFBhdGhcbn0gZnJvbSBcImt3aWtpZC10b29sa2l0XCI7XG5pbXBvcnQgeyBLd2lrVUlMb2FkZXJTZXJ2aWNlIH0gZnJvbSBcImt3aWt1aVwiO1xuaW1wb3J0IHsgcGFpcndpc2UgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgeyBDb252ZXJ0ZXIgfSBmcm9tIFwiLi4vY29uZmlnLWNvbnZlcnRlci9jb25maWctY29udmVydGVyXCI7XG5pbXBvcnQgeyBGSUVMRF9QUk9QRVJUSUVTIH0gZnJvbSBcIi4uL2NvbmZpZy1jb252ZXJ0ZXIvY29uZmlnLWNvbnZlcnRlci5jb25zdGFudHNcIjtcbmltcG9ydCB7IEVGb3Jtc0xpc3RTdGF0dXMgfSBmcm9tIFwiLi4vZm9ybXMtbGlzdC9mb3Jtcy1saXN0LmRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyBFQWN0aW9uS2V5IH0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmFjdGlvbnMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHtcbiAgRUFwaVJlcXVlc3RVcmxUeXBlLFxuICBFQXBpU3RhdHVzVHlwZSxcbiAgVEFwaSxcbiAgVEFwaUVuZHBvaW50LFxuICBUQXBpUmVxdWVzdEJvZHlcbn0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmFwaXMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHtcbiAgRU1lc3NhZ2VUeXBlLFxuICBURm9ybVZpZXdHb0JhY2tNb2RlLFxuICBUTWVzc2FnZVxufSBmcm9tIFwiLi9kZWZpbml0aW9ucy9mb3JtLXZpZXcuY29tbW9ucy5kZWZpbml0aW9uXCI7XG5pbXBvcnQge1xuICBFRmllbGRUeXBlLFxuICBURmllbGRBcGlDYWxsLFxuICBURmllbGRUaXRsZVxufSBmcm9tIFwiLi9kZWZpbml0aW9ucy9mb3JtLXZpZXcuZmllbGRzLmRlZmluaXRpb25cIjtcbmltcG9ydCB7IEt3aWtJREZvcm1WaWV3U2VydmljZSB9IGZyb20gXCIuL2Zvcm0tdmlldy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBcGlzIH0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcuYXBpcy5oZWxwZXJcIjtcbmltcG9ydCB7XG4gIGFwcGVuZEZvcm1GaWVsZE1lc3NhZ2UsXG4gIGNvbnZlcnRGb3JtRmllbGRFbXB0eVZhbHVlVG9Ld2lrVUlGb3JtYXQsXG4gIGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvS3dpa1VJRm9ybWF0LFxuICBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0LFxuICBmaWx0ZXJEdXBsaWNhdGVzRmlsZXMsXG4gIGZpbHRlckR1cGxpY2F0ZXNNZWRpYUZpbGVzLFxuICBnZXRGb3JtRmllbGRCeUtleSxcbiAgZ2V0Rm9ybUZpZWxkSW5kZXhCeUtleSxcbiAgaGlnaGxpZ2h0Rm9ybUZpZWxkRXJyb3IsXG4gIHJlbW92ZUZvcm1GaWVsZE1lc3NhZ2UsXG4gIHNob3dGb3JtRmllbGRFcnJvclxufSBmcm9tIFwiLi9oZWxwZXJzL2Zvcm0tdmlldy5maWVsZHMuaGVscGVyXCI7XG5pbXBvcnQgeyBGb3JtVmFsaWRhdGlvbiB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmZvcm0tdmFsaWRhdGlvbnMuaGVscGVyXCI7XG5pbXBvcnQgeyBUYXNrcyB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LnRhc2tzLmhlbHBlclwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwia3dpa2lkLWZvcm0tdmlld1wiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2Zvcm0tdmlldy5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vZm9ybS12aWV3LmNvbXBvbmVudC5zY3NzXCIsIFwiLi4vc2hhcmVkLnNjc3NcIl0sXG4gIHByb3ZpZGVyczogW0t3aWtJREZvcm1WaWV3U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgS3dpa0lERm9ybVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKFwicHJldmlld1wiKVxuICByZWFkb25seSBwcmV2aWV3OiBUZW1wbGF0ZVJlZjxUdWlEaWFsb2dDb250ZXh0PHZvaWQ+PjtcblxuICBAVmlld0NoaWxkKFwiZGlhbG9nXCIpXG4gIHJlYWRvbmx5IGRpYWxvZzogVGVtcGxhdGVSZWY8VHVpRGlhbG9nQ29udGV4dDx2b2lkPj47XG5cbiAgQElucHV0KClcbiAgZm9ybUNvbmZpZzogYW55O1xuXG4gIEBJbnB1dCgpXG4gIGZvcm1EYXRhOiBhbnk7XG5cbiAgQElucHV0KClcbiAgaXNNb2JpbGVWaWV3OiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgYWxsRm9ybXNEYXRhOiBhbnk7XG5cbiAgQElucHV0KClcbiAgdXNlckNvbmZpZzogYW55O1xuXG4gIEBJbnB1dCgpXG4gIGFwaUNhbGxSZXNwb25zZTogYW55O1xuXG4gIEBJbnB1dCgpXG4gIGJ1dHRvbkNsaWNrUmVzcG9uc2U6IGFueTtcblxuICBASW5wdXQoKVxuICBwb3B1cEZvcm1DYWxsYmFjazogYW55ID0gdW5kZWZpbmVkO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrR29CYWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrVmlld0Zvcm1zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBnZXRVbnNhdmVkRGF0YVN0YXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrU2F2ZUZvcm06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2xpY2tBcGlDYWxsOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkFjdGlvblNob3dQb3B1cEZvcm06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2xpY2tGb3JtRmllbGRCdXR0b246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZmllbGRHcm91cHM6IGFueSA9IHt9O1xuICBmb3JtRmllbGRzOiBhbnlbXSA9IFtdO1xuICBwcmV2aW91c0Zvcm1EYXRhOiBhbnkgPSB7fTtcblxuICByZWFkb25seSBERUZBVUxUX0NBTUVSQV9DQVBUVVJFX0NPTkZJRzogYW55ID1cbiAgICBGSUVMRF9QUk9QRVJUSUVTLmNhcHR1cmUuY2FtZXJhQ29uZmlnO1xuICBpc1Nob3dDYW1lcmFDYXB0dXJlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU2hvd0NhbWVyYUZ1bGxzY3JlZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FtZXJhQ2FwdHVyZUZpZWxkS2V5OiBzdHJpbmcgPSBcIlwiO1xuICBjYW1lcmFDYXB0dXJlSW1hZ2U6IHN0cmluZyA9IFwiXCI7XG4gIGNhbWVyYUNhcHR1cmVDb25maWc6IGFueSA9IHRoaXMuREVGQVVMVF9DQU1FUkFfQ0FQVFVSRV9DT05GSUc7XG5cbiAgcHJldmlld1Byb3BlcnRpZXM6IGFueSA9IHtcbiAgICBodG1sOiB7XG4gICAgICBiZWZvcmU6IFwiXCIsXG4gICAgICBiZWZvcmVTdHlsZXM6IFwiXCIsXG4gICAgICBhZnRlcjogXCJcIixcbiAgICAgIGFmdGVyU3R5bGVzOiBcIlwiXG4gICAgfSxcbiAgICBpZnJhbWU6IHtcbiAgICAgIHNyYzogXCJcIixcbiAgICAgIHRpdGxlOiBcIlwiXG4gICAgfSxcbiAgICB0eXBlOiBcImRpYWxvZ1wiLFxuICAgIHNpemU6IFwiYXV0b1wiLFxuICAgIHBvcHVwRm9ybUtleTogXCJcIixcbiAgICB0aXRsZTogXCJcIixcbiAgICB1bmF2YWlsYWJsZTogZmFsc2VcbiAgfTtcblxuICBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgYXBpTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBiYWNrQnV0dG9uID0ge1xuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBzaG93TG9hZGVyOiBmYWxzZVxuICB9O1xuICB2aWV3Rm9ybXNCdXR0b24gPSB7XG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIHNob3dMb2FkZXI6IGZhbHNlXG4gIH07XG4gIHNhdmVGb3JtQnV0dG9uID0ge1xuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBzaG93TG9hZGVyOiBmYWxzZVxuICB9O1xuXG4gIGZpbGVzOiBhbnkgPSB7fTtcbiAgbWVkaWFGaWxlczogYW55ID0ge307XG5cbiAgc3RvcFRhc2tFeGVjdXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgd2FpdGluZ0ZvckNoYW5nZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcG9wdXBGb3JtQ29uZmlnOiBhbnkgPSB1bmRlZmluZWQ7XG4gIHBvcHVwRm9ybURhdGE6IGFueSA9IHt9O1xuICB0YXNrRGF0YTogYW55ID0ge307XG5cbiAgcHJldmlld0RpYWxvZ1JlZjogYW55O1xuXG4gIGZvcm1Hcm91cDogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBmb3JtVmlld1NlcnZpY2U6IEt3aWtJREZvcm1WaWV3U2VydmljZSxcbiAgICBASW5qZWN0KFR1aVB1c2hTZXJ2aWNlKVxuICAgIHByb3RlY3RlZCByZWFkb25seSBwdXNoOiBUdWlQdXNoU2VydmljZSxcbiAgICBASW5qZWN0KFR1aUFsZXJ0U2VydmljZSlcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWxlcnRTZXJ2aWNlOiBUdWlBbGVydFNlcnZpY2UsXG4gICAgQEluamVjdChUdWlQcmV2aWV3RGlhbG9nU2VydmljZSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByZXZpZXdEaWFsb2dTZXJ2aWNlOiBUdWlQcmV2aWV3RGlhbG9nU2VydmljZSxcbiAgICBASW5qZWN0KFR1aURpYWxvZ1NlcnZpY2UpXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlOiBUdWlEaWFsb2dTZXJ2aWNlLFxuICAgIHB1YmxpYyBsb2FkZXJTZXJ2aWNlOiBLd2lrVUlMb2FkZXJTZXJ2aWNlXG4gICkge31cblxuICBAbG9nTWV0aG9kXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmluaXRGb3JtQ29uZmlnKHRoaXMuZm9ybUNvbmZpZyk7XG5cbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge31cblxuICBAbG9nTWV0aG9kXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCB2ZXJpZnlDaGFuZ2UgPSAoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBjaGVja09iamVjdEtleUV4aXN0cyhjaGFuZ2VzLCBrZXkpICYmICFjaGFuZ2VzW2tleV0uZmlyc3RDaGFuZ2U7XG4gICAgfTtcbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiZm9ybURhdGFcIikpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hhbmdlcy5mb3JtRGF0YS5jdXJyZW50VmFsdWUsIFwiZGF0YVwiKSAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhjaGFuZ2VzLmZvcm1EYXRhLmN1cnJlbnRWYWx1ZSwgXCJleHRlbmRlZERhdGFcIilcbiAgICAgICkge1xuICAgICAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgLi4uY2hhbmdlcy5mb3JtRGF0YS5jdXJyZW50VmFsdWVbXCJkYXRhXCJdXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgLi4uY2hhbmdlcy5mb3JtRGF0YS5jdXJyZW50VmFsdWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcInBvcHVwRm9ybUNhbGxiYWNrXCIpKSB7XG4gICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlKSkge1xuICAgICAgICBjb25zdCBwb3B1cEZvcm1EYXRhID1cbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhcbiAgICAgICAgICAgIGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlLnBvcHVwRm9ybURhdGEsXG4gICAgICAgICAgICBcImRhdGFcIlxuICAgICAgICAgICkgJiZcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhcbiAgICAgICAgICAgIGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlLnBvcHVwRm9ybURhdGEsXG4gICAgICAgICAgICBcImV4dGVuZGVkRGF0YVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgPyBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZS5wb3B1cEZvcm1EYXRhW1wiZGF0YVwiXVxuICAgICAgICAgICAgOiBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZS5wb3B1cEZvcm1EYXRhO1xuXG4gICAgICAgIGNvbnN0IHBvcHVwRm9ybUNvbmZpZyA9XG4gICAgICAgICAgY2hhbmdlcy5wb3B1cEZvcm1DYWxsYmFjay5jdXJyZW50VmFsdWUucG9wdXBGb3JtQ29uZmlnO1xuXG4gICAgICAgIHRoaXMucG9wdXBGb3JtRGF0YSA9IG1lcmdlT2JqZWN0cyh0aGlzLnBvcHVwRm9ybURhdGEsIHtcbiAgICAgICAgICBbcG9wdXBGb3JtQ29uZmlnLmtleV06IHBvcHVwRm9ybURhdGFcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IG1lcmdlT2JqZWN0cyh0aGlzLmZvcm1EYXRhLCB0aGlzLnBvcHVwRm9ybURhdGEpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhcbiAgICAgICAgICAgIGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgXCJzdG9wVGFza0V4ZWN1dGlvblwiXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID1cbiAgICAgICAgICAgIGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlLnN0b3BUYXNrRXhlY3V0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJpc01vYmlsZVZpZXdcIikpIHtcbiAgICAgIHRoaXMuaXNNb2JpbGVWaWV3ID0gY2hhbmdlcy5pc01vYmlsZVZpZXcuY3VycmVudFZhbHVlO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiYXBpQ2FsbFJlc3BvbnNlXCIpKSB7XG4gICAgICB0aGlzLmFwaUNhbGxSZXNwb25zZSA9IGNoYW5nZXMuYXBpQ2FsbFJlc3BvbnNlLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXkpO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IHRoaXMuYXBpQ2FsbFJlc3BvbnNlPy5yZXNwb25zZTtcblxuICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgIGNhc2UgRUZpZWxkVHlwZS5GSUxFOlxuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZEZpbGUgPSBnZXRPYmplY3REZWVwQ29weSh7XG4gICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcbiAgICAgICAgICAgICAgLi4ucmVzcG9uc2VcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpbGVzKHVwZGF0ZWRGaWxlLCBcIk5PUk1BTFwiLCB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkRmlsZSA9IGdldE9iamVjdERlZXBDb3B5KHtcbiAgICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxuICAgICAgICAgICAgICAuLi50aGlzLmFwaUNhbGxSZXNwb25zZT8ucGF5bG9hZD8ubWV0YWRhdGFcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpbGVzKHVwZGF0ZWRGaWxlLCBcIkVSUk9SXCIsIHRoaXMuYXBpQ2FsbFJlc3BvbnNlLmtleSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuQ0FQVFVSRTpcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhQ2FwdHVyZUltYWdlID0gXCJcIjtcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhQ2FwdHVyZUZpZWxkS2V5ID0gXCJcIjtcbiAgICAgICAgICAgIHRoaXMuaXNTaG93Q2FtZXJhQ2FwdHVyZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCBpbWFnZSA9IHJlc3BvbnNlPy5pbWFnZV91cmw7XG5cbiAgICAgICAgICAgIHRoaXMubWVkaWFGaWxlc1t0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXldID0gZ2V0T2JqZWN0RGVlcENvcHkoW1xuICAgICAgICAgICAgICBpbWFnZVxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1t0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXldLnNldFZhbHVlKFxuICAgICAgICAgICAgICBnZXRPYmplY3REZWVwQ29weShbaW1hZ2UsIFwiXCIsIG51bGxdKSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW1xuICAgICAgICAgICAgICB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXlcbiAgICAgICAgICAgIF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRmlsZSBVcGxvYWQgZm9yIEltYWdlIEZhaWxlZFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJidXR0b25DbGlja1Jlc3BvbnNlXCIpKSB7XG4gICAgICB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UgPSBjaGFuZ2VzLmJ1dHRvbkNsaWNrUmVzcG9uc2UuY3VycmVudFZhbHVlO1xuXG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLCBcImtleVwiKSkge1xuICAgICAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleShcbiAgICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgdGhpcy5idXR0b25DbGlja1Jlc3BvbnNlPy5rZXlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLCBcImRlZmF1bHRcIikpIHtcbiAgICAgICAgICBmaWVsZC5kZWZhdWx0ID0gZ2V0T2JqZWN0RGVlcENvcHkodGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLmRlZmF1bHQpO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2VbXCJkZWZhdWx0XCJdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UsIFwibWVzc2FnZXNcIikpIHtcbiAgICAgICAgICBmaWVsZC5tZXNzYWdlcyA9IGdldE9iamVjdERlZXBDb3B5KHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZS5tZXNzYWdlcyk7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZVtcIm1lc3NhZ2VzXCJdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UsIFwidmFsaWRhdGlvblwiKSkge1xuICAgICAgICAgIGZpZWxkLnZhbGlkYXRpb24gPSBnZXRPYmplY3REZWVwQ29weShcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZS52YWxpZGF0aW9uXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5idXR0b25DbGlja1Jlc3BvbnNlW1widmFsaWRhdGlvblwiXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpZWxkID0gZ2V0T2JqZWN0RGVlcENvcHkoXG4gICAgICAgICAgbWVyZ2VPYmplY3RzKGZpZWxkLCB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRpb25cIikpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC52YWxpZGF0aW9uLCBcInRyaWdnZXJzXCIpICYmXG4gICAgICAgICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fUkVTUE9OU0VcIilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0gbmV3IFZhbGlkYXRpb24oXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGF3YWl0IHZhbGlkYXRpb25zLnZhbGlkYXRlKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImFsbEZvcm1zRGF0YVwiKSkge1xuICAgICAgdGhpcy5hbGxGb3Jtc0RhdGEgPSBjaGFuZ2VzLmFsbEZvcm1zRGF0YS5jdXJyZW50VmFsdWU7XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJmb3JtQ29uZmlnXCIpKSB7XG4gICAgICB0aGlzLmZvcm1Db25maWcgPSBjaGFuZ2VzLmZvcm1Db25maWcuY3VycmVudFZhbHVlO1xuXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXRGb3JtQ29uZmlnKHRoaXMuZm9ybUNvbmZpZyk7XG4gICAgICB9KSgpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaW5pdEZvcm1Db25maWcoZm9ybUNvbmZpZzogYW55KSB7XG4gICAgZm9ybUNvbmZpZyA9IG5ldyBDb252ZXJ0ZXIoKS5jb252ZXJ0Rm9ybUNvbmZpZyhmb3JtQ29uZmlnKTtcblxuICAgIGZvcm1Db25maWcgPSBuZXcgQ29udmVydGVyKCkudXBkYXRlRm9ybUNvbmZpZ1Byb3BlcnRpZXMoZm9ybUNvbmZpZyk7XG5cbiAgICB0aGlzLnNldEZvcm1GaWVsZHNGcm9tRm9ybUNvbmZpZyhmb3JtQ29uZmlnKTtcblxuICAgIHRoaXMuc2V0Rm9ybUZpZWxkR3JvdXBzRnJvbUZvcm1Db25maWcoZm9ybUNvbmZpZyk7XG5cbiAgICB0aGlzLnNldEZvcm1EYXRhRnJvbUFsbEZvcm1zRGF0YSgpO1xuXG4gICAgLyoqXG4gICAgICogUFJFIEZvcm0gVGFza3NcbiAgICAgKiAxLiBBUEkgQ2FsbHMuXG4gICAgICogMi4gQWx0ZXIgRGF0YSBTdHJ1Y3R1cmUuXG4gICAgICogMy4gQWx0ZXIgRm9ybSBDb25maWcuXG4gICAgICovXG4gICAgaWYgKFxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5mb3JtQ29uZmlnLCBcInRhc2tzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmZvcm1Db25maWcudGFza3MsIFwicHJlXCIpXG4gICAgKSB7XG4gICAgICBmb3IgKGxldCBwcmVUYXNrIG9mIHRoaXMuZm9ybUNvbmZpZy50YXNrcy5wcmUpIHtcbiAgICAgICAgY29uc3QgdGFzayA9IG5ldyBUYXNrcyhcbiAgICAgICAgICBwcmVUYXNrLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEZPUk1fQ09ORklHOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zdG9wVGFza0V4ZWN1dGlvbiA9IGZhbHNlO1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMocHJlVGFzaywgXCJ3YWl0XCIpKSB7XG4gICAgICAgICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IHByZVRhc2sud2FpdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0YXNrLmV4ZWN1dGUoKTtcblxuICAgICAgICAvLyBXYWl0IGZvciBuZ09uQ2hhbmdlcyB0byBiZSBjYWxsZWQgYmVmb3JlIGNvbnRpbnVpbmcgdG8gdGhlIG5leHQgdGFza1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMud2FpdGluZ0ZvckNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RvcFRhc2tFeGVjdXRpb24pIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmZvcm1EYXRhID0gbWVyZ2VPYmplY3RzKHRoaXMuZm9ybURhdGEsIHRoaXMucG9wdXBGb3JtRGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RvcFRhc2tFeGVjdXRpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm1Hcm91cCA9IGF3YWl0IHRoaXMuZm9ybVZpZXdTZXJ2aWNlLmNyZWF0ZUZvcm1Hcm91cChcbiAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgIHRoaXMuZm9ybURhdGEsXG4gICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEZvciBzb21lIHJlYXNvbiBpZiB0aGVpciBhIGZpZWxkIG9mIHR5cGUgJ0lNQUdFJyB0aGVuXG4gICAgICogZm9ybURhdGEgaXMgYWRkaW5nIGEgJ3VuZGVmaW5lZCcga2V5IHdpdGggbGFzdCBpbWFnZSdzIHZhbHVlIGZyb20gdGhlIGFycmF5LlxuICAgICAqIEJlbG93IHBpZWNlIG9mIGNvZGUgaXMgdG8gcmVtb3ZlIHRoYXQgcmVkdW5kZW50IHZhbHVlIGZyb20gZm9ybURhdGEuXG4gICAgICovXG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuZm9ybURhdGEsIFwidW5kZWZpbmVkXCIpKSB7XG4gICAgICBkZWxldGUgdGhpcy5mb3JtRGF0YVtcInVuZGVmaW5lZFwiXTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZvcm1GaWVsZHMpIHtcbiAgICAgIGlmIChmaWVsZC5pc0Zvcm1FbGVtZW50KSB7XG4gICAgICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgW2ZpZWxkLmtleV06IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVcbiAgICAgICAgICApXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIFtmaWVsZC5rZXldOiBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgICAgKVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkZJTEUpIHtcbiAgICAgICAgICB0aGlzLmZpbGVzW2ZpZWxkLmtleV0gPSB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkNBUFRVUkUpIHtcbiAgICAgICAgICB0aGlzLmNhbWVyYUNhcHR1cmVGaWVsZEtleSA9IFwiXCI7XG4gICAgICAgICAgdGhpcy5jYW1lcmFDYXB0dXJlSW1hZ2UgPSBcIlwiO1xuICAgICAgICAgIHRoaXMubWVkaWFGaWxlc1tmaWVsZC5rZXldID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWVDaGFuZ2VzXG4gICAgICAgICAgLnBpcGUocGFpcndpc2UoKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChbcHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0ge1xuICAgICAgICAgICAgICAuLi50aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAgICAgLi4udGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgW2ZpZWxkLmtleV06IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkZJTEUpIHtcbiAgICAgICAgICAgICAgdGhpcy5maWxlc1tmaWVsZC5rZXldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuQ0FQVFVSRSkge1xuICAgICAgICAgICAgICB0aGlzLmNhbWVyYUNhcHR1cmVGaWVsZEtleSA9IFwiXCI7XG4gICAgICAgICAgICAgIHRoaXMuY2FtZXJhQ2FwdHVyZUltYWdlID0gXCJcIjtcbiAgICAgICAgICAgICAgdGhpcy5tZWRpYUZpbGVzW2ZpZWxkLmtleV0gPSBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5mb3JtRmllbGRzKSB7XG4gICAgICBpZiAoZmllbGQuaXNGb3JtRWxlbWVudCkge1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSkge1xuICAgICAgICAgIGlmIChmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fSU5JVFwiKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSBuZXcgVmFsaWRhdGlvbihcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXdhaXQgdmFsaWRhdGlvbnMudmFsaWRhdGUoZmllbGQudmFsaWRhdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJPTl9JTklUXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNldEZvcm1GaWVsZHNGcm9tRm9ybUNvbmZpZyhmb3JtQ29uZmlnOiBhbnkpIHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybUNvbmZpZywgXCJmaWVsZHNcIikpIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IGZvcm1Db25maWcuZmllbGRzO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmb3JtQ29uZmlnLCBcIm11bHRpRm9ybVwiKSAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybUNvbmZpZy5tdWx0aUZvcm0sIFwiZmllbGRzXCIpXG4gICAgKSB7XG4gICAgICB0aGlzLmZvcm1GaWVsZHMgPSBmb3JtQ29uZmlnLm11bHRpRm9ybS5maWVsZHM7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzZXRGb3JtRmllbGRHcm91cHNGcm9tRm9ybUNvbmZpZyhmb3JtQ29uZmlnOiBhbnkpIHtcbiAgICB0aGlzLmZpZWxkR3JvdXBzID0gZm9ybUNvbmZpZy5maWVsZEdyb3VwcztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgc2V0Rm9ybURhdGFGcm9tQWxsRm9ybXNEYXRhKCkge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmFsbEZvcm1zRGF0YSwgdGhpcy5mb3JtQ29uZmlnLmtleSkpIHtcbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5hbGxGb3Jtc0RhdGFbdGhpcy5mb3JtQ29uZmlnLmtleV07XG5cbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybURhdGEsIFwiZGF0YVwiKSAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmb3JtRGF0YSwgXCJleHRlbmRlZERhdGFcIilcbiAgICAgICkge1xuICAgICAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgLi4uZm9ybURhdGFbXCJkYXRhXCJdXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgLi4uZm9ybURhdGFcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXBBY3Rpb25zKFxuICAgIGNoaWxkRmllbGRHcm91cENvbmZpZzogYW55LFxuICAgIHBhcmVudEZpZWxkOiBhbnlcbiAgKSB7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNoaWxkRmllbGRHcm91cENvbmZpZywgXCJydWxlc1wiKSkge1xuICAgICAgY29uc3QgcnVsZXNNYXBwaW5nID0gbmV3IFJ1bGUoY2hpbGRGaWVsZEdyb3VwQ29uZmlnLnJ1bGVzLCB7XG4gICAgICAgIEZJRUxEX0NPTkZJRzogcGFyZW50RmllbGQsXG4gICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICB9KS5tYXBwaW5nKCk7XG5cbiAgICAgIGZvciAobGV0IGFjdGlvbiBvZiBjaGlsZEZpZWxkR3JvdXBDb25maWcuYWN0aW9ucykge1xuICAgICAgICBjb25zdCBjb25kaXRpb25TdWNjZXNzID0gbmV3IENvbmRpdGlvbihcbiAgICAgICAgICBhY3Rpb24uY29uZGl0aW9uLFxuICAgICAgICAgIHJ1bGVzTWFwcGluZ1xuICAgICAgICApLmV2YWx1YXRlKCk7XG5cbiAgICAgICAgaWYgKGNvbmRpdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIHJ1bGVzTWFwcGluZyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgRklFTERfQ09ORklHOiBwYXJlbnRGaWVsZCxcbiAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLnRha2VBY3Rpb25PbkZpZWxkR3JvdXAuYmluZCh0aGlzKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXAoXG4gICAgY3VycmVudEZpZWxkOiBhbnksXG4gICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZzogYW55LFxuICAgIGV2ZW50VHlwZTogc3RyaW5nXG4gICkge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLCBcInRyaWdnZXJzXCIpKSB7XG4gICAgICBpZiAoY29ubmVjdGVkRmllbGRHcm91cENvbmZpZy50cmlnZ2Vycy5pbmNsdWRlcyhldmVudFR5cGUpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXBBY3Rpb25zKFxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsXG4gICAgICAgICAgY3VycmVudEZpZWxkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRBY3Rpb25zKFxuICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnOiBhbnksXG4gICAgY29ubmVjdGVkRmllbGQ6IGFueVxuICApIHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY29ubmVjdGVkRmllbGRDb25maWcsIFwicnVsZXNcIikpIHtcbiAgICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlKGNvbm5lY3RlZEZpZWxkQ29uZmlnLnJ1bGVzLCB7XG4gICAgICAgIEZJRUxEX0NPTkZJRzogY29ubmVjdGVkRmllbGQsXG4gICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICB9KS5tYXBwaW5nKCk7XG5cbiAgICAgIGZvciAobGV0IGFjdGlvbiBvZiBjb25uZWN0ZWRGaWVsZENvbmZpZy5hY3Rpb25zKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvblN1Y2Nlc3MgPSBuZXcgQ29uZGl0aW9uKFxuICAgICAgICAgIGFjdGlvbi5jb25kaXRpb24sXG4gICAgICAgICAgcnVsZXNNYXBwaW5nXG4gICAgICAgICkuZXZhbHVhdGUoKTtcblxuICAgICAgICBpZiAoY29uZGl0aW9uU3VjY2Vzcykge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9uKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgcnVsZXNNYXBwaW5nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IGNvbm5lY3RlZEZpZWxkLFxuICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbm5lY3RlZEZpZWxkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRzKFxuICAgIGN1cnJlbnRGaWVsZDogYW55LFxuICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnOiBhbnksXG4gICAgZXZlbnRUeXBlOiBzdHJpbmcsXG4gICAgbmVzdGVkOiBzdHJpbmdcbiAgKSB7XG4gICAgbGV0IGNvbm5lY3RlZEZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkoXG4gICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZ1tcImtleVwiXVxuICAgICk7XG5cbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY29ubmVjdGVkRmllbGRDb25maWcsIFwidHJpZ2dlcnNcIikpIHtcbiAgICAgIGlmIChjb25uZWN0ZWRGaWVsZENvbmZpZy50cmlnZ2Vycy5pbmNsdWRlcyhldmVudFR5cGUpKSB7XG4gICAgICAgIGNvbm5lY3RlZEZpZWxkID0gYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRBY3Rpb25zKFxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnLFxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhjb25uZWN0ZWRGaWVsZENvbmZpZywgXCJoYW5kbGVOZXN0ZWRGaWVsZHNcIikpIHtcbiAgICAgIGlmIChjb25uZWN0ZWRGaWVsZENvbmZpZy5oYW5kbGVOZXN0ZWRGaWVsZHMpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAgICB7IGtleTogY29ubmVjdGVkRmllbGRDb25maWcua2V5IH0sXG4gICAgICAgICAgZXZlbnRUeXBlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50RmllbGQ7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKGU6IGFueSwgZXZlbnRUeXBlOiBzdHJpbmcpIHtcbiAgICBsZXQgY3VycmVudEZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBlLmtleSk7XG5cbiAgICBpZiAoY3VycmVudEZpZWxkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhjdXJyZW50RmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIikpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKFxuICAgICAgICAgICAgY3VycmVudEZpZWxkLmNvbm5lY3RlZEVsZW1lbnRzLFxuICAgICAgICAgICAgXCJjb25uZWN0ZWRGaWVsZEdyb3Vwc1wiXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgY29ubmVjdGVkRmllbGRHcm91cHMgPVxuICAgICAgICAgICAgY3VycmVudEZpZWxkLmNvbm5lY3RlZEVsZW1lbnRzLmNvbm5lY3RlZEZpZWxkR3JvdXBzO1xuICAgICAgICAgIGZvciAobGV0IGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcgb2YgY29ubmVjdGVkRmllbGRHcm91cHMpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXAoXG4gICAgICAgICAgICAgIGN1cnJlbnRGaWVsZCxcbiAgICAgICAgICAgICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZyxcbiAgICAgICAgICAgICAgZXZlbnRUeXBlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjdXJyZW50RmllbGQuY29ubmVjdGVkRWxlbWVudHMsXG4gICAgICAgICAgICBcImNvbm5lY3RlZEZpZWxkc1wiXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgY29ubmVjdGVkRmllbGRzID0gY3VycmVudEZpZWxkLmNvbm5lY3RlZEVsZW1lbnRzLmNvbm5lY3RlZEZpZWxkcztcbiAgICAgICAgICBmb3IgKGxldCBjb25uZWN0ZWRGaWVsZENvbmZpZyBvZiBjb25uZWN0ZWRGaWVsZHMpIHtcbiAgICAgICAgICAgIGN1cnJlbnRGaWVsZCA9IGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkcyhcbiAgICAgICAgICAgICAgY3VycmVudEZpZWxkLFxuICAgICAgICAgICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZyxcbiAgICAgICAgICAgICAgZXZlbnRUeXBlLFxuICAgICAgICAgICAgICBldmVudFR5cGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZpZWxkIGZvciB0aGUgZ2l2ZW4ga2V5IFsnJHtlLmtleX0nXSBpcyBub3QgZm91bmQgd2l0aCBldmVudFR5cGU6ICcke2V2ZW50VHlwZX0nLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVSZW1vdmVkRmlsZShlOiBhbnkpIHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGlmICh0aGlzLmZvcm1Hcm91cFtcImNvbnRyb2xzXCJdW2Uua2V5XS5lbmFibGVkKSB7XG4gICAgICB0aGlzLmZpbGVzW2Uua2V5XSA9IGUuZmlsZXM7XG5cbiAgICAgIHRoaXMuZm9ybURhdGFbZS5rZXldID0gZmlsdGVyRHVwbGljYXRlc0ZpbGVzKHRoaXMuZmlsZXNbZS5rZXldKTtcblxuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcbiAgICAgICAge1xuICAgICAgICAgIFtlLmtleV06IHRoaXMuZm9ybURhdGFbZS5rZXldXG4gICAgICAgIH0sXG4gICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVHZXRLZXlWYWx1ZUZpbGUoZTogYW55KSB7XG4gICAgdGhpcy5zaG93QXBpTG9hZGVyKCk7XG5cbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZS5rZXkpO1xuXG4gICAgbGV0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoZS52YWx1ZSkgPyBlLnZhbHVlIDogW2UudmFsdWVdO1xuXG4gICAgaWYgKFxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwicHJvcGVydGllc1wiKSAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQucHJvcGVydGllcywgXCJ1cGxvYWRGaWxlVG9TZXJ2ZXJcIikgJiZcbiAgICAgIGZpZWxkLnByb3BlcnRpZXMudXBsb2FkRmlsZVRvU2VydmVyXG4gICAgKSB7XG4gICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZEZpbGUoZmllbGQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgdGhpcy51cGRhdGVGaWxlcyh2YWx1ZSwgXCJMT0FESU5HXCIsIGUua2V5KTtcblxuICAgICAgICBjb25zdCB1cGRhdGVkRmlsZSA9IGdldE9iamVjdERlZXBDb3B5KFxuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxuICAgICAgICAgICAgICAgIG5hbWU6IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogdmFsdWUudHlwZSxcbiAgICAgICAgICAgICAgICBzaXplOiB2YWx1ZS5zaXplLFxuICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogdmFsdWUubGFzdE1vZGlmaWVkLFxuICAgICAgICAgICAgICAgIHdlYmtpdFJlbGF0aXZlUGF0aDogdmFsdWUud2Via2l0UmVsYXRpdmVQYXRoXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgMzAwKTsgLy8gMTAwMCBtcyA9IDEgc2VjXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUZpbGVzKHVwZGF0ZWRGaWxlLCBcIk5PUk1BTFwiLCBlLmtleSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBNZXRob2RzIGZvciBDYW1lcmEgcmVsYXRlZCBmaWVsZHMgbGlrZSAnQ0FQVFVSRScgKi9cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrR2V0UmVtb3ZlZE1lZGlhRmlsZShlOiBhbnkpIHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGlmICh0aGlzLmZvcm1Hcm91cFtcImNvbnRyb2xzXCJdW2Uua2V5XS5lbmFibGVkKSB7XG4gICAgICB0aGlzLmNhbWVyYUNhcHR1cmVGaWVsZEtleSA9IFwiXCI7XG4gICAgICB0aGlzLmNhbWVyYUNhcHR1cmVJbWFnZSA9IFwiXCI7XG5cbiAgICAgIHRoaXMubWVkaWFGaWxlc1tlLmtleV0gPSBlLm1lZGlhRmlsZXM7XG5cbiAgICAgIHRoaXMuZm9ybURhdGFbZS5rZXldID0gZmlsdGVyRHVwbGljYXRlc01lZGlhRmlsZXModGhpcy5tZWRpYUZpbGVzW2Uua2V5XSk7XG5cbiAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICAgIHtcbiAgICAgICAgICBbZS5rZXldOiB0aGlzLmZvcm1EYXRhW2Uua2V5XVxuICAgICAgICB9LFxuICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0lucHV0Q2FtZXJhKGU6IGFueSwgZmllbGQ6IGFueSkge1xuICAgIGNvbnN0IGZpZWxkS2V5ID0gZmllbGQua2V5O1xuICAgIGNvbnN0IGZpZWxkQ2FtZXJhQ2FwdHVyZUNvbmZpZyA9IGZpZWxkPy5wcm9wZXJ0aWVzPy5jYW1lcmFDb25maWcgPz8ge307XG5cbiAgICB0aGlzLmlzU2hvd0NhbWVyYUNhcHR1cmUgPSB0cnVlO1xuICAgIHRoaXMuY2FtZXJhQ2FwdHVyZUZpZWxkS2V5ID0gZmllbGRLZXk7XG5cbiAgICB0aGlzLmNhbWVyYUNhcHR1cmVDb25maWcgPSBtZXJnZU9iamVjdHNEZWVwKFtcbiAgICAgIHRoaXMuREVGQVVMVF9DQU1FUkFfQ0FQVFVSRV9DT05GSUcsXG4gICAgICBmaWVsZENhbWVyYUNhcHR1cmVDb25maWdcbiAgICBdKTtcbiAgfVxuXG4gIC8qKiBLd2lrSUQgQ2FtZXJhIE1ldGhvZHMgKi9cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRJbWFnZShpbWFnZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleShcbiAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgIHRoaXMuY2FtZXJhQ2FwdHVyZUZpZWxkS2V5XG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInByb3BlcnRpZXNcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLnByb3BlcnRpZXMsIFwidXBsb2FkRmlsZVRvU2VydmVyXCIpICYmXG4gICAgICBmaWVsZC5wcm9wZXJ0aWVzLnVwbG9hZEZpbGVUb1NlcnZlclxuICAgICkge1xuICAgICAgYXdhaXQgdGhpcy51cGxvYWRGaWxlKGZpZWxkLCBpbWFnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FtZXJhQ2FwdHVyZUltYWdlID0gXCJcIjtcbiAgICAgIHRoaXMuY2FtZXJhQ2FwdHVyZUZpZWxkS2V5ID0gXCJcIjtcbiAgICAgIHRoaXMuaXNTaG93Q2FtZXJhQ2FwdHVyZSA9IGZhbHNlO1xuXG4gICAgICB0aGlzLm1lZGlhRmlsZXNbZmllbGQua2V5XSA9IGdldE9iamVjdERlZXBDb3B5KFtpbWFnZV0pO1xuXG4gICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnNldFZhbHVlKGdldE9iamVjdERlZXBDb3B5KFtpbWFnZV0pLCB7XG4gICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrU2F2ZUNhbWVyYUNhcHR1cmUoZTogYW55KSB7XG4gICAgdGhpcy5zaG93QXBpTG9hZGVyKCk7XG5cbiAgICB0aGlzLmNhbWVyYUNhcHR1cmVJbWFnZSA9IFwiXCI7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGltYWdlID0gZT8ub3JpZ2luYWxJbWFnZTtcblxuICAgICAgdGhpcy5zZXRJbWFnZShpbWFnZSk7XG5cbiAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZUdldEltYWdlKGU6IGFueSkge1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgdGhpcy5jYW1lcmFDYXB0dXJlSW1hZ2UgPSBcIlwiO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvKipcbiAgICAgICAqIFByaW9yaXR5IG9mIEltYWdlIHRvIFNldCBmb3IgQ29uZmlnIEJhc2VkXG4gICAgICAgKiAxLiBNYXNrZWRcbiAgICAgICAqIDIuIENyb3BwZWRcbiAgICAgICAqIDMuIE9yaWdpbmFsXG4gICAgICAgKlxuICAgICAgICogSWYgbm8gbWFza2VkIG9yIGNyb3BwZWQgaW1hZ2UgaXMgYXZhaWxhYmxlIHRoZW4gZGlyZWN0bHkgc2V0IE9yaWdpbmFsIEltYWdlXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkoXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgdGhpcy5jYW1lcmFDYXB0dXJlRmllbGRLZXlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGltYWdlID0gZmllbGQucHJvcGVydGllcz8uaXNNYXNrZWRJbWFnZVxuICAgICAgICA/IGU/Lm1hc2tlZEltYWdlID8/IGU/Lm9yaWdpbmFsSW1hZ2VcbiAgICAgICAgOiBmaWVsZC5wcm9wZXJ0aWVzPy5pc0Nyb3BwZWRJbWFnZVxuICAgICAgICA/IGU/LmNyb3BwZWRJbWFnZSA/PyBlPy5vcmlnaW5hbEltYWdlXG4gICAgICAgIDogZT8ub3JpZ2luYWxJbWFnZTtcblxuICAgICAgY29uc3QgaXNTaG93SW1hZ2VQcmV2aWV3ID1cbiAgICAgICAgdGhpcy5jYW1lcmFDYXB0dXJlQ29uZmlnPy5vdGhlcnM/LnByZXZpZXc/LnNob3c7XG5cbiAgICAgIGlmIChpc1Nob3dJbWFnZVByZXZpZXcpIHtcbiAgICAgICAgdGhpcy5jYW1lcmFDYXB0dXJlSW1hZ2UgPSBpbWFnZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0SW1hZ2UoaW1hZ2UpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICB9LCA1MDApOyAvLyBEZWxheSBpcyBhZGRlZCBkdWUgdG8gaXNzdXMgd2l0aCBLd2lrSUQgQ2FtZXJhIG5vdCBiZWluZyBhYmxlIHRvIGhhbmRsZSB0byBmYXN0IHByb2Nlc3NpbmcuXG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tDbG9zZUNhbWVyYShlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmlzU2hvd0NhbWVyYUNhcHR1cmUgPSBmYWxzZTtcbiAgICB0aGlzLmNhbWVyYUNhcHR1cmVGaWVsZEtleSA9IFwiXCI7XG4gICAgdGhpcy5jYW1lcmFDYXB0dXJlSW1hZ2UgPSBcIlwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gdXBkYXRlIHRoZSBmaWxlcyBhcnJheSB3aXRoIHRoZSBuZXcgZmlsZSBhbmQgaXQncyBzdGF0ZSBhbmQgcmVzcG9uc2UgZnJvbSB0aGUgYXBpIG9mIHVwbG9hZGluZyB0aGUgZmlsZS5cbiAgICovXG4gIEBsb2dNZXRob2RcbiAgdXBkYXRlRmlsZXMoZmlsZTogYW55LCBzdGF0ZTogc3RyaW5nLCBrZXk6IHN0cmluZykge1xuICAgIGNvbnN0IGZpbGVXaXRoU3RhdGUgPSBtZXJnZU9iamVjdHMoZmlsZSBhcyBhbnksIHsgc3RhdGU6IHN0YXRlIH0pO1xuXG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGtleSk7XG5cbiAgICBpZiAoZmllbGQucHJvcGVydGllcz8ubXVsdGlwbGUpIHtcbiAgICAgIC8vIElmIGZpZWxkLnByb3BlcnRpZXM/Lm11bHRpcGxlIGlzIHRydWUsIGl0IG1lYW5zIG11bHRpcGxlIGZpbGVzIGFyZSBhbGxvd2VkIGZvciB0aGlzIGZpZWxkLlxuICAgICAgLy8gVXBkYXRlIHRoZSBleGlzdGluZyBmaWxlcyBhcnJheSBmb3IgdGhlIHNwZWNpZmljIGtleSB3aXRoIHRoZSBuZXcgZmlsZS5cbiAgICAgIGNvbnN0IHVwZGF0ZWRGaWxlcyA9IFtcbiAgICAgICAgLi4udGhpcy5maWxlc1trZXldLmZpbHRlcihcbiAgICAgICAgICAoZikgPT4gZi5uYW1lICE9PSBmaWxlV2l0aFN0YXRlLm5hbWUgfHwgZi5zaXplICE9PSBmaWxlV2l0aFN0YXRlLnNpemVcbiAgICAgICAgKSxcbiAgICAgICAgZmlsZVdpdGhTdGF0ZVxuICAgICAgXTtcblxuICAgICAgLy8gQXBwbHkgdGhlIGZpbHRlckR1cGxpY2F0ZXNGaWxlcyBmdW5jdGlvbiB0byBlbnN1cmUgdW5pcXVlbmVzcyBpbiB0aGUgdXBkYXRlZEZpbGVzIGFycmF5LlxuICAgICAgdGhpcy5maWxlc1trZXldID0gZmlsdGVyRHVwbGljYXRlc0ZpbGVzKHVwZGF0ZWRGaWxlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIGZpZWxkLnByb3BlcnRpZXM/Lm11bHRpcGxlIGlzIGZhbHNlLCBvbmx5IG9uZSBmaWxlIGlzIGFsbG93ZWQgZm9yIHRoaXMgZmllbGQuXG4gICAgICAvLyBSZXBsYWNlIHRoZSBleGlzdGluZyBmaWxlcyBhcnJheSBmb3IgdGhlIHNwZWNpZmljIGtleSB3aXRoIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG5ldyBmaWxlLlxuICAgICAgdGhpcy5maWxlc1trZXldID0gW2ZpbGVXaXRoU3RhdGVdO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgZm9ybURhdGEgYW5kIGZvcm1Hcm91cCBjb250cm9scyBmb3IgdGhlIHNwZWNpZmljIGtleSB3aXRoIHRoZSBub3JtYWxGaWxlcyBhcnJheS5cbiAgICBjb25zdCBub3JtYWxGaWxlcyA9IHRoaXMuZmlsZXNba2V5XS5maWx0ZXIoKGZpbGUpID0+IHtcbiAgICAgIHJldHVybiBmaWxlLnN0YXRlID09PSBcIk5PUk1BTFwiO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtRGF0YVtrZXldID0gbm9ybWFsRmlsZXM7XG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNba2V5XS5wYXRjaFZhbHVlKG5vcm1hbEZpbGVzLCB7XG4gICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgb25seVNlbGY6IGZhbHNlXG4gICAgfSk7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcbiAgICAgIHtcbiAgICAgICAgW2tleV06IG5vcm1hbEZpbGVzXG4gICAgICB9LFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBhcGkgdXBsb2FkIG1vY2tpbmcgbWV0aG9kLiBTZXQncyB0byBsb2FkaW5nIGF0IGZpcnN0IGF0IHBvaW50IHdoZW4gQVBJIGlzIGNhbGxlZCBhbmQgdGhlbiBjaGFuZ2VzIHRoZSBzdGF0dXMgdG8gcmFuZG9tIHN0YXR1cyBhZnRlciAyIHNlY29uZHMgb2YgZGVsYXkgc2hvd2luZyBhIG1vY2tlZCByZXNwb25zZSBmcm9tIEFQSS5cbiAgICovXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdXBsb2FkRmlsZShmaWVsZDogYW55LCBmaWxlOiBhbnkpIHtcbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgRUZpZWxkVHlwZS5GSUxFOlxuICAgICAgICB0aGlzLnVwZGF0ZUZpbGVzKGZpbGUsIFwiTE9BRElOR1wiLCBmaWVsZC5rZXkpO1xuXG4gICAgICAgIC8vIEFjdHVhbCBBUEkgQ2FsbFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMub25DbGlja0FwaUNhbGwuZW1pdCh7XG4gICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIGZpbGU6IGZpbGUsXG4gICAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgIHR5cGU6IGZpbGUudHlwZSxcbiAgICAgICAgICAgICAgICBzaXplOiBmaWxlLnNpemUsXG4gICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBmaWxlLmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgICAgICB3ZWJraXRSZWxhdGl2ZVBhdGg6IGZpbGUud2Via2l0UmVsYXRpdmVQYXRoXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVGaWxlcyhmaWxlLCBcIkVSUk9SXCIsIGZpZWxkLmtleSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuQ0FQVFVSRTpcbiAgICAgICAgLy8gQWN0dWFsIEFQSSBDYWxsXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5vbkNsaWNrQXBpQ2FsbC5lbWl0KHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgaW1hZ2U6IGZpbGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJGYWlsZWQgdG8gdXBsb2FkIGltYWdlIHRvIHNlcnZlciFcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrRm9ybUZpZWxkQnV0dG9uKGZpZWxkOiBhbnkpOiB2b2lkIHtcbiAgICBsZXQgZm9ybURhdGEgPSB0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuXG4gICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5mb3JtRmllbGRzKSB7XG4gICAgICBpZiAoZmllbGQuaXNGb3JtRWxlbWVudCkge1xuICAgICAgICBpZiAoZmllbGQuaGlkZGVuKSB7XG4gICAgICAgICAgZGVsZXRlIGZvcm1EYXRhW2ZpZWxkLmtleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9ybURhdGFbZmllbGQua2V5XSA9IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgIGZvcm1EYXRhW2ZpZWxkLmtleV1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXh0ZW5kZWRGb3JtRGF0YSA9IHRoaXMuZm9ybUZpZWxkcy5yZWR1Y2UoKHJlc3VsdCwgZmllbGQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoZmllbGQuaXNGb3JtRWxlbWVudCAmJiAhZmllbGQuaGlkZGVuKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkRGF0YSA9IHtcbiAgICAgICAgICBbZmllbGQua2V5XToge1xuICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICBsYWJlbDogZmllbGQubGFiZWwsXG4gICAgICAgICAgICB2YWx1ZTogaXNFbXB0eVZhbHVlKGZvcm1EYXRhW2ZpZWxkLmtleV0pID8gXCJcIiA6IGZvcm1EYXRhW2ZpZWxkLmtleV0sXG4gICAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXN1bHRbZmllbGQua2V5XSA9IGZpZWxkRGF0YVtmaWVsZC5rZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSk7XG5cbiAgICB0aGlzLm9uQ2xpY2tGb3JtRmllbGRCdXR0b24uZW1pdCh7XG4gICAgICBjb25maWc6IGZpZWxkLFxuICAgICAgZGF0YTogbWVyZ2VPYmplY3RzKHRoaXMuZm9ybURhdGEsIHRoaXMucG9wdXBGb3JtRGF0YSwgdGhpcy50YXNrRGF0YSksXG4gICAgICBleHRlbmRlZERhdGE6IGV4dGVuZGVkRm9ybURhdGFcbiAgICB9KTtcbiAgfVxuXG4gIC8vIERPTSBFdmVudCBIYW5kbGVyc1xuICBAbG9nTWV0aG9kXG4gIGhhbmRsZUdldEtleVZhbHVlKGU6IGFueSkge1xuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICB7XG4gICAgICAgIFtlLmtleV06IGUudmFsdWVcbiAgICAgIH0sXG4gICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICk7XG5cbiAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZS5rZXkpO1xuICAgIHRoaXMuZm9ybURhdGFbZS5rZXldID0gY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdChcbiAgICAgIGZpZWxkLFxuICAgICAgZS52YWx1ZVxuICAgICk7XG5cbiAgICB0aGlzLmdldFVuc2F2ZWREYXRhU3RhdGUuZW1pdCh0cnVlKTtcblxuICAgIGlmIChcbiAgICAgIGZpZWxkLmlzRm9ybUVsZW1lbnQgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRpb25cIikgJiZcbiAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9DSEFOR0VcIilcbiAgICApIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0gbmV3IFZhbGlkYXRpb24oXG4gICAgICAgIHtcbiAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICk7XG5cbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHZhbGlkYXRpb25zLnZhbGlkYXRlKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgfSkoKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKVxuICAgICkge1xuICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAge1xuICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiT05fQ0hBTkdFXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrUmVzZXRGb3JtRmllbGRzKGU6IGFueSwgZmllbGQ6IFRGaWVsZFRpdGxlKSB7XG4gICAgY29uc3QgcmVzZXRGb3JtRmllbGRzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChsZXQgZiBvZiBmaWVsZC5yZXNldC5maWVsZHMpIHtcbiAgICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIGYuYWN0aW9ucykge1xuICAgICAgICAgIGNvbnN0IHJlc2V0RmllbGQgPSBnZXRGb3JtRmllbGRCeUtleShcbiAgICAgICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgIGFjdGlvbi5wcm9wcy5maWVsZEtleVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgRklFTERfQ09ORklHOiByZXNldEZpZWxkLFxuICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBCWVBBU1NfUkVTRVRfQ09ORklSTSA9IGZpZWxkPy5wcm9wZXJ0aWVzPy5ieXBhc3NSZXNldENvbmZpcm1hdGlvbjtcblxuICAgIGlmICghQllQQVNTX1JFU0VUX0NPTkZJUk0pIHtcbiAgICAgIGNvbnN0IENPTkZJUk1fUkVTRVQgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgXCJUaGlzIGFjdGlvbiB3aWxsIHJlc2V0IGFsbCB0aGUgZmllbGRzLiBEbyB5b3Ugc3RpbGwgd2FudCB0byBjb250aW51ZT9cIlxuICAgICAgKTtcblxuICAgICAgaWYgKENPTkZJUk1fUkVTRVQpIHtcbiAgICAgICAgcmVzZXRGb3JtRmllbGRzKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc2V0Rm9ybUZpZWxkcygpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlRmllbGRBcGlDYWxsKGZpZWxkOiBURmllbGRBcGlDYWxsLCBhcGk6IGFueSkge1xuICAgIGFwaSA9IGF3YWl0IHRoaXMuZXhlY3V0ZUFwaUNhbGwoYXBpLCB7XG4gICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgQVBJX0NPTkZJRzogYXBpLFxuICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5pc1ZhbGlkUmVxdWVzdEhlYWRlcnNBbmRCb2R5KGFwaSkpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC5hcGksIFwicmVxdWVzdFwiKSkge1xuICAgICAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgW2ZpZWxkLmtleV06IGFwaS5yZXNwb25zZS52YWx1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgW2ZpZWxkLmtleV06IGFwaS5yZXNwb25zZS52YWx1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKFxuICAgICAgICB7XG4gICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICBBUElfQ09ORklHOiBhcGksXG4gICAgICAgICAgQVBJX1JFU1BPTlNFOiBhcGkucmVzcG9uc2UsXG4gICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgKTtcblxuICAgICAgYXBpID0gYXdhaXQgYXBpcy52YWxpZGF0ZVJlc3BvbnNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBmaWVsZFtcImFwaVwiXVtcInN0YXR1c1wiXVtcInZhbHVlXCJdID0gRUFwaVN0YXR1c1R5cGUuRkFJTEVEO1xuICAgICAgICBmaWVsZFtcInNob3dMb2FkZXJcIl0gPSBmYWxzZTtcbiAgICAgIH0sIDUwMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZmllbGQ6IGZpZWxkLCBhcGk6IGFwaSB9O1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVBcGlDYWxsKGFwaTogYW55KSB7XG4gICAgYXBpID0gYXdhaXQgdGhpcy5leGVjdXRlQXBpQ2FsbChhcGksIHtcbiAgICAgIEZPUk1fQ09ORklHOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICBBUElfQ09ORklHOiBhcGksXG4gICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICB9KTtcblxuICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhcbiAgICAgIHtcbiAgICAgICAgRk9STV9DT05GSUc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgQVBJX0NPTkZJRzogYXBpLFxuICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgfSxcbiAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmlzVmFsaWRSZXF1ZXN0SGVhZGVyc0FuZEJvZHkoYXBpKSkge1xuICAgICAgYXBpID0gYXdhaXQgYXBpcy52YWxpZGF0ZVJlc3BvbnNlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgYXBpOiBhcGkgfTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgZXhlY3V0ZUFwaUNhbGwoYXBpOiBhbnksIG9iamVjdDogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBhcGlzID0gbmV3IEFwaXMob2JqZWN0LCB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKSk7XG5cbiAgICBhcGkgPSBhd2FpdCBhcGlzLnNldFVybCgpO1xuICAgIGFwaSA9IGF3YWl0IGFwaXMuc2V0UmVxdWVzdEhlYWRlcnMoKTtcbiAgICBhcGkgPSBhd2FpdCBhcGlzLnZhbGlkYXRlUmVxdWVzdEhlYWRlcnMoKTtcbiAgICBhcGkgPSBhd2FpdCBhcGlzLnNldFJlcXVlc3RCb2R5KCk7XG4gICAgYXBpID0gYXdhaXQgYXBpcy52YWxpZGF0ZVJlcXVlc3RCb2R5KCk7XG5cbiAgICBsZXQgYXBpQ2FsbFJlc3BvbnNlOiBhbnkgPSB7fTtcbiAgICBsZXQgYXBpQ2FsbFJlc3BvbnNlU3RhdHVzQ29kZTtcblxuICAgIGlmICh0aGlzLmlzVmFsaWRSZXF1ZXN0SGVhZGVyc0FuZEJvZHkoYXBpKSkge1xuICAgICAgaWYgKFxuICAgICAgICBhcGkucmVxdWVzdC51cmwuaGFzT3duUHJvcGVydHkoXCJ0eXBlXCIpICYmXG4gICAgICAgIGFwaS5yZXF1ZXN0LnVybC50eXBlID09PSBFQXBpUmVxdWVzdFVybFR5cGUuTU9DS1xuICAgICAgKSB7XG4gICAgICAgIGFwaUNhbGxSZXNwb25zZSA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGFwaS5yZXF1ZXN0LnVybC5wcm9wcy5tb2NrZWREYXRhKTtcbiAgICAgICAgICB9LCAxMDAwKTsgLy8gMTAwMCBtcyA9IDEgc2VjXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdXJsOiBzdHJpbmcgPSBhcGkucmVxdWVzdC51cmwudmFsdWU7XG4gICAgICAgIGNvbnN0IG1ldGhvZDogc3RyaW5nID0gYXBpLnJlcXVlc3Q/Lm1ldGhvZCA/PyBcIlBPU1RcIjtcbiAgICAgICAgY29uc3QgaGVhZGVyczogYW55ID0ge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIC4uLihhcGkucmVxdWVzdD8uaGVhZGVycz8udmFsdWUgfHwge30pXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGJvZHk6IGFueSA9IGFwaS5yZXF1ZXN0Py5ib2R5Py52YWx1ZSA/PyBudWxsO1xuXG4gICAgICAgIGlmIChtZXRob2QgPT09IFwiR0VUXCIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgICAgaGVhZGVyczogeyAuLi5oZWFkZXJzIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlU3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGFwaUNhbGxSZXNwb25zZSA9IHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgICAgaGVhZGVyczogeyAuLi5oZWFkZXJzIH0sXG4gICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFwaUNhbGxSZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgICAgIGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2UgPSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXBpLnJlc3BvbnNlID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgIGFwaS5yZXNwb25zZSxcbiAgICAgICAgXCJ2YWx1ZVwiLFxuICAgICAgICBhcGlDYWxsUmVzcG9uc2VcbiAgICAgICk7XG5cbiAgICAgIGFwaS5yZXNwb25zZSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICBhcGkucmVzcG9uc2UsXG4gICAgICAgIFwic3RhdHVzXCIsXG4gICAgICAgIGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFwaTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaXNWYWxpZFJlcXVlc3RIZWFkZXJzQW5kQm9keShhcGk6IFRBcGkpIHtcbiAgICBjb25zdCBib2R5VmFsaWRhdGlvbiA9XG4gICAgICAoYXBpLnJlcXVlc3QuYm9keT8udmFsaWRhdGlvbiBhcyBUVmFsaWRhdGlvbiAmIHtcbiAgICAgICAgaXNfdmFsaWQ6IGJvb2xlYW47XG4gICAgICB9KSB8fFxuICAgICAgKGFwaS5yZXF1ZXN0LmJvZHkgYXMgYW55ICYge1xuICAgICAgICBpc192YWxpZDogYm9vbGVhbjtcbiAgICAgIH0pO1xuICAgIGNvbnN0IGhlYWRlcnNWYWxpZGF0aW9uID1cbiAgICAgIChhcGkucmVxdWVzdC5oZWFkZXJzPy52YWxpZGF0aW9uIGFzIFRWYWxpZGF0aW9uICYge1xuICAgICAgICBpc192YWxpZDogYm9vbGVhbjtcbiAgICAgIH0pIHx8XG4gICAgICAoYXBpLnJlcXVlc3QuaGVhZGVycyBhcyBhbnkgJiB7XG4gICAgICAgIGlzX3ZhbGlkOiBib29sZWFuO1xuICAgICAgfSk7XG5cbiAgICBpZiAoIWJvZHlWYWxpZGF0aW9uICYmICFoZWFkZXJzVmFsaWRhdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAoYm9keVZhbGlkYXRpb24/LmlzX3ZhbGlkIHx8IGZhbHNlKSAmJlxuICAgICAgKGhlYWRlcnNWYWxpZGF0aW9uPy5pc192YWxpZCB8fCBmYWxzZSlcbiAgICApO1xuICB9XG5cbiAgc2hvd0FwaUxvYWRlcigpIHtcbiAgICB0aGlzLmxvYWRlclNlcnZpY2Uuc2hvdyh7XG4gICAgICBmdWxsc2NyZWVuOiB0cnVlLFxuICAgICAgbG9hZGVyVGV4dDogXCJQbGVhc2Ugd2FpdFwiXG4gICAgfSk7XG4gICAgdGhpcy52aWV3Rm9ybXNCdXR0b25bXCJkaXNhYmxlZFwiXSA9IHRydWU7XG4gICAgdGhpcy52aWV3Rm9ybXNCdXR0b25bXCJzaG93TG9hZGVyXCJdID0gdHJ1ZTtcbiAgICB0aGlzLnNhdmVGb3JtQnV0dG9uW1wiZGlzYWJsZWRcIl0gPSB0cnVlO1xuICAgIHRoaXMuc2F2ZUZvcm1CdXR0b25bXCJzaG93TG9hZGVyXCJdID0gdHJ1ZTtcbiAgfVxuXG4gIGhpZGVBcGlMb2FkZXIoKSB7XG4gICAgdGhpcy5sb2FkZXJTZXJ2aWNlLmhpZGUoKTtcbiAgICB0aGlzLnZpZXdGb3Jtc0J1dHRvbltcImRpc2FibGVkXCJdID0gZmFsc2U7XG4gICAgdGhpcy52aWV3Rm9ybXNCdXR0b25bXCJzaG93TG9hZGVyXCJdID0gZmFsc2U7XG4gICAgdGhpcy5zYXZlRm9ybUJ1dHRvbltcImRpc2FibGVkXCJdID0gZmFsc2U7XG4gICAgdGhpcy5zYXZlRm9ybUJ1dHRvbltcInNob3dMb2FkZXJcIl0gPSBmYWxzZTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlT25DbGlja0FwaUNhbGwoZTogYW55KSB7XG4gICAgbGV0IGZpZWxkOiBURmllbGRBcGlDYWxsID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBlLmtleSk7XG5cbiAgICBpZiAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5BUEkpIHtcbiAgICAgIC8vIHNldCBidXR0b24gc3RhdHVzIHRvIGxvYWRpbmdcbiAgICAgIGZpZWxkW1wiYXBpXCJdW1wic3RhdHVzXCJdW1widmFsdWVcIl0gPSBFQXBpU3RhdHVzVHlwZS5MT0FESU5HO1xuICAgICAgZmllbGRbXCJzaG93TG9hZGVyXCJdID0gdHJ1ZTtcblxuICAgICAgdGhpcy5zaG93QXBpTG9hZGVyKCk7XG5cbiAgICAgIC8vIERldGVybWluZSBBUEkgQ2FsbCB0aW1lXG5cbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC5hcGksIFwicmVxdWVzdFwiKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUZpZWxkQXBpQ2FsbChmaWVsZCwgZmllbGQuYXBpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgQVBJX0NPTkZJRzoge30sXG4gICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgYXdhaXQgYXBpcy5jYWxsTmV4dEFwaShmaWVsZC5hcGkuZW50cnlwb2ludCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gb3B0aW1pemUgdGhlIERPTSB1cGRhdGUgYnkgQW5ndWxhciBmb3IgdXNpbmcgKm5nRm9yIG9uIGxhcmdlIG5vLiBvZiBpdGVtcy5cbiAgICogQHBhcmFtIGluZGV4IG51bWJlclxuICAgKiBAcGFyYW0gaXRlbSBmaWVsZENvbmZpZ1xuICAgKiBAcmV0dXJucyBzdHJpbmdcbiAgICovXG4gIGdldFVuaXF1ZUlkZW50aWZpZXIoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXRlbS5rZXk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tHb0JhY2soZTogYW55LCBtb2RlOiBURm9ybVZpZXdHb0JhY2tNb2RlKSB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbmZpZy5zdGF0dXMgPT09IEVGb3Jtc0xpc3RTdGF0dXMuQ09NUExFVEVEKSB7XG4gICAgICB0aGlzLm9uQ2xpY2tHb0JhY2suZW1pdCh7XG4gICAgICAgIGNsaWNrZWQ6IHRydWUsXG4gICAgICAgIG1vZGU6IG1vZGVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmZvcm1Db25maWcucHJvcGVydGllcy5oZWFkZXIuYmFja0J1dHRvbi5ieXBhc3NDb25maXJtYXRpb24gfHxcbiAgICAgIHdpbmRvdy5jb25maXJtKFwiWW91ciBkYXRhIHdpbGwgYmUgbG9zdCBpZiB5b3UgbGVhdmUgdGhpcyBwYWdlISBDb250aW51ZT9cIilcbiAgICApIHtcbiAgICAgIHRoaXMub25DbGlja0dvQmFjay5lbWl0KHtcbiAgICAgICAgY2xpY2tlZDogdHJ1ZSxcbiAgICAgICAgbW9kZTogbW9kZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrVmlld0Zvcm1zKGU6IGFueSkge1xuICAgIGlmICh0aGlzLmZvcm1Db25maWcuc3RhdHVzID09PSBFRm9ybXNMaXN0U3RhdHVzLkNPTVBMRVRFRCkge1xuICAgICAgdGhpcy5vbkNsaWNrVmlld0Zvcm1zLmVtaXQoe1xuICAgICAgICBjbGlja2VkOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5mb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnZpZXdGb3Jtc0J1dHRvbi5ieXBhc3NDb25maXJtYXRpb24gfHxcbiAgICAgIHdpbmRvdy5jb25maXJtKFwiWW91ciBkYXRhIHdpbGwgYmUgbG9zdCBpZiB5b3UgbGVhdmUgdGhpcyBwYWdlISBDb250aW51ZT9cIilcbiAgICApIHtcbiAgICAgIHRoaXMub25DbGlja1ZpZXdGb3Jtcy5lbWl0KHtcbiAgICAgICAgY2xpY2tlZDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrU2F2ZUZvcm0oZTogYW55KSB7XG4gICAgY29uc3QgY29udHJvbHMgPSBuZXcgRm9ybVZhbGlkYXRpb24oKS5nZXRGb3JtRmllbGRzSW52YWxpZENvbnRyb2xzKFxuICAgICAgdGhpcy5mb3JtR3JvdXBcbiAgICApO1xuXG4gICAgbGV0IGZpcnN0RmllbGRXaXRoRXJyb3I6IHN0cmluZyA9IFwiXCI7XG5cbiAgICBmb3IgKGxldCBjb250cm9sIG9mIGNvbnRyb2xzKSB7XG4gICAgICBpZiAoY29udHJvbC5pbnZhbGlkICYmIGlzRW1wdHlWYWx1ZShmaXJzdEZpZWxkV2l0aEVycm9yKSkge1xuICAgICAgICBmaXJzdEZpZWxkV2l0aEVycm9yID0gY29udHJvbC5rZXk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1GaWVsZHMgPSBzaG93Rm9ybUZpZWxkRXJyb3IoXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29udHJvbC5rZXldLmVycm9ycyxcbiAgICAgICAgY29udHJvbC5rZXksXG4gICAgICAgIGNvbnRyb2wuaW52YWxpZFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKGZpcnN0RmllbGRXaXRoRXJyb3IpKSB7XG4gICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKHRydWUpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpO1xuICAgICAgfSwgMzAwMCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZvcm1GaWVsZHMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgICAhZmllbGQuaGlkZGVuICYmXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRpb25cIikgJiZcbiAgICAgICAgZmllbGQudmFsaWRhdGlvbi50cmlnZ2Vycy5pbmNsdWRlcyhcIk9OX1NBVkVcIilcbiAgICAgICkge1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IG5ldyBWYWxpZGF0aW9uKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgYXdhaXQgdmFsaWRhdGlvbnMudmFsaWRhdGUoZmllbGQudmFsaWRhdGlvbik7XG5cbiAgICAgICAgaWYgKCFmaWVsZC52YWxpZGF0aW9uLmlzX3ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbih0cnVlKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpO1xuICAgICAgICAgIH0sIDMwMDApO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZvcm1EYXRhID0gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcblxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGZpZWxkLmhpZGRlbikge1xuICAgICAgICAgIGRlbGV0ZSBmb3JtRGF0YVtmaWVsZC5rZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1EYXRhW2ZpZWxkLmtleV0gPSBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBmb3JtRGF0YVtmaWVsZC5rZXldXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuZGVkRm9ybURhdGEgPSB0aGlzLmZvcm1GaWVsZHMucmVkdWNlKChyZXN1bHQsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQgJiYgIWZpZWxkLmhpZGRlbikge1xuICAgICAgICBjb25zdCBmaWVsZERhdGEgPSB7XG4gICAgICAgICAgW2ZpZWxkLmtleV06IHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgbGFiZWw6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgdmFsdWU6IGlzRW1wdHlWYWx1ZShmb3JtRGF0YVtmaWVsZC5rZXldKSA/IFwiXCIgOiBmb3JtRGF0YVtmaWVsZC5rZXldLFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmVzdWx0W2ZpZWxkLmtleV0gPSBmaWVsZERhdGFbZmllbGQua2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwge30pO1xuXG4gICAgT2JqZWN0LmtleXMoZm9ybURhdGEpLm1hcCgoa2V5KSA9PiB7XG4gICAgICBpZiAoaXNFbXB0eVZhbHVlKGZvcm1EYXRhW2tleV0pKSB7XG4gICAgICAgIGZvcm1EYXRhW2tleV0gPSBcIlwiO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUE9TVCBUYXNrc1xuICAgICAqIDEuIEFQSSBDYWxscy5cbiAgICAgKiAyLiBBbHRlciBEYXRhIFN0cnVjdHVyZS5cbiAgICAgKiAzLiBUcmlnZ2VyIGFuIEludGVybmFsIFBvcHVwIEZvcm0uXG4gICAgICogNC4gVVJMIFJlZGlyZWN0aW9uIG9yIG5ldyBvcGVuaW5nIG9mIFVSTCBpbiBleHRlcm5hbCB0YWIuXG4gICAgICovXG4gICAgaWYgKFxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5mb3JtQ29uZmlnLCBcInRhc2tzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmZvcm1Db25maWcudGFza3MsIFwicG9zdFwiKVxuICAgICkge1xuICAgICAgZm9yIChsZXQgcG9zdFRhc2sgb2YgdGhpcy5mb3JtQ29uZmlnLnRhc2tzLnBvc3QpIHtcbiAgICAgICAgY29uc3QgdGFzayA9IG5ldyBUYXNrcyhcbiAgICAgICAgICBwb3N0VGFzayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBGT1JNX0NPTkZJRzogdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gPSBmYWxzZTtcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHBvc3RUYXNrLCBcIndhaXRcIikpIHtcbiAgICAgICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gcG9zdFRhc2sud2FpdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0YXNrLmV4ZWN1dGUoKTtcblxuICAgICAgICAvLyBXYWl0IGZvciBuZ09uQ2hhbmdlcyB0byBiZSBjYWxsZWQgYmVmb3JlIGNvbnRpbnVpbmcgdG8gdGhlIG5leHQgdGFza1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMud2FpdGluZ0ZvckNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RvcFRhc2tFeGVjdXRpb24pIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdG9wVGFza0V4ZWN1dGlvbiB8fCB0aGlzLndhaXRpbmdGb3JDaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9uQ2xpY2tTYXZlRm9ybS5lbWl0KHtcbiAgICAgICAgZm9ybUNvbmZpZzogdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgICBkYXRhOiBtZXJnZU9iamVjdHMoXG4gICAgICAgICAgdGhpcy5hbGxGb3Jtc0RhdGFbdGhpcy5mb3JtQ29uZmlnLmtleV0sXG4gICAgICAgICAgZm9ybURhdGEsXG4gICAgICAgICAgdGhpcy5wb3B1cEZvcm1EYXRhLFxuICAgICAgICAgIHRoaXMudGFza0RhdGFcbiAgICAgICAgKSxcbiAgICAgICAgZXh0ZW5kZWREYXRhOiBleHRlbmRlZEZvcm1EYXRhXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nZXRVbnNhdmVkRGF0YVN0YXRlLmVtaXQoZmFsc2UpO1xuICAgICAgdGhpcy5vbkNsaWNrU2F2ZUZvcm0uZW1pdCh7XG4gICAgICAgIGZvcm1Db25maWc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgZGF0YTogbWVyZ2VPYmplY3RzKGZvcm1EYXRhLCB0aGlzLnBvcHVwRm9ybURhdGEsIHRoaXMudGFza0RhdGEpLFxuICAgICAgICBleHRlbmRlZERhdGE6IGV4dGVuZGVkRm9ybURhdGFcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNob3dFcnJvck5vdGlmaWNhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBAbG9nTWV0aG9kXG4gIHRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKHNob3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNob3dFcnJvck5vdGlmaWNhdGlvbiA9IHNob3c7XG4gIH1cblxuICAvLyBDb21wb25lbnQgSGVscGVyc1xuICBAbG9nTWV0aG9kXG4gIGZpZWxkSGlkZShmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdW1wiaGlkZGVuXCJdID0gdHJ1ZTtcbiAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkR3JvdXBIaWRlKGZpZWxkR3JvdXA6IHN0cmluZykge1xuICAgIGZvciAobGV0IGZpZWxkS2V5IG9mIHRoaXMuZmllbGRHcm91cHNbZmllbGRHcm91cF0pIHtcbiAgICAgIHRoaXMuZmllbGRIaWRlKGZpZWxkS2V5KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkU2hvdyhmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdW1wiaGlkZGVuXCJdID0gZmFsc2U7XG4gICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEdyb3VwU2hvdyhmaWVsZEdyb3VwOiBzdHJpbmcpIHtcbiAgICBmb3IgKGxldCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XG4gICAgICB0aGlzLmZpZWxkU2hvdyhmaWVsZEtleSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZERpc2FibGUoZmllbGRLZXk6IHN0cmluZykge1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGxldCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIGlmIChmaWVsZC5pc0Zvcm1FbGVtZW50KSB7XG4gICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF1bXCJkaXNhYmxlZFwiXSA9IHRydWU7XG5cbiAgICAgIGlmIChpc05vdEVtcHR5VmFsdWUodGhpcy5mb3JtR3JvdXAuY29udHJvbHMpKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0uZGlzYWJsZSh7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09IEVGaWVsZFR5cGUuQlVUVE9OKSB7XG4gICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF1bXCJkaXNhYmxlZFwiXSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEdyb3VwRGlzYWJsZShmaWVsZEdyb3VwOiBzdHJpbmcpIHtcbiAgICBmb3IgKGxldCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XG4gICAgICB0aGlzLmZpZWxkRGlzYWJsZShmaWVsZEtleSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEVuYWJsZShmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XVtcImRpc2FibGVkXCJdID0gZmFsc2U7XG5cbiAgICAgIGlmIChpc05vdEVtcHR5VmFsdWUodGhpcy5mb3JtR3JvdXAuY29udHJvbHMpKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0uZW5hYmxlKHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5CVVRUT04pIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XVtcImRpc2FibGVkXCJdID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEdyb3VwRW5hYmxlKGZpZWxkR3JvdXA6IHN0cmluZykge1xuICAgIGZvciAobGV0IGZpZWxkS2V5IG9mIHRoaXMuZmllbGRHcm91cHNbZmllbGRHcm91cF0pIHtcbiAgICAgIHRoaXMuZmllbGRFbmFibGUoZmllbGRLZXkpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRSZXNldChmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgLy8gRmluZCB0aGUgZmllbGQgYW5kIGl0cyBpbmRleCBpbiB0aGUgZm9ybUZpZWxkcyBhcnJheVxuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGxldCBmaWVsZEluZGV4ID0gZ2V0Rm9ybUZpZWxkSW5kZXhCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcblxuICAgIC8vIFJlc2V0IHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgaW4gdGhlIGZvcm1Hcm91cFxuICAgIGNvbnN0IHJlc2V0VmFsdWUgPSBjb252ZXJ0Rm9ybUZpZWxkRW1wdHlWYWx1ZVRvS3dpa1VJRm9ybWF0KGZpZWxkKTtcblxuICAgIHRoaXMuZm9ybURhdGFbZmllbGRLZXldID0gcmVzZXRWYWx1ZTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0ucmVzZXQocmVzZXRWYWx1ZSwge1xuICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgIG9ubHlTZWxmOiB0cnVlXG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAge1xuICAgICAgICBbZmllbGQua2V5XTogcmVzZXRWYWx1ZVxuICAgICAgfSxcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgKTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICBlbWl0RXZlbnQ6IHRydWVcbiAgICB9KTtcblxuICAgIC8vIFJlc2V0IHRoZSBtZXNzYWdlcyBhbmQgZXJyb3JzIGZvciB0aGUgZmllbGRcbiAgICBmaWVsZCA9IHJlbW92ZUZvcm1GaWVsZE1lc3NhZ2UoZmllbGQsIHtcbiAgICAgIHR5cGU6IEVNZXNzYWdlVHlwZS5XQVJOSU5HLFxuICAgICAgbWVzc2FnZTogXCJcIlxuICAgIH0pO1xuICAgIGZpZWxkID0gcmVtb3ZlRm9ybUZpZWxkTWVzc2FnZShmaWVsZCwge1xuICAgICAgdHlwZTogRU1lc3NhZ2VUeXBlLlNVQ0NFU1MsXG4gICAgICBtZXNzYWdlOiBcIlwiXG4gICAgfSk7XG4gICAgdGhpcy5maWVsZEVycm9ySGlkZShmaWVsZEtleSwge1xuICAgICAgdHlwZTogRU1lc3NhZ2VUeXBlLkVSUk9SLFxuICAgICAgbWVzc2FnZTogXCJcIlxuICAgIH0pO1xuXG4gICAgLy8gUmVzZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpbiB0aGUgZm9ybUZpZWxkcyBhcnJheVxuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSBFRmllbGRUeXBlLkFQSTpcbiAgICAgICAgY29uc3QgZmllbGRBcGlDYWxsID0gZmllbGQgYXMgVEZpZWxkQXBpQ2FsbDtcbiAgICAgICAgZmllbGRBcGlDYWxsLmFwaS5zdGF0dXMudmFsdWUgPSBFQXBpU3RhdHVzVHlwZS5ERUZBVUxUO1xuICAgICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZEFwaUNhbGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZmllbGQuZm9jdXMgPSBmYWxzZTtcbiAgICAgICAgZmllbGQuaW52YWxpZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEVycm9yU2hvdyhmaWVsZEtleTogc3RyaW5nLCBtZXNzYWdlOiBUTWVzc2FnZSkge1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGxldCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIGZpZWxkID0gaGlnaGxpZ2h0Rm9ybUZpZWxkRXJyb3IoZmllbGQsIHRydWUpO1xuICAgIGZpZWxkID0gYXBwZW5kRm9ybUZpZWxkTWVzc2FnZShmaWVsZCwgbWVzc2FnZSk7XG5cbiAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRFcnJvckhpZGUoZmllbGRLZXk6IHN0cmluZywgbWVzc2FnZTogVE1lc3NhZ2UpIHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBmaWVsZCA9IGhpZ2hsaWdodEZvcm1GaWVsZEVycm9yKGZpZWxkLCBmYWxzZSk7XG4gICAgZmllbGQgPSByZW1vdmVGb3JtRmllbGRNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZE1lc3NhZ2VTaG93KGZpZWxkS2V5OiBzdHJpbmcsIG1lc3NhZ2U6IFRNZXNzYWdlKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgZmllbGQgPSBhcHBlbmRGb3JtRmllbGRNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZE1lc3NhZ2VIaWRlKGZpZWxkS2V5OiBzdHJpbmcsIG1lc3NhZ2U6IFRNZXNzYWdlKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgZmllbGQgPSByZW1vdmVGb3JtRmllbGRNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRWYWx1ZShhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgY29uc3Qgc291cmNlVmFsdWUgPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgYWN0aW9uLnByb3BzLnZhbHVlLnNvdXJjZVxuICAgICk7XG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoYWN0aW9uLnByb3BzLnZhbHVlLmRlc3RpbmF0aW9uLCBzb3VyY2VWYWx1ZSk7XG5cbiAgICBvYmplY3QuRklFTERfQ09ORklHID0gc291cmNlLm9iamVjdC5GSUVMRF9DT05GSUc7XG5cbiAgICB0aGlzLmZvcm1EYXRhID0gc291cmNlLm9iamVjdC5GT1JNX0RBVEE7XG4gICAgdGhpcy5wYXRjaEZvcm1Hcm91cCh0aGlzLmZvcm1EYXRhKTtcbiAgICB0aGlzLmFsbEZvcm1zRGF0YSA9IHNvdXJjZS5vYmplY3QuQUxMX0ZPUk1TX0RBVEE7XG4gICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0gc291cmNlLm9iamVjdC5QUkVWSU9VU19GT1JNX0RBVEE7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHNldEZpZWxkRGVmYXVsdFZhbHVlKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGF3YWl0IHNvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICBhY3Rpb24ucHJvcHMudmFsdWUuc291cmNlXG4gICAgKTtcblxuICAgIHNvdXJjZS5zZXRWYWx1ZVRvU291cmNlKFxuICAgICAge1xuICAgICAgICBrZXk6IEVTb3VyY2VLZXkuT0JKRUNULFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAga2V5OiBcIkZJRUxEX0NPTkZJR1wiLFxuICAgICAgICAgICAgcGF0aDogXCJkZWZhdWx0LnZhbHVlLnZhbHVlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzb3VyY2VWYWx1ZVxuICAgICk7XG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiRk9STV9EQVRBXCIsXG4gICAgICAgICAgICBwYXRoOiBTdHJpbmcoYWN0aW9uLnByb3BzLmZpZWxkS2V5KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcblxuICAgIG9iamVjdC5GSUVMRF9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkZJRUxEX0NPTkZJRztcbiAgICB0aGlzLmZvcm1EYXRhID0gc291cmNlLm9iamVjdC5GT1JNX0RBVEE7XG4gICAgdGhpcy5wYXRjaEZvcm1Hcm91cCh0aGlzLmZvcm1EYXRhKTtcbiAgICB0aGlzLmFsbEZvcm1zRGF0YSA9IHNvdXJjZS5vYmplY3QuQUxMX0ZPUk1TX0RBVEE7XG4gICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhID0gc291cmNlLm9iamVjdC5QUkVWSU9VU19GT1JNX0RBVEE7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHNldEFwaVN0YXR1cyhhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgY29uc3Qgc291cmNlVmFsdWUgPSBhY3Rpb24ucHJvcHMuc3RhdHVzO1xuXG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiRklFTERfQ09ORklHXCIsXG4gICAgICAgICAgICBwYXRoOiBcImFwaS5zdGF0dXMudmFsdWVcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcblxuICAgIG9iamVjdC5GSUVMRF9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkZJRUxEX0NPTkZJRztcblxuICAgIGNvbnNvbGUubG9nKFwiUFJJTlQwXCIsIGdldE9iamVjdERlZXBDb3B5KHNvdXJjZSksIHNvdXJjZVZhbHVlKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0QXBpSGVhZGVyVmFsdWUoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShhY3Rpb24ucHJvcHMuc291cmNlKTtcblxuICAgIHNvdXJjZS5zZXRWYWx1ZVRvU291cmNlKFxuICAgICAge1xuICAgICAgICBrZXk6IEVTb3VyY2VLZXkuT0JKRUNULFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAga2V5OiBcIkFQSV9DT05GSUdcIixcbiAgICAgICAgICAgIHBhdGg6IGByZXF1ZXN0LmhlYWRlcnMudmFsdWUuJHthY3Rpb24ucHJvcHMua2V5fWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzb3VyY2VWYWx1ZVxuICAgICk7XG5cbiAgICBvYmplY3QuQVBJX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuQVBJX0NPTkZJRztcblxuICAgIGNvbnNvbGUubG9nKFwiUFJJTlQxXCIsIGdldE9iamVjdERlZXBDb3B5KHNvdXJjZSksIHNvdXJjZVZhbHVlKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0QXBpSGVhZGVyVmFsaWRpdHkoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYWN0aW9uLnByb3BzLnZhbGlkO1xuXG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiQVBJX0NPTkZJR1wiLFxuICAgICAgICAgICAgcGF0aDogXCJyZXF1ZXN0LmhlYWRlcnMuaXNfdmFsaWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcblxuICAgIG9iamVjdC5BUElfQ09ORklHID0gc291cmNlLm9iamVjdC5BUElfQ09ORklHO1xuXG4gICAgY29uc29sZS5sb2coXCJQUklOVDJcIiwgZ2V0T2JqZWN0RGVlcENvcHkoc291cmNlKSwgc291cmNlVmFsdWUpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRBcGlCb2R5VmFsdWUoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShhY3Rpb24ucHJvcHMuc291cmNlKTtcblxuICAgIHNvdXJjZS5zZXRWYWx1ZVRvU291cmNlKFxuICAgICAge1xuICAgICAgICBrZXk6IEVTb3VyY2VLZXkuT0JKRUNULFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAga2V5OiBcIkFQSV9DT05GSUdcIixcbiAgICAgICAgICAgIHBhdGg6IGByZXF1ZXN0LmJvZHkudmFsdWUuJHthY3Rpb24ucHJvcHMua2V5fWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzb3VyY2VWYWx1ZVxuICAgICk7XG5cbiAgICBvYmplY3QuQVBJX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuQVBJX0NPTkZJRztcblxuICAgIGNvbnNvbGUubG9nKFwiUFJJTlQzXCIsIGdldE9iamVjdERlZXBDb3B5KHNvdXJjZSksIHNvdXJjZVZhbHVlKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0QXBpQm9keVZhbGlkaXR5KGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGFjdGlvbi5wcm9wcy52YWxpZDtcblxuICAgIHNvdXJjZS5zZXRWYWx1ZVRvU291cmNlKFxuICAgICAge1xuICAgICAgICBrZXk6IEVTb3VyY2VLZXkuT0JKRUNULFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAga2V5OiBcIkFQSV9DT05GSUdcIixcbiAgICAgICAgICAgIHBhdGg6IFwicmVxdWVzdC5ib2R5LmlzX3ZhbGlkXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzb3VyY2VWYWx1ZVxuICAgICk7XG5cbiAgICBvYmplY3QuQVBJX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuQVBJX0NPTkZJRztcblxuICAgIGNvbnNvbGUubG9nKFwiUFJJTlQ0XCIsIGdldE9iamVjdERlZXBDb3B5KHNvdXJjZSksIHNvdXJjZVZhbHVlKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0RmllbGRWYWxpZGl0eShhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgY29uc29sZS5sb2coZ2V0T2JqZWN0RGVlcENvcHkob2JqZWN0KSk7XG5cbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGFjdGlvbi5wcm9wcy52YWxpZDtcblxuICAgIHNvdXJjZS5zZXRWYWx1ZVRvU291cmNlKFxuICAgICAge1xuICAgICAgICBrZXk6IEVTb3VyY2VLZXkuT0JKRUNULFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAga2V5OiBcIkZJRUxEX0NPTkZJR1wiLFxuICAgICAgICAgICAgcGF0aDogXCJ2YWxpZGF0aW9uLmlzX3ZhbGlkXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzb3VyY2VWYWx1ZVxuICAgICk7XG5cbiAgICBvYmplY3QuQVBJX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuQVBJX0NPTkZJRztcblxuICAgIGNvbnNvbGUubG9nKFwiUFJJTlQ1XCIsIGdldE9iamVjdERlZXBDb3B5KHNvdXJjZSksIHNvdXJjZVZhbHVlKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0RHJvcGRvd25PcHRpb25zKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBsZXQgc291cmNlVmFsdWUgPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgYWN0aW9uLnByb3BzLnZhbHVlLnNvdXJjZVxuICAgICk7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcywgXCJvcHRpb25zXCIpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLm9wdGlvbnMsIFwiYXBwZW5kVG9QYXRoXCIpKSB7XG4gICAgICAgIGxldCBhcHBlbmRUb1BhdGggPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgIGFjdGlvbi5wcm9wcy5vcHRpb25zLmFwcGVuZFRvUGF0aC5zb3VyY2VcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZShhcHBlbmRUb1BhdGgpKSB7XG4gICAgICAgICAgY29uc3QgYXBwZW5kVG9QYXRoU3RyID0gcmVwbGFjZVN0cmluZyhcbiAgICAgICAgICAgIGFwcGVuZFRvUGF0aC5tYXRjaChcbiAgICAgICAgICAgICAgYCR7YWN0aW9uLnByb3BzLm9wdGlvbnMuYXBwZW5kVG9QYXRoLmZpbHRlclNvdXJjZVZhbHVlfWBcbiAgICAgICAgICAgIClbMF0sXG4gICAgICAgICAgICBcIlteYS16QS1aMC05X11cIixcbiAgICAgICAgICAgIFwiX1wiXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IG9wdGlvbnNQYXRoID0gYCR7YWN0aW9uLnByb3BzLm9wdGlvbnMucGF0aH0ke2FwcGVuZFRvUGF0aFN0cn1gO1xuICAgICAgICAgIHNvdXJjZVZhbHVlID0gZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aChzb3VyY2VWYWx1ZSwgb3B0aW9uc1BhdGgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb3VyY2VWYWx1ZSA9IGdldE9iamVjdFZhbHVlRnJvbVBhdGgoXG4gICAgICAgICAgc291cmNlVmFsdWUsXG4gICAgICAgICAgYWN0aW9uLnByb3BzLm9wdGlvbnMucGF0aFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShhY3Rpb24ucHJvcHMudmFsdWUuZGVzdGluYXRpb24sIHNvdXJjZVZhbHVlKTtcblxuICAgIG9iamVjdC5GSUVMRF9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkZJRUxEX0NPTkZJRztcbiAgICB0aGlzLmZvcm1EYXRhID0gc291cmNlLm9iamVjdC5GT1JNX0RBVEE7XG4gICAgdGhpcy5hbGxGb3Jtc0RhdGEgPSBzb3VyY2Uub2JqZWN0LkFMTF9GT1JNU19EQVRBO1xuICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSA9IHNvdXJjZS5vYmplY3QuUFJFVklPVVNfRk9STV9EQVRBO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBhcGlDYWxsKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPFRBcGk+IHtcbiAgICBsZXQgYXBpQ29uZmlnID0gdGhpcy5mb3JtQ29uZmlnLmFwaXNbYWN0aW9uLnByb3BzLmZvcm1BcGlLZXldO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbmRsZUFwaUNhbGwoYXBpQ29uZmlnKTtcblxuICAgIGFwaUNvbmZpZyA9IHJlc3BvbnNlLmFwaTtcblxuICAgIHRoaXMuZm9ybUNvbmZpZyA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgYGFwaXMuJHthY3Rpb24ucHJvcHMuZm9ybUFwaUtleX1gLFxuICAgICAgYXBpQ29uZmlnXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybURhdGEgPSBtZXJnZU9iamVjdHModGhpcy5mb3JtRGF0YSwge1xuICAgICAgW2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5XTogYXBpQ29uZmlnLnJlc3BvbnNlLnZhbHVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXBpQ29uZmlnO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBmaWVsZEFwaUNhbGwoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgY29uc3QgYXBpQ29uZmlnID0gYXdhaXQgdGhpcy5hcGlDYWxsKGFjdGlvbiwgb2JqZWN0KTtcblxuICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBmaWVsZE11bHRpcGxlQXBpQ2FsbHMoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVudHJ5cG9pbnRBcGlLZXkgPSBhY3Rpb24ucHJvcHMuYXBpS2V5O1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICBjb25zdCBlbmRwb2ludHMgPSBmaWVsZC5hcGkuZW5kcG9pbnRzO1xuICAgIGNvbnN0IG5leHRBcGlJbmRleCA9IGVuZHBvaW50cy5maW5kSW5kZXgoXG4gICAgICAoYXBpOiBUQXBpRW5kcG9pbnQpID0+IGFwaS5hcGlLZXkgPT0gZW50cnlwb2ludEFwaUtleVxuICAgICk7XG4gICAgY29uc3QgYXBpQ29uZmlnID0gZW5kcG9pbnRzW25leHRBcGlJbmRleF07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaGFuZGxlRmllbGRBcGlDYWxsKGZpZWxkLCBhcGlDb25maWcpO1xuXG4gICAgZmllbGQgPSByZXNwb25zZS5maWVsZDtcbiAgICBmaWVsZC5hcGkuZW5kcG9pbnRzW25leHRBcGlJbmRleF0gPSByZXNwb25zZS5hcGk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGZpZWxkTXVsdGlwbGVBcGlDYWxsc0VuZChhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgbGV0IG11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlcyA9IHt9O1xuICAgIGZpZWxkLmFwaS5lbmRwb2ludHMubWFwKChhcGk6IFRBcGlFbmRwb2ludCkgPT4ge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFwaS5yZXNwb25zZSwgXCJ2YWx1ZVwiKSlcbiAgICAgICAgbXVsdGlwbGVBcGlDYWxsUmVzcG9uc2VzID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgbXVsdGlwbGVBcGlDYWxsUmVzcG9uc2VzLFxuICAgICAgICAgIGAke2FwaS5hcGlLZXl9YCxcbiAgICAgICAgICBhcGkucmVzcG9uc2UudmFsdWVcbiAgICAgICAgKTtcbiAgICB9KTtcbiAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgLi4udGhpcy5mb3JtRGF0YSxcbiAgICAgIFtmaWVsZC5rZXldOiBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXNcbiAgICB9O1xuICAgIHRoaXMucGF0Y2hGb3JtR3JvdXAodGhpcy5mb3JtRGF0YSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHRhc2tBcGlDYWxsKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGNvbnN0IGFwaUNvbmZpZyA9IGF3YWl0IHRoaXMuYXBpQ2FsbChhY3Rpb24sIG9iamVjdCk7XG5cbiAgICB0aGlzLnRhc2tEYXRhID0gbWVyZ2VPYmplY3RzKHRoaXMudGFza0RhdGEsIHtcbiAgICAgIFthY3Rpb24ucHJvcHMuZm9ybUFwaUtleV06IGFwaUNvbmZpZy5yZXNwb25zZS52YWx1ZVxuICAgIH0pO1xuXG4gICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuXG4gICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHRhc2tNdWx0aXBsZUFwaUNhbGxzKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGxldCBtdWx0aXBsZUFwaUNvbmZpZyA9IHRoaXMuZm9ybUNvbmZpZy5hcGlzW2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5XTtcblxuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMsIFwiYXBpS2V5XCIpKSB7XG4gICAgICBjb25zdCBlbnRyeXBvaW50QXBpS2V5ID0gYWN0aW9uLnByb3BzLmFwaUtleTtcbiAgICAgIGNvbnN0IGVuZHBvaW50cyA9IG11bHRpcGxlQXBpQ29uZmlnLmVuZHBvaW50cztcbiAgICAgIGNvbnN0IG5leHRBcGlJbmRleCA9IGVuZHBvaW50cy5maW5kSW5kZXgoXG4gICAgICAgIChhcGk6IFRBcGlFbmRwb2ludCkgPT4gYXBpLmFwaUtleSA9PSBlbnRyeXBvaW50QXBpS2V5XG4gICAgICApO1xuICAgICAgY29uc3QgYXBpQ29uZmlnID0gZW5kcG9pbnRzW25leHRBcGlJbmRleF07XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYW5kbGVBcGlDYWxsKGFwaUNvbmZpZyk7XG5cbiAgICAgIG11bHRpcGxlQXBpQ29uZmlnLmVuZHBvaW50c1tuZXh0QXBpSW5kZXhdID0gcmVzcG9uc2UuYXBpO1xuXG4gICAgICB0aGlzLmZvcm1Db25maWcgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgICBgYXBpcy4ke2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5fWAsXG4gICAgICAgIG11bHRpcGxlQXBpQ29uZmlnXG4gICAgICApO1xuXG4gICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKFxuICAgICAgICB7XG4gICAgICAgICAgRk9STV9DT05GSUc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgICBBUElfQ09ORklHOiBtdWx0aXBsZUFwaUNvbmZpZyxcbiAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICApO1xuXG4gICAgICBhd2FpdCBhcGlzLmNhbGxOZXh0QXBpKG11bHRpcGxlQXBpQ29uZmlnLmVudHJ5cG9pbnQpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdGFza011bHRpcGxlQXBpQ2FsbHNFbmQoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG11bHRpcGxlQXBpQ29uZmlnID0gdGhpcy5mb3JtQ29uZmlnLmFwaXNbYWN0aW9uLnByb3BzLmZvcm1BcGlLZXldO1xuXG4gICAgbGV0IG11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlcyA9IHt9O1xuICAgIG11bHRpcGxlQXBpQ29uZmlnLmVuZHBvaW50cy5tYXAoKGFwaTogVEFwaUVuZHBvaW50KSA9PiB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYXBpLnJlc3BvbnNlLCBcInZhbHVlXCIpKVxuICAgICAgICBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXMgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXMsXG4gICAgICAgICAgYCR7YXBpLmFwaUtleX1gLFxuICAgICAgICAgIGFwaS5yZXNwb25zZS52YWx1ZVxuICAgICAgICApO1xuICAgIH0pO1xuICAgIHRoaXMudGFza0RhdGEgPSB7XG4gICAgICAuLi50aGlzLnRhc2tEYXRhLFxuICAgICAgW2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5XTogbXVsdGlwbGVBcGlDYWxsUmVzcG9uc2VzXG4gICAgfTtcblxuICAgIHRoaXMud2FpdGluZ0ZvckNoYW5nZXMgPSBmYWxzZTtcblxuICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICB9XG5cbiAgZGlhbG9nUmVmOiBhbnkgPSB1bmRlZmluZWQ7XG4gIEBsb2dNZXRob2RcbiAgZGlhbG9nU2hvdyhvcHRpb25zOiBhbnkpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZVxuICAgICAgLm9wZW4ob3B0aW9ucz8uaHRtbCwge1xuICAgICAgICBjbG9zZWFibGU6IHRydWUsXG4gICAgICAgIGRpc21pc3NpYmxlOiB0cnVlLFxuICAgICAgICBsYWJlbDogb3B0aW9ucz8ubGFiZWwsXG4gICAgICAgIHNpemU6IG9wdGlvbnM/LnNpemUgPz8gXCJzXCIsXG4gICAgICAgIGRhdGE6IHsgYnV0dG9uOiBvcHRpb25zPy5idXR0b24gfVxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge31cbiAgICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBkaWFsb2dIaWRlKCkge1xuICAgIGlmICh0aGlzLmRpYWxvZ1JlZikge1xuICAgICAgdGhpcy5kaWFsb2dSZWYuY29tcGxldGUoKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHJlZGlyZWN0VG9VcmwoYWN0aW9uOiBUQWN0aW9uKSB7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcywgXCJ1cmxcIikpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMudXJsLCBcInVybFwiKSkge1xuICAgICAgICBsZXQgdGltZW91dCA9IDIwMDA7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMudXJsLCBcInRpbWVvdXRcIikgJiZcbiAgICAgICAgICB0eXBlb2YgYWN0aW9uLnByb3BzLnVybC50aW1lb3V0ID09IFwibnVtYmVyXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGltZW91dCA9IGFjdGlvbi5wcm9wcy51cmwudGltZW91dDtcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLnVybCwgXCJ0YXJnZXRcIikpIHtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKGFjdGlvbi5wcm9wcy51cmwudXJsLCBhY3Rpb24ucHJvcHMudXJsLnRhcmdldCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGFjdGlvbi5wcm9wcy51cmwudXJsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcGF0Y2hGaWVsZENvbnRyb2xWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0ucGF0Y2hWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzZXRGaWVsZENvbnRyb2xWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0uc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcGF0Y2hGb3JtR3JvdXAoZm9ybURhdGE6IGFueSkge1xuICAgIGlmIChpc1VuZGVmaW5lZCh0aGlzLmZvcm1Hcm91cCkgfHwgaXNVbmRlZmluZWQoZm9ybURhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGZvcm1Hcm91cCBvciBmb3JtRGF0YSBpcyAndW5kZWZpbmVkJy5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGZvcm1EYXRhSW5Ld2lrVUlGb3JtYXQgPSB7fTtcbiAgICAgIGZvciAobGV0IGZpZWxkS2V5IGluIGZvcm1EYXRhKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZmllbGQpICYmICFpc051bGwoZmllbGQpKSB7XG4gICAgICAgICAgZm9ybURhdGFJbkt3aWtVSUZvcm1hdFtmaWVsZEtleV0gPVxuICAgICAgICAgICAgY29udmVydEZvcm1GaWVsZFZhbHVlVG9Ld2lrVUlGb3JtYXQoZmllbGQsIGZvcm1EYXRhW2ZpZWxkS2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoZm9ybURhdGFJbkt3aWtVSUZvcm1hdCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaXNGaWVsZFZhbGlkKGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGRLZXldLnZhbGlkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBpc0ZpZWxkRW5hYmxlZChmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkS2V5XS5lbmFibGVkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBnZXRGb3JtR3JvdXBSYXdWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNob3dQcmV2aWV3KHByZXZpZXdQcm9wZXJ0aWVzOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzID0gbWVyZ2VPYmplY3RzKFxuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcyxcbiAgICAgIHByZXZpZXdQcm9wZXJ0aWVzXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIGlzRW1wdHlWYWx1ZSh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS5zcmMpICYmXG4gICAgICBpc0VtcHR5VmFsdWUodGhpcy5wcmV2aWV3UHJvcGVydGllcy5odG1sLmJlZm9yZSkgJiZcbiAgICAgIGlzRW1wdHlWYWx1ZSh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYWZ0ZXIpXG4gICAgKSB7XG4gICAgICB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLnVuYXZhaWxhYmxlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc2V0UHJldmlld1Byb3BlcnRpZXMgPSAoKSA9PiB7XG4gICAgICB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzID0ge1xuICAgICAgICBodG1sOiB7XG4gICAgICAgICAgYmVmb3JlOiBcIlwiLFxuICAgICAgICAgIGJlZm9yZVN0eWxlczogXCJcIixcbiAgICAgICAgICBhZnRlcjogXCJcIixcbiAgICAgICAgICBhZnRlclN0eWxlczogXCJcIlxuICAgICAgICB9LFxuICAgICAgICBpZnJhbWU6IHtcbiAgICAgICAgICBzcmM6IFwiXCIsXG4gICAgICAgICAgdGl0bGU6IFwiXCJcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogXCJkaWFsb2dcIixcbiAgICAgICAgcG9wdXBGb3JtS2V5OiBcIlwiLFxuICAgICAgICB0aXRsZTogXCJcIixcbiAgICAgICAgc2l6ZTogXCJhdXRvXCIsXG4gICAgICAgIHVuYXZhaWxhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2hvd0RpYWxvZyA9ICgpID0+IHtcbiAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZVxuICAgICAgICAub3Blbih0aGlzLmRpYWxvZywge1xuICAgICAgICAgIGNsb3NlYWJsZTogdHJ1ZSxcbiAgICAgICAgICBkaXNtaXNzaWJsZTogdHJ1ZSxcbiAgICAgICAgICBzaXplOiB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzPy5zaXplIHx8IFwiYXV0b1wiLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdEaWFsb2dSZWYuY29tcGxldGUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICByZXNldFByZXZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgcmVzZXRQcmV2aWV3UHJvcGVydGllcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dQcmV2aWV3ID0gKCkgPT4ge1xuICAgICAgdGhpcy5wcmV2aWV3RGlhbG9nUmVmID0gdGhpcy5wcmV2aWV3RGlhbG9nU2VydmljZVxuICAgICAgICAub3Blbih0aGlzLnByZXZpZXcgfHwgXCJcIilcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIHJlc2V0UHJldmlld1Byb3BlcnRpZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBzd2l0Y2ggKHRoaXMucHJldmlld1Byb3BlcnRpZXMudHlwZSkge1xuICAgICAgY2FzZSBcImRpYWxvZ1wiOlxuICAgICAgICBzaG93RGlhbG9nKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInBvcHVwXCI6XG4gICAgICAgIHNob3dQcmV2aWV3KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2hvd0RpYWxvZygpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNob3dFcnJvclByZXZpZXcocHJldmlld1Byb3BlcnRpZXM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2hvd1ByZXZpZXcoe1xuICAgICAgaHRtbDoge1xuICAgICAgICBhZnRlcjogYDxkaXYgc3R5bGU9XFxcInBhZGRpbmctYm90dG9tOjAuMjVyZW07cGFkZGluZy10b3A6IDAuMjVyZW07cG9zaXRpb246IGFic29sdXRlO21hcmdpbi10b3A6IGNhbGMoNTB2aCk7Zm9udC1zaXplOiAxLjRyZW07YmFja2dyb3VuZDogd2hpdGU7cGFkZGluZzogMnJlbTtib3JkZXItcmFkaXVzOiAxcmVtO2JveC1zaGFkb3c6IDBweCAwcHggMTBweCAtM3B4IGJsYWNrO292ZXJmbG93OiBhdXRvO2hlaWdodDogZml0LWNvbnRlbnQ7bWF4LWhlaWdodDogOTB2aDsgd2lkdGg6IDcwdnc7IG1hcmdpbi1sZWZ0OiBjYWxjKDE1dncpOyBsaW5lLWhlaWdodDogMnJlbTtcXFwiPkVycm9yOiAke3ByZXZpZXdQcm9wZXJ0aWVzLm1lc3NhZ2UubWVzc2FnZX08L2Rpdj5gXG4gICAgICB9LFxuICAgICAgdHlwZTogXCJwb3B1cFwiXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNob3dQb3B1cEZvcm0oXG4gICAgcG9wdXBGb3JtS2V5OiBzdHJpbmcsXG4gICAgcG9wdXBUeXBlOiBcIkRJQUxPR1wiIHwgXCJQT1BVUFwiID0gXCJESUFMT0dcIlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBwb3B1cEZvcm1Db25maWcgPSB0aGlzLmZvcm1Db25maWcucG9wdXBGb3Jtc1twb3B1cEZvcm1LZXldO1xuXG4gICAgdGhpcy5vbkFjdGlvblNob3dQb3B1cEZvcm0uZW1pdCh7XG4gICAgICBhY3RpdmVGb3JtRGF0YTogbWVyZ2VPYmplY3RzKHRoaXMuZm9ybURhdGEsIHRoaXMudGFza0RhdGEpLFxuICAgICAgcG9wdXBGb3JtQ29uZmlnOiBwb3B1cEZvcm1Db25maWcsXG4gICAgICBwb3B1cFR5cGU6IHBvcHVwVHlwZVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhbGVydFNob3codHlwZTogVHVpTm90aWZpY2F0aW9uLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmFsZXJ0U2VydmljZVxuICAgICAgLm9wZW4oYCR7bWVzc2FnZX1gLCB7XG4gICAgICAgIHN0YXR1czpcbiAgICAgICAgICB0eXBlID09PSBcImVycm9yXCJcbiAgICAgICAgICAgID8gVHVpTm90aWZpY2F0aW9uLkVycm9yXG4gICAgICAgICAgICA6IHR5cGUgPT09IFwid2FybmluZ1wiXG4gICAgICAgICAgICA/IFR1aU5vdGlmaWNhdGlvbi5XYXJuaW5nXG4gICAgICAgICAgICA6IHR5cGUgPT09IFwic3VjY2Vzc1wiXG4gICAgICAgICAgICA/IFR1aU5vdGlmaWNhdGlvbi5TdWNjZXNzXG4gICAgICAgICAgICA6IFR1aU5vdGlmaWNhdGlvbi5JbmZvXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIGNvbXBsZXRlKCkge31cbiAgICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyB0YWtlQWN0aW9uT25GaWVsZEdyb3VwKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpIHtcbiAgICBzd2l0Y2ggKGFjdGlvbi5rZXkpIHtcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9HUk9VUF9ISURFOlxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBIaWRlKGFjdGlvbi5wcm9wcy5ncm91cEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX1NIT1c6XG4gICAgICAgIHRoaXMuZmllbGRHcm91cFNob3coYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfRU5BQkxFOlxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBFbmFibGUoYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfRElTQUJMRTpcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwRGlzYWJsZShhY3Rpb24ucHJvcHMuZ3JvdXBLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdGFrZUFjdGlvbihhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KSB7XG4gICAgc3dpdGNoIChhY3Rpb24ua2V5KSB7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfSElERTpcbiAgICAgICAgdGhpcy5maWVsZEhpZGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfU0hPVzpcbiAgICAgICAgdGhpcy5maWVsZFNob3coYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfRElTQUJMRTpcbiAgICAgICAgdGhpcy5maWVsZERpc2FibGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfRU5BQkxFOlxuICAgICAgICB0aGlzLmZpZWxkRW5hYmxlKGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX1JFU0VUOlxuICAgICAgICB0aGlzLmZpZWxkUmVzZXQoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfRVJST1JfU0hPVzpcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy5tZXNzYWdlLCBcInNvdXJjZVwiKSkge1xuICAgICAgICAgIGNvbnN0IGZpZWxkRXJyb3JTaG93X1NvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgICAgICAgIGxldCBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID1cbiAgICAgICAgICAgIGF3YWl0IGZpZWxkRXJyb3JTaG93X1NvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICAgICAgICAgIGFjdGlvbi5wcm9wcy5tZXNzYWdlLnNvdXJjZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID09IFwibnVtYmVyXCJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGZpZWxkRXJyb3JTaG93U291cmNlVmFsdWUgPSBTdHJpbmcoZmllbGRFcnJvclNob3dTb3VyY2VWYWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkRXJyb3JTaG93U291cmNlVmFsdWUgPSBcIlwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFjdGlvbiA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgXCJwcm9wcy5tZXNzYWdlLm1lc3NhZ2VcIixcbiAgICAgICAgICAgIGZpZWxkRXJyb3JTaG93U291cmNlVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmllbGRFcnJvclNob3coYWN0aW9uLnByb3BzLmZpZWxkS2V5LCBhY3Rpb24ucHJvcHMubWVzc2FnZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0VSUk9SX0hJREU6XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMubWVzc2FnZSwgXCJzb3VyY2VcIikpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZEVycm9ySGlkZV9Tb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICAgICAgICBsZXQgZmllbGRFcnJvckhpZGVTb3VyY2VWYWx1ZSA9XG4gICAgICAgICAgICBhd2FpdCBmaWVsZEVycm9ySGlkZV9Tb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgICAgICBhY3Rpb24ucHJvcHMubWVzc2FnZS5zb3VyY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZmllbGRFcnJvckhpZGVTb3VyY2VWYWx1ZSA9PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICB0eXBlb2YgZmllbGRFcnJvckhpZGVTb3VyY2VWYWx1ZSA9PSBcIm51bWJlclwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlID0gU3RyaW5nKGZpZWxkRXJyb3JIaWRlU291cmNlVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3Rpb24gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIFwicHJvcHMubWVzc2FnZS5tZXNzYWdlXCIsXG4gICAgICAgICAgICBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkRXJyb3JIaWRlKGFjdGlvbi5wcm9wcy5maWVsZEtleSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9NRVNTQUdFX1NIT1c6XG4gICAgICAgIHRoaXMuZmllbGRNZXNzYWdlU2hvdyhhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfTUVTU0FHRVNfSElERTpcbiAgICAgICAgdGhpcy5maWVsZE1lc3NhZ2VIaWRlKGFjdGlvbi5wcm9wcy5maWVsZEtleSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfVkFMVUU6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0VmFsdWUoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfRklFTERfREVGQVVMVF9WQUxVRTpcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRGaWVsZERlZmF1bHRWYWx1ZShhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9BUElfU1RBVFVTOlxuICAgICAgICBhd2FpdCB0aGlzLnNldEFwaVN0YXR1cyhhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9BUElfSEVBREVSX1ZBTFVFOlxuICAgICAgICBhd2FpdCB0aGlzLnNldEFwaUhlYWRlclZhbHVlKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0FQSV9IRUFERVJfVkFMSURJVFk6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0QXBpSGVhZGVyVmFsaWRpdHkoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfQVBJX0JPRFlfVkFMVUU6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0QXBpQm9keVZhbHVlKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0FQSV9CT0RZX1ZBTElESVRZOlxuICAgICAgICBhd2FpdCB0aGlzLnNldEFwaUJvZHlWYWxpZGl0eShhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9EUk9QRE9XTl9PUFRJT05TOlxuICAgICAgICBhd2FpdCB0aGlzLnNldERyb3Bkb3duT3B0aW9ucyhhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9GSUVMRF9WQUxJRElUWTpcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRGaWVsZFZhbGlkaXR5KGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuSEFORExFX0NPTk5FQ1RFRF9FTEVNRU5UUzpcbiAgICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAgICB7IGtleTogYWN0aW9uLnByb3BzLmZpZWxkS2V5IH0sXG4gICAgICAgICAgXCJPTl9BQ1RJT05cIlxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5BUElfQ0FMTDpcbiAgICAgICAgYXdhaXQgdGhpcy5maWVsZEFwaUNhbGwoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5BUElfQ0FMTF9NVUxUSVBMRTpcbiAgICAgICAgYXdhaXQgdGhpcy5maWVsZE11bHRpcGxlQXBpQ2FsbHMoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5BUElfQ0FMTF9NVUxUSVBMRV9FTkQ6XG4gICAgICAgIGF3YWl0IHRoaXMuZmllbGRNdWx0aXBsZUFwaUNhbGxzRW5kKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuVEFTS19BUElfQ0FMTDpcbiAgICAgICAgYXdhaXQgdGhpcy50YXNrQXBpQ2FsbChhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlRBU0tfQVBJX0NBTExfTVVMVElQTEU6XG4gICAgICAgIGF3YWl0IHRoaXMudGFza011bHRpcGxlQXBpQ2FsbHMoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5UQVNLX0FQSV9DQUxMX01VTFRJUExFX0VORDpcbiAgICAgICAgYXdhaXQgdGhpcy50YXNrTXVsdGlwbGVBcGlDYWxsc0VuZChhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlJFRElSRUNUX1RPX1VSTDpcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy51cmwsIFwic291cmNlXCIpKSB7XG4gICAgICAgICAgY29uc3QgcmVkaXJlY3RUb1VybF9Tb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICAgICAgICBsZXQgcmVkaXJlY3RUb1VybFNvdXJjZVZhbHVlID1cbiAgICAgICAgICAgIGF3YWl0IHJlZGlyZWN0VG9VcmxfU291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICAgICAgYWN0aW9uLnByb3BzLnVybC5zb3VyY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoaXNFbXB0eVN0cmluZyhyZWRpcmVjdFRvVXJsU291cmNlVmFsdWUpKSB7XG4gICAgICAgICAgICByZWRpcmVjdFRvVXJsU291cmNlVmFsdWUgPSBcIlwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFjdGlvbiA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgXCJwcm9wcy51cmwudXJsXCIsXG4gICAgICAgICAgICByZWRpcmVjdFRvVXJsU291cmNlVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVkaXJlY3RUb1VybChhY3Rpb24pO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlBSRVZJRVdfRElBTE9HX1NIT1c6XG4gICAgICAgIHRoaXMuc2hvd1ByZXZpZXcoYWN0aW9uLnByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuUFJFVklFV19FUlJPUl9TSE9XOlxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLm1lc3NhZ2UsIFwic291cmNlXCIpKSB7XG4gICAgICAgICAgY29uc3QgcHJldmlld0Vycm9yU2hvd19Tb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICAgICAgICBsZXQgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID1cbiAgICAgICAgICAgIGF3YWl0IHByZXZpZXdFcnJvclNob3dfU291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICAgICAgYWN0aW9uLnByb3BzLm1lc3NhZ2Uuc291cmNlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIHByZXZpZXdFcnJvclNob3dTb3VyY2VWYWx1ZSA9PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICB0eXBlb2YgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID09IFwibnVtYmVyXCJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByZXZpZXdFcnJvclNob3dTb3VyY2VWYWx1ZSA9IFN0cmluZyhwcmV2aWV3RXJyb3JTaG93U291cmNlVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmV2aWV3RXJyb3JTaG93U291cmNlVmFsdWUgPSBcIlwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFjdGlvbiA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgXCJwcm9wcy5tZXNzYWdlLm1lc3NhZ2VcIixcbiAgICAgICAgICAgIHByZXZpZXdFcnJvclNob3dTb3VyY2VWYWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93RXJyb3JQcmV2aWV3KGFjdGlvbi5wcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlBPUFVQX0ZPUk1fU0hPVzpcbiAgICAgICAgdGhpcy5zaG93UG9wdXBGb3JtKFxuICAgICAgICAgIGFjdGlvbi5wcm9wcy5wb3B1cEZvcm1LZXksXG4gICAgICAgICAgYWN0aW9uLnByb3BzPy5wb3B1cFR5cGUgPz8gXCJESUFMT0dcIlxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TVE9QX1dBSVRJTkc6XG4gICAgICAgIHRoaXMud2FpdGluZ0ZvckNoYW5nZXMgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuTk9USUZJQ0FUSU9OX0VSUk9SX1NIT1c6XG4gICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24odHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5Lk5PVElGSUNBVElPTl9FUlJPUl9ISURFOlxuICAgICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKGZhbHNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuUkVTVU1FX1RBU0tfRVhFQ1VUSU9OOlxuICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNUT1BfVEFTS19FWEVDVVRJT046XG4gICAgICAgIHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5ESUFMT0dfU0hPVzpcbiAgICAgICAgdGhpcy5kaWFsb2dTaG93KHtcbiAgICAgICAgICBodG1sOiBhY3Rpb24ucHJvcHM/Lmh0bWwsXG4gICAgICAgICAgbGFiZWw6IGFjdGlvbi5wcm9wcz8ubGFiZWwsXG4gICAgICAgICAgc2l6ZTogYWN0aW9uLnByb3BzPy5zaXplLFxuICAgICAgICAgIGJ1dHRvbjogYWN0aW9uLnByb3BzPy5idXR0b25cbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkRJQUxPR19ISURFOlxuICAgICAgICB0aGlzLmRpYWxvZ0hpZGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0FWRV9GT1JNOlxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2xpY2tTYXZlRm9ybSh1bmRlZmluZWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5BTEVSVF9TSE9XOlxuICAgICAgICB0aGlzLmFsZXJ0U2hvdyhhY3Rpb24ucHJvcHMudHlwZSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImt3aWtpZC1mb3JtLWNvbnRhaW5lclwiXG4gICpuZ0lmPVwiIWxvYWRpbmdcIlxuPlxuICA8ZGl2XG4gICAgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1oZWFkZXItY29udGFpbmVyXCJcbiAgICAqbmdJZj1cIlxuICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy50aXRsZT8uaGlkZGVuIHx8XG4gICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LmxvZ28/LmhpZGRlbiB8fFxuICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5zdGVwcz8uaGlkZGVuIHx8XG4gICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LmJhY2tCdXR0b24/LmhpZGRlblxuICAgIFwiXG4gID5cbiAgICA8aW1nXG4gICAgICBpZD1cInVmLWhlYWRlci1sb2dvXCJcbiAgICAgICpuZ0lmPVwiIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5sb2dvPy5oaWRkZW4gJiYgaXNNb2JpbGVWaWV3XCJcbiAgICAgIFtzcmNdPVwiZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LmxvZ28/LnNyY1wiXG4gICAgICBbYWx0XT1cImZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5sb2dvPy5hbHRcIlxuICAgICAgW3N0eWxlXT1cIlxuICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlcj8ubG9nbz8uc3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcbiAgICAgIFwiXG4gICAgLz5cbiAgICA8ZGl2IGlkPVwidWYtZm9ybS1maWVsZHMtaGVhZGVyLW1haW5cIj5cbiAgICAgIDxkaXYgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1oZWFkZXItbGVmdFwiPlxuICAgICAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIuYmFja0J1dHRvbi5oaWRkZW4gJiYgaXNNb2JpbGVWaWV3XG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiYmFja0J1dHRvbi5kaXNhYmxlZFwiXG4gICAgICAgICAgW3Nob3dMb2FkZXJdPVwiYmFja0J1dHRvbi5zaG93TG9hZGVyXCJcbiAgICAgICAgICBhcHBlYXJhbmNlPVwibW9ub1wiXG4gICAgICAgICAgaWNvbj1cInR1aUljb25BcnJvd0xlZnRcIlxuICAgICAgICAgIHNoYXBlPVwicm91bmRlZFwiXG4gICAgICAgICAgKG9uQ2xpY2spPVwiXG4gICAgICAgICAgICBoYW5kbGVPbkNsaWNrR29CYWNrKFxuICAgICAgICAgICAgICAkZXZlbnQsXG4gICAgICAgICAgICAgIGZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLmJhY2tCdXR0b24ubW9kZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIFwiXG4gICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1oZWFkZXItcmlnaHRcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGlkPVwidWYtZm9ybS1maWVsZHMtdGl0bGVcIlxuICAgICAgICAgICpuZ0lmPVwiIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLnRpdGxlLmhpZGRlblwiXG4gICAgICAgICAgPnt7IGZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLnRpdGxlLmxhYmVsIH19PC9kaXZcbiAgICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1zdGVwc1wiXG4gICAgICAgICAgKm5nSWY9XCIhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIuc3RlcHMuaGlkZGVuXCJcbiAgICAgICAgPlxuICAgICAgICAgIFN0ZXAge3sgZm9ybUNvbmZpZy5zZXF1ZW5jZU5vIH19IG9mIHt7IGZvcm1Db25maWcuZm9ybXNMaXN0TGVuZ3RoIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGhyXG4gICAgICAqbmdJZj1cIlxuICAgICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIudGl0bGUuaGlkZGVuIHx8XG4gICAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlci5zdGVwcy5oaWRkZW4gfHxcbiAgICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLmJhY2tCdXR0b24uaGlkZGVuXG4gICAgICBcIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8Zm9ybVxuICAgIGNsYXNzPVwia3dpa2lkLWZvcm0gc2hvd1wiXG4gICAgW3N0eWxlXT1cImZvcm1Db25maWcucHJvcGVydGllcz8ubWFpbj8uc3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0Zvcj1cIlxuICAgICAgICBsZXQgZmllbGQgb2YgZm9ybUZpZWxkcztcbiAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgdHJhY2tCeTogZ2V0VW5pcXVlSWRlbnRpZmllclxuICAgICAgXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmaWVsZC50eXBlXCI+XG4gICAgICAgIDwhLS0gSFRNTCBDb250ZW50IC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaHRtbCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBbaW5uZXJIdG1sXT1cImZpZWxkLmh0bWwgfCBrd2lrdWlTYWZlSHRtbFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBGb3JtIFRpdGxlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGl0bGUnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ0aXRsZVwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZD8ucmVzZXRcIlxuICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwid2hpdGVibG9ja1wiXG4gICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgbGFiZWw9XCJSZXNldFwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tSZXNldEZvcm1GaWVsZHMoJGV2ZW50LCBmaWVsZClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gQnV0dG9uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYnV0dG9uJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJmaWVsZD8ucHJvcGVydGllcz8uYXBwZWFyYW5jZSA/PyAncHJpbWFyeSdcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNsYXNzXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtpY29uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pY29uXCJcbiAgICAgICAgICAgICAgW2ljb25SaWdodF09XCJmaWVsZD8ucHJvcGVydGllcz8uaWNvblJpZ2h0XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkPy5rZXlcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3NoYXBlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaGFwZVwiXG4gICAgICAgICAgICAgIFtzaG93TG9hZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5sb2FkaW5nID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zdHlsZXNcIlxuICAgICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uJ1wiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tGb3JtRmllbGRCdXR0b24oZmllbGQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBJbnB1dCBUZXh0IC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dFxuICAgICAgICAgICAgICBbY2FzZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY2FzZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIEVtYWlsIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZW1haWwnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtZW1haWxcbiAgICAgICAgICAgICAgW2Nhc2VdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNhc2VcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2RvbWFpbnNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmRvbWFpbnNcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1lbWFpbD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIFBhc3N3b3JkIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncGFzc3dvcmQnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtcGFzc3dvcmRcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtoaW50Q29udGVudF09XCJmaWVsZD8ucHJvcGVydGllcz8uaGludENvbnRlbnRcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1wYXNzd29yZD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIFRleHRhcmVhIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dGFyZWEnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktdGV4dGFyZWFcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS10ZXh0YXJlYT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIENoZWNrYm94IC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktY2hlY2tib3hcbiAgICAgICAgICAgICAgW2NvbnRlbnRBbGlnbl09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGVudEFsaWduID8/ICdsZWZ0J1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemUgPz8gJ2wnXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICBbdmFyaWFudF09XCJmaWVsZD8ucHJvcGVydGllcz8udmFyaWFudCA/PyAnYmxvY2snXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWNoZWNrYm94PlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gSW5wdXQgTnVtYmVyIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LW51bWJlclxuICAgICAgICAgICAgICBbZGVjaW1hbF09XCJmaWVsZD8ucHJvcGVydGllcz8uZGVjaW1hbFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW21heF09XCJmaWVsZD8ucHJvcGVydGllcz8ubWF4XCJcbiAgICAgICAgICAgICAgW21pbl09XCJmaWVsZD8ucHJvcGVydGllcz8ubWluXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4ID8/ICcnXCJcbiAgICAgICAgICAgICAgW3ByZWNpc2lvbl09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlY2lzaW9uXCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4ID8/ICcnXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1udW1iZXI+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBJbnB1dCBEYXRlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1kYXRlXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW21heF09XCJmaWVsZD8ucHJvcGVydGllcz8ubWF4XCJcbiAgICAgICAgICAgICAgW21heENhbGN1bGF0ZWRGcm9tVG9kYXldPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LnByb3BlcnRpZXM/Lm1heENhbGN1bGF0ZWRGcm9tVG9kYXlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW21pbl09XCJmaWVsZD8ucHJvcGVydGllcz8ubWluXCJcbiAgICAgICAgICAgICAgW21pbkNhbGN1bGF0ZWRGcm9tVG9kYXldPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LnByb3BlcnRpZXM/Lm1pbkNhbGN1bGF0ZWRGcm9tVG9kYXlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1kYXRlPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gSW5wdXQgUGhvbmUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidwaG9uZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1waG9uZVxuICAgICAgICAgICAgICBbY291bnRyeUNvZGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvdW50cnlDb2RlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbcGhvbmVNYXNrQWZ0ZXJDb3VudHJ5Q29kZV09XCJcbiAgICAgICAgICAgICAgICBmaWVsZD8ucHJvcGVydGllcz8ucGhvbmVNYXNrQWZ0ZXJDb3VudHJ5Q29kZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Bvc3RmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBvc3RmaXhcIlxuICAgICAgICAgICAgICBbcHJlZml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVmaXhcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFtyZW1vdmVDb3VudHJ5Q29kZUZyb21WYWx1ZV09XCJcbiAgICAgICAgICAgICAgICBmaWVsZD8ucHJvcGVydGllcz8ucmVtb3ZlQ291bnRyeUNvZGVGcm9tVmFsdWVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtcGhvbmU+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBJbnB1dCBSYWRpbyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3JhZGlvJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgW3R1aUxhYmVsXT1cImxhYmVsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IGF1dG87IHBhZGRpbmc6IDBweCAwLjVyZW1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8a3dpa3VpLWlucHV0LXJhZGlvXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJmaWVsZD8ub3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgW29yaWVudGF0aW9uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5vcmllbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICAgIFtzaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaXplXCJcbiAgICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtcmFkaW8+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsYWJlbFRlbXBsYXRlPlxuICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgIGNsYXNzPVwidHVpLXNwYWNlX2JvdHRvbS0yXCJcbiAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxiPlxuICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycz8ucmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc2VsZWN0J1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LXNlbGVjdFxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cImZpZWxkLm9wdGlvbnNcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbc2VhcmNoYWJsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2VhcmNoYWJsZVwiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LXNlbGVjdD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIElucHV0IFNsaWRlciAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NsaWRlcidcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1zbGlkZXJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbbWF4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXhcIlxuICAgICAgICAgICAgICBbbWluXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5taW5cIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Bvc3RmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBvc3RmaXhcIlxuICAgICAgICAgICAgICBbcHJlZml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVmaXhcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFtxdWFudHVtXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5xdWFudHVtXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxuICAgICAgICAgICAgICBbc3RlcHNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnN0ZXBzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtc2xpZGVyPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gQVBJIENhbGwgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhcGknXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uLWFwaS1jYWxsXG4gICAgICAgICAgICAgIFthcGlTdGF0dXNdPVwiZmllbGQ/LmFwaT8uc3RhdHVzPy52YWx1ZVwiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJmaWVsZD8uY2xhc3NcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8uYXBpPy5zdGF0dXM/LmxhYmVsc1tmaWVsZD8uYXBpPy5zdGF0dXM/LnZhbHVlXVwiXG4gICAgICAgICAgICAgIFtzaG93TG9hZGVyXT1cImZpZWxkPy5kaXNhYmxlZCA9PT0gJ2xvYWRpbmcnXCJcbiAgICAgICAgICAgICAgc3R5bGVzPVwid2lkdGg6IGZpdC1jb250ZW50XCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlT25DbGlja0FwaUNhbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uLWFwaS1jYWxsPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gTW9iaWxlIE9UUCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ290cCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1vdHBcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbbWFza109XCJmaWVsZD8ucHJvcGVydGllcz8ubWFza1wiXG4gICAgICAgICAgICAgIFttb2RlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tb2RlXCJcbiAgICAgICAgICAgICAgW290cExlbmd0aF09XCJmaWVsZD8ucHJvcGVydGllcz8ub3RwTGVuZ3RoXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1vdHA+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBBYWRoYWFyIE51bWJlciAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FhZGhhYXItbnVtYmVyJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LWFhZGhhYXJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbbWFza109XCJmaWVsZD8ucHJvcGVydGllcz8ubWFza1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LWFhZGhhYXI+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBQcmV2aWV3IEltYWdlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW1hZ2VcbiAgICAgICAgICAgICAgW2FsdFRleHRdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmFsdFRleHRcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNsYXNzXCJcbiAgICAgICAgICAgICAgW2h0bWxdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lmh0bWxcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ltYWdlU3JjXT1cImZpZWxkPy5kZWZhdWx0Py52YWx1ZT8udmFsdWUgPz8gJydcIlxuICAgICAgICAgICAgICBbaW1hZ2VUeXBlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pbWFnZVR5cGVcIlxuICAgICAgICAgICAgICBbbG9hZGluZ1R5cGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmxvYWRpbmdUeXBlXCJcbiAgICAgICAgICAgICAgW3N0eWxlc109XCJmaWVsZD8ucHJvcGVydGllcz8uc3R5bGVzXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbWFnZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIEZpbGUgVXBsb2FkIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZmlsZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIFt0dWlMYWJlbF09XCJsYWJlbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiBhdXRvXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1maWxlc1xuICAgICAgICAgICAgICAgIFthY2NlcHRdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmFjY2VwdFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jbGFzc1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2ZpbGVzXT1cImZpbGVzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICAgIFtpZF09XCJmaWVsZD8ua2V5XCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmxhYmVsXCJcbiAgICAgICAgICAgICAgICBbbGlua109XCJmaWVsZD8ucHJvcGVydGllcz8ubGlua1wiXG4gICAgICAgICAgICAgICAgW21heEZpbGVTaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXhGaWxlU2l6ZVwiXG4gICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgW3NldEZpbGVUeXBlc1RvRm9ybV09XCJbJ05PUk1BTCddXCJcbiAgICAgICAgICAgICAgICBbc3R5bGVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zdHlsZXNcIlxuICAgICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWVGaWxlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChnZXRSZW1vdmVkRmlsZSk9XCJoYW5kbGVSZW1vdmVkRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LWZpbGVzPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDBweCAwLjI1cmVtOyBtYXJnaW4tYm90dG9tOiAwLjI1cmVtXCJcbiAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxiPlxuICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycz8ucmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIENhbWVyYSBDYXB0dXJlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2FwdHVyZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LmxhYmVsICE9PSAnJyAmJlxuICAgICAgICAgICAgICAgIGZpZWxkPy5sYWJlbCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgZmllbGQ/LmxhYmVsICE9PSBudWxsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogYXV0b1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZD8ubGFiZWwgIT09ICcnXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDBweCAwLjI1cmVtOyBtYXJnaW4tYm90dG9tOiAwLjVyZW1cIlxuICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGI+XG4gICAgICAgICAgICAgICAgICB7eyBmaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWVsZC52YWxpZGF0b3JzPy5yZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9iPlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1jYW1lcmFcbiAgICAgICAgICAgICAgW2J1dHRvblRleHRdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmJ1dHRvblRleHRcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lmljb25cIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbWVkaWFGaWxlc109XCJtZWRpYUZpbGVzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFtzaG93TWVkaWFGaWxlc109XCJmaWVsZD8ucHJvcGVydGllcz8uc2hvd01lZGlhRmlsZXNcIlxuICAgICAgICAgICAgICBbdHlwZV09XCInQ0FQVFVSRSdcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tJbnB1dENhbWVyYSgkZXZlbnQsIGZpZWxkKVwiXG4gICAgICAgICAgICAgIChnZXRSZW1vdmVkRmlsZSk9XCJoYW5kbGVPbkNsaWNrR2V0UmVtb3ZlZE1lZGlhRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1jYW1lcmE+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBTdGFyIFJhdGluZyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3N0YXItcmF0aW5nJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgW3R1aUxhYmVsXT1cImxhYmVsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IGF1dG87IHBhZGRpbmc6IDBweCAwLjVyZW1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8a3dpa3VpLXN0YXItcmF0aW5nXG4gICAgICAgICAgICAgICAgW2NvbG9yXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb2xvclwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lmljb25cIlxuICAgICAgICAgICAgICAgIFtpY29uTWFya2VkXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pY29uTWFya2VkXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgW21heF09XCJmaWVsZD8ucHJvcGVydGllcz8ubWF4XCJcbiAgICAgICAgICAgICAgICBbbWluXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5taW5cIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2l6ZVwiXG4gICAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwva3dpa3VpLXN0YXItcmF0aW5nPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgPGJcbiAgICAgICAgICAgICAgICAgID57eyBmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXIgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycz8ucmVxdWlyZWRcIj4qPC9zcGFuPjwvYlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZm9ybT5cbiAgPGRpdlxuICAgIGNsYXNzPVwia3dpa2lkLWZvcm0tYnV0dG9uc1wiXG4gICAgKm5nSWY9XCJcbiAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnZpZXdGb3Jtc0J1dHRvbi5oaWRkZW4gfHxcbiAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnNhdmVCdXR0b24uaGlkZGVuXG4gICAgXCJcbiAgPlxuICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAqbmdJZj1cIlxuICAgICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci52aWV3Rm9ybXNCdXR0b24uaGlkZGVuICYmIGlzTW9iaWxlVmlld1xuICAgICAgXCJcbiAgICAgIFthcHBlYXJhbmNlXT1cIidzZWNvbmRhcnknXCJcbiAgICAgIFtkaXNhYmxlZF09XCJ2aWV3Rm9ybXNCdXR0b24uZGlzYWJsZWRcIlxuICAgICAgW2xhYmVsXT1cImZvcm1Db25maWcucHJvcGVydGllcy5mb290ZXIudmlld0Zvcm1zQnV0dG9uLmxhYmVsXCJcbiAgICAgIFtzaG93TG9hZGVyXT1cInZpZXdGb3Jtc0J1dHRvbi5zaG93TG9hZGVyXCJcbiAgICAgIFtzdHlsZXNdPVwiJ3dpZHRoOiAxMDAlJ1wiXG4gICAgICAob25DbGljayk9XCJoYW5kbGVPbkNsaWNrVmlld0Zvcm1zKCRldmVudClcIlxuICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgPGt3aWt1aS1idXR0b25cbiAgICAgICpuZ0lmPVwiIWZvcm1Db25maWcucHJvcGVydGllcy5mb290ZXIuc2F2ZUJ1dHRvbi5oaWRkZW5cIlxuICAgICAgW2Rpc2FibGVkXT1cInNhdmVGb3JtQnV0dG9uLmRpc2FibGVkXCJcbiAgICAgIFtsYWJlbF09XCJmb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnNhdmVCdXR0b24ubGFiZWxcIlxuICAgICAgW3Nob3dMb2FkZXJdPVwic2F2ZUZvcm1CdXR0b24uc2hvd0xvYWRlclwiXG4gICAgICBbc3R5bGVzXT1cIid3aWR0aDogMTAwJSdcIlxuICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlT25DbGlja1NhdmVGb3JtKCRldmVudClcIlxuICAgID48L2t3aWt1aS1idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2XG4gIGNsYXNzPVwia3dpa2lkLWZvcm0tY29udGFpbmVyLWxvYWRpbmdcIlxuICAqbmdJZj1cImxvYWRpbmdcIlxuPlxuICA8ZGl2XG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgW10uY29uc3RydWN0b3IoNyk7IGxldCBpID0gaW5kZXhcIlxuICAgIGNsYXNzPVwibGFyZ2Utd3JhcHBlciB0dWktc2tlbGV0b24gdHVpLXNrZWxldG9uX3JvdW5kZWRcIlxuICA+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxrd2lrdWktbG9hZGVyPjwva3dpa3VpLWxvYWRlcj5cblxuPHR1aS1wdXNoXG4gIGlkPVwiZmllbGQtZXJyb3Itbm90aWZpY2F0aW9uXCJcbiAgKnR1aVB1c2g9XCJzaG93RXJyb3JOb3RpZmljYXRpb25cIlxuICBoZWFkaW5nPVwiTWlzc2luZy9JbmNvcnJlY3QgRmllbGRzIVwiXG4gIHR5cGU9XCJFcnJvclwiXG4gIChjbG9zZSk9XCJ0b2dnbGVFcnJvck5vdGlmaWNhdGlvbihmYWxzZSlcIlxuPlxuICA8dHVpLXN2Z1xuICAgIHNyYz1cInR1aUljb25YQ2lyY2xlXCJcbiAgICBzdHlsZT1cImNvbG9yOiAjZmZmICFpbXBvcnRhbnRcIlxuICA+XG4gIDwvdHVpLXN2Zz5cbjwvdHVpLXB1c2g+XG5cbjxuZy10ZW1wbGF0ZVxuICAjcHJldmlld1xuICBsZXQtcHJldmlld1xuPlxuICA8dHVpLXByZXZpZXdcbiAgICBbcm90YXRhYmxlXT1cImZhbHNlXCJcbiAgICBbem9vbWFibGVdPVwiZmFsc2VcIlxuICAgIGNsYXNzPVwicHJldmlldy1jb250YWluZXJcIlxuICA+XG4gICAgPHR1aS1wcmV2aWV3LXRpdGxlICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMudGl0bGUgIT09ICcnXCI+e3tcbiAgICAgIHByZXZpZXdQcm9wZXJ0aWVzLnRpdGxlXG4gICAgfX08L3R1aS1wcmV2aWV3LXRpdGxlPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZVwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5iZWZvcmUgIT09ICcnXCJcbiAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWh0bWwgcHJldmlldy1odG1sLWJlZm9yZVwiXG4gICAgICAgIFtzdHlsZV09XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYmVmb3JlU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cInByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYmVmb3JlIHwga3dpa3VpU2FmZUh0bWxcIlxuICAgICAgPjwvZGl2PlxuXG4gICAgICA8IS0tIENvbnRlbnQgd2l0aGluIHRoZSBpZnJhbWUgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicHJldmlldy1pZnJhbWUtY29udGVudFwiXG4gICAgICAgIFtzdHlsZV09XCJcbiAgICAgICAgICBwcmV2aWV3UHJvcGVydGllcz8uaWZyYW1lPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclxuICAgICAgICBcIlxuICAgICAgICAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS5zcmMgIT09ICcnXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBZb3VyIEhUTUwgY29udGVudCBoZXJlIC0tPlxuICAgICAgICA8aWZyYW1lXG4gICAgICAgICAgW3NyY109XCJwcmV2aWV3UHJvcGVydGllcy5pZnJhbWUuc3JjIHwga3dpa3VpU2FmZVVybFwiXG4gICAgICAgICAgZnJhbWVib3JkZXI9XCIwXCJcbiAgICAgICAgICBhbGxvdz1cImFjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlXCJcbiAgICAgICAgICBhbGxvd2Z1bGxzY3JlZW5cbiAgICAgICAgICBbdGl0bGVdPVwicHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnRpdGxlXCJcbiAgICAgICAgICBjbGFzcz1cInByZXZpZXctaWZyYW1lXCJcbiAgICAgICAgICBzY3JvbGxpbmc9XCJhdXRvXCJcbiAgICAgICAgPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYWZ0ZXIgIT09ICcnXCJcbiAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWh0bWwgcHJldmlldy1odG1sLWFmdGVyXCJcbiAgICAgICAgW3N0eWxlXT1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5hZnRlclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgW2lubmVySHRtbF09XCJwcmV2aWV3UHJvcGVydGllcy5odG1sLmFmdGVyIHwga3dpa3VpU2FmZUh0bWxcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzLnVuYXZhaWxhYmxlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy11bmF2YWlsYWJsZVwiPlxuICAgICAgICA8dHVpLXN2Z1xuICAgICAgICAgIHNyYz1cInR1aUljb25GaWxlTGFyZ2VcIlxuICAgICAgICAgIGNsYXNzPVwidC1pY29uXCJcbiAgICAgICAgPjwvdHVpLXN2Zz5cbiAgICAgICAgPGRpdj5QcmV2aWV3IHVuYXZhaWxhYmxlPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxidXR0b25cbiAgICAgIHR1aUljb25CdXR0b25cbiAgICAgIHR1aVByZXZpZXdBY3Rpb25cbiAgICAgIGljb249XCJ0dWlJY29uQ2xvc2VMYXJnZVwiXG4gICAgICB0aXRsZT1cIkNsb3NlXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cInByZXZpZXcuY29tcGxldGUoKVwiXG4gICAgPjwvYnV0dG9uPlxuICA8L3R1aS1wcmV2aWV3PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNkaWFsb2dcbiAgbGV0LWRpYWxvZ1xuPlxuICA8ZGl2IGNsYXNzPVwicHJldmlldy1jb250YWluZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXByZXZpZXdQcm9wZXJ0aWVzLnVuYXZhaWxhYmxlXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmJlZm9yZSAhPT0gJydcIlxuICAgICAgICBjbGFzcz1cInByZXZpZXctaHRtbCBwcmV2aWV3LWh0bWwtYmVmb3JlXCJcbiAgICAgICAgW3N0eWxlXT1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5iZWZvcmVTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgIFtpbm5lckh0bWxdPVwicHJldmlld1Byb3BlcnRpZXMuaHRtbC5iZWZvcmUgfCBrd2lrdWlTYWZlSHRtbFwiXG4gICAgICA+PC9kaXY+XG5cbiAgICAgIDwhLS0gQ29udGVudCB3aXRoaW4gdGhlIGlmcmFtZSAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWlmcmFtZS1jb250ZW50XCJcbiAgICAgICAgW3N0eWxlXT1cIlxuICAgICAgICAgIHByZXZpZXdQcm9wZXJ0aWVzPy5pZnJhbWU/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXG4gICAgICAgIFwiXG4gICAgICAgICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnNyYyAhPT0gJydcIlxuICAgICAgPlxuICAgICAgICA8IS0tIFlvdXIgSFRNTCBjb250ZW50IGhlcmUgLS0+XG4gICAgICAgIDxpZnJhbWVcbiAgICAgICAgICBbc3JjXT1cInByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS5zcmMgfCBrd2lrdWlTYWZlVXJsXCJcbiAgICAgICAgICBmcmFtZWJvcmRlcj1cIjBcIlxuICAgICAgICAgIGFsbG93PVwiYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmVcIlxuICAgICAgICAgIGFsbG93ZnVsbHNjcmVlblxuICAgICAgICAgIFt0aXRsZV09XCJwcmV2aWV3UHJvcGVydGllcy5pZnJhbWUudGl0bGVcIlxuICAgICAgICAgIGNsYXNzPVwicHJldmlldy1pZnJhbWVcIlxuICAgICAgICAgIHNjcm9sbGluZz1cImF1dG9cIlxuICAgICAgICA+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5hZnRlciAhPT0gJydcIlxuICAgICAgICBjbGFzcz1cInByZXZpZXctaHRtbCBwcmV2aWV3LWh0bWwtYWZ0ZXJcIlxuICAgICAgICBbc3R5bGVdPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmFmdGVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cInByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYWZ0ZXIgfCBrd2lrdWlTYWZlSHRtbFwiXG4gICAgICA+PC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LXVuYXZhaWxhYmxlXCI+XG4gICAgICAgIDx0dWktc3ZnXG4gICAgICAgICAgc3JjPVwidHVpSWNvbkZpbGVMYXJnZVwiXG4gICAgICAgICAgY2xhc3M9XCJ0LWljb25cIlxuICAgICAgICA+PC90dWktc3ZnPlxuICAgICAgICA8ZGl2PlByZXZpZXcgdW5hdmFpbGFibGU8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXZcbiAgaWQ9XCJrd2lraWQtY2FtZXJhLWNvbnRhaW5lclwiXG4gICpuZ0lmPVwiaXNTaG93Q2FtZXJhQ2FwdHVyZVwiXG4+XG4gIDxkaXZcbiAgICBpZD1cImt3aWtpZC1jYW1lcmEtd3JhcHBlclwiXG4gICAgW2NsYXNzLmZ1bGxzY3JlZW5dPVwiaXNTaG93Q2FtZXJhRnVsbHNjcmVlblwiXG4gID5cbiAgICA8a3dpa2lkLWNhbWVyYVxuICAgICAgW3R5cGVdPVwiJ0NBUFRVUkUnXCJcbiAgICAgIFtpbWFnZV09XCJjYW1lcmFDYXB0dXJlSW1hZ2VcIlxuICAgICAgW2NvbmZpZ109XCJjYW1lcmFDYXB0dXJlQ29uZmlnXCJcbiAgICAgIChnZXRJbWFnZSk9XCJoYW5kbGVHZXRJbWFnZSgkZXZlbnQpXCJcbiAgICAgIChvbkNsaWNrU2F2ZSk9XCJoYW5kbGVPbkNsaWNrU2F2ZUNhbWVyYUNhcHR1cmUoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciBzbG90PVwiaGVhZGVyXCI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyB3aWR0aDogMTAwJTsgbWF4LXdpZHRoOiAxMDAlOyBwYWRkaW5nOiAwcmVtXCI+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImZsZXg6IDE7IHRleHQtYWxpZ246IGxlZnRcIj4gPC9kaXY+XG4gICAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiY2FtZXJhQ2FwdHVyZUNvbmZpZz8uaGVhZGVyPy50aXRsZSAhPT0gJydcIlxuICAgICAgICAgICAgYXBwZWFyYW5jZT1cIndoaXRlYmxvY2tcIlxuICAgICAgICAgICAgW2xhYmVsXT1cImNhbWVyYUNhcHR1cmVDb25maWc/LmhlYWRlcj8udGl0bGVcIlxuICAgICAgICAgICAgc2hhcGU9XCJyb3VuZGVkXCJcbiAgICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBtaW4td2lkdGg6IG1heC1jb250ZW50O1xuICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgICAgICAgICAgZ2FwOiAxcmVtO1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImNhbWVyYUNhcHR1cmVDb25maWc/LmhlYWRlcj8uaXNFeHBhbmRcIlxuICAgICAgICAgICAgICBpZD1cImt3aWtpZC1jYW1lcmEtaGVhZGVyLWVubGFyZ2UtYnV0dG9uXCJcbiAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cIndoaXRlYmxvY2tcIlxuICAgICAgICAgICAgICBbaWNvbl09XCJcbiAgICAgICAgICAgICAgICBpc1Nob3dDYW1lcmFGdWxsc2NyZWVuID8gJ3R1aUljb25NaW5pbWl6ZTInIDogJ3R1aUljb25NYXhpbWl6ZTInXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIHNoYXBlPVwicm91bmRlZFwiXG4gICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImlzU2hvd0NhbWVyYUZ1bGxzY3JlZW4gPSAhaXNTaG93Q2FtZXJhRnVsbHNjcmVlblwiXG4gICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uPlxuICAgICAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJjYW1lcmFDYXB0dXJlQ29uZmlnPy5oZWFkZXI/LmlzQ2xvc2VcIlxuICAgICAgICAgICAgICBpZD1cImt3aWtpZC1jYW1lcmEtaGVhZGVyLWNsb3NlLWJ1dHRvblwiXG4gICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJ3aGl0ZWJsb2NrXCJcbiAgICAgICAgICAgICAgaWNvbj1cInR1aUljb25DbG9zZUxhcmdlXCJcbiAgICAgICAgICAgICAgc2hhcGU9XCJyb3VuZGVkXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlT25DbGlja0Nsb3NlQ2FtZXJhKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2t3aWtpZC1jYW1lcmE+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
2219
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL3JlbmRlcmVyL2Zvcm0tdmlldy9mb3JtLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2Zvcm0tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBR04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsZUFBZSxFQUVmLGdCQUFnQixFQUNoQixlQUFlLEVBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBQ1YsSUFBSSxFQUNKLE1BQU0sRUFHTixVQUFVLEVBQ1Ysb0JBQW9CLEVBRXBCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsYUFBYSxFQUNiLFlBQVksRUFDWixlQUFlLEVBQ2YsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3JCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFD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QkFBaUIsTUFPakIsV0FBVyxNQXFCWCxnQkFBZ0IsTUFPaEIsVUFBVSxNQXdEVixjQUFjLE1BYWQsY0FBYyxNQWFkLGdCQUFnQixNQVloQixnQkFBZ0IsTUFZVixRQUFRLE1BaUJSLG9CQUFvQixNQXdDcEIsWUFBWSxNQXNCWixpQkFBaUIsTUFzQmpCLG9CQUFvQixNQXNCcEIsZUFBZSxNQXNCZixrQkFBa0IsTUFzQmxCLGdCQUFnQixNQXNCaEIsa0JBQWtCLE1BdUNsQixPQUFPLE1BcUJQLFlBQVksTUFTWixxQkFBcUIsTUFnQnJCLHdCQUF3QixNQW1CeEIsV0FBVyxNQWVYLG9CQUFvQixNQTJDcEIsdUJBQXVCLE1Bd0I3QixVQUFVLE1BZVYsVUFBVSxNQU9WLGFBQWEsTUFzQmIsc0JBQXNCLE1BS3RCLG9CQUFvQixNQUtwQixjQUFjLE1BaUJkLFlBQVksTUFLWixjQUFjLE1BS2QscUJBQXFCLE1BS3JCLFdBQVcsTUFpRlgsZ0JBQWdCLE1BVWhCLGFBQWEsTUFjYixTQUFTLE1Ba0JILHNCQUFzQixNQW9CdEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiQHRhaWdhLXVpL2FkZG9uLXByZXZpZXdcIjtcbmltcG9ydCB7XG4gIFR1aUFsZXJ0U2VydmljZSxcbiAgVHVpRGlhbG9nQ29udGV4dCxcbiAgVHVpRGlhbG9nU2VydmljZSxcbiAgVHVpTm90aWZpY2F0aW9uXG59IGZyb20gXCJAdGFpZ2EtdWkvY29yZVwiO1xuaW1wb3J0IHsgVHVpUHVzaFNlcnZpY2UgfSBmcm9tIFwiQHRhaWdhLXVpL2tpdFwiO1xuaW1wb3J0IHtcbiAgQWN0aW9uLFxuICBDb25kaXRpb24sXG4gIEVTb3VyY2VLZXksXG4gIFJ1bGUsXG4gIFNvdXJjZSxcbiAgVEFjdGlvbixcbiAgVFZhbGlkYXRpb24sXG4gIFZhbGlkYXRpb24sXG4gIGNoZWNrT2JqZWN0S2V5RXhpc3RzLFxuICBjaGVja09iamVjdFBhdGhFeGlzdHMsXG4gIGdldE9iamVjdERlZXBDb3B5LFxuICBnZXRPYmplY3RWYWx1ZUZyb21QYXRoLFxuICBpc0VtcHR5U3RyaW5nLFxuICBpc0VtcHR5VmFsdWUsXG4gIGlzTm90RW1wdHlWYWx1ZSxcbiAgaXNOdWxsLFxuICBpc1VuZGVmaW5lZCxcbiAgbG9nTWV0aG9kLFxuICBtZXJnZU9iamVjdHMsXG4gIG1lcmdlT2JqZWN0c0RlZXAsXG4gIHJlcGxhY2VTdHJpbmcsXG4gIHNldFZhbHVlVG9PYmplY3RQYXRoXG59IGZyb20gXCJrd2lraWQtdG9vbGtpdFwiO1xuaW1wb3J0IHsgS3dpa1VJTG9hZGVyU2VydmljZSB9IGZyb20gXCJrd2lrdWlcIjtcbmltcG9ydCB7IHBhaXJ3aXNlIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgQ29udmVydGVyIH0gZnJvbSBcIi4uL2NvbmZpZy1jb252ZXJ0ZXIvY29uZmlnLWNvbnZlcnRlclwiO1xuaW1wb3J0IHsgRklFTERfUFJPUEVSVElFUyB9IGZyb20gXCIuLi9jb25maWctY29udmVydGVyL2NvbmZpZy1jb252ZXJ0ZXIuY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBFRm9ybXNMaXN0U3RhdHVzIH0gZnJvbSBcIi4uL2Zvcm1zLWxpc3QvZm9ybXMtbGlzdC5kZWZpbml0aW9uc1wiO1xuaW1wb3J0IHsgRUFjdGlvbktleSB9IGZyb20gXCIuL2RlZmluaXRpb25zL2Zvcm0tdmlldy5hY3Rpb25zLmRlZmluaXRpb25cIjtcbmltcG9ydCB7XG4gIEVBcGlSZXF1ZXN0VXJsVHlwZSxcbiAgRUFwaVN0YXR1c1R5cGUsXG4gIFRBcGksXG4gIFRBcGlFbmRwb2ludCxcbiAgVEFwaVJlcXVlc3RCb2R5XG59IGZyb20gXCIuL2RlZmluaXRpb25zL2Zvcm0tdmlldy5hcGlzLmRlZmluaXRpb25cIjtcbmltcG9ydCB7XG4gIEVNZXNzYWdlVHlwZSxcbiAgVEZvcm1WaWV3R29CYWNrTW9kZSxcbiAgVE1lc3NhZ2Vcbn0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmNvbW1vbnMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHtcbiAgRUZpZWxkVHlwZSxcbiAgVEZpZWxkQXBpQ2FsbCxcbiAgVEZpZWxkVGl0bGVcbn0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZm9ybS12aWV3LmZpZWxkcy5kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBLd2lrSURGb3JtVmlld1NlcnZpY2UgfSBmcm9tIFwiLi9mb3JtLXZpZXcuc2VydmljZVwiO1xuaW1wb3J0IHsgQXBpcyB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmFwaXMuaGVscGVyXCI7XG5pbXBvcnQge1xuICBhcHBlbmRGb3JtRmllbGRNZXNzYWdlLFxuICBjb252ZXJ0Rm9ybUZpZWxkRW1wdHlWYWx1ZVRvS3dpa1VJRm9ybWF0LFxuICBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb0t3aWtVSUZvcm1hdCxcbiAgY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdCxcbiAgZmlsdGVyRHVwbGljYXRlc0ZpbGVzLFxuICBmaWx0ZXJEdXBsaWNhdGVzTWVkaWFGaWxlcyxcbiAgZ2V0Rm9ybUZpZWxkQnlLZXksXG4gIGdldEZvcm1GaWVsZEluZGV4QnlLZXksXG4gIGhpZ2hsaWdodEZvcm1GaWVsZEVycm9yLFxuICByZW1vdmVGb3JtRmllbGRNZXNzYWdlLFxuICBzaG93Rm9ybUZpZWxkRXJyb3Jcbn0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcuZmllbGRzLmhlbHBlclwiO1xuaW1wb3J0IHsgRm9ybVZhbGlkYXRpb24gfSBmcm9tIFwiLi9oZWxwZXJzL2Zvcm0tdmlldy5mb3JtLXZhbGlkYXRpb25zLmhlbHBlclwiO1xuaW1wb3J0IHsgVGFza3MgfSBmcm9tIFwiLi9oZWxwZXJzL2Zvcm0tdmlldy50YXNrcy5oZWxwZXJcIjtcbmltcG9ydCB7IEVUeXBlTG9ncyB9IGZyb20gXCIuL2RlZmluaXRpb25zL2Zyb20tdmlldy5sb2dzLmRlZmluaXRpb25cIjtcbmltcG9ydCB7XG4gIGdldExhbmd1YWdlLFxuICB1cGRhdGVEaXNwbGF5TGFuZ3VhZ2Vcbn0gZnJvbSBcIi4uL2NvbmZpZy1jb252ZXJ0ZXIvY29uZmlnLWNvbnZlcnRlci5oZWxwZXJcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImt3aWtpZC1mb3JtLXZpZXdcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9mb3JtLXZpZXcuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2Zvcm0tdmlldy5jb21wb25lbnQuc2Nzc1wiLCBcIi4uL3NoYXJlZC5zY3NzXCJdLFxuICBwcm92aWRlcnM6IFtLd2lrSURGb3JtVmlld1NlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEt3aWtJREZvcm1WaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZChcInByZXZpZXdcIilcbiAgcmVhZG9ubHkgcHJldmlldzogVGVtcGxhdGVSZWY8VHVpRGlhbG9nQ29udGV4dDx2b2lkPj47XG5cbiAgQFZpZXdDaGlsZChcImRpYWxvZ1wiKVxuICByZWFkb25seSBkaWFsb2c6IFRlbXBsYXRlUmVmPFR1aURpYWxvZ0NvbnRleHQ8dm9pZD4+O1xuXG4gIEBJbnB1dCgpXG4gIGZvcm1Db25maWc6IGFueTtcblxuICBASW5wdXQoKVxuICBmb3JtRGF0YTogYW55O1xuXG4gIEBJbnB1dCgpXG4gIGlzTW9iaWxlVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGFsbEZvcm1zRGF0YTogYW55O1xuXG4gIEBJbnB1dCgpXG4gIHVzZXJDb25maWc6IGFueTtcblxuICBASW5wdXQoKVxuICBhcGlDYWxsUmVzcG9uc2U6IGFueTtcblxuICBASW5wdXQoKVxuICBidXR0b25DbGlja1Jlc3BvbnNlOiBhbnk7XG5cbiAgQElucHV0KClcbiAgcG9wdXBGb3JtQ2FsbGJhY2s6IGFueSA9IHVuZGVmaW5lZDtcblxuICBAT3V0cHV0KClcbiAgb25DbGlja0dvQmFjazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KClcbiAgb25DbGlja1ZpZXdGb3JtczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KClcbiAgZ2V0VW5zYXZlZERhdGFTdGF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KClcbiAgb25DbGlja1NhdmVGb3JtOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrQXBpQ2FsbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KClcbiAgZ2V0TG9nczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KClcbiAgb25BY3Rpb25TaG93UG9wdXBGb3JtOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrRm9ybUZpZWxkQnV0dG9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGZpZWxkR3JvdXBzOiBhbnkgPSB7fTtcbiAgZm9ybUZpZWxkczogYW55W10gPSBbXTtcbiAgcHJldmlvdXNGb3JtRGF0YTogYW55ID0ge307XG5cbiAgcmVhZG9ubHkgREVGQVVMVF9DQU1FUkFfQ0FQVFVSRV9DT05GSUc6IGFueSA9XG4gICAgRklFTERfUFJPUEVSVElFUy5jYXB0dXJlLmNhbWVyYUNvbmZpZztcbiAgaXNTaG93Q2FtZXJhQ2FwdHVyZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1Nob3dDYW1lcmFGdWxsc2NyZWVuOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbWVyYUNhcHR1cmVGaWVsZEtleTogc3RyaW5nID0gXCJcIjtcbiAgY2FtZXJhQ2FwdHVyZUltYWdlOiBzdHJpbmcgPSBcIlwiO1xuICBjYW1lcmFDYXB0dXJlQ29uZmlnOiBhbnkgPSB0aGlzLkRFRkFVTFRfQ0FNRVJBX0NBUFRVUkVfQ09ORklHO1xuXG4gIHByZXZpZXdQcm9wZXJ0aWVzOiBhbnkgPSB7XG4gICAgaHRtbDoge1xuICAgICAgYmVmb3JlOiBcIlwiLFxuICAgICAgYmVmb3JlU3R5bGVzOiBcIlwiLFxuICAgICAgYWZ0ZXI6IFwiXCIsXG4gICAgICBhZnRlclN0eWxlczogXCJcIlxuICAgIH0sXG4gICAgaWZyYW1lOiB7XG4gICAgICBzcmM6IFwiXCIsXG4gICAgICB0aXRsZTogXCJcIlxuICAgIH0sXG4gICAgdHlwZTogXCJkaWFsb2dcIixcbiAgICBzaXplOiBcImF1dG9cIixcbiAgICBwb3B1cEZvcm1LZXk6IFwiXCIsXG4gICAgdGl0bGU6IFwiXCIsXG4gICAgdW5hdmFpbGFibGU6IGZhbHNlXG4gIH07XG5cbiAgbG9hZGluZzogYm9vbGVhbiA9IHRydWU7XG4gIGFwaUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYmFja0J1dHRvbiA9IHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgc2hvd0xvYWRlcjogZmFsc2VcbiAgfTtcbiAgdmlld0Zvcm1zQnV0dG9uID0ge1xuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBzaG93TG9hZGVyOiBmYWxzZVxuICB9O1xuICBzYXZlRm9ybUJ1dHRvbiA9IHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgc2hvd0xvYWRlcjogZmFsc2VcbiAgfTtcblxuICBmaWxlczogYW55ID0ge307XG4gIG1lZGlhRmlsZXM6IGFueSA9IHt9O1xuXG4gIHN0b3BUYXNrRXhlY3V0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHdhaXRpbmdGb3JDaGFuZ2VzOiBib29sZWFuID0gZmFsc2U7XG4gIHBvcHVwRm9ybUNvbmZpZzogYW55ID0gdW5kZWZpbmVkO1xuICBwb3B1cEZvcm1EYXRhOiBhbnkgPSB7fTtcbiAgdGFza0RhdGE6IGFueSA9IHt9O1xuXG4gIHByZXZpZXdEaWFsb2dSZWY6IGFueTtcblxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZm9ybVZpZXdTZXJ2aWNlOiBLd2lrSURGb3JtVmlld1NlcnZpY2UsXG4gICAgQEluamVjdChUdWlQdXNoU2VydmljZSlcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHVzaDogVHVpUHVzaFNlcnZpY2UsXG4gICAgQEluamVjdChUdWlBbGVydFNlcnZpY2UpXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFsZXJ0U2VydmljZTogVHVpQWxlcnRTZXJ2aWNlLFxuICAgIEBJbmplY3QoVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UpXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmV2aWV3RGlhbG9nU2VydmljZTogVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UsXG4gICAgQEluamVjdChUdWlEaWFsb2dTZXJ2aWNlKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nU2VydmljZTogVHVpRGlhbG9nU2VydmljZSxcbiAgICBwdWJsaWMgbG9hZGVyU2VydmljZTogS3dpa1VJTG9hZGVyU2VydmljZVxuICApIHt9XG5cbiAgQGxvZ01ldGhvZFxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5pbml0Rm9ybUNvbmZpZyh0aGlzLmZvcm1Db25maWcpO1xuXG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHt9XG5cbiAgQGxvZ01ldGhvZFxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgdmVyaWZ5Q2hhbmdlID0gKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hhbmdlcywga2V5KSAmJiAhY2hhbmdlc1trZXldLmZpcnN0Q2hhbmdlO1xuICAgIH07XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImZvcm1EYXRhXCIpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlLCBcImRhdGFcIikgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hhbmdlcy5mb3JtRGF0YS5jdXJyZW50VmFsdWUsIFwiZXh0ZW5kZWREYXRhXCIpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIC4uLmNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlW1wiZGF0YVwiXVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIC4uLmNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJwb3B1cEZvcm1DYWxsYmFja1wiKSkge1xuICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZShjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgICAgY29uc3QgcG9wdXBGb3JtRGF0YSA9XG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZS5wb3B1cEZvcm1EYXRhLFxuICAgICAgICAgICAgXCJkYXRhXCJcbiAgICAgICAgICApICYmXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZS5wb3B1cEZvcm1EYXRhLFxuICAgICAgICAgICAgXCJleHRlbmRlZERhdGFcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgID8gY2hhbmdlcy5wb3B1cEZvcm1DYWxsYmFjay5jdXJyZW50VmFsdWUucG9wdXBGb3JtRGF0YVtcImRhdGFcIl1cbiAgICAgICAgICAgIDogY2hhbmdlcy5wb3B1cEZvcm1DYWxsYmFjay5jdXJyZW50VmFsdWUucG9wdXBGb3JtRGF0YTtcblxuICAgICAgICBjb25zdCBwb3B1cEZvcm1Db25maWcgPVxuICAgICAgICAgIGNoYW5nZXMucG9wdXBGb3JtQ2FsbGJhY2suY3VycmVudFZhbHVlLnBvcHVwRm9ybUNvbmZpZztcblxuICAgICAgICB0aGlzLnBvcHVwRm9ybURhdGEgPSBtZXJnZU9iamVjdHModGhpcy5wb3B1cEZvcm1EYXRhLCB7XG4gICAgICAgICAgW3BvcHVwRm9ybUNvbmZpZy5rZXldOiBwb3B1cEZvcm1EYXRhXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZm9ybURhdGEgPSBtZXJnZU9iamVjdHModGhpcy5mb3JtRGF0YSwgdGhpcy5wb3B1cEZvcm1EYXRhKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoXG4gICAgICAgICAgICBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgIFwic3RvcFRhc2tFeGVjdXRpb25cIlxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5zdG9wVGFza0V4ZWN1dGlvbiA9XG4gICAgICAgICAgICBjaGFuZ2VzLnBvcHVwRm9ybUNhbGxiYWNrLmN1cnJlbnRWYWx1ZS5zdG9wVGFza0V4ZWN1dGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiaXNNb2JpbGVWaWV3XCIpKSB7XG4gICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IGNoYW5nZXMuaXNNb2JpbGVWaWV3LmN1cnJlbnRWYWx1ZTtcbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImFwaUNhbGxSZXNwb25zZVwiKSkge1xuICAgICAgdGhpcy5hcGlDYWxsUmVzcG9uc2UgPSBjaGFuZ2VzLmFwaUNhbGxSZXNwb25zZS5jdXJyZW50VmFsdWU7XG5cbiAgICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLmFwaUNhbGxSZXNwb25zZT8ucmVzcG9uc2U7XG5cbiAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgICBjYXNlIEVGaWVsZFR5cGUuRklMRTpcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRGaWxlID0gZ2V0T2JqZWN0RGVlcENvcHkoe1xuICAgICAgICAgICAgICBpZDogdXVpZHY0KCksXG4gICAgICAgICAgICAgIC4uLnJlc3BvbnNlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWxlcyh1cGRhdGVkRmlsZSwgXCJOT1JNQUxcIiwgdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZEZpbGUgPSBnZXRPYmplY3REZWVwQ29weSh7XG4gICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcbiAgICAgICAgICAgICAgLi4udGhpcy5hcGlDYWxsUmVzcG9uc2U/LnBheWxvYWQ/Lm1ldGFkYXRhXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWxlcyh1cGRhdGVkRmlsZSwgXCJFUlJPUlwiLCB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFRmllbGRUeXBlLkNBUFRVUkU6XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aGlzLmNhbWVyYUNhcHR1cmVJbWFnZSA9IFwiXCI7XG4gICAgICAgICAgICB0aGlzLmNhbWVyYUNhcHR1cmVGaWVsZEtleSA9IFwiXCI7XG4gICAgICAgICAgICB0aGlzLmlzU2hvd0NhbWVyYUNhcHR1cmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSByZXNwb25zZT8uaW1hZ2VfdXJsO1xuXG4gICAgICAgICAgICB0aGlzLm1lZGlhRmlsZXNbdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5XSA9IGdldE9iamVjdERlZXBDb3B5KFtcbiAgICAgICAgICAgICAgaW1hZ2VcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5XS5zZXRWYWx1ZShcbiAgICAgICAgICAgICAgZ2V0T2JqZWN0RGVlcENvcHkoW2ltYWdlLCBcIlwiLCBudWxsXSksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tcbiAgICAgICAgICAgICAgdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5XG4gICAgICAgICAgICBdLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe1xuICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZpbGUgVXBsb2FkIGZvciBJbWFnZSBGYWlsZWRcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiYnV0dG9uQ2xpY2tSZXNwb25zZVwiKSkge1xuICAgICAgdGhpcy5idXR0b25DbGlja1Jlc3BvbnNlID0gY2hhbmdlcy5idXR0b25DbGlja1Jlc3BvbnNlLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZSwgXCJrZXlcIikpIHtcbiAgICAgICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkoXG4gICAgICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgIHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZT8ua2V5XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZSwgXCJkZWZhdWx0XCIpKSB7XG4gICAgICAgICAgZmllbGQuZGVmYXVsdCA9IGdldE9iamVjdERlZXBDb3B5KHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZS5kZWZhdWx0KTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5idXR0b25DbGlja1Jlc3BvbnNlW1wiZGVmYXVsdFwiXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLCBcIm1lc3NhZ2VzXCIpKSB7XG4gICAgICAgICAgZmllbGQubWVzc2FnZXMgPSBnZXRPYmplY3REZWVwQ29weSh0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UubWVzc2FnZXMpO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2VbXCJtZXNzYWdlc1wiXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5idXR0b25DbGlja1Jlc3BvbnNlLCBcInZhbGlkYXRpb25cIikpIHtcbiAgICAgICAgICBmaWVsZC52YWxpZGF0aW9uID0gZ2V0T2JqZWN0RGVlcENvcHkoXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UudmFsaWRhdGlvblxuICAgICAgICAgICk7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZVtcInZhbGlkYXRpb25cIl07XG4gICAgICAgIH1cblxuICAgICAgICBmaWVsZCA9IGdldE9iamVjdERlZXBDb3B5KFxuICAgICAgICAgIG1lcmdlT2JqZWN0cyhmaWVsZCwgdGhpcy5idXR0b25DbGlja1Jlc3BvbnNlKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQudmFsaWRhdGlvbiwgXCJ0cmlnZ2Vyc1wiKSAmJlxuICAgICAgICAgICAgZmllbGQudmFsaWRhdGlvbi50cmlnZ2Vycy5pbmNsdWRlcyhcIk9OX1JFU1BPTlNFXCIpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IG5ldyBWYWxpZGF0aW9uKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBhd2FpdCB2YWxpZGF0aW9ucy52YWxpZGF0ZShmaWVsZC52YWxpZGF0aW9uKTtcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJhbGxGb3Jtc0RhdGFcIikpIHtcbiAgICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gY2hhbmdlcy5hbGxGb3Jtc0RhdGEuY3VycmVudFZhbHVlO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiZm9ybUNvbmZpZ1wiKSkge1xuICAgICAgdGhpcy5mb3JtQ29uZmlnID0gY2hhbmdlcy5mb3JtQ29uZmlnLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0Rm9ybUNvbmZpZyh0aGlzLmZvcm1Db25maWcpO1xuICAgICAgfSkoKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGluaXRGb3JtQ29uZmlnKGZvcm1Db25maWc6IGFueSkge1xuICAgIGZvcm1Db25maWcgPSBuZXcgQ29udmVydGVyKCkuY29udmVydEZvcm1Db25maWcoZm9ybUNvbmZpZyk7XG5cbiAgICBmb3JtQ29uZmlnID0gbmV3IENvbnZlcnRlcigpLnVwZGF0ZUZvcm1Db25maWdQcm9wZXJ0aWVzKGZvcm1Db25maWcpO1xuXG4gICAgdGhpcy5zZXRGb3JtRmllbGRzRnJvbUZvcm1Db25maWcoZm9ybUNvbmZpZyk7XG5cbiAgICB0aGlzLnNldEZvcm1GaWVsZEdyb3Vwc0Zyb21Gb3JtQ29uZmlnKGZvcm1Db25maWcpO1xuXG4gICAgdGhpcy5zZXRGb3JtRGF0YUZyb21BbGxGb3Jtc0RhdGEoKTtcblxuICAgIC8qKlxuICAgICAqIFBSRSBGb3JtIFRhc2tzXG4gICAgICogMS4gQVBJIENhbGxzLlxuICAgICAqIDIuIEFsdGVyIERhdGEgU3RydWN0dXJlLlxuICAgICAqIDMuIEFsdGVyIEZvcm0gQ29uZmlnLlxuICAgICAqL1xuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuZm9ybUNvbmZpZywgXCJ0YXNrc1wiKSAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5mb3JtQ29uZmlnLnRhc2tzLCBcInByZVwiKVxuICAgICkge1xuICAgICAgZm9yIChsZXQgcHJlVGFzayBvZiB0aGlzLmZvcm1Db25maWcudGFza3MucHJlKSB7XG4gICAgICAgIGNvbnN0IHRhc2sgPSBuZXcgVGFza3MoXG4gICAgICAgICAgcHJlVGFzayxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBGT1JNX0NPTkZJRzogdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gPSBmYWxzZTtcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHByZVRhc2ssIFwid2FpdFwiKSkge1xuICAgICAgICAgIHRoaXMud2FpdGluZ0ZvckNoYW5nZXMgPSBwcmVUYXNrLndhaXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGFzay5leGVjdXRlKCk7XG5cbiAgICAgICAgLy8gV2FpdCBmb3IgbmdPbkNoYW5nZXMgdG8gYmUgY2FsbGVkIGJlZm9yZSBjb250aW51aW5nIHRvIHRoZSBuZXh0IHRhc2tcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBjb25zdCBpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLndhaXRpbmdGb3JDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCAxMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnN0b3BUYXNrRXhlY3V0aW9uKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5mb3JtRGF0YSA9IG1lcmdlT2JqZWN0cyh0aGlzLmZvcm1EYXRhLCB0aGlzLnBvcHVwRm9ybURhdGEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0b3BUYXNrRXhlY3V0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtR3JvdXAgPSBhd2FpdCB0aGlzLmZvcm1WaWV3U2VydmljZS5jcmVhdGVGb3JtR3JvdXAoXG4gICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICB0aGlzLmZvcm1EYXRhLFxuICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgdGhpcy5hbGxGb3Jtc0RhdGEsXG4gICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBGb3Igc29tZSByZWFzb24gaWYgdGhlaXIgYSBmaWVsZCBvZiB0eXBlICdJTUFHRScgdGhlblxuICAgICAqIGZvcm1EYXRhIGlzIGFkZGluZyBhICd1bmRlZmluZWQnIGtleSB3aXRoIGxhc3QgaW1hZ2UncyB2YWx1ZSBmcm9tIHRoZSBhcnJheS5cbiAgICAgKiBCZWxvdyBwaWVjZSBvZiBjb2RlIGlzIHRvIHJlbW92ZSB0aGF0IHJlZHVuZGVudCB2YWx1ZSBmcm9tIGZvcm1EYXRhLlxuICAgICAqL1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmZvcm1EYXRhLCBcInVuZGVmaW5lZFwiKSkge1xuICAgICAgZGVsZXRlIHRoaXMuZm9ybURhdGFbXCJ1bmRlZmluZWRcIl07XG4gICAgfVxuXG4gICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5mb3JtRmllbGRzKSB7XG4gICAgICBpZiAoZmllbGQuaXNGb3JtRWxlbWVudCkge1xuICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEgPSB7XG4gICAgICAgICAgLi4udGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgIFtmaWVsZC5rZXldOiBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXG4gICAgICAgICAgKVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZm9ybURhdGEgPSB7XG4gICAgICAgICAgLi4udGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICBbZmllbGQua2V5XTogY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdChcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICAgIClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5GSUxFKSB7XG4gICAgICAgICAgdGhpcy5maWxlc1tmaWVsZC5rZXldID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5DQVBUVVJFKSB7XG4gICAgICAgICAgdGhpcy5jYW1lcmFDYXB0dXJlRmllbGRLZXkgPSBcIlwiO1xuICAgICAgICAgIHRoaXMuY2FtZXJhQ2FwdHVyZUltYWdlID0gXCJcIjtcbiAgICAgICAgICB0aGlzLm1lZGlhRmlsZXNbZmllbGQua2V5XSA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgIC5waXBlKHBhaXJ3aXNlKCkpXG4gICAgICAgICAgLnN1YnNjcmliZSgoW3ByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZV0pID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSA9IHtcbiAgICAgICAgICAgICAgLi4udGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICBbZmllbGQua2V5XTogY29udmVydEZvcm1GaWVsZFZhbHVlVG9TdGFuZGFyZEZvcm1hdChcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBwcmV2aW91c1ZhbHVlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEgPSB7XG4gICAgICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5GSUxFKSB7XG4gICAgICAgICAgICAgIHRoaXMuZmlsZXNbZmllbGQua2V5XSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkNBUFRVUkUpIHtcbiAgICAgICAgICAgICAgdGhpcy5jYW1lcmFDYXB0dXJlRmllbGRLZXkgPSBcIlwiO1xuICAgICAgICAgICAgICB0aGlzLmNhbWVyYUNhcHR1cmVJbWFnZSA9IFwiXCI7XG4gICAgICAgICAgICAgIHRoaXMubWVkaWFGaWxlc1tmaWVsZC5rZXldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInZhbGlkYXRpb25cIikpIHtcbiAgICAgICAgICBpZiAoZmllbGQudmFsaWRhdGlvbi50cmlnZ2Vycy5pbmNsdWRlcyhcIk9OX0lOSVRcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0gbmV3IFZhbGlkYXRpb24oXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBGSUVMRF9DT05GSUc6IGZpZWxkLFxuICAgICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGF3YWl0IHZhbGlkYXRpb25zLnZhbGlkYXRlKGZpZWxkLnZhbGlkYXRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKSkge1xuICAgICAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiT05fSU5JVFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzZXRGb3JtRmllbGRzRnJvbUZvcm1Db25maWcoZm9ybUNvbmZpZzogYW55KSB7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm1Db25maWcsIFwiZmllbGRzXCIpKSB7XG4gICAgICB0aGlzLmZvcm1GaWVsZHMgPSBmb3JtQ29uZmlnLmZpZWxkcztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybUNvbmZpZywgXCJtdWx0aUZvcm1cIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm1Db25maWcubXVsdGlGb3JtLCBcImZpZWxkc1wiKVxuICAgICkge1xuICAgICAgdGhpcy5mb3JtRmllbGRzID0gZm9ybUNvbmZpZy5tdWx0aUZvcm0uZmllbGRzO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgc2V0Rm9ybUZpZWxkR3JvdXBzRnJvbUZvcm1Db25maWcoZm9ybUNvbmZpZzogYW55KSB7XG4gICAgdGhpcy5maWVsZEdyb3VwcyA9IGZvcm1Db25maWcuZmllbGRHcm91cHM7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNldEZvcm1EYXRhRnJvbUFsbEZvcm1zRGF0YSgpIHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5hbGxGb3Jtc0RhdGEsIHRoaXMuZm9ybUNvbmZpZy5rZXkpKSB7XG4gICAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuYWxsRm9ybXNEYXRhW3RoaXMuZm9ybUNvbmZpZy5rZXldO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm1EYXRhLCBcImRhdGFcIikgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybURhdGEsIFwiZXh0ZW5kZWREYXRhXCIpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIC4uLmZvcm1EYXRhW1wiZGF0YVwiXVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIC4uLmZvcm1EYXRhXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybURhdGEgPSB7fTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwQWN0aW9ucyhcbiAgICBjaGlsZEZpZWxkR3JvdXBDb25maWc6IGFueSxcbiAgICBwYXJlbnRGaWVsZDogYW55XG4gICkge1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhjaGlsZEZpZWxkR3JvdXBDb25maWcsIFwicnVsZXNcIikpIHtcbiAgICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlKGNoaWxkRmllbGRHcm91cENvbmZpZy5ydWxlcywge1xuICAgICAgICBGSUVMRF9DT05GSUc6IHBhcmVudEZpZWxkLFxuICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgfSkubWFwcGluZygpO1xuXG4gICAgICBmb3IgKGxldCBhY3Rpb24gb2YgY2hpbGRGaWVsZEdyb3VwQ29uZmlnLmFjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uU3VjY2VzcyA9IG5ldyBDb25kaXRpb24oXG4gICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgICBydWxlc01hcHBpbmdcbiAgICAgICAgKS5ldmFsdWF0ZSgpO1xuXG4gICAgICAgIGlmIChjb25kaXRpb25TdWNjZXNzKSB7XG4gICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb24oXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogcGFyZW50RmllbGQsXG4gICAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uT25GaWVsZEdyb3VwLmJpbmQodGhpcylcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwKFxuICAgIGN1cnJlbnRGaWVsZDogYW55LFxuICAgIGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWc6IGFueSxcbiAgICBldmVudFR5cGU6IHN0cmluZ1xuICApIHtcbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY29ubmVjdGVkRmllbGRHcm91cENvbmZpZywgXCJ0cmlnZ2Vyc1wiKSkge1xuICAgICAgaWYgKGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcudHJpZ2dlcnMuaW5jbHVkZXMoZXZlbnRUeXBlKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwQWN0aW9ucyhcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLFxuICAgICAgICAgIGN1cnJlbnRGaWVsZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkQWN0aW9ucyhcbiAgICBjb25uZWN0ZWRGaWVsZENvbmZpZzogYW55LFxuICAgIGNvbm5lY3RlZEZpZWxkOiBhbnlcbiAgKSB7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNvbm5lY3RlZEZpZWxkQ29uZmlnLCBcInJ1bGVzXCIpKSB7XG4gICAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShjb25uZWN0ZWRGaWVsZENvbmZpZy5ydWxlcywge1xuICAgICAgICBGSUVMRF9DT05GSUc6IGNvbm5lY3RlZEZpZWxkLFxuICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgfSkubWFwcGluZygpO1xuXG4gICAgICBmb3IgKGxldCBhY3Rpb24gb2YgY29ubmVjdGVkRmllbGRDb25maWcuYWN0aW9ucykge1xuICAgICAgICBjb25zdCBjb25kaXRpb25TdWNjZXNzID0gbmV3IENvbmRpdGlvbihcbiAgICAgICAgICBhY3Rpb24uY29uZGl0aW9uLFxuICAgICAgICAgIHJ1bGVzTWFwcGluZ1xuICAgICAgICApLmV2YWx1YXRlKCk7XG5cbiAgICAgICAgaWYgKGNvbmRpdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIHJ1bGVzTWFwcGluZyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgRklFTERfQ09ORklHOiBjb25uZWN0ZWRGaWVsZCxcbiAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb25uZWN0ZWRGaWVsZDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkcyhcbiAgICBjdXJyZW50RmllbGQ6IGFueSxcbiAgICBjb25uZWN0ZWRGaWVsZENvbmZpZzogYW55LFxuICAgIGV2ZW50VHlwZTogc3RyaW5nLFxuICAgIG5lc3RlZDogc3RyaW5nXG4gICkge1xuICAgIGxldCBjb25uZWN0ZWRGaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KFxuICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAgY29ubmVjdGVkRmllbGRDb25maWdbXCJrZXlcIl1cbiAgICApO1xuXG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGNvbm5lY3RlZEZpZWxkQ29uZmlnLCBcInRyaWdnZXJzXCIpKSB7XG4gICAgICBpZiAoY29ubmVjdGVkRmllbGRDb25maWcudHJpZ2dlcnMuaW5jbHVkZXMoZXZlbnRUeXBlKSkge1xuICAgICAgICBjb25uZWN0ZWRGaWVsZCA9IGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkQWN0aW9ucyhcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZyxcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY29ubmVjdGVkRmllbGRDb25maWcsIFwiaGFuZGxlTmVzdGVkRmllbGRzXCIpKSB7XG4gICAgICBpZiAoY29ubmVjdGVkRmllbGRDb25maWcuaGFuZGxlTmVzdGVkRmllbGRzKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXG4gICAgICAgICAgeyBrZXk6IGNvbm5lY3RlZEZpZWxkQ29uZmlnLmtleSB9LFxuICAgICAgICAgIGV2ZW50VHlwZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudEZpZWxkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhlOiBhbnksIGV2ZW50VHlwZTogc3RyaW5nKSB7XG4gICAgbGV0IGN1cnJlbnRGaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZS5rZXkpO1xuXG4gICAgaWYgKGN1cnJlbnRGaWVsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoY3VycmVudEZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhcbiAgICAgICAgICAgIGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cyxcbiAgICAgICAgICAgIFwiY29ubmVjdGVkRmllbGRHcm91cHNcIlxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGV0IGNvbm5lY3RlZEZpZWxkR3JvdXBzID1cbiAgICAgICAgICAgIGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cy5jb25uZWN0ZWRGaWVsZEdyb3VwcztcbiAgICAgICAgICBmb3IgKGxldCBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnIG9mIGNvbm5lY3RlZEZpZWxkR3JvdXBzKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwKFxuICAgICAgICAgICAgICBjdXJyZW50RmllbGQsXG4gICAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsXG4gICAgICAgICAgICAgIGV2ZW50VHlwZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKFxuICAgICAgICAgICAgY3VycmVudEZpZWxkLmNvbm5lY3RlZEVsZW1lbnRzLFxuICAgICAgICAgICAgXCJjb25uZWN0ZWRGaWVsZHNcIlxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGV0IGNvbm5lY3RlZEZpZWxkcyA9IGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cy5jb25uZWN0ZWRGaWVsZHM7XG4gICAgICAgICAgZm9yIChsZXQgY29ubmVjdGVkRmllbGRDb25maWcgb2YgY29ubmVjdGVkRmllbGRzKSB7XG4gICAgICAgICAgICBjdXJyZW50RmllbGQgPSBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZHMoXG4gICAgICAgICAgICAgIGN1cnJlbnRGaWVsZCxcbiAgICAgICAgICAgICAgY29ubmVjdGVkRmllbGRDb25maWcsXG4gICAgICAgICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgICAgICAgZXZlbnRUeXBlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGaWVsZCBmb3IgdGhlIGdpdmVuIGtleSBbJyR7ZS5rZXl9J10gaXMgbm90IGZvdW5kIHdpdGggZXZlbnRUeXBlOiAnJHtldmVudFR5cGV9Jy5gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlUmVtb3ZlZEZpbGUoZTogYW55KSB7XG4gICAgdGhpcy5zaG93QXBpTG9hZGVyKCk7XG5cbiAgICBpZiAodGhpcy5mb3JtR3JvdXBbXCJjb250cm9sc1wiXVtlLmtleV0uZW5hYmxlZCkge1xuICAgICAgdGhpcy5maWxlc1tlLmtleV0gPSBlLmZpbGVzO1xuXG4gICAgICB0aGlzLmZvcm1EYXRhW2Uua2V5XSA9IGZpbHRlckR1cGxpY2F0ZXNGaWxlcyh0aGlzLmZpbGVzW2Uua2V5XSk7XG5cbiAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICAgIHtcbiAgICAgICAgICBbZS5rZXldOiB0aGlzLmZvcm1EYXRhW2Uua2V5XVxuICAgICAgICB9LFxuICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlR2V0S2V5VmFsdWVGaWxlKGU6IGFueSkge1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcblxuICAgIGxldCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGUudmFsdWUpID8gZS52YWx1ZSA6IFtlLnZhbHVlXTtcblxuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLCBcInByb3BlcnRpZXNcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLnByb3BlcnRpZXMsIFwidXBsb2FkRmlsZVRvU2VydmVyXCIpICYmXG4gICAgICBmaWVsZC5wcm9wZXJ0aWVzLnVwbG9hZEZpbGVUb1NlcnZlclxuICAgICkge1xuICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRGaWxlKGZpZWxkLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsZXModmFsdWUsIFwiTE9BRElOR1wiLCBlLmtleSk7XG5cbiAgICAgICAgY29uc3QgdXBkYXRlZEZpbGUgPSBnZXRPYmplY3REZWVwQ29weShcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgIGlkOiB1dWlkdjQoKSxcbiAgICAgICAgICAgICAgICBuYW1lOiB2YWx1ZS5uYW1lLFxuICAgICAgICAgICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgICAgICAgc2l6ZTogdmFsdWUuc2l6ZSxcbiAgICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHZhbHVlLmxhc3RNb2RpZmllZCxcbiAgICAgICAgICAgICAgICB3ZWJraXRSZWxhdGl2ZVBhdGg6IHZhbHVlLndlYmtpdFJlbGF0aXZlUGF0aFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIDMwMCk7IC8vIDEwMDAgbXMgPSAxIHNlY1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVGaWxlcyh1cGRhdGVkRmlsZSwgXCJOT1JNQUxcIiwgZS5rZXkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKiogTWV0aG9kcyBmb3IgQ2FtZXJhIHJlbGF0ZWQgZmllbGRzIGxpa2UgJ0NBUFRVUkUnICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0dldFJlbW92ZWRNZWRpYUZpbGUoZTogYW55KSB7XG4gICAgdGhpcy5zaG93QXBpTG9hZGVyKCk7XG5cbiAgICBpZiAodGhpcy5mb3JtR3JvdXBbXCJjb250cm9sc1wiXVtlLmtleV0uZW5hYmxlZCkge1xuICAgICAgdGhpcy5jYW1lcmFDYXB0dXJlRmllbGRLZXkgPSBcIlwiO1xuICAgICAgdGhpcy5jYW1lcmFDYXB0dXJlSW1hZ2UgPSBcIlwiO1xuXG4gICAgICB0aGlzLm1lZGlhRmlsZXNbZS5rZXldID0gZS5tZWRpYUZpbGVzO1xuXG4gICAgICB0aGlzLmZvcm1EYXRhW2Uua2V5XSA9IGZpbHRlckR1cGxpY2F0ZXNNZWRpYUZpbGVzKHRoaXMubWVkaWFGaWxlc1tlLmtleV0pO1xuXG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAgICB7XG4gICAgICAgICAgW2Uua2V5XTogdGhpcy5mb3JtRGF0YVtlLmtleV1cbiAgICAgICAgfSxcbiAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tJbnB1dENhbWVyYShlOiBhbnksIGZpZWxkOiBhbnkpIHtcbiAgICBjb25zdCBmaWVsZEtleSA9IGZpZWxkLmtleTtcbiAgICBjb25zdCBmaWVsZENhbWVyYUNhcHR1cmVDb25maWcgPSBmaWVsZD8ucHJvcGVydGllcz8uY2FtZXJhQ29uZmlnID8/IHt9O1xuXG4gICAgdGhpcy5pc1Nob3dDYW1lcmFDYXB0dXJlID0gdHJ1ZTtcbiAgICB0aGlzLmNhbWVyYUNhcHR1cmVGaWVsZEtleSA9IGZpZWxkS2V5O1xuXG4gICAgdGhpcy5jYW1lcmFDYXB0dXJlQ29uZmlnID0gbWVyZ2VPYmplY3RzRGVlcChbXG4gICAgICB0aGlzLkRFRkFVTFRfQ0FNRVJBX0NBUFRVUkVfQ09ORklHLFxuICAgICAgZmllbGRDYW1lcmFDYXB0dXJlQ29uZmlnXG4gICAgXSk7XG4gIH1cblxuICAvKiogS3dpa0lEIENhbWVyYSBNZXRob2RzICovXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0SW1hZ2UoaW1hZ2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkoXG4gICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICB0aGlzLmNhbWVyYUNhcHR1cmVGaWVsZEtleVxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJwcm9wZXJ0aWVzXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZC5wcm9wZXJ0aWVzLCBcInVwbG9hZEZpbGVUb1NlcnZlclwiKSAmJlxuICAgICAgZmllbGQucHJvcGVydGllcy51cGxvYWRGaWxlVG9TZXJ2ZXJcbiAgICApIHtcbiAgICAgIGF3YWl0IHRoaXMudXBsb2FkRmlsZShmaWVsZCwgaW1hZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhbWVyYUNhcHR1cmVJbWFnZSA9IFwiXCI7XG4gICAgICB0aGlzLmNhbWVyYUNhcHR1cmVGaWVsZEtleSA9IFwiXCI7XG4gICAgICB0aGlzLmlzU2hvd0NhbWVyYUNhcHR1cmUgPSBmYWxzZTtcblxuICAgICAgdGhpcy5tZWRpYUZpbGVzW2ZpZWxkLmtleV0gPSBnZXRPYmplY3REZWVwQ29weShbaW1hZ2VdKTtcblxuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5zZXRWYWx1ZShnZXRPYmplY3REZWVwQ29weShbaW1hZ2VdKSwge1xuICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XG4gICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja1NhdmVDYW1lcmFDYXB0dXJlKGU6IGFueSkge1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgdGhpcy5jYW1lcmFDYXB0dXJlSW1hZ2UgPSBcIlwiO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBpbWFnZSA9IGU/Lm9yaWdpbmFsSW1hZ2U7XG5cbiAgICAgIHRoaXMuc2V0SW1hZ2UoaW1hZ2UpO1xuXG4gICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICB9LCA1MDApO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVHZXRJbWFnZShlOiBhbnkpIHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIHRoaXMuY2FtZXJhQ2FwdHVyZUltYWdlID0gXCJcIjtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLyoqXG4gICAgICAgKiBQcmlvcml0eSBvZiBJbWFnZSB0byBTZXQgZm9yIENvbmZpZyBCYXNlZFxuICAgICAgICogMS4gTWFza2VkXG4gICAgICAgKiAyLiBDcm9wcGVkXG4gICAgICAgKiAzLiBPcmlnaW5hbFxuICAgICAgICpcbiAgICAgICAqIElmIG5vIG1hc2tlZCBvciBjcm9wcGVkIGltYWdlIGlzIGF2YWlsYWJsZSB0aGVuIGRpcmVjdGx5IHNldCBPcmlnaW5hbCBJbWFnZVxuICAgICAgICovXG4gICAgICBjb25zdCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KFxuICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgIHRoaXMuY2FtZXJhQ2FwdHVyZUZpZWxkS2V5XG4gICAgICApO1xuXG4gICAgICBjb25zdCBpbWFnZSA9IGZpZWxkLnByb3BlcnRpZXM/LmlzTWFza2VkSW1hZ2VcbiAgICAgICAgPyBlPy5tYXNrZWRJbWFnZSA/PyBlPy5vcmlnaW5hbEltYWdlXG4gICAgICAgIDogZmllbGQucHJvcGVydGllcz8uaXNDcm9wcGVkSW1hZ2VcbiAgICAgICAgPyBlPy5jcm9wcGVkSW1hZ2UgPz8gZT8ub3JpZ2luYWxJbWFnZVxuICAgICAgICA6IGU/Lm9yaWdpbmFsSW1hZ2U7XG5cbiAgICAgIGNvbnN0IGlzU2hvd0ltYWdlUHJldmlldyA9XG4gICAgICAgIHRoaXMuY2FtZXJhQ2FwdHVyZUNvbmZpZz8ub3RoZXJzPy5wcmV2aWV3Py5zaG93O1xuXG4gICAgICBpZiAoaXNTaG93SW1hZ2VQcmV2aWV3KSB7XG4gICAgICAgIHRoaXMuY2FtZXJhQ2FwdHVyZUltYWdlID0gaW1hZ2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldEltYWdlKGltYWdlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgfSwgNTAwKTsgLy8gRGVsYXkgaXMgYWRkZWQgZHVlIHRvIGlzc3VzIHdpdGggS3dpa0lEIENhbWVyYSBub3QgYmVpbmcgYWJsZSB0byBoYW5kbGUgdG8gZmFzdCBwcm9jZXNzaW5nLlxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrQ2xvc2VDYW1lcmEoZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5pc1Nob3dDYW1lcmFDYXB0dXJlID0gZmFsc2U7XG4gICAgdGhpcy5jYW1lcmFDYXB0dXJlRmllbGRLZXkgPSBcIlwiO1xuICAgIHRoaXMuY2FtZXJhQ2FwdHVyZUltYWdlID0gXCJcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgZmlsZXMgYXJyYXkgd2l0aCB0aGUgbmV3IGZpbGUgYW5kIGl0J3Mgc3RhdGUgYW5kIHJlc3BvbnNlIGZyb20gdGhlIGFwaSBvZiB1cGxvYWRpbmcgdGhlIGZpbGUuXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIHVwZGF0ZUZpbGVzKGZpbGU6IGFueSwgc3RhdGU6IHN0cmluZywga2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWxlV2l0aFN0YXRlID0gbWVyZ2VPYmplY3RzKGZpbGUgYXMgYW55LCB7IHN0YXRlOiBzdGF0ZSB9KTtcblxuICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBrZXkpO1xuXG4gICAgaWYgKGZpZWxkLnByb3BlcnRpZXM/Lm11bHRpcGxlKSB7XG4gICAgICAvLyBJZiBmaWVsZC5wcm9wZXJ0aWVzPy5tdWx0aXBsZSBpcyB0cnVlLCBpdCBtZWFucyBtdWx0aXBsZSBmaWxlcyBhcmUgYWxsb3dlZCBmb3IgdGhpcyBmaWVsZC5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgZXhpc3RpbmcgZmlsZXMgYXJyYXkgZm9yIHRoZSBzcGVjaWZpYyBrZXkgd2l0aCB0aGUgbmV3IGZpbGUuXG4gICAgICBjb25zdCB1cGRhdGVkRmlsZXMgPSBbXG4gICAgICAgIC4uLnRoaXMuZmlsZXNba2V5XS5maWx0ZXIoXG4gICAgICAgICAgKGYpID0+IGYubmFtZSAhPT0gZmlsZVdpdGhTdGF0ZS5uYW1lIHx8IGYuc2l6ZSAhPT0gZmlsZVdpdGhTdGF0ZS5zaXplXG4gICAgICAgICksXG4gICAgICAgIGZpbGVXaXRoU3RhdGVcbiAgICAgIF07XG5cbiAgICAgIC8vIEFwcGx5IHRoZSBmaWx0ZXJEdXBsaWNhdGVzRmlsZXMgZnVuY3Rpb24gdG8gZW5zdXJlIHVuaXF1ZW5lc3MgaW4gdGhlIHVwZGF0ZWRGaWxlcyBhcnJheS5cbiAgICAgIHRoaXMuZmlsZXNba2V5XSA9IGZpbHRlckR1cGxpY2F0ZXNGaWxlcyh1cGRhdGVkRmlsZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBmaWVsZC5wcm9wZXJ0aWVzPy5tdWx0aXBsZSBpcyBmYWxzZSwgb25seSBvbmUgZmlsZSBpcyBhbGxvd2VkIGZvciB0aGlzIGZpZWxkLlxuICAgICAgLy8gUmVwbGFjZSB0aGUgZXhpc3RpbmcgZmlsZXMgYXJyYXkgZm9yIHRoZSBzcGVjaWZpYyBrZXkgd2l0aCBhbiBhcnJheSBjb250YWluaW5nIHRoZSBuZXcgZmlsZS5cbiAgICAgIHRoaXMuZmlsZXNba2V5XSA9IFtmaWxlV2l0aFN0YXRlXTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIGZvcm1EYXRhIGFuZCBmb3JtR3JvdXAgY29udHJvbHMgZm9yIHRoZSBzcGVjaWZpYyBrZXkgd2l0aCB0aGUgbm9ybWFsRmlsZXMgYXJyYXkuXG4gICAgY29uc3Qgbm9ybWFsRmlsZXMgPSB0aGlzLmZpbGVzW2tleV0uZmlsdGVyKChmaWxlKSA9PiB7XG4gICAgICByZXR1cm4gZmlsZS5zdGF0ZSA9PT0gXCJOT1JNQUxcIjtcbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybURhdGFba2V5XSA9IG5vcm1hbEZpbGVzO1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0ucGF0Y2hWYWx1ZShub3JtYWxGaWxlcywge1xuICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgIG9ubHlTZWxmOiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICB7XG4gICAgICAgIFtrZXldOiBub3JtYWxGaWxlc1xuICAgICAgfSxcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgYXBpIHVwbG9hZCBtb2NraW5nIG1ldGhvZC4gU2V0J3MgdG8gbG9hZGluZyBhdCBmaXJzdCBhdCBwb2ludCB3aGVuIEFQSSBpcyBjYWxsZWQgYW5kIHRoZW4gY2hhbmdlcyB0aGUgc3RhdHVzIHRvIHJhbmRvbSBzdGF0dXMgYWZ0ZXIgMiBzZWNvbmRzIG9mIGRlbGF5IHNob3dpbmcgYSBtb2NrZWQgcmVzcG9uc2UgZnJvbSBBUEkuXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHVwbG9hZEZpbGUoZmllbGQ6IGFueSwgZmlsZTogYW55KSB7XG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuRklMRTpcbiAgICAgICAgdGhpcy51cGRhdGVGaWxlcyhmaWxlLCBcIkxPQURJTkdcIiwgZmllbGQua2V5KTtcblxuICAgICAgICAvLyBBY3R1YWwgQVBJIENhbGxcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLm9uQ2xpY2tBcGlDYWxsLmVtaXQoe1xuICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICBmaWxlOiBmaWxlLFxuICAgICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgIG5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBmaWxlLnR5cGUsXG4gICAgICAgICAgICAgICAgc2l6ZTogZmlsZS5zaXplLFxuICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogZmlsZS5sYXN0TW9kaWZpZWQsXG4gICAgICAgICAgICAgICAgd2Via2l0UmVsYXRpdmVQYXRoOiBmaWxlLndlYmtpdFJlbGF0aXZlUGF0aFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMudXBkYXRlRmlsZXMoZmlsZSwgXCJFUlJPUlwiLCBmaWVsZC5rZXkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRmllbGRUeXBlLkNBUFRVUkU6XG4gICAgICAgIC8vIEFjdHVhbCBBUEkgQ2FsbFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMub25DbGlja0FwaUNhbGwuZW1pdCh7XG4gICAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgIGltYWdlOiBmaWxlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmFpbGVkIHRvIHVwbG9hZCBpbWFnZSB0byBzZXJ2ZXIhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0Zvcm1GaWVsZEJ1dHRvbihmaWVsZDogYW55KTogdm9pZCB7XG4gICAgbGV0IGZvcm1EYXRhID0gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcblxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGZpZWxkLmhpZGRlbikge1xuICAgICAgICAgIGRlbGV0ZSBmb3JtRGF0YVtmaWVsZC5rZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1EYXRhW2ZpZWxkLmtleV0gPSBjb252ZXJ0Rm9ybUZpZWxkVmFsdWVUb1N0YW5kYXJkRm9ybWF0KFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBmb3JtRGF0YVtmaWVsZC5rZXldXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuZGVkRm9ybURhdGEgPSB0aGlzLmZvcm1GaWVsZHMucmVkdWNlKChyZXN1bHQsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQgJiYgIWZpZWxkLmhpZGRlbikge1xuICAgICAgICBjb25zdCBmaWVsZERhdGEgPSB7XG4gICAgICAgICAgW2ZpZWxkLmtleV06IHtcbiAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxuICAgICAgICAgICAgbGFiZWw6IGZpZWxkLmxhYmVsLFxuICAgICAgICAgICAgdmFsdWU6IGlzRW1wdHlWYWx1ZShmb3JtRGF0YVtmaWVsZC5rZXldKSA/IFwiXCIgOiBmb3JtRGF0YVtmaWVsZC5rZXldLFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmVzdWx0W2ZpZWxkLmtleV0gPSBmaWVsZERhdGFbZmllbGQua2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwge30pO1xuXG4gICAgdGhpcy5vbkNsaWNrRm9ybUZpZWxkQnV0dG9uLmVtaXQoe1xuICAgICAgY29uZmlnOiBmaWVsZCxcbiAgICAgIGRhdGE6IG1lcmdlT2JqZWN0cyh0aGlzLmZvcm1EYXRhLCB0aGlzLnBvcHVwRm9ybURhdGEsIHRoaXMudGFza0RhdGEpLFxuICAgICAgZXh0ZW5kZWREYXRhOiBleHRlbmRlZEZvcm1EYXRhXG4gICAgfSk7XG4gIH1cblxuICAvLyBET00gRXZlbnQgSGFuZGxlcnNcbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVHZXRLZXlWYWx1ZShlOiBhbnkpIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAge1xuICAgICAgICBbZS5rZXldOiBlLnZhbHVlXG4gICAgICB9LFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICApO1xuXG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcbiAgICB0aGlzLmZvcm1EYXRhW2Uua2V5XSA9IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICBmaWVsZCxcbiAgICAgIGUudmFsdWVcbiAgICApO1xuXG4gICAgdGhpcy5nZXRVbnNhdmVkRGF0YVN0YXRlLmVtaXQodHJ1ZSk7XG5cbiAgICBpZiAoXG4gICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmaWVsZCwgXCJ2YWxpZGF0aW9uXCIpICYmXG4gICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fQ0hBTkdFXCIpXG4gICAgKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IG5ldyBWYWxpZGF0aW9uKFxuICAgICAgICB7XG4gICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICApO1xuXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB2YWxpZGF0aW9ucy52YWxpZGF0ZShmaWVsZC52YWxpZGF0aW9uKTtcbiAgICAgIH0pKCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZmllbGQuaXNGb3JtRWxlbWVudCAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwiY29ubmVjdGVkRWxlbWVudHNcIilcbiAgICApIHtcbiAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZVxuICAgICAgICB9LFxuICAgICAgICBcIk9OX0NIQU5HRVwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlT25DbGlja1Jlc2V0Rm9ybUZpZWxkcyhlOiBhbnksIGZpZWxkOiBURmllbGRUaXRsZSkge1xuICAgIGNvbnN0IHJlc2V0Rm9ybUZpZWxkcyA9IGFzeW5jICgpID0+IHtcbiAgICAgIGZvciAobGV0IGYgb2YgZmllbGQucmVzZXQuZmllbGRzKSB7XG4gICAgICAgIGZvciAobGV0IGFjdGlvbiBvZiBmLmFjdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCByZXNldEZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkoXG4gICAgICAgICAgICB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBhY3Rpb24ucHJvcHMuZmllbGRLZXlcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9uKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogcmVzZXRGaWVsZCxcbiAgICAgICAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgQllQQVNTX1JFU0VUX0NPTkZJUk0gPSBmaWVsZD8ucHJvcGVydGllcz8uYnlwYXNzUmVzZXRDb25maXJtYXRpb247XG5cbiAgICBpZiAoIUJZUEFTU19SRVNFVF9DT05GSVJNKSB7XG4gICAgICBjb25zdCBDT05GSVJNX1JFU0VUID0gd2luZG93LmNvbmZpcm0oXG4gICAgICAgIFwiVGhpcyBhY3Rpb24gd2lsbCByZXNldCBhbGwgdGhlIGZpZWxkcy4gRG8geW91IHN0aWxsIHdhbnQgdG8gY29udGludWU/XCJcbiAgICAgICk7XG5cbiAgICAgIGlmIChDT05GSVJNX1JFU0VUKSB7XG4gICAgICAgIHJlc2V0Rm9ybUZpZWxkcygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXNldEZvcm1GaWVsZHMoKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZUZpZWxkQXBpQ2FsbChmaWVsZDogVEZpZWxkQXBpQ2FsbCwgYXBpOiBhbnkpIHtcbiAgICBhcGkgPSBhd2FpdCB0aGlzLmV4ZWN1dGVBcGlDYWxsKGFwaSwge1xuICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgIEFQSV9DT05GSUc6IGFwaSxcbiAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuaXNWYWxpZFJlcXVlc3RIZWFkZXJzQW5kQm9keShhcGkpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQuYXBpLCBcInJlcXVlc3RcIikpIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcbiAgICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIFtmaWVsZC5rZXldOiBhcGkucmVzcG9uc2UudmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFtmaWVsZC5rZXldOiBhcGkucmVzcG9uc2UudmFsdWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhcbiAgICAgICAge1xuICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgQVBJX0NPTkZJRzogYXBpLFxuICAgICAgICAgIEFQSV9SRVNQT05TRTogYXBpLnJlc3BvbnNlLFxuICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICk7XG5cbiAgICAgIGFwaSA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXNwb25zZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZmllbGRbXCJhcGlcIl1bXCJzdGF0dXNcIl1bXCJ2YWx1ZVwiXSA9IEVBcGlTdGF0dXNUeXBlLkZBSUxFRDtcbiAgICAgICAgZmllbGRbXCJzaG93TG9hZGVyXCJdID0gZmFsc2U7XG4gICAgICB9LCA1MDApO1xuICAgIH1cblxuICAgIHJldHVybiB7IGZpZWxkOiBmaWVsZCwgYXBpOiBhcGkgfTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlQXBpQ2FsbChhcGk6IGFueSkge1xuICAgIGFwaSA9IGF3YWl0IHRoaXMuZXhlY3V0ZUFwaUNhbGwoYXBpLCB7XG4gICAgICBGT1JNX0NPTkZJRzogdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgQVBJX0NPTkZJRzogYXBpLFxuICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgIFRBU0tfREFUQTogdGhpcy50YXNrRGF0YSxcbiAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgfSk7XG5cbiAgICBjb25zdCBhcGlzID0gbmV3IEFwaXMoXG4gICAgICB7XG4gICAgICAgIEZPUk1fQ09ORklHOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgIEFQSV9DT05GSUc6IGFwaSxcbiAgICAgICAgRk9STV9GSUVMRFM6IHRoaXMuZm9ybUZpZWxkcyxcbiAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgIFBSRVZJT1VTX0ZPUk1fREFUQTogdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxuICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgIH0sXG4gICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5pc1ZhbGlkUmVxdWVzdEhlYWRlcnNBbmRCb2R5KGFwaSkpIHtcbiAgICAgIGFwaSA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXNwb25zZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGFwaTogYXBpIH07XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGV4ZWN1dGVBcGlDYWxsKGFwaTogYW55LCBvYmplY3Q6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKG9iamVjdCwgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcykpO1xuXG4gICAgYXBpID0gYXdhaXQgYXBpcy5zZXRVcmwoKTtcbiAgICBhcGkgPSBhd2FpdCBhcGlzLnNldFJlcXVlc3RIZWFkZXJzKCk7XG4gICAgYXBpID0gYXdhaXQgYXBpcy52YWxpZGF0ZVJlcXVlc3RIZWFkZXJzKCk7XG4gICAgYXBpID0gYXdhaXQgYXBpcy5zZXRSZXF1ZXN0Qm9keSgpO1xuICAgIGFwaSA9IGF3YWl0IGFwaXMudmFsaWRhdGVSZXF1ZXN0Qm9keSgpO1xuXG4gICAgbGV0IGFwaUNhbGxSZXNwb25zZTogYW55ID0ge307XG4gICAgbGV0IGFwaUNhbGxSZXNwb25zZVN0YXR1c0NvZGU7XG5cbiAgICBpZiAodGhpcy5pc1ZhbGlkUmVxdWVzdEhlYWRlcnNBbmRCb2R5KGFwaSkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgYXBpLnJlcXVlc3QudXJsLmhhc093blByb3BlcnR5KFwidHlwZVwiKSAmJlxuICAgICAgICBhcGkucmVxdWVzdC51cmwudHlwZSA9PT0gRUFwaVJlcXVlc3RVcmxUeXBlLk1PQ0tcbiAgICAgICkge1xuICAgICAgICBhcGlDYWxsUmVzcG9uc2UgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShhcGkucmVxdWVzdC51cmwucHJvcHMubW9ja2VkRGF0YSk7XG4gICAgICAgICAgfSwgMTAwMCk7IC8vIDEwMDAgbXMgPSAxIHNlY1xuICAgICAgICB9KTtcbiAgICAgICAgYXBpQ2FsbFJlc3BvbnNlU3RhdHVzQ29kZSA9IGFwaS5yZXF1ZXN0LnVybC5wcm9wcz8uc3RhdHVzQ29kZSA/PyAyMDA7IC8vIERlZmF1bHQgU3RhdHVzIENvZGUgZm9yIE1vY2tlZCBBUElzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB1cmw6IHN0cmluZyA9IGFwaS5yZXF1ZXN0LnVybC52YWx1ZTtcbiAgICAgICAgY29uc3QgbWV0aG9kOiBzdHJpbmcgPSBhcGkucmVxdWVzdD8ubWV0aG9kID8/IFwiUE9TVFwiO1xuICAgICAgICBjb25zdCBoZWFkZXJzOiBhbnkgPSB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgLi4uKGFwaS5yZXF1ZXN0Py5oZWFkZXJzPy52YWx1ZSB8fCB7fSlcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYm9keTogYW55ID0gYXBpLnJlcXVlc3Q/LmJvZHk/LnZhbHVlID8/IG51bGw7XG5cbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZTogYW55ID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgICBoZWFkZXJzOiB7IC4uLmhlYWRlcnMgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICBhcGlDYWxsUmVzcG9uc2VTdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlID0ge307XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZTogYW55ID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgICBoZWFkZXJzOiB7IC4uLmhlYWRlcnMgfSxcbiAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICAgICAgYXBpQ2FsbFJlc3BvbnNlU3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGFwaUNhbGxSZXNwb25zZSA9IHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhcGkucmVzcG9uc2UgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgYXBpLnJlc3BvbnNlLFxuICAgICAgICBcInZhbHVlXCIsXG4gICAgICAgIGFwaUNhbGxSZXNwb25zZVxuICAgICAgKTtcblxuICAgICAgYXBpLnJlc3BvbnNlID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgIGFwaS5yZXNwb25zZSxcbiAgICAgICAgXCJzdGF0dXNcIixcbiAgICAgICAgYXBpQ2FsbFJlc3BvbnNlU3RhdHVzQ29kZVxuICAgICAgKTtcblxuICAgICAgdGhpcy5nZXRMb2dzLmVtaXQoe1xuICAgICAgICB0eXBlOiBFVHlwZUxvZ3MuQVBJLFxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgcmVxdWVzdDogYXBpLnJlcXVlc3QsXG4gICAgICAgICAgcmVzcG9uc2U6IGFwaS5yZXNwb25zZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXBpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBpc1ZhbGlkUmVxdWVzdEhlYWRlcnNBbmRCb2R5KGFwaTogVEFwaSkge1xuICAgIGNvbnN0IGJvZHlWYWxpZGF0aW9uID1cbiAgICAgIChhcGkucmVxdWVzdC5ib2R5Py52YWxpZGF0aW9uIGFzIFRWYWxpZGF0aW9uICYge1xuICAgICAgICBpc192YWxpZDogYm9vbGVhbjtcbiAgICAgIH0pIHx8XG4gICAgICAoYXBpLnJlcXVlc3QuYm9keSBhcyBhbnkgJiB7XG4gICAgICAgIGlzX3ZhbGlkOiBib29sZWFuO1xuICAgICAgfSk7XG4gICAgY29uc3QgaGVhZGVyc1ZhbGlkYXRpb24gPVxuICAgICAgKGFwaS5yZXF1ZXN0LmhlYWRlcnM/LnZhbGlkYXRpb24gYXMgVFZhbGlkYXRpb24gJiB7XG4gICAgICAgIGlzX3ZhbGlkOiBib29sZWFuO1xuICAgICAgfSkgfHxcbiAgICAgIChhcGkucmVxdWVzdC5oZWFkZXJzIGFzIGFueSAmIHtcbiAgICAgICAgaXNfdmFsaWQ6IGJvb2xlYW47XG4gICAgICB9KTtcblxuICAgIGlmICghYm9keVZhbGlkYXRpb24gJiYgIWhlYWRlcnNWYWxpZGF0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIChib2R5VmFsaWRhdGlvbj8uaXNfdmFsaWQgfHwgZmFsc2UpICYmXG4gICAgICAoaGVhZGVyc1ZhbGlkYXRpb24/LmlzX3ZhbGlkIHx8IGZhbHNlKVxuICAgICk7XG4gIH1cblxuICBzaG93QXBpTG9hZGVyKCkge1xuICAgIHRoaXMubG9hZGVyU2VydmljZS5zaG93KHtcbiAgICAgIGZ1bGxzY3JlZW46IHRydWUsXG4gICAgICBsb2FkZXJUZXh0OiBcIlBsZWFzZSB3YWl0XCJcbiAgICB9KTtcbiAgICB0aGlzLnZpZXdGb3Jtc0J1dHRvbltcImRpc2FibGVkXCJdID0gdHJ1ZTtcbiAgICB0aGlzLnZpZXdGb3Jtc0J1dHRvbltcInNob3dMb2FkZXJcIl0gPSB0cnVlO1xuICAgIHRoaXMuc2F2ZUZvcm1CdXR0b25bXCJkaXNhYmxlZFwiXSA9IHRydWU7XG4gICAgdGhpcy5zYXZlRm9ybUJ1dHRvbltcInNob3dMb2FkZXJcIl0gPSB0cnVlO1xuICB9XG5cbiAgaGlkZUFwaUxvYWRlcigpIHtcbiAgICB0aGlzLmxvYWRlclNlcnZpY2UuaGlkZSgpO1xuICAgIHRoaXMudmlld0Zvcm1zQnV0dG9uW1wiZGlzYWJsZWRcIl0gPSBmYWxzZTtcbiAgICB0aGlzLnZpZXdGb3Jtc0J1dHRvbltcInNob3dMb2FkZXJcIl0gPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVGb3JtQnV0dG9uW1wiZGlzYWJsZWRcIl0gPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVGb3JtQnV0dG9uW1wic2hvd0xvYWRlclwiXSA9IGZhbHNlO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrQXBpQ2FsbChlOiBhbnkpIHtcbiAgICBsZXQgZmllbGQ6IFRGaWVsZEFwaUNhbGwgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcblxuICAgIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkFQSSkge1xuICAgICAgLy8gc2V0IGJ1dHRvbiBzdGF0dXMgdG8gbG9hZGluZ1xuICAgICAgZmllbGRbXCJhcGlcIl1bXCJzdGF0dXNcIl1bXCJ2YWx1ZVwiXSA9IEVBcGlTdGF0dXNUeXBlLkxPQURJTkc7XG4gICAgICBmaWVsZFtcInNob3dMb2FkZXJcIl0gPSB0cnVlO1xuXG4gICAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgICAgLy8gRGV0ZXJtaW5lIEFQSSBDYWxsIHRpbWVcblxuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZpZWxkLmFwaSwgXCJyZXF1ZXN0XCIpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRmllbGRBcGlDYWxsKGZpZWxkLCBmaWVsZC5hcGkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEZJRUxEX0NPTkZJRzogZmllbGQsXG4gICAgICAgICAgICBBUElfQ09ORklHOiB7fSxcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICBhd2FpdCBhcGlzLmNhbGxOZXh0QXBpKGZpZWxkLmFwaS5lbnRyeXBvaW50KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBvcHRpbWl6ZSB0aGUgRE9NIHVwZGF0ZSBieSBBbmd1bGFyIGZvciB1c2luZyAqbmdGb3Igb24gbGFyZ2Ugbm8uIG9mIGl0ZW1zLlxuICAgKiBAcGFyYW0gaW5kZXggbnVtYmVyXG4gICAqIEBwYXJhbSBpdGVtIGZpZWxkQ29uZmlnXG4gICAqIEByZXR1cm5zIHN0cmluZ1xuICAgKi9cbiAgZ2V0VW5pcXVlSWRlbnRpZmllcihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBpdGVtLmtleTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0dvQmFjayhlOiBhbnksIG1vZGU6IFRGb3JtVmlld0dvQmFja01vZGUpIHtcbiAgICBpZiAodGhpcy5mb3JtQ29uZmlnLnN0YXR1cyA9PT0gRUZvcm1zTGlzdFN0YXR1cy5DT01QTEVURUQpIHtcbiAgICAgIHRoaXMub25DbGlja0dvQmFjay5lbWl0KHtcbiAgICAgICAgY2xpY2tlZDogdHJ1ZSxcbiAgICAgICAgbW9kZTogbW9kZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmhlYWRlci5iYWNrQnV0dG9uLmJ5cGFzc0NvbmZpcm1hdGlvbiB8fFxuICAgICAgd2luZG93LmNvbmZpcm0oXCJZb3VyIGRhdGEgd2lsbCBiZSBsb3N0IGlmIHlvdSBsZWF2ZSB0aGlzIHBhZ2UhIENvbnRpbnVlP1wiKVxuICAgICkge1xuICAgICAgdGhpcy5vbkNsaWNrR29CYWNrLmVtaXQoe1xuICAgICAgICBjbGlja2VkOiB0cnVlLFxuICAgICAgICBtb2RlOiBtb2RlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tWaWV3Rm9ybXMoZTogYW55KSB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbmZpZy5zdGF0dXMgPT09IEVGb3Jtc0xpc3RTdGF0dXMuQ09NUExFVEVEKSB7XG4gICAgICB0aGlzLm9uQ2xpY2tWaWV3Rm9ybXMuZW1pdCh7XG4gICAgICAgIGNsaWNrZWQ6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmZvcm1Db25maWcucHJvcGVydGllcy5mb290ZXIudmlld0Zvcm1zQnV0dG9uLmJ5cGFzc0NvbmZpcm1hdGlvbiB8fFxuICAgICAgd2luZG93LmNvbmZpcm0oXCJZb3VyIGRhdGEgd2lsbCBiZSBsb3N0IGlmIHlvdSBsZWF2ZSB0aGlzIHBhZ2UhIENvbnRpbnVlP1wiKVxuICAgICkge1xuICAgICAgdGhpcy5vbkNsaWNrVmlld0Zvcm1zLmVtaXQoe1xuICAgICAgICBjbGlja2VkOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZU9uQ2xpY2tTYXZlRm9ybShlOiBhbnkpIHtcbiAgICBjb25zdCBjb250cm9scyA9IG5ldyBGb3JtVmFsaWRhdGlvbigpLmdldEZvcm1GaWVsZHNJbnZhbGlkQ29udHJvbHMoXG4gICAgICB0aGlzLmZvcm1Hcm91cFxuICAgICk7XG5cbiAgICBsZXQgZmlyc3RGaWVsZFdpdGhFcnJvcjogc3RyaW5nID0gXCJcIjtcblxuICAgIGZvciAobGV0IGNvbnRyb2wgb2YgY29udHJvbHMpIHtcbiAgICAgIGlmIChjb250cm9sLmludmFsaWQgJiYgaXNFbXB0eVZhbHVlKGZpcnN0RmllbGRXaXRoRXJyb3IpKSB7XG4gICAgICAgIGZpcnN0RmllbGRXaXRoRXJyb3IgPSBjb250cm9sLmtleTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IHNob3dGb3JtRmllbGRFcnJvcihcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sLmtleV0uZXJyb3JzLFxuICAgICAgICBjb250cm9sLmtleSxcbiAgICAgICAgY29udHJvbC5pbnZhbGlkXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChpc05vdEVtcHR5VmFsdWUoZmlyc3RGaWVsZFdpdGhFcnJvcikpIHtcbiAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24odHJ1ZSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbihmYWxzZSk7XG4gICAgICB9LCAzMDAwKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xuICAgICAgaWYgKFxuICAgICAgICBmaWVsZC5pc0Zvcm1FbGVtZW50ICYmXG4gICAgICAgICFmaWVsZC5oaWRkZW4gJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZmllbGQsIFwidmFsaWRhdGlvblwiKSAmJlxuICAgICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fU0FWRVwiKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0gbmV3IFZhbGlkYXRpb24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgRklFTERfQ09ORklHOiBmaWVsZCxcbiAgICAgICAgICAgIEZPUk1fRklFTERTOiB0aGlzLmZvcm1GaWVsZHMsXG4gICAgICAgICAgICBGT1JNX0RBVEE6IHRoaXMuZm9ybURhdGEsXG4gICAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgICBQUkVWSU9VU19GT1JNX0RBVEE6IHRoaXMucHJldmlvdXNGb3JtRGF0YSxcbiAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICBhd2FpdCB2YWxpZGF0aW9ucy52YWxpZGF0ZShmaWVsZC52YWxpZGF0aW9uKTtcblxuICAgICAgICBpZiAoIWZpZWxkLnZhbGlkYXRpb24uaXNfdmFsaWQpIHtcbiAgICAgICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKHRydWUpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbihmYWxzZSk7XG4gICAgICAgICAgfSwgMzAwMCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZm9ybURhdGEgPSB0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuXG4gICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5mb3JtRmllbGRzKSB7XG4gICAgICBpZiAoZmllbGQuaXNGb3JtRWxlbWVudCkge1xuICAgICAgICBpZiAoZmllbGQuaGlkZGVuKSB7XG4gICAgICAgICAgZGVsZXRlIGZvcm1EYXRhW2ZpZWxkLmtleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9ybURhdGFbZmllbGQua2V5XSA9IGNvbnZlcnRGb3JtRmllbGRWYWx1ZVRvU3RhbmRhcmRGb3JtYXQoXG4gICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgIGZvcm1EYXRhW2ZpZWxkLmtleV1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXh0ZW5kZWRGb3JtRGF0YSA9IHRoaXMuZm9ybUZpZWxkcy5yZWR1Y2UoKHJlc3VsdCwgZmllbGQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoZmllbGQuaXNGb3JtRWxlbWVudCAmJiAhZmllbGQuaGlkZGVuKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkRGF0YSA9IHtcbiAgICAgICAgICBbZmllbGQua2V5XToge1xuICAgICAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgICAgICBsYWJlbDogZmllbGQubGFiZWwsXG4gICAgICAgICAgICB2YWx1ZTogaXNFbXB0eVZhbHVlKGZvcm1EYXRhW2ZpZWxkLmtleV0pID8gXCJcIiA6IGZvcm1EYXRhW2ZpZWxkLmtleV0sXG4gICAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXN1bHRbZmllbGQua2V5XSA9IGZpZWxkRGF0YVtmaWVsZC5rZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSk7XG5cbiAgICBPYmplY3Qua2V5cyhmb3JtRGF0YSkubWFwKChrZXkpID0+IHtcbiAgICAgIGlmIChpc0VtcHR5VmFsdWUoZm9ybURhdGFba2V5XSkpIHtcbiAgICAgICAgZm9ybURhdGFba2V5XSA9IFwiXCI7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBQT1NUIFRhc2tzXG4gICAgICogMS4gQVBJIENhbGxzLlxuICAgICAqIDIuIEFsdGVyIERhdGEgU3RydWN0dXJlLlxuICAgICAqIDMuIFRyaWdnZXIgYW4gSW50ZXJuYWwgUG9wdXAgRm9ybS5cbiAgICAgKiA0LiBVUkwgUmVkaXJlY3Rpb24gb3IgbmV3IG9wZW5pbmcgb2YgVVJMIGluIGV4dGVybmFsIHRhYi5cbiAgICAgKi9cbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmZvcm1Db25maWcsIFwidGFza3NcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuZm9ybUNvbmZpZy50YXNrcywgXCJwb3N0XCIpXG4gICAgKSB7XG4gICAgICBmb3IgKGxldCBwb3N0VGFzayBvZiB0aGlzLmZvcm1Db25maWcudGFza3MucG9zdCkge1xuICAgICAgICBjb25zdCB0YXNrID0gbmV3IFRhc2tzKFxuICAgICAgICAgIHBvc3RUYXNrLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEZPUk1fQ09ORklHOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgICAgRk9STV9EQVRBOiB0aGlzLmZvcm1EYXRhLFxuICAgICAgICAgICAgVEFTS19EQVRBOiB0aGlzLnRhc2tEYXRhLFxuICAgICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zdG9wVGFza0V4ZWN1dGlvbiA9IGZhbHNlO1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMocG9zdFRhc2ssIFwid2FpdFwiKSkge1xuICAgICAgICAgIHRoaXMud2FpdGluZ0ZvckNoYW5nZXMgPSBwb3N0VGFzay53YWl0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMud2FpdGluZ0ZvckNoYW5nZXMgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRhc2suZXhlY3V0ZSgpO1xuXG4gICAgICAgIC8vIFdhaXQgZm9yIG5nT25DaGFuZ2VzIHRvIGJlIGNhbGxlZCBiZWZvcmUgY29udGludWluZyB0byB0aGUgbmV4dCB0YXNrXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy53YWl0aW5nRm9yQ2hhbmdlcykge1xuICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgMTApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5zdG9wVGFza0V4ZWN1dGlvbikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0b3BUYXNrRXhlY3V0aW9uIHx8IHRoaXMud2FpdGluZ0ZvckNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5zdG9wVGFza0V4ZWN1dGlvbiA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMub25DbGlja1NhdmVGb3JtLmVtaXQoe1xuICAgICAgICBmb3JtQ29uZmlnOiB0aGlzLmZvcm1Db25maWcsXG4gICAgICAgIGRhdGE6IG1lcmdlT2JqZWN0cyhcbiAgICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YVt0aGlzLmZvcm1Db25maWcua2V5XSxcbiAgICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgICB0aGlzLnBvcHVwRm9ybURhdGEsXG4gICAgICAgICAgdGhpcy50YXNrRGF0YVxuICAgICAgICApLFxuICAgICAgICBleHRlbmRlZERhdGE6IGV4dGVuZGVkRm9ybURhdGFcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldFVuc2F2ZWREYXRhU3RhdGUuZW1pdChmYWxzZSk7XG4gICAgICB0aGlzLm9uQ2xpY2tTYXZlRm9ybS5lbWl0KHtcbiAgICAgICAgZm9ybUNvbmZpZzogdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgICBkYXRhOiBtZXJnZU9iamVjdHMoZm9ybURhdGEsIHRoaXMucG9wdXBGb3JtRGF0YSwgdGhpcy50YXNrRGF0YSksXG4gICAgICAgIGV4dGVuZGVkRGF0YTogZXh0ZW5kZWRGb3JtRGF0YVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2hvd0Vycm9yTm90aWZpY2F0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBsb2dNZXRob2RcbiAgdG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oc2hvdzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2hvd0Vycm9yTm90aWZpY2F0aW9uID0gc2hvdztcbiAgfVxuXG4gIC8vIENvbXBvbmVudCBIZWxwZXJzXG4gIEBsb2dNZXRob2RcbiAgZmllbGRIaWRlKGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF1bXCJoaWRkZW5cIl0gPSB0cnVlO1xuICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRHcm91cEhpZGUoZmllbGRHcm91cDogc3RyaW5nKSB7XG4gICAgZm9yIChsZXQgZmllbGRLZXkgb2YgdGhpcy5maWVsZEdyb3Vwc1tmaWVsZEdyb3VwXSkge1xuICAgICAgdGhpcy5maWVsZEhpZGUoZmllbGRLZXkpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmllbGRTaG93KGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF1bXCJoaWRkZW5cIl0gPSBmYWxzZTtcbiAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkR3JvdXBTaG93KGZpZWxkR3JvdXA6IHN0cmluZykge1xuICAgIGZvciAobGV0IGZpZWxkS2V5IG9mIHRoaXMuZmllbGRHcm91cHNbZmllbGRHcm91cF0pIHtcbiAgICAgIHRoaXMuZmllbGRTaG93KGZpZWxkS2V5KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkRGlzYWJsZShmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgaWYgKGZpZWxkLmlzRm9ybUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XVtcImRpc2FibGVkXCJdID0gdHJ1ZTtcblxuICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZSh0aGlzLmZvcm1Hcm91cC5jb250cm9scykpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5kaXNhYmxlKHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gRUZpZWxkVHlwZS5CVVRUT04pIHtcbiAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XVtcImRpc2FibGVkXCJdID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkR3JvdXBEaXNhYmxlKGZpZWxkR3JvdXA6IHN0cmluZykge1xuICAgIGZvciAobGV0IGZpZWxkS2V5IG9mIHRoaXMuZmllbGRHcm91cHNbZmllbGRHcm91cF0pIHtcbiAgICAgIHRoaXMuZmllbGREaXNhYmxlKGZpZWxkS2V5KTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkRW5hYmxlKGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBpZiAoZmllbGQuaXNGb3JtRWxlbWVudCkge1xuICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdW1wiZGlzYWJsZWRcIl0gPSBmYWxzZTtcblxuICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZSh0aGlzLmZvcm1Hcm91cC5jb250cm9scykpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5lbmFibGUoe1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSBFRmllbGRUeXBlLkJVVFRPTikge1xuICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdW1wiZGlzYWJsZWRcIl0gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkR3JvdXBFbmFibGUoZmllbGRHcm91cDogc3RyaW5nKSB7XG4gICAgZm9yIChsZXQgZmllbGRLZXkgb2YgdGhpcy5maWVsZEdyb3Vwc1tmaWVsZEdyb3VwXSkge1xuICAgICAgdGhpcy5maWVsZEVuYWJsZShmaWVsZEtleSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZFJlc2V0KGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICAvLyBGaW5kIHRoZSBmaWVsZCBhbmQgaXRzIGluZGV4IGluIHRoZSBmb3JtRmllbGRzIGFycmF5XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgbGV0IGZpZWxkSW5kZXggPSBnZXRGb3JtRmllbGRJbmRleEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuXG4gICAgLy8gUmVzZXQgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBpbiB0aGUgZm9ybUdyb3VwXG4gICAgY29uc3QgcmVzZXRWYWx1ZSA9IGNvbnZlcnRGb3JtRmllbGRFbXB0eVZhbHVlVG9Ld2lrVUlGb3JtYXQoZmllbGQpO1xuXG4gICAgdGhpcy5mb3JtRGF0YVtmaWVsZEtleV0gPSByZXNldFZhbHVlO1xuXG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5yZXNldChyZXNldFZhbHVlLCB7XG4gICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgb25seVNlbGY6IHRydWVcbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXG4gICAgICB7XG4gICAgICAgIFtmaWVsZC5rZXldOiByZXNldFZhbHVlXG4gICAgICB9LFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICApO1xuXG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcbiAgICAgIGVtaXRFdmVudDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLy8gUmVzZXQgdGhlIG1lc3NhZ2VzIGFuZCBlcnJvcnMgZm9yIHRoZSBmaWVsZFxuICAgIGZpZWxkID0gcmVtb3ZlRm9ybUZpZWxkTWVzc2FnZShmaWVsZCwge1xuICAgICAgdHlwZTogRU1lc3NhZ2VUeXBlLldBUk5JTkcsXG4gICAgICBtZXNzYWdlOiBcIlwiXG4gICAgfSk7XG4gICAgZmllbGQgPSByZW1vdmVGb3JtRmllbGRNZXNzYWdlKGZpZWxkLCB7XG4gICAgICB0eXBlOiBFTWVzc2FnZVR5cGUuU1VDQ0VTUyxcbiAgICAgIG1lc3NhZ2U6IFwiXCJcbiAgICB9KTtcbiAgICB0aGlzLmZpZWxkRXJyb3JIaWRlKGZpZWxkS2V5LCB7XG4gICAgICB0eXBlOiBFTWVzc2FnZVR5cGUuRVJST1IsXG4gICAgICBtZXNzYWdlOiBcIlwiXG4gICAgfSk7XG5cbiAgICAvLyBSZXNldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGluIHRoZSBmb3JtRmllbGRzIGFycmF5XG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlIEVGaWVsZFR5cGUuQVBJOlxuICAgICAgICBjb25zdCBmaWVsZEFwaUNhbGwgPSBmaWVsZCBhcyBURmllbGRBcGlDYWxsO1xuICAgICAgICBmaWVsZEFwaUNhbGwuYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLkRFRkFVTFQ7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkQXBpQ2FsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBmaWVsZC5mb2N1cyA9IGZhbHNlO1xuICAgICAgICBmaWVsZC5pbnZhbGlkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkRXJyb3JTaG93KGZpZWxkS2V5OiBzdHJpbmcsIG1lc3NhZ2U6IFRNZXNzYWdlKSB7XG4gICAgbGV0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xuICAgIH0pO1xuXG4gICAgZmllbGQgPSBoaWdobGlnaHRGb3JtRmllbGRFcnJvcihmaWVsZCwgdHJ1ZSk7XG4gICAgZmllbGQgPSBhcHBlbmRGb3JtRmllbGRNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcblxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWVsZEVycm9ySGlkZShmaWVsZEtleTogc3RyaW5nLCBtZXNzYWdlOiBUTWVzc2FnZSkge1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xuICAgIGxldCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcbiAgICB9KTtcblxuICAgIGZpZWxkID0gaGlnaGxpZ2h0Rm9ybUZpZWxkRXJyb3IoZmllbGQsIGZhbHNlKTtcbiAgICBmaWVsZCA9IHJlbW92ZUZvcm1GaWVsZE1lc3NhZ2UoZmllbGQsIG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkTWVzc2FnZVNob3coZmllbGRLZXk6IHN0cmluZywgbWVzc2FnZTogVE1lc3NhZ2UpIHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBmaWVsZCA9IGFwcGVuZEZvcm1GaWVsZE1lc3NhZ2UoZmllbGQsIG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpZWxkTWVzc2FnZUhpZGUoZmllbGRLZXk6IHN0cmluZywgbWVzc2FnZTogVE1lc3NhZ2UpIHtcbiAgICBsZXQgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XG4gICAgfSk7XG5cbiAgICBmaWVsZCA9IHJlbW92ZUZvcm1GaWVsZE1lc3NhZ2UoZmllbGQsIG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHNldFZhbHVlKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGF3YWl0IHNvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICBhY3Rpb24ucHJvcHMudmFsdWUuc291cmNlXG4gICAgKTtcbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShhY3Rpb24ucHJvcHMudmFsdWUuZGVzdGluYXRpb24sIHNvdXJjZVZhbHVlKTtcblxuICAgIG9iamVjdC5GSUVMRF9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkZJRUxEX0NPTkZJRztcblxuICAgIHRoaXMuZm9ybURhdGEgPSBzb3VyY2Uub2JqZWN0LkZPUk1fREFUQTtcbiAgICB0aGlzLnBhdGNoRm9ybUdyb3VwKHRoaXMuZm9ybURhdGEpO1xuICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gc291cmNlLm9iamVjdC5BTExfRk9STVNfREFUQTtcbiAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEgPSBzb3VyY2Uub2JqZWN0LlBSRVZJT1VTX0ZPUk1fREFUQTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0RmllbGREZWZhdWx0VmFsdWUoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgIGFjdGlvbi5wcm9wcy52YWx1ZS5zb3VyY2VcbiAgICApO1xuXG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiRklFTERfQ09ORklHXCIsXG4gICAgICAgICAgICBwYXRoOiBcImRlZmF1bHQudmFsdWUudmFsdWVcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShcbiAgICAgIHtcbiAgICAgICAga2V5OiBFU291cmNlS2V5Lk9CSkVDVCxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgIGtleTogXCJGT1JNX0RBVEFcIixcbiAgICAgICAgICAgIHBhdGg6IFN0cmluZyhhY3Rpb24ucHJvcHMuZmllbGRLZXkpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlVmFsdWVcbiAgICApO1xuXG4gICAgb2JqZWN0LkZJRUxEX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuRklFTERfQ09ORklHO1xuICAgIHRoaXMuZm9ybURhdGEgPSBzb3VyY2Uub2JqZWN0LkZPUk1fREFUQTtcbiAgICB0aGlzLnBhdGNoRm9ybUdyb3VwKHRoaXMuZm9ybURhdGEpO1xuICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gc291cmNlLm9iamVjdC5BTExfRk9STVNfREFUQTtcbiAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEgPSBzb3VyY2Uub2JqZWN0LlBSRVZJT1VTX0ZPUk1fREFUQTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0QXBpU3RhdHVzKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGFjdGlvbi5wcm9wcy5zdGF0dXM7XG5cbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShcbiAgICAgIHtcbiAgICAgICAga2V5OiBFU291cmNlS2V5Lk9CSkVDVCxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgIGtleTogXCJGSUVMRF9DT05GSUdcIixcbiAgICAgICAgICAgIHBhdGg6IFwiYXBpLnN0YXR1cy52YWx1ZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlVmFsdWVcbiAgICApO1xuXG4gICAgb2JqZWN0LkZJRUxEX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuRklFTERfQ09ORklHO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRBcGlIZWFkZXJWYWx1ZShhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgY29uc3Qgc291cmNlVmFsdWUgPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKGFjdGlvbi5wcm9wcy5zb3VyY2UpO1xuXG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiQVBJX0NPTkZJR1wiLFxuICAgICAgICAgICAgcGF0aDogYHJlcXVlc3QuaGVhZGVycy52YWx1ZS4ke2FjdGlvbi5wcm9wcy5rZXl9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcblxuICAgIG9iamVjdC5BUElfQ09ORklHID0gc291cmNlLm9iamVjdC5BUElfQ09ORklHO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRBcGlIZWFkZXJWYWxpZGl0eShhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgY29uc3Qgc291cmNlVmFsdWUgPSBhY3Rpb24ucHJvcHMudmFsaWQ7XG5cbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShcbiAgICAgIHtcbiAgICAgICAga2V5OiBFU291cmNlS2V5Lk9CSkVDVCxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgIGtleTogXCJBUElfQ09ORklHXCIsXG4gICAgICAgICAgICBwYXRoOiBcInJlcXVlc3QuaGVhZGVycy5pc192YWxpZFwiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlVmFsdWVcbiAgICApO1xuXG4gICAgb2JqZWN0LkFQSV9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkFQSV9DT05GSUc7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHNldEFwaUJvZHlWYWx1ZShhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZShvYmplY3QpO1xuXG4gICAgY29uc3Qgc291cmNlVmFsdWUgPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKGFjdGlvbi5wcm9wcy5zb3VyY2UpO1xuXG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiQVBJX0NPTkZJR1wiLFxuICAgICAgICAgICAgcGF0aDogYHJlcXVlc3QuYm9keS52YWx1ZS4ke2FjdGlvbi5wcm9wcy5rZXl9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcblxuICAgIG9iamVjdC5BUElfQ09ORklHID0gc291cmNlLm9iamVjdC5BUElfQ09ORklHO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRBcGlCb2R5VmFsaWRpdHkoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYWN0aW9uLnByb3BzLnZhbGlkO1xuXG4gICAgc291cmNlLnNldFZhbHVlVG9Tb3VyY2UoXG4gICAgICB7XG4gICAgICAgIGtleTogRVNvdXJjZUtleS5PQkpFQ1QsXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICBrZXk6IFwiQVBJX0NPTkZJR1wiLFxuICAgICAgICAgICAgcGF0aDogXCJyZXF1ZXN0LmJvZHkuaXNfdmFsaWRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNvdXJjZVZhbHVlXG4gICAgKTtcblxuICAgIG9iamVjdC5BUElfQ09ORklHID0gc291cmNlLm9iamVjdC5BUElfQ09ORklHO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBzZXRGaWVsZFZhbGlkaXR5KGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGFjdGlvbi5wcm9wcy52YWxpZDtcblxuICAgIHNvdXJjZS5zZXRWYWx1ZVRvU291cmNlKFxuICAgICAge1xuICAgICAgICBrZXk6IEVTb3VyY2VLZXkuT0JKRUNULFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAga2V5OiBcIkZJRUxEX0NPTkZJR1wiLFxuICAgICAgICAgICAgcGF0aDogXCJ2YWxpZGF0aW9uLmlzX3ZhbGlkXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzb3VyY2VWYWx1ZVxuICAgICk7XG5cbiAgICBvYmplY3QuQVBJX0NPTkZJRyA9IHNvdXJjZS5vYmplY3QuQVBJX0NPTkZJRztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgc2V0RHJvcGRvd25PcHRpb25zKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICBsZXQgc291cmNlVmFsdWUgPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgYWN0aW9uLnByb3BzLnZhbHVlLnNvdXJjZVxuICAgICk7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcywgXCJvcHRpb25zXCIpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLm9wdGlvbnMsIFwiYXBwZW5kVG9QYXRoXCIpKSB7XG4gICAgICAgIGxldCBhcHBlbmRUb1BhdGggPSBhd2FpdCBzb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgIGFjdGlvbi5wcm9wcy5vcHRpb25zLmFwcGVuZFRvUGF0aC5zb3VyY2VcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZShhcHBlbmRUb1BhdGgpKSB7XG4gICAgICAgICAgY29uc3QgYXBwZW5kVG9QYXRoU3RyID0gcmVwbGFjZVN0cmluZyhcbiAgICAgICAgICAgIGFwcGVuZFRvUGF0aC5tYXRjaChcbiAgICAgICAgICAgICAgYCR7YWN0aW9uLnByb3BzLm9wdGlvbnMuYXBwZW5kVG9QYXRoLmZpbHRlclNvdXJjZVZhbHVlfWBcbiAgICAgICAgICAgIClbMF0sXG4gICAgICAgICAgICBcIlteYS16QS1aMC05X11cIixcbiAgICAgICAgICAgIFwiX1wiXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IG9wdGlvbnNQYXRoID0gYCR7YWN0aW9uLnByb3BzLm9wdGlvbnMucGF0aH0ke2FwcGVuZFRvUGF0aFN0cn1gO1xuICAgICAgICAgIHNvdXJjZVZhbHVlID0gZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aChzb3VyY2VWYWx1ZSwgb3B0aW9uc1BhdGgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb3VyY2VWYWx1ZSA9IGdldE9iamVjdFZhbHVlRnJvbVBhdGgoXG4gICAgICAgICAgc291cmNlVmFsdWUsXG4gICAgICAgICAgYWN0aW9uLnByb3BzLm9wdGlvbnMucGF0aFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2Uuc2V0VmFsdWVUb1NvdXJjZShhY3Rpb24ucHJvcHMudmFsdWUuZGVzdGluYXRpb24sIHNvdXJjZVZhbHVlKTtcblxuICAgIG9iamVjdC5GSUVMRF9DT05GSUcgPSBzb3VyY2Uub2JqZWN0LkZJRUxEX0NPTkZJRztcbiAgICB0aGlzLmZvcm1EYXRhID0gc291cmNlLm9iamVjdC5GT1JNX0RBVEE7XG4gICAgdGhpcy5hbGxGb3Jtc0RhdGEgPSBzb3VyY2Uub2JqZWN0LkFMTF9GT1JNU19EQVRBO1xuICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSA9IHNvdXJjZS5vYmplY3QuUFJFVklPVVNfRk9STV9EQVRBO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBhcGlDYWxsKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPFRBcGk+IHtcbiAgICBsZXQgYXBpQ29uZmlnID0gdGhpcy5mb3JtQ29uZmlnLmFwaXNbYWN0aW9uLnByb3BzLmZvcm1BcGlLZXldO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmhhbmRsZUFwaUNhbGwoYXBpQ29uZmlnKTtcblxuICAgIGFwaUNvbmZpZyA9IHJlc3BvbnNlLmFwaTtcblxuICAgIHRoaXMuZm9ybUNvbmZpZyA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgYGFwaXMuJHthY3Rpb24ucHJvcHMuZm9ybUFwaUtleX1gLFxuICAgICAgYXBpQ29uZmlnXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybURhdGEgPSBtZXJnZU9iamVjdHModGhpcy5mb3JtRGF0YSwge1xuICAgICAgW2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5XTogYXBpQ29uZmlnLnJlc3BvbnNlLnZhbHVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXBpQ29uZmlnO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBmaWVsZEFwaUNhbGwoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc2hvd0FwaUxvYWRlcigpO1xuXG4gICAgY29uc3QgYXBpQ29uZmlnID0gYXdhaXQgdGhpcy5hcGlDYWxsKGFjdGlvbiwgb2JqZWN0KTtcblxuICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBmaWVsZE11bHRpcGxlQXBpQ2FsbHMoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVudHJ5cG9pbnRBcGlLZXkgPSBhY3Rpb24ucHJvcHMuYXBpS2V5O1xuICAgIGxldCBmaWVsZCA9IGdldEZvcm1GaWVsZEJ5S2V5KHRoaXMuZm9ybUZpZWxkcywgYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICBjb25zdCBlbmRwb2ludHMgPSBmaWVsZC5hcGkuZW5kcG9pbnRzO1xuICAgIGNvbnN0IG5leHRBcGlJbmRleCA9IGVuZHBvaW50cy5maW5kSW5kZXgoXG4gICAgICAoYXBpOiBUQXBpRW5kcG9pbnQpID0+IGFwaS5hcGlLZXkgPT0gZW50cnlwb2ludEFwaUtleVxuICAgICk7XG4gICAgY29uc3QgYXBpQ29uZmlnID0gZW5kcG9pbnRzW25leHRBcGlJbmRleF07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaGFuZGxlRmllbGRBcGlDYWxsKGZpZWxkLCBhcGlDb25maWcpO1xuXG4gICAgZmllbGQgPSByZXNwb25zZS5maWVsZDtcbiAgICBmaWVsZC5hcGkuZW5kcG9pbnRzW25leHRBcGlJbmRleF0gPSByZXNwb25zZS5hcGk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGZpZWxkTXVsdGlwbGVBcGlDYWxsc0VuZChhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmllbGQgPSBnZXRGb3JtRmllbGRCeUtleSh0aGlzLmZvcm1GaWVsZHMsIGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgbGV0IG11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlcyA9IHt9O1xuICAgIGZpZWxkLmFwaS5lbmRwb2ludHMubWFwKChhcGk6IFRBcGlFbmRwb2ludCkgPT4ge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFwaS5yZXNwb25zZSwgXCJ2YWx1ZVwiKSlcbiAgICAgICAgbXVsdGlwbGVBcGlDYWxsUmVzcG9uc2VzID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgbXVsdGlwbGVBcGlDYWxsUmVzcG9uc2VzLFxuICAgICAgICAgIGAke2FwaS5hcGlLZXl9YCxcbiAgICAgICAgICBhcGkucmVzcG9uc2UudmFsdWVcbiAgICAgICAgKTtcbiAgICB9KTtcbiAgICB0aGlzLmZvcm1EYXRhID0ge1xuICAgICAgLi4udGhpcy5mb3JtRGF0YSxcbiAgICAgIFtmaWVsZC5rZXldOiBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXNcbiAgICB9O1xuICAgIHRoaXMucGF0Y2hGb3JtR3JvdXAodGhpcy5mb3JtRGF0YSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHRhc2tBcGlDYWxsKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGNvbnN0IGFwaUNvbmZpZyA9IGF3YWl0IHRoaXMuYXBpQ2FsbChhY3Rpb24sIG9iamVjdCk7XG5cbiAgICB0aGlzLnRhc2tEYXRhID0gbWVyZ2VPYmplY3RzKHRoaXMudGFza0RhdGEsIHtcbiAgICAgIFthY3Rpb24ucHJvcHMuZm9ybUFwaUtleV06IGFwaUNvbmZpZy5yZXNwb25zZS52YWx1ZVxuICAgIH0pO1xuXG4gICAgdGhpcy53YWl0aW5nRm9yQ2hhbmdlcyA9IGZhbHNlO1xuXG4gICAgdGhpcy5oaWRlQXBpTG9hZGVyKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHRhc2tNdWx0aXBsZUFwaUNhbGxzKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNob3dBcGlMb2FkZXIoKTtcblxuICAgIGxldCBtdWx0aXBsZUFwaUNvbmZpZyA9IHRoaXMuZm9ybUNvbmZpZy5hcGlzW2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5XTtcblxuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMsIFwiYXBpS2V5XCIpKSB7XG4gICAgICBjb25zdCBlbnRyeXBvaW50QXBpS2V5ID0gYWN0aW9uLnByb3BzLmFwaUtleTtcbiAgICAgIGNvbnN0IGVuZHBvaW50cyA9IG11bHRpcGxlQXBpQ29uZmlnLmVuZHBvaW50cztcbiAgICAgIGNvbnN0IG5leHRBcGlJbmRleCA9IGVuZHBvaW50cy5maW5kSW5kZXgoXG4gICAgICAgIChhcGk6IFRBcGlFbmRwb2ludCkgPT4gYXBpLmFwaUtleSA9PSBlbnRyeXBvaW50QXBpS2V5XG4gICAgICApO1xuICAgICAgY29uc3QgYXBpQ29uZmlnID0gZW5kcG9pbnRzW25leHRBcGlJbmRleF07XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYW5kbGVBcGlDYWxsKGFwaUNvbmZpZyk7XG5cbiAgICAgIG11bHRpcGxlQXBpQ29uZmlnLmVuZHBvaW50c1tuZXh0QXBpSW5kZXhdID0gcmVzcG9uc2UuYXBpO1xuXG4gICAgICB0aGlzLmZvcm1Db25maWcgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLFxuICAgICAgICBgYXBpcy4ke2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5fWAsXG4gICAgICAgIG11bHRpcGxlQXBpQ29uZmlnXG4gICAgICApO1xuXG4gICAgICB0aGlzLmhpZGVBcGlMb2FkZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKFxuICAgICAgICB7XG4gICAgICAgICAgRk9STV9DT05GSUc6IHRoaXMuZm9ybUNvbmZpZyxcbiAgICAgICAgICBBUElfQ09ORklHOiBtdWx0aXBsZUFwaUNvbmZpZyxcbiAgICAgICAgICBGT1JNX0ZJRUxEUzogdGhpcy5mb3JtRmllbGRzLFxuICAgICAgICAgIEZPUk1fREFUQTogdGhpcy5mb3JtRGF0YSxcbiAgICAgICAgICBUQVNLX0RBVEE6IHRoaXMudGFza0RhdGEsXG4gICAgICAgICAgUFJFVklPVVNfRk9STV9EQVRBOiB0aGlzLnByZXZpb3VzRm9ybURhdGEsXG4gICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXG4gICAgICApO1xuXG4gICAgICBhd2FpdCBhcGlzLmNhbGxOZXh0QXBpKG11bHRpcGxlQXBpQ29uZmlnLmVudHJ5cG9pbnQpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdGFza011bHRpcGxlQXBpQ2FsbHNFbmQoYWN0aW9uOiBUQWN0aW9uLCBvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG11bHRpcGxlQXBpQ29uZmlnID0gdGhpcy5mb3JtQ29uZmlnLmFwaXNbYWN0aW9uLnByb3BzLmZvcm1BcGlLZXldO1xuXG4gICAgbGV0IG11bHRpcGxlQXBpQ2FsbFJlc3BvbnNlcyA9IHt9O1xuICAgIG11bHRpcGxlQXBpQ29uZmlnLmVuZHBvaW50cy5tYXAoKGFwaTogVEFwaUVuZHBvaW50KSA9PiB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYXBpLnJlc3BvbnNlLCBcInZhbHVlXCIpKVxuICAgICAgICBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXMgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICBtdWx0aXBsZUFwaUNhbGxSZXNwb25zZXMsXG4gICAgICAgICAgYCR7YXBpLmFwaUtleX1gLFxuICAgICAgICAgIGFwaS5yZXNwb25zZS52YWx1ZVxuICAgICAgICApO1xuICAgIH0pO1xuICAgIHRoaXMudGFza0RhdGEgPSB7XG4gICAgICAuLi50aGlzLnRhc2tEYXRhLFxuICAgICAgW2FjdGlvbi5wcm9wcy5mb3JtQXBpS2V5XTogbXVsdGlwbGVBcGlDYWxsUmVzcG9uc2VzXG4gICAgfTtcblxuICAgIHRoaXMud2FpdGluZ0ZvckNoYW5nZXMgPSBmYWxzZTtcblxuICAgIHRoaXMuaGlkZUFwaUxvYWRlcigpO1xuICB9XG5cbiAgZGlhbG9nUmVmOiBhbnkgPSB1bmRlZmluZWQ7XG4gIEBsb2dNZXRob2RcbiAgZGlhbG9nU2hvdyhvcHRpb25zOiBhbnkpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZVxuICAgICAgLm9wZW4ob3B0aW9ucz8uaHRtbCwge1xuICAgICAgICBjbG9zZWFibGU6IHRydWUsXG4gICAgICAgIGRpc21pc3NpYmxlOiB0cnVlLFxuICAgICAgICBsYWJlbDogb3B0aW9ucz8ubGFiZWwsXG4gICAgICAgIHNpemU6IG9wdGlvbnM/LnNpemUgPz8gXCJzXCIsXG4gICAgICAgIGRhdGE6IHsgYnV0dG9uOiBvcHRpb25zPy5idXR0b24gfVxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge31cbiAgICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBkaWFsb2dIaWRlKCkge1xuICAgIGlmICh0aGlzLmRpYWxvZ1JlZikge1xuICAgICAgdGhpcy5kaWFsb2dSZWYuY29tcGxldGUoKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHJlZGlyZWN0VG9VcmwoYWN0aW9uOiBUQWN0aW9uKSB7XG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcywgXCJ1cmxcIikpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMudXJsLCBcInVybFwiKSkge1xuICAgICAgICBsZXQgdGltZW91dCA9IDIwMDA7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMudXJsLCBcInRpbWVvdXRcIikgJiZcbiAgICAgICAgICB0eXBlb2YgYWN0aW9uLnByb3BzLnVybC50aW1lb3V0ID09IFwibnVtYmVyXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGltZW91dCA9IGFjdGlvbi5wcm9wcy51cmwudGltZW91dDtcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLnVybCwgXCJ0YXJnZXRcIikpIHtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKGFjdGlvbi5wcm9wcy51cmwudXJsLCBhY3Rpb24ucHJvcHMudXJsLnRhcmdldCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKGFjdGlvbi5wcm9wcy51cmwudXJsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcGF0Y2hGaWVsZENvbnRyb2xWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0ucGF0Y2hWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzZXRGaWVsZENvbnRyb2xWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0uc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgcGF0Y2hGb3JtR3JvdXAoZm9ybURhdGE6IGFueSkge1xuICAgIGlmIChpc1VuZGVmaW5lZCh0aGlzLmZvcm1Hcm91cCkgfHwgaXNVbmRlZmluZWQoZm9ybURhdGEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGZvcm1Hcm91cCBvciBmb3JtRGF0YSBpcyAndW5kZWZpbmVkJy5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGZvcm1EYXRhSW5Ld2lrVUlGb3JtYXQgPSB7fTtcbiAgICAgIGZvciAobGV0IGZpZWxkS2V5IGluIGZvcm1EYXRhKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0Rm9ybUZpZWxkQnlLZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZmllbGQpICYmICFpc051bGwoZmllbGQpKSB7XG4gICAgICAgICAgZm9ybURhdGFJbkt3aWtVSUZvcm1hdFtmaWVsZEtleV0gPVxuICAgICAgICAgICAgY29udmVydEZvcm1GaWVsZFZhbHVlVG9Ld2lrVUlGb3JtYXQoZmllbGQsIGZvcm1EYXRhW2ZpZWxkS2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoZm9ybURhdGFJbkt3aWtVSUZvcm1hdCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaXNGaWVsZFZhbGlkKGZpZWxkS2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGRLZXldLnZhbGlkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBpc0ZpZWxkRW5hYmxlZChmaWVsZEtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkS2V5XS5lbmFibGVkO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBnZXRGb3JtR3JvdXBSYXdWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNob3dQcmV2aWV3KHByZXZpZXdQcm9wZXJ0aWVzOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzID0gbWVyZ2VPYmplY3RzKFxuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcyxcbiAgICAgIHByZXZpZXdQcm9wZXJ0aWVzXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIGlzRW1wdHlWYWx1ZSh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS5zcmMpICYmXG4gICAgICBpc0VtcHR5VmFsdWUodGhpcy5wcmV2aWV3UHJvcGVydGllcy5odG1sLmJlZm9yZSkgJiZcbiAgICAgIGlzRW1wdHlWYWx1ZSh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYWZ0ZXIpXG4gICAgKSB7XG4gICAgICB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLnVuYXZhaWxhYmxlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc2V0UHJldmlld1Byb3BlcnRpZXMgPSAoKSA9PiB7XG4gICAgICB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzID0ge1xuICAgICAgICBodG1sOiB7XG4gICAgICAgICAgYmVmb3JlOiBcIlwiLFxuICAgICAgICAgIGJlZm9yZVN0eWxlczogXCJcIixcbiAgICAgICAgICBhZnRlcjogXCJcIixcbiAgICAgICAgICBhZnRlclN0eWxlczogXCJcIlxuICAgICAgICB9LFxuICAgICAgICBpZnJhbWU6IHtcbiAgICAgICAgICBzcmM6IFwiXCIsXG4gICAgICAgICAgdGl0bGU6IFwiXCJcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogXCJkaWFsb2dcIixcbiAgICAgICAgcG9wdXBGb3JtS2V5OiBcIlwiLFxuICAgICAgICB0aXRsZTogXCJcIixcbiAgICAgICAgc2l6ZTogXCJhdXRvXCIsXG4gICAgICAgIHVuYXZhaWxhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2hvd0RpYWxvZyA9ICgpID0+IHtcbiAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZVxuICAgICAgICAub3Blbih0aGlzLmRpYWxvZywge1xuICAgICAgICAgIGNsb3NlYWJsZTogdHJ1ZSxcbiAgICAgICAgICBkaXNtaXNzaWJsZTogdHJ1ZSxcbiAgICAgICAgICBzaXplOiB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzPy5zaXplIHx8IFwiYXV0b1wiLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdEaWFsb2dSZWYuY29tcGxldGUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICByZXNldFByZXZpZXdQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgcmVzZXRQcmV2aWV3UHJvcGVydGllcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNob3dQcmV2aWV3ID0gKCkgPT4ge1xuICAgICAgdGhpcy5wcmV2aWV3RGlhbG9nUmVmID0gdGhpcy5wcmV2aWV3RGlhbG9nU2VydmljZVxuICAgICAgICAub3Blbih0aGlzLnByZXZpZXcgfHwgXCJcIilcbiAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIHJlc2V0UHJldmlld1Byb3BlcnRpZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBzd2l0Y2ggKHRoaXMucHJldmlld1Byb3BlcnRpZXMudHlwZSkge1xuICAgICAgY2FzZSBcImRpYWxvZ1wiOlxuICAgICAgICBzaG93RGlhbG9nKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInBvcHVwXCI6XG4gICAgICAgIHNob3dQcmV2aWV3KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2hvd0RpYWxvZygpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNob3dFcnJvclByZXZpZXcocHJldmlld1Byb3BlcnRpZXM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2hvd1ByZXZpZXcoe1xuICAgICAgaHRtbDoge1xuICAgICAgICBhZnRlcjogYDxkaXYgc3R5bGU9XFxcInBhZGRpbmctYm90dG9tOjAuMjVyZW07cGFkZGluZy10b3A6IDAuMjVyZW07cG9zaXRpb246IGFic29sdXRlO21hcmdpbi10b3A6IGNhbGMoNTB2aCk7Zm9udC1zaXplOiAxLjRyZW07YmFja2dyb3VuZDogd2hpdGU7cGFkZGluZzogMnJlbTtib3JkZXItcmFkaXVzOiAxcmVtO2JveC1zaGFkb3c6IDBweCAwcHggMTBweCAtM3B4IGJsYWNrO292ZXJmbG93OiBhdXRvO2hlaWdodDogZml0LWNvbnRlbnQ7bWF4LWhlaWdodDogOTB2aDsgd2lkdGg6IDcwdnc7IG1hcmdpbi1sZWZ0OiBjYWxjKDE1dncpOyBsaW5lLWhlaWdodDogMnJlbTtcXFwiPkVycm9yOiAke3ByZXZpZXdQcm9wZXJ0aWVzLm1lc3NhZ2UubWVzc2FnZX08L2Rpdj5gXG4gICAgICB9LFxuICAgICAgdHlwZTogXCJwb3B1cFwiXG4gICAgfSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHNob3dQb3B1cEZvcm0oXG4gICAgcG9wdXBGb3JtS2V5OiBzdHJpbmcsXG4gICAgcG9wdXBUeXBlOiBcIkRJQUxPR1wiIHwgXCJQT1BVUFwiID0gXCJESUFMT0dcIlxuICApOiB2b2lkIHtcbiAgICBjb25zdCBwb3B1cEZvcm1Db25maWcgPSB0aGlzLmZvcm1Db25maWcucG9wdXBGb3Jtc1twb3B1cEZvcm1LZXldO1xuXG4gICAgdGhpcy5vbkFjdGlvblNob3dQb3B1cEZvcm0uZW1pdCh7XG4gICAgICBhY3RpdmVGb3JtRGF0YTogbWVyZ2VPYmplY3RzKHRoaXMuZm9ybURhdGEsIHRoaXMudGFza0RhdGEpLFxuICAgICAgcG9wdXBGb3JtQ29uZmlnOiBwb3B1cEZvcm1Db25maWcsXG4gICAgICBwb3B1cFR5cGU6IHBvcHVwVHlwZVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhbGVydFNob3codHlwZTogVHVpTm90aWZpY2F0aW9uLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmFsZXJ0U2VydmljZVxuICAgICAgLm9wZW4oYCR7bWVzc2FnZX1gLCB7XG4gICAgICAgIHN0YXR1czpcbiAgICAgICAgICB0eXBlID09PSBcImVycm9yXCJcbiAgICAgICAgICAgID8gVHVpTm90aWZpY2F0aW9uLkVycm9yXG4gICAgICAgICAgICA6IHR5cGUgPT09IFwid2FybmluZ1wiXG4gICAgICAgICAgICA/IFR1aU5vdGlmaWNhdGlvbi5XYXJuaW5nXG4gICAgICAgICAgICA6IHR5cGUgPT09IFwic3VjY2Vzc1wiXG4gICAgICAgICAgICA/IFR1aU5vdGlmaWNhdGlvbi5TdWNjZXNzXG4gICAgICAgICAgICA6IFR1aU5vdGlmaWNhdGlvbi5JbmZvXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIGNvbXBsZXRlKCkge31cbiAgICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyB0YWtlQWN0aW9uT25GaWVsZEdyb3VwKGFjdGlvbjogVEFjdGlvbiwgb2JqZWN0OiBhbnkpIHtcbiAgICBzd2l0Y2ggKGFjdGlvbi5rZXkpIHtcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9HUk9VUF9ISURFOlxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBIaWRlKGFjdGlvbi5wcm9wcy5ncm91cEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX1NIT1c6XG4gICAgICAgIHRoaXMuZmllbGRHcm91cFNob3coYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfRU5BQkxFOlxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBFbmFibGUoYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfRElTQUJMRTpcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwRGlzYWJsZShhY3Rpb24ucHJvcHMuZ3JvdXBLZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdGFrZUFjdGlvbihhY3Rpb246IFRBY3Rpb24sIG9iamVjdDogYW55KSB7XG4gICAgc3dpdGNoIChhY3Rpb24ua2V5KSB7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfSElERTpcbiAgICAgICAgdGhpcy5maWVsZEhpZGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfU0hPVzpcbiAgICAgICAgdGhpcy5maWVsZFNob3coYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfRElTQUJMRTpcbiAgICAgICAgdGhpcy5maWVsZERpc2FibGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfRU5BQkxFOlxuICAgICAgICB0aGlzLmZpZWxkRW5hYmxlKGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX1JFU0VUOlxuICAgICAgICB0aGlzLmZpZWxkUmVzZXQoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfRVJST1JfU0hPVzpcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy5tZXNzYWdlLCBcInNvdXJjZVwiKSkge1xuICAgICAgICAgIGNvbnN0IGZpZWxkRXJyb3JTaG93X1NvdXJjZSA9IG5ldyBTb3VyY2Uob2JqZWN0KTtcblxuICAgICAgICAgIGxldCBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID1cbiAgICAgICAgICAgIGF3YWl0IGZpZWxkRXJyb3JTaG93X1NvdXJjZS5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICAgICAgICAgIGFjdGlvbi5wcm9wcy5tZXNzYWdlLnNvdXJjZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBmaWVsZEVycm9yU2hvd1NvdXJjZVZhbHVlID09IFwibnVtYmVyXCJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGZpZWxkRXJyb3JTaG93U291cmNlVmFsdWUgPSBTdHJpbmcoZmllbGRFcnJvclNob3dTb3VyY2VWYWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkRXJyb3JTaG93U291cmNlVmFsdWUgPSBcIlwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFjdGlvbiA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgXCJwcm9wcy5tZXNzYWdlLm1lc3NhZ2VcIixcbiAgICAgICAgICAgIGZpZWxkRXJyb3JTaG93U291cmNlVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGFjdGlvbi5wcm9wcy5tZXNzYWdlLm1lc3NhZ2UgPSB1cGRhdGVEaXNwbGF5TGFuZ3VhZ2UoXG4gICAgICAgICAgYWN0aW9uLnByb3BzLm1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICBnZXRMYW5ndWFnZSgpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZmllbGRFcnJvclNob3coYWN0aW9uLnByb3BzLmZpZWxkS2V5LCBhY3Rpb24ucHJvcHMubWVzc2FnZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0VSUk9SX0hJREU6XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3Rpb24ucHJvcHMubWVzc2FnZSwgXCJzb3VyY2VcIikpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZEVycm9ySGlkZV9Tb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICAgICAgICBsZXQgZmllbGRFcnJvckhpZGVTb3VyY2VWYWx1ZSA9XG4gICAgICAgICAgICBhd2FpdCBmaWVsZEVycm9ySGlkZV9Tb3VyY2UuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgICAgICBhY3Rpb24ucHJvcHMubWVzc2FnZS5zb3VyY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZmllbGRFcnJvckhpZGVTb3VyY2VWYWx1ZSA9PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICB0eXBlb2YgZmllbGRFcnJvckhpZGVTb3VyY2VWYWx1ZSA9PSBcIm51bWJlclwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlID0gU3RyaW5nKGZpZWxkRXJyb3JIaWRlU291cmNlVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3Rpb24gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIFwicHJvcHMubWVzc2FnZS5tZXNzYWdlXCIsXG4gICAgICAgICAgICBmaWVsZEVycm9ySGlkZVNvdXJjZVZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkRXJyb3JIaWRlKGFjdGlvbi5wcm9wcy5maWVsZEtleSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9NRVNTQUdFX1NIT1c6XG4gICAgICAgIHRoaXMuZmllbGRNZXNzYWdlU2hvdyhhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfTUVTU0FHRVNfSElERTpcbiAgICAgICAgdGhpcy5maWVsZE1lc3NhZ2VIaWRlKGFjdGlvbi5wcm9wcy5maWVsZEtleSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfVkFMVUU6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0VmFsdWUoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfRklFTERfREVGQVVMVF9WQUxVRTpcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRGaWVsZERlZmF1bHRWYWx1ZShhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9BUElfU1RBVFVTOlxuICAgICAgICBhd2FpdCB0aGlzLnNldEFwaVN0YXR1cyhhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9BUElfSEVBREVSX1ZBTFVFOlxuICAgICAgICBhd2FpdCB0aGlzLnNldEFwaUhlYWRlclZhbHVlKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0FQSV9IRUFERVJfVkFMSURJVFk6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0QXBpSGVhZGVyVmFsaWRpdHkoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfQVBJX0JPRFlfVkFMVUU6XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0QXBpQm9keVZhbHVlKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX0FQSV9CT0RZX1ZBTElESVRZOlxuICAgICAgICBhd2FpdCB0aGlzLnNldEFwaUJvZHlWYWxpZGl0eShhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9EUk9QRE9XTl9PUFRJT05TOlxuICAgICAgICBhd2FpdCB0aGlzLnNldERyb3Bkb3duT3B0aW9ucyhhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9GSUVMRF9WQUxJRElUWTpcbiAgICAgICAgYXdhaXQgdGhpcy5zZXRGaWVsZFZhbGlkaXR5KGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuSEFORExFX0NPTk5FQ1RFRF9FTEVNRU5UUzpcbiAgICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcbiAgICAgICAgICB7IGtleTogYWN0aW9uLnByb3BzLmZpZWxkS2V5IH0sXG4gICAgICAgICAgXCJPTl9BQ1RJT05cIlxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5BUElfQ0FMTDpcbiAgICAgICAgYXdhaXQgdGhpcy5maWVsZEFwaUNhbGwoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5BUElfQ0FMTF9NVUxUSVBMRTpcbiAgICAgICAgYXdhaXQgdGhpcy5maWVsZE11bHRpcGxlQXBpQ2FsbHMoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5BUElfQ0FMTF9NVUxUSVBMRV9FTkQ6XG4gICAgICAgIGF3YWl0IHRoaXMuZmllbGRNdWx0aXBsZUFwaUNhbGxzRW5kKGFjdGlvbiwgb2JqZWN0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuVEFTS19BUElfQ0FMTDpcbiAgICAgICAgYXdhaXQgdGhpcy50YXNrQXBpQ2FsbChhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlRBU0tfQVBJX0NBTExfTVVMVElQTEU6XG4gICAgICAgIGF3YWl0IHRoaXMudGFza011bHRpcGxlQXBpQ2FsbHMoYWN0aW9uLCBvYmplY3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5UQVNLX0FQSV9DQUxMX01VTFRJUExFX0VORDpcbiAgICAgICAgYXdhaXQgdGhpcy50YXNrTXVsdGlwbGVBcGlDYWxsc0VuZChhY3Rpb24sIG9iamVjdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlJFRElSRUNUX1RPX1VSTDpcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGlvbi5wcm9wcy51cmwsIFwic291cmNlXCIpKSB7XG4gICAgICAgICAgY29uc3QgcmVkaXJlY3RUb1VybF9Tb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICAgICAgICBsZXQgcmVkaXJlY3RUb1VybFNvdXJjZVZhbHVlID1cbiAgICAgICAgICAgIGF3YWl0IHJlZGlyZWN0VG9VcmxfU291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICAgICAgYWN0aW9uLnByb3BzLnVybC5zb3VyY2VcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoaXNFbXB0eVN0cmluZyhyZWRpcmVjdFRvVXJsU291cmNlVmFsdWUpKSB7XG4gICAgICAgICAgICByZWRpcmVjdFRvVXJsU291cmNlVmFsdWUgPSBcIlwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFjdGlvbiA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgXCJwcm9wcy51cmwudXJsXCIsXG4gICAgICAgICAgICByZWRpcmVjdFRvVXJsU291cmNlVmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVkaXJlY3RUb1VybChhY3Rpb24pO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlBSRVZJRVdfRElBTE9HX1NIT1c6XG4gICAgICAgIHRoaXMuc2hvd1ByZXZpZXcoYWN0aW9uLnByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuUFJFVklFV19FUlJPUl9TSE9XOlxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aW9uLnByb3BzLm1lc3NhZ2UsIFwic291cmNlXCIpKSB7XG4gICAgICAgICAgY29uc3QgcHJldmlld0Vycm9yU2hvd19Tb3VyY2UgPSBuZXcgU291cmNlKG9iamVjdCk7XG5cbiAgICAgICAgICBsZXQgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID1cbiAgICAgICAgICAgIGF3YWl0IHByZXZpZXdFcnJvclNob3dfU291cmNlLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICAgICAgYWN0aW9uLnByb3BzLm1lc3NhZ2Uuc291cmNlXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIHByZXZpZXdFcnJvclNob3dTb3VyY2VWYWx1ZSA9PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICB0eXBlb2YgcHJldmlld0Vycm9yU2hvd1NvdXJjZVZhbHVlID09IFwibnVtYmVyXCJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByZXZpZXdFcnJvclNob3dTb3VyY2VWYWx1ZSA9IFN0cmluZyhwcmV2aWV3RXJyb3JTaG93U291cmNlVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmV2aWV3RXJyb3JTaG93U291cmNlVmFsdWUgPSBcIlwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFjdGlvbiA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgXCJwcm9wcy5tZXNzYWdlLm1lc3NhZ2VcIixcbiAgICAgICAgICAgIHByZXZpZXdFcnJvclNob3dTb3VyY2VWYWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93RXJyb3JQcmV2aWV3KGFjdGlvbi5wcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlBPUFVQX0ZPUk1fU0hPVzpcbiAgICAgICAgdGhpcy5zaG93UG9wdXBGb3JtKFxuICAgICAgICAgIGFjdGlvbi5wcm9wcy5wb3B1cEZvcm1LZXksXG4gICAgICAgICAgYWN0aW9uLnByb3BzPy5wb3B1cFR5cGUgPz8gXCJESUFMT0dcIlxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TVE9QX1dBSVRJTkc6XG4gICAgICAgIHRoaXMud2FpdGluZ0ZvckNoYW5nZXMgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuTk9USUZJQ0FUSU9OX0VSUk9SX1NIT1c6XG4gICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24odHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5Lk5PVElGSUNBVElPTl9FUlJPUl9ISURFOlxuICAgICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKGZhbHNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuUkVTVU1FX1RBU0tfRVhFQ1VUSU9OOlxuICAgICAgICB0aGlzLnN0b3BUYXNrRXhlY3V0aW9uID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNUT1BfVEFTS19FWEVDVVRJT046XG4gICAgICAgIHRoaXMuc3RvcFRhc2tFeGVjdXRpb24gPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5ESUFMT0dfU0hPVzpcbiAgICAgICAgdGhpcy5kaWFsb2dTaG93KHtcbiAgICAgICAgICBodG1sOiBhY3Rpb24ucHJvcHM/Lmh0bWwsXG4gICAgICAgICAgbGFiZWw6IGFjdGlvbi5wcm9wcz8ubGFiZWwsXG4gICAgICAgICAgc2l6ZTogYWN0aW9uLnByb3BzPy5zaXplLFxuICAgICAgICAgIGJ1dHRvbjogYWN0aW9uLnByb3BzPy5idXR0b25cbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LkRJQUxPR19ISURFOlxuICAgICAgICB0aGlzLmRpYWxvZ0hpZGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0FWRV9GT1JNOlxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2xpY2tTYXZlRm9ybSh1bmRlZmluZWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5BTEVSVF9TSE9XOlxuICAgICAgICB0aGlzLmFsZXJ0U2hvdyhhY3Rpb24ucHJvcHMudHlwZSwgYWN0aW9uLnByb3BzLm1lc3NhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImt3aWtpZC1mb3JtLWNvbnRhaW5lclwiXG4gICpuZ0lmPVwiIWxvYWRpbmdcIlxuPlxuICA8ZGl2XG4gICAgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1oZWFkZXItY29udGFpbmVyXCJcbiAgICAqbmdJZj1cIlxuICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy50aXRsZT8uaGlkZGVuIHx8XG4gICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LmxvZ28/LmhpZGRlbiB8fFxuICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5zdGVwcz8uaGlkZGVuIHx8XG4gICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LmJhY2tCdXR0b24/LmhpZGRlblxuICAgIFwiXG4gID5cbiAgICA8aW1nXG4gICAgICBpZD1cInVmLWhlYWRlci1sb2dvXCJcbiAgICAgICpuZ0lmPVwiIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5sb2dvPy5oaWRkZW4gJiYgaXNNb2JpbGVWaWV3XCJcbiAgICAgIFtzcmNdPVwiZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXI/LmxvZ28/LnNyY1wiXG4gICAgICBbYWx0XT1cImZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyPy5sb2dvPy5hbHRcIlxuICAgICAgW3N0eWxlXT1cIlxuICAgICAgICBmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlcj8ubG9nbz8uc3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcbiAgICAgIFwiXG4gICAgLz5cbiAgICA8ZGl2IGlkPVwidWYtZm9ybS1maWVsZHMtaGVhZGVyLW1haW5cIj5cbiAgICAgIDxkaXYgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1oZWFkZXItbGVmdFwiPlxuICAgICAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIuYmFja0J1dHRvbi5oaWRkZW4gJiYgaXNNb2JpbGVWaWV3XG4gICAgICAgICAgXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiYmFja0J1dHRvbi5kaXNhYmxlZFwiXG4gICAgICAgICAgW3Nob3dMb2FkZXJdPVwiYmFja0J1dHRvbi5zaG93TG9hZGVyXCJcbiAgICAgICAgICBhcHBlYXJhbmNlPVwibW9ub1wiXG4gICAgICAgICAgaWNvbj1cInR1aUljb25BcnJvd0xlZnRcIlxuICAgICAgICAgIHNoYXBlPVwicm91bmRlZFwiXG4gICAgICAgICAgKG9uQ2xpY2spPVwiXG4gICAgICAgICAgICBoYW5kbGVPbkNsaWNrR29CYWNrKFxuICAgICAgICAgICAgICAkZXZlbnQsXG4gICAgICAgICAgICAgIGZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLmJhY2tCdXR0b24ubW9kZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIFwiXG4gICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1oZWFkZXItcmlnaHRcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGlkPVwidWYtZm9ybS1maWVsZHMtdGl0bGVcIlxuICAgICAgICAgICpuZ0lmPVwiIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLnRpdGxlLmhpZGRlblwiXG4gICAgICAgICAgPnt7IGZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLnRpdGxlLmxhYmVsIH19PC9kaXZcbiAgICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy1zdGVwc1wiXG4gICAgICAgICAgKm5nSWY9XCIhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIuc3RlcHMuaGlkZGVuXCJcbiAgICAgICAgPlxuICAgICAgICAgIFN0ZXAge3sgZm9ybUNvbmZpZy5zZXF1ZW5jZU5vIH19IG9mIHt7IGZvcm1Db25maWcuZm9ybXNMaXN0TGVuZ3RoIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGhyXG4gICAgICAqbmdJZj1cIlxuICAgICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzPy5oZWFkZXIudGl0bGUuaGlkZGVuIHx8XG4gICAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXM/LmhlYWRlci5zdGVwcy5oaWRkZW4gfHxcbiAgICAgICAgIWZvcm1Db25maWcucHJvcGVydGllcz8uaGVhZGVyLmJhY2tCdXR0b24uaGlkZGVuXG4gICAgICBcIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8Zm9ybVxuICAgIGNsYXNzPVwia3dpa2lkLWZvcm0gc2hvd1wiXG4gICAgW3N0eWxlXT1cImZvcm1Db25maWcucHJvcGVydGllcz8ubWFpbj8uc3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0Zvcj1cIlxuICAgICAgICBsZXQgZmllbGQgb2YgZm9ybUZpZWxkcztcbiAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgdHJhY2tCeTogZ2V0VW5pcXVlSWRlbnRpZmllclxuICAgICAgXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmaWVsZC50eXBlXCI+XG4gICAgICAgIDwhLS0gSFRNTCBDb250ZW50IC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaHRtbCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBbaW5uZXJIdG1sXT1cImZpZWxkLmh0bWwgfCBrd2lrdWlTYWZlSHRtbFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBGb3JtIFRpdGxlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGl0bGUnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ0aXRsZVwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZD8ucmVzZXRcIlxuICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwid2hpdGVibG9ja1wiXG4gICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgbGFiZWw9XCJSZXNldFwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tSZXNldEZvcm1GaWVsZHMoJGV2ZW50LCBmaWVsZClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gQnV0dG9uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYnV0dG9uJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJmaWVsZD8ucHJvcGVydGllcz8uYXBwZWFyYW5jZSA/PyAncHJpbWFyeSdcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNsYXNzXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtpY29uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pY29uXCJcbiAgICAgICAgICAgICAgW2ljb25SaWdodF09XCJmaWVsZD8ucHJvcGVydGllcz8uaWNvblJpZ2h0XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkPy5rZXlcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3NoYXBlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaGFwZVwiXG4gICAgICAgICAgICAgIFtzaG93TG9hZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5sb2FkaW5nID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxuICAgICAgICAgICAgICBbc3R5bGVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zdHlsZXNcIlxuICAgICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uJ1wiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tGb3JtRmllbGRCdXR0b24oZmllbGQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBJbnB1dCBUZXh0IC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dFxuICAgICAgICAgICAgICBbY2FzZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY2FzZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIEVtYWlsIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZW1haWwnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtZW1haWxcbiAgICAgICAgICAgICAgW2Nhc2VdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNhc2VcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2RvbWFpbnNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmRvbWFpbnNcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1lbWFpbD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIFBhc3N3b3JkIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncGFzc3dvcmQnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtcGFzc3dvcmRcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtoaW50Q29udGVudF09XCJmaWVsZD8ucHJvcGVydGllcz8uaGludENvbnRlbnRcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1wYXNzd29yZD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIFRleHRhcmVhIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dGFyZWEnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktdGV4dGFyZWFcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS10ZXh0YXJlYT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIENoZWNrYm94IC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktY2hlY2tib3hcbiAgICAgICAgICAgICAgW2NvbnRlbnRBbGlnbl09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGVudEFsaWduID8/ICdsZWZ0J1wiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemUgPz8gJ2wnXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICBbdmFyaWFudF09XCJmaWVsZD8ucHJvcGVydGllcz8udmFyaWFudCA/PyAnYmxvY2snXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWNoZWNrYm94PlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gSW5wdXQgTnVtYmVyIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LW51bWJlclxuICAgICAgICAgICAgICBbZGVjaW1hbF09XCJmaWVsZD8ucHJvcGVydGllcz8uZGVjaW1hbFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW21heF09XCJmaWVsZD8ucHJvcGVydGllcz8ubWF4XCJcbiAgICAgICAgICAgICAgW21pbl09XCJmaWVsZD8ucHJvcGVydGllcz8ubWluXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4ID8/ICcnXCJcbiAgICAgICAgICAgICAgW3ByZWNpc2lvbl09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlY2lzaW9uXCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4ID8/ICcnXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1udW1iZXI+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBJbnB1dCBEYXRlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1kYXRlXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcbiAgICAgICAgICAgICAgW21heF09XCJmaWVsZD8ucHJvcGVydGllcz8ubWF4XCJcbiAgICAgICAgICAgICAgW21heENhbGN1bGF0ZWRGcm9tVG9kYXldPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LnByb3BlcnRpZXM/Lm1heENhbGN1bGF0ZWRGcm9tVG9kYXlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW21pbl09XCJmaWVsZD8ucHJvcGVydGllcz8ubWluXCJcbiAgICAgICAgICAgICAgW21pbkNhbGN1bGF0ZWRGcm9tVG9kYXldPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LnByb3BlcnRpZXM/Lm1pbkNhbGN1bGF0ZWRGcm9tVG9kYXlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4XCJcbiAgICAgICAgICAgICAgW3ByZWZpeF09XCJmaWVsZD8ucHJvcGVydGllcz8ucHJlZml4XCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1kYXRlPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gSW5wdXQgUGhvbmUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidwaG9uZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1waG9uZVxuICAgICAgICAgICAgICBbY291bnRyeUNvZGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvdW50cnlDb2RlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbcGhvbmVNYXNrQWZ0ZXJDb3VudHJ5Q29kZV09XCJcbiAgICAgICAgICAgICAgICBmaWVsZD8ucHJvcGVydGllcz8ucGhvbmVNYXNrQWZ0ZXJDb3VudHJ5Q29kZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Bvc3RmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBvc3RmaXhcIlxuICAgICAgICAgICAgICBbcHJlZml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVmaXhcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFtyZW1vdmVDb3VudHJ5Q29kZUZyb21WYWx1ZV09XCJcbiAgICAgICAgICAgICAgICBmaWVsZD8ucHJvcGVydGllcz8ucmVtb3ZlQ291bnRyeUNvZGVGcm9tVmFsdWVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtcGhvbmU+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBJbnB1dCBSYWRpbyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3JhZGlvJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgW3R1aUxhYmVsXT1cImxhYmVsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IGF1dG87IHBhZGRpbmc6IDBweCAwLjVyZW1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8a3dpa3VpLWlucHV0LXJhZGlvXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJmaWVsZD8ub3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgW29yaWVudGF0aW9uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5vcmllbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICAgIFtzaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaXplXCJcbiAgICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtcmFkaW8+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsYWJlbFRlbXBsYXRlPlxuICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgIGNsYXNzPVwidHVpLXNwYWNlX2JvdHRvbS0yXCJcbiAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxiPlxuICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycz8ucmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc2VsZWN0J1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LXNlbGVjdFxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cImZpZWxkLm9wdGlvbnNcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICBbc2VhcmNoYWJsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2VhcmNoYWJsZVwiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LXNlbGVjdD5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIElucHV0IFNsaWRlciAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NsaWRlcidcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1zbGlkZXJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbbWF4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXhcIlxuICAgICAgICAgICAgICBbbWluXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5taW5cIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW3Bvc3RmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBvc3RmaXhcIlxuICAgICAgICAgICAgICBbcHJlZml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVmaXhcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFtxdWFudHVtXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5xdWFudHVtXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxuICAgICAgICAgICAgICBbc3RlcHNdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnN0ZXBzXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtc2xpZGVyPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gQVBJIENhbGwgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhcGknXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uLWFwaS1jYWxsXG4gICAgICAgICAgICAgIFthcGlTdGF0dXNdPVwiZmllbGQ/LmFwaT8uc3RhdHVzPy52YWx1ZVwiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJmaWVsZD8uY2xhc3NcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8uYXBpPy5zdGF0dXM/LmxhYmVsc1tmaWVsZD8uYXBpPy5zdGF0dXM/LnZhbHVlXVwiXG4gICAgICAgICAgICAgIFtzaG93TG9hZGVyXT1cImZpZWxkPy5kaXNhYmxlZCA9PT0gJ2xvYWRpbmcnXCJcbiAgICAgICAgICAgICAgc3R5bGVzPVwid2lkdGg6IGZpdC1jb250ZW50XCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlT25DbGlja0FwaUNhbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uLWFwaS1jYWxsPlxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gTW9iaWxlIE9UUCAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ290cCdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1vdHBcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbbWFza109XCJmaWVsZD8ucHJvcGVydGllcz8ubWFza1wiXG4gICAgICAgICAgICAgIFttb2RlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tb2RlXCJcbiAgICAgICAgICAgICAgW290cExlbmd0aF09XCJmaWVsZD8ucHJvcGVydGllcz8ub3RwTGVuZ3RoXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1vdHA+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBBYWRoYWFyIE51bWJlciAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FhZGhhYXItbnVtYmVyJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LWFhZGhhYXJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZD8ubGFiZWxcIlxuICAgICAgICAgICAgICBbbWFza109XCJmaWVsZD8ucHJvcGVydGllcz8ubWFza1wiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LWFhZGhhYXI+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBQcmV2aWV3IEltYWdlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJmaWVsZD8ucHJvcGVydGllcz8uY29udGFpbmVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxrd2lrdWktaW1hZ2VcbiAgICAgICAgICAgICAgW2FsdFRleHRdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmFsdFRleHRcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNsYXNzXCJcbiAgICAgICAgICAgICAgW2h0bWxdPVwiZmllbGQ/LnByb3BlcnRpZXM/Lmh0bWxcIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ltYWdlU3JjXT1cImZpZWxkPy5kZWZhdWx0Py52YWx1ZT8udmFsdWUgPz8gJydcIlxuICAgICAgICAgICAgICBbaW1hZ2VUeXBlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pbWFnZVR5cGVcIlxuICAgICAgICAgICAgICBbbG9hZGluZ1R5cGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmxvYWRpbmdUeXBlXCJcbiAgICAgICAgICAgICAgW3N0eWxlc109XCJmaWVsZD8ucHJvcGVydGllcz8uc3R5bGVzXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbWFnZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIEZpbGUgVXBsb2FkIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZmlsZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIFt0dWlMYWJlbF09XCJsYWJlbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiBhdXRvXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1maWxlc1xuICAgICAgICAgICAgICAgIFthY2NlcHRdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmFjY2VwdFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jbGFzc1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2ZpbGVzXT1cImZpbGVzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgICAgIFtpZF09XCJmaWVsZD8ua2V5XCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmxhYmVsXCJcbiAgICAgICAgICAgICAgICBbbGlua109XCJmaWVsZD8ucHJvcGVydGllcz8ubGlua1wiXG4gICAgICAgICAgICAgICAgW21heEZpbGVTaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tYXhGaWxlU2l6ZVwiXG4gICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5tdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgW3NldEZpbGVUeXBlc1RvRm9ybV09XCJbJ05PUk1BTCddXCJcbiAgICAgICAgICAgICAgICBbc3R5bGVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zdHlsZXNcIlxuICAgICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWVGaWxlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChnZXRSZW1vdmVkRmlsZSk9XCJoYW5kbGVSZW1vdmVkRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LWZpbGVzPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDBweCAwLjI1cmVtOyBtYXJnaW4tYm90dG9tOiAwLjI1cmVtXCJcbiAgICAgICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxiPlxuICAgICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycz8ucmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8IS0tIENhbWVyYSBDYXB0dXJlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2FwdHVyZSdcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxuICAgICAgICAgICAgW3N0eWxlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgZmllbGQ/LmxhYmVsICE9PSAnJyAmJlxuICAgICAgICAgICAgICAgIGZpZWxkPy5sYWJlbCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgZmllbGQ/LmxhYmVsICE9PSBudWxsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogYXV0b1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZD8ubGFiZWwgIT09ICcnXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDBweCAwLjI1cmVtOyBtYXJnaW4tYm90dG9tOiAwLjVyZW1cIlxuICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGI+XG4gICAgICAgICAgICAgICAgICB7eyBmaWVsZC5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWVsZC52YWxpZGF0b3JzPy5yZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9iPlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1jYW1lcmFcbiAgICAgICAgICAgICAgW2J1dHRvblRleHRdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmJ1dHRvblRleHRcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lmljb25cIlxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxuICAgICAgICAgICAgICBbbWVkaWFGaWxlc109XCJtZWRpYUZpbGVzW2ZpZWxkLmtleV1cIlxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXG4gICAgICAgICAgICAgIFtzaG93TWVkaWFGaWxlc109XCJmaWVsZD8ucHJvcGVydGllcz8uc2hvd01lZGlhRmlsZXNcIlxuICAgICAgICAgICAgICBbdHlwZV09XCInQ0FQVFVSRSdcIlxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZU9uQ2xpY2tJbnB1dENhbWVyYSgkZXZlbnQsIGZpZWxkKVwiXG4gICAgICAgICAgICAgIChnZXRSZW1vdmVkRmlsZSk9XCJoYW5kbGVPbkNsaWNrR2V0UmVtb3ZlZE1lZGlhRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1jYW1lcmE+XG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSBTdGFyIFJhdGluZyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3N0YXItcmF0aW5nJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgW3R1aUxhYmVsXT1cImxhYmVsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IGF1dG87IHBhZGRpbmc6IDBweCAwLjVyZW1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8a3dpa3VpLXN0YXItcmF0aW5nXG4gICAgICAgICAgICAgICAgW2NvbG9yXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb2xvclwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lmljb25cIlxuICAgICAgICAgICAgICAgIFtpY29uTWFya2VkXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5pY29uTWFya2VkXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcbiAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgW21heF09XCJmaWVsZD8ucHJvcGVydGllcz8ubWF4XCJcbiAgICAgICAgICAgICAgICBbbWluXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5taW5cIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCJmaWVsZD8ucHJvcGVydGllcz8uc2l6ZVwiXG4gICAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwva3dpa3VpLXN0YXItcmF0aW5nPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgPGJcbiAgICAgICAgICAgICAgICAgID57eyBmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXIgfX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycz8ucmVxdWlyZWRcIj4qPC9zcGFuPjwvYlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZm9ybT5cbiAgPGRpdlxuICAgIGNsYXNzPVwia3dpa2lkLWZvcm0tYnV0dG9uc1wiXG4gICAgKm5nSWY9XCJcbiAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnZpZXdGb3Jtc0J1dHRvbi5oaWRkZW4gfHxcbiAgICAgICFmb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnNhdmVCdXR0b24uaGlkZGVuXG4gICAgXCJcbiAgPlxuICAgIDxrd2lrdWktYnV0dG9uXG4gICAgICAqbmdJZj1cIlxuICAgICAgICAhZm9ybUNvbmZpZy5wcm9wZXJ0aWVzLmZvb3Rlci52aWV3Rm9ybXNCdXR0b24uaGlkZGVuICYmIGlzTW9iaWxlVmlld1xuICAgICAgXCJcbiAgICAgIFthcHBlYXJhbmNlXT1cIidzZWNvbmRhcnknXCJcbiAgICAgIFtkaXNhYmxlZF09XCJ2aWV3Rm9ybXNCdXR0b24uZGlzYWJsZWRcIlxuICAgICAgW2xhYmVsXT1cImZvcm1Db25maWcucHJvcGVydGllcy5mb290ZXIudmlld0Zvcm1zQnV0dG9uLmxhYmVsXCJcbiAgICAgIFtzaG93TG9hZGVyXT1cInZpZXdGb3Jtc0J1dHRvbi5zaG93TG9hZGVyXCJcbiAgICAgIFtzdHlsZXNdPVwiJ3dpZHRoOiAxMDAlJ1wiXG4gICAgICAob25DbGljayk9XCJoYW5kbGVPbkNsaWNrVmlld0Zvcm1zKCRldmVudClcIlxuICAgID48L2t3aWt1aS1idXR0b24+XG4gICAgPGt3aWt1aS1idXR0b25cbiAgICAgICpuZ0lmPVwiIWZvcm1Db25maWcucHJvcGVydGllcy5mb290ZXIuc2F2ZUJ1dHRvbi5oaWRkZW5cIlxuICAgICAgW2Rpc2FibGVkXT1cInNhdmVGb3JtQnV0dG9uLmRpc2FibGVkXCJcbiAgICAgIFtsYWJlbF09XCJmb3JtQ29uZmlnLnByb3BlcnRpZXMuZm9vdGVyLnNhdmVCdXR0b24ubGFiZWxcIlxuICAgICAgW3Nob3dMb2FkZXJdPVwic2F2ZUZvcm1CdXR0b24uc2hvd0xvYWRlclwiXG4gICAgICBbc3R5bGVzXT1cIid3aWR0aDogMTAwJSdcIlxuICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlT25DbGlja1NhdmVGb3JtKCRldmVudClcIlxuICAgID48L2t3aWt1aS1idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2XG4gIGNsYXNzPVwia3dpa2lkLWZvcm0tY29udGFpbmVyLWxvYWRpbmdcIlxuICAqbmdJZj1cImxvYWRpbmdcIlxuPlxuICA8ZGl2XG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgW10uY29uc3RydWN0b3IoNyk7IGxldCBpID0gaW5kZXhcIlxuICAgIGNsYXNzPVwibGFyZ2Utd3JhcHBlciB0dWktc2tlbGV0b24gdHVpLXNrZWxldG9uX3JvdW5kZWRcIlxuICA+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxrd2lrdWktbG9hZGVyPjwva3dpa3VpLWxvYWRlcj5cblxuPHR1aS1wdXNoXG4gIGlkPVwiZmllbGQtZXJyb3Itbm90aWZpY2F0aW9uXCJcbiAgKnR1aVB1c2g9XCJzaG93RXJyb3JOb3RpZmljYXRpb25cIlxuICBoZWFkaW5nPVwiTWlzc2luZy9JbmNvcnJlY3QgRmllbGRzIVwiXG4gIHR5cGU9XCJFcnJvclwiXG4gIChjbG9zZSk9XCJ0b2dnbGVFcnJvck5vdGlmaWNhdGlvbihmYWxzZSlcIlxuPlxuICA8dHVpLXN2Z1xuICAgIHNyYz1cInR1aUljb25YQ2lyY2xlXCJcbiAgICBzdHlsZT1cImNvbG9yOiAjZmZmICFpbXBvcnRhbnRcIlxuICA+XG4gIDwvdHVpLXN2Zz5cbjwvdHVpLXB1c2g+XG5cbjxuZy10ZW1wbGF0ZVxuICAjcHJldmlld1xuICBsZXQtcHJldmlld1xuPlxuICA8dHVpLXByZXZpZXdcbiAgICBbcm90YXRhYmxlXT1cImZhbHNlXCJcbiAgICBbem9vbWFibGVdPVwiZmFsc2VcIlxuICAgIGNsYXNzPVwicHJldmlldy1jb250YWluZXJcIlxuICA+XG4gICAgPHR1aS1wcmV2aWV3LXRpdGxlICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMudGl0bGUgIT09ICcnXCI+e3tcbiAgICAgIHByZXZpZXdQcm9wZXJ0aWVzLnRpdGxlXG4gICAgfX08L3R1aS1wcmV2aWV3LXRpdGxlPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZVwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5iZWZvcmUgIT09ICcnXCJcbiAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWh0bWwgcHJldmlldy1odG1sLWJlZm9yZVwiXG4gICAgICAgIFtzdHlsZV09XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYmVmb3JlU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cInByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYmVmb3JlIHwga3dpa3VpU2FmZUh0bWxcIlxuICAgICAgPjwvZGl2PlxuXG4gICAgICA8IS0tIENvbnRlbnQgd2l0aGluIHRoZSBpZnJhbWUgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicHJldmlldy1pZnJhbWUtY29udGVudFwiXG4gICAgICAgIFtzdHlsZV09XCJcbiAgICAgICAgICBwcmV2aWV3UHJvcGVydGllcz8uaWZyYW1lPy5jb250YWluZXJTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclxuICAgICAgICBcIlxuICAgICAgICAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS5zcmMgIT09ICcnXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBZb3VyIEhUTUwgY29udGVudCBoZXJlIC0tPlxuICAgICAgICA8aWZyYW1lXG4gICAgICAgICAgW3NyY109XCJwcmV2aWV3UHJvcGVydGllcy5pZnJhbWUuc3JjIHwga3dpa3VpU2FmZVVybFwiXG4gICAgICAgICAgZnJhbWVib3JkZXI9XCIwXCJcbiAgICAgICAgICBhbGxvdz1cImFjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlXCJcbiAgICAgICAgICBhbGxvd2Z1bGxzY3JlZW5cbiAgICAgICAgICBbdGl0bGVdPVwicHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnRpdGxlXCJcbiAgICAgICAgICBjbGFzcz1cInByZXZpZXctaWZyYW1lXCJcbiAgICAgICAgICBzY3JvbGxpbmc9XCJhdXRvXCJcbiAgICAgICAgPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcz8uaHRtbD8uYWZ0ZXIgIT09ICcnXCJcbiAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWh0bWwgcHJldmlldy1odG1sLWFmdGVyXCJcbiAgICAgICAgW3N0eWxlXT1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5hZnRlclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXCJcbiAgICAgICAgW2lubmVySHRtbF09XCJwcmV2aWV3UHJvcGVydGllcy5odG1sLmFmdGVyIHwga3dpa3VpU2FmZUh0bWxcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzLnVuYXZhaWxhYmxlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy11bmF2YWlsYWJsZVwiPlxuICAgICAgICA8dHVpLXN2Z1xuICAgICAgICAgIHNyYz1cInR1aUljb25GaWxlTGFyZ2VcIlxuICAgICAgICAgIGNsYXNzPVwidC1pY29uXCJcbiAgICAgICAgPjwvdHVpLXN2Zz5cbiAgICAgICAgPGRpdj5QcmV2aWV3IHVuYXZhaWxhYmxlPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxidXR0b25cbiAgICAgIHR1aUljb25CdXR0b25cbiAgICAgIHR1aVByZXZpZXdBY3Rpb25cbiAgICAgIGljb249XCJ0dWlJY29uQ2xvc2VMYXJnZVwiXG4gICAgICB0aXRsZT1cIkNsb3NlXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cInByZXZpZXcuY29tcGxldGUoKVwiXG4gICAgPjwvYnV0dG9uPlxuICA8L3R1aS1wcmV2aWV3PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNkaWFsb2dcbiAgbGV0LWRpYWxvZ1xuPlxuICA8ZGl2IGNsYXNzPVwicHJldmlldy1jb250YWluZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXByZXZpZXdQcm9wZXJ0aWVzLnVuYXZhaWxhYmxlXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmJlZm9yZSAhPT0gJydcIlxuICAgICAgICBjbGFzcz1cInByZXZpZXctaHRtbCBwcmV2aWV3LWh0bWwtYmVmb3JlXCJcbiAgICAgICAgW3N0eWxlXT1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5iZWZvcmVTdHlsZXMgPz8gJycgfCBzdHlsZVNhbml0aXplclwiXG4gICAgICAgIFtpbm5lckh0bWxdPVwicHJldmlld1Byb3BlcnRpZXMuaHRtbC5iZWZvcmUgfCBrd2lrdWlTYWZlSHRtbFwiXG4gICAgICA+PC9kaXY+XG5cbiAgICAgIDwhLS0gQ29udGVudCB3aXRoaW4gdGhlIGlmcmFtZSAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwcmV2aWV3LWlmcmFtZS1jb250ZW50XCJcbiAgICAgICAgW3N0eWxlXT1cIlxuICAgICAgICAgIHByZXZpZXdQcm9wZXJ0aWVzPy5pZnJhbWU/LmNvbnRhaW5lclN0eWxlcyA/PyAnJyB8IHN0eWxlU2FuaXRpemVyXG4gICAgICAgIFwiXG4gICAgICAgICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnNyYyAhPT0gJydcIlxuICAgICAgPlxuICAgICAgICA8IS0tIFlvdXIgSFRNTCBjb250ZW50IGhlcmUgLS0+XG4gICAgICAgIDxpZnJhbWVcbiAgICAgICAgICBbc3JjXT1cInByZXZpZXdQcm9wZXJ0aWVzLmlmcmFtZS5zcmMgfCBrd2lrdWlTYWZlVXJsXCJcbiAgICAgICAgICBmcmFtZWJvcmRlcj1cIjBcIlxuICAgICAgICAgIGFsbG93PVwiYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmVcIlxuICAgICAgICAgIGFsbG93ZnVsbHNjcmVlblxuICAgICAgICAgIFt0aXRsZV09XCJwcmV2aWV3UHJvcGVydGllcy5pZnJhbWUudGl0bGVcIlxuICAgICAgICAgIGNsYXNzPVwicHJldmlldy1pZnJhbWVcIlxuICAgICAgICAgIHNjcm9sbGluZz1cImF1dG9cIlxuICAgICAgICA+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzPy5odG1sPy5hZnRlciAhPT0gJydcIlxuICAgICAgICBjbGFzcz1cInByZXZpZXctaHRtbCBwcmV2aWV3LWh0bWwtYWZ0ZXJcIlxuICAgICAgICBbc3R5bGVdPVwicHJldmlld1Byb3BlcnRpZXM/Lmh0bWw/LmFmdGVyU3R5bGVzID8/ICcnIHwgc3R5bGVTYW5pdGl6ZXJcIlxuICAgICAgICBbaW5uZXJIdG1sXT1cInByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYWZ0ZXIgfCBrd2lrdWlTYWZlSHRtbFwiXG4gICAgICA+PC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LXVuYXZhaWxhYmxlXCI+XG4gICAgICAgIDx0dWktc3ZnXG4gICAgICAgICAgc3JjPVwidHVpSWNvbkZpbGVMYXJnZVwiXG4gICAgICAgICAgY2xhc3M9XCJ0LWljb25cIlxuICAgICAgICA+PC90dWktc3ZnPlxuICAgICAgICA8ZGl2PlByZXZpZXcgdW5hdmFpbGFibGU8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXZcbiAgaWQ9XCJrd2lraWQtY2FtZXJhLWNvbnRhaW5lclwiXG4gICpuZ0lmPVwiaXNTaG93Q2FtZXJhQ2FwdHVyZVwiXG4+XG4gIDxkaXZcbiAgICBpZD1cImt3aWtpZC1jYW1lcmEtd3JhcHBlclwiXG4gICAgW2NsYXNzLmZ1bGxzY3JlZW5dPVwiaXNTaG93Q2FtZXJhRnVsbHNjcmVlblwiXG4gID5cbiAgICA8a3dpa2lkLWNhbWVyYVxuICAgICAgW3R5cGVdPVwiJ0NBUFRVUkUnXCJcbiAgICAgIFtpbWFnZV09XCJjYW1lcmFDYXB0dXJlSW1hZ2VcIlxuICAgICAgW2NvbmZpZ109XCJjYW1lcmFDYXB0dXJlQ29uZmlnXCJcbiAgICAgIChnZXRJbWFnZSk9XCJoYW5kbGVHZXRJbWFnZSgkZXZlbnQpXCJcbiAgICAgIChvbkNsaWNrU2F2ZSk9XCJoYW5kbGVPbkNsaWNrU2F2ZUNhbWVyYUNhcHR1cmUoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciBzbG90PVwiaGVhZGVyXCI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyB3aWR0aDogMTAwJTsgbWF4LXdpZHRoOiAxMDAlOyBwYWRkaW5nOiAwcmVtXCI+XG4gICAgICAgICAgPGRpdiBzdHlsZT1cImZsZXg6IDE7IHRleHQtYWxpZ246IGxlZnRcIj4gPC9kaXY+XG4gICAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiY2FtZXJhQ2FwdHVyZUNvbmZpZz8uaGVhZGVyPy50aXRsZSAhPT0gJydcIlxuICAgICAgICAgICAgYXBwZWFyYW5jZT1cIndoaXRlYmxvY2tcIlxuICAgICAgICAgICAgW2xhYmVsXT1cImNhbWVyYUNhcHR1cmVDb25maWc/LmhlYWRlcj8udGl0bGVcIlxuICAgICAgICAgICAgc2hhcGU9XCJyb3VuZGVkXCJcbiAgICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICBtaW4td2lkdGg6IG1heC1jb250ZW50O1xuICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgICAgICAgICAgZ2FwOiAxcmVtO1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8a3dpa3VpLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImNhbWVyYUNhcHR1cmVDb25maWc/LmhlYWRlcj8uaXNFeHBhbmRcIlxuICAgICAgICAgICAgICBpZD1cImt3aWtpZC1jYW1lcmEtaGVhZGVyLWVubGFyZ2UtYnV0dG9uXCJcbiAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cIndoaXRlYmxvY2tcIlxuICAgICAgICAgICAgICBbaWNvbl09XCJcbiAgICAgICAgICAgICAgICBpc1Nob3dDYW1lcmFGdWxsc2NyZWVuID8gJ3R1aUljb25NaW5pbWl6ZTInIDogJ3R1aUljb25NYXhpbWl6ZTInXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIHNoYXBlPVwicm91bmRlZFwiXG4gICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImlzU2hvd0NhbWVyYUZ1bGxzY3JlZW4gPSAhaXNTaG93Q2FtZXJhRnVsbHNjcmVlblwiXG4gICAgICAgICAgICA+PC9rd2lrdWktYnV0dG9uPlxuICAgICAgICAgICAgPGt3aWt1aS1idXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJjYW1lcmFDYXB0dXJlQ29uZmlnPy5oZWFkZXI/LmlzQ2xvc2VcIlxuICAgICAgICAgICAgICBpZD1cImt3aWtpZC1jYW1lcmEtaGVhZGVyLWNsb3NlLWJ1dHRvblwiXG4gICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJ3aGl0ZWJsb2NrXCJcbiAgICAgICAgICAgICAgaWNvbj1cInR1aUljb25DbG9zZUxhcmdlXCJcbiAgICAgICAgICAgICAgc2hhcGU9XCJyb3VuZGVkXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlT25DbGlja0Nsb3NlQ2FtZXJhKCRldmVudClcIlxuICAgICAgICAgICAgPjwva3dpa3VpLWJ1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2t3aWtpZC1jYW1lcmE+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|