kwikid-forms 0.6.36 → 0.6.38
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 +27 -5
- package/bundles/kwikid-forms.umd.js.map +1 -1
- package/esm2015/lib/builder/builder-form-list/builder-forms-list.component.js +1 -1
- package/esm2015/lib/renderer/form-view/form-view.component.js +19 -3
- package/esm2015/lib/renderer/forms-list/forms-list.component.js +1 -1
- package/esm2015/lib/renderer/renderer.component.js +8 -2
- package/fesm2015/kwikid-forms.js +27 -5
- package/fesm2015/kwikid-forms.js.map +1 -1
- package/lib/renderer/form-view/form-view.component.d.ts +3 -1
- package/lib/renderer/renderer.component.d.ts +3 -1
- package/package.json +1 -1
|
@@ -184,7 +184,7 @@ export class KwikIDFormsListComponent {
|
|
|
184
184
|
}
|
|
185
185
|
}
|
|
186
186
|
/** @nocollapse */ KwikIDFormsListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: KwikIDFormsListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
187
|
-
/** @nocollapse */ KwikIDFormsListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDFormsListComponent, selector: "kwikid-forms-list", inputs: { showFormFields: "showFormFields", userConfig: "userConfig", stepConfig: "stepConfig", activeFormConfig: "activeFormConfig", formsList: "formsList", formsListCompleted: "formsListCompleted", isMobileView: "isMobileView", isUnsavedData: "isUnsavedData" }, outputs: { getLogs: "getLogs", onClickSetActiveForm: "onClickSetActiveForm", onClickHideFormsList: "onClickHideFormsList", onClickSubmitForms: "onClickSubmitForms" }, usesOnChanges: true, ngImport: i0, template: "<div\n id=\"sidebar-container\"\n *ngIf=\"!loading\"\n>\n <div id=\"sidebar\">\n <div ngClass=\"kwikid-form-header\">\n <div id=\"uf-header\">\n <div id=\"uf-header-logo-container\">\n <img\n id=\"uf-header-logo\"\n src=\"{{ this.userConfig.theme.clientLogo }}\"\n [ngClass]=\"'large-icon'\"\n />\n </div>\n </div>\n <hr />\n </div>\n <div id=\"uf-progress\">\n <div id=\"uf-progress-steps\">\n {{ this.formsListCompleted.length }} / {{ this.formsListLength }} Steps\n Completed\n </div>\n <kwikui-progress-segmented\n [max]=\"this.formsListLength\"\n size=\"m\"\n [value]=\"this.formsListCompleted.length\"\n ></kwikui-progress-segmented>\n </div>\n <div id=\"uf-sections-container\">\n <ng-container *ngFor=\"let form of formsList; let i = index\">\n <ng-container [ngSwitch]=\"form.type\">\n <!-- HTML Content -->\n <ng-container *ngSwitchCase=\"'HTML'\">\n <div [innerHtml]=\"form.props.htmlContent | kwikuiSafeHtml\"></div>\n </ng-container>\n <!-- Type FORM -->\n <ng-container *ngSwitchCase=\"'FORM'\">\n <ng-container\n [ngTemplateOutlet]=\"FORM_BUTTON\"\n [ngTemplateOutletContext]=\"{\n form: form,\n activeFormConfig: activeFormConfig\n }\"\n >\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n <div id=\"submit-sidebar-btn-container\">\n <kwikui-button\n *ngIf=\"\n !stepConfig.props.formListProperties.footer.submitFormButton.hidden\n \"\n label=\"{{\n stepConfig.props.formListProperties.footer.submitFormButton.label\n }}\"\n type=\"submit\"\n styles=\"width: 100%\"\n (onClick)=\"handleOnSubmitForms($event)\"\n ></kwikui-button>\n </div>\n </div>\n</div>\n\n<ng-template\n #FORM_BUTTON\n let-form=\"form\"\n let-activeFormConfig=\"activeFormConfig\"\n>\n <div\n [class]=\"'uf-section-item'\"\n [class.completed]=\"form.status === 'completed' && !form.disabled\"\n [class.edit]=\"form.status === 'editable' && !form.disabled\"\n [class.locked]=\"form.status === 'locked' && form.disabled\"\n [class.active]=\"\n activeFormConfig !== undefined && form.key === activeFormConfig.key\n \"\n (click)=\"\n form.status === 'locked' && form.disabled\n ? undefined\n : handleOnClickSetActiveForm(form.key)\n \"\n >\n <div class=\"uf-form-section-card-title\">\n {{ form.props.title }} <span *ngIf=\"form?.required\">*</span>\n </div>\n <div class=\"uf-form-section-card-status\">\n <div\n *ngIf=\"form.status === 'completed' && !form.disabled\"\n class=\"uf-form-section-card-status-img completed\"\n >\n <tui-svg src=\"tuiIconCheckLarge\"></tui-svg>\n </div>\n <div\n *ngIf=\"form.status !== 'completed' && !form.disabled\"\n class=\"uf-form-section-card-status-img edit\"\n >\n <tui-svg src=\"tuiIconEdit\"></tui-svg>\n </div>\n <div\n *ngIf=\"form.status !== 'completed' && form.disabled\"\n class=\"uf-form-section-card-status-img locked\"\n >\n <tui-svg src=\"tuiIconLock\"></tui-svg>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: ["#sidebar-container{width:100%;height:100%;margin:0 auto;display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center}#sidebar{width:100%;height:100%;display:flex;flex-direction:column;align-content:center;justify-content:flex-start;align-items:stretch}.uf-section-item{width:100%;display:flex;flex-direction:row;align-items:center;justify-content:space-between;align-content:center;padding:1rem;cursor:pointer;box-shadow:0 1px 3px -1px var(--tui-base-05);border-radius:.5rem;background-color:var(--tui-base-02);position:relative}.uf-section-item>*:not(:last-child){margin-right:1rem}.uf-section-item:hover{box-shadow:0 1px 3px -1px var(--tui-base-08)}#submit-sidebar-btn-container{width:100%;bottom:0px;z-index:1;padding:1rem;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}#submit-sidebar-btn-container>*:not(:last-child){margin-right:1rem}#submit-sidebar-btn-container *{flex-grow:1}#uf-sections-container{display:flex;flex-direction:column;height:100%;padding:1rem;overflow-y:auto}#uf-sections-container>*:not(:last-child){margin-bottom:1rem}.uf-form-section-card{display:flex;flex-direction:row;align-content:center;justify-content:space-between;align-items:center;border:none;border-radius:8px;background-color:#e9e9e9;height:-moz-fit-content;height:fit-content;min-height:60px;padding:10px 15px;width:100%;max-width:350px;margin:0 auto}.uf-form-section-card>*:not(:last-child){margin-right:.5rem}.uf-section-item.locked{-webkit-user-select:none;user-select:none;cursor:not-allowed}.uf-form-section-card .uf-form-section-card-title{font-size:1.2em;text-align:left;line-height:1.25em}.uf-form-section-card .uf-form-section-card-status{width:30px;height:30px;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}.uf-form-section-card .uf-form-section-card-status .uf-form-section-card-status-img{width:30px;height:30px;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;border-radius:100%;color:#fff;font-weight:bold}.uf-form-section-card-status-img.completed{background-color:var(--tui-success-fill);padding:.25rem;border-radius:50%;color:#fff}.uf-form-section-card-status-img.edit{background-color:var(--tui-error-fill);padding:.25rem;border-radius:50%;color:#fff}.uf-form-section-card-status-img.locked{background-color:var(--tui-neutral-fill);padding:.25rem;border-radius:50%;color:#fff}#uf-progress{display:flex;padding:1rem;flex-direction:column;align-content:center;justify-content:center;align-items:stretch}#uf-progress>*:not(:last-child){margin-bottom:.5rem}#uf-progress-steps{font-size:1em;text-align:right;color:#3d3d3d}.uf-form-section-card-title{font-size:1em;font-weight:bold;color:#000}@media screen and (max-width: 600px){#sidebar-container{max-width:unset}}.kwikid-form-header{height:70px;z-index:6}.kwikid-form-header hr{width:calc(100% - 1rem);margin-left:auto;margin-right:auto}#uf-header{display:flex;flex-direction:row;align-content:center;align-items:center;justify-content:flex-start;padding:10px 20px;width:100%;max-width:calc(400px + 50vw + 2rem);margin:0 auto;height:70px;z-index:1}#uf-header>*:not(:last-child){margin-right:1rem}#uf-header #uf-header-goback-container{display:none}#uf-header #uf-header-goback-container:hover{border-radius:50%;background-color:#d3d3d3}#uf-header #uf-header-goback-container #uf-header-goback{width:100%;height:auto}#uf-header #uf-header-logo-container{display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}#uf-header #uf-header-logo-container #uf-header-logo.small-icon{width:100%;height:50px}#uf-header #uf-header-logo-container #uf-header-logo.large-icon{width:100%;height:50px}#uf-header #uf-header-title-container{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}#uf-header #uf-header-title-container>*:not(:last-child){margin-bottom:.5rem}#uf-header #uf-header-title-container #uf-header-title{font-size:1.4em;color:#121212}#uf-header #uf-header-title-container #uf-header-subtitle{font-size:1.2em;color:#121212}\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: i1.KwikUIProgressSegmentedComponent, selector: "kwikui-progress-segmented", inputs: ["colors", "id", "max", "size", "value"] }, { type: i1.KwikUIButtonComponent, selector: "kwikui-button", inputs: ["appearance", "class", "disabled", "icon", "iconRight", "id", "label", "shape", "showLoader", "size", "styles", "type"], outputs: ["onClick"] }, { type: i2.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "kwikuiSafeHtml": i1.KwikUISafeHtmlPipe } });
|
|
187
|
+
/** @nocollapse */ KwikIDFormsListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDFormsListComponent, selector: "kwikid-forms-list", inputs: { showFormFields: "showFormFields", userConfig: "userConfig", stepConfig: "stepConfig", activeFormConfig: "activeFormConfig", formsList: "formsList", formsListCompleted: "formsListCompleted", isMobileView: "isMobileView", isUnsavedData: "isUnsavedData" }, outputs: { getLogs: "getLogs", onClickSetActiveForm: "onClickSetActiveForm", onClickHideFormsList: "onClickHideFormsList", onClickSubmitForms: "onClickSubmitForms" }, usesOnChanges: true, ngImport: i0, template: "<div\n id=\"sidebar-container\"\n *ngIf=\"!loading\"\n>\n <div id=\"sidebar\">\n <div ngClass=\"kwikid-form-header\">\n <div id=\"uf-header\">\n <div id=\"uf-header-logo-container\">\n <img\n id=\"uf-header-logo\"\n src=\"{{ this.userConfig.theme.clientLogo }}\"\n [ngClass]=\"'large-icon'\"\n />\n </div>\n </div>\n <hr />\n </div>\n <div id=\"uf-progress\">\n <div id=\"uf-progress-steps\">\n {{ this.formsListCompleted.length }} / {{ this.formsListLength }} Steps\n Completed\n </div>\n <kwikui-progress-segmented\n [max]=\"this.formsListLength\"\n size=\"m\"\n [value]=\"this.formsListCompleted.length\"\n ></kwikui-progress-segmented>\n </div>\n <div id=\"uf-sections-container\">\n <ng-container *ngFor=\"let form of formsList; let i = index\">\n <ng-container [ngSwitch]=\"form.type\">\n <!-- HTML Content -->\n <ng-container *ngSwitchCase=\"'HTML'\">\n <div [innerHtml]=\"form.props.htmlContent | kwikuiSafeHtml\"></div>\n </ng-container>\n <!-- Type FORM -->\n <ng-container *ngSwitchCase=\"'FORM'\">\n <ng-container\n [ngTemplateOutlet]=\"FORM_BUTTON\"\n [ngTemplateOutletContext]=\"{\n form: form,\n activeFormConfig: activeFormConfig\n }\"\n >\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n <div id=\"submit-sidebar-btn-container\">\n <kwikui-button\n *ngIf=\"\n !stepConfig.props.formListProperties.footer.submitFormButton.hidden\n \"\n label=\"{{\n stepConfig.props.formListProperties.footer.submitFormButton.label\n }}\"\n type=\"submit\"\n styles=\"width: 100%\"\n (onClick)=\"handleOnSubmitForms($event)\"\n ></kwikui-button>\n </div>\n </div>\n</div>\n\n<ng-template\n #FORM_BUTTON\n let-form=\"form\"\n let-activeFormConfig=\"activeFormConfig\"\n>\n <div\n [class]=\"'uf-section-item'\"\n [class.completed]=\"form.status === 'completed' && !form.disabled\"\n [class.edit]=\"form.status === 'editable' && !form.disabled\"\n [class.locked]=\"form.status === 'locked' && form.disabled\"\n [class.active]=\"\n activeFormConfig !== undefined && form.key === activeFormConfig.key\n \"\n (click)=\"\n form.status === 'locked' && form.disabled\n ? undefined\n : handleOnClickSetActiveForm(form.key)\n \"\n >\n <div class=\"uf-form-section-card-title\">\n {{ form.props.title }} <span *ngIf=\"form?.required\">*</span>\n </div>\n <div class=\"uf-form-section-card-status\">\n <div\n *ngIf=\"form.status === 'completed' && !form.disabled\"\n class=\"uf-form-section-card-status-img completed\"\n >\n <tui-svg src=\"tuiIconCheckLarge\"></tui-svg>\n </div>\n <div\n *ngIf=\"form.status !== 'completed' && !form.disabled\"\n class=\"uf-form-section-card-status-img edit\"\n >\n <tui-svg src=\"tuiIconEdit\"></tui-svg>\n </div>\n <div\n *ngIf=\"form.status !== 'completed' && form.disabled\"\n class=\"uf-form-section-card-status-img locked\"\n >\n <tui-svg src=\"tuiIconLock\"></tui-svg>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: ["#sidebar-container{width:100%;height:100%;margin:0 auto;display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center}#sidebar{width:100%;height:100%;display:flex;flex-direction:column;align-content:center;justify-content:flex-start;align-items:stretch}.uf-section-item{width:100%;display:flex;flex-direction:row;align-items:center;justify-content:space-between;align-content:center;padding:1rem;cursor:pointer;box-shadow:0 1px 3px -1px var(--tui-base-05);border-radius:.5rem;background-color:var(--tui-base-02);position:relative}.uf-section-item>*:not(:last-child){margin-right:1rem}.uf-section-item:hover{box-shadow:0 1px 3px -1px var(--tui-base-08)}#submit-sidebar-btn-container{width:100%;bottom:0px;z-index:1;padding:1rem;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}#submit-sidebar-btn-container>*:not(:last-child){margin-right:1rem}#submit-sidebar-btn-container *{flex-grow:1}#uf-sections-container{display:flex;flex-direction:column;height:100%;padding:1rem;overflow-y:auto}#uf-sections-container>*:not(:last-child){margin-bottom:1rem}.uf-form-section-card{display:flex;flex-direction:row;align-content:center;justify-content:space-between;align-items:center;border:none;border-radius:8px;background-color:#e9e9e9;height:-moz-fit-content;height:fit-content;min-height:60px;padding:10px 15px;width:100%;max-width:350px;margin:0 auto}.uf-form-section-card>*:not(:last-child){margin-right:.5rem}.uf-section-item.locked{-webkit-user-select:none;user-select:none;cursor:not-allowed}.uf-form-section-card .uf-form-section-card-title{font-size:1.2em;text-align:left;line-height:1.25em}.uf-form-section-card .uf-form-section-card-status{width:30px;height:30px;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}.uf-form-section-card .uf-form-section-card-status .uf-form-section-card-status-img{width:30px;height:30px;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;border-radius:100%;color:#fff;font-weight:bold}.uf-form-section-card-status-img.completed{background-color:var(--tui-success-fill);padding:.25rem;border-radius:50%;color:#fff}.uf-form-section-card-status-img.edit{background-color:var(--tui-error-fill);padding:.25rem;border-radius:50%;color:#fff}.uf-form-section-card-status-img.locked{background-color:var(--tui-neutral-fill);padding:.25rem;border-radius:50%;color:#fff}#uf-progress{display:flex;padding:1rem;flex-direction:column;align-content:center;justify-content:center;align-items:stretch}#uf-progress>*:not(:last-child){margin-bottom:.5rem}#uf-progress-steps{font-size:1em;text-align:right;color:#3d3d3d}.uf-form-section-card-title{font-size:1em;font-weight:bold;color:#000}@media screen and (max-width: 600px){#sidebar-container{max-width:unset}}.kwikid-form-header{height:70px;z-index:6}.kwikid-form-header hr{width:calc(100% - 1rem);margin-left:auto;margin-right:auto}#uf-header{display:flex;flex-direction:row;align-content:center;align-items:center;justify-content:flex-start;padding:10px 20px;width:100%;max-width:calc(400px + 50vw + 2rem);margin:0 auto;height:70px;z-index:1}#uf-header>*:not(:last-child){margin-right:1rem}#uf-header #uf-header-goback-container{display:none}#uf-header #uf-header-goback-container:hover{border-radius:50%;background-color:#d3d3d3}#uf-header #uf-header-goback-container #uf-header-goback{width:100%;height:auto}#uf-header #uf-header-logo-container{display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}#uf-header #uf-header-logo-container #uf-header-logo.small-icon{width:100%;height:50px}#uf-header #uf-header-logo-container #uf-header-logo.large-icon{width:100%;height:50px}#uf-header #uf-header-title-container{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}#uf-header #uf-header-title-container>*:not(:last-child){margin-bottom:.5rem}#uf-header #uf-header-title-container #uf-header-title{font-size:1.4em;color:#121212}#uf-header #uf-header-title-container #uf-header-subtitle{font-size:1.2em;color:#121212}\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: i1.KwikUIProgressSegmentedComponent, selector: "kwikui-progress-segmented", inputs: ["colors", "id", "max", "size", "value"] }, { type: i1.KwikUIButtonComponent, selector: "kwikui-button", inputs: ["appearance", "class", "disabled", "icon", "iconRight", "id", "label", "shape", "showLoader", "size", "styles", "type", "pseudoHover"], outputs: ["onClick"] }, { type: i2.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "kwikuiSafeHtml": i1.KwikUISafeHtmlPipe } });
|
|
188
188
|
__decorate([
|
|
189
189
|
logMethod
|
|
190
190
|
], KwikIDFormsListComponent.prototype, "ngOnChanges", null);
|
|
@@ -33,6 +33,7 @@ export class KwikIDFormsRendererComponent {
|
|
|
33
33
|
this.onClickSubmit = new EventEmitter();
|
|
34
34
|
this.getFormData = new EventEmitter();
|
|
35
35
|
this.onClickApiCall = new EventEmitter();
|
|
36
|
+
this.onClickViewFile = new EventEmitter();
|
|
36
37
|
this.getLogs = new EventEmitter();
|
|
37
38
|
this.onClickFormFieldButton = new EventEmitter();
|
|
38
39
|
this.loading = false;
|
|
@@ -616,6 +617,9 @@ export class KwikIDFormsRendererComponent {
|
|
|
616
617
|
handleOnClickApiCall(e) {
|
|
617
618
|
this.onClickApiCall.emit(e);
|
|
618
619
|
}
|
|
620
|
+
handleOnClickViewFile(e) {
|
|
621
|
+
this.onClickViewFile.emit(e);
|
|
622
|
+
}
|
|
619
623
|
handleOnClickFormFieldButton(e) {
|
|
620
624
|
this.onClickFormFieldButton.emit(e);
|
|
621
625
|
}
|
|
@@ -858,7 +862,7 @@ export class KwikIDFormsRendererComponent {
|
|
|
858
862
|
}
|
|
859
863
|
}
|
|
860
864
|
/** @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 });
|
|
861
|
-
/** @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", buttonClickResponse: "buttonClickResponse" }, outputs: { onClickSubmit: "onClickSubmit", getFormData: "getFormData", onClickApiCall: "onClickApiCall", getLogs: "getLogs", onClickFormFieldButton: "onClickFormFieldButton" }, 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 (getLogs)=\"handleGetLogs($event)\"\n (onClickSetActiveForm)=\"\n this.handleOnClickSetActiveForm($event, 'BUTTON_CLICK')\n \"\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 [stepConfig]=\"this.stepConfig\"\n [popupFormCallback]=\"this.popupFormCallback\"\n [apiCallResponse]=\"this.apiCallResponse\"\n [buttonClickResponse]=\"this.buttonClickResponse\"\n (onClickFormFieldButton)=\"handleOnClickFormFieldButton($event)\"\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 (getLogs)=\"handleGetLogs($event)\"\n (onClickSaveForm)=\"\n this.handleOnClickSaveForm($event, 'FORM', undefined)\n \"\n ></kwikid-form-view>\n </div>\n </div>\n</div>\n\n<kwikui-loader></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 [stepConfig]=\"this.stepConfig\"\n [isMobileView]=\"this.isMobileView\"\n [apiCallResponse]=\"this.apiCallResponse\"\n [buttonClickResponse]=\"this.buttonClickResponse\"\n (onClickFormFieldButton)=\"handleOnClickFormFieldButton($event)\"\n (getSavedState)=\"handleGetUnsavedState($event)\"\n (onClickApiCall)=\"handleOnClickApiCall($event)\"\n (getLogs)=\"handleGetLogs($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 [stepConfig]=\"this.stepConfig\"\n [isMobileView]=\"this.isMobileView\"\n [apiCallResponse]=\"this.apiCallResponse\"\n [buttonClickResponse]=\"this.buttonClickResponse\"\n (onClickFormFieldButton)=\"handleOnClickFormFieldButton($event)\"\n (getSavedState)=\"handleGetUnsavedState($event)\"\n (onClickApiCall)=\"handleOnClickApiCall($event)\"\n (getLogs)=\"handleGetLogs($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:min(50%,600px);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: ["getLogs", "onClickSetActiveForm", "onClickHideFormsList", "onClickSubmitForms"] }, { type: i3.KwikIDFormViewComponent, selector: "kwikid-form-view", inputs: ["allFormsData", "apiCallResponse", "buttonClickResponse", "formConfig", "formData", "isMobileView", "popupFormCallback", "userConfig", "stepConfig"], outputs: ["getLogs", "getUnsavedDataState", "onActionShowPopupForm", "onClickApiCall", "onClickFormFieldButton", "onClickGoBack", "onClickSaveForm", "onClickViewForms"] }, { type: i1.KwikUILoaderComponent, selector: "kwikui-loader" }, { type: i4.TuiPushComponent, selector: "tui-push", inputs: ["heading", "type", "lines", "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: [
|
|
865
|
+
/** @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", buttonClickResponse: "buttonClickResponse" }, outputs: { onClickSubmit: "onClickSubmit", getFormData: "getFormData", onClickApiCall: "onClickApiCall", onClickViewFile: "onClickViewFile", getLogs: "getLogs", onClickFormFieldButton: "onClickFormFieldButton" }, 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 (getLogs)=\"handleGetLogs($event)\"\n (onClickSetActiveForm)=\"\n this.handleOnClickSetActiveForm($event, 'BUTTON_CLICK')\n \"\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 [stepConfig]=\"this.stepConfig\"\n [popupFormCallback]=\"this.popupFormCallback\"\n [apiCallResponse]=\"this.apiCallResponse\"\n [buttonClickResponse]=\"this.buttonClickResponse\"\n (onClickFormFieldButton)=\"handleOnClickFormFieldButton($event)\"\n (getUnsavedDataState)=\"handleGetUnsavedState($event)\"\n (onClickApiCall)=\"handleOnClickApiCall($event)\"\n (onClickViewFile)=\"handleOnClickViewFile($event)\"\n (onActionShowPopupForm)=\"\n this.handleOnActionShowPopupForm($event, content)\n \"\n (onClickGoBack)=\"this.handleOnClickGoBack($event)\"\n (onClickViewForms)=\"this.handleOnClickViewForms($event)\"\n (getLogs)=\"handleGetLogs($event)\"\n (onClickSaveForm)=\"\n this.handleOnClickSaveForm($event, 'FORM', undefined)\n \"\n ></kwikid-form-view>\n </div>\n </div>\n</div>\n\n<kwikui-loader></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 [stepConfig]=\"this.stepConfig\"\n [isMobileView]=\"this.isMobileView\"\n [apiCallResponse]=\"this.apiCallResponse\"\n [buttonClickResponse]=\"this.buttonClickResponse\"\n (onClickFormFieldButton)=\"handleOnClickFormFieldButton($event)\"\n (getSavedState)=\"handleGetUnsavedState($event)\"\n (onClickApiCall)=\"handleOnClickApiCall($event)\"\n (getLogs)=\"handleGetLogs($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 [stepConfig]=\"this.stepConfig\"\n [isMobileView]=\"this.isMobileView\"\n [apiCallResponse]=\"this.apiCallResponse\"\n [buttonClickResponse]=\"this.buttonClickResponse\"\n (onClickFormFieldButton)=\"handleOnClickFormFieldButton($event)\"\n (getSavedState)=\"handleGetUnsavedState($event)\"\n (onClickApiCall)=\"handleOnClickApiCall($event)\"\n (getLogs)=\"handleGetLogs($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:min(50%,600px);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: ["getLogs", "onClickSetActiveForm", "onClickHideFormsList", "onClickSubmitForms"] }, { type: i3.KwikIDFormViewComponent, selector: "kwikid-form-view", inputs: ["allFormsData", "apiCallResponse", "buttonClickResponse", "formConfig", "formData", "isMobileView", "popupFormCallback", "userConfig", "stepConfig"], outputs: ["getLogs", "getUnsavedDataState", "onActionShowPopupForm", "onClickApiCall", "onClickViewFile", "onClickFormFieldButton", "onClickGoBack", "onClickSaveForm", "onClickViewForms"] }, { type: i1.KwikUILoaderComponent, selector: "kwikui-loader" }, { type: i4.TuiPushComponent, selector: "tui-push", inputs: ["heading", "type", "lines", "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: [
|
|
862
866
|
trigger("panelInOut", [
|
|
863
867
|
transition(":enter", [
|
|
864
868
|
style({ transform: "translateY(100%)" }),
|
|
@@ -989,9 +993,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
989
993
|
type: Output
|
|
990
994
|
}], onClickApiCall: [{
|
|
991
995
|
type: Output
|
|
996
|
+
}], onClickViewFile: [{
|
|
997
|
+
type: Output
|
|
992
998
|
}], getLogs: [{
|
|
993
999
|
type: Output
|
|
994
1000
|
}], onClickFormFieldButton: [{
|
|
995
1001
|
type: Output
|
|
996
1002
|
}], triggerLogs: [], toggleLoader: [], fetchFormConfig: [], convertFormListConfig: [], assignSequenceNoToForm: [], findCompletedFormsList: [], markFormInFormsListAsCompleted: [], markFormInFormsListAsDisabled: [], filterAllFormsData: [], checkIfFormsStatusCompleted: [], findActiveFormConfig: [], updateFormsList: [], showPreview: [], formHide: [], formShow: [], findFormsListLength: [], handleOnClickSetActiveForm: [], handleGetUnsavedState: [], handleOnClickFormFieldButton: [], handleOnActionShowPopupForm: [], handleOnClickSaveForm: [], handleOnClickGoBack: [], handleOnClickSubmitForms: [], handleGetLogs: [] } });
|
|
997
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvcmVuZGVyZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xFLE9BQU8sRUFBb0IsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxJQUFJLEVBQ0osTUFBTSxFQUdOLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGVBQWUsRUFDZixTQUFTLEVBQ1QsWUFBWSxFQUNaLG9CQUFvQixFQUNyQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDbEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFFM0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FB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LEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDOzZCQUN2RCxDQUFDO3lCQUNILENBQUM7cUJBQ0g7aUJBQ0Y7OzBCQXVHSSxNQUFNOzJCQUFDLHVCQUF1Qjs7MEJBRzlCLE1BQU07MkJBQUMsZ0JBQWdCOzRDQXRHMUIsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF3QmhDLE9BQU87c0JBRGYsU0FBUzt1QkFBQyxTQUFTO2dCQUtwQixVQUFVO3NCQURULEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTixjQUFjO3NCQURiLEtBQUs7Z0JBSU4sZUFBZTtzQkFEZCxLQUFLO2dCQUlOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFJTixhQUFhO3NCQURaLE1BQU07Z0JBSVAsV0FBVztzQkFEVixNQUFNO2dCQUlQLGNBQWM7c0JBRGIsTUFBTTtnQkFJUCxPQUFPO3NCQUROLE1BQU07Z0JBSVAsc0JBQXNCO3NCQURyQixNQUFNO2dCQW9HUCxXQUFXLE1BS1gsWUFBWSxNQVlOLGVBQWUsTUE4Q3JCLHFCQUFxQixNQThGckIsc0JBQXNCLE1BZ0J0QixzQkFBc0IsTUFpQnRCLDhCQUE4QixNQXlCOUIsNkJBQTZCLE1BaUM3QixrQkFBa0IsTUFzQmxCLDJCQUEyQixNQXFCM0Isb0JBQW9CLE1BWWQsZUFBZSxNQThFckIsV0FBVyxNQWdDWCxRQUFRLE1BT1IsUUFBUSxNQTZDUixtQkFBbUIsTUE2QmIsMEJBQTBCLE1BbUloQyxxQkFBcUIsTUFTckIsNEJBQTRCLE1BSzVCLDJCQUEyQixNQTBGM0IscUJBQXFCLE1Bb0RyQixtQkFBbUIsTUFtRWIsd0JBQXdCLE1BbUM5QixhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIkB0YWlnYS11aS9hZGRvbi1wcmV2aWV3XCI7XG5pbXBvcnQgeyBUdWlEaWFsb2dDb250ZXh0LCBUdWlEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIkB0YWlnYS11aS9jb3JlXCI7XG5pbXBvcnQge1xuICBBY3Rpb24sXG4gIENvbmRpdGlvbixcbiAgUnVsZSxcbiAgU291cmNlLFxuICBUQWN0aW9uLFxuICBUUnVsZSxcbiAgY2hlY2tPYmplY3RLZXlFeGlzdHMsXG4gIGdldE9iamVjdERlZXBDb3B5LFxuICBpc0VtcHR5VmFsdWUsXG4gIGlzTm90RW1wdHlWYWx1ZSxcbiAgbG9nTWV0aG9kLFxuICBtZXJnZU9iamVjdHMsXG4gIHNldFZhbHVlVG9PYmplY3RQYXRoXG59IGZyb20gXCJrd2lraWQtdG9vbGtpdFwiO1xuaW1wb3J0IHsgS3dpa1VJTG9hZGVyU2VydmljZSB9IGZyb20gXCJrd2lrdWlcIjtcbmltcG9ydCB7IENvbnZlcnRlciB9IGZyb20gXCIuL2NvbmZpZy1jb252ZXJ0ZXIvY29uZmlnLWNvbnZlcnRlclwiO1xuaW1wb3J0IHsgRUFjdGlvbktleSB9IGZyb20gXCIuL2Zvcm0tdmlldy9kZWZpbml0aW9ucy9mb3JtLXZpZXcuYWN0aW9ucy5kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBFRm9ybVZpZXdHb0JhY2tNb2RlIH0gZnJvbSBcIi4vZm9ybS12aWV3L2RlZmluaXRpb25zL2Zvcm0tdmlldy5jb21tb25zLmRlZmluaXRpb25cIjtcbmltcG9ydCB7IFRUcmlnZ2VyIH0gZnJvbSBcIi4vZm9ybS12aWV3L2RlZmluaXRpb25zL2Zvcm0tdmlldy50cmlnZ2Vycy5kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBFRm9ybXNMaXN0U3RhdHVzIH0gZnJvbSBcIi4vZm9ybXMtbGlzdC9mb3Jtcy1saXN0LmRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyBFUmVuZGVyZXJBY3Rpb25LZXkgfSBmcm9tIFwiLi9yZW5kZXJlci5hY3Rpb25zLmRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyBFRm9ybVR5cGUsIEVMb2dFdmVudFR5cGUgfSBmcm9tIFwiLi9yZW5kZXJlci5kZWZpbml0aW9uc1wiO1xuaW1wb3J0IHsgZm9ybWF0RXZlbnRMb2dzLCBnZXRGb3JtQ29uZmlnQnlLZXkgfSBmcm9tIFwiLi9yZW5kZXJlci5oZWxwZXJcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImt3aWtpZC1mb3Jtcy1yZW5kZXJlclwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3JlbmRlcmVyLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9yZW5kZXJlci5jb21wb25lbnQuc2Nzc1wiLCBcIi4vc2hhcmVkLnNjc3NcIl0sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKFwicGFuZWxJbk91dFwiLCBbXG4gICAgICB0cmFuc2l0aW9uKFwiOmVudGVyXCIsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06IFwidHJhbnNsYXRlWSgxMDAlKVwiIH0pLFxuICAgICAgICBhbmltYXRlKDE1MClcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbihcIjpsZWF2ZVwiLCBbXG4gICAgICAgIGFuaW1hdGUoMTAwLCBzdHlsZSh7IHRyYW5zZm9ybTogXCJ0cmFuc2xhdGVZKDEwMCUpXCIgfSkpXG4gICAgICBdKVxuICAgIF0pXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgS3dpa0lERm9ybXNSZW5kZXJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLy8gVGhlIGZpbmFsIHZhbHVlIHNob3VsZCBiZSBwcm92aWRlZCB0byBzZXJ2aWNlLCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGluIGFsbCBjb21wb25lbnRzXG4gIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6cmVzaXplXCIsIFtcIiRldmVudFwiXSlcbiAgd2luZG93UmVzaXplV2F0Y2hlcigpIHtcbiAgICBpZiAodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDwgNjAwKSB7XG4gICAgICBpZiAodGhpcy5zaG93Rm9ybSkge1xuICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNob3dGb3JtKSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5pc01vYmlsZVZpZXcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBAVmlld0NoaWxkKFwicHJldmlld1wiKVxuICByZWFkb25seSBwcmV2aWV3OiBUZW1wbGF0ZVJlZjxUdWlEaWFsb2dDb250ZXh0PHZvaWQ+PjtcbiAgcHJpdmF0ZSBwcmV2aWV3RGlhbG9nUmVmOiBhbnk7XG5cbiAgQElucHV0KClcbiAgc3RlcENvbmZpZzogYW55O1xuXG4gIEBJbnB1dCgpXG4gIHVzZXJDb25maWc6IGFueTtcblxuICBASW5wdXQoKVxuICBmb3Jtc0RhdGE6IGFueSA9IHt9O1xuXG4gIEBJbnB1dCgpXG4gIGFjdGl2ZUZvcm1EYXRhOiBhbnkgPSB7fTtcblxuICBASW5wdXQoKVxuICBhcGlDYWxsUmVzcG9uc2U6IGFueSA9IHt9O1xuXG4gIEBJbnB1dCgpXG4gIGJ1dHRvbkNsaWNrUmVzcG9uc2U6IGFueSA9IHt9O1xuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrU3VibWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBnZXRGb3JtRGF0YTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KClcbiAgb25DbGlja0FwaUNhbGw6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGdldExvZ3M6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2xpY2tGb3JtRmllbGRCdXR0b246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHNob3dFcnJvck5vdGlmaWNhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICB0b2dnbGVFcnJvck5vdGlmaWNhdGlvbihzaG93KSB7XG4gICAgdGhpcy5zaG93RXJyb3JOb3RpZmljYXRpb24gPSBzaG93O1xuICB9XG5cbiAgYWN0aXZlUG9wdXBGb3JtRGF0YTogYW55ID0ge307XG4gIHBvcHVwRm9ybUNhbGxiYWNrOiBhbnkgPSB7fTtcbiAgYWN0aXZlRm9ybUNvbmZpZzogYW55O1xuICBhY3RpdmVGb3JtRmllbGRzOiBhbnlbXTtcbiAgYWxsRm9ybXNEYXRhOiBhbnkgPSB7fTtcbiAgYWxsRm9ybXNTdWJtaXR0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZm9ybXNMaXN0OiBhbnlbXSA9IFtdO1xuICBmb3Jtc0xpc3RDb21wbGV0ZWQ6IHN0cmluZ1tdO1xuICBpc01vYmlsZVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJldmlld1Byb3BlcnRpZXM6IGFueSA9IHtcbiAgICBodG1sOiB7XG4gICAgICBiZWZvcmU6IFwiXCIsXG4gICAgICBhZnRlcjogXCJcIlxuICAgIH0sXG4gICAgaWZyYW1lOiB7XG4gICAgICBzcmM6IFwiXCIsXG4gICAgICB0aXRsZTogXCJcIlxuICAgIH0sXG4gICAgcG9wdXBGb3JtS2V5OiBcIlwiLFxuICAgIHRpdGxlOiBcIlwiLFxuICAgIHVuYXZhaWxhYmxlOiBmYWxzZVxuICB9O1xuICBwb3B1cEZvcm1Db25maWc6IGFueSA9IHt9O1xuXG4gIC8vIGRpc3BsYXkgZm9ybXMgYW5kIGxpc3QgY29uZGl0aW9uYWxseVxuICBzaG93Rm9ybTogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93Rm9ybUZpZWxkczogYm9vbGVhbiA9IHRydWU7XG4gIHNob3dGb3JtU2VjdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xuICBpc1Vuc2F2ZWREYXRhOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBob3N0RWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChUdWlQcmV2aWV3RGlhbG9nU2VydmljZSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByZXZpZXdEaWFsb2dTZXJ2aWNlOiBUdWlQcmV2aWV3RGlhbG9nU2VydmljZSxcbiAgICBwdWJsaWMgbG9hZGVyU2VydmljZTogS3dpa1VJTG9hZGVyU2VydmljZSxcbiAgICBASW5qZWN0KFR1aURpYWxvZ1NlcnZpY2UpIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nczogVHVpRGlhbG9nU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy50b2dnbGVMb2FkZXIodHJ1ZSk7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGZvcm1TdGVwS2V5ID0gdGhpcy5zdGVwQ29uZmlnPy5mb3JtPy5rZXkgPz8gdW5kZWZpbmVkO1xuXG4gICAgaWYgKFxuICAgICAgZm9ybVN0ZXBLZXkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy51c2VyQ29uZmlnLnVzZXJGb3JtRmllbGRzLCBmb3JtU3RlcEtleSlcbiAgICApIHtcbiAgICAgIHRoaXMuZm9ybXNMaXN0ID0gdGhpcy51c2VyQ29uZmlnLnVzZXJGb3JtRmllbGRzW2Zvcm1TdGVwS2V5XTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51c2VyQ29uZmlnLnVzZXJGb3JtRmllbGRzKSkge1xuICAgICAgdGhpcy5mb3Jtc0xpc3QgPSB0aGlzLnVzZXJDb25maWcudXNlckZvcm1GaWVsZHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHVzZXJGb3JtRmllbGRzIGRvZXNuJ3QgaGF2ZSBhIGZvcm0gZGVmaW5lZCB3aXRoIGtleTogJHtmb3JtU3RlcEtleX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm1zKFwiT05fSU5JVFwiKTtcbiAgICB0aGlzLnRvZ2dsZUxvYWRlcihmYWxzZSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgdmVyaWZ5Q2hhbmdlID0gKHByb3A6IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuIGNoYW5nZXMuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgIWNoYW5nZXNbcHJvcF0uZmlyc3RDaGFuZ2U7XG4gICAgfTtcbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwidXNlckNvbmZpZ1wiKSkge1xuICAgICAgdGhpcy51c2VyQ29uZmlnID0gY2hhbmdlcy51c2VyQ29uZmlnLmN1cnJlbnRWYWx1ZTtcbiAgICAgIHRoaXMudG9nZ2xlTG9hZGVyKGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcInN0ZXBDb25maWdcIikpIHtcbiAgICAgIHRoaXMuc3RlcENvbmZpZyA9IGNoYW5nZXMuc3RlcENvbmZpZy5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLnRvZ2dsZUxvYWRlcihmYWxzZSk7XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJmb3Jtc0RhdGFcIikpIHtcbiAgICAgIHRoaXMuZm9ybXNEYXRhID0gY2hhbmdlcy5mb3Jtc0RhdGEuY3VycmVudFZhbHVlO1xuXG4gICAgICB0aGlzLmluaXRpYWxpemVGb3JtcyhcIk9OX0NIQU5HRVwiKTtcbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImFwaUNhbGxSZXNwb25zZVwiKSkge1xuICAgICAgdGhpcy5hcGlDYWxsUmVzcG9uc2UgPSBjaGFuZ2VzLmFwaUNhbGxSZXNwb25zZS5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLnRvZ2dsZUxvYWRlcihmYWxzZSk7XG4gICAgfVxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJidXR0b25DbGlja1Jlc3BvbnNlXCIpKSB7XG4gICAgICB0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2UgPSBjaGFuZ2VzLmJ1dHRvbkNsaWNrUmVzcG9uc2UuY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy50b2dnbGVMb2FkZXIoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgdHJpZ2dlckxvZ3MoZXZlbnRUeXBlOiBFTG9nRXZlbnRUeXBlLCBsb2dzOiBhbnkpIHtcbiAgICB0aGlzLmdldExvZ3MuZW1pdChmb3JtYXRFdmVudExvZ3MoZXZlbnRUeXBlLCB0aGlzLnN0ZXBDb25maWcsIGxvZ3MpKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgdG9nZ2xlTG9hZGVyKGxvYWRlcikge1xuICAgIGlmIChsb2FkZXIpIHtcbiAgICAgIHRoaXMubG9hZGVyU2VydmljZS5zaG93KHtcbiAgICAgICAgZnVsbHNjcmVlbjogdHJ1ZSxcbiAgICAgICAgbG9hZGVyVGV4dDogXCJQbGVhc2Ugd2FpdFwiXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2FkZXJTZXJ2aWNlLmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGZldGNoRm9ybUNvbmZpZyh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IG1ldGhvZDogXCJHRVRcIiB9KTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgaW5pdGlhbGl6ZUZvcm1zKGV2ZW50VHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy50b2dnbGVMb2FkZXIodHJ1ZSk7XG5cbiAgICB0aGlzLmFsbEZvcm1zRGF0YSA9IHRoaXMuZm9ybXNEYXRhO1xuXG4gICAgYXdhaXQgdGhpcy51cGRhdGVGb3Jtc0xpc3QoKTtcblxuICAgIGlmIChcbiAgICAgIGV2ZW50VHlwZSA9PT0gXCJPTl9DSEFOR0VcIiAmJlxuICAgICAgdGhpcy5maW5kRm9ybXNMaXN0TGVuZ3RoKHRoaXMuZm9ybXNMaXN0KSA9PT0gMVxuICAgICkge1xuICAgICAgdGhpcy5oYW5kbGVPbkNsaWNrU3VibWl0Rm9ybXMobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlUmVzaXplKHRoaXMuZm9ybXNMaXN0KTtcblxuICAgICAgaWYgKGlzTm90RW1wdHlWYWx1ZSh0aGlzLmFjdGl2ZUZvcm1Db25maWcpKSB7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmFjdGl2ZUZvcm1Db25maWcsIFwidHlwZVwiKSkge1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZUZvcm1Db25maWcudHlwZSAhPT0gRUZvcm1UeXBlLkhUTUwpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlT25DbGlja1NldEFjdGl2ZUZvcm0oXG4gICAgICAgICAgICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZy5rZXksXG4gICAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVPbkNsaWNrU2V0QWN0aXZlRm9ybShcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZy5rZXksXG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnRvZ2dsZUxvYWRlcihmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBjb252ZXJ0Rm9ybUxpc3RDb25maWcoZm9ybXNMaXN0OiBhbnlbXSk6IGFueVtdIHtcbiAgICBjb25zdCBjb252ZXJ0Rm9ybUxpc3RDb25maWdUeXBlRm9ybSA9IChmb3JtOiBhbnkpID0+IHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImZvcm1Db250ZW50XCIpKSB7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLmZvcm1Db250ZW50LCBcInVybFwiKSkge1xuICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcInByb3BzLnVybFwiLCBmb3JtLmZvcm1Db250ZW50LnVybCk7XG4gICAgICAgICAgZGVsZXRlIGZvcm1bXCJmb3JtQ29udGVudFwiXVtcInVybFwiXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybS5mb3JtQ29udGVudCwgXCJwYXRoXCIpKSB7XG4gICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKFxuICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgIFwicHJvcHMucGF0aFwiLFxuICAgICAgICAgICAgZm9ybS5mb3JtQ29udGVudC5wYXRoXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkZWxldGUgZm9ybVtcImZvcm1Db250ZW50XCJdW1wicGF0aFwiXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzRW1wdHlWYWx1ZShmb3JtLmZvcm1Db250ZW50KSkge1xuICAgICAgICBkZWxldGUgZm9ybVtcImZvcm1Db250ZW50XCJdO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwidGl0bGVcIikpIHtcbiAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwicHJvcHMudGl0bGVcIiwgZm9ybS50aXRsZSk7XG4gICAgICAgIGRlbGV0ZSBmb3JtW1widGl0bGVcIl07XG4gICAgICB9XG4gICAgICBpZiAoIWNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGZvcm0uaGlkZGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIWNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiZGlzYWJsZWRcIikpIHtcbiAgICAgICAgZm9ybS5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcInJlcXVpcmVkXCIpKSB7XG4gICAgICAgIGZvcm0ucmVxdWlyZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImRlcGVuZGVudE9uXCIpKSB7XG4gICAgICAgIGZvcm0uZGVwZW5kZW50T24gPSBbXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZvcm07XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnZlcnRGb3JtTGlzdENvbmZpZ1R5cGVIdG1sID0gKGZvcm06IGFueSkgPT4ge1xuICAgICAgaWYgKGZvcm0udHlwZSA9PT0gXCJodG1sXCIpIHtcbiAgICAgICAgZm9ybS50eXBlID0gRUZvcm1UeXBlLkhUTUw7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImh0bWxDb250ZW50XCIpKSB7XG4gICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJwcm9wc1wiKSkge1xuICAgICAgICAgIGZvcm0ucHJvcHMgPSB7XG4gICAgICAgICAgICBodG1sQ29udGVudDogZm9ybS5odG1sQ29udGVudFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIGZvcm1bXCJodG1sQ29udGVudFwiXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJwcm9wc1wiKSkge1xuICAgICAgICAgIGZvcm0ucHJvcHMgPSB7XG4gICAgICAgICAgICBodG1sQ29udGVudDogXCJcIlxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcInRpdGxlXCIpKSB7XG4gICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcInByb3BzLnRpdGxlXCIsIGZvcm0udGl0bGUpO1xuICAgICAgICBkZWxldGUgZm9ybVtcInRpdGxlXCJdO1xuICAgICAgfVxuICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICBmb3JtLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm07XG4gICAgfTtcblxuICAgIHJldHVybiBmb3Jtc0xpc3QubWFwKChmb3JtKSA9PiB7XG4gICAgICBpZiAoIWNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwidHlwZVwiKSkge1xuICAgICAgICBmb3JtLnR5cGUgPSBcIkZPUk1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcInR5cGVcIikpIHtcbiAgICAgICAgaWYgKGZvcm0udHlwZSA9PT0gRUZvcm1UeXBlLkZPUk0pIHtcbiAgICAgICAgICBmb3JtID0gY29udmVydEZvcm1MaXN0Q29uZmlnVHlwZUZvcm0oZm9ybSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybS50eXBlID09PSBFRm9ybVR5cGUuSFRNTCB8fCBmb3JtLnR5cGUgPT09IFwiaHRtbFwiKSB7XG4gICAgICAgICAgZm9ybSA9IGNvbnZlcnRGb3JtTGlzdENvbmZpZ1R5cGVIdG1sKGZvcm0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3JtO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE5PVEU6IFRvIGJlIGRlcHJlY2F0ZWQuXG4gICAqIFdoeSA/IFdpbGwgYmUgZGlyZWN0bHkgYXNzaWduZWQgd2hpbGUgZXhlY3V0aW5nICdjaGFrcmEnIGZvciBkZWZhdWx0IGZvcm0gY29uZmlnLlxuICAgKiBAcGFyYW0gZm9ybXNMaXN0IGFueVtdXG4gICAqIEBwYXJhbSBmb3Jtc0xpc3RDb21wbGV0ZWQgc3RyaW5nW11cbiAgICogQHJldHVybnMgYW55W11cbiAgICovXG4gIEBsb2dNZXRob2RcbiAgYXNzaWduU2VxdWVuY2VOb1RvRm9ybShmb3Jtc0xpc3Q6IGFueVtdKTogYW55W10ge1xuICAgIGxldCBzZXF1ZW5jZU5vID0gMTtcbiAgICBmb3IgKGxldCBmb3JtIG9mIGZvcm1zTGlzdCkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4gJiYgZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCkge1xuICAgICAgICAgIGZvcm0uc2VxdWVuY2VObyA9IHNlcXVlbmNlTm8rKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZm9ybVtcInNlcXVlbmNlTm9cIl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybXNMaXN0O1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaW5kQ29tcGxldGVkRm9ybXNMaXN0KGFsbEZvcm1zRGF0YTogYW55KTogc3RyaW5nW10ge1xuICAgIGxldCBmb3Jtc0xpc3RDb21wbGV0ZWQ6IHN0cmluZ1tdID0gW107XG5cbiAgICBPYmplY3Qua2V5cyhhbGxGb3Jtc0RhdGEpLm1hcCgoZm9ybUtleSkgPT4ge1xuICAgICAgZm9ybXNMaXN0Q29tcGxldGVkLnB1c2goZm9ybUtleSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZm9ybXNMaXN0Q29tcGxldGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIE5PVEU6IFRvIGJlIGRlcHJlY2F0ZWQuIFdoeSA/IFdpbGwgYmUgcmVwbGFjZWQgYnkgJ2NoYWtyYScuXG4gICAqIEBwYXJhbSBmb3Jtc0xpc3QgYW55W11cbiAgICogQHBhcmFtIGZvcm1zTGlzdENvbXBsZXRlZCBzdHJpbmdbXVxuICAgKiBAcmV0dXJucyBhbnlbXVxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBtYXJrRm9ybUluRm9ybXNMaXN0QXNDb21wbGV0ZWQoXG4gICAgZm9ybXNMaXN0OiBhbnlbXSxcbiAgICBmb3Jtc0xpc3RDb21wbGV0ZWQ6IHN0cmluZ1tdXG4gICk6IGFueVtdIHtcbiAgICBmb3IgKGxldCBmb3JtIG9mIGZvcm1zTGlzdCkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4gJiYgZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCkge1xuICAgICAgICAgIGlmIChmb3Jtc0xpc3RDb21wbGV0ZWQuaW5jbHVkZXMoZm9ybS5rZXkpKSB7XG4gICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJzdGF0dXNcIiwgXCJjb21wbGV0ZWRcIik7XG4gICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJkaXNhYmxlZFwiLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1zTGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBOT1RFOiBUbyBiZSBkZXByZWNhdGVkLiBXaHkgPyBXaWxsIGJlIHJlcGxhY2VkIGJ5ICdjaGFrcmEnLlxuICAgKiBAcGFyYW0gZm9ybXNMaXN0IGFueVtdXG4gICAqIEBwYXJhbSBmb3Jtc0xpc3RDb21wbGV0ZWQgc3RyaW5nW11cbiAgICogQHJldHVybnMgYW55W11cbiAgICovXG4gIEBsb2dNZXRob2RcbiAgbWFya0Zvcm1JbkZvcm1zTGlzdEFzRGlzYWJsZWQoXG4gICAgZm9ybXNMaXN0OiBhbnlbXSxcbiAgICBmb3Jtc0xpc3RDb21wbGV0ZWQ6IHN0cmluZ1tdXG4gICk6IGFueVtdIHtcbiAgICBmb3IgKGxldCBmb3JtIG9mIGZvcm1zTGlzdCkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4gJiYgZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCkge1xuICAgICAgICAgIGlmIChmb3JtLnN0YXR1cyAhPT0gXCJjb21wbGV0ZWRcIikge1xuICAgICAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiZGVwZW5kZW50T25cIikpIHtcbiAgICAgICAgICAgICAgY29uc3QgaXNEZXBlbmRlbnQgPSBmb3JtLmRlcGVuZGVudE9uLmV2ZXJ5KChyOiBzdHJpbmcpID0+XG4gICAgICAgICAgICAgICAgZm9ybXNMaXN0Q29tcGxldGVkLmluY2x1ZGVzKHIpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChpc0RlcGVuZGVudCkge1xuICAgICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcInN0YXR1c1wiLCBcImVkaXRhYmxlXCIpO1xuICAgICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImRpc2FibGVkXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJzdGF0dXNcIiwgXCJsb2NrZWRcIik7XG4gICAgICAgICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwiZGlzYWJsZWRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImRlcGVuZGVudE9uXCIsIFtdKTtcbiAgICAgICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwic3RhdHVzXCIsIFwiZWRpdGFibGVcIik7XG4gICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImRpc2FibGVkXCIsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybXNMaXN0O1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmaWx0ZXJBbGxGb3Jtc0RhdGEoYWxsRm9ybXNEYXRhOiBhbnksIGZvcm1zTGlzdDogYW55W10pOiBhbnkge1xuICAgIGxldCBjdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGE6IGFueSA9IHt9O1xuXG4gICAgZm9yIChsZXQgZm9ybSBvZiBmb3Jtc0xpc3QpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJoaWRkZW5cIikgJiZcbiAgICAgICAgIWZvcm0uaGlkZGVuICYmXG4gICAgICAgIGZvcm0udHlwZSAhPT0gRUZvcm1UeXBlLkhUTUxcbiAgICAgICkge1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWxsRm9ybXNEYXRhLCBmb3JtLmtleSkpIHtcbiAgICAgICAgICBjdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGEgPSB7XG4gICAgICAgICAgICAuLi5jdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGEsXG4gICAgICAgICAgICBbZm9ybS5rZXldOiBhbGxGb3Jtc0RhdGFbZm9ybS5rZXldXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGE7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGNoZWNrSWZGb3Jtc1N0YXR1c0NvbXBsZXRlZChcbiAgICBmb3Jtc0xpc3Q6IGFueSxcbiAgICBmb3Jtc0xpc3RDb21wbGV0ZWQ6IHN0cmluZ1tdXG4gICk6IGFueSB7XG4gICAgbGV0IGFsbEZvcm1zQ29tcGxldGVkOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIGZvciAoY29uc3QgZm9ybSBvZiBmb3Jtc0xpc3QpIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICBpZiAoIWZvcm0uaGlkZGVuICYmIGZvcm0udHlwZSAhPT0gRUZvcm1UeXBlLkhUTUwpIHtcbiAgICAgICAgICBpZiAoZm9ybS5zdGF0dXMgIT09IFwiY29tcGxldGVkXCIpIHtcbiAgICAgICAgICAgIGFsbEZvcm1zQ29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWxsRm9ybXNDb21wbGV0ZWQ7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpbmRBY3RpdmVGb3JtQ29uZmlnKGZvcm1zTGlzdDogYW55W10pOiBhbnkge1xuICAgIGNvbnN0IGFjdGl2ZUZvcm1Db25maWcgPSBmb3Jtc0xpc3QuZmluZCgoZm9ybSkgPT4ge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4gJiYgZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCkge1xuICAgICAgICAgIHJldHVybiBmb3JtLnN0YXR1cyA9PT0gXCJlZGl0YWJsZVwiICYmICFmb3JtLmRpc2FibGVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjdGl2ZUZvcm1Db25maWc7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzeW5jIHVwZGF0ZUZvcm1zTGlzdCgpIHtcbiAgICB0aGlzLmZvcm1zTGlzdCA9IHRoaXMuY29udmVydEZvcm1MaXN0Q29uZmlnKHRoaXMuZm9ybXNMaXN0KTtcblxuICAgIGZvciAobGV0IGZvcm0gb2YgdGhpcy5mb3Jtc0xpc3QpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJkZWZhdWx0XCIpICYmXG4gICAgICAgIGlzTm90RW1wdHlWYWx1ZShmb3JtLmRlZmF1bHQpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlcnM6IEFycmF5PFRUcmlnZ2VyPiA9IGZvcm0uZGVmYXVsdC50cmlnZ2VycztcbiAgICAgICAgY29uc3QgcnVsZXM6IEFycmF5PFRSdWxlPiA9IGZvcm0uZGVmYXVsdC5ydWxlcztcbiAgICAgICAgY29uc3QgYWN0aW9uczogQXJyYXk8VEFjdGlvbj4gPSBmb3JtLmRlZmF1bHQuYWN0aW9ucztcblxuICAgICAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZShydWxlcywge1xuICAgICAgICAgIFVTRVJfQ09ORklHOiB0aGlzLnVzZXJDb25maWcsXG4gICAgICAgICAgRk9STVNfTElTVDogdGhpcy5mb3Jtc0xpc3QsXG4gICAgICAgICAgQUxMX0ZPUk1TX0RBVEE6IHRoaXMuYWxsRm9ybXNEYXRhXG4gICAgICAgIH0pLm1hcHBpbmcoKTtcblxuICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgYWN0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbkV2YWx1YXRpb24gPSBuZXcgQ29uZGl0aW9uKFxuICAgICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgICAgIHJ1bGVzTWFwcGluZ1xuICAgICAgICAgICkuZXZhbHVhdGUoKTtcblxuICAgICAgICAgIGlmIChjb25kaXRpb25FdmFsdWF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gbmV3IEFjdGlvbihcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBydWxlc01hcHBpbmcsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBGT1JNU19MSVNUOiB0aGlzLmZvcm1zTGlzdCxcbiAgICAgICAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICAgIGZvcm0uaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZvcm1zTGlzdCA9IHRoaXMuYXNzaWduU2VxdWVuY2VOb1RvRm9ybSh0aGlzLmZvcm1zTGlzdCk7XG5cbiAgICAvKipcbiAgICAgKiBCZWxvdyBjb2RlIGlkZW50aWZpZXMgdGhlIGFsbEZvcm1zRGF0YSByZXF1aXJlZCBmb3IgdGhlIGN1cnJlbnQgVXNlciBGb3JtLlxuICAgICAqIFdoeT8gQmVjYXVzZSBhbGxGb3Jtc0RhdGEgd2lsbCBhY3R1YWxseSBjb250YWluIHRoZSB3aG9sZSBqb3VybmV5J3MgYWxsXG4gICAgICogcG9zc2libGUgVXNlciBGb3JtIHN0ZXBzLiBTbywgaXQgaXMgaW1wb3J0YW50IHRvIHNldCB0aGUgZm9ybSBkYXRhIHdoaWNoXG4gICAgICogdGhpcyBwYXJ0aWN1bGFyIFVzZXIgRm9ybSBvbmx5IGhhcyB0byBMT0NBTCBNRVRIT0QgVmFyaWFibGUuXG4gICAgICovXG4gICAgY29uc3QgY3VycmVudFVzZXJGb3JtQWxsRm9ybXNEYXRhID0gdGhpcy5maWx0ZXJBbGxGb3Jtc0RhdGEoXG4gICAgICB0aGlzLmFsbEZvcm1zRGF0YSxcbiAgICAgIHRoaXMuZm9ybXNMaXN0XG4gICAgKTtcblxuICAgIHRoaXMuZm9ybXNMaXN0Q29tcGxldGVkID0gdGhpcy5maW5kQ29tcGxldGVkRm9ybXNMaXN0KFxuICAgICAgY3VycmVudFVzZXJGb3JtQWxsRm9ybXNEYXRhXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybXNMaXN0ID0gdGhpcy5tYXJrRm9ybUluRm9ybXNMaXN0QXNDb21wbGV0ZWQoXG4gICAgICB0aGlzLmZvcm1zTGlzdCxcbiAgICAgIHRoaXMuZm9ybXNMaXN0Q29tcGxldGVkXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybXNMaXN0ID0gdGhpcy5tYXJrRm9ybUluRm9ybXNMaXN0QXNEaXNhYmxlZChcbiAgICAgIHRoaXMuZm9ybXNMaXN0LFxuICAgICAgdGhpcy5mb3Jtc0xpc3RDb21wbGV0ZWRcbiAgICApO1xuXG4gICAgdGhpcy5mb3Jtc0xpc3QgPSBnZXRPYmplY3REZWVwQ29weSh0aGlzLmZvcm1zTGlzdCk7XG5cbiAgICB0aGlzLmFjdGl2ZUZvcm1Db25maWcgPSB0aGlzLmZpbmRBY3RpdmVGb3JtQ29uZmlnKHRoaXMuZm9ybXNMaXN0KTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgc2hvd1ByZXZpZXcocHJldmlld1Byb3BlcnRpZXM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMgPSBtZXJnZU9iamVjdHMoXG4gICAgICB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLFxuICAgICAgcHJldmlld1Byb3BlcnRpZXNcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgaXNFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMuaWZyYW1lLnNyYykgJiZcbiAgICAgIGlzRW1wdHlWYWx1ZSh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLmh0bWwuYmVmb3JlKSAmJlxuICAgICAgaXNFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMuaHRtbC5hZnRlcikgJiZcbiAgICAgIGlzRW1wdHlWYWx1ZSh0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLnBvcHVwRm9ybUtleSlcbiAgICApIHtcbiAgICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMudW5hdmFpbGFibGUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMucG9wdXBGb3JtS2V5KSkge1xuICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy5hY3RpdmVGb3JtQ29uZmlnLCBcInBvcHVwRm9ybXNcIikpIHtcbiAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNvbmZpZyA9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUZvcm1Db25maWcucG9wdXBGb3Jtc1tcbiAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcy5wb3B1cEZvcm1LZXlcbiAgICAgICAgICAgIF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wb3B1cEZvcm1Db25maWcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMucHJldmlld0RpYWxvZ1NlcnZpY2Uub3Blbih0aGlzLnByZXZpZXcgfHwgXCJcIikuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZvcm1IaWRlKGZvcm1LZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGxldCBmb3JtID0gZ2V0Rm9ybUNvbmZpZ0J5S2V5KHRoaXMuZm9ybXNMaXN0LCBmb3JtS2V5KTtcblxuICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImhpZGRlblwiLCB0cnVlKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZm9ybVNob3coZm9ybUtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGZvcm0gPSBnZXRGb3JtQ29uZmlnQnlLZXkodGhpcy5mb3Jtc0xpc3QsIGZvcm1LZXkpO1xuXG4gICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwiaGlkZGVuXCIsIGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIHRha2VBY3Rpb24oYWN0aW9uOiBhbnksIG9iamVjdDogYW55KSB7XG4gICAgLyoqXG4gICAgICogVGhpcyBiZWxvdyBjb2RlIGlzIGN1cnJlbnRseSBjb21tZW50ZWQgYmVjYXVzZSBub3QgYWxsIGFjdGlvbnMgbmVlZCB0byBiZSBsb2dnZWQgYXQgYmFja2VuZC5cbiAgICAgKiBXaWxsIGxvb2sgbGF0ZXIgaW50byB3aGVyZSBvbmx5IHNwZWNpZmljIGFjdGlvbnMgbmVlZHMgdG8gYmUgbG9nZ2VkIG9yIGFsbC5cbiAgICAgKiBDdXJyZW50bHkgbG9ncyBhcmUgc2VudCBmcm9tIHdpdGhpbmcgdGhlIGFjdGlvbidzIHNwZWNpZmljIG1ldGhvZHMuXG4gICAgICogQ29kZSAtXG4gICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19BQ1RJT05fRVhFQ1VURSwge1xuICAgICAgICAgIGFjdGlvbl9rZXk6IGFjdGlvbi5rZXksXG4gICAgICAgICAgLi4uKGFjdGlvbi5pZCAmJiB7IGFjdGlvbl9pZDogYWN0aW9uLmlkIH0pXG4gICAgICAgIH0pO1xuICAgICovXG5cbiAgICBzd2l0Y2ggKGFjdGlvbi5rZXkpIHtcbiAgICAgIGNhc2UgRVJlbmRlcmVyQWN0aW9uS2V5LkZPUk1fSElERTpcbiAgICAgICAgdGhpcy5mb3JtSGlkZShhY3Rpb24ucHJvcHMuZm9ybUtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFUmVuZGVyZXJBY3Rpb25LZXkuRk9STV9TSE9XOlxuICAgICAgICB0aGlzLmZvcm1TaG93KGFjdGlvbi5wcm9wcy5mb3JtS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVBY3Rpb25LZXkuU0VUX1ZBTFVFOlxuICAgICAgICBjb25zdCBzb3VyY2VzID0gbmV3IFNvdXJjZSh7XG4gICAgICAgICAgVVNFUl9DT05GSUc6IHRoaXMudXNlckNvbmZpZyxcbiAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5mb3Jtc0RhdGFcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc291cmNlVmFsdWUgPSBhd2FpdCBzb3VyY2VzLmdldFZhbHVlRnJvbVNvdXJjZShcbiAgICAgICAgICBhY3Rpb24ucHJvcHMudmFsdWUuc291cmNlXG4gICAgICAgICk7XG4gICAgICAgIHNvdXJjZXMuc2V0VmFsdWVUb1NvdXJjZShhY3Rpb24ucHJvcHMudmFsdWUuZGVzdGluYXRpb24sIHNvdXJjZVZhbHVlKTtcblxuICAgICAgICB0aGlzLnVzZXJDb25maWcgPSBzb3VyY2VzLm9iamVjdC5VU0VSX0NPTkZJRztcbiAgICAgICAgdGhpcy5mb3Jtc0RhdGEgPSBzb3VyY2VzLm9iamVjdC5BTExfRk9STVNfREFUQTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpbmRGb3Jtc0xpc3RMZW5ndGgoZm9ybXNMaXN0OiBhbnlbXSk6IG51bWJlciB7XG4gICAgY29uc3QgX2Zvcm1zTGlzdCA9IGZvcm1zTGlzdC5maWx0ZXIoKGZvcm0pID0+IHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcInR5cGVcIikpIHtcbiAgICAgICAgaWYgKGZvcm0udHlwZSAhPT0gRUZvcm1UeXBlLkhUTUwpIHtcbiAgICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJoaWRkZW5cIikpIHtcbiAgICAgICAgICAgIGlmICghZm9ybS5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvcm07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4pIHtcbiAgICAgICAgICByZXR1cm4gZm9ybTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF9mb3Jtc0xpc3QubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIExpYnJhcnkgRXZlbnQgTGlzdGVuZXJzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBGb3JtTGlzdCAtIExpc3RlbnMgdG8gZXZlbnQgb2Ygb3BlbmluZyB0aGUgRm9ybVZpZXcgb2Ygd2hlbiBhbnkgZm9ybSBpcyBjbGlja2VkIGluIEZvcm1MaXN0XG4gICAqIEBwYXJhbSBzZWxlY3RlZEZvcm0gc3RyaW5nXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIGFzeW5jIGhhbmRsZU9uQ2xpY2tTZXRBY3RpdmVGb3JtKHNlbGVjdGVkRm9ybTogc3RyaW5nLCB0cmlnZ2VyVHlwZTogYW55KSB7XG4gICAgdGhpcy5zaG93Rm9ybSA9IGZhbHNlO1xuICAgIHRoaXMudG9nZ2xlTG9hZGVyKHRydWUpO1xuICAgIHRoaXMuaXNVbnNhdmVkRGF0YSA9IGZhbHNlO1xuXG4gICAgbGV0IGFjdGl2ZUZvcm1Db25maWcgPSB0aGlzLmZvcm1zTGlzdC5maW5kKChmb3JtKSA9PiB7XG4gICAgICBpZiAoZm9ybS5rZXkgPT09IHNlbGVjdGVkRm9ybSkge1xuICAgICAgICByZXR1cm4gZm9ybTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFjdGl2ZUZvcm1Db25maWcgPSBuZXcgQ29udmVydGVyKCkudXBkYXRlRm9ybUNvbmZpZ1Byb3BlcnRpZXMoXG4gICAgICBhY3RpdmVGb3JtQ29uZmlnXG4gICAgKTtcblxuICAgIGxldCBmb3JtQ29uZmlnOiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aXZlRm9ybUNvbmZpZywgXCJwcm9wc1wiKSkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGl2ZUZvcm1Db25maWcucHJvcHMsIFwidXJsXCIpKSB7XG4gICAgICAgIGNvbnN0IGZvcm1Db25maWdGcm9tVXJsID0gYXdhaXQgdGhpcy5mZXRjaEZvcm1Db25maWcoXG4gICAgICAgICAgYWN0aXZlRm9ybUNvbmZpZy5wcm9wcy51cmxcbiAgICAgICAgKTtcbiAgICAgICAgZm9ybUNvbmZpZyA9IHtcbiAgICAgICAgICAuLi5hY3RpdmVGb3JtQ29uZmlnLFxuICAgICAgICAgIC4uLmZvcm1Db25maWdGcm9tVXJsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhhY3RpdmVGb3JtQ29uZmlnLnByb3BzLCBcInBhdGhcIikgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy51c2VyQ29uZmlnLCBcImJhY2tlbmRcIikgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy51c2VyQ29uZmlnLmJhY2tlbmQsIFwiQ09ORklHX0JBU0VfVVJMXCIpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy51c2VyQ29uZmlnPy5iYWNrZW5kPy5DT05GSUdfQkFTRV9VUkx9JHthY3RpdmVGb3JtQ29uZmlnLnByb3BzLnBhdGh9YDtcbiAgICAgICAgY29uc3QgZm9ybUNvbmZpZ0Zyb21QYXRoID0gYXdhaXQgdGhpcy5mZXRjaEZvcm1Db25maWcodXJsKTtcbiAgICAgICAgZm9ybUNvbmZpZyA9IHtcbiAgICAgICAgICAuLi5hY3RpdmVGb3JtQ29uZmlnLFxuICAgICAgICAgIC4uLmZvcm1Db25maWdGcm9tUGF0aFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGl2ZUZvcm1Db25maWcsIFwidHlwZVwiKSAmJlxuICAgICAgICAgIGFjdGl2ZUZvcm1Db25maWcudHlwZSA9PT0gRUZvcm1UeXBlLkZPUk1cbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGl2ZUZvcm1Db25maWcsIFwiZmllbGRzXCIpKSB7XG4gICAgICAgICAgICBmb3JtQ29uZmlnID0gYWN0aXZlRm9ybUNvbmZpZztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJObyBEaXJlY3QgVVJMLCBObyBQYXRoIHdpdGggQmFzZSBVUkwsIE5vIGZpZWxkcyBrZXkgZm91bmQgaW4gQWN0aXZlIEZvcm0ncyBDb25maWchXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgTm8gRGlyZWN0IFVSTCwgTm8gUGF0aCB3aXRoIEJhc2UgVVJMLCBObyBmaWVsZHMga2V5IGZvdW5kIGluIEFjdGl2ZSBGb3JtJ3MgQ29uZmlnIWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3RpdmVGb3JtQ29uZmlnLmZvcm1Db250ZW50LCBcInVybFwiKSkge1xuICAgICAgICBjb25zdCBmb3JtQ29uZmlnRnJvbVVybCA9IGF3YWl0IHRoaXMuZmV0Y2hGb3JtQ29uZmlnKFxuICAgICAgICAgIGFjdGl2ZUZvcm1Db25maWcuZm9ybUNvbnRlbnQudXJsXG4gICAgICAgICk7XG4gICAgICAgIGZvcm1Db25maWcgPSB7XG4gICAgICAgICAgLi4uYWN0aXZlRm9ybUNvbmZpZyxcbiAgICAgICAgICAuLi5mb3JtQ29uZmlnRnJvbVVybFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aXZlRm9ybUNvbmZpZy5mb3JtQ29udGVudCwgXCJwYXRoXCIpICYmXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMudXNlckNvbmZpZywgXCJiYWNrZW5kXCIpICYmXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMudXNlckNvbmZpZy5iYWNrZW5kLCBcIkNPTkZJR19CQVNFX1VSTFwiKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMudXNlckNvbmZpZz8uYmFja2VuZD8uQ09ORklHX0JBU0VfVVJMfSR7YWN0aXZlRm9ybUNvbmZpZy5wcm9wcy5wYXRofWA7XG4gICAgICAgIGNvbnN0IGZvcm1Db25maWdGcm9tUGF0aCA9IGF3YWl0IHRoaXMuZmV0Y2hGb3JtQ29uZmlnKHVybCk7XG4gICAgICAgIGZvcm1Db25maWcgPSB7XG4gICAgICAgICAgLi4uYWN0aXZlRm9ybUNvbmZpZyxcbiAgICAgICAgICAuLi5mb3JtQ29uZmlnRnJvbVBhdGhcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3RpdmVGb3JtQ29uZmlnLCBcImZpZWxkc1wiKSkge1xuICAgICAgICAgIGZvcm1Db25maWcgPSBhY3RpdmVGb3JtQ29uZmlnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIk5vIERpcmVjdCBVUkwsIE5vIFBhdGggd2l0aCBCYXNlIFVSTCwgTm8gZmllbGRzIGtleSBmb3VuZCBpbiBBY3RpdmUgRm9ybSdzIENvbmZpZyFcIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3JtQ29uZmlnID0gbmV3IENvbnZlcnRlcigpLnVwZGF0ZUZvcm1Db25maWdGcm9tVXNlckNvbmZpZyhcbiAgICAgIGZvcm1Db25maWcsXG4gICAgICB0aGlzLnVzZXJDb25maWdcbiAgICApO1xuXG4gICAgZm9ybUNvbmZpZyA9IG5ldyBDb252ZXJ0ZXIoKS51cGRhdGVGb3JtQ29uZmlnTWlzY2VsbGFuZW91cyhmb3JtQ29uZmlnLCB7XG4gICAgICBmb3Jtc0xpc3RMZW5ndGg6IHRoaXMuZmluZEZvcm1zTGlzdExlbmd0aCh0aGlzLmZvcm1zTGlzdClcbiAgICB9KTtcblxuICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZyA9IG1lcmdlT2JqZWN0cyhhY3RpdmVGb3JtQ29uZmlnLCBmb3JtQ29uZmlnKTtcblxuICAgIHN3aXRjaCAodHJpZ2dlclR5cGUpIHtcbiAgICAgIGNhc2UgXCJCVVRUT05fQ0xJQ0tcIjpcbiAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0ZPUk1fT1BFTl9CVVRUT05fQ0xJQ0ssIHtcbiAgICAgICAgICBmb3JtX2tleTogdGhpcy5hY3RpdmVGb3JtQ29uZmlnLmtleSxcbiAgICAgICAgICBmb3JtX3RpdGxlOlxuICAgICAgICAgICAgdGhpcy5hY3RpdmVGb3JtQ29uZmlnPy50aXRsZSA/PyB0aGlzLmFjdGl2ZUZvcm1Db25maWc/LnByb3BzPy50aXRsZVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRk9STV9PUEVOX0FVVE8sIHtcbiAgICAgICAgICBmb3JtX2tleTogdGhpcy5hY3RpdmVGb3JtQ29uZmlnLmtleSxcbiAgICAgICAgICBmb3JtX3RpdGxlOlxuICAgICAgICAgICAgdGhpcy5hY3RpdmVGb3JtQ29uZmlnPy50aXRsZSA/PyB0aGlzLmFjdGl2ZUZvcm1Db25maWc/LnByb3BzPy50aXRsZVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCA8IDYwMCkge1xuICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gZmFsc2U7XG4gICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCA+PSA2MDApIHtcbiAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dGb3JtID0gdHJ1ZTtcbiAgICB0aGlzLnRvZ2dsZUxvYWRlcihmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybVZpZXcgLSBMaXN0ZW5zIHRvIGV2ZW50IG9mIGV4ZWN1dGluZyBhbiBBUEkgY2FsbCBmcm9tIHdpdGhpbiB0aGUgRm9ybVZpZXcgYW5kIGVtaXRzIChyZWFkIGFzIHBhc3NlcykgdGhlIHNhbWUgZXZlbnQgdG8gdGhlIGxpYnJhcnkgY29uc3VtZXIuXG4gICAqIEBwYXJhbSBlIGFueVxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVHZXRVbnNhdmVkU3RhdGUoZTogYW55KSB7XG4gICAgdGhpcy5pc1Vuc2F2ZWREYXRhID0gZTtcbiAgfVxuXG4gIGhhbmRsZU9uQ2xpY2tBcGlDYWxsKGU6IGFueSkge1xuICAgIHRoaXMub25DbGlja0FwaUNhbGwuZW1pdChlKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0Zvcm1GaWVsZEJ1dHRvbihlOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2xpY2tGb3JtRmllbGRCdXR0b24uZW1pdChlKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25BY3Rpb25TaG93UG9wdXBGb3JtKGU6IGFueSwgY29udGVudDogYW55KSB7XG4gICAgaWYgKFxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZSwgXCJhY3RpdmVGb3JtRGF0YVwiKSAmJlxuICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoZSwgXCJwb3B1cEZvcm1Db25maWdcIilcbiAgICApIHtcbiAgICAgIGNvbnN0IHBvcHVwRm9ybURhdGEgPSB7IFt0aGlzLmFjdGl2ZUZvcm1Db25maWcua2V5XTogZS5hY3RpdmVGb3JtRGF0YSB9O1xuICAgICAgdGhpcy5hY3RpdmVQb3B1cEZvcm1EYXRhID0gbWVyZ2VPYmplY3RzKHRoaXMuYWxsRm9ybXNEYXRhLCBwb3B1cEZvcm1EYXRhKTtcblxuICAgICAgdGhpcy5wb3B1cEZvcm1Db25maWcgPSBlLnBvcHVwRm9ybUNvbmZpZztcbiAgICAgIGNvbnN0IHBvcHVwVHlwZSA9IGU/LnBvcHVwVHlwZSA/PyBcIkRJQUxPR1wiO1xuXG4gICAgICBzd2l0Y2ggKHBvcHVwVHlwZSkge1xuICAgICAgICBjYXNlIFwiRElBTE9HXCI6XG4gICAgICAgICAgdGhpcy5wcmV2aWV3RGlhbG9nUmVmID0gdGhpcy5kaWFsb2dzXG4gICAgICAgICAgICAub3Blbihjb250ZW50LCB7XG4gICAgICAgICAgICAgIGNsb3NlYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxuICAgICAgICAgICAgICBzaXplOiBcInNcIixcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNhbGxiYWNrID0ge1xuICAgICAgICAgICAgICAgICAgcG9wdXBGb3JtRGF0YTogZGF0YVtcImRhdGFcIl0sXG4gICAgICAgICAgICAgICAgICBwb3B1cEZvcm1Db25maWc6IGRhdGFbXCJmb3JtQ29uZmlnXCJdLFxuICAgICAgICAgICAgICAgICAgYWN0aXZlRm9ybUNvbmZpZzogdGhpcy5hY3RpdmVGb3JtQ29uZmlnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVBvcHVwRm9ybURhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNvbmZpZyA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wdXBGb3JtQ2FsbGJhY2sgPSB7XG4gICAgICAgICAgICAgICAgICBwb3B1cEZvcm1EYXRhOiB7fSxcbiAgICAgICAgICAgICAgICAgIHBvcHVwRm9ybUNvbmZpZzogdGhpcy5wb3B1cEZvcm1Db25maWcsXG4gICAgICAgICAgICAgICAgICBhY3RpdmVGb3JtQ29uZmlnOiB0aGlzLmFjdGl2ZUZvcm1Db25maWcsXG4gICAgICAgICAgICAgICAgICBzdG9wVGFza0V4ZWN1dGlvbjogdHJ1ZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVQb3B1cEZvcm1EYXRhID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cEZvcm1Db25maWcgPSB7fTtcblxuICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIkRpYWxvZyBlcnJvclwiKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJEaWFsb2cgY2xvc2VkXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlBPUFVQXCI6XG4gICAgICAgICAgdGhpcy5wcmV2aWV3RGlhbG9nUmVmID0gdGhpcy5wcmV2aWV3RGlhbG9nU2VydmljZVxuICAgICAgICAgICAgLm9wZW4odGhpcy5wcmV2aWV3IHx8IFwiXCIpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNhbGxiYWNrID0ge1xuICAgICAgICAgICAgICAgICAgcG9wdXBGb3JtRGF0YTogZGF0YVtcImRhdGFcIl0sXG4gICAgICAgICAgICAgICAgICBwb3B1cEZvcm1Db25maWc6IGRhdGFbXCJmb3JtQ29uZmlnXCJdLFxuICAgICAgICAgICAgICAgICAgYWN0aXZlRm9ybUNvbmZpZzogdGhpcy5hY3RpdmVGb3JtQ29uZmlnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVBvcHVwRm9ybURhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNvbmZpZyA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wdXBGb3JtQ2FsbGJhY2sgPSB7XG4gICAgICAgICAgICAgICAgICBwb3B1cEZvcm1EYXRhOiB7fSxcbiAgICAgICAgICAgICAgICAgIHBvcHVwRm9ybUNvbmZpZzogdGhpcy5wb3B1cEZvcm1Db25maWcsXG4gICAgICAgICAgICAgICAgICBhY3RpdmVGb3JtQ29uZmlnOiB0aGlzLmFjdGl2ZUZvcm1Db25maWcsXG4gICAgICAgICAgICAgICAgICBzdG9wVGFza0V4ZWN1dGlvbjogdHJ1ZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVQb3B1cEZvcm1EYXRhID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cEZvcm1Db25maWcgPSB7fTtcblxuICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIlByZXZpZXcgZXJyb3JcIik7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiUHJldmlldyBjbG9zZWRcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtVmlldyAtIExpc3RlbnMgdG8gZXZlbnQgb2YgZ2V0dGluZyB0aGUgQWN0aXZlIEZvcm0ncyBEYXRhIHdoZW4gdGhlIEZvcm0gaXMgU2F2ZWQgYW5kIGVtaXRzIChyZWFkIGFzIHBhc3NlcykgdGhlIHNhbWUgZXZlbnQgdG8gdGhlIGxpYnJhcnkgY29uc3VtZXIuXG4gICAqIEBwYXJhbSBlIGFueVxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrU2F2ZUZvcm0oXG4gICAgZTogYW55LFxuICAgIGV2ZW50VHlwZTogXCJGT1JNXCIgfCBcIlBPUFVQX0ZPUk1cIixcbiAgICBjb250ZXh0OiB1bmRlZmluZWRcbiAgKSB7XG4gICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgIGNhc2UgXCJGT1JNXCI6XG4gICAgICAgIHRoaXMuaXNVbnNhdmVkRGF0YSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRvZ2dsZUxvYWRlcih0cnVlKTtcblxuICAgICAgICB0aGlzLmdldEZvcm1EYXRhLmVtaXQoe1xuICAgICAgICAgIFt0aGlzLmFjdGl2ZUZvcm1Db25maWcua2V5XToge1xuICAgICAgICAgICAgZm9ybUNvbmZpZzogZVtcImZvcm1Db25maWdcIl0sXG4gICAgICAgICAgICBkYXRhOiBlW1wiZGF0YVwiXSxcbiAgICAgICAgICAgIGV4dGVuZGVkRGF0YTogZVtcImV4dGVuZGVkRGF0YVwiXVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIlBPUFVQX0ZPUk1cIjpcbiAgICAgICAgdGhpcy5wcmV2aWV3RGlhbG9nUmVmLm5leHQoZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1WaWV3IC0gTGlzdGVucyB0byBldmVudCBvZiBzaG93aW5nIHRoZSBGb3JtcyBMaXN0IGluIE1vYmlsZSBWaWV3LlxuICAgKiBAcGFyYW0gZSBhbnlcbiAgICovXG4gIGhhbmRsZU9uQ2xpY2tWaWV3Rm9ybXMoZTogYW55KSB7XG4gICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGV2ZW50IG9mIGdvaW5nIGJhY2sgdG8gdGhlIHByZXZpb3VzIGZvcm0gZGlyZWN0bHkgb3IgYnkgdGFiYmluZywgd2l0aG91dCBzaG93aW5nIHRoZSBmb3JtIGxpc3QgaW4gbW9iaWxlIHZpZXcuXG4gICAqXG4gICAqIFByZXJlcXVpc2l0ZTogVGhlIGN1cnJlbnQgZm9ybSBjYW4gbmV2ZXIgYmUgbG9ja2VkOyBpdCBzaG91bGQgZWl0aGVyIGJlIGluIGFuIGVkaXRhYmxlIG9yIGNvbXBsZXRlZCBzdGF0ZS5cbiAgICpcbiAgICogTG9naWM6XG4gICAqIDEuIEZvciBESVJFQ1QgbW9kZSwgZmluZCB0aGUgY29uZmlnIG9mIHRoZSBwcmV2aW91cyBmb3JtIHN0YXJ0aW5nIGZyb20gdGhlIGZpcnN0IGZvcm0sIHN1Y2ggdGhhdCB0aGUgcHJldmlvdXMgZm9ybSBpcyBlZGl0YWJsZSBhbmQgaXRzIHNlcXVlbmNlIG51bWJlciBpcyBvbmUgbGVzcyB0aGFuIHRoZSBjdXJyZW50IGFjdGl2ZSBmb3JtJ3Mgc2VxdWVuY2UgbnVtYmVyLlxuICAgKiAgICBJZiBubyBwcmV2aW91cyBmb3JtIGlzIGZvdW5kIG9yIGFsbCBmb3JtcyBoYXZlIGJlZW4gY29tcGxldGVkLCBzaG93IHRoZSBmb3JtIGxpc3QuXG4gICAqIDIuIEZvciBUQUJCRUQgbW9kZSwgZmluZCB0aGUgY29uZmlnIG9mIHRoZSBwcmV2aW91cyBmb3JtIGluIHRoZSBsaXN0LCBzdWNoIHRoYXQgdGhlIHByZXZpb3VzIGZvcm0ncyBzZXF1ZW5jZSBudW1iZXIgaXMgbGVzcyB0aGFuIHRoZSBjdXJyZW50IGFjdGl2ZSBmb3JtJ3Mgc2VxdWVuY2UgbnVtYmVyIGFuZCB0aGUgZm9ybSBpcyBlZGl0YWJsZS5cbiAgICogICAgSWYgbm8gcHJldmlvdXMgZm9ybSBpcyBmb3VuZCwgc2hvdyB0aGUgZm9ybSBsaXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gZSAtIFRoZSBldmVudCBvYmplY3QgY29udGFpbmluZyB0aGUgbW9kZSB0byBnbyBiYWNrIGluLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZS5tb2RlIC0gVGhlIG1vZGUgb2YgZ29pbmcgYmFjazogRElSRUNUIG9yIFRBQkJFRC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tHb0JhY2soZTogYW55KSB7XG4gICAgc3dpdGNoIChlLm1vZGUpIHtcbiAgICAgIGNhc2UgRUZvcm1WaWV3R29CYWNrTW9kZS5ESVJFQ1Q6XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZUZvcm1Db25maWcuc2VxdWVuY2VObyA9PT0gMSkge1xuICAgICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zaG93Rm9ybSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5jaGVja0lmRm9ybXNTdGF0dXNDb21wbGV0ZWQoXG4gICAgICAgICAgICAgIHRoaXMuZm9ybXNMaXN0LFxuICAgICAgICAgICAgICB0aGlzLmZvcm1zTGlzdENvbXBsZXRlZFxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNGb3JtQ29uZmlnRGlyZWN0ID0gdGhpcy5mb3Jtc0xpc3QuZmluZCgoZm9ybSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZm9ybS5zZXF1ZW5jZU5vID09PSB0aGlzLmFjdGl2ZUZvcm1Db25maWcuc2VxdWVuY2VObyAtIDEgJiZcbiAgICAgICAgICAgICAgICBmb3JtLnN0YXR1cyAhPT0gRUZvcm1zTGlzdFN0YXR1cy5MT0NLRURcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAocHJldmlvdXNGb3JtQ29uZmlnRGlyZWN0KSB7XG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlT25DbGlja1NldEFjdGl2ZUZvcm0oXG4gICAgICAgICAgICAgICAgcHJldmlvdXNGb3JtQ29uZmlnRGlyZWN0LmtleSxcbiAgICAgICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUZvcm1WaWV3R29CYWNrTW9kZS5UQUJCRUQ6XG4gICAgICAgIGNvbnN0IHByZXZpb3VzRm9ybUNvbmZpZyA9IHRoaXMuZm9ybXNMaXN0LmZpbmQoKGZvcm0pID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmb3JtLnNlcXVlbmNlTm8gPCB0aGlzLmFjdGl2ZUZvcm1Db25maWcuc2VxdWVuY2VObyAmJlxuICAgICAgICAgICAgZm9ybS5zdGF0dXMgPT09IEVGb3Jtc0xpc3RTdGF0dXMuRURJVEFCTEVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzRm9ybUNvbmZpZykge1xuICAgICAgICAgIHRoaXMuaGFuZGxlT25DbGlja1NldEFjdGl2ZUZvcm0ocHJldmlvdXNGb3JtQ29uZmlnLmtleSwgdW5kZWZpbmVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9ybUxpc3QgLSBMaXN0ZW5zIHRvIGV2ZW50IG9mIHN1Ym1pdHRpbmcgYWxsIHRoZSBmb3JtcyBhbmQgbW92aW5nIG91dCBvZiB0aGUgbGlicmFyeSBhbmQgYWxzbyBoYW5kbGVzIHRoZSB2YWxpZGF0aW9uIG9mIGFsbCB0aGUgZm9ybXMuXG4gICAqIEBwYXJhbSBlIGFueVxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBhc3luYyBoYW5kbGVPbkNsaWNrU3VibWl0Rm9ybXMoZTogYW55KSB7XG4gICAgY29uc3QgZm9ybXNMaXN0OiBhbnlbXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5mb3Jtc0xpc3QpKTtcblxuICAgIGxldCBmaXJzdEZvcm1XaXRoRXJyb3I6IHN0cmluZyA9IFwiXCI7XG4gICAgZm9yIChsZXQgZm9ybSBvZiBmb3Jtc0xpc3QpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIWZvcm0uaGlkZGVuICYmXG4gICAgICAgIGZvcm0udHlwZSAhPT0gRUZvcm1UeXBlLkhUTUwgJiZcbiAgICAgICAgZm9ybS5yZXF1aXJlZCAmJlxuICAgICAgICBmb3JtLnN0YXR1cyAhPT0gRUZvcm1zTGlzdFN0YXR1cy5DT01QTEVURURcbiAgICAgICkge1xuICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fU1VCTUlUX0ZPUk1fQlVUVE9OX0NMSUNLX0lOVkFMSUQsIHtcbiAgICAgICAgICBmb3JtX2tleTogZm9ybS5rZXksXG4gICAgICAgICAgZm9ybV90aXRsZTogZm9ybT8udGl0bGUgPz8gZm9ybT8ucHJvcHM/LnRpdGxlLFxuICAgICAgICAgIGZvcm1fc3RhdHVzOiBmb3JtLnN0YXR1c1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaXNFbXB0eVZhbHVlKGZpcnN0Rm9ybVdpdGhFcnJvcikpIHtcbiAgICAgICAgICBmaXJzdEZvcm1XaXRoRXJyb3IgPSBmb3JtLmtleTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc05vdEVtcHR5VmFsdWUoZmlyc3RGb3JtV2l0aEVycm9yKSkge1xuICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbih0cnVlKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKGZhbHNlKTtcbiAgICAgIH0sIDMwMDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub25DbGlja1N1Ym1pdC5lbWl0KGUpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVHZXRMb2dzKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmdldExvZ3MuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogTWlzY2VsbGFuZW91cyBNZXRob2RzXG4gICAqL1xuICBoYW5kbGVSZXNpemUoZm9ybXNMaXN0OiBhbnlbXSkge1xuICAgIGlmICh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggPCA2MDApIHtcbiAgICAgIGNvbnN0IGlzU2luZ2xlRm9ybSA9IChmb3Jtc0xpc3Q6IGFueVtdKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHJldHVybiBmb3Jtc0xpc3QubGVuZ3RoID09PSAxO1xuICAgICAgfTtcbiAgICAgIGlmICghaXNTaW5nbGVGb3JtKGZvcm1zTGlzdCkpIHtcbiAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNNb2JpbGVWaWV3ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc01vYmlsZVZpZXcgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgbmdDbGFzcz1cImt3aWtpZC1yZW5kZXJlclwiPlxuICA8ZGl2XG4gICAgbmdDbGFzcz1cImt3aWtpZC1sYXlvdXQtY29udGFpbmVyXCJcbiAgICAqbmdJZj1cIiFsb2FkaW5nXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIG5nQ2xhc3M9XCJrd2lraWQtc2VjdGlvbnMtY29udGFpbmVyXCJcbiAgICAgICpuZ0lmPVwic2hvd0Zvcm1TZWN0aW9uc1wiXG4gICAgICBjbGFzcz1cImFjdGl2ZVwiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cInNob3dGb3JtU2VjdGlvbnNcIlxuICAgICAgW2NsYXNzLm1vYmlsZV09XCJpc01vYmlsZVZpZXdcIlxuICAgID5cbiAgICAgIDxrd2lraWQtZm9ybXMtbGlzdFxuICAgICAgICBbc2hvd0Zvcm1GaWVsZHNdPVwidGhpcy5zaG93Rm9ybUZpZWxkc1wiXG4gICAgICAgIFthY3RpdmVGb3JtQ29uZmlnXT1cInRoaXMuYWN0aXZlRm9ybUNvbmZpZ1wiXG4gICAgICAgIFt1c2VyQ29uZmlnXT1cInRoaXMudXNlckNvbmZpZ1wiXG4gICAgICAgIFtmb3Jtc0xpc3RdPVwidGhpcy5mb3Jtc0xpc3RcIlxuICAgICAgICBbc3RlcENvbmZpZ109XCJ0aGlzLnN0ZXBDb25maWdcIlxuICAgICAgICBbaXNVbnNhdmVkRGF0YV09XCJ0aGlzLmlzVW5zYXZlZERhdGFcIlxuICAgICAgICBbZm9ybXNMaXN0Q29tcGxldGVkXT1cInRoaXMuZm9ybXNMaXN0Q29tcGxldGVkXCJcbiAgICAgICAgW2lzTW9iaWxlVmlld109XCJ0aGlzLmlzTW9iaWxlVmlld1wiXG4gICAgICAgIChnZXRMb2dzKT1cImhhbmRsZUdldExvZ3MoJGV2ZW50KVwiXG4gICAgICAgIChvbkNsaWNrU2V0QWN0aXZlRm9ybSk9XCJcbiAgICAgICAgICB0aGlzLmhhbmRsZU9uQ2xpY2tTZXRBY3RpdmVGb3JtKCRldmVudCwgJ0JVVFRPTl9DTElDSycpXG4gICAgICAgIFwiXG4gICAgICAgIChvbkNsaWNrU3VibWl0Rm9ybXMpPVwidGhpcy5oYW5kbGVPbkNsaWNrU3VibWl0Rm9ybXMoJGV2ZW50KVwiXG4gICAgICA+PC9rd2lraWQtZm9ybXMtbGlzdD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBuZ0NsYXNzPVwia3dpa2lkLWZvcm1zLWNvbnRhaW5lclwiXG4gICAgICAqbmdJZj1cIlxuICAgICAgICB0aGlzLnNob3dGb3JtICYmXG4gICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgJiZcbiAgICAgICAgdGhpcy5hY3RpdmVGb3JtQ29uZmlnICE9PSB1bmRlZmluZWRcbiAgICAgIFwiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cInNob3dGb3JtRmllbGRzXCJcbiAgICAgIFtjbGFzcy5tb2JpbGVdPVwiaXNNb2JpbGVWaWV3XCJcbiAgICAgIFtAcGFuZWxJbk91dF1cbiAgICA+XG4gICAgICA8a3dpa2lkLWZvcm0tdmlld1xuICAgICAgICAqbmdJZj1cInRoaXMuYWN0aXZlRm9ybUNvbmZpZy50eXBlID09PSAnRk9STSdcIlxuICAgICAgICBbZm9ybUNvbmZpZ109XCJ0aGlzLmFjdGl2ZUZvcm1Db25maWdcIlxuICAgICAgICBbYWxsRm9ybXNEYXRhXT1cInRoaXMuYWxsRm9ybXNEYXRhXCJcbiAgICAgICAgW2lzTW9iaWxlVmlld109XCJ0aGlzLmlzTW9iaWxlVmlld1wiXG4gICAgICAgIFt1c2VyQ29uZmlnXT1cInRoaXMudXNlckNvbmZpZ1wiXG4gICAgICAgIFtzdGVwQ29uZmlnXT1cInRoaXMuc3RlcENvbmZpZ1wiXG4gICAgICAgIFtwb3B1cEZvcm1DYWxsYmFja109XCJ0aGlzLnBvcHVwRm9ybUNhbGxiYWNrXCJcbiAgICAgICAgW2FwaUNhbGxSZXNwb25zZV09XCJ0aGlzLmFwaUNhbGxSZXNwb25zZVwiXG4gICAgICAgIFtidXR0b25DbGlja1Jlc3BvbnNlXT1cInRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZVwiXG4gICAgICAgIChvbkNsaWNrRm9ybUZpZWxkQnV0dG9uKT1cImhhbmRsZU9uQ2xpY2tGb3JtRmllbGRCdXR0b24oJGV2ZW50KVwiXG4gICAgICAgIChnZXRVbnNhdmVkRGF0YVN0YXRlKT1cImhhbmRsZUdldFVuc2F2ZWRTdGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgKG9uQ2xpY2tBcGlDYWxsKT1cImhhbmRsZU9uQ2xpY2tBcGlDYWxsKCRldmVudClcIlxuICAgICAgICAob25BY3Rpb25TaG93UG9wdXBGb3JtKT1cIlxuICAgICAgICAgIHRoaXMuaGFuZGxlT25BY3Rpb25TaG93UG9wdXBGb3JtKCRldmVudCwgY29udGVudClcbiAgICAgICAgXCJcbiAgICAgICAgKG9uQ2xpY2tHb0JhY2spPVwidGhpcy5oYW5kbGVPbkNsaWNrR29CYWNrKCRldmVudClcIlxuICAgICAgICAob25DbGlja1ZpZXdGb3Jtcyk9XCJ0aGlzLmhhbmRsZU9uQ2xpY2tWaWV3Rm9ybXMoJGV2ZW50KVwiXG4gICAgICAgIChnZXRMb2dzKT1cImhhbmRsZUdldExvZ3MoJGV2ZW50KVwiXG4gICAgICAgIChvbkNsaWNrU2F2ZUZvcm0pPVwiXG4gICAgICAgICAgdGhpcy5oYW5kbGVPbkNsaWNrU2F2ZUZvcm0oJGV2ZW50LCAnRk9STScsIHVuZGVmaW5lZClcbiAgICAgICAgXCJcbiAgICAgID48L2t3aWtpZC1mb3JtLXZpZXc+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxrd2lrdWktbG9hZGVyPjwva3dpa3VpLWxvYWRlcj5cblxuPHR1aS1wdXNoXG4gIGlkPVwiZXJyb3Itbm90aWZpY2F0aW9uXCJcbiAgKnR1aVB1c2g9XCJzaG93RXJyb3JOb3RpZmljYXRpb25cIlxuICBoZWFkaW5nPVwiUGxlYXNlIGNvbXBsZXRlIHRoZSByZXF1aXJlZCBGb3JtcyFcIlxuICB0eXBlPVwiRXJyb3JcIlxuICAoY2xvc2UpPVwidG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpXCJcbj5cbiAgPHR1aS1zdmdcbiAgICBzcmM9XCJ0dWlJY29uWENpcmNsZVwiXG4gICAgc3R5bGU9XCJjb2xvcjogI2ZmZiAhaW1wb3J0YW50XCJcbiAgPlxuICA8L3R1aS1zdmc+XG48L3R1aS1wdXNoPlxuPG5nLXRlbXBsYXRlXG4gICNwcmV2aWV3XG4gIGxldC1wcmV2aWV3XG4+XG4gIDx0dWktcHJldmlld1xuICAgIFtyb3RhdGFibGVdPVwiZmFsc2VcIlxuICAgIFt6b29tYWJsZV09XCJmYWxzZVwiXG4gICAgY2xhc3M9XCJwcmV2aWV3LWNvbnRhaW5lclwiXG4gICAgKm5nSWY9XCJwb3B1cEZvcm1Db25maWdcIlxuICA+XG4gICAgPHR1aS1wcmV2aWV3LXRpdGxlICpuZ0lmPVwicHJldmlld1Byb3BlcnRpZXMudGl0bGUgIT09ICcnXCI+e3tcbiAgICAgIHByZXZpZXdQcm9wZXJ0aWVzLnRpdGxlXG4gICAgfX08L3R1aS1wcmV2aWV3LXRpdGxlPlxuXG4gICAgPGRpdiBjbGFzcz1cImt3aWtpZC1mb3JtLXZpZXctcG9wdXAtY29udGFpbmVyXCI+XG4gICAgICA8a3dpa2lkLWZvcm0tdmlld1xuICAgICAgICBbZm9ybURhdGFdPVwiYWN0aXZlUG9wdXBGb3JtRGF0YVwiXG4gICAgICAgIFtmb3JtQ29uZmlnXT1cInBvcHVwRm9ybUNvbmZpZ1wiXG4gICAgICAgIFthbGxGb3Jtc0RhdGFdPVwiYWxsRm9ybXNEYXRhXCJcbiAgICAgICAgW3VzZXJDb25maWddPVwidGhpcy51c2VyQ29uZmlnXCJcbiAgICAgICAgW3N0ZXBDb25maWddPVwidGhpcy5zdGVwQ29uZmlnXCJcbiAgICAgICAgW2lzTW9iaWxlVmlld109XCJ0aGlzLmlzTW9iaWxlVmlld1wiXG4gICAgICAgIFthcGlDYWxsUmVzcG9uc2VdPVwidGhpcy5hcGlDYWxsUmVzcG9uc2VcIlxuICAgICAgICBbYnV0dG9uQ2xpY2tSZXNwb25zZV09XCJ0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2VcIlxuICAgICAgICAob25DbGlja0Zvcm1GaWVsZEJ1dHRvbik9XCJoYW5kbGVPbkNsaWNrRm9ybUZpZWxkQnV0dG9uKCRldmVudClcIlxuICAgICAgICAoZ2V0U2F2ZWRTdGF0ZSk9XCJoYW5kbGVHZXRVbnNhdmVkU3RhdGUoJGV2ZW50KVwiXG4gICAgICAgIChvbkNsaWNrQXBpQ2FsbCk9XCJoYW5kbGVPbkNsaWNrQXBpQ2FsbCgkZXZlbnQpXCJcbiAgICAgICAgKGdldExvZ3MpPVwiaGFuZGxlR2V0TG9ncygkZXZlbnQpXCJcbiAgICAgICAgKG9uQ2xpY2tTYXZlRm9ybSk9XCJcbiAgICAgICAgICB0aGlzLmhhbmRsZU9uQ2xpY2tTYXZlRm9ybSgkZXZlbnQsICdQT1BVUF9GT1JNJywgdW5kZWZpbmVkKVxuICAgICAgICBcIlxuICAgICAgPjwva3dpa2lkLWZvcm0tdmlldz5cbiAgICA8L2Rpdj5cblxuICAgIDxidXR0b25cbiAgICAgIHR1aUljb25CdXR0b25cbiAgICAgIHR1aVByZXZpZXdBY3Rpb25cbiAgICAgIGljb249XCJ0dWlJY29uQ2xvc2VMYXJnZVwiXG4gICAgICB0aXRsZT1cIkNsb3NlXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cInByZXZpZXcuY29tcGxldGUoKVwiXG4gICAgPjwvYnV0dG9uPlxuICA8L3R1aS1wcmV2aWV3PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZVxuICAjY29udGVudFxuICBsZXQtY29udGV4dFxuPlxuICA8ZGl2IGNsYXNzPVwia3dpa2lkLWZvcm0tdmlldy1wb3B1cC1jb250YWluZXJcIj5cbiAgICA8a3dpa2lkLWZvcm0tdmlld1xuICAgICAgW2Zvcm1EYXRhXT1cImFjdGl2ZVBvcHVwRm9ybURhdGFcIlxuICAgICAgW2Zvcm1Db25maWddPVwicG9wdXBGb3JtQ29uZmlnXCJcbiAgICAgIFthbGxGb3Jtc0RhdGFdPVwiYWxsRm9ybXNEYXRhXCJcbiAgICAgIFt1c2VyQ29uZmlnXT1cInRoaXMudXNlckNvbmZpZ1wiXG4gICAgICBbc3RlcENvbmZpZ109XCJ0aGlzLnN0ZXBDb25maWdcIlxuICAgICAgW2lzTW9iaWxlVmlld109XCJ0aGlzLmlzTW9iaWxlVmlld1wiXG4gICAgICBbYXBpQ2FsbFJlc3BvbnNlXT1cInRoaXMuYXBpQ2FsbFJlc3BvbnNlXCJcbiAgICAgIFtidXR0b25DbGlja1Jlc3BvbnNlXT1cInRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZVwiXG4gICAgICAob25DbGlja0Zvcm1GaWVsZEJ1dHRvbik9XCJoYW5kbGVPbkNsaWNrRm9ybUZpZWxkQnV0dG9uKCRldmVudClcIlxuICAgICAgKGdldFNhdmVkU3RhdGUpPVwiaGFuZGxlR2V0VW5zYXZlZFN0YXRlKCRldmVudClcIlxuICAgICAgKG9uQ2xpY2tBcGlDYWxsKT1cImhhbmRsZU9uQ2xpY2tBcGlDYWxsKCRldmVudClcIlxuICAgICAgKGdldExvZ3MpPVwiaGFuZGxlR2V0TG9ncygkZXZlbnQpXCJcbiAgICAgIChvbkNsaWNrU2F2ZUZvcm0pPVwiXG4gICAgICAgIHRoaXMuaGFuZGxlT25DbGlja1NhdmVGb3JtKCRldmVudCwgJ1BPUFVQX0ZPUk0nLCBjb250ZXh0KVxuICAgICAgXCJcbiAgICA+PC9rd2lraWQtZm9ybS12aWV3PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
1003
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvcmVuZGVyZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xFLE9BQU8sRUFBb0IsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxJQUFJLEVBQ0osTUFBTSxFQUdOLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGVBQWUsRUFDZixTQUFTLEVBQ1QsWUFBWSxFQUNaLG9CQUFvQixFQUNyQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDbEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFFM0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FB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QixhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIkB0YWlnYS11aS9hZGRvbi1wcmV2aWV3XCI7XG5pbXBvcnQgeyBUdWlEaWFsb2dDb250ZXh0LCBUdWlEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIkB0YWlnYS11aS9jb3JlXCI7XG5pbXBvcnQge1xuICBBY3Rpb24sXG4gIENvbmRpdGlvbixcbiAgUnVsZSxcbiAgU291cmNlLFxuICBUQWN0aW9uLFxuICBUUnVsZSxcbiAgY2hlY2tPYmplY3RLZXlFeGlzdHMsXG4gIGdldE9iamVjdERlZXBDb3B5LFxuICBpc0VtcHR5VmFsdWUsXG4gIGlzTm90RW1wdHlWYWx1ZSxcbiAgbG9nTWV0aG9kLFxuICBtZXJnZU9iamVjdHMsXG4gIHNldFZhbHVlVG9PYmplY3RQYXRoXG59IGZyb20gXCJrd2lraWQtdG9vbGtpdFwiO1xuaW1wb3J0IHsgS3dpa1VJTG9hZGVyU2VydmljZSB9IGZyb20gXCJrd2lrdWlcIjtcbmltcG9ydCB7IENvbnZlcnRlciB9IGZyb20gXCIuL2NvbmZpZy1jb252ZXJ0ZXIvY29uZmlnLWNvbnZlcnRlclwiO1xuaW1wb3J0IHsgRUFjdGlvbktleSB9IGZyb20gXCIuL2Zvcm0tdmlldy9kZWZpbml0aW9ucy9mb3JtLXZpZXcuYWN0aW9ucy5kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBFRm9ybVZpZXdHb0JhY2tNb2RlIH0gZnJvbSBcIi4vZm9ybS12aWV3L2RlZmluaXRpb25zL2Zvcm0tdmlldy5jb21tb25zLmRlZmluaXRpb25cIjtcbmltcG9ydCB7IFRUcmlnZ2VyIH0gZnJvbSBcIi4vZm9ybS12aWV3L2RlZmluaXRpb25zL2Zvcm0tdmlldy50cmlnZ2Vycy5kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBFRm9ybXNMaXN0U3RhdHVzIH0gZnJvbSBcIi4vZm9ybXMtbGlzdC9mb3Jtcy1saXN0LmRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyBFUmVuZGVyZXJBY3Rpb25LZXkgfSBmcm9tIFwiLi9yZW5kZXJlci5hY3Rpb25zLmRlZmluaXRpb25zXCI7XG5pbXBvcnQgeyBFRm9ybVR5cGUsIEVMb2dFdmVudFR5cGUgfSBmcm9tIFwiLi9yZW5kZXJlci5kZWZpbml0aW9uc1wiO1xuaW1wb3J0IHsgZm9ybWF0RXZlbnRMb2dzLCBnZXRGb3JtQ29uZmlnQnlLZXkgfSBmcm9tIFwiLi9yZW5kZXJlci5oZWxwZXJcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImt3aWtpZC1mb3Jtcy1yZW5kZXJlclwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3JlbmRlcmVyLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9yZW5kZXJlci5jb21wb25lbnQuc2Nzc1wiLCBcIi4vc2hhcmVkLnNjc3NcIl0sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKFwicGFuZWxJbk91dFwiLCBbXG4gICAgICB0cmFuc2l0aW9uKFwiOmVudGVyXCIsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06IFwidHJhbnNsYXRlWSgxMDAlKVwiIH0pLFxuICAgICAgICBhbmltYXRlKDE1MClcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbihcIjpsZWF2ZVwiLCBbXG4gICAgICAgIGFuaW1hdGUoMTAwLCBzdHlsZSh7IHRyYW5zZm9ybTogXCJ0cmFuc2xhdGVZKDEwMCUpXCIgfSkpXG4gICAgICBdKVxuICAgIF0pXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgS3dpa0lERm9ybXNSZW5kZXJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLy8gVGhlIGZpbmFsIHZhbHVlIHNob3VsZCBiZSBwcm92aWRlZCB0byBzZXJ2aWNlLCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGluIGFsbCBjb21wb25lbnRzXG4gIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6cmVzaXplXCIsIFtcIiRldmVudFwiXSlcbiAgd2luZG93UmVzaXplV2F0Y2hlcigpIHtcbiAgICBpZiAodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDwgNjAwKSB7XG4gICAgICBpZiAodGhpcy5zaG93Rm9ybSkge1xuICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNob3dGb3JtKSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5pc01vYmlsZVZpZXcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBAVmlld0NoaWxkKFwicHJldmlld1wiKVxuICByZWFkb25seSBwcmV2aWV3OiBUZW1wbGF0ZVJlZjxUdWlEaWFsb2dDb250ZXh0PHZvaWQ+PjtcbiAgcHJpdmF0ZSBwcmV2aWV3RGlhbG9nUmVmOiBhbnk7XG5cbiAgQElucHV0KClcbiAgc3RlcENvbmZpZzogYW55O1xuXG4gIEBJbnB1dCgpXG4gIHVzZXJDb25maWc6IGFueTtcblxuICBASW5wdXQoKVxuICBmb3Jtc0RhdGE6IGFueSA9IHt9O1xuXG4gIEBJbnB1dCgpXG4gIGFjdGl2ZUZvcm1EYXRhOiBhbnkgPSB7fTtcblxuICBASW5wdXQoKVxuICBhcGlDYWxsUmVzcG9uc2U6IGFueSA9IHt9O1xuXG4gIEBJbnB1dCgpXG4gIGJ1dHRvbkNsaWNrUmVzcG9uc2U6IGFueSA9IHt9O1xuXG4gIEBPdXRwdXQoKVxuICBvbkNsaWNrU3VibWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBnZXRGb3JtRGF0YTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KClcbiAgb25DbGlja0FwaUNhbGw6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uQ2xpY2tWaWV3RmlsZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KClcbiAgZ2V0TG9nczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KClcbiAgb25DbGlja0Zvcm1GaWVsZEJ1dHRvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc2hvd0Vycm9yTm90aWZpY2F0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKHNob3cpIHtcbiAgICB0aGlzLnNob3dFcnJvck5vdGlmaWNhdGlvbiA9IHNob3c7XG4gIH1cblxuICBhY3RpdmVQb3B1cEZvcm1EYXRhOiBhbnkgPSB7fTtcbiAgcG9wdXBGb3JtQ2FsbGJhY2s6IGFueSA9IHt9O1xuICBhY3RpdmVGb3JtQ29uZmlnOiBhbnk7XG4gIGFjdGl2ZUZvcm1GaWVsZHM6IGFueVtdO1xuICBhbGxGb3Jtc0RhdGE6IGFueSA9IHt9O1xuICBhbGxGb3Jtc1N1Ym1pdHRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBmb3Jtc0xpc3Q6IGFueVtdID0gW107XG4gIGZvcm1zTGlzdENvbXBsZXRlZDogc3RyaW5nW107XG4gIGlzTW9iaWxlVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcmV2aWV3UHJvcGVydGllczogYW55ID0ge1xuICAgIGh0bWw6IHtcbiAgICAgIGJlZm9yZTogXCJcIixcbiAgICAgIGFmdGVyOiBcIlwiXG4gICAgfSxcbiAgICBpZnJhbWU6IHtcbiAgICAgIHNyYzogXCJcIixcbiAgICAgIHRpdGxlOiBcIlwiXG4gICAgfSxcbiAgICBwb3B1cEZvcm1LZXk6IFwiXCIsXG4gICAgdGl0bGU6IFwiXCIsXG4gICAgdW5hdmFpbGFibGU6IGZhbHNlXG4gIH07XG4gIHBvcHVwRm9ybUNvbmZpZzogYW55ID0ge307XG5cbiAgLy8gZGlzcGxheSBmb3JtcyBhbmQgbGlzdCBjb25kaXRpb25hbGx5XG4gIHNob3dGb3JtOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dGb3JtRmllbGRzOiBib29sZWFuID0gdHJ1ZTtcbiAgc2hvd0Zvcm1TZWN0aW9uczogYm9vbGVhbiA9IHRydWU7XG4gIGlzVW5zYXZlZERhdGE6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGhvc3RFbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBASW5qZWN0KFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJldmlld0RpYWxvZ1NlcnZpY2U6IFR1aVByZXZpZXdEaWFsb2dTZXJ2aWNlLFxuICAgIHB1YmxpYyBsb2FkZXJTZXJ2aWNlOiBLd2lrVUlMb2FkZXJTZXJ2aWNlLFxuICAgIEBJbmplY3QoVHVpRGlhbG9nU2VydmljZSkgcHJpdmF0ZSByZWFkb25seSBkaWFsb2dzOiBUdWlEaWFsb2dTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnRvZ2dsZUxvYWRlcih0cnVlKTtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZm9ybVN0ZXBLZXkgPSB0aGlzLnN0ZXBDb25maWc/LmZvcm0/LmtleSA/PyB1bmRlZmluZWQ7XG5cbiAgICBpZiAoXG4gICAgICBmb3JtU3RlcEtleSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLnVzZXJDb25maWcudXNlckZvcm1GaWVsZHMsIGZvcm1TdGVwS2V5KVxuICAgICkge1xuICAgICAgdGhpcy5mb3Jtc0xpc3QgPSB0aGlzLnVzZXJDb25maWcudXNlckZvcm1GaWVsZHNbZm9ybVN0ZXBLZXldO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVzZXJDb25maWcudXNlckZvcm1GaWVsZHMpKSB7XG4gICAgICB0aGlzLmZvcm1zTGlzdCA9IHRoaXMudXNlckNvbmZpZy51c2VyRm9ybUZpZWxkcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgdXNlckZvcm1GaWVsZHMgZG9lc24ndCBoYXZlIGEgZm9ybSBkZWZpbmVkIHdpdGgga2V5OiAke2Zvcm1TdGVwS2V5fWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0aWFsaXplRm9ybXMoXCJPTl9JTklUXCIpO1xuICAgIHRoaXMudG9nZ2xlTG9hZGVyKGZhbHNlKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCB2ZXJpZnlDaGFuZ2UgPSAocHJvcDogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJiAhY2hhbmdlc1twcm9wXS5maXJzdENoYW5nZTtcbiAgICB9O1xuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJ1c2VyQ29uZmlnXCIpKSB7XG4gICAgICB0aGlzLnVzZXJDb25maWcgPSBjaGFuZ2VzLnVzZXJDb25maWcuY3VycmVudFZhbHVlO1xuICAgICAgdGhpcy50b2dnbGVMb2FkZXIoZmFsc2UpO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwic3RlcENvbmZpZ1wiKSkge1xuICAgICAgdGhpcy5zdGVwQ29uZmlnID0gY2hhbmdlcy5zdGVwQ29uZmlnLmN1cnJlbnRWYWx1ZTtcbiAgICAgIHRoaXMudG9nZ2xlTG9hZGVyKGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImZvcm1zRGF0YVwiKSkge1xuICAgICAgdGhpcy5mb3Jtc0RhdGEgPSBjaGFuZ2VzLmZvcm1zRGF0YS5jdXJyZW50VmFsdWU7XG5cbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm1zKFwiT05fQ0hBTkdFXCIpO1xuICAgIH1cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiYXBpQ2FsbFJlc3BvbnNlXCIpKSB7XG4gICAgICB0aGlzLmFwaUNhbGxSZXNwb25zZSA9IGNoYW5nZXMuYXBpQ2FsbFJlc3BvbnNlLmN1cnJlbnRWYWx1ZTtcbiAgICAgIHRoaXMudG9nZ2xlTG9hZGVyKGZhbHNlKTtcbiAgICB9XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImJ1dHRvbkNsaWNrUmVzcG9uc2VcIikpIHtcbiAgICAgIHRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZSA9IGNoYW5nZXMuYnV0dG9uQ2xpY2tSZXNwb25zZS5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLnRvZ2dsZUxvYWRlcihmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICB0cmlnZ2VyTG9ncyhldmVudFR5cGU6IEVMb2dFdmVudFR5cGUsIGxvZ3M6IGFueSkge1xuICAgIHRoaXMuZ2V0TG9ncy5lbWl0KGZvcm1hdEV2ZW50TG9ncyhldmVudFR5cGUsIHRoaXMuc3RlcENvbmZpZywgbG9ncykpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICB0b2dnbGVMb2FkZXIobG9hZGVyKSB7XG4gICAgaWYgKGxvYWRlcikge1xuICAgICAgdGhpcy5sb2FkZXJTZXJ2aWNlLnNob3coe1xuICAgICAgICBmdWxsc2NyZWVuOiB0cnVlLFxuICAgICAgICBsb2FkZXJUZXh0OiBcIlBsZWFzZSB3YWl0XCJcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvYWRlclNlcnZpY2UuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgZmV0Y2hGb3JtQ29uZmlnKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgbWV0aG9kOiBcIkdFVFwiIH0pO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplRm9ybXMoZXZlbnRUeXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRvZ2dsZUxvYWRlcih0cnVlKTtcblxuICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gdGhpcy5mb3Jtc0RhdGE7XG5cbiAgICBhd2FpdCB0aGlzLnVwZGF0ZUZvcm1zTGlzdCgpO1xuXG4gICAgaWYgKFxuICAgICAgZXZlbnRUeXBlID09PSBcIk9OX0NIQU5HRVwiICYmXG4gICAgICB0aGlzLmZpbmRGb3Jtc0xpc3RMZW5ndGgodGhpcy5mb3Jtc0xpc3QpID09PSAxXG4gICAgKSB7XG4gICAgICB0aGlzLmhhbmRsZU9uQ2xpY2tTdWJtaXRGb3JtcyhudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVSZXNpemUodGhpcy5mb3Jtc0xpc3QpO1xuXG4gICAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKHRoaXMuYWN0aXZlRm9ybUNvbmZpZykpIHtcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKHRoaXMuYWN0aXZlRm9ybUNvbmZpZywgXCJ0eXBlXCIpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZlRm9ybUNvbmZpZy50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVPbkNsaWNrU2V0QWN0aXZlRm9ybShcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmVGb3JtQ29uZmlnLmtleSxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZU9uQ2xpY2tTZXRBY3RpdmVGb3JtKFxuICAgICAgICAgICAgdGhpcy5hY3RpdmVGb3JtQ29uZmlnLmtleSxcbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMudG9nZ2xlTG9hZGVyKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGNvbnZlcnRGb3JtTGlzdENvbmZpZyhmb3Jtc0xpc3Q6IGFueVtdKTogYW55W10ge1xuICAgIGNvbnN0IGNvbnZlcnRGb3JtTGlzdENvbmZpZ1R5cGVGb3JtID0gKGZvcm06IGFueSkgPT4ge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiZm9ybUNvbnRlbnRcIikpIHtcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0uZm9ybUNvbnRlbnQsIFwidXJsXCIpKSB7XG4gICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwicHJvcHMudXJsXCIsIGZvcm0uZm9ybUNvbnRlbnQudXJsKTtcbiAgICAgICAgICBkZWxldGUgZm9ybVtcImZvcm1Db250ZW50XCJdW1widXJsXCJdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLmZvcm1Db250ZW50LCBcInBhdGhcIikpIHtcbiAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgICBmb3JtLFxuICAgICAgICAgICAgXCJwcm9wcy5wYXRoXCIsXG4gICAgICAgICAgICBmb3JtLmZvcm1Db250ZW50LnBhdGhcbiAgICAgICAgICApO1xuICAgICAgICAgIGRlbGV0ZSBmb3JtW1wiZm9ybUNvbnRlbnRcIl1bXCJwYXRoXCJdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNFbXB0eVZhbHVlKGZvcm0uZm9ybUNvbnRlbnQpKSB7XG4gICAgICAgIGRlbGV0ZSBmb3JtW1wiZm9ybUNvbnRlbnRcIl07XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJ0aXRsZVwiKSkge1xuICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJwcm9wcy50aXRsZVwiLCBmb3JtLnRpdGxlKTtcbiAgICAgICAgZGVsZXRlIGZvcm1bXCJ0aXRsZVwiXTtcbiAgICAgIH1cbiAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJoaWRkZW5cIikpIHtcbiAgICAgICAgZm9ybS5oaWRkZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJkaXNhYmxlZFwiKSkge1xuICAgICAgICBmb3JtLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIWNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwicmVxdWlyZWRcIikpIHtcbiAgICAgICAgZm9ybS5yZXF1aXJlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoIWNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiZGVwZW5kZW50T25cIikpIHtcbiAgICAgICAgZm9ybS5kZXBlbmRlbnRPbiA9IFtdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm9ybTtcbiAgICB9O1xuXG4gICAgY29uc3QgY29udmVydEZvcm1MaXN0Q29uZmlnVHlwZUh0bWwgPSAoZm9ybTogYW55KSA9PiB7XG4gICAgICBpZiAoZm9ybS50eXBlID09PSBcImh0bWxcIikge1xuICAgICAgICBmb3JtLnR5cGUgPSBFRm9ybVR5cGUuSFRNTDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaHRtbENvbnRlbnRcIikpIHtcbiAgICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcInByb3BzXCIpKSB7XG4gICAgICAgICAgZm9ybS5wcm9wcyA9IHtcbiAgICAgICAgICAgIGh0bWxDb250ZW50OiBmb3JtLmh0bWxDb250ZW50XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgZm9ybVtcImh0bWxDb250ZW50XCJdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcInByb3BzXCIpKSB7XG4gICAgICAgICAgZm9ybS5wcm9wcyA9IHtcbiAgICAgICAgICAgIGh0bWxDb250ZW50OiBcIlwiXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwidGl0bGVcIikpIHtcbiAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwicHJvcHMudGl0bGVcIiwgZm9ybS50aXRsZSk7XG4gICAgICAgIGRlbGV0ZSBmb3JtW1widGl0bGVcIl07XG4gICAgICB9XG4gICAgICBpZiAoIWNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGZvcm0uaGlkZGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGZvcm1zTGlzdC5tYXAoKGZvcm0pID0+IHtcbiAgICAgIGlmICghY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJ0eXBlXCIpKSB7XG4gICAgICAgIGZvcm0udHlwZSA9IFwiRk9STVwiO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwidHlwZVwiKSkge1xuICAgICAgICBpZiAoZm9ybS50eXBlID09PSBFRm9ybVR5cGUuRk9STSkge1xuICAgICAgICAgIGZvcm0gPSBjb252ZXJ0Rm9ybUxpc3RDb25maWdUeXBlRm9ybShmb3JtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3JtLnR5cGUgPT09IEVGb3JtVHlwZS5IVE1MIHx8IGZvcm0udHlwZSA9PT0gXCJodG1sXCIpIHtcbiAgICAgICAgICBmb3JtID0gY29udmVydEZvcm1MaXN0Q29uZmlnVHlwZUh0bWwoZm9ybSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZvcm07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTk9URTogVG8gYmUgZGVwcmVjYXRlZC5cbiAgICogV2h5ID8gV2lsbCBiZSBkaXJlY3RseSBhc3NpZ25lZCB3aGlsZSBleGVjdXRpbmcgJ2NoYWtyYScgZm9yIGRlZmF1bHQgZm9ybSBjb25maWcuXG4gICAqIEBwYXJhbSBmb3Jtc0xpc3QgYW55W11cbiAgICogQHBhcmFtIGZvcm1zTGlzdENvbXBsZXRlZCBzdHJpbmdbXVxuICAgKiBAcmV0dXJucyBhbnlbXVxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBhc3NpZ25TZXF1ZW5jZU5vVG9Gb3JtKGZvcm1zTGlzdDogYW55W10pOiBhbnlbXSB7XG4gICAgbGV0IHNlcXVlbmNlTm8gPSAxO1xuICAgIGZvciAobGV0IGZvcm0gb2YgZm9ybXNMaXN0KSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJoaWRkZW5cIikpIHtcbiAgICAgICAgaWYgKCFmb3JtLmhpZGRlbiAmJiBmb3JtLnR5cGUgIT09IEVGb3JtVHlwZS5IVE1MKSB7XG4gICAgICAgICAgZm9ybS5zZXF1ZW5jZU5vID0gc2VxdWVuY2VObysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBmb3JtW1wic2VxdWVuY2VOb1wiXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmb3Jtc0xpc3Q7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpbmRDb21wbGV0ZWRGb3Jtc0xpc3QoYWxsRm9ybXNEYXRhOiBhbnkpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGZvcm1zTGlzdENvbXBsZXRlZDogc3RyaW5nW10gPSBbXTtcblxuICAgIE9iamVjdC5rZXlzKGFsbEZvcm1zRGF0YSkubWFwKChmb3JtS2V5KSA9PiB7XG4gICAgICBmb3Jtc0xpc3RDb21wbGV0ZWQucHVzaChmb3JtS2V5KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBmb3Jtc0xpc3RDb21wbGV0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogTk9URTogVG8gYmUgZGVwcmVjYXRlZC4gV2h5ID8gV2lsbCBiZSByZXBsYWNlZCBieSAnY2hha3JhJy5cbiAgICogQHBhcmFtIGZvcm1zTGlzdCBhbnlbXVxuICAgKiBAcGFyYW0gZm9ybXNMaXN0Q29tcGxldGVkIHN0cmluZ1tdXG4gICAqIEByZXR1cm5zIGFueVtdXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIG1hcmtGb3JtSW5Gb3Jtc0xpc3RBc0NvbXBsZXRlZChcbiAgICBmb3Jtc0xpc3Q6IGFueVtdLFxuICAgIGZvcm1zTGlzdENvbXBsZXRlZDogc3RyaW5nW11cbiAgKTogYW55W10ge1xuICAgIGZvciAobGV0IGZvcm0gb2YgZm9ybXNMaXN0KSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJoaWRkZW5cIikpIHtcbiAgICAgICAgaWYgKCFmb3JtLmhpZGRlbiAmJiBmb3JtLnR5cGUgIT09IEVGb3JtVHlwZS5IVE1MKSB7XG4gICAgICAgICAgaWYgKGZvcm1zTGlzdENvbXBsZXRlZC5pbmNsdWRlcyhmb3JtLmtleSkpIHtcbiAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcInN0YXR1c1wiLCBcImNvbXBsZXRlZFwiKTtcbiAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcImRpc2FibGVkXCIsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybXNMaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIE5PVEU6IFRvIGJlIGRlcHJlY2F0ZWQuIFdoeSA/IFdpbGwgYmUgcmVwbGFjZWQgYnkgJ2NoYWtyYScuXG4gICAqIEBwYXJhbSBmb3Jtc0xpc3QgYW55W11cbiAgICogQHBhcmFtIGZvcm1zTGlzdENvbXBsZXRlZCBzdHJpbmdbXVxuICAgKiBAcmV0dXJucyBhbnlbXVxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBtYXJrRm9ybUluRm9ybXNMaXN0QXNEaXNhYmxlZChcbiAgICBmb3Jtc0xpc3Q6IGFueVtdLFxuICAgIGZvcm1zTGlzdENvbXBsZXRlZDogc3RyaW5nW11cbiAgKTogYW55W10ge1xuICAgIGZvciAobGV0IGZvcm0gb2YgZm9ybXNMaXN0KSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJoaWRkZW5cIikpIHtcbiAgICAgICAgaWYgKCFmb3JtLmhpZGRlbiAmJiBmb3JtLnR5cGUgIT09IEVGb3JtVHlwZS5IVE1MKSB7XG4gICAgICAgICAgaWYgKGZvcm0uc3RhdHVzICE9PSBcImNvbXBsZXRlZFwiKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJkZXBlbmRlbnRPblwiKSkge1xuICAgICAgICAgICAgICBjb25zdCBpc0RlcGVuZGVudCA9IGZvcm0uZGVwZW5kZW50T24uZXZlcnkoKHI6IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICBmb3Jtc0xpc3RDb21wbGV0ZWQuaW5jbHVkZXMocilcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGlzRGVwZW5kZW50KSB7XG4gICAgICAgICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwic3RhdHVzXCIsIFwiZWRpdGFibGVcIik7XG4gICAgICAgICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwiZGlzYWJsZWRcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvcm0gPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChmb3JtLCBcInN0YXR1c1wiLCBcImxvY2tlZFwiKTtcbiAgICAgICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJkaXNhYmxlZFwiLCB0cnVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwiZGVwZW5kZW50T25cIiwgW10pO1xuICAgICAgICAgICAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJzdGF0dXNcIiwgXCJlZGl0YWJsZVwiKTtcbiAgICAgICAgICAgICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwiZGlzYWJsZWRcIiwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmb3Jtc0xpc3Q7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGZpbHRlckFsbEZvcm1zRGF0YShhbGxGb3Jtc0RhdGE6IGFueSwgZm9ybXNMaXN0OiBhbnlbXSk6IGFueSB7XG4gICAgbGV0IGN1cnJlbnRVc2VyRm9ybUFsbEZvcm1zRGF0YTogYW55ID0ge307XG5cbiAgICBmb3IgKGxldCBmb3JtIG9mIGZvcm1zTGlzdCkge1xuICAgICAgaWYgKFxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSAmJlxuICAgICAgICAhZm9ybS5oaWRkZW4gJiZcbiAgICAgICAgZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTFxuICAgICAgKSB7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhbGxGb3Jtc0RhdGEsIGZvcm0ua2V5KSkge1xuICAgICAgICAgIGN1cnJlbnRVc2VyRm9ybUFsbEZvcm1zRGF0YSA9IHtcbiAgICAgICAgICAgIC4uLmN1cnJlbnRVc2VyRm9ybUFsbEZvcm1zRGF0YSxcbiAgICAgICAgICAgIFtmb3JtLmtleV06IGFsbEZvcm1zRGF0YVtmb3JtLmtleV1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRVc2VyRm9ybUFsbEZvcm1zRGF0YTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgY2hlY2tJZkZvcm1zU3RhdHVzQ29tcGxldGVkKFxuICAgIGZvcm1zTGlzdDogYW55LFxuICAgIGZvcm1zTGlzdENvbXBsZXRlZDogc3RyaW5nW11cbiAgKTogYW55IHtcbiAgICBsZXQgYWxsRm9ybXNDb21wbGV0ZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgZm9yIChjb25zdCBmb3JtIG9mIGZvcm1zTGlzdCkge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgIGlmICghZm9ybS5oaWRkZW4gJiYgZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCkge1xuICAgICAgICAgIGlmIChmb3JtLnN0YXR1cyAhPT0gXCJjb21wbGV0ZWRcIikge1xuICAgICAgICAgICAgYWxsRm9ybXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhbGxGb3Jtc0NvbXBsZXRlZDtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmluZEFjdGl2ZUZvcm1Db25maWcoZm9ybXNMaXN0OiBhbnlbXSk6IGFueSB7XG4gICAgY29uc3QgYWN0aXZlRm9ybUNvbmZpZyA9IGZvcm1zTGlzdC5maW5kKChmb3JtKSA9PiB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJoaWRkZW5cIikpIHtcbiAgICAgICAgaWYgKCFmb3JtLmhpZGRlbiAmJiBmb3JtLnR5cGUgIT09IEVGb3JtVHlwZS5IVE1MKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm0uc3RhdHVzID09PSBcImVkaXRhYmxlXCIgJiYgIWZvcm0uZGlzYWJsZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYWN0aXZlRm9ybUNvbmZpZztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgdXBkYXRlRm9ybXNMaXN0KCkge1xuICAgIHRoaXMuZm9ybXNMaXN0ID0gdGhpcy5jb252ZXJ0Rm9ybUxpc3RDb25maWcodGhpcy5mb3Jtc0xpc3QpO1xuXG4gICAgZm9yIChsZXQgZm9ybSBvZiB0aGlzLmZvcm1zTGlzdCkge1xuICAgICAgaWYgKFxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImRlZmF1bHRcIikgJiZcbiAgICAgICAgaXNOb3RFbXB0eVZhbHVlKGZvcm0uZGVmYXVsdClcbiAgICAgICkge1xuICAgICAgICBjb25zdCB0cmlnZ2VyczogQXJyYXk8VFRyaWdnZXI+ID0gZm9ybS5kZWZhdWx0LnRyaWdnZXJzO1xuICAgICAgICBjb25zdCBydWxlczogQXJyYXk8VFJ1bGU+ID0gZm9ybS5kZWZhdWx0LnJ1bGVzO1xuICAgICAgICBjb25zdCBhY3Rpb25zOiBBcnJheTxUQWN0aW9uPiA9IGZvcm0uZGVmYXVsdC5hY3Rpb25zO1xuXG4gICAgICAgIGNvbnN0IHJ1bGVzTWFwcGluZyA9IG5ldyBSdWxlKHJ1bGVzLCB7XG4gICAgICAgICAgVVNFUl9DT05GSUc6IHRoaXMudXNlckNvbmZpZyxcbiAgICAgICAgICBGT1JNU19MSVNUOiB0aGlzLmZvcm1zTGlzdCxcbiAgICAgICAgICBBTExfRk9STVNfREFUQTogdGhpcy5hbGxGb3Jtc0RhdGFcbiAgICAgICAgfSkubWFwcGluZygpO1xuXG4gICAgICAgIGZvciAobGV0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICAgICAgY29uc3QgY29uZGl0aW9uRXZhbHVhdGlvbiA9IG5ldyBDb25kaXRpb24oXG4gICAgICAgICAgICBhY3Rpb24uY29uZGl0aW9uLFxuICAgICAgICAgICAgcnVsZXNNYXBwaW5nXG4gICAgICAgICAgKS5ldmFsdWF0ZSgpO1xuXG4gICAgICAgICAgaWYgKGNvbmRpdGlvbkV2YWx1YXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9uKFxuICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgIHJ1bGVzTWFwcGluZyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIEZPUk1TX0xJU1Q6IHRoaXMuZm9ybXNMaXN0LFxuICAgICAgICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmFsbEZvcm1zRGF0YVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIWNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwiaGlkZGVuXCIpKSB7XG4gICAgICAgICAgZm9ybS5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZm9ybXNMaXN0ID0gdGhpcy5hc3NpZ25TZXF1ZW5jZU5vVG9Gb3JtKHRoaXMuZm9ybXNMaXN0KTtcblxuICAgIC8qKlxuICAgICAqIEJlbG93IGNvZGUgaWRlbnRpZmllcyB0aGUgYWxsRm9ybXNEYXRhIHJlcXVpcmVkIGZvciB0aGUgY3VycmVudCBVc2VyIEZvcm0uXG4gICAgICogV2h5PyBCZWNhdXNlIGFsbEZvcm1zRGF0YSB3aWxsIGFjdHVhbGx5IGNvbnRhaW4gdGhlIHdob2xlIGpvdXJuZXkncyBhbGxcbiAgICAgKiBwb3NzaWJsZSBVc2VyIEZvcm0gc3RlcHMuIFNvLCBpdCBpcyBpbXBvcnRhbnQgdG8gc2V0IHRoZSBmb3JtIGRhdGEgd2hpY2hcbiAgICAgKiB0aGlzIHBhcnRpY3VsYXIgVXNlciBGb3JtIG9ubHkgaGFzIHRvIExPQ0FMIE1FVEhPRCBWYXJpYWJsZS5cbiAgICAgKi9cbiAgICBjb25zdCBjdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGEgPSB0aGlzLmZpbHRlckFsbEZvcm1zRGF0YShcbiAgICAgIHRoaXMuYWxsRm9ybXNEYXRhLFxuICAgICAgdGhpcy5mb3Jtc0xpc3RcbiAgICApO1xuXG4gICAgdGhpcy5mb3Jtc0xpc3RDb21wbGV0ZWQgPSB0aGlzLmZpbmRDb21wbGV0ZWRGb3Jtc0xpc3QoXG4gICAgICBjdXJyZW50VXNlckZvcm1BbGxGb3Jtc0RhdGFcbiAgICApO1xuXG4gICAgdGhpcy5mb3Jtc0xpc3QgPSB0aGlzLm1hcmtGb3JtSW5Gb3Jtc0xpc3RBc0NvbXBsZXRlZChcbiAgICAgIHRoaXMuZm9ybXNMaXN0LFxuICAgICAgdGhpcy5mb3Jtc0xpc3RDb21wbGV0ZWRcbiAgICApO1xuXG4gICAgdGhpcy5mb3Jtc0xpc3QgPSB0aGlzLm1hcmtGb3JtSW5Gb3Jtc0xpc3RBc0Rpc2FibGVkKFxuICAgICAgdGhpcy5mb3Jtc0xpc3QsXG4gICAgICB0aGlzLmZvcm1zTGlzdENvbXBsZXRlZFxuICAgICk7XG5cbiAgICB0aGlzLmZvcm1zTGlzdCA9IGdldE9iamVjdERlZXBDb3B5KHRoaXMuZm9ybXNMaXN0KTtcblxuICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZyA9IHRoaXMuZmluZEFjdGl2ZUZvcm1Db25maWcodGhpcy5mb3Jtc0xpc3QpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBzaG93UHJldmlldyhwcmV2aWV3UHJvcGVydGllczogYW55KTogdm9pZCB7XG4gICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcyA9IG1lcmdlT2JqZWN0cyhcbiAgICAgIHRoaXMucHJldmlld1Byb3BlcnRpZXMsXG4gICAgICBwcmV2aWV3UHJvcGVydGllc1xuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICBpc0VtcHR5VmFsdWUodGhpcy5wcmV2aWV3UHJvcGVydGllcy5pZnJhbWUuc3JjKSAmJlxuICAgICAgaXNFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMuaHRtbC5iZWZvcmUpICYmXG4gICAgICBpc0VtcHR5VmFsdWUodGhpcy5wcmV2aWV3UHJvcGVydGllcy5odG1sLmFmdGVyKSAmJlxuICAgICAgaXNFbXB0eVZhbHVlKHRoaXMucHJldmlld1Byb3BlcnRpZXMucG9wdXBGb3JtS2V5KVxuICAgICkge1xuICAgICAgdGhpcy5wcmV2aWV3UHJvcGVydGllcy51bmF2YWlsYWJsZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc05vdEVtcHR5VmFsdWUodGhpcy5wcmV2aWV3UHJvcGVydGllcy5wb3B1cEZvcm1LZXkpKSB7XG4gICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLmFjdGl2ZUZvcm1Db25maWcsIFwicG9wdXBGb3Jtc1wiKSkge1xuICAgICAgICAgIHRoaXMucG9wdXBGb3JtQ29uZmlnID1cbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZy5wb3B1cEZvcm1zW1xuICAgICAgICAgICAgICB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLnBvcHVwRm9ybUtleVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNvbmZpZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnByZXZpZXdQcm9wZXJ0aWVzLnVuYXZhaWxhYmxlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5wcmV2aWV3RGlhbG9nU2VydmljZS5vcGVuKHRoaXMucHJldmlldyB8fCBcIlwiKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZm9ybUhpZGUoZm9ybUtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGZvcm0gPSBnZXRGb3JtQ29uZmlnQnlLZXkodGhpcy5mb3Jtc0xpc3QsIGZvcm1LZXkpO1xuXG4gICAgZm9ybSA9IHNldFZhbHVlVG9PYmplY3RQYXRoKGZvcm0sIFwiaGlkZGVuXCIsIHRydWUpO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBmb3JtU2hvdyhmb3JtS2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsZXQgZm9ybSA9IGdldEZvcm1Db25maWdCeUtleSh0aGlzLmZvcm1zTGlzdCwgZm9ybUtleSk7XG5cbiAgICBmb3JtID0gc2V0VmFsdWVUb09iamVjdFBhdGgoZm9ybSwgXCJoaWRkZW5cIiwgZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgdGFrZUFjdGlvbihhY3Rpb246IGFueSwgb2JqZWN0OiBhbnkpIHtcbiAgICAvKipcbiAgICAgKiBUaGlzIGJlbG93IGNvZGUgaXMgY3VycmVudGx5IGNvbW1lbnRlZCBiZWNhdXNlIG5vdCBhbGwgYWN0aW9ucyBuZWVkIHRvIGJlIGxvZ2dlZCBhdCBiYWNrZW5kLlxuICAgICAqIFdpbGwgbG9vayBsYXRlciBpbnRvIHdoZXJlIG9ubHkgc3BlY2lmaWMgYWN0aW9ucyBuZWVkcyB0byBiZSBsb2dnZWQgb3IgYWxsLlxuICAgICAqIEN1cnJlbnRseSBsb2dzIGFyZSBzZW50IGZyb20gd2l0aGluZyB0aGUgYWN0aW9uJ3Mgc3BlY2lmaWMgbWV0aG9kcy5cbiAgICAgKiBDb2RlIC1cbiAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX0FDVElPTl9FWEVDVVRFLCB7XG4gICAgICAgICAgYWN0aW9uX2tleTogYWN0aW9uLmtleSxcbiAgICAgICAgICAuLi4oYWN0aW9uLmlkICYmIHsgYWN0aW9uX2lkOiBhY3Rpb24uaWQgfSlcbiAgICAgICAgfSk7XG4gICAgKi9cblxuICAgIHN3aXRjaCAoYWN0aW9uLmtleSkge1xuICAgICAgY2FzZSBFUmVuZGVyZXJBY3Rpb25LZXkuRk9STV9ISURFOlxuICAgICAgICB0aGlzLmZvcm1IaWRlKGFjdGlvbi5wcm9wcy5mb3JtS2V5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVSZW5kZXJlckFjdGlvbktleS5GT1JNX1NIT1c6XG4gICAgICAgIHRoaXMuZm9ybVNob3coYWN0aW9uLnByb3BzLmZvcm1LZXkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRUFjdGlvbktleS5TRVRfVkFMVUU6XG4gICAgICAgIGNvbnN0IHNvdXJjZXMgPSBuZXcgU291cmNlKHtcbiAgICAgICAgICBVU0VSX0NPTkZJRzogdGhpcy51c2VyQ29uZmlnLFxuICAgICAgICAgIEFMTF9GT1JNU19EQVRBOiB0aGlzLmZvcm1zRGF0YVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzb3VyY2VWYWx1ZSA9IGF3YWl0IHNvdXJjZXMuZ2V0VmFsdWVGcm9tU291cmNlKFxuICAgICAgICAgIGFjdGlvbi5wcm9wcy52YWx1ZS5zb3VyY2VcbiAgICAgICAgKTtcbiAgICAgICAgc291cmNlcy5zZXRWYWx1ZVRvU291cmNlKGFjdGlvbi5wcm9wcy52YWx1ZS5kZXN0aW5hdGlvbiwgc291cmNlVmFsdWUpO1xuXG4gICAgICAgIHRoaXMudXNlckNvbmZpZyA9IHNvdXJjZXMub2JqZWN0LlVTRVJfQ09ORklHO1xuICAgICAgICB0aGlzLmZvcm1zRGF0YSA9IHNvdXJjZXMub2JqZWN0LkFMTF9GT1JNU19EQVRBO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZmluZEZvcm1zTGlzdExlbmd0aChmb3Jtc0xpc3Q6IGFueVtdKTogbnVtYmVyIHtcbiAgICBjb25zdCBfZm9ybXNMaXN0ID0gZm9ybXNMaXN0LmZpbHRlcigoZm9ybSkgPT4ge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGZvcm0sIFwidHlwZVwiKSkge1xuICAgICAgICBpZiAoZm9ybS50eXBlICE9PSBFRm9ybVR5cGUuSFRNTCkge1xuICAgICAgICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhmb3JtLCBcImhpZGRlblwiKSkge1xuICAgICAgICAgICAgaWYgKCFmb3JtLmhpZGRlbikge1xuICAgICAgICAgICAgICByZXR1cm4gZm9ybTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoZm9ybSwgXCJoaWRkZW5cIikpIHtcbiAgICAgICAgaWYgKCFmb3JtLmhpZGRlbikge1xuICAgICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX2Zvcm1zTGlzdC5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogTGlicmFyeSBFdmVudCBMaXN0ZW5lcnNcbiAgICovXG5cbiAgLyoqXG4gICAqIEZvcm1MaXN0IC0gTGlzdGVucyB0byBldmVudCBvZiBvcGVuaW5nIHRoZSBGb3JtVmlldyBvZiB3aGVuIGFueSBmb3JtIGlzIGNsaWNrZWQgaW4gRm9ybUxpc3RcbiAgICogQHBhcmFtIHNlbGVjdGVkRm9ybSBzdHJpbmdcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlT25DbGlja1NldEFjdGl2ZUZvcm0oc2VsZWN0ZWRGb3JtOiBzdHJpbmcsIHRyaWdnZXJUeXBlOiBhbnkpIHtcbiAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgdGhpcy50b2dnbGVMb2FkZXIodHJ1ZSk7XG4gICAgdGhpcy5pc1Vuc2F2ZWREYXRhID0gZmFsc2U7XG5cbiAgICBsZXQgYWN0aXZlRm9ybUNvbmZpZyA9IHRoaXMuZm9ybXNMaXN0LmZpbmQoKGZvcm0pID0+IHtcbiAgICAgIGlmIChmb3JtLmtleSA9PT0gc2VsZWN0ZWRGb3JtKSB7XG4gICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWN0aXZlRm9ybUNvbmZpZyA9IG5ldyBDb252ZXJ0ZXIoKS51cGRhdGVGb3JtQ29uZmlnUHJvcGVydGllcyhcbiAgICAgIGFjdGl2ZUZvcm1Db25maWdcbiAgICApO1xuXG4gICAgbGV0IGZvcm1Db25maWc6IGFueSA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChjaGVja09iamVjdEtleUV4aXN0cyhhY3RpdmVGb3JtQ29uZmlnLCBcInByb3BzXCIpKSB7XG4gICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aXZlRm9ybUNvbmZpZy5wcm9wcywgXCJ1cmxcIikpIHtcbiAgICAgICAgY29uc3QgZm9ybUNvbmZpZ0Zyb21VcmwgPSBhd2FpdCB0aGlzLmZldGNoRm9ybUNvbmZpZyhcbiAgICAgICAgICBhY3RpdmVGb3JtQ29uZmlnLnByb3BzLnVybFxuICAgICAgICApO1xuICAgICAgICBmb3JtQ29uZmlnID0ge1xuICAgICAgICAgIC4uLmFjdGl2ZUZvcm1Db25maWcsXG4gICAgICAgICAgLi4uZm9ybUNvbmZpZ0Zyb21VcmxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGl2ZUZvcm1Db25maWcucHJvcHMsIFwicGF0aFwiKSAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLnVzZXJDb25maWcsIFwiYmFja2VuZFwiKSAmJlxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyh0aGlzLnVzZXJDb25maWcuYmFja2VuZCwgXCJDT05GSUdfQkFTRV9VUkxcIilcbiAgICAgICkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnVzZXJDb25maWc/LmJhY2tlbmQ/LkNPTkZJR19CQVNFX1VSTH0ke2FjdGl2ZUZvcm1Db25maWcucHJvcHMucGF0aH1gO1xuICAgICAgICBjb25zdCBmb3JtQ29uZmlnRnJvbVBhdGggPSBhd2FpdCB0aGlzLmZldGNoRm9ybUNvbmZpZyh1cmwpO1xuICAgICAgICBmb3JtQ29uZmlnID0ge1xuICAgICAgICAgIC4uLmFjdGl2ZUZvcm1Db25maWcsXG4gICAgICAgICAgLi4uZm9ybUNvbmZpZ0Zyb21QYXRoXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aXZlRm9ybUNvbmZpZywgXCJ0eXBlXCIpICYmXG4gICAgICAgICAgYWN0aXZlRm9ybUNvbmZpZy50eXBlID09PSBFRm9ybVR5cGUuRk9STVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoY2hlY2tPYmplY3RLZXlFeGlzdHMoYWN0aXZlRm9ybUNvbmZpZywgXCJmaWVsZHNcIikpIHtcbiAgICAgICAgICAgIGZvcm1Db25maWcgPSBhY3RpdmVGb3JtQ29uZmlnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIk5vIERpcmVjdCBVUkwsIE5vIFBhdGggd2l0aCBCYXNlIFVSTCwgTm8gZmllbGRzIGtleSBmb3VuZCBpbiBBY3RpdmUgRm9ybSdzIENvbmZpZyFcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBObyBEaXJlY3QgVVJMLCBObyBQYXRoIHdpdGggQmFzZSBVUkwsIE5vIGZpZWxkcyBrZXkgZm91bmQgaW4gQWN0aXZlIEZvcm0ncyBDb25maWchYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGl2ZUZvcm1Db25maWcuZm9ybUNvbnRlbnQsIFwidXJsXCIpKSB7XG4gICAgICAgIGNvbnN0IGZvcm1Db25maWdGcm9tVXJsID0gYXdhaXQgdGhpcy5mZXRjaEZvcm1Db25maWcoXG4gICAgICAgICAgYWN0aXZlRm9ybUNvbmZpZy5mb3JtQ29udGVudC51cmxcbiAgICAgICAgKTtcbiAgICAgICAgZm9ybUNvbmZpZyA9IHtcbiAgICAgICAgICAuLi5hY3RpdmVGb3JtQ29uZmlnLFxuICAgICAgICAgIC4uLmZvcm1Db25maWdGcm9tVXJsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjaGVja09iamVjdEtleUV4aXN0cyhhY3RpdmVGb3JtQ29uZmlnLmZvcm1Db250ZW50LCBcInBhdGhcIikgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy51c2VyQ29uZmlnLCBcImJhY2tlbmRcIikgJiZcbiAgICAgICAgY2hlY2tPYmplY3RLZXlFeGlzdHModGhpcy51c2VyQ29uZmlnLmJhY2tlbmQsIFwiQ09ORklHX0JBU0VfVVJMXCIpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy51c2VyQ29uZmlnPy5iYWNrZW5kPy5DT05GSUdfQkFTRV9VUkx9JHthY3RpdmVGb3JtQ29uZmlnLnByb3BzLnBhdGh9YDtcbiAgICAgICAgY29uc3QgZm9ybUNvbmZpZ0Zyb21QYXRoID0gYXdhaXQgdGhpcy5mZXRjaEZvcm1Db25maWcodXJsKTtcbiAgICAgICAgZm9ybUNvbmZpZyA9IHtcbiAgICAgICAgICAuLi5hY3RpdmVGb3JtQ29uZmlnLFxuICAgICAgICAgIC4uLmZvcm1Db25maWdGcm9tUGF0aFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGNoZWNrT2JqZWN0S2V5RXhpc3RzKGFjdGl2ZUZvcm1Db25maWcsIFwiZmllbGRzXCIpKSB7XG4gICAgICAgICAgZm9ybUNvbmZpZyA9IGFjdGl2ZUZvcm1Db25maWc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiTm8gRGlyZWN0IFVSTCwgTm8gUGF0aCB3aXRoIEJhc2UgVVJMLCBObyBmaWVsZHMga2V5IGZvdW5kIGluIEFjdGl2ZSBGb3JtJ3MgQ29uZmlnIVwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvcm1Db25maWcgPSBuZXcgQ29udmVydGVyKCkudXBkYXRlRm9ybUNvbmZpZ0Zyb21Vc2VyQ29uZmlnKFxuICAgICAgZm9ybUNvbmZpZyxcbiAgICAgIHRoaXMudXNlckNvbmZpZ1xuICAgICk7XG5cbiAgICBmb3JtQ29uZmlnID0gbmV3IENvbnZlcnRlcigpLnVwZGF0ZUZvcm1Db25maWdNaXNjZWxsYW5lb3VzKGZvcm1Db25maWcsIHtcbiAgICAgIGZvcm1zTGlzdExlbmd0aDogdGhpcy5maW5kRm9ybXNMaXN0TGVuZ3RoKHRoaXMuZm9ybXNMaXN0KVxuICAgIH0pO1xuXG4gICAgdGhpcy5hY3RpdmVGb3JtQ29uZmlnID0gbWVyZ2VPYmplY3RzKGFjdGl2ZUZvcm1Db25maWcsIGZvcm1Db25maWcpO1xuXG4gICAgc3dpdGNoICh0cmlnZ2VyVHlwZSkge1xuICAgICAgY2FzZSBcIkJVVFRPTl9DTElDS1wiOlxuICAgICAgICB0aGlzLnRyaWdnZXJMb2dzKEVMb2dFdmVudFR5cGUuRk9STV9fRk9STV9PUEVOX0JVVFRPTl9DTElDSywge1xuICAgICAgICAgIGZvcm1fa2V5OiB0aGlzLmFjdGl2ZUZvcm1Db25maWcua2V5LFxuICAgICAgICAgIGZvcm1fdGl0bGU6XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUZvcm1Db25maWc/LnRpdGxlID8/IHRoaXMuYWN0aXZlRm9ybUNvbmZpZz8ucHJvcHM/LnRpdGxlXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMudHJpZ2dlckxvZ3MoRUxvZ0V2ZW50VHlwZS5GT1JNX19GT1JNX09QRU5fQVVUTywge1xuICAgICAgICAgIGZvcm1fa2V5OiB0aGlzLmFjdGl2ZUZvcm1Db25maWcua2V5LFxuICAgICAgICAgIGZvcm1fdGl0bGU6XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUZvcm1Db25maWc/LnRpdGxlID8/IHRoaXMuYWN0aXZlRm9ybUNvbmZpZz8ucHJvcHM/LnRpdGxlXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDwgNjAwKSB7XG4gICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoID49IDYwMCkge1xuICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd0Zvcm0gPSB0cnVlO1xuICAgIHRoaXMudG9nZ2xlTG9hZGVyKGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtVmlldyAtIExpc3RlbnMgdG8gZXZlbnQgb2YgZXhlY3V0aW5nIGFuIEFQSSBjYWxsIGZyb20gd2l0aGluIHRoZSBGb3JtVmlldyBhbmQgZW1pdHMgKHJlYWQgYXMgcGFzc2VzKSB0aGUgc2FtZSBldmVudCB0byB0aGUgbGlicmFyeSBjb25zdW1lci5cbiAgICogQHBhcmFtIGUgYW55XG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIGhhbmRsZUdldFVuc2F2ZWRTdGF0ZShlOiBhbnkpIHtcbiAgICB0aGlzLmlzVW5zYXZlZERhdGEgPSBlO1xuICB9XG5cbiAgaGFuZGxlT25DbGlja0FwaUNhbGwoZTogYW55KSB7XG4gICAgdGhpcy5vbkNsaWNrQXBpQ2FsbC5lbWl0KGUpO1xuICB9XG5cbiAgaGFuZGxlT25DbGlja1ZpZXdGaWxlKGU6IGFueSkge1xuICAgIHRoaXMub25DbGlja1ZpZXdGaWxlLmVtaXQoZSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tGb3JtRmllbGRCdXR0b24oZTogYW55KSB7XG4gICAgdGhpcy5vbkNsaWNrRm9ybUZpZWxkQnV0dG9uLmVtaXQoZSk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQWN0aW9uU2hvd1BvcHVwRm9ybShlOiBhbnksIGNvbnRlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGUsIFwiYWN0aXZlRm9ybURhdGFcIikgJiZcbiAgICAgIGNoZWNrT2JqZWN0S2V5RXhpc3RzKGUsIFwicG9wdXBGb3JtQ29uZmlnXCIpXG4gICAgKSB7XG4gICAgICBjb25zdCBwb3B1cEZvcm1EYXRhID0geyBbdGhpcy5hY3RpdmVGb3JtQ29uZmlnLmtleV06IGUuYWN0aXZlRm9ybURhdGEgfTtcbiAgICAgIHRoaXMuYWN0aXZlUG9wdXBGb3JtRGF0YSA9IG1lcmdlT2JqZWN0cyh0aGlzLmFsbEZvcm1zRGF0YSwgcG9wdXBGb3JtRGF0YSk7XG5cbiAgICAgIHRoaXMucG9wdXBGb3JtQ29uZmlnID0gZS5wb3B1cEZvcm1Db25maWc7XG4gICAgICBjb25zdCBwb3B1cFR5cGUgPSBlPy5wb3B1cFR5cGUgPz8gXCJESUFMT0dcIjtcblxuICAgICAgc3dpdGNoIChwb3B1cFR5cGUpIHtcbiAgICAgICAgY2FzZSBcIkRJQUxPR1wiOlxuICAgICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nc1xuICAgICAgICAgICAgLm9wZW4oY29udGVudCwge1xuICAgICAgICAgICAgICBjbG9zZWFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgc2l6ZTogXCJzXCIsXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cEZvcm1DYWxsYmFjayA9IHtcbiAgICAgICAgICAgICAgICAgIHBvcHVwRm9ybURhdGE6IGRhdGFbXCJkYXRhXCJdLFxuICAgICAgICAgICAgICAgICAgcG9wdXBGb3JtQ29uZmlnOiBkYXRhW1wiZm9ybUNvbmZpZ1wiXSxcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUZvcm1Db25maWc6IHRoaXMuYWN0aXZlRm9ybUNvbmZpZ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVQb3B1cEZvcm1EYXRhID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cEZvcm1Db25maWcgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdEaWFsb2dSZWYuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNhbGxiYWNrID0ge1xuICAgICAgICAgICAgICAgICAgcG9wdXBGb3JtRGF0YToge30sXG4gICAgICAgICAgICAgICAgICBwb3B1cEZvcm1Db25maWc6IHRoaXMucG9wdXBGb3JtQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgYWN0aXZlRm9ybUNvbmZpZzogdGhpcy5hY3RpdmVGb3JtQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgc3RvcFRhc2tFeGVjdXRpb246IHRydWVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUG9wdXBGb3JtRGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMucG9wdXBGb3JtQ29uZmlnID0ge307XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJEaWFsb2cgZXJyb3JcIik7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiRGlhbG9nIGNsb3NlZFwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJQT1BVUFwiOlxuICAgICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZiA9IHRoaXMucHJldmlld0RpYWxvZ1NlcnZpY2VcbiAgICAgICAgICAgIC5vcGVuKHRoaXMucHJldmlldyB8fCBcIlwiKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cEZvcm1DYWxsYmFjayA9IHtcbiAgICAgICAgICAgICAgICAgIHBvcHVwRm9ybURhdGE6IGRhdGFbXCJkYXRhXCJdLFxuICAgICAgICAgICAgICAgICAgcG9wdXBGb3JtQ29uZmlnOiBkYXRhW1wiZm9ybUNvbmZpZ1wiXSxcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUZvcm1Db25maWc6IHRoaXMuYWN0aXZlRm9ybUNvbmZpZ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVQb3B1cEZvcm1EYXRhID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cEZvcm1Db25maWcgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdEaWFsb2dSZWYuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwRm9ybUNhbGxiYWNrID0ge1xuICAgICAgICAgICAgICAgICAgcG9wdXBGb3JtRGF0YToge30sXG4gICAgICAgICAgICAgICAgICBwb3B1cEZvcm1Db25maWc6IHRoaXMucG9wdXBGb3JtQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgYWN0aXZlRm9ybUNvbmZpZzogdGhpcy5hY3RpdmVGb3JtQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgc3RvcFRhc2tFeGVjdXRpb246IHRydWVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUG9wdXBGb3JtRGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMucG9wdXBGb3JtQ29uZmlnID0ge307XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJQcmV2aWV3IGVycm9yXCIpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIlByZXZpZXcgY2xvc2VkXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9ybVZpZXcgLSBMaXN0ZW5zIHRvIGV2ZW50IG9mIGdldHRpbmcgdGhlIEFjdGl2ZSBGb3JtJ3MgRGF0YSB3aGVuIHRoZSBGb3JtIGlzIFNhdmVkIGFuZCBlbWl0cyAocmVhZCBhcyBwYXNzZXMpIHRoZSBzYW1lIGV2ZW50IHRvIHRoZSBsaWJyYXJ5IGNvbnN1bWVyLlxuICAgKiBAcGFyYW0gZSBhbnlcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja1NhdmVGb3JtKFxuICAgIGU6IGFueSxcbiAgICBldmVudFR5cGU6IFwiRk9STVwiIHwgXCJQT1BVUF9GT1JNXCIsXG4gICAgY29udGV4dDogdW5kZWZpbmVkXG4gICkge1xuICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICBjYXNlIFwiRk9STVwiOlxuICAgICAgICB0aGlzLmlzVW5zYXZlZERhdGEgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50b2dnbGVMb2FkZXIodHJ1ZSk7XG5cbiAgICAgICAgdGhpcy5nZXRGb3JtRGF0YS5lbWl0KHtcbiAgICAgICAgICBbdGhpcy5hY3RpdmVGb3JtQ29uZmlnLmtleV06IHtcbiAgICAgICAgICAgIGZvcm1Db25maWc6IGVbXCJmb3JtQ29uZmlnXCJdLFxuICAgICAgICAgICAgZGF0YTogZVtcImRhdGFcIl0sXG4gICAgICAgICAgICBleHRlbmRlZERhdGE6IGVbXCJleHRlbmRlZERhdGFcIl1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJQT1BVUF9GT1JNXCI6XG4gICAgICAgIHRoaXMucHJldmlld0RpYWxvZ1JlZi5uZXh0KGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtVmlldyAtIExpc3RlbnMgdG8gZXZlbnQgb2Ygc2hvd2luZyB0aGUgRm9ybXMgTGlzdCBpbiBNb2JpbGUgVmlldy5cbiAgICogQHBhcmFtIGUgYW55XG4gICAqL1xuICBoYW5kbGVPbkNsaWNrVmlld0Zvcm1zKGU6IGFueSkge1xuICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgdGhpcy5zaG93Rm9ybSA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBldmVudCBvZiBnb2luZyBiYWNrIHRvIHRoZSBwcmV2aW91cyBmb3JtIGRpcmVjdGx5IG9yIGJ5IHRhYmJpbmcsIHdpdGhvdXQgc2hvd2luZyB0aGUgZm9ybSBsaXN0IGluIG1vYmlsZSB2aWV3LlxuICAgKlxuICAgKiBQcmVyZXF1aXNpdGU6IFRoZSBjdXJyZW50IGZvcm0gY2FuIG5ldmVyIGJlIGxvY2tlZDsgaXQgc2hvdWxkIGVpdGhlciBiZSBpbiBhbiBlZGl0YWJsZSBvciBjb21wbGV0ZWQgc3RhdGUuXG4gICAqXG4gICAqIExvZ2ljOlxuICAgKiAxLiBGb3IgRElSRUNUIG1vZGUsIGZpbmQgdGhlIGNvbmZpZyBvZiB0aGUgcHJldmlvdXMgZm9ybSBzdGFydGluZyBmcm9tIHRoZSBmaXJzdCBmb3JtLCBzdWNoIHRoYXQgdGhlIHByZXZpb3VzIGZvcm0gaXMgZWRpdGFibGUgYW5kIGl0cyBzZXF1ZW5jZSBudW1iZXIgaXMgb25lIGxlc3MgdGhhbiB0aGUgY3VycmVudCBhY3RpdmUgZm9ybSdzIHNlcXVlbmNlIG51bWJlci5cbiAgICogICAgSWYgbm8gcHJldmlvdXMgZm9ybSBpcyBmb3VuZCBvciBhbGwgZm9ybXMgaGF2ZSBiZWVuIGNvbXBsZXRlZCwgc2hvdyB0aGUgZm9ybSBsaXN0LlxuICAgKiAyLiBGb3IgVEFCQkVEIG1vZGUsIGZpbmQgdGhlIGNvbmZpZyBvZiB0aGUgcHJldmlvdXMgZm9ybSBpbiB0aGUgbGlzdCwgc3VjaCB0aGF0IHRoZSBwcmV2aW91cyBmb3JtJ3Mgc2VxdWVuY2UgbnVtYmVyIGlzIGxlc3MgdGhhbiB0aGUgY3VycmVudCBhY3RpdmUgZm9ybSdzIHNlcXVlbmNlIG51bWJlciBhbmQgdGhlIGZvcm0gaXMgZWRpdGFibGUuXG4gICAqICAgIElmIG5vIHByZXZpb3VzIGZvcm0gaXMgZm91bmQsIHNob3cgdGhlIGZvcm0gbGlzdC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGUgLSBUaGUgZXZlbnQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG1vZGUgdG8gZ28gYmFjayBpbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGUubW9kZSAtIFRoZSBtb2RlIG9mIGdvaW5nIGJhY2s6IERJUkVDVCBvciBUQUJCRUQuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrR29CYWNrKGU6IGFueSkge1xuICAgIHN3aXRjaCAoZS5tb2RlKSB7XG4gICAgICBjYXNlIEVGb3JtVmlld0dvQmFja01vZGUuRElSRUNUOlxuICAgICAgICBpZiAodGhpcy5hY3RpdmVGb3JtQ29uZmlnLnNlcXVlbmNlTm8gPT09IDEpIHtcbiAgICAgICAgICB0aGlzLnNob3dGb3JtU2VjdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2hvd0Zvcm0gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZkZvcm1zU3RhdHVzQ29tcGxldGVkKFxuICAgICAgICAgICAgICB0aGlzLmZvcm1zTGlzdCxcbiAgICAgICAgICAgICAgdGhpcy5mb3Jtc0xpc3RDb21wbGV0ZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzRm9ybUNvbmZpZ0RpcmVjdCA9IHRoaXMuZm9ybXNMaXN0LmZpbmQoKGZvcm0pID0+IHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZvcm0uc2VxdWVuY2VObyA9PT0gdGhpcy5hY3RpdmVGb3JtQ29uZmlnLnNlcXVlbmNlTm8gLSAxICYmXG4gICAgICAgICAgICAgICAgZm9ybS5zdGF0dXMgIT09IEVGb3Jtc0xpc3RTdGF0dXMuTE9DS0VEXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHByZXZpb3VzRm9ybUNvbmZpZ0RpcmVjdCkge1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZU9uQ2xpY2tTZXRBY3RpdmVGb3JtKFxuICAgICAgICAgICAgICAgIHByZXZpb3VzRm9ybUNvbmZpZ0RpcmVjdC5rZXksXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEVGb3JtVmlld0dvQmFja01vZGUuVEFCQkVEOlxuICAgICAgICBjb25zdCBwcmV2aW91c0Zvcm1Db25maWcgPSB0aGlzLmZvcm1zTGlzdC5maW5kKChmb3JtKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZm9ybS5zZXF1ZW5jZU5vIDwgdGhpcy5hY3RpdmVGb3JtQ29uZmlnLnNlcXVlbmNlTm8gJiZcbiAgICAgICAgICAgIGZvcm0uc3RhdHVzID09PSBFRm9ybXNMaXN0U3RhdHVzLkVESVRBQkxFXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwcmV2aW91c0Zvcm1Db25maWcpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZU9uQ2xpY2tTZXRBY3RpdmVGb3JtKHByZXZpb3VzRm9ybUNvbmZpZy5rZXksIHVuZGVmaW5lZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1MaXN0IC0gTGlzdGVucyB0byBldmVudCBvZiBzdWJtaXR0aW5nIGFsbCB0aGUgZm9ybXMgYW5kIG1vdmluZyBvdXQgb2YgdGhlIGxpYnJhcnkgYW5kIGFsc28gaGFuZGxlcyB0aGUgdmFsaWRhdGlvbiBvZiBhbGwgdGhlIGZvcm1zLlxuICAgKiBAcGFyYW0gZSBhbnlcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgYXN5bmMgaGFuZGxlT25DbGlja1N1Ym1pdEZvcm1zKGU6IGFueSkge1xuICAgIGNvbnN0IGZvcm1zTGlzdDogYW55W10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZm9ybXNMaXN0KSk7XG5cbiAgICBsZXQgZmlyc3RGb3JtV2l0aEVycm9yOiBzdHJpbmcgPSBcIlwiO1xuICAgIGZvciAobGV0IGZvcm0gb2YgZm9ybXNMaXN0KSB7XG4gICAgICBpZiAoXG4gICAgICAgICFmb3JtLmhpZGRlbiAmJlxuICAgICAgICBmb3JtLnR5cGUgIT09IEVGb3JtVHlwZS5IVE1MICYmXG4gICAgICAgIGZvcm0ucmVxdWlyZWQgJiZcbiAgICAgICAgZm9ybS5zdGF0dXMgIT09IEVGb3Jtc0xpc3RTdGF0dXMuQ09NUExFVEVEXG4gICAgICApIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyTG9ncyhFTG9nRXZlbnRUeXBlLkZPUk1fX1NVQk1JVF9GT1JNX0JVVFRPTl9DTElDS19JTlZBTElELCB7XG4gICAgICAgICAgZm9ybV9rZXk6IGZvcm0ua2V5LFxuICAgICAgICAgIGZvcm1fdGl0bGU6IGZvcm0/LnRpdGxlID8/IGZvcm0/LnByb3BzPy50aXRsZSxcbiAgICAgICAgICBmb3JtX3N0YXR1czogZm9ybS5zdGF0dXNcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGlzRW1wdHlWYWx1ZShmaXJzdEZvcm1XaXRoRXJyb3IpKSB7XG4gICAgICAgICAgZmlyc3RGb3JtV2l0aEVycm9yID0gZm9ybS5rZXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNOb3RFbXB0eVZhbHVlKGZpcnN0Rm9ybVdpdGhFcnJvcikpIHtcbiAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24odHJ1ZSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50b2dnbGVFcnJvck5vdGlmaWNhdGlvbihmYWxzZSk7XG4gICAgICB9LCAzMDAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9uQ2xpY2tTdWJtaXQuZW1pdChlKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlR2V0TG9ncyhldmVudDogYW55KSB7XG4gICAgdGhpcy5nZXRMb2dzLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1pc2NlbGxhbmVvdXMgTWV0aG9kc1xuICAgKi9cbiAgaGFuZGxlUmVzaXplKGZvcm1zTGlzdDogYW55W10pIHtcbiAgICBpZiAodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDwgNjAwKSB7XG4gICAgICBjb25zdCBpc1NpbmdsZUZvcm0gPSAoZm9ybXNMaXN0OiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICByZXR1cm4gZm9ybXNMaXN0Lmxlbmd0aCA9PT0gMTtcbiAgICAgIH07XG4gICAgICBpZiAoIWlzU2luZ2xlRm9ybShmb3Jtc0xpc3QpKSB7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1TZWN0aW9ucyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1GaWVsZHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93Rm9ybVNlY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybUZpZWxkcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dGb3JtID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLmlzTW9iaWxlVmlldyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNNb2JpbGVWaWV3ID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IG5nQ2xhc3M9XCJrd2lraWQtcmVuZGVyZXJcIj5cbiAgPGRpdlxuICAgIG5nQ2xhc3M9XCJrd2lraWQtbGF5b3V0LWNvbnRhaW5lclwiXG4gICAgKm5nSWY9XCIhbG9hZGluZ1wiXG4gID5cbiAgICA8ZGl2XG4gICAgICBuZ0NsYXNzPVwia3dpa2lkLXNlY3Rpb25zLWNvbnRhaW5lclwiXG4gICAgICAqbmdJZj1cInNob3dGb3JtU2VjdGlvbnNcIlxuICAgICAgY2xhc3M9XCJhY3RpdmVcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93Rm9ybVNlY3Rpb25zXCJcbiAgICAgIFtjbGFzcy5tb2JpbGVdPVwiaXNNb2JpbGVWaWV3XCJcbiAgICA+XG4gICAgICA8a3dpa2lkLWZvcm1zLWxpc3RcbiAgICAgICAgW3Nob3dGb3JtRmllbGRzXT1cInRoaXMuc2hvd0Zvcm1GaWVsZHNcIlxuICAgICAgICBbYWN0aXZlRm9ybUNvbmZpZ109XCJ0aGlzLmFjdGl2ZUZvcm1Db25maWdcIlxuICAgICAgICBbdXNlckNvbmZpZ109XCJ0aGlzLnVzZXJDb25maWdcIlxuICAgICAgICBbZm9ybXNMaXN0XT1cInRoaXMuZm9ybXNMaXN0XCJcbiAgICAgICAgW3N0ZXBDb25maWddPVwidGhpcy5zdGVwQ29uZmlnXCJcbiAgICAgICAgW2lzVW5zYXZlZERhdGFdPVwidGhpcy5pc1Vuc2F2ZWREYXRhXCJcbiAgICAgICAgW2Zvcm1zTGlzdENvbXBsZXRlZF09XCJ0aGlzLmZvcm1zTGlzdENvbXBsZXRlZFwiXG4gICAgICAgIFtpc01vYmlsZVZpZXddPVwidGhpcy5pc01vYmlsZVZpZXdcIlxuICAgICAgICAoZ2V0TG9ncyk9XCJoYW5kbGVHZXRMb2dzKCRldmVudClcIlxuICAgICAgICAob25DbGlja1NldEFjdGl2ZUZvcm0pPVwiXG4gICAgICAgICAgdGhpcy5oYW5kbGVPbkNsaWNrU2V0QWN0aXZlRm9ybSgkZXZlbnQsICdCVVRUT05fQ0xJQ0snKVxuICAgICAgICBcIlxuICAgICAgICAob25DbGlja1N1Ym1pdEZvcm1zKT1cInRoaXMuaGFuZGxlT25DbGlja1N1Ym1pdEZvcm1zKCRldmVudClcIlxuICAgICAgPjwva3dpa2lkLWZvcm1zLWxpc3Q+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgbmdDbGFzcz1cImt3aWtpZC1mb3Jtcy1jb250YWluZXJcIlxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgdGhpcy5zaG93Rm9ybSAmJlxuICAgICAgICB0aGlzLnNob3dGb3JtRmllbGRzICYmXG4gICAgICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZyAhPT0gdW5kZWZpbmVkXG4gICAgICBcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93Rm9ybUZpZWxkc1wiXG4gICAgICBbY2xhc3MubW9iaWxlXT1cImlzTW9iaWxlVmlld1wiXG4gICAgICBbQHBhbmVsSW5PdXRdXG4gICAgPlxuICAgICAgPGt3aWtpZC1mb3JtLXZpZXdcbiAgICAgICAgKm5nSWY9XCJ0aGlzLmFjdGl2ZUZvcm1Db25maWcudHlwZSA9PT0gJ0ZPUk0nXCJcbiAgICAgICAgW2Zvcm1Db25maWddPVwidGhpcy5hY3RpdmVGb3JtQ29uZmlnXCJcbiAgICAgICAgW2FsbEZvcm1zRGF0YV09XCJ0aGlzLmFsbEZvcm1zRGF0YVwiXG4gICAgICAgIFtpc01vYmlsZVZpZXddPVwidGhpcy5pc01vYmlsZVZpZXdcIlxuICAgICAgICBbdXNlckNvbmZpZ109XCJ0aGlzLnVzZXJDb25maWdcIlxuICAgICAgICBbc3RlcENvbmZpZ109XCJ0aGlzLnN0ZXBDb25maWdcIlxuICAgICAgICBbcG9wdXBGb3JtQ2FsbGJhY2tdPVwidGhpcy5wb3B1cEZvcm1DYWxsYmFja1wiXG4gICAgICAgIFthcGlDYWxsUmVzcG9uc2VdPVwidGhpcy5hcGlDYWxsUmVzcG9uc2VcIlxuICAgICAgICBbYnV0dG9uQ2xpY2tSZXNwb25zZV09XCJ0aGlzLmJ1dHRvbkNsaWNrUmVzcG9uc2VcIlxuICAgICAgICAob25DbGlja0Zvcm1GaWVsZEJ1dHRvbik9XCJoYW5kbGVPbkNsaWNrRm9ybUZpZWxkQnV0dG9uKCRldmVudClcIlxuICAgICAgICAoZ2V0VW5zYXZlZERhdGFTdGF0ZSk9XCJoYW5kbGVHZXRVbnNhdmVkU3RhdGUoJGV2ZW50KVwiXG4gICAgICAgIChvbkNsaWNrQXBpQ2FsbCk9XCJoYW5kbGVPbkNsaWNrQXBpQ2FsbCgkZXZlbnQpXCJcbiAgICAgICAgKG9uQ2xpY2tWaWV3RmlsZSk9XCJoYW5kbGVPbkNsaWNrVmlld0ZpbGUoJGV2ZW50KVwiXG4gICAgICAgIChvbkFjdGlvblNob3dQb3B1cEZvcm0pPVwiXG4gICAgICAgICAgdGhpcy5oYW5kbGVPbkFjdGlvblNob3dQb3B1cEZvcm0oJGV2ZW50LCBjb250ZW50KVxuICAgICAgICBcIlxuICAgICAgICAob25DbGlja0dvQmFjayk9XCJ0aGlzLmhhbmRsZU9uQ2xpY2tHb0JhY2soJGV2ZW50KVwiXG4gICAgICAgIChvbkNsaWNrVmlld0Zvcm1zKT1cInRoaXMuaGFuZGxlT25DbGlja1ZpZXdGb3JtcygkZXZlbnQpXCJcbiAgICAgICAgKGdldExvZ3MpPVwiaGFuZGxlR2V0TG9ncygkZXZlbnQpXCJcbiAgICAgICAgKG9uQ2xpY2tTYXZlRm9ybSk9XCJcbiAgICAgICAgICB0aGlzLmhhbmRsZU9uQ2xpY2tTYXZlRm9ybSgkZXZlbnQsICdGT1JNJywgdW5kZWZpbmVkKVxuICAgICAgICBcIlxuICAgICAgPjwva3dpa2lkLWZvcm0tdmlldz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGt3aWt1aS1sb2FkZXI+PC9rd2lrdWktbG9hZGVyPlxuXG48dHVpLXB1c2hcbiAgaWQ9XCJlcnJvci1ub3RpZmljYXRpb25cIlxuICAqdHVpUHVzaD1cInNob3dFcnJvck5vdGlmaWNhdGlvblwiXG4gIGhlYWRpbmc9XCJQbGVhc2UgY29tcGxldGUgdGhlIHJlcXVpcmVkIEZvcm1zIVwiXG4gIHR5cGU9XCJFcnJvclwiXG4gIChjbG9zZSk9XCJ0b2dnbGVFcnJvck5vdGlmaWNhdGlvbihmYWxzZSlcIlxuPlxuICA8dHVpLXN2Z1xuICAgIHNyYz1cInR1aUljb25YQ2lyY2xlXCJcbiAgICBzdHlsZT1cImNvbG9yOiAjZmZmICFpbXBvcnRhbnRcIlxuICA+XG4gIDwvdHVpLXN2Zz5cbjwvdHVpLXB1c2g+XG48bmctdGVtcGxhdGVcbiAgI3ByZXZpZXdcbiAgbGV0LXByZXZpZXdcbj5cbiAgPHR1aS1wcmV2aWV3XG4gICAgW3JvdGF0YWJsZV09XCJmYWxzZVwiXG4gICAgW3pvb21hYmxlXT1cImZhbHNlXCJcbiAgICBjbGFzcz1cInByZXZpZXctY29udGFpbmVyXCJcbiAgICAqbmdJZj1cInBvcHVwRm9ybUNvbmZpZ1wiXG4gID5cbiAgICA8dHVpLXByZXZpZXctdGl0bGUgKm5nSWY9XCJwcmV2aWV3UHJvcGVydGllcy50aXRsZSAhPT0gJydcIj57e1xuICAgICAgcHJldmlld1Byb3BlcnRpZXMudGl0bGVcbiAgICB9fTwvdHVpLXByZXZpZXctdGl0bGU+XG5cbiAgICA8ZGl2IGNsYXNzPVwia3dpa2lkLWZvcm0tdmlldy1wb3B1cC1jb250YWluZXJcIj5cbiAgICAgIDxrd2lraWQtZm9ybS12aWV3XG4gICAgICAgIFtmb3JtRGF0YV09XCJhY3RpdmVQb3B1cEZvcm1EYXRhXCJcbiAgICAgICAgW2Zvcm1Db25maWddPVwicG9wdXBGb3JtQ29uZmlnXCJcbiAgICAgICAgW2FsbEZvcm1zRGF0YV09XCJhbGxGb3Jtc0RhdGFcIlxuICAgICAgICBbdXNlckNvbmZpZ109XCJ0aGlzLnVzZXJDb25maWdcIlxuICAgICAgICBbc3RlcENvbmZpZ109XCJ0aGlzLnN0ZXBDb25maWdcIlxuICAgICAgICBbaXNNb2JpbGVWaWV3XT1cInRoaXMuaXNNb2JpbGVWaWV3XCJcbiAgICAgICAgW2FwaUNhbGxSZXNwb25zZV09XCJ0aGlzLmFwaUNhbGxSZXNwb25zZVwiXG4gICAgICAgIFtidXR0b25DbGlja1Jlc3BvbnNlXT1cInRoaXMuYnV0dG9uQ2xpY2tSZXNwb25zZVwiXG4gICAgICAgIChvbkNsaWNrRm9ybUZpZWxkQnV0dG9uKT1cImhhbmRsZU9uQ2xpY2tGb3JtRmllbGRCdXR0b24oJGV2ZW50KVwiXG4gICAgICAgIChnZXRTYXZlZFN0YXRlKT1cImhhbmRsZUdldFVuc2F2ZWRTdGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgKG9uQ2xpY2tBcGlDYWxsKT1cImhhbmRsZU9uQ2xpY2tBcGlDYWxsKCRldmVudClcIlxuICAgICAgICAoZ2V0TG9ncyk9XCJoYW5kbGVHZXRMb2dzKCRldmVudClcIlxuICAgICAgICAob25DbGlja1NhdmVGb3JtKT1cIlxuICAgICAgICAgIHRoaXMuaGFuZGxlT25DbGlja1NhdmVGb3JtKCRldmVudCwgJ1BPUFVQX0ZPUk0nLCB1bmRlZmluZWQpXG4gICAgICAgIFwiXG4gICAgICA+PC9rd2lraWQtZm9ybS12aWV3PlxuICAgIDwvZGl2PlxuXG4gICAgPGJ1dHRvblxuICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgdHVpUHJldmlld0FjdGlvblxuICAgICAgaWNvbj1cInR1aUljb25DbG9zZUxhcmdlXCJcbiAgICAgIHRpdGxlPVwiQ2xvc2VcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwicHJldmlldy5jb21wbGV0ZSgpXCJcbiAgICA+PC9idXR0b24+XG4gIDwvdHVpLXByZXZpZXc+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlXG4gICNjb250ZW50XG4gIGxldC1jb250ZXh0XG4+XG4gIDxkaXYgY2xhc3M9XCJrd2lraWQtZm9ybS12aWV3LXBvcHVwLWNvbnRhaW5lclwiPlxuICAgIDxrd2lraWQtZm9ybS12aWV3XG4gICAgICBbZm9ybURhdGFdPVwiYWN0aXZlUG9wdXBGb3JtRGF0YVwiXG4gICAgICBbZm9ybUNvbmZpZ109XCJwb3B1cEZvcm1Db25maWdcIlxuICAgICAgW2FsbEZvcm1zRGF0YV09XCJhbGxGb3Jtc0RhdGFcIlxuICAgICAgW3VzZXJDb25maWddPVwidGhpcy51c2VyQ29uZmlnXCJcbiAgICAgIFtzdGVwQ29uZmlnXT1cInRoaXMuc3RlcENvbmZpZ1wiXG4gICAgICBbaXNNb2JpbGVWaWV3XT1cInRoaXMuaXNNb2JpbGVWaWV3XCJcbiAgICAgIFthcGlDYWxsUmVzcG9uc2VdPVwidGhpcy5hcGlDYWxsUmVzcG9uc2VcIlxuICAgICAgW2J1dHRvbkNsaWNrUmVzcG9uc2VdPVwidGhpcy5idXR0b25DbGlja1Jlc3BvbnNlXCJcbiAgICAgIChvbkNsaWNrRm9ybUZpZWxkQnV0dG9uKT1cImhhbmRsZU9uQ2xpY2tGb3JtRmllbGRCdXR0b24oJGV2ZW50KVwiXG4gICAgICAoZ2V0U2F2ZWRTdGF0ZSk9XCJoYW5kbGVHZXRVbnNhdmVkU3RhdGUoJGV2ZW50KVwiXG4gICAgICAob25DbGlja0FwaUNhbGwpPVwiaGFuZGxlT25DbGlja0FwaUNhbGwoJGV2ZW50KVwiXG4gICAgICAoZ2V0TG9ncyk9XCJoYW5kbGVHZXRMb2dzKCRldmVudClcIlxuICAgICAgKG9uQ2xpY2tTYXZlRm9ybSk9XCJcbiAgICAgICAgdGhpcy5oYW5kbGVPbkNsaWNrU2F2ZUZvcm0oJGV2ZW50LCAnUE9QVVBfRk9STScsIGNvbnRleHQpXG4gICAgICBcIlxuICAgID48L2t3aWtpZC1mb3JtLXZpZXc+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|