@rangertechnologies/ngnxt 2.1.230 → 2.1.231

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.
@@ -1,5 +1,4 @@
1
1
  import { Component, Input, Output, EventEmitter, Inject } from '@angular/core';
2
- import { ChangeService } from '../../services/change.service';
3
2
  import { ErrorWrapper } from '../../model/errorWrapper';
4
3
  import { CommonModule, DOCUMENT } from '@angular/common';
5
4
  import { BehaviorSubject } from 'rxjs';
@@ -323,52 +322,6 @@ export class QuestionbookComponent {
323
322
  var htmlElement = element?.questionText;
324
323
  var textOnly = htmlElement?.replace(/<[^>]*>/g, '');
325
324
  element.questionText = textOnly;
326
- // HA 19DEC23 Logic for Question Styling(Slaesforce)
327
- // HA 28DEC23 Added styling and logics to load the book type questions
328
- if (element.type === 'Book') {
329
- if (element['qbReferenceQuestions']) {
330
- var qb = typeof element['qbReferenceQuestions'] === 'object' ? element['qbReferenceQuestions'] : JSON.parse(element['qbReferenceQuestions']);
331
- if (qb['questionbook'].style) {
332
- qb['questionbook'].style = typeof qb['questionbook'].style === 'string' ? JSON.parse('' + qb['questionbook'].style) : qb['questionbook'].style;
333
- }
334
- else {
335
- qb['questionbook'].style = this.qbItem.style;
336
- }
337
- // Book type question styling
338
- qb['questionbook'].style.labelClass = qb['questionbook'].style?.labelClass ? qb['questionbook'].style?.labelClass : "";
339
- qb['questionbook'].style.labelStyle = qb['questionbook'].style?.labelStyle ? qb['questionbook'].style?.labelStyle : "";
340
- qb['questionbook'].style.labelValueStyle = qb['questionbook'].style?.labelValueStyle ? qb['questionbook'].style.labelValueStyle : "";
341
- qb['questionbook'].style.inputClass = qb['questionbook'].style?.inputClass ? qb['questionbook'].style?.inputClass : "";
342
- qb['questionbook'].style.inputStyle = qb['questionbook'].style?.inputStyle ? qb['questionbook'].style?.inputStyle : "";
343
- qb['questionbook'].style.bookStyle = qb['questionbook'].style?.bookStyle ? qb['questionbook'].style?.bookStyle : "";
344
- qb['questionbook'].style.showLabel = qb['questionbook'].style?.showLabel ? qb['questionbook'].style?.showLabel : true;
345
- qb['questionbook'].style.questionStyle = qb['questionbook'].style?.questionStyle ? qb['questionbook'].style?.questionStyle : "";
346
- qb['langDirection'] = qb['questionbook'].style.direction ? qb['questionbook'].style?.direction : this.langDirection;
347
- // Loop for each question in the book
348
- qb['questionbook']?.subQuestions?.forEach(questionFromBook => {
349
- questionFromBook.style = questionFromBook.style ? questionFromBook.style : qb['questionbook'].style;
350
- questionFromBook.style.labelClass = questionFromBook.style?.labelClass ? questionFromBook.style?.labelClass : "";
351
- questionFromBook.style.labelStyle = questionFromBook.style?.labelStyle ? questionFromBook.style?.labelStyle : "";
352
- questionFromBook.style.labelValueStyle = questionFromBook.style?.labelValueStyle ? questionFromBook.style?.labelValueStyle : "";
353
- questionFromBook.style.inputClass = questionFromBook.style?.inputClass ? questionFromBook.style?.inputClass : "";
354
- questionFromBook.style.inputStyle = questionFromBook.style?.inputStyle ? questionFromBook.style?.inputStyle : "";
355
- questionFromBook.style.bookStyle = questionFromBook.style?.bookStyle ? questionFromBook.style?.bookStyle : "";
356
- questionFromBook.style.showLabel = questionFromBook.style?.showLabel ? questionFromBook.style?.showLabel : true;
357
- questionFromBook.style.questionStyle = questionFromBook.style?.questionStyle ? questionFromBook.style?.questionStyle : "";
358
- questionFromBook['langDirection'] = questionFromBook.style?.direction ? questionFromBook.style?.direction : this.langDirection;
359
- });
360
- element['qbItem'] = qb['questionbook'];
361
- }
362
- }
363
- element.style = element.style ? typeof element.style === 'string' ? JSON.parse('' + element?.style) : element?.style : this.qbItem?.style;
364
- element.style.labelClass = element.style?.labelClass ? element.style?.labelClass : "";
365
- element.style.labelStyle = element.style?.labelStyle ? element.style?.labelStyle : "";
366
- element.style.labelValueStyle = element.style?.labelValueStyle ? element.style.labelValueStyle : "";
367
- element.style.inputClass = element.style?.inputClass ? element.style?.inputClass : "";
368
- element.style.inputStyle = element.style.inputStyle ? element.style?.inputStyle : "";
369
- element.style.bookStyle = element.style?.bookStyle ? element.style?.bookStyle : "";
370
- element.style.showLabel = element.style?.showLabel ? element.style?.showLabel : true;
371
- element.style.questionStyle = element.style?.questionStyle ? element.style?.questionStyle : "";
372
325
  element['langDirection'] = element.style?.direction ? element.style?.direction : this.langDirection;
373
326
  //VD 02Aug24 dependent field show/hide changes
374
327
  // RS 09DEC24 Changed keys
@@ -785,11 +738,11 @@ export class QuestionbookComponent {
785
738
  return questions;
786
739
  }
787
740
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionbookComponent, deps: [{ token: i1.SalesforceService }, { token: i2.DataService }, { token: i3.ChangeService }, { token: i4.StorageService }, { token: i5.I18nService }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
788
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QuestionbookComponent, isStandalone: true, selector: "lib-questionbook", inputs: { qbItem: "qbItem", questionItem: "questionItem", translatedQuestions: "translatedQuestions", questions: "questions", errorFieldId: "errorFieldId", labelValue: "labelValue", token: "token", isEdit: "isEdit", dropDownData: "dropDownData", dataBind: "dataBind" }, outputs: { handleDropDown: "handleDropDown", handleQuestion: "handleQuestion", singleFieldChangeEmit: "singleFieldChangeEmit", hadleDropDownDependent: "hadleDropDownDependent", handleCalendarDate: "handleCalendarDate", handleCalendarEvent: "handleCalendarEvent" }, providers: [ChangeService], ngImport: i0, template: "<!-- HA 18JAN24 Added class for styling -->\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\n <div class=\"form-row\">\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\n <!-- RA09DEC24 Changed keys-->\n <div [class]=\"'col-lg-' + ques.size + ' paddingnone'\" *ngFor=\"let ques of questions;let i = index\"\n [id]=\"ques.id\" [dir]=\"ques.langDirection\" [style]=\"ques?.style?.questionStyle\">\n <!-- VD 09May24 is hide field change-->\n <div *ngIf=\"!ques.isHidden\" class=\"nxtInputContainer\">\n <!-- AP-28MAR25 Show label if enabled and not a Boolean type -->\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\"\n *ngIf=\"ques.style?.showLabel ? (ques.style?.showLabel && ques.type !== 'Boolean' && ques.type !== 'Text' && ques.type !== 'List' && ques?.type !== 'Dropdown' && ques.type !== 'RichTextArea' && ques.type !== 'DateTime' && ques.type !== 'Location' && ques.type !== 'Number' &&ques.type !== 'Email' && ques.type !== 'Date' && ques.type !== 'Time' && ques.type !== 'TextArea' && ques.type !== 'Label'): (ques.style?.showLabel !== false && ques.type !== 'Boolean' && ques.type !== 'Text' && ques.type !== 'List' && ques?.type !== 'Dropdown' && ques.type !== 'DateTime' && ques.type !== 'Location' && ques.type !== 'Number' && ques.type !== 'Date' && ques.type !== 'Time' && ques.type !== 'TextArea' && ques.type !== 'Label')\"\n [style]=\"ques.style?.labelStyle\">\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.style?.labelValueStyle\"\n [ngStyle]=\"{\n 'font-family': ques.font,\n 'color': ques.fontColor,\n 'font-size': ques.fontSize,\n 'font-weight': ques.fontWeight\n }\">{{\n removeCharacters(ques?.questionText) }}\n <div *ngIf=\"ques.isOptional && !ques.isReadOnly\" style=\"color: red;\">*</div>\n <!-- SKS13MAR25 only show on file type -->\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips help text -->\n <div *ngIf=\"ques.questionText && ques?.helpText && ques.type === 'File'\" class=\"icon\"\n [matTooltip]=\"ques?.helpText\" matTooltipClass=\"white-tooltip\">i</div>\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips for file requirements -->\n <div class=\"icon\" *ngIf=\"ques.fieldsMeta && ques.type === 'File'\"\n [matTooltip]=\"getFileRequirements(ques.fieldsMeta)\" matTooltipClass=\"white-tooltip\"\n style=\"margin-left: 4px;\">i</div>\n </span>\n </div>\n <!-- calendar -->\n <div *ngIf=\"ques.type === 'Calendar'\">\n <app-custom-calendar [question]=\"ques\" (eventSelected)=\"getCalendarEvent($event)\"\n (dateSelected)=\"getCurrentCalendar($event)\" (openModal)=\"openCalendarModal($event)\"\n (closeModal)=\"closeCalendarModal($event)\"></app-custom-calendar>\n <!-- model used in calendar component -->\n <app-custom-model *ngIf=\"isCalendarModalOpen\" [modalTitle]=\"calendarModalTitle\"\n [isModalOpen]=\"isCalendarModalOpen\" [modalSize]=\"calendarModalSize\"\n [saveButtonValue]=\"calendarSaveButtonValue\" [modalFooter]=\"modalCalendarModalFooter\"\n (saveButtonEmit)=\"onCalendarModalSave()\" (cancelButtonEmit)=\"closeCalendarModal($event)\">\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\"\n (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n </app-custom-model>\n </div>\n\n <!-- SKS11JUN25 for pick location -->\n <app-pick-location *ngIf=\"ques.type === 'Location'\" [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.selectedValue\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n\n <!-- SKS25MAR25 Image -->\n <div *ngIf=\"ques.type === 'Image'\" (mouseenter)=\"isImageHover = true;\"\n (mouseleave)=\"isImageHover = false;\">\n <div *ngIf=\"isImageHover\" style=\"display: flex; justify-content: end;\">\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageEdit(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\"\n fill=\"#6C757D\" />\n </svg>\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageDelete(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <img *ngIf=\"ques.isReadOnly\" [src]=\"ques.imageData\" />\n <div *ngIf=\"!ques.isReadOnly\" class=\"logo-container\">\n <!-- Logo preview area -->\n <div class=\"logo-preview\" *ngIf=\"ques.input\">\n <img [src]=\"ques.imageData\" />\n </div>\n\n <!-- Upload button -->\n <div *ngIf=\"!ques.imageData\" class=\"logo-upload-placeholder\">\n <label for=\"logo-upload-{{i}}\" class=\"logo-upload-label\">\n <img src=\"../assets/icons/Image.svg\" alt=\"Upload\" />\n <span>Upload Image</span>\n </label>\n <input type=\"file\" id=\"logo-upload-{{i}}\" accept=\"image/*\"\n (change)=\"fileChangeEvent(ques, $event)\" style=\"display: none;\" />\n </div>\n </div>\n </div>\n\n <!-- SKS21MAR25 line -->\n <hr *ngIf=\"ques.type === 'Line'\" class=\"custom-line\" style=\"display: inline-flex\" />\n <!-- SKS13MAR25 data table -->\n <nxt-datatable *ngIf=\"ques.type === 'Table'\" isEditRow isDeleteRow actionButton isButtons [question]=\"ques\" from=\"formBuilder\"\n (valueChange)=\"childEventCapture($event.data, ques); clearSQError(ques.id)\" [apiMeta]=\"ques.subText\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [tableConfig]=\"ques.tableConfig\" tableId=\"\" direction=\"ltr\" tableWidth=\"auto\">\n </nxt-datatable>\n <!-- list -->\n <nxt-search-box *ngIf=\"ques.type === 'List'\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [placeHolderText]=\"ques.question || ''\" [filterName]=\"ques.input\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (searchValueChange)=\"childEventCapture($event.value,$event.question)\">\n </nxt-search-box>\n\n <!-- Dropdown -->\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\n <app-custom-dropdown *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" [options]=\"ques.options\" [token]=\"token\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [selectedValue]=\"qbItem.isShengel ? ques.input : ques.selectedValue\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\" [referenceField]=\"ques.referenceField\"\n [readOnly]=\"ques.isReadOnly\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (valueChange)=\"childEventCapture($event.value,$event.question); clearSQError(ques.id)\">\n </app-custom-dropdown>\n <!-- // VD 02Aug24 custom-radio component -->\n <div *ngIf=\"ques.type === 'Radio' && ques?.options\" class=\"\">\n <app-custom-radio [options]=\"ques.options\" [question]=\"ques\" [token]=\"token\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\n [selectedValue]=\"ques.selectedValue\" [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\n [referenceField]=\"ques.referenceField\" [readOnly]=\"ques.isReadOnly\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (valueChange)=\"childEventCapture($event.value,$event.question); clearSQError(ques.id)\">\n </app-custom-radio>\n </div>\n\n <!-- Attachment / Files -->\n <app-file-upload *ngIf=\"ques.type === 'File'\" [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [allFiles]=\"ques.input\" (selectedFileData)=\"childEventCapture($event.value,$event.question)\"\n (deletedFileData)=\"deleteFile($event)\"\n ></app-file-upload>\n <!-- SKS11JUN25 Button -->\n <nxt-button\n *ngIf=\"ques.type === 'Button'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [btnHeight]=\"'50px'\" [btnWidth]=\"'150px'\" [buttonValue]=\"ques?.question\"\n (buttonClickEmit)=\"childEventCapture($event, ques)\"\n >\n </nxt-button>\n <!-- SKS11JUN25 book type -->\n <lib-questionbook *ngIf=\"ques.type === 'Book'\" [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\"\n [questions]=\"readQuestions(ques.qbReference, ques.qbReferenceQuestions)\"\n (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\n <!-- SKS11JUN25 Text, Email, label, number, Boolean, rich text editor, DateTime, Date, Time-->\n <nxt-input *ngIf=\"ques.type === 'Text' || ques.type === 'Email' || ques.type === 'Number' || ques.type === 'Label' || ques.type === 'Boolean' || ques.type === 'RichTextArea' || ques.type === 'DateTime' || ques.type === 'Date' || ques.type === 'Time' || ques.type === 'TextArea'\"\n [type]=\"ques.type === 'Text' ? 'text' : ques.type === 'Email' ? 'email' : ques.type === 'Number' ? 'number' : ques.type === 'Label' ? 'label' : ques.type === 'Boolean' ? 'checkbox' : ques.type === 'RichTextArea' ? 'richtext' : ques.type === 'DateTime' ? 'datetime' : ques.type === 'Date' ? 'date' : ques.type === 'Time' ? 'time' : ques.type === 'TextArea' ? 'textarea' : 'text'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [value]=\"ques.input\"\n [question]=\"ques\"\n [labelFont]=\"ques.font\"\n [label]=\"removeCharacters(ques?.questionText)\"\n [labelColor]=\"ques.fontColor\"\n [labelSize]=\"ques.fontSize\"\n [inputValueSize]=\"ques.fontSize\"\n [labelWeight]=\"ques.fontWeight\"\n [inputWeight]=\"ques.fontWeight\"\n [showLabel]=\"ques.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"ques.question\"\n [required]=\"ques.isOptional\" inputBgColor=\"#FAFAFA\"\n [inputId]=\"ques.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"ques.iconLeftSrc\" \n [minDate]=\"ques.minDate\"\n [rows]=\"3\"\n (inputValue)=\"childEventCapture($event.value,$event.question)\"\n >\n </nxt-input>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS25MAR25 Modal Overlay -->\n<div class=\"modal-overlay\" *ngIf=\"isImageEdit\">\n <div class=\"modal-content\">\n <span class=\"close-button\" (click)=\"closeModal()\">\u00D7</span>\n\n <!-- Image Editor -->\n <div *ngIf=\"selectedImageElement?.type === 'Image'\">\n <image-cropper *ngIf=\"selectedImageElement.imageData\" [imageBase64]=\"selectedImageElement.orgImageData\"\n [disabled]=\"false\" [alignImage]=\"alignImage\" [roundCropper]=\"roundCropper\" [backgroundColor]=\"'white'\"\n imageAltText=\"Alternative image text\" [allowMoveImage]=\"false\" [hideResizeSquares]=\"false\"\n [canvasRotation]=\"canvasRotation\" [aspectRatio]=\"aspectRatio\" [containWithinAspectRatio]=\"false\"\n [maintainAspectRatio]=\"false\" [cropperStaticWidth]=\"cropperStaticWidth\"\n [cropperStaticHeight]=\"cropperStaticHeight\" [cropperMinWidth]=\"cropperMinWidth\"\n [cropperMinHeight]=\"cropperMinHeight\" [cropperMaxWidth]=\"cropperMaxWidth\"\n [cropperMaxHeight]=\"cropperMaxHeight\" [resetCropOnAspectRatioChange]='true' [(cropper)]=\"cropper\"\n [(transform)]=\"transform\" [onlyScaleDown]=\"true\" output=\"blob\" format=\"png\"\n (imageCropped)=\"imageCropped($event)\" (cropperReady)=\"cropperReady($event)\">\n </image-cropper>\n\n <!-- Controls -->\n <div *ngIf=\"selectedImageElement.imageData\" class=\"controls\">\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateLeft()\" title=\"Rotate Left\">\u27F2</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateRight()\" title=\"Rotate Right\">\u27F3</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomOut()\" title=\"Zoom Out\">-</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomIn()\" title=\"Zoom In\">+</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveLeft()\" title=\"Move Left\">\u2190</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveRight()\" title=\"Move Right\">\u2192</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveUp()\" title=\"Move Up\">\u2191</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveDown()\" title=\"Move Down\">\u2193</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipHorizontal()\" [class.enabled]=\"transform.flipH\"\n title=\"Flip Horizontally\">\u2194</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipVertical()\" [class.enabled]=\"transform.flipV\"\n title=\"Flip Vertically\">\u2195</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"resetImage()\" title=\"Reset\">\u00D7</div>\n </div>\n </div>\n </div>\n</div>", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.col-lg-6,.col-lg-4{padding-left:5px!important;padding-right:5px!important}.form-row{display:-ms-flexbox!important;display:flex!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}}.icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background-color:#f5f5f5;border:1px solid #ddd;color:#666;margin-left:4px;font-size:12px;cursor:pointer!important}::ng-deep .mat-tooltip-panel{background:#fff!important}::ng-deep .mat-tooltip{background-color:#fff!important;color:#333!important;white-space:pre-line!important;line-height:1.5!important}.mat-tooltip{padding:8px 16px!important}::ng-deep .white-tooltip{white-space:pre-line!important;line-height:1.5!important}.nxtInputContainer div{padding-left:5px;padding-right:5px}.custom-line{width:100%;border:1px solid #000}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100}.modal-content{background:#fff;padding:20px;width:500px;max-width:90%;border-radius:8px;position:relative;text-align:center}.close-button{position:absolute;top:6px;right:6px;font-size:25px;cursor:pointer;z-index:10}.controls{display:flex;gap:5px;justify-content:center;margin-top:10px}.logo-icon{cursor:pointer;padding:5px;border-radius:5px;background:#d3d3d3}.logo-icon:hover{background:#a9a9a9}.enabled{background:#007bff;color:#fff}input[type=checkbox]{width:21px}.boolean-question{display:flex;align-items:center;gap:10px;padding-top:14px;padding-bottom:12px}.form-control[disabled]{border-radius:5px;background-color:#e9ecef!important}\n"], dependencies: [{ kind: "component", type: QuestionbookComponent, selector: "lib-questionbook", inputs: ["qbItem", "questionItem", "translatedQuestions", "questions", "errorFieldId", "labelValue", "token", "isEdit", "dropDownData", "dataBind"], outputs: ["handleDropDown", "handleQuestion", "singleFieldChangeEmit", "hadleDropDownDependent", "handleCalendarDate", "handleCalendarEvent"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: ImageCropperComponent, selector: "image-cropper", inputs: ["imageChangedEvent", "imageURL", "imageBase64", "imageFile", "imageAltText", "options", "cropperFrameAriaLabel", "output", "format", "autoCrop", "cropper", "transform", "maintainAspectRatio", "aspectRatio", "resetCropOnAspectRatioChange", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "allowMoveImage", "checkImageType", "alignImage", "disabled", "hidden"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed", "transformChange", "cropperChange"] }, { kind: "component", type: FileUploadComponent, selector: "app-file-upload", inputs: ["allFiles", "limitFileUploading", "mode", "isShowNoFileIcon", "question", "error"], outputs: ["selectedFileData", "deletedFileData"] }, { kind: "component", type: CustomRadioComponent, selector: "app-custom-radio", inputs: ["options", "question", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token", "mode"], outputs: ["valueChange"] }, { kind: "component", type: CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "question", "referenceField", "token", "mode"], outputs: ["valueChange"] }, { kind: "component", type: NxtButtonComponent, selector: "nxt-button", inputs: ["buttonValue", "buttonType", "type", "buttonDisable", "btnBgColor", "btnBorder", "btnTextColor", "btnHeight", "btnWidth", "btnIconLeftSrc", "btnIconRightSrc", "btnHoverBgColor", "btnHoverTextColor", "btnId", "dataDismiss", "buttonBorder", "modalToTrigger", "isImageSvg", "tabIndex", "buttonConfig", "mode"], outputs: ["buttonClickEmit"] }, { kind: "component", type: NxtSearchBox, selector: "nxt-search-box", inputs: ["placeHolderText", "question", "apiMeta", "id", "readOnly", "mode", "filterName"], outputs: ["searchValueChange"] }, { kind: "component", type: NxtDatatable, selector: "nxt-datatable", inputs: ["data", "tableFilterData", "columns", "withCheckBox", "searchBar", "tableSaveButton", "stickyColumn", "tableWidth", "actionColumHeader", "actionButton", "title", "isButtons", "buttonArray", "tableId", "isEditRow", "isDeleteRow", "addInlineRecord", "searchConfigs", "direction", "pagination", "actionButtonArray", "multipleFilter", "isPagination", "isNosIndicator", "isEditable", "from", "question", "rowTextSize", "rowTextColor", "apiMeta", "summaryRows", "summaryColumns", "isLoading", "tableConfig", "tableParams", "listViews", "mode", "languageCode"], outputs: ["tableRowClick", "onEditData", "saveButtonData", "onDeleteData", "buttonEmit", "hyperLinkEmit", "sideNavEmit", "actionButtonEmit", "columnSelected", "removeColumn", "valueChange", "selectedValues", "fileEmit", "NxtTableParamsEmit", "NxtTableFilterEmit", "NxtTableEmit"] }, { kind: "component", type: PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "mode", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: CustomModelComponent, selector: "app-custom-model", inputs: ["modalTitle", "isModalOpen", "modalSize", "saveButtonValue", "modalFooter"], outputs: ["saveButtonEmit", "cancelButtonEmit"] }, { kind: "component", type: CustomCalendarComponent, selector: "app-custom-calendar", inputs: ["allEvents", "question", "nxtId"], outputs: ["eventSelected", "dateSelected", "openModal", "closeModal"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i8.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: NxtInput, selector: "nxt-input", inputs: ["label", "labelFont", "labelWeight", "inputWeight", "labelSize", "inputValueSize", "labelColor", "showLabel", "svgHeight", "svgWidth", "type", "inputIconRightSrc", "inputIconLeftSrc", "required", "minLength", "pattern", "errorMessages", "maxLength", "placeholder", "inputBgColor", "inputBorder", "placeholderColor", "placeholderFont", "placeholderWeight", "placeholderSize", "inputTextColor", "inputHeight", "inputWidth", "inputId", "inputBorderSize", "inputConfig", "confPassVal", "confPass", "mode", "value", "question", "showSuggestion", "ariaOwns", "ariaHasPopup", "isLoading", "options", "minDate", "maxDate", "rows", "size"], outputs: ["valueChange", "inputValue", "onBlur", "onFocus", "toggleEmit", "nativeInputRef"] }] });
741
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QuestionbookComponent, isStandalone: true, selector: "lib-questionbook", inputs: { qbItem: "qbItem", questionItem: "questionItem", translatedQuestions: "translatedQuestions", questions: "questions", errorFieldId: "errorFieldId", labelValue: "labelValue", token: "token", isEdit: "isEdit", dropDownData: "dropDownData", dataBind: "dataBind" }, outputs: { handleDropDown: "handleDropDown", handleQuestion: "handleQuestion", singleFieldChangeEmit: "singleFieldChangeEmit", hadleDropDownDependent: "hadleDropDownDependent", handleCalendarDate: "handleCalendarDate", handleCalendarEvent: "handleCalendarEvent" }, ngImport: i0, template: "<!-- HA 18JAN24 Added class for styling -->\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\n <div class=\"form-row\">\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\n <!-- RA09DEC24 Changed keys-->\n <div [class]=\"'col-lg-' + ques.size + ' paddingnone'\" *ngFor=\"let ques of questions;let i = index\"\n [id]=\"ques.id\" [dir]=\"ques.langDirection\" [style]=\"ques?.style?.questionStyle\">\n <!-- VD 09May24 is hide field change-->\n <div *ngIf=\"!ques.isHidden\" class=\"nxtInputContainer\">\n <!-- AP-28MAR25 Show label if enabled and not a Boolean type -->\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\"\n *ngIf=\"ques.style?.showLabel ? (ques.style?.showLabel && ques.type !== 'Boolean' && ques.type !== 'Text' && ques.type !== 'List' && ques?.type !== 'Dropdown' && ques.type !== 'RichTextArea' && ques.type !== 'DateTime' && ques.type !== 'Location' && ques.type !== 'Number' &&ques.type !== 'Email' && ques.type !== 'Date' && ques.type !== 'Time' && ques.type !== 'TextArea' && ques.type !== 'Label'): (ques.style?.showLabel !== false && ques.type !== 'Boolean' && ques.type !== 'Text' && ques.type !== 'List' && ques?.type !== 'Dropdown' && ques.type !== 'DateTime' && ques.type !== 'Location' && ques.type !== 'Number' && ques.type !== 'Date' && ques.type !== 'Time' && ques.type !== 'TextArea' && ques.type !== 'Label')\"\n [style]=\"ques.style?.labelStyle\">\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.style?.labelValueStyle\"\n [ngStyle]=\"{\n 'font-family': ques.font,\n 'color': ques.fontColor,\n 'font-size': ques.fontSize,\n 'font-weight': ques.fontWeight\n }\">{{\n removeCharacters(ques?.questionText) }}\n <div *ngIf=\"ques.isOptional && !ques.isReadOnly\" style=\"color: red;\">*</div>\n <!-- SKS13MAR25 only show on file type -->\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips help text -->\n <div *ngIf=\"ques.questionText && ques?.helpText && ques.type === 'File'\" class=\"icon\"\n [matTooltip]=\"ques?.helpText\" matTooltipClass=\"white-tooltip\">i</div>\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips for file requirements -->\n <div class=\"icon\" *ngIf=\"ques.fieldsMeta && ques.type === 'File'\"\n [matTooltip]=\"getFileRequirements(ques.fieldsMeta)\" matTooltipClass=\"white-tooltip\"\n style=\"margin-left: 4px;\">i</div>\n </span>\n </div>\n <!-- calendar -->\n <div *ngIf=\"ques.type === 'Calendar'\">\n <app-custom-calendar [question]=\"ques\" (eventSelected)=\"getCalendarEvent($event)\"\n (dateSelected)=\"getCurrentCalendar($event)\" (openModal)=\"openCalendarModal($event)\"\n (closeModal)=\"closeCalendarModal($event)\"></app-custom-calendar>\n <!-- model used in calendar component -->\n <app-custom-model *ngIf=\"isCalendarModalOpen\" [modalTitle]=\"calendarModalTitle\"\n [isModalOpen]=\"isCalendarModalOpen\" [modalSize]=\"calendarModalSize\"\n [saveButtonValue]=\"calendarSaveButtonValue\" [modalFooter]=\"modalCalendarModalFooter\"\n (saveButtonEmit)=\"onCalendarModalSave()\" (cancelButtonEmit)=\"closeCalendarModal($event)\">\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\"\n (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n </app-custom-model>\n </div>\n\n <!-- SKS11JUN25 for pick location -->\n <app-pick-location *ngIf=\"ques.type === 'Location'\" [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.selectedValue\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n\n <!-- SKS25MAR25 Image -->\n <div *ngIf=\"ques.type === 'Image'\" (mouseenter)=\"isImageHover = true;\"\n (mouseleave)=\"isImageHover = false;\">\n <div *ngIf=\"isImageHover\" style=\"display: flex; justify-content: end;\">\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageEdit(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\"\n fill=\"#6C757D\" />\n </svg>\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageDelete(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <img *ngIf=\"ques.isReadOnly\" [src]=\"ques.imageData\" />\n <div *ngIf=\"!ques.isReadOnly\" class=\"logo-container\">\n <!-- Logo preview area -->\n <div class=\"logo-preview\" *ngIf=\"ques.input\">\n <img [src]=\"ques.imageData\" />\n </div>\n\n <!-- Upload button -->\n <div *ngIf=\"!ques.imageData\" class=\"logo-upload-placeholder\">\n <label for=\"logo-upload-{{i}}\" class=\"logo-upload-label\">\n <img src=\"../assets/icons/Image.svg\" alt=\"Upload\" />\n <span>Upload Image</span>\n </label>\n <input type=\"file\" id=\"logo-upload-{{i}}\" accept=\"image/*\"\n (change)=\"fileChangeEvent(ques, $event)\" style=\"display: none;\" />\n </div>\n </div>\n </div>\n\n <!-- SKS21MAR25 line -->\n <hr *ngIf=\"ques.type === 'Line'\" class=\"custom-line\" style=\"display: inline-flex\" />\n <!-- SKS13MAR25 data table -->\n <nxt-datatable *ngIf=\"ques.type === 'Table'\" isEditRow isDeleteRow actionButton isButtons [question]=\"ques\" from=\"formBuilder\"\n (valueChange)=\"childEventCapture($event.data, ques); clearSQError(ques.id)\" [apiMeta]=\"ques.subText\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [tableConfig]=\"ques.tableConfig\" tableId=\"\" direction=\"ltr\" tableWidth=\"auto\">\n </nxt-datatable>\n <!-- list -->\n <nxt-search-box *ngIf=\"ques.type === 'List'\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [placeHolderText]=\"ques.question || ''\" [filterName]=\"ques.input\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (searchValueChange)=\"childEventCapture($event.value,$event.question)\">\n </nxt-search-box>\n\n <!-- Dropdown -->\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\n <app-custom-dropdown *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" [options]=\"ques.options\" [token]=\"token\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [selectedValue]=\"qbItem.isShengel ? ques.input : ques.selectedValue\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\" [referenceField]=\"ques.referenceField\"\n [readOnly]=\"ques.isReadOnly\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (valueChange)=\"childEventCapture($event.value,$event.question); clearSQError(ques.id)\">\n </app-custom-dropdown>\n <!-- // VD 02Aug24 custom-radio component -->\n <div *ngIf=\"ques.type === 'Radio' && ques?.options\" class=\"\">\n <app-custom-radio [options]=\"ques.options\" [question]=\"ques\" [token]=\"token\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\n [selectedValue]=\"ques.selectedValue\" [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\n [referenceField]=\"ques.referenceField\" [readOnly]=\"ques.isReadOnly\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (valueChange)=\"childEventCapture($event.value,$event.question); clearSQError(ques.id)\">\n </app-custom-radio>\n </div>\n\n <!-- Attachment / Files -->\n <app-file-upload *ngIf=\"ques.type === 'File'\" [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [allFiles]=\"ques.input\" (selectedFileData)=\"childEventCapture($event.value,$event.question)\"\n (deletedFileData)=\"deleteFile($event)\"\n ></app-file-upload>\n <!-- SKS11JUN25 Button -->\n <nxt-button\n *ngIf=\"ques.type === 'Button'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [btnHeight]=\"'50px'\" [btnWidth]=\"'150px'\" [buttonValue]=\"ques?.question\"\n (buttonClickEmit)=\"childEventCapture($event, ques)\"\n >\n </nxt-button>\n <!-- SKS11JUN25 book type -->\n <lib-questionbook *ngIf=\"ques.type === 'Book'\" [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\"\n [questions]=\"readQuestions(ques.qbReference, ques.qbReferenceQuestions)\"\n (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\n <!-- SKS11JUN25 Text, Email, label, number, Boolean, rich text editor, DateTime, Date, Time-->\n <nxt-input *ngIf=\"ques.type === 'Text' || ques.type === 'Email' || ques.type === 'Number' || ques.type === 'Label' || ques.type === 'Boolean' || ques.type === 'RichTextArea' || ques.type === 'DateTime' || ques.type === 'Date' || ques.type === 'Time' || ques.type === 'TextArea'\"\n [type]=\"ques.type === 'Text' ? 'text' : ques.type === 'Email' ? 'email' : ques.type === 'Number' ? 'number' : ques.type === 'Label' ? 'label' : ques.type === 'Boolean' ? 'checkbox' : ques.type === 'RichTextArea' ? 'richtext' : ques.type === 'DateTime' ? 'datetime' : ques.type === 'Date' ? 'date' : ques.type === 'Time' ? 'time' : ques.type === 'TextArea' ? 'textarea' : 'text'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [value]=\"ques.input\"\n [question]=\"ques\"\n [labelFont]=\"ques.font\"\n [label]=\"removeCharacters(ques?.questionText)\"\n [labelColor]=\"ques.fontColor\"\n [labelSize]=\"ques.fontSize\"\n [inputValueSize]=\"ques.fontSize\"\n [labelWeight]=\"ques.fontWeight\"\n [inputWeight]=\"ques.fontWeight\"\n [showLabel]=\"ques.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"ques.question\"\n [required]=\"ques.isOptional\" inputBgColor=\"#FAFAFA\"\n [inputId]=\"ques.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"ques.iconLeftSrc\" \n [minDate]=\"ques.minDate\"\n [rows]=\"3\"\n (inputValue)=\"childEventCapture($event.value,$event.question)\"\n >\n </nxt-input>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS25MAR25 Modal Overlay -->\n<div class=\"modal-overlay\" *ngIf=\"isImageEdit\">\n <div class=\"modal-content\">\n <span class=\"close-button\" (click)=\"closeModal()\">\u00D7</span>\n\n <!-- Image Editor -->\n <div *ngIf=\"selectedImageElement?.type === 'Image'\">\n <image-cropper *ngIf=\"selectedImageElement.imageData\" [imageBase64]=\"selectedImageElement.orgImageData\"\n [disabled]=\"false\" [alignImage]=\"alignImage\" [roundCropper]=\"roundCropper\" [backgroundColor]=\"'white'\"\n imageAltText=\"Alternative image text\" [allowMoveImage]=\"false\" [hideResizeSquares]=\"false\"\n [canvasRotation]=\"canvasRotation\" [aspectRatio]=\"aspectRatio\" [containWithinAspectRatio]=\"false\"\n [maintainAspectRatio]=\"false\" [cropperStaticWidth]=\"cropperStaticWidth\"\n [cropperStaticHeight]=\"cropperStaticHeight\" [cropperMinWidth]=\"cropperMinWidth\"\n [cropperMinHeight]=\"cropperMinHeight\" [cropperMaxWidth]=\"cropperMaxWidth\"\n [cropperMaxHeight]=\"cropperMaxHeight\" [resetCropOnAspectRatioChange]='true' [(cropper)]=\"cropper\"\n [(transform)]=\"transform\" [onlyScaleDown]=\"true\" output=\"blob\" format=\"png\"\n (imageCropped)=\"imageCropped($event)\" (cropperReady)=\"cropperReady($event)\">\n </image-cropper>\n\n <!-- Controls -->\n <div *ngIf=\"selectedImageElement.imageData\" class=\"controls\">\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateLeft()\" title=\"Rotate Left\">\u27F2</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateRight()\" title=\"Rotate Right\">\u27F3</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomOut()\" title=\"Zoom Out\">-</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomIn()\" title=\"Zoom In\">+</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveLeft()\" title=\"Move Left\">\u2190</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveRight()\" title=\"Move Right\">\u2192</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveUp()\" title=\"Move Up\">\u2191</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveDown()\" title=\"Move Down\">\u2193</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipHorizontal()\" [class.enabled]=\"transform.flipH\"\n title=\"Flip Horizontally\">\u2194</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipVertical()\" [class.enabled]=\"transform.flipV\"\n title=\"Flip Vertically\">\u2195</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"resetImage()\" title=\"Reset\">\u00D7</div>\n </div>\n </div>\n </div>\n</div>", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.col-lg-6,.col-lg-4{padding-left:5px!important;padding-right:5px!important}.form-row{display:-ms-flexbox!important;display:flex!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}}.icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background-color:#f5f5f5;border:1px solid #ddd;color:#666;margin-left:4px;font-size:12px;cursor:pointer!important}::ng-deep .mat-tooltip-panel{background:#fff!important}::ng-deep .mat-tooltip{background-color:#fff!important;color:#333!important;white-space:pre-line!important;line-height:1.5!important}.mat-tooltip{padding:8px 16px!important}::ng-deep .white-tooltip{white-space:pre-line!important;line-height:1.5!important}.nxtInputContainer div{padding-left:5px;padding-right:5px}.custom-line{width:100%;border:1px solid #000}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100}.modal-content{background:#fff;padding:20px;width:500px;max-width:90%;border-radius:8px;position:relative;text-align:center}.close-button{position:absolute;top:6px;right:6px;font-size:25px;cursor:pointer;z-index:10}.controls{display:flex;gap:5px;justify-content:center;margin-top:10px}.logo-icon{cursor:pointer;padding:5px;border-radius:5px;background:#d3d3d3}.logo-icon:hover{background:#a9a9a9}.enabled{background:#007bff;color:#fff}input[type=checkbox]{width:21px}.boolean-question{display:flex;align-items:center;gap:10px;padding-top:14px;padding-bottom:12px}.form-control[disabled]{border-radius:5px;background-color:#e9ecef!important}\n"], dependencies: [{ kind: "component", type: QuestionbookComponent, selector: "lib-questionbook", inputs: ["qbItem", "questionItem", "translatedQuestions", "questions", "errorFieldId", "labelValue", "token", "isEdit", "dropDownData", "dataBind"], outputs: ["handleDropDown", "handleQuestion", "singleFieldChangeEmit", "hadleDropDownDependent", "handleCalendarDate", "handleCalendarEvent"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: ImageCropperComponent, selector: "image-cropper", inputs: ["imageChangedEvent", "imageURL", "imageBase64", "imageFile", "imageAltText", "options", "cropperFrameAriaLabel", "output", "format", "autoCrop", "cropper", "transform", "maintainAspectRatio", "aspectRatio", "resetCropOnAspectRatioChange", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "allowMoveImage", "checkImageType", "alignImage", "disabled", "hidden"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed", "transformChange", "cropperChange"] }, { kind: "component", type: FileUploadComponent, selector: "app-file-upload", inputs: ["allFiles", "limitFileUploading", "mode", "isShowNoFileIcon", "question", "error"], outputs: ["selectedFileData", "deletedFileData"] }, { kind: "component", type: CustomRadioComponent, selector: "app-custom-radio", inputs: ["options", "question", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token", "mode"], outputs: ["valueChange"] }, { kind: "component", type: CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "question", "referenceField", "token", "mode"], outputs: ["valueChange"] }, { kind: "component", type: NxtButtonComponent, selector: "nxt-button", inputs: ["buttonValue", "buttonType", "type", "buttonDisable", "btnBgColor", "btnBorder", "btnTextColor", "btnHeight", "btnWidth", "btnIconLeftSrc", "btnIconRightSrc", "btnHoverBgColor", "btnHoverTextColor", "btnId", "dataDismiss", "buttonBorder", "modalToTrigger", "isImageSvg", "tabIndex", "buttonConfig", "mode"], outputs: ["buttonClickEmit"] }, { kind: "component", type: NxtSearchBox, selector: "nxt-search-box", inputs: ["placeHolderText", "question", "apiMeta", "id", "readOnly", "mode", "filterName"], outputs: ["searchValueChange"] }, { kind: "component", type: NxtDatatable, selector: "nxt-datatable", inputs: ["data", "tableFilterData", "columns", "withCheckBox", "searchBar", "tableSaveButton", "stickyColumn", "tableWidth", "actionColumHeader", "actionButton", "title", "isButtons", "buttonArray", "tableId", "isEditRow", "isDeleteRow", "addInlineRecord", "searchConfigs", "direction", "pagination", "actionButtonArray", "multipleFilter", "isPagination", "isNosIndicator", "isEditable", "from", "question", "rowTextSize", "rowTextColor", "apiMeta", "summaryRows", "summaryColumns", "isLoading", "tableConfig", "tableParams", "listViews", "mode", "languageCode"], outputs: ["tableRowClick", "onEditData", "saveButtonData", "onDeleteData", "buttonEmit", "hyperLinkEmit", "sideNavEmit", "actionButtonEmit", "columnSelected", "removeColumn", "valueChange", "selectedValues", "fileEmit", "NxtTableParamsEmit", "NxtTableFilterEmit", "NxtTableEmit"] }, { kind: "component", type: PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "mode", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: CustomModelComponent, selector: "app-custom-model", inputs: ["modalTitle", "isModalOpen", "modalSize", "saveButtonValue", "modalFooter"], outputs: ["saveButtonEmit", "cancelButtonEmit"] }, { kind: "component", type: CustomCalendarComponent, selector: "app-custom-calendar", inputs: ["allEvents", "question", "nxtId"], outputs: ["eventSelected", "dateSelected", "openModal", "closeModal"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i8.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: NxtInput, selector: "nxt-input", inputs: ["label", "labelFont", "labelWeight", "inputWeight", "labelSize", "inputValueSize", "labelColor", "showLabel", "svgHeight", "svgWidth", "type", "inputIconRightSrc", "inputIconLeftSrc", "required", "minLength", "pattern", "errorMessages", "maxLength", "placeholder", "inputBgColor", "inputBorder", "placeholderColor", "placeholderFont", "placeholderWeight", "placeholderSize", "inputTextColor", "inputHeight", "inputWidth", "inputId", "inputBorderSize", "inputConfig", "confPassVal", "confPass", "mode", "value", "question", "showSuggestion", "ariaOwns", "ariaHasPopup", "isLoading", "options", "minDate", "maxDate", "rows", "size"], outputs: ["valueChange", "inputValue", "onBlur", "onFocus", "toggleEmit", "nativeInputRef"] }] });
789
742
  }
