kwikid-forms 0.5.14 → 0.5.16

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.
@@ -7,7 +7,7 @@ import _ from "lodash";
7
7
  import { Converter } from "../../renderer/config-converter/config-converter";
8
8
  import { EFormEditorType } from "./builder-form-editor.definitions";
9
9
  import { findModifiedKeys, getFieldIndex, removeField } from "./builder-form-editor.helper";
10
- import { FIELD_CONFIG, FIELD_PROPERTIES_CONFIG, FIELD_VALIDATORS_CONFIG, OPTIONS, TABLE_COLUMNS } from "./builder.form-editor.constants";
10
+ import { FIELD_CONFIG, FIELD_PROPERTIES_CONFIG, FIELD_VALIDATORS_CONFIG, NOFIELD_CONFIG, OPTIONS, TABLE_COLUMNS } from "./builder.form-editor.constants";
11
11
  import * as i0 from "@angular/core";
12
12
  import * as i1 from "kwikui";
13
13
  import * as i2 from "./builder.form-editor.service";
@@ -112,15 +112,9 @@ export class KwikIDBuilderFormEditorComponent {
112
112
  this.activeEditorType = editorType;
113
113
  }
114
114
  handleOnClickSaveActiveFormConfig() {
115
- const fields = [];
116
- for (let field of Object.values(getObjectDeepCopy(this.formGroup.getRawValue()))) {
117
- fields.push(setValueToObjectPath(findModifiedKeys(FIELD_CONFIG[field["type"]], field, ""), "type", field["type"]));
118
- }
119
- this.activeFormConfig = mergeObjects(getObjectDeepCopy(this.activeFormConfig_NoFields), {
120
- fields: fields
121
- });
115
+ this.convertToMinifiedJson();
122
116
  this.markSaved();
123
- this.onClickSaveActiveFormConfig.emit(this.activeFormConfig);
117
+ this.onClickSaveActiveFormConfig.emit(getObjectDeepCopy(this.activeFormConfig));
124
118
  }
125
119
  /**
126
120
  * Fields Editor Related Methods
@@ -263,6 +257,21 @@ export class KwikIDBuilderFormEditorComponent {
263
257
  copyToClipboard() {
264
258
  this.kwikidBuilderFormEditorService.copyToClipboard(this.activeFormConfig);
265
259
  }
260
+ convertToMinifiedJson() {
261
+ const fields = [];
262
+ for (let field of Object.values(getObjectDeepCopy(this.formGroup.getRawValue()))) {
263
+ fields.push(setValueToObjectPath(findModifiedKeys(FIELD_CONFIG[field["type"]], field, ""), "type", field["type"]));
264
+ }
265
+ const activeFormConfig_NoFields_Minified = findModifiedKeys(NOFIELD_CONFIG, getObjectDeepCopy(this.activeFormConfig_NoFields), "");
266
+ this.activeFormConfig = mergeObjects({}, activeFormConfig_NoFields_Minified, {
267
+ fields: fields
268
+ });
269
+ }
270
+ convertToCompleteJson() {
271
+ let formConfig = new Converter().convertFormConfig(getObjectDeepCopy(this.activeFormConfig));
272
+ formConfig = new Converter().updateFormConfigProperties(formConfig);
273
+ this.activeFormConfig = formConfig;
274
+ }
266
275
  downloadJSON() {
267
276
  this.kwikidBuilderFormEditorService.downloadJSON(this.activeFormConfig);
268
277
  }
@@ -318,7 +327,7 @@ export class KwikIDBuilderFormEditorComponent {
318
327
  }
319
328
  }
320
329
  /** @nocollapse */ KwikIDBuilderFormEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: KwikIDBuilderFormEditorComponent, deps: [{ token: i1.KwikUILoaderService }, { token: i2.KwikIDFormBuilderFormEditorService }], target: i0.ɵɵFactoryTarget.Component });
