@rangertechnologies/ngnxt 2.0.28 → 2.0.29

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.
@@ -2118,11 +2118,11 @@ export class QuestionnaireComponent {
2118
2118
  }
2119
2119
  }
2120
2120
  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.ActivatedRoute }, { token: i5.DomSanitizer }, { token: i6.NgxSpinnerService }, { token: i7.UntypedFormBuilder }, { token: i8.DeviceDetectorService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2121
- 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" }, providers: [ChangeService], usesOnChanges: true, ngImport: i0, template: "<!-- Spinner -->\r\n<ngx-spinner [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\r\n\r\n<!-- Back Processing -->\r\n<div *ngIf=\"backicon == false\" >\r\n <div class=\"backicon\" [style.visibility]=\"questionStack.length >0 ? 'visible' : 'hidden'\">\r\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.Status__c == 'Completed' ? 'summary-volver':'app-back1'\">\r\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.Back__c }}\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<!-- Question Hanlding -->\r\n<div *ngIf=\"questionItem\" [class]=\"qbItem.isShengel__c ? 'questiondiv1' : 'questiondiv1 padd-bottom'\">\r\n <!-- Progress Bar & Title -->\r\n <div *ngIf=\"questionItem.Title__c && qbItem.Progress_Bar__c\">\r\n <h1 class=\"header1\">{{ questionItem?.Title__c }}</h1>\r\n <div class=\"header2\">{{ questionItem?.SubTitle__c }}</div>\r\n </div>\r\n\r\n <!-- Progress & Grouping -->\r\n <div [ngClass]=\"{ questiondiv2: !qbItem?.Progress_Bar__c }\">\r\n <!-- Pie Chart Progress -->\r\n <div [ngClass]=\"{ bgColor: qbItem?.Progress_Bar__c }\">\r\n <div id=\"progress\" *ngIf=\"qbItem?.Progress_Bar__c\">\r\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\r\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\r\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \r\n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\r\n [startFromZero]=\"false\" [responsive]=\"false\" >\r\n </circle-progress>\r\n </div>\r\n </div>\r\n\r\n <!-- Show the Group/Module related to the Progress -->\r\n <div *ngIf=\"questionItem.Group__c && qbItem.Progress_Bar__c\"\r\n [ngClass]=\"{ questionalign: !qbItem?.Progress_Bar__c }\">\r\n <div class=\"largeTitle\">\r\n <h3 class=\"myt-font6 myt-text3\">\r\n {{ questionItem?.Group__c }}\r\n </h3>\r\n <div *ngIf=\"questionItem.Sub_Text__c != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.Sub_Text__c}}</div>\r\n <div *ngIf=\"questionItem.Sub_Text__c === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.Sub_Text__c}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Question Handling -->\r\n <div class=\"questiondiv2\">\r\n <!-- Title -->\r\n <div *ngIf=\"questionItem.Is_Title__c\">\r\n <div *ngIf=\"questionItem.Type__c != 'Book' && questionItem.Question_No__c!='6' && questionItem.Question_No__c!='9'\"> \r\n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\r\n {{questionItem?.Question_Text__c}}\r\n </h3>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!questionItem.Is_Title__c\" [class]=\"qbItem.isShengel__c ? 'header-style additional' : 'question-f-size additional'\">\r\n <div [innerHTML]=\"getText(questionItem?.Question_Text__c)\" >\r\n {{ questionItem?.Question_Text__c }}\r\n </div>\r\n </div>\r\n\r\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\r\n <div *ngIf=\"questionItem.Type__c == 'Book'\">\r\n <div *ngIf=\"questionItem.Question_No__c=='6'\">\r\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\r\n {{ questionItem?.Question_Text__c }}\r\n </h3>\r\n </div>\r\n </div>\r\n \r\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\r\n <div *ngIf=\"questionItem.Type__c == 'File' \">\r\n <div *ngIf=\"questionItem.Question_No__c=='9'\">\r\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\r\n {{questionItem?.Question_Text__c}}\r\n </h3>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Additional Info -->\r\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\r\n <div *ngIf=\"questionItem.Additional_Rich__c && qbItem.Progress_Bar__c\" >\r\n <div\r\n class=\"additional \" [innerHTML]=\"innerhtml\">\r\n </div>\r\n </div>\r\n <div *ngIf=\"questionItem.Additional_Rich__c && !qbItem.Progress_Bar__c\">\r\n <div class=\"info-alert ques-alert1\">\r\n <i class=\"fa fa-info fa-3x iposition icolor\" aria-hidden=\"true\"></i>\r\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown-->\r\n <div *ngIf=\"dropdownFlag\" >\r\n <div class=\"dis-flex\">\r\n <select \r\n [ngClass]=\"{\r\n 'dt-line myt-align3 myt-align2 dpDown dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.Progress_Bar__c,\r\n 'custom-select': !qbItem?.Progress_Bar__c\r\n }\" class=\"mr-sm-2 dd-height dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\r\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\" style=\"margin-left: 21.5rem !important;\">\r\n <option *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"option\" value=\"{{ opt.Value__c }}\">\r\n {{ opt.Value__c }}\r\n </option>\r\n <option value=\".\" disabled hidden>Bitte treffen Sie eine Auswahl</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Radio -->\r\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\r\n <div *ngIf=\"this.questionItem.error\" class=\"cond-div2\">\r\n {{ questionItem?.Error_Message__c }}\r\n </div>\r\n <div class=\"dis-flex\">\r\n <div *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"radio radioOption\" >\r\n <label class=\"radiocontainer container myt-font4\">{{ opt.Value__c }}\r\n <input type=\"radio\" [id]=\"opt.Id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" value=\"{{ opt.Value__c }}\"\r\n (change)=\"optionChange(opt.Value__c)\" />\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Checkbox -->\r\n <div *ngIf=\"checkboxFlag\" class=\"\">\r\n <div *ngIf=\"this.questionItem.error\" class=\"cond-div2\">\r\n {{ questionItem?.Error_Message__c }}\r\n </div>\r\n <div class=\"dis-flex\">\r\n <div *ngFor=\"let item of optionValues\" class=\"radio col-md-6 optiondiv\">\r\n <label class=\" container1 \" >{{ item.Value__c }}\r\n <input type=\"checkbox\" [id]=\"item.Id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\r\n <span class='checkmark1'></span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Text -->\r\n <div *ngIf=\"textFlag\" class=\"col-md-12 myt-book1\">\r\n <div class=\"col-md-12\" class=\"dis-flex myt-align1\" [class]=\"'col-md-' + questionItem?.Size__c + ' paddingnone'\">\r\n <input type=\"text\" [(ngModel)]=\"inpValue\" [ngClass]=\"{\r\n 'boxoutline myt-font1 myt-book1': qbItem?.Progress_Bar__c,\r\n textBox1: !qbItem?.Progress_Bar__c\r\n }\" id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem?.error\r\n ? 'red'\r\n : inpValue?.length > 0\r\n ? '#87be1c'\r\n : ''\r\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\r\n <i class=\"fa fa-check check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Text Area -->\r\n <div *ngIf=\"taFlag\" class=\"col-md-12\">\r\n <div class=\"dis-flex\">\r\n <textarea class=\"ta-input\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem?.error\r\n ? 'red'\r\n : inpValue?.length > 0 && taFocusOut\r\n ? '#87be1c'\r\n : ''\r\n }}\" (focusout)=\"taFocusOut = true\"\r\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\r\n <i class=\"fa fa-check check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- CC Number Format -->\r\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\r\n <div class=\"dis-flex\">\r\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\"\r\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\r\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\r\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\r\n this.questionItem.error\r\n ? 'red'\r\n : inpValue?.length > 0\r\n ? '#87be1c'\r\n : ''\r\n }}\" />\r\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px;\"\r\n *ngIf=\"inpValue?.length > 0\"></i>\r\n </div>\r\n </div>\r\n <!-- END-->\r\n\r\n <!-- AlphaNumeric -->\r\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\r\n <div style=\"position:relative;\">\r\n <input type=text placeholder=\"0 of 0\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\r\n </div>\r\n </div>\r\n\r\n <!-- Email -->\r\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\r\n <div class=\"dis-flex\">\r\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\r\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem.error\r\n ? 'red'\r\n : inpValue?.length > 0\r\n ? '#87be1c'\r\n : ''\r\n }}\" />\r\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px\"\r\n *ngIf=\"inpValue?.length > 0\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- DateTime -->\r\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero myt-time1\" >\r\n <!-- Error Handling -->\r\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\r\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\r\n\r\n <!-- Date -->\r\n <div *ngIf=\"dateFlag\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label>\r\n <div class=\"dis-flex\">\r\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event)\"\r\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"Seleccione fecha\" (focus)=\"clearError()\">\r\n </my-date-picker>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Time -->\r\n <div *ngIf=\"timeFlag\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label>\r\n <div class=\"dis-flex\">\r\n <div [ngClass]=\"{'dt-line date-line dt-time': qbItem?.Progress_Bar__c,\r\n dateandTime: !qbItem?.Progress_Bar__c}\" \r\n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\r\n (focus)=\"(clearSQError) \">\r\n <select name=\"hours\" class=\"datetime showHour myt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">HH</option>\r\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\r\n {{ hour }}\r\n </option>\r\n </select>\r\n <span class=\"colon\"> : </span>\r\n <select name=\"minutes\" class=\"datetime showminute myt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">MM</option>\r\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\r\n {{ minute }}\r\n </option>\r\n </select>\r\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem?.X24_Hours__c == false\">\r\n <span class=\"colon\"> : </span>\r\n <select name=\"AM/PM\" class=\"myt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\r\n <option value=\"AM\">AM</option>\r\n <option value=\"PM\">PM</option>\r\n </select>\r\n <!-- <div [ngClass]=\"{'': qbItem.Progress_Bar__c, 'dateandTime': !qbItem.Progress_Bar__c}\"></div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <i class=\"fa check-icon3\" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Attachment / File -->\r\n <div *ngIf=\"fileFlag\">\r\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\r\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\r\n <label class=\"picture-upload\" for=\"file-upload\">\r\n <span class=\"picture-upload-child\">\r\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span class=\"fa fa-plus fa-2x picture-upload-child pic-upload icolor\">\r\n <i class=\"\" aria-hidden=\"true\"></i>\r\n </span>\r\n </label>\r\n </div>\r\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event)\" />\r\n </div>\r\n <ul *ngIf=\"\r\n attachments?.length > 0 &&\r\n questionItem?.Type__c === 'File' &&\r\n !qbItem?.Progress_Bar__c\r\n \" class=\"attach-ulist col-md-12\">\r\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\r\n {{ attachment.attachmentName\r\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\r\n </li>\r\n </ul>\r\n\r\n <!-- Attachment Progress -->\r\n <div *ngIf=\"qbItem.Progress_Bar__c\">\r\n <div *ngFor=\"let attachment of attachments\" class=\"file-uploading-box\">\r\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\r\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\r\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\r\n </div>\r\n <div class=\"file-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\r\n \r\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\r\n <span class=\"f-Name\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\"> {{ questionItem?.Question_Text__c}}</span>\r\n <label class=\"file-label \">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\r\n <input name=\"attachment\" type=\"file\" placeholder=\"Ticket kaufen\" multiple\r\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\r\n class=\"file-upload-btn\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Book -->\r\n <div *ngIf=\"bookFlag\">\r\n <div [class]=\"qbItem.isShengel__c ? 'form-group content-box' : 'form-group'\">\r\n <div class=\"form-row\">\r\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\r\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\r\n <div [class]=\"qbItem.isShengel__c ? '' : 'myt-align3'\" [class]=\"qbItem.isShengel__c ? 'col-lg-' + ques.Size__c + ' paddingnone' : 'col-md-' + ques.Size__c + ' paddingnone'\"\r\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.Id\">\r\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\">\r\n <span [class]=\"qbItem.isShengel__c ? 'dis-flex shengel-myt-font3 myt-font7' : 'dis-flex myt-font3 myt-font7' \">{{ ques?.Question__c }}</span>\r\n </div>\r\n <div class=\"col-md-12 paddingZero myt-dateTimeNew\" *ngIf=\"ques.Type__c === 'Time' || ques.Type__c === 'Date'\">\r\n <div *ngIf=\"ques.Type__c === 'Date'\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label>\r\n <div class=\"dis-flex dateandtime\">\r\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event)\"\r\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"Seleccione fecha\" (focus)=\"clearError()\" >\r\n </my-date-picker>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'Time'\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label>\r\n <div class=\"dis-flex dateandtime\">\r\n <div [ngClass]=\"{'dt-line date-line dt-time': qbItem?.Progress_Bar__c,\r\n dateandTime: !qbItem?.Progress_Bar__c}\" \r\n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\r\n (focus)=\"(clearSQError) \">\r\n <select name=\"hours\" class=\"datetime showHour myt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">HH</option>\r\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\r\n {{ hour }}\r\n </option>\r\n </select>\r\n <span class=\"colon\"> : </span>\r\n <select name=\"minutes\" class=\"datetime showminute myt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">MM</option>\r\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\r\n {{ minute }}\r\n </option>\r\n </select>\r\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem.X24_Hours__c == false\">\r\n <span class=\"colon\"> : </span>\r\n <select name=\"AM/PM\" class=\"myt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\r\n <option value=\"AM\">AM</option>\r\n <option value=\"PM\">PM</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\r\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"displayDate($event,ques)\"></app-custom-date-picker>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'Text'\">\r\n <app-custom-input\r\n [fromShengel]=\"qbItem.isShengel__c\"\r\n [value]=\"ques.input\"\r\n [ngClassValue]=\"{\r\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\r\n textBox: !qbItem.Progress_Bar__c\r\n }\"\r\n [question]=\"ques\" \r\n [idValue]=\"ques.Tracking_ID__c\"\r\n [focusEvent]=\"clearSQError(ques.Id)\"\r\n [error]=\"ques.error\"\r\n [placeholder]=\"ques.Question__c\"\r\n (inputValue)=\"selectedInput($event,ques)\">\r\n </app-custom-input>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'Location'\">\r\n <!-- for pick location -->\r\n <app-pick-location [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\r\n </div>\r\n <!-- for text area -->\r\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\r\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\r\n </div>\r\n <!-- for to data table we use 'data' type question -->\r\n <div *ngIf=\"ques.Type__c === 'Data'\">\r\n <app-custom-table [tableHeader]=\"ques.tableHeader\" [tableData]=\"getTableData(ques)\" [tableIndex]=\"i\" (tableDataChange)=\"getData($event)\"></app-custom-table>\r\n </div>\r\n\r\n <div *ngIf=\"ques.Type__c === 'Email'\">\r\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\r\n </div>\r\n\r\n <div *ngIf=\"ques.Type__c === 'File'\">\r\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\r\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\r\n <span class=\"picture-upload-child\">\r\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span class=\"\r\n fa fa-plus fa-2x\r\n picture-upload-child\r\n pic-upload\r\n icolor\r\n \">\r\n <i class=\"\" aria-hidden=\"true\"></i>\r\n </span>\r\n </label>\r\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\r\n </div>\r\n\r\n <ul *ngIf=\"\r\n attachments?.length > 0 &&\r\n ques.Type__c === 'File' &&\r\n !qbItem.Progress_Bar__c\r\n \" class=\"attach-ulist col-md-12\">\r\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\r\n {{ attachment.attachmentName\r\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\r\n </li>\r\n </ul>\r\n <div class=\"myt-box\" *ngIf=\"qbItem.Progress_Bar__c\">\r\n\r\n <div *ngFor=\"let attachment of attachments\" class=\"file-uploading-box\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />\r\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\r\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\r\n </div>\r\n <div class=\"file-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />\r\n <span class=\"f-Name\">{{ ques?.Question__c }}</span>\r\n <label class=\"file-label \">\r\n <span style=\"color: #c5281c;text-decoration:underline\">\r\n Adjuntar\r\n </span>\r\n <input name=\"attachment\" type=\"file\" placeholder=\"Ticket kaufen\" multiple\r\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\r\n class=\"file-upload-btn\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown -->\r\n <div *ngIf=\"ques.Type__c === 'Dropdown'\" class=\"\">\r\n <!-- for common dropdown -->\r\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel__c\"\r\n [options]=\"ques.Question_Options__r.records\"\r\n [apiMeta]=\"ques.Sub_Text__c\"\r\n [id]=\"ques.Name\"\r\n [selectedValue]=\"ques.input\"\r\n [placeholder]=\"'---Select---'\"\r\n [errorMessage]=\"ques.Error_Message__c\"\r\n [error]=\"ques.error\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\r\n </app-custom-dropdown>\r\n <app-dropdown-with-flag *ngIf=\"ques.isDependentPicklist && !ques.dropDownOnly\" [certified]=\"ques.certifiedFlag\" [JobPerformerCertificates]=\"ques.certificateList\" (flagDropDownChange)=\"dependentChange($event)\"></app-dropdown-with-flag>\r\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\r\n </div> \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--List start-->\r\n <div *ngIf=\"listFlag\">\r\n <div class=\"form-group\">\r\n <div class=\"form-row\">\r\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\r\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\r\n <div class=\"myt-align3\" [class]=\"'col-md-' + ques.Size__c + ' paddingnone'\"\r\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.Id);let i = index\">\r\n <div>\r\n <span class=\"dis-flex myt-font3 myt-font7\">{{ ques?.Question__c }}</span>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'Text'\">\r\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\r\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\r\n textBox: !qbItem.Progress_Bar__c\r\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\"\r\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\r\n </div>\r\n </div>\r\n <div class=\"\" *ngIf=\"addFlag\">\r\n <button (click)=\"Add(getLocalSubQuestions(questionItem.Id))\" class=\"btn\"><i class=\"fa fa-plus\" ></i>Add</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!--List End-->\r\n\r\n <!-- Actions -->\r\n <div *ngIf=\"individualBookButton\" class=\"flexer\">\r\n <!-- Backward / Back -->\r\n <div class=\"backbutton\" [ngClass]=\"{ 'col-md-6': !qbItem.Progress_Bar__c }\"\r\n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\">\r\n <div [ngClass]=\"{}\">\r\n <button [ngClass]=\"{\r\n 'left-bt': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color':\r\n !qbItem.Progress_Bar__c\r\n }\" (click)=\"handleBackClick()\">\r\n {{ qbItem?.Back__c }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Forward / Next -->\r\n <div [ngClass]=\"{ 'col-md-6': !qbItem.Progress_Bar__c }\">\r\n <div>\r\n <button [ngClass]=\"{\r\n 'rusty': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color':\r\n !qbItem.Progress_Bar__c\r\n }\" (click)=\"handleNextClick()\">\r\n {{ qbItem.Next__c }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Summary -->\r\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\r\n 'col-md-12':!qbItem.Progress_Bar__c\r\n }\">\r\n <h1 class=\"header1 summarypadd\" >{{ qbItem.SubTitle__c }}</h1> \r\n <div id=\"progress2\" *ngIf=\"!qbItem.Progress_Bar__c && this.abItem.Status__c != 'Completed' \">\r\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\r\n <div *ngFor=\"let qa of summary\">\r\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\r\n <div [ngClass]=\"{ summary: !qbItem.Progress_Bar__c }\">\r\n <div *ngIf=\"!qbItem.Edit__c\"\r\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\r\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\r\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\r\n </div>\r\n <div *ngIf=\"qbItem.Edit__c\"\r\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\r\n <div [ngClass]=\"{ 'question': this.abItem.Status__c === 'Completed' }\"\r\n [innerHTML]=\"getText(qa.quesValue)\">\r\n {{ qa.quesValue }}\r\n </div>\r\n </div>\r\n <div class=\"answer\" >\r\n <div *ngIf=\"qa.qTyp === 'File'\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"icon-edit-summary\" />\r\n {{ qa.ansValue }}\r\n </div>\r\n <div *ngIf=\"qa.qTyp != 'File'\">{{ qa.ansValue }}</div>\r\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\r\n <button class=\"edit\" (click)=\"handleEditClick(qa.quesId)\">\r\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"icon-editios\"/>\r\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"icon-edit\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"this.abItem.Status__c === 'Completed'\" class=\"col-lg-12\">\r\n <div class=\"panel-group panel-group-joined\" id=\"ePTW-details\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h4 class=\"panel-title\">\r\n <a data-toggle=\"collapse\" data-parent=\"#ePTW-details\" href=\"#collapseOne\" class=\"collapsed\">\r\n PTW Details\r\n </a>\r\n </h4>\r\n </div>\r\n <div id=\"collapseOne\" class=\"panel-collapse collapse\">\r\n <div class=\"panel-body\">\r\n <div class=\"row\">\r\n <ng-container *ngFor=\"let item of summaryData; let i = index\">\r\n <ng-container *ngIf=\"i % 2 === 0\">\r\n <div class=\"col-lg-6 m-b-30\">\r\n <label>{{ getKey(item) }}</label>\r\n <p class=\"font-size\">{{ getValue(item) || 'N/A' }}</p>\r\n </div>\r\n <div class=\"col-lg-6\" *ngIf=\"summaryData[i + 1]\">\r\n <label>{{ getKey(summaryData[i + 1]) }}</label>\r\n <p class=\"font-size\">{{ getValue(summaryData[i + 1]) || 'N/A' }}</p>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div id=\"progress2\" *ngIf=\"qbItem.Progress_Bar__c \">\r\n <div [ngClass]=\"{'bgColor summary-top' : qbItem.Progress_Bar__c }\" >\r\n <div id=\"progress-summary\" *ngIf=\"qbItem.Progress_Bar__c\">\r\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\r\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\r\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \r\n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\r\n [startFromZero]=\"false\" [responsive]=\"false\" >\r\n </circle-progress>\r\n \r\n <div *ngIf=\"qbItem.Summary_Text__c && qbItem.Progress_Bar__c\" \r\n [ngClass]=\"{ summaryTitle: qbItem.Progress_Bar__c }\">\r\n <h3 class=\"subTitle\" >{{ qbItem.Summary_Text__c }}</h3>\r\n <div *ngIf=\"abItem.Status__c != 'Completed'\" class=\"subTitle1\" >{{ qbItem.Summary_Sub_Text__c}}</div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\r\n <h3 class=\"summary-h\">\r\n {{ qbItem.Summary_Text__c }}\r\n </h3>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\r\n <div class=\"summary-groupText myt-font2\">\r\n <!-- <p>Informe de da\u00F1o</p> -->\r\n </div>\r\n <div *ngFor=\"let qa of summary\" >\r\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\r\n <div [ngClass]=\"{ summary: this.abItem.Status__c != 'Completed' && !qbItem.Progress_Bar__c }\">\r\n <div *ngIf=\"!qbItem.Edit__c\"\r\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\r\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\r\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\r\n </div>\r\n <div *ngIf=\"qbItem.Edit__c\"\r\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\r\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.Status__c === 'Completed' }\"\r\n [innerHTML]=\"getText(qa.quesValue)\">\r\n {{ qa.quesValue }}\r\n </div>\r\n </div>\r\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\r\n <button class=\"edit\" (click)=\"handleEditClick(qa.quesId)\">\r\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"icon-editios\"/>\r\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"icon-edit\" />\r\n </button>\r\n </div>\r\n \r\n <div class=\"answer \" >\r\n <div *ngIf=\"qa.qTyp === 'File'\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"icon-edit-summary\" />\r\n {{ qa.ansValue }}\r\n </div>\r\n <div *ngIf=\"qa.qTyp != 'File'\">\r\n {{ qa.ansValue }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Answer Book -->\r\n <div class=\"flexer1\" *ngIf=\"abItem\">\r\n <div class=\"\" *ngIf=\"abItem.Status__c == 'Completed'\">\r\n <div class=\"col-md-12\">\r\n <button [ngClass]=\"{'btn-text': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\"\r\n (click)=\"handleCancelClick()\">\r\n {{ qbItem.Cancel__c }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Group Actions -->\r\n <div class=\"align-edit-submit\" *ngIf=\"abItem.Status__c != 'Completed'\">\r\n <div class=\"col-md-6\">\r\n <button [ngClass]=\"{ 'btn-text2': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c }\" \r\n (click)=\"handleSubmitClick()\">\r\n {{ qbItem.Submit__c }}\r\n </button>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <button [ngClass]=\"{'grey': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\" \r\n (click)=\"handleBackClickNew()\">\r\n {{ qbItem.Edit__c }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\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}.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%}.checkmark{left:47.5%;height:20px;margin-right:7px;width:20px;background-color:#fff0;border-radius:50%;border:1px solid grey}.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}.form-group.content-box{background:#ffffff;padding:40px;border:1px solid #e8e8e8;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.shengel-myt-font3{padding-bottom:5px;padding-top:5px;padding-right:15px;padding-left:2px!important;color:#9a9a9a!important;font-size:14px!important;font-weight:400!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}.container-radio input:checked~.checkmark{background-color:#fff0}.checkmark:after{content:\"\";display:none}.container-radio input:checked~.checkmark:after{display:block}.container-radio .checkmark:after{top:3px;left:3px;width:12px;margin:3px;height:12px;border-radius:50%;background:#C5281C}.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%}.checkmark{left:3.8rem}.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}.form-row{padding-left:8px!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}.container1 input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.checkmark1{position:absolute;top:1px;left:-35%;height:21px;width:21px;background-color:#eee}.container1:hover input~.checkmark1{background-color:#ccc}.container1 input:checked~.checkmark1{content:\"\";background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxMiIgdmlld0JveD0iMCAwIDE2IDEyIj4gIDxwYXRoIGZpbGw9IiM4N0JFMUMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEyLjI0Mjk1NjUsMTcuNTcyNzczOCBMMjAuOTg1NTM0Nyw5LjEzMjYxNTg1IEMyMS4xNjg1NDM3LDguOTU1OTM3NDEgMjEuNDYyMTgwNyw4Ljk1NTc3NDM2IDIxLjY0NTM5MzYsOS4xMzIyNDk0NCBMMjIuODU5MTUxMywxMC4zMDEzNzAxIEMyMy4wNDY5NDk2LDEwLjQ4MjI2MiAyMy4wNDY5NDk2LDEwLjc3OTA1NjMgMjIuODU5MTUxMywxMC45NTk5NDgyIEwxMi41NzMwNjk2LDIwLjg2Nzc1MDYgQzEyLjM5MDAwNDcsMjEuMDQ0MDgzMSAxMi4wOTY2NTU2LDIxLjA0NDA4MzEgMTEuOTEzNTkwNiwyMC44Njc3NTA2IEw3LjE0MDg0ODc3LDE2LjI3MDUzMDMgQzYuOTU0MTc0MjgsMTYuMDkwNzIwOSA2Ljk1Mjg5MDU1LDE1Ljc5NjA5NTggNy4xMzc5OTEzMywxNS42MTQ3MjgyIEw4LjMzMTE3Njc5LDE0LjQ0NTYwNzUgQzguNTEzODA2NDgsMTQuMjY2NjYxMiA4LjgwOTMzMDgzLDE0LjI2NTQyMjYgOC45OTM1MTMyMiwxNC40NDI4MzE1IEwxMi4yNDI5NTY1LDE3LjU3Mjc3MzggWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTcgLTkpIi8+PC9zdmc+);background-position:.17rem .3rem;background-repeat:no-repeat;background-color:#d2d4d6;width:21px;height:21px}.checkmark1:after{content:\"\";position:absolute;display:none}.container1 input:checked~.checkmark1:after{display:block}.container1 .checkmark1:after{left:9px;top:5px;width:5px;height:10px;border-width:0 3px 3px 0}.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}@media ((min-width: 1200px)){.form-row{display:flex;flex-wrap:wrap}}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.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: i7.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i7.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i7.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i10.MyDatePicker, selector: "my-date-picker", inputs: ["placeholder", "locale", "disabled", "options", "defaultMonth", "selDate", "selector"], outputs: ["dateChanged", "inputFieldChanged", "calendarViewChanged", "calendarToggle", "inputFocusBlur"], exportAs: ["mydatepicker"] }, { kind: "component", type: i6.NgxSpinnerComponent, selector: "ngx-spinner", inputs: ["disableAnimation", "bdColor", "zIndex", "color", "type", "size", "fullScreen", "name", "template", "showSpinner"] }, { kind: "component", type: i11.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: i12.PickLocationComponent, selector: "app-pick-location", inputs: ["address"], outputs: ["locationSelected"] }, { kind: "component", type: i13.CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: i14.CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error"], outputs: ["textareaValueChange"] }, { kind: "component", type: i15.CustomTableComponent, selector: "app-custom-table", inputs: ["tableHeader", "tableData", "tableIndex"], outputs: ["tableDataChange"] }, { kind: "component", type: i16.CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate"], outputs: ["dateChange"] }, { kind: "component", type: i17.DropdownWithFlagComponent, selector: "app-dropdown-with-flag", inputs: ["certified", "JobPerformerCertificates"], outputs: ["flagDropDownChange"] }, { kind: "component", type: i18.CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "errorMessage", "error", "fromShengel"], outputs: ["valueChange"] }], encapsulation: i0.ViewEncapsulation.None });
2121
+ 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" }, providers: [ChangeService], usesOnChanges: true, ngImport: i0, template: "<!-- Spinner -->\r\n<ngx-spinner [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\r\n\r\n<!-- Back Processing -->\r\n<div *ngIf=\"backicon == false\" >\r\n <div class=\"backicon\" [style.visibility]=\"questionStack.length >0 ? 'visible' : 'hidden'\">\r\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.Status__c == 'Completed' ? 'summary-volver':'app-back1'\">\r\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.Back__c }}\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<!-- Question Hanlding -->\r\n<div *ngIf=\"questionItem\" [class]=\"qbItem.isShengel__c ? 'questiondiv1' : 'questiondiv1 padd-bottom'\">\r\n <!-- Progress Bar & Title -->\r\n <div *ngIf=\"questionItem.Title__c && qbItem.Progress_Bar__c\">\r\n <h1 class=\"header1\">{{ questionItem?.Title__c }}</h1>\r\n <div class=\"header2\">{{ questionItem?.SubTitle__c }}</div>\r\n </div>\r\n\r\n <!-- Progress & Grouping -->\r\n <div [ngClass]=\"{ questiondiv2: !qbItem?.Progress_Bar__c }\">\r\n <!-- Pie Chart Progress -->\r\n <div [ngClass]=\"{ bgColor: qbItem?.Progress_Bar__c }\">\r\n <div id=\"progress\" *ngIf=\"qbItem?.Progress_Bar__c\">\r\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\r\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\r\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \r\n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\r\n [startFromZero]=\"false\" [responsive]=\"false\" >\r\n </circle-progress>\r\n </div>\r\n </div>\r\n\r\n <!-- Show the Group/Module related to the Progress -->\r\n <div *ngIf=\"questionItem.Group__c && qbItem.Progress_Bar__c\"\r\n [ngClass]=\"{ questionalign: !qbItem?.Progress_Bar__c }\">\r\n <div class=\"largeTitle\">\r\n <h3 class=\"myt-font6 myt-text3\">\r\n {{ questionItem?.Group__c }}\r\n </h3>\r\n <div *ngIf=\"questionItem.Sub_Text__c != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.Sub_Text__c}}</div>\r\n <div *ngIf=\"questionItem.Sub_Text__c === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.Sub_Text__c}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Question Handling -->\r\n <div class=\"questiondiv2\">\r\n <!-- Title -->\r\n <div *ngIf=\"questionItem.Is_Title__c\">\r\n <div *ngIf=\"questionItem.Type__c != 'Book' && questionItem.Question_No__c!='6' && questionItem.Question_No__c!='9'\"> \r\n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\r\n {{questionItem?.Question_Text__c}}\r\n </h3>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!questionItem.Is_Title__c\" [class]=\"qbItem.isShengel__c ? 'header-style additional' : 'question-f-size additional'\">\r\n <div [innerHTML]=\"getText(questionItem?.Question_Text__c)\" >\r\n {{ questionItem?.Question_Text__c }}\r\n </div>\r\n </div>\r\n\r\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\r\n <div *ngIf=\"questionItem.Type__c == 'Book'\">\r\n <div *ngIf=\"questionItem.Question_No__c=='6'\">\r\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\r\n {{ questionItem?.Question_Text__c }}\r\n </h3>\r\n </div>\r\n </div>\r\n \r\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\r\n <div *ngIf=\"questionItem.Type__c == 'File' \">\r\n <div *ngIf=\"questionItem.Question_No__c=='9'\">\r\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\r\n {{questionItem?.Question_Text__c}}\r\n </h3>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Additional Info -->\r\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\r\n <div *ngIf=\"questionItem.Additional_Rich__c && qbItem.Progress_Bar__c\" >\r\n <div\r\n class=\"additional \" [innerHTML]=\"innerhtml\">\r\n </div>\r\n </div>\r\n <div *ngIf=\"questionItem.Additional_Rich__c && !qbItem.Progress_Bar__c\">\r\n <div class=\"info-alert ques-alert1\">\r\n <i class=\"fa fa-info fa-3x iposition icolor\" aria-hidden=\"true\"></i>\r\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown-->\r\n <div *ngIf=\"dropdownFlag\" >\r\n <div class=\"dis-flex\">\r\n <select \r\n [ngClass]=\"{\r\n 'dt-line myt-align3 myt-align2 dpDown dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.Progress_Bar__c,\r\n 'custom-select': !qbItem?.Progress_Bar__c\r\n }\" class=\"mr-sm-2 dd-height dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\r\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\" style=\"margin-left: 21.5rem !important;\">\r\n <option *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"option\" value=\"{{ opt.Value__c }}\">\r\n {{ opt.Value__c }}\r\n </option>\r\n <option value=\".\" disabled hidden>Bitte treffen Sie eine Auswahl</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Radio -->\r\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\r\n <div *ngIf=\"this.questionItem.error\" class=\"cond-div2\">\r\n {{ questionItem?.Error_Message__c }}\r\n </div>\r\n <div class=\"dis-flex\">\r\n <div *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"radio radioOption\" >\r\n <label class=\"radiocontainer container myt-font4\">{{ opt.Value__c }}\r\n <input type=\"radio\" [id]=\"opt.Id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" value=\"{{ opt.Value__c }}\"\r\n (change)=\"optionChange(opt.Value__c)\" />\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Checkbox -->\r\n <div *ngIf=\"checkboxFlag\" class=\"\">\r\n <div *ngIf=\"this.questionItem.error\" class=\"cond-div2\">\r\n {{ questionItem?.Error_Message__c }}\r\n </div>\r\n <div class=\"dis-flex\">\r\n <div *ngFor=\"let item of optionValues\" class=\"radio col-md-6 optiondiv\">\r\n <label class=\" container1 \" >{{ item.Value__c }}\r\n <input type=\"checkbox\" [id]=\"item.Id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\r\n <span class='checkmark1'></span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Text -->\r\n <div *ngIf=\"textFlag\" class=\"col-md-12 myt-book1\">\r\n <div class=\"col-md-12\" class=\"dis-flex myt-align1\" [class]=\"'col-md-' + questionItem?.Size__c + ' paddingnone'\">\r\n <input type=\"text\" [(ngModel)]=\"inpValue\" [ngClass]=\"{\r\n 'boxoutline myt-font1 myt-book1': qbItem?.Progress_Bar__c,\r\n textBox1: !qbItem?.Progress_Bar__c\r\n }\" id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem?.error\r\n ? 'red'\r\n : inpValue?.length > 0\r\n ? '#87be1c'\r\n : ''\r\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\r\n <i class=\"fa fa-check check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Text Area -->\r\n <div *ngIf=\"taFlag\" class=\"col-md-12\">\r\n <div class=\"dis-flex\">\r\n <textarea class=\"ta-input\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem?.error\r\n ? 'red'\r\n : inpValue?.length > 0 && taFocusOut\r\n ? '#87be1c'\r\n : ''\r\n }}\" (focusout)=\"taFocusOut = true\"\r\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\r\n <i class=\"fa fa-check check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- CC Number Format -->\r\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\r\n <div class=\"dis-flex\">\r\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\"\r\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\r\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\r\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\r\n this.questionItem.error\r\n ? 'red'\r\n : inpValue?.length > 0\r\n ? '#87be1c'\r\n : ''\r\n }}\" />\r\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px;\"\r\n *ngIf=\"inpValue?.length > 0\"></i>\r\n </div>\r\n </div>\r\n <!-- END-->\r\n\r\n <!-- AlphaNumeric -->\r\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\r\n <div style=\"position:relative;\">\r\n <input type=text placeholder=\"0 of 0\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\r\n </div>\r\n </div>\r\n\r\n <!-- Email -->\r\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\r\n <div class=\"dis-flex\">\r\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\r\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem.error\r\n ? 'red'\r\n : inpValue?.length > 0\r\n ? '#87be1c'\r\n : ''\r\n }}\" />\r\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px\"\r\n *ngIf=\"inpValue?.length > 0\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- DateTime -->\r\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero myt-time1\" >\r\n <!-- Error Handling -->\r\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\r\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\r\n\r\n <!-- Date -->\r\n <div *ngIf=\"dateFlag\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label>\r\n <div class=\"dis-flex\">\r\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event)\"\r\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"Seleccione fecha\" (focus)=\"clearError()\">\r\n </my-date-picker>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Time -->\r\n <div *ngIf=\"timeFlag\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label>\r\n <div class=\"dis-flex\">\r\n <div [ngClass]=\"{'dt-line date-line dt-time': qbItem?.Progress_Bar__c,\r\n dateandTime: !qbItem?.Progress_Bar__c}\" \r\n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\r\n (focus)=\"(clearSQError) \">\r\n <select name=\"hours\" class=\"datetime showHour myt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">HH</option>\r\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\r\n {{ hour }}\r\n </option>\r\n </select>\r\n <span class=\"colon\"> : </span>\r\n <select name=\"minutes\" class=\"datetime showminute myt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">MM</option>\r\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\r\n {{ minute }}\r\n </option>\r\n </select>\r\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem?.X24_Hours__c == false\">\r\n <span class=\"colon\"> : </span>\r\n <select name=\"AM/PM\" class=\"myt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\r\n <option value=\"AM\">AM</option>\r\n <option value=\"PM\">PM</option>\r\n </select>\r\n <!-- <div [ngClass]=\"{'': qbItem.Progress_Bar__c, 'dateandTime': !qbItem.Progress_Bar__c}\"></div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <i class=\"fa check-icon3\" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Attachment / File -->\r\n <div *ngIf=\"fileFlag\">\r\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\r\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\r\n <label class=\"picture-upload\" for=\"file-upload\">\r\n <span class=\"picture-upload-child\">\r\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span class=\"fa fa-plus fa-2x picture-upload-child pic-upload icolor\">\r\n <i class=\"\" aria-hidden=\"true\"></i>\r\n </span>\r\n </label>\r\n </div>\r\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event)\" />\r\n </div>\r\n <ul *ngIf=\"\r\n attachments?.length > 0 &&\r\n questionItem?.Type__c === 'File' &&\r\n !qbItem?.Progress_Bar__c\r\n \" class=\"attach-ulist col-md-12\">\r\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\r\n {{ attachment.attachmentName\r\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\r\n </li>\r\n </ul>\r\n\r\n <!-- Attachment Progress -->\r\n <div *ngIf=\"qbItem.Progress_Bar__c\">\r\n <div *ngFor=\"let attachment of attachments\" class=\"file-uploading-box\">\r\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\r\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\r\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\r\n </div>\r\n <div class=\"file-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\r\n \r\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\r\n <span class=\"f-Name\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\"> {{ questionItem?.Question_Text__c}}</span>\r\n <label class=\"file-label \">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\r\n <input name=\"attachment\" type=\"file\" placeholder=\"Ticket kaufen\" multiple\r\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\r\n class=\"file-upload-btn\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Book -->\r\n <div *ngIf=\"bookFlag\">\r\n <div [class]=\"qbItem.isShengel__c ? 'form-group content-box' : 'form-group'\">\r\n <div class=\"form-row\">\r\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\r\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\r\n <div [class]=\"qbItem.isShengel__c ? '' : 'myt-align3'\" [class]=\"qbItem.isShengel__c ? 'col-lg-' + ques.Size__c + ' paddingnone' : 'col-md-' + ques.Size__c + ' paddingnone'\"\r\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.Id\">\r\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\">\r\n <span [class]=\"qbItem.isShengel__c ? 'dis-flex shengel-myt-font3 myt-font7' : 'dis-flex myt-font3 myt-font7' \">{{ ques?.Question__c }}</span>\r\n </div>\r\n <div class=\"col-md-12 paddingZero myt-dateTimeNew\" *ngIf=\"ques.Type__c === 'Time' || ques.Type__c === 'Date'\">\r\n <div *ngIf=\"ques.Type__c === 'Date'\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label>\r\n <div class=\"dis-flex dateandtime\">\r\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event)\"\r\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"Seleccione fecha\" (focus)=\"clearError()\" >\r\n </my-date-picker>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'Time'\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label>\r\n <div class=\"dis-flex dateandtime\">\r\n <div [ngClass]=\"{'dt-line date-line dt-time': qbItem?.Progress_Bar__c,\r\n dateandTime: !qbItem?.Progress_Bar__c}\" \r\n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\r\n (focus)=\"(clearSQError) \">\r\n <select name=\"hours\" class=\"datetime showHour myt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">HH</option>\r\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\r\n {{ hour }}\r\n </option>\r\n </select>\r\n <span class=\"colon\"> : </span>\r\n <select name=\"minutes\" class=\"datetime showminute myt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">MM</option>\r\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\r\n {{ minute }}\r\n </option>\r\n </select>\r\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem.X24_Hours__c == false\">\r\n <span class=\"colon\"> : </span>\r\n <select name=\"AM/PM\" class=\"myt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\r\n <option value=\"AM\">AM</option>\r\n <option value=\"PM\">PM</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\r\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"displayDate($event,ques)\"></app-custom-date-picker>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'Text'\">\r\n <app-custom-input\r\n [fromShengel]=\"qbItem.isShengel__c\"\r\n [value]=\"ques.input\"\r\n [ngClassValue]=\"{\r\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\r\n textBox: !qbItem.Progress_Bar__c\r\n }\"\r\n [question]=\"ques\" \r\n [idValue]=\"ques.Tracking_ID__c\"\r\n [focusEvent]=\"clearSQError(ques.Id)\"\r\n [error]=\"ques.error\"\r\n [placeholder]=\"ques.Question__c\"\r\n (inputValue)=\"selectedInput($event,ques)\">\r\n </app-custom-input>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'Location'\">\r\n <!-- for pick location -->\r\n <app-pick-location [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\r\n </div>\r\n <!-- for text area -->\r\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\r\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\r\n </div>\r\n <!-- for to data table we use 'data' type question -->\r\n <div *ngIf=\"ques.Type__c === 'Data'\">\r\n <app-custom-table [tableHeader]=\"ques.tableHeader\" [tableData]=\"getTableData(ques)\" [tableIndex]=\"i\" (tableDataChange)=\"getData($event)\"></app-custom-table>\r\n </div>\r\n\r\n <div *ngIf=\"ques.Type__c === 'Email'\">\r\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\r\n </div>\r\n\r\n <div *ngIf=\"ques.Type__c === 'File'\">\r\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\r\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\r\n <span class=\"picture-upload-child\">\r\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span class=\"\r\n fa fa-plus fa-2x\r\n picture-upload-child\r\n pic-upload\r\n icolor\r\n \">\r\n <i class=\"\" aria-hidden=\"true\"></i>\r\n </span>\r\n </label>\r\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\r\n </div>\r\n\r\n <ul *ngIf=\"\r\n attachments?.length > 0 &&\r\n ques.Type__c === 'File' &&\r\n !qbItem.Progress_Bar__c\r\n \" class=\"attach-ulist col-md-12\">\r\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\r\n {{ attachment.attachmentName\r\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\r\n </li>\r\n </ul>\r\n <div class=\"myt-box\" *ngIf=\"qbItem.Progress_Bar__c\">\r\n\r\n <div *ngFor=\"let attachment of attachments\" class=\"file-uploading-box\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />\r\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\r\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\r\n </div>\r\n <div class=\"file-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />\r\n <span class=\"f-Name\">{{ ques?.Question__c }}</span>\r\n <label class=\"file-label \">\r\n <span style=\"color: #c5281c;text-decoration:underline\">\r\n Adjuntar\r\n </span>\r\n <input name=\"attachment\" type=\"file\" placeholder=\"Ticket kaufen\" multiple\r\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\r\n class=\"file-upload-btn\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Table -->\r\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\r\n <app-custom-table \r\n [question]=\"ques\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\r\n </app-custom-table>\r\n </div>\r\n\r\n <!-- Dropdown -->\r\n <div *ngIf=\"ques.Type__c === 'Dropdown'\" class=\"\">\r\n <!-- for common dropdown -->\r\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel__c\"\r\n [options]=\"ques.Question_Options__r.records\"\r\n [apiMeta]=\"ques.Sub_Text__c\"\r\n [id]=\"ques.Name\"\r\n [selectedValue]=\"ques.input\"\r\n [placeholder]=\"'---Select---'\"\r\n [errorMessage]=\"ques.Error_Message__c\"\r\n [error]=\"ques.error\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\r\n </app-custom-dropdown>\r\n <app-dropdown-with-flag *ngIf=\"ques.isDependentPicklist && !ques.dropDownOnly\" [certified]=\"ques.certifiedFlag\" [JobPerformerCertificates]=\"ques.certificateList\" (flagDropDownChange)=\"dependentChange($event)\"></app-dropdown-with-flag>\r\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\r\n </div> \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--List start-->\r\n <div *ngIf=\"listFlag\">\r\n <div class=\"form-group\">\r\n <div class=\"form-row\">\r\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\r\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\r\n <div class=\"myt-align3\" [class]=\"'col-md-' + ques.Size__c + ' paddingnone'\"\r\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.Id);let i = index\">\r\n <div>\r\n <span class=\"dis-flex myt-font3 myt-font7\">{{ ques?.Question__c }}</span>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'Text'\">\r\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\r\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\r\n textBox: !qbItem.Progress_Bar__c\r\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\"\r\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\r\n </div>\r\n </div>\r\n <div class=\"\" *ngIf=\"addFlag\">\r\n <button (click)=\"Add(getLocalSubQuestions(questionItem.Id))\" class=\"btn\"><i class=\"fa fa-plus\" ></i>Add</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!--List End-->\r\n\r\n <!-- Actions -->\r\n <div *ngIf=\"individualBookButton\" class=\"flexer\">\r\n <!-- Backward / Back -->\r\n <div class=\"backbutton\" [ngClass]=\"{ 'col-md-6': !qbItem.Progress_Bar__c }\"\r\n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\">\r\n <div [ngClass]=\"{}\">\r\n <button [ngClass]=\"{\r\n 'left-bt': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color':\r\n !qbItem.Progress_Bar__c\r\n }\" (click)=\"handleBackClick()\">\r\n {{ qbItem?.Back__c }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Forward / Next -->\r\n <div [ngClass]=\"{ 'col-md-6': !qbItem.Progress_Bar__c }\">\r\n <div>\r\n <button [ngClass]=\"{\r\n 'rusty': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color':\r\n !qbItem.Progress_Bar__c\r\n }\" (click)=\"handleNextClick()\">\r\n {{ qbItem.Next__c }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Summary -->\r\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\r\n 'col-md-12':!qbItem.Progress_Bar__c\r\n }\">\r\n <h1 class=\"header1 summarypadd\" >{{ qbItem.SubTitle__c }}</h1> \r\n <div id=\"progress2\" *ngIf=\"!qbItem.Progress_Bar__c && this.abItem.Status__c != 'Completed' \">\r\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\r\n <div *ngFor=\"let qa of summary\">\r\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\r\n <div [ngClass]=\"{ summary: !qbItem.Progress_Bar__c }\">\r\n <div *ngIf=\"!qbItem.Edit__c\"\r\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\r\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\r\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\r\n </div>\r\n <div *ngIf=\"qbItem.Edit__c\"\r\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\r\n <div [ngClass]=\"{ 'question': this.abItem.Status__c === 'Completed' }\"\r\n [innerHTML]=\"getText(qa.quesValue)\">\r\n {{ qa.quesValue }}\r\n </div>\r\n </div>\r\n <div class=\"answer\" >\r\n <div *ngIf=\"qa.qTyp === 'File'\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"icon-edit-summary\" />\r\n {{ qa.ansValue }}\r\n </div>\r\n <div *ngIf=\"qa.qTyp != 'File'\">{{ qa.ansValue }}</div>\r\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\r\n <button class=\"edit\" (click)=\"handleEditClick(qa.quesId)\">\r\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"icon-editios\"/>\r\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"icon-edit\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"this.abItem.Status__c === 'Completed'\" class=\"col-lg-12\">\r\n <div class=\"panel-group panel-group-joined\" id=\"ePTW-details\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h4 class=\"panel-title\">\r\n <a data-toggle=\"collapse\" data-parent=\"#ePTW-details\" href=\"#collapseOne\" class=\"collapsed\">\r\n PTW Details\r\n </a>\r\n </h4>\r\n </div>\r\n <div id=\"collapseOne\" class=\"panel-collapse collapse\">\r\n <div class=\"panel-body\">\r\n <div class=\"row\">\r\n <ng-container *ngFor=\"let item of summaryData; let i = index\">\r\n <ng-container *ngIf=\"i % 2 === 0\">\r\n <div class=\"col-lg-6 m-b-30\">\r\n <label>{{ getKey(item) }}</label>\r\n <p class=\"font-size\">{{ getValue(item) || 'N/A' }}</p>\r\n </div>\r\n <div class=\"col-lg-6\" *ngIf=\"summaryData[i + 1]\">\r\n <label>{{ getKey(summaryData[i + 1]) }}</label>\r\n <p class=\"font-size\">{{ getValue(summaryData[i + 1]) || 'N/A' }}</p>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div id=\"progress2\" *ngIf=\"qbItem.Progress_Bar__c \">\r\n <div [ngClass]=\"{'bgColor summary-top' : qbItem.Progress_Bar__c }\" >\r\n <div id=\"progress-summary\" *ngIf=\"qbItem.Progress_Bar__c\">\r\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\r\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\r\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \r\n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\r\n [startFromZero]=\"false\" [responsive]=\"false\" >\r\n </circle-progress>\r\n \r\n <div *ngIf=\"qbItem.Summary_Text__c && qbItem.Progress_Bar__c\" \r\n [ngClass]=\"{ summaryTitle: qbItem.Progress_Bar__c }\">\r\n <h3 class=\"subTitle\" >{{ qbItem.Summary_Text__c }}</h3>\r\n <div *ngIf=\"abItem.Status__c != 'Completed'\" class=\"subTitle1\" >{{ qbItem.Summary_Sub_Text__c}}</div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\r\n <h3 class=\"summary-h\">\r\n {{ qbItem.Summary_Text__c }}\r\n </h3>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\r\n <div class=\"summary-groupText myt-font2\">\r\n <!-- <p>Informe de da\u00F1o</p> -->\r\n </div>\r\n <div *ngFor=\"let qa of summary\" >\r\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\r\n <div [ngClass]=\"{ summary: this.abItem.Status__c != 'Completed' && !qbItem.Progress_Bar__c }\">\r\n <div *ngIf=\"!qbItem.Edit__c\"\r\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\r\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\r\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\r\n </div>\r\n <div *ngIf=\"qbItem.Edit__c\"\r\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\r\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.Status__c === 'Completed' }\"\r\n [innerHTML]=\"getText(qa.quesValue)\">\r\n {{ qa.quesValue }}\r\n </div>\r\n </div>\r\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\r\n <button class=\"edit\" (click)=\"handleEditClick(qa.quesId)\">\r\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"icon-editios\"/>\r\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"icon-edit\" />\r\n </button>\r\n </div>\r\n \r\n <div class=\"answer \" >\r\n <div *ngIf=\"qa.qTyp === 'File'\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"icon-edit-summary\" />\r\n {{ qa.ansValue }}\r\n </div>\r\n <div *ngIf=\"qa.qTyp != 'File'\">\r\n {{ qa.ansValue }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Answer Book -->\r\n <div class=\"flexer1\" *ngIf=\"abItem\">\r\n <div class=\"\" *ngIf=\"abItem.Status__c == 'Completed'\">\r\n <div class=\"col-md-12\">\r\n <button [ngClass]=\"{'btn-text': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\"\r\n (click)=\"handleCancelClick()\">\r\n {{ qbItem.Cancel__c }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Group Actions -->\r\n <div class=\"align-edit-submit\" *ngIf=\"abItem.Status__c != 'Completed'\">\r\n <div class=\"col-md-6\">\r\n <button [ngClass]=\"{ 'btn-text2': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c }\" \r\n (click)=\"handleSubmitClick()\">\r\n {{ qbItem.Submit__c }}\r\n </button>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <button [ngClass]=\"{'grey': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\" \r\n (click)=\"handleBackClickNew()\">\r\n {{ qbItem.Edit__c }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\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}.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%}.checkmark{left:47.5%;height:20px;margin-right:7px;width:20px;background-color:#fff0;border-radius:50%;border:1px solid grey}.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}.form-group.content-box{background:#ffffff;padding:40px;border:1px solid #e8e8e8;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.shengel-myt-font3{padding-bottom:5px;padding-top:5px;padding-right:15px;padding-left:2px!important;color:#9a9a9a!important;font-size:14px!important;font-weight:400!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}.container-radio input:checked~.checkmark{background-color:#fff0}.checkmark:after{content:\"\";display:none}.container-radio input:checked~.checkmark:after{display:block}.container-radio .checkmark:after{top:3px;left:3px;width:12px;margin:3px;height:12px;border-radius:50%;background:#C5281C}.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%}.checkmark{left:3.8rem}.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}.form-row{padding-left:8px!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}.container1 input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.checkmark1{position:absolute;top:1px;left:-35%;height:21px;width:21px;background-color:#eee}.container1:hover input~.checkmark1{background-color:#ccc}.container1 input:checked~.checkmark1{content:\"\";background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxMiIgdmlld0JveD0iMCAwIDE2IDEyIj4gIDxwYXRoIGZpbGw9IiM4N0JFMUMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEyLjI0Mjk1NjUsMTcuNTcyNzczOCBMMjAuOTg1NTM0Nyw5LjEzMjYxNTg1IEMyMS4xNjg1NDM3LDguOTU1OTM3NDEgMjEuNDYyMTgwNyw4Ljk1NTc3NDM2IDIxLjY0NTM5MzYsOS4xMzIyNDk0NCBMMjIuODU5MTUxMywxMC4zMDEzNzAxIEMyMy4wNDY5NDk2LDEwLjQ4MjI2MiAyMy4wNDY5NDk2LDEwLjc3OTA1NjMgMjIuODU5MTUxMywxMC45NTk5NDgyIEwxMi41NzMwNjk2LDIwLjg2Nzc1MDYgQzEyLjM5MDAwNDcsMjEuMDQ0MDgzMSAxMi4wOTY2NTU2LDIxLjA0NDA4MzEgMTEuOTEzNTkwNiwyMC44Njc3NTA2IEw3LjE0MDg0ODc3LDE2LjI3MDUzMDMgQzYuOTU0MTc0MjgsMTYuMDkwNzIwOSA2Ljk1Mjg5MDU1LDE1Ljc5NjA5NTggNy4xMzc5OTEzMywxNS42MTQ3MjgyIEw4LjMzMTE3Njc5LDE0LjQ0NTYwNzUgQzguNTEzODA2NDgsMTQuMjY2NjYxMiA4LjgwOTMzMDgzLDE0LjI2NTQyMjYgOC45OTM1MTMyMiwxNC40NDI4MzE1IEwxMi4yNDI5NTY1LDE3LjU3Mjc3MzggWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTcgLTkpIi8+PC9zdmc+);background-position:.17rem .3rem;background-repeat:no-repeat;background-color:#d2d4d6;width:21px;height:21px}.checkmark1:after{content:\"\";position:absolute;display:none}.container1 input:checked~.checkmark1:after{display:block}.container1 .checkmark1:after{left:9px;top:5px;width:5px;height:10px;border-width:0 3px 3px 0}.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}@media ((min-width: 1200px)){.form-row{display:flex;flex-wrap:wrap}}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i7.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: i7.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i7.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i7.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i10.MyDatePicker, selector: "my-date-picker", inputs: ["placeholder", "locale", "disabled", "options", "defaultMonth", "selDate", "selector"], outputs: ["dateChanged", "inputFieldChanged", "calendarViewChanged", "calendarToggle", "inputFocusBlur"], exportAs: ["mydatepicker"] }, { kind: "component", type: i6.NgxSpinnerComponent, selector: "ngx-spinner", inputs: ["disableAnimation", "bdColor", "zIndex", "color", "type", "size", "fullScreen", "name", "template", "showSpinner"] }, { kind: "component", type: i11.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: i12.PickLocationComponent, selector: "app-pick-location", inputs: ["address"], outputs: ["locationSelected"] }, { kind: "component", type: i13.CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: i14.CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error"], outputs: ["textareaValueChange"] }, { kind: "component", type: i15.CustomTableComponent, selector: "app-custom-table", inputs: ["question"], outputs: ["valueChange"] }, { kind: "component", type: i16.CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate"], outputs: ["dateChange"] }, { kind: "component", type: i17.DropdownWithFlagComponent, selector: "app-dropdown-with-flag", inputs: ["certified", "JobPerformerCertificates"], outputs: ["flagDropDownChange"] }, { kind: "component", type: i18.CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "errorMessage", "error", "fromShengel"], outputs: ["valueChange"] }], encapsulation: i0.ViewEncapsulation.None });
2122
2122
  }
2123
2123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: QuestionnaireComponent, decorators: [{
2124
2124
  type: Component,
2125
- args: [{ selector: "lib-questionnaire", encapsulation: ViewEncapsulation.None, providers: [ChangeService], template: "<!-- Spinner -->\r\n<ngx-spinner [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\r\n\r\n<!-- Back Processing -->\r\n<div *ngIf=\"backicon == false\" >\r\n <div class=\"backicon\" [style.visibility]=\"questionStack.length >0 ? 'visible' : 'hidden'\">\r\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.Status__c == 'Completed' ? 'summary-volver':'app-back1'\">\r\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.Back__c }}\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<!-- Question Hanlding -->\r\n<div *ngIf=\"questionItem\" [class]=\"qbItem.isShengel__c ? 'questiondiv1' : 'questiondiv1 padd-bottom'\">\r\n <!-- Progress Bar & Title -->\r\n <div *ngIf=\"questionItem.Title__c && qbItem.Progress_Bar__c\">\r\n <h1 class=\"header1\">{{ questionItem?.Title__c }}</h1>\r\n <div class=\"header2\">{{ questionItem?.SubTitle__c }}</div>\r\n </div>\r\n\r\n <!-- Progress & Grouping -->\r\n <div [ngClass]=\"{ questiondiv2: !qbItem?.Progress_Bar__c }\">\r\n <!-- Pie Chart Progress -->\r\n <div [ngClass]=\"{ bgColor: qbItem?.Progress_Bar__c }\">\r\n <div id=\"progress\" *ngIf=\"qbItem?.Progress_Bar__c\">\r\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\r\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\r\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \r\n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\r\n [startFromZero]=\"false\" [responsive]=\"false\" >\r\n </circle-progress>\r\n </div>\r\n </div>\r\n\r\n <!-- Show the Group/Module related to the Progress -->\r\n <div *ngIf=\"questionItem.Group__c && qbItem.Progress_Bar__c\"\r\n [ngClass]=\"{ questionalign: !qbItem?.Progress_Bar__c }\">\r\n <div class=\"largeTitle\">\r\n <h3 class=\"myt-font6 myt-text3\">\r\n {{ questionItem?.Group__c }}\r\n </h3>\r\n <div *ngIf=\"questionItem.Sub_Text__c != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.Sub_Text__c}}</div>\r\n <div *ngIf=\"questionItem.Sub_Text__c === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.Sub_Text__c}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Question Handling -->\r\n <div class=\"questiondiv2\">\r\n <!-- Title -->\r\n <div *ngIf=\"questionItem.Is_Title__c\">\r\n <div *ngIf=\"questionItem.Type__c != 'Book' && questionItem.Question_No__c!='6' && questionItem.Question_No__c!='9'\"> \r\n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\r\n {{questionItem?.Question_Text__c}}\r\n </h3>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!questionItem.Is_Title__c\" [class]=\"qbItem.isShengel__c ? 'header-style additional' : 'question-f-size additional'\">\r\n <div [innerHTML]=\"getText(questionItem?.Question_Text__c)\" >\r\n {{ questionItem?.Question_Text__c }}\r\n </div>\r\n </div>\r\n\r\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\r\n <div *ngIf=\"questionItem.Type__c == 'Book'\">\r\n <div *ngIf=\"questionItem.Question_No__c=='6'\">\r\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\r\n {{ questionItem?.Question_Text__c }}\r\n </h3>\r\n </div>\r\n </div>\r\n \r\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\r\n <div *ngIf=\"questionItem.Type__c == 'File' \">\r\n <div *ngIf=\"questionItem.Question_No__c=='9'\">\r\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\r\n {{questionItem?.Question_Text__c}}\r\n </h3>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Additional Info -->\r\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\r\n <div *ngIf=\"questionItem.Additional_Rich__c && qbItem.Progress_Bar__c\" >\r\n <div\r\n class=\"additional \" [innerHTML]=\"innerhtml\">\r\n </div>\r\n </div>\r\n <div *ngIf=\"questionItem.Additional_Rich__c && !qbItem.Progress_Bar__c\">\r\n <div class=\"info-alert ques-alert1\">\r\n <i class=\"fa fa-info fa-3x iposition icolor\" aria-hidden=\"true\"></i>\r\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown-->\r\n <div *ngIf=\"dropdownFlag\" >\r\n <div class=\"dis-flex\">\r\n <select \r\n [ngClass]=\"{\r\n 'dt-line myt-align3 myt-align2 dpDown dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.Progress_Bar__c,\r\n 'custom-select': !qbItem?.Progress_Bar__c\r\n }\" class=\"mr-sm-2 dd-height dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\r\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\" style=\"margin-left: 21.5rem !important;\">\r\n <option *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"option\" value=\"{{ opt.Value__c }}\">\r\n {{ opt.Value__c }}\r\n </option>\r\n <option value=\".\" disabled hidden>Bitte treffen Sie eine Auswahl</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Radio -->\r\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\r\n <div *ngIf=\"this.questionItem.error\" class=\"cond-div2\">\r\n {{ questionItem?.Error_Message__c }}\r\n </div>\r\n <div class=\"dis-flex\">\r\n <div *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"radio radioOption\" >\r\n <label class=\"radiocontainer container myt-font4\">{{ opt.Value__c }}\r\n <input type=\"radio\" [id]=\"opt.Id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" value=\"{{ opt.Value__c }}\"\r\n (change)=\"optionChange(opt.Value__c)\" />\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Checkbox -->\r\n <div *ngIf=\"checkboxFlag\" class=\"\">\r\n <div *ngIf=\"this.questionItem.error\" class=\"cond-div2\">\r\n {{ questionItem?.Error_Message__c }}\r\n </div>\r\n <div class=\"dis-flex\">\r\n <div *ngFor=\"let item of optionValues\" class=\"radio col-md-6 optiondiv\">\r\n <label class=\" container1 \" >{{ item.Value__c }}\r\n <input type=\"checkbox\" [id]=\"item.Id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\r\n <span class='checkmark1'></span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Text -->\r\n <div *ngIf=\"textFlag\" class=\"col-md-12 myt-book1\">\r\n <div class=\"col-md-12\" class=\"dis-flex myt-align1\" [class]=\"'col-md-' + questionItem?.Size__c + ' paddingnone'\">\r\n <input type=\"text\" [(ngModel)]=\"inpValue\" [ngClass]=\"{\r\n 'boxoutline myt-font1 myt-book1': qbItem?.Progress_Bar__c,\r\n textBox1: !qbItem?.Progress_Bar__c\r\n }\" id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem?.error\r\n ? 'red'\r\n : inpValue?.length > 0\r\n ? '#87be1c'\r\n : ''\r\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\r\n <i class=\"fa fa-check check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Text Area -->\r\n <div *ngIf=\"taFlag\" class=\"col-md-12\">\r\n <div class=\"dis-flex\">\r\n <textarea class=\"ta-input\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem?.error\r\n ? 'red'\r\n : inpValue?.length > 0 && taFocusOut\r\n ? '#87be1c'\r\n : ''\r\n }}\" (focusout)=\"taFocusOut = true\"\r\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\r\n <i class=\"fa fa-check check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- CC Number Format -->\r\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\r\n <div class=\"dis-flex\">\r\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\"\r\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\r\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\r\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\r\n this.questionItem.error\r\n ? 'red'\r\n : inpValue?.length > 0\r\n ? '#87be1c'\r\n : ''\r\n }}\" />\r\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px;\"\r\n *ngIf=\"inpValue?.length > 0\"></i>\r\n </div>\r\n </div>\r\n <!-- END-->\r\n\r\n <!-- AlphaNumeric -->\r\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\r\n <div style=\"position:relative;\">\r\n <input type=text placeholder=\"0 of 0\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\r\n </div>\r\n </div>\r\n\r\n <!-- Email -->\r\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\r\n <div class=\"dis-flex\">\r\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\r\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem.error\r\n ? 'red'\r\n : inpValue?.length > 0\r\n ? '#87be1c'\r\n : ''\r\n }}\" />\r\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px\"\r\n *ngIf=\"inpValue?.length > 0\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- DateTime -->\r\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero myt-time1\" >\r\n <!-- Error Handling -->\r\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\r\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\r\n\r\n <!-- Date -->\r\n <div *ngIf=\"dateFlag\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label>\r\n <div class=\"dis-flex\">\r\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event)\"\r\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"Seleccione fecha\" (focus)=\"clearError()\">\r\n </my-date-picker>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Time -->\r\n <div *ngIf=\"timeFlag\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label>\r\n <div class=\"dis-flex\">\r\n <div [ngClass]=\"{'dt-line date-line dt-time': qbItem?.Progress_Bar__c,\r\n dateandTime: !qbItem?.Progress_Bar__c}\" \r\n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\r\n (focus)=\"(clearSQError) \">\r\n <select name=\"hours\" class=\"datetime showHour myt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">HH</option>\r\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\r\n {{ hour }}\r\n </option>\r\n </select>\r\n <span class=\"colon\"> : </span>\r\n <select name=\"minutes\" class=\"datetime showminute myt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">MM</option>\r\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\r\n {{ minute }}\r\n </option>\r\n </select>\r\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem?.X24_Hours__c == false\">\r\n <span class=\"colon\"> : </span>\r\n <select name=\"AM/PM\" class=\"myt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\r\n <option value=\"AM\">AM</option>\r\n <option value=\"PM\">PM</option>\r\n </select>\r\n <!-- <div [ngClass]=\"{'': qbItem.Progress_Bar__c, 'dateandTime': !qbItem.Progress_Bar__c}\"></div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <i class=\"fa check-icon3\" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Attachment / File -->\r\n <div *ngIf=\"fileFlag\">\r\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\r\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\r\n <label class=\"picture-upload\" for=\"file-upload\">\r\n <span class=\"picture-upload-child\">\r\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span class=\"fa fa-plus fa-2x picture-upload-child pic-upload icolor\">\r\n <i class=\"\" aria-hidden=\"true\"></i>\r\n </span>\r\n </label>\r\n </div>\r\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event)\" />\r\n </div>\r\n <ul *ngIf=\"\r\n attachments?.length > 0 &&\r\n questionItem?.Type__c === 'File' &&\r\n !qbItem?.Progress_Bar__c\r\n \" class=\"attach-ulist col-md-12\">\r\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\r\n {{ attachment.attachmentName\r\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\r\n </li>\r\n </ul>\r\n\r\n <!-- Attachment Progress -->\r\n <div *ngIf=\"qbItem.Progress_Bar__c\">\r\n <div *ngFor=\"let attachment of attachments\" class=\"file-uploading-box\">\r\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\r\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\r\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\r\n </div>\r\n <div class=\"file-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\r\n \r\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\r\n <span class=\"f-Name\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\"> {{ questionItem?.Question_Text__c}}</span>\r\n <label class=\"file-label \">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\r\n <input name=\"attachment\" type=\"file\" placeholder=\"Ticket kaufen\" multiple\r\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\r\n class=\"file-upload-btn\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Book -->\r\n <div *ngIf=\"bookFlag\">\r\n <div [class]=\"qbItem.isShengel__c ? 'form-group content-box' : 'form-group'\">\r\n <div class=\"form-row\">\r\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\r\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\r\n <div [class]=\"qbItem.isShengel__c ? '' : 'myt-align3'\" [class]=\"qbItem.isShengel__c ? 'col-lg-' + ques.Size__c + ' paddingnone' : 'col-md-' + ques.Size__c + ' paddingnone'\"\r\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.Id\">\r\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\">\r\n <span [class]=\"qbItem.isShengel__c ? 'dis-flex shengel-myt-font3 myt-font7' : 'dis-flex myt-font3 myt-font7' \">{{ ques?.Question__c }}</span>\r\n </div>\r\n <div class=\"col-md-12 paddingZero myt-dateTimeNew\" *ngIf=\"ques.Type__c === 'Time' || ques.Type__c === 'Date'\">\r\n <div *ngIf=\"ques.Type__c === 'Date'\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label>\r\n <div class=\"dis-flex dateandtime\">\r\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event)\"\r\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"Seleccione fecha\" (focus)=\"clearError()\" >\r\n </my-date-picker>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'Time'\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label>\r\n <div class=\"dis-flex dateandtime\">\r\n <div [ngClass]=\"{'dt-line date-line dt-time': qbItem?.Progress_Bar__c,\r\n dateandTime: !qbItem?.Progress_Bar__c}\" \r\n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\r\n (focus)=\"(clearSQError) \">\r\n <select name=\"hours\" class=\"datetime showHour myt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">HH</option>\r\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\r\n {{ hour }}\r\n </option>\r\n </select>\r\n <span class=\"colon\"> : </span>\r\n <select name=\"minutes\" class=\"datetime showminute myt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">MM</option>\r\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\r\n {{ minute }}\r\n </option>\r\n </select>\r\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem.X24_Hours__c == false\">\r\n <span class=\"colon\"> : </span>\r\n <select name=\"AM/PM\" class=\"myt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\r\n <option value=\"AM\">AM</option>\r\n <option value=\"PM\">PM</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\r\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"displayDate($event,ques)\"></app-custom-date-picker>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'Text'\">\r\n <app-custom-input\r\n [fromShengel]=\"qbItem.isShengel__c\"\r\n [value]=\"ques.input\"\r\n [ngClassValue]=\"{\r\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\r\n textBox: !qbItem.Progress_Bar__c\r\n }\"\r\n [question]=\"ques\" \r\n [idValue]=\"ques.Tracking_ID__c\"\r\n [focusEvent]=\"clearSQError(ques.Id)\"\r\n [error]=\"ques.error\"\r\n [placeholder]=\"ques.Question__c\"\r\n (inputValue)=\"selectedInput($event,ques)\">\r\n </app-custom-input>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'Location'\">\r\n <!-- for pick location -->\r\n <app-pick-location [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\r\n </div>\r\n <!-- for text area -->\r\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\r\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\r\n </div>\r\n <!-- for to data table we use 'data' type question -->\r\n <div *ngIf=\"ques.Type__c === 'Data'\">\r\n <app-custom-table [tableHeader]=\"ques.tableHeader\" [tableData]=\"getTableData(ques)\" [tableIndex]=\"i\" (tableDataChange)=\"getData($event)\"></app-custom-table>\r\n </div>\r\n\r\n <div *ngIf=\"ques.Type__c === 'Email'\">\r\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\r\n </div>\r\n\r\n <div *ngIf=\"ques.Type__c === 'File'\">\r\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\r\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\r\n <span class=\"picture-upload-child\">\r\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span class=\"\r\n fa fa-plus fa-2x\r\n picture-upload-child\r\n pic-upload\r\n icolor\r\n \">\r\n <i class=\"\" aria-hidden=\"true\"></i>\r\n </span>\r\n </label>\r\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\r\n </div>\r\n\r\n <ul *ngIf=\"\r\n attachments?.length > 0 &&\r\n ques.Type__c === 'File' &&\r\n !qbItem.Progress_Bar__c\r\n \" class=\"attach-ulist col-md-12\">\r\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\r\n {{ attachment.attachmentName\r\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\r\n </li>\r\n </ul>\r\n <div class=\"myt-box\" *ngIf=\"qbItem.Progress_Bar__c\">\r\n\r\n <div *ngFor=\"let attachment of attachments\" class=\"file-uploading-box\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />\r\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\r\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\r\n </div>\r\n <div class=\"file-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />\r\n <span class=\"f-Name\">{{ ques?.Question__c }}</span>\r\n <label class=\"file-label \">\r\n <span style=\"color: #c5281c;text-decoration:underline\">\r\n Adjuntar\r\n </span>\r\n <input name=\"attachment\" type=\"file\" placeholder=\"Ticket kaufen\" multiple\r\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\r\n class=\"file-upload-btn\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown -->\r\n <div *ngIf=\"ques.Type__c === 'Dropdown'\" class=\"\">\r\n <!-- for common dropdown -->\r\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel__c\"\r\n [options]=\"ques.Question_Options__r.records\"\r\n [apiMeta]=\"ques.Sub_Text__c\"\r\n [id]=\"ques.Name\"\r\n [selectedValue]=\"ques.input\"\r\n [placeholder]=\"'---Select---'\"\r\n [errorMessage]=\"ques.Error_Message__c\"\r\n [error]=\"ques.error\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\r\n </app-custom-dropdown>\r\n <app-dropdown-with-flag *ngIf=\"ques.isDependentPicklist && !ques.dropDownOnly\" [certified]=\"ques.certifiedFlag\" [JobPerformerCertificates]=\"ques.certificateList\" (flagDropDownChange)=\"dependentChange($event)\"></app-dropdown-with-flag>\r\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\r\n </div> \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--List start-->\r\n <div *ngIf=\"listFlag\">\r\n <div class=\"form-group\">\r\n <div class=\"form-row\">\r\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\r\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\r\n <div class=\"myt-align3\" [class]=\"'col-md-' + ques.Size__c + ' paddingnone'\"\r\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.Id);let i = index\">\r\n <div>\r\n <span class=\"dis-flex myt-font3 myt-font7\">{{ ques?.Question__c }}</span>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'Text'\">\r\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\r\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\r\n textBox: !qbItem.Progress_Bar__c\r\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\"\r\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\r\n </div>\r\n </div>\r\n <div class=\"\" *ngIf=\"addFlag\">\r\n <button (click)=\"Add(getLocalSubQuestions(questionItem.Id))\" class=\"btn\"><i class=\"fa fa-plus\" ></i>Add</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!--List End-->\r\n\r\n <!-- Actions -->\r\n <div *ngIf=\"individualBookButton\" class=\"flexer\">\r\n <!-- Backward / Back -->\r\n <div class=\"backbutton\" [ngClass]=\"{ 'col-md-6': !qbItem.Progress_Bar__c }\"\r\n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\">\r\n <div [ngClass]=\"{}\">\r\n <button [ngClass]=\"{\r\n 'left-bt': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color':\r\n !qbItem.Progress_Bar__c\r\n }\" (click)=\"handleBackClick()\">\r\n {{ qbItem?.Back__c }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Forward / Next -->\r\n <div [ngClass]=\"{ 'col-md-6': !qbItem.Progress_Bar__c }\">\r\n <div>\r\n <button [ngClass]=\"{\r\n 'rusty': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color':\r\n !qbItem.Progress_Bar__c\r\n }\" (click)=\"handleNextClick()\">\r\n {{ qbItem.Next__c }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Summary -->\r\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\r\n 'col-md-12':!qbItem.Progress_Bar__c\r\n }\">\r\n <h1 class=\"header1 summarypadd\" >{{ qbItem.SubTitle__c }}</h1> \r\n <div id=\"progress2\" *ngIf=\"!qbItem.Progress_Bar__c && this.abItem.Status__c != 'Completed' \">\r\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\r\n <div *ngFor=\"let qa of summary\">\r\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\r\n <div [ngClass]=\"{ summary: !qbItem.Progress_Bar__c }\">\r\n <div *ngIf=\"!qbItem.Edit__c\"\r\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\r\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\r\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\r\n </div>\r\n <div *ngIf=\"qbItem.Edit__c\"\r\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\r\n <div [ngClass]=\"{ 'question': this.abItem.Status__c === 'Completed' }\"\r\n [innerHTML]=\"getText(qa.quesValue)\">\r\n {{ qa.quesValue }}\r\n </div>\r\n </div>\r\n <div class=\"answer\" >\r\n <div *ngIf=\"qa.qTyp === 'File'\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"icon-edit-summary\" />\r\n {{ qa.ansValue }}\r\n </div>\r\n <div *ngIf=\"qa.qTyp != 'File'\">{{ qa.ansValue }}</div>\r\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\r\n <button class=\"edit\" (click)=\"handleEditClick(qa.quesId)\">\r\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"icon-editios\"/>\r\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"icon-edit\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"this.abItem.Status__c === 'Completed'\" class=\"col-lg-12\">\r\n <div class=\"panel-group panel-group-joined\" id=\"ePTW-details\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h4 class=\"panel-title\">\r\n <a data-toggle=\"collapse\" data-parent=\"#ePTW-details\" href=\"#collapseOne\" class=\"collapsed\">\r\n PTW Details\r\n </a>\r\n </h4>\r\n </div>\r\n <div id=\"collapseOne\" class=\"panel-collapse collapse\">\r\n <div class=\"panel-body\">\r\n <div class=\"row\">\r\n <ng-container *ngFor=\"let item of summaryData; let i = index\">\r\n <ng-container *ngIf=\"i % 2 === 0\">\r\n <div class=\"col-lg-6 m-b-30\">\r\n <label>{{ getKey(item) }}</label>\r\n <p class=\"font-size\">{{ getValue(item) || 'N/A' }}</p>\r\n </div>\r\n <div class=\"col-lg-6\" *ngIf=\"summaryData[i + 1]\">\r\n <label>{{ getKey(summaryData[i + 1]) }}</label>\r\n <p class=\"font-size\">{{ getValue(summaryData[i + 1]) || 'N/A' }}</p>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div id=\"progress2\" *ngIf=\"qbItem.Progress_Bar__c \">\r\n <div [ngClass]=\"{'bgColor summary-top' : qbItem.Progress_Bar__c }\" >\r\n <div id=\"progress-summary\" *ngIf=\"qbItem.Progress_Bar__c\">\r\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\r\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\r\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \r\n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\r\n [startFromZero]=\"false\" [responsive]=\"false\" >\r\n </circle-progress>\r\n \r\n <div *ngIf=\"qbItem.Summary_Text__c && qbItem.Progress_Bar__c\" \r\n [ngClass]=\"{ summaryTitle: qbItem.Progress_Bar__c }\">\r\n <h3 class=\"subTitle\" >{{ qbItem.Summary_Text__c }}</h3>\r\n <div *ngIf=\"abItem.Status__c != 'Completed'\" class=\"subTitle1\" >{{ qbItem.Summary_Sub_Text__c}}</div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\r\n <h3 class=\"summary-h\">\r\n {{ qbItem.Summary_Text__c }}\r\n </h3>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\r\n <div class=\"summary-groupText myt-font2\">\r\n <!-- <p>Informe de da\u00F1o</p> -->\r\n </div>\r\n <div *ngFor=\"let qa of summary\" >\r\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\r\n <div [ngClass]=\"{ summary: this.abItem.Status__c != 'Completed' && !qbItem.Progress_Bar__c }\">\r\n <div *ngIf=\"!qbItem.Edit__c\"\r\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\r\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\r\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\r\n </div>\r\n <div *ngIf=\"qbItem.Edit__c\"\r\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\r\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.Status__c === 'Completed' }\"\r\n [innerHTML]=\"getText(qa.quesValue)\">\r\n {{ qa.quesValue }}\r\n </div>\r\n </div>\r\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\r\n <button class=\"edit\" (click)=\"handleEditClick(qa.quesId)\">\r\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"icon-editios\"/>\r\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"icon-edit\" />\r\n </button>\r\n </div>\r\n \r\n <div class=\"answer \" >\r\n <div *ngIf=\"qa.qTyp === 'File'\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"icon-edit-summary\" />\r\n {{ qa.ansValue }}\r\n </div>\r\n <div *ngIf=\"qa.qTyp != 'File'\">\r\n {{ qa.ansValue }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Answer Book -->\r\n <div class=\"flexer1\" *ngIf=\"abItem\">\r\n <div class=\"\" *ngIf=\"abItem.Status__c == 'Completed'\">\r\n <div class=\"col-md-12\">\r\n <button [ngClass]=\"{'btn-text': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\"\r\n (click)=\"handleCancelClick()\">\r\n {{ qbItem.Cancel__c }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Group Actions -->\r\n <div class=\"align-edit-submit\" *ngIf=\"abItem.Status__c != 'Completed'\">\r\n <div class=\"col-md-6\">\r\n <button [ngClass]=\"{ 'btn-text2': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c }\" \r\n (click)=\"handleSubmitClick()\">\r\n {{ qbItem.Submit__c }}\r\n </button>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <button [ngClass]=\"{'grey': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\" \r\n (click)=\"handleBackClickNew()\">\r\n {{ qbItem.Edit__c }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\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}.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%}.checkmark{left:47.5%;height:20px;margin-right:7px;width:20px;background-color:#fff0;border-radius:50%;border:1px solid grey}.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}.form-group.content-box{background:#ffffff;padding:40px;border:1px solid #e8e8e8;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.shengel-myt-font3{padding-bottom:5px;padding-top:5px;padding-right:15px;padding-left:2px!important;color:#9a9a9a!important;font-size:14px!important;font-weight:400!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}.container-radio input:checked~.checkmark{background-color:#fff0}.checkmark:after{content:\"\";display:none}.container-radio input:checked~.checkmark:after{display:block}.container-radio .checkmark:after{top:3px;left:3px;width:12px;margin:3px;height:12px;border-radius:50%;background:#C5281C}.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%}.checkmark{left:3.8rem}.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}.form-row{padding-left:8px!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}.container1 input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.checkmark1{position:absolute;top:1px;left:-35%;height:21px;width:21px;background-color:#eee}.container1:hover input~.checkmark1{background-color:#ccc}.container1 input:checked~.checkmark1{content:\"\";background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxMiIgdmlld0JveD0iMCAwIDE2IDEyIj4gIDxwYXRoIGZpbGw9IiM4N0JFMUMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEyLjI0Mjk1NjUsMTcuNTcyNzczOCBMMjAuOTg1NTM0Nyw5LjEzMjYxNTg1IEMyMS4xNjg1NDM3LDguOTU1OTM3NDEgMjEuNDYyMTgwNyw4Ljk1NTc3NDM2IDIxLjY0NTM5MzYsOS4xMzIyNDk0NCBMMjIuODU5MTUxMywxMC4zMDEzNzAxIEMyMy4wNDY5NDk2LDEwLjQ4MjI2MiAyMy4wNDY5NDk2LDEwLjc3OTA1NjMgMjIuODU5MTUxMywxMC45NTk5NDgyIEwxMi41NzMwNjk2LDIwLjg2Nzc1MDYgQzEyLjM5MDAwNDcsMjEuMDQ0MDgzMSAxMi4wOTY2NTU2LDIxLjA0NDA4MzEgMTEuOTEzNTkwNiwyMC44Njc3NTA2IEw3LjE0MDg0ODc3LDE2LjI3MDUzMDMgQzYuOTU0MTc0MjgsMTYuMDkwNzIwOSA2Ljk1Mjg5MDU1LDE1Ljc5NjA5NTggNy4xMzc5OTEzMywxNS42MTQ3MjgyIEw4LjMzMTE3Njc5LDE0LjQ0NTYwNzUgQzguNTEzODA2NDgsMTQuMjY2NjYxMiA4LjgwOTMzMDgzLDE0LjI2NTQyMjYgOC45OTM1MTMyMiwxNC40NDI4MzE1IEwxMi4yNDI5NTY1LDE3LjU3Mjc3MzggWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTcgLTkpIi8+PC9zdmc+);background-position:.17rem .3rem;background-repeat:no-repeat;background-color:#d2d4d6;width:21px;height:21px}.checkmark1:after{content:\"\";position:absolute;display:none}.container1 input:checked~.checkmark1:after{display:block}.container1 .checkmark1:after{left:9px;top:5px;width:5px;height:10px;border-width:0 3px 3px 0}.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}@media ((min-width: 1200px)){.form-row{display:flex;flex-wrap:wrap}}\n"] }]
2125
+ args: [{ selector: "lib-questionnaire", encapsulation: ViewEncapsulation.None, providers: [ChangeService], template: "<!-- Spinner -->\r\n<ngx-spinner [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\r\n\r\n<!-- Back Processing -->\r\n<div *ngIf=\"backicon == false\" >\r\n <div class=\"backicon\" [style.visibility]=\"questionStack.length >0 ? 'visible' : 'hidden'\">\r\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.Status__c == 'Completed' ? 'summary-volver':'app-back1'\">\r\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.Back__c }}\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<!-- Question Hanlding -->\r\n<div *ngIf=\"questionItem\" [class]=\"qbItem.isShengel__c ? 'questiondiv1' : 'questiondiv1 padd-bottom'\">\r\n <!-- Progress Bar & Title -->\r\n <div *ngIf=\"questionItem.Title__c && qbItem.Progress_Bar__c\">\r\n <h1 class=\"header1\">{{ questionItem?.Title__c }}</h1>\r\n <div class=\"header2\">{{ questionItem?.SubTitle__c }}</div>\r\n </div>\r\n\r\n <!-- Progress & Grouping -->\r\n <div [ngClass]=\"{ questiondiv2: !qbItem?.Progress_Bar__c }\">\r\n <!-- Pie Chart Progress -->\r\n <div [ngClass]=\"{ bgColor: qbItem?.Progress_Bar__c }\">\r\n <div id=\"progress\" *ngIf=\"qbItem?.Progress_Bar__c\">\r\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\r\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\r\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \r\n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\r\n [startFromZero]=\"false\" [responsive]=\"false\" >\r\n </circle-progress>\r\n </div>\r\n </div>\r\n\r\n <!-- Show the Group/Module related to the Progress -->\r\n <div *ngIf=\"questionItem.Group__c && qbItem.Progress_Bar__c\"\r\n [ngClass]=\"{ questionalign: !qbItem?.Progress_Bar__c }\">\r\n <div class=\"largeTitle\">\r\n <h3 class=\"myt-font6 myt-text3\">\r\n {{ questionItem?.Group__c }}\r\n </h3>\r\n <div *ngIf=\"questionItem.Sub_Text__c != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.Sub_Text__c}}</div>\r\n <div *ngIf=\"questionItem.Sub_Text__c === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.Sub_Text__c}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Question Handling -->\r\n <div class=\"questiondiv2\">\r\n <!-- Title -->\r\n <div *ngIf=\"questionItem.Is_Title__c\">\r\n <div *ngIf=\"questionItem.Type__c != 'Book' && questionItem.Question_No__c!='6' && questionItem.Question_No__c!='9'\"> \r\n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\r\n {{questionItem?.Question_Text__c}}\r\n </h3>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!questionItem.Is_Title__c\" [class]=\"qbItem.isShengel__c ? 'header-style additional' : 'question-f-size additional'\">\r\n <div [innerHTML]=\"getText(questionItem?.Question_Text__c)\" >\r\n {{ questionItem?.Question_Text__c }}\r\n </div>\r\n </div>\r\n\r\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\r\n <div *ngIf=\"questionItem.Type__c == 'Book'\">\r\n <div *ngIf=\"questionItem.Question_No__c=='6'\">\r\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\r\n {{ questionItem?.Question_Text__c }}\r\n </h3>\r\n </div>\r\n </div>\r\n \r\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\r\n <div *ngIf=\"questionItem.Type__c == 'File' \">\r\n <div *ngIf=\"questionItem.Question_No__c=='9'\">\r\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\r\n {{questionItem?.Question_Text__c}}\r\n </h3>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Additional Info -->\r\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\r\n <div *ngIf=\"questionItem.Additional_Rich__c && qbItem.Progress_Bar__c\" >\r\n <div\r\n class=\"additional \" [innerHTML]=\"innerhtml\">\r\n </div>\r\n </div>\r\n <div *ngIf=\"questionItem.Additional_Rich__c && !qbItem.Progress_Bar__c\">\r\n <div class=\"info-alert ques-alert1\">\r\n <i class=\"fa fa-info fa-3x iposition icolor\" aria-hidden=\"true\"></i>\r\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown-->\r\n <div *ngIf=\"dropdownFlag\" >\r\n <div class=\"dis-flex\">\r\n <select \r\n [ngClass]=\"{\r\n 'dt-line myt-align3 myt-align2 dpDown dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.Progress_Bar__c,\r\n 'custom-select': !qbItem?.Progress_Bar__c\r\n }\" class=\"mr-sm-2 dd-height dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\r\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\" style=\"margin-left: 21.5rem !important;\">\r\n <option *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"option\" value=\"{{ opt.Value__c }}\">\r\n {{ opt.Value__c }}\r\n </option>\r\n <option value=\".\" disabled hidden>Bitte treffen Sie eine Auswahl</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Radio -->\r\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\r\n <div *ngIf=\"this.questionItem.error\" class=\"cond-div2\">\r\n {{ questionItem?.Error_Message__c }}\r\n </div>\r\n <div class=\"dis-flex\">\r\n <div *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"radio radioOption\" >\r\n <label class=\"radiocontainer container myt-font4\">{{ opt.Value__c }}\r\n <input type=\"radio\" [id]=\"opt.Id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" value=\"{{ opt.Value__c }}\"\r\n (change)=\"optionChange(opt.Value__c)\" />\r\n <span class=\"checkmark\"></span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Checkbox -->\r\n <div *ngIf=\"checkboxFlag\" class=\"\">\r\n <div *ngIf=\"this.questionItem.error\" class=\"cond-div2\">\r\n {{ questionItem?.Error_Message__c }}\r\n </div>\r\n <div class=\"dis-flex\">\r\n <div *ngFor=\"let item of optionValues\" class=\"radio col-md-6 optiondiv\">\r\n <label class=\" container1 \" >{{ item.Value__c }}\r\n <input type=\"checkbox\" [id]=\"item.Id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\r\n <span class='checkmark1'></span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Text -->\r\n <div *ngIf=\"textFlag\" class=\"col-md-12 myt-book1\">\r\n <div class=\"col-md-12\" class=\"dis-flex myt-align1\" [class]=\"'col-md-' + questionItem?.Size__c + ' paddingnone'\">\r\n <input type=\"text\" [(ngModel)]=\"inpValue\" [ngClass]=\"{\r\n 'boxoutline myt-font1 myt-book1': qbItem?.Progress_Bar__c,\r\n textBox1: !qbItem?.Progress_Bar__c\r\n }\" id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem?.error\r\n ? 'red'\r\n : inpValue?.length > 0\r\n ? '#87be1c'\r\n : ''\r\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\r\n <i class=\"fa fa-check check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Text Area -->\r\n <div *ngIf=\"taFlag\" class=\"col-md-12\">\r\n <div class=\"dis-flex\">\r\n <textarea class=\"ta-input\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem?.error\r\n ? 'red'\r\n : inpValue?.length > 0 && taFocusOut\r\n ? '#87be1c'\r\n : ''\r\n }}\" (focusout)=\"taFocusOut = true\"\r\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\r\n <i class=\"fa fa-check check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- CC Number Format -->\r\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\r\n <div class=\"dis-flex\">\r\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\"\r\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\r\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\r\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\r\n this.questionItem.error\r\n ? 'red'\r\n : inpValue?.length > 0\r\n ? '#87be1c'\r\n : ''\r\n }}\" />\r\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px;\"\r\n *ngIf=\"inpValue?.length > 0\"></i>\r\n </div>\r\n </div>\r\n <!-- END-->\r\n\r\n <!-- AlphaNumeric -->\r\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\r\n <div style=\"position:relative;\">\r\n <input type=text placeholder=\"0 of 0\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\r\n </div>\r\n </div>\r\n\r\n <!-- Email -->\r\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\r\n <div class=\"dis-flex\">\r\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\r\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem.error\r\n ? 'red'\r\n : inpValue?.length > 0\r\n ? '#87be1c'\r\n : ''\r\n }}\" />\r\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px\"\r\n *ngIf=\"inpValue?.length > 0\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- DateTime -->\r\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero myt-time1\" >\r\n <!-- Error Handling -->\r\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\r\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\r\n\r\n <!-- Date -->\r\n <div *ngIf=\"dateFlag\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label>\r\n <div class=\"dis-flex\">\r\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event)\"\r\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"Seleccione fecha\" (focus)=\"clearError()\">\r\n </my-date-picker>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Time -->\r\n <div *ngIf=\"timeFlag\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label>\r\n <div class=\"dis-flex\">\r\n <div [ngClass]=\"{'dt-line date-line dt-time': qbItem?.Progress_Bar__c,\r\n dateandTime: !qbItem?.Progress_Bar__c}\" \r\n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\r\n (focus)=\"(clearSQError) \">\r\n <select name=\"hours\" class=\"datetime showHour myt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">HH</option>\r\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\r\n {{ hour }}\r\n </option>\r\n </select>\r\n <span class=\"colon\"> : </span>\r\n <select name=\"minutes\" class=\"datetime showminute myt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">MM</option>\r\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\r\n {{ minute }}\r\n </option>\r\n </select>\r\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem?.X24_Hours__c == false\">\r\n <span class=\"colon\"> : </span>\r\n <select name=\"AM/PM\" class=\"myt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\r\n <option value=\"AM\">AM</option>\r\n <option value=\"PM\">PM</option>\r\n </select>\r\n <!-- <div [ngClass]=\"{'': qbItem.Progress_Bar__c, 'dateandTime': !qbItem.Progress_Bar__c}\"></div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <i class=\"fa check-icon3\" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Attachment / File -->\r\n <div *ngIf=\"fileFlag\">\r\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\r\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\r\n <label class=\"picture-upload\" for=\"file-upload\">\r\n <span class=\"picture-upload-child\">\r\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span class=\"fa fa-plus fa-2x picture-upload-child pic-upload icolor\">\r\n <i class=\"\" aria-hidden=\"true\"></i>\r\n </span>\r\n </label>\r\n </div>\r\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event)\" />\r\n </div>\r\n <ul *ngIf=\"\r\n attachments?.length > 0 &&\r\n questionItem?.Type__c === 'File' &&\r\n !qbItem?.Progress_Bar__c\r\n \" class=\"attach-ulist col-md-12\">\r\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\r\n {{ attachment.attachmentName\r\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\r\n </li>\r\n </ul>\r\n\r\n <!-- Attachment Progress -->\r\n <div *ngIf=\"qbItem.Progress_Bar__c\">\r\n <div *ngFor=\"let attachment of attachments\" class=\"file-uploading-box\">\r\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\r\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\r\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\r\n </div>\r\n <div class=\"file-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\r\n \r\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\r\n <span class=\"f-Name\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\"> {{ questionItem?.Question_Text__c}}</span>\r\n <label class=\"file-label \">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\r\n <input name=\"attachment\" type=\"file\" placeholder=\"Ticket kaufen\" multiple\r\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\r\n class=\"file-upload-btn\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Book -->\r\n <div *ngIf=\"bookFlag\">\r\n <div [class]=\"qbItem.isShengel__c ? 'form-group content-box' : 'form-group'\">\r\n <div class=\"form-row\">\r\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\r\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\r\n <div [class]=\"qbItem.isShengel__c ? '' : 'myt-align3'\" [class]=\"qbItem.isShengel__c ? 'col-lg-' + ques.Size__c + ' paddingnone' : 'col-md-' + ques.Size__c + ' paddingnone'\"\r\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.Id\">\r\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\">\r\n <span [class]=\"qbItem.isShengel__c ? 'dis-flex shengel-myt-font3 myt-font7' : 'dis-flex myt-font3 myt-font7' \">{{ ques?.Question__c }}</span>\r\n </div>\r\n <div class=\"col-md-12 paddingZero myt-dateTimeNew\" *ngIf=\"ques.Type__c === 'Time' || ques.Type__c === 'Date'\">\r\n <div *ngIf=\"ques.Type__c === 'Date'\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label>\r\n <div class=\"dis-flex dateandtime\">\r\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event)\"\r\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"Seleccione fecha\" (focus)=\"clearError()\" >\r\n </my-date-picker>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'Time'\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label>\r\n <div class=\"dis-flex dateandtime\">\r\n <div [ngClass]=\"{'dt-line date-line dt-time': qbItem?.Progress_Bar__c,\r\n dateandTime: !qbItem?.Progress_Bar__c}\" \r\n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\r\n (focus)=\"(clearSQError) \">\r\n <select name=\"hours\" class=\"datetime showHour myt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">HH</option>\r\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\r\n {{ hour }}\r\n </option>\r\n </select>\r\n <span class=\"colon\"> : </span>\r\n <select name=\"minutes\" class=\"datetime showminute myt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">MM</option>\r\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\r\n {{ minute }}\r\n </option>\r\n </select>\r\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem.X24_Hours__c == false\">\r\n <span class=\"colon\"> : </span>\r\n <select name=\"AM/PM\" class=\"myt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\r\n <option value=\"AM\">AM</option>\r\n <option value=\"PM\">PM</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\r\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"displayDate($event,ques)\"></app-custom-date-picker>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'Text'\">\r\n <app-custom-input\r\n [fromShengel]=\"qbItem.isShengel__c\"\r\n [value]=\"ques.input\"\r\n [ngClassValue]=\"{\r\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\r\n textBox: !qbItem.Progress_Bar__c\r\n }\"\r\n [question]=\"ques\" \r\n [idValue]=\"ques.Tracking_ID__c\"\r\n [focusEvent]=\"clearSQError(ques.Id)\"\r\n [error]=\"ques.error\"\r\n [placeholder]=\"ques.Question__c\"\r\n (inputValue)=\"selectedInput($event,ques)\">\r\n </app-custom-input>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'Location'\">\r\n <!-- for pick location -->\r\n <app-pick-location [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\r\n </div>\r\n <!-- for text area -->\r\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\r\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\r\n </div>\r\n <!-- for to data table we use 'data' type question -->\r\n <div *ngIf=\"ques.Type__c === 'Data'\">\r\n <app-custom-table [tableHeader]=\"ques.tableHeader\" [tableData]=\"getTableData(ques)\" [tableIndex]=\"i\" (tableDataChange)=\"getData($event)\"></app-custom-table>\r\n </div>\r\n\r\n <div *ngIf=\"ques.Type__c === 'Email'\">\r\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\r\n </div>\r\n\r\n <div *ngIf=\"ques.Type__c === 'File'\">\r\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\r\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\r\n <span class=\"picture-upload-child\">\r\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span class=\"\r\n fa fa-plus fa-2x\r\n picture-upload-child\r\n pic-upload\r\n icolor\r\n \">\r\n <i class=\"\" aria-hidden=\"true\"></i>\r\n </span>\r\n </label>\r\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\r\n </div>\r\n\r\n <ul *ngIf=\"\r\n attachments?.length > 0 &&\r\n ques.Type__c === 'File' &&\r\n !qbItem.Progress_Bar__c\r\n \" class=\"attach-ulist col-md-12\">\r\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\r\n {{ attachment.attachmentName\r\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\r\n </li>\r\n </ul>\r\n <div class=\"myt-box\" *ngIf=\"qbItem.Progress_Bar__c\">\r\n\r\n <div *ngFor=\"let attachment of attachments\" class=\"file-uploading-box\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />\r\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\r\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\r\n </div>\r\n <div class=\"file-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />\r\n <span class=\"f-Name\">{{ ques?.Question__c }}</span>\r\n <label class=\"file-label \">\r\n <span style=\"color: #c5281c;text-decoration:underline\">\r\n Adjuntar\r\n </span>\r\n <input name=\"attachment\" type=\"file\" placeholder=\"Ticket kaufen\" multiple\r\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\r\n class=\"file-upload-btn\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Table -->\r\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\r\n <app-custom-table \r\n [question]=\"ques\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\r\n </app-custom-table>\r\n </div>\r\n\r\n <!-- Dropdown -->\r\n <div *ngIf=\"ques.Type__c === 'Dropdown'\" class=\"\">\r\n <!-- for common dropdown -->\r\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel__c\"\r\n [options]=\"ques.Question_Options__r.records\"\r\n [apiMeta]=\"ques.Sub_Text__c\"\r\n [id]=\"ques.Name\"\r\n [selectedValue]=\"ques.input\"\r\n [placeholder]=\"'---Select---'\"\r\n [errorMessage]=\"ques.Error_Message__c\"\r\n [error]=\"ques.error\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\r\n </app-custom-dropdown>\r\n <app-dropdown-with-flag *ngIf=\"ques.isDependentPicklist && !ques.dropDownOnly\" [certified]=\"ques.certifiedFlag\" [JobPerformerCertificates]=\"ques.certificateList\" (flagDropDownChange)=\"dependentChange($event)\"></app-dropdown-with-flag>\r\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\r\n </div> \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--List start-->\r\n <div *ngIf=\"listFlag\">\r\n <div class=\"form-group\">\r\n <div class=\"form-row\">\r\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\r\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\r\n <div class=\"myt-align3\" [class]=\"'col-md-' + ques.Size__c + ' paddingnone'\"\r\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.Id);let i = index\">\r\n <div>\r\n <span class=\"dis-flex myt-font3 myt-font7\">{{ ques?.Question__c }}</span>\r\n </div>\r\n <div *ngIf=\"ques.Type__c === 'Text'\">\r\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\r\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\r\n textBox: !qbItem.Progress_Bar__c\r\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\"\r\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\r\n </div>\r\n </div>\r\n <div class=\"\" *ngIf=\"addFlag\">\r\n <button (click)=\"Add(getLocalSubQuestions(questionItem.Id))\" class=\"btn\"><i class=\"fa fa-plus\" ></i>Add</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!--List End-->\r\n\r\n <!-- Actions -->\r\n <div *ngIf=\"individualBookButton\" class=\"flexer\">\r\n <!-- Backward / Back -->\r\n <div class=\"backbutton\" [ngClass]=\"{ 'col-md-6': !qbItem.Progress_Bar__c }\"\r\n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\">\r\n <div [ngClass]=\"{}\">\r\n <button [ngClass]=\"{\r\n 'left-bt': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color':\r\n !qbItem.Progress_Bar__c\r\n }\" (click)=\"handleBackClick()\">\r\n {{ qbItem?.Back__c }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Forward / Next -->\r\n <div [ngClass]=\"{ 'col-md-6': !qbItem.Progress_Bar__c }\">\r\n <div>\r\n <button [ngClass]=\"{\r\n 'rusty': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color':\r\n !qbItem.Progress_Bar__c\r\n }\" (click)=\"handleNextClick()\">\r\n {{ qbItem.Next__c }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Summary -->\r\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\r\n 'col-md-12':!qbItem.Progress_Bar__c\r\n }\">\r\n <h1 class=\"header1 summarypadd\" >{{ qbItem.SubTitle__c }}</h1> \r\n <div id=\"progress2\" *ngIf=\"!qbItem.Progress_Bar__c && this.abItem.Status__c != 'Completed' \">\r\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\r\n <div *ngFor=\"let qa of summary\">\r\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\r\n <div [ngClass]=\"{ summary: !qbItem.Progress_Bar__c }\">\r\n <div *ngIf=\"!qbItem.Edit__c\"\r\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\r\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\r\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\r\n </div>\r\n <div *ngIf=\"qbItem.Edit__c\"\r\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\r\n <div [ngClass]=\"{ 'question': this.abItem.Status__c === 'Completed' }\"\r\n [innerHTML]=\"getText(qa.quesValue)\">\r\n {{ qa.quesValue }}\r\n </div>\r\n </div>\r\n <div class=\"answer\" >\r\n <div *ngIf=\"qa.qTyp === 'File'\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"icon-edit-summary\" />\r\n {{ qa.ansValue }}\r\n </div>\r\n <div *ngIf=\"qa.qTyp != 'File'\">{{ qa.ansValue }}</div>\r\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\r\n <button class=\"edit\" (click)=\"handleEditClick(qa.quesId)\">\r\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"icon-editios\"/>\r\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"icon-edit\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"this.abItem.Status__c === 'Completed'\" class=\"col-lg-12\">\r\n <div class=\"panel-group panel-group-joined\" id=\"ePTW-details\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h4 class=\"panel-title\">\r\n <a data-toggle=\"collapse\" data-parent=\"#ePTW-details\" href=\"#collapseOne\" class=\"collapsed\">\r\n PTW Details\r\n </a>\r\n </h4>\r\n </div>\r\n <div id=\"collapseOne\" class=\"panel-collapse collapse\">\r\n <div class=\"panel-body\">\r\n <div class=\"row\">\r\n <ng-container *ngFor=\"let item of summaryData; let i = index\">\r\n <ng-container *ngIf=\"i % 2 === 0\">\r\n <div class=\"col-lg-6 m-b-30\">\r\n <label>{{ getKey(item) }}</label>\r\n <p class=\"font-size\">{{ getValue(item) || 'N/A' }}</p>\r\n </div>\r\n <div class=\"col-lg-6\" *ngIf=\"summaryData[i + 1]\">\r\n <label>{{ getKey(summaryData[i + 1]) }}</label>\r\n <p class=\"font-size\">{{ getValue(summaryData[i + 1]) || 'N/A' }}</p>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div id=\"progress2\" *ngIf=\"qbItem.Progress_Bar__c \">\r\n <div [ngClass]=\"{'bgColor summary-top' : qbItem.Progress_Bar__c }\" >\r\n <div id=\"progress-summary\" *ngIf=\"qbItem.Progress_Bar__c\">\r\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\r\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\r\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \r\n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\r\n [startFromZero]=\"false\" [responsive]=\"false\" >\r\n </circle-progress>\r\n \r\n <div *ngIf=\"qbItem.Summary_Text__c && qbItem.Progress_Bar__c\" \r\n [ngClass]=\"{ summaryTitle: qbItem.Progress_Bar__c }\">\r\n <h3 class=\"subTitle\" >{{ qbItem.Summary_Text__c }}</h3>\r\n <div *ngIf=\"abItem.Status__c != 'Completed'\" class=\"subTitle1\" >{{ qbItem.Summary_Sub_Text__c}}</div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\r\n <h3 class=\"summary-h\">\r\n {{ qbItem.Summary_Text__c }}\r\n </h3>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\r\n <div class=\"summary-groupText myt-font2\">\r\n <!-- <p>Informe de da\u00F1o</p> -->\r\n </div>\r\n <div *ngFor=\"let qa of summary\" >\r\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\r\n <div [ngClass]=\"{ summary: this.abItem.Status__c != 'Completed' && !qbItem.Progress_Bar__c }\">\r\n <div *ngIf=\"!qbItem.Edit__c\"\r\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\r\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\r\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\r\n </div>\r\n <div *ngIf=\"qbItem.Edit__c\"\r\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\r\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.Status__c === 'Completed' }\"\r\n [innerHTML]=\"getText(qa.quesValue)\">\r\n {{ qa.quesValue }}\r\n </div>\r\n </div>\r\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\r\n <button class=\"edit\" (click)=\"handleEditClick(qa.quesId)\">\r\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"icon-editios\"/>\r\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"icon-edit\" />\r\n </button>\r\n </div>\r\n \r\n <div class=\"answer \" >\r\n <div *ngIf=\"qa.qTyp === 'File'\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"icon-edit-summary\" />\r\n {{ qa.ansValue }}\r\n </div>\r\n <div *ngIf=\"qa.qTyp != 'File'\">\r\n {{ qa.ansValue }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Answer Book -->\r\n <div class=\"flexer1\" *ngIf=\"abItem\">\r\n <div class=\"\" *ngIf=\"abItem.Status__c == 'Completed'\">\r\n <div class=\"col-md-12\">\r\n <button [ngClass]=\"{'btn-text': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\"\r\n (click)=\"handleCancelClick()\">\r\n {{ qbItem.Cancel__c }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Group Actions -->\r\n <div class=\"align-edit-submit\" *ngIf=\"abItem.Status__c != 'Completed'\">\r\n <div class=\"col-md-6\">\r\n <button [ngClass]=\"{ 'btn-text2': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c }\" \r\n (click)=\"handleSubmitClick()\">\r\n {{ qbItem.Submit__c }}\r\n </button>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <button [ngClass]=\"{'grey': qbItem.Progress_Bar__c,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\" \r\n (click)=\"handleBackClickNew()\">\r\n {{ qbItem.Edit__c }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\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}.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%}.checkmark{left:47.5%;height:20px;margin-right:7px;width:20px;background-color:#fff0;border-radius:50%;border:1px solid grey}.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}.form-group.content-box{background:#ffffff;padding:40px;border:1px solid #e8e8e8;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.shengel-myt-font3{padding-bottom:5px;padding-top:5px;padding-right:15px;padding-left:2px!important;color:#9a9a9a!important;font-size:14px!important;font-weight:400!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}.container-radio input:checked~.checkmark{background-color:#fff0}.checkmark:after{content:\"\";display:none}.container-radio input:checked~.checkmark:after{display:block}.container-radio .checkmark:after{top:3px;left:3px;width:12px;margin:3px;height:12px;border-radius:50%;background:#C5281C}.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%}.checkmark{left:3.8rem}.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}.form-row{padding-left:8px!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}.container1 input{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.checkmark1{position:absolute;top:1px;left:-35%;height:21px;width:21px;background-color:#eee}.container1:hover input~.checkmark1{background-color:#ccc}.container1 input:checked~.checkmark1{content:\"\";background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxMiIgdmlld0JveD0iMCAwIDE2IDEyIj4gIDxwYXRoIGZpbGw9IiM4N0JFMUMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEyLjI0Mjk1NjUsMTcuNTcyNzczOCBMMjAuOTg1NTM0Nyw5LjEzMjYxNTg1IEMyMS4xNjg1NDM3LDguOTU1OTM3NDEgMjEuNDYyMTgwNyw4Ljk1NTc3NDM2IDIxLjY0NTM5MzYsOS4xMzIyNDk0NCBMMjIuODU5MTUxMywxMC4zMDEzNzAxIEMyMy4wNDY5NDk2LDEwLjQ4MjI2MiAyMy4wNDY5NDk2LDEwLjc3OTA1NjMgMjIuODU5MTUxMywxMC45NTk5NDgyIEwxMi41NzMwNjk2LDIwLjg2Nzc1MDYgQzEyLjM5MDAwNDcsMjEuMDQ0MDgzMSAxMi4wOTY2NTU2LDIxLjA0NDA4MzEgMTEuOTEzNTkwNiwyMC44Njc3NTA2IEw3LjE0MDg0ODc3LDE2LjI3MDUzMDMgQzYuOTU0MTc0MjgsMTYuMDkwNzIwOSA2Ljk1Mjg5MDU1LDE1Ljc5NjA5NTggNy4xMzc5OTEzMywxNS42MTQ3MjgyIEw4LjMzMTE3Njc5LDE0LjQ0NTYwNzUgQzguNTEzODA2NDgsMTQuMjY2NjYxMiA4LjgwOTMzMDgzLDE0LjI2NTQyMjYgOC45OTM1MTMyMiwxNC40NDI4MzE1IEwxMi4yNDI5NTY1LDE3LjU3Mjc3MzggWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTcgLTkpIi8+PC9zdmc+);background-position:.17rem .3rem;background-repeat:no-repeat;background-color:#d2d4d6;width:21px;height:21px}.checkmark1:after{content:\"\";position:absolute;display:none}.container1 input:checked~.checkmark1:after{display:block}.container1 .checkmark1:after{left:9px;top:5px;width:5px;height:10px;border-width:0 3px 3px 0}.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}@media ((min-width: 1200px)){.form-row{display:flex;flex-wrap:wrap}}\n"] }]
2126
2126
  }], ctorParameters: function () { return [{ type: i1.SalesforceService }, { type: i2.DataService }, { type: i3.ChangeService }, { type: i4.ActivatedRoute }, { type: i5.DomSanitizer }, { type: i6.NgxSpinnerService }, { type: i7.UntypedFormBuilder }, { type: i8.DeviceDetectorService }, { type: i0.ElementRef }]; }, propDecorators: { qbId: [{
2127
2127
  type: Input
2128
2128
  }], insuranceStartDate: [{
@@ -2136,4 +2136,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
2136
2136
  }], handlePage: [{
2137
2137
  type: Output
2138
2138
  }] } });
2139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvcXVlc3Rpb25uYWlyZS9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbm5haXJlL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FFbEIsTUFBTSxlQUFlLENBQUM7QUFTdkIsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTlELE9BQU8sRUFDTCxRQUFRLEVBR1IsYUFBYSxFQUNiLFlBQVksRUFFWixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixhQUFhLEVBQ2QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUVMLFVBQVUsRUFNVixNQUFNLEdBQ1AsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVXRCLE1BQU0sT0FBTyxzQkFBc0I7SUFvUXZCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUE7SUEzUUQsSUFBSSxDQUFTO0lBQ2Isa0JBQWtCLENBQVM7SUFDM0IsSUFBSSxDQUFTO0lBQ2IsR0FBRyxDQUFTO0lBQ1gsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDakMsVUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBRTdELE1BQU0sQ0FBUztJQUNSLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDbEIsTUFBTSxDQUFhO0lBQ25CLE1BQU0sQ0FBZTtJQUNy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QWdDLENBQUM7WUFDbkQsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQzt3R0F0dUVZLHNCQUFzQjs0RkFBdEIsc0JBQXNCLDZNQUh0QixDQUFDLGFBQWEsQ0FBQywrQ0NwRDVCLDJrcENBNHNCTTs7NEZEcnBCTyxzQkFBc0I7a0JBUGxDLFNBQVM7K0JBQ0UsbUJBQW1CLGlCQUVkLGlCQUFpQixDQUFDLElBQUksYUFDMUIsQ0FBQyxhQUFhLENBQUM7b1ZBSWpCLElBQUk7c0JBQVosS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIEVsZW1lbnRSZWYsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgU2FsZXNmb3JjZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2FsZXNmb3JjZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IElNeURhdGVNb2RlbCwgSU15RHBPcHRpb25zIH0gZnJvbSBcIm15ZGF0ZXBpY2tlclwiO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE5neFNwaW5uZXJTZXJ2aWNlIH0gZnJvbSBcIm5neC1zcGlubmVyXCI7XHJcbi8vaW1wb3J0IHsgTmd4SW5kZXhlZERCU2VydmljZSwgSW5kZXhEZXRhaWxzfSBmcm9tICduZ3gtaW5kZXhlZC1kYic7XHJcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xyXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JzsgXHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgUXVlc3Rpb24sXHJcbiAgUXVlc3Rpb25Cb29rLFxyXG4gIEFuc3dlckJvb2ssXHJcbiAgQW5zd2VyV3JhcHBlcixcclxuICBFcnJvcldyYXBwZXIsXHJcbiAgT3B0aW9uLFxyXG4gIE9wdGlvblZhbHVlLFxyXG4gIEF0dGFjaG1lbnRXcmFwcGVyLFxyXG4gIEF0dGFjaG1lbnQsXHJcbiAgTG9jYWxRdWVzdGlvblxyXG59IGZyb20gXCIuLi8uLi93cmFwcGVyXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIFRFU1RRVUVTVElPTixcclxuICBEVFFVRVNUSU9OLFxyXG4gIEZJTEVRVUVTVElPTixcclxuICBUQVFVRVNUSU9OLFxyXG4gIFJBRElPUVVFU1RJT04sXHJcbiAgQ0hFQ0tRVUVTVElPTixcclxuICBCT09LUVVFU1RJT04sXHJcbiAgVEVTVFFCLFxyXG59IGZyb20gXCIuLi8uLi9zYW1wbGVcIjtcclxuaW1wb3J0IHsgZnJvbSB9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItcXVlc3Rpb25uYWlyZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgcHJvdmlkZXJzOiBbQ2hhbmdlU2VydmljZV0sXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50LmNzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9ubmFpcmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHFiSWQ6IHN0cmluZztcclxuICBASW5wdXQoKSBpbnN1cmFuY2VTdGFydERhdGU6IHN0cmluZztcclxuICBASW5wdXQoKSBzZXJ2OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdGtuOiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIGhhbmRsZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBoYW5kbGVQYWdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgcGFyYW1zOiBQYXJhbXM7XHJcbiAgcHVibGljIGRldmljZUluZm8gPSBudWxsO1xyXG4gIHB1YmxpYyBhYkl0ZW06IEFuc3dlckJvb2s7XHJcbiAgcHVibGljIHFiSXRlbTogUXVlc3Rpb25Cb29rO1xyXG4gIHB1YmxpYyBxdWVzdGlvbkl0ZW06IFF1ZXN0aW9uO1xyXG4gIHB1YmxpYyBhbnN3ZXJXcmFwOiBBbnN3ZXJXcmFwcGVyO1xyXG5cclxuICAvLyBDT05ESVRJT05BTCBUWVBFU1xyXG4gIHB1YmxpYyByYWRpb0ZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZGF0YUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gT1BUSU9OT05MWSBUWVBFU1xyXG4gIHB1YmxpYyBkcm9wZG93bkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgY2hlY2tib3hGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIFVOQ09ORElUSU9OQUwgVFlQRVNcclxuICBwdWJsaWMgdGV4dEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdGFGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGR0RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB0aW1lRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkYXRlRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBmaWxlRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBlbWFpbEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgbnVtYmVyRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBhbHBoYW51bWVyaWNGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGJvb2tGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGxpc3RGbGFnOiBib29sZWFuPSBmYWxzZTtcclxuICAvL0JhY2sgYnV0dG9uXHJcbiAgcHVibGljIGJhY2tCdXR0b25GbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIG9wdGlvblZhbHVlczogT3B0aW9uVmFsdWVbXSA9IFtdO1xyXG4gIHB1YmxpYyBzdWJRdWVzdGlvbnM6IFF1ZXN0aW9uW10gPSBbXTtcclxuICBwdWJsaWMgaW5wVmFsdWU6IHN0cmluZztcclxuICBwdWJsaWMgYW5zd2VyTWFwID0gbmV3IE1hcCgpO1xyXG4gIHB1YmxpYyBkYXRlTWFwID0gbmV3IE1hcCgpO1xyXG4gIHB1YmxpYyBzZWxlY3RlZGhvdXJNYXAgPSBuZXcgTWFwKCk7XHJcbiAgcHVibGljIHNlbGVjdGVkbWludXRlTWFwID0gbmV3IE1hcCgpO1xyXG4gIHB1YmxpYyBhdHRhY2htZW50c01hcCA9IG5ldyBNYXAoKTtcclxuICBwdWJsaWMgc3FPcHRpb25zID0gbmV3IE1hcCgpO1xyXG4gIHB1YmxpYyBzdWJBbnNNYXAgPSBuZXcgTWFwKCk7XHJcbiAgcHVibGljIGxvY2FsU3ViUXVlc3Rpb25zOiBMb2NhbFF1ZXN0aW9uW10gPSBbXTtcclxuICBwdWJsaWMgcXVlc3Rpb25TdGFjayA9IFtdO1xyXG4gIHB1YmxpYyBxdWVzdGlvbk5hbWUgPSBbXTtcclxuICBwdWJsaWMgYXR0YWNobWVudHM6IGFueVtdID0gW107XHJcbiAgcHVibGljIGF0dGFjaG1lbnRJZExpc3Q6IGFueVtdID0gW107XHJcbiAgcHVibGljIGF0dGFjaG1lbnRJZDogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgYXR0YWNobWVudDogYW55O1xyXG4gIHB1YmxpYyBhbGxvd2VkRmlsZUV4dGVuc2lvbjogc3RyaW5nW107XHJcbiAgcHVibGljIGZpbGVFeGNlZWRlZExpbWl0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGZpbGVUeXBlSW5jb3JyZWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGJhY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgYmFja2ljb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgY2hlY2s6IGJvb2xlYW47XHJcbiAgcHVibGljIHBvcDogYm9vbGVhbjtcclxuICBwdWJsaWMgbG9jYWxEYXRlOiBzdHJpbmc7XHJcbiAgcHVibGljIGN1cnJlbnROYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIHBhdGhxdWVzdGlvbjogbnVtYmVyO1xyXG4gIHB1YmxpYyBwZXJjZW50OiBudW1iZXI7XHJcbiAgcHVibGljIGNvdW50OiBudW1iZXI7XHJcbiAgcHVibGljIHRhRm9jdXNPdXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgbm90VmFsaWRBY2NOdW06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc3BsQ0NCYWNrQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc3VtbWFyeSA9IFtdO1xyXG4gIHB1YmxpYyBsb2NhbFN1YlFNYXAgPSBuZXcgTWFwKCk7XHJcbiAgcHVibGljIGtleUluZGV4OiBudW1iZXIgPSAwO1xyXG4gIC8vcHVibGljIHNxdWVzOiBzdHJpbmc7XHJcbiAgcHVibGljIHNlbERhdGU6IGFueSA9IHt9O1xyXG4gIHB1YmxpYyBzZWxlY3REYXRlOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB0b2RheTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgcHJpdmF0ZSBlbDogSFRNTEVsZW1lbnQ7XHJcbiAgcHVibGljIGlubmVyaHRtbDogYW55O1xyXG4gIHB1YmxpYyBwb3NzaWJpbGl0aWVzOiBhbnk7XHJcbiAgcHVibGljIGlubmVyaHRtbDE6IGFueTtcclxuICBwdWJsaWMgc3VtbWFyeURhdGEgPVtdO1xyXG4gIFxyXG4gIFxyXG4gIHRhYmxlRGF0YTE6IGFueVtdPSBbXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAnRmlyZSBFeHRpbmd1aXNoZXInLFxyXG4gICAgICBpbWFnZVNyYzogJ2h0dHBzOi8vbWVkaWEuaXN0b2NrcGhvdG8uY29tL2lkLzk0Mzc3NjQzNC92ZWN0b3IvZmlyZS1leHRpbmd1aXNoZXItaWNvbi12ZWN0b3IuanBnP3M9NjEyeDYxMiZ3PTAmaz0yMCZjPUtWYUR4dVYyVFY3ZmR3bjA5VGc5SGVGM01OeW9KQzVrMllxU0F6cFN0RFk9JyxcclxuICAgICAgYWx0VGV4dDogJ2V4dGluZ3Vpc2hlcicsXHJcbiAgICAgIG5hbWU6ICdGaXJlRXN0aW5ndWlzaGVyJyxcclxuICAgICAgdmFsdWU6ICdZRVMnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBsYWJlbDogJyBGaXJlIEJsYW5rZXQnLFxyXG4gICAgICBpbWFnZVNyYzogJ2h0dHBzOi8vbWVkaWEuaXN0b2NrcGhvdG8uY29tL2lkLzk0Mzc3NjQzNC92ZWN0b3IvZmlyZS1leHRpbmd1aXNoZXItaWNvbi12ZWN0b3IuanBnP3M9NjEyeDYxMiZ3PTAmaz0yMCZjPUtWYUR4dVYyVFY3ZmR3bjA5VGc5SGVGM01OeW9KQzVrMllxU0F6cFN0RFk9JyxcclxuICAgICAgYWx0VGV4dDogJ2ZpcmVCbGFua2V0JyxcclxuICAgICAgbmFtZTogJ2ZpcmVCbGFua2V0JyxcclxuICAgICAgdmFsdWU6ICdZRVMnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBsYWJlbDogJ0lsbHVtaW5hdGlvbicsXHJcbiAgICAgIGltYWdlU3JjOiAnaHR0cHM6Ly9tZWRpYS5pc3RvY2twaG90by5jb20vaWQvOTQzNzc2NDM0L3ZlY3Rvci9maXJlLWV4dGluZ3Vpc2hlci1pY29uLXZlY3Rvci5qcGc/cz02MTJ4NjEyJnc9MCZrPTIwJmM9S1ZhRHh1VjJUVjdmZHduMDlUZzlIZUYzTU55b0pDNWsyWXFTQXpwU3REWT0nLFxyXG4gICAgICBhbHRUZXh0OiAnZmlyZUJsYWlsbHVtaW5hdGlvbm5rZXQnLFxyXG4gICAgICBuYW1lOiAnaWxsdW1pbmF0aW9uJyxcclxuICAgICAgdmFsdWU6ICdZRVMnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBsYWJlbDogJ1ZlbnRpbGF0aW9uJyxcclxuICAgICAgaW1hZ2VTcmM6ICdodHRwczovL21lZGlhLmlzdG9ja3Bob3RvLmNvbS9pZC85NDM3NzY0MzQvdmVjdG9yL2ZpcmUtZXh0aW5ndWlzaGVyLWljb24tdmVjdG9yLmpwZz9zPTYxMng2MTImdz0wJms9MjAmYz1LVmFEeHVWMlRWN2Zkd24wOVRnOUhlRjNNTnlvSkM1azJZcVNBenBTdERZPScsXHJcbiAgICAgIGFsdFRleHQ6ICdWZW50aWxhdGlvbicsXHJcbiAgICAgIG5hbWU6ICdWZW50aWxhdGlvbicsXHJcbiAgICAgIHZhbHVlOiAnWUVTJ1xyXG4gICAgfVxyXG4gIF07XHJcbiAgdGFibGVEYXRhMjogYW55W109IFtcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICdIZWFkIFByb3RlY3Rpb24nLFxyXG4gICAgICBpbWFnZVNyYzogJ2h0dHBzOi8vbWVkaWEuaXN0b2NrcGhvdG8uY29tL2lkLzk0Mzc3NjQzNC92ZWN0b3IvZmlyZS1leHRpbmd1aXNoZXItaWNvbi12ZWN0b3IuanBnP3M9NjEyeDYxMiZ3PTAmaz0yMCZjPUtWYUR4dVYyVFY3ZmR3bjA5VGc5SGVGM01OeW9KQzVrMllxU0F6cFN0RFk9JyxcclxuICAgICAgYWx0VGV4dDogJ2V4dGluZ3Vpc2hlcicsXHJcbiAgICAgIG5hbWU6ICdjaGVjazEnLFxyXG4gICAgICB2YWx1ZTogJ1lFUydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAnV2VsZGluZyBIb29kJyxcclxuICAgICAgaW1hZ2VTcmM6ICdodHRwczovL21lZGlhLmlzdG9ja3Bob3RvLmNvbS9pZC85NDM3NzY0MzQvdmVjdG9yL2ZpcmUtZXh0aW5ndWlzaGVyLWljb24tdmVjdG9yLmpwZz9zPTYxMng2MTImdz0wJms9MjAmYz1LVmFEeHVWMlRWN2Zkd24wOVRnOUhlRjNNTnlvSkM1azJZcVNBenBTdERZPScsXHJcbiAgICAgIGFsdFRleHQ6ICdmaXJlQmxhbmtldCcsXHJcbiAgICAgIG5hbWU6ICdjaGVjazInLFxyXG4gICAgICB2YWx1ZTogJ1lFUydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAnRXllIFByb3RlY3Rpb24nLFxyXG4gICAgICBpbWFnZVNyYzogJ2h0dHBzOi8vbWVkaWEuaXN0b2NrcGhvdG8uY29tL2lkLzk0Mzc3NjQzNC92ZWN0b3IvZmlyZS1leHRpbmd1aXNoZXItaWNvbi12ZWN0b3IuanBnP3M9NjEyeDYxMiZ3PTAmaz0yMCZjPUtWYUR4dVYyVFY3ZmR3bjA5VGc5SGVGM01OeW9KQzVrMllxU0F6cFN0RFk9JyxcclxuICAgICAgYWx0VGV4dDogJ1Byb3RlY3Rpb24nLFxyXG4gICAgICBuYW1lOiAnUHJvdGVjdGlvbicsXHJcbiAgICAgIHZhbHVlOiAnWUVTJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICdIZWFyaW5nIFByb3RlY3Rpb24nLFxyXG4gICAgICBpbWFnZVNyYzogJ2h0dHBzOi8vbWVkaWEuaXN0b2NrcGhvdG8uY29tL2lkLzk0Mzc3NjQzNC92ZWN0b3IvZmlyZS1leHRpbmd1aXNoZXItaWNvbi12ZWN0b3IuanBnP3M9NjEyeDYxMiZ3PTAmaz0yMCZjPUtWYUR4dVYyVFY3ZmR3bjA5VGc5SGVGM01OeW9KQzVrMllxU0F6cFN0RFk9JyxcclxuICAgICAgYWx0VGV4dDogJ0hlYXJpbmcnLFxyXG4gICAgICBuYW1lOiAnSGVhcmluZycsXHJcbiAgICAgIHZhbHVlOiAnWUVTJ1xyXG4gICAgfVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBob3VyczogYW55W10gPSBbXHJcbiAgICBcIjAxXCIsXHJcbiAgICBcIjAyXCIsXHJcbiAgICBcIjAzXCIsXHJcbiAgICBcIjA0XCIsXHJcbiAgICBcIjA1XCIsXHJcbiAgICBcIjA2XCIsXHJcbiAgICBcIjA3XCIsXHJcbiAgICBcIjA4XCIsXHJcbiAgICBcIjA5XCIsXHJcbiAgICBcIjEwXCIsXHJcbiAgICBcIjExXCIsXHJcbiAgICBcIjEyXCIsXHJcbiAgXTtcclxuXHJcbiAgcHVibGljIG1pbnV0ZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgXCIwMFwiLFxyXG4gICAgXCIwMVwiLFxyXG4gICAgXCIwMlwiLFxyXG4gICAgXCIwM1wiLFxyXG4gICAgXCIwNFwiLFxyXG4gICAgXCIwNVwiLFxyXG4gICAgXCIwNlwiLFxyXG4gICAgXCIwN1wiLFxyXG4gICAgXCIwOFwiLFxyXG4gICAgXCIwOVwiLFxyXG4gICAgXCIxMFwiLFxyXG4gICAgXCIxMVwiLFxyXG4gICAgXCIxMlwiLFxyXG4gICAgXCIxM1wiLFxyXG4gICAgXCIxNFwiLFxyXG4gICAgXCIxNVwiLFxyXG4gICAgXCIxNlwiLFxyXG4gICAgXCIxN1wiLFxyXG4gICAgXCIxOFwiLFxyXG4gICAgXCIxOVwiLFxyXG4gICAgXCIyMFwiLFxyXG4gICAgXCIyMVwiLFxyXG4gICAgXCIyMlwiLFxyXG4gICAgXCIyM1wiLFxyXG4gICAgXCIyNFwiLFxyXG4gICAgXCIyNVwiLFxyXG4gICAgXCIyNlwiLFxyXG4gICAgXCIyN1wiLFxyXG4gICAgXCIyOFwiLFxyXG4gICAgXCIyOVwiLFxyXG4gICAgXCIzMFwiLFxyXG4gICAgXCIzMVwiLFxyXG4gICAgXCIzMlwiLFxyXG4gICAgXCIzM1wiLFxyXG4gICAgXCIzNFwiLFxyXG4gICAgXCIzNVwiLFxyXG4gICAgXCIzNlwiLFxyXG4gICAgXCIzN1wiLFxyXG4gICAgXCIzOFwiLFxyXG4gICAgXCIzOVwiLFxyXG4gICAgXCI0MFwiLFxyXG4gICAgXCI0MVwiLFxyXG4gICAgXCI0MlwiLFxyXG4gICAgXCI0M1wiLFxyXG4gICAgXCI0NFwiLFxyXG4gICAgXCI0NVwiLFxyXG4gICAgXCI0NlwiLFxyXG4gICAgXCI0N1wiLFxyXG4gICAgXCI0OFwiLFxyXG4gICAgXCI0OVwiLFxyXG4gICAgXCI1MFwiLFxyXG4gICAgXCI1MVwiLFxyXG4gICAgXCI1MlwiLFxyXG4gICAgXCI1M1wiLFxyXG4gICAgXCI1NFwiLFxyXG4gICAgXCI1NVwiLFxyXG4gICAgXCI1NlwiLFxyXG4gICAgXCI1N1wiLFxyXG4gICAgXCI1OFwiLFxyXG4gICAgXCI1OVwiLFxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RlZEhvdXI6IHN0cmluZyA9IFwiXCI7XHJcbiAgcHVibGljIHNlbGVjdGVkTWludXRlOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHB1YmxpYyBzZWxlY3RlZE1lcmlkaWVtOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHB1YmxpYyB2YWx1ZU5hbWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgcHVibGljIHZhbHVlTmFtZTE6IHN0cmluZyA9IFwiXCI7XHJcbiAgcHVibGljIGJvb2tGbGFnQWNjZXB0OiBzdHJpbmdbXTtcclxuICBwdWJsaWMgcmVjb3JkSWQ6IHN0cmluZztcclxuICBwdWJsaWMgY3VycmVudFF1ZXN0aW9uSWQ6IHN0cmluZztcclxuICBwdWJsaWMgc3Bpbm5lclR5cGU6IHN0cmluZztcclxuICBwdWJsaWMgc3Bpbm5lck5hbWU6IHN0cmluZztcclxuICBwdWJsaWMgbmV4dFZhbHVlOnN0cmluZyA9Jyc7XHJcblxyXG4gIHN0YXJ0X2RhdGU/OiBhbnk7XHJcblxyXG4gIC8vc2VhcmNoIGNvbXBvbmVudFxyXG4gIHB1YmxpYyB0ZW1wb0FkZHJlc3M6IGFueVtdID0gW107XHJcbiAgcHVibGljIHNlbGVjdGVkVmFsdWU6IHN0cmluZztcclxuICBwdWJsaWMgc2VsZWN0ZWRQb3N0YWxjb2RlOiBzdHJpbmc7XHJcbiAgcHVibGljIHNlbGVjdGVkUHJvdmluY2U6IHN0cmluZztcclxuICBwdWJsaWMgc2VsZWN0ZWRDaXR5OiBzdHJpbmc7XHJcbiAgcHVibGljIHNlbGVjdGVkQXJlYTogc3RyaW5nO1xyXG4gIHB1YmxpYyBsb2NhbGFkZHJlc3M6IGFueVtdID0gW107XHJcblxyXG4gIHB1YmxpYyBhbGxBZGRyZXNzIDphbnkgW10gPSBbXTtcclxuICBwdWJsaWMgUG9zdGFsQ29kZTpzdHJpbmc7XHJcbiAgcHVibGljIHBsYWNlczogYW55W10gPSBbXTtcclxuICBwdWJsaWMgcHJvdmluY2U6YW55W109W107XHJcbiBcclxuICAvLyBSRVEtMDEgUFJPR1JFU1MgQkFSXHJcbiAgcHVibGljIHByb2dyZXNzU3R5bGU6IHN0cmluZyA9IFwiMCVcIjtcclxuICBwdWJsaWMgYW5zd2VyQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIGluZGV4Q291bnQ6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIGFkZEZsYWc6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwdWJsaWMgbXlEYXRlUGlja2VyT3B0aW9uczogSU15RHBPcHRpb25zID0ge307XHJcbiAgaW5kaXZpZHVhbEJvb2tCdXR0b246IGJvb2xlYW47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzZlNlcnZpY2U6IFNhbGVzZm9yY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsIFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSBzcGlubmVyOiBOZ3hTcGlubmVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Zvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICAvL3ByaXZhdGUgZGJTZXJ2aWNlOiBOZ3hJbmRleGVkREJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkZXZpY2VTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXHJcbiAgICBlbDogRWxlbWVudFJlZlxyXG4gICkge1xyXG4gICAgdGhpcy5zcGlubmVyTmFtZSA9IFwic3AxXCI7XHJcbiAgICB0aGlzLnNwaW5uZXJUeXBlID0gXCJiYWxsLXNwaW4tY2xvY2t3aXNlXCI7XHJcbiAgfVxyXG5cclxuICBvbkRhdGVDaGFuZ2VkKGV2ZW50OiBJTXlEYXRlTW9kZWwpIHtcclxuICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgb25EYXRlQ2hhbmdlZCcpO1xyXG4gICAgLy90byBjaGFuZ2UgdGhlIGJvcmRlciBjb2xvclxyXG4gICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYykge1xyXG4gICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHByb2dyZXNzQmFyIGNvbmQnKTtcclxuICAgICAgdGhpcy5pbnBWYWx1ZSA9XHJcbiAgICAgICAgZXZlbnQuZGF0ZS5kYXkgKyBcIi9cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi9cIiArIGV2ZW50LmRhdGUueWVhcjtcclxuICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0uVHlwZV9fYyA9PVwiQm9va1wiKXtcclxuICAgICAgICB0aGlzLnNlbGVjdERhdGUgPSAgZXZlbnQuZGF0ZS5kYXkgKyBcIi9cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi9cIiArIGV2ZW50LmRhdGUueWVhcjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBFTFNFIG9mIHByb2dyZXNzQmFyIGNvbmQnKTtcclxuICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0uVHlwZV9fYyA9PVwiQm9va1wiKXtcclxuICAgICAgICB0aGlzLnNlbGVjdERhdGUgPSAgZXZlbnQuZGF0ZS5kYXkgKyBcIi1cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi1cIiArIGV2ZW50LmRhdGUueWVhcjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlucFZhbHVlID1cclxuICAgICAgICBldmVudC5kYXRlLnllYXIgKyBcIi1cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi1cIiArIGV2ZW50LmRhdGUuZGF5O1xyXG4gICAgfVxyXG4gICAgY29uc3QgaHRtbEVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm15ZHBcIik7XHJcbiAgICBodG1sRWxlbWVudFxyXG4gICAgICAuaXRlbSgwKVxyXG4gICAgICAuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJib3JkZXItY29sb3I6Izg3YmUxYzt3aWR0aDoxMDAlXCIpO1xyXG4gICAgdGhpcy5kYXRlTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCwgZXZlbnQpO1xyXG4gICAgaWYgKFxyXG4gICAgICBldmVudC5kYXRlLmRheSA9PT0gMCAmJlxyXG4gICAgICBldmVudC5kYXRlLm1vbnRoID09PSAwICYmXHJcbiAgICAgIGV2ZW50LmRhdGUueWVhciA9PT0gMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZGF0ZU1hcC5kZWxldGUodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xyXG4gICAgICB0aGlzLmFuc3dlck1hcC5kZWxldGUodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xyXG4gICAgfVxyXG4gICAgLy9jb25zb2xlLmxvZygndGhpcy5pbnBWYWx1ZSA9ICcrdGhpcy5pbnBWYWx1ZSk7XHJcbiAgICAvL2NvbnNvbGUubG9nKCd0aGlzLnNlbGVjdERhdGUgPSAnK3RoaXMuc2VsZWN0RGF0ZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZGV2aWNlSW5mbyA9IHRoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VJbmZvKCk7XHJcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBQYXJhbXMpID0+IHtcclxuICAgICAgaWYgKHBhcmFtc1snaWQnXSkge1xyXG4gICAgICAgIHRoaXMuaW5kaXZpZHVhbEJvb2tCdXR0b24gPSB0cnVlO1xyXG4gICAgICB9ZWxzZSBpZihwYXJhbXNbJ2Jvb2tsZXRJZCddKXtcclxuICAgICAgICB0aGlzLmluZGl2aWR1YWxCb29rQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc29sZS5sb2coJ0luc2lkZSB0aGUgbmdPbkluaXQnKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiUk5YVC1DbGFpbVwiKTtcclxuICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xyXG4gICAgdGhpcy5zZWxlY3RlZE1lcmlkaWVtID0gXCJBTVwiO1xyXG4gICAgdGhpcy5wcm9jZXNzUUIoKTtcclxuICAgIC8vY29uc29sZS5sb2cobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FkZHJlc3MnKSk7XHJcbiAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImFkZHJlc3NcIikpe1xyXG4gICAgICB0aGlzLmxvY2FsYWRkcmVzcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJhZGRyZXNzXCIpKTtcclxuICAgICAgLy9jb25zb2xlLmxvZygnTGVuZ3RoPScrdGhpcy5sb2NhbGFkZHJlc3MubGVuZ3RoKTtcclxuICAgICAgdGhpcy5hbGxBZGRyZXNzPXRoaXMubG9jYWxhZGRyZXNzLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5sb2NhbGFkZHJlc3MuaW5kZXhPZihpdGVtKSA9PSBpbmRleCl7XHJcbiAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pOyBcclxuICAgICAgdGhpcy5hbGxBZGRyZXNzLnNvcnQoZnVuY3Rpb24oYSwgYil7XHJcbiAgICAgICAgcmV0dXJuIGEuemlwQ29kZSAtIGIuemlwQ29kZVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZih0aGlzLmRldmljZUluZm8ub3MgPT09ICdpT1MnKXtcclxuICAgICAgICBsZXQgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihcImFkZHJlc3NEQlwiKTtcclxuICAgICAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRhcmdldE5ldyA9IGV2ZW50LnRhcmdldCBhcyBJREJSZXF1ZXN0O1xyXG4gICAgICAgICAgbGV0IGRiTmV3ID0gdGFyZ2V0TmV3LnJlc3VsdDtcclxuICAgICAgICAgIGNvbnN0IHJlcXVlc3ROZXcgPSBkYk5ldy50cmFuc2FjdGlvbignYWRkcmVzc1RhYmxlJylcclxuICAgICAgICAgICAgICAgIC5vYmplY3RTdG9yZSgnYWRkcmVzc1RhYmxlJylcclxuICAgICAgICAgICAgICAgIC5nZXQoMSk7XHJcbiAgICAgICAgICByZXF1ZXN0TmV3Lm9uc3VjY2VzcyA9ICgpPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRlbXBWYXIgPSByZXF1ZXN0TmV3LnJlc3VsdDtcclxuICAgICAgICAgICAgICB0aGlzLmxvY2FsYWRkcmVzcyA9IEpTT04ucGFyc2UodGVtcFZhci53aG9sZUFkZHJlc3NTdHJpbmcpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxsQWRkcmVzcz10aGlzLmxvY2FsYWRkcmVzcy5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2NhbGFkZHJlc3MuaW5kZXhPZihpdGVtKSA9PSBpbmRleCl7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pOyBcclxuICAgICAgICAgICAgICB0aGlzLmFsbEFkZHJlc3Muc29ydChmdW5jdGlvbihhLCBiKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhLnppcENvZGUgLSBiLnppcENvZGVcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIGNvbnNvbGUubG9nKCdpbnNpZGUgUXVlc3Rpb25uYWlyZSBuZ09uQ2hhbmdlcycpO1xyXG4gICAgLy8gdGhpcy5wcm9jZXNzUUIoKTtcclxuICB9XHJcblxyXG4gIGRhdGVfVGltZU1hcCgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRob3VyTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCwgdGhpcy5zZWxlY3RlZEhvdXIpO1xyXG4gICAgdGhpcy5zZWxlY3RlZG1pbnV0ZU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQsIHRoaXMuc2VsZWN0ZWRNaW51dGUpO1xyXG4gIH1cclxuXHJcbiAgZGF5KCkge1xyXG4gICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zID0ge1xyXG4gICAgICBkYXRlRm9ybWF0OiBcImRkLm1tLnl5eXlcIixcclxuICAgICAgc3VuSGlnaGxpZ2h0OiBmYWxzZSxcclxuICAgICAgZGlzYWJsZURhdGVSYW5nZXM6IFtdLFxyXG4gICAgICBzaG93Q2xlYXJEYXRlQnRuOiBmYWxzZSxcclxuICAgICAgZGlzYWJsZVNpbmNlOiB7XHJcbiAgICAgICAgeWVhcjogMCxcclxuICAgICAgICBtb250aDogMCxcclxuICAgICAgICBkYXk6IDAsXHJcbiAgICAgIH0sXHJcbiAgICAgIGRpc2FibGVVbnRpbDoge1xyXG4gICAgICAgIHllYXI6IDAsXHJcbiAgICAgICAgbW9udGg6IDAsXHJcbiAgICAgICAgZGF5OiAwLFxyXG4gICAgICB9LFxyXG4gICAgICBzaG93VG9kYXlCdG46IGZhbHNlLFxyXG4gICAgICBkYXlMYWJlbHM6IHtcclxuICAgICAgICBzdTogXCJEb21cIixcclxuICAgICAgICBtbzogXCJMdW5cIixcclxuICAgICAgICB0dTogXCJNYXJcIixcclxuICAgICAgICB3ZTogXCJNacOpXCIsXHJcbiAgICAgICAgdGg6IFwiSnVlXCIsXHJcbiAgICAgICAgZnI6IFwiVmllXCIsXHJcbiAgICAgICAgc2E6IFwiU8OhYlwiLFxyXG4gICAgICB9LFxyXG4gICAgICBtb250aExhYmVsczoge1xyXG4gICAgICAgIDE6IFwiRW5lXCIsXHJcbiAgICAgICAgMjogXCJGZWJcIixcclxuICAgICAgICAzOiBcIk1hclwiLFxyXG4gICAgICAgIDQ6IFwiQWJyXCIsXHJcbiAgICAgICAgNTogXCJNYXlvXCIsXHJcbiAgICAgICAgNjogXCJKdW5cIixcclxuICAgICAgICA3OiBcIkp1bFwiLFxyXG4gICAgICAgIDg6IFwiQWdvXCIsXHJcbiAgICAgICAgOTogXCJTZXBcIixcclxuICAgICAgICAxMDogXCJPY3RcIixcclxuICAgICAgICAxMTogXCJOb3ZcIixcclxuICAgICAgICAxMjogXCJEaWNcIixcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjaGFuZ2UoKSB7XHJcbiAgICBjb25zdCBodG1sRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibXlkcFwiKTtcclxuICAgIGlmICh0aGlzLnNlbERhdGUgPT09IG51bGwgfHwgdGhpcy5pbnBWYWx1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgaHRtbEVsZW1lbnRcclxuICAgICAgICAuaXRlbSgwKVxyXG4gICAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIndpZHRoOjEwMCU7Ym9yZGVyOiAxcHggc29saWQgcmVkXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaHRtbEVsZW1lbnRcclxuICAgICAgICAuaXRlbSgwKVxyXG4gICAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImJvcmRlcjogMXB4IHNvbGlkICM4N2JlMWMgO3dpZHRoOjEwMCVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzUUIoKSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdQcm9jZXNzUUInKTtcclxuICAgIC8vdGhpcy5xYkl0ZW1cclxuICAgIC8vY29uc29sZS5sb2codGhpcy5xYklkKTtcclxuICAgIC8vY29uc29sZS5sb2coJ1ZlcnNpb24gaW4gcHJvY2VzcyBpcyA4YmYxMWVmYTdmOTFhMzkxZDk1N2JmNmI1MDc4ZWRjN2U2NTZiNjdjJyk7XHJcbiAgICBpZiAodGhpcy5xYklkKSB7XHJcbiAgICAgIGlmICh0aGlzLnFiSWQubGVuZ3RoID09IDE4KSB7XHJcbiAgICAgICAgdGhpcy5yZWFkUXVlc3Rpb25Cb29rKHRoaXMucWJJZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBlbHNlIHBhcnQnKTtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdTZXR0aW5nIHRoZSBRdWVzdGlvbiBEaXJlY3RseSBmb3IgdGVzdGluZycpO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtID0gRFRRVUVTVElPTjtcclxuICAgICAgICB0aGlzLnFiSXRlbSA9IFRFU1RRQjtcclxuICAgICAgICB0aGlzLnByb2Nlc3NRdWVzdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmltTGFzdER1bW15KGlucHV0OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiAoaW5wdXQgPSBpbnB1dC5zdWJzdHJpbmcoMCwgaW5wdXQubGVuZ3RoIC0gNikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJvcGVyVGltZShkZWY6IHN0cmluZywgaW5wdXQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGlucHV0ID09PSBcIlwiID8gZGVmIDogaW5wdXQ7XHJcbiAgfVxyXG5cclxuICAvL1N1bW1hcnkgUXVlc3Rpb24gQ2xpY2thYmxlIExvZ2ljXHJcbiAgaGFuZGxlRWRpdENsaWNrKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuYmFja2ljb24gPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmFiSXRlbT8uU3RhdHVzX19jID09IFwiUGVuZGluZ1wiKSB7XHJcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVhZFF1ZXN0aW9uKHZhbHVlKTtcclxuICAgICAgLy9jb25zb2xlLmxvZygnIGluIHNpZGUgc3VtbWFyeW9wZW4nKyB0aGlzLnN1bW1hcnkubGVuZ3RoKTtcclxuXHJcbiAgICAgIC8vQXNzaWduIHF1ZXN0aW9uIHN0YWNrIGxlbmd0aCBmcm9tIHN1bW1hcnkgcGFydFxyXG4gICAgICB2YXIgYXJyYXlMZW5ndGggPSB0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoO1xyXG4gICAgICB2YXIgbGVuZ3RoVmFsdWUgPSB0aGlzLnF1ZXN0aW9uU3RhY2suaW5kZXhPZih2YWx1ZSk7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gYXJyYXlMZW5ndGg7IGkgPiBsZW5ndGhWYWx1ZTsgaS0tKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvblN0YWNrLnBvcCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgPT09IHRydWUpIHtcclxuICAgICAgICB2YXIgYXJyYXlMZW5ndGgxID0gdGhpcy5xdWVzdGlvbk5hbWUubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGogPSBhcnJheUxlbmd0aDE7IGogPiBsZW5ndGhWYWx1ZTsgai0tKSB7XHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wb3AoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdW1tYXJ5ID0gW107XHJcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZU5leHRDbGljaygpIHtcclxuICAgIHRoaXMuYmFja0J1dHRvbkZsYWcgPSBmYWxzZTtcclxuICAgIHRoaXMuQW5zd2VyU2F2ZSgpO1xyXG4gIH1cclxuXHJcbiAgQW5zd2VyU2F2ZSgpe1xyXG4gICAgLy90aGlzLnVwZGF0ZVByb2dyZXNzKCk7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UXVlc3Rpb25JZCA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgcXVlc3Rpb25UeHQ9Jyc7XHJcbiAgICB0aGlzLmNsZWFyRXJyb3IoKTtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5OZXh0X1RyYWNraW5nX0lEX19jKTtcclxuICAgIHRoaXMucmVjb3JkSWQgPSBudWxsO1xyXG4gICAgdmFyIGNRdWVzdGlvbjogUXVlc3Rpb24gPSBuZXcgUXVlc3Rpb24oKTtcclxuICAgIGNRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25JdGVtO1xyXG4gICAgICAgIC8vIENyZWF0ZSBhbiBhcnJheSBvZiBvYmplY3RzIHRvIHN0b3JlIHRoZSB2YWx1ZXNcclxuICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMubGVuZ3RoO2krKykge1xyXG4gICAgICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHNbaV0uUXVlc3Rpb25fVGV4dF9fYyl7XHJcbiAgICAgICAgICAgIHZhciBxdWVzdGlvblRleHQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkc1tpXS5RdWVzdGlvbl9UZXh0X19jLnJlcGxhY2UoLzxbXj5dKz4vZywgJycpOyAvLyBSZW1vdmUgSFRNTCB0YWdzIGZyb20gdGhlIFF1ZXN0aW9uX1RleHRfX2MgdmFsdWVcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBxdWVzdGlvblRleHQgPSAndW5kZWZpbmVkJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHNbaV0uaW5wdXQ7XHJcbiAgICAgICAgICBjb25zdCBvYmogPSB7IFtxdWVzdGlvblRleHRdOiBpbnB1dCB9OyAvLyBDcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHF1ZXN0aW9uVGV4dCBhcyB0aGUga2V5IGFuZCB0aGUgaW5wdXQgYXMgdGhlIHZhbHVlXHJcbiAgICAgICAgICB0aGlzLnN1bW1hcnlEYXRhLnB1c2gob2JqKTsgLy8gQWRkIHRoZSBvYmplY3QgdG8gdGhlIGRhdGEgYXJyYXlcclxuICAgICAgICB9XHJcbiAgICAgICAgIHZhciB0eXAgPSBjUXVlc3Rpb24uVHlwZV9fYztcclxuICAgIC8vIHRoaXMuc3F1ZXMgKz0gY1F1ZXN0aW9uLlF1ZXN0aW9uX19jICsgJ0BAIyMkJCc7XHJcbiAgICB2YXIgcXVlc1ZhbHVlID0gY1F1ZXN0aW9uLlF1ZXN0aW9uX1RleHRfX2M7XHJcbiAgICB2YXIgbWFpbGZvcm1hdCA9XHJcbiAgICAgIFwiXlteLl1bYS16QS1aMC05ISMkJSYnKistLz0/Xl9ge3x9fl0rW14uXUBbXi1dW2EtekEtWjAtOS4tXStbXi1dLlthLXpBLVpdezIsfSRcIjtcclxuXHJcbiAgICAvLyBQcm9jZXNzIElucHV0c1xyXG4gICAgaWYgKHRoaXMuY2hlY2tib3hGbGFnKSB7XHJcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xyXG4gICAgICAvLyBTYXZlIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBpbiB0aGUgaW5wVmFsdWVcclxuICAgICAgZm9yICh2YXIgb3Ygb2YgdGhpcy5vcHRpb25WYWx1ZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmNoZWNrZWQpKSB7XHJcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSBvdi5WYWx1ZV9fYyArIFwiQEAjIyQkXCI7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IG92Lk5leHRfUXVlc3Rpb25fX2M7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5lbWFpbEZsYWcpIHtcclxuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUgJiYgdGhpcy5pbnBWYWx1ZS5tYXRjaChtYWlsZm9ybWF0KSkge1xyXG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5OZXh0X1F1ZXN0aW9uX19jO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmFscGhhbnVtZXJpY0ZsYWcpIHtcclxuICAgICAgdmFyIGlzTm90VmFsaWRBY2NOdW0gPSB0aGlzLmlzTm90VmFsaWRBY2NOdW1iZXIodGhpcy5pbnBWYWx1ZSk7XHJcbiAgICAgIGlmIChpc05vdFZhbGlkQWNjTnVtKSB7XHJcbiAgICAgICAgdGhpcy5ub3RWYWxpZEFjY051bSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IHRoaXMucXVlc3Rpb25JdGVtLk5leHRfUXVlc3Rpb25fX2M7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubm90VmFsaWRBY2NOdW0gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5udW1iZXJGbGFnKSB7XHJcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IHRoaXMucXVlc3Rpb25JdGVtLk5leHRfUXVlc3Rpb25fX2M7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYm9va0ZsYWcpIHtcclxuICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbS5UeXBlX19jKVxyXG4gICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGJvb2tGbGFnIGNvbmQnKTtcclxuICAgICAgLy9jb25zb2xlLmxvZygndGhpcy5pbnBWYWx1ZSA9ICcrdGhpcy5pbnBWYWx1ZSk7XHJcbiAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMuc2VsZWN0RGF0ZSA9ICcrdGhpcy5zZWxlY3REYXRlKTtcclxuICAgICAgLy9jb25zb2xlLmxvZygndGhpcy5zZWxEYXRlID0gJyk7XHJcbiAgICAgIC8vY29uc29sZS5sb2codGhpcy5zZWxEYXRlKTtcclxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XHJcbiAgICAgIHZhciBoYXNNaXNzaW5nSW5wdXQgPSBmYWxzZTtcclxuICAgICAgZm9yICh2YXIgaXRlbSBvZiB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcykge1xyXG4gICAgICAgIHZhciBjb3VudCA9IDA7XHJcbiAgICAgIFxyXG4gICAgICAgIGlmKGl0ZW0uVHlwZV9fYyA9PSBcIkRhdGVcIiB8fCBpdGVtLlR5cGVfX2MgPT0gXCJUaW1lXCIpIHtcclxuICAgICAgICAgIC8vdGhpcyBvbmVcclxuICAgICAgICAgIHRoaXMuY2hhbmdlKCk7XHJcbiAgICAgICAgICAgIGlmKGl0ZW0uVHlwZV9fYyA9PSBcIkRhdGVcIil7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBkYXRlIHR5cGUgY29uZCA9ICcrdGhpcy5zZWxlY3REYXRlKTtcclxuICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5zZWxlY3REYXRlO1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZSlcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2VsZWN0RGF0ZSlcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgaWYoaXRlbS5UeXBlX19jID09IFwiVGltZVwiKXtcclxuICAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zZWxlY3RlZEhvdXIrdGhpcy5zZWxlY3RlZE1lcmlkaWVtK3RoaXMuc2VsZWN0ZWRNaW51dGUpXHJcbiAgICAgICAgICAgICBcclxuICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxyXG4gICAgICAgICAgICAgICAgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJQTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyICE9IFwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICA/IE51bWJlcih0aGlzLnNlbGVjdGVkSG91cikgKyAxMlxyXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRIb3VyKSArXHJcbiAgICAgICAgICAgICAgICBcIjpcIiArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgUE1cIjtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIkFNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPT09IFwiMTJcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBcIjAwXCIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGUgKyBcIiBBTVwiO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jKSB7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNlbGVjdERhdGUpe1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5zZWxlY3REYXRlK1wiIFwiK3RoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zZWxlY3REYXRlKXtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0RGF0ZStcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gXCIgXCIrdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnNlbERhdGUgPT09IG51bGwgfHwgdGhpcy5zZWxEYXRlID09PSB1bmRlZmluZWQgfHwgIXRoaXMuaW5wVmFsdWUgfHwgIXRoaXMuc2VsZWN0ZWRIb3VyIHx8ICF0aGlzLnNlbGVjdGVkTWludXRlIHx8ICF0aGlzLnNlbGVjdERhdGUpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBudWxsIGNvbmRpdGlvbiBvZiBpbnB1dCcpO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgaHRtbEVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm15ZHBcIik7XHJcbiAgICAgICAgICAgIGh0bWxFbGVtZW50XHJcbiAgICAgICAgICAgICAgLml0ZW0oMClcclxuICAgICAgICAgICAgICAuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJ3aWR0aDoxMDAlO2JvcmRlci1ib3R0b206IDFweCBzb2xpZCByZWQgIWltcG9ydGFudDtcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZGF0ZV9UaW1lTWFwKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKGl0ZW0uVHlwZV9fYz09IFwiVGV4dFwiICYmIGl0ZW0uUXVlc3Rpb25fX2MgPT09ICdQb2JsYWNpw7NuJyl7XHJcbiAgICAgICAgICBmb3IodmFyIGxvYyBvZiB0aGlzLmxvY2FsYWRkcmVzcyl7XHJcbiAgICAgICAgICAgIGlmKCh0aGlzLnNlbGVjdGVkUG9zdGFsY29kZSA9PSBsb2MuemlwQ29kZSkmJih0aGlzLnNlbGVjdGVkVmFsdWUgPT0gbG9jLmNvdW50cnkpJiYodGhpcy5zZWxlY3RlZENpdHk9PWxvYy50b3duKSl7XHJcbiAgICAgICAgICAgICAgaXRlbS5pbnB1dD0gdGhpcy5zZWxlY3RlZENpdHk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihjb3VudCA9PSB0aGlzLmxvY2FsYWRkcmVzcy5sZW5ndGggLTEpe1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdlcnJvciBmb3JtIGNpdHknKVxyXG4gICAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY291bnQrKzsgIFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3Rlc3RpbiB2YWx1ZXM9PScraXRlbS5pbnB1dClcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGlmKGl0ZW0uVHlwZV9fYyA9PT0gJ0xvY2F0aW9uJyAmJiBBcnJheS5pc0FycmF5KGl0ZW0uaW5wdXQpICYmIGl0ZW0uaW5wdXQuZXZlcnkoKGlucHV0KSA9PiBpbnB1dCAhPT0gdW5kZWZpbmVkKSl7XHJcbiAgICAgICAgLy8gICAgIGNvbnN0IGlucHV0VmFsdWVzID0gXCJhbnN3ZXJTdHJpbmc6IFwiICsgaXRlbS5pbnB1dCA7XHJcbiAgICAgICAgLy8gICAgIGl0ZW0uaW5wdXQgPSBpbnB1dFZhbHVlcztcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgaWYoaXRlbS5UeXBlX19jPT0gXCJUZXh0XCIgJiYgaXRlbS5RdWVzdGlvbl9fYyA9PT0gJ0PDs2RpZ28gcG9zdGFsJyl7XHJcbiAgICAgICAgICBmb3IodmFyIGxvYyBvZiB0aGlzLmxvY2FsYWRkcmVzcyl7XHJcbiAgICAgICAgICAgIGlmKGxvYy56aXBDb2RlID09IHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlKXtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCd0ZXN0aW5nIHppcGNvZGUgdmFsdWUqKioqKicrIHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlKVxyXG4gICAgICAgICAgICAgIGl0ZW0uaW5wdXQ9dGhpcy5zZWxlY3RlZFBvc3RhbGNvZGU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZihjb3VudCA9PSB0aGlzLmxvY2FsYWRkcmVzcy5sZW5ndGggLTEpe1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdlcnJvciBmb3JtJylcclxuICAgICAgICAgICAgaXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcclxuICAgICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvdW50Kys7ICBcclxuICAgICAgICAgIH1cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0ZXN0aW4gdmFsdWVzPT0nK2l0ZW0uaW5wdXQpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICBcclxuICAgICAgaWYoaXRlbS5UeXBlX19jPT0gXCJUZXh0XCIgJiYgaXRlbS5RdWVzdGlvbl9fYyA9PT0gJ1Byb3ZpbmNpYScpe1xyXG5cdFx0XHQgIGZvcih2YXIgbG9jIG9mIHRoaXMubG9jYWxhZGRyZXNzKXtcclxuXHRcdFx0XHQgIGlmKGxvYy5wcm92aW5jZSA9PSB0aGlzLnNlbGVjdGVkUHJvdmluY2Upe1xyXG5cdFx0XHRcdFx0ICAvL2NvbnNvbGUubG9nKCcqKioqKip0ZXN0aW5nIHByb3ZpbmNlIHZhbHVlJysgdGhpcy5zZWxlY3RlZFByb3ZpbmNlKVxyXG5cdFx0XHRcdFx0ICBpdGVtLmlucHV0PXRoaXMuc2VsZWN0ZWRQcm92aW5jZTtcclxuXHRcdFx0XHRcdCAgYnJlYWs7XHJcblx0XHRcdFx0ICB9IGVsc2UgaWYoY291bnQgPT0gdGhpcy5sb2NhbGFkZHJlc3MubGVuZ3RoIC0xKXtcclxuXHRcdFx0XHRcdC8vY29uc29sZS5sb2coJ2Vycm9yIGZvcm0nKVxyXG5cdFx0XHRcdFx0aXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcclxuXHRcdFx0XHRcdGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0ICB9XHJcblx0XHRcdFx0ICBjb3VudCsrOyAgXHJcblx0XHRcdCAgfVxyXG5cdFx0XHQvL2NvbnNvbGUubG9nKCd0ZXN0aW4gdmFsdWVzPT0nK2l0ZW0uaW5wdXQpXHJcblx0XHQgIH1cclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIWl0ZW0uSXNfT3B0aW9uYWxfX2MgJiZcclxuICAgICAgICAvLyAgKChpdGVtLlR5cGVfX2MgIT0gXCJGaWxlXCIgJiYgIWl0ZW0uaW5wdXQgJiYgaXRlbS5UeXBlX19jICE9ICdEYXRlJyAmJiBpdGVtLlR5cGVfX2MgIT0gJ1RpbWUnKSB8fFxyXG4gICAgICAgICAvLyAgIChpdGVtLlR5cGVfX2MgPT0gXCJGaWxlXCIgJiYgdGhpcy5hdHRhY2htZW50cy5sZW5ndGggPT0gMCkpXHJcbiAgICAgICAgIChpdGVtLlR5cGVfX2MgPT0gXCJGaWxlXCIgJiYgdGhpcy5hdHRhY2htZW50cy5sZW5ndGggPT0gMClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XHJcbiAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS5UeXBlX19jID09IFwiUmFkaW9cIikge1xyXG4gICAgICAgICAgaWYgKCFpdGVtLmlucHV0KSB7XHJcbiAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XHJcbiAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtLlR5cGVfX2MgPT0gXCJEcm9wZG93blwiKSB7XHJcbiAgICAgICAgICBpZiAoIWl0ZW0uaW5wdXQpIHtcclxuICAgICAgICAgICAgaXRlbS5pbnB1dCA9IFwiXCI7XHJcbiAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XHJcbiAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtLlR5cGVfX2MgPT0gXCJFbWFpbFwiKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbS5pbnB1dCAmJiBpdGVtLmlucHV0Lm1hdGNoKG1haWxmb3JtYXQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XHJcbiAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtLlR5cGVfX2MgPT0gXCJGaWxlXCIgJiYgdGhpcy5hdHRhY2htZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50SXRlbSBvZiB0aGlzLmF0dGFjaG1lbnRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgKz1cclxuICAgICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50SWQgK1xyXG4gICAgICAgICAgICAgIFwiQCMkXCIgK1xyXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLmF0dGFjaG1lbnROYW1lICtcclxuICAgICAgICAgICAgICBcIixcIjtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uaW5wdXQgPT0gdGhpcy5pbnBWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUnICsgcmVjb3JkSWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyB0aGlzLmF0dGFjaG1lbnRzID0gW107XHJcbiAgICAgICAgfSAvL2l0ZW0uaW5wdXQgPT0gdGhpcy5pbnBWYWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSAoaXRlbS5pbnB1dCAhPSB1bmRlZmluZWQgPyBpdGVtLmlucHV0IDogXCJcIikgKyBcIkBAIyMkJFwiO1xyXG4gICAgICAgIHF1ZXN0aW9uVHh0ICs9IGl0ZW0uUXVlc3Rpb25fX2MgKyBcIkBAIyMkJFwiO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBib29rMScgKyB0aGlzLmlucFZhbHVlKVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChoYXNNaXNzaW5nSW5wdXQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcclxuICAgICAgcXVlc3Rpb25UeHQgPSBxdWVzdGlvblR4dCA/IHRoaXMudHJpbUxhc3REdW1teShxdWVzdGlvblR4dCkgOiBxdWVzdGlvblR4dDtcclxuICAgIH0gXHJcbiAgICBlbHNlIGlmICh0aGlzLmxpc3RGbGFnKSB7XHJcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSAnJztcclxuICAgICAgdmFyIGhhc01pc3NpbmdJbnB1dCA9IGZhbHNlO1xyXG4gICAgICBpZih0aGlzLmxvY2FsU3ViUU1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uSWQpKXtcclxuICAgICAgICB0aGlzLnN1YkFuc01hcCA9IG5ldyBNYXAoKTtcclxuICAgICAgICBmb3IgKHZhciBsb2NhbFF1ZXMgb2YgdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKSkge1xyXG4gICAgICAgICAgICBpZighbG9jYWxRdWVzLmlucHV0KSB7XHJcbiAgICAgICAgICAgICAgbG9jYWxRdWVzLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKCF0aGlzLnN1YkFuc01hcC5oYXMobG9jYWxRdWVzLklkKSl7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgYW5zIG1hcCcpXHJcbiAgICAgICAgICAgIHRoaXMuc3ViQW5zTWFwLnNldChsb2NhbFF1ZXMuSWQsbG9jYWxRdWVzLmlucHV0KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgYW5zIG1hcCBlbHNlJylcclxuICAgICAgICAgICAgdGhpcy5zdWJBbnNNYXAuc2V0KGxvY2FsUXVlcy5JZCx0aGlzLnN1YkFuc01hcC5nZXQobG9jYWxRdWVzLklkKSArICckJEBAIyMnK2xvY2FsUXVlcy5pbnB1dCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaGFzTWlzc2luZ0lucHV0KSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdmaWxlIHR3bycpXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3ViQW5zTWFwLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgTWFwJyApO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2codmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSAodmFsdWUgIT0gdW5kZWZpbmVkID8gdmFsdWUgOiAnJykgKyAnQEAjIyQkJztcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy50cmltTGFzdER1bW15KHRoaXMuaW5wVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmRyb3Bkb3duRmxhZykge1xyXG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZS5sZW5ndGggPD0gMSkge1xyXG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIi5cIjtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmR0RmxhZyAmJiB0aGlzLmRhdGVGbGFnICYmIHRoaXMudGltZUZsYWcpIHtcclxuICAgICAgLy90aGlzIG9uZVxyXG4gICAgICB0aGlzLmNoYW5nZSgpO1xyXG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdGhpcy5nZXRQcm9wZXJUaW1lKFwiMTJcIiwgdGhpcy5zZWxlY3RlZEhvdXIpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSB0aGlzLmdldFByb3BlclRpbWUoXCIwMFwiLCB0aGlzLnNlbGVjdGVkTWludXRlKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPSB0aGlzLmdldFByb3BlclRpbWUoXCJBTVwiLCB0aGlzLnNlbGVjdGVkTWVyaWRpZW0pO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZS5sZW5ndGgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uWDI0X0hvdXJzX19jID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxyXG4gICAgICAgICAgICAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIlBNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgIT0gXCIxMlwiXHJcbiAgICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpICsgMTJcclxuICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRIb3VyKSArXHJcbiAgICAgICAgICAgIFwiOlwiICtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIFBNXCI7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIkFNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPT09IFwiMTJcIikge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9IFwiMDBcIiArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIEFNXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCIgXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCJUXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyBcIiBcIiArIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyBcIlRcIiArIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jKSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiYW5zID0+IFwiICsgdGhpcy5pbnBWYWx1ZSk7XHJcbiAgICAgICAgICB2YXIgZGF0ZTE6IGFueSA9IHRoaXMuaW5wVmFsdWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgZGF0ZTEgPSBkYXRlMVswXS5zcGxpdChcIi9cIik7XHJcbiAgICAgICAgICBkYXRlMSA9IFtkYXRlMVsyXSwgZGF0ZTFbMV0sIGRhdGUxWzBdXS5qb2luKFwiLVwiKTtcclxuICAgICAgICAgIGRhdGUxID0gbmV3IERhdGUoZGF0ZTEpO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhkYXRlMSlcclxuICAgICAgICAgIHZhciBkYXRlMjogYW55ID0gdGhpcy5pbnN1cmFuY2VTdGFydERhdGUuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgZGF0ZTIgPSBuZXcgRGF0ZShkYXRlMlswXSk7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGRhdGUyKTtcclxuICAgICAgICAgIGlmIChkYXRlMSA8IGRhdGUyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvci5lcnJvck1zZyA9XHJcbiAgICAgICAgICAgICAgXCJObyBlcyBwb3NpYmxlIGRhciBkZSBhbHRhIGxhIHJlY2xhbWFjacOzbiBkZWJpZG8gYSBxdWUgbGEgZmVjaGEgZGVsIGluY2lkZW50ZSBlcyBhbnRlcmlvciBhIGxhIGZlY2hhIGRlIGNvbnRyYXRhY2nDs24gZGUgbGEgcMOzbGl6YVwiO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUnKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlbERhdGUgPT09IG51bGwgfHwgIXRoaXMuaW5wVmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRhdGVfVGltZU1hcCgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZUZsYWcgJiYgdGhpcy5kdEZsYWcgJiYgIXRoaXMuZGF0ZUZsYWcpIHtcclxuICAgICAgdGhpcy5kYXRlX1RpbWVNYXAoKTtcclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLmlucFZhbHVlID1cclxuICAgICAgICAgICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiUE1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciAhPSBcIjEyXCJcclxuICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpICsgMTJcclxuICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkSG91cikgK1xyXG4gICAgICAgICAgXCI6XCIgK1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5zZWxlY3RlZEhvdXIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUubGVuZ3RoIDwgNSkge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGVGbGFnICYmIHRoaXMuZHRGbGFnICYmICF0aGlzLnRpbWVGbGFnKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlKCk7XHJcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlLmxlbmd0aCA8IDcgfHwgdGhpcy5zZWxEYXRlID09PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmlsZUZsYWcpIHtcclxuICAgICAgLy9jb25zb2xlLmxvZygnZm91cicpXHJcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xyXG4gICAgICBpZiAodGhpcy5hdHRhY2htZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudEl0ZW0gb2YgdGhpcy5hdHRhY2htZW50cykge1xyXG4gICAgICAgICAgdGhpcy5pbnBWYWx1ZSArPVxyXG4gICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50SWQgK1xyXG4gICAgICAgICAgICBcIkAjJFwiICtcclxuICAgICAgICAgICAgYXR0YWNobWVudEl0ZW0uYXR0YWNobWVudE5hbWUgK1xyXG4gICAgICAgICAgICBcIixcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZpbGVzc3MnICsgdGhpcy5pbnBWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUuc3Vic3RyKDAsIHRoaXMuaW5wVmFsdWUubGVuZ3RoIC0gMSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgZm9yIHRoZSBhbnN3ZXIgYmVmb3JlIHNhdmluZyB0byB0aGUgREJcclxuICAgIGlmICghdGhpcy5xdWVzdGlvbkl0ZW0uSXNfT3B0aW9uYWxfX2MgJiYgIXRoaXMuaW5wVmFsdWUpIHtcclxuICAgICAgLy8gU2hvdyBlcnJvciB0aGF0IHRoZSBxdWVzdGlvbiBtdXN0IGJlIGFuc3dlcmVkXHJcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBTYXZlIHRoZSBBbnN3ZXIgaW4gdGhlIERCXHJcbiAgICB0aGlzLmFuc3dlcldyYXAgPSBuZXcgQW5zd2VyV3JhcHBlcigpO1xyXG4gICAgdGhpcy5hbnN3ZXJXcmFwLmFiSWQgPSB0aGlzLmFiSXRlbS5JZDtcclxuICAgIHRoaXMuYW5zd2VyV3JhcC5xdWVzSWQgPSBjUXVlc3Rpb24uSWQ7XHJcbiAgICB0aGlzLmFuc3dlcldyYXAucXVlc1ZhbHVlID0gcXVlc1ZhbHVlO1xyXG4gICAgdGhpcy5hbnN3ZXJXcmFwLnFUeXAgPSB0eXA7XHJcbiAgICB0aGlzLmFuc3dlcldyYXAuYW5zVmFsdWUgPSB0aGlzLmlucFZhbHVlO1xyXG4gICAgdGhpcy5hbnN3ZXJXcmFwLmdyb3VwVGV4dCA9IGNRdWVzdGlvbi5Hcm91cF9fYztcclxuICAgIHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSA9IHRoaXMuaW5wVmFsdWU7XHJcbiAgICBjb25zb2xlLmxvZygndGhpcy5hbnN3ZXJXcmFwLnFUeXAnLHRoaXMuYW5zd2VyV3JhcC5xVHlwKTtcclxuICAgaWYodGhpcy5hbnN3ZXJXcmFwLnFUeXAgPT0gXCJBbHBoYW51bWVyaWNcIil7XHJcbiAgICAgIHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSA9ICdFUycrIHRoaXMuaW5wVmFsdWU7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdCYW5rIGNvbmRpdGlvbicpO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmFuc3dlcldyYXAuYW5zVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLyppZiAoY1F1ZXN0aW9uLlR5cGVfX2MgPT0gJ0Jvb2snKXtcclxuICAgIGZvciAodmFyIHFiIG9mIGNRdWVzdGlvbi5RdWVzdGlvbnNfX3IucmVjb3Jkcyl7XHJcbiAgICAgIC8vY29uc29sZS5sb2cocWIuUXVlc3Rpb25fX2MrJyoqKionK1wiQEAjIyQkXCIpXHJcbiAgICB9IFxyXG4gIH0qL1xyXG4gICAgLy90aGlzLmFuc3dlcldyYXAuc3F1ZXNWYWx1ZSA9IGNRdWVzdGlvbi5RdWVzdGlvbl9fYztcclxuICAgIHRoaXMuYW5zd2VyV3JhcC5zcXVlc1ZhbHVlID0gcXVlc3Rpb25UeHQgPyBxdWVzdGlvblR4dCA6IGNRdWVzdGlvbi5RdWVzdGlvbl9fYztcclxuICAgIHRoaXMuc2F2ZUFuc3dlcigpO1xyXG4gIH1cclxuXHJcbiAgbmV4dCgpIHtcclxuICAgIHZhciBjUXVlc3Rpb246IFF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uKCk7XHJcbiAgICBjUXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uSXRlbTtcclxuICAgIHZhciB0eXAgPSBjUXVlc3Rpb24uVHlwZV9fYztcclxuICAgIC8vIElmIG5vIGVycm9yIHRoZW4gbW92ZSB0byBuZXh0IHN0ZXBzXHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucXVlc3Rpb25TdGFjay5wdXNoKGNRdWVzdGlvbi5JZCk7XHJcbiAgICAvLyAgdGhpcy5xdWVzdGlvbk5hbWUucHVzaChjUXVlc3Rpb24uTmFtZSk7XHJcblxyXG4gICAgLy8gQ09ORElUSU9OQUwgdnMgT1BUSU9OT05MWSAmIFVOQ09ORElUSU9OQUxcclxuICAgIGlmIChjUXVlc3Rpb24uUmVjb3JkVHlwZS5OYW1lID09IFwiQ09ORElUSU9OQUxcIikge1xyXG4gICAgICBmb3IgKHZhciBjT3B0IG9mIGNRdWVzdGlvbi5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHMpIHtcclxuICAgICAgICAvLyBSYWRpbyAvIERhdGFcclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdPcHRpb24gPT4gJyArIGNPcHQuVmFsdWVfX2MgKyAnIG1hdGNoaW5nIHdpdGggJyArIGFuc1ZhbCk7XHJcbiAgICAgICAgaWYgKGNPcHQuVmFsdWVfX2MgPT0gdGhpcy5pbnBWYWx1ZSkge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnTWF0Y2ggRm91bmQgdXNpbmcgJyArIGNPcHQuTmV4dF9RdWVzdGlvbl9fYyk7XHJcbiAgICAgICAgICB0aGlzLnJlY29yZElkID0gY09wdC5OZXh0X1F1ZXN0aW9uX19jO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnY29uZGl0aW9uYWwgcmVjb3JkIGlkJysgdGhpcy5yZWNvcmRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIENvdWxkIGJlIG9mIHR5cGUgRGF0YSBhbmQgZXhpc3RpbmcgdmFsdWVcclxuICAgICAgaWYgKHRoaXMucmVjb3JkSWQgJiYgdHlwID09IFwiRGF0YVwiKSB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGNRdWVzdGlvbi5SZWNvcmRUeXBlLk5hbWUgPT0gXCJPUFRJT05PTkxZXCIpIHtcclxuICAgICAgLy8gIE9QVElPTk9OTFkgbG9naWNcclxuICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xyXG4gICAgfSBlbHNlIGlmIChjUXVlc3Rpb24uUmVjb3JkVHlwZS5OYW1lID09IFwiVU5DT05ESVRJT05BTFwiKSB7XHJcbiAgICAgIC8vVW5jb25kaXRpb25hbCAgbG9naWNcclxuICAgICAgLy9jb25zb2xlLmxvZyhcImluc2lkZSB1bmNvbmRpdGlvbmFsXCIpO1xyXG4gICAgICAvL2luc2lkZSBCb29rIFR5cGVcclxuICAgICAgaWYgKGNRdWVzdGlvbi5UeXBlX19jID09IFwiQm9va1wiICYmIGNRdWVzdGlvbi5RdWVzdGlvbl9Ob19fYyAhPSc2Jykge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coXCJpbnNpZGUgYm9va1wiKTtcclxuICAgICAgICBmb3IgKGxldCBvcHQgb2YgY1F1ZXN0aW9uLlF1ZXN0aW9uc19fci5yZWNvcmRzKSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKG9wdC5UeXBlX19jKTtcclxuICAgICAgICAgIGlmIChvcHQuVHlwZV9fYyA9PSBcIkRyb3Bkb3duXCIgfHwgb3B0LlR5cGVfX2MgPT0gXCJSYWRpb1wiKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIG9wdDEgb2Ygb3B0LlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkcykge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlTmFtZSA9PSBvcHQxLlZhbHVlX19jKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlY29yZElkID1vcHQxLk5leHRfUXVlc3Rpb25fX2MgfHwgY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ0Vsc2UnK3RoaXMucmVjb3JkSWQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZihjUXVlc3Rpb24uVHlwZV9fYyA9PSBcIkJvb2tcIiAmJiBjUXVlc3Rpb24uUXVlc3Rpb25fTm9fX2MgPT0nNicgKSB7XHJcbiAgICAgICAgZm9yIChsZXQgb3B0IG9mIGNRdWVzdGlvbi5RdWVzdGlvbnNfX3IucmVjb3Jkcykge1xyXG4gICAgICAgICAgaWYgKG9wdC5UeXBlX19jID09IFwiRHJvcGRvd25cIiB8fCBvcHQuVHlwZV9fYyA9PSBcIlJhZGlvXCIpe1xyXG4gICAgICAgICAgZm9yICh2YXIgb3B0MSBvZiBvcHQuUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlTmFtZSA9PSBvcHQxLlZhbHVlX19jKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBvcHQxLk5leHRfUXVlc3Rpb25fX2M7ICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gICAgXHJcbiAgICAgIFxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBDQVRFR09SSVpBVElPTlxyXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xyXG5cclxuICAgIC8vIENhbGxpbmcgdGhlIHByb2dyZXMgYmFyIHVwZGF0ZSBmdW5jdGlvblxyXG4gICAgdGhpcy5hbnN3ZXJDb3VudCsrO1xyXG4gICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xyXG5cclxuXHJcbiAgICAvLyBDQVRFR09SSVpBVElPTlxyXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xyXG5cclxuICAgIGlmICh0aGlzLnJlY29yZElkKSB7XHJcbiAgICAgIC8vY29uc29sZS5sb2coJ0JlZm9yZSBDYWxsaW5nIHJlYWRRdWVzdGlvbigpIHVzaW5nICcgKyByZWNvcmRJZCk7XHJcbiAgICAgIHRoaXMucmVhZFF1ZXN0aW9uKHRoaXMucmVjb3JkSWQpO1xyXG4gICAgICB0aGlzLnBvcCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBvcCA9IGZhbHNlO1xyXG4gICAgICAvL2NvbnNvbGUubG9nKCdTdW1tYXJ5IFBhZ2UgTG9naWMnKTtcclxuICAgICAgLy8gUmVzZXQgdGhlIFZhcmlhYmxlc1xyXG4gICAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcclxuICAgICAgdGhpcy5hbnN3ZXJXcmFwID0gbmV3IEFuc3dlcldyYXBwZXIoKTtcclxuICAgICAgdGhpcy5vcHRpb25WYWx1ZXMgPSBbXTtcclxuICAgICAgdGhpcy5zdWJRdWVzdGlvbnMgPSBbXTtcclxuXHJcbiAgICAgIHRoaXMucmVzZXRGbGFnKHR5cCk7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtID0gbnVsbDtcclxuXHJcbiAgICAgIC8vIFNob3cgU3VtbWFyeVxyXG4gICAgICBmb3IgKHZhciBxIG9mIHRoaXMucXVlc3Rpb25TdGFjaykge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ0hhbmRsaW5nIFF1ZXN0aW9uID0+ICcgKyBxKTtcclxuICAgICAgICB2YXIgYW5zV3JhcCA9IHRoaXMuYW5zd2VyTWFwLmdldChxKTtcclxuICAgICAgICBpZiAoYW5zV3JhcCkge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnSGFuZGxpbmcgQW5zd2VyIGZvciAnICsgYW5zV3JhcC5xdWVzSWQgKyAnIG9mIHR5cGUgJyArIGFuc1dyYXAucVR5cCk7XHJcbiAgICAgICAgICBpZihhbnNXcmFwLnFUeXAgPT0gJ0ZpbGUnIHx8IGFuc1dyYXAucVR5cCA9PSAnQm9vayd8fGFuc1dyYXAucVR5cCA9PSAnTGlzdCcgfHwgYW5zV3JhcC5xVHlwID09ICdDaGVja2JveCcpe1xyXG4gICAgICAgICAgICB2YXIgbmV3U3RyID0gJyc7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGFuc1N0ciBvZiBhbnNXcmFwLmFuc1ZhbHVlLnNwbGl0KCdAQCMjJCQnKSkge1xyXG4gICAgICAgICAgICAgIGZvciAodmFyIGFuc1N0cjEgb2YgYW5zU3RyLnNwbGl0KCckJEBAIyMnKSkge1xyXG4gICAgICAgICAgICAgIC8vICBpZihhbnNTdHIxLmluY2x1ZGVzKCdhbnN3ZXJTdHJpbmcnKSl7IC8vcmVtb3ZlIHRoZSBhbnN3ZXIgc3RyaW5nICBcclxuICAgICAgICAgICAgICAgLy8gICBjb25zdCB3aXRob3V0QW5zd2VyU3RyaW5nID0gYW5zU3RyMS5yZXBsYWNlKFwiYW5zd2VyU3RyaW5nOiBcIiwgXCJcIik7XHJcbiAgICAgICAgICAgICAgICAvLyAgYW5zU3RyMSA9IHdpdGhvdXRBbnN3ZXJTdHJpbmc7XHJcbiAgICAgICAgICAgICAgLy8gIH1cclxuICAgICAgICAgICAgICAgIGlmIChhbnNTdHIxLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKG5ld1N0ci5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciA9IGFuc1N0cjE7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyICs9ICc7ICcgKyBhbnNTdHIxOyAgLy9jb21tYSgsKSBjaGFuZ2VkIGFzIHNlbWkgY29sb24oOykgYmVjYXVzZSBvZiBhZGRyZXNzIGNvbnRhaW5zIGNvbW1hKCwpIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuYXR0YWNobWVudHNNYXAuaGFzKGFuc1dyYXAucXVlc0lkKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGF0dCBvZiB0aGlzLmF0dGFjaG1lbnRzTWFwLmdldChhbnNXcmFwLnF1ZXNJZCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdHIgPSBuZXdTdHIucmVwbGFjZShhdHQuYXR0YWNobWVudElkLCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gKG5ld1N0ci5yZXBsYWNlKCcsLCcsJywgJykpLnJlcGxhY2UoJywgLCcsJywgJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gbmV3U3RyLnN0YXJ0c1dpdGgoJywnKSA/IG5ld1N0ci5zdWJzdHJpbmcoMSwgbmV3U3RyLmxlbmd0aCkgOiAobmV3U3RyLmVuZHNXaXRoKCcsJykgPyBuZXdTdHIuc3Vic3RyaW5nKDAsIG5ld1N0ci5sZW5ndGggLSAxKSA6IG5ld1N0cik7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1hbnNXcmFwLmFuc1ZhbHVlID0gbmV3U3RyO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc1dyYXApO1xyXG4gICAgICAgICAgdGhpcy5iYWNraWNvbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUZXh0KHZhbHVlKSB7XHJcbiAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh2YWx1ZSwgXCJ0ZXh0L2h0bWxcIik7XHJcbiAgICAvL2NvbnNvbGUubG9nKCBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50KTtcclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChcclxuICAgICAgZG9jLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUJhY2tDbGljaygpIHtcclxuICAgIHRoaXMuYmFjayA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5wb3AgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucG9wKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uQmFja19UcmFja2luZ19JRF9fYyk7XHJcbiAgICB2YXIgY1F1ZXN0aW9uOiBRdWVzdGlvbiA9IG5ldyBRdWVzdGlvbigpO1xyXG4gICAgY1F1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkl0ZW07XHJcbiAgICBpZihjUXVlc3Rpb24uUXVlc3Rpb25fTm9fX2MgPT0nMScpe1xyXG4gICAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uQmFja19fYyk7XHJcbiAgICB9XHJcbiAgICBcclxuXHJcbiAgICB0aGlzLmFuc3dlckNvdW50LS07XHJcbiAgICB0aGlzLnVwZGF0ZVByb2dyZXNzKCk7XHJcbiAgICAvLyBDQVRFR09SSVpBVElPTlxyXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xyXG5cclxuICAgIGlmICh0aGlzLnN1bW1hcnkpIHtcclxuICAgICAgLy9jb25zb2xlLmxvZygnc3VtbWFyeSB0cnVlJyk7XHJcbiAgICAgIHRoaXMuc3VtbWFyeSA9IFtdO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5zdW1tYXJ5RGF0YSl7XHJcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEgPVtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlYWQgdGhlIHByZXZpb3VzIHF1ZXN0aW9uIGZyb20gREJcclxuICAgIHRoaXMucmVhZFF1ZXN0aW9uKHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKSk7XHJcbiAgICAvL2NvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25TdGFjayk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVCYWNrQ2xpY2tOZXcoKSB7XHJcbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uRWRpdF9fYyk7XHJcbiAgfVxyXG5cclxuICAvL3VwZGF0aW5nIHN0YXR1cyBvbmNlIFEmQSBjb21wbGV0ZWQuXHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQW5zd2VyQm9vayA9ICh1dWlkOiBzdHJpbmcpID0+IHtcclxuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcclxuICAgICAgICB0aGlzLnRrbixcclxuICAgICAgICBbXCJBbnN3ZXJCb29rXCIsIFwiVXBkYXRlXCIsIHV1aWRdLFxyXG4gICAgICAgIHRoaXMuc3VjY2Vzc3VwZGF0ZUFCLFxyXG4gICAgICAgIHRoaXMuZmFpbHVyZXVwZGF0ZUFCXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXHJcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NcIixcclxuICAgICAgICBbXCJBbnN3ZXJCb29rXCIsIFwiVXBkYXRlXCIsIHV1aWRdLFxyXG4gICAgICAgIHRoaXMuc3VjY2Vzc3VwZGF0ZUFCLFxyXG4gICAgICAgIHRoaXMuZmFpbHVyZXVwZGF0ZUFCXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1Y2Nlc3N1cGRhdGVBQiA9IChyZXNwb25zZSkgPT4ge1xyXG4gICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgLy8gLy9jb25zb2xlLmxvZygnc3RhdHVzIHN1Y2Nlc3MnKVxyXG4gICAgdGhpcy5hYkl0ZW0uU3RhdHVzX19jID0gXCJDb21wbGV0ZWRcIjtcclxuICB9O1xyXG4gIHByaXZhdGUgZmFpbHVyZXVwZGF0ZUFCID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdzdGF0dXMgZmFpbGVkJylcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHJlYWRRdWVzdGlvbkJvb2sgPSAodXVpZDogc3RyaW5nKSA9PiB7XHJcbiAgICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xyXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXHJcbiAgICAgICAgdGhpcy50a24sXHJcbiAgICAgICAgW1wiUXVlc3Rpb25Cb29rXCIsIFwicmVhZFwiLCB1dWlkXSxcclxuICAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkQm9vayxcclxuICAgICAgICB0aGlzLmZhaWx1cmVSZWFkQm9va1xyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxyXG4gICAgICAgIFwiTnh0Q29udHJvbGxlci5wcm9jZXNzXCIsXHJcbiAgICAgICAgW1wiUXVlc3Rpb25Cb29rXCIsIFwicmVhZFwiLCB1dWlkXSxcclxuICAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkQm9vayxcclxuICAgICAgICB0aGlzLmZhaWx1cmVSZWFkQm9va1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdWNjZXNzUmVhZEJvb2sgPSAocmVzcG9uc2UpID0+IHtcclxuICAgIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHN1Y2Nlc3NSZWFkQm9vaycpO1xyXG4gICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgaWYocmVzcG9uc2UgIT0gbnVsbCB8fCByZXNwb25zZSAhPSB1bmRlZmluZWQpe1xyXG4gICAgICB0aGlzLnFiSXRlbSA9IHJlc3BvbnNlLnF1ZXN0aW9uYm9vaztcclxuICAgICAgdGhpcy5hYkl0ZW0gPSByZXNwb25zZS5hbnN3ZXJib29rO1xyXG4gICAgfVxyXG4gICAvLyBjb25zb2xlLmxvZygncmVhZGluZ1F1ZXN0aW9uIHVzaW5nICcgKyB0aGlzLnFiSXRlbSk7XHJcbiAgICBpZiAodGhpcy5hYkl0ZW0/LlN0YXR1c19fYyA9PSBcIlBlbmRpbmdcIikge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5hYkl0ZW0uQW5zd2Vyc19fciA9PSBudWxsIHx8XHJcbiAgICAgICAgdGhpcy5hYkl0ZW0uQW5zd2Vyc19fci5yZWNvcmRzLmxlbmd0aCA9PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucmVhZFF1ZXN0aW9uKHRoaXMucWJJdGVtLkZpcnN0X1F1ZXN0aW9uX19jKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBQb3B1bGF0ZSB0aGUgZXhpc3RpbmcgYW5zd2Vyc1xyXG4gICAgICAgIHZhciBsYXN0UXVlc3Rpb25JZCA9IFwiXCI7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGFuc09iamVjdCBvZiB0aGlzLmFiSXRlbS5BbnN3ZXJzX19yLnJlY29yZHMpIHtcclxuICAgICAgICAgIGxhc3RRdWVzdGlvbklkID0gYW5zT2JqZWN0LlF1ZXN0aW9uX1JlZl9fYztcclxuXHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucHVzaChhbnNPYmplY3QuUXVlc3Rpb25fUmVmX19jKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmFuc3dlck1hcC5zZXQoYW5zT2JqZWN0LlF1ZXN0aW9uX1JlZl9fYywge1xyXG4gICAgICAgICAgICBxdWVzVmFsdWU6IGFuc09iamVjdC5RdWVzdGlvbl9SaWNoX1RleHRfX2MsXHJcbiAgICAgICAgICAgIGFuc1ZhbHVlOiBhbnNPYmplY3QuQW5zd2VyX0xvbmdfX2MsXHJcbiAgICAgICAgICAgIHF1ZXNJZDogYW5zT2JqZWN0LlF1ZXN0aW9uX1JlZl9fYyxcclxuICAgICAgICAgICAgcVR5cDogYW5zT2JqZWN0LlF1ZXN0aW9uX1R5cGVfX2MsXHJcbiAgICAgICAgICAgIGdyb3VwVGV4dDphbnNPYmplY3QuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5xdWVzdGlvblN0YWNrKVxyXG4gICAgICAgICAgaWYgKGFuc09iamVjdC5RdWVzdGlvbl9UeXBlX19jID09IFwiQm9va1wiKSB7XHJcbiAgICAgICAgICAgIHZhciBhdjEgPSBhbnNPYmplY3QuQW5zd2VyX0xvbmdfX2Muc3BsaXQoXCJAQCMjJCRcIik7XHJcbiAgICAgICAgICAgIC8vIC8vY29uc29sZS5sb2coXCJib29rIGxvZ1wiKTtcclxuXHJcbiAgICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKFwiYm9va2lkXCIgKyBhdjFbMF0pO1xyXG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRzTWFwLnNldChhbnNPYmplY3QuUXVlc3Rpb25fUmVmX19jLCBbXHJcbiAgICAgICAgICAgICAgeyBhdHRhY2htZW50TmFtZTogYXYxWzFdLCBhdHRhY2htZW50SWQ6IGF2MVswXSB9LFxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2codGhpcy5hdHRhY2htZW50c01hcCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGFuc09iamVjdC5RdWVzdGlvbl9UeXBlX19jID09IFwiRmlsZVwiKSB7XHJcbiAgICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKFwiaW5zaWRlIGlmXCIpO1xyXG4gICAgICAgICAgICB2YXIgYXR0TGlzdDtcclxuICAgICAgICAgICAgdmFyIGF0dDtcclxuICAgICAgICAgICAgZm9yICh2YXIgYXR0VmFyIG9mIGFuc09iamVjdC5BbnN3ZXJfTG9uZ19fYy5zcGxpdChcIixcIikpIHtcclxuICAgICAgICAgICAgICB2YXIgYXR0SWROYW1lID0gYXR0VmFyLnNwbGl0KFwiQEAjIyQkXCIpO1xyXG4gICAgICAgICAgICAgIGF0dC5hdHRhY2htZW50TmFtZSA9IGF0dElkTmFtZVsxXTtcclxuICAgICAgICAgICAgICBhdHQuYXR0YWNobWVudElkID0gYXR0SWROYW1lWzBdO1xyXG4gICAgICAgICAgICAgIGF0dExpc3QucHVzaChhdHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudHNNYXAuc2V0KGFuc09iamVjdC5RdWVzdGlvbl9SZWZfX2MsIGF0dExpc3QpO1xyXG4gICAgICAgICAgICAvLyAgLy9jb25zb2xlLmxvZyh0aGlzLmF0dGFjaG1lbnRzTWFwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKTtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuYW5zd2VyTWFwKTtcclxuICAgICAgICAvLyBSZWFkIHRoZSBsYXN0IGFuc3dlcmVkIHF1ZXN0aW9uXHJcbiAgICAgICAgdGhpcy5yZWFkUXVlc3Rpb24obGFzdFF1ZXN0aW9uSWQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWJJdGVtPy5TdGF0dXNfX2MgPT0gXCJDb21wbGV0ZWRcIikge1xyXG4gICAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQoXCJTdW1tYXJ5dXBkYXRlZFwiKTtcclxuICAgICAgLy8gVGVtcG9yYXJ5IEZpeCBmb3IgZHVwbGljYXRlIGFuc3dlcnMgb24gdGhlIHN1bW1hcnkuXHJcbiAgICAgIHRoaXMuc3VtbWFyeSA9IFtdO1xyXG4gICAgICB0aGlzLnBlcmNlbnQgPSAxMDA7XHJcbiAgICAgIHRoaXMucHJvZ3Jlc3NTdHlsZSA9IFwiMTAwJVwiO1xyXG5cclxuICAgICAgZm9yICh2YXIgYW5zd2VyIG9mIHRoaXMuYWJJdGVtLkFuc3dlcnNfX3IucmVjb3Jkcykge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coYW5zd2VyLlF1ZXN0aW9uX0dyb3VwX1RleHRfX2MpO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3JlcGVhdCcpO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coYW5zd2VyLlF1ZXN0aW9uX1JpY2hfVGV4dF9fYyk7XHJcbiAgICAgICAgdmFyIGFuc3dlcnMgPSB7fTtcclxuICAgICAgICBpZiAoYW5zd2VyLlF1ZXN0aW9uX1R5cGVfX2MgPT0gXCJGaWxlXCIpIHtcclxuICAgICAgICAgIHZhciBmaWxlcyA9IFwiXCI7XHJcbiAgICAgICAgICB2YXIgZkluZGV4ID0gMDtcclxuICAgICAgICAgIHZhciBmaWxlTGlzdCA9IGFuc3dlci5BbnN3ZXJfTG9uZ19fYy5zcGxpdChcIixcIik7XHJcbiAgICAgICAgICBmb3IgKHZhciBmaWxlSWROYW1lIG9mIGZpbGVMaXN0KSB7XHJcbiAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGZpbGVJZE5hbWUuc3BsaXQoXCJAIyRcIik7XHJcbiAgICAgICAgICAgIGlmIChmSW5kZXggPT0gMCkge1xyXG4gICAgICAgICAgICAgIGZpbGVzID0gZmlsZU5hbWVbMV07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgZmlsZXMgPSBmaWxlcyArIFwiICxcIiArIGZpbGVOYW1lWzFdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmSW5kZXgrKztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBhbnN3ZXJzID0ge1xyXG4gICAgICAgICAgICBncm91cFRleHQ6YW5zd2VyLlF1ZXN0aW9uX0dyb3VwX1RleHRfX2MsXHJcbiAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zd2VyLlF1ZXN0aW9uX1JpY2hfVGV4dF9fYyxcclxuICAgICAgICAgICAgYW5zVmFsdWU6IGZpbGVzLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYW5zd2VyLlF1ZXN0aW9uX1R5cGVfX2MgPT0gXCJCb29rXCIpIHtcclxuICAgICAgICAgIC8qICB2YXIgcXVlc05vPTA7XHJcbiAgICAgICAgIGlmKGFuc3dlci5BbnN3ZXJfTG9uZ19fYy5pbmNsdWRlcyhcIkBAIyMkJFwiKSl7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2xpbmUgMTIyMycpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBicUFuc3dlclZhbHVlIG9mIGFuc3dlci5BbnN3ZXJfTG9uZ19fYy5zcGxpdChcIkBAIyMkJFwiKSkge1xyXG4gICAgICAgICAgICAgIHZhciBxdWVzVmFsdWU9YW5zd2VyLlF1ZXN0aW9uX1RleHRfX2Muc3BsaXQoXCJAQCMjJCRcIik7XHJcbiAgICAgICAgICAgICAgYW5zd2VycyA9IHt9O1xyXG4gICAgICAgICAgICAgIGFuc3dlcnMgPSB7XHJcbiAgICAgICAgICAgICAgIC8vIGdyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fVGV4dF9fYyxcclxuICAgICAgICAgICAgICAgIHF1ZXNWYWx1ZTogIFwiJmx0O3AmZ3Q7XCIrIHF1ZXNWYWx1ZVtxdWVzTm9dK1wiJmx0O3AmZ3Q7XCIsXHJcbiAgICAgICAgICAgICAgICBhbnNWYWx1ZTogYnFBbnN3ZXJWYWx1ZSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIHF1ZXNObysrO1xyXG4gICAgICAgICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgfSovXHJcbiAgICAgICAgICBpZihhbnN3ZXIuQW5zd2VyX0xvbmdfX2MuaW5jbHVkZXMoXCJAQCMjJCRcIikpe1xyXG4gICAgICAgICAgICB2YXIgYW5zd2VydmFsdWVzID0gYW5zd2VyLkFuc3dlcl9Mb25nX19jLnNwbGl0KFwiQEAjIyQkXCIpO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCd2YWx1ZScpXHJcbiAgICAgICAgICAgIGFuc3dlcnMgPSB7ICAgICAgXHJcbiAgICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyxcclxuICAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zd2VyLlF1ZXN0aW9uX1JpY2hfVGV4dF9fYyxcclxuICAgICAgICAgICAgIGFuc1ZhbHVlOiBhbnN3ZXJ2YWx1ZXMsXHJcbiAgICAgICAgICAgfTtcclxuICAgICAgICAgICAvL2NvbnNvbGUubG9nKGFuc3dlcnMpXHJcbiAgICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgYW5zd2VycyA9IHsgICAgICBcclxuICAgICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyxcclxuICAgICAgICAgICAgICBxdWVzVmFsdWU6IGFuc3dlci5RdWVzdGlvbl9SaWNoX1RleHRfX2MsXHJcbiAgICAgICAgICAgICAgYW5zVmFsdWU6IGFuc3dlci5BbnN3ZXJfTG9uZ19fYyxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgLy8gdmFyIGFuczEgPSBhbnN3ZXIuQW5zd2VyX0xvbmdfX2Muc3BsaXQoXCJAQCMjJCRcIik7XHJcbiAgICAgICAgICBhbnN3ZXJzID0geyAgICAgIFxyXG4gICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyxcclxuICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnN3ZXIuUXVlc3Rpb25fUmljaF9UZXh0X19jLFxyXG4gICAgICAgICAgICBhbnNWYWx1ZTogYW5zd2VyLkFuc3dlcl9Mb25nX19jLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgZmFpbHVyZVJlYWRCb29rID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBmYWlsdXJlUmVhZEJvb2snKTtcclxuICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHJlYWRBbnN3ZXJib29rID0gKHV1aWQ6IHN0cmluZykgPT4ge1xyXG4gICAgaWYodGhpcy5zZXJ2ID0gXCJhcGlcIikge1xyXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXHJcbiAgICAgICAgdGhpcy50a24sXHJcbiAgICAgICAgW1wiQW5zd2VyQm9va1wiLCBcInJlYWRcIiwgdXVpZF0sXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzQW5zd2VyQm9va1JlYWQsXHJcbiAgICAgICAgdGhpcy5mYWlsdXJlQW5zd2VyQm9va1JlYWRcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcclxuICAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc1wiLFxyXG4gICAgICAgIFtcIkFuc3dlckJvb2tcIiwgXCJyZWFkXCIsIHV1aWRdLFxyXG4gICAgICAgIHRoaXMuc3VjY2Vzc0Fuc3dlckJvb2tSZWFkLFxyXG4gICAgICAgIHRoaXMuZmFpbHVyZUFuc3dlckJvb2tSZWFkXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBzdWNjZXNzQW5zd2VyQm9va1JlYWQgPSAocmVzcG9uc2UpID0+IHtcclxuICAgIGlmICh0aGlzLmFiSXRlbT8uU3RhdHVzX19jID09IFwiQ29tcGxldGVkXCIpIHtcclxuICAgICAgZm9yICh2YXIgYW5zd2VyIG9mIHRoaXMuYWJJdGVtLkFuc3dlcnNfX3IucmVjb3Jkcykge1xyXG4gICAgICAgIHZhciBhdiA9IGFuc3dlci5BbnN3ZXJfTG9uZ19fYy5zcGxpdChcIkBAIyMkJFwiKTtcclxuICAgICAgICB2YXIgYW5zd2VycyA9IHsgcXVlc1ZhbHVlOiBhbnN3ZXIuUXVlc3Rpb25fUmljaF9UZXh0X19jLCBhbnNWYWx1ZTogYXYsIGdyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyB9O1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coYW5zd2VycylcclxuICAgICAgICB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQoXCJTdW1tYXJ5dXBkYXRlZFwiKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIGZhaWx1cmVBbnN3ZXJCb29rUmVhZCA9IChyZXNwb25zZSkgPT4ge1xyXG4gICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVyZWFkJyk7XHJcbiAgICAvL2NvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHJlYWRRdWVzdGlvbiA9ICh1dWlkOiBzdHJpbmcpID0+IHtcclxuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcclxuICAgICAgICB0aGlzLnRrbixcclxuICAgICAgICBbXCJRdWVzdGlvblwiLCBcInJlYWRcIiwgdXVpZF0sXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzUmVhZCxcclxuICAgICAgICB0aGlzLmZhaWx1cmVSZWFkXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXHJcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NcIixcclxuICAgICAgICBbXCJRdWVzdGlvblwiLCBcInJlYWRcIiwgdXVpZF0sXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzUmVhZCxcclxuICAgICAgICB0aGlzLmZhaWx1cmVSZWFkXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1Y2Nlc3NSZWFkID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBzdWNjZXNzUmVhZCBuZXcnKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtKTtcclxuICAgIC8vIFJlc2V0IHRoZSBWYXJpYWJsZXNcclxuXHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0pIHtcclxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XHJcbiAgICAgIHRoaXMuYW5zd2VyV3JhcCA9IG5ldyBBbnN3ZXJXcmFwcGVyKCk7XHJcbiAgICAgIHRoaXMub3B0aW9uVmFsdWVzID0gW107XHJcbiAgICAgIHRoaXMuc3ViUXVlc3Rpb25zID0gW107XHJcbiAgICAgIHRoaXMucmVzZXRGbGFnKHRoaXMucXVlc3Rpb25JdGVtLlR5cGVfX2MpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5xdWVzdGlvbkl0ZW0gPSByZXNwb25zZS5xdWVzdGlvbjtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtKTtcclxuXHJcbiAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS5UeXBlX19jID09PSAnQWxwaGFudW1lcmljJyl7XHJcbiAgICAgIHRoaXMuc3BsQ0NCYWNrQ2xpY2sgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5JZDtcclxuICAgIHRoaXMuaGFuZGxlUGFnZS5lbWl0KHRoaXMucXVlc3Rpb25JdGVtLlRyYWNraW5nX0lEX19jKTtcclxuICAgIC8vIEhhbmRsZSB0aGUgc3ViUXVlc3Rpb24gb3B0aW9uc1xyXG4gICAgaWYgKHJlc3BvbnNlLnNxT3B0aW9ucykge1xyXG4gICAgICAvL3ZhciBuZXdSZWNvcmRzID0gW107XHJcbiAgICAgIGZvciAodmFyIHEgb2YgdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMpIHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKHEuTmFtZSk7XHJcbiAgICAgICAgdmFyIHNxID0gcmVzcG9uc2Uuc3FPcHRpb25zW3EuSWRdO1xyXG4gICAgICAgIGlmIChzcSkge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnZm91bmQgb3B0aW9ucyBmb3Igc3VicXVlc3Rpb24gJyArIHEuTmFtZSk7XHJcbiAgICAgICAgICBpZiAoIXEuUXVlc3Rpb25fT3B0aW9uc19fcikge1xyXG4gICAgICAgICAgICBxLlF1ZXN0aW9uX09wdGlvbnNfX3IgPSBzcS5RdWVzdGlvbl9PcHRpb25zX19yO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9jZXNzUXVlc3Rpb24oKTtcclxuICAgIHRoaXMuaW5uZXJodG1sID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXHJcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtLkFkZGl0aW9uYWxfUmljaF9fY1xyXG4gICAgKTtcclxuICAgIHRoaXMudHJhY2tJZCgpO1xyXG4gIH07XHJcblxyXG4gIHRyYWNrSWQoKSB7XHJcbiAgICB2YXIgcXRyYWNrSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5UcmFja2luZ19JRF9fYztcclxuICAgIC8vY29uc29sZS5sb2coJ3RyYWNrSWQtcXVlc3Rpb24nK3F0cmFja0lkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmFpbHVyZVJlYWQgPSAocmVzcG9uc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlcmVhZCcpO1xyXG4gICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBzYXZlQW5zd2VyID0gKCkgPT4ge1xyXG4gICAgLy8gU2V0IHRoZSBBbnN3ZXIgTnVtYmVyIGJhc2VkIG9uIHRoZSBRdWVzdGlvbiBTdGFjayBMZW5ndGhcclxuICAgIGlmICh0aGlzLmlucFZhbHVlICE9IFwiLlwiKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uSWQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hbnN3ZXJXcmFwLmFuc051bWJlciA9IHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggKyAxO1xyXG5cclxuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcclxuICAgICAgICB0aGlzLnRrbixcclxuICAgICAgICBbXCJBbnN3ZXJcIiwgXCJjcmVhdGVcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5hbnN3ZXJXcmFwKV0sXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzU2F2ZSxcclxuICAgICAgICB0aGlzLmZhaWx1cmVTYXZlXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXHJcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NcIixcclxuICAgICAgICBbXCJBbnN3ZXJcIiwgXCJjcmVhdGVcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5hbnN3ZXJXcmFwKV0sXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzU2F2ZSxcclxuICAgICAgICB0aGlzLmZhaWx1cmVTYXZlXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgaHRtbERlY29kZShpbnB1dCkge1xyXG4gICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaW5wdXQsIFwidGV4dC9odG1sXCIpO1xyXG4gICAgcmV0dXJuIGRvYy5kb2N1bWVudEVsZW1lbnQudGV4dENvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1Y2Nlc3NTYXZlID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgIC8vdGhpcy5hYkl0ZW0gPSByZXNwb25zZS5hbnN3ZXJib29rO1xyXG4gICAgICB0aGlzLmFuc3dlck1hcC5zZXQocmVzcG9uc2UuYW5zd2VyLnF1ZXNJZCwgcmVzcG9uc2UuYW5zd2VyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvci5lcnJvck1zZyA9IHJlc3BvbnNlLmVycm9yLmVycm9yTXNnO1xyXG4gICAgfVxyXG4gICAgaWYoIXRoaXMuYmFja0J1dHRvbkZsYWcpe1xyXG4gICAgICB0aGlzLm5leHQoKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIGZhaWx1cmVTYXZlID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZVNhdmUnKTtcclxuICAgIC8vY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgcHJvY2Vzc1F1ZXN0aW9uID0gKCkgPT4ge1xyXG4gICAgLy8gY29uc29sZS5sb2coJ0luc2lkZSB0aGUgcHJvY2Vzc1F1ZXN0aW9uJyk7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnc3BsQ0NCYWNrQ2xpY2sgPSAnK3RoaXMuc3BsQ0NCYWNrQ2xpY2spO1xyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvblN0YWNrKTtcclxuICAgIC8vY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xyXG4gICAgdGhpcy5wb3AgPSB0cnVlO1xyXG5cclxuICAgIC8vIGlmKCF0aGlzLmJhY2spe1xyXG4gICAgLy8gICB0aGlzLnF1ZXN0aW9uTmFtZS5wdXNoKHRoaXMucXVlc3Rpb25JdGVtLk5hbWUpXHJcbiAgICAvLyB9XHJcblxyXG4gICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYyA9PT0gdHJ1ZSkge1xyXG4gICAgICBpZiAoIXRoaXMuYmFjaykge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25OYW1lLnB1c2godGhpcy5xdWVzdGlvbkl0ZW0uTmFtZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5iYWNrID0gZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uTmFtZVswXSA9PT0gdGhpcy5xdWVzdGlvbk5hbWVbMV0pIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wb3AoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jdXJyZW50TmFtZSA9IHRoaXMucXVlc3Rpb25JdGVtLk5hbWU7XHJcbiAgICAgIHRoaXMucGF0aHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbk5hbWUuaW5kZXhPZih0aGlzLmN1cnJlbnROYW1lKTtcclxuICAgICAgdGhpcy5wb3NzaWJpbGl0aWVzID0gdGhpcy5xYkl0ZW0uUG9zc2liaWxpdGllc19fYztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnM7XHJcbiAgICB0aGlzLmRheSgpO1xyXG4gICAgLy9jb25zb2xlLmxvZygncHJvY2Vzc2luZyBxdWVzdGlvbiAnICsgdGhpcy5xdWVzdGlvbkl0ZW0uTmFtZSArICcgZXhpc3RpbmcgYW5zd2VycyBhcmUgJyArIHRoaXMuYW5zd2VyTWFwLnNpemUpOyAvLyA9PiAnICsgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVzdGlvbkl0ZW0pKTtcclxuXHJcbiAgICAvLyBTZXQgdGhlIEZsYWdzIHRvIHNob3cgcmlnaHQgZmllbGRzXHJcbiAgICB0aGlzLnNldEZsYWcodGhpcy5xdWVzdGlvbkl0ZW0uVHlwZV9fYyk7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdBZnRlciB0aGUgc2V0RmxhZyBtZXRob2QgZHRGbGFnID0gJyt0aGlzLmR0RmxhZyk7XHJcblxyXG4gICAgLy8gQ2hlY2sgdGhlIGV4aXN0aW5nIGFuc3dlciBmcm9tIGFuc3dlck1hcFxyXG4gICAgaWYgKHRoaXMuYW5zd2VyTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpIHtcclxuICAgICAgLy8gIC8vY29uc29sZS5sb2coXCJleGlzdGluZyBhbnN3ZXIgZm91bmQgZm9yIHRoaXMucXVlc3Rpb25JdGVtLk5hbWVcIik7XHJcbiAgICAgIHZhciBlQW5zd2VyID0gdGhpcy5hbnN3ZXJNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKTtcclxuICAgICAgLy8gR2V0IHRoZSBleGlzdGluZyBhbnN3ZXIgZnJvbSB0aGUgTWFwXHJcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBlQW5zd2VyLmFuc1ZhbHVlO1xyXG4gICAgICAvL2NvbnNvbGUubG9nKCdpbnBWYWx1ZSBoYXMgYmVlbiBzZXQgdG8gJyArIHRoaXMuaW5wVmFsdWUpO1xyXG4gICAgICBpZiAodGhpcy5hdHRhY2htZW50c01hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uSWQpKSB7XHJcbiAgICAgICAgdGhpcy5hdHRhY2htZW50cyA9IHRoaXMuYXR0YWNobWVudHNNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIHJlbW92aW5nIGF0dGFjaG1lbnQgYXJyYXknKTtcclxuICAgICAgdGhpcy5hdHRhY2htZW50cyA9IFtdO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZSk7XHJcbiAgICBpZih0aGlzLnNwbENDQmFja0NsaWNrICYmIHRoaXMuaW5wVmFsdWUgJiYgdGhpcy5pbnBWYWx1ZS5pbmNsdWRlcygnRVMnKSl7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGlmIGNvbmQnKTtcclxuICAgICAgdGhpcy5zcGxDQ0JhY2tDbGljayA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZS5yZXBsYWNlKCdFUycsJycpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoZWNrYm94RmxhZykge1xyXG4gICAgICAvLyBTZXQgdGhlIE9wdGlvbnMgZm9yIENoZWNrYm94XHJcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyh0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHMpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmJvb2tGbGFnKSB7XHJcbiAgICAgIC8vY29uc29sZS5sb2coJ0luaXNlIHRoZSBleHBlY3RlZCBib29rRmxhZyBjb25kJyk7XHJcbiAgICAgIC8vY29uc29sZS5sb2coJ2R0RmxhZyA9ICcrdGhpcy5kdEZsYWcpO1xyXG4gICAgICB0aGlzLnNldFN1YlF1ZXN0aW9ucyh0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMubGlzdEZsYWcpIHtcclxuICAgICAgLy8gU2V0IHRoZSBMb2NhbFN1YlF1ZXN0aW9uc1xyXG4gICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGxpc3QgZmxhZycpO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcyk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuYWJJdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKTtcclxuICAgICAgaWYoIXRoaXMubG9jYWxTdWJRTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpe1xyXG4gICAgICAgIHRoaXMuc2V0U3ViUXVlc3Rpb25zKHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKTtcclxuICAgICAgfSBcclxuICAgIH0gZWxzZSBpZiAodGhpcy5kdEZsYWcpIHtcclxuICAgICAgLy9jb25zb2xlLmxvZygnSW5pc2UgdGhlIHVuZXhwZWN0ZWQgZHRGbGFnIGNvbmQnKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBcIlwiO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gXCJcIjtcclxuICAgICAgdGhpcy5zZWxEYXRlID0gXCJcIjtcclxuICAgICAgLy8gMjAyMS01LTE2VDAwOjAwXHJcbiAgICAgIGlmICh0aGlzLmRhdGVNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLklkKSkge1xyXG4gICAgICAgIHRoaXMuc2VsRGF0ZSA9IHRoaXMuZGF0ZU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkaG91ck1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uSWQpKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSB0aGlzLnNlbGVjdGVkaG91ck1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkbWludXRlTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gdGhpcy5zZWxlY3RlZG1pbnV0ZU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT09IHRydWUpIHtcclxuICAgICAgICB0aGlzLmhvdXJzLnB1c2goXHJcbiAgICAgICAgICBcIjEzXCIsXHJcbiAgICAgICAgICBcIjE0XCIsXHJcbiAgICAgICAgICBcIjE1XCIsXHJcbiAgICAgICAgICBcIjE2XCIsXHJcbiAgICAgICAgICBcIjE3XCIsXHJcbiAgICAgICAgICBcIjE4XCIsXHJcbiAgICAgICAgICBcIjE5XCIsXHJcbiAgICAgICAgICBcIjIwXCIsXHJcbiAgICAgICAgICBcIjIxXCIsXHJcbiAgICAgICAgICBcIjIyXCIsXHJcbiAgICAgICAgICBcIjIzXCIsXHJcbiAgICAgICAgICBcIjAwXCJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5ob3VycyA9IHRoaXMuaG91cnMuc2xpY2UoMCwgMTIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmR0RmxhZyAmJiB0aGlzLmlucFZhbHVlKSB7XHJcbiAgICAgICAgdmFyIGR0VmFsID0gdGhpcy5pbnBWYWx1ZS5zcGxpdChcIlRcIik7IFxyXG4gICAgICAgIHZhciBkdHZhbDAgPSB0aGlzLmlucFZhbHVlLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICB0aGlzLmlucFZhbHVlID0gZHRWYWxbMF07XHJcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IGR0dmFsMFswXTtcclxuXHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBkdFZhbFsxXTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9IGR0dmFsMFsxXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uSXNfRGF0ZV9CYWNrd2FyZF9fYyB8fFxyXG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLklzX0RhdGVfRm9yd2FyZF9fY1xyXG4gICAgICApIHtcclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uSXNfRGF0ZV9CYWNrd2FyZF9fYyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVTaW5jZSA9IHtcclxuICAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxyXG4gICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcclxuICAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSArIDEsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uSXNfRGF0ZV9Gb3J3YXJkX19jID09PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMuZGlzYWJsZVVudGlsID0ge1xyXG4gICAgICAgICAgICB5ZWFyOiB0aGlzLnRvZGF5LmdldEZ1bGxZZWFyKCksXHJcbiAgICAgICAgICAgIG1vbnRoOiB0aGlzLnRvZGF5LmdldE1vbnRoKCkgKyAxLFxyXG4gICAgICAgICAgICBkYXk6IHRoaXMudG9kYXkuZ2V0RGF0ZSgpLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5maWxlRmxhZykge1xyXG4gICAgICB0aGlzLmZpbGVVSSgpO1xyXG4gICAgICAvLyBsb2dpY1xyXG4gICAgICB0aGlzLmFsbG93ZWRGaWxlRXh0ZW5zaW9uID1cclxuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5BbGxvd2VkX0ZpbGVfRXh0ZW5zaW9uc19fYy5zcGxpdChcIjtcIik7XHJcbiAgICAgIC8vY29uc29sZS5sb2codGhpcy5hbGxvd2VkRmlsZUV4dGVuc2lvbik7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHNldEZsYWcodHlwKSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgc2V0RmxhZyBmb3IgJyArIHR5cCk7XHJcblxyXG4gICAgaWYgKHR5cCkge1xyXG4gICAgICAvLyBTZXQgdGhlIEZsYWdzXHJcbiAgICAgIGlmICh0eXAgPT0gXCJUZXh0XCIpIHtcclxuICAgICAgICB0aGlzLnRleHRGbGFnID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLm51bWJlckZsYWcgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIk51bWJlclwiKSB7XHJcbiAgICAgICAgdGhpcy5udW1iZXJGbGFnID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJBbHBoYU51bWVyaWNcIikge1xyXG4gICAgICAgIHRoaXMuYWxwaGFudW1lcmljRmxhZyA9IHRydWU7XHJcbiAgICAgICAgLyppZih0aGlzLmlucFZhbHVlLmxlbmd0aCA9PT0gMCl7XHJcbiAgICAgICAgICB0aGlzLmlucFZhbHVlPSdFUydcclxuICAgICAgICB9Ki9cclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJFbWFpbFwiKSB7XHJcbiAgICAgICAgdGhpcy5lbWFpbEZsYWcgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkZpbGVcIikge1xyXG4gICAgICAgIHRoaXMuZmlsZUZsYWcgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVUaW1lXCIpIHtcclxuICAgICAgICB0aGlzLmR0RmxhZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50aW1lRmxhZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kYXRlRmxhZyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGV4dEFyZWFcIikge1xyXG4gICAgICAgIHRoaXMudGFGbGFnID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJSYWRpb1wiKSB7XHJcbiAgICAgICAgdGhpcy5yYWRpb0ZsYWcgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRyb3Bkb3duXCIpIHtcclxuICAgICAgICB0aGlzLmRyb3Bkb3duRmxhZyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiQ2hlY2tib3hcIikge1xyXG4gICAgICAgIHRoaXMuY2hlY2tib3hGbGFnID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJCb29rXCIpIHtcclxuICAgICAgICB0aGlzLmJvb2tGbGFnID0gdHJ1ZTtcclxuICAgICAgfWVsc2UgaWYgKHR5cCA9PSAnTGlzdCcpe1xyXG4gICAgICAgIHRoaXMubGlzdEZsYWcgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRpbWVcIikge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgVGltZSBjb25kJyk7XHJcbiAgICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudGltZUZsYWcgPSB0cnVlO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kdEZsYWcpO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVcIikge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgRGF0ZSBjb25kJyk7XHJcbiAgICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGF0ZUZsYWcgPSB0cnVlO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kdEZsYWcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldEZsYWcodHlwKSB7XHJcbiAgICBpZiAodHlwKSB7XHJcbiAgICAgIC8vIFNldCB0aGUgRmxhZ3NcclxuICAgICAgaWYgKHR5cCA9PSBcIlRleHRcIikge1xyXG4gICAgICAgIHRoaXMudGV4dEZsYWcgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMubnVtYmVyRmxhZyA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIk51bWJlclwiKSB7XHJcbiAgICAgICAgdGhpcy5udW1iZXJGbGFnID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiQWxwaGFudW1lcmljXCIpIHtcclxuICAgICAgICB0aGlzLmFscGhhbnVtZXJpY0ZsYWcgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJFbWFpbFwiKSB7XHJcbiAgICAgICAgdGhpcy5lbWFpbEZsYWcgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJGaWxlXCIpIHtcclxuICAgICAgICB0aGlzLmZpbGVGbGFnID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiRGF0ZVRpbWVcIikge1xyXG4gICAgICAgIHRoaXMuZHRGbGFnID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kYXRlRmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudGltZUZsYWcgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJUZXh0QXJlYVwiKSB7XHJcbiAgICAgICAgdGhpcy50YUZsYWcgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJSYWRpb1wiKSB7XHJcbiAgICAgICAgdGhpcy5yYWRpb0ZsYWcgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJEcm9wZG93blwiKSB7XHJcbiAgICAgICAgdGhpcy5kcm9wZG93bkZsYWcgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJDaGVja2JveFwiKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja2JveEZsYWcgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJCb29rXCIpIHtcclxuICAgICAgICB0aGlzLmJvb2tGbGFnID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwID09ICdMaXN0Jyl7XHJcbiAgICAgICAgdGhpcy5saXN0RmxhZyA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRpbWVcIikge1xyXG4gICAgICAgIHRoaXMuZHRGbGFnID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50aW1lRmxhZyA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVcIikge1xyXG4gICAgICAgIHRoaXMuZHRGbGFnID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kYXRlRmxhZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRPcHRpb25zKHJlY29yZHMpIHtcclxuICAgIGZvciAodmFyIG9wdCBvZiByZWNvcmRzKSB7XHJcbiAgICAgIHZhciBvdiA9IG5ldyBPcHRpb25WYWx1ZSgpO1xyXG4gICAgICBvdi5JZCA9IG9wdC5JZDtcclxuICAgICAgb3YuTmFtZSA9IG9wdC5OYW1lO1xyXG4gICAgICBvdi5WYWx1ZV9fYyA9IG9wdC5WYWx1ZV9fYztcclxuICAgICAgb3YuTmV4dF9RdWVzdGlvbl9fYyA9IG9wdC5OZXh0X1F1ZXN0aW9uX19jO1xyXG4gICAgICBvdi5jaGVja2VkID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSAmJlxyXG4gICAgICAgIHRoaXMuaW5wVmFsdWUuc3BsaXQoXCJAQCMjJCRcIikuaW5jbHVkZXMob3B0LlZhbHVlX19jKVxyXG4gICAgICApIHtcclxuICAgICAgICBvdi5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5vcHRpb25WYWx1ZXMucHVzaChvdik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBDYXB0dXJlIGFuZCBQcm9jZXNzIENoaWxkIEV2ZW50XHJcbiAgY2hpbGRFdmVudENhcHR1cmUoZXZlbnQsIHF1ZXM/OmFueSkge1xyXG4gICAgY29uc29sZS5sb2coJ2luc2lkZSBjaGlsZEV2ZW50Q2FwdHVyZSAnKTtcclxuICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcclxuICAgIHRoaXMuY2hhbmdlU2VydmljZS5hbm5vdW5jZUNoYW5nZShldmVudCk7XHJcbiAgICAvL3F1ZXMuaW5wdXQgPSBldmVudDsgLy8gaGVyZSB3aGVuIHVzaW5nIHRoZSBuZy1zZWxlY3QgZ290IGV2ZW50IGFzIHZhbHVlXHJcbiAgfVxyXG5cclxuICBzZXRTdWJRdWVzdGlvbnMocmVjb3Jkcykge1xyXG4gICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBzZXRTdWJRdWVzdGlvbnMnKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlY29yZHMpO1xyXG4gICAgdmFyIHFhTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZSk7XHJcbiAgICBpZiAodGhpcy5pbnBWYWx1ZSkge1xyXG4gICAgICB2YXIgYUluZGV4ID0gMDtcclxuICAgICAgLy8gc2VhcmNoIGNoYW5nZWQgYXMgc2VtaSBjb2xvbiBiZWNhdXNlIG9mIGFkZHJlc3MgY29udGFpbnMgY29tbWEgXHJcbiAgICAgIGlmICgodGhpcy5pbnBWYWx1ZS5zZWFyY2goXCI7IFwiKSA9PSAtMSkpIHtcclxuICAgICAgIC8vIGNvbnN0IHdpdGhvdXRBbnN3ZXJTdHJpbmcgPSB0aGlzLmlucFZhbHVlLnJlcGxhY2UoXCJhbnN3ZXJTdHJpbmc6IFwiLCBcIlwiKTsgLy9yZW1vdmUgdGhlIGFuc3dlciBzdHJpbmdcclxuICAgICAgIC8vIHRoaXMuaW5wVmFsdWUgPSB3aXRob3V0QW5zd2VyU3RyaW5nO1xyXG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgJ0BAIyMkJCcgO1xyXG4gICAgICAgIGZvciAodmFyIGFuc1N0ciBvZiB0aGlzLmlucFZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpKSB7XHJcbiAgICAgICAgICBhSW5kZXgrKztcclxuICAgICAgICAgIHFhTWFwLnNldChhSW5kZXgsIGFuc1N0cik7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdTZXR0aW5nIHRoZSBxYU1hcCBmb3IgJyArIGFJbmRleCArICcgd2l0aCAnICsgYW5zU3RyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yICh2YXIgYW5zU3RyIG9mIHRoaXMuaW5wVmFsdWUuc3BsaXQoXCI7IFwiKSkge1xyXG4gICAgICAgICAgYUluZGV4Kys7XHJcbiAgICAgICAgICBxYU1hcC5zZXQoYUluZGV4LCBhbnNTdHIpO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnU2V0dGluZyB0aGUgcWFNYXAgJyArIGFJbmRleCArICcgd2l0aCAnICsgYW5zU3RyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKCdhZnRlciBzZXR0aW5nIHZhbHVlcyBmcm9tIGlucHZhbHVlIHFhIG1hcCBhcmUnKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHFhTWFwKTtcclxuXHJcbiAgICBmb3IgKHZhciBxdWVzIG9mIHJlY29yZHMpIHtcclxuICAgICAgaWYgKHF1ZXMuVHlwZV9fYyA9PSBcIkZpbGVcIikge1xyXG4gICAgICAgIHRoaXMudmFsdWVOYW1lMSA9IHF1ZXMuQWxsb3dlZF9GaWxlX0V4dGVuc2lvbnNfX2M7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnZhbHVlTmFtZTEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgYW5zID0gJyc7XHJcbiAgICAgIGlmIChxYU1hcC5oYXMocXVlcy5RdWVzdGlvbl9Ob19fYykpIHtcclxuICAgICAgICAgIHF1ZXMuaW5wdXQgPSBxYU1hcC5nZXQocXVlcy5RdWVzdGlvbl9Ob19fYyk7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnYWZ0ZXIgZmV0Y2hpbmcgbWFwIHZhbHVlcycpO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcy5pbnB1dCk7XHJcbiAgICAgICAgICBpZihxdWVzLmlucHV0LmluZGV4T2YoJyQkQEAjIycpID4gMCl7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdhbnN3ZXIgc3VwcG9zZWQgdG8gYmUgdHJpbW1lZCcpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVzLmlucHV0KTtcclxuICAgICAgICAgICAgYW5zID0gcXVlcy5pbnB1dC5zdWJzdHJpbmcocXVlcy5pbnB1dC5pbmRleE9mKCckJEBAIyMnKSs2LHF1ZXMuaW5wdXQubGVuZ3RoKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYW5zKTtcclxuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IHF1ZXMuaW5wdXQuc3Vic3RyaW5nKDAscXVlcy5pbnB1dC5pbmRleE9mKCckJEBAIyMnKSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXMuaW5wdXQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIGlmICgocXVlcy5UeXBlX19jID09PSBcIkRhdGVcIikgJiYgKHF1ZXMuSXNfRGF0ZV9CYWNrd2FyZF9fYyB8fCBxdWVzLklzX0RhdGVfRm9yd2FyZF9fYykpIHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGRhdGUgYmFja3dhcmQvZm9yd2FyZCBjb25kJyk7XHJcbiAgICAgICAgaWYgKHF1ZXMuSXNfRGF0ZV9CYWNrd2FyZF9fYyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBJc19EYXRlX0JhY2t3YXJkX19jJyk7XHJcbiAgICAgICAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMuZGlzYWJsZVNpbmNlID0ge1xyXG4gICAgICAgICAgICB5ZWFyOiB0aGlzLnRvZGF5LmdldEZ1bGxZZWFyKCksXHJcbiAgICAgICAgICAgIG1vbnRoOiB0aGlzLnRvZGF5LmdldE1vbnRoKCkgKyAxLFxyXG4gICAgICAgICAgICBkYXk6IHRoaXMudG9kYXkuZ2V0RGF0ZSgpICsgMSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChxdWVzLklzX0RhdGVfRm9yd2FyZF9fYyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBJc19EYXRlX0ZvcndhcmRfX2MnKTtcclxuICAgICAgICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucy5kaXNhYmxlVW50aWwgPSB7XHJcbiAgICAgICAgICAgIHllYXI6IHRoaXMudG9kYXkuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgICAgICAgbW9udGg6IHRoaXMudG9kYXkuZ2V0TW9udGgoKSArIDEsXHJcbiAgICAgICAgICAgIGRheTogdGhpcy50b2RheS5nZXREYXRlKCksXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3ViUXVlc3Rpb25zLnB1c2gocXVlcyk7XHJcbiAgICAgIGZvcih2YXIgaT0wOyBpPHRoaXMuc3ViUXVlc3Rpb25zLmxlbmd0aDtpKyspe1xyXG4gICAgICAgIC8vIHRvIHNob3cvaGlkZSB0aGUgZGVwZW5kZW50IGRyb3Bkb3duIG9ubHkgZmllbGQgdXNpbmcgdGhlIGRyb3BEb3duT25seSBib29sZWFuXHJcbiAgICAgICAgaWYodGhpcy5zdWJRdWVzdGlvbnNbaV0uU2l6ZV9fYyA9PSA0KXtcclxuICAgICAgICAgIHRoaXMuc3ViUXVlc3Rpb25zW2ldLmRyb3BEb3duT25seSA9IHRydWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5kcm9wRG93bk9ubHkgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYoYW5zICE9ICcnKXtcclxuICAgICAgICBmb3IodmFyIGFuIG9mIChhbnMuc3BsaXQoJyQkQEAjIycpKSl7XHJcbiAgICAgICAgICB2YXIgc1EgPSBuZXcgUXVlc3Rpb24oKTtcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oc1EscXVlcyk7XHJcbiAgICAgICAgICBzUS5pbnB1dCA9IGFuO1xyXG4gICAgICAgICAgdGhpcy5zdWJRdWVzdGlvbnMucHVzaChzUSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy52YWx1ZU5hbWUxICE9IG51bGwgJiYgdGhpcy52YWx1ZU5hbWUxLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5ib29rRmxhZ0FjY2VwdCA9IHRoaXMudmFsdWVOYW1lMS5zcGxpdChcIjtcIik7XHJcbiAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdWJRdWVzdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdHJ1Y3RMb2NhbFN1YlF1ZXN0aW9uKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgb3B0aW9uQ2hhbmdlKHNlbFZhbHVlKSB7XHJcbiAgICBsZXQgcmFkaW9UcmFja2luZ0lkOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgZm9yICh2YXIgb3B0IG9mIHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkcykge1xyXG4gICAgICAvL2NvbnNvbGUubG9nKCdvcHRpb25DaGFuZ2UgVHJhY2tpbmdJZCcrb3B0LlRyYWNraW5nX0lEX19jKTtcclxuICAgICAgaWYgKG9wdC5WYWx1ZV9fYyA9PSBzZWxWYWx1ZSkge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBpZicrb3B0LlRyYWNraW5nX0lEX19jKVxyXG4gICAgICAgIHJhZGlvVHJhY2tpbmdJZCA9IG9wdC5UcmFja2luZ19JRF9fYztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdChyYWRpb1RyYWNraW5nSWQpO1xyXG4gICAgdGhpcy5jbGVhckVycm9yKCk7XHJcbiAgICAvLyAvL2NvbnNvbGUubG9nKCdpbnNpZGUgb3B0aW9uQ2hhbmdlIHVzaW5nICcgKyBzZWxWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5pbnBWYWx1ZSA9IHNlbFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJFcnJvcigpIHtcclxuICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvcikge1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhckxvY2FsU3ViUXVlc0Vycm9yKHF1ZXNJZCkge1xyXG4gICAgcXVlc0lkLmVycm9yID0gbnVsbDtcclxuICB9XHJcblxyXG4gIGlucHV0VmFsaWRhdGUoZSkge1xyXG4gICAgdmFyIGtleUNvZGUgPSBlLmtleUNvZGUgfHwgZS53aGljaDtcclxuICAgIC8vIE9ubHkgQVNDSUkgY2hhcmFjdGVyIGluIHRoYXQgcmFuZ2UgYWxsb3dlZFxyXG4gICAgdmFyIEFTQ0lJQ29kZSA9IChlLndoaWNoKSA/IGUud2hpY2ggOiBlLmtleUNvZGU7XHJcbiAgICBpZiAoQVNDSUlDb2RlID4gMzEgJiYgKEFTQ0lJQ29kZSA8IDQ4IHx8IEFTQ0lJQ29kZSA+IDU3KSl7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1lbHNle1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIENDT25DaGFuZ2UoaW5wVmFsdWU6IHN0cmluZykge1xyXG5cclxuICAgICAgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gNykge1xyXG4gICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDEyKSB7XHJcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gMTcpIHtcclxuICAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAyMikge1xyXG4gICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XHJcbiAgICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBpc05vdFZhbGlkQWNjTnVtYmVyKHM6IHN0cmluZykge1xyXG4gICAgcyA9IHMucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTtcclxuICAgIHMgPSAnRVMnICsgcztcclxuICAgIHZhciBpc05vdFZhbGlkU3RyID0gZmFsc2U7XHJcbiAgICBpZiAocy5sZW5ndGggPT0gMjQpIHtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGkgPD0gMSAmJiAvW2EtekEtWl0vLnRlc3Qocy5jaGFyQXQoaSkpKSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVmFsaWQgY2hhcjogXCIgKyBzLmNoYXJBdChpKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpID4gMSAmJiAvWzAtOV0vLnRlc3Qocy5jaGFyQXQoaSkpKSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVmFsaWQgbnVtZXJpYzogXCIgKyBzLmNoYXJBdChpKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlzTm90VmFsaWRTdHIgPSB0cnVlO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk5vdCBhIHZhbGlkIGNoYXJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpc05vdFZhbGlkU3RyID0gdHJ1ZTtcclxuICAgICAgLy9jb25zb2xlLmxvZyhcIk5vdCBhIHZhbGlkIGFjYyBudW1iZXJcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNOb3RWYWxpZFN0cjtcclxuICB9XHJcblxyXG4gIGNsZWFyU1FFcnJvcihxdWVzSWQpIHtcclxuICAgIHZhciBzcUxpc3QgPSB0aGlzLnN1YlF1ZXN0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uSWQgPT0gcXVlc0lkKTtcclxuICAgIGZvciAodmFyIHNxIG9mIHNxTGlzdCkge1xyXG4gICAgICBzcS5lcnJvciA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGxvYWRGaWxlKGV2ZW50LHF1ZXM/OmFueSkge1xyXG4gICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIHVwbG9hZCcpO1xyXG4gICAgdGhpcy5jbGVhckVycm9yKCk7XHJcbiAgICB0aGlzLmZpbGVUeXBlSW5jb3JyZWN0ID0gZmFsc2U7XHJcbiAgICB2YXIgbG9jYWwgPSB0aGlzO1xyXG4gICAgbG9jYWwuYXR0YWNobWVudCA9IGV2ZW50LnRhcmdldC5maWxlc1swXTtcclxuICAgIC8vIFZhbGlkYXRlIHRoZSBmaWxlIGV4dGVuc2lvblxyXG4gICAgLy9jb25zb2xlLmxvZyhsb2NhbC5hdHRhY2htZW50KTtcclxuICAgIGxldCBmaWxlTmFtZVdpdGhUeXBlOiBzdHJpbmcgPVxyXG4gICAgICBsb2NhbC5hdHRhY2htZW50ICYmIGxvY2FsLmF0dGFjaG1lbnQubmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKFxyXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5qcGdcIikgJiZcclxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIucG5nXCIpICYmXHJcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLnBkZlwiKSAmJlxyXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5qcGVnXCIpICYmXHJcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLmhlaWNcIikgJiZcclxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuaGVpZlwiKSAmJlxyXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5KUEdcIikgJiZcclxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuUE5HXCIpICYmXHJcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLlBERlwiKSAmJlxyXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5KUEVHXCIpICYmXHJcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLkhFSUNcIikgJiZcclxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSEVJRlwiKVxyXG4gICAgKSB7XHJcbiAgICAgIGxvY2FsLmZpbGVUeXBlSW5jb3JyZWN0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8vIFJldHVybiB3aGVuIHRoZSBmaWxlIHR5cGUgaXMgaW5jb3JyZWN0XHJcbiAgICBpZiAobG9jYWwuZmlsZVR5cGVJbmNvcnJlY3QpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVDb250ZW50OiBhbnk7XHJcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICBmaWxlQ29udGVudCA9IHJlYWRlci5yZXN1bHQ7XHJcbiAgICAgIGxvY2FsLmZpbGVFeGNlZWRlZExpbWl0ID0gbG9jYWwuYXR0YWNobWVudC5zaXplID4gMzI0Mjg4MDsgLy9WYWxpZGF0aW5nIGZpbGUgc2l6ZVxyXG4gICAgICAvLyBVcGxvYWQgdGhlIGZpbGUgdG8gU2FsZXNmb3JjZSB3aGVuIHRoZSBsaW1pdCBpcyB3aXRoaW4gcmFuZ2VcclxuICAgICAgaWYgKCFsb2NhbC5maWxlRXhjZWVkZWRMaW1pdCkge1xyXG4gICAgICAgIGxldCBmaWxlV3JhcHBlciA9IG5ldyBBdHRhY2htZW50V3JhcHBlcigpO1xyXG4gICAgICAgIGZpbGVXcmFwcGVyLnBhcmVudElkID0gbG9jYWwuYWJJdGVtLklkO1xyXG4gICAgICAgIGZpbGVXcmFwcGVyLmZpbGVOYW1lID0gbG9jYWwuYXR0YWNobWVudC5uYW1lO1xyXG4gICAgICAgIGZpbGVXcmFwcGVyLmZpbGVDb250ZW50ID0gZmlsZUNvbnRlbnQ7XHJcbiAgICAgICAgbG9jYWwuY3JlYXRlQXR0YWNobWVudChmaWxlV3JhcHBlcik7XHJcbiAgICAgICAgcXVlcy5pbnB1dCA9IGZpbGVXcmFwcGVyLmZpbGVOYW1lO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy5zcGlubmVyLnNob3codGhpcy5zcGlubmVyTmFtZSk7XHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChldmVudC50YXJnZXQuZmlsZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdWNjZXNzQXR0YWNobWVudENyZWF0ZSA9IChyZXNwb25zZSkgPT4ge1xyXG4gICAgbGV0IGNyZWF0ZWRBdHRhY2htZW50OiBBdHRhY2htZW50ID0gbmV3IEF0dGFjaG1lbnQoXHJcbiAgICAgIHJlc3BvbnNlLmF0dGFjaG1lbnRJZCxcclxuICAgICAgcmVzcG9uc2UuYXR0YWNobWVudE5hbWUsXHJcbiAgICAgIHRoaXMuYXR0YWNobWVudC5sYXN0TW9kaWZpZWREYXRlXHJcbiAgICApO1xyXG4gICAgdGhpcy5hdHRhY2htZW50cy5wdXNoKGNyZWF0ZWRBdHRhY2htZW50KTtcclxuICAgIHRoaXMuYXR0YWNobWVudHNNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLCB0aGlzLmF0dGFjaG1lbnRzKTtcclxuICAgIHRoaXMuc3Bpbm5lci5oaWRlKHRoaXMuc3Bpbm5lck5hbWUpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgc3VjY2Vzc0F0dGFjaG1lbnREZWxldGUgPSAocmVzcG9uc2UpID0+IHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hdHRhY2htZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5hdHRhY2htZW50c1tpXS5hdHRhY2htZW50SWQgPT09IHRoaXMuYXR0YWNobWVudElkKSB7XHJcbiAgICAgICAgdGhpcy5hdHRhY2htZW50cy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIGZhaWx1cmVBdHRhY2htZW50Q3JlYXRlID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGUnKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIGZhaWx1cmVBdHRhY2htZW50RGVsZXRlID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZUF0dGFjaG1lbnREZWxldGUnKTtcclxuICB9O1xyXG5cclxuICBoYW5kbGVTdWJtaXRDbGljaygpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5TdWJtaXRfVHJhY2tpbmdfSURfX2MpO1xyXG4gICAgdGhpcy51cGRhdGVBbnN3ZXJCb29rKHRoaXMuYWJJdGVtLklkKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUNhbmNlbENsaWNrKCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLkNhbmNlbF9UcmFja2luZ19JRF9fYyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUF0dGFjaG1lbnQgPSAoZmlsZVdyYXBwZXI6IGFueSkgPT4ge1xyXG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcclxuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxyXG4gICAgICAgIHRoaXMudGtuLFxyXG4gICAgICAgIFtcIkF0dGFjaG1lbnRcIiwgXCJjcmVhdGVcIiwgSlNPTi5zdHJpbmdpZnkoZmlsZVdyYXBwZXIpXSxcclxuICAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50Q3JlYXRlLFxyXG4gICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGVcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcclxuICAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc1wiLFxyXG4gICAgICAgIFtcIkF0dGFjaG1lbnRcIiwgXCJjcmVhdGVcIiwgSlNPTi5zdHJpbmdpZnkoZmlsZVdyYXBwZXIpXSxcclxuICAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50Q3JlYXRlLFxyXG4gICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGVcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudElkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuYXR0YWNobWVudElkID0gYXR0YWNobWVudElkO1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KFwiZGVsZXRlQXR0YWNobWVudFwiKTtcclxuICAgIHRoaXMuZGVsZXRlU0ZBdHRhY2htZW50KGF0dGFjaG1lbnRJZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRlbGV0ZVNGQXR0YWNobWVudCA9IChmaWxlSWQ6IHN0cmluZykgPT4ge1xyXG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcclxuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxyXG4gICAgICAgIHRoaXMudGtuLFxyXG4gICAgICAgIFtcIkF0dGFjaG1lbnRcIiwgXCJkZWxldGVcIiwgZmlsZUlkXSxcclxuICAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlLFxyXG4gICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGVcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcclxuICAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc1wiLFxyXG4gICAgICAgIFtcIkF0dGFjaG1lbnRcIiwgXCJkZWxldGVcIiwgZmlsZUlkXSxcclxuICAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlLFxyXG4gICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGVcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEZpbGVOYW1lKGZpbGVOYW1ld2l0aElkYW5kVHlwZSkge1xyXG4gICAgLy90cnVuY2F0ZSBmaWxlIHBhdGhcclxuICAgIHZhciBmaWxlTmFtZVdpdGhUeXBlID0gZmlsZU5hbWV3aXRoSWRhbmRUeXBlLnN1YnN0cihcclxuICAgICAgZmlsZU5hbWV3aXRoSWRhbmRUeXBlLmluZGV4T2YoXCI6Ojo6XCIpICsgNFxyXG4gICAgKTtcclxuICAgIHJldHVybiBmaWxlTmFtZVdpdGhUeXBlOyAvL2ZpbGVOYW1lV2l0aFR5cGUucmVwbGFjZSgvXiguKihcXC98XFxcXCkpKC4rKSQvLCAnJDMnKTtcclxuICB9XHJcbiAgZmlsZVVJKCkge1xyXG4gICAgaWYgKHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL1VwZGF0ZSBmdW5jdGlvbiBmb3IgY2F0ZWdvcml6YXRpb25cclxuICAvLyBzdGVwcGVyQ2F0ZWcoKSB7XHJcbiAgLy8gICB0aGlzLmZpcnN0Rm9ybUdyb3VwID0gdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gIC8vICAgICBmaXJzdEN0cmw6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF1cclxuICAvLyAgIH0pO1xyXG4gIC8vICAgdGhpcy5zZWNvbmRGb3JtR3JvdXAgPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgLy8gICAgIHNlY29uZEN0cmw6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF1cclxuICAvLyAgIH0pO1xyXG5cclxuICAvLyB9XHJcblxyXG4gIC8vIFVwZGF0ZSBGdW5jdGlvbiBmb3IgdGhlIFByb2dyZXNzIEJhclxyXG4gIHVwZGF0ZVByb2dyZXNzKCkge1xyXG4gICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYyA9PT0gdHJ1ZSkge1xyXG4gICAgICBsZXQgaiA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucG9zc2liaWxpdGllcy50b3RhbDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHBhdGhwb3NzID0gT2JqZWN0LnZhbHVlcyh0aGlzLnBvc3NpYmlsaXRpZXMucGF0aHNbaV0ucXVlc3Rpb25zKTtcclxuICAgICAgICBpZiAocGF0aHBvc3NbdGhpcy5wYXRocXVlc3Rpb25dID09PSB0aGlzLmN1cnJlbnROYW1lKSB7XHJcbiAgICAgICAgICBqLnB1c2goaSk7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jaGVjayA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoai5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICB0aGlzLmNvdW50ID0galswXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoai5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgdmFyIHdpZHRoID1cclxuICAgICAgICAgIDkwICogKHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggLyB0aGlzLnBvc3NpYmlsaXRpZXMubWF4UXVlc3Rpb25zKTtcclxuICAgICAgICB0aGlzLnByb2dyZXNzU3R5bGUgPSBNYXRoLnJvdW5kKHdpZHRoKSArIFwiJVwiO1xyXG4gICAgICB9IGVsc2UgaWYgKGoubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgdmFyIHdpZHRoID1cclxuICAgICAgICAgIDkwICpcclxuICAgICAgICAgICh0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoIC9cclxuICAgICAgICAgICAgdGhpcy5wb3NzaWJpbGl0aWVzLnBhdGhzW3RoaXMuY291bnRdLmNvdW50KTtcclxuICAgICAgICB0aGlzLnByb2dyZXNzU3R5bGUgPSBNYXRoLnJvdW5kKHdpZHRoKSArIFwiJVwiO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucGVyY2VudCA9ICtNYXRoLnJvdW5kKHdpZHRoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvd25OYW1lKGFyZWEpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IGFyZWEudG93bjtcclxuICAgIC8vY29uc29sZS5sb2coJ3RoaXMgdmFsdWU9Jyt0aGlzLnNlbGVjdGVkVmFsdWUpXHJcbiAgICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0VG93bkxvY2FsKCkge1xyXG4gICAgdGhpcy50ZW1wb0FkZHJlc3MgPSBbXTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKHZhciB2YWwgb2YgdGhpcy5sb2NhbGFkZHJlc3MpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB2YWwudG93bi5zdWJzdHJpbmcoMCwgdGhpcy5zZWxlY3RlZFZhbHVlLmxlbmd0aCkgPT0gdGhpcy5zZWxlY3RlZFZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKHZhbC5jb3VudHJ5KVxyXG4gICAgICAgICAgdGhpcy50ZW1wb0FkZHJlc3MucHVzaCh2YWwpO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygndGVtcG9BZGRyZXNzJyt0aGlzLnRlbXBvQWRkcmVzcylcclxuICAgICAgICAgIGlmICh0aGlzLnRlbXBvQWRkcmVzcy5sZW5ndGggPT0gNikge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VsZWN0TGlzdFwiKS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xyXG4gICAgdGhpcy5zZXRTZWFyY2hMaXN0V2lkdGgoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyTGlzdCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcblxyXG4gIHNldFNlYXJjaExpc3RXaWR0aCgpIHtcclxuICAgIC8vdG8gcmVzaXplIHNlYXJjaCBsaXN0IGJhc2VkIG9uIHRoZSBzY3JlZW4gc2l6ZVxyXG4gICAgY29uc3Qgc2VhcmNoQm94V2lkdGggPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhdXRvY29tcGxldGUtaW5wdXRcIikub2Zmc2V0V2lkdGg7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlbGVjdExpc3RcIikuc3R5bGUud2lkdGggPSBzZWFyY2hCb3hXaWR0aCArIFwicHhcIjtcclxuICB9XHJcblxyXG4gICAgZ2V0Q29kZSgpe1xyXG4gICAgICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvciAodmFyIHZhbCBvZiB0aGlzLmFsbEFkZHJlc3MpIHtcclxuICAgICAgICAgIGlmICh2YWwuemlwQ29kZS5zdWJzdHJpbmcoMCwgdGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUubGVuZ3RoKSA9PSB0aGlzLnNlbGVjdGVkUG9zdGFsY29kZSkge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKHZhbC5jb3VudHJ5KVxyXG4gICAgICAgICAgICB0aGlzLnRlbXBvQWRkcmVzcy5wdXNoKHZhbCk7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3RlbXBvQWRkcmVzcycrdGhpcy50ZW1wb0FkZHJlc3MpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRlbXBvQWRkcmVzcy5sZW5ndGggPT0gNikge1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VsZWN0TGlzdFwiKS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xyXG4gICAgICB0aGlzLnNldFNlYXJjaExpc3RXaWR0aCgpO1xyXG4gICAgfVxyXG4gICAgZ2V0UG9zdGFsY29kZSh2YWx1ZSl7XHJcbiAgICAgdGhpcy5wbGFjZXM9W107XHJcbiAgICAgdGhpcy5wcm92aW5jZT1bXTtcclxuICAgICAgdmFyIHByb3ZpbmNlO1xyXG4gICAgICB2YXIgdG93bjtcclxuICAgICAgdGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUgPSB2YWx1ZS56aXBDb2RlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZS5jb3VudHJ5O1xyXG4gICAgICB0aGlzLnRlbXBvQWRkcmVzcz1bXTtcclxuXHJcbiBcclxuICAgICAgZm9yKHZhciB2YWwgb2YgdGhpcy5sb2NhbGFkZHJlc3Mpe1xyXG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlID09IHZhbC56aXBDb2RlICl7XHJcbiAgICAgICAgICB0aGlzLnBsYWNlcy5wdXNoKHZhbCk7XHJcbiAgICAgICAgICB0aGlzLnByb3ZpbmNlLnB1c2godmFsKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbC5jb3VudHJ5O1xyXG4gICAgICAgICAgcHJvdmluY2UgPSB2YWwucHJvdmluY2VcclxuICAgICAgICAgIHRvd24gPSB2YWwudG93bjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYodGhpcy5wbGFjZXMubGVuZ3RoID09IDEpe1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm92aW5jZSA9cHJvdmluY2U7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENpdHkgPSB0b3duO1xyXG4gICAgICB9ZWxzZSBpZih0aGlzLnBsYWNlcy5sZW5ndGggPjEgfHwgdGhpcy5wbGFjZXMubGVuZ3RoID09MCl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2l0eSA9Jyc7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvdmluY2U9Jyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNsb3NlRHJvcGRvd24oKSB7XHJcbiAgICAgIGlmKHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlLmxlbmd0aCA9PSA1KXtcclxuICAgICAgICB0aGlzLmdldFBvc3RhbGNvZGUoe3ppcENvZGU6dGhpcy5zZWxlY3RlZFBvc3RhbGNvZGV9KTtcclxuICAgICAgfVxyXG5cclxuICAgc2V0VGltZW91dCgoKT0+IHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdExpc3QnKS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICB9LCA1MDApO1xyXG4gICB9XHJcblxyXG5cclxuICAgLy9QbHVzIGJ1dHRvbiBpbXBsZW1lbnRhdGlvbi5cclxuICAgc3RydWN0TG9jYWxTdWJRdWVzdGlvbihxdWVzOiBMb2NhbFF1ZXN0aW9uKXtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgc3RydWN0TG9jYWxTdWJRdWVzdGlvbicpO1xyXG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5zdWJRdWVzdGlvbnMubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgIHZhciBsb2NhbFN1YlF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcclxuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uSWQgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5JZDtcclxuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uTmFtZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLk5hbWU7XHJcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLlF1ZXN0aW9uX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uUXVlc3Rpb25fX2M7XHJcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLlF1ZXN0aW9uX1RleHRfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5RdWVzdGlvbl9UZXh0X19jO1xyXG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5UeXBlX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uVHlwZV9fYztcclxuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uVGl0bGVfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5UaXRsZV9fYztcclxuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uU3ViVGl0bGVfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5TdWJUaXRsZV9fYztcclxuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uSXNfT3B0aW9uYWxfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5Jc19PcHRpb25hbF9fYztcclxuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uRXJyb3JfTWVzc2FnZV9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLkVycm9yX01lc3NhZ2VfX2M7XHJcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5OZXh0X1F1ZXN0aW9uX19jO1xyXG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5Hcm91cF9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLkdyb3VwX19jO1xyXG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5RdWVzdGlvbl9Ob19fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLlF1ZXN0aW9uX05vX19jO1xyXG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5BbGxvd2VkX0ZpbGVfRXh0ZW5zaW9uc19fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLkFsbG93ZWRfRmlsZV9FeHRlbnNpb25zX19jO1xyXG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi51bmlxdWVTdWJRSWQgPSAnJyt0aGlzLnN1YlF1ZXN0aW9uc1tpXS5JZCArIGk7IFxyXG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5pbnB1dCA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLmlucHV0O1xyXG4gICAgICAgICAgdGhpcy5sb2NhbFN1YlF1ZXN0aW9ucy5wdXNoKGxvY2FsU3ViUXVlc3Rpb24pO1xyXG4gICAgICB9XHJcbiAgLy8gY29uc29sZS5sb2coJ2ZpbmFsIGxvY2FsIHN1YiBxdWVzdGlvbnMnKTtcclxuICAvLyBjb25zb2xlLmxvZyh0aGlzLmxvY2FsU3ViUXVlc3Rpb25zKTtcclxuICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XHJcbiAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLHRoaXMubG9jYWxTdWJRdWVzdGlvbnMpO1xyXG4gIHRoaXMubG9jYWxTdWJRdWVzdGlvbnMgPSBbXTtcclxuICAvLyBjb25zb2xlLmxvZygnZmluYWwga2V5IGxvY2FsU3ViUU1hcCBtYXAnKTtcclxuICAvLyBjb25zb2xlLmxvZyh0aGlzLmxvY2FsU3ViUU1hcCk7XHJcbiAgfVxyXG5cclxuICBhZGRJbnB1dEJveChxdWVzdGlvbjogTG9jYWxRdWVzdGlvbiwgaW5kZXg6IG51bWJlcil7XHJcbiAgICB2YXIgYXJyYSA9IHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XHJcbiAgICB2YXIgcUluZGV4ID0gYXJyYS5pbmRleE9mKHF1ZXN0aW9uKTtcclxuICAgIHZhciBxdWVzOiBMb2NhbFF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcclxuICAgIE9iamVjdC5hc3NpZ24ocXVlcywgcXVlc3Rpb24pO1xyXG4gICAgLy9jb25zb2xlLmxvZygocXVlcy51bmlxdWVTdWJRSWQpLnN1YnN0cmluZygxOCwgKHF1ZXMudW5pcXVlU3ViUUlkKS5sZW5ndGgpKzEpO1xyXG4gICAgaWYodGhpcy5rZXlJbmRleCA9PSBpbmRleCl7XHJcbiAgICAgIHF1ZXMudW5pcXVlU3ViUUlkID0gcXVlcy5JZCArIChTdHJpbmcoaW5kZXgrMSkpO1xyXG4gICAgICB0aGlzLmtleUluZGV4Kys7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5rZXlJbmRleCsrO1xyXG4gICAgICBxdWVzLnVuaXF1ZVN1YlFJZCA9IHF1ZXMuSWQgKyAoU3RyaW5nKHRoaXMua2V5SW5kZXgpKTtcclxuICAgIH1cclxuICAgIHF1ZXMuaW5wdXQgPSAnJztcclxuICAgIGFycmEuc3BsaWNlKHFJbmRleCsxLCAwLCBxdWVzKTtcclxuXHJcbiAgICB0aGlzLmxvY2FsU3ViUU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQsYXJyYSk7XHJcbiAgICAvL2NvbnNvbGUubG9nKHRoaXMubG9jYWxTdWJRTWFwKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUFkZHJlc3MocXVlc1VuaXF1ZUlkOiBzdHJpbmcsIHFOYW1lOiBzdHJpbmcpIHtcclxuICAgIC8vY29uc29sZS5sb2cocXVlc1VuaXF1ZUlkKVxyXG4gICAgdmFyIHZhbCA9IHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XHJcbiAgICB2YXIga2V5aW5kZXggPSAwO1xyXG5cclxuICAgIGZvcihsZXQgaT0wOyBpPHZhbC5sZW5ndGg7IGkrKyl7XHJcbiAgICAgIGlmKHZhbFtpXS5OYW1lID09IHFOYW1lKXtcclxuICAgICAgICBrZXlpbmRleCsrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5sb2NhbFN1YlFNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLklkKSAmJiBrZXlpbmRleCA+MSl7XHJcbiAgICAgIHZhciByZW9yZGVyID0gdmFsLmZpbHRlcigoaXRlbSkgPT4gaXRlbS51bmlxdWVTdWJRSWQgIT09IHF1ZXNVbmlxdWVJZClcclxuICAgICAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLHJlb3JkZXIpO1xyXG4gICAgICBrZXlpbmRleC0tO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TG9jYWxTdWJRdWVzdGlvbnMoaWQ6IFN0cmluZyl7XHJcbiAgICByZXR1cm4gdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KGlkKTtcclxuICB9XHJcblxyXG4gIC8vU2luZ2xlIEFkZCBidXR0b24gZnVuY3Rpb25hbGl0eSBmb3IgTGlzdCB0eXBlXHJcbkFkZChxdWVzdGlvbjogTG9jYWxRdWVzdGlvbil7XHJcbiAgICB0aGlzLmFkZEZsYWcgPSAgZmFsc2U7XHJcbiAgICB2YXIgYXJyYSA9IHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XHJcbiAgICB2YXIgaW5kZXggID0gYXJyYS5sZW5ndGg7XHJcbiAgICB2YXIgYSA9IGFycmEuc2xpY2UoLTEpLnBvcCgpO1xyXG4gICAgdGhpcy5pbmRleENvdW50ICA9IGEuUXVlc3Rpb25fTm9fX2M7XHJcbiAgICBcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbmRleENvdW50IDsgaSsrKSB7XHJcbiAgICAgIHZhciBxdWVzOiBMb2NhbFF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcclxuICAgICAgT2JqZWN0LmFzc2lnbihxdWVzLCBxdWVzdGlvbltpXSk7XHJcbiAgICAgIHRoaXMua2V5SW5kZXgrKztcclxuICAgICAgcXVlcy51bmlxdWVTdWJRSWQgPSBxdWVzLklkICsgKFN0cmluZyh0aGlzLmtleUluZGV4KSk7XHJcbiAgICAgIHF1ZXMuaW5wdXQgPSAnJztcclxuICAgICAgYXJyYS5zcGxpY2UoaW5kZXgrKHRoaXMuaW5kZXhDb3VudC0xKSwgMCwgcXVlcyk7XHJcbiAgICB0aGlzLmxvY2FsU3ViUU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQsYXJyYSk7XHJcbiAgICB9ICBcclxuICAgIHRoaXMuYWRkRmxhZyA9IHRydWU7XHJcbiAgfVxyXG4gIFxyXG4gIGhhbmRsZUxvY2F0aW9uU2VsZWN0ZWQobG9jYXRpb246IGFueSxxdWVzOmFueSkge1xyXG4gICAgcXVlcy5pbnB1dCA9IGxvY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRJbnB1dChpbnB1dDphbnkgLHF1ZXM6YW55KXsgXHJcbiAgICBxdWVzLmlucHV0ID0gaW5wdXQ7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVUZXh0YXJlYVZhbHVlQ2hhbmdlKHZhbHVlIDpzdHJpbmcpe1xyXG4gICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIHRleHQtYXJlYSB0ZXh0OicsIHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0RGF0YShkYXRhOmFueSl7XHJcbiAgIGNvbnNvbGUubG9nKCd0YWJsZSBkYXRhJyxkYXRhKTtcclxuICB9XHJcblxyXG4gIGRlcGVuZGVudENoYW5nZSh2YWx1ZTphbnkpe1xyXG4gIHRoaXMubmV4dFZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5RGF0ZShkYXRlU2VsZWN0ZWQ6IGFueSxxdWVzOmFueSl7XHJcbiAgICAvLyBQYXJzZSB0aGUgZGF0ZSBzdHJpbmcgdXNpbmcgbW9tZW50IGFuZCBhc3NpZ24gaXQgdG8gdGhpcy5zZWxlY3RlZERhdGVcclxuICAgIHF1ZXMuaW5wdXQgPSBtb21lbnQoZGF0ZVNlbGVjdGVkLnZhbHVlICwgJ1lZWVktTU0tREQgSEg6bW06c3MnKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKS50b1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S2V5KGl0ZW06IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoaXRlbSlbMF07XHJcbiAgfVxyXG4gIFxyXG4gIGdldFZhbHVlKGl0ZW06IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhpdGVtKVswXTtcclxuICB9XHJcblxyXG4gIC8vIEluIHRoZSBwYXJlbnQgY29tcG9uZW50IGNsYXNzXHJcbmdldFRhYmxlRGF0YShxdWVzOiBhbnkpOiBhbnlbXSB7XHJcbiAgLy8gUmV0dXJuIGEgbmV3IGFycmF5IHRvIGVuc3VyZSBlYWNoIHRhYmxlIGluc3RhbmNlIGhhcyBpdHMgb3duIHNlcGFyYXRlIGFycmF5XHJcbiAgaWYgKHF1ZXMuTmFtZSA9PT0gJ1FOLTAyMjUxJykge1xyXG4gICAgcXVlcy50YWJsZURhdGFWYWx1ZSA9IHRoaXMudGFibGVEYXRhMTtcclxuICAgIHF1ZXMudGFibGVIZWFkZXIgPSdTYWZldHkgUHJlY2F1dGlvbnMnO1xyXG4gICAgcmV0dXJuIFsuLi5xdWVzLnRhYmxlRGF0YVZhbHVlXTtcclxuICB9IGVsc2Uge1xyXG4gICAgcXVlcy50YWJsZURhdGFWYWx1ZSA9IHRoaXMudGFibGVEYXRhMjtcclxuICAgIHF1ZXMudGFibGVIZWFkZXIgPSdQZXJzb25hbCBQcm90ZWN0aXZlIEVxdWlwbWVudHMnO1xyXG4gICAgcmV0dXJuIFsuLi5xdWVzLnRhYmxlRGF0YVZhbHVlXTtcclxuICB9XHJcbn1cclxuICB9XHJcblxyXG4iLCI8IS0tIFNwaW5uZXIgLS0+XHJcbjxuZ3gtc3Bpbm5lciBbbmFtZV09XCJzcGlubmVyTmFtZVwiIFt0eXBlXT1cInNwaW5uZXJUeXBlXCI+PC9uZ3gtc3Bpbm5lcj5cclxuXHJcbjwhLS0gQmFjayBQcm9jZXNzaW5nIC0tPlxyXG48ZGl2ICpuZ0lmPVwiYmFja2ljb24gPT0gZmFsc2VcIiA+XHJcbiAgPGRpdiBjbGFzcz1cImJhY2tpY29uXCIgW3N0eWxlLnZpc2liaWxpdHldPVwicXVlc3Rpb25TdGFjay5sZW5ndGggPjAgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiPlxyXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlQmFja0NsaWNrKClcIiBbY2xhc3NdPVwiIGFiSXRlbT8uU3RhdHVzX19jID09ICdDb21wbGV0ZWQnID8gJ3N1bW1hcnktdm9sdmVyJzonYXBwLWJhY2sxJ1wiPlxyXG4gICAgPGltZyBjbGFzcz1cImljb24tYXJyb3ctYmFja1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1hcnJvdy1iYWNrLnBuZ1wiIGFsdD1cIlNjcm9sbCBkb3duXCI+IHt7IHFiSXRlbT8uQmFja19fYyB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBRdWVzdGlvbiBIYW5sZGluZyAtLT5cclxuPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbVwiIFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsX19jID8gJ3F1ZXN0aW9uZGl2MScgOiAncXVlc3Rpb25kaXYxIHBhZGQtYm90dG9tJ1wiPlxyXG4gIDwhLS0gUHJvZ3Jlc3MgQmFyICYgVGl0bGUgLS0+XHJcbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5UaXRsZV9fYyAmJiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCI+XHJcbiAgICA8aDEgY2xhc3M9XCJoZWFkZXIxXCI+e3sgcXVlc3Rpb25JdGVtPy5UaXRsZV9fYyB9fTwvaDE+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyMlwiPnt7IHF1ZXN0aW9uSXRlbT8uU3ViVGl0bGVfX2MgfX08L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBQcm9ncmVzcyAmIEdyb3VwaW5nIC0tPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwieyBxdWVzdGlvbmRpdjI6ICFxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCI+XHJcbiAgICA8IS0tIFBpZSBDaGFydCBQcm9ncmVzcyAtLT5cclxuICAgIDxkaXYgW25nQ2xhc3NdPVwieyBiZ0NvbG9yOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCI+XHJcbiAgICAgIDxkaXYgaWQ9XCJwcm9ncmVzc1wiICpuZ0lmPVwicWJJdGVtPy5Qcm9ncmVzc19CYXJfX2NcIj5cclxuICAgICAgICA8Y2lyY2xlLXByb2dyZXNzIGNsYXNzPVwidGl0bGViYXJcIiBbcGVyY2VudF09XCJ0aGlzLnBlcmNlbnRcIiBbcmFkaXVzXT1cIjQwXCIgW3NwYWNlXT1cIi00XCIgW291dGVyU3Ryb2tlV2lkdGhdPVwiNFwiXHJcbiAgICAgICAgW2lubmVyU3Ryb2tlV2lkdGhdPVwiNFwiIFtvdXRlclN0cm9rZUNvbG9yXT1cIicjZTBiMWIwJ1wiIFtpbm5lclN0cm9rZUNvbG9yXT1cIicjZTdlOGVhJ1wiIFthbmltYXRpb25dPVwidHJ1ZVwiIFtiYWNrZ3JvdW5kUGFkZGluZ109IFwiMFwiXHJcbiAgICAgICAgW2JhY2tncm91bmRDb2xvcl09IFwiJyNkZDJlMTMnXCIgW2JhY2tncm91bmRHcmFkaWVudFN0b3BDb2xvcl09XCInI2Y5YmZiZCdcIiBbdGl0bGVDb2xvcl09XCInI2YzZWRlZCdcIiBcclxuICAgICAgICBjbGFzcz1cIm5nLXN0YXItaW5zZXJ0ZWRcIiBbdGl0bGVdPVwidGhpcy5wZXJjZW50KyclJ1wiIFtzaG93U3VidGl0bGVdPVwiZmFsc2VcIiBbc2hvd0JhY2tncm91bmRdPVwidHJ1ZVwiIFthbmltYXRpb25EdXJhdGlvbl09XCIzMDBcIlxyXG4gICAgICAgIFtzdGFydEZyb21aZXJvXT1cImZhbHNlXCIgW3Jlc3BvbnNpdmVdPVwiZmFsc2VcIiA+XHJcbiAgICAgICAgPC9jaXJjbGUtcHJvZ3Jlc3M+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBTaG93IHRoZSBHcm91cC9Nb2R1bGUgcmVsYXRlZCB0byB0aGUgUHJvZ3Jlc3MgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLkdyb3VwX19jICYmIHFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgcXVlc3Rpb25hbGlnbjogIXFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxhcmdlVGl0bGVcIj5cclxuICAgICAgICA8aDMgY2xhc3M9XCJteXQtZm9udDYgbXl0LXRleHQzXCI+XHJcbiAgICAgICAgICB7eyBxdWVzdGlvbkl0ZW0/Lkdyb3VwX19jIH19XHJcbiAgICAgICAgPC9oMz5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlN1Yl9UZXh0X19jICE9ICfCv0VuIHF1w6kgcGHDrXMgb2N1cnJpw7M/J1wiIGNsYXNzPVwibXl0LWZvbnQ1IG15dC10ZXh0MVwiPnt7cXVlc3Rpb25JdGVtPy5TdWJfVGV4dF9fY319PC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5TdWJfVGV4dF9fYyA9PT0gJ8K/RW4gcXXDqSBwYcOtcyBvY3VycmnDsz8nXCIgY2xhc3M9XCJteXQtZm9udDEwIG15dC10ZXh0MlwiPnt7cXVlc3Rpb25JdGVtPy5TdWJfVGV4dF9fY319PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gUXVlc3Rpb24gSGFuZGxpbmcgLS0+XHJcbiAgPGRpdiBjbGFzcz1cInF1ZXN0aW9uZGl2MlwiPlxyXG4gICAgPCEtLSBUaXRsZSAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uSXNfVGl0bGVfX2NcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5UeXBlX19jICE9ICdCb29rJyAmJiBxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fTm9fX2MhPSc2JyAmJiBxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fTm9fX2MhPSc5J1wiPiBcclxuICAgICAgICA8aDMgY2xhc3M9XCJxdWVzdGlvbmFsaWduICBteXQtZm9udDMgbXl0LWFsaWduIG15dC10ZXh0NFwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MpXCI+XHJcbiAgICAgICAgICB7e3F1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fY319XHJcbiAgICAgICAgPC9oMz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCIhcXVlc3Rpb25JdGVtLklzX1RpdGxlX19jXCIgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWxfX2MgPyAnaGVhZGVyLXN0eWxlIGFkZGl0aW9uYWwnIDogJ3F1ZXN0aW9uLWYtc2l6ZSBhZGRpdGlvbmFsJ1wiPlxyXG4gICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MpXCIgPlxyXG4gICAgICAgIHt7IHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fYyB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCB3aXRoIEN1c3RvbSBTdHlsaW5nIC0gTVIgLSAxMUFVRzIzIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5UeXBlX19jID09ICdCb29rJ1wiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlF1ZXN0aW9uX05vX19jPT0nNidcIj5cclxuICAgICAgICA8aDMgY2xhc3M9XCJteXQtMzIxXCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fYylcIj5cclxuICAgICAgICAgIHt7IHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fYyB9fVxyXG4gICAgICAgIDwvaDM+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBcclxuICAgIDwhLS0gVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCB3aXRoIEN1c3RvbSBTdHlsaW5nIC0gTVIgLSAxMUFVRzIzIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5UeXBlX19jID09ICdGaWxlJyBcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9Ob19fYz09JzknXCI+XHJcbiAgICAgICAgPGgzIGNsYXNzPVwibXl0LTM0NVwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MpXCI+XHJcbiAgICAgICAgICB7e3F1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fY319XHJcbiAgICAgICAgPC9oMz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBBZGRpdGlvbmFsIEluZm8gLS0+XHJcbiAgPCEtLSBUaGUgYmVsb3cgY29kZSBjYW4gYmUgd3JpdHRlbiBlZmZlY3RpdmVseSBuZXN0ZWQgbmdJZiBmb3IgUmljaCBUZXh0ICYgT3RoZXIgb253IGZvciBQcm9ncmVzcyBCYXIgLS0+XHJcbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5BZGRpdGlvbmFsX1JpY2hfX2MgJiYgcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiID5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJhZGRpdGlvbmFsIFwiIFtpbm5lckhUTUxdPVwiaW5uZXJodG1sXCI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLkFkZGl0aW9uYWxfUmljaF9fYyAmJiAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImluZm8tYWxlcnQgcXVlcy1hbGVydDFcIj5cclxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1pbmZvIGZhLTN4IGlwb3NpdGlvbiBpY29sb3JcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvZGl2XCIgW2lubmVySFRNTF09XCJpbm5lcmh0bWxcIj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIERyb3Bkb3duLS0+XHJcbiAgPGRpdiAqbmdJZj1cImRyb3Bkb3duRmxhZ1wiID5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXMtZmxleFwiPlxyXG4gICAgICA8c2VsZWN0IFxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICdkdC1saW5lIG15dC1hbGlnbjMgbXl0LWFsaWduMiBkcERvd24gZHJvcGJveCBkb3duMSBteXQtZHJvcGJveCBteXQtYm9yZGVyLXIgbXl0LWZvbnQxJzogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MsXHJcbiAgICAgICAgICAnY3VzdG9tLXNlbGVjdCc6ICFxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fY1xyXG4gICAgICAgIH1cIiBjbGFzcz1cIm1yLXNtLTIgZGQtaGVpZ2h0IGRyb3Bib3ggXCIgIGlkPVwiZHJvcGRvd25cIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgKGNoYW5nZSk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCcgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMCA/ICcjZmZmJyA6ICcnXHJcbiAgICAgICAgfX1cIiBzdHlsZS5jb2xvcj1cInt7IHF1ZXN0aW9uSXRlbT8uZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMjEuNXJlbSAhaW1wb3J0YW50O1wiPlxyXG4gICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdCBvZiBxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzXCIgY2xhc3M9XCJvcHRpb25cIiB2YWx1ZT1cInt7IG9wdC5WYWx1ZV9fYyB9fVwiPlxyXG4gICAgICAgICAge3sgb3B0LlZhbHVlX19jIH19XHJcbiAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIi5cIiBkaXNhYmxlZCBoaWRkZW4+Qml0dGUgdHJlZmZlbiBTaWUgZWluZSBBdXN3YWhsPC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gUmFkaW8gLS0+XHJcbiAgPGRpdiAqbmdJZj1cInJhZGlvRmxhZyB8fCBkYXRhRmxhZ1wiIGNsYXNzPVwiXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwidGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3JcIiBjbGFzcz1cImNvbmQtZGl2MlwiPlxyXG4gICAgICB7eyBxdWVzdGlvbkl0ZW0/LkVycm9yX01lc3NhZ2VfX2MgfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRpcy1mbGV4XCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdCBvZiBxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzXCIgY2xhc3M9XCJyYWRpbyByYWRpb09wdGlvblwiID5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJyYWRpb2NvbnRhaW5lciBjb250YWluZXIgIG15dC1mb250NFwiPnt7IG9wdC5WYWx1ZV9fYyB9fVxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFtpZF09XCJvcHQuSWRcIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgbmFtZT1cImlucFZhbHVlXCIgdmFsdWU9XCJ7eyBvcHQuVmFsdWVfX2MgfX1cIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9wdGlvbkNoYW5nZShvcHQuVmFsdWVfX2MpXCIgLz5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hlY2ttYXJrXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gQ2hlY2tib3ggLS0+XHJcbiAgPGRpdiAqbmdJZj1cImNoZWNrYm94RmxhZ1wiIGNsYXNzPVwiXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwidGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3JcIiBjbGFzcz1cImNvbmQtZGl2MlwiPlxyXG4gICAgICB7eyBxdWVzdGlvbkl0ZW0/LkVycm9yX01lc3NhZ2VfX2MgfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRpcy1mbGV4XCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygb3B0aW9uVmFsdWVzXCIgY2xhc3M9XCJyYWRpbyBjb2wtbWQtNiBvcHRpb25kaXZcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCIgY29udGFpbmVyMSBcIiA+e3sgaXRlbS5WYWx1ZV9fYyB9fVxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtpZF09XCJpdGVtLklkXCIgWyhuZ01vZGVsKV09XCJpdGVtLmNoZWNrZWRcIiAoY2xpY2spPVwiY2xlYXJFcnJvcigpXCIgLz5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPSdjaGVja21hcmsxJz48L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBUZXh0IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJ0ZXh0RmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyIG15dC1ib29rMVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiIGNsYXNzPVwiZGlzLWZsZXggbXl0LWFsaWduMVwiIFtjbGFzc109XCInY29sLW1kLScgKyBxdWVzdGlvbkl0ZW0/LlNpemVfX2MgKyAnIHBhZGRpbmdub25lJ1wiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgJ2JveG91dGxpbmUgbXl0LWZvbnQxIG15dC1ib29rMSc6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jLFxyXG4gICAgICAgICAgdGV4dEJveDE6ICFxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fY1xyXG4gICAgICAgIH1cIiBpZD1cInRleHQtaW5wdXQtaWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yXHJcbiAgICAgICAgICAgID8gJ3JlZCdcclxuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICA/ICcjODdiZTFjJ1xyXG4gICAgICAgICAgICA6ICcnXHJcbiAgICAgICAgfX1cIiBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05XFxzLjo7LD9dL2csJycpO1wiIC8+XHJcbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgY2hlY2staWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDBcIj48L2k+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBUZXh0IEFyZWEgLS0+XHJcbiAgPGRpdiAqbmdJZj1cInRhRmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGlzLWZsZXhcIj5cclxuICAgICAgPHRleHRhcmVhIGNsYXNzPVwidGEtaW5wdXRcIiBpZD1cInRhLWlucHV0LWlkXCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIChjbGljayk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yXHJcbiAgICAgICAgICAgID8gJ3JlZCdcclxuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMCAmJiB0YUZvY3VzT3V0XHJcbiAgICAgICAgICAgID8gJyM4N2JlMWMnXHJcbiAgICAgICAgICAgIDogJydcclxuICAgICAgICB9fVwiIChmb2N1c291dCk9XCJ0YUZvY3VzT3V0ID0gdHJ1ZVwiXHJcbiAgICAgICAgb25pbnB1dD1cInRoaXMudmFsdWU9dGhpcy52YWx1ZS5yZXBsYWNlKC9bXmEtekEtWjAtOVxccy46Oyw/XS9nLCcnKTtcIj48L3RleHRhcmVhPlxyXG4gICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrIGNoZWNrLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cImlucFZhbHVlPy5sZW5ndGggPiAwICYmIHRhRm9jdXNPdXRcIj48L2k+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBDQyBOdW1iZXIgRm9ybWF0IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJudW1iZXJGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXMtZmxleFwiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cIlRleHRcIiBwbGFjZWhvbGRlcj1cIjAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwXCIgW25nQ2xhc3NdPVwieyBib3hvdXRsaW5lOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgaWQ9XCJudW1iZXItaW5wdXQtaWRcIiAobmdNb2RlbENoYW5nZSk9XCJDQ09uQ2hhbmdlKCRldmVudClcIiByZXF1aXJlZD1cIlwiIG1heGxlbmd0aD1cIjI5XCJcclxuICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgb25pbnB1dD1cInRoaXMudmFsdWU9dGhpcy52YWx1ZS5yZXBsYWNlKC9bXjAtOSBdL2csJycpO1wiXHJcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO1wiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvclxyXG4gICAgICAgICAgICA/ICdyZWQnXHJcbiAgICAgICAgICAgIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgPyAnIzg3YmUxYydcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgIH19XCIgLz5cclxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHN0eWxlPVwiY29sb3I6ICM4N2JlMWM7IG1hcmdpbi1sZWZ0OiAtMnJlbTsgei1pbmRleDogMTsgcGFkZGluZzogNXB4O1wiXHJcbiAgICAgICAgKm5nSWY9XCJpbnBWYWx1ZT8ubGVuZ3RoID4gMFwiPjwvaT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gRU5ELS0+XHJcblxyXG4gIDwhLS0gQWxwaGFOdW1lcmljIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJhbHBoYW51bWVyaWNGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj4gPCEtLVVJIG5vdCBjb21wbGV0ZWQtLT5cclxuICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjpyZWxhdGl2ZTtcIj5cclxuICAgICAgPGlucHV0IHR5cGU9dGV4dCBwbGFjZWhvbGRlcj1cIjAgb2YgMFwiIHN0eWxlPVwicGFkZGluZzo1cHggNXB4IDVweCAxNTBweDtcIiBpZD1cInlvdXJpZGhlcmVcIi8+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBFbWFpbCAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiZW1haWxGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXMtZmxleFwiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgW25nQ2xhc3NdPVwieyBib3hvdXRsaW5lOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIGlkPVwiZW1haWwtaW5wdXQtaWRcIlxyXG4gICAgICAgIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvclxyXG4gICAgICAgICAgICA/ICdyZWQnXHJcbiAgICAgICAgICAgIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgPyAnIzg3YmUxYydcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgIH19XCIgLz5cclxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHN0eWxlPVwiY29sb3I6ICM4N2JlMWM7IG1hcmdpbi1sZWZ0OiAtMnJlbTsgei1pbmRleDogMTsgcGFkZGluZzogNXB4XCJcclxuICAgICAgICAqbmdJZj1cImlucFZhbHVlPy5sZW5ndGggPiAwXCI+PC9pPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gRGF0ZVRpbWUgLS0+XHJcbiAgPGRpdiAqbmdJZj1cImR0RmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdaZXJvIG15dC10aW1lMVwiID5cclxuICAgIDwhLS0gRXJyb3IgSGFuZGxpbmcgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uZXJyb3JcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcclxuICAgIGNvbG9yOiByZWQ7XCI+e3txdWVzdGlvbkl0ZW0/LmVycm9yPy5lcnJvck1zZ319PC9kaXY+XHJcblxyXG4gICAgPCEtLSBEYXRlIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cImRhdGVGbGFnXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LkRhdGVfVGV4dF9fYyB9fTwvbGFiZWw+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRpcy1mbGV4XCI+XHJcbiAgICAgICAgICA8bXktZGF0ZS1waWNrZXIgbmFtZT1cIm15ZGF0ZVwiIFtvcHRpb25zXT1cIm15RGF0ZVBpY2tlck9wdGlvbnNcIiBpZD1cImRhdGVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweCAhaW1wb3J0YW50O1wiIChkYXRlQ2hhbmdlZCk9XCJvbkRhdGVDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbERhdGVcIiBjbGFzcz1cImRhdGUtcGlja2VyXCIgcGxhY2Vob2xkZXI9XCJTZWxlY2Npb25lIGZlY2hhXCIgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxyXG4gICAgICAgICAgPC9teS1kYXRlLXBpY2tlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFRpbWUgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwidGltZUZsYWdcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkaW5nQm90dG9tXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8uVGltZV9UZXh0X19jIH19PC9sYWJlbD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGlzLWZsZXhcIj5cclxuICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J2R0LWxpbmUgZGF0ZS1saW5lIGR0LXRpbWUnOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZWFuZFRpbWU6ICFxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fY31cIiBcclxuICAgICAgICAgICAgICBpZD1cImRhdGVhbmRUaW1lXCIgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJxdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCc6IHF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDAgPyAnJyA6ICcnXCJcclxuICAgICAgICAgICAgICAoZm9jdXMpPVwiKGNsZWFyU1FFcnJvcikgXCI+XHJcbiAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJob3Vyc1wiIGNsYXNzPVwiZGF0ZXRpbWUgc2hvd0hvdXIgbXl0LXRpbWUgbXl0LWhvdXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSG91clwiIGlkPVwiaG91clwiXHJcbiAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPkhIPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImhvdXJcIiAqbmdGb3I9XCJsZXQgaG91ciBvZiBob3Vyc1wiPlxyXG4gICAgICAgICAgICAgIHt7IGhvdXIgfX1cclxuICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XHJcbiAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJtaW51dGVzXCIgY2xhc3M9XCJkYXRldGltZSBzaG93bWludXRlIG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1pbnV0ZVwiIGlkPVwibWludXRlXCJcclxuICAgICAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+TU08L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibWludXRlXCIgKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVzXCI+XHJcbiAgICAgICAgICAgICAge3sgbWludXRlIH19XHJcbiAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgY29sb24xOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0/LlgyNF9Ib3Vyc19fYyA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9uXCI+IDogPC9zcGFuPlxyXG4gICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJBTS9QTVwiIGNsYXNzPVwibXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWVyaWRpZW1cIiBpZD1cIm1lcmlkaWVtXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFNXCI+QU08L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUE1cIj5QTTwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IFtuZ0NsYXNzXT1cInsnJzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYywgJ2RhdGVhbmRUaW1lJzogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2N9XCI+PC9kaXY+IC0tPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGkgY2xhc3M9XCJmYSBjaGVjay1pY29uM1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtPy5pbnB1dD8ubGVuZ3RoID4gMFwiPjwvaT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEF0dGFjaG1lbnQgLyBGaWxlIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJmaWxlRmxhZ1wiPlxyXG4gICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWFsZXJ0XCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInBpY3R1cmUtdXBsb2FkXCIgZm9yPVwiZmlsZS11cGxvYWRcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGljdHVyZS11cGxvYWQtY2hpbGRcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlLWltYWdlLW8gZmEtNXggaWNvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1wbHVzIGZhLTJ4IHBpY3R1cmUtdXBsb2FkLWNoaWxkIHBpYy11cGxvYWQgaWNvbG9yXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8aW5wdXQgaWQ9XCJmaWxlLXVwbG9hZFwiIHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwie3sgYWxsb3dlZEZpbGVFeHRlbnNpb24gfX1cIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50KVwiIC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDx1bCAqbmdJZj1cIlxyXG4gICAgICAgIGF0dGFjaG1lbnRzPy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgcXVlc3Rpb25JdGVtPy5UeXBlX19jID09PSAnRmlsZScgJiZcclxuICAgICAgICAhcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2NcclxuICAgICAgXCIgY2xhc3M9XCJhdHRhY2gtdWxpc3QgY29sLW1kLTEyXCI+XHJcbiAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwiYWxpZ24tbFwiPlxyXG4gICAgICAgIHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWVcclxuICAgICAgICB9fTxzcGFuIGNsYXNzPVwiYXR0YWNoLWxpc3RcIiAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIj5YPC9zcGFuPlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuXHJcbiAgICA8IS0tIEF0dGFjaG1lbnQgUHJvZ3Jlc3MgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJmaWxlLXVwbG9hZGluZy1ib3hcIj5cclxuICAgICAgICA8IS0tPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0MVwiIC8+LS0+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWRpbmctZmlsZS1uYW1lIFwiPnt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZGVsZXRlJTQwMngucG5nXCIgY2xhc3M9XCJkZWxldGVJY29uXCJcclxuICAgICAgICAgIChjbGljayk9XCJkZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuYXR0YWNobWVudElkKVwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsZS11cGxvYWQtYm94XCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPyAncmVkJyA6ICcnIH19XCI+XHJcbiAgICAgIFxyXG4gICAgICAgIDwhLS08aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXQxXCIgLz4tLT5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImYtTmFtZVwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MpXCI+IHt7IHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fY319PC9zcGFuPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZpbGUtbGFiZWwgXCI+XHJcbiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vZmlsZS11cGxvYWQucG5nXCIgY2xhc3M9XCJmaWxlLWljb25cIi8+XHJcbiAgICAgICAgICA8aW5wdXQgbmFtZT1cImF0dGFjaG1lbnRcIiB0eXBlPVwiZmlsZVwiIHBsYWNlaG9sZGVyPVwiVGlja2V0IGthdWZlblwiIG11bHRpcGxlXHJcbiAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsIC5wbmcsIC5qcGcsIC5qcGVnLCAuaGVpYywgLmFwcGxpY2F0aW9uL3BkZlwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJmaWxlLXVwbG9hZC1idG5cIj5cclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEJvb2sgLS0+XHJcbiAgPGRpdiAqbmdJZj1cImJvb2tGbGFnXCI+XHJcbiAgICA8ZGl2IFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsX19jID8gJ2Zvcm0tZ3JvdXAgY29udGVudC1ib3gnIDogJ2Zvcm0tZ3JvdXAnXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5lcnJvclwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1xyXG4gICAgICAgICAgICBjb2xvcjogcmVkO1wiPnt7cXVlc3Rpb25JdGVtPy5lcnJvcj8uZXJyb3JNc2d9fTwvZGl2PlxyXG4gICAgICAgIDxkaXYgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWxfX2MgPyAnJyA6ICdteXQtYWxpZ24zJ1wiIFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsX19jID8gJ2NvbC1sZy0nICsgcXVlcy5TaXplX19jICsgJyBwYWRkaW5nbm9uZScgOiAnY29sLW1kLScgKyBxdWVzLlNpemVfX2MgKyAnIHBhZGRpbmdub25lJ1wiXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcXVlcyBvZiBzdWJRdWVzdGlvbnM7bGV0IGkgPSBpbmRleFwiIFtpZF09XCJxdWVzLklkXCI+XHJcbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgZG93bjI6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cclxuICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWxfX2MgPyAnZGlzLWZsZXggc2hlbmdlbC1teXQtZm9udDMgbXl0LWZvbnQ3JyAgOiAnZGlzLWZsZXggbXl0LWZvbnQzIG15dC1mb250NycgXCI+e3sgcXVlcz8uUXVlc3Rpb25fX2MgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ1plcm8gbXl0LWRhdGVUaW1lTmV3XCIgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUaW1lJyB8fCBxdWVzLlR5cGVfX2MgPT09ICdEYXRlJ1wiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRGF0ZSdcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdCb3R0b21cIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LkRhdGVfVGV4dF9fYyB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlzLWZsZXggZGF0ZWFuZHRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgPG15LWRhdGUtcGlja2VyIG5hbWU9XCJteWRhdGVcIiBbb3B0aW9uc109XCJteURhdGVQaWNrZXJPcHRpb25zXCIgaWQ9XCJkYXRlXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHggIWltcG9ydGFudDtcIiAoZGF0ZUNoYW5nZWQpPVwib25EYXRlQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbERhdGVcIiBjbGFzcz1cImRhdGUtcGlja2VyXCIgcGxhY2Vob2xkZXI9XCJTZWxlY2Npb25lIGZlY2hhXCIgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIiA+XHJcbiAgICAgICAgICAgICAgICAgIDwvbXktZGF0ZS1waWNrZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUaW1lJ1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8uVGltZV9UZXh0X19jIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXMtZmxleCBkYXRlYW5kdGltZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J2R0LWxpbmUgZGF0ZS1saW5lIGR0LXRpbWUnOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVhbmRUaW1lOiAhcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2N9XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImRhdGVhbmRUaW1lXCIgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJxdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCc6IHF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDAgPyAnJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCIoY2xlYXJTUUVycm9yKSBcIj5cclxuICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiaG91cnNcIiBjbGFzcz1cImRhdGV0aW1lIHNob3dIb3VyIG15dC10aW1lIG15dC1ob3VyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEhvdXJcIiBpZD1cImhvdXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+SEg8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJob3VyXCIgKm5nRm9yPVwibGV0IGhvdXIgb2YgaG91cnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGhvdXIgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIm1pbnV0ZXNcIiBjbGFzcz1cImRhdGV0aW1lIHNob3dtaW51dGUgbXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWludXRlXCIgaWQ9XCJtaW51dGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+TU08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJtaW51dGVcIiAqbmdGb3I9XCJsZXQgbWludXRlIG9mIG1pbnV0ZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IG1pbnV0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGNvbG9uMTogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MgfVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiQU0vUE1cIiBjbGFzcz1cIm15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1lcmlkaWVtXCIgaWQ9XCJtZXJpZGllbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFNXCI+QU08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJQTVwiPlBNPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRGF0ZVRpbWUnXCI+XHJcbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRhdGUtcGlja2VyIFttaW5EYXRlXT1cInF1ZXMubWluRGF0ZVwiIFtkYXRlXT1cInF1ZXMuaW5wdXRcIiAoZGF0ZUNoYW5nZSk9XCJkaXNwbGF5RGF0ZSgkZXZlbnQscXVlcylcIj48L2FwcC1jdXN0b20tZGF0ZS1waWNrZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUZXh0J1wiPlxyXG4gICAgICAgICAgICA8YXBwLWN1c3RvbS1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICBbZnJvbVNoZW5nZWxdPVwicWJJdGVtLmlzU2hlbmdlbF9fY1wiXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJxdWVzLmlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NWYWx1ZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAnZGlzLWZsZXggZHQtbGluZSBkYXRlLWxpbmUgYm9va1RleHQgYm94b3V0bGluZSBteXQtZm9udDEnOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dEJveDogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcclxuICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCIgXHJcbiAgICAgICAgICAgICAgICAgIFtpZFZhbHVlXT1cInF1ZXMuVHJhY2tpbmdfSURfX2NcIlxyXG4gICAgICAgICAgICAgICAgICBbZm9jdXNFdmVudF09XCJjbGVhclNRRXJyb3IocXVlcy5JZClcIlxyXG4gICAgICAgICAgICAgICAgICBbZXJyb3JdPVwicXVlcy5lcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJxdWVzLlF1ZXN0aW9uX19jXCJcclxuICAgICAgICAgICAgICAgICAgKGlucHV0VmFsdWUpPVwic2VsZWN0ZWRJbnB1dCgkZXZlbnQscXVlcylcIj5cclxuICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWlucHV0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnTG9jYXRpb24nXCI+XHJcbiAgICAgICAgICAgIDwhLS0gZm9yIHBpY2sgbG9jYXRpb24gLS0+XHJcbiAgICAgICAgICAgIDxhcHAtcGljay1sb2NhdGlvbiBbYWRkcmVzc109XCJxdWVzLmlucHV0XCIgKGxvY2F0aW9uU2VsZWN0ZWQpPVwiaGFuZGxlTG9jYXRpb25TZWxlY3RlZCgkZXZlbnQscXVlcylcIj48L2FwcC1waWNrLWxvY2F0aW9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tIGZvciAgdGV4dCBhcmVhICAgLS0+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnVGV4dEFyZWEnXCI+XHJcbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLXRleHQtYXJlYSBbdmFsdWVdPVwicXVlcy5pbnB1dFwiIFtyb3dzXT1cIjNcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtwbGFjZWhvbGRlcl09XCJxdWVzLlF1ZXN0aW9uX19jIFwiICh0ZXh0YXJlYVZhbHVlQ2hhbmdlKT1cImhhbmRsZVRleHRhcmVhVmFsdWVDaGFuZ2UoJGV2ZW50KVwiPjwvYXBwLWN1c3RvbS10ZXh0LWFyZWE+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS0gZm9yIHRvIGRhdGEgdGFibGUgd2UgdXNlICdkYXRhJyB0eXBlIHF1ZXN0aW9uICAtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdEYXRhJ1wiPlxyXG4gICAgICAgICAgICA8YXBwLWN1c3RvbS10YWJsZSBbdGFibGVIZWFkZXJdPVwicXVlcy50YWJsZUhlYWRlclwiIFt0YWJsZURhdGFdPVwiZ2V0VGFibGVEYXRhKHF1ZXMpXCIgW3RhYmxlSW5kZXhdPVwiaVwiICh0YWJsZURhdGFDaGFuZ2UpPVwiZ2V0RGF0YSgkZXZlbnQpXCI+PC9hcHAtY3VzdG9tLXRhYmxlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0VtYWlsJ1wiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgWyhuZ01vZGVsKV09XCJxdWVzLmlucHV0XCIgW2lkXT1cInF1ZXMuSWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhclNRRXJyb3IocXVlcy5JZClcIlxyXG4gICAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLlF1ZXN0aW9uX19jIH19XCIgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdGaWxlJ1wiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJwaWN0dXJlLXVwbG9hZCBjdXN0b20tZmlsZS11cGxvYWQgYmdjb2xvci13XCIgZm9yPVwiZmlsZS11cGxvYWRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGljdHVyZS11cGxvYWQtY2hpbGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlLWltYWdlLW8gZmEtNXggaWNvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJcclxuICAgICAgICAgICAgICAgICAgICBmYSBmYS1wbHVzIGZhLTJ4XHJcbiAgICAgICAgICAgICAgICAgICAgcGljdHVyZS11cGxvYWQtY2hpbGRcclxuICAgICAgICAgICAgICAgICAgICBwaWMtdXBsb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbG9yXHJcbiAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBpZD1cImZpbGUtdXBsb2FkXCIgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCJ7eyBib29rRmxhZ0FjY2VwdCB9fVwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQscXVlcylcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDx1bCAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM/Lmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgIHF1ZXMuVHlwZV9fYyA9PT0gJ0ZpbGUnICYmXHJcbiAgICAgICAgICAgICAgICAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1xyXG4gICAgICAgICAgICAgIFwiIGNsYXNzPVwiYXR0YWNoLXVsaXN0IGNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwiYWxpZ24tbFwiPlxyXG4gICAgICAgICAgICAgICAge3sgYXR0YWNobWVudC5hdHRhY2htZW50TmFtZVxyXG4gICAgICAgICAgICAgICAgfX08c3BhbiBjbGFzcz1cImF0dGFjaC1saXN0XCIgKGNsaWNrKT1cImRlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5hdHRhY2htZW50SWQpXCI+WDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXl0LWJveFwiICpuZ0lmPVwicWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJmaWxlLXVwbG9hZGluZy1ib3hcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAyeC5wbmdcIiBjbGFzcz1cImljb24tZWRpdDFcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWRpbmctZmlsZS1uYW1lIG15dC1mb250MSBmb250LXdlaWdodDogbm9ybWFsO1wiPiB7eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZGVsZXRlJTQwMngucG5nXCIgY2xhc3M9XCJkZWxldGVJY29uXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5hdHRhY2htZW50SWQpXCIgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZS11cGxvYWQtYm94XCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPyAncmVkJyA6ICcnIH19XCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXQxXCIgLz5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZi1OYW1lXCI+e3sgcXVlcz8uUXVlc3Rpb25fX2MgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaWxlLWxhYmVsIFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiAjYzUyODFjO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICBBZGp1bnRhclxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiYXR0YWNobWVudFwiIHR5cGU9XCJmaWxlXCIgcGxhY2Vob2xkZXI9XCJUaWNrZXQga2F1ZmVuXCIgbXVsdGlwbGVcclxuICAgICAgICAgICAgICAgICAgICBhY2NlcHQ9XCIucGRmLCAucG5nLCAuanBnLCAuanBlZywgLmhlaWMsIC5hcHBsaWNhdGlvbi9wZGZcIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50LHF1ZXMpXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0blwiPlxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0Ryb3Bkb3duJ1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgIDwhLS0gZm9yIGNvbW1vbiBkcm9wZG93biAtLT5cclxuICAgICAgICAgICAgPGFwcC1jdXN0b20tZHJvcGRvd24gW2Zyb21TaGVuZ2VsXT1cInFiSXRlbS5pc1NoZW5nZWxfX2NcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInF1ZXMuUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXBpTWV0YV09XCJxdWVzLlN1Yl9UZXh0X19jXCJcclxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwicXVlcy5OYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJxdWVzLmlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJy0tLVNlbGVjdC0tLSdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5FcnJvcl9NZXNzYWdlX19jXCJcclxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwicXVlcy5lcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLklkKVwiPlxyXG4gICAgICAgICAgICA8L2FwcC1jdXN0b20tZHJvcGRvd24+XHJcbiAgICAgICAgICAgIDxhcHAtZHJvcGRvd24td2l0aC1mbGFnICpuZ0lmPVwicXVlcy5pc0RlcGVuZGVudFBpY2tsaXN0ICYmICFxdWVzLmRyb3BEb3duT25seVwiICBbY2VydGlmaWVkXT1cInF1ZXMuY2VydGlmaWVkRmxhZ1wiICBbSm9iUGVyZm9ybWVyQ2VydGlmaWNhdGVzXT1cInF1ZXMuY2VydGlmaWNhdGVMaXN0XCIgKGZsYWdEcm9wRG93bkNoYW5nZSk9XCJkZXBlbmRlbnRDaGFuZ2UoJGV2ZW50KVwiPjwvYXBwLWRyb3Bkb3duLXdpdGgtZmxhZz5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDBcIj48L2k+XHJcbiAgICAgICAgICA8L2Rpdj4gICAgICAgICAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS1MaXN0IHN0YXJ0LS0+XHJcbiAgPGRpdiAqbmdJZj1cImxpc3RGbGFnXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uZXJyb3JcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcclxuICAgICAgICAgICAgY29sb3I6IHJlZDtcIj57e3F1ZXN0aW9uSXRlbT8uZXJyb3I/LmVycm9yTXNnfX08L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXl0LWFsaWduM1wiIFtjbGFzc109XCInY29sLW1kLScgKyBxdWVzLlNpemVfX2MgKyAnIHBhZGRpbmdub25lJ1wiXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcXVlcyBvZiBnZXRMb2NhbFN1YlF1ZXN0aW9ucyhxdWVzdGlvbkl0ZW0uSWQpO2xldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGlzLWZsZXggbXl0LWZvbnQzIG15dC1mb250N1wiPnt7IHF1ZXM/LlF1ZXN0aW9uX19jIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnVGV4dCdcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJxdWVzLmlucHV0XCIgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgJ2Rpcy1mbGV4IGR0LWxpbmUgZGF0ZS1saW5lIGJvb2tUZXh0IGJveG91dGxpbmUgbXl0LWZvbnQxJzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcclxuICAgICAgICAgICAgIHRleHRCb3g6ICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXHJcbiAgICAgICAgICAgIH1cIiBpZD1cInRleHRcIiBbaWRdPVwicXVlcy51bmlxdWVTdWJRSWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhckxvY2FsU3ViUXVlc0Vycm9yKHF1ZXMpXCJcclxuICAgICAgICAgICAgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgcXVlcy5lcnJvciA/ICdyZWQnIDogJycgfX1cIiBwbGFjZWhvbGRlcj1cInt7IHF1ZXMuUXVlc3Rpb25fX2MgfX1cIlxyXG4gICAgICAgICAgICBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05XFxzLjo7LD9dL2csJycpO1wiIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nSWY9XCJhZGRGbGFnXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJBZGQoZ2V0TG9jYWxTdWJRdWVzdGlvbnMocXVlc3Rpb25JdGVtLklkKSlcIiBjbGFzcz1cImJ0blwiPjxpIGNsYXNzPVwiZmEgZmEtcGx1c1wiID48L2k+QWRkPC9idXR0b24+XHJcbiAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS1MaXN0IEVuZC0tPlxyXG5cclxuICA8IS0tIEFjdGlvbnMgLS0+XHJcbiAgPGRpdiAqbmdJZj1cImluZGl2aWR1YWxCb29rQnV0dG9uXCIgY2xhc3M9XCJmbGV4ZXJcIj5cclxuICAgIDwhLS0gQmFja3dhcmQgLyBCYWNrIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJhY2tidXR0b25cIiBbbmdDbGFzc109XCJ7ICdjb2wtbWQtNic6ICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIlxyXG4gICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJxdWVzdGlvblN0YWNrLmxlbmd0aCA+IDAgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiPlxyXG4gICAgICA8ZGl2IFtuZ0NsYXNzXT1cInt9XCI+XHJcbiAgICAgICAgPGJ1dHRvbiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICdsZWZ0LWJ0JzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcclxuICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnkgYnRuLWxnIGJ0bi1ibG9jayBidG4tYmFjay1jb2xvcic6XHJcbiAgICAgICAgICAgICAgIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcclxuICAgICAgICAgIH1cIiAoY2xpY2spPVwiaGFuZGxlQmFja0NsaWNrKClcIj5cclxuICAgICAgICAgIHt7IHFiSXRlbT8uQmFja19fYyB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gRm9yd2FyZCAvIE5leHQgLS0+XHJcbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2NvbC1tZC02JzogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAncnVzdHknOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jLFxyXG4gICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGJ0bi1iYWNrLWNvbG9yJzpcclxuICAgICAgICAgICAgICAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1xyXG4gICAgICAgICAgfVwiIChjbGljayk9XCJoYW5kbGVOZXh0Q2xpY2soKVwiPlxyXG4gICAgICAgICAge3sgcWJJdGVtLk5leHRfX2MgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48IS0tIFN1bW1hcnkgLS0+XHJcbjxkaXYgKm5nSWY9XCJzdW1tYXJ5ICYmIHN1bW1hcnkubGVuZ3RoID4gMFwiIGhlaWdodD1cIjEwMCUgIWltcG9ydGFudFwiIGNsYXNzPVwiY29sLW1kLTEyXCIgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICdjb2wtbWQtMTInOiFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXHJcbiAgICAgICAgICAgICAgIH1cIj5cclxuICAgIDxoMSBjbGFzcz1cImhlYWRlcjEgc3VtbWFyeXBhZGRcIiA+e3sgcWJJdGVtLlN1YlRpdGxlX19jIH19PC9oMT4gICAgICAgICBcclxuICA8ZGl2IGlkPVwicHJvZ3Jlc3MyXCIgKm5nSWY9XCIhcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyAmJiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgIT0gJ0NvbXBsZXRlZCcgXCI+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJ7ICdmdWxsLXN1bW1hcnknOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHFhIG9mIHN1bW1hcnlcIj5cclxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgbm9uOiAgcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyB9XCI+XHJcbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgc3VtbWFyeTogICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cclxuICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXFiSXRlbS5FZGl0X19jXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdxdWVzdGlvbic6IHRoaXMuYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJyB9XCI+XHJcbiAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwieyBhc3VtOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgPT09ICdDb21wbGV0ZWQnIH1cIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIlxyXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj57eyBxYS5xdWVzVmFsdWUgfX08L2E+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLkVkaXRfX2NcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uJzogdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnIH1cIj5cclxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uJzogdGhpcy5hYkl0ZW0uU3RhdHVzX19jID09PSAnQ29tcGxldGVkJyB9XCJcclxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBxYS5xdWVzVmFsdWUgfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbnN3ZXJcIiA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWEucVR5cCA9PT0gJ0ZpbGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAxLnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0LXN1bW1hcnlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICB7eyBxYS5hbnNWYWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWEucVR5cCAhPSAnRmlsZSdcIj57eyBxYS5hbnNWYWx1ZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5FZGl0X19jICYmIHRoaXMuYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJ1wiIHN0eWxlPVwiYmFja2dyb3VuZDogI2RlZGRkZDtcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImVkaXRcIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGV2aWNlSW5mby5vcyA9PT0gJ2lPUydcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZWRpdCU0MDJ4LnBuZ1wiIHN0eWxlPVwid2lkdGg6NTAlIWltcG9ydGFudDtcIiBjbGFzcz1cImljb24tZWRpdGlvc1wiLz5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGV2aWNlSW5mby5vcyAhPT0gJ2lPUydcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZWRpdCU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cInRoaXMuYWJJdGVtLlN0YXR1c19fYyA9PT0gJ0NvbXBsZXRlZCdcIiBjbGFzcz1cImNvbC1sZy0xMlwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhbmVsLWdyb3VwIHBhbmVsLWdyb3VwLWpvaW5lZFwiIGlkPVwiZVBUVy1kZXRhaWxzXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbCBwYW5lbC1kZWZhdWx0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsLWhlYWRpbmdcIj5cclxuICAgICAgICAgIDxoNCBjbGFzcz1cInBhbmVsLXRpdGxlXCI+XHJcbiAgICAgICAgICAgIDxhIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLXBhcmVudD1cIiNlUFRXLWRldGFpbHNcIiBocmVmPVwiI2NvbGxhcHNlT25lXCIgY2xhc3M9XCJjb2xsYXBzZWRcIj5cclxuICAgICAgICAgICAgICBQVFcgRGV0YWlsc1xyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICA8L2g0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgaWQ9XCJjb2xsYXBzZU9uZVwiIGNsYXNzPVwicGFuZWwtY29sbGFwc2UgY29sbGFwc2VcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1ib2R5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHN1bW1hcnlEYXRhOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaSAlIDIgPT09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02IG0tYi0zMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyBnZXRLZXkoaXRlbSkgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1zaXplXCI+e3sgZ2V0VmFsdWUoaXRlbSkgfHwgJ04vQScgfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIiAqbmdJZj1cInN1bW1hcnlEYXRhW2kgKyAxXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyBnZXRLZXkoc3VtbWFyeURhdGFbaSArIDFdKSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb250LXNpemVcIj57eyBnZXRWYWx1ZShzdW1tYXJ5RGF0YVtpICsgMV0pIHx8ICdOL0EnIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGlkPVwicHJvZ3Jlc3MyXCIgKm5nSWY9XCJxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIFwiPlxyXG4gICAgPGRpdiBbbmdDbGFzc109XCJ7J2JnQ29sb3Igc3VtbWFyeS10b3AnIDogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyB9XCIgPlxyXG4gICAgICA8ZGl2IGlkPVwicHJvZ3Jlc3Mtc3VtbWFyeVwiICpuZ0lmPVwicWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxyXG4gICAgICAgIDxjaXJjbGUtcHJvZ3Jlc3MgY2xhc3M9XCJ0aXRsZWJhclwiIFtwZXJjZW50XT1cInRoaXMucGVyY2VudFwiIFtyYWRpdXNdPVwiNDBcIiBbc3BhY2VdPVwiLTRcIiBbb3V0ZXJTdHJva2VXaWR0aF09XCI0XCJcclxuICAgICAgICBbaW5uZXJTdHJva2VXaWR0aF09XCI0XCIgW291dGVyU3Ryb2tlQ29sb3JdPVwiJyNlMGIxYjAnXCIgW2lubmVyU3Ryb2tlQ29sb3JdPVwiJyNlN2U4ZWEnXCIgW2FuaW1hdGlvbl09XCJ0cnVlXCIgW2JhY2tncm91bmRQYWRkaW5nXT0gXCIwXCJcclxuICAgICAgICBbYmFja2dyb3VuZENvbG9yXT0gXCInI2RkMmUxMydcIiBbYmFja2dyb3VuZEdyYWRpZW50U3RvcENvbG9yXT1cIicjZjliZmJkJ1wiIFt0aXRsZUNvbG9yXT1cIicjZjNlZGVkJ1wiIFxyXG4gICAgICAgIGNsYXNzPVwibmctc3Rhci1pbnNlcnRlZFwiIFt0aXRsZV09XCJ0aGlzLnBlcmNlbnQrJyUnXCIgW3Nob3dTdWJ0aXRsZV09XCJmYWxzZVwiIFtzaG93QmFja2dyb3VuZF09XCJ0cnVlXCIgW2FuaW1hdGlvbkR1cmF0aW9uXT1cIjMwMFwiXHJcbiAgICAgICAgW3N0YXJ0RnJvbVplcm9dPVwiZmFsc2VcIiBbcmVzcG9uc2l2ZV09XCJmYWxzZVwiID5cclxuICAgICAgPC9jaXJjbGUtcHJvZ3Jlc3M+XHJcbiAgICAgIFxyXG4gICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLlN1bW1hcnlfVGV4dF9fYyAmJiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCIgXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsgc3VtbWFyeVRpdGxlOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cclxuICAgICAgICA8aDMgY2xhc3M9XCJzdWJUaXRsZVwiID57eyBxYkl0ZW0uU3VtbWFyeV9UZXh0X19jIH19PC9oMz5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJ1wiIGNsYXNzPVwic3ViVGl0bGUxXCIgPnt7IHFiSXRlbS5TdW1tYXJ5X1N1Yl9UZXh0X19jfX08L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCIhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxyXG4gICAgICA8aDMgY2xhc3M9XCJzdW1tYXJ5LWhcIj5cclxuICAgICAgICB7eyBxYkl0ZW0uU3VtbWFyeV9UZXh0X19jIH19XHJcbiAgICAgIDwvaDM+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2Z1bGwtc3VtbWFyeSc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInN1bW1hcnktZ3JvdXBUZXh0IG15dC1mb250MlwiPlxyXG4gICAgICA8IS0tIDxwPkluZm9ybWUgZGUgZGHDsW88L3A+IC0tPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxYSBvZiBzdW1tYXJ5XCIgPlxyXG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBub246ICBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cclxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBzdW1tYXJ5OiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgIT0gJ0NvbXBsZXRlZCcgJiYgIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXFiSXRlbS5FZGl0X19jXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdxdWVzdGlvbiBzdW0tcXVlcyBteXQtZm9udDMgbXl0LWZvbnQ4JzogdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnIH1cIj5cclxuICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJ7IGFzdW06IHRoaXMuYWJJdGVtLlN0YXR1c19fYyA9PT0gJ0NvbXBsZXRlZCcgfVwiIChjbGljayk9XCJoYW5kbGVFZGl0Q2xpY2socWEucXVlc0lkKVwiXHJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFRleHQocWEucXVlc1ZhbHVlKVwiPnt7IHFhLnF1ZXNWYWx1ZSB9fTwvYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uRWRpdF9fY1wiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnc3VtLXF1ZXMgcXVlc3Rpb24gbXl0LWZvbnQzIG15dC1mb250OCc6IHRoaXMuYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJyB9XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdzdW0tcXVlczEgcXVlc3Rpb24xIHN1bW1hcnktY29tcGxldGVkIG15dC1mb250MyBteXQtZm9udDgnOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgPT09ICdDb21wbGV0ZWQnIH1cIlxyXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj5cclxuICAgICAgICAgICAgICAgIHt7IHFhLnF1ZXNWYWx1ZSB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5FZGl0X19jICYmIHRoaXMuYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJ1wiIHN0eWxlPVwiYmFja2dyb3VuZDogI2RlZGRkZDtcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZWRpdFwiIChjbGljayk9XCJoYW5kbGVFZGl0Q2xpY2socWEucXVlc0lkKVwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgPT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBzdHlsZT1cIndpZHRoOjUwJSFpbXBvcnRhbnQ7XCIgY2xhc3M9XCJpY29uLWVkaXRpb3NcIi8+XHJcbiAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGV2aWNlSW5mby5vcyAhPT0gJ2lPUydcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZWRpdCU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0XCIgLz5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbnN3ZXIgXCIgPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09PSAnRmlsZSdcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAxLnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0LXN1bW1hcnlcIiAvPlxyXG4gICAgICAgICAgICAgICAge3sgcWEuYW5zVmFsdWUgfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWEucVR5cCAhPSAnRmlsZSdcIj5cclxuICAgICAgICAgICAgICAgIHt7IHFhLmFuc1ZhbHVlIH19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gQW5zd2VyIEJvb2sgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXhlcjFcIiAqbmdJZj1cImFiSXRlbVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIlwiICpuZ0lmPVwiYWJJdGVtLlN0YXR1c19fYyA9PSAnQ29tcGxldGVkJ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBbbmdDbGFzc109XCJ7J2J0bi10ZXh0JzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOiAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY31cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNhbmNlbENsaWNrKClcIj5cclxuICAgICAgICAgIHt7IHFiSXRlbS5DYW5jZWxfX2MgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBHcm91cCBBY3Rpb25zIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJhbGlnbi1lZGl0LXN1Ym1pdFwiICpuZ0lmPVwiYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwieyAnYnRuLXRleHQyJzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOiAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyB9XCIgXHJcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZVN1Ym1pdENsaWNrKClcIj5cclxuICAgICAgICB7eyBxYkl0ZW0uU3VibWl0X19jIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgPGJ1dHRvbiBbbmdDbGFzc109XCJ7J2dyZXknOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnkgYnRuLWxnIGJ0bi1ibG9jayBidG4tYmFjay1jb2xvcic6ICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jfVwiIFxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVCYWNrQ2xpY2tOZXcoKVwiPlxyXG4gICAgICAgIHt7IHFiSXRlbS5FZGl0X19jIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG48L2Rpdj4iXX0=
2139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvcXVlc3Rpb25uYWlyZS9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbm5haXJlL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FFbEIsTUFBTSxlQUFlLENBQUM7QUFTdkIsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTlELE9BQU8sRUFDTCxRQUFRLEVBR1IsYUFBYSxFQUNiLFlBQVksRUFFWixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixhQUFhLEVBQ2QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUVMLFVBQVUsRUFNVixNQUFNLEdBQ1AsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVXRCLE1BQU0sT0FBTyxzQkFBc0I7SUFvUXZCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUE7SUEzUUQsSUFBSSxDQUFTO0lBQ2Isa0JBQWtCLENBQVM7SUFDM0IsSUFBSSxDQUFTO0lBQ2IsR0FBRyxDQUFTO0lBQ1gsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDakMsVUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBRTdELE1BQU0sQ0FBUztJQUNSLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDbEIsTUFBTSxDQUFhO0lBQ25CLE1BQU0sQ0FBZTtJQUNy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QWdDLENBQUM7WUFDbkQsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQzt3R0F0dUVZLHNCQUFzQjs0RkFBdEIsc0JBQXNCLDZNQUh0QixDQUFDLGFBQWEsQ0FBQywrQ0NwRDVCLHE0cENBb3RCTTs7NEZEN3BCTyxzQkFBc0I7a0JBUGxDLFNBQVM7K0JBQ0UsbUJBQW1CLGlCQUVkLGlCQUFpQixDQUFDLElBQUksYUFDMUIsQ0FBQyxhQUFhLENBQUM7b1ZBSWpCLElBQUk7c0JBQVosS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIEVsZW1lbnRSZWYsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgU2FsZXNmb3JjZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2FsZXNmb3JjZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IElNeURhdGVNb2RlbCwgSU15RHBPcHRpb25zIH0gZnJvbSBcIm15ZGF0ZXBpY2tlclwiO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE5neFNwaW5uZXJTZXJ2aWNlIH0gZnJvbSBcIm5neC1zcGlubmVyXCI7XHJcbi8vaW1wb3J0IHsgTmd4SW5kZXhlZERCU2VydmljZSwgSW5kZXhEZXRhaWxzfSBmcm9tICduZ3gtaW5kZXhlZC1kYic7XHJcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xyXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JzsgXHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgUXVlc3Rpb24sXHJcbiAgUXVlc3Rpb25Cb29rLFxyXG4gIEFuc3dlckJvb2ssXHJcbiAgQW5zd2VyV3JhcHBlcixcclxuICBFcnJvcldyYXBwZXIsXHJcbiAgT3B0aW9uLFxyXG4gIE9wdGlvblZhbHVlLFxyXG4gIEF0dGFjaG1lbnRXcmFwcGVyLFxyXG4gIEF0dGFjaG1lbnQsXHJcbiAgTG9jYWxRdWVzdGlvblxyXG59IGZyb20gXCIuLi8uLi93cmFwcGVyXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIFRFU1RRVUVTVElPTixcclxuICBEVFFVRVNUSU9OLFxyXG4gIEZJTEVRVUVTVElPTixcclxuICBUQVFVRVNUSU9OLFxyXG4gIFJBRElPUVVFU1RJT04sXHJcbiAgQ0hFQ0tRVUVTVElPTixcclxuICBCT09LUVVFU1RJT04sXHJcbiAgVEVTVFFCLFxyXG59IGZyb20gXCIuLi8uLi9zYW1wbGVcIjtcclxuaW1wb3J0IHsgZnJvbSB9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItcXVlc3Rpb25uYWlyZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgcHJvdmlkZXJzOiBbQ2hhbmdlU2VydmljZV0sXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50LmNzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9ubmFpcmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHFiSWQ6IHN0cmluZztcclxuICBASW5wdXQoKSBpbnN1cmFuY2VTdGFydERhdGU6IHN0cmluZztcclxuICBASW5wdXQoKSBzZXJ2OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdGtuOiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIGhhbmRsZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBoYW5kbGVQYWdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgcGFyYW1zOiBQYXJhbXM7XHJcbiAgcHVibGljIGRldmljZUluZm8gPSBudWxsO1xyXG4gIHB1YmxpYyBhYkl0ZW06IEFuc3dlckJvb2s7XHJcbiAgcHVibGljIHFiSXRlbTogUXVlc3Rpb25Cb29rO1xyXG4gIHB1YmxpYyBxdWVzdGlvbkl0ZW06IFF1ZXN0aW9uO1xyXG4gIHB1YmxpYyBhbnN3ZXJXcmFwOiBBbnN3ZXJXcmFwcGVyO1xyXG5cclxuICAvLyBDT05ESVRJT05BTCBUWVBFU1xyXG4gIHB1YmxpYyByYWRpb0ZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZGF0YUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gT1BUSU9OT05MWSBUWVBFU1xyXG4gIHB1YmxpYyBkcm9wZG93bkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgY2hlY2tib3hGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIFVOQ09ORElUSU9OQUwgVFlQRVNcclxuICBwdWJsaWMgdGV4dEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdGFGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGR0RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB0aW1lRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkYXRlRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBmaWxlRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBlbWFpbEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgbnVtYmVyRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBhbHBoYW51bWVyaWNGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGJvb2tGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGxpc3RGbGFnOiBib29sZWFuPSBmYWxzZTtcclxuICAvL0JhY2sgYnV0dG9uXHJcbiAgcHVibGljIGJhY2tCdXR0b25GbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIG9wdGlvblZhbHVlczogT3B0aW9uVmFsdWVbXSA9IFtdO1xyXG4gIHB1YmxpYyBzdWJRdWVzdGlvbnM6IFF1ZXN0aW9uW10gPSBbXTtcclxuICBwdWJsaWMgaW5wVmFsdWU6IHN0cmluZztcclxuICBwdWJsaWMgYW5zd2VyTWFwID0gbmV3IE1hcCgpO1xyXG4gIHB1YmxpYyBkYXRlTWFwID0gbmV3IE1hcCgpO1xyXG4gIHB1YmxpYyBzZWxlY3RlZGhvdXJNYXAgPSBuZXcgTWFwKCk7XHJcbiAgcHVibGljIHNlbGVjdGVkbWludXRlTWFwID0gbmV3IE1hcCgpO1xyXG4gIHB1YmxpYyBhdHRhY2htZW50c01hcCA9IG5ldyBNYXAoKTtcclxuICBwdWJsaWMgc3FPcHRpb25zID0gbmV3IE1hcCgpO1xyXG4gIHB1YmxpYyBzdWJBbnNNYXAgPSBuZXcgTWFwKCk7XHJcbiAgcHVibGljIGxvY2FsU3ViUXVlc3Rpb25zOiBMb2NhbFF1ZXN0aW9uW10gPSBbXTtcclxuICBwdWJsaWMgcXVlc3Rpb25TdGFjayA9IFtdO1xyXG4gIHB1YmxpYyBxdWVzdGlvbk5hbWUgPSBbXTtcclxuICBwdWJsaWMgYXR0YWNobWVudHM6IGFueVtdID0gW107XHJcbiAgcHVibGljIGF0dGFjaG1lbnRJZExpc3Q6IGFueVtdID0gW107XHJcbiAgcHVibGljIGF0dGFjaG1lbnRJZDogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgYXR0YWNobWVudDogYW55O1xyXG4gIHB1YmxpYyBhbGxvd2VkRmlsZUV4dGVuc2lvbjogc3RyaW5nW107XHJcbiAgcHVibGljIGZpbGVFeGNlZWRlZExpbWl0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGZpbGVUeXBlSW5jb3JyZWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGJhY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgYmFja2ljb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgY2hlY2s6IGJvb2xlYW47XHJcbiAgcHVibGljIHBvcDogYm9vbGVhbjtcclxuICBwdWJsaWMgbG9jYWxEYXRlOiBzdHJpbmc7XHJcbiAgcHVibGljIGN1cnJlbnROYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIHBhdGhxdWVzdGlvbjogbnVtYmVyO1xyXG4gIHB1YmxpYyBwZXJjZW50OiBudW1iZXI7XHJcbiAgcHVibGljIGNvdW50OiBudW1iZXI7XHJcbiAgcHVibGljIHRhRm9jdXNPdXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgbm90VmFsaWRBY2NOdW06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc3BsQ0NCYWNrQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc3VtbWFyeSA9IFtdO1xyXG4gIHB1YmxpYyBsb2NhbFN1YlFNYXAgPSBuZXcgTWFwKCk7XHJcbiAgcHVibGljIGtleUluZGV4OiBudW1iZXIgPSAwO1xyXG4gIC8vcHVibGljIHNxdWVzOiBzdHJpbmc7XHJcbiAgcHVibGljIHNlbERhdGU6IGFueSA9IHt9O1xyXG4gIHB1YmxpYyBzZWxlY3REYXRlOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB0b2RheTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgcHJpdmF0ZSBlbDogSFRNTEVsZW1lbnQ7XHJcbiAgcHVibGljIGlubmVyaHRtbDogYW55O1xyXG4gIHB1YmxpYyBwb3NzaWJpbGl0aWVzOiBhbnk7XHJcbiAgcHVibGljIGlubmVyaHRtbDE6IGFueTtcclxuICBwdWJsaWMgc3VtbWFyeURhdGEgPVtdO1xyXG4gIFxyXG4gIFxyXG4gIHRhYmxlRGF0YTE6IGFueVtdPSBbXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAnRmlyZSBFeHRpbmd1aXNoZXInLFxyXG4gICAgICBpbWFnZVNyYzogJ2h0dHBzOi8vbWVkaWEuaXN0b2NrcGhvdG8uY29tL2lkLzk0Mzc3NjQzNC92ZWN0b3IvZmlyZS1leHRpbmd1aXNoZXItaWNvbi12ZWN0b3IuanBnP3M9NjEyeDYxMiZ3PTAmaz0yMCZjPUtWYUR4dVYyVFY3ZmR3bjA5VGc5SGVGM01OeW9KQzVrMllxU0F6cFN0RFk9JyxcclxuICAgICAgYWx0VGV4dDogJ2V4dGluZ3Vpc2hlcicsXHJcbiAgICAgIG5hbWU6ICdGaXJlRXN0aW5ndWlzaGVyJyxcclxuICAgICAgdmFsdWU6ICdZRVMnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBsYWJlbDogJyBGaXJlIEJsYW5rZXQnLFxyXG4gICAgICBpbWFnZVNyYzogJ2h0dHBzOi8vbWVkaWEuaXN0b2NrcGhvdG8uY29tL2lkLzk0Mzc3NjQzNC92ZWN0b3IvZmlyZS1leHRpbmd1aXNoZXItaWNvbi12ZWN0b3IuanBnP3M9NjEyeDYxMiZ3PTAmaz0yMCZjPUtWYUR4dVYyVFY3ZmR3bjA5VGc5SGVGM01OeW9KQzVrMllxU0F6cFN0RFk9JyxcclxuICAgICAgYWx0VGV4dDogJ2ZpcmVCbGFua2V0JyxcclxuICAgICAgbmFtZTogJ2ZpcmVCbGFua2V0JyxcclxuICAgICAgdmFsdWU6ICdZRVMnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBsYWJlbDogJ0lsbHVtaW5hdGlvbicsXHJcbiAgICAgIGltYWdlU3JjOiAnaHR0cHM6Ly9tZWRpYS5pc3RvY2twaG90by5jb20vaWQvOTQzNzc2NDM0L3ZlY3Rvci9maXJlLWV4dGluZ3Vpc2hlci1pY29uLXZlY3Rvci5qcGc/cz02MTJ4NjEyJnc9MCZrPTIwJmM9S1ZhRHh1VjJUVjdmZHduMDlUZzlIZUYzTU55b0pDNWsyWXFTQXpwU3REWT0nLFxyXG4gICAgICBhbHRUZXh0OiAnZmlyZUJsYWlsbHVtaW5hdGlvbm5rZXQnLFxyXG4gICAgICBuYW1lOiAnaWxsdW1pbmF0aW9uJyxcclxuICAgICAgdmFsdWU6ICdZRVMnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBsYWJlbDogJ1ZlbnRpbGF0aW9uJyxcclxuICAgICAgaW1hZ2VTcmM6ICdodHRwczovL21lZGlhLmlzdG9ja3Bob3RvLmNvbS9pZC85NDM3NzY0MzQvdmVjdG9yL2ZpcmUtZXh0aW5ndWlzaGVyLWljb24tdmVjdG9yLmpwZz9zPTYxMng2MTImdz0wJms9MjAmYz1LVmFEeHVWMlRWN2Zkd24wOVRnOUhlRjNNTnlvSkM1azJZcVNBenBTdERZPScsXHJcbiAgICAgIGFsdFRleHQ6ICdWZW50aWxhdGlvbicsXHJcbiAgICAgIG5hbWU6ICdWZW50aWxhdGlvbicsXHJcbiAgICAgIHZhbHVlOiAnWUVTJ1xyXG4gICAgfVxyXG4gIF07XHJcbiAgdGFibGVEYXRhMjogYW55W109IFtcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICdIZWFkIFByb3RlY3Rpb24nLFxyXG4gICAgICBpbWFnZVNyYzogJ2h0dHBzOi8vbWVkaWEuaXN0b2NrcGhvdG8uY29tL2lkLzk0Mzc3NjQzNC92ZWN0b3IvZmlyZS1leHRpbmd1aXNoZXItaWNvbi12ZWN0b3IuanBnP3M9NjEyeDYxMiZ3PTAmaz0yMCZjPUtWYUR4dVYyVFY3ZmR3bjA5VGc5SGVGM01OeW9KQzVrMllxU0F6cFN0RFk9JyxcclxuICAgICAgYWx0VGV4dDogJ2V4dGluZ3Vpc2hlcicsXHJcbiAgICAgIG5hbWU6ICdjaGVjazEnLFxyXG4gICAgICB2YWx1ZTogJ1lFUydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAnV2VsZGluZyBIb29kJyxcclxuICAgICAgaW1hZ2VTcmM6ICdodHRwczovL21lZGlhLmlzdG9ja3Bob3RvLmNvbS9pZC85NDM3NzY0MzQvdmVjdG9yL2ZpcmUtZXh0aW5ndWlzaGVyLWljb24tdmVjdG9yLmpwZz9zPTYxMng2MTImdz0wJms9MjAmYz1LVmFEeHVWMlRWN2Zkd24wOVRnOUhlRjNNTnlvSkM1azJZcVNBenBTdERZPScsXHJcbiAgICAgIGFsdFRleHQ6ICdmaXJlQmxhbmtldCcsXHJcbiAgICAgIG5hbWU6ICdjaGVjazInLFxyXG4gICAgICB2YWx1ZTogJ1lFUydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOiAnRXllIFByb3RlY3Rpb24nLFxyXG4gICAgICBpbWFnZVNyYzogJ2h0dHBzOi8vbWVkaWEuaXN0b2NrcGhvdG8uY29tL2lkLzk0Mzc3NjQzNC92ZWN0b3IvZmlyZS1leHRpbmd1aXNoZXItaWNvbi12ZWN0b3IuanBnP3M9NjEyeDYxMiZ3PTAmaz0yMCZjPUtWYUR4dVYyVFY3ZmR3bjA5VGc5SGVGM01OeW9KQzVrMllxU0F6cFN0RFk9JyxcclxuICAgICAgYWx0VGV4dDogJ1Byb3RlY3Rpb24nLFxyXG4gICAgICBuYW1lOiAnUHJvdGVjdGlvbicsXHJcbiAgICAgIHZhbHVlOiAnWUVTJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbGFiZWw6ICdIZWFyaW5nIFByb3RlY3Rpb24nLFxyXG4gICAgICBpbWFnZVNyYzogJ2h0dHBzOi8vbWVkaWEuaXN0b2NrcGhvdG8uY29tL2lkLzk0Mzc3NjQzNC92ZWN0b3IvZmlyZS1leHRpbmd1aXNoZXItaWNvbi12ZWN0b3IuanBnP3M9NjEyeDYxMiZ3PTAmaz0yMCZjPUtWYUR4dVYyVFY3ZmR3bjA5VGc5SGVGM01OeW9KQzVrMllxU0F6cFN0RFk9JyxcclxuICAgICAgYWx0VGV4dDogJ0hlYXJpbmcnLFxyXG4gICAgICBuYW1lOiAnSGVhcmluZycsXHJcbiAgICAgIHZhbHVlOiAnWUVTJ1xyXG4gICAgfVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBob3VyczogYW55W10gPSBbXHJcbiAgICBcIjAxXCIsXHJcbiAgICBcIjAyXCIsXHJcbiAgICBcIjAzXCIsXHJcbiAgICBcIjA0XCIsXHJcbiAgICBcIjA1XCIsXHJcbiAgICBcIjA2XCIsXHJcbiAgICBcIjA3XCIsXHJcbiAgICBcIjA4XCIsXHJcbiAgICBcIjA5XCIsXHJcbiAgICBcIjEwXCIsXHJcbiAgICBcIjExXCIsXHJcbiAgICBcIjEyXCIsXHJcbiAgXTtcclxuXHJcbiAgcHVibGljIG1pbnV0ZXM6IHN0cmluZ1tdID0gW1xyXG4gICAgXCIwMFwiLFxyXG4gICAgXCIwMVwiLFxyXG4gICAgXCIwMlwiLFxyXG4gICAgXCIwM1wiLFxyXG4gICAgXCIwNFwiLFxyXG4gICAgXCIwNVwiLFxyXG4gICAgXCIwNlwiLFxyXG4gICAgXCIwN1wiLFxyXG4gICAgXCIwOFwiLFxyXG4gICAgXCIwOVwiLFxyXG4gICAgXCIxMFwiLFxyXG4gICAgXCIxMVwiLFxyXG4gICAgXCIxMlwiLFxyXG4gICAgXCIxM1wiLFxyXG4gICAgXCIxNFwiLFxyXG4gICAgXCIxNVwiLFxyXG4gICAgXCIxNlwiLFxyXG4gICAgXCIxN1wiLFxyXG4gICAgXCIxOFwiLFxyXG4gICAgXCIxOVwiLFxyXG4gICAgXCIyMFwiLFxyXG4gICAgXCIyMVwiLFxyXG4gICAgXCIyMlwiLFxyXG4gICAgXCIyM1wiLFxyXG4gICAgXCIyNFwiLFxyXG4gICAgXCIyNVwiLFxyXG4gICAgXCIyNlwiLFxyXG4gICAgXCIyN1wiLFxyXG4gICAgXCIyOFwiLFxyXG4gICAgXCIyOVwiLFxyXG4gICAgXCIzMFwiLFxyXG4gICAgXCIzMVwiLFxyXG4gICAgXCIzMlwiLFxyXG4gICAgXCIzM1wiLFxyXG4gICAgXCIzNFwiLFxyXG4gICAgXCIzNVwiLFxyXG4gICAgXCIzNlwiLFxyXG4gICAgXCIzN1wiLFxyXG4gICAgXCIzOFwiLFxyXG4gICAgXCIzOVwiLFxyXG4gICAgXCI0MFwiLFxyXG4gICAgXCI0MVwiLFxyXG4gICAgXCI0MlwiLFxyXG4gICAgXCI0M1wiLFxyXG4gICAgXCI0NFwiLFxyXG4gICAgXCI0NVwiLFxyXG4gICAgXCI0NlwiLFxyXG4gICAgXCI0N1wiLFxyXG4gICAgXCI0OFwiLFxyXG4gICAgXCI0OVwiLFxyXG4gICAgXCI1MFwiLFxyXG4gICAgXCI1MVwiLFxyXG4gICAgXCI1MlwiLFxyXG4gICAgXCI1M1wiLFxyXG4gICAgXCI1NFwiLFxyXG4gICAgXCI1NVwiLFxyXG4gICAgXCI1NlwiLFxyXG4gICAgXCI1N1wiLFxyXG4gICAgXCI1OFwiLFxyXG4gICAgXCI1OVwiLFxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RlZEhvdXI6IHN0cmluZyA9IFwiXCI7XHJcbiAgcHVibGljIHNlbGVjdGVkTWludXRlOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHB1YmxpYyBzZWxlY3RlZE1lcmlkaWVtOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHB1YmxpYyB2YWx1ZU5hbWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgcHVibGljIHZhbHVlTmFtZTE6IHN0cmluZyA9IFwiXCI7XHJcbiAgcHVibGljIGJvb2tGbGFnQWNjZXB0OiBzdHJpbmdbXTtcclxuICBwdWJsaWMgcmVjb3JkSWQ6IHN0cmluZztcclxuICBwdWJsaWMgY3VycmVudFF1ZXN0aW9uSWQ6IHN0cmluZztcclxuICBwdWJsaWMgc3Bpbm5lclR5cGU6IHN0cmluZztcclxuICBwdWJsaWMgc3Bpbm5lck5hbWU6IHN0cmluZztcclxuICBwdWJsaWMgbmV4dFZhbHVlOnN0cmluZyA9Jyc7XHJcblxyXG4gIHN0YXJ0X2RhdGU/OiBhbnk7XHJcblxyXG4gIC8vc2VhcmNoIGNvbXBvbmVudFxyXG4gIHB1YmxpYyB0ZW1wb0FkZHJlc3M6IGFueVtdID0gW107XHJcbiAgcHVibGljIHNlbGVjdGVkVmFsdWU6IHN0cmluZztcclxuICBwdWJsaWMgc2VsZWN0ZWRQb3N0YWxjb2RlOiBzdHJpbmc7XHJcbiAgcHVibGljIHNlbGVjdGVkUHJvdmluY2U6IHN0cmluZztcclxuICBwdWJsaWMgc2VsZWN0ZWRDaXR5OiBzdHJpbmc7XHJcbiAgcHVibGljIHNlbGVjdGVkQXJlYTogc3RyaW5nO1xyXG4gIHB1YmxpYyBsb2NhbGFkZHJlc3M6IGFueVtdID0gW107XHJcblxyXG4gIHB1YmxpYyBhbGxBZGRyZXNzIDphbnkgW10gPSBbXTtcclxuICBwdWJsaWMgUG9zdGFsQ29kZTpzdHJpbmc7XHJcbiAgcHVibGljIHBsYWNlczogYW55W10gPSBbXTtcclxuICBwdWJsaWMgcHJvdmluY2U6YW55W109W107XHJcbiBcclxuICAvLyBSRVEtMDEgUFJPR1JFU1MgQkFSXHJcbiAgcHVibGljIHByb2dyZXNzU3R5bGU6IHN0cmluZyA9IFwiMCVcIjtcclxuICBwdWJsaWMgYW5zd2VyQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIGluZGV4Q291bnQ6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIGFkZEZsYWc6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwdWJsaWMgbXlEYXRlUGlja2VyT3B0aW9uczogSU15RHBPcHRpb25zID0ge307XHJcbiAgaW5kaXZpZHVhbEJvb2tCdXR0b246IGJvb2xlYW47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzZlNlcnZpY2U6IFNhbGVzZm9yY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsIFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSBzcGlubmVyOiBOZ3hTcGlubmVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Zvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICAvL3ByaXZhdGUgZGJTZXJ2aWNlOiBOZ3hJbmRleGVkREJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkZXZpY2VTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXHJcbiAgICBlbDogRWxlbWVudFJlZlxyXG4gICkge1xyXG4gICAgdGhpcy5zcGlubmVyTmFtZSA9IFwic3AxXCI7XHJcbiAgICB0aGlzLnNwaW5uZXJUeXBlID0gXCJiYWxsLXNwaW4tY2xvY2t3aXNlXCI7XHJcbiAgfVxyXG5cclxuICBvbkRhdGVDaGFuZ2VkKGV2ZW50OiBJTXlEYXRlTW9kZWwpIHtcclxuICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgb25EYXRlQ2hhbmdlZCcpO1xyXG4gICAgLy90byBjaGFuZ2UgdGhlIGJvcmRlciBjb2xvclxyXG4gICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYykge1xyXG4gICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHByb2dyZXNzQmFyIGNvbmQnKTtcclxuICAgICAgdGhpcy5pbnBWYWx1ZSA9XHJcbiAgICAgICAgZXZlbnQuZGF0ZS5kYXkgKyBcIi9cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi9cIiArIGV2ZW50LmRhdGUueWVhcjtcclxuICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0uVHlwZV9fYyA9PVwiQm9va1wiKXtcclxuICAgICAgICB0aGlzLnNlbGVjdERhdGUgPSAgZXZlbnQuZGF0ZS5kYXkgKyBcIi9cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi9cIiArIGV2ZW50LmRhdGUueWVhcjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBFTFNFIG9mIHByb2dyZXNzQmFyIGNvbmQnKTtcclxuICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0uVHlwZV9fYyA9PVwiQm9va1wiKXtcclxuICAgICAgICB0aGlzLnNlbGVjdERhdGUgPSAgZXZlbnQuZGF0ZS5kYXkgKyBcIi1cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi1cIiArIGV2ZW50LmRhdGUueWVhcjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlucFZhbHVlID1cclxuICAgICAgICBldmVudC5kYXRlLnllYXIgKyBcIi1cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi1cIiArIGV2ZW50LmRhdGUuZGF5O1xyXG4gICAgfVxyXG4gICAgY29uc3QgaHRtbEVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm15ZHBcIik7XHJcbiAgICBodG1sRWxlbWVudFxyXG4gICAgICAuaXRlbSgwKVxyXG4gICAgICAuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJib3JkZXItY29sb3I6Izg3YmUxYzt3aWR0aDoxMDAlXCIpO1xyXG4gICAgdGhpcy5kYXRlTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCwgZXZlbnQpO1xyXG4gICAgaWYgKFxyXG4gICAgICBldmVudC5kYXRlLmRheSA9PT0gMCAmJlxyXG4gICAgICBldmVudC5kYXRlLm1vbnRoID09PSAwICYmXHJcbiAgICAgIGV2ZW50LmRhdGUueWVhciA9PT0gMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZGF0ZU1hcC5kZWxldGUodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xyXG4gICAgICB0aGlzLmFuc3dlck1hcC5kZWxldGUodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xyXG4gICAgfVxyXG4gICAgLy9jb25zb2xlLmxvZygndGhpcy5pbnBWYWx1ZSA9ICcrdGhpcy5pbnBWYWx1ZSk7XHJcbiAgICAvL2NvbnNvbGUubG9nKCd0aGlzLnNlbGVjdERhdGUgPSAnK3RoaXMuc2VsZWN0RGF0ZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZGV2aWNlSW5mbyA9IHRoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VJbmZvKCk7XHJcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBQYXJhbXMpID0+IHtcclxuICAgICAgaWYgKHBhcmFtc1snaWQnXSkge1xyXG4gICAgICAgIHRoaXMuaW5kaXZpZHVhbEJvb2tCdXR0b24gPSB0cnVlO1xyXG4gICAgICB9ZWxzZSBpZihwYXJhbXNbJ2Jvb2tsZXRJZCddKXtcclxuICAgICAgICB0aGlzLmluZGl2aWR1YWxCb29rQnV0dG9uID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc29sZS5sb2coJ0luc2lkZSB0aGUgbmdPbkluaXQnKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiUk5YVC1DbGFpbVwiKTtcclxuICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xyXG4gICAgdGhpcy5zZWxlY3RlZE1lcmlkaWVtID0gXCJBTVwiO1xyXG4gICAgdGhpcy5wcm9jZXNzUUIoKTtcclxuICAgIC8vY29uc29sZS5sb2cobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FkZHJlc3MnKSk7XHJcbiAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImFkZHJlc3NcIikpe1xyXG4gICAgICB0aGlzLmxvY2FsYWRkcmVzcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJhZGRyZXNzXCIpKTtcclxuICAgICAgLy9jb25zb2xlLmxvZygnTGVuZ3RoPScrdGhpcy5sb2NhbGFkZHJlc3MubGVuZ3RoKTtcclxuICAgICAgdGhpcy5hbGxBZGRyZXNzPXRoaXMubG9jYWxhZGRyZXNzLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5sb2NhbGFkZHJlc3MuaW5kZXhPZihpdGVtKSA9PSBpbmRleCl7XHJcbiAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pOyBcclxuICAgICAgdGhpcy5hbGxBZGRyZXNzLnNvcnQoZnVuY3Rpb24oYSwgYil7XHJcbiAgICAgICAgcmV0dXJuIGEuemlwQ29kZSAtIGIuemlwQ29kZVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZih0aGlzLmRldmljZUluZm8ub3MgPT09ICdpT1MnKXtcclxuICAgICAgICBsZXQgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihcImFkZHJlc3NEQlwiKTtcclxuICAgICAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRhcmdldE5ldyA9IGV2ZW50LnRhcmdldCBhcyBJREJSZXF1ZXN0O1xyXG4gICAgICAgICAgbGV0IGRiTmV3ID0gdGFyZ2V0TmV3LnJlc3VsdDtcclxuICAgICAgICAgIGNvbnN0IHJlcXVlc3ROZXcgPSBkYk5ldy50cmFuc2FjdGlvbignYWRkcmVzc1RhYmxlJylcclxuICAgICAgICAgICAgICAgIC5vYmplY3RTdG9yZSgnYWRkcmVzc1RhYmxlJylcclxuICAgICAgICAgICAgICAgIC5nZXQoMSk7XHJcbiAgICAgICAgICByZXF1ZXN0TmV3Lm9uc3VjY2VzcyA9ICgpPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRlbXBWYXIgPSByZXF1ZXN0TmV3LnJlc3VsdDtcclxuICAgICAgICAgICAgICB0aGlzLmxvY2FsYWRkcmVzcyA9IEpTT04ucGFyc2UodGVtcFZhci53aG9sZUFkZHJlc3NTdHJpbmcpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxsQWRkcmVzcz10aGlzLmxvY2FsYWRkcmVzcy5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2NhbGFkZHJlc3MuaW5kZXhPZihpdGVtKSA9PSBpbmRleCl7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pOyBcclxuICAgICAgICAgICAgICB0aGlzLmFsbEFkZHJlc3Muc29ydChmdW5jdGlvbihhLCBiKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhLnppcENvZGUgLSBiLnppcENvZGVcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIGNvbnNvbGUubG9nKCdpbnNpZGUgUXVlc3Rpb25uYWlyZSBuZ09uQ2hhbmdlcycpO1xyXG4gICAgLy8gdGhpcy5wcm9jZXNzUUIoKTtcclxuICB9XHJcblxyXG4gIGRhdGVfVGltZU1hcCgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRob3VyTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCwgdGhpcy5zZWxlY3RlZEhvdXIpO1xyXG4gICAgdGhpcy5zZWxlY3RlZG1pbnV0ZU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQsIHRoaXMuc2VsZWN0ZWRNaW51dGUpO1xyXG4gIH1cclxuXHJcbiAgZGF5KCkge1xyXG4gICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zID0ge1xyXG4gICAgICBkYXRlRm9ybWF0OiBcImRkLm1tLnl5eXlcIixcclxuICAgICAgc3VuSGlnaGxpZ2h0OiBmYWxzZSxcclxuICAgICAgZGlzYWJsZURhdGVSYW5nZXM6IFtdLFxyXG4gICAgICBzaG93Q2xlYXJEYXRlQnRuOiBmYWxzZSxcclxuICAgICAgZGlzYWJsZVNpbmNlOiB7XHJcbiAgICAgICAgeWVhcjogMCxcclxuICAgICAgICBtb250aDogMCxcclxuICAgICAgICBkYXk6IDAsXHJcbiAgICAgIH0sXHJcbiAgICAgIGRpc2FibGVVbnRpbDoge1xyXG4gICAgICAgIHllYXI6IDAsXHJcbiAgICAgICAgbW9udGg6IDAsXHJcbiAgICAgICAgZGF5OiAwLFxyXG4gICAgICB9LFxyXG4gICAgICBzaG93VG9kYXlCdG46IGZhbHNlLFxyXG4gICAgICBkYXlMYWJlbHM6IHtcclxuICAgICAgICBzdTogXCJEb21cIixcclxuICAgICAgICBtbzogXCJMdW5cIixcclxuICAgICAgICB0dTogXCJNYXJcIixcclxuICAgICAgICB3ZTogXCJNacOpXCIsXHJcbiAgICAgICAgdGg6IFwiSnVlXCIsXHJcbiAgICAgICAgZnI6IFwiVmllXCIsXHJcbiAgICAgICAgc2E6IFwiU8OhYlwiLFxyXG4gICAgICB9LFxyXG4gICAgICBtb250aExhYmVsczoge1xyXG4gICAgICAgIDE6IFwiRW5lXCIsXHJcbiAgICAgICAgMjogXCJGZWJcIixcclxuICAgICAgICAzOiBcIk1hclwiLFxyXG4gICAgICAgIDQ6IFwiQWJyXCIsXHJcbiAgICAgICAgNTogXCJNYXlvXCIsXHJcbiAgICAgICAgNjogXCJKdW5cIixcclxuICAgICAgICA3OiBcIkp1bFwiLFxyXG4gICAgICAgIDg6IFwiQWdvXCIsXHJcbiAgICAgICAgOTogXCJTZXBcIixcclxuICAgICAgICAxMDogXCJPY3RcIixcclxuICAgICAgICAxMTogXCJOb3ZcIixcclxuICAgICAgICAxMjogXCJEaWNcIixcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjaGFuZ2UoKSB7XHJcbiAgICBjb25zdCBodG1sRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibXlkcFwiKTtcclxuICAgIGlmICh0aGlzLnNlbERhdGUgPT09IG51bGwgfHwgdGhpcy5pbnBWYWx1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgaHRtbEVsZW1lbnRcclxuICAgICAgICAuaXRlbSgwKVxyXG4gICAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIndpZHRoOjEwMCU7Ym9yZGVyOiAxcHggc29saWQgcmVkXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaHRtbEVsZW1lbnRcclxuICAgICAgICAuaXRlbSgwKVxyXG4gICAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImJvcmRlcjogMXB4IHNvbGlkICM4N2JlMWMgO3dpZHRoOjEwMCVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzUUIoKSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdQcm9jZXNzUUInKTtcclxuICAgIC8vdGhpcy5xYkl0ZW1cclxuICAgIC8vY29uc29sZS5sb2codGhpcy5xYklkKTtcclxuICAgIC8vY29uc29sZS5sb2coJ1ZlcnNpb24gaW4gcHJvY2VzcyBpcyA4YmYxMWVmYTdmOTFhMzkxZDk1N2JmNmI1MDc4ZWRjN2U2NTZiNjdjJyk7XHJcbiAgICBpZiAodGhpcy5xYklkKSB7XHJcbiAgICAgIGlmICh0aGlzLnFiSWQubGVuZ3RoID09IDE4KSB7XHJcbiAgICAgICAgdGhpcy5yZWFkUXVlc3Rpb25Cb29rKHRoaXMucWJJZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBlbHNlIHBhcnQnKTtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdTZXR0aW5nIHRoZSBRdWVzdGlvbiBEaXJlY3RseSBmb3IgdGVzdGluZycpO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtID0gRFRRVUVTVElPTjtcclxuICAgICAgICB0aGlzLnFiSXRlbSA9IFRFU1RRQjtcclxuICAgICAgICB0aGlzLnByb2Nlc3NRdWVzdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmltTGFzdER1bW15KGlucHV0OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiAoaW5wdXQgPSBpbnB1dC5zdWJzdHJpbmcoMCwgaW5wdXQubGVuZ3RoIC0gNikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJvcGVyVGltZShkZWY6IHN0cmluZywgaW5wdXQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGlucHV0ID09PSBcIlwiID8gZGVmIDogaW5wdXQ7XHJcbiAgfVxyXG5cclxuICAvL1N1bW1hcnkgUXVlc3Rpb24gQ2xpY2thYmxlIExvZ2ljXHJcbiAgaGFuZGxlRWRpdENsaWNrKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuYmFja2ljb24gPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmFiSXRlbT8uU3RhdHVzX19jID09IFwiUGVuZGluZ1wiKSB7XHJcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVhZFF1ZXN0aW9uKHZhbHVlKTtcclxuICAgICAgLy9jb25zb2xlLmxvZygnIGluIHNpZGUgc3VtbWFyeW9wZW4nKyB0aGlzLnN1bW1hcnkubGVuZ3RoKTtcclxuXHJcbiAgICAgIC8vQXNzaWduIHF1ZXN0aW9uIHN0YWNrIGxlbmd0aCBmcm9tIHN1bW1hcnkgcGFydFxyXG4gICAgICB2YXIgYXJyYXlMZW5ndGggPSB0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoO1xyXG4gICAgICB2YXIgbGVuZ3RoVmFsdWUgPSB0aGlzLnF1ZXN0aW9uU3RhY2suaW5kZXhPZih2YWx1ZSk7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gYXJyYXlMZW5ndGg7IGkgPiBsZW5ndGhWYWx1ZTsgaS0tKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvblN0YWNrLnBvcCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgPT09IHRydWUpIHtcclxuICAgICAgICB2YXIgYXJyYXlMZW5ndGgxID0gdGhpcy5xdWVzdGlvbk5hbWUubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGogPSBhcnJheUxlbmd0aDE7IGogPiBsZW5ndGhWYWx1ZTsgai0tKSB7XHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wb3AoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdW1tYXJ5ID0gW107XHJcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZU5leHRDbGljaygpIHtcclxuICAgIHRoaXMuYmFja0J1dHRvbkZsYWcgPSBmYWxzZTtcclxuICAgIHRoaXMuQW5zd2VyU2F2ZSgpO1xyXG4gIH1cclxuXHJcbiAgQW5zd2VyU2F2ZSgpe1xyXG4gICAgLy90aGlzLnVwZGF0ZVByb2dyZXNzKCk7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UXVlc3Rpb25JZCA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgcXVlc3Rpb25UeHQ9Jyc7XHJcbiAgICB0aGlzLmNsZWFyRXJyb3IoKTtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5OZXh0X1RyYWNraW5nX0lEX19jKTtcclxuICAgIHRoaXMucmVjb3JkSWQgPSBudWxsO1xyXG4gICAgdmFyIGNRdWVzdGlvbjogUXVlc3Rpb24gPSBuZXcgUXVlc3Rpb24oKTtcclxuICAgIGNRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25JdGVtO1xyXG4gICAgICAgIC8vIENyZWF0ZSBhbiBhcnJheSBvZiBvYmplY3RzIHRvIHN0b3JlIHRoZSB2YWx1ZXNcclxuICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMubGVuZ3RoO2krKykge1xyXG4gICAgICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHNbaV0uUXVlc3Rpb25fVGV4dF9fYyl7XHJcbiAgICAgICAgICAgIHZhciBxdWVzdGlvblRleHQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkc1tpXS5RdWVzdGlvbl9UZXh0X19jLnJlcGxhY2UoLzxbXj5dKz4vZywgJycpOyAvLyBSZW1vdmUgSFRNTCB0YWdzIGZyb20gdGhlIFF1ZXN0aW9uX1RleHRfX2MgdmFsdWVcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBxdWVzdGlvblRleHQgPSAndW5kZWZpbmVkJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHNbaV0uaW5wdXQ7XHJcbiAgICAgICAgICBjb25zdCBvYmogPSB7IFtxdWVzdGlvblRleHRdOiBpbnB1dCB9OyAvLyBDcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHF1ZXN0aW9uVGV4dCBhcyB0aGUga2V5IGFuZCB0aGUgaW5wdXQgYXMgdGhlIHZhbHVlXHJcbiAgICAgICAgICB0aGlzLnN1bW1hcnlEYXRhLnB1c2gob2JqKTsgLy8gQWRkIHRoZSBvYmplY3QgdG8gdGhlIGRhdGEgYXJyYXlcclxuICAgICAgICB9XHJcbiAgICAgICAgIHZhciB0eXAgPSBjUXVlc3Rpb24uVHlwZV9fYztcclxuICAgIC8vIHRoaXMuc3F1ZXMgKz0gY1F1ZXN0aW9uLlF1ZXN0aW9uX19jICsgJ0BAIyMkJCc7XHJcbiAgICB2YXIgcXVlc1ZhbHVlID0gY1F1ZXN0aW9uLlF1ZXN0aW9uX1RleHRfX2M7XHJcbiAgICB2YXIgbWFpbGZvcm1hdCA9XHJcbiAgICAgIFwiXlteLl1bYS16QS1aMC05ISMkJSYnKistLz0/Xl9ge3x9fl0rW14uXUBbXi1dW2EtekEtWjAtOS4tXStbXi1dLlthLXpBLVpdezIsfSRcIjtcclxuXHJcbiAgICAvLyBQcm9jZXNzIElucHV0c1xyXG4gICAgaWYgKHRoaXMuY2hlY2tib3hGbGFnKSB7XHJcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xyXG4gICAgICAvLyBTYXZlIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBpbiB0aGUgaW5wVmFsdWVcclxuICAgICAgZm9yICh2YXIgb3Ygb2YgdGhpcy5vcHRpb25WYWx1ZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmNoZWNrZWQpKSB7XHJcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSBvdi5WYWx1ZV9fYyArIFwiQEAjIyQkXCI7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IG92Lk5leHRfUXVlc3Rpb25fX2M7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5lbWFpbEZsYWcpIHtcclxuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUgJiYgdGhpcy5pbnBWYWx1ZS5tYXRjaChtYWlsZm9ybWF0KSkge1xyXG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5OZXh0X1F1ZXN0aW9uX19jO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmFscGhhbnVtZXJpY0ZsYWcpIHtcclxuICAgICAgdmFyIGlzTm90VmFsaWRBY2NOdW0gPSB0aGlzLmlzTm90VmFsaWRBY2NOdW1iZXIodGhpcy5pbnBWYWx1ZSk7XHJcbiAgICAgIGlmIChpc05vdFZhbGlkQWNjTnVtKSB7XHJcbiAgICAgICAgdGhpcy5ub3RWYWxpZEFjY051bSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IHRoaXMucXVlc3Rpb25JdGVtLk5leHRfUXVlc3Rpb25fX2M7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubm90VmFsaWRBY2NOdW0gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5udW1iZXJGbGFnKSB7XHJcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IHRoaXMucXVlc3Rpb25JdGVtLk5leHRfUXVlc3Rpb25fX2M7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYm9va0ZsYWcpIHtcclxuICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbS5UeXBlX19jKVxyXG4gICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGJvb2tGbGFnIGNvbmQnKTtcclxuICAgICAgLy9jb25zb2xlLmxvZygndGhpcy5pbnBWYWx1ZSA9ICcrdGhpcy5pbnBWYWx1ZSk7XHJcbiAgICAgIC8vY29uc29sZS5sb2coJ3RoaXMuc2VsZWN0RGF0ZSA9ICcrdGhpcy5zZWxlY3REYXRlKTtcclxuICAgICAgLy9jb25zb2xlLmxvZygndGhpcy5zZWxEYXRlID0gJyk7XHJcbiAgICAgIC8vY29uc29sZS5sb2codGhpcy5zZWxEYXRlKTtcclxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XHJcbiAgICAgIHZhciBoYXNNaXNzaW5nSW5wdXQgPSBmYWxzZTtcclxuICAgICAgZm9yICh2YXIgaXRlbSBvZiB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcykge1xyXG4gICAgICAgIHZhciBjb3VudCA9IDA7XHJcbiAgICAgIFxyXG4gICAgICAgIGlmKGl0ZW0uVHlwZV9fYyA9PSBcIkRhdGVcIiB8fCBpdGVtLlR5cGVfX2MgPT0gXCJUaW1lXCIpIHtcclxuICAgICAgICAgIC8vdGhpcyBvbmVcclxuICAgICAgICAgIHRoaXMuY2hhbmdlKCk7XHJcbiAgICAgICAgICAgIGlmKGl0ZW0uVHlwZV9fYyA9PSBcIkRhdGVcIil7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBkYXRlIHR5cGUgY29uZCA9ICcrdGhpcy5zZWxlY3REYXRlKTtcclxuICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5zZWxlY3REYXRlO1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZSlcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2VsZWN0RGF0ZSlcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgaWYoaXRlbS5UeXBlX19jID09IFwiVGltZVwiKXtcclxuICAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zZWxlY3RlZEhvdXIrdGhpcy5zZWxlY3RlZE1lcmlkaWVtK3RoaXMuc2VsZWN0ZWRNaW51dGUpXHJcbiAgICAgICAgICAgICBcclxuICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxyXG4gICAgICAgICAgICAgICAgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJQTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyICE9IFwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICA/IE51bWJlcih0aGlzLnNlbGVjdGVkSG91cikgKyAxMlxyXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRIb3VyKSArXHJcbiAgICAgICAgICAgICAgICBcIjpcIiArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgUE1cIjtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIkFNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPT09IFwiMTJcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBcIjAwXCIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGUgKyBcIiBBTVwiO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jKSB7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNlbGVjdERhdGUpe1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5zZWxlY3REYXRlK1wiIFwiK3RoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zZWxlY3REYXRlKXtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0RGF0ZStcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gXCIgXCIrdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnNlbERhdGUgPT09IG51bGwgfHwgdGhpcy5zZWxEYXRlID09PSB1bmRlZmluZWQgfHwgIXRoaXMuaW5wVmFsdWUgfHwgIXRoaXMuc2VsZWN0ZWRIb3VyIHx8ICF0aGlzLnNlbGVjdGVkTWludXRlIHx8ICF0aGlzLnNlbGVjdERhdGUpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBudWxsIGNvbmRpdGlvbiBvZiBpbnB1dCcpO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgaHRtbEVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm15ZHBcIik7XHJcbiAgICAgICAgICAgIGh0bWxFbGVtZW50XHJcbiAgICAgICAgICAgICAgLml0ZW0oMClcclxuICAgICAgICAgICAgICAuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJ3aWR0aDoxMDAlO2JvcmRlci1ib3R0b206IDFweCBzb2xpZCByZWQgIWltcG9ydGFudDtcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZGF0ZV9UaW1lTWFwKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKGl0ZW0uVHlwZV9fYz09IFwiVGV4dFwiICYmIGl0ZW0uUXVlc3Rpb25fX2MgPT09ICdQb2JsYWNpw7NuJyl7XHJcbiAgICAgICAgICBmb3IodmFyIGxvYyBvZiB0aGlzLmxvY2FsYWRkcmVzcyl7XHJcbiAgICAgICAgICAgIGlmKCh0aGlzLnNlbGVjdGVkUG9zdGFsY29kZSA9PSBsb2MuemlwQ29kZSkmJih0aGlzLnNlbGVjdGVkVmFsdWUgPT0gbG9jLmNvdW50cnkpJiYodGhpcy5zZWxlY3RlZENpdHk9PWxvYy50b3duKSl7XHJcbiAgICAgICAgICAgICAgaXRlbS5pbnB1dD0gdGhpcy5zZWxlY3RlZENpdHk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihjb3VudCA9PSB0aGlzLmxvY2FsYWRkcmVzcy5sZW5ndGggLTEpe1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdlcnJvciBmb3JtIGNpdHknKVxyXG4gICAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY291bnQrKzsgIFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3Rlc3RpbiB2YWx1ZXM9PScraXRlbS5pbnB1dClcclxuICAgICAgICB9IFxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIGlmKGl0ZW0uVHlwZV9fYyA9PT0gJ0xvY2F0aW9uJyAmJiBBcnJheS5pc0FycmF5KGl0ZW0uaW5wdXQpICYmIGl0ZW0uaW5wdXQuZXZlcnkoKGlucHV0KSA9PiBpbnB1dCAhPT0gdW5kZWZpbmVkKSl7XHJcbiAgICAgICAgLy8gICAgIGNvbnN0IGlucHV0VmFsdWVzID0gXCJhbnN3ZXJTdHJpbmc6IFwiICsgaXRlbS5pbnB1dCA7XHJcbiAgICAgICAgLy8gICAgIGl0ZW0uaW5wdXQgPSBpbnB1dFZhbHVlcztcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgaWYoaXRlbS5UeXBlX19jPT0gXCJUZXh0XCIgJiYgaXRlbS5RdWVzdGlvbl9fYyA9PT0gJ0PDs2RpZ28gcG9zdGFsJyl7XHJcbiAgICAgICAgICBmb3IodmFyIGxvYyBvZiB0aGlzLmxvY2FsYWRkcmVzcyl7XHJcbiAgICAgICAgICAgIGlmKGxvYy56aXBDb2RlID09IHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlKXtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCd0ZXN0aW5nIHppcGNvZGUgdmFsdWUqKioqKicrIHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlKVxyXG4gICAgICAgICAgICAgIGl0ZW0uaW5wdXQ9dGhpcy5zZWxlY3RlZFBvc3RhbGNvZGU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZihjb3VudCA9PSB0aGlzLmxvY2FsYWRkcmVzcy5sZW5ndGggLTEpe1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdlcnJvciBmb3JtJylcclxuICAgICAgICAgICAgaXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcclxuICAgICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvdW50Kys7ICBcclxuICAgICAgICAgIH1cclxuICAgICAgICAvL2NvbnNvbGUubG9nKCd0ZXN0aW4gdmFsdWVzPT0nK2l0ZW0uaW5wdXQpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICBcclxuICAgICAgaWYoaXRlbS5UeXBlX19jPT0gXCJUZXh0XCIgJiYgaXRlbS5RdWVzdGlvbl9fYyA9PT0gJ1Byb3ZpbmNpYScpe1xyXG5cdFx0XHQgIGZvcih2YXIgbG9jIG9mIHRoaXMubG9jYWxhZGRyZXNzKXtcclxuXHRcdFx0XHQgIGlmKGxvYy5wcm92aW5jZSA9PSB0aGlzLnNlbGVjdGVkUHJvdmluY2Upe1xyXG5cdFx0XHRcdFx0ICAvL2NvbnNvbGUubG9nKCcqKioqKip0ZXN0aW5nIHByb3ZpbmNlIHZhbHVlJysgdGhpcy5zZWxlY3RlZFByb3ZpbmNlKVxyXG5cdFx0XHRcdFx0ICBpdGVtLmlucHV0PXRoaXMuc2VsZWN0ZWRQcm92aW5jZTtcclxuXHRcdFx0XHRcdCAgYnJlYWs7XHJcblx0XHRcdFx0ICB9IGVsc2UgaWYoY291bnQgPT0gdGhpcy5sb2NhbGFkZHJlc3MubGVuZ3RoIC0xKXtcclxuXHRcdFx0XHRcdC8vY29uc29sZS5sb2coJ2Vycm9yIGZvcm0nKVxyXG5cdFx0XHRcdFx0aXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcclxuXHRcdFx0XHRcdGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0ICB9XHJcblx0XHRcdFx0ICBjb3VudCsrOyAgXHJcblx0XHRcdCAgfVxyXG5cdFx0XHQvL2NvbnNvbGUubG9nKCd0ZXN0aW4gdmFsdWVzPT0nK2l0ZW0uaW5wdXQpXHJcblx0XHQgIH1cclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIWl0ZW0uSXNfT3B0aW9uYWxfX2MgJiZcclxuICAgICAgICAvLyAgKChpdGVtLlR5cGVfX2MgIT0gXCJGaWxlXCIgJiYgIWl0ZW0uaW5wdXQgJiYgaXRlbS5UeXBlX19jICE9ICdEYXRlJyAmJiBpdGVtLlR5cGVfX2MgIT0gJ1RpbWUnKSB8fFxyXG4gICAgICAgICAvLyAgIChpdGVtLlR5cGVfX2MgPT0gXCJGaWxlXCIgJiYgdGhpcy5hdHRhY2htZW50cy5sZW5ndGggPT0gMCkpXHJcbiAgICAgICAgIChpdGVtLlR5cGVfX2MgPT0gXCJGaWxlXCIgJiYgdGhpcy5hdHRhY2htZW50cy5sZW5ndGggPT0gMClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XHJcbiAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS5UeXBlX19jID09IFwiUmFkaW9cIikge1xyXG4gICAgICAgICAgaWYgKCFpdGVtLmlucHV0KSB7XHJcbiAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XHJcbiAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtLlR5cGVfX2MgPT0gXCJEcm9wZG93blwiKSB7XHJcbiAgICAgICAgICBpZiAoIWl0ZW0uaW5wdXQpIHtcclxuICAgICAgICAgICAgaXRlbS5pbnB1dCA9IFwiXCI7XHJcbiAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XHJcbiAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtLlR5cGVfX2MgPT0gXCJFbWFpbFwiKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbS5pbnB1dCAmJiBpdGVtLmlucHV0Lm1hdGNoKG1haWxmb3JtYXQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XHJcbiAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtLlR5cGVfX2MgPT0gXCJGaWxlXCIgJiYgdGhpcy5hdHRhY2htZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50SXRlbSBvZiB0aGlzLmF0dGFjaG1lbnRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgKz1cclxuICAgICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50SWQgK1xyXG4gICAgICAgICAgICAgIFwiQCMkXCIgK1xyXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLmF0dGFjaG1lbnROYW1lICtcclxuICAgICAgICAgICAgICBcIixcIjtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uaW5wdXQgPT0gdGhpcy5pbnBWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUnICsgcmVjb3JkSWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyB0aGlzLmF0dGFjaG1lbnRzID0gW107XHJcbiAgICAgICAgfSAvL2l0ZW0uaW5wdXQgPT0gdGhpcy5pbnBWYWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSAoaXRlbS5pbnB1dCAhPSB1bmRlZmluZWQgPyBpdGVtLmlucHV0IDogXCJcIikgKyBcIkBAIyMkJFwiO1xyXG4gICAgICAgIHF1ZXN0aW9uVHh0ICs9IGl0ZW0uUXVlc3Rpb25fX2MgKyBcIkBAIyMkJFwiO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBib29rMScgKyB0aGlzLmlucFZhbHVlKVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChoYXNNaXNzaW5nSW5wdXQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcclxuICAgICAgcXVlc3Rpb25UeHQgPSBxdWVzdGlvblR4dCA/IHRoaXMudHJpbUxhc3REdW1teShxdWVzdGlvblR4dCkgOiBxdWVzdGlvblR4dDtcclxuICAgIH0gXHJcbiAgICBlbHNlIGlmICh0aGlzLmxpc3RGbGFnKSB7XHJcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSAnJztcclxuICAgICAgdmFyIGhhc01pc3NpbmdJbnB1dCA9IGZhbHNlO1xyXG4gICAgICBpZih0aGlzLmxvY2FsU3ViUU1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uSWQpKXtcclxuICAgICAgICB0aGlzLnN1YkFuc01hcCA9IG5ldyBNYXAoKTtcclxuICAgICAgICBmb3IgKHZhciBsb2NhbFF1ZXMgb2YgdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKSkge1xyXG4gICAgICAgICAgICBpZighbG9jYWxRdWVzLmlucHV0KSB7XHJcbiAgICAgICAgICAgICAgbG9jYWxRdWVzLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKCF0aGlzLnN1YkFuc01hcC5oYXMobG9jYWxRdWVzLklkKSl7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgYW5zIG1hcCcpXHJcbiAgICAgICAgICAgIHRoaXMuc3ViQW5zTWFwLnNldChsb2NhbFF1ZXMuSWQsbG9jYWxRdWVzLmlucHV0KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgYW5zIG1hcCBlbHNlJylcclxuICAgICAgICAgICAgdGhpcy5zdWJBbnNNYXAuc2V0KGxvY2FsUXVlcy5JZCx0aGlzLnN1YkFuc01hcC5nZXQobG9jYWxRdWVzLklkKSArICckJEBAIyMnK2xvY2FsUXVlcy5pbnB1dCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaGFzTWlzc2luZ0lucHV0KSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdmaWxlIHR3bycpXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3ViQW5zTWFwLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgTWFwJyApO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2codmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSAodmFsdWUgIT0gdW5kZWZpbmVkID8gdmFsdWUgOiAnJykgKyAnQEAjIyQkJztcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy50cmltTGFzdER1bW15KHRoaXMuaW5wVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmRyb3Bkb3duRmxhZykge1xyXG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZS5sZW5ndGggPD0gMSkge1xyXG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIi5cIjtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmR0RmxhZyAmJiB0aGlzLmRhdGVGbGFnICYmIHRoaXMudGltZUZsYWcpIHtcclxuICAgICAgLy90aGlzIG9uZVxyXG4gICAgICB0aGlzLmNoYW5nZSgpO1xyXG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdGhpcy5nZXRQcm9wZXJUaW1lKFwiMTJcIiwgdGhpcy5zZWxlY3RlZEhvdXIpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSB0aGlzLmdldFByb3BlclRpbWUoXCIwMFwiLCB0aGlzLnNlbGVjdGVkTWludXRlKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPSB0aGlzLmdldFByb3BlclRpbWUoXCJBTVwiLCB0aGlzLnNlbGVjdGVkTWVyaWRpZW0pO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZS5sZW5ndGgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uWDI0X0hvdXJzX19jID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxyXG4gICAgICAgICAgICAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIlBNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgIT0gXCIxMlwiXHJcbiAgICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpICsgMTJcclxuICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRIb3VyKSArXHJcbiAgICAgICAgICAgIFwiOlwiICtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIFBNXCI7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIkFNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPT09IFwiMTJcIikge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9IFwiMDBcIiArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIEFNXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCIgXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCJUXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyBcIiBcIiArIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyBcIlRcIiArIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jKSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiYW5zID0+IFwiICsgdGhpcy5pbnBWYWx1ZSk7XHJcbiAgICAgICAgICB2YXIgZGF0ZTE6IGFueSA9IHRoaXMuaW5wVmFsdWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgZGF0ZTEgPSBkYXRlMVswXS5zcGxpdChcIi9cIik7XHJcbiAgICAgICAgICBkYXRlMSA9IFtkYXRlMVsyXSwgZGF0ZTFbMV0sIGRhdGUxWzBdXS5qb2luKFwiLVwiKTtcclxuICAgICAgICAgIGRhdGUxID0gbmV3IERhdGUoZGF0ZTEpO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhkYXRlMSlcclxuICAgICAgICAgIHZhciBkYXRlMjogYW55ID0gdGhpcy5pbnN1cmFuY2VTdGFydERhdGUuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgZGF0ZTIgPSBuZXcgRGF0ZShkYXRlMlswXSk7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGRhdGUyKTtcclxuICAgICAgICAgIGlmIChkYXRlMSA8IGRhdGUyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvci5lcnJvck1zZyA9XHJcbiAgICAgICAgICAgICAgXCJObyBlcyBwb3NpYmxlIGRhciBkZSBhbHRhIGxhIHJlY2xhbWFjacOzbiBkZWJpZG8gYSBxdWUgbGEgZmVjaGEgZGVsIGluY2lkZW50ZSBlcyBhbnRlcmlvciBhIGxhIGZlY2hhIGRlIGNvbnRyYXRhY2nDs24gZGUgbGEgcMOzbGl6YVwiO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUnKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlbERhdGUgPT09IG51bGwgfHwgIXRoaXMuaW5wVmFsdWUpIHtcclxuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRhdGVfVGltZU1hcCgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZUZsYWcgJiYgdGhpcy5kdEZsYWcgJiYgIXRoaXMuZGF0ZUZsYWcpIHtcclxuICAgICAgdGhpcy5kYXRlX1RpbWVNYXAoKTtcclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLmlucFZhbHVlID1cclxuICAgICAgICAgICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiUE1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciAhPSBcIjEyXCJcclxuICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpICsgMTJcclxuICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkSG91cikgK1xyXG4gICAgICAgICAgXCI6XCIgK1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5zZWxlY3RlZEhvdXIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUubGVuZ3RoIDwgNSkge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGVGbGFnICYmIHRoaXMuZHRGbGFnICYmICF0aGlzLnRpbWVGbGFnKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlKCk7XHJcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlLmxlbmd0aCA8IDcgfHwgdGhpcy5zZWxEYXRlID09PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmlsZUZsYWcpIHtcclxuICAgICAgLy9jb25zb2xlLmxvZygnZm91cicpXHJcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xyXG4gICAgICBpZiAodGhpcy5hdHRhY2htZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudEl0ZW0gb2YgdGhpcy5hdHRhY2htZW50cykge1xyXG4gICAgICAgICAgdGhpcy5pbnBWYWx1ZSArPVxyXG4gICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50SWQgK1xyXG4gICAgICAgICAgICBcIkAjJFwiICtcclxuICAgICAgICAgICAgYXR0YWNobWVudEl0ZW0uYXR0YWNobWVudE5hbWUgK1xyXG4gICAgICAgICAgICBcIixcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZpbGVzc3MnICsgdGhpcy5pbnBWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUuc3Vic3RyKDAsIHRoaXMuaW5wVmFsdWUubGVuZ3RoIC0gMSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgZm9yIHRoZSBhbnN3ZXIgYmVmb3JlIHNhdmluZyB0byB0aGUgREJcclxuICAgIGlmICghdGhpcy5xdWVzdGlvbkl0ZW0uSXNfT3B0aW9uYWxfX2MgJiYgIXRoaXMuaW5wVmFsdWUpIHtcclxuICAgICAgLy8gU2hvdyBlcnJvciB0aGF0IHRoZSBxdWVzdGlvbiBtdXN0IGJlIGFuc3dlcmVkXHJcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBTYXZlIHRoZSBBbnN3ZXIgaW4gdGhlIERCXHJcbiAgICB0aGlzLmFuc3dlcldyYXAgPSBuZXcgQW5zd2VyV3JhcHBlcigpO1xyXG4gICAgdGhpcy5hbnN3ZXJXcmFwLmFiSWQgPSB0aGlzLmFiSXRlbS5JZDtcclxuICAgIHRoaXMuYW5zd2VyV3JhcC5xdWVzSWQgPSBjUXVlc3Rpb24uSWQ7XHJcbiAgICB0aGlzLmFuc3dlcldyYXAucXVlc1ZhbHVlID0gcXVlc1ZhbHVlO1xyXG4gICAgdGhpcy5hbnN3ZXJXcmFwLnFUeXAgPSB0eXA7XHJcbiAgICB0aGlzLmFuc3dlcldyYXAuYW5zVmFsdWUgPSB0aGlzLmlucFZhbHVlO1xyXG4gICAgdGhpcy5hbnN3ZXJXcmFwLmdyb3VwVGV4dCA9IGNRdWVzdGlvbi5Hcm91cF9fYztcclxuICAgIHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSA9IHRoaXMuaW5wVmFsdWU7XHJcbiAgICBjb25zb2xlLmxvZygndGhpcy5hbnN3ZXJXcmFwLnFUeXAnLHRoaXMuYW5zd2VyV3JhcC5xVHlwKTtcclxuICAgaWYodGhpcy5hbnN3ZXJXcmFwLnFUeXAgPT0gXCJBbHBoYW51bWVyaWNcIil7XHJcbiAgICAgIHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSA9ICdFUycrIHRoaXMuaW5wVmFsdWU7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdCYW5rIGNvbmRpdGlvbicpO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmFuc3dlcldyYXAuYW5zVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLyppZiAoY1F1ZXN0aW9uLlR5cGVfX2MgPT0gJ0Jvb2snKXtcclxuICAgIGZvciAodmFyIHFiIG9mIGNRdWVzdGlvbi5RdWVzdGlvbnNfX3IucmVjb3Jkcyl7XHJcbiAgICAgIC8vY29uc29sZS5sb2cocWIuUXVlc3Rpb25fX2MrJyoqKionK1wiQEAjIyQkXCIpXHJcbiAgICB9IFxyXG4gIH0qL1xyXG4gICAgLy90aGlzLmFuc3dlcldyYXAuc3F1ZXNWYWx1ZSA9IGNRdWVzdGlvbi5RdWVzdGlvbl9fYztcclxuICAgIHRoaXMuYW5zd2VyV3JhcC5zcXVlc1ZhbHVlID0gcXVlc3Rpb25UeHQgPyBxdWVzdGlvblR4dCA6IGNRdWVzdGlvbi5RdWVzdGlvbl9fYztcclxuICAgIHRoaXMuc2F2ZUFuc3dlcigpO1xyXG4gIH1cclxuXHJcbiAgbmV4dCgpIHtcclxuICAgIHZhciBjUXVlc3Rpb246IFF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uKCk7XHJcbiAgICBjUXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uSXRlbTtcclxuICAgIHZhciB0eXAgPSBjUXVlc3Rpb24uVHlwZV9fYztcclxuICAgIC8vIElmIG5vIGVycm9yIHRoZW4gbW92ZSB0byBuZXh0IHN0ZXBzXHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucXVlc3Rpb25TdGFjay5wdXNoKGNRdWVzdGlvbi5JZCk7XHJcbiAgICAvLyAgdGhpcy5xdWVzdGlvbk5hbWUucHVzaChjUXVlc3Rpb24uTmFtZSk7XHJcblxyXG4gICAgLy8gQ09ORElUSU9OQUwgdnMgT1BUSU9OT05MWSAmIFVOQ09ORElUSU9OQUxcclxuICAgIGlmIChjUXVlc3Rpb24uUmVjb3JkVHlwZS5OYW1lID09IFwiQ09ORElUSU9OQUxcIikge1xyXG4gICAgICBmb3IgKHZhciBjT3B0IG9mIGNRdWVzdGlvbi5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHMpIHtcclxuICAgICAgICAvLyBSYWRpbyAvIERhdGFcclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdPcHRpb24gPT4gJyArIGNPcHQuVmFsdWVfX2MgKyAnIG1hdGNoaW5nIHdpdGggJyArIGFuc1ZhbCk7XHJcbiAgICAgICAgaWYgKGNPcHQuVmFsdWVfX2MgPT0gdGhpcy5pbnBWYWx1ZSkge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnTWF0Y2ggRm91bmQgdXNpbmcgJyArIGNPcHQuTmV4dF9RdWVzdGlvbl9fYyk7XHJcbiAgICAgICAgICB0aGlzLnJlY29yZElkID0gY09wdC5OZXh0X1F1ZXN0aW9uX19jO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnY29uZGl0aW9uYWwgcmVjb3JkIGlkJysgdGhpcy5yZWNvcmRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIENvdWxkIGJlIG9mIHR5cGUgRGF0YSBhbmQgZXhpc3RpbmcgdmFsdWVcclxuICAgICAgaWYgKHRoaXMucmVjb3JkSWQgJiYgdHlwID09IFwiRGF0YVwiKSB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGNRdWVzdGlvbi5SZWNvcmRUeXBlLk5hbWUgPT0gXCJPUFRJT05PTkxZXCIpIHtcclxuICAgICAgLy8gIE9QVElPTk9OTFkgbG9naWNcclxuICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xyXG4gICAgfSBlbHNlIGlmIChjUXVlc3Rpb24uUmVjb3JkVHlwZS5OYW1lID09IFwiVU5DT05ESVRJT05BTFwiKSB7XHJcbiAgICAgIC8vVW5jb25kaXRpb25hbCAgbG9naWNcclxuICAgICAgLy9jb25zb2xlLmxvZyhcImluc2lkZSB1bmNvbmRpdGlvbmFsXCIpO1xyXG4gICAgICAvL2luc2lkZSBCb29rIFR5cGVcclxuICAgICAgaWYgKGNRdWVzdGlvbi5UeXBlX19jID09IFwiQm9va1wiICYmIGNRdWVzdGlvbi5RdWVzdGlvbl9Ob19fYyAhPSc2Jykge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coXCJpbnNpZGUgYm9va1wiKTtcclxuICAgICAgICBmb3IgKGxldCBvcHQgb2YgY1F1ZXN0aW9uLlF1ZXN0aW9uc19fci5yZWNvcmRzKSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKG9wdC5UeXBlX19jKTtcclxuICAgICAgICAgIGlmIChvcHQuVHlwZV9fYyA9PSBcIkRyb3Bkb3duXCIgfHwgb3B0LlR5cGVfX2MgPT0gXCJSYWRpb1wiKSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIG9wdDEgb2Ygb3B0LlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkcykge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlTmFtZSA9PSBvcHQxLlZhbHVlX19jKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlY29yZElkID1vcHQxLk5leHRfUXVlc3Rpb25fX2MgfHwgY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ0Vsc2UnK3RoaXMucmVjb3JkSWQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZihjUXVlc3Rpb24uVHlwZV9fYyA9PSBcIkJvb2tcIiAmJiBjUXVlc3Rpb24uUXVlc3Rpb25fTm9fX2MgPT0nNicgKSB7XHJcbiAgICAgICAgZm9yIChsZXQgb3B0IG9mIGNRdWVzdGlvbi5RdWVzdGlvbnNfX3IucmVjb3Jkcykge1xyXG4gICAgICAgICAgaWYgKG9wdC5UeXBlX19jID09IFwiRHJvcGRvd25cIiB8fCBvcHQuVHlwZV9fYyA9PSBcIlJhZGlvXCIpe1xyXG4gICAgICAgICAgZm9yICh2YXIgb3B0MSBvZiBvcHQuUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlTmFtZSA9PSBvcHQxLlZhbHVlX19jKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBvcHQxLk5leHRfUXVlc3Rpb25fX2M7ICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gICAgXHJcbiAgICAgIFxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBDQVRFR09SSVpBVElPTlxyXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xyXG5cclxuICAgIC8vIENhbGxpbmcgdGhlIHByb2dyZXMgYmFyIHVwZGF0ZSBmdW5jdGlvblxyXG4gICAgdGhpcy5hbnN3ZXJDb3VudCsrO1xyXG4gICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xyXG5cclxuXHJcbiAgICAvLyBDQVRFR09SSVpBVElPTlxyXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xyXG5cclxuICAgIGlmICh0aGlzLnJlY29yZElkKSB7XHJcbiAgICAgIC8vY29uc29sZS5sb2coJ0JlZm9yZSBDYWxsaW5nIHJlYWRRdWVzdGlvbigpIHVzaW5nICcgKyByZWNvcmRJZCk7XHJcbiAgICAgIHRoaXMucmVhZFF1ZXN0aW9uKHRoaXMucmVjb3JkSWQpO1xyXG4gICAgICB0aGlzLnBvcCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBvcCA9IGZhbHNlO1xyXG4gICAgICAvL2NvbnNvbGUubG9nKCdTdW1tYXJ5IFBhZ2UgTG9naWMnKTtcclxuICAgICAgLy8gUmVzZXQgdGhlIFZhcmlhYmxlc1xyXG4gICAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcclxuICAgICAgdGhpcy5hbnN3ZXJXcmFwID0gbmV3IEFuc3dlcldyYXBwZXIoKTtcclxuICAgICAgdGhpcy5vcHRpb25WYWx1ZXMgPSBbXTtcclxuICAgICAgdGhpcy5zdWJRdWVzdGlvbnMgPSBbXTtcclxuXHJcbiAgICAgIHRoaXMucmVzZXRGbGFnKHR5cCk7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtID0gbnVsbDtcclxuXHJcbiAgICAgIC8vIFNob3cgU3VtbWFyeVxyXG4gICAgICBmb3IgKHZhciBxIG9mIHRoaXMucXVlc3Rpb25TdGFjaykge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ0hhbmRsaW5nIFF1ZXN0aW9uID0+ICcgKyBxKTtcclxuICAgICAgICB2YXIgYW5zV3JhcCA9IHRoaXMuYW5zd2VyTWFwLmdldChxKTtcclxuICAgICAgICBpZiAoYW5zV3JhcCkge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnSGFuZGxpbmcgQW5zd2VyIGZvciAnICsgYW5zV3JhcC5xdWVzSWQgKyAnIG9mIHR5cGUgJyArIGFuc1dyYXAucVR5cCk7XHJcbiAgICAgICAgICBpZihhbnNXcmFwLnFUeXAgPT0gJ0ZpbGUnIHx8IGFuc1dyYXAucVR5cCA9PSAnQm9vayd8fGFuc1dyYXAucVR5cCA9PSAnTGlzdCcgfHwgYW5zV3JhcC5xVHlwID09ICdDaGVja2JveCcpe1xyXG4gICAgICAgICAgICB2YXIgbmV3U3RyID0gJyc7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGFuc1N0ciBvZiBhbnNXcmFwLmFuc1ZhbHVlLnNwbGl0KCdAQCMjJCQnKSkge1xyXG4gICAgICAgICAgICAgIGZvciAodmFyIGFuc1N0cjEgb2YgYW5zU3RyLnNwbGl0KCckJEBAIyMnKSkge1xyXG4gICAgICAgICAgICAgIC8vICBpZihhbnNTdHIxLmluY2x1ZGVzKCdhbnN3ZXJTdHJpbmcnKSl7IC8vcmVtb3ZlIHRoZSBhbnN3ZXIgc3RyaW5nICBcclxuICAgICAgICAgICAgICAgLy8gICBjb25zdCB3aXRob3V0QW5zd2VyU3RyaW5nID0gYW5zU3RyMS5yZXBsYWNlKFwiYW5zd2VyU3RyaW5nOiBcIiwgXCJcIik7XHJcbiAgICAgICAgICAgICAgICAvLyAgYW5zU3RyMSA9IHdpdGhvdXRBbnN3ZXJTdHJpbmc7XHJcbiAgICAgICAgICAgICAgLy8gIH1cclxuICAgICAgICAgICAgICAgIGlmIChhbnNTdHIxLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKG5ld1N0ci5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciA9IGFuc1N0cjE7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyICs9ICc7ICcgKyBhbnNTdHIxOyAgLy9jb21tYSgsKSBjaGFuZ2VkIGFzIHNlbWkgY29sb24oOykgYmVjYXVzZSBvZiBhZGRyZXNzIGNvbnRhaW5zIGNvbW1hKCwpIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuYXR0YWNobWVudHNNYXAuaGFzKGFuc1dyYXAucXVlc0lkKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGF0dCBvZiB0aGlzLmF0dGFjaG1lbnRzTWFwLmdldChhbnNXcmFwLnF1ZXNJZCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdHIgPSBuZXdTdHIucmVwbGFjZShhdHQuYXR0YWNobWVudElkLCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gKG5ld1N0ci5yZXBsYWNlKCcsLCcsJywgJykpLnJlcGxhY2UoJywgLCcsJywgJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gbmV3U3RyLnN0YXJ0c1dpdGgoJywnKSA/IG5ld1N0ci5zdWJzdHJpbmcoMSwgbmV3U3RyLmxlbmd0aCkgOiAobmV3U3RyLmVuZHNXaXRoKCcsJykgPyBuZXdTdHIuc3Vic3RyaW5nKDAsIG5ld1N0ci5sZW5ndGggLSAxKSA6IG5ld1N0cik7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1hbnNXcmFwLmFuc1ZhbHVlID0gbmV3U3RyO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc1dyYXApO1xyXG4gICAgICAgICAgdGhpcy5iYWNraWNvbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUZXh0KHZhbHVlKSB7XHJcbiAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh2YWx1ZSwgXCJ0ZXh0L2h0bWxcIik7XHJcbiAgICAvL2NvbnNvbGUubG9nKCBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50KTtcclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChcclxuICAgICAgZG9jLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUJhY2tDbGljaygpIHtcclxuICAgIHRoaXMuYmFjayA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5wb3AgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucG9wKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uQmFja19UcmFja2luZ19JRF9fYyk7XHJcbiAgICB2YXIgY1F1ZXN0aW9uOiBRdWVzdGlvbiA9IG5ldyBRdWVzdGlvbigpO1xyXG4gICAgY1F1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkl0ZW07XHJcbiAgICBpZihjUXVlc3Rpb24uUXVlc3Rpb25fTm9fX2MgPT0nMScpe1xyXG4gICAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uQmFja19fYyk7XHJcbiAgICB9XHJcbiAgICBcclxuXHJcbiAgICB0aGlzLmFuc3dlckNvdW50LS07XHJcbiAgICB0aGlzLnVwZGF0ZVByb2dyZXNzKCk7XHJcbiAgICAvLyBDQVRFR09SSVpBVElPTlxyXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xyXG5cclxuICAgIGlmICh0aGlzLnN1bW1hcnkpIHtcclxuICAgICAgLy9jb25zb2xlLmxvZygnc3VtbWFyeSB0cnVlJyk7XHJcbiAgICAgIHRoaXMuc3VtbWFyeSA9IFtdO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5zdW1tYXJ5RGF0YSl7XHJcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEgPVtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlYWQgdGhlIHByZXZpb3VzIHF1ZXN0aW9uIGZyb20gREJcclxuICAgIHRoaXMucmVhZFF1ZXN0aW9uKHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKSk7XHJcbiAgICAvL2NvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25TdGFjayk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVCYWNrQ2xpY2tOZXcoKSB7XHJcbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uRWRpdF9fYyk7XHJcbiAgfVxyXG5cclxuICAvL3VwZGF0aW5nIHN0YXR1cyBvbmNlIFEmQSBjb21wbGV0ZWQuXHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQW5zd2VyQm9vayA9ICh1dWlkOiBzdHJpbmcpID0+IHtcclxuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcclxuICAgICAgICB0aGlzLnRrbixcclxuICAgICAgICBbXCJBbnN3ZXJCb29rXCIsIFwiVXBkYXRlXCIsIHV1aWRdLFxyXG4gICAgICAgIHRoaXMuc3VjY2Vzc3VwZGF0ZUFCLFxyXG4gICAgICAgIHRoaXMuZmFpbHVyZXVwZGF0ZUFCXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXHJcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NcIixcclxuICAgICAgICBbXCJBbnN3ZXJCb29rXCIsIFwiVXBkYXRlXCIsIHV1aWRdLFxyXG4gICAgICAgIHRoaXMuc3VjY2Vzc3VwZGF0ZUFCLFxyXG4gICAgICAgIHRoaXMuZmFpbHVyZXVwZGF0ZUFCXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1Y2Nlc3N1cGRhdGVBQiA9IChyZXNwb25zZSkgPT4ge1xyXG4gICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgLy8gLy9jb25zb2xlLmxvZygnc3RhdHVzIHN1Y2Nlc3MnKVxyXG4gICAgdGhpcy5hYkl0ZW0uU3RhdHVzX19jID0gXCJDb21wbGV0ZWRcIjtcclxuICB9O1xyXG4gIHByaXZhdGUgZmFpbHVyZXVwZGF0ZUFCID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdzdGF0dXMgZmFpbGVkJylcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHJlYWRRdWVzdGlvbkJvb2sgPSAodXVpZDogc3RyaW5nKSA9PiB7XHJcbiAgICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xyXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXHJcbiAgICAgICAgdGhpcy50a24sXHJcbiAgICAgICAgW1wiUXVlc3Rpb25Cb29rXCIsIFwicmVhZFwiLCB1dWlkXSxcclxuICAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkQm9vayxcclxuICAgICAgICB0aGlzLmZhaWx1cmVSZWFkQm9va1xyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxyXG4gICAgICAgIFwiTnh0Q29udHJvbGxlci5wcm9jZXNzXCIsXHJcbiAgICAgICAgW1wiUXVlc3Rpb25Cb29rXCIsIFwicmVhZFwiLCB1dWlkXSxcclxuICAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkQm9vayxcclxuICAgICAgICB0aGlzLmZhaWx1cmVSZWFkQm9va1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdWNjZXNzUmVhZEJvb2sgPSAocmVzcG9uc2UpID0+IHtcclxuICAgIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHN1Y2Nlc3NSZWFkQm9vaycpO1xyXG4gICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgaWYocmVzcG9uc2UgIT0gbnVsbCB8fCByZXNwb25zZSAhPSB1bmRlZmluZWQpe1xyXG4gICAgICB0aGlzLnFiSXRlbSA9IHJlc3BvbnNlLnF1ZXN0aW9uYm9vaztcclxuICAgICAgdGhpcy5hYkl0ZW0gPSByZXNwb25zZS5hbnN3ZXJib29rO1xyXG4gICAgfVxyXG4gICAvLyBjb25zb2xlLmxvZygncmVhZGluZ1F1ZXN0aW9uIHVzaW5nICcgKyB0aGlzLnFiSXRlbSk7XHJcbiAgICBpZiAodGhpcy5hYkl0ZW0/LlN0YXR1c19fYyA9PSBcIlBlbmRpbmdcIikge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5hYkl0ZW0uQW5zd2Vyc19fciA9PSBudWxsIHx8XHJcbiAgICAgICAgdGhpcy5hYkl0ZW0uQW5zd2Vyc19fci5yZWNvcmRzLmxlbmd0aCA9PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucmVhZFF1ZXN0aW9uKHRoaXMucWJJdGVtLkZpcnN0X1F1ZXN0aW9uX19jKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBQb3B1bGF0ZSB0aGUgZXhpc3RpbmcgYW5zd2Vyc1xyXG4gICAgICAgIHZhciBsYXN0UXVlc3Rpb25JZCA9IFwiXCI7XHJcblxyXG4gICAgICAgIGZvciAodmFyIGFuc09iamVjdCBvZiB0aGlzLmFiSXRlbS5BbnN3ZXJzX19yLnJlY29yZHMpIHtcclxuICAgICAgICAgIGxhc3RRdWVzdGlvbklkID0gYW5zT2JqZWN0LlF1ZXN0aW9uX1JlZl9fYztcclxuXHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucHVzaChhbnNPYmplY3QuUXVlc3Rpb25fUmVmX19jKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmFuc3dlck1hcC5zZXQoYW5zT2JqZWN0LlF1ZXN0aW9uX1JlZl9fYywge1xyXG4gICAgICAgICAgICBxdWVzVmFsdWU6IGFuc09iamVjdC5RdWVzdGlvbl9SaWNoX1RleHRfX2MsXHJcbiAgICAgICAgICAgIGFuc1ZhbHVlOiBhbnNPYmplY3QuQW5zd2VyX0xvbmdfX2MsXHJcbiAgICAgICAgICAgIHF1ZXNJZDogYW5zT2JqZWN0LlF1ZXN0aW9uX1JlZl9fYyxcclxuICAgICAgICAgICAgcVR5cDogYW5zT2JqZWN0LlF1ZXN0aW9uX1R5cGVfX2MsXHJcbiAgICAgICAgICAgIGdyb3VwVGV4dDphbnNPYmplY3QuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5xdWVzdGlvblN0YWNrKVxyXG4gICAgICAgICAgaWYgKGFuc09iamVjdC5RdWVzdGlvbl9UeXBlX19jID09IFwiQm9va1wiKSB7XHJcbiAgICAgICAgICAgIHZhciBhdjEgPSBhbnNPYmplY3QuQW5zd2VyX0xvbmdfX2Muc3BsaXQoXCJAQCMjJCRcIik7XHJcbiAgICAgICAgICAgIC8vIC8vY29uc29sZS5sb2coXCJib29rIGxvZ1wiKTtcclxuXHJcbiAgICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKFwiYm9va2lkXCIgKyBhdjFbMF0pO1xyXG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRzTWFwLnNldChhbnNPYmplY3QuUXVlc3Rpb25fUmVmX19jLCBbXHJcbiAgICAgICAgICAgICAgeyBhdHRhY2htZW50TmFtZTogYXYxWzFdLCBhdHRhY2htZW50SWQ6IGF2MVswXSB9LFxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2codGhpcy5hdHRhY2htZW50c01hcCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGFuc09iamVjdC5RdWVzdGlvbl9UeXBlX19jID09IFwiRmlsZVwiKSB7XHJcbiAgICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKFwiaW5zaWRlIGlmXCIpO1xyXG4gICAgICAgICAgICB2YXIgYXR0TGlzdDtcclxuICAgICAgICAgICAgdmFyIGF0dDtcclxuICAgICAgICAgICAgZm9yICh2YXIgYXR0VmFyIG9mIGFuc09iamVjdC5BbnN3ZXJfTG9uZ19fYy5zcGxpdChcIixcIikpIHtcclxuICAgICAgICAgICAgICB2YXIgYXR0SWROYW1lID0gYXR0VmFyLnNwbGl0KFwiQEAjIyQkXCIpO1xyXG4gICAgICAgICAgICAgIGF0dC5hdHRhY2htZW50TmFtZSA9IGF0dElkTmFtZVsxXTtcclxuICAgICAgICAgICAgICBhdHQuYXR0YWNobWVudElkID0gYXR0SWROYW1lWzBdO1xyXG4gICAgICAgICAgICAgIGF0dExpc3QucHVzaChhdHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudHNNYXAuc2V0KGFuc09iamVjdC5RdWVzdGlvbl9SZWZfX2MsIGF0dExpc3QpO1xyXG4gICAgICAgICAgICAvLyAgLy9jb25zb2xlLmxvZyh0aGlzLmF0dGFjaG1lbnRzTWFwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKTtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuYW5zd2VyTWFwKTtcclxuICAgICAgICAvLyBSZWFkIHRoZSBsYXN0IGFuc3dlcmVkIHF1ZXN0aW9uXHJcbiAgICAgICAgdGhpcy5yZWFkUXVlc3Rpb24obGFzdFF1ZXN0aW9uSWQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWJJdGVtPy5TdGF0dXNfX2MgPT0gXCJDb21wbGV0ZWRcIikge1xyXG4gICAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQoXCJTdW1tYXJ5dXBkYXRlZFwiKTtcclxuICAgICAgLy8gVGVtcG9yYXJ5IEZpeCBmb3IgZHVwbGljYXRlIGFuc3dlcnMgb24gdGhlIHN1bW1hcnkuXHJcbiAgICAgIHRoaXMuc3VtbWFyeSA9IFtdO1xyXG4gICAgICB0aGlzLnBlcmNlbnQgPSAxMDA7XHJcbiAgICAgIHRoaXMucHJvZ3Jlc3NTdHlsZSA9IFwiMTAwJVwiO1xyXG5cclxuICAgICAgZm9yICh2YXIgYW5zd2VyIG9mIHRoaXMuYWJJdGVtLkFuc3dlcnNfX3IucmVjb3Jkcykge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coYW5zd2VyLlF1ZXN0aW9uX0dyb3VwX1RleHRfX2MpO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ3JlcGVhdCcpO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coYW5zd2VyLlF1ZXN0aW9uX1JpY2hfVGV4dF9fYyk7XHJcbiAgICAgICAgdmFyIGFuc3dlcnMgPSB7fTtcclxuICAgICAgICBpZiAoYW5zd2VyLlF1ZXN0aW9uX1R5cGVfX2MgPT0gXCJGaWxlXCIpIHtcclxuICAgICAgICAgIHZhciBmaWxlcyA9IFwiXCI7XHJcbiAgICAgICAgICB2YXIgZkluZGV4ID0gMDtcclxuICAgICAgICAgIHZhciBmaWxlTGlzdCA9IGFuc3dlci5BbnN3ZXJfTG9uZ19fYy5zcGxpdChcIixcIik7XHJcbiAgICAgICAgICBmb3IgKHZhciBmaWxlSWROYW1lIG9mIGZpbGVMaXN0KSB7XHJcbiAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGZpbGVJZE5hbWUuc3BsaXQoXCJAIyRcIik7XHJcbiAgICAgICAgICAgIGlmIChmSW5kZXggPT0gMCkge1xyXG4gICAgICAgICAgICAgIGZpbGVzID0gZmlsZU5hbWVbMV07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgZmlsZXMgPSBmaWxlcyArIFwiICxcIiArIGZpbGVOYW1lWzFdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmSW5kZXgrKztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBhbnN3ZXJzID0ge1xyXG4gICAgICAgICAgICBncm91cFRleHQ6YW5zd2VyLlF1ZXN0aW9uX0dyb3VwX1RleHRfX2MsXHJcbiAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zd2VyLlF1ZXN0aW9uX1JpY2hfVGV4dF9fYyxcclxuICAgICAgICAgICAgYW5zVmFsdWU6IGZpbGVzLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYW5zd2VyLlF1ZXN0aW9uX1R5cGVfX2MgPT0gXCJCb29rXCIpIHtcclxuICAgICAgICAgIC8qICB2YXIgcXVlc05vPTA7XHJcbiAgICAgICAgIGlmKGFuc3dlci5BbnN3ZXJfTG9uZ19fYy5pbmNsdWRlcyhcIkBAIyMkJFwiKSl7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2xpbmUgMTIyMycpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBicUFuc3dlclZhbHVlIG9mIGFuc3dlci5BbnN3ZXJfTG9uZ19fYy5zcGxpdChcIkBAIyMkJFwiKSkge1xyXG4gICAgICAgICAgICAgIHZhciBxdWVzVmFsdWU9YW5zd2VyLlF1ZXN0aW9uX1RleHRfX2Muc3BsaXQoXCJAQCMjJCRcIik7XHJcbiAgICAgICAgICAgICAgYW5zd2VycyA9IHt9O1xyXG4gICAgICAgICAgICAgIGFuc3dlcnMgPSB7XHJcbiAgICAgICAgICAgICAgIC8vIGdyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fVGV4dF9fYyxcclxuICAgICAgICAgICAgICAgIHF1ZXNWYWx1ZTogIFwiJmx0O3AmZ3Q7XCIrIHF1ZXNWYWx1ZVtxdWVzTm9dK1wiJmx0O3AmZ3Q7XCIsXHJcbiAgICAgICAgICAgICAgICBhbnNWYWx1ZTogYnFBbnN3ZXJWYWx1ZSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIHF1ZXNObysrO1xyXG4gICAgICAgICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgfSovXHJcbiAgICAgICAgICBpZihhbnN3ZXIuQW5zd2VyX0xvbmdfX2MuaW5jbHVkZXMoXCJAQCMjJCRcIikpe1xyXG4gICAgICAgICAgICB2YXIgYW5zd2VydmFsdWVzID0gYW5zd2VyLkFuc3dlcl9Mb25nX19jLnNwbGl0KFwiQEAjIyQkXCIpO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCd2YWx1ZScpXHJcbiAgICAgICAgICAgIGFuc3dlcnMgPSB7ICAgICAgXHJcbiAgICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyxcclxuICAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zd2VyLlF1ZXN0aW9uX1JpY2hfVGV4dF9fYyxcclxuICAgICAgICAgICAgIGFuc1ZhbHVlOiBhbnN3ZXJ2YWx1ZXMsXHJcbiAgICAgICAgICAgfTtcclxuICAgICAgICAgICAvL2NvbnNvbGUubG9nKGFuc3dlcnMpXHJcbiAgICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgYW5zd2VycyA9IHsgICAgICBcclxuICAgICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyxcclxuICAgICAgICAgICAgICBxdWVzVmFsdWU6IGFuc3dlci5RdWVzdGlvbl9SaWNoX1RleHRfX2MsXHJcbiAgICAgICAgICAgICAgYW5zVmFsdWU6IGFuc3dlci5BbnN3ZXJfTG9uZ19fYyxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgLy8gdmFyIGFuczEgPSBhbnN3ZXIuQW5zd2VyX0xvbmdfX2Muc3BsaXQoXCJAQCMjJCRcIik7XHJcbiAgICAgICAgICBhbnN3ZXJzID0geyAgICAgIFxyXG4gICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyxcclxuICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnN3ZXIuUXVlc3Rpb25fUmljaF9UZXh0X19jLFxyXG4gICAgICAgICAgICBhbnNWYWx1ZTogYW5zd2VyLkFuc3dlcl9Mb25nX19jLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgZmFpbHVyZVJlYWRCb29rID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBmYWlsdXJlUmVhZEJvb2snKTtcclxuICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHJlYWRBbnN3ZXJib29rID0gKHV1aWQ6IHN0cmluZykgPT4ge1xyXG4gICAgaWYodGhpcy5zZXJ2ID0gXCJhcGlcIikge1xyXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXHJcbiAgICAgICAgdGhpcy50a24sXHJcbiAgICAgICAgW1wiQW5zd2VyQm9va1wiLCBcInJlYWRcIiwgdXVpZF0sXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzQW5zd2VyQm9va1JlYWQsXHJcbiAgICAgICAgdGhpcy5mYWlsdXJlQW5zd2VyQm9va1JlYWRcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcclxuICAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc1wiLFxyXG4gICAgICAgIFtcIkFuc3dlckJvb2tcIiwgXCJyZWFkXCIsIHV1aWRdLFxyXG4gICAgICAgIHRoaXMuc3VjY2Vzc0Fuc3dlckJvb2tSZWFkLFxyXG4gICAgICAgIHRoaXMuZmFpbHVyZUFuc3dlckJvb2tSZWFkXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBzdWNjZXNzQW5zd2VyQm9va1JlYWQgPSAocmVzcG9uc2UpID0+IHtcclxuICAgIGlmICh0aGlzLmFiSXRlbT8uU3RhdHVzX19jID09IFwiQ29tcGxldGVkXCIpIHtcclxuICAgICAgZm9yICh2YXIgYW5zd2VyIG9mIHRoaXMuYWJJdGVtLkFuc3dlcnNfX3IucmVjb3Jkcykge1xyXG4gICAgICAgIHZhciBhdiA9IGFuc3dlci5BbnN3ZXJfTG9uZ19fYy5zcGxpdChcIkBAIyMkJFwiKTtcclxuICAgICAgICB2YXIgYW5zd2VycyA9IHsgcXVlc1ZhbHVlOiBhbnN3ZXIuUXVlc3Rpb25fUmljaF9UZXh0X19jLCBhbnNWYWx1ZTogYXYsIGdyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyB9O1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coYW5zd2VycylcclxuICAgICAgICB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQoXCJTdW1tYXJ5dXBkYXRlZFwiKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIGZhaWx1cmVBbnN3ZXJCb29rUmVhZCA9IChyZXNwb25zZSkgPT4ge1xyXG4gICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVyZWFkJyk7XHJcbiAgICAvL2NvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHJlYWRRdWVzdGlvbiA9ICh1dWlkOiBzdHJpbmcpID0+IHtcclxuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcclxuICAgICAgICB0aGlzLnRrbixcclxuICAgICAgICBbXCJRdWVzdGlvblwiLCBcInJlYWRcIiwgdXVpZF0sXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzUmVhZCxcclxuICAgICAgICB0aGlzLmZhaWx1cmVSZWFkXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXHJcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NcIixcclxuICAgICAgICBbXCJRdWVzdGlvblwiLCBcInJlYWRcIiwgdXVpZF0sXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzUmVhZCxcclxuICAgICAgICB0aGlzLmZhaWx1cmVSZWFkXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1Y2Nlc3NSZWFkID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBzdWNjZXNzUmVhZCBuZXcnKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtKTtcclxuICAgIC8vIFJlc2V0IHRoZSBWYXJpYWJsZXNcclxuXHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0pIHtcclxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XHJcbiAgICAgIHRoaXMuYW5zd2VyV3JhcCA9IG5ldyBBbnN3ZXJXcmFwcGVyKCk7XHJcbiAgICAgIHRoaXMub3B0aW9uVmFsdWVzID0gW107XHJcbiAgICAgIHRoaXMuc3ViUXVlc3Rpb25zID0gW107XHJcbiAgICAgIHRoaXMucmVzZXRGbGFnKHRoaXMucXVlc3Rpb25JdGVtLlR5cGVfX2MpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5xdWVzdGlvbkl0ZW0gPSByZXNwb25zZS5xdWVzdGlvbjtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtKTtcclxuXHJcbiAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS5UeXBlX19jID09PSAnQWxwaGFudW1lcmljJyl7XHJcbiAgICAgIHRoaXMuc3BsQ0NCYWNrQ2xpY2sgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5JZDtcclxuICAgIHRoaXMuaGFuZGxlUGFnZS5lbWl0KHRoaXMucXVlc3Rpb25JdGVtLlRyYWNraW5nX0lEX19jKTtcclxuICAgIC8vIEhhbmRsZSB0aGUgc3ViUXVlc3Rpb24gb3B0aW9uc1xyXG4gICAgaWYgKHJlc3BvbnNlLnNxT3B0aW9ucykge1xyXG4gICAgICAvL3ZhciBuZXdSZWNvcmRzID0gW107XHJcbiAgICAgIGZvciAodmFyIHEgb2YgdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMpIHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKHEuTmFtZSk7XHJcbiAgICAgICAgdmFyIHNxID0gcmVzcG9uc2Uuc3FPcHRpb25zW3EuSWRdO1xyXG4gICAgICAgIGlmIChzcSkge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnZm91bmQgb3B0aW9ucyBmb3Igc3VicXVlc3Rpb24gJyArIHEuTmFtZSk7XHJcbiAgICAgICAgICBpZiAoIXEuUXVlc3Rpb25fT3B0aW9uc19fcikge1xyXG4gICAgICAgICAgICBxLlF1ZXN0aW9uX09wdGlvbnNfX3IgPSBzcS5RdWVzdGlvbl9PcHRpb25zX19yO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9jZXNzUXVlc3Rpb24oKTtcclxuICAgIHRoaXMuaW5uZXJodG1sID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXHJcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtLkFkZGl0aW9uYWxfUmljaF9fY1xyXG4gICAgKTtcclxuICAgIHRoaXMudHJhY2tJZCgpO1xyXG4gIH07XHJcblxyXG4gIHRyYWNrSWQoKSB7XHJcbiAgICB2YXIgcXRyYWNrSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5UcmFja2luZ19JRF9fYztcclxuICAgIC8vY29uc29sZS5sb2coJ3RyYWNrSWQtcXVlc3Rpb24nK3F0cmFja0lkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmFpbHVyZVJlYWQgPSAocmVzcG9uc2UpID0+IHtcclxuICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlcmVhZCcpO1xyXG4gICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBzYXZlQW5zd2VyID0gKCkgPT4ge1xyXG4gICAgLy8gU2V0IHRoZSBBbnN3ZXIgTnVtYmVyIGJhc2VkIG9uIHRoZSBRdWVzdGlvbiBTdGFjayBMZW5ndGhcclxuICAgIGlmICh0aGlzLmlucFZhbHVlICE9IFwiLlwiKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFF1ZXN0aW9uSWQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hbnN3ZXJXcmFwLmFuc051bWJlciA9IHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggKyAxO1xyXG5cclxuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcclxuICAgICAgICB0aGlzLnRrbixcclxuICAgICAgICBbXCJBbnN3ZXJcIiwgXCJjcmVhdGVcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5hbnN3ZXJXcmFwKV0sXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzU2F2ZSxcclxuICAgICAgICB0aGlzLmZhaWx1cmVTYXZlXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXHJcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NcIixcclxuICAgICAgICBbXCJBbnN3ZXJcIiwgXCJjcmVhdGVcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5hbnN3ZXJXcmFwKV0sXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzU2F2ZSxcclxuICAgICAgICB0aGlzLmZhaWx1cmVTYXZlXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgaHRtbERlY29kZShpbnB1dCkge1xyXG4gICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaW5wdXQsIFwidGV4dC9odG1sXCIpO1xyXG4gICAgcmV0dXJuIGRvYy5kb2N1bWVudEVsZW1lbnQudGV4dENvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1Y2Nlc3NTYXZlID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgIC8vdGhpcy5hYkl0ZW0gPSByZXNwb25zZS5hbnN3ZXJib29rO1xyXG4gICAgICB0aGlzLmFuc3dlck1hcC5zZXQocmVzcG9uc2UuYW5zd2VyLnF1ZXNJZCwgcmVzcG9uc2UuYW5zd2VyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvci5lcnJvck1zZyA9IHJlc3BvbnNlLmVycm9yLmVycm9yTXNnO1xyXG4gICAgfVxyXG4gICAgaWYoIXRoaXMuYmFja0J1dHRvbkZsYWcpe1xyXG4gICAgICB0aGlzLm5leHQoKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIGZhaWx1cmVTYXZlID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZVNhdmUnKTtcclxuICAgIC8vY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgcHJvY2Vzc1F1ZXN0aW9uID0gKCkgPT4ge1xyXG4gICAgLy8gY29uc29sZS5sb2coJ0luc2lkZSB0aGUgcHJvY2Vzc1F1ZXN0aW9uJyk7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnc3BsQ0NCYWNrQ2xpY2sgPSAnK3RoaXMuc3BsQ0NCYWNrQ2xpY2spO1xyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvblN0YWNrKTtcclxuICAgIC8vY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xyXG4gICAgdGhpcy5wb3AgPSB0cnVlO1xyXG5cclxuICAgIC8vIGlmKCF0aGlzLmJhY2spe1xyXG4gICAgLy8gICB0aGlzLnF1ZXN0aW9uTmFtZS5wdXNoKHRoaXMucXVlc3Rpb25JdGVtLk5hbWUpXHJcbiAgICAvLyB9XHJcblxyXG4gICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYyA9PT0gdHJ1ZSkge1xyXG4gICAgICBpZiAoIXRoaXMuYmFjaykge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25OYW1lLnB1c2godGhpcy5xdWVzdGlvbkl0ZW0uTmFtZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5iYWNrID0gZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uTmFtZVswXSA9PT0gdGhpcy5xdWVzdGlvbk5hbWVbMV0pIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wb3AoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jdXJyZW50TmFtZSA9IHRoaXMucXVlc3Rpb25JdGVtLk5hbWU7XHJcbiAgICAgIHRoaXMucGF0aHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbk5hbWUuaW5kZXhPZih0aGlzLmN1cnJlbnROYW1lKTtcclxuICAgICAgdGhpcy5wb3NzaWJpbGl0aWVzID0gdGhpcy5xYkl0ZW0uUG9zc2liaWxpdGllc19fYztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnM7XHJcbiAgICB0aGlzLmRheSgpO1xyXG4gICAgLy9jb25zb2xlLmxvZygncHJvY2Vzc2luZyBxdWVzdGlvbiAnICsgdGhpcy5xdWVzdGlvbkl0ZW0uTmFtZSArICcgZXhpc3RpbmcgYW5zd2VycyBhcmUgJyArIHRoaXMuYW5zd2VyTWFwLnNpemUpOyAvLyA9PiAnICsgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVzdGlvbkl0ZW0pKTtcclxuXHJcbiAgICAvLyBTZXQgdGhlIEZsYWdzIHRvIHNob3cgcmlnaHQgZmllbGRzXHJcbiAgICB0aGlzLnNldEZsYWcodGhpcy5xdWVzdGlvbkl0ZW0uVHlwZV9fYyk7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdBZnRlciB0aGUgc2V0RmxhZyBtZXRob2QgZHRGbGFnID0gJyt0aGlzLmR0RmxhZyk7XHJcblxyXG4gICAgLy8gQ2hlY2sgdGhlIGV4aXN0aW5nIGFuc3dlciBmcm9tIGFuc3dlck1hcFxyXG4gICAgaWYgKHRoaXMuYW5zd2VyTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpIHtcclxuICAgICAgLy8gIC8vY29uc29sZS5sb2coXCJleGlzdGluZyBhbnN3ZXIgZm91bmQgZm9yIHRoaXMucXVlc3Rpb25JdGVtLk5hbWVcIik7XHJcbiAgICAgIHZhciBlQW5zd2VyID0gdGhpcy5hbnN3ZXJNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKTtcclxuICAgICAgLy8gR2V0IHRoZSBleGlzdGluZyBhbnN3ZXIgZnJvbSB0aGUgTWFwXHJcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBlQW5zd2VyLmFuc1ZhbHVlO1xyXG4gICAgICAvL2NvbnNvbGUubG9nKCdpbnBWYWx1ZSBoYXMgYmVlbiBzZXQgdG8gJyArIHRoaXMuaW5wVmFsdWUpO1xyXG4gICAgICBpZiAodGhpcy5hdHRhY2htZW50c01hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uSWQpKSB7XHJcbiAgICAgICAgdGhpcy5hdHRhY2htZW50cyA9IHRoaXMuYXR0YWNobWVudHNNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIHJlbW92aW5nIGF0dGFjaG1lbnQgYXJyYXknKTtcclxuICAgICAgdGhpcy5hdHRhY2htZW50cyA9IFtdO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZSk7XHJcbiAgICBpZih0aGlzLnNwbENDQmFja0NsaWNrICYmIHRoaXMuaW5wVmFsdWUgJiYgdGhpcy5pbnBWYWx1ZS5pbmNsdWRlcygnRVMnKSl7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGlmIGNvbmQnKTtcclxuICAgICAgdGhpcy5zcGxDQ0JhY2tDbGljayA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZS5yZXBsYWNlKCdFUycsJycpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoZWNrYm94RmxhZykge1xyXG4gICAgICAvLyBTZXQgdGhlIE9wdGlvbnMgZm9yIENoZWNrYm94XHJcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyh0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHMpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmJvb2tGbGFnKSB7XHJcbiAgICAgIC8vY29uc29sZS5sb2coJ0luaXNlIHRoZSBleHBlY3RlZCBib29rRmxhZyBjb25kJyk7XHJcbiAgICAgIC8vY29uc29sZS5sb2coJ2R0RmxhZyA9ICcrdGhpcy5kdEZsYWcpO1xyXG4gICAgICB0aGlzLnNldFN1YlF1ZXN0aW9ucyh0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMubGlzdEZsYWcpIHtcclxuICAgICAgLy8gU2V0IHRoZSBMb2NhbFN1YlF1ZXN0aW9uc1xyXG4gICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGxpc3QgZmxhZycpO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcyk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuYWJJdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKTtcclxuICAgICAgaWYoIXRoaXMubG9jYWxTdWJRTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpe1xyXG4gICAgICAgIHRoaXMuc2V0U3ViUXVlc3Rpb25zKHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKTtcclxuICAgICAgfSBcclxuICAgIH0gZWxzZSBpZiAodGhpcy5kdEZsYWcpIHtcclxuICAgICAgLy9jb25zb2xlLmxvZygnSW5pc2UgdGhlIHVuZXhwZWN0ZWQgZHRGbGFnIGNvbmQnKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBcIlwiO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gXCJcIjtcclxuICAgICAgdGhpcy5zZWxEYXRlID0gXCJcIjtcclxuICAgICAgLy8gMjAyMS01LTE2VDAwOjAwXHJcbiAgICAgIGlmICh0aGlzLmRhdGVNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLklkKSkge1xyXG4gICAgICAgIHRoaXMuc2VsRGF0ZSA9IHRoaXMuZGF0ZU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkaG91ck1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uSWQpKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSB0aGlzLnNlbGVjdGVkaG91ck1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkbWludXRlTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gdGhpcy5zZWxlY3RlZG1pbnV0ZU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT09IHRydWUpIHtcclxuICAgICAgICB0aGlzLmhvdXJzLnB1c2goXHJcbiAgICAgICAgICBcIjEzXCIsXHJcbiAgICAgICAgICBcIjE0XCIsXHJcbiAgICAgICAgICBcIjE1XCIsXHJcbiAgICAgICAgICBcIjE2XCIsXHJcbiAgICAgICAgICBcIjE3XCIsXHJcbiAgICAgICAgICBcIjE4XCIsXHJcbiAgICAgICAgICBcIjE5XCIsXHJcbiAgICAgICAgICBcIjIwXCIsXHJcbiAgICAgICAgICBcIjIxXCIsXHJcbiAgICAgICAgICBcIjIyXCIsXHJcbiAgICAgICAgICBcIjIzXCIsXHJcbiAgICAgICAgICBcIjAwXCJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5ob3VycyA9IHRoaXMuaG91cnMuc2xpY2UoMCwgMTIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmR0RmxhZyAmJiB0aGlzLmlucFZhbHVlKSB7XHJcbiAgICAgICAgdmFyIGR0VmFsID0gdGhpcy5pbnBWYWx1ZS5zcGxpdChcIlRcIik7IFxyXG4gICAgICAgIHZhciBkdHZhbDAgPSB0aGlzLmlucFZhbHVlLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICB0aGlzLmlucFZhbHVlID0gZHRWYWxbMF07XHJcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IGR0dmFsMFswXTtcclxuXHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBkdFZhbFsxXTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9IGR0dmFsMFsxXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uSXNfRGF0ZV9CYWNrd2FyZF9fYyB8fFxyXG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLklzX0RhdGVfRm9yd2FyZF9fY1xyXG4gICAgICApIHtcclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uSXNfRGF0ZV9CYWNrd2FyZF9fYyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVTaW5jZSA9IHtcclxuICAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxyXG4gICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcclxuICAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSArIDEsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uSXNfRGF0ZV9Gb3J3YXJkX19jID09PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMuZGlzYWJsZVVudGlsID0ge1xyXG4gICAgICAgICAgICB5ZWFyOiB0aGlzLnRvZGF5LmdldEZ1bGxZZWFyKCksXHJcbiAgICAgICAgICAgIG1vbnRoOiB0aGlzLnRvZGF5LmdldE1vbnRoKCkgKyAxLFxyXG4gICAgICAgICAgICBkYXk6IHRoaXMudG9kYXkuZ2V0RGF0ZSgpLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5maWxlRmxhZykge1xyXG4gICAgICB0aGlzLmZpbGVVSSgpO1xyXG4gICAgICAvLyBsb2dpY1xyXG4gICAgICB0aGlzLmFsbG93ZWRGaWxlRXh0ZW5zaW9uID1cclxuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5BbGxvd2VkX0ZpbGVfRXh0ZW5zaW9uc19fYy5zcGxpdChcIjtcIik7XHJcbiAgICAgIC8vY29uc29sZS5sb2codGhpcy5hbGxvd2VkRmlsZUV4dGVuc2lvbik7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHNldEZsYWcodHlwKSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgc2V0RmxhZyBmb3IgJyArIHR5cCk7XHJcblxyXG4gICAgaWYgKHR5cCkge1xyXG4gICAgICAvLyBTZXQgdGhlIEZsYWdzXHJcbiAgICAgIGlmICh0eXAgPT0gXCJUZXh0XCIpIHtcclxuICAgICAgICB0aGlzLnRleHRGbGFnID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy90aGlzLm51bWJlckZsYWcgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIk51bWJlclwiKSB7XHJcbiAgICAgICAgdGhpcy5udW1iZXJGbGFnID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJBbHBoYU51bWVyaWNcIikge1xyXG4gICAgICAgIHRoaXMuYWxwaGFudW1lcmljRmxhZyA9IHRydWU7XHJcbiAgICAgICAgLyppZih0aGlzLmlucFZhbHVlLmxlbmd0aCA9PT0gMCl7XHJcbiAgICAgICAgICB0aGlzLmlucFZhbHVlPSdFUydcclxuICAgICAgICB9Ki9cclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJFbWFpbFwiKSB7XHJcbiAgICAgICAgdGhpcy5lbWFpbEZsYWcgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkZpbGVcIikge1xyXG4gICAgICAgIHRoaXMuZmlsZUZsYWcgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVUaW1lXCIpIHtcclxuICAgICAgICB0aGlzLmR0RmxhZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50aW1lRmxhZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kYXRlRmxhZyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGV4dEFyZWFcIikge1xyXG4gICAgICAgIHRoaXMudGFGbGFnID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJSYWRpb1wiKSB7XHJcbiAgICAgICAgdGhpcy5yYWRpb0ZsYWcgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRyb3Bkb3duXCIpIHtcclxuICAgICAgICB0aGlzLmRyb3Bkb3duRmxhZyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiQ2hlY2tib3hcIikge1xyXG4gICAgICAgIHRoaXMuY2hlY2tib3hGbGFnID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJCb29rXCIpIHtcclxuICAgICAgICB0aGlzLmJvb2tGbGFnID0gdHJ1ZTtcclxuICAgICAgfWVsc2UgaWYgKHR5cCA9PSAnTGlzdCcpe1xyXG4gICAgICAgIHRoaXMubGlzdEZsYWcgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRpbWVcIikge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgVGltZSBjb25kJyk7XHJcbiAgICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudGltZUZsYWcgPSB0cnVlO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kdEZsYWcpO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVcIikge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgRGF0ZSBjb25kJyk7XHJcbiAgICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGF0ZUZsYWcgPSB0cnVlO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kdEZsYWcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldEZsYWcodHlwKSB7XHJcbiAgICBpZiAodHlwKSB7XHJcbiAgICAgIC8vIFNldCB0aGUgRmxhZ3NcclxuICAgICAgaWYgKHR5cCA9PSBcIlRleHRcIikge1xyXG4gICAgICAgIHRoaXMudGV4dEZsYWcgPSBmYWxzZTtcclxuICAgICAgICAvL3RoaXMubnVtYmVyRmxhZyA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIk51bWJlclwiKSB7XHJcbiAgICAgICAgdGhpcy5udW1iZXJGbGFnID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiQWxwaGFudW1lcmljXCIpIHtcclxuICAgICAgICB0aGlzLmFscGhhbnVtZXJpY0ZsYWcgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJFbWFpbFwiKSB7XHJcbiAgICAgICAgdGhpcy5lbWFpbEZsYWcgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJGaWxlXCIpIHtcclxuICAgICAgICB0aGlzLmZpbGVGbGFnID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiRGF0ZVRpbWVcIikge1xyXG4gICAgICAgIHRoaXMuZHRGbGFnID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kYXRlRmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudGltZUZsYWcgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJUZXh0QXJlYVwiKSB7XHJcbiAgICAgICAgdGhpcy50YUZsYWcgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJSYWRpb1wiKSB7XHJcbiAgICAgICAgdGhpcy5yYWRpb0ZsYWcgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJEcm9wZG93blwiKSB7XHJcbiAgICAgICAgdGhpcy5kcm9wZG93bkZsYWcgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJDaGVja2JveFwiKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja2JveEZsYWcgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJCb29rXCIpIHtcclxuICAgICAgICB0aGlzLmJvb2tGbGFnID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwID09ICdMaXN0Jyl7XHJcbiAgICAgICAgdGhpcy5saXN0RmxhZyA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRpbWVcIikge1xyXG4gICAgICAgIHRoaXMuZHRGbGFnID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50aW1lRmxhZyA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVcIikge1xyXG4gICAgICAgIHRoaXMuZHRGbGFnID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kYXRlRmxhZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRPcHRpb25zKHJlY29yZHMpIHtcclxuICAgIGZvciAodmFyIG9wdCBvZiByZWNvcmRzKSB7XHJcbiAgICAgIHZhciBvdiA9IG5ldyBPcHRpb25WYWx1ZSgpO1xyXG4gICAgICBvdi5JZCA9IG9wdC5JZDtcclxuICAgICAgb3YuTmFtZSA9IG9wdC5OYW1lO1xyXG4gICAgICBvdi5WYWx1ZV9fYyA9IG9wdC5WYWx1ZV9fYztcclxuICAgICAgb3YuTmV4dF9RdWVzdGlvbl9fYyA9IG9wdC5OZXh0X1F1ZXN0aW9uX19jO1xyXG4gICAgICBvdi5jaGVja2VkID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSAmJlxyXG4gICAgICAgIHRoaXMuaW5wVmFsdWUuc3BsaXQoXCJAQCMjJCRcIikuaW5jbHVkZXMob3B0LlZhbHVlX19jKVxyXG4gICAgICApIHtcclxuICAgICAgICBvdi5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5vcHRpb25WYWx1ZXMucHVzaChvdik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBDYXB0dXJlIGFuZCBQcm9jZXNzIENoaWxkIEV2ZW50XHJcbiAgY2hpbGRFdmVudENhcHR1cmUoZXZlbnQsIHF1ZXM/OmFueSkge1xyXG4gICAgY29uc29sZS5sb2coJ2luc2lkZSBjaGlsZEV2ZW50Q2FwdHVyZSAnKTtcclxuICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcclxuICAgIHRoaXMuY2hhbmdlU2VydmljZS5hbm5vdW5jZUNoYW5nZShldmVudCk7XHJcbiAgICAvL3F1ZXMuaW5wdXQgPSBldmVudDsgLy8gaGVyZSB3aGVuIHVzaW5nIHRoZSBuZy1zZWxlY3QgZ290IGV2ZW50IGFzIHZhbHVlXHJcbiAgfVxyXG5cclxuICBzZXRTdWJRdWVzdGlvbnMocmVjb3Jkcykge1xyXG4gICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBzZXRTdWJRdWVzdGlvbnMnKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlY29yZHMpO1xyXG4gICAgdmFyIHFhTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZSk7XHJcbiAgICBpZiAodGhpcy5pbnBWYWx1ZSkge1xyXG4gICAgICB2YXIgYUluZGV4ID0gMDtcclxuICAgICAgLy8gc2VhcmNoIGNoYW5nZWQgYXMgc2VtaSBjb2xvbiBiZWNhdXNlIG9mIGFkZHJlc3MgY29udGFpbnMgY29tbWEgXHJcbiAgICAgIGlmICgodGhpcy5pbnBWYWx1ZS5zZWFyY2goXCI7IFwiKSA9PSAtMSkpIHtcclxuICAgICAgIC8vIGNvbnN0IHdpdGhvdXRBbnN3ZXJTdHJpbmcgPSB0aGlzLmlucFZhbHVlLnJlcGxhY2UoXCJhbnN3ZXJTdHJpbmc6IFwiLCBcIlwiKTsgLy9yZW1vdmUgdGhlIGFuc3dlciBzdHJpbmdcclxuICAgICAgIC8vIHRoaXMuaW5wVmFsdWUgPSB3aXRob3V0QW5zd2VyU3RyaW5nO1xyXG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgJ0BAIyMkJCcgO1xyXG4gICAgICAgIGZvciAodmFyIGFuc1N0ciBvZiB0aGlzLmlucFZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpKSB7XHJcbiAgICAgICAgICBhSW5kZXgrKztcclxuICAgICAgICAgIHFhTWFwLnNldChhSW5kZXgsIGFuc1N0cik7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdTZXR0aW5nIHRoZSBxYU1hcCBmb3IgJyArIGFJbmRleCArICcgd2l0aCAnICsgYW5zU3RyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yICh2YXIgYW5zU3RyIG9mIHRoaXMuaW5wVmFsdWUuc3BsaXQoXCI7IFwiKSkge1xyXG4gICAgICAgICAgYUluZGV4Kys7XHJcbiAgICAgICAgICBxYU1hcC5zZXQoYUluZGV4LCBhbnNTdHIpO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnU2V0dGluZyB0aGUgcWFNYXAgJyArIGFJbmRleCArICcgd2l0aCAnICsgYW5zU3RyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKCdhZnRlciBzZXR0aW5nIHZhbHVlcyBmcm9tIGlucHZhbHVlIHFhIG1hcCBhcmUnKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHFhTWFwKTtcclxuXHJcbiAgICBmb3IgKHZhciBxdWVzIG9mIHJlY29yZHMpIHtcclxuICAgICAgaWYgKHF1ZXMuVHlwZV9fYyA9PSBcIkZpbGVcIikge1xyXG4gICAgICAgIHRoaXMudmFsdWVOYW1lMSA9IHF1ZXMuQWxsb3dlZF9GaWxlX0V4dGVuc2lvbnNfX2M7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnZhbHVlTmFtZTEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgYW5zID0gJyc7XHJcbiAgICAgIGlmIChxYU1hcC5oYXMocXVlcy5RdWVzdGlvbl9Ob19fYykpIHtcclxuICAgICAgICAgIHF1ZXMuaW5wdXQgPSBxYU1hcC5nZXQocXVlcy5RdWVzdGlvbl9Ob19fYyk7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnYWZ0ZXIgZmV0Y2hpbmcgbWFwIHZhbHVlcycpO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcy5pbnB1dCk7XHJcbiAgICAgICAgICBpZihxdWVzLmlucHV0LmluZGV4T2YoJyQkQEAjIycpID4gMCl7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdhbnN3ZXIgc3VwcG9zZWQgdG8gYmUgdHJpbW1lZCcpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVzLmlucHV0KTtcclxuICAgICAgICAgICAgYW5zID0gcXVlcy5pbnB1dC5zdWJzdHJpbmcocXVlcy5pbnB1dC5pbmRleE9mKCckJEBAIyMnKSs2LHF1ZXMuaW5wdXQubGVuZ3RoKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYW5zKTtcclxuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IHF1ZXMuaW5wdXQuc3Vic3RyaW5nKDAscXVlcy5pbnB1dC5pbmRleE9mKCckJEBAIyMnKSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXMuaW5wdXQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIGlmICgocXVlcy5UeXBlX19jID09PSBcIkRhdGVcIikgJiYgKHF1ZXMuSXNfRGF0ZV9CYWNrd2FyZF9fYyB8fCBxdWVzLklzX0RhdGVfRm9yd2FyZF9fYykpIHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGRhdGUgYmFja3dhcmQvZm9yd2FyZCBjb25kJyk7XHJcbiAgICAgICAgaWYgKHF1ZXMuSXNfRGF0ZV9CYWNrd2FyZF9fYyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBJc19EYXRlX0JhY2t3YXJkX19jJyk7XHJcbiAgICAgICAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMuZGlzYWJsZVNpbmNlID0ge1xyXG4gICAgICAgICAgICB5ZWFyOiB0aGlzLnRvZGF5LmdldEZ1bGxZZWFyKCksXHJcbiAgICAgICAgICAgIG1vbnRoOiB0aGlzLnRvZGF5LmdldE1vbnRoKCkgKyAxLFxyXG4gICAgICAgICAgICBkYXk6IHRoaXMudG9kYXkuZ2V0RGF0ZSgpICsgMSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChxdWVzLklzX0RhdGVfRm9yd2FyZF9fYyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBJc19EYXRlX0ZvcndhcmRfX2MnKTtcclxuICAgICAgICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucy5kaXNhYmxlVW50aWwgPSB7XHJcbiAgICAgICAgICAgIHllYXI6IHRoaXMudG9kYXkuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgICAgICAgbW9udGg6IHRoaXMudG9kYXkuZ2V0TW9udGgoKSArIDEsXHJcbiAgICAgICAgICAgIGRheTogdGhpcy50b2RheS5nZXREYXRlKCksXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3ViUXVlc3Rpb25zLnB1c2gocXVlcyk7XHJcbiAgICAgIGZvcih2YXIgaT0wOyBpPHRoaXMuc3ViUXVlc3Rpb25zLmxlbmd0aDtpKyspe1xyXG4gICAgICAgIC8vIHRvIHNob3cvaGlkZSB0aGUgZGVwZW5kZW50IGRyb3Bkb3duIG9ubHkgZmllbGQgdXNpbmcgdGhlIGRyb3BEb3duT25seSBib29sZWFuXHJcbiAgICAgICAgaWYodGhpcy5zdWJRdWVzdGlvbnNbaV0uU2l6ZV9fYyA9PSA0KXtcclxuICAgICAgICAgIHRoaXMuc3ViUXVlc3Rpb25zW2ldLmRyb3BEb3duT25seSA9IHRydWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5kcm9wRG93bk9ubHkgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYoYW5zICE9ICcnKXtcclxuICAgICAgICBmb3IodmFyIGFuIG9mIChhbnMuc3BsaXQoJyQkQEAjIycpKSl7XHJcbiAgICAgICAgICB2YXIgc1EgPSBuZXcgUXVlc3Rpb24oKTtcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oc1EscXVlcyk7XHJcbiAgICAgICAgICBzUS5pbnB1dCA9IGFuO1xyXG4gICAgICAgICAgdGhpcy5zdWJRdWVzdGlvbnMucHVzaChzUSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy52YWx1ZU5hbWUxICE9IG51bGwgJiYgdGhpcy52YWx1ZU5hbWUxLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5ib29rRmxhZ0FjY2VwdCA9IHRoaXMudmFsdWVOYW1lMS5zcGxpdChcIjtcIik7XHJcbiAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdWJRdWVzdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdHJ1Y3RMb2NhbFN1YlF1ZXN0aW9uKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgb3B0aW9uQ2hhbmdlKHNlbFZhbHVlKSB7XHJcbiAgICBsZXQgcmFkaW9UcmFja2luZ0lkOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgZm9yICh2YXIgb3B0IG9mIHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkcykge1xyXG4gICAgICAvL2NvbnNvbGUubG9nKCdvcHRpb25DaGFuZ2UgVHJhY2tpbmdJZCcrb3B0LlRyYWNraW5nX0lEX19jKTtcclxuICAgICAgaWYgKG9wdC5WYWx1ZV9fYyA9PSBzZWxWYWx1ZSkge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBpZicrb3B0LlRyYWNraW5nX0lEX19jKVxyXG4gICAgICAgIHJhZGlvVHJhY2tpbmdJZCA9IG9wdC5UcmFja2luZ19JRF9fYztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdChyYWRpb1RyYWNraW5nSWQpO1xyXG4gICAgdGhpcy5jbGVhckVycm9yKCk7XHJcbiAgICAvLyAvL2NvbnNvbGUubG9nKCdpbnNpZGUgb3B0aW9uQ2hhbmdlIHVzaW5nICcgKyBzZWxWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5pbnBWYWx1ZSA9IHNlbFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJFcnJvcigpIHtcclxuICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvcikge1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhckxvY2FsU3ViUXVlc0Vycm9yKHF1ZXNJZCkge1xyXG4gICAgcXVlc0lkLmVycm9yID0gbnVsbDtcclxuICB9XHJcblxyXG4gIGlucHV0VmFsaWRhdGUoZSkge1xyXG4gICAgdmFyIGtleUNvZGUgPSBlLmtleUNvZGUgfHwgZS53aGljaDtcclxuICAgIC8vIE9ubHkgQVNDSUkgY2hhcmFjdGVyIGluIHRoYXQgcmFuZ2UgYWxsb3dlZFxyXG4gICAgdmFyIEFTQ0lJQ29kZSA9IChlLndoaWNoKSA/IGUud2hpY2ggOiBlLmtleUNvZGU7XHJcbiAgICBpZiAoQVNDSUlDb2RlID4gMzEgJiYgKEFTQ0lJQ29kZSA8IDQ4IHx8IEFTQ0lJQ29kZSA+IDU3KSl7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1lbHNle1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIENDT25DaGFuZ2UoaW5wVmFsdWU6IHN0cmluZykge1xyXG5cclxuICAgICAgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gNykge1xyXG4gICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDEyKSB7XHJcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gMTcpIHtcclxuICAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAyMikge1xyXG4gICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XHJcbiAgICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBpc05vdFZhbGlkQWNjTnVtYmVyKHM6IHN0cmluZykge1xyXG4gICAgcyA9IHMucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTtcclxuICAgIHMgPSAnRVMnICsgcztcclxuICAgIHZhciBpc05vdFZhbGlkU3RyID0gZmFsc2U7XHJcbiAgICBpZiAocy5sZW5ndGggPT0gMjQpIHtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGkgPD0gMSAmJiAvW2EtekEtWl0vLnRlc3Qocy5jaGFyQXQoaSkpKSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVmFsaWQgY2hhcjogXCIgKyBzLmNoYXJBdChpKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpID4gMSAmJiAvWzAtOV0vLnRlc3Qocy5jaGFyQXQoaSkpKSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVmFsaWQgbnVtZXJpYzogXCIgKyBzLmNoYXJBdChpKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlzTm90VmFsaWRTdHIgPSB0cnVlO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk5vdCBhIHZhbGlkIGNoYXJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpc05vdFZhbGlkU3RyID0gdHJ1ZTtcclxuICAgICAgLy9jb25zb2xlLmxvZyhcIk5vdCBhIHZhbGlkIGFjYyBudW1iZXJcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNOb3RWYWxpZFN0cjtcclxuICB9XHJcblxyXG4gIGNsZWFyU1FFcnJvcihxdWVzSWQpIHtcclxuICAgIHZhciBzcUxpc3QgPSB0aGlzLnN1YlF1ZXN0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uSWQgPT0gcXVlc0lkKTtcclxuICAgIGZvciAodmFyIHNxIG9mIHNxTGlzdCkge1xyXG4gICAgICBzcS5lcnJvciA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGxvYWRGaWxlKGV2ZW50LHF1ZXM/OmFueSkge1xyXG4gICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIHVwbG9hZCcpO1xyXG4gICAgdGhpcy5jbGVhckVycm9yKCk7XHJcbiAgICB0aGlzLmZpbGVUeXBlSW5jb3JyZWN0ID0gZmFsc2U7XHJcbiAgICB2YXIgbG9jYWwgPSB0aGlzO1xyXG4gICAgbG9jYWwuYXR0YWNobWVudCA9IGV2ZW50LnRhcmdldC5maWxlc1swXTtcclxuICAgIC8vIFZhbGlkYXRlIHRoZSBmaWxlIGV4dGVuc2lvblxyXG4gICAgLy9jb25zb2xlLmxvZyhsb2NhbC5hdHRhY2htZW50KTtcclxuICAgIGxldCBmaWxlTmFtZVdpdGhUeXBlOiBzdHJpbmcgPVxyXG4gICAgICBsb2NhbC5hdHRhY2htZW50ICYmIGxvY2FsLmF0dGFjaG1lbnQubmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKFxyXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5qcGdcIikgJiZcclxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIucG5nXCIpICYmXHJcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLnBkZlwiKSAmJlxyXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5qcGVnXCIpICYmXHJcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLmhlaWNcIikgJiZcclxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuaGVpZlwiKSAmJlxyXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5KUEdcIikgJiZcclxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuUE5HXCIpICYmXHJcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLlBERlwiKSAmJlxyXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5KUEVHXCIpICYmXHJcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLkhFSUNcIikgJiZcclxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSEVJRlwiKVxyXG4gICAgKSB7XHJcbiAgICAgIGxvY2FsLmZpbGVUeXBlSW5jb3JyZWN0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIC8vIFJldHVybiB3aGVuIHRoZSBmaWxlIHR5cGUgaXMgaW5jb3JyZWN0XHJcbiAgICBpZiAobG9jYWwuZmlsZVR5cGVJbmNvcnJlY3QpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVDb250ZW50OiBhbnk7XHJcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICBmaWxlQ29udGVudCA9IHJlYWRlci5yZXN1bHQ7XHJcbiAgICAgIGxvY2FsLmZpbGVFeGNlZWRlZExpbWl0ID0gbG9jYWwuYXR0YWNobWVudC5zaXplID4gMzI0Mjg4MDsgLy9WYWxpZGF0aW5nIGZpbGUgc2l6ZVxyXG4gICAgICAvLyBVcGxvYWQgdGhlIGZpbGUgdG8gU2FsZXNmb3JjZSB3aGVuIHRoZSBsaW1pdCBpcyB3aXRoaW4gcmFuZ2VcclxuICAgICAgaWYgKCFsb2NhbC5maWxlRXhjZWVkZWRMaW1pdCkge1xyXG4gICAgICAgIGxldCBmaWxlV3JhcHBlciA9IG5ldyBBdHRhY2htZW50V3JhcHBlcigpO1xyXG4gICAgICAgIGZpbGVXcmFwcGVyLnBhcmVudElkID0gbG9jYWwuYWJJdGVtLklkO1xyXG4gICAgICAgIGZpbGVXcmFwcGVyLmZpbGVOYW1lID0gbG9jYWwuYXR0YWNobWVudC5uYW1lO1xyXG4gICAgICAgIGZpbGVXcmFwcGVyLmZpbGVDb250ZW50ID0gZmlsZUNvbnRlbnQ7XHJcbiAgICAgICAgbG9jYWwuY3JlYXRlQXR0YWNobWVudChmaWxlV3JhcHBlcik7XHJcbiAgICAgICAgcXVlcy5pbnB1dCA9IGZpbGVXcmFwcGVyLmZpbGVOYW1lO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy5zcGlubmVyLnNob3codGhpcy5zcGlubmVyTmFtZSk7XHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChldmVudC50YXJnZXQuZmlsZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdWNjZXNzQXR0YWNobWVudENyZWF0ZSA9IChyZXNwb25zZSkgPT4ge1xyXG4gICAgbGV0IGNyZWF0ZWRBdHRhY2htZW50OiBBdHRhY2htZW50ID0gbmV3IEF0dGFjaG1lbnQoXHJcbiAgICAgIHJlc3BvbnNlLmF0dGFjaG1lbnRJZCxcclxuICAgICAgcmVzcG9uc2UuYXR0YWNobWVudE5hbWUsXHJcbiAgICAgIHRoaXMuYXR0YWNobWVudC5sYXN0TW9kaWZpZWREYXRlXHJcbiAgICApO1xyXG4gICAgdGhpcy5hdHRhY2htZW50cy5wdXNoKGNyZWF0ZWRBdHRhY2htZW50KTtcclxuICAgIHRoaXMuYXR0YWNobWVudHNNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLCB0aGlzLmF0dGFjaG1lbnRzKTtcclxuICAgIHRoaXMuc3Bpbm5lci5oaWRlKHRoaXMuc3Bpbm5lck5hbWUpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgc3VjY2Vzc0F0dGFjaG1lbnREZWxldGUgPSAocmVzcG9uc2UpID0+IHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hdHRhY2htZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5hdHRhY2htZW50c1tpXS5hdHRhY2htZW50SWQgPT09IHRoaXMuYXR0YWNobWVudElkKSB7XHJcbiAgICAgICAgdGhpcy5hdHRhY2htZW50cy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwcml2YXRlIGZhaWx1cmVBdHRhY2htZW50Q3JlYXRlID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGUnKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIGZhaWx1cmVBdHRhY2htZW50RGVsZXRlID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZUF0dGFjaG1lbnREZWxldGUnKTtcclxuICB9O1xyXG5cclxuICBoYW5kbGVTdWJtaXRDbGljaygpIHtcclxuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5TdWJtaXRfVHJhY2tpbmdfSURfX2MpO1xyXG4gICAgdGhpcy51cGRhdGVBbnN3ZXJCb29rKHRoaXMuYWJJdGVtLklkKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUNhbmNlbENsaWNrKCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLkNhbmNlbF9UcmFja2luZ19JRF9fYyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUF0dGFjaG1lbnQgPSAoZmlsZVdyYXBwZXI6IGFueSkgPT4ge1xyXG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcclxuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxyXG4gICAgICAgIHRoaXMudGtuLFxyXG4gICAgICAgIFtcIkF0dGFjaG1lbnRcIiwgXCJjcmVhdGVcIiwgSlNPTi5zdHJpbmdpZnkoZmlsZVdyYXBwZXIpXSxcclxuICAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50Q3JlYXRlLFxyXG4gICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGVcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcclxuICAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc1wiLFxyXG4gICAgICAgIFtcIkF0dGFjaG1lbnRcIiwgXCJjcmVhdGVcIiwgSlNPTi5zdHJpbmdpZnkoZmlsZVdyYXBwZXIpXSxcclxuICAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50Q3JlYXRlLFxyXG4gICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGVcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudElkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuYXR0YWNobWVudElkID0gYXR0YWNobWVudElkO1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KFwiZGVsZXRlQXR0YWNobWVudFwiKTtcclxuICAgIHRoaXMuZGVsZXRlU0ZBdHRhY2htZW50KGF0dGFjaG1lbnRJZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRlbGV0ZVNGQXR0YWNobWVudCA9IChmaWxlSWQ6IHN0cmluZykgPT4ge1xyXG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcclxuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxyXG4gICAgICAgIHRoaXMudGtuLFxyXG4gICAgICAgIFtcIkF0dGFjaG1lbnRcIiwgXCJkZWxldGVcIiwgZmlsZUlkXSxcclxuICAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlLFxyXG4gICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGVcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcclxuICAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc1wiLFxyXG4gICAgICAgIFtcIkF0dGFjaG1lbnRcIiwgXCJkZWxldGVcIiwgZmlsZUlkXSxcclxuICAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlLFxyXG4gICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGVcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEZpbGVOYW1lKGZpbGVOYW1ld2l0aElkYW5kVHlwZSkge1xyXG4gICAgLy90cnVuY2F0ZSBmaWxlIHBhdGhcclxuICAgIHZhciBmaWxlTmFtZVdpdGhUeXBlID0gZmlsZU5hbWV3aXRoSWRhbmRUeXBlLnN1YnN0cihcclxuICAgICAgZmlsZU5hbWV3aXRoSWRhbmRUeXBlLmluZGV4T2YoXCI6Ojo6XCIpICsgNFxyXG4gICAgKTtcclxuICAgIHJldHVybiBmaWxlTmFtZVdpdGhUeXBlOyAvL2ZpbGVOYW1lV2l0aFR5cGUucmVwbGFjZSgvXiguKihcXC98XFxcXCkpKC4rKSQvLCAnJDMnKTtcclxuICB9XHJcbiAgZmlsZVVJKCkge1xyXG4gICAgaWYgKHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL1VwZGF0ZSBmdW5jdGlvbiBmb3IgY2F0ZWdvcml6YXRpb25cclxuICAvLyBzdGVwcGVyQ2F0ZWcoKSB7XHJcbiAgLy8gICB0aGlzLmZpcnN0Rm9ybUdyb3VwID0gdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gIC8vICAgICBmaXJzdEN0cmw6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF1cclxuICAvLyAgIH0pO1xyXG4gIC8vICAgdGhpcy5zZWNvbmRGb3JtR3JvdXAgPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgLy8gICAgIHNlY29uZEN0cmw6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF1cclxuICAvLyAgIH0pO1xyXG5cclxuICAvLyB9XHJcblxyXG4gIC8vIFVwZGF0ZSBGdW5jdGlvbiBmb3IgdGhlIFByb2dyZXNzIEJhclxyXG4gIHVwZGF0ZVByb2dyZXNzKCkge1xyXG4gICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYyA9PT0gdHJ1ZSkge1xyXG4gICAgICBsZXQgaiA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucG9zc2liaWxpdGllcy50b3RhbDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHBhdGhwb3NzID0gT2JqZWN0LnZhbHVlcyh0aGlzLnBvc3NpYmlsaXRpZXMucGF0aHNbaV0ucXVlc3Rpb25zKTtcclxuICAgICAgICBpZiAocGF0aHBvc3NbdGhpcy5wYXRocXVlc3Rpb25dID09PSB0aGlzLmN1cnJlbnROYW1lKSB7XHJcbiAgICAgICAgICBqLnB1c2goaSk7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jaGVjayA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoai5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICB0aGlzLmNvdW50ID0galswXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoai5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgdmFyIHdpZHRoID1cclxuICAgICAgICAgIDkwICogKHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggLyB0aGlzLnBvc3NpYmlsaXRpZXMubWF4UXVlc3Rpb25zKTtcclxuICAgICAgICB0aGlzLnByb2dyZXNzU3R5bGUgPSBNYXRoLnJvdW5kKHdpZHRoKSArIFwiJVwiO1xyXG4gICAgICB9IGVsc2UgaWYgKGoubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgdmFyIHdpZHRoID1cclxuICAgICAgICAgIDkwICpcclxuICAgICAgICAgICh0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoIC9cclxuICAgICAgICAgICAgdGhpcy5wb3NzaWJpbGl0aWVzLnBhdGhzW3RoaXMuY291bnRdLmNvdW50KTtcclxuICAgICAgICB0aGlzLnByb2dyZXNzU3R5bGUgPSBNYXRoLnJvdW5kKHdpZHRoKSArIFwiJVwiO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucGVyY2VudCA9ICtNYXRoLnJvdW5kKHdpZHRoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvd25OYW1lKGFyZWEpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IGFyZWEudG93bjtcclxuICAgIC8vY29uc29sZS5sb2coJ3RoaXMgdmFsdWU9Jyt0aGlzLnNlbGVjdGVkVmFsdWUpXHJcbiAgICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0VG93bkxvY2FsKCkge1xyXG4gICAgdGhpcy50ZW1wb0FkZHJlc3MgPSBbXTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKHZhciB2YWwgb2YgdGhpcy5sb2NhbGFkZHJlc3MpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB2YWwudG93bi5zdWJzdHJpbmcoMCwgdGhpcy5zZWxlY3RlZFZhbHVlLmxlbmd0aCkgPT0gdGhpcy5zZWxlY3RlZFZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKHZhbC5jb3VudHJ5KVxyXG4gICAgICAgICAgdGhpcy50ZW1wb0FkZHJlc3MucHVzaCh2YWwpO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygndGVtcG9BZGRyZXNzJyt0aGlzLnRlbXBvQWRkcmVzcylcclxuICAgICAgICAgIGlmICh0aGlzLnRlbXBvQWRkcmVzcy5sZW5ndGggPT0gNikge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VsZWN0TGlzdFwiKS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xyXG4gICAgdGhpcy5zZXRTZWFyY2hMaXN0V2lkdGgoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyTGlzdCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcblxyXG4gIHNldFNlYXJjaExpc3RXaWR0aCgpIHtcclxuICAgIC8vdG8gcmVzaXplIHNlYXJjaCBsaXN0IGJhc2VkIG9uIHRoZSBzY3JlZW4gc2l6ZVxyXG4gICAgY29uc3Qgc2VhcmNoQm94V2lkdGggPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhdXRvY29tcGxldGUtaW5wdXRcIikub2Zmc2V0V2lkdGg7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlbGVjdExpc3RcIikuc3R5bGUud2lkdGggPSBzZWFyY2hCb3hXaWR0aCArIFwicHhcIjtcclxuICB9XHJcblxyXG4gICAgZ2V0Q29kZSgpe1xyXG4gICAgICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvciAodmFyIHZhbCBvZiB0aGlzLmFsbEFkZHJlc3MpIHtcclxuICAgICAgICAgIGlmICh2YWwuemlwQ29kZS5zdWJzdHJpbmcoMCwgdGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUubGVuZ3RoKSA9PSB0aGlzLnNlbGVjdGVkUG9zdGFsY29kZSkge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKHZhbC5jb3VudHJ5KVxyXG4gICAgICAgICAgICB0aGlzLnRlbXBvQWRkcmVzcy5wdXNoKHZhbCk7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3RlbXBvQWRkcmVzcycrdGhpcy50ZW1wb0FkZHJlc3MpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRlbXBvQWRkcmVzcy5sZW5ndGggPT0gNikge1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VsZWN0TGlzdFwiKS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xyXG4gICAgICB0aGlzLnNldFNlYXJjaExpc3RXaWR0aCgpO1xyXG4gICAgfVxyXG4gICAgZ2V0UG9zdGFsY29kZSh2YWx1ZSl7XHJcbiAgICAgdGhpcy5wbGFjZXM9W107XHJcbiAgICAgdGhpcy5wcm92aW5jZT1bXTtcclxuICAgICAgdmFyIHByb3ZpbmNlO1xyXG4gICAgICB2YXIgdG93bjtcclxuICAgICAgdGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUgPSB2YWx1ZS56aXBDb2RlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZS5jb3VudHJ5O1xyXG4gICAgICB0aGlzLnRlbXBvQWRkcmVzcz1bXTtcclxuXHJcbiBcclxuICAgICAgZm9yKHZhciB2YWwgb2YgdGhpcy5sb2NhbGFkZHJlc3Mpe1xyXG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlID09IHZhbC56aXBDb2RlICl7XHJcbiAgICAgICAgICB0aGlzLnBsYWNlcy5wdXNoKHZhbCk7XHJcbiAgICAgICAgICB0aGlzLnByb3ZpbmNlLnB1c2godmFsKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbC5jb3VudHJ5O1xyXG4gICAgICAgICAgcHJvdmluY2UgPSB2YWwucHJvdmluY2VcclxuICAgICAgICAgIHRvd24gPSB2YWwudG93bjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYodGhpcy5wbGFjZXMubGVuZ3RoID09IDEpe1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm92aW5jZSA9cHJvdmluY2U7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENpdHkgPSB0b3duO1xyXG4gICAgICB9ZWxzZSBpZih0aGlzLnBsYWNlcy5sZW5ndGggPjEgfHwgdGhpcy5wbGFjZXMubGVuZ3RoID09MCl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2l0eSA9Jyc7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvdmluY2U9Jyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNsb3NlRHJvcGRvd24oKSB7XHJcbiAgICAgIGlmKHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlLmxlbmd0aCA9PSA1KXtcclxuICAgICAgICB0aGlzLmdldFBvc3RhbGNvZGUoe3ppcENvZGU6dGhpcy5zZWxlY3RlZFBvc3RhbGNvZGV9KTtcclxuICAgICAgfVxyXG5cclxuICAgc2V0VGltZW91dCgoKT0+IHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdExpc3QnKS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICB9LCA1MDApO1xyXG4gICB9XHJcblxyXG5cclxuICAgLy9QbHVzIGJ1dHRvbiBpbXBsZW1lbnRhdGlvbi5cclxuICAgc3RydWN0TG9jYWxTdWJRdWVzdGlvbihxdWVzOiBMb2NhbFF1ZXN0aW9uKXtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgc3RydWN0TG9jYWxTdWJRdWVzdGlvbicpO1xyXG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5zdWJRdWVzdGlvbnMubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgIHZhciBsb2NhbFN1YlF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcclxuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uSWQgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5JZDtcclxuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uTmFtZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLk5hbWU7XHJcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLlF1ZXN0aW9uX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uUXVlc3Rpb25fX2M7XHJcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLlF1ZXN0aW9uX1RleHRfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5RdWVzdGlvbl9UZXh0X19jO1xyXG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5UeXBlX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uVHlwZV9fYztcclxuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uVGl0bGVfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5UaXRsZV9fYztcclxuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uU3ViVGl0bGVfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5TdWJUaXRsZV9fYztcclxuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uSXNfT3B0aW9uYWxfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5Jc19PcHRpb25hbF9fYztcclxuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uRXJyb3JfTWVzc2FnZV9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLkVycm9yX01lc3NhZ2VfX2M7XHJcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5OZXh0X1F1ZXN0aW9uX19jO1xyXG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5Hcm91cF9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLkdyb3VwX19jO1xyXG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5RdWVzdGlvbl9Ob19fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLlF1ZXN0aW9uX05vX19jO1xyXG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5BbGxvd2VkX0ZpbGVfRXh0ZW5zaW9uc19fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLkFsbG93ZWRfRmlsZV9FeHRlbnNpb25zX19jO1xyXG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi51bmlxdWVTdWJRSWQgPSAnJyt0aGlzLnN1YlF1ZXN0aW9uc1tpXS5JZCArIGk7IFxyXG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5pbnB1dCA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLmlucHV0O1xyXG4gICAgICAgICAgdGhpcy5sb2NhbFN1YlF1ZXN0aW9ucy5wdXNoKGxvY2FsU3ViUXVlc3Rpb24pO1xyXG4gICAgICB9XHJcbiAgLy8gY29uc29sZS5sb2coJ2ZpbmFsIGxvY2FsIHN1YiBxdWVzdGlvbnMnKTtcclxuICAvLyBjb25zb2xlLmxvZyh0aGlzLmxvY2FsU3ViUXVlc3Rpb25zKTtcclxuICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XHJcbiAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLHRoaXMubG9jYWxTdWJRdWVzdGlvbnMpO1xyXG4gIHRoaXMubG9jYWxTdWJRdWVzdGlvbnMgPSBbXTtcclxuICAvLyBjb25zb2xlLmxvZygnZmluYWwga2V5IGxvY2FsU3ViUU1hcCBtYXAnKTtcclxuICAvLyBjb25zb2xlLmxvZyh0aGlzLmxvY2FsU3ViUU1hcCk7XHJcbiAgfVxyXG5cclxuICBhZGRJbnB1dEJveChxdWVzdGlvbjogTG9jYWxRdWVzdGlvbiwgaW5kZXg6IG51bWJlcil7XHJcbiAgICB2YXIgYXJyYSA9IHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XHJcbiAgICB2YXIgcUluZGV4ID0gYXJyYS5pbmRleE9mKHF1ZXN0aW9uKTtcclxuICAgIHZhciBxdWVzOiBMb2NhbFF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcclxuICAgIE9iamVjdC5hc3NpZ24ocXVlcywgcXVlc3Rpb24pO1xyXG4gICAgLy9jb25zb2xlLmxvZygocXVlcy51bmlxdWVTdWJRSWQpLnN1YnN0cmluZygxOCwgKHF1ZXMudW5pcXVlU3ViUUlkKS5sZW5ndGgpKzEpO1xyXG4gICAgaWYodGhpcy5rZXlJbmRleCA9PSBpbmRleCl7XHJcbiAgICAgIHF1ZXMudW5pcXVlU3ViUUlkID0gcXVlcy5JZCArIChTdHJpbmcoaW5kZXgrMSkpO1xyXG4gICAgICB0aGlzLmtleUluZGV4Kys7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5rZXlJbmRleCsrO1xyXG4gICAgICBxdWVzLnVuaXF1ZVN1YlFJZCA9IHF1ZXMuSWQgKyAoU3RyaW5nKHRoaXMua2V5SW5kZXgpKTtcclxuICAgIH1cclxuICAgIHF1ZXMuaW5wdXQgPSAnJztcclxuICAgIGFycmEuc3BsaWNlKHFJbmRleCsxLCAwLCBxdWVzKTtcclxuXHJcbiAgICB0aGlzLmxvY2FsU3ViUU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQsYXJyYSk7XHJcbiAgICAvL2NvbnNvbGUubG9nKHRoaXMubG9jYWxTdWJRTWFwKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUFkZHJlc3MocXVlc1VuaXF1ZUlkOiBzdHJpbmcsIHFOYW1lOiBzdHJpbmcpIHtcclxuICAgIC8vY29uc29sZS5sb2cocXVlc1VuaXF1ZUlkKVxyXG4gICAgdmFyIHZhbCA9IHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XHJcbiAgICB2YXIga2V5aW5kZXggPSAwO1xyXG5cclxuICAgIGZvcihsZXQgaT0wOyBpPHZhbC5sZW5ndGg7IGkrKyl7XHJcbiAgICAgIGlmKHZhbFtpXS5OYW1lID09IHFOYW1lKXtcclxuICAgICAgICBrZXlpbmRleCsrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5sb2NhbFN1YlFNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLklkKSAmJiBrZXlpbmRleCA+MSl7XHJcbiAgICAgIHZhciByZW9yZGVyID0gdmFsLmZpbHRlcigoaXRlbSkgPT4gaXRlbS51bmlxdWVTdWJRSWQgIT09IHF1ZXNVbmlxdWVJZClcclxuICAgICAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLHJlb3JkZXIpO1xyXG4gICAgICBrZXlpbmRleC0tO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TG9jYWxTdWJRdWVzdGlvbnMoaWQ6IFN0cmluZyl7XHJcbiAgICByZXR1cm4gdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KGlkKTtcclxuICB9XHJcblxyXG4gIC8vU2luZ2xlIEFkZCBidXR0b24gZnVuY3Rpb25hbGl0eSBmb3IgTGlzdCB0eXBlXHJcbkFkZChxdWVzdGlvbjogTG9jYWxRdWVzdGlvbil7XHJcbiAgICB0aGlzLmFkZEZsYWcgPSAgZmFsc2U7XHJcbiAgICB2YXIgYXJyYSA9IHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XHJcbiAgICB2YXIgaW5kZXggID0gYXJyYS5sZW5ndGg7XHJcbiAgICB2YXIgYSA9IGFycmEuc2xpY2UoLTEpLnBvcCgpO1xyXG4gICAgdGhpcy5pbmRleENvdW50ICA9IGEuUXVlc3Rpb25fTm9fX2M7XHJcbiAgICBcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbmRleENvdW50IDsgaSsrKSB7XHJcbiAgICAgIHZhciBxdWVzOiBMb2NhbFF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcclxuICAgICAgT2JqZWN0LmFzc2lnbihxdWVzLCBxdWVzdGlvbltpXSk7XHJcbiAgICAgIHRoaXMua2V5SW5kZXgrKztcclxuICAgICAgcXVlcy51bmlxdWVTdWJRSWQgPSBxdWVzLklkICsgKFN0cmluZyh0aGlzLmtleUluZGV4KSk7XHJcbiAgICAgIHF1ZXMuaW5wdXQgPSAnJztcclxuICAgICAgYXJyYS5zcGxpY2UoaW5kZXgrKHRoaXMuaW5kZXhDb3VudC0xKSwgMCwgcXVlcyk7XHJcbiAgICB0aGlzLmxvY2FsU3ViUU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQsYXJyYSk7XHJcbiAgICB9ICBcclxuICAgIHRoaXMuYWRkRmxhZyA9IHRydWU7XHJcbiAgfVxyXG4gIFxyXG4gIGhhbmRsZUxvY2F0aW9uU2VsZWN0ZWQobG9jYXRpb246IGFueSxxdWVzOmFueSkge1xyXG4gICAgcXVlcy5pbnB1dCA9IGxvY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRJbnB1dChpbnB1dDphbnkgLHF1ZXM6YW55KXsgXHJcbiAgICBxdWVzLmlucHV0ID0gaW5wdXQ7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVUZXh0YXJlYVZhbHVlQ2hhbmdlKHZhbHVlIDpzdHJpbmcpe1xyXG4gICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIHRleHQtYXJlYSB0ZXh0OicsIHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0RGF0YShkYXRhOmFueSl7XHJcbiAgIGNvbnNvbGUubG9nKCd0YWJsZSBkYXRhJyxkYXRhKTtcclxuICB9XHJcblxyXG4gIGRlcGVuZGVudENoYW5nZSh2YWx1ZTphbnkpe1xyXG4gIHRoaXMubmV4dFZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5RGF0ZShkYXRlU2VsZWN0ZWQ6IGFueSxxdWVzOmFueSl7XHJcbiAgICAvLyBQYXJzZSB0aGUgZGF0ZSBzdHJpbmcgdXNpbmcgbW9tZW50IGFuZCBhc3NpZ24gaXQgdG8gdGhpcy5zZWxlY3RlZERhdGVcclxuICAgIHF1ZXMuaW5wdXQgPSBtb21lbnQoZGF0ZVNlbGVjdGVkLnZhbHVlICwgJ1lZWVktTU0tREQgSEg6bW06c3MnKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKS50b1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S2V5KGl0ZW06IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoaXRlbSlbMF07XHJcbiAgfVxyXG4gIFxyXG4gIGdldFZhbHVlKGl0ZW06IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhpdGVtKVswXTtcclxuICB9XHJcblxyXG4gIC8vIEluIHRoZSBwYXJlbnQgY29tcG9uZW50IGNsYXNzXHJcbmdldFRhYmxlRGF0YShxdWVzOiBhbnkpOiBhbnlbXSB7XHJcbiAgLy8gUmV0dXJuIGEgbmV3IGFycmF5IHRvIGVuc3VyZSBlYWNoIHRhYmxlIGluc3RhbmNlIGhhcyBpdHMgb3duIHNlcGFyYXRlIGFycmF5XHJcbiAgaWYgKHF1ZXMuTmFtZSA9PT0gJ1FOLTAyMjUxJykge1xyXG4gICAgcXVlcy50YWJsZURhdGFWYWx1ZSA9IHRoaXMudGFibGVEYXRhMTtcclxuICAgIHF1ZXMudGFibGVIZWFkZXIgPSdTYWZldHkgUHJlY2F1dGlvbnMnO1xyXG4gICAgcmV0dXJuIFsuLi5xdWVzLnRhYmxlRGF0YVZhbHVlXTtcclxuICB9IGVsc2Uge1xyXG4gICAgcXVlcy50YWJsZURhdGFWYWx1ZSA9IHRoaXMudGFibGVEYXRhMjtcclxuICAgIHF1ZXMudGFibGVIZWFkZXIgPSdQZXJzb25hbCBQcm90ZWN0aXZlIEVxdWlwbWVudHMnO1xyXG4gICAgcmV0dXJuIFsuLi5xdWVzLnRhYmxlRGF0YVZhbHVlXTtcclxuICB9XHJcbn1cclxuICB9XHJcblxyXG4iLCI8IS0tIFNwaW5uZXIgLS0+XHJcbjxuZ3gtc3Bpbm5lciBbbmFtZV09XCJzcGlubmVyTmFtZVwiIFt0eXBlXT1cInNwaW5uZXJUeXBlXCI+PC9uZ3gtc3Bpbm5lcj5cclxuXHJcbjwhLS0gQmFjayBQcm9jZXNzaW5nIC0tPlxyXG48ZGl2ICpuZ0lmPVwiYmFja2ljb24gPT0gZmFsc2VcIiA+XHJcbiAgPGRpdiBjbGFzcz1cImJhY2tpY29uXCIgW3N0eWxlLnZpc2liaWxpdHldPVwicXVlc3Rpb25TdGFjay5sZW5ndGggPjAgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiPlxyXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlQmFja0NsaWNrKClcIiBbY2xhc3NdPVwiIGFiSXRlbT8uU3RhdHVzX19jID09ICdDb21wbGV0ZWQnID8gJ3N1bW1hcnktdm9sdmVyJzonYXBwLWJhY2sxJ1wiPlxyXG4gICAgPGltZyBjbGFzcz1cImljb24tYXJyb3ctYmFja1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1hcnJvdy1iYWNrLnBuZ1wiIGFsdD1cIlNjcm9sbCBkb3duXCI+IHt7IHFiSXRlbT8uQmFja19fYyB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBRdWVzdGlvbiBIYW5sZGluZyAtLT5cclxuPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbVwiIFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsX19jID8gJ3F1ZXN0aW9uZGl2MScgOiAncXVlc3Rpb25kaXYxIHBhZGQtYm90dG9tJ1wiPlxyXG4gIDwhLS0gUHJvZ3Jlc3MgQmFyICYgVGl0bGUgLS0+XHJcbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5UaXRsZV9fYyAmJiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCI+XHJcbiAgICA8aDEgY2xhc3M9XCJoZWFkZXIxXCI+e3sgcXVlc3Rpb25JdGVtPy5UaXRsZV9fYyB9fTwvaDE+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyMlwiPnt7IHF1ZXN0aW9uSXRlbT8uU3ViVGl0bGVfX2MgfX08L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBQcm9ncmVzcyAmIEdyb3VwaW5nIC0tPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwieyBxdWVzdGlvbmRpdjI6ICFxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCI+XHJcbiAgICA8IS0tIFBpZSBDaGFydCBQcm9ncmVzcyAtLT5cclxuICAgIDxkaXYgW25nQ2xhc3NdPVwieyBiZ0NvbG9yOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCI+XHJcbiAgICAgIDxkaXYgaWQ9XCJwcm9ncmVzc1wiICpuZ0lmPVwicWJJdGVtPy5Qcm9ncmVzc19CYXJfX2NcIj5cclxuICAgICAgICA8Y2lyY2xlLXByb2dyZXNzIGNsYXNzPVwidGl0bGViYXJcIiBbcGVyY2VudF09XCJ0aGlzLnBlcmNlbnRcIiBbcmFkaXVzXT1cIjQwXCIgW3NwYWNlXT1cIi00XCIgW291dGVyU3Ryb2tlV2lkdGhdPVwiNFwiXHJcbiAgICAgICAgW2lubmVyU3Ryb2tlV2lkdGhdPVwiNFwiIFtvdXRlclN0cm9rZUNvbG9yXT1cIicjZTBiMWIwJ1wiIFtpbm5lclN0cm9rZUNvbG9yXT1cIicjZTdlOGVhJ1wiIFthbmltYXRpb25dPVwidHJ1ZVwiIFtiYWNrZ3JvdW5kUGFkZGluZ109IFwiMFwiXHJcbiAgICAgICAgW2JhY2tncm91bmRDb2xvcl09IFwiJyNkZDJlMTMnXCIgW2JhY2tncm91bmRHcmFkaWVudFN0b3BDb2xvcl09XCInI2Y5YmZiZCdcIiBbdGl0bGVDb2xvcl09XCInI2YzZWRlZCdcIiBcclxuICAgICAgICBjbGFzcz1cIm5nLXN0YXItaW5zZXJ0ZWRcIiBbdGl0bGVdPVwidGhpcy5wZXJjZW50KyclJ1wiIFtzaG93U3VidGl0bGVdPVwiZmFsc2VcIiBbc2hvd0JhY2tncm91bmRdPVwidHJ1ZVwiIFthbmltYXRpb25EdXJhdGlvbl09XCIzMDBcIlxyXG4gICAgICAgIFtzdGFydEZyb21aZXJvXT1cImZhbHNlXCIgW3Jlc3BvbnNpdmVdPVwiZmFsc2VcIiA+XHJcbiAgICAgICAgPC9jaXJjbGUtcHJvZ3Jlc3M+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBTaG93IHRoZSBHcm91cC9Nb2R1bGUgcmVsYXRlZCB0byB0aGUgUHJvZ3Jlc3MgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLkdyb3VwX19jICYmIHFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgcXVlc3Rpb25hbGlnbjogIXFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxhcmdlVGl0bGVcIj5cclxuICAgICAgICA8aDMgY2xhc3M9XCJteXQtZm9udDYgbXl0LXRleHQzXCI+XHJcbiAgICAgICAgICB7eyBxdWVzdGlvbkl0ZW0/Lkdyb3VwX19jIH19XHJcbiAgICAgICAgPC9oMz5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlN1Yl9UZXh0X19jICE9ICfCv0VuIHF1w6kgcGHDrXMgb2N1cnJpw7M/J1wiIGNsYXNzPVwibXl0LWZvbnQ1IG15dC10ZXh0MVwiPnt7cXVlc3Rpb25JdGVtPy5TdWJfVGV4dF9fY319PC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5TdWJfVGV4dF9fYyA9PT0gJ8K/RW4gcXXDqSBwYcOtcyBvY3VycmnDsz8nXCIgY2xhc3M9XCJteXQtZm9udDEwIG15dC10ZXh0MlwiPnt7cXVlc3Rpb25JdGVtPy5TdWJfVGV4dF9fY319PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gUXVlc3Rpb24gSGFuZGxpbmcgLS0+XHJcbiAgPGRpdiBjbGFzcz1cInF1ZXN0aW9uZGl2MlwiPlxyXG4gICAgPCEtLSBUaXRsZSAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uSXNfVGl0bGVfX2NcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5UeXBlX19jICE9ICdCb29rJyAmJiBxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fTm9fX2MhPSc2JyAmJiBxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fTm9fX2MhPSc5J1wiPiBcclxuICAgICAgICA8aDMgY2xhc3M9XCJxdWVzdGlvbmFsaWduICBteXQtZm9udDMgbXl0LWFsaWduIG15dC10ZXh0NFwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MpXCI+XHJcbiAgICAgICAgICB7e3F1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fY319XHJcbiAgICAgICAgPC9oMz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCIhcXVlc3Rpb25JdGVtLklzX1RpdGxlX19jXCIgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWxfX2MgPyAnaGVhZGVyLXN0eWxlIGFkZGl0aW9uYWwnIDogJ3F1ZXN0aW9uLWYtc2l6ZSBhZGRpdGlvbmFsJ1wiPlxyXG4gICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MpXCIgPlxyXG4gICAgICAgIHt7IHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fYyB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCB3aXRoIEN1c3RvbSBTdHlsaW5nIC0gTVIgLSAxMUFVRzIzIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5UeXBlX19jID09ICdCb29rJ1wiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlF1ZXN0aW9uX05vX19jPT0nNidcIj5cclxuICAgICAgICA8aDMgY2xhc3M9XCJteXQtMzIxXCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fYylcIj5cclxuICAgICAgICAgIHt7IHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fYyB9fVxyXG4gICAgICAgIDwvaDM+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBcclxuICAgIDwhLS0gVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCB3aXRoIEN1c3RvbSBTdHlsaW5nIC0gTVIgLSAxMUFVRzIzIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5UeXBlX19jID09ICdGaWxlJyBcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9Ob19fYz09JzknXCI+XHJcbiAgICAgICAgPGgzIGNsYXNzPVwibXl0LTM0NVwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MpXCI+XHJcbiAgICAgICAgICB7e3F1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fY319XHJcbiAgICAgICAgPC9oMz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBBZGRpdGlvbmFsIEluZm8gLS0+XHJcbiAgPCEtLSBUaGUgYmVsb3cgY29kZSBjYW4gYmUgd3JpdHRlbiBlZmZlY3RpdmVseSBuZXN0ZWQgbmdJZiBmb3IgUmljaCBUZXh0ICYgT3RoZXIgb253IGZvciBQcm9ncmVzcyBCYXIgLS0+XHJcbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5BZGRpdGlvbmFsX1JpY2hfX2MgJiYgcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiID5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJhZGRpdGlvbmFsIFwiIFtpbm5lckhUTUxdPVwiaW5uZXJodG1sXCI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLkFkZGl0aW9uYWxfUmljaF9fYyAmJiAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImluZm8tYWxlcnQgcXVlcy1hbGVydDFcIj5cclxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1pbmZvIGZhLTN4IGlwb3NpdGlvbiBpY29sb3JcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvZGl2XCIgW2lubmVySFRNTF09XCJpbm5lcmh0bWxcIj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIERyb3Bkb3duLS0+XHJcbiAgPGRpdiAqbmdJZj1cImRyb3Bkb3duRmxhZ1wiID5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXMtZmxleFwiPlxyXG4gICAgICA8c2VsZWN0IFxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICdkdC1saW5lIG15dC1hbGlnbjMgbXl0LWFsaWduMiBkcERvd24gZHJvcGJveCBkb3duMSBteXQtZHJvcGJveCBteXQtYm9yZGVyLXIgbXl0LWZvbnQxJzogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MsXHJcbiAgICAgICAgICAnY3VzdG9tLXNlbGVjdCc6ICFxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fY1xyXG4gICAgICAgIH1cIiBjbGFzcz1cIm1yLXNtLTIgZGQtaGVpZ2h0IGRyb3Bib3ggXCIgIGlkPVwiZHJvcGRvd25cIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgKGNoYW5nZSk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCcgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMCA/ICcjZmZmJyA6ICcnXHJcbiAgICAgICAgfX1cIiBzdHlsZS5jb2xvcj1cInt7IHF1ZXN0aW9uSXRlbT8uZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMjEuNXJlbSAhaW1wb3J0YW50O1wiPlxyXG4gICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdCBvZiBxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzXCIgY2xhc3M9XCJvcHRpb25cIiB2YWx1ZT1cInt7IG9wdC5WYWx1ZV9fYyB9fVwiPlxyXG4gICAgICAgICAge3sgb3B0LlZhbHVlX19jIH19XHJcbiAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIi5cIiBkaXNhYmxlZCBoaWRkZW4+Qml0dGUgdHJlZmZlbiBTaWUgZWluZSBBdXN3YWhsPC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gUmFkaW8gLS0+XHJcbiAgPGRpdiAqbmdJZj1cInJhZGlvRmxhZyB8fCBkYXRhRmxhZ1wiIGNsYXNzPVwiXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwidGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3JcIiBjbGFzcz1cImNvbmQtZGl2MlwiPlxyXG4gICAgICB7eyBxdWVzdGlvbkl0ZW0/LkVycm9yX01lc3NhZ2VfX2MgfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRpcy1mbGV4XCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdCBvZiBxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzXCIgY2xhc3M9XCJyYWRpbyByYWRpb09wdGlvblwiID5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJyYWRpb2NvbnRhaW5lciBjb250YWluZXIgIG15dC1mb250NFwiPnt7IG9wdC5WYWx1ZV9fYyB9fVxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFtpZF09XCJvcHQuSWRcIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgbmFtZT1cImlucFZhbHVlXCIgdmFsdWU9XCJ7eyBvcHQuVmFsdWVfX2MgfX1cIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9wdGlvbkNoYW5nZShvcHQuVmFsdWVfX2MpXCIgLz5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hlY2ttYXJrXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gQ2hlY2tib3ggLS0+XHJcbiAgPGRpdiAqbmdJZj1cImNoZWNrYm94RmxhZ1wiIGNsYXNzPVwiXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwidGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3JcIiBjbGFzcz1cImNvbmQtZGl2MlwiPlxyXG4gICAgICB7eyBxdWVzdGlvbkl0ZW0/LkVycm9yX01lc3NhZ2VfX2MgfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImRpcy1mbGV4XCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygb3B0aW9uVmFsdWVzXCIgY2xhc3M9XCJyYWRpbyBjb2wtbWQtNiBvcHRpb25kaXZcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCIgY29udGFpbmVyMSBcIiA+e3sgaXRlbS5WYWx1ZV9fYyB9fVxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtpZF09XCJpdGVtLklkXCIgWyhuZ01vZGVsKV09XCJpdGVtLmNoZWNrZWRcIiAoY2xpY2spPVwiY2xlYXJFcnJvcigpXCIgLz5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPSdjaGVja21hcmsxJz48L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBUZXh0IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJ0ZXh0RmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyIG15dC1ib29rMVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiIGNsYXNzPVwiZGlzLWZsZXggbXl0LWFsaWduMVwiIFtjbGFzc109XCInY29sLW1kLScgKyBxdWVzdGlvbkl0ZW0/LlNpemVfX2MgKyAnIHBhZGRpbmdub25lJ1wiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgJ2JveG91dGxpbmUgbXl0LWZvbnQxIG15dC1ib29rMSc6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jLFxyXG4gICAgICAgICAgdGV4dEJveDE6ICFxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fY1xyXG4gICAgICAgIH1cIiBpZD1cInRleHQtaW5wdXQtaWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yXHJcbiAgICAgICAgICAgID8gJ3JlZCdcclxuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICA/ICcjODdiZTFjJ1xyXG4gICAgICAgICAgICA6ICcnXHJcbiAgICAgICAgfX1cIiBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05XFxzLjo7LD9dL2csJycpO1wiIC8+XHJcbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgY2hlY2staWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDBcIj48L2k+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBUZXh0IEFyZWEgLS0+XHJcbiAgPGRpdiAqbmdJZj1cInRhRmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZGlzLWZsZXhcIj5cclxuICAgICAgPHRleHRhcmVhIGNsYXNzPVwidGEtaW5wdXRcIiBpZD1cInRhLWlucHV0LWlkXCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIChjbGljayk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yXHJcbiAgICAgICAgICAgID8gJ3JlZCdcclxuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMCAmJiB0YUZvY3VzT3V0XHJcbiAgICAgICAgICAgID8gJyM4N2JlMWMnXHJcbiAgICAgICAgICAgIDogJydcclxuICAgICAgICB9fVwiIChmb2N1c291dCk9XCJ0YUZvY3VzT3V0ID0gdHJ1ZVwiXHJcbiAgICAgICAgb25pbnB1dD1cInRoaXMudmFsdWU9dGhpcy52YWx1ZS5yZXBsYWNlKC9bXmEtekEtWjAtOVxccy46Oyw/XS9nLCcnKTtcIj48L3RleHRhcmVhPlxyXG4gICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrIGNoZWNrLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cImlucFZhbHVlPy5sZW5ndGggPiAwICYmIHRhRm9jdXNPdXRcIj48L2k+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBDQyBOdW1iZXIgRm9ybWF0IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJudW1iZXJGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXMtZmxleFwiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cIlRleHRcIiBwbGFjZWhvbGRlcj1cIjAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwXCIgW25nQ2xhc3NdPVwieyBib3hvdXRsaW5lOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgaWQ9XCJudW1iZXItaW5wdXQtaWRcIiAobmdNb2RlbENoYW5nZSk9XCJDQ09uQ2hhbmdlKCRldmVudClcIiByZXF1aXJlZD1cIlwiIG1heGxlbmd0aD1cIjI5XCJcclxuICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgb25pbnB1dD1cInRoaXMudmFsdWU9dGhpcy52YWx1ZS5yZXBsYWNlKC9bXjAtOSBdL2csJycpO1wiXHJcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO1wiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvclxyXG4gICAgICAgICAgICA/ICdyZWQnXHJcbiAgICAgICAgICAgIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgPyAnIzg3YmUxYydcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgIH19XCIgLz5cclxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHN0eWxlPVwiY29sb3I6ICM4N2JlMWM7IG1hcmdpbi1sZWZ0OiAtMnJlbTsgei1pbmRleDogMTsgcGFkZGluZzogNXB4O1wiXHJcbiAgICAgICAgKm5nSWY9XCJpbnBWYWx1ZT8ubGVuZ3RoID4gMFwiPjwvaT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gRU5ELS0+XHJcblxyXG4gIDwhLS0gQWxwaGFOdW1lcmljIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJhbHBoYW51bWVyaWNGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj4gPCEtLVVJIG5vdCBjb21wbGV0ZWQtLT5cclxuICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjpyZWxhdGl2ZTtcIj5cclxuICAgICAgPGlucHV0IHR5cGU9dGV4dCBwbGFjZWhvbGRlcj1cIjAgb2YgMFwiIHN0eWxlPVwicGFkZGluZzo1cHggNXB4IDVweCAxNTBweDtcIiBpZD1cInlvdXJpZGhlcmVcIi8+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBFbWFpbCAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiZW1haWxGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkaXMtZmxleFwiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgW25nQ2xhc3NdPVwieyBib3hvdXRsaW5lOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIGlkPVwiZW1haWwtaW5wdXQtaWRcIlxyXG4gICAgICAgIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvclxyXG4gICAgICAgICAgICA/ICdyZWQnXHJcbiAgICAgICAgICAgIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgPyAnIzg3YmUxYydcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgIH19XCIgLz5cclxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHN0eWxlPVwiY29sb3I6ICM4N2JlMWM7IG1hcmdpbi1sZWZ0OiAtMnJlbTsgei1pbmRleDogMTsgcGFkZGluZzogNXB4XCJcclxuICAgICAgICAqbmdJZj1cImlucFZhbHVlPy5sZW5ndGggPiAwXCI+PC9pPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gRGF0ZVRpbWUgLS0+XHJcbiAgPGRpdiAqbmdJZj1cImR0RmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdaZXJvIG15dC10aW1lMVwiID5cclxuICAgIDwhLS0gRXJyb3IgSGFuZGxpbmcgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uZXJyb3JcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcclxuICAgIGNvbG9yOiByZWQ7XCI+e3txdWVzdGlvbkl0ZW0/LmVycm9yPy5lcnJvck1zZ319PC9kaXY+XHJcblxyXG4gICAgPCEtLSBEYXRlIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cImRhdGVGbGFnXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LkRhdGVfVGV4dF9fYyB9fTwvbGFiZWw+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRpcy1mbGV4XCI+XHJcbiAgICAgICAgICA8bXktZGF0ZS1waWNrZXIgbmFtZT1cIm15ZGF0ZVwiIFtvcHRpb25zXT1cIm15RGF0ZVBpY2tlck9wdGlvbnNcIiBpZD1cImRhdGVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweCAhaW1wb3J0YW50O1wiIChkYXRlQ2hhbmdlZCk9XCJvbkRhdGVDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbERhdGVcIiBjbGFzcz1cImRhdGUtcGlja2VyXCIgcGxhY2Vob2xkZXI9XCJTZWxlY2Npb25lIGZlY2hhXCIgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxyXG4gICAgICAgICAgPC9teS1kYXRlLXBpY2tlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFRpbWUgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwidGltZUZsYWdcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkaW5nQm90dG9tXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8uVGltZV9UZXh0X19jIH19PC9sYWJlbD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGlzLWZsZXhcIj5cclxuICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J2R0LWxpbmUgZGF0ZS1saW5lIGR0LXRpbWUnOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZWFuZFRpbWU6ICFxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fY31cIiBcclxuICAgICAgICAgICAgICBpZD1cImRhdGVhbmRUaW1lXCIgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJxdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCc6IHF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDAgPyAnJyA6ICcnXCJcclxuICAgICAgICAgICAgICAoZm9jdXMpPVwiKGNsZWFyU1FFcnJvcikgXCI+XHJcbiAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJob3Vyc1wiIGNsYXNzPVwiZGF0ZXRpbWUgc2hvd0hvdXIgbXl0LXRpbWUgbXl0LWhvdXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSG91clwiIGlkPVwiaG91clwiXHJcbiAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPkhIPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImhvdXJcIiAqbmdGb3I9XCJsZXQgaG91ciBvZiBob3Vyc1wiPlxyXG4gICAgICAgICAgICAgIHt7IGhvdXIgfX1cclxuICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XHJcbiAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJtaW51dGVzXCIgY2xhc3M9XCJkYXRldGltZSBzaG93bWludXRlIG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1pbnV0ZVwiIGlkPVwibWludXRlXCJcclxuICAgICAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+TU08L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibWludXRlXCIgKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVzXCI+XHJcbiAgICAgICAgICAgICAge3sgbWludXRlIH19XHJcbiAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgY29sb24xOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0/LlgyNF9Ib3Vyc19fYyA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9uXCI+IDogPC9zcGFuPlxyXG4gICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJBTS9QTVwiIGNsYXNzPVwibXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWVyaWRpZW1cIiBpZD1cIm1lcmlkaWVtXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFNXCI+QU08L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUE1cIj5QTTwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IFtuZ0NsYXNzXT1cInsnJzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYywgJ2RhdGVhbmRUaW1lJzogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2N9XCI+PC9kaXY+IC0tPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGkgY2xhc3M9XCJmYSBjaGVjay1pY29uM1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtPy5pbnB1dD8ubGVuZ3RoID4gMFwiPjwvaT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEF0dGFjaG1lbnQgLyBGaWxlIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJmaWxlRmxhZ1wiPlxyXG4gICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWFsZXJ0XCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInBpY3R1cmUtdXBsb2FkXCIgZm9yPVwiZmlsZS11cGxvYWRcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGljdHVyZS11cGxvYWQtY2hpbGRcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlLWltYWdlLW8gZmEtNXggaWNvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1wbHVzIGZhLTJ4IHBpY3R1cmUtdXBsb2FkLWNoaWxkIHBpYy11cGxvYWQgaWNvbG9yXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8aW5wdXQgaWQ9XCJmaWxlLXVwbG9hZFwiIHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwie3sgYWxsb3dlZEZpbGVFeHRlbnNpb24gfX1cIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50KVwiIC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDx1bCAqbmdJZj1cIlxyXG4gICAgICAgIGF0dGFjaG1lbnRzPy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgcXVlc3Rpb25JdGVtPy5UeXBlX19jID09PSAnRmlsZScgJiZcclxuICAgICAgICAhcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2NcclxuICAgICAgXCIgY2xhc3M9XCJhdHRhY2gtdWxpc3QgY29sLW1kLTEyXCI+XHJcbiAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwiYWxpZ24tbFwiPlxyXG4gICAgICAgIHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWVcclxuICAgICAgICB9fTxzcGFuIGNsYXNzPVwiYXR0YWNoLWxpc3RcIiAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIj5YPC9zcGFuPlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuXHJcbiAgICA8IS0tIEF0dGFjaG1lbnQgUHJvZ3Jlc3MgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJmaWxlLXVwbG9hZGluZy1ib3hcIj5cclxuICAgICAgICA8IS0tPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0MVwiIC8+LS0+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWRpbmctZmlsZS1uYW1lIFwiPnt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZGVsZXRlJTQwMngucG5nXCIgY2xhc3M9XCJkZWxldGVJY29uXCJcclxuICAgICAgICAgIChjbGljayk9XCJkZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuYXR0YWNobWVudElkKVwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsZS11cGxvYWQtYm94XCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPyAncmVkJyA6ICcnIH19XCI+XHJcbiAgICAgIFxyXG4gICAgICAgIDwhLS08aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXQxXCIgLz4tLT5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImYtTmFtZVwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MpXCI+IHt7IHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fY319PC9zcGFuPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZpbGUtbGFiZWwgXCI+XHJcbiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vZmlsZS11cGxvYWQucG5nXCIgY2xhc3M9XCJmaWxlLWljb25cIi8+XHJcbiAgICAgICAgICA8aW5wdXQgbmFtZT1cImF0dGFjaG1lbnRcIiB0eXBlPVwiZmlsZVwiIHBsYWNlaG9sZGVyPVwiVGlja2V0IGthdWZlblwiIG11bHRpcGxlXHJcbiAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsIC5wbmcsIC5qcGcsIC5qcGVnLCAuaGVpYywgLmFwcGxpY2F0aW9uL3BkZlwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJmaWxlLXVwbG9hZC1idG5cIj5cclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEJvb2sgLS0+XHJcbiAgPGRpdiAqbmdJZj1cImJvb2tGbGFnXCI+XHJcbiAgICA8ZGl2IFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsX19jID8gJ2Zvcm0tZ3JvdXAgY29udGVudC1ib3gnIDogJ2Zvcm0tZ3JvdXAnXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5lcnJvclwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1xyXG4gICAgICAgICAgICBjb2xvcjogcmVkO1wiPnt7cXVlc3Rpb25JdGVtPy5lcnJvcj8uZXJyb3JNc2d9fTwvZGl2PlxyXG4gICAgICAgIDxkaXYgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWxfX2MgPyAnJyA6ICdteXQtYWxpZ24zJ1wiIFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsX19jID8gJ2NvbC1sZy0nICsgcXVlcy5TaXplX19jICsgJyBwYWRkaW5nbm9uZScgOiAnY29sLW1kLScgKyBxdWVzLlNpemVfX2MgKyAnIHBhZGRpbmdub25lJ1wiXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcXVlcyBvZiBzdWJRdWVzdGlvbnM7bGV0IGkgPSBpbmRleFwiIFtpZF09XCJxdWVzLklkXCI+XHJcbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgZG93bjI6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cclxuICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWxfX2MgPyAnZGlzLWZsZXggc2hlbmdlbC1teXQtZm9udDMgbXl0LWZvbnQ3JyAgOiAnZGlzLWZsZXggbXl0LWZvbnQzIG15dC1mb250NycgXCI+e3sgcXVlcz8uUXVlc3Rpb25fX2MgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ1plcm8gbXl0LWRhdGVUaW1lTmV3XCIgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUaW1lJyB8fCBxdWVzLlR5cGVfX2MgPT09ICdEYXRlJ1wiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRGF0ZSdcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdCb3R0b21cIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LkRhdGVfVGV4dF9fYyB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlzLWZsZXggZGF0ZWFuZHRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgPG15LWRhdGUtcGlja2VyIG5hbWU9XCJteWRhdGVcIiBbb3B0aW9uc109XCJteURhdGVQaWNrZXJPcHRpb25zXCIgaWQ9XCJkYXRlXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHggIWltcG9ydGFudDtcIiAoZGF0ZUNoYW5nZWQpPVwib25EYXRlQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbERhdGVcIiBjbGFzcz1cImRhdGUtcGlja2VyXCIgcGxhY2Vob2xkZXI9XCJTZWxlY2Npb25lIGZlY2hhXCIgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIiA+XHJcbiAgICAgICAgICAgICAgICAgIDwvbXktZGF0ZS1waWNrZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUaW1lJ1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8uVGltZV9UZXh0X19jIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXMtZmxleCBkYXRlYW5kdGltZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J2R0LWxpbmUgZGF0ZS1saW5lIGR0LXRpbWUnOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVhbmRUaW1lOiAhcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2N9XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImRhdGVhbmRUaW1lXCIgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJxdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCc6IHF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDAgPyAnJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCIoY2xlYXJTUUVycm9yKSBcIj5cclxuICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiaG91cnNcIiBjbGFzcz1cImRhdGV0aW1lIHNob3dIb3VyIG15dC10aW1lIG15dC1ob3VyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEhvdXJcIiBpZD1cImhvdXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+SEg8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJob3VyXCIgKm5nRm9yPVwibGV0IGhvdXIgb2YgaG91cnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGhvdXIgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIm1pbnV0ZXNcIiBjbGFzcz1cImRhdGV0aW1lIHNob3dtaW51dGUgbXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWludXRlXCIgaWQ9XCJtaW51dGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+TU08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJtaW51dGVcIiAqbmdGb3I9XCJsZXQgbWludXRlIG9mIG1pbnV0ZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IG1pbnV0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGNvbG9uMTogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MgfVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiQU0vUE1cIiBjbGFzcz1cIm15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1lcmlkaWVtXCIgaWQ9XCJtZXJpZGllbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFNXCI+QU08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJQTVwiPlBNPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRGF0ZVRpbWUnXCI+XHJcbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRhdGUtcGlja2VyIFttaW5EYXRlXT1cInF1ZXMubWluRGF0ZVwiIFtkYXRlXT1cInF1ZXMuaW5wdXRcIiAoZGF0ZUNoYW5nZSk9XCJkaXNwbGF5RGF0ZSgkZXZlbnQscXVlcylcIj48L2FwcC1jdXN0b20tZGF0ZS1waWNrZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUZXh0J1wiPlxyXG4gICAgICAgICAgICA8YXBwLWN1c3RvbS1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICBbZnJvbVNoZW5nZWxdPVwicWJJdGVtLmlzU2hlbmdlbF9fY1wiXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJxdWVzLmlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NWYWx1ZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAnZGlzLWZsZXggZHQtbGluZSBkYXRlLWxpbmUgYm9va1RleHQgYm94b3V0bGluZSBteXQtZm9udDEnOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dEJveDogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcclxuICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCIgXHJcbiAgICAgICAgICAgICAgICAgIFtpZFZhbHVlXT1cInF1ZXMuVHJhY2tpbmdfSURfX2NcIlxyXG4gICAgICAgICAgICAgICAgICBbZm9jdXNFdmVudF09XCJjbGVhclNRRXJyb3IocXVlcy5JZClcIlxyXG4gICAgICAgICAgICAgICAgICBbZXJyb3JdPVwicXVlcy5lcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJxdWVzLlF1ZXN0aW9uX19jXCJcclxuICAgICAgICAgICAgICAgICAgKGlucHV0VmFsdWUpPVwic2VsZWN0ZWRJbnB1dCgkZXZlbnQscXVlcylcIj5cclxuICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWlucHV0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnTG9jYXRpb24nXCI+XHJcbiAgICAgICAgICAgIDwhLS0gZm9yIHBpY2sgbG9jYXRpb24gLS0+XHJcbiAgICAgICAgICAgIDxhcHAtcGljay1sb2NhdGlvbiBbYWRkcmVzc109XCJxdWVzLmlucHV0XCIgKGxvY2F0aW9uU2VsZWN0ZWQpPVwiaGFuZGxlTG9jYXRpb25TZWxlY3RlZCgkZXZlbnQscXVlcylcIj48L2FwcC1waWNrLWxvY2F0aW9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tIGZvciAgdGV4dCBhcmVhICAgLS0+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnVGV4dEFyZWEnXCI+XHJcbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLXRleHQtYXJlYSBbdmFsdWVdPVwicXVlcy5pbnB1dFwiIFtyb3dzXT1cIjNcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtwbGFjZWhvbGRlcl09XCJxdWVzLlF1ZXN0aW9uX19jIFwiICh0ZXh0YXJlYVZhbHVlQ2hhbmdlKT1cImhhbmRsZVRleHRhcmVhVmFsdWVDaGFuZ2UoJGV2ZW50KVwiPjwvYXBwLWN1c3RvbS10ZXh0LWFyZWE+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS0gZm9yIHRvIGRhdGEgdGFibGUgd2UgdXNlICdkYXRhJyB0eXBlIHF1ZXN0aW9uICAtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdEYXRhJ1wiPlxyXG4gICAgICAgICAgICA8YXBwLWN1c3RvbS10YWJsZSBbdGFibGVIZWFkZXJdPVwicXVlcy50YWJsZUhlYWRlclwiIFt0YWJsZURhdGFdPVwiZ2V0VGFibGVEYXRhKHF1ZXMpXCIgW3RhYmxlSW5kZXhdPVwiaVwiICh0YWJsZURhdGFDaGFuZ2UpPVwiZ2V0RGF0YSgkZXZlbnQpXCI+PC9hcHAtY3VzdG9tLXRhYmxlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0VtYWlsJ1wiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgWyhuZ01vZGVsKV09XCJxdWVzLmlucHV0XCIgW2lkXT1cInF1ZXMuSWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhclNRRXJyb3IocXVlcy5JZClcIlxyXG4gICAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLlF1ZXN0aW9uX19jIH19XCIgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdGaWxlJ1wiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJwaWN0dXJlLXVwbG9hZCBjdXN0b20tZmlsZS11cGxvYWQgYmdjb2xvci13XCIgZm9yPVwiZmlsZS11cGxvYWRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGljdHVyZS11cGxvYWQtY2hpbGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlLWltYWdlLW8gZmEtNXggaWNvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJcclxuICAgICAgICAgICAgICAgICAgICBmYSBmYS1wbHVzIGZhLTJ4XHJcbiAgICAgICAgICAgICAgICAgICAgcGljdHVyZS11cGxvYWQtY2hpbGRcclxuICAgICAgICAgICAgICAgICAgICBwaWMtdXBsb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbG9yXHJcbiAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBpZD1cImZpbGUtdXBsb2FkXCIgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCJ7eyBib29rRmxhZ0FjY2VwdCB9fVwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQscXVlcylcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDx1bCAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM/Lmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgIHF1ZXMuVHlwZV9fYyA9PT0gJ0ZpbGUnICYmXHJcbiAgICAgICAgICAgICAgICAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1xyXG4gICAgICAgICAgICAgIFwiIGNsYXNzPVwiYXR0YWNoLXVsaXN0IGNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwiYWxpZ24tbFwiPlxyXG4gICAgICAgICAgICAgICAge3sgYXR0YWNobWVudC5hdHRhY2htZW50TmFtZVxyXG4gICAgICAgICAgICAgICAgfX08c3BhbiBjbGFzcz1cImF0dGFjaC1saXN0XCIgKGNsaWNrKT1cImRlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5hdHRhY2htZW50SWQpXCI+WDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXl0LWJveFwiICpuZ0lmPVwicWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJmaWxlLXVwbG9hZGluZy1ib3hcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAyeC5wbmdcIiBjbGFzcz1cImljb24tZWRpdDFcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWRpbmctZmlsZS1uYW1lIG15dC1mb250MSBmb250LXdlaWdodDogbm9ybWFsO1wiPiB7eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZGVsZXRlJTQwMngucG5nXCIgY2xhc3M9XCJkZWxldGVJY29uXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5hdHRhY2htZW50SWQpXCIgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZS11cGxvYWQtYm94XCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPyAncmVkJyA6ICcnIH19XCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXQxXCIgLz5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZi1OYW1lXCI+e3sgcXVlcz8uUXVlc3Rpb25fX2MgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaWxlLWxhYmVsIFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiAjYzUyODFjO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICBBZGp1bnRhclxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiYXR0YWNobWVudFwiIHR5cGU9XCJmaWxlXCIgcGxhY2Vob2xkZXI9XCJUaWNrZXQga2F1ZmVuXCIgbXVsdGlwbGVcclxuICAgICAgICAgICAgICAgICAgICBhY2NlcHQ9XCIucGRmLCAucG5nLCAuanBnLCAuanBlZywgLmhlaWMsIC5hcHBsaWNhdGlvbi9wZGZcIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50LHF1ZXMpXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0blwiPlxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIFRhYmxlIC0tPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1RhYmxlJ1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLXRhYmxlIFxyXG4gICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCJcclxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuSWQpXCI+XHJcbiAgICAgICAgICAgIDwvYXBwLWN1c3RvbS10YWJsZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRHJvcGRvd24nXCIgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgPCEtLSBmb3IgY29tbW9uIGRyb3Bkb3duIC0tPlxyXG4gICAgICAgICAgICA8YXBwLWN1c3RvbS1kcm9wZG93biBbZnJvbVNoZW5nZWxdPVwicWJJdGVtLmlzU2hlbmdlbF9fY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicXVlcy5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthcGlNZXRhXT1cInF1ZXMuU3ViX1RleHRfX2NcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJxdWVzLk5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cInF1ZXMuaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInLS0tU2VsZWN0LS0tJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yTWVzc2FnZV09XCJxdWVzLkVycm9yX01lc3NhZ2VfX2NcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJxdWVzLmVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuSWQpXCI+XHJcbiAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1kcm9wZG93bj5cclxuICAgICAgICAgICAgPGFwcC1kcm9wZG93bi13aXRoLWZsYWcgKm5nSWY9XCJxdWVzLmlzRGVwZW5kZW50UGlja2xpc3QgJiYgIXF1ZXMuZHJvcERvd25Pbmx5XCIgIFtjZXJ0aWZpZWRdPVwicXVlcy5jZXJ0aWZpZWRGbGFnXCIgIFtKb2JQZXJmb3JtZXJDZXJ0aWZpY2F0ZXNdPVwicXVlcy5jZXJ0aWZpY2F0ZUxpc3RcIiAoZmxhZ0Ryb3BEb3duQ2hhbmdlKT1cImRlcGVuZGVudENoYW5nZSgkZXZlbnQpXCI+PC9hcHAtZHJvcGRvd24td2l0aC1mbGFnPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrIFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtPy5pbnB1dD8ubGVuZ3RoID4gMFwiPjwvaT5cclxuICAgICAgICAgIDwvZGl2PiAgICAgICAgICBcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLUxpc3Qgc3RhcnQtLT5cclxuICA8ZGl2ICpuZ0lmPVwibGlzdEZsYWdcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5lcnJvclwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1xyXG4gICAgICAgICAgICBjb2xvcjogcmVkO1wiPnt7cXVlc3Rpb25JdGVtPy5lcnJvcj8uZXJyb3JNc2d9fTwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteXQtYWxpZ24zXCIgW2NsYXNzXT1cIidjb2wtbWQtJyArIHF1ZXMuU2l6ZV9fYyArICcgcGFkZGluZ25vbmUnXCJcclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBxdWVzIG9mIGdldExvY2FsU3ViUXVlc3Rpb25zKHF1ZXN0aW9uSXRlbS5JZCk7bGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXMtZmxleCBteXQtZm9udDMgbXl0LWZvbnQ3XCI+e3sgcXVlcz8uUXVlc3Rpb25fX2MgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUZXh0J1wiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAnZGlzLWZsZXggZHQtbGluZSBkYXRlLWxpbmUgYm9va1RleHQgYm94b3V0bGluZSBteXQtZm9udDEnOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jLFxyXG4gICAgICAgICAgICAgdGV4dEJveDogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcclxuICAgICAgICAgICAgfVwiIGlkPVwidGV4dFwiIFtpZF09XCJxdWVzLnVuaXF1ZVN1YlFJZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyTG9jYWxTdWJRdWVzRXJyb3IocXVlcylcIlxyXG4gICAgICAgICAgICBzdHlsZS5ib3JkZXItY29sb3I9XCJ7eyBxdWVzLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiIHBsYWNlaG9sZGVyPVwie3sgcXVlcy5RdWVzdGlvbl9fYyB9fVwiXHJcbiAgICAgICAgICAgIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVowLTlcXHMuOjssP10vZywnJyk7XCIgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJcIiAqbmdJZj1cImFkZEZsYWdcIj5cclxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIkFkZChnZXRMb2NhbFN1YlF1ZXN0aW9ucyhxdWVzdGlvbkl0ZW0uSWQpKVwiIGNsYXNzPVwiYnRuXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzXCIgPjwvaT5BZGQ8L2J1dHRvbj5cclxuICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLUxpc3QgRW5kLS0+XHJcblxyXG4gIDwhLS0gQWN0aW9ucyAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiaW5kaXZpZHVhbEJvb2tCdXR0b25cIiBjbGFzcz1cImZsZXhlclwiPlxyXG4gICAgPCEtLSBCYWNrd2FyZCAvIEJhY2sgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYmFja2J1dHRvblwiIFtuZ0NsYXNzXT1cInsgJ2NvbC1tZC02JzogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiXHJcbiAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cInF1ZXN0aW9uU3RhY2subGVuZ3RoID4gMCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCI+XHJcbiAgICAgIDxkaXYgW25nQ2xhc3NdPVwie31cIj5cclxuICAgICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgJ2xlZnQtYnQnOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jLFxyXG4gICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGJ0bi1iYWNrLWNvbG9yJzpcclxuICAgICAgICAgICAgICAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1xyXG4gICAgICAgICAgfVwiIChjbGljayk9XCJoYW5kbGVCYWNrQ2xpY2soKVwiPlxyXG4gICAgICAgICAge3sgcWJJdGVtPy5CYWNrX19jIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBGb3J3YXJkIC8gTmV4dCAtLT5cclxuICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnY29sLW1kLTYnOiAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyB9XCI+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPGJ1dHRvbiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICdydXN0eSc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MsXHJcbiAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOlxyXG4gICAgICAgICAgICAgICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXHJcbiAgICAgICAgICB9XCIgKGNsaWNrKT1cImhhbmRsZU5leHRDbGljaygpXCI+XHJcbiAgICAgICAgICB7eyBxYkl0ZW0uTmV4dF9fYyB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gU3VtbWFyeSAtLT5cclxuPGRpdiAqbmdJZj1cInN1bW1hcnkgJiYgc3VtbWFyeS5sZW5ndGggPiAwXCIgaGVpZ2h0PVwiMTAwJSAhaW1wb3J0YW50XCIgY2xhc3M9XCJjb2wtbWQtMTJcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgJ2NvbC1tZC0xMic6IXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcclxuICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgPGgxIGNsYXNzPVwiaGVhZGVyMSBzdW1tYXJ5cGFkZFwiID57eyBxYkl0ZW0uU3ViVGl0bGVfX2MgfX08L2gxPiAgICAgICAgIFxyXG4gIDxkaXYgaWQ9XCJwcm9ncmVzczJcIiAqbmdJZj1cIiFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jICYmIHRoaXMuYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJyBcIj5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2Z1bGwtc3VtbWFyeSc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgcWEgb2Ygc3VtbWFyeVwiPlxyXG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBub246ICBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cclxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBzdW1tYXJ5OiAgIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxyXG4gICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcWJJdGVtLkVkaXRfX2NcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uJzogdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnIH1cIj5cclxuICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJ7IGFzdW06IHRoaXMuYWJJdGVtLlN0YXR1c19fYyA9PT0gJ0NvbXBsZXRlZCcgfVwiIChjbGljayk9XCJoYW5kbGVFZGl0Q2xpY2socWEucXVlc0lkKVwiXHJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFRleHQocWEucXVlc1ZhbHVlKVwiPnt7IHFhLnF1ZXNWYWx1ZSB9fTwvYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uRWRpdF9fY1wiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncXVlc3Rpb24nOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgIT0gJ0NvbXBsZXRlZCcgfVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAncXVlc3Rpb24nOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgPT09ICdDb21wbGV0ZWQnIH1cIlxyXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj5cclxuICAgICAgICAgICAgICAgIHt7IHFhLnF1ZXNWYWx1ZSB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFuc3dlclwiID5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09PSAnRmlsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDEucG5nXCIgY2xhc3M9XCJpY29uLWVkaXQtc3VtbWFyeVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHFhLmFuc1ZhbHVlIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwICE9ICdGaWxlJ1wiPnt7IHFhLmFuc1ZhbHVlIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLkVkaXRfX2MgJiYgdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjZGVkZGRkO1wiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZWRpdFwiIChjbGljayk9XCJoYW5kbGVFZGl0Q2xpY2socWEucXVlc0lkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zID09PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgc3R5bGU9XCJ3aWR0aDo1MCUhaW1wb3J0YW50O1wiIGNsYXNzPVwiaWNvbi1lZGl0aW9zXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zICE9PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwidGhpcy5hYkl0ZW0uU3RhdHVzX19jID09PSAnQ29tcGxldGVkJ1wiIGNsYXNzPVwiY29sLWxnLTEyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFuZWwtZ3JvdXAgcGFuZWwtZ3JvdXAtam9pbmVkXCIgaWQ9XCJlUFRXLWRldGFpbHNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGluZ1wiPlxyXG4gICAgICAgICAgPGg0IGNsYXNzPVwicGFuZWwtdGl0bGVcIj5cclxuICAgICAgICAgICAgPGEgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtcGFyZW50PVwiI2VQVFctZGV0YWlsc1wiIGhyZWY9XCIjY29sbGFwc2VPbmVcIiBjbGFzcz1cImNvbGxhcHNlZFwiPlxyXG4gICAgICAgICAgICAgIFBUVyBEZXRhaWxzXHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDwvaDQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBpZD1cImNvbGxhcHNlT25lXCIgY2xhc3M9XCJwYW5lbC1jb2xsYXBzZSBjb2xsYXBzZVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsLWJvZHlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc3VtbWFyeURhdGE7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpICUgMiA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTYgbS1iLTMwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7IGdldEtleShpdGVtKSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb250LXNpemVcIj57eyBnZXRWYWx1ZShpdGVtKSB8fCAnTi9BJyB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNlwiICpuZ0lmPVwic3VtbWFyeURhdGFbaSArIDFdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7IGdldEtleShzdW1tYXJ5RGF0YVtpICsgMV0pIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtc2l6ZVwiPnt7IGdldFZhbHVlKHN1bW1hcnlEYXRhW2kgKyAxXSkgfHwgJ04vQScgfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgaWQ9XCJwcm9ncmVzczJcIiAqbmdJZj1cInFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgXCI+XHJcbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnYmdDb2xvciBzdW1tYXJ5LXRvcCcgOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIiA+XHJcbiAgICAgIDxkaXYgaWQ9XCJwcm9ncmVzcy1zdW1tYXJ5XCIgKm5nSWY9XCJxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCI+XHJcbiAgICAgICAgPGNpcmNsZS1wcm9ncmVzcyBjbGFzcz1cInRpdGxlYmFyXCIgW3BlcmNlbnRdPVwidGhpcy5wZXJjZW50XCIgW3JhZGl1c109XCI0MFwiIFtzcGFjZV09XCItNFwiIFtvdXRlclN0cm9rZVdpZHRoXT1cIjRcIlxyXG4gICAgICAgIFtpbm5lclN0cm9rZVdpZHRoXT1cIjRcIiBbb3V0ZXJTdHJva2VDb2xvcl09XCInI2UwYjFiMCdcIiBbaW5uZXJTdHJva2VDb2xvcl09XCInI2U3ZThlYSdcIiBbYW5pbWF0aW9uXT1cInRydWVcIiBbYmFja2dyb3VuZFBhZGRpbmddPSBcIjBcIlxyXG4gICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPSBcIicjZGQyZTEzJ1wiIFtiYWNrZ3JvdW5kR3JhZGllbnRTdG9wQ29sb3JdPVwiJyNmOWJmYmQnXCIgW3RpdGxlQ29sb3JdPVwiJyNmM2VkZWQnXCIgXHJcbiAgICAgICAgY2xhc3M9XCJuZy1zdGFyLWluc2VydGVkXCIgW3RpdGxlXT1cInRoaXMucGVyY2VudCsnJSdcIiBbc2hvd1N1YnRpdGxlXT1cImZhbHNlXCIgW3Nob3dCYWNrZ3JvdW5kXT1cInRydWVcIiBbYW5pbWF0aW9uRHVyYXRpb25dPVwiMzAwXCJcclxuICAgICAgICBbc3RhcnRGcm9tWmVyb109XCJmYWxzZVwiIFtyZXNwb25zaXZlXT1cImZhbHNlXCIgPlxyXG4gICAgICA8L2NpcmNsZS1wcm9ncmVzcz5cclxuICAgICAgXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uU3VtbWFyeV9UZXh0X19jICYmIHFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIiBcclxuICAgICAgW25nQ2xhc3NdPVwieyBzdW1tYXJ5VGl0bGU6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxyXG4gICAgICAgIDxoMyBjbGFzcz1cInN1YlRpdGxlXCIgPnt7IHFiSXRlbS5TdW1tYXJ5X1RleHRfX2MgfX08L2gzPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJhYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnXCIgY2xhc3M9XCJzdWJUaXRsZTFcIiA+e3sgcWJJdGVtLlN1bW1hcnlfU3ViX1RleHRfX2N9fTwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCI+XHJcbiAgICAgIDxoMyBjbGFzcz1cInN1bW1hcnktaFwiPlxyXG4gICAgICAgIHt7IHFiSXRlbS5TdW1tYXJ5X1RleHRfX2MgfX1cclxuICAgICAgPC9oMz5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwieyAnZnVsbC1zdW1tYXJ5JzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyB9XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic3VtbWFyeS1ncm91cFRleHQgbXl0LWZvbnQyXCI+XHJcbiAgICAgIDwhLS0gPHA+SW5mb3JtZSBkZSBkYcOxbzwvcD4gLS0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHFhIG9mIHN1bW1hcnlcIiA+XHJcbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IG5vbjogIHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxyXG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IHN1bW1hcnk6IHRoaXMuYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJyAmJiAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyB9XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcWJJdGVtLkVkaXRfX2NcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uIHN1bS1xdWVzIG15dC1mb250MyBteXQtZm9udDgnOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgIT0gJ0NvbXBsZXRlZCcgfVwiPlxyXG4gICAgICAgICAgICAgIDxhIFtuZ0NsYXNzXT1cInsgYXN1bTogdGhpcy5hYkl0ZW0uU3RhdHVzX19jID09PSAnQ29tcGxldGVkJyB9XCIgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljayhxYS5xdWVzSWQpXCJcclxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+e3sgcWEucXVlc1ZhbHVlIH19PC9hPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5FZGl0X19jXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzdW0tcXVlcyBxdWVzdGlvbiBteXQtZm9udDMgbXl0LWZvbnQ4JzogdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnIH1cIj5cclxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ3N1bS1xdWVzMSBxdWVzdGlvbjEgc3VtbWFyeS1jb21wbGV0ZWQgbXl0LWZvbnQzIG15dC1mb250OCc6IHRoaXMuYWJJdGVtLlN0YXR1c19fYyA9PT0gJ0NvbXBsZXRlZCcgfVwiXHJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFRleHQocWEucXVlc1ZhbHVlKVwiPlxyXG4gICAgICAgICAgICAgICAge3sgcWEucXVlc1ZhbHVlIH19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLkVkaXRfX2MgJiYgdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjZGVkZGRkO1wiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJlZGl0XCIgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljayhxYS5xdWVzSWQpXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGV2aWNlSW5mby5vcyA9PT0gJ2lPUydcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZWRpdCU0MDJ4LnBuZ1wiIHN0eWxlPVwid2lkdGg6NTAlIWltcG9ydGFudDtcIiBjbGFzcz1cImljb24tZWRpdGlvc1wiLz5cclxuICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zICE9PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXRcIiAvPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFuc3dlciBcIiA+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgPT09ICdGaWxlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDEucG5nXCIgY2xhc3M9XCJpY29uLWVkaXQtc3VtbWFyeVwiIC8+XHJcbiAgICAgICAgICAgICAgICB7eyBxYS5hbnNWYWx1ZSB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwICE9ICdGaWxlJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgcWEuYW5zVmFsdWUgfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBBbnN3ZXIgQm9vayAtLT5cclxuICA8ZGl2IGNsYXNzPVwiZmxleGVyMVwiICpuZ0lmPVwiYWJJdGVtXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nSWY9XCJhYkl0ZW0uU3RhdHVzX19jID09ICdDb21wbGV0ZWQnXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cInsnYnRuLXRleHQnOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnkgYnRuLWxnIGJ0bi1ibG9jayBidG4tYmFjay1jb2xvcic6ICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jfVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2FuY2VsQ2xpY2soKVwiPlxyXG4gICAgICAgICAge3sgcWJJdGVtLkNhbmNlbF9fYyB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEdyb3VwIEFjdGlvbnMgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImFsaWduLWVkaXQtc3VibWl0XCIgKm5nSWY9XCJhYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgPGJ1dHRvbiBbbmdDbGFzc109XCJ7ICdidG4tdGV4dDInOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnkgYnRuLWxnIGJ0bi1ibG9jayBidG4tYmFjay1jb2xvcic6ICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIiBcclxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlU3VibWl0Q2xpY2soKVwiPlxyXG4gICAgICAgIHt7IHFiSXRlbS5TdWJtaXRfX2MgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cInsnZ3JleSc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGJ0bi1iYWNrLWNvbG9yJzogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2N9XCIgXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUJhY2tDbGlja05ldygpXCI+XHJcbiAgICAgICAge3sgcWJJdGVtLkVkaXRfX2MgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbjwvZGl2PiJdfQ==