790
743
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionbookComponent, decorators: [{
791
744
  type: Component,
792
- args: [{ selector: 'lib-questionbook', providers: [ChangeService], standalone: true, imports: [
745
+ args: [{ selector: 'lib-questionbook', standalone: true, imports: [
793
746
  CommonModule,
794
747
  FormsModule, ImageCropperComponent, FileUploadComponent, CustomRadioComponent, CustomDropdownComponent, NxtButtonComponent, NxtSearchBox, NxtDatatable, PickLocationComponent, CustomModelComponent, CustomCalendarComponent, I18nPipe, MatTooltipModule, NxtInput
795
748
  ], template: "<!-- HA 18JAN24 Added class for styling -->\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\n <div class=\"form-row\">\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\n <!-- RA09DEC24 Changed keys-->\n <div [class]=\"'col-lg-' + ques.size + ' paddingnone'\" *ngFor=\"let ques of questions;let i = index\"\n [id]=\"ques.id\" [dir]=\"ques.langDirection\" [style]=\"ques?.style?.questionStyle\">\n <!-- VD 09May24 is hide field change-->\n <div *ngIf=\"!ques.isHidden\" class=\"nxtInputContainer\">\n <!-- AP-28MAR25 Show label if enabled and not a Boolean type -->\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\"\n *ngIf=\"ques.style?.showLabel ? (ques.style?.showLabel && ques.type !== 'Boolean' && ques.type !== 'Text' && ques.type !== 'List' && ques?.type !== 'Dropdown' && ques.type !== 'RichTextArea' && ques.type !== 'DateTime' && ques.type !== 'Location' && ques.type !== 'Number' &&ques.type !== 'Email' && ques.type !== 'Date' && ques.type !== 'Time' && ques.type !== 'TextArea' && ques.type !== 'Label'): (ques.style?.showLabel !== false && ques.type !== 'Boolean' && ques.type !== 'Text' && ques.type !== 'List' && ques?.type !== 'Dropdown' && ques.type !== 'DateTime' && ques.type !== 'Location' && ques.type !== 'Number' && ques.type !== 'Date' && ques.type !== 'Time' && ques.type !== 'TextArea' && ques.type !== 'Label')\"\n [style]=\"ques.style?.labelStyle\">\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.style?.labelValueStyle\"\n [ngStyle]=\"{\n 'font-family': ques.font,\n 'color': ques.fontColor,\n 'font-size': ques.fontSize,\n 'font-weight': ques.fontWeight\n }\">{{\n removeCharacters(ques?.questionText) }}\n <div *ngIf=\"ques.isOptional && !ques.isReadOnly\" style=\"color: red;\">*</div>\n <!-- SKS13MAR25 only show on file type -->\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips help text -->\n <div *ngIf=\"ques.questionText && ques?.helpText && ques.type === 'File'\" class=\"icon\"\n [matTooltip]=\"ques?.helpText\" matTooltipClass=\"white-tooltip\">i</div>\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips for file requirements -->\n <div class=\"icon\" *ngIf=\"ques.fieldsMeta && ques.type === 'File'\"\n [matTooltip]=\"getFileRequirements(ques.fieldsMeta)\" matTooltipClass=\"white-tooltip\"\n style=\"margin-left: 4px;\">i</div>\n </span>\n </div>\n <!-- calendar -->\n <div *ngIf=\"ques.type === 'Calendar'\">\n <app-custom-calendar [question]=\"ques\" (eventSelected)=\"getCalendarEvent($event)\"\n (dateSelected)=\"getCurrentCalendar($event)\" (openModal)=\"openCalendarModal($event)\"\n (closeModal)=\"closeCalendarModal($event)\"></app-custom-calendar>\n <!-- model used in calendar component -->\n <app-custom-model *ngIf=\"isCalendarModalOpen\" [modalTitle]=\"calendarModalTitle\"\n [isModalOpen]=\"isCalendarModalOpen\" [modalSize]=\"calendarModalSize\"\n [saveButtonValue]=\"calendarSaveButtonValue\" [modalFooter]=\"modalCalendarModalFooter\"\n (saveButtonEmit)=\"onCalendarModalSave()\" (cancelButtonEmit)=\"closeCalendarModal($event)\">\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\"\n (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n </app-custom-model>\n </div>\n\n <!-- SKS11JUN25 for pick location -->\n <app-pick-location *ngIf=\"ques.type === 'Location'\" [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.selectedValue\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n\n <!-- SKS25MAR25 Image -->\n <div *ngIf=\"ques.type === 'Image'\" (mouseenter)=\"isImageHover = true;\"\n (mouseleave)=\"isImageHover = false;\">\n <div *ngIf=\"isImageHover\" style=\"display: flex; justify-content: end;\">\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageEdit(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\"\n fill=\"#6C757D\" />\n </svg>\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageDelete(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <img *ngIf=\"ques.isReadOnly\" [src]=\"ques.imageData\" />\n <div *ngIf=\"!ques.isReadOnly\" class=\"logo-container\">\n <!-- Logo preview area -->\n <div class=\"logo-preview\" *ngIf=\"ques.input\">\n <img [src]=\"ques.imageData\" />\n </div>\n\n <!-- Upload button -->\n <div *ngIf=\"!ques.imageData\" class=\"logo-upload-placeholder\">\n <label for=\"logo-upload-{{i}}\" class=\"logo-upload-label\">\n <img src=\"../assets/icons/Image.svg\" alt=\"Upload\" />\n <span>Upload Image</span>\n </label>\n <input type=\"file\" id=\"logo-upload-{{i}}\" accept=\"image/*\"\n (change)=\"fileChangeEvent(ques, $event)\" style=\"display: none;\" />\n </div>\n </div>\n </div>\n\n <!-- SKS21MAR25 line -->\n <hr *ngIf=\"ques.type === 'Line'\" class=\"custom-line\" style=\"display: inline-flex\" />\n <!-- SKS13MAR25 data table -->\n <nxt-datatable *ngIf=\"ques.type === 'Table'\" isEditRow isDeleteRow actionButton isButtons [question]=\"ques\" from=\"formBuilder\"\n (valueChange)=\"childEventCapture($event.data, ques); clearSQError(ques.id)\" [apiMeta]=\"ques.subText\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [tableConfig]=\"ques.tableConfig\" tableId=\"\" direction=\"ltr\" tableWidth=\"auto\">\n </nxt-datatable>\n <!-- list -->\n <nxt-search-box *ngIf=\"ques.type === 'List'\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [placeHolderText]=\"ques.question || ''\" [filterName]=\"ques.input\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (searchValueChange)=\"childEventCapture($event.value,$event.question)\">\n </nxt-search-box>\n\n <!-- Dropdown -->\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\n <app-custom-dropdown *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" [options]=\"ques.options\" [token]=\"token\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [selectedValue]=\"qbItem.isShengel ? ques.input : ques.selectedValue\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\" [referenceField]=\"ques.referenceField\"\n [readOnly]=\"ques.isReadOnly\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (valueChange)=\"childEventCapture($event.value,$event.question); clearSQError(ques.id)\">\n </app-custom-dropdown>\n <!-- // VD 02Aug24 custom-radio component -->\n <div *ngIf=\"ques.type === 'Radio' && ques?.options\" class=\"\">\n <app-custom-radio [options]=\"ques.options\" [question]=\"ques\" [token]=\"token\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\n [selectedValue]=\"ques.selectedValue\" [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\n [referenceField]=\"ques.referenceField\" [readOnly]=\"ques.isReadOnly\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (valueChange)=\"childEventCapture($event.value,$event.question); clearSQError(ques.id)\">\n </app-custom-radio>\n </div>\n\n <!-- Attachment / Files -->\n <app-file-upload *ngIf=\"ques.type === 'File'\" [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [allFiles]=\"ques.input\" (selectedFileData)=\"childEventCapture($event.value,$event.question)\"\n (deletedFileData)=\"deleteFile($event)\"\n ></app-file-upload>\n <!-- SKS11JUN25 Button -->\n <nxt-button\n *ngIf=\"ques.type === 'Button'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [btnHeight]=\"'50px'\" [btnWidth]=\"'150px'\" [buttonValue]=\"ques?.question\"\n (buttonClickEmit)=\"childEventCapture($event, ques)\"\n >\n </nxt-button>\n <!-- SKS11JUN25 book type -->\n <lib-questionbook *ngIf=\"ques.type === 'Book'\" [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\"\n [questions]=\"readQuestions(ques.qbReference, ques.qbReferenceQuestions)\"\n (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\n <!-- SKS11JUN25 Text, Email, label, number, Boolean, rich text editor, DateTime, Date, Time-->\n <nxt-input *ngIf=\"ques.type === 'Text' || ques.type === 'Email' || ques.type === 'Number' || ques.type === 'Label' || ques.type === 'Boolean' || ques.type === 'RichTextArea' || ques.type === 'DateTime' || ques.type === 'Date' || ques.type === 'Time' || ques.type === 'TextArea'\"\n [type]=\"ques.type === 'Text' ? 'text' : ques.type === 'Email' ? 'email' : ques.type === 'Number' ? 'number' : ques.type === 'Label' ? 'label' : ques.type === 'Boolean' ? 'checkbox' : ques.type === 'RichTextArea' ? 'richtext' : ques.type === 'DateTime' ? 'datetime' : ques.type === 'Date' ? 'date' : ques.type === 'Time' ? 'time' : ques.type === 'TextArea' ? 'textarea' : 'text'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [value]=\"ques.input\"\n [question]=\"ques\"\n [labelFont]=\"ques.font\"\n [label]=\"removeCharacters(ques?.questionText)\"\n [labelColor]=\"ques.fontColor\"\n [labelSize]=\"ques.fontSize\"\n [inputValueSize]=\"ques.fontSize\"\n [labelWeight]=\"ques.fontWeight\"\n [inputWeight]=\"ques.fontWeight\"\n [showLabel]=\"ques.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"ques.question\"\n [required]=\"ques.isOptional\" inputBgColor=\"#FAFAFA\"\n [inputId]=\"ques.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"ques.iconLeftSrc\" \n [minDate]=\"ques.minDate\"\n [rows]=\"3\"\n (inputValue)=\"childEventCapture($event.value,$event.question)\"\n >\n </nxt-input>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS25MAR25 Modal Overlay -->\n<div class=\"modal-overlay\" *ngIf=\"isImageEdit\">\n <div class=\"modal-content\">\n <span class=\"close-button\" (click)=\"closeModal()\">\u00D7</span>\n\n <!-- Image Editor -->\n <div *ngIf=\"selectedImageElement?.type === 'Image'\">\n <image-cropper *ngIf=\"selectedImageElement.imageData\" [imageBase64]=\"selectedImageElement.orgImageData\"\n [disabled]=\"false\" [alignImage]=\"alignImage\" [roundCropper]=\"roundCropper\" [backgroundColor]=\"'white'\"\n imageAltText=\"Alternative image text\" [allowMoveImage]=\"false\" [hideResizeSquares]=\"false\"\n [canvasRotation]=\"canvasRotation\" [aspectRatio]=\"aspectRatio\" [containWithinAspectRatio]=\"false\"\n [maintainAspectRatio]=\"false\" [cropperStaticWidth]=\"cropperStaticWidth\"\n [cropperStaticHeight]=\"cropperStaticHeight\" [cropperMinWidth]=\"cropperMinWidth\"\n [cropperMinHeight]=\"cropperMinHeight\" [cropperMaxWidth]=\"cropperMaxWidth\"\n [cropperMaxHeight]=\"cropperMaxHeight\" [resetCropOnAspectRatioChange]='true' [(cropper)]=\"cropper\"\n [(transform)]=\"transform\" [onlyScaleDown]=\"true\" output=\"blob\" format=\"png\"\n (imageCropped)=\"imageCropped($event)\" (cropperReady)=\"cropperReady($event)\">\n </image-cropper>\n\n <!-- Controls -->\n <div *ngIf=\"selectedImageElement.imageData\" class=\"controls\">\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateLeft()\" title=\"Rotate Left\">\u27F2</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateRight()\" title=\"Rotate Right\">\u27F3</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomOut()\" title=\"Zoom Out\">-</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomIn()\" title=\"Zoom In\">+</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveLeft()\" title=\"Move Left\">\u2190</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveRight()\" title=\"Move Right\">\u2192</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveUp()\" title=\"Move Up\">\u2191</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveDown()\" title=\"Move Down\">\u2193</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipHorizontal()\" [class.enabled]=\"transform.flipH\"\n title=\"Flip Horizontally\">\u2194</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipVertical()\" [class.enabled]=\"transform.flipV\"\n title=\"Flip Vertically\">\u2195</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"resetImage()\" title=\"Reset\">\u00D7</div>\n </div>\n </div>\n </div>\n</div>", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.col-lg-6,.col-lg-4{padding-left:5px!important;padding-right:5px!important}.form-row{display:-ms-flexbox!important;display:flex!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}}.icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background-color:#f5f5f5;border:1px solid #ddd;color:#666;margin-left:4px;font-size:12px;cursor:pointer!important}::ng-deep .mat-tooltip-panel{background:#fff!important}::ng-deep .mat-tooltip{background-color:#fff!important;color:#333!important;white-space:pre-line!important;line-height:1.5!important}.mat-tooltip{padding:8px 16px!important}::ng-deep .white-tooltip{white-space:pre-line!important;line-height:1.5!important}.nxtInputContainer div{padding-left:5px;padding-right:5px}.custom-line{width:100%;border:1px solid #000}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100}.modal-content{background:#fff;padding:20px;width:500px;max-width:90%;border-radius:8px;position:relative;text-align:center}.close-button{position:absolute;top:6px;right:6px;font-size:25px;cursor:pointer;z-index:10}.controls{display:flex;gap:5px;justify-content:center;margin-top:10px}.logo-icon{cursor:pointer;padding:5px;border-radius:5px;background:#d3d3d3}.logo-icon:hover{background:#a9a9a9}.enabled{background:#007bff;color:#fff}input[type=checkbox]{width:21px}.boolean-question{display:flex;align-items:center;gap:10px;padding-top:14px;padding-bottom:12px}.form-control[disabled]{border-radius:5px;background-color:#e9ecef!important}\n"] }]
@@ -829,4 +782,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
829
782
  }], handleCalendarEvent: [{
830
783
  type: Output
831
784
  }] } });
832
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25ib29rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUE0RSxNQUFNLGVBQWUsQ0FBQztBQUlqSyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFHckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDOUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFD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Q0FBQyxDQUFDLENBQUMsT0FBTyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztZQUUxSSxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RixPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RixPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RixPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyRixPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFD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TTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIFZpZXdDaGlsZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIFNpbXBsZUNoYW5nZXMsIENvbXBvbmVudFJlZiwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUXVlc3Rpb24sIFF1ZXN0aW9uQm9vayB9IGZyb20gJy4uLy4uL3dyYXBwZXInO1xuaW1wb3J0IHsgU2FsZXNmb3JjZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2FsZXNmb3JjZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXJyb3JXcmFwcGVyIH0gZnJvbSAnLi4vLi4vbW9kZWwvZXJyb3JXcmFwcGVyJztcbi8vIEhBIDE5REVDMjMgaW1wb3J0ZWQgdHJhbnNsYXRpb24gc2VydmljZVxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9pMThuLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGVwZW5kZW5jeU1ldGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2RlcGVuZGVuY3lNZXRhJztcbmltcG9ydCB7IENyb3BwZXJQb3NpdGlvbiwgRGltZW5zaW9ucywgSW1hZ2VUcmFuc2Zvcm0gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ltYWdlLWNyb3BwZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEltYWdlQ3JvcHBlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvaW1hZ2UtY3JvcHBlci9jb21wb25lbnQvaW1hZ2UtY3JvcHBlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tUmFkaW9Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2N1c3RvbS1yYWRpby9jdXN0b20tcmFkaW8uY29tcG9uZW50JztcbmltcG9ydCB7IEZpbGVVcGxvYWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdXN0b21Ecm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3VzdG9tLWRyb3Bkb3duL2N1c3RvbS1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnh0U2VhcmNoQm94IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zZWFyY2gtYm94L3NlYXJjaC1ib3guY29tcG9uZW50JztcbmltcG9ydCB7IE54dERhdGF0YWJsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGlja0xvY2F0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9waWNrLWxvY2F0aW9uL3BpY2stbG9jYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbU1vZGVsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jdXN0b20tbW9kZWwvY3VzdG9tLW1vZGVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdXN0b21DYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3VzdG9tLWNhbGVuZGFyL2N1c3RvbS1jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSTE4blBpcGUgfSBmcm9tICcuLi8uLi9pMThuLnBpcGUnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgTnh0SW5wdXQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL254dC1pbnB1dC9ueHQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IE54dEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvYnV0dG9uL254dC1idXR0b24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXF1ZXN0aW9uYm9vaycsXG4gIHByb3ZpZGVyczogW0NoYW5nZVNlcnZpY2VdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLCBJbWFnZUNyb3BwZXJDb21wb25lbnQsIEZpbGVVcGxvYWRDb21wb25lbnQsIEN1c3RvbVJhZGlvQ29tcG9uZW50LCBDdXN0b21Ecm9wZG93bkNvbXBvbmVudCwgTnh0QnV0dG9uQ29tcG9uZW50LCBOeHRTZWFyY2hCb3gsIE54dERhdGF0YWJsZSwgUGlja0xvY2F0aW9uQ29tcG9uZW50LCBDdXN0b21Nb2RlbENvbXBvbmVudCwgQ3VzdG9tQ2FsZW5kYXJDb21wb25lbnQsIEkxOG5QaXBlLCBNYXRUb29sdGlwTW9kdWxlLCBOeHRJbnB1dFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVlc3Rpb25ib29rLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbmJvb2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBxYkl0ZW06IFF1ZXN0aW9uQm9vaztcbiAgQElucHV0KCkgcXVlc3Rpb25JdGVtOiBRdWVzdGlvbjtcbiAgQElucHV0KCkgdHJhbnNsYXRlZFF1ZXN0aW9uczogYW55W10gPSBbXSAgLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgQElucHV0KCkgcXVlc3Rpb25zOiBhbnlbXTtcbiAgQElucHV0KCkgZXJyb3JGaWVsZElkOiBhbnk7XG4gIEBJbnB1dCgpIGxhYmVsVmFsdWU6IHN0cmluZztcbiAgQElucHV0KCkgdG9rZW46IHN0cmluZzsgLy8gVkQgMTlKQU4yNCAtIGdldHRpbmcgdG9rZW4gYXMgaW5wdXRcbiAgQElucHV0KCkgaXNFZGl0OiBib29sZWFuO1xuICBAT3V0cHV0KCkgaGFuZGxlRHJvcERvd246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVRdWVzdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTsgLy8gVkQgMTlKdWwwMSAtIGdldCB1cGRhdGVkIHF1ZXN0aW9uXG4gIEBPdXRwdXQoKSBzaW5nbGVGaWVsZENoYW5nZUVtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIGRyb3BEb3duRGF0YTogYW55O1xuICBASW5wdXQoKSBkYXRhQmluZDogYW55O1xuICAvL0BWaWV3Q2hpbGQoQ29tcG9uZW50aG9zdERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgZHluYW1pY0hvc3Q6IENvbXBvbmVudGhvc3REaXJlY3RpdmU7XG4gIHN1YlF1ZXN0aW9uczogUXVlc3Rpb25bXTtcbiAgc2VsZWN0ZWRGaWxlRGF0YTogYW55W10gPSBbXTtcbiAgbG9hZENvbXBvbmVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgLy8gSEEgMjhERUMyMyBBZGRlZCBzdHlsaW5nIGFuZCBsb2dpY3MgdG8gbG9hZCB0aGUgYm9vayB0eXBlIHF1ZXN0aW9ucyBcbiAgcWJSZWY6IFF1ZXN0aW9uQm9vaztcbiAgLy8gIEhBIDE5REVDMjMgRGVjbGFyYXRpb24gZm9yIFNhbGVzZm9yY2UgU3R5bGluZ1xuICBzdHlsZTogYW55O1xuICBsYW5nRGlyZWN0aW9uID0gJ2x0cic7XG4gIGJvb2tTdHlsZTogYW55O1xuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgaXNJbWFnZUVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VsZWN0ZWRJbWFnZUVsZW1lbnQ6IGFueTtcbiAgdHJhbnNmb3JtOiBJbWFnZVRyYW5zZm9ybSA9IHtcbiAgICB0cmFuc2xhdGVVbml0OiAncHgnLFxuICAgIHNjYWxlOiAxLFxuICAgIHJvdGF0ZTogMCxcbiAgICBmbGlwSDogZmFsc2UsXG4gICAgZmxpcFY6IGZhbHNlLFxuICAgIHRyYW5zbGF0ZUg6IDAsXG4gICAgdHJhbnNsYXRlVjogMFxuICB9O1xuICBjYW52YXNSb3RhdGlvbiA9IDA7XG4gIGNyb3BwZXI/OiBDcm9wcGVyUG9zaXRpb247XG4gIGxvYWRpbmcgPSBmYWxzZTtcbiAgY3JvcHBlck1heEhlaWdodCA9IDA7XG4gIGNyb3BwZXJNYXhXaWR0aCA9IDA7XG4gIGNyb3BwZXJNaW5IZWlnaHQgPSAwO1xuICBjcm9wcGVyTWluV2lkdGggPSAwO1xuICBjcm9wcGVyU3RhdGljV2lkdGggPSAwO1xuICBjcm9wcGVyU3RhdGljSGVpZ2h0ID0gMDtcbiAgYXNwZWN0UmF0aW8gPSA0IC8gMztcbiAgcm91bmRDcm9wcGVyID0gZmFsc2U7XG4gIGltYWdlQ2hhbmdlZEV2ZW50OiBFdmVudCB8IG51bGwgPSBudWxsO1xuICBhbGlnbkltYWdlID0gJ2NlbnRlcicgYXMgY29uc3Q7XG4gIGlzSW1hZ2VIb3ZlciA9IGZhbHNlO1xuXG4gIC8vIFJTIDE3SkFOMjAyNVxuICAvL0Zvcm1hdHMgYW5kIHJldHVybnMgZmlsZSB1cGxvYWQgcmVxdWlyZW1lbnRzIGZyb20gYSBKU09OIHN0cmluZ1xuICBnZXRGaWxlUmVxdWlyZW1lbnRzKGZpZWxkc01ldGE6IGFueSk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldGFEYXRhID0gdHlwZW9mIGZpZWxkc01ldGEgPT09ICdvYmplY3QnICA/ICBmaWVsZHNNZXRhIDogSlNPTi5wYXJzZShmaWVsZHNNZXRhKSA7XG4gICAgICBjb25zdCBmaWxlQ29uZmlnID0gbWV0YURhdGFbMF07XG5cbiAgICAgIGlmICghZmlsZUNvbmZpZykgcmV0dXJuICcnO1xuXG4gICAgICBjb25zdCByZXF1aXJlbWVudHMgPSBbXTtcblxuICAgICAgaWYgKGZpbGVDb25maWcuYWxsb3dlZFR5cGVzPy5sZW5ndGgpIHtcbiAgICAgICAgcmVxdWlyZW1lbnRzLnB1c2goYEFjY2VwdGVkIGZvcm1hdHM6ICR7ZmlsZUNvbmZpZy5hbGxvd2VkVHlwZXMuam9pbignLCAnKX1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGVDb25maWcubWF4RmlsZVNpemUpIHtcbiAgICAgICAgcmVxdWlyZW1lbnRzLnB1c2goYE1heGltdW0gc2l6ZSBwZXIgZmlsZTogJHtmaWxlQ29uZmlnLm1heEZpbGVTaXplIC8gMTA0ODU3Nn1NQmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZUNvbmZpZy5tYXhGaWxlcykge1xuICAgICAgICByZXF1aXJlbWVudHMucHVzaChgTWF4aW11bSBudW1iZXIgb2YgZmlsZXM6ICR7ZmlsZUNvbmZpZy5tYXhGaWxlc31gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcXVpcmVtZW50cy5tYXAocmVxID0+IHJlcS50cmltKCkpLmpvaW4oJ1xcbicpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIGZpZWxkc01ldGE6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuICBAT3V0cHV0KCkgaGFkbGVEcm9wRG93bkRlcGVuZGVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xuICBAT3V0cHV0KCkgaGFuZGxlQ2FsZW5kYXJEYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhhbmRsZUNhbGVuZGFyRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgYm9va1F1ZXN0aW9uc01hcDogYW55ID0gbmV3IE1hcCgpO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNmU2VydmljZTogU2FsZXNmb3JjZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VTZXJ2aWNlOiBDaGFuZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlLFxuICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50XG4gICkge1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gVkQgMTNTZXAyNCBjaGFuZ2VzXG4gICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xuICAgIC8vIFZEIHNlcDEzMjQgY2hhbmdlcyAtIHByb2Nlc3MgZGF0YSB3aGVuIGRhdGFiaW5kIHZhbHVlIGNoYW5nZVxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5jaGFuZ2VTZXJ2aWNlLmN1c3RvbUNoYW5nZSQuc3Vic2NyaWJlKFxuICAgICAgKGNoYW5nZVZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChjaGFuZ2VWYWx1ZSA9PSAnZGF0YUJpbmQnKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBTS1MyME1BUjI1IEVuc3VyZSB0aGUgY2hpbGQgY29tcG9uZW50IGlzIGF2YWlsYWJsZSBiZWZvcmUgY2FsbGluZyB0aGUgbWV0aG9kXG4gICAgIC8vIEFQLTI2TUFSMjUgRW5zdXJlIHF1ZXMuc3ViVGV4dCBpcyBhbHdheXMgYW4gb2JqZWN0IGJ5IHBhcnNpbmcgaXQgaWYgaXQncyBhIHN0cmluZ1xuICAgIC8vICBBUC0yOE1BUjI1IEFkZCBCb29sZWFuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXMgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZVF1ZXMocXVlcyk7XG4gICAgICAgIGxldCBpbnB1dDogYW55O1xuICAgICAgICBpZiAocXVlcy50eXBlID09ICdEcm9wZG93bicgfHwgcXVlcy50eXBlID09ICdSYWRpbycgfHwgcXVlcy50eXBlID09ICdMb2NhdGlvbicpIHtcbiAgICAgICAgICBpbnB1dCA9IHt9XG4gICAgICAgICAgaW5wdXRbJ3ZhbHVlT2JqJ10gPSBxdWVzLmlucHV0ICB8fCBxdWVzLmRlZmF1bHRWYWx1ZSB8fCBudWxsXG4gICAgICAgICAgaW5wdXRbJ3JlZmVyZW5jZUZpZWxkJ10gPSBxdWVzLnJlZmVyZW5jZUZpZWxkIHx8IG51bGxcbiAgICAgICAgICBpbnB1dFsnZnJvbVF1ZXN0aW9uSWQnXSA9IHF1ZXMuaWQgfHwgbnVsbFxuICAgICAgICB9IGVsc2UgaWYgKHF1ZXMudHlwZSA9PSAnRGF0ZScgfHwgcXVlcy50eXBlID09ICdEYXRlVGltZScpIHtcbiAgICAgICAgICBpbnB1dCA9IHt9XG4gICAgICAgICAgaW5wdXQgPSBxdWVzLmlucHV0IHx8IHF1ZXMuZGVmYXVsdFZhbHVlIHx8IG51bGxcbiAgICAgICAgfSBcbiAgICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09ICdJbWFnZScpIHtcbiAgICAgICAgICBpbnB1dCA9IHF1ZXMub3JnSW1hZ2VEYXRhXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihxdWVzLnR5cGUgPT09ICdCb29sZWFuJyl7XG4gICAgICAgICAgaW5wdXQgPSB0eXBlb2YgcXVlcy5pbnB1dCAhPT0gJ3VuZGVmaW5lZCcgPyBxdWVzLmlucHV0ID09PSB0cnVlIHx8IHF1ZXMuaW5wdXQgPT09ICd0cnVlJyA6IHR5cGVvZiBxdWVzLmRlZmF1bHRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcgPyBxdWVzLmRlZmF1bHRWYWx1ZSA9PT0gdHJ1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZSA9PT0gJ3RydWUnIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaW5wdXQgPSBxdWVzLmlucHV0IHx8IHF1ZXMuZGVmYXVsdFZhbHVlIHx8IG51bGxcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoaWxkRXZlbnRDYXB0dXJlKGlucHV0LCBxdWVzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGFzeW5jIGhhbmRsZVF1ZXMocXVlczogYW55KSB7XG4gICAgLy8gSEEgMTktSkFOLTI0IElmIGNvbmRpdGlvbiBpcyBmb3IgYmluZC1pbiwgY29ycmVjdGlvblxuICAgIC8vIEhBIDA5RkVCMjQgQWRkaW5nIGNvbmRpdGlvbiB0byBhdm9pZCB1bmRlZmluZWQgZXJyb3JcbiAgICBpZiAodGhpcy5kYXRhQmluZCAmJiBPYmplY3Qua2V5cyh0aGlzLmRhdGFCaW5kKS5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgcmVzdWx0ID0gdGhpcy5mbGF0dGVuT2JqZWN0KHRoaXMuZGF0YUJpbmQpXG4gICAgICBmb3IgKGxldCBba2V5LCB2YWxdIG9mIHJlc3VsdCkge1xuICAgICAgICBsZXQgdmFsdWU6IGFueSA9IHZhbDtcbiAgICAgICAgaWYgKHF1ZXMucmVmZXJlbmNlRmllbGQgPT09IGtleSkge1xuICAgICAgICAgIGlmIChxdWVzLnR5cGUgPT09ICdEcm9wZG93bicgfHwgcXVlcy50eXBlID09PSAnUmFkaW8nKSB7XG4gICAgICAgICAgICAvLyB0aGlzLnNxT3B0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgLy8gICBpZiAoZWxlbWVudFsncmVmZXJlbmNlRmllbGQnXSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAvLyAgICAgZWxlbWVudFsnaW5wdXQnXSA9IHF1ZXMuaW5wdXQgPSB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIC8vICAgICBlbGVtZW50WydzZWxlY3RlZFZhbHVlJ10gPSBxdWVzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEhBIDI0SkFOMjQgVG8gYmluZC1pbiBEYXRlIGFuZCBEYXRlVGltZVxuICAgICAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ0RhdGUnIHx8IHF1ZXMudHlwZSA9PSAnRGF0ZVRpbWUnKSB7XG4gICAgICAgICAgICBxdWVzLmlucHV0ID0gbmV3IERhdGUodmFsdWU/LnRvU3RyaW5nKCkpICB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSEEgMTJGRUIyNCBUbyBiaW5kLWluIExvY2F0aW9uIFR5cGVcbiAgICAgICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdMb2NhdGlvbicpIHtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIHF1ZXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlWydhZGRyZXNzJ10gPyB2YWx1ZVsnYWRkcmVzcyddIDogdmFsdWUgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlcyBmb3IgZGF0YSBiaW5kSW5cbiAgICAgICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdDYWxlbmRhcicpIHtcbiAgICAgICAgICAgIGxldCBlbnRyaWVzID0gdHlwZW9mIHF1ZXNbJ2ZpZWxkc01ldGEnXSA9PT0gJ29iamVjdCcgPyBxdWVzWydmaWVsZHNNZXRhJ10gOiBKU09OLnBhcnNlKHF1ZXNbJ2ZpZWxkc01ldGEnXSk7XG4gICAgICAgICAgICBpZiAoZW50cmllcykge1xuICAgICAgICAgICAgICBsZXQgcmVmZXJlbmNlUXVlc3Rpb25zID0gW107XG4gICAgICAgICAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5xdWVzdGlvblJlZmVyZW5jZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcVJlZmVyZW5jZSA9IEpTT04ucGFyc2UoZWxlbWVudC5xdWVzdGlvblJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVF1ZXN0aW9ucy5wdXNoKHFSZWZlcmVuY2U/LnF1ZXN0aW9uKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlUXVlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZT8uZm9yRWFjaChjYWxlbmRhckFycmF5ID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoY2FsZW5kYXJBcnJheS5kYXRlKTtcbiAgICAgICAgICAgICAgICAgIGNhbGVuZGFyQXJyYXkuZW50cmllcy5mb3JFYWNoKGlucHV0RW50cnkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoaW5wdXRFbnRyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VRdWVzdGlvbnMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQucmVmZXJlbmNlRmllbGQgPT0gaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ0RhdGUnIHx8IGZpZWxkLnR5cGUgPT0gJ0RhdGVUaW1lJyB8fCBmaWVsZC50eXBlID09ICdUaW1lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmlucHV0ID0gbmV3IERhdGUodj8udG9TdHJpbmcoKSkgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gaWYgKGZpZWxkLnR5cGUgPT09ICdEcm9wZG93bicgfHwgZmllbGQudHlwZSA9PT0gJ1JhZGlvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnNlbGVjdGVkVmFsdWUgPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmlucHV0ID0gdiAgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuaW5wdXQgPSB2IHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5hZGRFdmVudChkYXRlLCByZWZlcmVuY2VRdWVzdGlvbnMpOy8vU0tTIDI3U0VQMjQgZWFjaCBldmVudCBhZGRlZCB0byBhbGxFdmVudHMgYXJyYXlcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmFkZEV2ZW50KGRhdGUscmVmZXJlbmNlUXVlc3Rpb25zKTsgLy90aGlzIGlzIG9ubHkgbGFzdCBldmVudCBhZGRlZCB0byBhbGxFdmVudHMgYXJyYXlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBWRCAyMyBPY3QyNCAtIGZpbGUgdHlwZSBjaGFuZ2VzXG4gICAgICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09PSAnRmlsZScpIHtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSBbXTtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBxdWVzLmlucHV0ID0gdmFsdWUgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgcXVlc3Rpb24gPSB7fTtcbiAgICAgIHF1ZXN0aW9uWydpZCddID0gcXVlcy5pZDtcbiAgICAgIHF1ZXN0aW9uWydpbnB1dCddID0gcXVlcy5pbnB1dCB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgIC8vIEhBIDEyRkVCMjQgVG8gYmluZC1vdXQgTG9jYXRpb24gVHlwZVxuICAgICAgaWYgKHF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJykge1xuICAgICAgICBxdWVzdGlvblsnaW5wdXQnXSA9IHF1ZXMuaW5wdXQgPyBxdWVzLmlucHV0IDogcXVlcy5zZWxlY3RlZFZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChxdWVzLnR5cGUgPT0gJ0ZpbGUnKSB7XG4gICAgICAgIC8vIFZEIDIzIE9jdDI0IC0gZmlsZSB0eXBlIGNoYW5nZXNcbiAgICAgICAgcXVlc3Rpb25bJ2lucHV0J10gPSBxdWVzLmlucHV0ID8gcXVlcy5pbnB1dCA6IHF1ZXMuZGVmYXVsdFZhbHVlIHx8IFtdO1xuICAgICAgfVxuICAgICAgcXVlc3Rpb25bJ3R5cGUnXSA9IHF1ZXMudHlwZTtcbiAgICAgIHF1ZXN0aW9uWydxdWVzdGlvbk51bWJlciddID0gcXVlcy5xdWVzdGlvbk51bWJlcjtcbiAgICAgIHF1ZXN0aW9uWydyZWZlcmVuY2VGaWVsZCddID0gcXVlcz8ucmVmZXJlbmNlRmllbGQ7XG4gICAgICBxdWVzdGlvblsnc2VsZWN0ZWRWYWx1ZSddID0gcXVlcz8uc2VsZWN0ZWRWYWx1ZTsgIC8vIE1SIDMxSkFOMjQgTmVlZCB0byBwYXNzIHRoZSBzZWxlY3RlZCB2YWx1ZSB0b29cbiAgICB9XG4gIH1cbiAvLyBTS1MyME1BUjI1IGZsYXR0ZW5pbmcgbmVzdGVkIG9iamVjdHMsIG1hcHBpbmcgdmFsdWVzIHVzaW5nICByZWZlcmVuY2VGaWVsZFxuIGZsYXR0ZW5PYmplY3Qob2JqOiBhbnksIHBhcmVudEtleSA9ICcnLCBpbmNsdWRlT2JqZWN0cyA9IHRydWUpIHtcbiAgbGV0IHJlc3VsdDogYW55W10gPSBbXTtcblxuICBmb3IgKGxldCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICBsZXQgbmV3S2V5ID0gcGFyZW50S2V5ID8gYCR7cGFyZW50S2V5fS4ke2tleX1gIDoga2V5O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0LnB1c2goW25ld0tleSwgdmFsXSk7IC8vIEluY2x1ZGUgZnVsbCBhcnJheVxuXG4gICAgICB2YWwuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiBpdGVtICE9PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5mbGF0dGVuT2JqZWN0KGl0ZW0sIGAke25ld0tleX1bJHtpbmRleH1dYCwgZmFsc2UpKTsgLy8gRmxhdHRlbiBvYmplY3RzIGluIGFycmF5c1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKFtgJHtuZXdLZXl9WyR7aW5kZXh9XWAsIGl0ZW1dKTsgLy8gU3RvcmUgcHJpbWl0aXZlIHZhbHVlcyBpbiBhcnJheXNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwpIHtcbiAgICAgIGlmIChpbmNsdWRlT2JqZWN0cykge1xuICAgICAgICByZXN1bHQucHVzaChbbmV3S2V5LCB2YWxdKTsgLy8gSW5jbHVkZSBmdWxsIG9iamVjdFxuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5mbGF0dGVuT2JqZWN0KHZhbCwgbmV3S2V5LCBmYWxzZSkpOyAvLyBGbGF0dGVuIG5lc3RlZCBvYmplY3RzXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wdXNoKFtuZXdLZXksIHZhbF0pOyAvLyBTdG9yZSBrZXktdmFsdWUgcGFpcnNcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuICAvLyBWRCAxM1NlcDI0IGNoYW5nZXNcbiAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgcHJvY2Vzc0RhdGEoKSB7XG4gICAgLy8gIEhBIDE5REVDMjMgTG9naWMgZm9yIFF1ZXN0aW9uIEJvb2sgU3R5bGluZyhTbGFlc2ZvcmNlKVxuICAgIC8vIEhBIDA5RkVCMjQgQWRkZWQgdGVybmFyeVxuICAgIGlmICh0aGlzLnFiSXRlbT8uc3R5bGUpIHtcbiAgICAgIC8vIEhBIDI4REVDMjMgQWRkZWQgc3R5bGluZyBhbmQgbG9naWNzIHRvIGxvYWQgdGhlIGJvb2sgdHlwZSBxdWVzdGlvbnMgXG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZSA9IHR5cGVvZiB0aGlzLnFiSXRlbS5zdHlsZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKCcnICsgdGhpcy5xYkl0ZW0/LnN0eWxlKSA6IHRoaXMucWJJdGVtLnN0eWxlO1xuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUubGFiZWxDbGFzcyA9IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbENsYXNzID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsQ2xhc3MgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUubGFiZWxTdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbFN0eWxlID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsU3R5bGUgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUubGFiZWxWYWx1ZVN0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA/IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGUgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUuaW5wdXRDbGFzcyA9IHRoaXMucWJJdGVtLnN0eWxlPy5pbnB1dENsYXNzID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmlucHV0Q2xhc3MgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUuaW5wdXRTdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlLmlucHV0U3R5bGUgPyB0aGlzLnFiSXRlbS5zdHlsZT8uaW5wdXRTdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5ib29rU3R5bGUgPSB0aGlzLnFiSXRlbS5zdHlsZT8uYm9va1N0eWxlID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmJvb2tTdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5zaG93TGFiZWwgPSB0aGlzLnFiSXRlbS5zdHlsZT8uc2hvd0xhYmVsID8gdGhpcy5xYkl0ZW0uc3R5bGU/LnNob3dMYWJlbCA6IHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHRoaXMucWJJdGVtKSB7XG4gICAgICAgIHRoaXMucWJJdGVtLnN0eWxlID0ge1xuICAgICAgICAgIFwibGFiZWxDbGFzc1wiOiBcIlwiLFxuICAgICAgICAgIFwibGFiZWxTdHlsZVwiOiBcIlwiLFxuICAgICAgICAgIFwibGFiZWxWYWx1ZVN0eWxlXCI6IFwiXCIsXG4gICAgICAgICAgXCJpbnB1dENsYXNzXCI6IFwiXCIsXG4gICAgICAgICAgXCJpbnB1dFN0eWxlXCI6IFwiXCIsXG4gICAgICAgICAgXCJib29rU3R5bGVcIjogXCJcIixcbiAgICAgICAgICBcInNob3dMYWJlbFwiOiB0cnVlLFxuICAgICAgICAgIFwiZGlyZWN0aW9uXCI6IFwibHRyXCIsXG4gICAgICAgICAgXCJxdWVzdGlvblN0eWxlXCI6IFwiXCJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5xYkl0ZW0uc3R5bGUucXVlc3Rpb25TdHlsZSA9IHRoaXMucWJJdGVtPy5zdHlsZT8ucXVlc3Rpb25TdHlsZSA/IHRoaXMucWJJdGVtPy5zdHlsZS5xdWVzdGlvblN0eWxlIDogXCJcIjtcbiAgICB0aGlzLmxhbmdEaXJlY3Rpb24gPSB0aGlzLnFiSXRlbS5zdHlsZS5kaXJlY3Rpb24gPSB0aGlzLnFiSXRlbT8uc3R5bGU/LmRpcmVjdGlvbiA/IHRoaXMucWJJdGVtPy5zdHlsZT8uZGlyZWN0aW9uIDogJ2x0cic7XG4gICAgdGhpcy5ib29rU3R5bGUgPSB0aGlzLnFiSXRlbT8uc3R5bGU/LmJvb2tTdHlsZTtcbiAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgdmFyIGh0bWxFbGVtZW50ID0gZWxlbWVudD8ucXVlc3Rpb25UZXh0O1xuICAgICAgdmFyIHRleHRPbmx5ID0gaHRtbEVsZW1lbnQ/LnJlcGxhY2UoLzxbXj5dKj4vZywgJycpXG4gICAgICBlbGVtZW50LnF1ZXN0aW9uVGV4dCA9IHRleHRPbmx5O1xuICAgICAgLy8gIEhBIDE5REVDMjMgTG9naWMgZm9yIFF1ZXN0aW9uIFN0eWxpbmcoU2xhZXNmb3JjZSlcbiAgICAgIC8vIEhBIDI4REVDMjMgQWRkZWQgc3R5bGluZyBhbmQgbG9naWNzIHRvIGxvYWQgdGhlIGJvb2sgdHlwZSBxdWVzdGlvbnMgXG4gICAgICBpZiAoZWxlbWVudC50eXBlID09PSAnQm9vaycpIHtcbiAgICAgICAgaWYgKGVsZW1lbnRbJ3FiUmVmZXJlbmNlUXVlc3Rpb25zJ10pIHtcbiAgICAgICAgICB2YXIgcWIgPSB0eXBlb2YgZWxlbWVudFsncWJSZWZlcmVuY2VRdWVzdGlvbnMnXSA9PT0gJ29iamVjdCcgID8gIGVsZW1lbnRbJ3FiUmVmZXJlbmNlUXVlc3Rpb25zJ10gOiBKU09OLnBhcnNlKCBlbGVtZW50WydxYlJlZmVyZW5jZVF1ZXN0aW9ucyddKSA7XG4gICAgICAgICAgaWYgKHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZSkge1xuICAgICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlID0gdHlwZW9mIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKCcnICsgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlKSA6IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUgPSB0aGlzLnFiSXRlbS5zdHlsZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBCb29rIHR5cGUgcXVlc3Rpb24gc3R5bGluZ1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5sYWJlbENsYXNzID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5sYWJlbENsYXNzID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5sYWJlbENsYXNzIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUubGFiZWxTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ubGFiZWxTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmlucHV0Q2xhc3MgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmlucHV0Q2xhc3MgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmlucHV0Q2xhc3MgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5pbnB1dFN0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5pbnB1dFN0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5pbnB1dFN0eWxlIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuYm9va1N0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5ib29rU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmJvb2tTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLnNob3dMYWJlbCA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uc2hvd0xhYmVsID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5zaG93TGFiZWwgOiB0cnVlO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5xdWVzdGlvblN0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5xdWVzdGlvblN0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5xdWVzdGlvblN0eWxlIDogXCJcIjtcbiAgICAgICAgICBxYlsnbGFuZ0RpcmVjdGlvbiddID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmRpcmVjdGlvbiA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uZGlyZWN0aW9uIDogdGhpcy5sYW5nRGlyZWN0aW9uO1xuXG4gICAgICAgICAgLy8gTG9vcCBmb3IgZWFjaCBxdWVzdGlvbiBpbiB0aGUgYm9va1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXT8uc3ViUXVlc3Rpb25zPy5mb3JFYWNoKHF1ZXN0aW9uRnJvbUJvb2sgPT4ge1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlIDogcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5sYWJlbENsYXNzID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxDbGFzcyA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsQ2xhc3MgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5sYWJlbFN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsU3R5bGUgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGUgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5pbnB1dENsYXNzID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uaW5wdXRDbGFzcyA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmlucHV0Q2xhc3MgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5pbnB1dFN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uaW5wdXRTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmlucHV0U3R5bGUgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5ib29rU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5ib29rU3R5bGUgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5ib29rU3R5bGUgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5zaG93TGFiZWwgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5zaG93TGFiZWwgPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5zaG93TGFiZWwgOiB0cnVlO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9vay5zdHlsZS5xdWVzdGlvblN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ucXVlc3Rpb25TdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xuICAgICAgICAgICAgcXVlc3Rpb25Gcm9tQm9va1snbGFuZ0RpcmVjdGlvbiddID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uZGlyZWN0aW9uID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uZGlyZWN0aW9uIDogdGhpcy5sYW5nRGlyZWN0aW9uO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGVsZW1lbnRbJ3FiSXRlbSddID0gcWJbJ3F1ZXN0aW9uYm9vayddO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbGVtZW50LnN0eWxlID0gZWxlbWVudC5zdHlsZSA/IHR5cGVvZiBlbGVtZW50LnN0eWxlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoJycgKyBlbGVtZW50Py5zdHlsZSkgOiBlbGVtZW50Py5zdHlsZSA6IHRoaXMucWJJdGVtPy5zdHlsZTtcblxuICAgICAgZWxlbWVudC5zdHlsZS5sYWJlbENsYXNzID0gZWxlbWVudC5zdHlsZT8ubGFiZWxDbGFzcyA/IGVsZW1lbnQuc3R5bGU/LmxhYmVsQ2xhc3MgOiBcIlwiO1xuICAgICAgZWxlbWVudC5zdHlsZS5sYWJlbFN0eWxlID0gZWxlbWVudC5zdHlsZT8ubGFiZWxTdHlsZSA/IGVsZW1lbnQuc3R5bGU/LmxhYmVsU3R5bGUgOiBcIlwiO1xuICAgICAgZWxlbWVudC5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgPSBlbGVtZW50LnN0eWxlPy5sYWJlbFZhbHVlU3R5bGUgPyBlbGVtZW50LnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XG4gICAgICBlbGVtZW50LnN0eWxlLmlucHV0Q2xhc3MgPSBlbGVtZW50LnN0eWxlPy5pbnB1dENsYXNzID8gZWxlbWVudC5zdHlsZT8uaW5wdXRDbGFzcyA6IFwiXCI7XG4gICAgICBlbGVtZW50LnN0eWxlLmlucHV0U3R5bGUgPSBlbGVtZW50LnN0eWxlLmlucHV0U3R5bGUgPyBlbGVtZW50LnN0eWxlPy5pbnB1dFN0eWxlIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuc3R5bGUuYm9va1N0eWxlID0gZWxlbWVudC5zdHlsZT8uYm9va1N0eWxlID8gZWxlbWVudC5zdHlsZT8uYm9va1N0eWxlIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuc3R5bGUuc2hvd0xhYmVsID0gZWxlbWVudC5zdHlsZT8uc2hvd0xhYmVsID8gZWxlbWVudC5zdHlsZT8uc2hvd0xhYmVsIDogdHJ1ZTtcbiAgICAgIGVsZW1lbnQuc3R5bGUucXVlc3Rpb25TdHlsZSA9IGVsZW1lbnQuc3R5bGU/LnF1ZXN0aW9uU3R5bGUgPyBlbGVtZW50LnN0eWxlPy5xdWVzdGlvblN0eWxlIDogXCJcIjtcblxuICAgICAgZWxlbWVudFsnbGFuZ0RpcmVjdGlvbiddID0gZWxlbWVudC5zdHlsZT8uZGlyZWN0aW9uID8gZWxlbWVudC5zdHlsZT8uZGlyZWN0aW9uIDogdGhpcy5sYW5nRGlyZWN0aW9uO1xuXG5cbiAgICAgIC8vVkQgMDJBdWcyNCBkZXBlbmRlbnQgZmllbGQgc2hvdy9oaWRlIGNoYW5nZXNcbiAgICAgIC8vIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzXG4gICAgICAgLy8gQVAtMjZNQVIyNSBFbnN1cmUgcXVlcy5zdWJUZXh0IGlzIGFsd2F5cyBhbiBvYmplY3QgYnkgcGFyc2luZyBpdCBpZiBpdCdzIGEgc3RyaW5nXG4gICAgICBpZiAoZWxlbWVudC5yZWZlcmVuY2VGaWVsZCkge1xuICAgICAgICBlbGVtZW50LmRlcGVuZGVudFJlZiA9IGVsZW1lbnQucmVmZXJlbmNlRmllbGQ7XG4gICAgICB9XG4gICAgICBpZiAoZWxlbWVudC5zdWJUZXh0KSB7XG4gICAgICAgIGVsZW1lbnRbJ3N1YlRleHQnXSA9IHR5cGVvZiBlbGVtZW50Py5zdWJUZXh0ID09PSAnb2JqZWN0JyA/IGVsZW1lbnQ/LnN1YlRleHQgOiBKU09OLnBhcnNlKGVsZW1lbnRbJ3N1YlRleHQnXSk7XG4gICAgICAgIGxldCBkZXBlbmRlbmN5T2JqOiBEZXBlbmRlbmN5TWV0YSA9IGVsZW1lbnQuc3ViVGV4dDtcbiAgICAgICAgaWYgKGRlcGVuZGVuY3lPYmouaXNEZXBlbmRlbnRGaWVsZCkge1xuICAgICAgICAgIGVsZW1lbnQuaXNIaWRkZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFZEIDA3QXVnMjQgLSBpc0RlcGVuZGVudEZpZWxkIGNoYW5nZVxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY2hhbmdlU2VydmljZS5jaGFuZ2VBbm5vdW5jZWQkLnN1YnNjcmliZShcbiAgICAgICAgICAoY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgICAgICAgIC8vIFZEIDIwQXVnMjQgLSBpc0RlcGVuZGVudEZpZWxkIGNoYW5nZVxuICAgICAgICAgICAgaWYgKGNoYW5nZVZhbHVlICE9IHVuZGVmaW5lZCAmJiBkZXBlbmRlbmN5T2JqLmlzRGVwZW5kZW50RmllbGQpIHtcbiAgICAgICAgICAgICAgaWYgKGNoYW5nZVZhbHVlLnZhbHVlT2JqICE9IHVuZGVmaW5lZCAmJiBjaGFuZ2VWYWx1ZS5mcm9tUXVlc3Rpb25JZCA9PSBkZXBlbmRlbmN5T2JqLnNvdXJjZVF1ZXN0aW9uSWQpIHtcbiAgICAgICAgICAgICAgICAvLyBlbGVtZW50LmlzSGlkZGVuRmllbGQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5T2JqLmRlcGVuZGVudFZhbHVlID09IGNoYW5nZVZhbHVlLnZhbHVlT2JqKSB7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmlzSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gJyc7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LnNlbGVjdGVkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kZXBlbmRlbnRSZWYgPT0gY2hhbmdlVmFsdWUucmVmZXJlbmNlRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yZWZlcmVuY2VGaWVsZCA9IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmlzSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5wdXQgPSAnJztcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2VsZWN0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZURlcGVuZGVudEVsZW1lbnRzKGVsZW1lbnQuaWQpO1xuICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZGVwZW5kZW50IHNlbGVjdGlvbiByZW1vdmUgdGhlIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGVwZW5kZW50UmVmID09IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVmZXJlbmNlRmllbGQgPSAnJztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlKGVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgLy8gc3VuZGF5IGNvbW1lbnRcbiAgICAgIC8vIGlmIChlbGVtZW50LnR5cGUgPT09ICdDYWxlbmRhcicpIHtcbiAgICAgIC8vICAgdGhpcy5vcGVuQ2FsZW5kYXJDb21wb25lbnQoZWxlbWVudCk7XG4gICAgICAvLyB9XG4gICAgfSk7XG4gICAgdGhpcy5zdWJRdWVzdGlvbnMgPSBbXTtcbiAgICB0aGlzLnNldFN1YlF1ZXN0aW9ucyh0aGlzLnF1ZXN0aW9ucyk7XG4gICAgdGhpcy5wcm9jZXNzVHJhbnNsYXRlZFF1ZXN0aW9ucygpO1xuICB9XG4gIC8vIFZEIDA3QXVnMjQgLSBpc0RlcGVuZGVudEZpZWxkIGNoYW5nZVxuICAgLy8gQVAtMjZNQVIyNSBFbnN1cmUgcXVlcy5zdWJUZXh0IGlzIGFsd2F5cyBhbiBvYmplY3QgYnkgcGFyc2luZyBpdCBpZiBpdCdzIGEgc3RyaW5nXG4gIGhpZGVEZXBlbmRlbnRFbGVtZW50cyhlbGVtZW50SWQpIHtcbiAgICBsZXQgZWxlbWVudHNUb0hpZGUgPSB0aGlzLnF1ZXN0aW9ucy5maWx0ZXIoZWwgPT4ge1xuICAgICAgaWYgKGVsLnN1YlRleHQpIHtcbiAgICAgICAgZWxbJ3N1YlRleHQnXSA9IHR5cGVvZiBlbD8uc3ViVGV4dCA9PT0gJ29iamVjdCcgPyBlbD8uc3ViVGV4dCA6IEpTT04ucGFyc2UoZWxbJ3N1YlRleHQnXSk7XG4gICAgICAgIGxldCBkZXBPYmogPSBlbC5zdWJUZXh0O1xuICAgICAgICByZXR1cm4gZGVwT2JqLnNvdXJjZVF1ZXN0aW9uSWQgPT0gZWxlbWVudElkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuXG4gICAgZWxlbWVudHNUb0hpZGUuZm9yRWFjaChlbCA9PiB7XG4gICAgICBlbC5pc0hpZGRlbiA9IHRydWU7XG4gICAgICBlbC5pbnB1dCA9ICcnO1xuICAgICAgZWwuc2VsZWN0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlKGVsKTtcbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IGhpZGUgZWxlbWVudHMgZGVwZW5kZW50IG9uIHRoaXMgb25lXG4gICAgICB0aGlzLmhpZGVEZXBlbmRlbnRFbGVtZW50cyhlbC5pZCk7XG4gICAgfSk7XG4gIH1cbi8vQVAtMTlNQVkyNSBFbnN1cmUgc3FMaXN0IGlzIGFsd2F5cyBhbiBhcnJheSBieSBkZWZhdWx0aW5nIHRvIFtdXG4gIGNsZWFyU1FFcnJvcihxdWVzSWQpIHtcbiAgICB2YXIgc3FMaXN0ID0gdGhpcy5zdWJRdWVzdGlvbnM/LmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pZCA9PSBxdWVzSWQpIHx8IFtdO1xuICAgIGZvciAodmFyIHNxIG9mIHNxTGlzdCkge1xuICAgICAgc3EuZXJyb3IgPSBudWxsO1xuICAgIH1cbiAgfVxuICAvLyBWRCAxMUp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICBwcm9jZXNzVHJhbnNsYXRlZFF1ZXN0aW9ucygpIHtcbiAgICBpZiAodGhpcy50cmFuc2xhdGVkUXVlc3Rpb25zICYmIHRoaXMudHJhbnNsYXRlZFF1ZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKChvcmdRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlZFF1ZXN0aW9ucy5mb3JFYWNoKCh0cmFuc1F1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAob3JnUXVlc3Rpb24udW5pcXVlSWRlbnRpZmllciA9PSB0cmFuc1F1ZXN0aW9uLmlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIG9yZ1F1ZXN0aW9uLnF1ZXN0aW9uVGV4dCA9IHRyYW5zUXVlc3Rpb24ubGFiZWw7XG4gICAgICAgICAgICBvcmdRdWVzdGlvbi5xdWVzdGlvbiA9IHRyYW5zUXVlc3Rpb24ucGxhY2VIb2xkZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldFN1YlF1ZXN0aW9ucyhyZWNvcmRzKSB7XG4gICAgdGhpcy5zdWJRdWVzdGlvbnMucHVzaChyZWNvcmRzKTtcbiAgfVxuXG4gIC8vIENhcHR1cmUgYW5kIFByb2Nlc3MgQ2hpbGQgRXZlbnRcbiAgY2hpbGRFdmVudENhcHR1cmUoZXZlbnQsIHF1ZXM/OiBhbnkpIHtcbiAgICBsZXQgZHJvcGRvd25EYXRhID0ge307XG4gICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLmFubm91bmNlQ2hhbmdlKGV2ZW50KTtcbiAgICBpZiAocXVlcykge1xuICAgICAgaWYgKHF1ZXMudHlwZSA9PSAnRHJvcGRvd24nIHx8IHF1ZXMudHlwZSA9PSAnUmFkaW8nKSB7XG4gICAgICAgIC8vIEhBIDE5SkFOMjQgQ29ycmVjdGlvbiBvZiBkcm9wZG93biB2YWx1ZXNcbiAgICAgICAgcXVlcy5zZWxlY3RlZE9iaiA9IGV2ZW50LnZhbHVlT2JqID8gZXZlbnQudmFsdWVPYmogOiBudWxsO1xuICAgICAgICBxdWVzLmlucHV0ID0gZXZlbnQuc2VsZWN0ZWRPYmogPyBldmVudC5zZWxlY3RlZE9iaiA6IGV2ZW50LnZhbHVlT2JqO1xuICAgICAgICBxdWVzLnNlbGVjdGVkVmFsdWUgPSBldmVudC52YWx1ZU9iaiA/IGV2ZW50LnZhbHVlT2JqIDogbnVsbDtcbiAgICAgICAgLy8gZW1pdCB0aGUgZHJvcGRvd24gZGF0YSB0byBwYXJlbnRcbiAgICAgICAgZHJvcGRvd25EYXRhWydldmVudCddID0gZXZlbnQudmFsdWVPYmo7XG4gICAgICAgIGRyb3Bkb3duRGF0YVsncXVlcyddID0gcXVlcztcbiAgICAgICAgaWYgKGRyb3Bkb3duRGF0YVsnZXZlbnQnXSkge1xuICAgICAgICAgIHRoaXMuaGFuZGxlRHJvcERvd24uZW1pdChkcm9wZG93bkRhdGEpO1xuICAgICAgICB9ICAvLyBWRCAyMURFQzIzIC0gZGVwZW5kZW50IGZpZWxkIGNoYW5nZVxuICAgICAgfSBlbHNlIGlmIChxdWVzLnR5cGUgPT0gJ0xvY2F0aW9uJykge1xuICAgICAgICBxdWVzLmlucHV0ID0gZXZlbnQudmFsdWVPYmo7XG4gICAgICAgIHF1ZXMuc2VsZWN0ZWRWYWx1ZSA9IGV2ZW50LnZhbHVlT2JqPyBldmVudC52YWx1ZU9iai5hZGRyZXNzIDogbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAocXVlcy50eXBlID09ICdGaWxlJykge1xuICAgICAgICBxdWVzLmlucHV0ID0gdGhpcy5zZWxlY3RlZEZpbGVEYXRhID0gZXZlbnQ7XG5cbiAgICAgICAgLy8gSGFuZGxlIGZpbGUgdmFsaWRhdGlvbiBlcnJvcnNcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpICYmIGV2ZW50Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIC8vIE5vIGZpbGVzIHVwbG9hZGVkIHdoZW4gcmVxdWlyZWRcbiAgICAgICAgICBxdWVzLmVycm9yID0gcXVlcy5lcnJvck1lc3NhZ2UgPyBuZXcgRXJyb3JXcmFwcGVyKCkgOiBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpICYmIGV2ZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyBGaWxlcyB3ZXJlIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZFxuICAgICAgICAgIHF1ZXMuZXJyb3IgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSB2YWxpZGF0aW9uIGVycm9ycyBmcm9tIHRoZSBmaWxlIHVwbG9hZCBjb21wb25lbnRcbiAgICAgICAgaWYgKGV2ZW50Py52YWxpZGF0aW9uRXJyb3JzICYmIGV2ZW50LnZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHF1ZXMuZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgcXVlcy5lcnJvci5tZXNzYWdlID0gZXZlbnQudmFsaWRhdGlvbkVycm9yc1swXTsgLy8gVXNlIHRoZSBmaXJzdCB2YWxpZGF0aW9uIGVycm9yXG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIGlmIChxdWVzLnR5cGUgPT0gJ0RhdGUnIHx8IHF1ZXMudHlwZSA9PSAnRGF0ZVRpbWUnKSB7IC8vIEhBIDI0SkFOMjQgQ29udmVydGluZyBEYXRlIGFuZCBEYXRlVGltZSB0byBVVENcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgbGV0IGQgPSBuZXcgRGF0ZShldmVudCk7XG4gICAgICAgICAgaWYgKCFpc05hTihkPy5nZXRUaW1lKCkpKSB7IC8vU0tTMjNBUFIyNSBDaGVjayBmb3IgdmFsaWQgZGF0ZVxuICAgICAgICAgICAgICBsZXQgdXRjU3RyaW5nID0gZD8udG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgICAgcXVlcy5pbnB1dCA9IHV0Y1N0cmluZztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBxdWVzLmlucHV0ID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHF1ZXMuaW5wdXQgPSAnJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChxdWVzLnR5cGUgPT0gJ0xpc3QnKSB7XG4gICAgICAgIC8vIFZEIDIwQXVnMjQgaGFuZGxpbmcgdGhlIGxpc3QgdHlwZSAgaGFuZGxlIG11bHRpcGxlIG9iamVjdCB2YWx1ZXNcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50Py52YWx1ZU9iaiA/IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoZXZlbnQ/LnZhbHVlT2JqLCBldmVudD8uZmllbGQpIDogZXZlbnQ7XG4gICAgICB9Ly9SUyAwNkpBTjI1XG4gICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdSaWNoVGV4dEFyZWEnKSB7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudCB8fCBudWxsO1xuICAgICAgfS8vICBBUC0yOE1BUjI1IEFkZCBCb29sZWFuXG4gICAgICBlbHNlIGlmKHF1ZXMudHlwZSA9PT0gJ0Jvb2xlYW4nKXtcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50O1xuICAgICAgICBxdWVzLmJvb2xlYW4gPSBldmVudDtcbiAgICAgIH1cbiAgICAgIC8vIEFQLTEwQVBSMjUgTnVtYmVyXG4gICAgICAvLyBBUDE5UEFSMjUgLWlmIGNoYW5nZSBlbHNlIGlzXG4gICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdOdW1iZXInKSB7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSBOdW1iZXIoZXZlbnQpOyBcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBxdWVzLmlucHV0ID0gZXZlbnQ7XG4gICAgICB9XG4gICAgICAvL1JTIDA2SkFOMjVcbiAgICAgIC8vIFZhbGlkYXRlIGVycm9yIG1lc3NhZ2UgLSBtb2RpZmllZCB0byBoYW5kbGUgcmljaCB0ZXh0XG4gICAgICBjb25zdCBoYXNFcnJvciA9IHF1ZXMuZXJyb3JNZXNzYWdlICYmIChcbiAgICAgICAgKHF1ZXMudHlwZSA9PT0gJ0ZpbGUnICYmIHF1ZXMuaW5wdXQubGVuZ3RoID09PSAwKSB8fFxuICAgICAgICAocXVlcy50eXBlID09PSAnUmljaFRleHRBcmVhJyAmJiAoIXF1ZXMuaW5wdXQgfHwgcXVlcy5pbnB1dC50cmltKCkgPT09ICcnKSkgfHxcbiAgICAgICAgKHF1ZXMudHlwZSAhPT0gJ0ZpbGUnICYmIHF1ZXMuVHlwZSAhPT0gJ1JpY2hUZXh0QXJlYScgJiYgIXF1ZXMuaW5wdXQpXG4gICAgICApO1xuICAgICAgcXVlcy5lcnJvciA9IGhhc0Vycm9yID8gbmV3IEVycm9yV3JhcHBlcigpIDogbnVsbDtcbiAgICAgIHF1ZXMuZXJyb3IgPSBoYXNFcnJvciA/IG5ldyBFcnJvcldyYXBwZXIoKSA6IG51bGw7XG4gICAgICAvLyBPbmNlIHRoZSByaWdodCB2YWx1ZSBpcyBzdG9yZWQgaW4gcXVlcy5pbnB1dCBzdG9yZSB0aGUgcXVlcyAod2l0aCBpbnB1dCkgaW4gc3RvcmFnZVNlcnZpY2VcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlKHF1ZXMpO1xuICAgICAgLy8gVkQgMTlKdWwwMSAtIGdldCB1cGRhdGVkIHF1ZXN0aW9uXG4gICAgICB0aGlzLmhhbmRsZVF1ZXN0aW9uLmVtaXQocXVlcyk7XG4gICAgfVxuICAgIGlmKHF1ZXM/LnNpbmdsZUZpZWxkQ2hhbmdlKXtcbiAgICAgIHRoaXMuc2luZ2xlRmllbGRDaGFuZ2VFbWl0LmVtaXQocXVlcyk7XG4gICAgICBxdWVzLnNpbmdsZUZpZWxkQ2hhbmdlID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGRlbGV0ZUZpbGUoZmlsZURhdGE6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdmaWxlREFUQScsIGZpbGVEYXRhKVxuICB9XG4gIGdldERyb3BEb3duKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmhhZGxlRHJvcERvd25EZXBlbmRlbnQuZW1pdChldmVudCk7XG4gIH1cbiAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXG4gIGdldEN1cnJlbnRDYWxlbmRhcihldmVudDogYW55KSB7XG4gICAgdGhpcy5oYW5kbGVDYWxlbmRhckRhdGUuZW1pdChldmVudCk7XG4gIH1cblxuICBnZXRDYWxlbmRhckV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlQ2FsZW5kYXJFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBWRCAwNlNlcDI0IHJlbW92ZSB0aGUgc3BlY2lhbCBjaGFyZWN0ZXJzIGFuZCB0YWdzIFxuICAvLyBmcm9tIHRoZSBxdWVzdGlvblRleHRcbiAgcmVtb3ZlQ2hhcmFjdGVycyhxdWVzdGlvblRleHQ6IHN0cmluZykge1xuICAgIGxldCB1cGRhdGVkVGV4dCA9IHF1ZXN0aW9uVGV4dD8ucmVwbGFjZSgvPFtePl0qPi9nLCAnJyk7XG4gICAgcmV0dXJuIHVwZGF0ZWRUZXh0O1xuICB9XG5cbiAgLy8gc3VuZGF5IGNvbW1lbnRcbiAgLy8gb3BlbkNhbGVuZGFyQ29tcG9uZW50KHF1ZXMpIHtcbiAgLy8gICBjb25zdCB2aWV3Q29udGFpbmVyUmVmID0gdGhpcy5keW5hbWljSG9zdC52aWV3Q29udGFpbmVyUmVmO1xuICAvLyAgIGlmKHZpZXdDb250YWluZXJSZWYpe1xuICAvLyAgICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuICAvLyAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoQ3VzdG9tQ2FsZW5kYXJDb21wb25lbnQpO1xuICAvLyAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnF1ZXN0aW9uID0gcXVlcztcbiAgLy8gICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5kYXRlU2VsZWN0ZWQuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB0aGlzLmdldEN1cnJlbnRDYWxlbmRhcihldmVudCkpO1xuICAvLyAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmV2ZW50U2VsZWN0ZWQuc3Vic2NyaWJlKChldmVudDphbnkpID0+IHRoaXMuZ2V0Q2FsZW5kYXJFdmVudChldmVudCkpXG4gIC8vICAgfVxuICAvLyB9XG5cbiAgaXNDYWxlbmRhck1vZGFsT3BlbiA9IGZhbHNlO1xuICBjYWxlbmRhck1vZGFsVGl0bGU6IGFueTtcbiAgY2FsZW5kYXJNb2RhbFNpemU6IGFueTtcbiAgY2FsZW5kYXJTYXZlQnV0dG9uVmFsdWU6IGFueTtcbiAgcmVmZXJlbmNlUXVlc3Rpb25zID0gW107XG4gIHFiUmVmcmVuY2VCb29rOiBhbnk7XG4gIG1vZGFsQ2FsZW5kYXJNb2RhbEZvb3RlcjogYW55O1xuXG4gIG9wZW5DYWxlbmRhck1vZGFsKGV2ZW50KSB7XG4gICAgdGhpcy5pc0NhbGVuZGFyTW9kYWxPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLnFiUmVmcmVuY2VCb29rID0gZXZlbnQucWJSZWZyZW5jZUJvb2s7XG4gICAgdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMgPSBldmVudC5yZWZlcmVuY2VRdWVzdGlvbnM7XG4gICAgdGhpcy5jYWxlbmRhck1vZGFsVGl0bGUgPSBldmVudC5tb2RhbFRpdGxlO1xuICAgIHRoaXMuY2FsZW5kYXJNb2RhbFNpemUgPSBldmVudC5tb2RhbFNpemU7XG4gICAgdGhpcy5jYWxlbmRhclNhdmVCdXR0b25WYWx1ZSA9IGV2ZW50LnNhdmVCdXR0b25WYWx1ZTtcbiAgICB0aGlzLm1vZGFsQ2FsZW5kYXJNb2RhbEZvb3RlciA9IGV2ZW50Lm1vZGFsRm9vdGVyO1xuICB9XG5cblxuICBvbkNhbGVuZGFyTW9kYWxTYXZlKCkge1xuICAgIHRoaXMuY2hhbmdlU2VydmljZS5kYXRhQ2hhbmdlcygnY2FsZW5kYXItbW9kYWwtc2F2ZScpO1xuICB9XG5cblxuICBoYW5kbGVRdWVzdGlvbkV2ZW50KGV2ZW50KSB7XG4gICAgY29uc29sZS5sb2coJ2hhbmRsZSBxdWVzdGlvbiBoZXJlJyk7XG4gIH1cblxuICBjbG9zZUNhbGVuZGFyTW9kYWwoZXZlbnQpIHtcbiAgICB0aGlzLmlzQ2FsZW5kYXJNb2RhbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIC8vIFNLUzI1TUFSMjUgaW1hZ2UgYWRkXG4gIGFzeW5jIGZpbGVDaGFuZ2VFdmVudChxdWVzOiBhbnksIGV2ZW50OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBhd2FpdCB0aGlzLnJlYWRGaWxlQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgICBxdWVzLmltYWdlRGF0YSA9IGltYWdlRGF0YTtcbiAgICAgICAgcXVlcy5vcmdJbWFnZURhdGEgPSBpbWFnZURhdGE7XG4gICAgICAgIC8vIEluaXRpYWxpemUgbG9nbyBzaXplIGlmIG5vdCBhbHJlYWR5IHNldFxuICAgICAgICBpZiAoIXF1ZXMuaW1hZ2VTaXplKSB7XG4gICAgICAgICAgcXVlcy5pbWFnZVNpemUgPSB7IHdpZHRoOiAxNTAsIGhlaWdodDogMTUwIH07XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmNoaWxkRXZlbnRDYXB0dXJlKGltYWdlRGF0YSwgcXVlcyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcmVhZGluZyBmaWxlOlwiLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWFkRmlsZUFzRGF0YVVSTChmaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiByZWplY3QoZXJyb3IpO1xuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgb25JbWFnZUVkaXQocXVlczogYW55KSB7XG4gICAgdGhpcy5pc0ltYWdlRWRpdCA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZEltYWdlRWxlbWVudCA9IHF1ZXM7XG4gICAgY29uc29sZS5sb2coXCJvbkltYWdlRWRpdFwiKVxuICB9XG4gIGFzeW5jIG9uSW1hZ2VEZWxldGUocXVlczogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIHF1ZXMuaW1hZ2VEYXRhID0gJyc7XG4gICAgICBxdWVzLm9yZ0ltYWdlRGF0YSA9ICcnO1xuICAgICAgLy8gSW5pdGlhbGl6ZSBsb2dvIHNpemUgaWYgbm90IGFscmVhZHkgc2V0XG4gICAgICBpZiAoIXF1ZXMuaW1hZ2VTaXplKSB7XG4gICAgICAgIHF1ZXMuaW1hZ2VTaXplID0geyB3aWR0aDogMTUwLCBoZWlnaHQ6IDE1MCB9O1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5jaGlsZEV2ZW50Q2FwdHVyZShxdWVzLmltYWdlRGF0YSwgcXVlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciByZWFkaW5nIGZpbGU6XCIsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvLyBTS1MyNU1BUjI1IGltYWdlIGVkaXQgZnVuY3Rpb25zXG4gIGZsaXBIb3Jpem9udGFsKCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICBmbGlwSDogIXRoaXMudHJhbnNmb3JtLmZsaXBIXG4gICAgfTtcbiAgfVxuXG4gIGZsaXBWZXJ0aWNhbCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgZmxpcFY6ICF0aGlzLnRyYW5zZm9ybS5mbGlwVlxuICAgIH07XG4gIH1cblxuICByZXNldEltYWdlKCkge1xuICAgIHRoaXMuY2FudmFzUm90YXRpb24gPSAwO1xuICAgIHRoaXMuY3JvcHBlciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIHRyYW5zbGF0ZVVuaXQ6ICdweCcsXG4gICAgICBzY2FsZTogMSxcbiAgICAgIHJvdGF0ZTogMCxcbiAgICAgIGZsaXBIOiBmYWxzZSxcbiAgICAgIGZsaXBWOiBmYWxzZSxcbiAgICAgIHRyYW5zbGF0ZUg6IDAsXG4gICAgICB0cmFuc2xhdGVWOiAwXG4gICAgfTtcbiAgfVxuXG4gIHpvb21PdXQoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHNjYWxlOiB0aGlzLnRyYW5zZm9ybS5zY2FsZSEgLSAuMVxuICAgIH07XG4gIH1cblxuICB6b29tSW4oKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHNjYWxlOiB0aGlzLnRyYW5zZm9ybS5zY2FsZSEgKyAuMVxuICAgIH07XG4gIH1cbiAgcm90YXRlTGVmdCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4geyAvLyBVc2UgdGltZW91dCBiZWNhdXNlIHJvdGF0aW5nIGltYWdlIGlzIGEgaGVhdnkgb3BlcmF0aW9uIGFuZCB3aWxsIGJsb2NrIHRoZSB1aSB0aHJlYWRcbiAgICAgIHRoaXMuY2FudmFzUm90YXRpb24tLTtcbiAgICAgIHRoaXMuZmxpcEFmdGVyUm90YXRlKCk7XG4gICAgfSk7XG4gIH1cblxuICByb3RhdGVSaWdodCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jYW52YXNSb3RhdGlvbisrO1xuICAgICAgdGhpcy5mbGlwQWZ0ZXJSb3RhdGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG1vdmVMZWZ0KCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICB0cmFuc2xhdGVIOiB0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVIISAtIDFcbiAgICB9O1xuICB9XG5cbiAgbW92ZVJpZ2h0KCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICB0cmFuc2xhdGVIOiB0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVIISArIDFcbiAgICB9O1xuICB9XG5cbiAgbW92ZURvd24oKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHRyYW5zbGF0ZVY6IHRoaXMudHJhbnNmb3JtLnRyYW5zbGF0ZVYhICsgMVxuICAgIH07XG4gIH1cblxuICBtb3ZlVXAoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHRyYW5zbGF0ZVY6IHRoaXMudHJhbnNmb3JtLnRyYW5zbGF0ZVYhIC0gMVxuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSBmbGlwQWZ0ZXJSb3RhdGUoKSB7XG4gICAgY29uc3QgZmxpcHBlZEggPSB0aGlzLnRyYW5zZm9ybS5mbGlwSDtcbiAgICBjb25zdCBmbGlwcGVkViA9IHRoaXMudHJhbnNmb3JtLmZsaXBWO1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICBmbGlwSDogZmxpcHBlZFYsXG4gICAgICBmbGlwVjogZmxpcHBlZEgsXG4gICAgICB0cmFuc2xhdGVIOiAwLFxuICAgICAgdHJhbnNsYXRlVjogMFxuICAgIH07XG4gIH1cbiAgYXN5bmMgaW1hZ2VDcm9wcGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZTY0ID0gYXdhaXQgdGhpcy5jb252ZXJ0QmxvYlRvQmFzZTY0KGV2ZW50Lm9iamVjdFVybCk7XG4gICAgICB0aGlzLnNlbGVjdGVkSW1hZ2VFbGVtZW50LmltYWdlRGF0YSA9IGJhc2U2NDtcbiAgICAgIGF3YWl0IHRoaXMuY2hpbGRFdmVudENhcHR1cmUoYmFzZTY0LCB0aGlzLnNlbGVjdGVkSW1hZ2VFbGVtZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGluIGltYWdlQ3JvcHBlZDpcIiwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG5cbiAgY3JvcHBlclJlYWR5KHNvdXJjZUltYWdlRGltZW5zaW9uczogRGltZW5zaW9ucykge1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICB9XG4gIC8vIFNLUzI1TUFSMjUgYmxvYiB0byBiYXNlIDY0IGNvbnZlcnRlclxuICBjb252ZXJ0QmxvYlRvQmFzZTY0KG9iamVjdFVybDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gZmV0Y2gob2JqZWN0VXJsKVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuYmxvYigpKVxuICAgICAgLnRoZW4oYmxvYiA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcbiAgICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4gcmVzb2x2ZShyZWFkZXIucmVzdWx0IGFzIHN0cmluZyk7XG4gICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG4gIGNsb3NlTW9kYWwoKSB7XG4gICAgdGhpcy5pc0ltYWdlRWRpdCA9IGZhbHNlO1xuICB9XG5cbiAgLy8gU0tTMjhNQVIyNSBmb3IgbmVzdGVkIGJvb2sgcmVhZFxuICByZWFkUXVlc3Rpb25zKHFiSWQ6IGFueSwgcXVlczphbnkpIHtcbiAgICBsZXQgcXVlc3Rpb25zID0gW107XG4gICAgLy8gQWRkZWQgdGVybmFyeSB0byBhdm9pZCB1bmRlZmluZWRcbiAgICBmb3IgKHZhciBzcSBpbiBxdWVzLmJvb2tRdWVzdGlvbnNNYXBbcWJJZF0uc3ViUXVlc3Rpb25zKSB7XG4gICAgICBsZXQgcTogUXVlc3Rpb24gPSBxdWVzLmJvb2tRdWVzdGlvbnNNYXBbcWJJZF0uc3ViUXVlc3Rpb25zW3NxXTtcbiAgICAgIC8vIGlmIHF1ZXN0aW9uIGlzIHRoZXJlIHByb2Nlc3NcbiAgICAgIGlmIChxKSB7XG4gICAgICAgICAgcXVlc3Rpb25zLnB1c2gocSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBxdWVzdGlvbnM7XG4gIH1cbn1cbiIsIjwhLS0gSEEgMThKQU4yNCAgQWRkZWQgY2xhc3MgZm9yIHN0eWxpbmcgLS0+XG48ZGl2IFtzdHlsZV09XCJib29rU3R5bGVcIiBjbGFzcz1cImNvbnRlbnQtYm94IGZvcm0tZ3JvdXBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgPCEtLSBIQSAyMERFQzIzIERpcmVjdGl2ZSBhbmQgUXVlc3Rpb24gU3R5bGUgZnJvbSBzYWxlc2ZvcmNlIC0tPlxuICAgICAgICA8IS0tIFJBMDlERUMyNCBDaGFuZ2VkIGtleXMtLT5cbiAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ2NvbC1sZy0nICsgcXVlcy5zaXplICsgJyBwYWRkaW5nbm9uZSdcIiAqbmdGb3I9XCJsZXQgcXVlcyBvZiBxdWVzdGlvbnM7bGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICBbaWRdPVwicXVlcy5pZFwiIFtkaXJdPVwicXVlcy5sYW5nRGlyZWN0aW9uXCIgW3N0eWxlXT1cInF1ZXM/LnN0eWxlPy5xdWVzdGlvblN0eWxlXCI+XG4gICAgICAgICAgICA8IS0tIFZEIDA5TWF5MjQgaXMgaGlkZSBmaWVsZCBjaGFuZ2UtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcXVlcy5pc0hpZGRlblwiIGNsYXNzPVwibnh0SW5wdXRDb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8IS0tIEFQLTI4TUFSMjUgU2hvdyBsYWJlbCBpZiBlbmFibGVkIGFuZCBub3QgYSBCb29sZWFuIHR5cGUgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGRvd24yOiBxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXMuc3R5bGU/LnNob3dMYWJlbCA/IChxdWVzLnN0eWxlPy5zaG93TGFiZWwgJiYgcXVlcy50eXBlICE9PSAnQm9vbGVhbicgJiYgcXVlcy50eXBlICE9PSAnVGV4dCcgJiYgcXVlcy50eXBlICE9PSAnTGlzdCcgJiYgcXVlcz8udHlwZSAhPT0gJ0Ryb3Bkb3duJyAmJiBxdWVzLnR5cGUgIT09ICdSaWNoVGV4dEFyZWEnICYmIHF1ZXMudHlwZSAhPT0gJ0RhdGVUaW1lJyAmJiBxdWVzLnR5cGUgIT09ICdMb2NhdGlvbicgJiYgcXVlcy50eXBlICE9PSAnTnVtYmVyJyAmJnF1ZXMudHlwZSAhPT0gJ0VtYWlsJyAmJiAgcXVlcy50eXBlICE9PSAnRGF0ZScgJiYgcXVlcy50eXBlICE9PSAnVGltZScgJiYgcXVlcy50eXBlICE9PSAnVGV4dEFyZWEnICYmIHF1ZXMudHlwZSAhPT0gJ0xhYmVsJyk6IChxdWVzLnN0eWxlPy5zaG93TGFiZWwgIT09IGZhbHNlICYmIHF1ZXMudHlwZSAhPT0gJ0Jvb2xlYW4nICYmIHF1ZXMudHlwZSAhPT0gJ1RleHQnICYmIHF1ZXMudHlwZSAhPT0gJ0xpc3QnICYmIHF1ZXM/LnR5cGUgIT09ICdEcm9wZG93bicgJiYgcXVlcy50eXBlICE9PSAnRGF0ZVRpbWUnICYmIHF1ZXMudHlwZSAhPT0gJ0xvY2F0aW9uJyAmJiBxdWVzLnR5cGUgIT09ICdOdW1iZXInICYmICBxdWVzLnR5cGUgIT09ICdEYXRlJyAmJiBxdWVzLnR5cGUgIT09ICdUaW1lJyAmJiBxdWVzLnR5cGUgIT09ICdUZXh0QXJlYScgJiYgcXVlcy50eXBlICE9PSAnTGFiZWwnKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJxdWVzLnN0eWxlPy5sYWJlbFN0eWxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCInZGlzLWZsZXggc2hlbmdlbC1teXQtZm9udDMgbXl0LWZvbnQ3ICdcIiBbc3R5bGVdPVwicXVlcy5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICdmb250LWZhbWlseSc6IHF1ZXMuZm9udCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvcic6IHF1ZXMuZm9udENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZSc6IHF1ZXMuZm9udFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZm9udC13ZWlnaHQnOiBxdWVzLmZvbnRXZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICB9XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoYXJhY3RlcnMocXVlcz8ucXVlc3Rpb25UZXh0KSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuaXNPcHRpb25hbCAmJiAhcXVlcy5pc1JlYWRPbmx5XCIgc3R5bGU9XCJjb2xvcjogcmVkO1wiPio8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMTNNQVIyNSBvbmx5IHNob3cgb24gZmlsZSB0eXBlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSUyAxN0pBTjIwMjUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERpc3BsYXlzIGljb25zIHdpdGggdG9vbHRpcHMgaGVscCB0ZXh0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMucXVlc3Rpb25UZXh0ICYmIHF1ZXM/LmhlbHBUZXh0ICYmIHF1ZXMudHlwZSA9PT0gJ0ZpbGUnXCIgY2xhc3M9XCJpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJxdWVzPy5oZWxwVGV4dFwiIG1hdFRvb2x0aXBDbGFzcz1cIndoaXRlLXRvb2x0aXBcIj5pPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJTIDE3SkFOMjAyNSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gIERpc3BsYXlzIGljb25zIHdpdGggdG9vbHRpcHMgZm9yIGZpbGUgcmVxdWlyZW1lbnRzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb25cIiAqbmdJZj1cInF1ZXMuZmllbGRzTWV0YSAmJiBxdWVzLnR5cGUgPT09ICdGaWxlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0RmlsZVJlcXVpcmVtZW50cyhxdWVzLmZpZWxkc01ldGEpXCIgbWF0VG9vbHRpcENsYXNzPVwid2hpdGUtdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogNHB4O1wiPmk8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gY2FsZW5kYXIgIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdDYWxlbmRhcidcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tY2FsZW5kYXIgW3F1ZXN0aW9uXT1cInF1ZXNcIiAoZXZlbnRTZWxlY3RlZCk9XCJnZXRDYWxlbmRhckV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVTZWxlY3RlZCk9XCJnZXRDdXJyZW50Q2FsZW5kYXIoJGV2ZW50KVwiIChvcGVuTW9kYWwpPVwib3BlbkNhbGVuZGFyTW9kYWwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xvc2VNb2RhbCk9XCJjbG9zZUNhbGVuZGFyTW9kYWwoJGV2ZW50KVwiPjwvYXBwLWN1c3RvbS1jYWxlbmRhcj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBtb2RlbCB1c2VkIGluIGNhbGVuZGFyIGNvbXBvbmVudCAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tbW9kZWwgKm5nSWY9XCJpc0NhbGVuZGFyTW9kYWxPcGVuXCIgW21vZGFsVGl0bGVdPVwiY2FsZW5kYXJNb2RhbFRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc01vZGFsT3Blbl09XCJpc0NhbGVuZGFyTW9kYWxPcGVuXCIgW21vZGFsU2l6ZV09XCJjYWxlbmRhck1vZGFsU2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2F2ZUJ1dHRvblZhbHVlXT1cImNhbGVuZGFyU2F2ZUJ1dHRvblZhbHVlXCIgW21vZGFsRm9vdGVyXT1cIm1vZGFsQ2FsZW5kYXJNb2RhbEZvb3RlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2F2ZUJ1dHRvbkVtaXQpPVwib25DYWxlbmRhck1vZGFsU2F2ZSgpXCIgKGNhbmNlbEJ1dHRvbkVtaXQpPVwiY2xvc2VDYWxlbmRhck1vZGFsKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb25ib29rIFtxYkl0ZW1dPVwicWJSZWZyZW5jZUJvb2tcIiBbcXVlc3Rpb25zXT1cInJlZmVyZW5jZVF1ZXN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhhbmRsZVF1ZXN0aW9uKT1cImhhbmRsZVF1ZXN0aW9uRXZlbnQoJGV2ZW50KVwiPjwvbGliLXF1ZXN0aW9uYm9vaz5cbiAgICAgICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLW1vZGVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBTS1MxMUpVTjI1IGZvciBwaWNrIGxvY2F0aW9uIC0tPlxuICAgICAgICAgICAgICAgIDxhcHAtcGljay1sb2NhdGlvbiAgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdMb2NhdGlvbidcIiBbYXBpS2V5XT1cInFiSXRlbVsnYXBpS2V5J11cIiBbYWRkcmVzc109XCJxdWVzLnNlbGVjdGVkVmFsdWVcIiBbcXVlc3Rpb25dPVwicXVlc1wiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgIChsb2NhdGlvblNlbGVjdGVkKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1waWNrLWxvY2F0aW9uPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBTS1MyNU1BUjI1IEltYWdlIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdJbWFnZSdcIiAobW91c2VlbnRlcik9XCJpc0ltYWdlSG92ZXIgPSB0cnVlO1wiXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImlzSW1hZ2VIb3ZlciA9IGZhbHNlO1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNJbWFnZUhvdmVyXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGVuZDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCIhcXVlcy5pc1JlYWRPbmx5XCIgKGNsaWNrKT1cIm9uSW1hZ2VFZGl0KHF1ZXMpXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMS4xMDY3IDYuMDcxNzRMOS45MjgzMyA0Ljg5MzRMMi4xNjY2NyAxMi42NTUxVjEzLjgzMzRIMy4zNDVMMTEuMTA2NyA2LjA3MTc0Wk0xMi4yODUgNC44OTM0TDEzLjQ2MzMgMy43MTUwN0wxMi4yODUgMi41MzY3NEwxMS4xMDY3IDMuNzE1MDdMMTIuMjg1IDQuODkzNFpNNC4wMzUgMTUuNTAwMUgwLjVWMTEuOTY0MkwxMS42OTU4IDAuNzY4NDAzQzExLjg1MjEgMC42MTIxNzcgMTIuMDY0IDAuNTI0NDE0IDEyLjI4NSAwLjUyNDQxNEMxMi41MDYgMC41MjQ0MTQgMTIuNzE3OSAwLjYxMjE3NyAxMi44NzQyIDAuNzY4NDAzTDE1LjIzMTcgMy4xMjU5QzE1LjM4NzkgMy4yODIxOCAxNS40NzU3IDMuNDk0MSAxNS40NzU3IDMuNzE1MDdDMTUuNDc1NyAzLjkzNjA0IDE1LjM4NzkgNC4xNDc5NiAxNS4yMzE3IDQuMzA0MjRMNC4wMzU4MyAxNS41MDAxSDQuMDM1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNkM3NTdEXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFxdWVzLmlzUmVhZE9ubHlcIiAoY2xpY2spPVwib25JbWFnZURlbGV0ZShxdWVzKVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQgMy45ODcyNkMxMS43OCAzLjc2NzI2IDkuNTQ2NjcgMy42NTM5MyA3LjMyIDMuNjUzOTNDNiAzLjY1MzkzIDQuNjggMy43MjA2IDMuMzYgMy44NTM5M0wyIDMuOTg3MjZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTUuNjY2NSAzLjMxMzYyTDUuODEzMTcgMi40NDAyOEM1LjkxOTg0IDEuODA2OTUgNS45OTk4NCAxLjMzMzYyIDcuMTI2NSAxLjMzMzYySDguODczMTdDOS45OTk4NCAxLjMzMzYyIDEwLjA4NjUgMS44MzM2MiAxMC4xODY1IDIuNDQ2OTVMMTAuMzMzMiAzLjMxMzYyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi41NjY3IDYuMDkzNzVMMTIuMTMzNCAxMi44MDcxQzEyLjA2IDEzLjg1MzcgMTIgMTQuNjY3MSAxMC4xNCAxNC42NjcxSDUuODYwMDJDNC4wMDAwMiAxNC42NjcxIDMuOTQwMDIgMTMuODUzNyAzLjg2NjY4IDEyLjgwNzFMMy40MzMzNSA2LjA5Mzc1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02Ljg4NjQ3IDExLjAwMDRIOS4xMDY0N1wiIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4zMzM1IDguMzMzMjVIOS42NjY4M1wiIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwicXVlcy5pc1JlYWRPbmx5XCIgW3NyY109XCJxdWVzLmltYWdlRGF0YVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcXVlcy5pc1JlYWRPbmx5XCIgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBMb2dvIHByZXZpZXcgYXJlYSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLXByZXZpZXdcIiAqbmdJZj1cInF1ZXMuaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwicXVlcy5pbWFnZURhdGFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVXBsb2FkIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcXVlcy5pbWFnZURhdGFcIiBjbGFzcz1cImxvZ28tdXBsb2FkLXBsYWNlaG9sZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImxvZ28tdXBsb2FkLXt7aX19XCIgY2xhc3M9XCJsb2dvLXVwbG9hZC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9JbWFnZS5zdmdcIiBhbHQ9XCJVcGxvYWRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5VcGxvYWQgSW1hZ2U8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBpZD1cImxvZ28tdXBsb2FkLXt7aX19XCIgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiZmlsZUNoYW5nZUV2ZW50KHF1ZXMsICRldmVudClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMjFNQVIyNSBsaW5lIC0tPlxuICAgICAgICAgICAgICAgIDxociAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0xpbmUnXCIgY2xhc3M9XCJjdXN0b20tbGluZVwiIHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWZsZXhcIiAvPlxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMTNNQVIyNSBkYXRhIHRhYmxlIC0tPlxuICAgICAgICAgICAgICAgIDxueHQtZGF0YXRhYmxlICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGFibGUnXCIgaXNFZGl0Um93IGlzRGVsZXRlUm93IGFjdGlvbkJ1dHRvbiBpc0J1dHRvbnMgW3F1ZXN0aW9uXT1cInF1ZXNcIiBmcm9tPVwiZm9ybUJ1aWxkZXJcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LmRhdGEsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIiBbYXBpTWV0YV09XCJxdWVzLnN1YlRleHRcIlxuICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJpc0VkaXQgIT09IHRydWUgPyAndmlldycgOiAnZWRpdCdcIlxuICAgICAgICAgICAgICAgICAgICBbdGFibGVDb25maWddPVwicXVlcy50YWJsZUNvbmZpZ1wiIHRhYmxlSWQ9XCJcIiBkaXJlY3Rpb249XCJsdHJcIiB0YWJsZVdpZHRoPVwiYXV0b1wiPlxuICAgICAgICAgICAgICAgIDwvbnh0LWRhdGF0YWJsZT5cbiAgICAgICAgICAgICAgICA8IS0tIGxpc3QgLS0+XG4gICAgICAgICAgICAgICAgPG54dC1zZWFyY2gtYm94ICAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0xpc3QnXCIgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCIgW2FwaU1ldGFdPVwicXVlcy5zdWJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cInF1ZXMuaWRcIiBbcGxhY2VIb2xkZXJUZXh0XT1cInF1ZXMucXVlc3Rpb24gfHwgJydcIiBbZmlsdGVyTmFtZV09XCJxdWVzLmlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgICAgKHNlYXJjaFZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudC52YWx1ZSwkZXZlbnQucXVlc3Rpb24pXCI+XG4gICAgICAgICAgICAgICAgPC9ueHQtc2VhcmNoLWJveD5cblxuICAgICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgPCEtLSBIQSAwOUZFQjI0IEFkZGVkIGNvbmRpdGlvbiBvZiBzcU9wdGlvbiB0byB0aGUgZHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tZHJvcGRvd24gKm5nSWY9XCJxdWVzPy50eXBlID09PSAnRHJvcGRvd24nICYmIHF1ZXM/Lm9wdGlvbnNcIiBbb3B0aW9uc109XCJxdWVzLm9wdGlvbnNcIiBbdG9rZW5dPVwidG9rZW5cIiBbYXBpTWV0YV09XCJxdWVzLnN1YlRleHRcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwicXVlcy5pZFwiIFtzZWxlY3RlZFZhbHVlXT1cInFiSXRlbS5pc1NoZW5nZWwgPyBxdWVzLmlucHV0IDogcXVlcy5zZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCItLS17eydzZWxlY3QnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fS0tLVwiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5lcnJvck1lc3NhZ2VcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtyZWZlcmVuY2VGaWVsZF09XCJxdWVzLnJlZmVyZW5jZUZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudC52YWx1ZSwkZXZlbnQucXVlc3Rpb24pOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgPCEtLSAvLyBWRCAwMkF1ZzI0IGN1c3RvbS1yYWRpbyBjb21wb25lbnQgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1JhZGlvJyAmJiBxdWVzPy5vcHRpb25zXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tcmFkaW8gW29wdGlvbnNdPVwicXVlcy5vcHRpb25zXCIgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbdG9rZW5dPVwidG9rZW5cIiBbYXBpTWV0YV09XCJxdWVzLnN1YlRleHRcIiBbaWRdPVwicXVlcy5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJxdWVzLnNlbGVjdGVkVmFsdWVcIiBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlZmVyZW5jZUZpZWxkXT1cInF1ZXMucmVmZXJlbmNlRmllbGRcIiBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LnZhbHVlLCRldmVudC5xdWVzdGlvbik7IGNsZWFyU1FFcnJvcihxdWVzLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tcmFkaW8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIEF0dGFjaG1lbnQgLyBGaWxlcyAtLT5cbiAgICAgICAgICAgICAgICA8YXBwLWZpbGUtdXBsb2FkICpuZ0lmPVwicXVlcy50eXBlID09PSAnRmlsZSdcIiBbbGltaXRGaWxlVXBsb2FkaW5nXT1cIjVcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgICAgW2FsbEZpbGVzXT1cInF1ZXMuaW5wdXRcIiAoc2VsZWN0ZWRGaWxlRGF0YSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQudmFsdWUsJGV2ZW50LnF1ZXN0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgIChkZWxldGVkRmlsZURhdGEpPVwiZGVsZXRlRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWZpbGUtdXBsb2FkPlxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMTFKVU4yNSBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgPG54dC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdCdXR0b24nXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgICAgW2J0bkhlaWdodF09XCInNTBweCdcIiBbYnRuV2lkdGhdPVwiJzE1MHB4J1wiIFtidXR0b25WYWx1ZV09XCJxdWVzPy5xdWVzdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIChidXR0b25DbGlja0VtaXQpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L254dC1idXR0b24+XG4gICAgICAgICAgICAgICAgPCEtLSBTS1MxMUpVTjI1IGJvb2sgdHlwZSAtLT5cbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uYm9vayAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0Jvb2snXCIgW3FiSXRlbV09XCJxdWVzLnFiSXRlbVwiIFtsYWJlbFZhbHVlXT1cImxhYmVsVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25zXT1cInJlYWRRdWVzdGlvbnMocXVlcy5xYlJlZmVyZW5jZSwgcXVlcy5xYlJlZmVyZW5jZVF1ZXN0aW9ucylcIlxuICAgICAgICAgICAgICAgICAgICAoaGFuZGxlRHJvcERvd24pPVwiZ2V0RHJvcERvd24oJGV2ZW50KVwiPjwvbGliLXF1ZXN0aW9uYm9vaz5cbiAgICAgICAgICAgICAgICA8IS0tIFNLUzExSlVOMjUgVGV4dCwgRW1haWwsIGxhYmVsLCBudW1iZXIsIEJvb2xlYW4sIHJpY2ggdGV4dCBlZGl0b3IsIERhdGVUaW1lLCBEYXRlLCBUaW1lLS0+XG4gICAgICAgICAgICAgICAgPG54dC1pbnB1dCAgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUZXh0JyB8fCBxdWVzLnR5cGUgPT09ICdFbWFpbCcgfHwgcXVlcy50eXBlID09PSAnTnVtYmVyJyB8fCBxdWVzLnR5cGUgPT09ICdMYWJlbCcgfHwgcXVlcy50eXBlID09PSAnQm9vbGVhbicgfHwgcXVlcy50eXBlID09PSAnUmljaFRleHRBcmVhJyB8fCBxdWVzLnR5cGUgPT09ICdEYXRlVGltZScgfHwgcXVlcy50eXBlID09PSAnRGF0ZScgfHwgcXVlcy50eXBlID09PSAnVGltZScgfHwgcXVlcy50eXBlID09PSAnVGV4dEFyZWEnXCJcbiAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwicXVlcy50eXBlID09PSAnVGV4dCcgPyAndGV4dCcgOiBxdWVzLnR5cGUgPT09ICdFbWFpbCcgPyAnZW1haWwnIDogcXVlcy50eXBlID09PSAnTnVtYmVyJyA/ICdudW1iZXInIDogcXVlcy50eXBlID09PSAnTGFiZWwnID8gJ2xhYmVsJyA6IHF1ZXMudHlwZSA9PT0gJ0Jvb2xlYW4nID8gJ2NoZWNrYm94JyA6IHF1ZXMudHlwZSA9PT0gJ1JpY2hUZXh0QXJlYScgPyAncmljaHRleHQnIDogcXVlcy50eXBlID09PSAnRGF0ZVRpbWUnID8gJ2RhdGV0aW1lJyA6IHF1ZXMudHlwZSA9PT0gJ0RhdGUnID8gJ2RhdGUnIDogIHF1ZXMudHlwZSA9PT0gJ1RpbWUnID8gJ3RpbWUnIDogcXVlcy50eXBlID09PSAnVGV4dEFyZWEnID8gJ3RleHRhcmVhJyA6ICd0ZXh0J1wiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJxdWVzLmlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cInF1ZXNcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxGb250XT1cInF1ZXMuZm9udFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJyZW1vdmVDaGFyYWN0ZXJzKHF1ZXM/LnF1ZXN0aW9uVGV4dClcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxDb2xvcl09XCJxdWVzLmZvbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbFNpemVdPVwicXVlcy5mb250U2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbnB1dFZhbHVlU2l6ZV09XCJxdWVzLmZvbnRTaXplXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsV2VpZ2h0XT1cInF1ZXMuZm9udFdlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIFtpbnB1dFdlaWdodF09XCJxdWVzLmZvbnRXZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0xhYmVsXT1cInF1ZXMuc3R5bGU/LnNob3dMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIGlucHV0Qm9yZGVyPVwibm9uZVwiIHN2Z0hlaWdodD1cIjIwcHhcIiBzdmdXaWR0aD1cIjIwcHhcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicXVlcy5xdWVzdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJxdWVzLmlzT3B0aW9uYWxcIiBpbnB1dEJnQ29sb3I9XCIjRkFGQUZBXCJcbiAgICAgICAgICAgICAgICAgICAgW2lucHV0SWRdPVwicXVlcy50cmFja2luZ0lkXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yTWVzc2FnZXNdPVwieyByZXF1aXJlZDogJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnIH1cIlxuICAgICAgICAgICAgICAgICAgICBbaW5wdXRJY29uTGVmdFNyY109XCJxdWVzLmljb25MZWZ0U3JjXCIgXG4gICAgICAgICAgICAgICAgICAgIFttaW5EYXRlXT1cInF1ZXMubWluRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAoaW5wdXRWYWx1ZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQudmFsdWUsJGV2ZW50LnF1ZXN0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L254dC1pbnB1dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tU0tTMjVNQVIyNSBNb2RhbCBPdmVybGF5IC0tPlxuPGRpdiBjbGFzcz1cIm1vZGFsLW92ZXJsYXlcIiAqbmdJZj1cImlzSW1hZ2VFZGl0XCI+XG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjbG9zZS1idXR0b25cIiAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCI+w5c8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBJbWFnZSBFZGl0b3IgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEltYWdlRWxlbWVudD8udHlwZSA9PT0gJ0ltYWdlJ1wiPlxuICAgICAgICAgICAgPGltYWdlLWNyb3BwZXIgKm5nSWY9XCJzZWxlY3RlZEltYWdlRWxlbWVudC5pbWFnZURhdGFcIiBbaW1hZ2VCYXNlNjRdPVwic2VsZWN0ZWRJbWFnZUVsZW1lbnQub3JnSW1hZ2VEYXRhXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIiBbYWxpZ25JbWFnZV09XCJhbGlnbkltYWdlXCIgW3JvdW5kQ3JvcHBlcl09XCJyb3VuZENyb3BwZXJcIiBbYmFja2dyb3VuZENvbG9yXT1cIid3aGl0ZSdcIlxuICAgICAgICAgICAgICAgIGltYWdlQWx0VGV4dD1cIkFsdGVybmF0aXZlIGltYWdlIHRleHRcIiBbYWxsb3dNb3ZlSW1hZ2VdPVwiZmFsc2VcIiBbaGlkZVJlc2l6ZVNxdWFyZXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtjYW52YXNSb3RhdGlvbl09XCJjYW52YXNSb3RhdGlvblwiIFthc3BlY3RSYXRpb109XCJhc3BlY3RSYXRpb1wiIFtjb250YWluV2l0aGluQXNwZWN0UmF0aW9dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFttYWludGFpbkFzcGVjdFJhdGlvXT1cImZhbHNlXCIgW2Nyb3BwZXJTdGF0aWNXaWR0aF09XCJjcm9wcGVyU3RhdGljV2lkdGhcIlxuICAgICAgICAgICAgICAgIFtjcm9wcGVyU3RhdGljSGVpZ2h0XT1cImNyb3BwZXJTdGF0aWNIZWlnaHRcIiBbY3JvcHBlck1pbldpZHRoXT1cImNyb3BwZXJNaW5XaWR0aFwiXG4gICAgICAgICAgICAgICAgW2Nyb3BwZXJNaW5IZWlnaHRdPVwiY3JvcHBlck1pbkhlaWdodFwiIFtjcm9wcGVyTWF4V2lkdGhdPVwiY3JvcHBlck1heFdpZHRoXCJcbiAgICAgICAgICAgICAgICBbY3JvcHBlck1heEhlaWdodF09XCJjcm9wcGVyTWF4SGVpZ2h0XCIgW3Jlc2V0Q3JvcE9uQXNwZWN0UmF0aW9DaGFuZ2VdPSd0cnVlJyBbKGNyb3BwZXIpXT1cImNyb3BwZXJcIlxuICAgICAgICAgICAgICAgIFsodHJhbnNmb3JtKV09XCJ0cmFuc2Zvcm1cIiBbb25seVNjYWxlRG93bl09XCJ0cnVlXCIgb3V0cHV0PVwiYmxvYlwiIGZvcm1hdD1cInBuZ1wiXG4gICAgICAgICAgICAgICAgKGltYWdlQ3JvcHBlZCk9XCJpbWFnZUNyb3BwZWQoJGV2ZW50KVwiIChjcm9wcGVyUmVhZHkpPVwiY3JvcHBlclJlYWR5KCRldmVudClcIj5cbiAgICAgICAgICAgIDwvaW1hZ2UtY3JvcHBlcj5cblxuICAgICAgICAgICAgPCEtLSBDb250cm9scyAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEltYWdlRWxlbWVudC5pbWFnZURhdGFcIiBjbGFzcz1cImNvbnRyb2xzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJyb3RhdGVMZWZ0KClcIiB0aXRsZT1cIlJvdGF0ZSBMZWZ0XCI+4p+yPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJyb3RhdGVSaWdodCgpXCIgdGl0bGU9XCJSb3RhdGUgUmlnaHRcIj7in7M8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cInpvb21PdXQoKVwiIHRpdGxlPVwiWm9vbSBPdXRcIj4tPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJ6b29tSW4oKVwiIHRpdGxlPVwiWm9vbSBJblwiPis8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cIm1vdmVMZWZ0KClcIiB0aXRsZT1cIk1vdmUgTGVmdFwiPuKGkDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwibW92ZVJpZ2h0KClcIiB0aXRsZT1cIk1vdmUgUmlnaHRcIj7ihpI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cIm1vdmVVcCgpXCIgdGl0bGU9XCJNb3ZlIFVwXCI+4oaRPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJtb3ZlRG93bigpXCIgdGl0bGU9XCJNb3ZlIERvd25cIj7ihpM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cImZsaXBIb3Jpem9udGFsKClcIiBbY2xhc3MuZW5hYmxlZF09XCJ0cmFuc2Zvcm0uZmxpcEhcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkZsaXAgSG9yaXpvbnRhbGx5XCI+4oaUPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJmbGlwVmVydGljYWwoKVwiIFtjbGFzcy5lbmFibGVkXT1cInRyYW5zZm9ybS5mbGlwVlwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiRmxpcCBWZXJ0aWNhbGx5XCI+4oaVPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJyZXNldEltYWdlKClcIiB0aXRsZT1cIlJlc2V0XCI+w5c8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
785
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25ib29rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUE0RSxNQUFNLGVBQWUsQ0FBQztBQU1qSyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUdyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDekcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDNUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDekYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDckcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztB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QU07MkJBQUMsUUFBUTt5Q0ExRlQsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFDRSxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBbUVJLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFFRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBWaWV3Q2hpbGQsIENoYW5nZURldGVjdG9yUmVmLCBTaW1wbGVDaGFuZ2VzLCBDb21wb25lbnRSZWYsIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFF1ZXN0aW9uLCBRdWVzdGlvbkJvb2sgfSBmcm9tICcuLi8uLi93cmFwcGVyJztcbmltcG9ydCB7IFNhbGVzZm9yY2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NhbGVzZm9yY2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEVycm9yV3JhcHBlciB9IGZyb20gJy4uLy4uL21vZGVsL2Vycm9yV3JhcHBlcic7XG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaTE4bi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERlcGVuZGVuY3lNZXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9kZXBlbmRlbmN5TWV0YSc7XG5pbXBvcnQgeyBDcm9wcGVyUG9zaXRpb24sIERpbWVuc2lvbnMsIEltYWdlVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9pbWFnZS1jcm9wcGVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJbWFnZUNyb3BwZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ltYWdlLWNyb3BwZXIvY29tcG9uZW50L2ltYWdlLWNyb3BwZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbVJhZGlvQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jdXN0b20tcmFkaW8vY3VzdG9tLXJhZGlvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2N1c3RvbS1kcm9wZG93bi9jdXN0b20tZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IE54dFNlYXJjaEJveCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2VhcmNoLWJveC9zZWFyY2gtYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHREYXRhdGFibGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IFBpY2tMb2NhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcGljay1sb2NhdGlvbi9waWNrLWxvY2F0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdXN0b21Nb2RlbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3VzdG9tLW1vZGVsL2N1c3RvbS1tb2RlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2N1c3RvbS1jYWxlbmRhci9jdXN0b20tY2FsZW5kYXIuY29tcG9uZW50JztcbmltcG9ydCB7IEkxOG5QaXBlIH0gZnJvbSAnLi4vLi4vaTE4bi5waXBlJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE54dElucHV0IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ueHQtaW5wdXQvbnh0LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHRCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2J1dHRvbi9ueHQtYnV0dG9uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1xdWVzdGlvbmJvb2snLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLCBJbWFnZUNyb3BwZXJDb21wb25lbnQsIEZpbGVVcGxvYWRDb21wb25lbnQsIEN1c3RvbVJhZGlvQ29tcG9uZW50LCBDdXN0b21Ecm9wZG93bkNvbXBvbmVudCwgTnh0QnV0dG9uQ29tcG9uZW50LCBOeHRTZWFyY2hCb3gsIE54dERhdGF0YWJsZSwgUGlja0xvY2F0aW9uQ29tcG9uZW50LCBDdXN0b21Nb2RlbENvbXBvbmVudCwgQ3VzdG9tQ2FsZW5kYXJDb21wb25lbnQsIEkxOG5QaXBlLCBNYXRUb29sdGlwTW9kdWxlLCBOeHRJbnB1dFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVlc3Rpb25ib29rLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbmJvb2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBxYkl0ZW06IFF1ZXN0aW9uQm9vaztcbiAgQElucHV0KCkgcXVlc3Rpb25JdGVtOiBRdWVzdGlvbjtcbiAgQElucHV0KCkgdHJhbnNsYXRlZFF1ZXN0aW9uczogYW55W10gPSBbXSAgLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgQElucHV0KCkgcXVlc3Rpb25zOiBhbnlbXTtcbiAgQElucHV0KCkgZXJyb3JGaWVsZElkOiBhbnk7XG4gIEBJbnB1dCgpIGxhYmVsVmFsdWU6IHN0cmluZztcbiAgQElucHV0KCkgdG9rZW46IHN0cmluZzsgLy8gVkQgMTlKQU4yNCAtIGdldHRpbmcgdG9rZW4gYXMgaW5wdXRcbiAgQElucHV0KCkgaXNFZGl0OiBib29sZWFuO1xuICBAT3V0cHV0KCkgaGFuZGxlRHJvcERvd246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVRdWVzdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTsgLy8gVkQgMTlKdWwwMSAtIGdldCB1cGRhdGVkIHF1ZXN0aW9uXG4gIEBPdXRwdXQoKSBzaW5nbGVGaWVsZENoYW5nZUVtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIGRyb3BEb3duRGF0YTogYW55O1xuICBASW5wdXQoKSBkYXRhQmluZDogYW55O1xuICAvL0BWaWV3Q2hpbGQoQ29tcG9uZW50aG9zdERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgZHluYW1pY0hvc3Q6IENvbXBvbmVudGhvc3REaXJlY3RpdmU7XG4gIHN1YlF1ZXN0aW9uczogUXVlc3Rpb25bXTtcbiAgc2VsZWN0ZWRGaWxlRGF0YTogYW55W10gPSBbXTtcbiAgbG9hZENvbXBvbmVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgLy8gSEEgMjhERUMyMyBBZGRlZCBzdHlsaW5nIGFuZCBsb2dpY3MgdG8gbG9hZCB0aGUgYm9vayB0eXBlIHF1ZXN0aW9ucyBcbiAgcWJSZWY6IFF1ZXN0aW9uQm9vaztcbiAgLy8gIEhBIDE5REVDMjMgRGVjbGFyYXRpb24gZm9yIFNhbGVzZm9yY2UgU3R5bGluZ1xuICBzdHlsZTogYW55O1xuICBsYW5nRGlyZWN0aW9uID0gJ2x0cic7XG4gIGJvb2tTdHlsZTogYW55O1xuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgaXNJbWFnZUVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VsZWN0ZWRJbWFnZUVsZW1lbnQ6IGFueTtcbiAgdHJhbnNmb3JtOiBJbWFnZVRyYW5zZm9ybSA9IHtcbiAgICB0cmFuc2xhdGVVbml0OiAncHgnLFxuICAgIHNjYWxlOiAxLFxuICAgIHJvdGF0ZTogMCxcbiAgICBmbGlwSDogZmFsc2UsXG4gICAgZmxpcFY6IGZhbHNlLFxuICAgIHRyYW5zbGF0ZUg6IDAsXG4gICAgdHJhbnNsYXRlVjogMFxuICB9O1xuICBjYW52YXNSb3RhdGlvbiA9IDA7XG4gIGNyb3BwZXI/OiBDcm9wcGVyUG9zaXRpb247XG4gIGxvYWRpbmcgPSBmYWxzZTtcbiAgY3JvcHBlck1heEhlaWdodCA9IDA7XG4gIGNyb3BwZXJNYXhXaWR0aCA9IDA7XG4gIGNyb3BwZXJNaW5IZWlnaHQgPSAwO1xuICBjcm9wcGVyTWluV2lkdGggPSAwO1xuICBjcm9wcGVyU3RhdGljV2lkdGggPSAwO1xuICBjcm9wcGVyU3RhdGljSGVpZ2h0ID0gMDtcbiAgYXNwZWN0UmF0aW8gPSA0IC8gMztcbiAgcm91bmRDcm9wcGVyID0gZmFsc2U7XG4gIGltYWdlQ2hhbmdlZEV2ZW50OiBFdmVudCB8IG51bGwgPSBudWxsO1xuICBhbGlnbkltYWdlID0gJ2NlbnRlcicgYXMgY29uc3Q7XG4gIGlzSW1hZ2VIb3ZlciA9IGZhbHNlO1xuXG4gIC8vIFJTIDE3SkFOMjAyNVxuICAvL0Zvcm1hdHMgYW5kIHJldHVybnMgZmlsZSB1cGxvYWQgcmVxdWlyZW1lbnRzIGZyb20gYSBKU09OIHN0cmluZ1xuICBnZXRGaWxlUmVxdWlyZW1lbnRzKGZpZWxkc01ldGE6IGFueSk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldGFEYXRhID0gdHlwZW9mIGZpZWxkc01ldGEgPT09ICdvYmplY3QnICA/ICBmaWVsZHNNZXRhIDogSlNPTi5wYXJzZShmaWVsZHNNZXRhKSA7XG4gICAgICBjb25zdCBmaWxlQ29uZmlnID0gbWV0YURhdGFbMF07XG5cbiAgICAgIGlmICghZmlsZUNvbmZpZykgcmV0dXJuICcnO1xuXG4gICAgICBjb25zdCByZXF1aXJlbWVudHMgPSBbXTtcblxuICAgICAgaWYgKGZpbGVDb25maWcuYWxsb3dlZFR5cGVzPy5sZW5ndGgpIHtcbiAgICAgICAgcmVxdWlyZW1lbnRzLnB1c2goYEFjY2VwdGVkIGZvcm1hdHM6ICR7ZmlsZUNvbmZpZy5hbGxvd2VkVHlwZXMuam9pbignLCAnKX1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGVDb25maWcubWF4RmlsZVNpemUpIHtcbiAgICAgICAgcmVxdWlyZW1lbnRzLnB1c2goYE1heGltdW0gc2l6ZSBwZXIgZmlsZTogJHtmaWxlQ29uZmlnLm1heEZpbGVTaXplIC8gMTA0ODU3Nn1NQmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZUNvbmZpZy5tYXhGaWxlcykge1xuICAgICAgICByZXF1aXJlbWVudHMucHVzaChgTWF4aW11bSBudW1iZXIgb2YgZmlsZXM6ICR7ZmlsZUNvbmZpZy5tYXhGaWxlc31gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcXVpcmVtZW50cy5tYXAocmVxID0+IHJlcS50cmltKCkpLmpvaW4oJ1xcbicpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIGZpZWxkc01ldGE6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuICBAT3V0cHV0KCkgaGFkbGVEcm9wRG93bkRlcGVuZGVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xuICBAT3V0cHV0KCkgaGFuZGxlQ2FsZW5kYXJEYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhhbmRsZUNhbGVuZGFyRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgYm9va1F1ZXN0aW9uc01hcDogYW55ID0gbmV3IE1hcCgpO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNmU2VydmljZTogU2FsZXNmb3JjZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VTZXJ2aWNlOiBDaGFuZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlLFxuICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50XG4gICkge1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gVkQgMTNTZXAyNCBjaGFuZ2VzXG4gICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xuICAgIC8vIFZEIHNlcDEzMjQgY2hhbmdlcyAtIHByb2Nlc3MgZGF0YSB3aGVuIGRhdGFiaW5kIHZhbHVlIGNoYW5nZVxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5jaGFuZ2VTZXJ2aWNlLmN1c3RvbUNoYW5nZSQuc3Vic2NyaWJlKFxuICAgICAgKGNoYW5nZVZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChjaGFuZ2VWYWx1ZSA9PSAnZGF0YUJpbmQnKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBTS1MyME1BUjI1IEVuc3VyZSB0aGUgY2hpbGQgY29tcG9uZW50IGlzIGF2YWlsYWJsZSBiZWZvcmUgY2FsbGluZyB0aGUgbWV0aG9kXG4gICAgIC8vIEFQLTI2TUFSMjUgRW5zdXJlIHF1ZXMuc3ViVGV4dCBpcyBhbHdheXMgYW4gb2JqZWN0IGJ5IHBhcnNpbmcgaXQgaWYgaXQncyBhIHN0cmluZ1xuICAgIC8vICBBUC0yOE1BUjI1IEFkZCBCb29sZWFuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXMgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZVF1ZXMocXVlcyk7XG4gICAgICAgIGxldCBpbnB1dDogYW55O1xuICAgICAgICBpZiAocXVlcy50eXBlID09ICdEcm9wZG93bicgfHwgcXVlcy50eXBlID09ICdSYWRpbycgfHwgcXVlcy50eXBlID09ICdMb2NhdGlvbicpIHtcbiAgICAgICAgICBpbnB1dCA9IHt9XG4gICAgICAgICAgaW5wdXRbJ3ZhbHVlT2JqJ10gPSBxdWVzLmlucHV0ICB8fCBxdWVzLmRlZmF1bHRWYWx1ZSB8fCBudWxsXG4gICAgICAgICAgaW5wdXRbJ3JlZmVyZW5jZUZpZWxkJ10gPSBxdWVzLnJlZmVyZW5jZUZpZWxkIHx8IG51bGxcbiAgICAgICAgICBpbnB1dFsnZnJvbVF1ZXN0aW9uSWQnXSA9IHF1ZXMuaWQgfHwgbnVsbFxuICAgICAgICB9IGVsc2UgaWYgKHF1ZXMudHlwZSA9PSAnRGF0ZScgfHwgcXVlcy50eXBlID09ICdEYXRlVGltZScpIHtcbiAgICAgICAgICBpbnB1dCA9IHt9XG4gICAgICAgICAgaW5wdXQgPSBxdWVzLmlucHV0IHx8IHF1ZXMuZGVmYXVsdFZhbHVlIHx8IG51bGxcbiAgICAgICAgfSBcbiAgICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09ICdJbWFnZScpIHtcbiAgICAgICAgICBpbnB1dCA9IHF1ZXMub3JnSW1hZ2VEYXRhXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihxdWVzLnR5cGUgPT09ICdCb29sZWFuJyl7XG4gICAgICAgICAgaW5wdXQgPSB0eXBlb2YgcXVlcy5pbnB1dCAhPT0gJ3VuZGVmaW5lZCcgPyBxdWVzLmlucHV0ID09PSB0cnVlIHx8IHF1ZXMuaW5wdXQgPT09ICd0cnVlJyA6IHR5cGVvZiBxdWVzLmRlZmF1bHRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcgPyBxdWVzLmRlZmF1bHRWYWx1ZSA9PT0gdHJ1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZSA9PT0gJ3RydWUnIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaW5wdXQgPSBxdWVzLmlucHV0IHx8IHF1ZXMuZGVmYXVsdFZhbHVlIHx8IG51bGxcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoaWxkRXZlbnRDYXB0dXJlKGlucHV0LCBxdWVzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIGFzeW5jIGhhbmRsZVF1ZXMocXVlczogYW55KSB7XG4gICAgLy8gSEEgMTktSkFOLTI0IElmIGNvbmRpdGlvbiBpcyBmb3IgYmluZC1pbiwgY29ycmVjdGlvblxuICAgIC8vIEhBIDA5RkVCMjQgQWRkaW5nIGNvbmRpdGlvbiB0byBhdm9pZCB1bmRlZmluZWQgZXJyb3JcbiAgICBpZiAodGhpcy5kYXRhQmluZCAmJiBPYmplY3Qua2V5cyh0aGlzLmRhdGFCaW5kKS5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgcmVzdWx0ID0gdGhpcy5mbGF0dGVuT2JqZWN0KHRoaXMuZGF0YUJpbmQpXG4gICAgICBmb3IgKGxldCBba2V5LCB2YWxdIG9mIHJlc3VsdCkge1xuICAgICAgICBsZXQgdmFsdWU6IGFueSA9IHZhbDtcbiAgICAgICAgaWYgKHF1ZXMucmVmZXJlbmNlRmllbGQgPT09IGtleSkge1xuICAgICAgICAgIGlmIChxdWVzLnR5cGUgPT09ICdEcm9wZG93bicgfHwgcXVlcy50eXBlID09PSAnUmFkaW8nKSB7XG4gICAgICAgICAgICAvLyB0aGlzLnNxT3B0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgLy8gICBpZiAoZWxlbWVudFsncmVmZXJlbmNlRmllbGQnXSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAvLyAgICAgZWxlbWVudFsnaW5wdXQnXSA9IHF1ZXMuaW5wdXQgPSB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIC8vICAgICBlbGVtZW50WydzZWxlY3RlZFZhbHVlJ10gPSBxdWVzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEhBIDI0SkFOMjQgVG8gYmluZC1pbiBEYXRlIGFuZCBEYXRlVGltZVxuICAgICAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ0RhdGUnIHx8IHF1ZXMudHlwZSA9PSAnRGF0ZVRpbWUnKSB7XG4gICAgICAgICAgICBxdWVzLmlucHV0ID0gbmV3IERhdGUodmFsdWU/LnRvU3RyaW5nKCkpICB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSEEgMTJGRUIyNCBUbyBiaW5kLWluIExvY2F0aW9uIFR5cGVcbiAgICAgICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdMb2NhdGlvbicpIHtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIHF1ZXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlWydhZGRyZXNzJ10gPyB2YWx1ZVsnYWRkcmVzcyddIDogdmFsdWUgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlcyBmb3IgZGF0YSBiaW5kSW5cbiAgICAgICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdDYWxlbmRhcicpIHtcbiAgICAgICAgICAgIGxldCBlbnRyaWVzID0gdHlwZW9mIHF1ZXNbJ2ZpZWxkc01ldGEnXSA9PT0gJ29iamVjdCcgPyBxdWVzWydmaWVsZHNNZXRhJ10gOiBKU09OLnBhcnNlKHF1ZXNbJ2ZpZWxkc01ldGEnXSk7XG4gICAgICAgICAgICBpZiAoZW50cmllcykge1xuICAgICAgICAgICAgICBsZXQgcmVmZXJlbmNlUXVlc3Rpb25zID0gW107XG4gICAgICAgICAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5xdWVzdGlvblJlZmVyZW5jZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcVJlZmVyZW5jZSA9IEpTT04ucGFyc2UoZWxlbWVudC5xdWVzdGlvblJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVF1ZXN0aW9ucy5wdXNoKHFSZWZlcmVuY2U/LnF1ZXN0aW9uKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlUXVlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZT8uZm9yRWFjaChjYWxlbmRhckFycmF5ID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoY2FsZW5kYXJBcnJheS5kYXRlKTtcbiAgICAgICAgICAgICAgICAgIGNhbGVuZGFyQXJyYXkuZW50cmllcy5mb3JFYWNoKGlucHV0RW50cnkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoaW5wdXRFbnRyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VRdWVzdGlvbnMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQucmVmZXJlbmNlRmllbGQgPT0gaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ0RhdGUnIHx8IGZpZWxkLnR5cGUgPT0gJ0RhdGVUaW1lJyB8fCBmaWVsZC50eXBlID09ICdUaW1lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmlucHV0ID0gbmV3IERhdGUodj8udG9TdHJpbmcoKSkgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gaWYgKGZpZWxkLnR5cGUgPT09ICdEcm9wZG93bicgfHwgZmllbGQudHlwZSA9PT0gJ1JhZGlvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnNlbGVjdGVkVmFsdWUgPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmlucHV0ID0gdiAgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuaW5wdXQgPSB2IHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5hZGRFdmVudChkYXRlLCByZWZlcmVuY2VRdWVzdGlvbnMpOy8vU0tTIDI3U0VQMjQgZWFjaCBldmVudCBhZGRlZCB0byBhbGxFdmVudHMgYXJyYXlcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmFkZEV2ZW50KGRhdGUscmVmZXJlbmNlUXVlc3Rpb25zKTsgLy90aGlzIGlzIG9ubHkgbGFzdCBldmVudCBhZGRlZCB0byBhbGxFdmVudHMgYXJyYXlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBWRCAyMyBPY3QyNCAtIGZpbGUgdHlwZSBjaGFuZ2VzXG4gICAgICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09PSAnRmlsZScpIHtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSBbXTtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBxdWVzLmlucHV0ID0gdmFsdWUgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgcXVlc3Rpb24gPSB7fTtcbiAgICAgIHF1ZXN0aW9uWydpZCddID0gcXVlcy5pZDtcbiAgICAgIHF1ZXN0aW9uWydpbnB1dCddID0gcXVlcy5pbnB1dCB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgIC8vIEhBIDEyRkVCMjQgVG8gYmluZC1vdXQgTG9jYXRpb24gVHlwZVxuICAgICAgaWYgKHF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJykge1xuICAgICAgICBxdWVzdGlvblsnaW5wdXQnXSA9IHF1ZXMuaW5wdXQgPyBxdWVzLmlucHV0IDogcXVlcy5zZWxlY3RlZFZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChxdWVzLnR5cGUgPT0gJ0ZpbGUnKSB7XG4gICAgICAgIC8vIFZEIDIzIE9jdDI0IC0gZmlsZSB0eXBlIGNoYW5nZXNcbiAgICAgICAgcXVlc3Rpb25bJ2lucHV0J10gPSBxdWVzLmlucHV0ID8gcXVlcy5pbnB1dCA6IHF1ZXMuZGVmYXVsdFZhbHVlIHx8IFtdO1xuICAgICAgfVxuICAgICAgcXVlc3Rpb25bJ3R5cGUnXSA9IHF1ZXMudHlwZTtcbiAgICAgIHF1ZXN0aW9uWydxdWVzdGlvbk51bWJlciddID0gcXVlcy5xdWVzdGlvbk51bWJlcjtcbiAgICAgIHF1ZXN0aW9uWydyZWZlcmVuY2VGaWVsZCddID0gcXVlcz8ucmVmZXJlbmNlRmllbGQ7XG4gICAgICBxdWVzdGlvblsnc2VsZWN0ZWRWYWx1ZSddID0gcXVlcz8uc2VsZWN0ZWRWYWx1ZTsgIC8vIE1SIDMxSkFOMjQgTmVlZCB0byBwYXNzIHRoZSBzZWxlY3RlZCB2YWx1ZSB0b29cbiAgICB9XG4gIH1cbiAvLyBTS1MyME1BUjI1IGZsYXR0ZW5pbmcgbmVzdGVkIG9iamVjdHMsIG1hcHBpbmcgdmFsdWVzIHVzaW5nICByZWZlcmVuY2VGaWVsZFxuIGZsYXR0ZW5PYmplY3Qob2JqOiBhbnksIHBhcmVudEtleSA9ICcnLCBpbmNsdWRlT2JqZWN0cyA9IHRydWUpIHtcbiAgbGV0IHJlc3VsdDogYW55W10gPSBbXTtcblxuICBmb3IgKGxldCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICBsZXQgbmV3S2V5ID0gcGFyZW50S2V5ID8gYCR7cGFyZW50S2V5fS4ke2tleX1gIDoga2V5O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0LnB1c2goW25ld0tleSwgdmFsXSk7IC8vIEluY2x1ZGUgZnVsbCBhcnJheVxuXG4gICAgICB2YWwuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiBpdGVtICE9PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5mbGF0dGVuT2JqZWN0KGl0ZW0sIGAke25ld0tleX1bJHtpbmRleH1dYCwgZmFsc2UpKTsgLy8gRmxhdHRlbiBvYmplY3RzIGluIGFycmF5c1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKFtgJHtuZXdLZXl9WyR7aW5kZXh9XWAsIGl0ZW1dKTsgLy8gU3RvcmUgcHJpbWl0aXZlIHZhbHVlcyBpbiBhcnJheXNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwpIHtcbiAgICAgIGlmIChpbmNsdWRlT2JqZWN0cykge1xuICAgICAgICByZXN1bHQucHVzaChbbmV3S2V5LCB2YWxdKTsgLy8gSW5jbHVkZSBmdWxsIG9iamVjdFxuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5mbGF0dGVuT2JqZWN0KHZhbCwgbmV3S2V5LCBmYWxzZSkpOyAvLyBGbGF0dGVuIG5lc3RlZCBvYmplY3RzXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wdXNoKFtuZXdLZXksIHZhbF0pOyAvLyBTdG9yZSBrZXktdmFsdWUgcGFpcnNcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuICAvLyBWRCAxM1NlcDI0IGNoYW5nZXNcbiAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgcHJvY2Vzc0RhdGEoKSB7XG4gICAgLy8gIEhBIDE5REVDMjMgTG9naWMgZm9yIFF1ZXN0aW9uIEJvb2sgU3R5bGluZyhTbGFlc2ZvcmNlKVxuICAgIC8vIEhBIDA5RkVCMjQgQWRkZWQgdGVybmFyeVxuICAgIGlmICh0aGlzLnFiSXRlbT8uc3R5bGUpIHtcbiAgICAgIC8vIEhBIDI4REVDMjMgQWRkZWQgc3R5bGluZyBhbmQgbG9naWNzIHRvIGxvYWQgdGhlIGJvb2sgdHlwZSBxdWVzdGlvbnMgXG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZSA9IHR5cGVvZiB0aGlzLnFiSXRlbS5zdHlsZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKCcnICsgdGhpcy5xYkl0ZW0/LnN0eWxlKSA6IHRoaXMucWJJdGVtLnN0eWxlO1xuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUubGFiZWxDbGFzcyA9IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbENsYXNzID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsQ2xhc3MgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUubGFiZWxTdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbFN0eWxlID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsU3R5bGUgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUubGFiZWxWYWx1ZVN0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA/IHRoaXMucWJJdGVtLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGUgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUuaW5wdXRDbGFzcyA9IHRoaXMucWJJdGVtLnN0eWxlPy5pbnB1dENsYXNzID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmlucHV0Q2xhc3MgOiBcIlwiO1xuICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUuaW5wdXRTdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlLmlucHV0U3R5bGUgPyB0aGlzLnFiSXRlbS5zdHlsZT8uaW5wdXRTdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5ib29rU3R5bGUgPSB0aGlzLnFiSXRlbS5zdHlsZT8uYm9va1N0eWxlID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmJvb2tTdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5zaG93TGFiZWwgPSB0aGlzLnFiSXRlbS5zdHlsZT8uc2hvd0xhYmVsID8gdGhpcy5xYkl0ZW0uc3R5bGU/LnNob3dMYWJlbCA6IHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHRoaXMucWJJdGVtKSB7XG4gICAgICAgIHRoaXMucWJJdGVtLnN0eWxlID0ge1xuICAgICAgICAgIFwibGFiZWxDbGFzc1wiOiBcIlwiLFxuICAgICAgICAgIFwibGFiZWxTdHlsZVwiOiBcIlwiLFxuICAgICAgICAgIFwibGFiZWxWYWx1ZVN0eWxlXCI6IFwiXCIsXG4gICAgICAgICAgXCJpbnB1dENsYXNzXCI6IFwiXCIsXG4gICAgICAgICAgXCJpbnB1dFN0eWxlXCI6IFwiXCIsXG4gICAgICAgICAgXCJib29rU3R5bGVcIjogXCJcIixcbiAgICAgICAgICBcInNob3dMYWJlbFwiOiB0cnVlLFxuICAgICAgICAgIFwiZGlyZWN0aW9uXCI6IFwibHRyXCIsXG4gICAgICAgICAgXCJxdWVzdGlvblN0eWxlXCI6IFwiXCJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5xYkl0ZW0uc3R5bGUucXVlc3Rpb25TdHlsZSA9IHRoaXMucWJJdGVtPy5zdHlsZT8ucXVlc3Rpb25TdHlsZSA/IHRoaXMucWJJdGVtPy5zdHlsZS5xdWVzdGlvblN0eWxlIDogXCJcIjtcbiAgICB0aGlzLmxhbmdEaXJlY3Rpb24gPSB0aGlzLnFiSXRlbS5zdHlsZS5kaXJlY3Rpb24gPSB0aGlzLnFiSXRlbT8uc3R5bGU/LmRpcmVjdGlvbiA/IHRoaXMucWJJdGVtPy5zdHlsZT8uZGlyZWN0aW9uIDogJ2x0cic7XG4gICAgdGhpcy5ib29rU3R5bGUgPSB0aGlzLnFiSXRlbT8uc3R5bGU/LmJvb2tTdHlsZTtcbiAgICB0aGlzLnF1ZXN0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgdmFyIGh0bWxFbGVtZW50ID0gZWxlbWVudD8ucXVlc3Rpb25UZXh0O1xuICAgICAgdmFyIHRleHRPbmx5ID0gaHRtbEVsZW1lbnQ/LnJlcGxhY2UoLzxbXj5dKj4vZywgJycpXG4gICAgICBlbGVtZW50LnF1ZXN0aW9uVGV4dCA9IHRleHRPbmx5O1xuICAgICAgZWxlbWVudFsnbGFuZ0RpcmVjdGlvbiddID0gZWxlbWVudC5zdHlsZT8uZGlyZWN0aW9uID8gZWxlbWVudC5zdHlsZT8uZGlyZWN0aW9uIDogdGhpcy5sYW5nRGlyZWN0aW9uO1xuXG4gICAgICAvL1ZEIDAyQXVnMjQgZGVwZW5kZW50IGZpZWxkIHNob3cvaGlkZSBjaGFuZ2VzXG4gICAgICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICAgICAgIC8vIEFQLTI2TUFSMjUgRW5zdXJlIHF1ZXMuc3ViVGV4dCBpcyBhbHdheXMgYW4gb2JqZWN0IGJ5IHBhcnNpbmcgaXQgaWYgaXQncyBhIHN0cmluZ1xuICAgICAgaWYgKGVsZW1lbnQucmVmZXJlbmNlRmllbGQpIHtcbiAgICAgICAgZWxlbWVudC5kZXBlbmRlbnRSZWYgPSBlbGVtZW50LnJlZmVyZW5jZUZpZWxkO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQuc3ViVGV4dCkge1xuICAgICAgICBlbGVtZW50WydzdWJUZXh0J10gPSB0eXBlb2YgZWxlbWVudD8uc3ViVGV4dCA9PT0gJ29iamVjdCcgPyBlbGVtZW50Py5zdWJUZXh0IDogSlNPTi5wYXJzZShlbGVtZW50WydzdWJUZXh0J10pO1xuICAgICAgICBsZXQgZGVwZW5kZW5jeU9iajogRGVwZW5kZW5jeU1ldGEgPSBlbGVtZW50LnN1YlRleHQ7XG4gICAgICAgIGlmIChkZXBlbmRlbmN5T2JqLmlzRGVwZW5kZW50RmllbGQpIHtcbiAgICAgICAgICBlbGVtZW50LmlzSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBWRCAwN0F1ZzI0IC0gaXNEZXBlbmRlbnRGaWVsZCBjaGFuZ2VcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGNoYW5nZVZhbHVlKSA9PiB7XG4gICAgICAgICAgICAvLyBWRCAyMEF1ZzI0IC0gaXNEZXBlbmRlbnRGaWVsZCBjaGFuZ2VcbiAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZSAhPSB1bmRlZmluZWQgJiYgZGVwZW5kZW5jeU9iai5pc0RlcGVuZGVudEZpZWxkKSB7XG4gICAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAhPSB1bmRlZmluZWQgJiYgY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgPT0gZGVwZW5kZW5jeU9iai5zb3VyY2VRdWVzdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgLy8gZWxlbWVudC5pc0hpZGRlbkZpZWxkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoZGVwZW5kZW5jeU9iai5kZXBlbmRlbnRWYWx1ZSA9PSBjaGFuZ2VWYWx1ZS52YWx1ZU9iaikge1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC5pc0hpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC5pbnB1dCA9ICcnO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZWxlY3RlZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGVwZW5kZW50UmVmID09IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVmZXJlbmNlRmllbGQgPSBjaGFuZ2VWYWx1ZS5yZWZlcmVuY2VGaWVsZDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC5pc0hpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gJyc7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LnNlbGVjdGVkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICB0aGlzLmhpZGVEZXBlbmRlbnRFbGVtZW50cyhlbGVtZW50LmlkKTtcbiAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGRlcGVuZGVudCBzZWxlY3Rpb24gcmVtb3ZlIHRoZSByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRlcGVuZGVudFJlZiA9PSBjaGFuZ2VWYWx1ZS5yZWZlcmVuY2VGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnJlZmVyZW5jZUZpZWxkID0gJyc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZShlbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIC8vIHN1bmRheSBjb21tZW50XG4gICAgICAvLyBpZiAoZWxlbWVudC50eXBlID09PSAnQ2FsZW5kYXInKSB7XG4gICAgICAvLyAgIHRoaXMub3BlbkNhbGVuZGFyQ29tcG9uZW50KGVsZW1lbnQpO1xuICAgICAgLy8gfVxuICAgIH0pO1xuICAgIHRoaXMuc3ViUXVlc3Rpb25zID0gW107XG4gICAgdGhpcy5zZXRTdWJRdWVzdGlvbnModGhpcy5xdWVzdGlvbnMpO1xuICAgIHRoaXMucHJvY2Vzc1RyYW5zbGF0ZWRRdWVzdGlvbnMoKTtcbiAgfVxuICAvLyBWRCAwN0F1ZzI0IC0gaXNEZXBlbmRlbnRGaWVsZCBjaGFuZ2VcbiAgIC8vIEFQLTI2TUFSMjUgRW5zdXJlIHF1ZXMuc3ViVGV4dCBpcyBhbHdheXMgYW4gb2JqZWN0IGJ5IHBhcnNpbmcgaXQgaWYgaXQncyBhIHN0cmluZ1xuICBoaWRlRGVwZW5kZW50RWxlbWVudHMoZWxlbWVudElkKSB7XG4gICAgbGV0IGVsZW1lbnRzVG9IaWRlID0gdGhpcy5xdWVzdGlvbnMuZmlsdGVyKGVsID0+IHtcbiAgICAgIGlmIChlbC5zdWJUZXh0KSB7XG4gICAgICAgIGVsWydzdWJUZXh0J10gPSB0eXBlb2YgZWw/LnN1YlRleHQgPT09ICdvYmplY3QnID8gZWw/LnN1YlRleHQgOiBKU09OLnBhcnNlKGVsWydzdWJUZXh0J10pO1xuICAgICAgICBsZXQgZGVwT2JqID0gZWwuc3ViVGV4dDtcbiAgICAgICAgcmV0dXJuIGRlcE9iai5zb3VyY2VRdWVzdGlvbklkID09IGVsZW1lbnRJZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcblxuICAgIGVsZW1lbnRzVG9IaWRlLmZvckVhY2goZWwgPT4ge1xuICAgICAgZWwuaXNIaWRkZW4gPSB0cnVlO1xuICAgICAgZWwuaW5wdXQgPSAnJztcbiAgICAgIGVsLnNlbGVjdGVkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZShlbCk7XG4gICAgICAvLyBSZWN1cnNpdmVseSBoaWRlIGVsZW1lbnRzIGRlcGVuZGVudCBvbiB0aGlzIG9uZVxuICAgICAgdGhpcy5oaWRlRGVwZW5kZW50RWxlbWVudHMoZWwuaWQpO1xuICAgIH0pO1xuICB9XG4vL0FQLTE5TUFZMjUgRW5zdXJlIHNxTGlzdCBpcyBhbHdheXMgYW4gYXJyYXkgYnkgZGVmYXVsdGluZyB0byBbXVxuICBjbGVhclNRRXJyb3IocXVlc0lkKSB7XG4gICAgdmFyIHNxTGlzdCA9IHRoaXMuc3ViUXVlc3Rpb25zPy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgPT0gcXVlc0lkKSB8fCBbXTtcbiAgICBmb3IgKHZhciBzcSBvZiBzcUxpc3QpIHtcbiAgICAgIHNxLmVycm9yID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgLy8gVkQgMTFKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgcHJvY2Vzc1RyYW5zbGF0ZWRRdWVzdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMudHJhbnNsYXRlZFF1ZXN0aW9ucyAmJiB0aGlzLnRyYW5zbGF0ZWRRdWVzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5xdWVzdGlvbnMuZm9yRWFjaCgob3JnUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZWRRdWVzdGlvbnMuZm9yRWFjaCgodHJhbnNRdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKG9yZ1F1ZXN0aW9uLnVuaXF1ZUlkZW50aWZpZXIgPT0gdHJhbnNRdWVzdGlvbi5pZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBvcmdRdWVzdGlvbi5xdWVzdGlvblRleHQgPSB0cmFuc1F1ZXN0aW9uLmxhYmVsO1xuICAgICAgICAgICAgb3JnUXVlc3Rpb24ucXVlc3Rpb24gPSB0cmFuc1F1ZXN0aW9uLnBsYWNlSG9sZGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRTdWJRdWVzdGlvbnMocmVjb3Jkcykge1xuICAgIHRoaXMuc3ViUXVlc3Rpb25zLnB1c2gocmVjb3Jkcyk7XG4gIH1cblxuICAvLyBDYXB0dXJlIGFuZCBQcm9jZXNzIENoaWxkIEV2ZW50XG4gIGNoaWxkRXZlbnRDYXB0dXJlKGV2ZW50LCBxdWVzPzogYW55KSB7XG4gICAgbGV0IGRyb3Bkb3duRGF0YSA9IHt9O1xuICAgIHRoaXMuY2hhbmdlU2VydmljZS5hbm5vdW5jZUNoYW5nZShldmVudCk7XG4gICAgaWYgKHF1ZXMpIHtcbiAgICAgIGlmIChxdWVzLnR5cGUgPT0gJ0Ryb3Bkb3duJyB8fCBxdWVzLnR5cGUgPT0gJ1JhZGlvJykge1xuICAgICAgICAvLyBIQSAxOUpBTjI0IENvcnJlY3Rpb24gb2YgZHJvcGRvd24gdmFsdWVzXG4gICAgICAgIHF1ZXMuc2VsZWN0ZWRPYmogPSBldmVudC52YWx1ZU9iaiA/IGV2ZW50LnZhbHVlT2JqIDogbnVsbDtcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50LnNlbGVjdGVkT2JqID8gZXZlbnQuc2VsZWN0ZWRPYmogOiBldmVudC52YWx1ZU9iajtcbiAgICAgICAgcXVlcy5zZWxlY3RlZFZhbHVlID0gZXZlbnQudmFsdWVPYmogPyBldmVudC52YWx1ZU9iaiA6IG51bGw7XG4gICAgICAgIC8vIGVtaXQgdGhlIGRyb3Bkb3duIGRhdGEgdG8gcGFyZW50XG4gICAgICAgIGRyb3Bkb3duRGF0YVsnZXZlbnQnXSA9IGV2ZW50LnZhbHVlT2JqO1xuICAgICAgICBkcm9wZG93bkRhdGFbJ3F1ZXMnXSA9IHF1ZXM7XG4gICAgICAgIGlmIChkcm9wZG93bkRhdGFbJ2V2ZW50J10pIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZURyb3BEb3duLmVtaXQoZHJvcGRvd25EYXRhKTtcbiAgICAgICAgfSAgLy8gVkQgMjFERUMyMyAtIGRlcGVuZGVudCBmaWVsZCBjaGFuZ2VcbiAgICAgIH0gZWxzZSBpZiAocXVlcy50eXBlID09ICdMb2NhdGlvbicpIHtcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50LnZhbHVlT2JqO1xuICAgICAgICBxdWVzLnNlbGVjdGVkVmFsdWUgPSBldmVudC52YWx1ZU9iaj8gZXZlbnQudmFsdWVPYmouYWRkcmVzcyA6IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXMudHlwZSA9PSAnRmlsZScpIHtcbiAgICAgICAgcXVlcy5pbnB1dCA9IHRoaXMuc2VsZWN0ZWRGaWxlRGF0YSA9IGV2ZW50O1xuXG4gICAgICAgIC8vIEhhbmRsZSBmaWxlIHZhbGlkYXRpb24gZXJyb3JzXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSAmJiBldmVudC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBObyBmaWxlcyB1cGxvYWRlZCB3aGVuIHJlcXVpcmVkXG4gICAgICAgICAgcXVlcy5lcnJvciA9IHF1ZXMuZXJyb3JNZXNzYWdlID8gbmV3IEVycm9yV3JhcHBlcigpIDogbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSAmJiBldmVudC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gRmlsZXMgd2VyZSBzdWNjZXNzZnVsbHkgdXBsb2FkZWRcbiAgICAgICAgICBxdWVzLmVycm9yID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZXJlIHdlcmUgdmFsaWRhdGlvbiBlcnJvcnMgZnJvbSB0aGUgZmlsZSB1cGxvYWQgY29tcG9uZW50XG4gICAgICAgIGlmIChldmVudD8udmFsaWRhdGlvbkVycm9ycyAmJiBldmVudC52YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBxdWVzLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgIHF1ZXMuZXJyb3IubWVzc2FnZSA9IGV2ZW50LnZhbGlkYXRpb25FcnJvcnNbMF07IC8vIFVzZSB0aGUgZmlyc3QgdmFsaWRhdGlvbiBlcnJvclxuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSBpZiAocXVlcy50eXBlID09ICdEYXRlJyB8fCBxdWVzLnR5cGUgPT0gJ0RhdGVUaW1lJykgeyAvLyBIQSAyNEpBTjI0IENvbnZlcnRpbmcgRGF0ZSBhbmQgRGF0ZVRpbWUgdG8gVVRDXG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgIGxldCBkID0gbmV3IERhdGUoZXZlbnQpO1xuICAgICAgICAgIGlmICghaXNOYU4oZD8uZ2V0VGltZSgpKSkgeyAvL1NLUzIzQVBSMjUgQ2hlY2sgZm9yIHZhbGlkIGRhdGVcbiAgICAgICAgICAgICAgbGV0IHV0Y1N0cmluZyA9IGQ/LnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB1dGNTdHJpbmc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcXVlcy5pbnB1dCA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBxdWVzLmlucHV0ID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocXVlcy50eXBlID09ICdMaXN0Jykge1xuICAgICAgICAvLyBWRCAyMEF1ZzI0IGhhbmRsaW5nIHRoZSBsaXN0IHR5cGUgIGhhbmRsZSBtdWx0aXBsZSBvYmplY3QgdmFsdWVzXG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudD8udmFsdWVPYmogPyB0aGlzLmRhdGFTZXJ2aWNlLmdldFZhbHVlKGV2ZW50Py52YWx1ZU9iaiwgZXZlbnQ/LmZpZWxkKSA6IGV2ZW50O1xuICAgICAgfS8vUlMgMDZKQU4yNVxuICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09PSAnUmljaFRleHRBcmVhJykge1xuICAgICAgICBxdWVzLmlucHV0ID0gZXZlbnQgfHwgbnVsbDtcbiAgICAgIH0vLyAgQVAtMjhNQVIyNSBBZGQgQm9vbGVhblxuICAgICAgZWxzZSBpZihxdWVzLnR5cGUgPT09ICdCb29sZWFuJyl7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudDtcbiAgICAgICAgcXVlcy5ib29sZWFuID0gZXZlbnQ7XG4gICAgICB9XG4gICAgICAvLyBBUC0xMEFQUjI1IE51bWJlclxuICAgICAgLy8gQVAxOVBBUjI1IC1pZiBjaGFuZ2UgZWxzZSBpc1xuICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09PSAnTnVtYmVyJykge1xuICAgICAgICBxdWVzLmlucHV0ID0gTnVtYmVyKGV2ZW50KTsgXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50O1xuICAgICAgfVxuICAgICAgLy9SUyAwNkpBTjI1XG4gICAgICAvLyBWYWxpZGF0ZSBlcnJvciBtZXNzYWdlIC0gbW9kaWZpZWQgdG8gaGFuZGxlIHJpY2ggdGV4dFxuICAgICAgY29uc3QgaGFzRXJyb3IgPSBxdWVzLmVycm9yTWVzc2FnZSAmJiAoXG4gICAgICAgIChxdWVzLnR5cGUgPT09ICdGaWxlJyAmJiBxdWVzLmlucHV0Lmxlbmd0aCA9PT0gMCkgfHxcbiAgICAgICAgKHF1ZXMudHlwZSA9PT0gJ1JpY2hUZXh0QXJlYScgJiYgKCFxdWVzLmlucHV0IHx8IHF1ZXMuaW5wdXQudHJpbSgpID09PSAnJykpIHx8XG4gICAgICAgIChxdWVzLnR5cGUgIT09ICdGaWxlJyAmJiBxdWVzLlR5cGUgIT09ICdSaWNoVGV4dEFyZWEnICYmICFxdWVzLmlucHV0KVxuICAgICAgKTtcbiAgICAgIHF1ZXMuZXJyb3IgPSBoYXNFcnJvciA/IG5ldyBFcnJvcldyYXBwZXIoKSA6IG51bGw7XG4gICAgICBxdWVzLmVycm9yID0gaGFzRXJyb3IgPyBuZXcgRXJyb3JXcmFwcGVyKCkgOiBudWxsO1xuICAgICAgLy8gT25jZSB0aGUgcmlnaHQgdmFsdWUgaXMgc3RvcmVkIGluIHF1ZXMuaW5wdXQgc3RvcmUgdGhlIHF1ZXMgKHdpdGggaW5wdXQpIGluIHN0b3JhZ2VTZXJ2aWNlXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZShxdWVzKTtcbiAgICAgIC8vIFZEIDE5SnVsMDEgLSBnZXQgdXBkYXRlZCBxdWVzdGlvblxuICAgICAgdGhpcy5oYW5kbGVRdWVzdGlvbi5lbWl0KHF1ZXMpO1xuICAgIH1cbiAgICBpZihxdWVzPy5zaW5nbGVGaWVsZENoYW5nZSl7XG4gICAgICB0aGlzLnNpbmdsZUZpZWxkQ2hhbmdlRW1pdC5lbWl0KHF1ZXMpO1xuICAgICAgcXVlcy5zaW5nbGVGaWVsZENoYW5nZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBkZWxldGVGaWxlKGZpbGVEYXRhOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnZmlsZURBVEEnLCBmaWxlRGF0YSlcbiAgfVxuICBnZXREcm9wRG93bihldmVudDogYW55KSB7XG4gICAgdGhpcy5oYWRsZURyb3BEb3duRGVwZW5kZW50LmVtaXQoZXZlbnQpO1xuICB9XG4gIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xuICBnZXRDdXJyZW50Q2FsZW5kYXIoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuaGFuZGxlQ2FsZW5kYXJEYXRlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgZ2V0Q2FsZW5kYXJFdmVudChldmVudDogYW55KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLmhhbmRsZUNhbGVuZGFyRXZlbnQuZW1pdChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVkQgMDZTZXAyNCByZW1vdmUgdGhlIHNwZWNpYWwgY2hhcmVjdGVycyBhbmQgdGFncyBcbiAgLy8gZnJvbSB0aGUgcXVlc3Rpb25UZXh0XG4gIHJlbW92ZUNoYXJhY3RlcnMocXVlc3Rpb25UZXh0OiBzdHJpbmcpIHtcbiAgICBsZXQgdXBkYXRlZFRleHQgPSBxdWVzdGlvblRleHQ/LnJlcGxhY2UoLzxbXj5dKj4vZywgJycpO1xuICAgIHJldHVybiB1cGRhdGVkVGV4dDtcbiAgfVxuXG4gIC8vIHN1bmRheSBjb21tZW50XG4gIC8vIG9wZW5DYWxlbmRhckNvbXBvbmVudChxdWVzKSB7XG4gIC8vICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZiA9IHRoaXMuZHluYW1pY0hvc3Qudmlld0NvbnRhaW5lclJlZjtcbiAgLy8gICBpZih2aWV3Q29udGFpbmVyUmVmKXtcbiAgLy8gICAgIHZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgLy8gICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KEN1c3RvbUNhbGVuZGFyQ29tcG9uZW50KTtcbiAgLy8gICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5xdWVzdGlvbiA9IHF1ZXM7XG4gIC8vICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZGF0ZVNlbGVjdGVkLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4gdGhpcy5nZXRDdXJyZW50Q2FsZW5kYXIoZXZlbnQpKTtcbiAgLy8gICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5ldmVudFNlbGVjdGVkLnN1YnNjcmliZSgoZXZlbnQ6YW55KSA9PiB0aGlzLmdldENhbGVuZGFyRXZlbnQoZXZlbnQpKVxuICAvLyAgIH1cbiAgLy8gfVxuXG4gIGlzQ2FsZW5kYXJNb2RhbE9wZW4gPSBmYWxzZTtcbiAgY2FsZW5kYXJNb2RhbFRpdGxlOiBhbnk7XG4gIGNhbGVuZGFyTW9kYWxTaXplOiBhbnk7XG4gIGNhbGVuZGFyU2F2ZUJ1dHRvblZhbHVlOiBhbnk7XG4gIHJlZmVyZW5jZVF1ZXN0aW9ucyA9IFtdO1xuICBxYlJlZnJlbmNlQm9vazogYW55O1xuICBtb2RhbENhbGVuZGFyTW9kYWxGb290ZXI6IGFueTtcblxuICBvcGVuQ2FsZW5kYXJNb2RhbChldmVudCkge1xuICAgIHRoaXMuaXNDYWxlbmRhck1vZGFsT3BlbiA9IHRydWU7XG4gICAgdGhpcy5xYlJlZnJlbmNlQm9vayA9IGV2ZW50LnFiUmVmcmVuY2VCb29rO1xuICAgIHRoaXMucmVmZXJlbmNlUXVlc3Rpb25zID0gZXZlbnQucmVmZXJlbmNlUXVlc3Rpb25zO1xuICAgIHRoaXMuY2FsZW5kYXJNb2RhbFRpdGxlID0gZXZlbnQubW9kYWxUaXRsZTtcbiAgICB0aGlzLmNhbGVuZGFyTW9kYWxTaXplID0gZXZlbnQubW9kYWxTaXplO1xuICAgIHRoaXMuY2FsZW5kYXJTYXZlQnV0dG9uVmFsdWUgPSBldmVudC5zYXZlQnV0dG9uVmFsdWU7XG4gICAgdGhpcy5tb2RhbENhbGVuZGFyTW9kYWxGb290ZXIgPSBldmVudC5tb2RhbEZvb3RlcjtcbiAgfVxuXG5cbiAgb25DYWxlbmRhck1vZGFsU2F2ZSgpIHtcbiAgICB0aGlzLmNoYW5nZVNlcnZpY2UuZGF0YUNoYW5nZXMoJ2NhbGVuZGFyLW1vZGFsLXNhdmUnKTtcbiAgfVxuXG5cbiAgaGFuZGxlUXVlc3Rpb25FdmVudChldmVudCkge1xuICAgIGNvbnNvbGUubG9nKCdoYW5kbGUgcXVlc3Rpb24gaGVyZScpO1xuICB9XG5cbiAgY2xvc2VDYWxlbmRhck1vZGFsKGV2ZW50KSB7XG4gICAgdGhpcy5pc0NhbGVuZGFyTW9kYWxPcGVuID0gZmFsc2U7XG4gIH1cblxuICAvLyBTS1MyNU1BUjI1IGltYWdlIGFkZFxuICBhc3luYyBmaWxlQ2hhbmdlRXZlbnQocXVlczogYW55LCBldmVudDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmlsZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gYXdhaXQgdGhpcy5yZWFkRmlsZUFzRGF0YVVSTChmaWxlKTtcbiAgICAgICAgcXVlcy5pbWFnZURhdGEgPSBpbWFnZURhdGE7XG4gICAgICAgIHF1ZXMub3JnSW1hZ2VEYXRhID0gaW1hZ2VEYXRhO1xuICAgICAgICAvLyBJbml0aWFsaXplIGxvZ28gc2l6ZSBpZiBub3QgYWxyZWFkeSBzZXRcbiAgICAgICAgaWYgKCFxdWVzLmltYWdlU2l6ZSkge1xuICAgICAgICAgIHF1ZXMuaW1hZ2VTaXplID0geyB3aWR0aDogMTUwLCBoZWlnaHQ6IDE1MCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5jaGlsZEV2ZW50Q2FwdHVyZShpbWFnZURhdGEsIHF1ZXMpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHJlYWRpbmcgZmlsZTpcIiwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVhZEZpbGVBc0RhdGFVUkwoZmlsZTogRmlsZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShyZWFkZXIucmVzdWx0IGFzIHN0cmluZyk7XG4gICAgICByZWFkZXIub25lcnJvciA9IChlcnJvcikgPT4gcmVqZWN0KGVycm9yKTtcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgIH0pO1xuICB9XG4gIGFzeW5jIG9uSW1hZ2VFZGl0KHF1ZXM6IGFueSkge1xuICAgIHRoaXMuaXNJbWFnZUVkaXQgPSB0cnVlO1xuICAgIHRoaXMuc2VsZWN0ZWRJbWFnZUVsZW1lbnQgPSBxdWVzO1xuICAgIGNvbnNvbGUubG9nKFwib25JbWFnZUVkaXRcIilcbiAgfVxuICBhc3luYyBvbkltYWdlRGVsZXRlKHF1ZXM6IGFueSkge1xuICAgIHRyeSB7XG4gICAgICBxdWVzLmltYWdlRGF0YSA9ICcnO1xuICAgICAgcXVlcy5vcmdJbWFnZURhdGEgPSAnJztcbiAgICAgIC8vIEluaXRpYWxpemUgbG9nbyBzaXplIGlmIG5vdCBhbHJlYWR5IHNldFxuICAgICAgaWYgKCFxdWVzLmltYWdlU2l6ZSkge1xuICAgICAgICBxdWVzLmltYWdlU2l6ZSA9IHsgd2lkdGg6IDE1MCwgaGVpZ2h0OiAxNTAgfTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuY2hpbGRFdmVudENhcHR1cmUocXVlcy5pbWFnZURhdGEsIHF1ZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcmVhZGluZyBmaWxlOlwiLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLy8gU0tTMjVNQVIyNSBpbWFnZSBlZGl0IGZ1bmN0aW9uc1xuICBmbGlwSG9yaXpvbnRhbCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgZmxpcEg6ICF0aGlzLnRyYW5zZm9ybS5mbGlwSFxuICAgIH07XG4gIH1cblxuICBmbGlwVmVydGljYWwoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIGZsaXBWOiAhdGhpcy50cmFuc2Zvcm0uZmxpcFZcbiAgICB9O1xuICB9XG5cbiAgcmVzZXRJbWFnZSgpIHtcbiAgICB0aGlzLmNhbnZhc1JvdGF0aW9uID0gMDtcbiAgICB0aGlzLmNyb3BwZXIgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICB0cmFuc2xhdGVVbml0OiAncHgnLFxuICAgICAgc2NhbGU6IDEsXG4gICAgICByb3RhdGU6IDAsXG4gICAgICBmbGlwSDogZmFsc2UsXG4gICAgICBmbGlwVjogZmFsc2UsXG4gICAgICB0cmFuc2xhdGVIOiAwLFxuICAgICAgdHJhbnNsYXRlVjogMFxuICAgIH07XG4gIH1cblxuICB6b29tT3V0KCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICBzY2FsZTogdGhpcy50cmFuc2Zvcm0uc2NhbGUhIC0gLjFcbiAgICB9O1xuICB9XG5cbiAgem9vbUluKCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICBzY2FsZTogdGhpcy50cmFuc2Zvcm0uc2NhbGUhICsgLjFcbiAgICB9O1xuICB9XG4gIHJvdGF0ZUxlZnQoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgLy8gVXNlIHRpbWVvdXQgYmVjYXVzZSByb3RhdGluZyBpbWFnZSBpcyBhIGhlYXZ5IG9wZXJhdGlvbiBhbmQgd2lsbCBibG9jayB0aGUgdWkgdGhyZWFkXG4gICAgICB0aGlzLmNhbnZhc1JvdGF0aW9uLS07XG4gICAgICB0aGlzLmZsaXBBZnRlclJvdGF0ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcm90YXRlUmlnaHQoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY2FudmFzUm90YXRpb24rKztcbiAgICAgIHRoaXMuZmxpcEFmdGVyUm90YXRlKCk7XG4gICAgfSk7XG4gIH1cblxuICBtb3ZlTGVmdCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgdHJhbnNsYXRlSDogdGhpcy50cmFuc2Zvcm0udHJhbnNsYXRlSCEgLSAxXG4gICAgfTtcbiAgfVxuXG4gIG1vdmVSaWdodCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgdHJhbnNsYXRlSDogdGhpcy50cmFuc2Zvcm0udHJhbnNsYXRlSCEgKyAxXG4gICAgfTtcbiAgfVxuXG4gIG1vdmVEb3duKCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICB0cmFuc2xhdGVWOiB0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVWISArIDFcbiAgICB9O1xuICB9XG5cbiAgbW92ZVVwKCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICB0cmFuc2xhdGVWOiB0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVWISAtIDFcbiAgICB9O1xuICB9XG4gIHByaXZhdGUgZmxpcEFmdGVyUm90YXRlKCkge1xuICAgIGNvbnN0IGZsaXBwZWRIID0gdGhpcy50cmFuc2Zvcm0uZmxpcEg7XG4gICAgY29uc3QgZmxpcHBlZFYgPSB0aGlzLnRyYW5zZm9ybS5mbGlwVjtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgZmxpcEg6IGZsaXBwZWRWLFxuICAgICAgZmxpcFY6IGZsaXBwZWRILFxuICAgICAgdHJhbnNsYXRlSDogMCxcbiAgICAgIHRyYW5zbGF0ZVY6IDBcbiAgICB9O1xuICB9XG4gIGFzeW5jIGltYWdlQ3JvcHBlZChldmVudDogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2U2NCA9IGF3YWl0IHRoaXMuY29udmVydEJsb2JUb0Jhc2U2NChldmVudC5vYmplY3RVcmwpO1xuICAgICAgdGhpcy5zZWxlY3RlZEltYWdlRWxlbWVudC5pbWFnZURhdGEgPSBiYXNlNjQ7XG4gICAgICBhd2FpdCB0aGlzLmNoaWxkRXZlbnRDYXB0dXJlKGJhc2U2NCwgdGhpcy5zZWxlY3RlZEltYWdlRWxlbWVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBpbiBpbWFnZUNyb3BwZWQ6XCIsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuXG4gIGNyb3BwZXJSZWFkeShzb3VyY2VJbWFnZURpbWVuc2lvbnM6IERpbWVuc2lvbnMpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgfVxuICAvLyBTS1MyNU1BUjI1IGJsb2IgdG8gYmFzZSA2NCBjb252ZXJ0ZXJcbiAgY29udmVydEJsb2JUb0Jhc2U2NChvYmplY3RVcmw6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGZldGNoKG9iamVjdFVybClcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmJsb2IoKSlcbiAgICAgIC50aGVuKGJsb2IgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG4gICAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpO1xuICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gZXJyb3IgPT4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuICBjbG9zZU1vZGFsKCkge1xuICAgIHRoaXMuaXNJbWFnZUVkaXQgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIFNLUzI4TUFSMjUgZm9yIG5lc3RlZCBib29rIHJlYWRcbiAgcmVhZFF1ZXN0aW9ucyhxYklkOiBhbnksIHF1ZXM6YW55KSB7XG4gICAgbGV0IHF1ZXN0aW9ucyA9IFtdO1xuICAgIC8vIEFkZGVkIHRlcm5hcnkgdG8gYXZvaWQgdW5kZWZpbmVkXG4gICAgZm9yICh2YXIgc3EgaW4gcXVlcy5ib29rUXVlc3Rpb25zTWFwW3FiSWRdLnN1YlF1ZXN0aW9ucykge1xuICAgICAgbGV0IHE6IFF1ZXN0aW9uID0gcXVlcy5ib29rUXVlc3Rpb25zTWFwW3FiSWRdLnN1YlF1ZXN0aW9uc1tzcV07XG4gICAgICAvLyBpZiBxdWVzdGlvbiBpcyB0aGVyZSBwcm9jZXNzXG4gICAgICBpZiAocSkge1xuICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKHEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb25zO1xuICB9XG59XG4iLCI8IS0tIEhBIDE4SkFOMjQgIEFkZGVkIGNsYXNzIGZvciBzdHlsaW5nIC0tPlxuPGRpdiBbc3R5bGVdPVwiYm9va1N0eWxlXCIgY2xhc3M9XCJjb250ZW50LWJveCBmb3JtLWdyb3VwXCI+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgIDwhLS0gSEEgMjBERUMyMyBEaXJlY3RpdmUgYW5kIFF1ZXN0aW9uIFN0eWxlIGZyb20gc2FsZXNmb3JjZSAtLT5cbiAgICAgICAgPCEtLSBSQTA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gICAgICAgIDxkaXYgW2NsYXNzXT1cIidjb2wtbGctJyArIHF1ZXMuc2l6ZSArICcgcGFkZGluZ25vbmUnXCIgKm5nRm9yPVwibGV0IHF1ZXMgb2YgcXVlc3Rpb25zO2xldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgW2lkXT1cInF1ZXMuaWRcIiBbZGlyXT1cInF1ZXMubGFuZ0RpcmVjdGlvblwiIFtzdHlsZV09XCJxdWVzPy5zdHlsZT8ucXVlc3Rpb25TdHlsZVwiPlxuICAgICAgICAgICAgPCEtLSBWRCAwOU1heTI0IGlzIGhpZGUgZmllbGQgY2hhbmdlLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXF1ZXMuaXNIaWRkZW5cIiBjbGFzcz1cIm54dElucHV0Q29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBBUC0yOE1BUjI1IFNob3cgbGFiZWwgaWYgZW5hYmxlZCBhbmQgbm90IGEgQm9vbGVhbiB0eXBlIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBkb3duMjogcWJJdGVtPy5wcm9ncmVzc0JhciB9XCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzLnN0eWxlPy5zaG93TGFiZWwgPyAocXVlcy5zdHlsZT8uc2hvd0xhYmVsICYmIHF1ZXMudHlwZSAhPT0gJ0Jvb2xlYW4nICYmIHF1ZXMudHlwZSAhPT0gJ1RleHQnICYmIHF1ZXMudHlwZSAhPT0gJ0xpc3QnICYmIHF1ZXM/LnR5cGUgIT09ICdEcm9wZG93bicgJiYgcXVlcy50eXBlICE9PSAnUmljaFRleHRBcmVhJyAmJiBxdWVzLnR5cGUgIT09ICdEYXRlVGltZScgJiYgcXVlcy50eXBlICE9PSAnTG9jYXRpb24nICYmIHF1ZXMudHlwZSAhPT0gJ051bWJlcicgJiZxdWVzLnR5cGUgIT09ICdFbWFpbCcgJiYgIHF1ZXMudHlwZSAhPT0gJ0RhdGUnICYmIHF1ZXMudHlwZSAhPT0gJ1RpbWUnICYmIHF1ZXMudHlwZSAhPT0gJ1RleHRBcmVhJyAmJiBxdWVzLnR5cGUgIT09ICdMYWJlbCcpOiAocXVlcy5zdHlsZT8uc2hvd0xhYmVsICE9PSBmYWxzZSAmJiBxdWVzLnR5cGUgIT09ICdCb29sZWFuJyAmJiBxdWVzLnR5cGUgIT09ICdUZXh0JyAmJiBxdWVzLnR5cGUgIT09ICdMaXN0JyAmJiBxdWVzPy50eXBlICE9PSAnRHJvcGRvd24nICYmIHF1ZXMudHlwZSAhPT0gJ0RhdGVUaW1lJyAmJiBxdWVzLnR5cGUgIT09ICdMb2NhdGlvbicgJiYgcXVlcy50eXBlICE9PSAnTnVtYmVyJyAmJiAgcXVlcy50eXBlICE9PSAnRGF0ZScgJiYgcXVlcy50eXBlICE9PSAnVGltZScgJiYgcXVlcy50eXBlICE9PSAnVGV4dEFyZWEnICYmIHF1ZXMudHlwZSAhPT0gJ0xhYmVsJylcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwicXVlcy5zdHlsZT8ubGFiZWxTdHlsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiJ2Rpcy1mbGV4IHNoZW5nZWwtbXl0LWZvbnQzIG15dC1mb250NyAnXCIgW3N0eWxlXT1cInF1ZXMuc3R5bGU/LmxhYmVsVmFsdWVTdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAnZm9udC1mYW1pbHknOiBxdWVzLmZvbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29sb3InOiBxdWVzLmZvbnRDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICdmb250LXNpemUnOiBxdWVzLmZvbnRTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtd2VpZ2h0JzogcXVlcy5mb250V2VpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgfVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVDaGFyYWN0ZXJzKHF1ZXM/LnF1ZXN0aW9uVGV4dCkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLmlzT3B0aW9uYWwgJiYgIXF1ZXMuaXNSZWFkT25seVwiIHN0eWxlPVwiY29sb3I6IHJlZDtcIj4qPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzEzTUFSMjUgb25seSBzaG93IG9uIGZpbGUgdHlwZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUlMgMTdKQU4yMDI1IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEaXNwbGF5cyBpY29ucyB3aXRoIHRvb2x0aXBzIGhlbHAgdGV4dCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnF1ZXN0aW9uVGV4dCAmJiBxdWVzPy5oZWxwVGV4dCAmJiBxdWVzLnR5cGUgPT09ICdGaWxlJ1wiIGNsYXNzPVwiaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwicXVlcz8uaGVscFRleHRcIiBtYXRUb29sdGlwQ2xhc3M9XCJ3aGl0ZS10b29sdGlwXCI+aTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSUyAxN0pBTjIwMjUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tICBEaXNwbGF5cyBpY29ucyB3aXRoIHRvb2x0aXBzIGZvciBmaWxlIHJlcXVpcmVtZW50cyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCIgKm5nSWY9XCJxdWVzLmZpZWxkc01ldGEgJiYgcXVlcy50eXBlID09PSAnRmlsZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImdldEZpbGVSZXF1aXJlbWVudHMocXVlcy5maWVsZHNNZXRhKVwiIG1hdFRvb2x0aXBDbGFzcz1cIndoaXRlLXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDRweDtcIj5pPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIGNhbGVuZGFyICAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnQ2FsZW5kYXInXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWNhbGVuZGFyIFtxdWVzdGlvbl09XCJxdWVzXCIgKGV2ZW50U2VsZWN0ZWQpPVwiZ2V0Q2FsZW5kYXJFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlU2VsZWN0ZWQpPVwiZ2V0Q3VycmVudENhbGVuZGFyKCRldmVudClcIiAob3Blbk1vZGFsKT1cIm9wZW5DYWxlbmRhck1vZGFsKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsb3NlTW9kYWwpPVwiY2xvc2VDYWxlbmRhck1vZGFsKCRldmVudClcIj48L2FwcC1jdXN0b20tY2FsZW5kYXI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gbW9kZWwgdXNlZCBpbiBjYWxlbmRhciBjb21wb25lbnQgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLW1vZGVsICpuZ0lmPVwiaXNDYWxlbmRhck1vZGFsT3BlblwiIFttb2RhbFRpdGxlXT1cImNhbGVuZGFyTW9kYWxUaXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNNb2RhbE9wZW5dPVwiaXNDYWxlbmRhck1vZGFsT3BlblwiIFttb2RhbFNpemVdPVwiY2FsZW5kYXJNb2RhbFNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NhdmVCdXR0b25WYWx1ZV09XCJjYWxlbmRhclNhdmVCdXR0b25WYWx1ZVwiIFttb2RhbEZvb3Rlcl09XCJtb2RhbENhbGVuZGFyTW9kYWxGb290ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHNhdmVCdXR0b25FbWl0KT1cIm9uQ2FsZW5kYXJNb2RhbFNhdmUoKVwiIChjYW5jZWxCdXR0b25FbWl0KT1cImNsb3NlQ2FsZW5kYXJNb2RhbCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uYm9vayBbcWJJdGVtXT1cInFiUmVmcmVuY2VCb29rXCIgW3F1ZXN0aW9uc109XCJyZWZlcmVuY2VRdWVzdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYW5kbGVRdWVzdGlvbik9XCJoYW5kbGVRdWVzdGlvbkV2ZW50KCRldmVudClcIj48L2xpYi1xdWVzdGlvbmJvb2s+XG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1tb2RlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMTFKVU4yNSBmb3IgcGljayBsb2NhdGlvbiAtLT5cbiAgICAgICAgICAgICAgICA8YXBwLXBpY2stbG9jYXRpb24gICpuZ0lmPVwicXVlcy50eXBlID09PSAnTG9jYXRpb24nXCIgW2FwaUtleV09XCJxYkl0ZW1bJ2FwaUtleSddXCIgW2FkZHJlc3NdPVwicXVlcy5zZWxlY3RlZFZhbHVlXCIgW3F1ZXN0aW9uXT1cInF1ZXNcIlxuICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJpc0VkaXQgIT09IHRydWUgPyAndmlldycgOiAnZWRpdCdcIlxuICAgICAgICAgICAgICAgICAgICAobG9jYXRpb25TZWxlY3RlZCk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtcGljay1sb2NhdGlvbj5cblxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMjVNQVIyNSBJbWFnZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnSW1hZ2UnXCIgKG1vdXNlZW50ZXIpPVwiaXNJbWFnZUhvdmVyID0gdHJ1ZTtcIlxuICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJpc0ltYWdlSG92ZXIgPSBmYWxzZTtcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzSW1hZ2VIb3ZlclwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBlbmQ7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIXF1ZXMuaXNSZWFkT25seVwiIChjbGljayk9XCJvbkltYWdlRWRpdChxdWVzKVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEuMTA2NyA2LjA3MTc0TDkuOTI4MzMgNC44OTM0TDIuMTY2NjcgMTIuNjU1MVYxMy44MzM0SDMuMzQ1TDExLjEwNjcgNi4wNzE3NFpNMTIuMjg1IDQuODkzNEwxMy40NjMzIDMuNzE1MDdMMTIuMjg1IDIuNTM2NzRMMTEuMTA2NyAzLjcxNTA3TDEyLjI4NSA0Ljg5MzRaTTQuMDM1IDE1LjUwMDFIMC41VjExLjk2NDJMMTEuNjk1OCAwLjc2ODQwM0MxMS44NTIxIDAuNjEyMTc3IDEyLjA2NCAwLjUyNDQxNCAxMi4yODUgMC41MjQ0MTRDMTIuNTA2IDAuNTI0NDE0IDEyLjcxNzkgMC42MTIxNzcgMTIuODc0MiAwLjc2ODQwM0wxNS4yMzE3IDMuMTI1OUMxNS4zODc5IDMuMjgyMTggMTUuNDc1NyAzLjQ5NDEgMTUuNDc1NyAzLjcxNTA3QzE1LjQ3NTcgMy45MzYwNCAxNS4zODc5IDQuMTQ3OTYgMTUuMjMxNyA0LjMwNDI0TDQuMDM1ODMgMTUuNTAwMUg0LjAzNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzZDNzU3RFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCIhcXVlcy5pc1JlYWRPbmx5XCIgKGNsaWNrKT1cIm9uSW1hZ2VEZWxldGUocXVlcylcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE0IDMuOTg3MjZDMTEuNzggMy43NjcyNiA5LjU0NjY3IDMuNjUzOTMgNy4zMiAzLjY1MzkzQzYgMy42NTM5MyA0LjY4IDMuNzIwNiAzLjM2IDMuODUzOTNMMiAzLjk4NzI2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk01LjY2NjUgMy4zMTM2Mkw1LjgxMzE3IDIuNDQwMjhDNS45MTk4NCAxLjgwNjk1IDUuOTk5ODQgMS4zMzM2MiA3LjEyNjUgMS4zMzM2Mkg4Ljg3MzE3QzkuOTk5ODQgMS4zMzM2MiAxMC4wODY1IDEuODMzNjIgMTAuMTg2NSAyLjQ0Njk1TDEwLjMzMzIgMy4zMTM2MlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIuNTY2NyA2LjA5Mzc1TDEyLjEzMzQgMTIuODA3MUMxMi4wNiAxMy44NTM3IDEyIDE0LjY2NzEgMTAuMTQgMTQuNjY3MUg1Ljg2MDAyQzQuMDAwMDIgMTQuNjY3MSAzLjk0MDAyIDEzLjg1MzcgMy44NjY2OCAxMi44MDcxTDMuNDMzMzUgNi4wOTM3NVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi44ODY0NyAxMS4wMDA0SDkuMTA2NDdcIiBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuMzMzNSA4LjMzMzI1SDkuNjY2ODNcIiBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cInF1ZXMuaXNSZWFkT25seVwiIFtzcmNdPVwicXVlcy5pbWFnZURhdGFcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXF1ZXMuaXNSZWFkT25seVwiIGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTG9nbyBwcmV2aWV3IGFyZWEgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1wcmV2aWV3XCIgKm5nSWY9XCJxdWVzLmlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInF1ZXMuaW1hZ2VEYXRhXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFVwbG9hZCBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXF1ZXMuaW1hZ2VEYXRhXCIgY2xhc3M9XCJsb2dvLXVwbG9hZC1wbGFjZWhvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJsb2dvLXVwbG9hZC17e2l9fVwiIGNsYXNzPVwibG9nby11cGxvYWQtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIuLi9hc3NldHMvaWNvbnMvSW1hZ2Uuc3ZnXCIgYWx0PVwiVXBsb2FkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+VXBsb2FkIEltYWdlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgaWQ9XCJsb2dvLXVwbG9hZC17e2l9fVwiIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImZpbGVDaGFuZ2VFdmVudChxdWVzLCAkZXZlbnQpXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFNLUzIxTUFSMjUgbGluZSAtLT5cbiAgICAgICAgICAgICAgICA8aHIgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdMaW5lJ1wiIGNsYXNzPVwiY3VzdG9tLWxpbmVcIiBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1mbGV4XCIgLz5cbiAgICAgICAgICAgICAgICA8IS0tIFNLUzEzTUFSMjUgZGF0YSB0YWJsZSAtLT5cbiAgICAgICAgICAgICAgICA8bnh0LWRhdGF0YWJsZSAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RhYmxlJ1wiIGlzRWRpdFJvdyBpc0RlbGV0ZVJvdyBhY3Rpb25CdXR0b24gaXNCdXR0b25zIFtxdWVzdGlvbl09XCJxdWVzXCIgZnJvbT1cImZvcm1CdWlsZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudC5kYXRhLCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCIgW2FwaU1ldGFdPVwicXVlcy5zdWJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgICAgW3RhYmxlQ29uZmlnXT1cInF1ZXMudGFibGVDb25maWdcIiB0YWJsZUlkPVwiXCIgZGlyZWN0aW9uPVwibHRyXCIgdGFibGVXaWR0aD1cImF1dG9cIj5cbiAgICAgICAgICAgICAgICA8L254dC1kYXRhdGFibGU+XG4gICAgICAgICAgICAgICAgPCEtLSBsaXN0IC0tPlxuICAgICAgICAgICAgICAgIDxueHQtc2VhcmNoLWJveCAgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdMaXN0J1wiIFtxdWVzdGlvbl09XCJxdWVzXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJxdWVzLmlkXCIgW3BsYWNlSG9sZGVyVGV4dF09XCJxdWVzLnF1ZXN0aW9uIHx8ICcnXCIgW2ZpbHRlck5hbWVdPVwicXVlcy5pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgIChzZWFyY2hWYWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQudmFsdWUsJGV2ZW50LnF1ZXN0aW9uKVwiPlxuICAgICAgICAgICAgICAgIDwvbnh0LXNlYXJjaC1ib3g+XG5cbiAgICAgICAgICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gSEEgMDlGRUIyNCBBZGRlZCBjb25kaXRpb24gb2Ygc3FPcHRpb24gdG8gdGhlIGRyb3Bkb3duIC0tPlxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRyb3Bkb3duICpuZ0lmPVwicXVlcz8udHlwZSA9PT0gJ0Ryb3Bkb3duJyAmJiBxdWVzPy5vcHRpb25zXCIgW29wdGlvbnNdPVwicXVlcy5vcHRpb25zXCIgW3Rva2VuXT1cInRva2VuXCIgW2FwaU1ldGFdPVwicXVlcy5zdWJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cInF1ZXMuaWRcIiBbc2VsZWN0ZWRWYWx1ZV09XCJxYkl0ZW0uaXNTaGVuZ2VsID8gcXVlcy5pbnB1dCA6IHF1ZXMuc2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiLS0te3snc2VsZWN0JyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX0tLS1cIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcmVmZXJlbmNlRmllbGRdPVwicXVlcy5yZWZlcmVuY2VGaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIiBbcXVlc3Rpb25dPVwicXVlc1wiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQudmFsdWUsJGV2ZW50LnF1ZXN0aW9uKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgIDwhLS0gLy8gVkQgMDJBdWcyNCBjdXN0b20tcmFkaW8gY29tcG9uZW50IC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdSYWRpbycgJiYgcXVlcz8ub3B0aW9uc1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXJhZGlvIFtvcHRpb25zXT1cInF1ZXMub3B0aW9uc1wiIFtxdWVzdGlvbl09XCJxdWVzXCIgW3Rva2VuXT1cInRva2VuXCIgW2FwaU1ldGFdPVwicXVlcy5zdWJUZXh0XCIgW2lkXT1cInF1ZXMuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwicXVlcy5zZWxlY3RlZFZhbHVlXCIgW2Vycm9yTWVzc2FnZV09XCJxdWVzLmVycm9yTWVzc2FnZVwiIFtlcnJvcl09XCJxdWVzLmVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWZlcmVuY2VGaWVsZF09XCJxdWVzLnJlZmVyZW5jZUZpZWxkXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJpc0VkaXQgIT09IHRydWUgPyAndmlldycgOiAnZWRpdCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudC52YWx1ZSwkZXZlbnQucXVlc3Rpb24pOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLXJhZGlvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBBdHRhY2htZW50IC8gRmlsZXMgLS0+XG4gICAgICAgICAgICAgICAgPGFwcC1maWxlLXVwbG9hZCAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0ZpbGUnXCIgW2xpbWl0RmlsZVVwbG9hZGluZ109XCI1XCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcXVlc3Rpb25dPVwicXVlc1wiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgIFthbGxGaWxlc109XCJxdWVzLmlucHV0XCIgKHNlbGVjdGVkRmlsZURhdGEpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LnZhbHVlLCRldmVudC5xdWVzdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAoZGVsZXRlZEZpbGVEYXRhKT1cImRlbGV0ZUZpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1maWxlLXVwbG9hZD5cbiAgICAgICAgICAgICAgICA8IS0tIFNLUzExSlVOMjUgQnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgIDxueHQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlcy50eXBlID09PSAnQnV0dG9uJ1wiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgIFtidG5IZWlnaHRdPVwiJzUwcHgnXCIgW2J0bldpZHRoXT1cIicxNTBweCdcIiBbYnV0dG9uVmFsdWVdPVwicXVlcz8ucXVlc3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2tFbWl0KT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9ueHQtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMTFKVU4yNSBib29rIHR5cGUgLS0+XG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbmJvb2sgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdCb29rJ1wiIFtxYkl0ZW1dPVwicXVlcy5xYkl0ZW1cIiBbbGFiZWxWYWx1ZV09XCJsYWJlbFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uc109XCJyZWFkUXVlc3Rpb25zKHF1ZXMucWJSZWZlcmVuY2UsIHF1ZXMucWJSZWZlcmVuY2VRdWVzdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAgICAgKGhhbmRsZURyb3BEb3duKT1cImdldERyb3BEb3duKCRldmVudClcIj48L2xpYi1xdWVzdGlvbmJvb2s+XG4gICAgICAgICAgICAgICAgPCEtLSBTS1MxMUpVTjI1IFRleHQsIEVtYWlsLCBsYWJlbCwgbnVtYmVyLCBCb29sZWFuLCByaWNoIHRleHQgZWRpdG9yLCBEYXRlVGltZSwgRGF0ZSwgVGltZS0tPlxuICAgICAgICAgICAgICAgIDxueHQtaW5wdXQgICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGV4dCcgfHwgcXVlcy50eXBlID09PSAnRW1haWwnIHx8IHF1ZXMudHlwZSA9PT0gJ051bWJlcicgfHwgcXVlcy50eXBlID09PSAnTGFiZWwnIHx8IHF1ZXMudHlwZSA9PT0gJ0Jvb2xlYW4nIHx8IHF1ZXMudHlwZSA9PT0gJ1JpY2hUZXh0QXJlYScgfHwgcXVlcy50eXBlID09PSAnRGF0ZVRpbWUnIHx8IHF1ZXMudHlwZSA9PT0gJ0RhdGUnIHx8IHF1ZXMudHlwZSA9PT0gJ1RpbWUnIHx8IHF1ZXMudHlwZSA9PT0gJ1RleHRBcmVhJ1wiXG4gICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInF1ZXMudHlwZSA9PT0gJ1RleHQnID8gJ3RleHQnIDogcXVlcy50eXBlID09PSAnRW1haWwnID8gJ2VtYWlsJyA6IHF1ZXMudHlwZSA9PT0gJ051bWJlcicgPyAnbnVtYmVyJyA6IHF1ZXMudHlwZSA9PT0gJ0xhYmVsJyA/ICdsYWJlbCcgOiBxdWVzLnR5cGUgPT09ICdCb29sZWFuJyA/ICdjaGVja2JveCcgOiBxdWVzLnR5cGUgPT09ICdSaWNoVGV4dEFyZWEnID8gJ3JpY2h0ZXh0JyA6IHF1ZXMudHlwZSA9PT0gJ0RhdGVUaW1lJyA/ICdkYXRldGltZScgOiBxdWVzLnR5cGUgPT09ICdEYXRlJyA/ICdkYXRlJyA6ICBxdWVzLnR5cGUgPT09ICdUaW1lJyA/ICd0aW1lJyA6IHF1ZXMudHlwZSA9PT0gJ1RleHRBcmVhJyA/ICd0ZXh0YXJlYScgOiAndGV4dCdcIlxuICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJpc0VkaXQgIT09IHRydWUgPyAndmlldycgOiAnZWRpdCdcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicXVlcy5pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsRm9udF09XCJxdWVzLmZvbnRcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwicmVtb3ZlQ2hhcmFjdGVycyhxdWVzPy5xdWVzdGlvblRleHQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsQ29sb3JdPVwicXVlcy5mb250Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxTaXplXT1cInF1ZXMuZm9udFNpemVcIlxuICAgICAgICAgICAgICAgICAgICBbaW5wdXRWYWx1ZVNpemVdPVwicXVlcy5mb250U2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbFdlaWdodF09XCJxdWVzLmZvbnRXZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBbaW5wdXRXZWlnaHRdPVwicXVlcy5mb250V2VpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dMYWJlbF09XCJxdWVzLnN0eWxlPy5zaG93TGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBpbnB1dEJvcmRlcj1cIm5vbmVcIiBzdmdIZWlnaHQ9XCIyMHB4XCIgc3ZnV2lkdGg9XCIyMHB4XCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInF1ZXMucXVlc3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicXVlcy5pc09wdGlvbmFsXCIgaW5wdXRCZ0NvbG9yPVwiI0ZBRkFGQVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbnB1dElkXT1cInF1ZXMudHJhY2tpbmdJZFwiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VzXT1cInsgcmVxdWlyZWQ6ICdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJyB9XCJcbiAgICAgICAgICAgICAgICAgICAgW2lucHV0SWNvbkxlZnRTcmNdPVwicXVlcy5pY29uTGVmdFNyY1wiIFxuICAgICAgICAgICAgICAgICAgICBbbWluRGF0ZV09XCJxdWVzLm1pbkRhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbcm93c109XCIzXCJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0VmFsdWUpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LnZhbHVlLCRldmVudC5xdWVzdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9ueHQtaW5wdXQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLVNLUzI1TUFSMjUgTW9kYWwgT3ZlcmxheSAtLT5cbjxkaXYgY2xhc3M9XCJtb2RhbC1vdmVybGF5XCIgKm5nSWY9XCJpc0ltYWdlRWRpdFwiPlxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY2xvc2UtYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlTW9kYWwoKVwiPsOXPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gSW1hZ2UgRWRpdG9yIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRJbWFnZUVsZW1lbnQ/LnR5cGUgPT09ICdJbWFnZSdcIj5cbiAgICAgICAgICAgIDxpbWFnZS1jcm9wcGVyICpuZ0lmPVwic2VsZWN0ZWRJbWFnZUVsZW1lbnQuaW1hZ2VEYXRhXCIgW2ltYWdlQmFzZTY0XT1cInNlbGVjdGVkSW1hZ2VFbGVtZW50Lm9yZ0ltYWdlRGF0YVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCIgW2FsaWduSW1hZ2VdPVwiYWxpZ25JbWFnZVwiIFtyb3VuZENyb3BwZXJdPVwicm91bmRDcm9wcGVyXCIgW2JhY2tncm91bmRDb2xvcl09XCInd2hpdGUnXCJcbiAgICAgICAgICAgICAgICBpbWFnZUFsdFRleHQ9XCJBbHRlcm5hdGl2ZSBpbWFnZSB0ZXh0XCIgW2FsbG93TW92ZUltYWdlXT1cImZhbHNlXCIgW2hpZGVSZXNpemVTcXVhcmVzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbY2FudmFzUm90YXRpb25dPVwiY2FudmFzUm90YXRpb25cIiBbYXNwZWN0UmF0aW9dPVwiYXNwZWN0UmF0aW9cIiBbY29udGFpbldpdGhpbkFzcGVjdFJhdGlvXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbbWFpbnRhaW5Bc3BlY3RSYXRpb109XCJmYWxzZVwiIFtjcm9wcGVyU3RhdGljV2lkdGhdPVwiY3JvcHBlclN0YXRpY1dpZHRoXCJcbiAgICAgICAgICAgICAgICBbY3JvcHBlclN0YXRpY0hlaWdodF09XCJjcm9wcGVyU3RhdGljSGVpZ2h0XCIgW2Nyb3BwZXJNaW5XaWR0aF09XCJjcm9wcGVyTWluV2lkdGhcIlxuICAgICAgICAgICAgICAgIFtjcm9wcGVyTWluSGVpZ2h0XT1cImNyb3BwZXJNaW5IZWlnaHRcIiBbY3JvcHBlck1heFdpZHRoXT1cImNyb3BwZXJNYXhXaWR0aFwiXG4gICAgICAgICAgICAgICAgW2Nyb3BwZXJNYXhIZWlnaHRdPVwiY3JvcHBlck1heEhlaWdodFwiIFtyZXNldENyb3BPbkFzcGVjdFJhdGlvQ2hhbmdlXT0ndHJ1ZScgWyhjcm9wcGVyKV09XCJjcm9wcGVyXCJcbiAgICAgICAgICAgICAgICBbKHRyYW5zZm9ybSldPVwidHJhbnNmb3JtXCIgW29ubHlTY2FsZURvd25dPVwidHJ1ZVwiIG91dHB1dD1cImJsb2JcIiBmb3JtYXQ9XCJwbmdcIlxuICAgICAgICAgICAgICAgIChpbWFnZUNyb3BwZWQpPVwiaW1hZ2VDcm9wcGVkKCRldmVudClcIiAoY3JvcHBlclJlYWR5KT1cImNyb3BwZXJSZWFkeSgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8L2ltYWdlLWNyb3BwZXI+XG5cbiAgICAgICAgICAgIDwhLS0gQ29udHJvbHMgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRJbWFnZUVsZW1lbnQuaW1hZ2VEYXRhXCIgY2xhc3M9XCJjb250cm9sc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwicm90YXRlTGVmdCgpXCIgdGl0bGU9XCJSb3RhdGUgTGVmdFwiPuKfsjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwicm90YXRlUmlnaHQoKVwiIHRpdGxlPVwiUm90YXRlIFJpZ2h0XCI+4p+zPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJ6b29tT3V0KClcIiB0aXRsZT1cIlpvb20gT3V0XCI+LTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwiem9vbUluKClcIiB0aXRsZT1cIlpvb20gSW5cIj4rPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJtb3ZlTGVmdCgpXCIgdGl0bGU9XCJNb3ZlIExlZnRcIj7ihpA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cIm1vdmVSaWdodCgpXCIgdGl0bGU9XCJNb3ZlIFJpZ2h0XCI+4oaSPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJtb3ZlVXAoKVwiIHRpdGxlPVwiTW92ZSBVcFwiPuKGkTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwibW92ZURvd24oKVwiIHRpdGxlPVwiTW92ZSBEb3duXCI+4oaTPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJmbGlwSG9yaXpvbnRhbCgpXCIgW2NsYXNzLmVuYWJsZWRdPVwidHJhbnNmb3JtLmZsaXBIXCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJGbGlwIEhvcml6b250YWxseVwiPuKGlDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwiZmxpcFZlcnRpY2FsKClcIiBbY2xhc3MuZW5hYmxlZF09XCJ0cmFuc2Zvcm0uZmxpcFZcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkZsaXAgVmVydGljYWxseVwiPuKGlTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwicmVzZXRJbWFnZSgpXCIgdGl0bGU9XCJSZXNldFwiPsOXPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=