kwikid-forms 0.1.0 → 0.1.2

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.
@@ -632,7 +632,7 @@ export class KwikIDFormViewComponent {
632
632
  }
633
633
  }
634
634
  /** @nocollapse */ KwikIDFormViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KwikIDFormViewComponent, deps: [{ token: TuiPushService }, { token: TuiAlertService }, { token: i1.KwikIDFormViewService }], target: i0.ɵɵFactoryTarget.Component });
635
- /** @nocollapse */ KwikIDFormViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: KwikIDFormViewComponent, selector: "kwikid-form-view", inputs: { formConfig: "formConfig", formData: "formData", apiCallResponse: "apiCallResponse", isMobileView: "isMobileView", allFormsData: "allFormsData", formsList: "formsList" }, outputs: { onClickViewForms: "onClickViewForms", onClickSaveForm: "onClickSaveForm", onClickApiCall: "onClickApiCall", getActiveFormData: "getActiveFormData" }, providers: [KwikIDFormViewService], usesOnChanges: true, ngImport: i0, template: "<div\r\n class=\"kwikid-form-container\"\r\n *ngIf=\"!this.loading\"\r\n>\r\n <div id=\"uf-form-fields-header-container\">\r\n <div id=\"uf-form-fields-title\">\r\n {{ this.formConfig.title }}\r\n </div>\r\n <div id=\"uf-form-fields-steps\">\r\n Step {{ this.formConfig.sequenceNo }} of {{ this.formsList.length }}\r\n </div>\r\n <hr />\r\n </div>\r\n <form\r\n class=\"kwikid-form show\"\r\n [formGroup]=\"this.formGroup\"\r\n >\r\n <ng-container *ngFor=\"let field of this.formFields; let i = index\">\r\n <ng-container [ngSwitch]=\"field.type\">\r\n <!-- Form Title -->\r\n <ng-container *ngSwitchCase=\"'title'\">\r\n <div\r\n class=\"title\"\r\n [class.hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <div>\r\n {{ field.label }}\r\n </div>\r\n <kwikui-button\r\n *ngIf=\"field?.reset\"\r\n appearance=\"whiteblock\"\r\n size=\"s\"\r\n label=\"Reset\"\r\n (onClick)=\"this.handleOnClickResetFormFields($event, field)\"\r\n ></kwikui-button>\r\n </div>\r\n </ng-container>\r\n <!-- Input Text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <kwikui-input\r\n [case]=\"field?.properties?.case\"\r\n [disabled]=\"field?.disabled\"\r\n [focus]=\"field?.focus\"\r\n [formControl]=\"formGroup.controls[field.key]\"\r\n [formControlName]=\"field.key\"\r\n [id]=\"field.key\"\r\n [invalid]=\"field?.invalid\"\r\n [label]=\"field.label\"\r\n [placeholder]=\"field?.properties?.placeholder\"\r\n [type]=\"'text'\"\r\n [validators]=\"field?.validators\"\r\n (getKeyValue)=\"handleGetKeyValue($event)\"\r\n ></kwikui-input>\r\n <kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n <!-- Checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <kwikui-checkbox-block\r\n [contentAlign]=\"field?.properties?.contentAlign ?? 'left'\"\r\n [disabled]=\"field?.disabled\"\r\n [focus]=\"field?.focus\"\r\n [formControl]=\"formGroup.controls[field.key]\"\r\n [formControlName]=\"field.key\"\r\n [id]=\"field.key\"\r\n [invalid]=\"field?.invalid\"\r\n [label]=\"field?.properties?.placeholder\"\r\n [placeholder]=\"field?.properties?.placeholder\"\r\n [properties]=\"field?.properties\"\r\n [size]=\"field?.properties?.size ?? 'l'\"\r\n [validators]=\"field?.validators\"\r\n (getKeyValue)=\"handleGetKeyValue($event)\"\r\n ></kwikui-checkbox-block\r\n ><kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n <!-- Input Number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <kwikui-input-number\r\n [decimal]=\"field?.properties?.decimal\"\r\n [disabled]=\"field?.disabled\"\r\n [focus]=\"field?.focus\"\r\n [formControl]=\"formGroup.controls[field.key]\"\r\n [formControlName]=\"field.key\"\r\n [id]=\"field.key\"\r\n [invalid]=\"field?.invalid\"\r\n [label]=\"field?.label\"\r\n [max]=\"field?.properties?.max\"\r\n [min]=\"field?.properties?.min\"\r\n [placeholder]=\"field?.properties?.placeholder\"\r\n [postfix]=\"field?.properties?.postfix ?? ''\"\r\n [precision]=\"field?.properties?.precision\"\r\n [prefix]=\"field?.properties?.prefix ?? ''\"\r\n [properties]=\"field?.properties\"\r\n [validators]=\"field?.validators\"\r\n (getKeyValue)=\"handleGetKeyValue($event)\"\r\n ></kwikui-input-number\r\n ><kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n <!-- Input Date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <kwikui-input-date\r\n [disabled]=\"field?.disabled\"\r\n [focus]=\"field?.focus\"\r\n [formControl]=\"formGroup.controls[field.key]\"\r\n [formControlName]=\"field.key\"\r\n [id]=\"field.key\"\r\n [invalid]=\"field?.invalid\"\r\n [label]=\"field.label\"\r\n [max]=\"field?.properties?.max\"\r\n [min]=\"field?.properties?.min\"\r\n [placeholder]=\"field?.placeholder\"\r\n [properties]=\"field?.properties\"\r\n [validators]=\"field?.validators\"\r\n (getKeyValue)=\"handleGetKeyValue($event)\"\r\n ></kwikui-input-date>\r\n <kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n <!-- Input Phone -->\r\n <ng-container *ngSwitchCase=\"'phone'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <kwikui-input-phone\r\n [countryCode]=\"field?.properties?.countryCode\"\r\n [disabled]=\"field?.disabled\"\r\n [focus]=\"field?.focus\"\r\n [formControl]=\"formGroup.controls[field.key]\"\r\n [formControlName]=\"field.key\"\r\n [id]=\"field.key\"\r\n [invalid]=\"field?.invalid\"\r\n [label]=\"field?.label\"\r\n [phoneMaskAfterCountryCode]=\"\r\n field?.properties?.phoneMaskAfterCountryCode\r\n \"\r\n [placeholder]=\"field?.placeholder\"\r\n [validators]=\"field?.validators\"\r\n (getKeyValue)=\"handleGetKeyValue($event)\"\r\n ></kwikui-input-phone>\r\n <kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n <!-- Input Radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <label\r\n [tuiLabel]=\"labelTemplate\"\r\n style=\"min-height: auto\"\r\n >\r\n <kwikui-radio-list\r\n [disabled]=\"field?.disabled\"\r\n [focus]=\"field?.focus\"\r\n [formControl]=\"formGroup.controls[field.key]\"\r\n [formControlName]=\"field.key\"\r\n [id]=\"field.key\"\r\n [invalid]=\"field?.invalid\"\r\n [items]=\"field?.options\"\r\n [label]=\"field?.label\"\r\n [orientation]=\"field?.properties?.orientation\"\r\n [placeholder]=\"field?.properties?.placeholder\"\r\n [properties]=\"field?.properties\"\r\n [size]=\"field?.properties?.size\"\r\n [validators]=\"field?.validators\"\r\n (getKeyValue)=\"handleGetKeyValue($event)\"\r\n ></kwikui-radio-list>\r\n </label>\r\n <ng-template #labelTemplate>\r\n <p\r\n class=\"tui-space_bottom-2\"\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <b>\r\n {{ field.label }}\r\n <span *ngIf=\"field.validators?.required\"></span>\r\n </b>\r\n </p>\r\n </ng-template>\r\n <kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n <!-- Dropdown -->\r\n <ng-container *ngSwitchCase=\"'dropdown-with-search'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <kwikui-select-combobox\r\n [disabled]=\"field?.disabled\"\r\n [focus]=\"field?.focus\"\r\n [formControl]=\"formGroup.controls[field.key]\"\r\n [formControlName]=\"field.key\"\r\n [id]=\"field.key\"\r\n [invalid]=\"field?.invalid\"\r\n [label]=\"field.label\"\r\n [options]=\"field.options\"\r\n [placeholder]=\"field?.properties?.placeholder\"\r\n [properties]=\"field?.properties\"\r\n [validators]=\"field?.validators\"\r\n (getKeyValue)=\"handleGetKeyValue($event)\"\r\n ></kwikui-select-combobox>\r\n <kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n <!-- API Call -->\r\n <ng-container *ngSwitchCase=\"'api-call'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <kwikui-button-api-call\r\n [apiStatus]=\"field?.api?.status?.value\"\r\n [class]=\"field?.class\"\r\n [disabled]=\"field?.disabled\"\r\n [id]=\"field.key\"\r\n [label]=\"field?.api?.status?.labels[field?.api?.status?.value]\"\r\n [showLoader]=\"field?.disabled === 'loading'\"\r\n shape=\"null\"\r\n size=\"m\"\r\n styles=\"width: fit-content\"\r\n (onClick)=\"this.handleOnClickApiCall($event)\"\r\n ></kwikui-button-api-call>\r\n <kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n <!-- Mobile OTP -->\r\n <ng-container *ngSwitchCase=\"'otp'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <kwikui-input-otp\r\n [disabled]=\"field?.disabled\"\r\n [focus]=\"field?.focus\"\r\n [formControl]=\"formGroup.controls[field.key]\"\r\n [formControlName]=\"field.key\"\r\n [id]=\"field.key\"\r\n [invalid]=\"field?.invalid\"\r\n [label]=\"field?.label\"\r\n [mask]=\"field?.properties?.mask\"\r\n [placeholder]=\"field?.properties?.placeholder\"\r\n [properties]=\"field?.properties\"\r\n [validators]=\"field?.validators\"\r\n (getKeyValue)=\"handleGetKeyValue($event)\"\r\n ></kwikui-input-otp>\r\n <kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n <!-- Aadhaar Number -->\r\n <ng-container *ngSwitchCase=\"'aadhaar-number'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <kwikui-input-aadhaar\r\n [disabled]=\"field?.disabled\"\r\n [focus]=\"field?.focus\"\r\n [formControl]=\"formGroup.controls[field.key]\"\r\n [formControlName]=\"field.key\"\r\n [id]=\"field.key\"\r\n [invalid]=\"field?.invalid\"\r\n [label]=\"field?.label\"\r\n [placeholder]=\"field?.placeholder\"\r\n [properties]=\"field?.properties\"\r\n [validators]=\"field?.validators\"\r\n (getKeyValue)=\"handleGetKeyValue($event)\"\r\n ></kwikui-input-aadhaar>\r\n <kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </form>\r\n <div class=\"kwikid-form-buttons\">\r\n <kwikui-button\r\n *ngIf=\"this.isMobileView\"\r\n [disabled]=\"viewFormsButton.disabled\"\r\n id=\"\"\r\n label=\"View Forms\"\r\n [showLoader]=\"viewFormsButton.showLoader\"\r\n styles=\"\"\r\n class=\"\"\r\n type=\"button\"\r\n appearance=\"secondary\"\r\n icon=\"\"\r\n iconRight=\"\"\r\n shape=\"null\"\r\n size=\"m\"\r\n styles=\"width: 100%\"\r\n (onClick)=\"this.handleOnClickViewForms($event)\"\r\n ></kwikui-button>\r\n <kwikui-button\r\n [disabled]=\"saveFormButton.disabled\"\r\n id=\"\"\r\n label=\"Save\"\r\n [showLoader]=\"saveFormButton.showLoader\"\r\n styles=\"\"\r\n class=\"\"\r\n type=\"button\"\r\n appearance=\"primary\"\r\n icon=\"\"\r\n iconRight=\"\"\r\n shape=\"null\"\r\n size=\"m\"\r\n styles=\"width: 100%\"\r\n (onClick)=\"this.handleOnClickSaveForm($event)\"\r\n ></kwikui-button>\r\n </div>\r\n</div>\r\n<div\r\n class=\"kwikid-form-container-loading\"\r\n *ngIf=\"this.loading\"\r\n>\r\n <div\r\n class=\"large-wrapper\"\r\n [class.tui-skeleton]=\"this.loading\"\r\n [class.tui-skeleton_rounded]=\"this.loading\"\r\n ></div>\r\n <div\r\n class=\"large-wrapper\"\r\n [class.tui-skeleton]=\"this.loading\"\r\n [class.tui-skeleton_rounded]=\"this.loading\"\r\n ></div>\r\n <div\r\n class=\"large-wrapper\"\r\n [class.tui-skeleton]=\"this.loading\"\r\n [class.tui-skeleton_rounded]=\"this.loading\"\r\n ></div>\r\n <div\r\n class=\"large-wrapper\"\r\n [class.tui-skeleton]=\"this.loading\"\r\n [class.tui-skeleton_rounded]=\"this.loading\"\r\n ></div>\r\n <div\r\n class=\"large-wrapper\"\r\n [class.tui-skeleton]=\"this.loading\"\r\n [class.tui-skeleton_rounded]=\"this.loading\"\r\n ></div>\r\n <div\r\n class=\"large-wrapper\"\r\n [class.tui-skeleton]=\"this.loading\"\r\n [class.tui-skeleton_rounded]=\"this.loading\"\r\n ></div>\r\n <div\r\n class=\"large-wrapper\"\r\n [class.tui-skeleton]=\"this.loading\"\r\n [class.tui-skeleton_rounded]=\"this.loading\"\r\n ></div>\r\n</div>\r\n<tui-push\r\n id=\"field-error-notification\"\r\n *tuiPush=\"showErrorNotification\"\r\n heading=\"Missing/Incorrect Fields!\"\r\n type=\"Error\"\r\n (close)=\"toggleErrorNotification(false)\"\r\n>\r\n <tui-svg\r\n src=\"tuiIconCancel\"\r\n style=\"color: #fff !important\"\r\n >\r\n </tui-svg>\r\n</tui-push>\r\n", styles: ["::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{border-radius:10px}::-webkit-scrollbar-thumb{background:lightgray;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:gray}.kwikid-form-container{width:100%;height:100%;margin:0 auto;display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center}.kwikid-form.show{width:100%;height:100%;padding:1rem;overflow-y:auto;display:flex;flex-direction:column;align-content:center;justify-content:flex-start;align-items:stretch;grid-row-gap:1rem;row-gap:1rem}.kwikid-form-buttons{width:100%;bottom:0px;padding:1rem;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;grid-column-gap:10px;column-gap:10px}.kwikid-form-buttons *{flex-grow:1}#uf-form-fields-header-container{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:flex-start;grid-row-gap:.5rem;row-gap:.5rem;padding:1rem}#uf-form-fields-header-container hr{width:100%}#uf-form-fields-title{color:#000;font-size:1.75em;font-weight:bold}#uf-form-fields-steps{color:var(--color-on-secondary-container);font-size:1em}.title{border-left:.25rem solid var(--tui-primary);padding:.75rem;font-size:1.4em;font-weight:bold;background-color:var(--tui-secondary);display:flex;flex-direction:row;align-content:center;justify-content:space-between;align-items:center;grid-gap:.5rem;gap:.5rem}.title:not(:first-child){margin-top:.5rem}.title.hidden{display:none}.large-wrapper{width:100%;height:60px}.large-wrapper:first-child{margin-bottom:auto}.large-wrapper:last-child{margin-top:auto}.kwikid-form-container-loading{width:100%;height:100%;margin:0 auto;display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center;grid-row-gap:1rem;row-gap:1rem;padding:1rem}#field-error-notification{background-color:var(--tui-error-fill);color:#fff!important}#field-error-notification .t-top{color:#fff!important}#field-error-notification .t-close{color:#fff!important}\n"], components: [{ type: i2.KwikUIButtonComponent, selector: "kwikui-button", inputs: ["disabled", "id", "label", "showLoader", "styles", "class", "type", "appearance", "icon", "iconRight", "shape", "size"], outputs: ["onClick"] }, { type: i2.KwikUIInputComponent, selector: "kwikui-input", inputs: ["label", "id", "type", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "validators", "case", "properties"], outputs: ["getKeyValue"] }, { type: i2.KwikUIMessagesComponent, selector: "kwikui-messages", inputs: ["messages", "id"] }, { type: i2.KwikUICheckboxBlockComponent, selector: "kwikui-checkbox-block", inputs: ["label", "id", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "size", "contentAlign", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputNumberComponent, selector: "kwikui-input-number", inputs: ["label", "id", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "min", "max", "prefix", "postfix", "precision", "decimal", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputDateComponent, selector: "kwikui-input-date", inputs: ["label", "id", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "min", "max", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputPhoneComponent, selector: "kwikui-input-phone", inputs: ["label", "id", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "countryCode", "phoneMaskAfterCountryCode", "removeCountryCodeFromValue", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i3.TuiLabelComponent, selector: "label[tuiLabel]", inputs: ["tuiLabel", "context"] }, { type: i2.KwikUIRadioListComponent, selector: "kwikui-radio-list", inputs: ["label", "id", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "size", "orientation", "items", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i2.KwikUISelectComboboxComponent, selector: "kwikui-select-combobox", inputs: ["label", "id", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "options", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i2.KwikUIButtonApiCallComponent, selector: "kwikui-button-api-call", inputs: ["disabled", "id", "label", "showLoader", "styles", "class", "shape", "size", "apiStatus"], outputs: ["onClick"] }, { type: i2.KwikUIInputOtpComponent, selector: "kwikui-input-otp", inputs: ["label", "id", "formControlName", "formControl", "focus", "invalid", "disabled", "placeholder", "mask", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputAadhaarComponent, selector: "kwikui-input-aadhaar", inputs: ["label", "id", "formControlName", "formControl", "focus", "invalid", "disabled", "placeholder", "mask", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i4.TuiPushComponent, selector: "tui-push", inputs: ["heading", "type", "timestamp"], outputs: ["close"] }, { type: i3.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i6.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i4.TuiPushAlertDirective, selector: "[tuiPush]", inputs: ["tuiPush"] }, { type: i4.TuiPushDirective, selector: "tui-push" }] });
635
+ /** @nocollapse */ KwikIDFormViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: KwikIDFormViewComponent, selector: "kwikid-form-view", inputs: { formConfig: "formConfig", formData: "formData", apiCallResponse: "apiCallResponse", isMobileView: "isMobileView", allFormsData: "allFormsData", formsList: "formsList" }, outputs: { onClickViewForms: "onClickViewForms", onClickSaveForm: "onClickSaveForm", onClickApiCall: "onClickApiCall", getActiveFormData: "getActiveFormData" }, providers: [KwikIDFormViewService], usesOnChanges: true, ngImport: i0, template: "<div\r\n class=\"kwikid-form-container\"\r\n *ngIf=\"!this.loading\"\r\n>\r\n <div id=\"uf-form-fields-header-container\">\r\n <div id=\"uf-form-fields-title\">\r\n {{ this.formConfig.title }}\r\n </div>\r\n <div id=\"uf-form-fields-steps\">\r\n Step {{ this.formConfig.sequenceNo }} of {{ this.formsList.length }}\r\n </div>\r\n <hr />\r\n </div>\r\n <form\r\n class=\"kwikid-form show\"\r\n [formGroup]=\"this.formGroup\"\r\n >\r\n <ng-container *ngFor=\"let field of this.formFields; let i = index\">\r\n <ng-container [ngSwitch]=\"field.type\">\r\n <!-- Form Title -->\r\n <ng-container *ngSwitchCase=\"'title'\">\r\n <div\r\n class=\"title\"\r\n [class.hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <div>\r\n {{ field.label }}\r\n </div>\r\n <kwikui-button\r\n *ngIf=\"field?.reset\"\r\n appearance=\"whiteblock\"\r\n size=\"s\"\r\n label=\"Reset\"\r\n (onClick)=\"this.handleOnClickResetFormFields($event, field)\"\r\n ></kwikui-button>\r\n </div>\r\n </ng-container>\r\n <!-- Input Text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <kwikui-input\r\n [case]=\"field?.properties?.case\"\r\n [disabled]=\"field?.disabled\"\r\n [focus]=\"field?.focus\"\r\n [formControl]=\"formGroup.controls[field.key]\"\r\n [formControlName]=\"field.key\"\r\n [id]=\"field.key\"\r\n [invalid]=\"field?.invalid\"\r\n [label]=\"field.label\"\r\n [placeholder]=\"field?.properties?.placeholder\"\r\n [type]=\"'text'\"\r\n [validators]=\"field?.validators\"\r\n (getKeyValue)=\"handleGetKeyValue($event)\"\r\n ></kwikui-input>\r\n <kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n <!-- Checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <kwikui-checkbox-block\r\n [contentAlign]=\"field?.properties?.contentAlign ?? 'left'\"\r\n [disabled]=\"field?.disabled\"\r\n [focus]=\"field?.focus\"\r\n [formControl]=\"formGroup.controls[field.key]\"\r\n [formControlName]=\"field.key\"\r\n [id]=\"field.key\"\r\n [invalid]=\"field?.invalid\"\r\n [label]=\"field?.properties?.placeholder\"\r\n [placeholder]=\"field?.properties?.placeholder\"\r\n [properties]=\"field?.properties\"\r\n [size]=\"field?.properties?.size ?? 'l'\"\r\n [validators]=\"field?.validators\"\r\n (getKeyValue)=\"handleGetKeyValue($event)\"\r\n ></kwikui-checkbox-block\r\n ><kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n <!-- Input Number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <kwikui-input-number\r\n [decimal]=\"field?.properties?.decimal\"\r\n [disabled]=\"field?.disabled\"\r\n [focus]=\"field?.focus\"\r\n [formControl]=\"formGroup.controls[field.key]\"\r\n [formControlName]=\"field.key\"\r\n [id]=\"field.key\"\r\n [invalid]=\"field?.invalid\"\r\n [label]=\"field?.label\"\r\n [max]=\"field?.properties?.max\"\r\n [min]=\"field?.properties?.min\"\r\n [placeholder]=\"field?.properties?.placeholder\"\r\n [postfix]=\"field?.properties?.postfix ?? ''\"\r\n [precision]=\"field?.properties?.precision\"\r\n [prefix]=\"field?.properties?.prefix ?? ''\"\r\n [properties]=\"field?.properties\"\r\n [validators]=\"field?.validators\"\r\n (getKeyValue)=\"handleGetKeyValue($event)\"\r\n ></kwikui-input-number\r\n ><kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n <!-- Input Date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <kwikui-input-date\r\n [disabled]=\"field?.disabled\"\r\n [focus]=\"field?.focus\"\r\n [formControl]=\"formGroup.controls[field.key]\"\r\n [formControlName]=\"field.key\"\r\n [id]=\"field.key\"\r\n [invalid]=\"field?.invalid\"\r\n [label]=\"field.label\"\r\n [max]=\"field?.properties?.max\"\r\n [min]=\"field?.properties?.min\"\r\n [placeholder]=\"field?.placeholder\"\r\n [properties]=\"field?.properties\"\r\n [validators]=\"field?.validators\"\r\n (getKeyValue)=\"handleGetKeyValue($event)\"\r\n ></kwikui-input-date>\r\n <kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n <!-- Input Phone -->\r\n <ng-container *ngSwitchCase=\"'phone'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <kwikui-input-phone\r\n [countryCode]=\"field?.properties?.countryCode\"\r\n [disabled]=\"field?.disabled\"\r\n [focus]=\"field?.focus\"\r\n [formControl]=\"formGroup.controls[field.key]\"\r\n [formControlName]=\"field.key\"\r\n [id]=\"field.key\"\r\n [invalid]=\"field?.invalid\"\r\n [label]=\"field?.label\"\r\n [phoneMaskAfterCountryCode]=\"\r\n field?.properties?.phoneMaskAfterCountryCode\r\n \"\r\n [placeholder]=\"field?.placeholder\"\r\n [validators]=\"field?.validators\"\r\n (getKeyValue)=\"handleGetKeyValue($event)\"\r\n ></kwikui-input-phone>\r\n <kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n <!-- Input Radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <label\r\n [tuiLabel]=\"labelTemplate\"\r\n style=\"min-height: auto\"\r\n >\r\n <kwikui-radio-list\r\n [disabled]=\"field?.disabled\"\r\n [focus]=\"field?.focus\"\r\n [formControl]=\"formGroup.controls[field.key]\"\r\n [formControlName]=\"field.key\"\r\n [id]=\"field.key\"\r\n [invalid]=\"field?.invalid\"\r\n [items]=\"field?.options\"\r\n [label]=\"field?.label\"\r\n [orientation]=\"field?.properties?.orientation\"\r\n [placeholder]=\"field?.properties?.placeholder\"\r\n [properties]=\"field?.properties\"\r\n [size]=\"field?.properties?.size\"\r\n [validators]=\"field?.validators\"\r\n (getKeyValue)=\"handleGetKeyValue($event)\"\r\n ></kwikui-radio-list>\r\n </label>\r\n <ng-template #labelTemplate>\r\n <p\r\n class=\"tui-space_bottom-2\"\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <b>\r\n {{ field.label }}\r\n <span *ngIf=\"field.validators?.required\"></span>\r\n </b>\r\n </p>\r\n </ng-template>\r\n <kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n <!-- Dropdown -->\r\n <ng-container *ngSwitchCase=\"'dropdown-with-search'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <kwikui-select-combobox\r\n [disabled]=\"field?.disabled\"\r\n [focus]=\"field?.focus\"\r\n [formControl]=\"formGroup.controls[field.key]\"\r\n [formControlName]=\"field.key\"\r\n [id]=\"field.key\"\r\n [invalid]=\"field?.invalid\"\r\n [label]=\"field.label\"\r\n [options]=\"field.options\"\r\n [placeholder]=\"field?.properties?.placeholder\"\r\n [properties]=\"field?.properties\"\r\n [validators]=\"field?.validators\"\r\n (getKeyValue)=\"handleGetKeyValue($event)\"\r\n ></kwikui-select-combobox>\r\n <kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n <!-- API Call -->\r\n <ng-container *ngSwitchCase=\"'api-call'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <kwikui-button-api-call\r\n [apiStatus]=\"field?.api?.status?.value\"\r\n [class]=\"field?.class\"\r\n [disabled]=\"field?.disabled\"\r\n [id]=\"field.key\"\r\n [label]=\"field?.api?.status?.labels[field?.api?.status?.value]\"\r\n [showLoader]=\"field?.disabled === 'loading'\"\r\n shape=\"null\"\r\n size=\"m\"\r\n styles=\"width: fit-content\"\r\n (onClick)=\"this.handleOnClickApiCall($event)\"\r\n ></kwikui-button-api-call>\r\n <kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n <!-- Mobile OTP -->\r\n <ng-container *ngSwitchCase=\"'otp'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <kwikui-input-otp\r\n [disabled]=\"field?.disabled\"\r\n [focus]=\"field?.focus\"\r\n [formControl]=\"formGroup.controls[field.key]\"\r\n [formControlName]=\"field.key\"\r\n [id]=\"field.key\"\r\n [invalid]=\"field?.invalid\"\r\n [label]=\"field?.label\"\r\n [mask]=\"field?.properties?.mask\"\r\n [placeholder]=\"field?.properties?.placeholder\"\r\n [properties]=\"field?.properties\"\r\n [validators]=\"field?.validators\"\r\n (getKeyValue)=\"handleGetKeyValue($event)\"\r\n ></kwikui-input-otp>\r\n <kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n <!-- Aadhaar Number -->\r\n <ng-container *ngSwitchCase=\"'aadhaar-number'\">\r\n <div\r\n [hidden]=\"field?.hidden\"\r\n id=\"field_{{ field.key }}\"\r\n >\r\n <kwikui-input-aadhaar\r\n [disabled]=\"field?.disabled\"\r\n [focus]=\"field?.focus\"\r\n [formControl]=\"formGroup.controls[field.key]\"\r\n [formControlName]=\"field.key\"\r\n [id]=\"field.key\"\r\n [invalid]=\"field?.invalid\"\r\n [label]=\"field?.label\"\r\n [placeholder]=\"field?.placeholder\"\r\n [properties]=\"field?.properties\"\r\n [validators]=\"field?.validators\"\r\n (getKeyValue)=\"handleGetKeyValue($event)\"\r\n ></kwikui-input-aadhaar>\r\n <kwikui-messages\r\n [messages]=\"field.messages\"\r\n [id]=\"field.key\"\r\n ></kwikui-messages>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </form>\r\n <div class=\"kwikid-form-buttons\">\r\n <kwikui-button\r\n *ngIf=\"this.isMobileView\"\r\n [disabled]=\"viewFormsButton.disabled\"\r\n id=\"\"\r\n label=\"View Forms\"\r\n [showLoader]=\"viewFormsButton.showLoader\"\r\n styles=\"\"\r\n class=\"\"\r\n type=\"button\"\r\n appearance=\"secondary\"\r\n icon=\"\"\r\n iconRight=\"\"\r\n [shape]=\"null\"\r\n size=\"m\"\r\n styles=\"width: 100%\"\r\n (onClick)=\"this.handleOnClickViewForms($event)\"\r\n ></kwikui-button>\r\n <kwikui-button\r\n [disabled]=\"saveFormButton.disabled\"\r\n id=\"\"\r\n label=\"Save\"\r\n [showLoader]=\"saveFormButton.showLoader\"\r\n styles=\"\"\r\n class=\"\"\r\n type=\"button\"\r\n appearance=\"primary\"\r\n icon=\"\"\r\n iconRight=\"\"\r\n [shape]=\"null\"\r\n size=\"m\"\r\n styles=\"width: 100%\"\r\n (onClick)=\"this.handleOnClickSaveForm($event)\"\r\n ></kwikui-button>\r\n </div>\r\n</div>\r\n<div\r\n class=\"kwikid-form-container-loading\"\r\n *ngIf=\"this.loading\"\r\n>\r\n <div\r\n class=\"large-wrapper\"\r\n [class.tui-skeleton]=\"this.loading\"\r\n [class.tui-skeleton_rounded]=\"this.loading\"\r\n ></div>\r\n <div\r\n class=\"large-wrapper\"\r\n [class.tui-skeleton]=\"this.loading\"\r\n [class.tui-skeleton_rounded]=\"this.loading\"\r\n ></div>\r\n <div\r\n class=\"large-wrapper\"\r\n [class.tui-skeleton]=\"this.loading\"\r\n [class.tui-skeleton_rounded]=\"this.loading\"\r\n ></div>\r\n <div\r\n class=\"large-wrapper\"\r\n [class.tui-skeleton]=\"this.loading\"\r\n [class.tui-skeleton_rounded]=\"this.loading\"\r\n ></div>\r\n <div\r\n class=\"large-wrapper\"\r\n [class.tui-skeleton]=\"this.loading\"\r\n [class.tui-skeleton_rounded]=\"this.loading\"\r\n ></div>\r\n <div\r\n class=\"large-wrapper\"\r\n [class.tui-skeleton]=\"this.loading\"\r\n [class.tui-skeleton_rounded]=\"this.loading\"\r\n ></div>\r\n <div\r\n class=\"large-wrapper\"\r\n [class.tui-skeleton]=\"this.loading\"\r\n [class.tui-skeleton_rounded]=\"this.loading\"\r\n ></div>\r\n</div>\r\n<tui-push\r\n id=\"field-error-notification\"\r\n *tuiPush=\"showErrorNotification\"\r\n heading=\"Missing/Incorrect Fields!\"\r\n type=\"Error\"\r\n (close)=\"toggleErrorNotification(false)\"\r\n>\r\n <tui-svg\r\n src=\"tuiIconCancel\"\r\n style=\"color: #fff !important\"\r\n >\r\n </tui-svg>\r\n</tui-push>\r\n", styles: ["::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{border-radius:10px}::-webkit-scrollbar-thumb{background:lightgray;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:gray}.kwikid-form-container{width:100%;height:100%;margin:0 auto;display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center}.kwikid-form.show{width:100%;height:100%;padding:1rem;overflow-y:auto;display:flex;flex-direction:column;align-content:center;justify-content:flex-start;align-items:stretch;grid-row-gap:1rem;row-gap:1rem}.kwikid-form-buttons{width:100%;bottom:0px;padding:1rem;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;grid-column-gap:10px;column-gap:10px}.kwikid-form-buttons *{flex-grow:1}#uf-form-fields-header-container{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:flex-start;grid-row-gap:.5rem;row-gap:.5rem;padding:1rem}#uf-form-fields-header-container hr{width:100%}#uf-form-fields-title{color:#000;font-size:1.75em;font-weight:bold}#uf-form-fields-steps{color:var(--color-on-secondary-container);font-size:1em}.title{border-left:.25rem solid var(--tui-primary);padding:.75rem;font-size:1.4em;font-weight:bold;background-color:var(--tui-secondary);display:flex;flex-direction:row;align-content:center;justify-content:space-between;align-items:center;grid-gap:.5rem;gap:.5rem}.title:not(:first-child){margin-top:.5rem}.title.hidden{display:none}.large-wrapper{width:100%;height:60px}.large-wrapper:first-child{margin-bottom:auto}.large-wrapper:last-child{margin-top:auto}.kwikid-form-container-loading{width:100%;height:100%;margin:0 auto;display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:center;grid-row-gap:1rem;row-gap:1rem;padding:1rem}#field-error-notification{background-color:var(--tui-error-fill);color:#fff!important}#field-error-notification .t-top{color:#fff!important}#field-error-notification .t-close{color:#fff!important}\n"], components: [{ type: i2.KwikUIButtonComponent, selector: "kwikui-button", inputs: ["disabled", "id", "label", "showLoader", "styles", "class", "type", "appearance", "icon", "iconRight", "shape", "size"], outputs: ["onClick"] }, { type: i2.KwikUIInputComponent, selector: "kwikui-input", inputs: ["label", "id", "type", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "validators", "case", "properties"], outputs: ["getKeyValue"] }, { type: i2.KwikUIMessagesComponent, selector: "kwikui-messages", inputs: ["messages", "id"] }, { type: i2.KwikUICheckboxBlockComponent, selector: "kwikui-checkbox-block", inputs: ["label", "id", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "size", "contentAlign", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputNumberComponent, selector: "kwikui-input-number", inputs: ["label", "id", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "min", "max", "prefix", "postfix", "precision", "decimal", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputDateComponent, selector: "kwikui-input-date", inputs: ["label", "id", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "min", "max", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputPhoneComponent, selector: "kwikui-input-phone", inputs: ["label", "id", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "countryCode", "phoneMaskAfterCountryCode", "removeCountryCodeFromValue", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i3.TuiLabelComponent, selector: "label[tuiLabel]", inputs: ["tuiLabel", "context"] }, { type: i2.KwikUIRadioListComponent, selector: "kwikui-radio-list", inputs: ["label", "id", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "size", "orientation", "items", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i2.KwikUISelectComboboxComponent, selector: "kwikui-select-combobox", inputs: ["label", "id", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "options", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i2.KwikUIButtonApiCallComponent, selector: "kwikui-button-api-call", inputs: ["disabled", "id", "label", "showLoader", "styles", "class", "shape", "size", "apiStatus"], outputs: ["onClick"] }, { type: i2.KwikUIInputOtpComponent, selector: "kwikui-input-otp", inputs: ["label", "id", "formControlName", "formControl", "focus", "invalid", "disabled", "placeholder", "mask", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i2.KwikUIInputAadhaarComponent, selector: "kwikui-input-aadhaar", inputs: ["label", "id", "formControlName", "formControl", "focus", "invalid", "disabled", "placeholder", "mask", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i4.TuiPushComponent, selector: "tui-push", inputs: ["heading", "type", "timestamp"], outputs: ["close"] }, { type: i3.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i6.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i4.TuiPushAlertDirective, selector: "[tuiPush]", inputs: ["tuiPush"] }, { type: i4.TuiPushDirective, selector: "tui-push" }] });
636
636
  __decorate([
637
637
  log
638
638
  ], KwikIDFormViewComponent.prototype, "ngOnInit", null);
@@ -785,4 +785,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
785
785
  }], getActiveFormData: [{
786
786
  type: Output
787
787
  }], ngOnInit: [], ngAfterViewInit: [], ngOnChanges: [], initFormConfig: [], setFormFieldsFromFormConfig: [], setFormFieldGroupsFromFormConfig: [], setFormDataFromAllFormsData: [], handleConnectedElementFieldGroupActions: [], handleConnectedElementFieldGroup: [], handleConnectedElementFieldActions: [], handleConnectedElementFields: [], handleConnectedElements: [], handleGetKeyValue: [], handleOnClickResetFormFields: [], handleOnClickApiCall: [], handleOnClickViewForms: [], handleOnClickSaveForm: [], toggleErrorNotification: [], fieldHide: [], fieldGroupHide: [], fieldShow: [], fieldGroupShow: [], fieldDisable: [], fieldGroupDisable: [], fieldEnable: [], fieldGroupEnable: [], fieldReset: [], fieldErrorShow: [], fieldErrorHide: [], fieldMessageShow: [], fieldMessageHide: [], setObjectValue: [], patchFieldControlValue: [], isFieldValid: [], isFieldEnabled: [], getFormGroupRawValues: [], handleFieldTypeSearchText: [], takeActionOnFieldGroup: [], takeAction: [] } });
788
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL3JlbmRlcmVyL2Zvcm0tdmlldy9mb3JtLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2Zvcm0tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMERBQTBELENBQUM7QUFFdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUV0RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFNcEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkQsT0FBTyxFQUNMLE1BQU0s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O3NCQURYLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLGdCQUFnQjtzQkFEZixNQUFNO2dCQUlQLGVBQWU7c0JBRGQsTUFBTTtnQkFJUCxjQUFjO3NCQURiLE1BQU07Z0JBSVAsaUJBQWlCO3NCQURoQixNQUFNO2dCQTBCUCxRQUFRLE1BU1IsZUFBZSxNQUdmLFdBQVcsTUE2REwsY0FBYyxNQXFEcEIsMkJBQTJCLE1BWTNCLGdDQUFnQyxNQUtoQywyQkFBMkIsTUFTckIsdUNBQXVDLE1BcUN2QyxnQ0FBZ0MsTUFrRGhDLGtDQUFrQyxNQXVDbEMsNEJBQTRCLE1BOEY1Qix1QkFBdUIsTUE4QjdCLGlCQUFpQixNQXNDWCw0QkFBNEIsTUFtQjVCLG9CQUFvQixNQXFEMUIsc0JBQXNCLE1BT3RCLHFCQUFxQixNQTZFckIsdUJBQXVCLE1BTXZCLFNBQVMsTUFXVCxjQUFjLE1BT2QsU0FBUyxNQVdULGNBQWMsTUFPZCxZQUFZLE1BbUJaLGlCQUFpQixNQU9qQixXQUFXLE1BbUJYLGdCQUFnQixNQU9oQixVQUFVLE1BMkNWLGNBQWMsTUFhZCxjQUFjLE1BYWQsZ0JBQWdCLE1BWWhCLGdCQUFnQixNQVloQixjQUFjLE1BR2Qsc0JBQXNCLE1BVXRCLFlBQVksTUFLWixjQUFjLE1BS2QscUJBQXFCLE1BS2YseUJBQXlCLE1Bb0J6QixzQkFBc0IsTUEwQnRCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IFR1aUFsZXJ0U2VydmljZSB9IGZyb20gXCJAdGFpZ2EtdWkvY29yZVwiO1xyXG5pbXBvcnQgeyBUdWlQdXNoU2VydmljZSB9IGZyb20gXCJAdGFpZ2EtdWkva2l0XCI7XHJcbmltcG9ydCB7IHBhaXJ3aXNlIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IEVBY3Rpb25LZXkgfSBmcm9tIFwiLi9kZWZpbml0aW9ucy9hY3Rpb25zL2Zvcm0tdmlldy5hY3Rpb25zLmVudW0uZGVmaW5pdGlvbnNcIjtcclxuaW1wb3J0IHsgVEFjdGlvbiB9IGZyb20gXCIuL2RlZmluaXRpb25zL2FjdGlvbnMvZm9ybS12aWV3LmFjdGlvbnMudHlwZS5kZWZpbml0aW9uc1wiO1xyXG5pbXBvcnQgeyBFQXBpU3RhdHVzVHlwZSB9IGZyb20gXCIuL2RlZmluaXRpb25zL2FwaXMvZm9ybS12aWV3LmFwaXMuZW51bS5kZWZpbml0aW9uc1wiO1xyXG5pbXBvcnQgeyBFTWVzc2FnZVR5cGUgfSBmcm9tIFwiLi9kZWZpbml0aW9ucy9jb21tb24vZm9ybS12aWV3LmNvbW1vbi5lbnVtLmRlZmluaXRpb25zXCI7XHJcbmltcG9ydCB7IFRNZXNzYWdlIH0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvY29tbW9uL2Zvcm0tdmlldy5jb21tb24udHlwZS5kZWZpbml0aW9uc1wiO1xyXG5pbXBvcnQgeyBFRmllbGRUeXBlIH0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZmllbGRzL2Zvcm0tdmlldy5maWVsZHMuZW51bS5kZWZpbml0aW9uc1wiO1xyXG5pbXBvcnQge1xyXG4gIFRGaWVsZCxcclxuICBURmllbGRBcGlDYWxsLFxyXG4gIFRGaWVsZFRpdGxlXHJcbn0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZmllbGRzL2Zvcm0tdmlldy5maWVsZHMudHlwZS5kZWZpbml0aW9uc1wiO1xyXG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiLi9mb3JtLXZpZXcuZGVjb3JhdG9yc1wiO1xyXG5pbXBvcnQgeyBLd2lrSURGb3JtVmlld1NlcnZpY2UgfSBmcm9tIFwiLi9mb3JtLXZpZXcuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBBY3Rpb25zIH0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcuYWN0aW9ucy5oZWxwZXJcIjtcclxuaW1wb3J0IHsgQXBpcyB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmFwaXMuaGVscGVyXCI7XHJcbmltcG9ydCB7XHJcbiAgaGFzS2V5LFxyXG4gIGlzRW1wdHksXHJcbiAgaXNOb3RFbXB0eSxcclxuICBzZXRFbXB0eVZhbHVlXHJcbn0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcuY29tbW9uLmhlbHBlclwiO1xyXG5pbXBvcnQgeyBDb25kaXRpb24gfSBmcm9tIFwiLi9oZWxwZXJzL2Zvcm0tdmlldy5jb25kaXRpb24uaGVscGVyXCI7XHJcbmltcG9ydCB7XHJcbiAgYWRkTWVzc2FnZSxcclxuICBjb252ZXJ0VmFsdWVGcm9tS3dpa1VJRm9ybWF0VG9CYXNpY0Zvcm1hdCxcclxuICBmaW5kRmllbGRGcm9tS2V5LFxyXG4gIGZpbmRGaWVsZEluZGV4RnJvbUtleSxcclxuICBnZXRTZWFyY2hUZXh0T3B0aW9uc0Zyb21GaWVsZENvbmZpZyxcclxuICBnZXRTZWFyY2hUZXh0T3B0aW9uc0Zyb21SZW1vdGVGaWxlLFxyXG4gIGhpZ2hsaWdodEZpZWxkRXJyb3IsXHJcbiAgcmVtb3ZlTWVzc2FnZSxcclxuICBzZXRGaWVsZEVycm9yXHJcbn0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcuZmllbGRzLmhlbHBlclwiO1xyXG5pbXBvcnQgeyBSdWxlcyB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LnJ1bGVzLmhlbHBlclwiO1xyXG5pbXBvcnQgeyBTb3VyY2VzIH0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcuc291cmNlcy5oZWxwZXJcIjtcclxuaW1wb3J0IHsgVmFsaWRhdGlvbnMgfSBmcm9tIFwiLi9oZWxwZXJzL2Zvcm0tdmlldy52YWxpZGF0aW9ucy5oZWxwZXJcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImt3aWtpZC1mb3JtLXZpZXdcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2Zvcm0tdmlldy5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9mb3JtLXZpZXcuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgcHJvdmlkZXJzOiBbS3dpa0lERm9ybVZpZXdTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgS3dpa0lERm9ybVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpXHJcbiAgZm9ybUNvbmZpZzogYW55O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGZvcm1EYXRhOiBhbnk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgYXBpQ2FsbFJlc3BvbnNlOiBhbnkgPSB7fTtcclxuXHJcbiAgQElucHV0KClcclxuICBpc01vYmlsZVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBhbGxGb3Jtc0RhdGE6IGFueTtcclxuXHJcbiAgQElucHV0KClcclxuICBmb3Jtc0xpc3Q6IGFueVtdO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBvbkNsaWNrVmlld0Zvcm1zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBvbkNsaWNrU2F2ZUZvcm06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uQ2xpY2tBcGlDYWxsOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBnZXRBY3RpdmVGb3JtRGF0YTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgZmllbGRHcm91cHM6IGFueSA9IHt9O1xyXG4gIGZvcm1GaWVsZHM6IGFueVtdID0gW107XHJcbiAgcHJldmlvdXNGb3JtRGF0YTogYW55ID0ge307XHJcblxyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHZpZXdGb3Jtc0J1dHRvbiA9IHtcclxuICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgIHNob3dMb2FkZXI6IGZhbHNlXHJcbiAgfTtcclxuICBzYXZlRm9ybUJ1dHRvbiA9IHtcclxuICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgIHNob3dMb2FkZXI6IGZhbHNlXHJcbiAgfTtcclxuXHJcbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KFR1aVB1c2hTZXJ2aWNlKSBwcm90ZWN0ZWQgcmVhZG9ubHkgcHVzaDogVHVpUHVzaFNlcnZpY2UsXHJcbiAgICBASW5qZWN0KFR1aUFsZXJ0U2VydmljZSkgcHJvdGVjdGVkIHJlYWRvbmx5IGFsZXJ0OiBUdWlBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZvcm1WaWV3U2VydmljZTogS3dpa0lERm9ybVZpZXdTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBAbG9nXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICBhd2FpdCB0aGlzLmluaXRGb3JtQ29uZmlnKHRoaXMuZm9ybUNvbmZpZyk7XHJcblxyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0pKCk7XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge31cclxuXHJcbiAgQGxvZ1xyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGNvbnN0IHZlcmlmeUNoYW5nZSA9IChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICByZXR1cm4gaGFzS2V5KGNoYW5nZXMsIGtleSkgJiYgIWNoYW5nZXNba2V5XS5maXJzdENoYW5nZTtcclxuICAgIH07XHJcbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiZm9ybURhdGFcIikpIHtcclxuICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcclxuICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxyXG4gICAgICAgIC4uLmNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiYXBpQ2FsbFJlc3BvbnNlXCIpKSB7XHJcbiAgICAgIHRoaXMuYXBpQ2FsbFJlc3BvbnNlID0gY2hhbmdlcy5hcGlDYWxsUmVzcG9uc2UuY3VycmVudFZhbHVlO1xyXG5cclxuICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcclxuICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxyXG4gICAgICAgIFt0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXldOiB0aGlzLmFwaUNhbGxSZXNwb25zZS5yZXNwb25zZVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBbdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5XTogdGhpcy5hcGlDYWxsUmVzcG9uc2UucmVzcG9uc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICBsZXQgZmllbGQ6IFRGaWVsZEFwaUNhbGwgPSBmaW5kRmllbGRGcm9tS2V5KFxyXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcclxuICAgICAgICB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXlcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhcclxuICAgICAgICBmaWVsZCxcclxuICAgICAgICB0aGlzLmZvcm1EYXRhLFxyXG4gICAgICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSxcclxuICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YSxcclxuICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICBmaWVsZCA9IGF3YWl0IGFwaXMudmFsaWRhdGVBcGlDYWxsUmVzcG9uc2UoKTtcclxuICAgICAgfSkoKTtcclxuICAgIH1cclxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJpc01vYmlsZVZpZXdcIikpIHtcclxuICAgICAgdGhpcy5pc01vYmlsZVZpZXcgPSBjaGFuZ2VzLmlzTW9iaWxlVmlldy5jdXJyZW50VmFsdWU7XHJcbiAgICB9XHJcbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiYWxsRm9ybXNEYXRhXCIpKSB7XHJcbiAgICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gY2hhbmdlcy5hbGxGb3Jtc0RhdGEuY3VycmVudFZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImZvcm1zTGlzdFwiKSkge1xyXG4gICAgICB0aGlzLmZvcm1zTGlzdCA9IGNoYW5nZXMuZm9ybXNMaXN0LmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJmb3JtQ29uZmlnXCIpKSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbmZpZyA9IGNoYW5nZXMuZm9ybUNvbmZpZy5jdXJyZW50VmFsdWU7XHJcblxyXG4gICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdEZvcm1Db25maWcodGhpcy5mb3JtQ29uZmlnKTtcclxuICAgICAgfSkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBhc3luYyBpbml0Rm9ybUNvbmZpZyhmb3JtQ29uZmlnOiBhbnkpIHtcclxuICAgIHRoaXMuc2V0Rm9ybUZpZWxkc0Zyb21Gb3JtQ29uZmlnKGZvcm1Db25maWcpO1xyXG5cclxuICAgIHRoaXMuc2V0Rm9ybUZpZWxkR3JvdXBzRnJvbUZvcm1Db25maWcoZm9ybUNvbmZpZyk7XHJcblxyXG4gICAgdGhpcy5zZXRGb3JtRGF0YUZyb21BbGxGb3Jtc0RhdGEoKTtcclxuXHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IGF3YWl0IHRoaXMuZm9ybVZpZXdTZXJ2aWNlLmNyZWF0ZUZvcm1Hcm91cChcclxuICAgICAgdGhpcy5mb3JtRmllbGRzLFxyXG4gICAgICB0aGlzLmZvcm1EYXRhLFxyXG4gICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgIHRoaXMuYWxsRm9ybXNEYXRhLFxyXG4gICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxyXG4gICAgKTtcclxuXHJcbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZvcm1GaWVsZHMpIHtcclxuICAgICAgaWYgKGZpZWxkLnR5cGUgIT09IFwidGl0bGVcIikge1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSA9IHtcclxuICAgICAgICAgIC4uLnRoaXMucHJldmlvdXNGb3JtRGF0YSxcclxuICAgICAgICAgIFtmaWVsZC5rZXldOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZUNoYW5nZXNcclxuICAgICAgICAgIC5waXBlKHBhaXJ3aXNlKCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChbcHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEgPSB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBwcmV2aW91c1ZhbHVlXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZvcm1EYXRhID0ge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXHJcbiAgICAgICAgICAgICAgW2ZpZWxkLmtleV06IGN1cnJlbnRWYWx1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xyXG4gICAgICBpZiAoZmllbGQudHlwZSAhPT0gXCJ0aXRsZVwiKSB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIGZpZWxkID0gYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxyXG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiT05fSU5JVFwiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBzZXRGb3JtRmllbGRzRnJvbUZvcm1Db25maWcoZm9ybUNvbmZpZzogYW55KSB7XHJcbiAgICBpZiAoaGFzS2V5KGZvcm1Db25maWcsIFwiZmllbGRzXCIpKSB7XHJcbiAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IGZvcm1Db25maWcuZmllbGRzO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgaGFzS2V5KGZvcm1Db25maWcsIFwibXVsdGlGb3JtXCIpICYmXHJcbiAgICAgIGhhc0tleShmb3JtQ29uZmlnLm11bHRpRm9ybSwgXCJmaWVsZHNcIilcclxuICAgICkge1xyXG4gICAgICB0aGlzLmZvcm1GaWVsZHMgPSBmb3JtQ29uZmlnLm11bHRpRm9ybS5maWVsZHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgc2V0Rm9ybUZpZWxkR3JvdXBzRnJvbUZvcm1Db25maWcoZm9ybUNvbmZpZzogYW55KSB7XHJcbiAgICB0aGlzLmZpZWxkR3JvdXBzID0gZm9ybUNvbmZpZy5maWVsZEdyb3VwcztcclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBzZXRGb3JtRGF0YUZyb21BbGxGb3Jtc0RhdGEoKSB7XHJcbiAgICBpZiAoaGFzS2V5KHRoaXMuYWxsRm9ybXNEYXRhLCB0aGlzLmZvcm1Db25maWcua2V5KSkge1xyXG4gICAgICB0aGlzLmZvcm1EYXRhID0gdGhpcy5hbGxGb3Jtc0RhdGFbdGhpcy5mb3JtQ29uZmlnLmtleV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1EYXRhID0ge307XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXBBY3Rpb25zKFxyXG4gICAgY2hpbGRGaWVsZEdyb3VwQ29uZmlnOiBhbnksXHJcbiAgICBwYXJlbnRGaWVsZDogYW55XHJcbiAgKSB7XHJcbiAgICBpZiAoaGFzS2V5KGNoaWxkRmllbGRHcm91cENvbmZpZywgXCJydWxlc1wiKSkge1xyXG4gICAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZXMoXHJcbiAgICAgICAgY2hpbGRGaWVsZEdyb3VwQ29uZmlnLnJ1bGVzLFxyXG4gICAgICAgIHBhcmVudEZpZWxkLFxyXG4gICAgICAgIHRoaXMuZm9ybURhdGEsXHJcbiAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICAgIHRoaXMuYWxsRm9ybXNEYXRhXHJcbiAgICAgICkubWFwcGluZygpO1xyXG5cclxuICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIGNoaWxkRmllbGRHcm91cENvbmZpZy5hY3Rpb25zKSB7XHJcbiAgICAgICAgY29uc3QgY29uZGl0aW9uU3VjY2VzcyA9IG5ldyBDb25kaXRpb24oXHJcbiAgICAgICAgICBhY3Rpb24uY29uZGl0aW9uLFxyXG4gICAgICAgICAgcnVsZXNNYXBwaW5nXHJcbiAgICAgICAgKS5ldmFsdWF0ZSgpO1xyXG5cclxuICAgICAgICBpZiAoY29uZGl0aW9uU3VjY2Vzcykge1xyXG4gICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb25zKFxyXG4gICAgICAgICAgICBhY3Rpb24sXHJcbiAgICAgICAgICAgIHBhcmVudEZpZWxkLFxyXG4gICAgICAgICAgICBydWxlc01hcHBpbmcsXHJcbiAgICAgICAgICAgIHRoaXMuYWxsRm9ybXNEYXRhLFxyXG4gICAgICAgICAgICB0aGlzLmZvcm1EYXRhLFxyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbk9uRmllbGRHcm91cC5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGxvZ1xyXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwKFxyXG4gICAgY3VycmVudEZpZWxkOiBhbnksXHJcbiAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnOiBhbnksXHJcbiAgICBldmVudFR5cGU6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgc3dpdGNoIChldmVudFR5cGUpIHtcclxuICAgICAgY2FzZSBcIklOSVRcIjpcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBoYXNLZXkoY29ubmVjdGVkRmllbGRHcm91cENvbmZpZywgXCJ0cmlnZ2Vyc1wiKSAmJlxyXG4gICAgICAgICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZy50cmlnZ2Vycy5pbmNsdWRlcyhcIklOSVRcIilcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXBBY3Rpb25zKFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLFxyXG4gICAgICAgICAgICBjdXJyZW50RmllbGRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiVkFMVUVfQ0hBTkdFXCI6XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgaGFzS2V5KGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsIFwidHJpZ2dlcnNcIikgJiZcclxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcudHJpZ2dlcnMuaW5jbHVkZXMoXCJWQUxVRV9DSEFOR0VcIilcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXBBY3Rpb25zKFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLFxyXG4gICAgICAgICAgICBjdXJyZW50RmllbGRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiTkVTVEVEX0xJTktcIjpcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBoYXNLZXkoY29ubmVjdGVkRmllbGRHcm91cENvbmZpZywgXCJ0cmlnZ2Vyc1wiKSAmJlxyXG4gICAgICAgICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZy50cmlnZ2Vycy5pbmNsdWRlcyhcIk5FU1RFRF9MSU5LXCIpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwQWN0aW9ucyhcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZyxcclxuICAgICAgICAgICAgY3VycmVudEZpZWxkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBpZiAoaGFzS2V5KGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsIFwidHJpZ2dlcnNcIikpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXBBY3Rpb25zKFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLFxyXG4gICAgICAgICAgICBjdXJyZW50RmllbGRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGxvZ1xyXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEFjdGlvbnMoXHJcbiAgICBjb25uZWN0ZWRGaWVsZENvbmZpZzogYW55LFxyXG4gICAgY29ubmVjdGVkRmllbGQ6IGFueVxyXG4gICkge1xyXG4gICAgaWYgKGhhc0tleShjb25uZWN0ZWRGaWVsZENvbmZpZywgXCJydWxlc1wiKSkge1xyXG4gICAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZXMoXHJcbiAgICAgICAgY29ubmVjdGVkRmllbGRDb25maWcucnVsZXMsXHJcbiAgICAgICAgY29ubmVjdGVkRmllbGQsXHJcbiAgICAgICAgdGhpcy5mb3JtRGF0YSxcclxuICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgICAgdGhpcy5hbGxGb3Jtc0RhdGFcclxuICAgICAgKS5tYXBwaW5nKCk7XHJcblxyXG4gICAgICBmb3IgKGxldCBhY3Rpb24gb2YgY29ubmVjdGVkRmllbGRDb25maWcuYWN0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IGNvbmRpdGlvblN1Y2Nlc3MgPSBuZXcgQ29uZGl0aW9uKFxyXG4gICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcclxuICAgICAgICAgIHJ1bGVzTWFwcGluZ1xyXG4gICAgICAgICkuZXZhbHVhdGUoKTtcclxuXHJcbiAgICAgICAgaWYgKGNvbmRpdGlvblN1Y2Nlc3MpIHtcclxuICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9ucyhcclxuICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZCxcclxuICAgICAgICAgICAgcnVsZXNNYXBwaW5nLFxyXG4gICAgICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YSxcclxuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YSxcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29ubmVjdGVkRmllbGQ7XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkcyhcclxuICAgIGN1cnJlbnRGaWVsZDogYW55LFxyXG4gICAgY29ubmVjdGVkRmllbGRDb25maWc6IGFueSxcclxuICAgIGV2ZW50VHlwZTogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICBsZXQgY29ubmVjdGVkRmllbGQgPSBmaW5kRmllbGRGcm9tS2V5KFxyXG4gICAgICB0aGlzLmZvcm1GaWVsZHMsXHJcbiAgICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnW1wia2V5XCJdXHJcbiAgICApO1xyXG5cclxuICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XHJcbiAgICAgIGNhc2UgXCJJTklUXCI6XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgaGFzS2V5KGNvbm5lY3RlZEZpZWxkLCBcInRyaWdnZXJzXCIpICYmXHJcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZC50cmlnZ2Vycy5pbmNsdWRlcyhcIklOSVRcIilcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmICh0aGlzLmlzRmllbGRFbmFibGVkKGNvbm5lY3RlZEZpZWxkLmtleSkpIHtcclxuICAgICAgICAgICAgaWYgKGhhc0tleShjb25uZWN0ZWRGaWVsZENvbmZpZywgXCJjb25uZWN0ZWRQYXJlbnRGaWVsZHNcIikpIHtcclxuICAgICAgICAgICAgICBzd2l0Y2ggKGNvbm5lY3RlZEZpZWxkQ29uZmlnLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJkcm9wZG93bi13aXRoLXNlYXJjaFwiOlxyXG4gICAgICAgICAgICAgICAgICBjb25uZWN0ZWRGaWVsZCA9IGF3YWl0IHRoaXMuaGFuZGxlRmllbGRUeXBlU2VhcmNoVGV4dChcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkRmllbGRcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkID0gYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRBY3Rpb25zKFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZyxcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiVkFMVUVfQ0hBTkdFXCI6XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgaGFzS2V5KGNvbm5lY3RlZEZpZWxkQ29uZmlnLCBcInRyaWdnZXJzXCIpICYmXHJcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZy50cmlnZ2Vycy5pbmNsdWRlcyhcIlZBTFVFX0NIQU5HRVwiKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgc3dpdGNoIChjb25uZWN0ZWRGaWVsZC50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkcm9wZG93bi13aXRoLXNlYXJjaFwiOlxyXG4gICAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkID0gYXdhaXQgdGhpcy5oYW5kbGVGaWVsZFR5cGVTZWFyY2hUZXh0KFxyXG4gICAgICAgICAgICAgICAgY3VycmVudEZpZWxkLFxyXG4gICAgICAgICAgICAgICAgY29ubmVjdGVkRmllbGRcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29ubmVjdGVkRmllbGQgPSBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEFjdGlvbnMoXHJcbiAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnLFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJORVNURURfTElOS1wiOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGhhc0tleShjb25uZWN0ZWRGaWVsZENvbmZpZywgXCJ0cmlnZ2Vyc1wiKSAmJlxyXG4gICAgICAgICAgY29ubmVjdGVkRmllbGRDb25maWcudHJpZ2dlcnMuaW5jbHVkZXMoXCJORVNURURfTElOS1wiKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29ubmVjdGVkRmllbGQgPSBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEFjdGlvbnMoXHJcbiAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnLFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgaWYgKGhhc0tleShjb25uZWN0ZWRGaWVsZENvbmZpZywgXCJ0cmlnZ2Vyc1wiKSkge1xyXG4gICAgICAgICAgY29ubmVjdGVkRmllbGQgPSBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEFjdGlvbnMoXHJcbiAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnLFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhc0tleShjb25uZWN0ZWRGaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKSkge1xyXG4gICAgICBpZiAoaGFzS2V5KGNvbm5lY3RlZEZpZWxkLmNvbm5lY3RlZEVsZW1lbnRzLCBcImNvbm5lY3RlZEZpZWxkc1wiKSkge1xyXG4gICAgICAgIGZvciAoY29uc3QgY29ubmVjdGVkRmllbGRDb25maWcgb2YgY29ubmVjdGVkRmllbGQuY29ubmVjdGVkRWxlbWVudHNcclxuICAgICAgICAgIC5jb25uZWN0ZWRGaWVsZHMpIHtcclxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkID0gdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRzKFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZCxcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGRDb25maWcsXHJcbiAgICAgICAgICAgIFwiTkVTVEVEX0xJTktcIlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY3VycmVudEZpZWxkO1xyXG4gIH1cclxuXHJcbiAgQGxvZ1xyXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKGU6IGFueSwgZXZlbnRUeXBlOiBzdHJpbmcpIHtcclxuICAgIGxldCBjdXJyZW50RmllbGQgPSBmaW5kRmllbGRGcm9tS2V5KHRoaXMuZm9ybUZpZWxkcywgZS5rZXkpO1xyXG5cclxuICAgIGlmIChoYXNLZXkoY3VycmVudEZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpKSB7XHJcbiAgICAgIGlmIChoYXNLZXkoY3VycmVudEZpZWxkLmNvbm5lY3RlZEVsZW1lbnRzLCBcImNvbm5lY3RlZEZpZWxkR3JvdXBzXCIpKSB7XHJcbiAgICAgICAgbGV0IGNvbm5lY3RlZEZpZWxkR3JvdXBzID1cclxuICAgICAgICAgIGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cy5jb25uZWN0ZWRGaWVsZEdyb3VwcztcclxuICAgICAgICBmb3IgKGxldCBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnIG9mIGNvbm5lY3RlZEZpZWxkR3JvdXBzKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwKFxyXG4gICAgICAgICAgICBjdXJyZW50RmllbGQsXHJcbiAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsXHJcbiAgICAgICAgICAgIGV2ZW50VHlwZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGhhc0tleShjdXJyZW50RmllbGQuY29ubmVjdGVkRWxlbWVudHMsIFwiY29ubmVjdGVkRmllbGRzXCIpKSB7XHJcbiAgICAgICAgbGV0IGNvbm5lY3RlZEZpZWxkcyA9IGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cy5jb25uZWN0ZWRGaWVsZHM7XHJcbiAgICAgICAgZm9yIChsZXQgY29ubmVjdGVkRmllbGRDb25maWcgb2YgY29ubmVjdGVkRmllbGRzKSB7XHJcbiAgICAgICAgICBjdXJyZW50RmllbGQgPSBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZHMoXHJcbiAgICAgICAgICAgIGN1cnJlbnRGaWVsZCxcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGRDb25maWcsXHJcbiAgICAgICAgICAgIGV2ZW50VHlwZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIERPTSBFdmVudCBIYW5kbGVyc1xyXG4gIEBsb2dcclxuICBoYW5kbGVHZXRLZXlWYWx1ZShlOiBhbnkpIHtcclxuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXHJcbiAgICAgIHtcclxuICAgICAgICBbZS5rZXldOiBlLnZhbHVlXHJcbiAgICAgIH0sXHJcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XHJcbiAgICApO1xyXG5cclxuICAgIC8vIEN1cnJlbnRseSBzZXQgb25seSBmb3IgZHJvcGRvd24td2l0aC1zZWFyY2ggY29ubmVjdGVkIGZpZWxkc1xyXG4gICAgbGV0IGZpZWxkID0gZmluZEZpZWxkRnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGZpZWxkLnR5cGUgIT09IFwidGl0bGVcIiAmJlxyXG4gICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fQ0hBTkdFXCIpXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSBuZXcgVmFsaWRhdGlvbnMoXHJcbiAgICAgICAgZmllbGQsXHJcbiAgICAgICAgdGhpcy5mb3JtRGF0YSxcclxuICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgICAgdGhpcy5hbGxGb3Jtc0RhdGEsXHJcbiAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcclxuICAgICAgKTtcclxuXHJcbiAgICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgYXdhaXQgdmFsaWRhdGlvbnMudmFsaWRhdGVGaWVsZCgpO1xyXG4gICAgICB9KSgpO1xyXG5cclxuICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcclxuICAgICAgICB7XHJcbiAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcclxuICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcIk9OX0NIQU5HRVwiXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgYXN5bmMgaGFuZGxlT25DbGlja1Jlc2V0Rm9ybUZpZWxkcyhlOiBhbnksIGZpZWxkOiBURmllbGRUaXRsZSkge1xyXG4gICAgZm9yIChsZXQgZiBvZiBmaWVsZC5yZXNldC5maWVsZHMpIHtcclxuICAgICAgZm9yIChsZXQgYSBvZiBmLmFjdGlvbnMpIHtcclxuICAgICAgICBjb25zdCByZXNldEZpZWxkID0gZmluZEZpZWxkRnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGEucHJvcHMuZmllbGRLZXkpO1xyXG4gICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9ucyhcclxuICAgICAgICAgIGEsXHJcbiAgICAgICAgICByZXNldEZpZWxkLFxyXG4gICAgICAgICAge30sXHJcbiAgICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YSxcclxuICAgICAgICAgIHRoaXMuZm9ybURhdGEsXHJcbiAgICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBhc3luYyBoYW5kbGVPbkNsaWNrQXBpQ2FsbChlOiBhbnkpIHtcclxuICAgIGxldCBmaWVsZDogVEZpZWxkQXBpQ2FsbCA9IGZpbmRGaWVsZEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBlLmtleSk7XHJcblxyXG4gICAgaWYgKGZpZWxkLnR5cGUgPT09IFwiYXBpLWNhbGxcIikge1xyXG4gICAgICAvLyBzZXQgYnV0dG9uIHN0YXR1cyB0byBsb2FkaW5nXHJcbiAgICAgIGZpZWxkW1wiYXBpXCJdW1wic3RhdHVzXCJdW1widmFsdWVcIl0gPSBFQXBpU3RhdHVzVHlwZS5MT0FESU5HO1xyXG4gICAgICBmaWVsZFtcInNob3dMb2FkZXJcIl0gPSB0cnVlO1xyXG4gICAgICB0aGlzLnZpZXdGb3Jtc0J1dHRvbltcImRpc2FibGVkXCJdID0gdHJ1ZTtcclxuICAgICAgdGhpcy52aWV3Rm9ybXNCdXR0b25bXCJzaG93TG9hZGVyXCJdID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zYXZlRm9ybUJ1dHRvbltcImRpc2FibGVkXCJdID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zYXZlRm9ybUJ1dHRvbltcInNob3dMb2FkZXJcIl0gPSB0cnVlO1xyXG5cclxuICAgICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKFxyXG4gICAgICAgIGZpZWxkLFxyXG4gICAgICAgIHRoaXMuZm9ybURhdGEsXHJcbiAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICAgIHRoaXMuYWxsRm9ybXNEYXRhLFxyXG4gICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBmaWVsZCA9IGF3YWl0IGFwaXMuc2V0UmVxdWVzdEJvZHlQYXJhbXMoKTtcclxuXHJcbiAgICAgIGZpZWxkID0gYXdhaXQgYXBpcy52YWxpZGF0ZVJlcXVlc3RCb2R5KCk7XHJcblxyXG4gICAgICBpZiAoZmllbGQuYXBpLnJlcXVlc3QuYm9keS52YWxpZGF0aW9uLmlzX3ZhbGlkKSB7XHJcbiAgICAgICAgLy8gQ2FsbCBBUEkgSGVyZVxyXG4gICAgICAgIHRoaXMub25DbGlja0FwaUNhbGwuZW1pdCh7XHJcbiAgICAgICAgICBrZXk6IGUua2V5LFxyXG4gICAgICAgICAgcmVxdWVzdDoge1xyXG4gICAgICAgICAgICBtb2RlOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgYm9keTogZmllbGQuYXBpLnJlcXVlc3QuYm9keS52YWx1ZSxcclxuICAgICAgICAgICAgaGVhZGVyczoge30sXHJcbiAgICAgICAgICAgIHVybDogZmllbGQuYXBpLnJlcXVlc3QudXJsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gUmVxdWVzdCBCb2R5IFZhbGlkYXRpb24gRmFpbGVkXHJcbiAgICAgICAgLy8gSGlnaGxpZ2h0IEVycm9yIGluIFVJIHRvIFVzZXIgdG8gUmV0cnkgQWZ0ZXIgU29tZXRpbWUuXHJcbiAgICAgICAgLy8gVGFrZSBBY3Rpb25zIGJhc2VkIG9uIFZhbGlkYXRpb25cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGZpZWxkW1wiYXBpXCJdW1wic3RhdHVzXCJdW1widmFsdWVcIl0gPSBFQXBpU3RhdHVzVHlwZS5GQUlMRUQ7XHJcbiAgICAgICAgICBmaWVsZFtcInNob3dMb2FkZXJcIl0gPSBmYWxzZTtcclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnZpZXdGb3Jtc0J1dHRvbltcImRpc2FibGVkXCJdID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudmlld0Zvcm1zQnV0dG9uW1wic2hvd0xvYWRlclwiXSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNhdmVGb3JtQnV0dG9uW1wiZGlzYWJsZWRcIl0gPSBmYWxzZTtcclxuICAgICAgdGhpcy5zYXZlRm9ybUJ1dHRvbltcInNob3dMb2FkZXJcIl0gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBoYW5kbGVPbkNsaWNrVmlld0Zvcm1zKGU6IGFueSkge1xyXG4gICAgdGhpcy5vbkNsaWNrVmlld0Zvcm1zLmVtaXQoe1xyXG4gICAgICBjbGlja2VkOiB0cnVlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBoYW5kbGVPbkNsaWNrU2F2ZUZvcm0oZTogYW55KSB7XHJcbiAgICBsZXQgZm9ybURhdGEgPSB0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xyXG5cclxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xyXG4gICAgICBpZiAoZmllbGQudHlwZSAhPT0gRUZpZWxkVHlwZS5USVRMRSkge1xyXG4gICAgICAgIGlmIChmaWVsZC5oaWRkZW4pIHtcclxuICAgICAgICAgIGRlbGV0ZSBmb3JtRGF0YVtmaWVsZC5rZXldO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmb3JtRGF0YVtmaWVsZC5rZXldID0gY29udmVydFZhbHVlRnJvbUt3aWtVSUZvcm1hdFRvQmFzaWNGb3JtYXQoXHJcbiAgICAgICAgICAgIGZpZWxkLFxyXG4gICAgICAgICAgICBmb3JtRGF0YVtmaWVsZC5rZXldXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZmllbGQudHlwZSAhPT0gRUZpZWxkVHlwZS5USVRMRSAmJlxyXG4gICAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9TQVZFXCIpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0gbmV3IFZhbGlkYXRpb25zKFxyXG4gICAgICAgICAgZmllbGQsXHJcbiAgICAgICAgICBmb3JtRGF0YSxcclxuICAgICAgICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSxcclxuICAgICAgICAgIHRoaXMuYWxsRm9ybXNEYXRhLFxyXG4gICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgYXdhaXQgdmFsaWRhdGlvbnMudmFsaWRhdGVGaWVsZCgpO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAuaW52YWxpZCkge1xyXG4gICAgICBjb25zdCBjb250cm9scyA9IG5ldyBWYWxpZGF0aW9ucyhcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgZm9ybURhdGEsXHJcbiAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICAgIHRoaXMuYWxsRm9ybXNEYXRhLFxyXG4gICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXHJcbiAgICAgICkuZmluZEludmFsaWRDb250cm9sc1JlY3Vyc2l2ZSh0aGlzLmZvcm1Hcm91cCk7XHJcblxyXG4gICAgICBsZXQgZmlyc3RGaWVsZFdpdGhFcnJvcjogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAgIGZvciAobGV0IGNvbnRyb2wgb2YgY29udHJvbHMpIHtcclxuICAgICAgICBpZiAoY29udHJvbC5pbnZhbGlkICYmIGlzRW1wdHkoZmlyc3RGaWVsZFdpdGhFcnJvcikpIHtcclxuICAgICAgICAgIGZpcnN0RmllbGRXaXRoRXJyb3IgPSBjb250cm9sLmtleTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzID0gc2V0RmllbGRFcnJvcihcclxuICAgICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcclxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRyb2wua2V5XS5lcnJvcnMsXHJcbiAgICAgICAgICBjb250cm9sLmtleSxcclxuICAgICAgICAgIGNvbnRyb2wuaW52YWxpZFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24odHJ1ZSk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpO1xyXG4gICAgICB9LCAzMDAwKTtcclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBPYmplY3Qua2V5cyhmb3JtRGF0YSkubWFwKChrZXkpID0+IHtcclxuICAgICAgaWYgKGlzRW1wdHkoZm9ybURhdGFba2V5XSkpIHtcclxuICAgICAgICBmb3JtRGF0YVtrZXldID0gXCJcIjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5vbkNsaWNrU2F2ZUZvcm0uZW1pdCh7IGZvcm1Db25maWc6IHRoaXMuZm9ybUNvbmZpZywgZGF0YTogZm9ybURhdGEgfSk7XHJcbiAgfVxyXG5cclxuICBzaG93RXJyb3JOb3RpZmljYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAbG9nXHJcbiAgdG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oc2hvdykge1xyXG4gICAgdGhpcy5zaG93RXJyb3JOb3RpZmljYXRpb24gPSBzaG93O1xyXG4gIH1cclxuXHJcbiAgLy8gQ29tcG9uZW50IEhlbHBlcnNcclxuICBAbG9nXHJcbiAgZmllbGRIaWRlKGZpZWxkS2V5OiBzdHJpbmcpIHtcclxuICAgIGxldCBmaWVsZCA9IGZpbmRGaWVsZEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XHJcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XVtcImhpZGRlblwiXSA9IHRydWU7XHJcbiAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgZmllbGRHcm91cEhpZGUoZmllbGRHcm91cDogc3RyaW5nKSB7XHJcbiAgICBmb3IgKGxldCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XHJcbiAgICAgIHRoaXMuZmllbGRIaWRlKGZpZWxkS2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBmaWVsZFNob3coZmllbGRLZXk6IHN0cmluZykge1xyXG4gICAgbGV0IGZpZWxkID0gZmluZEZpZWxkRnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcclxuICAgIGxldCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdW1wiaGlkZGVuXCJdID0gZmFsc2U7XHJcbiAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgZmllbGRHcm91cFNob3coZmllbGRHcm91cDogc3RyaW5nKSB7XHJcbiAgICBmb3IgKGxldCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XHJcbiAgICAgIHRoaXMuZmllbGRTaG93KGZpZWxkS2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBmaWVsZERpc2FibGUoZmllbGRLZXk6IHN0cmluZykge1xyXG4gICAgbGV0IGZpZWxkID0gZmluZEZpZWxkRnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcclxuICAgIGxldCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGZpZWxkLnR5cGUgIT09IEVGaWVsZFR5cGUuVElUTEUpIHtcclxuICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdW1wiZGlzYWJsZWRcIl0gPSB0cnVlO1xyXG5cclxuICAgICAgaWYgKGlzTm90RW1wdHkodGhpcy5mb3JtR3JvdXAuY29udHJvbHMpKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5kaXNhYmxlKHtcclxuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgZmllbGRHcm91cERpc2FibGUoZmllbGRHcm91cDogc3RyaW5nKSB7XHJcbiAgICBmb3IgKGxldCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XHJcbiAgICAgIHRoaXMuZmllbGREaXNhYmxlKGZpZWxkS2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBmaWVsZEVuYWJsZShmaWVsZEtleTogc3RyaW5nKSB7XHJcbiAgICBsZXQgZmllbGQgPSBmaW5kRmllbGRGcm9tS2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xyXG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoZmllbGQudHlwZSAhPT0gRUZpZWxkVHlwZS5USVRMRSkge1xyXG4gICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF1bXCJkaXNhYmxlZFwiXSA9IGZhbHNlO1xyXG5cclxuICAgICAgaWYgKGlzTm90RW1wdHkodGhpcy5mb3JtR3JvdXAuY29udHJvbHMpKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5lbmFibGUoe1xyXG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBmaWVsZEdyb3VwRW5hYmxlKGZpZWxkR3JvdXA6IHN0cmluZykge1xyXG4gICAgZm9yIChsZXQgZmllbGRLZXkgb2YgdGhpcy5maWVsZEdyb3Vwc1tmaWVsZEdyb3VwXSkge1xyXG4gICAgICB0aGlzLmZpZWxkRW5hYmxlKGZpZWxkS2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBmaWVsZFJlc2V0KGZpZWxkS2V5OiBzdHJpbmcpIHtcclxuICAgIC8vIEZpbmQgdGhlIGZpZWxkIGFuZCBpdHMgaW5kZXggaW4gdGhlIGZvcm1GaWVsZHMgYXJyYXlcclxuICAgIGxldCBmaWVsZCA9IGZpbmRGaWVsZEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XHJcbiAgICBsZXQgZmllbGRJbmRleCA9IGZpbmRGaWVsZEluZGV4RnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcclxuXHJcbiAgICAvLyBEZWxldGUgdGhlIGZpZWxkIGZyb20gdGhlIGZvcm1EYXRhIG9iamVjdFxyXG4gICAgZGVsZXRlIHRoaXMuZm9ybURhdGFbZmllbGRLZXldO1xyXG5cclxuICAgIC8vIFJlc2V0IHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgaW4gdGhlIGZvcm1Hcm91cFxyXG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5yZXNldChzZXRFbXB0eVZhbHVlKGZpZWxkKSwge1xyXG4gICAgICBlbWl0RXZlbnQ6IGZhbHNlXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBSZXNldCB0aGUgbWVzc2FnZXMgYW5kIGVycm9ycyBmb3IgdGhlIGZpZWxkXHJcbiAgICBmaWVsZCA9IHJlbW92ZU1lc3NhZ2UoZmllbGQsIHtcclxuICAgICAgdHlwZTogRU1lc3NhZ2VUeXBlLldBUk5JTkcsXHJcbiAgICAgIG1lc3NhZ2U6IFwiXCJcclxuICAgIH0pO1xyXG4gICAgZmllbGQgPSByZW1vdmVNZXNzYWdlKGZpZWxkLCB7XHJcbiAgICAgIHR5cGU6IEVNZXNzYWdlVHlwZS5TVUNDRVNTLFxyXG4gICAgICBtZXNzYWdlOiBcIlwiXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZmllbGRFcnJvckhpZGUoZmllbGRLZXksIHtcclxuICAgICAgdHlwZTogRU1lc3NhZ2VUeXBlLkVSUk9SLFxyXG4gICAgICBtZXNzYWdlOiBcIlwiXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBSZXNldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGluIHRoZSBmb3JtRmllbGRzIGFycmF5XHJcbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcclxuICAgICAgY2FzZSBcImFwaS1jYWxsXCI6XHJcbiAgICAgICAgY29uc3QgZmllbGRBcGlDYWxsID0gZmllbGQgYXMgVEZpZWxkQXBpQ2FsbDtcclxuICAgICAgICBmaWVsZEFwaUNhbGwuYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLkRFRkFVTFQ7XHJcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGRBcGlDYWxsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGZpZWxkLmZvY3VzID0gZmFsc2U7XHJcbiAgICAgICAgZmllbGQuaW52YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGxvZ1xyXG4gIGZpZWxkRXJyb3JTaG93KGZpZWxkS2V5OiBzdHJpbmcsIG1lc3NhZ2U6IFRNZXNzYWdlKSB7XHJcbiAgICBsZXQgZmllbGQgPSBmaW5kRmllbGRGcm9tS2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xyXG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmaWVsZCA9IGhpZ2hsaWdodEZpZWxkRXJyb3IoZmllbGQsIHRydWUpO1xyXG4gICAgZmllbGQgPSBhZGRNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcclxuXHJcbiAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBmaWVsZEVycm9ySGlkZShmaWVsZEtleTogc3RyaW5nLCBtZXNzYWdlOiBUTWVzc2FnZSkge1xyXG4gICAgbGV0IGZpZWxkID0gZmluZEZpZWxkRnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcclxuICAgIGxldCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xyXG4gICAgfSk7XHJcblxyXG4gICAgZmllbGQgPSBoaWdobGlnaHRGaWVsZEVycm9yKGZpZWxkLCBmYWxzZSk7XHJcbiAgICBmaWVsZCA9IHJlbW92ZU1lc3NhZ2UoZmllbGQsIG1lc3NhZ2UpO1xyXG5cclxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xyXG4gIH1cclxuXHJcbiAgQGxvZ1xyXG4gIGZpZWxkTWVzc2FnZVNob3coZmllbGRLZXk6IHN0cmluZywgbWVzc2FnZTogVE1lc3NhZ2UpIHtcclxuICAgIGxldCBmaWVsZCA9IGZpbmRGaWVsZEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XHJcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZpZWxkID0gYWRkTWVzc2FnZShmaWVsZCwgbWVzc2FnZSk7XHJcblxyXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgZmllbGRNZXNzYWdlSGlkZShmaWVsZEtleTogc3RyaW5nLCBtZXNzYWdlOiBUTWVzc2FnZSkge1xyXG4gICAgbGV0IGZpZWxkID0gZmluZEZpZWxkRnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcclxuICAgIGxldCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xyXG4gICAgfSk7XHJcblxyXG4gICAgZmllbGQgPSByZW1vdmVNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcclxuXHJcbiAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBzZXRPYmplY3RWYWx1ZShmaWVsZDogYW55LCBwYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHt9XHJcblxyXG4gIEBsb2dcclxuICBwYXRjaEZpZWxkQ29udHJvbFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxyXG4gICAgICB7XHJcbiAgICAgICAgW2tleV06IHZhbHVlXHJcbiAgICAgIH0sXHJcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgQGxvZ1xyXG4gIGlzRmllbGRWYWxpZChmaWVsZEtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGRLZXldLnZhbGlkO1xyXG4gIH1cclxuXHJcbiAgQGxvZ1xyXG4gIGlzRmllbGRFbmFibGVkKGZpZWxkS2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZEtleV0uZW5hYmxlZDtcclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBnZXRGb3JtR3JvdXBSYXdWYWx1ZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBhc3luYyBoYW5kbGVGaWVsZFR5cGVTZWFyY2hUZXh0KGZpZWxkOiBhbnksIGNoaWxkRmllbGQ6IGFueSkge1xyXG4gICAgaWYgKGhhc0tleShjaGlsZEZpZWxkLCBcImpzb25cIikpIHtcclxuICAgICAgY2hpbGRGaWVsZC5vcHRpb25zID0gZ2V0U2VhcmNoVGV4dE9wdGlvbnNGcm9tRmllbGRDb25maWcoXHJcbiAgICAgICAgZmllbGQsXHJcbiAgICAgICAgY2hpbGRGaWVsZCxcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKGhhc0tleShjaGlsZEZpZWxkLCBcImZldGNoSnNvbkZyb21SZW1vdGVcIikpIHtcclxuICAgICAgY2hpbGRGaWVsZC5vcHRpb25zID0gYXdhaXQgZ2V0U2VhcmNoVGV4dE9wdGlvbnNGcm9tUmVtb3RlRmlsZShcclxuICAgICAgICBmaWVsZCxcclxuICAgICAgICBjaGlsZEZpZWxkLFxyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNoaWxkRmllbGQ7XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgYXN5bmMgdGFrZUFjdGlvbk9uRmllbGRHcm91cChcclxuICAgIGFjdGlvbjogVEFjdGlvbixcclxuICAgIGZpZWxkOiBURmllbGQsXHJcbiAgICBhbGxGb3Jtc0RhdGE6IGFueSxcclxuICAgIGZvcm1EYXRhOiBhbnksXHJcbiAgICBwcmV2aW91c0Zvcm1EYXRhOiBhbnlcclxuICApIHtcclxuICAgIHN3aXRjaCAoYWN0aW9uLmtleSkge1xyXG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfSElERTpcclxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBIaWRlKGFjdGlvbi5wcm9wcy5ncm91cEtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9HUk9VUF9TSE9XOlxyXG4gICAgICAgIHRoaXMuZmllbGRHcm91cFNob3coYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX0VOQUJMRTpcclxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBFbmFibGUoYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX0RJU0FCTEU6XHJcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwRGlzYWJsZShhY3Rpb24ucHJvcHMuZ3JvdXBLZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGxvZ1xyXG4gIGFzeW5jIHRha2VBY3Rpb24oXHJcbiAgICBhY3Rpb246IFRBY3Rpb24sXHJcbiAgICBmaWVsZDogVEZpZWxkLFxyXG4gICAgYWxsRm9ybXNEYXRhOiBhbnksXHJcbiAgICBmb3JtRGF0YTogYW55LFxyXG4gICAgcHJldmlvdXNGb3JtRGF0YTogYW55XHJcbiAgKSB7XHJcbiAgICBzd2l0Y2ggKGFjdGlvbi5rZXkpIHtcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0hJREU6XHJcbiAgICAgICAgdGhpcy5maWVsZEhpZGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX1NIT1c6XHJcbiAgICAgICAgdGhpcy5maWVsZFNob3coYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0RJU0FCTEU6XHJcbiAgICAgICAgdGhpcy5maWVsZERpc2FibGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0VOQUJMRTpcclxuICAgICAgICB0aGlzLmZpZWxkRW5hYmxlKGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9SRVNFVDpcclxuICAgICAgICB0aGlzLmZpZWxkUmVzZXQoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0VSUk9SX1NIT1c6XHJcbiAgICAgICAgdGhpcy5maWVsZEVycm9yU2hvdyhhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0VSUk9SX0hJREU6XHJcbiAgICAgICAgdGhpcy5maWVsZEVycm9ySGlkZShhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX01FU1NBR0VfU0hPVzpcclxuICAgICAgICB0aGlzLmZpZWxkTWVzc2FnZVNob3coYWN0aW9uLnByb3BzLmZpZWxkS2V5LCBhY3Rpb24ucHJvcHMubWVzc2FnZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9NRVNTQUdFU19ISURFOlxyXG4gICAgICAgIHRoaXMuZmllbGRNZXNzYWdlSGlkZShhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9WQUxVRTpcclxuICAgICAgICBjb25zdCBzb3VyY2VzID0gbmV3IFNvdXJjZXMoXHJcbiAgICAgICAgICBmaWVsZCxcclxuICAgICAgICAgIHRoaXMuZm9ybURhdGEsXHJcbiAgICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlcy5nZXRWYWx1ZUZyb21Tb3VyY2UoXHJcbiAgICAgICAgICBhY3Rpb24ucHJvcHMudmFsdWUuc291cmNlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBzb3VyY2VzLnNldFZhbHVlVG9Tb3VyY2UoYWN0aW9uLnByb3BzLnZhbHVlLmRlc3RpbmF0aW9uLCBzb3VyY2VWYWx1ZSk7XHJcblxyXG4gICAgICAgIGZpZWxkID0gc291cmNlcy5maWVsZDtcclxuICAgICAgICB0aGlzLmZvcm1EYXRhID0gc291cmNlcy5mb3JtRGF0YTtcclxuICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YSA9IHNvdXJjZXMuYWxsRm9ybXNEYXRhO1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSA9IHNvdXJjZXMucHJldmlvdXNGb3JtRGF0YTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5IQU5ETEVfQ09OTkVDVEVEX0VMRU1FTlRTOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoeyBrZXk6IGZpZWxkLmtleSB9LCBcIkFDVElPTlwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkNVU1RPTTpcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gIGNsYXNzPVwia3dpa2lkLWZvcm0tY29udGFpbmVyXCJcclxuICAqbmdJZj1cIiF0aGlzLmxvYWRpbmdcIlxyXG4+XHJcbiAgPGRpdiBpZD1cInVmLWZvcm0tZmllbGRzLWhlYWRlci1jb250YWluZXJcIj5cclxuICAgIDxkaXYgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy10aXRsZVwiPlxyXG4gICAgICB7eyB0aGlzLmZvcm1Db25maWcudGl0bGUgfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBpZD1cInVmLWZvcm0tZmllbGRzLXN0ZXBzXCI+XHJcbiAgICAgIFN0ZXAge3sgdGhpcy5mb3JtQ29uZmlnLnNlcXVlbmNlTm8gfX0gb2Yge3sgdGhpcy5mb3Jtc0xpc3QubGVuZ3RoIH19XHJcbiAgICA8L2Rpdj5cclxuICAgIDxociAvPlxyXG4gIDwvZGl2PlxyXG4gIDxmb3JtXHJcbiAgICBjbGFzcz1cImt3aWtpZC1mb3JtIHNob3dcIlxyXG4gICAgW2Zvcm1Hcm91cF09XCJ0aGlzLmZvcm1Hcm91cFwiXHJcbiAgPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgdGhpcy5mb3JtRmllbGRzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImZpZWxkLnR5cGVcIj5cclxuICAgICAgICA8IS0tIEZvcm0gVGl0bGUgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RpdGxlJ1wiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cInRpdGxlXCJcclxuICAgICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcclxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIHt7IGZpZWxkLmxhYmVsIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8a3dpa3VpLWJ1dHRvblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZmllbGQ/LnJlc2V0XCJcclxuICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwid2hpdGVibG9ja1wiXHJcbiAgICAgICAgICAgICAgc2l6ZT1cInNcIlxyXG4gICAgICAgICAgICAgIGxhYmVsPVwiUmVzZXRcIlxyXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cInRoaXMuaGFuZGxlT25DbGlja1Jlc2V0Rm9ybUZpZWxkcygkZXZlbnQsIGZpZWxkKVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tIElucHV0IFRleHQgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXHJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dFxyXG4gICAgICAgICAgICAgIFtjYXNlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jYXNlXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkLmxhYmVsXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxyXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcclxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dD5cclxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xyXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS0gQ2hlY2tib3ggLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxyXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxrd2lrdWktY2hlY2tib3gtYmxvY2tcclxuICAgICAgICAgICAgICBbY29udGVudEFsaWduXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250ZW50QWxpZ24gPz8gJ2xlZnQnXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgIFtzaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaXplID8/ICdsJ1wiXHJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxyXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLWNoZWNrYm94LWJsb2NrXHJcbiAgICAgICAgICAgID48a3dpa3VpLW1lc3NhZ2VzXHJcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPCEtLSBJbnB1dCBOdW1iZXIgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcclxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LW51bWJlclxyXG4gICAgICAgICAgICAgIFtkZWNpbWFsXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5kZWNpbWFsXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgW21heF09XCJmaWVsZD8ucHJvcGVydGllcz8ubWF4XCJcclxuICAgICAgICAgICAgICBbbWluXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5taW5cIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4ID8/ICcnXCJcclxuICAgICAgICAgICAgICBbcHJlY2lzaW9uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVjaXNpb25cIlxyXG4gICAgICAgICAgICAgIFtwcmVmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnByZWZpeCA/PyAnJ1wiXHJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcclxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1udW1iZXJcclxuICAgICAgICAgICAgPjxrd2lrdWktbWVzc2FnZXNcclxuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tIElucHV0IERhdGUgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXHJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1kYXRlXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZC5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgW21heF09XCJmaWVsZD8ucHJvcGVydGllcz8ubWF4XCJcclxuICAgICAgICAgICAgICBbbWluXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5taW5cIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcclxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXHJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtZGF0ZT5cclxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xyXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS0gSW5wdXQgUGhvbmUgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3Bob25lJ1wiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxyXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtcGhvbmVcclxuICAgICAgICAgICAgICBbY291bnRyeUNvZGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvdW50cnlDb2RlXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgW3Bob25lTWFza0FmdGVyQ291bnRyeUNvZGVdPVwiXHJcbiAgICAgICAgICAgICAgICBmaWVsZD8ucHJvcGVydGllcz8ucGhvbmVNYXNrQWZ0ZXJDb3VudHJ5Q29kZVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxyXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LXBob25lPlxyXG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXHJcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPCEtLSBJbnB1dCBSYWRpbyAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncmFkaW8nXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXHJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgW3R1aUxhYmVsXT1cImxhYmVsVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogYXV0b1wiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8a3dpa3VpLXJhZGlvLWxpc3RcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXHJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwiZmllbGQ/Lm9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICBbb3JpZW50YXRpb25dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm9yaWVudGF0aW9uXCJcclxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxyXG4gICAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxyXG4gICAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgID48L2t3aWt1aS1yYWRpby1saXN0PlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xhYmVsVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPHBcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidHVpLXNwYWNlX2JvdHRvbS0yXCJcclxuICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXHJcbiAgICAgICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGZpZWxkLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycz8ucmVxdWlyZWRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2I+XHJcbiAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXHJcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPCEtLSBEcm9wZG93biAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZHJvcGRvd24td2l0aC1zZWFyY2gnXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXHJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGt3aWt1aS1zZWxlY3QtY29tYm9ib3hcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkLmxhYmVsXCJcclxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJmaWVsZC5vcHRpb25zXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxyXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLXNlbGVjdC1jb21ib2JveD5cclxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xyXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS0gQVBJIENhbGwgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FwaS1jYWxsJ1wiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxyXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uLWFwaS1jYWxsXHJcbiAgICAgICAgICAgICAgW2FwaVN0YXR1c109XCJmaWVsZD8uYXBpPy5zdGF0dXM/LnZhbHVlXCJcclxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZmllbGQ/LmNsYXNzXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmFwaT8uc3RhdHVzPy5sYWJlbHNbZmllbGQ/LmFwaT8uc3RhdHVzPy52YWx1ZV1cIlxyXG4gICAgICAgICAgICAgIFtzaG93TG9hZGVyXT1cImZpZWxkPy5kaXNhYmxlZCA9PT0gJ2xvYWRpbmcnXCJcclxuICAgICAgICAgICAgICBzaGFwZT1cIm51bGxcIlxyXG4gICAgICAgICAgICAgIHNpemU9XCJtXCJcclxuICAgICAgICAgICAgICBzdHlsZXM9XCJ3aWR0aDogZml0LWNvbnRlbnRcIlxyXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cInRoaXMuaGFuZGxlT25DbGlja0FwaUNhbGwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24tYXBpLWNhbGw+XHJcbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcclxuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tIE1vYmlsZSBPVFAgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ290cCdcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcclxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LW90cFxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcclxuICAgICAgICAgICAgICBbbWFza109XCJmaWVsZD8ucHJvcGVydGllcz8ubWFza1wiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcclxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1vdHA+XHJcbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcclxuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tIEFhZGhhYXIgTnVtYmVyIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhYWRoYWFyLW51bWJlcidcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcclxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LWFhZGhhYXJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcclxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1hYWRoYWFyPlxyXG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXHJcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9mb3JtPlxyXG4gIDxkaXYgY2xhc3M9XCJrd2lraWQtZm9ybS1idXR0b25zXCI+XHJcbiAgICA8a3dpa3VpLWJ1dHRvblxyXG4gICAgICAqbmdJZj1cInRoaXMuaXNNb2JpbGVWaWV3XCJcclxuICAgICAgW2Rpc2FibGVkXT1cInZpZXdGb3Jtc0J1dHRvbi5kaXNhYmxlZFwiXHJcbiAgICAgIGlkPVwiXCJcclxuICAgICAgbGFiZWw9XCJWaWV3IEZvcm1zXCJcclxuICAgICAgW3Nob3dMb2FkZXJdPVwidmlld0Zvcm1zQnV0dG9uLnNob3dMb2FkZXJcIlxyXG4gICAgICBzdHlsZXM9XCJcIlxyXG4gICAgICBjbGFzcz1cIlwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcclxuICAgICAgaWNvbj1cIlwiXHJcbiAgICAgIGljb25SaWdodD1cIlwiXHJcbiAgICAgIHNoYXBlPVwibnVsbFwiXHJcbiAgICAgIHNpemU9XCJtXCJcclxuICAgICAgc3R5bGVzPVwid2lkdGg6IDEwMCVcIlxyXG4gICAgICAob25DbGljayk9XCJ0aGlzLmhhbmRsZU9uQ2xpY2tWaWV3Rm9ybXMoJGV2ZW50KVwiXHJcbiAgICA+PC9rd2lrdWktYnV0dG9uPlxyXG4gICAgPGt3aWt1aS1idXR0b25cclxuICAgICAgW2Rpc2FibGVkXT1cInNhdmVGb3JtQnV0dG9uLmRpc2FibGVkXCJcclxuICAgICAgaWQ9XCJcIlxyXG4gICAgICBsYWJlbD1cIlNhdmVcIlxyXG4gICAgICBbc2hvd0xvYWRlcl09XCJzYXZlRm9ybUJ1dHRvbi5zaG93TG9hZGVyXCJcclxuICAgICAgc3R5bGVzPVwiXCJcclxuICAgICAgY2xhc3M9XCJcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgYXBwZWFyYW5jZT1cInByaW1hcnlcIlxyXG4gICAgICBpY29uPVwiXCJcclxuICAgICAgaWNvblJpZ2h0PVwiXCJcclxuICAgICAgc2hhcGU9XCJudWxsXCJcclxuICAgICAgc2l6ZT1cIm1cIlxyXG4gICAgICBzdHlsZXM9XCJ3aWR0aDogMTAwJVwiXHJcbiAgICAgIChvbkNsaWNrKT1cInRoaXMuaGFuZGxlT25DbGlja1NhdmVGb3JtKCRldmVudClcIlxyXG4gICAgPjwva3dpa3VpLWJ1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXZcclxuICBjbGFzcz1cImt3aWtpZC1mb3JtLWNvbnRhaW5lci1sb2FkaW5nXCJcclxuICAqbmdJZj1cInRoaXMubG9hZGluZ1wiXHJcbj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImxhcmdlLXdyYXBwZXJcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl09XCJ0aGlzLmxvYWRpbmdcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl9yb3VuZGVkXT1cInRoaXMubG9hZGluZ1wiXHJcbiAgPjwvZGl2PlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwibGFyZ2Utd3JhcHBlclwiXHJcbiAgICBbY2xhc3MudHVpLXNrZWxldG9uXT1cInRoaXMubG9hZGluZ1wiXHJcbiAgICBbY2xhc3MudHVpLXNrZWxldG9uX3JvdW5kZWRdPVwidGhpcy5sb2FkaW5nXCJcclxuICA+PC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJsYXJnZS13cmFwcGVyXCJcclxuICAgIFtjbGFzcy50dWktc2tlbGV0b25dPVwidGhpcy5sb2FkaW5nXCJcclxuICAgIFtjbGFzcy50dWktc2tlbGV0b25fcm91bmRlZF09XCJ0aGlzLmxvYWRpbmdcIlxyXG4gID48L2Rpdj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImxhcmdlLXdyYXBwZXJcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl09XCJ0aGlzLmxvYWRpbmdcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl9yb3VuZGVkXT1cInRoaXMubG9hZGluZ1wiXHJcbiAgPjwvZGl2PlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwibGFyZ2Utd3JhcHBlclwiXHJcbiAgICBbY2xhc3MudHVpLXNrZWxldG9uXT1cInRoaXMubG9hZGluZ1wiXHJcbiAgICBbY2xhc3MudHVpLXNrZWxldG9uX3JvdW5kZWRdPVwidGhpcy5sb2FkaW5nXCJcclxuICA+PC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJsYXJnZS13cmFwcGVyXCJcclxuICAgIFtjbGFzcy50dWktc2tlbGV0b25dPVwidGhpcy5sb2FkaW5nXCJcclxuICAgIFtjbGFzcy50dWktc2tlbGV0b25fcm91bmRlZF09XCJ0aGlzLmxvYWRpbmdcIlxyXG4gID48L2Rpdj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImxhcmdlLXdyYXBwZXJcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl09XCJ0aGlzLmxvYWRpbmdcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl9yb3VuZGVkXT1cInRoaXMubG9hZGluZ1wiXHJcbiAgPjwvZGl2PlxyXG48L2Rpdj5cclxuPHR1aS1wdXNoXHJcbiAgaWQ9XCJmaWVsZC1lcnJvci1ub3RpZmljYXRpb25cIlxyXG4gICp0dWlQdXNoPVwic2hvd0Vycm9yTm90aWZpY2F0aW9uXCJcclxuICBoZWFkaW5nPVwiTWlzc2luZy9JbmNvcnJlY3QgRmllbGRzIVwiXHJcbiAgdHlwZT1cIkVycm9yXCJcclxuICAoY2xvc2UpPVwidG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpXCJcclxuPlxyXG4gIDx0dWktc3ZnXHJcbiAgICBzcmM9XCJ0dWlJY29uQ2FuY2VsXCJcclxuICAgIHN0eWxlPVwiY29sb3I6ICNmZmYgIWltcG9ydGFudFwiXHJcbiAgPlxyXG4gIDwvdHVpLXN2Zz5cclxuPC90dWktcHVzaD5cclxuIl19
788
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL3JlbmRlcmVyL2Zvcm0tdmlldy9mb3JtLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWZvcm1zL3NyYy9saWIvcmVuZGVyZXIvZm9ybS12aWV3L2Zvcm0tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMERBQTBELENBQUM7QUFFdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUV0RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFNcEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkQsT0FBTyxFQUNMLE1BQU0s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O3NCQURYLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLGdCQUFnQjtzQkFEZixNQUFNO2dCQUlQLGVBQWU7c0JBRGQsTUFBTTtnQkFJUCxjQUFjO3NCQURiLE1BQU07Z0JBSVAsaUJBQWlCO3NCQURoQixNQUFNO2dCQTBCUCxRQUFRLE1BU1IsZUFBZSxNQUdmLFdBQVcsTUE2REwsY0FBYyxNQXFEcEIsMkJBQTJCLE1BWTNCLGdDQUFnQyxNQUtoQywyQkFBMkIsTUFTckIsdUNBQXVDLE1BcUN2QyxnQ0FBZ0MsTUFrRGhDLGtDQUFrQyxNQXVDbEMsNEJBQTRCLE1BOEY1Qix1QkFBdUIsTUE4QjdCLGlCQUFpQixNQXNDWCw0QkFBNEIsTUFtQjVCLG9CQUFvQixNQXFEMUIsc0JBQXNCLE1BT3RCLHFCQUFxQixNQTZFckIsdUJBQXVCLE1BTXZCLFNBQVMsTUFXVCxjQUFjLE1BT2QsU0FBUyxNQVdULGNBQWMsTUFPZCxZQUFZLE1BbUJaLGlCQUFpQixNQU9qQixXQUFXLE1BbUJYLGdCQUFnQixNQU9oQixVQUFVLE1BMkNWLGNBQWMsTUFhZCxjQUFjLE1BYWQsZ0JBQWdCLE1BWWhCLGdCQUFnQixNQVloQixjQUFjLE1BR2Qsc0JBQXNCLE1BVXRCLFlBQVksTUFLWixjQUFjLE1BS2QscUJBQXFCLE1BS2YseUJBQXlCLE1Bb0J6QixzQkFBc0IsTUEwQnRCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IFR1aUFsZXJ0U2VydmljZSB9IGZyb20gXCJAdGFpZ2EtdWkvY29yZVwiO1xyXG5pbXBvcnQgeyBUdWlQdXNoU2VydmljZSB9IGZyb20gXCJAdGFpZ2EtdWkva2l0XCI7XHJcbmltcG9ydCB7IHBhaXJ3aXNlIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IEVBY3Rpb25LZXkgfSBmcm9tIFwiLi9kZWZpbml0aW9ucy9hY3Rpb25zL2Zvcm0tdmlldy5hY3Rpb25zLmVudW0uZGVmaW5pdGlvbnNcIjtcclxuaW1wb3J0IHsgVEFjdGlvbiB9IGZyb20gXCIuL2RlZmluaXRpb25zL2FjdGlvbnMvZm9ybS12aWV3LmFjdGlvbnMudHlwZS5kZWZpbml0aW9uc1wiO1xyXG5pbXBvcnQgeyBFQXBpU3RhdHVzVHlwZSB9IGZyb20gXCIuL2RlZmluaXRpb25zL2FwaXMvZm9ybS12aWV3LmFwaXMuZW51bS5kZWZpbml0aW9uc1wiO1xyXG5pbXBvcnQgeyBFTWVzc2FnZVR5cGUgfSBmcm9tIFwiLi9kZWZpbml0aW9ucy9jb21tb24vZm9ybS12aWV3LmNvbW1vbi5lbnVtLmRlZmluaXRpb25zXCI7XHJcbmltcG9ydCB7IFRNZXNzYWdlIH0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvY29tbW9uL2Zvcm0tdmlldy5jb21tb24udHlwZS5kZWZpbml0aW9uc1wiO1xyXG5pbXBvcnQgeyBFRmllbGRUeXBlIH0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZmllbGRzL2Zvcm0tdmlldy5maWVsZHMuZW51bS5kZWZpbml0aW9uc1wiO1xyXG5pbXBvcnQge1xyXG4gIFRGaWVsZCxcclxuICBURmllbGRBcGlDYWxsLFxyXG4gIFRGaWVsZFRpdGxlXHJcbn0gZnJvbSBcIi4vZGVmaW5pdGlvbnMvZmllbGRzL2Zvcm0tdmlldy5maWVsZHMudHlwZS5kZWZpbml0aW9uc1wiO1xyXG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiLi9mb3JtLXZpZXcuZGVjb3JhdG9yc1wiO1xyXG5pbXBvcnQgeyBLd2lrSURGb3JtVmlld1NlcnZpY2UgfSBmcm9tIFwiLi9mb3JtLXZpZXcuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBBY3Rpb25zIH0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcuYWN0aW9ucy5oZWxwZXJcIjtcclxuaW1wb3J0IHsgQXBpcyB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LmFwaXMuaGVscGVyXCI7XHJcbmltcG9ydCB7XHJcbiAgaGFzS2V5LFxyXG4gIGlzRW1wdHksXHJcbiAgaXNOb3RFbXB0eSxcclxuICBzZXRFbXB0eVZhbHVlXHJcbn0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcuY29tbW9uLmhlbHBlclwiO1xyXG5pbXBvcnQgeyBDb25kaXRpb24gfSBmcm9tIFwiLi9oZWxwZXJzL2Zvcm0tdmlldy5jb25kaXRpb24uaGVscGVyXCI7XHJcbmltcG9ydCB7XHJcbiAgYWRkTWVzc2FnZSxcclxuICBjb252ZXJ0VmFsdWVGcm9tS3dpa1VJRm9ybWF0VG9CYXNpY0Zvcm1hdCxcclxuICBmaW5kRmllbGRGcm9tS2V5LFxyXG4gIGZpbmRGaWVsZEluZGV4RnJvbUtleSxcclxuICBnZXRTZWFyY2hUZXh0T3B0aW9uc0Zyb21GaWVsZENvbmZpZyxcclxuICBnZXRTZWFyY2hUZXh0T3B0aW9uc0Zyb21SZW1vdGVGaWxlLFxyXG4gIGhpZ2hsaWdodEZpZWxkRXJyb3IsXHJcbiAgcmVtb3ZlTWVzc2FnZSxcclxuICBzZXRGaWVsZEVycm9yXHJcbn0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcuZmllbGRzLmhlbHBlclwiO1xyXG5pbXBvcnQgeyBSdWxlcyB9IGZyb20gXCIuL2hlbHBlcnMvZm9ybS12aWV3LnJ1bGVzLmhlbHBlclwiO1xyXG5pbXBvcnQgeyBTb3VyY2VzIH0gZnJvbSBcIi4vaGVscGVycy9mb3JtLXZpZXcuc291cmNlcy5oZWxwZXJcIjtcclxuaW1wb3J0IHsgVmFsaWRhdGlvbnMgfSBmcm9tIFwiLi9oZWxwZXJzL2Zvcm0tdmlldy52YWxpZGF0aW9ucy5oZWxwZXJcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImt3aWtpZC1mb3JtLXZpZXdcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2Zvcm0tdmlldy5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9mb3JtLXZpZXcuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgcHJvdmlkZXJzOiBbS3dpa0lERm9ybVZpZXdTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgS3dpa0lERm9ybVZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpXHJcbiAgZm9ybUNvbmZpZzogYW55O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGZvcm1EYXRhOiBhbnk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgYXBpQ2FsbFJlc3BvbnNlOiBhbnkgPSB7fTtcclxuXHJcbiAgQElucHV0KClcclxuICBpc01vYmlsZVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBhbGxGb3Jtc0RhdGE6IGFueTtcclxuXHJcbiAgQElucHV0KClcclxuICBmb3Jtc0xpc3Q6IGFueVtdO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBvbkNsaWNrVmlld0Zvcm1zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBvbkNsaWNrU2F2ZUZvcm06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIG9uQ2xpY2tBcGlDYWxsOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBnZXRBY3RpdmVGb3JtRGF0YTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgZmllbGRHcm91cHM6IGFueSA9IHt9O1xyXG4gIGZvcm1GaWVsZHM6IGFueVtdID0gW107XHJcbiAgcHJldmlvdXNGb3JtRGF0YTogYW55ID0ge307XHJcblxyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHZpZXdGb3Jtc0J1dHRvbiA9IHtcclxuICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgIHNob3dMb2FkZXI6IGZhbHNlXHJcbiAgfTtcclxuICBzYXZlRm9ybUJ1dHRvbiA9IHtcclxuICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgIHNob3dMb2FkZXI6IGZhbHNlXHJcbiAgfTtcclxuXHJcbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KFR1aVB1c2hTZXJ2aWNlKSBwcm90ZWN0ZWQgcmVhZG9ubHkgcHVzaDogVHVpUHVzaFNlcnZpY2UsXHJcbiAgICBASW5qZWN0KFR1aUFsZXJ0U2VydmljZSkgcHJvdGVjdGVkIHJlYWRvbmx5IGFsZXJ0OiBUdWlBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZvcm1WaWV3U2VydmljZTogS3dpa0lERm9ybVZpZXdTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBAbG9nXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICBhd2FpdCB0aGlzLmluaXRGb3JtQ29uZmlnKHRoaXMuZm9ybUNvbmZpZyk7XHJcblxyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0pKCk7XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge31cclxuXHJcbiAgQGxvZ1xyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGNvbnN0IHZlcmlmeUNoYW5nZSA9IChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICByZXR1cm4gaGFzS2V5KGNoYW5nZXMsIGtleSkgJiYgIWNoYW5nZXNba2V5XS5maXJzdENoYW5nZTtcclxuICAgIH07XHJcbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiZm9ybURhdGFcIikpIHtcclxuICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcclxuICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxyXG4gICAgICAgIC4uLmNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiYXBpQ2FsbFJlc3BvbnNlXCIpKSB7XHJcbiAgICAgIHRoaXMuYXBpQ2FsbFJlc3BvbnNlID0gY2hhbmdlcy5hcGlDYWxsUmVzcG9uc2UuY3VycmVudFZhbHVlO1xyXG5cclxuICAgICAgdGhpcy5mb3JtRGF0YSA9IHtcclxuICAgICAgICAuLi50aGlzLmZvcm1EYXRhLFxyXG4gICAgICAgIFt0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXldOiB0aGlzLmFwaUNhbGxSZXNwb25zZS5yZXNwb25zZVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBbdGhpcy5hcGlDYWxsUmVzcG9uc2Uua2V5XTogdGhpcy5hcGlDYWxsUmVzcG9uc2UucmVzcG9uc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICBsZXQgZmllbGQ6IFRGaWVsZEFwaUNhbGwgPSBmaW5kRmllbGRGcm9tS2V5KFxyXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcclxuICAgICAgICB0aGlzLmFwaUNhbGxSZXNwb25zZS5rZXlcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGFwaXMgPSBuZXcgQXBpcyhcclxuICAgICAgICBmaWVsZCxcclxuICAgICAgICB0aGlzLmZvcm1EYXRhLFxyXG4gICAgICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSxcclxuICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YSxcclxuICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICBmaWVsZCA9IGF3YWl0IGFwaXMudmFsaWRhdGVBcGlDYWxsUmVzcG9uc2UoKTtcclxuICAgICAgfSkoKTtcclxuICAgIH1cclxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJpc01vYmlsZVZpZXdcIikpIHtcclxuICAgICAgdGhpcy5pc01vYmlsZVZpZXcgPSBjaGFuZ2VzLmlzTW9iaWxlVmlldy5jdXJyZW50VmFsdWU7XHJcbiAgICB9XHJcbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwiYWxsRm9ybXNEYXRhXCIpKSB7XHJcbiAgICAgIHRoaXMuYWxsRm9ybXNEYXRhID0gY2hhbmdlcy5hbGxGb3Jtc0RhdGEuY3VycmVudFZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImZvcm1zTGlzdFwiKSkge1xyXG4gICAgICB0aGlzLmZvcm1zTGlzdCA9IGNoYW5nZXMuZm9ybXNMaXN0LmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuICAgIGlmICh2ZXJpZnlDaGFuZ2UoXCJmb3JtQ29uZmlnXCIpKSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbmZpZyA9IGNoYW5nZXMuZm9ybUNvbmZpZy5jdXJyZW50VmFsdWU7XHJcblxyXG4gICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdEZvcm1Db25maWcodGhpcy5mb3JtQ29uZmlnKTtcclxuICAgICAgfSkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBhc3luYyBpbml0Rm9ybUNvbmZpZyhmb3JtQ29uZmlnOiBhbnkpIHtcclxuICAgIHRoaXMuc2V0Rm9ybUZpZWxkc0Zyb21Gb3JtQ29uZmlnKGZvcm1Db25maWcpO1xyXG5cclxuICAgIHRoaXMuc2V0Rm9ybUZpZWxkR3JvdXBzRnJvbUZvcm1Db25maWcoZm9ybUNvbmZpZyk7XHJcblxyXG4gICAgdGhpcy5zZXRGb3JtRGF0YUZyb21BbGxGb3Jtc0RhdGEoKTtcclxuXHJcbiAgICB0aGlzLmZvcm1Hcm91cCA9IGF3YWl0IHRoaXMuZm9ybVZpZXdTZXJ2aWNlLmNyZWF0ZUZvcm1Hcm91cChcclxuICAgICAgdGhpcy5mb3JtRmllbGRzLFxyXG4gICAgICB0aGlzLmZvcm1EYXRhLFxyXG4gICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgIHRoaXMuYWxsRm9ybXNEYXRhLFxyXG4gICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxyXG4gICAgKTtcclxuXHJcbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZvcm1GaWVsZHMpIHtcclxuICAgICAgaWYgKGZpZWxkLnR5cGUgIT09IFwidGl0bGVcIikge1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSA9IHtcclxuICAgICAgICAgIC4uLnRoaXMucHJldmlvdXNGb3JtRGF0YSxcclxuICAgICAgICAgIFtmaWVsZC5rZXldOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS52YWx1ZUNoYW5nZXNcclxuICAgICAgICAgIC5waXBlKHBhaXJ3aXNlKCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChbcHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEgPSB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICAgICAgICAgIFtmaWVsZC5rZXldOiBwcmV2aW91c1ZhbHVlXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZvcm1EYXRhID0ge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMuZm9ybURhdGEsXHJcbiAgICAgICAgICAgICAgW2ZpZWxkLmtleV06IGN1cnJlbnRWYWx1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xyXG4gICAgICBpZiAoZmllbGQudHlwZSAhPT0gXCJ0aXRsZVwiKSB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIGZpZWxkID0gYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGtleTogZmllbGQua2V5LFxyXG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiT05fSU5JVFwiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBzZXRGb3JtRmllbGRzRnJvbUZvcm1Db25maWcoZm9ybUNvbmZpZzogYW55KSB7XHJcbiAgICBpZiAoaGFzS2V5KGZvcm1Db25maWcsIFwiZmllbGRzXCIpKSB7XHJcbiAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IGZvcm1Db25maWcuZmllbGRzO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgaGFzS2V5KGZvcm1Db25maWcsIFwibXVsdGlGb3JtXCIpICYmXHJcbiAgICAgIGhhc0tleShmb3JtQ29uZmlnLm11bHRpRm9ybSwgXCJmaWVsZHNcIilcclxuICAgICkge1xyXG4gICAgICB0aGlzLmZvcm1GaWVsZHMgPSBmb3JtQ29uZmlnLm11bHRpRm9ybS5maWVsZHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgc2V0Rm9ybUZpZWxkR3JvdXBzRnJvbUZvcm1Db25maWcoZm9ybUNvbmZpZzogYW55KSB7XHJcbiAgICB0aGlzLmZpZWxkR3JvdXBzID0gZm9ybUNvbmZpZy5maWVsZEdyb3VwcztcclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBzZXRGb3JtRGF0YUZyb21BbGxGb3Jtc0RhdGEoKSB7XHJcbiAgICBpZiAoaGFzS2V5KHRoaXMuYWxsRm9ybXNEYXRhLCB0aGlzLmZvcm1Db25maWcua2V5KSkge1xyXG4gICAgICB0aGlzLmZvcm1EYXRhID0gdGhpcy5hbGxGb3Jtc0RhdGFbdGhpcy5mb3JtQ29uZmlnLmtleV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1EYXRhID0ge307XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXBBY3Rpb25zKFxyXG4gICAgY2hpbGRGaWVsZEdyb3VwQ29uZmlnOiBhbnksXHJcbiAgICBwYXJlbnRGaWVsZDogYW55XHJcbiAgKSB7XHJcbiAgICBpZiAoaGFzS2V5KGNoaWxkRmllbGRHcm91cENvbmZpZywgXCJydWxlc1wiKSkge1xyXG4gICAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZXMoXHJcbiAgICAgICAgY2hpbGRGaWVsZEdyb3VwQ29uZmlnLnJ1bGVzLFxyXG4gICAgICAgIHBhcmVudEZpZWxkLFxyXG4gICAgICAgIHRoaXMuZm9ybURhdGEsXHJcbiAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICAgIHRoaXMuYWxsRm9ybXNEYXRhXHJcbiAgICAgICkubWFwcGluZygpO1xyXG5cclxuICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIGNoaWxkRmllbGRHcm91cENvbmZpZy5hY3Rpb25zKSB7XHJcbiAgICAgICAgY29uc3QgY29uZGl0aW9uU3VjY2VzcyA9IG5ldyBDb25kaXRpb24oXHJcbiAgICAgICAgICBhY3Rpb24uY29uZGl0aW9uLFxyXG4gICAgICAgICAgcnVsZXNNYXBwaW5nXHJcbiAgICAgICAgKS5ldmFsdWF0ZSgpO1xyXG5cclxuICAgICAgICBpZiAoY29uZGl0aW9uU3VjY2Vzcykge1xyXG4gICAgICAgICAgY29uc3QgYWN0aW9ucyA9IG5ldyBBY3Rpb25zKFxyXG4gICAgICAgICAgICBhY3Rpb24sXHJcbiAgICAgICAgICAgIHBhcmVudEZpZWxkLFxyXG4gICAgICAgICAgICBydWxlc01hcHBpbmcsXHJcbiAgICAgICAgICAgIHRoaXMuYWxsRm9ybXNEYXRhLFxyXG4gICAgICAgICAgICB0aGlzLmZvcm1EYXRhLFxyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgICAgICAgIHRoaXMudGFrZUFjdGlvbk9uRmllbGRHcm91cC5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGF3YWl0IGFjdGlvbnMuZXhlY3V0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGxvZ1xyXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwKFxyXG4gICAgY3VycmVudEZpZWxkOiBhbnksXHJcbiAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnOiBhbnksXHJcbiAgICBldmVudFR5cGU6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgc3dpdGNoIChldmVudFR5cGUpIHtcclxuICAgICAgY2FzZSBcIklOSVRcIjpcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBoYXNLZXkoY29ubmVjdGVkRmllbGRHcm91cENvbmZpZywgXCJ0cmlnZ2Vyc1wiKSAmJlxyXG4gICAgICAgICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZy50cmlnZ2Vycy5pbmNsdWRlcyhcIklOSVRcIilcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXBBY3Rpb25zKFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLFxyXG4gICAgICAgICAgICBjdXJyZW50RmllbGRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiVkFMVUVfQ0hBTkdFXCI6XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgaGFzS2V5KGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsIFwidHJpZ2dlcnNcIikgJiZcclxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcudHJpZ2dlcnMuaW5jbHVkZXMoXCJWQUxVRV9DSEFOR0VcIilcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXBBY3Rpb25zKFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLFxyXG4gICAgICAgICAgICBjdXJyZW50RmllbGRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiTkVTVEVEX0xJTktcIjpcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBoYXNLZXkoY29ubmVjdGVkRmllbGRHcm91cENvbmZpZywgXCJ0cmlnZ2Vyc1wiKSAmJlxyXG4gICAgICAgICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZy50cmlnZ2Vycy5pbmNsdWRlcyhcIk5FU1RFRF9MSU5LXCIpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwQWN0aW9ucyhcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGRHcm91cENvbmZpZyxcclxuICAgICAgICAgICAgY3VycmVudEZpZWxkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBpZiAoaGFzS2V5KGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsIFwidHJpZ2dlcnNcIikpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkR3JvdXBBY3Rpb25zKFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnLFxyXG4gICAgICAgICAgICBjdXJyZW50RmllbGRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGxvZ1xyXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEFjdGlvbnMoXHJcbiAgICBjb25uZWN0ZWRGaWVsZENvbmZpZzogYW55LFxyXG4gICAgY29ubmVjdGVkRmllbGQ6IGFueVxyXG4gICkge1xyXG4gICAgaWYgKGhhc0tleShjb25uZWN0ZWRGaWVsZENvbmZpZywgXCJydWxlc1wiKSkge1xyXG4gICAgICBjb25zdCBydWxlc01hcHBpbmcgPSBuZXcgUnVsZXMoXHJcbiAgICAgICAgY29ubmVjdGVkRmllbGRDb25maWcucnVsZXMsXHJcbiAgICAgICAgY29ubmVjdGVkRmllbGQsXHJcbiAgICAgICAgdGhpcy5mb3JtRGF0YSxcclxuICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgICAgdGhpcy5hbGxGb3Jtc0RhdGFcclxuICAgICAgKS5tYXBwaW5nKCk7XHJcblxyXG4gICAgICBmb3IgKGxldCBhY3Rpb24gb2YgY29ubmVjdGVkRmllbGRDb25maWcuYWN0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IGNvbmRpdGlvblN1Y2Nlc3MgPSBuZXcgQ29uZGl0aW9uKFxyXG4gICAgICAgICAgYWN0aW9uLmNvbmRpdGlvbixcclxuICAgICAgICAgIHJ1bGVzTWFwcGluZ1xyXG4gICAgICAgICkuZXZhbHVhdGUoKTtcclxuXHJcbiAgICAgICAgaWYgKGNvbmRpdGlvblN1Y2Nlc3MpIHtcclxuICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9ucyhcclxuICAgICAgICAgICAgYWN0aW9uLFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZCxcclxuICAgICAgICAgICAgcnVsZXNNYXBwaW5nLFxyXG4gICAgICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YSxcclxuICAgICAgICAgICAgdGhpcy5mb3JtRGF0YSxcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBhd2FpdCBhY3Rpb25zLmV4ZWN1dGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29ubmVjdGVkRmllbGQ7XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgYXN5bmMgaGFuZGxlQ29ubmVjdGVkRWxlbWVudEZpZWxkcyhcclxuICAgIGN1cnJlbnRGaWVsZDogYW55LFxyXG4gICAgY29ubmVjdGVkRmllbGRDb25maWc6IGFueSxcclxuICAgIGV2ZW50VHlwZTogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICBsZXQgY29ubmVjdGVkRmllbGQgPSBmaW5kRmllbGRGcm9tS2V5KFxyXG4gICAgICB0aGlzLmZvcm1GaWVsZHMsXHJcbiAgICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnW1wia2V5XCJdXHJcbiAgICApO1xyXG5cclxuICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XHJcbiAgICAgIGNhc2UgXCJJTklUXCI6XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgaGFzS2V5KGNvbm5lY3RlZEZpZWxkLCBcInRyaWdnZXJzXCIpICYmXHJcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZC50cmlnZ2Vycy5pbmNsdWRlcyhcIklOSVRcIilcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmICh0aGlzLmlzRmllbGRFbmFibGVkKGNvbm5lY3RlZEZpZWxkLmtleSkpIHtcclxuICAgICAgICAgICAgaWYgKGhhc0tleShjb25uZWN0ZWRGaWVsZENvbmZpZywgXCJjb25uZWN0ZWRQYXJlbnRGaWVsZHNcIikpIHtcclxuICAgICAgICAgICAgICBzd2l0Y2ggKGNvbm5lY3RlZEZpZWxkQ29uZmlnLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJkcm9wZG93bi13aXRoLXNlYXJjaFwiOlxyXG4gICAgICAgICAgICAgICAgICBjb25uZWN0ZWRGaWVsZCA9IGF3YWl0IHRoaXMuaGFuZGxlRmllbGRUeXBlU2VhcmNoVGV4dChcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkRmllbGRcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkID0gYXdhaXQgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRBY3Rpb25zKFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZyxcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiVkFMVUVfQ0hBTkdFXCI6XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgaGFzS2V5KGNvbm5lY3RlZEZpZWxkQ29uZmlnLCBcInRyaWdnZXJzXCIpICYmXHJcbiAgICAgICAgICBjb25uZWN0ZWRGaWVsZENvbmZpZy50cmlnZ2Vycy5pbmNsdWRlcyhcIlZBTFVFX0NIQU5HRVwiKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgc3dpdGNoIChjb25uZWN0ZWRGaWVsZC50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkcm9wZG93bi13aXRoLXNlYXJjaFwiOlxyXG4gICAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkID0gYXdhaXQgdGhpcy5oYW5kbGVGaWVsZFR5cGVTZWFyY2hUZXh0KFxyXG4gICAgICAgICAgICAgICAgY3VycmVudEZpZWxkLFxyXG4gICAgICAgICAgICAgICAgY29ubmVjdGVkRmllbGRcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29ubmVjdGVkRmllbGQgPSBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEFjdGlvbnMoXHJcbiAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnLFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJORVNURURfTElOS1wiOlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGhhc0tleShjb25uZWN0ZWRGaWVsZENvbmZpZywgXCJ0cmlnZ2Vyc1wiKSAmJlxyXG4gICAgICAgICAgY29ubmVjdGVkRmllbGRDb25maWcudHJpZ2dlcnMuaW5jbHVkZXMoXCJORVNURURfTElOS1wiKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29ubmVjdGVkRmllbGQgPSBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEFjdGlvbnMoXHJcbiAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnLFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgaWYgKGhhc0tleShjb25uZWN0ZWRGaWVsZENvbmZpZywgXCJ0cmlnZ2Vyc1wiKSkge1xyXG4gICAgICAgICAgY29ubmVjdGVkRmllbGQgPSBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEFjdGlvbnMoXHJcbiAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkQ29uZmlnLFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhc0tleShjb25uZWN0ZWRGaWVsZCwgXCJjb25uZWN0ZWRFbGVtZW50c1wiKSkge1xyXG4gICAgICBpZiAoaGFzS2V5KGNvbm5lY3RlZEZpZWxkLmNvbm5lY3RlZEVsZW1lbnRzLCBcImNvbm5lY3RlZEZpZWxkc1wiKSkge1xyXG4gICAgICAgIGZvciAoY29uc3QgY29ubmVjdGVkRmllbGRDb25maWcgb2YgY29ubmVjdGVkRmllbGQuY29ubmVjdGVkRWxlbWVudHNcclxuICAgICAgICAgIC5jb25uZWN0ZWRGaWVsZHMpIHtcclxuICAgICAgICAgIGNvbm5lY3RlZEZpZWxkID0gdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50RmllbGRzKFxyXG4gICAgICAgICAgICBjb25uZWN0ZWRGaWVsZCxcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGRDb25maWcsXHJcbiAgICAgICAgICAgIFwiTkVTVEVEX0xJTktcIlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY3VycmVudEZpZWxkO1xyXG4gIH1cclxuXHJcbiAgQGxvZ1xyXG4gIGFzeW5jIGhhbmRsZUNvbm5lY3RlZEVsZW1lbnRzKGU6IGFueSwgZXZlbnRUeXBlOiBzdHJpbmcpIHtcclxuICAgIGxldCBjdXJyZW50RmllbGQgPSBmaW5kRmllbGRGcm9tS2V5KHRoaXMuZm9ybUZpZWxkcywgZS5rZXkpO1xyXG5cclxuICAgIGlmIChoYXNLZXkoY3VycmVudEZpZWxkLCBcImNvbm5lY3RlZEVsZW1lbnRzXCIpKSB7XHJcbiAgICAgIGlmIChoYXNLZXkoY3VycmVudEZpZWxkLmNvbm5lY3RlZEVsZW1lbnRzLCBcImNvbm5lY3RlZEZpZWxkR3JvdXBzXCIpKSB7XHJcbiAgICAgICAgbGV0IGNvbm5lY3RlZEZpZWxkR3JvdXBzID1cclxuICAgICAgICAgIGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cy5jb25uZWN0ZWRGaWVsZEdyb3VwcztcclxuICAgICAgICBmb3IgKGxldCBjb25uZWN0ZWRGaWVsZEdyb3VwQ29uZmlnIG9mIGNvbm5lY3RlZEZpZWxkR3JvdXBzKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZEdyb3VwKFxyXG4gICAgICAgICAgICBjdXJyZW50RmllbGQsXHJcbiAgICAgICAgICAgIGNvbm5lY3RlZEZpZWxkR3JvdXBDb25maWcsXHJcbiAgICAgICAgICAgIGV2ZW50VHlwZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGhhc0tleShjdXJyZW50RmllbGQuY29ubmVjdGVkRWxlbWVudHMsIFwiY29ubmVjdGVkRmllbGRzXCIpKSB7XHJcbiAgICAgICAgbGV0IGNvbm5lY3RlZEZpZWxkcyA9IGN1cnJlbnRGaWVsZC5jb25uZWN0ZWRFbGVtZW50cy5jb25uZWN0ZWRGaWVsZHM7XHJcbiAgICAgICAgZm9yIChsZXQgY29ubmVjdGVkRmllbGRDb25maWcgb2YgY29ubmVjdGVkRmllbGRzKSB7XHJcbiAgICAgICAgICBjdXJyZW50RmllbGQgPSBhd2FpdCB0aGlzLmhhbmRsZUNvbm5lY3RlZEVsZW1lbnRGaWVsZHMoXHJcbiAgICAgICAgICAgIGN1cnJlbnRGaWVsZCxcclxuICAgICAgICAgICAgY29ubmVjdGVkRmllbGRDb25maWcsXHJcbiAgICAgICAgICAgIGV2ZW50VHlwZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIERPTSBFdmVudCBIYW5kbGVyc1xyXG4gIEBsb2dcclxuICBoYW5kbGVHZXRLZXlWYWx1ZShlOiBhbnkpIHtcclxuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUoXHJcbiAgICAgIHtcclxuICAgICAgICBbZS5rZXldOiBlLnZhbHVlXHJcbiAgICAgIH0sXHJcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XHJcbiAgICApO1xyXG5cclxuICAgIC8vIEN1cnJlbnRseSBzZXQgb25seSBmb3IgZHJvcGRvd24td2l0aC1zZWFyY2ggY29ubmVjdGVkIGZpZWxkc1xyXG4gICAgbGV0IGZpZWxkID0gZmluZEZpZWxkRnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGUua2V5KTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGZpZWxkLnR5cGUgIT09IFwidGl0bGVcIiAmJlxyXG4gICAgICBmaWVsZC52YWxpZGF0aW9uLnRyaWdnZXJzLmluY2x1ZGVzKFwiT05fQ0hBTkdFXCIpXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSBuZXcgVmFsaWRhdGlvbnMoXHJcbiAgICAgICAgZmllbGQsXHJcbiAgICAgICAgdGhpcy5mb3JtRGF0YSxcclxuICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgICAgdGhpcy5hbGxGb3Jtc0RhdGEsXHJcbiAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcclxuICAgICAgKTtcclxuXHJcbiAgICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgYXdhaXQgdmFsaWRhdGlvbnMudmFsaWRhdGVGaWVsZCgpO1xyXG4gICAgICB9KSgpO1xyXG5cclxuICAgICAgdGhpcy5oYW5kbGVDb25uZWN0ZWRFbGVtZW50cyhcclxuICAgICAgICB7XHJcbiAgICAgICAgICBrZXk6IGZpZWxkLmtleSxcclxuICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldLnZhbHVlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcIk9OX0NIQU5HRVwiXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgYXN5bmMgaGFuZGxlT25DbGlja1Jlc2V0Rm9ybUZpZWxkcyhlOiBhbnksIGZpZWxkOiBURmllbGRUaXRsZSkge1xyXG4gICAgZm9yIChsZXQgZiBvZiBmaWVsZC5yZXNldC5maWVsZHMpIHtcclxuICAgICAgZm9yIChsZXQgYSBvZiBmLmFjdGlvbnMpIHtcclxuICAgICAgICBjb25zdCByZXNldEZpZWxkID0gZmluZEZpZWxkRnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGEucHJvcHMuZmllbGRLZXkpO1xyXG4gICAgICAgIGNvbnN0IGFjdGlvbnMgPSBuZXcgQWN0aW9ucyhcclxuICAgICAgICAgIGEsXHJcbiAgICAgICAgICByZXNldEZpZWxkLFxyXG4gICAgICAgICAge30sXHJcbiAgICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YSxcclxuICAgICAgICAgIHRoaXMuZm9ybURhdGEsXHJcbiAgICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgICAgICB0aGlzLnRha2VBY3Rpb24uYmluZCh0aGlzKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYXdhaXQgYWN0aW9ucy5leGVjdXRlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBhc3luYyBoYW5kbGVPbkNsaWNrQXBpQ2FsbChlOiBhbnkpIHtcclxuICAgIGxldCBmaWVsZDogVEZpZWxkQXBpQ2FsbCA9IGZpbmRGaWVsZEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBlLmtleSk7XHJcblxyXG4gICAgaWYgKGZpZWxkLnR5cGUgPT09IFwiYXBpLWNhbGxcIikge1xyXG4gICAgICAvLyBzZXQgYnV0dG9uIHN0YXR1cyB0byBsb2FkaW5nXHJcbiAgICAgIGZpZWxkW1wiYXBpXCJdW1wic3RhdHVzXCJdW1widmFsdWVcIl0gPSBFQXBpU3RhdHVzVHlwZS5MT0FESU5HO1xyXG4gICAgICBmaWVsZFtcInNob3dMb2FkZXJcIl0gPSB0cnVlO1xyXG4gICAgICB0aGlzLnZpZXdGb3Jtc0J1dHRvbltcImRpc2FibGVkXCJdID0gdHJ1ZTtcclxuICAgICAgdGhpcy52aWV3Rm9ybXNCdXR0b25bXCJzaG93TG9hZGVyXCJdID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zYXZlRm9ybUJ1dHRvbltcImRpc2FibGVkXCJdID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zYXZlRm9ybUJ1dHRvbltcInNob3dMb2FkZXJcIl0gPSB0cnVlO1xyXG5cclxuICAgICAgY29uc3QgYXBpcyA9IG5ldyBBcGlzKFxyXG4gICAgICAgIGZpZWxkLFxyXG4gICAgICAgIHRoaXMuZm9ybURhdGEsXHJcbiAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICAgIHRoaXMuYWxsRm9ybXNEYXRhLFxyXG4gICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBmaWVsZCA9IGF3YWl0IGFwaXMuc2V0UmVxdWVzdEJvZHlQYXJhbXMoKTtcclxuXHJcbiAgICAgIGZpZWxkID0gYXdhaXQgYXBpcy52YWxpZGF0ZVJlcXVlc3RCb2R5KCk7XHJcblxyXG4gICAgICBpZiAoZmllbGQuYXBpLnJlcXVlc3QuYm9keS52YWxpZGF0aW9uLmlzX3ZhbGlkKSB7XHJcbiAgICAgICAgLy8gQ2FsbCBBUEkgSGVyZVxyXG4gICAgICAgIHRoaXMub25DbGlja0FwaUNhbGwuZW1pdCh7XHJcbiAgICAgICAgICBrZXk6IGUua2V5LFxyXG4gICAgICAgICAgcmVxdWVzdDoge1xyXG4gICAgICAgICAgICBtb2RlOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgYm9keTogZmllbGQuYXBpLnJlcXVlc3QuYm9keS52YWx1ZSxcclxuICAgICAgICAgICAgaGVhZGVyczoge30sXHJcbiAgICAgICAgICAgIHVybDogZmllbGQuYXBpLnJlcXVlc3QudXJsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gUmVxdWVzdCBCb2R5IFZhbGlkYXRpb24gRmFpbGVkXHJcbiAgICAgICAgLy8gSGlnaGxpZ2h0IEVycm9yIGluIFVJIHRvIFVzZXIgdG8gUmV0cnkgQWZ0ZXIgU29tZXRpbWUuXHJcbiAgICAgICAgLy8gVGFrZSBBY3Rpb25zIGJhc2VkIG9uIFZhbGlkYXRpb25cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGZpZWxkW1wiYXBpXCJdW1wic3RhdHVzXCJdW1widmFsdWVcIl0gPSBFQXBpU3RhdHVzVHlwZS5GQUlMRUQ7XHJcbiAgICAgICAgICBmaWVsZFtcInNob3dMb2FkZXJcIl0gPSBmYWxzZTtcclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnZpZXdGb3Jtc0J1dHRvbltcImRpc2FibGVkXCJdID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudmlld0Zvcm1zQnV0dG9uW1wic2hvd0xvYWRlclwiXSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNhdmVGb3JtQnV0dG9uW1wiZGlzYWJsZWRcIl0gPSBmYWxzZTtcclxuICAgICAgdGhpcy5zYXZlRm9ybUJ1dHRvbltcInNob3dMb2FkZXJcIl0gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBoYW5kbGVPbkNsaWNrVmlld0Zvcm1zKGU6IGFueSkge1xyXG4gICAgdGhpcy5vbkNsaWNrVmlld0Zvcm1zLmVtaXQoe1xyXG4gICAgICBjbGlja2VkOiB0cnVlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBoYW5kbGVPbkNsaWNrU2F2ZUZvcm0oZTogYW55KSB7XHJcbiAgICBsZXQgZm9ybURhdGEgPSB0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xyXG5cclxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xyXG4gICAgICBpZiAoZmllbGQudHlwZSAhPT0gRUZpZWxkVHlwZS5USVRMRSkge1xyXG4gICAgICAgIGlmIChmaWVsZC5oaWRkZW4pIHtcclxuICAgICAgICAgIGRlbGV0ZSBmb3JtRGF0YVtmaWVsZC5rZXldO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBmb3JtRGF0YVtmaWVsZC5rZXldID0gY29udmVydFZhbHVlRnJvbUt3aWtVSUZvcm1hdFRvQmFzaWNGb3JtYXQoXHJcbiAgICAgICAgICAgIGZpZWxkLFxyXG4gICAgICAgICAgICBmb3JtRGF0YVtmaWVsZC5rZXldXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZm9ybUZpZWxkcykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZmllbGQudHlwZSAhPT0gRUZpZWxkVHlwZS5USVRMRSAmJlxyXG4gICAgICAgIGZpZWxkLnZhbGlkYXRpb24udHJpZ2dlcnMuaW5jbHVkZXMoXCJPTl9TQVZFXCIpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0gbmV3IFZhbGlkYXRpb25zKFxyXG4gICAgICAgICAgZmllbGQsXHJcbiAgICAgICAgICBmb3JtRGF0YSxcclxuICAgICAgICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSxcclxuICAgICAgICAgIHRoaXMuYWxsRm9ybXNEYXRhLFxyXG4gICAgICAgICAgdGhpcy50YWtlQWN0aW9uLmJpbmQodGhpcylcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgYXdhaXQgdmFsaWRhdGlvbnMudmFsaWRhdGVGaWVsZCgpO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAuaW52YWxpZCkge1xyXG4gICAgICBjb25zdCBjb250cm9scyA9IG5ldyBWYWxpZGF0aW9ucyhcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgZm9ybURhdGEsXHJcbiAgICAgICAgdGhpcy5wcmV2aW91c0Zvcm1EYXRhLFxyXG4gICAgICAgIHRoaXMuYWxsRm9ybXNEYXRhLFxyXG4gICAgICAgIHRoaXMudGFrZUFjdGlvbi5iaW5kKHRoaXMpXHJcbiAgICAgICkuZmluZEludmFsaWRDb250cm9sc1JlY3Vyc2l2ZSh0aGlzLmZvcm1Hcm91cCk7XHJcblxyXG4gICAgICBsZXQgZmlyc3RGaWVsZFdpdGhFcnJvcjogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICAgIGZvciAobGV0IGNvbnRyb2wgb2YgY29udHJvbHMpIHtcclxuICAgICAgICBpZiAoY29udHJvbC5pbnZhbGlkICYmIGlzRW1wdHkoZmlyc3RGaWVsZFdpdGhFcnJvcikpIHtcclxuICAgICAgICAgIGZpcnN0RmllbGRXaXRoRXJyb3IgPSBjb250cm9sLmtleTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzID0gc2V0RmllbGRFcnJvcihcclxuICAgICAgICAgIHRoaXMuZm9ybUZpZWxkcyxcclxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRyb2wua2V5XS5lcnJvcnMsXHJcbiAgICAgICAgICBjb250cm9sLmtleSxcclxuICAgICAgICAgIGNvbnRyb2wuaW52YWxpZFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24odHJ1ZSk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oZmFsc2UpO1xyXG4gICAgICB9LCAzMDAwKTtcclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBPYmplY3Qua2V5cyhmb3JtRGF0YSkubWFwKChrZXkpID0+IHtcclxuICAgICAgaWYgKGlzRW1wdHkoZm9ybURhdGFba2V5XSkpIHtcclxuICAgICAgICBmb3JtRGF0YVtrZXldID0gXCJcIjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5vbkNsaWNrU2F2ZUZvcm0uZW1pdCh7IGZvcm1Db25maWc6IHRoaXMuZm9ybUNvbmZpZywgZGF0YTogZm9ybURhdGEgfSk7XHJcbiAgfVxyXG5cclxuICBzaG93RXJyb3JOb3RpZmljYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAbG9nXHJcbiAgdG9nZ2xlRXJyb3JOb3RpZmljYXRpb24oc2hvdykge1xyXG4gICAgdGhpcy5zaG93RXJyb3JOb3RpZmljYXRpb24gPSBzaG93O1xyXG4gIH1cclxuXHJcbiAgLy8gQ29tcG9uZW50IEhlbHBlcnNcclxuICBAbG9nXHJcbiAgZmllbGRIaWRlKGZpZWxkS2V5OiBzdHJpbmcpIHtcclxuICAgIGxldCBmaWVsZCA9IGZpbmRGaWVsZEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XHJcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XVtcImhpZGRlblwiXSA9IHRydWU7XHJcbiAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgZmllbGRHcm91cEhpZGUoZmllbGRHcm91cDogc3RyaW5nKSB7XHJcbiAgICBmb3IgKGxldCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XHJcbiAgICAgIHRoaXMuZmllbGRIaWRlKGZpZWxkS2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBmaWVsZFNob3coZmllbGRLZXk6IHN0cmluZykge1xyXG4gICAgbGV0IGZpZWxkID0gZmluZEZpZWxkRnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcclxuICAgIGxldCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdW1wiaGlkZGVuXCJdID0gZmFsc2U7XHJcbiAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgZmllbGRHcm91cFNob3coZmllbGRHcm91cDogc3RyaW5nKSB7XHJcbiAgICBmb3IgKGxldCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XHJcbiAgICAgIHRoaXMuZmllbGRTaG93KGZpZWxkS2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBmaWVsZERpc2FibGUoZmllbGRLZXk6IHN0cmluZykge1xyXG4gICAgbGV0IGZpZWxkID0gZmluZEZpZWxkRnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcclxuICAgIGxldCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGZpZWxkLnR5cGUgIT09IEVGaWVsZFR5cGUuVElUTEUpIHtcclxuICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdW1wiZGlzYWJsZWRcIl0gPSB0cnVlO1xyXG5cclxuICAgICAgaWYgKGlzTm90RW1wdHkodGhpcy5mb3JtR3JvdXAuY29udHJvbHMpKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5kaXNhYmxlKHtcclxuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgZmllbGRHcm91cERpc2FibGUoZmllbGRHcm91cDogc3RyaW5nKSB7XHJcbiAgICBmb3IgKGxldCBmaWVsZEtleSBvZiB0aGlzLmZpZWxkR3JvdXBzW2ZpZWxkR3JvdXBdKSB7XHJcbiAgICAgIHRoaXMuZmllbGREaXNhYmxlKGZpZWxkS2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBmaWVsZEVuYWJsZShmaWVsZEtleTogc3RyaW5nKSB7XHJcbiAgICBsZXQgZmllbGQgPSBmaW5kRmllbGRGcm9tS2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xyXG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoZmllbGQudHlwZSAhPT0gRUZpZWxkVHlwZS5USVRMRSkge1xyXG4gICAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF1bXCJkaXNhYmxlZFwiXSA9IGZhbHNlO1xyXG5cclxuICAgICAgaWYgKGlzTm90RW1wdHkodGhpcy5mb3JtR3JvdXAuY29udHJvbHMpKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5lbmFibGUoe1xyXG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBmaWVsZEdyb3VwRW5hYmxlKGZpZWxkR3JvdXA6IHN0cmluZykge1xyXG4gICAgZm9yIChsZXQgZmllbGRLZXkgb2YgdGhpcy5maWVsZEdyb3Vwc1tmaWVsZEdyb3VwXSkge1xyXG4gICAgICB0aGlzLmZpZWxkRW5hYmxlKGZpZWxkS2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBmaWVsZFJlc2V0KGZpZWxkS2V5OiBzdHJpbmcpIHtcclxuICAgIC8vIEZpbmQgdGhlIGZpZWxkIGFuZCBpdHMgaW5kZXggaW4gdGhlIGZvcm1GaWVsZHMgYXJyYXlcclxuICAgIGxldCBmaWVsZCA9IGZpbmRGaWVsZEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XHJcbiAgICBsZXQgZmllbGRJbmRleCA9IGZpbmRGaWVsZEluZGV4RnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcclxuXHJcbiAgICAvLyBEZWxldGUgdGhlIGZpZWxkIGZyb20gdGhlIGZvcm1EYXRhIG9iamVjdFxyXG4gICAgZGVsZXRlIHRoaXMuZm9ybURhdGFbZmllbGRLZXldO1xyXG5cclxuICAgIC8vIFJlc2V0IHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgaW4gdGhlIGZvcm1Hcm91cFxyXG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XS5yZXNldChzZXRFbXB0eVZhbHVlKGZpZWxkKSwge1xyXG4gICAgICBlbWl0RXZlbnQ6IGZhbHNlXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBSZXNldCB0aGUgbWVzc2FnZXMgYW5kIGVycm9ycyBmb3IgdGhlIGZpZWxkXHJcbiAgICBmaWVsZCA9IHJlbW92ZU1lc3NhZ2UoZmllbGQsIHtcclxuICAgICAgdHlwZTogRU1lc3NhZ2VUeXBlLldBUk5JTkcsXHJcbiAgICAgIG1lc3NhZ2U6IFwiXCJcclxuICAgIH0pO1xyXG4gICAgZmllbGQgPSByZW1vdmVNZXNzYWdlKGZpZWxkLCB7XHJcbiAgICAgIHR5cGU6IEVNZXNzYWdlVHlwZS5TVUNDRVNTLFxyXG4gICAgICBtZXNzYWdlOiBcIlwiXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZmllbGRFcnJvckhpZGUoZmllbGRLZXksIHtcclxuICAgICAgdHlwZTogRU1lc3NhZ2VUeXBlLkVSUk9SLFxyXG4gICAgICBtZXNzYWdlOiBcIlwiXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBSZXNldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGluIHRoZSBmb3JtRmllbGRzIGFycmF5XHJcbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcclxuICAgICAgY2FzZSBcImFwaS1jYWxsXCI6XHJcbiAgICAgICAgY29uc3QgZmllbGRBcGlDYWxsID0gZmllbGQgYXMgVEZpZWxkQXBpQ2FsbDtcclxuICAgICAgICBmaWVsZEFwaUNhbGwuYXBpLnN0YXR1cy52YWx1ZSA9IEVBcGlTdGF0dXNUeXBlLkRFRkFVTFQ7XHJcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGRBcGlDYWxsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGZpZWxkLmZvY3VzID0gZmFsc2U7XHJcbiAgICAgICAgZmllbGQuaW52YWxpZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGxvZ1xyXG4gIGZpZWxkRXJyb3JTaG93KGZpZWxkS2V5OiBzdHJpbmcsIG1lc3NhZ2U6IFRNZXNzYWdlKSB7XHJcbiAgICBsZXQgZmllbGQgPSBmaW5kRmllbGRGcm9tS2V5KHRoaXMuZm9ybUZpZWxkcywgZmllbGRLZXkpO1xyXG4gICAgbGV0IGZpZWxkSW5kZXggPSB0aGlzLmZvcm1GaWVsZHMuZmluZEluZGV4KChfOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIGZpZWxkLmtleSA9PT0gXy5rZXk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmaWVsZCA9IGhpZ2hsaWdodEZpZWxkRXJyb3IoZmllbGQsIHRydWUpO1xyXG4gICAgZmllbGQgPSBhZGRNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcclxuXHJcbiAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBmaWVsZEVycm9ySGlkZShmaWVsZEtleTogc3RyaW5nLCBtZXNzYWdlOiBUTWVzc2FnZSkge1xyXG4gICAgbGV0IGZpZWxkID0gZmluZEZpZWxkRnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcclxuICAgIGxldCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xyXG4gICAgfSk7XHJcblxyXG4gICAgZmllbGQgPSBoaWdobGlnaHRGaWVsZEVycm9yKGZpZWxkLCBmYWxzZSk7XHJcbiAgICBmaWVsZCA9IHJlbW92ZU1lc3NhZ2UoZmllbGQsIG1lc3NhZ2UpO1xyXG5cclxuICAgIHRoaXMuZm9ybUZpZWxkc1tmaWVsZEluZGV4XSA9IGZpZWxkO1xyXG4gIH1cclxuXHJcbiAgQGxvZ1xyXG4gIGZpZWxkTWVzc2FnZVNob3coZmllbGRLZXk6IHN0cmluZywgbWVzc2FnZTogVE1lc3NhZ2UpIHtcclxuICAgIGxldCBmaWVsZCA9IGZpbmRGaWVsZEZyb21LZXkodGhpcy5mb3JtRmllbGRzLCBmaWVsZEtleSk7XHJcbiAgICBsZXQgZmllbGRJbmRleCA9IHRoaXMuZm9ybUZpZWxkcy5maW5kSW5kZXgoKF86IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gZmllbGQua2V5ID09PSBfLmtleTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZpZWxkID0gYWRkTWVzc2FnZShmaWVsZCwgbWVzc2FnZSk7XHJcblxyXG4gICAgdGhpcy5mb3JtRmllbGRzW2ZpZWxkSW5kZXhdID0gZmllbGQ7XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgZmllbGRNZXNzYWdlSGlkZShmaWVsZEtleTogc3RyaW5nLCBtZXNzYWdlOiBUTWVzc2FnZSkge1xyXG4gICAgbGV0IGZpZWxkID0gZmluZEZpZWxkRnJvbUtleSh0aGlzLmZvcm1GaWVsZHMsIGZpZWxkS2V5KTtcclxuICAgIGxldCBmaWVsZEluZGV4ID0gdGhpcy5mb3JtRmllbGRzLmZpbmRJbmRleCgoXzogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBmaWVsZC5rZXkgPT09IF8ua2V5O1xyXG4gICAgfSk7XHJcblxyXG4gICAgZmllbGQgPSByZW1vdmVNZXNzYWdlKGZpZWxkLCBtZXNzYWdlKTtcclxuXHJcbiAgICB0aGlzLmZvcm1GaWVsZHNbZmllbGRJbmRleF0gPSBmaWVsZDtcclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBzZXRPYmplY3RWYWx1ZShmaWVsZDogYW55LCBwYXRoOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHt9XHJcblxyXG4gIEBsb2dcclxuICBwYXRjaEZpZWxkQ29udHJvbFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKFxyXG4gICAgICB7XHJcbiAgICAgICAgW2tleV06IHZhbHVlXHJcbiAgICAgIH0sXHJcbiAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgQGxvZ1xyXG4gIGlzRmllbGRWYWxpZChmaWVsZEtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbZmllbGRLZXldLnZhbGlkO1xyXG4gIH1cclxuXHJcbiAgQGxvZ1xyXG4gIGlzRmllbGRFbmFibGVkKGZpZWxkS2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tmaWVsZEtleV0uZW5hYmxlZDtcclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBnZXRGb3JtR3JvdXBSYXdWYWx1ZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcclxuICB9XHJcblxyXG4gIEBsb2dcclxuICBhc3luYyBoYW5kbGVGaWVsZFR5cGVTZWFyY2hUZXh0KGZpZWxkOiBhbnksIGNoaWxkRmllbGQ6IGFueSkge1xyXG4gICAgaWYgKGhhc0tleShjaGlsZEZpZWxkLCBcImpzb25cIikpIHtcclxuICAgICAgY2hpbGRGaWVsZC5vcHRpb25zID0gZ2V0U2VhcmNoVGV4dE9wdGlvbnNGcm9tRmllbGRDb25maWcoXHJcbiAgICAgICAgZmllbGQsXHJcbiAgICAgICAgY2hpbGRGaWVsZCxcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKGhhc0tleShjaGlsZEZpZWxkLCBcImZldGNoSnNvbkZyb21SZW1vdGVcIikpIHtcclxuICAgICAgY2hpbGRGaWVsZC5vcHRpb25zID0gYXdhaXQgZ2V0U2VhcmNoVGV4dE9wdGlvbnNGcm9tUmVtb3RlRmlsZShcclxuICAgICAgICBmaWVsZCxcclxuICAgICAgICBjaGlsZEZpZWxkLFxyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNoaWxkRmllbGQ7XHJcbiAgfVxyXG5cclxuICBAbG9nXHJcbiAgYXN5bmMgdGFrZUFjdGlvbk9uRmllbGRHcm91cChcclxuICAgIGFjdGlvbjogVEFjdGlvbixcclxuICAgIGZpZWxkOiBURmllbGQsXHJcbiAgICBhbGxGb3Jtc0RhdGE6IGFueSxcclxuICAgIGZvcm1EYXRhOiBhbnksXHJcbiAgICBwcmV2aW91c0Zvcm1EYXRhOiBhbnlcclxuICApIHtcclxuICAgIHN3aXRjaCAoYWN0aW9uLmtleSkge1xyXG4gICAgICBjYXNlIEVBY3Rpb25LZXkuRklFTERfR1JPVVBfSElERTpcclxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBIaWRlKGFjdGlvbi5wcm9wcy5ncm91cEtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9HUk9VUF9TSE9XOlxyXG4gICAgICAgIHRoaXMuZmllbGRHcm91cFNob3coYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX0VOQUJMRTpcclxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBFbmFibGUoYWN0aW9uLnByb3BzLmdyb3VwS2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0dST1VQX0RJU0FCTEU6XHJcbiAgICAgICAgdGhpcy5maWVsZEdyb3VwRGlzYWJsZShhY3Rpb24ucHJvcHMuZ3JvdXBLZXkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGxvZ1xyXG4gIGFzeW5jIHRha2VBY3Rpb24oXHJcbiAgICBhY3Rpb246IFRBY3Rpb24sXHJcbiAgICBmaWVsZDogVEZpZWxkLFxyXG4gICAgYWxsRm9ybXNEYXRhOiBhbnksXHJcbiAgICBmb3JtRGF0YTogYW55LFxyXG4gICAgcHJldmlvdXNGb3JtRGF0YTogYW55XHJcbiAgKSB7XHJcbiAgICBzd2l0Y2ggKGFjdGlvbi5rZXkpIHtcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0hJREU6XHJcbiAgICAgICAgdGhpcy5maWVsZEhpZGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX1NIT1c6XHJcbiAgICAgICAgdGhpcy5maWVsZFNob3coYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0RJU0FCTEU6XHJcbiAgICAgICAgdGhpcy5maWVsZERpc2FibGUoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0VOQUJMRTpcclxuICAgICAgICB0aGlzLmZpZWxkRW5hYmxlKGFjdGlvbi5wcm9wcy5maWVsZEtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9SRVNFVDpcclxuICAgICAgICB0aGlzLmZpZWxkUmVzZXQoYWN0aW9uLnByb3BzLmZpZWxkS2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0VSUk9SX1NIT1c6XHJcbiAgICAgICAgdGhpcy5maWVsZEVycm9yU2hvdyhhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX0VSUk9SX0hJREU6XHJcbiAgICAgICAgdGhpcy5maWVsZEVycm9ySGlkZShhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkZJRUxEX01FU1NBR0VfU0hPVzpcclxuICAgICAgICB0aGlzLmZpZWxkTWVzc2FnZVNob3coYWN0aW9uLnByb3BzLmZpZWxkS2V5LCBhY3Rpb24ucHJvcHMubWVzc2FnZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5GSUVMRF9NRVNTQUdFU19ISURFOlxyXG4gICAgICAgIHRoaXMuZmllbGRNZXNzYWdlSGlkZShhY3Rpb24ucHJvcHMuZmllbGRLZXksIGFjdGlvbi5wcm9wcy5tZXNzYWdlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LlNFVF9WQUxVRTpcclxuICAgICAgICBjb25zdCBzb3VyY2VzID0gbmV3IFNvdXJjZXMoXHJcbiAgICAgICAgICBmaWVsZCxcclxuICAgICAgICAgIHRoaXMuZm9ybURhdGEsXHJcbiAgICAgICAgICB0aGlzLnByZXZpb3VzRm9ybURhdGEsXHJcbiAgICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNvdXJjZVZhbHVlID0gYXdhaXQgc291cmNlcy5nZXRWYWx1ZUZyb21Tb3VyY2UoXHJcbiAgICAgICAgICBhY3Rpb24ucHJvcHMudmFsdWUuc291cmNlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBzb3VyY2VzLnNldFZhbHVlVG9Tb3VyY2UoYWN0aW9uLnByb3BzLnZhbHVlLmRlc3RpbmF0aW9uLCBzb3VyY2VWYWx1ZSk7XHJcblxyXG4gICAgICAgIGZpZWxkID0gc291cmNlcy5maWVsZDtcclxuICAgICAgICB0aGlzLmZvcm1EYXRhID0gc291cmNlcy5mb3JtRGF0YTtcclxuICAgICAgICB0aGlzLmFsbEZvcm1zRGF0YSA9IHNvdXJjZXMuYWxsRm9ybXNEYXRhO1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNGb3JtRGF0YSA9IHNvdXJjZXMucHJldmlvdXNGb3JtRGF0YTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRUFjdGlvbktleS5IQU5ETEVfQ09OTkVDVEVEX0VMRU1FTlRTOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlQ29ubmVjdGVkRWxlbWVudHMoeyBrZXk6IGZpZWxkLmtleSB9LCBcIkFDVElPTlwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFQWN0aW9uS2V5LkNVU1RPTTpcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gIGNsYXNzPVwia3dpa2lkLWZvcm0tY29udGFpbmVyXCJcclxuICAqbmdJZj1cIiF0aGlzLmxvYWRpbmdcIlxyXG4+XHJcbiAgPGRpdiBpZD1cInVmLWZvcm0tZmllbGRzLWhlYWRlci1jb250YWluZXJcIj5cclxuICAgIDxkaXYgaWQ9XCJ1Zi1mb3JtLWZpZWxkcy10aXRsZVwiPlxyXG4gICAgICB7eyB0aGlzLmZvcm1Db25maWcudGl0bGUgfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBpZD1cInVmLWZvcm0tZmllbGRzLXN0ZXBzXCI+XHJcbiAgICAgIFN0ZXAge3sgdGhpcy5mb3JtQ29uZmlnLnNlcXVlbmNlTm8gfX0gb2Yge3sgdGhpcy5mb3Jtc0xpc3QubGVuZ3RoIH19XHJcbiAgICA8L2Rpdj5cclxuICAgIDxociAvPlxyXG4gIDwvZGl2PlxyXG4gIDxmb3JtXHJcbiAgICBjbGFzcz1cImt3aWtpZC1mb3JtIHNob3dcIlxyXG4gICAgW2Zvcm1Hcm91cF09XCJ0aGlzLmZvcm1Hcm91cFwiXHJcbiAgPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgdGhpcy5mb3JtRmllbGRzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImZpZWxkLnR5cGVcIj5cclxuICAgICAgICA8IS0tIEZvcm0gVGl0bGUgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RpdGxlJ1wiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cInRpdGxlXCJcclxuICAgICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcclxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIHt7IGZpZWxkLmxhYmVsIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8a3dpa3VpLWJ1dHRvblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZmllbGQ/LnJlc2V0XCJcclxuICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwid2hpdGVibG9ja1wiXHJcbiAgICAgICAgICAgICAgc2l6ZT1cInNcIlxyXG4gICAgICAgICAgICAgIGxhYmVsPVwiUmVzZXRcIlxyXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cInRoaXMuaGFuZGxlT25DbGlja1Jlc2V0Rm9ybUZpZWxkcygkZXZlbnQsIGZpZWxkKVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tIElucHV0IFRleHQgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXHJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dFxyXG4gICAgICAgICAgICAgIFtjYXNlXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jYXNlXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkLmxhYmVsXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxyXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcclxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dD5cclxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xyXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS0gQ2hlY2tib3ggLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxyXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxrd2lrdWktY2hlY2tib3gtYmxvY2tcclxuICAgICAgICAgICAgICBbY29udGVudEFsaWduXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5jb250ZW50QWxpZ24gPz8gJ2xlZnQnXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgIFtzaXplXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5zaXplID8/ICdsJ1wiXHJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxyXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLWNoZWNrYm94LWJsb2NrXHJcbiAgICAgICAgICAgID48a3dpa3VpLW1lc3NhZ2VzXHJcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPCEtLSBJbnB1dCBOdW1iZXIgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcclxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LW51bWJlclxyXG4gICAgICAgICAgICAgIFtkZWNpbWFsXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5kZWNpbWFsXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgW21heF09XCJmaWVsZD8ucHJvcGVydGllcz8ubWF4XCJcclxuICAgICAgICAgICAgICBbbWluXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5taW5cIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgIFtwb3N0Zml4XT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wb3N0Zml4ID8/ICcnXCJcclxuICAgICAgICAgICAgICBbcHJlY2lzaW9uXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wcmVjaXNpb25cIlxyXG4gICAgICAgICAgICAgIFtwcmVmaXhdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnByZWZpeCA/PyAnJ1wiXHJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcclxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1udW1iZXJcclxuICAgICAgICAgICAgPjxrd2lrdWktbWVzc2FnZXNcclxuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tIElucHV0IERhdGUgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXHJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1kYXRlXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5jb250cm9sc1tmaWVsZC5rZXldXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmllbGQ/LmludmFsaWRcIlxyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJmaWVsZC5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgW21heF09XCJmaWVsZD8ucHJvcGVydGllcz8ubWF4XCJcclxuICAgICAgICAgICAgICBbbWluXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5taW5cIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgIFtwcm9wZXJ0aWVzXT1cImZpZWxkPy5wcm9wZXJ0aWVzXCJcclxuICAgICAgICAgICAgICBbdmFsaWRhdG9yc109XCJmaWVsZD8udmFsaWRhdG9yc1wiXHJcbiAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtZGF0ZT5cclxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xyXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS0gSW5wdXQgUGhvbmUgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3Bob25lJ1wiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxyXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtcGhvbmVcclxuICAgICAgICAgICAgICBbY291bnRyeUNvZGVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LmNvdW50cnlDb2RlXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgW3Bob25lTWFza0FmdGVyQ291bnRyeUNvZGVdPVwiXHJcbiAgICAgICAgICAgICAgICBmaWVsZD8ucHJvcGVydGllcz8ucGhvbmVNYXNrQWZ0ZXJDb3VudHJ5Q29kZVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxyXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LXBob25lPlxyXG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXHJcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPCEtLSBJbnB1dCBSYWRpbyAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncmFkaW8nXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXHJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgW3R1aUxhYmVsXT1cImxhYmVsVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogYXV0b1wiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8a3dpa3VpLXJhZGlvLWxpc3RcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgW2ZvY3VzXT1cImZpZWxkPy5mb2N1c1wiXHJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwiZmllbGQ/Lm9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICBbb3JpZW50YXRpb25dPVwiZmllbGQ/LnByb3BlcnRpZXM/Lm9yaWVudGF0aW9uXCJcclxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZD8ucHJvcGVydGllcz8ucGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgICAgW3NpemVdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnNpemVcIlxyXG4gICAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxyXG4gICAgICAgICAgICAgICAgKGdldEtleVZhbHVlKT1cImhhbmRsZUdldEtleVZhbHVlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgID48L2t3aWt1aS1yYWRpby1saXN0PlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xhYmVsVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPHBcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidHVpLXNwYWNlX2JvdHRvbS0yXCJcclxuICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXHJcbiAgICAgICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGZpZWxkLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmllbGQudmFsaWRhdG9ycz8ucmVxdWlyZWRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2I+XHJcbiAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXHJcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPCEtLSBEcm9wZG93biAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZHJvcGRvd24td2l0aC1zZWFyY2gnXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZmllbGQ/LmhpZGRlblwiXHJcbiAgICAgICAgICAgIGlkPVwiZmllbGRfe3sgZmllbGQua2V5IH19XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGt3aWt1aS1zZWxlY3QtY29tYm9ib3hcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkLmxhYmVsXCJcclxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJmaWVsZC5vcHRpb25zXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQ/LnByb3BlcnRpZXM/LnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICBbcHJvcGVydGllc109XCJmaWVsZD8ucHJvcGVydGllc1wiXHJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRvcnNdPVwiZmllbGQ/LnZhbGlkYXRvcnNcIlxyXG4gICAgICAgICAgICAgIChnZXRLZXlWYWx1ZSk9XCJoYW5kbGVHZXRLZXlWYWx1ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLXNlbGVjdC1jb21ib2JveD5cclxuICAgICAgICAgICAgPGt3aWt1aS1tZXNzYWdlc1xyXG4gICAgICAgICAgICAgIFttZXNzYWdlc109XCJmaWVsZC5tZXNzYWdlc1wiXHJcbiAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmtleVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1tZXNzYWdlcz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwhLS0gQVBJIENhbGwgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FwaS1jYWxsJ1wiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBbaGlkZGVuXT1cImZpZWxkPy5oaWRkZW5cIlxyXG4gICAgICAgICAgICBpZD1cImZpZWxkX3t7IGZpZWxkLmtleSB9fVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxrd2lrdWktYnV0dG9uLWFwaS1jYWxsXHJcbiAgICAgICAgICAgICAgW2FwaVN0YXR1c109XCJmaWVsZD8uYXBpPy5zdGF0dXM/LnZhbHVlXCJcclxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZmllbGQ/LmNsYXNzXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmFwaT8uc3RhdHVzPy5sYWJlbHNbZmllbGQ/LmFwaT8uc3RhdHVzPy52YWx1ZV1cIlxyXG4gICAgICAgICAgICAgIFtzaG93TG9hZGVyXT1cImZpZWxkPy5kaXNhYmxlZCA9PT0gJ2xvYWRpbmcnXCJcclxuICAgICAgICAgICAgICBzaGFwZT1cIm51bGxcIlxyXG4gICAgICAgICAgICAgIHNpemU9XCJtXCJcclxuICAgICAgICAgICAgICBzdHlsZXM9XCJ3aWR0aDogZml0LWNvbnRlbnRcIlxyXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cInRoaXMuaGFuZGxlT25DbGlja0FwaUNhbGwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1idXR0b24tYXBpLWNhbGw+XHJcbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcclxuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tIE1vYmlsZSBPVFAgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ290cCdcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcclxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LW90cFxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmaWVsZD8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmaWVsZD8uZm9jdXNcIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtR3JvdXAuY29udHJvbHNbZmllbGQua2V5XVwiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZpZWxkPy5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICBbbGFiZWxdPVwiZmllbGQ/LmxhYmVsXCJcclxuICAgICAgICAgICAgICBbbWFza109XCJmaWVsZD8ucHJvcGVydGllcz8ubWFza1wiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wcm9wZXJ0aWVzPy5wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcclxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1vdHA+XHJcbiAgICAgICAgICAgIDxrd2lrdWktbWVzc2FnZXNcclxuICAgICAgICAgICAgICBbbWVzc2FnZXNdPVwiZmllbGQubWVzc2FnZXNcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgICA+PC9rd2lrdWktbWVzc2FnZXM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8IS0tIEFhZGhhYXIgTnVtYmVyIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhYWRoYWFyLW51bWJlcidcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW2hpZGRlbl09XCJmaWVsZD8uaGlkZGVuXCJcclxuICAgICAgICAgICAgaWQ9XCJmaWVsZF97eyBmaWVsZC5rZXkgfX1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LWFhZGhhYXJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmllbGQ/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmllbGQ/LmZvY3VzXCJcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmNvbnRyb2xzW2ZpZWxkLmtleV1cIlxyXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmaWVsZD8uaW52YWxpZFwiXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImZpZWxkPy5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkPy5wbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW3Byb3BlcnRpZXNdPVwiZmllbGQ/LnByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAgIFt2YWxpZGF0b3JzXT1cImZpZWxkPy52YWxpZGF0b3JzXCJcclxuICAgICAgICAgICAgICAoZ2V0S2V5VmFsdWUpPVwiaGFuZGxlR2V0S2V5VmFsdWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1hYWRoYWFyPlxyXG4gICAgICAgICAgICA8a3dpa3VpLW1lc3NhZ2VzXHJcbiAgICAgICAgICAgICAgW21lc3NhZ2VzXT1cImZpZWxkLm1lc3NhZ2VzXCJcclxuICAgICAgICAgICAgICBbaWRdPVwiZmllbGQua2V5XCJcclxuICAgICAgICAgICAgPjwva3dpa3VpLW1lc3NhZ2VzPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9mb3JtPlxyXG4gIDxkaXYgY2xhc3M9XCJrd2lraWQtZm9ybS1idXR0b25zXCI+XHJcbiAgICA8a3dpa3VpLWJ1dHRvblxyXG4gICAgICAqbmdJZj1cInRoaXMuaXNNb2JpbGVWaWV3XCJcclxuICAgICAgW2Rpc2FibGVkXT1cInZpZXdGb3Jtc0J1dHRvbi5kaXNhYmxlZFwiXHJcbiAgICAgIGlkPVwiXCJcclxuICAgICAgbGFiZWw9XCJWaWV3IEZvcm1zXCJcclxuICAgICAgW3Nob3dMb2FkZXJdPVwidmlld0Zvcm1zQnV0dG9uLnNob3dMb2FkZXJcIlxyXG4gICAgICBzdHlsZXM9XCJcIlxyXG4gICAgICBjbGFzcz1cIlwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcclxuICAgICAgaWNvbj1cIlwiXHJcbiAgICAgIGljb25SaWdodD1cIlwiXHJcbiAgICAgIFtzaGFwZV09XCJudWxsXCJcclxuICAgICAgc2l6ZT1cIm1cIlxyXG4gICAgICBzdHlsZXM9XCJ3aWR0aDogMTAwJVwiXHJcbiAgICAgIChvbkNsaWNrKT1cInRoaXMuaGFuZGxlT25DbGlja1ZpZXdGb3JtcygkZXZlbnQpXCJcclxuICAgID48L2t3aWt1aS1idXR0b24+XHJcbiAgICA8a3dpa3VpLWJ1dHRvblxyXG4gICAgICBbZGlzYWJsZWRdPVwic2F2ZUZvcm1CdXR0b24uZGlzYWJsZWRcIlxyXG4gICAgICBpZD1cIlwiXHJcbiAgICAgIGxhYmVsPVwiU2F2ZVwiXHJcbiAgICAgIFtzaG93TG9hZGVyXT1cInNhdmVGb3JtQnV0dG9uLnNob3dMb2FkZXJcIlxyXG4gICAgICBzdHlsZXM9XCJcIlxyXG4gICAgICBjbGFzcz1cIlwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBhcHBlYXJhbmNlPVwicHJpbWFyeVwiXHJcbiAgICAgIGljb249XCJcIlxyXG4gICAgICBpY29uUmlnaHQ9XCJcIlxyXG4gICAgICBbc2hhcGVdPVwibnVsbFwiXHJcbiAgICAgIHNpemU9XCJtXCJcclxuICAgICAgc3R5bGVzPVwid2lkdGg6IDEwMCVcIlxyXG4gICAgICAob25DbGljayk9XCJ0aGlzLmhhbmRsZU9uQ2xpY2tTYXZlRm9ybSgkZXZlbnQpXCJcclxuICAgID48L2t3aWt1aS1idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2XHJcbiAgY2xhc3M9XCJrd2lraWQtZm9ybS1jb250YWluZXItbG9hZGluZ1wiXHJcbiAgKm5nSWY9XCJ0aGlzLmxvYWRpbmdcIlxyXG4+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJsYXJnZS13cmFwcGVyXCJcclxuICAgIFtjbGFzcy50dWktc2tlbGV0b25dPVwidGhpcy5sb2FkaW5nXCJcclxuICAgIFtjbGFzcy50dWktc2tlbGV0b25fcm91bmRlZF09XCJ0aGlzLmxvYWRpbmdcIlxyXG4gID48L2Rpdj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImxhcmdlLXdyYXBwZXJcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl09XCJ0aGlzLmxvYWRpbmdcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl9yb3VuZGVkXT1cInRoaXMubG9hZGluZ1wiXHJcbiAgPjwvZGl2PlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwibGFyZ2Utd3JhcHBlclwiXHJcbiAgICBbY2xhc3MudHVpLXNrZWxldG9uXT1cInRoaXMubG9hZGluZ1wiXHJcbiAgICBbY2xhc3MudHVpLXNrZWxldG9uX3JvdW5kZWRdPVwidGhpcy5sb2FkaW5nXCJcclxuICA+PC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJsYXJnZS13cmFwcGVyXCJcclxuICAgIFtjbGFzcy50dWktc2tlbGV0b25dPVwidGhpcy5sb2FkaW5nXCJcclxuICAgIFtjbGFzcy50dWktc2tlbGV0b25fcm91bmRlZF09XCJ0aGlzLmxvYWRpbmdcIlxyXG4gID48L2Rpdj5cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cImxhcmdlLXdyYXBwZXJcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl09XCJ0aGlzLmxvYWRpbmdcIlxyXG4gICAgW2NsYXNzLnR1aS1za2VsZXRvbl9yb3VuZGVkXT1cInRoaXMubG9hZGluZ1wiXHJcbiAgPjwvZGl2PlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwibGFyZ2Utd3JhcHBlclwiXHJcbiAgICBbY2xhc3MudHVpLXNrZWxldG9uXT1cInRoaXMubG9hZGluZ1wiXHJcbiAgICBbY2xhc3MudHVpLXNrZWxldG9uX3JvdW5kZWRdPVwidGhpcy5sb2FkaW5nXCJcclxuICA+PC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJsYXJnZS13cmFwcGVyXCJcclxuICAgIFtjbGFzcy50dWktc2tlbGV0b25dPVwidGhpcy5sb2FkaW5nXCJcclxuICAgIFtjbGFzcy50dWktc2tlbGV0b25fcm91bmRlZF09XCJ0aGlzLmxvYWRpbmdcIlxyXG4gID48L2Rpdj5cclxuPC9kaXY+XHJcbjx0dWktcHVzaFxyXG4gIGlkPVwiZmllbGQtZXJyb3Itbm90aWZpY2F0aW9uXCJcclxuICAqdHVpUHVzaD1cInNob3dFcnJvck5vdGlmaWNhdGlvblwiXHJcbiAgaGVhZGluZz1cIk1pc3NpbmcvSW5jb3JyZWN0IEZpZWxkcyFcIlxyXG4gIHR5cGU9XCJFcnJvclwiXHJcbiAgKGNsb3NlKT1cInRvZ2dsZUVycm9yTm90aWZpY2F0aW9uKGZhbHNlKVwiXHJcbj5cclxuICA8dHVpLXN2Z1xyXG4gICAgc3JjPVwidHVpSWNvbkNhbmNlbFwiXHJcbiAgICBzdHlsZT1cImNvbG9yOiAjZmZmICFpbXBvcnRhbnRcIlxyXG4gID5cclxuICA8L3R1aS1zdmc+XHJcbjwvdHVpLXB1c2g+XHJcbiJdfQ==