commons-assessment 12.0.39-dev.3 → 12.0.39-dev.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -448,10 +448,15 @@ export class AssessmentTakerComponent {
448
448
  })
449
449
  : of(void 0);
450
450
  }), catchError((err) => {
451
+ var _a;
451
452
  if ((err === null || err === void 0 ? void 0 : err.code) === 'camera_denied') {
452
453
  // surfaced inside the intro gate so the candidate can allow the camera and retry
453
454
  return throwError({ message: this.labelConfig['COMMONS_ASSESSMENT.PROCTORING.CAMERA_DENIED'] });
454
455
  }
456
+ // backend rejected the reference photo (e.g. no clear face) — prompt the candidate to retake it
457
+ if (((_a = err === null || err === void 0 ? void 0 : err.error) === null || _a === void 0 ? void 0 : _a.errorCode) === 'ERR_PROCTORING_PROVIDER_CLIENT') {
458
+ return throwError({ message: this.labelConfig['COMMONS_ASSESSMENT.PROCTORING.REFERENCE_IMAGE_REJECTED'], retakePhoto: true });
459
+ }
455
460
  this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });
456
461
  return throwError({ message: this.labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSION_ERROR'] });
457
462
  }));
@@ -1091,7 +1096,7 @@ export class AssessmentTakerComponent {
1091
1096
  }
1092
1097
  }
1093
1098
  AssessmentTakerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AssessmentTakerComponent, deps: [{ token: i1.AssessmentTakerService }, { token: i2.FormBuilder }, { token: i3.ResponseBuilderService }, { token: i4.DomSanitizer }, { token: i5.MatDialog }, { token: i0.ChangeDetectorRef }, { token: i6.ProctoringService }], target: i0.ɵɵFactoryTarget.Component });
1094
- AssessmentTakerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AssessmentTakerComponent, selector: "lib-assessment-taker", inputs: { labelConfig: "labelConfig", imageConfig: "imageConfig", showFooter: "showFooter", assessmentId: "assessmentId", assessmentInstanceId: "assessmentInstanceId", assesseeData: "assesseeData", assessorData: "assessorData", disabled: "disabled", previewMode: "previewMode", verticalView: "verticalView", enableMarks: "enableMarks", hideSectionTabs: "hideSectionTabs", assessmentContext: "assessmentContext", assesseeResponse: "assesseeResponse", markAsCompleted: "markAsCompleted", sectionWiseScore: "sectionWiseScore", showOverallRemarks: "showOverallRemarks", showCorrectAnswers: "showCorrectAnswers", resumeTimerAcrossVisits: "resumeTimerAcrossVisits", warnOnLeaveDuringProctoring: "warnOnLeaveDuringProctoring", proctorLinkLoader: "proctorLinkLoader" }, outputs: { snackbarMessage: "snackbarMessage", submitAssessment: "submitAssessment", stepChanged: "stepChanged", consentToProceed: "consentToProceed" }, host: { listeners: { "window:resize": "onResize()", "window:beforeunload": "onBeforeUnload($event)", "window:popstate": "onPopState()" } }, ngImport: i0, template: "<div *ngIf=\"configsLoaded && !showLoader; else loader\" class=\"col-12 h-100\">\r\n <div class=\"col-12 h-100 pt-2 pb-4\" [class.height-without-footer]=\"showFooter\">\r\n <div *ngIf=\"previewMode && isProctoringEnabled && (assesseeResponse?.id || assesseeData?.id)\" class=\"d-flex justify-content-end mb-3\">\r\n <button type=\"button\" (click)=\"openProctoringResult()\"\r\n class=\"assessment-zoom-animation assessment-button-padding assessment-border-radius-two assessment-btn-primary-transparent assessment-text-semibold-13 d-flex align-items-center gap-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PROCTORING']\" width=\"16\" height=\"16\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/proctoring.svg')\" />\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.VIEW_REPORT'] }}\r\n </button>\r\n </div>\r\n <!-- Full-screen intro gate \u2014 questions stay hidden until proceed -->\r\n <lib-proctoring-consent *ngIf=\"introActive\" [labelConfig]=\"labelConfig\"\r\n [proctoringEnabled]=\"isProctoringEnabled\" [requireCapture]=\"requireReferenceCapture\"\r\n [sectionCount]=\"totalSectionCount\" [questionCount]=\"totalQuestionCount\"\r\n [durationSeconds]=\"assessmentDurationSeconds\"\r\n [confirmAction]=\"startSessionAction\" (proceeded)=\"onIntroProceeded()\">\r\n </lib-proctoring-consent>\r\n\r\n <div *ngIf=\"assessmentContext?.assessmentInstanceDTO?.duration && !previewMode && !introActive && (!disabled || timeExpired)\"\r\n class=\"d-flex align-items-center gap-md-3 gap-2 px-3 py-2 assessment-border-radius-two mb-4 timer-container assessment-bg-palette-FEF1E8\">\r\n <p class=\"assessment-text-semibold-18 assessment-text-grey-ten mb-0\">{{displayTime}}</p>\r\n <p class=\"assessment-text-grey-ten assessment-text-medium-12 mb-0\">\r\n {{ timeExpired\r\n ? labelConfig['COMMONS_ASSESSMENT.LABEL.TIMER_EXPIRED']\r\n : labelConfig['COMMONS_ASSESSMENT.LABEL.TIMER_AUTO_SUBMIT'] }}</p>\r\n </div>\r\n <ng-container *ngIf=\"assessmentQuestionPaperData?.questionPaperSectionList?.length && !introActive\">\r\n <mat-tab-group *ngIf=\"!verticalView\" animationDuration=\"0ms\" class=\"assessment-mat-custom-tabs\"\r\n [ngClass]=\"{'assessment-hide-tabs': hideSectionTabs}\" [(selectedIndex)]=\"selectedTabIndex\">\r\n <mat-tab\r\n *ngFor=\"let section of assessmentQuestionPaperData.questionPaperSectionList | orderBy; let i = index; trackBy: trackBySectionId\"\r\n [disabled]=\"shouldDisableTab(i)\">\r\n <ng-template mat-tab-label>\r\n <span class=\"assessment-text-semibold-16\"\r\n [ngClass]=\"sectionErrors[i] ? 'assessment-text-danger' : ''\">{{section.qpsName?.[0]?.text}}</span>\r\n </ng-template>\r\n <div class=\"mt-4\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sectionContent; context: { section: section, i: i }\"></ng-container>\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <mat-accordion *ngIf=\"verticalView\" multi=\"true\" class=\"d-flex flex-column gap-4\">\r\n <mat-expansion-panel\r\n *ngFor=\"let section of assessmentQuestionPaperData.questionPaperSectionList | orderBy; let i = index; trackBy: trackBySectionId\"\r\n [expanded]=\"expandedState[i] !== false\" (opened)=\"expandedState[i] = true\"\r\n (closed)=\"expandedState[i] = false\"\r\n class=\"assessment-border-radius-two shadow-none m-0 assessment-panel bg-transparent\">\r\n <mat-expansion-panel-header class=\"assessment-bg-grey-two h-auto assessment-panel-header\">\r\n <div class=\"d-flex align-items-center justify-content-between gap-2 col-12 pe-3\">\r\n <span class=\"assessment-text-semibold-16\"\r\n [ngClass]=\"sectionErrors[i] ? 'assessment-text-danger' : ''\">\r\n {{section.qpsName?.[0]?.text}}</span>\r\n\r\n <ng-container *ngIf=\"sectionWiseScore?.[section?.id] as sectionScore\">\r\n <div *ngIf=\"(sectionScore?.totalMarks ?? 0) > 0\"\r\n class=\"d-flex align-items-center gap-2 assessment-text-primary-four\">\r\n <span *ngIf=\"(sectionScore?.skillScores?.length ?? 0) > 0\"\r\n class=\"assessment-text-medium-11 assessment-text-grey-ten px-2 py-1 assessment-border-radius-two skill-chip cursor-pointer\"\r\n (click)=\"$event.stopPropagation(); openSkillAllocationDialog(sectionScore?.skillScores)\">\r\n {{sectionScore?.skillScores?.length}}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SKILLS']}}\r\n </span>\r\n <span class=\"white-space-nowrap assessment-text-semibold-13\">\r\n <span class=\"assessment-text-medium-15 me-1\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SCORE']}}:</span>\r\n {{sectionScore.obtainedMarks || 0}}/{{sectionScore.totalMarks}}\r\n </span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </mat-expansion-panel-header>\r\n <div class=\"mt-3\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sectionContent; context: { section: section, i: i }\"></ng-container>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n\r\n <div *ngIf=\"!assessmentQuestionPaperData?.questionPaperSectionList?.length\"\r\n class=\"h-100 d-flex flex-column align-items-center justify-content-center gap-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.NO_QUESTIONS']\" class=\"col-sm-auto col-6\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/no-questions.svg')\" />\r\n <div class=\"text-center\">\r\n <p class=\"mb-1 assessment-text-medium-18\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.NO_QUESTIONS']}}</p>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"showOverallRemarks && assessmentQuestionPaperData?.questionPaperSectionList?.length\" class=\"mt-3\">\r\n <p class=\"assessment-text-medium-15 mb-2\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OVERALL_REMARKS']}}</p>\r\n <textarea\r\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one\"\r\n rows=\"3\" [formControl]=\"overallNotesCtrl\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.REMARKS']\"></textarea>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showFooter && !introActive\"\r\n class=\"bg-white p-3 position-sticky bottom-0 d-flex align-items-center justify-content-end border-top gap-3 z-index-1\">\r\n <button\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary-transparent assessment-text-semibold-13\"\r\n (click)=\"goBack()\" *ngIf=\"selectedTabIndex > 0 && !verticalView\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.GO_BACK']}}</button>\r\n <button [disabled]=\"isSubmitting || (disabled && !enableMarks && !showOverallRemarks) || isCheckingLink\" (click)=\"verticalView ? goNext(true) : goNext()\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary assessment-text-semibold-13 position-relative\">\r\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\r\n {{ (verticalView || selectedTabIndex === sectionFormGroups.length - 1) ?\r\n labelConfig['COMMONS_ASSESSMENT.LABEL.SUBMIT'] : labelConfig['COMMONS_ASSESSMENT.LABEL.NEXT'] }}\r\n </span>\r\n <mat-spinner *ngIf=\"isSubmitting\" [diameter]=\"20\"\r\n class=\"position-absolute top-50 start-50 translate-middle assessment-spinner-white\"></mat-spinner>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<ng-template #loader>\r\n <div class=\"h-100 col-12 d-flex align-items-center justify-content-center py-5\">\r\n <mat-spinner diameter=\"60\" class=\"assessment-spinner-primary\"></mat-spinner>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Recursive Template for Questions & Child Questions -->\r\n<ng-template #questionTemplate let-questionId=\"questionId\" let-isMandatory=\"isMandatory\" let-groupIndex=\"groupIndex\"\r\n let-parentOptionId=\"parentOptionId\" let-parentQuestionId=\"parentQuestionId\" let-sequence=\"sequence\">\r\n <div *ngIf=\"sectionFormGroups[groupIndex].formGroup as formGroup\" [formGroup]=\"formGroup\"\r\n [id]=\"'question-container-' + questionId\">\r\n <div class=\"assessment-border-radius-two assessment-bg-white\"\r\n [ngClass]=\"{'p-3 assessment-card-border': !parentOptionId}\" *ngIf=\"questionBank[questionId] as question\">\r\n <div class=\"d-flex flex-md-row flex-column gap-2 align-items-start\">\r\n <div class=\"flex-grow-1 d-flex align-items-start gap-1\">\r\n <span class=\"assessment-text-medium-15 text-nowrap d-md-block d-none\"\r\n *ngIf=\"sequence\">{{sequence}}.</span>\r\n <div class=\"flex-grow-1\">\r\n <div class=\"d-flex gap-2 align-items-start col-12\">\r\n <div class=\"flex-grow-1\">\r\n <p class=\"assessment-text-medium-15 mb-0 d-flex gap-1\">\r\n <span>\r\n <span [innerHtml]=\"question.questionText?.[0]?.text\"></span>\r\n <span *ngIf=\"isMandatory\"\r\n class=\"assessment-text-regular-11 assessment-text-grey-eight\">\r\n ({{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY']}})</span>\r\n </span>\r\n </p>\r\n <div class=\"mt-3 col-12\" *ngIf=\"question?.mediaUrl?.length\">\r\n <ng-container\r\n *ngTemplateOutlet=\"VideoTemplate; context:{videoUrl:question?.mediaUrl}\"></ng-container>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"question.hintText?.length && !previewMode\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.INFO']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/info.svg')\"\r\n cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\"\r\n (mouseenter)=\"tooltipState[question.id!] = true\"\r\n (mouseleave)=\"tooltipState[question.id!] = false\" class=\"cursor-pointer\" />\r\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\"\r\n [cdkConnectedOverlayOpen]=\"tooltipState[question.id!] || false\"\r\n [cdkConnectedOverlayPositions]=\"[{ originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8, offsetY: 0 }, { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8, offsetY: 0 }]\">\r\n <div class=\"assessment-bg-grey-two assessment-tooltip-border p-3 assessment-border-radius-two assessment-box-shadow-tooltip question-info assessment-text-regular-13\"\r\n (mouseenter)=\"tooltipState[question.id!] = true\"\r\n (mouseleave)=\"tooltipState[question.id!] = false\"\r\n [innerHTML]=\"question.hintText\">\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- answer field -->\r\n <div *ngIf=\"previewMode && !isMobile\" class=\"mt-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"answerField; context: {question: question,previewMode: previewMode,isMandatory: isMandatory,groupIndex: groupIndex,parentOptionId: parentOptionId,parentQuestionId: parentQuestionId}\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- answer field -->\r\n <div *ngIf=\"isMobile\" class=\"col-12 mt-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"answerField; context: {question: question,previewMode: previewMode,isMandatory: isMandatory,groupIndex: groupIndex,parentOptionId: parentOptionId,parentQuestionId: parentQuestionId}\"></ng-container>\r\n </div>\r\n\r\n <!-- Assessor Marks Logic -->\r\n <div class=\"assessment-marks-field\"\r\n *ngIf=\"enableMarks && shouldShowMarksDropdown(question) && formGroup.get(question.id + '_marks') as marksControl\">\r\n <label class=\"assessment-text-medium-12 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS']}}(Max: {{question.weight}})</label>\r\n <input (keydown)=\"preventNegativeInput($event)\"\r\n (input)=\"checkMaxVal($event, marksControl, question?.weight)\"\r\n class=\"col-12 assessment-input-border-one assessment-border-radius-two px-2 py-1 outline-0 assessment-bg-grey-one assessment-text-medium-12\"\r\n [formControlName]=\"question.id + '_marks'\" type=\"number\" min=\"0\"\r\n (wheel)=\"$event.preventDefault()\">\r\n </div>\r\n </div>\r\n\r\n <!-- answer field -->\r\n <div *ngIf=\"!previewMode && !isMobile\" class=\"mt-3\">\r\n <ng-container\r\n *ngTemplateOutlet=\"answerField; context: {question: question,previewMode: previewMode,isMandatory: isMandatory,groupIndex: groupIndex,parentOptionId: parentOptionId,parentQuestionId: parentQuestionId}\"></ng-container>\r\n </div>\r\n\r\n <!-- Child Questions and Remarks Rendering Logic based on checked form state -->\r\n <ng-container *ngIf=\"question.defaultOptionsList?.length\">\r\n <ng-container *ngFor=\"let option of question.defaultOptionsList; trackBy: trackByOptionId\">\r\n\r\n <ng-container *ngIf=\"isOptionSelected(formGroup, question, option.options?.id)\">\r\n\r\n <!-- REMARKS FIELD -->\r\n <div class=\"mt-3\"\r\n *ngIf=\"option.remarksRequired && formGroup.get(question.id + '_remarks_' + option.id) as remarksControl\">\r\n <p class=\"assessment-text-regular-15 mb-2\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMARKS']}}</p>\r\n <textarea *ngIf=\"!previewMode\" formControlName=\"{{question.id}}_remarks_{{option.id}}\"\r\n rows=\"2\" [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.REMARKS']\"\r\n [ngClass]=\"remarksControl.invalid && remarksControl.touched ? 'assessment-input-border-invalid' : ''\"\r\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one\"></textarea>\r\n <ng-container *ngIf=\"previewMode\">\r\n <span class=\"assessment-text-regular-13 assessment-text-grey-nine\">\r\n {{ remarksControl.value }}</span>\r\n </ng-container>\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"remarksControl.invalid && remarksControl.touched\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.FIELD_REQUIRED']}}\r\n </div>\r\n </div>\r\n\r\n <!-- CHILD QUESTIONS RECURSION -->\r\n <div class=\"col-12 mt-4 d-flex flex-column gap-3\" *ngIf=\"option.childQuestionList?.length\">\r\n <ng-container *ngFor=\"let childId of option.childQuestionList; let childIndex = index; trackBy: trackByChildId\">\r\n <ng-container *ngTemplateOutlet=\"questionTemplate; context: {\r\n questionId: childId,\r\n isMandatory: questionBank[childId]?.isMandatory,\r\n groupIndex: groupIndex,\r\n parentOptionId: option.id,\r\n parentQuestionId: question.id,\r\n sequence: sequence + '.' + (childIndex + 1)\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- answer field template -->\r\n<ng-template #answerField let-question=\"question\" let-previewMode=\"previewMode\" let-isMandatory=\"isMandatory\"\r\n let-groupIndex=\"groupIndex\" let-parentOptionId=\"parentOptionId\" let-parentQuestionId=\"parentQuestionId\">\r\n <div *ngIf=\"sectionFormGroups[groupIndex].formGroup\" [formGroup]=\"sectionFormGroups[groupIndex].formGroup\"\r\n class=\"col-12\">\r\n <ng-container [ngSwitch]=\"question.questionType?.code\">\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_SHORT'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_LONG'\">\r\n <lib-question-type-long [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-long>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_RICH_TEXT'\">\r\n <lib-question-type-editor [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-editor>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.OBJECTIVE'\">\r\n <lib-question-type-objective [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [showCorrectAnswers]=\"showCorrectAnswers\" [imageConfig]=\"imageConfig\"\r\n [answerObj]=\"getQuestionAnswerObj(question.id!, parentOptionId, parentQuestionId)\"></lib-question-type-objective>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.MULTI_SELECT'\">\r\n <lib-question-type-multiselect [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [showCorrectAnswers]=\"showCorrectAnswers\" [imageConfig]=\"imageConfig\"\r\n [answerObj]=\"getQuestionAnswerObj(question.id!, parentOptionId, parentQuestionId)\"></lib-question-type-multiselect>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.PREFERENCE'\">\r\n <lib-question-type-preference [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\"></lib-question-type-preference>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.NUMBER'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.EMAIL'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.CONTACT_NUMBER'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.URL'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.FILE_UPLOAD'\">\r\n <lib-question-type-file-upload [question]=\"question\" [assessmentInstanceId]=\"assessmentInstanceId\"\r\n [formControlName]=\"question.id!\" [required]=\"isMandatory\" [labelConfig]=\"labelConfig\"\r\n [imageConfig]=\"imageConfig\" (snackbarMessage)=\"snackbarMessage.emit($event)\"></lib-question-type-file-upload>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.DATE_PICKER'\">\r\n <lib-question-type-date-picker [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-date-picker>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Error Messages and Character Count Container -->\r\n <ng-container\r\n *ngIf=\"!previewMode && sectionFormGroups[groupIndex].formGroup.get(question.id?.toString() || '') as control\">\r\n <div class=\"d-flex justify-content-between align-items-start mt-1\">\r\n <span>\r\n <div class=\"assessment-text-regular-12 assessment-text-danger\"\r\n *ngIf=\"control.touched && control.errors?.['required']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED_RESPONSE']}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['pattern']\">\r\n {{question?.validationMessage || labelConfig['COMMONS_ASSESSMENT.ERROR.INVALID_FORMAT']}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['privateGdriveLink']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.PRIVATE_DRIVE_LINK']}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['minlength']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MIN_CHARS']?.replace('{{length}}',\r\n control.errors?.['minlength'].requiredLength + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxlength']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_CHARS']?.replace('{{length}}',\r\n control.errors?.['maxlength'].requiredLength + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['minOptions']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MIN_OPTIONS']?.replace('{{count}}',\r\n control.errors?.['minOptions'].required + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxOptions']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_OPTIONS']?.replace('{{count}}',\r\n control.errors?.['maxOptions'].required + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxFiles']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_FILES']?.replace('{{count}}',\r\n control.errors?.['maxFiles'].required + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxFileSize']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_FILE_SIZE']?.replace('{{size}}',\r\n control.errors?.['maxFileSize'].requiredSize + '')}}\r\n </div>\r\n </span>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-grey-seven white-space-nowrap ms-2\"\r\n *ngIf=\"getMaxCharCount(question) > 0\">\r\n {{ getRemainingChars(question, control) }}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTER']}}{{getRemainingChars(question, control) !==\r\n 1\r\n ? 's' : ''}} {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMAINING']}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Reusable Section Form Template -->\r\n<ng-template #sectionContent let-section=\"section\" let-i=\"i\">\r\n <form class=\"w-100\" *ngIf=\"sectionFormGroups[i].formGroup\" [formGroup]=\"sectionFormGroups[i].formGroup\"\r\n [name]=\"'sectionfrm-' + i\" novalidate>\r\n <div class=\"d-flex justify-content-between align-items-center mb-4\"\r\n *ngIf=\"!previewMode && (section?.qpsDesc?.[0]?.text || section?.mediaUrl)\">\r\n <span class=\"assessment-text-semibold-14 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.TOTAL_QUESTIONS']}}: {{ section?.totalQuestions || 0 }}\r\n </span>\r\n <button (click)=\"openInstructionsDialog(section)\"\r\n class=\"assessment-zoom-animation assessment-button-padding assessment-text-medium-13 assessment-btn-primary-transparent\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.VIEW_INSTRUCTIONS']}}\r\n </button>\r\n </div>\r\n\r\n <div class=\"col-12 d-flex flex-column gap-3\">\r\n <ng-container *ngFor=\"let sq of section.sectionQuestionsList | orderBy; let j = index; trackBy: trackBySectionQuestion\">\r\n <ng-container *ngTemplateOutlet=\"questionTemplate; context: {\r\n questionId: sq.questionId,\r\n isMandatory: questionBank[sq.questionId]?.isMandatory,\r\n groupIndex: i,\r\n parentOptionId: null,\r\n parentQuestionId: null,\r\n sequence: j + 1\r\n }\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </form>\r\n</ng-template>\r\n\r\n<!-- video preview -->\r\n<ng-template let-videoUrl=\"videoUrl\" #VideoTemplate>\r\n <div class=\"assessment-border-radius-two overflow-hidden col-md-10 col-12\">\r\n <video *ngIf=\"videoUrl?.includes('.mp4') else youtubeVideo\" width=\"400\" controls class=\"mw-100 d-block mx-auto\">\r\n <source [src]=\"videoUrl\" type=\"video/mp4\">\r\n </video>\r\n <ng-template #youtubeVideo>\r\n <div class=\"youtube-video position-relative h-100\">\r\n <iframe [src]=\"addYoutubeIframeSrc(videoUrl)\" title=\"YouTube video player\" frameborder=\"0\"\r\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\r\n allowfullscreen class=\"position-absolute top-0 start-0 w-100 h-100 d-block\">\r\n </iframe>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ng-template>", styles: ["@charset \"UTF-8\";.assessment-text-grey-ten{color:var(--assessment-grey-ten)!important}.assessment-bg-grey-ten{background-color:var(--assessment-grey-ten)!important}.assessment-text-grey-nine{color:var(--assessment-grey-nine)!important}.assessment-bg-grey-nine{background-color:var(--assessment-grey-nine)!important}.assessment-text-grey-eight{color:var(--assessment-grey-eight)!important}.assessment-bg-grey-eight{background-color:var(--assessment-grey-eight)!important}.assessment-text-grey-seven{color:var(--assessment-grey-seven)!important}.assessment-bg-grey-seven{background-color:var(--assessment-grey-seven)!important}.assessment-text-grey-six{color:var(--assessment-grey-six)!important}.assessment-bg-grey-six{background-color:var(--assessment-grey-six)!important}.assessment-text-grey-five{color:var(--assessment-grey-five)!important}.assessment-bg-grey-five{background-color:var(--assessment-grey-five)!important}.assessment-text-grey-four{color:var(--assessment-grey-four)!important}.assessment-bg-grey-four{background-color:var(--assessment-grey-four)!important}.assessment-text-grey-three{color:var(--assessment-grey-three)!important}.assessment-bg-grey-three{background-color:var(--assessment-grey-three)!important}.assessment-text-grey-two{color:var(--assessment-grey-two)!important}.assessment-bg-grey-two{background-color:var(--assessment-grey-two)!important}.assessment-text-grey-one{color:var(--assessment-grey-one)!important}.assessment-bg-grey-one{background-color:var(--assessment-grey-one)!important}.assessment-text-white{color:var(--assessment-white)!important}.assessment-bg-white{background-color:var(--assessment-white)!important}.assessment-text-black{color:var(--assessment-black)!important}.assessment-bg-black{background-color:var(--assessment-black)!important}.assessment-text-danger{color:var(--assessment-danger)!important}.assessment-bg-danger{background-color:var(--assessment-danger)!important}.assessment-text-danger-bg{color:var(--assessment-danger-bg)!important}.assessment-bg-danger-bg{background-color:var(--assessment-danger-bg)!important}.assessment-text-success{color:var(--assessment-success)!important}.assessment-bg-success{background-color:var(--assessment-success)!important}.assessment-text-success-bg{color:var(--assessment-success-bg)!important}.assessment-bg-success-bg{background-color:var(--assessment-success-bg)!important}.assessment-text-warning{color:var(--assessment-warning)!important}.assessment-bg-warning{background-color:var(--assessment-warning)!important}.assessment-text-warning-bg{color:var(--assessment-warning-bg)!important}.assessment-bg-warning-bg{background-color:var(--assessment-warning-bg)!important}.assessment-text-primary-one{color:var(--assessment-primary-one)!important}.assessment-bg-primary-one{background-color:var(--assessment-primary-one)!important}.assessment-text-primary-four{color:var(--assessment-primary-four)!important}.assessment-bg-primary-four{background-color:var(--assessment-primary-four)!important}.assessment-text-palette-EDF3FD{color:var(--assessment-palette-EDF3FD)!important}.assessment-bg-palette-EDF3FD{background-color:var(--assessment-palette-EDF3FD)!important}.assessment-text-palette-C8DAF9{color:var(--assessment-palette-C8DAF9)!important}.assessment-bg-palette-C8DAF9{background-color:var(--assessment-palette-C8DAF9)!important}.assessment-text-palette-ADC9F6{color:var(--assessment-palette-ADC9F6)!important}.assessment-bg-palette-ADC9F6{background-color:var(--assessment-palette-ADC9F6)!important}.assessment-text-palette-FEF9F1{color:var(--assessment-palette-FEF9F1)!important}.assessment-bg-palette-FEF9F1{background-color:var(--assessment-palette-FEF9F1)!important}.assessment-text-palette-F9DAA6{color:var(--assessment-palette-F9DAA6)!important}.assessment-bg-palette-F9DAA6{background-color:var(--assessment-palette-F9DAA6)!important}.assessment-text-palette-E8F7F0{color:var(--assessment-palette-E8F7F0)!important}.assessment-bg-palette-E8F7F0{background-color:var(--assessment-palette-E8F7F0)!important}.assessment-text-palette-B7E7CF{color:var(--assessment-palette-B7E7CF)!important}.assessment-bg-palette-B7E7CF{background-color:var(--assessment-palette-B7E7CF)!important}.assessment-text-palette-FEF1E8{color:var(--assessment-palette-FEF1E8)!important}.assessment-bg-palette-FEF1E8{background-color:var(--assessment-palette-FEF1E8)!important}.assessment-text-palette-FAD2B9{color:var(--assessment-palette-FAD2B9)!important}.assessment-bg-palette-FAD2B9{background-color:var(--assessment-palette-FAD2B9)!important}.assessment-box-shadow-one{box-shadow:var(--assessment-box-shadow-one)!important}.assessment-border-radius-one{border-radius:var(--assessment-border-radius-one)!important}.assessment-border-radius-two{border-radius:var(--assessment-border-radius-two)!important}.assessment-border-radius-three{border-radius:var(--assessment-border-radius-three)!important}.assessment-border-radius-four{border-radius:var(--assessment-border-radius-four)!important}.assessment-border-radius-five{border-radius:var(--assessment-border-radius-five)!important}.assessment-border-radius-six{border-radius:var(--assessment-border-radius-six)!important}.assessment-input-border-one{border:var(--assessment-input-border-one)!important}.assessment-input-border-invalid{border:var(--assessment-input-border-invalid)!important}.assessment-input-focus-border{border:var(--assessment-input-focus-border)!important}.assessment-border-two{border:var(--assessment-border-two)!important}.assessment-card-border{border:var(--assessment-card-border)!important}.assessment-tooltip-border{border:var(--assessment-tooltip-border)!important}.assessment-box-shadow-tooltip{box-shadow:var(--assessment-box-shadow-tooltip)!important}.assessment-input-focus-box-shadow{box-shadow:var(--assessment-input-focus-box-shadow)!important}.assessment-button-padding{padding:var(--assessment-button-padding)!important}.assessment-button-padding-large{padding:var(--assessment-button-padding-large)!important}.assessment-input-padding{padding:var(--assessment-input-padding)!important}.assessment-text-font-family{color:var(--assessment-font-family)!important}.assessment-bg-font-family{background-color:var(--assessment-font-family)!important}.assessment-text-regular-12{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-semibold-12{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-medium-11{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-10{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.42rem + .2vw);line-height:calc(.72rem + .2vw)}.assessment-text-regular-11{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-12{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-regular-13{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-semibold-13{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-13{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-14{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw)!important;line-height:calc(1.2rem + .2vw)!important}.assessment-text-semibold-14{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-regular-15{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.4rem + .1vw)}.assessment-text-medium-15{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-15{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-16{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-16{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-18{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}.assessment-text-semibold-18{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}@media (min-height: 100vw) and (orientation: portrait){.assessment-text-medium-18,.assessment-text-semibold-18{font-size:calc(1rem + .1vh)!important;line-height:calc(1.6rem + .1vh)!important}.assessment-text-medium-16,.assessment-text-semibold-16{font-size:calc(.9rem + .2vh)!important;line-height:calc(1.4rem + .2vh)!important}.assessment-text-regular-15,.assessment-text-semibold-15{font-size:calc(.8rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-15{font-size:calc(.82rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-12,.assessment-text-regular-12,.assessment-text-semibold-12{font-size:calc(.5rem + .4vh);line-height:calc(.8rem + .4vh)}.assessment-text-medium-14,.assessment-text-semibold-14{font-size:calc(.8rem + .1vh)!important;line-height:calc(1.2rem + .2vh)!important}.assessment-text-regular-13,.assessment-text-medium-13,.assessment-text-semibold-13{font-size:calc(.7rem + .2vh)!important;line-height:calc(1rem + .3vh)!important}.assessment-text-regular-11,.assessment-text-medium-11{font-size:calc(.5rem + .2vh)!important;line-height:calc(.8rem + .2vh)!important}.assessment-text-medium-10{font-size:calc(.45rem + .2vh)!important;line-height:calc(.72rem + .2vh)!important}}.assessment-btn-primary{background-color:var(--assessment-primary-one);color:var(--assessment-white);border:.064rem solid var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two)}.assessment-btn-primary-transparent{background-color:var(--assessment-white);color:var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two);border:.064rem solid var(--assessment-primary-one)}.assessment-zoom-animation{transition:transform .2s ease;transform:translateZ(0);text-rendering:optimizeLegibility}.assessment-zoom-animation:hover{transform:scale(1.03)}.assessment-zoom-animation:active{transform:scale(1)}.assessment-zoom-animation:disabled{transform:none!important}.change-direction{transform:rotate(180deg);transition:.3s ease-out}.change-direction-reverse{transform:rotate(0);transition:.3s ease-out}.outline-0{outline:none}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.action-icon{width:1.2rem}.mat-menu-item,.mat-mdc-menu-item{height:inherit;min-height:unset;--mat-menu-item-label-text-font: var(--assessment-font-family) !important;--mat-menu-item-label-text-size: 14px !important;--mat-menu-item-label-text-weight: 600 !important;--mat-menu-item-label-text-line-height: inherit !important}.skill-chip{width:-moz-fit-content;width:fit-content;background:var(--assessment-palette-EDF3FD);border:.064rem solid var(--assessment-palette-C8DAF9)}.assessment-form-check-input-primary-one{min-height:unset}.assessment-form-check-input-primary-one .form-check-input{width:1rem;height:1rem}.assessment-form-check-input-primary-one .form-check-input:checked{background-color:var(--assessment-primary-one);color:var(--assessment-primary-one)}.assessment-form-check-input-primary-one .form-check-input:disabled{opacity:.8}.form-check-input:checked{background-color:var(--assessment-primary-one);border-color:var(--assessment-primary-one)}.form-check-input:focus{border-color:var(--assessment-primary-one);box-shadow:none}.height-without-footer{height:calc(100% - 4.4rem)!important}.z-index-1{z-index:1}.question-info{min-width:15rem;max-width:40vw}@media screen and (max-width: 768px){.question-info{max-width:75vw}}.assessment-marks-field{min-width:6.5rem;width:6.5rem}.youtube-video{aspect-ratio:16/9}.assessment-panel-header{padding-top:.7rem;padding-bottom:.7rem}.timer-container{border:.064rem solid var(--assessment-palette-FAD2B9)}\n"], components: [{ type: i7.ProctoringConsentComponent, selector: "lib-proctoring-consent", inputs: ["labelConfig", "proctoringEnabled", "requireCapture", "sectionCount", "questionCount", "durationSeconds", "confirmAction"], outputs: ["proceeded"] }, { type: i8.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i8.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby"], exportAs: ["matTab"] }, { type: i9.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { type: i9.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { type: i10.MatSpinner, selector: "mat-spinner", inputs: ["color"] }, { type: i11.QuestionTypeShortComponent, selector: "lib-question-type-short", inputs: ["required", "question", "previewMode", "labelConfig"] }, { type: i12.QuestionTypeLongComponent, selector: "lib-question-type-long", inputs: ["required", "question", "previewMode", "labelConfig"] }, { type: i13.QuestionTypeEditorComponent, selector: "lib-question-type-editor", inputs: ["required", "question", "previewMode", "labelConfig"] }, { type: i14.QuestionTypeObjectiveComponent, selector: "lib-question-type-objective", inputs: ["required", "question", "showCorrectAnswers", "imageConfig", "answerObj"], outputs: ["viewChild"] }, { type: i15.QuestionTypeMultiselectComponent, selector: "lib-question-type-multiselect", inputs: ["required", "question", "showCorrectAnswers", "imageConfig", "answerObj"], outputs: ["viewChild"] }, { type: i16.QuestionTypePreferenceComponent, selector: "lib-question-type-preference", inputs: ["required", "question"], outputs: ["viewChild"] }, { type: i17.QuestionTypeFileUploadComponent, selector: "lib-question-type-file-upload", inputs: ["required", "assessmentInstanceId", "question", "labelConfig", "imageConfig"], outputs: ["snackbarMessage"] }, { type: i18.QuestionTypeDatePickerComponent, selector: "lib-question-type-date-picker", inputs: ["required", "question", "previewMode", "labelConfig"] }], directives: [{ type: i19.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i19.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i19.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { type: i19.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i9.MatAccordion, selector: "mat-accordion", inputs: ["multi", "displayMode", "togglePosition", "hideToggle"], exportAs: ["matAccordion"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i20.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { type: i20.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayPositions", "cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayTransformOriginOn"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i19.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i19.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }], pipes: { "orderBy": i21.OrderByPipe } });
1099
+ AssessmentTakerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AssessmentTakerComponent, selector: "lib-assessment-taker", inputs: { labelConfig: "labelConfig", imageConfig: "imageConfig", showFooter: "showFooter", assessmentId: "assessmentId", assessmentInstanceId: "assessmentInstanceId", assesseeData: "assesseeData", assessorData: "assessorData", disabled: "disabled", previewMode: "previewMode", verticalView: "verticalView", enableMarks: "enableMarks", hideSectionTabs: "hideSectionTabs", assessmentContext: "assessmentContext", assesseeResponse: "assesseeResponse", markAsCompleted: "markAsCompleted", sectionWiseScore: "sectionWiseScore", showOverallRemarks: "showOverallRemarks", showCorrectAnswers: "showCorrectAnswers", resumeTimerAcrossVisits: "resumeTimerAcrossVisits", warnOnLeaveDuringProctoring: "warnOnLeaveDuringProctoring", proctorLinkLoader: "proctorLinkLoader" }, outputs: { snackbarMessage: "snackbarMessage", submitAssessment: "submitAssessment", stepChanged: "stepChanged", consentToProceed: "consentToProceed" }, host: { listeners: { "window:resize": "onResize()", "window:beforeunload": "onBeforeUnload($event)", "window:popstate": "onPopState()" } }, ngImport: i0, template: "<div *ngIf=\"configsLoaded && !showLoader; else loader\" class=\"col-12 h-100\">\r\n <div class=\"col-12 h-100 pt-2 pb-4\" [class.height-without-footer]=\"showFooter\">\r\n <div *ngIf=\"previewMode && isProctoringEnabled && (assesseeResponse?.id || assesseeData?.id)\" class=\"d-flex justify-content-end mb-3\">\r\n <button type=\"button\" (click)=\"openProctoringResult()\"\r\n class=\"assessment-zoom-animation assessment-button-padding assessment-border-radius-two assessment-btn-primary-transparent assessment-text-semibold-13 d-flex align-items-center gap-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PROCTORING']\" width=\"16\" height=\"16\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/proctoring.svg')\" />\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.VIEW_REPORT'] }}\r\n </button>\r\n </div>\r\n <!-- Full-screen intro gate \u2014 questions stay hidden until proceed -->\r\n <lib-proctoring-consent *ngIf=\"introActive\" [labelConfig]=\"labelConfig\"\r\n [proctoringEnabled]=\"isProctoringEnabled\" [requireCapture]=\"requireReferenceCapture\"\r\n [sectionCount]=\"totalSectionCount\" [questionCount]=\"totalQuestionCount\"\r\n [durationSeconds]=\"assessmentDurationSeconds\"\r\n [confirmAction]=\"startSessionAction\" (proceeded)=\"onIntroProceeded()\">\r\n </lib-proctoring-consent>\r\n\r\n <div *ngIf=\"assessmentContext?.assessmentInstanceDTO?.duration && !previewMode && !introActive && (!disabled || timeExpired)\"\r\n class=\"d-flex align-items-center gap-md-3 gap-2 px-3 py-2 assessment-border-radius-two mb-4 timer-container assessment-bg-palette-FEF1E8\">\r\n <p class=\"assessment-text-semibold-18 assessment-text-grey-ten mb-0\">{{displayTime}}</p>\r\n <p class=\"assessment-text-grey-ten assessment-text-medium-12 mb-0\">\r\n {{ timeExpired\r\n ? labelConfig['COMMONS_ASSESSMENT.LABEL.TIMER_EXPIRED']\r\n : labelConfig['COMMONS_ASSESSMENT.LABEL.TIMER_AUTO_SUBMIT'] }}</p>\r\n </div>\r\n <ng-container *ngIf=\"assessmentQuestionPaperData?.questionPaperSectionList?.length && !introActive\">\r\n <mat-tab-group *ngIf=\"!verticalView\" animationDuration=\"0ms\" class=\"assessment-mat-custom-tabs\"\r\n [ngClass]=\"{'assessment-hide-tabs': hideSectionTabs}\" [(selectedIndex)]=\"selectedTabIndex\">\r\n <mat-tab\r\n *ngFor=\"let section of assessmentQuestionPaperData.questionPaperSectionList | orderBy; let i = index; trackBy: trackBySectionId\"\r\n [disabled]=\"shouldDisableTab(i)\">\r\n <ng-template mat-tab-label>\r\n <span class=\"assessment-text-semibold-16\"\r\n [ngClass]=\"sectionErrors[i] ? 'assessment-text-danger' : ''\">{{section.qpsName?.[0]?.text}}</span>\r\n </ng-template>\r\n <div class=\"mt-4\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sectionContent; context: { section: section, i: i }\"></ng-container>\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <mat-accordion *ngIf=\"verticalView\" multi=\"true\" class=\"d-flex flex-column gap-4\">\r\n <mat-expansion-panel\r\n *ngFor=\"let section of assessmentQuestionPaperData.questionPaperSectionList | orderBy; let i = index; trackBy: trackBySectionId\"\r\n [expanded]=\"expandedState[i] !== false\" (opened)=\"expandedState[i] = true\"\r\n (closed)=\"expandedState[i] = false\"\r\n class=\"assessment-border-radius-two shadow-none m-0 assessment-panel bg-transparent\">\r\n <mat-expansion-panel-header class=\"assessment-bg-grey-two h-auto assessment-panel-header\">\r\n <div class=\"d-flex align-items-center justify-content-between gap-2 col-12 pe-3\">\r\n <span class=\"assessment-text-semibold-16\"\r\n [ngClass]=\"sectionErrors[i] ? 'assessment-text-danger' : ''\">\r\n {{section.qpsName?.[0]?.text}}</span>\r\n\r\n <ng-container *ngIf=\"sectionWiseScore?.[section?.id] as sectionScore\">\r\n <div *ngIf=\"(sectionScore?.totalMarks ?? 0) > 0\"\r\n class=\"d-flex align-items-center gap-2 assessment-text-primary-four\">\r\n <span *ngIf=\"(sectionScore?.skillScores?.length ?? 0) > 0\"\r\n class=\"assessment-text-medium-11 assessment-text-grey-ten px-2 py-1 assessment-border-radius-two skill-chip cursor-pointer\"\r\n (click)=\"$event.stopPropagation(); openSkillAllocationDialog(sectionScore?.skillScores)\">\r\n {{sectionScore?.skillScores?.length}}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SKILLS']}}\r\n </span>\r\n <span class=\"white-space-nowrap assessment-text-semibold-13\">\r\n <span class=\"assessment-text-medium-15 me-1\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SCORE']}}:</span>\r\n {{sectionScore.obtainedMarks || 0}}/{{sectionScore.totalMarks}}\r\n </span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </mat-expansion-panel-header>\r\n <div class=\"mt-3\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sectionContent; context: { section: section, i: i }\"></ng-container>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n\r\n <div *ngIf=\"!assessmentQuestionPaperData?.questionPaperSectionList?.length\"\r\n class=\"h-100 d-flex flex-column align-items-center justify-content-center gap-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.NO_QUESTIONS']\" class=\"col-sm-auto col-6\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/no-questions.svg')\" />\r\n <div class=\"text-center\">\r\n <p class=\"mb-1 assessment-text-medium-18\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.NO_QUESTIONS']}}</p>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"showOverallRemarks && assessmentQuestionPaperData?.questionPaperSectionList?.length\" class=\"mt-3\">\r\n <p class=\"assessment-text-medium-15 mb-2\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OVERALL_REMARKS']}}</p>\r\n <textarea\r\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one\"\r\n rows=\"3\" [formControl]=\"overallNotesCtrl\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.REMARKS']\"></textarea>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showFooter && !introActive\"\r\n class=\"bg-white p-3 position-sticky bottom-0 d-flex align-items-center justify-content-end border-top gap-3 z-index-1\">\r\n <button\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary-transparent assessment-text-semibold-13\"\r\n (click)=\"goBack()\" *ngIf=\"selectedTabIndex > 0 && !verticalView\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.GO_BACK']}}</button>\r\n <button [disabled]=\"isSubmitting || (disabled && !enableMarks && !showOverallRemarks) || isCheckingLink\" (click)=\"verticalView ? goNext(true) : goNext()\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary assessment-text-semibold-13 position-relative\">\r\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\r\n {{ (verticalView || selectedTabIndex === sectionFormGroups.length - 1) ?\r\n labelConfig['COMMONS_ASSESSMENT.LABEL.SUBMIT'] : labelConfig['COMMONS_ASSESSMENT.LABEL.NEXT'] }}\r\n </span>\r\n <mat-spinner *ngIf=\"isSubmitting\" [diameter]=\"20\"\r\n class=\"position-absolute top-50 start-50 translate-middle assessment-spinner-white\"></mat-spinner>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<ng-template #loader>\r\n <div class=\"h-100 col-12 d-flex align-items-center justify-content-center py-5\">\r\n <mat-spinner diameter=\"60\" class=\"assessment-spinner-primary\"></mat-spinner>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Recursive Template for Questions & Child Questions -->\r\n<ng-template #questionTemplate let-questionId=\"questionId\" let-isMandatory=\"isMandatory\" let-groupIndex=\"groupIndex\"\r\n let-parentOptionId=\"parentOptionId\" let-parentQuestionId=\"parentQuestionId\" let-sequence=\"sequence\">\r\n <div *ngIf=\"sectionFormGroups[groupIndex].formGroup as formGroup\" [formGroup]=\"formGroup\"\r\n [id]=\"'question-container-' + questionId\">\r\n <div class=\"assessment-border-radius-two assessment-bg-white\"\r\n [ngClass]=\"{'p-3 assessment-card-border': !parentOptionId}\" *ngIf=\"questionBank[questionId] as question\">\r\n <div class=\"d-flex flex-md-row flex-column gap-2 align-items-start\">\r\n <div class=\"flex-grow-1 d-flex align-items-start gap-1\">\r\n <span class=\"assessment-text-medium-15 text-nowrap d-md-block d-none\"\r\n *ngIf=\"sequence\">{{sequence}}.</span>\r\n <div class=\"flex-grow-1\">\r\n <div class=\"d-flex gap-2 align-items-start col-12\">\r\n <div class=\"flex-grow-1\">\r\n <p class=\"assessment-text-medium-15 mb-0 d-flex gap-1\">\r\n <span>\r\n <span [innerHtml]=\"question.questionText?.[0]?.text\"></span>\r\n <span *ngIf=\"isMandatory\"\r\n class=\"assessment-text-regular-11 assessment-text-grey-eight\">\r\n ({{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY']}})</span>\r\n </span>\r\n </p>\r\n <div class=\"mt-3 col-12\" *ngIf=\"question?.mediaUrl?.length\">\r\n <ng-container\r\n *ngTemplateOutlet=\"VideoTemplate; context:{videoUrl:question?.mediaUrl}\"></ng-container>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"question.hintText?.length && !previewMode\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.INFO']\" class=\"info-icon\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/info.svg')\"\r\n cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\"\r\n (mouseenter)=\"tooltipState[question.id!] = true\"\r\n (mouseleave)=\"tooltipState[question.id!] = false\" class=\"cursor-pointer\" />\r\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\"\r\n [cdkConnectedOverlayOpen]=\"tooltipState[question.id!] || false\"\r\n [cdkConnectedOverlayPositions]=\"[{ originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8, offsetY: 0 }, { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8, offsetY: 0 }]\">\r\n <div class=\"assessment-bg-grey-two assessment-tooltip-border p-3 assessment-border-radius-two assessment-box-shadow-tooltip question-info assessment-text-regular-13\"\r\n (mouseenter)=\"tooltipState[question.id!] = true\"\r\n (mouseleave)=\"tooltipState[question.id!] = false\"\r\n [innerHTML]=\"question.hintText\">\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- answer field -->\r\n <div *ngIf=\"previewMode && !isMobile\" class=\"mt-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"answerField; context: {question: question,previewMode: previewMode,isMandatory: isMandatory,groupIndex: groupIndex,parentOptionId: parentOptionId,parentQuestionId: parentQuestionId}\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- answer field -->\r\n <div *ngIf=\"isMobile\" class=\"col-12 mt-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"answerField; context: {question: question,previewMode: previewMode,isMandatory: isMandatory,groupIndex: groupIndex,parentOptionId: parentOptionId,parentQuestionId: parentQuestionId}\"></ng-container>\r\n </div>\r\n\r\n <!-- Assessor Marks Logic -->\r\n <div class=\"assessment-marks-field\"\r\n *ngIf=\"enableMarks && shouldShowMarksDropdown(question) && formGroup.get(question.id + '_marks') as marksControl\">\r\n <label class=\"assessment-text-medium-12 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS']}}(Max: {{question.weight}})</label>\r\n <input (keydown)=\"preventNegativeInput($event)\"\r\n (input)=\"checkMaxVal($event, marksControl, question?.weight)\"\r\n class=\"col-12 assessment-input-border-one assessment-border-radius-two px-2 py-1 outline-0 assessment-bg-grey-one assessment-text-medium-12\"\r\n [formControlName]=\"question.id + '_marks'\" type=\"number\" min=\"0\"\r\n (wheel)=\"$event.preventDefault()\">\r\n </div>\r\n </div>\r\n\r\n <!-- answer field -->\r\n <div *ngIf=\"!previewMode && !isMobile\" class=\"mt-3\">\r\n <ng-container\r\n *ngTemplateOutlet=\"answerField; context: {question: question,previewMode: previewMode,isMandatory: isMandatory,groupIndex: groupIndex,parentOptionId: parentOptionId,parentQuestionId: parentQuestionId}\"></ng-container>\r\n </div>\r\n\r\n <!-- Child Questions and Remarks Rendering Logic based on checked form state -->\r\n <ng-container *ngIf=\"question.defaultOptionsList?.length\">\r\n <ng-container *ngFor=\"let option of question.defaultOptionsList; trackBy: trackByOptionId\">\r\n\r\n <ng-container *ngIf=\"isOptionSelected(formGroup, question, option.options?.id)\">\r\n\r\n <!-- REMARKS FIELD -->\r\n <div class=\"mt-3\"\r\n *ngIf=\"option.remarksRequired && formGroup.get(question.id + '_remarks_' + option.id) as remarksControl\">\r\n <p class=\"assessment-text-regular-15 mb-2\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMARKS']}}</p>\r\n <textarea *ngIf=\"!previewMode\" formControlName=\"{{question.id}}_remarks_{{option.id}}\"\r\n rows=\"2\" [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.REMARKS']\"\r\n [ngClass]=\"remarksControl.invalid && remarksControl.touched ? 'assessment-input-border-invalid' : ''\"\r\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one\"></textarea>\r\n <ng-container *ngIf=\"previewMode\">\r\n <span class=\"assessment-text-regular-13 assessment-text-grey-nine\">\r\n {{ remarksControl.value }}</span>\r\n </ng-container>\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"remarksControl.invalid && remarksControl.touched\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.FIELD_REQUIRED']}}\r\n </div>\r\n </div>\r\n\r\n <!-- CHILD QUESTIONS RECURSION -->\r\n <div class=\"col-12 mt-4 d-flex flex-column gap-3\" *ngIf=\"option.childQuestionList?.length\">\r\n <ng-container *ngFor=\"let childId of option.childQuestionList; let childIndex = index; trackBy: trackByChildId\">\r\n <ng-container *ngTemplateOutlet=\"questionTemplate; context: {\r\n questionId: childId,\r\n isMandatory: questionBank[childId]?.isMandatory,\r\n groupIndex: groupIndex,\r\n parentOptionId: option.id,\r\n parentQuestionId: question.id,\r\n sequence: sequence + '.' + (childIndex + 1)\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- answer field template -->\r\n<ng-template #answerField let-question=\"question\" let-previewMode=\"previewMode\" let-isMandatory=\"isMandatory\"\r\n let-groupIndex=\"groupIndex\" let-parentOptionId=\"parentOptionId\" let-parentQuestionId=\"parentQuestionId\">\r\n <div *ngIf=\"sectionFormGroups[groupIndex].formGroup\" [formGroup]=\"sectionFormGroups[groupIndex].formGroup\"\r\n class=\"col-12\">\r\n <ng-container [ngSwitch]=\"question.questionType?.code\">\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_SHORT'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_LONG'\">\r\n <lib-question-type-long [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-long>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_RICH_TEXT'\">\r\n <lib-question-type-editor [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-editor>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.OBJECTIVE'\">\r\n <lib-question-type-objective [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [showCorrectAnswers]=\"showCorrectAnswers\" [imageConfig]=\"imageConfig\"\r\n [answerObj]=\"getQuestionAnswerObj(question.id!, parentOptionId, parentQuestionId)\"></lib-question-type-objective>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.MULTI_SELECT'\">\r\n <lib-question-type-multiselect [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [showCorrectAnswers]=\"showCorrectAnswers\" [imageConfig]=\"imageConfig\"\r\n [answerObj]=\"getQuestionAnswerObj(question.id!, parentOptionId, parentQuestionId)\"></lib-question-type-multiselect>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.PREFERENCE'\">\r\n <lib-question-type-preference [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\"></lib-question-type-preference>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.NUMBER'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.EMAIL'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.CONTACT_NUMBER'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.URL'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.FILE_UPLOAD'\">\r\n <lib-question-type-file-upload [question]=\"question\" [assessmentInstanceId]=\"assessmentInstanceId\"\r\n [formControlName]=\"question.id!\" [required]=\"isMandatory\" [labelConfig]=\"labelConfig\"\r\n [imageConfig]=\"imageConfig\" (snackbarMessage)=\"snackbarMessage.emit($event)\"></lib-question-type-file-upload>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.DATE_PICKER'\">\r\n <lib-question-type-date-picker [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-date-picker>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Error Messages and Character Count Container -->\r\n <ng-container\r\n *ngIf=\"!previewMode && sectionFormGroups[groupIndex].formGroup.get(question.id?.toString() || '') as control\">\r\n <div class=\"d-flex justify-content-between align-items-start mt-1\">\r\n <span>\r\n <div class=\"assessment-text-regular-12 assessment-text-danger\"\r\n *ngIf=\"control.touched && control.errors?.['required']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED_RESPONSE']}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['pattern']\">\r\n {{question?.validationMessage || labelConfig['COMMONS_ASSESSMENT.ERROR.INVALID_FORMAT']}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['privateGdriveLink']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.PRIVATE_DRIVE_LINK']}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['minlength']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MIN_CHARS']?.replace('{{length}}',\r\n control.errors?.['minlength'].requiredLength + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxlength']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_CHARS']?.replace('{{length}}',\r\n control.errors?.['maxlength'].requiredLength + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['minOptions']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MIN_OPTIONS']?.replace('{{count}}',\r\n control.errors?.['minOptions'].required + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxOptions']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_OPTIONS']?.replace('{{count}}',\r\n control.errors?.['maxOptions'].required + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxFiles']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_FILES']?.replace('{{count}}',\r\n control.errors?.['maxFiles'].required + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxFileSize']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_FILE_SIZE']?.replace('{{size}}',\r\n control.errors?.['maxFileSize'].requiredSize + '')}}\r\n </div>\r\n </span>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-grey-seven white-space-nowrap ms-2\"\r\n *ngIf=\"getMaxCharCount(question) > 0\">\r\n {{ getRemainingChars(question, control) }}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTER']}}{{getRemainingChars(question, control) !==\r\n 1\r\n ? 's' : ''}} {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMAINING']}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Reusable Section Form Template -->\r\n<ng-template #sectionContent let-section=\"section\" let-i=\"i\">\r\n <form class=\"w-100\" *ngIf=\"sectionFormGroups[i].formGroup\" [formGroup]=\"sectionFormGroups[i].formGroup\"\r\n [name]=\"'sectionfrm-' + i\" novalidate>\r\n <div class=\"d-flex justify-content-between align-items-center mb-4\"\r\n *ngIf=\"!previewMode && (section?.qpsDesc?.[0]?.text || section?.mediaUrl)\">\r\n <span class=\"assessment-text-semibold-14 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.TOTAL_QUESTIONS']}}: {{ section?.totalQuestions || 0 }}\r\n </span>\r\n <button (click)=\"openInstructionsDialog(section)\"\r\n class=\"assessment-zoom-animation assessment-button-padding assessment-text-medium-13 assessment-btn-primary-transparent\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.VIEW_INSTRUCTIONS']}}\r\n </button>\r\n </div>\r\n\r\n <div class=\"col-12 d-flex flex-column gap-3\">\r\n <ng-container *ngFor=\"let sq of section.sectionQuestionsList | orderBy; let j = index; trackBy: trackBySectionQuestion\">\r\n <ng-container *ngTemplateOutlet=\"questionTemplate; context: {\r\n questionId: sq.questionId,\r\n isMandatory: questionBank[sq.questionId]?.isMandatory,\r\n groupIndex: i,\r\n parentOptionId: null,\r\n parentQuestionId: null,\r\n sequence: j + 1\r\n }\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </form>\r\n</ng-template>\r\n\r\n<!-- video preview -->\r\n<ng-template let-videoUrl=\"videoUrl\" #VideoTemplate>\r\n <div class=\"assessment-border-radius-two overflow-hidden col-md-10 col-12\">\r\n <video *ngIf=\"videoUrl?.includes('.mp4') else youtubeVideo\" width=\"400\" controls class=\"mw-100 d-block mx-auto\">\r\n <source [src]=\"videoUrl\" type=\"video/mp4\">\r\n </video>\r\n <ng-template #youtubeVideo>\r\n <div class=\"youtube-video position-relative h-100\">\r\n <iframe [src]=\"addYoutubeIframeSrc(videoUrl)\" title=\"YouTube video player\" frameborder=\"0\"\r\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\r\n allowfullscreen class=\"position-absolute top-0 start-0 w-100 h-100 d-block\">\r\n </iframe>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ng-template>", styles: ["@charset \"UTF-8\";.assessment-text-grey-ten{color:var(--assessment-grey-ten)!important}.assessment-bg-grey-ten{background-color:var(--assessment-grey-ten)!important}.assessment-text-grey-nine{color:var(--assessment-grey-nine)!important}.assessment-bg-grey-nine{background-color:var(--assessment-grey-nine)!important}.assessment-text-grey-eight{color:var(--assessment-grey-eight)!important}.assessment-bg-grey-eight{background-color:var(--assessment-grey-eight)!important}.assessment-text-grey-seven{color:var(--assessment-grey-seven)!important}.assessment-bg-grey-seven{background-color:var(--assessment-grey-seven)!important}.assessment-text-grey-six{color:var(--assessment-grey-six)!important}.assessment-bg-grey-six{background-color:var(--assessment-grey-six)!important}.assessment-text-grey-five{color:var(--assessment-grey-five)!important}.assessment-bg-grey-five{background-color:var(--assessment-grey-five)!important}.assessment-text-grey-four{color:var(--assessment-grey-four)!important}.assessment-bg-grey-four{background-color:var(--assessment-grey-four)!important}.assessment-text-grey-three{color:var(--assessment-grey-three)!important}.assessment-bg-grey-three{background-color:var(--assessment-grey-three)!important}.assessment-text-grey-two{color:var(--assessment-grey-two)!important}.assessment-bg-grey-two{background-color:var(--assessment-grey-two)!important}.assessment-text-grey-one{color:var(--assessment-grey-one)!important}.assessment-bg-grey-one{background-color:var(--assessment-grey-one)!important}.assessment-text-white{color:var(--assessment-white)!important}.assessment-bg-white{background-color:var(--assessment-white)!important}.assessment-text-black{color:var(--assessment-black)!important}.assessment-bg-black{background-color:var(--assessment-black)!important}.assessment-text-danger{color:var(--assessment-danger)!important}.assessment-bg-danger{background-color:var(--assessment-danger)!important}.assessment-text-danger-bg{color:var(--assessment-danger-bg)!important}.assessment-bg-danger-bg{background-color:var(--assessment-danger-bg)!important}.assessment-text-success{color:var(--assessment-success)!important}.assessment-bg-success{background-color:var(--assessment-success)!important}.assessment-text-success-bg{color:var(--assessment-success-bg)!important}.assessment-bg-success-bg{background-color:var(--assessment-success-bg)!important}.assessment-text-warning{color:var(--assessment-warning)!important}.assessment-bg-warning{background-color:var(--assessment-warning)!important}.assessment-text-warning-bg{color:var(--assessment-warning-bg)!important}.assessment-bg-warning-bg{background-color:var(--assessment-warning-bg)!important}.assessment-text-primary-one{color:var(--assessment-primary-one)!important}.assessment-bg-primary-one{background-color:var(--assessment-primary-one)!important}.assessment-text-primary-four{color:var(--assessment-primary-four)!important}.assessment-bg-primary-four{background-color:var(--assessment-primary-four)!important}.assessment-text-palette-EDF3FD{color:var(--assessment-palette-EDF3FD)!important}.assessment-bg-palette-EDF3FD{background-color:var(--assessment-palette-EDF3FD)!important}.assessment-text-palette-C8DAF9{color:var(--assessment-palette-C8DAF9)!important}.assessment-bg-palette-C8DAF9{background-color:var(--assessment-palette-C8DAF9)!important}.assessment-text-palette-ADC9F6{color:var(--assessment-palette-ADC9F6)!important}.assessment-bg-palette-ADC9F6{background-color:var(--assessment-palette-ADC9F6)!important}.assessment-text-palette-FEF9F1{color:var(--assessment-palette-FEF9F1)!important}.assessment-bg-palette-FEF9F1{background-color:var(--assessment-palette-FEF9F1)!important}.assessment-text-palette-F9DAA6{color:var(--assessment-palette-F9DAA6)!important}.assessment-bg-palette-F9DAA6{background-color:var(--assessment-palette-F9DAA6)!important}.assessment-text-palette-E8F7F0{color:var(--assessment-palette-E8F7F0)!important}.assessment-bg-palette-E8F7F0{background-color:var(--assessment-palette-E8F7F0)!important}.assessment-text-palette-B7E7CF{color:var(--assessment-palette-B7E7CF)!important}.assessment-bg-palette-B7E7CF{background-color:var(--assessment-palette-B7E7CF)!important}.assessment-text-palette-FEF1E8{color:var(--assessment-palette-FEF1E8)!important}.assessment-bg-palette-FEF1E8{background-color:var(--assessment-palette-FEF1E8)!important}.assessment-text-palette-FAD2B9{color:var(--assessment-palette-FAD2B9)!important}.assessment-bg-palette-FAD2B9{background-color:var(--assessment-palette-FAD2B9)!important}.assessment-box-shadow-one{box-shadow:var(--assessment-box-shadow-one)!important}.assessment-border-radius-one{border-radius:var(--assessment-border-radius-one)!important}.assessment-border-radius-two{border-radius:var(--assessment-border-radius-two)!important}.assessment-border-radius-three{border-radius:var(--assessment-border-radius-three)!important}.assessment-border-radius-four{border-radius:var(--assessment-border-radius-four)!important}.assessment-border-radius-five{border-radius:var(--assessment-border-radius-five)!important}.assessment-border-radius-six{border-radius:var(--assessment-border-radius-six)!important}.assessment-input-border-one{border:var(--assessment-input-border-one)!important}.assessment-input-border-invalid{border:var(--assessment-input-border-invalid)!important}.assessment-input-focus-border{border:var(--assessment-input-focus-border)!important}.assessment-border-two{border:var(--assessment-border-two)!important}.assessment-card-border{border:var(--assessment-card-border)!important}.assessment-tooltip-border{border:var(--assessment-tooltip-border)!important}.assessment-box-shadow-tooltip{box-shadow:var(--assessment-box-shadow-tooltip)!important}.assessment-input-focus-box-shadow{box-shadow:var(--assessment-input-focus-box-shadow)!important}.assessment-button-padding{padding:var(--assessment-button-padding)!important}.assessment-button-padding-large{padding:var(--assessment-button-padding-large)!important}.assessment-input-padding{padding:var(--assessment-input-padding)!important}.assessment-text-font-family{color:var(--assessment-font-family)!important}.assessment-bg-font-family{background-color:var(--assessment-font-family)!important}.assessment-text-regular-12{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-semibold-12{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-medium-11{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-10{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.42rem + .2vw);line-height:calc(.72rem + .2vw)}.assessment-text-regular-11{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-12{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-regular-13{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-semibold-13{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-13{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-14{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw)!important;line-height:calc(1.2rem + .2vw)!important}.assessment-text-semibold-14{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-regular-15{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.4rem + .1vw)}.assessment-text-medium-15{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-15{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-16{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-16{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-18{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}.assessment-text-semibold-18{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}@media (min-height: 100vw) and (orientation: portrait){.assessment-text-medium-18,.assessment-text-semibold-18{font-size:calc(1rem + .1vh)!important;line-height:calc(1.6rem + .1vh)!important}.assessment-text-medium-16,.assessment-text-semibold-16{font-size:calc(.9rem + .2vh)!important;line-height:calc(1.4rem + .2vh)!important}.assessment-text-regular-15,.assessment-text-semibold-15{font-size:calc(.8rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-15{font-size:calc(.82rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-12,.assessment-text-regular-12,.assessment-text-semibold-12{font-size:calc(.5rem + .4vh);line-height:calc(.8rem + .4vh)}.assessment-text-medium-14,.assessment-text-semibold-14{font-size:calc(.8rem + .1vh)!important;line-height:calc(1.2rem + .2vh)!important}.assessment-text-regular-13,.assessment-text-medium-13,.assessment-text-semibold-13{font-size:calc(.7rem + .2vh)!important;line-height:calc(1rem + .3vh)!important}.assessment-text-regular-11,.assessment-text-medium-11{font-size:calc(.5rem + .2vh)!important;line-height:calc(.8rem + .2vh)!important}.assessment-text-medium-10{font-size:calc(.45rem + .2vh)!important;line-height:calc(.72rem + .2vh)!important}}.assessment-btn-primary{background-color:var(--assessment-primary-one);color:var(--assessment-white);border:.064rem solid var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two)}.assessment-btn-primary-transparent{background-color:var(--assessment-white);color:var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two);border:.064rem solid var(--assessment-primary-one)}.assessment-zoom-animation{transition:transform .2s ease;transform:translateZ(0);text-rendering:optimizeLegibility}.assessment-zoom-animation:hover{transform:scale(1.03)}.assessment-zoom-animation:active{transform:scale(1)}.assessment-zoom-animation:disabled{transform:none!important}.change-direction{transform:rotate(180deg);transition:.3s ease-out}.change-direction-reverse{transform:rotate(0);transition:.3s ease-out}.outline-0{outline:none}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.action-icon{width:1.2rem}.mat-menu-item,.mat-mdc-menu-item{height:inherit;min-height:unset;--mat-menu-item-label-text-font: var(--assessment-font-family) !important;--mat-menu-item-label-text-size: 14px !important;--mat-menu-item-label-text-weight: 600 !important;--mat-menu-item-label-text-line-height: inherit !important}.skill-chip{width:-moz-fit-content;width:fit-content;background:var(--assessment-palette-EDF3FD);border:.064rem solid var(--assessment-palette-C8DAF9)}.assessment-form-check-input-primary-one{min-height:unset}.assessment-form-check-input-primary-one .form-check-input{width:1rem;height:1rem}.assessment-form-check-input-primary-one .form-check-input:checked{background-color:var(--assessment-primary-one);color:var(--assessment-primary-one)}.assessment-form-check-input-primary-one .form-check-input:disabled{opacity:.8}.form-check-input:checked{background-color:var(--assessment-primary-one);border-color:var(--assessment-primary-one)}.form-check-input:focus{border-color:var(--assessment-primary-one);box-shadow:none}.height-without-footer{height:calc(100% - 4.4rem)!important}.z-index-1{z-index:1}.question-info{min-width:15rem;max-width:40vw}@media screen and (max-width: 768px){.question-info{max-width:75vw}}.assessment-marks-field{min-width:6.5rem;width:6.5rem}.youtube-video{aspect-ratio:16/9}.assessment-panel-header{padding-top:.7rem;padding-bottom:.7rem}.timer-container{border:.064rem solid var(--assessment-palette-FAD2B9)}.info-icon{width:1.2rem}\n"], components: [{ type: i7.ProctoringConsentComponent, selector: "lib-proctoring-consent", inputs: ["labelConfig", "proctoringEnabled", "requireCapture", "sectionCount", "questionCount", "durationSeconds", "confirmAction"], outputs: ["proceeded"] }, { type: i8.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i8.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby"], exportAs: ["matTab"] }, { type: i9.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { type: i9.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { type: i10.MatSpinner, selector: "mat-spinner", inputs: ["color"] }, { type: i11.QuestionTypeShortComponent, selector: "lib-question-type-short", inputs: ["required", "question", "previewMode", "labelConfig"] }, { type: i12.QuestionTypeLongComponent, selector: "lib-question-type-long", inputs: ["required", "question", "previewMode", "labelConfig"] }, { type: i13.QuestionTypeEditorComponent, selector: "lib-question-type-editor", inputs: ["required", "question", "previewMode", "labelConfig"] }, { type: i14.QuestionTypeObjectiveComponent, selector: "lib-question-type-objective", inputs: ["required", "question", "showCorrectAnswers", "imageConfig", "answerObj"], outputs: ["viewChild"] }, { type: i15.QuestionTypeMultiselectComponent, selector: "lib-question-type-multiselect", inputs: ["required", "question", "showCorrectAnswers", "imageConfig", "answerObj"], outputs: ["viewChild"] }, { type: i16.QuestionTypePreferenceComponent, selector: "lib-question-type-preference", inputs: ["required", "question"], outputs: ["viewChild"] }, { type: i17.QuestionTypeFileUploadComponent, selector: "lib-question-type-file-upload", inputs: ["required", "assessmentInstanceId", "question", "labelConfig", "imageConfig"], outputs: ["snackbarMessage"] }, { type: i18.QuestionTypeDatePickerComponent, selector: "lib-question-type-date-picker", inputs: ["required", "question", "previewMode", "labelConfig"] }], directives: [{ type: i19.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i19.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i19.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { type: i19.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i9.MatAccordion, selector: "mat-accordion", inputs: ["multi", "displayMode", "togglePosition", "hideToggle"], exportAs: ["matAccordion"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i20.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { type: i20.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayPositions", "cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayTransformOriginOn"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i19.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i19.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }], pipes: { "orderBy": i21.OrderByPipe } });
1095
1100
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AssessmentTakerComponent, decorators: [{
1096
1101
  type: Component,
1097
1102
  args: [{
@@ -1159,4 +1164,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
1159
1164
  type: HostListener,
1160
1165
  args: ['window:popstate']
1161
1166
  }] } });
1162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtdGFrZXIvYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtdGFrZXIvYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFnQyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0gsT0FBTyxFQUFFLFFBQVEsRUFBYyxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQWUsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSWpGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBS2hILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQy9HLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQ3hILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBRXZHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRakQsTUFBTSxPQUFPLHdCQUF3QjtJQTRJbkMsWUFDVSxzQkFBOEMsRUFDOUMsRUFBZSxFQUNmLHNC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QXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkEwQ1AsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWU7Z0JBVzdCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxxQkFBcUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFjL0MsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIE9uRGVzdHJveSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFwLCBjYXRjaEVycm9yLCBzd2l0Y2hNYXAsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50VGFrZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9hc3Nlc3NtZW50LXRha2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXNwb25zZUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9yZXNwb25zZS1idWlsZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZWN0aW9uSW5zdHJ1Y3Rpb25zQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NlY3Rpb24taW5zdHJ1Y3Rpb25zL3NlY3Rpb24taW5zdHJ1Y3Rpb25zLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFzc2Vzc2VlRFRPLCBBc3Nlc3NvckRUTywgQXNzZXNzbWVudCwgQXNzZXNzbWVudEluc3RhbmNlQXNzZXNzZURUTywgQXNzZXNzbWVudFN0ZXAsIEFzc2Vzc21lbnRDb250ZXh0RFRPLCBTZWN0aW9uU2NvcmUsIFNraWxsU2NvcmUsIEF0dGFjaG1lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9hc3Nlc3NtZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFByb2N0b3JpbmdTZXNzaW9uIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMvcHJvY3RvcmluZy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50UXVlc3Rpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9xdWVzdGlvbi5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50UXVlc3Rpb25QYXBlciwgUXVlc3Rpb25QYXBlclNlY3Rpb24sIFNlY3Rpb25RdWVzdGlvbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLXBhcGVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFNraWxsQWxsb2NhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL3NraWxsLWFsbG9jYXRpb24vc2tpbGwtYWxsb2NhdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvY29tcG9uZW50cy9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUHJvY3RvcmluZ1Jlc3VsdENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wcm9jdG9yaW5nLXJlc3VsdC9wcm9jdG9yaW5nLXJlc3VsdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQcm9jdG9yaW5nU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcHJvY3RvcmluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgc29ydEJ5T3JkZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYXNzZXNzbWVudC10YWtlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Fzc2Vzc21lbnQtdGFrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Fzc2Vzc21lbnQtdGFrZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEFzc2Vzc21lbnRUYWtlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBsYWJlbENvbmZpZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG4gIEBJbnB1dCgpIGltYWdlQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgQElucHV0KCkgc2hvd0Zvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGFzc2Vzc21lbnRJZCE6IG51bWJlcjtcclxuICBASW5wdXQoKSBhc3Nlc3NtZW50SW5zdGFuY2VJZCE6IG51bWJlcjtcclxuICBASW5wdXQoKSBhc3Nlc3NlZURhdGE6IEFzc2Vzc2VlRFRPID0geyBpZDogMCwgYWN0b3JJZDogMCwgYWN0b3JUeXBlOiAnVVNFUicgfTtcclxuICBASW5wdXQoKSBhc3Nlc3NvckRhdGE6IEFzc2Vzc29yRFRPID0geyBpZDogMCwgYWN0b3JJZDogMCwgYWN0b3JUeXBlOiAnVVNFUicgfTtcclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHByZXZpZXdNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdmVydGljYWxWaWV3OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZW5hYmxlTWFya3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBoaWRlU2VjdGlvblRhYnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBhc3Nlc3NtZW50Q29udGV4dCE6IEFzc2Vzc21lbnRDb250ZXh0RFRPO1xyXG4gIEBJbnB1dCgpIGFzc2Vzc2VlUmVzcG9uc2U6IEFzc2Vzc21lbnRJbnN0YW5jZUFzc2Vzc2VEVE8gPSB7fTtcclxuICBASW5wdXQoKSBtYXJrQXNDb21wbGV0ZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNlY3Rpb25XaXNlU2NvcmU6IHsgW3NlY3Rpb25JZDogbnVtYmVyXTogU2VjdGlvblNjb3JlIH0gPSB7fTtcclxuICBASW5wdXQoKSBzaG93T3ZlcmFsbFJlbWFya3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93Q29ycmVjdEFuc3dlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSByZXN1bWVUaW1lckFjcm9zc1Zpc2l0czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHdhcm5PbkxlYXZlRHVyaW5nUHJvY3RvcmluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgcHJvY3RvckxpbmtMb2FkZXI/OiAoKSA9PiBQcm9taXNlPGFueT47XHJcblxyXG4gIEBPdXRwdXQoKSBzbmFja2Jhck1lc3NhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbWVzc2FnZTogc3RyaW5nLCB0eXBlOiAnc3VjY2VzcycgfCAnZXJyb3InIHwgJ2luZm8nIH0+KCk7XHJcbiAgQE91dHB1dCgpIHN1Ym1pdEFzc2Vzc21lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgc3RlcENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEFzc2Vzc21lbnRTdGVwPigpO1xyXG4gIEBPdXRwdXQoKSBjb25zZW50VG9Qcm9jZWVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBzaG93TG9hZGVyOiBib29sZWFuID0gdHJ1ZTtcclxuICBpbnRyb0FjdGl2ZSA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcHJvY3RvcmluZ1Nlc3Npb25TdGFydGVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBwcm9jdG9yaW5nU2Vzc2lvbkVuZGVkID0gZmFsc2U7XHJcbiAgcXVlc3Rpb25CYW5rOiBSZWNvcmQ8bnVtYmVyLCBBc3Nlc3NtZW50UXVlc3Rpb24+ID0ge307XHJcbiAgYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhOiBBc3Nlc3NtZW50UXVlc3Rpb25QYXBlciA9IHt9O1xyXG4gIGFzc2Vzc21lbnREYXRhOiBBc3Nlc3NtZW50ID0ge307XHJcbiAgY29uZmlnc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRpbWVySW50ZXJ2YWw6IGFueSA9IG51bGw7XHJcbiAgcmVtYWluaW5nVGltZTogbnVtYmVyID0gMDtcclxuICBkaXNwbGF5VGltZTogc3RyaW5nID0gJzAwOjAwJztcclxuICB0aW1lRXhwaXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzQXV0b1N1Ym1pdHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1N1Ym1pdHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZWN0aW9uRm9ybUdyb3VwczogeyBzZWN0aW9uSWQ6IG51bWJlcjsgZm9ybUdyb3VwOiBGb3JtR3JvdXAgfVtdID0gW107XHJcbiAgb3ZlcmFsbE5vdGVzQ3RybCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XHJcbiAgZXhwYW5kZWRTdGF0ZTogYm9vbGVhbltdID0gW107XHJcbiAgcHJpdmF0ZSB5b3V0dWJlVXJsQ2FjaGU6IHsgW3VybDogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICBwcml2YXRlIG5ld0Fzc2Vzc2VlU2Vzc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgYmFja0d1YXJkQXJtZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIGFsbG93QmFja05hdmlnYXRpb24gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRUYWJJbmRleDogbnVtYmVyID0gMDtcclxuICBnZXQgc2VsZWN0ZWRUYWJJbmRleCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkVGFiSW5kZXg7XHJcbiAgfVxyXG4gIHNldCBzZWxlY3RlZFRhYkluZGV4KHZhbHVlOiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl9zZWxlY3RlZFRhYkluZGV4ICE9PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZFRhYkluZGV4ID0gdmFsdWU7XHJcbiAgICAgIHRoaXMuZW1pdFN0ZXBEZXRhaWxzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWN0aW9uRXJyb3JzOiBib29sZWFuW10gPSBbXTtcclxuICB0ZW5hbnRJZDogbnVtYmVyID0gMDtcclxuICB0b29sdGlwU3RhdGU6IFJlY29yZDxudW1iZXIsIGJvb2xlYW4+ID0ge307XHJcblxyXG4gIGlzTW9iaWxlID0gd2luZG93LmlubmVyV2lkdGggPCA3Njg7XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxyXG4gIG9uUmVzaXplKCkge1xyXG4gICAgdGhpcy5pc01vYmlsZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hpbGUgYSBwcm9jdG9yaW5nIHNlc3Npb24gaXMgcnVubmluZywgd2FybiB0aGUgY2FuZGlkYXRlIGJlZm9yZSB0aGV5IHJlZnJlc2gsIGNsb3NlIHRoZSB0YWIsIG9yXHJcbiAgICogbmF2aWdhdGUgYXdheS4gQnJvd3NlcnMgc2hvdyB0aGVpciBvd24gZ2VuZXJpYyBcIkxlYXZlIHNpdGU/XCIgY29uZmlybWF0aW9uIGhlcmUg4oCUIHRoZSBtZXNzYWdlIHRleHRcclxuICAgKiBjYW5ub3QgYmUgY3VzdG9taXplZCBmb3Igc2VjdXJpdHkgcmVhc29ucyDigJQgc28gdGhpcyBvbmx5IGd1YXJhbnRlZXMgYSBwcm9tcHQsIG5vdCBvdXIgd29yZGluZy5cclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6YmVmb3JldW5sb2FkJywgWyckZXZlbnQnXSlcclxuICBvbkJlZm9yZVVubG9hZChldmVudDogQmVmb3JlVW5sb2FkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLndhcm5PbkxlYXZlRHVyaW5nUHJvY3RvcmluZyAmJiB0aGlzLmlzUHJvY3RvcmluZ1J1bm5pbmcoKSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBldmVudC5yZXR1cm5WYWx1ZSA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW4tYXBwIEJhY2sgYnV0dG9uIChTUEEgcG9wc3RhdGUg4oCUIG5vdCBjYXVnaHQgYnkgYmVmb3JldW5sb2FkKS4gV2hpbGUgcHJvY3RvcmluZyBydW5zIHdlIGtlZXAgYVxyXG4gICAqIHNlbnRpbmVsIGhpc3RvcnkgZW50cnk7IHdoZW4gQmFjayBwb3BzIGl0IHdlIHNob3cgYSBjdXN0b20gd2FybmluZyBhbmQgZWl0aGVyIHJlLWFybSAoc3RheSkgb3JcclxuICAgKiBwcm9jZWVkIHdpdGggdGhlIG5hdmlnYXRpb24gKGxlYXZlKS5cclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cG9wc3RhdGUnKVxyXG4gIG9uUG9wU3RhdGUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hbGxvd0JhY2tOYXZpZ2F0aW9uKSB7XHJcbiAgICAgIC8vIHRoaXMgcG9wc3RhdGUgaXMgdGhlIG5hdmlnYXRpb24gd2UganVzdCBhcHByb3ZlZCDigJQgbGV0IGl0IHRocm91Z2ggb25jZVxyXG4gICAgICB0aGlzLmFsbG93QmFja05hdmlnYXRpb24gPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmJhY2tHdWFyZEFybWVkIHx8ICF0aGlzLmlzUHJvY3RvcmluZ1J1bm5pbmcoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbmZpcm1MZWF2ZUFzc2Vzc21lbnQoKS5zdWJzY3JpYmUoKGNvbmZpcm1lZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICBpZiAoY29uZmlybWVkKSB7XHJcbiAgICAgICAgdGhpcy5hbGxvd0JhY2tOYXZpZ2F0aW9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmJhY2tHdWFyZEFybWVkID0gZmFsc2U7XHJcbiAgICAgICAgaGlzdG9yeS5iYWNrKCk7IC8vIHByb2NlZWQgdG8gdGhlIGFjdHVhbCBwcmV2aW91cyBwYWdlXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gc3RheSBvbiB0aGUgYXNzZXNzbWVudCDigJQgcmUtYXJtIHRoZSBzZW50aW5lbCBlbnRyeVxyXG4gICAgICAgIGhpc3RvcnkucHVzaFN0YXRlKG51bGwsICcnLCBsb2NhdGlvbi5ocmVmKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzUHJvY3RvcmluZ1J1bm5pbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9jdG9yaW5nU2Vzc2lvblN0YXJ0ZWQgJiYgIXRoaXMucHJvY3RvcmluZ1Nlc3Npb25FbmRlZDtcclxuICB9XHJcblxyXG4gIC8qKiBQdXNoZXMgYSBzZW50aW5lbCBoaXN0b3J5IGVudHJ5IHNvIHRoZSBuZXh0IGluLWFwcCBCYWNrIHByZXNzIHRyaWdnZXJzIG91ciBndWFyZC4gKi9cclxuICBwcml2YXRlIGFybUJhY2tHdWFyZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmJhY2tHdWFyZEFybWVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYmFja0d1YXJkQXJtZWQgPSB0cnVlO1xyXG4gICAgaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgJycsIGxvY2F0aW9uLmhyZWYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25maXJtTGVhdmVBc3Nlc3NtZW50KCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgIG1heFdpZHRoOiAnOTUlJyxcclxuICAgICAgd2lkdGg6ICczMnJlbScsXHJcbiAgICAgIHBhbmVsQ2xhc3M6IFsnYXNzZXNzbWVudC1kaWFsb2cnXSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5MRUFWRV9XQVJOSU5HX1RJVExFJ10sXHJcbiAgICAgICAgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuTEVBVkVfV0FSTklOR19NRVNTQUdFJ10sXHJcbiAgICAgICAgY29uZmlybUxhYmVsOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuUFJPQ0VFRCddLFxyXG4gICAgICAgIGNhbmNlbExhYmVsOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ0FOQ0VMJ11cclxuICAgICAgfVxyXG4gICAgfSkuYWZ0ZXJDbG9zZWQoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhc3Nlc3NtZW50VGFrZXJTZXJ2aWNlOiBBc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIHJlc3BvbnNlQnVpbGRlclNlcnZpY2U6IFJlc3BvbnNlQnVpbGRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgcHJvY3RvcmluZ1NlcnZpY2U6IFByb2N0b3JpbmdTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldENvbmZpZ3NGcm9tSlNPTigpO1xyXG5cclxuICAgIGlmICh0aGlzLnByZXZpZXdNb2RlIHx8IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uYXNzZXNzbWVudFRha2VuPy5jb2RlID09PSAnQVNTRVNTTUVOVF9UQUtFTi5DT01QTEVURScpIHtcclxuICAgICAgdGhpcy5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXNzZXNzbWVudENvbnRleHQpIHtcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZCA9IHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnRJbnN0YW5jZURUTz8uaWQgPz8gdGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZDtcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50SWQgPSB0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50Py5pZCA/PyB0aGlzLmFzc2Vzc21lbnRJZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZCkge1xyXG4gICAgICB0aGlzLmxvYWRBc3Nlc3NtZW50RGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50aW1lckludGVydmFsKSB7XHJcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lckludGVydmFsKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzUHJvY3RvcmluZ1J1bm5pbmcoKSkge1xyXG4gICAgICB0aGlzLnByb2N0b3JpbmdTZXJ2aWNlLmRlc3Ryb3koeyBlbmRTZXNzaW9uOiBmYWxzZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVuZHMgdGhlIHByb2N0b3Jpbmcgc2Vzc2lvbiBhZnRlciB0aGUgYXNzZXNzbWVudCBpcyBzdWJtaXR0ZWQ6IHN0b3BzICsgZGVzdHJveXMgdGhlIFByb2N0b3JMaW5rXHJcbiAgICogU0RLIGFuZCBub3RpZmllcyB0aGUgYmFja2VuZCB0byBlbmQgdGhlIHNlc3Npb24uIE9ubHkgZW5kcyBhIHNlc3Npb24gdGhhdCBhY3R1YWxseSBzdGFydGVkLCBhbmRcclxuICAgKiBpcyBndWFyZGVkIHNvIHRoZSBiYWNrZW5kIGlzIGNhbGxlZCBhdCBtb3N0IG9uY2UuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBlbmRQcm9jdG9yaW5nU2Vzc2lvbigpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvY3RvcmluZ1NlcnZpY2Uuc3RvcCgpO1xyXG4gICAgdGhpcy5wcm9jdG9yaW5nU2VydmljZS5kZXN0cm95KCk7XHJcbiAgICBpZiAoIXRoaXMucHJvY3RvcmluZ1Nlc3Npb25TdGFydGVkIHx8IHRoaXMucHJvY3RvcmluZ1Nlc3Npb25FbmRlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBhc3Nlc3NlZUlkID0gdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5pZCB8fCB0aGlzLmFzc2Vzc2VlRGF0YT8uaWQ7XHJcbiAgICBpZiAoIWFzc2Vzc2VlSWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9jdG9yaW5nU2Vzc2lvbkVuZGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5lbmRQcm9jdG9yaW5nU2Vzc2lvbihhc3Nlc3NlZUlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoKSA9PiB7IC8qIHNlc3Npb24gZW5kZWQgb24gYmFja2VuZCAqLyB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4geyAvKiBiZXN0LWVmZm9ydCB0ZWFyZG93bjsgaWdub3JlICovIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmlnc0Zyb21KU09OKCkge1xyXG4gICAgZm9ya0pvaW4oe1xyXG4gICAgICBsYWJlbENvbmZpZzogdGhpcy5hc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLmdldENvbmZpZ0pTT04oJ2pzb24vbGFiZWxDb25maWcnKSxcclxuICAgICAgaW1hZ2VDb25maWc6IHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5nZXRDb25maWdKU09OKCdqc29uL2ltYWdlQ29uZmlnJylcclxuICAgIH0pLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5sYWJlbENvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHJlcz8ubGFiZWxDb25maWcsIHRoaXMubGFiZWxDb25maWcpO1xyXG4gICAgICB0aGlzLmltYWdlQ29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgcmVzPy5pbWFnZUNvbmZpZywgdGhpcy5pbWFnZUNvbmZpZyk7XHJcblxyXG4gICAgICB0aGlzLmNvbmZpZ3NMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGxvYWRBc3Nlc3NtZW50RGF0YSgpIHtcclxuICAgIGNvbnN0IGFwaUNhbGxzID0ge1xyXG4gICAgICAuLi4oIXRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnQ/LmlkICYmIHtcclxuICAgICAgICBhc3Nlc3NtZW50RGF0YTogdGhpcy5hc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLmdldEFzc2Vzc21lbnRDb250ZXh0QnlJZCh7IGFzc2Vzc21lbnRJZHM6IFt0aGlzLmFzc2Vzc21lbnRJZF0gfSlcclxuICAgICAgfSksXHJcbiAgICAgIC4uLih0aGlzLmFzc2Vzc2VlRGF0YT8uaWQgJiYgIXRoaXMuYXNzZXNzZWVSZXNwb25zZT8uaWQgJiYge1xyXG4gICAgICAgIGFzc2Vzc2VlUmVzcG9uc2U6IHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5nZXRBbnN3ZXJzQnlBaWFJZCh0aGlzLmFzc2Vzc2VlRGF0YS5pZClcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGlmIChPYmplY3Qua2V5cyhhcGlDYWxscykubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3JrSm9pbihhcGlDYWxscykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFzc2Vzc21lbnRDb250ZXh0ID0gZGF0YT8uYXNzZXNzbWVudERhdGE/LlswXSA/PyB0aGlzLmFzc2Vzc21lbnRDb250ZXh0O1xyXG4gICAgICAgICAgdGhpcy5hc3Nlc3NlZVJlc3BvbnNlID0gZGF0YT8uYXNzZXNzZWVSZXNwb25zZSA/PyB0aGlzLmFzc2Vzc2VlUmVzcG9uc2U7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZVJlc3BvbnNlKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBlcnJvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ0dFVCcgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmhhbmRsZVJlc3BvbnNlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVSZXNwb25zZSgpIHtcclxuICAgIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhID0gdGhpcy5hc3Nlc3NtZW50Q29udGV4dD8uYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEVE87XHJcbiAgICB0aGlzLmFzc2Vzc21lbnREYXRhID0gdGhpcy5hc3Nlc3NtZW50Q29udGV4dD8uYXNzZXNzbWVudDtcclxuICAgIHRoaXMucXVlc3Rpb25CYW5rID0gdGhpcy5hc3Nlc3NtZW50Q29udGV4dD8ucXVlc3Rpb25EVE9NYXA7XHJcbiAgICB0aGlzLnRlbmFudElkID0gdGhpcy5hc3Nlc3NtZW50Q29udGV4dD8uYXNzZXNzbWVudD8udGVuYW50SWQgPz8gMDtcclxuXHJcbiAgICBpZiAodGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5pZCkge1xyXG4gICAgICBpZiAodGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5hc3Nlc3NtZW50VGFrZW4/LmNvZGUgPT09ICdBU1NFU1NNRU5UX1RBS0VOLkNPTVBMRVRFJykge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UgPSB7XHJcbiAgICAgICAgaWQ6IDAsXHJcbiAgICAgICAgYXNzZXNzbWVudEluc3RhbmNlOiB7IGlkOiB0aGlzLmFzc2Vzc21lbnRJbnN0YW5jZUlkIH0sXHJcbiAgICAgICAgYXNzZXNzZWU6IHRoaXMuYXNzZXNzZWVEYXRhLFxyXG4gICAgICAgIGFzc2Vzc29yOiB0aGlzLmFzc2Vzc29yRGF0YSxcclxuICAgICAgICBhaWFkZWZhdWx0UmVzcG9uc2VMaXN0OiBbXSxcclxuICAgICAgICB0ZW5hbnQ6IHRoaXMudGVuYW50SWRcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHRoaXMub3ZlcmFsbE5vdGVzQ3RybC5zZXRWYWx1ZSh0aGlzLmFzc2Vzc2VlUmVzcG9uc2Uubm90ZXMgfHwgJycpO1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgJiYgIXRoaXMuc2hvd092ZXJhbGxSZW1hcmtzKSB7XHJcbiAgICAgIHRoaXMub3ZlcmFsbE5vdGVzQ3RybC5kaXNhYmxlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvcm1TZXR1cCgpO1xyXG4gIH1cclxuXHJcbiAgZm9ybVNldHVwKCkge1xyXG4gICAgdGhpcy5zZWN0aW9uRm9ybUdyb3VwcyA9IFtdO1xyXG5cclxuICAgIHNvcnRCeU9yZGVyKHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3QpPy5mb3JFYWNoKChzZWN0aW9uOiBRdWVzdGlvblBhcGVyU2VjdGlvbikgPT4ge1xyXG4gICAgICBjb25zdCBncm91cDogYW55ID0ge307XHJcblxyXG4gICAgICBzb3J0QnlPcmRlcihzZWN0aW9uPy5zZWN0aW9uUXVlc3Rpb25zTGlzdCk/LmZvckVhY2goKHNxOiBTZWN0aW9uUXVlc3Rpb24pID0+IHtcclxuICAgICAgICBjb25zdCBxSWQgPSBzcS5xdWVzdGlvbklkO1xyXG4gICAgICAgIGlmICghcUlkIHx8ICF0aGlzLnF1ZXN0aW9uQmFua1txSWRdKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkJhbmtbcUlkXTtcclxuICAgICAgICB0aGlzLmFkZENvbnRyb2xGb3JRdWVzdGlvbihncm91cCwgcXVlc3Rpb24sIHF1ZXN0aW9uPy5pc01hbmRhdG9yeSk7XHJcblxyXG4gICAgICAgIGlmIChxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgcXVlc3Rpb24uZGVmYXVsdE9wdGlvbnNMaXN0LmZvckVhY2goKG9wdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb24ucmVtYXJrc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgICAgLy8gUHJlLXBvcHVsYXRlIHJlbWFya3MgaWYgd2UgaGF2ZSBhbnN3ZXJzIG1hdGNoaW5nIHRoaXMgb3B0aW9uLlxyXG4gICAgICAgICAgICAgIGxldCByZW1hcmtWYWwgPSBudWxsO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByZWZpbGxlZE9wdGlvbnMgPSB0aGlzLmdldFByZWZpbGxlZEFuc3dlcihxSWQpO1xyXG4gICAgICAgICAgICAgIGlmIChwcmVmaWxsZWRPcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhbnNPYmogPSB0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmFpYWRlZmF1bHRSZXNwb25zZUxpc3Q/LmZpbmQoKGE6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgYS5zZWN0aW9uUXVlc3Rpb24/LnF1ZXN0aW9uSWQgPT09IHFJZCAmJiAoIWEuY2hpbGRRdWVzdGlvbklkIHx8IGEuY2hpbGRRdWVzdGlvbklkID09PSAwKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChhbnNPYmopIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZT8uY29kZSA9PT0gJ1FVRVNUSU9OX1RZUEUuT0JKRUNUSVZFJyAmJiAocHJlZmlsbGVkT3B0aW9ucyA9PT0gKG9wdGlvbi5vcHRpb25zPy5pZCA/PyBvcHRpb24uaWQpIHx8IHByZWZpbGxlZE9wdGlvbnM/LmlkID09PSAob3B0aW9uLm9wdGlvbnM/LmlkID8/IG9wdGlvbi5pZCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtYXJrVmFsID0gYW5zT2JqLnJlbWFya3MgfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHByZWZpbGxlZE9wdGlvbnMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdPYmogPSBhbnNPYmouZHJvYmplY3RpdmVyZXNwb25zZUxpc3Q/LmZpbmQoKHI6IGFueSkgPT4gci5kZWZhdWx0T3B0aW9uPy5vcHRpb25zPy5pZCA9PT0gKG9wdGlvbi5vcHRpb25zPy5pZCA/PyBvcHRpb24uaWQpKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmdPYmopIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlbWFya1ZhbCA9IG1hdGNoaW5nT2JqLnJlbWFya3MgfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHJlbWFya0N0cmwgPSBuZXcgRm9ybUNvbnRyb2wocmVtYXJrVmFsKTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgcmVtYXJrQ3RybC5kaXNhYmxlKCk7XHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBncm91cFtgJHtxSWR9X3JlbWFya3NfJHtvcHRpb24uaWR9YF0gPSByZW1hcmtDdHJsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBvcHRpb24uY2hpbGRRdWVzdGlvbkxpc3Q/LmZvckVhY2goKGNoaWxkSWQ6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkUXVlcyA9IHRoaXMucXVlc3Rpb25CYW5rW2NoaWxkSWRdO1xyXG4gICAgICAgICAgICAgIGlmIChjaGlsZFF1ZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ29udHJvbEZvclF1ZXN0aW9uKGdyb3VwLCBjaGlsZFF1ZXMsIGZhbHNlLCB0cnVlLCBxSWQsIG9wdGlvbi5vcHRpb25zPy5pZCA/PyBvcHRpb24uaWQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZmcgPSB0aGlzLmZiLmdyb3VwKGdyb3VwKTtcclxuXHJcbiAgICAgIHNvcnRCeU9yZGVyKHNlY3Rpb24/LnNlY3Rpb25RdWVzdGlvbnNMaXN0KT8uZm9yRWFjaCgoc3E6IFNlY3Rpb25RdWVzdGlvbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHFJZCA9IHNxLnF1ZXN0aW9uSWQ7XHJcbiAgICAgICAgaWYgKCFxSWQgfHwgIXRoaXMucXVlc3Rpb25CYW5rW3FJZF0pIHJldHVybjtcclxuICAgICAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25CYW5rW3FJZF07XHJcblxyXG4gICAgICAgIGlmIChxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVRdWVzdGlvbkNvbmRpdGlvbmFsQ29udHJvbHMoZmcsIHF1ZXN0aW9uKTtcclxuICAgICAgICAgIGZnLmdldChxSWQ/LnRvU3RyaW5nKCkpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVRdWVzdGlvbkNvbmRpdGlvbmFsQ29udHJvbHMoZmcsIHF1ZXN0aW9uKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLnB1c2goe1xyXG4gICAgICAgIHNlY3Rpb25JZDogc2VjdGlvbi5pZCxcclxuICAgICAgICBmb3JtR3JvdXA6IGZnXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNlY3Rpb25FcnJvcnMucHVzaChmYWxzZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmVtaXRTdGVwRGV0YWlscygpO1xyXG4gICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zdGFydEFzc2Vzc21lbnQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhcnRBc3Nlc3NtZW50KCkge1xyXG4gICAgaWYgKHRoaXMucmVxdWlyZXNTdGFydEdhdGUoKSkge1xyXG4gICAgICAvLyBzaG93IHRoZSBmdWxsLXNjcmVlbiBpbnRybyBnYXRlOyBxdWVzdGlvbnMgc3RheSBoaWRkZW4gdW50aWwgdGhlIGNhbmRpZGF0ZSBwcm9jZWVkc1xyXG4gICAgICB0aGlzLmludHJvQWN0aXZlID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYmVnaW5Bc3Nlc3NtZW50KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNQcm9jdG9yaW5nRW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmFzc2Vzc21lbnREYXRhPy5hc3Nlc3NtZW50Q29uZmlncz8uZmluZChjID0+IGMuY29uZmlnS2V5ID09PSAnYXNzZXNzbWVudC5jb25maWcuaXMtcHJvY3RvcmluZy1lbmFibGVkJyk/LmNvbmZpZ1ZhbHVlID09PSAnMSc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgZnVsbC1zY3JlZW4gaW50cm8gZ2F0ZSBpcyBzaG93biB3aGVuIHByb2N0b3JpbmcgaXMgZW5hYmxlZCwgb3Igd2hlbiBhIHRpbWVkIGFzc2Vzc21lbnQgdHJhY2tzXHJcbiAgICogZWxhcHNlZCB0aW1lIGFjcm9zcyB2aXNpdHMgKHNvIHRoZSBhc3Nlc3NlZSBpcyBjcmVhdGVkIHVwIGZyb250IHRvIGFuY2hvciB0aGUgdGltZXIpLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVxdWlyZXNTdGFydEdhdGUoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB0aW1lZFRyYWNraW5nID0gdGhpcy5yZXN1bWVUaW1lckFjcm9zc1Zpc2l0cyAmJiB0aGlzLmFzc2Vzc21lbnREdXJhdGlvblNlY29uZHMgPiAwO1xyXG4gICAgcmV0dXJuICh0aGlzLmlzUHJvY3RvcmluZ0VuYWJsZWQgfHwgdGltZWRUcmFja2luZykgJiYgIXRoaXMucHJldmlld01vZGUgJiYgIXRoaXMuZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvKiogQSByZWZlcmVuY2UgaW1hZ2UgaXMgY2FwdHVyZWQgb25seSBmb3IgcHJvY3RvcmluZywgYW5kIG9ubHkgb24gdGhlIGZpcnN0IGF0dGVtcHQgKG5vIGFzc2Vzc2VlIGlkIHlldCkuICovXHJcbiAgZ2V0IHJlcXVpcmVSZWZlcmVuY2VDYXB0dXJlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNQcm9jdG9yaW5nRW5hYmxlZCAmJiAhKHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uaWQgfHwgdGhpcy5hc3Nlc3NlZURhdGE/LmlkKTtcclxuICB9XHJcblxyXG4gIGdldCB0b3RhbFNlY3Rpb25Db3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/Lmxlbmd0aCB8fCAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRvdGFsUXVlc3Rpb25Db3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuICh0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0IHx8IFtdKVxyXG4gICAgICAucmVkdWNlKChzdW0sIHNlY3Rpb24pID0+IHN1bSArIChzZWN0aW9uPy5zZWN0aW9uUXVlc3Rpb25zTGlzdD8ubGVuZ3RoIHx8IDApLCAwKTtcclxuICB9XHJcblxyXG4gIGdldCBhc3Nlc3NtZW50RHVyYXRpb25TZWNvbmRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5hc3Nlc3NtZW50Q29udGV4dD8uYXNzZXNzbWVudEluc3RhbmNlRFRPPy5kdXJhdGlvbiB8fCAwO1xyXG4gIH1cclxuXHJcbiAgLy8gYm91bmQgc28gaXQgY2FuIGJlIHBhc3NlZCBhcyBhbiBASW5wdXQgY2FsbGJhY2sgdG8gdGhlIGZ1bGwtc2NyZWVuIGludHJvIGdhdGU7IGNyZWF0ZXMgdGhlXHJcbiAgLy8gYXNzZXNzZWUgKHBhc3NpbmcgdGhlIGNhcHR1cmVkIHJlZmVyZW5jZSBpbWFnZSBmb3IgcHJvY3RvcmluZykgYW5kIHN0YXJ0cyB0aGUgU0RLIHdoZW4gcHJvY3RvcmVkLlxyXG4gIHN0YXJ0U2Vzc2lvbkFjdGlvbiA9IChyZWZlcmVuY2VJbWFnZUJhc2U2NDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+ID0+XHJcbiAgICB0aGlzLnN0YXJ0QXNzZXNzbWVudFNlc3Npb24ocmVmZXJlbmNlSW1hZ2VCYXNlNjQpO1xyXG5cclxuICAvLyBvbmNlIHRoZSBjYW5kaWRhdGUgcHJvY2VlZHMgZnJvbSB0aGUgaW50cm8gZ2F0ZSAoYXNzZXNzZWUgY3JlYXRlZCAvIHNlc3Npb24gc3RhcnRlZCksIHJldmVhbCB0aGUgYXNzZXNzbWVudFxyXG4gIG9uSW50cm9Qcm9jZWVkZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnNlbnRUb1Byb2NlZWQuZW1pdCh0cnVlKTtcclxuICAgIHRoaXMuaW50cm9BY3RpdmUgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLndhcm5PbkxlYXZlRHVyaW5nUHJvY3RvcmluZyAmJiB0aGlzLmlzUHJvY3RvcmluZ1J1bm5pbmcoKSkge1xyXG4gICAgICAvLyBndWFyZCB0aGUgaW4tYXBwIEJhY2sgYnV0dG9uIHdoaWxlIHByb2N0b3JpbmcgaXMgYWN0aXZlXHJcbiAgICAgIHRoaXMuYXJtQmFja0d1YXJkKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJlZ2luQXNzZXNzbWVudCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyB0aGUgYXNzZXNzZWUgdXAgZnJvbnQgd2hlbiB0aGUgY2FuZGlkYXRlIHByb2NlZWRzIGZyb20gdGhlIGludHJvIGdhdGUuXHJcbiAgICogLSBGaXJzdCBhdHRlbXB0IChubyBhc3Nlc3NlZSBpZCk6IFBPU1QgY3JlYXRlcyB0aGUgYXNzZXNzZWUg4oCUIGZvciBwcm9jdG9yaW5nIHRoZSByZXNwb25zZSBjYXJyaWVzXHJcbiAgICogICBhIG5lc3RlZCBgcHJvY3RvcmluZ2Agc2Vzc2lvbjsgb3RoZXJ3aXNlIGl0J3MgYSBwbGFpbiBhc3Nlc3NlZSBEVE8gKHdpdGggYGNyZWF0ZWRBdGApLlxyXG4gICAqIC0gRXhpc3RpbmcgYXR0ZW1wdDogcHJvY3RvcmluZyByZWZyZXNoZXMgdGhlIHRva2VuIChmbGF0IFByb2N0b3JpbmdTZXNzaW9uKTsgbm9uLXByb2N0b3JpbmcgaXMgYSBuby1vcFxyXG4gICAqICAgKHRoZSBhc3Nlc3NlZSB3YXMgYWxyZWFkeSBsb2FkZWQsIHNvIGBjcmVhdGVkQXRgIGlzIGtub3duKS5cclxuICAgKiBXaGVuIHByb2N0b3JpbmcgaXMgZW5hYmxlZCBpdCB0aGVuIHN0YXJ0cyB0aGUgUHJvY3RvckxpbmsgU0RLIGFuZCB3YWl0cyBmb3IgY2FtZXJhIHBlcm1pc3Npb24uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdGFydEFzc2Vzc21lbnRTZXNzaW9uKHJlZmVyZW5jZUltYWdlQmFzZTY0OiBzdHJpbmcgPSAnJyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBhc3Nlc3NlZUlkID0gdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5pZCB8fCB0aGlzLmFzc2Vzc2VlRGF0YT8uaWQ7XHJcbiAgICBjb25zdCByZXF1ZXN0JDogT2JzZXJ2YWJsZTxhbnk+ID0gYXNzZXNzZWVJZFxyXG4gICAgICA/ICh0aGlzLmlzUHJvY3RvcmluZ0VuYWJsZWQgPyB0aGlzLmFzc2Vzc21lbnRUYWtlclNlcnZpY2UucmVmcmVzaFByb2N0b3JpbmdUb2tlbihhc3Nlc3NlZUlkKSA6IG9mKG51bGwpKVxyXG4gICAgICA6IHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5zdWJtaXRBc3Nlc3NtZW50KHRoaXMuYnVpbGRJbml0QXNzZXNzZWVQYXlsb2FkKHJlZmVyZW5jZUltYWdlQmFzZTY0KSk7XHJcbiAgICByZXR1cm4gcmVxdWVzdCQucGlwZShcclxuICAgICAgdGFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghcmVzIHx8IHR5cGVvZiByZXMgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzUHJvY3RvcmluZ0VuYWJsZWQpIHtcclxuICAgICAgICAgIC8vIGNyZWF0ZSByZXR1cm5zIHRoZSBEVE8gKG5lc3RlZCBgcHJvY3RvcmluZ2ApOyByZWZyZXNoIHJldHVybnMgdGhlIHNlc3Npb24gZmllbGRzIGZsYXRcclxuICAgICAgICAgIGNvbnN0IHByb2N0b3Jpbmc6IFByb2N0b3JpbmdTZXNzaW9uID0gcmVzLnByb2N0b3JpbmcgPz8gcmVzO1xyXG4gICAgICAgICAgY29uc3QgYXNzZXNzZWVGaWVsZHMgPSByZXMucHJvY3RvcmluZyA/IHJlcyA6IHt9O1xyXG4gICAgICAgICAgdGhpcy5hc3Nlc3NlZVJlc3BvbnNlID0geyAuLi50aGlzLmFzc2Vzc2VlUmVzcG9uc2UsIC4uLmFzc2Vzc2VlRmllbGRzLCBwcm9jdG9yaW5nIH07XHJcbiAgICAgICAgICB0aGlzLnByb2N0b3JpbmdTZXNzaW9uU3RhcnRlZCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIG5vbi1wcm9jdG9yaW5nIGNyZWF0ZSDihpIgbWVyZ2UgdGhlIG5ldyBhc3Nlc3NlZSAoaWQgKyBjcmVhdGVkQXQpXHJcbiAgICAgICAgICB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UgPSB7IC4uLnRoaXMuYXNzZXNzZWVSZXNwb25zZSwgLi4ucmVzIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXNzZXNzZWVJZCkge1xyXG4gICAgICAgICAgdGhpcy5uZXdBc3Nlc3NlZVNlc3Npb24gPSB0cnVlO1xyXG4gICAgICAgICAgLy8gZmlyc3QgYXR0ZW1wdCBqdXN0IGNyZWF0ZWQgdGhlIGFzc2Vzc2VlIOKAlCBub3RpZnkgdGhlIGhvc3QgaXQncyBpbiBwcm9ncmVzc1xyXG4gICAgICAgICAgdGhpcy5zdWJtaXRBc3Nlc3NtZW50LmVtaXQoe1xyXG4gICAgICAgICAgICBhc3Nlc3NlZUlkOiB0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmlkLFxyXG4gICAgICAgICAgICBhc3Nlc3NlZVJlc3BvbnNlOiB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UsXHJcbiAgICAgICAgICAgIGNvbXBsZXRlZDogZmFsc2VcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIC8vIHByb2N0b3JlZDogc3RhcnQgdGhlIFByb2N0b3JMaW5rIHNlc3Npb24gYW5kIHJlcXVlc3QgY2FtZXJhOyBjb21wbGV0ZXMgb25seSBvbmNlIGdyYW50ZWQuXHJcbiAgICAgIC8vIG5vbi1wcm9jdG9yZWQ6IG5vdGhpbmcgbW9yZSB0byBkby5cclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuaXNQcm9jdG9yaW5nRW5hYmxlZFxyXG4gICAgICAgID8gdGhpcy5wcm9jdG9yaW5nU2VydmljZS5zdGFydCh7XHJcbiAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8ucHJvY3RvcmluZz8ucHJvdmlkZXJTZXNzaW9uSWQsXHJcbiAgICAgICAgICBqd3Q6IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8ucHJvY3RvcmluZz8ucHJvdmlkZXJTZXNzaW9uSnd0IHx8ICcnLFxyXG4gICAgICAgICAgLy8gb24gdG9rZW4tZXhwaXJlZCwgcmUtbWludCB2aWEgdGhlIHJlZnJlc2ggQVBJIGFuZCByZXR1cm4gT05MWSB0aGUgbmV3IEpXVCB0byB0aGUgU0RLXHJcbiAgICAgICAgICByZWZyZXNoVG9rZW46ICgpID0+IHRoaXMucmVmcmVzaFByb2N0b3JpbmdKd3QoKSxcclxuICAgICAgICAgIC8vIHRoZSBTREsgaXMgbG9hZGVkIGJ5IHRoZSBob3N0IChrZWVwcyBAcHJvY3Rvcmxpbmsvc2RrIG91dCBvZiB0aGUgbGlicmFyeSBidW5kbGUpXHJcbiAgICAgICAgICBzZGtMb2FkZXI6IHRoaXMucHJvY3RvckxpbmtMb2FkZXJcclxuICAgICAgICB9KVxyXG4gICAgICAgIDogb2Yodm9pZCAwKSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGVycj8uY29kZSA9PT0gJ2NhbWVyYV9kZW5pZWQnKSB7XHJcbiAgICAgICAgICAvLyBzdXJmYWNlZCBpbnNpZGUgdGhlIGludHJvIGdhdGUgc28gdGhlIGNhbmRpZGF0ZSBjYW4gYWxsb3cgdGhlIGNhbWVyYSBhbmQgcmV0cnlcclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuQ0FNRVJBX0RFTklFRCddIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcih7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlNFU1NJT05fRVJST1InXSB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZS1taW50cyB0aGUgcHJvY3RvcmluZyB0b2tlbiB2aWEgdGhlIHJlZnJlc2ggQVBJIGFuZCByZXR1cm5zIE9OTFkgdGhlIG5ldyBwcm92aWRlciBKV1RcclxuICAgKiAodXNlZCBieSB0aGUgU0RLJ3MgdG9rZW4tZXhwaXJlZCBmbG93KS4gVGhlIHJlc3Qgb2YgdGhlIHJlZnJlc2ggcmVzcG9uc2UgaXMgaW50ZW50aW9uYWxseVxyXG4gICAqIGlnbm9yZWQg4oCUIHRoZSBsaXZlIHNlc3Npb24gbXVzdCBub3QgYmUgcmUtc2VlZGVkIGZyb20gaXQgbWlkLWF0dGVtcHQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWZyZXNoUHJvY3RvcmluZ0p3dCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgYXNzZXNzZWVJZCA9IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uaWQgfHwgdGhpcy5hc3Nlc3NlZURhdGE/LmlkIHx8IDA7XHJcbiAgICByZXR1cm4gdGhpcy5hc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLnJlZnJlc2hQcm9jdG9yaW5nVG9rZW4oYXNzZXNzZWVJZCkucGlwZShcclxuICAgICAgbWFwKChyZXM6IGFueSkgPT4gKHJlcz8ucHJvdmlkZXJTZXNzaW9uSnd0ID8/IHJlcz8ucHJvY3RvcmluZz8ucHJvdmlkZXJTZXNzaW9uSnd0KSB8fCAnJylcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkSW5pdEFzc2Vzc2VlUGF5bG9hZChyZWZlcmVuY2VJbWFnZUJhc2U2NDogc3RyaW5nID0gJycpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2VCdWlsZGVyU2VydmljZS5idWlsZEluaXRBc3Nlc3NlZVBheWxvYWQoXHJcbiAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZSxcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEsXHJcbiAgICAgIHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMsXHJcbiAgICAgIHRoaXMucXVlc3Rpb25CYW5rLFxyXG4gICAgICB0aGlzLnRlbmFudElkLFxyXG4gICAgICByZWZlcmVuY2VJbWFnZUJhc2U2NFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYmVnaW5Bc3Nlc3NtZW50KCkge1xyXG4gICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLmFzc2Vzc21lbnREdXJhdGlvblNlY29uZHM7XHJcbiAgICBpZiAoIShkdXJhdGlvbiA+IDApKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIHByZXZpZXcvZGlzYWJsZWQ6IHNob3cgdGhlIHN0YXRpYyBmdWxsIGR1cmF0aW9uLCBubyBjb3VudGRvd25cclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucHJldmlld01vZGUpIHtcclxuICAgICAgdGhpcy5yZW1haW5pbmdUaW1lID0gZHVyYXRpb247XHJcbiAgICAgIHRoaXMudXBkYXRlRGlzcGxheVRpbWUoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucmVzdW1lVGltZXJBY3Jvc3NWaXNpdHMgJiYgIXRoaXMubmV3QXNzZXNzZWVTZXNzaW9uKSB7XHJcbiAgICAgIHRoaXMuYmVnaW5UcmFja2VkVGltZXIoZHVyYXRpb24pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdGFydFRpbWVyKGR1cmF0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0cyBhIHRpbWVyIGFuY2hvcmVkIHRvIHRoZSBhc3Nlc3NlZSdzIGZpcnN0LXZpc2l0IHRpbWUuIFRoZSBhc3Nlc3NlZSBpcyBhbHJlYWR5IGNyZWF0ZWQgYnkgdGhlXHJcbiAgICogaW50cm8gZ2F0ZSAoc28gYGNyZWF0ZWRBdGAgaXMga25vd24pOyByZW1haW5pbmcgdGltZSBpcyBgZHVyYXRpb24gLSBlbGFwc2VkU2luY2VDcmVhdGVkQXRgLlxyXG4gICAqIElmIHRoZSB0aW1lIGhhcyBhbHJlYWR5IHJ1biBvdXQgKGNhbmRpZGF0ZSBsZWZ0IGFuZCByZXR1cm5lZCBsYXRlKSwgc2hvd3MgMDA6MDAgYW5kIGF1dG8tc3VibWl0cy5cclxuICAgKi9cclxuICBwcml2YXRlIGJlZ2luVHJhY2tlZFRpbWVyKGR1cmF0aW9uOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGNyZWF0ZWRBdCA9IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uY3JlYXRlZEF0O1xyXG4gICAgY29uc3QgZWxhcHNlZCA9IGNyZWF0ZWRBdCA/IE1hdGguZmxvb3IoKERhdGUubm93KCkgLSBjcmVhdGVkQXQpIC8gMTAwMCkgOiAwO1xyXG4gICAgY29uc3QgcmVtYWluaW5nID0gZHVyYXRpb24gLSBlbGFwc2VkO1xyXG4gICAgaWYgKHJlbWFpbmluZyA8PSAwKSB7XHJcbiAgICAgIHRoaXMucmVtYWluaW5nVGltZSA9IDA7XHJcbiAgICAgIHRoaXMudXBkYXRlRGlzcGxheVRpbWUoKTsgLy8gc2hvd3MgMDA6MDBcclxuICAgICAgdGhpcy5hdXRvU3VibWl0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhcnRUaW1lcihyZW1haW5pbmcpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUXVlc3Rpb25Db25kaXRpb25hbENvbnRyb2xzKGZnOiBGb3JtR3JvdXAsIHF1ZXN0aW9uOiBBc3Nlc3NtZW50UXVlc3Rpb24pIHtcclxuICAgIGlmICghcXVlc3Rpb24gfHwgIXF1ZXN0aW9uLmlkIHx8ICFxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3Q/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHFJZCA9IHF1ZXN0aW9uLmlkO1xyXG4gICAgcXVlc3Rpb24uZGVmYXVsdE9wdGlvbnNMaXN0LmZvckVhY2goKG9wdGlvbjogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLmlzT3B0aW9uU2VsZWN0ZWQoZmcsIHF1ZXN0aW9uLCBvcHRpb24ub3B0aW9ucz8uaWQpO1xyXG5cclxuICAgICAgaWYgKG9wdGlvbi5yZW1hcmtzUmVxdWlyZWQpIHtcclxuICAgICAgICBjb25zdCByZW1hcmtDdHJsID0gZmcuZ2V0KGAke3FJZH1fcmVtYXJrc18ke29wdGlvbi5pZH1gKTtcclxuICAgICAgICBpZiAoaXNTZWxlY3RlZCkge1xyXG4gICAgICAgICAgcmVtYXJrQ3RybD8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVtYXJrQ3RybD8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICByZW1hcmtDdHJsPy5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVtYXJrQ3RybD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAob3B0aW9uLmNoaWxkUXVlc3Rpb25MaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICBvcHRpb24uY2hpbGRRdWVzdGlvbkxpc3QuZm9yRWFjaCgoY2hpbGRJZDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjaGlsZFF1ZXMgPSB0aGlzLnF1ZXN0aW9uQmFua1tjaGlsZElkXTtcclxuICAgICAgICAgIGlmIChjaGlsZFF1ZXM/LmlkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkQ3RybCA9IGZnLmdldChjaGlsZFF1ZXMuaWQ/LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICBpZiAoaXNTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSB0aGlzLmdldFZhbGlkYXRvcnNGb3JRdWVzdGlvbihjaGlsZFF1ZXMsIGNoaWxkUXVlcy5pc01hbmRhdG9yeSB8fCBmYWxzZSkuZmlsdGVyKHYgPT4gISF2KTtcclxuICAgICAgICAgICAgICBjaGlsZEN0cmw/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5jb21wb3NlKHZhbGlkYXRvcnMpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjaGlsZEN0cmw/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICAgIGNoaWxkQ3RybD8uc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2hpbGRDdHJsPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZW1pdFN0ZXBEZXRhaWxzKCkge1xyXG4gICAgaWYgKHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMgJiYgdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc3RlcENoYW5nZWQuZW1pdCh7XHJcbiAgICAgICAgY3VycmVudFN0ZXBJbmRleDogdGhpcy5zZWxlY3RlZFRhYkluZGV4LFxyXG4gICAgICAgIHRvdGFsU3RlcHM6IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoLFxyXG4gICAgICAgIGlzTGFzdFN0ZXA6IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9PT0gdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGggLSAxXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQ29udHJvbEZvclF1ZXN0aW9uKGdyb3VwOiBhbnksIHF1ZXN0aW9uOiBBc3Nlc3NtZW50UXVlc3Rpb24sIGlzTWFuZGF0b3J5OiBib29sZWFuID0gZmFsc2UsIGlzQ2hpbGQ6IGJvb2xlYW4gPSBmYWxzZSwgcGFyZW50SWQ/OiBudW1iZXIsIHBhcmVudE9wdGlvbklkPzogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBxSWQgPSBxdWVzdGlvbi5pZDtcclxuICAgIGlmICghcUlkKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IHRoaXMuZ2V0VmFsaWRhdG9yc0ZvclF1ZXN0aW9uKHF1ZXN0aW9uLCBpc01hbmRhdG9yeSkuZmlsdGVyKHYgPT4gISF2KTtcclxuICAgIGxldCBwcmVmaWxsZWRWYWx1ZSA9IHRoaXMuZ2V0UHJlZmlsbGVkQW5zd2VyKHFJZCwgaXNDaGlsZCwgcGFyZW50SWQsIHBhcmVudE9wdGlvbklkKTtcclxuXHJcbiAgICBjb25zdCBjb250cm9sID0gbmV3IEZvcm1Db250cm9sKHByZWZpbGxlZFZhbHVlLCBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycykpO1xyXG5cclxuICAgIC8vIERpc2FibGUgaWYgYXNzZXNzbWVudCBpcyBjb21wbGV0ZWRcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIGNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdyb3VwW3FJZF0gPSBjb250cm9sO1xyXG5cclxuICAgIC8vIEF0dGFjaCBtYXJrIGFzc2lnbm1lbnQgY29udHJvbCBpZiByZXF1aXJlZFxyXG4gICAgaWYgKHRoaXMuZW5hYmxlTWFya3MgJiYgdGhpcy5zaG91bGRTaG93TWFya3NEcm9wZG93bihxdWVzdGlvbikpIHtcclxuICAgICAgbGV0IG1hcmtWYWx1ZSA9IHRoaXMuZ2V0UHJlZmlsbGVkTWFyayhxSWQsIGlzQ2hpbGQsIHBhcmVudElkLCBwYXJlbnRPcHRpb25JZCk7XHJcbiAgICAgIGdyb3VwW2Ake3FJZH1fbWFya3NgXSA9IG5ldyBGb3JtQ29udHJvbChtYXJrVmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UHJlZmlsbGVkTWFyayhxSWQ6IG51bWJlciwgaXNDaGlsZDogYm9vbGVhbiA9IGZhbHNlLCBwYXJlbnRJZD86IG51bWJlciwgcGFyZW50T3B0aW9uSWQ/OiBudW1iZXIpOiBhbnkge1xyXG4gICAgaWYgKCF0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmFpYWRlZmF1bHRSZXNwb25zZUxpc3QpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgYW5zd2VyT2JqID0gdGhpcy5hc3Nlc3NlZVJlc3BvbnNlLmFpYWRlZmF1bHRSZXNwb25zZUxpc3QuZmluZCgoYTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpc0NoaWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIGEuY2hpbGRRdWVzdGlvbklkID09PSBxSWQgJiYgYS5jaGlsZFF1ZXN0aW9uUGFyZW50UXVlc3Rpb25JZCA9PT0gcGFyZW50SWQgJiYgYS5jaGlsZERlZmF1bHRPcHRpb25JZCA9PT0gcGFyZW50T3B0aW9uSWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGEuc2VjdGlvblF1ZXN0aW9uPy5xdWVzdGlvbklkID09PSBxSWQgJiYgKCFhLmNoaWxkUXVlc3Rpb25JZCB8fCBhLmNoaWxkUXVlc3Rpb25JZCA9PT0gMCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGFuc3dlck9iaj8ubWFya3MgPz8gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldFF1ZXN0aW9uQW5zd2VyT2JqKHFJZDogbnVtYmVyLCBwYXJlbnRPcHRpb25JZD86IG51bWJlciB8IG51bGwsIHBhcmVudFF1ZXN0aW9uSWQ/OiBudW1iZXIgfCBudWxsKTogYW55IHtcclxuICAgIGlmICghdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5haWFkZWZhdWx0UmVzcG9uc2VMaXN0KSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGlzQ2hpbGQgPSBwYXJlbnRPcHRpb25JZCAhPT0gdW5kZWZpbmVkICYmIHBhcmVudE9wdGlvbklkICE9PSBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXMuYXNzZXNzZWVSZXNwb25zZS5haWFkZWZhdWx0UmVzcG9uc2VMaXN0LmZpbmQoKGE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaXNDaGlsZCkge1xyXG4gICAgICAgIHJldHVybiBhLmNoaWxkUXVlc3Rpb25JZCA9PT0gcUlkICYmIGEuY2hpbGRRdWVzdGlvblBhcmVudFF1ZXN0aW9uSWQgPT09IHBhcmVudFF1ZXN0aW9uSWQgJiYgYS5jaGlsZERlZmF1bHRPcHRpb25JZCA9PT0gcGFyZW50T3B0aW9uSWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGEuc2VjdGlvblF1ZXN0aW9uPy5xdWVzdGlvbklkID09PSBxSWQgJiYgKCFhLmNoaWxkUXVlc3Rpb25JZCB8fCBhLmNoaWxkUXVlc3Rpb25JZCA9PT0gMCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UXVlc3Rpb25XZWlnaHQocUlkOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYW5rW3FJZF0/LndlaWdodCB8fCAwO1xyXG4gIH1cclxuXHJcbiAgc2hvdWxkU2hvd01hcmtzRHJvcGRvd24ocXVlc3Rpb246IEFzc2Vzc21lbnRRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgYXV0b0Fzc2lnbmVkVHlwZXMgPSBbXHJcbiAgICAgICdRVUVTVElPTl9UWVBFLk9CSkVDVElWRScsXHJcbiAgICAgICdRVUVTVElPTl9UWVBFLk1VTFRJX1NFTEVDVCdcclxuICAgIF07XHJcbiAgICBjb25zdCBoYXNXZWlnaHQgPSB0aGlzLmdldFF1ZXN0aW9uV2VpZ2h0KHF1ZXN0aW9uLmlkIHx8IDApID4gMDtcclxuICAgIHJldHVybiAhYXV0b0Fzc2lnbmVkVHlwZXMuaW5jbHVkZXMocXVlc3Rpb24ucXVlc3Rpb25UeXBlPy5jb2RlIHx8ICcnKSAmJiBoYXNXZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBnZXRQcmVmaWxsZWRBbnN3ZXIocUlkOiBudW1iZXIsIGlzQ2hpbGQ6IGJvb2xlYW4gPSBmYWxzZSwgcGFyZW50SWQ/OiBudW1iZXIsIHBhcmVudE9wdGlvbklkPzogbnVtYmVyKTogYW55IHtcclxuICAgIGlmICghdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5haWFkZWZhdWx0UmVzcG9uc2VMaXN0KSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBjb25zdCBhbnN3ZXJPYmogPSB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UuYWlhZGVmYXVsdFJlc3BvbnNlTGlzdC5maW5kKChhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGlzQ2hpbGQpIHtcclxuICAgICAgICByZXR1cm4gYS5jaGlsZFF1ZXN0aW9uSWQgPT09IHFJZCAmJiBhLmNoaWxkUXVlc3Rpb25QYXJlbnRRdWVzdGlvbklkID09PSBwYXJlbnRJZCAmJiBhLmNoaWxkRGVmYXVsdE9wdGlvbklkID09PSBwYXJlbnRPcHRpb25JZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYS5zZWN0aW9uUXVlc3Rpb24/LnF1ZXN0aW9uSWQgPT09IHFJZCAmJiAoIWEuY2hpbGRRdWVzdGlvbklkIHx8IGEuY2hpbGRRdWVzdGlvbklkID09PSAwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFhbnN3ZXJPYmopIHJldHVybiBudWxsO1xyXG5cclxuICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkJhbmtbcUlkXTtcclxuICAgIGlmICghcXVlc3Rpb24pIHJldHVybiBudWxsO1xyXG5cclxuICAgIGNvbnN0IHFUeXBlID0gcXVlc3Rpb24ucXVlc3Rpb25UeXBlPy5jb2RlO1xyXG5cclxuICAgIGlmIChxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuT0JKRUNUSVZFJykge1xyXG4gICAgICByZXR1cm4gYW5zd2VyT2JqLm9wdGlvbklkO1xyXG4gICAgfSBlbHNlIGlmIChxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuTVVMVElfU0VMRUNUJyB8fCBxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuUFJFRkVSRU5DRScpIHtcclxuICAgICAgbGV0IHNvcnRlZExpc3QgPSBbLi4uKGFuc3dlck9iai5kcm9iamVjdGl2ZXJlc3BvbnNlTGlzdCB8fCBbXSldO1xyXG4gICAgICBpZiAocVR5cGUgPT09ICdRVUVTVElPTl9UWVBFLlBSRUZFUkVOQ0UnKSB7XHJcbiAgICAgICAgc29ydGVkTGlzdC5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gKGEub3JkZXJObyB8fCAwKSAtIChiLm9yZGVyTm8gfHwgMCkpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzb3J0ZWRMaXN0Lm1hcCgocjogYW55KSA9PiByLmRlZmF1bHRPcHRpb24/Lm9wdGlvbnMpIHx8IFtdO1xyXG4gICAgfSBlbHNlIGlmIChxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuRklMRV9VUExPQUQnKSB7XHJcbiAgICAgIHJldHVybiBhbnN3ZXJPYmouYXR0YWNobWVudFJlc3BvbnNlTGlzdCB8fCBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBhbnN3ZXJPYmouZHJzdWJqZWN0aXZlcmVzcG9uc2VMaXN0Py5bMF0/LnJlc3BvbnNlVGV4dCA/PyBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VmFsaWRhdG9yc0ZvclF1ZXN0aW9uKHF1ZXN0aW9uOiBBc3Nlc3NtZW50UXVlc3Rpb24sIGlzTWFuZGF0b3J5OiBib29sZWFuKTogYW55W10ge1xyXG4gICAgY29uc3QgdmFsaWRhdG9yczogYW55W10gPSBbXTtcclxuICAgIGlmIChpc01hbmRhdG9yeSkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5wYXR0ZXJuKC8uKlxcUy4qLykpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChxdWVzdGlvbi5yZXNwb25zZVZhbGlkYXRpb24/Lmxlbmd0aCkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKHF1ZXN0aW9uLnJlc3BvbnNlVmFsaWRhdGlvbikpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZT8uY29kZSA9PT0gJ1FVRVNUSU9OX1RZUEUuRU1BSUwnKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybigvXlthLXpBLVowLTkuXyUrLV0rQFthLXpBLVowLTkuLV0rXFwuW2EtekEtWl17Mix9JC8pKTtcclxuICAgICAgfSBlbHNlIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGU/LmNvZGUgPT09ICdRVUVTVElPTl9UWVBFLlVSTCcpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKC9eKGh0dHBzPzpcXC9cXC8pPyhbXFx3XFwtXSsoXFwuW1xcd1xcLV0rKSspKFtcXC8/I10uKik/JC9pKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAocXVlc3Rpb24ucXVlc3Rpb25UeXBlPy5jb2RlID09PSAnUVVFU1RJT05fVFlQRS5DT05UQUNUX05VTUJFUicpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKC9eWzAtOV17MTB9JC8pKTtcclxuICAgICAgfSBlbHNlIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGU/LmNvZGUgPT09ICdRVUVTVElPTl9UWVBFLk5VTUJFUicpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKC9eXFxkKyhcXC5cXGQrKT8kLykpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncyAmJiBxdWVzdGlvbi5xdWVzdGlvbkNvbmZpZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBtaW5DaGFyID0gcXVlc3Rpb24ucXVlc3Rpb25Db25maWdzLmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gJ21pbkNoYXJhY3RlckNvdW50Jyk/LmNvbmZpZ1ZhbHVlO1xyXG4gICAgICBpZiAobWluQ2hhcikgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKE51bWJlcihtaW5DaGFyKSksIFZhbGlkYXRvcnMucGF0dGVybigvLipcXFMuKi8pKTtcclxuXHJcbiAgICAgIGNvbnN0IG1heENoYXIgPSBxdWVzdGlvbi5xdWVzdGlvbkNvbmZpZ3MuZmluZChjID0+IGMuY29uZmlnS2V5ID09PSAnbWF4Q2hhcmFjdGVyQ291bnQnKT8uY29uZmlnVmFsdWU7XHJcbiAgICAgIGlmIChtYXhDaGFyKSB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXhMZW5ndGgoTnVtYmVyKG1heENoYXIpKSk7XHJcblxyXG4gICAgICBjb25zdCBtaW5PcHQgPSBxdWVzdGlvbi5xdWVzdGlvbkNvbmZpZ3MuZmluZChjID0+IGMuY29uZmlnS2V5ID09PSAnbWluaW11bU51bWJlck9mT3B0aW9uJyk/LmNvbmZpZ1ZhbHVlO1xyXG4gICAgICBpZiAobWluT3B0KSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKChjb250cm9sOiBGb3JtQ29udHJvbCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGNvbnRyb2wudmFsdWUubGVuZ3RoIDwgTnVtYmVyKG1pbk9wdCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgbWluT3B0aW9uczogeyByZXF1aXJlZDogTnVtYmVyKG1pbk9wdCksIGFjdHVhbDogY29udHJvbC52YWx1ZT8ubGVuZ3RoIHx8IDAgfSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IG1heE9wdCA9IHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncy5maW5kKGMgPT4gYy5jb25maWdLZXkgPT09ICdtYXhpbXVtTnVtYmVyT2ZPcHRpb24nKT8uY29uZmlnVmFsdWU7XHJcbiAgICAgIGlmIChtYXhPcHQpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goKGNvbnRyb2w6IEZvcm1Db250cm9sKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlLmxlbmd0aCA+IE51bWJlcihtYXhPcHQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IG1heE9wdGlvbnM6IHsgcmVxdWlyZWQ6IE51bWJlcihtYXhPcHQpLCBhY3R1YWw6IGNvbnRyb2wudmFsdWU/Lmxlbmd0aCB8fCAwIH0gfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBtYXhGaWxlcyA9IHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncy5maW5kKGMgPT4gYy5jb25maWdLZXkgPT09ICdtYXhOb09mRmlsZXMnKT8uY29uZmlnVmFsdWU7XHJcbiAgICAgIGlmIChtYXhGaWxlcykge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaCgoY29udHJvbDogRm9ybUNvbnRyb2wpID0+IHtcclxuICAgICAgICAgIGlmIChjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUubGVuZ3RoID4gTnVtYmVyKG1heEZpbGVzKSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBtYXhGaWxlczogeyByZXF1aXJlZDogTnVtYmVyKG1heEZpbGVzKSwgYWN0dWFsOiBjb250cm9sLnZhbHVlPy5sZW5ndGggfHwgMCB9IH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgbWF4RmlsZVNpemUgPSBxdWVzdGlvbi5xdWVzdGlvbkNvbmZpZ3MuZmluZChjID0+IGMuY29uZmlnS2V5ID09PSAnbWF4RmlsZVNpemUnKT8uY29uZmlnVmFsdWU7XHJcbiAgICAgIGlmIChtYXhGaWxlU2l6ZSkge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaCgoY29udHJvbDogRm9ybUNvbnRyb2wpID0+IHtcclxuICAgICAgICAgIGlmIChjb250cm9sLnZhbHVlICYmIEFycmF5LmlzQXJyYXkoY29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgY29uc3QgaGFzTGFyZ2VGaWxlID0gY29udHJvbC52YWx1ZS5zb21lKChmaWxlOiBhbnkpID0+IGZpbGU/LnNpemUgJiYgZmlsZS5zaXplID4gKE51bWJlcihtYXhGaWxlU2l6ZSkgKiAxMDI0ICogMTAyNCkpO1xyXG4gICAgICAgICAgICBpZiAoaGFzTGFyZ2VGaWxlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHsgbWF4RmlsZVNpemU6IHsgcmVxdWlyZWRTaXplOiBOdW1iZXIobWF4RmlsZVNpemUpIH0gfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZGF0b3JzO1xyXG4gIH1cclxuXHJcbiAgaW1hZ2VFcnJvckhhbmRsZXIoZXZlbnQ6IGFueSwgZmlsZVBhdGg6IHN0cmluZykge1xyXG4gICAgZXZlbnQudGFyZ2V0LnNyYyA9IGZpbGVQYXRoO1xyXG4gIH1cclxuXHJcbiAgaXNPcHRpb25TZWxlY3RlZChmb3JtR3JvdXA6IEZvcm1Hcm91cCwgcXVlc3Rpb246IEFzc2Vzc21lbnRRdWVzdGlvbiwgb3B0aW9uSWQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFvcHRpb25JZCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCBjb250cm9sTmFtZSA9IHF1ZXN0aW9uLmlkPy50b1N0cmluZygpO1xyXG5cclxuICAgIGlmICghY29udHJvbE5hbWUpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChjb250cm9sTmFtZSk7XHJcbiAgICBpZiAoIWNvbnRyb2wgfHwgY29udHJvbC52YWx1ZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgLy8gTXVsdGktc2VsZWN0IGRlYWxzIHdpdGggYW4gYXJyYXkgb2YgdmFsdWVzXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb250cm9sLnZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gY29udHJvbC52YWx1ZS5pbmNsdWRlcyhvcHRpb25JZCkgfHwgY29udHJvbC52YWx1ZS5zb21lKCh2YWw6IGFueSkgPT4gdmFsPy5pZCA9PT0gb3B0aW9uSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE9iamVjdGl2ZSAvIFNpbmdsZSBzZWxlY3QgZGVhbHMgd2l0aCBhIHNpbmdsZSB2YWx1ZSAoY291bGQgYmUgaW50ZWdlciBJRCBvciBvYmplY3QpXHJcbiAgICBpZiAodHlwZW9mIGNvbnRyb2wudmFsdWUgPT09ICdvYmplY3QnICYmIGNvbnRyb2wudmFsdWUuaWQpIHtcclxuICAgICAgcmV0dXJuIGNvbnRyb2wudmFsdWUuaWQgPT09IG9wdGlvbklkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb250cm9sLnZhbHVlID09PSBvcHRpb25JZDtcclxuICB9XHJcblxyXG4gIGdldE1heENoYXJDb3VudChxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHF1ZXN0aW9uPy5xdWVzdGlvbkNvbmZpZ3M/LmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gJ21heENoYXJhY3RlckNvdW50Jyk7XHJcbiAgICByZXR1cm4gY29uZmlnID8gTnVtYmVyKGNvbmZpZy5jb25maWdWYWx1ZSkgOiAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVtYWluaW5nQ2hhcnMocXVlc3Rpb246IEFzc2Vzc21lbnRRdWVzdGlvbiwgY29udHJvbDogYW55KTogbnVtYmVyIHtcclxuICAgIGNvbnN0IG1heCA9IHRoaXMuZ2V0TWF4Q2hhckNvdW50KHF1ZXN0aW9uKTtcclxuICAgIGNvbnN0IGN1cnJlbnRMZW5ndGggPSBjb250cm9sLnZhbHVlID8gY29udHJvbC52YWx1ZS5sZW5ndGggOiAwO1xyXG4gICAgcmV0dXJuIG1heCAtIGN1cnJlbnRMZW5ndGg7XHJcbiAgfVxyXG5cclxuICBnb0JhY2soKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFRhYkluZGV4ID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXgtLTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpc0NoZWNraW5nTGluaygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzPy5zb21lKGdyb3VwID0+XHJcbiAgICAgICEhZ3JvdXA/LmZvcm1Hcm91cCAmJiBPYmplY3QudmFsdWVzKGdyb3VwLmZvcm1Hcm91cC5jb250cm9scykuc29tZSgoYzogYW55KSA9PiAhIWM/LmVycm9ycz8uWydnZHJpdmVMaW5rQ2hlY2tpbmcnXSlcclxuICAgICkgPz8gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzaG91bGREaXNhYmxlVGFiKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5kZXg7IGorKykge1xyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uRm9ybUdyb3Vwc1tqXT8uZm9ybUdyb3VwPy5pbnZhbGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdvTmV4dChzYXZlRGF0YTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGNvbnN0IHNhdmUgPSB0aGlzLmFzc2Vzc21lbnREYXRhPy5hc3Nlc3NtZW50Q29uZmlncz8uZmluZChjID0+IGMuY29uZmlnS2V5ID09ICdhc3Nlc21lbnQuY29uZmlnLmFsbG93ZWQtcGFydGlhbC1yZXNwb25zZScpPy5jb25maWdWYWx1ZSA9PSAnMSc7XHJcbiAgICBjb25zdCBjdXJyZW50U2VjdGlvbiA9IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHNbdGhpcy5zZWxlY3RlZFRhYkluZGV4XTtcclxuICAgIGlmICghY3VycmVudFNlY3Rpb24pIHJldHVybjtcclxuXHJcbiAgICBjdXJyZW50U2VjdGlvbi5mb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xyXG5cclxuICAgIC8vIHdhaXQgd2hpbGUgYSBHb29nbGUgRHJpdmUgcHVibGljLWxpbmsgY2hlY2sgaXMgaW4gcHJvZ3Jlc3NcclxuICAgIGlmICh0aGlzLmlzQ2hlY2tpbmdMaW5rKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY3VycmVudFNlY3Rpb24uZm9ybUdyb3VwLmludmFsaWQpIHtcclxuICAgICAgdGhpcy5zZWN0aW9uRXJyb3JzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF0gPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuc2VjdGlvbkVycm9yc1t0aGlzLnNlbGVjdGVkVGFiSW5kZXhdID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA8IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoIC0gMSAmJiAhdGhpcy52ZXJ0aWNhbFZpZXcpIHtcclxuICAgICAgc2F2ZSAmJiBzYXZlRGF0YSA/IHRoaXMuc2F2ZSgpIDogdGhpcy5zZWxlY3RlZFRhYkluZGV4Kys7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnByb2Nlc3NTdWJtaXQoc2F2ZURhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc1N1Ym1pdChzYXZlRGF0YTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIC8vIHdhaXQgd2hpbGUgYSBHb29nbGUgRHJpdmUgcHVibGljLWxpbmsgY2hlY2sgaXMgaW4gcHJvZ3Jlc3NcclxuICAgIGlmICh0aGlzLmlzQ2hlY2tpbmdMaW5rKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBmaXJzdEludmFsaWRJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5mb3JFYWNoKChncm91cCwgaW5kZXgpID0+IHtcclxuICAgICAgZ3JvdXAuZm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgaWYgKGdyb3VwLmZvcm1Hcm91cC5pbnZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uRXJyb3JzW2luZGV4XSA9IHRydWU7XHJcbiAgICAgICAgaWYgKGZpcnN0SW52YWxpZEluZGV4ID09PSAtMSkgZmlyc3RJbnZhbGlkSW5kZXggPSBpbmRleDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlY3Rpb25FcnJvcnNbaW5kZXhdID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChmaXJzdEludmFsaWRJbmRleCAhPT0gLTEpIHtcclxuICAgICAgaWYgKCF0aGlzLnZlcnRpY2FsVmlldykge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGZpcnN0SW52YWxpZEluZGV4O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRTdGF0ZVtmaXJzdEludmFsaWRJbmRleF0gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuRklYX0VSUk9SUyddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICB0aGlzLnNjcm9sbFRvRmlyc3RJbnZhbGlkRmllbGQoZmlyc3RJbnZhbGlkSW5kZXgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zYXZlKHRydWUsIHNhdmVEYXRhKTtcclxuICB9XHJcblxyXG4gIHNjcm9sbFRvRmlyc3RJbnZhbGlkRmllbGQoc2VjdGlvbkluZGV4OiBudW1iZXIpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzW3NlY3Rpb25JbmRleF0uZm9ybUdyb3VwO1xyXG4gICAgICBmb3IgKGNvbnN0IGNvbnRyb2xOYW1lIGluIGZvcm1Hcm91cC5jb250cm9scykge1xyXG4gICAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdLmludmFsaWQpIHtcclxuICAgICAgICAgIGxldCBxSWQgPSBjb250cm9sTmFtZTtcclxuICAgICAgICAgIGlmIChjb250cm9sTmFtZS5pbmNsdWRlcygnX3JlbWFya3NfJykgfHwgY29udHJvbE5hbWUuaW5jbHVkZXMoJ19tYXJrcycpKSB7XHJcbiAgICAgICAgICAgIHFJZCA9IGNvbnRyb2xOYW1lLnNwbGl0KCdfJylbMF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHF1ZXN0aW9uLWNvbnRhaW5lci0ke3FJZH1gKTtcclxuICAgICAgICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgc2F2ZShnb05leHQ6IGJvb2xlYW4gPSB0cnVlLCBzYXZlRGF0YTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIC8vIGJsb2NrIHdoaWxlIGEgR29vZ2xlIERyaXZlIHB1YmxpYy1saW5rIGNoZWNrIGlzIGluIHByb2dyZXNzXHJcbiAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcgfHwgdGhpcy5pc0NoZWNraW5nTGluaykgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gdHJ1ZTtcclxuICAgIGlmICghdGhpcy5kaXNhYmxlZCB8fCB0aGlzLmlzQXV0b1N1Ym1pdHRpbmcpIHtcclxuICAgICAgaWYgKHRoaXMubWFya0FzQ29tcGxldGVkICYmICh0aGlzLnNlbGVjdGVkVGFiSW5kZXggPT0gdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGggLSAxIHx8IHRoaXMudmVydGljYWxWaWV3IHx8IHRoaXMuaXNBdXRvU3VibWl0dGluZykpIHtcclxuICAgICAgICB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UuYXNzZXNzbWVudFRha2VuID0geyBjb2RlOiAnQVNTRVNTTUVOVF9UQUtFTi5DT01QTEVURScgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UuYXNzZXNzbWVudFRha2VuID0geyBjb2RlOiAnQVNTRVNTTUVOVF9UQUtFTi5JTkNPTVBMRVRFJyB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGF5bG9hZCA9IHRoaXMucmVzcG9uc2VCdWlsZGVyU2VydmljZS5idWlsZFJlc3BvbnNlUGF5bG9hZChcclxuICAgICAgdGhpcy5hc3Nlc3NlZVJlc3BvbnNlLFxyXG4gICAgICB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSxcclxuICAgICAgdGhpcy5zZWN0aW9uRm9ybUdyb3VwcyxcclxuICAgICAgdGhpcy5xdWVzdGlvbkJhbmssXHJcbiAgICAgIHRoaXMudGVuYW50SWRcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd092ZXJhbGxSZW1hcmtzICYmIHRoaXMuYXNzZXNzZWVSZXNwb25zZSkge1xyXG4gICAgICB0aGlzLmFzc2Vzc2VlUmVzcG9uc2Uubm90ZXMgPSB0aGlzLm92ZXJhbGxOb3Rlc0N0cmwudmFsdWUgfHwgbnVsbDtcclxuICAgICAgcGF5bG9hZC5ub3RlcyA9IHRoaXMuYXNzZXNzZWVSZXNwb25zZS5ub3RlcztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXNhdmVEYXRhIHx8ICh0aGlzLmRpc2FibGVkICYmICF0aGlzLmVuYWJsZU1hcmtzICYmICF0aGlzLmlzQXV0b1N1Ym1pdHRpbmcpKSB7XHJcbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3VibWl0QXNzZXNzbWVudC5lbWl0KHtcclxuICAgICAgICBhc3Nlc3NlZUlkOiB0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmlkLFxyXG4gICAgICAgIGFzc2Vzc2VlUmVzcG9uc2U6IHBheWxvYWQsXHJcbiAgICAgICAgY29tcGxldGVkOiBnb05leHQgJiYgKHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9PSB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLmxlbmd0aCAtIDEgfHwgdGhpcy52ZXJ0aWNhbFZpZXcpXHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoZ29OZXh0ICYmIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA8IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCsrO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBhcGlDYWxsID0gdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5pZCA/IHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5wYXRjaEFzc2Vzc21lbnQocGF5bG9hZCkgOiB0aGlzLmFzc2Vzc21lbnRUYWtlclNlcnZpY2Uuc3VibWl0QXNzZXNzbWVudChwYXlsb2FkKTtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkICYmIHRoaXMuZW5hYmxlTWFya3MpIHtcclxuICAgICAgY29uc3QgbWFya3NQYXlsb2FkOiBhbnkgPSB0aGlzLnJlc3BvbnNlQnVpbGRlclNlcnZpY2UuYnVpbGRNYXJrc1BheWxvYWQocGF5bG9hZCk7XHJcbiAgICAgIGlmICh0aGlzLnNob3dPdmVyYWxsUmVtYXJrcykge1xyXG4gICAgICAgIG1hcmtzUGF5bG9hZC5ub3RlcyA9IHRoaXMub3ZlcmFsbE5vdGVzQ3RybC52YWx1ZSB8fCBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGFwaUNhbGwgPSB0aGlzLmFzc2Vzc21lbnRUYWtlclNlcnZpY2UudXBkYXRlTWFya3MobWFya3NQYXlsb2FkKTtcclxuICAgIH1cclxuICAgIGFwaUNhbGwuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hc3Nlc3NlZVJlc3BvbnNlID0gcmVzO1xyXG4gICAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZSA9IHJlcztcclxuICAgICAgICBpZiAodGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5hc3Nlc3NtZW50VGFrZW4/LmNvZGUgPT0gJ0FTU0VTU01FTlRfVEFLRU4uQ09NUExFVEUnKSB7XHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVGb3JtKCk7XHJcbiAgICAgICAgICAvLyBhc3Nlc3NtZW50IGZpbmlzaGVkIOKAlCBzdG9wIHByb2N0b3JpbmcgY2FwdHVyZSBhbmQgZW5kIHRoZSBiYWNrZW5kIHNlc3Npb25cclxuICAgICAgICAgIHRoaXMuZW5kUHJvY3RvcmluZ1Nlc3Npb24oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vdmVyYWxsTm90ZXNDdHJsLnNldFZhbHVlKHRoaXMuYXNzZXNzZWVSZXNwb25zZS5ub3RlcyB8fCAnJyk7XHJcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnN1Ym1pdEFzc2Vzc21lbnQuZW1pdCh7XHJcbiAgICAgICAgICBhc3Nlc3NlZUlkOiB0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmlkIHx8IHJlcyxcclxuICAgICAgICAgIGFzc2Vzc2VlUmVzcG9uc2U6IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uaWQgPyB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UgOiBwYXlsb2FkLFxyXG4gICAgICAgICAgY29tcGxldGVkOiBnb05leHQgJiYgKHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9PSB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLmxlbmd0aCAtIDEgfHwgdGhpcy52ZXJ0aWNhbFZpZXcgfHwgdGhpcy5pc0F1dG9TdWJtaXR0aW5nKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChnb05leHQgJiYgdGhpcy5zZWxlY3RlZFRhYkluZGV4IDwgdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGggLSAxICYmICF0aGlzLmlzQXV0b1N1Ym1pdHRpbmcpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc0F1dG9TdWJtaXR0aW5nKSB7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkFVVE9fU1VCTUlUVEVEJ10sIHR5cGU6ICdpbmZvJyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULlNBVkVfRkFJTEVEJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiB0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmlkID8gJ1BBVENIJyA6ICdQT1NUJywgcGF5bG9hZCB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QW5zd2Vyc0J5QWlhSWQoYXNzZXNzZWVJZDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRUYWtlclNlcnZpY2UuZ2V0QW5zd2Vyc0J5QWlhSWQoYXNzZXNzZWVJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hc3Nlc3NlZVJlc3BvbnNlID0gcmVzO1xyXG4gICAgICAgIGlmICh0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmFzc2Vzc21lbnRUYWtlbj8uY29kZSA9PSAnQVNTRVNTTUVOVF9UQUtFTi5DT01QTEVURScpIHtcclxuICAgICAgICAgIHRoaXMuZGlzYWJsZUZvcm0oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vdmVyYWxsTm90ZXNDdHJsLnNldFZhbHVlKHRoaXMuYXNzZXNzZWVSZXNwb25zZS5ub3RlcyB8fCAnJyk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5HRVRfRkFJTEVEJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiAnR0VUJyB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkWW91dHViZUlmcmFtZVNyYyh2aWRlb1VybDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXZpZGVvVXJsKSByZXR1cm4gbnVsbDtcclxuICAgIGlmICh0aGlzLnlvdXR1YmVVcmxDYWNoZVt2aWRlb1VybF0pIHtcclxuICAgICAgcmV0dXJuIHRoaXMueW91dHViZVVybENhY2hlW3ZpZGVvVXJsXTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZpZGVvSWQgPSB0aGlzLmdldFZpZGVvSWQodmlkZW9VcmwpO1xyXG4gICAgY29uc3QgeW91dHViZVVybCA9IGBodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC8ke3ZpZGVvSWR9YDtcclxuICAgIHRoaXMueW91dHViZVVybENhY2hlW3ZpZGVvVXJsXSA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh5b3V0dWJlVXJsKTtcclxuICAgIHJldHVybiB0aGlzLnlvdXR1YmVVcmxDYWNoZVt2aWRlb1VybF07XHJcbiAgfVxyXG5cclxuICBnZXRWaWRlb0lkKHZpZGVvVXJsOiBzdHJpbmcpIHtcclxuICAgIGxldCBwYXR0ZXJuID0gbnVsbDtcclxuICAgIGlmICh2aWRlb1VybC5pbmNsdWRlcygneW91dHViZS5jb20nKSkge1xyXG4gICAgICBwYXR0ZXJuID0gLyg/OlxcP3Y9fCZ2PXx5b3V0dVxcLmJlXFwvfFxcL2VtYmVkXFwvfFxcL1xcZFxcL3xcXC92aVxcL3xcXC92XFwvfGh0dHBzPzpcXC9cXC8oPzp3d3dcXC4pP3lvdXR1YmVcXC5jb21cXC8oPzp2XFwvfGVtYmVkXFwvfHdhdGNoXFw/KD86XFxTKyYpP3Y9fHdhdGNoXFw/KD86XFxTKyYpP3ZpPXxcXFMrXFwvKSkoW2EtekEtWjAtOV8tXXsxMX0pLztcclxuICAgIH0gZWxzZSBpZiAodmlkZW9VcmwuaW5jbHVkZXMoJ3lvdXR1LmJlJykpIHtcclxuICAgICAgcGF0dGVybiA9IC95b3V0dVxcLmJlXFwvKFthLXpBLVowLTlfLV17MTF9KS87XHJcbiAgICB9XHJcbiAgICBpZiAocGF0dGVybikge1xyXG4gICAgICBjb25zdCBtYXRjaCA9IHZpZGVvVXJsLm1hdGNoKHBhdHRlcm4pO1xyXG4gICAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMV0pIHtcclxuICAgICAgICByZXR1cm4gbWF0Y2hbMV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgb3Blbkluc3RydWN0aW9uc0RpYWxvZyhzZWN0aW9uOiBRdWVzdGlvblBhcGVyU2VjdGlvbikge1xyXG4gICAgdGhpcy5kaWFsb2cub3BlbihTZWN0aW9uSW5zdHJ1Y3Rpb25zQ29tcG9uZW50LCB7XHJcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgIG1heFdpZHRoOiAnOTUlJyxcclxuICAgICAgd2lkdGg6ICdjYWxjKDIwcmVtICsgNTAwcHgpJyxcclxuICAgICAgbWF4SGVpZ2h0OiAnOTVkdmgnLFxyXG4gICAgICBwYW5lbENsYXNzOiBbJ2Fzc2Vzc21lbnQtZGlhbG9nJ10sXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBpbWFnZUNvbmZpZzogdGhpcy5pbWFnZUNvbmZpZyxcclxuICAgICAgICBsYWJlbENvbmZpZzogdGhpcy5sYWJlbENvbmZpZyxcclxuICAgICAgICBzZWN0aW9uRGV0YWlsczogc2VjdGlvbixcclxuICAgICAgICB5b3V0dWJlVXJsQ2FjaGU6IHRoaXMueW91dHViZVVybENhY2hlXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNoZWNrTWF4VmFsKGV2ZW50OiBhbnksIGNvbnRyb2w6IGFueSwgbWF4VmFsOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcclxuICAgIGNvbnN0IHRvdGFsTWFya3MgPSBOdW1iZXIobWF4VmFsKSB8fCAwO1xyXG4gICAgaWYgKHRvdGFsTWFya3MgPiAwKSB7XHJcbiAgICAgIGxldCB2YWwgPSBOdW1iZXIoZXZlbnQudGFyZ2V0LnZhbHVlKTtcclxuICAgICAgaWYgKHZhbCA+IHRvdGFsTWFya3MpIHtcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSB0b3RhbE1hcmtzO1xyXG4gICAgICAgIGNvbnRyb2w/LnNldFZhbHVlKHRvdGFsTWFya3MsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJldmVudE5lZ2F0aXZlSW5wdXQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmIChbJy0nLCAnKycsICdlJywgJ0UnXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuUHJvY3RvcmluZ1Jlc3VsdCgpIHtcclxuICAgIHRoaXMuZGlhbG9nLm9wZW4oUHJvY3RvcmluZ1Jlc3VsdENvbXBvbmVudCwge1xyXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICBwb3NpdGlvbjogeyByaWdodDogJzAnIH0sXHJcbiAgICAgIG1heFdpZHRoOiAnMTAwJScsXHJcbiAgICAgIHdpZHRoOiAnMzRyZW0nLFxyXG4gICAgICBoZWlnaHQ6ICcxMDBkdmgnLFxyXG4gICAgICBtYXhIZWlnaHQ6ICcxMDBkdmgnLFxyXG4gICAgICBwYW5lbENsYXNzOiBbJ2Fzc2Vzc21lbnQtZGlhbG9nJywgJ2Fzc2Vzc21lbnQtZGlhbG9nLXNsaWRlci1hbmltYXRpb24nXSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBsYWJlbENvbmZpZzogdGhpcy5sYWJlbENvbmZpZyxcclxuICAgICAgICBpbWFnZUNvbmZpZzogdGhpcy5pbWFnZUNvbmZpZyxcclxuICAgICAgICBhc3Nlc3NlZUlkOiB0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmlkIHx8IHRoaXMuYXNzZXNzZWVEYXRhPy5pZCxcclxuICAgICAgICBhc3Nlc3NlZU5hbWU6IHRoaXMuYXNzZXNzZWVEYXRhPy5uYW1lXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb3BlblNraWxsQWxsb2NhdGlvbkRpYWxvZyhza2lsbExpc3Q/OiBTa2lsbFNjb3JlW10pIHtcclxuICAgIHRoaXMuZGlhbG9nLm9wZW4oU2tpbGxBbGxvY2F0aW9uQ29tcG9uZW50LCB7XHJcbiAgICAgIG1heEhlaWdodDogJzk1ZHZoJyxcclxuICAgICAgbWF4V2lkdGg6ICc5MHZ3JyxcclxuICAgICAgd2lkdGg6ICczNXJlbScsXHJcbiAgICAgIHBhbmVsQ2xhc3M6IFsnYXNzZXNzbWVudC1kaWFsb2cnXSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGxhYmVsOiB0aGlzLmxhYmVsQ29uZmlnLFxyXG4gICAgICAgIHNraWxsTGlzdFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICAvLyB0aW1lclxyXG4gIHN0YXJ0VGltZXIoZHVyYXRpb25JblNlY29uZHM6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMudGltZXJJbnRlcnZhbCkge1xyXG4gICAgICBjbGVhckludGVydmFsKHRoaXMudGltZXJJbnRlcnZhbCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbWFpbmluZ1RpbWUgPSBOdW1iZXIoZHVyYXRpb25JblNlY29uZHMpO1xyXG4gICAgdGhpcy51cGRhdGVEaXNwbGF5VGltZSgpO1xyXG5cclxuICAgIHRoaXMudGltZXJJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMucmVtYWluaW5nVGltZSA+IDApIHtcclxuICAgICAgICB0aGlzLnJlbWFpbmluZ1RpbWUtLTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlUaW1lKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hdXRvU3VibWl0KCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRGlzcGxheVRpbWUoKSB7XHJcbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcih0aGlzLnJlbWFpbmluZ1RpbWUgLyA2MCk7XHJcbiAgICBjb25zdCBzZWNvbmRzID0gdGhpcy5yZW1haW5pbmdUaW1lICUgNjA7XHJcbiAgICBjb25zdCBwYWRkZWRNaW51dGVzID0gU3RyaW5nKG1pbnV0ZXMpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICBjb25zdCBwYWRkZWRTZWNvbmRzID0gU3RyaW5nKHNlY29uZHMpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICB0aGlzLmRpc3BsYXlUaW1lID0gYCR7cGFkZGVkTWludXRlc306JHtwYWRkZWRTZWNvbmRzfWA7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBhdXRvU3VibWl0KCkge1xyXG4gICAgaWYgKHRoaXMudGltZXJJbnRlcnZhbCkge1xyXG4gICAgICBjbGVhckludGVydmFsKHRoaXMudGltZXJJbnRlcnZhbCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbWFpbmluZ1RpbWUgPSAwO1xyXG4gICAgdGhpcy50aW1lRXhwaXJlZCA9IHRydWU7XHJcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXlUaW1lKCk7XHJcbiAgICB0aGlzLmRpc2FibGVGb3JtKCk7XHJcbiAgICB0aGlzLmlzQXV0b1N1Ym1pdHRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zYXZlKCk7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlRm9ybSgpIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcz8uZm9yRWFjaChncm91cCA9PiB7XHJcbiAgICAgIE9iamVjdC5rZXlzKGdyb3VwPy5mb3JtR3JvdXA/LmNvbnRyb2xzKT8uZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZU1hcmtzICYmIGtleS5lbmRzV2l0aCgnX21hcmtzJykpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ3JvdXA/LmZvcm1Hcm91cD8uY29udHJvbHM/LltrZXldPy5kaXNhYmxlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5U2VjdGlvbklkKGluZGV4OiBudW1iZXIsIHNlY3Rpb246IGFueSkge1xyXG4gICAgcmV0dXJuIHNlY3Rpb24/LmlkICE9IG51bGwgPyAncycgKyBzZWN0aW9uLmlkIDogJ2knICsgaW5kZXg7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5U2VjdGlvblF1ZXN0aW9uKGluZGV4OiBudW1iZXIsIHNxOiBhbnkpIHtcclxuICAgIGlmIChzcT8ucXVlc3Rpb25JZCAhPSBudWxsKSByZXR1cm4gJ3EnICsgc3EucXVlc3Rpb25JZDtcclxuICAgIGlmIChzcT8uaWQgIT0gbnVsbCkgcmV0dXJuICdzJyArIHNxLmlkO1xyXG4gICAgcmV0dXJuICdpJyArIGluZGV4O1xyXG4gIH1cclxuXHJcbiAgdHJhY2tCeU9wdGlvbklkKGluZGV4OiBudW1iZXIsIG9wdGlvbjogYW55KSB7XHJcbiAgICByZXR1cm4gb3B0aW9uPy5vcHRpb25zPy5pZCAhPSBudWxsID8gJ28nICsgb3B0aW9uLm9wdGlvbnMuaWQgOiAnaScgKyBpbmRleDtcclxuICB9XHJcblxyXG4gIHRyYWNrQnlDaGlsZElkKGluZGV4OiBudW1iZXIsIGlkOiBhbnkpIHtcclxuICAgIHJldHVybiBpZCAhPSBudWxsID8gJ2MnICsgaWQgOiAnaScgKyBpbmRleDtcclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImNvbmZpZ3NMb2FkZWQgJiYgIXNob3dMb2FkZXI7IGVsc2UgbG9hZGVyXCIgY2xhc3M9XCJjb2wtMTIgaC0xMDBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgaC0xMDAgcHQtMiBwYi00XCIgW2NsYXNzLmhlaWdodC13aXRob3V0LWZvb3Rlcl09XCJzaG93Rm9vdGVyXCI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInByZXZpZXdNb2RlICYmIGlzUHJvY3RvcmluZ0VuYWJsZWQgJiYgKGFzc2Vzc2VlUmVzcG9uc2U/LmlkIHx8IGFzc2Vzc2VlRGF0YT8uaWQpXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtYi0zXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvcGVuUHJvY3RvcmluZ1Jlc3VsdCgpXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBhc3Nlc3NtZW50LWJ1dHRvbi1wYWRkaW5nIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1idG4tcHJpbWFyeS10cmFuc3BhcmVudCBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5QUk9DVE9SSU5HJ11cIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9wcm9jdG9yaW5nLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgIHt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5WSUVXX1JFUE9SVCddIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gRnVsbC1zY3JlZW4gaW50cm8gZ2F0ZSDigJQgcXVlc3Rpb25zIHN0YXkgaGlkZGVuIHVudGlsIHByb2NlZWQgLS0+XHJcbiAgICAgICAgPGxpYi1wcm9jdG9yaW5nLWNvbnNlbnQgKm5nSWY9XCJpbnRyb0FjdGl2ZVwiIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiXHJcbiAgICAgICAgICAgIFtwcm9jdG9yaW5nRW5hYmxlZF09XCJpc1Byb2N0b3JpbmdFbmFibGVkXCIgW3JlcXVpcmVDYXB0dXJlXT1cInJlcXVpcmVSZWZlcmVuY2VDYXB0dXJlXCJcclxuICAgICAgICAgICAgW3NlY3Rpb25Db3VudF09XCJ0b3RhbFNlY3Rpb25Db3VudFwiIFtxdWVzdGlvbkNvdW50XT1cInRvdGFsUXVlc3Rpb25Db3VudFwiXHJcbiAgICAgICAgICAgIFtkdXJhdGlvblNlY29uZHNdPVwiYXNzZXNzbWVudER1cmF0aW9uU2Vjb25kc1wiXHJcbiAgICAgICAgICAgIFtjb25maXJtQWN0aW9uXT1cInN0YXJ0U2Vzc2lvbkFjdGlvblwiIChwcm9jZWVkZWQpPVwib25JbnRyb1Byb2NlZWRlZCgpXCI+XHJcbiAgICAgICAgPC9saWItcHJvY3RvcmluZy1jb25zZW50PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnRJbnN0YW5jZURUTz8uZHVyYXRpb24gJiYgIXByZXZpZXdNb2RlICYmICFpbnRyb0FjdGl2ZSAmJiAoIWRpc2FibGVkIHx8IHRpbWVFeHBpcmVkKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtbWQtMyBnYXAtMiBweC0zIHB5LTIgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBtYi00IHRpbWVyLWNvbnRhaW5lciBhc3Nlc3NtZW50LWJnLXBhbGV0dGUtRkVGMUU4XCI+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTE4IGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlbiBtYi0wXCI+e3tkaXNwbGF5VGltZX19PC9wPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlbiBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEyIG1iLTBcIj5cclxuICAgICAgICAgICAgICAgIHt7IHRpbWVFeHBpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgPyBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlRJTUVSX0VYUElSRUQnXVxyXG4gICAgICAgICAgICAgICAgICAgIDogbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5USU1FUl9BVVRPX1NVQk1JVCddIH19PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8ubGVuZ3RoICYmICFpbnRyb0FjdGl2ZVwiPlxyXG4gICAgICAgICAgICA8bWF0LXRhYi1ncm91cCAqbmdJZj1cIiF2ZXJ0aWNhbFZpZXdcIiBhbmltYXRpb25EdXJhdGlvbj1cIjBtc1wiIGNsYXNzPVwiYXNzZXNzbWVudC1tYXQtY3VzdG9tLXRhYnNcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhc3Nlc3NtZW50LWhpZGUtdGFicyc6IGhpZGVTZWN0aW9uVGFic31cIiBbKHNlbGVjdGVkSW5kZXgpXT1cInNlbGVjdGVkVGFiSW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtdGFiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdCB8IG9yZGVyQnk7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlTZWN0aW9uSWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzaG91bGREaXNhYmxlVGFiKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlY3Rpb25FcnJvcnNbaV0gPyAnYXNzZXNzbWVudC10ZXh0LWRhbmdlcicgOiAnJ1wiPnt7c2VjdGlvbi5xcHNOYW1lPy5bMF0/LnRleHR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VjdGlvbkNvbnRlbnQ7IGNvbnRleHQ6IHsgc2VjdGlvbjogc2VjdGlvbiwgaTogaSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD5cclxuXHJcbiAgICAgICAgICAgIDxtYXQtYWNjb3JkaW9uICpuZ0lmPVwidmVydGljYWxWaWV3XCIgbXVsdGk9XCJ0cnVlXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdCB8IG9yZGVyQnk7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlTZWN0aW9uSWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtleHBhbmRlZF09XCJleHBhbmRlZFN0YXRlW2ldICE9PSBmYWxzZVwiIChvcGVuZWQpPVwiZXhwYW5kZWRTdGF0ZVtpXSA9IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbG9zZWQpPVwiZXhwYW5kZWRTdGF0ZVtpXSA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gc2hhZG93LW5vbmUgbS0wIGFzc2Vzc21lbnQtcGFuZWwgYmctdHJhbnNwYXJlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY2xhc3M9XCJhc3Nlc3NtZW50LWJnLWdyZXktdHdvIGgtYXV0byBhc3Nlc3NtZW50LXBhbmVsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtMiBjb2wtMTIgcGUtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlY3Rpb25FcnJvcnNbaV0gPyAnYXNzZXNzbWVudC10ZXh0LWRhbmdlcicgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VjdGlvbi5xcHNOYW1lPy5bMF0/LnRleHR9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VjdGlvbldpc2VTY29yZT8uW3NlY3Rpb24/LmlkXSBhcyBzZWN0aW9uU2NvcmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKHNlY3Rpb25TY29yZT8udG90YWxNYXJrcyA/PyAwKSA+IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgYXNzZXNzbWVudC10ZXh0LXByaW1hcnktZm91clwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIihzZWN0aW9uU2NvcmU/LnNraWxsU2NvcmVzPy5sZW5ndGggPz8gMCkgPiAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMSBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW4gcHgtMiBweS0xIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gc2tpbGwtY2hpcCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvcGVuU2tpbGxBbGxvY2F0aW9uRGlhbG9nKHNlY3Rpb25TY29yZT8uc2tpbGxTY29yZXMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3NlY3Rpb25TY29yZT8uc2tpbGxTY29yZXM/Lmxlbmd0aH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuU0tJTExTJ119fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwid2hpdGUtc3BhY2Utbm93cmFwIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE1IG1lLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuU0NPUkUnXX19Ojwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VjdGlvblNjb3JlLm9idGFpbmVkTWFya3MgfHwgMH19L3t7c2VjdGlvblNjb3JlLnRvdGFsTWFya3N9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInNlY3Rpb25Db250ZW50OyBjb250ZXh0OiB7IHNlY3Rpb246IHNlY3Rpb24sIGk6IGkgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICAgICAgICA8L21hdC1hY2NvcmRpb24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaC0xMDAgZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0zXCI+XHJcbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uTk9fUVVFU1RJT05TJ11cIiBjbGFzcz1cImNvbC1zbS1hdXRvIGNvbC02XCJcclxuICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9uby1xdWVzdGlvbnMuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE4XCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk5PX1FVRVNUSU9OUyddfX08L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd092ZXJhbGxSZW1hcmtzICYmIGFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5sZW5ndGhcIiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE1IG1iLTJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuT1ZFUkFMTF9SRU1BUktTJ119fTwvcD5cclxuICAgICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMyBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgb3V0bGluZS0wIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIlxyXG4gICAgICAgICAgICAgICAgcm93cz1cIjNcIiBbZm9ybUNvbnRyb2xdPVwib3ZlcmFsbE5vdGVzQ3RybFwiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5SRU1BUktTJ11cIj48L3RleHRhcmVhPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2hvd0Zvb3RlciAmJiAhaW50cm9BY3RpdmVcIlxyXG4gICAgICAgIGNsYXNzPVwiYmctd2hpdGUgcC0zIHBvc2l0aW9uLXN0aWNreSBib3R0b20tMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1lbmQgYm9yZGVyLXRvcCBnYXAtMyB6LWluZGV4LTFcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmctbGFyZ2UgYXNzZXNzbWVudC1idG4tcHJpbWFyeS10cmFuc3BhcmVudCBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTNcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZ29CYWNrKClcIiAqbmdJZj1cInNlbGVjdGVkVGFiSW5kZXggPiAwICYmICF2ZXJ0aWNhbFZpZXdcIj5cclxuICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkdPX0JBQ0snXX19PC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNTdWJtaXR0aW5nIHx8IChkaXNhYmxlZCAmJiAhZW5hYmxlTWFya3MgJiYgIXNob3dPdmVyYWxsUmVtYXJrcykgfHwgaXNDaGVja2luZ0xpbmtcIiAoY2xpY2spPVwidmVydGljYWxWaWV3ID8gZ29OZXh0KHRydWUpIDogZ29OZXh0KClcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWJ1dHRvbi1wYWRkaW5nLWxhcmdlIGFzc2Vzc21lbnQtYnRuLXByaW1hcnkgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEzIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInsnb3BhY2l0eS0wJzogaXNTdWJtaXR0aW5nfVwiPlxyXG4gICAgICAgICAgICAgICAge3sgKHZlcnRpY2FsVmlldyB8fCBzZWxlY3RlZFRhYkluZGV4ID09PSBzZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGggLSAxKSA/XHJcbiAgICAgICAgICAgICAgICBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlNVQk1JVCddIDogbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5ORVhUJ10gfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJpc1N1Ym1pdHRpbmdcIiBbZGlhbWV0ZXJdPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSB0b3AtNTAgc3RhcnQtNTAgdHJhbnNsYXRlLW1pZGRsZSBhc3Nlc3NtZW50LXNwaW5uZXItd2hpdGVcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNsb2FkZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaC0xMDAgY29sLTEyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBweS01XCI+XHJcbiAgICAgICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNjBcIiBjbGFzcz1cImFzc2Vzc21lbnQtc3Bpbm5lci1wcmltYXJ5XCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBSZWN1cnNpdmUgVGVtcGxhdGUgZm9yIFF1ZXN0aW9ucyAmIENoaWxkIFF1ZXN0aW9ucyAtLT5cclxuPG5nLXRlbXBsYXRlICNxdWVzdGlvblRlbXBsYXRlIGxldC1xdWVzdGlvbklkPVwicXVlc3Rpb25JZFwiIGxldC1pc01hbmRhdG9yeT1cImlzTWFuZGF0b3J5XCIgbGV0LWdyb3VwSW5kZXg9XCJncm91cEluZGV4XCJcclxuICAgIGxldC1wYXJlbnRPcHRpb25JZD1cInBhcmVudE9wdGlvbklkXCIgbGV0LXBhcmVudFF1ZXN0aW9uSWQ9XCJwYXJlbnRRdWVzdGlvbklkXCIgbGV0LXNlcXVlbmNlPVwic2VxdWVuY2VcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJzZWN0aW9uRm9ybUdyb3Vwc1tncm91cEluZGV4XS5mb3JtR3JvdXAgYXMgZm9ybUdyb3VwXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxyXG4gICAgICAgIFtpZF09XCIncXVlc3Rpb24tY29udGFpbmVyLScgKyBxdWVzdGlvbklkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1iZy13aGl0ZVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsncC0zIGFzc2Vzc21lbnQtY2FyZC1ib3JkZXInOiAhcGFyZW50T3B0aW9uSWR9XCIgKm5nSWY9XCJxdWVzdGlvbkJhbmtbcXVlc3Rpb25JZF0gYXMgcXVlc3Rpb25cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LW1kLXJvdyBmbGV4LWNvbHVtbiBnYXAtMiBhbGlnbi1pdGVtcy1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIGQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCBnYXAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xNSB0ZXh0LW5vd3JhcCBkLW1kLWJsb2NrIGQtbm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VxdWVuY2VcIj57e3NlcXVlbmNlfX0uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yIGFsaWduLWl0ZW1zLXN0YXJ0IGNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE1IG1iLTAgZC1mbGV4IGdhcC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySHRtbF09XCJxdWVzdGlvbi5xdWVzdGlvblRleHQ/LlswXT8udGV4dFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNNYW5kYXRvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTEgYXNzZXNzbWVudC10ZXh0LWdyZXktZWlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoe3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BTkRBVE9SWSddfX0pPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIGNvbC0xMlwiICpuZ0lmPVwicXVlc3Rpb24/Lm1lZGlhVXJsPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJWaWRlb1RlbXBsYXRlOyBjb250ZXh0Ont2aWRlb1VybDpxdWVzdGlvbj8ubWVkaWFVcmx9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5oaW50VGV4dD8ubGVuZ3RoICYmICFwcmV2aWV3TW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uSU5GTyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2luZm8uc3ZnJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtPdmVybGF5T3JpZ2luICN0cmlnZ2VyPVwiY2RrT3ZlcmxheU9yaWdpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInRvb2x0aXBTdGF0ZVtxdWVzdGlvbi5pZCFdID0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cInRvb2x0aXBTdGF0ZVtxdWVzdGlvbi5pZCFdID0gZmFsc2VcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrQ29ubmVjdGVkT3ZlcmxheSBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cInRvb2x0aXBTdGF0ZVtxdWVzdGlvbi5pZCFdIHx8IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnNdPVwiW3sgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ2NlbnRlcicsIG92ZXJsYXlYOiAnZW5kJywgb3ZlcmxheVk6ICdjZW50ZXInLCBvZmZzZXRYOiAtOCwgb2Zmc2V0WTogMCB9LCB7IG9yaWdpblg6ICdlbmQnLCBvcmlnaW5ZOiAnY2VudGVyJywgb3ZlcmxheVg6ICdzdGFydCcsIG92ZXJsYXlZOiAnY2VudGVyJywgb2Zmc2V0WDogOCwgb2Zmc2V0WTogMCB9XVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC1iZy1ncmV5LXR3byBhc3Nlc3NtZW50LXRvb2x0aXAtYm9yZGVyIHAtMyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtYm94LXNoYWRvdy10b29sdGlwIHF1ZXN0aW9uLWluZm8gYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwidG9vbHRpcFN0YXRlW3F1ZXN0aW9uLmlkIV0gPSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cInRvb2x0aXBTdGF0ZVtxdWVzdGlvbi5pZCFdID0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJxdWVzdGlvbi5oaW50VGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBhbnN3ZXIgZmllbGQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcmV2aWV3TW9kZSAmJiAhaXNNb2JpbGVcIiBjbGFzcz1cIm10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImFuc3dlckZpZWxkOyBjb250ZXh0OiB7cXVlc3Rpb246IHF1ZXN0aW9uLHByZXZpZXdNb2RlOiBwcmV2aWV3TW9kZSxpc01hbmRhdG9yeTogaXNNYW5kYXRvcnksZ3JvdXBJbmRleDogZ3JvdXBJbmRleCxwYXJlbnRPcHRpb25JZDogcGFyZW50T3B0aW9uSWQscGFyZW50UXVlc3Rpb25JZDogcGFyZW50UXVlc3Rpb25JZH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIGFuc3dlciBmaWVsZCAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc01vYmlsZVwiIGNsYXNzPVwiY29sLTEyIG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYW5zd2VyRmllbGQ7IGNvbnRleHQ6IHtxdWVzdGlvbjogcXVlc3Rpb24scHJldmlld01vZGU6IHByZXZpZXdNb2RlLGlzTWFuZGF0b3J5OiBpc01hbmRhdG9yeSxncm91cEluZGV4OiBncm91cEluZGV4LHBhcmVudE9wdGlvbklkOiBwYXJlbnRPcHRpb25JZCxwYXJlbnRRdWVzdGlvbklkOiBwYXJlbnRRdWVzdGlvbklkfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBBc3Nlc3NvciBNYXJrcyBMb2dpYyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhc3Nlc3NtZW50LW1hcmtzLWZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImVuYWJsZU1hcmtzICYmIHNob3VsZFNob3dNYXJrc0Ryb3Bkb3duKHF1ZXN0aW9uKSAmJiBmb3JtR3JvdXAuZ2V0KHF1ZXN0aW9uLmlkICsgJ19tYXJrcycpIGFzIG1hcmtzQ29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQVJLUyddfX0oTWF4OiB7e3F1ZXN0aW9uLndlaWdodH19KTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IChrZXlkb3duKT1cInByZXZlbnROZWdhdGl2ZUlucHV0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiY2hlY2tNYXhWYWwoJGV2ZW50LCBtYXJrc0NvbnRyb2wsIHF1ZXN0aW9uPy53ZWlnaHQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gcHgtMiBweS0xIG91dGxpbmUtMCBhc3Nlc3NtZW50LWJnLWdyZXktb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkICsgJ19tYXJrcydcIiB0eXBlPVwibnVtYmVyXCIgbWluPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICh3aGVlbCk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBhbnN3ZXIgZmllbGQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcHJldmlld01vZGUgJiYgIWlzTW9iaWxlXCIgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhbnN3ZXJGaWVsZDsgY29udGV4dDoge3F1ZXN0aW9uOiBxdWVzdGlvbixwcmV2aWV3TW9kZTogcHJldmlld01vZGUsaXNNYW5kYXRvcnk6IGlzTWFuZGF0b3J5LGdyb3VwSW5kZXg6IGdyb3VwSW5kZXgscGFyZW50T3B0aW9uSWQ6IHBhcmVudE9wdGlvbklkLHBhcmVudFF1ZXN0aW9uSWQ6IHBhcmVudFF1ZXN0aW9uSWR9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBDaGlsZCBRdWVzdGlvbnMgYW5kIFJlbWFya3MgUmVuZGVyaW5nIExvZ2ljIGJhc2VkIG9uIGNoZWNrZWQgZm9ybSBzdGF0ZSAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdD8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcXVlc3Rpb24uZGVmYXVsdE9wdGlvbnNMaXN0OyB0cmFja0J5OiB0cmFja0J5T3B0aW9uSWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzT3B0aW9uU2VsZWN0ZWQoZm9ybUdyb3VwLCBxdWVzdGlvbiwgb3B0aW9uLm9wdGlvbnM/LmlkKVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSRU1BUktTIEZJRUxEIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi5yZW1hcmtzUmVxdWlyZWQgJiYgZm9ybUdyb3VwLmdldChxdWVzdGlvbi5pZCArICdfcmVtYXJrc18nICsgb3B0aW9uLmlkKSBhcyByZW1hcmtzQ29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xNSBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlJFTUFSS1MnXX19PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhICpuZ0lmPVwiIXByZXZpZXdNb2RlXCIgZm9ybUNvbnRyb2xOYW1lPVwie3txdWVzdGlvbi5pZH19X3JlbWFya3Nfe3tvcHRpb24uaWR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cz1cIjJcIiBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5SRU1BUktTJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJlbWFya3NDb250cm9sLmludmFsaWQgJiYgcmVtYXJrc0NvbnRyb2wudG91Y2hlZCA/ICdhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1pbnZhbGlkJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMyBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgb3V0bGluZS0wIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByZXZpZXdNb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS1uaW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJlbWFya3NDb250cm9sLnZhbHVlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJlbWFya3NDb250cm9sLmludmFsaWQgJiYgcmVtYXJrc0NvbnRyb2wudG91Y2hlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5GSUVMRF9SRVFVSVJFRCddfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ0hJTEQgUVVFU1RJT05TIFJFQ1VSU0lPTiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtdC00IGQtZmxleCBmbGV4LWNvbHVtbiBnYXAtM1wiICpuZ0lmPVwib3B0aW9uLmNoaWxkUXVlc3Rpb25MaXN0Py5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaWxkSWQgb2Ygb3B0aW9uLmNoaWxkUXVlc3Rpb25MaXN0OyBsZXQgY2hpbGRJbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Q2hpbGRJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJxdWVzdGlvblRlbXBsYXRlOyBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBjaGlsZElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNNYW5kYXRvcnk6IHF1ZXN0aW9uQmFua1tjaGlsZElkXT8uaXNNYW5kYXRvcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cEluZGV4OiBncm91cEluZGV4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50T3B0aW9uSWQ6IG9wdGlvbi5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6IHF1ZXN0aW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VxdWVuY2U6IHNlcXVlbmNlICsgJy4nICsgKGNoaWxkSW5kZXggKyAxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBhbnN3ZXIgZmllbGQgdGVtcGxhdGUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjYW5zd2VyRmllbGQgbGV0LXF1ZXN0aW9uPVwicXVlc3Rpb25cIiBsZXQtcHJldmlld01vZGU9XCJwcmV2aWV3TW9kZVwiIGxldC1pc01hbmRhdG9yeT1cImlzTWFuZGF0b3J5XCJcclxuICAgIGxldC1ncm91cEluZGV4PVwiZ3JvdXBJbmRleFwiIGxldC1wYXJlbnRPcHRpb25JZD1cInBhcmVudE9wdGlvbklkXCIgbGV0LXBhcmVudFF1ZXN0aW9uSWQ9XCJwYXJlbnRRdWVzdGlvbklkXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2VjdGlvbkZvcm1Hcm91cHNbZ3JvdXBJbmRleF0uZm9ybUdyb3VwXCIgW2Zvcm1Hcm91cF09XCJzZWN0aW9uRm9ybUdyb3Vwc1tncm91cEluZGV4XS5mb3JtR3JvdXBcIlxyXG4gICAgICAgIGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwicXVlc3Rpb24ucXVlc3Rpb25UeXBlPy5jb2RlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLlNVQkpFQ1RJVkVfU0hPUlQnXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIiBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuU1VCSkVDVElWRV9MT05HJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLWxvbmcgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIiBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtbG9uZz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5TVUJKRUNUSVZFX1JJQ0hfVEVYVCdcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1lZGl0b3IgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsQ29uZmlnXT1cImxhYmVsQ29uZmlnXCI+PC9saWItcXVlc3Rpb24tdHlwZS1lZGl0b3I+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuT0JKRUNUSVZFJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLW9iamVjdGl2ZSBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzTWFuZGF0b3J5XCIgW3Nob3dDb3JyZWN0QW5zd2Vyc109XCJzaG93Q29ycmVjdEFuc3dlcnNcIiBbaW1hZ2VDb25maWddPVwiaW1hZ2VDb25maWdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthbnN3ZXJPYmpdPVwiZ2V0UXVlc3Rpb25BbnN3ZXJPYmoocXVlc3Rpb24uaWQhLCBwYXJlbnRPcHRpb25JZCwgcGFyZW50UXVlc3Rpb25JZClcIj48L2xpYi1xdWVzdGlvbi10eXBlLW9iamVjdGl2ZT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5NVUxUSV9TRUxFQ1QnXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtbXVsdGlzZWxlY3QgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiIFtzaG93Q29ycmVjdEFuc3dlcnNdPVwic2hvd0NvcnJlY3RBbnN3ZXJzXCIgW2ltYWdlQ29uZmlnXT1cImltYWdlQ29uZmlnXCJcclxuICAgICAgICAgICAgICAgICAgICBbYW5zd2VyT2JqXT1cImdldFF1ZXN0aW9uQW5zd2VyT2JqKHF1ZXN0aW9uLmlkISwgcGFyZW50T3B0aW9uSWQsIHBhcmVudFF1ZXN0aW9uSWQpXCI+PC9saWItcXVlc3Rpb24tdHlwZS1tdWx0aXNlbGVjdD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5QUkVGRVJFTkNFJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLXByZWZlcmVuY2UgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiPjwvbGliLXF1ZXN0aW9uLXR5cGUtcHJlZmVyZW5jZT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5OVU1CRVInXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIiBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuRU1BSUwnXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIiBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuQ09OVEFDVF9OVU1CRVInXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIiBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuVVJMJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLXNob3J0IFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCIgW3JlcXVpcmVkXT1cImlzTWFuZGF0b3J5XCJcclxuICAgICAgICAgICAgICAgICAgICBbcHJldmlld01vZGVdPVwicHJldmlld01vZGVcIiBbbGFiZWxDb25maWddPVwibGFiZWxDb25maWdcIj48L2xpYi1xdWVzdGlvbi10eXBlLXNob3J0PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLkZJTEVfVVBMT0FEJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLWZpbGUtdXBsb2FkIFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFthc3Nlc3NtZW50SW5zdGFuY2VJZF09XCJhc3Nlc3NtZW50SW5zdGFuY2VJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIiBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIiBbbGFiZWxDb25maWddPVwibGFiZWxDb25maWdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpbWFnZUNvbmZpZ109XCJpbWFnZUNvbmZpZ1wiIChzbmFja2Jhck1lc3NhZ2UpPVwic25hY2tiYXJNZXNzYWdlLmVtaXQoJGV2ZW50KVwiPjwvbGliLXF1ZXN0aW9uLXR5cGUtZmlsZS11cGxvYWQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuREFURV9QSUNLRVInXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtZGF0ZS1waWNrZXIgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsQ29uZmlnXT1cImxhYmVsQ29uZmlnXCI+PC9saWItcXVlc3Rpb24tdHlwZS1kYXRlLXBpY2tlcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gRXJyb3IgTWVzc2FnZXMgYW5kIENoYXJhY3RlciBDb3VudCBDb250YWluZXIgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAqbmdJZj1cIiFwcmV2aWV3TW9kZSAmJiBzZWN0aW9uRm9ybUdyb3Vwc1tncm91cEluZGV4XS5mb3JtR3JvdXAuZ2V0KHF1ZXN0aW9uLmlkPy50b1N0cmluZygpIHx8ICcnKSBhcyBjb250cm9sXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtc3RhcnQgbXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmVycm9ycz8uWydyZXF1aXJlZCddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRF9SRVNQT05TRSddfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzPy5bJ3BhdHRlcm4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3F1ZXN0aW9uPy52YWxpZGF0aW9uTWVzc2FnZSB8fCBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLklOVkFMSURfRk9STUFUJ119fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnM/LlsncHJpdmF0ZUdkcml2ZUxpbmsnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUFJJVkFURV9EUklWRV9MSU5LJ119fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnM/LlsnbWlubGVuZ3RoJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLk1JTl9DSEFSUyddPy5yZXBsYWNlKCd7e2xlbmd0aH19JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5lcnJvcnM/LlsnbWlubGVuZ3RoJ10ucmVxdWlyZWRMZW5ndGggKyAnJyl9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnM/LlsnbWF4bGVuZ3RoJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLk1BWF9DSEFSUyddPy5yZXBsYWNlKCd7e2xlbmd0aH19JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5lcnJvcnM/LlsnbWF4bGVuZ3RoJ10ucmVxdWlyZWRMZW5ndGggKyAnJyl9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnM/LlsnbWluT3B0aW9ucyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5NSU5fT1BUSU9OUyddPy5yZXBsYWNlKCd7e2NvdW50fX0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLmVycm9ycz8uWydtaW5PcHRpb25zJ10ucmVxdWlyZWQgKyAnJyl9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnM/LlsnbWF4T3B0aW9ucyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5NQVhfT1BUSU9OUyddPy5yZXBsYWNlKCd7e2NvdW50fX0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLmVycm9ycz8uWydtYXhPcHRpb25zJ10ucmVxdWlyZWQgKyAnJyl9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnM/LlsnbWF4RmlsZXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuTUFYX0ZJTEVTJ10/LnJlcGxhY2UoJ3t7Y291bnR9fScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZXJyb3JzPy5bJ21heEZpbGVzJ10ucmVxdWlyZWQgKyAnJyl9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnM/LlsnbWF4RmlsZVNpemUnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuTUFYX0ZJTEVfU0laRSddPy5yZXBsYWNlKCd7e3NpemV9fScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZXJyb3JzPy5bJ21heEZpbGVTaXplJ10ucmVxdWlyZWRTaXplICsgJycpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gd2hpdGUtc3BhY2Utbm93cmFwIG1zLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0TWF4Q2hhckNvdW50KHF1ZXN0aW9uKSA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRSZW1haW5pbmdDaGFycyhxdWVzdGlvbiwgY29udHJvbCkgfX1cclxuICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ0hBUkFDVEVSJ119fXt7Z2V0UmVtYWluaW5nQ2hhcnMocXVlc3Rpb24sIGNvbnRyb2wpICE9PVxyXG4gICAgICAgICAgICAgICAgICAgIDFcclxuICAgICAgICAgICAgICAgICAgICA/ICdzJyA6ICcnfX0ge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlJFTUFJTklORyddfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBSZXVzYWJsZSBTZWN0aW9uIEZvcm0gVGVtcGxhdGUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjc2VjdGlvbkNvbnRlbnQgbGV0LXNlY3Rpb249XCJzZWN0aW9uXCIgbGV0LWk9XCJpXCI+XHJcbiAgICA8Zm9ybSBjbGFzcz1cInctMTAwXCIgKm5nSWY9XCJzZWN0aW9uRm9ybUdyb3Vwc1tpXS5mb3JtR3JvdXBcIiBbZm9ybUdyb3VwXT1cInNlY3Rpb25Gb3JtR3JvdXBzW2ldLmZvcm1Hcm91cFwiXHJcbiAgICAgICAgW25hbWVdPVwiJ3NlY3Rpb25mcm0tJyArIGlcIiBub3ZhbGlkYXRlPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTRcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIiFwcmV2aWV3TW9kZSAmJiAoc2VjdGlvbj8ucXBzRGVzYz8uWzBdPy50ZXh0IHx8IHNlY3Rpb24/Lm1lZGlhVXJsKVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xNCBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5UT1RBTF9RVUVTVElPTlMnXX19OiB7eyBzZWN0aW9uPy50b3RhbFF1ZXN0aW9ucyB8fCAwIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwib3Blbkluc3RydWN0aW9uc0RpYWxvZyhzZWN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gYXNzZXNzbWVudC1idXR0b24tcGFkZGluZyBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYnRuLXByaW1hcnktdHJhbnNwYXJlbnRcIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5WSUVXX0lOU1RSVUNUSU9OUyddfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0zXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNxIG9mIHNlY3Rpb24uc2VjdGlvblF1ZXN0aW9uc0xpc3QgfCBvcmRlckJ5OyBsZXQgaiA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5U2VjdGlvblF1ZXN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicXVlc3Rpb25UZW1wbGF0ZTsgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogc3EucXVlc3Rpb25JZCxcclxuICAgICAgICAgICAgICAgIGlzTWFuZGF0b3J5OiBxdWVzdGlvbkJhbmtbc3EucXVlc3Rpb25JZF0/LmlzTWFuZGF0b3J5LFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBJbmRleDogaSxcclxuICAgICAgICAgICAgICAgIHBhcmVudE9wdGlvbklkOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50UXVlc3Rpb25JZDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHNlcXVlbmNlOiBqICsgMVxyXG4gICAgICAgICAgICB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9mb3JtPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSB2aWRlbyBwcmV2aWV3ICAtLT5cclxuPG5nLXRlbXBsYXRlIGxldC12aWRlb1VybD1cInZpZGVvVXJsXCIgI1ZpZGVvVGVtcGxhdGU+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBvdmVyZmxvdy1oaWRkZW4gY29sLW1kLTEwIGNvbC0xMlwiPlxyXG4gICAgICAgIDx2aWRlbyAqbmdJZj1cInZpZGVvVXJsPy5pbmNsdWRlcygnLm1wNCcpIGVsc2UgeW91dHViZVZpZGVvXCIgd2lkdGg9XCI0MDBcIiBjb250cm9scyBjbGFzcz1cIm13LTEwMCBkLWJsb2NrIG14LWF1dG9cIj5cclxuICAgICAgICAgICAgPHNvdXJjZSBbc3JjXT1cInZpZGVvVXJsXCIgdHlwZT1cInZpZGVvL21wNFwiPlxyXG4gICAgICAgIDwvdmlkZW8+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICN5b3V0dWJlVmlkZW8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ5b3V0dWJlLXZpZGVvIHBvc2l0aW9uLXJlbGF0aXZlIGgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8aWZyYW1lIFtzcmNdPVwiYWRkWW91dHViZUlmcmFtZVNyYyh2aWRlb1VybClcIiB0aXRsZT1cIllvdVR1YmUgdmlkZW8gcGxheWVyXCIgZnJhbWVib3JkZXI9XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICBhbGxvdz1cImFjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBjbGlwYm9hcmQtd3JpdGU7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmU7IHdlYi1zaGFyZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dmdWxsc2NyZWVuIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdG9wLTAgc3RhcnQtMCB3LTEwMCBoLTEwMCBkLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICA8L2lmcmFtZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
1167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtdGFrZXIvYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtdGFrZXIvYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFnQyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0gsT0FBTyxFQUFFLFFBQVEsRUFBYyxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRSxPQUFPLEVBQWUsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSWpGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBS2hILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQy9HLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQ3hILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBRXZHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRakQsTUFBTSxPQUFPLHdCQUF3QjtJQTRJbkMsWUFDVSxzQkFBOEMsRUFDOUMsRUFBZSxFQUNmLHNCQUE4QyxFQUM5QyxTQUF1QixFQUN2QixNQUFpQixFQUNqQixHQUFzQixFQUN0QixpQkFBb0M7UUFOcEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWxKckMsZ0JBQVcsR0FBOEIsRUFBRSxDQUFDO1FBQzVDLGdCQUFXLEdBQThCLEVBQUUsQ0FBQztRQUM1QyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBRzVCLGlCQUFZLEdBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUNyRSxpQkFBWSxHQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDckUsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUVqQyxxQkFBZ0IsR0FBaUMsRUFBRSxDQUFDO1FBQ3BELG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBQ2hDLHFCQUFnQixHQUEwQyxFQUFFLENBQUM7UUFDN0QsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBQ3BDLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUNwQyw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFDekMsZ0NBQTJCLEdBQVksSUFBSSxDQUFDO1FBRzNDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQTJELENBQUM7UUFDOUYscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMzQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBQ2pELHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFekQsZUFBVSxHQUFZLElBQUksQ0FBQztRQUMzQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNaLDZCQUF3QixHQUFHLEtBQUssQ0FBQztRQUNqQywyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFDdkMsaUJBQVksR0FBdUMsRUFBRSxDQUFDO1FBQ3RELGdDQUEyQixHQUE0QixFQUFFLENBQUM7UUFDMUQsbUJBQWMsR0FBZSxFQUFFLENBQUM7UUFDaEMsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0Isa0JBQWEsR0FBUSxJQUFJLENBQUM7UUFDMUIsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFDMUIsZ0JBQVcsR0FBVyxPQUFPLENBQUM7UUFDOUIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0IscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLHNCQUFpQixHQUFrRCxFQUFFLENBQUM7UUFDdEUscUJBQWdCLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkMsa0JBQWEsR0FBYyxFQUFFLENBQUM7UUFDdEIsb0JBQWUsR0FBMkIsRUFBRSxDQUFDO1FBQzdDLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUNwQyxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2Qix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFFNUIsc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBV3RDLGtCQUFhLEdBQWMsRUFBRSxDQUFDO1FBQzlCLGFBQVEsR0FBVyxDQUFDLENBQUM7UUFDckIsaUJBQVksR0FBNEIsRUFBRSxDQUFDO1FBRTNDLGFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztRQThUbkMsNkZBQTZGO1FBQzdGLG9HQUFvRztRQUNwRyx1QkFBa0IsR0FBRyxDQUFDLG9CQUE0QixFQUFtQixFQUFFLENBQ3JFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBOU9oRCxDQUFDO0lBakdMLElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFJLGdCQUFnQixDQUFDLEtBQWE7UUFDaEMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssS0FBSyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7WUFDL0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQVNELFFBQVE7UUFDTixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7OztPQUlHO0lBRUgsY0FBYyxDQUFDLEtBQXdCO1FBQ3JDLElBQUksSUFBSSxDQUFDLDJCQUEyQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO1lBQ2xFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBRUgsVUFBVTtRQUNSLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzVCLHlFQUF5RTtZQUN6RSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUU7WUFDdkQsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBa0IsRUFBRSxFQUFFO1lBQzdELElBQUksU0FBUyxFQUFFO2dCQUNiLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxzQ0FBc0M7YUFDdkQ7aUJBQU07Z0JBQ0wscURBQXFEO2dCQUNyRCxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDO0lBQ3ZFLENBQUM7SUFFRCx3RkFBd0Y7SUFDaEYsWUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUU7WUFDbkQsU0FBUyxFQUFFLEtBQUs7WUFDaEIsUUFBUSxFQUFFLEtBQUs7WUFDZixLQUFLLEVBQUUsT0FBTztZQUNkLFVBQVUsRUFBRSxDQUFDLG1CQUFtQixDQUFDO1lBQ2pDLElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtREFBbUQsQ0FBQztnQkFDNUUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMscURBQXFELENBQUM7Z0JBQ2hGLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGtDQUFrQyxDQUFDO2dCQUNsRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQ0FBaUMsQ0FBQzthQUNqRTtTQUNGLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBWUQsUUFBUTs7UUFDTixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUxQixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLGdCQUFnQiwwQ0FBRSxlQUFlLDBDQUFFLElBQUksTUFBSywyQkFBMkIsRUFBRTtZQUNwRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztTQUN0QjtRQUVELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsaUJBQWlCLDBDQUFFLHFCQUFxQiwwQ0FBRSxFQUFFLG1DQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUMzRyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxpQkFBaUIsMENBQUUsVUFBVSwwQ0FBRSxFQUFFLG1DQUFJLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDakY7UUFFRCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM3QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUMzQjtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDbkM7UUFDRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO1lBQzlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUN2RDtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssb0JBQW9COztRQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQ2pFLE9BQU87U0FDUjtRQUNELE1BQU0sVUFBVSxHQUFHLENBQUEsTUFBQSxJQUFJLENBQUMsZ0JBQWdCLDBDQUFFLEVBQUUsTUFBSSxNQUFBLElBQUksQ0FBQyxZQUFZLDBDQUFFLEVBQUUsQ0FBQSxDQUFDO1FBQ3RFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO1FBQ25DLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDckUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFrQyxDQUFDO1lBQzlDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBc0MsQ0FBQztTQUNwRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLFFBQVEsQ0FBQztZQUNQLFdBQVcsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDO1lBQzFFLFdBQVcsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDO1NBQzNFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFekUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsa0JBQWtCOztRQUNoQixNQUFNLFFBQVEsbUNBQ1QsQ0FBQyxDQUFDLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxpQkFBaUIsMENBQUUsVUFBVSwwQ0FBRSxFQUFFLENBQUEsSUFBSTtZQUM3QyxjQUFjLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHdCQUF3QixDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7U0FDN0csQ0FBQyxHQUNDLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxZQUFZLDBDQUFFLEVBQUUsS0FBSSxDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsZ0JBQWdCLDBDQUFFLEVBQUUsQ0FBQSxJQUFJO1lBQ3pELGdCQUFnQixFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztTQUN0RixDQUFDLENBQ0gsQ0FBQTtRQUNELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzNCLElBQUksRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFOztvQkFDbEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQUEsTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsY0FBYywwQ0FBRyxDQUFDLENBQUMsbUNBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDO29CQUM3RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsZ0JBQWdCLG1DQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDeEUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO2dCQUN2QixDQUFDO2dCQUNELEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDYixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLHdDQUF3QyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7b0JBQ2xILE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFBO2dCQUNoQyxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFRCxjQUFjOztRQUNaLElBQUksQ0FBQywyQkFBMkIsR0FBRyxNQUFBLElBQUksQ0FBQyxpQkFBaUIsMENBQUUsMEJBQTBCLENBQUM7UUFDdEYsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFBLElBQUksQ0FBQyxpQkFBaUIsMENBQUUsVUFBVSxDQUFDO1FBQ3pELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBQSxJQUFJLENBQUMsaUJBQWlCLDBDQUFFLGNBQWMsQ0FBQztRQUMzRCxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxpQkFBaUIsMENBQUUsVUFBVSwwQ0FBRSxRQUFRLG1DQUFJLENBQUMsQ0FBQztRQUVsRSxJQUFJLE1BQUEsSUFBSSxDQUFDLGdCQUFnQiwwQ0FBRSxFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsZ0JBQWdCLDBDQUFFLGVBQWUsMENBQUUsSUFBSSxNQUFLLDJCQUEyQixFQUFFO2dCQUNoRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzthQUN0QjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsZ0JBQWdCLEdBQUc7Z0JBQ3RCLEVBQUUsRUFBRSxDQUFDO2dCQUNMLGtCQUFrQixFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDckQsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUMzQixRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQzNCLHNCQUFzQixFQUFFLEVBQUU7Z0JBQzFCLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUTthQUN0QixDQUFDO1NBQ0g7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEUsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNqQztRQUNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsU0FBUzs7UUFDUCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBRTVCLE1BQUEsV0FBVyxDQUFDLE1BQUEsSUFBSSxDQUFDLDJCQUEyQiwwQ0FBRSx3QkFBd0IsQ0FBQywwQ0FBRSxPQUFPLENBQUMsQ0FBQyxPQUE2QixFQUFFLEVBQUU7O1lBQ2pILE1BQU0sS0FBSyxHQUFRLEVBQUUsQ0FBQztZQUV0QixNQUFBLFdBQVcsQ0FBQyxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsb0JBQW9CLENBQUMsMENBQUUsT0FBTyxDQUFDLENBQUMsRUFBbUIsRUFBRSxFQUFFOztnQkFDMUUsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDO29CQUFFLE9BQU87Z0JBRTVDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxXQUFXLENBQUMsQ0FBQztnQkFFbkUsSUFBSSxNQUFBLFFBQVEsQ0FBQyxrQkFBa0IsMENBQUUsTUFBTSxFQUFFO29CQUN2QyxRQUFRLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7O3dCQUNsRCxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUU7NEJBQzFCLGdFQUFnRTs0QkFDaEUsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDOzRCQUNyQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDdEQsSUFBSSxnQkFBZ0IsRUFBRTtnQ0FDcEIsTUFBTSxNQUFNLEdBQUcsTUFBQSxNQUFBLElBQUksQ0FBQyxnQkFBZ0IsMENBQUUsc0JBQXNCLDBDQUFFLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLFdBQzVFLE9BQUEsQ0FBQSxNQUFBLENBQUMsQ0FBQyxlQUFlLDBDQUFFLFVBQVUsTUFBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDLGVBQWUsS0FBSyxDQUFDLENBQUMsQ0FBQSxFQUFBLENBQ3pGLENBQUM7Z0NBQ0YsSUFBSSxNQUFNLEVBQUU7b0NBQ1YsSUFBSSxDQUFBLE1BQUEsUUFBUSxDQUFDLFlBQVksMENBQUUsSUFBSSxNQUFLLHlCQUF5QixJQUFJLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxNQUFBLE1BQUEsTUFBTSxDQUFDLE9BQU8sMENBQUUsRUFBRSxtQ0FBSSxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQSxnQkFBZ0IsYUFBaEIsZ0JBQWdCLHVCQUFoQixnQkFBZ0IsQ0FBRSxFQUFFLE1BQUssQ0FBQyxNQUFBLE1BQUEsTUFBTSxDQUFDLE9BQU8sMENBQUUsRUFBRSxtQ0FBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTt3Q0FDdkwsU0FBUyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO3FDQUNwQzt5Q0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRTt3Q0FDMUMsTUFBTSxXQUFXLEdBQUcsTUFBQSxNQUFNLENBQUMsdUJBQXVCLDBDQUFFLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLHVCQUFDLE9BQUEsQ0FBQSxNQUFBLE1BQUEsQ0FBQyxDQUFDLGFBQWEsMENBQUUsT0FBTywwQ0FBRSxFQUFFLE1BQUssQ0FBQyxNQUFBLE1BQUEsTUFBTSxDQUFDLE9BQU8sMENBQUUsRUFBRSxtQ0FBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUEsRUFBQSxDQUFDLENBQUM7d0NBQ3pJLElBQUksV0FBVyxFQUFFOzRDQUNmLFNBQVMsR0FBRyxXQUFXLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQzt5Q0FDekM7cUNBQ0Y7aUNBQ0Y7NkJBQ0Y7NEJBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7NEJBQzlDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQ0FDakIsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDOzZCQUN0Qjs0QkFBQSxDQUFDOzRCQUNGLEtBQUssQ0FBQyxHQUFHLEdBQUcsWUFBWSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7eUJBQ25EO3dCQUVELE1BQUEsTUFBTSxDQUFDLGlCQUFpQiwwQ0FBRSxPQUFPLENBQUMsQ0FBQyxPQUFlLEVBQUUsRUFBRTs7NEJBQ3BELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7NEJBQzdDLElBQUksU0FBUyxFQUFFO2dDQUNiLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQUEsTUFBQSxNQUFNLENBQUMsT0FBTywwQ0FBRSxFQUFFLG1DQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQzs2QkFDakc7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWhDLE1BQUEsV0FBVyxDQUFDLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxvQkFBb0IsQ0FBQywwQ0FBRSxPQUFPLENBQUMsQ0FBQyxFQUFtQixFQUFFLEVBQUU7O2dCQUMxRSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO2dCQUMxQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUM7b0JBQUUsT0FBTztnQkFDNUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFeEMsSUFBSSxNQUFBLFFBQVEsQ0FBQyxrQkFBa0IsMENBQUUsTUFBTSxFQUFFO29CQUN2QyxJQUFJLENBQUMsaUNBQWlDLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUNyRCxNQUFBLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLFFBQVEsRUFBRSxDQUFDLDBDQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO3dCQUNuRCxJQUFJLENBQUMsaUNBQWlDLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUN2RCxDQUFDLENBQUMsQ0FBQztpQkFDSjtZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztnQkFDMUIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNyQixTQUFTLEVBQUUsRUFBRTthQUNkLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBRXhCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFO1lBQzVCLHNGQUFzRjtZQUN0RixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUN6QjthQUFNO1lBQ0wsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELElBQUksbUJBQW1COztRQUNyQixPQUFPLENBQUEsTUFBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLGNBQWMsMENBQUUsaUJBQWlCLDBDQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUsseUNBQXlDLENBQUMsMENBQUUsV0FBVyxNQUFLLEdBQUcsQ0FBQztJQUMzSSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssaUJBQWlCO1FBQ3ZCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLENBQUMseUJBQXlCLEdBQUcsQ0FBQyxDQUFDO1FBQ3pGLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUM1RixDQUFDO0lBRUQsNkdBQTZHO0lBQzdHLElBQUksdUJBQXVCOztRQUN6QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxnQkFBZ0IsMENBQUUsRUFBRSxNQUFJLE1BQUEsSUFBSSxDQUFDLFlBQVksMENBQUUsRUFBRSxDQUFBLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7O1FBQ25CLE9BQU8sQ0FBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLDJCQUEyQiwwQ0FBRSx3QkFBd0IsMENBQUUsTUFBTSxLQUFJLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsSUFBSSxrQkFBa0I7O1FBQ3BCLE9BQU8sQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLDJCQUEyQiwwQ0FBRSx3QkFBd0IsS0FBSSxFQUFFLENBQUM7YUFDdEUsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLFdBQUMsT0FBQSxHQUFHLEdBQUcsQ0FBQyxDQUFBLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLG9CQUFvQiwwQ0FBRSxNQUFNLEtBQUksQ0FBQyxDQUFDLENBQUEsRUFBQSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxJQUFJLHlCQUF5Qjs7UUFDM0IsT0FBTyxDQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsaUJBQWlCLDBDQUFFLHFCQUFxQiwwQ0FBRSxRQUFRLEtBQUksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFPRCw4R0FBOEc7SUFDOUcsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQywyQkFBMkIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtZQUNsRSwwREFBMEQ7WUFDMUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssc0JBQXNCLENBQUMsdUJBQStCLEVBQUU7O1FBQzlELE1BQU0sVUFBVSxHQUFHLENBQUEsTUFBQSxJQUFJLENBQUMsZ0JBQWdCLDBDQUFFLEVBQUUsTUFBSSxNQUFBLElBQUksQ0FBQyxZQUFZLDBDQUFFLEVBQUUsQ0FBQSxDQUFDO1FBQ3RFLE1BQU0sUUFBUSxHQUFvQixVQUFVO1lBQzFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEcsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1FBQ3RHLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FDbEIsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7O1lBQ2YsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7Z0JBQ25DLE9BQU87YUFDUjtZQUNELElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUM1Qix3RkFBd0Y7Z0JBQ3hGLE1BQU0sVUFBVSxHQUFzQixNQUFBLEdBQUcsQ0FBQyxVQUFVLG1DQUFJLEdBQUcsQ0FBQztnQkFDNUQsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxnQkFBZ0IsaURBQVEsSUFBSSxDQUFDLGdCQUFnQixHQUFLLGNBQWMsS0FBRSxVQUFVLEdBQUUsQ0FBQztnQkFDcEYsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQzthQUN0QztpQkFBTTtnQkFDTCxrRUFBa0U7Z0JBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsbUNBQVEsSUFBSSxDQUFDLGdCQUFnQixHQUFLLEdBQUcsQ0FBRSxDQUFDO2FBQzlEO1lBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDZixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO2dCQUMvQiw2RUFBNkU7Z0JBQzdFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7b0JBQ3pCLFVBQVUsRUFBRSxNQUFBLElBQUksQ0FBQyxnQkFBZ0IsMENBQUUsRUFBRTtvQkFDckMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtvQkFDdkMsU0FBUyxFQUFFLEtBQUs7aUJBQ2pCLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsNEZBQTRGO1FBQzVGLHFDQUFxQztRQUNyQyxTQUFTLENBQUMsR0FBRyxFQUFFOztZQUFDLE9BQUEsSUFBSSxDQUFDLG1CQUFtQjtnQkFDdEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7b0JBQzdCLFNBQVMsRUFBRSxNQUFBLE1BQUEsSUFBSSxDQUFDLGdCQUFnQiwwQ0FBRSxVQUFVLDBDQUFFLGlCQUFpQjtvQkFDL0QsR0FBRyxFQUFFLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxnQkFBZ0IsMENBQUUsVUFBVSwwQ0FBRSxrQkFBa0IsS0FBSSxFQUFFO29CQUNoRSx1RkFBdUY7b0JBQ3ZGLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7b0JBQy9DLG1GQUFtRjtvQkFDbkYsU0FBUyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7aUJBQ2xDLENBQUM7Z0JBQ0YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1NBQUEsQ0FBQyxFQUNmLFVBQVUsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFOztZQUN0QixJQUFJLENBQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLElBQUksTUFBSyxlQUFlLEVBQUU7Z0JBQ2pDLGlGQUFpRjtnQkFDakYsT0FBTyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyw2Q0FBNkMsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNqRztZQUNELGdHQUFnRztZQUNoRyxJQUFJLENBQUEsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsS0FBSywwQ0FBRSxTQUFTLE1BQUssZ0NBQWdDLEVBQUU7Z0JBQzlELE9BQU8sVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsd0RBQXdELENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUMvSDtZQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsd0NBQXdDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNsSCxPQUFPLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLDZDQUE2QyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xHLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLG9CQUFvQjs7UUFDMUIsTUFBTSxVQUFVLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxnQkFBZ0IsMENBQUUsRUFBRSxNQUFJLE1BQUEsSUFBSSxDQUFDLFlBQVksMENBQUUsRUFBRSxDQUFBLElBQUksQ0FBQyxDQUFDO1FBQzNFLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FDeEUsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsZUFBQyxPQUFBLENBQUMsTUFBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsa0JBQWtCLG1DQUFJLE1BQUEsR0FBRyxhQUFILEdBQUcsdUJBQUgsR0FBRyxDQUFFLFVBQVUsMENBQUUsa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUEsRUFBQSxDQUFDLENBQzFGLENBQUM7SUFDSixDQUFDO0lBRU8sd0JBQXdCLENBQUMsdUJBQStCLEVBQUU7UUFDaEUsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsd0JBQXdCLENBQ3pELElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLDJCQUEyQixFQUNoQyxJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksQ0FBQyxRQUFRLEVBQ2Isb0JBQW9CLENBQ3JCLENBQUM7SUFDSixDQUFDO0lBRU8sZUFBZTtRQUNyQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUM7UUFDaEQsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ25CLE9BQU87U0FDUjtRQUNELGdFQUFnRTtRQUNoRSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztZQUM5QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixPQUFPO1NBQ1I7UUFDRCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUM1RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbEM7YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGlCQUFpQixDQUFDLFFBQWdCOztRQUN4QyxNQUFNLFNBQVMsR0FBRyxNQUFBLElBQUksQ0FBQyxnQkFBZ0IsMENBQUUsU0FBUyxDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sU0FBUyxHQUFHLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDckMsSUFBSSxTQUFTLElBQUksQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsY0FBYztZQUN4QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsaUNBQWlDLENBQUMsRUFBYSxFQUFFLFFBQTRCOztRQUMzRSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUEsTUFBQSxRQUFRLENBQUMsa0JBQWtCLDBDQUFFLE1BQU0sQ0FBQTtZQUFFLE9BQU87UUFFOUUsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN4QixRQUFRLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7O1lBQ2xELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQUEsTUFBTSxDQUFDLE9BQU8sMENBQUUsRUFBRSxDQUFDLENBQUM7WUFFM0UsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFO2dCQUMxQixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxZQUFZLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RCxJQUFJLFVBQVUsRUFBRTtvQkFDZCxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDaEQ7cUJBQU07b0JBQ0wsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLGVBQWUsRUFBRSxDQUFDO29CQUM5QixVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUM1QjtnQkFDRCxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsc0JBQXNCLEVBQUUsQ0FBQzthQUN0QztZQUVELElBQUksTUFBQSxNQUFNLENBQUMsaUJBQWlCLDBDQUFFLE1BQU0sRUFBRTtnQkFDcEMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQWUsRUFBRSxFQUFFOztvQkFDbkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDN0MsSUFBSSxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsRUFBRSxFQUFFO3dCQUNqQixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQUEsU0FBUyxDQUFDLEVBQUUsMENBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxVQUFVLEVBQUU7NEJBQ2QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDN0csU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7eUJBQzFEOzZCQUFNOzRCQUNMLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxlQUFlLEVBQUUsQ0FBQzs0QkFDN0IsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDM0I7d0JBQ0QsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLHNCQUFzQixFQUFFLENBQUM7cUJBQ3JDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ3ZDLFVBQVUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTTtnQkFDekMsVUFBVSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUM7YUFDeEUsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQUMsS0FBVSxFQUFFLFFBQTRCLEVBQUUsY0FBdUIsS0FBSyxFQUFFLFVBQW1CLEtBQUssRUFBRSxRQUFpQixFQUFFLGNBQXVCO1FBQ2hLLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBRWpCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUVyRixNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBRWhGLHFDQUFxQztRQUNyQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ25CO1FBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUVyQiw2Q0FBNkM7UUFDN0MsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM5RCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDOUUsS0FBSyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNwRDtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsVUFBbUIsS0FBSyxFQUFFLFFBQWlCLEVBQUUsY0FBdUI7O1FBQ2hHLElBQUksQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLGdCQUFnQiwwQ0FBRSxzQkFBc0IsQ0FBQTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2hFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTs7WUFDN0UsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsT0FBTyxDQUFDLENBQUMsZUFBZSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsNkJBQTZCLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxvQkFBb0IsS0FBSyxjQUFjLENBQUM7YUFDL0g7aUJBQU07Z0JBQ0wsT0FBTyxDQUFBLE1BQUEsQ0FBQyxDQUFDLGVBQWUsMENBQUUsVUFBVSxNQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUMsZUFBZSxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ2pHO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQUEsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLEtBQUssbUNBQUksSUFBSSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxHQUFXLEVBQUUsY0FBOEIsRUFBRSxnQkFBZ0M7O1FBQ2hHLElBQUksQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLGdCQUFnQiwwQ0FBRSxzQkFBc0IsQ0FBQTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2hFLE1BQU0sT0FBTyxHQUFHLGNBQWMsS0FBSyxTQUFTLElBQUksY0FBYyxLQUFLLElBQUksQ0FBQztRQUN4RSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTs7WUFDbEUsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsT0FBTyxDQUFDLENBQUMsZUFBZSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsNkJBQTZCLEtBQUssZ0JBQWdCLElBQUksQ0FBQyxDQUFDLG9CQUFvQixLQUFLLGNBQWMsQ0FBQzthQUN2STtpQkFBTTtnQkFDTCxPQUFPLENBQUEsTUFBQSxDQUFDLENBQUMsZUFBZSwwQ0FBRSxVQUFVLE1BQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQyxlQUFlLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDakc7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFXOztRQUMzQixPQUFPLENBQUEsTUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQywwQ0FBRSxNQUFNLEtBQUksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxRQUE0Qjs7UUFDbEQsTUFBTSxpQkFBaUIsR0FBRztZQUN4Qix5QkFBeUI7WUFDekIsNEJBQTRCO1NBQzdCLENBQUM7UUFDRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0QsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFBLE1BQUEsUUFBUSxDQUFDLFlBQVksMENBQUUsSUFBSSxLQUFJLEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUNyRixDQUFDO0lBRUQsa0JBQWtCLENBQUMsR0FBVyxFQUFFLFVBQW1CLEtBQUssRUFBRSxRQUFpQixFQUFFLGNBQXVCOztRQUNsRyxJQUFJLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxnQkFBZ0IsMENBQUUsc0JBQXNCLENBQUE7WUFBRSxPQUFPLElBQUksQ0FBQztRQUVoRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7O1lBQzdFLElBQUksT0FBTyxFQUFFO2dCQUNYLE9BQU8sQ0FBQyxDQUFDLGVBQWUsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLDZCQUE2QixLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsb0JBQW9CLEtBQUssY0FBYyxDQUFDO2FBQy9IO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQSxNQUFBLENBQUMsQ0FBQyxlQUFlLDBDQUFFLFVBQVUsTUFBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDLGVBQWUsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNqRztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUU1QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFM0IsTUFBTSxLQUFLLEdBQUcsTUFBQSxRQUFRLENBQUMsWUFBWSwwQ0FBRSxJQUFJLENBQUM7UUFFMUMsSUFBSSxLQUFLLEtBQUsseUJBQXlCLEVBQUU7WUFDdkMsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDO1NBQzNCO2FBQU0sSUFBSSxLQUFLLEtBQUssNEJBQTRCLElBQUksS0FBSyxLQUFLLDBCQUEwQixFQUFFO1lBQ3pGLElBQUksVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLElBQUksS0FBSyxLQUFLLDBCQUEwQixFQUFFO2dCQUN4QyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzFFO1lBQ0QsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsV0FBQyxPQUFBLE1BQUEsQ0FBQyxDQUFDLGFBQWEsMENBQUUsT0FBTyxDQUFBLEVBQUEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNuRTthQUFNLElBQUksS0FBSyxLQUFLLDJCQUEyQixFQUFFO1lBQ2hELE9BQU8sU0FBUyxDQUFDLHNCQUFzQixJQUFJLEVBQUUsQ0FBQztTQUMvQzthQUFNO1lBQ0wsT0FBTyxNQUFBLE1BQUEsTUFBQSxTQUFTLENBQUMsd0JBQXdCLDBDQUFHLENBQUMsQ0FBQywwQ0FBRSxZQUFZLG1DQUFJLElBQUksQ0FBQztTQUN0RTtJQUNILENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxRQUE0QixFQUFFLFdBQW9COztRQUN6RSxNQUFNLFVBQVUsR0FBVSxFQUFFLENBQUM7UUFDN0IsSUFBSSxXQUFXLEVBQUU7WUFDZixVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ3BFO1FBRUQsSUFBSSxNQUFBLFFBQVEsQ0FBQyxrQkFBa0IsMENBQUUsTUFBTSxFQUFFO1lBQ3ZDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1NBQ2xFO2FBQU07WUFDTCxJQUFJLENBQUEsTUFBQSxRQUFRLENBQUMsWUFBWSwwQ0FBRSxJQUFJLE1BQUsscUJBQXFCLEVBQUU7Z0JBQ3pELFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxrREFBa0QsQ0FBQyxDQUFDLENBQUM7YUFDekY7aUJBQU0sSUFBSSxDQUFBLE1BQUEsUUFBUSxDQUFDLFlBQVksMENBQUUsSUFBSSxNQUFLLG1CQUFtQixFQUFFO2dCQUM5RCxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsbURBQW1ELENBQUMsQ0FBQyxDQUFDO2FBQzFGO2lCQUFNLElBQUksQ0FBQSxNQUFBLFFBQVEsQ0FBQyxZQUFZLDBDQUFFLElBQUksTUFBSyw4QkFBOEIsRUFBRTtnQkFDekUsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7YUFDcEQ7aUJBQU0sSUFBSSxDQUFBLE1BQUEsUUFBUSxDQUFDLFlBQVksMENBQUUsSUFBSSxNQUFLLHNCQUFzQixFQUFFO2dCQUNqRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQzthQUN0RDtTQUNGO1FBRUQsSUFBSSxRQUFRLENBQUMsZUFBZSxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuRSxNQUFNLE9BQU8sR0FBRyxNQUFBLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxtQkFBbUIsQ0FBQywwQ0FBRSxXQUFXLENBQUM7WUFDckcsSUFBSSxPQUFPO2dCQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFFbEcsTUFBTSxPQUFPLEdBQUcsTUFBQSxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssbUJBQW1CLENBQUMsMENBQUUsV0FBVyxDQUFDO1lBQ3JHLElBQUksT0FBTztnQkFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVwRSxNQUFNLE1BQU0sR0FBRyxNQUFBLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyx1QkFBdUIsQ0FBQywwQ0FBRSxXQUFXLENBQUM7WUFDeEcsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQW9CLEVBQUUsRUFBRTs7b0JBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUEsTUFBQSxPQUFPLENBQUMsS0FBSywwQ0FBRSxNQUFNLEtBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztxQkFDekY7b0JBQ0QsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUVELE1BQU0sTUFBTSxHQUFHLE1BQUEsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLHVCQUF1QixDQUFDLDBDQUFFLFdBQVcsQ0FBQztZQUN4RyxJQUFJLE1BQU0sRUFBRTtnQkFDVixVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBb0IsRUFBRSxFQUFFOztvQkFDdkMsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUEsTUFBQSxPQUFPLENBQUMsS0FBSywwQ0FBRSxNQUFNLEtBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztxQkFDekY7b0JBQ0QsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUVELE1BQU0sUUFBUSxHQUFHLE1BQUEsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQywwQ0FBRSxXQUFXLENBQUM7WUFDakcsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQW9CLEVBQUUsRUFBRTs7b0JBQ3ZDLElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7d0JBQzVELE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFBLE1BQUEsT0FBTyxDQUFDLEtBQUssMENBQUUsTUFBTSxLQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7cUJBQ3pGO29CQUNELE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFFRCxNQUFNLFdBQVcsR0FBRyxNQUFBLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxhQUFhLENBQUMsMENBQUUsV0FBVyxDQUFDO1lBQ25HLElBQUksV0FBVyxFQUFFO2dCQUNmLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFvQixFQUFFLEVBQUU7b0JBQ3ZDLElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDakQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLElBQUksS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUN0SCxJQUFJLFlBQVksRUFBRTs0QkFDaEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDO3lCQUMvRDtxQkFDRjtvQkFDRCxPQUFPLElBQUksQ0FBQztnQkFDZCxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBVSxFQUFFLFFBQWdCO1FBQzVDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQztJQUM5QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBb0IsRUFBRSxRQUE0QixFQUFFLFFBQTRCOztRQUMvRixJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTVCLElBQUksV0FBVyxHQUFHLE1BQUEsUUFBUSxDQUFDLEVBQUUsMENBQUUsUUFBUSxFQUFFLENBQUM7UUFFMUMsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUUvQixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFcEQsNkNBQTZDO1FBQzdDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDaEMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQSxHQUFHLGFBQUgsR0FBRyx1QkFBSCxHQUFHLENBQUUsRUFBRSxNQUFLLFFBQVEsQ0FBQyxDQUFDO1NBQ25HO1FBRUQsc0ZBQXNGO1FBQ3RGLElBQUksT0FBTyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUN6RCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQztTQUN0QztRQUVELE9BQU8sT0FBTyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUM7SUFDcEMsQ0FBQztJQUVELGVBQWUsQ0FBQyxRQUE0Qjs7UUFDMUMsTUFBTSxNQUFNLEdBQUcsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsZUFBZSwwQ0FBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLG1CQUFtQixDQUFDLENBQUM7UUFDekYsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsUUFBNEIsRUFBRSxPQUFZO1FBQzFELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0MsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRCxPQUFPLEdBQUcsR0FBRyxhQUFhLENBQUM7SUFDN0IsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQsSUFBSSxjQUFjOztRQUNoQixPQUFPLE1BQUEsTUFBQSxJQUFJLENBQUMsaUJBQWlCLDBDQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUMxQyxDQUFDLENBQUMsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsU0FBUyxDQUFBLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLFdBQUMsT0FBQSxDQUFDLENBQUMsQ0FBQSxNQUFBLENBQUMsYUFBRCxDQUFDLHVCQUFELENBQUMsQ0FBRSxNQUFNLDBDQUFHLG9CQUFvQixDQUFDLENBQUEsQ0FBQSxFQUFBLENBQUMsQ0FDcEgsbUNBQUksS0FBSyxDQUFDO0lBQ2IsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWE7O1FBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxNQUFBLE1BQUEsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQywwQ0FBRSxTQUFTLDBDQUFFLE9BQU8sRUFBRTtnQkFDakQsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQW9CLElBQUk7O1FBQzdCLE1BQU0sSUFBSSxHQUFHLENBQUEsTUFBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLGNBQWMsMENBQUUsaUJBQWlCLDBDQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksMkNBQTJDLENBQUMsMENBQUUsV0FBVyxLQUFJLEdBQUcsQ0FBQztRQUMvSSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLGNBQWM7WUFBRSxPQUFPO1FBRTVCLGNBQWMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUU1Qyw2REFBNkQ7UUFDN0QsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZCLE9BQU87U0FDUjtRQUVELElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7WUFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDakQsT0FBTztTQUNSO1FBR0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxLQUFLLENBQUM7UUFFbEQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25GLElBQUksSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDMUQ7YUFBTTtZQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLFdBQW9CLElBQUk7UUFDcEMsNkRBQTZEO1FBQzdELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixPQUFPO1NBQ1I7UUFDRCxJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDOUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ25DLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUNqQyxJQUFJLGlCQUFpQixLQUFLLENBQUMsQ0FBQztvQkFBRSxpQkFBaUIsR0FBRyxLQUFLLENBQUM7YUFDekQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7YUFDbkM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksaUJBQWlCLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQzthQUMzQztpQkFBTTtnQkFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQzlDO1lBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQy9HLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ2xELE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxZQUFvQjtRQUM1QyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNqRSxLQUFLLE1BQU0sV0FBVyxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUU7Z0JBQzVDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEVBQUU7b0JBQzNDLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQztvQkFDdEIsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7d0JBQ3ZFLEdBQUcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNqQztvQkFDRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUNyRSxJQUFJLE9BQU8sRUFBRTt3QkFDWCxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQzt3QkFDaEUsTUFBTTtxQkFDUDtpQkFDRjthQUNGO1FBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELElBQUksQ0FBQyxTQUFrQixJQUFJLEVBQUUsV0FBb0IsSUFBSTs7UUFDbkQsOERBQThEO1FBQzlELElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU87UUFFckQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQzNDLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO2dCQUN0SSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxHQUFHLEVBQUUsSUFBSSxFQUFFLDJCQUEyQixFQUFFLENBQUM7YUFDL0U7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsR0FBRyxFQUFFLElBQUksRUFBRSw2QkFBNkIsRUFBRSxDQUFDO2FBQ2pGO1NBQ0Y7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsb0JBQW9CLENBQzlELElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLDJCQUEyQixFQUNoQyxJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksQ0FBQyxRQUFRLENBQ2QsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNwRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO1lBQ2xFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztTQUM3QztRQUVELElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQy9FLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ3pCLFVBQVUsRUFBRSxNQUFBLElBQUksQ0FBQyxnQkFBZ0IsMENBQUUsRUFBRTtnQkFDckMsZ0JBQWdCLEVBQUUsT0FBTztnQkFDekIsU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDO2FBQ3ZHLENBQUMsQ0FBQztZQUNILElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDdkUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDekI7WUFDRCxPQUFPO1NBQ1I7UUFDRCxJQUFJLE9BQU8sR0FBRyxDQUFBLE1BQUEsSUFBSSxDQUFDLGdCQUFnQiwwQ0FBRSxFQUFFLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2SixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQyxNQUFNLFlBQVksR0FBUSxJQUFJLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakYsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzNCLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7YUFDMUQ7WUFDRCxPQUFPLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNqRTtRQUNELE9BQU8sQ0FBQyxTQUFTLENBQUM7WUFDaEIsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7O2dCQUNqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO2dCQUM1QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO2dCQUM1QixJQUFJLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxnQkFBZ0IsMENBQUUsZUFBZSwwQ0FBRSxJQUFJLEtBQUksMkJBQTJCLEVBQUU7b0JBQy9FLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDbkIsNEVBQTRFO29CQUM1RSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztpQkFDN0I7Z0JBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztvQkFDekIsVUFBVSxFQUFFLENBQUEsTUFBQSxJQUFJLENBQUMsZ0JBQWdCLDBDQUFFLEVBQUUsS0FBSSxHQUFHO29CQUM1QyxnQkFBZ0IsRUFBRSxDQUFBLE1BQUEsSUFBSSxDQUFDLGdCQUFnQiwwQ0FBRSxFQUFFLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsT0FBTztvQkFDN0UsU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDaEksQ0FBQyxDQUFDO2dCQUNILElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtvQkFDakcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7aUJBQ3pCO2dCQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO29CQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLHlDQUF5QyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7aUJBQ25IO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTs7Z0JBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsc0NBQXNDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDaEgsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQSxNQUFBLElBQUksQ0FBQyxnQkFBZ0IsMENBQUUsRUFBRSxFQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQTtZQUNoRixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQixDQUFDLFVBQWtCO1FBQ2xDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDbEUsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7O2dCQUNqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO2dCQUM1QixJQUFJLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxnQkFBZ0IsMENBQUUsZUFBZSwwQ0FBRSxJQUFJLEtBQUksMkJBQTJCLEVBQUU7b0JBQy9FLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztpQkFDcEI7Z0JBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFDRCxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQTtZQUNoQyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQixDQUFDLFFBQWdCO1FBQ2xDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDM0IsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2xDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN2QztRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsTUFBTSxVQUFVLEdBQUcsaUNBQWlDLE9BQU8sRUFBRSxDQUFDO1FBQzlELElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxRQUFnQjtRQUN6QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3BDLE9BQU8sR0FBRywyS0FBMkssQ0FBQztTQUN2TDthQUFNLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN4QyxPQUFPLEdBQUcsZ0NBQWdDLENBQUM7U0FDNUM7UUFDRCxJQUFJLE9BQU8sRUFBRTtZQUNYLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNyQixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqQjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsT0FBNkI7UUFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUU7WUFDN0MsU0FBUyxFQUFFLEtBQUs7WUFDaEIsUUFBUSxFQUFFLEtBQUs7WUFDZixLQUFLLEVBQUUscUJBQXFCO1lBQzVCLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLFVBQVUsRUFBRSxDQUFDLG1CQUFtQixDQUFDO1lBQ2pDLElBQUksRUFBRTtnQkFDSixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDN0IsY0FBYyxFQUFFLE9BQU87Z0JBQ3ZCLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTthQUN0QztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBVSxFQUFFLE9BQVksRUFBRSxNQUEwQjtRQUM5RCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksVUFBVSxHQUFHLENBQUMsRUFBRTtZQUNsQixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQyxJQUFJLEdBQUcsR0FBRyxVQUFVLEVBQUU7Z0JBQ3BCLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQztnQkFDaEMsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUNyRDtTQUNGO0lBQ0gsQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQW9CO1FBQ3ZDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRCxvQkFBb0I7O1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFO1lBQzFDLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDeEIsUUFBUSxFQUFFLE1BQU07WUFDaEIsS0FBSyxFQUFFLE9BQU87WUFDZCxNQUFNLEVBQUUsUUFBUTtZQUNoQixTQUFTLEVBQUUsUUFBUTtZQUNuQixVQUFVLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxvQ0FBb0MsQ0FBQztZQUN2RSxXQUFXLEVBQUUsSUFBSTtZQUNqQixJQUFJLEVBQUU7Z0JBQ0osV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLFVBQVUsRUFBRSxDQUFBLE1BQUEsSUFBSSxDQUFDLGdCQUFnQiwwQ0FBRSxFQUFFLE1BQUksTUFBQSxJQUFJLENBQUMsWUFBWSwwQ0FBRSxFQUFFLENBQUE7Z0JBQzlELFlBQVksRUFBRSxNQUFBLElBQUksQ0FBQyxZQUFZLDBDQUFFLElBQUk7YUFDdEM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQseUJBQXlCLENBQUMsU0FBd0I7UUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUU7WUFDekMsU0FBUyxFQUFFLE9BQU87WUFDbEIsUUFBUSxFQUFFLE1BQU07WUFDaEIsS0FBSyxFQUFFLE9BQU87WUFDZCxVQUFVLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztZQUNqQyxJQUFJLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUN2QixTQUFTO2FBQ1Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsUUFBUTtJQUNSLFVBQVUsQ0FBQyxpQkFBeUI7UUFDbEMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDbkM7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXpCLElBQUksQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUNwQyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFFO2dCQUMxQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2FBQzFCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUNuQjtRQUNILENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxpQkFBaUI7UUFDZixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDcEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLGFBQWEsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDbkM7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsV0FBVzs7UUFDVCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixNQUFBLElBQUksQ0FBQyxpQkFBaUIsMENBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFOztZQUN0QyxNQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsU0FBUywwQ0FBRSxRQUFRLENBQUMsMENBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFOztnQkFDckQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQzlDLE9BQU87aUJBQ1I7Z0JBQ0QsTUFBQSxNQUFBLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFNBQVMsMENBQUUsUUFBUSwwQ0FBRyxHQUFHLENBQUMsMENBQUUsT0FBTyxFQUFFLENBQUM7WUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFhLEVBQUUsT0FBWTtRQUMxQyxPQUFPLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLEVBQUUsS0FBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQzlELENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxLQUFhLEVBQUUsRUFBTztRQUMzQyxJQUFJLENBQUEsRUFBRSxhQUFGLEVBQUUsdUJBQUYsRUFBRSxDQUFFLFVBQVUsS0FBSSxJQUFJO1lBQUUsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztRQUN2RCxJQUFJLENBQUEsRUFBRSxhQUFGLEVBQUUsdUJBQUYsRUFBRSxDQUFFLEVBQUUsS0FBSSxJQUFJO1lBQUUsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN2QyxPQUFPLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFhLEVBQUUsTUFBVzs7UUFDeEMsT0FBTyxDQUFBLE1BQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE9BQU8sMENBQUUsRUFBRSxLQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQzdFLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBYSxFQUFFLEVBQU87UUFDbkMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQzdDLENBQUM7O3NIQXBtQ1Usd0JBQXdCOzBHQUF4Qix3QkFBd0IsMmxDQ3pCckMsaXE4QkFrYmM7NEZEelpELHdCQUF3QjtrQkFOcEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxXQUFXLEVBQUUsbUNBQW1DO29CQUNoRCxTQUFTLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQztpQkFDakQ7K1JBR1UsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLDJCQUEyQjtzQkFBbkMsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBMENQLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlO2dCQVc3QixjQUFjO3NCQURiLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBYy9DLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBPbkRlc3Ryb3ksIENoYW5nZURldGVjdG9yUmVmLCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUsIHRocm93RXJyb3IsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRhcCwgY2F0Y2hFcnJvciwgc3dpdGNoTWFwLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgQXNzZXNzbWVudFRha2VyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYXNzZXNzbWVudC10YWtlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzcG9uc2VCdWlsZGVyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcmVzcG9uc2UtYnVpbGRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2VjdGlvbkluc3RydWN0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zZWN0aW9uLWluc3RydWN0aW9ucy9zZWN0aW9uLWluc3RydWN0aW9ucy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBc3Nlc3NlZURUTywgQXNzZXNzb3JEVE8sIEFzc2Vzc21lbnQsIEFzc2Vzc21lbnRJbnN0YW5jZUFzc2Vzc2VEVE8sIEFzc2Vzc21lbnRTdGVwLCBBc3Nlc3NtZW50Q29udGV4dERUTywgU2VjdGlvblNjb3JlLCBTa2lsbFNjb3JlLCBBdHRhY2htZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMvYXNzZXNzbWVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBQcm9jdG9yaW5nU2Vzc2lvbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3Byb2N0b3JpbmcuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQXNzZXNzbWVudFF1ZXN0aW9uIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMvcXVlc3Rpb24uaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXIsIFF1ZXN0aW9uUGFwZXJTZWN0aW9uLCBTZWN0aW9uUXVlc3Rpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9xdWVzdGlvbi1wYXBlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBTa2lsbEFsbG9jYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvY29tcG9uZW50cy9za2lsbC1hbGxvY2F0aW9uL3NraWxsLWFsbG9jYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvY29uZmlybWF0aW9uLWRpYWxvZy9jb25maXJtYXRpb24tZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFByb2N0b3JpbmdSZXN1bHRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcHJvY3RvcmluZy1yZXN1bHQvcHJvY3RvcmluZy1yZXN1bHQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUHJvY3RvcmluZ1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3Byb2N0b3Jpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IHNvcnRCeU9yZGVyIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWFzc2Vzc21lbnQtdGFrZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3Nlc3NtZW50LXRha2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hc3Nlc3NtZW50LXRha2VyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBBc3Nlc3NtZW50VGFrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgbGFiZWxDb25maWc6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICBASW5wdXQoKSBpbWFnZUNvbmZpZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG4gIEBJbnB1dCgpIHNob3dGb290ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBhc3Nlc3NtZW50SWQhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgYXNzZXNzbWVudEluc3RhbmNlSWQhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgYXNzZXNzZWVEYXRhOiBBc3Nlc3NlZURUTyA9IHsgaWQ6IDAsIGFjdG9ySWQ6IDAsIGFjdG9yVHlwZTogJ1VTRVInIH07XHJcbiAgQElucHV0KCkgYXNzZXNzb3JEYXRhOiBBc3Nlc3NvckRUTyA9IHsgaWQ6IDAsIGFjdG9ySWQ6IDAsIGFjdG9yVHlwZTogJ1VTRVInIH07XHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBwcmV2aWV3TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHZlcnRpY2FsVmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVuYWJsZU1hcmtzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaGlkZVNlY3Rpb25UYWJzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYXNzZXNzbWVudENvbnRleHQhOiBBc3Nlc3NtZW50Q29udGV4dERUTztcclxuICBASW5wdXQoKSBhc3Nlc3NlZVJlc3BvbnNlOiBBc3Nlc3NtZW50SW5zdGFuY2VBc3Nlc3NlRFRPID0ge307XHJcbiAgQElucHV0KCkgbWFya0FzQ29tcGxldGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzZWN0aW9uV2lzZVNjb3JlOiB7IFtzZWN0aW9uSWQ6IG51bWJlcl06IFNlY3Rpb25TY29yZSB9ID0ge307XHJcbiAgQElucHV0KCkgc2hvd092ZXJhbGxSZW1hcmtzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0NvcnJlY3RBbnN3ZXJzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcmVzdW1lVGltZXJBY3Jvc3NWaXNpdHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB3YXJuT25MZWF2ZUR1cmluZ1Byb2N0b3Jpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHByb2N0b3JMaW5rTG9hZGVyPzogKCkgPT4gUHJvbWlzZTxhbnk+O1xyXG5cclxuICBAT3V0cHV0KCkgc25hY2tiYXJNZXNzYWdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IG1lc3NhZ2U6IHN0cmluZywgdHlwZTogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyB8ICdpbmZvJyB9PigpO1xyXG4gIEBPdXRwdXQoKSBzdWJtaXRBc3Nlc3NtZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHN0ZXBDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxBc3Nlc3NtZW50U3RlcD4oKTtcclxuICBAT3V0cHV0KCkgY29uc2VudFRvUHJvY2VlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgc2hvd0xvYWRlcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgaW50cm9BY3RpdmUgPSBmYWxzZTtcclxuICBwcml2YXRlIHByb2N0b3JpbmdTZXNzaW9uU3RhcnRlZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcHJvY3RvcmluZ1Nlc3Npb25FbmRlZCA9IGZhbHNlO1xyXG4gIHF1ZXN0aW9uQmFuazogUmVjb3JkPG51bWJlciwgQXNzZXNzbWVudFF1ZXN0aW9uPiA9IHt9O1xyXG4gIGFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YTogQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXIgPSB7fTtcclxuICBhc3Nlc3NtZW50RGF0YTogQXNzZXNzbWVudCA9IHt9O1xyXG4gIGNvbmZpZ3NMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0aW1lckludGVydmFsOiBhbnkgPSBudWxsO1xyXG4gIHJlbWFpbmluZ1RpbWU6IG51bWJlciA9IDA7XHJcbiAgZGlzcGxheVRpbWU6IHN0cmluZyA9ICcwMDowMCc7XHJcbiAgdGltZUV4cGlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0F1dG9TdWJtaXR0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNTdWJtaXR0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VjdGlvbkZvcm1Hcm91cHM6IHsgc2VjdGlvbklkOiBudW1iZXI7IGZvcm1Hcm91cDogRm9ybUdyb3VwIH1bXSA9IFtdO1xyXG4gIG92ZXJhbGxOb3Rlc0N0cmwgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG4gIGV4cGFuZGVkU3RhdGU6IGJvb2xlYW5bXSA9IFtdO1xyXG4gIHByaXZhdGUgeW91dHViZVVybENhY2hlOiB7IFt1cmw6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgcHJpdmF0ZSBuZXdBc3Nlc3NlZVNlc3Npb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGJhY2tHdWFyZEFybWVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBhbGxvd0JhY2tOYXZpZ2F0aW9uID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdGVkVGFiSW5kZXg6IG51bWJlciA9IDA7XHJcbiAgZ2V0IHNlbGVjdGVkVGFiSW5kZXgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFRhYkluZGV4O1xyXG4gIH1cclxuICBzZXQgc2VsZWN0ZWRUYWJJbmRleCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRUYWJJbmRleCAhPT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJJbmRleCA9IHZhbHVlO1xyXG4gICAgICB0aGlzLmVtaXRTdGVwRGV0YWlscygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VjdGlvbkVycm9yczogYm9vbGVhbltdID0gW107XHJcbiAgdGVuYW50SWQ6IG51bWJlciA9IDA7XHJcbiAgdG9vbHRpcFN0YXRlOiBSZWNvcmQ8bnVtYmVyLCBib29sZWFuPiA9IHt9O1xyXG5cclxuICBpc01vYmlsZSA9IHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4O1xyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICBvblJlc2l6ZSgpIHtcclxuICAgIHRoaXMuaXNNb2JpbGUgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDc2ODtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoaWxlIGEgcHJvY3RvcmluZyBzZXNzaW9uIGlzIHJ1bm5pbmcsIHdhcm4gdGhlIGNhbmRpZGF0ZSBiZWZvcmUgdGhleSByZWZyZXNoLCBjbG9zZSB0aGUgdGFiLCBvclxyXG4gICAqIG5hdmlnYXRlIGF3YXkuIEJyb3dzZXJzIHNob3cgdGhlaXIgb3duIGdlbmVyaWMgXCJMZWF2ZSBzaXRlP1wiIGNvbmZpcm1hdGlvbiBoZXJlIOKAlCB0aGUgbWVzc2FnZSB0ZXh0XHJcbiAgICogY2Fubm90IGJlIGN1c3RvbWl6ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMg4oCUIHNvIHRoaXMgb25seSBndWFyYW50ZWVzIGEgcHJvbXB0LCBub3Qgb3VyIHdvcmRpbmcuXHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXHJcbiAgb25CZWZvcmVVbmxvYWQoZXZlbnQ6IEJlZm9yZVVubG9hZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy53YXJuT25MZWF2ZUR1cmluZ1Byb2N0b3JpbmcgJiYgdGhpcy5pc1Byb2N0b3JpbmdSdW5uaW5nKCkpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluLWFwcCBCYWNrIGJ1dHRvbiAoU1BBIHBvcHN0YXRlIOKAlCBub3QgY2F1Z2h0IGJ5IGJlZm9yZXVubG9hZCkuIFdoaWxlIHByb2N0b3JpbmcgcnVucyB3ZSBrZWVwIGFcclxuICAgKiBzZW50aW5lbCBoaXN0b3J5IGVudHJ5OyB3aGVuIEJhY2sgcG9wcyBpdCB3ZSBzaG93IGEgY3VzdG9tIHdhcm5pbmcgYW5kIGVpdGhlciByZS1hcm0gKHN0YXkpIG9yXHJcbiAgICogcHJvY2VlZCB3aXRoIHRoZSBuYXZpZ2F0aW9uIChsZWF2ZSkuXHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnBvcHN0YXRlJylcclxuICBvblBvcFN0YXRlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYWxsb3dCYWNrTmF2aWdhdGlvbikge1xyXG4gICAgICAvLyB0aGlzIHBvcHN0YXRlIGlzIHRoZSBuYXZpZ2F0aW9uIHdlIGp1c3QgYXBwcm92ZWQg4oCUIGxldCBpdCB0aHJvdWdoIG9uY2VcclxuICAgICAgdGhpcy5hbGxvd0JhY2tOYXZpZ2F0aW9uID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5iYWNrR3VhcmRBcm1lZCB8fCAhdGhpcy5pc1Byb2N0b3JpbmdSdW5uaW5nKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb25maXJtTGVhdmVBc3Nlc3NtZW50KCkuc3Vic2NyaWJlKChjb25maXJtZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgaWYgKGNvbmZpcm1lZCkge1xyXG4gICAgICAgIHRoaXMuYWxsb3dCYWNrTmF2aWdhdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5iYWNrR3VhcmRBcm1lZCA9IGZhbHNlO1xyXG4gICAgICAgIGhpc3RvcnkuYmFjaygpOyAvLyBwcm9jZWVkIHRvIHRoZSBhY3R1YWwgcHJldmlvdXMgcGFnZVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIHN0YXkgb24gdGhlIGFzc2Vzc21lbnQg4oCUIHJlLWFybSB0aGUgc2VudGluZWwgZW50cnlcclxuICAgICAgICBoaXN0b3J5LnB1c2hTdGF0ZShudWxsLCAnJywgbG9jYXRpb24uaHJlZik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1Byb2N0b3JpbmdSdW5uaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvY3RvcmluZ1Nlc3Npb25TdGFydGVkICYmICF0aGlzLnByb2N0b3JpbmdTZXNzaW9uRW5kZWQ7XHJcbiAgfVxyXG5cclxuICAvKiogUHVzaGVzIGEgc2VudGluZWwgaGlzdG9yeSBlbnRyeSBzbyB0aGUgbmV4dCBpbi1hcHAgQmFjayBwcmVzcyB0cmlnZ2VycyBvdXIgZ3VhcmQuICovXHJcbiAgcHJpdmF0ZSBhcm1CYWNrR3VhcmQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5iYWNrR3VhcmRBcm1lZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmJhY2tHdWFyZEFybWVkID0gdHJ1ZTtcclxuICAgIGhpc3RvcnkucHVzaFN0YXRlKG51bGwsICcnLCBsb2NhdGlvbi5ocmVmKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uZmlybUxlYXZlQXNzZXNzbWVudCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICBtYXhXaWR0aDogJzk1JScsXHJcbiAgICAgIHdpZHRoOiAnMzJyZW0nLFxyXG4gICAgICBwYW5lbENsYXNzOiBbJ2Fzc2Vzc21lbnQtZGlhbG9nJ10sXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICB0aXRsZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuTEVBVkVfV0FSTklOR19USVRMRSddLFxyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLkxFQVZFX1dBUk5JTkdfTUVTU0FHRSddLFxyXG4gICAgICAgIGNvbmZpcm1MYWJlbDogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlBST0NFRUQnXSxcclxuICAgICAgICBjYW5jZWxMYWJlbDogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNBTkNFTCddXHJcbiAgICAgIH1cclxuICAgIH0pLmFmdGVyQ2xvc2VkKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXNzZXNzbWVudFRha2VyU2VydmljZTogQXNzZXNzbWVudFRha2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSByZXNwb25zZUJ1aWxkZXJTZXJ2aWNlOiBSZXNwb25zZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHByb2N0b3JpbmdTZXJ2aWNlOiBQcm9jdG9yaW5nU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRDb25maWdzRnJvbUpTT04oKTtcclxuXHJcbiAgICBpZiAodGhpcy5wcmV2aWV3TW9kZSB8fCB0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmFzc2Vzc21lbnRUYWtlbj8uY29kZSA9PT0gJ0FTU0VTU01FTlRfVEFLRU4uQ09NUExFVEUnKSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmFzc2Vzc21lbnRDb250ZXh0KSB7XHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQgPSB0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50SW5zdGFuY2VEVE8/LmlkID8/IHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQ7XHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudElkID0gdGhpcy5hc3Nlc3NtZW50Q29udGV4dD8uYXNzZXNzbWVudD8uaWQgPz8gdGhpcy5hc3Nlc3NtZW50SWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQpIHtcclxuICAgICAgdGhpcy5sb2FkQXNzZXNzbWVudERhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudGltZXJJbnRlcnZhbCkge1xyXG4gICAgICBjbGVhckludGVydmFsKHRoaXMudGltZXJJbnRlcnZhbCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1Byb2N0b3JpbmdSdW5uaW5nKCkpIHtcclxuICAgICAgdGhpcy5wcm9jdG9yaW5nU2VydmljZS5kZXN0cm95KHsgZW5kU2Vzc2lvbjogZmFsc2UgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbmRzIHRoZSBwcm9jdG9yaW5nIHNlc3Npb24gYWZ0ZXIgdGhlIGFzc2Vzc21lbnQgaXMgc3VibWl0dGVkOiBzdG9wcyArIGRlc3Ryb3lzIHRoZSBQcm9jdG9yTGlua1xyXG4gICAqIFNESyBhbmQgbm90aWZpZXMgdGhlIGJhY2tlbmQgdG8gZW5kIHRoZSBzZXNzaW9uLiBPbmx5IGVuZHMgYSBzZXNzaW9uIHRoYXQgYWN0dWFsbHkgc3RhcnRlZCwgYW5kXHJcbiAgICogaXMgZ3VhcmRlZCBzbyB0aGUgYmFja2VuZCBpcyBjYWxsZWQgYXQgbW9zdCBvbmNlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZW5kUHJvY3RvcmluZ1Nlc3Npb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLnByb2N0b3JpbmdTZXJ2aWNlLnN0b3AoKTtcclxuICAgIHRoaXMucHJvY3RvcmluZ1NlcnZpY2UuZGVzdHJveSgpO1xyXG4gICAgaWYgKCF0aGlzLnByb2N0b3JpbmdTZXNzaW9uU3RhcnRlZCB8fCB0aGlzLnByb2N0b3JpbmdTZXNzaW9uRW5kZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXNzZXNzZWVJZCA9IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uaWQgfHwgdGhpcy5hc3Nlc3NlZURhdGE/LmlkO1xyXG4gICAgaWYgKCFhc3Nlc3NlZUlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMucHJvY3RvcmluZ1Nlc3Npb25FbmRlZCA9IHRydWU7XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRUYWtlclNlcnZpY2UuZW5kUHJvY3RvcmluZ1Nlc3Npb24oYXNzZXNzZWVJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKCkgPT4geyAvKiBzZXNzaW9uIGVuZGVkIG9uIGJhY2tlbmQgKi8gfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHsgLyogYmVzdC1lZmZvcnQgdGVhcmRvd247IGlnbm9yZSAqLyB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldENvbmZpZ3NGcm9tSlNPTigpIHtcclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgbGFiZWxDb25maWc6IHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5nZXRDb25maWdKU09OKCdqc29uL2xhYmVsQ29uZmlnJyksXHJcbiAgICAgIGltYWdlQ29uZmlnOiB0aGlzLmFzc2Vzc21lbnRUYWtlclNlcnZpY2UuZ2V0Q29uZmlnSlNPTignanNvbi9pbWFnZUNvbmZpZycpXHJcbiAgICB9KS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubGFiZWxDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCByZXM/LmxhYmVsQ29uZmlnLCB0aGlzLmxhYmVsQ29uZmlnKTtcclxuICAgICAgdGhpcy5pbWFnZUNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHJlcz8uaW1hZ2VDb25maWcsIHRoaXMuaW1hZ2VDb25maWcpO1xyXG5cclxuICAgICAgdGhpcy5jb25maWdzTG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBsb2FkQXNzZXNzbWVudERhdGEoKSB7XHJcbiAgICBjb25zdCBhcGlDYWxscyA9IHtcclxuICAgICAgLi4uKCF0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50Py5pZCAmJiB7XHJcbiAgICAgICAgYXNzZXNzbWVudERhdGE6IHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5nZXRBc3Nlc3NtZW50Q29udGV4dEJ5SWQoeyBhc3Nlc3NtZW50SWRzOiBbdGhpcy5hc3Nlc3NtZW50SWRdIH0pXHJcbiAgICAgIH0pLFxyXG4gICAgICAuLi4odGhpcy5hc3Nlc3NlZURhdGE/LmlkICYmICF0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmlkICYmIHtcclxuICAgICAgICBhc3Nlc3NlZVJlc3BvbnNlOiB0aGlzLmFzc2Vzc21lbnRUYWtlclNlcnZpY2UuZ2V0QW5zd2Vyc0J5QWlhSWQodGhpcy5hc3Nlc3NlZURhdGEuaWQpXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBpZiAoT2JqZWN0LmtleXMoYXBpQ2FsbHMpLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9ya0pvaW4oYXBpQ2FsbHMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hc3Nlc3NtZW50Q29udGV4dCA9IGRhdGE/LmFzc2Vzc21lbnREYXRhPy5bMF0gPz8gdGhpcy5hc3Nlc3NtZW50Q29udGV4dDtcclxuICAgICAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZSA9IGRhdGE/LmFzc2Vzc2VlUmVzcG9uc2UgPz8gdGhpcy5hc3Nlc3NlZVJlc3BvbnNlO1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVSZXNwb25zZSgpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5FUlJPUl9ERUZBVUxUJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdHRVQnIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5oYW5kbGVSZXNwb25zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlUmVzcG9uc2UoKSB7XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSA9IHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRFRPO1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50RGF0YSA9IHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnQ7XHJcbiAgICB0aGlzLnF1ZXN0aW9uQmFuayA9IHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LnF1ZXN0aW9uRFRPTWFwO1xyXG4gICAgdGhpcy50ZW5hbnRJZCA9IHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnQ/LnRlbmFudElkID8/IDA7XHJcblxyXG4gICAgaWYgKHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uaWQpIHtcclxuICAgICAgaWYgKHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uYXNzZXNzbWVudFRha2VuPy5jb2RlID09PSAnQVNTRVNTTUVOVF9UQUtFTi5DT01QTEVURScpIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hc3Nlc3NlZVJlc3BvbnNlID0ge1xyXG4gICAgICAgIGlkOiAwLFxyXG4gICAgICAgIGFzc2Vzc21lbnRJbnN0YW5jZTogeyBpZDogdGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZCB9LFxyXG4gICAgICAgIGFzc2Vzc2VlOiB0aGlzLmFzc2Vzc2VlRGF0YSxcclxuICAgICAgICBhc3Nlc3NvcjogdGhpcy5hc3Nlc3NvckRhdGEsXHJcbiAgICAgICAgYWlhZGVmYXVsdFJlc3BvbnNlTGlzdDogW10sXHJcbiAgICAgICAgdGVuYW50OiB0aGlzLnRlbmFudElkXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICB0aGlzLm92ZXJhbGxOb3Rlc0N0cmwuc2V0VmFsdWUodGhpcy5hc3Nlc3NlZVJlc3BvbnNlLm5vdGVzIHx8ICcnKTtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkICYmICF0aGlzLnNob3dPdmVyYWxsUmVtYXJrcykge1xyXG4gICAgICB0aGlzLm92ZXJhbGxOb3Rlc0N0cmwuZGlzYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtU2V0dXAoKTtcclxuICB9XHJcblxyXG4gIGZvcm1TZXR1cCgpIHtcclxuICAgIHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMgPSBbXTtcclxuXHJcbiAgICBzb3J0QnlPcmRlcih0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0KT8uZm9yRWFjaCgoc2VjdGlvbjogUXVlc3Rpb25QYXBlclNlY3Rpb24pID0+IHtcclxuICAgICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xyXG5cclxuICAgICAgc29ydEJ5T3JkZXIoc2VjdGlvbj8uc2VjdGlvblF1ZXN0aW9uc0xpc3QpPy5mb3JFYWNoKChzcTogU2VjdGlvblF1ZXN0aW9uKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcUlkID0gc3EucXVlc3Rpb25JZDtcclxuICAgICAgICBpZiAoIXFJZCB8fCAhdGhpcy5xdWVzdGlvbkJhbmtbcUlkXSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25CYW5rW3FJZF07XHJcbiAgICAgICAgdGhpcy5hZGRDb250cm9sRm9yUXVlc3Rpb24oZ3JvdXAsIHF1ZXN0aW9uLCBxdWVzdGlvbj8uaXNNYW5kYXRvcnkpO1xyXG5cclxuICAgICAgICBpZiAocXVlc3Rpb24uZGVmYXVsdE9wdGlvbnNMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgIHF1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdC5mb3JFYWNoKChvcHRpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAob3B0aW9uLnJlbWFya3NSZXF1aXJlZCkge1xyXG4gICAgICAgICAgICAgIC8vIFByZS1wb3B1bGF0ZSByZW1hcmtzIGlmIHdlIGhhdmUgYW5zd2VycyBtYXRjaGluZyB0aGlzIG9wdGlvbi5cclxuICAgICAgICAgICAgICBsZXQgcmVtYXJrVmFsID0gbnVsbDtcclxuICAgICAgICAgICAgICBjb25zdCBwcmVmaWxsZWRPcHRpb25zID0gdGhpcy5nZXRQcmVmaWxsZWRBbnN3ZXIocUlkKTtcclxuICAgICAgICAgICAgICBpZiAocHJlZmlsbGVkT3B0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYW5zT2JqID0gdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5haWFkZWZhdWx0UmVzcG9uc2VMaXN0Py5maW5kKChhOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgIGEuc2VjdGlvblF1ZXN0aW9uPy5xdWVzdGlvbklkID09PSBxSWQgJiYgKCFhLmNoaWxkUXVlc3Rpb25JZCB8fCBhLmNoaWxkUXVlc3Rpb25JZCA9PT0gMClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYW5zT2JqKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGU/LmNvZGUgPT09ICdRVUVTVElPTl9UWVBFLk9CSkVDVElWRScgJiYgKHByZWZpbGxlZE9wdGlvbnMgPT09IChvcHRpb24ub3B0aW9ucz8uaWQgPz8gb3B0aW9uLmlkKSB8fCBwcmVmaWxsZWRPcHRpb25zPy5pZCA9PT0gKG9wdGlvbi5vcHRpb25zPy5pZCA/PyBvcHRpb24uaWQpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbWFya1ZhbCA9IGFuc09iai5yZW1hcmtzIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwcmVmaWxsZWRPcHRpb25zKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nT2JqID0gYW5zT2JqLmRyb2JqZWN0aXZlcmVzcG9uc2VMaXN0Py5maW5kKChyOiBhbnkpID0+IHIuZGVmYXVsdE9wdGlvbj8ub3B0aW9ucz8uaWQgPT09IChvcHRpb24ub3B0aW9ucz8uaWQgPz8gb3B0aW9uLmlkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nT2JqKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZW1hcmtWYWwgPSBtYXRjaGluZ09iai5yZW1hcmtzIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBjb25zdCByZW1hcmtDdHJsID0gbmV3IEZvcm1Db250cm9sKHJlbWFya1ZhbCk7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIHJlbWFya0N0cmwuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgZ3JvdXBbYCR7cUlkfV9yZW1hcmtzXyR7b3B0aW9uLmlkfWBdID0gcmVtYXJrQ3RybDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgb3B0aW9uLmNoaWxkUXVlc3Rpb25MaXN0Py5mb3JFYWNoKChjaGlsZElkOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBjaGlsZFF1ZXMgPSB0aGlzLnF1ZXN0aW9uQmFua1tjaGlsZElkXTtcclxuICAgICAgICAgICAgICBpZiAoY2hpbGRRdWVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZENvbnRyb2xGb3JRdWVzdGlvbihncm91cCwgY2hpbGRRdWVzLCBmYWxzZSwgdHJ1ZSwgcUlkLCBvcHRpb24ub3B0aW9ucz8uaWQgPz8gb3B0aW9uLmlkKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGZnID0gdGhpcy5mYi5ncm91cChncm91cCk7XHJcblxyXG4gICAgICBzb3J0QnlPcmRlcihzZWN0aW9uPy5zZWN0aW9uUXVlc3Rpb25zTGlzdCk/LmZvckVhY2goKHNxOiBTZWN0aW9uUXVlc3Rpb24pID0+IHtcclxuICAgICAgICBjb25zdCBxSWQgPSBzcS5xdWVzdGlvbklkO1xyXG4gICAgICAgIGlmICghcUlkIHx8ICF0aGlzLnF1ZXN0aW9uQmFua1txSWRdKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uQmFua1txSWRdO1xyXG5cclxuICAgICAgICBpZiAocXVlc3Rpb24uZGVmYXVsdE9wdGlvbnNMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25Db25kaXRpb25hbENvbnRyb2xzKGZnLCBxdWVzdGlvbik7XHJcbiAgICAgICAgICBmZy5nZXQocUlkPy50b1N0cmluZygpKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUXVlc3Rpb25Db25kaXRpb25hbENvbnRyb2xzKGZnLCBxdWVzdGlvbik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5wdXNoKHtcclxuICAgICAgICBzZWN0aW9uSWQ6IHNlY3Rpb24uaWQsXHJcbiAgICAgICAgZm9ybUdyb3VwOiBmZ1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5zZWN0aW9uRXJyb3JzLnB1c2goZmFsc2UpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5lbWl0U3RlcERldGFpbHMoKTtcclxuICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc3RhcnRBc3Nlc3NtZW50KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXJ0QXNzZXNzbWVudCgpIHtcclxuICAgIGlmICh0aGlzLnJlcXVpcmVzU3RhcnRHYXRlKCkpIHtcclxuICAgICAgLy8gc2hvdyB0aGUgZnVsbC1zY3JlZW4gaW50cm8gZ2F0ZTsgcXVlc3Rpb25zIHN0YXkgaGlkZGVuIHVudGlsIHRoZSBjYW5kaWRhdGUgcHJvY2VlZHNcclxuICAgICAgdGhpcy5pbnRyb0FjdGl2ZSA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmJlZ2luQXNzZXNzbWVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzUHJvY3RvcmluZ0VuYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5hc3Nlc3NtZW50RGF0YT8uYXNzZXNzbWVudENvbmZpZ3M/LmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gJ2Fzc2Vzc21lbnQuY29uZmlnLmlzLXByb2N0b3JpbmctZW5hYmxlZCcpPy5jb25maWdWYWx1ZSA9PT0gJzEnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGZ1bGwtc2NyZWVuIGludHJvIGdhdGUgaXMgc2hvd24gd2hlbiBwcm9jdG9yaW5nIGlzIGVuYWJsZWQsIG9yIHdoZW4gYSB0aW1lZCBhc3Nlc3NtZW50IHRyYWNrc1xyXG4gICAqIGVsYXBzZWQgdGltZSBhY3Jvc3MgdmlzaXRzIChzbyB0aGUgYXNzZXNzZWUgaXMgY3JlYXRlZCB1cCBmcm9udCB0byBhbmNob3IgdGhlIHRpbWVyKS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlcXVpcmVzU3RhcnRHYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdGltZWRUcmFja2luZyA9IHRoaXMucmVzdW1lVGltZXJBY3Jvc3NWaXNpdHMgJiYgdGhpcy5hc3Nlc3NtZW50RHVyYXRpb25TZWNvbmRzID4gMDtcclxuICAgIHJldHVybiAodGhpcy5pc1Byb2N0b3JpbmdFbmFibGVkIHx8IHRpbWVkVHJhY2tpbmcpICYmICF0aGlzLnByZXZpZXdNb2RlICYmICF0aGlzLmRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqIEEgcmVmZXJlbmNlIGltYWdlIGlzIGNhcHR1cmVkIG9ubHkgZm9yIHByb2N0b3JpbmcsIGFuZCBvbmx5IG9uIHRoZSBmaXJzdCBhdHRlbXB0IChubyBhc3Nlc3NlZSBpZCB5ZXQpLiAqL1xyXG4gIGdldCByZXF1aXJlUmVmZXJlbmNlQ2FwdHVyZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzUHJvY3RvcmluZ0VuYWJsZWQgJiYgISh0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmlkIHx8IHRoaXMuYXNzZXNzZWVEYXRhPy5pZCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdG90YWxTZWN0aW9uQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5sZW5ndGggfHwgMDtcclxuICB9XHJcblxyXG4gIGdldCB0b3RhbFF1ZXN0aW9uQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAodGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdCB8fCBbXSlcclxuICAgICAgLnJlZHVjZSgoc3VtLCBzZWN0aW9uKSA9PiBzdW0gKyAoc2VjdGlvbj8uc2VjdGlvblF1ZXN0aW9uc0xpc3Q/Lmxlbmd0aCB8fCAwKSwgMCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYXNzZXNzbWVudER1cmF0aW9uU2Vjb25kcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnRJbnN0YW5jZURUTz8uZHVyYXRpb24gfHwgMDtcclxuICB9XHJcblxyXG4gIC8vIGJvdW5kIHNvIGl0IGNhbiBiZSBwYXNzZWQgYXMgYW4gQElucHV0IGNhbGxiYWNrIHRvIHRoZSBmdWxsLXNjcmVlbiBpbnRybyBnYXRlOyBjcmVhdGVzIHRoZVxyXG4gIC8vIGFzc2Vzc2VlIChwYXNzaW5nIHRoZSBjYXB0dXJlZCByZWZlcmVuY2UgaW1hZ2UgZm9yIHByb2N0b3JpbmcpIGFuZCBzdGFydHMgdGhlIFNESyB3aGVuIHByb2N0b3JlZC5cclxuICBzdGFydFNlc3Npb25BY3Rpb24gPSAocmVmZXJlbmNlSW1hZ2VCYXNlNjQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiA9PlxyXG4gICAgdGhpcy5zdGFydEFzc2Vzc21lbnRTZXNzaW9uKHJlZmVyZW5jZUltYWdlQmFzZTY0KTtcclxuXHJcbiAgLy8gb25jZSB0aGUgY2FuZGlkYXRlIHByb2NlZWRzIGZyb20gdGhlIGludHJvIGdhdGUgKGFzc2Vzc2VlIGNyZWF0ZWQgLyBzZXNzaW9uIHN0YXJ0ZWQpLCByZXZlYWwgdGhlIGFzc2Vzc21lbnRcclxuICBvbkludHJvUHJvY2VlZGVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25zZW50VG9Qcm9jZWVkLmVtaXQodHJ1ZSk7XHJcbiAgICB0aGlzLmludHJvQWN0aXZlID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy53YXJuT25MZWF2ZUR1cmluZ1Byb2N0b3JpbmcgJiYgdGhpcy5pc1Byb2N0b3JpbmdSdW5uaW5nKCkpIHtcclxuICAgICAgLy8gZ3VhcmQgdGhlIGluLWFwcCBCYWNrIGJ1dHRvbiB3aGlsZSBwcm9jdG9yaW5nIGlzIGFjdGl2ZVxyXG4gICAgICB0aGlzLmFybUJhY2tHdWFyZCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5iZWdpbkFzc2Vzc21lbnQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgdGhlIGFzc2Vzc2VlIHVwIGZyb250IHdoZW4gdGhlIGNhbmRpZGF0ZSBwcm9jZWVkcyBmcm9tIHRoZSBpbnRybyBnYXRlLlxyXG4gICAqIC0gRmlyc3QgYXR0ZW1wdCAobm8gYXNzZXNzZWUgaWQpOiBQT1NUIGNyZWF0ZXMgdGhlIGFzc2Vzc2VlIOKAlCBmb3IgcHJvY3RvcmluZyB0aGUgcmVzcG9uc2UgY2Fycmllc1xyXG4gICAqICAgYSBuZXN0ZWQgYHByb2N0b3JpbmdgIHNlc3Npb247IG90aGVyd2lzZSBpdCdzIGEgcGxhaW4gYXNzZXNzZWUgRFRPICh3aXRoIGBjcmVhdGVkQXRgKS5cclxuICAgKiAtIEV4aXN0aW5nIGF0dGVtcHQ6IHByb2N0b3JpbmcgcmVmcmVzaGVzIHRoZSB0b2tlbiAoZmxhdCBQcm9jdG9yaW5nU2Vzc2lvbik7IG5vbi1wcm9jdG9yaW5nIGlzIGEgbm8tb3BcclxuICAgKiAgICh0aGUgYXNzZXNzZWUgd2FzIGFscmVhZHkgbG9hZGVkLCBzbyBgY3JlYXRlZEF0YCBpcyBrbm93bikuXHJcbiAgICogV2hlbiBwcm9jdG9yaW5nIGlzIGVuYWJsZWQgaXQgdGhlbiBzdGFydHMgdGhlIFByb2N0b3JMaW5rIFNESyBhbmQgd2FpdHMgZm9yIGNhbWVyYSBwZXJtaXNzaW9uLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc3RhcnRBc3Nlc3NtZW50U2Vzc2lvbihyZWZlcmVuY2VJbWFnZUJhc2U2NDogc3RyaW5nID0gJycpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgYXNzZXNzZWVJZCA9IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uaWQgfHwgdGhpcy5hc3Nlc3NlZURhdGE/LmlkO1xyXG4gICAgY29uc3QgcmVxdWVzdCQ6IE9ic2VydmFibGU8YW55PiA9IGFzc2Vzc2VlSWRcclxuICAgICAgPyAodGhpcy5pc1Byb2N0b3JpbmdFbmFibGVkID8gdGhpcy5hc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLnJlZnJlc2hQcm9jdG9yaW5nVG9rZW4oYXNzZXNzZWVJZCkgOiBvZihudWxsKSlcclxuICAgICAgOiB0aGlzLmFzc2Vzc21lbnRUYWtlclNlcnZpY2Uuc3VibWl0QXNzZXNzbWVudCh0aGlzLmJ1aWxkSW5pdEFzc2Vzc2VlUGF5bG9hZChyZWZlcmVuY2VJbWFnZUJhc2U2NCkpO1xyXG4gICAgcmV0dXJuIHJlcXVlc3QkLnBpcGUoXHJcbiAgICAgIHRhcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIXJlcyB8fCB0eXBlb2YgcmVzICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc1Byb2N0b3JpbmdFbmFibGVkKSB7XHJcbiAgICAgICAgICAvLyBjcmVhdGUgcmV0dXJucyB0aGUgRFRPIChuZXN0ZWQgYHByb2N0b3JpbmdgKTsgcmVmcmVzaCByZXR1cm5zIHRoZSBzZXNzaW9uIGZpZWxkcyBmbGF0XHJcbiAgICAgICAgICBjb25zdCBwcm9jdG9yaW5nOiBQcm9jdG9yaW5nU2Vzc2lvbiA9IHJlcy5wcm9jdG9yaW5nID8/IHJlcztcclxuICAgICAgICAgIGNvbnN0IGFzc2Vzc2VlRmllbGRzID0gcmVzLnByb2N0b3JpbmcgPyByZXMgOiB7fTtcclxuICAgICAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZSA9IHsgLi4udGhpcy5hc3Nlc3NlZVJlc3BvbnNlLCAuLi5hc3Nlc3NlZUZpZWxkcywgcHJvY3RvcmluZyB9O1xyXG4gICAgICAgICAgdGhpcy5wcm9jdG9yaW5nU2Vzc2lvblN0YXJ0ZWQgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBub24tcHJvY3RvcmluZyBjcmVhdGUg4oaSIG1lcmdlIHRoZSBuZXcgYXNzZXNzZWUgKGlkICsgY3JlYXRlZEF0KVxyXG4gICAgICAgICAgdGhpcy5hc3Nlc3NlZVJlc3BvbnNlID0geyAuLi50aGlzLmFzc2Vzc2VlUmVzcG9uc2UsIC4uLnJlcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFzc2Vzc2VlSWQpIHtcclxuICAgICAgICAgIHRoaXMubmV3QXNzZXNzZWVTZXNzaW9uID0gdHJ1ZTtcclxuICAgICAgICAgIC8vIGZpcnN0IGF0dGVtcHQganVzdCBjcmVhdGVkIHRoZSBhc3Nlc3NlZSDigJQgbm90aWZ5IHRoZSBob3N0IGl0J3MgaW4gcHJvZ3Jlc3NcclxuICAgICAgICAgIHRoaXMuc3VibWl0QXNzZXNzbWVudC5lbWl0KHtcclxuICAgICAgICAgICAgYXNzZXNzZWVJZDogdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5pZCxcclxuICAgICAgICAgICAgYXNzZXNzZWVSZXNwb25zZTogdGhpcy5hc3Nlc3NlZVJlc3BvbnNlLFxyXG4gICAgICAgICAgICBjb21wbGV0ZWQ6IGZhbHNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICAvLyBwcm9jdG9yZWQ6IHN0YXJ0IHRoZSBQcm9jdG9yTGluayBzZXNzaW9uIGFuZCByZXF1ZXN0IGNhbWVyYTsgY29tcGxldGVzIG9ubHkgb25jZSBncmFudGVkLlxyXG4gICAgICAvLyBub24tcHJvY3RvcmVkOiBub3RoaW5nIG1vcmUgdG8gZG8uXHJcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmlzUHJvY3RvcmluZ0VuYWJsZWRcclxuICAgICAgICA/IHRoaXMucHJvY3RvcmluZ1NlcnZpY2Uuc3RhcnQoe1xyXG4gICAgICAgICAgc2Vzc2lvbklkOiB0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LnByb2N0b3Jpbmc/LnByb3ZpZGVyU2Vzc2lvbklkLFxyXG4gICAgICAgICAgand0OiB0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LnByb2N0b3Jpbmc/LnByb3ZpZGVyU2Vzc2lvbkp3dCB8fCAnJyxcclxuICAgICAgICAgIC8vIG9uIHRva2VuLWV4cGlyZWQsIHJlLW1pbnQgdmlhIHRoZSByZWZyZXNoIEFQSSBhbmQgcmV0dXJuIE9OTFkgdGhlIG5ldyBKV1QgdG8gdGhlIFNES1xyXG4gICAgICAgICAgcmVmcmVzaFRva2VuOiAoKSA9PiB0aGlzLnJlZnJlc2hQcm9jdG9yaW5nSnd0KCksXHJcbiAgICAgICAgICAvLyB0aGUgU0RLIGlzIGxvYWRlZCBieSB0aGUgaG9zdCAoa2VlcHMgQHByb2N0b3JsaW5rL3NkayBvdXQgb2YgdGhlIGxpYnJhcnkgYnVuZGxlKVxyXG4gICAgICAgICAgc2RrTG9hZGVyOiB0aGlzLnByb2N0b3JMaW5rTG9hZGVyXHJcbiAgICAgICAgfSlcclxuICAgICAgICA6IG9mKHZvaWQgMCkpLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChlcnI/LmNvZGUgPT09ICdjYW1lcmFfZGVuaWVkJykge1xyXG4gICAgICAgICAgLy8gc3VyZmFjZWQgaW5zaWRlIHRoZSBpbnRybyBnYXRlIHNvIHRoZSBjYW5kaWRhdGUgY2FuIGFsbG93IHRoZSBjYW1lcmEgYW5kIHJldHJ5XHJcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcih7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLkNBTUVSQV9ERU5JRUQnXSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gYmFja2VuZCByZWplY3RlZCB0aGUgcmVmZXJlbmNlIHBob3RvIChlLmcuIG5vIGNsZWFyIGZhY2UpIOKAlCBwcm9tcHQgdGhlIGNhbmRpZGF0ZSB0byByZXRha2UgaXRcclxuICAgICAgICBpZiAoZXJyPy5lcnJvcj8uZXJyb3JDb2RlID09PSAnRVJSX1BST0NUT1JJTkdfUFJPVklERVJfQ0xJRU5UJykge1xyXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUFJPQ1RPUklORy5SRUZFUkVOQ0VfSU1BR0VfUkVKRUNURUQnXSwgcmV0YWtlUGhvdG86IHRydWUgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuRVJST1JfREVGQVVMVCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBST0NUT1JJTkcuU0VTU0lPTl9FUlJPUiddIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlLW1pbnRzIHRoZSBwcm9jdG9yaW5nIHRva2VuIHZpYSB0aGUgcmVmcmVzaCBBUEkgYW5kIHJldHVybnMgT05MWSB0aGUgbmV3IHByb3ZpZGVyIEpXVFxyXG4gICAqICh1c2VkIGJ5IHRoZSBTREsncyB0b2tlbi1leHBpcmVkIGZsb3cpLiBUaGUgcmVzdCBvZiB0aGUgcmVmcmVzaCByZXNwb25zZSBpcyBpbnRlbnRpb25hbGx5XHJcbiAgICogaWdub3JlZCDigJQgdGhlIGxpdmUgc2Vzc2lvbiBtdXN0IG5vdCBiZSByZS1zZWVkZWQgZnJvbSBpdCBtaWQtYXR0ZW1wdC5cclxuICAgKi9cclxuICBwcml2YXRlIHJlZnJlc2hQcm9jdG9yaW5nSnd0KCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBhc3Nlc3NlZUlkID0gdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5pZCB8fCB0aGlzLmFzc2Vzc2VlRGF0YT8uaWQgfHwgMDtcclxuICAgIHJldHVybiB0aGlzLmFzc2Vzc21lbnRUYWtlclNlcnZpY2UucmVmcmVzaFByb2N0b3JpbmdUb2tlbihhc3Nlc3NlZUlkKS5waXBlKFxyXG4gICAgICBtYXAoKHJlczogYW55KSA9PiAocmVzPy5wcm92aWRlclNlc3Npb25Kd3QgPz8gcmVzPy5wcm9jdG9yaW5nPy5wcm92aWRlclNlc3Npb25Kd3QpIHx8ICcnKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRJbml0QXNzZXNzZWVQYXlsb2FkKHJlZmVyZW5jZUltYWdlQmFzZTY0OiBzdHJpbmcgPSAnJyk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZUJ1aWxkZXJTZXJ2aWNlLmJ1aWxkSW5pdEFzc2Vzc2VlUGF5bG9hZChcclxuICAgICAgdGhpcy5hc3Nlc3NlZVJlc3BvbnNlLFxyXG4gICAgICB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSxcclxuICAgICAgdGhpcy5zZWN0aW9uRm9ybUdyb3VwcyxcclxuICAgICAgdGhpcy5xdWVzdGlvbkJhbmssXHJcbiAgICAgIHRoaXMudGVuYW50SWQsXHJcbiAgICAgIHJlZmVyZW5jZUltYWdlQmFzZTY0XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBiZWdpbkFzc2Vzc21lbnQoKSB7XHJcbiAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMuYXNzZXNzbWVudER1cmF0aW9uU2Vjb25kcztcclxuICAgIGlmICghKGR1cmF0aW9uID4gMCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gcHJldmlldy9kaXNhYmxlZDogc2hvdyB0aGUgc3RhdGljIGZ1bGwgZHVyYXRpb24sIG5vIGNvdW50ZG93blxyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5wcmV2aWV3TW9kZSkge1xyXG4gICAgICB0aGlzLnJlbWFpbmluZ1RpbWUgPSBkdXJhdGlvbjtcclxuICAgICAgdGhpcy51cGRhdGVEaXNwbGF5VGltZSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yZXN1bWVUaW1lckFjcm9zc1Zpc2l0cyAmJiAhdGhpcy5uZXdBc3Nlc3NlZVNlc3Npb24pIHtcclxuICAgICAgdGhpcy5iZWdpblRyYWNrZWRUaW1lcihkdXJhdGlvbik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0YXJ0VGltZXIoZHVyYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RhcnRzIGEgdGltZXIgYW5jaG9yZWQgdG8gdGhlIGFzc2Vzc2VlJ3MgZmlyc3QtdmlzaXQgdGltZS4gVGhlIGFzc2Vzc2VlIGlzIGFscmVhZHkgY3JlYXRlZCBieSB0aGVcclxuICAgKiBpbnRybyBnYXRlIChzbyBgY3JlYXRlZEF0YCBpcyBrbm93bik7IHJlbWFpbmluZyB0aW1lIGlzIGBkdXJhdGlvbiAtIGVsYXBzZWRTaW5jZUNyZWF0ZWRBdGAuXHJcbiAgICogSWYgdGhlIHRpbWUgaGFzIGFscmVhZHkgcnVuIG91dCAoY2FuZGlkYXRlIGxlZnQgYW5kIHJldHVybmVkIGxhdGUpLCBzaG93cyAwMDowMCBhbmQgYXV0by1zdWJtaXRzLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgYmVnaW5UcmFja2VkVGltZXIoZHVyYXRpb246IG51bWJlcikge1xyXG4gICAgY29uc3QgY3JlYXRlZEF0ID0gdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5jcmVhdGVkQXQ7XHJcbiAgICBjb25zdCBlbGFwc2VkID0gY3JlYXRlZEF0ID8gTWF0aC5mbG9vcigoRGF0ZS5ub3coKSAtIGNyZWF0ZWRBdCkgLyAxMDAwKSA6IDA7XHJcbiAgICBjb25zdCByZW1haW5pbmcgPSBkdXJhdGlvbiAtIGVsYXBzZWQ7XHJcbiAgICBpZiAocmVtYWluaW5nIDw9IDApIHtcclxuICAgICAgdGhpcy5yZW1haW5pbmdUaW1lID0gMDtcclxuICAgICAgdGhpcy51cGRhdGVEaXNwbGF5VGltZSgpOyAvLyBzaG93cyAwMDowMFxyXG4gICAgICB0aGlzLmF1dG9TdWJtaXQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGFydFRpbWVyKHJlbWFpbmluZyk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVRdWVzdGlvbkNvbmRpdGlvbmFsQ29udHJvbHMoZmc6IEZvcm1Hcm91cCwgcXVlc3Rpb246IEFzc2Vzc21lbnRRdWVzdGlvbikge1xyXG4gICAgaWYgKCFxdWVzdGlvbiB8fCAhcXVlc3Rpb24uaWQgfHwgIXF1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdD8ubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcUlkID0gcXVlc3Rpb24uaWQ7XHJcbiAgICBxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3QuZm9yRWFjaCgob3B0aW9uOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuaXNPcHRpb25TZWxlY3RlZChmZywgcXVlc3Rpb24sIG9wdGlvbi5vcHRpb25zPy5pZCk7XHJcblxyXG4gICAgICBpZiAob3B0aW9uLnJlbWFya3NSZXF1aXJlZCkge1xyXG4gICAgICAgIGNvbnN0IHJlbWFya0N0cmwgPSBmZy5nZXQoYCR7cUlkfV9yZW1hcmtzXyR7b3B0aW9uLmlkfWApO1xyXG4gICAgICAgIGlmIChpc1NlbGVjdGVkKSB7XHJcbiAgICAgICAgICByZW1hcmtDdHJsPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZW1hcmtDdHJsPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgIHJlbWFya0N0cmw/LnNldFZhbHVlKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZW1hcmtDdHJsPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChvcHRpb24uY2hpbGRRdWVzdGlvbkxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgIG9wdGlvbi5jaGlsZFF1ZXN0aW9uTGlzdC5mb3JFYWNoKChjaGlsZElkOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNoaWxkUXVlcyA9IHRoaXMucXVlc3Rpb25CYW5rW2NoaWxkSWRdO1xyXG4gICAgICAgICAgaWYgKGNoaWxkUXVlcz8uaWQpIHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRDdHJsID0gZmcuZ2V0KGNoaWxkUXVlcy5pZD8udG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIGlmIChpc1NlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHRoaXMuZ2V0VmFsaWRhdG9yc0ZvclF1ZXN0aW9uKGNoaWxkUXVlcywgY2hpbGRRdWVzLmlzTWFuZGF0b3J5IHx8IGZhbHNlKS5maWx0ZXIodiA9PiAhIXYpO1xyXG4gICAgICAgICAgICAgIGNoaWxkQ3RybD8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycykpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNoaWxkQ3RybD8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgICAgY2hpbGRDdHJsPy5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjaGlsZEN0cmw/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBlbWl0U3RlcERldGFpbHMoKSB7XHJcbiAgICBpZiAodGhpcy5zZWN0aW9uRm9ybUdyb3VwcyAmJiB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zdGVwQ2hhbmdlZC5lbWl0KHtcclxuICAgICAgICBjdXJyZW50U3RlcEluZGV4OiB0aGlzLnNlbGVjdGVkVGFiSW5kZXgsXHJcbiAgICAgICAgdG90YWxTdGVwczogdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGgsXHJcbiAgICAgICAgaXNMYXN0U3RlcDogdGhpcy5zZWxlY3RlZFRhYkluZGV4ID09PSB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLmxlbmd0aCAtIDFcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRDb250cm9sRm9yUXVlc3Rpb24oZ3JvdXA6IGFueSwgcXVlc3Rpb246IEFzc2Vzc21lbnRRdWVzdGlvbiwgaXNNYW5kYXRvcnk6IGJvb2xlYW4gPSBmYWxzZSwgaXNDaGlsZDogYm9vbGVhbiA9IGZhbHNlLCBwYXJlbnRJZD86IG51bWJlciwgcGFyZW50T3B0aW9uSWQ/OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHFJZCA9IHF1ZXN0aW9uLmlkO1xyXG4gICAgaWYgKCFxSWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5nZXRWYWxpZGF0b3JzRm9yUXVlc3Rpb24ocXVlc3Rpb24sIGlzTWFuZGF0b3J5KS5maWx0ZXIodiA9PiAhIXYpO1xyXG4gICAgbGV0IHByZWZpbGxlZFZhbHVlID0gdGhpcy5nZXRQcmVmaWxsZWRBbnN3ZXIocUlkLCBpc0NoaWxkLCBwYXJlbnRJZCwgcGFyZW50T3B0aW9uSWQpO1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wocHJlZmlsbGVkVmFsdWUsIFZhbGlkYXRvcnMuY29tcG9zZSh2YWxpZGF0b3JzKSk7XHJcblxyXG4gICAgLy8gRGlzYWJsZSBpZiBhc3Nlc3NtZW50IGlzIGNvbXBsZXRlZFxyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgY29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ3JvdXBbcUlkXSA9IGNvbnRyb2w7XHJcblxyXG4gICAgLy8gQXR0YWNoIG1hcmsgYXNzaWdubWVudCBjb250cm9sIGlmIHJlcXVpcmVkXHJcbiAgICBpZiAodGhpcy5lbmFibGVNYXJrcyAmJiB0aGlzLnNob3VsZFNob3dNYXJrc0Ryb3Bkb3duKHF1ZXN0aW9uKSkge1xyXG4gICAgICBsZXQgbWFya1ZhbHVlID0gdGhpcy5nZXRQcmVmaWxsZWRNYXJrKHFJZCwgaXNDaGlsZCwgcGFyZW50SWQsIHBhcmVudE9wdGlvbklkKTtcclxuICAgICAgZ3JvdXBbYCR7cUlkfV9tYXJrc2BdID0gbmV3IEZvcm1Db250cm9sKG1hcmtWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQcmVmaWxsZWRNYXJrKHFJZDogbnVtYmVyLCBpc0NoaWxkOiBib29sZWFuID0gZmFsc2UsIHBhcmVudElkPzogbnVtYmVyLCBwYXJlbnRPcHRpb25JZD86IG51bWJlcik6IGFueSB7XHJcbiAgICBpZiAoIXRoaXMuYXNzZXNzZWVSZXNwb25zZT8uYWlhZGVmYXVsdFJlc3BvbnNlTGlzdCkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBhbnN3ZXJPYmogPSB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UuYWlhZGVmYXVsdFJlc3BvbnNlTGlzdC5maW5kKChhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGlzQ2hpbGQpIHtcclxuICAgICAgICByZXR1cm4gYS5jaGlsZFF1ZXN0aW9uSWQgPT09IHFJZCAmJiBhLmNoaWxkUXVlc3Rpb25QYXJlbnRRdWVzdGlvbklkID09PSBwYXJlbnRJZCAmJiBhLmNoaWxkRGVmYXVsdE9wdGlvbklkID09PSBwYXJlbnRPcHRpb25JZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYS5zZWN0aW9uUXVlc3Rpb24/LnF1ZXN0aW9uSWQgPT09IHFJZCAmJiAoIWEuY2hpbGRRdWVzdGlvbklkIHx8IGEuY2hpbGRRdWVzdGlvbklkID09PSAwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYW5zd2VyT2JqPy5tYXJrcyA/PyBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0UXVlc3Rpb25BbnN3ZXJPYmoocUlkOiBudW1iZXIsIHBhcmVudE9wdGlvbklkPzogbnVtYmVyIHwgbnVsbCwgcGFyZW50UXVlc3Rpb25JZD86IG51bWJlciB8IG51bGwpOiBhbnkge1xyXG4gICAgaWYgKCF0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmFpYWRlZmF1bHRSZXNwb25zZUxpc3QpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgaXNDaGlsZCA9IHBhcmVudE9wdGlvbklkICE9PSB1bmRlZmluZWQgJiYgcGFyZW50T3B0aW9uSWQgIT09IG51bGw7XHJcbiAgICByZXR1cm4gdGhpcy5hc3Nlc3NlZVJlc3BvbnNlLmFpYWRlZmF1bHRSZXNwb25zZUxpc3QuZmluZCgoYTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpc0NoaWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIGEuY2hpbGRRdWVzdGlvbklkID09PSBxSWQgJiYgYS5jaGlsZFF1ZXN0aW9uUGFyZW50UXVlc3Rpb25JZCA9PT0gcGFyZW50UXVlc3Rpb25JZCAmJiBhLmNoaWxkRGVmYXVsdE9wdGlvbklkID09PSBwYXJlbnRPcHRpb25JZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYS5zZWN0aW9uUXVlc3Rpb24/LnF1ZXN0aW9uSWQgPT09IHFJZCAmJiAoIWEuY2hpbGRRdWVzdGlvbklkIHx8IGEuY2hpbGRRdWVzdGlvbklkID09PSAwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRRdWVzdGlvbldlaWdodChxSWQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhbmtbcUlkXT8ud2VpZ2h0IHx8IDA7XHJcbiAgfVxyXG5cclxuICBzaG91bGRTaG93TWFya3NEcm9wZG93bihxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBhdXRvQXNzaWduZWRUeXBlcyA9IFtcclxuICAgICAgJ1FVRVNUSU9OX1RZUEUuT0JKRUNUSVZFJyxcclxuICAgICAgJ1FVRVNUSU9OX1RZUEUuTVVMVElfU0VMRUNUJ1xyXG4gICAgXTtcclxuICAgIGNvbnN0IGhhc1dlaWdodCA9IHRoaXMuZ2V0UXVlc3Rpb25XZWlnaHQocXVlc3Rpb24uaWQgfHwgMCkgPiAwO1xyXG4gICAgcmV0dXJuICFhdXRvQXNzaWduZWRUeXBlcy5pbmNsdWRlcyhxdWVzdGlvbi5xdWVzdGlvblR5cGU/LmNvZGUgfHwgJycpICYmIGhhc1dlaWdodDtcclxuICB9XHJcblxyXG4gIGdldFByZWZpbGxlZEFuc3dlcihxSWQ6IG51bWJlciwgaXNDaGlsZDogYm9vbGVhbiA9IGZhbHNlLCBwYXJlbnRJZD86IG51bWJlciwgcGFyZW50T3B0aW9uSWQ/OiBudW1iZXIpOiBhbnkge1xyXG4gICAgaWYgKCF0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmFpYWRlZmF1bHRSZXNwb25zZUxpc3QpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGNvbnN0IGFuc3dlck9iaiA9IHRoaXMuYXNzZXNzZWVSZXNwb25zZS5haWFkZWZhdWx0UmVzcG9uc2VMaXN0LmZpbmQoKGE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaXNDaGlsZCkge1xyXG4gICAgICAgIHJldHVybiBhLmNoaWxkUXVlc3Rpb25JZCA9PT0gcUlkICYmIGEuY2hpbGRRdWVzdGlvblBhcmVudFF1ZXN0aW9uSWQgPT09IHBhcmVudElkICYmIGEuY2hpbGREZWZhdWx0T3B0aW9uSWQgPT09IHBhcmVudE9wdGlvbklkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBhLnNlY3Rpb25RdWVzdGlvbj8ucXVlc3Rpb25JZCA9PT0gcUlkICYmICghYS5jaGlsZFF1ZXN0aW9uSWQgfHwgYS5jaGlsZFF1ZXN0aW9uSWQgPT09IDApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIWFuc3dlck9iaikgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uQmFua1txSWRdO1xyXG4gICAgaWYgKCFxdWVzdGlvbikgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgY29uc3QgcVR5cGUgPSBxdWVzdGlvbi5xdWVzdGlvblR5cGU/LmNvZGU7XHJcblxyXG4gICAgaWYgKHFUeXBlID09PSAnUVVFU1RJT05fVFlQRS5PQkpFQ1RJVkUnKSB7XHJcbiAgICAgIHJldHVybiBhbnN3ZXJPYmoub3B0aW9uSWQ7XHJcbiAgICB9IGVsc2UgaWYgKHFUeXBlID09PSAnUVVFU1RJT05fVFlQRS5NVUxUSV9TRUxFQ1QnIHx8IHFUeXBlID09PSAnUVVFU1RJT05fVFlQRS5QUkVGRVJFTkNFJykge1xyXG4gICAgICBsZXQgc29ydGVkTGlzdCA9IFsuLi4oYW5zd2VyT2JqLmRyb2JqZWN0aXZlcmVzcG9uc2VMaXN0IHx8IFtdKV07XHJcbiAgICAgIGlmIChxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuUFJFRkVSRU5DRScpIHtcclxuICAgICAgICBzb3J0ZWRMaXN0LnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiAoYS5vcmRlck5vIHx8IDApIC0gKGIub3JkZXJObyB8fCAwKSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHNvcnRlZExpc3QubWFwKChyOiBhbnkpID0+IHIuZGVmYXVsdE9wdGlvbj8ub3B0aW9ucykgfHwgW107XHJcbiAgICB9IGVsc2UgaWYgKHFUeXBlID09PSAnUVVFU1RJT05fVFlQRS5GSUxFX1VQTE9BRCcpIHtcclxuICAgICAgcmV0dXJuIGFuc3dlck9iai5hdHRhY2htZW50UmVzcG9uc2VMaXN0IHx8IFtdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGFuc3dlck9iai5kcnN1YmplY3RpdmVyZXNwb25zZUxpc3Q/LlswXT8ucmVzcG9uc2VUZXh0ID8/IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRWYWxpZGF0b3JzRm9yUXVlc3Rpb24ocXVlc3Rpb246IEFzc2Vzc21lbnRRdWVzdGlvbiwgaXNNYW5kYXRvcnk6IGJvb2xlYW4pOiBhbnlbXSB7XHJcbiAgICBjb25zdCB2YWxpZGF0b3JzOiBhbnlbXSA9IFtdO1xyXG4gICAgaWYgKGlzTWFuZGF0b3J5KSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLnBhdHRlcm4oLy4qXFxTLiovKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHF1ZXN0aW9uLnJlc3BvbnNlVmFsaWRhdGlvbj8ubGVuZ3RoKSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4ocXVlc3Rpb24ucmVzcG9uc2VWYWxpZGF0aW9uKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocXVlc3Rpb24ucXVlc3Rpb25UeXBlPy5jb2RlID09PSAnUVVFU1RJT05fVFlQRS5FTUFJTCcpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKC9eW2EtekEtWjAtOS5fJSstXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLH0kLykpO1xyXG4gICAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZT8uY29kZSA9PT0gJ1FVRVNUSU9OX1RZUEUuVVJMJykge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oL14oaHR0cHM/OlxcL1xcLyk/KFtcXHdcXC1dKyhcXC5bXFx3XFwtXSspKykoW1xcLz8jXS4qKT8kL2kpKTtcclxuICAgICAgfSBlbHNlIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGU/LmNvZGUgPT09ICdRVUVTVElPTl9UWVBFLkNPTlRBQ1RfTlVNQkVSJykge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oL15bMC05XXsxMH0kLykpO1xyXG4gICAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZT8uY29kZSA9PT0gJ1FVRVNUSU9OX1RZUEUuTlVNQkVSJykge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oL15cXGQrKFxcLlxcZCspPyQvKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAocXVlc3Rpb24ucXVlc3Rpb25Db25maWdzICYmIHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IG1pbkNoYXIgPSBxdWVzdGlvbi5xdWVzdGlvbkNvbmZpZ3MuZmluZChjID0+IGMuY29uZmlnS2V5ID09PSAnbWluQ2hhcmFjdGVyQ291bnQnKT8uY29uZmlnVmFsdWU7XHJcbiAgICAgIGlmIChtaW5DaGFyKSB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgoTnVtYmVyKG1pbkNoYXIpKSwgVmFsaWRhdG9ycy5wYXR0ZXJuKC8uKlxcUy4qLykpO1xyXG5cclxuICAgICAgY29uc3QgbWF4Q2hhciA9IHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncy5maW5kKGMgPT4gYy5jb25maWdLZXkgPT09ICdtYXhDaGFyYWN0ZXJDb3VudCcpPy5jb25maWdWYWx1ZTtcclxuICAgICAgaWYgKG1heENoYXIpIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aChOdW1iZXIobWF4Q2hhcikpKTtcclxuXHJcbiAgICAgIGNvbnN0IG1pbk9wdCA9IHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncy5maW5kKGMgPT4gYy5jb25maWdLZXkgPT09ICdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8uY29uZmlnVmFsdWU7XHJcbiAgICAgIGlmIChtaW5PcHQpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goKGNvbnRyb2w6IEZvcm1Db250cm9sKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgY29udHJvbC52YWx1ZS5sZW5ndGggPCBOdW1iZXIobWluT3B0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBtaW5PcHRpb25zOiB7IHJlcXVpcmVkOiBOdW1iZXIobWluT3B0KSwgYWN0dWFsOiBjb250cm9sLnZhbHVlPy5sZW5ndGggfHwgMCB9IH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgbWF4T3B0ID0gcXVlc3Rpb24ucXVlc3Rpb25Db25maWdzLmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy5jb25maWdWYWx1ZTtcclxuICAgICAgaWYgKG1heE9wdCkge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaCgoY29udHJvbDogRm9ybUNvbnRyb2wpID0+IHtcclxuICAgICAgICAgIGlmIChjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUubGVuZ3RoID4gTnVtYmVyKG1heE9wdCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgbWF4T3B0aW9uczogeyByZXF1aXJlZDogTnVtYmVyKG1heE9wdCksIGFjdHVhbDogY29udHJvbC52YWx1ZT8ubGVuZ3RoIHx8IDAgfSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IG1heEZpbGVzID0gcXVlc3Rpb24ucXVlc3Rpb25Db25maWdzLmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gJ21heE5vT2ZGaWxlcycpPy5jb25maWdWYWx1ZTtcclxuICAgICAgaWYgKG1heEZpbGVzKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKChjb250cm9sOiBGb3JtQ29udHJvbCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgY29udHJvbC52YWx1ZS5sZW5ndGggPiBOdW1iZXIobWF4RmlsZXMpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IG1heEZpbGVzOiB7IHJlcXVpcmVkOiBOdW1iZXIobWF4RmlsZXMpLCBhY3R1YWw6IGNvbnRyb2wudmFsdWU/Lmxlbmd0aCB8fCAwIH0gfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBtYXhGaWxlU2l6ZSA9IHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncy5maW5kKGMgPT4gYy5jb25maWdLZXkgPT09ICdtYXhGaWxlU2l6ZScpPy5jb25maWdWYWx1ZTtcclxuICAgICAgaWYgKG1heEZpbGVTaXplKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKChjb250cm9sOiBGb3JtQ29udHJvbCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgQXJyYXkuaXNBcnJheShjb250cm9sLnZhbHVlKSkge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNMYXJnZUZpbGUgPSBjb250cm9sLnZhbHVlLnNvbWUoKGZpbGU6IGFueSkgPT4gZmlsZT8uc2l6ZSAmJiBmaWxlLnNpemUgPiAoTnVtYmVyKG1heEZpbGVTaXplKSAqIDEwMjQgKiAxMDI0KSk7XHJcbiAgICAgICAgICAgIGlmIChoYXNMYXJnZUZpbGUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4geyBtYXhGaWxlU2l6ZTogeyByZXF1aXJlZFNpemU6IE51bWJlcihtYXhGaWxlU2l6ZSkgfSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbGlkYXRvcnM7XHJcbiAgfVxyXG5cclxuICBpbWFnZUVycm9ySGFuZGxlcihldmVudDogYW55LCBmaWxlUGF0aDogc3RyaW5nKSB7XHJcbiAgICBldmVudC50YXJnZXQuc3JjID0gZmlsZVBhdGg7XHJcbiAgfVxyXG5cclxuICBpc09wdGlvblNlbGVjdGVkKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uLCBvcHRpb25JZDogbnVtYmVyIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIW9wdGlvbklkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNvbnRyb2xOYW1lID0gcXVlc3Rpb24uaWQ/LnRvU3RyaW5nKCk7XHJcblxyXG4gICAgaWYgKCFjb250cm9sTmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lKTtcclxuICAgIGlmICghY29udHJvbCB8fCBjb250cm9sLnZhbHVlID09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAvLyBNdWx0aS1zZWxlY3QgZGVhbHMgd2l0aCBhbiBhcnJheSBvZiB2YWx1ZXNcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBjb250cm9sLnZhbHVlLmluY2x1ZGVzKG9wdGlvbklkKSB8fCBjb250cm9sLnZhbHVlLnNvbWUoKHZhbDogYW55KSA9PiB2YWw/LmlkID09PSBvcHRpb25JZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gT2JqZWN0aXZlIC8gU2luZ2xlIHNlbGVjdCBkZWFscyB3aXRoIGEgc2luZ2xlIHZhbHVlIChjb3VsZCBiZSBpbnRlZ2VyIElEIG9yIG9iamVjdClcclxuICAgIGlmICh0eXBlb2YgY29udHJvbC52YWx1ZSA9PT0gJ29iamVjdCcgJiYgY29udHJvbC52YWx1ZS5pZCkge1xyXG4gICAgICByZXR1cm4gY29udHJvbC52YWx1ZS5pZCA9PT0gb3B0aW9uSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbnRyb2wudmFsdWUgPT09IG9wdGlvbklkO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWF4Q2hhckNvdW50KHF1ZXN0aW9uOiBBc3Nlc3NtZW50UXVlc3Rpb24pOiBudW1iZXIge1xyXG4gICAgY29uc3QgY29uZmlnID0gcXVlc3Rpb24/LnF1ZXN0aW9uQ29uZmlncz8uZmluZChjID0+IGMuY29uZmlnS2V5ID09PSAnbWF4Q2hhcmFjdGVyQ291bnQnKTtcclxuICAgIHJldHVybiBjb25maWcgPyBOdW1iZXIoY29uZmlnLmNvbmZpZ1ZhbHVlKSA6IDA7XHJcbiAgfVxyXG5cclxuICBnZXRSZW1haW5pbmdDaGFycyhxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uLCBjb250cm9sOiBhbnkpOiBudW1iZXIge1xyXG4gICAgY29uc3QgbWF4ID0gdGhpcy5nZXRNYXhDaGFyQ291bnQocXVlc3Rpb24pO1xyXG4gICAgY29uc3QgY3VycmVudExlbmd0aCA9IGNvbnRyb2wudmFsdWUgPyBjb250cm9sLnZhbHVlLmxlbmd0aCA6IDA7XHJcbiAgICByZXR1cm4gbWF4IC0gY3VycmVudExlbmd0aDtcclxuICB9XHJcblxyXG4gIGdvQmFjaygpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkVGFiSW5kZXggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleC0tO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzQ2hlY2tpbmdMaW5rKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VjdGlvbkZvcm1Hcm91cHM/LnNvbWUoZ3JvdXAgPT5cclxuICAgICAgISFncm91cD8uZm9ybUdyb3VwICYmIE9iamVjdC52YWx1ZXMoZ3JvdXAuZm9ybUdyb3VwLmNvbnRyb2xzKS5zb21lKChjOiBhbnkpID0+ICEhYz8uZXJyb3JzPy5bJ2dkcml2ZUxpbmtDaGVja2luZyddKVxyXG4gICAgKSA/PyBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNob3VsZERpc2FibGVUYWIoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbmRleDsgaisrKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzW2pdPy5mb3JtR3JvdXA/LmludmFsaWQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ29OZXh0KHNhdmVEYXRhOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgY29uc3Qgc2F2ZSA9IHRoaXMuYXNzZXNzbWVudERhdGE/LmFzc2Vzc21lbnRDb25maWdzPy5maW5kKGMgPT4gYy5jb25maWdLZXkgPT0gJ2Fzc2VzbWVudC5jb25maWcuYWxsb3dlZC1wYXJ0aWFsLXJlc3BvbnNlJyk/LmNvbmZpZ1ZhbHVlID09ICcxJztcclxuICAgIGNvbnN0IGN1cnJlbnRTZWN0aW9uID0gdGhpcy5zZWN0aW9uRm9ybUdyb3Vwc1t0aGlzLnNlbGVjdGVkVGFiSW5kZXhdO1xyXG4gICAgaWYgKCFjdXJyZW50U2VjdGlvbikgcmV0dXJuO1xyXG5cclxuICAgIGN1cnJlbnRTZWN0aW9uLmZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcblxyXG4gICAgLy8gd2FpdCB3aGlsZSBhIEdvb2dsZSBEcml2ZSBwdWJsaWMtbGluayBjaGVjayBpcyBpbiBwcm9ncmVzc1xyXG4gICAgaWYgKHRoaXMuaXNDaGVja2luZ0xpbmspIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjdXJyZW50U2VjdGlvbi5mb3JtR3JvdXAuaW52YWxpZCkge1xyXG4gICAgICB0aGlzLnNlY3Rpb25FcnJvcnNbdGhpcy5zZWxlY3RlZFRhYkluZGV4XSA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5zZWN0aW9uRXJyb3JzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF0gPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFRhYkluZGV4IDwgdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGggLSAxICYmICF0aGlzLnZlcnRpY2FsVmlldykge1xyXG4gICAgICBzYXZlICYmIHNhdmVEYXRhID8gdGhpcy5zYXZlKCkgOiB0aGlzLnNlbGVjdGVkVGFiSW5kZXgrKztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucHJvY2Vzc1N1Ym1pdChzYXZlRGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzU3VibWl0KHNhdmVEYXRhOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgLy8gd2FpdCB3aGlsZSBhIEdvb2dsZSBEcml2ZSBwdWJsaWMtbGluayBjaGVjayBpcyBpbiBwcm9ncmVzc1xyXG4gICAgaWYgKHRoaXMuaXNDaGVja2luZ0xpbmspIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGZpcnN0SW52YWxpZEluZGV4ID0gLTE7XHJcbiAgICB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLmZvckVhY2goKGdyb3VwLCBpbmRleCkgPT4ge1xyXG4gICAgICBncm91cC5mb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICBpZiAoZ3JvdXAuZm9ybUdyb3VwLmludmFsaWQpIHtcclxuICAgICAgICB0aGlzLnNlY3Rpb25FcnJvcnNbaW5kZXhdID0gdHJ1ZTtcclxuICAgICAgICBpZiAoZmlyc3RJbnZhbGlkSW5kZXggPT09IC0xKSBmaXJzdEludmFsaWRJbmRleCA9IGluZGV4O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VjdGlvbkVycm9yc1tpbmRleF0gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGZpcnN0SW52YWxpZEluZGV4ICE9PSAtMSkge1xyXG4gICAgICBpZiAoIXRoaXMudmVydGljYWxWaWV3KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gZmlyc3RJbnZhbGlkSW5kZXg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZFN0YXRlW2ZpcnN0SW52YWxpZEluZGV4XSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5GSVhfRVJST1JTJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgIHRoaXMuc2Nyb2xsVG9GaXJzdEludmFsaWRGaWVsZChmaXJzdEludmFsaWRJbmRleCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNhdmUodHJ1ZSwgc2F2ZURhdGEpO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsVG9GaXJzdEludmFsaWRGaWVsZChzZWN0aW9uSW5kZXg6IG51bWJlcikge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHNbc2VjdGlvbkluZGV4XS5mb3JtR3JvdXA7XHJcbiAgICAgIGZvciAoY29uc3QgY29udHJvbE5hbWUgaW4gZm9ybUdyb3VwLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0uaW52YWxpZCkge1xyXG4gICAgICAgICAgbGV0IHFJZCA9IGNvbnRyb2xOYW1lO1xyXG4gICAgICAgICAgaWYgKGNvbnRyb2xOYW1lLmluY2x1ZGVzKCdfcmVtYXJrc18nKSB8fCBjb250cm9sTmFtZS5pbmNsdWRlcygnX21hcmtzJykpIHtcclxuICAgICAgICAgICAgcUlkID0gY29udHJvbE5hbWUuc3BsaXQoJ18nKVswXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcXVlc3Rpb24tY29udGFpbmVyLSR7cUlkfWApO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBzYXZlKGdvTmV4dDogYm9vbGVhbiA9IHRydWUsIHNhdmVEYXRhOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgLy8gYmxvY2sgd2hpbGUgYSBHb29nbGUgRHJpdmUgcHVibGljLWxpbmsgY2hlY2sgaXMgaW4gcHJvZ3Jlc3NcclxuICAgIGlmICh0aGlzLmlzU3VibWl0dGluZyB8fCB0aGlzLmlzQ2hlY2tpbmdMaW5rKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkIHx8IHRoaXMuaXNBdXRvU3VibWl0dGluZykge1xyXG4gICAgICBpZiAodGhpcy5tYXJrQXNDb21wbGV0ZWQgJiYgKHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9PSB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLmxlbmd0aCAtIDEgfHwgdGhpcy52ZXJ0aWNhbFZpZXcgfHwgdGhpcy5pc0F1dG9TdWJtaXR0aW5nKSkge1xyXG4gICAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZS5hc3Nlc3NtZW50VGFrZW4gPSB7IGNvZGU6ICdBU1NFU1NNRU5UX1RBS0VOLkNPTVBMRVRFJyB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZS5hc3Nlc3NtZW50VGFrZW4gPSB7IGNvZGU6ICdBU1NFU1NNRU5UX1RBS0VOLklOQ09NUExFVEUnIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5yZXNwb25zZUJ1aWxkZXJTZXJ2aWNlLmJ1aWxkUmVzcG9uc2VQYXlsb2FkKFxyXG4gICAgICB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UsXHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLFxyXG4gICAgICB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLFxyXG4gICAgICB0aGlzLnF1ZXN0aW9uQmFuayxcclxuICAgICAgdGhpcy50ZW5hbnRJZFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93T3ZlcmFsbFJlbWFya3MgJiYgdGhpcy5hc3Nlc3NlZVJlc3BvbnNlKSB7XHJcbiAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZS5ub3RlcyA9IHRoaXMub3ZlcmFsbE5vdGVzQ3RybC52YWx1ZSB8fCBudWxsO1xyXG4gICAgICBwYXlsb2FkLm5vdGVzID0gdGhpcy5hc3Nlc3NlZVJlc3BvbnNlLm5vdGVzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghc2F2ZURhdGEgfHwgKHRoaXMuZGlzYWJsZWQgJiYgIXRoaXMuZW5hYmxlTWFya3MgJiYgIXRoaXMuaXNBdXRvU3VibWl0dGluZykpIHtcclxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdWJtaXRBc3Nlc3NtZW50LmVtaXQoe1xyXG4gICAgICAgIGFzc2Vzc2VlSWQ6IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uaWQsXHJcbiAgICAgICAgYXNzZXNzZWVSZXNwb25zZTogcGF5bG9hZCxcclxuICAgICAgICBjb21wbGV0ZWQ6IGdvTmV4dCAmJiAodGhpcy5zZWxlY3RlZFRhYkluZGV4ID09IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoIC0gMSB8fCB0aGlzLnZlcnRpY2FsVmlldylcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChnb05leHQgJiYgdGhpcy5zZWxlY3RlZFRhYkluZGV4IDwgdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4Kys7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGFwaUNhbGwgPSB0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmlkID8gdGhpcy5hc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLnBhdGNoQXNzZXNzbWVudChwYXlsb2FkKSA6IHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5zdWJtaXRBc3Nlc3NtZW50KHBheWxvYWQpO1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgJiYgdGhpcy5lbmFibGVNYXJrcykge1xyXG4gICAgICBjb25zdCBtYXJrc1BheWxvYWQ6IGFueSA9IHRoaXMucmVzcG9uc2VCdWlsZGVyU2VydmljZS5idWlsZE1hcmtzUGF5bG9hZChwYXlsb2FkKTtcclxuICAgICAgaWYgKHRoaXMuc2hvd092ZXJhbGxSZW1hcmtzKSB7XHJcbiAgICAgICAgbWFya3NQYXlsb2FkLm5vdGVzID0gdGhpcy5vdmVyYWxsTm90ZXNDdHJsLnZhbHVlIHx8IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgYXBpQ2FsbCA9IHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS51cGRhdGVNYXJrcyhtYXJrc1BheWxvYWQpO1xyXG4gICAgfVxyXG4gICAgYXBpQ2FsbC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UgPSByZXM7XHJcbiAgICAgICAgdGhpcy5hc3Nlc3NlZVJlc3BvbnNlID0gcmVzO1xyXG4gICAgICAgIGlmICh0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmFzc2Vzc21lbnRUYWtlbj8uY29kZSA9PSAnQVNTRVNTTUVOVF9UQUtFTi5DT01QTEVURScpIHtcclxuICAgICAgICAgIHRoaXMuZGlzYWJsZUZvcm0oKTtcclxuICAgICAgICAgIC8vIGFzc2Vzc21lbnQgZmluaXNoZWQg4oCUIHN0b3AgcHJvY3RvcmluZyBjYXB0dXJlIGFuZCBlbmQgdGhlIGJhY2tlbmQgc2Vzc2lvblxyXG4gICAgICAgICAgdGhpcy5lbmRQcm9jdG9yaW5nU2Vzc2lvbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm92ZXJhbGxOb3Rlc0N0cmwuc2V0VmFsdWUodGhpcy5hc3Nlc3NlZVJlc3BvbnNlLm5vdGVzIHx8ICcnKTtcclxuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3VibWl0QXNzZXNzbWVudC5lbWl0KHtcclxuICAgICAgICAgIGFzc2Vzc2VlSWQ6IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uaWQgfHwgcmVzLFxyXG4gICAgICAgICAgYXNzZXNzZWVSZXNwb25zZTogdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5pZCA/IHRoaXMuYXNzZXNzZWVSZXNwb25zZSA6IHBheWxvYWQsXHJcbiAgICAgICAgICBjb21wbGV0ZWQ6IGdvTmV4dCAmJiAodGhpcy5zZWxlY3RlZFRhYkluZGV4ID09IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoIC0gMSB8fCB0aGlzLnZlcnRpY2FsVmlldyB8fCB0aGlzLmlzQXV0b1N1Ym1pdHRpbmcpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGdvTmV4dCAmJiB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPCB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLmxlbmd0aCAtIDEgJiYgIXRoaXMuaXNBdXRvU3VibWl0dGluZykge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzQXV0b1N1Ym1pdHRpbmcpIHtcclxuICAgICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuQVVUT19TVUJNSVRURUQnXSwgdHlwZTogJ2luZm8nIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuU0FWRV9GQUlMRUQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uaWQgPyAnUEFUQ0gnIDogJ1BPU1QnLCBwYXlsb2FkIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRBbnN3ZXJzQnlBaWFJZChhc3Nlc3NlZUlkOiBudW1iZXIpIHtcclxuICAgIHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5nZXRBbnN3ZXJzQnlBaWFJZChhc3Nlc3NlZUlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UgPSByZXM7XHJcbiAgICAgICAgaWYgKHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uYXNzZXNzbWVudFRha2VuPy5jb2RlID09ICdBU1NFU1NNRU5UX1RBS0VOLkNPTVBMRVRFJykge1xyXG4gICAgICAgICAgdGhpcy5kaXNhYmxlRm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm92ZXJhbGxOb3Rlc0N0cmwuc2V0VmFsdWUodGhpcy5hc3Nlc3NlZVJlc3BvbnNlLm5vdGVzIHx8ICcnKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkdFVF9GQUlMRUQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdHRVQnIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZGRZb3V0dWJlSWZyYW1lU3JjKHZpZGVvVXJsOiBzdHJpbmcpIHtcclxuICAgIGlmICghdmlkZW9VcmwpIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHRoaXMueW91dHViZVVybENhY2hlW3ZpZGVvVXJsXSkge1xyXG4gICAgICByZXR1cm4gdGhpcy55b3V0dWJlVXJsQ2FjaGVbdmlkZW9VcmxdO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdmlkZW9JZCA9IHRoaXMuZ2V0VmlkZW9JZCh2aWRlb1VybCk7XHJcbiAgICBjb25zdCB5b3V0dWJlVXJsID0gYGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7dmlkZW9JZH1gO1xyXG4gICAgdGhpcy55b3V0dWJlVXJsQ2FjaGVbdmlkZW9VcmxdID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHlvdXR1YmVVcmwpO1xyXG4gICAgcmV0dXJuIHRoaXMueW91dHViZVVybENhY2hlW3ZpZGVvVXJsXTtcclxuICB9XHJcblxyXG4gIGdldFZpZGVvSWQodmlkZW9Vcmw6IHN0cmluZykge1xyXG4gICAgbGV0IHBhdHRlcm4gPSBudWxsO1xyXG4gICAgaWYgKHZpZGVvVXJsLmluY2x1ZGVzKCd5b3V0dWJlLmNvbScpKSB7XHJcbiAgICAgIHBhdHRlcm4gPSAvKD86XFw/dj18JnY9fHlvdXR1XFwuYmVcXC98XFwvZW1iZWRcXC98XFwvXFxkXFwvfFxcL3ZpXFwvfFxcL3ZcXC98aHR0cHM/OlxcL1xcLyg/Ond3d1xcLik/eW91dHViZVxcLmNvbVxcLyg/OnZcXC98ZW1iZWRcXC98d2F0Y2hcXD8oPzpcXFMrJik/dj18d2F0Y2hcXD8oPzpcXFMrJik/dmk9fFxcUytcXC8pKShbYS16QS1aMC05Xy1dezExfSkvO1xyXG4gICAgfSBlbHNlIGlmICh2aWRlb1VybC5pbmNsdWRlcygneW91dHUuYmUnKSkge1xyXG4gICAgICBwYXR0ZXJuID0gL3lvdXR1XFwuYmVcXC8oW2EtekEtWjAtOV8tXXsxMX0pLztcclxuICAgIH1cclxuICAgIGlmIChwYXR0ZXJuKSB7XHJcbiAgICAgIGNvbnN0IG1hdGNoID0gdmlkZW9VcmwubWF0Y2gocGF0dGVybik7XHJcbiAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFsxXSkge1xyXG4gICAgICAgIHJldHVybiBtYXRjaFsxXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBvcGVuSW5zdHJ1Y3Rpb25zRGlhbG9nKHNlY3Rpb246IFF1ZXN0aW9uUGFwZXJTZWN0aW9uKSB7XHJcbiAgICB0aGlzLmRpYWxvZy5vcGVuKFNlY3Rpb25JbnN0cnVjdGlvbnNDb21wb25lbnQsIHtcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgbWF4V2lkdGg6ICc5NSUnLFxyXG4gICAgICB3aWR0aDogJ2NhbGMoMjByZW0gKyA1MDBweCknLFxyXG4gICAgICBtYXhIZWlnaHQ6ICc5NWR2aCcsXHJcbiAgICAgIHBhbmVsQ2xhc3M6IFsnYXNzZXNzbWVudC1kaWFsb2cnXSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGltYWdlQ29uZmlnOiB0aGlzLmltYWdlQ29uZmlnLFxyXG4gICAgICAgIGxhYmVsQ29uZmlnOiB0aGlzLmxhYmVsQ29uZmlnLFxyXG4gICAgICAgIHNlY3Rpb25EZXRhaWxzOiBzZWN0aW9uLFxyXG4gICAgICAgIHlvdXR1YmVVcmxDYWNoZTogdGhpcy55b3V0dWJlVXJsQ2FjaGVcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tNYXhWYWwoZXZlbnQ6IGFueSwgY29udHJvbDogYW55LCBtYXhWYWw6IG51bWJlciB8IHVuZGVmaW5lZCkge1xyXG4gICAgY29uc3QgdG90YWxNYXJrcyA9IE51bWJlcihtYXhWYWwpIHx8IDA7XHJcbiAgICBpZiAodG90YWxNYXJrcyA+IDApIHtcclxuICAgICAgbGV0IHZhbCA9IE51bWJlcihldmVudC50YXJnZXQudmFsdWUpO1xyXG4gICAgICBpZiAodmFsID4gdG90YWxNYXJrcykge1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHRvdGFsTWFya3M7XHJcbiAgICAgICAgY29udHJvbD8uc2V0VmFsdWUodG90YWxNYXJrcywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcmV2ZW50TmVnYXRpdmVJbnB1dChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKFsnLScsICcrJywgJ2UnLCAnRSddLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5Qcm9jdG9yaW5nUmVzdWx0KCkge1xyXG4gICAgdGhpcy5kaWFsb2cub3BlbihQcm9jdG9yaW5nUmVzdWx0Q29tcG9uZW50LCB7XHJcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgIHBvc2l0aW9uOiB7IHJpZ2h0OiAnMCcgfSxcclxuICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcclxuICAgICAgd2lkdGg6ICczNHJlbScsXHJcbiAgICAgIGhlaWdodDogJzEwMGR2aCcsXHJcbiAgICAgIG1heEhlaWdodDogJzEwMGR2aCcsXHJcbiAgICAgIHBhbmVsQ2xhc3M6IFsnYXNzZXNzbWVudC1kaWFsb2cnLCAnYXNzZXNzbWVudC1kaWFsb2ctc2xpZGVyLWFuaW1hdGlvbiddLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGxhYmVsQ29uZmlnOiB0aGlzLmxhYmVsQ29uZmlnLFxyXG4gICAgICAgIGltYWdlQ29uZmlnOiB0aGlzLmltYWdlQ29uZmlnLFxyXG4gICAgICAgIGFzc2Vzc2VlSWQ6IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uaWQgfHwgdGhpcy5hc3Nlc3NlZURhdGE/LmlkLFxyXG4gICAgICAgIGFzc2Vzc2VlTmFtZTogdGhpcy5hc3Nlc3NlZURhdGE/Lm5hbWVcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvcGVuU2tpbGxBbGxvY2F0aW9uRGlhbG9nKHNraWxsTGlzdD86IFNraWxsU2NvcmVbXSkge1xyXG4gICAgdGhpcy5kaWFsb2cub3BlbihTa2lsbEFsbG9jYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgbWF4SGVpZ2h0OiAnOTVkdmgnLFxyXG4gICAgICBtYXhXaWR0aDogJzkwdncnLFxyXG4gICAgICB3aWR0aDogJzM1cmVtJyxcclxuICAgICAgcGFuZWxDbGFzczogWydhc3Nlc3NtZW50LWRpYWxvZyddLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgbGFiZWw6IHRoaXMubGFiZWxDb25maWcsXHJcbiAgICAgICAgc2tpbGxMaXN0XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIHRpbWVyXHJcbiAgc3RhcnRUaW1lcihkdXJhdGlvbkluU2Vjb25kczogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy50aW1lckludGVydmFsKSB7XHJcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lckludGVydmFsKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVtYWluaW5nVGltZSA9IE51bWJlcihkdXJhdGlvbkluU2Vjb25kcyk7XHJcbiAgICB0aGlzLnVwZGF0ZURpc3BsYXlUaW1lKCk7XHJcblxyXG4gICAgdGhpcy50aW1lckludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5yZW1haW5pbmdUaW1lID4gMCkge1xyXG4gICAgICAgIHRoaXMucmVtYWluaW5nVGltZS0tO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGlzcGxheVRpbWUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmF1dG9TdWJtaXQoKTtcclxuICAgICAgfVxyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEaXNwbGF5VGltZSgpIHtcclxuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHRoaXMucmVtYWluaW5nVGltZSAvIDYwKTtcclxuICAgIGNvbnN0IHNlY29uZHMgPSB0aGlzLnJlbWFpbmluZ1RpbWUgJSA2MDtcclxuICAgIGNvbnN0IHBhZGRlZE1pbnV0ZXMgPSBTdHJpbmcobWludXRlcykucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIGNvbnN0IHBhZGRlZFNlY29uZHMgPSBTdHJpbmcoc2Vjb25kcykucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIHRoaXMuZGlzcGxheVRpbWUgPSBgJHtwYWRkZWRNaW51dGVzfToke3BhZGRlZFNlY29uZHN9YDtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGF1dG9TdWJtaXQoKSB7XHJcbiAgICBpZiAodGhpcy50aW1lckludGVydmFsKSB7XHJcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lckludGVydmFsKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVtYWluaW5nVGltZSA9IDA7XHJcbiAgICB0aGlzLnRpbWVFeHBpcmVkID0gdHJ1ZTtcclxuICAgIHRoaXMudXBkYXRlRGlzcGxheVRpbWUoKTtcclxuICAgIHRoaXMuZGlzYWJsZUZvcm0oKTtcclxuICAgIHRoaXMuaXNBdXRvU3VibWl0dGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnNhdmUoKTtcclxuICB9XHJcblxyXG4gIGRpc2FibGVGb3JtKCkge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzPy5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgT2JqZWN0LmtleXMoZ3JvdXA/LmZvcm1Hcm91cD8uY29udHJvbHMpPy5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlTWFya3MgJiYga2V5LmVuZHNXaXRoKCdfbWFya3MnKSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBncm91cD8uZm9ybUdyb3VwPy5jb250cm9scz8uW2tleV0/LmRpc2FibGUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyYWNrQnlTZWN0aW9uSWQoaW5kZXg6IG51bWJlciwgc2VjdGlvbjogYW55KSB7XHJcbiAgICByZXR1cm4gc2VjdGlvbj8uaWQgIT0gbnVsbCA/ICdzJyArIHNlY3Rpb24uaWQgOiAnaScgKyBpbmRleDtcclxuICB9XHJcblxyXG4gIHRyYWNrQnlTZWN0aW9uUXVlc3Rpb24oaW5kZXg6IG51bWJlciwgc3E6IGFueSkge1xyXG4gICAgaWYgKHNxPy5xdWVzdGlvbklkICE9IG51bGwpIHJldHVybiAncScgKyBzcS5xdWVzdGlvbklkO1xyXG4gICAgaWYgKHNxPy5pZCAhPSBudWxsKSByZXR1cm4gJ3MnICsgc3EuaWQ7XHJcbiAgICByZXR1cm4gJ2knICsgaW5kZXg7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5T3B0aW9uSWQoaW5kZXg6IG51bWJlciwgb3B0aW9uOiBhbnkpIHtcclxuICAgIHJldHVybiBvcHRpb24/Lm9wdGlvbnM/LmlkICE9IG51bGwgPyAnbycgKyBvcHRpb24ub3B0aW9ucy5pZCA6ICdpJyArIGluZGV4O1xyXG4gIH1cclxuXHJcbiAgdHJhY2tCeUNoaWxkSWQoaW5kZXg6IG51bWJlciwgaWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIGlkICE9IG51bGwgPyAnYycgKyBpZCA6ICdpJyArIGluZGV4O1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwiY29uZmlnc0xvYWRlZCAmJiAhc2hvd0xvYWRlcjsgZWxzZSBsb2FkZXJcIiBjbGFzcz1cImNvbC0xMiBoLTEwMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBoLTEwMCBwdC0yIHBiLTRcIiBbY2xhc3MuaGVpZ2h0LXdpdGhvdXQtZm9vdGVyXT1cInNob3dGb290ZXJcIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwicHJldmlld01vZGUgJiYgaXNQcm9jdG9yaW5nRW5hYmxlZCAmJiAoYXNzZXNzZWVSZXNwb25zZT8uaWQgfHwgYXNzZXNzZWVEYXRhPy5pZClcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG1iLTNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5Qcm9jdG9yaW5nUmVzdWx0KClcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWJ0bi1wcmltYXJ5LXRyYW5zcGFyZW50IGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLlBST0NUT1JJTkcnXVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL3Byb2N0b3Jpbmcuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAge3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QUk9DVE9SSU5HLlZJRVdfUkVQT1JUJ10gfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBGdWxsLXNjcmVlbiBpbnRybyBnYXRlIOKAlCBxdWVzdGlvbnMgc3RheSBoaWRkZW4gdW50aWwgcHJvY2VlZCAtLT5cclxuICAgICAgICA8bGliLXByb2N0b3JpbmctY29uc2VudCAqbmdJZj1cImludHJvQWN0aXZlXCIgW2xhYmVsQ29uZmlnXT1cImxhYmVsQ29uZmlnXCJcclxuICAgICAgICAgICAgW3Byb2N0b3JpbmdFbmFibGVkXT1cImlzUHJvY3RvcmluZ0VuYWJsZWRcIiBbcmVxdWlyZUNhcHR1cmVdPVwicmVxdWlyZVJlZmVyZW5jZUNhcHR1cmVcIlxyXG4gICAgICAgICAgICBbc2VjdGlvbkNvdW50XT1cInRvdGFsU2VjdGlvbkNvdW50XCIgW3F1ZXN0aW9uQ291bnRdPVwidG90YWxRdWVzdGlvbkNvdW50XCJcclxuICAgICAgICAgICAgW2R1cmF0aW9uU2Vjb25kc109XCJhc3Nlc3NtZW50RHVyYXRpb25TZWNvbmRzXCJcclxuICAgICAgICAgICAgW2NvbmZpcm1BY3Rpb25dPVwic3RhcnRTZXNzaW9uQWN0aW9uXCIgKHByb2NlZWRlZCk9XCJvbkludHJvUHJvY2VlZGVkKClcIj5cclxuICAgICAgICA8L2xpYi1wcm9jdG9yaW5nLWNvbnNlbnQ+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJhc3Nlc3NtZW50Q29udGV4dD8uYXNzZXNzbWVudEluc3RhbmNlRFRPPy5kdXJhdGlvbiAmJiAhcHJldmlld01vZGUgJiYgIWludHJvQWN0aXZlICYmICghZGlzYWJsZWQgfHwgdGltZUV4cGlyZWQpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC1tZC0zIGdhcC0yIHB4LTMgcHktMiBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG1iLTQgdGltZXItY29udGFpbmVyIGFzc2Vzc21lbnQtYmctcGFsZXR0ZS1GRUYxRThcIj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTggYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuIG1iLTBcIj57e2Rpc3BsYXlUaW1lfX08L3A+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTIgbWItMFwiPlxyXG4gICAgICAgICAgICAgICAge3sgdGltZUV4cGlyZWRcclxuICAgICAgICAgICAgICAgICAgICA/IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuVElNRVJfRVhQSVJFRCddXHJcbiAgICAgICAgICAgICAgICAgICAgOiBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlRJTUVSX0FVVE9fU1VCTUlUJ10gfX08L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5sZW5ndGggJiYgIWludHJvQWN0aXZlXCI+XHJcbiAgICAgICAgICAgIDxtYXQtdGFiLWdyb3VwICpuZ0lmPVwiIXZlcnRpY2FsVmlld1wiIGFuaW1hdGlvbkR1cmF0aW9uPVwiMG1zXCIgY2xhc3M9XCJhc3Nlc3NtZW50LW1hdC1jdXN0b20tdGFic1wiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Fzc2Vzc21lbnQtaGlkZS10YWJzJzogaGlkZVNlY3Rpb25UYWJzfVwiIFsoc2VsZWN0ZWRJbmRleCldPVwic2VsZWN0ZWRUYWJJbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC10YWJcclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBhc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0IHwgb3JkZXJCeTsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVNlY3Rpb25JZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNob3VsZERpc2FibGVUYWIoaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VjdGlvbkVycm9yc1tpXSA/ICdhc3Nlc3NtZW50LXRleHQtZGFuZ2VyJyA6ICcnXCI+e3tzZWN0aW9uLnFwc05hbWU/LlswXT8udGV4dH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWN0aW9uQ29udGVudDsgY29udGV4dDogeyBzZWN0aW9uOiBzZWN0aW9uLCBpOiBpIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cclxuICAgICAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxyXG5cclxuICAgICAgICAgICAgPG1hdC1hY2NvcmRpb24gKm5nSWY9XCJ2ZXJ0aWNhbFZpZXdcIiBtdWx0aT1cInRydWVcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtNFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWxcclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBhc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0IHwgb3JkZXJCeTsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVNlY3Rpb25JZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2V4cGFuZGVkXT1cImV4cGFuZGVkU3RhdGVbaV0gIT09IGZhbHNlXCIgKG9wZW5lZCk9XCJleHBhbmRlZFN0YXRlW2ldID0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsb3NlZCk9XCJleHBhbmRlZFN0YXRlW2ldID0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBzaGFkb3ctbm9uZSBtLTAgYXNzZXNzbWVudC1wYW5lbCBiZy10cmFuc3BhcmVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cImFzc2Vzc21lbnQtYmctZ3JleS10d28gaC1hdXRvIGFzc2Vzc21lbnQtcGFuZWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdhcC0yIGNvbC0xMiBwZS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VjdGlvbkVycm9yc1tpXSA/ICdhc3Nlc3NtZW50LXRleHQtZGFuZ2VyJyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzZWN0aW9uLnFwc05hbWU/LlswXT8udGV4dH19PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWN0aW9uV2lzZVNjb3JlPy5bc2VjdGlvbj8uaWRdIGFzIHNlY3Rpb25TY29yZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoc2VjdGlvblNjb3JlPy50b3RhbE1hcmtzID8/IDApID4gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBhc3Nlc3NtZW50LXRleHQtcHJpbWFyeS1mb3VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiKHNlY3Rpb25TY29yZT8uc2tpbGxTY29yZXM/Lmxlbmd0aCA/PyAwKSA+IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTExIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlbiBweC0yIHB5LTEgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBza2lsbC1jaGlwIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9wZW5Ta2lsbEFsbG9jYXRpb25EaWFsb2coc2VjdGlvblNjb3JlPy5za2lsbFNjb3JlcylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VjdGlvblNjb3JlPy5za2lsbFNjb3Jlcz8ubGVuZ3RofX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5TS0lMTFMnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3aGl0ZS1zcGFjZS1ub3dyYXAgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTUgbWUtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5TQ09SRSddfX06PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzZWN0aW9uU2NvcmUub2J0YWluZWRNYXJrcyB8fCAwfX0ve3tzZWN0aW9uU2NvcmUudG90YWxNYXJrc319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VjdGlvbkNvbnRlbnQ7IGNvbnRleHQ6IHsgc2VjdGlvbjogc2VjdGlvbiwgaTogaSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgICAgICAgIDwvbWF0LWFjY29yZGlvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFhc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJoLTEwMCBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTNcIj5cclxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5OT19RVUVTVElPTlMnXVwiIGNsYXNzPVwiY29sLXNtLWF1dG8gY29sLTZcIlxyXG4gICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL25vLXF1ZXN0aW9ucy5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMThcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTk9fUVVFU1RJT05TJ119fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93T3ZlcmFsbFJlbWFya3MgJiYgYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/Lmxlbmd0aFwiIGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTUgbWItMlwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5PVkVSQUxMX1JFTUFSS1MnXX19PC9wPlxyXG4gICAgICAgICAgICA8dGV4dGFyZWFcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEzIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBvdXRsaW5lLTAgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiXHJcbiAgICAgICAgICAgICAgICByb3dzPVwiM1wiIFtmb3JtQ29udHJvbF09XCJvdmVyYWxsTm90ZXNDdHJsXCJcclxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLlJFTUFSS1MnXVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJzaG93Rm9vdGVyICYmICFpbnRyb0FjdGl2ZVwiXHJcbiAgICAgICAgY2xhc3M9XCJiZy13aGl0ZSBwLTMgcG9zaXRpb24tc3RpY2t5IGJvdHRvbS0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWVuZCBib3JkZXItdG9wIGdhcC0zIHotaW5kZXgtMVwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1idXR0b24tcGFkZGluZy1sYXJnZSBhc3Nlc3NtZW50LWJ0bi1wcmltYXJ5LXRyYW5zcGFyZW50IGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xM1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJnb0JhY2soKVwiICpuZ0lmPVwic2VsZWN0ZWRUYWJJbmRleCA+IDAgJiYgIXZlcnRpY2FsVmlld1wiPlxyXG4gICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuR09fQkFDSyddfX08L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1N1Ym1pdHRpbmcgfHwgKGRpc2FibGVkICYmICFlbmFibGVNYXJrcyAmJiAhc2hvd092ZXJhbGxSZW1hcmtzKSB8fCBpc0NoZWNraW5nTGlua1wiIChjbGljayk9XCJ2ZXJ0aWNhbFZpZXcgPyBnb05leHQodHJ1ZSkgOiBnb05leHQoKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmctbGFyZ2UgYXNzZXNzbWVudC1idG4tcHJpbWFyeSBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTMgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieydvcGFjaXR5LTAnOiBpc1N1Ym1pdHRpbmd9XCI+XHJcbiAgICAgICAgICAgICAgICB7eyAodmVydGljYWxWaWV3IHx8IHNlbGVjdGVkVGFiSW5kZXggPT09IHNlY3Rpb25Gb3JtR3JvdXBzLmxlbmd0aCAtIDEpID9cclxuICAgICAgICAgICAgICAgIGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuU1VCTUlUJ10gOiBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk5FWFQnXSB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImlzU3VibWl0dGluZ1wiIFtkaWFtZXRlcl09XCIyMFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIGFzc2Vzc21lbnQtc3Bpbm5lci13aGl0ZVwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2xvYWRlcj5cclxuICAgIDxkaXYgY2xhc3M9XCJoLTEwMCBjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB5LTVcIj5cclxuICAgICAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI2MFwiIGNsYXNzPVwiYXNzZXNzbWVudC1zcGlubmVyLXByaW1hcnlcIj48L21hdC1zcGlubmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFJlY3Vyc2l2ZSBUZW1wbGF0ZSBmb3IgUXVlc3Rpb25zICYgQ2hpbGQgUXVlc3Rpb25zIC0tPlxyXG48bmctdGVtcGxhdGUgI3F1ZXN0aW9uVGVtcGxhdGUgbGV0LXF1ZXN0aW9uSWQ9XCJxdWVzdGlvbklkXCIgbGV0LWlzTWFuZGF0b3J5PVwiaXNNYW5kYXRvcnlcIiBsZXQtZ3JvdXBJbmRleD1cImdyb3VwSW5kZXhcIlxyXG4gICAgbGV0LXBhcmVudE9wdGlvbklkPVwicGFyZW50T3B0aW9uSWRcIiBsZXQtcGFyZW50UXVlc3Rpb25JZD1cInBhcmVudFF1ZXN0aW9uSWRcIiBsZXQtc2VxdWVuY2U9XCJzZXF1ZW5jZVwiPlxyXG4gICAgPGRpdiAqbmdJZj1cInNlY3Rpb25Gb3JtR3JvdXBzW2dyb3VwSW5kZXhdLmZvcm1Hcm91cCBhcyBmb3JtR3JvdXBcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXHJcbiAgICAgICAgW2lkXT1cIidxdWVzdGlvbi1jb250YWluZXItJyArIHF1ZXN0aW9uSWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWJnLXdoaXRlXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieydwLTMgYXNzZXNzbWVudC1jYXJkLWJvcmRlcic6ICFwYXJlbnRPcHRpb25JZH1cIiAqbmdJZj1cInF1ZXN0aW9uQmFua1txdWVzdGlvbklkXSBhcyBxdWVzdGlvblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtbWQtcm93IGZsZXgtY29sdW1uIGdhcC0yIGFsaWduLWl0ZW1zLXN0YXJ0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgZC1mbGV4IGFsaWduLWl0ZW1zLXN0YXJ0IGdhcC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE1IHRleHQtbm93cmFwIGQtbWQtYmxvY2sgZC1ub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZXF1ZW5jZVwiPnt7c2VxdWVuY2V9fS48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTIgYWxpZ24taXRlbXMtc3RhcnQgY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTUgbWItMCBkLWZsZXggZ2FwLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIdG1sXT1cInF1ZXN0aW9uLnF1ZXN0aW9uVGV4dD8uWzBdPy50ZXh0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc01hbmRhdG9yeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMSBhc3Nlc3NtZW50LXRleHQtZ3JleS1laWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFOREFUT1JZJ119fSk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgY29sLTEyXCIgKm5nSWY9XCJxdWVzdGlvbj8ubWVkaWFVcmw/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlZpZGVvVGVtcGxhdGU7IGNvbnRleHQ6e3ZpZGVvVXJsOnF1ZXN0aW9uPy5tZWRpYVVybH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXN0aW9uLmhpbnRUZXh0Py5sZW5ndGggJiYgIXByZXZpZXdNb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5JTkZPJ11cIiBjbGFzcz1cImluZm8taWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9pbmZvLnN2ZycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrT3ZlcmxheU9yaWdpbiAjdHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJ0b29sdGlwU3RhdGVbcXVlc3Rpb24uaWQhXSA9IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJ0b29sdGlwU3RhdGVbcXVlc3Rpb24uaWQhXSA9IGZhbHNlXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0Nvbm5lY3RlZE92ZXJsYXkgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwidHJpZ2dlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJ0b29sdGlwU3RhdGVbcXVlc3Rpb24uaWQhXSB8fCBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zXT1cIlt7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICdjZW50ZXInLCBvdmVybGF5WDogJ2VuZCcsIG92ZXJsYXlZOiAnY2VudGVyJywgb2Zmc2V0WDogLTgsIG9mZnNldFk6IDAgfSwgeyBvcmlnaW5YOiAnZW5kJywgb3JpZ2luWTogJ2NlbnRlcicsIG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ2NlbnRlcicsIG9mZnNldFg6IDgsIG9mZnNldFk6IDAgfV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtYmctZ3JleS10d28gYXNzZXNzbWVudC10b29sdGlwLWJvcmRlciBwLTMgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWJveC1zaGFkb3ctdG9vbHRpcCBxdWVzdGlvbi1pbmZvIGFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInRvb2x0aXBTdGF0ZVtxdWVzdGlvbi5pZCFdID0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJ0b29sdGlwU3RhdGVbcXVlc3Rpb24uaWQhXSA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwicXVlc3Rpb24uaGludFRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gYW5zd2VyIGZpZWxkIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJldmlld01vZGUgJiYgIWlzTW9iaWxlXCIgY2xhc3M9XCJtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhbnN3ZXJGaWVsZDsgY29udGV4dDoge3F1ZXN0aW9uOiBxdWVzdGlvbixwcmV2aWV3TW9kZTogcHJldmlld01vZGUsaXNNYW5kYXRvcnk6IGlzTWFuZGF0b3J5LGdyb3VwSW5kZXg6IGdyb3VwSW5kZXgscGFyZW50T3B0aW9uSWQ6IHBhcmVudE9wdGlvbklkLHBhcmVudFF1ZXN0aW9uSWQ6IHBhcmVudFF1ZXN0aW9uSWR9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBhbnN3ZXIgZmllbGQgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNNb2JpbGVcIiBjbGFzcz1cImNvbC0xMiBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImFuc3dlckZpZWxkOyBjb250ZXh0OiB7cXVlc3Rpb246IHF1ZXN0aW9uLHByZXZpZXdNb2RlOiBwcmV2aWV3TW9kZSxpc01hbmRhdG9yeTogaXNNYW5kYXRvcnksZ3JvdXBJbmRleDogZ3JvdXBJbmRleCxwYXJlbnRPcHRpb25JZDogcGFyZW50T3B0aW9uSWQscGFyZW50UXVlc3Rpb25JZDogcGFyZW50UXVlc3Rpb25JZH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gQXNzZXNzb3IgTWFya3MgTG9naWMgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC1tYXJrcy1maWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJlbmFibGVNYXJrcyAmJiBzaG91bGRTaG93TWFya3NEcm9wZG93bihxdWVzdGlvbikgJiYgZm9ybUdyb3VwLmdldChxdWVzdGlvbi5pZCArICdfbWFya3MnKSBhcyBtYXJrc0NvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFSS1MnXX19KE1heDoge3txdWVzdGlvbi53ZWlnaHR9fSk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCAoa2V5ZG93bik9XCJwcmV2ZW50TmVnYXRpdmVJbnB1dCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImNoZWNrTWF4VmFsKCRldmVudCwgbWFya3NDb250cm9sLCBxdWVzdGlvbj8ud2VpZ2h0KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIHB4LTIgcHktMSBvdXRsaW5lLTAgYXNzZXNzbWVudC1iZy1ncmV5LW9uZSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCArICdfbWFya3MnXCIgdHlwZT1cIm51bWJlclwiIG1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAod2hlZWwpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gYW5zd2VyIGZpZWxkIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXByZXZpZXdNb2RlICYmICFpc01vYmlsZVwiIGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYW5zd2VyRmllbGQ7IGNvbnRleHQ6IHtxdWVzdGlvbjogcXVlc3Rpb24scHJldmlld01vZGU6IHByZXZpZXdNb2RlLGlzTWFuZGF0b3J5OiBpc01hbmRhdG9yeSxncm91cEluZGV4OiBncm91cEluZGV4LHBhcmVudE9wdGlvbklkOiBwYXJlbnRPcHRpb25JZCxwYXJlbnRRdWVzdGlvbklkOiBwYXJlbnRRdWVzdGlvbklkfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQ2hpbGQgUXVlc3Rpb25zIGFuZCBSZW1hcmtzIFJlbmRlcmluZyBMb2dpYyBiYXNlZCBvbiBjaGVja2VkIGZvcm0gc3RhdGUgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3Q/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHF1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdDsgdHJhY2tCeTogdHJhY2tCeU9wdGlvbklkXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc09wdGlvblNlbGVjdGVkKGZvcm1Hcm91cCwgcXVlc3Rpb24sIG9wdGlvbi5vcHRpb25zPy5pZClcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUkVNQVJLUyBGSUVMRCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvcHRpb24ucmVtYXJrc1JlcXVpcmVkICYmIGZvcm1Hcm91cC5nZXQocXVlc3Rpb24uaWQgKyAnX3JlbWFya3NfJyArIG9wdGlvbi5pZCkgYXMgcmVtYXJrc0NvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTUgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5SRU1BUktTJ119fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSAqbmdJZj1cIiFwcmV2aWV3TW9kZVwiIGZvcm1Db250cm9sTmFtZT1cInt7cXVlc3Rpb24uaWR9fV9yZW1hcmtzX3t7b3B0aW9uLmlkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3M9XCIyXCIgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuUExBQ0VIT0xERVIuUkVNQVJLUyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJyZW1hcmtzQ29udHJvbC5pbnZhbGlkICYmIHJlbWFya3NDb250cm9sLnRvdWNoZWQgPyAnYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItaW52YWxpZCcgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTMgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1pbnB1dC1wYWRkaW5nIG91dGxpbmUtMCBhc3Nlc3NtZW50LWJnLWdyZXktb25lXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcmV2aWV3TW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktbmluZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByZW1hcmtzQ29udHJvbC52YWx1ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyZW1hcmtzQ29udHJvbC5pbnZhbGlkICYmIHJlbWFya3NDb250cm9sLnRvdWNoZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuRklFTERfUkVRVUlSRUQnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENISUxEIFFVRVNUSU9OUyBSRUNVUlNJT04gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtNCBkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTNcIiAqbmdJZj1cIm9wdGlvbi5jaGlsZFF1ZXN0aW9uTGlzdD8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGlsZElkIG9mIG9wdGlvbi5jaGlsZFF1ZXN0aW9uTGlzdDsgbGV0IGNoaWxkSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUNoaWxkSWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicXVlc3Rpb25UZW1wbGF0ZTsgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogY2hpbGRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTWFuZGF0b3J5OiBxdWVzdGlvbkJhbmtbY2hpbGRJZF0/LmlzTWFuZGF0b3J5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBJbmRleDogZ3JvdXBJbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9wdGlvbklkOiBvcHRpb24uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbklkOiBxdWVzdGlvbi5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlOiBzZXF1ZW5jZSArICcuJyArIChjaGlsZEluZGV4ICsgMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gYW5zd2VyIGZpZWxkIHRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI2Fuc3dlckZpZWxkIGxldC1xdWVzdGlvbj1cInF1ZXN0aW9uXCIgbGV0LXByZXZpZXdNb2RlPVwicHJldmlld01vZGVcIiBsZXQtaXNNYW5kYXRvcnk9XCJpc01hbmRhdG9yeVwiXHJcbiAgICBsZXQtZ3JvdXBJbmRleD1cImdyb3VwSW5kZXhcIiBsZXQtcGFyZW50T3B0aW9uSWQ9XCJwYXJlbnRPcHRpb25JZFwiIGxldC1wYXJlbnRRdWVzdGlvbklkPVwicGFyZW50UXVlc3Rpb25JZFwiPlxyXG4gICAgPGRpdiAqbmdJZj1cInNlY3Rpb25Gb3JtR3JvdXBzW2dyb3VwSW5kZXhdLmZvcm1Hcm91cFwiIFtmb3JtR3JvdXBdPVwic2VjdGlvbkZvcm1Hcm91cHNbZ3JvdXBJbmRleF0uZm9ybUdyb3VwXCJcclxuICAgICAgICBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInF1ZXN0aW9uLnF1ZXN0aW9uVHlwZT8uY29kZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5TVUJKRUNUSVZFX1NIT1JUJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLXNob3J0IFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCIgW3JlcXVpcmVkXT1cImlzTWFuZGF0b3J5XCJcclxuICAgICAgICAgICAgICAgICAgICBbcHJldmlld01vZGVdPVwicHJldmlld01vZGVcIiBbbGFiZWxDb25maWddPVwibGFiZWxDb25maWdcIj48L2xpYi1xdWVzdGlvbi10eXBlLXNob3J0PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLlNVQkpFQ1RJVkVfTE9ORydcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1sb25nIFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCIgW3JlcXVpcmVkXT1cImlzTWFuZGF0b3J5XCJcclxuICAgICAgICAgICAgICAgICAgICBbcHJldmlld01vZGVdPVwicHJldmlld01vZGVcIiBbbGFiZWxDb25maWddPVwibGFiZWxDb25maWdcIj48L2xpYi1xdWVzdGlvbi10eXBlLWxvbmc+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuU1VCSkVDVElWRV9SSUNIX1RFWFQnXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtZWRpdG9yIFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIiBbcHJldmlld01vZGVdPVwicHJldmlld01vZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtZWRpdG9yPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLk9CSkVDVElWRSdcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1vYmplY3RpdmUgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiIFtzaG93Q29ycmVjdEFuc3dlcnNdPVwic2hvd0NvcnJlY3RBbnN3ZXJzXCIgW2ltYWdlQ29uZmlnXT1cImltYWdlQ29uZmlnXCJcclxuICAgICAgICAgICAgICAgICAgICBbYW5zd2VyT2JqXT1cImdldFF1ZXN0aW9uQW5zd2VyT2JqKHF1ZXN0aW9uLmlkISwgcGFyZW50T3B0aW9uSWQsIHBhcmVudFF1ZXN0aW9uSWQpXCI+PC9saWItcXVlc3Rpb24tdHlwZS1vYmplY3RpdmU+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuTVVMVElfU0VMRUNUJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLW11bHRpc2VsZWN0IFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIiBbc2hvd0NvcnJlY3RBbnN3ZXJzXT1cInNob3dDb3JyZWN0QW5zd2Vyc1wiIFtpbWFnZUNvbmZpZ109XCJpbWFnZUNvbmZpZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Fuc3dlck9ial09XCJnZXRRdWVzdGlvbkFuc3dlck9iaihxdWVzdGlvbi5pZCEsIHBhcmVudE9wdGlvbklkLCBwYXJlbnRRdWVzdGlvbklkKVwiPjwvbGliLXF1ZXN0aW9uLXR5cGUtbXVsdGlzZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuUFJFRkVSRU5DRSdcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1wcmVmZXJlbmNlIFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIj48L2xpYi1xdWVzdGlvbi10eXBlLXByZWZlcmVuY2U+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuTlVNQkVSJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLXNob3J0IFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCIgW3JlcXVpcmVkXT1cImlzTWFuZGF0b3J5XCJcclxuICAgICAgICAgICAgICAgICAgICBbcHJldmlld01vZGVdPVwicHJldmlld01vZGVcIiBbbGFiZWxDb25maWddPVwibGFiZWxDb25maWdcIj48L2xpYi1xdWVzdGlvbi10eXBlLXNob3J0PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLkVNQUlMJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLXNob3J0IFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCIgW3JlcXVpcmVkXT1cImlzTWFuZGF0b3J5XCJcclxuICAgICAgICAgICAgICAgICAgICBbcHJldmlld01vZGVdPVwicHJldmlld01vZGVcIiBbbGFiZWxDb25maWddPVwibGFiZWxDb25maWdcIj48L2xpYi1xdWVzdGlvbi10eXBlLXNob3J0PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLkNPTlRBQ1RfTlVNQkVSJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLXNob3J0IFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCIgW3JlcXVpcmVkXT1cImlzTWFuZGF0b3J5XCJcclxuICAgICAgICAgICAgICAgICAgICBbcHJldmlld01vZGVdPVwicHJldmlld01vZGVcIiBbbGFiZWxDb25maWddPVwibGFiZWxDb25maWdcIj48L2xpYi1xdWVzdGlvbi10eXBlLXNob3J0PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLlVSTCdcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1zaG9ydCBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ByZXZpZXdNb2RlXT1cInByZXZpZXdNb2RlXCIgW2xhYmVsQ29uZmlnXT1cImxhYmVsQ29uZmlnXCI+PC9saWItcXVlc3Rpb24tdHlwZS1zaG9ydD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5GSUxFX1VQTE9BRCdcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1maWxlLXVwbG9hZCBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbYXNzZXNzbWVudEluc3RhbmNlSWRdPVwiYXNzZXNzbWVudEluc3RhbmNlSWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCIgW3JlcXVpcmVkXT1cImlzTWFuZGF0b3J5XCIgW2xhYmVsQ29uZmlnXT1cImxhYmVsQ29uZmlnXCJcclxuICAgICAgICAgICAgICAgICAgICBbaW1hZ2VDb25maWddPVwiaW1hZ2VDb25maWdcIiAoc25hY2tiYXJNZXNzYWdlKT1cInNuYWNrYmFyTWVzc2FnZS5lbWl0KCRldmVudClcIj48L2xpYi1xdWVzdGlvbi10eXBlLWZpbGUtdXBsb2FkPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLkRBVEVfUElDS0VSJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLWRhdGUtcGlja2VyIFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIiBbcHJldmlld01vZGVdPVwicHJldmlld01vZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtZGF0ZS1waWNrZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tIEVycm9yIE1lc3NhZ2VzIGFuZCBDaGFyYWN0ZXIgQ291bnQgQ29udGFpbmVyIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nSWY9XCIhcHJldmlld01vZGUgJiYgc2VjdGlvbkZvcm1Hcm91cHNbZ3JvdXBJbmRleF0uZm9ybUdyb3VwLmdldChxdWVzdGlvbi5pZD8udG9TdHJpbmcoKSB8fCAnJykgYXMgY29udHJvbFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLXN0YXJ0IG10LTFcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRURfUkVTUE9OU0UnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyIG10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3txdWVzdGlvbj8udmFsaWRhdGlvbk1lc3NhZ2UgfHwgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5JTlZBTElEX0ZPUk1BVCddfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzPy5bJ3ByaXZhdGVHZHJpdmVMaW5rJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLlBSSVZBVEVfRFJJVkVfTElOSyddfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzPy5bJ21pbmxlbmd0aCddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5NSU5fQ0hBUlMnXT8ucmVwbGFjZSgne3tsZW5ndGh9fScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZXJyb3JzPy5bJ21pbmxlbmd0aCddLnJlcXVpcmVkTGVuZ3RoICsgJycpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzPy5bJ21heGxlbmd0aCddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5NQVhfQ0hBUlMnXT8ucmVwbGFjZSgne3tsZW5ndGh9fScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZXJyb3JzPy5bJ21heGxlbmd0aCddLnJlcXVpcmVkTGVuZ3RoICsgJycpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzPy5bJ21pbk9wdGlvbnMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuTUlOX09QVElPTlMnXT8ucmVwbGFjZSgne3tjb3VudH19JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5lcnJvcnM/LlsnbWluT3B0aW9ucyddLnJlcXVpcmVkICsgJycpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzPy5bJ21heE9wdGlvbnMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuTUFYX09QVElPTlMnXT8ucmVwbGFjZSgne3tjb3VudH19JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5lcnJvcnM/LlsnbWF4T3B0aW9ucyddLnJlcXVpcmVkICsgJycpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzPy5bJ21heEZpbGVzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLk1BWF9GSUxFUyddPy5yZXBsYWNlKCd7e2NvdW50fX0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLmVycm9ycz8uWydtYXhGaWxlcyddLnJlcXVpcmVkICsgJycpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzPy5bJ21heEZpbGVTaXplJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLk1BWF9GSUxFX1NJWkUnXT8ucmVwbGFjZSgne3tzaXplfX0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLmVycm9ycz8uWydtYXhGaWxlU2l6ZSddLnJlcXVpcmVkU2l6ZSArICcnKX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIHdoaXRlLXNwYWNlLW5vd3JhcCBtcy0yXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldE1heENoYXJDb3VudChxdWVzdGlvbikgPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0UmVtYWluaW5nQ2hhcnMocXVlc3Rpb24sIGNvbnRyb2wpIH19XHJcbiAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNIQVJBQ1RFUiddfX17e2dldFJlbWFpbmluZ0NoYXJzKHF1ZXN0aW9uLCBjb250cm9sKSAhPT1cclxuICAgICAgICAgICAgICAgICAgICAxXHJcbiAgICAgICAgICAgICAgICAgICAgPyAncycgOiAnJ319IHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5SRU1BSU5JTkcnXX19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gUmV1c2FibGUgU2VjdGlvbiBGb3JtIFRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI3NlY3Rpb25Db250ZW50IGxldC1zZWN0aW9uPVwic2VjdGlvblwiIGxldC1pPVwiaVwiPlxyXG4gICAgPGZvcm0gY2xhc3M9XCJ3LTEwMFwiICpuZ0lmPVwic2VjdGlvbkZvcm1Hcm91cHNbaV0uZm9ybUdyb3VwXCIgW2Zvcm1Hcm91cF09XCJzZWN0aW9uRm9ybUdyb3Vwc1tpXS5mb3JtR3JvdXBcIlxyXG4gICAgICAgIFtuYW1lXT1cIidzZWN0aW9uZnJtLScgKyBpXCIgbm92YWxpZGF0ZT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi00XCJcclxuICAgICAgICAgICAgKm5nSWY9XCIhcHJldmlld01vZGUgJiYgKHNlY3Rpb24/LnFwc0Rlc2M/LlswXT8udGV4dCB8fCBzZWN0aW9uPy5tZWRpYVVybClcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTQgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+XHJcbiAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuVE9UQUxfUVVFU1RJT05TJ119fToge3sgc2VjdGlvbj8udG90YWxRdWVzdGlvbnMgfHwgMCB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9wZW5JbnN0cnVjdGlvbnNEaWFsb2coc2VjdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJ0bi1wcmltYXJ5LXRyYW5zcGFyZW50XCI+XHJcbiAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuVklFV19JTlNUUlVDVElPTlMnXX19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBmbGV4LWNvbHVtbiBnYXAtM1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzcSBvZiBzZWN0aW9uLnNlY3Rpb25RdWVzdGlvbnNMaXN0IHwgb3JkZXJCeTsgbGV0IGogPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVNlY3Rpb25RdWVzdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInF1ZXN0aW9uVGVtcGxhdGU7IGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHNxLnF1ZXN0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICBpc01hbmRhdG9yeTogcXVlc3Rpb25CYW5rW3NxLnF1ZXN0aW9uSWRdPy5pc01hbmRhdG9yeSxcclxuICAgICAgICAgICAgICAgIGdyb3VwSW5kZXg6IGksXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRPcHRpb25JZDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzZXF1ZW5jZTogaiArIDFcclxuICAgICAgICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gdmlkZW8gcHJldmlldyAgLS0+XHJcbjxuZy10ZW1wbGF0ZSBsZXQtdmlkZW9Vcmw9XCJ2aWRlb1VybFwiICNWaWRlb1RlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3ZlcmZsb3ctaGlkZGVuIGNvbC1tZC0xMCBjb2wtMTJcIj5cclxuICAgICAgICA8dmlkZW8gKm5nSWY9XCJ2aWRlb1VybD8uaW5jbHVkZXMoJy5tcDQnKSBlbHNlIHlvdXR1YmVWaWRlb1wiIHdpZHRoPVwiNDAwXCIgY29udHJvbHMgY2xhc3M9XCJtdy0xMDAgZC1ibG9jayBteC1hdXRvXCI+XHJcbiAgICAgICAgICAgIDxzb3VyY2UgW3NyY109XCJ2aWRlb1VybFwiIHR5cGU9XCJ2aWRlby9tcDRcIj5cclxuICAgICAgICA8L3ZpZGVvPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjeW91dHViZVZpZGVvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwieW91dHViZS12aWRlbyBwb3NpdGlvbi1yZWxhdGl2ZSBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPGlmcmFtZSBbc3JjXT1cImFkZFlvdXR1YmVJZnJhbWVTcmModmlkZW9VcmwpXCIgdGl0bGU9XCJZb3VUdWJlIHZpZGVvIHBsYXllclwiIGZyYW1lYm9yZGVyPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3c9XCJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgY2xpcGJvYXJkLXdyaXRlOyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlOyB3ZWItc2hhcmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZnVsbHNjcmVlbiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC0wIHN0YXJ0LTAgdy0xMDAgaC0xMDAgZC1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgPC9pZnJhbWU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=