kwikid-forms 0.5.10 → 0.5.11
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 +184 -149
- package/bundles/kwikid-forms.umd.js.map +1 -1
- package/esm2015/lib/builder/builder-form-editor/builder-form-editor.component.js +29 -22
- package/esm2015/lib/builder/builder-form-list/builder-forms-list.component.js +2 -3
- package/esm2015/lib/builder/builder.component.js +26 -12
- package/esm2015/lib/renderer/config-converter/config-converter.constants.js +7 -1
- package/esm2015/lib/renderer/config-converter/config-converter.js +35 -10
- package/esm2015/lib/renderer/form-view/definitions/form-view.fields.definition.js +1 -1
- package/esm2015/lib/renderer/form-view/form-view.component.js +25 -45
- package/esm2015/lib/renderer/form-view/form-view.module.js +4 -8
- package/esm2015/lib/renderer/form-view/helpers/form-view.fields.helper.js +7 -1
- package/esm2015/lib/renderer/renderer.component.js +31 -30
- package/fesm2015/kwikid-forms.js +150 -116
- package/fesm2015/kwikid-forms.js.map +1 -1
- package/lib/builder/builder-form-editor/builder-form-editor.component.d.ts +4 -4
- package/lib/builder/builder-form-list/builder-forms-list.component.d.ts +0 -1
- package/lib/builder/builder.component.d.ts +4 -2
- package/lib/renderer/config-converter/config-converter.constants.d.ts +6 -0
- package/lib/renderer/config-converter/config-converter.d.ts +1 -0
- package/lib/renderer/form-view/definitions/form-view.fields.definition.d.ts +1 -1
- package/lib/renderer/form-view/form-view.component.d.ts +4 -6
- package/lib/renderer/form-view/form-view.module.d.ts +1 -2
- package/lib/renderer/renderer.component.d.ts +4 -4
- package/package.json +2 -2
|
@@ -12,18 +12,19 @@ import { ERendererActionKey } from "./renderer.actions.definitions";
|
|
|
12
12
|
import { EFormType } from "./renderer.definitions";
|
|
13
13
|
import { getFormConfigByKey } from "./renderer.helper";
|
|
14
14
|
import * as i0 from "@angular/core";
|
|
15
|
-
import * as i1 from "
|
|
16
|
-
import * as i2 from "./
|
|
17
|
-
import * as i3 from "
|
|
15
|
+
import * as i1 from "kwikui";
|
|
16
|
+
import * as i2 from "./forms-list/forms-list.component";
|
|
17
|
+
import * as i3 from "./form-view/form-view.component";
|
|
18
18
|
import * as i4 from "@taiga-ui/kit";
|
|
19
19
|
import * as i5 from "@taiga-ui/core";
|
|
20
20
|
import * as i6 from "@taiga-ui/addon-preview";
|
|
21
21
|
import * as i7 from "@angular/common";
|
|
22
22
|
export class KwikIDFormsRendererComponent {
|
|
23
|
-
constructor(hostElement, cdr, previewDialogService, dialogs) {
|
|
23
|
+
constructor(hostElement, cdr, previewDialogService, loaderService, dialogs) {
|
|
24
24
|
this.hostElement = hostElement;
|
|
25
25
|
this.cdr = cdr;
|
|
26
26
|
this.previewDialogService = previewDialogService;
|
|
27
|
+
this.loaderService = loaderService;
|
|
27
28
|
this.dialogs = dialogs;
|
|
28
29
|
this.formsData = {};
|
|
29
30
|
this.activeFormData = {};
|
|
@@ -32,8 +33,6 @@ export class KwikIDFormsRendererComponent {
|
|
|
32
33
|
this.getFormData = new EventEmitter();
|
|
33
34
|
this.onClickApiCall = new EventEmitter();
|
|
34
35
|
this.loading = false;
|
|
35
|
-
this.loader = false;
|
|
36
|
-
this.loaderType = "CENTER_SCREEN";
|
|
37
36
|
this.showErrorNotification = false;
|
|
38
37
|
this.activePopupFormData = {};
|
|
39
38
|
this.popupFormCallback = {};
|
|
@@ -91,9 +90,8 @@ export class KwikIDFormsRendererComponent {
|
|
|
91
90
|
}
|
|
92
91
|
ngOnInit() {
|
|
93
92
|
var _a, _b, _c;
|
|
94
|
-
this.
|
|
93
|
+
this.toggleLoader(true);
|
|
95
94
|
this.loading = true;
|
|
96
|
-
this.setLoaderType();
|
|
97
95
|
const formStepKey = (_c = (_b = (_a = this.stepConfig) === null || _a === void 0 ? void 0 : _a.form) === null || _b === void 0 ? void 0 : _b.key) !== null && _c !== void 0 ? _c : undefined;
|
|
98
96
|
if (formStepKey !== undefined &&
|
|
99
97
|
checkObjectKeyExists(this.userConfig.userFormFields, formStepKey)) {
|
|
@@ -106,7 +104,7 @@ export class KwikIDFormsRendererComponent {
|
|
|
106
104
|
throw new Error(`userFormFields doesn't have a form defined with key: ${formStepKey}`);
|
|
107
105
|
}
|
|
108
106
|
this.initializeForms("ON_INIT");
|
|
109
|
-
this.
|
|
107
|
+
this.toggleLoader(false);
|
|
110
108
|
}
|
|
111
109
|
ngOnChanges(changes) {
|
|
112
110
|
const verifyChange = (prop) => {
|
|
@@ -114,7 +112,7 @@ export class KwikIDFormsRendererComponent {
|
|
|
114
112
|
};
|
|
115
113
|
if (verifyChange("userConfig")) {
|
|
116
114
|
this.userConfig = changes.userConfig.currentValue;
|
|
117
|
-
this.
|
|
115
|
+
this.toggleLoader(false);
|
|
118
116
|
}
|
|
119
117
|
if (verifyChange("formsData")) {
|
|
120
118
|
this.formsData = changes.formsData.currentValue;
|
|
@@ -122,19 +120,18 @@ export class KwikIDFormsRendererComponent {
|
|
|
122
120
|
}
|
|
123
121
|
if (verifyChange("apiCallResponse")) {
|
|
124
122
|
this.apiCallResponse = changes.apiCallResponse.currentValue;
|
|
125
|
-
this.
|
|
123
|
+
this.toggleLoader(false);
|
|
126
124
|
}
|
|
127
125
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
126
|
+
toggleLoader(loader) {
|
|
127
|
+
if (loader) {
|
|
128
|
+
this.loaderService.show({
|
|
129
|
+
fullscreen: true,
|
|
130
|
+
loaderText: "Please wait"
|
|
131
|
+
});
|
|
134
132
|
}
|
|
135
|
-
|
|
136
|
-
this.
|
|
137
|
-
this.loaderType = "CENTER_SCREEN";
|
|
133
|
+
else {
|
|
134
|
+
this.loaderService.hide();
|
|
138
135
|
}
|
|
139
136
|
}
|
|
140
137
|
fetchFormConfig(url) {
|
|
@@ -146,7 +143,7 @@ export class KwikIDFormsRendererComponent {
|
|
|
146
143
|
}
|
|
147
144
|
initializeForms(eventType) {
|
|
148
145
|
return __awaiter(this, void 0, void 0, function* () {
|
|
149
|
-
this.
|
|
146
|
+
this.toggleLoader(true);
|
|
150
147
|
this.allFormsData = this.formsData;
|
|
151
148
|
yield this.updateFormsList();
|
|
152
149
|
if (eventType === "ON_CHANGE" &&
|
|
@@ -169,8 +166,8 @@ export class KwikIDFormsRendererComponent {
|
|
|
169
166
|
this.showForm = false;
|
|
170
167
|
this.showFormFields = false;
|
|
171
168
|
}
|
|
172
|
-
this.loader = false;
|
|
173
169
|
this.loading = false;
|
|
170
|
+
this.toggleLoader(false);
|
|
174
171
|
}
|
|
175
172
|
});
|
|
176
173
|
}
|
|
@@ -497,7 +494,7 @@ export class KwikIDFormsRendererComponent {
|
|
|
497
494
|
var _a, _b, _c, _d;
|
|
498
495
|
return __awaiter(this, void 0, void 0, function* () {
|
|
499
496
|
this.showForm = false;
|
|
500
|
-
this.
|
|
497
|
+
this.toggleLoader(true);
|
|
501
498
|
this.isUnsavedData = false;
|
|
502
499
|
let activeFormConfig = this.formsList.find((form) => {
|
|
503
500
|
if (form.key === selectedForm) {
|
|
@@ -554,6 +551,7 @@ export class KwikIDFormsRendererComponent {
|
|
|
554
551
|
}
|
|
555
552
|
}
|
|
556
553
|
}
|
|
554
|
+
formConfig = new Converter().updateFormConfigFromUserConfig(formConfig, this.userConfig);
|
|
557
555
|
formConfig = new Converter().updateFormConfigMiscellaneous(formConfig, {
|
|
558
556
|
formsListLength: this.findFormsListLength(this.formsList)
|
|
559
557
|
});
|
|
@@ -567,7 +565,7 @@ export class KwikIDFormsRendererComponent {
|
|
|
567
565
|
this.showFormFields = true;
|
|
568
566
|
}
|
|
569
567
|
this.showForm = true;
|
|
570
|
-
this.
|
|
568
|
+
this.toggleLoader(false);
|
|
571
569
|
});
|
|
572
570
|
}
|
|
573
571
|
/**
|
|
@@ -667,7 +665,7 @@ export class KwikIDFormsRendererComponent {
|
|
|
667
665
|
switch (eventType) {
|
|
668
666
|
case "FORM":
|
|
669
667
|
this.isUnsavedData = false;
|
|
670
|
-
this.
|
|
668
|
+
this.toggleLoader(true);
|
|
671
669
|
this.getFormData.emit({
|
|
672
670
|
[this.activeFormConfig.key]: {
|
|
673
671
|
formConfig: e["formConfig"],
|
|
@@ -803,8 +801,8 @@ export class KwikIDFormsRendererComponent {
|
|
|
803
801
|
}
|
|
804
802
|
}
|
|
805
803
|
}
|
|
806
|
-
/** @nocollapse */ KwikIDFormsRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: KwikIDFormsRendererComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: TuiPreviewDialogService }, { token: TuiDialogService }], target: i0.ɵɵFactoryTarget.Component });
|
|
807
|
-
/** @nocollapse */ KwikIDFormsRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDFormsRendererComponent, selector: "kwikid-forms-renderer", inputs: { stepConfig: "stepConfig", userConfig: "userConfig", formsData: "formsData", activeFormData: "activeFormData", apiCallResponse: "apiCallResponse" }, outputs: { onClickSubmit: "onClickSubmit", getFormData: "getFormData", onClickApiCall: "onClickApiCall" }, host: { listeners: { "window:resize": "windowResizeWatcher($event)" } }, viewQueries: [{ propertyName: "preview", first: true, predicate: ["preview"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div ngClass=\"kwikid-renderer\">\n <div\n ngClass=\"kwikid-layout-container\"\n *ngIf=\"!loading\"\n >\n <div\n ngClass=\"kwikid-sections-container\"\n *ngIf=\"showFormSections\"\n class=\"active\"\n [class.active]=\"showFormSections\"\n [class.mobile]=\"isMobileView\"\n >\n <kwikid-forms-list\n [showFormFields]=\"this.showFormFields\"\n [activeFormConfig]=\"this.activeFormConfig\"\n [userConfig]=\"this.userConfig\"\n [formsList]=\"this.formsList\"\n [stepConfig]=\"this.stepConfig\"\n [isUnsavedData]=\"this.isUnsavedData\"\n [formsListCompleted]=\"this.formsListCompleted\"\n [isMobileView]=\"this.isMobileView\"\n (onClickSetActiveForm)=\"this.handleOnClickSetActiveForm($event)\"\n (onClickSubmitForms)=\"this.handleOnClickSubmitForms($event)\"\n ></kwikid-forms-list>\n </div>\n <div\n ngClass=\"kwikid-forms-container\"\n *ngIf=\"\n this.showForm &&\n this.showFormFields &&\n this.activeFormConfig !== undefined\n \"\n [class.active]=\"showFormFields\"\n [class.mobile]=\"isMobileView\"\n [@panelInOut]\n >\n <kwikid-form-view\n *ngIf=\"this.activeFormConfig.type === 'FORM'\"\n [formConfig]=\"this.activeFormConfig\"\n [allFormsData]=\"this.allFormsData\"\n [isMobileView]=\"this.isMobileView\"\n [userConfig]=\"this.userConfig\"\n [popupFormCallback]=\"this.popupFormCallback\"\n [apiCallResponse]=\"this.apiCallResponse\"\n (getUnsavedDataState)=\"handleGetUnsavedState($event)\"\n (onClickApiCall)=\"handleOnClickApiCall($event)\"\n (onActionShowPopupForm)=\"\n this.handleOnActionShowPopupForm($event, content)\n \"\n (onClickGoBack)=\"this.handleOnClickGoBack($event)\"\n (onClickViewForms)=\"this.handleOnClickViewForms($event)\"\n (onClickSaveForm)=\"\n this.handleOnClickSaveForm($event, 'FORM', undefined)\n \"\n ></kwikid-form-view>\n </div>\n </div>\n</div>\n\n<kwikui-loader\n
|
|
804
|
+
/** @nocollapse */ KwikIDFormsRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: KwikIDFormsRendererComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: TuiPreviewDialogService }, { token: i1.KwikUILoaderService }, { token: TuiDialogService }], target: i0.ɵɵFactoryTarget.Component });
|
|
805
|
+
/** @nocollapse */ KwikIDFormsRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDFormsRendererComponent, selector: "kwikid-forms-renderer", inputs: { stepConfig: "stepConfig", userConfig: "userConfig", formsData: "formsData", activeFormData: "activeFormData", apiCallResponse: "apiCallResponse" }, outputs: { onClickSubmit: "onClickSubmit", getFormData: "getFormData", onClickApiCall: "onClickApiCall" }, host: { listeners: { "window:resize": "windowResizeWatcher($event)" } }, viewQueries: [{ propertyName: "preview", first: true, predicate: ["preview"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div ngClass=\"kwikid-renderer\">\n <div\n ngClass=\"kwikid-layout-container\"\n *ngIf=\"!loading\"\n >\n <div\n ngClass=\"kwikid-sections-container\"\n *ngIf=\"showFormSections\"\n class=\"active\"\n [class.active]=\"showFormSections\"\n [class.mobile]=\"isMobileView\"\n >\n <kwikid-forms-list\n [showFormFields]=\"this.showFormFields\"\n [activeFormConfig]=\"this.activeFormConfig\"\n [userConfig]=\"this.userConfig\"\n [formsList]=\"this.formsList\"\n [stepConfig]=\"this.stepConfig\"\n [isUnsavedData]=\"this.isUnsavedData\"\n [formsListCompleted]=\"this.formsListCompleted\"\n [isMobileView]=\"this.isMobileView\"\n (onClickSetActiveForm)=\"this.handleOnClickSetActiveForm($event)\"\n (onClickSubmitForms)=\"this.handleOnClickSubmitForms($event)\"\n ></kwikid-forms-list>\n </div>\n <div\n ngClass=\"kwikid-forms-container\"\n *ngIf=\"\n this.showForm &&\n this.showFormFields &&\n this.activeFormConfig !== undefined\n \"\n [class.active]=\"showFormFields\"\n [class.mobile]=\"isMobileView\"\n [@panelInOut]\n >\n <kwikid-form-view\n *ngIf=\"this.activeFormConfig.type === 'FORM'\"\n [formConfig]=\"this.activeFormConfig\"\n [allFormsData]=\"this.allFormsData\"\n [isMobileView]=\"this.isMobileView\"\n [userConfig]=\"this.userConfig\"\n [popupFormCallback]=\"this.popupFormCallback\"\n [apiCallResponse]=\"this.apiCallResponse\"\n (getUnsavedDataState)=\"handleGetUnsavedState($event)\"\n (onClickApiCall)=\"handleOnClickApiCall($event)\"\n (onActionShowPopupForm)=\"\n this.handleOnActionShowPopupForm($event, content)\n \"\n (onClickGoBack)=\"this.handleOnClickGoBack($event)\"\n (onClickViewForms)=\"this.handleOnClickViewForms($event)\"\n (onClickSaveForm)=\"\n this.handleOnClickSaveForm($event, 'FORM', undefined)\n \"\n ></kwikid-form-view>\n </div>\n </div>\n</div>\n\n<kwikui-loader\n></kwikui-loader>\n\n<tui-push\n id=\"error-notification\"\n *tuiPush=\"showErrorNotification\"\n heading=\"Please complete the required Forms!\"\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<ng-template\n #preview\n let-preview\n>\n <tui-preview\n [rotatable]=\"false\"\n [zoomable]=\"false\"\n class=\"preview-container\"\n *ngIf=\"popupFormConfig\"\n >\n <tui-preview-title *ngIf=\"previewProperties.title !== ''\">{{\n previewProperties.title\n }}</tui-preview-title>\n\n <div class=\"kwikid-form-view-popup-container\">\n <kwikid-form-view\n [formData]=\"activePopupFormData\"\n [formConfig]=\"popupFormConfig\"\n [allFormsData]=\"allFormsData\"\n [userConfig]=\"this.userConfig\"\n [isMobileView]=\"this.isMobileView\"\n [apiCallResponse]=\"this.apiCallResponse\"\n (getSavedState)=\"handleGetUnsavedState($event)\"\n (onClickApiCall)=\"handleOnClickApiCall($event)\"\n (onClickSaveForm)=\"\n this.handleOnClickSaveForm($event, 'POPUP_FORM', undefined)\n \"\n ></kwikid-form-view>\n </div>\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<ng-template\n #content\n let-context\n>\n <div class=\"kwikid-form-view-popup-container\">\n <kwikid-form-view\n [formData]=\"activePopupFormData\"\n [formConfig]=\"popupFormConfig\"\n [allFormsData]=\"allFormsData\"\n [userConfig]=\"this.userConfig\"\n [isMobileView]=\"this.isMobileView\"\n [apiCallResponse]=\"this.apiCallResponse\"\n (getSavedState)=\"handleGetUnsavedState($event)\"\n (onClickApiCall)=\"handleOnClickApiCall($event)\"\n (onClickSaveForm)=\"\n this.handleOnClickSaveForm($event, 'POPUP_FORM', context)\n \"\n ></kwikid-form-view>\n </div>\n</ng-template>\n", styles: [":host{position:relative;height:100%}.kwikid-root{width:100%;height:100%}.kwikid-renderer{display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center;width:100%;height:100%}.kwikid-layout-container{display:flex;flex-direction:row;padding:0 1rem;height:100%;justify-content:center;align-items:stretch;background:var(--tui-secondary-active);position:relative}.kwikid-sections-container{display:block;width:100%;max-width:400px;height:calc(100% - 2rem);padding:.25rem .5rem 0;border-radius:1rem;background-color:var(--tui-base-01);margin:auto 1rem auto 0;box-shadow:0 0 12px -8px var(--tui-secondary)}.kwikid-sections-container.mobile{position:absolute;top:0;left:0;z-index:5;opacity:1;visibility:visible;transition:all 1s;height:100%;border-radius:0;max-width:unset}.kwikid-forms-container{display:block;width:100%;max-width:50%;margin:auto 0;height:calc(100% - 2rem);padding:.25rem .5rem 0;border-radius:1rem;background-color:var(--tui-base-01);box-shadow:0 0 12px -8px var(--tui-primary)}.kwikid-forms-container.mobile{position:absolute;top:0;left:0;z-index:5;opacity:1;visibility:visible;transition:all 1s;height:100%;border-radius:0;max-width:unset}@media screen and (max-width: 600px){.kwikid-layout-container{padding:0;background:transparent}.kwikid-sections-container{position:absolute;max-width:100%;bottom:-10000px;left:-10000px;opacity:0;padding:0;visibility:hidden}.kwikid-sections-container.active{visibility:visible}.kwikid-sections-container.mobile{height:100%;opacity:1;visibility:visible;transition:all 2s;border-radius:0;box-shadow:none;top:0px;margin:0;position:absolute}.kwikid-forms-container{display:none;max-width:100%;height:100%;padding:0;border-radius:0;box-shadow:none}.kwikid-forms-container.mobile{height:100%;opacity:1;visibility:visible;transition:all 2s;border-radius:0;box-shadow:none;top:0px;margin:0;position:absolute}.kwikid-forms-container.active{display:block}}#error-notification{background-color:var(--tui-error-fill);color:#fff!important}#error-notification .t-top{color:#fff!important}#error-notification .t-close{color:#fff!important}.preview-container{display:flex!important;flex-grow:1!important;flex-direction:column!important;align-content:center!important;justify-content:space-between!important;align-items:stretch!important}.preview-container .preview-iframe{width:100vw;height:100vh}.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-form-view-popup-container{border-radius:1rem;background:var(--tui-base-01)}\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.KwikIDFormsListComponent, selector: "kwikid-forms-list", inputs: ["showFormFields", "userConfig", "stepConfig", "activeFormConfig", "formsList", "formsListCompleted", "isMobileView", "isUnsavedData"], outputs: ["onClickSetActiveForm", "onClickHideFormsList", "onClickSubmitForms"] }, { type: i3.KwikIDFormViewComponent, selector: "kwikid-form-view", inputs: ["formConfig", "formData", "isMobileView", "allFormsData", "userConfig", "apiCallResponse", "popupFormCallback"], outputs: ["onClickGoBack", "onClickViewForms", "getUnsavedDataState", "onClickSaveForm", "onClickApiCall", "onActionShowPopupForm"] }, { type: i1.KwikUILoaderComponent, selector: "kwikui-loader" }, { type: i4.TuiPushComponent, selector: "tui-push", inputs: ["heading", "type", "timestamp"], outputs: ["close"] }, { type: i5.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }, { type: i6.TuiPreviewComponent, selector: "tui-preview", inputs: ["zoomable", "rotatable"] }, { type: i6.TuiPreviewTitleComponent, selector: "tui-preview-title" }, { type: i5.TuiButtonComponent, selector: "button[tuiButton], button[tuiIconButton], a[tuiButton], a[tuiIconButton]", inputs: ["appearance", "disabled", "icon", "iconRight", "shape", "showLoader", "size"] }], directives: [{ type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.TuiPushAlertDirective, selector: "[tuiPush]", inputs: ["tuiPush"] }, { type: i4.TuiPushDirective, selector: "tui-push" }, { type: i6.TuiPreviewActionDirective, selector: "[tuiPreviewAction]" }], animations: [
|
|
808
806
|
trigger("panelInOut", [
|
|
809
807
|
transition(":enter", [
|
|
810
808
|
style({ transform: "translateY(100%)" }),
|
|
@@ -815,6 +813,9 @@ export class KwikIDFormsRendererComponent {
|
|
|
815
813
|
])
|
|
816
814
|
])
|
|
817
815
|
] });
|
|
816
|
+
__decorate([
|
|
817
|
+
logMethod
|
|
818
|
+
], KwikIDFormsRendererComponent.prototype, "toggleLoader", null);
|
|
818
819
|
__decorate([
|
|
819
820
|
logMethod
|
|
820
821
|
], KwikIDFormsRendererComponent.prototype, "fetchFormConfig", null);
|
|
@@ -896,7 +897,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
896
897
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i6.TuiPreviewDialogService, decorators: [{
|
|
897
898
|
type: Inject,
|
|
898
899
|
args: [TuiPreviewDialogService]
|
|
899
|
-
}] }, { type: i5.TuiDialogService, decorators: [{
|
|
900
|
+
}] }, { type: i1.KwikUILoaderService }, { type: i5.TuiDialogService, decorators: [{
|
|
900
901
|
type: Inject,
|
|
901
902
|
args: [TuiDialogService]
|
|
902
903
|
}] }]; }, propDecorators: { windowResizeWatcher: [{
|
|
@@ -921,5 +922,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
921
922
|
type: Output
|
|
922
923
|
}], onClickApiCall: [{
|
|
923
924
|
type: Output
|
|
924
|
-
}], fetchFormConfig: [], convertFormListConfig: [], assignSequenceNoToForm: [], findCompletedFormsList: [], markFormInFormsListAsCompleted: [], markFormInFormsListAsDisabled: [], filterAllFormsData: [], checkIfFormsStatusCompleted: [], findActiveFormConfig: [], updateFormsList: [], showPreview: [], formHide: [], formShow: [], findFormsListLength: [], handleOnClickSetActiveForm: [], handleGetUnsavedState: [], handleOnActionShowPopupForm: [], handleOnClickSaveForm: [], handleOnClickGoBack: [], handleOnClickSubmitForms: [] } });
|
|
925
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvcmVuZGVyZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xFLE9BQU8sRUFBb0IsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxJQUFJLEVBQ0osTUFBTSxFQUdOLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGVBQWUsRUFDZixTQUFTLEVBQ1QsWUFBWSxFQUNaLG9CQUFvQixFQUNyQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDbEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFFM0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FB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O2dDQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDOzZCQUNiLENBQUM7NEJBQ0YsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQ0FDbkIsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDOzZCQUN2RCxDQUFDO3lCQUNILENBQUM7cUJBQ0g7aUJBQ0Y7OzBCQWdHSSxNQUFNOzJCQUFDLHVCQUF1Qjs7MEJBRTlCLE1BQU07MkJBQUMsZ0JBQWdCOzRDQTlGMUIsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF3QmhDLE9BQU87c0JBRGYsU0FBUzt1QkFBQyxTQUFTO2dCQUtwQixVQUFVO3NCQURULEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTixjQUFjO3NCQURiLEtBQUs7Z0JBSU4sZUFBZTtzQkFEZCxLQUFLO2dCQUlOLGFBQWE7c0JBRFosTUFBTTtnQkFJUCxXQUFXO3NCQURWLE1BQU07Z0JBSVAsY0FBYztzQkFEYixNQUFNO2dCQThHRCxlQUFlLE1Bd0NyQixxQkFBcUIsTUE4RnJCLHNCQUFzQixNQWdCdEIsc0JBQXNCLE1BaUJ0Qiw4QkFBOEIsTUF5QjlCLDZCQUE2QixNQWlDN0Isa0JBQWtCLE1Bc0JsQiwyQkFBMkIsTUFxQjNCLG9CQUFvQixNQVlkLGVBQWUsTUE4RXJCLFdBQVcsTUFnQ1gsUUFBUSxNQU9SLFFBQVEsTUFrQ1IsbUJBQW1CLE1BNkJiLDBCQUEwQixNQTZHaEMscUJBQXFCLE1BU3JCLDJCQUEyQixNQTBGM0IscUJBQXFCLE1Bb0RyQixtQkFBbUIsTUFnRWIsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIkB0YWlnYS11aS9hZGRvbi1wcmV2aWV3XCI7XG5pbXBvcnQgeyBUdWlEaWFsb2dDb250ZXh0LCBUdWlEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIkB0YWlnYS11aS9jb3JlXCI7XG5pbXBvcnQge1xuICBBY3Rpb24sXG4gIENvbmRpdGlvbixcbiAgUnVsZSxcbiAgU291cmNlLFxuICBUQWN0aW9uLFxuICBUUnVsZSxcbiAgY2hlY2tPYmplY3RLZXlFeGlzdHMsXG4gIGdldE9iamVjdERlZXBDb3B5LFxuICBpc0VtcHR5VmFsdWUsXG4gIGlzTm90RW1wdHlWYWx1ZSxcbiAgbG9nTWV0aG9kLFxuICBtZXJnZU9iamVjdHMsXG4gIHNldFZhbHVlVG9PYmplY3RQYXRoXG59IGZyb20gXCJrd2lraWQtdG9vbGtpdFwiO1xuaW1wb3J0IHsgQ29udmVydGVyIH0gZnJvbSBcIi4vY29uZmlnLWNvbnZlcnRlci9jb25maWctY29udmVydGVyXCI7XG5pbXBvcnQgeyBFQWN0aW9uS2V5IH0gZnJvbSBcIi4vZm9ybS12aWV3L2RlZmluaXRpb25zL2Zvcm0tdmlldy5hY3Rpb25zLmRlZmluaXRpb25cIjtcbmltcG9ydCB7IEVGb3JtVmlld0dvQmFja01vZGUgfSBmcm9tIFwiLi9mb3JtLXZpZXcvZGVmaW5pdGlvbnMvZm9ybS12aWV3LmNvbW1vbnMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgVFRyaWdnZXIgfSBmcm9tIFwiLi9mb3JtLXZpZXcvZGVmaW5pdGlvbnMvZm9ybS12aWV3LnRyaWdnZXJzLmRlZmluaXRpb25cIjtcbmltcG9ydCB7IEVGb3Jtc0xpc3RTdGF0dXMgfSBmcm9tIFwiLi9mb3Jtcy1saXN0L2Zvcm1zLWxpc3QuZGVmaW5pdGlvbnNcIjtcbmltcG9ydCB7IEVSZW5kZXJlckFjdGlvbktleSB9IGZyb20gXCIuL3JlbmRlcmVyLmFjdGlvbnMuZGVmaW5pdGlvbnNcIjtcbmltcG9ydCB7IEVGb3JtVHlwZSB9IGZyb20gXCIuL3JlbmRlcmVyLmRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyBnZXRGb3JtQ29uZmlnQnlLZXkgfSBmcm9tIFwiLi9yZW5kZXJlci5oZWxwZXJcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImt3aWtpZC1mb3Jtcy1yZW5kZXJlclwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3JlbmRlcmVyLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9yZW5kZXJlci5jb21wb25lbnQuc2Nzc1wiLCBcIi4vc2hhcmVkLnNjc3NcIl0sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKFwicGFuZWxJbk91dFwiLCBbXG4gICAgICB0cmFuc2l0aW9uKFwiOmVudGVyXCIsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06IFwidHJhbnNsYXRlWSgxMDAlKVwiIH0pLFxuICAgICAgICBhbmltYXRlKDE1MClcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbihcIjpsZWF2ZVwiLCBbXG4gICAgICAgIGFuaW1hdGUoMTAwLCBzdHlsZSh7IHRyYW5zZm9ybTogXCJ0cmFuc2xhdGVZKDEwMCUpXCIgfSkpXG4gICAgICBdKVxuICAgIF0pXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgS3dpa0lERm9ybXNSZW5kZXJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLy8gVGhlIGZpbmFsIHZhbHVlIHNob3VsZCBiZSBwcm92aWRlZCB0byBzZXJ2aWNlLCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGluIGFsbCBjb21wb25lbnRzXG4gIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6cmVzaXplXCIsIFtcIiRldmVudFwiXSlcbiAgd2luZG93UmVzaXplV2F0Y2hlcigpIHtcbiAgICBpZiAodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDwgNjAwKSB7XG4gICAgICBpZiAodGhpcy5zaG93Rm9ybSkge1xuICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNob3dGb3JtKSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5pc01vYmlsZVZpZXcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBAVmlld0NoaWxkKFwicHJldmlld1wiKVxuICByZWFkb25seSBwcmV2aWV3OiBUZW1wbGF0ZVJlZjxUdWlEaWFsb2dDb250ZXh0PHZvaWQ+PjtcbiAgcHJpdmF0ZSBwcmV2aWV3RGlhbG9nUmVmOiBhbnk7XG5cbiAgQElucHV0KClcbiAgc3RlcENvbmZpZzogYW55O1xuXG4gIEBJbnB1dCgpXG4gIHVzZXJDb25maWc6IGFueTtcblxuICBASW5wdXQoKVxuICBmb3Jtc0RhdGE6IGFueSA9IHt9O1xuXG4gIEBJbnB1dCgpXG4gIGFjdGl2ZUZvcm1EYXRhOiBhbnkgPSB7fTtcblxuICBASW5wdXQoKVxuICBhcGlDYWxsUmVzcG9uc2U6IGFueSA9IHt9O1xuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrU3VibWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBnZXRGb3JtRGF0YTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KClcbiAgb25DbGlja0FwaUNhbGw6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBsb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbG9hZGVyVHlwZSA9IFwiQ0VOVEVSX1NDUkVFTlwiO1xuXG4gIHNob3dFcnJvck5vdGlmaWNhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICB0b2dnbGVFcnJvck5vdGlmaWNhdGlvbihzaG93KSB7XG4gICAgdGhpcy5zaG93RXJyb3JOb3RpZmljYXRpb24gPSBzaG93O1xuICB9XG5cbiAgYWN0aXZlUG9wdXBGb3JtRGF0YTogYW55ID0ge307XG4gIHBvcHVwRm9ybUNhbGxiYWNrOiBhbnkgPSB7fTtcbiAgYWN0aXZlRm9ybUNvbmZpZzogYW55O1xuICBhY3RpdmVGb3JtRmllbGRzOiBhbnlbXTtcbiAgYWxsRm9ybXNEYXRhOiBhbnkgPSB7fTtcbiAgYWxsRm9ybXNTdWJtaXR0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZm9ybXNMaXN0OiBhbnlbXSA9IFtdO1xuICBmb3Jtc0xpc3RDb21wbGV0ZWQ6IHN0cmluZ1tdO1xuICBpc01vYmlsZVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJldmlld1Byb3BlcnRpZXM6IGFueSA9IHtcbiAgICBodG1sOiB7XG4gICAgICBiZWZvcmU6IFwiXCIsXG4gICAgICBhZnRlcjogXCJcIlxuICAgIH0sXG4gICAgaWZyYW1lOiB7XG4gICAgICBzcmM6IFwiXCIsXG4gICAgICB0aXRsZTogXCJcIlxuICAgIH0sXG4gICAgcG9wdXBGb3JtS2V5OiBcIlwiLFxuICAgIHRpdGxlOiBcIlwiLFxuICAgIHVuYXZhaWxhYmxlOiBmYWxzZVxuICB9O1xuICBwb3B1cEZvcm1Db25maWc6IGFueSA9IHt9O1xuXG4gIC8vIGRpc3BsYXkgZm9ybXMgYW5kIGxpc3QgY29uZGl0aW9uYWxseVxuICBzaG93Rm9ybTogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93Rm9ybUZpZWxkczogYm9vbGVhbiA9IHRydWU7XG4gIHNob3dGb3JtU2VjdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xuICBpc1Vuc2F2ZWREYXRhOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBob3N0RWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChUdWlQcmV2aWV3RGlhbG9nU2VydmljZSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByZXZpZXdEaWFsb2dTZXJ2aWNlOiBUdWlQcmV2aWV3RGlhbG9nU2VydmljZSxcbiAgICBASW5qZWN0KFR1aURpYWxvZ1NlcnZpY2UpIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nczogVHVpRGlhbG9nU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLnNldExvYWRlclR5cGUoKTtcblxuICAgIGNvbnN0IGZvcm1TdGVwS2V5ID0gdGhpcy5zdGVwQ29uZmlnPy5mb3JtPy5rZXkgPz8gdW5kZWZpbmVkO1xuXG4gICAgaWYgKFxuICAgICAgZm9ybVN0ZXBLZXkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy51c2VyQ29uZmlnLnVzZXJGb3JtRmllbGRzLCBmb3JtU3RlcEtleSlcbiAgICApIHtcbiAgICAgIHRoaXMuZm9ybXNMaXN0ID0gdGhpcy51c2VyQ29uZmlnLnVzZXJGb3JtRmllbGRzW2Zvcm1TdGVwS2V5XTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51c2VyQ29uZmlnLnVzZXJGb3JtRmllbGRzKSkge1xuICAgICAgdGhpcy5mb3Jtc0xpc3QgPSB0aGlzLnVzZXJDb25maWcudXNlckZvcm1GaWVsZHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHVzZXJGb3JtRmllbGRzIGRvZXNuJ3QgaGF2ZSBhIGZvcm0gZGVmaW5lZCB3aXRoIGtleTogJHtmb3JtU3RlcEtleX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm1zKFwiT05fSU5JVFwiKTtcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IHZlcmlmeUNoYW5nZSA9IChwcm9wOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBjaGFuZ2VzLmhhc093blByb3BlcnR5KHByb3ApICYmICFjaGFuZ2VzW3Byb3BdLmZpcnN0Q2hhbmdlO1xuICAgIH07XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcInVzZXJDb25maWdcIikpIHtcbiAgICAgIHRoaXMudXNlckNvbmZpZyA9IGNoYW5nZXMudXNlckNvbmZpZy5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiZm9ybXNEYXRhXCIpKSB7XG4gICAgICB0aGlzLmZvcm1zRGF0YSA9IGNoYW5nZXMuZm9ybXNEYXRhLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgdGhpcy5pbml0aWFsaXplRm9ybXMoXCJPTl9DSEFOR0VcIik7XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJhcGlDYWxsUmVzcG9uc2VcIikpIHtcbiAgICAgIHRoaXMuYXBpQ2FsbFJlc3BvbnNlID0gY2hhbmdlcy5hcGlDYWxsUmVzcG9uc2UuY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzZXRMb2FkZXJUeXBlKCkge1xuICAgIHRoaXMubG9hZGVyVHlwZSA9IFwiQ0VOVEVSX1NDUkVFTlwiO1xuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLnVzZXJDb25maWcsIFwidXRpbGl0eUZsYWdzXCIpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy51c2VyQ29uZmlnLnV0aWxpdHlGbGFncywgXCJsb2FkZXJUeXBlXCIpKSB7XG4gICAgICAgIHRoaXMubG9hZGVyVHlwZSA9IHRoaXMudXNlckNvbmZpZy51dGlsaXR5RmxhZ3MubG9hZGVyVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5sb2FkZXJUeXBlICE9PSBcIkZVTExfU0NSRUVOXCIgJiZcbiAgICAgIHRoaXMubG9hZGVyVHlwZSAhPT0gXCJDRU5URVJfU0NSRUVOXCJcbiAgICApIHtcbiAgICAgIHRoaXMubG9hZGVyVHlwZSA9IFwiQ0VOVEVSX1NDUkVFTlwiO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgZmV0Y2hGb3JtQ29uZmlnKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgbWV0aG9kOiBcIkdFVFwiIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplRm9ybXMoZXZlbnRUeXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XG5cbiAgICB0aGlzLmFsbEZvcm1zRGF0YSA9IHRoaXMuZm9ybXNEYXRhO1xuXG4gICAgYXdhaXQgdGhpcy51cGRhdGVGb3Jtc0xpc3QoKTtcblxuICAgIGlmIChcbiAgICAgIGV2ZW50VHlwZSA9PT0gXCJPTl9DSEFOR0VcIiAmJlxuICAgICAgdGhpcy5maW5kRm9ybXNMaXN0TGVuZ3RoKHRoaXMuZm9ybXNMaXN0KSA9PT0gMVxuICAgICkge1xuICAgICAgdGhpcy5oYW5kbGVPbkNsaWNrU3VibWl0Rm9ybXMobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlUmVzaXplKHRoaXMuZm9ybXNMaXN0KTtcblxuICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZSh0aGlzLmFjdGl2ZUZvcm1Db25maWcpKSB7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmFjdGl2ZUZvcm1Db25maWcsIFwidHlwZVwiKSkge1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZUZvcm1Db25maWcudHlwZSAhPT0gRUZvcm1UeXBlLkhUTUwpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlT25DbGlja1NldEFjdGl2ZUZvcm0odGhpcy5hY3RpdmVGb3JtQ29uZmlnLmtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlT25DbGlja1NldEFjdGl2ZUZvcm0odGhpcy5hY3RpdmVGb3JtQ29uZmlnLmtleSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBjb252ZXJ0Rm9ybUxpc3RDb25maWcoZm9ybXNMaXN0OiBhbnlbXSk6IGFueVtdIHtcbiAgICBjb25zdCBjb252ZXJ0Rm9ybUxpc3RDb25maWdUeXBlRm9ybSA9IChmb3JtOiBhbnkpID0+IHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImZvcm1Db250ZW50XCIpKSB7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLmZvcm1Db250ZW50LCBcInVybFwiKSkge1xuICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcInByb3BzLnVybFwiLCBmb3JtLmZvcm1Db250ZW50LnVybCk7XG4gICAgICAgICAgZGVsZXRlIGZvcm1bXCJmb3JtQ29udGVudFwiXVtcInVybFwiXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybS5mb3JtQ29udGVudCwgXCJwYXRoXCIpKSB7XG4gICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgIFwicHJvcHMucGF0aFwiLFxuICAgICAgICAgICAgZm9ybS5mb3JtQ29udGVudC5wYXRoXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkZWxldGUgZm9ybVtcImZvcm1Db250ZW50XCJdW1wicGF0aFwiXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzRW1wdHlWYWx1ZShmb3JtLmZvcm1Db250ZW50KSkge1xuICAgICAgICBkZWxldGUgZm9ybVtcImZvcm1Db250ZW50XCJdO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwidGl0bGVcIikpIHtcbiAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwicHJvcHMudGl0bGVcIiwgZm9ybS50aXRsZSk7XG4gICAgICAgIGRlbGV0ZSBmb3JtW1widGl0bGVcIl07XG4gICAgICB9XG4gICAgICBpZiAoIWNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGZvcm0uaGlkZGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIWNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiZGlzYWJsZWRcIikpIHtcbiAgICAgICAgZm9ybS5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcInJlcXVpcmVkXCIpKSB7XG4gICAgICAgIGZvcm0ucmVxdWlyZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImRlcGVuZGVudE9uXCIpKSB7XG4gICAgICAgIGZvcm0uZGVwZW5kZW50T24gPSBbXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZvcm07XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnZlcnRGb3JtTGlzdENvbmZpZ1R5cGVIdG1sID0gKGZvcm06IGFueSkgPT4ge1xuICAgICAgaWYgKGZvcm0udHlwZSA9PT0gXCJodG1sXCIpIHtcbiAgICAgICAgZm9ybS50eXBlID0gRUZvcm1UeXBlLkhUTUw7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImh0bWxDb250ZW50XCIpKSB7XG4gICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJwcm9wc1wiKSkge1xuICAgICAgICAgIGZvcm0ucHJvcHMgPSB7XG4gICAgICAgICAgICBodG1sQ29udGVudDogZm9ybS5odG1sQ29udGVudFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIGZvcm1bXCJodG1sQ29udGVudFwiXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJwcm9wc1wiKSkge1xuICAgICAgICAgIGZvcm0ucHJvcHMgPSB7XG4gICAgICAgICAgICBodG1sQ29udGVudDogXCJcIlxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcInRpdGxlXCIpKSB7XG4gICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcInByb3BzLnRpdGxlXCIsIGZvcm0udGl0bGUpO1xuICAgICAgICBkZWxldGUgZm9ybVtcInRpdGxlXCJdO1xuICAgICAgfVxuICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICBmb3JtLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm07XG4gICAgfTtcblxuICAgIHJldHVybiBmb3Jtc0xpc3QubWFwKChmb3JtKSA9PiB7XG4gICAgICBpZiAoIWNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwidHlwZVwiKSkge1xuICAgICAgICBmb3JtLnR5cGUgPSBcIkZPUk1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcInR5cGVcIikpIHtcbiAgICAgICAgaWYgKGZvcm0udHlwZSA9PT0gRUZvcm1UeXBlLkZPUk0pIHtcbiAgICAgICAgICBmb3JtID0gY29udmVydEZvcm1MaXN0Q29uZmlnVHlwZUZvcm0oZm9ybSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybS50eXBlID09PSBFRm9ybVR5cGUuSFRNTCB8fCBmb3JtLnR5cGUgPT09IFwiaHRtbFwiKSB7XG4gICAgICAgICAgZm9ybSA9IGNvbnZlcnRGb3JtTGlzdENvbmZpZ1R5cGVIdG1sKGZvcm0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3JtO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE5PVEU6IFRvIGJlIGRlcHJlY2F0ZWQuXG4gICAqIFdoeSA/IFdpbGwgYmUgZGlyZWN0bHkgYXNzaWduZWQgd2hpbGUgZXhlY3V0aW5nICdjaGFrcmEnIGZvciBkZWZhdWx0IGZvcm0gY29uZmlnLlxuICAgKiBAcGFyYW0gZm9ybXNMaXN0IGFueVtdXG4gICAqIEBwYXJhbSBmb3Jtc0xpc3RDb21wbGV0ZWQgc3RyaW5nW11cbiAgICogQHJldHVybnMgYW55W11cbiAgICovXG4gIEBsb2dNZXRob2RcbiAgYXNzaWduU2VxdWVuY2VOb1RvRm9ybShmb3Jtc0xpc3Q6IGFueVtdKTogYW55W10ge1xuICAgIGxldCBzZXF1ZW5jZU5vID0gMTtcbiAgICBmb3IgKGxldCBmb3JtIG9mIGZvcm1zTGlzdCkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4gJiYgZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCkge1xuICAgICAgICAgIGZvcm0uc2VxdWVuY2VObyA9IHNlcXVlbmNlTm8rKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZm9ybVtcInNlcXVlbmNlTm9cIl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybXNMaXN0O1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaW5kQ29tcGxldGVkRm9ybXNMaXN0KGFsbEZvcm1zRGF0YTogYW55KTogc3RyaW5nW10ge1xuICAgIGxldCBmb3Jtc0xpc3RDb21wbGV0ZWQ6IHN0cmluZ1tdID0gW107XG5cbiAgICBPYmplY3Qua2V5cyhhbGxGb3Jtc0RhdGEpLm1hcCgoZm9ybUtleSkgPT4ge1xuICAgICAgZm9ybXNMaXN0Q29tcGxldGVkLnB1c2goZm9ybUtleSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZm9ybXNMaXN0Q29tcGxldGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIE5PVEU6IFRvIGJlIGRlcHJlY2F0ZWQuIFdoeSA/IFdpbGwgYmUgcmVwbGFjZWQgYnkgJ2NoYWtyYScuXG4gICAqIEBwYXJhbSBmb3Jtc0xpc3QgYW55W11cbiAgICogQHBhcmFtIGZvcm1zTGlzdENvbXBsZXRlZCBzdHJpbmdbXVxuICAgKiBAcmV0dXJucyBhbnlbXVxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBtYXJrRm9ybUluRm9ybXNMaXN0QXNDb21wbGV0ZWQoXG4gICAgZm9ybXNMaXN0OiBhbnlbXSxcbiAgICBmb3Jtc0xpc3RDb21wbGV0ZWQ6IHN0cmluZ1tdXG4gICk6IGFueVtdIHtcbiAgICBmb3IgKGxldCBmb3JtIG9mIGZvcm1zTGlzdCkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4gJiYgZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCkge1xuICAgICAgICAgIGlmIChmb3Jtc0xpc3RDb21wbGV0ZWQuaW5jbHVkZXMoZm9ybS5rZXkpKSB7XG4gICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJzdGF0dXNcIiwgXCJjb21wbGV0ZWRcIik7XG4gICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJkaXNhYmxlZFwiLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1zTGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBOT1RFOiBUbyBiZSBkZXByZWNhdGVkLiBXaHkgPyBXaWxsIGJlIHJlcGxhY2VkIGJ5ICdjaGFrcmEnLlxuICAgKiBAcGFyYW0gZm9ybXNMaXN0IGFueVtdXG4gICAqIEBwYXJhbSBmb3Jtc0xpc3RDb21wbGV0ZWQgc3RyaW5nW11cbiAgICogQHJldHVybnMgYW55W11cbiAgICovXG4gIEBsb2dNZXRob2RcbiAgbWFya0Zvcm1JbkZvcm1zTGlzdEFzRGlzYWJsZWQoXG4gICAgZm9ybXNMaXN0OiBhbnlbXSxcbiAgICBmb3Jtc0xpc3RDb21wbGV0ZWQ6IHN0cmluZ1tdXG4gICk6IGFueVtdIHtcbiAgICBmb3IgKGxldCBmb3JtIG9mIGZvcm1zTGlzdCkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4gJiYgZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCkge1xuICAgICAgICAgIGlmIChmb3JtLnN0YXR1cyAhPT0gXCJjb21wbGV0ZWRcIikge1xuICAgICAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiZGVwZW5kZW50T25cIikpIHtcbiAgICAgICAgICAgICAgY29uc3QgaXNEZXBlbmRlbnQgPSBmb3JtLmRlcGVuZGVudE9uLmV2ZXJ5KChyOiBzdHJpbmcpID0+XG4gICAgICAgICAgICAgICAgZm9ybXNMaXN0Q29tcGxldGVkLmluY2x1ZGVzKHIpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChpc0RlcGVuZGVudCkge1xuICAgICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcInN0YXR1c1wiLCBcImVkaXRhYmxlXCIpO1xuICAgICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImRpc2FibGVkXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJzdGF0dXNcIiwgXCJsb2NrZWRcIik7XG4gICAgICAgICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwiZGlzYWJsZWRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImRlcGVuZGVudE9uXCIsIFtdKTtcbiAgICAgICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwic3RhdHVzXCIsIFwiZWRpdGFibGVcIik7XG4gICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImRpc2FibGVkXCIsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybXNMaXN0O1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWx0ZXJBbGxGb3Jtc0RhdGEoYWxsRm9ybXNEYXRhOiBhbnksIGZvcm1zTGlzdDogYW55W10pOiBhbnkge1xuICAgIGxldCBjdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGE6IGFueSA9IHt9O1xuXG4gICAgZm9yIChsZXQgZm9ybSBvZiBmb3Jtc0xpc3QpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJoaWRkZW5cIikgJiZcbiAgICAgICAgIWZvcm0uaGlkZGVuICYmXG4gICAgICAgIGZvcm0udHlwZSAhPT0gRUZvcm1UeXBlLkhUTUxcbiAgICAgICkge1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWxsRm9ybXNEYXRhLCBmb3JtLmtleSkpIHtcbiAgICAgICAgICBjdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGEgPSB7XG4gICAgICAgICAgICAuLi5jdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICBbZm9ybS5rZXldOiBhbGxGb3Jtc0RhdGFbZm9ybS5rZXldXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGE7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGNoZWNrSWZGb3Jtc1N0YXR1c0NvbXBsZXRlZChcbiAgICBmb3Jtc0xpc3Q6IGFueSxcbiAgICBmb3Jtc0xpc3RDb21wbGV0ZWQ6IHN0cmluZ1tdXG4gICk6IGFueSB7XG4gICAgbGV0IGFsbEZvcm1zQ29tcGxldGVkOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIGZvciAoY29uc3QgZm9ybSBvZiBmb3Jtc0xpc3QpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICBpZiAoIWZvcm0uaGlkZGVuICYmIGZvcm0udHlwZSAhPT0gRUZvcm1UeXBlLkhUTUwpIHtcbiAgICAgICAgICBpZiAoZm9ybS5zdGF0dXMgIT09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgICAgICAgIGFsbEZvcm1zQ29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWxsRm9ybXNDb21wbGV0ZWQ7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpbmRBY3RpdmVGb3JtQ29uZmlnKGZvcm1zTGlzdDogYW55W10pOiBhbnkge1xuICAgIGNvbnN0IGFjdGl2ZUZvcm1Db25maWcgPSBmb3Jtc0xpc3QuZmluZCgoZm9ybSkgPT4ge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4gJiYgZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCkge1xuICAgICAgICAgIHJldHVybiBmb3JtLnN0YXR1cyA9PT0gXCJlZGl0YWJsZVwiICYmICFmb3JtLmRpc2FibGVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjdGl2ZUZvcm1Db25maWc7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHVwZGF0ZUZvcm1zTGlzdCgpIHtcbiAgICB0aGlzLmZvcm1zTGlzdCA9IHRoaXMuY29udmVydEZvcm1MaXN0Q29uZmlnKHRoaXMuZm9ybXNMaXN0KTtcblxuICAgIGZvciAobGV0IGZvcm0gb2YgdGhpcy5mb3Jtc0xpc3QpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJkZWZhdWx0XCIpICYmXG4gICAgICAgIGlzTm90RW1wdHlWYWx1ZShmb3JtLmRlZmF1bHQpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlcnM6IEFycmF5PFRUcmlnZ2VyPiA9IGZvcm0uZGVmYXVsdC50cmlnZ2VycztcbiAgICAgICAgY29uc3QgcnVsZXM6IEFycmF5PFRSdWxlPiA9IGZvcm0uZGVmYXVsdC5ydWxlcztcbiAgICAgICAgY29uc3QgYWN0aW9uczogQXJyYXk8VEFjdGlvbj4gPSBmb3JtLmRlZmF1bHQuYWN0aW9ucztcblxuICAgICAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShydWxlcywge1xuICAgICAgICAgIFVTRVJfQ09ORklHOiB0aGlzLnVzZXJDb25maWcsXG4gICAgICAgICAgRk9STVNfTElTVDogdGhpcy5mb3Jtc0xpc3QsXG4gICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICAgIH0pLm1hcHBpbmcoKTtcblxuICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgYWN0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbkV2YWx1YXRpb24gPSBuZXcgQ29uZGl0aW9uKFxuICAgICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgICAgIHJ1bGVzTWFwcGluZ1xuICAgICAgICAgICkuZXZhbHVhdGUoKTtcblxuICAgICAgICAgIGlmIChjb25kaXRpb25FdmFsdWF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBGT1JNU19MSVNUOiB0aGlzLmZvcm1zTGlzdCxcbiAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICAgIGZvcm0uaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZvcm1zTGlzdCA9IHRoaXMuYXNzaWduU2VxdWVuY2VOb1RvRm9ybSh0aGlzLmZvcm1zTGlzdCk7XG5cbiAgICAvKipcbiAgICAgKiBCZWxvdyBjb2RlIGlkZW50aWZpZXMgdGhlIGFsbEZvcm1zRGF0YSByZXF1aXJlZCBmb3IgdGhlIGN1cnJlbnQgVXNlciBGb3JtLlxuICAgICAqIFdoeT8gQmVjYXVzZSBhbGxGb3Jtc0RhdGEgd2lsbCBhY3R1YWxseSBjb250YWluIHRoZSB3aG9sZSBqb3VybmV5J3MgYWxsXG4gICAgICogcG9zc2libGUgVXNlciBGb3JtIHN0ZXBzLiBTbywgaXQgaXMgaW1wb3J0YW50IHRvIHNldCB0aGUgZm9ybSBkYXRhIHdoaWNoXG4gICAgICogdGhpcyBwYXJ0aWN1bGFyIFVzZXIgRm9ybSBvbmx5IGhhcyB0byBMT0NBTCBNRVRIT0QgVmFyaWFibGUuXG4gICAgICovXG4gICAgY29uc3QgY3VycmVudFVzZXJGb3JtQWxsRm9ybXNEYXRhID0gdGhpcy5maWx0ZXJBbGxGb3Jtc0RhdGEoXG4gICAgICB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgIHRoaXMuZm9ybXNMaXN0XG4gICAgKTtcblxuICAgIHRoaXMuZm9ybXNMaXN0Q29tcGxldGVkID0gdGhpcy5maW5kQ29tcGxldGVkRm9ybXNMaXN0KFxuICAgICAgY3VycmVudFVzZXJGb3JtQWxsRm9ybXNEYXRhXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybXNMaXN0ID0gdGhpcy5tYXJrRm9ybUluRm9ybXNMaXN0QXNDb21wbGV0ZWQoXG4gICAgICB0aGlzLmZvcm1zTGlzdCxcbiAgICAgIHRoaXMuZm9ybXNMaXN0Q29tcGxldGVkXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybXNMaXN0ID0gdGhpcy5tYXJrRm9ybUluRm9ybXNMaXN0QXNEaXNhYmxlZChcbiAgICAgIHRoaXMuZm9ybXNMaXN0LFxuICAgICAgdGhpcy5mb3Jtc0xpc3RDb21wbGV0ZWRcbiAgICApO1xuXG4gICAgdGhpcy5mb3Jtc0xpc3QgPSBnZXRPYmplY3REZWVwQ29weSh0aGlzLmZvcm1zTGlzdCk7XG5cbiAgICB0aGlzLmFjdGl2ZUZvcm1Db25maWcgPSB0aGlzLmZpbmRBY3RpdmVGb3JtQ29uZmlnKHRoaXMuZm9ybXNMaXN0KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgc2hvd1ByZXZpZXcocHJldmlld1Byb3BlcnRpZXM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMgPSBtZXJnZU9iamVjdHMoXG4gICAgICB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLFxuICAgICAgcHJldmlld1Byb3BlcnRpZXNcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgaXNFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnNyYykgJiZcbiAgICAgIGlzRW1wdHlWYWx1ZSh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYmVmb3JlKSAmJlxuICAgICAgaXNFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMuaHRtbC5hZnRlcikgJiZcbiAgICAgIGlzRW1wdHlWYWx1ZSh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLnBvcHVwRm9ybUtleSlcbiAgICApIHtcbiAgICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMucG9wdXBGb3JtS2V5KSkge1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5hY3RpdmVGb3JtQ29uZmlnLCBcInBvcHVwRm9ybXNcIikpIHtcbiAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNvbmZpZyA9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUZvcm1Db25maWcucG9wdXBGb3Jtc1tcbiAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcy5wb3B1cEZvcm1LZXlcbiAgICAgICAgICAgIF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wb3B1cEZvcm1Db25maWcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMucHJldmlld0RpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLnByZXZpZXcgfHwgXCJcIikuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZvcm1IaWRlKGZvcm1LZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCBmb3JtID0gZ2V0Rm9ybUNvbmZpZ0J5S2V5KHRoaXMuZm9ybXNMaXN0LCBmb3JtS2V5KTtcblxuICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImhpZGRlblwiLCB0cnVlKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZm9ybVNob3coZm9ybUtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGZvcm0gPSBnZXRGb3JtQ29uZmlnQnlLZXkodGhpcy5mb3Jtc0xpc3QsIGZvcm1LZXkpO1xuXG4gICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwiaGlkZGVuXCIsIGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIHRha2VBY3Rpb24oYWN0aW9uOiBhbnksIG9iamVjdDogYW55KSB7XG4gICAgc3dpdGNoIChhY3Rpb24ua2V5KSB7XG4gICAgICBjYXNlIEVSZW5kZXJlckFjdGlvbktleS5GT1JNX0hJREU6XG4gICAgICAgIHRoaXMuZm9ybUhpZGUoYWN0aW9uLnByb3BzLmZvcm1LZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRVJlbmRlcmVyQWN0aW9uS2V5LkZPUk1fU0hPVzpcbiAgICAgICAgdGhpcy5mb3JtU2hvdyhhY3Rpb24ucHJvcHMuZm9ybUtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9WQUxVRTpcbiAgICAgICAgY29uc3Qgc291cmNlcyA9IG5ldyBTb3VyY2Uoe1xuICAgICAgICAgIFVTRVJfQ09ORklHOiB0aGlzLnVzZXJDb25maWcsXG4gICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuZm9ybXNEYXRhXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlcy5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICAgICAgYWN0aW9uLnByb3BzLnZhbHVlLnNvdXJjZVxuICAgICAgICApO1xuICAgICAgICBzb3VyY2VzLnNldFZhbHVlVG9Tb3VyY2UoYWN0aW9uLnByb3BzLnZhbHVlLmRlc3RpbmF0aW9uLCBzb3VyY2VWYWx1ZSk7XG5cbiAgICAgICAgdGhpcy51c2VyQ29uZmlnID0gc291cmNlcy5vYmplY3QuVVNFUl9DT05GSUc7XG4gICAgICAgIHRoaXMuZm9ybXNEYXRhID0gc291cmNlcy5vYmplY3QuQUxMX0ZPUk1TX0RBVEE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaW5kRm9ybXNMaXN0TGVuZ3RoKGZvcm1zTGlzdDogYW55W10pOiBudW1iZXIge1xuICAgIGNvbnN0IF9mb3Jtc0xpc3QgPSBmb3Jtc0xpc3QuZmlsdGVyKChmb3JtKSA9PiB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJ0eXBlXCIpKSB7XG4gICAgICAgIGlmIChmb3JtLnR5cGUgIT09IEVGb3JtVHlwZS5IVE1MKSB7XG4gICAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgICAgICBpZiAoIWZvcm0uaGlkZGVuKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICBpZiAoIWZvcm0uaGlkZGVuKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfZm9ybXNMaXN0Lmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaWJyYXJ5IEV2ZW50IExpc3RlbmVyc1xuICAgKi9cblxuICAvKipcbiAgICogRm9ybUxpc3QgLSBMaXN0ZW5zIHRvIGV2ZW50IG9mIG9wZW5pbmcgdGhlIEZvcm1WaWV3IG9mIHdoZW4gYW55IGZvcm0gaXMgY2xpY2tlZCBpbiBGb3JtTGlzdFxuICAgKiBAcGFyYW0gc2VsZWN0ZWRGb3JtIHN0cmluZ1xuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrU2V0QWN0aXZlRm9ybShzZWxlY3RlZEZvcm06IHN0cmluZykge1xuICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XG4gICAgdGhpcy5pc1Vuc2F2ZWREYXRhID0gZmFsc2U7XG5cbiAgICBsZXQgYWN0aXZlRm9ybUNvbmZpZyA9IHRoaXMuZm9ybXNMaXN0LmZpbmQoKGZvcm0pID0+IHtcbiAgICAgIGlmIChmb3JtLmtleSA9PT0gc2VsZWN0ZWRGb3JtKSB7XG4gICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWN0aXZlRm9ybUNvbmZpZyA9IG5ldyBDb252ZXJ0ZXIoKS51cGRhdGVGb3JtQ29uZmlnUHJvcGVydGllcyhcbiAgICAgIGFjdGl2ZUZvcm1Db25maWdcbiAgICApO1xuXG4gICAgbGV0IGZvcm1Db25maWc6IGFueSA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3RpdmVGb3JtQ29uZmlnLCBcInByb3BzXCIpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aXZlRm9ybUNvbmZpZy5wcm9wcywgXCJ1cmxcIikpIHtcbiAgICAgICAgY29uc3QgZm9ybUNvbmZpZ0Zyb21VcmwgPSBhd2FpdCB0aGlzLmZldGNoRm9ybUNvbmZpZyhcbiAgICAgICAgICBhY3RpdmVGb3JtQ29uZmlnLnByb3BzLnVybFxuICAgICAgICApO1xuICAgICAgICBmb3JtQ29uZmlnID0ge1xuICAgICAgICAgIC4uLmFjdGl2ZUZvcm1Db25maWcsXG4gICAgICAgICAgLi4uZm9ybUNvbmZpZ0Zyb21VcmxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGl2ZUZvcm1Db25maWcucHJvcHMsIFwicGF0aFwiKSAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLnVzZXJDb25maWcsIFwiYmFja2VuZFwiKSAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLnVzZXJDb25maWcuYmFja2VuZCwgXCJDT05GSUdfQkFTRV9VUkxcIilcbiAgICAgICkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnVzZXJDb25maWc/LmJhY2tlbmQ/LkNPTkZJR19CQVNFX1VSTH0ke2FjdGl2ZUZvcm1Db25maWcucHJvcHMucGF0aH1gO1xuICAgICAgICBjb25zdCBmb3JtQ29uZmlnRnJvbVBhdGggPSBhd2FpdCB0aGlzLmZldGNoRm9ybUNvbmZpZyh1cmwpO1xuICAgICAgICBmb3JtQ29uZmlnID0ge1xuICAgICAgICAgIC4uLmFjdGl2ZUZvcm1Db25maWcsXG4gICAgICAgICAgLi4uZm9ybUNvbmZpZ0Zyb21QYXRoXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aXZlRm9ybUNvbmZpZywgXCJ0eXBlXCIpICYmXG4gICAgICAgICAgYWN0aXZlRm9ybUNvbmZpZy50eXBlID09PSBFRm9ybVR5cGUuRk9STVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aXZlRm9ybUNvbmZpZywgXCJmaWVsZHNcIikpIHtcbiAgICAgICAgICAgIGZvcm1Db25maWcgPSBhY3RpdmVGb3JtQ29uZmlnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIk5vIERpcmVjdCBVUkwsIE5vIFBhdGggd2l0aCBCYXNlIFVSTCwgTm8gZmllbGRzIGtleSBmb3VuZCBpbiBBY3RpdmUgRm9ybSdzIENvbmZpZyFcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBObyBEaXJlY3QgVVJMLCBObyBQYXRoIHdpdGggQmFzZSBVUkwsIE5vIGZpZWxkcyBrZXkgZm91bmQgaW4gQWN0aXZlIEZvcm0ncyBDb25maWchYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGl2ZUZvcm1Db25maWcuZm9ybUNvbnRlbnQsIFwidXJsXCIpKSB7XG4gICAgICAgIGNvbnN0IGZvcm1Db25maWdGcm9tVXJsID0gYXdhaXQgdGhpcy5mZXRjaEZvcm1Db25maWcoXG4gICAgICAgICAgYWN0aXZlRm9ybUNvbmZpZy5mb3JtQ29udGVudC51cmxcbiAgICAgICAgKTtcbiAgICAgICAgZm9ybUNvbmZpZyA9IHtcbiAgICAgICAgICAuLi5hY3RpdmVGb3JtQ29uZmlnLFxuICAgICAgICAgIC4uLmZvcm1Db25maWdGcm9tVXJsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhhY3RpdmVGb3JtQ29uZmlnLmZvcm1Db250ZW50LCBcInBhdGhcIikgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy51c2VyQ29uZmlnLCBcImJhY2tlbmRcIikgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy51c2VyQ29uZmlnLmJhY2tlbmQsIFwiQ09ORklHX0JBU0VfVVJMXCIpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy51c2VyQ29uZmlnPy5iYWNrZW5kPy5DT05GSUdfQkFTRV9VUkx9JHthY3RpdmVGb3JtQ29uZmlnLnByb3BzLnBhdGh9YDtcbiAgICAgICAgY29uc3QgZm9ybUNvbmZpZ0Zyb21QYXRoID0gYXdhaXQgdGhpcy5mZXRjaEZvcm1Db25maWcodXJsKTtcbiAgICAgICAgZm9ybUNvbmZpZyA9IHtcbiAgICAgICAgICAuLi5hY3RpdmVGb3JtQ29uZmlnLFxuICAgICAgICAgIC4uLmZvcm1Db25maWdGcm9tUGF0aFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGl2ZUZvcm1Db25maWcsIFwiZmllbGRzXCIpKSB7XG4gICAgICAgICAgZm9ybUNvbmZpZyA9IGFjdGl2ZUZvcm1Db25maWc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiTm8gRGlyZWN0IFVSTCwgTm8gUGF0aCB3aXRoIEJhc2UgVVJMLCBObyBmaWVsZHMga2V5IGZvdW5kIGluIEFjdGl2ZSBGb3JtJ3MgQ29uZmlnIVwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvcm1Db25maWcgPSBuZXcgQ29udmVydGVyKCkudXBkYXRlRm9ybUNvbmZpZ01pc2NlbGxhbmVvdXMoZm9ybUNvbmZpZywge1xuICAgICAgZm9ybXNMaXN0TGVuZ3RoOiB0aGlzLmZpbmRGb3Jtc0xpc3RMZW5ndGgodGhpcy5mb3Jtc0xpc3QpXG4gICAgfSk7XG5cbiAgICB0aGlzLmFjdGl2ZUZvcm1Db25maWcgPSBtZXJnZU9iamVjdHMoYWN0aXZlRm9ybUNvbmZpZywgZm9ybUNvbmZpZyk7XG5cbiAgICBpZiAodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDwgNjAwKSB7XG4gICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoID49IDYwMCkge1xuICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd0Zvcm0gPSB0cnVlO1xuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRm9ybVZpZXcgLSBMaXN0ZW5zIHRvIGV2ZW50IG9mIGV4ZWN1dGluZyBhbiBBUEkgY2FsbCBmcm9tIHdpdGhpbiB0aGUgRm9ybVZpZXcgYW5kIGVtaXRzIChyZWFkIGFzIHBhc3NlcykgdGhlIHNhbWUgZXZlbnQgdG8gdGhlIGxpYnJhcnkgY29uc3VtZXIuXG4gICAqIEBwYXJhbSBlIGFueVxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVHZXRVbnNhdmVkU3RhdGUoZTogYW55KSB7XG4gICAgdGhpcy5pc1Vuc2F2ZWREYXRhID0gZTtcbiAgfVxuXG4gIGhhbmRsZU9uQ2xpY2tBcGlDYWxsKGU6IGFueSkge1xuICAgIHRoaXMub25DbGlja0FwaUNhbGwuZW1pdChlKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25BY3Rpb25TaG93UG9wdXBGb3JtKGU6IGFueSwgY29udGVudDogYW55KSB7XG4gICAgaWYgKFxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZSwgXCJhY3RpdmVGb3JtRGF0YVwiKSAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZSwgXCJwb3B1cEZvcm1Db25maWdcIilcbiAgICApIHtcbiAgICAgIGNvbnN0IHBvcHVwRm9ybURhdGEgPSB7IFt0aGlzLmFjdGl2ZUZvcm1Db25maWcua2V5XTogZS5hY3RpdmVGb3JtRGF0YSB9O1xuICAgICAgdGhpcy5hY3RpdmVQb3B1cEZvcm1EYXRhID0gbWVyZ2VPYmplY3RzKHRoaXMuYWxsRm9ybXNEYXRhLCBwb3B1cEZvcm1EYXRhKTtcblxuICAgICAgdGhpcy5wb3B1cEZvcm1Db25maWcgPSBlLnBvcHVwRm9ybUNvbmZpZztcbiAgICAgIGNvbnN0IHBvcHVwVHlwZSA9IGU/LnBvcHVwVHlwZSA/PyBcIkRJQUxPR1wiO1xuXG4gICAgICBzd2l0Y2ggKHBvcHVwVHlwZSkge1xuICAgICAgICBjYXNlIFwiRElBTE9HXCI6XG4gICAgICAgICAgdGhpcy5wcmV2aWV3RGlhbG9nUmVmID0gdGhpcy5kaWFsb2dzXG4gICAgICAgICAgICAub3Blbihjb250ZW50LCB7XG4gICAgICAgICAgICAgIGNsb3NlYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxuICAgICAgICAgICAgICBzaXplOiBcInNcIixcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNhbGxiYWNrID0ge1xuICAgICAgICAgICAgICAgICAgcG9wdXBGb3JtRGF0YTogZGF0YVtcImRhdGFcIl0sXG4gICAgICAgICAgICAgICAgICBwb3B1cEZvcm1Db25maWc6IGRhdGFbXCJmb3JtQ29uZmlnXCJdLFxuICAgICAgICAgICAgICAgICAgYWN0aXZlRm9ybUNvbmZpZzogdGhpcy5hY3RpdmVGb3JtQ29uZmlnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVBvcHVwRm9ybURhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNvbmZpZyA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wdXBGb3JtQ2FsbGJhY2sgPSB7XG4gICAgICAgICAgICAgICAgICBwb3B1cEZvcm1EYXRhOiB7fSxcbiAgICAgICAgICAgICAgICAgIHBvcHVwRm9ybUNvbmZpZzogdGhpcy5wb3B1cEZvcm1Db25maWcsXG4gICAgICAgICAgICAgICAgICBhY3RpdmVGb3JtQ29uZmlnOiB0aGlzLmFjdGl2ZUZvcm1Db25maWcsXG4gICAgICAgICAgICAgICAgICBzdG9wVGFza0V4ZWN1dGlvbjogdHJ1ZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVQb3B1cEZvcm1EYXRhID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cEZvcm1Db25maWcgPSB7fTtcblxuICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIkRpYWxvZyBlcnJvclwiKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJEaWFsb2cgY2xvc2VkXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlBPUFVQXCI6XG4gICAgICAgICAgdGhpcy5wcmV2aWV3RGlhbG9nUmVmID0gdGhpcy5wcmV2aWV3RGlhbG9nU2VydmljZVxuICAgICAgICAgICAgLm9wZW4odGhpcy5wcmV2aWV3IHx8IFwiXCIpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNhbGxiYWNrID0ge1xuICAgICAgICAgICAgICAgICAgcG9wdXBGb3JtRGF0YTogZGF0YVtcImRhdGFcIl0sXG4gICAgICAgICAgICAgICAgICBwb3B1cEZvcm1Db25maWc6IGRhdGFbXCJmb3JtQ29uZmlnXCJdLFxuICAgICAgICAgICAgICAgICAgYWN0aXZlRm9ybUNvbmZpZzogdGhpcy5hY3RpdmVGb3JtQ29uZmlnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVBvcHVwRm9ybURhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNvbmZpZyA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wdXBGb3JtQ2FsbGJhY2sgPSB7XG4gICAgICAgICAgICAgICAgICBwb3B1cEZvcm1EYXRhOiB7fSxcbiAgICAgICAgICAgICAgICAgIHBvcHVwRm9ybUNvbmZpZzogdGhpcy5wb3B1cEZvcm1Db25maWcsXG4gICAgICAgICAgICAgICAgICBhY3RpdmVGb3JtQ29uZmlnOiB0aGlzLmFjdGl2ZUZvcm1Db25maWcsXG4gICAgICAgICAgICAgICAgICBzdG9wVGFza0V4ZWN1dGlvbjogdHJ1ZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVQb3B1cEZvcm1EYXRhID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cEZvcm1Db25maWcgPSB7fTtcblxuICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIlByZXZpZXcgZXJyb3JcIik7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiUHJldmlldyBjbG9zZWRcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtVmlldyAtIExpc3RlbnMgdG8gZXZlbnQgb2YgZ2V0dGluZyB0aGUgQWN0aXZlIEZvcm0ncyBEYXRhIHdoZW4gdGhlIEZvcm0gaXMgU2F2ZWQgYW5kIGVtaXRzIChyZWFkIGFzIHBhc3NlcykgdGhlIHNhbWUgZXZlbnQgdG8gdGhlIGxpYnJhcnkgY29uc3VtZXIuXG4gICAqIEBwYXJhbSBlIGFueVxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrU2F2ZUZvcm0oXG4gICAgZTogYW55LFxuICAgIGV2ZW50VHlwZTogXCJGT1JNXCIgfCBcIlBPUFVQX0ZPUk1cIixcbiAgICBjb250ZXh0OiB1bmRlZmluZWRcbiAgKSB7XG4gICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgIGNhc2UgXCJGT1JNXCI6XG4gICAgICAgIHRoaXMuaXNVbnNhdmVkRGF0YSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5nZXRGb3JtRGF0YS5lbWl0KHtcbiAgICAgICAgICBbdGhpcy5hY3RpdmVGb3JtQ29uZmlnLmtleV06IHtcbiAgICAgICAgICAgIGZvcm1Db25maWc6IGVbXCJmb3JtQ29uZmlnXCJdLFxuICAgICAgICAgICAgZGF0YTogZVtcImRhdGFcIl0sXG4gICAgICAgICAgICBleHRlbmRlZERhdGE6IGVbXCJleHRlbmRlZERhdGFcIl1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJQT1BVUF9GT1JNXCI6XG4gICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZi5uZXh0KGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtVmlldyAtIExpc3RlbnMgdG8gZXZlbnQgb2Ygc2hvd2luZyB0aGUgRm9ybXMgTGlzdCBpbiBNb2JpbGUgVmlldy5cbiAgICogQHBhcmFtIGUgYW55XG4gICAqL1xuICBoYW5kbGVPbkNsaWNrVmlld0Zvcm1zKGU6IGFueSkge1xuICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgdGhpcy5zaG93Rm9ybSA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBldmVudCBvZiBnb2luZyBiYWNrIHRvIHRoZSBwcmV2aW91cyBmb3JtIGRpcmVjdGx5IG9yIGJ5IHRhYmJpbmcsIHdpdGhvdXQgc2hvd2luZyB0aGUgZm9ybSBsaXN0IGluIG1vYmlsZSB2aWV3LlxuICAgKlxuICAgKiBQcmVyZXF1aXNpdGU6IFRoZSBjdXJyZW50IGZvcm0gY2FuIG5ldmVyIGJlIGxvY2tlZDsgaXQgc2hvdWxkIGVpdGhlciBiZSBpbiBhbiBlZGl0YWJsZSBvciBjb21wbGV0ZWQgc3RhdGUuXG4gICAqXG4gICAqIExvZ2ljOlxuICAgKiAxLiBGb3IgRElSRUNUIG1vZGUsIGZpbmQgdGhlIGNvbmZpZyBvZiB0aGUgcHJldmlvdXMgZm9ybSBzdGFydGluZyBmcm9tIHRoZSBmaXJzdCBmb3JtLCBzdWNoIHRoYXQgdGhlIHByZXZpb3VzIGZvcm0gaXMgZWRpdGFibGUgYW5kIGl0cyBzZXF1ZW5jZSBudW1iZXIgaXMgb25lIGxlc3MgdGhhbiB0aGUgY3VycmVudCBhY3RpdmUgZm9ybSdzIHNlcXVlbmNlIG51bWJlci5cbiAgICogICAgSWYgbm8gcHJldmlvdXMgZm9ybSBpcyBmb3VuZCBvciBhbGwgZm9ybXMgaGF2ZSBiZWVuIGNvbXBsZXRlZCwgc2hvdyB0aGUgZm9ybSBsaXN0LlxuICAgKiAyLiBGb3IgVEFCQkVEIG1vZGUsIGZpbmQgdGhlIGNvbmZpZyBvZiB0aGUgcHJldmlvdXMgZm9ybSBpbiB0aGUgbGlzdCwgc3VjaCB0aGF0IHRoZSBwcmV2aW91cyBmb3JtJ3Mgc2VxdWVuY2UgbnVtYmVyIGlzIGxlc3MgdGhhbiB0aGUgY3VycmVudCBhY3RpdmUgZm9ybSdzIHNlcXVlbmNlIG51bWJlciBhbmQgdGhlIGZvcm0gaXMgZWRpdGFibGUuXG4gICAqICAgIElmIG5vIHByZXZpb3VzIGZvcm0gaXMgZm91bmQsIHNob3cgdGhlIGZvcm0gbGlzdC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGUgLSBUaGUgZXZlbnQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG1vZGUgdG8gZ28gYmFjayBpbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGUubW9kZSAtIFRoZSBtb2RlIG9mIGdvaW5nIGJhY2s6IERJUkVDVCBvciBUQUJCRUQuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrR29CYWNrKGU6IGFueSkge1xuICAgIHN3aXRjaCAoZS5tb2RlKSB7XG4gICAgICBjYXNlIEVGb3JtVmlld0dvQmFja01vZGUuRElSRUNUOlxuICAgICAgICBpZiAodGhpcy5hY3RpdmVGb3JtQ29uZmlnLnNlcXVlbmNlTm8gPT09IDEpIHtcbiAgICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZkZvcm1zU3RhdHVzQ29tcGxldGVkKFxuICAgICAgICAgICAgICB0aGlzLmZvcm1zTGlzdCxcbiAgICAgICAgICAgICAgdGhpcy5mb3Jtc0xpc3RDb21wbGV0ZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzRm9ybUNvbmZpZ0RpcmVjdCA9IHRoaXMuZm9ybXNMaXN0LmZpbmQoKGZvcm0pID0+IHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZvcm0uc2VxdWVuY2VObyA9PT0gdGhpcy5hY3RpdmVGb3JtQ29uZmlnLnNlcXVlbmNlTm8gLSAxICYmXG4gICAgICAgICAgICAgICAgZm9ybS5zdGF0dXMgIT09IEVGb3Jtc0xpc3RTdGF0dXMuTE9DS0VEXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHByZXZpb3VzRm9ybUNvbmZpZ0RpcmVjdCkge1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZU9uQ2xpY2tTZXRBY3RpdmVGb3JtKHByZXZpb3VzRm9ybUNvbmZpZ0RpcmVjdC5rZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRm9ybVZpZXdHb0JhY2tNb2RlLlRBQkJFRDpcbiAgICAgICAgY29uc3QgcHJldmlvdXNGb3JtQ29uZmlnID0gdGhpcy5mb3Jtc0xpc3QuZmluZCgoZm9ybSkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZvcm0uc2VxdWVuY2VObyA8IHRoaXMuYWN0aXZlRm9ybUNvbmZpZy5zZXF1ZW5jZU5vICYmXG4gICAgICAgICAgICBmb3JtLnN0YXR1cyA9PT0gRUZvcm1zTGlzdFN0YXR1cy5FRElUQUJMRVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocHJldmlvdXNGb3JtQ29uZmlnKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVPbkNsaWNrU2V0QWN0aXZlRm9ybShwcmV2aW91c0Zvcm1Db25maWcua2V5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9ybUxpc3QgLSBMaXN0ZW5zIHRvIGV2ZW50IG9mIHN1Ym1pdHRpbmcgYWxsIHRoZSBmb3JtcyBhbmQgbW92aW5nIG91dCBvZiB0aGUgbGlicmFyeSBhbmQgYWxzbyBoYW5kbGVzIHRoZSB2YWxpZGF0aW9uIG9mIGFsbCB0aGUgZm9ybXMuXG4gICAqIEBwYXJhbSBlIGFueVxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrU3VibWl0Rm9ybXMoZTogYW55KSB7XG4gICAgY29uc3QgZm9ybXNMaXN0OiBhbnlbXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5mb3Jtc0xpc3QpKTtcblxuICAgIGZvciAobGV0IGZvcm0gb2YgZm9ybXNMaXN0KSB7XG4gICAgICBpZiAoXG4gICAgICAgICFmb3JtLmhpZGRlbiAmJlxuICAgICAgICBmb3JtLnR5cGUgIT09IEVGb3JtVHlwZS5IVE1MICYmXG4gICAgICAgIGZvcm0ucmVxdWlyZWQgJiZcbiAgICAgICAgZm9ybS5zdGF0dXMgIT09IEVGb3Jtc0xpc3RTdGF0dXMuQ09NUExFVEVEXG4gICAgICApIHtcbiAgICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbih0cnVlKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbihmYWxzZSk7XG4gICAgICAgIH0sIDMwMDApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vbkNsaWNrU3VibWl0LmVtaXQoZSk7XG4gIH1cblxuICAvKipcbiAgICogTWlzY2VsbGFuZW91cyBNZXRob2RzXG4gICAqL1xuICBoYW5kbGVSZXNpemUoZm9ybXNMaXN0OiBhbnlbXSkge1xuICAgIGlmICh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggPCA2MDApIHtcbiAgICAgIGNvbnN0IGlzU2luZ2xlRm9ybSA9IChmb3Jtc0xpc3Q6IGFueVtdKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHJldHVybiBmb3Jtc0xpc3QubGVuZ3RoID09PSAxO1xuICAgICAgfTtcbiAgICAgIGlmICghaXNTaW5nbGVGb3JtKGZvcm1zTGlzdCkpIHtcbiAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNNb2JpbGVWaWV3ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc01vYmlsZVZpZXcgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgbmdDbGFzcz1cImt3aWtpZC1yZW5kZXJlclwiPlxuICA8ZGl2XG4gICAgbmdDbGFzcz1cImt3aWtpZC1sYXlvdXQtY29udGFpbmVyXCJcbiAgICAqbmdJZj1cIiFsb2FkaW5nXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIG5nQ2xhc3M9XCJrd2lraWQtc2VjdGlvbnMtY29udGFpbmVyXCJcbiAgICAgICpuZ0lmPVwic2hvd0Zvcm1TZWN0aW9uc1wiXG4gICAgICBjbGFzcz1cImFjdGl2ZVwiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cInNob3dGb3JtU2VjdGlvbnNcIlxuICAgICAgW2NsYXNzLm1vYmlsZV09XCJpc01vYmlsZVZpZXdcIlxuICAgID5cbiAgICAgIDxrd2lraWQtZm9ybXMtbGlzdFxuICAgICAgICBbc2hvd0Zvcm1GaWVsZHNdPVwidGhpcy5zaG93Rm9ybUZpZWxkc1wiXG4gICAgICAgIFthY3RpdmVGb3JtQ29uZmlnXT1cInRoaXMuYWN0aXZlRm9ybUNvbmZpZ1wiXG4gICAgICAgIFt1c2VyQ29uZmlnXT1cInRoaXMudXNlckNvbmZpZ1wiXG4gICAgICAgIFtmb3Jtc0xpc3RdPVwidGhpcy5mb3Jtc0xpc3RcIlxuICAgICAgICBbc3RlcENvbmZpZ109XCJ0aGlzLnN0ZXBDb25maWdcIlxuICAgICAgICBbaXNVbnNhdmVkRGF0YV09XCJ0aGlzLmlzVW5zYXZlZERhdGFcIlxuICAgICAgICBbZm9ybXNMaXN0Q29tcGxldGVkXT1cInRoaXMuZm9ybXNMaXN0Q29tcGxldGVkXCJcbiAgICAgICAgW2lzTW9iaWxlVmlld109XCJ0aGlzLmlzTW9iaWxlVmlld1wiXG4gICAgICAgIChvbkNsaWNrU2V0QWN0aXZlRm9ybSk9XCJ0aGlzLmhhbmRsZU9uQ2xpY2tTZXRBY3RpdmVGb3JtKCRldmVudClcIlxuICAgICAgICAob25DbGlja1N1Ym1pdEZvcm1zKT1cInRoaXMuaGFuZGxlT25DbGlja1N1Ym1pdEZvcm1zKCRldmVudClcIlxuICAgICAgPjwva3dpa2lkLWZvcm1zLWxpc3Q+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgbmdDbGFzcz1cImt3aWtpZC1mb3Jtcy1jb250YWluZXJcIlxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgdGhpcy5zaG93Rm9ybSAmJlxuICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzICYmXG4gICAgICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZyAhPT0gdW5kZWZpbmVkXG4gICAgICBcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93Rm9ybUZpZWxkc1wiXG4gICAgICBbY2xhc3MubW9iaWxlXT1cImlzTW9iaWxlVmlld1wiXG4gICAgICBbQHBhbmVsSW5PdXRdXG4gICAgPlxuICAgICAgPGt3aWtpZC1mb3JtLXZpZXdcbiAgICAgICAgKm5nSWY9XCJ0aGlzLmFjdGl2ZUZvcm1Db25maWcudHlwZSA9PT0gJ0ZPUk0nXCJcbiAgICAgICAgW2Zvcm1Db25maWddPVwidGhpcy5hY3RpdmVGb3JtQ29uZmlnXCJcbiAgICAgICAgW2FsbEZvcm1zRGF0YV09XCJ0aGlzLmFsbEZvcm1zRGF0YVwiXG4gICAgICAgIFtpc01vYmlsZVZpZXddPVwidGhpcy5pc01vYmlsZVZpZXdcIlxuICAgICAgICBbdXNlckNvbmZpZ109XCJ0aGlzLnVzZXJDb25maWdcIlxuICAgICAgICBbcG9wdXBGb3JtQ2FsbGJhY2tdPVwidGhpcy5wb3B1cEZvcm1DYWxsYmFja1wiXG4gICAgICAgIFthcGlDYWxsUmVzcG9uc2VdPVwidGhpcy5hcGlDYWxsUmVzcG9uc2VcIlxuICAgICAgICAoZ2V0VW5zYXZlZERhdGFTdGF0ZSk9XCJoYW5kbGVHZXRVbnNhdmVkU3RhdGUoJGV2ZW50KVwiXG4gICAgICAgIChvbkNsaWNrQXBpQ2FsbCk9XCJoYW5kbGVPbkNsaWNrQXBpQ2FsbCgkZXZlbnQpXCJcbiAgICAgICAgKG9uQWN0aW9uU2hvd1BvcHVwRm9ybSk9XCJcbiAgICAgICAgICB0aGlzLmhhbmRsZU9uQWN0aW9uU2hvd1BvcHVwRm9ybSgkZXZlbnQsIGNvbnRlbnQpXG4gICAgICAgIFwiXG4gICAgICAgIChvbkNsaWNrR29CYWNrKT1cInRoaXMuaGFuZGxlT25DbGlja0dvQmFjaygkZXZlbnQpXCJcbiAgICAgICAgKG9uQ2xpY2tWaWV3Rm9ybXMpPVwidGhpcy5oYW5kbGVPbkNsaWNrVmlld0Zvcm1zKCRldmVudClcIlxuICAgICAgICAob25DbGlja1NhdmVGb3JtKT1cIlxuICAgICAgICAgIHRoaXMuaGFuZGxlT25DbGlja1NhdmVGb3JtKCRldmVudCwgJ0ZPUk0nLCB1bmRlZmluZWQpXG4gICAgICAgIFwiXG4gICAgICA+PC9rd2lraWQtZm9ybS12aWV3PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48a3dpa3VpLWxvYWRlclxuICBbbG9hZGVyVGV4dF09XCInUGxlYXNlIHdhaXQnXCJcbiAgW3Nob3dMb2FkZXJdPVwibG9hZGVyXCJcbiAgW2Z1bGxzY3JlZW5dPVwidHJ1ZVwiXG4+PC9rd2lrdWktbG9hZGVyPlxuXG48dHVpLXB1c2hcbiAgaWQ9XCJlcnJvci1ub3RpZmljYXRpb25cIlxuICAqdHVpUHVzaD1cInNob3dFcnJvck5vdGlmaWNhdGlvblwiXG4gIGhlYWRpbmc9XCJQbGVhc2UgY29tcGxldGUgdGhlIHJlcXVpcmVkIEZvcm1zIVwiXG4gIHR5cGU9XCJFcnJvclwiXG4gIChjbG9zZSk9XCJ0b2dnbGVFcnJvck5vdGlmaWNhdGlvbihmYWxzZSlcIlxuPlxuICA8dHVpLXN2Z1xuICAgIHNyYz1cInR1aUljb25YQ2lyY2xlXCJcbiAgICBzdHlsZT1cImNvbG9yOiAjZmZmICFpbXBvcnRhbnRcIlxuICA+XG4gIDwvdHVpLXN2Zz5cbjwvdHVpLXB1c2g+XG48bmctdGVtcGxhdGVcbiAgI3ByZXZpZXdcbiAgbGV0LXByZXZpZXdcbj5cbiAgPHR1aS1wcmV2aWV3XG4gICAgW3JvdGF0YWJsZV09XCJmYWxzZVwiXG4gICAgW3pvb21hYmxlXT1cImZhbHNlXCJcbiAgICBjbGFzcz1cInByZXZpZXctY29udGFpbmVyXCJcbiAgICAqbmdJZj1cInBvcHVwRm9ybUNvbmZpZ1wiXG4gID5cbiAgICA8dHVpLXByZXZpZXctdGl0bGUgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcy50aXRsZSAhPT0gJydcIj57e1xuICAgICAgcHJldmlld1Byb3BlcnRpZXMudGl0bGVcbiAgICB9fTwvdHVpLXByZXZpZXctdGl0bGU+XG5cbiAgICA8ZGl2IGNsYXNzPVwia3dpa2lkLWZvcm0tdmlldy1wb3B1cC1jb250YWluZXJcIj5cbiAgICAgIDxrd2lraWQtZm9ybS12aWV3XG4gICAgICAgIFtmb3JtRGF0YV09XCJhY3RpdmVQb3B1cEZvcm1EYXRhXCJcbiAgICAgICAgW2Zvcm1Db25maWddPVwicG9wdXBGb3JtQ29uZmlnXCJcbiAgICAgICAgW2FsbEZvcm1zRGF0YV09XCJhbGxGb3Jtc0RhdGFcIlxuICAgICAgICBbdXNlckNvbmZpZ109XCJ0aGlzLnVzZXJDb25maWdcIlxuICAgICAgICBbaXNNb2JpbGVWaWV3XT1cInRoaXMuaXNNb2JpbGVWaWV3XCJcbiAgICAgICAgW2FwaUNhbGxSZXNwb25zZV09XCJ0aGlzLmFwaUNhbGxSZXNwb25zZVwiXG4gICAgICAgIChnZXRTYXZlZFN0YXRlKT1cImhhbmRsZUdldFVuc2F2ZWRTdGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgKG9uQ2xpY2tBcGlDYWxsKT1cImhhbmRsZU9uQ2xpY2tBcGlDYWxsKCRldmVudClcIlxuICAgICAgICAob25DbGlja1NhdmVGb3JtKT1cIlxuICAgICAgICAgIHRoaXMuaGFuZGxlT25DbGlja1NhdmVGb3JtKCRldmVudCwgJ1BPUFVQX0ZPUk0nLCB1bmRlZmluZWQpXG4gICAgICAgIFwiXG4gICAgICA+PC9rd2lraWQtZm9ybS12aWV3PlxuICAgIDwvZGl2PlxuXG4gICAgPGJ1dHRvblxuICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgdHVpUHJldmlld0FjdGlvblxuICAgICAgaWNvbj1cInR1aUljb25DbG9zZUxhcmdlXCJcbiAgICAgIHRpdGxlPVwiQ2xvc2VcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwicHJldmlldy5jb21wbGV0ZSgpXCJcbiAgICA+PC9idXR0b24+XG4gIDwvdHVpLXByZXZpZXc+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlXG4gICNjb250ZW50XG4gIGxldC1jb250ZXh0XG4+XG4gIDxkaXYgY2xhc3M9XCJrd2lraWQtZm9ybS12aWV3LXBvcHVwLWNvbnRhaW5lclwiPlxuICAgIDxrd2lraWQtZm9ybS12aWV3XG4gICAgICBbZm9ybURhdGFdPVwiYWN0aXZlUG9wdXBGb3JtRGF0YVwiXG4gICAgICBbZm9ybUNvbmZpZ109XCJwb3B1cEZvcm1Db25maWdcIlxuICAgICAgW2FsbEZvcm1zRGF0YV09XCJhbGxGb3Jtc0RhdGFcIlxuICAgICAgW3VzZXJDb25maWddPVwidGhpcy51c2VyQ29uZmlnXCJcbiAgICAgIFtpc01vYmlsZVZpZXddPVwidGhpcy5pc01vYmlsZVZpZXdcIlxuICAgICAgW2FwaUNhbGxSZXNwb25zZV09XCJ0aGlzLmFwaUNhbGxSZXNwb25zZVwiXG4gICAgICAoZ2V0U2F2ZWRTdGF0ZSk9XCJoYW5kbGVHZXRVbnNhdmVkU3RhdGUoJGV2ZW50KVwiXG4gICAgICAob25DbGlja0FwaUNhbGwpPVwiaGFuZGxlT25DbGlja0FwaUNhbGwoJGV2ZW50KVwiXG4gICAgICAob25DbGlja1NhdmVGb3JtKT1cIlxuICAgICAgICB0aGlzLmhhbmRsZU9uQ2xpY2tTYXZlRm9ybSgkZXZlbnQsICdQT1BVUF9GT1JNJywgY29udGV4dClcbiAgICAgIFwiXG4gICAgPjwva3dpa2lkLWZvcm0tdmlldz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
925
|
+
}], toggleLoader: [], fetchFormConfig: [], convertFormListConfig: [], assignSequenceNoToForm: [], findCompletedFormsList: [], markFormInFormsListAsCompleted: [], markFormInFormsListAsDisabled: [], filterAllFormsData: [], checkIfFormsStatusCompleted: [], findActiveFormConfig: [], updateFormsList: [], showPreview: [], formHide: [], formShow: [], findFormsListLength: [], handleOnClickSetActiveForm: [], handleGetUnsavedState: [], handleOnActionShowPopupForm: [], handleOnClickSaveForm: [], handleOnClickGoBack: [], handleOnClickSubmitForms: [] } });
|
|
926
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvcmVuZGVyZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xFLE9BQU8sRUFBb0IsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxJQUFJLEVBQ0osTUFBTSxFQUdOLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGVBQWUsRUFDZixTQUFTLEVBQ1QsWUFBWSxFQUNaLG9CQUFvQixFQUNyQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDbEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFFM0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FB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O2dDQUNuQixPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7NkJBQ3ZELENBQUM7eUJBQ0gsQ0FBQztxQkFDSDtpQkFDRjs7MEJBOEZJLE1BQU07MkJBQUMsdUJBQXVCOzswQkFHOUIsTUFBTTsyQkFBQyxnQkFBZ0I7NENBN0YxQixtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXdCaEMsT0FBTztzQkFEZixTQUFTO3VCQUFDLFNBQVM7Z0JBS3BCLFVBQVU7c0JBRFQsS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFJTixlQUFlO3NCQURkLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixNQUFNO2dCQUlQLFdBQVc7c0JBRFYsTUFBTTtnQkFJUCxjQUFjO3NCQURiLE1BQU07Z0JBNEZQLFlBQVksTUFZTixlQUFlLE1Bd0NyQixxQkFBcUIsTUE4RnJCLHNCQUFzQixNQWdCdEIsc0JBQXNCLE1BaUJ0Qiw4QkFBOEIsTUF5QjlCLDZCQUE2QixNQWlDN0Isa0JBQWtCLE1Bc0JsQiwyQkFBMkIsTUFxQjNCLG9CQUFvQixNQVlkLGVBQWUsTUE4RXJCLFdBQVcsTUFnQ1gsUUFBUSxNQU9SLFFBQVEsTUFrQ1IsbUJBQW1CLE1BNkJiLDBCQUEwQixNQWtIaEMscUJBQXFCLE1BU3JCLDJCQUEyQixNQTBGM0IscUJBQXFCLE1Bb0RyQixtQkFBbUIsTUFnRWIsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIkB0YWlnYS11aS9hZGRvbi1wcmV2aWV3XCI7XG5pbXBvcnQgeyBUdWlEaWFsb2dDb250ZXh0LCBUdWlEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIkB0YWlnYS11aS9jb3JlXCI7XG5pbXBvcnQge1xuICBBY3Rpb24sXG4gIENvbmRpdGlvbixcbiAgUnVsZSxcbiAgU291cmNlLFxuICBUQWN0aW9uLFxuICBUUnVsZSxcbiAgY2hlY2tPYmplY3RLZXlFeGlzdHMsXG4gIGdldE9iamVjdERlZXBDb3B5LFxuICBpc0VtcHR5VmFsdWUsXG4gIGlzTm90RW1wdHlWYWx1ZSxcbiAgbG9nTWV0aG9kLFxuICBtZXJnZU9iamVjdHMsXG4gIHNldFZhbHVlVG9PYmplY3RQYXRoXG59IGZyb20gXCJrd2lraWQtdG9vbGtpdFwiO1xuaW1wb3J0IHsgQ29udmVydGVyIH0gZnJvbSBcIi4vY29uZmlnLWNvbnZlcnRlci9jb25maWctY29udmVydGVyXCI7XG5pbXBvcnQgeyBFQWN0aW9uS2V5IH0gZnJvbSBcIi4vZm9ybS12aWV3L2RlZmluaXRpb25zL2Zvcm0tdmlldy5hY3Rpb25zLmRlZmluaXRpb25cIjtcbmltcG9ydCB7IEVGb3JtVmlld0dvQmFja01vZGUgfSBmcm9tIFwiLi9mb3JtLXZpZXcvZGVmaW5pdGlvbnMvZm9ybS12aWV3LmNvbW1vbnMuZGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgVFRyaWdnZXIgfSBmcm9tIFwiLi9mb3JtLXZpZXcvZGVmaW5pdGlvbnMvZm9ybS12aWV3LnRyaWdnZXJzLmRlZmluaXRpb25cIjtcbmltcG9ydCB7IEVGb3Jtc0xpc3RTdGF0dXMgfSBmcm9tIFwiLi9mb3Jtcy1saXN0L2Zvcm1zLWxpc3QuZGVmaW5pdGlvbnNcIjtcbmltcG9ydCB7IEVSZW5kZXJlckFjdGlvbktleSB9IGZyb20gXCIuL3JlbmRlcmVyLmFjdGlvbnMuZGVmaW5pdGlvbnNcIjtcbmltcG9ydCB7IEVGb3JtVHlwZSB9IGZyb20gXCIuL3JlbmRlcmVyLmRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyBnZXRGb3JtQ29uZmlnQnlLZXkgfSBmcm9tIFwiLi9yZW5kZXJlci5oZWxwZXJcIjtcbmltcG9ydCB7IEt3aWtVSUxvYWRlclNlcnZpY2UgfSBmcm9tIFwia3dpa3VpXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJrd2lraWQtZm9ybXMtcmVuZGVyZXJcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9yZW5kZXJlci5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vcmVuZGVyZXIuY29tcG9uZW50LnNjc3NcIiwgXCIuL3NoYXJlZC5zY3NzXCJdLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcihcInBhbmVsSW5PdXRcIiwgW1xuICAgICAgdHJhbnNpdGlvbihcIjplbnRlclwiLCBbXG4gICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZVkoMTAwJSlcIiB9KSxcbiAgICAgICAgYW5pbWF0ZSgxNTApXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oXCI6bGVhdmVcIiwgW1xuICAgICAgICBhbmltYXRlKDEwMCwgc3R5bGUoeyB0cmFuc2Zvcm06IFwidHJhbnNsYXRlWSgxMDAlKVwiIH0pKVxuICAgICAgXSlcbiAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEt3aWtJREZvcm1zUmVuZGVyZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8vIFRoZSBmaW5hbCB2YWx1ZSBzaG91bGQgYmUgcHJvdmlkZWQgdG8gc2VydmljZSwgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBpbiBhbGwgY29tcG9uZW50c1xuICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiLCBbXCIkZXZlbnRcIl0pXG4gIHdpbmRvd1Jlc2l6ZVdhdGNoZXIoKSB7XG4gICAgaWYgKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCA8IDYwMCkge1xuICAgICAgaWYgKHRoaXMuc2hvd0Zvcm0pIHtcbiAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5pc01vYmlsZVZpZXcgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zaG93Rm9ybSkge1xuICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNNb2JpbGVWaWV3ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgQFZpZXdDaGlsZChcInByZXZpZXdcIilcbiAgcmVhZG9ubHkgcHJldmlldzogVGVtcGxhdGVSZWY8VHVpRGlhbG9nQ29udGV4dDx2b2lkPj47XG4gIHByaXZhdGUgcHJldmlld0RpYWxvZ1JlZjogYW55O1xuXG4gIEBJbnB1dCgpXG4gIHN0ZXBDb25maWc6IGFueTtcblxuICBASW5wdXQoKVxuICB1c2VyQ29uZmlnOiBhbnk7XG5cbiAgQElucHV0KClcbiAgZm9ybXNEYXRhOiBhbnkgPSB7fTtcblxuICBASW5wdXQoKVxuICBhY3RpdmVGb3JtRGF0YTogYW55ID0ge307XG5cbiAgQElucHV0KClcbiAgYXBpQ2FsbFJlc3BvbnNlOiBhbnkgPSB7fTtcblxuICBAT3V0cHV0KClcbiAgb25DbGlja1N1Ym1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KClcbiAgZ2V0Rm9ybURhdGE6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2xpY2tBcGlDYWxsOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBzaG93RXJyb3JOb3RpZmljYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgdG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oc2hvdykge1xuICAgIHRoaXMuc2hvd0Vycm9yTm90aWZpY2F0aW9uID0gc2hvdztcbiAgfVxuXG4gIGFjdGl2ZVBvcHVwRm9ybURhdGE6IGFueSA9IHt9O1xuICBwb3B1cEZvcm1DYWxsYmFjazogYW55ID0ge307XG4gIGFjdGl2ZUZvcm1Db25maWc6IGFueTtcbiAgYWN0aXZlRm9ybUZpZWxkczogYW55W107XG4gIGFsbEZvcm1zRGF0YTogYW55ID0ge307XG4gIGFsbEZvcm1zU3VibWl0dGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGZvcm1zTGlzdDogYW55W10gPSBbXTtcbiAgZm9ybXNMaXN0Q29tcGxldGVkOiBzdHJpbmdbXTtcbiAgaXNNb2JpbGVWaWV3OiBib29sZWFuID0gZmFsc2U7XG4gIHByZXZpZXdQcm9wZXJ0aWVzOiBhbnkgPSB7XG4gICAgaHRtbDoge1xuICAgICAgYmVmb3JlOiBcIlwiLFxuICAgICAgYWZ0ZXI6IFwiXCJcbiAgICB9LFxuICAgIGlmcmFtZToge1xuICAgICAgc3JjOiBcIlwiLFxuICAgICAgdGl0bGU6IFwiXCJcbiAgICB9LFxuICAgIHBvcHVwRm9ybUtleTogXCJcIixcbiAgICB0aXRsZTogXCJcIixcbiAgICB1bmF2YWlsYWJsZTogZmFsc2VcbiAgfTtcbiAgcG9wdXBGb3JtQ29uZmlnOiBhbnkgPSB7fTtcblxuICAvLyBkaXNwbGF5IGZvcm1zIGFuZCBsaXN0IGNvbmRpdGlvbmFsbHlcbiAgc2hvd0Zvcm06IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0Zvcm1GaWVsZHM6IGJvb2xlYW4gPSB0cnVlO1xuICBzaG93Rm9ybVNlY3Rpb25zOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNVbnNhdmVkRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaG9zdEVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UpXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcmV2aWV3RGlhbG9nU2VydmljZTogVHVpUHJldmlld0RpYWxvZ1NlcnZpY2UsXG4gICAgcHVibGljIGxvYWRlclNlcnZpY2U6IEt3aWtVSUxvYWRlclNlcnZpY2UsXG4gICAgQEluamVjdChUdWlEaWFsb2dTZXJ2aWNlKSBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ3M6IFR1aURpYWxvZ1NlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudG9nZ2xlTG9hZGVyKHRydWUpXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGZvcm1TdGVwS2V5ID0gdGhpcy5zdGVwQ29uZmlnPy5mb3JtPy5rZXkgPz8gdW5kZWZpbmVkO1xuXG4gICAgaWYgKFxuICAgICAgZm9ybVN0ZXBLZXkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy51c2VyQ29uZmlnLnVzZXJGb3JtRmllbGRzLCBmb3JtU3RlcEtleSlcbiAgICApIHtcbiAgICAgIHRoaXMuZm9ybXNMaXN0ID0gdGhpcy51c2VyQ29uZmlnLnVzZXJGb3JtRmllbGRzW2Zvcm1TdGVwS2V5XTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51c2VyQ29uZmlnLnVzZXJGb3JtRmllbGRzKSkge1xuICAgICAgdGhpcy5mb3Jtc0xpc3QgPSB0aGlzLnVzZXJDb25maWcudXNlckZvcm1GaWVsZHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHVzZXJGb3JtRmllbGRzIGRvZXNuJ3QgaGF2ZSBhIGZvcm0gZGVmaW5lZCB3aXRoIGtleTogJHtmb3JtU3RlcEtleX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm1zKFwiT05fSU5JVFwiKTtcbiAgICB0aGlzLnRvZ2dsZUxvYWRlcihmYWxzZSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgdmVyaWZ5Q2hhbmdlID0gKHByb3A6IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuIGNoYW5nZXMuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgIWNoYW5nZXNbcHJvcF0uZmlyc3RDaGFuZ2U7XG4gICAgfTtcbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwidXNlckNvbmZpZ1wiKSkge1xuICAgICAgdGhpcy51c2VyQ29uZmlnID0gY2hhbmdlcy51c2VyQ29uZmlnLmN1cnJlbnRWYWx1ZTtcbiAgICAgIHRoaXMudG9nZ2xlTG9hZGVyKGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImZvcm1zRGF0YVwiKSkge1xuICAgICAgdGhpcy5mb3Jtc0RhdGEgPSBjaGFuZ2VzLmZvcm1zRGF0YS5jdXJyZW50VmFsdWU7XG5cbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm1zKFwiT05fQ0hBTkdFXCIpO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiYXBpQ2FsbFJlc3BvbnNlXCIpKSB7XG4gICAgICB0aGlzLmFwaUNhbGxSZXNwb25zZSA9IGNoYW5nZXMuYXBpQ2FsbFJlc3BvbnNlLmN1cnJlbnRWYWx1ZTtcbiAgICAgIHRoaXMudG9nZ2xlTG9hZGVyKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHRvZ2dsZUxvYWRlcihsb2FkZXIpIHtcbiAgICBpZiAobG9hZGVyKSB7XG4gICAgICB0aGlzLmxvYWRlclNlcnZpY2Uuc2hvdyh7XG4gICAgICAgIGZ1bGxzY3JlZW46IHRydWUsXG4gICAgICAgIGxvYWRlclRleHQ6IFwiUGxlYXNlIHdhaXRcIlxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9hZGVyU2VydmljZS5oaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBmZXRjaEZvcm1Db25maWcodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgeyBtZXRob2Q6IFwiR0VUXCIgfSk7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGluaXRpYWxpemVGb3JtcyhldmVudFR5cGU6IHN0cmluZykge1xuICAgIHRoaXMudG9nZ2xlTG9hZGVyKHRydWUpO1xuXG4gICAgdGhpcy5hbGxGb3Jtc0RhdGEgPSB0aGlzLmZvcm1zRGF0YTtcblxuICAgIGF3YWl0IHRoaXMudXBkYXRlRm9ybXNMaXN0KCk7XG5cbiAgICBpZiAoXG4gICAgICBldmVudFR5cGUgPT09IFwiT05fQ0hBTkdFXCIgJiZcbiAgICAgIHRoaXMuZmluZEZvcm1zTGlzdExlbmd0aCh0aGlzLmZvcm1zTGlzdCkgPT09IDFcbiAgICApIHtcbiAgICAgIHRoaXMuaGFuZGxlT25DbGlja1N1Ym1pdEZvcm1zKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZVJlc2l6ZSh0aGlzLmZvcm1zTGlzdCk7XG5cbiAgICAgIGlmIChpc05vdEVtcHR5VmFsdWUodGhpcy5hY3RpdmVGb3JtQ29uZmlnKSkge1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5hY3RpdmVGb3JtQ29uZmlnLCBcInR5cGVcIikpIHtcbiAgICAgICAgICBpZiAodGhpcy5hY3RpdmVGb3JtQ29uZmlnLnR5cGUgIT09IEVGb3JtVHlwZS5IVE1MKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZU9uQ2xpY2tTZXRBY3RpdmVGb3JtKHRoaXMuYWN0aXZlRm9ybUNvbmZpZy5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZU9uQ2xpY2tTZXRBY3RpdmVGb3JtKHRoaXMuYWN0aXZlRm9ybUNvbmZpZy5rZXkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnRvZ2dsZUxvYWRlcihmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBjb252ZXJ0Rm9ybUxpc3RDb25maWcoZm9ybXNMaXN0OiBhbnlbXSk6IGFueVtdIHtcbiAgICBjb25zdCBjb252ZXJ0Rm9ybUxpc3RDb25maWdUeXBlRm9ybSA9IChmb3JtOiBhbnkpID0+IHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImZvcm1Db250ZW50XCIpKSB7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLmZvcm1Db250ZW50LCBcInVybFwiKSkge1xuICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcInByb3BzLnVybFwiLCBmb3JtLmZvcm1Db250ZW50LnVybCk7XG4gICAgICAgICAgZGVsZXRlIGZvcm1bXCJmb3JtQ29udGVudFwiXVtcInVybFwiXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybS5mb3JtQ29udGVudCwgXCJwYXRoXCIpKSB7XG4gICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgIFwicHJvcHMucGF0aFwiLFxuICAgICAgICAgICAgZm9ybS5mb3JtQ29udGVudC5wYXRoXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkZWxldGUgZm9ybVtcImZvcm1Db250ZW50XCJdW1wicGF0aFwiXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzRW1wdHlWYWx1ZShmb3JtLmZvcm1Db250ZW50KSkge1xuICAgICAgICBkZWxldGUgZm9ybVtcImZvcm1Db250ZW50XCJdO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwidGl0bGVcIikpIHtcbiAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwicHJvcHMudGl0bGVcIiwgZm9ybS50aXRsZSk7XG4gICAgICAgIGRlbGV0ZSBmb3JtW1widGl0bGVcIl07XG4gICAgICB9XG4gICAgICBpZiAoIWNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGZvcm0uaGlkZGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIWNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiZGlzYWJsZWRcIikpIHtcbiAgICAgICAgZm9ybS5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcInJlcXVpcmVkXCIpKSB7XG4gICAgICAgIGZvcm0ucmVxdWlyZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImRlcGVuZGVudE9uXCIpKSB7XG4gICAgICAgIGZvcm0uZGVwZW5kZW50T24gPSBbXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZvcm07XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnZlcnRGb3JtTGlzdENvbmZpZ1R5cGVIdG1sID0gKGZvcm06IGFueSkgPT4ge1xuICAgICAgaWYgKGZvcm0udHlwZSA9PT0gXCJodG1sXCIpIHtcbiAgICAgICAgZm9ybS50eXBlID0gRUZvcm1UeXBlLkhUTUw7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImh0bWxDb250ZW50XCIpKSB7XG4gICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJwcm9wc1wiKSkge1xuICAgICAgICAgIGZvcm0ucHJvcHMgPSB7XG4gICAgICAgICAgICBodG1sQ29udGVudDogZm9ybS5odG1sQ29udGVudFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIGZvcm1bXCJodG1sQ29udGVudFwiXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJwcm9wc1wiKSkge1xuICAgICAgICAgIGZvcm0ucHJvcHMgPSB7XG4gICAgICAgICAgICBodG1sQ29udGVudDogXCJcIlxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcInRpdGxlXCIpKSB7XG4gICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcInByb3BzLnRpdGxlXCIsIGZvcm0udGl0bGUpO1xuICAgICAgICBkZWxldGUgZm9ybVtcInRpdGxlXCJdO1xuICAgICAgfVxuICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICBmb3JtLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm07XG4gICAgfTtcblxuICAgIHJldHVybiBmb3Jtc0xpc3QubWFwKChmb3JtKSA9PiB7XG4gICAgICBpZiAoIWNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwidHlwZVwiKSkge1xuICAgICAgICBmb3JtLnR5cGUgPSBcIkZPUk1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcInR5cGVcIikpIHtcbiAgICAgICAgaWYgKGZvcm0udHlwZSA9PT0gRUZvcm1UeXBlLkZPUk0pIHtcbiAgICAgICAgICBmb3JtID0gY29udmVydEZvcm1MaXN0Q29uZmlnVHlwZUZvcm0oZm9ybSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybS50eXBlID09PSBFRm9ybVR5cGUuSFRNTCB8fCBmb3JtLnR5cGUgPT09IFwiaHRtbFwiKSB7XG4gICAgICAgICAgZm9ybSA9IGNvbnZlcnRGb3JtTGlzdENvbmZpZ1R5cGVIdG1sKGZvcm0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3JtO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE5PVEU6IFRvIGJlIGRlcHJlY2F0ZWQuXG4gICAqIFdoeSA/IFdpbGwgYmUgZGlyZWN0bHkgYXNzaWduZWQgd2hpbGUgZXhlY3V0aW5nICdjaGFrcmEnIGZvciBkZWZhdWx0IGZvcm0gY29uZmlnLlxuICAgKiBAcGFyYW0gZm9ybXNMaXN0IGFueVtdXG4gICAqIEBwYXJhbSBmb3Jtc0xpc3RDb21wbGV0ZWQgc3RyaW5nW11cbiAgICogQHJldHVybnMgYW55W11cbiAgICovXG4gIEBsb2dNZXRob2RcbiAgYXNzaWduU2VxdWVuY2VOb1RvRm9ybShmb3Jtc0xpc3Q6IGFueVtdKTogYW55W10ge1xuICAgIGxldCBzZXF1ZW5jZU5vID0gMTtcbiAgICBmb3IgKGxldCBmb3JtIG9mIGZvcm1zTGlzdCkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4gJiYgZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCkge1xuICAgICAgICAgIGZvcm0uc2VxdWVuY2VObyA9IHNlcXVlbmNlTm8rKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZm9ybVtcInNlcXVlbmNlTm9cIl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybXNMaXN0O1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaW5kQ29tcGxldGVkRm9ybXNMaXN0KGFsbEZvcm1zRGF0YTogYW55KTogc3RyaW5nW10ge1xuICAgIGxldCBmb3Jtc0xpc3RDb21wbGV0ZWQ6IHN0cmluZ1tdID0gW107XG5cbiAgICBPYmplY3Qua2V5cyhhbGxGb3Jtc0RhdGEpLm1hcCgoZm9ybUtleSkgPT4ge1xuICAgICAgZm9ybXNMaXN0Q29tcGxldGVkLnB1c2goZm9ybUtleSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZm9ybXNMaXN0Q29tcGxldGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIE5PVEU6IFRvIGJlIGRlcHJlY2F0ZWQuIFdoeSA/IFdpbGwgYmUgcmVwbGFjZWQgYnkgJ2NoYWtyYScuXG4gICAqIEBwYXJhbSBmb3Jtc0xpc3QgYW55W11cbiAgICogQHBhcmFtIGZvcm1zTGlzdENvbXBsZXRlZCBzdHJpbmdbXVxuICAgKiBAcmV0dXJucyBhbnlbXVxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBtYXJrRm9ybUluRm9ybXNMaXN0QXNDb21wbGV0ZWQoXG4gICAgZm9ybXNMaXN0OiBhbnlbXSxcbiAgICBmb3Jtc0xpc3RDb21wbGV0ZWQ6IHN0cmluZ1tdXG4gICk6IGFueVtdIHtcbiAgICBmb3IgKGxldCBmb3JtIG9mIGZvcm1zTGlzdCkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4gJiYgZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCkge1xuICAgICAgICAgIGlmIChmb3Jtc0xpc3RDb21wbGV0ZWQuaW5jbHVkZXMoZm9ybS5rZXkpKSB7XG4gICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJzdGF0dXNcIiwgXCJjb21wbGV0ZWRcIik7XG4gICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJkaXNhYmxlZFwiLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1zTGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBOT1RFOiBUbyBiZSBkZXByZWNhdGVkLiBXaHkgPyBXaWxsIGJlIHJlcGxhY2VkIGJ5ICdjaGFrcmEnLlxuICAgKiBAcGFyYW0gZm9ybXNMaXN0IGFueVtdXG4gICAqIEBwYXJhbSBmb3Jtc0xpc3RDb21wbGV0ZWQgc3RyaW5nW11cbiAgICogQHJldHVybnMgYW55W11cbiAgICovXG4gIEBsb2dNZXRob2RcbiAgbWFya0Zvcm1JbkZvcm1zTGlzdEFzRGlzYWJsZWQoXG4gICAgZm9ybXNMaXN0OiBhbnlbXSxcbiAgICBmb3Jtc0xpc3RDb21wbGV0ZWQ6IHN0cmluZ1tdXG4gICk6IGFueVtdIHtcbiAgICBmb3IgKGxldCBmb3JtIG9mIGZvcm1zTGlzdCkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4gJiYgZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCkge1xuICAgICAgICAgIGlmIChmb3JtLnN0YXR1cyAhPT0gXCJjb21wbGV0ZWRcIikge1xuICAgICAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiZGVwZW5kZW50T25cIikpIHtcbiAgICAgICAgICAgICAgY29uc3QgaXNEZXBlbmRlbnQgPSBmb3JtLmRlcGVuZGVudE9uLmV2ZXJ5KChyOiBzdHJpbmcpID0+XG4gICAgICAgICAgICAgICAgZm9ybXNMaXN0Q29tcGxldGVkLmluY2x1ZGVzKHIpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChpc0RlcGVuZGVudCkge1xuICAgICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcInN0YXR1c1wiLCBcImVkaXRhYmxlXCIpO1xuICAgICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImRpc2FibGVkXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJzdGF0dXNcIiwgXCJsb2NrZWRcIik7XG4gICAgICAgICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwiZGlzYWJsZWRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImRlcGVuZGVudE9uXCIsIFtdKTtcbiAgICAgICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwic3RhdHVzXCIsIFwiZWRpdGFibGVcIik7XG4gICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImRpc2FibGVkXCIsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybXNMaXN0O1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWx0ZXJBbGxGb3Jtc0RhdGEoYWxsRm9ybXNEYXRhOiBhbnksIGZvcm1zTGlzdDogYW55W10pOiBhbnkge1xuICAgIGxldCBjdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGE6IGFueSA9IHt9O1xuXG4gICAgZm9yIChsZXQgZm9ybSBvZiBmb3Jtc0xpc3QpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJoaWRkZW5cIikgJiZcbiAgICAgICAgIWZvcm0uaGlkZGVuICYmXG4gICAgICAgIGZvcm0udHlwZSAhPT0gRUZvcm1UeXBlLkhUTUxcbiAgICAgICkge1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWxsRm9ybXNEYXRhLCBmb3JtLmtleSkpIHtcbiAgICAgICAgICBjdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGEgPSB7XG4gICAgICAgICAgICAuLi5jdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICBbZm9ybS5rZXldOiBhbGxGb3Jtc0RhdGFbZm9ybS5rZXldXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGE7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGNoZWNrSWZGb3Jtc1N0YXR1c0NvbXBsZXRlZChcbiAgICBmb3Jtc0xpc3Q6IGFueSxcbiAgICBmb3Jtc0xpc3RDb21wbGV0ZWQ6IHN0cmluZ1tdXG4gICk6IGFueSB7XG4gICAgbGV0IGFsbEZvcm1zQ29tcGxldGVkOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIGZvciAoY29uc3QgZm9ybSBvZiBmb3Jtc0xpc3QpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICBpZiAoIWZvcm0uaGlkZGVuICYmIGZvcm0udHlwZSAhPT0gRUZvcm1UeXBlLkhUTUwpIHtcbiAgICAgICAgICBpZiAoZm9ybS5zdGF0dXMgIT09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgICAgICAgIGFsbEZvcm1zQ29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWxsRm9ybXNDb21wbGV0ZWQ7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpbmRBY3RpdmVGb3JtQ29uZmlnKGZvcm1zTGlzdDogYW55W10pOiBhbnkge1xuICAgIGNvbnN0IGFjdGl2ZUZvcm1Db25maWcgPSBmb3Jtc0xpc3QuZmluZCgoZm9ybSkgPT4ge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4gJiYgZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCkge1xuICAgICAgICAgIHJldHVybiBmb3JtLnN0YXR1cyA9PT0gXCJlZGl0YWJsZVwiICYmICFmb3JtLmRpc2FibGVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjdGl2ZUZvcm1Db25maWc7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHVwZGF0ZUZvcm1zTGlzdCgpIHtcbiAgICB0aGlzLmZvcm1zTGlzdCA9IHRoaXMuY29udmVydEZvcm1MaXN0Q29uZmlnKHRoaXMuZm9ybXNMaXN0KTtcblxuICAgIGZvciAobGV0IGZvcm0gb2YgdGhpcy5mb3Jtc0xpc3QpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJkZWZhdWx0XCIpICYmXG4gICAgICAgIGlzTm90RW1wdHlWYWx1ZShmb3JtLmRlZmF1bHQpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlcnM6IEFycmF5PFRUcmlnZ2VyPiA9IGZvcm0uZGVmYXVsdC50cmlnZ2VycztcbiAgICAgICAgY29uc3QgcnVsZXM6IEFycmF5PFRSdWxlPiA9IGZvcm0uZGVmYXVsdC5ydWxlcztcbiAgICAgICAgY29uc3QgYWN0aW9uczogQXJyYXk8VEFjdGlvbj4gPSBmb3JtLmRlZmF1bHQuYWN0aW9ucztcblxuICAgICAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShydWxlcywge1xuICAgICAgICAgIFVTRVJfQ09ORklHOiB0aGlzLnVzZXJDb25maWcsXG4gICAgICAgICAgRk9STVNfTElTVDogdGhpcy5mb3Jtc0xpc3QsXG4gICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICAgIH0pLm1hcHBpbmcoKTtcblxuICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgYWN0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbkV2YWx1YXRpb24gPSBuZXcgQ29uZGl0aW9uKFxuICAgICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgICAgIHJ1bGVzTWFwcGluZ1xuICAgICAgICAgICkuZXZhbHVhdGUoKTtcblxuICAgICAgICAgIGlmIChjb25kaXRpb25FdmFsdWF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBGT1JNU19MSVNUOiB0aGlzLmZvcm1zTGlzdCxcbiAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICAgIGZvcm0uaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZvcm1zTGlzdCA9IHRoaXMuYXNzaWduU2VxdWVuY2VOb1RvRm9ybSh0aGlzLmZvcm1zTGlzdCk7XG5cbiAgICAvKipcbiAgICAgKiBCZWxvdyBjb2RlIGlkZW50aWZpZXMgdGhlIGFsbEZvcm1zRGF0YSByZXF1aXJlZCBmb3IgdGhlIGN1cnJlbnQgVXNlciBGb3JtLlxuICAgICAqIFdoeT8gQmVjYXVzZSBhbGxGb3Jtc0RhdGEgd2lsbCBhY3R1YWxseSBjb250YWluIHRoZSB3aG9sZSBqb3VybmV5J3MgYWxsXG4gICAgICogcG9zc2libGUgVXNlciBGb3JtIHN0ZXBzLiBTbywgaXQgaXMgaW1wb3J0YW50IHRvIHNldCB0aGUgZm9ybSBkYXRhIHdoaWNoXG4gICAgICogdGhpcyBwYXJ0aWN1bGFyIFVzZXIgRm9ybSBvbmx5IGhhcyB0byBMT0NBTCBNRVRIT0QgVmFyaWFibGUuXG4gICAgICovXG4gICAgY29uc3QgY3VycmVudFVzZXJGb3JtQWxsRm9ybXNEYXRhID0gdGhpcy5maWx0ZXJBbGxGb3Jtc0RhdGEoXG4gICAgICB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgIHRoaXMuZm9ybXNMaXN0XG4gICAgKTtcblxuICAgIHRoaXMuZm9ybXNMaXN0Q29tcGxldGVkID0gdGhpcy5maW5kQ29tcGxldGVkRm9ybXNMaXN0KFxuICAgICAgY3VycmVudFVzZXJGb3JtQWxsRm9ybXNEYXRhXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybXNMaXN0ID0gdGhpcy5tYXJrRm9ybUluRm9ybXNMaXN0QXNDb21wbGV0ZWQoXG4gICAgICB0aGlzLmZvcm1zTGlzdCxcbiAgICAgIHRoaXMuZm9ybXNMaXN0Q29tcGxldGVkXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybXNMaXN0ID0gdGhpcy5tYXJrRm9ybUluRm9ybXNMaXN0QXNEaXNhYmxlZChcbiAgICAgIHRoaXMuZm9ybXNMaXN0LFxuICAgICAgdGhpcy5mb3Jtc0xpc3RDb21wbGV0ZWRcbiAgICApO1xuXG4gICAgdGhpcy5mb3Jtc0xpc3QgPSBnZXRPYmplY3REZWVwQ29weSh0aGlzLmZvcm1zTGlzdCk7XG5cbiAgICB0aGlzLmFjdGl2ZUZvcm1Db25maWcgPSB0aGlzLmZpbmRBY3RpdmVGb3JtQ29uZmlnKHRoaXMuZm9ybXNMaXN0KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgc2hvd1ByZXZpZXcocHJldmlld1Byb3BlcnRpZXM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMgPSBtZXJnZU9iamVjdHMoXG4gICAgICB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLFxuICAgICAgcHJldmlld1Byb3BlcnRpZXNcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgaXNFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnNyYykgJiZcbiAgICAgIGlzRW1wdHlWYWx1ZSh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYmVmb3JlKSAmJlxuICAgICAgaXNFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMuaHRtbC5hZnRlcikgJiZcbiAgICAgIGlzRW1wdHlWYWx1ZSh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLnBvcHVwRm9ybUtleSlcbiAgICApIHtcbiAgICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMucG9wdXBGb3JtS2V5KSkge1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5hY3RpdmVGb3JtQ29uZmlnLCBcInBvcHVwRm9ybXNcIikpIHtcbiAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNvbmZpZyA9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUZvcm1Db25maWcucG9wdXBGb3Jtc1tcbiAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcy5wb3B1cEZvcm1LZXlcbiAgICAgICAgICAgIF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wb3B1cEZvcm1Db25maWcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMucHJldmlld0RpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLnByZXZpZXcgfHwgXCJcIikuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZvcm1IaWRlKGZvcm1LZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCBmb3JtID0gZ2V0Rm9ybUNvbmZpZ0J5S2V5KHRoaXMuZm9ybXNMaXN0LCBmb3JtS2V5KTtcblxuICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImhpZGRlblwiLCB0cnVlKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZm9ybVNob3coZm9ybUtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGZvcm0gPSBnZXRGb3JtQ29uZmlnQnlLZXkodGhpcy5mb3Jtc0xpc3QsIGZvcm1LZXkpO1xuXG4gICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwiaGlkZGVuXCIsIGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIHRha2VBY3Rpb24oYWN0aW9uOiBhbnksIG9iamVjdDogYW55KSB7XG4gICAgc3dpdGNoIChhY3Rpb24ua2V5KSB7XG4gICAgICBjYXNlIEVSZW5kZXJlckFjdGlvbktleS5GT1JNX0hJREU6XG4gICAgICAgIHRoaXMuZm9ybUhpZGUoYWN0aW9uLnByb3BzLmZvcm1LZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRVJlbmRlcmVyQWN0aW9uS2V5LkZPUk1fU0hPVzpcbiAgICAgICAgdGhpcy5mb3JtU2hvdyhhY3Rpb24ucHJvcHMuZm9ybUtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9WQUxVRTpcbiAgICAgICAgY29uc3Qgc291cmNlcyA9IG5ldyBTb3VyY2Uoe1xuICAgICAgICAgIFVTRVJfQ09ORklHOiB0aGlzLnVzZXJDb25maWcsXG4gICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuZm9ybXNEYXRhXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlcy5nZXRWYWx1ZUZyb21Tb3VyY2UoXG4gICAgICAgICAgYWN0aW9uLnByb3BzLnZhbHVlLnNvdXJjZVxuICAgICAgICApO1xuICAgICAgICBzb3VyY2VzLnNldFZhbHVlVG9Tb3VyY2UoYWN0aW9uLnByb3BzLnZhbHVlLmRlc3RpbmF0aW9uLCBzb3VyY2VWYWx1ZSk7XG5cbiAgICAgICAgdGhpcy51c2VyQ29uZmlnID0gc291cmNlcy5vYmplY3QuVVNFUl9DT05GSUc7XG4gICAgICAgIHRoaXMuZm9ybXNEYXRhID0gc291cmNlcy5vYmplY3QuQUxMX0ZPUk1TX0RBVEE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaW5kRm9ybXNMaXN0TGVuZ3RoKGZvcm1zTGlzdDogYW55W10pOiBudW1iZXIge1xuICAgIGNvbnN0IF9mb3Jtc0xpc3QgPSBmb3Jtc0xpc3QuZmlsdGVyKChmb3JtKSA9PiB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJ0eXBlXCIpKSB7XG4gICAgICAgIGlmIChmb3JtLnR5cGUgIT09IEVGb3JtVHlwZS5IVE1MKSB7XG4gICAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgICAgICBpZiAoIWZvcm0uaGlkZGVuKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICBpZiAoIWZvcm0uaGlkZGVuKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBfZm9ybXNMaXN0Lmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaWJyYXJ5IEV2ZW50IExpc3RlbmVyc1xuICAgKi9cblxuICAvKipcbiAgICogRm9ybUxpc3QgLSBMaXN0ZW5zIHRvIGV2ZW50IG9mIG9wZW5pbmcgdGhlIEZvcm1WaWV3IG9mIHdoZW4gYW55IGZvcm0gaXMgY2xpY2tlZCBpbiBGb3JtTGlzdFxuICAgKiBAcGFyYW0gc2VsZWN0ZWRGb3JtIHN0cmluZ1xuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrU2V0QWN0aXZlRm9ybShzZWxlY3RlZEZvcm06IHN0cmluZykge1xuICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICB0aGlzLnRvZ2dsZUxvYWRlcih0cnVlKTtcbiAgICB0aGlzLmlzVW5zYXZlZERhdGEgPSBmYWxzZTtcblxuICAgIGxldCBhY3RpdmVGb3JtQ29uZmlnID0gdGhpcy5mb3Jtc0xpc3QuZmluZCgoZm9ybSkgPT4ge1xuICAgICAgaWYgKGZvcm0ua2V5ID09PSBzZWxlY3RlZEZvcm0pIHtcbiAgICAgICAgcmV0dXJuIGZvcm07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhY3RpdmVGb3JtQ29uZmlnID0gbmV3IENvbnZlcnRlcigpLnVwZGF0ZUZvcm1Db25maWdQcm9wZXJ0aWVzKFxuICAgICAgYWN0aXZlRm9ybUNvbmZpZ1xuICAgICk7XG5cbiAgICBsZXQgZm9ybUNvbmZpZzogYW55ID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGl2ZUZvcm1Db25maWcsIFwicHJvcHNcIikpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3RpdmVGb3JtQ29uZmlnLnByb3BzLCBcInVybFwiKSkge1xuICAgICAgICBjb25zdCBmb3JtQ29uZmlnRnJvbVVybCA9IGF3YWl0IHRoaXMuZmV0Y2hGb3JtQ29uZmlnKFxuICAgICAgICAgIGFjdGl2ZUZvcm1Db25maWcucHJvcHMudXJsXG4gICAgICAgICk7XG4gICAgICAgIGZvcm1Db25maWcgPSB7XG4gICAgICAgICAgLi4uYWN0aXZlRm9ybUNvbmZpZyxcbiAgICAgICAgICAuLi5mb3JtQ29uZmlnRnJvbVVybFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aXZlRm9ybUNvbmZpZy5wcm9wcywgXCJwYXRoXCIpICYmXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMudXNlckNvbmZpZywgXCJiYWNrZW5kXCIpICYmXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMudXNlckNvbmZpZy5iYWNrZW5kLCBcIkNPTkZJR19CQVNFX1VSTFwiKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMudXNlckNvbmZpZz8uYmFja2VuZD8uQ09ORklHX0JBU0VfVVJMfSR7YWN0aXZlRm9ybUNvbmZpZy5wcm9wcy5wYXRofWA7XG4gICAgICAgIGNvbnN0IGZvcm1Db25maWdGcm9tUGF0aCA9IGF3YWl0IHRoaXMuZmV0Y2hGb3JtQ29uZmlnKHVybCk7XG4gICAgICAgIGZvcm1Db25maWcgPSB7XG4gICAgICAgICAgLi4uYWN0aXZlRm9ybUNvbmZpZyxcbiAgICAgICAgICAuLi5mb3JtQ29uZmlnRnJvbVBhdGhcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhhY3RpdmVGb3JtQ29uZmlnLCBcInR5cGVcIikgJiZcbiAgICAgICAgICBhY3RpdmVGb3JtQ29uZmlnLnR5cGUgPT09IEVGb3JtVHlwZS5GT1JNXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3RpdmVGb3JtQ29uZmlnLCBcImZpZWxkc1wiKSkge1xuICAgICAgICAgICAgZm9ybUNvbmZpZyA9IGFjdGl2ZUZvcm1Db25maWc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiTm8gRGlyZWN0IFVSTCwgTm8gUGF0aCB3aXRoIEJhc2UgVVJMLCBObyBmaWVsZHMga2V5IGZvdW5kIGluIEFjdGl2ZSBGb3JtJ3MgQ29uZmlnIVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYE5vIERpcmVjdCBVUkwsIE5vIFBhdGggd2l0aCBCYXNlIFVSTCwgTm8gZmllbGRzIGtleSBmb3VuZCBpbiBBY3RpdmUgRm9ybSdzIENvbmZpZyFgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aXZlRm9ybUNvbmZpZy5mb3JtQ29udGVudCwgXCJ1cmxcIikpIHtcbiAgICAgICAgY29uc3QgZm9ybUNvbmZpZ0Zyb21VcmwgPSBhd2FpdCB0aGlzLmZldGNoRm9ybUNvbmZpZyhcbiAgICAgICAgICBhY3RpdmVGb3JtQ29uZmlnLmZvcm1Db250ZW50LnVybFxuICAgICAgICApO1xuICAgICAgICBmb3JtQ29uZmlnID0ge1xuICAgICAgICAgIC4uLmFjdGl2ZUZvcm1Db25maWcsXG4gICAgICAgICAgLi4uZm9ybUNvbmZpZ0Zyb21VcmxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGl2ZUZvcm1Db25maWcuZm9ybUNvbnRlbnQsIFwicGF0aFwiKSAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLnVzZXJDb25maWcsIFwiYmFja2VuZFwiKSAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLnVzZXJDb25maWcuYmFja2VuZCwgXCJDT05GSUdfQkFTRV9VUkxcIilcbiAgICAgICkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnVzZXJDb25maWc/LmJhY2tlbmQ/LkNPTkZJR19CQVNFX1VSTH0ke2FjdGl2ZUZvcm1Db25maWcucHJvcHMucGF0aH1gO1xuICAgICAgICBjb25zdCBmb3JtQ29uZmlnRnJvbVBhdGggPSBhd2FpdCB0aGlzLmZldGNoRm9ybUNvbmZpZyh1cmwpO1xuICAgICAgICBmb3JtQ29uZmlnID0ge1xuICAgICAgICAgIC4uLmFjdGl2ZUZvcm1Db25maWcsXG4gICAgICAgICAgLi4uZm9ybUNvbmZpZ0Zyb21QYXRoXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aXZlRm9ybUNvbmZpZywgXCJmaWVsZHNcIikpIHtcbiAgICAgICAgICBmb3JtQ29uZmlnID0gYWN0aXZlRm9ybUNvbmZpZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJObyBEaXJlY3QgVVJMLCBObyBQYXRoIHdpdGggQmFzZSBVUkwsIE5vIGZpZWxkcyBrZXkgZm91bmQgaW4gQWN0aXZlIEZvcm0ncyBDb25maWchXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9ybUNvbmZpZyA9IG5ldyBDb252ZXJ0ZXIoKS51cGRhdGVGb3JtQ29uZmlnRnJvbVVzZXJDb25maWcoXG4gICAgICBmb3JtQ29uZmlnLFxuICAgICAgdGhpcy51c2VyQ29uZmlnXG4gICAgKTtcblxuICAgIGZvcm1Db25maWcgPSBuZXcgQ29udmVydGVyKCkudXBkYXRlRm9ybUNvbmZpZ01pc2NlbGxhbmVvdXMoZm9ybUNvbmZpZywge1xuICAgICAgZm9ybXNMaXN0TGVuZ3RoOiB0aGlzLmZpbmRGb3Jtc0xpc3RMZW5ndGgodGhpcy5mb3Jtc0xpc3QpXG4gICAgfSk7XG5cbiAgICB0aGlzLmFjdGl2ZUZvcm1Db25maWcgPSBtZXJnZU9iamVjdHMoYWN0aXZlRm9ybUNvbmZpZywgZm9ybUNvbmZpZyk7XG5cbiAgICBpZiAodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDwgNjAwKSB7XG4gICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoID49IDYwMCkge1xuICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd0Zvcm0gPSB0cnVlO1xuICAgIHRoaXMudG9nZ2xlTG9hZGVyKGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtVmlldyAtIExpc3RlbnMgdG8gZXZlbnQgb2YgZXhlY3V0aW5nIGFuIEFQSSBjYWxsIGZyb20gd2l0aGluIHRoZSBGb3JtVmlldyBhbmQgZW1pdHMgKHJlYWQgYXMgcGFzc2VzKSB0aGUgc2FtZSBldmVudCB0byB0aGUgbGlicmFyeSBjb25zdW1lci5cbiAgICogQHBhcmFtIGUgYW55XG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIGhhbmRsZUdldFVuc2F2ZWRTdGF0ZShlOiBhbnkpIHtcbiAgICB0aGlzLmlzVW5zYXZlZERhdGEgPSBlO1xuICB9XG5cbiAgaGFuZGxlT25DbGlja0FwaUNhbGwoZTogYW55KSB7XG4gICAgdGhpcy5vbkNsaWNrQXBpQ2FsbC5lbWl0KGUpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkFjdGlvblNob3dQb3B1cEZvcm0oZTogYW55LCBjb250ZW50OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhlLCBcImFjdGl2ZUZvcm1EYXRhXCIpICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyhlLCBcInBvcHVwRm9ybUNvbmZpZ1wiKVxuICAgICkge1xuICAgICAgY29uc3QgcG9wdXBGb3JtRGF0YSA9IHsgW3RoaXMuYWN0aXZlRm9ybUNvbmZpZy5rZXldOiBlLmFjdGl2ZUZvcm1EYXRhIH07XG4gICAgICB0aGlzLmFjdGl2ZVBvcHVwRm9ybURhdGEgPSBtZXJnZU9iamVjdHModGhpcy5hbGxGb3Jtc0RhdGEsIHBvcHVwRm9ybURhdGEpO1xuXG4gICAgICB0aGlzLnBvcHVwRm9ybUNvbmZpZyA9IGUucG9wdXBGb3JtQ29uZmlnO1xuICAgICAgY29uc3QgcG9wdXBUeXBlID0gZT8ucG9wdXBUeXBlID8/IFwiRElBTE9HXCI7XG5cbiAgICAgIHN3aXRjaCAocG9wdXBUeXBlKSB7XG4gICAgICAgIGNhc2UgXCJESUFMT0dcIjpcbiAgICAgICAgICB0aGlzLnByZXZpZXdEaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ3NcbiAgICAgICAgICAgIC5vcGVuKGNvbnRlbnQsIHtcbiAgICAgICAgICAgICAgY2xvc2VhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIHNpemU6IFwic1wiLFxuICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wdXBGb3JtQ2FsbGJhY2sgPSB7XG4gICAgICAgICAgICAgICAgICBwb3B1cEZvcm1EYXRhOiBkYXRhW1wiZGF0YVwiXSxcbiAgICAgICAgICAgICAgICAgIHBvcHVwRm9ybUNvbmZpZzogZGF0YVtcImZvcm1Db25maWdcIl0sXG4gICAgICAgICAgICAgICAgICBhY3RpdmVGb3JtQ29uZmlnOiB0aGlzLmFjdGl2ZUZvcm1Db25maWdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUG9wdXBGb3JtRGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMucG9wdXBGb3JtQ29uZmlnID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3RGlhbG9nUmVmLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cEZvcm1DYWxsYmFjayA9IHtcbiAgICAgICAgICAgICAgICAgIHBvcHVwRm9ybURhdGE6IHt9LFxuICAgICAgICAgICAgICAgICAgcG9wdXBGb3JtQ29uZmlnOiB0aGlzLnBvcHVwRm9ybUNvbmZpZyxcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUZvcm1Db25maWc6IHRoaXMuYWN0aXZlRm9ybUNvbmZpZyxcbiAgICAgICAgICAgICAgICAgIHN0b3BUYXNrRXhlY3V0aW9uOiB0cnVlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVBvcHVwRm9ybURhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNvbmZpZyA9IHt9O1xuXG4gICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiRGlhbG9nIGVycm9yXCIpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIkRpYWxvZyBjbG9zZWRcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiUE9QVVBcIjpcbiAgICAgICAgICB0aGlzLnByZXZpZXdEaWFsb2dSZWYgPSB0aGlzLnByZXZpZXdEaWFsb2dTZXJ2aWNlXG4gICAgICAgICAgICAub3Blbih0aGlzLnByZXZpZXcgfHwgXCJcIilcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wdXBGb3JtQ2FsbGJhY2sgPSB7XG4gICAgICAgICAgICAgICAgICBwb3B1cEZvcm1EYXRhOiBkYXRhW1wiZGF0YVwiXSxcbiAgICAgICAgICAgICAgICAgIHBvcHVwRm9ybUNvbmZpZzogZGF0YVtcImZvcm1Db25maWdcIl0sXG4gICAgICAgICAgICAgICAgICBhY3RpdmVGb3JtQ29uZmlnOiB0aGlzLmFjdGl2ZUZvcm1Db25maWdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUG9wdXBGb3JtRGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMucG9wdXBGb3JtQ29uZmlnID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3RGlhbG9nUmVmLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cEZvcm1DYWxsYmFjayA9IHtcbiAgICAgICAgICAgICAgICAgIHBvcHVwRm9ybURhdGE6IHt9LFxuICAgICAgICAgICAgICAgICAgcG9wdXBGb3JtQ29uZmlnOiB0aGlzLnBvcHVwRm9ybUNvbmZpZyxcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUZvcm1Db25maWc6IHRoaXMuYWN0aXZlRm9ybUNvbmZpZyxcbiAgICAgICAgICAgICAgICAgIHN0b3BUYXNrRXhlY3V0aW9uOiB0cnVlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVBvcHVwRm9ybURhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNvbmZpZyA9IHt9O1xuXG4gICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiUHJldmlldyBlcnJvclwiKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJQcmV2aWV3IGNsb3NlZFwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1WaWV3IC0gTGlzdGVucyB0byBldmVudCBvZiBnZXR0aW5nIHRoZSBBY3RpdmUgRm9ybSdzIERhdGEgd2hlbiB0aGUgRm9ybSBpcyBTYXZlZCBhbmQgZW1pdHMgKHJlYWQgYXMgcGFzc2VzKSB0aGUgc2FtZSBldmVudCB0byB0aGUgbGlicmFyeSBjb25zdW1lci5cbiAgICogQHBhcmFtIGUgYW55XG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tTYXZlRm9ybShcbiAgICBlOiBhbnksXG4gICAgZXZlbnRUeXBlOiBcIkZPUk1cIiB8IFwiUE9QVVBfRk9STVwiLFxuICAgIGNvbnRleHQ6IHVuZGVmaW5lZFxuICApIHtcbiAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgY2FzZSBcIkZPUk1cIjpcbiAgICAgICAgdGhpcy5pc1Vuc2F2ZWREYXRhID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG9nZ2xlTG9hZGVyKHRydWUpO1xuXG4gICAgICAgIHRoaXMuZ2V0Rm9ybURhdGEuZW1pdCh7XG4gICAgICAgICAgW3RoaXMuYWN0aXZlRm9ybUNvbmZpZy5rZXldOiB7XG4gICAgICAgICAgICBmb3JtQ29uZmlnOiBlW1wiZm9ybUNvbmZpZ1wiXSxcbiAgICAgICAgICAgIGRhdGE6IGVbXCJkYXRhXCJdLFxuICAgICAgICAgICAgZXh0ZW5kZWREYXRhOiBlW1wiZXh0ZW5kZWREYXRhXCJdXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiUE9QVVBfRk9STVwiOlxuICAgICAgICB0aGlzLnByZXZpZXdEaWFsb2dSZWYubmV4dChlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9ybVZpZXcgLSBMaXN0ZW5zIHRvIGV2ZW50IG9mIHNob3dpbmcgdGhlIEZvcm1zIExpc3QgaW4gTW9iaWxlIFZpZXcuXG4gICAqIEBwYXJhbSBlIGFueVxuICAgKi9cbiAgaGFuZGxlT25DbGlja1ZpZXdGb3JtcyhlOiBhbnkpIHtcbiAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgZXZlbnQgb2YgZ29pbmcgYmFjayB0byB0aGUgcHJldmlvdXMgZm9ybSBkaXJlY3RseSBvciBieSB0YWJiaW5nLCB3aXRob3V0IHNob3dpbmcgdGhlIGZvcm0gbGlzdCBpbiBtb2JpbGUgdmlldy5cbiAgICpcbiAgICogUHJlcmVxdWlzaXRlOiBUaGUgY3VycmVudCBmb3JtIGNhbiBuZXZlciBiZSBsb2NrZWQ7IGl0IHNob3VsZCBlaXRoZXIgYmUgaW4gYW4gZWRpdGFibGUgb3IgY29tcGxldGVkIHN0YXRlLlxuICAgKlxuICAgKiBMb2dpYzpcbiAgICogMS4gRm9yIERJUkVDVCBtb2RlLCBmaW5kIHRoZSBjb25maWcgb2YgdGhlIHByZXZpb3VzIGZvcm0gc3RhcnRpbmcgZnJvbSB0aGUgZmlyc3QgZm9ybSwgc3VjaCB0aGF0IHRoZSBwcmV2aW91cyBmb3JtIGlzIGVkaXRhYmxlIGFuZCBpdHMgc2VxdWVuY2UgbnVtYmVyIGlzIG9uZSBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgYWN0aXZlIGZvcm0ncyBzZXF1ZW5jZSBudW1iZXIuXG4gICAqICAgIElmIG5vIHByZXZpb3VzIGZvcm0gaXMgZm91bmQgb3IgYWxsIGZvcm1zIGhhdmUgYmVlbiBjb21wbGV0ZWQsIHNob3cgdGhlIGZvcm0gbGlzdC5cbiAgICogMi4gRm9yIFRBQkJFRCBtb2RlLCBmaW5kIHRoZSBjb25maWcgb2YgdGhlIHByZXZpb3VzIGZvcm0gaW4gdGhlIGxpc3QsIHN1Y2ggdGhhdCB0aGUgcHJldmlvdXMgZm9ybSdzIHNlcXVlbmNlIG51bWJlciBpcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgYWN0aXZlIGZvcm0ncyBzZXF1ZW5jZSBudW1iZXIgYW5kIHRoZSBmb3JtIGlzIGVkaXRhYmxlLlxuICAgKiAgICBJZiBubyBwcmV2aW91cyBmb3JtIGlzIGZvdW5kLCBzaG93IHRoZSBmb3JtIGxpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlIC0gVGhlIGV2ZW50IG9iamVjdCBjb250YWluaW5nIHRoZSBtb2RlIHRvIGdvIGJhY2sgaW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlLm1vZGUgLSBUaGUgbW9kZSBvZiBnb2luZyBiYWNrOiBESVJFQ1Qgb3IgVEFCQkVELlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0dvQmFjayhlOiBhbnkpIHtcbiAgICBzd2l0Y2ggKGUubW9kZSkge1xuICAgICAgY2FzZSBFRm9ybVZpZXdHb0JhY2tNb2RlLkRJUkVDVDpcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRm9ybUNvbmZpZy5zZXF1ZW5jZU5vID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZGb3Jtc1N0YXR1c0NvbXBsZXRlZChcbiAgICAgICAgICAgICAgdGhpcy5mb3Jtc0xpc3QsXG4gICAgICAgICAgICAgIHRoaXMuZm9ybXNMaXN0Q29tcGxldGVkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zaG93Rm9ybSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c0Zvcm1Db25maWdEaXJlY3QgPSB0aGlzLmZvcm1zTGlzdC5maW5kKChmb3JtKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBmb3JtLnNlcXVlbmNlTm8gPT09IHRoaXMuYWN0aXZlRm9ybUNvbmZpZy5zZXF1ZW5jZU5vIC0gMSAmJlxuICAgICAgICAgICAgICAgIGZvcm0uc3RhdHVzICE9PSBFRm9ybXNMaXN0U3RhdHVzLkxPQ0tFRFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChwcmV2aW91c0Zvcm1Db25maWdEaXJlY3QpIHtcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVPbkNsaWNrU2V0QWN0aXZlRm9ybShwcmV2aW91c0Zvcm1Db25maWdEaXJlY3Qua2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZvcm1WaWV3R29CYWNrTW9kZS5UQUJCRUQ6XG4gICAgICAgIGNvbnN0IHByZXZpb3VzRm9ybUNvbmZpZyA9IHRoaXMuZm9ybXNMaXN0LmZpbmQoKGZvcm0pID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmb3JtLnNlcXVlbmNlTm8gPCB0aGlzLmFjdGl2ZUZvcm1Db25maWcuc2VxdWVuY2VObyAmJlxuICAgICAgICAgICAgZm9ybS5zdGF0dXMgPT09IEVGb3Jtc0xpc3RTdGF0dXMuRURJVEFCTEVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzRm9ybUNvbmZpZykge1xuICAgICAgICAgIHRoaXMuaGFuZGxlT25DbGlja1NldEFjdGl2ZUZvcm0ocHJldmlvdXNGb3JtQ29uZmlnLmtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1MaXN0IC0gTGlzdGVucyB0byBldmVudCBvZiBzdWJtaXR0aW5nIGFsbCB0aGUgZm9ybXMgYW5kIG1vdmluZyBvdXQgb2YgdGhlIGxpYnJhcnkgYW5kIGFsc28gaGFuZGxlcyB0aGUgdmFsaWRhdGlvbiBvZiBhbGwgdGhlIGZvcm1zLlxuICAgKiBAcGFyYW0gZSBhbnlcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlT25DbGlja1N1Ym1pdEZvcm1zKGU6IGFueSkge1xuICAgIGNvbnN0IGZvcm1zTGlzdDogYW55W10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybXNMaXN0KSk7XG5cbiAgICBmb3IgKGxldCBmb3JtIG9mIGZvcm1zTGlzdCkge1xuICAgICAgaWYgKFxuICAgICAgICAhZm9ybS5oaWRkZW4gJiZcbiAgICAgICAgZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCAmJlxuICAgICAgICBmb3JtLnJlcXVpcmVkICYmXG4gICAgICAgIGZvcm0uc3RhdHVzICE9PSBFRm9ybXNMaXN0U3RhdHVzLkNPTVBMRVRFRFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24odHJ1ZSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpO1xuICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub25DbGlja1N1Ym1pdC5lbWl0KGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1pc2NlbGxhbmVvdXMgTWV0aG9kc1xuICAgKi9cbiAgaGFuZGxlUmVzaXplKGZvcm1zTGlzdDogYW55W10pIHtcbiAgICBpZiAodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDwgNjAwKSB7XG4gICAgICBjb25zdCBpc1NpbmdsZUZvcm0gPSAoZm9ybXNMaXN0OiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICByZXR1cm4gZm9ybXNMaXN0Lmxlbmd0aCA9PT0gMTtcbiAgICAgIH07XG4gICAgICBpZiAoIWlzU2luZ2xlRm9ybShmb3Jtc0xpc3QpKSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNNb2JpbGVWaWV3ID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IG5nQ2xhc3M9XCJrd2lraWQtcmVuZGVyZXJcIj5cbiAgPGRpdlxuICAgIG5nQ2xhc3M9XCJrd2lraWQtbGF5b3V0LWNvbnRhaW5lclwiXG4gICAgKm5nSWY9XCIhbG9hZGluZ1wiXG4gID5cbiAgICA8ZGl2XG4gICAgICBuZ0NsYXNzPVwia3dpa2lkLXNlY3Rpb25zLWNvbnRhaW5lclwiXG4gICAgICAqbmdJZj1cInNob3dGb3JtU2VjdGlvbnNcIlxuICAgICAgY2xhc3M9XCJhY3RpdmVcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93Rm9ybVNlY3Rpb25zXCJcbiAgICAgIFtjbGFzcy5tb2JpbGVdPVwiaXNNb2JpbGVWaWV3XCJcbiAgICA+XG4gICAgICA8a3dpa2lkLWZvcm1zLWxpc3RcbiAgICAgICAgW3Nob3dGb3JtRmllbGRzXT1cInRoaXMuc2hvd0Zvcm1GaWVsZHNcIlxuICAgICAgICBbYWN0aXZlRm9ybUNvbmZpZ109XCJ0aGlzLmFjdGl2ZUZvcm1Db25maWdcIlxuICAgICAgICBbdXNlckNvbmZpZ109XCJ0aGlzLnVzZXJDb25maWdcIlxuICAgICAgICBbZm9ybXNMaXN0XT1cInRoaXMuZm9ybXNMaXN0XCJcbiAgICAgICAgW3N0ZXBDb25maWddPVwidGhpcy5zdGVwQ29uZmlnXCJcbiAgICAgICAgW2lzVW5zYXZlZERhdGFdPVwidGhpcy5pc1Vuc2F2ZWREYXRhXCJcbiAgICAgICAgW2Zvcm1zTGlzdENvbXBsZXRlZF09XCJ0aGlzLmZvcm1zTGlzdENvbXBsZXRlZFwiXG4gICAgICAgIFtpc01vYmlsZVZpZXddPVwidGhpcy5pc01vYmlsZVZpZXdcIlxuICAgICAgICAob25DbGlja1NldEFjdGl2ZUZvcm0pPVwidGhpcy5oYW5kbGVPbkNsaWNrU2V0QWN0aXZlRm9ybSgkZXZlbnQpXCJcbiAgICAgICAgKG9uQ2xpY2tTdWJtaXRGb3Jtcyk9XCJ0aGlzLmhhbmRsZU9uQ2xpY2tTdWJtaXRGb3JtcygkZXZlbnQpXCJcbiAgICAgID48L2t3aWtpZC1mb3Jtcy1saXN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIG5nQ2xhc3M9XCJrd2lraWQtZm9ybXMtY29udGFpbmVyXCJcbiAgICAgICpuZ0lmPVwiXG4gICAgICAgIHRoaXMuc2hvd0Zvcm0gJiZcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyAmJlxuICAgICAgICB0aGlzLmFjdGl2ZUZvcm1Db25maWcgIT09IHVuZGVmaW5lZFxuICAgICAgXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2hvd0Zvcm1GaWVsZHNcIlxuICAgICAgW2NsYXNzLm1vYmlsZV09XCJpc01vYmlsZVZpZXdcIlxuICAgICAgW0BwYW5lbEluT3V0XVxuICAgID5cbiAgICAgIDxrd2lraWQtZm9ybS12aWV3XG4gICAgICAgICpuZ0lmPVwidGhpcy5hY3RpdmVGb3JtQ29uZmlnLnR5cGUgPT09ICdGT1JNJ1wiXG4gICAgICAgIFtmb3JtQ29uZmlnXT1cInRoaXMuYWN0aXZlRm9ybUNvbmZpZ1wiXG4gICAgICAgIFthbGxGb3Jtc0RhdGFdPVwidGhpcy5hbGxGb3Jtc0RhdGFcIlxuICAgICAgICBbaXNNb2JpbGVWaWV3XT1cInRoaXMuaXNNb2JpbGVWaWV3XCJcbiAgICAgICAgW3VzZXJDb25maWddPVwidGhpcy51c2VyQ29uZmlnXCJcbiAgICAgICAgW3BvcHVwRm9ybUNhbGxiYWNrXT1cInRoaXMucG9wdXBGb3JtQ2FsbGJhY2tcIlxuICAgICAgICBbYXBpQ2FsbFJlc3BvbnNlXT1cInRoaXMuYXBpQ2FsbFJlc3BvbnNlXCJcbiAgICAgICAgKGdldFVuc2F2ZWREYXRhU3RhdGUpPVwiaGFuZGxlR2V0VW5zYXZlZFN0YXRlKCRldmVudClcIlxuICAgICAgICAob25DbGlja0FwaUNhbGwpPVwiaGFuZGxlT25DbGlja0FwaUNhbGwoJGV2ZW50KVwiXG4gICAgICAgIChvbkFjdGlvblNob3dQb3B1cEZvcm0pPVwiXG4gICAgICAgICAgdGhpcy5oYW5kbGVPbkFjdGlvblNob3dQb3B1cEZvcm0oJGV2ZW50LCBjb250ZW50KVxuICAgICAgICBcIlxuICAgICAgICAob25DbGlja0dvQmFjayk9XCJ0aGlzLmhhbmRsZU9uQ2xpY2tHb0JhY2soJGV2ZW50KVwiXG4gICAgICAgIChvbkNsaWNrVmlld0Zvcm1zKT1cInRoaXMuaGFuZGxlT25DbGlja1ZpZXdGb3JtcygkZXZlbnQpXCJcbiAgICAgICAgKG9uQ2xpY2tTYXZlRm9ybSk9XCJcbiAgICAgICAgICB0aGlzLmhhbmRsZU9uQ2xpY2tTYXZlRm9ybSgkZXZlbnQsICdGT1JNJywgdW5kZWZpbmVkKVxuICAgICAgICBcIlxuICAgICAgPjwva3dpa2lkLWZvcm0tdmlldz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGt3aWt1aS1sb2FkZXJcbj48L2t3aWt1aS1sb2FkZXI+XG5cbjx0dWktcHVzaFxuICBpZD1cImVycm9yLW5vdGlmaWNhdGlvblwiXG4gICp0dWlQdXNoPVwic2hvd0Vycm9yTm90aWZpY2F0aW9uXCJcbiAgaGVhZGluZz1cIlBsZWFzZSBjb21wbGV0ZSB0aGUgcmVxdWlyZWQgRm9ybXMhXCJcbiAgdHlwZT1cIkVycm9yXCJcbiAgKGNsb3NlKT1cInRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKGZhbHNlKVwiXG4+XG4gIDx0dWktc3ZnXG4gICAgc3JjPVwidHVpSWNvblhDaXJjbGVcIlxuICAgIHN0eWxlPVwiY29sb3I6ICNmZmYgIWltcG9ydGFudFwiXG4gID5cbiAgPC90dWktc3ZnPlxuPC90dWktcHVzaD5cbjxuZy10ZW1wbGF0ZVxuICAjcHJldmlld1xuICBsZXQtcHJldmlld1xuPlxuICA8dHVpLXByZXZpZXdcbiAgICBbcm90YXRhYmxlXT1cImZhbHNlXCJcbiAgICBbem9vbWFibGVdPVwiZmFsc2VcIlxuICAgIGNsYXNzPVwicHJldmlldy1jb250YWluZXJcIlxuICAgICpuZ0lmPVwicG9wdXBGb3JtQ29uZmlnXCJcbiAgPlxuICAgIDx0dWktcHJldmlldy10aXRsZSAqbmdJZj1cInByZXZpZXdQcm9wZXJ0aWVzLnRpdGxlICE9PSAnJ1wiPnt7XG4gICAgICBwcmV2aWV3UHJvcGVydGllcy50aXRsZVxuICAgIH19PC90dWktcHJldmlldy10aXRsZT5cblxuICAgIDxkaXYgY2xhc3M9XCJrd2lraWQtZm9ybS12aWV3LXBvcHVwLWNvbnRhaW5lclwiPlxuICAgICAgPGt3aWtpZC1mb3JtLXZpZXdcbiAgICAgICAgW2Zvcm1EYXRhXT1cImFjdGl2ZVBvcHVwRm9ybURhdGFcIlxuICAgICAgICBbZm9ybUNvbmZpZ109XCJwb3B1cEZvcm1Db25maWdcIlxuICAgICAgICBbYWxsRm9ybXNEYXRhXT1cImFsbEZvcm1zRGF0YVwiXG4gICAgICAgIFt1c2VyQ29uZmlnXT1cInRoaXMudXNlckNvbmZpZ1wiXG4gICAgICAgIFtpc01vYmlsZVZpZXddPVwidGhpcy5pc01vYmlsZVZpZXdcIlxuICAgICAgICBbYXBpQ2FsbFJlc3BvbnNlXT1cInRoaXMuYXBpQ2FsbFJlc3BvbnNlXCJcbiAgICAgICAgKGdldFNhdmVkU3RhdGUpPVwiaGFuZGxlR2V0VW5zYXZlZFN0YXRlKCRldmVudClcIlxuICAgICAgICAob25DbGlja0FwaUNhbGwpPVwiaGFuZGxlT25DbGlja0FwaUNhbGwoJGV2ZW50KVwiXG4gICAgICAgIChvbkNsaWNrU2F2ZUZvcm0pPVwiXG4gICAgICAgICAgdGhpcy5oYW5kbGVPbkNsaWNrU2F2ZUZvcm0oJGV2ZW50LCAnUE9QVVBfRk9STScsIHVuZGVmaW5lZClcbiAgICAgICAgXCJcbiAgICAgID48L2t3aWtpZC1mb3JtLXZpZXc+XG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uXG4gICAgICB0dWlJY29uQnV0dG9uXG4gICAgICB0dWlQcmV2aWV3QWN0aW9uXG4gICAgICBpY29uPVwidHVpSWNvbkNsb3NlTGFyZ2VcIlxuICAgICAgdGl0bGU9XCJDbG9zZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJwcmV2aWV3LmNvbXBsZXRlKClcIlxuICAgID48L2J1dHRvbj5cbiAgPC90dWktcHJldmlldz5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGVcbiAgI2NvbnRlbnRcbiAgbGV0LWNvbnRleHRcbj5cbiAgPGRpdiBjbGFzcz1cImt3aWtpZC1mb3JtLXZpZXctcG9wdXAtY29udGFpbmVyXCI+XG4gICAgPGt3aWtpZC1mb3JtLXZpZXdcbiAgICAgIFtmb3JtRGF0YV09XCJhY3RpdmVQb3B1cEZvcm1EYXRhXCJcbiAgICAgIFtmb3JtQ29uZmlnXT1cInBvcHVwRm9ybUNvbmZpZ1wiXG4gICAgICBbYWxsRm9ybXNEYXRhXT1cImFsbEZvcm1zRGF0YVwiXG4gICAgICBbdXNlckNvbmZpZ109XCJ0aGlzLnVzZXJDb25maWdcIlxuICAgICAgW2lzTW9iaWxlVmlld109XCJ0aGlzLmlzTW9iaWxlVmlld1wiXG4gICAgICBbYXBpQ2FsbFJlc3BvbnNlXT1cInRoaXMuYXBpQ2FsbFJlc3BvbnNlXCJcbiAgICAgIChnZXRTYXZlZFN0YXRlKT1cImhhbmRsZUdldFVuc2F2ZWRTdGF0ZSgkZXZlbnQpXCJcbiAgICAgIChvbkNsaWNrQXBpQ2FsbCk9XCJoYW5kbGVPbkNsaWNrQXBpQ2FsbCgkZXZlbnQpXCJcbiAgICAgIChvbkNsaWNrU2F2ZUZvcm0pPVwiXG4gICAgICAgIHRoaXMuaGFuZGxlT25DbGlja1NhdmVGb3JtKCRldmVudCwgJ1BPUFVQX0ZPUk0nLCBjb250ZXh0KVxuICAgICAgXCJcbiAgICA+PC9rd2lraWQtZm9ybS12aWV3PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|