321
- /** @nocollapse */ KwikIDBuilderFormEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDBuilderFormEditorComponent, selector: "kwikid-builder-form-editor", inputs: { activeFormConfig: "activeFormConfig" }, outputs: { onClickSaveActiveFormConfig: "onClickSaveActiveFormConfig" }, usesOnChanges: true, ngImport: i0, template: "<!-- Component Loader -->\n<kwikui-loader\n></kwikui-loader>\n\n<!-- Component Main View -->\n<div class=\"container\">\n <ng-container *ngIf=\"activeFormConfig; else noFormSelectedTemplate\">\n <header>\n <div>\n &nbsp;Editing Config of Form: <b>{{ activeFormConfig.props.title }}</b>\n </div>\n <div class=\"header-form-editor-btns\">\n <button (click)=\"handleOnClickPreview()\">preview</button>\n <div>Editor&nbsp;Type:</div>\n <select (change)=\"handleOnClickChangeActiveEditor($event.target.value)\">\n <option\n *ngFor=\"let option of editorTypeOptions\"\n [value]=\"option.key\"\n [selected]=\"option.key === activeEditorType\"\n >\n {{ option.label }}\n </option>\n </select>\n </div>\n </header>\n <main>\n <div\n class=\"form-config-fields\"\n *ngIf=\"activeEditorType == 'FIELDS'; else nonFieldsEditorTemplate\"\n >\n <ng-container *ngIf=\"rows.length <= 0\">\n <div class=\"no-fields disclaimer\">\n <div><p>Please add field to get started</p></div>\n <div class=\"icon\"><h1>&plus;</h1></div>\n <button (click)=\"handleOnClickAddField()\">add field</button>\n </div>\n </ng-container>\n <table>\n <thead>\n <tr>\n <th *ngFor=\"let column of columns\">\n {{ column }}\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-container\n *ngFor=\"let row of rows; let i = index; trackBy: trackByFn\"\n >\n <tr>\n <ng-container *ngFor=\"let column of columns; let j = index\">\n <td>\n <div [class]=\"column\">\n <ng-container\n *ngIf=\"\n column !== 'delete' &&\n column !== 'validators' &&\n column !== 'properties' &&\n column !== 'type' &&\n column !== 'disabled'\n \"\n [ngTemplateOutlet]=\"getFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: i,\n fieldValue: row[column],\n fieldKey: column,\n parentPath: ''\n }\"\n ></ng-container>\n <ng-container *ngIf=\"column === 'type'\">\n <ng-container\n [ngTemplateOutlet]=\"optionFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: i,\n key: column,\n value: row[column],\n path: '',\n options: memoizedGetOptions(\n i,\n row[column],\n column,\n ''\n )\n }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"column === 'disabled'\">\n <ng-container\n [ngTemplateOutlet]=\"booleanFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: i,\n key: column,\n value: row[column],\n path: '',\n options: memoizedGetOptions(\n i,\n row[column],\n column,\n ''\n )\n }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"column === 'delete'\">\n <button\n (click)=\"\n handleOnClickDeleteField({\n index: i,\n key: row['key']\n })\n \"\n [disabled]=\"rows.length === 1\"\n >\n delete\n </button>\n </ng-container>\n <ng-container *ngIf=\"column === 'validators'\">\n <button\n (click)=\"\n handleOnClickEditValidators({\n index: i,\n key: row['key'],\n type: row['type']\n })\n \"\n >\n edit\n </button>\n </ng-container>\n <ng-container *ngIf=\"column === 'properties'\">\n <button\n (click)=\"\n handleOnClickEditProperties({\n index: i,\n key: row['key'],\n type: row['type']\n })\n \"\n >\n edit\n </button>\n </ng-container>\n </div>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </tbody>\n </table>\n <div class=\"add-field-btn-container\"> </div>\n </div>\n <ng-template #nonFieldsEditorTemplate>\n <div class=\"form-config-no-fields\">\n <pre\n contenteditable=\"true\"\n (keyup)=\"\n handleOnClickSaveActiveFormConfig_NoFields(\n $event.target.innerHTML\n )\n \"\n >\n {{ activeFormConfig_NoFields | json }}\n </pre>\n </div>\n </ng-template>\n </main>\n <footer>\n <button\n *ngIf=\"rows.length > 0\"\n (click)=\"handleOnClickAddField()\"\n >\n add field\n </button>\n <button\n (click)=\"handleOnClickSaveActiveFormConfig()\"\n [class.secondary]=\"!savedConfig\"\n >\n {{ savedConfig ? \"saved\" : \"unsaved\" }}\n </button>\n </footer>\n </ng-container>\n <ng-template #noFormSelectedTemplate>\n <div class=\"no-form-selected disclaimer\">\n <div class=\"icon\"><h1>&#10150;</h1></div>\n <div><p>Please select a form to edit it's fields</p></div>\n </div>\n </ng-template>\n</div>\n\n<!-- Component Dialog -->\n<div\n class=\"modal\"\n [class.error]=\"dialogError === true\"\n *ngIf=\"\n dialogOpen ||\n showFieldConfigValidatorsConfigEditor ||\n showFieldConfigPropertiesConfigEditor\n \"\n [@panelInOut]\n>\n <div class=\"modal-box\">\n <div\n class=\"modal-content\"\n *ngIf=\"dialogOpen\"\n >\n <div class=\"modal-heading\">\n <div class=\"modal-title\">\n {{ activeFormConfig.props.title }}'s Config Preview\n </div>\n <div class=\"modal-actions\">\n <button (click)=\"downloadJSON()\">download</button>\n <button (click)=\"copyToClipboard()\">copy</button>\n <button (click)=\"closeJSONPopup()\">close</button>\n </div>\n </div>\n <div class=\"modal-body\">\n <pre>\n <code>{{ activeFormConfig | json }}</code>\n </pre>\n </div>\n </div>\n <div\n class=\"modal-content\"\n *ngIf=\"showFieldConfigValidatorsConfigEditor\"\n >\n <div class=\"modal-heading\">\n <div class=\"modal-title\">\n {{ activeFormConfig.props.title }}'s Validator Config Editor\n </div>\n <div class=\"modal-actions\">\n <button (click)=\"closeJSONPopup()\">close</button>\n </div>\n </div>\n <div class=\"modal-body\">\n <pre\n contenteditable=\"true\"\n (keyup)=\"\n handleOnInputFieldConfigValidatorsConfig($event.target.innerHTML)\n \"\n >\n {{ this.activeFieldConfigValidatorsConfig | json }}\n </pre>\n </div>\n </div>\n <div\n class=\"modal-content\"\n *ngIf=\"showFieldConfigPropertiesConfigEditor\"\n >\n <div class=\"modal-heading\">\n <div class=\"modal-title\">\n {{ activeFormConfig.props.title }}'s Properties Config Editor\n </div>\n <div class=\"modal-actions\">\n <button (click)=\"closeJSONPopup()\">close</button>\n </div>\n </div>\n <div class=\"modal-body\">\n <pre\n contenteditable=\"true\"\n (keyup)=\"\n handleOnInputFieldConfigPropertiesConfig($event.target.innerHTML)\n \"\n >\n {{ this.activeFieldConfigPropertiesConfig | json }}\n </pre>\n </div>\n </div>\n </div>\n</div>\n<!-- END -->\n\n<!-- Template for rendering different field types -->\n<!-- General Field Template -->\n<ng-template\n #getFieldTemplate\n let-index=\"index\"\n let-value=\"fieldValue\"\n let-key=\"fieldKey\"\n let-path=\"parentPath\"\n>\n <div>\n <ng-container\n [ngTemplateOutlet]=\"\n isObject(value) ? objectFieldTemplate : notObjectFieldTemplate\n \"\n [ngTemplateOutletContext]=\"{\n index: index,\n fieldValue: value,\n fieldKey: key,\n parentPath: path\n }\"\n >\n </ng-container>\n </div>\n</ng-template>\n\n<!-- Object Type Field Template -->\n<ng-template\n #objectFieldTemplate\n let-index=\"index\"\n let-value=\"fieldValue\"\n let-key=\"fieldKey\"\n let-path=\"parentPath\"\n>\n <ng-container *ngFor=\"let item of value | keyvalue\">\n <ng-container\n [ngTemplateOutlet]=\"getFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: index,\n fieldValue: item.value,\n fieldKey: item.key,\n parentPath: path === '' ? key : path + '.' + key\n }\"\n >\n </ng-container>\n </ng-container>\n</ng-template>\n\n<!-- Non Object Type Field Template -->\n<ng-template\n #notObjectFieldTemplate\n let-index=\"index\"\n let-value=\"fieldValue\"\n let-key=\"fieldKey\"\n let-path=\"parentPath\"\n>\n <div>\n <ng-container *ngIf=\"isOptions(index, value, key, path)\">\n <ng-container\n [ngTemplateOutlet]=\"optionFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: index,\n key: key,\n value: value,\n path: path,\n options: memoizedGetOptions(index, value, key, path)\n }\"\n ></ng-container>\n </ng-container>\n <ng-container\n *ngIf=\"!isOptions(index, value, key, path) && isString(value)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n textFieldTemplate;\n context: { index: index, key: key, value: value, path: path }\n \"\n ></ng-container>\n </ng-container>\n <ng-container\n *ngIf=\"!isOptions(index, value, key, path) && isNumber(value)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n numberFieldTemplate;\n context: { index: index, key: key, value: value, path: path }\n \"\n ></ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n<!-- Non Object Type Field :: Options Field Template -->\n<ng-template\n #optionFieldTemplate\n let-index=\"index\"\n let-key=\"key\"\n let-value=\"value\"\n let-path=\"path\"\n let-options=\"options\"\n>\n <div class=\"field-container options\">\n <select\n (change)=\"handleOnInput({ index, key, value: { previous: value, new: $event.target.value }, path })\"\n >\n <option\n *ngFor=\"let option of options\"\n [value]=\"option\"\n [selected]=\"option === value\"\n >{{ option }}</option\n >\n </select>\n </div>\n</ng-template>\n\n<!-- Non Object Type Field :: Boolean Field Template -->\n<ng-template\n #booleanFieldTemplate\n let-index=\"index\"\n let-key=\"key\"\n let-value=\"value\"\n let-path=\"path\"\n>\n <div class=\"field-container checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"value\"\n (change)=\"handleOnInput({ index, key, value: { previous: value, new: $event.target.checked }, path })\"\n />\n </div>\n</ng-template>\n\n<!-- Non Object Type Field :: Text Field Template -->\n<ng-template\n #textFieldTemplate\n let-index=\"index\"\n let-key=\"key\"\n let-value=\"value\"\n let-path=\"path\"\n>\n <div class=\"field-container text\">\n <input\n placeholder=\"Enter {{ key }}\"\n type=\"text\"\n [value]=\"value\"\n (blur)=\"handleOnInput({ index, key, value: { previous: value, new: $event.target.value }, path })\"\n />\n </div>\n</ng-template>\n\n<!-- Non Object Type Field :: Number Field Template -->\n<ng-template\n #numberFieldTemplate\n let-index=\"index\"\n let-key=\"key\"\n let-value=\"value\"\n let-path=\"path\"\n>\n <div class=\"field-container number\">\n <input\n placeholder=\"Enter {{ key }}\"\n type=\"number\"\n [value]=\"value\"\n (blur)=\"handleOnInput({ index, key, value: { previous: value, new: $event.target.value }, path })\"\n />\n </div>\n</ng-template>\n<!-- END -->\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}input[type=text],input[type=number]{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px;box-sizing:border-box;-webkit-appearance:auto!important;appearance:auto!important}input[type=checkbox]{-webkit-appearance:auto!important;appearance:auto!important;width:1rem;height:1rem}select{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px;box-sizing:border-box}textarea{overflow-wrap:anywhere;resize:none;unicode-bidi:embed;white-space:pre-wrap}button{display:inline-block;padding:8px 12px;background-color:#007bff;color:#fff;text-decoration:none;border-radius:4px;border:none;cursor:pointer}button:hover{background-color:#0069d9}button:active{background-color:#0056b3}button:focus{outline:none}button.secondary{padding:7px 11px;border:1px solid #007bff;background-color:#fff;color:#007bff}button.secondary:hover{background-color:#b7daff}button.secondary:active{background-color:#b7daff}button.secondary:focus{outline:none}.field-container{display:flex}.field-container label{color:gray}.field-container.checkbox{flex-direction:row;align-items:center;justify-content:center;padding:8px 12px;margin:auto}.field-container.options,.field-container.number,.field-container.text{flex-direction:column}.disclaimer{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:center;color:#121212;width:100%;height:100%}.disclaimer>*:not(:last-child){margin-bottom:1.5rem}.disclaimer .icon{width:3rem;height:3rem;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}.disclaimer.no-form-selected h1{transform:scaleX(-1)}.disclaimer h1{font-size:5rem;font-weight:100}.disclaimer p{font-size:1rem}\n", ":host{all:unset;position:relative;width:100%;height:100%;overflow:auto}.container{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;height:100%;border:1px solid #ccc}.container header{padding:.5rem;display:flex;flex-direction:row;align-content:center;justify-content:space-between;align-items:center;border-bottom:1px solid #ccc}.container header .header-form-editor-btns{display:flex;flex-direction:row;align-content:center;justify-content:space-between;align-items:center}.container header .header-form-editor-btns>*:not(:last-child){margin-right:1rem}.container main{padding:.5rem;flex-grow:1;overflow:auto;display:flex;flex-direction:row;justify-content:flex-start;align-items:stretch;white-space:nowrap;position:relative}.container main>*:not(:last-child){margin-right:1rem}.container main .no-fields{position:absolute;top:0;left:0;background:white}.container main .form-config-no-fields{overflow:auto;width:100%}.container main .form-config-fields{overflow:auto;width:100%}.container main .form-config-fields .add-field-btn-container{width:100%;text-align:center}.container main .validators,.container main .properties{display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch}.container main .validators>*:not(:last-child),.container main .properties>*:not(:last-child){margin-bottom:.5rem}.container main .input-checkbox-container{display:flex;flex-direction:row}.container footer{padding:.5rem;display:flex;flex-direction:row;justify-content:flex-end;align-items:stretch;border-top:1px solid lightgray}.container footer>*:not(:last-child){margin-right:1rem}.modal{position:absolute;top:0;background-color:#0000004d;width:100%;height:100%;display:flex;justify-content:center;align-items:center;left:0;flex-direction:row}.modal.error{background-color:#ff00004d}.modal-box{width:75%;height:75%;margin:auto;background-color:#fff;border-radius:1rem;box-shadow:#64646f33 0 7px 29px}.modal-content{display:flex;flex-direction:column;align-content:center;justify-content:flex-start;align-items:stretch;width:100%;height:100%}.modal-heading{padding:.5rem 1rem;width:100%;display:flex;flex-direction:row;justify-content:space-between;border-bottom:1px solid lightgray;align-items:center}.modal-title{font-weight:bold;font-size:1rem}.modal-actions{display:flex;flex-direction:row;cursor:pointer}.modal-actions>*:not(:last-child){margin-right:1rem}.modal-body{overflow:auto}.modal-body pre{padding:1rem}pre{white-space:pre-wrap;overflow:auto}table{width:100%;border-collapse:collapse;margin-bottom:20px}table th,table td{padding:8px;text-align:left;border:1px solid #ccc;vertical-align:top}table th{background-color:#f2f2f2}table tr:nth-child(even){background-color:#f9f9f9}table tr:hover{background-color:#eaeaea}\n"], components: [{ type: i1.KwikUILoaderComponent, selector: "kwikui-loader" }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "json": i3.JsonPipe, "keyvalue": i3.KeyValuePipe }, animations: [
330
+ /** @nocollapse */ KwikIDBuilderFormEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDBuilderFormEditorComponent, selector: "kwikid-builder-form-editor", inputs: { activeFormConfig: "activeFormConfig" }, outputs: { onClickSaveActiveFormConfig: "onClickSaveActiveFormConfig" }, usesOnChanges: true, ngImport: i0, template: "<!-- Component Loader -->\n<kwikui-loader></kwikui-loader>\n\n<!-- Component Main View -->\n<div class=\"container\">\n <ng-container *ngIf=\"activeFormConfig; else noFormSelectedTemplate\">\n <header>\n <div>\n &nbsp;Editing Config of Form: <b>{{ activeFormConfig.props.title }}</b>\n </div>\n <div class=\"header-form-editor-btns\">\n <button (click)=\"handleOnClickPreview()\">preview</button>\n <div>Editor&nbsp;Type:</div>\n <select (change)=\"handleOnClickChangeActiveEditor($event.target.value)\">\n <option\n *ngFor=\"let option of editorTypeOptions\"\n [value]=\"option.key\"\n [selected]=\"option.key === activeEditorType\"\n >\n {{ option.label }}\n </option>\n </select>\n </div>\n </header>\n <main>\n <div\n class=\"form-config-fields\"\n *ngIf=\"activeEditorType == 'FIELDS'; else nonFieldsEditorTemplate\"\n >\n <ng-container *ngIf=\"rows.length <= 0\">\n <div class=\"no-fields disclaimer\">\n <div><p>Please add field to get started</p></div>\n <div class=\"icon\"><h1>&plus;</h1></div>\n <button (click)=\"handleOnClickAddField()\">add field</button>\n </div>\n </ng-container>\n <table>\n <thead>\n <tr>\n <th *ngFor=\"let column of columns\">\n {{ column }}\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-container\n *ngFor=\"let row of rows; let i = index; trackBy: trackByFn\"\n >\n <tr>\n <ng-container *ngFor=\"let column of columns; let j = index\">\n <td>\n <div [class]=\"column\">\n <ng-container\n *ngIf=\"\n column !== 'delete' &&\n column !== 'validators' &&\n column !== 'properties' &&\n column !== 'type' &&\n column !== 'disabled'\n \"\n [ngTemplateOutlet]=\"getFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: i,\n fieldValue: row[column],\n fieldKey: column,\n parentPath: ''\n }\"\n ></ng-container>\n <ng-container *ngIf=\"column === 'type'\">\n <ng-container\n [ngTemplateOutlet]=\"optionFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: i,\n key: column,\n value: row[column],\n path: '',\n options: memoizedGetOptions(\n i,\n row[column],\n column,\n ''\n )\n }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"column === 'disabled'\">\n <ng-container\n [ngTemplateOutlet]=\"booleanFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: i,\n key: column,\n value: row[column],\n path: '',\n options: memoizedGetOptions(\n i,\n row[column],\n column,\n ''\n )\n }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"column === 'delete'\">\n <button\n (click)=\"\n handleOnClickDeleteField({\n index: i,\n key: row['key']\n })\n \"\n [disabled]=\"rows.length === 1\"\n >\n delete\n </button>\n </ng-container>\n <ng-container *ngIf=\"column === 'validators'\">\n <button\n (click)=\"\n handleOnClickEditValidators({\n index: i,\n key: row['key'],\n type: row['type']\n })\n \"\n >\n edit\n </button>\n </ng-container>\n <ng-container *ngIf=\"column === 'properties'\">\n <button\n (click)=\"\n handleOnClickEditProperties({\n index: i,\n key: row['key'],\n type: row['type']\n })\n \"\n >\n edit\n </button>\n </ng-container>\n </div>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </tbody>\n </table>\n <div class=\"add-field-btn-container\"> </div>\n </div>\n <ng-template #nonFieldsEditorTemplate>\n <div class=\"form-config-no-fields\">\n <pre\n contenteditable=\"true\"\n (keyup)=\"\n handleOnClickSaveActiveFormConfig_NoFields(\n $event.target.innerHTML\n )\n \"\n >\n {{ activeFormConfig_NoFields | json }}\n </pre>\n </div>\n </ng-template>\n </main>\n <footer>\n <button\n *ngIf=\"rows.length > 0\"\n (click)=\"handleOnClickAddField()\"\n >\n add field\n </button>\n <button\n (click)=\"handleOnClickSaveActiveFormConfig()\"\n [class.secondary]=\"!savedConfig\"\n >\n {{ savedConfig ? \"saved\" : \"unsaved\" }}\n </button>\n </footer>\n </ng-container>\n <ng-template #noFormSelectedTemplate>\n <div class=\"no-form-selected disclaimer\">\n <div class=\"icon\"><h1>&#10150;</h1></div>\n <div><p>Please select a form to edit it's fields</p></div>\n </div>\n </ng-template>\n</div>\n\n<!-- Component Dialog -->\n<div\n class=\"modal\"\n [class.error]=\"dialogError === true\"\n *ngIf=\"\n dialogOpen ||\n showFieldConfigValidatorsConfigEditor ||\n showFieldConfigPropertiesConfigEditor\n \"\n [@panelInOut]\n>\n <div class=\"modal-box\">\n <div\n class=\"modal-content\"\n *ngIf=\"dialogOpen\"\n >\n <div class=\"modal-heading\">\n <div class=\"modal-title\">\n {{ activeFormConfig.props.title }}'s Config Preview\n </div>\n <div class=\"modal-actions\">\n <button (click)=\"convertToMinifiedJson()\">minify</button>\n <button (click)=\"convertToCompleteJson()\">full</button>\n <button (click)=\"downloadJSON()\">download</button>\n <button (click)=\"copyToClipboard()\">copy</button>\n <button (click)=\"closeJSONPopup()\">close</button>\n </div>\n </div>\n <div class=\"modal-body\">\n <pre>\n <code>{{ activeFormConfig | json }}</code>\n </pre>\n </div>\n </div>\n <div\n class=\"modal-content\"\n *ngIf=\"showFieldConfigValidatorsConfigEditor\"\n >\n <div class=\"modal-heading\">\n <div class=\"modal-title\">\n {{ activeFormConfig.props.title }}'s Validator Config Editor\n </div>\n <div class=\"modal-actions\">\n <button (click)=\"closeJSONPopup()\">close</button>\n </div>\n </div>\n <div class=\"modal-body\">\n <pre\n contenteditable=\"true\"\n (keyup)=\"\n handleOnInputFieldConfigValidatorsConfig($event.target.innerHTML)\n \"\n >\n {{ this.activeFieldConfigValidatorsConfig | json }}\n </pre>\n </div>\n </div>\n <div\n class=\"modal-content\"\n *ngIf=\"showFieldConfigPropertiesConfigEditor\"\n >\n <div class=\"modal-heading\">\n <div class=\"modal-title\">\n {{ activeFormConfig.props.title }}'s Properties Config Editor\n </div>\n <div class=\"modal-actions\">\n <button (click)=\"closeJSONPopup()\">close</button>\n </div>\n </div>\n <div class=\"modal-body\">\n <pre\n contenteditable=\"true\"\n (keyup)=\"\n handleOnInputFieldConfigPropertiesConfig($event.target.innerHTML)\n \"\n >\n {{ this.activeFieldConfigPropertiesConfig | json }}\n </pre>\n </div>\n </div>\n </div>\n</div>\n<!-- END -->\n\n<!-- Template for rendering different field types -->\n<!-- General Field Template -->\n<ng-template\n #getFieldTemplate\n let-index=\"index\"\n let-value=\"fieldValue\"\n let-key=\"fieldKey\"\n let-path=\"parentPath\"\n>\n <div>\n <ng-container\n [ngTemplateOutlet]=\"\n isObject(value) ? objectFieldTemplate : notObjectFieldTemplate\n \"\n [ngTemplateOutletContext]=\"{\n index: index,\n fieldValue: value,\n fieldKey: key,\n parentPath: path\n }\"\n >\n </ng-container>\n </div>\n</ng-template>\n\n<!-- Object Type Field Template -->\n<ng-template\n #objectFieldTemplate\n let-index=\"index\"\n let-value=\"fieldValue\"\n let-key=\"fieldKey\"\n let-path=\"parentPath\"\n>\n <ng-container *ngFor=\"let item of value | keyvalue\">\n <ng-container\n [ngTemplateOutlet]=\"getFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: index,\n fieldValue: item.value,\n fieldKey: item.key,\n parentPath: path === '' ? key : path + '.' + key\n }\"\n >\n </ng-container>\n </ng-container>\n</ng-template>\n\n<!-- Non Object Type Field Template -->\n<ng-template\n #notObjectFieldTemplate\n let-index=\"index\"\n let-value=\"fieldValue\"\n let-key=\"fieldKey\"\n let-path=\"parentPath\"\n>\n <div>\n <ng-container *ngIf=\"isOptions(index, value, key, path)\">\n <ng-container\n [ngTemplateOutlet]=\"optionFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: index,\n key: key,\n value: value,\n path: path,\n options: memoizedGetOptions(index, value, key, path)\n }\"\n ></ng-container>\n </ng-container>\n <ng-container\n *ngIf=\"!isOptions(index, value, key, path) && isString(value)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n textFieldTemplate;\n context: { index: index, key: key, value: value, path: path }\n \"\n ></ng-container>\n </ng-container>\n <ng-container\n *ngIf=\"!isOptions(index, value, key, path) && isNumber(value)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n numberFieldTemplate;\n context: { index: index, key: key, value: value, path: path }\n \"\n ></ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n<!-- Non Object Type Field :: Options Field Template -->\n<ng-template\n #optionFieldTemplate\n let-index=\"index\"\n let-key=\"key\"\n let-value=\"value\"\n let-path=\"path\"\n let-options=\"options\"\n>\n <div class=\"field-container options\">\n <select\n (change)=\"handleOnInput({ index, key, value: { previous: value, new: $event.target.value }, path })\"\n >\n <option\n *ngFor=\"let option of options\"\n [value]=\"option\"\n [selected]=\"option === value\"\n >{{ option }}</option\n >\n </select>\n </div>\n</ng-template>\n\n<!-- Non Object Type Field :: Boolean Field Template -->\n<ng-template\n #booleanFieldTemplate\n let-index=\"index\"\n let-key=\"key\"\n let-value=\"value\"\n let-path=\"path\"\n>\n <div class=\"field-container checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"value\"\n (change)=\"handleOnInput({ index, key, value: { previous: value, new: $event.target.checked }, path })\"\n />\n </div>\n</ng-template>\n\n<!-- Non Object Type Field :: Text Field Template -->\n<ng-template\n #textFieldTemplate\n let-index=\"index\"\n let-key=\"key\"\n let-value=\"value\"\n let-path=\"path\"\n>\n <div class=\"field-container text\">\n <input\n placeholder=\"Enter {{ key }}\"\n type=\"text\"\n [value]=\"value\"\n (blur)=\"handleOnInput({ index, key, value: { previous: value, new: $event.target.value }, path })\"\n />\n </div>\n</ng-template>\n\n<!-- Non Object Type Field :: Number Field Template -->\n<ng-template\n #numberFieldTemplate\n let-index=\"index\"\n let-key=\"key\"\n let-value=\"value\"\n let-path=\"path\"\n>\n <div class=\"field-container number\">\n <input\n placeholder=\"Enter {{ key }}\"\n type=\"number\"\n [value]=\"value\"\n (blur)=\"handleOnInput({ index, key, value: { previous: value, new: $event.target.value }, path })\"\n />\n </div>\n</ng-template>\n<!-- END -->\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}input[type=text],input[type=number]{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px;box-sizing:border-box;-webkit-appearance:auto!important;appearance:auto!important}input[type=checkbox]{-webkit-appearance:auto!important;appearance:auto!important;width:1rem;height:1rem}select{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px;box-sizing:border-box}textarea{overflow-wrap:anywhere;resize:none;unicode-bidi:embed;white-space:pre-wrap}button{display:inline-block;padding:8px 12px;background-color:#007bff;color:#fff;text-decoration:none;border-radius:4px;border:none;cursor:pointer}button:hover{background-color:#0069d9}button:active{background-color:#0056b3}button:focus{outline:none}button.secondary{padding:7px 11px;border:1px solid #007bff;background-color:#fff;color:#007bff}button.secondary:hover{background-color:#b7daff}button.secondary:active{background-color:#b7daff}button.secondary:focus{outline:none}.field-container{display:flex}.field-container label{color:gray}.field-container.checkbox{flex-direction:row;align-items:center;justify-content:center;padding:8px 12px;margin:auto}.field-container.options,.field-container.number,.field-container.text{flex-direction:column}.disclaimer{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:center;color:#121212;width:100%;height:100%}.disclaimer>*:not(:last-child){margin-bottom:1.5rem}.disclaimer .icon{width:3rem;height:3rem;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}.disclaimer.no-form-selected h1{transform:scaleX(-1)}.disclaimer h1{font-size:5rem;font-weight:100}.disclaimer p{font-size:1rem}\n", ":host{all:unset;position:relative;width:100%;height:100%;overflow:auto}.container{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;height:100%;border:1px solid #ccc}.container header{padding:.5rem;display:flex;flex-direction:row;align-content:center;justify-content:space-between;align-items:center;border-bottom:1px solid #ccc}.container header .header-form-editor-btns{display:flex;flex-direction:row;align-content:center;justify-content:space-between;align-items:center}.container header .header-form-editor-btns>*:not(:last-child){margin-right:1rem}.container main{padding:.5rem;flex-grow:1;overflow:auto;display:flex;flex-direction:row;justify-content:flex-start;align-items:stretch;white-space:nowrap;position:relative}.container main>*:not(:last-child){margin-right:1rem}.container main .no-fields{position:absolute;top:0;left:0;background:white}.container main .form-config-no-fields{overflow:auto;width:100%}.container main .form-config-fields{overflow:auto;width:100%}.container main .form-config-fields .add-field-btn-container{width:100%;text-align:center}.container main .validators,.container main .properties{display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch}.container main .validators>*:not(:last-child),.container main .properties>*:not(:last-child){margin-bottom:.5rem}.container main .input-checkbox-container{display:flex;flex-direction:row}.container footer{padding:.5rem;display:flex;flex-direction:row;justify-content:flex-end;align-items:stretch;border-top:1px solid lightgray}.container footer>*:not(:last-child){margin-right:1rem}.modal{position:absolute;top:0;background-color:#0000004d;width:100%;height:100%;display:flex;justify-content:center;align-items:center;left:0;flex-direction:row}.modal.error{background-color:#ff00004d}.modal-box{width:75%;height:75%;margin:auto;background-color:#fff;border-radius:1rem;box-shadow:#64646f33 0 7px 29px}.modal-content{display:flex;flex-direction:column;align-content:center;justify-content:flex-start;align-items:stretch;width:100%;height:100%}.modal-heading{padding:.5rem 1rem;width:100%;display:flex;flex-direction:row;justify-content:space-between;border-bottom:1px solid lightgray;align-items:center}.modal-title{font-weight:bold;font-size:1rem}.modal-actions{display:flex;flex-direction:row;cursor:pointer}.modal-actions>*:not(:last-child){margin-right:1rem}.modal-body{overflow:auto}.modal-body pre{padding:1rem}pre{white-space:pre-wrap;overflow:auto}table{width:100%;border-collapse:collapse;margin-bottom:20px}table th,table td{padding:8px;text-align:left;border:1px solid #ccc;vertical-align:top}table th{background-color:#f2f2f2}table tr:nth-child(even){background-color:#f9f9f9}table tr:hover{background-color:#eaeaea}\n"], components: [{ type: i1.KwikUILoaderComponent, selector: "kwikui-loader" }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "json": i3.JsonPipe, "keyvalue": i3.KeyValuePipe }, animations: [
322
331
  trigger("panelInOut", [
323
332
  transition(":enter", [
324
333
  style({ transform: "translateY(100%)" }),
@@ -380,6 +389,12 @@ __decorate([
380
389
  __decorate([
381
390
  logMethod
382
391
  ], KwikIDBuilderFormEditorComponent.prototype, "copyToClipboard", null);
392
+ __decorate([
393
+ logMethod
394
+ ], KwikIDBuilderFormEditorComponent.prototype, "convertToMinifiedJson", null);
395
+ __decorate([
396
+ logMethod
397
+ ], KwikIDBuilderFormEditorComponent.prototype, "convertToCompleteJson", null);
383
398
  __decorate([
384
399
  logMethod
385
400
  ], KwikIDBuilderFormEditorComponent.prototype, "downloadJSON", null);
@@ -406,5 +421,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
406
421
  type: Input
407
422
  }], onClickSaveActiveFormConfig: [{
408
423
  type: Output
409
- }], ngOnInit: [], ngOnChanges: [], initFormEditor: [], handleOnClickChangeActiveEditor: [], handleOnClickSaveActiveFormConfig: [], handleOnClickAddField: [], handleOnClickEditValidators: [], handleOnClickEditProperties: [], handleOnInput: [], handleOnInputFieldConfigValidatorsConfig: [], handleOnInputFieldConfigPropertiesConfig: [], handleOnClickDeleteField: [], handleOnClickSaveActiveFormConfig_NoFields: [], handleOnClickPreview: [], toggleLoader: [], closeJSONPopup: [], copyToClipboard: [], downloadJSON: [] } });
410
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci1mb3JtLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rd2lraWQtZm9ybXMvc3JjL2xpYi9idWlsZGVyL2J1aWxkZXItZm9ybS1lZGl0b3IvYnVpbGRlci1mb3JtLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rd2lraWQtZm9ybXMvc3JjL2xpYi9idWlsZGVyL2J1aWxkZXItZm9ybS1lZGl0b3IvYnVpbGRlci1mb3JtLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3JCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM3RSxPQUFPLEVBQ0wsZUFBZSxFQUVoQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLFdBQVcsRUFDWixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFDTCxZQUFZLEVBQ1osdUJBQXVCLEVBQ3ZCLHVCQUF1QixFQUN2QixPQUFPLEVBQ1AsYUFBYSxFQUNk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S2YsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSBcIkBhbmd1bGFyL2FuaW1hdGlvbnNcIjtcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXNcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7XG4gIGNoZWNrT2JqZWN0S2V5RXhpc3RzLFxuICBnZXRPYmplY3REZWVwQ29weSxcbiAgZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aCxcbiAgbG9nTWV0aG9kLFxuICBtZXJnZU9iamVjdHMsXG4gIHNldFZhbHVlVG9PYmplY3RQYXRoXG59IGZyb20gXCJrd2lraWQtdG9vbGtpdFwiO1xuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHsgQ29udmVydGVyIH0gZnJvbSBcIi4uLy4uL3JlbmRlcmVyL2NvbmZpZy1jb252ZXJ0ZXIvY29uZmlnLWNvbnZlcnRlclwiO1xuaW1wb3J0IHtcbiAgRUZvcm1FZGl0b3JUeXBlLFxuICBURm9ybUVkaXRvclR5cGVcbn0gZnJvbSBcIi4vYnVpbGRlci1mb3JtLWVkaXRvci5kZWZpbml0aW9uc1wiO1xuaW1wb3J0IHtcbiAgZmluZE1vZGlmaWVkS2V5cyxcbiAgZ2V0RmllbGRJbmRleCxcbiAgcmVtb3ZlRmllbGRcbn0gZnJvbSBcIi4vYnVpbGRlci1mb3JtLWVkaXRvci5oZWxwZXJcIjtcbmltcG9ydCB7XG4gIEZJRUxEX0NPTkZJRyxcbiAgRklFTERfUFJPUEVSVElFU19DT05GSUcsXG4gIEZJRUxEX1ZBTElEQVRPUlNfQ09ORklHLFxuICBPUFRJT05TLFxuICBUQUJMRV9DT0xVTU5TXG59IGZyb20gXCIuL2J1aWxkZXIuZm9ybS1lZGl0b3IuY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBLd2lrSURGb3JtQnVpbGRlckZvcm1FZGl0b3JTZXJ2aWNlIH0gZnJvbSBcIi4vYnVpbGRlci5mb3JtLWVkaXRvci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBLd2lrVUlMb2FkZXJTZXJ2aWNlIH0gZnJvbSBcImt3aWt1aVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwia3dpa2lkLWJ1aWxkZXItZm9ybS1lZGl0b3JcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9idWlsZGVyLWZvcm0tZWRpdG9yLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi4vc2hhcmVkLnNjc3NcIiwgXCIuL2J1aWxkZXItZm9ybS1lZGl0b3IuY29tcG9uZW50LnNjc3NcIl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcihcInBhbmVsSW5PdXRcIiwgW1xuICAgICAgdHJhbnNpdGlvbihcIjplbnRlclwiLCBbXG4gICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZVkoMTAwJSlcIiB9KSxcbiAgICAgICAgYW5pbWF0ZSgxNTApXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oXCI6bGVhdmVcIiwgW1xuICAgICAgICBhbmltYXRlKDEwMCwgc3R5bGUoeyB0cmFuc2Zvcm06IFwidHJhbnNsYXRlWSgxMDAlKVwiIH0pKVxuICAgICAgXSlcbiAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEt3aWtJREJ1aWxkZXJGb3JtRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvKipcbiAgICogQ29tcG9uZW50cyBJbnB1dHNcbiAgICovXG4gIEBJbnB1dCgpXG4gIGFjdGl2ZUZvcm1Db25maWc6IGFueSA9IHt9O1xuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgT3V0cHV0cyAoRXZlbnQgRW1pdHRlcnMpXG4gICAqL1xuICBAT3V0cHV0KClcbiAgb25DbGlja1NhdmVBY3RpdmVGb3JtQ29uZmlnOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgVmFyaWFibGVzXG4gICAqL1xuICAvLyBGaWVsZCBFZGl0b3IgVmFyaWFibGVzXG4gIHJvd3M6IGFueVtdID0gW107XG4gIGNvbHVtbnM6IGFueVtdID0gVEFCTEVfQ09MVU1OUztcbiAgYWN0aXZlRmllbGRDb25maWdFZGl0aW5nOiBhbnkgPSB7fTtcbiAgc2hvd0ZpZWxkQ29uZmlnVmFsaWRhdG9yc0NvbmZpZ0VkaXRvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBhY3RpdmVGaWVsZENvbmZpZ1ZhbGlkYXRvcnNDb25maWc6IGFueSA9IHt9O1xuICBzaG93RmllbGRDb25maWdQcm9wZXJ0aWVzQ29uZmlnRWRpdG9yOiBib29sZWFuID0gZmFsc2U7XG4gIGFjdGl2ZUZpZWxkQ29uZmlnUHJvcGVydGllc0NvbmZpZzogYW55ID0ge307XG5cbiAgLy8gR2VuZXJhbCBFZGl0b3IgVmFyaWFibGVzXG4gIGVkaXRvclR5cGVPcHRpb25zOiBhbnlbXSA9IFtcbiAgICB7IGtleTogXCJGSUVMRFNcIiwgbGFiZWw6IFwiZmllbGRzXCIgfSxcbiAgICB7IGtleTogXCJOT05fRklFTERTXCIsIGxhYmVsOiBcIm90aGVyIGNvbmZpZ1wiIH1cbiAgXTtcbiAgYWN0aXZlRWRpdG9yVHlwZTogVEZvcm1FZGl0b3JUeXBlID0gRUZvcm1FZGl0b3JUeXBlLkZJRUxEUztcbiAgYWN0aXZlRm9ybUNvbmZpZ19GaWVsZHM6IGFueVtdID0gW107XG4gIGFjdGl2ZUZvcm1Db25maWdfTm9GaWVsZHM6IGFueSA9IHt9O1xuICBzaG93Q29uZmlnUHJldmlldzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEZvcm1zXG4gIGZvcm1Hcm91cDogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgLy8gRm9ybSBTYXZlZCBTdGF0ZVxuICBzYXZlZENvbmZpZzogYm9vbGVhbiA9IGZhbHNlO1xuICBtYXJrU2F2ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zYXZlZENvbmZpZyA9IHRydWU7XG4gIH1cbiAgbWFya1Vuc2F2ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zYXZlZENvbmZpZyA9IGZhbHNlO1xuICB9XG5cbiAgLy8gRGlhbG9nXG4gIGRpYWxvZ09wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0RpYWxvZygpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ09wZW4gPSB0cnVlO1xuICB9XG4gIGhpZGVEaWFsb2coKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dPcGVuID0gZmFsc2U7XG4gIH1cbiAgZGlhbG9nRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0RpYWxvZ0Vycm9yKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nRXJyb3IgPSB0cnVlO1xuICB9XG4gIGhpZGVEaWFsb2dFcnJvcigpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ0Vycm9yID0gZmFsc2U7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbG9hZGVyU2VydmljZTogS3dpa1VJTG9hZGVyU2VydmljZSxcbiAgICBwdWJsaWMga3dpa2lkQnVpbGRlckZvcm1FZGl0b3JTZXJ2aWNlOiBLd2lrSURGb3JtQnVpbGRlckZvcm1FZGl0b3JTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogQW5ndWxhciBMaWZlY3ljbGUgTWV0aG9kc1xuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgQGxvZ01ldGhvZFxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgdmVyaWZ5Q2hhbmdlID0gKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hhbmdlcywga2V5KSAmJiAhY2hhbmdlc1trZXldLmZpcnN0Q2hhbmdlO1xuICAgIH07XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImFjdGl2ZUZvcm1Db25maWdcIikpIHtcbiAgICAgIGxldCBmb3JtQ29uZmlnID0gbmV3IENvbnZlcnRlcigpLmNvbnZlcnRGb3JtQ29uZmlnKFxuICAgICAgICBjaGFuZ2VzLmFjdGl2ZUZvcm1Db25maWcuY3VycmVudFZhbHVlXG4gICAgICApO1xuICAgICAgZm9ybUNvbmZpZyA9IG5ldyBDb252ZXJ0ZXIoKS51cGRhdGVGb3JtQ29uZmlnUHJvcGVydGllcyhmb3JtQ29uZmlnKTtcbiAgICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZyA9IGZvcm1Db25maWc7XG5cbiAgICAgIHRoaXMuaW5pdEZvcm1FZGl0b3IodGhpcy5hY3RpdmVGb3JtQ29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGluaXRGb3JtRWRpdG9yKGFjdGl2ZUZvcm1Db25maWc6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudG9nZ2xlTG9hZGVyKHRydWUpO1xuXG4gICAgdGhpcy5hY3RpdmVGb3JtQ29uZmlnX0ZpZWxkcyA9IGdldE9iamVjdERlZXBDb3B5KGFjdGl2ZUZvcm1Db25maWcuZmllbGRzKTtcbiAgICB0aGlzLmFjdGl2ZUZvcm1Db25maWdfTm9GaWVsZHMgPSBnZXRPYmplY3REZWVwQ29weShhY3RpdmVGb3JtQ29uZmlnKTtcbiAgICBkZWxldGUgdGhpcy5hY3RpdmVGb3JtQ29uZmlnX05vRmllbGRzLmZpZWxkcztcblxuICAgIHRoaXMucm93cyA9IHRoaXMuYWN0aXZlRm9ybUNvbmZpZ19GaWVsZHMubWFwKChmaWVsZDogYW55KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgbGFiZWw6IGZpZWxkLmxhYmVsLFxuICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICBkaXNhYmxlZDogZmllbGQuZGlzYWJsZWQsXG4gICAgICAgIHZhbGlkYXRvcnM6IHsgLi4uRklFTERfVkFMSURBVE9SU19DT05GSUcsIC4uLmZpZWxkLnZhbGlkYXRvcnMgfSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIC4uLkZJRUxEX1BST1BFUlRJRVNfQ09ORklHW2ZpZWxkLnR5cGVdLFxuICAgICAgICAgIC4uLmZpZWxkLnByb3BlcnRpZXNcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5rd2lraWRCdWlsZGVyRm9ybUVkaXRvclNlcnZpY2UuY3JlYXRlTmVzdGVkRm9ybUdyb3VwKFxuICAgICAgdGhpcy5yb3dzXG4gICAgKTtcblxuICAgIHRoaXMudG9nZ2xlTG9hZGVyKGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmFsIEVkaXRvciBDb21tb24gTWV0aG9kc1xuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrQ2hhbmdlQWN0aXZlRWRpdG9yKGVkaXRvclR5cGU6IHN0cmluZykge1xuICAgIHRoaXMuYWN0aXZlRWRpdG9yVHlwZSA9IGVkaXRvclR5cGUgYXMgVEZvcm1FZGl0b3JUeXBlO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrU2F2ZUFjdGl2ZUZvcm1Db25maWcoKSB7XG4gICAgY29uc3QgZmllbGRzID0gW107XG5cbiAgICBmb3IgKGxldCBmaWVsZCBvZiBPYmplY3QudmFsdWVzKFxuICAgICAgZ2V0T2JqZWN0RGVlcENvcHkodGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSlcbiAgICApKSB7XG4gICAgICBmaWVsZHMucHVzaChcbiAgICAgICAgc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgZmluZE1vZGlmaWVkS2V5cyhGSUVMRF9DT05GSUdbZmllbGRbXCJ0eXBlXCJdXSwgZmllbGQsIFwiXCIpLFxuICAgICAgICAgIFwidHlwZVwiLFxuICAgICAgICAgIGZpZWxkW1widHlwZVwiXVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZyA9IG1lcmdlT2JqZWN0cyhcbiAgICAgIGdldE9iamVjdERlZXBDb3B5KHRoaXMuYWN0aXZlRm9ybUNvbmZpZ19Ob0ZpZWxkcyksXG4gICAgICB7XG4gICAgICAgIGZpZWxkczogZmllbGRzXG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMubWFya1NhdmVkKCk7XG5cbiAgICB0aGlzLm9uQ2xpY2tTYXZlQWN0aXZlRm9ybUNvbmZpZy5lbWl0KHRoaXMuYWN0aXZlRm9ybUNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogRmllbGRzIEVkaXRvciBSZWxhdGVkIE1ldGhvZHNcbiAgICovXG4gIC8qKlxuICAgKiBNZXRob2RzIHRvIGhhbmRsZSBhZGRpdGlvbiBvZiBuZXcgZmllbGRcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0FkZEZpZWxkKCkge1xuICAgIHRoaXMubWFya1Vuc2F2ZWQoKTtcbiAgICB0aGlzLnRvZ2dsZUxvYWRlcih0cnVlKTtcblxuICAgIGNvbnN0IG5ld0luZGV4ID0gdGhpcy5yb3dzLmxlbmd0aDtcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IGdldE9iamVjdERlZXBDb3B5KFxuICAgICAgbWVyZ2VPYmplY3RzKEZJRUxEX0NPTkZJRy50ZXh0LCB7XG4gICAgICAgIGtleTogU3RyaW5nKG5ld0luZGV4KVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5yb3dzW25ld0luZGV4XSA9IGZpZWxkQ29uZmlnO1xuXG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woZmllbGRDb25maWcpO1xuXG4gICAgdGhpcy5mb3JtR3JvdXAuYWRkQ29udHJvbChTdHJpbmcobmV3SW5kZXgpLCBmb3JtQ29udHJvbCk7XG5cbiAgICB0aGlzLnRvZ2dsZUxvYWRlcihmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kcyB0byBoYW5kbGUgZWRpdGluZyBvZiBmaWVsZCBrZXktdmFsdWVzXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tFZGl0VmFsaWRhdG9ycyhlOiBhbnkpIHtcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKClbZS5pbmRleF07XG5cbiAgICBjb25zdCBmaWVsZENvbmZpZ1ZhbGlkYXRvcnMgPSBmaWVsZENvbmZpZ1tcInZhbGlkYXRvcnNcIl07XG5cbiAgICB0aGlzLmFjdGl2ZUZpZWxkQ29uZmlnVmFsaWRhdG9yc0NvbmZpZyA9IG1lcmdlT2JqZWN0cyhcbiAgICAgIEZJRUxEX1ZBTElEQVRPUlNfQ09ORklHLFxuICAgICAgZmllbGRDb25maWdWYWxpZGF0b3JzXG4gICAgKTtcblxuICAgIHRoaXMuc2hvd0ZpZWxkQ29uZmlnVmFsaWRhdG9yc0NvbmZpZ0VkaXRvciA9IHRydWU7XG4gICAgdGhpcy5hY3RpdmVGaWVsZENvbmZpZ0VkaXRpbmcgPSBmaWVsZENvbmZpZztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0VkaXRQcm9wZXJ0aWVzKGU6IGFueSkge1xuICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKVtlLmluZGV4XTtcblxuICAgIGNvbnN0IGZpZWxkQ29uZmlnUHJvcGVydGllcyA9IGZpZWxkQ29uZmlnW1wicHJvcGVydGllc1wiXTtcblxuICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdQcm9wZXJ0aWVzQ29uZmlnID0gbWVyZ2VPYmplY3RzKFxuICAgICAgRklFTERfUFJPUEVSVElFU19DT05GSUdbZS50eXBlXSxcbiAgICAgIGZpZWxkQ29uZmlnUHJvcGVydGllc1xuICAgICk7XG5cbiAgICB0aGlzLnNob3dGaWVsZENvbmZpZ1Byb3BlcnRpZXNDb25maWdFZGl0b3IgPSB0cnVlO1xuICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdFZGl0aW5nID0gZmllbGRDb25maWc7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kcyB0byBoYW5kbGUgY2hhbmdlIGluIGlucHV0IHZhbHVlcyBmb3IgRmllbGRzIEtleXNcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25JbnB1dChlOiBhbnkpIHtcbiAgICB0aGlzLm1hcmtVbnNhdmVkKCk7XG5cbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKClbZS5pbmRleF07XG4gICAgY29uc3QgZmluYWxQYXRoID0gZS5wYXRoICE9PSBcIlwiID8gYCR7ZS5wYXRofS4ke2Uua2V5fWAgOiBlLmtleTtcblxuICAgIGlmIChmaW5hbFBhdGguaW5jbHVkZXMoXCJkaXNhYmxlZFwiKSkge1xuICAgICAgZS52YWx1ZS5uZXcgPSBCb29sZWFuKGUudmFsdWUubmV3KTtcbiAgICB9XG5cbiAgICBsZXQgbmV3RmllbGRDb25maWcgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgIGdldE9iamVjdERlZXBDb3B5KGZpZWxkQ29uZmlnKSxcbiAgICAgIGZpbmFsUGF0aCxcbiAgICAgIGUudmFsdWUubmV3XG4gICAgKTtcblxuICAgIGlmIChmaW5hbFBhdGguaW5jbHVkZXMoXCJ0eXBlXCIpKSB7XG4gICAgICB0aGlzLnRvZ2dsZUxvYWRlcih0cnVlKTtcblxuICAgICAgbmV3RmllbGRDb25maWcgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgbmV3RmllbGRDb25maWcsXG4gICAgICAgIFwidmFsaWRhdG9yc1wiLFxuICAgICAgICBGSUVMRF9WQUxJREFUT1JTX0NPTkZJR1xuICAgICAgKTtcblxuICAgICAgbmV3RmllbGRDb25maWcgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgbmV3RmllbGRDb25maWcsXG4gICAgICAgIFwicHJvcGVydGllc1wiLFxuICAgICAgICBGSUVMRF9QUk9QRVJUSUVTX0NPTkZJR1tuZXdGaWVsZENvbmZpZy50eXBlXVxuICAgICAgKTtcblxuICAgICAgdGhpcy50b2dnbGVMb2FkZXIoZmFsc2UpO1xuICAgIH1cblxuICAgIHRoaXMucm93cyA9IHRoaXMucm93cy5tYXAoKHJvdykgPT4ge1xuICAgICAgaWYgKHJvdy5rZXkgPT09IGZpZWxkQ29uZmlnLmtleSkge1xuICAgICAgICByZXR1cm4gZ2V0T2JqZWN0RGVlcENvcHkobmV3RmllbGRDb25maWcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldE9iamVjdERlZXBDb3B5KHJvdyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tlLmluZGV4XS5zZXRWYWx1ZShuZXdGaWVsZENvbmZpZywge1xuICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbklucHV0RmllbGRDb25maWdWYWxpZGF0b3JzQ29uZmlnKGU6IGFueSkge1xuICAgIHRoaXMubWFya1Vuc2F2ZWQoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmhpZGVEaWFsb2dFcnJvcigpO1xuXG4gICAgICBjb25zdCB2YWxpZGF0b3JDb25maWcgPSBKU09OLnBhcnNlKGUpO1xuXG4gICAgICBjb25zdCByb3dJbmRleCA9IGdldEZpZWxkSW5kZXgoXG4gICAgICAgIHRoaXMucm93cyxcbiAgICAgICAgdGhpcy5hY3RpdmVGaWVsZENvbmZpZ0VkaXRpbmcua2V5XG4gICAgICApO1xuICAgICAgaWYgKHJvd0luZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLnJvd3Nbcm93SW5kZXhdLnZhbGlkYXRvcnMgPSB2YWxpZGF0b3JDb25maWc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdFZGl0aW5nID0gbWVyZ2VPYmplY3RzKFxuICAgICAgICB0aGlzLmFjdGl2ZUZpZWxkQ29uZmlnRWRpdGluZyxcbiAgICAgICAgeyB2YWxpZGF0b3JzOiB2YWxpZGF0b3JDb25maWcgfVxuICAgICAgKTtcblxuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbcm93SW5kZXhdLnNldFZhbHVlKFxuICAgICAgICB0aGlzLmFjdGl2ZUZpZWxkQ29uZmlnRWRpdGluZyxcbiAgICAgICAge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2hvd0RpYWxvZ0Vycm9yKCk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbklucHV0RmllbGRDb25maWdQcm9wZXJ0aWVzQ29uZmlnKGU6IGFueSkge1xuICAgIHRoaXMubWFya1Vuc2F2ZWQoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmhpZGVEaWFsb2dFcnJvcigpO1xuXG4gICAgICBjb25zdCBwcm9wZXJ0aWVzQ29uZmlnID0gSlNPTi5wYXJzZShlKTtcblxuICAgICAgY29uc3Qgcm93SW5kZXggPSBnZXRGaWVsZEluZGV4KFxuICAgICAgICB0aGlzLnJvd3MsXG4gICAgICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdFZGl0aW5nLmtleVxuICAgICAgKTtcbiAgICAgIGlmIChyb3dJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5yb3dzW3Jvd0luZGV4XS5wcm9wZXJ0aWVzID0gcHJvcGVydGllc0NvbmZpZztcbiAgICAgIH1cblxuICAgICAgdGhpcy5hY3RpdmVGaWVsZENvbmZpZ0VkaXRpbmcgPSBtZXJnZU9iamVjdHMoXG4gICAgICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdFZGl0aW5nLFxuICAgICAgICB7IHByb3BlcnRpZXM6IHByb3BlcnRpZXNDb25maWcgfVxuICAgICAgKTtcblxuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbcm93SW5kZXhdLnNldFZhbHVlKFxuICAgICAgICB0aGlzLmFjdGl2ZUZpZWxkQ29uZmlnRWRpdGluZyxcbiAgICAgICAge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2hvd0RpYWxvZ0Vycm9yKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZHMgdG8gaGFuZGxlIGRlbGV0aW9uIG9mIGZpZWxkXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tEZWxldGVGaWVsZChlOiBhbnkpIHtcbiAgICB0aGlzLm1hcmtVbnNhdmVkKCk7XG5cbiAgICB0aGlzLnJvd3MgPSByZW1vdmVGaWVsZCh0aGlzLnJvd3MsIGUua2V5KTtcblxuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5rd2lraWRCdWlsZGVyRm9ybUVkaXRvclNlcnZpY2UuY3JlYXRlTmVzdGVkRm9ybUdyb3VwKFxuICAgICAgdGhpcy5yb3dzXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb24gRmllbGRzIEVkaXRvciBSZWxhdGVkIE1ldGhvZHNcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja1NhdmVBY3RpdmVGb3JtQ29uZmlnX05vRmllbGRzKGU6IGFueSkge1xuICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZ19Ob0ZpZWxkcyA9IEpTT04ucGFyc2UoZSk7XG4gIH1cblxuICAvKipcbiAgICogT3RoZXIgQ29tcG9uZW50IE1ldGhvZHNcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja1ByZXZpZXcoKSB7XG4gICAgdGhpcy5zaG93RGlhbG9nKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHRvZ2dsZUxvYWRlcihsb2FkZXIpIHtcbiAgICBpZiAobG9hZGVyKSB7XG4gICAgICB0aGlzLmxvYWRlclNlcnZpY2Uuc2hvdyh7XG4gICAgICAgIGZ1bGxzY3JlZW46IHRydWUsXG4gICAgICAgIGxvYWRlclRleHQ6IFwiUGxlYXNlIHdhaXRcIlxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9hZGVyU2VydmljZS5oaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBjbG9zZUpTT05Qb3B1cCgpIHtcbiAgICB0aGlzLmhpZGVEaWFsb2coKTtcbiAgICB0aGlzLnNob3dGaWVsZENvbmZpZ1ZhbGlkYXRvcnNDb25maWdFZGl0b3IgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dGaWVsZENvbmZpZ1Byb3BlcnRpZXNDb25maWdFZGl0b3IgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdGhlciBIZWxwZXIgTWV0aG9kc1xuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBjb3B5VG9DbGlwYm9hcmQoKSB7XG4gICAgdGhpcy5rd2lraWRCdWlsZGVyRm9ybUVkaXRvclNlcnZpY2UuY29weVRvQ2xpcGJvYXJkKHRoaXMuYWN0aXZlRm9ybUNvbmZpZyk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGRvd25sb2FkSlNPTigpIHtcbiAgICB0aGlzLmt3aWtpZEJ1aWxkZXJGb3JtRWRpdG9yU2VydmljZS5kb3dubG9hZEpTT04odGhpcy5hY3RpdmVGb3JtQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNaXNjIE1ldGhvZHNcbiAgICovXG4gIGdldE9wdGlvbnMoaW5kZXgsIHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICBpZiAocGF0aC5pbmNsdWRlcyhcInByb3BlcnRpZXNcIikpIHtcbiAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IHRoaXMucm93c1tpbmRleF0udHlwZTtcblxuICAgICAgY29uc3QgZmluYWxQYXRoID0gYCR7cGF0aH1bJyR7ZmllbGRUeXBlfSddLiR7a2V5fWA7XG5cbiAgICAgIHJldHVybiBnZXRPYmplY3RWYWx1ZUZyb21QYXRoKE9QVElPTlMsIGZpbmFsUGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpbmFsUGF0aCA9IHBhdGggIT09IFwiXCIgPyBgJHtwYXRofS4ke2tleX1gIDoga2V5O1xuXG4gICAgICByZXR1cm4gZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aChPUFRJT05TLCBmaW5hbFBhdGgpO1xuICAgIH1cbiAgfVxuICBtZW1vaXplZEdldE9wdGlvbnMgPSBfLm1lbW9pemUodGhpcy5nZXRPcHRpb25zKTtcblxuICBpc09wdGlvbnMoaW5kZXgsIHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICBpZiAocGF0aC5pbmNsdWRlcyhcInByb3BlcnRpZXNcIikpIHtcbiAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IHRoaXMucm93c1tpbmRleF0udHlwZTtcblxuICAgICAgY29uc3QgZmluYWxQYXRoID0gYCR7cGF0aH1bJyR7ZmllbGRUeXBlfSddLiR7a2V5fWA7XG5cbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGdldE9iamVjdFZhbHVlRnJvbVBhdGgoT1BUSU9OUywgZmluYWxQYXRoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpbmFsUGF0aCA9IHBhdGggIT09IFwiXCIgPyBgJHtwYXRofS4ke2tleX1gIDoga2V5O1xuXG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShnZXRPYmplY3RWYWx1ZUZyb21QYXRoKE9QVElPTlMsIGZpbmFsUGF0aCkpO1xuICAgIH1cbiAgfVxuXG4gIGlzQm9vbGVhbih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCI7XG4gIH1cblxuICBpc1N0cmluZyh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIjtcbiAgfVxuXG4gIGlzTnVtYmVyKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xuICB9XG5cbiAgaXNPYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQW5ndWxhciBTcGVjaWZpYyBNZXRob2RzXG4gICAqL1xuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogYW55KTogYW55IHtcbiAgICBjb25zdCBrZXkgPSBpdGVtPy5rZXkgfHwgXCJcIjtcbiAgICBjb25zdCB2YWx1ZSA9IGl0ZW0/LnZhbHVlIHx8IFwiXCI7XG5cbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBgJHtTdHJpbmcoaW5kZXgpfV8ke2l0ZW19XyR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke1N0cmluZyhpbmRleCl9XyR7a2V5fV8ke3ZhbHVlfV8ke25ldyBEYXRlKCkuZ2V0VGltZSgpfWA7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tIENvbXBvbmVudCBMb2FkZXIgLS0+XG48a3dpa3VpLWxvYWRlclxuPjwva3dpa3VpLWxvYWRlcj5cblxuPCEtLSBDb21wb25lbnQgTWFpbiBWaWV3IC0tPlxuPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlRm9ybUNvbmZpZzsgZWxzZSBub0Zvcm1TZWxlY3RlZFRlbXBsYXRlXCI+XG4gICAgPGhlYWRlcj5cbiAgICAgIDxkaXY+XG4gICAgICAgICZuYnNwO0VkaXRpbmcgQ29uZmlnIG9mIEZvcm06IDxiPnt7IGFjdGl2ZUZvcm1Db25maWcucHJvcHMudGl0bGUgfX08L2I+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItZm9ybS1lZGl0b3ItYnRuc1wiPlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJoYW5kbGVPbkNsaWNrUHJldmlldygpXCI+cHJldmlldzwvYnV0dG9uPlxuICAgICAgICA8ZGl2PkVkaXRvciZuYnNwO1R5cGU6PC9kaXY+XG4gICAgICAgIDxzZWxlY3QgKGNoYW5nZSk9XCJoYW5kbGVPbkNsaWNrQ2hhbmdlQWN0aXZlRWRpdG9yKCRldmVudC50YXJnZXQudmFsdWUpXCI+XG4gICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBlZGl0b3JUeXBlT3B0aW9uc1wiXG4gICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLmtleVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRdPVwib3B0aW9uLmtleSA9PT0gYWN0aXZlRWRpdG9yVHlwZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XG4gICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9oZWFkZXI+XG4gICAgPG1haW4+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb25maWctZmllbGRzXCJcbiAgICAgICAgKm5nSWY9XCJhY3RpdmVFZGl0b3JUeXBlID09ICdGSUVMRFMnOyBlbHNlIG5vbkZpZWxkc0VkaXRvclRlbXBsYXRlXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd3MubGVuZ3RoIDw9IDBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibm8tZmllbGRzIGRpc2NsYWltZXJcIj5cbiAgICAgICAgICAgIDxkaXY+PHA+UGxlYXNlIGFkZCBmaWVsZCB0byBnZXQgc3RhcnRlZDwvcD48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCI+PGgxPiZwbHVzOzwvaDE+PC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJoYW5kbGVPbkNsaWNrQWRkRmllbGQoKVwiPmFkZCBmaWVsZDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPHRhYmxlPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uc1wiPlxuICAgICAgICAgICAgICAgIHt7IGNvbHVtbiB9fVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Rm5cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IGxldCBqID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uICE9PSAnZGVsZXRlJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4gIT09ICd2YWxpZGF0b3JzJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4gIT09ICdwcm9wZXJ0aWVzJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4gIT09ICd0eXBlJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4gIT09ICdkaXNhYmxlZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRGaWVsZFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbHVlOiByb3dbY29sdW1uXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRLZXk6IGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50UGF0aDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uID09PSAndHlwZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uRmllbGRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJvd1tjb2x1bW5dLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IG1lbW9pemVkR2V0T3B0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uID09PSAnZGlzYWJsZWQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJvb2xlYW5GaWVsZFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcm93W2NvbHVtbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogbWVtb2l6ZWRHZXRPcHRpb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW5dLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4gPT09ICdkZWxldGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPbkNsaWNrRGVsZXRlRmllbGQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHJvd1sna2V5J11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicm93cy5sZW5ndGggPT09IDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4gPT09ICd2YWxpZGF0b3JzJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT25DbGlja0VkaXRWYWxpZGF0b3JzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiByb3dbJ2tleSddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogcm93Wyd0eXBlJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uID09PSAncHJvcGVydGllcydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9uQ2xpY2tFZGl0UHJvcGVydGllcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogcm93WydrZXknXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHJvd1sndHlwZSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZGQtZmllbGQtYnRuLWNvbnRhaW5lclwiPiA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNub25GaWVsZHNFZGl0b3JUZW1wbGF0ZT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29uZmlnLW5vLWZpZWxkc1wiPlxuICAgICAgICAgIDxwcmVcbiAgICAgICAgICAgIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIlxuICAgICAgICAgICAgKGtleXVwKT1cIlxuICAgICAgICAgICAgICBoYW5kbGVPbkNsaWNrU2F2ZUFjdGl2ZUZvcm1Db25maWdfTm9GaWVsZHMoXG4gICAgICAgICAgICAgICAgJGV2ZW50LnRhcmdldC5pbm5lckhUTUxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBhY3RpdmVGb3JtQ29uZmlnX05vRmllbGRzIHwganNvbiB9fVxuICAgICAgICAgIDwvcHJlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9tYWluPlxuICAgIDxmb290ZXI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwicm93cy5sZW5ndGggPiAwXCJcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZU9uQ2xpY2tBZGRGaWVsZCgpXCJcbiAgICAgID5cbiAgICAgICAgYWRkIGZpZWxkXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZU9uQ2xpY2tTYXZlQWN0aXZlRm9ybUNvbmZpZygpXCJcbiAgICAgICAgW2NsYXNzLnNlY29uZGFyeV09XCIhc2F2ZWRDb25maWdcIlxuICAgICAgPlxuICAgICAgICB7eyBzYXZlZENvbmZpZyA/IFwic2F2ZWRcIiA6IFwidW5zYXZlZFwiIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Zvb3Rlcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjbm9Gb3JtU2VsZWN0ZWRUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwibm8tZm9ybS1zZWxlY3RlZCBkaXNjbGFpbWVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaWNvblwiPjxoMT4mIzEwMTUwOzwvaDE+PC9kaXY+XG4gICAgICA8ZGl2PjxwPlBsZWFzZSBzZWxlY3QgYSBmb3JtIHRvIGVkaXQgaXQncyBmaWVsZHM8L3A+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cblxuPCEtLSBDb21wb25lbnQgRGlhbG9nIC0tPlxuPGRpdlxuICBjbGFzcz1cIm1vZGFsXCJcbiAgW2NsYXNzLmVycm9yXT1cImRpYWxvZ0Vycm9yID09PSB0cnVlXCJcbiAgKm5nSWY9XCJcbiAgICBkaWFsb2dPcGVuIHx8XG4gICAgc2hvd0ZpZWxkQ29uZmlnVmFsaWRhdG9yc0NvbmZpZ0VkaXRvciB8fFxuICAgIHNob3dGaWVsZENvbmZpZ1Byb3BlcnRpZXNDb25maWdFZGl0b3JcbiAgXCJcbiAgW0BwYW5lbEluT3V0XVxuPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm94XCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJtb2RhbC1jb250ZW50XCJcbiAgICAgICpuZ0lmPVwiZGlhbG9nT3BlblwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRpbmdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+XG4gICAgICAgICAge3sgYWN0aXZlRm9ybUNvbmZpZy5wcm9wcy50aXRsZSB9fSdzIENvbmZpZyBQcmV2aWV3XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImRvd25sb2FkSlNPTigpXCI+ZG93bmxvYWQ8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjb3B5VG9DbGlwYm9hcmQoKVwiPmNvcHk8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjbG9zZUpTT05Qb3B1cCgpXCI+Y2xvc2U8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgIDxwcmU+XG4gICAgICAgICAgPGNvZGU+e3sgYWN0aXZlRm9ybUNvbmZpZyB8IGpzb24gfX08L2NvZGU+XG4gICAgICAgIDwvcHJlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJtb2RhbC1jb250ZW50XCJcbiAgICAgICpuZ0lmPVwic2hvd0ZpZWxkQ29uZmlnVmFsaWRhdG9yc0NvbmZpZ0VkaXRvclwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRpbmdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+XG4gICAgICAgICAge3sgYWN0aXZlRm9ybUNvbmZpZy5wcm9wcy50aXRsZSB9fSdzIFZhbGlkYXRvciBDb25maWcgRWRpdG9yXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsb3NlSlNPTlBvcHVwKClcIj5jbG9zZTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgPHByZVxuICAgICAgICAgIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIlxuICAgICAgICAgIChrZXl1cCk9XCJcbiAgICAgICAgICAgIGhhbmRsZU9uSW5wdXRGaWVsZENvbmZpZ1ZhbGlkYXRvcnNDb25maWcoJGV2ZW50LnRhcmdldC5pbm5lckhUTUwpXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHRoaXMuYWN0aXZlRmllbGRDb25maWdWYWxpZGF0b3JzQ29uZmlnIHwganNvbiB9fVxuICAgICAgICA8L3ByZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibW9kYWwtY29udGVudFwiXG4gICAgICAqbmdJZj1cInNob3dGaWVsZENvbmZpZ1Byb3BlcnRpZXNDb25maWdFZGl0b3JcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkaW5nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC10aXRsZVwiPlxuICAgICAgICAgIHt7IGFjdGl2ZUZvcm1Db25maWcucHJvcHMudGl0bGUgfX0ncyBQcm9wZXJ0aWVzIENvbmZpZyBFZGl0b3JcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1hY3Rpb25zXCI+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2VKU09OUG9wdXAoKVwiPmNsb3NlPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICA8cHJlXG4gICAgICAgICAgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXG4gICAgICAgICAgKGtleXVwKT1cIlxuICAgICAgICAgICAgaGFuZGxlT25JbnB1dEZpZWxkQ29uZmlnUHJvcGVydGllc0NvbmZpZygkZXZlbnQudGFyZ2V0LmlubmVySFRNTClcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgdGhpcy5hY3RpdmVGaWVsZENvbmZpZ1Byb3BlcnRpZXNDb25maWcgfCBqc29uIH19XG4gICAgICAgIDwvcHJlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG48IS0tIEVORCAtLT5cblxuPCEtLSBUZW1wbGF0ZSBmb3IgcmVuZGVyaW5nIGRpZmZlcmVudCBmaWVsZCB0eXBlcyAtLT5cbjwhLS0gR2VuZXJhbCBGaWVsZCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZVxuICAjZ2V0RmllbGRUZW1wbGF0ZVxuICBsZXQtaW5kZXg9XCJpbmRleFwiXG4gIGxldC12YWx1ZT1cImZpZWxkVmFsdWVcIlxuICBsZXQta2V5PVwiZmllbGRLZXlcIlxuICBsZXQtcGF0aD1cInBhcmVudFBhdGhcIlxuPlxuICA8ZGl2PlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIlxuICAgICAgICBpc09iamVjdCh2YWx1ZSkgPyBvYmplY3RGaWVsZFRlbXBsYXRlIDogbm90T2JqZWN0RmllbGRUZW1wbGF0ZVxuICAgICAgXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgZmllbGRWYWx1ZTogdmFsdWUsXG4gICAgICAgIGZpZWxkS2V5OiBrZXksXG4gICAgICAgIHBhcmVudFBhdGg6IHBhdGhcbiAgICAgIH1cIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIE9iamVjdCBUeXBlIEZpZWxkIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlXG4gICNvYmplY3RGaWVsZFRlbXBsYXRlXG4gIGxldC1pbmRleD1cImluZGV4XCJcbiAgbGV0LXZhbHVlPVwiZmllbGRWYWx1ZVwiXG4gIGxldC1rZXk9XCJmaWVsZEtleVwiXG4gIGxldC1wYXRoPVwicGFyZW50UGF0aFwiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdmFsdWUgfCBrZXl2YWx1ZVwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdldEZpZWxkVGVtcGxhdGVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBmaWVsZFZhbHVlOiBpdGVtLnZhbHVlLFxuICAgICAgICBmaWVsZEtleTogaXRlbS5rZXksXG4gICAgICAgIHBhcmVudFBhdGg6IHBhdGggPT09ICcnID8ga2V5IDogcGF0aCArICcuJyArIGtleVxuICAgICAgfVwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gTm9uIE9iamVjdCBUeXBlIEZpZWxkIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlXG4gICNub3RPYmplY3RGaWVsZFRlbXBsYXRlXG4gIGxldC1pbmRleD1cImluZGV4XCJcbiAgbGV0LXZhbHVlPVwiZmllbGRWYWx1ZVwiXG4gIGxldC1rZXk9XCJmaWVsZEtleVwiXG4gIGxldC1wYXRoPVwicGFyZW50UGF0aFwiXG4+XG4gIDxkaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzT3B0aW9ucyhpbmRleCwgdmFsdWUsIGtleSwgcGF0aClcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uRmllbGRUZW1wbGF0ZVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgIG9wdGlvbnM6IG1lbW9pemVkR2V0T3B0aW9ucyhpbmRleCwgdmFsdWUsIGtleSwgcGF0aClcbiAgICAgICAgfVwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCIhaXNPcHRpb25zKGluZGV4LCB2YWx1ZSwga2V5LCBwYXRoKSAmJiBpc1N0cmluZyh2YWx1ZSlcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICB0ZXh0RmllbGRUZW1wbGF0ZTtcbiAgICAgICAgICBjb250ZXh0OiB7IGluZGV4OiBpbmRleCwga2V5OiBrZXksIHZhbHVlOiB2YWx1ZSwgcGF0aDogcGF0aCB9XG4gICAgICAgIFwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCIhaXNPcHRpb25zKGluZGV4LCB2YWx1ZSwga2V5LCBwYXRoKSAmJiBpc051bWJlcih2YWx1ZSlcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICBudW1iZXJGaWVsZFRlbXBsYXRlO1xuICAgICAgICAgIGNvbnRleHQ6IHsgaW5kZXg6IGluZGV4LCBrZXk6IGtleSwgdmFsdWU6IHZhbHVlLCBwYXRoOiBwYXRoIH1cbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIE5vbiBPYmplY3QgVHlwZSBGaWVsZCA6OiBPcHRpb25zIEZpZWxkIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlXG4gICNvcHRpb25GaWVsZFRlbXBsYXRlXG4gIGxldC1pbmRleD1cImluZGV4XCJcbiAgbGV0LWtleT1cImtleVwiXG4gIGxldC12YWx1ZT1cInZhbHVlXCJcbiAgbGV0LXBhdGg9XCJwYXRoXCJcbiAgbGV0LW9wdGlvbnM9XCJvcHRpb25zXCJcbj5cbiAgPGRpdiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lciBvcHRpb25zXCI+XG4gICAgPHNlbGVjdFxuICAgICAgKGNoYW5nZSk9XCJoYW5kbGVPbklucHV0KHsgaW5kZXgsIGtleSwgdmFsdWU6IHsgcHJldmlvdXM6IHZhbHVlLCBuZXc6ICRldmVudC50YXJnZXQudmFsdWUgfSwgcGF0aCB9KVwiXG4gICAgPlxuICAgICAgPG9wdGlvblxuICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNcIlxuICAgICAgICBbdmFsdWVdPVwib3B0aW9uXCJcbiAgICAgICAgW3NlbGVjdGVkXT1cIm9wdGlvbiA9PT0gdmFsdWVcIlxuICAgICAgICA+e3sgb3B0aW9uIH19PC9vcHRpb25cbiAgICAgID5cbiAgICA8L3NlbGVjdD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIE5vbiBPYmplY3QgVHlwZSBGaWVsZCA6OiBCb29sZWFuIEZpZWxkIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlXG4gICNib29sZWFuRmllbGRUZW1wbGF0ZVxuICBsZXQtaW5kZXg9XCJpbmRleFwiXG4gIGxldC1rZXk9XCJrZXlcIlxuICBsZXQtdmFsdWU9XCJ2YWx1ZVwiXG4gIGxldC1wYXRoPVwicGF0aFwiXG4+XG4gIDxkaXYgY2xhc3M9XCJmaWVsZC1jb250YWluZXIgY2hlY2tib3hcIj5cbiAgICA8aW5wdXRcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICBbY2hlY2tlZF09XCJ2YWx1ZVwiXG4gICAgICAoY2hhbmdlKT1cImhhbmRsZU9uSW5wdXQoeyBpbmRleCwga2V5LCB2YWx1ZTogeyBwcmV2aW91czogdmFsdWUsIG5ldzogJGV2ZW50LnRhcmdldC5jaGVja2VkIH0sIHBhdGggfSlcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBOb24gT2JqZWN0IFR5cGUgRmllbGQgOjogVGV4dCBGaWVsZCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZVxuICAjdGV4dEZpZWxkVGVtcGxhdGVcbiAgbGV0LWluZGV4PVwiaW5kZXhcIlxuICBsZXQta2V5PVwia2V5XCJcbiAgbGV0LXZhbHVlPVwidmFsdWVcIlxuICBsZXQtcGF0aD1cInBhdGhcIlxuPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGFpbmVyIHRleHRcIj5cbiAgICA8aW5wdXRcbiAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIge3sga2V5IH19XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAoYmx1cik9XCJoYW5kbGVPbklucHV0KHsgaW5kZXgsIGtleSwgdmFsdWU6IHsgcHJldmlvdXM6IHZhbHVlLCBuZXc6ICRldmVudC50YXJnZXQudmFsdWUgfSwgcGF0aCB9KVwiXG4gICAgLz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIE5vbiBPYmplY3QgVHlwZSBGaWVsZCA6OiBOdW1iZXIgRmllbGQgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGVcbiAgI251bWJlckZpZWxkVGVtcGxhdGVcbiAgbGV0LWluZGV4PVwiaW5kZXhcIlxuICBsZXQta2V5PVwia2V5XCJcbiAgbGV0LXZhbHVlPVwidmFsdWVcIlxuICBsZXQtcGF0aD1cInBhdGhcIlxuPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGFpbmVyIG51bWJlclwiPlxuICAgIDxpbnB1dFxuICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciB7eyBrZXkgfX1cIlxuICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgKGJsdXIpPVwiaGFuZGxlT25JbnB1dCh7IGluZGV4LCBrZXksIHZhbHVlOiB7IHByZXZpb3VzOiB2YWx1ZSwgbmV3OiAkZXZlbnQudGFyZ2V0LnZhbHVlIH0sIHBhdGggfSlcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjwhLS0gRU5EIC0tPlxuIl19
424
+ }], ngOnInit: [], ngOnChanges: [], initFormEditor: [], handleOnClickChangeActiveEditor: [], handleOnClickSaveActiveFormConfig: [], handleOnClickAddField: [], handleOnClickEditValidators: [], handleOnClickEditProperties: [], handleOnInput: [], handleOnInputFieldConfigValidatorsConfig: [], handleOnInputFieldConfigPropertiesConfig: [], handleOnClickDeleteField: [], handleOnClickSaveActiveFormConfig_NoFields: [], handleOnClickPreview: [], toggleLoader: [], closeJSONPopup: [], copyToClipboard: [], convertToMinifiedJson: [], convertToCompleteJson: [], downloadJSON: [] } });
425
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci1mb3JtLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rd2lraWQtZm9ybXMvc3JjL2xpYi9idWlsZGVyL2J1aWxkZXItZm9ybS1lZGl0b3IvYnVpbGRlci1mb3JtLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rd2lraWQtZm9ybXMvc3JjL2xpYi9idWlsZGVyL2J1aWxkZXItZm9ybS1lZGl0b3IvYnVpbGRlci1mb3JtLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3JCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM3RSxPQUFPLEVBQ0wsZUFBZSxFQUVoQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLFdBQVcsRUFDWixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFDTCxZQUFZLEVBQ1osdUJBQXVCLEVBQ3ZCLHVCQUF1QixFQUN2QixjQUFjLEVBQ2QsT0FBTyxFQUNQ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eEMsT0FBTyxDQUFDLEdBQUcsQ0FBQzs2QkFDYixDQUFDOzRCQUNGLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0NBQ25CLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQzs2QkFDdkQsQ0FBQzt5QkFDSCxDQUFDO3FCQUNIO2lCQUNGOzJKQU1DLGdCQUFnQjtzQkFEZixLQUFLO2dCQU9OLDJCQUEyQjtzQkFEMUIsTUFBTTtnQkE4RFAsUUFBUSxNQUdSLFdBQVcsTUFnQlgsY0FBYyxNQWdDZCwrQkFBK0IsTUFLL0IsaUNBQWlDLE1BaUJqQyxxQkFBcUIsTUF3QnJCLDJCQUEyQixNQWUzQiwyQkFBMkIsTUFrQjNCLGFBQWEsTUErQ2Isd0NBQXdDLE1BaUN4Qyx3Q0FBd0MsTUFvQ3hDLHdCQUF3QixNQWdCeEIsMENBQTBDLE1BUTFDLG9CQUFvQixNQUtwQixZQUFZLE1BWVosY0FBYyxNQVVkLGVBQWUsTUFLZixxQkFBcUIsTUErQnJCLHFCQUFxQixNQVNyQixZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHtcbiAgY2hlY2tPYmplY3RLZXlFeGlzdHMsXG4gIGdldE9iamVjdERlZXBDb3B5LFxuICBnZXRPYmplY3RWYWx1ZUZyb21QYXRoLFxuICBsb2dNZXRob2QsXG4gIG1lcmdlT2JqZWN0cyxcbiAgc2V0VmFsdWVUb09iamVjdFBhdGhcbn0gZnJvbSBcImt3aWtpZC10b29sa2l0XCI7XG5pbXBvcnQgeyBLd2lrVUlMb2FkZXJTZXJ2aWNlIH0gZnJvbSBcImt3aWt1aVwiO1xuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHsgQ29udmVydGVyIH0gZnJvbSBcIi4uLy4uL3JlbmRlcmVyL2NvbmZpZy1jb252ZXJ0ZXIvY29uZmlnLWNvbnZlcnRlclwiO1xuaW1wb3J0IHtcbiAgRUZvcm1FZGl0b3JUeXBlLFxuICBURm9ybUVkaXRvclR5cGVcbn0gZnJvbSBcIi4vYnVpbGRlci1mb3JtLWVkaXRvci5kZWZpbml0aW9uc1wiO1xuaW1wb3J0IHtcbiAgZmluZE1vZGlmaWVkS2V5cyxcbiAgZ2V0RmllbGRJbmRleCxcbiAgcmVtb3ZlRmllbGRcbn0gZnJvbSBcIi4vYnVpbGRlci1mb3JtLWVkaXRvci5oZWxwZXJcIjtcbmltcG9ydCB7XG4gIEZJRUxEX0NPTkZJRyxcbiAgRklFTERfUFJPUEVSVElFU19DT05GSUcsXG4gIEZJRUxEX1ZBTElEQVRPUlNfQ09ORklHLFxuICBOT0ZJRUxEX0NPTkZJRyxcbiAgT1BUSU9OUyxcbiAgVEFCTEVfQ09MVU1OU1xufSBmcm9tIFwiLi9idWlsZGVyLmZvcm0tZWRpdG9yLmNvbnN0YW50c1wiO1xuaW1wb3J0IHsgS3dpa0lERm9ybUJ1aWxkZXJGb3JtRWRpdG9yU2VydmljZSB9IGZyb20gXCIuL2J1aWxkZXIuZm9ybS1lZGl0b3Iuc2VydmljZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwia3dpa2lkLWJ1aWxkZXItZm9ybS1lZGl0b3JcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9idWlsZGVyLWZvcm0tZWRpdG9yLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi4vc2hhcmVkLnNjc3NcIiwgXCIuL2J1aWxkZXItZm9ybS1lZGl0b3IuY29tcG9uZW50LnNjc3NcIl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcihcInBhbmVsSW5PdXRcIiwgW1xuICAgICAgdHJhbnNpdGlvbihcIjplbnRlclwiLCBbXG4gICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZVkoMTAwJSlcIiB9KSxcbiAgICAgICAgYW5pbWF0ZSgxNTApXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oXCI6bGVhdmVcIiwgW1xuICAgICAgICBhbmltYXRlKDEwMCwgc3R5bGUoeyB0cmFuc2Zvcm06IFwidHJhbnNsYXRlWSgxMDAlKVwiIH0pKVxuICAgICAgXSlcbiAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEt3aWtJREJ1aWxkZXJGb3JtRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvKipcbiAgICogQ29tcG9uZW50cyBJbnB1dHNcbiAgICovXG4gIEBJbnB1dCgpXG4gIGFjdGl2ZUZvcm1Db25maWc6IGFueSA9IHt9O1xuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgT3V0cHV0cyAoRXZlbnQgRW1pdHRlcnMpXG4gICAqL1xuICBAT3V0cHV0KClcbiAgb25DbGlja1NhdmVBY3RpdmVGb3JtQ29uZmlnOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgVmFyaWFibGVzXG4gICAqL1xuICAvLyBGaWVsZCBFZGl0b3IgVmFyaWFibGVzXG4gIHJvd3M6IGFueVtdID0gW107XG4gIGNvbHVtbnM6IGFueVtdID0gVEFCTEVfQ09MVU1OUztcbiAgYWN0aXZlRmllbGRDb25maWdFZGl0aW5nOiBhbnkgPSB7fTtcbiAgc2hvd0ZpZWxkQ29uZmlnVmFsaWRhdG9yc0NvbmZpZ0VkaXRvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBhY3RpdmVGaWVsZENvbmZpZ1ZhbGlkYXRvcnNDb25maWc6IGFueSA9IHt9O1xuICBzaG93RmllbGRDb25maWdQcm9wZXJ0aWVzQ29uZmlnRWRpdG9yOiBib29sZWFuID0gZmFsc2U7XG4gIGFjdGl2ZUZpZWxkQ29uZmlnUHJvcGVydGllc0NvbmZpZzogYW55ID0ge307XG5cbiAgLy8gR2VuZXJhbCBFZGl0b3IgVmFyaWFibGVzXG4gIGVkaXRvclR5cGVPcHRpb25zOiBhbnlbXSA9IFtcbiAgICB7IGtleTogXCJGSUVMRFNcIiwgbGFiZWw6IFwiZmllbGRzXCIgfSxcbiAgICB7IGtleTogXCJOT05fRklFTERTXCIsIGxhYmVsOiBcIm90aGVyIGNvbmZpZ1wiIH1cbiAgXTtcbiAgYWN0aXZlRWRpdG9yVHlwZTogVEZvcm1FZGl0b3JUeXBlID0gRUZvcm1FZGl0b3JUeXBlLkZJRUxEUztcbiAgYWN0aXZlRm9ybUNvbmZpZ19GaWVsZHM6IGFueVtdID0gW107XG4gIGFjdGl2ZUZvcm1Db25maWdfTm9GaWVsZHM6IGFueSA9IHt9O1xuICBzaG93Q29uZmlnUHJldmlldzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEZvcm1zXG4gIGZvcm1Hcm91cDogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgLy8gRm9ybSBTYXZlZCBTdGF0ZVxuICBzYXZlZENvbmZpZzogYm9vbGVhbiA9IGZhbHNlO1xuICBtYXJrU2F2ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zYXZlZENvbmZpZyA9IHRydWU7XG4gIH1cbiAgbWFya1Vuc2F2ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zYXZlZENvbmZpZyA9IGZhbHNlO1xuICB9XG5cbiAgLy8gRGlhbG9nXG4gIGRpYWxvZ09wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0RpYWxvZygpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ09wZW4gPSB0cnVlO1xuICB9XG4gIGhpZGVEaWFsb2coKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dPcGVuID0gZmFsc2U7XG4gIH1cbiAgZGlhbG9nRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0RpYWxvZ0Vycm9yKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nRXJyb3IgPSB0cnVlO1xuICB9XG4gIGhpZGVEaWFsb2dFcnJvcigpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ0Vycm9yID0gZmFsc2U7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbG9hZGVyU2VydmljZTogS3dpa1VJTG9hZGVyU2VydmljZSxcbiAgICBwdWJsaWMga3dpa2lkQnVpbGRlckZvcm1FZGl0b3JTZXJ2aWNlOiBLd2lrSURGb3JtQnVpbGRlckZvcm1FZGl0b3JTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogQW5ndWxhciBMaWZlY3ljbGUgTWV0aG9kc1xuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgQGxvZ01ldGhvZFxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgdmVyaWZ5Q2hhbmdlID0gKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hhbmdlcywga2V5KSAmJiAhY2hhbmdlc1trZXldLmZpcnN0Q2hhbmdlO1xuICAgIH07XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImFjdGl2ZUZvcm1Db25maWdcIikpIHtcbiAgICAgIGxldCBmb3JtQ29uZmlnID0gbmV3IENvbnZlcnRlcigpLmNvbnZlcnRGb3JtQ29uZmlnKFxuICAgICAgICBjaGFuZ2VzLmFjdGl2ZUZvcm1Db25maWcuY3VycmVudFZhbHVlXG4gICAgICApO1xuICAgICAgZm9ybUNvbmZpZyA9IG5ldyBDb252ZXJ0ZXIoKS51cGRhdGVGb3JtQ29uZmlnUHJvcGVydGllcyhmb3JtQ29uZmlnKTtcbiAgICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZyA9IGZvcm1Db25maWc7XG5cbiAgICAgIHRoaXMuaW5pdEZvcm1FZGl0b3IodGhpcy5hY3RpdmVGb3JtQ29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGluaXRGb3JtRWRpdG9yKGFjdGl2ZUZvcm1Db25maWc6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudG9nZ2xlTG9hZGVyKHRydWUpO1xuXG4gICAgdGhpcy5hY3RpdmVGb3JtQ29uZmlnX0ZpZWxkcyA9IGdldE9iamVjdERlZXBDb3B5KGFjdGl2ZUZvcm1Db25maWcuZmllbGRzKTtcbiAgICB0aGlzLmFjdGl2ZUZvcm1Db25maWdfTm9GaWVsZHMgPSBnZXRPYmplY3REZWVwQ29weShhY3RpdmVGb3JtQ29uZmlnKTtcbiAgICBkZWxldGUgdGhpcy5hY3RpdmVGb3JtQ29uZmlnX05vRmllbGRzLmZpZWxkcztcblxuICAgIHRoaXMucm93cyA9IHRoaXMuYWN0aXZlRm9ybUNvbmZpZ19GaWVsZHMubWFwKChmaWVsZDogYW55KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IGZpZWxkLmtleSxcbiAgICAgICAgbGFiZWw6IGZpZWxkLmxhYmVsLFxuICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICBkaXNhYmxlZDogZmllbGQuZGlzYWJsZWQsXG4gICAgICAgIHZhbGlkYXRvcnM6IHsgLi4uRklFTERfVkFMSURBVE9SU19DT05GSUcsIC4uLmZpZWxkLnZhbGlkYXRvcnMgfSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIC4uLkZJRUxEX1BST1BFUlRJRVNfQ09ORklHW2ZpZWxkLnR5cGVdLFxuICAgICAgICAgIC4uLmZpZWxkLnByb3BlcnRpZXNcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5rd2lraWRCdWlsZGVyRm9ybUVkaXRvclNlcnZpY2UuY3JlYXRlTmVzdGVkRm9ybUdyb3VwKFxuICAgICAgdGhpcy5yb3dzXG4gICAgKTtcblxuICAgIHRoaXMudG9nZ2xlTG9hZGVyKGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmFsIEVkaXRvciBDb21tb24gTWV0aG9kc1xuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrQ2hhbmdlQWN0aXZlRWRpdG9yKGVkaXRvclR5cGU6IHN0cmluZykge1xuICAgIHRoaXMuYWN0aXZlRWRpdG9yVHlwZSA9IGVkaXRvclR5cGUgYXMgVEZvcm1FZGl0b3JUeXBlO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrU2F2ZUFjdGl2ZUZvcm1Db25maWcoKSB7XG4gICAgdGhpcy5jb252ZXJ0VG9NaW5pZmllZEpzb24oKTtcblxuICAgIHRoaXMubWFya1NhdmVkKCk7XG5cbiAgICB0aGlzLm9uQ2xpY2tTYXZlQWN0aXZlRm9ybUNvbmZpZy5lbWl0KFxuICAgICAgZ2V0T2JqZWN0RGVlcENvcHkodGhpcy5hY3RpdmVGb3JtQ29uZmlnKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmllbGRzIEVkaXRvciBSZWxhdGVkIE1ldGhvZHNcbiAgICovXG4gIC8qKlxuICAgKiBNZXRob2RzIHRvIGhhbmRsZSBhZGRpdGlvbiBvZiBuZXcgZmllbGRcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0FkZEZpZWxkKCkge1xuICAgIHRoaXMubWFya1Vuc2F2ZWQoKTtcbiAgICB0aGlzLnRvZ2dsZUxvYWRlcih0cnVlKTtcblxuICAgIGNvbnN0IG5ld0luZGV4ID0gdGhpcy5yb3dzLmxlbmd0aDtcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IGdldE9iamVjdERlZXBDb3B5KFxuICAgICAgbWVyZ2VPYmplY3RzKEZJRUxEX0NPTkZJRy50ZXh0LCB7XG4gICAgICAgIGtleTogU3RyaW5nKG5ld0luZGV4KVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5yb3dzW25ld0luZGV4XSA9IGZpZWxkQ29uZmlnO1xuXG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woZmllbGRDb25maWcpO1xuXG4gICAgdGhpcy5mb3JtR3JvdXAuYWRkQ29udHJvbChTdHJpbmcobmV3SW5kZXgpLCBmb3JtQ29udHJvbCk7XG5cbiAgICB0aGlzLnRvZ2dsZUxvYWRlcihmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kcyB0byBoYW5kbGUgZWRpdGluZyBvZiBmaWVsZCBrZXktdmFsdWVzXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tFZGl0VmFsaWRhdG9ycyhlOiBhbnkpIHtcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKClbZS5pbmRleF07XG5cbiAgICBjb25zdCBmaWVsZENvbmZpZ1ZhbGlkYXRvcnMgPSBmaWVsZENvbmZpZ1tcInZhbGlkYXRvcnNcIl07XG5cbiAgICB0aGlzLmFjdGl2ZUZpZWxkQ29uZmlnVmFsaWRhdG9yc0NvbmZpZyA9IG1lcmdlT2JqZWN0cyhcbiAgICAgIEZJRUxEX1ZBTElEQVRPUlNfQ09ORklHLFxuICAgICAgZmllbGRDb25maWdWYWxpZGF0b3JzXG4gICAgKTtcblxuICAgIHRoaXMuc2hvd0ZpZWxkQ29uZmlnVmFsaWRhdG9yc0NvbmZpZ0VkaXRvciA9IHRydWU7XG4gICAgdGhpcy5hY3RpdmVGaWVsZENvbmZpZ0VkaXRpbmcgPSBmaWVsZENvbmZpZztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0VkaXRQcm9wZXJ0aWVzKGU6IGFueSkge1xuICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKVtlLmluZGV4XTtcblxuICAgIGNvbnN0IGZpZWxkQ29uZmlnUHJvcGVydGllcyA9IGZpZWxkQ29uZmlnW1wicHJvcGVydGllc1wiXTtcblxuICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdQcm9wZXJ0aWVzQ29uZmlnID0gbWVyZ2VPYmplY3RzKFxuICAgICAgRklFTERfUFJPUEVSVElFU19DT05GSUdbZS50eXBlXSxcbiAgICAgIGZpZWxkQ29uZmlnUHJvcGVydGllc1xuICAgICk7XG5cbiAgICB0aGlzLnNob3dGaWVsZENvbmZpZ1Byb3BlcnRpZXNDb25maWdFZGl0b3IgPSB0cnVlO1xuICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdFZGl0aW5nID0gZmllbGRDb25maWc7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kcyB0byBoYW5kbGUgY2hhbmdlIGluIGlucHV0IHZhbHVlcyBmb3IgRmllbGRzIEtleXNcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25JbnB1dChlOiBhbnkpIHtcbiAgICB0aGlzLm1hcmtVbnNhdmVkKCk7XG5cbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKClbZS5pbmRleF07XG4gICAgY29uc3QgZmluYWxQYXRoID0gZS5wYXRoICE9PSBcIlwiID8gYCR7ZS5wYXRofS4ke2Uua2V5fWAgOiBlLmtleTtcblxuICAgIGlmIChmaW5hbFBhdGguaW5jbHVkZXMoXCJkaXNhYmxlZFwiKSkge1xuICAgICAgZS52YWx1ZS5uZXcgPSBCb29sZWFuKGUudmFsdWUubmV3KTtcbiAgICB9XG5cbiAgICBsZXQgbmV3RmllbGRDb25maWcgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgIGdldE9iamVjdERlZXBDb3B5KGZpZWxkQ29uZmlnKSxcbiAgICAgIGZpbmFsUGF0aCxcbiAgICAgIGUudmFsdWUubmV3XG4gICAgKTtcblxuICAgIGlmIChmaW5hbFBhdGguaW5jbHVkZXMoXCJ0eXBlXCIpKSB7XG4gICAgICB0aGlzLnRvZ2dsZUxvYWRlcih0cnVlKTtcblxuICAgICAgbmV3RmllbGRDb25maWcgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgbmV3RmllbGRDb25maWcsXG4gICAgICAgIFwidmFsaWRhdG9yc1wiLFxuICAgICAgICBGSUVMRF9WQUxJREFUT1JTX0NPTkZJR1xuICAgICAgKTtcblxuICAgICAgbmV3RmllbGRDb25maWcgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgbmV3RmllbGRDb25maWcsXG4gICAgICAgIFwicHJvcGVydGllc1wiLFxuICAgICAgICBGSUVMRF9QUk9QRVJUSUVTX0NPTkZJR1tuZXdGaWVsZENvbmZpZy50eXBlXVxuICAgICAgKTtcblxuICAgICAgdGhpcy50b2dnbGVMb2FkZXIoZmFsc2UpO1xuICAgIH1cblxuICAgIHRoaXMucm93cyA9IHRoaXMucm93cy5tYXAoKHJvdykgPT4ge1xuICAgICAgaWYgKHJvdy5rZXkgPT09IGZpZWxkQ29uZmlnLmtleSkge1xuICAgICAgICByZXR1cm4gZ2V0T2JqZWN0RGVlcENvcHkobmV3RmllbGRDb25maWcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldE9iamVjdERlZXBDb3B5KHJvdyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tlLmluZGV4XS5zZXRWYWx1ZShuZXdGaWVsZENvbmZpZywge1xuICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbklucHV0RmllbGRDb25maWdWYWxpZGF0b3JzQ29uZmlnKGU6IGFueSkge1xuICAgIHRoaXMubWFya1Vuc2F2ZWQoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmhpZGVEaWFsb2dFcnJvcigpO1xuXG4gICAgICBjb25zdCB2YWxpZGF0b3JDb25maWcgPSBKU09OLnBhcnNlKGUpO1xuXG4gICAgICBjb25zdCByb3dJbmRleCA9IGdldEZpZWxkSW5kZXgoXG4gICAgICAgIHRoaXMucm93cyxcbiAgICAgICAgdGhpcy5hY3RpdmVGaWVsZENvbmZpZ0VkaXRpbmcua2V5XG4gICAgICApO1xuICAgICAgaWYgKHJvd0luZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLnJvd3Nbcm93SW5kZXhdLnZhbGlkYXRvcnMgPSB2YWxpZGF0b3JDb25maWc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdFZGl0aW5nID0gbWVyZ2VPYmplY3RzKFxuICAgICAgICB0aGlzLmFjdGl2ZUZpZWxkQ29uZmlnRWRpdGluZyxcbiAgICAgICAgeyB2YWxpZGF0b3JzOiB2YWxpZGF0b3JDb25maWcgfVxuICAgICAgKTtcblxuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbcm93SW5kZXhdLnNldFZhbHVlKFxuICAgICAgICB0aGlzLmFjdGl2ZUZpZWxkQ29uZmlnRWRpdGluZyxcbiAgICAgICAge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2hvd0RpYWxvZ0Vycm9yKCk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbklucHV0RmllbGRDb25maWdQcm9wZXJ0aWVzQ29uZmlnKGU6IGFueSkge1xuICAgIHRoaXMubWFya1Vuc2F2ZWQoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmhpZGVEaWFsb2dFcnJvcigpO1xuXG4gICAgICBjb25zdCBwcm9wZXJ0aWVzQ29uZmlnID0gSlNPTi5wYXJzZShlKTtcblxuICAgICAgY29uc3Qgcm93SW5kZXggPSBnZXRGaWVsZEluZGV4KFxuICAgICAgICB0aGlzLnJvd3MsXG4gICAgICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdFZGl0aW5nLmtleVxuICAgICAgKTtcbiAgICAgIGlmIChyb3dJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5yb3dzW3Jvd0luZGV4XS5wcm9wZXJ0aWVzID0gcHJvcGVydGllc0NvbmZpZztcbiAgICAgIH1cblxuICAgICAgdGhpcy5hY3RpdmVGaWVsZENvbmZpZ0VkaXRpbmcgPSBtZXJnZU9iamVjdHMoXG4gICAgICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdFZGl0aW5nLFxuICAgICAgICB7IHByb3BlcnRpZXM6IHByb3BlcnRpZXNDb25maWcgfVxuICAgICAgKTtcblxuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbcm93SW5kZXhdLnNldFZhbHVlKFxuICAgICAgICB0aGlzLmFjdGl2ZUZpZWxkQ29uZmlnRWRpdGluZyxcbiAgICAgICAge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2hvd0RpYWxvZ0Vycm9yKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZHMgdG8gaGFuZGxlIGRlbGV0aW9uIG9mIGZpZWxkXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tEZWxldGVGaWVsZChlOiBhbnkpIHtcbiAgICB0aGlzLm1hcmtVbnNhdmVkKCk7XG5cbiAgICB0aGlzLnJvd3MgPSByZW1vdmVGaWVsZCh0aGlzLnJvd3MsIGUua2V5KTtcblxuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5rd2lraWRCdWlsZGVyRm9ybUVkaXRvclNlcnZpY2UuY3JlYXRlTmVzdGVkRm9ybUdyb3VwKFxuICAgICAgdGhpcy5yb3dzXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb24gRmllbGRzIEVkaXRvciBSZWxhdGVkIE1ldGhvZHNcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja1NhdmVBY3RpdmVGb3JtQ29uZmlnX05vRmllbGRzKGU6IGFueSkge1xuICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZ19Ob0ZpZWxkcyA9IEpTT04ucGFyc2UoZSk7XG4gIH1cblxuICAvKipcbiAgICogT3RoZXIgQ29tcG9uZW50IE1ldGhvZHNcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja1ByZXZpZXcoKSB7XG4gICAgdGhpcy5zaG93RGlhbG9nKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIHRvZ2dsZUxvYWRlcihsb2FkZXIpIHtcbiAgICBpZiAobG9hZGVyKSB7XG4gICAgICB0aGlzLmxvYWRlclNlcnZpY2Uuc2hvdyh7XG4gICAgICAgIGZ1bGxzY3JlZW46IHRydWUsXG4gICAgICAgIGxvYWRlclRleHQ6IFwiUGxlYXNlIHdhaXRcIlxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9hZGVyU2VydmljZS5oaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBjbG9zZUpTT05Qb3B1cCgpIHtcbiAgICB0aGlzLmhpZGVEaWFsb2coKTtcbiAgICB0aGlzLnNob3dGaWVsZENvbmZpZ1ZhbGlkYXRvcnNDb25maWdFZGl0b3IgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dGaWVsZENvbmZpZ1Byb3BlcnRpZXNDb25maWdFZGl0b3IgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdGhlciBIZWxwZXIgTWV0aG9kc1xuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBjb3B5VG9DbGlwYm9hcmQoKSB7XG4gICAgdGhpcy5rd2lraWRCdWlsZGVyRm9ybUVkaXRvclNlcnZpY2UuY29weVRvQ2xpcGJvYXJkKHRoaXMuYWN0aXZlRm9ybUNvbmZpZyk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGNvbnZlcnRUb01pbmlmaWVkSnNvbigpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBbXTtcblxuICAgIGZvciAobGV0IGZpZWxkIG9mIE9iamVjdC52YWx1ZXMoXG4gICAgICBnZXRPYmplY3REZWVwQ29weSh0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpKVxuICAgICkpIHtcbiAgICAgIGZpZWxkcy5wdXNoKFxuICAgICAgICBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgICAgICBmaW5kTW9kaWZpZWRLZXlzKEZJRUxEX0NPTkZJR1tmaWVsZFtcInR5cGVcIl1dLCBmaWVsZCwgXCJcIiksXG4gICAgICAgICAgXCJ0eXBlXCIsXG4gICAgICAgICAgZmllbGRbXCJ0eXBlXCJdXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlRm9ybUNvbmZpZ19Ob0ZpZWxkc19NaW5pZmllZCA9IGZpbmRNb2RpZmllZEtleXMoXG4gICAgICBOT0ZJRUxEX0NPTkZJRyxcbiAgICAgIGdldE9iamVjdERlZXBDb3B5KHRoaXMuYWN0aXZlRm9ybUNvbmZpZ19Ob0ZpZWxkcyksXG4gICAgICBcIlwiXG4gICAgKTtcblxuICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZyA9IG1lcmdlT2JqZWN0cyhcbiAgICAgIHt9LFxuICAgICAgYWN0aXZlRm9ybUNvbmZpZ19Ob0ZpZWxkc19NaW5pZmllZCxcbiAgICAgIHtcbiAgICAgICAgZmllbGRzOiBmaWVsZHNcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBjb252ZXJ0VG9Db21wbGV0ZUpzb24oKSB7XG4gICAgbGV0IGZvcm1Db25maWcgPSBuZXcgQ29udmVydGVyKCkuY29udmVydEZvcm1Db25maWcoXG4gICAgICBnZXRPYmplY3REZWVwQ29weSh0aGlzLmFjdGl2ZUZvcm1Db25maWcpXG4gICAgKTtcbiAgICBmb3JtQ29uZmlnID0gbmV3IENvbnZlcnRlcigpLnVwZGF0ZUZvcm1Db25maWdQcm9wZXJ0aWVzKGZvcm1Db25maWcpO1xuICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZyA9IGZvcm1Db25maWc7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGRvd25sb2FkSlNPTigpIHtcbiAgICB0aGlzLmt3aWtpZEJ1aWxkZXJGb3JtRWRpdG9yU2VydmljZS5kb3dubG9hZEpTT04odGhpcy5hY3RpdmVGb3JtQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNaXNjIE1ldGhvZHNcbiAgICovXG4gIGdldE9wdGlvbnMoaW5kZXgsIHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICBpZiAocGF0aC5pbmNsdWRlcyhcInByb3BlcnRpZXNcIikpIHtcbiAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IHRoaXMucm93c1tpbmRleF0udHlwZTtcblxuICAgICAgY29uc3QgZmluYWxQYXRoID0gYCR7cGF0aH1bJyR7ZmllbGRUeXBlfSddLiR7a2V5fWA7XG5cbiAgICAgIHJldHVybiBnZXRPYmplY3RWYWx1ZUZyb21QYXRoKE9QVElPTlMsIGZpbmFsUGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpbmFsUGF0aCA9IHBhdGggIT09IFwiXCIgPyBgJHtwYXRofS4ke2tleX1gIDoga2V5O1xuXG4gICAgICByZXR1cm4gZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aChPUFRJT05TLCBmaW5hbFBhdGgpO1xuICAgIH1cbiAgfVxuICBtZW1vaXplZEdldE9wdGlvbnMgPSBfLm1lbW9pemUodGhpcy5nZXRPcHRpb25zKTtcblxuICBpc09wdGlvbnMoaW5kZXgsIHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICBpZiAocGF0aC5pbmNsdWRlcyhcInByb3BlcnRpZXNcIikpIHtcbiAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IHRoaXMucm93c1tpbmRleF0udHlwZTtcblxuICAgICAgY29uc3QgZmluYWxQYXRoID0gYCR7cGF0aH1bJyR7ZmllbGRUeXBlfSddLiR7a2V5fWA7XG5cbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGdldE9iamVjdFZhbHVlRnJvbVBhdGgoT1BUSU9OUywgZmluYWxQYXRoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpbmFsUGF0aCA9IHBhdGggIT09IFwiXCIgPyBgJHtwYXRofS4ke2tleX1gIDoga2V5O1xuXG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShnZXRPYmplY3RWYWx1ZUZyb21QYXRoKE9QVElPTlMsIGZpbmFsUGF0aCkpO1xuICAgIH1cbiAgfVxuXG4gIGlzQm9vbGVhbih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCI7XG4gIH1cblxuICBpc1N0cmluZyh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIjtcbiAgfVxuXG4gIGlzTnVtYmVyKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiO1xuICB9XG5cbiAgaXNPYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQW5ndWxhciBTcGVjaWZpYyBNZXRob2RzXG4gICAqL1xuICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogYW55KTogYW55IHtcbiAgICBjb25zdCBrZXkgPSBpdGVtPy5rZXkgfHwgXCJcIjtcbiAgICBjb25zdCB2YWx1ZSA9IGl0ZW0/LnZhbHVlIHx8IFwiXCI7XG5cbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBgJHtTdHJpbmcoaW5kZXgpfV8ke2l0ZW19XyR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke1N0cmluZyhpbmRleCl9XyR7a2V5fV8ke3ZhbHVlfV8ke25ldyBEYXRlKCkuZ2V0VGltZSgpfWA7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tIENvbXBvbmVudCBMb2FkZXIgLS0+XG48a3dpa3VpLWxvYWRlcj48L2t3aWt1aS1sb2FkZXI+XG5cbjwhLS0gQ29tcG9uZW50IE1haW4gVmlldyAtLT5cbjxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZUZvcm1Db25maWc7IGVsc2Ugbm9Gb3JtU2VsZWN0ZWRUZW1wbGF0ZVwiPlxuICAgIDxoZWFkZXI+XG4gICAgICA8ZGl2PlxuICAgICAgICAmbmJzcDtFZGl0aW5nIENvbmZpZyBvZiBGb3JtOiA8Yj57eyBhY3RpdmVGb3JtQ29uZmlnLnByb3BzLnRpdGxlIH19PC9iPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWZvcm0tZWRpdG9yLWJ0bnNcIj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlT25DbGlja1ByZXZpZXcoKVwiPnByZXZpZXc8L2J1dHRvbj5cbiAgICAgICAgPGRpdj5FZGl0b3ImbmJzcDtUeXBlOjwvZGl2PlxuICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwiaGFuZGxlT25DbGlja0NoYW5nZUFjdGl2ZUVkaXRvcigkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZWRpdG9yVHlwZU9wdGlvbnNcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi5rZXlcIlxuICAgICAgICAgICAgW3NlbGVjdGVkXT1cIm9wdGlvbi5rZXkgPT09IGFjdGl2ZUVkaXRvclR5cGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvaGVhZGVyPlxuICAgIDxtYWluPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZvcm0tY29uZmlnLWZpZWxkc1wiXG4gICAgICAgICpuZ0lmPVwiYWN0aXZlRWRpdG9yVHlwZSA9PSAnRklFTERTJzsgZWxzZSBub25GaWVsZHNFZGl0b3JUZW1wbGF0ZVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dzLmxlbmd0aCA8PSAwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLWZpZWxkcyBkaXNjbGFpbWVyXCI+XG4gICAgICAgICAgICA8ZGl2PjxwPlBsZWFzZSBhZGQgZmllbGQgdG8gZ2V0IHN0YXJ0ZWQ8L3A+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvblwiPjxoMT4mcGx1czs8L2gxPjwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlT25DbGlja0FkZEZpZWxkKClcIj5hZGQgZmllbGQ8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDx0YWJsZT5cbiAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICB7eyBjb2x1bW4gfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByb3cgb2Ygcm93czsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUZuXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgaiA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbiAhPT0gJ2RlbGV0ZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uICE9PSAndmFsaWRhdG9ycycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uICE9PSAncHJvcGVydGllcycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uICE9PSAndHlwZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uICE9PSAnZGlzYWJsZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0RmllbGRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRWYWx1ZTogcm93W2NvbHVtbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkS2V5OiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGg6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbiA9PT0gJ3R5cGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbkZpZWxkVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByb3dbY29sdW1uXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBtZW1vaXplZEdldE9wdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbiA9PT0gJ2Rpc2FibGVkJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJib29sZWFuRmllbGRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJvd1tjb2x1bW5dLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IG1lbW9pemVkR2V0T3B0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uID09PSAnZGVsZXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT25DbGlja0RlbGV0ZUZpZWxkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiByb3dbJ2tleSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJvd3MubGVuZ3RoID09PSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uID09PSAndmFsaWRhdG9ycydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9uQ2xpY2tFZGl0VmFsaWRhdG9ycyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogcm93WydrZXknXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHJvd1sndHlwZSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbiA9PT0gJ3Byb3BlcnRpZXMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPbkNsaWNrRWRpdFByb3BlcnRpZXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHJvd1sna2V5J10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiByb3dbJ3R5cGUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkLWZpZWxkLWJ0bi1jb250YWluZXJcIj4gPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9uRmllbGRzRWRpdG9yVGVtcGxhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbmZpZy1uby1maWVsZHNcIj5cbiAgICAgICAgICA8cHJlXG4gICAgICAgICAgICBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIChrZXl1cCk9XCJcbiAgICAgICAgICAgICAgaGFuZGxlT25DbGlja1NhdmVBY3RpdmVGb3JtQ29uZmlnX05vRmllbGRzKFxuICAgICAgICAgICAgICAgICRldmVudC50YXJnZXQuaW5uZXJIVE1MXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgYWN0aXZlRm9ybUNvbmZpZ19Ob0ZpZWxkcyB8IGpzb24gfX1cbiAgICAgICAgICA8L3ByZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbWFpbj5cbiAgICA8Zm9vdGVyPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cInJvd3MubGVuZ3RoID4gMFwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVPbkNsaWNrQWRkRmllbGQoKVwiXG4gICAgICA+XG4gICAgICAgIGFkZCBmaWVsZFxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVPbkNsaWNrU2F2ZUFjdGl2ZUZvcm1Db25maWcoKVwiXG4gICAgICAgIFtjbGFzcy5zZWNvbmRhcnldPVwiIXNhdmVkQ29uZmlnXCJcbiAgICAgID5cbiAgICAgICAge3sgc2F2ZWRDb25maWcgPyBcInNhdmVkXCIgOiBcInVuc2F2ZWRcIiB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9mb290ZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI25vRm9ybVNlbGVjdGVkVGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cIm5vLWZvcm0tc2VsZWN0ZWQgZGlzY2xhaW1lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImljb25cIj48aDE+JiMxMDE1MDs8L2gxPjwvZGl2PlxuICAgICAgPGRpdj48cD5QbGVhc2Ugc2VsZWN0IGEgZm9ybSB0byBlZGl0IGl0J3MgZmllbGRzPC9wPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbjwhLS0gQ29tcG9uZW50IERpYWxvZyAtLT5cbjxkaXZcbiAgY2xhc3M9XCJtb2RhbFwiXG4gIFtjbGFzcy5lcnJvcl09XCJkaWFsb2dFcnJvciA9PT0gdHJ1ZVwiXG4gICpuZ0lmPVwiXG4gICAgZGlhbG9nT3BlbiB8fFxuICAgIHNob3dGaWVsZENvbmZpZ1ZhbGlkYXRvcnNDb25maWdFZGl0b3IgfHxcbiAgICBzaG93RmllbGRDb25maWdQcm9wZXJ0aWVzQ29uZmlnRWRpdG9yXG4gIFwiXG4gIFtAcGFuZWxJbk91dF1cbj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJveFwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibW9kYWwtY29udGVudFwiXG4gICAgICAqbmdJZj1cImRpYWxvZ09wZW5cIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkaW5nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC10aXRsZVwiPlxuICAgICAgICAgIHt7IGFjdGl2ZUZvcm1Db25maWcucHJvcHMudGl0bGUgfX0ncyBDb25maWcgUHJldmlld1xuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWFjdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjb252ZXJ0VG9NaW5pZmllZEpzb24oKVwiPm1pbmlmeTwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNvbnZlcnRUb0NvbXBsZXRlSnNvbigpXCI+ZnVsbDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImRvd25sb2FkSlNPTigpXCI+ZG93bmxvYWQ8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjb3B5VG9DbGlwYm9hcmQoKVwiPmNvcHk8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjbG9zZUpTT05Qb3B1cCgpXCI+Y2xvc2U8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgIDxwcmU+XG4gICAgICAgICAgPGNvZGU+e3sgYWN0aXZlRm9ybUNvbmZpZyB8IGpzb24gfX08L2NvZGU+XG4gICAgICAgIDwvcHJlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJtb2RhbC1jb250ZW50XCJcbiAgICAgICpuZ0lmPVwic2hvd0ZpZWxkQ29uZmlnVmFsaWRhdG9yc0NvbmZpZ0VkaXRvclwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRpbmdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+XG4gICAgICAgICAge3sgYWN0aXZlRm9ybUNvbmZpZy5wcm9wcy50aXRsZSB9fSdzIFZhbGlkYXRvciBDb25maWcgRWRpdG9yXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsb3NlSlNPTlBvcHVwKClcIj5jbG9zZTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgPHByZVxuICAgICAgICAgIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIlxuICAgICAgICAgIChrZXl1cCk9XCJcbiAgICAgICAgICAgIGhhbmRsZU9uSW5wdXRGaWVsZENvbmZpZ1ZhbGlkYXRvcnNDb25maWcoJGV2ZW50LnRhcmdldC5pbm5lckhUTUwpXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHRoaXMuYWN0aXZlRmllbGRDb25maWdWYWxpZGF0b3JzQ29uZmlnIHwganNvbiB9fVxuICAgICAgICA8L3ByZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibW9kYWwtY29udGVudFwiXG4gICAgICAqbmdJZj1cInNob3dGaWVsZENvbmZpZ1Byb3BlcnRpZXNDb25maWdFZGl0b3JcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkaW5nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC10aXRsZVwiPlxuICAgICAgICAgIHt7IGFjdGl2ZUZvcm1Db25maWcucHJvcHMudGl0bGUgfX0ncyBQcm9wZXJ0aWVzIENvbmZpZyBFZGl0b3JcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1hY3Rpb25zXCI+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2VKU09OUG9wdXAoKVwiPmNsb3NlPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICA8cHJlXG4gICAgICAgICAgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXG4gICAgICAgICAgKGtleXVwKT1cIlxuICAgICAgICAgICAgaGFuZGxlT25JbnB1dEZpZWxkQ29uZmlnUHJvcGVydGllc0NvbmZpZygkZXZlbnQudGFyZ2V0LmlubmVySFRNTClcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgdGhpcy5hY3RpdmVGaWVsZENvbmZpZ1Byb3BlcnRpZXNDb25maWcgfCBqc29uIH19XG4gICAgICAgIDwvcHJlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG48IS0tIEVORCAtLT5cblxuPCEtLSBUZW1wbGF0ZSBmb3IgcmVuZGVyaW5nIGRpZmZlcmVudCBmaWVsZCB0eXBlcyAtLT5cbjwhLS0gR2VuZXJhbCBGaWVsZCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZVxuICAjZ2V0RmllbGRUZW1wbGF0ZVxuICBsZXQtaW5kZXg9XCJpbmRleFwiXG4gIGxldC12YWx1ZT1cImZpZWxkVmFsdWVcIlxuICBsZXQta2V5PVwiZmllbGRLZXlcIlxuICBsZXQtcGF0aD1cInBhcmVudFBhdGhcIlxuPlxuICA8ZGl2PlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIlxuICAgICAgICBpc09iamVjdCh2YWx1ZSkgPyBvYmplY3RGaWVsZFRlbXBsYXRlIDogbm90T2JqZWN0RmllbGRUZW1wbGF0ZVxuICAgICAgXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgZmllbGRWYWx1ZTogdmFsdWUsXG4gICAgICAgIGZpZWxkS2V5OiBrZXksXG4gICAgICAgIHBhcmVudFBhdGg6IHBhdGhcbiAgICAgIH1cIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIE9iamVjdCBUeXBlIEZpZWxkIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlXG4gICNvYmplY3RGaWVsZFRlbXBsYXRlXG4gIGxldC1pbmRleD1cImluZGV4XCJcbiAgbGV0LXZhbHVlPVwiZmllbGRWYWx1ZVwiXG4gIGxldC1rZXk9XCJmaWVsZEtleVwiXG4gIGxldC1wYXRoPVwicGFyZW50UGF0aFwiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdmFsdWUgfCBrZXl2YWx1ZVwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdldEZpZWxkVGVtcGxhdGVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBmaWVsZFZhbHVlOiBpdGVtLnZhbHVlLFxuICAgICAgICBmaWVsZEtleTogaXRlbS5rZXksXG4gICAgICAgIHBhcmVudFBhdGg6IHBhdGggPT09ICcnID8ga2V5IDogcGF0aCArICcuJyArIGtleVxuICAgICAgfVwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gTm9uIE9iamVjdCBUeXBlIEZpZWxkIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlXG4gICNub3RPYmplY3RGaWVsZFRlbXBsYXRlXG4gIGxldC1pbmRleD1cImluZGV4XCJcbiAgbGV0LXZhbHVlPVwiZmllbGRWYWx1ZVwiXG4gIGxldC1rZXk9XCJmaWVsZEtleVwiXG4gIGxldC1wYXRoPVwicGFyZW50UGF0aFwiXG4+XG4gIDxkaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzT3B0aW9ucyhpbmRleCwgdmFsdWUsIGtleSwgcGF0aClcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uRmllbGRUZW1wbGF0ZVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgIG9wdGlvbnM6IG1lbW9pemVkR2V0T3B0aW9ucyhpbmRleCwgdmFsdWUsIGtleSwgcGF0aClcbiAgICAgICAgfVwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCIhaXNPcHRpb25zKGluZGV4LCB2YWx1ZSwga2V5LCBwYXRoKSAmJiBpc1N0cmluZyh2YWx1ZSlcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICB0ZXh0RmllbGRUZW1wbGF0ZTtcbiAgICAgICAgICBjb250ZXh0OiB7IGluZGV4OiBpbmRleCwga2V5OiBrZXksIHZhbHVlOiB2YWx1ZSwgcGF0aDogcGF0aCB9XG4gICAgICAgIFwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCIhaXNPcHRpb25zKGluZGV4LCB2YWx1ZSwga2V5LCBwYXRoKSAmJiBpc051bWJlcih2YWx1ZSlcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICBudW1iZXJGaWVsZFRlbXBsYXRlO1xuICAgICAgICAgIGNvbnRleHQ6IHsgaW5kZXg6IGluZGV4LCBrZXk6IGtleSwgdmFsdWU6IHZhbHVlLCBwYXRoOiBwYXRoIH1cbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIE5vbiBPYmplY3QgVHlwZSBGaWVsZCA6OiBPcHRpb25zIEZpZWxkIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlXG4gICNvcHRpb25GaWVsZFRlbXBsYXRlXG4gIGxldC1pbmRleD1cImluZGV4XCJcbiAgbGV0LWtleT1cImtleVwiXG4gIGxldC12YWx1ZT1cInZhbHVlXCJcbiAgbGV0LXBhdGg9XCJwYXRoXCJcbiAgbGV0LW9wdGlvbnM9XCJvcHRpb25zXCJcbj5cbiAgPGRpdiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lciBvcHRpb25zXCI+XG4gICAgPHNlbGVjdFxuICAgICAgKGNoYW5nZSk9XCJoYW5kbGVPbklucHV0KHsgaW5kZXgsIGtleSwgdmFsdWU6IHsgcHJldmlvdXM6IHZhbHVlLCBuZXc6ICRldmVudC50YXJnZXQudmFsdWUgfSwgcGF0aCB9KVwiXG4gICAgPlxuICAgICAgPG9wdGlvblxuICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNcIlxuICAgICAgICBbdmFsdWVdPVwib3B0aW9uXCJcbiAgICAgICAgW3NlbGVjdGVkXT1cIm9wdGlvbiA9PT0gdmFsdWVcIlxuICAgICAgICA+e3sgb3B0aW9uIH19PC9vcHRpb25cbiAgICAgID5cbiAgICA8L3NlbGVjdD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIE5vbiBPYmplY3QgVHlwZSBGaWVsZCA6OiBCb29sZWFuIEZpZWxkIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlXG4gICNib29sZWFuRmllbGRUZW1wbGF0ZVxuICBsZXQtaW5kZXg9XCJpbmRleFwiXG4gIGxldC1rZXk9XCJrZXlcIlxuICBsZXQtdmFsdWU9XCJ2YWx1ZVwiXG4gIGxldC1wYXRoPVwicGF0aFwiXG4+XG4gIDxkaXYgY2xhc3M9XCJmaWVsZC1jb250YWluZXIgY2hlY2tib3hcIj5cbiAgICA8aW5wdXRcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICBbY2hlY2tlZF09XCJ2YWx1ZVwiXG4gICAgICAoY2hhbmdlKT1cImhhbmRsZU9uSW5wdXQoeyBpbmRleCwga2V5LCB2YWx1ZTogeyBwcmV2aW91czogdmFsdWUsIG5ldzogJGV2ZW50LnRhcmdldC5jaGVja2VkIH0sIHBhdGggfSlcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBOb24gT2JqZWN0IFR5cGUgRmllbGQgOjogVGV4dCBGaWVsZCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZVxuICAjdGV4dEZpZWxkVGVtcGxhdGVcbiAgbGV0LWluZGV4PVwiaW5kZXhcIlxuICBsZXQta2V5PVwia2V5XCJcbiAgbGV0LXZhbHVlPVwidmFsdWVcIlxuICBsZXQtcGF0aD1cInBhdGhcIlxuPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGFpbmVyIHRleHRcIj5cbiAgICA8aW5wdXRcbiAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIge3sga2V5IH19XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAoYmx1cik9XCJoYW5kbGVPbklucHV0KHsgaW5kZXgsIGtleSwgdmFsdWU6IHsgcHJldmlvdXM6IHZhbHVlLCBuZXc6ICRldmVudC50YXJnZXQudmFsdWUgfSwgcGF0aCB9KVwiXG4gICAgLz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIE5vbiBPYmplY3QgVHlwZSBGaWVsZCA6OiBOdW1iZXIgRmllbGQgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGVcbiAgI251bWJlckZpZWxkVGVtcGxhdGVcbiAgbGV0LWluZGV4PVwiaW5kZXhcIlxuICBsZXQta2V5PVwia2V5XCJcbiAgbGV0LXZhbHVlPVwidmFsdWVcIlxuICBsZXQtcGF0aD1cInBhdGhcIlxuPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGFpbmVyIG51bWJlclwiPlxuICAgIDxpbnB1dFxuICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciB7eyBrZXkgfX1cIlxuICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgKGJsdXIpPVwiaGFuZGxlT25JbnB1dCh7IGluZGV4LCBrZXksIHZhbHVlOiB7IHByZXZpb3VzOiB2YWx1ZSwgbmV3OiAkZXZlbnQudGFyZ2V0LnZhbHVlIH0sIHBhdGggfSlcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjwhLS0gRU5EIC0tPlxuIl19
@@ -22,6 +22,7 @@ export const OPTIONS = {
22
22
  "select",
23
23
  "slider",
24
24
  "otp",
25
+ "button",
25
26
  "api",
26
27
  "api-call",
27
28
  "aadhaar-number",
@@ -33,6 +34,7 @@ export const OPTIONS = {
33
34
  ],
34
35
  disabled: [true, false],
35
36
  properties: {
37
+ button: {},
36
38
  text: {
37
39
  case: ["default", "upper", "lower"]
38
40
  },
@@ -137,6 +139,7 @@ export const FIELD_PROPERTIES_COMMON_CONFIG = {
137
139
  placeholder: ""
138
140
  };
139
141
  export const FIELD_PROPERTIES_CONFIG = {
142
+ button: Object.assign({}, FIELD_PROPERTIES_COMMON_CONFIG),
140
143
  title: Object.assign({}, FIELD_PROPERTIES_COMMON_CONFIG),
141
144
  text: Object.assign(Object.assign({}, FIELD_PROPERTIES_COMMON_CONFIG), { case: "default" }),
142
145
  textarea: Object.assign({}, FIELD_PROPERTIES_COMMON_CONFIG),
@@ -167,6 +170,7 @@ export const FIELD_COMMON_CONFIG = {
167
170
  export const FIELD_CONFIG = {
168
171
  title: Object.assign(Object.assign({}, FIELD_COMMON_CONFIG), { type: "title", properties: Object.assign({}, FIELD_PROPERTIES_CONFIG.title) }),
169
172
  text: Object.assign(Object.assign({}, FIELD_COMMON_CONFIG), { type: "text", properties: Object.assign({}, FIELD_PROPERTIES_CONFIG.text) }),
173
+ button: Object.assign(Object.assign({}, FIELD_COMMON_CONFIG), { type: "button", properties: Object.assign({}, FIELD_PROPERTIES_CONFIG.button) }),
170
174
  textarea: Object.assign(Object.assign({}, FIELD_COMMON_CONFIG), { type: "textarea", properties: Object.assign({}, FIELD_PROPERTIES_CONFIG.textarea) }),
171
175
  checkbox: Object.assign(Object.assign({}, FIELD_COMMON_CONFIG), { type: "checkbox", properties: Object.assign({}, FIELD_PROPERTIES_CONFIG.checkbox) }),
172
176
  number: Object.assign(Object.assign({}, FIELD_COMMON_CONFIG), { type: "number", properties: Object.assign({}, FIELD_PROPERTIES_CONFIG.number) }),
@@ -189,4 +193,34 @@ export const FIELD_CONFIG = {
189
193
  } }),
190
194
  file: Object.assign(Object.assign({}, FIELD_COMMON_CONFIG), { type: "file", properties: Object.assign({}, FIELD_PROPERTIES_CONFIG.file) })
191
195
  };
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5mb3JtLWVkaXRvci5jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rd2lraWQtZm9ybXMvc3JjL2xpYi9idWlsZGVyL2J1aWxkZXItZm9ybS1lZGl0b3IvYnVpbGRlci5mb3JtLWVkaXRvci5jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHO0lBQzNCLEtBQUs7SUFDTCxPQUFPO0lBQ1AsTUFBTTtJQUNOLFVBQVU7SUFDVixZQUFZO0lBQ1osWUFBWTtJQUNaLFFBQVE7Q0FDVCxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ3JCLElBQUksRUFBRTtRQUNKLE9BQU87UUFDUCxNQUFNO1FBQ04sVUFBVTtRQUNWLFVBQVU7UUFDVixRQUFRO1FBQ1IsTUFBTTtRQUNOLE9BQU87UUFDUCxPQUFPO1FBQ1AsWUFBWTtRQUNaLHNCQUFzQjtRQUN0QixRQUFRO1FBQ1IsUUFBUTtRQUNSLEtBQUs7UUFDTCxLQUFLO1FBQ0wsVUFBVTtRQUNWLGdCQUFnQjtRQUNoQixlQUFlO1FBQ2YsT0FBTztRQUNQLGVBQWU7UUFDZixNQUFNO1FBQ04sTUFBTTtLQUNQO0lBQ0QsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztJQUN2QixVQUFVLEVBQUU7UUFDVixJQUFJLEVBQUU7WUFDSixJQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQztTQUNwQztRQUNELFFBQVEsRUFBRTtZQUNSLFlBQVksRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7WUFDL0IsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztZQUNoQixPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQztTQUN2QztRQUNELE1BQU0sRUFBRTtZQUNOLE9BQU8s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LE1BQU0sRUFDWixVQUFVLG9CQUNMLHVCQUF1QixDQUFDLElBQUksSUFFbEM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFRBQkxFX0NPTFVNTlMgPSBbXG4gIFwia2V5XCIsXG4gIFwibGFiZWxcIixcbiAgXCJ0eXBlXCIsXG4gIFwiZGlzYWJsZWRcIixcbiAgXCJ2YWxpZGF0b3JzXCIsXG4gIFwicHJvcGVydGllc1wiLFxuICBcImRlbGV0ZVwiXG5dO1xuXG5leHBvcnQgY29uc3QgT1BUSU9OUyA9IHtcbiAgdHlwZTogW1xuICAgIFwidGl0bGVcIixcbiAgICBcInRleHRcIixcbiAgICBcInRleHRhcmVhXCIsXG4gICAgXCJjaGVja2JveFwiLFxuICAgIFwibnVtYmVyXCIsXG4gICAgXCJkYXRlXCIsXG4gICAgXCJwaG9uZVwiLFxuICAgIFwicmFkaW9cIixcbiAgICBcInJhZGlvLWxpc3RcIixcbiAgICBcImRyb3Bkb3duLXdpdGgtc2VhcmNoXCIsXG4gICAgXCJzZWxlY3RcIixcbiAgICBcInNsaWRlclwiLFxuICAgIFwib3RwXCIsXG4gICAgXCJhcGlcIixcbiAgICBcImFwaS1jYWxsXCIsXG4gICAgXCJhYWRoYWFyLW51bWJlclwiLFxuICAgIFwiaW5wdXQtYWFkaGFhclwiLFxuICAgIFwiaW1hZ2VcIixcbiAgICBcInByZXZpZXctaW1hZ2VcIixcbiAgICBcImh0bWxcIixcbiAgICBcImZpbGVcIlxuICBdLFxuICBkaXNhYmxlZDogW3RydWUsIGZhbHNlXSxcbiAgcHJvcGVydGllczoge1xuICAgIHRleHQ6IHtcbiAgICAgIGNhc2U6IFtcImRlZmF1bHRcIiwgXCJ1cHBlclwiLCBcImxvd2VyXCJdXG4gICAgfSxcbiAgICBjaGVja2JveDoge1xuICAgICAgY29udGVudEFsaWduOiBbXCJsZWZ0XCIsIFwicmlnaHRcIl0sXG4gICAgICBzaXplOiBbXCJtXCIsIFwibFwiXSxcbiAgICAgIHZhcmlhbnQ6IFtcImJhc2ljXCIsIFwiYmxvY2tcIiwgXCJsYWJlbGVkXCJdXG4gICAgfSxcbiAgICBudW1iZXI6IHtcbiAgICAgIGRlY2ltYWw6IFt0cnVlLCBmYWxzZV1cbiAgICB9LFxuICAgIHBob25lOiB7XG4gICAgICByZW1vdmVDb3VudHJ5Q29kZUZyb21WYWx1ZTogW3RydWUsIGZhbHNlXVxuICAgIH0sXG4gICAgcmFkaW86IHtcbiAgICAgIG9yaWVudGF0aW9uOiBbXCJob3Jpem9udGFsXCIsIFwidmVydGljYWxcIl0sXG4gICAgICBzaXplOiBbXCJsXCIsIFwibVwiXVxuICAgIH0sXG4gICAgXCJyYWRpby1saXN0XCI6IHtcbiAgICAgIG9yaWVudGF0aW9uOiBbXCJob3Jpem9udGFsXCIsIFwidmVydGljYWxcIl0sXG4gICAgICBzaXplOiBbXCJsXCIsIFwibVwiXVxuICAgIH0sXG4gICAgc2xpZGVyOiB7XG4gICAgICBzaXplOiBbXCJzXCIsIFwibVwiLCBcImxcIl1cbiAgICB9LFxuICAgIG90cDoge1xuICAgICAgc2l6ZTogW1wic1wiLCBcIm1cIiwgXCJsXCJdLFxuICAgICAgbW9kZTogW1wic2luZ2xlXCIsIFwibXVsdGlwbGVcIl1cbiAgICB9LFxuICAgIGltYWdlOiB7XG4gICAgICBpbWFnZVR5cGU6IFtcImJhc2U2NFwiLCBcInVybFwiXSxcbiAgICAgIGxvYWRpbmdUeXBlOiBbXCJhdXRvXCIsIFwibGF6eVwiLCBcImVhZ2VyXCJdXG4gICAgfSxcbiAgICBcInByZXZpZXctaW1hZ2VcIjoge1xuICAgICAgaW1hZ2VUeXBlOiBbXCJiYXNlNjRcIiwgXCJ1cmxcIl0sXG4gICAgICBsb2FkaW5nVHlwZTogW1wiYXV0b1wiLCBcImxhenlcIiwgXCJlYWdlclwiXVxuICAgIH0sXG4gICAgZmlsZToge31cbiAgfSxcbiAgdmFsaWRhdG9yczoge1xuICAgIHJlcXVpcmVkOiBbdHJ1ZSwgZmFsc2VdLFxuICAgIHBhdHRlcm46IHtcbiAgICAgIGtleTogW1xuICAgICAgICBcIklTX0FBREhBQVJfTlVNQkVSXCIsXG4gICAgICAgIFwiSVNfQkFOS19BQ0NPVU5UX05PXCIsXG4gICAgICAgIFwiSVNfQkFOS19TV0lGVF9DT0RFXCIsXG4gICAgICAgIFwiSVNfQklSVEhfQ0VSVElGSUNBVEVfTk9cIixcbiAgICAgICAgXCJJU19DSEVRVUVfTk9cIixcbiAgICAgICAgXCJJU19DSU5cIixcbiAgICAgICAgXCJJU19DUkVESVRfQ0FSRF9OT1wiLFxuICAgICAgICBcIklTX0NLWUNfTk9cIixcbiAgICAgICAgXCJJU19EUklWSU5HX0xJQ0VOU0VcIixcbiAgICAgICAgXCJJU19HU1RJTlwiLFxuICAgICAgICBcIklTX0lGU0NfTk9cIixcbiAgICAgICAgXCJJU19NSUNSX0NPREVcIixcbiAgICAgICAgXCJJU19NT0JJTEVfTk9cIixcbiAgICAgICAgXCJJU19ORUZUX09SX1JUR1NfTk9cIixcbiAgICAgICAgXCJJU19QQU5fTlVNQkVSXCIsXG4gICAgICAgIFwiSVNfUEFTU1BPUlRcIixcbiAgICAgICAgXCJJU19QSE9ORV9OT1wiLFxuICAgICAgICBcIklTX1BJTkNPREVcIixcbiAgICAgICAgXCJJU19QVVJDSEFTRV9PUkRFUl9OT1wiLFxuICAgICAgICBcIklTX1JBVElPTl9DQVJEX05PXCIsXG4gICAgICAgIFwiSVNfU0VSVklDRV9UQVhfTk9cIixcbiAgICAgICAgXCJJU19TT0NJQUxfU0VDVVJJVFlfTk9cIixcbiAgICAgICAgXCJJU19VUElfVFJBTlNBQ1RJT05fUkVGRVJFTkNFX05PXCIsXG4gICAgICAgIFwiSVNfVkFUX1RJTl9OT1wiLFxuICAgICAgICBcIklTX1ZFSElDTEVfUkVHSVNUUkFUSU9OX05PXCIsXG4gICAgICAgIFwiSVNfVk9URVJfSURcIixcbiAgICAgICAgXCJJU19BTFBIQVwiLFxuICAgICAgICBcIklTX0FMUEhBTlVNRVJJQ1wiLFxuICAgICAgICBcIklTX0JPT0xFQU5cIixcbiAgICAgICAgXCJJU19FTUFJTFwiLFxuICAgICAgICBcIklTX0VNUFRZXCIsXG4gICAgICAgIFwiSVNfRkFMU0VcIixcbiAgICAgICAgXCJJU19IVE1MXCIsXG4gICAgICAgIFwiSVNfSU5URUdFUlwiLFxuICAgICAgICBcIklTX0pTT05cIixcbiAgICAgICAgXCJJU19MT1dFUkNBU0VcIixcbiAgICAgICAgXCJJU19OT1RfRU1QVFlcIixcbiAgICAgICAgXCJJU19OVU1CRVJcIixcbiAgICAgICAgXCJJU19UUlVFXCIsXG4gICAgICAgIFwiSVNfVVBQRVJDQVNFXCIsXG4gICAgICAgIFwiQ1VTVE9NXCJcbiAgICAgIF1cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBGSUVMRF9WQUxJREFUT1JTX0NPTkZJRyA9IHtcbiAgcmVxdWlyZWQ6IGZhbHNlLFxuICBtaW5MZW5ndGg6IDAsXG4gIG1heExlbmd0aDogMCxcbiAgcGF0dGVybjoge1xuICAgIGtleTogXCJDVVNUT01cIixcbiAgICBwYXR0ZXJuOiBcIlwiXG4gIH0sXG4gIG1pbjogMCxcbiAgbWF4OiAwXG59O1xuXG5leHBvcnQgY29uc3QgRklFTERfUFJPUEVSVElFU19DT01NT05fQ09ORklHID0ge1xuICByZWFkT25seTogZmFsc2UsXG4gIHBsYWNlaG9sZGVyOiBcIlwiXG59O1xuXG5leHBvcnQgY29uc3QgRklFTERfUFJPUEVSVElFU19DT05GSUcgPSB7XG4gIHRpdGxlOiB7XG4gICAgLi4uRklFTERfUFJPUEVSVElFU19DT01NT05fQ09ORklHXG4gIH0sXG4gIHRleHQ6IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUcsXG4gICAgY2FzZTogXCJkZWZhdWx0XCJcbiAgfSxcbiAgdGV4dGFyZWE6IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUdcbiAgfSxcbiAgY2hlY2tib3g6IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUcsXG4gICAgY29udGVudEFsaWduOiBcInJpZ2h0XCIsXG4gICAgc2l6ZTogXCJsXCIsXG4gICAgdmFyaWFudDogXCJsYWJlbGVkXCJcbiAgfSxcbiAgbnVtYmVyOiB7XG4gICAgLi4uRklFTERfUFJPUEVSVElFU19DT01NT05fQ09ORklHLFxuICAgIGRlY2ltYWw6IGZhbHNlLFxuICAgIG1pbjogLUluZmluaXR5LFxuICAgIG1heDogSW5maW5pdHksXG4gICAgcG9zdGZpeDogXCJcIixcbiAgICBwcmVmaXg6IFwiXCIsXG4gICAgcHJlY2lzaW9uOiAwXG4gIH0sXG4gIGRhdGU6IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUcsXG4gICAgbWluOiB7IG1vbnRoOiAwLCBkYXk6IDAsIHllYXI6IDAgfSxcbiAgICBtYXg6IHsgbW9udGg6IDAsIGRheTogMCwgeWVhcjogMCB9LFxuICAgIG1pbkNhbGN1bGF0ZWQ6IHsgbW9udGg6IDAsIGRheTogMCwgeWVhcjogMCB9LFxuICAgIG1heENhbGN1bGF0ZWQ6IHsgbW9udGg6IDAsIGRheTogMCwgeWVhcjogMCB9XG4gIH0sXG4gIHBob25lOiB7XG4gICAgLi4uRklFTERfUFJPUEVSVElFU19DT01NT05fQ09ORklHLFxuICAgIGNvdW50cnlDb2RlOiBcIis5MVwiLFxuICAgIHBob25lTWFza0FmdGVyQ291bnRyeUNvZGU6IFwiXCIsXG4gICAgcmVtb3ZlQ291bnRyeUNvZGVGcm9tVmFsdWU6IHRydWVcbiAgfSxcbiAgcmFkaW86IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUcsXG4gICAgb3JpZW50YXRpb246IFwidmVydGljYWxcIixcbiAgICBzaXplOiBcImxcIlxuICB9LFxuICBcInJhZGlvLWxpc3RcIjoge1xuICAgIC4uLkZJRUxEX1BST1BFUlRJRVNfQ09NTU9OX0NPTkZJRyxcbiAgICBvcmllbnRhdGlvbjogXCJ2ZXJ0aWNhbFwiLFxuICAgIHNpemU6IFwibFwiXG4gIH0sXG4gIHNlbGVjdDoge1xuICAgIC4uLkZJRUxEX1BST1BFUlRJRVNfQ09NTU9OX0NPTkZJR1xuICB9LFxuICBzbGlkZXI6IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUcsXG4gICAgbWluOiAtSW5maW5pdHksXG4gICAgbWF4OiBJbmZpbml0eSxcbiAgICBxdWFudHVtOiAwLFxuICAgIHNpemU6IFwibVwiLFxuICAgIHN0ZXBzOiAxXG4gIH0sXG4gIG90cDoge1xuICAgIC4uLkZJRUxEX1BST1BFUlRJRVNfQ09NTU9OX0NPTkZJRyxcbiAgICBtYXNrOiBcIlwiLFxuICAgIHNpemU6IFwibVwiLFxuICAgIG1vZGU6IFwibXVsdGlwbGVcIixcbiAgICBvdHBMZW5ndGg6IDZcbiAgfSxcbiAgYXBpOiB7XG4gICAgLi4uRklFTERfUFJPUEVSVElFU19DT01NT05fQ09ORklHXG4gIH0sXG4gIFwiYXBpLWNhbGxcIjoge1xuICAgIC4uLkZJRUxEX1BST1BFUlRJRVNfQ09NTU9OX0NPTkZJR1xuICB9LFxuICBcImFhZGhhYXItbnVtYmVyXCI6IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUdcbiAgfSxcbiAgXCJpbnB1dC1hYWRoYWFyXCI6IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUdcbiAgfSxcbiAgaW1hZ2U6IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUcsXG4gICAgYWx0VGV4dDogXCJcIixcbiAgICBodG1sOiB7IGJlZm9yZTogXCJcIiwgYWZ0ZXI6IFwiXCIgfSxcbiAgICBpbWFnZVR5cGU6IFwidXJsXCIsXG4gICAgbG9hZGluZ1R5cGU6IFwiYXV0b1wiLFxuICAgIHN0eWxlczogXCJcIixcbiAgICBjbGFzczogXCJcIlxuICB9LFxuICBcInByZXZpZXctaW1hZ2VcIjoge1xuICAgIC4uLkZJRUxEX1BST1BFUlRJRVNfQ09NTU9OX0NPTkZJRyxcbiAgICBhbHRUZXh0OiBcIlwiLFxuICAgIGh0bWw6IHsgYmVmb3JlOiBcIlwiLCBhZnRlcjogXCJcIiB9LFxuICAgIGltYWdlVHlwZTogXCJ1cmxcIixcbiAgICBsb2FkaW5nVHlwZTogXCJhdXRvXCIsXG4gICAgc3R5bGVzOiBcIlwiLFxuICAgIGNsYXNzOiBcIlwiXG4gIH0sXG4gIGh0bWw6IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUdcbiAgfSxcbiAgZmlsZToge1xuICAgIC4uLkZJRUxEX1BST1BFUlRJRVNfQ09NTU9OX0NPTkZJR1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgRklFTERfQ09NTU9OX0NPTkZJRyA9IHtcbiAga2V5OiBcIlwiLFxuICBsYWJlbDogXCJcIixcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICB2YWxpZGF0b3JzOiB7XG4gICAgLi4uRklFTERfVkFMSURBVE9SU19DT05GSUdcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IEZJRUxEX0NPTkZJRyA9IHtcbiAgdGl0bGU6IHtcbiAgICAuLi5GSUVMRF9DT01NT05fQ09ORklHLFxuICAgIHR5cGU6IFwidGl0bGVcIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJRy50aXRsZVxuICAgIH1cbiAgfSxcbiAgdGV4dDoge1xuICAgIC4uLkZJRUxEX0NPTU1PTl9DT05GSUcsXG4gICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uRklFTERfUFJPUEVSVElFU19DT05GSUcudGV4dFxuICAgIH1cbiAgfSxcbiAgdGV4dGFyZWE6IHtcbiAgICAuLi5GSUVMRF9DT01NT05fQ09ORklHLFxuICAgIHR5cGU6IFwidGV4dGFyZWFcIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJRy50ZXh0YXJlYVxuICAgIH1cbiAgfSxcbiAgY2hlY2tib3g6IHtcbiAgICAuLi5GSUVMRF9DT01NT05fQ09ORklHLFxuICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJRy5jaGVja2JveFxuICAgIH1cbiAgfSxcbiAgbnVtYmVyOiB7XG4gICAgLi4uRklFTERfQ09NTU9OX0NPTkZJRyxcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIC4uLkZJRUxEX1BST1BFUlRJRVNfQ09ORklHLm51bWJlclxuICAgIH1cbiAgfSxcbiAgZGF0ZToge1xuICAgIC4uLkZJRUxEX0NPTU1PTl9DT05GSUcsXG4gICAgdHlwZTogXCJkYXRlXCIsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uRklFTERfUFJPUEVSVElFU19DT05GSUcuZGF0ZVxuICAgIH1cbiAgfSxcbiAgcGhvbmU6IHtcbiAgICAuLi5GSUVMRF9DT01NT05fQ09ORklHLFxuICAgIHR5cGU6IFwicGhvbmVcIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJRy5waG9uZVxuICAgIH1cbiAgfSxcbiAgcmFkaW86IHtcbiAgICAuLi5GSUVMRF9DT01NT05fQ09ORklHLFxuICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJR1tcInJhZGlvXCJdXG4gICAgfSxcbiAgICBvcHRpb25zOiBbXVxuICB9LFxuICBcInJhZGlvLWxpc3RcIjoge1xuICAgIC4uLkZJRUxEX0NPTU1PTl9DT05GSUcsXG4gICAgdHlwZTogXCJyYWRpby1saXN0XCIsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uRklFTERfUFJPUEVSVElFU19DT05GSUdbXCJyYWRpby1saXN0XCJdXG4gICAgfSxcbiAgICBvcHRpb25zOiBbXVxuICB9LFxuICBzZWxlY3Q6IHtcbiAgICAuLi5GSUVMRF9DT01NT05fQ09ORklHLFxuICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uRklFTERfUFJPUEVSVElFU19DT05GSUdbXCJzZWxlY3RcIl1cbiAgICB9LFxuICAgIG9wdGlvbnM6IFtdXG4gIH0sXG4gIHNsaWRlcjoge1xuICAgIC4uLkZJRUxEX0NPTU1PTl9DT05GSUcsXG4gICAgdHlwZTogXCJzbGlkZXJcIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJRy5zbGlkZXJcbiAgICB9XG4gIH0sXG4gIG90cDoge1xuICAgIC4uLkZJRUxEX0NPTU1PTl9DT05GSUcsXG4gICAgdHlwZTogXCJvdHBcIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJRy5vdHBcbiAgICB9XG4gIH0sXG4gIGFwaToge1xuICAgIC4uLkZJRUxEX0NPTU1PTl9DT05GSUcsXG4gICAgdHlwZTogXCJhcGlcIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJR1tcImFwaVwiXVxuICAgIH1cbiAgfSxcbiAgXCJhcGktY2FsbFwiOiB7XG4gICAgLi4uRklFTERfQ09NTU9OX0NPTkZJRyxcbiAgICB0eXBlOiBcImFwaS1jYWxsXCIsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uRklFTERfUFJPUEVSVElFU19DT05GSUdbXCJhcGktY2FsbFwiXVxuICAgIH1cbiAgfSxcbiAgXCJhYWRoYWFyLW51bWJlclwiOiB7XG4gICAgLi4uRklFTERfQ09NTU9OX0NPTkZJRyxcbiAgICB0eXBlOiBcImFhZGhhYXItbnVtYmVyXCIsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uRklFTERfUFJPUEVSVElFU19DT05GSUdbXCJhYWRoYWFyLW51bWJlclwiXVxuICAgIH1cbiAgfSxcbiAgXCJpbnB1dC1hYWRoYWFyXCI6IHtcbiAgICAuLi5GSUVMRF9DT01NT05fQ09ORklHLFxuICAgIHR5cGU6IFwiaW5wdXQtYWFkaGFhclwiLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIC4uLkZJRUxEX1BST1BFUlRJRVNfQ09ORklHW1wiaW5wdXQtYWFkaGFhclwiXVxuICAgIH1cbiAgfSxcbiAgaW1hZ2U6IHtcbiAgICAuLi5GSUVMRF9DT01NT05fQ09ORklHLFxuICAgIHR5cGU6IFwiaW1hZ2VcIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJR1tcImltYWdlXCJdXG4gICAgfVxuICB9LFxuICBcInByZXZpZXctaW1hZ2VcIjoge1xuICAgIC4uLkZJRUxEX0NPTU1PTl9DT05GSUcsXG4gICAgdHlwZTogXCJwcmV2aWV3LWltYWdlXCIsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uRklFTERfUFJPUEVSVElFU19DT05GSUdbXCJwcmV2aWV3LWltYWdlXCJdXG4gICAgfVxuICB9LFxuICBodG1sOiB7XG4gICAgLi4uRklFTERfQ09NTU9OX0NPTkZJRyxcbiAgICB0eXBlOiBcImh0bWxcIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJRy5odG1sXG4gICAgfSxcbiAgICBodG1sOiB7XG4gICAgICBiZWZvcmU6IFwiXCIsXG4gICAgICBhZnRlcjogXCJcIlxuICAgIH1cbiAgfSxcbiAgZmlsZToge1xuICAgIC4uLkZJRUxEX0NPTU1PTl9DT05GSUcsXG4gICAgdHlwZTogXCJmaWxlXCIsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uRklFTERfUFJPUEVSVElFU19DT05GSUcuZmlsZVxuICAgIH1cbiAgfVxufTtcbiJdfQ==
196
+ export const NOFIELD_CONFIG = {
197
+ required: true,
198
+ type: "FORM",
199
+ props: {
200
+ url: "",
201
+ title: ""
202
+ },
203
+ hidden: false,
204
+ disabled: false,
205
+ dependentOn: [],
206
+ title: "",
207
+ properties: {
208
+ header: {
209
+ logo: { src: "", alt: "Logo", hidden: false },
210
+ backButton: { mode: "TABBED", bypassConfirmation: false, hidden: true },
211
+ title: { hidden: false, label: "" },
212
+ steps: { hidden: false }
213
+ },
214
+ footer: {
215
+ viewFormsButton: {
216
+ bypassConfirmation: false,
217
+ hidden: false,
218
+ label: "Back"
219
+ },
220
+ saveButton: { hidden: false, label: "Save" }
221
+ },
222
+ isUnsavedDataAlertEnabled: false
223
+ },
224
+ fieldGroups: {}
225
+ };
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5mb3JtLWVkaXRvci5jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rd2lraWQtZm9ybXMvc3JjL2xpYi9idWlsZGVyL2J1aWxkZXItZm9ybS1lZGl0b3IvYnVpbGRlci5mb3JtLWVkaXRvci5jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHO0lBQzNCLEtBQUs7SUFDTCxPQUFPO0lBQ1AsTUFBTTtJQUNOLFVBQVU7SUFDVixZQUFZO0lBQ1osWUFBWTtJQUNaLFFBQVE7Q0FDVCxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ3JCLElBQUksRUFBRTtRQUNKLE9BQU87UUFDUCxNQUFNO1FBQ04sVUFBVTtRQUNWLFVBQVU7UUFDVixRQUFRO1FBQ1IsTUFBTTtRQUNOLE9BQU87UUFDUCxPQUFPO1FBQ1AsWUFBWTtRQUNaLHNCQUFzQjtRQUN0QixRQUFRO1FBQ1IsUUFBUTtRQUNSLEtBQUs7UUFDTCxRQUFRO1FBQ1IsS0FBSztRQUNMLFVBQVU7UUFDVixnQkFBZ0I7UUFDaEIsZUFBZTtRQUNmLE9BQU87UUFDUCxlQUFlO1FBQ2YsTUFBTTtRQUNOLE1BQU07S0FDUDtJQUNELFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7SUFDdkIsVUFBVSxFQUFFO1FBQ1YsTUFBTSxFQUFFLEVBQUU7UUFDVixJQUFJLEVBQUU7WUFDSixJQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQztTQUNwQztRQUNELFFBQVEsRUFBRTtZQUNSLFlBQVksRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7WUFDL0IsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztZQUNoQixPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQztT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Q2pDO0lBQ0QsV0FBVyxFQUFFLEVBQUU7Q0FDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBUQUJMRV9DT0xVTU5TID0gW1xuICBcImtleVwiLFxuICBcImxhYmVsXCIsXG4gIFwidHlwZVwiLFxuICBcImRpc2FibGVkXCIsXG4gIFwidmFsaWRhdG9yc1wiLFxuICBcInByb3BlcnRpZXNcIixcbiAgXCJkZWxldGVcIlxuXTtcblxuZXhwb3J0IGNvbnN0IE9QVElPTlMgPSB7XG4gIHR5cGU6IFtcbiAgICBcInRpdGxlXCIsXG4gICAgXCJ0ZXh0XCIsXG4gICAgXCJ0ZXh0YXJlYVwiLFxuICAgIFwiY2hlY2tib3hcIixcbiAgICBcIm51bWJlclwiLFxuICAgIFwiZGF0ZVwiLFxuICAgIFwicGhvbmVcIixcbiAgICBcInJhZGlvXCIsXG4gICAgXCJyYWRpby1saXN0XCIsXG4gICAgXCJkcm9wZG93bi13aXRoLXNlYXJjaFwiLFxuICAgIFwic2VsZWN0XCIsXG4gICAgXCJzbGlkZXJcIixcbiAgICBcIm90cFwiLFxuICAgIFwiYnV0dG9uXCIsXG4gICAgXCJhcGlcIixcbiAgICBcImFwaS1jYWxsXCIsXG4gICAgXCJhYWRoYWFyLW51bWJlclwiLFxuICAgIFwiaW5wdXQtYWFkaGFhclwiLFxuICAgIFwiaW1hZ2VcIixcbiAgICBcInByZXZpZXctaW1hZ2VcIixcbiAgICBcImh0bWxcIixcbiAgICBcImZpbGVcIlxuICBdLFxuICBkaXNhYmxlZDogW3RydWUsIGZhbHNlXSxcbiAgcHJvcGVydGllczoge1xuICAgIGJ1dHRvbjoge30sXG4gICAgdGV4dDoge1xuICAgICAgY2FzZTogW1wiZGVmYXVsdFwiLCBcInVwcGVyXCIsIFwibG93ZXJcIl1cbiAgICB9LFxuICAgIGNoZWNrYm94OiB7XG4gICAgICBjb250ZW50QWxpZ246IFtcImxlZnRcIiwgXCJyaWdodFwiXSxcbiAgICAgIHNpemU6IFtcIm1cIiwgXCJsXCJdLFxuICAgICAgdmFyaWFudDogW1wiYmFzaWNcIiwgXCJibG9ja1wiLCBcImxhYmVsZWRcIl1cbiAgICB9LFxuICAgIG51bWJlcjoge1xuICAgICAgZGVjaW1hbDogW3RydWUsIGZhbHNlXVxuICAgIH0sXG4gICAgcGhvbmU6IHtcbiAgICAgIHJlbW92ZUNvdW50cnlDb2RlRnJvbVZhbHVlOiBbdHJ1ZSwgZmFsc2VdXG4gICAgfSxcbiAgICByYWRpbzoge1xuICAgICAgb3JpZW50YXRpb246IFtcImhvcml6b250YWxcIiwgXCJ2ZXJ0aWNhbFwiXSxcbiAgICAgIHNpemU6IFtcImxcIiwgXCJtXCJdXG4gICAgfSxcbiAgICBcInJhZGlvLWxpc3RcIjoge1xuICAgICAgb3JpZW50YXRpb246IFtcImhvcml6b250YWxcIiwgXCJ2ZXJ0aWNhbFwiXSxcbiAgICAgIHNpemU6IFtcImxcIiwgXCJtXCJdXG4gICAgfSxcbiAgICBzbGlkZXI6IHtcbiAgICAgIHNpemU6IFtcInNcIiwgXCJtXCIsIFwibFwiXVxuICAgIH0sXG4gICAgb3RwOiB7XG4gICAgICBzaXplOiBbXCJzXCIsIFwibVwiLCBcImxcIl0sXG4gICAgICBtb2RlOiBbXCJzaW5nbGVcIiwgXCJtdWx0aXBsZVwiXVxuICAgIH0sXG4gICAgaW1hZ2U6IHtcbiAgICAgIGltYWdlVHlwZTogW1wiYmFzZTY0XCIsIFwidXJsXCJdLFxuICAgICAgbG9hZGluZ1R5cGU6IFtcImF1dG9cIiwgXCJsYXp5XCIsIFwiZWFnZXJcIl1cbiAgICB9LFxuICAgIFwicHJldmlldy1pbWFnZVwiOiB7XG4gICAgICBpbWFnZVR5cGU6IFtcImJhc2U2NFwiLCBcInVybFwiXSxcbiAgICAgIGxvYWRpbmdUeXBlOiBbXCJhdXRvXCIsIFwibGF6eVwiLCBcImVhZ2VyXCJdXG4gICAgfSxcbiAgICBmaWxlOiB7fVxuICB9LFxuICB2YWxpZGF0b3JzOiB7XG4gICAgcmVxdWlyZWQ6IFt0cnVlLCBmYWxzZV0sXG4gICAgcGF0dGVybjoge1xuICAgICAga2V5OiBbXG4gICAgICAgIFwiSVNfQUFESEFBUl9OVU1CRVJcIixcbiAgICAgICAgXCJJU19CQU5LX0FDQ09VTlRfTk9cIixcbiAgICAgICAgXCJJU19CQU5LX1NXSUZUX0NPREVcIixcbiAgICAgICAgXCJJU19CSVJUSF9DRVJUSUZJQ0FURV9OT1wiLFxuICAgICAgICBcIklTX0NIRVFVRV9OT1wiLFxuICAgICAgICBcIklTX0NJTlwiLFxuICAgICAgICBcIklTX0NSRURJVF9DQVJEX05PXCIsXG4gICAgICAgIFwiSVNfQ0tZQ19OT1wiLFxuICAgICAgICBcIklTX0RSSVZJTkdfTElDRU5TRVwiLFxuICAgICAgICBcIklTX0dTVElOXCIsXG4gICAgICAgIFwiSVNfSUZTQ19OT1wiLFxuICAgICAgICBcIklTX01JQ1JfQ09ERVwiLFxuICAgICAgICBcIklTX01PQklMRV9OT1wiLFxuICAgICAgICBcIklTX05FRlRfT1JfUlRHU19OT1wiLFxuICAgICAgICBcIklTX1BBTl9OVU1CRVJcIixcbiAgICAgICAgXCJJU19QQVNTUE9SVFwiLFxuICAgICAgICBcIklTX1BIT05FX05PXCIsXG4gICAgICAgIFwiSVNfUElOQ09ERVwiLFxuICAgICAgICBcIklTX1BVUkNIQVNFX09SREVSX05PXCIsXG4gICAgICAgIFwiSVNfUkFUSU9OX0NBUkRfTk9cIixcbiAgICAgICAgXCJJU19TRVJWSUNFX1RBWF9OT1wiLFxuICAgICAgICBcIklTX1NPQ0lBTF9TRUNVUklUWV9OT1wiLFxuICAgICAgICBcIklTX1VQSV9UUkFOU0FDVElPTl9SRUZFUkVOQ0VfTk9cIixcbiAgICAgICAgXCJJU19WQVRfVElOX05PXCIsXG4gICAgICAgIFwiSVNfVkVISUNMRV9SRUdJU1RSQVRJT05fTk9cIixcbiAgICAgICAgXCJJU19WT1RFUl9JRFwiLFxuICAgICAgICBcIklTX0FMUEhBXCIsXG4gICAgICAgIFwiSVNfQUxQSEFOVU1FUklDXCIsXG4gICAgICAgIFwiSVNfQk9PTEVBTlwiLFxuICAgICAgICBcIklTX0VNQUlMXCIsXG4gICAgICAgIFwiSVNfRU1QVFlcIixcbiAgICAgICAgXCJJU19GQUxTRVwiLFxuICAgICAgICBcIklTX0hUTUxcIixcbiAgICAgICAgXCJJU19JTlRFR0VSXCIsXG4gICAgICAgIFwiSVNfSlNPTlwiLFxuICAgICAgICBcIklTX0xPV0VSQ0FTRVwiLFxuICAgICAgICBcIklTX05PVF9FTVBUWVwiLFxuICAgICAgICBcIklTX05VTUJFUlwiLFxuICAgICAgICBcIklTX1RSVUVcIixcbiAgICAgICAgXCJJU19VUFBFUkNBU0VcIixcbiAgICAgICAgXCJDVVNUT01cIlxuICAgICAgXVxuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IEZJRUxEX1ZBTElEQVRPUlNfQ09ORklHID0ge1xuICByZXF1aXJlZDogZmFsc2UsXG4gIG1pbkxlbmd0aDogMCxcbiAgbWF4TGVuZ3RoOiAwLFxuICBwYXR0ZXJuOiB7XG4gICAga2V5OiBcIkNVU1RPTVwiLFxuICAgIHBhdHRlcm46IFwiXCJcbiAgfSxcbiAgbWluOiAwLFxuICBtYXg6IDBcbn07XG5cbmV4cG9ydCBjb25zdCBGSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUcgPSB7XG4gIHJlYWRPbmx5OiBmYWxzZSxcbiAgcGxhY2Vob2xkZXI6IFwiXCJcbn07XG5cbmV4cG9ydCBjb25zdCBGSUVMRF9QUk9QRVJUSUVTX0NPTkZJRyA9IHtcbiAgYnV0dG9uOiB7XG4gICAgLi4uRklFTERfUFJPUEVSVElFU19DT01NT05fQ09ORklHXG4gIH0sXG4gIHRpdGxlOiB7XG4gICAgLi4uRklFTERfUFJPUEVSVElFU19DT01NT05fQ09ORklHXG4gIH0sXG4gIHRleHQ6IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUcsXG4gICAgY2FzZTogXCJkZWZhdWx0XCJcbiAgfSxcbiAgdGV4dGFyZWE6IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUdcbiAgfSxcbiAgY2hlY2tib3g6IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUcsXG4gICAgY29udGVudEFsaWduOiBcInJpZ2h0XCIsXG4gICAgc2l6ZTogXCJsXCIsXG4gICAgdmFyaWFudDogXCJsYWJlbGVkXCJcbiAgfSxcbiAgbnVtYmVyOiB7XG4gICAgLi4uRklFTERfUFJPUEVSVElFU19DT01NT05fQ09ORklHLFxuICAgIGRlY2ltYWw6IGZhbHNlLFxuICAgIG1pbjogLUluZmluaXR5LFxuICAgIG1heDogSW5maW5pdHksXG4gICAgcG9zdGZpeDogXCJcIixcbiAgICBwcmVmaXg6IFwiXCIsXG4gICAgcHJlY2lzaW9uOiAwXG4gIH0sXG4gIGRhdGU6IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUcsXG4gICAgbWluOiB7IG1vbnRoOiAwLCBkYXk6IDAsIHllYXI6IDAgfSxcbiAgICBtYXg6IHsgbW9udGg6IDAsIGRheTogMCwgeWVhcjogMCB9LFxuICAgIG1pbkNhbGN1bGF0ZWQ6IHsgbW9udGg6IDAsIGRheTogMCwgeWVhcjogMCB9LFxuICAgIG1heENhbGN1bGF0ZWQ6IHsgbW9udGg6IDAsIGRheTogMCwgeWVhcjogMCB9XG4gIH0sXG4gIHBob25lOiB7XG4gICAgLi4uRklFTERfUFJPUEVSVElFU19DT01NT05fQ09ORklHLFxuICAgIGNvdW50cnlDb2RlOiBcIis5MVwiLFxuICAgIHBob25lTWFza0FmdGVyQ291bnRyeUNvZGU6IFwiXCIsXG4gICAgcmVtb3ZlQ291bnRyeUNvZGVGcm9tVmFsdWU6IHRydWVcbiAgfSxcbiAgcmFkaW86IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUcsXG4gICAgb3JpZW50YXRpb246IFwidmVydGljYWxcIixcbiAgICBzaXplOiBcImxcIlxuICB9LFxuICBcInJhZGlvLWxpc3RcIjoge1xuICAgIC4uLkZJRUxEX1BST1BFUlRJRVNfQ09NTU9OX0NPTkZJRyxcbiAgICBvcmllbnRhdGlvbjogXCJ2ZXJ0aWNhbFwiLFxuICAgIHNpemU6IFwibFwiXG4gIH0sXG4gIHNlbGVjdDoge1xuICAgIC4uLkZJRUxEX1BST1BFUlRJRVNfQ09NTU9OX0NPTkZJR1xuICB9LFxuICBzbGlkZXI6IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUcsXG4gICAgbWluOiAtSW5maW5pdHksXG4gICAgbWF4OiBJbmZpbml0eSxcbiAgICBxdWFudHVtOiAwLFxuICAgIHNpemU6IFwibVwiLFxuICAgIHN0ZXBzOiAxXG4gIH0sXG4gIG90cDoge1xuICAgIC4uLkZJRUxEX1BST1BFUlRJRVNfQ09NTU9OX0NPTkZJRyxcbiAgICBtYXNrOiBcIlwiLFxuICAgIHNpemU6IFwibVwiLFxuICAgIG1vZGU6IFwibXVsdGlwbGVcIixcbiAgICBvdHBMZW5ndGg6IDZcbiAgfSxcbiAgYXBpOiB7XG4gICAgLi4uRklFTERfUFJPUEVSVElFU19DT01NT05fQ09ORklHXG4gIH0sXG4gIFwiYXBpLWNhbGxcIjoge1xuICAgIC4uLkZJRUxEX1BST1BFUlRJRVNfQ09NTU9OX0NPTkZJR1xuICB9LFxuICBcImFhZGhhYXItbnVtYmVyXCI6IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUdcbiAgfSxcbiAgXCJpbnB1dC1hYWRoYWFyXCI6IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUdcbiAgfSxcbiAgaW1hZ2U6IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUcsXG4gICAgYWx0VGV4dDogXCJcIixcbiAgICBodG1sOiB7IGJlZm9yZTogXCJcIiwgYWZ0ZXI6IFwiXCIgfSxcbiAgICBpbWFnZVR5cGU6IFwidXJsXCIsXG4gICAgbG9hZGluZ1R5cGU6IFwiYXV0b1wiLFxuICAgIHN0eWxlczogXCJcIixcbiAgICBjbGFzczogXCJcIlxuICB9LFxuICBcInByZXZpZXctaW1hZ2VcIjoge1xuICAgIC4uLkZJRUxEX1BST1BFUlRJRVNfQ09NTU9OX0NPTkZJRyxcbiAgICBhbHRUZXh0OiBcIlwiLFxuICAgIGh0bWw6IHsgYmVmb3JlOiBcIlwiLCBhZnRlcjogXCJcIiB9LFxuICAgIGltYWdlVHlwZTogXCJ1cmxcIixcbiAgICBsb2FkaW5nVHlwZTogXCJhdXRvXCIsXG4gICAgc3R5bGVzOiBcIlwiLFxuICAgIGNsYXNzOiBcIlwiXG4gIH0sXG4gIGh0bWw6IHtcbiAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTU1PTl9DT05GSUdcbiAgfSxcbiAgZmlsZToge1xuICAgIC4uLkZJRUxEX1BST1BFUlRJRVNfQ09NTU9OX0NPTkZJR1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgRklFTERfQ09NTU9OX0NPTkZJRyA9IHtcbiAga2V5OiBcIlwiLFxuICBsYWJlbDogXCJcIixcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICB2YWxpZGF0b3JzOiB7XG4gICAgLi4uRklFTERfVkFMSURBVE9SU19DT05GSUdcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IEZJRUxEX0NPTkZJRyA9IHtcbiAgdGl0bGU6IHtcbiAgICAuLi5GSUVMRF9DT01NT05fQ09ORklHLFxuICAgIHR5cGU6IFwidGl0bGVcIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJRy50aXRsZVxuICAgIH1cbiAgfSxcbiAgdGV4dDoge1xuICAgIC4uLkZJRUxEX0NPTU1PTl9DT05GSUcsXG4gICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uRklFTERfUFJPUEVSVElFU19DT05GSUcudGV4dFxuICAgIH1cbiAgfSxcbiAgYnV0dG9uOiB7XG4gICAgLi4uRklFTERfQ09NTU9OX0NPTkZJRyxcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIC4uLkZJRUxEX1BST1BFUlRJRVNfQ09ORklHLmJ1dHRvblxuICAgIH1cbiAgfSxcbiAgdGV4dGFyZWE6IHtcbiAgICAuLi5GSUVMRF9DT01NT05fQ09ORklHLFxuICAgIHR5cGU6IFwidGV4dGFyZWFcIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJRy50ZXh0YXJlYVxuICAgIH1cbiAgfSxcbiAgY2hlY2tib3g6IHtcbiAgICAuLi5GSUVMRF9DT01NT05fQ09ORklHLFxuICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJRy5jaGVja2JveFxuICAgIH1cbiAgfSxcbiAgbnVtYmVyOiB7XG4gICAgLi4uRklFTERfQ09NTU9OX0NPTkZJRyxcbiAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIC4uLkZJRUxEX1BST1BFUlRJRVNfQ09ORklHLm51bWJlclxuICAgIH1cbiAgfSxcbiAgZGF0ZToge1xuICAgIC4uLkZJRUxEX0NPTU1PTl9DT05GSUcsXG4gICAgdHlwZTogXCJkYXRlXCIsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uRklFTERfUFJPUEVSVElFU19DT05GSUcuZGF0ZVxuICAgIH1cbiAgfSxcbiAgcGhvbmU6IHtcbiAgICAuLi5GSUVMRF9DT01NT05fQ09ORklHLFxuICAgIHR5cGU6IFwicGhvbmVcIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJRy5waG9uZVxuICAgIH1cbiAgfSxcbiAgcmFkaW86IHtcbiAgICAuLi5GSUVMRF9DT01NT05fQ09ORklHLFxuICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJR1tcInJhZGlvXCJdXG4gICAgfSxcbiAgICBvcHRpb25zOiBbXVxuICB9LFxuICBcInJhZGlvLWxpc3RcIjoge1xuICAgIC4uLkZJRUxEX0NPTU1PTl9DT05GSUcsXG4gICAgdHlwZTogXCJyYWRpby1saXN0XCIsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uRklFTERfUFJPUEVSVElFU19DT05GSUdbXCJyYWRpby1saXN0XCJdXG4gICAgfSxcbiAgICBvcHRpb25zOiBbXVxuICB9LFxuICBzZWxlY3Q6IHtcbiAgICAuLi5GSUVMRF9DT01NT05fQ09ORklHLFxuICAgIHR5cGU6IFwic2VsZWN0XCIsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uRklFTERfUFJPUEVSVElFU19DT05GSUdbXCJzZWxlY3RcIl1cbiAgICB9LFxuICAgIG9wdGlvbnM6IFtdXG4gIH0sXG4gIHNsaWRlcjoge1xuICAgIC4uLkZJRUxEX0NPTU1PTl9DT05GSUcsXG4gICAgdHlwZTogXCJzbGlkZXJcIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJRy5zbGlkZXJcbiAgICB9XG4gIH0sXG4gIG90cDoge1xuICAgIC4uLkZJRUxEX0NPTU1PTl9DT05GSUcsXG4gICAgdHlwZTogXCJvdHBcIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJRy5vdHBcbiAgICB9XG4gIH0sXG4gIGFwaToge1xuICAgIC4uLkZJRUxEX0NPTU1PTl9DT05GSUcsXG4gICAgdHlwZTogXCJhcGlcIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJR1tcImFwaVwiXVxuICAgIH1cbiAgfSxcbiAgXCJhcGktY2FsbFwiOiB7XG4gICAgLi4uRklFTERfQ09NTU9OX0NPTkZJRyxcbiAgICB0eXBlOiBcImFwaS1jYWxsXCIsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uRklFTERfUFJPUEVSVElFU19DT05GSUdbXCJhcGktY2FsbFwiXVxuICAgIH1cbiAgfSxcbiAgXCJhYWRoYWFyLW51bWJlclwiOiB7XG4gICAgLi4uRklFTERfQ09NTU9OX0NPTkZJRyxcbiAgICB0eXBlOiBcImFhZGhhYXItbnVtYmVyXCIsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uRklFTERfUFJPUEVSVElFU19DT05GSUdbXCJhYWRoYWFyLW51bWJlclwiXVxuICAgIH1cbiAgfSxcbiAgXCJpbnB1dC1hYWRoYWFyXCI6IHtcbiAgICAuLi5GSUVMRF9DT01NT05fQ09ORklHLFxuICAgIHR5cGU6IFwiaW5wdXQtYWFkaGFhclwiLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIC4uLkZJRUxEX1BST1BFUlRJRVNfQ09ORklHW1wiaW5wdXQtYWFkaGFhclwiXVxuICAgIH1cbiAgfSxcbiAgaW1hZ2U6IHtcbiAgICAuLi5GSUVMRF9DT01NT05fQ09ORklHLFxuICAgIHR5cGU6IFwiaW1hZ2VcIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJR1tcImltYWdlXCJdXG4gICAgfVxuICB9LFxuICBcInByZXZpZXctaW1hZ2VcIjoge1xuICAgIC4uLkZJRUxEX0NPTU1PTl9DT05GSUcsXG4gICAgdHlwZTogXCJwcmV2aWV3LWltYWdlXCIsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uRklFTERfUFJPUEVSVElFU19DT05GSUdbXCJwcmV2aWV3LWltYWdlXCJdXG4gICAgfVxuICB9LFxuICBodG1sOiB7XG4gICAgLi4uRklFTERfQ09NTU9OX0NPTkZJRyxcbiAgICB0eXBlOiBcImh0bWxcIixcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJRy5odG1sXG4gICAgfSxcbiAgICBodG1sOiB7XG4gICAgICBiZWZvcmU6IFwiXCIsXG4gICAgICBhZnRlcjogXCJcIlxuICAgIH1cbiAgfSxcbiAgZmlsZToge1xuICAgIC4uLkZJRUxEX0NPTU1PTl9DT05GSUcsXG4gICAgdHlwZTogXCJmaWxlXCIsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uRklFTERfUFJPUEVSVElFU19DT05GSUcuZmlsZVxuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IE5PRklFTERfQ09ORklHID0ge1xuICByZXF1aXJlZDogdHJ1ZSxcbiAgdHlwZTogXCJGT1JNXCIsXG4gIHByb3BzOiB7XG4gICAgdXJsOiBcIlwiLFxuICAgIHRpdGxlOiBcIlwiXG4gIH0sXG4gIGhpZGRlbjogZmFsc2UsXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgZGVwZW5kZW50T246IFtdLFxuICB0aXRsZTogXCJcIixcbiAgcHJvcGVydGllczoge1xuICAgIGhlYWRlcjoge1xuICAgICAgbG9nbzogeyBzcmM6IFwiXCIsIGFsdDogXCJMb2dvXCIsIGhpZGRlbjogZmFsc2UgfSxcbiAgICAgIGJhY2tCdXR0b246IHsgbW9kZTogXCJUQUJCRURcIiwgYnlwYXNzQ29uZmlybWF0aW9uOiBmYWxzZSwgaGlkZGVuOiB0cnVlIH0sXG4gICAgICB0aXRsZTogeyBoaWRkZW46IGZhbHNlLCBsYWJlbDogXCJcIiB9LFxuICAgICAgc3RlcHM6IHsgaGlkZGVuOiBmYWxzZSB9XG4gICAgfSxcbiAgICBmb290ZXI6IHtcbiAgICAgIHZpZXdGb3Jtc0J1dHRvbjoge1xuICAgICAgICBieXBhc3NDb25maXJtYXRpb246IGZhbHNlLFxuICAgICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgICBsYWJlbDogXCJCYWNrXCJcbiAgICAgIH0sXG4gICAgICBzYXZlQnV0dG9uOiB7IGhpZGRlbjogZmFsc2UsIGxhYmVsOiBcIlNhdmVcIiB9XG4gICAgfSxcbiAgICBpc1Vuc2F2ZWREYXRhQWxlcnRFbmFibGVkOiBmYWxzZVxuICB9LFxuICBmaWVsZEdyb3Vwczoge31cbn07XG4iXX0=