nuxeo-development-framework 3.2.2 → 3.2.4

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.
Files changed (17) hide show
  1. package/bundles/nuxeo-development-framework.umd.js +72 -31
  2. package/bundles/nuxeo-development-framework.umd.js.map +1 -1
  3. package/esm2015/lib/components/cts-tags/components/correspondence-tags/correspondence-tags.component.js +24 -15
  4. package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.js +13 -2
  5. package/esm2015/lib/components/dynamic-table/dynamic-table/dynamic-table.component.js +2 -2
  6. package/esm2015/lib/components/file-manger/components/create-modal/create-modal.component.js +22 -9
  7. package/esm2015/lib/components/file-manger/components/publish-dialog/publish-dialog.component.js +2 -2
  8. package/esm2015/lib/components/file-manger/components/scan-modal/scan-modal.component.js +1 -1
  9. package/esm2015/lib/components/file-manger/components/sidepanel/sidepanel.component.js +1 -1
  10. package/esm2015/lib/components/file-manger/components/update-modal/update-modal.component.js +12 -4
  11. package/fesm2015/nuxeo-development-framework.js +62 -22
  12. package/fesm2015/nuxeo-development-framework.js.map +1 -1
  13. package/lib/components/cts-tags/components/correspondence-tags/correspondence-tags.component.d.ts +6 -2
  14. package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.d.ts +2 -1
  15. package/lib/components/file-manger/components/create-modal/create-modal.component.d.ts +1 -0
  16. package/lib/components/file-manger/components/update-modal/update-modal.component.d.ts +1 -0
  17. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { Component, Inject } from '@angular/core';
1
+ import { Component, HostListener, Inject } from '@angular/core';
2
2
  import { Validators } from '@angular/forms';
3
3
  import { MAT_DIALOG_DATA } from '@angular/material/dialog';
4
4
  import * as moment from 'moment';
@@ -76,6 +76,16 @@ export class CreateModalComponent {
76
76
  });
77
77
  });
78
78
  }
