@rangertechnologies/ngnxt 2.1.35 → 2.1.36

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.
@@ -42,6 +42,7 @@ export class QuestionnaireComponent {
42
42
  insuranceStartDate;
43
43
  serv;
44
44
  tkn;
45
+ api;
45
46
  handleEvent = new EventEmitter();
46
47
  handlePage = new EventEmitter();
47
48
  handleQuestion = new EventEmitter();
@@ -1012,7 +1013,7 @@ export class QuestionnaireComponent {
1012
1013
  // HA 09FEB24 to clear the error: createAnswerBook is false
1013
1014
  paramMap['c__qb_id'] = uuid;
1014
1015
  paramMap["c__record_id"] = '';
1015
- this.dataService.getAPIFromNode('AnswerBook', 'Update', uuid, JSON.stringify(paramMap)).subscribe((data) => {
1016
+ this.dataService.getAPIFromNode('AnswerBook', 'Update', uuid, JSON.stringify(paramMap), this.api).subscribe((data) => {
1016
1017
  console.log('updated succussfully');
1017
1018
  console.log(data);
1018
1019
  this.successupdateAB(JSON.parse(data));
@@ -1050,7 +1051,7 @@ export class QuestionnaireComponent {
1050
1051
  // HA 09FEB24 to clear the error: createAnswerBook is false
1051
1052
  paramMap['c__qb_id'] = uuid;
1052
1053
  paramMap["c__record_id"] = '';
1053
- this.dataService.getAPIFromNode('QuestionBook', 'read', uuid, JSON.stringify(paramMap)).subscribe((data) => {
1054
+ this.dataService.getAPIFromNode('QuestionBook', 'read', uuid, JSON.stringify(paramMap), this.api).subscribe((data) => {
1054
1055
  this.sharedService.hideLoader();
1055
1056
  console.log('data came sucessfully');
1056
1057
  console.log(data);
@@ -1254,7 +1255,7 @@ export class QuestionnaireComponent {
1254
1255
  // HA 09FEB24 to clear the error: createAnswerBook is false
1255
1256
  paramMap['c__qb_id'] = uuid;
1256
1257
  paramMap["c__record_id"] = '';
1257
- this.dataService.getAPIFromNode('Question', 'read', uuid, JSON.stringify(paramMap)).subscribe((data) => {
1258
+ this.dataService.getAPIFromNode('Question', 'read', uuid, JSON.stringify(paramMap), this.api).subscribe((data) => {
1258
1259
  this.sharedService.hideLoader();
1259
1260
  console.log('data came sucessfully');
1260
1261
  console.log(data);
@@ -1342,7 +1343,7 @@ export class QuestionnaireComponent {
1342
1343
  // HA 09FEB24 to clear the error: createAnswerBook is false
1343
1344
  paramMap['c__qb_id'] = '';
1344
1345
  paramMap["c__record_id"] = '';
1345
- this.dataService.getAPIFromNode('Answer', 'create', JSON.stringify(this.answerWrap), JSON.stringify(paramMap)).subscribe((data) => {
1346
+ this.dataService.getAPIFromNode('Answer', 'create', JSON.stringify(this.answerWrap), JSON.stringify(paramMap), this.api).subscribe((data) => {
1346
1347
  console.log('data came sucessfully');
1347
1348
  console.log(data);
1348
1349
  this.successSave(JSON.parse(data));
@@ -1908,7 +1909,7 @@ export class QuestionnaireComponent {
1908
1909
  let paramMap = { createAnswerBookFlag: false };
1909
1910
  paramMap['c__qb_id'] = '';
1910
1911
  paramMap["c__record_id"] = '';
1911
- this.dataService.getAPIFromNode('Attachment', 'create', JSON.stringify(fileWrapper), JSON.stringify(paramMap)).subscribe((data) => {
1912
+ this.dataService.getAPIFromNode('Attachment', 'create', JSON.stringify(fileWrapper), JSON.stringify(paramMap), this.api).subscribe((data) => {
1912
1913
  console.log('updated succussfully');
1913
1914
  console.log(data);
1914
1915
  this.successAttachmentCreate(JSON.parse(data));
@@ -1942,7 +1943,7 @@ export class QuestionnaireComponent {
1942
1943
  let paramMap = { createAnswerBookFlag: false };
1943
1944
  paramMap['c__qb_id'] = '';
1944
1945
  paramMap["c__record_id"] = '';
1945
- this.dataService.getAPIFromNode('Attachment', 'delete', fileId, JSON.stringify(paramMap)).subscribe((data) => {
1946
+ this.dataService.getAPIFromNode('Attachment', 'delete', fileId, JSON.stringify(paramMap), this.api).subscribe((data) => {
1946
1947
  console.log('updated succussfully');
1947
1948
  console.log(data);
1948
1949
  this.successAttachmentDelete(JSON.parse(data));
@@ -2201,7 +2202,7 @@ export class QuestionnaireComponent {
2201
2202
  return Object.values(item)[0];
2202
2203
  }
2203
2204
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: QuestionnaireComponent, deps: [{ token: i1.SalesforceService }, { token: i2.DataService }, { token: i3.ChangeService }, { token: i4.SharedService }, { token: i5.ActivatedRoute }, { token: i6.DomSanitizer }, { token: i7.NgxSpinnerService }, { token: i8.UntypedFormBuilder }, { token: i9.DeviceDetectorService }, { token: i0.ElementRef }, { token: i10.I18nService }], target: i0.ɵɵFactoryTarget.Component });
2204
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: QuestionnaireComponent, selector: "lib-questionnaire", inputs: { qbId: "qbId", insuranceStartDate: "insuranceStartDate", serv: "serv", tkn: "tkn" }, outputs: { handleEvent: "handleEvent", handlePage: "handlePage", handleQuestion: "handleQuestion" }, providers: [ChangeService], usesOnChanges: true, ngImport: i0, template: "<!-- Spinner -->\n<ngx-spinner [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\n<!-- custom loader -->\n<app-loader></app-loader>\n<!-- Back Processing -->\n<div *ngIf=\"backicon == false\" >\n <div class=\"backicon\" [style.visibility]=\"questionStack.length >0 ? 'visible' : 'hidden'\">\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.Status__c == 'Completed' ? 'summary-volver':'app-back1'\">\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.Back__c }}\n </button>\n </div>\n</div>\n\n<!-- Question Hanlding -->\n<div *ngIf=\"questionItem\" [class]=\"qbItem.isShengel__c ? 'questiondiv1' : 'questiondiv1 padd-bottom'\">\n <!-- Progress Bar & Title -->\n <div *ngIf=\"questionItem.Title__c && qbItem.Progress_Bar__c\">\n <h1 class=\"header1\">{{ questionItem?.Title__c }}</h1>\n <div class=\"header2\">{{ questionItem?.SubTitle__c }}</div>\n </div>\n\n <!-- Progress & Grouping -->\n <div [ngClass]=\"{ questiondiv2: !qbItem?.Progress_Bar__c }\">\n <!-- Pie Chart Progress -->\n <div [ngClass]=\"{ bgColor: qbItem?.Progress_Bar__c }\">\n <div id=\"progress\" *ngIf=\"qbItem?.Progress_Bar__c\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n </div>\n </div>\n\n <!-- Show the Group/Module related to the Progress -->\n <div *ngIf=\"questionItem.Group__c && qbItem.Progress_Bar__c\"\n [ngClass]=\"{ questionalign: !qbItem?.Progress_Bar__c }\">\n <div class=\"largeTitle\">\n <h3 class=\"myt-font6 myt-text3\">\n {{ questionItem?.Group__c }}\n </h3>\n <div *ngIf=\"questionItem.Sub_Text__c != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.Sub_Text__c}}</div>\n <div *ngIf=\"questionItem.Sub_Text__c === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.Sub_Text__c}}</div>\n </div>\n </div>\n </div>\n\n <!-- Question Handling -->\n <div class=\"questiondiv2\">\n <div *ngIf=\"questionItem.Question_Text__c\">\n <p class=\"questionStyle\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </p>\n </div>\n <!-- Title -->\n <!-- <div *ngIf=\"questionItem.Is_Title__c\">\n <div *ngIf=\"questionItem.Type__c != 'Book' && questionItem.Question_No__c!='6' && questionItem.Question_No__c!='9'\"> \n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </h3>\n </div>\n </div> -->\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\n <!-- <div *ngIf=\"!questionItem.Is_Title__c\" [class]=\"qbItem.isShengel__c ? 'header-style' : 'question-f-size'\">\n <div [innerHTML]=\"getText(questionItem?.Question_Text__c)\" >\n {{ questionItem?.Question_Text__c }}\n </div>\n </div> -->\n\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.Type__c == 'Book'\">\n <div *ngIf=\"questionItem.Question_No__c=='6'\">\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{ questionItem?.Question_Text__c }}\n </h3>\n </div>\n </div> -->\n \n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.Type__c == 'File' \">\n <div *ngIf=\"questionItem.Question_No__c=='9'\">\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </h3>\n </div>\n </div> -->\n </div>\n\n <!-- Additional Info -->\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\n <div *ngIf=\"questionItem.Additional_Rich__c && qbItem.Progress_Bar__c\" >\n <div\n class=\"additional \" [innerHTML]=\"innerhtml\">\n </div>\n </div>\n <div *ngIf=\"questionItem.Additional_Rich__c && !qbItem.Progress_Bar__c\">\n <div class=\"info-alert ques-alert1\">\n <i class=\"fa fa-info fa-3x iposition icolor\" aria-hidden=\"true\"></i>\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\n </div>\n </div>\n\n <!-- Dropdown-->\n <div *ngIf=\"dropdownFlag\" >\n <div class=\"dis-flex\">\n <select \n [ngClass]=\"{\n 'dt-line myt-align3 myt-align2 dpDown dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.Progress_Bar__c,\n 'custom-select': !qbItem?.Progress_Bar__c\n }\" class=\"mr-sm-2 dd-height dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\" style=\"margin-left: 21.5rem !important;\">\n <option *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"option\" value=\"{{ opt.Value__c }}\">\n {{ opt.Value__c }}\n </option>\n <!-- HA 20DEC23 For Translation -->\n <option value=\".\" disabled hidden>{{'pleaseMakeChoice' | i18n:i18nService.currentLanguage}}</option>\n </select>\n </div>\n </div>\n\n <!-- Radio -->\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\n <div *ngIf=\"this.questionItem.error\" class=\"cond-div2\">\n {{ questionItem?.Error_Message__c }}\n </div>\n <div class=\"dis-flex\">\n <div *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"radio radioOption\" >\n <label class=\"radiocontainer container myt-font4\">{{ opt.Value__c }}\n <input type=\"radio\" [id]=\"opt.Id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" value=\"{{ opt.Value__c }}\"\n (change)=\"optionChange(opt.Value__c)\" />\n<!-- HA 20FEB24 Removed checkmark as it was causing styling issue in Radio -->\n </label>\n </div>\n </div>\n </div>\n\n <!-- Checkbox -->\n <div *ngIf=\"checkboxFlag\" class=\"\">\n <div *ngIf=\"questionItem?.error\" class=\"cond-div2\">\n {{ questionItem?.Error_Message__c }}\n </div>\n <div class=\"checkbox-container\">\n <div *ngFor=\"let item of optionValues\" class=\"checkbox-wrapper\">\n <label class=\"container1\">\n <input type=\"checkbox\" [id]=\"item.Id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\n <span class=\"checkbox-label\">{{ item.Value__c }}</span>\n </label>\n </div>\n </div>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"textFlag\" class=\"col-md-12 myt-book1\">\n <!-- HA 31-JAN-24 To reduce the margin -->\n <div class=\"col-md-12\" class=\"dis-flex myt-align2\" [class]=\"'col-md-' + questionItem?.Size__c + ' paddingnone'\">\n <input type=\"text\" [(ngModel)]=\"inpValue\" [ngClass]=\"{\n 'boxoutline myt-font1 myt-book1': qbItem?.Progress_Bar__c,\n textBox1: !qbItem?.Progress_Bar__c\n }\" id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n <i class=\"fa fa-check check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n\n <!-- Text Area -->\n <div *ngIf=\"taFlag\" class=\"col-md-12\">\n <div class=\"dis-flex\">\n <textarea class=\"ta-input\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0 && taFocusOut\n ? '#87be1c'\n : ''\n }}\" (focusout)=\"taFocusOut = true\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\n <i class=\"fa fa-check check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\"></i>\n </div>\n </div>\n\n <!-- CC Number Format -->\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\n <div class=\"dis-flex\">\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\"\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px;\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n <!-- END-->\n\n <!-- AlphaNumeric -->\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\n <div style=\"position:relative;\">\n <!-- HA 20DEC23 For Translation -->\n <input type=text placeholder=\"{{'zeroOfZero' | i18n:i18nService.currentLanguage}}\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\n </div>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\n <div class=\"dis-flex\">\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n\n <!-- DateTime -->\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero myt-time1\" >\n <!-- Error Handling -->\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n\n <!-- Date -->\n <div *ngIf=\"dateFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- HA 31-JAN-24 These labels were occuping the empty space when date question comes-->\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label> -->\n <div class=\"dis-flex\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, questionItem)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\">\n </my-date-picker>\n </div>\n </div>\n </div>\n\n <!-- Time -->\n <div *ngIf=\"timeFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label> -->\n <div class=\"dis-flex\">\n <div [ngClass]=\"{'dt-line date-line dt-time': qbItem?.Progress_Bar__c,\n dateandTime: !qbItem?.Progress_Bar__c}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour myt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime showminute myt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem?.X24_Hours__c == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"myt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n <!-- <div [ngClass]=\"{'': qbItem.Progress_Bar__c, 'dateandTime': !qbItem.Progress_Bar__c}\"></div> -->\n </div>\n </div>\n </div>\n </div>\n <i class=\"fa check-icon3\" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div>\n </div>\n\n <!-- Attachment / File -->\n <div *ngIf=\"fileFlag\">\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\n <label class=\"picture-upload\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"fa fa-plus fa-2x picture-upload-child pic-upload icolor\">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n </div>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event,this.questionItem)\" />\n </div>\n <ul *ngIf=\"\n attachments?.length > 0 &&\n questionItem?.Type__c === 'File' &&\n !qbItem?.Progress_Bar__c\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName}}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n\n <!-- Attachment Progress -->\n <div *ngIf=\"qbItem.Progress_Bar__c\">\n <div *ngFor=\"let attachment of attachments\" class=\"file-uploading-box\">\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"file-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n \n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"f-Name\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\"> {{ questionItem?.Question_Text__c}}</span>\n <label class=\"file-label \">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Book -->\n <div *ngIf=\"bookFlag\">\n <div [class]=\"qbItem.isShengel__c ? 'form-group content-box' : 'form-group'\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div [class]=\"qbItem.isShengel__c ? '' : 'myt-align3'\" [class]=\"qbItem.isShengel__c ? 'col-lg-' + ques.Size__c + ' paddingnone' : 'col-md-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.Id\">\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\">\n <span>{{ ques?.Question_Text__c }}</span>\n </div>\n <div class=\"col-md-12 paddingZero myt-dateTimeNew\" *ngIf=\"ques.Type__c === 'Time' || ques.Type__c === 'Date'\">\n <div *ngIf=\"ques.Type__c === 'Date'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label> -->\n <div class=\"dateandtime\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, ques)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\" >\n </my-date-picker>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.Type__c === 'Time'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label> -->\n <div class=\"dateandtime\">\n <div [ngClass]=\"{'dt-line date-line dt-time': qbItem?.Progress_Bar__c,\n dateandTime: !qbItem?.Progress_Bar__c}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour myt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime showminute myt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem.X24_Hours__c == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"myt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"displayDate($event,ques)\"></app-custom-date-picker>\n </div>\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <label>{{ ques.Question_Text__c }}</label>\n <app-custom-input\n [value]=\"ques?.input\"\n [ngClassValue]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\"\n [question]=\"ques\" \n [idValue]=\"ques?.Tracking_ID__c\"\n [focusEvent]=\"clearSQError(ques?.Id)\"\n [error]=\"ques?.error\"\n [placeholder]=\"ques?.Question__c\"\n (inputValue)=\"selectedInput($event,ques)\">\n </app-custom-input>\n </div>\n <div *ngIf=\"ques.Type__c === 'Location'\">\n <!-- for pick location -->\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['Api_Key__c']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\n </div>\n <!-- for text area -->\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.Type__c === 'Email'\">\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\n </div>\n\n <div *ngIf=\"ques.Type__c === 'File'\">\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"\n fa fa-plus fa-2x\n picture-upload-child\n pic-upload\n icolor\n \">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\n </div>\n\n <ul *ngIf=\"\n attachments?.length > 0 &&\n ques.Type__c === 'File' &&\n !qbItem.Progress_Bar__c\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n <div class=\"myt-box\" *ngIf=\"qbItem.Progress_Bar__c\">\n\n <div *ngFor=\"let attachment of attachments\" class=\"file-uploading-box\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"file-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />\n <span class=\"f-Name\">{{ ques?.Question__c }}</span>\n <label class=\"file-label \">\n <span style=\"color: #c5281c;text-decoration:underline\">\n {{'attach' | i18n:i18nService.currentLanguage}}\n </span>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\n <app-custom-table \n [question]=\"ques\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-table>\n </div>\n\n <!-- Dropdown -->\n <div *ngIf=\"ques.Type__c === 'Dropdown'\" class=\"\">\n <!-- for common dropdown -->\n <!-- HA 20DEC23 For Translation -->\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel__c\"\n [options]=\"ques.Question_Options__r.records\"\n [apiMeta]=\"ques.Sub_Text__c\"\n [id]=\"ques.Name\"\n [selectedValue]=\"ques.input\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques?.Error_Message__c\"\n [error]=\"ques?.error\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-dropdown>\n <app-dropdown-with-flag *ngIf=\"ques.isDependentPicklist && !ques.dropDownOnly\" [certified]=\"ques.certifiedFlag\" [JobPerformerCertificates]=\"ques.certificateList\" (flagDropDownChange)=\"dependentChange($event)\"></app-dropdown-with-flag>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--List start-->\n <div *ngIf=\"listFlag\">\n <div class=\"form-group\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div class=\"myt-align3\" [class]=\"'col-md-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.Id);let i = index\">\n <div>\n <span class=\"dis-flex myt-font3 myt-font7\">{{ ques?.Question__c }}</span>\n </div>\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n </div>\n </div>\n <div class=\"\" *ngIf=\"addFlag\">\n <!-- HA 20DEC23 For Translation -->\n <button (click)=\"Add(getLocalSubQuestions(questionItem.Id))\" class=\"btn\"><i class=\"fa fa-plus\" ></i>{{'add' | i18n:i18nService.currentLanguage}}</button>\n </div>\n </div>\n </div>\n </div>\n <!--List End-->\n\n <!-- Actions -->\n <div *ngIf=\"individualBookButton\" class=\"flexer\">\n <!-- Backward / Back -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"backbutton\" [ngClass]=\"{ 'col-md-6': !qbItem.Progress_Bar__c }\"\n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.Back__c\">\n <div [ngClass]=\"{}\">\n <button [ngClass]=\"{\n 'left-bt': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color':\n !qbItem.Progress_Bar__c\n }\" (click)=\"handleBackClick()\">\n {{ qbItem?.Back__c }}\n </button>\n </div>\n </div>\n\n <!-- Forward / Next -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div [ngClass]=\"{ 'col-md-6': !qbItem.Progress_Bar__c }\" *ngIf=\"qbItem.Next__c\">\n <div>\n <button [ngClass]=\"{\n 'rusty': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color':\n !qbItem.Progress_Bar__c\n }\" (click)=\"handleNextClick()\">\n {{ qbItem.Next__c }}\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Summary -->\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\n 'col-md-12':!qbItem.Progress_Bar__c\n }\">\n <h1 class=\"header1 summarypadd\" >{{ qbItem.SubTitle__c }}</h1> \n <div id=\"progress2\" *ngIf=\"!qbItem.Progress_Bar__c && this.abItem.Status__c != 'Completed' \">\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\n <div *ngFor=\"let qa of summary\">\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\n <div [ngClass]=\"{ summary: !qbItem.Progress_Bar__c }\">\n <div *ngIf=\"!qbItem.Edit__c\"\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.Edit__c\"\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\n <div [ngClass]=\"{ 'question': this.abItem.Status__c === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div>\n <div class=\"answer\" >\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <!-- HA 02FEB24 Displaying the in summary for book type -->\n <div *ngIf=\"qa.qTyp == 'Book'\">\n <div *ngFor=\"let val of qa.myVal\">\n <p>{{ val.Question_Text__c }}: <span>{{ val.input }}</span></p>\n </div>\n </div>\n <!-- HA 02FEB24 Displaying the value for direct question -->\n <div *ngIf=\"qa.qTyp != 'File' && qa.qTyp != 'Book'\">{{ qa.Question_Text__c }}: <span></span>{{ qa.ansValue }}</div>\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"icon-edit\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"this.abItem.Status__c === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\n <h2>{{this.qbItem.Summary_Text__c}}</h2>\n <p>{{this.qbItem.Summary_Sub_Text__c}}</p>\n </div>\n\n <div id=\"progress2\" *ngIf=\"qbItem.Progress_Bar__c \">\n <div [ngClass]=\"{'bgColor summary-top' : qbItem.Progress_Bar__c }\" >\n <div id=\"progress-summary\" *ngIf=\"qbItem.Progress_Bar__c\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n \n <div *ngIf=\"qbItem.Summary_Text__c && qbItem.Progress_Bar__c\" \n [ngClass]=\"{ summaryTitle: qbItem.Progress_Bar__c }\">\n <h3 class=\"subTitle\" >{{ qbItem.Summary_Text__c }}</h3>\n <div *ngIf=\"abItem.Status__c != 'Completed'\" class=\"subTitle1\" >{{ qbItem.Summary_Sub_Text__c}}</div>\n </div>\n </div>\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <h3 class=\"summary-h\">\n {{ qbItem.Summary_Text__c }}\n </h3>\n </div>\n </div>\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\n <div class=\"summary-groupText myt-font2\">\n <!-- <p>Informe de da\u00F1o</p> -->\n </div>\n <div *ngFor=\"let qa of summary\" >\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\n <div class=\"summary\">\n <!-- <div *ngIf=\"!qbItem.Edit__c\"\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.Edit__c\"\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.Status__c === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div> -->\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"icon-edit\" />\n </button>\n </div>\n \n <div class=\"answer\">\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <div *ngIf=\"qa.qTyp != 'File'\">\n {{ qa.ansValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flexer1\" *ngIf=\"abItem\">\n <div class=\"\" *ngIf=\"abItem.Status__c == 'Completed' && qbItem.Cancel__c\">\n <div class=\"col-md-12\">\n <button [ngClass]=\"{'btn-text': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\"\n (click)=\"handleCancelClick()\">\n {{ qbItem.Cancel__c }}\n </button>\n </div>\n </div>\n </div> -->\n\n <!-- Group Actions -->\n <div class=\"align-edit-submit\" *ngIf=\"abItem.Status__c != 'Completed'\">\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"col-md-6\" *ngIf=\"qbItem.Submit__c\">\n <button [ngClass]=\"{ 'btn-text2': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c }\" \n (click)=\"handleSubmitClick()\">\n {{ qbItem.Submit__c }}\n </button>\n </div>\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!-- <div class=\"col-md-6\" *ngIf=\"qbItem.Edit__c\">\n <button [ngClass]=\"{'grey': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\" \n (click)=\"handleBackClickNew()\">\n {{ qbItem.Edit__c }}\n </button>\n </div> -->\n </div>\n\n</div>", styles: [".rusty{width:235px;background-color:#cd2810;color:#fff;text-align:center;font-size:24px;height:60px;margin-left:0%;margin-top:11%;cursor:pointer}.edit{background-color:#dedddd;border:none;color:#c5281c;text-decoration:underline;margin-left:50%;font-size:16px;vertical-align:super;font-weight:700}.icon-edit{width:15px;height:18px;margin:0 6px 1px -13%}.icon-edit1,.icon-edit-summary{width:29px;height:28px}.questiondiv1{padding-left:25px;padding-right:25px;padding-top:3%}.questiondiv2{padding-top:0;padding-bottom:20px;padding-left:11px}.align-edit-submit{display:flex;flex-direction:column;align-items:center}.questiondiv2{padding-left:0!important;padding-bottom:0!important}@media screen and (min-width: 689px){#progress,#progress-summary{padding-left:12px}.backicon{display:none}.dt-time{background-position:98%!important}}.bgColor{text-align:center;background-color:#dedddd}.questionalign{text-align:center;padding-right:4%;margin-bottom:4px;margin-top:2rem;color:#560d05}.questionStyle{margin-bottom:1.5rem}.largeTitle{padding-left:16px;padding-top:12px}.question-f-size{font-size:.7rem}.non{background-color:#dedddd}.circle{margin-left:25px}.titlebar{padding-left:10%;padding-top:1%;padding-right:10%}.infodiv{padding-left:2rem;overflow:hidden}.info-alert{border:1px solid #e6e6e6;border-radius:5px;padding:.5em;margin-left:15px;margin-right:15px;margin-bottom:1rem;display:flex}.addtional-info{margin-left:-33px;margin-top:-21px;font-size:16px;font-weight:400;font-stretch:normal;font-style:normal;color:#6f7072;font-family:Helvetica}.ques-alert1{margin-bottom:1rem;display:flex}.iposition{margin-left:3rem}.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{position:relative;padding:20px;float:center;width:100%}.col-md-12{padding:0!important}.nxt-btn{border-radius:.3rem;font-size:1.25rem;line-height:1.5;padding:.5rem 1rem;width:100%;cursor:pointer;outline:0}.cond-div2{color:red;font-weight:700;padding-bottom:3%}.radiotext{margin-top:-30px}.radiocontainer{display:flex;flex-direction:row-reverse;border:1px solid none;border-radius:.3em;padding:0;align-items:center;text-align:center;cursor:pointer;font-family:Rubik,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;color:#a3a2a2}.radioOption{display:flex;align-content:flex-start;margin-top:-16px;width:6%}.myt-time{width:-moz-fit-content!important;width:fit-content!important;background-image:none;background:#dedddd;margin:0;padding:0;border:none;font-size:15px;letter-spacing:1px}.showminute{padding-left:5px;margin-top:0%}.myt-time1{margin-top:-32px;margin-left:-15px}.myt-dateTimeNew{margin-left:-14px}.myt-hour{width:-moz-fit-content;width:fit-content}.date-time{padding:0;margin:0;text-align:left}.dateandTime{border:1px solid #d2d4d6;position:relative;display:flex;border-radius:2px;background-image:url(https://dynamic-css1.s3.ap-south-1.amazonaws.com/External+css/time.svg);background-size:25px;background-repeat:no-repeat;background-position:99% center;background-color:#fff;height:37px}.date-line{border-bottom:1px solid #fff}.dt-time{width:57%;margin-left:2.3%;text-align:left;background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/icon-clock%402x.png)!important;background-size:25px!important;background-repeat:no-repeat!important;background:#dedddd}.date-picker{width:57%;margin-left:2.5%;height:44px;border-radius:5px}.datetime:focus{border:none;box-shadow:none}#meridiem{margin-top:-2px;border:hidden}.dis-flex{display:flex;justify-content:center}.textBox{width:100%;height:36px}.textBox1{width:100%;height:36px;margin-left:-17px}.option{color:#767676}.paddingnone{padding-bottom:0%}.paddingZero{padding:0}.summary-h{text-align:left;padding-bottom:15px}.summary{display:flex;flex-direction:column;align-items:flex-start;border-bottom:2px solid #fff}.asum{color:#6f7072;margin-top:5%;padding-left:3%}.question{padding:10px;font-size:14px;color:#007bff}.question1{margin-left:14rem;background:#dedddd;color:#560d05;font-size:15px;padding-bottom:20px;text-align:left}.answer{display:flex;align-items:baseline;padding:5px 5px 10px;font-size:14px;font-weight:400;word-wrap:break-word;width:97%;justify-content:space-between}.answer1{max-width:55%;margin-left:auto;margin-right:auto;color:#a3a2a2;margin-top:0%;padding-bottom:0;font-size:14px;font-weight:400;word-wrap:break-word;text-align:left;background:#dedddd;border-bottom:1px solid #fff}.myt-font{font-size:20px}.myt-font1{width:16rem;font-size:14px;font-weight:400}.myt-font2{font-size:18px}.myt-font3,.myt-font4{font-size:14px}.myt-font5{margin-top:-18px;font-weight:400;font-size:14px;color:#560d05}.myt-font6{font-size:20px;font-weight:700;color:#c5281c;text-align:center}.myt-font10{font-weight:400;font-size:14px;color:#560d05;margin-top:10px}.myt-font7{display:flex;justify-content:flex-start;padding-left:20.5%;font-weight:100;color:#560d05}.myt-font8{font-weight:400}.dpDown:focus-visible{outline:none}.summaryTitle{padding-left:0%;padding-top:4%}.summary-groupText{width:55%;margin:auto auto -2%;text-align:left;font-weight:700;padding-top:0%;padding-bottom:0%;background-color:#dedddd;color:#c5281c}.sum-ques{width:55%;margin:auto}.sum-ques1{width:59%;margin:auto}.header-style{padding:15px!important;background:#F8F8F8;color:#898989!important;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0!important;justify-content:left!important;font-size:15px!important}.file-upload-btn{display:none;border-bottom:groove}.file-upload-box{max-width:45%;margin-left:29.5%;height:auto;padding:16px;display:flex;border:2px;border-bottom:1px solid #fff;background-color:#dedddd;justify-content:space-between;color:#d8d8d8}.file-label{cursor:pointer;color:#c5281c;text-decoration:underline}.file-uploading-box{font-size:14px;font-weight:400;max-width:45%;margin-left:29.5%;height:56px;padding:16px;display:flex;border:2px;background-color:#dedddd;justify-content:space-between;margin-bottom:0;color:#d8d8d8}.uploading-file-name{color:#6f7072}.deleteIcon{cursor:pointer;height:24px}.file-icon{max-width:24px;height:26px}.picture-upload{height:200px;width:200px;position:relative;border:1px solid #ccc;display:flex;padding:6px 12px;cursor:pointer;background-color:#fff;align-items:center}.colon{line-height:42px;padding:0;margin-top:10%;color:#6f7072}.colon1{display:contents}.subTitle{color:#c5281c;font-weight:600;margin-top:-3%}.subTitle1{color:#560d05;font-size:14px;font-weight:500}.check-icon{color:#87be1c;margin-left:-2rem;z-index:1;padding:5px;margin-top:.4rem}.check-icon2{color:#87be1c;margin-left:-4rem;z-index:1;margin-top:.6rem;line-height:3}.check-icon3{color:#87be1c;margin-left:-4rem;z-index:1;margin-top:3rem}.align-l{text-align:left;padding:1% 2% 2%;margin-bottom:-5%;margin-top:-1%}.attach-ulist{list-style-type:none;margin-left:0;margin-bottom:.7rem}.attach-list{float:right;cursor:pointer;padding:0}.icolor{color:#99b5ce}.picture-upload-child{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tspan:nth-child(1){font-size:25px;font-weight:700}.tspan:nth-child(2){display:none}.pic-upload{position:absolute;top:15%;left:85%;transform:translate(-50%,-50%)}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-primary:hover{color:#fff}.btn-primary:focus,.btn-primary.focus{color:#fff;box-shadow:0 0 0 .2rem #268fff80}.btn-primary.disabled,.btn-primary:disabled{color:#fff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #268fff80}.btn-back-color{display:block;width:100%;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;text-align:center;border-radius:.3rem;margin:0}.fa-plus:hover{color:#87be1c}.fa-plus{color:#99b5ce}.btn-primary{border-color:#007bff}.ques-Title{text-align:left;font-size:24px}.grey{width:38%;height:56px;margin:0px 0px 0px 0rem;padding:14px 0 17px;background-color:#cd2810;color:#fff;font-size:24px}.btn-text{width:330px;font-size:24px;background-color:#cd2810;color:#fff;height:60px;margin-left:auto;margin-top:0;cursor:pointer;border-radius:40px}.btn-text2{width:21rem;font-size:24px;background-color:#cd2810;border:none;color:#fff;height:60px;margin-left:17rem;margin-right:17rem;margin-top:10px;cursor:pointer;border-radius:40px}.flexer{max-width:100%;width:100%;display:flex;justify-content:center}.flexer1{max-width:100%;width:100%;display:flex;justify-content:center;margin-top:32px}.btn-r{right:0rem}.down{margin-left:0;width:57%}.down1{width:16rem;margin-left:0rem;background-color:#dedddd}.down2{margin-top:0%;padding-left:11px}.dropbox{margin-left:21.5rem}.myt-dropbox{background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/down-red.png);background-origin:content-box;background-position:right -.9rem center;background-repeat:no-repeat;background-size:35px 33px;padding-right:1.35rem;background-color:#dedddd}.boxoutline{outline:transparent;background-color:#dedddd}.left-bt{width:238px;background-color:#cd2810;color:#fff;padding:0;text-align:center;font-size:24px;cursor:pointer;height:60px;margin-top:125px;margin-bottom:4rem;margin-left:-234px}.townArea{text-align:left;height:43px;padding-left:15px}.townArea:hover{background-color:#9e9e9e2e}.listFlow{font-weight:400;color:#767676;z-index:2;position:absolute;background:#dedddd;box-shadow:0 2px 5px #00000040}.myt-radio input[type=radio]:checked:after{background-color:#c5281c}.full-summary{margin-top:4%}.container-radio input{display:none;position:absolute;opacity:0;cursor:pointer}.f-Name{color:#6f7072;font-size:14px;font-weight:400;word-break:break-word}.summary-top{margin-top:4%}.myt-border-r{border-top:none;border-left:none;border-right:none;border-radius:0}.myt-align{margin-left:4%;line-height:2}.myt-align1{margin-left:-29px}.myt-align2{margin-left:-15px}.myt-align3{width:100%}.myt-book1{margin-top:-20px}.colorf{color:#555}.bookText{width:57%;margin-left:21.5%;background-color:#dedddd}.book{width:32.6%;margin-left:34%;background-color:#dedddd}.summary-completed{padding-left:2%;margin-top:20px}.town{margin:0;background-color:#dedddd}.town-drop{margin:auto;width:57%}.questiondiv1.padd-bottom{padding-bottom:6rem!important;padding-top:2rem!important}@media (max-width: 1090px){.icon-edit{margin:0 6px -3px -13%!important}}@media (max-width: 768px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:center}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}}@media (max-width: 768px){.radioOption{width:8%}.grey{width:78%;margin-left:17.5rem;height:68px!important;font-size:20px!important;font-weight:700!important}.answer{margin-top:-4%!important}}@media screen and (max-width: 672px){.header1{font-size:23px!important}.summarypadd{padding-top:50px!important}.answer{margin-top:-5%!important}.icon-edit{margin:0 6px 0 -13%!important}.subTitle1{width:95%!important}.additional{margin-left:6%!important;padding:0!important}.container1{margin-left:-35%}.town-drop{margin:auto;width:100%!important}.dis-flex{display:flex;justify-content:left}.check{display:inherit;width:-moz-max-content;width:max-content;margin-left:6%}.rusty{width:28rem;margin-left:0rem;height:68px!important;font-size:20px!important;font-weight:700!important;margin-bottom:37px}.left-bt{width:28rem;margin-left:-28rem;height:68px!important;font-size:20px!important;font-weight:700!important}.questionalign{text-align:center}.questionalign{margin-top:1rem!important}.largeTitle{padding-left:0!important}.myt-align{margin-left:0%!important}.myt-text1{margin-top:-22px}.myt-text2{margin-top:-20px}.myt-text3{margin-bottom:21px}.date-picker,.dt-time{width:100%}.showminute{margin-top:-.5%}.radioOption{width:auto;margin-top:0;margin-left:7%;margin-right:-3%}.myt-font7{padding-left:0rem;margin-left:-1.5%}.down,.bookText,.book{width:100%;margin-left:0rem}.town{margin-left:0rem;width:100%}.file-upload-box,.file-uploading-box{max-width:85%;margin-left:20px}.question{margin-left:0rem}.btn-text2{width:28rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}.grey{width:28rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}}@media screen and (max-width: 580px){.rusty{width:27rem;height:68px!important;font-size:20px!important;font-weight:700!important}.left-bt{width:27rem;margin-left:-27rem;height:68px!important;font-size:20px!important;font-weight:700!important}.container1{margin-left:-24%}.showminute{margin-top:.5%}.bookText,.book{width:100%;margin-left:0rem}.btn-text2{width:27rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}.grey{width:27rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.btn-text{width:27rem;height:68px!important;font-size:20px!important;font-weight:700!important}}@media screen and (max-width: 672px){.questiondiv1{padding:0}}@media screen and (max-width: 525px){.rusty{width:26rem;height:68px!important;font-size:20px!important;font-weight:700!important}.container1{margin-left:-9%}.left-bt{width:26rem;margin-left:-26rem;height:68px!important;font-size:20px!important;font-weight:700!important}.dateandtime{padding-left:10px!important}}@media screen and (max-width: 480px){.answer{margin-top:-7%!important}.icon-edit{margin:0 6px 4px -35%!important}.rusty{width:25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.left-bt{width:25rem;margin-left:-25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.file-upload-box,.file-uploading-box{max-width:89%}}@media screen and (max-width: 420px){.answer{margin-top:-9%!important}.icon-edit{margin:-9px 1px 4px 4%!important}.rusty,.btn-text{width:21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.left-bt{width:21rem;margin-left:-21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.container1{margin-left:0%}.file-upload-box,.file-uploading-box{max-width:100%}.myt-dateTimeNew{margin-left:-10px!important}.dateandtime{padding-left:0!important}.dt-time{padding-left:.8%!important}.myt-font7{padding-left:0rem;margin-left:-3.5%}.grey{width:21rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.btn-text2{width:21rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}}@media screen and (max-width: 368px){.icon-edit{margin:0 6px 3px 35%!important}.icon-editios{margin-bottom:4px}.rusty{width:19rem;height:68px!important;font-size:20px!important;font-weight:700!important}.left-bt{width:19rem;margin-left:-19rem;height:68px!important;font-size:20px!important;font-weight:700!important}.container1{margin-left:15%}.radiotext{margin-top:-45px}.file-upload-box,.file-uploading-box{max-width:100%}.grey{width:19rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.btn-text2{width:19rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}.btn-text{width:19rem;height:68px!important;font-size:20px!important;font-weight:700!important}}.mydp .selection{padding:0!important}.text-border{border-top:none;border-left:none;border-right:none;border-radius:0;border-bottom:1px solid #fff!important;background-color:#dedddd}.additional{display:flex;font-size:20px;text-align:left;font-weight:200;margin-left:4%;justify-content:center;color:#3e3e3c;padding:0 30%}.check{display:block}.header2{font-size:20px;font-weight:300;text-align:center;font-stretch:normal;font-style:normal;line-height:1.5;letter-spacing:normal;color:#560d05;max-width:1100px;margin:auto;padding-bottom:10px}.header1{font-size:32px;font-weight:700;text-align:center;font-stretch:normal;font-style:normal;line-height:1.25;letter-spacing:normal;color:#dd2e13}.container1{display:inline-grid;position:relative;cursor:pointer;font-size:20px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.bottomspace1{padding-bottom:14px!important}.myt-321{font-size:20px;font-weight:700;color:#c5281c;margin-top:11px}.myt-345{display:none}.panel{-moz-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);-webkit-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);border-radius:0;border:none;box-shadow:0 1px 2px #0000001a;margin-bottom:20px}.panel .panel-body{padding:20px}.panel-heading{border-radius:0;border:none!important;padding:10px 20px}.panel-default>.panel-heading{background-color:#fafafa;border-bottom:none;color:#2a323c;border:1px solid #e3e3e3!important}.panel-title{margin-bottom:0;margin-top:0;font-family:Rubik,sans-serif;font-weight:400}.panel-footer{background:#fafafa;border-top:0}.panel-color .panel-title{color:#fff}.panel-primary>.panel-heading{background-color:#03a9f4}.panel-success>.panel-heading{background-color:#01ba9a}.panel-info>.panel-heading{background-color:#18bae2}.panel-warning>.panel-heading{background-color:#f8ca4e}.panel-danger>.panel-heading{background-color:#f62f37}.panel-dark>.panel-heading{background-color:#2a323c;color:#fff}.panel-fill{border-radius:3px}.panel-fill .panel-heading{background-color:transparent;color:#fff;border-bottom:1px solid rgba(255,255,255,.5)!important}.panel-fill .panel-body{color:#ffffffd9}.panel-fill.panel-default .panel-body{color:#666}.panel-fill.panel-default .panel-heading{background-color:transparent;color:#333;border-bottom:1px solid rgba(0,0,0,.1)!important}.panel-fill.panel-primary{background-color:#03a9f4}.panel-fill.panel-success{background-color:#01ba9a}.panel-fill.panel-info{background-color:#18bae2}.panel-fill.panel-warning{background-color:#f8ca4e}.panel-fill.panel-danger{background-color:#f62f37}.panel-fill.panel-dark{background-color:#2a323c}.panel-group .panel .panel-heading a[data-toggle=collapse].collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading .accordion-toggle.collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading a[data-toggle=collapse]{display:block}.panel-group .panel .panel-heading a[data-toggle=collapse]:before{content:\"\\f0d8\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading .accordion-toggle{display:block}.panel-group .panel .panel-heading .accordion-toggle:before{content:\"\\f068\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading+.panel-collapse .panel-body{border-top:none!important;border:1px solid #e3e3e3}.panel-group .panel-heading{padding:12px 26px}.panel-group.panel-group-joined .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-group-joined .panel-group .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-body label{color:#9a9a9a;font-size:14px;font-weight:400;display:inline-block;max-width:100%;margin-bottom:5px}.font-size{font-size:14px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit;text-decoration:none}.panel-title{font-size:16px}@media (min-width: 300px) and (max-width: 399px){.selbtngroup{padding-left:1.3%!important}}@media (min-width: 400px) and (max-width: 480px){.selbtngroup{padding-left:.9%!important}}@media (min-width: 481px) and (max-width: 580px){.selbtngroup{padding-left:.2%!important}}@media screen and (min-width: 871px){.selbtngroup{padding-right:4px!important}}@media screen and (max-width: 689px){.answer{max-width:95%!important;margin-left:0!important;margin-right:15px}#progress2{margin-left:8.5px!important}.edit{margin-left:85%!important;margin-bottom:0%!important}.sum-ques,.sum-ques1{width:100%!important;margin:auto}.summary-completed{padding-left:0!important;padding-bottom:17px;margin-top:9px}.summary-top{margin-top:10%}.subTitle1{font-size:18px!important;line-height:1.38!important;text-align:center;letter-spacing:normal;color:#560d05!important;font-weight:300}.backbutton{display:none}.rusty{margin-bottom:37px}}@media screen and (min-width: 1024px){.ES-style{position:absolute;left:7px;font-size:.9rem;color:#555;top:9px}}@media screen and (max-width: 1024px){.ES-style{position:absolute;left:.6rem;font-size:.95rem;color:#555;top:.57rem}}@media screen and (max-width: 689px){.app-back1{line-height:1.5;cursor:pointer;width:100%;max-width:1200px;margin-right:auto;margin-left:-10px;display:flex;font-family:Helvetica;font-size:21px;font-weight:700;align-items:center;font-stretch:normal;font-style:normal;letter-spacing:normal;color:#dd2e13;z-index:1;position:fixed;background-color:#dedddd;border-radius:0!important;margin-top:-12px;padding-top:.8rem}.header1{padding-top:75px}.dt-time{background-position:100%!important}}.summary-volver{display:none}.checkbox-container{display:flex;flex-direction:column}.checkbox-wrapper{display:flex;align-items:center;margin-bottom:10px}.container1{display:flex;align-items:center}.container1 input[type=checkbox]{margin-right:10px}.checkbox-label{margin-left:10px}@media ((min-width: 1200px)){.form-row{display:flex;flex-wrap:wrap}}\n"], dependencies: [{ kind: "directive", type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i8.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i8.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i12.MyDatePicker, selector: "my-date-picker", inputs: ["placeholder", "locale", "disabled", "options", "defaultMonth", "selDate", "selector"], outputs: ["dateChanged", "inputFieldChanged", "calendarViewChanged", "calendarToggle", "inputFocusBlur"], exportAs: ["mydatepicker"] }, { kind: "component", type: i7.NgxSpinnerComponent, selector: "ngx-spinner", inputs: ["disableAnimation", "bdColor", "zIndex", "color", "type", "size", "fullScreen", "name", "template", "showSpinner"] }, { kind: "component", type: i13.CircleProgressComponent, selector: "circle-progress", inputs: ["name", "class", "backgroundGradient", "backgroundColor", "backgroundGradientStopColor", "backgroundOpacity", "backgroundStroke", "backgroundStrokeWidth", "backgroundPadding", "radius", "space", "percent", "toFixed", "maxPercent", "renderOnClick", "units", "unitsFontSize", "unitsFontWeight", "unitsColor", "outerStrokeGradient", "outerStrokeWidth", "outerStrokeColor", "outerStrokeGradientStopColor", "outerStrokeLinecap", "innerStrokeColor", "innerStrokeWidth", "titleFormat", "title", "titleColor", "titleFontSize", "titleFontWeight", "subtitleFormat", "subtitle", "subtitleColor", "subtitleFontSize", "subtitleFontWeight", "imageSrc", "imageHeight", "imageWidth", "animation", "animateTitle", "animateSubtitle", "animationDuration", "showTitle", "showSubtitle", "showUnits", "showImage", "showBackground", "showInnerStroke", "clockwise", "responsive", "startFromZero", "showZeroOuterStroke", "lazy", "options"], outputs: ["onClick"] }, { kind: "component", type: i14.PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: i15.CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "readOnly", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: i16.CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error", "question", "readOnly"], outputs: ["textareaValueChange"] }, { kind: "component", type: i17.CustomTableComponent, selector: "app-custom-table", inputs: ["question", "apiMeta"], outputs: ["valueChange"] }, { kind: "component", type: i18.CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate", "error", "errorMessage", "readOnly"], outputs: ["dateChange"] }, { kind: "component", type: i19.DropdownWithFlagComponent, selector: "app-dropdown-with-flag", inputs: ["certified", "JobPerformerCertificates"], outputs: ["flagDropDownChange"] }, { kind: "component", type: i20.CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "component", type: i21.LoaderComponent, selector: "app-loader" }, { kind: "pipe", type: i22.I18nPipe, name: "i18n" }], encapsulation: i0.ViewEncapsulation.None });
2205
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: QuestionnaireComponent, selector: "lib-questionnaire", inputs: { qbId: "qbId", insuranceStartDate: "insuranceStartDate", serv: "serv", tkn: "tkn", api: "api" }, outputs: { handleEvent: "handleEvent", handlePage: "handlePage", handleQuestion: "handleQuestion" }, providers: [ChangeService], usesOnChanges: true, ngImport: i0, template: "<!-- Spinner -->\n<ngx-spinner [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\n<!-- custom loader -->\n<app-loader></app-loader>\n<!-- Back Processing -->\n<div *ngIf=\"backicon == false\" >\n <div class=\"backicon\" [style.visibility]=\"questionStack.length >0 ? 'visible' : 'hidden'\">\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.Status__c == 'Completed' ? 'summary-volver':'app-back1'\">\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.Back__c }}\n </button>\n </div>\n</div>\n\n<!-- Question Hanlding -->\n<div *ngIf=\"questionItem\" [class]=\"qbItem.isShengel__c ? 'questiondiv1' : 'questiondiv1 padd-bottom'\">\n <!-- Progress Bar & Title -->\n <div *ngIf=\"questionItem.Title__c && qbItem.Progress_Bar__c\">\n <h1 class=\"header1\">{{ questionItem?.Title__c }}</h1>\n <div class=\"header2\">{{ questionItem?.SubTitle__c }}</div>\n </div>\n\n <!-- Progress & Grouping -->\n <div [ngClass]=\"{ questiondiv2: !qbItem?.Progress_Bar__c }\">\n <!-- Pie Chart Progress -->\n <div [ngClass]=\"{ bgColor: qbItem?.Progress_Bar__c }\">\n <div id=\"progress\" *ngIf=\"qbItem?.Progress_Bar__c\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n </div>\n </div>\n\n <!-- Show the Group/Module related to the Progress -->\n <div *ngIf=\"questionItem.Group__c && qbItem.Progress_Bar__c\"\n [ngClass]=\"{ questionalign: !qbItem?.Progress_Bar__c }\">\n <div class=\"largeTitle\">\n <h3 class=\"myt-font6 myt-text3\">\n {{ questionItem?.Group__c }}\n </h3>\n <div *ngIf=\"questionItem.Sub_Text__c != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.Sub_Text__c}}</div>\n <div *ngIf=\"questionItem.Sub_Text__c === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.Sub_Text__c}}</div>\n </div>\n </div>\n </div>\n\n <!-- Question Handling -->\n <div class=\"questiondiv2\">\n <div *ngIf=\"questionItem.Question_Text__c\">\n <p class=\"questionStyle\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </p>\n </div>\n <!-- Title -->\n <!-- <div *ngIf=\"questionItem.Is_Title__c\">\n <div *ngIf=\"questionItem.Type__c != 'Book' && questionItem.Question_No__c!='6' && questionItem.Question_No__c!='9'\"> \n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </h3>\n </div>\n </div> -->\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\n <!-- <div *ngIf=\"!questionItem.Is_Title__c\" [class]=\"qbItem.isShengel__c ? 'header-style' : 'question-f-size'\">\n <div [innerHTML]=\"getText(questionItem?.Question_Text__c)\" >\n {{ questionItem?.Question_Text__c }}\n </div>\n </div> -->\n\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.Type__c == 'Book'\">\n <div *ngIf=\"questionItem.Question_No__c=='6'\">\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{ questionItem?.Question_Text__c }}\n </h3>\n </div>\n </div> -->\n \n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.Type__c == 'File' \">\n <div *ngIf=\"questionItem.Question_No__c=='9'\">\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </h3>\n </div>\n </div> -->\n </div>\n\n <!-- Additional Info -->\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\n <div *ngIf=\"questionItem.Additional_Rich__c && qbItem.Progress_Bar__c\" >\n <div\n class=\"additional \" [innerHTML]=\"innerhtml\">\n </div>\n </div>\n <div *ngIf=\"questionItem.Additional_Rich__c && !qbItem.Progress_Bar__c\">\n <div class=\"info-alert ques-alert1\">\n <i class=\"fa fa-info fa-3x iposition icolor\" aria-hidden=\"true\"></i>\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\n </div>\n </div>\n\n <!-- Dropdown-->\n <div *ngIf=\"dropdownFlag\" >\n <div class=\"dis-flex\">\n <select \n [ngClass]=\"{\n 'dt-line myt-align3 myt-align2 dpDown dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.Progress_Bar__c,\n 'custom-select': !qbItem?.Progress_Bar__c\n }\" class=\"mr-sm-2 dd-height dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\" style=\"margin-left: 21.5rem !important;\">\n <option *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"option\" value=\"{{ opt.Value__c }}\">\n {{ opt.Value__c }}\n </option>\n <!-- HA 20DEC23 For Translation -->\n <option value=\".\" disabled hidden>{{'pleaseMakeChoice' | i18n:i18nService.currentLanguage}}</option>\n </select>\n </div>\n </div>\n\n <!-- Radio -->\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\n <div *ngIf=\"this.questionItem.error\" class=\"cond-div2\">\n {{ questionItem?.Error_Message__c }}\n </div>\n <div class=\"dis-flex\">\n <div *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"radio radioOption\" >\n <label class=\"radiocontainer container myt-font4\">{{ opt.Value__c }}\n <input type=\"radio\" [id]=\"opt.Id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" value=\"{{ opt.Value__c }}\"\n (change)=\"optionChange(opt.Value__c)\" />\n<!-- HA 20FEB24 Removed checkmark as it was causing styling issue in Radio -->\n </label>\n </div>\n </div>\n </div>\n\n <!-- Checkbox -->\n <div *ngIf=\"checkboxFlag\" class=\"\">\n <div *ngIf=\"questionItem?.error\" class=\"cond-div2\">\n {{ questionItem?.Error_Message__c }}\n </div>\n <div class=\"checkbox-container\">\n <div *ngFor=\"let item of optionValues\" class=\"checkbox-wrapper\">\n <label class=\"container1\">\n <input type=\"checkbox\" [id]=\"item.Id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\n <span class=\"checkbox-label\">{{ item.Value__c }}</span>\n </label>\n </div>\n </div>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"textFlag\" class=\"col-md-12 myt-book1\">\n <!-- HA 31-JAN-24 To reduce the margin -->\n <div class=\"col-md-12\" class=\"dis-flex myt-align2\" [class]=\"'col-md-' + questionItem?.Size__c + ' paddingnone'\">\n <input type=\"text\" [(ngModel)]=\"inpValue\" [ngClass]=\"{\n 'boxoutline myt-font1 myt-book1': qbItem?.Progress_Bar__c,\n textBox1: !qbItem?.Progress_Bar__c\n }\" id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n <i class=\"fa fa-check check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n\n <!-- Text Area -->\n <div *ngIf=\"taFlag\" class=\"col-md-12\">\n <div class=\"dis-flex\">\n <textarea class=\"ta-input\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0 && taFocusOut\n ? '#87be1c'\n : ''\n }}\" (focusout)=\"taFocusOut = true\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\n <i class=\"fa fa-check check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\"></i>\n </div>\n </div>\n\n <!-- CC Number Format -->\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\n <div class=\"dis-flex\">\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\"\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px;\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n <!-- END-->\n\n <!-- AlphaNumeric -->\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\n <div style=\"position:relative;\">\n <!-- HA 20DEC23 For Translation -->\n <input type=text placeholder=\"{{'zeroOfZero' | i18n:i18nService.currentLanguage}}\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\n </div>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\n <div class=\"dis-flex\">\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n\n <!-- DateTime -->\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero myt-time1\" >\n <!-- Error Handling -->\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n\n <!-- Date -->\n <div *ngIf=\"dateFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- HA 31-JAN-24 These labels were occuping the empty space when date question comes-->\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label> -->\n <div class=\"dis-flex\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, questionItem)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\">\n </my-date-picker>\n </div>\n </div>\n </div>\n\n <!-- Time -->\n <div *ngIf=\"timeFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label> -->\n <div class=\"dis-flex\">\n <div [ngClass]=\"{'dt-line date-line dt-time': qbItem?.Progress_Bar__c,\n dateandTime: !qbItem?.Progress_Bar__c}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour myt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime showminute myt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem?.X24_Hours__c == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"myt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n <!-- <div [ngClass]=\"{'': qbItem.Progress_Bar__c, 'dateandTime': !qbItem.Progress_Bar__c}\"></div> -->\n </div>\n </div>\n </div>\n </div>\n <i class=\"fa check-icon3\" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div>\n </div>\n\n <!-- Attachment / File -->\n <div *ngIf=\"fileFlag\">\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\n <label class=\"picture-upload\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"fa fa-plus fa-2x picture-upload-child pic-upload icolor\">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n </div>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event,this.questionItem)\" />\n </div>\n <ul *ngIf=\"\n attachments?.length > 0 &&\n questionItem?.Type__c === 'File' &&\n !qbItem?.Progress_Bar__c\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName}}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n\n <!-- Attachment Progress -->\n <div *ngIf=\"qbItem.Progress_Bar__c\">\n <div *ngFor=\"let attachment of attachments\" class=\"file-uploading-box\">\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"file-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n \n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"f-Name\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\"> {{ questionItem?.Question_Text__c}}</span>\n <label class=\"file-label \">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Book -->\n <div *ngIf=\"bookFlag\">\n <div [class]=\"qbItem.isShengel__c ? 'form-group content-box' : 'form-group'\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div [class]=\"qbItem.isShengel__c ? '' : 'myt-align3'\" [class]=\"qbItem.isShengel__c ? 'col-lg-' + ques.Size__c + ' paddingnone' : 'col-md-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.Id\">\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\">\n <span>{{ ques?.Question_Text__c }}</span>\n </div>\n <div class=\"col-md-12 paddingZero myt-dateTimeNew\" *ngIf=\"ques.Type__c === 'Time' || ques.Type__c === 'Date'\">\n <div *ngIf=\"ques.Type__c === 'Date'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label> -->\n <div class=\"dateandtime\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, ques)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\" >\n </my-date-picker>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.Type__c === 'Time'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label> -->\n <div class=\"dateandtime\">\n <div [ngClass]=\"{'dt-line date-line dt-time': qbItem?.Progress_Bar__c,\n dateandTime: !qbItem?.Progress_Bar__c}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour myt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime showminute myt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem.X24_Hours__c == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"myt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"displayDate($event,ques)\"></app-custom-date-picker>\n </div>\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <label>{{ ques.Question_Text__c }}</label>\n <app-custom-input\n [value]=\"ques?.input\"\n [ngClassValue]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\"\n [question]=\"ques\" \n [idValue]=\"ques?.Tracking_ID__c\"\n [focusEvent]=\"clearSQError(ques?.Id)\"\n [error]=\"ques?.error\"\n [placeholder]=\"ques?.Question__c\"\n (inputValue)=\"selectedInput($event,ques)\">\n </app-custom-input>\n </div>\n <div *ngIf=\"ques.Type__c === 'Location'\">\n <!-- for pick location -->\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['Api_Key__c']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\n </div>\n <!-- for text area -->\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.Type__c === 'Email'\">\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\n </div>\n\n <div *ngIf=\"ques.Type__c === 'File'\">\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"\n fa fa-plus fa-2x\n picture-upload-child\n pic-upload\n icolor\n \">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\n </div>\n\n <ul *ngIf=\"\n attachments?.length > 0 &&\n ques.Type__c === 'File' &&\n !qbItem.Progress_Bar__c\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n <div class=\"myt-box\" *ngIf=\"qbItem.Progress_Bar__c\">\n\n <div *ngFor=\"let attachment of attachments\" class=\"file-uploading-box\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"file-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />\n <span class=\"f-Name\">{{ ques?.Question__c }}</span>\n <label class=\"file-label \">\n <span style=\"color: #c5281c;text-decoration:underline\">\n {{'attach' | i18n:i18nService.currentLanguage}}\n </span>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\n <app-custom-table \n [question]=\"ques\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-table>\n </div>\n\n <!-- Dropdown -->\n <div *ngIf=\"ques.Type__c === 'Dropdown'\" class=\"\">\n <!-- for common dropdown -->\n <!-- HA 20DEC23 For Translation -->\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel__c\"\n [options]=\"ques.Question_Options__r.records\"\n [apiMeta]=\"ques.Sub_Text__c\"\n [id]=\"ques.Name\"\n [selectedValue]=\"ques.input\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques?.Error_Message__c\"\n [error]=\"ques?.error\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-dropdown>\n <app-dropdown-with-flag *ngIf=\"ques.isDependentPicklist && !ques.dropDownOnly\" [certified]=\"ques.certifiedFlag\" [JobPerformerCertificates]=\"ques.certificateList\" (flagDropDownChange)=\"dependentChange($event)\"></app-dropdown-with-flag>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--List start-->\n <div *ngIf=\"listFlag\">\n <div class=\"form-group\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div class=\"myt-align3\" [class]=\"'col-md-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.Id);let i = index\">\n <div>\n <span class=\"dis-flex myt-font3 myt-font7\">{{ ques?.Question__c }}</span>\n </div>\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n </div>\n </div>\n <div class=\"\" *ngIf=\"addFlag\">\n <!-- HA 20DEC23 For Translation -->\n <button (click)=\"Add(getLocalSubQuestions(questionItem.Id))\" class=\"btn\"><i class=\"fa fa-plus\" ></i>{{'add' | i18n:i18nService.currentLanguage}}</button>\n </div>\n </div>\n </div>\n </div>\n <!--List End-->\n\n <!-- Actions -->\n <div *ngIf=\"individualBookButton\" class=\"flexer\">\n <!-- Backward / Back -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"backbutton\" [ngClass]=\"{ 'col-md-6': !qbItem.Progress_Bar__c }\"\n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.Back__c\">\n <div [ngClass]=\"{}\">\n <button [ngClass]=\"{\n 'left-bt': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color':\n !qbItem.Progress_Bar__c\n }\" (click)=\"handleBackClick()\">\n {{ qbItem?.Back__c }}\n </button>\n </div>\n </div>\n\n <!-- Forward / Next -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div [ngClass]=\"{ 'col-md-6': !qbItem.Progress_Bar__c }\" *ngIf=\"qbItem.Next__c\">\n <div>\n <button [ngClass]=\"{\n 'rusty': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color':\n !qbItem.Progress_Bar__c\n }\" (click)=\"handleNextClick()\">\n {{ qbItem.Next__c }}\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Summary -->\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\n 'col-md-12':!qbItem.Progress_Bar__c\n }\">\n <h1 class=\"header1 summarypadd\" >{{ qbItem.SubTitle__c }}</h1> \n <div id=\"progress2\" *ngIf=\"!qbItem.Progress_Bar__c && this.abItem.Status__c != 'Completed' \">\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\n <div *ngFor=\"let qa of summary\">\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\n <div [ngClass]=\"{ summary: !qbItem.Progress_Bar__c }\">\n <div *ngIf=\"!qbItem.Edit__c\"\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.Edit__c\"\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\n <div [ngClass]=\"{ 'question': this.abItem.Status__c === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div>\n <div class=\"answer\" >\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <!-- HA 02FEB24 Displaying the in summary for book type -->\n <div *ngIf=\"qa.qTyp == 'Book'\">\n <div *ngFor=\"let val of qa.myVal\">\n <p>{{ val.Question_Text__c }}: <span>{{ val.input }}</span></p>\n </div>\n </div>\n <!-- HA 02FEB24 Displaying the value for direct question -->\n <div *ngIf=\"qa.qTyp != 'File' && qa.qTyp != 'Book'\">{{ qa.Question_Text__c }}: <span></span>{{ qa.ansValue }}</div>\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"icon-edit\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"this.abItem.Status__c === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\n <h2>{{this.qbItem.Summary_Text__c}}</h2>\n <p>{{this.qbItem.Summary_Sub_Text__c}}</p>\n </div>\n\n <div id=\"progress2\" *ngIf=\"qbItem.Progress_Bar__c \">\n <div [ngClass]=\"{'bgColor summary-top' : qbItem.Progress_Bar__c }\" >\n <div id=\"progress-summary\" *ngIf=\"qbItem.Progress_Bar__c\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n \n <div *ngIf=\"qbItem.Summary_Text__c && qbItem.Progress_Bar__c\" \n [ngClass]=\"{ summaryTitle: qbItem.Progress_Bar__c }\">\n <h3 class=\"subTitle\" >{{ qbItem.Summary_Text__c }}</h3>\n <div *ngIf=\"abItem.Status__c != 'Completed'\" class=\"subTitle1\" >{{ qbItem.Summary_Sub_Text__c}}</div>\n </div>\n </div>\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <h3 class=\"summary-h\">\n {{ qbItem.Summary_Text__c }}\n </h3>\n </div>\n </div>\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\n <div class=\"summary-groupText myt-font2\">\n <!-- <p>Informe de da\u00F1o</p> -->\n </div>\n <div *ngFor=\"let qa of summary\" >\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\n <div class=\"summary\">\n <!-- <div *ngIf=\"!qbItem.Edit__c\"\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.Edit__c\"\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.Status__c === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div> -->\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"icon-edit\" />\n </button>\n </div>\n \n <div class=\"answer\">\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <div *ngIf=\"qa.qTyp != 'File'\">\n {{ qa.ansValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flexer1\" *ngIf=\"abItem\">\n <div class=\"\" *ngIf=\"abItem.Status__c == 'Completed' && qbItem.Cancel__c\">\n <div class=\"col-md-12\">\n <button [ngClass]=\"{'btn-text': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\"\n (click)=\"handleCancelClick()\">\n {{ qbItem.Cancel__c }}\n </button>\n </div>\n </div>\n </div> -->\n\n <!-- Group Actions -->\n <div class=\"align-edit-submit\" *ngIf=\"abItem.Status__c != 'Completed'\">\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"col-md-6\" *ngIf=\"qbItem.Submit__c\">\n <button [ngClass]=\"{ 'btn-text2': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c }\" \n (click)=\"handleSubmitClick()\">\n {{ qbItem.Submit__c }}\n </button>\n </div>\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!-- <div class=\"col-md-6\" *ngIf=\"qbItem.Edit__c\">\n <button [ngClass]=\"{'grey': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\" \n (click)=\"handleBackClickNew()\">\n {{ qbItem.Edit__c }}\n </button>\n </div> -->\n </div>\n\n</div>", styles: [".rusty{width:235px;background-color:#cd2810;color:#fff;text-align:center;font-size:24px;height:60px;margin-left:0%;margin-top:11%;cursor:pointer}.edit{background-color:#dedddd;border:none;color:#c5281c;text-decoration:underline;margin-left:50%;font-size:16px;vertical-align:super;font-weight:700}.icon-edit{width:15px;height:18px;margin:0 6px 1px -13%}.icon-edit1,.icon-edit-summary{width:29px;height:28px}.questiondiv1{padding-left:25px;padding-right:25px;padding-top:3%}.questiondiv2{padding-top:0;padding-bottom:20px;padding-left:11px}.align-edit-submit{display:flex;flex-direction:column;align-items:center}.questiondiv2{padding-left:0!important;padding-bottom:0!important}@media screen and (min-width: 689px){#progress,#progress-summary{padding-left:12px}.backicon{display:none}.dt-time{background-position:98%!important}}.bgColor{text-align:center;background-color:#dedddd}.questionalign{text-align:center;padding-right:4%;margin-bottom:4px;margin-top:2rem;color:#560d05}.questionStyle{margin-bottom:1.5rem}.largeTitle{padding-left:16px;padding-top:12px}.question-f-size{font-size:.7rem}.non{background-color:#dedddd}.circle{margin-left:25px}.titlebar{padding-left:10%;padding-top:1%;padding-right:10%}.infodiv{padding-left:2rem;overflow:hidden}.info-alert{border:1px solid #e6e6e6;border-radius:5px;padding:.5em;margin-left:15px;margin-right:15px;margin-bottom:1rem;display:flex}.addtional-info{margin-left:-33px;margin-top:-21px;font-size:16px;font-weight:400;font-stretch:normal;font-style:normal;color:#6f7072;font-family:Helvetica}.ques-alert1{margin-bottom:1rem;display:flex}.iposition{margin-left:3rem}.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{position:relative;padding:20px;float:center;width:100%}.col-md-12{padding:0!important}.nxt-btn{border-radius:.3rem;font-size:1.25rem;line-height:1.5;padding:.5rem 1rem;width:100%;cursor:pointer;outline:0}.cond-div2{color:red;font-weight:700;padding-bottom:3%}.radiotext{margin-top:-30px}.radiocontainer{display:flex;flex-direction:row-reverse;border:1px solid none;border-radius:.3em;padding:0;align-items:center;text-align:center;cursor:pointer;font-family:Rubik,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;color:#a3a2a2}.radioOption{display:flex;align-content:flex-start;margin-top:-16px;width:6%}.myt-time{width:-moz-fit-content!important;width:fit-content!important;background-image:none;background:#dedddd;margin:0;padding:0;border:none;font-size:15px;letter-spacing:1px}.showminute{padding-left:5px;margin-top:0%}.myt-time1{margin-top:-32px;margin-left:-15px}.myt-dateTimeNew{margin-left:-14px}.myt-hour{width:-moz-fit-content;width:fit-content}.date-time{padding:0;margin:0;text-align:left}.dateandTime{border:1px solid #d2d4d6;position:relative;display:flex;border-radius:2px;background-image:url(https://dynamic-css1.s3.ap-south-1.amazonaws.com/External+css/time.svg);background-size:25px;background-repeat:no-repeat;background-position:99% center;background-color:#fff;height:37px}.date-line{border-bottom:1px solid #fff}.dt-time{width:57%;margin-left:2.3%;text-align:left;background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/icon-clock%402x.png)!important;background-size:25px!important;background-repeat:no-repeat!important;background:#dedddd}.date-picker{width:57%;margin-left:2.5%;height:44px;border-radius:5px}.datetime:focus{border:none;box-shadow:none}#meridiem{margin-top:-2px;border:hidden}.dis-flex{display:flex;justify-content:center}.textBox{width:100%;height:36px}.textBox1{width:100%;height:36px;margin-left:-17px}.option{color:#767676}.paddingnone{padding-bottom:0%}.paddingZero{padding:0}.summary-h{text-align:left;padding-bottom:15px}.summary{display:flex;flex-direction:column;align-items:flex-start;border-bottom:2px solid #fff}.asum{color:#6f7072;margin-top:5%;padding-left:3%}.question{padding:10px;font-size:14px;color:#007bff}.question1{margin-left:14rem;background:#dedddd;color:#560d05;font-size:15px;padding-bottom:20px;text-align:left}.answer{display:flex;align-items:baseline;padding:5px 5px 10px;font-size:14px;font-weight:400;word-wrap:break-word;width:97%;justify-content:space-between}.answer1{max-width:55%;margin-left:auto;margin-right:auto;color:#a3a2a2;margin-top:0%;padding-bottom:0;font-size:14px;font-weight:400;word-wrap:break-word;text-align:left;background:#dedddd;border-bottom:1px solid #fff}.myt-font{font-size:20px}.myt-font1{width:16rem;font-size:14px;font-weight:400}.myt-font2{font-size:18px}.myt-font3,.myt-font4{font-size:14px}.myt-font5{margin-top:-18px;font-weight:400;font-size:14px;color:#560d05}.myt-font6{font-size:20px;font-weight:700;color:#c5281c;text-align:center}.myt-font10{font-weight:400;font-size:14px;color:#560d05;margin-top:10px}.myt-font7{display:flex;justify-content:flex-start;padding-left:20.5%;font-weight:100;color:#560d05}.myt-font8{font-weight:400}.dpDown:focus-visible{outline:none}.summaryTitle{padding-left:0%;padding-top:4%}.summary-groupText{width:55%;margin:auto auto -2%;text-align:left;font-weight:700;padding-top:0%;padding-bottom:0%;background-color:#dedddd;color:#c5281c}.sum-ques{width:55%;margin:auto}.sum-ques1{width:59%;margin:auto}.header-style{padding:15px!important;background:#F8F8F8;color:#898989!important;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0!important;justify-content:left!important;font-size:15px!important}.file-upload-btn{display:none;border-bottom:groove}.file-upload-box{max-width:45%;margin-left:29.5%;height:auto;padding:16px;display:flex;border:2px;border-bottom:1px solid #fff;background-color:#dedddd;justify-content:space-between;color:#d8d8d8}.file-label{cursor:pointer;color:#c5281c;text-decoration:underline}.file-uploading-box{font-size:14px;font-weight:400;max-width:45%;margin-left:29.5%;height:56px;padding:16px;display:flex;border:2px;background-color:#dedddd;justify-content:space-between;margin-bottom:0;color:#d8d8d8}.uploading-file-name{color:#6f7072}.deleteIcon{cursor:pointer;height:24px}.file-icon{max-width:24px;height:26px}.picture-upload{height:200px;width:200px;position:relative;border:1px solid #ccc;display:flex;padding:6px 12px;cursor:pointer;background-color:#fff;align-items:center}.colon{line-height:42px;padding:0;margin-top:10%;color:#6f7072}.colon1{display:contents}.subTitle{color:#c5281c;font-weight:600;margin-top:-3%}.subTitle1{color:#560d05;font-size:14px;font-weight:500}.check-icon{color:#87be1c;margin-left:-2rem;z-index:1;padding:5px;margin-top:.4rem}.check-icon2{color:#87be1c;margin-left:-4rem;z-index:1;margin-top:.6rem;line-height:3}.check-icon3{color:#87be1c;margin-left:-4rem;z-index:1;margin-top:3rem}.align-l{text-align:left;padding:1% 2% 2%;margin-bottom:-5%;margin-top:-1%}.attach-ulist{list-style-type:none;margin-left:0;margin-bottom:.7rem}.attach-list{float:right;cursor:pointer;padding:0}.icolor{color:#99b5ce}.picture-upload-child{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tspan:nth-child(1){font-size:25px;font-weight:700}.tspan:nth-child(2){display:none}.pic-upload{position:absolute;top:15%;left:85%;transform:translate(-50%,-50%)}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-primary:hover{color:#fff}.btn-primary:focus,.btn-primary.focus{color:#fff;box-shadow:0 0 0 .2rem #268fff80}.btn-primary.disabled,.btn-primary:disabled{color:#fff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #268fff80}.btn-back-color{display:block;width:100%;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;text-align:center;border-radius:.3rem;margin:0}.fa-plus:hover{color:#87be1c}.fa-plus{color:#99b5ce}.btn-primary{border-color:#007bff}.ques-Title{text-align:left;font-size:24px}.grey{width:38%;height:56px;margin:0px 0px 0px 0rem;padding:14px 0 17px;background-color:#cd2810;color:#fff;font-size:24px}.btn-text{width:330px;font-size:24px;background-color:#cd2810;color:#fff;height:60px;margin-left:auto;margin-top:0;cursor:pointer;border-radius:40px}.btn-text2{width:21rem;font-size:24px;background-color:#cd2810;border:none;color:#fff;height:60px;margin-left:17rem;margin-right:17rem;margin-top:10px;cursor:pointer;border-radius:40px}.flexer{max-width:100%;width:100%;display:flex;justify-content:center}.flexer1{max-width:100%;width:100%;display:flex;justify-content:center;margin-top:32px}.btn-r{right:0rem}.down{margin-left:0;width:57%}.down1{width:16rem;margin-left:0rem;background-color:#dedddd}.down2{margin-top:0%;padding-left:11px}.dropbox{margin-left:21.5rem}.myt-dropbox{background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/down-red.png);background-origin:content-box;background-position:right -.9rem center;background-repeat:no-repeat;background-size:35px 33px;padding-right:1.35rem;background-color:#dedddd}.boxoutline{outline:transparent;background-color:#dedddd}.left-bt{width:238px;background-color:#cd2810;color:#fff;padding:0;text-align:center;font-size:24px;cursor:pointer;height:60px;margin-top:125px;margin-bottom:4rem;margin-left:-234px}.townArea{text-align:left;height:43px;padding-left:15px}.townArea:hover{background-color:#9e9e9e2e}.listFlow{font-weight:400;color:#767676;z-index:2;position:absolute;background:#dedddd;box-shadow:0 2px 5px #00000040}.myt-radio input[type=radio]:checked:after{background-color:#c5281c}.full-summary{margin-top:4%}.container-radio input{display:none;position:absolute;opacity:0;cursor:pointer}.f-Name{color:#6f7072;font-size:14px;font-weight:400;word-break:break-word}.summary-top{margin-top:4%}.myt-border-r{border-top:none;border-left:none;border-right:none;border-radius:0}.myt-align{margin-left:4%;line-height:2}.myt-align1{margin-left:-29px}.myt-align2{margin-left:-15px}.myt-align3{width:100%}.myt-book1{margin-top:-20px}.colorf{color:#555}.bookText{width:57%;margin-left:21.5%;background-color:#dedddd}.book{width:32.6%;margin-left:34%;background-color:#dedddd}.summary-completed{padding-left:2%;margin-top:20px}.town{margin:0;background-color:#dedddd}.town-drop{margin:auto;width:57%}.questiondiv1.padd-bottom{padding-bottom:6rem!important;padding-top:2rem!important}@media (max-width: 1090px){.icon-edit{margin:0 6px -3px -13%!important}}@media (max-width: 768px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:center}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}}@media (max-width: 768px){.radioOption{width:8%}.grey{width:78%;margin-left:17.5rem;height:68px!important;font-size:20px!important;font-weight:700!important}.answer{margin-top:-4%!important}}@media screen and (max-width: 672px){.header1{font-size:23px!important}.summarypadd{padding-top:50px!important}.answer{margin-top:-5%!important}.icon-edit{margin:0 6px 0 -13%!important}.subTitle1{width:95%!important}.additional{margin-left:6%!important;padding:0!important}.container1{margin-left:-35%}.town-drop{margin:auto;width:100%!important}.dis-flex{display:flex;justify-content:left}.check{display:inherit;width:-moz-max-content;width:max-content;margin-left:6%}.rusty{width:28rem;margin-left:0rem;height:68px!important;font-size:20px!important;font-weight:700!important;margin-bottom:37px}.left-bt{width:28rem;margin-left:-28rem;height:68px!important;font-size:20px!important;font-weight:700!important}.questionalign{text-align:center}.questionalign{margin-top:1rem!important}.largeTitle{padding-left:0!important}.myt-align{margin-left:0%!important}.myt-text1{margin-top:-22px}.myt-text2{margin-top:-20px}.myt-text3{margin-bottom:21px}.date-picker,.dt-time{width:100%}.showminute{margin-top:-.5%}.radioOption{width:auto;margin-top:0;margin-left:7%;margin-right:-3%}.myt-font7{padding-left:0rem;margin-left:-1.5%}.down,.bookText,.book{width:100%;margin-left:0rem}.town{margin-left:0rem;width:100%}.file-upload-box,.file-uploading-box{max-width:85%;margin-left:20px}.question{margin-left:0rem}.btn-text2{width:28rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}.grey{width:28rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}}@media screen and (max-width: 580px){.rusty{width:27rem;height:68px!important;font-size:20px!important;font-weight:700!important}.left-bt{width:27rem;margin-left:-27rem;height:68px!important;font-size:20px!important;font-weight:700!important}.container1{margin-left:-24%}.showminute{margin-top:.5%}.bookText,.book{width:100%;margin-left:0rem}.btn-text2{width:27rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}.grey{width:27rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.btn-text{width:27rem;height:68px!important;font-size:20px!important;font-weight:700!important}}@media screen and (max-width: 672px){.questiondiv1{padding:0}}@media screen and (max-width: 525px){.rusty{width:26rem;height:68px!important;font-size:20px!important;font-weight:700!important}.container1{margin-left:-9%}.left-bt{width:26rem;margin-left:-26rem;height:68px!important;font-size:20px!important;font-weight:700!important}.dateandtime{padding-left:10px!important}}@media screen and (max-width: 480px){.answer{margin-top:-7%!important}.icon-edit{margin:0 6px 4px -35%!important}.rusty{width:25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.left-bt{width:25rem;margin-left:-25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.file-upload-box,.file-uploading-box{max-width:89%}}@media screen and (max-width: 420px){.answer{margin-top:-9%!important}.icon-edit{margin:-9px 1px 4px 4%!important}.rusty,.btn-text{width:21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.left-bt{width:21rem;margin-left:-21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.container1{margin-left:0%}.file-upload-box,.file-uploading-box{max-width:100%}.myt-dateTimeNew{margin-left:-10px!important}.dateandtime{padding-left:0!important}.dt-time{padding-left:.8%!important}.myt-font7{padding-left:0rem;margin-left:-3.5%}.grey{width:21rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.btn-text2{width:21rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}}@media screen and (max-width: 368px){.icon-edit{margin:0 6px 3px 35%!important}.icon-editios{margin-bottom:4px}.rusty{width:19rem;height:68px!important;font-size:20px!important;font-weight:700!important}.left-bt{width:19rem;margin-left:-19rem;height:68px!important;font-size:20px!important;font-weight:700!important}.container1{margin-left:15%}.radiotext{margin-top:-45px}.file-upload-box,.file-uploading-box{max-width:100%}.grey{width:19rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.btn-text2{width:19rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}.btn-text{width:19rem;height:68px!important;font-size:20px!important;font-weight:700!important}}.mydp .selection{padding:0!important}.text-border{border-top:none;border-left:none;border-right:none;border-radius:0;border-bottom:1px solid #fff!important;background-color:#dedddd}.additional{display:flex;font-size:20px;text-align:left;font-weight:200;margin-left:4%;justify-content:center;color:#3e3e3c;padding:0 30%}.check{display:block}.header2{font-size:20px;font-weight:300;text-align:center;font-stretch:normal;font-style:normal;line-height:1.5;letter-spacing:normal;color:#560d05;max-width:1100px;margin:auto;padding-bottom:10px}.header1{font-size:32px;font-weight:700;text-align:center;font-stretch:normal;font-style:normal;line-height:1.25;letter-spacing:normal;color:#dd2e13}.container1{display:inline-grid;position:relative;cursor:pointer;font-size:20px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.bottomspace1{padding-bottom:14px!important}.myt-321{font-size:20px;font-weight:700;color:#c5281c;margin-top:11px}.myt-345{display:none}.panel{-moz-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);-webkit-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);border-radius:0;border:none;box-shadow:0 1px 2px #0000001a;margin-bottom:20px}.panel .panel-body{padding:20px}.panel-heading{border-radius:0;border:none!important;padding:10px 20px}.panel-default>.panel-heading{background-color:#fafafa;border-bottom:none;color:#2a323c;border:1px solid #e3e3e3!important}.panel-title{margin-bottom:0;margin-top:0;font-family:Rubik,sans-serif;font-weight:400}.panel-footer{background:#fafafa;border-top:0}.panel-color .panel-title{color:#fff}.panel-primary>.panel-heading{background-color:#03a9f4}.panel-success>.panel-heading{background-color:#01ba9a}.panel-info>.panel-heading{background-color:#18bae2}.panel-warning>.panel-heading{background-color:#f8ca4e}.panel-danger>.panel-heading{background-color:#f62f37}.panel-dark>.panel-heading{background-color:#2a323c;color:#fff}.panel-fill{border-radius:3px}.panel-fill .panel-heading{background-color:transparent;color:#fff;border-bottom:1px solid rgba(255,255,255,.5)!important}.panel-fill .panel-body{color:#ffffffd9}.panel-fill.panel-default .panel-body{color:#666}.panel-fill.panel-default .panel-heading{background-color:transparent;color:#333;border-bottom:1px solid rgba(0,0,0,.1)!important}.panel-fill.panel-primary{background-color:#03a9f4}.panel-fill.panel-success{background-color:#01ba9a}.panel-fill.panel-info{background-color:#18bae2}.panel-fill.panel-warning{background-color:#f8ca4e}.panel-fill.panel-danger{background-color:#f62f37}.panel-fill.panel-dark{background-color:#2a323c}.panel-group .panel .panel-heading a[data-toggle=collapse].collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading .accordion-toggle.collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading a[data-toggle=collapse]{display:block}.panel-group .panel .panel-heading a[data-toggle=collapse]:before{content:\"\\f0d8\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading .accordion-toggle{display:block}.panel-group .panel .panel-heading .accordion-toggle:before{content:\"\\f068\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading+.panel-collapse .panel-body{border-top:none!important;border:1px solid #e3e3e3}.panel-group .panel-heading{padding:12px 26px}.panel-group.panel-group-joined .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-group-joined .panel-group .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-body label{color:#9a9a9a;font-size:14px;font-weight:400;display:inline-block;max-width:100%;margin-bottom:5px}.font-size{font-size:14px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit;text-decoration:none}.panel-title{font-size:16px}@media (min-width: 300px) and (max-width: 399px){.selbtngroup{padding-left:1.3%!important}}@media (min-width: 400px) and (max-width: 480px){.selbtngroup{padding-left:.9%!important}}@media (min-width: 481px) and (max-width: 580px){.selbtngroup{padding-left:.2%!important}}@media screen and (min-width: 871px){.selbtngroup{padding-right:4px!important}}@media screen and (max-width: 689px){.answer{max-width:95%!important;margin-left:0!important;margin-right:15px}#progress2{margin-left:8.5px!important}.edit{margin-left:85%!important;margin-bottom:0%!important}.sum-ques,.sum-ques1{width:100%!important;margin:auto}.summary-completed{padding-left:0!important;padding-bottom:17px;margin-top:9px}.summary-top{margin-top:10%}.subTitle1{font-size:18px!important;line-height:1.38!important;text-align:center;letter-spacing:normal;color:#560d05!important;font-weight:300}.backbutton{display:none}.rusty{margin-bottom:37px}}@media screen and (min-width: 1024px){.ES-style{position:absolute;left:7px;font-size:.9rem;color:#555;top:9px}}@media screen and (max-width: 1024px){.ES-style{position:absolute;left:.6rem;font-size:.95rem;color:#555;top:.57rem}}@media screen and (max-width: 689px){.app-back1{line-height:1.5;cursor:pointer;width:100%;max-width:1200px;margin-right:auto;margin-left:-10px;display:flex;font-family:Helvetica;font-size:21px;font-weight:700;align-items:center;font-stretch:normal;font-style:normal;letter-spacing:normal;color:#dd2e13;z-index:1;position:fixed;background-color:#dedddd;border-radius:0!important;margin-top:-12px;padding-top:.8rem}.header1{padding-top:75px}.dt-time{background-position:100%!important}}.summary-volver{display:none}.checkbox-container{display:flex;flex-direction:column}.checkbox-wrapper{display:flex;align-items:center;margin-bottom:10px}.container1{display:flex;align-items:center}.container1 input[type=checkbox]{margin-right:10px}.checkbox-label{margin-left:10px}@media ((min-width: 1200px)){.form-row{display:flex;flex-wrap:wrap}}\n"], dependencies: [{ kind: "directive", type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i8.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i8.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i12.MyDatePicker, selector: "my-date-picker", inputs: ["placeholder", "locale", "disabled", "options", "defaultMonth", "selDate", "selector"], outputs: ["dateChanged", "inputFieldChanged", "calendarViewChanged", "calendarToggle", "inputFocusBlur"], exportAs: ["mydatepicker"] }, { kind: "component", type: i7.NgxSpinnerComponent, selector: "ngx-spinner", inputs: ["disableAnimation", "bdColor", "zIndex", "color", "type", "size", "fullScreen", "name", "template", "showSpinner"] }, { kind: "component", type: i13.CircleProgressComponent, selector: "circle-progress", inputs: ["name", "class", "backgroundGradient", "backgroundColor", "backgroundGradientStopColor", "backgroundOpacity", "backgroundStroke", "backgroundStrokeWidth", "backgroundPadding", "radius", "space", "percent", "toFixed", "maxPercent", "renderOnClick", "units", "unitsFontSize", "unitsFontWeight", "unitsColor", "outerStrokeGradient", "outerStrokeWidth", "outerStrokeColor", "outerStrokeGradientStopColor", "outerStrokeLinecap", "innerStrokeColor", "innerStrokeWidth", "titleFormat", "title", "titleColor", "titleFontSize", "titleFontWeight", "subtitleFormat", "subtitle", "subtitleColor", "subtitleFontSize", "subtitleFontWeight", "imageSrc", "imageHeight", "imageWidth", "animation", "animateTitle", "animateSubtitle", "animationDuration", "showTitle", "showSubtitle", "showUnits", "showImage", "showBackground", "showInnerStroke", "clockwise", "responsive", "startFromZero", "showZeroOuterStroke", "lazy", "options"], outputs: ["onClick"] }, { kind: "component", type: i14.PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: i15.CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "readOnly", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: i16.CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error", "question", "readOnly"], outputs: ["textareaValueChange"] }, { kind: "component", type: i17.CustomTableComponent, selector: "app-custom-table", inputs: ["question", "apiMeta"], outputs: ["valueChange"] }, { kind: "component", type: i18.CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate", "error", "errorMessage", "readOnly"], outputs: ["dateChange"] }, { kind: "component", type: i19.DropdownWithFlagComponent, selector: "app-dropdown-with-flag", inputs: ["certified", "JobPerformerCertificates"], outputs: ["flagDropDownChange"] }, { kind: "component", type: i20.CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "component", type: i21.LoaderComponent, selector: "app-loader" }, { kind: "pipe", type: i22.I18nPipe, name: "i18n" }], encapsulation: i0.ViewEncapsulation.None });
2205
2206
  }
2206
2207
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: QuestionnaireComponent, decorators: [{
2207
2208
  type: Component,
@@ -2214,6 +2215,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
2214
2215
  type: Input
2215
2216
  }], tkn: [{
2216
2217
  type: Input
2218
+ }], api: [{
2219
+ type: Input
2217
2220
  }], handleEvent: [{
2218
2221
  type: Output
2219
2222
  }], handlePage: [{
@@ -2221,4 +2224,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
2221
2224
  }], handleQuestion: [{
2222
2225
  type: Output
2223
2226
  }] } });
2224
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvcXVlc3Rpb25uYWlyZS9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbm5haXJlL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FFbEIsTUFBTSxlQUFlLENBQUM7QUFTdkIsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzlELE9BQU8sRUFDTCxRQUFRLEVBR1IsYUFBYSxFQUViLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLGFBQWEsRUFDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFeEQsT0FBTyxFQUVMLFVBQVUsRUFNVixNQUFNLEdBQ1AsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVl0QixNQUFNLE9BQU8sc0JBQXNCO0lBd012QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUE7SUFFRDtJQWxOQSxJQUFJLENBQVM7SUFDYixrQkFBa0IsQ0FBUztJQUMzQixJQUFJLENBQVM7SUFDYixHQUFHLENBQVM7SUFDWCxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUNqQyxVQUFVLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFDbkQsY0FBYyxHQUFzQixJQUFJLFlBQVksRUFB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Q0FBQyxJQUFRO1FBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFTO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxXQUFXLENBQUMsWUFBaUIsRUFBQyxJQUFRO1FBQ3BDLHdFQUF3RTtRQUN4RSxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFHLHFCQUFxQixDQUFDLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0csQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFTO1FBQ2QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBUztRQUNoQixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsQ0FBQzt3R0EzeEVVLHNCQUFzQjs0RkFBdEIsc0JBQXNCLCtPQUh0QixDQUFDLGFBQWEsQ0FBQywrQ0N2RDVCLG15b0NBbXRCTTs7NEZEenBCTyxzQkFBc0I7a0JBUGxDLFNBQVM7K0JBQ0UsbUJBQW1CLGlCQUVkLGlCQUFpQixDQUFDLElBQUksYUFDMUIsQ0FBQyxhQUFhLENBQUM7MllBSWpCLElBQUk7c0JBQVosS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBPbkNoYW5nZXMsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgRWxlbWVudFJlZixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBTYWxlc2ZvcmNlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zYWxlc2ZvcmNlLnNlcnZpY2VcIjtcbmltcG9ydCB7IElNeURhdGVNb2RlbCwgSU15RHBPcHRpb25zIH0gZnJvbSBcIm15ZGF0ZXBpY2tlclwiO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IE5neFNwaW5uZXJTZXJ2aWNlIH0gZnJvbSBcIm5neC1zcGlubmVyXCI7XG4vL2ltcG9ydCB7IE5neEluZGV4ZWREQlNlcnZpY2UsIEluZGV4RGV0YWlsc30gZnJvbSAnbmd4LWluZGV4ZWQtZGInO1xuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JzsgXG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZVwiO1xuXG5pbXBvcnQge1xuICBRdWVzdGlvbixcbiAgUXVlc3Rpb25Cb29rLFxuICBBbnN3ZXJCb29rLFxuICBBbnN3ZXJXcmFwcGVyLFxuICBPcHRpb24sXG4gIE9wdGlvblZhbHVlLFxuICBBdHRhY2htZW50V3JhcHBlcixcbiAgQXR0YWNobWVudCxcbiAgTG9jYWxRdWVzdGlvblxufSBmcm9tIFwiLi4vLi4vd3JhcHBlclwiO1xuaW1wb3J0IHsgRXJyb3JXcmFwcGVyIH0gZnJvbSBcIi4uLy4uL21vZGVsL2Vycm9yV3JhcHBlclwiO1xuXG5pbXBvcnQge1xuICBURVNUUVVFU1RJT04sXG4gIERUUVVFU1RJT04sXG4gIEZJTEVRVUVTVElPTixcbiAgVEFRVUVTVElPTixcbiAgUkFESU9RVUVTVElPTixcbiAgQ0hFQ0tRVUVTVElPTixcbiAgQk9PS1FVRVNUSU9OLFxuICBURVNUUUIsXG59IGZyb20gXCIuLi8uLi9zYW1wbGVcIjtcbmltcG9ydCB7IGZyb20gfSBmcm9tIFwicnhqc1wiO1xuLy8gSEEgMTlERUMyMyBpbXBvcnRlZCB0cmFuc2xhdGlvbiBzZXJ2aWNlXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gXCIuLi8uLi9pMThuLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImxpYi1xdWVzdGlvbm5haXJlXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuaHRtbFwiLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtDaGFuZ2VTZXJ2aWNlXSxcbiAgc3R5bGVVcmxzOiBbXCIuL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50LmNzc1wiXSxcbn0pXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25uYWlyZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHFiSWQ6IHN0cmluZztcbiAgQElucHV0KCkgaW5zdXJhbmNlU3RhcnREYXRlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlcnY6IHN0cmluZztcbiAgQElucHV0KCkgdGtuOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBoYW5kbGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhhbmRsZVBhZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaGFuZGxlUXVlc3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHBhcmFtczogUGFyYW1zO1xuICBwdWJsaWMgZGV2aWNlSW5mbyA9IG51bGw7XG4gIHB1YmxpYyBhYkl0ZW06IEFuc3dlckJvb2s7XG4gIHB1YmxpYyBxYkl0ZW06IFF1ZXN0aW9uQm9vaztcbiAgcHVibGljIHF1ZXN0aW9uSXRlbTogUXVlc3Rpb247XG4gIHB1YmxpYyBhbnN3ZXJXcmFwOiBBbnN3ZXJXcmFwcGVyO1xuXG4gIC8vIENPTkRJVElPTkFMIFRZUEVTXG4gIHB1YmxpYyByYWRpb0ZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGRhdGFGbGFnOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gT1BUSU9OT05MWSBUWVBFU1xuICBwdWJsaWMgZHJvcGRvd25GbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBjaGVja2JveEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBVTkNPTkRJVElPTkFMIFRZUEVTXG4gIHB1YmxpYyB0ZXh0RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgdGFGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBkdEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHRpbWVGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBkYXRlRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZmlsZUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGVtYWlsRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgbnVtYmVyRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYWxwaGFudW1lcmljRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYm9va0ZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGxpc3RGbGFnOiBib29sZWFuPSBmYWxzZTtcbiAgLy9CYWNrIGJ1dHRvblxuICBwdWJsaWMgYmFja0J1dHRvbkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIG9wdGlvblZhbHVlczogT3B0aW9uVmFsdWVbXSA9IFtdO1xuICBwdWJsaWMgc3ViUXVlc3Rpb25zOiBRdWVzdGlvbltdID0gW107XG4gIHB1YmxpYyBpbnBWYWx1ZTogc3RyaW5nO1xuICBwdWJsaWMgYW5zd2VyTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgZGF0ZU1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIHNlbGVjdGVkaG91ck1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIHNlbGVjdGVkbWludXRlTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgYXR0YWNobWVudHNNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBzcU9wdGlvbnMgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBzdWJBbnNNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBsb2NhbFN1YlF1ZXN0aW9uczogTG9jYWxRdWVzdGlvbltdID0gW107XG4gIHB1YmxpYyBxdWVzdGlvblN0YWNrID0gW107XG4gIHB1YmxpYyBxdWVzdGlvbk5hbWUgPSBbXTtcbiAgcHVibGljIGF0dGFjaG1lbnRzOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgYXR0YWNobWVudElkTGlzdDogYW55W10gPSBbXTtcbiAgcHVibGljIGF0dGFjaG1lbnRJZDogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIGF0dGFjaG1lbnQ6IGFueTtcbiAgcHVibGljIGFsbG93ZWRGaWxlRXh0ZW5zaW9uOiBzdHJpbmdbXTtcbiAgcHVibGljIGZpbGVFeGNlZWRlZExpbWl0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBmaWxlVHlwZUluY29ycmVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYmFjazogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYmFja2ljb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNoZWNrOiBib29sZWFuO1xuICBwdWJsaWMgcG9wOiBib29sZWFuO1xuICBwdWJsaWMgbG9jYWxEYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBjdXJyZW50TmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcGF0aHF1ZXN0aW9uOiBudW1iZXI7XG4gIHB1YmxpYyBwZXJjZW50OiBudW1iZXI7XG4gIHB1YmxpYyBjb3VudDogbnVtYmVyO1xuICBwdWJsaWMgdGFGb2N1c091dDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgbm90VmFsaWRBY2NOdW06IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNwbENDQmFja0NsaWNrOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzdW1tYXJ5ID0gW107XG4gIHB1YmxpYyBsb2NhbFN1YlFNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBrZXlJbmRleDogbnVtYmVyID0gMDtcbiAgLy9wdWJsaWMgc3F1ZXM6IHN0cmluZztcbiAgcHVibGljIHNlbERhdGU6IGFueSA9IHt9O1xuICBwdWJsaWMgc2VsZWN0RGF0ZTogc3RyaW5nO1xuICBwcml2YXRlIHRvZGF5OiBEYXRlID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSBlbDogSFRNTEVsZW1lbnQ7XG4gIHB1YmxpYyBpbm5lcmh0bWw6IGFueTtcbiAgcHVibGljIHBvc3NpYmlsaXRpZXM6IGFueTtcbiAgcHVibGljIGlubmVyaHRtbDE6IGFueTtcbiAgcHVibGljIHN1bW1hcnlEYXRhID1bXTtcblxuICBwdWJsaWMgaG91cnM6IGFueVtdID0gW1xuICAgIFwiMDFcIixcbiAgICBcIjAyXCIsXG4gICAgXCIwM1wiLFxuICAgIFwiMDRcIixcbiAgICBcIjA1XCIsXG4gICAgXCIwNlwiLFxuICAgIFwiMDdcIixcbiAgICBcIjA4XCIsXG4gICAgXCIwOVwiLFxuICAgIFwiMTBcIixcbiAgICBcIjExXCIsXG4gICAgXCIxMlwiLFxuICBdO1xuXG4gIHB1YmxpYyBtaW51dGVzOiBzdHJpbmdbXSA9IFtcbiAgICBcIjAwXCIsXG4gICAgXCIwMVwiLFxuICAgIFwiMDJcIixcbiAgICBcIjAzXCIsXG4gICAgXCIwNFwiLFxuICAgIFwiMDVcIixcbiAgICBcIjA2XCIsXG4gICAgXCIwN1wiLFxuICAgIFwiMDhcIixcbiAgICBcIjA5XCIsXG4gICAgXCIxMFwiLFxuICAgIFwiMTFcIixcbiAgICBcIjEyXCIsXG4gICAgXCIxM1wiLFxuICAgIFwiMTRcIixcbiAgICBcIjE1XCIsXG4gICAgXCIxNlwiLFxuICAgIFwiMTdcIixcbiAgICBcIjE4XCIsXG4gICAgXCIxOVwiLFxuICAgIFwiMjBcIixcbiAgICBcIjIxXCIsXG4gICAgXCIyMlwiLFxuICAgIFwiMjNcIixcbiAgICBcIjI0XCIsXG4gICAgXCIyNVwiLFxuICAgIFwiMjZcIixcbiAgICBcIjI3XCIsXG4gICAgXCIyOFwiLFxuICAgIFwiMjlcIixcbiAgICBcIjMwXCIsXG4gICAgXCIzMVwiLFxuICAgIFwiMzJcIixcbiAgICBcIjMzXCIsXG4gICAgXCIzNFwiLFxuICAgIFwiMzVcIixcbiAgICBcIjM2XCIsXG4gICAgXCIzN1wiLFxuICAgIFwiMzhcIixcbiAgICBcIjM5XCIsXG4gICAgXCI0MFwiLFxuICAgIFwiNDFcIixcbiAgICBcIjQyXCIsXG4gICAgXCI0M1wiLFxuICAgIFwiNDRcIixcbiAgICBcIjQ1XCIsXG4gICAgXCI0NlwiLFxuICAgIFwiNDdcIixcbiAgICBcIjQ4XCIsXG4gICAgXCI0OVwiLFxuICAgIFwiNTBcIixcbiAgICBcIjUxXCIsXG4gICAgXCI1MlwiLFxuICAgIFwiNTNcIixcbiAgICBcIjU0XCIsXG4gICAgXCI1NVwiLFxuICAgIFwiNTZcIixcbiAgICBcIjU3XCIsXG4gICAgXCI1OFwiLFxuICAgIFwiNTlcIixcbiAgXTtcblxuICBwdWJsaWMgc2VsZWN0ZWRIb3VyOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgc2VsZWN0ZWRNaW51dGU6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBzZWxlY3RlZE1lcmlkaWVtOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgdmFsdWVOYW1lOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgdmFsdWVOYW1lMTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIGJvb2tGbGFnQWNjZXB0OiBzdHJpbmdbXTtcbiAgcHVibGljIHJlY29yZElkOiBzdHJpbmc7XG4gIHB1YmxpYyBjdXJyZW50UXVlc3Rpb25JZDogc3RyaW5nO1xuICBwdWJsaWMgc3Bpbm5lclR5cGU6IHN0cmluZztcbiAgcHVibGljIHNwaW5uZXJOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBuZXh0VmFsdWU6c3RyaW5nID0nJztcblxuICBzdGFydF9kYXRlPzogYW55O1xuXG4gIC8vc2VhcmNoIGNvbXBvbmVudFxuICBwdWJsaWMgdGVtcG9BZGRyZXNzOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgc2VsZWN0ZWRWYWx1ZTogc3RyaW5nO1xuICBwdWJsaWMgc2VsZWN0ZWRQb3N0YWxjb2RlOiBzdHJpbmc7XG4gIHB1YmxpYyBzZWxlY3RlZFByb3ZpbmNlOiBzdHJpbmc7XG4gIHB1YmxpYyBzZWxlY3RlZENpdHk6IHN0cmluZztcbiAgcHVibGljIHNlbGVjdGVkQXJlYTogc3RyaW5nO1xuICBwdWJsaWMgbG9jYWxhZGRyZXNzOiBhbnlbXSA9IFtdO1xuXG4gIHB1YmxpYyBhbGxBZGRyZXNzIDphbnkgW10gPSBbXTtcbiAgcHVibGljIFBvc3RhbENvZGU6c3RyaW5nO1xuICBwdWJsaWMgcGxhY2VzOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgcHJvdmluY2U6YW55W109W107XG4gXG4gIC8vIFJFUS0wMSBQUk9HUkVTUyBCQVJcbiAgcHVibGljIHByb2dyZXNzU3R5bGU6IHN0cmluZyA9IFwiMCVcIjtcbiAgcHVibGljIGFuc3dlckNvdW50OiBudW1iZXIgPSAwO1xuICBwdWJsaWMgaW5kZXhDb3VudDogbnVtYmVyID0gMDtcbiAgcHVibGljIGFkZEZsYWc6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHB1YmxpYyBteURhdGVQaWNrZXJPcHRpb25zOiBJTXlEcE9wdGlvbnMgPSB7fTtcbiAgaW5kaXZpZHVhbEJvb2tCdXR0b246IGJvb2xlYW47XG5cbiAgcHVibGljIGFsbElucHV0VmFsdWVzID0gW107IC8vIEhBIDAyRkVCMjQgVG8gc3RvcmUgYWxsIHRoZSBpbnB1dCB2YWx1ZXNcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZlNlcnZpY2U6IFNhbGVzZm9yY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlU2VydmljZTogQ2hhbmdlU2VydmljZSwgXG4gICAgcHJpdmF0ZSBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBzcGlubmVyOiBOZ3hTcGlubmVyU2VydmljZSxcbiAgICBwcml2YXRlIF9mb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIC8vcHJpdmF0ZSBkYlNlcnZpY2U6IE5neEluZGV4ZWREQlNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkZXZpY2VTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXG4gICAgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHVibGljIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZVxuICApIHtcbiAgICB0aGlzLnNwaW5uZXJOYW1lID0gXCJzcDFcIjtcbiAgICB0aGlzLnNwaW5uZXJUeXBlID0gXCJiYWxsLXNwaW4tY2xvY2t3aXNlXCI7XG4gIH1cblxuICAvLyBIQSAwMkZFQjI0IE9uIGRhdGUgY2hhbmdlIG5lZWQgdG8gc3RvcmUgdGhlIGNoYW5nZWQgdmFsdWUgc28gcGFzc2luZyB0aGUgcXVlc3Rpb25cbiAgb25EYXRlQ2hhbmdlZChldmVudDogSU15RGF0ZU1vZGVsLCBxdWVzOiBhbnkpIHtcbiAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIG9uRGF0ZUNoYW5nZWQnKTtcbiAgICAvL3RvIGNoYW5nZSB0aGUgYm9yZGVyIGNvbG9yXG4gICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYykge1xuICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBwcm9ncmVzc0JhciBjb25kJyk7XG4gICAgICB0aGlzLmlucFZhbHVlID1cbiAgICAgICAgZXZlbnQuZGF0ZS5kYXkgKyBcIi9cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi9cIiArIGV2ZW50LmRhdGUueWVhcjtcbiAgICAgIGlmKHRoaXMucXVlc3Rpb25JdGVtLlR5cGVfX2MgPT1cIkJvb2tcIil7XG4gICAgICAgIHRoaXMuc2VsZWN0RGF0ZSA9ICBldmVudC5kYXRlLmRheSArIFwiL1wiICsgZXZlbnQuZGF0ZS5tb250aCArIFwiL1wiICsgZXZlbnQuZGF0ZS55ZWFyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIEVMU0Ugb2YgcHJvZ3Jlc3NCYXIgY29uZCcpO1xuICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0uVHlwZV9fYyA9PVwiQm9va1wiKXtcbiAgICAgICAgdGhpcy5zZWxlY3REYXRlID0gIGV2ZW50LmRhdGUuZGF5ICsgXCItXCIgKyBldmVudC5kYXRlLm1vbnRoICsgXCItXCIgKyBldmVudC5kYXRlLnllYXI7XG4gICAgICB9XG4gICAgICB0aGlzLmlucFZhbHVlID1cbiAgICAgICAgZXZlbnQuZGF0ZS55ZWFyICsgXCItXCIgKyBldmVudC5kYXRlLm1vbnRoICsgXCItXCIgKyBldmVudC5kYXRlLmRheTtcbiAgICB9XG4gICAgY29uc3QgaHRtbEVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm15ZHBcIik7XG4gICAgaHRtbEVsZW1lbnRcbiAgICAgIC5pdGVtKDApXG4gICAgICAuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJib3JkZXItY29sb3I6Izg3YmUxYzt3aWR0aDoxMDAlXCIpO1xuICAgIHRoaXMuZGF0ZU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQsIGV2ZW50KTtcbiAgICBpZiAoXG4gICAgICBldmVudC5kYXRlLmRheSA9PT0gMCAmJlxuICAgICAgZXZlbnQuZGF0ZS5tb250aCA9PT0gMCAmJlxuICAgICAgZXZlbnQuZGF0ZS55ZWFyID09PSAwXG4gICAgKSB7XG4gICAgICB0aGlzLmRhdGVNYXAuZGVsZXRlKHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgICAgIHRoaXMuYW5zd2VyTWFwLmRlbGV0ZSh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XG4gICAgfVxuICAgIC8vY29uc29sZS5sb2coJ3RoaXMuaW5wVmFsdWUgPSAnK3RoaXMuaW5wVmFsdWUpO1xuICAgIC8vY29uc29sZS5sb2coJ3RoaXMuc2VsZWN0RGF0ZSA9ICcrdGhpcy5zZWxlY3REYXRlKTtcbiAgICAvLyBIQSAwMkZFQjI0IEFzc2lnbmluZyBpbnB1dCB2YWx1ZSB0byBxdWVzIGlucHV0XG4gICAgcXVlcy5pbnB1dCA9IHRoaXMuaW5wVmFsdWU7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmRldmljZUluZm8gPSB0aGlzLmRldmljZVNlcnZpY2UuZ2V0RGV2aWNlSW5mbygpO1xuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbXM6IFBhcmFtcykgPT4ge1xuICAgICAgaWYgKHBhcmFtc1snaWQnXSkge1xuICAgICAgICB0aGlzLmluZGl2aWR1YWxCb29rQnV0dG9uID0gdHJ1ZTtcbiAgICAgIH1lbHNlIGlmKHBhcmFtc1snYm9va2xldElkJ10pe1xuICAgICAgICB0aGlzLmluZGl2aWR1YWxCb29rQnV0dG9uID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgdGhpcy5zZWxlY3RlZE1lcmlkaWVtID0gXCJBTVwiO1xuICAgIHRoaXMucHJvY2Vzc1FCKCk7XG4gICAgLy9jb25zb2xlLmxvZyhsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYWRkcmVzcycpKTtcbiAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImFkZHJlc3NcIikpe1xuICAgICAgdGhpcy5sb2NhbGFkZHJlc3MgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYWRkcmVzc1wiKSk7XG4gICAgICAvL2NvbnNvbGUubG9nKCdMZW5ndGg9Jyt0aGlzLmxvY2FsYWRkcmVzcy5sZW5ndGgpO1xuICAgICAgdGhpcy5hbGxBZGRyZXNzPXRoaXMubG9jYWxhZGRyZXNzLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxhZGRyZXNzLmluZGV4T2YoaXRlbSkgPT0gaW5kZXgpe1xuICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG4gICAgICB9KTsgXG4gICAgICB0aGlzLmFsbEFkZHJlc3Muc29ydChmdW5jdGlvbihhLCBiKXtcbiAgICAgICAgcmV0dXJuIGEuemlwQ29kZSAtIGIuemlwQ29kZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmKHRoaXMuZGV2aWNlSW5mby5vcyA9PT0gJ2lPUycpe1xuICAgICAgICBsZXQgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihcImFkZHJlc3NEQlwiKTtcbiAgICAgICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0TmV3ID0gZXZlbnQudGFyZ2V0IGFzIElEQlJlcXVlc3Q7XG4gICAgICAgICAgbGV0IGRiTmV3ID0gdGFyZ2V0TmV3LnJlc3VsdDtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0TmV3ID0gZGJOZXcudHJhbnNhY3Rpb24oJ2FkZHJlc3NUYWJsZScpXG4gICAgICAgICAgICAgICAgLm9iamVjdFN0b3JlKCdhZGRyZXNzVGFibGUnKVxuICAgICAgICAgICAgICAgIC5nZXQoMSk7XG4gICAgICAgICAgcmVxdWVzdE5ldy5vbnN1Y2Nlc3MgPSAoKT0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdGVtcFZhciA9IHJlcXVlc3ROZXcucmVzdWx0O1xuICAgICAgICAgICAgICB0aGlzLmxvY2FsYWRkcmVzcyA9IEpTT04ucGFyc2UodGVtcFZhci53aG9sZUFkZHJlc3NTdHJpbmcpO1xuICAgICAgICAgICAgICB0aGlzLmFsbEFkZHJlc3M9dGhpcy5sb2NhbGFkZHJlc3MuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvY2FsYWRkcmVzcy5pbmRleE9mKGl0ZW0pID09IGluZGV4KXtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7IFxuICAgICAgICAgICAgICB0aGlzLmFsbEFkZHJlc3Muc29ydChmdW5jdGlvbihhLCBiKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS56aXBDb2RlIC0gYi56aXBDb2RlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIGNvbnNvbGUubG9nKCdpbnNpZGUgUXVlc3Rpb25uYWlyZSBuZ09uQ2hhbmdlcycpO1xuICAgIC8vIE1SIDMwSkFOMjQgVW5jb21tZW50ZWQgYmVsb3cgbGluZXNcbiAgICB0aGlzLnByb2Nlc3NRQigpO1xuICB9XG5cbiAgZGF0ZV9UaW1lTWFwKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRob3VyTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCwgdGhpcy5zZWxlY3RlZEhvdXIpO1xuICAgIHRoaXMuc2VsZWN0ZWRtaW51dGVNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLCB0aGlzLnNlbGVjdGVkTWludXRlKTtcbiAgfVxuXG4gIGRheSgpIHtcbiAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMgPSB7XG4gICAgICBkYXRlRm9ybWF0OiBcImRkLm1tLnl5eXlcIixcbiAgICAgIHN1bkhpZ2hsaWdodDogZmFsc2UsXG4gICAgICBkaXNhYmxlRGF0ZVJhbmdlczogW10sXG4gICAgICBzaG93Q2xlYXJEYXRlQnRuOiBmYWxzZSxcbiAgICAgIGRpc2FibGVTaW5jZToge1xuICAgICAgICB5ZWFyOiAwLFxuICAgICAgICBtb250aDogMCxcbiAgICAgICAgZGF5OiAwLFxuICAgICAgfSxcbiAgICAgIGRpc2FibGVVbnRpbDoge1xuICAgICAgICB5ZWFyOiAwLFxuICAgICAgICBtb250aDogMCxcbiAgICAgICAgZGF5OiAwLFxuICAgICAgfSxcbiAgICAgIHNob3dUb2RheUJ0bjogZmFsc2UsXG4gICAgICBkYXlMYWJlbHM6IHtcbiAgICAgICAgc3U6IFwiRG9tXCIsXG4gICAgICAgIG1vOiBcIkx1blwiLFxuICAgICAgICB0dTogXCJNYXJcIixcbiAgICAgICAgd2U6IFwiTWnDqVwiLFxuICAgICAgICB0aDogXCJKdWVcIixcbiAgICAgICAgZnI6IFwiVmllXCIsXG4gICAgICAgIHNhOiBcIlPDoWJcIixcbiAgICAgIH0sXG4gICAgICBtb250aExhYmVsczoge1xuICAgICAgICAxOiBcIkVuZVwiLFxuICAgICAgICAyOiBcIkZlYlwiLFxuICAgICAgICAzOiBcIk1hclwiLFxuICAgICAgICA0OiBcIkFiclwiLFxuICAgICAgICA1OiBcIk1heW9cIixcbiAgICAgICAgNjogXCJKdW5cIixcbiAgICAgICAgNzogXCJKdWxcIixcbiAgICAgICAgODogXCJBZ29cIixcbiAgICAgICAgOTogXCJTZXBcIixcbiAgICAgICAgMTA6IFwiT2N0XCIsXG4gICAgICAgIDExOiBcIk5vdlwiLFxuICAgICAgICAxMjogXCJEaWNcIixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGNoYW5nZSgpIHtcbiAgICBjb25zdCBodG1sRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibXlkcFwiKTtcbiAgICBpZiAodGhpcy5zZWxEYXRlID09PSBudWxsIHx8IHRoaXMuaW5wVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICBodG1sRWxlbWVudFxuICAgICAgICAuaXRlbSgwKVxuICAgICAgICAuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJ3aWR0aDoxMDAlO2JvcmRlcjogMXB4IHNvbGlkIHJlZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaHRtbEVsZW1lbnRcbiAgICAgICAgLml0ZW0oMClcbiAgICAgICAgLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiYm9yZGVyOiAxcHggc29saWQgIzg3YmUxYyA7d2lkdGg6MTAwJVwiKTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzUUIoKSB7XG4gICAgY29uc29sZS5sb2coJ1Byb2Nlc3NRQicpO1xuICAgIC8vdGhpcy5xYkl0ZW1cbiAgICBjb25zb2xlLmxvZyh0aGlzLnFiSWQpO1xuICAgIC8vY29uc29sZS5sb2coJ1ZlcnNpb24gaW4gcHJvY2VzcyBpcyA4YmYxMWVmYTdmOTFhMzkxZDk1N2JmNmI1MDc4ZWRjN2U2NTZiNjdjJyk7XG4gICAgaWYgKHRoaXMucWJJZCkge1xuICAgICAgaWYgKHRoaXMucWJJZC5sZW5ndGggPT0gMTgpIHtcbiAgICAgICAgdGhpcy5yZWFkUXVlc3Rpb25Cb29rKHRoaXMucWJJZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGVsc2UgcGFydCcpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdTZXR0aW5nIHRoZSBRdWVzdGlvbiBEaXJlY3RseSBmb3IgdGVzdGluZycpO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbSA9IERUUVVFU1RJT047XG4gICAgICAgIHRoaXMucWJJdGVtID0gVEVTVFFCO1xuICAgICAgICB0aGlzLnByb2Nlc3NRdWVzdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRyaW1MYXN0RHVtbXkoaW5wdXQ6IHN0cmluZykge1xuICAgIHJldHVybiAoaW5wdXQgPSBpbnB1dC5zdWJzdHJpbmcoMCwgaW5wdXQubGVuZ3RoIC0gNikpO1xuICB9XG5cbiAgZ2V0UHJvcGVyVGltZShkZWY6IHN0cmluZywgaW5wdXQ6IHN0cmluZykge1xuICAgIHJldHVybiBpbnB1dCA9PT0gXCJcIiA/IGRlZiA6IGlucHV0O1xuICB9XG5cbiAgLy9TdW1tYXJ5IFF1ZXN0aW9uIENsaWNrYWJsZSBMb2dpY1xuICBoYW5kbGVFZGl0Q2xpY2sodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuYmFja2ljb24gPSBmYWxzZTtcbiAgICBpZiAodGhpcy5hYkl0ZW0/LlN0YXR1c19fYyA9PSBcIlBlbmRpbmdcIikge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5yZWFkUXVlc3Rpb24odmFsdWUpO1xuICAgICAgLy9jb25zb2xlLmxvZygnIGluIHNpZGUgc3VtbWFyeW9wZW4nKyB0aGlzLnN1bW1hcnkubGVuZ3RoKTtcblxuICAgICAgLy9Bc3NpZ24gcXVlc3Rpb24gc3RhY2sgbGVuZ3RoIGZyb20gc3VtbWFyeSBwYXJ0XG4gICAgICB2YXIgYXJyYXlMZW5ndGggPSB0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgdmFyIGxlbmd0aFZhbHVlID0gdGhpcy5xdWVzdGlvblN0YWNrLmluZGV4T2YodmFsdWUpO1xuXG4gICAgICBmb3IgKGxldCBpID0gYXJyYXlMZW5ndGg7IGkgPiBsZW5ndGhWYWx1ZTsgaS0tKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgPT09IHRydWUpIHtcbiAgICAgICAgdmFyIGFycmF5TGVuZ3RoMSA9IHRoaXMucXVlc3Rpb25OYW1lLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaiA9IGFycmF5TGVuZ3RoMTsgaiA+IGxlbmd0aFZhbHVlOyBqLS0pIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zdW1tYXJ5ID0gW107XG4gICAgICB0aGlzLnN1bW1hcnlEYXRhID0gW107XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTmV4dENsaWNrKCkge1xuICAgIHRoaXMuYmFja0J1dHRvbkZsYWcgPSBmYWxzZTtcbiAgICB0aGlzLkFuc3dlclNhdmUoKTtcbiAgfVxuXG4gIEFuc3dlclNhdmUoKXtcbiAgICAvL3RoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICBpZiAodGhpcy5jdXJyZW50UXVlc3Rpb25JZCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcXVlc3Rpb25UeHQ9Jyc7XG4gICAgdGhpcy5jbGVhckVycm9yKCk7XG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLk5leHRfVHJhY2tpbmdfSURfX2MpO1xuICAgIHRoaXMucmVjb3JkSWQgPSBudWxsO1xuICAgIHZhciBjUXVlc3Rpb246IFF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uKCk7XG4gICAgY1F1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkl0ZW07XG4gICAgLy8gTVIgMzBKQU4yNCAtIEFkZGVkIENvbmRpdGlvbiBmb3IgdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yIChCb29rIFF1ZXN0aW9uIGFuZCBOb24tQm9vaylcbiAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFuIGFycmF5IG9mIG9iamVjdHMgdG8gc3RvcmUgdGhlIHZhbHVlc1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMubGVuZ3RoO2krKykge1xuICAgICAgICAgIGlmKHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzW2ldLlF1ZXN0aW9uX1RleHRfX2Mpe1xuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uVGV4dCA9IHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzW2ldLlF1ZXN0aW9uX1RleHRfX2MucmVwbGFjZSgvPFtePl0rPi9nLCAnJyk7IC8vIFJlbW92ZSBIVE1MIHRhZ3MgZnJvbSB0aGUgUXVlc3Rpb25fVGV4dF9fYyB2YWx1ZVxuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcXVlc3Rpb25UZXh0ID0gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHNbaV0uaW5wdXQ7XG4gICAgICAgICAgY29uc3Qgb2JqID0geyBbcXVlc3Rpb25UZXh0XTogaW5wdXQgfTsgLy8gQ3JlYXRlIGFuIG9iamVjdCB3aXRoIHRoZSBxdWVzdGlvblRleHQgYXMgdGhlIGtleSBhbmQgdGhlIGlucHV0IGFzIHRoZSB2YWx1ZVxuICAgICAgICAgIHRoaXMuc3VtbWFyeURhdGEucHVzaChvYmopOyAvLyBBZGQgdGhlIG9iamVjdCB0byB0aGUgZGF0YSBhcnJheVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBxdWVzdGlvblRleHQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9UZXh0X19jLnJlcGxhY2UoLzxbXj5dKz4vZywgJycpO1xuICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgIGNvbnN0IG9iaiA9IHsgW3F1ZXN0aW9uVGV4dF06IGlucHV0IH07IC8vIENyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgcXVlc3Rpb25UZXh0IGFzIHRoZSBrZXkgYW5kIHRoZSBpbnB1dCBhcyB0aGUgdmFsdWVcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEucHVzaChvYmopOyAvLyBBZGQgdGhlIG9iamVjdCB0byB0aGUgZGF0YSBhcnJheVxuICAgIH1cblxuICAgICAgICAgdmFyIHR5cCA9IGNRdWVzdGlvbi5UeXBlX19jO1xuICAgIC8vIHRoaXMuc3F1ZXMgKz0gY1F1ZXN0aW9uLlF1ZXN0aW9uX19jICsgJ0BAIyMkJCc7XG4gICAgdmFyIHF1ZXNWYWx1ZSA9IGNRdWVzdGlvbi5RdWVzdGlvbl9UZXh0X19jO1xuICAgIHZhciBtYWlsZm9ybWF0ID1cbiAgICAgIFwiXlteLl1bYS16QS1aMC05ISMkJSYnKistLz0/Xl9ge3x9fl0rW14uXUBbXi1dW2EtekEtWjAtOS4tXStbXi1dLlthLXpBLVpdezIsfSRcIjtcblxuICAgIC8vIFByb2Nlc3MgSW5wdXRzXG4gICAgaWYgKHRoaXMuY2hlY2tib3hGbGFnKSB7XG4gICAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcbiAgICAgIC8vIFNhdmUgYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zIGluIHRoZSBpbnBWYWx1ZVxuICAgICAgZm9yICh2YXIgb3Ygb2YgdGhpcy5vcHRpb25WYWx1ZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmNoZWNrZWQpKSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gb3YuVmFsdWVfX2MgKyBcIkBAIyMkJFwiO1xuICAgICAgICB0aGlzLnJlY29yZElkID0gb3YuTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnRyaW1MYXN0RHVtbXkodGhpcy5pbnBWYWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmVtYWlsRmxhZykge1xuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUgJiYgdGhpcy5pbnBWYWx1ZS5tYXRjaChtYWlsZm9ybWF0KSkge1xuICAgICAgICB0aGlzLnJlY29yZElkID0gdGhpcy5xdWVzdGlvbkl0ZW0uTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmFscGhhbnVtZXJpY0ZsYWcpIHtcbiAgICAgIHZhciBpc05vdFZhbGlkQWNjTnVtID0gdGhpcy5pc05vdFZhbGlkQWNjTnVtYmVyKHRoaXMuaW5wVmFsdWUpO1xuICAgICAgaWYgKGlzTm90VmFsaWRBY2NOdW0pIHtcbiAgICAgICAgdGhpcy5ub3RWYWxpZEFjY051bSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLm5vdFZhbGlkQWNjTnVtID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLm51bWJlckZsYWcpIHtcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuYm9va0ZsYWcpIHtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgdmFyIGhhc01pc3NpbmdJbnB1dCA9IGZhbHNlO1xuICAgICAgZm9yICh2YXIgaXRlbSBvZiB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcykge1xuICAgICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgXG4gICAgICAgIGlmKGl0ZW0uVHlwZV9fYyA9PSBcIkRhdGVcIiB8fCBpdGVtLlR5cGVfX2MgPT0gXCJUaW1lXCIpIHtcbiAgICAgICAgICAvL3RoaXMgb25lXG4gICAgICAgICAgdGhpcy5jaGFuZ2UoKTtcbiAgICAgICAgICAgIGlmKGl0ZW0uVHlwZV9fYyA9PSBcIkRhdGVcIil7XG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgZGF0ZSB0eXBlIGNvbmQgPSAnK3RoaXMuc2VsZWN0RGF0ZSk7XG4gICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnNlbGVjdERhdGU7XG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZSlcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnNlbGVjdERhdGUpXG4gICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgIGlmKGl0ZW0uVHlwZV9fYyA9PSBcIlRpbWVcIil7XG4gICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkSG91cit0aGlzLnNlbGVjdGVkTWVyaWRpZW0rdGhpcy5zZWxlY3RlZE1pbnV0ZSlcbiAgICAgICAgICAgICBcbiAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uWDI0X0hvdXJzX19jID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9XG4gICAgICAgICAgICAgICAgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJQTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyICE9IFwiMTJcIlxuICAgICAgICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpICsgMTJcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZEhvdXIpICtcbiAgICAgICAgICAgICAgICBcIjpcIiArXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIFBNXCI7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiQU1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciA9PT0gXCIxMlwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBcIjAwXCIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGUgKyBcIiBBTVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MpIHtcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNlbGVjdERhdGUpe1xuICAgICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0RGF0ZStcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5zZWxlY3REYXRlKXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnNlbGVjdERhdGUrXCIgXCIrdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gXCIgXCIrdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uWDI0X0hvdXJzX19jID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID1cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZTtcbiAgICAgICAgICAgICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYykge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSEEgMzEtSkFOLTI0IFJlbW92ZWQgdGhlIHNlbGVjdEhvdXIgYW5kIHNlbGVjdE1pbnV0ZSBjb25kaXRpb25cbiAgICAgICAgICBpZiAodGhpcy5zZWxEYXRlID09PSBudWxsIHx8IHRoaXMuc2VsRGF0ZSA9PT0gdW5kZWZpbmVkIHx8ICF0aGlzLmlucFZhbHVlIHx8ICF0aGlzLnNlbGVjdERhdGUpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgbnVsbCBjb25kaXRpb24gb2YgaW5wdXQnKTtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgY29uc3QgaHRtbEVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm15ZHBcIik7XG4gICAgICAgICAgICBodG1sRWxlbWVudFxuICAgICAgICAgICAgICAuaXRlbSgwKVxuICAgICAgICAgICAgICAuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJ3aWR0aDoxMDAlO2JvcmRlci1ib3R0b206IDFweCBzb2xpZCByZWQgIWltcG9ydGFudDtcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZGF0ZV9UaW1lTWFwKCk7XG4gICAgICB9XG4gICAgICAvLyBIQSAzMS1KQU4tMjQgQWRkZWQgdGV4dCBlcnJvciBjb25kaXRpb25cbiAgICAgIGlmKGl0ZW0uVHlwZV9fYz09IFwiVGV4dFwiKXtcbiAgICAgICAgaWYgKCFpdGVtLmlucHV0KSB7XG4gICAgICAgICAgaXRlbS5pbnB1dCA9IFwiXCI7XG4gICAgICAgICAgaXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoaXMuaW5wVmFsdWUgPSBpdGVtLmlucHV0OyA2MzRcbiAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIWl0ZW0uSXNfT3B0aW9uYWxfX2MgJiZcbiAgICAgICAgLy8gICgoaXRlbS5UeXBlX19jICE9IFwiRmlsZVwiICYmICFpdGVtLmlucHV0ICYmIGl0ZW0uVHlwZV9fYyAhPSAnRGF0ZScgJiYgaXRlbS5UeXBlX19jICE9ICdUaW1lJykgfHxcbiAgICAgICAgIC8vICAgKGl0ZW0uVHlwZV9fYyA9PSBcIkZpbGVcIiAmJiB0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA9PSAwKSlcbiAgICAgICAgIChpdGVtLlR5cGVfX2MgPT0gXCJGaWxlXCIgJiYgdGhpcy5hdHRhY2htZW50cy5sZW5ndGggPT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtLlR5cGVfX2MgPT0gXCJSYWRpb1wiKSB7XG4gICAgICAgICAgaWYgKCFpdGVtLmlucHV0KSB7XG4gICAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0uVHlwZV9fYyA9PSBcIkRyb3Bkb3duXCIpIHtcbiAgICAgICAgICBpZiAoIWl0ZW0uaW5wdXQpIHtcbiAgICAgICAgICAgIGl0ZW0uaW5wdXQgPSBcIlwiO1xuICAgICAgICAgICAgaXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtLlR5cGVfX2MgPT0gXCJFbWFpbFwiKSB7XG4gICAgICAgICAgaWYgKGl0ZW0uaW5wdXQgJiYgaXRlbS5pbnB1dC5tYXRjaChtYWlsZm9ybWF0KSkge1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0uVHlwZV9fYyA9PSBcIkZpbGVcIiAmJiB0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50SXRlbSBvZiB0aGlzLmF0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlICs9XG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLmF0dGFjaG1lbnRJZCArXG4gICAgICAgICAgICAgIFwiQCMkXCIgK1xuICAgICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50TmFtZSArXG4gICAgICAgICAgICAgIFwiLFwiO1xuICAgICAgICAgICAgaWYgKGl0ZW0uaW5wdXQgPT0gdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZScgKyByZWNvcmRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHRoaXMuYXR0YWNobWVudHMgPSBbXTtcbiAgICAgICAgfSAvL2l0ZW0uaW5wdXQgPT0gdGhpcy5pbnBWYWx1ZTtcblxuICAgICAgICB0aGlzLmlucFZhbHVlICs9IChpdGVtLmlucHV0ICE9IHVuZGVmaW5lZCA/IGl0ZW0uaW5wdXQgOiBcIlwiKSArIFwiQEAjIyQkXCI7XG4gICAgICAgIHF1ZXN0aW9uVHh0ICs9IGl0ZW0uUXVlc3Rpb25fX2MgKyBcIkBAIyMkJFwiO1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgYm9vazEnICsgdGhpcy5pbnBWYWx1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChoYXNNaXNzaW5nSW5wdXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcbiAgICAgIHF1ZXN0aW9uVHh0ID0gcXVlc3Rpb25UeHQgPyB0aGlzLnRyaW1MYXN0RHVtbXkocXVlc3Rpb25UeHQpIDogcXVlc3Rpb25UeHQ7XG4gICAgfSBcbiAgICBlbHNlIGlmICh0aGlzLmxpc3RGbGFnKSB7XG4gICAgICB0aGlzLmlucFZhbHVlID0gJyc7XG4gICAgICB2YXIgaGFzTWlzc2luZ0lucHV0ID0gZmFsc2U7XG4gICAgICBpZih0aGlzLmxvY2FsU3ViUU1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uSWQpKXtcbiAgICAgICAgdGhpcy5zdWJBbnNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIGZvciAodmFyIGxvY2FsUXVlcyBvZiB0aGlzLmxvY2FsU3ViUU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpKSB7XG4gICAgICAgICAgICBpZighbG9jYWxRdWVzLmlucHV0KSB7XG4gICAgICAgICAgICAgIGxvY2FsUXVlcy5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBpZighdGhpcy5zdWJBbnNNYXAuaGFzKGxvY2FsUXVlcy5JZCkpe1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBhbnMgbWFwJylcbiAgICAgICAgICAgIHRoaXMuc3ViQW5zTWFwLnNldChsb2NhbFF1ZXMuSWQsbG9jYWxRdWVzLmlucHV0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBhbnMgbWFwIGVsc2UnKVxuICAgICAgICAgICAgdGhpcy5zdWJBbnNNYXAuc2V0KGxvY2FsUXVlcy5JZCx0aGlzLnN1YkFuc01hcC5nZXQobG9jYWxRdWVzLklkKSArICckJEBAIyMnK2xvY2FsUXVlcy5pbnB1dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc01pc3NpbmdJbnB1dCkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ2ZpbGUgdHdvJylcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWJBbnNNYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgTWFwJyApO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICAgICAgICB0aGlzLmlucFZhbHVlICs9ICh2YWx1ZSAhPSB1bmRlZmluZWQgPyB2YWx1ZSA6ICcnKSArICdAQCMjJCQnO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5kcm9wZG93bkZsYWcpIHtcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIi5cIjtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmR0RmxhZyAmJiB0aGlzLmRhdGVGbGFnICYmIHRoaXMudGltZUZsYWcpIHtcbiAgICAgIC8vdGhpcyBvbmVcbiAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHRoaXMuZ2V0UHJvcGVyVGltZShcIjEyXCIsIHRoaXMuc2VsZWN0ZWRIb3VyKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IHRoaXMuZ2V0UHJvcGVyVGltZShcIjAwXCIsIHRoaXMuc2VsZWN0ZWRNaW51dGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPSB0aGlzLmdldFByb3BlclRpbWUoXCJBTVwiLCB0aGlzLnNlbGVjdGVkTWVyaWRpZW0pO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuaW5wVmFsdWUubGVuZ3RoKTtcblxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uWDI0X0hvdXJzX19jID09PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID1cbiAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiUE1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciAhPSBcIjEyXCJcbiAgICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpICsgMTJcbiAgICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkSG91cikgK1xuICAgICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIFBNXCI7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJBTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyID09PSBcIjEyXCIpIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gXCIwMFwiICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgQU1cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYykge1xuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyBcIiBcIiArIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZSArIFwiVFwiICsgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZTtcbiAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jKSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZSArIFwiIFwiICsgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCJUXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYykge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJhbnMgPT4gXCIgKyB0aGlzLmlucFZhbHVlKTtcbiAgICAgICAgICB2YXIgZGF0ZTE6IGFueSA9IHRoaXMuaW5wVmFsdWUuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgIGRhdGUxID0gZGF0ZTFbMF0uc3BsaXQoXCIvXCIpO1xuICAgICAgICAgIGRhdGUxID0gW2RhdGUxWzJdLCBkYXRlMVsxXSwgZGF0ZTFbMF1dLmpvaW4oXCItXCIpO1xuICAgICAgICAgIGRhdGUxID0gbmV3IERhdGUoZGF0ZTEpO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coZGF0ZTEpXG4gICAgICAgICAgdmFyIGRhdGUyOiBhbnkgPSB0aGlzLmluc3VyYW5jZVN0YXJ0RGF0ZS5zcGxpdChcIiBcIik7XG4gICAgICAgICAgZGF0ZTIgPSBuZXcgRGF0ZShkYXRlMlswXSk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhkYXRlMik7XG4gICAgICAgICAgaWYgKGRhdGUxIDwgZGF0ZTIpIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IuZXJyb3JNc2cgPVxuICAgICAgICAgICAgICBcIk5vIGVzIHBvc2libGUgZGFyIGRlIGFsdGEgbGEgcmVjbGFtYWNpw7NuIGRlYmlkbyBhIHF1ZSBsYSBmZWNoYSBkZWwgaW5jaWRlbnRlIGVzIGFudGVyaW9yIGEgbGEgZmVjaGEgZGUgY29udHJhdGFjacOzbiBkZSBsYSBww7NsaXphXCI7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUnKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZWxEYXRlID09PSBudWxsIHx8ICF0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZV9UaW1lTWFwKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnRpbWVGbGFnICYmIHRoaXMuZHRGbGFnICYmICF0aGlzLmRhdGVGbGFnKSB7XG4gICAgICB0aGlzLmRhdGVfVGltZU1hcCgpO1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9XG4gICAgICAgICAgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJQTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyICE9IFwiMTJcIlxuICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpICsgMTJcbiAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZEhvdXIpICtcbiAgICAgICAgICBcIjpcIiArXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnNlbGVjdGVkSG91ciArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlucFZhbHVlLmxlbmd0aCA8IDUpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuZGF0ZUZsYWcgJiYgdGhpcy5kdEZsYWcgJiYgIXRoaXMudGltZUZsYWcpIHtcbiAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZS5sZW5ndGggPCA3IHx8IHRoaXMuc2VsRGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5maWxlRmxhZykge1xuICAgICAgLy9jb25zb2xlLmxvZygnZm91cicpXG4gICAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcbiAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudEl0ZW0gb2YgdGhpcy5hdHRhY2htZW50cykge1xuICAgICAgICAgIHRoaXMuaW5wVmFsdWUgKz1cbiAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLmF0dGFjaG1lbnRJZCArXG4gICAgICAgICAgICBcIkAjJFwiICtcbiAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLmF0dGFjaG1lbnROYW1lICtcbiAgICAgICAgICAgIFwiLFwiO1xuICAgICAgICB9XG4gICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmaWxlc3NzJyArIHRoaXMuaW5wVmFsdWUpO1xuICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZS5zdWJzdHIoMCwgdGhpcy5pbnBWYWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHRoZSBhbnN3ZXIgYmVmb3JlIHNhdmluZyB0byB0aGUgREJcbiAgICBpZiAoIXRoaXMucXVlc3Rpb25JdGVtLklzX09wdGlvbmFsX19jICYmICF0aGlzLmlucFZhbHVlKSB7XG4gICAgICAvLyBTaG93IGVycm9yIHRoYXQgdGhlIHF1ZXN0aW9uIG11c3QgYmUgYW5zd2VyZWRcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBTYXZlIHRoZSBBbnN3ZXIgaW4gdGhlIERCXG4gICAgdGhpcy5hbnN3ZXJXcmFwID0gbmV3IEFuc3dlcldyYXBwZXIoKTtcbiAgICB0aGlzLmFuc3dlcldyYXAuYWJJZCA9IHRoaXMuYWJJdGVtLklkO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5xdWVzSWQgPSBjUXVlc3Rpb24uSWQ7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLnF1ZXNWYWx1ZSA9IHF1ZXNWYWx1ZTtcbiAgICB0aGlzLmFuc3dlcldyYXAucVR5cCA9IHR5cDtcbiAgICAvLyBIQSAwMkZFQjI0IFRvIGRpc3BsYXkgdGhlIHZhbHVlcyBpbiBzdW1tYXJ5IHVzaW5nIHRoaXNcbiAgICB0aGlzLmFsbElucHV0VmFsdWVzID0gW107XG4gICAgdGhpcy5zdWJRdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIHZhciBpbnB1dFZhbHVlID0ge307XG4gICAgICBpbnB1dFZhbHVlWydJZCddID0gZWxlbWVudD8uSWQ7XG4gICAgICBpbnB1dFZhbHVlWydUeXBlX19jJ10gPSBlbGVtZW50Py5UeXBlX19jO1xuICAgICAgaW5wdXRWYWx1ZVsnUmVmZXJlbmNlX0ZpZWxkX19jJ10gPSBlbGVtZW50Py5SZWZlcmVuY2VfRmllbGRfX2M7XG4gICAgICBpbnB1dFZhbHVlWydRdWVzdGlvbl9UZXh0X19jJ10gPSBlbGVtZW50Py5RdWVzdGlvbl9UZXh0X19jO1xuICAgICAgaW5wdXRWYWx1ZVsnaW5wdXQnXSA9IGVsZW1lbnQ/LmlucHV0O1xuICAgICAgaW5wdXRWYWx1ZSA/IHRoaXMuYWxsSW5wdXRWYWx1ZXMucHVzaChpbnB1dFZhbHVlKSA6IHRoaXMuYWxsSW5wdXRWYWx1ZXM7XG4gICAgfSk7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLm15VmFsID0gdGhpcy5hbGxJbnB1dFZhbHVlcztcbiAgICB0aGlzLmFuc3dlcldyYXAuYW5zVmFsdWUgPSB0aGlzLmlucFZhbHVlO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5ncm91cFRleHQgPSBjUXVlc3Rpb24uR3JvdXBfX2M7XG4gICAgY29uc29sZS5sb2coJ3RoaXMuYW5zd2VyV3JhcC5xVHlwJyx0aGlzLmFuc3dlcldyYXAucVR5cCk7XG4gICBpZih0aGlzLmFuc3dlcldyYXAucVR5cCA9PSBcIkFscGhhbnVtZXJpY1wiKXtcbiAgICAgIHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSA9ICdFUycrIHRoaXMuaW5wVmFsdWU7XG4gICAgICAvLyBjb25zb2xlLmxvZygnQmFuayBjb25kaXRpb24nKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSk7XG4gICAgfVxuICAgIC8qaWYgKGNRdWVzdGlvbi5UeXBlX19jID09ICdCb29rJyl7XG4gICAgZm9yICh2YXIgcWIgb2YgY1F1ZXN0aW9uLlF1ZXN0aW9uc19fci5yZWNvcmRzKXtcbiAgICAgIC8vY29uc29sZS5sb2cocWIuUXVlc3Rpb25fX2MrJyoqKionK1wiQEAjIyQkXCIpXG4gICAgfSBcbiAgfSovXG4gICAgLy90aGlzLmFuc3dlcldyYXAuc3F1ZXNWYWx1ZSA9IGNRdWVzdGlvbi5RdWVzdGlvbl9fYztcbiAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9IHRoaXMuaW5wVmFsdWU7XG4gICAgLy8gZW1pdCB0aGUgY3VycmVudCBxdWVzdGlvbiB3aXRoIGlucHV0IHRvIHBhcmVudFxuICAgIHRoaXMuaGFuZGxlUXVlc3Rpb24uZW1pdCh0aGlzLnF1ZXN0aW9uSXRlbSk7XG4gICAgY29uc29sZS5sb2coJ3F1ZXN0aW9uSXRlbS0tPicpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtKTtcbiAgICB0aGlzLmFuc3dlcldyYXAuc3F1ZXNWYWx1ZSA9IHF1ZXN0aW9uVHh0ID8gcXVlc3Rpb25UeHQgOiBjUXVlc3Rpb24uUXVlc3Rpb25fX2M7XG4gICAgdGhpcy5zYXZlQW5zd2VyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHZhciBjUXVlc3Rpb246IFF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uKCk7XG4gICAgY1F1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkl0ZW07XG4gICAgdmFyIHR5cCA9IGNRdWVzdGlvbi5UeXBlX19jO1xuICAgIC8vIElmIG5vIGVycm9yIHRoZW4gbW92ZSB0byBuZXh0IHN0ZXBzXG4gICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLmVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5xdWVzdGlvblN0YWNrLnB1c2goY1F1ZXN0aW9uLklkKTtcbiAgICAvLyAgdGhpcy5xdWVzdGlvbk5hbWUucHVzaChjUXVlc3Rpb24uTmFtZSk7XG4gICAgXG4gICAgLy8gQ09ORElUSU9OQUwgdnMgT1BUSU9OT05MWSAmIFVOQ09ORElUSU9OQUxcbiAgICAvLyBIQSAzMS1KQU4tMjQgQWRkZWQgdGVybmFyeSBldmVuIGluIGVsc2UgY29uZGl0aW9ucyBiZWxvd1xuICAgIGlmIChjUXVlc3Rpb24/LlJlY29yZFR5cGU/Lk5hbWUgPT0gXCJDT05ESVRJT05BTFwiKSB7XG4gICAgICBmb3IgKHZhciBjT3B0IG9mIGNRdWVzdGlvbi5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHMpIHtcbiAgICAgICAgLy8gUmFkaW8gLyBEYXRhXG4gICAgICAgIC8vY29uc29sZS5sb2coJ09wdGlvbiA9PiAnICsgY09wdC5WYWx1ZV9fYyArICcgbWF0Y2hpbmcgd2l0aCAnICsgYW5zVmFsKTtcbiAgICAgICAgaWYgKGNPcHQuVmFsdWVfX2MgPT0gdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ01hdGNoIEZvdW5kIHVzaW5nICcgKyBjT3B0Lk5leHRfUXVlc3Rpb25fX2MpO1xuICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjT3B0Lk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnY29uZGl0aW9uYWwgcmVjb3JkIGlkJysgdGhpcy5yZWNvcmRJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIENvdWxkIGJlIG9mIHR5cGUgRGF0YSBhbmQgZXhpc3RpbmcgdmFsdWVcbiAgICAgIGlmICh0aGlzLnJlY29yZElkICYmIHR5cCA9PSBcIkRhdGFcIikge1xuICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjUXVlc3Rpb24/LlJlY29yZFR5cGU/Lk5hbWUgPT0gXCJPUFRJT05PTkxZXCIpIHtcbiAgICAgIC8vICBPUFRJT05PTkxZIGxvZ2ljXG4gICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7XG4gICAgfSBlbHNlIGlmIChjUXVlc3Rpb24/LlJlY29yZFR5cGU/Lk5hbWUgPT0gXCJVTkNPTkRJVElPTkFMXCIpIHtcbiAgICAgIC8vVW5jb25kaXRpb25hbCAgbG9naWNcbiAgICAgIC8vY29uc29sZS5sb2coXCJpbnNpZGUgdW5jb25kaXRpb25hbFwiKTtcbiAgICAgIC8vaW5zaWRlIEJvb2sgVHlwZVxuICAgICAgaWYgKGNRdWVzdGlvbi5UeXBlX19jID09IFwiQm9va1wiICYmIGNRdWVzdGlvbi5RdWVzdGlvbl9Ob19fYyAhPSc2Jykge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiaW5zaWRlIGJvb2tcIik7XG4gICAgICAgIGZvciAobGV0IG9wdCBvZiBjUXVlc3Rpb24uUXVlc3Rpb25zX19yLnJlY29yZHMpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKG9wdC5UeXBlX19jKTtcbiAgICAgICAgICBpZiAob3B0LlR5cGVfX2MgPT0gXCJEcm9wZG93blwiIHx8IG9wdC5UeXBlX19jID09IFwiUmFkaW9cIikge1xuICAgICAgICAgICAgZm9yICh2YXIgb3B0MSBvZiBvcHQuUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZU5hbWUgPT0gb3B0MS5WYWx1ZV9fYykge1xuICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPW9wdDEuTmV4dF9RdWVzdGlvbl9fYyB8fCBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYzsgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdFbHNlJyt0aGlzLnJlY29yZElkKVxuICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmKGNRdWVzdGlvbi5UeXBlX19jID09IFwiQm9va1wiICYmIGNRdWVzdGlvbi5RdWVzdGlvbl9Ob19fYyA9PSc2JyApIHtcbiAgICAgICAgZm9yIChsZXQgb3B0IG9mIGNRdWVzdGlvbi5RdWVzdGlvbnNfX3IucmVjb3Jkcykge1xuICAgICAgICAgIGlmIChvcHQuVHlwZV9fYyA9PSBcIkRyb3Bkb3duXCIgfHwgb3B0LlR5cGVfX2MgPT0gXCJSYWRpb1wiKXtcbiAgICAgICAgICBmb3IgKHZhciBvcHQxIG9mIG9wdC5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlTmFtZSA9PSBvcHQxLlZhbHVlX19jKSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZElkID0gb3B0MS5OZXh0X1F1ZXN0aW9uX19jOyAgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gICAgXG4gICAgICBcbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEhBIDMxLUpBTi0yNCBBZGRlZCBlbHNlIHRvIGtlZXAgdGhlIGFzc2lnbm1lbnQgZGVmYXVsdFxuICAgIGVsc2V7XG4gICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7XG4gICAgfVxuXG4gICAgLy8gQ0FURUdPUklaQVRJT05cbiAgICAvL3RoaXMuc3RlcHBlckNhdGVnKCk7XG5cbiAgICAvLyBDYWxsaW5nIHRoZSBwcm9ncmVzIGJhciB1cGRhdGUgZnVuY3Rpb25cbiAgICB0aGlzLmFuc3dlckNvdW50Kys7XG4gICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuXG5cbiAgICAvLyBDQVRFR09SSVpBVElPTlxuICAgIC8vdGhpcy5zdGVwcGVyQ2F0ZWcoKTtcblxuICAgIGlmICh0aGlzLnJlY29yZElkKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdCZWZvcmUgQ2FsbGluZyByZWFkUXVlc3Rpb24oKSB1c2luZyAnICsgcmVjb3JkSWQpO1xuICAgICAgdGhpcy5yZWFkUXVlc3Rpb24odGhpcy5yZWNvcmRJZCk7XG4gICAgICB0aGlzLnBvcCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucG9wID0gZmFsc2U7XG4gICAgICAvL2NvbnNvbGUubG9nKCdTdW1tYXJ5IFBhZ2UgTG9naWMnKTtcbiAgICAgIC8vIFJlc2V0IHRoZSBWYXJpYWJsZXNcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgdGhpcy5hbnN3ZXJXcmFwID0gbmV3IEFuc3dlcldyYXBwZXIoKTtcbiAgICAgIHRoaXMub3B0aW9uVmFsdWVzID0gW107XG4gICAgICB0aGlzLnN1YlF1ZXN0aW9ucyA9IFtdO1xuXG4gICAgICB0aGlzLnJlc2V0RmxhZyh0eXApO1xuICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0gPSBudWxsO1xuXG4gICAgICAvLyBTaG93IFN1bW1hcnlcbiAgICAgIGZvciAodmFyIHEgb2YgdGhpcy5xdWVzdGlvblN0YWNrKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ0hhbmRsaW5nIFF1ZXN0aW9uID0+ICcgKyBxKTtcbiAgICAgICAgdmFyIGFuc1dyYXAgPSB0aGlzLmFuc3dlck1hcC5nZXQocSk7XG4gICAgICAgIGlmIChhbnNXcmFwKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnSGFuZGxpbmcgQW5zd2VyIGZvciAnICsgYW5zV3JhcC5xdWVzSWQgKyAnIG9mIHR5cGUgJyArIGFuc1dyYXAucVR5cCk7XG4gICAgICAgICAgaWYoYW5zV3JhcC5xVHlwID09ICdGaWxlJyB8fCBhbnNXcmFwLnFUeXAgPT0gJ0Jvb2snfHxhbnNXcmFwLnFUeXAgPT0gJ0xpc3QnIHx8IGFuc1dyYXAucVR5cCA9PSAnQ2hlY2tib3gnKXtcbiAgICAgICAgICAgIHZhciBuZXdTdHIgPSAnJztcbiAgICAgICAgICAgIGZvciAodmFyIGFuc1N0ciBvZiBhbnNXcmFwLmFuc1ZhbHVlLnNwbGl0KCdAQCMjJCQnKSkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBhbnNTdHIxIG9mIGFuc1N0ci5zcGxpdCgnJCRAQCMjJykpIHtcbiAgICAgICAgICAgICAgLy8gIGlmKGFuc1N0cjEuaW5jbHVkZXMoJ2Fuc3dlclN0cmluZycpKXsgLy9yZW1vdmUgdGhlIGFuc3dlciBzdHJpbmcgIFxuICAgICAgICAgICAgICAgLy8gICBjb25zdCB3aXRob3V0QW5zd2VyU3RyaW5nID0gYW5zU3RyMS5yZXBsYWNlKFwiYW5zd2VyU3RyaW5nOiBcIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgLy8gIGFuc1N0cjEgPSB3aXRob3V0QW5zd2VyU3RyaW5nO1xuICAgICAgICAgICAgICAvLyAgfVxuICAgICAgICAgICAgICAgIGlmIChhbnNTdHIxLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGlmIChuZXdTdHIubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gYW5zU3RyMTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciArPSAnOyAnICsgYW5zU3RyMTsgIC8vY29tbWEoLCkgY2hhbmdlZCBhcyBzZW1pIGNvbG9uKDspIGJlY2F1c2Ugb2YgYWRkcmVzcyBjb250YWlucyBjb21tYSgsKSBcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5hdHRhY2htZW50c01hcC5oYXMoYW5zV3JhcC5xdWVzSWQpKXtcbiAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGF0dCBvZiB0aGlzLmF0dGFjaG1lbnRzTWFwLmdldChhbnNXcmFwLnF1ZXNJZCkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gbmV3U3RyLnJlcGxhY2UoYXR0LmF0dGFjaG1lbnRJZCwnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciA9IChuZXdTdHIucmVwbGFjZSgnLCwnLCcsICcpKS5yZXBsYWNlKCcsICwnLCcsICcpO1xuICAgICAgICAgICAgICAgICAgICBuZXdTdHIgPSBuZXdTdHIuc3RhcnRzV2l0aCgnLCcpID8gbmV3U3RyLnN1YnN0cmluZygxLCBuZXdTdHIubGVuZ3RoKSA6IChuZXdTdHIuZW5kc1dpdGgoJywnKSA/IG5ld1N0ci5zdWJzdHJpbmcoMCwgbmV3U3RyLmxlbmd0aCAtIDEpIDogbmV3U3RyKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1hbnNXcmFwLmFuc1ZhbHVlID0gbmV3U3RyO1xuICAgICAgICAgICAgYW5zV3JhcC5teVZhbCA9IHRoaXMuYWxsSW5wdXRWYWx1ZXM7XG4gICAgICAgIH1cbiAgICAgICAgICB0aGlzLnN1bW1hcnkucHVzaChhbnNXcmFwKTtcbiAgICAgICAgICB0aGlzLmJhY2tpY29uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFRleHQodmFsdWUpIHtcbiAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh2YWx1ZSwgXCJ0ZXh0L2h0bWxcIik7XG4gICAgLy9jb25zb2xlLmxvZyggZG9jLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudCk7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFxuICAgICAgZG9jLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudFxuICAgICk7XG4gIH1cblxuICBoYW5kbGVCYWNrQ2xpY2soKSB7XG4gICAgdGhpcy5iYWNrID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5wb3AgPT09IHRydWUpIHtcbiAgICAgIHRoaXMucXVlc3Rpb25OYW1lLnBvcCgpO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uQmFja19UcmFja2luZ19JRF9fYyk7XG4gICAgdmFyIGNRdWVzdGlvbjogUXVlc3Rpb24gPSBuZXcgUXVlc3Rpb24oKTtcbiAgICBjUXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uSXRlbTtcbiAgICBpZihjUXVlc3Rpb24uUXVlc3Rpb25fTm9fX2MgPT0nMScpe1xuICAgICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLkJhY2tfX2MpO1xuICAgIH1cbiAgICBcblxuICAgIHRoaXMuYW5zd2VyQ291bnQtLTtcbiAgICB0aGlzLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgLy8gQ0FURUdPUklaQVRJT05cbiAgICAvL3RoaXMuc3RlcHBlckNhdGVnKCk7XG5cbiAgICBpZiAodGhpcy5zdW1tYXJ5KSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdzdW1tYXJ5IHRydWUnKTtcbiAgICAgIHRoaXMuc3VtbWFyeSA9IFtdO1xuICAgIH1cbiAgICBpZih0aGlzLnN1bW1hcnlEYXRhKXtcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEgPVtdO1xuICAgIH1cblxuICAgIC8vIFJlYWQgdGhlIHByZXZpb3VzIHF1ZXN0aW9uIGZyb20gREJcbiAgICB0aGlzLnJlYWRRdWVzdGlvbih0aGlzLnF1ZXN0aW9uU3RhY2sucG9wKCkpO1xuICAgIC8vY29uc29sZS5sb2codGhpcy5xdWVzdGlvblN0YWNrKTtcbiAgfVxuXG4gIGhhbmRsZUJhY2tDbGlja05ldygpIHtcbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uRWRpdF9fYyk7XG4gIH1cblxuICAvL3VwZGF0aW5nIHN0YXR1cyBvbmNlIFEmQSBjb21wbGV0ZWQuXG5cbiAgcHJpdmF0ZSB1cGRhdGVBbnN3ZXJCb29rID0gKHV1aWQ6IHN0cmluZykgPT4ge1xuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAgLy8gICBbXCJBbnN3ZXJCb29rXCIsIFwiVXBkYXRlXCIsIHV1aWRdLFxuICAgICAgLy8gICB0aGlzLnN1Y2Nlc3N1cGRhdGVBQixcbiAgICAgIC8vICAgdGhpcy5mYWlsdXJldXBkYXRlQUJcbiAgICAgIC8vICk7XG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdBbnN3ZXJCb29rJywnVXBkYXRlJyx1dWlkLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSkuc3Vic2NyaWJlKFxuICAgICAgKGRhdGEpPT57XG4gICAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkIHN1Y2N1c3NmdWxseScpO1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgdGhpcy5zdWNjZXNzdXBkYXRlQUIoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2QgXG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAvLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgICBcIk54dENvbnRyb2xsZXIubmV3UHJvY2Vzc1wiLFxuICAgICAgICBbXCJBbnN3ZXJCb29rXCIsIFwiVXBkYXRlXCIsIHV1aWQsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLCcnXSxcbiAgICAgICAgdGhpcy5zdWNjZXNzdXBkYXRlQUIsXG4gICAgICAgIHRoaXMuZmFpbHVyZXVwZGF0ZUFCXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3VjY2Vzc3VwZGF0ZUFCID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgIC8vIC8vY29uc29sZS5sb2coJ3N0YXR1cyBzdWNjZXNzJylcbiAgICB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgPSBcIkNvbXBsZXRlZFwiO1xuICB9O1xuICBwcml2YXRlIGZhaWx1cmV1cGRhdGVBQiA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vY29uc29sZS5sb2coJ3N0YXR1cyBmYWlsZWQnKVxuICB9O1xuXG4gIHByaXZhdGUgcmVhZFF1ZXN0aW9uQm9vayA9ICh1dWlkOiBzdHJpbmcpID0+IHtcbiAgICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xuICAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgIC8vICAgW1wiUXVlc3Rpb25Cb29rXCIsIFwicmVhZFwiLCB1dWlkXSxcbiAgICAgIC8vICAgdGhpcy5zdWNjZXNzUmVhZEJvb2ssXG4gICAgICAvLyAgIHRoaXMuZmFpbHVyZVJlYWRCb29rXG4gICAgICAvLyApO1xuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNob3dMb2FkZXIoKTtcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IHRydWUgfTtcbiAgICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnUXVlc3Rpb25Cb29rJywncmVhZCcsdXVpZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCkpLnN1YnNjcmliZShcbiAgICAgIChkYXRhKT0+e1xuICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuaGlkZUxvYWRlcigpO1xuICAgICAgICBjb25zb2xlLmxvZygnZGF0YSBjYW1lIHN1Y2Vzc2Z1bGx5Jyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5oaWRlKCk7XG4gICAgICAgIHRoaXMuc3VjY2Vzc1JlYWRCb29rKEpTT04ucGFyc2UoZGF0YSkpXG4gICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE1SIDMwSkFOMjQgLSBQYXNzaW5nIGZsYWcgZnJvbSBOR05YVFxuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xuICAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICAvLyAsIEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKVxuIC8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgICBcIk54dENvbnRyb2xsZXIubmV3UHJvY2Vzc1wiLFxuICAgICAgICBbXCJRdWVzdGlvbkJvb2tcIiwgXCJyZWFkXCIsIHV1aWQsIEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSwnJ10sXG4gICAgICAgIHRoaXMuc3VjY2Vzc1JlYWRCb29rLFxuICAgICAgICB0aGlzLmZhaWx1cmVSZWFkQm9va1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1Y2Nlc3NSZWFkQm9vayA9IChyZXNwb25zZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHN1Y2Nlc3NSZWFkQm9vaycpO1xuICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICBpZihyZXNwb25zZSAhPSBudWxsIHx8IHJlc3BvbnNlICE9IHVuZGVmaW5lZCl7XG4gICAgICB0aGlzLnFiSXRlbSA9IHJlc3BvbnNlLnF1ZXN0aW9uYm9vaztcbiAgICAgIHRoaXMuYWJJdGVtID0gcmVzcG9uc2UuYW5zd2VyYm9vaztcbiAgICB9XG4gICAvLyBjb25zb2xlLmxvZygncmVhZGluZ1F1ZXN0aW9uIHVzaW5nICcgKyB0aGlzLnFiSXRlbSk7XG4gICAgaWYgKHRoaXMuYWJJdGVtPy5TdGF0dXNfX2MgPT0gXCJQZW5kaW5nXCIpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5hYkl0ZW0uQW5zd2Vyc19fciA9PSBudWxsIHx8XG4gICAgICAgIHRoaXMuYWJJdGVtLkFuc3dlcnNfX3IucmVjb3Jkcy5sZW5ndGggPT0gMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucmVhZFF1ZXN0aW9uKHRoaXMucWJJdGVtLkZpcnN0X1F1ZXN0aW9uX19jKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFBvcHVsYXRlIHRoZSBleGlzdGluZyBhbnN3ZXJzXG4gICAgICAgIHZhciBsYXN0UXVlc3Rpb25JZCA9IFwiXCI7XG5cbiAgICAgICAgZm9yICh2YXIgYW5zT2JqZWN0IG9mIHRoaXMuYWJJdGVtLkFuc3dlcnNfX3IucmVjb3Jkcykge1xuICAgICAgICAgIGxhc3RRdWVzdGlvbklkID0gYW5zT2JqZWN0LlF1ZXN0aW9uX1JlZl9fYztcblxuICAgICAgICAgIHRoaXMucXVlc3Rpb25TdGFjay5wdXNoKGFuc09iamVjdC5RdWVzdGlvbl9SZWZfX2MpO1xuXG4gICAgICAgICAgdGhpcy5hbnN3ZXJNYXAuc2V0KGFuc09iamVjdC5RdWVzdGlvbl9SZWZfX2MsIHtcbiAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zT2JqZWN0LlF1ZXN0aW9uX1JpY2hfVGV4dF9fYyxcbiAgICAgICAgICAgIGFuc1ZhbHVlOiBhbnNPYmplY3QuQW5zd2VyX0xvbmdfX2MsXG4gICAgICAgICAgICBxdWVzSWQ6IGFuc09iamVjdC5RdWVzdGlvbl9SZWZfX2MsXG4gICAgICAgICAgICBxVHlwOiBhbnNPYmplY3QuUXVlc3Rpb25fVHlwZV9fYyxcbiAgICAgICAgICAgIGdyb3VwVGV4dDphbnNPYmplY3QuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5xdWVzdGlvblN0YWNrKVxuICAgICAgICAgIGlmIChhbnNPYmplY3QuUXVlc3Rpb25fVHlwZV9fYyA9PSBcIkJvb2tcIikge1xuICAgICAgICAgICAgdmFyIGF2MSA9IGFuc09iamVjdC5BbnN3ZXJfTG9uZ19fYy5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgIC8vIC8vY29uc29sZS5sb2coXCJib29rIGxvZ1wiKTtcblxuICAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2coXCJib29raWRcIiArIGF2MVswXSk7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRzTWFwLnNldChhbnNPYmplY3QuUXVlc3Rpb25fUmVmX19jLCBbXG4gICAgICAgICAgICAgIHsgYXR0YWNobWVudE5hbWU6IGF2MVsxXSwgYXR0YWNobWVudElkOiBhdjFbMF0gfSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2codGhpcy5hdHRhY2htZW50c01hcCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChhbnNPYmplY3QuUXVlc3Rpb25fVHlwZV9fYyA9PSBcIkZpbGVcIikge1xuICAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2coXCJpbnNpZGUgaWZcIik7XG4gICAgICAgICAgICB2YXIgYXR0TGlzdDtcbiAgICAgICAgICAgIHZhciBhdHQ7XG4gICAgICAgICAgICBmb3IgKHZhciBhdHRWYXIgb2YgYW5zT2JqZWN0LkFuc3dlcl9Mb25nX19jLnNwbGl0KFwiLFwiKSkge1xuICAgICAgICAgICAgICB2YXIgYXR0SWROYW1lID0gYXR0VmFyLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgICAgICAgICBhdHQuYXR0YWNobWVudE5hbWUgPSBhdHRJZE5hbWVbMV07XG4gICAgICAgICAgICAgIGF0dC5hdHRhY2htZW50SWQgPSBhdHRJZE5hbWVbMF07XG4gICAgICAgICAgICAgIGF0dExpc3QucHVzaChhdHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50c01hcC5zZXQoYW5zT2JqZWN0LlF1ZXN0aW9uX1JlZl9fYywgYXR0TGlzdCk7XG4gICAgICAgICAgICAvLyAgLy9jb25zb2xlLmxvZyh0aGlzLmF0dGFjaG1lbnRzTWFwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucG9wKCk7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5hbnN3ZXJNYXApO1xuICAgICAgICAvLyBSZWFkIHRoZSBsYXN0IGFuc3dlcmVkIHF1ZXN0aW9uXG4gICAgICAgIHRoaXMucmVhZFF1ZXN0aW9uKGxhc3RRdWVzdGlvbklkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuYWJJdGVtPy5TdGF0dXNfX2MgPT0gXCJDb21wbGV0ZWRcIikge1xuICAgICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KFwiU3VtbWFyeXVwZGF0ZWRcIik7XG4gICAgICAvLyBUZW1wb3JhcnkgRml4IGZvciBkdXBsaWNhdGUgYW5zd2VycyBvbiB0aGUgc3VtbWFyeS5cbiAgICAgIHRoaXMuc3VtbWFyeSA9IFtdO1xuICAgICAgdGhpcy5wZXJjZW50ID0gMTAwO1xuICAgICAgdGhpcy5wcm9ncmVzc1N0eWxlID0gXCIxMDAlXCI7XG5cbiAgICAgIGZvciAodmFyIGFuc3dlciBvZiB0aGlzLmFiSXRlbS5BbnN3ZXJzX19yLnJlY29yZHMpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhhbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyk7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ3JlcGVhdCcpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKGFuc3dlci5RdWVzdGlvbl9SaWNoX1RleHRfX2MpO1xuICAgICAgICB2YXIgYW5zd2VycyA9IHt9O1xuICAgICAgICBpZiAoYW5zd2VyLlF1ZXN0aW9uX1R5cGVfX2MgPT0gXCJGaWxlXCIpIHtcbiAgICAgICAgICB2YXIgZmlsZXMgPSBcIlwiO1xuICAgICAgICAgIHZhciBmSW5kZXggPSAwO1xuICAgICAgICAgIHZhciBmaWxlTGlzdCA9IGFuc3dlci5BbnN3ZXJfTG9uZ19fYy5zcGxpdChcIixcIik7XG4gICAgICAgICAgZm9yICh2YXIgZmlsZUlkTmFtZSBvZiBmaWxlTGlzdCkge1xuICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gZmlsZUlkTmFtZS5zcGxpdChcIkAjJFwiKTtcbiAgICAgICAgICAgIGlmIChmSW5kZXggPT0gMCkge1xuICAgICAgICAgICAgICBmaWxlcyA9IGZpbGVOYW1lWzFdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZmlsZXMgPSBmaWxlcyArIFwiICxcIiArIGZpbGVOYW1lWzFdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmSW5kZXgrKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhbnN3ZXJzID0ge1xuICAgICAgICAgICAgZ3JvdXBUZXh0OmFuc3dlci5RdWVzdGlvbl9Hcm91cF9UZXh0X19jLFxuICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnN3ZXIuUXVlc3Rpb25fUmljaF9UZXh0X19jLFxuICAgICAgICAgICAgYW5zVmFsdWU6IGZpbGVzLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYW5zd2VyLlF1ZXN0aW9uX1R5cGVfX2MgPT0gXCJCb29rXCIpIHtcbiAgICAgICAgICAvKiAgdmFyIHF1ZXNObz0wO1xuICAgICAgICAgaWYoYW5zd2VyLkFuc3dlcl9Mb25nX19jLmluY2x1ZGVzKFwiQEAjIyQkXCIpKXtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2xpbmUgMTIyMycpO1xuICAgICAgICAgICAgZm9yICh2YXIgYnFBbnN3ZXJWYWx1ZSBvZiBhbnN3ZXIuQW5zd2VyX0xvbmdfX2Muc3BsaXQoXCJAQCMjJCRcIikpIHtcbiAgICAgICAgICAgICAgdmFyIHF1ZXNWYWx1ZT1hbnN3ZXIuUXVlc3Rpb25fVGV4dF9fYy5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgICAgYW5zd2VycyA9IHt9O1xuICAgICAgICAgICAgICBhbnN3ZXJzID0ge1xuICAgICAgICAgICAgICAgLy8gZ3JvdXBUZXh0OmFuc3dlci5RdWVzdGlvbl9UZXh0X19jLFxuICAgICAgICAgICAgICAgIHF1ZXNWYWx1ZTogIFwiJmx0O3AmZ3Q7XCIrIHF1ZXNWYWx1ZVtxdWVzTm9dK1wiJmx0O3AmZ3Q7XCIsXG4gICAgICAgICAgICAgICAgYW5zVmFsdWU6IGJxQW5zd2VyVmFsdWUsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHF1ZXNObysrO1xuICAgICAgICAgICAgICB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgfSovXG4gICAgICAgICAgaWYoYW5zd2VyLkFuc3dlcl9Mb25nX19jLmluY2x1ZGVzKFwiQEAjIyQkXCIpKXtcbiAgICAgICAgICAgIHZhciBhbnN3ZXJ2YWx1ZXMgPSBhbnN3ZXIuQW5zd2VyX0xvbmdfX2Muc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCd2YWx1ZScpXG4gICAgICAgICAgICBhbnN3ZXJzID0geyAgICAgIFxuICAgICAgICAgICAgIC8vZ3JvdXBUZXh0OmFuc3dlci5RdWVzdGlvbl9Hcm91cF9UZXh0X19jLFxuICAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zd2VyLlF1ZXN0aW9uX1JpY2hfVGV4dF9fYyxcbiAgICAgICAgICAgICBhbnNWYWx1ZTogYW5zd2VydmFsdWVzLFxuICAgICAgICAgICB9O1xuICAgICAgICAgICAvL2NvbnNvbGUubG9nKGFuc3dlcnMpXG4gICAgICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgICAgICB9XG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIGFuc3dlcnMgPSB7ICAgICAgXG4gICAgICAgICAgICAgIC8vZ3JvdXBUZXh0OmFuc3dlci5RdWVzdGlvbl9Hcm91cF9UZXh0X19jLFxuICAgICAgICAgICAgICBxdWVzVmFsdWU6IGFuc3dlci5RdWVzdGlvbl9SaWNoX1RleHRfX2MsXG4gICAgICAgICAgICAgIGFuc1ZhbHVlOiBhbnN3ZXIuQW5zd2VyX0xvbmdfX2MsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgLy8gdmFyIGFuczEgPSBhbnN3ZXIuQW5zd2VyX0xvbmdfX2Muc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgICAgYW5zd2VycyA9IHsgICAgICBcbiAgICAgICAgICAgIC8vZ3JvdXBUZXh0OmFuc3dlci5RdWVzdGlvbl9Hcm91cF9UZXh0X19jLFxuICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnN3ZXIuUXVlc3Rpb25fUmljaF9UZXh0X19jLFxuICAgICAgICAgICAgYW5zVmFsdWU6IGFuc3dlci5BbnN3ZXJfTG9uZ19fYyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgZmFpbHVyZVJlYWRCb29rID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgY29uc29sZS5sb2coJ0luc2lkZSB0aGUgZmFpbHVyZVJlYWRCb29rJyk7XG4gICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICB9O1xuXG4gIHByaXZhdGUgcmVhZEFuc3dlcmJvb2sgPSAodXVpZDogc3RyaW5nKSA9PiB7XG4gICAgaWYodGhpcy5zZXJ2ID0gXCJhcGlcIikge1xuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAgICB0aGlzLnRrbixcbiAgICAgICAgW1wiQW5zd2VyQm9va1wiLCBcInJlYWRcIiwgdXVpZF0sXG4gICAgICAgIHRoaXMuc3VjY2Vzc0Fuc3dlckJvb2tSZWFkLFxuICAgICAgICB0aGlzLmZhaWx1cmVBbnN3ZXJCb29rUmVhZFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2QgXG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAvLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgICBcIk54dENvbnRyb2xsZXIubmV3UHJvY2Vzc1wiLFxuICAgICAgICBbXCJBbnN3ZXJCb29rXCIsIFwicmVhZFwiLCB1dWlkLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSwnJ10sXG4gICAgICAgIHRoaXMuc3VjY2Vzc0Fuc3dlckJvb2tSZWFkLFxuICAgICAgICB0aGlzLmZhaWx1cmVBbnN3ZXJCb29rUmVhZFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuXG4gIHByaXZhdGUgc3VjY2Vzc0Fuc3dlckJvb2tSZWFkID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHRoaXMuYWJJdGVtPy5TdGF0dXNfX2MgPT0gXCJDb21wbGV0ZWRcIikge1xuICAgICAgZm9yICh2YXIgYW5zd2VyIG9mIHRoaXMuYWJJdGVtLkFuc3dlcnNfX3IucmVjb3Jkcykge1xuICAgICAgICB2YXIgYXYgPSBhbnN3ZXIuQW5zd2VyX0xvbmdfX2Muc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgIHZhciBhbnN3ZXJzID0geyBxdWVzVmFsdWU6IGFuc3dlci5RdWVzdGlvbl9SaWNoX1RleHRfX2MsIGFuc1ZhbHVlOiBhdiwgZ3JvdXBUZXh0OmFuc3dlci5RdWVzdGlvbl9Hcm91cF9UZXh0X19jIH07XG4gICAgICAgIC8vY29uc29sZS5sb2coYW5zd2VycylcbiAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQoXCJTdW1tYXJ5dXBkYXRlZFwiKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBmYWlsdXJlQW5zd2VyQm9va1JlYWQgPSAocmVzcG9uc2UpID0+IHtcbiAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZXJlYWQnKTtcbiAgICAvL2NvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRRdWVzdGlvbiA9ICh1dWlkOiBzdHJpbmcpID0+IHtcbiAgICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xuICAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgIC8vICAgW1wiUXVlc3Rpb25cIiwgXCJyZWFkXCIsIHV1aWRdLFxuICAgICAgLy8gICB0aGlzLnN1Y2Nlc3NSZWFkLFxuICAgICAgLy8gICB0aGlzLmZhaWx1cmVSZWFkXG4gICAgICAvLyApO1xuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNob3dMb2FkZXIoKTtcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IHRydWUgfTtcbiAgICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnUXVlc3Rpb24nLCdyZWFkJyx1dWlkLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSkuc3Vic2NyaWJlKFxuICAgICAgICAoZGF0YSk9PntcbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuaGlkZUxvYWRlcigpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdkYXRhIGNhbWUgc3VjZXNzZnVsbHknKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkKEpTT04ucGFyc2UoZGF0YSkpXG4gICAgICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgLy8gLy8gVkQgMTVGRUIyNCAtIG1ha2UgY3JlYXRlQW5zd2VyQm9va0ZsYWcgZmFsc2Ugb25seVxuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG5cbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICAgIFwiTnh0Q29udHJvbGxlci5uZXdQcm9jZXNzXCIsXG4gICAgICAgIFtcIlF1ZXN0aW9uXCIsIFwicmVhZFwiLCB1dWlkLCBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksJyddLFxuICAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkLFxuICAgICAgICB0aGlzLmZhaWx1cmVSZWFkXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3VjY2Vzc1JlYWQgPSAocmVzcG9uc2UpID0+IHtcbiAgICBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBzdWNjZXNzUmVhZCcpO1xuICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAvLyBIQSAwMkZFQjI0IEZvciB0ZXN0aW5nIGZvciB1c2VkIHRoaXMgYW5kIGluIGZ1dHVyZSBpdCBjYW4gYmUgdXNlZCB0byB0ZXN0IHdpdGggc3RhdGljIGRhdGFcbiAgICAvLyB2YXIgYWIgPSBbJ2ZpcnN0JywnbGFzdCcsJzEyMycsJzEyLTEyLTIwMDAnLCcyMicsJ01hbGUnLCcxMiBjcm9zcyAxJywnRW1Db250YWN0JywnOTg3NjUnLCdBJywnU2luZ2xlJ107XG4gICAgLy8gZm9yKGNvbnN0IFtpbmRleCxpdGVtXSBvZiByZXNwb25zZS5xdWVzdGlvbi5RdWVzdGlvbnNfX3IucmVjb3Jkcy5lbnRyaWVzKCkpe1xuICAgIC8vICAgaXRlbS5pbnB1dCA9IGFiW2luZGV4XTtcbiAgICAvLyB9XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuICAgIC8vIFJlc2V0IHRoZSBWYXJpYWJsZXNcblxuICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbSkge1xuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgICB0aGlzLmFuc3dlcldyYXAgPSBuZXcgQW5zd2VyV3JhcHBlcigpO1xuICAgICAgdGhpcy5vcHRpb25WYWx1ZXMgPSBbXTtcbiAgICAgIHRoaXMuc3ViUXVlc3Rpb25zID0gW107XG4gICAgICB0aGlzLnJlc2V0RmxhZyh0aGlzLnF1ZXN0aW9uSXRlbS5UeXBlX19jKTtcbiAgICB9XG4gICAgdGhpcy5xdWVzdGlvbkl0ZW0gPSByZXNwb25zZS5xdWVzdGlvbjtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbSk7XG5cbiAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS5UeXBlX19jID09PSAnQWxwaGFudW1lcmljJyl7XG4gICAgICB0aGlzLnNwbENDQmFja0NsaWNrID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbklkID0gdGhpcy5xdWVzdGlvbkl0ZW0uSWQ7XG4gICAgdGhpcy5oYW5kbGVQYWdlLmVtaXQodGhpcy5xdWVzdGlvbkl0ZW0uVHJhY2tpbmdfSURfX2MpO1xuICAgIC8vIEhhbmRsZSB0aGUgc3ViUXVlc3Rpb24gb3B0aW9uc1xuICAgIGlmIChyZXNwb25zZS5zcU9wdGlvbnMpIHtcbiAgICAgIC8vdmFyIG5ld1JlY29yZHMgPSBbXTtcbiAgICAgIGZvciAodmFyIHEgb2YgdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhxLk5hbWUpO1xuICAgICAgICB2YXIgc3EgPSByZXNwb25zZS5zcU9wdGlvbnNbcS5JZF07XG4gICAgICAgIGlmIChzcSkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ2ZvdW5kIG9wdGlvbnMgZm9yIHN1YnF1ZXN0aW9uICcgKyBxLk5hbWUpO1xuICAgICAgICAgIGlmICghcS5RdWVzdGlvbl9PcHRpb25zX19yKSB7XG4gICAgICAgICAgICBxLlF1ZXN0aW9uX09wdGlvbnNfX3IgPSBzcS5RdWVzdGlvbl9PcHRpb25zX19yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NRdWVzdGlvbigpO1xuICAgIHRoaXMuaW5uZXJodG1sID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5BZGRpdGlvbmFsX1JpY2hfX2NcbiAgICApO1xuICAgIHRoaXMudHJhY2tJZCgpO1xuICB9O1xuXG4gIHRyYWNrSWQoKSB7XG4gICAgdmFyIHF0cmFja0lkID0gdGhpcy5xdWVzdGlvbkl0ZW0uVHJhY2tpbmdfSURfX2M7XG4gICAgLy9jb25zb2xlLmxvZygndHJhY2tJZC1xdWVzdGlvbicrcXRyYWNrSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmYWlsdXJlUmVhZCA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlcmVhZCcpO1xuICAgIC8vY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICB9O1xuXG4gIHByaXZhdGUgc2F2ZUFuc3dlciA9ICgpID0+IHtcbiAgICAvLyBTZXQgdGhlIEFuc3dlciBOdW1iZXIgYmFzZWQgb24gdGhlIFF1ZXN0aW9uIFN0YWNrIExlbmd0aFxuICAgIGlmICh0aGlzLmlucFZhbHVlICE9IFwiLlwiKSB7XG4gICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbklkID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5hbnN3ZXJXcmFwLmFuc051bWJlciA9IHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggKyAxO1xuXG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgIC8vICAgdGhpcy50a24sXG4gICAgICAvLyAgIFtcIkFuc3dlclwiLCBcImNyZWF0ZVwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLmFuc3dlcldyYXApXSxcbiAgICAgIC8vICAgdGhpcy5zdWNjZXNzU2F2ZSxcbiAgICAgIC8vICAgdGhpcy5mYWlsdXJlU2F2ZVxuICAgICAgLy8gKTtcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdBbnN3ZXInLCdjcmVhdGUnLEpTT04uc3RyaW5naWZ5KHRoaXMuYW5zd2VyV3JhcCksSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApKS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YSk9PntcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGEgY2FtZSBzdWNlc3NmdWxseScpO1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgdGhpcy5zdWNjZXNzU2F2ZShKU09OLnBhcnNlKGRhdGEpKVxuICAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHF1ZXN0aW9uIGJvb2tzJywgZXJyb3IpO1xuICAgICAgfVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZCBcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAvLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgICBcIk54dENvbnRyb2xsZXIubmV3UHJvY2Vzc1wiLFxuICAgICAgICBbXCJBbnN3ZXJcIiwgXCJjcmVhdGVcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5hbnN3ZXJXcmFwKSxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksJyddLFxuICAgICAgICB0aGlzLnN1Y2Nlc3NTYXZlLFxuICAgICAgICB0aGlzLmZhaWx1cmVTYXZlXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBodG1sRGVjb2RlKGlucHV0KSB7XG4gICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaW5wdXQsIFwidGV4dC9odG1sXCIpO1xuICAgIHJldHVybiBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBzdWNjZXNzU2F2ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgIC8vdGhpcy5hYkl0ZW0gPSByZXNwb25zZS5hbnN3ZXJib29rO1xuICAgICAgdGhpcy5hbnN3ZXJNYXAuc2V0KHJlc3BvbnNlLmFuc3dlci5xdWVzSWQsIHJlc3BvbnNlLmFuc3dlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IuZXJyb3JNc2cgPSByZXNwb25zZS5lcnJvci5lcnJvck1zZztcbiAgICB9XG4gICAgaWYoIXRoaXMuYmFja0J1dHRvbkZsYWcpe1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgZmFpbHVyZVNhdmUgPSAocmVzcG9uc2UpID0+IHtcbiAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZVNhdmUnKTtcbiAgICAvL2NvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgfTtcblxuICBwcml2YXRlIHByb2Nlc3NRdWVzdGlvbiA9ICgpID0+IHtcbiAgICAvLyBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBwcm9jZXNzUXVlc3Rpb24nKTtcbiAgICAvLyBjb25zb2xlLmxvZygnc3BsQ0NCYWNrQ2xpY2sgPSAnK3RoaXMuc3BsQ0NCYWNrQ2xpY2spO1xuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25TdGFjayk7XG4gICAgLy9jb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbSk7XG4gICAgdGhpcy5wb3AgPSB0cnVlO1xuXG4gICAgLy8gaWYoIXRoaXMuYmFjayl7XG4gICAgLy8gICB0aGlzLnF1ZXN0aW9uTmFtZS5wdXNoKHRoaXMucXVlc3Rpb25JdGVtLk5hbWUpXG4gICAgLy8gfVxuXG4gICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYyA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKCF0aGlzLmJhY2spIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucHVzaCh0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYmFjayA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb25OYW1lWzBdID09PSB0aGlzLnF1ZXN0aW9uTmFtZVsxXSkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wb3AoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jdXJyZW50TmFtZSA9IHRoaXMucXVlc3Rpb25JdGVtLk5hbWU7XG4gICAgICB0aGlzLnBhdGhxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25OYW1lLmluZGV4T2YodGhpcy5jdXJyZW50TmFtZSk7XG4gICAgICB0aGlzLnBvc3NpYmlsaXRpZXMgPSB0aGlzLnFiSXRlbS5Qb3NzaWJpbGl0aWVzX19jO1xuICAgIH1cblxuICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucztcbiAgICB0aGlzLmRheSgpO1xuICAgIC8vY29uc29sZS5sb2coJ3Byb2Nlc3NpbmcgcXVlc3Rpb24gJyArIHRoaXMucXVlc3Rpb25JdGVtLk5hbWUgKyAnIGV4aXN0aW5nIGFuc3dlcnMgYXJlICcgKyB0aGlzLmFuc3dlck1hcC5zaXplKTsgLy8gPT4gJyArIEpTT04uc3RyaW5naWZ5KHRoaXMucXVlc3Rpb25JdGVtKSk7XG5cbiAgICAvLyBTZXQgdGhlIEZsYWdzIHRvIHNob3cgcmlnaHQgZmllbGRzXG4gICAgdGhpcy5zZXRGbGFnKHRoaXMucXVlc3Rpb25JdGVtLlR5cGVfX2MpO1xuICAgIC8vY29uc29sZS5sb2coJ0FmdGVyIHRoZSBzZXRGbGFnIG1ldGhvZCBkdEZsYWcgPSAnK3RoaXMuZHRGbGFnKTtcblxuICAgIC8vIENoZWNrIHRoZSBleGlzdGluZyBhbnN3ZXIgZnJvbSBhbnN3ZXJNYXBcbiAgICBpZiAodGhpcy5hbnN3ZXJNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLklkKSkge1xuICAgICAgLy8gIC8vY29uc29sZS5sb2coXCJleGlzdGluZyBhbnN3ZXIgZm91bmQgZm9yIHRoaXMucXVlc3Rpb25JdGVtLk5hbWVcIik7XG4gICAgICB2YXIgZUFuc3dlciA9IHRoaXMuYW5zd2VyTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XG4gICAgICAvLyBHZXQgdGhlIGV4aXN0aW5nIGFuc3dlciBmcm9tIHRoZSBNYXBcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBlQW5zd2VyLmFuc1ZhbHVlO1xuICAgICAgLy9jb25zb2xlLmxvZygnaW5wVmFsdWUgaGFzIGJlZW4gc2V0IHRvICcgKyB0aGlzLmlucFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRzTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpIHtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50cyA9IHRoaXMuYXR0YWNobWVudHNNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIHJlbW92aW5nIGF0dGFjaG1lbnQgYXJyYXknKTtcbiAgICAgIHRoaXMuYXR0YWNobWVudHMgPSBbXTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZSk7XG4gICAgaWYodGhpcy5zcGxDQ0JhY2tDbGljayAmJiB0aGlzLmlucFZhbHVlICYmIHRoaXMuaW5wVmFsdWUuaW5jbHVkZXMoJ0VTJykpe1xuICAgICAgLy8gY29uc29sZS5sb2coJ0luc2lkZSB0aGUgaWYgY29uZCcpO1xuICAgICAgdGhpcy5zcGxDQ0JhY2tDbGljayA9IGZhbHNlO1xuICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUucmVwbGFjZSgnRVMnLCcnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaGVja2JveEZsYWcpIHtcbiAgICAgIC8vIFNldCB0aGUgT3B0aW9ucyBmb3IgQ2hlY2tib3hcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyh0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHMpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ib29rRmxhZykge1xuICAgICAgLy9jb25zb2xlLmxvZygnSW5pc2UgdGhlIGV4cGVjdGVkIGJvb2tGbGFnIGNvbmQnKTtcbiAgICAgIC8vY29uc29sZS5sb2coJ2R0RmxhZyA9ICcrdGhpcy5kdEZsYWcpO1xuLy8gIEhBIDIwRkVCMjQgTGFiZWwgRml4XG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBlbGVtZW50LlF1ZXN0aW9uX1RleHRfX2MgPSBlbGVtZW50LlF1ZXN0aW9uX1RleHRfX2MucmVwbGFjZSgvPFtePl0rPi9nLCAnJyk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2V0U3ViUXVlc3Rpb25zKHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubGlzdEZsYWcpIHtcbiAgICAgIC8vIFNldCB0aGUgTG9jYWxTdWJRdWVzdGlvbnNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgbGlzdCBmbGFnJyk7XG4gICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcyk7XG4gICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmFiSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcyk7XG4gICAgICBpZighdGhpcy5sb2NhbFN1YlFNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLklkKSl7XG4gICAgICAgIHRoaXMuc2V0U3ViUXVlc3Rpb25zKHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKTtcbiAgICAgIH0gXG4gICAgfSBlbHNlIGlmICh0aGlzLmR0RmxhZykge1xuICAgICAgLy9jb25zb2xlLmxvZygnSW5pc2UgdGhlIHVuZXhwZWN0ZWQgZHRGbGFnIGNvbmQnKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gXCJcIjtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBcIlwiO1xuICAgICAgdGhpcy5zZWxEYXRlID0gXCJcIjtcbiAgICAgIC8vIDIwMjEtNS0xNlQwMDowMFxuICAgICAgaWYgKHRoaXMuZGF0ZU1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uSWQpKSB7XG4gICAgICAgIHRoaXMuc2VsRGF0ZSA9IHRoaXMuZGF0ZU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRob3VyTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSB0aGlzLnNlbGVjdGVkaG91ck1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRtaW51dGVNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLklkKSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gdGhpcy5zZWxlY3RlZG1pbnV0ZU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmhvdXJzLnB1c2goXG4gICAgICAgICAgXCIxM1wiLFxuICAgICAgICAgIFwiMTRcIixcbiAgICAgICAgICBcIjE1XCIsXG4gICAgICAgICAgXCIxNlwiLFxuICAgICAgICAgIFwiMTdcIixcbiAgICAgICAgICBcIjE4XCIsXG4gICAgICAgICAgXCIxOVwiLFxuICAgICAgICAgIFwiMjBcIixcbiAgICAgICAgICBcIjIxXCIsXG4gICAgICAgICAgXCIyMlwiLFxuICAgICAgICAgIFwiMjNcIixcbiAgICAgICAgICBcIjAwXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuaG91cnMgPSB0aGlzLmhvdXJzLnNsaWNlKDAsIDEyKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmR0RmxhZyAmJiB0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgIHZhciBkdFZhbCA9IHRoaXMuaW5wVmFsdWUuc3BsaXQoXCJUXCIpOyBcbiAgICAgICAgdmFyIGR0dmFsMCA9IHRoaXMuaW5wVmFsdWUuc3BsaXQoXCIgXCIpO1xuICAgICAgICB0aGlzLmlucFZhbHVlID0gZHRWYWxbMF07XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSBkdHZhbDBbMF07XG5cbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBkdFZhbFsxXTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBkdHZhbDBbMV07XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLklzX0RhdGVfQmFja3dhcmRfX2MgfHxcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uSXNfRGF0ZV9Gb3J3YXJkX19jXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLklzX0RhdGVfQmFja3dhcmRfX2MgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMuZGlzYWJsZVNpbmNlID0ge1xuICAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgbW9udGg6IHRoaXMudG9kYXkuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgICBkYXk6IHRoaXMudG9kYXkuZ2V0RGF0ZSgpICsgMSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5Jc19EYXRlX0ZvcndhcmRfX2MgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMuZGlzYWJsZVVudGlsID0ge1xuICAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgbW9udGg6IHRoaXMudG9kYXkuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgICBkYXk6IHRoaXMudG9kYXkuZ2V0RGF0ZSgpLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuZmlsZUZsYWcpIHtcbiAgICAgIHRoaXMuZmlsZVVJKCk7XG4gICAgICAvLyBsb2dpY1xuICAgICAgdGhpcy5hbGxvd2VkRmlsZUV4dGVuc2lvbiA9XG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5BbGxvd2VkX0ZpbGVfRXh0ZW5zaW9uc19fYz8uc3BsaXQoXCI7XCIpO1xuICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmFsbG93ZWRGaWxlRXh0ZW5zaW9uKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuICAgIH1cbiAgfTtcblxuICBzZXRGbGFnKHR5cCkge1xuICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBzZXRGbGFnIGZvciAnICsgdHlwKTtcblxuICAgIGlmICh0eXApIHtcbiAgICAgIC8vIFNldCB0aGUgRmxhZ3NcbiAgICAgIGlmICh0eXAgPT0gXCJUZXh0XCIpIHtcbiAgICAgICAgdGhpcy50ZXh0RmxhZyA9IHRydWU7XG5cbiAgICAgICAgLy90aGlzLm51bWJlckZsYWcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJOdW1iZXJcIikge1xuICAgICAgICB0aGlzLm51bWJlckZsYWcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJBbHBoYU51bWVyaWNcIikge1xuICAgICAgICB0aGlzLmFscGhhbnVtZXJpY0ZsYWcgPSB0cnVlO1xuICAgICAgICAvKmlmKHRoaXMuaW5wVmFsdWUubGVuZ3RoID09PSAwKXtcbiAgICAgICAgICB0aGlzLmlucFZhbHVlPSdFUydcbiAgICAgICAgfSovXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkVtYWlsXCIpIHtcbiAgICAgICAgdGhpcy5lbWFpbEZsYWcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJGaWxlXCIpIHtcbiAgICAgICAgdGhpcy5maWxlRmxhZyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVUaW1lXCIpIHtcbiAgICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xuICAgICAgICB0aGlzLnRpbWVGbGFnID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kYXRlRmxhZyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRleHRBcmVhXCIpIHtcbiAgICAgICAgdGhpcy50YUZsYWcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJSYWRpb1wiKSB7XG4gICAgICAgIHRoaXMucmFkaW9GbGFnID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiRHJvcGRvd25cIikge1xuICAgICAgICB0aGlzLmRyb3Bkb3duRmxhZyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkNoZWNrYm94XCIpIHtcbiAgICAgICAgdGhpcy5jaGVja2JveEZsYWcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJCb29rXCIpIHtcbiAgICAgICAgdGhpcy5ib29rRmxhZyA9IHRydWU7XG4gICAgICB9ZWxzZSBpZiAodHlwID09ICdMaXN0Jyl7XG4gICAgICAgIHRoaXMubGlzdEZsYWcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJUaW1lXCIpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBUaW1lIGNvbmQnKTtcbiAgICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xuICAgICAgICB0aGlzLnRpbWVGbGFnID0gdHJ1ZTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmR0RmxhZyk7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVcIikge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIERhdGUgY29uZCcpO1xuICAgICAgICB0aGlzLmR0RmxhZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF0ZUZsYWcgPSB0cnVlO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuZHRGbGFnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXNldEZsYWcodHlwKSB7XG4gICAgaWYgKHR5cCkge1xuICAgICAgLy8gU2V0IHRoZSBGbGFnc1xuICAgICAgaWYgKHR5cCA9PSBcIlRleHRcIikge1xuICAgICAgICB0aGlzLnRleHRGbGFnID0gZmFsc2U7XG4gICAgICAgIC8vdGhpcy5udW1iZXJGbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIk51bWJlclwiKSB7XG4gICAgICAgIHRoaXMubnVtYmVyRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJBbHBoYW51bWVyaWNcIikge1xuICAgICAgICB0aGlzLmFscGhhbnVtZXJpY0ZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiRW1haWxcIikge1xuICAgICAgICB0aGlzLmVtYWlsRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJGaWxlXCIpIHtcbiAgICAgICAgdGhpcy5maWxlRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJEYXRlVGltZVwiKSB7XG4gICAgICAgIHRoaXMuZHRGbGFnID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGF0ZUZsYWcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50aW1lRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJUZXh0QXJlYVwiKSB7XG4gICAgICAgIHRoaXMudGFGbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlJhZGlvXCIpIHtcbiAgICAgICAgdGhpcy5yYWRpb0ZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiRHJvcGRvd25cIikge1xuICAgICAgICB0aGlzLmRyb3Bkb3duRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJDaGVja2JveFwiKSB7XG4gICAgICAgIHRoaXMuY2hlY2tib3hGbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkJvb2tcIikge1xuICAgICAgICB0aGlzLmJvb2tGbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSAnTGlzdCcpe1xuICAgICAgICB0aGlzLmxpc3RGbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRpbWVcIikge1xuICAgICAgICB0aGlzLmR0RmxhZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRpbWVGbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVcIikge1xuICAgICAgICB0aGlzLmR0RmxhZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRhdGVGbGFnID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0T3B0aW9ucyhyZWNvcmRzKSB7XG4gICAgZm9yICh2YXIgb3B0IG9mIHJlY29yZHMpIHtcbiAgICAgIHZhciBvdiA9IG5ldyBPcHRpb25WYWx1ZSgpO1xuICAgICAgb3YuSWQgPSBvcHQuSWQ7XG4gICAgICBvdi5OYW1lID0gb3B0Lk5hbWU7XG4gICAgICBvdi5WYWx1ZV9fYyA9IG9wdC5WYWx1ZV9fYztcbiAgICAgIG92Lk5leHRfUXVlc3Rpb25fX2MgPSBvcHQuTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgIG92LmNoZWNrZWQgPSBmYWxzZTtcblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlucFZhbHVlICYmXG4gICAgICAgIHRoaXMuaW5wVmFsdWUuc3BsaXQoXCJAQCMjJCRcIikuaW5jbHVkZXMob3B0LlZhbHVlX19jKVxuICAgICAgKSB7XG4gICAgICAgIG92LmNoZWNrZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9wdGlvblZhbHVlcy5wdXNoKG92KTtcbiAgICB9XG4gIH1cblxuICAvLyBDYXB0dXJlIGFuZCBQcm9jZXNzIENoaWxkIEV2ZW50XG4gIGNoaWxkRXZlbnRDYXB0dXJlKGV2ZW50LCBxdWVzPzphbnkpIHtcbiAgICBjb25zb2xlLmxvZygnaW5zaWRlIGNoaWxkRXZlbnRDYXB0dXJlICcpO1xuICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgICB0aGlzLmNoYW5nZVNlcnZpY2UuYW5ub3VuY2VDaGFuZ2UoZXZlbnQpO1xuICAgIC8vIEhBIDMxLUpBTi0yNCBBc3NpZ24gdmFsdWVzIHRvIGRyb3Bkb3duIHF1ZXN0aW9uXG4gICAgcXVlcy5pbnB1dCA9IGV2ZW50Py52YWx1ZU9iajtcbiAgICAvL3F1ZXMuaW5wdXQgPSBldmVudDsgLy8gaGVyZSB3aGVuIHVzaW5nIHRoZSBuZy1zZWxlY3QgZ290IGV2ZW50IGFzIHZhbHVlXG4gIH1cblxuICBzZXRTdWJRdWVzdGlvbnMocmVjb3Jkcykge1xuICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgc2V0U3ViUXVlc3Rpb25zJyk7XG4gICAgLy8gY29uc29sZS5sb2cocmVjb3Jkcyk7XG4gICAgdmFyIHFhTWFwID0gbmV3IE1hcCgpO1xuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuaW5wVmFsdWUpO1xuICAgIGlmICh0aGlzLmlucFZhbHVlKSB7XG4gICAgICB2YXIgYUluZGV4ID0gMDtcbiAgICAgIC8vIHNlYXJjaCBjaGFuZ2VkIGFzIHNlbWkgY29sb24gYmVjYXVzZSBvZiBhZGRyZXNzIGNvbnRhaW5zIGNvbW1hIFxuICAgICAgaWYgKCh0aGlzLmlucFZhbHVlLnNlYXJjaChcIjsgXCIpID09IC0xKSkge1xuICAgICAgIC8vIGNvbnN0IHdpdGhvdXRBbnN3ZXJTdHJpbmcgPSB0aGlzLmlucFZhbHVlLnJlcGxhY2UoXCJhbnN3ZXJTdHJpbmc6IFwiLCBcIlwiKTsgLy9yZW1vdmUgdGhlIGFuc3dlciBzdHJpbmdcbiAgICAgICAvLyB0aGlzLmlucFZhbHVlID0gd2l0aG91dEFuc3dlclN0cmluZztcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyAnQEAjIyQkJyA7XG4gICAgICAgIGZvciAodmFyIGFuc1N0ciBvZiB0aGlzLmlucFZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpKSB7XG4gICAgICAgICAgYUluZGV4Kys7XG4gICAgICAgICAgcWFNYXAuc2V0KGFJbmRleCwgYW5zU3RyKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdTZXR0aW5nIHRoZSBxYU1hcCBmb3IgJyArIGFJbmRleCArICcgd2l0aCAnICsgYW5zU3RyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgYW5zU3RyIG9mIHRoaXMuaW5wVmFsdWUuc3BsaXQoXCI7IFwiKSkge1xuICAgICAgICAgIGFJbmRleCsrO1xuICAgICAgICAgIHFhTWFwLnNldChhSW5kZXgsIGFuc1N0cik7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnU2V0dGluZyB0aGUgcWFNYXAgJyArIGFJbmRleCArICcgd2l0aCAnICsgYW5zU3RyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZygnYWZ0ZXIgc2V0dGluZyB2YWx1ZXMgZnJvbSBpbnB2YWx1ZSBxYSBtYXAgYXJlJyk7XG4gICAgLy8gY29uc29sZS5sb2cocWFNYXApO1xuXG4gICAgZm9yICh2YXIgcXVlcyBvZiByZWNvcmRzKSB7XG4gICAgICBpZiAocXVlcy5UeXBlX19jID09IFwiRmlsZVwiKSB7XG4gICAgICAgIHRoaXMudmFsdWVOYW1lMSA9IHF1ZXMuQWxsb3dlZF9GaWxlX0V4dGVuc2lvbnNfX2M7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy52YWx1ZU5hbWUxKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFucyA9ICcnO1xuICAgICAgaWYgKHFhTWFwLmhhcyhxdWVzLlF1ZXN0aW9uX05vX19jKSkge1xuICAgICAgICAgIHF1ZXMuaW5wdXQgPSBxYU1hcC5nZXQocXVlcy5RdWVzdGlvbl9Ob19fYyk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2FmdGVyIGZldGNoaW5nIG1hcCB2YWx1ZXMnKTtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVzLmlucHV0KTtcbiAgICAgICAgICBpZihxdWVzLmlucHV0LmluZGV4T2YoJyQkQEAjIycpID4gMCl7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnYW5zd2VyIHN1cHBvc2VkIHRvIGJlIHRyaW1tZWQnKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXMuaW5wdXQpO1xuICAgICAgICAgICAgYW5zID0gcXVlcy5pbnB1dC5zdWJzdHJpbmcocXVlcy5pbnB1dC5pbmRleE9mKCckJEBAIyMnKSs2LHF1ZXMuaW5wdXQubGVuZ3RoKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGFucyk7XG4gICAgICAgICAgICBxdWVzLmlucHV0ID0gcXVlcy5pbnB1dC5zdWJzdHJpbmcoMCxxdWVzLmlucHV0LmluZGV4T2YoJyQkQEAjIycpKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXMuaW5wdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICBpZiAoKHF1ZXMuVHlwZV9fYyA9PT0gXCJEYXRlXCIpICYmIChxdWVzLklzX0RhdGVfQmFja3dhcmRfX2MgfHwgcXVlcy5Jc19EYXRlX0ZvcndhcmRfX2MpKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgZGF0ZSBiYWNrd2FyZC9mb3J3YXJkIGNvbmQnKTtcbiAgICAgICAgaWYgKHF1ZXMuSXNfRGF0ZV9CYWNrd2FyZF9fYyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgSXNfRGF0ZV9CYWNrd2FyZF9fYycpO1xuICAgICAgICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucy5kaXNhYmxlU2luY2UgPSB7XG4gICAgICAgICAgICB5ZWFyOiB0aGlzLnRvZGF5LmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgIGRheTogdGhpcy50b2RheS5nZXREYXRlKCkgKyAxLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHF1ZXMuSXNfRGF0ZV9Gb3J3YXJkX19jID09PSB0cnVlKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBJc19EYXRlX0ZvcndhcmRfX2MnKTtcbiAgICAgICAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMuZGlzYWJsZVVudGlsID0ge1xuICAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgbW9udGg6IHRoaXMudG9kYXkuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgICBkYXk6IHRoaXMudG9kYXkuZ2V0RGF0ZSgpLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN1YlF1ZXN0aW9ucy5wdXNoKHF1ZXMpO1xuICAgICAgZm9yKHZhciBpPTA7IGk8dGhpcy5zdWJRdWVzdGlvbnMubGVuZ3RoO2krKyl7XG4gICAgICAgIC8vIHRvIHNob3cvaGlkZSB0aGUgZGVwZW5kZW50IGRyb3Bkb3duIG9ubHkgZmllbGQgdXNpbmcgdGhlIGRyb3BEb3duT25seSBib29sZWFuXG4gICAgICAgIGlmKHRoaXMuc3ViUXVlc3Rpb25zW2ldLlNpemVfX2MgPT0gNCl7XG4gICAgICAgICAgdGhpcy5zdWJRdWVzdGlvbnNbaV0uZHJvcERvd25Pbmx5ID0gdHJ1ZTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgdGhpcy5zdWJRdWVzdGlvbnNbaV0uZHJvcERvd25Pbmx5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmKGFucyAhPSAnJyl7XG4gICAgICAgIGZvcih2YXIgYW4gb2YgKGFucy5zcGxpdCgnJCRAQCMjJykpKXtcbiAgICAgICAgICB2YXIgc1EgPSBuZXcgUXVlc3Rpb24oKTtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHNRLHF1ZXMpO1xuICAgICAgICAgIHNRLmlucHV0ID0gYW47XG4gICAgICAgICAgdGhpcy5zdWJRdWVzdGlvbnMucHVzaChzUSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMudmFsdWVOYW1lMSAhPSBudWxsICYmIHRoaXMudmFsdWVOYW1lMS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmJvb2tGbGFnQWNjZXB0ID0gdGhpcy52YWx1ZU5hbWUxLnNwbGl0KFwiO1wiKTtcbiAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdWJRdWVzdGlvbnMpO1xuICAgIH1cbiAgICB0aGlzLnN0cnVjdExvY2FsU3ViUXVlc3Rpb24obnVsbCk7XG4gICAgLy8gSEEgMDJGRUIyNCBPbiBFZGl0IHRvIGRpc3BsYXkgdGhlIHZhbHVlIHVzaWluZyB0aGlzXG4gICAgaWYodGhpcy5hbGxJbnB1dFZhbHVlcy5sZW5ndGggPiAwKXtcbiAgICAgIHRoaXMuc3ViUXVlc3Rpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGZvcihsZXQgc2luZ2xlSW5wdXQgb2YgdGhpcy5hbGxJbnB1dFZhbHVlcyl7XG4gICAgICAgICAgaWYoZWxlbWVudC5JZCA9PSBzaW5nbGVJbnB1dC5JZCl7XG4gICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gc2luZ2xlSW5wdXQuaW5wdXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvcHRpb25DaGFuZ2Uoc2VsVmFsdWUpIHtcbiAgICBsZXQgcmFkaW9UcmFja2luZ0lkOiBzdHJpbmcgPSBcIlwiO1xuICAgIGZvciAodmFyIG9wdCBvZiB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHMpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ29wdGlvbkNoYW5nZSBUcmFja2luZ0lkJytvcHQuVHJhY2tpbmdfSURfX2MpO1xuICAgICAgaWYgKG9wdC5WYWx1ZV9fYyA9PSBzZWxWYWx1ZSkge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgaWYnK29wdC5UcmFja2luZ19JRF9fYylcbiAgICAgICAgcmFkaW9UcmFja2luZ0lkID0gb3B0LlRyYWNraW5nX0lEX19jO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdChyYWRpb1RyYWNraW5nSWQpO1xuICAgIHRoaXMuY2xlYXJFcnJvcigpO1xuICAgIC8vIC8vY29uc29sZS5sb2coJ2luc2lkZSBvcHRpb25DaGFuZ2UgdXNpbmcgJyArIHNlbFZhbHVlKTtcblxuICAgIHRoaXMuaW5wVmFsdWUgPSBzZWxWYWx1ZTtcbiAgfVxuXG4gIGNsZWFyRXJyb3IoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLmVycm9yKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJMb2NhbFN1YlF1ZXNFcnJvcihxdWVzSWQpIHtcbiAgICBxdWVzSWQuZXJyb3IgPSBudWxsO1xuICB9XG5cbiAgaW5wdXRWYWxpZGF0ZShlKSB7XG4gICAgdmFyIGtleUNvZGUgPSBlLmtleUNvZGUgfHwgZS53aGljaDtcbiAgICAvLyBPbmx5IEFTQ0lJIGNoYXJhY3RlciBpbiB0aGF0IHJhbmdlIGFsbG93ZWRcbiAgICB2YXIgQVNDSUlDb2RlID0gKGUud2hpY2gpID8gZS53aGljaCA6IGUua2V5Q29kZTtcbiAgICBpZiAoQVNDSUlDb2RlID4gMzEgJiYgKEFTQ0lJQ29kZSA8IDQ4IHx8IEFTQ0lJQ29kZSA+IDU3KSl7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfWVsc2V7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBDQ09uQ2hhbmdlKGlucFZhbHVlOiBzdHJpbmcpIHtcblxuICAgICAgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gNykge1xuICAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDEyKSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gMTcpIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAyMikge1xuICAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xuICAgICAgfVxuXG4gIH1cblxuICBpc05vdFZhbGlkQWNjTnVtYmVyKHM6IHN0cmluZykge1xuICAgIHMgPSBzLnJlcGxhY2UoL1xccysvZywgXCJcIik7XG4gICAgcyA9ICdFUycgKyBzO1xuICAgIHZhciBpc05vdFZhbGlkU3RyID0gZmFsc2U7XG4gICAgaWYgKHMubGVuZ3RoID09IDI0KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPD0gMSAmJiAvW2EtekEtWl0vLnRlc3Qocy5jaGFyQXQoaSkpKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlZhbGlkIGNoYXI6IFwiICsgcy5jaGFyQXQoaSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPiAxICYmIC9bMC05XS8udGVzdChzLmNoYXJBdChpKSkpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVmFsaWQgbnVtZXJpYzogXCIgKyBzLmNoYXJBdChpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXNOb3RWYWxpZFN0ciA9IHRydWU7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk5vdCBhIHZhbGlkIGNoYXJcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXNOb3RWYWxpZFN0ciA9IHRydWU7XG4gICAgICAvL2NvbnNvbGUubG9nKFwiTm90IGEgdmFsaWQgYWNjIG51bWJlclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGlzTm90VmFsaWRTdHI7XG4gIH1cblxuICBjbGVhclNRRXJyb3IocXVlc0lkKSB7XG4gICAgdmFyIHNxTGlzdCA9IHRoaXMuc3ViUXVlc3Rpb25zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5JZCA9PSBxdWVzSWQpO1xuICAgIGZvciAodmFyIHNxIG9mIHNxTGlzdCkge1xuICAgICAgc3EuZXJyb3IgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHVwbG9hZEZpbGUoZXZlbnQscXVlcz86YW55KSB7XG4gICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIHVwbG9hZCcpO1xuICAgIHRoaXMuY2xlYXJFcnJvcigpO1xuICAgIHRoaXMuZmlsZVR5cGVJbmNvcnJlY3QgPSBmYWxzZTtcbiAgICB2YXIgbG9jYWwgPSB0aGlzO1xuICAgIGxvY2FsLmF0dGFjaG1lbnQgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG4gICAgLy8gVmFsaWRhdGUgdGhlIGZpbGUgZXh0ZW5zaW9uXG4gICAgLy9jb25zb2xlLmxvZyhsb2NhbC5hdHRhY2htZW50KTtcbiAgICBsZXQgZmlsZU5hbWVXaXRoVHlwZTogc3RyaW5nID1cbiAgICAgIGxvY2FsLmF0dGFjaG1lbnQgJiYgbG9jYWwuYXR0YWNobWVudC5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKFxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuanBnXCIpICYmXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5wbmdcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLnBkZlwiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuanBlZ1wiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuaGVpY1wiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuaGVpZlwiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSlBHXCIpICYmXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5QTkdcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLlBERlwiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSlBFR1wiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSEVJQ1wiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSEVJRlwiKVxuICAgICkge1xuICAgICAgbG9jYWwuZmlsZVR5cGVJbmNvcnJlY3QgPSB0cnVlO1xuICAgIH1cbiAgICAvLyBSZXR1cm4gd2hlbiB0aGUgZmlsZSB0eXBlIGlzIGluY29ycmVjdFxuICAgIGlmIChsb2NhbC5maWxlVHlwZUluY29ycmVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZmlsZUNvbnRlbnQ6IGFueTtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmaWxlQ29udGVudCA9IHJlYWRlci5yZXN1bHQ7XG4gICAgICBsb2NhbC5maWxlRXhjZWVkZWRMaW1pdCA9IGxvY2FsLmF0dGFjaG1lbnQuc2l6ZSA+IDMyNDI4ODA7IC8vVmFsaWRhdGluZyBmaWxlIHNpemVcbiAgICAgIC8vIFVwbG9hZCB0aGUgZmlsZSB0byBTYWxlc2ZvcmNlIHdoZW4gdGhlIGxpbWl0IGlzIHdpdGhpbiByYW5nZVxuICAgICAgaWYgKCFsb2NhbC5maWxlRXhjZWVkZWRMaW1pdCkge1xuICAgICAgICBsZXQgZmlsZVdyYXBwZXIgPSBuZXcgQXR0YWNobWVudFdyYXBwZXIoKTtcbiAgICAgICAgZmlsZVdyYXBwZXIucGFyZW50SWQgPSBsb2NhbC5hYkl0ZW0uSWQ7XG4gICAgICAgIGZpbGVXcmFwcGVyLmZpbGVOYW1lID0gbG9jYWwuYXR0YWNobWVudC5uYW1lO1xuICAgICAgICBmaWxlV3JhcHBlci5maWxlQ29udGVudCA9IGZpbGVDb250ZW50O1xuICAgICAgICBsb2NhbC5jcmVhdGVBdHRhY2htZW50KGZpbGVXcmFwcGVyKTtcbiAgICAgICAgcXVlcy5pbnB1dCA9IGZpbGVXcmFwcGVyLmZpbGVOYW1lO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5zcGlubmVyLnNob3codGhpcy5zcGlubmVyTmFtZSk7XG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZXZlbnQudGFyZ2V0LmZpbGVzWzBdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3VjY2Vzc0F0dGFjaG1lbnRDcmVhdGUgPSAocmVzcG9uc2UpID0+IHtcbiAgICBsZXQgY3JlYXRlZEF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQgPSBuZXcgQXR0YWNobWVudChcbiAgICAgIHJlc3BvbnNlLmF0dGFjaG1lbnRJZCxcbiAgICAgIHJlc3BvbnNlLmF0dGFjaG1lbnROYW1lLFxuICAgICAgdGhpcy5hdHRhY2htZW50Lmxhc3RNb2RpZmllZERhdGVcbiAgICApO1xuICAgIHRoaXMuYXR0YWNobWVudHMucHVzaChjcmVhdGVkQXR0YWNobWVudCk7XG4gICAgdGhpcy5hdHRhY2htZW50c01hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQsIHRoaXMuYXR0YWNobWVudHMpO1xuICAgIHRoaXMuc3Bpbm5lci5oaWRlKHRoaXMuc3Bpbm5lck5hbWUpO1xuICB9O1xuXG4gIHByaXZhdGUgc3VjY2Vzc0F0dGFjaG1lbnREZWxldGUgPSAocmVzcG9uc2UpID0+IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYXR0YWNobWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRzW2ldLmF0dGFjaG1lbnRJZCA9PT0gdGhpcy5hdHRhY2htZW50SWQpIHtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50cy5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGUgPSAocmVzcG9uc2UpID0+IHtcbiAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGUnKTtcbiAgfTtcblxuICBwcml2YXRlIGZhaWx1cmVBdHRhY2htZW50RGVsZXRlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVBdHRhY2htZW50RGVsZXRlJyk7XG4gIH07XG5cbiAgaGFuZGxlU3VibWl0Q2xpY2soKSB7XG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLlN1Ym1pdF9UcmFja2luZ19JRF9fYyk7XG4gICAgdGhpcy51cGRhdGVBbnN3ZXJCb29rKHRoaXMuYWJJdGVtLklkKTtcbiAgfVxuXG4gIGhhbmRsZUNhbmNlbENsaWNrKCkge1xuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5DYW5jZWxfVHJhY2tpbmdfSURfX2MpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBdHRhY2htZW50ID0gKGZpbGVXcmFwcGVyOiBhbnkpID0+IHtcbiAgICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xuICAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgIC8vICAgW1wiQXR0YWNobWVudFwiLCBcImNyZWF0ZVwiLCBKU09OLnN0cmluZ2lmeShmaWxlV3JhcHBlcildLFxuICAgICAgLy8gICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50Q3JlYXRlLFxuICAgICAgLy8gICB0aGlzLmZhaWx1cmVBdHRhY2htZW50Q3JlYXRlXG4gICAgICAvLyApO1xuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQXR0YWNobWVudCcsJ2NyZWF0ZScsIEpTT04uc3RyaW5naWZ5KGZpbGVXcmFwcGVyKSxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCkpLnN1YnNjcmliZShcbiAgICAgIChkYXRhKT0+e1xuICAgICAgICBjb25zb2xlLmxvZygndXBkYXRlZCBzdWNjdXNzZnVsbHknKTtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgIHRoaXMuc3VjY2Vzc0F0dGFjaG1lbnRDcmVhdGUoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGUoZXJyb3IpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFZEIDE1RkVCMjQgLSB1c2VkIHByb2Nlc3NOZXcgbWV0aG9kIFxuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuIC8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAgIFwiTnh0Q29udHJvbGxlci5uZXdQcm9jZXNzXCIsXG4gICAgICAgIFtcIkF0dGFjaG1lbnRcIiwgXCJjcmVhdGVcIiwgSlNPTi5zdHJpbmdpZnkoZmlsZVdyYXBwZXIpLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSwnJ10sXG4gICAgICAgIHRoaXMuc3VjY2Vzc0F0dGFjaG1lbnRDcmVhdGUsXG4gICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50SWQ6IHN0cmluZykge1xuICAgIHRoaXMuYXR0YWNobWVudElkID0gYXR0YWNobWVudElkO1xuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdChcImRlbGV0ZUF0dGFjaG1lbnRcIik7XG4gICAgdGhpcy5kZWxldGVTRkF0dGFjaG1lbnQoYXR0YWNobWVudElkKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU0ZBdHRhY2htZW50ID0gKGZpbGVJZDogc3RyaW5nKSA9PiB7XG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgIC8vICAgdGhpcy50a24sXG4gICAgICAvLyAgIFtcIkF0dGFjaG1lbnRcIiwgXCJkZWxldGVcIiwgZmlsZUlkXSxcbiAgICAgIC8vICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudERlbGV0ZSxcbiAgICAgIC8vICAgdGhpcy5mYWlsdXJlQXR0YWNobWVudERlbGV0ZVxuICAgICAgLy8gKTtcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0F0dGFjaG1lbnQnLCdkZWxldGUnLGZpbGVJZCAsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApKS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YSk9PntcbiAgICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZWQgc3VjY3Vzc2Z1bGx5Jyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlKEpTT04ucGFyc2UoZGF0YSkpXG4gICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50RGVsZXRlKGVycm9yKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHF1ZXN0aW9uIGJvb2tzJywgZXJyb3IpO1xuICAgICAgfVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZCBcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcblxuICAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgICBcIk54dENvbnRyb2xsZXIubmV3UHJvY2Vzc1wiLFxuICAgICAgICBbXCJBdHRhY2htZW50XCIsIFwiZGVsZXRlXCIsIGZpbGVJZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksJyddLFxuICAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlLFxuICAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50RGVsZXRlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldEZpbGVOYW1lKGZpbGVOYW1ld2l0aElkYW5kVHlwZSkge1xuICAgIC8vdHJ1bmNhdGUgZmlsZSBwYXRoXG4gICAgdmFyIGZpbGVOYW1lV2l0aFR5cGUgPSBmaWxlTmFtZXdpdGhJZGFuZFR5cGUuc3Vic3RyKFxuICAgICAgZmlsZU5hbWV3aXRoSWRhbmRUeXBlLmluZGV4T2YoXCI6Ojo6XCIpICsgNFxuICAgICk7XG4gICAgcmV0dXJuIGZpbGVOYW1lV2l0aFR5cGU7IC8vZmlsZU5hbWVXaXRoVHlwZS5yZXBsYWNlKC9eKC4qKFxcL3xcXFxcKSkoLispJC8sICckMycpO1xuICB9XG4gIGZpbGVVSSgpIHtcbiAgICBpZiAodGhpcy5hdHRhY2htZW50cy5sZW5ndGggPT09IDApIHtcbiAgICB9XG4gIH1cblxuICAvL1VwZGF0ZSBmdW5jdGlvbiBmb3IgY2F0ZWdvcml6YXRpb25cbiAgLy8gc3RlcHBlckNhdGVnKCkge1xuICAvLyAgIHRoaXMuZmlyc3RGb3JtR3JvdXAgPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XG4gIC8vICAgICBmaXJzdEN0cmw6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgLy8gICB9KTtcbiAgLy8gICB0aGlzLnNlY29uZEZvcm1Hcm91cCA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHtcbiAgLy8gICAgIHNlY29uZEN0cmw6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgLy8gICB9KTtcblxuICAvLyB9XG5cbiAgLy8gVXBkYXRlIEZ1bmN0aW9uIGZvciB0aGUgUHJvZ3Jlc3MgQmFyXG4gIHVwZGF0ZVByb2dyZXNzKCkge1xuICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgPT09IHRydWUpIHtcbiAgICAgIGxldCBqID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucG9zc2liaWxpdGllcy50b3RhbDsgaSsrKSB7XG4gICAgICAgIHZhciBwYXRocG9zcyA9IE9iamVjdC52YWx1ZXModGhpcy5wb3NzaWJpbGl0aWVzLnBhdGhzW2ldLnF1ZXN0aW9ucyk7XG4gICAgICAgIGlmIChwYXRocG9zc1t0aGlzLnBhdGhxdWVzdGlvbl0gPT09IHRoaXMuY3VycmVudE5hbWUpIHtcbiAgICAgICAgICBqLnB1c2goaSk7XG4gICAgICAgICAgdGhpcy5jaGVjayA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jaGVjayA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoai5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IGpbMF07XG4gICAgICB9XG4gICAgICBpZiAoai5sZW5ndGggPiAxKSB7XG4gICAgICAgIHZhciB3aWR0aCA9XG4gICAgICAgICAgOTAgKiAodGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aCAvIHRoaXMucG9zc2liaWxpdGllcy5tYXhRdWVzdGlvbnMpO1xuICAgICAgICB0aGlzLnByb2dyZXNzU3R5bGUgPSBNYXRoLnJvdW5kKHdpZHRoKSArIFwiJVwiO1xuICAgICAgfSBlbHNlIGlmIChqLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB2YXIgd2lkdGggPVxuICAgICAgICAgIDkwICpcbiAgICAgICAgICAodGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aCAvXG4gICAgICAgICAgICB0aGlzLnBvc3NpYmlsaXRpZXMucGF0aHNbdGhpcy5jb3VudF0uY291bnQpO1xuICAgICAgICB0aGlzLnByb2dyZXNzU3R5bGUgPSBNYXRoLnJvdW5kKHdpZHRoKSArIFwiJVwiO1xuICAgICAgfVxuICAgICAgdGhpcy5wZXJjZW50ID0gK01hdGgucm91bmQod2lkdGgpO1xuICAgIH1cbiAgfVxuXG4gIHRvd25OYW1lKGFyZWEpIHtcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBhcmVhLnRvd247XG4gICAgLy9jb25zb2xlLmxvZygndGhpcyB2YWx1ZT0nK3RoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xuICB9XG5cbiAgZ2V0VG93bkxvY2FsKCkge1xuICAgIHRoaXMudGVtcG9BZGRyZXNzID0gW107XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKHZhciB2YWwgb2YgdGhpcy5sb2NhbGFkZHJlc3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHZhbC50b3duLnN1YnN0cmluZygwLCB0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoKSA9PSB0aGlzLnNlbGVjdGVkVmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyh2YWwuY291bnRyeSlcbiAgICAgICAgICB0aGlzLnRlbXBvQWRkcmVzcy5wdXNoKHZhbCk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygndGVtcG9BZGRyZXNzJyt0aGlzLnRlbXBvQWRkcmVzcylcbiAgICAgICAgICBpZiAodGhpcy50ZW1wb0FkZHJlc3MubGVuZ3RoID09IDYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlbGVjdExpc3RcIikuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICB0aGlzLnNldFNlYXJjaExpc3RXaWR0aCgpO1xuICB9XG5cbiAgY2xlYXJMaXN0KCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy50ZW1wb0FkZHJlc3MgPSBbXTtcbiAgICB9LCA1MDApO1xuICB9XG5cbiAgc2V0U2VhcmNoTGlzdFdpZHRoKCkge1xuICAgIC8vdG8gcmVzaXplIHNlYXJjaCBsaXN0IGJhc2VkIG9uIHRoZSBzY3JlZW4gc2l6ZVxuICAgIGNvbnN0IHNlYXJjaEJveFdpZHRoID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXV0b2NvbXBsZXRlLWlucHV0XCIpLm9mZnNldFdpZHRoO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VsZWN0TGlzdFwiKS5zdHlsZS53aWR0aCA9IHNlYXJjaEJveFdpZHRoICsgXCJweFwiO1xuICB9XG5cbiAgICBnZXRDb2RlKCl7XG4gICAgICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yICh2YXIgdmFsIG9mIHRoaXMuYWxsQWRkcmVzcykge1xuICAgICAgICAgIGlmICh2YWwuemlwQ29kZS5zdWJzdHJpbmcoMCwgdGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUubGVuZ3RoKSA9PSB0aGlzLnNlbGVjdGVkUG9zdGFsY29kZSkge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh2YWwuY291bnRyeSlcbiAgICAgICAgICAgIHRoaXMudGVtcG9BZGRyZXNzLnB1c2godmFsKTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3RlbXBvQWRkcmVzcycrdGhpcy50ZW1wb0FkZHJlc3MpXG4gICAgICAgICAgICBpZiAodGhpcy50ZW1wb0FkZHJlc3MubGVuZ3RoID09IDYpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlbGVjdExpc3RcIikuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIHRoaXMuc2V0U2VhcmNoTGlzdFdpZHRoKCk7XG4gICAgfVxuICAgIGdldFBvc3RhbGNvZGUodmFsdWUpe1xuICAgICB0aGlzLnBsYWNlcz1bXTtcbiAgICAgdGhpcy5wcm92aW5jZT1bXTtcbiAgICAgIHZhciBwcm92aW5jZTtcbiAgICAgIHZhciB0b3duO1xuICAgICAgdGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUgPSB2YWx1ZS56aXBDb2RlO1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWUuY291bnRyeTtcbiAgICAgIHRoaXMudGVtcG9BZGRyZXNzPVtdO1xuXG4gXG4gICAgICBmb3IodmFyIHZhbCBvZiB0aGlzLmxvY2FsYWRkcmVzcyl7XG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlID09IHZhbC56aXBDb2RlICl7XG4gICAgICAgICAgdGhpcy5wbGFjZXMucHVzaCh2YWwpO1xuICAgICAgICAgIHRoaXMucHJvdmluY2UucHVzaCh2YWwpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbC5jb3VudHJ5O1xuICAgICAgICAgIHByb3ZpbmNlID0gdmFsLnByb3ZpbmNlXG4gICAgICAgICAgdG93biA9IHZhbC50b3duO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZih0aGlzLnBsYWNlcy5sZW5ndGggPT0gMSl7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvdmluY2UgPXByb3ZpbmNlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2l0eSA9IHRvd247XG4gICAgICB9ZWxzZSBpZih0aGlzLnBsYWNlcy5sZW5ndGggPjEgfHwgdGhpcy5wbGFjZXMubGVuZ3RoID09MCl7XG4gICAgICAgIFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaXR5ID0nJztcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvdmluY2U9Jyc7XG4gICAgICB9XG4gICAgfVxuICAgIGNsb3NlRHJvcGRvd24oKSB7XG4gICAgICBpZih0aGlzLnNlbGVjdGVkUG9zdGFsY29kZS5sZW5ndGggPT0gNSl7XG4gICAgICAgIHRoaXMuZ2V0UG9zdGFsY29kZSh7emlwQ29kZTp0aGlzLnNlbGVjdGVkUG9zdGFsY29kZX0pO1xuICAgICAgfVxuXG4gICBzZXRUaW1lb3V0KCgpPT4ge1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdExpc3QnKS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgfSwgNTAwKTtcbiAgIH1cblxuXG4gICAvL1BsdXMgYnV0dG9uIGltcGxlbWVudGF0aW9uLlxuICAgc3RydWN0TG9jYWxTdWJRdWVzdGlvbihxdWVzOiBMb2NhbFF1ZXN0aW9uKXtcbiAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIHN0cnVjdExvY2FsU3ViUXVlc3Rpb24nKTtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnN1YlF1ZXN0aW9ucy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBsb2NhbFN1YlF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLklkID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uSWQ7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5OYW1lID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uTmFtZTtcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLlF1ZXN0aW9uX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uUXVlc3Rpb25fX2M7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5RdWVzdGlvbl9UZXh0X19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uUXVlc3Rpb25fVGV4dF9fYztcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLlR5cGVfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5UeXBlX19jO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uVGl0bGVfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5UaXRsZV9fYztcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLlN1YlRpdGxlX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uU3ViVGl0bGVfX2M7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5Jc19PcHRpb25hbF9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLklzX09wdGlvbmFsX19jO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uRXJyb3JfTWVzc2FnZV9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLkVycm9yX01lc3NhZ2VfX2M7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLkdyb3VwX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uR3JvdXBfX2M7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5RdWVzdGlvbl9Ob19fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLlF1ZXN0aW9uX05vX19jO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uQWxsb3dlZF9GaWxlX0V4dGVuc2lvbnNfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5BbGxvd2VkX0ZpbGVfRXh0ZW5zaW9uc19fYztcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLnVuaXF1ZVN1YlFJZCA9ICcnK3RoaXMuc3ViUXVlc3Rpb25zW2ldLklkICsgaTsgXG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5pbnB1dCA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLmlucHV0O1xuICAgICAgICAgIHRoaXMubG9jYWxTdWJRdWVzdGlvbnMucHVzaChsb2NhbFN1YlF1ZXN0aW9uKTtcbiAgICAgIH1cbiAgLy8gY29uc29sZS5sb2coJ2ZpbmFsIGxvY2FsIHN1YiBxdWVzdGlvbnMnKTtcbiAgLy8gY29uc29sZS5sb2codGhpcy5sb2NhbFN1YlF1ZXN0aW9ucyk7XG4gIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLHRoaXMubG9jYWxTdWJRdWVzdGlvbnMpO1xuICB0aGlzLmxvY2FsU3ViUXVlc3Rpb25zID0gW107XG4gIC8vIGNvbnNvbGUubG9nKCdmaW5hbCBrZXkgbG9jYWxTdWJRTWFwIG1hcCcpO1xuICAvLyBjb25zb2xlLmxvZyh0aGlzLmxvY2FsU3ViUU1hcCk7XG4gIH1cblxuICBhZGRJbnB1dEJveChxdWVzdGlvbjogTG9jYWxRdWVzdGlvbiwgaW5kZXg6IG51bWJlcil7XG4gICAgdmFyIGFycmEgPSB0aGlzLmxvY2FsU3ViUU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xuICAgIHZhciBxSW5kZXggPSBhcnJhLmluZGV4T2YocXVlc3Rpb24pO1xuICAgIHZhciBxdWVzOiBMb2NhbFF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcbiAgICBPYmplY3QuYXNzaWduKHF1ZXMsIHF1ZXN0aW9uKTtcbiAgICAvL2NvbnNvbGUubG9nKChxdWVzLnVuaXF1ZVN1YlFJZCkuc3Vic3RyaW5nKDE4LCAocXVlcy51bmlxdWVTdWJRSWQpLmxlbmd0aCkrMSk7XG4gICAgaWYodGhpcy5rZXlJbmRleCA9PSBpbmRleCl7XG4gICAgICBxdWVzLnVuaXF1ZVN1YlFJZCA9IHF1ZXMuSWQgKyAoU3RyaW5nKGluZGV4KzEpKTtcbiAgICAgIHRoaXMua2V5SW5kZXgrKztcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMua2V5SW5kZXgrKztcbiAgICAgIHF1ZXMudW5pcXVlU3ViUUlkID0gcXVlcy5JZCArIChTdHJpbmcodGhpcy5rZXlJbmRleCkpO1xuICAgIH1cbiAgICBxdWVzLmlucHV0ID0gJyc7XG4gICAgYXJyYS5zcGxpY2UocUluZGV4KzEsIDAsIHF1ZXMpO1xuXG4gICAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLGFycmEpO1xuICAgIC8vY29uc29sZS5sb2codGhpcy5sb2NhbFN1YlFNYXApO1xuICB9XG5cbiAgcmVtb3ZlQWRkcmVzcyhxdWVzVW5pcXVlSWQ6IHN0cmluZywgcU5hbWU6IHN0cmluZykge1xuICAgIC8vY29uc29sZS5sb2cocXVlc1VuaXF1ZUlkKVxuICAgIHZhciB2YWwgPSB0aGlzLmxvY2FsU3ViUU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xuICAgIHZhciBrZXlpbmRleCA9IDA7XG5cbiAgICBmb3IobGV0IGk9MDsgaTx2YWwubGVuZ3RoOyBpKyspe1xuICAgICAgaWYodmFsW2ldLk5hbWUgPT0gcU5hbWUpe1xuICAgICAgICBrZXlpbmRleCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKHRoaXMubG9jYWxTdWJRTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkgJiYga2V5aW5kZXggPjEpe1xuICAgICAgdmFyIHJlb3JkZXIgPSB2YWwuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnVuaXF1ZVN1YlFJZCAhPT0gcXVlc1VuaXF1ZUlkKVxuICAgICAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLHJlb3JkZXIpO1xuICAgICAga2V5aW5kZXgtLTtcbiAgICB9XG4gIH1cblxuICBnZXRMb2NhbFN1YlF1ZXN0aW9ucyhpZDogU3RyaW5nKXtcbiAgICByZXR1cm4gdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KGlkKTtcbiAgfVxuXG4gIC8vU2luZ2xlIEFkZCBidXR0b24gZnVuY3Rpb25hbGl0eSBmb3IgTGlzdCB0eXBlXG5BZGQocXVlc3Rpb246IExvY2FsUXVlc3Rpb24pe1xuICAgIHRoaXMuYWRkRmxhZyA9ICBmYWxzZTtcbiAgICB2YXIgYXJyYSA9IHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XG4gICAgdmFyIGluZGV4ICA9IGFycmEubGVuZ3RoO1xuICAgIHZhciBhID0gYXJyYS5zbGljZSgtMSkucG9wKCk7XG4gICAgdGhpcy5pbmRleENvdW50ICA9IGEuUXVlc3Rpb25fTm9fX2M7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmluZGV4Q291bnQgOyBpKyspIHtcbiAgICAgIHZhciBxdWVzOiBMb2NhbFF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcbiAgICAgIE9iamVjdC5hc3NpZ24ocXVlcywgcXVlc3Rpb25baV0pO1xuICAgICAgdGhpcy5rZXlJbmRleCsrO1xuICAgICAgcXVlcy51bmlxdWVTdWJRSWQgPSBxdWVzLklkICsgKFN0cmluZyh0aGlzLmtleUluZGV4KSk7XG4gICAgICBxdWVzLmlucHV0ID0gJyc7XG4gICAgICBhcnJhLnNwbGljZShpbmRleCsodGhpcy5pbmRleENvdW50LTEpLCAwLCBxdWVzKTtcbiAgICB0aGlzLmxvY2FsU3ViUU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQsYXJyYSk7XG4gICAgfSAgXG4gICAgdGhpcy5hZGRGbGFnID0gdHJ1ZTtcbiAgfVxuICBcbiAgaGFuZGxlTG9jYXRpb25TZWxlY3RlZChsb2NhdGlvbjogYW55LHF1ZXM6YW55KSB7XG4gICAgcXVlcy5pbnB1dCA9IGxvY2F0aW9uO1xuICB9XG5cbiAgc2VsZWN0ZWRJbnB1dChpbnB1dDphbnkgLHF1ZXM6YW55KXsgXG4gICAgcXVlcy5pbnB1dCA9IGlucHV0O1xuICB9XG5cbiAgaGFuZGxlVGV4dGFyZWFWYWx1ZUNoYW5nZSh2YWx1ZSA6c3RyaW5nKXtcbiAgICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgdGV4dC1hcmVhIHRleHQ6JywgdmFsdWUpO1xuICB9XG4gIGdldERhdGEoZGF0YTphbnkpe1xuICAgY29uc29sZS5sb2coJ3RhYmxlIGRhdGEnLGRhdGEpO1xuICB9XG5cbiAgZGVwZW5kZW50Q2hhbmdlKHZhbHVlOmFueSl7XG4gIHRoaXMubmV4dFZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBkaXNwbGF5RGF0ZShkYXRlU2VsZWN0ZWQ6IGFueSxxdWVzOmFueSl7XG4gICAgLy8gUGFyc2UgdGhlIGRhdGUgc3RyaW5nIHVzaW5nIG1vbWVudCBhbmQgYXNzaWduIGl0IHRvIHRoaXMuc2VsZWN0ZWREYXRlXG4gICAgcXVlcy5pbnB1dCA9IG1vbWVudChkYXRlU2VsZWN0ZWQudmFsdWUgLCAnWVlZWS1NTS1ERCBISDptbTpzcycpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXRLZXkoaXRlbTogYW55KTogYW55IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoaXRlbSlbMF07XG4gIH1cbiAgXG4gIGdldFZhbHVlKGl0ZW06IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoaXRlbSlbMF07XG4gIH1cbn0iLCI8IS0tIFNwaW5uZXIgLS0+XG48bmd4LXNwaW5uZXIgW25hbWVdPVwic3Bpbm5lck5hbWVcIiBbdHlwZV09XCJzcGlubmVyVHlwZVwiPjwvbmd4LXNwaW5uZXI+XG48IS0tIGN1c3RvbSBsb2FkZXIgLS0+XG48YXBwLWxvYWRlcj48L2FwcC1sb2FkZXI+XG48IS0tIEJhY2sgUHJvY2Vzc2luZyAtLT5cbjxkaXYgKm5nSWY9XCJiYWNraWNvbiA9PSBmYWxzZVwiID5cbiAgPGRpdiBjbGFzcz1cImJhY2tpY29uXCIgW3N0eWxlLnZpc2liaWxpdHldPVwicXVlc3Rpb25TdGFjay5sZW5ndGggPjAgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiPlxuICAgIDxidXR0b24gKGNsaWNrKT1cImhhbmRsZUJhY2tDbGljaygpXCIgW2NsYXNzXT1cIiBhYkl0ZW0/LlN0YXR1c19fYyA9PSAnQ29tcGxldGVkJyA/ICdzdW1tYXJ5LXZvbHZlcic6J2FwcC1iYWNrMSdcIj5cbiAgICA8aW1nIGNsYXNzPVwiaWNvbi1hcnJvdy1iYWNrXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWFycm93LWJhY2sucG5nXCIgYWx0PVwiU2Nyb2xsIGRvd25cIj4ge3sgcWJJdGVtPy5CYWNrX19jIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gUXVlc3Rpb24gSGFubGRpbmcgLS0+XG48ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtXCIgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWxfX2MgPyAncXVlc3Rpb25kaXYxJyA6ICdxdWVzdGlvbmRpdjEgcGFkZC1ib3R0b20nXCI+XG4gIDwhLS0gUHJvZ3Jlc3MgQmFyICYgVGl0bGUgLS0+XG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uVGl0bGVfX2MgJiYgcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxuICAgIDxoMSBjbGFzcz1cImhlYWRlcjFcIj57eyBxdWVzdGlvbkl0ZW0/LlRpdGxlX19jIH19PC9oMT5cbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyMlwiPnt7IHF1ZXN0aW9uSXRlbT8uU3ViVGl0bGVfX2MgfX08L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBQcm9ncmVzcyAmIEdyb3VwaW5nIC0tPlxuICA8ZGl2IFtuZ0NsYXNzXT1cInsgcXVlc3Rpb25kaXYyOiAhcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgIDwhLS0gUGllIENoYXJ0IFByb2dyZXNzIC0tPlxuICAgIDxkaXYgW25nQ2xhc3NdPVwieyBiZ0NvbG9yOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCI+XG4gICAgICA8ZGl2IGlkPVwicHJvZ3Jlc3NcIiAqbmdJZj1cInFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jXCI+XG4gICAgICAgIDxjaXJjbGUtcHJvZ3Jlc3MgY2xhc3M9XCJ0aXRsZWJhclwiIFtwZXJjZW50XT1cInRoaXMucGVyY2VudFwiIFtyYWRpdXNdPVwiNDBcIiBbc3BhY2VdPVwiLTRcIiBbb3V0ZXJTdHJva2VXaWR0aF09XCI0XCJcbiAgICAgICAgW2lubmVyU3Ryb2tlV2lkdGhdPVwiNFwiIFtvdXRlclN0cm9rZUNvbG9yXT1cIicjZTBiMWIwJ1wiIFtpbm5lclN0cm9rZUNvbG9yXT1cIicjZTdlOGVhJ1wiIFthbmltYXRpb25dPVwidHJ1ZVwiIFtiYWNrZ3JvdW5kUGFkZGluZ109IFwiMFwiXG4gICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPSBcIicjZGQyZTEzJ1wiIFtiYWNrZ3JvdW5kR3JhZGllbnRTdG9wQ29sb3JdPVwiJyNmOWJmYmQnXCIgW3RpdGxlQ29sb3JdPVwiJyNmM2VkZWQnXCIgXG4gICAgICAgIGNsYXNzPVwibmctc3Rhci1pbnNlcnRlZFwiIFt0aXRsZV09XCJ0aGlzLnBlcmNlbnQrJyUnXCIgW3Nob3dTdWJ0aXRsZV09XCJmYWxzZVwiIFtzaG93QmFja2dyb3VuZF09XCJ0cnVlXCIgW2FuaW1hdGlvbkR1cmF0aW9uXT1cIjMwMFwiXG4gICAgICAgIFtzdGFydEZyb21aZXJvXT1cImZhbHNlXCIgW3Jlc3BvbnNpdmVdPVwiZmFsc2VcIiA+XG4gICAgICAgIDwvY2lyY2xlLXByb2dyZXNzPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFNob3cgdGhlIEdyb3VwL01vZHVsZSByZWxhdGVkIHRvIHRoZSBQcm9ncmVzcyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLkdyb3VwX19jICYmIHFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IHF1ZXN0aW9uYWxpZ246ICFxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibGFyZ2VUaXRsZVwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJteXQtZm9udDYgbXl0LXRleHQzXCI+XG4gICAgICAgICAge3sgcXVlc3Rpb25JdGVtPy5Hcm91cF9fYyB9fVxuICAgICAgICA8L2gzPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlN1Yl9UZXh0X19jICE9ICfCv0VuIHF1w6kgcGHDrXMgb2N1cnJpw7M/J1wiIGNsYXNzPVwibXl0LWZvbnQ1IG15dC10ZXh0MVwiPnt7cXVlc3Rpb25JdGVtPy5TdWJfVGV4dF9fY319PC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uU3ViX1RleHRfX2MgPT09ICfCv0VuIHF1w6kgcGHDrXMgb2N1cnJpw7M/J1wiIGNsYXNzPVwibXl0LWZvbnQxMCBteXQtdGV4dDJcIj57e3F1ZXN0aW9uSXRlbT8uU3ViX1RleHRfX2N9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gUXVlc3Rpb24gSGFuZGxpbmcgLS0+XG4gIDxkaXYgY2xhc3M9XCJxdWVzdGlvbmRpdjJcIj5cbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlF1ZXN0aW9uX1RleHRfX2NcIj5cbiAgICAgIDxwIGNsYXNzPVwicXVlc3Rpb25TdHlsZVwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MpXCI+XG4gICAgICAgIHt7cXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jfX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIFRpdGxlIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5Jc19UaXRsZV9fY1wiPlxuICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5UeXBlX19jICE9ICdCb29rJyAmJiBxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fTm9fX2MhPSc2JyAmJiBxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fTm9fX2MhPSc5J1wiPiBcbiAgICAgICAgPGgzIGNsYXNzPVwicXVlc3Rpb25hbGlnbiAgbXl0LWZvbnQzIG15dC1hbGlnbiBteXQtdGV4dDRcIiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jKVwiPlxuICAgICAgICAgIHt7cXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jfX1cbiAgICAgICAgPC9oMz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgICA8IS0tIEhBIDMxLUpBTi0yNCBSZW1vdmVkIHRoZSB1bndhbnRlZCBzdHlsaW5nIGNsYXNzIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cIiFxdWVzdGlvbkl0ZW0uSXNfVGl0bGVfX2NcIiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbF9fYyA/ICdoZWFkZXItc3R5bGUnIDogJ3F1ZXN0aW9uLWYtc2l6ZSdcIj5cbiAgICAgIDxkaXYgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fYylcIiA+XG4gICAgICAgIHt7IHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fYyB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuXG4gICAgPCEtLSBUaGlzIHNob3VsZCBiZSByZW1vdmVkIHdpdGggQ3VzdG9tIFN0eWxpbmcgLSBNUiAtIDExQVVHMjMgLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlR5cGVfX2MgPT0gJ0Jvb2snXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlF1ZXN0aW9uX05vX19jPT0nNidcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwibXl0LTMyMVwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MpXCI+XG4gICAgICAgICAge3sgcXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jIH19XG4gICAgICAgIDwvaDM+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gICAgXG4gICAgPCEtLSBUaGlzIHNob3VsZCBiZSByZW1vdmVkIHdpdGggQ3VzdG9tIFN0eWxpbmcgLSBNUiAtIDExQVVHMjMgLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlR5cGVfX2MgPT0gJ0ZpbGUnIFwiPlxuICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9Ob19fYz09JzknXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cIm15dC0zNDVcIiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jKVwiPlxuICAgICAgICAgIHt7cXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jfX1cbiAgICAgICAgPC9oMz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgPC9kaXY+XG5cbiAgPCEtLSBBZGRpdGlvbmFsIEluZm8gLS0+XG4gIDwhLS0gVGhlIGJlbG93IGNvZGUgY2FuIGJlIHdyaXR0ZW4gZWZmZWN0aXZlbHkgbmVzdGVkIG5nSWYgZm9yIFJpY2ggVGV4dCAmIE90aGVyIG9udyBmb3IgUHJvZ3Jlc3MgQmFyIC0tPlxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLkFkZGl0aW9uYWxfUmljaF9fYyAmJiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCIgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiYWRkaXRpb25hbCBcIiBbaW5uZXJIVE1MXT1cImlubmVyaHRtbFwiPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5BZGRpdGlvbmFsX1JpY2hfX2MgJiYgIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5mby1hbGVydCBxdWVzLWFsZXJ0MVwiPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1pbmZvIGZhLTN4IGlwb3NpdGlvbiBpY29sb3JcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mb2RpdlwiIFtpbm5lckhUTUxdPVwiaW5uZXJodG1sXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRHJvcGRvd24tLT5cbiAgPGRpdiAqbmdJZj1cImRyb3Bkb3duRmxhZ1wiID5cbiAgICA8ZGl2IGNsYXNzPVwiZGlzLWZsZXhcIj5cbiAgICAgIDxzZWxlY3QgXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnZHQtbGluZSBteXQtYWxpZ24zIG15dC1hbGlnbjIgZHBEb3duIGRyb3Bib3ggZG93bjEgbXl0LWRyb3Bib3ggbXl0LWJvcmRlci1yIG15dC1mb250MSc6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jLFxuICAgICAgICAgICdjdXN0b20tc2VsZWN0JzogIXFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jXG4gICAgICAgIH1cIiBjbGFzcz1cIm1yLXNtLTIgZGQtaGVpZ2h0IGRyb3Bib3ggXCIgIGlkPVwiZHJvcGRvd25cIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgKGNoYW5nZSk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDAgPyAnI2ZmZicgOiAnJ1xuICAgICAgICB9fVwiIHN0eWxlLmNvbG9yPVwie3sgcXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnIDogJycgfX1cIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAyMS41cmVtICFpbXBvcnRhbnQ7XCI+XG4gICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdCBvZiBxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzXCIgY2xhc3M9XCJvcHRpb25cIiB2YWx1ZT1cInt7IG9wdC5WYWx1ZV9fYyB9fVwiPlxuICAgICAgICAgIHt7IG9wdC5WYWx1ZV9fYyB9fVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIi5cIiBkaXNhYmxlZCBoaWRkZW4+e3sncGxlYXNlTWFrZUNob2ljZScgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19PC9vcHRpb24+XG4gICAgICA8L3NlbGVjdD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBSYWRpbyAtLT5cbiAgPGRpdiAqbmdJZj1cInJhZGlvRmxhZyB8fCBkYXRhRmxhZ1wiIGNsYXNzPVwiXCI+XG4gICAgPGRpdiAqbmdJZj1cInRoaXMucXVlc3Rpb25JdGVtLmVycm9yXCIgY2xhc3M9XCJjb25kLWRpdjJcIj5cbiAgICAgIHt7IHF1ZXN0aW9uSXRlbT8uRXJyb3JfTWVzc2FnZV9fYyB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkaXMtZmxleFwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0IG9mIHF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHNcIiBjbGFzcz1cInJhZGlvIHJhZGlvT3B0aW9uXCIgPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJyYWRpb2NvbnRhaW5lciBjb250YWluZXIgIG15dC1mb250NFwiPnt7IG9wdC5WYWx1ZV9fYyB9fVxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbaWRdPVwib3B0LklkXCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIG5hbWU9XCJpbnBWYWx1ZVwiIHZhbHVlPVwie3sgb3B0LlZhbHVlX19jIH19XCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib3B0aW9uQ2hhbmdlKG9wdC5WYWx1ZV9fYylcIiAvPlxuPCEtLSBIQSAyMEZFQjI0IFJlbW92ZWQgY2hlY2ttYXJrIGFzIGl0IHdhcyBjYXVzaW5nIHN0eWxpbmcgaXNzdWUgaW4gUmFkaW8gLS0+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIENoZWNrYm94IC0tPlxuICA8ZGl2ICpuZ0lmPVwiY2hlY2tib3hGbGFnXCIgY2xhc3M9XCJcIj5cbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtPy5lcnJvclwiIGNsYXNzPVwiY29uZC1kaXYyXCI+XG4gICAgICB7eyBxdWVzdGlvbkl0ZW0/LkVycm9yX01lc3NhZ2VfX2MgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3gtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIG9wdGlvblZhbHVlc1wiIGNsYXNzPVwiY2hlY2tib3gtd3JhcHBlclwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb250YWluZXIxXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtpZF09XCJpdGVtLklkXCIgWyhuZ01vZGVsKV09XCJpdGVtLmNoZWNrZWRcIiAoY2xpY2spPVwiY2xlYXJFcnJvcigpXCIgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCI+e3sgaXRlbS5WYWx1ZV9fYyB9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFRleHQgLS0+XG4gIDxkaXYgKm5nSWY9XCJ0ZXh0RmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyIG15dC1ib29rMVwiPlxuICAgIDwhLS0gSEEgMzEtSkFOLTI0IFRvIHJlZHVjZSB0aGUgbWFyZ2luIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiBjbGFzcz1cImRpcy1mbGV4IG15dC1hbGlnbjJcIiBbY2xhc3NdPVwiJ2NvbC1tZC0nICsgcXVlc3Rpb25JdGVtPy5TaXplX19jICsgJyBwYWRkaW5nbm9uZSdcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2JveG91dGxpbmUgbXl0LWZvbnQxIG15dC1ib29rMSc6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jLFxuICAgICAgICAgIHRleHRCb3gxOiAhcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2NcbiAgICAgICAgfVwiIGlkPVwidGV4dC1pbnB1dC1pZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yXG4gICAgICAgICAgICA/ICdyZWQnXG4gICAgICAgICAgICA6IGlucFZhbHVlPy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/ICcjODdiZTFjJ1xuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9fVwiIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVowLTlcXHMuOjssP10vZywnJyk7XCIgLz5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgY2hlY2staWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDBcIj48L2k+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gVGV4dCBBcmVhIC0tPlxuICA8ZGl2ICpuZ0lmPVwidGFGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGlzLWZsZXhcIj5cbiAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cInRhLWlucHV0XCIgaWQ9XCJ0YS1pbnB1dC1pZFwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiAoY2xpY2spPVwiY2xlYXJFcnJvcigpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbT8uZXJyb3JcbiAgICAgICAgICAgID8gJ3JlZCdcbiAgICAgICAgICAgIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDAgJiYgdGFGb2N1c091dFxuICAgICAgICAgICAgPyAnIzg3YmUxYydcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX1cIiAoZm9jdXNvdXQpPVwidGFGb2N1c091dCA9IHRydWVcIlxuICAgICAgICBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05XFxzLjo7LD9dL2csJycpO1wiPjwvdGV4dGFyZWE+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrIGNoZWNrLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cImlucFZhbHVlPy5sZW5ndGggPiAwICYmIHRhRm9jdXNPdXRcIj48L2k+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQ0MgTnVtYmVyIEZvcm1hdCAtLT5cbiAgPGRpdiAqbmdJZj1cIm51bWJlckZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJkaXMtZmxleFwiPlxuICAgICAgPGlucHV0IHR5cGU9XCJUZXh0XCIgcGxhY2Vob2xkZXI9XCIwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMFwiIFtuZ0NsYXNzXT1cInsgYm94b3V0bGluZTogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MgfVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBpZD1cIm51bWJlci1pbnB1dC1pZFwiIChuZ01vZGVsQ2hhbmdlKT1cIkNDT25DaGFuZ2UoJGV2ZW50KVwiIHJlcXVpcmVkPVwiXCIgbWF4bGVuZ3RoPVwiMjlcIlxuICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgb25pbnB1dD1cInRoaXMudmFsdWU9dGhpcy52YWx1ZS5yZXBsYWNlKC9bXjAtOSBdL2csJycpO1wiXG4gICAgICAgIHN0eWxlPVwid2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTtcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yXG4gICAgICAgICAgICA/ICdyZWQnXG4gICAgICAgICAgICA6IGlucFZhbHVlPy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/ICcjODdiZTFjJ1xuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9fVwiIC8+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgc3R5bGU9XCJjb2xvcjogIzg3YmUxYzsgbWFyZ2luLWxlZnQ6IC0ycmVtOyB6LWluZGV4OiAxOyBwYWRkaW5nOiA1cHg7XCJcbiAgICAgICAgKm5nSWY9XCJpbnBWYWx1ZT8ubGVuZ3RoID4gMFwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDwhLS0gRU5ELS0+XG5cbiAgPCEtLSBBbHBoYU51bWVyaWMgLS0+XG4gIDxkaXYgKm5nSWY9XCJhbHBoYW51bWVyaWNGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj4gPCEtLVVJIG5vdCBjb21wbGV0ZWQtLT5cbiAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246cmVsYXRpdmU7XCI+XG4gICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgPGlucHV0IHR5cGU9dGV4dCBwbGFjZWhvbGRlcj1cInt7J3plcm9PZlplcm8nIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiIHN0eWxlPVwicGFkZGluZzo1cHggNXB4IDVweCAxNTBweDtcIiBpZD1cInlvdXJpZGhlcmVcIi8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRW1haWwgLS0+XG4gIDxkaXYgKm5nSWY9XCJlbWFpbEZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJkaXMtZmxleFwiPlxuICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIFtuZ0NsYXNzXT1cInsgYm94b3V0bGluZTogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MgfVwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBpZD1cImVtYWlsLWlucHV0LWlkXCJcbiAgICAgICAgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyAnIzg3YmUxYydcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX1cIiAvPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHN0eWxlPVwiY29sb3I6ICM4N2JlMWM7IG1hcmdpbi1sZWZ0OiAtMnJlbTsgei1pbmRleDogMTsgcGFkZGluZzogNXB4XCJcbiAgICAgICAgKm5nSWY9XCJpbnBWYWx1ZT8ubGVuZ3RoID4gMFwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBEYXRlVGltZSAtLT5cbiAgPGRpdiAqbmdJZj1cImR0RmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdaZXJvIG15dC10aW1lMVwiID5cbiAgICA8IS0tIEVycm9yIEhhbmRsaW5nIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5lcnJvclwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1xuICAgIGNvbG9yOiByZWQ7XCI+e3txdWVzdGlvbkl0ZW0/LmVycm9yPy5lcnJvck1zZ319PC9kaXY+XG5cbiAgICA8IS0tIERhdGUgLS0+XG4gICAgPGRpdiAqbmdJZj1cImRhdGVGbGFnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdCb3R0b21cIj5cbiAgICAgICAgPCEtLSBIQSAzMS1KQU4tMjQgVGhlc2UgbGFiZWxzIHdlcmUgb2NjdXBpbmcgdGhlIGVtcHR5IHNwYWNlIHdoZW4gZGF0ZSBxdWVzdGlvbiBjb21lcy0tPlxuICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LkRhdGVfVGV4dF9fYyB9fTwvbGFiZWw+IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGlzLWZsZXhcIj5cbiAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgIDwhLS0gSEEgMDJGRUIyNCBBZGRpdGlvbmFsIHBhcmFtIHRvIHVwZGF0ZSB0aGUgcXVlc3Rpb24gLS0+XG4gICAgICAgICAgPG15LWRhdGUtcGlja2VyIG5hbWU9XCJteWRhdGVcIiBbb3B0aW9uc109XCJteURhdGVQaWNrZXJPcHRpb25zXCIgaWQ9XCJkYXRlXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHggIWltcG9ydGFudDtcIiAoZGF0ZUNoYW5nZWQpPVwib25EYXRlQ2hhbmdlZCgkZXZlbnQsIHF1ZXN0aW9uSXRlbSlcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxEYXRlXCIgY2xhc3M9XCJkYXRlLXBpY2tlclwiIHBsYWNlaG9sZGVyPVwie3snc2VsZWN0RGF0ZScgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19XCIgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxuICAgICAgICAgIDwvbXktZGF0ZS1waWNrZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFRpbWUgLS0+XG4gICAgPGRpdiAqbmdJZj1cInRpbWVGbGFnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdCb3R0b21cIj5cbiAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJkYXRlLXRpbWUgY29sb3JmXCI+e3sgcXVlc3Rpb25JdGVtPy5UaW1lX1RleHRfX2MgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRpcy1mbGV4XCI+XG4gICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZHQtbGluZSBkYXRlLWxpbmUgZHQtdGltZSc6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZWFuZFRpbWU6ICFxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fY31cIiBcbiAgICAgICAgICAgICAgaWQ9XCJkYXRlYW5kVGltZVwiIFtzdHlsZS5ib3JkZXItY29sb3JdPVwicXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnOiBxdWVzdGlvbkl0ZW0/LmlucHV0Py5sZW5ndGggPiAwID8gJycgOiAnJ1wiXG4gICAgICAgICAgICAgIChmb2N1cyk9XCIoY2xlYXJTUUVycm9yKSBcIj5cbiAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJob3Vyc1wiIGNsYXNzPVwiZGF0ZXRpbWUgc2hvd0hvdXIgbXl0LXRpbWUgbXl0LWhvdXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSG91clwiIGlkPVwiaG91clwiXG4gICAgICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCI+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+SEg8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImhvdXJcIiAqbmdGb3I9XCJsZXQgaG91ciBvZiBob3Vyc1wiPlxuICAgICAgICAgICAgICB7eyBob3VyIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9uXCI+IDogPC9zcGFuPlxuICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIm1pbnV0ZXNcIiBjbGFzcz1cImRhdGV0aW1lIHNob3dtaW51dGUgbXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWludXRlXCIgaWQ9XCJtaW51dGVcIlxuICAgICAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPk1NPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJtaW51dGVcIiAqbmdGb3I9XCJsZXQgbWludXRlIG9mIG1pbnV0ZXNcIj5cbiAgICAgICAgICAgICAge3sgbWludXRlIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgY29sb24xOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0/LlgyNF9Ib3Vyc19fYyA9PSBmYWxzZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvblwiPiA6IDwvc3Bhbj5cbiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIkFNL1BNXCIgY2xhc3M9XCJteXQtdGltZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRNZXJpZGllbVwiIGlkPVwibWVyaWRpZW1cIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFNXCI+QU08L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBNXCI+UE08L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPCEtLSA8ZGl2IFtuZ0NsYXNzXT1cInsnJzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYywgJ2RhdGVhbmRUaW1lJzogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2N9XCI+PC9kaXY+IC0tPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8aSBjbGFzcz1cImZhIGNoZWNrLWljb24zXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0/LmlucHV0Py5sZW5ndGggPiAwXCI+PC9pPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEF0dGFjaG1lbnQgLyBGaWxlIC0tPlxuICA8ZGl2ICpuZ0lmPVwiZmlsZUZsYWdcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWFsZXJ0XCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJwaWN0dXJlLXVwbG9hZFwiIGZvcj1cImZpbGUtdXBsb2FkXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWN0dXJlLXVwbG9hZC1jaGlsZFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlLWltYWdlLW8gZmEtNXggaWNvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXBsdXMgZmEtMnggcGljdHVyZS11cGxvYWQtY2hpbGQgcGljLXVwbG9hZCBpY29sb3JcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGlucHV0IGlkPVwiZmlsZS11cGxvYWRcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cInt7IGFsbG93ZWRGaWxlRXh0ZW5zaW9uIH19XCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCx0aGlzLnF1ZXN0aW9uSXRlbSlcIiAvPlxuICAgIDwvZGl2PlxuICAgIDx1bCAqbmdJZj1cIlxuICAgICAgICBhdHRhY2htZW50cz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICBxdWVzdGlvbkl0ZW0/LlR5cGVfX2MgPT09ICdGaWxlJyAmJlxuICAgICAgICAhcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2NcbiAgICAgIFwiIGNsYXNzPVwiYXR0YWNoLXVsaXN0IGNvbC1tZC0xMlwiPlxuICAgICAgPGxpICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJhbGlnbi1sXCI+XG4gICAgICAgIHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWV9fTxzcGFuIGNsYXNzPVwiYXR0YWNoLWxpc3RcIiAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIj5YPC9zcGFuPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuXG4gICAgPCEtLSBBdHRhY2htZW50IFByb2dyZXNzIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJmaWxlLXVwbG9hZGluZy1ib3hcIj5cbiAgICAgICAgPCEtLTxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAyeC5wbmdcIiBjbGFzcz1cImljb24tZWRpdDFcIiAvPi0tPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInVwbG9hZGluZy1maWxlLW5hbWUgXCI+e3sgYXR0YWNobWVudC5hdHRhY2htZW50TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZGVsZXRlJTQwMngucG5nXCIgY2xhc3M9XCJkZWxldGVJY29uXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsZS11cGxvYWQtYm94XCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPyAncmVkJyA6ICcnIH19XCI+XG4gICAgICBcbiAgICAgICAgPCEtLTxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAyeC5wbmdcIiBjbGFzcz1cImljb24tZWRpdDFcIiAvPi0tPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImYtTmFtZVwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MpXCI+IHt7IHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fY319PC9zcGFuPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaWxlLWxhYmVsIFwiPlxuICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9maWxlLXVwbG9hZC5wbmdcIiBjbGFzcz1cImZpbGUtaWNvblwiLz5cbiAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgIDxpbnB1dCBuYW1lPVwiYXR0YWNobWVudFwiIHR5cGU9XCJmaWxlXCIgcGxhY2Vob2xkZXI9XCJ7eyd0b0J1eVRpY2tldCcgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19XCIgbXVsdGlwbGVcbiAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsIC5wbmcsIC5qcGcsIC5qcGVnLCAuaGVpYywgLmFwcGxpY2F0aW9uL3BkZlwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmlsZS11cGxvYWQtYnRuXCI+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBCb29rIC0tPlxuICA8ZGl2ICpuZ0lmPVwiYm9va0ZsYWdcIj5cbiAgICA8ZGl2IFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsX19jID8gJ2Zvcm0tZ3JvdXAgY29udGVudC1ib3gnIDogJ2Zvcm0tZ3JvdXAnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0lmPVwicXVlc3Rpb25JdGVtLmVycm9yXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICBjb2xvcjogcmVkO1wiPnt7cXVlc3Rpb25JdGVtPy5lcnJvcj8uZXJyb3JNc2d9fTwvZGl2PlxuICAgICAgICA8ZGl2IFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsX19jID8gJycgOiAnbXl0LWFsaWduMydcIiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbF9fYyA/ICdjb2wtbGctJyArIHF1ZXMuU2l6ZV9fYyArICcgcGFkZGluZ25vbmUnIDogJ2NvbC1tZC0nICsgcXVlcy5TaXplX19jICsgJyBwYWRkaW5nbm9uZSdcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBxdWVzIG9mIHN1YlF1ZXN0aW9ucztsZXQgaSA9IGluZGV4XCIgW2lkXT1cInF1ZXMuSWRcIj5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgZG93bjI6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHF1ZXM/LlF1ZXN0aW9uX1RleHRfX2MgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkaW5nWmVybyBteXQtZGF0ZVRpbWVOZXdcIiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1RpbWUnIHx8IHF1ZXMuVHlwZV9fYyA9PT0gJ0RhdGUnXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRGF0ZSdcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkaW5nQm90dG9tXCI+XG4gICAgICAgICAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJkYXRlLXRpbWUgY29sb3JmXCI+e3sgcXVlc3Rpb25JdGVtPy5EYXRlX1RleHRfX2MgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZWFuZHRpbWVcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgICAgICAgICA8IS0tIEhBIDAyRkVCMjQgQWRkaXRpb25hbCBwYXJhbSB0byB1cGRhdGUgdGhlIHF1ZXN0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgPG15LWRhdGUtcGlja2VyIG5hbWU9XCJteWRhdGVcIiBbb3B0aW9uc109XCJteURhdGVQaWNrZXJPcHRpb25zXCIgaWQ9XCJkYXRlXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHggIWltcG9ydGFudDtcIiAoZGF0ZUNoYW5nZWQpPVwib25EYXRlQ2hhbmdlZCgkZXZlbnQsIHF1ZXMpXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxEYXRlXCIgY2xhc3M9XCJkYXRlLXBpY2tlclwiIHBsYWNlaG9sZGVyPVwie3snc2VsZWN0RGF0ZScgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19XCIgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIiA+XG4gICAgICAgICAgICAgICAgICA8L215LWRhdGUtcGlja2VyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1RpbWUnXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8uVGltZV9UZXh0X19jIH19PC9sYWJlbD4gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVhbmR0aW1lXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J2R0LWxpbmUgZGF0ZS1saW5lIGR0LXRpbWUnOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlYW5kVGltZTogIXFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jfVwiIFxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZGF0ZWFuZFRpbWVcIiBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cInF1ZXN0aW9uSXRlbT8uZXJyb3IgPyAncmVkJzogcXVlc3Rpb25JdGVtPy5pbnB1dD8ubGVuZ3RoID4gMCA/ICcnIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCIoY2xlYXJTUUVycm9yKSBcIj5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cImhvdXJzXCIgY2xhc3M9XCJkYXRldGltZSBzaG93SG91ciBteXQtdGltZSBteXQtaG91clwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRIb3VyXCIgaWQ9XCJob3VyXCJcbiAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+SEg8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiaG91clwiICpuZ0Zvcj1cImxldCBob3VyIG9mIGhvdXJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgaG91ciB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvblwiPiA6IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIm1pbnV0ZXNcIiBjbGFzcz1cImRhdGV0aW1lIHNob3dtaW51dGUgbXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWludXRlXCIgaWQ9XCJtaW51dGVcIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5NTTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJtaW51dGVcIiAqbmdGb3I9XCJsZXQgbWludXRlIG9mIG1pbnV0ZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBtaW51dGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBjb2xvbjE6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jIH1cIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT0gZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvblwiPiA6IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiQU0vUE1cIiBjbGFzcz1cIm15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1lcmlkaWVtXCIgaWQ9XCJtZXJpZGllbVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBTVwiPkFNPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBNXCI+UE08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0RhdGVUaW1lJ1wiPlxuICAgICAgICAgICAgPGFwcC1jdXN0b20tZGF0ZS1waWNrZXIgW21pbkRhdGVdPVwicXVlcy5taW5EYXRlXCIgW2RhdGVdPVwicXVlcy5pbnB1dFwiIChkYXRlQ2hhbmdlKT1cImRpc3BsYXlEYXRlKCRldmVudCxxdWVzKVwiPjwvYXBwLWN1c3RvbS1kYXRlLXBpY2tlcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnVGV4dCdcIj5cbiAgICAgICAgICAgIDxsYWJlbD57eyBxdWVzLlF1ZXN0aW9uX1RleHRfX2MgfX08L2xhYmVsPlxuICAgICAgICAgICAgPGFwcC1jdXN0b20taW5wdXRcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJxdWVzPy5pbnB1dFwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc1ZhbHVlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAnZGlzLWZsZXggZHQtbGluZSBkYXRlLWxpbmUgYm9va1RleHQgYm94b3V0bGluZSBteXQtZm9udDEnOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jLFxuICAgICAgICAgICAgICAgICAgICAgIHRleHRCb3g6ICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCIgXG4gICAgICAgICAgICAgICAgICBbaWRWYWx1ZV09XCJxdWVzPy5UcmFja2luZ19JRF9fY1wiXG4gICAgICAgICAgICAgICAgICBbZm9jdXNFdmVudF09XCJjbGVhclNRRXJyb3IocXVlcz8uSWQpXCJcbiAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJxdWVzPy5lcnJvclwiXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicXVlcz8uUXVlc3Rpb25fX2NcIlxuICAgICAgICAgICAgICAgICAgKGlucHV0VmFsdWUpPVwic2VsZWN0ZWRJbnB1dCgkZXZlbnQscXVlcylcIj5cbiAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnTG9jYXRpb24nXCI+XG4gICAgICAgICAgICA8IS0tIGZvciBwaWNrIGxvY2F0aW9uIC0tPlxuICAgICAgICAgICAgPCEtLSBIQTEwMDEyMDI0IEFkZGVkIEFwaSBrZXkgYXMgaW5wdXQgLS0+XG4gICAgICAgICAgICA8YXBwLXBpY2stbG9jYXRpb24gW2FwaUtleV09XCJxYkl0ZW1bJ0FwaV9LZXlfX2MnXVwiIFthZGRyZXNzXT1cInF1ZXMuaW5wdXRcIiAobG9jYXRpb25TZWxlY3RlZCk9XCJoYW5kbGVMb2NhdGlvblNlbGVjdGVkKCRldmVudCxxdWVzKVwiPjwvYXBwLXBpY2stbG9jYXRpb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBmb3IgIHRleHQgYXJlYSAgIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUZXh0QXJlYSdcIj5cbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLXRleHQtYXJlYSBbdmFsdWVdPVwicXVlcy5pbnB1dFwiIFtyb3dzXT1cIjNcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtwbGFjZWhvbGRlcl09XCJxdWVzLlF1ZXN0aW9uX19jIFwiICh0ZXh0YXJlYVZhbHVlQ2hhbmdlKT1cImhhbmRsZVRleHRhcmVhVmFsdWVDaGFuZ2UoJGV2ZW50KVwiPjwvYXBwLWN1c3RvbS10ZXh0LWFyZWE+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIEVtYWlsIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdFbWFpbCdcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbaWRdPVwicXVlcy5JZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyU1FFcnJvcihxdWVzLklkKVwiXG4gICAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLlF1ZXN0aW9uX19jIH19XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdGaWxlJ1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInBpY3R1cmUtdXBsb2FkIGN1c3RvbS1maWxlLXVwbG9hZCBiZ2NvbG9yLXdcIiBmb3I9XCJmaWxlLXVwbG9hZFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGljdHVyZS11cGxvYWQtY2hpbGRcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsZS1pbWFnZS1vIGZhLTV4IGljb2xvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJcbiAgICAgICAgICAgICAgICAgICAgZmEgZmEtcGx1cyBmYS0yeFxuICAgICAgICAgICAgICAgICAgICBwaWN0dXJlLXVwbG9hZC1jaGlsZFxuICAgICAgICAgICAgICAgICAgICBwaWMtdXBsb2FkXG4gICAgICAgICAgICAgICAgICAgIGljb2xvclxuICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBpZD1cImZpbGUtdXBsb2FkXCIgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCJ7eyBib29rRmxhZ0FjY2VwdCB9fVwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQscXVlcylcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDx1bCAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgcXVlcy5UeXBlX19jID09PSAnRmlsZScgJiZcbiAgICAgICAgICAgICAgICAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1xuICAgICAgICAgICAgICBcIiBjbGFzcz1cImF0dGFjaC11bGlzdCBjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJhbGlnbi1sXCI+XG4gICAgICAgICAgICAgICAge3sgYXR0YWNobWVudC5hdHRhY2htZW50TmFtZVxuICAgICAgICAgICAgICAgIH19PHNwYW4gY2xhc3M9XCJhdHRhY2gtbGlzdFwiIChjbGljayk9XCJkZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuYXR0YWNobWVudElkKVwiPlg8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15dC1ib3hcIiAqbmdJZj1cInFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIj5cblxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJmaWxlLXVwbG9hZGluZy1ib3hcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXQxXCIgLz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVwbG9hZGluZy1maWxlLW5hbWUgbXl0LWZvbnQxIGZvbnQtd2VpZ2h0OiBub3JtYWw7XCI+IHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZGVsZXRlJTQwMngucG5nXCIgY2xhc3M9XCJkZWxldGVJY29uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuYXR0YWNobWVudElkKVwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZS11cGxvYWQtYm94XCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPyAncmVkJyA6ICcnIH19XCI+XG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0MVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmLU5hbWVcIj57eyBxdWVzPy5RdWVzdGlvbl9fYyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaWxlLWxhYmVsIFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjogI2M1MjgxYzt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7J2F0dGFjaCcgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9XCJhdHRhY2htZW50XCIgdHlwZT1cImZpbGVcIiBwbGFjZWhvbGRlcj1cInt7J3RvQnV5VGlja2V0JyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cIiBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICBhY2NlcHQ9XCIucGRmLCAucG5nLCAuanBnLCAuanBlZywgLmhlaWMsIC5hcHBsaWNhdGlvbi9wZGZcIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50LHF1ZXMpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmaWxlLXVwbG9hZC1idG5cIj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBUYWJsZSAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnVGFibGUnXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLXRhYmxlIFxuICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwicXVlc1wiXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5JZClcIj5cbiAgICAgICAgICAgIDwvYXBwLWN1c3RvbS10YWJsZT5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0Ryb3Bkb3duJ1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICA8IS0tIGZvciBjb21tb24gZHJvcGRvd24gLS0+XG4gICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgICAgPGFwcC1jdXN0b20tZHJvcGRvd24gW2Zyb21TaGVuZ2VsXT1cInFiSXRlbS5pc1NoZW5nZWxfX2NcIlxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJxdWVzLlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkc1wiXG4gICAgICAgICAgICAgICAgICAgIFthcGlNZXRhXT1cInF1ZXMuU3ViX1RleHRfX2NcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwicXVlcy5OYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwicXVlcy5pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiLS0te3snc2VsZWN0JyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX0tLS1cIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlXT1cInF1ZXM/LkVycm9yX01lc3NhZ2VfX2NcIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwicXVlcz8uZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuSWQpXCI+XG4gICAgICAgICAgICA8L2FwcC1jdXN0b20tZHJvcGRvd24+XG4gICAgICAgICAgICA8YXBwLWRyb3Bkb3duLXdpdGgtZmxhZyAqbmdJZj1cInF1ZXMuaXNEZXBlbmRlbnRQaWNrbGlzdCAmJiAhcXVlcy5kcm9wRG93bk9ubHlcIiAgW2NlcnRpZmllZF09XCJxdWVzLmNlcnRpZmllZEZsYWdcIiAgW0pvYlBlcmZvcm1lckNlcnRpZmljYXRlc109XCJxdWVzLmNlcnRpZmljYXRlTGlzdFwiIChmbGFnRHJvcERvd25DaGFuZ2UpPVwiZGVwZW5kZW50Q2hhbmdlKCRldmVudClcIj48L2FwcC1kcm9wZG93bi13aXRoLWZsYWc+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrIFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtPy5pbnB1dD8ubGVuZ3RoID4gMFwiPjwvaT5cbiAgICAgICAgICA8L2Rpdj4gICAgICAgICAgXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS1MaXN0IHN0YXJ0LS0+XG4gIDxkaXYgKm5nSWY9XCJsaXN0RmxhZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0lmPVwicXVlc3Rpb25JdGVtLmVycm9yXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICBjb2xvcjogcmVkO1wiPnt7cXVlc3Rpb25JdGVtPy5lcnJvcj8uZXJyb3JNc2d9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXl0LWFsaWduM1wiIFtjbGFzc109XCInY29sLW1kLScgKyBxdWVzLlNpemVfX2MgKyAnIHBhZGRpbmdub25lJ1wiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXMgb2YgZ2V0TG9jYWxTdWJRdWVzdGlvbnMocXVlc3Rpb25JdGVtLklkKTtsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGlzLWZsZXggbXl0LWZvbnQzIG15dC1mb250N1wiPnt7IHF1ZXM/LlF1ZXN0aW9uX19jIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUZXh0J1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJxdWVzLmlucHV0XCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICdkaXMtZmxleCBkdC1saW5lIGRhdGUtbGluZSBib29rVGV4dCBib3hvdXRsaW5lIG15dC1mb250MSc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MsXG4gICAgICAgICAgICAgdGV4dEJveDogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcbiAgICAgICAgICAgIH1cIiBpZD1cInRleHRcIiBbaWRdPVwicXVlcy51bmlxdWVTdWJRSWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhckxvY2FsU3ViUXVlc0Vycm9yKHF1ZXMpXCJcbiAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLlF1ZXN0aW9uX19jIH19XCJcbiAgICAgICAgICAgIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVowLTlcXHMuOjssP10vZywnJyk7XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJcIiAqbmdJZj1cImFkZEZsYWdcIj5cbiAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIkFkZChnZXRMb2NhbFN1YlF1ZXN0aW9ucyhxdWVzdGlvbkl0ZW0uSWQpKVwiIGNsYXNzPVwiYnRuXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzXCIgPjwvaT57eydhZGQnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fTwvYnV0dG9uPlxuICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDwhLS1MaXN0IEVuZC0tPlxuXG4gIDwhLS0gQWN0aW9ucyAtLT5cbiAgPGRpdiAqbmdJZj1cImluZGl2aWR1YWxCb29rQnV0dG9uXCIgY2xhc3M9XCJmbGV4ZXJcIj5cbiAgICA8IS0tIEJhY2t3YXJkIC8gQmFjayAtLT5cbiAgICA8IS0tIEhBIDAyRkVCMjQgSGlkaW5nIHRoZSBidXR0b24gd2hlbiB0aGVyZSBpcyBubyB2YWx1ZSBmcm9tIHRoZSBiYWNrZW5kIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJiYWNrYnV0dG9uXCIgW25nQ2xhc3NdPVwieyAnY29sLW1kLTYnOiAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyB9XCJcbiAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cInF1ZXN0aW9uU3RhY2subGVuZ3RoID4gMCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCIgKm5nSWY9XCJxYkl0ZW0uQmFja19fY1wiPlxuICAgICAgPGRpdiBbbmdDbGFzc109XCJ7fVwiPlxuICAgICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdsZWZ0LWJ0JzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOlxuICAgICAgICAgICAgICAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1xuICAgICAgICAgIH1cIiAoY2xpY2spPVwiaGFuZGxlQmFja0NsaWNrKClcIj5cbiAgICAgICAgICB7eyBxYkl0ZW0/LkJhY2tfX2MgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRm9yd2FyZCAvIE5leHQgLS0+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2NvbC1tZC02JzogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiICpuZ0lmPVwicWJJdGVtLk5leHRfX2NcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ3J1c3R5JzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOlxuICAgICAgICAgICAgICAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1xuICAgICAgICAgIH1cIiAoY2xpY2spPVwiaGFuZGxlTmV4dENsaWNrKClcIj5cbiAgICAgICAgICB7eyBxYkl0ZW0uTmV4dF9fYyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIFN1bW1hcnkgLS0+XG48ZGl2ICpuZ0lmPVwic3VtbWFyeSAmJiBzdW1tYXJ5Lmxlbmd0aCA+IDBcIiBoZWlnaHQ9XCIxMDAlICFpbXBvcnRhbnRcIiBjbGFzcz1cImNvbC1tZC0xMlwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2NvbC1tZC0xMic6IXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcbiAgICAgICAgICAgICAgIH1cIj5cbiAgICA8aDEgY2xhc3M9XCJoZWFkZXIxIHN1bW1hcnlwYWRkXCIgPnt7IHFiSXRlbS5TdWJUaXRsZV9fYyB9fTwvaDE+ICAgICAgICAgXG4gIDxkaXYgaWQ9XCJwcm9ncmVzczJcIiAqbmdJZj1cIiFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jICYmIHRoaXMuYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJyBcIj5cbiAgPGRpdiBbbmdDbGFzc109XCJ7ICdmdWxsLXN1bW1hcnknOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxYSBvZiBzdW1tYXJ5XCI+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBub246ICBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgc3VtbWFyeTogICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cbiAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0uRWRpdF9fY1wiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uJzogdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwieyBhc3VtOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgPT09ICdDb21wbGV0ZWQnIH1cIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+e3sgcWEucXVlc1ZhbHVlIH19PC9hPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLkVkaXRfX2NcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdxdWVzdGlvbic6IHRoaXMuYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJyB9XCI+XG4gICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAncXVlc3Rpb24nOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgPT09ICdDb21wbGV0ZWQnIH1cIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+XG4gICAgICAgICAgICAgICAge3sgcWEucXVlc1ZhbHVlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYW5zd2VyXCIgPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09PSAnRmlsZSdcIj5cbiAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAxLnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0LXN1bW1hcnlcIiAvPlxuICAgICAgICAgICAgICAgICAge3sgcWEuYW5zVmFsdWUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIEhBIDAyRkVCMjQgRGlzcGxheWluZyB0aGUgaW4gc3VtbWFyeSBmb3IgYm9vayB0eXBlIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09ICdCb29rJ1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdmFsIG9mIHFhLm15VmFsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPnt7IHZhbC5RdWVzdGlvbl9UZXh0X19jIH19OiA8c3Bhbj57eyB2YWwuaW5wdXQgfX08L3NwYW4+PC9wPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBIQSAwMkZFQjI0IERpc3BsYXlpbmcgdGhlIHZhbHVlIGZvciBkaXJlY3QgcXVlc3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgIT0gJ0ZpbGUnICYmIHFhLnFUeXAgIT0gJ0Jvb2snXCI+e3sgcWEuUXVlc3Rpb25fVGV4dF9fYyB9fTogPHNwYW4+PC9zcGFuPnt7IHFhLmFuc1ZhbHVlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5FZGl0X19jICYmIHRoaXMuYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJ1wiIHN0eWxlPVwiYmFja2dyb3VuZDogI2RlZGRkZDtcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJlZGl0XCIgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljayhxYS5xdWVzSWQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zID09PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgc3R5bGU9XCJ3aWR0aDo1MCUhaW1wb3J0YW50O1wiIGNsYXNzPVwiaWNvbi1lZGl0aW9zXCIvPlxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGV2aWNlSW5mby5vcyAhPT0gJ2lPUydcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZWRpdCU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJ0aGlzLmFiSXRlbS5TdGF0dXNfX2MgPT09ICdDb21wbGV0ZWQnXCIgY2xhc3M9XCJjb2wtbGctMTJcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj5cbiAgICA8aDI+e3t0aGlzLnFiSXRlbS5TdW1tYXJ5X1RleHRfX2N9fTwvaDI+XG4gICAgPHA+e3t0aGlzLnFiSXRlbS5TdW1tYXJ5X1N1Yl9UZXh0X19jfX08L3A+XG4gIDwvZGl2PlxuXG4gIDxkaXYgaWQ9XCJwcm9ncmVzczJcIiAqbmdJZj1cInFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgXCI+XG4gICAgPGRpdiBbbmdDbGFzc109XCJ7J2JnQ29sb3Igc3VtbWFyeS10b3AnIDogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyB9XCIgPlxuICAgICAgPGRpdiBpZD1cInByb2dyZXNzLXN1bW1hcnlcIiAqbmdJZj1cInFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIj5cbiAgICAgICAgPGNpcmNsZS1wcm9ncmVzcyBjbGFzcz1cInRpdGxlYmFyXCIgW3BlcmNlbnRdPVwidGhpcy5wZXJjZW50XCIgW3JhZGl1c109XCI0MFwiIFtzcGFjZV09XCItNFwiIFtvdXRlclN0cm9rZVdpZHRoXT1cIjRcIlxuICAgICAgICBbaW5uZXJTdHJva2VXaWR0aF09XCI0XCIgW291dGVyU3Ryb2tlQ29sb3JdPVwiJyNlMGIxYjAnXCIgW2lubmVyU3Ryb2tlQ29sb3JdPVwiJyNlN2U4ZWEnXCIgW2FuaW1hdGlvbl09XCJ0cnVlXCIgW2JhY2tncm91bmRQYWRkaW5nXT0gXCIwXCJcbiAgICAgICAgW2JhY2tncm91bmRDb2xvcl09IFwiJyNkZDJlMTMnXCIgW2JhY2tncm91bmRHcmFkaWVudFN0b3BDb2xvcl09XCInI2Y5YmZiZCdcIiBbdGl0bGVDb2xvcl09XCInI2YzZWRlZCdcIiBcbiAgICAgICAgY2xhc3M9XCJuZy1zdGFyLWluc2VydGVkXCIgW3RpdGxlXT1cInRoaXMucGVyY2VudCsnJSdcIiBbc2hvd1N1YnRpdGxlXT1cImZhbHNlXCIgW3Nob3dCYWNrZ3JvdW5kXT1cInRydWVcIiBbYW5pbWF0aW9uRHVyYXRpb25dPVwiMzAwXCJcbiAgICAgICAgW3N0YXJ0RnJvbVplcm9dPVwiZmFsc2VcIiBbcmVzcG9uc2l2ZV09XCJmYWxzZVwiID5cbiAgICAgIDwvY2lyY2xlLXByb2dyZXNzPlxuICAgICAgXG4gICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLlN1bW1hcnlfVGV4dF9fYyAmJiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCIgXG4gICAgICBbbmdDbGFzc109XCJ7IHN1bW1hcnlUaXRsZTogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyB9XCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInN1YlRpdGxlXCIgPnt7IHFiSXRlbS5TdW1tYXJ5X1RleHRfX2MgfX08L2gzPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJ1wiIGNsYXNzPVwic3ViVGl0bGUxXCIgPnt7IHFiSXRlbS5TdW1tYXJ5X1N1Yl9UZXh0X19jfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxuICAgICAgPGgzIGNsYXNzPVwic3VtbWFyeS1oXCI+XG4gICAgICAgIHt7IHFiSXRlbS5TdW1tYXJ5X1RleHRfX2MgfX1cbiAgICAgIDwvaDM+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2Z1bGwtc3VtbWFyeSc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LWdyb3VwVGV4dCBteXQtZm9udDJcIj5cbiAgICAgIDwhLS0gPHA+SW5mb3JtZSBkZSBkYcOxbzwvcD4gLS0+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgcWEgb2Ygc3VtbWFyeVwiID5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IG5vbjogIHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5XCI+XG4gICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCIhcWJJdGVtLkVkaXRfX2NcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdxdWVzdGlvbiBzdW0tcXVlcyBteXQtZm9udDMgbXl0LWZvbnQ4JzogdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwieyBhc3VtOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgPT09ICdDb21wbGV0ZWQnIH1cIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+e3sgcWEucXVlc1ZhbHVlIH19PC9hPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLkVkaXRfX2NcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzdW0tcXVlcyBxdWVzdGlvbiBteXQtZm9udDMgbXl0LWZvbnQ4JzogdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdzdW0tcXVlczEgcXVlc3Rpb24xIHN1bW1hcnktY29tcGxldGVkIG15dC1mb250MyBteXQtZm9udDgnOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgPT09ICdDb21wbGV0ZWQnIH1cIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+XG4gICAgICAgICAgICAgICAge3sgcWEucXVlc1ZhbHVlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5FZGl0X19jICYmIHRoaXMuYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJ1wiIHN0eWxlPVwiYmFja2dyb3VuZDogI2RlZGRkZDtcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImVkaXRcIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIj5cbiAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGV2aWNlSW5mby5vcyA9PT0gJ2lPUydcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZWRpdCU0MDJ4LnBuZ1wiIHN0eWxlPVwid2lkdGg6NTAlIWltcG9ydGFudDtcIiBjbGFzcz1cImljb24tZWRpdGlvc1wiLz5cbiAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGV2aWNlSW5mby5vcyAhPT0gJ2lPUydcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZWRpdCU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0XCIgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYW5zd2VyXCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09PSAnRmlsZSdcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMS5wbmdcIiBjbGFzcz1cImljb24tZWRpdC1zdW1tYXJ5XCIgLz5cbiAgICAgICAgICAgICAgICB7eyBxYS5hbnNWYWx1ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgIT0gJ0ZpbGUnXCI+XG4gICAgICAgICAgICAgICAge3sgcWEuYW5zVmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleGVyMVwiICpuZ0lmPVwiYWJJdGVtXCI+XG4gICAgPGRpdiBjbGFzcz1cIlwiICpuZ0lmPVwiYWJJdGVtLlN0YXR1c19fYyA9PSAnQ29tcGxldGVkJyAmJiBxYkl0ZW0uQ2FuY2VsX19jXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwieydidG4tdGV4dCc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnkgYnRuLWxnIGJ0bi1ibG9jayBidG4tYmFjay1jb2xvcic6ICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jfVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNhbmNlbENsaWNrKClcIj5cbiAgICAgICAgICB7eyBxYkl0ZW0uQ2FuY2VsX19jIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PiAtLT5cblxuICA8IS0tIEdyb3VwIEFjdGlvbnMgLS0+XG4gIDxkaXYgY2xhc3M9XCJhbGlnbi1lZGl0LXN1Ym1pdFwiICpuZ0lmPVwiYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJ1wiPlxuICAgIDwhLS0gSEEgMDJGRUIyNCBIaWRpbmcgdGhlIGJ1dHRvbiB3aGVuIHRoZXJlIGlzIG5vIHZhbHVlIGZyb20gdGhlIGJhY2tlbmQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJxYkl0ZW0uU3VibWl0X19jXCI+XG4gICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cInsgJ2J0bi10ZXh0Mic6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnkgYnRuLWxnIGJ0bi1ibG9jayBidG4tYmFjay1jb2xvcic6ICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIiBcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZVN1Ym1pdENsaWNrKClcIj5cbiAgICAgICAge3sgcWJJdGVtLlN1Ym1pdF9fYyB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwicWJJdGVtLkVkaXRfX2NcIj5cbiAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwieydncmV5JzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGJ0bi1iYWNrLWNvbG9yJzogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2N9XCIgXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVCYWNrQ2xpY2tOZXcoKVwiPlxuICAgICAgICB7eyBxYkl0ZW0uRWRpdF9fYyB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+IC0tPlxuICA8L2Rpdj5cblxuPC9kaXY+Il19
2227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvcXVlc3Rpb25uYWlyZS9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbm5haXJlL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FFbEIsTUFBTSxlQUFlLENBQUM7QUFTdkIsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzlELE9BQU8sRUFDTCxRQUFRLEVBR1IsYUFBYSxFQUViLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLGFBQWEsRUFDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFeEQsT0FBTyxFQUVMLFVBQVUsRUFNVixNQUFNLEdBQ1AsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVl0QixNQUFNLE9BQU8sc0JBQXNCO0lBeU12QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUE7SUFFRDtJQW5OQSxJQUFJLENBQVM7SUFDYixrQkFBa0IsQ0FBUztJQUMzQixJQUFJLENBQVM7SUFDYixHQUFHLENBQVM7SUFDWixHQUFHLENBQVM7SUFDWCxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUNqQyxVQUFVLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFDbkQsY0FBYyxHQUFz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V0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgT25DaGFuZ2VzLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIEVsZW1lbnRSZWYsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUGFyYW1zIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgU2FsZXNmb3JjZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2FsZXNmb3JjZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBJTXlEYXRlTW9kZWwsIElNeURwT3B0aW9ucyB9IGZyb20gXCJteWRhdGVwaWNrZXJcIjtcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBOZ3hTcGlubmVyU2VydmljZSB9IGZyb20gXCJuZ3gtc3Bpbm5lclwiO1xuLy9pbXBvcnQgeyBOZ3hJbmRleGVkREJTZXJ2aWNlLCBJbmRleERldGFpbHN9IGZyb20gJ25neC1pbmRleGVkLWRiJztcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7IFxuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2hhcmVkLnNlcnZpY2VcIjtcblxuaW1wb3J0IHtcbiAgUXVlc3Rpb24sXG4gIFF1ZXN0aW9uQm9vayxcbiAgQW5zd2VyQm9vayxcbiAgQW5zd2VyV3JhcHBlcixcbiAgT3B0aW9uLFxuICBPcHRpb25WYWx1ZSxcbiAgQXR0YWNobWVudFdyYXBwZXIsXG4gIEF0dGFjaG1lbnQsXG4gIExvY2FsUXVlc3Rpb25cbn0gZnJvbSBcIi4uLy4uL3dyYXBwZXJcIjtcbmltcG9ydCB7IEVycm9yV3JhcHBlciB9IGZyb20gXCIuLi8uLi9tb2RlbC9lcnJvcldyYXBwZXJcIjtcblxuaW1wb3J0IHtcbiAgVEVTVFFVRVNUSU9OLFxuICBEVFFVRVNUSU9OLFxuICBGSUxFUVVFU1RJT04sXG4gIFRBUVVFU1RJT04sXG4gIFJBRElPUVVFU1RJT04sXG4gIENIRUNLUVVFU1RJT04sXG4gIEJPT0tRVUVTVElPTixcbiAgVEVTVFFCLFxufSBmcm9tIFwiLi4vLi4vc2FtcGxlXCI7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSBcInJ4anNcIjtcbi8vIEhBIDE5REVDMjMgaW1wb3J0ZWQgdHJhbnNsYXRpb24gc2VydmljZVxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vaTE4bi5zZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJsaWItcXVlc3Rpb25uYWlyZVwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWxcIixcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbQ2hhbmdlU2VydmljZV0sXG4gIHN0eWxlVXJsczogW1wiLi9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC5jc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9ubmFpcmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBxYklkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluc3VyYW5jZVN0YXJ0RGF0ZTogc3RyaW5nO1xuICBASW5wdXQoKSBzZXJ2OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRrbjogc3RyaW5nO1xuICBASW5wdXQoKSBhcGk6IHN0cmluZztcbiAgQE91dHB1dCgpIGhhbmRsZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaGFuZGxlUGFnZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVRdWVzdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcGFyYW1zOiBQYXJhbXM7XG4gIHB1YmxpYyBkZXZpY2VJbmZvID0gbnVsbDtcbiAgcHVibGljIGFiSXRlbTogQW5zd2VyQm9vaztcbiAgcHVibGljIHFiSXRlbTogUXVlc3Rpb25Cb29rO1xuICBwdWJsaWMgcXVlc3Rpb25JdGVtOiBRdWVzdGlvbjtcbiAgcHVibGljIGFuc3dlcldyYXA6IEFuc3dlcldyYXBwZXI7XG5cbiAgLy8gQ09ORElUSU9OQUwgVFlQRVNcbiAgcHVibGljIHJhZGlvRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZGF0YUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBPUFRJT05PTkxZIFRZUEVTXG4gIHB1YmxpYyBkcm9wZG93bkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNoZWNrYm94RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIFVOQ09ORElUSU9OQUwgVFlQRVNcbiAgcHVibGljIHRleHRGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyB0YUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGR0RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgdGltZUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGRhdGVGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBmaWxlRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZW1haWxGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBudW1iZXJGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBhbHBoYW51bWVyaWNGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBib29rRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgbGlzdEZsYWc6IGJvb2xlYW49IGZhbHNlO1xuICAvL0JhY2sgYnV0dG9uXG4gIHB1YmxpYyBiYWNrQnV0dG9uRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgb3B0aW9uVmFsdWVzOiBPcHRpb25WYWx1ZVtdID0gW107XG4gIHB1YmxpYyBzdWJRdWVzdGlvbnM6IFF1ZXN0aW9uW10gPSBbXTtcbiAgcHVibGljIGlucFZhbHVlOiBzdHJpbmc7XG4gIHB1YmxpYyBhbnN3ZXJNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBkYXRlTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgc2VsZWN0ZWRob3VyTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgc2VsZWN0ZWRtaW51dGVNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBhdHRhY2htZW50c01hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIHNxT3B0aW9ucyA9IG5ldyBNYXAoKTtcbiAgcHVibGljIHN1YkFuc01hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIGxvY2FsU3ViUXVlc3Rpb25zOiBMb2NhbFF1ZXN0aW9uW10gPSBbXTtcbiAgcHVibGljIHF1ZXN0aW9uU3RhY2sgPSBbXTtcbiAgcHVibGljIHF1ZXN0aW9uTmFtZSA9IFtdO1xuICBwdWJsaWMgYXR0YWNobWVudHM6IGFueVtdID0gW107XG4gIHB1YmxpYyBhdHRhY2htZW50SWRMaXN0OiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgYXR0YWNobWVudElkOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgYXR0YWNobWVudDogYW55O1xuICBwdWJsaWMgYWxsb3dlZEZpbGVFeHRlbnNpb246IHN0cmluZ1tdO1xuICBwdWJsaWMgZmlsZUV4Y2VlZGVkTGltaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGZpbGVUeXBlSW5jb3JyZWN0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBiYWNrOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBiYWNraWNvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY2hlY2s6IGJvb2xlYW47XG4gIHB1YmxpYyBwb3A6IGJvb2xlYW47XG4gIHB1YmxpYyBsb2NhbERhdGU6IHN0cmluZztcbiAgcHVibGljIGN1cnJlbnROYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBwYXRocXVlc3Rpb246IG51bWJlcjtcbiAgcHVibGljIHBlcmNlbnQ6IG51bWJlcjtcbiAgcHVibGljIGNvdW50OiBudW1iZXI7XG4gIHB1YmxpYyB0YUZvY3VzT3V0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBub3RWYWxpZEFjY051bTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc3BsQ0NCYWNrQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHN1bW1hcnkgPSBbXTtcbiAgcHVibGljIGxvY2FsU3ViUU1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIGtleUluZGV4OiBudW1iZXIgPSAwO1xuICAvL3B1YmxpYyBzcXVlczogc3RyaW5nO1xuICBwdWJsaWMgc2VsRGF0ZTogYW55ID0ge307XG4gIHB1YmxpYyBzZWxlY3REYXRlOiBzdHJpbmc7XG4gIHByaXZhdGUgdG9kYXk6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBwcml2YXRlIGVsOiBIVE1MRWxlbWVudDtcbiAgcHVibGljIGlubmVyaHRtbDogYW55O1xuICBwdWJsaWMgcG9zc2liaWxpdGllczogYW55O1xuICBwdWJsaWMgaW5uZXJodG1sMTogYW55O1xuICBwdWJsaWMgc3VtbWFyeURhdGEgPVtdO1xuXG4gIHB1YmxpYyBob3VyczogYW55W10gPSBbXG4gICAgXCIwMVwiLFxuICAgIFwiMDJcIixcbiAgICBcIjAzXCIsXG4gICAgXCIwNFwiLFxuICAgIFwiMDVcIixcbiAgICBcIjA2XCIsXG4gICAgXCIwN1wiLFxuICAgIFwiMDhcIixcbiAgICBcIjA5XCIsXG4gICAgXCIxMFwiLFxuICAgIFwiMTFcIixcbiAgICBcIjEyXCIsXG4gIF07XG5cbiAgcHVibGljIG1pbnV0ZXM6IHN0cmluZ1tdID0gW1xuICAgIFwiMDBcIixcbiAgICBcIjAxXCIsXG4gICAgXCIwMlwiLFxuICAgIFwiMDNcIixcbiAgICBcIjA0XCIsXG4gICAgXCIwNVwiLFxuICAgIFwiMDZcIixcbiAgICBcIjA3XCIsXG4gICAgXCIwOFwiLFxuICAgIFwiMDlcIixcbiAgICBcIjEwXCIsXG4gICAgXCIxMVwiLFxuICAgIFwiMTJcIixcbiAgICBcIjEzXCIsXG4gICAgXCIxNFwiLFxuICAgIFwiMTVcIixcbiAgICBcIjE2XCIsXG4gICAgXCIxN1wiLFxuICAgIFwiMThcIixcbiAgICBcIjE5XCIsXG4gICAgXCIyMFwiLFxuICAgIFwiMjFcIixcbiAgICBcIjIyXCIsXG4gICAgXCIyM1wiLFxuICAgIFwiMjRcIixcbiAgICBcIjI1XCIsXG4gICAgXCIyNlwiLFxuICAgIFwiMjdcIixcbiAgICBcIjI4XCIsXG4gICAgXCIyOVwiLFxuICAgIFwiMzBcIixcbiAgICBcIjMxXCIsXG4gICAgXCIzMlwiLFxuICAgIFwiMzNcIixcbiAgICBcIjM0XCIsXG4gICAgXCIzNVwiLFxuICAgIFwiMzZcIixcbiAgICBcIjM3XCIsXG4gICAgXCIzOFwiLFxuICAgIFwiMzlcIixcbiAgICBcIjQwXCIsXG4gICAgXCI0MVwiLFxuICAgIFwiNDJcIixcbiAgICBcIjQzXCIsXG4gICAgXCI0NFwiLFxuICAgIFwiNDVcIixcbiAgICBcIjQ2XCIsXG4gICAgXCI0N1wiLFxuICAgIFwiNDhcIixcbiAgICBcIjQ5XCIsXG4gICAgXCI1MFwiLFxuICAgIFwiNTFcIixcbiAgICBcIjUyXCIsXG4gICAgXCI1M1wiLFxuICAgIFwiNTRcIixcbiAgICBcIjU1XCIsXG4gICAgXCI1NlwiLFxuICAgIFwiNTdcIixcbiAgICBcIjU4XCIsXG4gICAgXCI1OVwiLFxuICBdO1xuXG4gIHB1YmxpYyBzZWxlY3RlZEhvdXI6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBzZWxlY3RlZE1pbnV0ZTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHNlbGVjdGVkTWVyaWRpZW06IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyB2YWx1ZU5hbWU6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyB2YWx1ZU5hbWUxOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgYm9va0ZsYWdBY2NlcHQ6IHN0cmluZ1tdO1xuICBwdWJsaWMgcmVjb3JkSWQ6IHN0cmluZztcbiAgcHVibGljIGN1cnJlbnRRdWVzdGlvbklkOiBzdHJpbmc7XG4gIHB1YmxpYyBzcGlubmVyVHlwZTogc3RyaW5nO1xuICBwdWJsaWMgc3Bpbm5lck5hbWU6IHN0cmluZztcbiAgcHVibGljIG5leHRWYWx1ZTpzdHJpbmcgPScnO1xuXG4gIHN0YXJ0X2RhdGU/OiBhbnk7XG5cbiAgLy9zZWFyY2ggY29tcG9uZW50XG4gIHB1YmxpYyB0ZW1wb0FkZHJlc3M6IGFueVtdID0gW107XG4gIHB1YmxpYyBzZWxlY3RlZFZhbHVlOiBzdHJpbmc7XG4gIHB1YmxpYyBzZWxlY3RlZFBvc3RhbGNvZGU6IHN0cmluZztcbiAgcHVibGljIHNlbGVjdGVkUHJvdmluY2U6IHN0cmluZztcbiAgcHVibGljIHNlbGVjdGVkQ2l0eTogc3RyaW5nO1xuICBwdWJsaWMgc2VsZWN0ZWRBcmVhOiBzdHJpbmc7XG4gIHB1YmxpYyBsb2NhbGFkZHJlc3M6IGFueVtdID0gW107XG5cbiAgcHVibGljIGFsbEFkZHJlc3MgOmFueSBbXSA9IFtdO1xuICBwdWJsaWMgUG9zdGFsQ29kZTpzdHJpbmc7XG4gIHB1YmxpYyBwbGFjZXM6IGFueVtdID0gW107XG4gIHB1YmxpYyBwcm92aW5jZTphbnlbXT1bXTtcbiBcbiAgLy8gUkVRLTAxIFBST0dSRVNTIEJBUlxuICBwdWJsaWMgcHJvZ3Jlc3NTdHlsZTogc3RyaW5nID0gXCIwJVwiO1xuICBwdWJsaWMgYW5zd2VyQ291bnQ6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBpbmRleENvdW50OiBudW1iZXIgPSAwO1xuICBwdWJsaWMgYWRkRmxhZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgcHVibGljIG15RGF0ZVBpY2tlck9wdGlvbnM6IElNeURwT3B0aW9ucyA9IHt9O1xuICBpbmRpdmlkdWFsQm9va0J1dHRvbjogYm9vbGVhbjtcblxuICBwdWJsaWMgYWxsSW5wdXRWYWx1ZXMgPSBbXTsgLy8gSEEgMDJGRUIyNCBUbyBzdG9yZSBhbGwgdGhlIGlucHV0IHZhbHVlc1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNmU2VydmljZTogU2FsZXNmb3JjZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VTZXJ2aWNlOiBDaGFuZ2VTZXJ2aWNlLCBcbiAgICBwcml2YXRlIHNoYXJlZFNlcnZpY2U6IFNoYXJlZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIHNwaW5uZXI6IE5neFNwaW5uZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2Zvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgLy9wcml2YXRlIGRiU2VydmljZTogTmd4SW5kZXhlZERCU2VydmljZSxcbiAgICBwcml2YXRlIGRldmljZVNlcnZpY2U6IERldmljZURldGVjdG9yU2VydmljZSxcbiAgICBlbDogRWxlbWVudFJlZixcbiAgICBwdWJsaWMgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc3Bpbm5lck5hbWUgPSBcInNwMVwiO1xuICAgIHRoaXMuc3Bpbm5lclR5cGUgPSBcImJhbGwtc3Bpbi1jbG9ja3dpc2VcIjtcbiAgfVxuXG4gIC8vIEhBIDAyRkVCMjQgT24gZGF0ZSBjaGFuZ2UgbmVlZCB0byBzdG9yZSB0aGUgY2hhbmdlZCB2YWx1ZSBzbyBwYXNzaW5nIHRoZSBxdWVzdGlvblxuICBvbkRhdGVDaGFuZ2VkKGV2ZW50OiBJTXlEYXRlTW9kZWwsIHF1ZXM6IGFueSkge1xuICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgb25EYXRlQ2hhbmdlZCcpO1xuICAgIC8vdG8gY2hhbmdlIHRoZSBib3JkZXIgY29sb3JcbiAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHByb2dyZXNzQmFyIGNvbmQnKTtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPVxuICAgICAgICBldmVudC5kYXRlLmRheSArIFwiL1wiICsgZXZlbnQuZGF0ZS5tb250aCArIFwiL1wiICsgZXZlbnQuZGF0ZS55ZWFyO1xuICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0uVHlwZV9fYyA9PVwiQm9va1wiKXtcbiAgICAgICAgdGhpcy5zZWxlY3REYXRlID0gIGV2ZW50LmRhdGUuZGF5ICsgXCIvXCIgKyBldmVudC5kYXRlLm1vbnRoICsgXCIvXCIgKyBldmVudC5kYXRlLnllYXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgRUxTRSBvZiBwcm9ncmVzc0JhciBjb25kJyk7XG4gICAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS5UeXBlX19jID09XCJCb29rXCIpe1xuICAgICAgICB0aGlzLnNlbGVjdERhdGUgPSAgZXZlbnQuZGF0ZS5kYXkgKyBcIi1cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi1cIiArIGV2ZW50LmRhdGUueWVhcjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wVmFsdWUgPVxuICAgICAgICBldmVudC5kYXRlLnllYXIgKyBcIi1cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi1cIiArIGV2ZW50LmRhdGUuZGF5O1xuICAgIH1cbiAgICBjb25zdCBodG1sRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibXlkcFwiKTtcbiAgICBodG1sRWxlbWVudFxuICAgICAgLml0ZW0oMClcbiAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImJvcmRlci1jb2xvcjojODdiZTFjO3dpZHRoOjEwMCVcIik7XG4gICAgdGhpcy5kYXRlTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCwgZXZlbnQpO1xuICAgIGlmIChcbiAgICAgIGV2ZW50LmRhdGUuZGF5ID09PSAwICYmXG4gICAgICBldmVudC5kYXRlLm1vbnRoID09PSAwICYmXG4gICAgICBldmVudC5kYXRlLnllYXIgPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMuZGF0ZU1hcC5kZWxldGUodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xuICAgICAgdGhpcy5hbnN3ZXJNYXAuZGVsZXRlKHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgICB9XG4gICAgLy9jb25zb2xlLmxvZygndGhpcy5pbnBWYWx1ZSA9ICcrdGhpcy5pbnBWYWx1ZSk7XG4gICAgLy9jb25zb2xlLmxvZygndGhpcy5zZWxlY3REYXRlID0gJyt0aGlzLnNlbGVjdERhdGUpO1xuICAgIC8vIEhBIDAyRkVCMjQgQXNzaWduaW5nIGlucHV0IHZhbHVlIHRvIHF1ZXMgaW5wdXRcbiAgICBxdWVzLmlucHV0ID0gdGhpcy5pbnBWYWx1ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGV2aWNlSW5mbyA9IHRoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VJbmZvKCk7XG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogUGFyYW1zKSA9PiB7XG4gICAgICBpZiAocGFyYW1zWydpZCddKSB7XG4gICAgICAgIHRoaXMuaW5kaXZpZHVhbEJvb2tCdXR0b24gPSB0cnVlO1xuICAgICAgfWVsc2UgaWYocGFyYW1zWydib29rbGV0SWQnXSl7XG4gICAgICAgIHRoaXMuaW5kaXZpZHVhbEJvb2tCdXR0b24gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcbiAgICB0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPSBcIkFNXCI7XG4gICAgdGhpcy5wcm9jZXNzUUIoKTtcbiAgICAvL2NvbnNvbGUubG9nKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhZGRyZXNzJykpO1xuICAgIGlmKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYWRkcmVzc1wiKSl7XG4gICAgICB0aGlzLmxvY2FsYWRkcmVzcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJhZGRyZXNzXCIpKTtcbiAgICAgIC8vY29uc29sZS5sb2coJ0xlbmd0aD0nK3RoaXMubG9jYWxhZGRyZXNzLmxlbmd0aCk7XG4gICAgICB0aGlzLmFsbEFkZHJlc3M9dGhpcy5sb2NhbGFkZHJlc3MuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5sb2NhbGFkZHJlc3MuaW5kZXhPZihpdGVtKSA9PSBpbmRleCl7XG4gICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH1cbiAgICAgIH0pOyBcbiAgICAgIHRoaXMuYWxsQWRkcmVzcy5zb3J0KGZ1bmN0aW9uKGEsIGIpe1xuICAgICAgICByZXR1cm4gYS56aXBDb2RlIC0gYi56aXBDb2RlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYodGhpcy5kZXZpY2VJbmZvLm9zID09PSAnaU9TJyl7XG4gICAgICAgIGxldCBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKFwiYWRkcmVzc0RCXCIpO1xuICAgICAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXROZXcgPSBldmVudC50YXJnZXQgYXMgSURCUmVxdWVzdDtcbiAgICAgICAgICBsZXQgZGJOZXcgPSB0YXJnZXROZXcucmVzdWx0O1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3ROZXcgPSBkYk5ldy50cmFuc2FjdGlvbignYWRkcmVzc1RhYmxlJylcbiAgICAgICAgICAgICAgICAub2JqZWN0U3RvcmUoJ2FkZHJlc3NUYWJsZScpXG4gICAgICAgICAgICAgICAgLmdldCgxKTtcbiAgICAgICAgICByZXF1ZXN0TmV3Lm9uc3VjY2VzcyA9ICgpPT4ge1xuICAgICAgICAgICAgICBjb25zdCB0ZW1wVmFyID0gcmVxdWVzdE5ldy5yZXN1bHQ7XG4gICAgICAgICAgICAgIHRoaXMubG9jYWxhZGRyZXNzID0gSlNPTi5wYXJzZSh0ZW1wVmFyLndob2xlQWRkcmVzc1N0cmluZyk7XG4gICAgICAgICAgICAgIHRoaXMuYWxsQWRkcmVzcz10aGlzLmxvY2FsYWRkcmVzcy5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubG9jYWxhZGRyZXNzLmluZGV4T2YoaXRlbSkgPT0gaW5kZXgpe1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTsgXG4gICAgICAgICAgICAgIHRoaXMuYWxsQWRkcmVzcy5zb3J0KGZ1bmN0aW9uKGEsIGIpe1xuICAgICAgICAgICAgICAgIHJldHVybiBhLnppcENvZGUgLSBiLnppcENvZGVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgY29uc29sZS5sb2coJ2luc2lkZSBRdWVzdGlvbm5haXJlIG5nT25DaGFuZ2VzJyk7XG4gICAgLy8gTVIgMzBKQU4yNCBVbmNvbW1lbnRlZCBiZWxvdyBsaW5lc1xuICAgIHRoaXMucHJvY2Vzc1FCKCk7XG4gIH1cblxuICBkYXRlX1RpbWVNYXAoKSB7XG4gICAgdGhpcy5zZWxlY3RlZGhvdXJNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLCB0aGlzLnNlbGVjdGVkSG91cik7XG4gICAgdGhpcy5zZWxlY3RlZG1pbnV0ZU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQsIHRoaXMuc2VsZWN0ZWRNaW51dGUpO1xuICB9XG5cbiAgZGF5KCkge1xuICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucyA9IHtcbiAgICAgIGRhdGVGb3JtYXQ6IFwiZGQubW0ueXl5eVwiLFxuICAgICAgc3VuSGlnaGxpZ2h0OiBmYWxzZSxcbiAgICAgIGRpc2FibGVEYXRlUmFuZ2VzOiBbXSxcbiAgICAgIHNob3dDbGVhckRhdGVCdG46IGZhbHNlLFxuICAgICAgZGlzYWJsZVNpbmNlOiB7XG4gICAgICAgIHllYXI6IDAsXG4gICAgICAgIG1vbnRoOiAwLFxuICAgICAgICBkYXk6IDAsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZVVudGlsOiB7XG4gICAgICAgIHllYXI6IDAsXG4gICAgICAgIG1vbnRoOiAwLFxuICAgICAgICBkYXk6IDAsXG4gICAgICB9LFxuICAgICAgc2hvd1RvZGF5QnRuOiBmYWxzZSxcbiAgICAgIGRheUxhYmVsczoge1xuICAgICAgICBzdTogXCJEb21cIixcbiAgICAgICAgbW86IFwiTHVuXCIsXG4gICAgICAgIHR1OiBcIk1hclwiLFxuICAgICAgICB3ZTogXCJNacOpXCIsXG4gICAgICAgIHRoOiBcIkp1ZVwiLFxuICAgICAgICBmcjogXCJWaWVcIixcbiAgICAgICAgc2E6IFwiU8OhYlwiLFxuICAgICAgfSxcbiAgICAgIG1vbnRoTGFiZWxzOiB7XG4gICAgICAgIDE6IFwiRW5lXCIsXG4gICAgICAgIDI6IFwiRmViXCIsXG4gICAgICAgIDM6IFwiTWFyXCIsXG4gICAgICAgIDQ6IFwiQWJyXCIsXG4gICAgICAgIDU6IFwiTWF5b1wiLFxuICAgICAgICA2OiBcIkp1blwiLFxuICAgICAgICA3OiBcIkp1bFwiLFxuICAgICAgICA4OiBcIkFnb1wiLFxuICAgICAgICA5OiBcIlNlcFwiLFxuICAgICAgICAxMDogXCJPY3RcIixcbiAgICAgICAgMTE6IFwiTm92XCIsXG4gICAgICAgIDEyOiBcIkRpY1wiLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgY2hhbmdlKCkge1xuICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJteWRwXCIpO1xuICAgIGlmICh0aGlzLnNlbERhdGUgPT09IG51bGwgfHwgdGhpcy5pbnBWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIGh0bWxFbGVtZW50XG4gICAgICAgIC5pdGVtKDApXG4gICAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIndpZHRoOjEwMCU7Ym9yZGVyOiAxcHggc29saWQgcmVkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBodG1sRWxlbWVudFxuICAgICAgICAuaXRlbSgwKVxuICAgICAgICAuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJib3JkZXI6IDFweCBzb2xpZCAjODdiZTFjIDt3aWR0aDoxMDAlXCIpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NRQigpIHtcbiAgICBjb25zb2xlLmxvZygnUHJvY2Vzc1FCJyk7XG4gICAgLy90aGlzLnFiSXRlbVxuICAgIGNvbnNvbGUubG9nKHRoaXMucWJJZCk7XG4gICAgLy9jb25zb2xlLmxvZygnVmVyc2lvbiBpbiBwcm9jZXNzIGlzIDhiZjExZWZhN2Y5MWEzOTFkOTU3YmY2YjUwNzhlZGM3ZTY1NmI2N2MnKTtcbiAgICBpZiAodGhpcy5xYklkKSB7XG4gICAgICBpZiAodGhpcy5xYklkLmxlbmd0aCA9PSAxOCkge1xuICAgICAgICB0aGlzLnJlYWRRdWVzdGlvbkJvb2sodGhpcy5xYklkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgZWxzZSBwYXJ0Jyk7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ1NldHRpbmcgdGhlIFF1ZXN0aW9uIERpcmVjdGx5IGZvciB0ZXN0aW5nJyk7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtID0gRFRRVUVTVElPTjtcbiAgICAgICAgdGhpcy5xYkl0ZW0gPSBURVNUUUI7XG4gICAgICAgIHRoaXMucHJvY2Vzc1F1ZXN0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdHJpbUxhc3REdW1teShpbnB1dDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIChpbnB1dCA9IGlucHV0LnN1YnN0cmluZygwLCBpbnB1dC5sZW5ndGggLSA2KSk7XG4gIH1cblxuICBnZXRQcm9wZXJUaW1lKGRlZjogc3RyaW5nLCBpbnB1dDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGlucHV0ID09PSBcIlwiID8gZGVmIDogaW5wdXQ7XG4gIH1cblxuICAvL1N1bW1hcnkgUXVlc3Rpb24gQ2xpY2thYmxlIExvZ2ljXG4gIGhhbmRsZUVkaXRDbGljayh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5iYWNraWNvbiA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmFiSXRlbT8uU3RhdHVzX19jID09IFwiUGVuZGluZ1wiKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnJlYWRRdWVzdGlvbih2YWx1ZSk7XG4gICAgICAvL2NvbnNvbGUubG9nKCcgaW4gc2lkZSBzdW1tYXJ5b3BlbicrIHRoaXMuc3VtbWFyeS5sZW5ndGgpO1xuXG4gICAgICAvL0Fzc2lnbiBxdWVzdGlvbiBzdGFjayBsZW5ndGggZnJvbSBzdW1tYXJ5IHBhcnRcbiAgICAgIHZhciBhcnJheUxlbmd0aCA9IHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGg7XG4gICAgICB2YXIgbGVuZ3RoVmFsdWUgPSB0aGlzLnF1ZXN0aW9uU3RhY2suaW5kZXhPZih2YWx1ZSk7XG5cbiAgICAgIGZvciAobGV0IGkgPSBhcnJheUxlbmd0aDsgaSA+IGxlbmd0aFZhbHVlOyBpLS0pIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvblN0YWNrLnBvcCgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYyA9PT0gdHJ1ZSkge1xuICAgICAgICB2YXIgYXJyYXlMZW5ndGgxID0gdGhpcy5xdWVzdGlvbk5hbWUubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBqID0gYXJyYXlMZW5ndGgxOyBqID4gbGVuZ3RoVmFsdWU7IGotLSkge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25OYW1lLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnN1bW1hcnkgPSBbXTtcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEgPSBbXTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVOZXh0Q2xpY2soKSB7XG4gICAgdGhpcy5iYWNrQnV0dG9uRmxhZyA9IGZhbHNlO1xuICAgIHRoaXMuQW5zd2VyU2F2ZSgpO1xuICB9XG5cbiAgQW5zd2VyU2F2ZSgpe1xuICAgIC8vdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuICAgIGlmICh0aGlzLmN1cnJlbnRRdWVzdGlvbklkID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBxdWVzdGlvblR4dD0nJztcbiAgICB0aGlzLmNsZWFyRXJyb3IoKTtcbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uTmV4dF9UcmFja2luZ19JRF9fYyk7XG4gICAgdGhpcy5yZWNvcmRJZCA9IG51bGw7XG4gICAgdmFyIGNRdWVzdGlvbjogUXVlc3Rpb24gPSBuZXcgUXVlc3Rpb24oKTtcbiAgICBjUXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uSXRlbTtcbiAgICAvLyBNUiAzMEpBTjI0IC0gQWRkZWQgQ29uZGl0aW9uIGZvciB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IgKEJvb2sgUXVlc3Rpb24gYW5kIE5vbi1Cb29rKVxuICAgIGlmKHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fcikge1xuICAgICAgICAvLyBDcmVhdGUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB0byBzdG9yZSB0aGUgdmFsdWVzXG4gICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcy5sZW5ndGg7aSsrKSB7XG4gICAgICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHNbaV0uUXVlc3Rpb25fVGV4dF9fYyl7XG4gICAgICAgICAgICB2YXIgcXVlc3Rpb25UZXh0ID0gdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHNbaV0uUXVlc3Rpb25fVGV4dF9fYy5yZXBsYWNlKC88W14+XSs+L2csICcnKTsgLy8gUmVtb3ZlIEhUTUwgdGFncyBmcm9tIHRoZSBRdWVzdGlvbl9UZXh0X19jIHZhbHVlXG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBxdWVzdGlvblRleHQgPSAndW5kZWZpbmVkJztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkc1tpXS5pbnB1dDtcbiAgICAgICAgICBjb25zdCBvYmogPSB7IFtxdWVzdGlvblRleHRdOiBpbnB1dCB9OyAvLyBDcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHF1ZXN0aW9uVGV4dCBhcyB0aGUga2V5IGFuZCB0aGUgaW5wdXQgYXMgdGhlIHZhbHVlXG4gICAgICAgICAgdGhpcy5zdW1tYXJ5RGF0YS5wdXNoKG9iaik7IC8vIEFkZCB0aGUgb2JqZWN0IHRvIHRoZSBkYXRhIGFycmF5XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHF1ZXN0aW9uVGV4dCA9IHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uX1RleHRfX2MucmVwbGFjZSgvPFtePl0rPi9nLCAnJyk7XG4gICAgICBjb25zdCBpbnB1dCA9IHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgY29uc3Qgb2JqID0geyBbcXVlc3Rpb25UZXh0XTogaW5wdXQgfTsgLy8gQ3JlYXRlIGFuIG9iamVjdCB3aXRoIHRoZSBxdWVzdGlvblRleHQgYXMgdGhlIGtleSBhbmQgdGhlIGlucHV0IGFzIHRoZSB2YWx1ZVxuICAgICAgdGhpcy5zdW1tYXJ5RGF0YS5wdXNoKG9iaik7IC8vIEFkZCB0aGUgb2JqZWN0IHRvIHRoZSBkYXRhIGFycmF5XG4gICAgfVxuXG4gICAgICAgICB2YXIgdHlwID0gY1F1ZXN0aW9uLlR5cGVfX2M7XG4gICAgLy8gdGhpcy5zcXVlcyArPSBjUXVlc3Rpb24uUXVlc3Rpb25fX2MgKyAnQEAjIyQkJztcbiAgICB2YXIgcXVlc1ZhbHVlID0gY1F1ZXN0aW9uLlF1ZXN0aW9uX1RleHRfX2M7XG4gICAgdmFyIG1haWxmb3JtYXQgPVxuICAgICAgXCJeW14uXVthLXpBLVowLTkhIyQlJicqKy0vPT9eX2B7fH1+XStbXi5dQFteLV1bYS16QS1aMC05Li1dK1teLV0uW2EtekEtWl17Mix9JFwiO1xuXG4gICAgLy8gUHJvY2VzcyBJbnB1dHNcbiAgICBpZiAodGhpcy5jaGVja2JveEZsYWcpIHtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgLy8gU2F2ZSBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnMgaW4gdGhlIGlucFZhbHVlXG4gICAgICBmb3IgKHZhciBvdiBvZiB0aGlzLm9wdGlvblZhbHVlcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uY2hlY2tlZCkpIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSBvdi5WYWx1ZV9fYyArIFwiQEAjIyQkXCI7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSBvdi5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZW1haWxGbGFnKSB7XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZSAmJiB0aGlzLmlucFZhbHVlLm1hdGNoKG1haWxmb3JtYXQpKSB7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuYWxwaGFudW1lcmljRmxhZykge1xuICAgICAgdmFyIGlzTm90VmFsaWRBY2NOdW0gPSB0aGlzLmlzTm90VmFsaWRBY2NOdW1iZXIodGhpcy5pbnBWYWx1ZSk7XG4gICAgICBpZiAoaXNOb3RWYWxpZEFjY051bSkge1xuICAgICAgICB0aGlzLm5vdFZhbGlkQWNjTnVtID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IHRoaXMucXVlc3Rpb25JdGVtLk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMubm90VmFsaWRBY2NOdW0gPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubnVtYmVyRmxhZykge1xuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IHRoaXMucXVlc3Rpb25JdGVtLk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5ib29rRmxhZykge1xuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgICB2YXIgaGFzTWlzc2luZ0lucHV0ID0gZmFsc2U7XG4gICAgICBmb3IgKHZhciBpdGVtIG9mIHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKSB7XG4gICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICBcbiAgICAgICAgaWYoaXRlbS5UeXBlX19jID09IFwiRGF0ZVwiIHx8IGl0ZW0uVHlwZV9fYyA9PSBcIlRpbWVcIikge1xuICAgICAgICAgIC8vdGhpcyBvbmVcbiAgICAgICAgICB0aGlzLmNoYW5nZSgpO1xuICAgICAgICAgICAgaWYoaXRlbS5UeXBlX19jID09IFwiRGF0ZVwiKXtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBkYXRlIHR5cGUgY29uZCA9ICcrdGhpcy5zZWxlY3REYXRlKTtcbiAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0RGF0ZTtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmlucFZhbHVlKVxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2VsZWN0RGF0ZSlcbiAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgaWYoaXRlbS5UeXBlX19jID09IFwiVGltZVwiKXtcbiAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRIb3VyK3RoaXMuc2VsZWN0ZWRNZXJpZGllbSt0aGlzLnNlbGVjdGVkTWludXRlKVxuICAgICAgICAgICAgIFxuICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID1cbiAgICAgICAgICAgICAgICAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIlBNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgIT0gXCIxMlwiXG4gICAgICAgICAgICAgICAgICA/IE51bWJlcih0aGlzLnNlbGVjdGVkSG91cikgKyAxMlxuICAgICAgICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkSG91cikgK1xuICAgICAgICAgICAgICAgIFwiOlwiICtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgUE1cIjtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJBTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyID09PSBcIjEyXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9IFwiMDBcIiArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIEFNXCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYykge1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0RGF0ZSl7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5zZWxlY3REYXRlK1wiIFwiK3RoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiIFwiK3RoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNlbGVjdERhdGUpe1xuICAgICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0RGF0ZStcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlO1xuICAgICAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBIQSAzMS1KQU4tMjQgUmVtb3ZlZCB0aGUgc2VsZWN0SG91ciBhbmQgc2VsZWN0TWludXRlIGNvbmRpdGlvblxuICAgICAgICAgIGlmICh0aGlzLnNlbERhdGUgPT09IG51bGwgfHwgdGhpcy5zZWxEYXRlID09PSB1bmRlZmluZWQgfHwgIXRoaXMuaW5wVmFsdWUgfHwgIXRoaXMuc2VsZWN0RGF0ZSkge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBudWxsIGNvbmRpdGlvbiBvZiBpbnB1dCcpO1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICBjb25zdCBodG1sRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibXlkcFwiKTtcbiAgICAgICAgICAgIGh0bWxFbGVtZW50XG4gICAgICAgICAgICAgIC5pdGVtKDApXG4gICAgICAgICAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIndpZHRoOjEwMCU7Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJlZCAhaW1wb3J0YW50O1wiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kYXRlX1RpbWVNYXAoKTtcbiAgICAgIH1cbiAgICAgIC8vIEhBIDMxLUpBTi0yNCBBZGRlZCB0ZXh0IGVycm9yIGNvbmRpdGlvblxuICAgICAgaWYoaXRlbS5UeXBlX19jPT0gXCJUZXh0XCIpe1xuICAgICAgICBpZiAoIWl0ZW0uaW5wdXQpIHtcbiAgICAgICAgICBpdGVtLmlucHV0ID0gXCJcIjtcbiAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcy5pbnBWYWx1ZSA9IGl0ZW0uaW5wdXQ7IDYzNFxuICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaXRlbS5Jc19PcHRpb25hbF9fYyAmJlxuICAgICAgICAvLyAgKChpdGVtLlR5cGVfX2MgIT0gXCJGaWxlXCIgJiYgIWl0ZW0uaW5wdXQgJiYgaXRlbS5UeXBlX19jICE9ICdEYXRlJyAmJiBpdGVtLlR5cGVfX2MgIT0gJ1RpbWUnKSB8fFxuICAgICAgICAgLy8gICAoaXRlbS5UeXBlX19jID09IFwiRmlsZVwiICYmIHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID09IDApKVxuICAgICAgICAgKGl0ZW0uVHlwZV9fYyA9PSBcIkZpbGVcIiAmJiB0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA9PSAwKVxuICAgICAgICApIHtcbiAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0uVHlwZV9fYyA9PSBcIlJhZGlvXCIpIHtcbiAgICAgICAgICBpZiAoIWl0ZW0uaW5wdXQpIHtcbiAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS5UeXBlX19jID09IFwiRHJvcGRvd25cIikge1xuICAgICAgICAgIGlmICghaXRlbS5pbnB1dCkge1xuICAgICAgICAgICAgaXRlbS5pbnB1dCA9IFwiXCI7XG4gICAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0uVHlwZV9fYyA9PSBcIkVtYWlsXCIpIHtcbiAgICAgICAgICBpZiAoaXRlbS5pbnB1dCAmJiBpdGVtLmlucHV0Lm1hdGNoKG1haWxmb3JtYXQpKSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS5UeXBlX19jID09IFwiRmlsZVwiICYmIHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnRJdGVtIG9mIHRoaXMuYXR0YWNobWVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgKz1cbiAgICAgICAgICAgICAgYXR0YWNobWVudEl0ZW0uYXR0YWNobWVudElkICtcbiAgICAgICAgICAgICAgXCJAIyRcIiArXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLmF0dGFjaG1lbnROYW1lICtcbiAgICAgICAgICAgICAgXCIsXCI7XG4gICAgICAgICAgICBpZiAoaXRlbS5pbnB1dCA9PSB0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlJyArIHJlY29yZElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdGhpcy5hdHRhY2htZW50cyA9IFtdO1xuICAgICAgICB9IC8vaXRlbS5pbnB1dCA9PSB0aGlzLmlucFZhbHVlO1xuXG4gICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gKGl0ZW0uaW5wdXQgIT0gdW5kZWZpbmVkID8gaXRlbS5pbnB1dCA6IFwiXCIpICsgXCJAQCMjJCRcIjtcbiAgICAgICAgcXVlc3Rpb25UeHQgKz0gaXRlbS5RdWVzdGlvbl9fYyArIFwiQEAjIyQkXCI7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBib29rMScgKyB0aGlzLmlucFZhbHVlKVxuICAgICAgfVxuICAgICAgaWYgKGhhc01pc3NpbmdJbnB1dCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy50cmltTGFzdER1bW15KHRoaXMuaW5wVmFsdWUpO1xuICAgICAgcXVlc3Rpb25UeHQgPSBxdWVzdGlvblR4dCA/IHRoaXMudHJpbUxhc3REdW1teShxdWVzdGlvblR4dCkgOiBxdWVzdGlvblR4dDtcbiAgICB9IFxuICAgIGVsc2UgaWYgKHRoaXMubGlzdEZsYWcpIHtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSAnJztcbiAgICAgIHZhciBoYXNNaXNzaW5nSW5wdXQgPSBmYWxzZTtcbiAgICAgIGlmKHRoaXMubG9jYWxTdWJRTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpe1xuICAgICAgICB0aGlzLnN1YkFuc01hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgZm9yICh2YXIgbG9jYWxRdWVzIG9mIHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpIHtcbiAgICAgICAgICAgIGlmKCFsb2NhbFF1ZXMuaW5wdXQpIHtcbiAgICAgICAgICAgICAgbG9jYWxRdWVzLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGlmKCF0aGlzLnN1YkFuc01hcC5oYXMobG9jYWxRdWVzLklkKSl7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGFucyBtYXAnKVxuICAgICAgICAgICAgdGhpcy5zdWJBbnNNYXAuc2V0KGxvY2FsUXVlcy5JZCxsb2NhbFF1ZXMuaW5wdXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGFucyBtYXAgZWxzZScpXG4gICAgICAgICAgICB0aGlzLnN1YkFuc01hcC5zZXQobG9jYWxRdWVzLklkLHRoaXMuc3ViQW5zTWFwLmdldChsb2NhbFF1ZXMuSWQpICsgJyQkQEAjIycrbG9jYWxRdWVzLmlucHV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzTWlzc2luZ0lucHV0KSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnZmlsZSB0d28nKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN1YkFuc01hcC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBNYXAnICk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2codmFsdWUpO1xuICAgICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gKHZhbHVlICE9IHVuZGVmaW5lZCA/IHZhbHVlIDogJycpICsgJ0BAIyMkJCc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy50cmltTGFzdER1bW15KHRoaXMuaW5wVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmRyb3Bkb3duRmxhZykge1xuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiLlwiO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuZHRGbGFnICYmIHRoaXMuZGF0ZUZsYWcgJiYgdGhpcy50aW1lRmxhZykge1xuICAgICAgLy90aGlzIG9uZVxuICAgICAgdGhpcy5jaGFuZ2UoKTtcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdGhpcy5nZXRQcm9wZXJUaW1lKFwiMTJcIiwgdGhpcy5zZWxlY3RlZEhvdXIpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gdGhpcy5nZXRQcm9wZXJUaW1lKFwiMDBcIiwgdGhpcy5zZWxlY3RlZE1pbnV0ZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9IHRoaXMuZ2V0UHJvcGVyVGltZShcIkFNXCIsIHRoaXMuc2VsZWN0ZWRNZXJpZGllbSk7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZS5sZW5ndGgpO1xuXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxuICAgICAgICAgICAgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJQTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyICE9IFwiMTJcIlxuICAgICAgICAgICAgICA/IE51bWJlcih0aGlzLnNlbGVjdGVkSG91cikgKyAxMlxuICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRIb3VyKSArXG4gICAgICAgICAgICBcIjpcIiArXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgUE1cIjtcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIkFNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPT09IFwiMTJcIikge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBcIjAwXCIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGUgKyBcIiBBTVwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jKSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZSArIFwiIFwiICsgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCJUXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlO1xuICAgICAgICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCIgXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyBcIlRcIiArIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcImFucyA9PiBcIiArIHRoaXMuaW5wVmFsdWUpO1xuICAgICAgICAgIHZhciBkYXRlMTogYW55ID0gdGhpcy5pbnBWYWx1ZS5zcGxpdChcIiBcIik7XG4gICAgICAgICAgZGF0ZTEgPSBkYXRlMVswXS5zcGxpdChcIi9cIik7XG4gICAgICAgICAgZGF0ZTEgPSBbZGF0ZTFbMl0sIGRhdGUxWzFdLCBkYXRlMVswXV0uam9pbihcIi1cIik7XG4gICAgICAgICAgZGF0ZTEgPSBuZXcgRGF0ZShkYXRlMSk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhkYXRlMSlcbiAgICAgICAgICB2YXIgZGF0ZTI6IGFueSA9IHRoaXMuaW5zdXJhbmNlU3RhcnREYXRlLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICBkYXRlMiA9IG5ldyBEYXRlKGRhdGUyWzBdKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGRhdGUyKTtcbiAgICAgICAgICBpZiAoZGF0ZTEgPCBkYXRlMikge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvci5lcnJvck1zZyA9XG4gICAgICAgICAgICAgIFwiTm8gZXMgcG9zaWJsZSBkYXIgZGUgYWx0YSBsYSByZWNsYW1hY2nDs24gZGViaWRvIGEgcXVlIGxhIGZlY2hhIGRlbCBpbmNpZGVudGUgZXMgYW50ZXJpb3IgYSBsYSBmZWNoYSBkZSBjb250cmF0YWNpw7NuIGRlIGxhIHDDs2xpemFcIjtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZScpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbERhdGUgPT09IG51bGwgfHwgIXRoaXMuaW5wVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRlX1RpbWVNYXAoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZUZsYWcgJiYgdGhpcy5kdEZsYWcgJiYgIXRoaXMuZGF0ZUZsYWcpIHtcbiAgICAgIHRoaXMuZGF0ZV9UaW1lTWFwKCk7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uWDI0X0hvdXJzX19jID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmlucFZhbHVlID1cbiAgICAgICAgICAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIlBNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgIT0gXCIxMlwiXG4gICAgICAgICAgICA/IE51bWJlcih0aGlzLnNlbGVjdGVkSG91cikgKyAxMlxuICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkSG91cikgK1xuICAgICAgICAgIFwiOlwiICtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRIb3VyICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUubGVuZ3RoIDwgNSkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRlRmxhZyAmJiB0aGlzLmR0RmxhZyAmJiAhdGhpcy50aW1lRmxhZykge1xuICAgICAgdGhpcy5jaGFuZ2UoKTtcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlLmxlbmd0aCA8IDcgfHwgdGhpcy5zZWxEYXRlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmZpbGVGbGFnKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdmb3VyJylcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgaWYgKHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50SXRlbSBvZiB0aGlzLmF0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgdGhpcy5pbnBWYWx1ZSArPVxuICAgICAgICAgICAgYXR0YWNobWVudEl0ZW0uYXR0YWNobWVudElkICtcbiAgICAgICAgICAgIFwiQCMkXCIgK1xuICAgICAgICAgICAgYXR0YWNobWVudEl0ZW0uYXR0YWNobWVudE5hbWUgK1xuICAgICAgICAgICAgXCIsXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZpbGVzc3MnICsgdGhpcy5pbnBWYWx1ZSk7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlLnN1YnN0cigwLCB0aGlzLmlucFZhbHVlLmxlbmd0aCAtIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgdGhlIGFuc3dlciBiZWZvcmUgc2F2aW5nIHRvIHRoZSBEQlxuICAgIGlmICghdGhpcy5xdWVzdGlvbkl0ZW0uSXNfT3B0aW9uYWxfX2MgJiYgIXRoaXMuaW5wVmFsdWUpIHtcbiAgICAgIC8vIFNob3cgZXJyb3IgdGhhdCB0aGUgcXVlc3Rpb24gbXVzdCBiZSBhbnN3ZXJlZFxuICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFNhdmUgdGhlIEFuc3dlciBpbiB0aGUgREJcbiAgICB0aGlzLmFuc3dlcldyYXAgPSBuZXcgQW5zd2VyV3JhcHBlcigpO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5hYklkID0gdGhpcy5hYkl0ZW0uSWQ7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLnF1ZXNJZCA9IGNRdWVzdGlvbi5JZDtcbiAgICB0aGlzLmFuc3dlcldyYXAucXVlc1ZhbHVlID0gcXVlc1ZhbHVlO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5xVHlwID0gdHlwO1xuICAgIC8vIEhBIDAyRkVCMjQgVG8gZGlzcGxheSB0aGUgdmFsdWVzIGluIHN1bW1hcnkgdXNpbmcgdGhpc1xuICAgIHRoaXMuYWxsSW5wdXRWYWx1ZXMgPSBbXTtcbiAgICB0aGlzLnN1YlF1ZXN0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgdmFyIGlucHV0VmFsdWUgPSB7fTtcbiAgICAgIGlucHV0VmFsdWVbJ0lkJ10gPSBlbGVtZW50Py5JZDtcbiAgICAgIGlucHV0VmFsdWVbJ1R5cGVfX2MnXSA9IGVsZW1lbnQ/LlR5cGVfX2M7XG4gICAgICBpbnB1dFZhbHVlWydSZWZlcmVuY2VfRmllbGRfX2MnXSA9IGVsZW1lbnQ/LlJlZmVyZW5jZV9GaWVsZF9fYztcbiAgICAgIGlucHV0VmFsdWVbJ1F1ZXN0aW9uX1RleHRfX2MnXSA9IGVsZW1lbnQ/LlF1ZXN0aW9uX1RleHRfX2M7XG4gICAgICBpbnB1dFZhbHVlWydpbnB1dCddID0gZWxlbWVudD8uaW5wdXQ7XG4gICAgICBpbnB1dFZhbHVlID8gdGhpcy5hbGxJbnB1dFZhbHVlcy5wdXNoKGlucHV0VmFsdWUpIDogdGhpcy5hbGxJbnB1dFZhbHVlcztcbiAgICB9KTtcbiAgICB0aGlzLmFuc3dlcldyYXAubXlWYWwgPSB0aGlzLmFsbElucHV0VmFsdWVzO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSA9IHRoaXMuaW5wVmFsdWU7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLmdyb3VwVGV4dCA9IGNRdWVzdGlvbi5Hcm91cF9fYztcbiAgICBjb25zb2xlLmxvZygndGhpcy5hbnN3ZXJXcmFwLnFUeXAnLHRoaXMuYW5zd2VyV3JhcC5xVHlwKTtcbiAgIGlmKHRoaXMuYW5zd2VyV3JhcC5xVHlwID09IFwiQWxwaGFudW1lcmljXCIpe1xuICAgICAgdGhpcy5hbnN3ZXJXcmFwLmFuc1ZhbHVlID0gJ0VTJysgdGhpcy5pbnBWYWx1ZTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdCYW5rIGNvbmRpdGlvbicpO1xuICAgICAgLy8gY29uc29sZS5sb2codGhpcy5hbnN3ZXJXcmFwLmFuc1ZhbHVlKTtcbiAgICB9XG4gICAgLyppZiAoY1F1ZXN0aW9uLlR5cGVfX2MgPT0gJ0Jvb2snKXtcbiAgICBmb3IgKHZhciBxYiBvZiBjUXVlc3Rpb24uUXVlc3Rpb25zX19yLnJlY29yZHMpe1xuICAgICAgLy9jb25zb2xlLmxvZyhxYi5RdWVzdGlvbl9fYysnKioqKicrXCJAQCMjJCRcIilcbiAgICB9IFxuICB9Ki9cbiAgICAvL3RoaXMuYW5zd2VyV3JhcC5zcXVlc1ZhbHVlID0gY1F1ZXN0aW9uLlF1ZXN0aW9uX19jO1xuICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gdGhpcy5pbnBWYWx1ZTtcbiAgICAvLyBlbWl0IHRoZSBjdXJyZW50IHF1ZXN0aW9uIHdpdGggaW5wdXQgdG8gcGFyZW50XG4gICAgdGhpcy5oYW5kbGVRdWVzdGlvbi5lbWl0KHRoaXMucXVlc3Rpb25JdGVtKTtcbiAgICBjb25zb2xlLmxvZygncXVlc3Rpb25JdGVtLS0+Jyk7XG4gICAgY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5zcXVlc1ZhbHVlID0gcXVlc3Rpb25UeHQgPyBxdWVzdGlvblR4dCA6IGNRdWVzdGlvbi5RdWVzdGlvbl9fYztcbiAgICB0aGlzLnNhdmVBbnN3ZXIoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgdmFyIGNRdWVzdGlvbjogUXVlc3Rpb24gPSBuZXcgUXVlc3Rpb24oKTtcbiAgICBjUXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uSXRlbTtcbiAgICB2YXIgdHlwID0gY1F1ZXN0aW9uLlR5cGVfX2M7XG4gICAgLy8gSWYgbm8gZXJyb3IgdGhlbiBtb3ZlIHRvIG5leHQgc3RlcHNcbiAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucHVzaChjUXVlc3Rpb24uSWQpO1xuICAgIC8vICB0aGlzLnF1ZXN0aW9uTmFtZS5wdXNoKGNRdWVzdGlvbi5OYW1lKTtcbiAgICBcbiAgICAvLyBDT05ESVRJT05BTCB2cyBPUFRJT05PTkxZICYgVU5DT05ESVRJT05BTFxuICAgIC8vIEhBIDMxLUpBTi0yNCBBZGRlZCB0ZXJuYXJ5IGV2ZW4gaW4gZWxzZSBjb25kaXRpb25zIGJlbG93XG4gICAgaWYgKGNRdWVzdGlvbj8uUmVjb3JkVHlwZT8uTmFtZSA9PSBcIkNPTkRJVElPTkFMXCIpIHtcbiAgICAgIGZvciAodmFyIGNPcHQgb2YgY1F1ZXN0aW9uLlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkcykge1xuICAgICAgICAvLyBSYWRpbyAvIERhdGFcbiAgICAgICAgLy9jb25zb2xlLmxvZygnT3B0aW9uID0+ICcgKyBjT3B0LlZhbHVlX19jICsgJyBtYXRjaGluZyB3aXRoICcgKyBhbnNWYWwpO1xuICAgICAgICBpZiAoY09wdC5WYWx1ZV9fYyA9PSB0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnTWF0Y2ggRm91bmQgdXNpbmcgJyArIGNPcHQuTmV4dF9RdWVzdGlvbl9fYyk7XG4gICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNPcHQuTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdjb25kaXRpb25hbCByZWNvcmQgaWQnKyB0aGlzLnJlY29yZElkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQ291bGQgYmUgb2YgdHlwZSBEYXRhIGFuZCBleGlzdGluZyB2YWx1ZVxuICAgICAgaWYgKHRoaXMucmVjb3JkSWQgJiYgdHlwID09IFwiRGF0YVwiKSB7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNRdWVzdGlvbj8uUmVjb3JkVHlwZT8uTmFtZSA9PSBcIk9QVElPTk9OTFlcIikge1xuICAgICAgLy8gIE9QVElPTk9OTFkgbG9naWNcbiAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcbiAgICB9IGVsc2UgaWYgKGNRdWVzdGlvbj8uUmVjb3JkVHlwZT8uTmFtZSA9PSBcIlVOQ09ORElUSU9OQUxcIikge1xuICAgICAgLy9VbmNvbmRpdGlvbmFsICBsb2dpY1xuICAgICAgLy9jb25zb2xlLmxvZyhcImluc2lkZSB1bmNvbmRpdGlvbmFsXCIpO1xuICAgICAgLy9pbnNpZGUgQm9vayBUeXBlXG4gICAgICBpZiAoY1F1ZXN0aW9uLlR5cGVfX2MgPT0gXCJCb29rXCIgJiYgY1F1ZXN0aW9uLlF1ZXN0aW9uX05vX19jICE9JzYnKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJpbnNpZGUgYm9va1wiKTtcbiAgICAgICAgZm9yIChsZXQgb3B0IG9mIGNRdWVzdGlvbi5RdWVzdGlvbnNfX3IucmVjb3Jkcykge1xuICAgICAgICAgIC8vY29uc29sZS5sb2cob3B0LlR5cGVfX2MpO1xuICAgICAgICAgIGlmIChvcHQuVHlwZV9fYyA9PSBcIkRyb3Bkb3duXCIgfHwgb3B0LlR5cGVfX2MgPT0gXCJSYWRpb1wiKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBvcHQxIG9mIG9wdC5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlTmFtZSA9PSBvcHQxLlZhbHVlX19jKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9b3B0MS5OZXh0X1F1ZXN0aW9uX19jIHx8IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jOyAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ0Vsc2UnK3RoaXMucmVjb3JkSWQpXG4gICAgICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoY1F1ZXN0aW9uLlR5cGVfX2MgPT0gXCJCb29rXCIgJiYgY1F1ZXN0aW9uLlF1ZXN0aW9uX05vX19jID09JzYnICkge1xuICAgICAgICBmb3IgKGxldCBvcHQgb2YgY1F1ZXN0aW9uLlF1ZXN0aW9uc19fci5yZWNvcmRzKSB7XG4gICAgICAgICAgaWYgKG9wdC5UeXBlX19jID09IFwiRHJvcGRvd25cIiB8fCBvcHQuVHlwZV9fYyA9PSBcIlJhZGlvXCIpe1xuICAgICAgICAgIGZvciAodmFyIG9wdDEgb2Ygb3B0LlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkcykge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVOYW1lID09IG9wdDEuVmFsdWVfX2MpIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBvcHQxLk5leHRfUXVlc3Rpb25fX2M7ICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAgICBcbiAgICAgIFxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gSEEgMzEtSkFOLTI0IEFkZGVkIGVsc2UgdG8ga2VlcCB0aGUgYXNzaWdubWVudCBkZWZhdWx0XG4gICAgZWxzZXtcbiAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcbiAgICB9XG5cbiAgICAvLyBDQVRFR09SSVpBVElPTlxuICAgIC8vdGhpcy5zdGVwcGVyQ2F0ZWcoKTtcblxuICAgIC8vIENhbGxpbmcgdGhlIHByb2dyZXMgYmFyIHVwZGF0ZSBmdW5jdGlvblxuICAgIHRoaXMuYW5zd2VyQ291bnQrKztcbiAgICB0aGlzLnVwZGF0ZVByb2dyZXNzKCk7XG5cblxuICAgIC8vIENBVEVHT1JJWkFUSU9OXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xuXG4gICAgaWYgKHRoaXMucmVjb3JkSWQpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ0JlZm9yZSBDYWxsaW5nIHJlYWRRdWVzdGlvbigpIHVzaW5nICcgKyByZWNvcmRJZCk7XG4gICAgICB0aGlzLnJlYWRRdWVzdGlvbih0aGlzLnJlY29yZElkKTtcbiAgICAgIHRoaXMucG9wID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wb3AgPSBmYWxzZTtcbiAgICAgIC8vY29uc29sZS5sb2coJ1N1bW1hcnkgUGFnZSBMb2dpYycpO1xuICAgICAgLy8gUmVzZXQgdGhlIFZhcmlhYmxlc1xuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgICB0aGlzLmFuc3dlcldyYXAgPSBuZXcgQW5zd2VyV3JhcHBlcigpO1xuICAgICAgdGhpcy5vcHRpb25WYWx1ZXMgPSBbXTtcbiAgICAgIHRoaXMuc3ViUXVlc3Rpb25zID0gW107XG5cbiAgICAgIHRoaXMucmVzZXRGbGFnKHR5cCk7XG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbSA9IG51bGw7XG5cbiAgICAgIC8vIFNob3cgU3VtbWFyeVxuICAgICAgZm9yICh2YXIgcSBvZiB0aGlzLnF1ZXN0aW9uU3RhY2spIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSGFuZGxpbmcgUXVlc3Rpb24gPT4gJyArIHEpO1xuICAgICAgICB2YXIgYW5zV3JhcCA9IHRoaXMuYW5zd2VyTWFwLmdldChxKTtcbiAgICAgICAgaWYgKGFuc1dyYXApIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdIYW5kbGluZyBBbnN3ZXIgZm9yICcgKyBhbnNXcmFwLnF1ZXNJZCArICcgb2YgdHlwZSAnICsgYW5zV3JhcC5xVHlwKTtcbiAgICAgICAgICBpZihhbnNXcmFwLnFUeXAgPT0gJ0ZpbGUnIHx8IGFuc1dyYXAucVR5cCA9PSAnQm9vayd8fGFuc1dyYXAucVR5cCA9PSAnTGlzdCcgfHwgYW5zV3JhcC5xVHlwID09ICdDaGVja2JveCcpe1xuICAgICAgICAgICAgdmFyIG5ld1N0ciA9ICcnO1xuICAgICAgICAgICAgZm9yICh2YXIgYW5zU3RyIG9mIGFuc1dyYXAuYW5zVmFsdWUuc3BsaXQoJ0BAIyMkJCcpKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGFuc1N0cjEgb2YgYW5zU3RyLnNwbGl0KCckJEBAIyMnKSkge1xuICAgICAgICAgICAgICAvLyAgaWYoYW5zU3RyMS5pbmNsdWRlcygnYW5zd2VyU3RyaW5nJykpeyAvL3JlbW92ZSB0aGUgYW5zd2VyIHN0cmluZyAgXG4gICAgICAgICAgICAgICAvLyAgIGNvbnN0IHdpdGhvdXRBbnN3ZXJTdHJpbmcgPSBhbnNTdHIxLnJlcGxhY2UoXCJhbnN3ZXJTdHJpbmc6IFwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAvLyAgYW5zU3RyMSA9IHdpdGhvdXRBbnN3ZXJTdHJpbmc7XG4gICAgICAgICAgICAgIC8vICB9XG4gICAgICAgICAgICAgICAgaWYgKGFuc1N0cjEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgaWYgKG5ld1N0ci5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdTdHIgPSBhbnNTdHIxO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyICs9ICc7ICcgKyBhbnNTdHIxOyAgLy9jb21tYSgsKSBjaGFuZ2VkIGFzIHNlbWkgY29sb24oOykgYmVjYXVzZSBvZiBhZGRyZXNzIGNvbnRhaW5zIGNvbW1hKCwpIFxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmF0dGFjaG1lbnRzTWFwLmhhcyhhbnNXcmFwLnF1ZXNJZCkpe1xuICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgYXR0IG9mIHRoaXMuYXR0YWNobWVudHNNYXAuZ2V0KGFuc1dyYXAucXVlc0lkKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdHIgPSBuZXdTdHIucmVwbGFjZShhdHQuYXR0YWNobWVudElkLCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gKG5ld1N0ci5yZXBsYWNlKCcsLCcsJywgJykpLnJlcGxhY2UoJywgLCcsJywgJyk7XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciA9IG5ld1N0ci5zdGFydHNXaXRoKCcsJykgPyBuZXdTdHIuc3Vic3RyaW5nKDEsIG5ld1N0ci5sZW5ndGgpIDogKG5ld1N0ci5lbmRzV2l0aCgnLCcpID8gbmV3U3RyLnN1YnN0cmluZygwLCBuZXdTdHIubGVuZ3RoIC0gMSkgOiBuZXdTdHIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWFuc1dyYXAuYW5zVmFsdWUgPSBuZXdTdHI7XG4gICAgICAgICAgICBhbnNXcmFwLm15VmFsID0gdGhpcy5hbGxJbnB1dFZhbHVlcztcbiAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc1dyYXApO1xuICAgICAgICAgIHRoaXMuYmFja2ljb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0VGV4dCh2YWx1ZSkge1xuICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHZhbHVlLCBcInRleHQvaHRtbFwiKTtcbiAgICAvL2NvbnNvbGUubG9nKCBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50KTtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXG4gICAgICBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50XG4gICAgKTtcbiAgfVxuXG4gIGhhbmRsZUJhY2tDbGljaygpIHtcbiAgICB0aGlzLmJhY2sgPSB0cnVlO1xuICAgIGlmICh0aGlzLnBvcCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucG9wKCk7XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5CYWNrX1RyYWNraW5nX0lEX19jKTtcbiAgICB2YXIgY1F1ZXN0aW9uOiBRdWVzdGlvbiA9IG5ldyBRdWVzdGlvbigpO1xuICAgIGNRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25JdGVtO1xuICAgIGlmKGNRdWVzdGlvbi5RdWVzdGlvbl9Ob19fYyA9PScxJyl7XG4gICAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uQmFja19fYyk7XG4gICAgfVxuICAgIFxuXG4gICAgdGhpcy5hbnN3ZXJDb3VudC0tO1xuICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICAvLyBDQVRFR09SSVpBVElPTlxuICAgIC8vdGhpcy5zdGVwcGVyQ2F0ZWcoKTtcblxuICAgIGlmICh0aGlzLnN1bW1hcnkpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ3N1bW1hcnkgdHJ1ZScpO1xuICAgICAgdGhpcy5zdW1tYXJ5ID0gW107XG4gICAgfVxuICAgIGlmKHRoaXMuc3VtbWFyeURhdGEpe1xuICAgICAgdGhpcy5zdW1tYXJ5RGF0YSA9W107XG4gICAgfVxuXG4gICAgLy8gUmVhZCB0aGUgcHJldmlvdXMgcXVlc3Rpb24gZnJvbSBEQlxuICAgIHRoaXMucmVhZFF1ZXN0aW9uKHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKSk7XG4gICAgLy9jb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uU3RhY2spO1xuICB9XG5cbiAgaGFuZGxlQmFja0NsaWNrTmV3KCkge1xuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5FZGl0X19jKTtcbiAgfVxuXG4gIC8vdXBkYXRpbmcgc3RhdHVzIG9uY2UgUSZBIGNvbXBsZXRlZC5cblxuICBwcml2YXRlIHVwZGF0ZUFuc3dlckJvb2sgPSAodXVpZDogc3RyaW5nKSA9PiB7XG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgIC8vICAgdGhpcy50a24sXG4gICAgICAvLyAgIFtcIkFuc3dlckJvb2tcIiwgXCJVcGRhdGVcIiwgdXVpZF0sXG4gICAgICAvLyAgIHRoaXMuc3VjY2Vzc3VwZGF0ZUFCLFxuICAgICAgLy8gICB0aGlzLmZhaWx1cmV1cGRhdGVBQlxuICAgICAgLy8gKTtcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0Fuc3dlckJvb2snLCdVcGRhdGUnLHV1aWQsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YSk9PntcbiAgICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZWQgc3VjY3Vzc2Z1bGx5Jyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICB0aGlzLnN1Y2Nlc3N1cGRhdGVBQihKU09OLnBhcnNlKGRhdGEpKVxuICAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHF1ZXN0aW9uIGJvb2tzJywgZXJyb3IpO1xuICAgICAgfVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZCBcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuIC8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAgIFwiTnh0Q29udHJvbGxlci5uZXdQcm9jZXNzXCIsXG4gICAgICAgIFtcIkFuc3dlckJvb2tcIiwgXCJVcGRhdGVcIiwgdXVpZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksJyddLFxuICAgICAgICB0aGlzLnN1Y2Nlc3N1cGRhdGVBQixcbiAgICAgICAgdGhpcy5mYWlsdXJldXBkYXRlQUJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdWNjZXNzdXBkYXRlQUIgPSAocmVzcG9uc2UpID0+IHtcbiAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgLy8gLy9jb25zb2xlLmxvZygnc3RhdHVzIHN1Y2Nlc3MnKVxuICAgIHRoaXMuYWJJdGVtLlN0YXR1c19fYyA9IFwiQ29tcGxldGVkXCI7XG4gIH07XG4gIHByaXZhdGUgZmFpbHVyZXVwZGF0ZUFCID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgLy9jb25zb2xlLmxvZygnc3RhdHVzIGZhaWxlZCcpXG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkUXVlc3Rpb25Cb29rID0gKHV1aWQ6IHN0cmluZykgPT4ge1xuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAgLy8gICBbXCJRdWVzdGlvbkJvb2tcIiwgXCJyZWFkXCIsIHV1aWRdLFxuICAgICAgLy8gICB0aGlzLnN1Y2Nlc3NSZWFkQm9vayxcbiAgICAgIC8vICAgdGhpcy5mYWlsdXJlUmVhZEJvb2tcbiAgICAgIC8vICk7XG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2hvd0xvYWRlcigpO1xuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xuICAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdRdWVzdGlvbkJvb2snLCdyZWFkJyx1dWlkLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAgKGRhdGEpPT57XG4gICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhIGNhbWUgc3VjZXNzZnVsbHknKTtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGUoKTtcbiAgICAgICAgdGhpcy5zdWNjZXNzUmVhZEJvb2soSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTVIgMzBKQU4yNCAtIFBhc3NpbmcgZmxhZyBmcm9tIE5HTlhUXG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiB0cnVlIH07XG4gICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgIC8vICwgSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApXG4gLy8gVkQgMTJKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICAgIFwiTnh0Q29udHJvbGxlci5uZXdQcm9jZXNzXCIsXG4gICAgICAgIFtcIlF1ZXN0aW9uQm9va1wiLCBcInJlYWRcIiwgdXVpZCwgSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLCcnXSxcbiAgICAgICAgdGhpcy5zdWNjZXNzUmVhZEJvb2ssXG4gICAgICAgIHRoaXMuZmFpbHVyZVJlYWRCb29rXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3VjY2Vzc1JlYWRCb29rID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgY29uc29sZS5sb2coJ0luc2lkZSB0aGUgc3VjY2Vzc1JlYWRCb29rJyk7XG4gICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgIGlmKHJlc3BvbnNlICE9IG51bGwgfHwgcmVzcG9uc2UgIT0gdW5kZWZpbmVkKXtcbiAgICAgIHRoaXMucWJJdGVtID0gcmVzcG9uc2UucXVlc3Rpb25ib29rO1xuICAgICAgdGhpcy5hYkl0ZW0gPSByZXNwb25zZS5hbnN3ZXJib29rO1xuICAgIH1cbiAgIC8vIGNvbnNvbGUubG9nKCdyZWFkaW5nUXVlc3Rpb24gdXNpbmcgJyArIHRoaXMucWJJdGVtKTtcbiAgICBpZiAodGhpcy5hYkl0ZW0/LlN0YXR1c19fYyA9PSBcIlBlbmRpbmdcIikge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmFiSXRlbS5BbnN3ZXJzX19yID09IG51bGwgfHxcbiAgICAgICAgdGhpcy5hYkl0ZW0uQW5zd2Vyc19fci5yZWNvcmRzLmxlbmd0aCA9PSAwXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5yZWFkUXVlc3Rpb24odGhpcy5xYkl0ZW0uRmlyc3RfUXVlc3Rpb25fX2MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUG9wdWxhdGUgdGhlIGV4aXN0aW5nIGFuc3dlcnNcbiAgICAgICAgdmFyIGxhc3RRdWVzdGlvbklkID0gXCJcIjtcblxuICAgICAgICBmb3IgKHZhciBhbnNPYmplY3Qgb2YgdGhpcy5hYkl0ZW0uQW5zd2Vyc19fci5yZWNvcmRzKSB7XG4gICAgICAgICAgbGFzdFF1ZXN0aW9uSWQgPSBhbnNPYmplY3QuUXVlc3Rpb25fUmVmX19jO1xuXG4gICAgICAgICAgdGhpcy5xdWVzdGlvblN0YWNrLnB1c2goYW5zT2JqZWN0LlF1ZXN0aW9uX1JlZl9fYyk7XG5cbiAgICAgICAgICB0aGlzLmFuc3dlck1hcC5zZXQoYW5zT2JqZWN0LlF1ZXN0aW9uX1JlZl9fYywge1xuICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnNPYmplY3QuUXVlc3Rpb25fUmljaF9UZXh0X19jLFxuICAgICAgICAgICAgYW5zVmFsdWU6IGFuc09iamVjdC5BbnN3ZXJfTG9uZ19fYyxcbiAgICAgICAgICAgIHF1ZXNJZDogYW5zT2JqZWN0LlF1ZXN0aW9uX1JlZl9fYyxcbiAgICAgICAgICAgIHFUeXA6IGFuc09iamVjdC5RdWVzdGlvbl9UeXBlX19jLFxuICAgICAgICAgICAgZ3JvdXBUZXh0OmFuc09iamVjdC5RdWVzdGlvbl9Hcm91cF9UZXh0X19jLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uU3RhY2spXG4gICAgICAgICAgaWYgKGFuc09iamVjdC5RdWVzdGlvbl9UeXBlX19jID09IFwiQm9va1wiKSB7XG4gICAgICAgICAgICB2YXIgYXYxID0gYW5zT2JqZWN0LkFuc3dlcl9Mb25nX19jLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgICAgICAgLy8gLy9jb25zb2xlLmxvZyhcImJvb2sgbG9nXCIpO1xuXG4gICAgICAgICAgICAvLyAgLy9jb25zb2xlLmxvZyhcImJvb2tpZFwiICsgYXYxWzBdKTtcbiAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudHNNYXAuc2V0KGFuc09iamVjdC5RdWVzdGlvbl9SZWZfX2MsIFtcbiAgICAgICAgICAgICAgeyBhdHRhY2htZW50TmFtZTogYXYxWzFdLCBhdHRhY2htZW50SWQ6IGF2MVswXSB9LFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAvLyAgLy9jb25zb2xlLmxvZyh0aGlzLmF0dGFjaG1lbnRzTWFwKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGFuc09iamVjdC5RdWVzdGlvbl9UeXBlX19jID09IFwiRmlsZVwiKSB7XG4gICAgICAgICAgICAvLyAgLy9jb25zb2xlLmxvZyhcImluc2lkZSBpZlwiKTtcbiAgICAgICAgICAgIHZhciBhdHRMaXN0O1xuICAgICAgICAgICAgdmFyIGF0dDtcbiAgICAgICAgICAgIGZvciAodmFyIGF0dFZhciBvZiBhbnNPYmplY3QuQW5zd2VyX0xvbmdfX2Muc3BsaXQoXCIsXCIpKSB7XG4gICAgICAgICAgICAgIHZhciBhdHRJZE5hbWUgPSBhdHRWYXIuc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgICAgICAgIGF0dC5hdHRhY2htZW50TmFtZSA9IGF0dElkTmFtZVsxXTtcbiAgICAgICAgICAgICAgYXR0LmF0dGFjaG1lbnRJZCA9IGF0dElkTmFtZVswXTtcbiAgICAgICAgICAgICAgYXR0TGlzdC5wdXNoKGF0dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRzTWFwLnNldChhbnNPYmplY3QuUXVlc3Rpb25fUmVmX19jLCBhdHRMaXN0KTtcbiAgICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKHRoaXMuYXR0YWNobWVudHNNYXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmFuc3dlck1hcCk7XG4gICAgICAgIC8vIFJlYWQgdGhlIGxhc3QgYW5zd2VyZWQgcXVlc3Rpb25cbiAgICAgICAgdGhpcy5yZWFkUXVlc3Rpb24obGFzdFF1ZXN0aW9uSWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5hYkl0ZW0/LlN0YXR1c19fYyA9PSBcIkNvbXBsZXRlZFwiKSB7XG4gICAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQoXCJTdW1tYXJ5dXBkYXRlZFwiKTtcbiAgICAgIC8vIFRlbXBvcmFyeSBGaXggZm9yIGR1cGxpY2F0ZSBhbnN3ZXJzIG9uIHRoZSBzdW1tYXJ5LlxuICAgICAgdGhpcy5zdW1tYXJ5ID0gW107XG4gICAgICB0aGlzLnBlcmNlbnQgPSAxMDA7XG4gICAgICB0aGlzLnByb2dyZXNzU3R5bGUgPSBcIjEwMCVcIjtcblxuICAgICAgZm9yICh2YXIgYW5zd2VyIG9mIHRoaXMuYWJJdGVtLkFuc3dlcnNfX3IucmVjb3Jkcykge1xuICAgICAgICAvL2NvbnNvbGUubG9nKGFuc3dlci5RdWVzdGlvbl9Hcm91cF9UZXh0X19jKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZygncmVwZWF0Jyk7XG4gICAgICAgIC8vY29uc29sZS5sb2coYW5zd2VyLlF1ZXN0aW9uX1JpY2hfVGV4dF9fYyk7XG4gICAgICAgIHZhciBhbnN3ZXJzID0ge307XG4gICAgICAgIGlmIChhbnN3ZXIuUXVlc3Rpb25fVHlwZV9fYyA9PSBcIkZpbGVcIikge1xuICAgICAgICAgIHZhciBmaWxlcyA9IFwiXCI7XG4gICAgICAgICAgdmFyIGZJbmRleCA9IDA7XG4gICAgICAgICAgdmFyIGZpbGVMaXN0ID0gYW5zd2VyLkFuc3dlcl9Mb25nX19jLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICBmb3IgKHZhciBmaWxlSWROYW1lIG9mIGZpbGVMaXN0KSB7XG4gICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBmaWxlSWROYW1lLnNwbGl0KFwiQCMkXCIpO1xuICAgICAgICAgICAgaWYgKGZJbmRleCA9PSAwKSB7XG4gICAgICAgICAgICAgIGZpbGVzID0gZmlsZU5hbWVbMV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmaWxlcyA9IGZpbGVzICsgXCIgLFwiICsgZmlsZU5hbWVbMV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZJbmRleCsrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFuc3dlcnMgPSB7XG4gICAgICAgICAgICBncm91cFRleHQ6YW5zd2VyLlF1ZXN0aW9uX0dyb3VwX1RleHRfX2MsXG4gICAgICAgICAgICBxdWVzVmFsdWU6IGFuc3dlci5RdWVzdGlvbl9SaWNoX1RleHRfX2MsXG4gICAgICAgICAgICBhbnNWYWx1ZTogZmlsZXMsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcbiAgICAgICAgfSBlbHNlIGlmIChhbnN3ZXIuUXVlc3Rpb25fVHlwZV9fYyA9PSBcIkJvb2tcIikge1xuICAgICAgICAgIC8qICB2YXIgcXVlc05vPTA7XG4gICAgICAgICBpZihhbnN3ZXIuQW5zd2VyX0xvbmdfX2MuaW5jbHVkZXMoXCJAQCMjJCRcIikpe1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnbGluZSAxMjIzJyk7XG4gICAgICAgICAgICBmb3IgKHZhciBicUFuc3dlclZhbHVlIG9mIGFuc3dlci5BbnN3ZXJfTG9uZ19fYy5zcGxpdChcIkBAIyMkJFwiKSkge1xuICAgICAgICAgICAgICB2YXIgcXVlc1ZhbHVlPWFuc3dlci5RdWVzdGlvbl9UZXh0X19jLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgICAgICAgICBhbnN3ZXJzID0ge307XG4gICAgICAgICAgICAgIGFuc3dlcnMgPSB7XG4gICAgICAgICAgICAgICAvLyBncm91cFRleHQ6YW5zd2VyLlF1ZXN0aW9uX1RleHRfX2MsXG4gICAgICAgICAgICAgICAgcXVlc1ZhbHVlOiAgXCImbHQ7cCZndDtcIisgcXVlc1ZhbHVlW3F1ZXNOb10rXCImbHQ7cCZndDtcIixcbiAgICAgICAgICAgICAgICBhbnNWYWx1ZTogYnFBbnN3ZXJWYWx1ZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcXVlc05vKys7XG4gICAgICAgICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICB9Ki9cbiAgICAgICAgICBpZihhbnN3ZXIuQW5zd2VyX0xvbmdfX2MuaW5jbHVkZXMoXCJAQCMjJCRcIikpe1xuICAgICAgICAgICAgdmFyIGFuc3dlcnZhbHVlcyA9IGFuc3dlci5BbnN3ZXJfTG9uZ19fYy5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3ZhbHVlJylcbiAgICAgICAgICAgIGFuc3dlcnMgPSB7ICAgICAgXG4gICAgICAgICAgICAgLy9ncm91cFRleHQ6YW5zd2VyLlF1ZXN0aW9uX0dyb3VwX1RleHRfX2MsXG4gICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnN3ZXIuUXVlc3Rpb25fUmljaF9UZXh0X19jLFxuICAgICAgICAgICAgIGFuc1ZhbHVlOiBhbnN3ZXJ2YWx1ZXMsXG4gICAgICAgICAgIH07XG4gICAgICAgICAgIC8vY29uc29sZS5sb2coYW5zd2VycylcbiAgICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgICAgIH1cbiAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgYW5zd2VycyA9IHsgICAgICBcbiAgICAgICAgICAgICAgLy9ncm91cFRleHQ6YW5zd2VyLlF1ZXN0aW9uX0dyb3VwX1RleHRfX2MsXG4gICAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zd2VyLlF1ZXN0aW9uX1JpY2hfVGV4dF9fYyxcbiAgICAgICAgICAgICAgYW5zVmFsdWU6IGFuc3dlci5BbnN3ZXJfTG9uZ19fYyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAvLyB2YXIgYW5zMSA9IGFuc3dlci5BbnN3ZXJfTG9uZ19fYy5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICBhbnN3ZXJzID0geyAgICAgIFxuICAgICAgICAgICAgLy9ncm91cFRleHQ6YW5zd2VyLlF1ZXN0aW9uX0dyb3VwX1RleHRfX2MsXG4gICAgICAgICAgICBxdWVzVmFsdWU6IGFuc3dlci5RdWVzdGlvbl9SaWNoX1RleHRfX2MsXG4gICAgICAgICAgICBhbnNWYWx1ZTogYW5zd2VyLkFuc3dlcl9Mb25nX19jLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBmYWlsdXJlUmVhZEJvb2sgPSAocmVzcG9uc2UpID0+IHtcbiAgICBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBmYWlsdXJlUmVhZEJvb2snKTtcbiAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkQW5zd2VyYm9vayA9ICh1dWlkOiBzdHJpbmcpID0+IHtcbiAgICBpZih0aGlzLnNlcnYgPSBcImFwaVwiKSB7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgICAgIHRoaXMudGtuLFxuICAgICAgICBbXCJBbnN3ZXJCb29rXCIsIFwicmVhZFwiLCB1dWlkXSxcbiAgICAgICAgdGhpcy5zdWNjZXNzQW5zd2VyQm9va1JlYWQsXG4gICAgICAgIHRoaXMuZmFpbHVyZUFuc3dlckJvb2tSZWFkXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZCBcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuIC8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAgIFwiTnh0Q29udHJvbGxlci5uZXdQcm9jZXNzXCIsXG4gICAgICAgIFtcIkFuc3dlckJvb2tcIiwgXCJyZWFkXCIsIHV1aWQsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLCcnXSxcbiAgICAgICAgdGhpcy5zdWNjZXNzQW5zd2VyQm9va1JlYWQsXG4gICAgICAgIHRoaXMuZmFpbHVyZUFuc3dlckJvb2tSZWFkXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG5cbiAgcHJpdmF0ZSBzdWNjZXNzQW5zd2VyQm9va1JlYWQgPSAocmVzcG9uc2UpID0+IHtcbiAgICBpZiAodGhpcy5hYkl0ZW0/LlN0YXR1c19fYyA9PSBcIkNvbXBsZXRlZFwiKSB7XG4gICAgICBmb3IgKHZhciBhbnN3ZXIgb2YgdGhpcy5hYkl0ZW0uQW5zd2Vyc19fci5yZWNvcmRzKSB7XG4gICAgICAgIHZhciBhdiA9IGFuc3dlci5BbnN3ZXJfTG9uZ19fYy5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgdmFyIGFuc3dlcnMgPSB7IHF1ZXNWYWx1ZTogYW5zd2VyLlF1ZXN0aW9uX1JpY2hfVGV4dF9fYywgYW5zVmFsdWU6IGF2LCBncm91cFRleHQ6YW5zd2VyLlF1ZXN0aW9uX0dyb3VwX1RleHRfX2MgfTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhhbnN3ZXJzKVxuICAgICAgICB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdChcIlN1bW1hcnl1cGRhdGVkXCIpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGZhaWx1cmVBbnN3ZXJCb29rUmVhZCA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlcmVhZCcpO1xuICAgIC8vY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICB9O1xuXG4gIHByaXZhdGUgcmVhZFF1ZXN0aW9uID0gKHV1aWQ6IHN0cmluZykgPT4ge1xuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAgLy8gICBbXCJRdWVzdGlvblwiLCBcInJlYWRcIiwgdXVpZF0sXG4gICAgICAvLyAgIHRoaXMuc3VjY2Vzc1JlYWQsXG4gICAgICAvLyAgIHRoaXMuZmFpbHVyZVJlYWRcbiAgICAgIC8vICk7XG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2hvd0xvYWRlcigpO1xuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xuICAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdRdWVzdGlvbicsJ3JlYWQnLHV1aWQsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgICAgIChkYXRhKT0+e1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ2RhdGEgY2FtZSBzdWNlc3NmdWxseScpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICAgIHRoaXMuc3VjY2Vzc1JlYWQoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuaGlkZUxvYWRlcigpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICAvLyAvLyBWRCAxNUZFQjI0IC0gbWFrZSBjcmVhdGVBbnN3ZXJCb29rRmxhZyBmYWxzZSBvbmx5XG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcblxuICAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLm5ld1Byb2Nlc3NcIixcbiAgICAgICAgW1wiUXVlc3Rpb25cIiwgXCJyZWFkXCIsIHV1aWQsIEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSwnJ10sXG4gICAgICAgIHRoaXMuc3VjY2Vzc1JlYWQsXG4gICAgICAgIHRoaXMuZmFpbHVyZVJlYWRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdWNjZXNzUmVhZCA9IChyZXNwb25zZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHN1Y2Nlc3NSZWFkJyk7XG4gICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgIC8vIEhBIDAyRkVCMjQgRm9yIHRlc3RpbmcgZm9yIHVzZWQgdGhpcyBhbmQgaW4gZnV0dXJlIGl0IGNhbiBiZSB1c2VkIHRvIHRlc3Qgd2l0aCBzdGF0aWMgZGF0YVxuICAgIC8vIHZhciBhYiA9IFsnZmlyc3QnLCdsYXN0JywnMTIzJywnMTItMTItMjAwMCcsJzIyJywnTWFsZScsJzEyIGNyb3NzIDEnLCdFbUNvbnRhY3QnLCc5ODc2NScsJ0EnLCdTaW5nbGUnXTtcbiAgICAvLyBmb3IoY29uc3QgW2luZGV4LGl0ZW1dIG9mIHJlc3BvbnNlLnF1ZXN0aW9uLlF1ZXN0aW9uc19fci5yZWNvcmRzLmVudHJpZXMoKSl7XG4gICAgLy8gICBpdGVtLmlucHV0ID0gYWJbaW5kZXhdO1xuICAgIC8vIH1cbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbSk7XG4gICAgLy8gUmVzZXQgdGhlIFZhcmlhYmxlc1xuXG4gICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtKSB7XG4gICAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcbiAgICAgIHRoaXMuYW5zd2VyV3JhcCA9IG5ldyBBbnN3ZXJXcmFwcGVyKCk7XG4gICAgICB0aGlzLm9wdGlvblZhbHVlcyA9IFtdO1xuICAgICAgdGhpcy5zdWJRdWVzdGlvbnMgPSBbXTtcbiAgICAgIHRoaXMucmVzZXRGbGFnKHRoaXMucXVlc3Rpb25JdGVtLlR5cGVfX2MpO1xuICAgIH1cbiAgICB0aGlzLnF1ZXN0aW9uSXRlbSA9IHJlc3BvbnNlLnF1ZXN0aW9uO1xuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtKTtcblxuICAgIGlmKHRoaXMucXVlc3Rpb25JdGVtLlR5cGVfX2MgPT09ICdBbHBoYW51bWVyaWMnKXtcbiAgICAgIHRoaXMuc3BsQ0NCYWNrQ2xpY2sgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5JZDtcbiAgICB0aGlzLmhhbmRsZVBhZ2UuZW1pdCh0aGlzLnF1ZXN0aW9uSXRlbS5UcmFja2luZ19JRF9fYyk7XG4gICAgLy8gSGFuZGxlIHRoZSBzdWJRdWVzdGlvbiBvcHRpb25zXG4gICAgaWYgKHJlc3BvbnNlLnNxT3B0aW9ucykge1xuICAgICAgLy92YXIgbmV3UmVjb3JkcyA9IFtdO1xuICAgICAgZm9yICh2YXIgcSBvZiB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcykge1xuICAgICAgICAvL2NvbnNvbGUubG9nKHEuTmFtZSk7XG4gICAgICAgIHZhciBzcSA9IHJlc3BvbnNlLnNxT3B0aW9uc1txLklkXTtcbiAgICAgICAgaWYgKHNxKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnZm91bmQgb3B0aW9ucyBmb3Igc3VicXVlc3Rpb24gJyArIHEuTmFtZSk7XG4gICAgICAgICAgaWYgKCFxLlF1ZXN0aW9uX09wdGlvbnNfX3IpIHtcbiAgICAgICAgICAgIHEuUXVlc3Rpb25fT3B0aW9uc19fciA9IHNxLlF1ZXN0aW9uX09wdGlvbnNfX3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc1F1ZXN0aW9uKCk7XG4gICAgdGhpcy5pbm5lcmh0bWwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtLkFkZGl0aW9uYWxfUmljaF9fY1xuICAgICk7XG4gICAgdGhpcy50cmFja0lkKCk7XG4gIH07XG5cbiAgdHJhY2tJZCgpIHtcbiAgICB2YXIgcXRyYWNrSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5UcmFja2luZ19JRF9fYztcbiAgICAvL2NvbnNvbGUubG9nKCd0cmFja0lkLXF1ZXN0aW9uJytxdHJhY2tJZCk7XG4gIH1cblxuICBwcml2YXRlIGZhaWx1cmVSZWFkID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVyZWFkJyk7XG4gICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBzYXZlQW5zd2VyID0gKCkgPT4ge1xuICAgIC8vIFNldCB0aGUgQW5zd2VyIE51bWJlciBiYXNlZCBvbiB0aGUgUXVlc3Rpb24gU3RhY2sgTGVuZ3RoXG4gICAgaWYgKHRoaXMuaW5wVmFsdWUgIT0gXCIuXCIpIHtcbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uSWQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmFuc3dlcldyYXAuYW5zTnVtYmVyID0gdGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aCArIDE7XG5cbiAgICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xuICAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgIC8vICAgW1wiQW5zd2VyXCIsIFwiY3JlYXRlXCIsIEpTT04uc3RyaW5naWZ5KHRoaXMuYW5zd2VyV3JhcCldLFxuICAgICAgLy8gICB0aGlzLnN1Y2Nlc3NTYXZlLFxuICAgICAgLy8gICB0aGlzLmZhaWx1cmVTYXZlXG4gICAgICAvLyApO1xuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0Fuc3dlcicsJ2NyZWF0ZScsSlNPTi5zdHJpbmdpZnkodGhpcy5hbnN3ZXJXcmFwKSxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgIChkYXRhKT0+e1xuICAgICAgICBjb25zb2xlLmxvZygnZGF0YSBjYW1lIHN1Y2Vzc2Z1bGx5Jyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICB0aGlzLnN1Y2Nlc3NTYXZlKEpTT04ucGFyc2UoZGF0YSkpXG4gICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFZEIDE1RkVCMjQgLSB1c2VkIHByb2Nlc3NOZXcgbWV0aG9kIFxuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuIC8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAgIFwiTnh0Q29udHJvbGxlci5uZXdQcm9jZXNzXCIsXG4gICAgICAgIFtcIkFuc3dlclwiLCBcImNyZWF0ZVwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLmFuc3dlcldyYXApLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSwnJ10sXG4gICAgICAgIHRoaXMuc3VjY2Vzc1NhdmUsXG4gICAgICAgIHRoaXMuZmFpbHVyZVNhdmVcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGh0bWxEZWNvZGUoaW5wdXQpIHtcbiAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhpbnB1dCwgXCJ0ZXh0L2h0bWxcIik7XG4gICAgcmV0dXJuIGRvYy5kb2N1bWVudEVsZW1lbnQudGV4dENvbnRlbnQ7XG4gIH1cblxuICBwcml2YXRlIHN1Y2Nlc3NTYXZlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgLy90aGlzLmFiSXRlbSA9IHJlc3BvbnNlLmFuc3dlcmJvb2s7XG4gICAgICB0aGlzLmFuc3dlck1hcC5zZXQocmVzcG9uc2UuYW5zd2VyLnF1ZXNJZCwgcmVzcG9uc2UuYW5zd2VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvci5lcnJvck1zZyA9IHJlc3BvbnNlLmVycm9yLmVycm9yTXNnO1xuICAgIH1cbiAgICBpZighdGhpcy5iYWNrQnV0dG9uRmxhZyl7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBmYWlsdXJlU2F2ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlU2F2ZScpO1xuICAgIC8vY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICB9O1xuXG4gIHByaXZhdGUgcHJvY2Vzc1F1ZXN0aW9uID0gKCkgPT4ge1xuICAgIC8vIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHByb2Nlc3NRdWVzdGlvbicpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdzcGxDQ0JhY2tDbGljayA9ICcrdGhpcy5zcGxDQ0JhY2tDbGljayk7XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvblN0YWNrKTtcbiAgICAvL2NvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtKTtcbiAgICB0aGlzLnBvcCA9IHRydWU7XG5cbiAgICAvLyBpZighdGhpcy5iYWNrKXtcbiAgICAvLyAgIHRoaXMucXVlc3Rpb25OYW1lLnB1c2godGhpcy5xdWVzdGlvbkl0ZW0uTmFtZSlcbiAgICAvLyB9XG5cbiAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jID09PSB0cnVlKSB7XG4gICAgICBpZiAoIXRoaXMuYmFjaykge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wdXNoKHRoaXMucXVlc3Rpb25JdGVtLk5hbWUpO1xuICAgICAgfVxuICAgICAgdGhpcy5iYWNrID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbk5hbWVbMF0gPT09IHRoaXMucXVlc3Rpb25OYW1lWzFdKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25OYW1lLnBvcCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmN1cnJlbnROYW1lID0gdGhpcy5xdWVzdGlvbkl0ZW0uTmFtZTtcbiAgICAgIHRoaXMucGF0aHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbk5hbWUuaW5kZXhPZih0aGlzLmN1cnJlbnROYW1lKTtcbiAgICAgIHRoaXMucG9zc2liaWxpdGllcyA9IHRoaXMucWJJdGVtLlBvc3NpYmlsaXRpZXNfX2M7XG4gICAgfVxuXG4gICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zO1xuICAgIHRoaXMuZGF5KCk7XG4gICAgLy9jb25zb2xlLmxvZygncHJvY2Vzc2luZyBxdWVzdGlvbiAnICsgdGhpcy5xdWVzdGlvbkl0ZW0uTmFtZSArICcgZXhpc3RpbmcgYW5zd2VycyBhcmUgJyArIHRoaXMuYW5zd2VyTWFwLnNpemUpOyAvLyA9PiAnICsgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVzdGlvbkl0ZW0pKTtcblxuICAgIC8vIFNldCB0aGUgRmxhZ3MgdG8gc2hvdyByaWdodCBmaWVsZHNcbiAgICB0aGlzLnNldEZsYWcodGhpcy5xdWVzdGlvbkl0ZW0uVHlwZV9fYyk7XG4gICAgLy9jb25zb2xlLmxvZygnQWZ0ZXIgdGhlIHNldEZsYWcgbWV0aG9kIGR0RmxhZyA9ICcrdGhpcy5kdEZsYWcpO1xuXG4gICAgLy8gQ2hlY2sgdGhlIGV4aXN0aW5nIGFuc3dlciBmcm9tIGFuc3dlck1hcFxuICAgIGlmICh0aGlzLmFuc3dlck1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uSWQpKSB7XG4gICAgICAvLyAgLy9jb25zb2xlLmxvZyhcImV4aXN0aW5nIGFuc3dlciBmb3VuZCBmb3IgdGhpcy5xdWVzdGlvbkl0ZW0uTmFtZVwiKTtcbiAgICAgIHZhciBlQW5zd2VyID0gdGhpcy5hbnN3ZXJNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgICAgIC8vIEdldCB0aGUgZXhpc3RpbmcgYW5zd2VyIGZyb20gdGhlIE1hcFxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IGVBbnN3ZXIuYW5zVmFsdWU7XG4gICAgICAvL2NvbnNvbGUubG9nKCdpbnBWYWx1ZSBoYXMgYmVlbiBzZXQgdG8gJyArIHRoaXMuaW5wVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuYXR0YWNobWVudHNNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLklkKSkge1xuICAgICAgICB0aGlzLmF0dGFjaG1lbnRzID0gdGhpcy5hdHRhY2htZW50c01hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgcmVtb3ZpbmcgYXR0YWNobWVudCBhcnJheScpO1xuICAgICAgdGhpcy5hdHRhY2htZW50cyA9IFtdO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmlucFZhbHVlKTtcbiAgICBpZih0aGlzLnNwbENDQmFja0NsaWNrICYmIHRoaXMuaW5wVmFsdWUgJiYgdGhpcy5pbnBWYWx1ZS5pbmNsdWRlcygnRVMnKSl7XG4gICAgICAvLyBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBpZiBjb25kJyk7XG4gICAgICB0aGlzLnNwbENDQmFja0NsaWNrID0gZmFsc2U7XG4gICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZS5yZXBsYWNlKCdFUycsJycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNoZWNrYm94RmxhZykge1xuICAgICAgLy8gU2V0IHRoZSBPcHRpb25zIGZvciBDaGVja2JveFxuICAgICAgdGhpcy5zZXRPcHRpb25zKHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkcyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmJvb2tGbGFnKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdJbmlzZSB0aGUgZXhwZWN0ZWQgYm9va0ZsYWcgY29uZCcpO1xuICAgICAgLy9jb25zb2xlLmxvZygnZHRGbGFnID0gJyt0aGlzLmR0RmxhZyk7XG4vLyAgSEEgMjBGRUIyNCBMYWJlbCBGaXhcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGVsZW1lbnQuUXVlc3Rpb25fVGV4dF9fYyA9IGVsZW1lbnQuUXVlc3Rpb25fVGV4dF9fYy5yZXBsYWNlKC88W14+XSs+L2csICcnKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZXRTdWJRdWVzdGlvbnModGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5saXN0RmxhZykge1xuICAgICAgLy8gU2V0IHRoZSBMb2NhbFN1YlF1ZXN0aW9uc1xuICAgICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBsaXN0IGZsYWcnKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuYWJJdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKTtcbiAgICAgIGlmKCF0aGlzLmxvY2FsU3ViUU1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uSWQpKXtcbiAgICAgICAgdGhpcy5zZXRTdWJRdWVzdGlvbnModGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMpO1xuICAgICAgfSBcbiAgICB9IGVsc2UgaWYgKHRoaXMuZHRGbGFnKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdJbmlzZSB0aGUgdW5leHBlY3RlZCBkdEZsYWcgY29uZCcpO1xuICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBcIlwiO1xuICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IFwiXCI7XG4gICAgICB0aGlzLnNlbERhdGUgPSBcIlwiO1xuICAgICAgLy8gMjAyMS01LTE2VDAwOjAwXG4gICAgICBpZiAodGhpcy5kYXRlTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpIHtcbiAgICAgICAgdGhpcy5zZWxEYXRlID0gdGhpcy5kYXRlTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZGhvdXJNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLklkKSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHRoaXMuc2VsZWN0ZWRob3VyTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZG1pbnV0ZU1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uSWQpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSB0aGlzLnNlbGVjdGVkbWludXRlTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uWDI0X0hvdXJzX19jID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuaG91cnMucHVzaChcbiAgICAgICAgICBcIjEzXCIsXG4gICAgICAgICAgXCIxNFwiLFxuICAgICAgICAgIFwiMTVcIixcbiAgICAgICAgICBcIjE2XCIsXG4gICAgICAgICAgXCIxN1wiLFxuICAgICAgICAgIFwiMThcIixcbiAgICAgICAgICBcIjE5XCIsXG4gICAgICAgICAgXCIyMFwiLFxuICAgICAgICAgIFwiMjFcIixcbiAgICAgICAgICBcIjIyXCIsXG4gICAgICAgICAgXCIyM1wiLFxuICAgICAgICAgIFwiMDBcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5ob3VycyA9IHRoaXMuaG91cnMuc2xpY2UoMCwgMTIpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZHRGbGFnICYmIHRoaXMuaW5wVmFsdWUpIHtcbiAgICAgICAgdmFyIGR0VmFsID0gdGhpcy5pbnBWYWx1ZS5zcGxpdChcIlRcIik7IFxuICAgICAgICB2YXIgZHR2YWwwID0gdGhpcy5pbnBWYWx1ZS5zcGxpdChcIiBcIik7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSBkdFZhbFswXTtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IGR0dmFsMFswXTtcblxuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9IGR0VmFsWzFdO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9IGR0dmFsMFsxXTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uSXNfRGF0ZV9CYWNrd2FyZF9fYyB8fFxuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5Jc19EYXRlX0ZvcndhcmRfX2NcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uSXNfRGF0ZV9CYWNrd2FyZF9fYyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucy5kaXNhYmxlU2luY2UgPSB7XG4gICAgICAgICAgICB5ZWFyOiB0aGlzLnRvZGF5LmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgIGRheTogdGhpcy50b2RheS5nZXREYXRlKCkgKyAxLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLklzX0RhdGVfRm9yd2FyZF9fYyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucy5kaXNhYmxlVW50aWwgPSB7XG4gICAgICAgICAgICB5ZWFyOiB0aGlzLnRvZGF5LmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgIGRheTogdGhpcy50b2RheS5nZXREYXRlKCksXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5maWxlRmxhZykge1xuICAgICAgdGhpcy5maWxlVUkoKTtcbiAgICAgIC8vIGxvZ2ljXG4gICAgICB0aGlzLmFsbG93ZWRGaWxlRXh0ZW5zaW9uID1cbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtLkFsbG93ZWRfRmlsZV9FeHRlbnNpb25zX19jPy5zcGxpdChcIjtcIik7XG4gICAgICAvL2NvbnNvbGUubG9nKHRoaXMuYWxsb3dlZEZpbGVFeHRlbnNpb24pO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgfVxuICB9O1xuXG4gIHNldEZsYWcodHlwKSB7XG4gICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIHNldEZsYWcgZm9yICcgKyB0eXApO1xuXG4gICAgaWYgKHR5cCkge1xuICAgICAgLy8gU2V0IHRoZSBGbGFnc1xuICAgICAgaWYgKHR5cCA9PSBcIlRleHRcIikge1xuICAgICAgICB0aGlzLnRleHRGbGFnID0gdHJ1ZTtcblxuICAgICAgICAvL3RoaXMubnVtYmVyRmxhZyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIk51bWJlclwiKSB7XG4gICAgICAgIHRoaXMubnVtYmVyRmxhZyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkFscGhhTnVtZXJpY1wiKSB7XG4gICAgICAgIHRoaXMuYWxwaGFudW1lcmljRmxhZyA9IHRydWU7XG4gICAgICAgIC8qaWYodGhpcy5pbnBWYWx1ZS5sZW5ndGggPT09IDApe1xuICAgICAgICAgIHRoaXMuaW5wVmFsdWU9J0VTJ1xuICAgICAgICB9Ki9cbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiRW1haWxcIikge1xuICAgICAgICB0aGlzLmVtYWlsRmxhZyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkZpbGVcIikge1xuICAgICAgICB0aGlzLmZpbGVGbGFnID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiRGF0ZVRpbWVcIikge1xuICAgICAgICB0aGlzLmR0RmxhZyA9IHRydWU7XG4gICAgICAgIHRoaXMudGltZUZsYWcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRhdGVGbGFnID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGV4dEFyZWFcIikge1xuICAgICAgICB0aGlzLnRhRmxhZyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlJhZGlvXCIpIHtcbiAgICAgICAgdGhpcy5yYWRpb0ZsYWcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJEcm9wZG93blwiKSB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25GbGFnID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiQ2hlY2tib3hcIikge1xuICAgICAgICB0aGlzLmNoZWNrYm94RmxhZyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkJvb2tcIikge1xuICAgICAgICB0aGlzLmJvb2tGbGFnID0gdHJ1ZTtcbiAgICAgIH1lbHNlIGlmICh0eXAgPT0gJ0xpc3QnKXtcbiAgICAgICAgdGhpcy5saXN0RmxhZyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRpbWVcIikge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIFRpbWUgY29uZCcpO1xuICAgICAgICB0aGlzLmR0RmxhZyA9IHRydWU7XG4gICAgICAgIHRoaXMudGltZUZsYWcgPSB0cnVlO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuZHRGbGFnKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiRGF0ZVwiKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgRGF0ZSBjb25kJyk7XG4gICAgICAgIHRoaXMuZHRGbGFnID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kYXRlRmxhZyA9IHRydWU7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kdEZsYWcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlc2V0RmxhZyh0eXApIHtcbiAgICBpZiAodHlwKSB7XG4gICAgICAvLyBTZXQgdGhlIEZsYWdzXG4gICAgICBpZiAodHlwID09IFwiVGV4dFwiKSB7XG4gICAgICAgIHRoaXMudGV4dEZsYWcgPSBmYWxzZTtcbiAgICAgICAgLy90aGlzLm51bWJlckZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiTnVtYmVyXCIpIHtcbiAgICAgICAgdGhpcy5udW1iZXJGbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkFscGhhbnVtZXJpY1wiKSB7XG4gICAgICAgIHRoaXMuYWxwaGFudW1lcmljRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJFbWFpbFwiKSB7XG4gICAgICAgIHRoaXMuZW1haWxGbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkZpbGVcIikge1xuICAgICAgICB0aGlzLmZpbGVGbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVUaW1lXCIpIHtcbiAgICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kYXRlRmxhZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRpbWVGbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRleHRBcmVhXCIpIHtcbiAgICAgICAgdGhpcy50YUZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiUmFkaW9cIikge1xuICAgICAgICB0aGlzLnJhZGlvRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJEcm9wZG93blwiKSB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25GbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkNoZWNrYm94XCIpIHtcbiAgICAgICAgdGhpcy5jaGVja2JveEZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiQm9va1wiKSB7XG4gICAgICAgIHRoaXMuYm9va0ZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09ICdMaXN0Jyl7XG4gICAgICAgIHRoaXMubGlzdEZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGltZVwiKSB7XG4gICAgICAgIHRoaXMuZHRGbGFnID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGltZUZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiRGF0ZVwiKSB7XG4gICAgICAgIHRoaXMuZHRGbGFnID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGF0ZUZsYWcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRPcHRpb25zKHJlY29yZHMpIHtcbiAgICBmb3IgKHZhciBvcHQgb2YgcmVjb3Jkcykge1xuICAgICAgdmFyIG92ID0gbmV3IE9wdGlvblZhbHVlKCk7XG4gICAgICBvdi5JZCA9IG9wdC5JZDtcbiAgICAgIG92Lk5hbWUgPSBvcHQuTmFtZTtcbiAgICAgIG92LlZhbHVlX19jID0gb3B0LlZhbHVlX19jO1xuICAgICAgb3YuTmV4dF9RdWVzdGlvbl9fYyA9IG9wdC5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgb3YuY2hlY2tlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaW5wVmFsdWUgJiZcbiAgICAgICAgdGhpcy5pbnBWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKS5pbmNsdWRlcyhvcHQuVmFsdWVfX2MpXG4gICAgICApIHtcbiAgICAgICAgb3YuY2hlY2tlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3B0aW9uVmFsdWVzLnB1c2gob3YpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENhcHR1cmUgYW5kIFByb2Nlc3MgQ2hpbGQgRXZlbnRcbiAgY2hpbGRFdmVudENhcHR1cmUoZXZlbnQsIHF1ZXM/OmFueSkge1xuICAgIGNvbnNvbGUubG9nKCdpbnNpZGUgY2hpbGRFdmVudENhcHR1cmUgJyk7XG4gICAgY29uc29sZS5sb2coZXZlbnQpO1xuICAgIHRoaXMuY2hhbmdlU2VydmljZS5hbm5vdW5jZUNoYW5nZShldmVudCk7XG4gICAgLy8gSEEgMzEtSkFOLTI0IEFzc2lnbiB2YWx1ZXMgdG8gZHJvcGRvd24gcXVlc3Rpb25cbiAgICBxdWVzLmlucHV0ID0gZXZlbnQ/LnZhbHVlT2JqO1xuICAgIC8vcXVlcy5pbnB1dCA9IGV2ZW50OyAvLyBoZXJlIHdoZW4gdXNpbmcgdGhlIG5nLXNlbGVjdCBnb3QgZXZlbnQgYXMgdmFsdWVcbiAgfVxuXG4gIHNldFN1YlF1ZXN0aW9ucyhyZWNvcmRzKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBzZXRTdWJRdWVzdGlvbnMnKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZWNvcmRzKTtcbiAgICB2YXIgcWFNYXAgPSBuZXcgTWFwKCk7XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZSk7XG4gICAgaWYgKHRoaXMuaW5wVmFsdWUpIHtcbiAgICAgIHZhciBhSW5kZXggPSAwO1xuICAgICAgLy8gc2VhcmNoIGNoYW5nZWQgYXMgc2VtaSBjb2xvbiBiZWNhdXNlIG9mIGFkZHJlc3MgY29udGFpbnMgY29tbWEgXG4gICAgICBpZiAoKHRoaXMuaW5wVmFsdWUuc2VhcmNoKFwiOyBcIikgPT0gLTEpKSB7XG4gICAgICAgLy8gY29uc3Qgd2l0aG91dEFuc3dlclN0cmluZyA9IHRoaXMuaW5wVmFsdWUucmVwbGFjZShcImFuc3dlclN0cmluZzogXCIsIFwiXCIpOyAvL3JlbW92ZSB0aGUgYW5zd2VyIHN0cmluZ1xuICAgICAgIC8vIHRoaXMuaW5wVmFsdWUgPSB3aXRob3V0QW5zd2VyU3RyaW5nO1xuICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZSArICdAQCMjJCQnIDtcbiAgICAgICAgZm9yICh2YXIgYW5zU3RyIG9mIHRoaXMuaW5wVmFsdWUuc3BsaXQoXCJAQCMjJCRcIikpIHtcbiAgICAgICAgICBhSW5kZXgrKztcbiAgICAgICAgICBxYU1hcC5zZXQoYUluZGV4LCBhbnNTdHIpO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ1NldHRpbmcgdGhlIHFhTWFwIGZvciAnICsgYUluZGV4ICsgJyB3aXRoICcgKyBhbnNTdHIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBhbnNTdHIgb2YgdGhpcy5pbnBWYWx1ZS5zcGxpdChcIjsgXCIpKSB7XG4gICAgICAgICAgYUluZGV4Kys7XG4gICAgICAgICAgcWFNYXAuc2V0KGFJbmRleCwgYW5zU3RyKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdTZXR0aW5nIHRoZSBxYU1hcCAnICsgYUluZGV4ICsgJyB3aXRoICcgKyBhbnNTdHIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKCdhZnRlciBzZXR0aW5nIHZhbHVlcyBmcm9tIGlucHZhbHVlIHFhIG1hcCBhcmUnKTtcbiAgICAvLyBjb25zb2xlLmxvZyhxYU1hcCk7XG5cbiAgICBmb3IgKHZhciBxdWVzIG9mIHJlY29yZHMpIHtcbiAgICAgIGlmIChxdWVzLlR5cGVfX2MgPT0gXCJGaWxlXCIpIHtcbiAgICAgICAgdGhpcy52YWx1ZU5hbWUxID0gcXVlcy5BbGxvd2VkX0ZpbGVfRXh0ZW5zaW9uc19fYztcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnZhbHVlTmFtZTEpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYW5zID0gJyc7XG4gICAgICBpZiAocWFNYXAuaGFzKHF1ZXMuUXVlc3Rpb25fTm9fX2MpKSB7XG4gICAgICAgICAgcXVlcy5pbnB1dCA9IHFhTWFwLmdldChxdWVzLlF1ZXN0aW9uX05vX19jKTtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnYWZ0ZXIgZmV0Y2hpbmcgbWFwIHZhbHVlcycpO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXMuaW5wdXQpO1xuICAgICAgICAgIGlmKHF1ZXMuaW5wdXQuaW5kZXhPZignJCRAQCMjJykgPiAwKXtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdhbnN3ZXIgc3VwcG9zZWQgdG8gYmUgdHJpbW1lZCcpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcy5pbnB1dCk7XG4gICAgICAgICAgICBhbnMgPSBxdWVzLmlucHV0LnN1YnN0cmluZyhxdWVzLmlucHV0LmluZGV4T2YoJyQkQEAjIycpKzYscXVlcy5pbnB1dC5sZW5ndGgpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYW5zKTtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSBxdWVzLmlucHV0LnN1YnN0cmluZygwLHF1ZXMuaW5wdXQuaW5kZXhPZignJCRAQCMjJykpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcy5pbnB1dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIGlmICgocXVlcy5UeXBlX19jID09PSBcIkRhdGVcIikgJiYgKHF1ZXMuSXNfRGF0ZV9CYWNrd2FyZF9fYyB8fCBxdWVzLklzX0RhdGVfRm9yd2FyZF9fYykpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBkYXRlIGJhY2t3YXJkL2ZvcndhcmQgY29uZCcpO1xuICAgICAgICBpZiAocXVlcy5Jc19EYXRlX0JhY2t3YXJkX19jID09PSB0cnVlKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBJc19EYXRlX0JhY2t3YXJkX19jJyk7XG4gICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVTaW5jZSA9IHtcbiAgICAgICAgICAgIHllYXI6IHRoaXMudG9kYXkuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoOiB0aGlzLnRvZGF5LmdldE1vbnRoKCkgKyAxLFxuICAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSArIDEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocXVlcy5Jc19EYXRlX0ZvcndhcmRfX2MgPT09IHRydWUpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIElzX0RhdGVfRm9yd2FyZF9fYycpO1xuICAgICAgICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucy5kaXNhYmxlVW50aWwgPSB7XG4gICAgICAgICAgICB5ZWFyOiB0aGlzLnRvZGF5LmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgIGRheTogdGhpcy50b2RheS5nZXREYXRlKCksXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3ViUXVlc3Rpb25zLnB1c2gocXVlcyk7XG4gICAgICBmb3IodmFyIGk9MDsgaTx0aGlzLnN1YlF1ZXN0aW9ucy5sZW5ndGg7aSsrKXtcbiAgICAgICAgLy8gdG8gc2hvdy9oaWRlIHRoZSBkZXBlbmRlbnQgZHJvcGRvd24gb25seSBmaWVsZCB1c2luZyB0aGUgZHJvcERvd25Pbmx5IGJvb2xlYW5cbiAgICAgICAgaWYodGhpcy5zdWJRdWVzdGlvbnNbaV0uU2l6ZV9fYyA9PSA0KXtcbiAgICAgICAgICB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5kcm9wRG93bk9ubHkgPSB0cnVlO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5kcm9wRG93bk9ubHkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYoYW5zICE9ICcnKXtcbiAgICAgICAgZm9yKHZhciBhbiBvZiAoYW5zLnNwbGl0KCckJEBAIyMnKSkpe1xuICAgICAgICAgIHZhciBzUSA9IG5ldyBRdWVzdGlvbigpO1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oc1EscXVlcyk7XG4gICAgICAgICAgc1EuaW5wdXQgPSBhbjtcbiAgICAgICAgICB0aGlzLnN1YlF1ZXN0aW9ucy5wdXNoKHNRKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy52YWx1ZU5hbWUxICE9IG51bGwgJiYgdGhpcy52YWx1ZU5hbWUxLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYm9va0ZsYWdBY2NlcHQgPSB0aGlzLnZhbHVlTmFtZTEuc3BsaXQoXCI7XCIpO1xuICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnN1YlF1ZXN0aW9ucyk7XG4gICAgfVxuICAgIHRoaXMuc3RydWN0TG9jYWxTdWJRdWVzdGlvbihudWxsKTtcbiAgICAvLyBIQSAwMkZFQjI0IE9uIEVkaXQgdG8gZGlzcGxheSB0aGUgdmFsdWUgdXNpaW5nIHRoaXNcbiAgICBpZih0aGlzLmFsbElucHV0VmFsdWVzLmxlbmd0aCA+IDApe1xuICAgICAgdGhpcy5zdWJRdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgZm9yKGxldCBzaW5nbGVJbnB1dCBvZiB0aGlzLmFsbElucHV0VmFsdWVzKXtcbiAgICAgICAgICBpZihlbGVtZW50LklkID09IHNpbmdsZUlucHV0LklkKXtcbiAgICAgICAgICAgIGVsZW1lbnQuaW5wdXQgPSBzaW5nbGVJbnB1dC5pbnB1dDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9wdGlvbkNoYW5nZShzZWxWYWx1ZSkge1xuICAgIGxldCByYWRpb1RyYWNraW5nSWQ6IHN0cmluZyA9IFwiXCI7XG4gICAgZm9yICh2YXIgb3B0IG9mIHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkcykge1xuICAgICAgLy9jb25zb2xlLmxvZygnb3B0aW9uQ2hhbmdlIFRyYWNraW5nSWQnK29wdC5UcmFja2luZ19JRF9fYyk7XG4gICAgICBpZiAob3B0LlZhbHVlX19jID09IHNlbFZhbHVlKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBpZicrb3B0LlRyYWNraW5nX0lEX19jKVxuICAgICAgICByYWRpb1RyYWNraW5nSWQgPSBvcHQuVHJhY2tpbmdfSURfX2M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHJhZGlvVHJhY2tpbmdJZCk7XG4gICAgdGhpcy5jbGVhckVycm9yKCk7XG4gICAgLy8gLy9jb25zb2xlLmxvZygnaW5zaWRlIG9wdGlvbkNoYW5nZSB1c2luZyAnICsgc2VsVmFsdWUpO1xuXG4gICAgdGhpcy5pbnBWYWx1ZSA9IHNlbFZhbHVlO1xuICB9XG5cbiAgY2xlYXJFcnJvcigpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IpIHtcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBjbGVhckxvY2FsU3ViUXVlc0Vycm9yKHF1ZXNJZCkge1xuICAgIHF1ZXNJZC5lcnJvciA9IG51bGw7XG4gIH1cblxuICBpbnB1dFZhbGlkYXRlKGUpIHtcbiAgICB2YXIga2V5Q29kZSA9IGUua2V5Q29kZSB8fCBlLndoaWNoO1xuICAgIC8vIE9ubHkgQVNDSUkgY2hhcmFjdGVyIGluIHRoYXQgcmFuZ2UgYWxsb3dlZFxuICAgIHZhciBBU0NJSUNvZGUgPSAoZS53aGljaCkgPyBlLndoaWNoIDogZS5rZXlDb2RlO1xuICAgIGlmIChBU0NJSUNvZGUgPiAzMSAmJiAoQVNDSUlDb2RlIDwgNDggfHwgQVNDSUlDb2RlID4gNTcpKXtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9ZWxzZXtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIENDT25DaGFuZ2UoaW5wVmFsdWU6IHN0cmluZykge1xuXG4gICAgICBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDIpIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSA3KSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gMTIpIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAxNykge1xuICAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDIyKSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XG4gICAgICB9XG5cbiAgfVxuXG4gIGlzTm90VmFsaWRBY2NOdW1iZXIoczogc3RyaW5nKSB7XG4gICAgcyA9IHMucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTtcbiAgICBzID0gJ0VTJyArIHM7XG4gICAgdmFyIGlzTm90VmFsaWRTdHIgPSBmYWxzZTtcbiAgICBpZiAocy5sZW5ndGggPT0gMjQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaSA8PSAxICYmIC9bYS16QS1aXS8udGVzdChzLmNoYXJBdChpKSkpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVmFsaWQgY2hhcjogXCIgKyBzLmNoYXJBdChpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA+IDEgJiYgL1swLTldLy50ZXN0KHMuY2hhckF0KGkpKSkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJWYWxpZCBudW1lcmljOiBcIiArIHMuY2hhckF0KGkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpc05vdFZhbGlkU3RyID0gdHJ1ZTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiTm90IGEgdmFsaWQgY2hhclwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpc05vdFZhbGlkU3RyID0gdHJ1ZTtcbiAgICAgIC8vY29uc29sZS5sb2coXCJOb3QgYSB2YWxpZCBhY2MgbnVtYmVyXCIpO1xuICAgIH1cbiAgICByZXR1cm4gaXNOb3RWYWxpZFN0cjtcbiAgfVxuXG4gIGNsZWFyU1FFcnJvcihxdWVzSWQpIHtcbiAgICB2YXIgc3FMaXN0ID0gdGhpcy5zdWJRdWVzdGlvbnMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLklkID09IHF1ZXNJZCk7XG4gICAgZm9yICh2YXIgc3Egb2Ygc3FMaXN0KSB7XG4gICAgICBzcS5lcnJvciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgdXBsb2FkRmlsZShldmVudCxxdWVzPzphbnkpIHtcbiAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgdXBsb2FkJyk7XG4gICAgdGhpcy5jbGVhckVycm9yKCk7XG4gICAgdGhpcy5maWxlVHlwZUluY29ycmVjdCA9IGZhbHNlO1xuICAgIHZhciBsb2NhbCA9IHRoaXM7XG4gICAgbG9jYWwuYXR0YWNobWVudCA9IGV2ZW50LnRhcmdldC5maWxlc1swXTtcbiAgICAvLyBWYWxpZGF0ZSB0aGUgZmlsZSBleHRlbnNpb25cbiAgICAvL2NvbnNvbGUubG9nKGxvY2FsLmF0dGFjaG1lbnQpO1xuICAgIGxldCBmaWxlTmFtZVdpdGhUeXBlOiBzdHJpbmcgPVxuICAgICAgbG9jYWwuYXR0YWNobWVudCAmJiBsb2NhbC5hdHRhY2htZW50Lm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5qcGdcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLnBuZ1wiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIucGRmXCIpICYmXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5qcGVnXCIpICYmXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5oZWljXCIpICYmXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5oZWlmXCIpICYmXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5KUEdcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLlBOR1wiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuUERGXCIpICYmXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5KUEVHXCIpICYmXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5IRUlDXCIpICYmXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5IRUlGXCIpXG4gICAgKSB7XG4gICAgICBsb2NhbC5maWxlVHlwZUluY29ycmVjdCA9IHRydWU7XG4gICAgfVxuICAgIC8vIFJldHVybiB3aGVuIHRoZSBmaWxlIHR5cGUgaXMgaW5jb3JyZWN0XG4gICAgaWYgKGxvY2FsLmZpbGVUeXBlSW5jb3JyZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBmaWxlQ29udGVudDogYW55O1xuICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZpbGVDb250ZW50ID0gcmVhZGVyLnJlc3VsdDtcbiAgICAgIGxvY2FsLmZpbGVFeGNlZWRlZExpbWl0ID0gbG9jYWwuYXR0YWNobWVudC5zaXplID4gMzI0Mjg4MDsgLy9WYWxpZGF0aW5nIGZpbGUgc2l6ZVxuICAgICAgLy8gVXBsb2FkIHRoZSBmaWxlIHRvIFNhbGVzZm9yY2Ugd2hlbiB0aGUgbGltaXQgaXMgd2l0aGluIHJhbmdlXG4gICAgICBpZiAoIWxvY2FsLmZpbGVFeGNlZWRlZExpbWl0KSB7XG4gICAgICAgIGxldCBmaWxlV3JhcHBlciA9IG5ldyBBdHRhY2htZW50V3JhcHBlcigpO1xuICAgICAgICBmaWxlV3JhcHBlci5wYXJlbnRJZCA9IGxvY2FsLmFiSXRlbS5JZDtcbiAgICAgICAgZmlsZVdyYXBwZXIuZmlsZU5hbWUgPSBsb2NhbC5hdHRhY2htZW50Lm5hbWU7XG4gICAgICAgIGZpbGVXcmFwcGVyLmZpbGVDb250ZW50ID0gZmlsZUNvbnRlbnQ7XG4gICAgICAgIGxvY2FsLmNyZWF0ZUF0dGFjaG1lbnQoZmlsZVdyYXBwZXIpO1xuICAgICAgICBxdWVzLmlucHV0ID0gZmlsZVdyYXBwZXIuZmlsZU5hbWU7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnNwaW5uZXIuc2hvdyh0aGlzLnNwaW5uZXJOYW1lKTtcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChldmVudC50YXJnZXQuZmlsZXNbMF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWNjZXNzQXR0YWNobWVudENyZWF0ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIGxldCBjcmVhdGVkQXR0YWNobWVudDogQXR0YWNobWVudCA9IG5ldyBBdHRhY2htZW50KFxuICAgICAgcmVzcG9uc2UuYXR0YWNobWVudElkLFxuICAgICAgcmVzcG9uc2UuYXR0YWNobWVudE5hbWUsXG4gICAgICB0aGlzLmF0dGFjaG1lbnQubGFzdE1vZGlmaWVkRGF0ZVxuICAgICk7XG4gICAgdGhpcy5hdHRhY2htZW50cy5wdXNoKGNyZWF0ZWRBdHRhY2htZW50KTtcbiAgICB0aGlzLmF0dGFjaG1lbnRzTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCwgdGhpcy5hdHRhY2htZW50cyk7XG4gICAgdGhpcy5zcGlubmVyLmhpZGUodGhpcy5zcGlubmVyTmFtZSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBzdWNjZXNzQXR0YWNobWVudERlbGV0ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hdHRhY2htZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuYXR0YWNobWVudHNbaV0uYXR0YWNobWVudElkID09PSB0aGlzLmF0dGFjaG1lbnRJZCkge1xuICAgICAgICB0aGlzLmF0dGFjaG1lbnRzLnNwbGljZShpLCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBmYWlsdXJlQXR0YWNobWVudENyZWF0ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlQXR0YWNobWVudENyZWF0ZScpO1xuICB9O1xuXG4gIHByaXZhdGUgZmFpbHVyZUF0dGFjaG1lbnREZWxldGUgPSAocmVzcG9uc2UpID0+IHtcbiAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZUF0dGFjaG1lbnREZWxldGUnKTtcbiAgfTtcblxuICBoYW5kbGVTdWJtaXRDbGljaygpIHtcbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uU3VibWl0X1RyYWNraW5nX0lEX19jKTtcbiAgICB0aGlzLnVwZGF0ZUFuc3dlckJvb2sodGhpcy5hYkl0ZW0uSWQpO1xuICB9XG5cbiAgaGFuZGxlQ2FuY2VsQ2xpY2soKSB7XG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLkNhbmNlbF9UcmFja2luZ19JRF9fYyk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUF0dGFjaG1lbnQgPSAoZmlsZVdyYXBwZXI6IGFueSkgPT4ge1xuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAgLy8gICBbXCJBdHRhY2htZW50XCIsIFwiY3JlYXRlXCIsIEpTT04uc3RyaW5naWZ5KGZpbGVXcmFwcGVyKV0sXG4gICAgICAvLyAgIHRoaXMuc3VjY2Vzc0F0dGFjaG1lbnRDcmVhdGUsXG4gICAgICAvLyAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGVcbiAgICAgIC8vICk7XG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdBdHRhY2htZW50JywnY3JlYXRlJywgSlNPTi5zdHJpbmdpZnkoZmlsZVdyYXBwZXIpLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAgKGRhdGEpPT57XG4gICAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkIHN1Y2N1c3NmdWxseScpO1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudENyZWF0ZShKU09OLnBhcnNlKGRhdGEpKVxuICAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5mYWlsdXJlQXR0YWNobWVudENyZWF0ZShlcnJvcik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2QgXG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gLy8gVkQgMTJKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLm5ld1Byb2Nlc3NcIixcbiAgICAgICAgW1wiQXR0YWNobWVudFwiLCBcImNyZWF0ZVwiLCBKU09OLnN0cmluZ2lmeShmaWxlV3JhcHBlciksSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLCcnXSxcbiAgICAgICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudENyZWF0ZSxcbiAgICAgICAgdGhpcy5mYWlsdXJlQXR0YWNobWVudENyZWF0ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBkZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnRJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5hdHRhY2htZW50SWQgPSBhdHRhY2htZW50SWQ7XG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KFwiZGVsZXRlQXR0YWNobWVudFwiKTtcbiAgICB0aGlzLmRlbGV0ZVNGQXR0YWNobWVudChhdHRhY2htZW50SWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVTRkF0dGFjaG1lbnQgPSAoZmlsZUlkOiBzdHJpbmcpID0+IHtcbiAgICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xuICAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgIC8vICAgW1wiQXR0YWNobWVudFwiLCBcImRlbGV0ZVwiLCBmaWxlSWRdLFxuICAgICAgLy8gICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlLFxuICAgICAgLy8gICB0aGlzLmZhaWx1cmVBdHRhY2htZW50RGVsZXRlXG4gICAgICAvLyApO1xuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQXR0YWNobWVudCcsJ2RlbGV0ZScsZmlsZUlkICxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgIChkYXRhKT0+e1xuICAgICAgICBjb25zb2xlLmxvZygndXBkYXRlZCBzdWNjdXNzZnVsbHknKTtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgIHRoaXMuc3VjY2Vzc0F0dGFjaG1lbnREZWxldGUoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGUoZXJyb3IpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFZEIDE1RkVCMjQgLSB1c2VkIHByb2Nlc3NOZXcgbWV0aG9kIFxuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAgIFwiTnh0Q29udHJvbGxlci5uZXdQcm9jZXNzXCIsXG4gICAgICAgIFtcIkF0dGFjaG1lbnRcIiwgXCJkZWxldGVcIiwgZmlsZUlkLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSwnJ10sXG4gICAgICAgIHRoaXMuc3VjY2Vzc0F0dGFjaG1lbnREZWxldGUsXG4gICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmlsZU5hbWUoZmlsZU5hbWV3aXRoSWRhbmRUeXBlKSB7XG4gICAgLy90cnVuY2F0ZSBmaWxlIHBhdGhcbiAgICB2YXIgZmlsZU5hbWVXaXRoVHlwZSA9IGZpbGVOYW1ld2l0aElkYW5kVHlwZS5zdWJzdHIoXG4gICAgICBmaWxlTmFtZXdpdGhJZGFuZFR5cGUuaW5kZXhPZihcIjo6OjpcIikgKyA0XG4gICAgKTtcbiAgICByZXR1cm4gZmlsZU5hbWVXaXRoVHlwZTsgLy9maWxlTmFtZVdpdGhUeXBlLnJlcGxhY2UoL14oLiooXFwvfFxcXFwpKSguKykkLywgJyQzJyk7XG4gIH1cbiAgZmlsZVVJKCkge1xuICAgIGlmICh0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIH1cbiAgfVxuXG4gIC8vVXBkYXRlIGZ1bmN0aW9uIGZvciBjYXRlZ29yaXphdGlvblxuICAvLyBzdGVwcGVyQ2F0ZWcoKSB7XG4gIC8vICAgdGhpcy5maXJzdEZvcm1Hcm91cCA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHtcbiAgLy8gICAgIGZpcnN0Q3RybDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAvLyAgIH0pO1xuICAvLyAgIHRoaXMuc2Vjb25kRm9ybUdyb3VwID0gdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAvLyAgICAgc2Vjb25kQ3RybDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAvLyAgIH0pO1xuXG4gIC8vIH1cblxuICAvLyBVcGRhdGUgRnVuY3Rpb24gZm9yIHRoZSBQcm9ncmVzcyBCYXJcbiAgdXBkYXRlUHJvZ3Jlc3MoKSB7XG4gICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYyA9PT0gdHJ1ZSkge1xuICAgICAgbGV0IGogPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wb3NzaWJpbGl0aWVzLnRvdGFsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhdGhwb3NzID0gT2JqZWN0LnZhbHVlcyh0aGlzLnBvc3NpYmlsaXRpZXMucGF0aHNbaV0ucXVlc3Rpb25zKTtcbiAgICAgICAgaWYgKHBhdGhwb3NzW3RoaXMucGF0aHF1ZXN0aW9uXSA9PT0gdGhpcy5jdXJyZW50TmFtZSkge1xuICAgICAgICAgIGoucHVzaChpKTtcbiAgICAgICAgICB0aGlzLmNoZWNrID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNoZWNrID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChqLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB0aGlzLmNvdW50ID0galswXTtcbiAgICAgIH1cbiAgICAgIGlmIChqLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdmFyIHdpZHRoID1cbiAgICAgICAgICA5MCAqICh0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoIC8gdGhpcy5wb3NzaWJpbGl0aWVzLm1heFF1ZXN0aW9ucyk7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NTdHlsZSA9IE1hdGgucm91bmQod2lkdGgpICsgXCIlXCI7XG4gICAgICB9IGVsc2UgaWYgKGoubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHZhciB3aWR0aCA9XG4gICAgICAgICAgOTAgKlxuICAgICAgICAgICh0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoIC9cbiAgICAgICAgICAgIHRoaXMucG9zc2liaWxpdGllcy5wYXRoc1t0aGlzLmNvdW50XS5jb3VudCk7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NTdHlsZSA9IE1hdGgucm91bmQod2lkdGgpICsgXCIlXCI7XG4gICAgICB9XG4gICAgICB0aGlzLnBlcmNlbnQgPSArTWF0aC5yb3VuZCh3aWR0aCk7XG4gICAgfVxuICB9XG5cbiAgdG93bk5hbWUoYXJlYSkge1xuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IGFyZWEudG93bjtcbiAgICAvL2NvbnNvbGUubG9nKCd0aGlzIHZhbHVlPScrdGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgIHRoaXMudGVtcG9BZGRyZXNzID0gW107XG4gIH1cblxuICBnZXRUb3duTG9jYWwoKSB7XG4gICAgdGhpcy50ZW1wb0FkZHJlc3MgPSBbXTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAodmFyIHZhbCBvZiB0aGlzLmxvY2FsYWRkcmVzcykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdmFsLnRvd24uc3Vic3RyaW5nKDAsIHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGgpID09IHRoaXMuc2VsZWN0ZWRWYWx1ZVxuICAgICAgICApIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKHZhbC5jb3VudHJ5KVxuICAgICAgICAgIHRoaXMudGVtcG9BZGRyZXNzLnB1c2godmFsKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCd0ZW1wb0FkZHJlc3MnK3RoaXMudGVtcG9BZGRyZXNzKVxuICAgICAgICAgIGlmICh0aGlzLnRlbXBvQWRkcmVzcy5sZW5ndGggPT0gNikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VsZWN0TGlzdFwiKS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgIHRoaXMuc2V0U2VhcmNoTGlzdFdpZHRoKCk7XG4gIH1cblxuICBjbGVhckxpc3QoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuICBzZXRTZWFyY2hMaXN0V2lkdGgoKSB7XG4gICAgLy90byByZXNpemUgc2VhcmNoIGxpc3QgYmFzZWQgb24gdGhlIHNjcmVlbiBzaXplXG4gICAgY29uc3Qgc2VhcmNoQm94V2lkdGggPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhdXRvY29tcGxldGUtaW5wdXRcIikub2Zmc2V0V2lkdGg7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RMaXN0XCIpLnN0eWxlLndpZHRoID0gc2VhcmNoQm94V2lkdGggKyBcInB4XCI7XG4gIH1cblxuICAgIGdldENvZGUoKXtcbiAgICAgIHRoaXMudGVtcG9BZGRyZXNzID0gW107XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKHZhciB2YWwgb2YgdGhpcy5hbGxBZGRyZXNzKSB7XG4gICAgICAgICAgaWYgKHZhbC56aXBDb2RlLnN1YnN0cmluZygwLCB0aGlzLnNlbGVjdGVkUG9zdGFsY29kZS5sZW5ndGgpID09IHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKHZhbC5jb3VudHJ5KVxuICAgICAgICAgICAgdGhpcy50ZW1wb0FkZHJlc3MucHVzaCh2YWwpO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygndGVtcG9BZGRyZXNzJyt0aGlzLnRlbXBvQWRkcmVzcylcbiAgICAgICAgICAgIGlmICh0aGlzLnRlbXBvQWRkcmVzcy5sZW5ndGggPT0gNikge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VsZWN0TGlzdFwiKS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgdGhpcy5zZXRTZWFyY2hMaXN0V2lkdGgoKTtcbiAgICB9XG4gICAgZ2V0UG9zdGFsY29kZSh2YWx1ZSl7XG4gICAgIHRoaXMucGxhY2VzPVtdO1xuICAgICB0aGlzLnByb3ZpbmNlPVtdO1xuICAgICAgdmFyIHByb3ZpbmNlO1xuICAgICAgdmFyIHRvd247XG4gICAgICB0aGlzLnNlbGVjdGVkUG9zdGFsY29kZSA9IHZhbHVlLnppcENvZGU7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZS5jb3VudHJ5O1xuICAgICAgdGhpcy50ZW1wb0FkZHJlc3M9W107XG5cbiBcbiAgICAgIGZvcih2YXIgdmFsIG9mIHRoaXMubG9jYWxhZGRyZXNzKXtcbiAgICAgICAgaWYodGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUgPT0gdmFsLnppcENvZGUgKXtcbiAgICAgICAgICB0aGlzLnBsYWNlcy5wdXNoKHZhbCk7XG4gICAgICAgICAgdGhpcy5wcm92aW5jZS5wdXNoKHZhbCk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsLmNvdW50cnk7XG4gICAgICAgICAgcHJvdmluY2UgPSB2YWwucHJvdmluY2VcbiAgICAgICAgICB0b3duID0gdmFsLnRvd247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmKHRoaXMucGxhY2VzLmxlbmd0aCA9PSAxKXtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm92aW5jZSA9cHJvdmluY2U7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDaXR5ID0gdG93bjtcbiAgICAgIH1lbHNlIGlmKHRoaXMucGxhY2VzLmxlbmd0aCA+MSB8fCB0aGlzLnBsYWNlcy5sZW5ndGggPT0wKXtcbiAgICAgICAgXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZENpdHkgPScnO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm92aW5jZT0nJztcbiAgICAgIH1cbiAgICB9XG4gICAgY2xvc2VEcm9wZG93bigpIHtcbiAgICAgIGlmKHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlLmxlbmd0aCA9PSA1KXtcbiAgICAgICAgdGhpcy5nZXRQb3N0YWxjb2RlKHt6aXBDb2RlOnRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlfSk7XG4gICAgICB9XG5cbiAgIHNldFRpbWVvdXQoKCk9PiB7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0TGlzdCcpLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICB9LCA1MDApO1xuICAgfVxuXG5cbiAgIC8vUGx1cyBidXR0b24gaW1wbGVtZW50YXRpb24uXG4gICBzdHJ1Y3RMb2NhbFN1YlF1ZXN0aW9uKHF1ZXM6IExvY2FsUXVlc3Rpb24pe1xuICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgc3RydWN0TG9jYWxTdWJRdWVzdGlvbicpO1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuc3ViUXVlc3Rpb25zLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdmFyIGxvY2FsU3ViUXVlc3Rpb24gPSBuZXcgTG9jYWxRdWVzdGlvbigpO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uSWQgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5JZDtcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLk5hbWUgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5OYW1lO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uUXVlc3Rpb25fX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5RdWVzdGlvbl9fYztcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLlF1ZXN0aW9uX1RleHRfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5RdWVzdGlvbl9UZXh0X19jO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uVHlwZV9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLlR5cGVfX2M7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5UaXRsZV9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLlRpdGxlX19jO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uU3ViVGl0bGVfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5TdWJUaXRsZV9fYztcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLklzX09wdGlvbmFsX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uSXNfT3B0aW9uYWxfX2M7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5FcnJvcl9NZXNzYWdlX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uRXJyb3JfTWVzc2FnZV9fYztcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uR3JvdXBfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5Hcm91cF9fYztcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLlF1ZXN0aW9uX05vX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uUXVlc3Rpb25fTm9fX2M7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5BbGxvd2VkX0ZpbGVfRXh0ZW5zaW9uc19fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLkFsbG93ZWRfRmlsZV9FeHRlbnNpb25zX19jO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24udW5pcXVlU3ViUUlkID0gJycrdGhpcy5zdWJRdWVzdGlvbnNbaV0uSWQgKyBpOyBcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLmlucHV0ID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uaW5wdXQ7XG4gICAgICAgICAgdGhpcy5sb2NhbFN1YlF1ZXN0aW9ucy5wdXNoKGxvY2FsU3ViUXVlc3Rpb24pO1xuICAgICAgfVxuICAvLyBjb25zb2xlLmxvZygnZmluYWwgbG9jYWwgc3ViIHF1ZXN0aW9ucycpO1xuICAvLyBjb25zb2xlLmxvZyh0aGlzLmxvY2FsU3ViUXVlc3Rpb25zKTtcbiAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xuICB0aGlzLmxvY2FsU3ViUU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQsdGhpcy5sb2NhbFN1YlF1ZXN0aW9ucyk7XG4gIHRoaXMubG9jYWxTdWJRdWVzdGlvbnMgPSBbXTtcbiAgLy8gY29uc29sZS5sb2coJ2ZpbmFsIGtleSBsb2NhbFN1YlFNYXAgbWFwJyk7XG4gIC8vIGNvbnNvbGUubG9nKHRoaXMubG9jYWxTdWJRTWFwKTtcbiAgfVxuXG4gIGFkZElucHV0Qm94KHF1ZXN0aW9uOiBMb2NhbFF1ZXN0aW9uLCBpbmRleDogbnVtYmVyKXtcbiAgICB2YXIgYXJyYSA9IHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XG4gICAgdmFyIHFJbmRleCA9IGFycmEuaW5kZXhPZihxdWVzdGlvbik7XG4gICAgdmFyIHF1ZXM6IExvY2FsUXVlc3Rpb24gPSBuZXcgTG9jYWxRdWVzdGlvbigpO1xuICAgIE9iamVjdC5hc3NpZ24ocXVlcywgcXVlc3Rpb24pO1xuICAgIC8vY29uc29sZS5sb2coKHF1ZXMudW5pcXVlU3ViUUlkKS5zdWJzdHJpbmcoMTgsIChxdWVzLnVuaXF1ZVN1YlFJZCkubGVuZ3RoKSsxKTtcbiAgICBpZih0aGlzLmtleUluZGV4ID09IGluZGV4KXtcbiAgICAgIHF1ZXMudW5pcXVlU3ViUUlkID0gcXVlcy5JZCArIChTdHJpbmcoaW5kZXgrMSkpO1xuICAgICAgdGhpcy5rZXlJbmRleCsrO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5rZXlJbmRleCsrO1xuICAgICAgcXVlcy51bmlxdWVTdWJRSWQgPSBxdWVzLklkICsgKFN0cmluZyh0aGlzLmtleUluZGV4KSk7XG4gICAgfVxuICAgIHF1ZXMuaW5wdXQgPSAnJztcbiAgICBhcnJhLnNwbGljZShxSW5kZXgrMSwgMCwgcXVlcyk7XG5cbiAgICB0aGlzLmxvY2FsU3ViUU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQsYXJyYSk7XG4gICAgLy9jb25zb2xlLmxvZyh0aGlzLmxvY2FsU3ViUU1hcCk7XG4gIH1cblxuICByZW1vdmVBZGRyZXNzKHF1ZXNVbmlxdWVJZDogc3RyaW5nLCBxTmFtZTogc3RyaW5nKSB7XG4gICAgLy9jb25zb2xlLmxvZyhxdWVzVW5pcXVlSWQpXG4gICAgdmFyIHZhbCA9IHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XG4gICAgdmFyIGtleWluZGV4ID0gMDtcblxuICAgIGZvcihsZXQgaT0wOyBpPHZhbC5sZW5ndGg7IGkrKyl7XG4gICAgICBpZih2YWxbaV0uTmFtZSA9PSBxTmFtZSl7XG4gICAgICAgIGtleWluZGV4Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYodGhpcy5sb2NhbFN1YlFNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLklkKSAmJiBrZXlpbmRleCA+MSl7XG4gICAgICB2YXIgcmVvcmRlciA9IHZhbC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udW5pcXVlU3ViUUlkICE9PSBxdWVzVW5pcXVlSWQpXG4gICAgICB0aGlzLmxvY2FsU3ViUU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQscmVvcmRlcik7XG4gICAgICBrZXlpbmRleC0tO1xuICAgIH1cbiAgfVxuXG4gIGdldExvY2FsU3ViUXVlc3Rpb25zKGlkOiBTdHJpbmcpe1xuICAgIHJldHVybiB0aGlzLmxvY2FsU3ViUU1hcC5nZXQoaWQpO1xuICB9XG5cbiAgLy9TaW5nbGUgQWRkIGJ1dHRvbiBmdW5jdGlvbmFsaXR5IGZvciBMaXN0IHR5cGVcbkFkZChxdWVzdGlvbjogTG9jYWxRdWVzdGlvbil7XG4gICAgdGhpcy5hZGRGbGFnID0gIGZhbHNlO1xuICAgIHZhciBhcnJhID0gdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgICB2YXIgaW5kZXggID0gYXJyYS5sZW5ndGg7XG4gICAgdmFyIGEgPSBhcnJhLnNsaWNlKC0xKS5wb3AoKTtcbiAgICB0aGlzLmluZGV4Q291bnQgID0gYS5RdWVzdGlvbl9Ob19fYztcbiAgICBcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5kZXhDb3VudCA7IGkrKykge1xuICAgICAgdmFyIHF1ZXM6IExvY2FsUXVlc3Rpb24gPSBuZXcgTG9jYWxRdWVzdGlvbigpO1xuICAgICAgT2JqZWN0LmFzc2lnbihxdWVzLCBxdWVzdGlvbltpXSk7XG4gICAgICB0aGlzLmtleUluZGV4Kys7XG4gICAgICBxdWVzLnVuaXF1ZVN1YlFJZCA9IHF1ZXMuSWQgKyAoU3RyaW5nKHRoaXMua2V5SW5kZXgpKTtcbiAgICAgIHF1ZXMuaW5wdXQgPSAnJztcbiAgICAgIGFycmEuc3BsaWNlKGluZGV4Kyh0aGlzLmluZGV4Q291bnQtMSksIDAsIHF1ZXMpO1xuICAgIHRoaXMubG9jYWxTdWJRTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCxhcnJhKTtcbiAgICB9ICBcbiAgICB0aGlzLmFkZEZsYWcgPSB0cnVlO1xuICB9XG4gIFxuICBoYW5kbGVMb2NhdGlvblNlbGVjdGVkKGxvY2F0aW9uOiBhbnkscXVlczphbnkpIHtcbiAgICBxdWVzLmlucHV0ID0gbG9jYXRpb247XG4gIH1cblxuICBzZWxlY3RlZElucHV0KGlucHV0OmFueSAscXVlczphbnkpeyBcbiAgICBxdWVzLmlucHV0ID0gaW5wdXQ7XG4gIH1cblxuICBoYW5kbGVUZXh0YXJlYVZhbHVlQ2hhbmdlKHZhbHVlIDpzdHJpbmcpe1xuICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCB0ZXh0LWFyZWEgdGV4dDonLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0RGF0YShkYXRhOmFueSl7XG4gICBjb25zb2xlLmxvZygndGFibGUgZGF0YScsZGF0YSk7XG4gIH1cblxuICBkZXBlbmRlbnRDaGFuZ2UodmFsdWU6YW55KXtcbiAgdGhpcy5uZXh0VmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGRpc3BsYXlEYXRlKGRhdGVTZWxlY3RlZDogYW55LHF1ZXM6YW55KXtcbiAgICAvLyBQYXJzZSB0aGUgZGF0ZSBzdHJpbmcgdXNpbmcgbW9tZW50IGFuZCBhc3NpZ24gaXQgdG8gdGhpcy5zZWxlY3RlZERhdGVcbiAgICBxdWVzLmlucHV0ID0gbW9tZW50KGRhdGVTZWxlY3RlZC52YWx1ZSAsICdZWVlZLU1NLUREIEhIOm1tOnNzJykuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJykudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldEtleShpdGVtOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhpdGVtKVswXTtcbiAgfVxuICBcbiAgZ2V0VmFsdWUoaXRlbTogYW55KTogYW55IHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhpdGVtKVswXTtcbiAgfVxufSIsIjwhLS0gU3Bpbm5lciAtLT5cbjxuZ3gtc3Bpbm5lciBbbmFtZV09XCJzcGlubmVyTmFtZVwiIFt0eXBlXT1cInNwaW5uZXJUeXBlXCI+PC9uZ3gtc3Bpbm5lcj5cbjwhLS0gY3VzdG9tIGxvYWRlciAtLT5cbjxhcHAtbG9hZGVyPjwvYXBwLWxvYWRlcj5cbjwhLS0gQmFjayBQcm9jZXNzaW5nIC0tPlxuPGRpdiAqbmdJZj1cImJhY2tpY29uID09IGZhbHNlXCIgPlxuICA8ZGl2IGNsYXNzPVwiYmFja2ljb25cIiBbc3R5bGUudmlzaWJpbGl0eV09XCJxdWVzdGlvblN0YWNrLmxlbmd0aCA+MCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCI+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlQmFja0NsaWNrKClcIiBbY2xhc3NdPVwiIGFiSXRlbT8uU3RhdHVzX19jID09ICdDb21wbGV0ZWQnID8gJ3N1bW1hcnktdm9sdmVyJzonYXBwLWJhY2sxJ1wiPlxuICAgIDxpbWcgY2xhc3M9XCJpY29uLWFycm93LWJhY2tcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tYXJyb3ctYmFjay5wbmdcIiBhbHQ9XCJTY3JvbGwgZG93blwiPiB7eyBxYkl0ZW0/LkJhY2tfX2MgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBRdWVzdGlvbiBIYW5sZGluZyAtLT5cbjxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW1cIiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbF9fYyA/ICdxdWVzdGlvbmRpdjEnIDogJ3F1ZXN0aW9uZGl2MSBwYWRkLWJvdHRvbSdcIj5cbiAgPCEtLSBQcm9ncmVzcyBCYXIgJiBUaXRsZSAtLT5cbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5UaXRsZV9fYyAmJiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCI+XG4gICAgPGgxIGNsYXNzPVwiaGVhZGVyMVwiPnt7IHF1ZXN0aW9uSXRlbT8uVGl0bGVfX2MgfX08L2gxPlxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIyXCI+e3sgcXVlc3Rpb25JdGVtPy5TdWJUaXRsZV9fYyB9fTwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFByb2dyZXNzICYgR3JvdXBpbmcgLS0+XG4gIDxkaXYgW25nQ2xhc3NdPVwieyBxdWVzdGlvbmRpdjI6ICFxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCI+XG4gICAgPCEtLSBQaWUgQ2hhcnQgUHJvZ3Jlc3MgLS0+XG4gICAgPGRpdiBbbmdDbGFzc109XCJ7IGJnQ29sb3I6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cbiAgICAgIDxkaXYgaWQ9XCJwcm9ncmVzc1wiICpuZ0lmPVwicWJJdGVtPy5Qcm9ncmVzc19CYXJfX2NcIj5cbiAgICAgICAgPGNpcmNsZS1wcm9ncmVzcyBjbGFzcz1cInRpdGxlYmFyXCIgW3BlcmNlbnRdPVwidGhpcy5wZXJjZW50XCIgW3JhZGl1c109XCI0MFwiIFtzcGFjZV09XCItNFwiIFtvdXRlclN0cm9rZVdpZHRoXT1cIjRcIlxuICAgICAgICBbaW5uZXJTdHJva2VXaWR0aF09XCI0XCIgW291dGVyU3Ryb2tlQ29sb3JdPVwiJyNlMGIxYjAnXCIgW2lubmVyU3Ryb2tlQ29sb3JdPVwiJyNlN2U4ZWEnXCIgW2FuaW1hdGlvbl09XCJ0cnVlXCIgW2JhY2tncm91bmRQYWRkaW5nXT0gXCIwXCJcbiAgICAgICAgW2JhY2tncm91bmRDb2xvcl09IFwiJyNkZDJlMTMnXCIgW2JhY2tncm91bmRHcmFkaWVudFN0b3BDb2xvcl09XCInI2Y5YmZiZCdcIiBbdGl0bGVDb2xvcl09XCInI2YzZWRlZCdcIiBcbiAgICAgICAgY2xhc3M9XCJuZy1zdGFyLWluc2VydGVkXCIgW3RpdGxlXT1cInRoaXMucGVyY2VudCsnJSdcIiBbc2hvd1N1YnRpdGxlXT1cImZhbHNlXCIgW3Nob3dCYWNrZ3JvdW5kXT1cInRydWVcIiBbYW5pbWF0aW9uRHVyYXRpb25dPVwiMzAwXCJcbiAgICAgICAgW3N0YXJ0RnJvbVplcm9dPVwiZmFsc2VcIiBbcmVzcG9uc2l2ZV09XCJmYWxzZVwiID5cbiAgICAgICAgPC9jaXJjbGUtcHJvZ3Jlc3M+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2hvdyB0aGUgR3JvdXAvTW9kdWxlIHJlbGF0ZWQgdG8gdGhlIFByb2dyZXNzIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uR3JvdXBfX2MgJiYgcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgcXVlc3Rpb25hbGlnbjogIXFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsYXJnZVRpdGxlXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cIm15dC1mb250NiBteXQtdGV4dDNcIj5cbiAgICAgICAgICB7eyBxdWVzdGlvbkl0ZW0/Lkdyb3VwX19jIH19XG4gICAgICAgIDwvaDM+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uU3ViX1RleHRfX2MgIT0gJ8K/RW4gcXXDqSBwYcOtcyBvY3VycmnDsz8nXCIgY2xhc3M9XCJteXQtZm9udDUgbXl0LXRleHQxXCI+e3txdWVzdGlvbkl0ZW0/LlN1Yl9UZXh0X19jfX08L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5TdWJfVGV4dF9fYyA9PT0gJ8K/RW4gcXXDqSBwYcOtcyBvY3VycmnDsz8nXCIgY2xhc3M9XCJteXQtZm9udDEwIG15dC10ZXh0MlwiPnt7cXVlc3Rpb25JdGVtPy5TdWJfVGV4dF9fY319PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBRdWVzdGlvbiBIYW5kbGluZyAtLT5cbiAgPGRpdiBjbGFzcz1cInF1ZXN0aW9uZGl2MlwiPlxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fVGV4dF9fY1wiPlxuICAgICAgPHAgY2xhc3M9XCJxdWVzdGlvblN0eWxlXCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fYylcIj5cbiAgICAgICAge3txdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2N9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gVGl0bGUgLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLklzX1RpdGxlX19jXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlR5cGVfX2MgIT0gJ0Jvb2snICYmIHF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9Ob19fYyE9JzYnICYmIHF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9Ob19fYyE9JzknXCI+IFxuICAgICAgICA8aDMgY2xhc3M9XCJxdWVzdGlvbmFsaWduICBteXQtZm9udDMgbXl0LWFsaWduIG15dC10ZXh0NFwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MpXCI+XG4gICAgICAgICAge3txdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2N9fVxuICAgICAgICA8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICAgIDwhLS0gSEEgMzEtSkFOLTI0IFJlbW92ZWQgdGhlIHVud2FudGVkIHN0eWxpbmcgY2xhc3MgLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwiIXF1ZXN0aW9uSXRlbS5Jc19UaXRsZV9fY1wiIFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsX19jID8gJ2hlYWRlci1zdHlsZScgOiAncXVlc3Rpb24tZi1zaXplJ1wiPlxuICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jKVwiID5cbiAgICAgICAge3sgcXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jIH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG5cbiAgICA8IS0tIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgd2l0aCBDdXN0b20gU3R5bGluZyAtIE1SIC0gMTFBVUcyMyAtLT5cbiAgICA8IS0tIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uVHlwZV9fYyA9PSAnQm9vaydcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fTm9fX2M9PSc2J1wiPlxuICAgICAgICA8aDMgY2xhc3M9XCJteXQtMzIxXCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fYylcIj5cbiAgICAgICAgICB7eyBxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MgfX1cbiAgICAgICAgPC9oMz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgICBcbiAgICA8IS0tIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgd2l0aCBDdXN0b20gU3R5bGluZyAtIE1SIC0gMTFBVUcyMyAtLT5cbiAgICA8IS0tIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uVHlwZV9fYyA9PSAnRmlsZScgXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlF1ZXN0aW9uX05vX19jPT0nOSdcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwibXl0LTM0NVwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MpXCI+XG4gICAgICAgICAge3txdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2N9fVxuICAgICAgICA8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICA8L2Rpdj5cblxuICA8IS0tIEFkZGl0aW9uYWwgSW5mbyAtLT5cbiAgPCEtLSBUaGUgYmVsb3cgY29kZSBjYW4gYmUgd3JpdHRlbiBlZmZlY3RpdmVseSBuZXN0ZWQgbmdJZiBmb3IgUmljaCBUZXh0ICYgT3RoZXIgb253IGZvciBQcm9ncmVzcyBCYXIgLS0+XG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uQWRkaXRpb25hbF9SaWNoX19jICYmIHFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIiA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJhZGRpdGlvbmFsIFwiIFtpbm5lckhUTUxdPVwiaW5uZXJodG1sXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLkFkZGl0aW9uYWxfUmljaF9fYyAmJiAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxuICAgIDxkaXYgY2xhc3M9XCJpbmZvLWFsZXJ0IHF1ZXMtYWxlcnQxXCI+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLWluZm8gZmEtM3ggaXBvc2l0aW9uIGljb2xvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvZGl2XCIgW2lubmVySFRNTF09XCJpbm5lcmh0bWxcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBEcm9wZG93bi0tPlxuICA8ZGl2ICpuZ0lmPVwiZHJvcGRvd25GbGFnXCIgPlxuICAgIDxkaXYgY2xhc3M9XCJkaXMtZmxleFwiPlxuICAgICAgPHNlbGVjdCBcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdkdC1saW5lIG15dC1hbGlnbjMgbXl0LWFsaWduMiBkcERvd24gZHJvcGJveCBkb3duMSBteXQtZHJvcGJveCBteXQtYm9yZGVyLXIgbXl0LWZvbnQxJzogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MsXG4gICAgICAgICAgJ2N1c3RvbS1zZWxlY3QnOiAhcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2NcbiAgICAgICAgfVwiIGNsYXNzPVwibXItc20tMiBkZC1oZWlnaHQgZHJvcGJveCBcIiAgaWQ9XCJkcm9wZG93blwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiAoY2hhbmdlKT1cImNsZWFyRXJyb3IoKVwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCcgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMCA/ICcjZmZmJyA6ICcnXG4gICAgICAgIH19XCIgc3R5bGUuY29sb3I9XCJ7eyBxdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDIxLjVyZW0gIWltcG9ydGFudDtcIj5cbiAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0IG9mIHF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHNcIiBjbGFzcz1cIm9wdGlvblwiIHZhbHVlPVwie3sgb3B0LlZhbHVlX19jIH19XCI+XG4gICAgICAgICAge3sgb3B0LlZhbHVlX19jIH19XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiLlwiIGRpc2FibGVkIGhpZGRlbj57eydwbGVhc2VNYWtlQ2hvaWNlJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX08L29wdGlvbj5cbiAgICAgIDwvc2VsZWN0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFJhZGlvIC0tPlxuICA8ZGl2ICpuZ0lmPVwicmFkaW9GbGFnIHx8IGRhdGFGbGFnXCIgY2xhc3M9XCJcIj5cbiAgICA8ZGl2ICpuZ0lmPVwidGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3JcIiBjbGFzcz1cImNvbmQtZGl2MlwiPlxuICAgICAge3sgcXVlc3Rpb25JdGVtPy5FcnJvcl9NZXNzYWdlX19jIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImRpcy1mbGV4XCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHQgb2YgcXVlc3Rpb25JdGVtLlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkc1wiIGNsYXNzPVwicmFkaW8gcmFkaW9PcHRpb25cIiA+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInJhZGlvY29udGFpbmVyIGNvbnRhaW5lciAgbXl0LWZvbnQ0XCI+e3sgb3B0LlZhbHVlX19jIH19XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFtpZF09XCJvcHQuSWRcIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgbmFtZT1cImlucFZhbHVlXCIgdmFsdWU9XCJ7eyBvcHQuVmFsdWVfX2MgfX1cIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvcHRpb25DaGFuZ2Uob3B0LlZhbHVlX19jKVwiIC8+XG48IS0tIEhBIDIwRkVCMjQgUmVtb3ZlZCBjaGVja21hcmsgYXMgaXQgd2FzIGNhdXNpbmcgc3R5bGluZyBpc3N1ZSBpbiBSYWRpbyAtLT5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQ2hlY2tib3ggLS0+XG4gIDxkaXYgKm5nSWY9XCJjaGVja2JveEZsYWdcIiBjbGFzcz1cIlwiPlxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0/LmVycm9yXCIgY2xhc3M9XCJjb25kLWRpdjJcIj5cbiAgICAgIHt7IHF1ZXN0aW9uSXRlbT8uRXJyb3JfTWVzc2FnZV9fYyB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygb3B0aW9uVmFsdWVzXCIgY2xhc3M9XCJjaGVja2JveC13cmFwcGVyXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRhaW5lcjFcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2lkXT1cIml0ZW0uSWRcIiBbKG5nTW9kZWwpXT1cIml0ZW0uY2hlY2tlZFwiIChjbGljayk9XCJjbGVhckVycm9yKClcIiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hlY2tib3gtbGFiZWxcIj57eyBpdGVtLlZhbHVlX19jIH19PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gVGV4dCAtLT5cbiAgPGRpdiAqbmdJZj1cInRleHRGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTIgbXl0LWJvb2sxXCI+XG4gICAgPCEtLSBIQSAzMS1KQU4tMjQgVG8gcmVkdWNlIHRoZSBtYXJnaW4gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiIGNsYXNzPVwiZGlzLWZsZXggbXl0LWFsaWduMlwiIFtjbGFzc109XCInY29sLW1kLScgKyBxdWVzdGlvbkl0ZW0/LlNpemVfX2MgKyAnIHBhZGRpbmdub25lJ1wiPlxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnYm94b3V0bGluZSBteXQtZm9udDEgbXl0LWJvb2sxJzogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MsXG4gICAgICAgICAgdGV4dEJveDE6ICFxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fY1xuICAgICAgICB9XCIgaWQ9XCJ0ZXh0LWlucHV0LWlkXCIgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbT8uZXJyb3JcbiAgICAgICAgICAgID8gJ3JlZCdcbiAgICAgICAgICAgIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gJyM4N2JlMWMnXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH19XCIgb25pbnB1dD1cInRoaXMudmFsdWU9dGhpcy52YWx1ZS5yZXBsYWNlKC9bXmEtekEtWjAtOVxccy46Oyw/XS9nLCcnKTtcIiAvPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBjaGVjay1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCJpbnBWYWx1ZT8ubGVuZ3RoID4gMFwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBUZXh0IEFyZWEgLS0+XG4gIDxkaXYgKm5nSWY9XCJ0YUZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJkaXMtZmxleFwiPlxuICAgICAgPHRleHRhcmVhIGNsYXNzPVwidGEtaW5wdXRcIiBpZD1cInRhLWlucHV0LWlkXCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIChjbGljayk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMCAmJiB0YUZvY3VzT3V0XG4gICAgICAgICAgICA/ICcjODdiZTFjJ1xuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9fVwiIChmb2N1c291dCk9XCJ0YUZvY3VzT3V0ID0gdHJ1ZVwiXG4gICAgICAgIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVowLTlcXHMuOjssP10vZywnJyk7XCI+PC90ZXh0YXJlYT5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgY2hlY2staWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDAgJiYgdGFGb2N1c091dFwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBDQyBOdW1iZXIgRm9ybWF0IC0tPlxuICA8ZGl2ICpuZ0lmPVwibnVtYmVyRmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgPGRpdiBjbGFzcz1cImRpcy1mbGV4XCI+XG4gICAgICA8aW5wdXQgdHlwZT1cIlRleHRcIiBwbGFjZWhvbGRlcj1cIjAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwXCIgW25nQ2xhc3NdPVwieyBib3hvdXRsaW5lOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIGlkPVwibnVtYmVyLWlucHV0LWlkXCIgKG5nTW9kZWxDaGFuZ2UpPVwiQ0NPbkNoYW5nZSgkZXZlbnQpXCIgcmVxdWlyZWQ9XCJcIiBtYXhsZW5ndGg9XCIyOVwiXG4gICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIiBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teMC05IF0vZywnJyk7XCJcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO1wiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3JcbiAgICAgICAgICAgID8gJ3JlZCdcbiAgICAgICAgICAgIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gJyM4N2JlMWMnXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH19XCIgLz5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBzdHlsZT1cImNvbG9yOiAjODdiZTFjOyBtYXJnaW4tbGVmdDogLTJyZW07IHotaW5kZXg6IDE7IHBhZGRpbmc6IDVweDtcIlxuICAgICAgICAqbmdJZj1cImlucFZhbHVlPy5sZW5ndGggPiAwXCI+PC9pPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPCEtLSBFTkQtLT5cblxuICA8IS0tIEFscGhhTnVtZXJpYyAtLT5cbiAgPGRpdiAqbmdJZj1cImFscGhhbnVtZXJpY0ZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMlwiPiA8IS0tVUkgbm90IGNvbXBsZXRlZC0tPlxuICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjpyZWxhdGl2ZTtcIj5cbiAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICA8aW5wdXQgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPVwie3snemVyb09mWmVybycgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19XCIgc3R5bGU9XCJwYWRkaW5nOjVweCA1cHggNXB4IDE1MHB4O1wiIGlkPVwieW91cmlkaGVyZVwiLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBFbWFpbCAtLT5cbiAgPGRpdiAqbmdJZj1cImVtYWlsRmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgPGRpdiBjbGFzcz1cImRpcy1mbGV4XCI+XG4gICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgW25nQ2xhc3NdPVwieyBib3hvdXRsaW5lOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIGlkPVwiZW1haWwtaW5wdXQtaWRcIlxuICAgICAgICByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yXG4gICAgICAgICAgICA/ICdyZWQnXG4gICAgICAgICAgICA6IGlucFZhbHVlPy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/ICcjODdiZTFjJ1xuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9fVwiIC8+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgc3R5bGU9XCJjb2xvcjogIzg3YmUxYzsgbWFyZ2luLWxlZnQ6IC0ycmVtOyB6LWluZGV4OiAxOyBwYWRkaW5nOiA1cHhcIlxuICAgICAgICAqbmdJZj1cImlucFZhbHVlPy5sZW5ndGggPiAwXCI+PC9pPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIERhdGVUaW1lIC0tPlxuICA8ZGl2ICpuZ0lmPVwiZHRGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ1plcm8gbXl0LXRpbWUxXCIgPlxuICAgIDwhLS0gRXJyb3IgSGFuZGxpbmcgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0lmPVwicXVlc3Rpb25JdGVtLmVycm9yXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XG4gICAgY29sb3I6IHJlZDtcIj57e3F1ZXN0aW9uSXRlbT8uZXJyb3I/LmVycm9yTXNnfX08L2Rpdj5cblxuICAgIDwhLS0gRGF0ZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZGF0ZUZsYWdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICA8IS0tIEhBIDMxLUpBTi0yNCBUaGVzZSBsYWJlbHMgd2VyZSBvY2N1cGluZyB0aGUgZW1wdHkgc3BhY2Ugd2hlbiBkYXRlIHF1ZXN0aW9uIGNvbWVzLS0+XG4gICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8uRGF0ZV9UZXh0X19jIH19PC9sYWJlbD4gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkaXMtZmxleFwiPlxuICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgPCEtLSBIQSAwMkZFQjI0IEFkZGl0aW9uYWwgcGFyYW0gdG8gdXBkYXRlIHRoZSBxdWVzdGlvbiAtLT5cbiAgICAgICAgICA8bXktZGF0ZS1waWNrZXIgbmFtZT1cIm15ZGF0ZVwiIFtvcHRpb25zXT1cIm15RGF0ZVBpY2tlck9wdGlvbnNcIiBpZD1cImRhdGVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweCAhaW1wb3J0YW50O1wiIChkYXRlQ2hhbmdlZCk9XCJvbkRhdGVDaGFuZ2VkKCRldmVudCwgcXVlc3Rpb25JdGVtKVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbERhdGVcIiBjbGFzcz1cImRhdGUtcGlja2VyXCIgcGxhY2Vob2xkZXI9XCJ7eydzZWxlY3REYXRlJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cIiAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCI+XG4gICAgICAgICAgPC9teS1kYXRlLXBpY2tlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVGltZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwidGltZUZsYWdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LlRpbWVfVGV4dF9fYyB9fTwvbGFiZWw+IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGlzLWZsZXhcIj5cbiAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydkdC1saW5lIGRhdGUtbGluZSBkdC10aW1lJzogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlYW5kVGltZTogIXFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jfVwiIFxuICAgICAgICAgICAgICBpZD1cImRhdGVhbmRUaW1lXCIgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJxdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCc6IHF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDAgPyAnJyA6ICcnXCJcbiAgICAgICAgICAgICAgKGZvY3VzKT1cIihjbGVhclNRRXJyb3IpIFwiPlxuICAgICAgICAgIDxzZWxlY3QgbmFtZT1cImhvdXJzXCIgY2xhc3M9XCJkYXRldGltZSBzaG93SG91ciBteXQtdGltZSBteXQtaG91clwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRIb3VyXCIgaWQ9XCJob3VyXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5ISDwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiaG91clwiICpuZ0Zvcj1cImxldCBob3VyIG9mIGhvdXJzXCI+XG4gICAgICAgICAgICAgIHt7IGhvdXIgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XG4gICAgICAgICAgPHNlbGVjdCBuYW1lPVwibWludXRlc1wiIGNsYXNzPVwiZGF0ZXRpbWUgc2hvd21pbnV0ZSBteXQtdGltZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRNaW51dGVcIiBpZD1cIm1pbnV0ZVwiXG4gICAgICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCI+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+TU08L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIm1pbnV0ZVwiICpuZ0Zvcj1cImxldCBtaW51dGUgb2YgbWludXRlc1wiPlxuICAgICAgICAgICAgICB7eyBtaW51dGUgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBjb2xvbjE6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jIH1cIiAqbmdJZj1cInF1ZXN0aW9uSXRlbT8uWDI0X0hvdXJzX19jID09IGZhbHNlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9uXCI+IDogPC9zcGFuPlxuICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiQU0vUE1cIiBjbGFzcz1cIm15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1lcmlkaWVtXCIgaWQ9XCJtZXJpZGllbVwiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQU1cIj5BTTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUE1cIj5QTTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8IS0tIDxkaXYgW25nQ2xhc3NdPVwieycnOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jLCAnZGF0ZWFuZFRpbWUnOiAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY31cIj48L2Rpdj4gLS0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpIGNsYXNzPVwiZmEgY2hlY2staWNvbjNcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDBcIj48L2k+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQXR0YWNobWVudCAvIEZpbGUgLS0+XG4gIDxkaXYgKm5nSWY9XCJmaWxlRmxhZ1wiPlxuICAgIDxkaXYgKm5nSWY9XCIhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImluZm8tYWxlcnRcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7eyB0aGlzLnF1ZXN0aW9uSXRlbT8uZXJyb3IgPyAncmVkJyA6ICcnIH19XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInBpY3R1cmUtdXBsb2FkXCIgZm9yPVwiZmlsZS11cGxvYWRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpY3R1cmUtdXBsb2FkLWNoaWxkXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbGUtaW1hZ2UtbyBmYS01eCBpY29sb3JcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtcGx1cyBmYS0yeCBwaWN0dXJlLXVwbG9hZC1jaGlsZCBwaWMtdXBsb2FkIGljb2xvclwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgICA8aW5wdXQgaWQ9XCJmaWxlLXVwbG9hZFwiIHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwie3sgYWxsb3dlZEZpbGVFeHRlbnNpb24gfX1cIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50LHRoaXMucXVlc3Rpb25JdGVtKVwiIC8+XG4gICAgPC9kaXY+XG4gICAgPHVsICpuZ0lmPVwiXG4gICAgICAgIGF0dGFjaG1lbnRzPy5sZW5ndGggPiAwICYmXG4gICAgICAgIHF1ZXN0aW9uSXRlbT8uVHlwZV9fYyA9PT0gJ0ZpbGUnICYmXG4gICAgICAgICFxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fY1xuICAgICAgXCIgY2xhc3M9XCJhdHRhY2gtdWxpc3QgY29sLW1kLTEyXCI+XG4gICAgICA8bGkgKm5nRm9yPVwibGV0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHNcIiBjbGFzcz1cImFsaWduLWxcIj5cbiAgICAgICAge3sgYXR0YWNobWVudC5hdHRhY2htZW50TmFtZX19PHNwYW4gY2xhc3M9XCJhdHRhY2gtbGlzdFwiIChjbGljayk9XCJkZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuYXR0YWNobWVudElkKVwiPlg8L3NwYW4+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG5cbiAgICA8IS0tIEF0dGFjaG1lbnQgUHJvZ3Jlc3MgLS0+XG4gICAgPGRpdiAqbmdJZj1cInFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHNcIiBjbGFzcz1cImZpbGUtdXBsb2FkaW5nLWJveFwiPlxuICAgICAgICA8IS0tPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0MVwiIC8+LS0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXBsb2FkaW5nLWZpbGUtbmFtZSBcIj57eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lIH19PC9zcGFuPlxuICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kZWxldGUlNDAyeC5wbmdcIiBjbGFzcz1cImRlbGV0ZUljb25cIlxuICAgICAgICAgIChjbGljayk9XCJkZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuYXR0YWNobWVudElkKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLXVwbG9hZC1ib3hcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7eyB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA/ICdyZWQnIDogJycgfX1cIj5cbiAgICAgIFxuICAgICAgICA8IS0tPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0MVwiIC8+LS0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZi1OYW1lXCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fYylcIj4ge3sgcXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jfX08L3NwYW4+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZpbGUtbGFiZWwgXCI+XG4gICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ZpbGUtdXBsb2FkLnBuZ1wiIGNsYXNzPVwiZmlsZS1pY29uXCIvPlxuICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgPGlucHV0IG5hbWU9XCJhdHRhY2htZW50XCIgdHlwZT1cImZpbGVcIiBwbGFjZWhvbGRlcj1cInt7J3RvQnV5VGlja2V0JyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cIiBtdWx0aXBsZVxuICAgICAgICAgICAgYWNjZXB0PVwiLnBkZiwgLnBuZywgLmpwZywgLmpwZWcsIC5oZWljLCAuYXBwbGljYXRpb24vcGRmXCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmaWxlLXVwbG9hZC1idG5cIj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEJvb2sgLS0+XG4gIDxkaXYgKm5nSWY9XCJib29rRmxhZ1wiPlxuICAgIDxkaXYgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWxfX2MgPyAnZm9ybS1ncm91cCBjb250ZW50LWJveCcgOiAnZm9ybS1ncm91cCdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uZXJyb3JcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgIGNvbG9yOiByZWQ7XCI+e3txdWVzdGlvbkl0ZW0/LmVycm9yPy5lcnJvck1zZ319PC9kaXY+XG4gICAgICAgIDxkaXYgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWxfX2MgPyAnJyA6ICdteXQtYWxpZ24zJ1wiIFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsX19jID8gJ2NvbC1sZy0nICsgcXVlcy5TaXplX19jICsgJyBwYWRkaW5nbm9uZScgOiAnY29sLW1kLScgKyBxdWVzLlNpemVfX2MgKyAnIHBhZGRpbmdub25lJ1wiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXMgb2Ygc3ViUXVlc3Rpb25zO2xldCBpID0gaW5kZXhcIiBbaWRdPVwicXVlcy5JZFwiPlxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBkb3duMjogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgcXVlcz8uUXVlc3Rpb25fVGV4dF9fYyB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdaZXJvIG15dC1kYXRlVGltZU5ld1wiICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnVGltZScgfHwgcXVlcy5UeXBlX19jID09PSAnRGF0ZSdcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdEYXRlJ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdCb3R0b21cIj5cbiAgICAgICAgICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LkRhdGVfVGV4dF9fYyB9fTwvbGFiZWw+IC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlYW5kdGltZVwiPlxuICAgICAgICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMDJGRUIyNCBBZGRpdGlvbmFsIHBhcmFtIHRvIHVwZGF0ZSB0aGUgcXVlc3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgICA8bXktZGF0ZS1waWNrZXIgbmFtZT1cIm15ZGF0ZVwiIFtvcHRpb25zXT1cIm15RGF0ZVBpY2tlck9wdGlvbnNcIiBpZD1cImRhdGVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweCAhaW1wb3J0YW50O1wiIChkYXRlQ2hhbmdlZCk9XCJvbkRhdGVDaGFuZ2VkKCRldmVudCwgcXVlcylcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbERhdGVcIiBjbGFzcz1cImRhdGUtcGlja2VyXCIgcGxhY2Vob2xkZXI9XCJ7eydzZWxlY3REYXRlJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cIiAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiID5cbiAgICAgICAgICAgICAgICAgIDwvbXktZGF0ZS1waWNrZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnVGltZSdcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkaW5nQm90dG9tXCI+XG4gICAgICAgICAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJkYXRlLXRpbWUgY29sb3JmXCI+e3sgcXVlc3Rpb25JdGVtPy5UaW1lX1RleHRfX2MgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZWFuZHRpbWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZHQtbGluZSBkYXRlLWxpbmUgZHQtdGltZSc6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVhbmRUaW1lOiAhcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2N9XCIgXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJkYXRlYW5kVGltZVwiIFtzdHlsZS5ib3JkZXItY29sb3JdPVwicXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnOiBxdWVzdGlvbkl0ZW0/LmlucHV0Py5sZW5ndGggPiAwID8gJycgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cIihjbGVhclNRRXJyb3IpIFwiPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiaG91cnNcIiBjbGFzcz1cImRhdGV0aW1lIHNob3dIb3VyIG15dC10aW1lIG15dC1ob3VyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEhvdXJcIiBpZD1cImhvdXJcIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5ISDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJob3VyXCIgKm5nRm9yPVwibGV0IGhvdXIgb2YgaG91cnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBob3VyIH19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9uXCI+IDogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwibWludXRlc1wiIGNsYXNzPVwiZGF0ZXRpbWUgc2hvd21pbnV0ZSBteXQtdGltZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRNaW51dGVcIiBpZD1cIm1pbnV0ZVwiXG4gICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPk1NPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIm1pbnV0ZVwiICpuZ0Zvcj1cImxldCBtaW51dGUgb2YgbWludXRlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IG1pbnV0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGNvbG9uMTogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MgfVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9uXCI+IDogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJBTS9QTVwiIGNsYXNzPVwibXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWVyaWRpZW1cIiBpZD1cIm1lcmlkaWVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFNXCI+QU08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUE1cIj5QTTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRGF0ZVRpbWUnXCI+XG4gICAgICAgICAgICA8YXBwLWN1c3RvbS1kYXRlLXBpY2tlciBbbWluRGF0ZV09XCJxdWVzLm1pbkRhdGVcIiBbZGF0ZV09XCJxdWVzLmlucHV0XCIgKGRhdGVDaGFuZ2UpPVwiZGlzcGxheURhdGUoJGV2ZW50LHF1ZXMpXCI+PC9hcHAtY3VzdG9tLWRhdGUtcGlja2VyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUZXh0J1wiPlxuICAgICAgICAgICAgPGxhYmVsPnt7IHF1ZXMuUXVlc3Rpb25fVGV4dF9fYyB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8YXBwLWN1c3RvbS1pbnB1dFxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInF1ZXM/LmlucHV0XCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzVmFsdWVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICdkaXMtZmxleCBkdC1saW5lIGRhdGUtbGluZSBib29rVGV4dCBib3hvdXRsaW5lIG15dC1mb250MSc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MsXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dEJveDogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcbiAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cInF1ZXNcIiBcbiAgICAgICAgICAgICAgICAgIFtpZFZhbHVlXT1cInF1ZXM/LlRyYWNraW5nX0lEX19jXCJcbiAgICAgICAgICAgICAgICAgIFtmb2N1c0V2ZW50XT1cImNsZWFyU1FFcnJvcihxdWVzPy5JZClcIlxuICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cInF1ZXM/LmVycm9yXCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJxdWVzPy5RdWVzdGlvbl9fY1wiXG4gICAgICAgICAgICAgICAgICAoaW5wdXRWYWx1ZSk9XCJzZWxlY3RlZElucHV0KCRldmVudCxxdWVzKVwiPlxuICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdMb2NhdGlvbidcIj5cbiAgICAgICAgICAgIDwhLS0gZm9yIHBpY2sgbG9jYXRpb24gLS0+XG4gICAgICAgICAgICA8IS0tIEhBMTAwMTIwMjQgQWRkZWQgQXBpIGtleSBhcyBpbnB1dCAtLT5cbiAgICAgICAgICAgIDxhcHAtcGljay1sb2NhdGlvbiBbYXBpS2V5XT1cInFiSXRlbVsnQXBpX0tleV9fYyddXCIgW2FkZHJlc3NdPVwicXVlcy5pbnB1dFwiIChsb2NhdGlvblNlbGVjdGVkKT1cImhhbmRsZUxvY2F0aW9uU2VsZWN0ZWQoJGV2ZW50LHF1ZXMpXCI+PC9hcHAtcGljay1sb2NhdGlvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIGZvciAgdGV4dCBhcmVhICAgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1RleHRBcmVhJ1wiPlxuICAgICAgICAgICAgPGFwcC1jdXN0b20tdGV4dC1hcmVhIFt2YWx1ZV09XCJxdWVzLmlucHV0XCIgW3Jvd3NdPVwiM1wiIFtlcnJvcl09XCJxdWVzLmVycm9yXCIgW3BsYWNlaG9sZGVyXT1cInF1ZXMuUXVlc3Rpb25fX2MgXCIgKHRleHRhcmVhVmFsdWVDaGFuZ2UpPVwiaGFuZGxlVGV4dGFyZWFWYWx1ZUNoYW5nZSgkZXZlbnQpXCI+PC9hcHAtY3VzdG9tLXRleHQtYXJlYT5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRW1haWwgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0VtYWlsJ1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIFsobmdNb2RlbCldPVwicXVlcy5pbnB1dFwiIFtpZF09XCJxdWVzLklkXCIgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJTUUVycm9yKHF1ZXMuSWQpXCJcbiAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgcXVlcy5lcnJvciA/ICdyZWQnIDogJycgfX1cIiBwbGFjZWhvbGRlcj1cInt7IHF1ZXMuUXVlc3Rpb25fX2MgfX1cIiAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0ZpbGUnXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicGljdHVyZS11cGxvYWQgY3VzdG9tLWZpbGUtdXBsb2FkIGJnY29sb3Itd1wiIGZvcj1cImZpbGUtdXBsb2FkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWN0dXJlLXVwbG9hZC1jaGlsZFwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlLWltYWdlLW8gZmEtNXggaWNvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIlxuICAgICAgICAgICAgICAgICAgICBmYSBmYS1wbHVzIGZhLTJ4XG4gICAgICAgICAgICAgICAgICAgIHBpY3R1cmUtdXBsb2FkLWNoaWxkXG4gICAgICAgICAgICAgICAgICAgIHBpYy11cGxvYWRcbiAgICAgICAgICAgICAgICAgICAgaWNvbG9yXG4gICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZmlsZS11cGxvYWRcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cInt7IGJvb2tGbGFnQWNjZXB0IH19XCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCxxdWVzKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHVsICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICBxdWVzLlR5cGVfX2MgPT09ICdGaWxlJyAmJlxuICAgICAgICAgICAgICAgICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXG4gICAgICAgICAgICAgIFwiIGNsYXNzPVwiYXR0YWNoLXVsaXN0IGNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHNcIiBjbGFzcz1cImFsaWduLWxcIj5cbiAgICAgICAgICAgICAgICB7eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lXG4gICAgICAgICAgICAgICAgfX08c3BhbiBjbGFzcz1cImF0dGFjaC1saXN0XCIgKGNsaWNrKT1cImRlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5hdHRhY2htZW50SWQpXCI+WDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXl0LWJveFwiICpuZ0lmPVwicWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxuXG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHNcIiBjbGFzcz1cImZpbGUtdXBsb2FkaW5nLWJveFwiPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAyeC5wbmdcIiBjbGFzcz1cImljb24tZWRpdDFcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXBsb2FkaW5nLWZpbGUtbmFtZSBteXQtZm9udDEgZm9udC13ZWlnaHQ6IG5vcm1hbDtcIj4ge3sgYXR0YWNobWVudC5hdHRhY2htZW50TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kZWxldGUlNDAyeC5wbmdcIiBjbGFzcz1cImRlbGV0ZUljb25cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5hdHRhY2htZW50SWQpXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLXVwbG9hZC1ib3hcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7eyB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA/ICdyZWQnIDogJycgfX1cIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXQxXCIgLz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImYtTmFtZVwiPnt7IHF1ZXM/LlF1ZXN0aW9uX19jIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpbGUtbGFiZWwgXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiAjYzUyODFjO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAge3snYXR0YWNoJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImF0dGFjaG1lbnRcIiB0eXBlPVwiZmlsZVwiIHBsYWNlaG9sZGVyPVwie3sndG9CdXlUaWNrZXQnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsIC5wbmcsIC5qcGcsIC5qcGVnLCAuaGVpYywgLmFwcGxpY2F0aW9uL3BkZlwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQscXVlcylcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0blwiPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFRhYmxlIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUYWJsZSdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgPGFwcC1jdXN0b20tdGFibGUgXG4gICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLklkKVwiPlxuICAgICAgICAgICAgPC9hcHAtY3VzdG9tLXRhYmxlPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBEcm9wZG93biAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRHJvcGRvd24nXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgIDwhLS0gZm9yIGNvbW1vbiBkcm9wZG93biAtLT5cbiAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgICA8YXBwLWN1c3RvbS1kcm9wZG93biBbZnJvbVNoZW5nZWxdPVwicWJJdGVtLmlzU2hlbmdlbF9fY1wiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInF1ZXMuUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzXCJcbiAgICAgICAgICAgICAgICAgICAgW2FwaU1ldGFdPVwicXVlcy5TdWJfVGV4dF9fY1wiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJxdWVzLk5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJxdWVzLmlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCItLS17eydzZWxlY3QnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fS0tLVwiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VdPVwicXVlcz8uRXJyb3JfTWVzc2FnZV9fY1wiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJxdWVzPy5lcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5JZClcIj5cbiAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1kcm9wZG93bj5cbiAgICAgICAgICAgIDxhcHAtZHJvcGRvd24td2l0aC1mbGFnICpuZ0lmPVwicXVlcy5pc0RlcGVuZGVudFBpY2tsaXN0ICYmICFxdWVzLmRyb3BEb3duT25seVwiICBbY2VydGlmaWVkXT1cInF1ZXMuY2VydGlmaWVkRmxhZ1wiICBbSm9iUGVyZm9ybWVyQ2VydGlmaWNhdGVzXT1cInF1ZXMuY2VydGlmaWNhdGVMaXN0XCIgKGZsYWdEcm9wRG93bkNoYW5nZSk9XCJkZXBlbmRlbnRDaGFuZ2UoJGV2ZW50KVwiPjwvYXBwLWRyb3Bkb3duLXdpdGgtZmxhZz5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0/LmlucHV0Py5sZW5ndGggPiAwXCI+PC9pPlxuICAgICAgICAgIDwvZGl2PiAgICAgICAgICBcbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLUxpc3Qgc3RhcnQtLT5cbiAgPGRpdiAqbmdJZj1cImxpc3RGbGFnXCI+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uZXJyb3JcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgIGNvbG9yOiByZWQ7XCI+e3txdWVzdGlvbkl0ZW0/LmVycm9yPy5lcnJvck1zZ319PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJteXQtYWxpZ24zXCIgW2NsYXNzXT1cIidjb2wtbWQtJyArIHF1ZXMuU2l6ZV9fYyArICcgcGFkZGluZ25vbmUnXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcXVlcyBvZiBnZXRMb2NhbFN1YlF1ZXN0aW9ucyhxdWVzdGlvbkl0ZW0uSWQpO2xldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXMtZmxleCBteXQtZm9udDMgbXl0LWZvbnQ3XCI+e3sgcXVlcz8uUXVlc3Rpb25fX2MgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1RleHQnXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgJ2Rpcy1mbGV4IGR0LWxpbmUgZGF0ZS1saW5lIGJvb2tUZXh0IGJveG91dGxpbmUgbXl0LWZvbnQxJzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICB0ZXh0Qm94OiAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1xuICAgICAgICAgICAgfVwiIGlkPVwidGV4dFwiIFtpZF09XCJxdWVzLnVuaXF1ZVN1YlFJZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyTG9jYWxTdWJRdWVzRXJyb3IocXVlcylcIlxuICAgICAgICAgICAgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgcXVlcy5lcnJvciA/ICdyZWQnIDogJycgfX1cIiBwbGFjZWhvbGRlcj1cInt7IHF1ZXMuUXVlc3Rpb25fX2MgfX1cIlxuICAgICAgICAgICAgb25pbnB1dD1cInRoaXMudmFsdWU9dGhpcy52YWx1ZS5yZXBsYWNlKC9bXmEtekEtWjAtOVxccy46Oyw/XS9nLCcnKTtcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlwiICpuZ0lmPVwiYWRkRmxhZ1wiPlxuICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiQWRkKGdldExvY2FsU3ViUXVlc3Rpb25zKHF1ZXN0aW9uSXRlbS5JZCkpXCIgY2xhc3M9XCJidG5cIj48aSBjbGFzcz1cImZhIGZhLXBsdXNcIiA+PC9pPnt7J2FkZCcgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19PC9idXR0b24+XG4gICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPCEtLUxpc3QgRW5kLS0+XG5cbiAgPCEtLSBBY3Rpb25zIC0tPlxuICA8ZGl2ICpuZ0lmPVwiaW5kaXZpZHVhbEJvb2tCdXR0b25cIiBjbGFzcz1cImZsZXhlclwiPlxuICAgIDwhLS0gQmFja3dhcmQgLyBCYWNrIC0tPlxuICAgIDwhLS0gSEEgMDJGRUIyNCBIaWRpbmcgdGhlIGJ1dHRvbiB3aGVuIHRoZXJlIGlzIG5vIHZhbHVlIGZyb20gdGhlIGJhY2tlbmQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImJhY2tidXR0b25cIiBbbmdDbGFzc109XCJ7ICdjb2wtbWQtNic6ICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIlxuICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwicXVlc3Rpb25TdGFjay5sZW5ndGggPiAwID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIiAqbmdJZj1cInFiSXRlbS5CYWNrX19jXCI+XG4gICAgICA8ZGl2IFtuZ0NsYXNzXT1cInt9XCI+XG4gICAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2xlZnQtYnQnOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jLFxuICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnkgYnRuLWxnIGJ0bi1ibG9jayBidG4tYmFjay1jb2xvcic6XG4gICAgICAgICAgICAgICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXG4gICAgICAgICAgfVwiIChjbGljayk9XCJoYW5kbGVCYWNrQ2xpY2soKVwiPlxuICAgICAgICAgIHt7IHFiSXRlbT8uQmFja19fYyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBGb3J3YXJkIC8gTmV4dCAtLT5cbiAgICA8IS0tIEhBIDAyRkVCMjQgSGlkaW5nIHRoZSBidXR0b24gd2hlbiB0aGVyZSBpcyBubyB2YWx1ZSBmcm9tIHRoZSBiYWNrZW5kIC0tPlxuICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnY29sLW1kLTYnOiAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyB9XCIgKm5nSWY9XCJxYkl0ZW0uTmV4dF9fY1wiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGJ1dHRvbiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAncnVzdHknOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jLFxuICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnkgYnRuLWxnIGJ0bi1ibG9jayBidG4tYmFjay1jb2xvcic6XG4gICAgICAgICAgICAgICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXG4gICAgICAgICAgfVwiIChjbGljayk9XCJoYW5kbGVOZXh0Q2xpY2soKVwiPlxuICAgICAgICAgIHt7IHFiSXRlbS5OZXh0X19jIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gU3VtbWFyeSAtLT5cbjxkaXYgKm5nSWY9XCJzdW1tYXJ5ICYmIHN1bW1hcnkubGVuZ3RoID4gMFwiIGhlaWdodD1cIjEwMCUgIWltcG9ydGFudFwiIGNsYXNzPVwiY29sLW1kLTEyXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnY29sLW1kLTEyJzohcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1xuICAgICAgICAgICAgICAgfVwiPlxuICAgIDxoMSBjbGFzcz1cImhlYWRlcjEgc3VtbWFyeXBhZGRcIiA+e3sgcWJJdGVtLlN1YlRpdGxlX19jIH19PC9oMT4gICAgICAgICBcbiAgPGRpdiBpZD1cInByb2dyZXNzMlwiICpuZ0lmPVwiIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgJiYgdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnIFwiPlxuICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2Z1bGwtc3VtbWFyeSc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHFhIG9mIHN1bW1hcnlcIj5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IG5vbjogIHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBzdW1tYXJ5OiAgIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXFiSXRlbS5FZGl0X19jXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncXVlc3Rpb24nOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgIT0gJ0NvbXBsZXRlZCcgfVwiPlxuICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJ7IGFzdW06IHRoaXMuYWJJdGVtLlN0YXR1c19fYyA9PT0gJ0NvbXBsZXRlZCcgfVwiIChjbGljayk9XCJoYW5kbGVFZGl0Q2xpY2socWEucXVlc0lkKVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj57eyBxYS5xdWVzVmFsdWUgfX08L2E+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uRWRpdF9fY1wiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uJzogdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdxdWVzdGlvbic6IHRoaXMuYWJJdGVtLlN0YXR1c19fYyA9PT0gJ0NvbXBsZXRlZCcgfVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj5cbiAgICAgICAgICAgICAgICB7eyBxYS5xdWVzVmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbnN3ZXJcIiA+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgPT09ICdGaWxlJ1wiPlxuICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDEucG5nXCIgY2xhc3M9XCJpY29uLWVkaXQtc3VtbWFyeVwiIC8+XG4gICAgICAgICAgICAgICAgICB7eyBxYS5hbnNWYWx1ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gSEEgMDJGRUIyNCBEaXNwbGF5aW5nIHRoZSBpbiBzdW1tYXJ5IGZvciBib29rIHR5cGUgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgPT0gJ0Jvb2snXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB2YWwgb2YgcWEubXlWYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+e3sgdmFsLlF1ZXN0aW9uX1RleHRfX2MgfX06IDxzcGFuPnt7IHZhbC5pbnB1dCB9fTwvc3Bhbj48L3A+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIEhBIDAyRkVCMjQgRGlzcGxheWluZyB0aGUgdmFsdWUgZm9yIGRpcmVjdCBxdWVzdGlvbiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWEucVR5cCAhPSAnRmlsZScgJiYgcWEucVR5cCAhPSAnQm9vaydcIj57eyBxYS5RdWVzdGlvbl9UZXh0X19jIH19OiA8c3Bhbj48L3NwYW4+e3sgcWEuYW5zVmFsdWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLkVkaXRfX2MgJiYgdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjZGVkZGRkO1wiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImVkaXRcIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgPT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBzdHlsZT1cIndpZHRoOjUwJSFpbXBvcnRhbnQ7XCIgY2xhc3M9XCJpY29uLWVkaXRpb3NcIi8+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zICE9PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXRcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cInRoaXMuYWJJdGVtLlN0YXR1c19fYyA9PT0gJ0NvbXBsZXRlZCdcIiBjbGFzcz1cImNvbC1sZy0xMlwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPlxuICAgIDxoMj57e3RoaXMucWJJdGVtLlN1bW1hcnlfVGV4dF9fY319PC9oMj5cbiAgICA8cD57e3RoaXMucWJJdGVtLlN1bW1hcnlfU3ViX1RleHRfX2N9fTwvcD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBpZD1cInByb2dyZXNzMlwiICpuZ0lmPVwicWJJdGVtLlByb2dyZXNzX0Jhcl9fYyBcIj5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnYmdDb2xvciBzdW1tYXJ5LXRvcCcgOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIiA+XG4gICAgICA8ZGl2IGlkPVwicHJvZ3Jlc3Mtc3VtbWFyeVwiICpuZ0lmPVwicWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxuICAgICAgICA8Y2lyY2xlLXByb2dyZXNzIGNsYXNzPVwidGl0bGViYXJcIiBbcGVyY2VudF09XCJ0aGlzLnBlcmNlbnRcIiBbcmFkaXVzXT1cIjQwXCIgW3NwYWNlXT1cIi00XCIgW291dGVyU3Ryb2tlV2lkdGhdPVwiNFwiXG4gICAgICAgIFtpbm5lclN0cm9rZVdpZHRoXT1cIjRcIiBbb3V0ZXJTdHJva2VDb2xvcl09XCInI2UwYjFiMCdcIiBbaW5uZXJTdHJva2VDb2xvcl09XCInI2U3ZThlYSdcIiBbYW5pbWF0aW9uXT1cInRydWVcIiBbYmFja2dyb3VuZFBhZGRpbmddPSBcIjBcIlxuICAgICAgICBbYmFja2dyb3VuZENvbG9yXT0gXCInI2RkMmUxMydcIiBbYmFja2dyb3VuZEdyYWRpZW50U3RvcENvbG9yXT1cIicjZjliZmJkJ1wiIFt0aXRsZUNvbG9yXT1cIicjZjNlZGVkJ1wiIFxuICAgICAgICBjbGFzcz1cIm5nLXN0YXItaW5zZXJ0ZWRcIiBbdGl0bGVdPVwidGhpcy5wZXJjZW50KyclJ1wiIFtzaG93U3VidGl0bGVdPVwiZmFsc2VcIiBbc2hvd0JhY2tncm91bmRdPVwidHJ1ZVwiIFthbmltYXRpb25EdXJhdGlvbl09XCIzMDBcIlxuICAgICAgICBbc3RhcnRGcm9tWmVyb109XCJmYWxzZVwiIFtyZXNwb25zaXZlXT1cImZhbHNlXCIgPlxuICAgICAgPC9jaXJjbGUtcHJvZ3Jlc3M+XG4gICAgICBcbiAgICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uU3VtbWFyeV9UZXh0X19jICYmIHFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIiBcbiAgICAgIFtuZ0NsYXNzXT1cInsgc3VtbWFyeVRpdGxlOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cbiAgICAgICAgPGgzIGNsYXNzPVwic3ViVGl0bGVcIiA+e3sgcWJJdGVtLlN1bW1hcnlfVGV4dF9fYyB9fTwvaDM+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJhYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnXCIgY2xhc3M9XCJzdWJUaXRsZTFcIiA+e3sgcWJJdGVtLlN1bW1hcnlfU3ViX1RleHRfX2N9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCI+XG4gICAgICA8aDMgY2xhc3M9XCJzdW1tYXJ5LWhcIj5cbiAgICAgICAge3sgcWJJdGVtLlN1bW1hcnlfVGV4dF9fYyB9fVxuICAgICAgPC9oMz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgW25nQ2xhc3NdPVwieyAnZnVsbC1zdW1tYXJ5JzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyB9XCI+XG4gICAgPGRpdiBjbGFzcz1cInN1bW1hcnktZ3JvdXBUZXh0IG15dC1mb250MlwiPlxuICAgICAgPCEtLSA8cD5JbmZvcm1lIGRlIGRhw7FvPC9wPiAtLT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxYSBvZiBzdW1tYXJ5XCIgPlxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgbm9uOiAgcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyB9XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnlcIj5cbiAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cIiFxYkl0ZW0uRWRpdF9fY1wiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uIHN1bS1xdWVzIG15dC1mb250MyBteXQtZm9udDgnOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgIT0gJ0NvbXBsZXRlZCcgfVwiPlxuICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJ7IGFzdW06IHRoaXMuYWJJdGVtLlN0YXR1c19fYyA9PT0gJ0NvbXBsZXRlZCcgfVwiIChjbGljayk9XCJoYW5kbGVFZGl0Q2xpY2socWEucXVlc0lkKVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj57eyBxYS5xdWVzVmFsdWUgfX08L2E+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uRWRpdF9fY1wiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3N1bS1xdWVzIHF1ZXN0aW9uIG15dC1mb250MyBteXQtZm9udDgnOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgIT0gJ0NvbXBsZXRlZCcgfVwiPlxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ3N1bS1xdWVzMSBxdWVzdGlvbjEgc3VtbWFyeS1jb21wbGV0ZWQgbXl0LWZvbnQzIG15dC1mb250OCc6IHRoaXMuYWJJdGVtLlN0YXR1c19fYyA9PT0gJ0NvbXBsZXRlZCcgfVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj5cbiAgICAgICAgICAgICAgICB7eyBxYS5xdWVzVmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLkVkaXRfX2MgJiYgdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjZGVkZGRkO1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZWRpdFwiIChjbGljayk9XCJoYW5kbGVFZGl0Q2xpY2socWEucXVlc0lkKVwiPlxuICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zID09PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgc3R5bGU9XCJ3aWR0aDo1MCUhaW1wb3J0YW50O1wiIGNsYXNzPVwiaWNvbi1lZGl0aW9zXCIvPlxuICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zICE9PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXRcIiAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbnN3ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgPT09ICdGaWxlJ1wiPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAxLnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0LXN1bW1hcnlcIiAvPlxuICAgICAgICAgICAgICAgIHt7IHFhLmFuc1ZhbHVlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWEucVR5cCAhPSAnRmlsZSdcIj5cbiAgICAgICAgICAgICAgICB7eyBxYS5hbnNWYWx1ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4ZXIxXCIgKm5nSWY9XCJhYkl0ZW1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nSWY9XCJhYkl0ZW0uU3RhdHVzX19jID09ICdDb21wbGV0ZWQnICYmIHFiSXRlbS5DYW5jZWxfX2NcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgPGJ1dHRvbiBbbmdDbGFzc109XCJ7J2J0bi10ZXh0JzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGJ0bi1iYWNrLWNvbG9yJzogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2N9XCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2FuY2VsQ2xpY2soKVwiPlxuICAgICAgICAgIHt7IHFiSXRlbS5DYW5jZWxfX2MgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+IC0tPlxuXG4gIDwhLS0gR3JvdXAgQWN0aW9ucyAtLT5cbiAgPGRpdiBjbGFzcz1cImFsaWduLWVkaXQtc3VibWl0XCIgKm5nSWY9XCJhYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnXCI+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cInFiSXRlbS5TdWJtaXRfX2NcIj5cbiAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwieyAnYnRuLXRleHQyJzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGJ0bi1iYWNrLWNvbG9yJzogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiIFxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlU3VibWl0Q2xpY2soKVwiPlxuICAgICAgICB7eyBxYkl0ZW0uU3VibWl0X19jIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIEhBIDAyRkVCMjQgSGlkaW5nIHRoZSBidXR0b24gd2hlbiB0aGVyZSBpcyBubyB2YWx1ZSBmcm9tIHRoZSBiYWNrZW5kIC0tPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJxYkl0ZW0uRWRpdF9fY1wiPlxuICAgICAgPGJ1dHRvbiBbbmdDbGFzc109XCJ7J2dyZXknOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOiAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY31cIiBcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUJhY2tDbGlja05ldygpXCI+XG4gICAgICAgIHt7IHFiSXRlbS5FZGl0X19jIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj4gLS0+XG4gIDwvZGl2PlxuXG48L2Rpdj4iXX0=