79
+ KeyUpEvent(event) {
80
+ if (this.addingProperties && this.uploadMangmentService.failedFiles.length === 0) {
81
+ if (this.uploadMangmentService.uploadedFilesStatus.uploadInProgress && !this.disableCreateWhenFinishBtn) {
82
+ this.createWhenFinish();
83
+ }
84
+ else {
85
+ this.createDocument();
86
+ }
87
+ }
88
+ }
79
89
  ngOnInit() {
80
90
  this.langSubscription = this.translationService.isArabic.subscribe(res => {
81
91
  this.isArabic = res;
@@ -183,16 +193,16 @@ export class CreateModalComponent {
183
193
  this.uploadMangmentService.GeneralFormValidation = this.checkValidation();
184
194
  if (this.uploadMangmentService.GeneralFormValidation) {
185
195
  let apiCalls = [];
186
- if ((_a = this.data) === null || _a === void 0 ? void 0 : _a.path.includes('/default-domain/workspaces/DMS/')) {
187
- this.constructPayLoad(this.uploadMangmentService.uploadedFilesStatus.uploadedFiles);
196
+ if ((_a = this.data) === null || _a === void 0 ? void 0 : _a.path.includes('/default-domain/workspaces/DMSWorkspaces')) {
197
+ this.constructPayLoadToWorkSpace(this.uploadMangmentService.uploadedFilesStatus.uploadedFiles);
188
198
  this.payloadList.map(payload => {
189
- apiCalls.push(this.fileMangerService.createFile(payload, this.fileManagerService.selectedFolderId));
199
+ apiCalls.push(this.fileMangerService.createFile(payload, this.fileManagerService.selectedFolderId, 'DMS.CreateDocumentFromBlob'));
190
200
  });
191
201
  }
192
202
  else {
193
- this.constructPayLoadToWorkSpace(this.uploadMangmentService.uploadedFilesStatus.uploadedFiles);
203
+ this.constructPayLoad(this.uploadMangmentService.uploadedFilesStatus.uploadedFiles);
194
204
  this.payloadList.map(payload => {
195
- apiCalls.push(this.fileMangerService.createFile(payload, this.fileManagerService.selectedFolderId, 'DMS.CreateDocumentFromBlob'));
205
+ apiCalls.push(this.fileMangerService.createFile(payload, this.fileManagerService.selectedFolderId));
196
206
  });
197
207
  }
198
208
  forkJoin(apiCalls).subscribe(response => {
@@ -457,7 +467,7 @@ export class CreateModalComponent {
457
467
  }
458
468
  }
459
469
  CreateModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: CreateModalComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i2.UploadManagmentService }, { token: i3.DialogMangmentService }, { token: i4.FileManagerService }, { token: i5.CustomToastrService }, { token: i6.FormBuilder }, { token: i7.AdapterService }, { token: i4.FileManagerService }, { token: i8.AppConfigService }, { token: i9.DateHelperService }, { token: i10.TranslationService }, { token: i11.UserService }, { token: i12.NuxeoService }, { token: 'environment' }, { token: i13.DynamicFormService }], target: i0.ɵɵFactoryTarget.Component });
460
- CreateModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: CreateModalComponent, selector: "app-create-modal", ngImport: i0, template: "<div class=\"relative w-full h-full\">\r\n <div class=\"iner-wrapper\" [ngClass]=\"{ 'd-flex': addingProperties }\">\r\n <div *ngIf=\"addingProperties\" class=\"properties-section p-3 overflow-x-hidden overflow-y-auto\">\r\n <div class=\"\" *ngIf=\"selectedFile && source === 'fileManger' && showStaticForm\">\r\n <div class=\"mb-5\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.FILE_TYPE\" | translate }}\r\n </div>\r\n <div class=\"text-base text-gray-900\">{{ isArabic ? fileType.arabicText : fileType.englishText }}\r\n </div>\r\n </div>\r\n <div class=\"file-fields mt-3\" SetRtl>\r\n <form [formGroup]=\"fileForm\">\r\n <!-- -----------------old static form ---------------------- -->\r\n <div>\r\n <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.TITLE\" | translate\r\n }}<span class=\"text-red-500\">*</span>\r\n </div>\r\n <input class=\"\r\n field-style\r\n \" formControlName=\"title\" placeholder=\" {{ 'CREATE.TITLE' | translate}}\" />\r\n </div>\r\n <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.DESCRIPTION\" | translate }}\r\n </div>\r\n <input class=\"field-style\" formControlName=\"description\"\r\n placeholder=\" {{ 'CREATE.DESCRIPTION' | translate}}\" />\r\n </div>\r\n </div>\r\n <!-- ---------------------------------- -->\r\n\r\n <!------------------ new statis form ---------------------------->\r\n <div *ngIf=\"usingExtraFields\">\r\n <app-dynamic-fields-renderer [form]=\"fileForm\" [agencyNameFilter]=\"agencyNameFilter\"\r\n [countryNameFilter]=\"countryNameFilter\"></app-dynamic-fields-renderer>\r\n <!-- <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.DOCUMENT_SUBJECT\" | translate\r\n }}<span class=\"text-red-500\">*</span>\r\n </div>\r\n <input class=\"field-style\" formControlName=\"subject\" \r\n placeholder=\" {{ 'CREATE.DOCUMENT_SUBJECT' | translate}}\"/>\r\n </div>\r\n <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.DOCUMENT_NUMBER\" | translate }}\r\n </div>\r\n <input class=\"field-style\" \r\n formControlName=\"documentNumber\" \r\n placeholder=\" {{ 'CREATE.DOCUMENT_NUMBER' | translate}}\"/>\r\n </div>\r\n <div class=\"single-field mb-3\">\r\n \r\n <cts-dynamic-form-hijri-dateitem\r\n formControlName=\"gdocumentDate\"\r\n label=\"CREATE.DOCUMENT_DATE\"\r\n >\r\n </cts-dynamic-form-hijri-dateitem>\r\n </div>\r\n <div class=\"single-field mb-3\">\r\n <app-dynamic-form-vocabulary-item [label]=\"'CREATE.SCRECY_LEVEL'\" [bindLabel]=\"'label'\"\r\n [bindValue]=\"'id'\" placeholder=\"{{ 'VOCABULARY.SELECT_ITEM' | translate }}\" [multiple]=\"false\"\r\n [searchable]=\"false\" [closeOnSelect]=\"true\" [hideSelectedItems]=\"false\"\r\n [vocabularyType]=\"'VOC_SecrecyLevel'\" \r\n formControlName=\"secrecyLevel\">\r\n </app-dynamic-form-vocabulary-item>\r\n </div>\r\n <div class=\"single-field mb-3\">\r\n <app-dynamic-form-vocabulary-item [label]=\"'CREATE.IMPORTANCE_LEVEL'\" [bindLabel]=\"'label'\"\r\n [bindValue]=\"'id'\" placeholder=\"{{ 'VOCABULARY.SELECT_ITEM' | translate }}\" [multiple]=\"false\"\r\n [searchable]=\"false\" [closeOnSelect]=\"true\" [hideSelectedItems]=\"false\"\r\n [vocabularyType]=\"'VOC_Importance'\" \r\n formControlName=\"importanceLevel\">\r\n </app-dynamic-form-vocabulary-item>\r\n </div>\r\n\r\n <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.DEPARTMENT_CODE\" | translate }}\r\n </div>\r\n <app-dynamic-form-department\r\n formControlName=\"departmentCode\"\r\n [placeholder]=\"'please select department'\"\r\n [pp_departmentNestedTree]=\"'PP_OS_Departments'\"\r\n [pp_departmentTree]=\"'PP_OS_Departments'\"\r\n [customPrefix]=\"'osdept'\"\r\n [customParentProperty]=\"'osdepartment_parentDepartmentCode'\"\r\n [useCustomAddEditAction]=\"true\"\r\n >\r\n </app-dynamic-form-department>\r\n </div>\r\n\r\n <div class=\"single-field mb-3\">\r\n <app-translated-vocabulary-select [label]=\"'CREATE.AGENCY_CATEGORY_CODE'\" [arbBindLabel]=\"'label_ar'\" [engBindLabel]=\"'label_en'\"\r\n [bindValue]=\"'id'\" placeholder=\"{{ 'VOCABULARY.SELECT_ITEM' | translate }}\" [multiple]=\"false\" \r\n [searchable]=\"true\" [closeOnSelect]=\"true\" [hideSelectedItems]=\"false\" formControlName=\"agencyCategoryCode\"\r\n [vocbularyId]=\"'VOC_AgencyCategory'\" [useFilter]=\"false\" >\r\n </app-translated-vocabulary-select>\r\n </div>\r\n \r\n <div class=\"single-field mb-3\">\r\n <app-translated-vocabulary-select [label]=\"'CREATE.AGENCY_NAME'\" [arbBindLabel]=\"'label_ar'\" [engBindLabel]=\"'label_en'\"\r\n [bindValue]=\"'id'\" placeholder=\"{{ 'VOCABULARY.SELECT_ITEM' | translate }}\" [multiple]=\"false\"\r\n [searchable]=\"true\" [closeOnSelect]=\"true\" [hideSelectedItems]=\"false\" formControlName=\"agencyName\"\r\n [vocbularyId]=\"'VOC_Agency'\" [filter]=\"agencyNameFilter\" [useFilter]=\"true\">\r\n </app-translated-vocabulary-select>\r\n </div>\r\n \r\n <div class=\"single-field mb-3\">\r\n <app-translated-vocabulary-select [label]=\"'CREATE.COUNTRY_CATEGORY_CODE'\" [arbBindLabel]=\"'label_ar'\" [engBindLabel]=\"'label_en'\"\r\n [bindValue]=\"'id'\" placeholder=\"{{ 'VOCABULARY.SELECT_ITEM' | translate }}\" [multiple]=\"false\"\r\n [searchable]=\"true\" [closeOnSelect]=\"true\" [hideSelectedItems]=\"false\" formControlName=\"countryCategoryCode\"\r\n [vocbularyId]=\"'VOC_CountryCategory'\" [useFilter]=\"false\" >\r\n </app-translated-vocabulary-select>\r\n </div>\r\n \r\n <div class=\"single-field mb-3\">\r\n <app-translated-vocabulary-select [label]=\"'CREATE.COUNTRY_NAME'\" [arbBindLabel]=\"'label_ar'\" [engBindLabel]=\"'label_en'\"\r\n [bindValue]=\"'id'\" placeholder=\"{{ 'VOCABULARY.SELECT_ITEM' | translate }}\" [multiple]=\"false\"\r\n [searchable]=\"true\" [closeOnSelect]=\"true\" [hideSelectedItems]=\"false\" formControlName=\"countryName\"\r\n [vocbularyId]=\"'VOC_Country'\" [filter]=\"countryNameFilter\" [useFilter]=\"true\">\r\n </app-translated-vocabulary-select>\r\n </div>\r\n\r\n <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.REMARKS\" | translate}}\r\n </div>\r\n <input class=\"field-style\" formControlName=\"remarks\" \r\n placeholder=\" {{ 'CREATE.REMARKS' | translate}}\"/>\r\n </div> -->\r\n\r\n </div>\r\n\r\n <!-- ----------------------------------------------------------- -->\r\n </form>\r\n\r\n <div class=\"dynamic-part\" *ngIf=\"showRenderer\">\r\n <app-dynamic-form [form]=\"selectedFile.dynamicForm\" [data]=\"temporaryDyanmicData\"\r\n (change)=\"ondynamicFormChange($event)\"></app-dynamic-form>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"\r\n w-full\r\n h-full\r\n p-3\r\n flex\r\n justify-center\r\n items-center\r\n text-lg text-gray-900\r\n \" *ngIf=\"!selectedFile\">\r\n {{ \"CREATE.SELECT_TOSTART_ADDING\" | translate }}\r\n </div>\r\n </div>\r\n <div class=\"attachment-tab-body overflow-hidden\" [ngClass]=\"{ 'attachment-iner-small-body': addingProperties }\">\r\n <app-attachments [multiple]=\"true\" (onSelectingItem)=\"selectFile($event)\"></app-attachments>\r\n </div>\r\n </div>\r\n <div class=\"w-full text-red-500 text-base text-start px-3\" *ngIf=\"!uploadMangmentService.GeneralFormValidation\">\r\n\r\n {{ \"CREATE.FILL_REQUIRED_FIELD\" | translate }}\r\n </div>\r\n <div class=\"actions-iner-wrapper w-full flex justify-between items-center absolute bottom-0\">\r\n <div class=\"flex\">\r\n <button *ngIf=\"\r\n (uploadMangmentService.uploadedFilesStatus\r\n .uploadInProgress ||\r\n uploadMangmentService.uploadedFilesStatus.uploadedFiles\r\n .length > 0) &&\r\n !addingProperties\r\n \" (click)=\"startAddingProperties()\" class=\"submission-button\">\r\n {{ \"BUTTONS.ADD_PROPERTIES\" | translate }}\r\n </button>\r\n <button *ngIf=\"\r\n addingProperties &&\r\n uploadMangmentService.uploadedFilesStatus.uploadedFiles\r\n .length +\r\n uploadMangmentService.uploadedFilesStatus.allfiles\r\n .length >\r\n 1\r\n \" (click)=\"ApplyChangesToAll()\" [disabled]=\"!selectedFile || !selectedFile.staticFormValid\" [ngClass]=\"{\r\n 'opacity-30 cursor-not-allowed':\r\n !selectedFile || !selectedFile.staticFormValid,\r\n 'cursor-pointer hover:text-white hover:bg-gray-900': !(\r\n !selectedFile || !selectedFile.staticFormValid\r\n )\r\n }\" class=\"submission-button mx-2\">\r\n {{ \"BUTTONS.APPLY_TO_ALL\" | translate }}\r\n </button>\r\n\r\n <div *ngIf=\"\r\n addingProperties &&\r\n !uploadMangmentService.uploadedFilesStatus.uploadInProgress &&\r\n uploadMangmentService.failedFiles.length === 0\r\n \">\r\n <ng-container *ngIf=\"!creating\">\r\n <button (click)=\"createDocument()\" class=\"submission-button relative\">\r\n {{ \"BUTTONS.CREATE\" | translate }}\r\n </button>\r\n </ng-container>\r\n <span class=\"submission-button\" *ngIf=\"creating\">\r\n <mat-spinner [value]=\"90\" [strokeWidth]=\"3\" overlay=\"true\" [diameter]=\"25\" color=\"warn\">\r\n </mat-spinner>\r\n </span>\r\n </div>\r\n\r\n <button *ngIf=\"\r\n addingProperties &&\r\n !uploadMangmentService.uploadedFilesStatus.uploadInProgress &&\r\n uploadMangmentService.failedFiles.length > 0\r\n \" (click)=\"tryAgainCreateDocument()\" class=\"submission-button\">\r\n {{ \"BUTTONS.TRY_AGAIN\" | translate }}\r\n </button>\r\n\r\n <button [disabled]=\"!fileForm?.valid || disableCreateWhenFinishBtn\" *ngIf=\"\r\n addingProperties &&\r\n uploadMangmentService.uploadedFilesStatus.uploadInProgress\r\n \" (click)=\"createWhenFinish()\" class=\"submission-button w-44\">\r\n {{ \"BUTTONS.CREATE_WHEN_FINSH\" | translate }}\r\n </button>\r\n </div>\r\n <div class=\"flex\">\r\n <button class=\"cancelation-button mx-2\" (click)=\"minimizDialog()\" *ngIf=\"\r\n uploadMangmentService.uploadedFilesStatus\r\n .uploadInProgress ||\r\n uploadMangmentService.uploadedFilesStatus\r\n .numberOfUploadedFiles !== 0 ||\r\n addingProperties\r\n \">\r\n {{ \"BUTTONS.MINIMIZED\" | translate }}\r\n </button>\r\n <button class=\"cancelation-button\" (click)=\"closeDialog()\">\r\n {{ \"BUTTONS.CANCEL\" | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n</div>", styles: [".dynamic-part{margin-left:-15px;margin-right:-15px}.iner-wrapper{height:calc(100% - 70px)}.iner-wrapper .properties-section{width:calc(100% - 270px);height:calc(100% - 15px)}.iner-wrapper .attachment-tab-body{height:calc(100% - -20px);overflow-y:auto;overflow-x:hidden}.iner-wrapper .attachment-iner-small-body{width:350px}.rtl .actions-iner-wrapper{direction:ltr}.actions-iner-wrapper{direction:rtl}\n"], components: [{ type: i14.DynamicFieldsRendererComponent, selector: "app-dynamic-fields-renderer", inputs: ["form", "agencyNameFilter", "countryNameFilter", "fields"] }, { type: i15.DynamicFormComponent, selector: "app-dynamic-form", inputs: ["form", "data", "readOnly"], outputs: ["change"] }, { type: i16.AttachmentsComponent, selector: "app-attachments", inputs: ["allowedTypes", "params", "path", "maxSize", "docParams", "multiple", "createDocument", "allowedMaxNumberOfFiles", "source"], outputs: ["uploadSuccess", "uploadError", "onSelectingItem", "itemRemoved"] }, { type: i17.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i18.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i18.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i19.SetRtlDirective, selector: "[SetRtl]" }, { type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "translate": i20.TranslatePipe } });
470
+ CreateModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.4", type: CreateModalComponent, selector: "app-create-modal", host: { listeners: { "document:keyup.enter": "KeyUpEvent($event)" } }, ngImport: i0, template: "<div class=\"relative w-full h-full\">\r\n <div class=\"iner-wrapper\" [ngClass]=\"{ 'd-flex': addingProperties }\">\r\n <div *ngIf=\"addingProperties\" class=\"properties-section p-3 overflow-x-hidden overflow-y-auto\">\r\n <div class=\"\" *ngIf=\"selectedFile && source === 'fileManger' && showStaticForm\">\r\n <div class=\"mb-5\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.FILE_TYPE\" | translate }}\r\n </div>\r\n <div class=\"text-base text-gray-900\">{{ isArabic ? fileType.arabicText : fileType.englishText }}\r\n </div>\r\n </div>\r\n <div class=\"file-fields mt-3\" SetRtl>\r\n <form [formGroup]=\"fileForm\">\r\n <!-- -----------------old static form ---------------------- -->\r\n <div>\r\n <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.TITLE\" | translate\r\n }}<span class=\"text-red-500\">*</span>\r\n </div>\r\n <input class=\"\r\n field-style\r\n \" formControlName=\"title\" placeholder=\" {{ 'CREATE.TITLE' | translate}}\" />\r\n </div>\r\n <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.DESCRIPTION\" | translate }}\r\n </div>\r\n <input class=\"field-style\" formControlName=\"description\"\r\n placeholder=\" {{ 'CREATE.DESCRIPTION' | translate}}\" />\r\n </div>\r\n </div>\r\n <!-- ---------------------------------- -->\r\n\r\n <!------------------ new statis form ---------------------------->\r\n <div *ngIf=\"usingExtraFields\">\r\n <app-dynamic-fields-renderer [form]=\"fileForm\" [agencyNameFilter]=\"agencyNameFilter\"\r\n [countryNameFilter]=\"countryNameFilter\"></app-dynamic-fields-renderer>\r\n <!-- <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.DOCUMENT_SUBJECT\" | translate\r\n }}<span class=\"text-red-500\">*</span>\r\n </div>\r\n <input class=\"field-style\" formControlName=\"subject\" \r\n placeholder=\" {{ 'CREATE.DOCUMENT_SUBJECT' | translate}}\"/>\r\n </div>\r\n <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.DOCUMENT_NUMBER\" | translate }}\r\n </div>\r\n <input class=\"field-style\" \r\n formControlName=\"documentNumber\" \r\n placeholder=\" {{ 'CREATE.DOCUMENT_NUMBER' | translate}}\"/>\r\n </div>\r\n <div class=\"single-field mb-3\">\r\n \r\n <cts-dynamic-form-hijri-dateitem\r\n formControlName=\"gdocumentDate\"\r\n label=\"CREATE.DOCUMENT_DATE\"\r\n >\r\n </cts-dynamic-form-hijri-dateitem>\r\n </div>\r\n <div class=\"single-field mb-3\">\r\n <app-dynamic-form-vocabulary-item [label]=\"'CREATE.SCRECY_LEVEL'\" [bindLabel]=\"'label'\"\r\n [bindValue]=\"'id'\" placeholder=\"{{ 'VOCABULARY.SELECT_ITEM' | translate }}\" [multiple]=\"false\"\r\n [searchable]=\"false\" [closeOnSelect]=\"true\" [hideSelectedItems]=\"false\"\r\n [vocabularyType]=\"'VOC_SecrecyLevel'\" \r\n formControlName=\"secrecyLevel\">\r\n </app-dynamic-form-vocabulary-item>\r\n </div>\r\n <div class=\"single-field mb-3\">\r\n <app-dynamic-form-vocabulary-item [label]=\"'CREATE.IMPORTANCE_LEVEL'\" [bindLabel]=\"'label'\"\r\n [bindValue]=\"'id'\" placeholder=\"{{ 'VOCABULARY.SELECT_ITEM' | translate }}\" [multiple]=\"false\"\r\n [searchable]=\"false\" [closeOnSelect]=\"true\" [hideSelectedItems]=\"false\"\r\n [vocabularyType]=\"'VOC_Importance'\" \r\n formControlName=\"importanceLevel\">\r\n </app-dynamic-form-vocabulary-item>\r\n </div>\r\n\r\n <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.DEPARTMENT_CODE\" | translate }}\r\n </div>\r\n <app-dynamic-form-department\r\n formControlName=\"departmentCode\"\r\n [placeholder]=\"'please select department'\"\r\n [pp_departmentNestedTree]=\"'PP_OS_Departments'\"\r\n [pp_departmentTree]=\"'PP_OS_Departments'\"\r\n [customPrefix]=\"'osdept'\"\r\n [customParentProperty]=\"'osdepartment_parentDepartmentCode'\"\r\n [useCustomAddEditAction]=\"true\"\r\n >\r\n </app-dynamic-form-department>\r\n </div>\r\n\r\n <div class=\"single-field mb-3\">\r\n <app-translated-vocabulary-select [label]=\"'CREATE.AGENCY_CATEGORY_CODE'\" [arbBindLabel]=\"'label_ar'\" [engBindLabel]=\"'label_en'\"\r\n [bindValue]=\"'id'\" placeholder=\"{{ 'VOCABULARY.SELECT_ITEM' | translate }}\" [multiple]=\"false\" \r\n [searchable]=\"true\" [closeOnSelect]=\"true\" [hideSelectedItems]=\"false\" formControlName=\"agencyCategoryCode\"\r\n [vocbularyId]=\"'VOC_AgencyCategory'\" [useFilter]=\"false\" >\r\n </app-translated-vocabulary-select>\r\n </div>\r\n \r\n <div class=\"single-field mb-3\">\r\n <app-translated-vocabulary-select [label]=\"'CREATE.AGENCY_NAME'\" [arbBindLabel]=\"'label_ar'\" [engBindLabel]=\"'label_en'\"\r\n [bindValue]=\"'id'\" placeholder=\"{{ 'VOCABULARY.SELECT_ITEM' | translate }}\" [multiple]=\"false\"\r\n [searchable]=\"true\" [closeOnSelect]=\"true\" [hideSelectedItems]=\"false\" formControlName=\"agencyName\"\r\n [vocbularyId]=\"'VOC_Agency'\" [filter]=\"agencyNameFilter\" [useFilter]=\"true\">\r\n </app-translated-vocabulary-select>\r\n </div>\r\n \r\n <div class=\"single-field mb-3\">\r\n <app-translated-vocabulary-select [label]=\"'CREATE.COUNTRY_CATEGORY_CODE'\" [arbBindLabel]=\"'label_ar'\" [engBindLabel]=\"'label_en'\"\r\n [bindValue]=\"'id'\" placeholder=\"{{ 'VOCABULARY.SELECT_ITEM' | translate }}\" [multiple]=\"false\"\r\n [searchable]=\"true\" [closeOnSelect]=\"true\" [hideSelectedItems]=\"false\" formControlName=\"countryCategoryCode\"\r\n [vocbularyId]=\"'VOC_CountryCategory'\" [useFilter]=\"false\" >\r\n </app-translated-vocabulary-select>\r\n </div>\r\n \r\n <div class=\"single-field mb-3\">\r\n <app-translated-vocabulary-select [label]=\"'CREATE.COUNTRY_NAME'\" [arbBindLabel]=\"'label_ar'\" [engBindLabel]=\"'label_en'\"\r\n [bindValue]=\"'id'\" placeholder=\"{{ 'VOCABULARY.SELECT_ITEM' | translate }}\" [multiple]=\"false\"\r\n [searchable]=\"true\" [closeOnSelect]=\"true\" [hideSelectedItems]=\"false\" formControlName=\"countryName\"\r\n [vocbularyId]=\"'VOC_Country'\" [filter]=\"countryNameFilter\" [useFilter]=\"true\">\r\n </app-translated-vocabulary-select>\r\n </div>\r\n\r\n <div class=\"single-field mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"CREATE.REMARKS\" | translate}}\r\n </div>\r\n <input class=\"field-style\" formControlName=\"remarks\" \r\n placeholder=\" {{ 'CREATE.REMARKS' | translate}}\"/>\r\n </div> -->\r\n\r\n </div>\r\n\r\n <!-- ----------------------------------------------------------- -->\r\n </form>\r\n\r\n <div class=\"dynamic-part\" *ngIf=\"showRenderer\">\r\n <app-dynamic-form [form]=\"selectedFile.dynamicForm\" [data]=\"temporaryDyanmicData\"\r\n (change)=\"ondynamicFormChange($event)\"></app-dynamic-form>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"\r\n w-full\r\n h-full\r\n p-3\r\n flex\r\n justify-center\r\n items-center\r\n text-lg text-gray-900\r\n \" *ngIf=\"!selectedFile\">\r\n {{ \"CREATE.SELECT_TOSTART_ADDING\" | translate }}\r\n </div>\r\n </div>\r\n <div class=\"attachment-tab-body overflow-hidden\" [ngClass]=\"{ 'attachment-iner-small-body': addingProperties }\">\r\n <app-attachments [multiple]=\"true\" (onSelectingItem)=\"selectFile($event)\"></app-attachments>\r\n </div>\r\n </div>\r\n <div class=\"w-full text-red-500 text-base text-start px-3\" *ngIf=\"!uploadMangmentService.GeneralFormValidation\">\r\n\r\n {{ \"CREATE.FILL_REQUIRED_FIELD\" | translate }}\r\n </div>\r\n <div class=\"actions-iner-wrapper w-full flex justify-between items-center absolute bottom-0\">\r\n <div class=\"flex\">\r\n <button *ngIf=\"\r\n (uploadMangmentService.uploadedFilesStatus\r\n .uploadInProgress ||\r\n uploadMangmentService.uploadedFilesStatus.uploadedFiles\r\n .length > 0) &&\r\n !addingProperties\r\n \" (click)=\"startAddingProperties()\" class=\"submission-button\">\r\n {{ \"BUTTONS.ADD_PROPERTIES\" | translate }}\r\n </button>\r\n <button *ngIf=\"\r\n addingProperties &&\r\n uploadMangmentService.uploadedFilesStatus.uploadedFiles\r\n .length +\r\n uploadMangmentService.uploadedFilesStatus.allfiles\r\n .length >\r\n 1\r\n \" (click)=\"ApplyChangesToAll()\" [disabled]=\"!selectedFile || !selectedFile.staticFormValid\" [ngClass]=\"{\r\n 'opacity-30 cursor-not-allowed':\r\n !selectedFile || !selectedFile.staticFormValid,\r\n 'cursor-pointer hover:text-white hover:bg-gray-900': !(\r\n !selectedFile || !selectedFile.staticFormValid\r\n )\r\n }\" class=\"submission-button mx-2\">\r\n {{ \"BUTTONS.APPLY_TO_ALL\" | translate }}\r\n </button>\r\n\r\n <div *ngIf=\"\r\n addingProperties &&\r\n !uploadMangmentService.uploadedFilesStatus.uploadInProgress &&\r\n uploadMangmentService.failedFiles.length === 0\r\n \">\r\n <ng-container *ngIf=\"!creating\">\r\n <button (click)=\"createDocument()\" class=\"submission-button relative\">\r\n {{ \"BUTTONS.CREATE\" | translate }}\r\n </button>\r\n </ng-container>\r\n <span class=\"submission-button\" *ngIf=\"creating\">\r\n <mat-spinner [value]=\"90\" [strokeWidth]=\"3\" overlay=\"true\" [diameter]=\"25\" color=\"warn\">\r\n </mat-spinner>\r\n </span>\r\n </div>\r\n\r\n <button *ngIf=\"\r\n addingProperties &&\r\n !uploadMangmentService.uploadedFilesStatus.uploadInProgress &&\r\n uploadMangmentService.failedFiles.length > 0\r\n \" (click)=\"tryAgainCreateDocument()\" class=\"submission-button\">\r\n {{ \"BUTTONS.TRY_AGAIN\" | translate }}\r\n </button>\r\n\r\n <button [disabled]=\"!fileForm?.valid || disableCreateWhenFinishBtn\" *ngIf=\"\r\n addingProperties &&\r\n uploadMangmentService.uploadedFilesStatus.uploadInProgress\r\n \" (click)=\"createWhenFinish()\" class=\"submission-button w-44\">\r\n {{ \"BUTTONS.CREATE_WHEN_FINSH\" | translate }}\r\n </button>\r\n </div>\r\n <div class=\"flex\">\r\n <button class=\"cancelation-button mx-2\" (click)=\"minimizDialog()\" *ngIf=\"\r\n uploadMangmentService.uploadedFilesStatus\r\n .uploadInProgress ||\r\n uploadMangmentService.uploadedFilesStatus\r\n .numberOfUploadedFiles !== 0 ||\r\n addingProperties\r\n \">\r\n {{ \"BUTTONS.MINIMIZED\" | translate }}\r\n </button>\r\n <button class=\"cancelation-button\" (click)=\"closeDialog()\">\r\n {{ \"BUTTONS.CANCEL\" | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n</div>", styles: [".dynamic-part{margin-left:-15px;margin-right:-15px}.iner-wrapper{height:calc(100% - 70px)}.iner-wrapper .properties-section{width:calc(100% - 270px);height:calc(100% - 15px)}.iner-wrapper .attachment-tab-body{height:calc(100% - -20px);overflow-y:auto;overflow-x:hidden}.iner-wrapper .attachment-iner-small-body{width:350px}.rtl .actions-iner-wrapper{direction:ltr}.actions-iner-wrapper{direction:rtl}\n"], components: [{ type: i14.DynamicFieldsRendererComponent, selector: "app-dynamic-fields-renderer", inputs: ["form", "agencyNameFilter", "countryNameFilter", "mode", "fields"] }, { type: i15.DynamicFormComponent, selector: "app-dynamic-form", inputs: ["form", "data", "readOnly"], outputs: ["change"] }, { type: i16.AttachmentsComponent, selector: "app-attachments", inputs: ["allowedTypes", "params", "path", "maxSize", "docParams", "multiple", "createDocument", "allowedMaxNumberOfFiles", "source"], outputs: ["uploadSuccess", "uploadError", "onSelectingItem", "itemRemoved"] }, { type: i17.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i18.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i18.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i19.SetRtlDirective, selector: "[SetRtl]" }, { type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "translate": i20.TranslatePipe } });
461
471
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImport: i0, type: CreateModalComponent, decorators: [{
462
472
  type: Component,
463
473
  args: [{
@@ -471,5 +481,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.4", ngImpor
471
481
  }] }, { type: i1.MatDialogRef }, { type: i2.UploadManagmentService }, { type: i3.DialogMangmentService }, { type: i4.FileManagerService }, { type: i5.CustomToastrService }, { type: i6.FormBuilder }, { type: i7.AdapterService }, { type: i4.FileManagerService }, { type: i8.AppConfigService }, { type: i9.DateHelperService }, { type: i10.TranslationService }, { type: i11.UserService }, { type: i12.NuxeoService }, { type: undefined, decorators: [{
472
482
  type: Inject,
473
483
  args: ['environment']
474
- }] }, { type: i13.DynamicFormService }]; } });
475
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9jcmVhdGUtbW9kYWwvY3JlYXRlLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9jcmVhdGUtbW9kYWwvY3JlYXRlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQTZELFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFNekUsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLFFBQVEsRUFBZ0IsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFhOUMsTUFBTSxPQUFPLG9CQUFvQjtJQThCL0IsWUFBNEMsSUFBSSxFQUN2QyxTQUE2QyxFQUM3QyxxQkFBNkMsRUFDN0MscUJBQTRDLEVBQzNDLGlCQUFxQyxFQUNyQyxhQUFrQyxFQUNsQyxXQUF3QixFQUN4QixRQUF3QixFQUN4QixrQkFBc0MsRUFDdEMsY0FBZ0MsRUFDaEMsaUJBQW9DLEVBQ3BDLGtCQUFzQyxFQUN0QyxXQUF3QixFQUN4QixZQUEwQixFQUNILFdBQVcsRUFDbEMsa0JBQXNDO1FBZkosU0FBSSxHQUFKLElBQUksQ0FBQTtRQUN2QyxjQUFTLEdBQVQsU0FBUyxD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QTRCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3pGLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDekYsQ0FBQzs7aUhBdGRVLG9CQUFvQixrQkE4QlgsZUFBZSxpYkFjekIsYUFBYTtxR0E1Q1osb0JBQW9CLHdEQ3RCakMsdzBkQWdQTTsyRkQxTk8sb0JBQW9CO2tCQUxoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFdBQVcsRUFBRSwrQkFBK0I7b0JBQzVDLFNBQVMsRUFBRSxDQUFDLCtCQUErQixDQUFDO2lCQUM3Qzs7MEJBK0JjLE1BQU07MkJBQUMsZUFBZTs7MEJBY2hDLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgVXBsb2FkTWFuYWdtZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC1zZXJ2aWNlcy91cGxvYWQtbWFuYWdtZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dNYW5nbWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZGlhbG9nLW1hbmdtZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEeW5hbWljRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZHluYW1pYy1mb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZmlsZS1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC1zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgZm9ya0pvaW4sIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDdXN0b21Ub2FzdHJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY3VzdG9tLXRvYXN0ci9zZXJ2aWNlcy9jdXN0b20tdG9hc3RyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRlSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2hpanJpLWdyZWdvcmlhbi1kYXRlcGlja2VyL3NlcnZpY2VzL2RhdGUtaGVscGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBZGFwdGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL0NvcmUvYWRhcHRlcnMvYWRhcHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbmZpZ3VyYXRpb24vYXBwLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vQ29yZS9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTnV4ZW9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vQ29yZS9zZXJ2aWNlcy9udXhlby9udXhlby5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWNyZWF0ZS1tb2RhbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NyZWF0ZS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY3JlYXRlLW1vZGFsLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENyZWF0ZU1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBhZGRpbmdQcm9wZXJ0aWVzID0gZmFsc2U7XHJcbiAgZmlsZVR5cGVGb3JtOiBGb3JtR3JvdXA7XHJcbiAgZHluYW1pY0Zvcm07XHJcbiAgZHluYW1pY0RhdGE7XHJcbiAgc2VsZWN0ZWRGaWxlO1xyXG4gIGZpbGVUeXBlO1xyXG4gIHNvdXJjZTtcclxuICBwYXlsb2FkTGlzdCA9IFtdO1xyXG4gIGNyZWF0ZVdoZW5GaW5pc2hNb2RlID0gZmFsc2U7XHJcbiAgZmlsZUZvcm1TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBjb3VudHJ5Q2F0ZWdDb2RlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgYWdlbmN5Q2F0ZWdDb2RlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgdGVtcG9yYXJ5RHlhbm1pY0RhdGE7XHJcbiAgc2hvd1JlbmRlcmVyID0gZmFsc2U7IC8vIHVzZWQgdG8gZm9yY2UgcmVuZGVyZXIgdG8gZmVlbCBjaGFuZ2VzIGluIGZvcm1zIGFuZCB2YWx1ZSB3aGVuIGNoYW5naW5nIGZpbGVzXHJcbiAgLy8gdXBsb2FkRmluaXNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgdXNpbmdFeHRyYUZpZWxkcyA9IGZhbHNlOyAvLyBmbGFnZSB0byBzd2l0Y2ggYmV0d2VlbiBzdGF0aWMgZm9ybSB0eXBlc1xyXG5cclxuICBmaWxlRm9ybTogRm9ybUdyb3VwO1xyXG4gIHN0YXRpY0Zvcm1GaWVsZHM7XHJcbiAgYWdlbmN5TmFtZUZpbHRlcjtcclxuICBjb3VudHJ5TmFtZUZpbHRlcjtcclxuICBpc0FyYWJpYyA9IGZhbHNlO1xyXG4gIHNob3dTdGF0aWNGb3JtID0gZmFsc2VcclxuICBsYW5nU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgZGlzYWJsZUNyZWF0ZVdoZW5GaW5pc2hCdG4gPSB0cnVlO1xyXG4gIGNyZWF0aW5nID0gZmFsc2U7XHJcbiAgZGlzcGxheU5vdGVNZXNzYWdlID0gdHJ1ZTtcclxuICBteUVudmlyb25tZW50O1xyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YSxcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxDcmVhdGVNb2RhbENvbXBvbmVudD4sXHJcbiAgICBwdWJsaWMgdXBsb2FkTWFuZ21lbnRTZXJ2aWNlOiBVcGxvYWRNYW5hZ21lbnRTZXJ2aWNlLFxyXG4gICAgcHVibGljIGRpYWxvZ01hbmdtZW50U2VydmljZTogRGlhbG9nTWFuZ21lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmaWxlTWFuZ2VyU2VydmljZTogRmlsZU1hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b3N0ZXJTZXJ2aWNlOiBDdXN0b21Ub2FzdHJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGFkYXBldGVyOiBBZGFwdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgZmlsZU1hbmFnZXJTZXJ2aWNlOiBGaWxlTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwcENvbmZTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRlSGVscGVyU2VydmljZTogRGF0ZUhlbHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG51eGVvU2VydmljZTogTnV4ZW9TZXJ2aWNlLFxyXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcml2YXRlIGVudmlyb25tZW50LFxyXG4gICAgcHJpdmF0ZSBkeW5hbWljRm9ybVNlcnZpY2U6IER5bmFtaWNGb3JtU2VydmljZSwpIHtcclxuICAgICAgdGhpcy5teUVudmlyb25tZW50ID0gdGhpcy5lbnZpcm9ubWVudDtcclxuXHJcbiAgICB0aGlzLmNyZWF0ZVdoZW5GaW5pc2hNb2RlID0gZmFsc2U7XHJcbiAgICB0aGlzLmFkZGluZ1Byb3BlcnRpZXMgPSB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5hZGRpbmdQcm9wZXJ0aWVzTW9kZTtcclxuICAgIHRoaXMuZmlsZVR5cGUgPSB0aGlzLmRpYWxvZ01hbmdtZW50U2VydmljZS5maWxlVHlwZTsgLy8gb2JqZWN0IHRoYXQgd2FzIGNvbnN0cnVjdGVkIGluc2lkZSBzdWJ0eXBlcyBzZXJ2aWNlXHJcbiAgICB0aGlzLnNvdXJjZSA9IHRoaXMuZGlhbG9nTWFuZ21lbnRTZXJ2aWNlLmFkZGluZ0Zyb207XHJcbiAgICB0aGlzLmZpbGVNYW5hZ2VyU2VydmljZS5nZXRGaWxlU2NoZW1hcyh0aGlzLmZpbGVUeXBlLnR5cGUpLnN1YnNjcmliZShzY2hlbWFzID0+IHtcclxuICAgICAgc2NoZW1hcy5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0ubmFtZSA9PT0gXCJnZW5lcmFsZG9jdW1lbnRcIikge1xyXG4gICAgICAgICAgdGhpcy51c2luZ0V4dHJhRmllbGRzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuaW5pdGlhdGZpbGVGb3JtKCk7XHJcbiAgICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLmdldHRpbmdQcm9wRnJvbU1vZGFsKHtcclxuICAgICAgICAnZmlsZVR5cGUnOiB0aGlzLnNvdXJjZSA9PT0gJ2ZpbGVNYW5nZXInID8gdGhpcy5maWxlVHlwZSA6IHt9LFxyXG4gICAgICAgICdkeW5hbWljRm9ybSc6IHRoaXMuZGlhbG9nTWFuZ21lbnRTZXJ2aWNlLnN0b3JlZER5bmFtaWNGb3JtLFxyXG4gICAgICAgICdkeW5hbWljRGF0YSc6IHt9LFxyXG4gICAgICAgICdzdGF0aWNGb3JtVmFsaWQnOiB0aGlzLnVzaW5nRXh0cmFGaWVsZHMgPyBmYWxzZSA6IHRydWUsXHJcbiAgICAgICAgJ2dlbmVyYWxWYWxpZGF0aW9uVmFsaWQnOiB0cnVlLFxyXG4gICAgICAgICd1c2luZ0V4dHJhRmllbGRzJzogdGhpcy51c2luZ0V4dHJhRmllbGRzLFxyXG4gICAgICAgICdwYXRoJzogdGhpcy5kYXRhLnBhdGhcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sYW5nU3Vic2NyaXB0aW9uID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuaXNBcmFiaWMuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuaXNBcmFiaWMgPSByZXM7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkRmluaXNoU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZEZpbmlzaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkRmluaXNoU3Vic2NyaXB0aW9uID0gdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2Uub25VcGxvYWRGaW5pc2guc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNyZWF0ZVdoZW5GaW5pc2hNb2RlIHx8IHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLmZhaWxlZEZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmNyZWF0ZURvY3VtZW50KCk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBpbml0aWF0ZmlsZUZvcm0oKSB7XHJcbiAgICBpZiAodGhpcy51c2luZ0V4dHJhRmllbGRzKSB7XHJcbiAgICAgIHRoaXMuZmlsZUZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICB0aXRsZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBbJyddLFxyXG4gICAgICAgIHN1YmplY3Q6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBkb2N1bWVudE51bWJlcjogWycnXSxcclxuICAgICAgICBnZG9jdW1lbnREYXRlOiBbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBzZWNyZWN5TGV2ZWw6IFtudWxsXSxcclxuICAgICAgICBpbXBvcnRhbmNlTGV2ZWw6IFtudWxsXSxcclxuICAgICAgICBkZXBhcnRtZW50Q29kZTogWycnXSxcclxuICAgICAgICBhZ2VuY3lDYXRlZ29yeUNvZGU6IFtudWxsXSxcclxuICAgICAgICBhZ2VuY3lOYW1lOiBbbnVsbF0sXHJcbiAgICAgICAgY291bnRyeUNhdGVnb3J5Q29kZTogW251bGxdLFxyXG4gICAgICAgIGNvdW50cnlOYW1lOiBbbnVsbF0sXHJcbiAgICAgICAgcmVtYXJrczogWycnXVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWxlRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIHRpdGxlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgZGVzY3JpcHRpb246IFsnJ11cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGljRm9ybUZpZWxkcyA9IHRoaXMuYXBwQ29uZlNlcnZpY2UubXlDb25maWd1cmF0aW9uLnN0YXRpY0Zvcm1GaWVsZHM7IFxyXG4gIH1cclxuICBcclxuICBjcmVhdGVXaGVuRmluaXNoKCkge1xyXG4gICAgdGhpcy5jcmVhdGVXaGVuRmluaXNoTW9kZSA9IHRydWU7XHJcbiAgICB0aGlzLm1pbmltaXpEaWFsb2coKTtcclxuICB9XHJcblxyXG4gIGNsb3NlRGlhbG9nKCkge1xyXG4gICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuR2VuZXJhbEZvcm1WYWxpZGF0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuZmlsZUZvcm1TdWJzY3JpcHRpb24gPyB0aGlzLmZpbGVGb3JtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkgOiAnJztcclxuICAgIHRoaXMuYWRkaW5nUHJvcGVydGllcyA9IGZhbHNlO1xyXG4gICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UucmVzZXRTdGF0dXMoKTtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKGZhbHNlKVxyXG4gIH1cclxuXHJcbiAgc3RhcnRBZGRpbmdQcm9wZXJ0aWVzKCkge1xyXG4gICAgLy9pZiBzdGFydGluZyBmcm9tIGZpbGVtbmFnZXIgdGhlbiBpIGhhdmUgZml4ZWQgZmlsZSB0eXBlIGZvciBhbGwgYXR0YWNobWV0biBhbmQgc2luZ2xlIGR5bmFpbWMgZm9ybSAgdHlwZVxyXG4gICAgaWYgKHRoaXMuc291cmNlID09PSAnZmlsZU1hbmdlcicpIHtcclxuICAgICAgLy8gdGhpcy5keW5hbWljRm9ybVNlcnZpY2UuZ2V0RHluYW1pY0Zvcm0odGhpcy5maWxlVHlwZSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcblxyXG4gICAgICB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZGVkRmlsZXMubWFwKGZpbGUgPT4ge1xyXG4gICAgICAgIGZpbGVbJ2ZpbGVUeXBlJ10gPSB0aGlzLnNvdXJjZSA9PT0gJ2ZpbGVNYW5nZXInID8gdGhpcy5maWxlVHlwZSA6IHt9O1xyXG4gICAgICAgIGZpbGVbJ2R5bmFtaWNGb3JtJ10gPSB0aGlzLmRpYWxvZ01hbmdtZW50U2VydmljZS5zdG9yZWREeW5hbWljRm9ybTtcclxuICAgICAgICBmaWxlWydkeW5hbWljRGF0YSddID0ge307XHJcbiAgICAgICAgZmlsZVsnc3RhdGljRm9ybVZhbGlkJ10gPSB0aGlzLnVzaW5nRXh0cmFGaWVsZHMgPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgZmlsZVsnc3RhdGljRGF0YSddID0gdGhpcy5zZXRTdGF0aWNEYXRhKGZpbGUudGl0bGUgPyBmaWxlLnRpdGxlIDogZmlsZS5uYW1lKTtcclxuICAgICAgICBmaWxlWydnZW5lcmFsVmFsaWRhdGlvblZhbGlkJ10gPSB0cnVlO1xyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLmFsbGZpbGVzLm1hcChmaWxlID0+IHtcclxuICAgICAgICBmaWxlWydmaWxlVHlwZSddID0gdGhpcy5zb3VyY2UgPT09ICdmaWxlTWFuZ2VyJyA/IHRoaXMuZmlsZVR5cGUgOiB7fTtcclxuICAgICAgICBmaWxlWydkeW5hbWljRm9ybSddID0gdGhpcy5kaWFsb2dNYW5nbWVudFNlcnZpY2Uuc3RvcmVkRHluYW1pY0Zvcm07XHJcbiAgICAgICAgZmlsZVsnZHluYW1pY0RhdGEnXSA9IHt9O1xyXG4gICAgICAgIGZpbGVbJ3N0YXRpY0Zvcm1WYWxpZCddID0gdGhpcy51c2luZ0V4dHJhRmllbGRzID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgIGZpbGVbJ3N0YXRpY0RhdGEnXSA9IHRoaXMuc2V0U3RhdGljRGF0YShmaWxlLnRpdGxlID8gZmlsZS50aXRsZSA6IGZpbGUubmFtZSk7XHJcbiAgICAgICAgZmlsZVsnZ2VuZXJhbFZhbGlkYXRpb25WYWxpZCddID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLmFkZGluZ1Byb3BlcnRpZXMgPSB0cnVlO1xyXG4gICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuYWRkaW5nUHJvcGVydGllc01vZGUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0U3RhdGljRGF0YSh0aXRsZSkge1xyXG4gICAgaWYgKHRoaXMudXNpbmdFeHRyYUZpZWxkcykge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgc3ViamVjdDogJycsXHJcbiAgICAgICAgZG9jdW1lbnROdW1iZXI6ICcnLFxyXG4gICAgICAgIGdkb2N1bWVudERhdGU6IG51bGwsXHJcbiAgICAgICAgc2VjcmVjeUxldmVsOiBudWxsLFxyXG4gICAgICAgIGltcG9ydGFuY2VMZXZlbDogbnVsbCxcclxuICAgICAgICBkZXBhcnRtZW50Q29kZTogdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRGVwYXJ0bWVudEZyb21QYXRoKHRoaXMuZGF0YS5wYXRoKSxcclxuICAgICAgICBhZ2VuY3lDYXRlZ29yeUNvZGU6IG51bGwsXHJcbiAgICAgICAgYWdlbmN5TmFtZTogbnVsbCxcclxuICAgICAgICBjb3VudHJ5Q2F0ZWdvcnlDb2RlOiBudWxsLFxyXG4gICAgICAgIGNvdW50cnlOYW1lOiBudWxsLFxyXG4gICAgICAgIHJlbWFya3M6ICcnXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJ1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVEb2N1bWVudCgpIHtcclxuICAgIHRoaXMuY3JlYXRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuZmFpbGVkRmlsZXMgPSBbXTtcclxuICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLkdlbmVyYWxGb3JtVmFsaWRhdGlvbiA9IHRoaXMuY2hlY2tWYWxpZGF0aW9uKCk7XHJcbiAgICBpZiAodGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuR2VuZXJhbEZvcm1WYWxpZGF0aW9uKSB7XHJcblxyXG4gICAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcclxuICAgICAgaWYgKHRoaXMuZGF0YT8ucGF0aC5pbmNsdWRlcygnL2RlZmF1bHQtZG9tYWluL3dvcmtzcGFjZXMvRE1TLycpKSB7XHJcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RQYXlMb2FkKHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkZWRGaWxlcyk7XHJcbiAgICAgICAgdGhpcy5wYXlsb2FkTGlzdC5tYXAocGF5bG9hZCA9PiB7XHJcbiAgICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZmlsZU1hbmdlclNlcnZpY2UuY3JlYXRlRmlsZShwYXlsb2FkLCB0aGlzLmZpbGVNYW5hZ2VyU2VydmljZS5zZWxlY3RlZEZvbGRlcklkKSlcclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY29uc3RydWN0UGF5TG9hZFRvV29ya1NwYWNlKHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkZWRGaWxlcyk7XHJcbiAgICAgICAgdGhpcy5wYXlsb2FkTGlzdC5tYXAocGF5bG9hZCA9PiB7XHJcbiAgICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZmlsZU1hbmdlclNlcnZpY2UuY3JlYXRlRmlsZShwYXlsb2FkLCB0aGlzLmZpbGVNYW5hZ2VyU2VydmljZS5zZWxlY3RlZEZvbGRlcklkLCAnRE1TLkNyZWF0ZURvY3VtZW50RnJvbUJsb2InKSlcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIGZvcmtKb2luKGFwaUNhbGxzKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2cocmVzKTtcclxuICAgICAgICB0aGlzLmNyZWF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgcmVzcG9uc2UubWFwKHNpbmdsZVJlcyA9PiB7XHJcbiAgICAgICAgICBpZiAoc2luZ2xlUmVzWydzdGF0dXMnXSAmJiBzaW5nbGVSZXNbJ3N0YXR1cyddID09PSAnZmFpbGVkJykge1xyXG4gICAgICAgICAgICB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5mYWlsZWRGaWxlcy5wdXNoKHNpbmdsZVJlc1snb3JpZ2luRmlsZSddKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYgKHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLmZhaWxlZEZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMudG9zdGVyU2VydmljZS5zaG93KCdlcnJvcicsICdUT0FTVEVSLkVSUk9SJywgJ1RPQVNURVIuVVBMT0FEX0VSUk9SJyk7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZGVkRmlsZXMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMuYWxsZmlsZXMgPSBbLi4udGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuZmFpbGVkRmlsZXNdO1xyXG5cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZmlsZU1hbmdlclNlcnZpY2Uub25SZWZyZXNoaW5nRmlsZU1hbmdlci5uZXh0KCk7XHJcbiAgICAgICAgICB0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdygnc3VjY2VzcycsICdUT0FTVEVSLlNVQ0NFU1MnLCBcIlRPQVNURVIuRklMRV9DUkVBVEVEX1NVQ0NFXCIpXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5yZXNldFN0YXR1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNyZWF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAvLyB0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdygnZXJyb3InICwgJ1RPQVNURVIuRVJST1InICwgJ1RPQVNURVIuVVBMT0FEX0VSUk9SJyk7XHJcbiAgICAgICAgICAvLyB0aGlzLmNsb3NlRGlhbG9nKCk7XHJcbiAgICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3JlYXRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdFBheUxvYWRUb1dvcmtTcGFjZShmaWxlcykge1xyXG4gICAgdGhpcy5wYXlsb2FkTGlzdCA9IFtdO1xyXG4gICAgZmlsZXMubWFwKGZpbGUgPT4ge1xyXG4gICAgICBsZXQgcGFyYW0gPSB7XHJcbiAgICAgICAgXCJmaWxlaW5kZXhcIjogMCxcclxuICAgICAgICBcImZpbGVOYW1lXCI6IGZpbGUuc3RhdGljRGF0YS50aXRsZSxcclxuICAgICAgICBcImJhdGNoaWRcIjogZmlsZS5iYXRjaC5ibG9iWyd1cGxvYWQtYmF0Y2gnXSxcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHRoaXMuZmlsZUZvcm0uY29udHJvbHMuZGVzY3JpcHRpb24udmFsdWVcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5wYXlsb2FkTGlzdC5wdXNoKHsgcGFyYW1zOiBwYXJhbSwgb3JpZ2luRmlsZTogZmlsZSB9KTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB0cnlBZ2FpbkNyZWF0ZURvY3VtZW50KCkge1xyXG4gICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkRmlsZXNNYW5nbWVudCh0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5mYWlsZWRGaWxlcyk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RQYXlMb2FkKGZpbGVzKSB7XHJcbiAgICB0aGlzLnBheWxvYWRMaXN0ID0gW107XHJcbiAgICBmaWxlcy5tYXAoZmlsZSA9PiB7XHJcbiAgICAgIGxldCBwcm9wcyA9IHRoaXMuZHluYW1pY0Zvcm1TZXJ2aWNlLmNvbnN0cnVjdER5bmFtaWNGb3JtUGF5bG9hZChmaWxlLmR5bmFtaWNEYXRhLmRhdGEgPyBmaWxlLmR5bmFtaWNEYXRhLmRhdGEgOiB7fSwgZmlsZS5keW5hbWljRm9ybSk7XHJcbiAgICAgIGxldCBzdGF0aWNGb3JtRGF0YSA9IHRoaXMubWFwcGluZ1N0YXRpY0RhdGEoZmlsZS5zdGF0aWNEYXRhKVxyXG4gICAgICBsZXQgcGFyYW0gPSB7XHJcbiAgICAgICAgXCJkb2N1bWVudFwiOiB7XHJcbiAgICAgICAgICBcInR5cGVcIjogZmlsZS5maWxlVHlwZS50eXBlLFxyXG4gICAgICAgICAgXCJuYW1lXCI6IGZpbGUuc3RhdGljRGF0YS50aXRsZSxcclxuICAgICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICAgIC4uLnByb3BzLFxyXG4gICAgICAgICAgICAuLi5zdGF0aWNGb3JtRGF0YSxcclxuICAgICAgICAgICAgXCJmaWxlOmNvbnRlbnRcIjoge1xyXG4gICAgICAgICAgICAgIFwidXBsb2FkLWJhdGNoXCI6IGZpbGUuYmF0Y2guYmxvYlsndXBsb2FkLWJhdGNoJ10sXHJcbiAgICAgICAgICAgICAgXCJ1cGxvYWQtZmlsZUlkXCI6IGZpbGUuYmF0Y2guYmxvYlsndXBsb2FkLWZpbGVJZCddLFxyXG4gICAgICAgICAgICAgIFwibWltZS10eXBlXCI6IGZpbGUudHlwZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICBpZiAoZmlsZS5maWxlVHlwZS5kb2N1bWVudENvZGUpIHtcclxuICAgICAgICBwYXJhbVtcImRvY3VtZW50VHlwZUNvZGVcIl0gPSBmaWxlLmZpbGVUeXBlLmRvY3VtZW50Q29kZVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucGF5bG9hZExpc3QucHVzaCh7IHBhcmFtczogcGFyYW0sIG9yaWdpbkZpbGU6IGZpbGUgfSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgbWFwcGluZ1N0YXRpY0RhdGEoZGF0YSkge1xyXG4gICAgaWYgKGRhdGEuZ2RvY3VtZW50RGF0ZSAmJiBkYXRhLmdkb2N1bWVudERhdGUgIT09IG51bGwpIHtcclxuICAgICAgbW9tZW50LmxvY2FsZSgnZW4nKTtcclxuICAgICAgZGF0YVsnaGRvY3VtZW50RGF0ZSddID0gdGhpcy5kYXRlSGVscGVyU2VydmljZS5ncmVnb3JpYW5Ub0hpanJpKGRhdGEuZ2RvY3VtZW50RGF0ZSwgJ2lZWVlZLWlNTS1pREQnKTtcclxuICAgICAgZGF0YS5nZG9jdW1lbnREYXRlID0gKG1vbWVudChkYXRhLmdkb2N1bWVudERhdGUpLmZvcm1hdChcIllZWVktTU0tRERUMDA6MDA6MDAuMDAwXCIpICsgXCJaXCIpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5hZGFwZXRlci5hZGFwdE91dChkYXRhLCB0aGlzLnN0YXRpY0Zvcm1GaWVsZHMpXHJcbiAgfVxyXG4gICAgXHJcbiAgc2VsZWN0RmlsZShmaWxlKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImZpbGUgaW4gc2VsZWN0XCIsIGZpbGUpXHJcbiAgICB0aGlzLnNob3dTdGF0aWNGb3JtID0gZmFsc2U7XHJcbiAgICB0aGlzLmFnZW5jeU5hbWVGaWx0ZXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmNvdW50cnlOYW1lRmlsdGVyID0gdW5kZWZpbmVkO1xyXG4gICAgLy9jb25zb2xlLmxvZyhmaWxlKTtcclxuICAgIGlmICghdGhpcy5hZGRpbmdQcm9wZXJ0aWVzKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRBZGRpbmdQcm9wZXJ0aWVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5hZGRpbmdQcm9wZXJ0aWVzKSB7XHJcbiAgICAgIHRoaXMuc2hvd1JlbmRlcmVyID0gZmFsc2U7XHJcbiAgICAgIC8vIGNoZWNrIGlmIGZpbGUgaGFzIHByb3BlcnRpZXMgb2YgYWRkaW5nIHByb3BlcnRpZXMgb3Igbm90IHRoZW4gYWRkIGl0IHRvIGhpbVxyXG4gICAgICBpZiAoIWZpbGUuaGFzT3duUHJvcGVydHkoJ2ZpbGVUeXBlJykpIHtcclxuICAgICAgICB0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5nZXREeW5hbWljRm9ybSh0aGlzLmZpbGVUeXBlLmRvY3VtZW50Q29kZSA/IHRoaXMuZmlsZVR5cGUuZG9jdW1lbnRDb2RlIDogdGhpcy5maWxlVHlwZS50eXBlKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgIGZpbGVbJ2ZpbGVUeXBlJ10gPSB0aGlzLnNvdXJjZSA9PT0gJ2ZpbGVNYW5nZXInID8gdGhpcy5maWxlVHlwZSA6IHt9O1xyXG4gICAgICAgICAgZmlsZVsnZHluYW1pY0Zvcm0nXSA9IHJlcztcclxuICAgICAgICAgIGZpbGVbJ2R5bmFtaWNEYXRhJ10gPSB7fTtcclxuICAgICAgICAgIGZpbGVbJ3N0YXRpY0Zvcm1WYWxpZCddID0gdGhpcy51c2luZ0V4dHJhRmllbGRzID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgICAgZmlsZVsnZ2VuZXJhbFZhbGlkYXRpb25WYWxpZCddID0gdHJ1ZTtcclxuICAgICAgICAgIGZpbGVbJ3N0YXRpY0RhdGEnXSA9IHRoaXMuc2V0U3RhdGljRGF0YShmaWxlLnRpdGxlID8gZmlsZS50aXRsZSA6IGZpbGUubmFtZSk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IGZpbGU7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuZmlsZUZvcm0pIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWF0ZmlsZUZvcm0oKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZmlsZUZvcm0ucGF0Y2hWYWx1ZSh0aGlzLnNlbGVjdGVkRmlsZVsnc3RhdGljRGF0YSddKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnRlbXBvcmFyeUR5YW5taWNEYXRhID0ge307XHJcbiAgICAgICAgICB0aGlzLnRlbXBvcmFyeUR5YW5taWNEYXRhID0gdGhpcy5zZWxlY3RlZEZpbGUuZHluYW1pY0RhdGEuZGF0YSA/IHsgLi4udGhpcy5zZWxlY3RlZEZpbGUuZHluYW1pY0RhdGEuZGF0YSB9IDoge307XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zaG93UmVuZGVyZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dTdGF0aWNGb3JtID0gdHJ1ZTtcclxuICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGZpbGUpO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmZpbGVGb3JtU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsZUZvcm1TdWJzY3JpcHRpb24gPSB0aGlzLmZpbGVGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlLnN0YXRpY0Zvcm1WYWxpZCA9IHRoaXMuZmlsZUZvcm0gPyB0aGlzLmZpbGVGb3JtLnZhbGlkIDogZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZS5zdGF0aWNEYXRhID0gdGhpcy5maWxlRm9ybSA/IHRoaXMuZmlsZUZvcm0udmFsdWUgOiB7fTtcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsZUZvcm0uZ2V0KCdhZ2VuY3lDYXRlZ29yeUNvZGUnKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZ2VuY3lDYXRlZ0NvZGVTdWJzY3JpcHRpb24gPSB0aGlzLmZpbGVGb3JtLmdldCgnYWdlbmN5Q2F0ZWdvcnlDb2RlJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZpbGVGb3JtLmdldCgnYWdlbmN5TmFtZScpLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFnZW5jeU5hbWVGaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IHJlc1xyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsZUZvcm0uZ2V0KCdjb3VudHJ5Q2F0ZWdvcnlDb2RlJykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291bnRyeUNhdGVnQ29kZVN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsZUZvcm0uZ2V0KCdjb3VudHJ5Q2F0ZWdvcnlDb2RlJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZpbGVGb3JtLmdldCgnY291bnRyeU5hbWUnKS5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudHJ5TmFtZUZpbHRlciA9IHtcclxuICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeTogcmVzXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IGZpbGU7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZpbGVGb3JtKSB7XHJcbiAgICAgICAgICB0aGlzLmluaXRpYXRmaWxlRm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbGVGb3JtLnBhdGNoVmFsdWUoeyAuLi50aGlzLnNlbGVjdGVkRmlsZVsnc3RhdGljRGF0YSddIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZVsnc3RhdGljRGF0YSddWydhZ2VuY3lDYXRlZ29yeUNvZGUnXSkge1xyXG4gICAgICAgICAgdGhpcy5hZ2VuY3lOYW1lRmlsdGVyID0ge1xyXG4gICAgICAgICAgICBjYXRlZ29yeTogdGhpcy5zZWxlY3RlZEZpbGVbJ3N0YXRpY0RhdGEnXVsnYWdlbmN5Q2F0ZWdvcnlDb2RlJ11cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZVsnc3RhdGljRGF0YSddWydjb3VudHJ5Q2F0ZWdvcnlDb2RlJ10pIHtcclxuICAgICAgICAgIHRoaXMuY291bnRyeU5hbWVGaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgIGNhdGVnb3J5OiB0aGlzLnNlbGVjdGVkRmlsZVsnc3RhdGljRGF0YSddWydjb3VudHJ5Q2F0ZWdvcnlDb2RlJ11cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGVtcG9yYXJ5RHlhbm1pY0RhdGEgPSB7fTtcclxuICAgICAgICB0aGlzLnRlbXBvcmFyeUR5YW5taWNEYXRhID0gdGhpcy5zZWxlY3RlZEZpbGUuZHluYW1pY0RhdGEuZGF0YSA/IHRoaXMuc2VsZWN0ZWRGaWxlLmR5bmFtaWNEYXRhLmRhdGEgOiB7fTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hvd1JlbmRlcmVyID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc2hvd1N0YXRpY0Zvcm0gPSB0cnVlO1xyXG5cclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgICAgIGlmICghdGhpcy5maWxlRm9ybVN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZUZvcm1TdWJzY3JpcHRpb24gPSB0aGlzLmZpbGVGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZS5zdGF0aWNGb3JtVmFsaWQgPSB0aGlzLmZpbGVGb3JtID8gdGhpcy5maWxlRm9ybS52YWxpZCA6IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlLnN0YXRpY0RhdGEgPSB0aGlzLmZpbGVGb3JtID8gdGhpcy5maWxlRm9ybS52YWx1ZSA6IHt9O1xyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZmlsZUZvcm0uZ2V0KCdhZ2VuY3lDYXRlZ29yeUNvZGUnKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWdlbmN5Q2F0ZWdDb2RlU3Vic2NyaXB0aW9uID0gdGhpcy5maWxlRm9ybS5nZXQoJ2FnZW5jeUNhdGVnb3J5Q29kZScpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZUZvcm0uZ2V0KCdhZ2VuY3lOYW1lJykuc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFnZW5jeU5hbWVGaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiByZXNcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5maWxlRm9ybS5nZXQoJ2NvdW50cnlDYXRlZ29yeUNvZGUnKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY291bnRyeUNhdGVnQ29kZVN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsZUZvcm0uZ2V0KCdjb3VudHJ5Q2F0ZWdvcnlDb2RlJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlRm9ybS5nZXQoJ2NvdW50cnlOYW1lJykuc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlOYW1lRmlsdGVyID0ge1xyXG4gICAgICAgICAgICAgICAgICBjYXRlZ29yeTogcmVzXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25keW5hbWljRm9ybUNoYW5nZShkeW5hbWljRGF0YSkge1xyXG4gICAgY29uc29sZS5sb2coZHluYW1pY0RhdGEpXHJcbiAgICBpZiAoZHluYW1pY0RhdGEub3JpZ2luYWxFdmVudD8uaXNWYWxpZCkge1xyXG4gICAgICB0aGlzLmRpc2FibGVDcmVhdGVXaGVuRmluaXNoQnRuID0gZmFsc2VcclxuICAgIH1cclxuICAgIGlmIChkeW5hbWljRGF0YS5kYXRhKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlLmR5bmFtaWNEYXRhID0geyAuLi5keW5hbWljRGF0YSB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWluaW1pekRpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlSXRlbShpdGVtLCBsaXN0b2ZGaWxlcykge1xyXG4gICAgY29uc3QgcmVtb3ZlSW5kZXggPSBsaXN0b2ZGaWxlcy5maW5kSW5kZXgoZmlsZSA9PiBmaWxlLm5hbWUgPT09IGl0ZW0ubmFtZSk7XHJcbiAgICBsaXN0b2ZGaWxlcy5zcGxpY2UocmVtb3ZlSW5kZXgsIDEpO1xyXG4gICAgaWYgKGl0ZW0ubmFtZSA9PT0gdGhpcy5zZWxlY3RlZEZpbGUubmFtZSkge1xyXG4gICAgICBpZiAodGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRlZEZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEZpbGUodGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRlZEZpbGVzWzBdKVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMuYWxsZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0RmlsZSh0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLmFsbGZpbGVzWzBdKVxyXG4gICAgICB9XHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRGaWxlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEFwcGx5Q2hhbmdlc1RvQWxsKCkge1xyXG4gICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRlZEZpbGVzLm1hcChmaWxlID0+IHtcclxuICAgICAgbGV0IHRpdGxlID0gZmlsZVsnc3RhdGljRGF0YSddID8gZmlsZVsnc3RhdGljRGF0YSddWyd0aXRsZSddIDogZmlsZS5uYW1lO1xyXG4gICAgICBmaWxlWydmaWxlVHlwZSddID0gdGhpcy5zZWxlY3RlZEZpbGUuZmlsZVR5cGU7XHJcbiAgICAgIGZpbGVbJ2R5bmFtaWNGb3JtJ10gPSB0aGlzLnNlbGVjdGVkRmlsZS5keW5hbWljRm9ybTtcclxuICAgICAgZmlsZVsnZHluYW1pY0RhdGEnXSA9IHRoaXMuc2VsZWN0ZWRGaWxlLmR5bmFtaWNEYXRhO1xyXG4gICAgICBmaWxlWydzdGF0aWNGb3JtVmFsaWQnXSA9IHRoaXMuc2VsZWN0ZWRGaWxlLnN0YXRpY0Zvcm1WYWxpZDtcclxuICAgICAgZmlsZVsnc3RhdGljRGF0YSddID0geyAuLi50aGlzLmZpbGVGb3JtLnZhbHVlIH07XHJcbiAgICAgIGZpbGVbJ3N0YXRpY0RhdGEnXVsndGl0bGUnXSA9IHRpdGxlO1xyXG4gICAgfSlcclxuICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMuYWxsZmlsZXMubWFwKGZpbGUgPT4ge1xyXG4gICAgICBsZXQgdGl0bGUgPSBmaWxlWydzdGF0aWNEYXRhJ10gPyBmaWxlWydzdGF0aWNEYXRhJ11bJ3RpdGxlJ10gOiBmaWxlLm5hbWU7XHJcbiAgICAgIGZpbGVbJ2ZpbGVUeXBlJ10gPSB0aGlzLnNlbGVjdGVkRmlsZS5maWxlVHlwZTtcclxuICAgICAgZmlsZVsnZHluYW1pY0Zvcm0nXSA9IHRoaXMuc2VsZWN0ZWRGaWxlLmR5bmFtaWNGb3JtO1xyXG4gICAgICBmaWxlWydkeW5hbWljRGF0YSddID0gdGhpcy5zZWxlY3RlZEZpbGUuZHluYW1pY0RhdGE7XHJcbiAgICAgIGZpbGVbJ3N0YXRpY0Zvcm1WYWxpZCddID0gdGhpcy5zZWxlY3RlZEZpbGUuc3RhdGljRm9ybVZhbGlkO1xyXG4gICAgICBmaWxlWydzdGF0aWNEYXRhJ10gPSB7IC4uLnRoaXMuZmlsZUZvcm0udmFsdWUgfTtcclxuICAgICAgZmlsZVsnc3RhdGljRGF0YSddWyd0aXRsZSddID0gdGl0bGU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNoZWNrVmFsaWRhdGlvbigpIHtcclxuICAgIGxldCB2YWxpZGF0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkZWRGaWxlcy5tYXAoZmlsZSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiZmlsZVwiLCBmaWxlKVxyXG4gICAgICBpZiAoIWZpbGUuaGFzT3duUHJvcGVydHkoJ2ZpbGVUeXBlJykgfHwgZmlsZVsnc3RhdGljRm9ybVZhbGlkJ10gPT09IGZhbHNlIHx8IGZpbGUuZHluYW1pY0RhdGE/Lm9yaWdpbmFsRXZlbnQ/LmlzVmFsaWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgZmlsZVsnZ2VuZXJhbFZhbGlkYXRpb25WYWxpZCddID0gZmFsc2VcclxuICAgICAgICB2YWxpZGF0aW9uID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmlsZVsnZ2VuZXJhbFZhbGlkYXRpb25WYWxpZCddID0gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy5hbGxmaWxlcy5tYXAoZmlsZSA9PiB7XHJcbiAgICAgIGlmIChmaWxlWydzdGF0aWNGb3JtVmFsaWQnXSA9PT0gZmFsc2UgfHwgZmlsZS5keW5hbWljRGF0YT8ub3JpZ2luYWxFdmVudD8uaXNWYWxpZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICBmaWxlWydnZW5lcmFsVmFsaWRhdGlvblZhbGlkJ10gPSBmYWxzZTtcclxuICAgICAgICB2YWxpZGF0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbGVbJ2dlbmVyYWxWYWxpZGF0aW9uVmFsaWQnXSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB2YWxpZGF0aW9uO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmZpbGVGb3JtU3Vic2NyaXB0aW9uID8gdGhpcy5maWxlRm9ybVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpIDogJyc7XHJcbiAgICB0aGlzLmxhbmdTdWJzY3JpcHRpb24gPyB0aGlzLmxhbmdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSA6ICcnO1xyXG4gICAgdGhpcy5jb3VudHJ5Q2F0ZWdDb2RlU3Vic2NyaXB0aW9uID8gdGhpcy5jb3VudHJ5Q2F0ZWdDb2RlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkgOiAnJztcclxuICAgIHRoaXMuYWdlbmN5Q2F0ZWdDb2RlU3Vic2NyaXB0aW9uID8gdGhpcy5hZ2VuY3lDYXRlZ0NvZGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSA6ICcnO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImluZXItd3JhcHBlclwiIFtuZ0NsYXNzXT1cInsgJ2QtZmxleCc6IGFkZGluZ1Byb3BlcnRpZXMgfVwiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJhZGRpbmdQcm9wZXJ0aWVzXCIgY2xhc3M9XCJwcm9wZXJ0aWVzLXNlY3Rpb24gcC0zIG92ZXJmbG93LXgtaGlkZGVuIG92ZXJmbG93LXktYXV0b1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nSWY9XCJzZWxlY3RlZEZpbGUgJiYgc291cmNlID09PSAnZmlsZU1hbmdlcicgJiYgc2hvd1N0YXRpY0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLXN0eWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiQ1JFQVRFLkZJTEVfVFlQRVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFzZSB0ZXh0LWdyYXktOTAwXCI+e3sgaXNBcmFiaWMgPyBmaWxlVHlwZS5hcmFiaWNUZXh0IDogZmlsZVR5cGUuZW5nbGlzaFRleHQgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtZmllbGRzIG10LTNcIiBTZXRSdGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmaWxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tb2xkIHN0YXRpYyBmb3JtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLWZpZWxkIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtc3R5bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJDUkVBVEUuVElUTEVcIiB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwidGV4dC1yZWQtNTAwXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQtc3R5bGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCIgcGxhY2Vob2xkZXI9XCIge3sgJ0NSRUFURS5USVRMRScgfCB0cmFuc2xhdGV9fVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW5nbGUtZmllbGQgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1zdHlsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcIkNSRUFURS5ERVNDUklQVElPTlwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZmllbGQtc3R5bGVcIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiIHt7ICdDUkVBVEUuREVTQ1JJUFRJT04nIHwgdHJhbnNsYXRlfX1cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLSBuZXcgc3RhdGlzIGZvcm0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2luZ0V4dHJhRmllbGRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzLXJlbmRlcmVyIFtmb3JtXT1cImZpbGVGb3JtXCIgW2FnZW5jeU5hbWVGaWx0ZXJdPVwiYWdlbmN5TmFtZUZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvdW50cnlOYW1lRmlsdGVyXT1cImNvdW50cnlOYW1lRmlsdGVyXCI+PC9hcHAtZHluYW1pYy1maWVsZHMtcmVuZGVyZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJzaW5nbGUtZmllbGQgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1zdHlsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcIkNSRUFURS5ET0NVTUVOVF9TVUJKRUNUXCIgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMFwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZmllbGQtc3R5bGVcIiBmb3JtQ29udHJvbE5hbWU9XCJzdWJqZWN0XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiIHt7ICdDUkVBVEUuRE9DVU1FTlRfU1VCSkVDVCcgfCB0cmFuc2xhdGV9fVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1maWVsZCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLXN0eWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiQ1JFQVRFLkRPQ1VNRU5UX05VTUJFUlwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZmllbGQtc3R5bGVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRvY3VtZW50TnVtYmVyXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIiB7eyAnQ1JFQVRFLkRPQ1VNRU5UX05VTUJFUicgfCB0cmFuc2xhdGV9fVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1maWVsZCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3RzLWR5bmFtaWMtZm9ybS1oaWpyaS1kYXRlaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImdkb2N1bWVudERhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiQ1JFQVRFLkRPQ1VNRU5UX0RBVEVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY3RzLWR5bmFtaWMtZm9ybS1oaWpyaS1kYXRlaXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1maWVsZCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZvcm0tdm9jYWJ1bGFyeS1pdGVtIFtsYWJlbF09XCInQ1JFQVRFLlNDUkVDWV9MRVZFTCdcIiBbYmluZExhYmVsXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kVmFsdWVdPVwiJ2lkJ1wiIHBsYWNlaG9sZGVyPVwie3sgJ1ZPQ0FCVUxBUlkuU0VMRUNUX0lURU0nIHwgdHJhbnNsYXRlIH19XCIgW211bHRpcGxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoYWJsZV09XCJmYWxzZVwiIFtjbG9zZU9uU2VsZWN0XT1cInRydWVcIiBbaGlkZVNlbGVjdGVkSXRlbXNdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2NhYnVsYXJ5VHlwZV09XCInVk9DX1NlY3JlY3lMZXZlbCdcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWNyZWN5TGV2ZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtZHluYW1pYy1mb3JtLXZvY2FidWxhcnktaXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1maWVsZCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZvcm0tdm9jYWJ1bGFyeS1pdGVtIFtsYWJlbF09XCInQ1JFQVRFLklNUE9SVEFOQ0VfTEVWRUwnXCIgW2JpbmRMYWJlbF09XCInbGFiZWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZFZhbHVlXT1cIidpZCdcIiBwbGFjZWhvbGRlcj1cInt7ICdWT0NBQlVMQVJZLlNFTEVDVF9JVEVNJyB8IHRyYW5zbGF0ZSB9fVwiIFttdWx0aXBsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaGFibGVdPVwiZmFsc2VcIiBbY2xvc2VPblNlbGVjdF09XCJ0cnVlXCIgW2hpZGVTZWxlY3RlZEl0ZW1zXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9jYWJ1bGFyeVR5cGVdPVwiJ1ZPQ19JbXBvcnRhbmNlJ1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImltcG9ydGFuY2VMZXZlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1keW5hbWljLWZvcm0tdm9jYWJ1bGFyeS1pdGVtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1maWVsZCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLXN0eWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiQ1JFQVRFLkRFUEFSVE1FTlRfQ09ERVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZvcm0tZGVwYXJ0bWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlcGFydG1lbnRDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3BsZWFzZSBzZWxlY3QgZGVwYXJ0bWVudCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcF9kZXBhcnRtZW50TmVzdGVkVHJlZV09XCInUFBfT1NfRGVwYXJ0bWVudHMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHBfZGVwYXJ0bWVudFRyZWVdPVwiJ1BQX09TX0RlcGFydG1lbnRzJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbVByZWZpeF09XCInb3NkZXB0J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbVBhcmVudFByb3BlcnR5XT1cIidvc2RlcGFydG1lbnRfcGFyZW50RGVwYXJ0bWVudENvZGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdXNlQ3VzdG9tQWRkRWRpdEFjdGlvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1keW5hbWljLWZvcm0tZGVwYXJ0bWVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW5nbGUtZmllbGQgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtdHJhbnNsYXRlZC12b2NhYnVsYXJ5LXNlbGVjdCBbbGFiZWxdPVwiJ0NSRUFURS5BR0VOQ1lfQ0FURUdPUllfQ09ERSdcIiBbYXJiQmluZExhYmVsXT1cIidsYWJlbF9hcidcIiBbZW5nQmluZExhYmVsXT1cIidsYWJlbF9lbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kVmFsdWVdPVwiJ2lkJ1wiIHBsYWNlaG9sZGVyPVwie3sgJ1ZPQ0FCVUxBUlkuU0VMRUNUX0lURU0nIHwgdHJhbnNsYXRlIH19XCIgW211bHRpcGxlXT1cImZhbHNlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaGFibGVdPVwidHJ1ZVwiIFtjbG9zZU9uU2VsZWN0XT1cInRydWVcIiBbaGlkZVNlbGVjdGVkSXRlbXNdPVwiZmFsc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJhZ2VuY3lDYXRlZ29yeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2NidWxhcnlJZF09XCInVk9DX0FnZW5jeUNhdGVnb3J5J1wiIFt1c2VGaWx0ZXJdPVwiZmFsc2VcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtdHJhbnNsYXRlZC12b2NhYnVsYXJ5LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLWZpZWxkIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXRyYW5zbGF0ZWQtdm9jYWJ1bGFyeS1zZWxlY3QgW2xhYmVsXT1cIidDUkVBVEUuQUdFTkNZX05BTUUnXCIgW2FyYkJpbmRMYWJlbF09XCInbGFiZWxfYXInXCIgW2VuZ0JpbmRMYWJlbF09XCInbGFiZWxfZW4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZFZhbHVlXT1cIidpZCdcIiBwbGFjZWhvbGRlcj1cInt7ICdWT0NBQlVMQVJZLlNFTEVDVF9JVEVNJyB8IHRyYW5zbGF0ZSB9fVwiIFttdWx0aXBsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaGFibGVdPVwidHJ1ZVwiIFtjbG9zZU9uU2VsZWN0XT1cInRydWVcIiBbaGlkZVNlbGVjdGVkSXRlbXNdPVwiZmFsc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJhZ2VuY3lOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9jYnVsYXJ5SWRdPVwiJ1ZPQ19BZ2VuY3knXCIgW2ZpbHRlcl09XCJhZ2VuY3lOYW1lRmlsdGVyXCIgW3VzZUZpbHRlcl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtdHJhbnNsYXRlZC12b2NhYnVsYXJ5LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLWZpZWxkIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXRyYW5zbGF0ZWQtdm9jYWJ1bGFyeS1zZWxlY3QgW2xhYmVsXT1cIidDUkVBVEUuQ09VTlRSWV9DQVRFR09SWV9DT0RFJ1wiIFthcmJCaW5kTGFiZWxdPVwiJ2xhYmVsX2FyJ1wiIFtlbmdCaW5kTGFiZWxdPVwiJ2xhYmVsX2VuJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRWYWx1ZV09XCInaWQnXCIgcGxhY2Vob2xkZXI9XCJ7eyAnVk9DQUJVTEFSWS5TRUxFQ1RfSVRFTScgfCB0cmFuc2xhdGUgfX1cIiBbbXVsdGlwbGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hhYmxlXT1cInRydWVcIiBbY2xvc2VPblNlbGVjdF09XCJ0cnVlXCIgW2hpZGVTZWxlY3RlZEl0ZW1zXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwiY291bnRyeUNhdGVnb3J5Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZvY2J1bGFyeUlkXT1cIidWT0NfQ291bnRyeUNhdGVnb3J5J1wiIFt1c2VGaWx0ZXJdPVwiZmFsc2VcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtdHJhbnNsYXRlZC12b2NhYnVsYXJ5LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLWZpZWxkIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXRyYW5zbGF0ZWQtdm9jYWJ1bGFyeS1zZWxlY3QgW2xhYmVsXT1cIidDUkVBVEUuQ09VTlRSWV9OQU1FJ1wiIFthcmJCaW5kTGFiZWxdPVwiJ2xhYmVsX2FyJ1wiIFtlbmdCaW5kTGFiZWxdPVwiJ2xhYmVsX2VuJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRWYWx1ZV09XCInaWQnXCIgcGxhY2Vob2xkZXI9XCJ7eyAnVk9DQUJVTEFSWS5TRUxFQ1RfSVRFTScgfCB0cmFuc2xhdGUgfX1cIiBbbXVsdGlwbGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hhYmxlXT1cInRydWVcIiBbY2xvc2VPblNlbGVjdF09XCJ0cnVlXCIgW2hpZGVTZWxlY3RlZEl0ZW1zXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwiY291bnRyeU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2NidWxhcnlJZF09XCInVk9DX0NvdW50cnknXCIgW2ZpbHRlcl09XCJjb3VudHJ5TmFtZUZpbHRlclwiIFt1c2VGaWx0ZXJdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLXRyYW5zbGF0ZWQtdm9jYWJ1bGFyeS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLWZpZWxkIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtc3R5bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJDUkVBVEUuUkVNQVJLU1wiIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmaWVsZC1zdHlsZVwiIGZvcm1Db250cm9sTmFtZT1cInJlbWFya3NcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIge3sgJ0NSRUFURS5SRU1BUktTJyB8IHRyYW5zbGF0ZX19XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtcGFydFwiICpuZ0lmPVwic2hvd1JlbmRlcmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1mb3JtIFtmb3JtXT1cInNlbGVjdGVkRmlsZS5keW5hbWljRm9ybVwiIFtkYXRhXT1cInRlbXBvcmFyeUR5YW5taWNEYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25keW5hbWljRm9ybUNoYW5nZSgkZXZlbnQpXCI+PC9hcHAtZHluYW1pYy1mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdy1mdWxsXHJcbiAgICAgICAgICAgICAgICAgICAgaC1mdWxsXHJcbiAgICAgICAgICAgICAgICAgICAgcC0zXHJcbiAgICAgICAgICAgICAgICAgICAgZmxleFxyXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnktY2VudGVyXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMtY2VudGVyXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1sZyB0ZXh0LWdyYXktOTAwXHJcbiAgICAgICAgICAgICAgICBcIiAqbmdJZj1cIiFzZWxlY3RlZEZpbGVcIj5cclxuICAgICAgICAgICAgICAgIHt7IFwiQ1JFQVRFLlNFTEVDVF9UT1NUQVJUX0FERElOR1wiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50LXRhYi1ib2R5IG92ZXJmbG93LWhpZGRlblwiIFtuZ0NsYXNzXT1cInsgJ2F0dGFjaG1lbnQtaW5lci1zbWFsbC1ib2R5JzogYWRkaW5nUHJvcGVydGllcyB9XCI+XHJcbiAgICAgICAgICAgIDxhcHAtYXR0YWNobWVudHMgW211bHRpcGxlXT1cInRydWVcIiAob25TZWxlY3RpbmdJdGVtKT1cInNlbGVjdEZpbGUoJGV2ZW50KVwiPjwvYXBwLWF0dGFjaG1lbnRzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHRleHQtcmVkLTUwMCB0ZXh0LWJhc2UgdGV4dC1zdGFydCBweC0zXCIgKm5nSWY9XCIhdXBsb2FkTWFuZ21lbnRTZXJ2aWNlLkdlbmVyYWxGb3JtVmFsaWRhdGlvblwiPlxyXG5cclxuICAgICAgICB7eyBcIkNSRUFURS5GSUxMX1JFUVVJUkVEX0ZJRUxEXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImFjdGlvbnMtaW5lci13cmFwcGVyIHctZnVsbCBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgYWJzb2x1dGUgYm90dG9tLTBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC51cGxvYWRJblByb2dyZXNzIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZGVkRmlsZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5sZW5ndGggPiAwKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICFhZGRpbmdQcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgICAgICBcIiAoY2xpY2spPVwic3RhcnRBZGRpbmdQcm9wZXJ0aWVzKClcIiBjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBcIkJVVFRPTlMuQUREX1BST1BFUlRJRVNcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGFkZGluZ1Byb3BlcnRpZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRlZEZpbGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5sZW5ndGggK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy5hbGxmaWxlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmxlbmd0aCA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcclxuICAgICAgICAgICAgICAgIFwiIChjbGljayk9XCJBcHBseUNoYW5nZXNUb0FsbCgpXCIgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZEZpbGUgfHwgIXNlbGVjdGVkRmlsZS5zdGF0aWNGb3JtVmFsaWRcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgJ29wYWNpdHktMzAgY3Vyc29yLW5vdC1hbGxvd2VkJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgIXNlbGVjdGVkRmlsZSB8fCAhc2VsZWN0ZWRGaWxlLnN0YXRpY0Zvcm1WYWxpZCxcclxuICAgICAgICAgICAgICAgICAgICAnY3Vyc29yLXBvaW50ZXIgaG92ZXI6dGV4dC13aGl0ZSBob3ZlcjpiZy1ncmF5LTkwMCc6ICEoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFzZWxlY3RlZEZpbGUgfHwgIXNlbGVjdGVkRmlsZS5zdGF0aWNGb3JtVmFsaWRcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9XCIgY2xhc3M9XCJzdWJtaXNzaW9uLWJ1dHRvbiBteC0yXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBcIkJVVFRPTlMuQVBQTFlfVE9fQUxMXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIGFkZGluZ1Byb3BlcnRpZXMgJiZcclxuICAgICAgICAgICAgIXVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZEluUHJvZ3Jlc3MgJiZcclxuICAgICAgICAgICAgdXBsb2FkTWFuZ21lbnRTZXJ2aWNlLmZhaWxlZEZpbGVzLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjcmVhdGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNyZWF0ZURvY3VtZW50KClcIiBjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiQlVUVE9OUy5DUkVBVEVcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uXCIgKm5nSWY9XCJjcmVhdGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciBbdmFsdWVdPVwiOTBcIiBbc3Ryb2tlV2lkdGhdPVwiM1wiIG92ZXJsYXk9XCJ0cnVlXCIgW2RpYW1ldGVyXT1cIjI1XCIgY29sb3I9XCJ3YXJuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIGFkZGluZ1Byb3BlcnRpZXMgJiZcclxuICAgICAgICAgICAgIXVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZEluUHJvZ3Jlc3MgJiZcclxuICAgICAgICAgICAgdXBsb2FkTWFuZ21lbnRTZXJ2aWNlLmZhaWxlZEZpbGVzLmxlbmd0aCA+IDBcclxuICAgICAgICBcIiAoY2xpY2spPVwidHJ5QWdhaW5DcmVhdGVEb2N1bWVudCgpXCIgY2xhc3M9XCJzdWJtaXNzaW9uLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAge3sgXCJCVVRUT05TLlRSWV9BR0FJTlwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIWZpbGVGb3JtPy52YWxpZCB8fCBkaXNhYmxlQ3JlYXRlV2hlbkZpbmlzaEJ0blwiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYWRkaW5nUHJvcGVydGllcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZEluUHJvZ3Jlc3NcclxuICAgICAgICAgICAgICAgIFwiIChjbGljayk9XCJjcmVhdGVXaGVuRmluaXNoKClcIiBjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uIHctNDRcIj5cclxuICAgICAgICAgICAgICAgIHt7IFwiQlVUVE9OUy5DUkVBVEVfV0hFTl9GSU5TSFwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWxhdGlvbi1idXR0b24gbXgtMlwiIChjbGljayk9XCJtaW5pbWl6RGlhbG9nKClcIiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC51cGxvYWRJblByb2dyZXNzIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm51bWJlck9mVXBsb2FkZWRGaWxlcyAhPT0gMCB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGFkZGluZ1Byb3BlcnRpZXNcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAge3sgXCJCVVRUT05TLk1JTklNSVpFRFwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsYXRpb24tYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5cclxuICAgICAgICAgICAgICAgIHt7IFwiQlVUVE9OUy5DQU5DRUxcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
484
+ }] }, { type: i13.DynamicFormService }]; }, propDecorators: { KeyUpEvent: [{
485
+ type: HostListener,
486
+ args: ['document:keyup.enter', ['$event']]
487
+ }] } });
488
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9jcmVhdGUtbW9kYWwvY3JlYXRlLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9jcmVhdGUtbW9kYWwvY3JlYXRlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUE2RCxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RyxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBTXpFLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBYTlDLE1BQU0sT0FBTyxvQkFBb0I7SUF3Qy9CLFlBQTRDLElBQUksRUFDdkMsU0FBNkMsRUFDN0MscUJBQTZDLEVBQzdDLHFCQUE0QyxFQUMzQyxpQkFBcUMsRUFDckMsYUFBa0MsRUFDbEMsV0FBd0IsRUFDeEIsUUFBd0IsRUFDeEIsa0JBQXNDLEVBQ3RDLGNBQWdDLEVBQ2hDLGlCQUFvQyxFQUNwQyxrQkFBc0MsRUFDdEMsV0FBd0IsRUFDeEIsWUFBMEIsRUFDSCxXQUFXLEVBQ2xDLGtCQUFzQztRQWZKLFNBQUksR0FBSixJQUFJLENBQUE7UUFDdkMsY0FBUyxH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QUF3QixDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQ3ZDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqRSxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3pGLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDekYsQ0FBQzs7aUhBaGVVLG9CQUFvQixrQkF3Q1gsZUFBZSxpYkFjekIsYUFBYTtxR0F0RFosb0JBQW9CLCtIQ3RCakMsdzBkQWdQTTsyRkQxTk8sb0JBQW9CO2tCQUxoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFdBQVcsRUFBRSwrQkFBK0I7b0JBQzVDLFNBQVMsRUFBRSxDQUFDLCtCQUErQixDQUFDO2lCQUM3Qzs7MEJBeUNjLE1BQU07MkJBQUMsZUFBZTs7MEJBY2hDLE1BQU07MkJBQUMsYUFBYTs4RUF2QnZCLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxzQkFBc0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBVcGxvYWRNYW5hZ21lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkLXNlcnZpY2VzL3VwbG9hZC1tYW5hZ21lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IERpYWxvZ01hbmdtZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC1zZXJ2aWNlcy9kaWFsb2ctbWFuZ21lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IER5bmFtaWNGb3JtU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC1zZXJ2aWNlcy9keW5hbWljLWZvcm0uc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC1zZXJ2aWNlcy9maWxlLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkLXNlcnZpY2VzL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEN1c3RvbVRvYXN0clNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jdXN0b20tdG9hc3RyL3NlcnZpY2VzL2N1c3RvbS10b2FzdHIuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGVIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vaGlqcmktZ3JlZ29yaWFuLWRhdGVwaWNrZXIvc2VydmljZXMvZGF0ZS1oZWxwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vQ29yZS9hZGFwdGVycy9hZGFwdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29uZmlndXJhdGlvbi9hcHAtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9Db3JlL3NlcnZpY2VzL3RyYW5zbGF0aW9uL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOdXhlb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9Db3JlL3NlcnZpY2VzL251eGVvL251eGVvLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY3JlYXRlLW1vZGFsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtbW9kYWwuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIGFkZGluZ1Byb3BlcnRpZXMgPSBmYWxzZTtcclxuICBmaWxlVHlwZUZvcm06IEZvcm1Hcm91cDtcclxuICBkeW5hbWljRm9ybTtcclxuICBkeW5hbWljRGF0YTtcclxuICBzZWxlY3RlZEZpbGU7XHJcbiAgZmlsZVR5cGU7XHJcbiAgc291cmNlO1xyXG4gIHBheWxvYWRMaXN0ID0gW107XHJcbiAgY3JlYXRlV2hlbkZpbmlzaE1vZGUgPSBmYWxzZTtcclxuICBmaWxlRm9ybVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIGNvdW50cnlDYXRlZ0NvZGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBhZ2VuY3lDYXRlZ0NvZGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICB0ZW1wb3JhcnlEeWFubWljRGF0YTtcclxuICBzaG93UmVuZGVyZXIgPSBmYWxzZTsgLy8gdXNlZCB0byBmb3JjZSByZW5kZXJlciB0byBmZWVsIGNoYW5nZXMgaW4gZm9ybXMgYW5kIHZhbHVlIHdoZW4gY2hhbmdpbmcgZmlsZXNcclxuICAvLyB1cGxvYWRGaW5pc2hTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICB1c2luZ0V4dHJhRmllbGRzID0gZmFsc2U7IC8vIGZsYWdlIHRvIHN3aXRjaCBiZXR3ZWVuIHN0YXRpYyBmb3JtIHR5cGVzXHJcblxyXG4gIGZpbGVGb3JtOiBGb3JtR3JvdXA7XHJcbiAgc3RhdGljRm9ybUZpZWxkcztcclxuICBhZ2VuY3lOYW1lRmlsdGVyO1xyXG4gIGNvdW50cnlOYW1lRmlsdGVyO1xyXG4gIGlzQXJhYmljID0gZmFsc2U7XHJcbiAgc2hvd1N0YXRpY0Zvcm0gPSBmYWxzZVxyXG4gIGxhbmdTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBkaXNhYmxlQ3JlYXRlV2hlbkZpbmlzaEJ0biA9IHRydWU7XHJcbiAgY3JlYXRpbmcgPSBmYWxzZTtcclxuICBkaXNwbGF5Tm90ZU1lc3NhZ2UgPSB0cnVlO1xyXG4gIG15RW52aXJvbm1lbnQ7XHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5dXAuZW50ZXInLCBbJyRldmVudCddKVxyXG4gIEtleVVwRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmKHRoaXMuYWRkaW5nUHJvcGVydGllcyAmJiB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5mYWlsZWRGaWxlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgaWYodGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRJblByb2dyZXNzICYmICF0aGlzLmRpc2FibGVDcmVhdGVXaGVuRmluaXNoQnRuKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVXaGVuRmluaXNoKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVEb2N1bWVudCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YSxcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxDcmVhdGVNb2RhbENvbXBvbmVudD4sXHJcbiAgICBwdWJsaWMgdXBsb2FkTWFuZ21lbnRTZXJ2aWNlOiBVcGxvYWRNYW5hZ21lbnRTZXJ2aWNlLFxyXG4gICAgcHVibGljIGRpYWxvZ01hbmdtZW50U2VydmljZTogRGlhbG9nTWFuZ21lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmaWxlTWFuZ2VyU2VydmljZTogRmlsZU1hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b3N0ZXJTZXJ2aWNlOiBDdXN0b21Ub2FzdHJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGFkYXBldGVyOiBBZGFwdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgZmlsZU1hbmFnZXJTZXJ2aWNlOiBGaWxlTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwcENvbmZTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRlSGVscGVyU2VydmljZTogRGF0ZUhlbHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG51eGVvU2VydmljZTogTnV4ZW9TZXJ2aWNlLFxyXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcml2YXRlIGVudmlyb25tZW50LFxyXG4gICAgcHJpdmF0ZSBkeW5hbWljRm9ybVNlcnZpY2U6IER5bmFtaWNGb3JtU2VydmljZSwpIHtcclxuICAgICAgdGhpcy5teUVudmlyb25tZW50ID0gdGhpcy5lbnZpcm9ubWVudDtcclxuXHJcbiAgICB0aGlzLmNyZWF0ZVdoZW5GaW5pc2hNb2RlID0gZmFsc2U7XHJcbiAgICB0aGlzLmFkZGluZ1Byb3BlcnRpZXMgPSB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5hZGRpbmdQcm9wZXJ0aWVzTW9kZTtcclxuICAgIHRoaXMuZmlsZVR5cGUgPSB0aGlzLmRpYWxvZ01hbmdtZW50U2VydmljZS5maWxlVHlwZTsgLy8gb2JqZWN0IHRoYXQgd2FzIGNvbnN0cnVjdGVkIGluc2lkZSBzdWJ0eXBlcyBzZXJ2aWNlXHJcbiAgICB0aGlzLnNvdXJjZSA9IHRoaXMuZGlhbG9nTWFuZ21lbnRTZXJ2aWNlLmFkZGluZ0Zyb207XHJcbiAgICB0aGlzLmZpbGVNYW5hZ2VyU2VydmljZS5nZXRGaWxlU2NoZW1hcyh0aGlzLmZpbGVUeXBlLnR5cGUpLnN1YnNjcmliZShzY2hlbWFzID0+IHtcclxuICAgICAgc2NoZW1hcy5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0ubmFtZSA9PT0gXCJnZW5lcmFsZG9jdW1lbnRcIikge1xyXG4gICAgICAgICAgdGhpcy51c2luZ0V4dHJhRmllbGRzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuaW5pdGlhdGZpbGVGb3JtKCk7XHJcbiAgICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLmdldHRpbmdQcm9wRnJvbU1vZGFsKHtcclxuICAgICAgICAnZmlsZVR5cGUnOiB0aGlzLnNvdXJjZSA9PT0gJ2ZpbGVNYW5nZXInID8gdGhpcy5maWxlVHlwZSA6IHt9LFxyXG4gICAgICAgICdkeW5hbWljRm9ybSc6IHRoaXMuZGlhbG9nTWFuZ21lbnRTZXJ2aWNlLnN0b3JlZER5bmFtaWNGb3JtLFxyXG4gICAgICAgICdkeW5hbWljRGF0YSc6IHt9LFxyXG4gICAgICAgICdzdGF0aWNGb3JtVmFsaWQnOiB0aGlzLnVzaW5nRXh0cmFGaWVsZHMgPyBmYWxzZSA6IHRydWUsXHJcbiAgICAgICAgJ2dlbmVyYWxWYWxpZGF0aW9uVmFsaWQnOiB0cnVlLFxyXG4gICAgICAgICd1c2luZ0V4dHJhRmllbGRzJzogdGhpcy51c2luZ0V4dHJhRmllbGRzLFxyXG4gICAgICAgICdwYXRoJzogdGhpcy5kYXRhLnBhdGhcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sYW5nU3Vic2NyaXB0aW9uID0gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UuaXNBcmFiaWMuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuaXNBcmFiaWMgPSByZXM7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkRmluaXNoU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZEZpbmlzaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkRmluaXNoU3Vic2NyaXB0aW9uID0gdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2Uub25VcGxvYWRGaW5pc2guc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNyZWF0ZVdoZW5GaW5pc2hNb2RlIHx8IHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLmZhaWxlZEZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmNyZWF0ZURvY3VtZW50KCk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBpbml0aWF0ZmlsZUZvcm0oKSB7XHJcbiAgICBpZiAodGhpcy51c2luZ0V4dHJhRmllbGRzKSB7XHJcbiAgICAgIHRoaXMuZmlsZUZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICB0aXRsZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBbJyddLFxyXG4gICAgICAgIHN1YmplY3Q6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBkb2N1bWVudE51bWJlcjogWycnXSxcclxuICAgICAgICBnZG9jdW1lbnREYXRlOiBbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBzZWNyZWN5TGV2ZWw6IFtudWxsXSxcclxuICAgICAgICBpbXBvcnRhbmNlTGV2ZWw6IFtudWxsXSxcclxuICAgICAgICBkZXBhcnRtZW50Q29kZTogWycnXSxcclxuICAgICAgICBhZ2VuY3lDYXRlZ29yeUNvZGU6IFtudWxsXSxcclxuICAgICAgICBhZ2VuY3lOYW1lOiBbbnVsbF0sXHJcbiAgICAgICAgY291bnRyeUNhdGVnb3J5Q29kZTogW251bGxdLFxyXG4gICAgICAgIGNvdW50cnlOYW1lOiBbbnVsbF0sXHJcbiAgICAgICAgcmVtYXJrczogWycnXVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWxlRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIHRpdGxlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgICAgZGVzY3JpcHRpb246IFsnJ11cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGljRm9ybUZpZWxkcyA9IHRoaXMuYXBwQ29uZlNlcnZpY2UubXlDb25maWd1cmF0aW9uLnN0YXRpY0Zvcm1GaWVsZHM7IFxyXG4gIH1cclxuICBcclxuICBjcmVhdGVXaGVuRmluaXNoKCkge1xyXG4gICAgdGhpcy5jcmVhdGVXaGVuRmluaXNoTW9kZSA9IHRydWU7XHJcbiAgICB0aGlzLm1pbmltaXpEaWFsb2coKTtcclxuICB9XHJcblxyXG4gIGNsb3NlRGlhbG9nKCkge1xyXG4gICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuR2VuZXJhbEZvcm1WYWxpZGF0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuZmlsZUZvcm1TdWJzY3JpcHRpb24gPyB0aGlzLmZpbGVGb3JtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkgOiAnJztcclxuICAgIHRoaXMuYWRkaW5nUHJvcGVydGllcyA9IGZhbHNlO1xyXG4gICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UucmVzZXRTdGF0dXMoKTtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKGZhbHNlKVxyXG4gIH1cclxuXHJcbiAgc3RhcnRBZGRpbmdQcm9wZXJ0aWVzKCkge1xyXG4gICAgLy9pZiBzdGFydGluZyBmcm9tIGZpbGVtbmFnZXIgdGhlbiBpIGhhdmUgZml4ZWQgZmlsZSB0eXBlIGZvciBhbGwgYXR0YWNobWV0biBhbmQgc2luZ2xlIGR5bmFpbWMgZm9ybSAgdHlwZVxyXG4gICAgaWYgKHRoaXMuc291cmNlID09PSAnZmlsZU1hbmdlcicpIHtcclxuICAgICAgLy8gdGhpcy5keW5hbWljRm9ybVNlcnZpY2UuZ2V0RHluYW1pY0Zvcm0odGhpcy5maWxlVHlwZSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcblxyXG4gICAgICB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZGVkRmlsZXMubWFwKGZpbGUgPT4ge1xyXG4gICAgICAgIGZpbGVbJ2ZpbGVUeXBlJ10gPSB0aGlzLnNvdXJjZSA9PT0gJ2ZpbGVNYW5nZXInID8gdGhpcy5maWxlVHlwZSA6IHt9O1xyXG4gICAgICAgIGZpbGVbJ2R5bmFtaWNGb3JtJ10gPSB0aGlzLmRpYWxvZ01hbmdtZW50U2VydmljZS5zdG9yZWREeW5hbWljRm9ybTtcclxuICAgICAgICBmaWxlWydkeW5hbWljRGF0YSddID0ge307XHJcbiAgICAgICAgZmlsZVsnc3RhdGljRm9ybVZhbGlkJ10gPSB0aGlzLnVzaW5nRXh0cmFGaWVsZHMgPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgZmlsZVsnc3RhdGljRGF0YSddID0gdGhpcy5zZXRTdGF0aWNEYXRhKGZpbGUudGl0bGUgPyBmaWxlLnRpdGxlIDogZmlsZS5uYW1lKTtcclxuICAgICAgICBmaWxlWydnZW5lcmFsVmFsaWRhdGlvblZhbGlkJ10gPSB0cnVlO1xyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLmFsbGZpbGVzLm1hcChmaWxlID0+IHtcclxuICAgICAgICBmaWxlWydmaWxlVHlwZSddID0gdGhpcy5zb3VyY2UgPT09ICdmaWxlTWFuZ2VyJyA/IHRoaXMuZmlsZVR5cGUgOiB7fTtcclxuICAgICAgICBmaWxlWydkeW5hbWljRm9ybSddID0gdGhpcy5kaWFsb2dNYW5nbWVudFNlcnZpY2Uuc3RvcmVkRHluYW1pY0Zvcm07XHJcbiAgICAgICAgZmlsZVsnZHluYW1pY0RhdGEnXSA9IHt9O1xyXG4gICAgICAgIGZpbGVbJ3N0YXRpY0Zvcm1WYWxpZCddID0gdGhpcy51c2luZ0V4dHJhRmllbGRzID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgIGZpbGVbJ3N0YXRpY0RhdGEnXSA9IHRoaXMuc2V0U3RhdGljRGF0YShmaWxlLnRpdGxlID8gZmlsZS50aXRsZSA6IGZpbGUubmFtZSk7XHJcbiAgICAgICAgZmlsZVsnZ2VuZXJhbFZhbGlkYXRpb25WYWxpZCddID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIH0pXHJcbiAgICB9XHJcbiAgICB0aGlzLmFkZGluZ1Byb3BlcnRpZXMgPSB0cnVlO1xyXG4gICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuYWRkaW5nUHJvcGVydGllc01vZGUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0U3RhdGljRGF0YSh0aXRsZSkge1xyXG4gICAgaWYgKHRoaXMudXNpbmdFeHRyYUZpZWxkcykge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgc3ViamVjdDogJycsXHJcbiAgICAgICAgZG9jdW1lbnROdW1iZXI6ICcnLFxyXG4gICAgICAgIGdkb2N1bWVudERhdGU6IG51bGwsXHJcbiAgICAgICAgc2VjcmVjeUxldmVsOiBudWxsLFxyXG4gICAgICAgIGltcG9ydGFuY2VMZXZlbDogbnVsbCxcclxuICAgICAgICBkZXBhcnRtZW50Q29kZTogdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRGVwYXJ0bWVudEZyb21QYXRoKHRoaXMuZGF0YS5wYXRoKSxcclxuICAgICAgICBhZ2VuY3lDYXRlZ29yeUNvZGU6IG51bGwsXHJcbiAgICAgICAgYWdlbmN5TmFtZTogbnVsbCxcclxuICAgICAgICBjb3VudHJ5Q2F0ZWdvcnlDb2RlOiBudWxsLFxyXG4gICAgICAgIGNvdW50cnlOYW1lOiBudWxsLFxyXG4gICAgICAgIHJlbWFya3M6ICcnXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJ1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVEb2N1bWVudCgpIHtcclxuICAgIHRoaXMuY3JlYXRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuZmFpbGVkRmlsZXMgPSBbXTtcclxuICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLkdlbmVyYWxGb3JtVmFsaWRhdGlvbiA9IHRoaXMuY2hlY2tWYWxpZGF0aW9uKCk7XHJcbiAgICBpZiAodGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuR2VuZXJhbEZvcm1WYWxpZGF0aW9uKSB7XHJcblxyXG4gICAgICBsZXQgYXBpQ2FsbHMgPSBbXTtcclxuICAgICAgaWYgKHRoaXMuZGF0YT8ucGF0aC5pbmNsdWRlcygnL2RlZmF1bHQtZG9tYWluL3dvcmtzcGFjZXMvRE1TV29ya3NwYWNlcycpKSB7XHJcbiAgICAgICAgICAgICAgIHRoaXMuY29uc3RydWN0UGF5TG9hZFRvV29ya1NwYWNlKHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkZWRGaWxlcyk7XHJcbiAgICAgICAgdGhpcy5wYXlsb2FkTGlzdC5tYXAocGF5bG9hZCA9PiB7XHJcbiAgICAgICAgICBhcGlDYWxscy5wdXNoKHRoaXMuZmlsZU1hbmdlclNlcnZpY2UuY3JlYXRlRmlsZShwYXlsb2FkLCB0aGlzLmZpbGVNYW5hZ2VyU2VydmljZS5zZWxlY3RlZEZvbGRlcklkLCAnRE1TLkNyZWF0ZURvY3VtZW50RnJvbUJsb2InKSlcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvbnN0cnVjdFBheUxvYWQodGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRlZEZpbGVzKTtcclxuICAgICAgICB0aGlzLnBheWxvYWRMaXN0Lm1hcChwYXlsb2FkID0+IHtcclxuICAgICAgICAgIGFwaUNhbGxzLnB1c2godGhpcy5maWxlTWFuZ2VyU2VydmljZS5jcmVhdGVGaWxlKHBheWxvYWQsIHRoaXMuZmlsZU1hbmFnZXJTZXJ2aWNlLnNlbGVjdGVkRm9sZGVySWQpKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGZvcmtKb2luKGFwaUNhbGxzKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2cocmVzKTtcclxuICAgICAgICB0aGlzLmNyZWF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgcmVzcG9uc2UubWFwKHNpbmdsZVJlcyA9PiB7XHJcbiAgICAgICAgICBpZiAoc2luZ2xlUmVzWydzdGF0dXMnXSAmJiBzaW5nbGVSZXNbJ3N0YXR1cyddID09PSAnZmFpbGVkJykge1xyXG4gICAgICAgICAgICB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5mYWlsZWRGaWxlcy5wdXNoKHNpbmdsZVJlc1snb3JpZ2luRmlsZSddKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYgKHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLmZhaWxlZEZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMudG9zdGVyU2VydmljZS5zaG93KCdlcnJvcicsICdUT0FTVEVSLkVSUk9SJywgJ1RPQVNURVIuVVBMT0FEX0VSUk9SJyk7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZGVkRmlsZXMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMuYWxsZmlsZXMgPSBbLi4udGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UuZmFpbGVkRmlsZXNdO1xyXG5cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZmlsZU1hbmdlclNlcnZpY2Uub25SZWZyZXNoaW5nRmlsZU1hbmdlci5uZXh0KCk7XHJcbiAgICAgICAgICB0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdygnc3VjY2VzcycsICdUT0FTVEVSLlNVQ0NFU1MnLCBcIlRPQVNURVIuRklMRV9DUkVBVEVEX1NVQ0NFXCIpXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5yZXNldFN0YXR1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNyZWF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAvLyB0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdygnZXJyb3InICwgJ1RPQVNURVIuRVJST1InICwgJ1RPQVNURVIuVVBMT0FEX0VSUk9SJyk7XHJcbiAgICAgICAgICAvLyB0aGlzLmNsb3NlRGlhbG9nKCk7XHJcbiAgICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3JlYXRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdFBheUxvYWRUb1dvcmtTcGFjZShmaWxlcykge1xyXG4gICAgdGhpcy5wYXlsb2FkTGlzdCA9IFtdO1xyXG4gICAgZmlsZXMubWFwKGZpbGUgPT4ge1xyXG4gICAgICBsZXQgcGFyYW0gPSB7XHJcbiAgICAgICAgXCJmaWxlaW5kZXhcIjogMCxcclxuICAgICAgICBcImZpbGVOYW1lXCI6IGZpbGUuc3RhdGljRGF0YS50aXRsZSxcclxuICAgICAgICBcImJhdGNoaWRcIjogZmlsZS5iYXRjaC5ibG9iWyd1cGxvYWQtYmF0Y2gnXSxcclxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHRoaXMuZmlsZUZvcm0uY29udHJvbHMuZGVzY3JpcHRpb24udmFsdWVcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5wYXlsb2FkTGlzdC5wdXNoKHsgcGFyYW1zOiBwYXJhbSwgb3JpZ2luRmlsZTogZmlsZSB9KTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB0cnlBZ2FpbkNyZWF0ZURvY3VtZW50KCkge1xyXG4gICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkRmlsZXNNYW5nbWVudCh0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS5mYWlsZWRGaWxlcyk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RQYXlMb2FkKGZpbGVzKSB7XHJcbiAgICB0aGlzLnBheWxvYWRMaXN0ID0gW107XHJcbiAgICBmaWxlcy5tYXAoZmlsZSA9PiB7XHJcbiAgICAgIGxldCBwcm9wcyA9IHRoaXMuZHluYW1pY0Zvcm1TZXJ2aWNlLmNvbnN0cnVjdER5bmFtaWNGb3JtUGF5bG9hZChmaWxlLmR5bmFtaWNEYXRhLmRhdGEgPyBmaWxlLmR5bmFtaWNEYXRhLmRhdGEgOiB7fSwgZmlsZS5keW5hbWljRm9ybSk7XHJcbiAgICAgIGxldCBzdGF0aWNGb3JtRGF0YSA9IHRoaXMubWFwcGluZ1N0YXRpY0RhdGEoZmlsZS5zdGF0aWNEYXRhKVxyXG4gICAgICBsZXQgcGFyYW0gPSB7XHJcbiAgICAgICAgXCJkb2N1bWVudFwiOiB7XHJcbiAgICAgICAgICBcInR5cGVcIjogZmlsZS5maWxlVHlwZS50eXBlLFxyXG4gICAgICAgICAgXCJuYW1lXCI6IGZpbGUuc3RhdGljRGF0YS50aXRsZSxcclxuICAgICAgICAgIFwicHJvcGVydGllc1wiOiB7XHJcbiAgICAgICAgICAgIC4uLnByb3BzLFxyXG4gICAgICAgICAgICAuLi5zdGF0aWNGb3JtRGF0YSxcclxuICAgICAgICAgICAgXCJmaWxlOmNvbnRlbnRcIjoge1xyXG4gICAgICAgICAgICAgIFwidXBsb2FkLWJhdGNoXCI6IGZpbGUuYmF0Y2guYmxvYlsndXBsb2FkLWJhdGNoJ10sXHJcbiAgICAgICAgICAgICAgXCJ1cGxvYWQtZmlsZUlkXCI6IGZpbGUuYmF0Y2guYmxvYlsndXBsb2FkLWZpbGVJZCddLFxyXG4gICAgICAgICAgICAgIFwibWltZS10eXBlXCI6IGZpbGUudHlwZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICBpZiAoZmlsZS5maWxlVHlwZS5kb2N1bWVudENvZGUpIHtcclxuICAgICAgICBwYXJhbVtcImRvY3VtZW50VHlwZUNvZGVcIl0gPSBmaWxlLmZpbGVUeXBlLmRvY3VtZW50Q29kZVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucGF5bG9hZExpc3QucHVzaCh7IHBhcmFtczogcGFyYW0sIG9yaWdpbkZpbGU6IGZpbGUgfSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgbWFwcGluZ1N0YXRpY0RhdGEoZGF0YSkge1xyXG4gICAgaWYgKGRhdGEuZ2RvY3VtZW50RGF0ZSAmJiBkYXRhLmdkb2N1bWVudERhdGUgIT09IG51bGwpIHtcclxuICAgICAgbW9tZW50LmxvY2FsZSgnZW4nKTtcclxuICAgICAgZGF0YVsnaGRvY3VtZW50RGF0ZSddID0gdGhpcy5kYXRlSGVscGVyU2VydmljZS5ncmVnb3JpYW5Ub0hpanJpKGRhdGEuZ2RvY3VtZW50RGF0ZSwgJ2lZWVlZLWlNTS1pREQnKTtcclxuICAgICAgZGF0YS5nZG9jdW1lbnREYXRlID0gKG1vbWVudChkYXRhLmdkb2N1bWVudERhdGUpLmZvcm1hdChcIllZWVktTU0tRERUMDA6MDA6MDAuMDAwXCIpICsgXCJaXCIpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5hZGFwZXRlci5hZGFwdE91dChkYXRhLCB0aGlzLnN0YXRpY0Zvcm1GaWVsZHMpXHJcbiAgfVxyXG4gICAgXHJcbiAgc2VsZWN0RmlsZShmaWxlKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImZpbGUgaW4gc2VsZWN0XCIsIGZpbGUpXHJcbiAgICB0aGlzLnNob3dTdGF0aWNGb3JtID0gZmFsc2U7XHJcbiAgICB0aGlzLmFnZW5jeU5hbWVGaWx0ZXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmNvdW50cnlOYW1lRmlsdGVyID0gdW5kZWZpbmVkO1xyXG4gICAgLy9jb25zb2xlLmxvZyhmaWxlKTtcclxuICAgIGlmICghdGhpcy5hZGRpbmdQcm9wZXJ0aWVzKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRBZGRpbmdQcm9wZXJ0aWVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5hZGRpbmdQcm9wZXJ0aWVzKSB7XHJcbiAgICAgIHRoaXMuc2hvd1JlbmRlcmVyID0gZmFsc2U7XHJcbiAgICAgIC8vIGNoZWNrIGlmIGZpbGUgaGFzIHByb3BlcnRpZXMgb2YgYWRkaW5nIHByb3BlcnRpZXMgb3Igbm90IHRoZW4gYWRkIGl0IHRvIGhpbVxyXG4gICAgICBpZiAoIWZpbGUuaGFzT3duUHJvcGVydHkoJ2ZpbGVUeXBlJykpIHtcclxuICAgICAgICB0aGlzLmR5bmFtaWNGb3JtU2VydmljZS5nZXREeW5hbWljRm9ybSh0aGlzLmZpbGVUeXBlLmRvY3VtZW50Q29kZSA/IHRoaXMuZmlsZVR5cGUuZG9jdW1lbnRDb2RlIDogdGhpcy5maWxlVHlwZS50eXBlKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgIGZpbGVbJ2ZpbGVUeXBlJ10gPSB0aGlzLnNvdXJjZSA9PT0gJ2ZpbGVNYW5nZXInID8gdGhpcy5maWxlVHlwZSA6IHt9O1xyXG4gICAgICAgICAgZmlsZVsnZHluYW1pY0Zvcm0nXSA9IHJlcztcclxuICAgICAgICAgIGZpbGVbJ2R5bmFtaWNEYXRhJ10gPSB7fTtcclxuICAgICAgICAgIGZpbGVbJ3N0YXRpY0Zvcm1WYWxpZCddID0gdGhpcy51c2luZ0V4dHJhRmllbGRzID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgICAgZmlsZVsnZ2VuZXJhbFZhbGlkYXRpb25WYWxpZCddID0gdHJ1ZTtcclxuICAgICAgICAgIGZpbGVbJ3N0YXRpY0RhdGEnXSA9IHRoaXMuc2V0U3RhdGljRGF0YShmaWxlLnRpdGxlID8gZmlsZS50aXRsZSA6IGZpbGUubmFtZSk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IGZpbGU7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuZmlsZUZvcm0pIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWF0ZmlsZUZvcm0oKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZmlsZUZvcm0ucGF0Y2hWYWx1ZSh0aGlzLnNlbGVjdGVkRmlsZVsnc3RhdGljRGF0YSddKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnRlbXBvcmFyeUR5YW5taWNEYXRhID0ge307XHJcbiAgICAgICAgICB0aGlzLnRlbXBvcmFyeUR5YW5taWNEYXRhID0gdGhpcy5zZWxlY3RlZEZpbGUuZHluYW1pY0RhdGEuZGF0YSA/IHsgLi4udGhpcy5zZWxlY3RlZEZpbGUuZHluYW1pY0RhdGEuZGF0YSB9IDoge307XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zaG93UmVuZGVyZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dTdGF0aWNGb3JtID0gdHJ1ZTtcclxuICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGZpbGUpO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmZpbGVGb3JtU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsZUZvcm1TdWJzY3JpcHRpb24gPSB0aGlzLmZpbGVGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlLnN0YXRpY0Zvcm1WYWxpZCA9IHRoaXMuZmlsZUZvcm0gPyB0aGlzLmZpbGVGb3JtLnZhbGlkIDogZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZS5zdGF0aWNEYXRhID0gdGhpcy5maWxlRm9ybSA/IHRoaXMuZmlsZUZvcm0udmFsdWUgOiB7fTtcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsZUZvcm0uZ2V0KCdhZ2VuY3lDYXRlZ29yeUNvZGUnKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZ2VuY3lDYXRlZ0NvZGVTdWJzY3JpcHRpb24gPSB0aGlzLmZpbGVGb3JtLmdldCgnYWdlbmN5Q2F0ZWdvcnlDb2RlJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZpbGVGb3JtLmdldCgnYWdlbmN5TmFtZScpLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFnZW5jeU5hbWVGaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IHJlc1xyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsZUZvcm0uZ2V0KCdjb3VudHJ5Q2F0ZWdvcnlDb2RlJykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291bnRyeUNhdGVnQ29kZVN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsZUZvcm0uZ2V0KCdjb3VudHJ5Q2F0ZWdvcnlDb2RlJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZpbGVGb3JtLmdldCgnY291bnRyeU5hbWUnKS5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudHJ5TmFtZUZpbHRlciA9IHtcclxuICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeTogcmVzXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IGZpbGU7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZpbGVGb3JtKSB7XHJcbiAgICAgICAgICB0aGlzLmluaXRpYXRmaWxlRm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbGVGb3JtLnBhdGNoVmFsdWUoeyAuLi50aGlzLnNlbGVjdGVkRmlsZVsnc3RhdGljRGF0YSddIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZVsnc3RhdGljRGF0YSddWydhZ2VuY3lDYXRlZ29yeUNvZGUnXSkge1xyXG4gICAgICAgICAgdGhpcy5hZ2VuY3lOYW1lRmlsdGVyID0ge1xyXG4gICAgICAgICAgICBjYXRlZ29yeTogdGhpcy5zZWxlY3RlZEZpbGVbJ3N0YXRpY0RhdGEnXVsnYWdlbmN5Q2F0ZWdvcnlDb2RlJ11cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZVsnc3RhdGljRGF0YSddWydjb3VudHJ5Q2F0ZWdvcnlDb2RlJ10pIHtcclxuICAgICAgICAgIHRoaXMuY291bnRyeU5hbWVGaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgIGNhdGVnb3J5OiB0aGlzLnNlbGVjdGVkRmlsZVsnc3RhdGljRGF0YSddWydjb3VudHJ5Q2F0ZWdvcnlDb2RlJ11cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGVtcG9yYXJ5RHlhbm1pY0RhdGEgPSB7fTtcclxuICAgICAgICB0aGlzLnRlbXBvcmFyeUR5YW5taWNEYXRhID0gdGhpcy5zZWxlY3RlZEZpbGUuZHluYW1pY0RhdGEuZGF0YSA/IHRoaXMuc2VsZWN0ZWRGaWxlLmR5bmFtaWNEYXRhLmRhdGEgOiB7fTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hvd1JlbmRlcmVyID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc2hvd1N0YXRpY0Zvcm0gPSB0cnVlO1xyXG5cclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgICAgIGlmICghdGhpcy5maWxlRm9ybVN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZUZvcm1TdWJzY3JpcHRpb24gPSB0aGlzLmZpbGVGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZS5zdGF0aWNGb3JtVmFsaWQgPSB0aGlzLmZpbGVGb3JtID8gdGhpcy5maWxlRm9ybS52YWxpZCA6IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlLnN0YXRpY0RhdGEgPSB0aGlzLmZpbGVGb3JtID8gdGhpcy5maWxlRm9ybS52YWx1ZSA6IHt9O1xyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZmlsZUZvcm0uZ2V0KCdhZ2VuY3lDYXRlZ29yeUNvZGUnKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWdlbmN5Q2F0ZWdDb2RlU3Vic2NyaXB0aW9uID0gdGhpcy5maWxlRm9ybS5nZXQoJ2FnZW5jeUNhdGVnb3J5Q29kZScpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZUZvcm0uZ2V0KCdhZ2VuY3lOYW1lJykuc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFnZW5jeU5hbWVGaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiByZXNcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5maWxlRm9ybS5nZXQoJ2NvdW50cnlDYXRlZ29yeUNvZGUnKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY291bnRyeUNhdGVnQ29kZVN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsZUZvcm0uZ2V0KCdjb3VudHJ5Q2F0ZWdvcnlDb2RlJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlRm9ybS5nZXQoJ2NvdW50cnlOYW1lJykuc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlOYW1lRmlsdGVyID0ge1xyXG4gICAgICAgICAgICAgICAgICBjYXRlZ29yeTogcmVzXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25keW5hbWljRm9ybUNoYW5nZShkeW5hbWljRGF0YSkge1xyXG4gICAgY29uc29sZS5sb2coZHluYW1pY0RhdGEpXHJcbiAgICBpZiAoZHluYW1pY0RhdGEub3JpZ2luYWxFdmVudD8uaXNWYWxpZCkge1xyXG4gICAgICB0aGlzLmRpc2FibGVDcmVhdGVXaGVuRmluaXNoQnRuID0gZmFsc2VcclxuICAgIH1cclxuICAgIGlmIChkeW5hbWljRGF0YS5kYXRhKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlLmR5bmFtaWNEYXRhID0geyAuLi5keW5hbWljRGF0YSB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWluaW1pekRpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlSXRlbShpdGVtLCBsaXN0b2ZGaWxlcykge1xyXG4gICAgY29uc3QgcmVtb3ZlSW5kZXggPSBsaXN0b2ZGaWxlcy5maW5kSW5kZXgoZmlsZSA9PiBmaWxlLm5hbWUgPT09IGl0ZW0ubmFtZSk7XHJcbiAgICBsaXN0b2ZGaWxlcy5zcGxpY2UocmVtb3ZlSW5kZXgsIDEpO1xyXG4gICAgaWYgKGl0ZW0ubmFtZSA9PT0gdGhpcy5zZWxlY3RlZEZpbGUubmFtZSkge1xyXG4gICAgICBpZiAodGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRlZEZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEZpbGUodGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRlZEZpbGVzWzBdKVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMuYWxsZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0RmlsZSh0aGlzLnVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLmFsbGZpbGVzWzBdKVxyXG4gICAgICB9XHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRGaWxlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEFwcGx5Q2hhbmdlc1RvQWxsKCkge1xyXG4gICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRlZEZpbGVzLm1hcChmaWxlID0+IHtcclxuICAgICAgbGV0IHRpdGxlID0gZmlsZVsnc3RhdGljRGF0YSddID8gZmlsZVsnc3RhdGljRGF0YSddWyd0aXRsZSddIDogZmlsZS5uYW1lO1xyXG4gICAgICBmaWxlWydmaWxlVHlwZSddID0gdGhpcy5zZWxlY3RlZEZpbGUuZmlsZVR5cGU7XHJcbiAgICAgIGZpbGVbJ2R5bmFtaWNGb3JtJ10gPSB0aGlzLnNlbGVjdGVkRmlsZS5keW5hbWljRm9ybTtcclxuICAgICAgZmlsZVsnZHluYW1pY0RhdGEnXSA9IHRoaXMuc2VsZWN0ZWRGaWxlLmR5bmFtaWNEYXRhO1xyXG4gICAgICBmaWxlWydzdGF0aWNGb3JtVmFsaWQnXSA9IHRoaXMuc2VsZWN0ZWRGaWxlLnN0YXRpY0Zvcm1WYWxpZDtcclxuICAgICAgZmlsZVsnc3RhdGljRGF0YSddID0geyAuLi50aGlzLmZpbGVGb3JtLnZhbHVlIH07XHJcbiAgICAgIGZpbGVbJ3N0YXRpY0RhdGEnXVsndGl0bGUnXSA9IHRpdGxlO1xyXG4gICAgfSlcclxuICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMuYWxsZmlsZXMubWFwKGZpbGUgPT4ge1xyXG4gICAgICBsZXQgdGl0bGUgPSBmaWxlWydzdGF0aWNEYXRhJ10gPyBmaWxlWydzdGF0aWNEYXRhJ11bJ3RpdGxlJ10gOiBmaWxlLm5hbWU7XHJcbiAgICAgIGZpbGVbJ2ZpbGVUeXBlJ10gPSB0aGlzLnNlbGVjdGVkRmlsZS5maWxlVHlwZTtcclxuICAgICAgZmlsZVsnZHluYW1pY0Zvcm0nXSA9IHRoaXMuc2VsZWN0ZWRGaWxlLmR5bmFtaWNGb3JtO1xyXG4gICAgICBmaWxlWydkeW5hbWljRGF0YSddID0gdGhpcy5zZWxlY3RlZEZpbGUuZHluYW1pY0RhdGE7XHJcbiAgICAgIGZpbGVbJ3N0YXRpY0Zvcm1WYWxpZCddID0gdGhpcy5zZWxlY3RlZEZpbGUuc3RhdGljRm9ybVZhbGlkO1xyXG4gICAgICBmaWxlWydzdGF0aWNEYXRhJ10gPSB7IC4uLnRoaXMuZmlsZUZvcm0udmFsdWUgfTtcclxuICAgICAgZmlsZVsnc3RhdGljRGF0YSddWyd0aXRsZSddID0gdGl0bGU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNoZWNrVmFsaWRhdGlvbigpIHtcclxuICAgIGxldCB2YWxpZGF0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMudXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXMudXBsb2FkZWRGaWxlcy5tYXAoZmlsZSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiZmlsZVwiLCBmaWxlKVxyXG4gICAgICBpZiAoIWZpbGUuaGFzT3duUHJvcGVydHkoJ2ZpbGVUeXBlJykgfHwgZmlsZVsnc3RhdGljRm9ybVZhbGlkJ10gPT09IGZhbHNlIHx8IGZpbGUuZHluYW1pY0RhdGE/Lm9yaWdpbmFsRXZlbnQ/LmlzVmFsaWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgZmlsZVsnZ2VuZXJhbFZhbGlkYXRpb25WYWxpZCddID0gZmFsc2VcclxuICAgICAgICB2YWxpZGF0aW9uID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmlsZVsnZ2VuZXJhbFZhbGlkYXRpb25WYWxpZCddID0gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgdGhpcy51cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy5hbGxmaWxlcy5tYXAoZmlsZSA9PiB7XHJcbiAgICAgIGlmIChmaWxlWydzdGF0aWNGb3JtVmFsaWQnXSA9PT0gZmFsc2UgfHwgZmlsZS5keW5hbWljRGF0YT8ub3JpZ2luYWxFdmVudD8uaXNWYWxpZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICBmaWxlWydnZW5lcmFsVmFsaWRhdGlvblZhbGlkJ10gPSBmYWxzZTtcclxuICAgICAgICB2YWxpZGF0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbGVbJ2dlbmVyYWxWYWxpZGF0aW9uVmFsaWQnXSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB2YWxpZGF0aW9uO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmZpbGVGb3JtU3Vic2NyaXB0aW9uID8gdGhpcy5maWxlRm9ybVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpIDogJyc7XHJcbiAgICB0aGlzLmxhbmdTdWJzY3JpcHRpb24gPyB0aGlzLmxhbmdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSA6ICcnO1xyXG4gICAgdGhpcy5jb3VudHJ5Q2F0ZWdDb2RlU3Vic2NyaXB0aW9uID8gdGhpcy5jb3VudHJ5Q2F0ZWdDb2RlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkgOiAnJztcclxuICAgIHRoaXMuYWdlbmN5Q2F0ZWdDb2RlU3Vic2NyaXB0aW9uID8gdGhpcy5hZ2VuY3lDYXRlZ0NvZGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSA6ICcnO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImluZXItd3JhcHBlclwiIFtuZ0NsYXNzXT1cInsgJ2QtZmxleCc6IGFkZGluZ1Byb3BlcnRpZXMgfVwiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJhZGRpbmdQcm9wZXJ0aWVzXCIgY2xhc3M9XCJwcm9wZXJ0aWVzLXNlY3Rpb24gcC0zIG92ZXJmbG93LXgtaGlkZGVuIG92ZXJmbG93LXktYXV0b1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nSWY9XCJzZWxlY3RlZEZpbGUgJiYgc291cmNlID09PSAnZmlsZU1hbmdlcicgJiYgc2hvd1N0YXRpY0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLXN0eWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiQ1JFQVRFLkZJTEVfVFlQRVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFzZSB0ZXh0LWdyYXktOTAwXCI+e3sgaXNBcmFiaWMgPyBmaWxlVHlwZS5hcmFiaWNUZXh0IDogZmlsZVR5cGUuZW5nbGlzaFRleHQgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtZmllbGRzIG10LTNcIiBTZXRSdGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmaWxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tb2xkIHN0YXRpYyBmb3JtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLWZpZWxkIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtc3R5bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJDUkVBVEUuVElUTEVcIiB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwidGV4dC1yZWQtNTAwXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQtc3R5bGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCIgcGxhY2Vob2xkZXI9XCIge3sgJ0NSRUFURS5USVRMRScgfCB0cmFuc2xhdGV9fVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW5nbGUtZmllbGQgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1zdHlsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcIkNSRUFURS5ERVNDUklQVElPTlwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZmllbGQtc3R5bGVcIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiIHt7ICdDUkVBVEUuREVTQ1JJUFRJT04nIHwgdHJhbnNsYXRlfX1cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLSBuZXcgc3RhdGlzIGZvcm0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2luZ0V4dHJhRmllbGRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzLXJlbmRlcmVyIFtmb3JtXT1cImZpbGVGb3JtXCIgW2FnZW5jeU5hbWVGaWx0ZXJdPVwiYWdlbmN5TmFtZUZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvdW50cnlOYW1lRmlsdGVyXT1cImNvdW50cnlOYW1lRmlsdGVyXCI+PC9hcHAtZHluYW1pYy1maWVsZHMtcmVuZGVyZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJzaW5nbGUtZmllbGQgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1zdHlsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcIkNSRUFURS5ET0NVTUVOVF9TVUJKRUNUXCIgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMFwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZmllbGQtc3R5bGVcIiBmb3JtQ29udHJvbE5hbWU9XCJzdWJqZWN0XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiIHt7ICdDUkVBVEUuRE9DVU1FTlRfU1VCSkVDVCcgfCB0cmFuc2xhdGV9fVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1maWVsZCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLXN0eWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiQ1JFQVRFLkRPQ1VNRU5UX05VTUJFUlwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZmllbGQtc3R5bGVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRvY3VtZW50TnVtYmVyXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIiB7eyAnQ1JFQVRFLkRPQ1VNRU5UX05VTUJFUicgfCB0cmFuc2xhdGV9fVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1maWVsZCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3RzLWR5bmFtaWMtZm9ybS1oaWpyaS1kYXRlaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImdkb2N1bWVudERhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiQ1JFQVRFLkRPQ1VNRU5UX0RBVEVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY3RzLWR5bmFtaWMtZm9ybS1oaWpyaS1kYXRlaXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1maWVsZCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZvcm0tdm9jYWJ1bGFyeS1pdGVtIFtsYWJlbF09XCInQ1JFQVRFLlNDUkVDWV9MRVZFTCdcIiBbYmluZExhYmVsXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kVmFsdWVdPVwiJ2lkJ1wiIHBsYWNlaG9sZGVyPVwie3sgJ1ZPQ0FCVUxBUlkuU0VMRUNUX0lURU0nIHwgdHJhbnNsYXRlIH19XCIgW211bHRpcGxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoYWJsZV09XCJmYWxzZVwiIFtjbG9zZU9uU2VsZWN0XT1cInRydWVcIiBbaGlkZVNlbGVjdGVkSXRlbXNdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2NhYnVsYXJ5VHlwZV09XCInVk9DX1NlY3JlY3lMZXZlbCdcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWNyZWN5TGV2ZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtZHluYW1pYy1mb3JtLXZvY2FidWxhcnktaXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1maWVsZCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZvcm0tdm9jYWJ1bGFyeS1pdGVtIFtsYWJlbF09XCInQ1JFQVRFLklNUE9SVEFOQ0VfTEVWRUwnXCIgW2JpbmRMYWJlbF09XCInbGFiZWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZFZhbHVlXT1cIidpZCdcIiBwbGFjZWhvbGRlcj1cInt7ICdWT0NBQlVMQVJZLlNFTEVDVF9JVEVNJyB8IHRyYW5zbGF0ZSB9fVwiIFttdWx0aXBsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaGFibGVdPVwiZmFsc2VcIiBbY2xvc2VPblNlbGVjdF09XCJ0cnVlXCIgW2hpZGVTZWxlY3RlZEl0ZW1zXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9jYWJ1bGFyeVR5cGVdPVwiJ1ZPQ19JbXBvcnRhbmNlJ1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImltcG9ydGFuY2VMZXZlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1keW5hbWljLWZvcm0tdm9jYWJ1bGFyeS1pdGVtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1maWVsZCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLXN0eWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiQ1JFQVRFLkRFUEFSVE1FTlRfQ09ERVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZvcm0tZGVwYXJ0bWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlcGFydG1lbnRDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3BsZWFzZSBzZWxlY3QgZGVwYXJ0bWVudCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcF9kZXBhcnRtZW50TmVzdGVkVHJlZV09XCInUFBfT1NfRGVwYXJ0bWVudHMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHBfZGVwYXJ0bWVudFRyZWVdPVwiJ1BQX09TX0RlcGFydG1lbnRzJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbVByZWZpeF09XCInb3NkZXB0J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbVBhcmVudFByb3BlcnR5XT1cIidvc2RlcGFydG1lbnRfcGFyZW50RGVwYXJ0bWVudENvZGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdXNlQ3VzdG9tQWRkRWRpdEFjdGlvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1keW5hbWljLWZvcm0tZGVwYXJ0bWVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW5nbGUtZmllbGQgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtdHJhbnNsYXRlZC12b2NhYnVsYXJ5LXNlbGVjdCBbbGFiZWxdPVwiJ0NSRUFURS5BR0VOQ1lfQ0FURUdPUllfQ09ERSdcIiBbYXJiQmluZExhYmVsXT1cIidsYWJlbF9hcidcIiBbZW5nQmluZExhYmVsXT1cIidsYWJlbF9lbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kVmFsdWVdPVwiJ2lkJ1wiIHBsYWNlaG9sZGVyPVwie3sgJ1ZPQ0FCVUxBUlkuU0VMRUNUX0lURU0nIHwgdHJhbnNsYXRlIH19XCIgW211bHRpcGxlXT1cImZhbHNlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaGFibGVdPVwidHJ1ZVwiIFtjbG9zZU9uU2VsZWN0XT1cInRydWVcIiBbaGlkZVNlbGVjdGVkSXRlbXNdPVwiZmFsc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJhZ2VuY3lDYXRlZ29yeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2NidWxhcnlJZF09XCInVk9DX0FnZW5jeUNhdGVnb3J5J1wiIFt1c2VGaWx0ZXJdPVwiZmFsc2VcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtdHJhbnNsYXRlZC12b2NhYnVsYXJ5LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLWZpZWxkIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXRyYW5zbGF0ZWQtdm9jYWJ1bGFyeS1zZWxlY3QgW2xhYmVsXT1cIidDUkVBVEUuQUdFTkNZX05BTUUnXCIgW2FyYkJpbmRMYWJlbF09XCInbGFiZWxfYXInXCIgW2VuZ0JpbmRMYWJlbF09XCInbGFiZWxfZW4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZFZhbHVlXT1cIidpZCdcIiBwbGFjZWhvbGRlcj1cInt7ICdWT0NBQlVMQVJZLlNFTEVDVF9JVEVNJyB8IHRyYW5zbGF0ZSB9fVwiIFttdWx0aXBsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaGFibGVdPVwidHJ1ZVwiIFtjbG9zZU9uU2VsZWN0XT1cInRydWVcIiBbaGlkZVNlbGVjdGVkSXRlbXNdPVwiZmFsc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJhZ2VuY3lOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9jYnVsYXJ5SWRdPVwiJ1ZPQ19BZ2VuY3knXCIgW2ZpbHRlcl09XCJhZ2VuY3lOYW1lRmlsdGVyXCIgW3VzZUZpbHRlcl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtdHJhbnNsYXRlZC12b2NhYnVsYXJ5LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLWZpZWxkIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXRyYW5zbGF0ZWQtdm9jYWJ1bGFyeS1zZWxlY3QgW2xhYmVsXT1cIidDUkVBVEUuQ09VTlRSWV9DQVRFR09SWV9DT0RFJ1wiIFthcmJCaW5kTGFiZWxdPVwiJ2xhYmVsX2FyJ1wiIFtlbmdCaW5kTGFiZWxdPVwiJ2xhYmVsX2VuJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRWYWx1ZV09XCInaWQnXCIgcGxhY2Vob2xkZXI9XCJ7eyAnVk9DQUJVTEFSWS5TRUxFQ1RfSVRFTScgfCB0cmFuc2xhdGUgfX1cIiBbbXVsdGlwbGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hhYmxlXT1cInRydWVcIiBbY2xvc2VPblNlbGVjdF09XCJ0cnVlXCIgW2hpZGVTZWxlY3RlZEl0ZW1zXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwiY291bnRyeUNhdGVnb3J5Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZvY2J1bGFyeUlkXT1cIidWT0NfQ291bnRyeUNhdGVnb3J5J1wiIFt1c2VGaWx0ZXJdPVwiZmFsc2VcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtdHJhbnNsYXRlZC12b2NhYnVsYXJ5LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLWZpZWxkIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXRyYW5zbGF0ZWQtdm9jYWJ1bGFyeS1zZWxlY3QgW2xhYmVsXT1cIidDUkVBVEUuQ09VTlRSWV9OQU1FJ1wiIFthcmJCaW5kTGFiZWxdPVwiJ2xhYmVsX2FyJ1wiIFtlbmdCaW5kTGFiZWxdPVwiJ2xhYmVsX2VuJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRWYWx1ZV09XCInaWQnXCIgcGxhY2Vob2xkZXI9XCJ7eyAnVk9DQUJVTEFSWS5TRUxFQ1RfSVRFTScgfCB0cmFuc2xhdGUgfX1cIiBbbXVsdGlwbGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hhYmxlXT1cInRydWVcIiBbY2xvc2VPblNlbGVjdF09XCJ0cnVlXCIgW2hpZGVTZWxlY3RlZEl0ZW1zXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwiY291bnRyeU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2NidWxhcnlJZF09XCInVk9DX0NvdW50cnknXCIgW2ZpbHRlcl09XCJjb3VudHJ5TmFtZUZpbHRlclwiIFt1c2VGaWx0ZXJdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLXRyYW5zbGF0ZWQtdm9jYWJ1bGFyeS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2luZ2xlLWZpZWxkIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtc3R5bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCJDUkVBVEUuUkVNQVJLU1wiIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmaWVsZC1zdHlsZVwiIGZvcm1Db250cm9sTmFtZT1cInJlbWFya3NcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIge3sgJ0NSRUFURS5SRU1BUktTJyB8IHRyYW5zbGF0ZX19XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtcGFydFwiICpuZ0lmPVwic2hvd1JlbmRlcmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1mb3JtIFtmb3JtXT1cInNlbGVjdGVkRmlsZS5keW5hbWljRm9ybVwiIFtkYXRhXT1cInRlbXBvcmFyeUR5YW5taWNEYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25keW5hbWljRm9ybUNoYW5nZSgkZXZlbnQpXCI+PC9hcHAtZHluYW1pYy1mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdy1mdWxsXHJcbiAgICAgICAgICAgICAgICAgICAgaC1mdWxsXHJcbiAgICAgICAgICAgICAgICAgICAgcC0zXHJcbiAgICAgICAgICAgICAgICAgICAgZmxleFxyXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnktY2VudGVyXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMtY2VudGVyXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dC1sZyB0ZXh0LWdyYXktOTAwXHJcbiAgICAgICAgICAgICAgICBcIiAqbmdJZj1cIiFzZWxlY3RlZEZpbGVcIj5cclxuICAgICAgICAgICAgICAgIHt7IFwiQ1JFQVRFLlNFTEVDVF9UT1NUQVJUX0FERElOR1wiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50LXRhYi1ib2R5IG92ZXJmbG93LWhpZGRlblwiIFtuZ0NsYXNzXT1cInsgJ2F0dGFjaG1lbnQtaW5lci1zbWFsbC1ib2R5JzogYWRkaW5nUHJvcGVydGllcyB9XCI+XHJcbiAgICAgICAgICAgIDxhcHAtYXR0YWNobWVudHMgW211bHRpcGxlXT1cInRydWVcIiAob25TZWxlY3RpbmdJdGVtKT1cInNlbGVjdEZpbGUoJGV2ZW50KVwiPjwvYXBwLWF0dGFjaG1lbnRzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHRleHQtcmVkLTUwMCB0ZXh0LWJhc2UgdGV4dC1zdGFydCBweC0zXCIgKm5nSWY9XCIhdXBsb2FkTWFuZ21lbnRTZXJ2aWNlLkdlbmVyYWxGb3JtVmFsaWRhdGlvblwiPlxyXG5cclxuICAgICAgICB7eyBcIkNSRUFURS5GSUxMX1JFUVVJUkVEX0ZJRUxEXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImFjdGlvbnMtaW5lci13cmFwcGVyIHctZnVsbCBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgYWJzb2x1dGUgYm90dG9tLTBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC51cGxvYWRJblByb2dyZXNzIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZGVkRmlsZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5sZW5ndGggPiAwKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICFhZGRpbmdQcm9wZXJ0aWVzXHJcbiAgICAgICAgICAgICAgICBcIiAoY2xpY2spPVwic3RhcnRBZGRpbmdQcm9wZXJ0aWVzKClcIiBjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBcIkJVVFRPTlMuQUREX1BST1BFUlRJRVNcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGFkZGluZ1Byb3BlcnRpZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy51cGxvYWRlZEZpbGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5sZW5ndGggK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRNYW5nbWVudFNlcnZpY2UudXBsb2FkZWRGaWxlc1N0YXR1cy5hbGxmaWxlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmxlbmd0aCA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcclxuICAgICAgICAgICAgICAgIFwiIChjbGljayk9XCJBcHBseUNoYW5nZXNUb0FsbCgpXCIgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZEZpbGUgfHwgIXNlbGVjdGVkRmlsZS5zdGF0aWNGb3JtVmFsaWRcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgJ29wYWNpdHktMzAgY3Vyc29yLW5vdC1hbGxvd2VkJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgIXNlbGVjdGVkRmlsZSB8fCAhc2VsZWN0ZWRGaWxlLnN0YXRpY0Zvcm1WYWxpZCxcclxuICAgICAgICAgICAgICAgICAgICAnY3Vyc29yLXBvaW50ZXIgaG92ZXI6dGV4dC13aGl0ZSBob3ZlcjpiZy1ncmF5LTkwMCc6ICEoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICFzZWxlY3RlZEZpbGUgfHwgIXNlbGVjdGVkRmlsZS5zdGF0aWNGb3JtVmFsaWRcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9XCIgY2xhc3M9XCJzdWJtaXNzaW9uLWJ1dHRvbiBteC0yXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBcIkJVVFRPTlMuQVBQTFlfVE9fQUxMXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIGFkZGluZ1Byb3BlcnRpZXMgJiZcclxuICAgICAgICAgICAgIXVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZEluUHJvZ3Jlc3MgJiZcclxuICAgICAgICAgICAgdXBsb2FkTWFuZ21lbnRTZXJ2aWNlLmZhaWxlZEZpbGVzLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjcmVhdGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNyZWF0ZURvY3VtZW50KClcIiBjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwiQlVUVE9OUy5DUkVBVEVcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uXCIgKm5nSWY9XCJjcmVhdGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciBbdmFsdWVdPVwiOTBcIiBbc3Ryb2tlV2lkdGhdPVwiM1wiIG92ZXJsYXk9XCJ0cnVlXCIgW2RpYW1ldGVyXT1cIjI1XCIgY29sb3I9XCJ3YXJuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIGFkZGluZ1Byb3BlcnRpZXMgJiZcclxuICAgICAgICAgICAgIXVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZEluUHJvZ3Jlc3MgJiZcclxuICAgICAgICAgICAgdXBsb2FkTWFuZ21lbnRTZXJ2aWNlLmZhaWxlZEZpbGVzLmxlbmd0aCA+IDBcclxuICAgICAgICBcIiAoY2xpY2spPVwidHJ5QWdhaW5DcmVhdGVEb2N1bWVudCgpXCIgY2xhc3M9XCJzdWJtaXNzaW9uLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAge3sgXCJCVVRUT05TLlRSWV9BR0FJTlwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIWZpbGVGb3JtPy52YWxpZCB8fCBkaXNhYmxlQ3JlYXRlV2hlbkZpbmlzaEJ0blwiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYWRkaW5nUHJvcGVydGllcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzLnVwbG9hZEluUHJvZ3Jlc3NcclxuICAgICAgICAgICAgICAgIFwiIChjbGljayk9XCJjcmVhdGVXaGVuRmluaXNoKClcIiBjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uIHctNDRcIj5cclxuICAgICAgICAgICAgICAgIHt7IFwiQlVUVE9OUy5DUkVBVEVfV0hFTl9GSU5TSFwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWxhdGlvbi1idXR0b24gbXgtMlwiIChjbGljayk9XCJtaW5pbWl6RGlhbG9nKClcIiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZE1hbmdtZW50U2VydmljZS51cGxvYWRlZEZpbGVzU3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC51cGxvYWRJblByb2dyZXNzIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkTWFuZ21lbnRTZXJ2aWNlLnVwbG9hZGVkRmlsZXNTdGF0dXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm51bWJlck9mVXBsb2FkZWRGaWxlcyAhPT0gMCB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGFkZGluZ1Byb3BlcnRpZXNcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAge3sgXCJCVVRUT05TLk1JTklNSVpFRFwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsYXRpb24tYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5cclxuICAgICAgICAgICAgICAgIHt7IFwiQlVUVE9OUy5DQU5DRUxcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=