commons-assessment 12.1.2-dev.0 → 12.1.2-dev.1
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.
- package/bundles/commons-assessment.umd.js +27 -4
- package/bundles/commons-assessment.umd.js.map +1 -1
- package/esm2015/lib/modules/assessment-maker/assessment-maker.component.js +25 -2
- package/esm2015/lib/modules/assessment-maker/components/question-bank-picker/question-bank-picker.component.js +3 -3
- package/esm2015/lib/modules/question-bank/question-bank.component.js +2 -2
- package/fesm2015/commons-assessment.js +27 -4
- package/fesm2015/commons-assessment.js.map +1 -1
- package/lib/modules/assessment-maker/assessment-maker.component.d.ts +6 -0
- package/package.json +1 -1
- package/src/lib/assets/theme/styles.global.scss +127 -6
|
@@ -21,7 +21,7 @@ export class QuestionBankPickerComponent {
|
|
|
21
21
|
this.allQuestions = [];
|
|
22
22
|
this.filteredQuestions = [];
|
|
23
23
|
this.currentPage = 0;
|
|
24
|
-
this.pageSize =
|
|
24
|
+
this.pageSize = 100;
|
|
25
25
|
this.totalElements = 0;
|
|
26
26
|
this.hasNext = false;
|
|
27
27
|
this.isLoading = false;
|
|
@@ -261,7 +261,7 @@ export class QuestionBankPickerComponent {
|
|
|
261
261
|
}
|
|
262
262
|
}
|
|
263
263
|
QuestionBankPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: QuestionBankPickerComponent, deps: [{ token: i1.AssessmentMakerService }, { token: i2.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
264
|
-
QuestionBankPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: QuestionBankPickerComponent, selector: "lib-question-bank-picker", ngImport: i0, template: "<div class=\"d-flex flex-column h-100 question-bank-picker\">\r\n <!-- Header: Back Arrow + Title + Subtitle -->\r\n <div class=\"d-flex align-items-center justify-content-between px-4 py-3 border-bottom picker-header\">\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <button (click)=\"close()\" class=\"btn-icon-back\" [attr.aria-label]=\"labelConfig['COMMONS_ASSESSMENT.LABEL.GO_BACK'] || 'Go Back'\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.GO_BACK']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/go-back.svg')\"\r\n class=\"action-icon\" />\r\n </button>\r\n <div>\r\n <h4 class=\"mb-0 fw-bold picker-title\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.IMPORT_FROM_QUESTION_BANK'] || 'Import from Question Bank'}}\r\n </h4>\r\n <p class=\"mb-0 picker-subtitle\">\r\n <span class=\"text-secondary\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.SELECTED_SECTION'] || 'Selected Section'}}:</span>\r\n <span class=\"text-primary fw-semibold ms-1\" *ngIf=\"targetSectionName\">{{targetSectionName}}</span>\r\n <span class=\"text-secondary ms-1\" *ngIf=\"!targetSectionName\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.IMPORT_QUESTIONS_INTO_NEW_SECTION'] || 'Import questions into a new section'}}</span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Search & Filter Controls Deck -->\r\n <div class=\"picker-search-deck px-4 pt-3 pb-2 border-bottom\">\r\n <div class=\"d-flex gap-3 align-items-center mb-2\">\r\n <!-- Search Box -->\r\n <div class=\"search-input-wrapper flex-grow-1 position-relative\">\r\n <input type=\"text\"\r\n class=\"form-control search-input\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.LABEL.SEARCH_QUESTION'] || 'Search Question'\"\r\n [ngModel]=\"searchTerm\"\r\n (ngModelChange)=\"onSearchChange($event)\">\r\n <button *ngIf=\"searchTerm\" (click)=\"clearSearch()\" class=\"search-clear-btn\" aria-label=\"Clear Search\">\r\n \u2715\r\n </button>\r\n </div>\r\n\r\n <!-- Type Filter Dropdown using arrow-down-black.svg -->\r\n <div class=\"type-filter-wrapper position-relative\">\r\n <select class=\"form-select filter-select cursor-pointer\"\r\n [ngModel]=\"selectedTypeCode\"\r\n (ngModelChange)=\"onTypeFilterChange($event)\">\r\n <option value=\"\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ALL_TYPES'] || 'All Types'}}</option>\r\n <option *ngFor=\"let type of questionTypes\" [value]=\"type.code\">\r\n {{type.label || type.code}}\r\n </option>\r\n </select>\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ARROW_DOWN_BLACK']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/arrow-down-black.svg')\"\r\n class=\"select-arrow-icon pointer-events-none\" />\r\n </div>\r\n </div>\r\n\r\n <!-- Section Header: Question Count & Select All -->\r\n <div class=\"d-flex align-items-center justify-content-between pt-2 pb-1\">\r\n <h5 class=\"mb-0 fw-bold questions-heading\">\r\n {{totalElements || filteredQuestions.length}} {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTIONS'] || 'Questions'}}\r\n </h5>\r\n <div class=\"form-check d-flex align-items-center gap-2 mb-0\">\r\n <input class=\"form-check-input select-all-checkbox cursor-pointer\"\r\n type=\"checkbox\"\r\n id=\"selectAllQuestions\"\r\n [checked]=\"isAllVisibleSelected\"\r\n [indeterminate]=\"isSomeVisibleSelected\"\r\n [disabled]=\"eligibleVisibleQuestions.length === 0\"\r\n (change)=\"toggleSelectAllVisible()\">\r\n <label class=\"form-check-label select-all-label cursor-pointer\" for=\"selectAllQuestions\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SELECT_ALL_QUESTIONS'] || 'Select All Questions'}}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Questions Viewport Box -->\r\n <div class=\"flex-grow-1 overflow-auto p-3\" (scroll)=\"onScroll($event)\">\r\n <!-- Skeleton Loading State -->\r\n <div *ngIf=\"isInitialLoading\" class=\"d-flex flex-column gap-3 py-1\">\r\n <div *ngFor=\"let i of [1, 2, 3, 4, 5]\" class=\"skeleton-card\">\r\n <div class=\"skeleton-line line-full\"></div>\r\n <div class=\"skeleton-meta\"></div>\r\n </div>\r\n </div>\r\n\r\n <!-- Question Cards -->\r\n <div *ngIf=\"!isInitialLoading && filteredQuestions.length > 0\" class=\"d-flex flex-column gap-3\">\r\n <div *ngFor=\"let question of filteredQuestions; trackBy: trackByQuestionId\"\r\n class=\"question-card\"\r\n [class.disabled-card]=\"isAlreadyInAssessment(question.id)\"\r\n [class.selected-card]=\"isSelected(question)\"\r\n (click)=\"toggleSelection(question)\">\r\n\r\n <!-- Main Card Header: Checkbox + Question Text + #ID -->\r\n <div class=\"d-flex align-items-start gap-3\">\r\n <div class=\"pt-1 flex-shrink-0\">\r\n <input class=\"form-check-input card-checkbox cursor-pointer\"\r\n type=\"checkbox\"\r\n [checked]=\"isSelected(question)\"\r\n [disabled]=\"isAlreadyInAssessment(question.id)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleSelection(question)\">\r\n </div>\r\n\r\n <div class=\"flex-grow-1 min-w-0\">\r\n <div class=\"d-flex align-items-start justify-content-between gap-3 mb-2\">\r\n <div class=\"question-body-text fw-medium text-break\"\r\n [innerHTML]=\"question?.questionText?.[0]?.text\"></div>\r\n <span class=\"question-id-badge flex-shrink-0\" *ngIf=\"question?.id\">#{{question.id}}</span>\r\n </div>\r\n\r\n <!-- Badges Row: Type Pill, Marks Pill, Mandatory Pill, and Added Pill -->\r\n <div class=\"d-flex align-items-center justify-content-between flex-wrap gap-2 mt-1\">\r\n <div class=\"d-flex align-items-center flex-wrap gap-2\">\r\n <!-- Question Type Pill (Orange/Amber) -->\r\n <span class=\"badge-pill badge-type-pill p-2 rounded\" *ngIf=\"question?.questionType\">\r\n {{getQuestionTypeLabel(question)}}\r\n </span>\r\n\r\n <!-- Marks Pill (Blue/Indigo) -->\r\n <span class=\"badge-pill badge-marks-pill p-2 rounded\" *ngIf=\"question?.weight !== undefined && question?.weight !== null\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS'] || 'Marks'}} {{question.weight}}\r\n </span>\r\n\r\n <!-- Mandatory Pill (Green) -->\r\n <span class=\"badge-pill badge-mandatory-pill p-2 rounded\" *ngIf=\"question?.isMandatory\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY'] || 'Mandatory'}}\r\n </span>\r\n </div>\r\n\r\n <!-- Right-aligned Already Added Pill -->\r\n <span *ngIf=\"isAlreadyInAssessment(question.id)\" class=\"badge-pill badge-added-pill p-2\">\r\n <span class=\"dot-indicator\"></span>\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADDED'] || 'Added'}}\r\n </span>\r\n </div>\r\n\r\n <!-- Options Accordion (if question has defaultOptionsList) -->\r\n <div *ngIf=\"hasOptions(question)\" class=\"options-accordion-section mt-3 pt-2\">\r\n <!-- Toggle Button Row with Arrow & Divider Line -->\r\n <div class=\"d-flex align-items-center gap-2 cursor-pointer options-toggle-row\"\r\n (click)=\"toggleExpandOptions(question.id, $event)\">\r\n <span class=\"options-count-text text-primary fw-semibold\">\r\n {{question.defaultOptionsList?.length || 0}} {{labelConfig['COMMONS_ASSESSMENT.LABEL.OPTIONS'] || 'Options'}}\r\n </span>\r\n <img [src]=\"isOptionsExpanded(question.id) ? (imageConfig['COMMONS_ASSESSMENT.ICON.ARROW_UP_BLUE'] || 'assets/commons-assessment/images/arrow-up-blue.svg') : (imageConfig['COMMONS_ASSESSMENT.ICON.ARROW_DOWN_BLUE'] || 'assets/commons-assessment/images/arrow-down-blue.svg')\"\r\n (error)=\"imageErrorHandler($event, isOptionsExpanded(question.id) ? 'assets/commons-assessment/images/arrow-up-blue.svg' : 'assets/commons-assessment/images/arrow-down-blue.svg')\"\r\n class=\"options-arrow-icon\" />\r\n <div class=\"options-divider-line flex-grow-1\"></div>\r\n <span class=\"text-secondary text-12 options-hint-text\">\r\n \u2022 {{labelConfig['COMMONS_ASSESSMENT.LABEL.CLICK_TO_VIEW'] || 'Click to view'}}\r\n </span>\r\n </div>\r\n\r\n <!-- Expanded Options List (Radio options) -->\r\n <div *ngIf=\"isOptionsExpanded(question.id)\"\r\n class=\"options-list-container d-flex flex-column gap-2 mt-3 ps-1\"\r\n (click)=\"$event.stopPropagation()\">\r\n <div *ngFor=\"let opt of question.defaultOptionsList\"\r\n class=\"d-flex align-items-center gap-2 option-item-row\">\r\n <span class=\"option-radio-circle\"></span>\r\n <span class=\"option-text text-break\">\r\n {{opt.options?.optionName?.[0]?.text || opt.options?.optionCode || 'Option'}}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Empty State: No matching filter results -->\r\n <div *ngIf=\"!isInitialLoading && filteredQuestions.length === 0 && allQuestions.length > 0\"\r\n class=\"empty-state-box py-5 text-center\">\r\n <p class=\"empty-state-title fw-semibold text-15 mb-1\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.NO_MATCHING_QUESTIONS'] || 'No matching questions found'}}\r\n </p>\r\n <p class=\"empty-state-desc text-secondary text-13 mb-3\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.NO_MATCHING_QUESTIONS_DESC'] || 'Try adjusting your search terms or clearing selected question type filters.'}}\r\n </p>\r\n <button (click)=\"clearSearch(); selectedTypeCode = ''; applyFilters();\"\r\n class=\"btn btn-outline-primary btn-sm px-3\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CLEAR_FILTERS'] || 'Clear Filters'}}\r\n </button>\r\n </div>\r\n\r\n <!-- Empty State: Question bank is empty -->\r\n <div *ngIf=\"!isInitialLoading && allQuestions.length === 0\"\r\n class=\"empty-state-box py-5 text-center\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.NO_QUESTIONS']\" class=\"empty-state-img mb-3\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/no-questions.svg')\" />\r\n <p class=\"empty-state-title fw-semibold text-15 mb-1\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.NO_QUESTIONS_IN_BANK'] || 'No Questions in Bank!'}}\r\n </p>\r\n <p class=\"empty-state-desc text-secondary text-13 mb-0\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.NO_QUESTIONS_IN_BANK_DESC'] || 'Create standalone questions in the Question Bank to reuse them here.'}}\r\n </p>\r\n </div>\r\n\r\n <!-- Infinite Scroll Bottom Loader -->\r\n <div *ngIf=\"isLoading && !isInitialLoading\" class=\"py-3 d-flex align-items-center justify-content-center gap-2\">\r\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n <span class=\"text-secondary text-13\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.LOADING_MORE_QUESTIONS'] || 'Loading more questions...'}}\r\n </span>\r\n </div>\r\n\r\n <!-- End of list reached -->\r\n <div *ngIf=\"!hasNext && allQuestions.length > 0 && !isLoading\" class=\"text-center py-3 text-secondary text-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ALL_QUESTIONS_LOADED'] || 'All questions loaded'}} ({{totalElements}})\r\n </div>\r\n </div>\r\n\r\n <!-- Sticky Footer -->\r\n <div class=\"px-4 py-3 border-top picker-footer d-flex align-items-center justify-content-between bg-white\">\r\n <div class=\"footer-summary\">\r\n <span class=\"text-secondary text-13\" *ngIf=\"selectedCount === 0\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.NO_QUESTIONS_SELECTED'] || 'No questions selected'}}\r\n </span>\r\n <span class=\"text-secondary text-13\" *ngIf=\"selectedCount > 0\">\r\n <strong class=\"text-primary\">{{selectedCount}}</strong> {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTIONS_SELECTED'] || 'questions selected'}}\r\n · <strong class=\"text-dark\">{{totalSelectedMarks}}</strong> {{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS'] || 'Marks'}}\r\n </span>\r\n </div>\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <button (click)=\"close()\" class=\"btn btn-outline-secondary px-4 py-2 footer-btn\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CANCEL'] || 'Cancel'}}\r\n </button>\r\n <button (click)=\"importSelected()\"\r\n [disabled]=\"selectedCount === 0\"\r\n class=\"btn btn-primary px-4 py-2 footer-btn footer-btn-import\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.IMPORT_COUNT'] || 'Import'}}\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".question-bank-picker{background-color:var(--assessment-bg-white, #ffffff);color:var(--assessment-text-grey-ten, #202124);font-family:var(--assessment-font-family, inherit)}.question-bank-picker .picker-header{background-color:var(--assessment-bg-white, #ffffff);border-color:var(--assessment-grey-four, #e8eaed)!important}.question-bank-picker .picker-header .btn-icon-back{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:50%;border:none;background-color:transparent;cursor:pointer;transition:background-color .15s ease}.question-bank-picker .picker-header .btn-icon-back:hover{background-color:var(--assessment-palette-EDF3FD, #EDF3FD)}.question-bank-picker .picker-header .btn-icon-back .action-icon{width:1.125rem;height:1.125rem}.question-bank-picker .picker-header .picker-title{font-size:1.25rem;font-weight:700;color:var(--assessment-text-grey-ten, #1e293b);line-height:1.25}.question-bank-picker .picker-header .picker-subtitle{font-size:.8125rem;margin-top:2px}.question-bank-picker .picker-search-deck{background-color:var(--assessment-bg-white, #ffffff);border-color:var(--assessment-grey-four, #e8eaed)!important}.question-bank-picker .picker-search-deck .search-input-wrapper{position:relative}.question-bank-picker .picker-search-deck .search-input-wrapper .search-input{height:2.6rem;padding-right:2rem;padding-left:.875rem;font-size:.875rem;border-radius:var(--assessment-border-radius-two, .375rem);border:1px solid var(--assessment-grey-four, #e2e8f0);background-color:var(--assessment-bg-white, #ffffff);color:var(--assessment-text-grey-ten, #202124)}.question-bank-picker .picker-search-deck .search-input-wrapper .search-input::placeholder{color:var(--assessment-text-grey-seven, #94a3b8)}.question-bank-picker .picker-search-deck .search-input-wrapper .search-input:focus{border-color:var(--assessment-primary-one, #467DD6);box-shadow:0 0 0 2px #467dd626}.question-bank-picker .picker-search-deck .search-input-wrapper .search-clear-btn{position:absolute;right:.75rem;top:50%;transform:translateY(-50%);border:none;background:transparent;color:var(--assessment-text-grey-seven, #94a3b8);font-size:.75rem;cursor:pointer;padding:2px 4px;border-radius:4px}.question-bank-picker .picker-search-deck .search-input-wrapper .search-clear-btn:hover{color:var(--assessment-text-grey-ten, #202124);background-color:var(--assessment-palette-EDF3FD, #EDF3FD)}.question-bank-picker .picker-search-deck .type-filter-wrapper{min-width:11rem;max-width:14rem}.question-bank-picker .picker-search-deck .type-filter-wrapper .filter-select{height:2.6rem;padding-right:2rem;font-size:.875rem;font-weight:500;border-radius:var(--assessment-border-radius-two, .375rem);border:1px solid var(--assessment-grey-four, #e2e8f0);background-color:var(--assessment-bg-white, #ffffff);color:var(--assessment-text-grey-ten, #334155);appearance:none;-webkit-appearance:none;-moz-appearance:none}.question-bank-picker .picker-search-deck .type-filter-wrapper .filter-select:focus{border-color:var(--assessment-primary-one, #467DD6);box-shadow:0 0 0 2px #467dd626}.question-bank-picker .picker-search-deck .type-filter-wrapper .select-arrow-icon{position:absolute;right:.75rem;top:50%;transform:translateY(-50%);width:.875rem;height:.875rem}.question-bank-picker .picker-search-deck .questions-heading{font-size:1.125rem;color:var(--assessment-text-grey-ten, #1e293b)}.question-bank-picker .picker-search-deck .select-all-label{font-size:.875rem;font-weight:600;color:var(--assessment-text-grey-nine, #334155);-webkit-user-select:none;user-select:none}.question-bank-picker .form-check-input{width:1.2rem;height:1.2rem;border-radius:4px;border:1.5px solid var(--assessment-grey-five, #cbd5e1);cursor:pointer}.question-bank-picker .form-check-input:checked{background-color:var(--assessment-primary-one, #467DD6);border-color:var(--assessment-primary-one, #467DD6)}.question-bank-picker .form-check-input:focus{box-shadow:0 0 0 2px #467dd633}.question-bank-picker .form-check-input:disabled{cursor:not-allowed;opacity:.5}.question-bank-picker .question-card{border:1px solid var(--assessment-grey-four, #e2e8f0);border-radius:var(--assessment-border-radius-two, .5rem);background-color:var(--assessment-bg-grey-one, #f8f9fa);padding:1rem 1.125rem;transition:border-color .15s ease,box-shadow .15s ease;cursor:pointer}.question-bank-picker .question-card:hover:not(.disabled-card){border-color:var(--assessment-palette-ADC9F6, #93c5fd);box-shadow:0 2px 6px #467dd60f}.question-bank-picker .question-card.selected-card{border-color:var(--assessment-primary-one, #467DD6);background-color:var(--assessment-bg-white, #ffffff)}.question-bank-picker .question-card.disabled-card{background-color:var(--assessment-bg-grey-one, #f8fafc);opacity:.75;cursor:not-allowed!important}.question-bank-picker .question-card .question-body-text{font-size:.9375rem;color:var(--assessment-text-grey-ten, #1e293b);line-height:1.45;word-break:break-word}.question-bank-picker .question-card .question-body-text ::ng-deep p,.question-bank-picker .question-card .question-body-text ::ng-deep div,.question-bank-picker .question-card .question-body-text p,.question-bank-picker .question-card .question-body-text div{margin:0!important;padding:0!important}.question-bank-picker .question-card .question-id-badge{font-size:.8125rem;font-weight:500;color:var(--assessment-text-grey-seven, #94a3b8)}.question-bank-picker .badge-pill{display:inline-flex;align-items:center;grid-gap:4px;gap:4px;padding:.25rem .75rem;border-radius:9999px;font-size:.75rem;font-weight:500;line-height:1.2}.question-bank-picker .badge-type-pill{background-color:#fffbeb;color:#b45309;border:1px solid #fde68a}.question-bank-picker .badge-marks-pill{background-color:#eff6ff;color:#2563eb;border:1px solid #bfdbfe}.question-bank-picker .badge-mandatory-pill{background-color:#ecfdf5;color:#059669;border:1px solid #a7f3d0}.question-bank-picker .badge-added-pill{background-color:#f0fdf4;color:#16a34a;border:1px solid #bbf7d0;font-weight:600}.question-bank-picker .badge-added-pill .dot-indicator{width:6px;height:6px;border-radius:50%;background-color:#16a34a;display:inline-block}.question-bank-picker .options-accordion-section .options-toggle-row{-webkit-user-select:none;user-select:none}.question-bank-picker .options-accordion-section .options-toggle-row .options-count-text{font-size:.8125rem;font-weight:600;color:var(--assessment-primary-one, #467DD6)}.question-bank-picker .options-accordion-section .options-toggle-row .options-arrow-icon{width:.875rem;height:.875rem}.question-bank-picker .options-accordion-section .options-toggle-row .options-divider-line{height:1px;background-color:var(--assessment-grey-four, #e2e8f0)}.question-bank-picker .options-accordion-section .options-toggle-row .options-hint-text{font-size:.75rem;color:var(--assessment-text-grey-seven, #94a3b8)}.question-bank-picker .options-accordion-section .options-list-container .option-item-row{font-size:.875rem;color:var(--assessment-text-grey-nine, #334155)}.question-bank-picker .options-accordion-section .options-list-container .option-item-row .option-radio-circle{width:.875rem;height:.875rem;border-radius:50%;border:1.5px solid var(--assessment-text-grey-nine, #334155);flex-shrink:0}.question-bank-picker .options-accordion-section .options-list-container .option-item-row .option-text{font-size:.875rem;color:var(--assessment-text-grey-nine, #334155)}.question-bank-picker .skeleton-card{border:1px solid var(--assessment-grey-four, #e2e8f0);border-radius:var(--assessment-border-radius-two, .5rem);background:var(--assessment-bg-white, #ffffff);padding:1rem 1.125rem}.question-bank-picker .skeleton-card .skeleton-line{height:14px;border-radius:4px;margin-bottom:12px;background:linear-gradient(90deg,#f1f5f9 25%,#e2e8f0 50%,#f1f5f9 75%);background-size:200% 100%;animation:shimmer 1.5s infinite}.question-bank-picker .skeleton-card .skeleton-line.line-full{width:75%}.question-bank-picker .skeleton-card .skeleton-meta{height:18px;width:160px;border-radius:9999px;background:linear-gradient(90deg,#f1f5f9 25%,#e2e8f0 50%,#f1f5f9 75%);background-size:200% 100%;animation:shimmer 1.5s infinite}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.question-bank-picker .empty-state-box .empty-state-img{max-width:5.5rem}.question-bank-picker .empty-state-box .empty-state-title{color:var(--assessment-text-grey-ten, #1e293b)}.question-bank-picker .empty-state-box .empty-state-desc{max-width:22rem;margin:0 auto}.question-bank-picker .picker-footer{border-color:var(--assessment-grey-four, #e8eaed)!important}.question-bank-picker .picker-footer .footer-btn{font-size:.875rem;font-weight:600;border-radius:var(--assessment-border-radius-two, .375rem)}.question-bank-picker .picker-footer .footer-btn-import{background-color:var(--assessment-primary-one, #467DD6);border-color:var(--assessment-primary-one, #467DD6)}.question-bank-picker .picker-footer .footer-btn-import:hover:not(:disabled){background-color:var(--assessment-primary-four, #295eb7);border-color:var(--assessment-primary-four, #295eb7)}.question-bank-picker .pointer-events-none{pointer-events:none}.question-bank-picker .min-w-0{min-width:0}.question-bank-picker .text-12{font-size:.75rem}.question-bank-picker .text-13{font-size:.8125rem}.question-bank-picker .text-15{font-size:.9375rem}\n"], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
264
|
+
QuestionBankPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: QuestionBankPickerComponent, selector: "lib-question-bank-picker", ngImport: i0, template: "<div class=\"d-flex flex-column h-100 question-bank-picker\">\r\n <!-- Header: Back Arrow + Title + Subtitle -->\r\n <div class=\"d-flex align-items-center justify-content-between px-4 py-3 border-bottom picker-header\">\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <button (click)=\"close()\" class=\"btn-icon-back\" [attr.aria-label]=\"labelConfig['COMMONS_ASSESSMENT.LABEL.GO_BACK'] || 'Go Back'\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.GO_BACK']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/go-back.svg')\"\r\n class=\"action-icon\" />\r\n </button>\r\n <div>\r\n <h4 class=\"mb-0 fw-bold picker-title\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.IMPORT_FROM_QUESTION_BANK'] || 'Import from Question Bank'}}\r\n </h4>\r\n <p class=\"mb-0 picker-subtitle\">\r\n <span class=\"text-secondary\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.SELECTED_SECTION'] || 'Selected Section'}}:</span>\r\n <span class=\"text-primary fw-semibold ms-1\" *ngIf=\"targetSectionName\">{{targetSectionName}}</span>\r\n <span class=\"text-secondary ms-1\" *ngIf=\"!targetSectionName\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.IMPORT_QUESTIONS_INTO_NEW_SECTION'] || 'Import questions into a new section'}}</span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Search & Filter Controls Deck -->\r\n <div class=\"picker-search-deck px-4 pt-3 pb-2 border-bottom\">\r\n <div class=\"d-flex gap-3 align-items-center mb-2\">\r\n <!-- Search Box -->\r\n <div class=\"search-input-wrapper flex-grow-1 position-relative\">\r\n <input type=\"text\"\r\n class=\"form-control search-input\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.LABEL.SEARCH_QUESTION'] || 'Search Question'\"\r\n [ngModel]=\"searchTerm\"\r\n (ngModelChange)=\"onSearchChange($event)\">\r\n <button *ngIf=\"searchTerm\" (click)=\"clearSearch()\" class=\"search-clear-btn\" aria-label=\"Clear Search\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\"\r\n class=\"action-icon\" />\r\n </button>\r\n </div>\r\n\r\n <!-- Type Filter Dropdown using arrow-down-black.svg -->\r\n <div class=\"type-filter-wrapper position-relative\">\r\n <select class=\"form-select filter-select cursor-pointer\"\r\n [ngModel]=\"selectedTypeCode\"\r\n (ngModelChange)=\"onTypeFilterChange($event)\">\r\n <option value=\"\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ALL_TYPES'] || 'All Types'}}</option>\r\n <option *ngFor=\"let type of questionTypes\" [value]=\"type.code\">\r\n {{type.label || type.code}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Section Header: Question Count & Select All -->\r\n <div class=\"d-flex align-items-center justify-content-between pt-2 pb-1\">\r\n <h5 class=\"mb-0 fw-bold questions-heading\">\r\n {{totalElements || filteredQuestions.length}} {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTIONS'] || 'Questions'}}\r\n </h5>\r\n <div class=\"form-check d-flex align-items-center gap-2 mb-0\">\r\n <input class=\"form-check-input select-all-checkbox cursor-pointer\"\r\n type=\"checkbox\"\r\n id=\"selectAllQuestions\"\r\n [checked]=\"isAllVisibleSelected\"\r\n [indeterminate]=\"isSomeVisibleSelected\"\r\n [disabled]=\"eligibleVisibleQuestions.length === 0\"\r\n (change)=\"toggleSelectAllVisible()\">\r\n <label class=\"form-check-label select-all-label cursor-pointer\" for=\"selectAllQuestions\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SELECT_ALL_QUESTIONS'] || 'Select All Questions'}}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Questions Viewport Box -->\r\n <div class=\"flex-grow-1 overflow-auto assessment-custom-scrollbar-thumb p-3\" (scroll)=\"onScroll($event)\">\r\n <!-- Skeleton Loading State -->\r\n <div *ngIf=\"isInitialLoading\" class=\"d-flex flex-column gap-3 py-1\">\r\n <div *ngFor=\"let i of [1, 2, 3, 4, 5]\" class=\"skeleton-card\">\r\n <div class=\"skeleton-line line-full\"></div>\r\n <div class=\"skeleton-meta\"></div>\r\n </div>\r\n </div>\r\n\r\n <!-- Question Cards -->\r\n <div *ngIf=\"!isInitialLoading && filteredQuestions.length > 0\" class=\"d-flex flex-column gap-3\">\r\n <div *ngFor=\"let question of filteredQuestions; trackBy: trackByQuestionId\"\r\n class=\"question-card\"\r\n [class.disabled-card]=\"isAlreadyInAssessment(question.id)\"\r\n [class.selected-card]=\"isSelected(question)\"\r\n (click)=\"toggleSelection(question)\">\r\n\r\n <!-- Main Card Header: Checkbox + Question Text + #ID -->\r\n <div class=\"d-flex align-items-start gap-3\">\r\n <div class=\"pt-1 flex-shrink-0\">\r\n <input class=\"form-check-input card-checkbox cursor-pointer\"\r\n type=\"checkbox\"\r\n [checked]=\"isSelected(question)\"\r\n [disabled]=\"isAlreadyInAssessment(question.id)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleSelection(question)\">\r\n </div>\r\n\r\n <div class=\"flex-grow-1 min-w-0\">\r\n <div class=\"d-flex align-items-start justify-content-between gap-3 mb-2\">\r\n <div class=\"question-body-text fw-medium text-break\"\r\n [innerHTML]=\"question?.questionText?.[0]?.text\"></div>\r\n <span class=\"question-id-badge flex-shrink-0\" *ngIf=\"question?.id\">#{{question.id}}</span>\r\n </div>\r\n\r\n <!-- Badges Row: Type Pill, Marks Pill, Mandatory Pill, and Added Pill -->\r\n <div class=\"d-flex align-items-center justify-content-between flex-wrap gap-2 mt-1\">\r\n <div class=\"d-flex align-items-center flex-wrap gap-2\">\r\n <!-- Question Type Pill (Orange/Amber) -->\r\n <span class=\"badge-pill badge-type-pill p-2 rounded\" *ngIf=\"question?.questionType\">\r\n {{getQuestionTypeLabel(question)}}\r\n </span>\r\n\r\n <!-- Marks Pill (Blue/Indigo) -->\r\n <span class=\"badge-pill badge-marks-pill p-2 rounded\" *ngIf=\"question?.weight !== undefined && question?.weight !== null\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS'] || 'Marks'}} {{question.weight}}\r\n </span>\r\n\r\n <!-- Mandatory Pill (Green) -->\r\n <span class=\"badge-pill badge-mandatory-pill p-2 rounded\" *ngIf=\"question?.isMandatory\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY'] || 'Mandatory'}}\r\n </span>\r\n </div>\r\n\r\n <!-- Right-aligned Already Added Pill -->\r\n <span *ngIf=\"isAlreadyInAssessment(question.id)\" class=\"badge-pill badge-added-pill p-2\">\r\n <span class=\"dot-indicator\"></span>\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADDED'] || 'Added'}}\r\n </span>\r\n </div>\r\n\r\n <!-- Options Accordion (if question has defaultOptionsList) -->\r\n <div *ngIf=\"hasOptions(question)\" class=\"options-accordion-section mt-3 pt-2\">\r\n <!-- Toggle Button Row with Arrow & Divider Line -->\r\n <div class=\"d-flex align-items-center gap-2 cursor-pointer options-toggle-row\"\r\n (click)=\"toggleExpandOptions(question.id, $event)\">\r\n <span class=\"options-count-text text-primary fw-semibold\">\r\n {{question.defaultOptionsList?.length || 0}} {{labelConfig['COMMONS_ASSESSMENT.LABEL.OPTIONS'] || 'Options'}}\r\n </span>\r\n <img [src]=\"isOptionsExpanded(question.id) ? (imageConfig['COMMONS_ASSESSMENT.ICON.ARROW_UP_BLUE'] || 'assets/commons-assessment/images/arrow-up-blue.svg') : (imageConfig['COMMONS_ASSESSMENT.ICON.ARROW_DOWN_BLUE'] || 'assets/commons-assessment/images/arrow-down-blue.svg')\"\r\n (error)=\"imageErrorHandler($event, isOptionsExpanded(question.id) ? 'assets/commons-assessment/images/arrow-up-blue.svg' : 'assets/commons-assessment/images/arrow-down-blue.svg')\"\r\n class=\"options-arrow-icon\" />\r\n <div class=\"options-divider-line flex-grow-1\"></div>\r\n <span class=\"text-secondary text-12 options-hint-text\">\r\n \u2022 {{labelConfig['COMMONS_ASSESSMENT.LABEL.CLICK_TO_VIEW'] || 'Click to view'}}\r\n </span>\r\n </div>\r\n\r\n <!-- Expanded Options List (Radio options) -->\r\n <div *ngIf=\"isOptionsExpanded(question.id)\"\r\n class=\"options-list-container d-flex flex-column gap-2 mt-3 ps-1\"\r\n (click)=\"$event.stopPropagation()\">\r\n <div *ngFor=\"let opt of question.defaultOptionsList\"\r\n class=\"d-flex align-items-center gap-2 option-item-row\">\r\n <span class=\"option-radio-circle\"></span>\r\n <span class=\"option-text text-break\">\r\n {{opt.options?.optionName?.[0]?.text || opt.options?.optionCode || 'Option'}}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Empty State: No matching filter results -->\r\n <div *ngIf=\"!isInitialLoading && filteredQuestions.length === 0 && allQuestions.length > 0\"\r\n class=\"empty-state-box py-5 text-center\">\r\n <p class=\"empty-state-title fw-semibold text-15 mb-1\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.NO_MATCHING_QUESTIONS'] || 'No matching questions found'}}\r\n </p>\r\n <p class=\"empty-state-desc text-secondary text-13 mb-3\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.NO_MATCHING_QUESTIONS_DESC'] || 'Try adjusting your search terms or clearing selected question type filters.'}}\r\n </p>\r\n <button (click)=\"clearSearch(); selectedTypeCode = ''; applyFilters();\"\r\n class=\"btn btn-outline-primary btn-sm px-3\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CLEAR_FILTERS'] || 'Clear Filters'}}\r\n </button>\r\n </div>\r\n\r\n <!-- Empty State: Question bank is empty -->\r\n <div *ngIf=\"!isInitialLoading && allQuestions.length === 0\"\r\n class=\"empty-state-box py-5 text-center\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.NO_QUESTIONS']\" class=\"empty-state-img mb-3\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/no-questions.svg')\" />\r\n <p class=\"empty-state-title fw-semibold text-15 mb-1\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.NO_QUESTIONS_IN_BANK'] || 'No Questions in Bank!'}}\r\n </p>\r\n <p class=\"empty-state-desc text-secondary text-13 mb-0\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.NO_QUESTIONS_IN_BANK_DESC'] || 'Create standalone questions in the Question Bank to reuse them here.'}}\r\n </p>\r\n </div>\r\n\r\n <!-- Infinite Scroll Bottom Loader -->\r\n <div *ngIf=\"isLoading && !isInitialLoading\" class=\"py-3 d-flex align-items-center justify-content-center gap-2\">\r\n <div class=\"spinner-border spinner-border-sm text-primary\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n </div>\r\n <span class=\"text-secondary text-13\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.LOADING_MORE_QUESTIONS'] || 'Loading more questions...'}}\r\n </span>\r\n </div>\r\n\r\n <!-- End of list reached -->\r\n <div *ngIf=\"!hasNext && allQuestions.length > 0 && !isLoading\" class=\"text-center py-3 text-secondary text-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ALL_QUESTIONS_LOADED'] || 'All questions loaded'}} ({{totalElements}})\r\n </div>\r\n </div>\r\n\r\n <!-- Sticky Footer -->\r\n <div class=\"px-4 py-3 border-top picker-footer d-flex align-items-center justify-content-between bg-white\">\r\n <div class=\"footer-summary\">\r\n <span class=\"text-secondary text-13\" *ngIf=\"selectedCount === 0\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.NO_QUESTIONS_SELECTED'] || 'No questions selected'}}\r\n </span>\r\n <span class=\"text-secondary text-13\" *ngIf=\"selectedCount > 0\">\r\n <strong class=\"text-primary\">{{selectedCount}}</strong> {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTIONS_SELECTED'] || 'questions selected'}}\r\n · <strong class=\"text-dark\">{{totalSelectedMarks}}</strong> {{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS'] || 'Marks'}}\r\n </span>\r\n </div>\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <button (click)=\"close()\" class=\"btn btn-outline-secondary px-4 py-2 footer-btn\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CANCEL'] || 'Cancel'}}\r\n </button>\r\n <button (click)=\"importSelected()\"\r\n [disabled]=\"selectedCount === 0\"\r\n class=\"btn btn-primary px-4 py-2 footer-btn footer-btn-import\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.IMPORT_COUNT'] || 'Import'}}\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".question-bank-picker{background-color:var(--assessment-bg-white, #ffffff);color:var(--assessment-text-grey-ten, #202124);font-family:var(--assessment-font-family, inherit)}.question-bank-picker .picker-header{background-color:var(--assessment-bg-white, #ffffff);border-color:var(--assessment-grey-four, #e8eaed)!important}.question-bank-picker .picker-header .btn-icon-back{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:50%;border:none;background-color:transparent;cursor:pointer;transition:background-color .15s ease}.question-bank-picker .picker-header .btn-icon-back:hover{background-color:var(--assessment-palette-EDF3FD, #EDF3FD)}.question-bank-picker .picker-header .btn-icon-back .action-icon{width:1.125rem;height:1.125rem}.question-bank-picker .picker-header .picker-title{font-size:1.25rem;font-weight:700;color:var(--assessment-text-grey-ten, #1e293b);line-height:1.25}.question-bank-picker .picker-header .picker-subtitle{font-size:.8125rem;margin-top:2px}.question-bank-picker .picker-search-deck{background-color:var(--assessment-bg-white, #ffffff);border-color:var(--assessment-grey-four, #e8eaed)!important}.question-bank-picker .picker-search-deck .search-input-wrapper{position:relative}.question-bank-picker .picker-search-deck .search-input-wrapper .search-input{height:2.6rem;padding-right:2rem;padding-left:.875rem;font-size:.875rem;border-radius:var(--assessment-border-radius-two, .375rem);border:1px solid var(--assessment-grey-four, #e2e8f0);background-color:var(--assessment-bg-white, #ffffff);color:var(--assessment-text-grey-ten, #202124)}.question-bank-picker .picker-search-deck .search-input-wrapper .search-input::placeholder{color:var(--assessment-text-grey-seven, #94a3b8)}.question-bank-picker .picker-search-deck .search-input-wrapper .search-input:focus{border-color:var(--assessment-primary-one, #467DD6);box-shadow:0 0 0 2px #467dd626}.question-bank-picker .picker-search-deck .search-input-wrapper .search-clear-btn{position:absolute;right:.75rem;top:50%;transform:translateY(-50%);border:none;background:transparent;color:var(--assessment-text-grey-seven, #94a3b8);font-size:.75rem;cursor:pointer;padding:2px 4px;border-radius:4px}.question-bank-picker .picker-search-deck .search-input-wrapper .search-clear-btn:hover{color:var(--assessment-text-grey-ten, #202124);background-color:var(--assessment-palette-EDF3FD, #EDF3FD)}.question-bank-picker .picker-search-deck .type-filter-wrapper{min-width:11rem;max-width:14rem}.question-bank-picker .picker-search-deck .type-filter-wrapper .filter-select{height:2.6rem;padding-right:2rem;font-size:.875rem;font-weight:500;border-radius:var(--assessment-border-radius-two, .375rem);border:1px solid var(--assessment-grey-four, #e2e8f0);background-color:var(--assessment-bg-white, #ffffff);color:var(--assessment-text-grey-ten, #334155);appearance:none;-webkit-appearance:none;-moz-appearance:none}.question-bank-picker .picker-search-deck .type-filter-wrapper .filter-select:focus{border-color:var(--assessment-primary-one, #467DD6);box-shadow:0 0 0 2px #467dd626}.question-bank-picker .picker-search-deck .type-filter-wrapper .select-arrow-icon{position:absolute;right:.75rem;top:50%;transform:translateY(-50%);width:.875rem;height:.875rem}.question-bank-picker .picker-search-deck .questions-heading{font-size:1.125rem;color:var(--assessment-text-grey-ten, #1e293b)}.question-bank-picker .picker-search-deck .select-all-label{font-size:.875rem;font-weight:600;color:var(--assessment-text-grey-nine, #334155);-webkit-user-select:none;user-select:none}.question-bank-picker .form-check-input{width:1.2rem;height:1.2rem;border-radius:4px;border:1.5px solid var(--assessment-grey-five, #cbd5e1);cursor:pointer}.question-bank-picker .form-check-input:checked{background-color:var(--assessment-primary-one, #467DD6);border-color:var(--assessment-primary-one, #467DD6)}.question-bank-picker .form-check-input:focus{box-shadow:0 0 0 2px #467dd633}.question-bank-picker .form-check-input:disabled{cursor:not-allowed;opacity:.5}.question-bank-picker .question-card{border:1px solid var(--assessment-grey-four, #e2e8f0);border-radius:var(--assessment-border-radius-two, .5rem);background-color:var(--assessment-bg-grey-one, #f8f9fa);padding:1rem 1.125rem;transition:border-color .15s ease,box-shadow .15s ease;cursor:pointer}.question-bank-picker .question-card:hover:not(.disabled-card){border-color:var(--assessment-palette-ADC9F6, #93c5fd);box-shadow:0 2px 6px #467dd60f}.question-bank-picker .question-card.selected-card{border-color:var(--assessment-primary-one, #467DD6);background-color:var(--assessment-bg-white, #ffffff)}.question-bank-picker .question-card.disabled-card{background-color:var(--assessment-bg-grey-one, #f8fafc);opacity:.75;cursor:not-allowed!important}.question-bank-picker .question-card .question-body-text{font-size:.9375rem;color:var(--assessment-text-grey-ten, #1e293b);line-height:1.45;word-break:break-word}.question-bank-picker .question-card .question-body-text ::ng-deep p,.question-bank-picker .question-card .question-body-text ::ng-deep div,.question-bank-picker .question-card .question-body-text p,.question-bank-picker .question-card .question-body-text div{margin:0!important;padding:0!important}.question-bank-picker .question-card .question-id-badge{font-size:.8125rem;font-weight:500;color:var(--assessment-text-grey-seven, #94a3b8)}.question-bank-picker .badge-pill{display:inline-flex;align-items:center;grid-gap:4px;gap:4px;padding:.25rem .75rem;border-radius:9999px;font-size:.75rem;font-weight:500;line-height:1.2}.question-bank-picker .badge-type-pill{background-color:#fffbeb;color:#b45309;border:1px solid #fde68a}.question-bank-picker .badge-marks-pill{background-color:#eff6ff;color:#2563eb;border:1px solid #bfdbfe}.question-bank-picker .badge-mandatory-pill{background-color:#ecfdf5;color:#059669;border:1px solid #a7f3d0}.question-bank-picker .badge-added-pill{background-color:#f0fdf4;color:#16a34a;border:1px solid #bbf7d0;font-weight:600}.question-bank-picker .badge-added-pill .dot-indicator{width:6px;height:6px;border-radius:50%;background-color:#16a34a;display:inline-block}.question-bank-picker .options-accordion-section .options-toggle-row{-webkit-user-select:none;user-select:none}.question-bank-picker .options-accordion-section .options-toggle-row .options-count-text{font-size:.8125rem;font-weight:600;color:var(--assessment-primary-one, #467DD6)}.question-bank-picker .options-accordion-section .options-toggle-row .options-arrow-icon{width:.875rem;height:.875rem}.question-bank-picker .options-accordion-section .options-toggle-row .options-divider-line{height:1px;background-color:var(--assessment-grey-four, #e2e8f0)}.question-bank-picker .options-accordion-section .options-toggle-row .options-hint-text{font-size:.75rem;color:var(--assessment-text-grey-seven, #94a3b8)}.question-bank-picker .options-accordion-section .options-list-container .option-item-row{font-size:.875rem;color:var(--assessment-text-grey-nine, #334155)}.question-bank-picker .options-accordion-section .options-list-container .option-item-row .option-radio-circle{width:.875rem;height:.875rem;border-radius:50%;border:1.5px solid var(--assessment-text-grey-nine, #334155);flex-shrink:0}.question-bank-picker .options-accordion-section .options-list-container .option-item-row .option-text{font-size:.875rem;color:var(--assessment-text-grey-nine, #334155)}.question-bank-picker .skeleton-card{border:1px solid var(--assessment-grey-four, #e2e8f0);border-radius:var(--assessment-border-radius-two, .5rem);background:var(--assessment-bg-white, #ffffff);padding:1rem 1.125rem}.question-bank-picker .skeleton-card .skeleton-line{height:14px;border-radius:4px;margin-bottom:12px;background:linear-gradient(90deg,#f1f5f9 25%,#e2e8f0 50%,#f1f5f9 75%);background-size:200% 100%;animation:shimmer 1.5s infinite}.question-bank-picker .skeleton-card .skeleton-line.line-full{width:75%}.question-bank-picker .skeleton-card .skeleton-meta{height:18px;width:160px;border-radius:9999px;background:linear-gradient(90deg,#f1f5f9 25%,#e2e8f0 50%,#f1f5f9 75%);background-size:200% 100%;animation:shimmer 1.5s infinite}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.question-bank-picker .empty-state-box .empty-state-img{max-width:5.5rem}.question-bank-picker .empty-state-box .empty-state-title{color:var(--assessment-text-grey-ten, #1e293b)}.question-bank-picker .empty-state-box .empty-state-desc{max-width:22rem;margin:0 auto}.question-bank-picker .picker-footer{border-color:var(--assessment-grey-four, #e8eaed)!important}.question-bank-picker .picker-footer .footer-btn{font-size:.875rem;font-weight:600;border-radius:var(--assessment-border-radius-two, .375rem)}.question-bank-picker .picker-footer .footer-btn-import{background-color:var(--assessment-primary-one, #467DD6);border-color:var(--assessment-primary-one, #467DD6)}.question-bank-picker .picker-footer .footer-btn-import:hover:not(:disabled){background-color:var(--assessment-primary-four, #295eb7);border-color:var(--assessment-primary-four, #295eb7)}.question-bank-picker .pointer-events-none{pointer-events:none}.question-bank-picker .min-w-0{min-width:0}.question-bank-picker .text-12{font-size:.75rem}.question-bank-picker .text-13{font-size:.8125rem}.question-bank-picker .text-15{font-size:.9375rem}\n"], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
265
265
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: QuestionBankPickerComponent, decorators: [{
|
|
266
266
|
type: Component,
|
|
267
267
|
args: [{
|
|
@@ -273,4 +273,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
273
273
|
type: Inject,
|
|
274
274
|
args: [MAT_DIALOG_DATA]
|
|
275
275
|
}] }]; } });
|
|
276
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb24tYmFuay1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9ucy1hc3Nlc3NtZW50L3NyYy9saWIvbW9kdWxlcy9hc3Nlc3NtZW50LW1ha2VyL2NvbXBvbmVudHMvcXVlc3Rpb24tYmFuay1waWNrZXIvcXVlc3Rpb24tYmFuay1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9ucy1hc3Nlc3NtZW50L3NyYy9saWIvbW9kdWxlcy9hc3Nlc3NtZW50LW1ha2VyL2NvbXBvbmVudHMvcXVlc3Rpb24tYmFuay1waWNrZXIvcXVlc3Rpb24tYmFuay1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFtQi9FLE1BQU0sT0FBTywyQkFBMkI7SUE2QnBDLFlBQ1ksc0JBQThDLEVBQy9DLFNBQW9ELEVBQzNCLFVBQXdDO1FBRmhFLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDL0MsY0FBUyxHQUFULFNBQVMsQ0FBMkM7UUFDM0IsZUFBVSxHQUFWLFVBQVUsQ0FBOEI7UUEvQjVFLGdCQUFXLEdBQThCLEVBQUUsQ0FBQztRQUM1QyxnQkFBVyxHQUE4QixFQUFFLENBQUM7UUFDNUMsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBQ25DLHdCQUFtQixHQUFnQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FB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LENBQUMsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztJQUMxRCxDQUFDOzt5SEExUlEsMkJBQTJCLG9GQWdDeEIsZUFBZTs2R0FoQ2xCLDJCQUEyQixnRUN0QnhDLHM2ZUE4T0E7NEZEeE5hLDJCQUEyQjtrQkFMdkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxXQUFXLEVBQUUsdUNBQXVDO29CQUNwRCxTQUFTLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQztpQkFDdkQ7OzBCQWlDUSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUXVlc3Rpb25CYW5rQ29uZmlnLCBRdWVzdGlvblR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9hc3Nlc3NtZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRRdWVzdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRNYWtlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hc3Nlc3NtZW50LW1ha2VyLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBRdWVzdGlvbkJhbmtQaWNrZXJEaWFsb2dEYXRhIHtcclxuICAgIHF1ZXN0aW9uQmFua0NvbmZpZzogUXVlc3Rpb25CYW5rQ29uZmlnO1xyXG4gICAgZXhpc3RpbmdRdWVzdGlvbklkczogU2V0PG51bWJlcj47XHJcbiAgICBsYWJlbENvbmZpZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICAgIGltYWdlQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gICAgcXVlc3Rpb25UeXBlczogUXVlc3Rpb25UeXBlW107XHJcbiAgICB0YXJnZXRTZWN0aW9uTmFtZT86IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1xdWVzdGlvbi1iYW5rLXBpY2tlcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcXVlc3Rpb24tYmFuay1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vcXVlc3Rpb24tYmFuay1waWNrZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25CYW5rUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgbGFiZWxDb25maWc6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICAgIGltYWdlQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgICBxdWVzdGlvblR5cGVzOiBRdWVzdGlvblR5cGVbXSA9IFtdO1xyXG4gICAgZXhpc3RpbmdRdWVzdGlvbklkczogU2V0PG51bWJlcj4gPSBuZXcgU2V0KCk7XHJcbiAgICB0YXJnZXRTZWN0aW9uTmFtZTogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgLy8gUGFnaW5hdGlvbiAmIEluZmluaXRlIFNjcm9sbFxyXG4gICAgYWxsUXVlc3Rpb25zOiBBc3Nlc3NtZW50UXVlc3Rpb25bXSA9IFtdO1xyXG4gICAgZmlsdGVyZWRRdWVzdGlvbnM6IEFzc2Vzc21lbnRRdWVzdGlvbltdID0gW107XHJcbiAgICBjdXJyZW50UGFnZSA9IDA7XHJcbiAgICBwYWdlU2l6ZSA9IDIwO1xyXG4gICAgdG90YWxFbGVtZW50cyA9IDA7XHJcbiAgICBoYXNOZXh0ID0gZmFsc2U7XHJcbiAgICBpc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIGlzSW5pdGlhbExvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIC8vIFNlcnZlci1zaWRlIHNlYXJjaCAmIGZpbHRlcnNcclxuICAgIHNlYXJjaFRlcm0gPSAnJztcclxuICAgIHNlbGVjdGVkVHlwZUNvZGUgPSAnJztcclxuXHJcbiAgICAvLyBNdWx0aS1zZWxlY3Rpb24gJiBFeHBhbmRlZCBPcHRpb25zXHJcbiAgICBzZWxlY3RlZFF1ZXN0aW9ucyA9IG5ldyBNYXA8bnVtYmVyLCBBc3Nlc3NtZW50UXVlc3Rpb24+KCk7XHJcbiAgICBleHBhbmRlZFF1ZXN0aW9uSWRzID0gbmV3IFNldDxudW1iZXI+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSBxdWVzdGlvbkJhbmtDb25maWc6IFF1ZXN0aW9uQmFua0NvbmZpZyA9IHt9O1xyXG4gICAgcHJpdmF0ZSBzZWFyY2hTdWJqZWN0JCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgYXNzZXNzbWVudE1ha2VyU2VydmljZTogQXNzZXNzbWVudE1ha2VyU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8UXVlc3Rpb25CYW5rUGlja2VyQ29tcG9uZW50PixcclxuICAgICAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRpYWxvZ0RhdGE6IFF1ZXN0aW9uQmFua1BpY2tlckRpYWxvZ0RhdGFcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmxhYmVsQ29uZmlnID0gdGhpcy5kaWFsb2dEYXRhPy5sYWJlbENvbmZpZyB8fCB7fTtcclxuICAgICAgICB0aGlzLmltYWdlQ29uZmlnID0gdGhpcy5kaWFsb2dEYXRhPy5pbWFnZUNvbmZpZyB8fCB7fTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uVHlwZXMgPSB0aGlzLmRpYWxvZ0RhdGE/LnF1ZXN0aW9uVHlwZXMgfHwgW107XHJcbiAgICAgICAgdGhpcy5leGlzdGluZ1F1ZXN0aW9uSWRzID0gdGhpcy5kaWFsb2dEYXRhPy5leGlzdGluZ1F1ZXN0aW9uSWRzIHx8IG5ldyBTZXQoKTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFua0NvbmZpZyA9IHRoaXMuZGlhbG9nRGF0YT8ucXVlc3Rpb25CYW5rQ29uZmlnIHx8IHt9O1xyXG4gICAgICAgIHRoaXMudGFyZ2V0U2VjdGlvbk5hbWUgPSB0aGlzLmRpYWxvZ0RhdGE/LnRhcmdldFNlY3Rpb25OYW1lIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLnNlYXJjaFN1YmplY3QkLnBpcGUoXHJcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgzNTApLFxyXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcclxuICAgICAgICApLnN1YnNjcmliZSh0ZXJtID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXJtID0gdGVybTtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuYWxsUXVlc3Rpb25zID0gW107XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFBhZ2UoMCwgZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRQYWdlKDAsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZFBhZ2UocGFnZTogbnVtYmVyLCBhcHBlbmQ6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBwYXJhbXM6IGFueSA9IHsgcGFnZSwgc2l6ZTogdGhpcy5wYWdlU2l6ZSB9O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkJhbmtDb25maWc/LmRvbWFpbikge1xyXG4gICAgICAgICAgICBwYXJhbXMuZG9tYWluID0gdGhpcy5xdWVzdGlvbkJhbmtDb25maWcuZG9tYWluO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkJhbmtDb25maWc/LnRlbmFudCkge1xyXG4gICAgICAgICAgICBwYXJhbXMudGVuYW50ID0gdGhpcy5xdWVzdGlvbkJhbmtDb25maWcudGVuYW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hUZXJtPy50cmltKCkpIHtcclxuICAgICAgICAgICAgcGFyYW1zLnF1ZXN0aW9uVGV4dCA9IHRoaXMuc2VhcmNoVGVybS50cmltKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVHlwZUNvZGUpIHtcclxuICAgICAgICAgICAgcGFyYW1zLnF1ZXN0aW9uVHlwZSA9IHRoaXMuc2VsZWN0ZWRUeXBlQ29kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5nZXRRdWVzdGlvbkJhbmtRdWVzdGlvbnMocGFyYW1zKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzOiBBc3Nlc3NtZW50UXVlc3Rpb25bXSA9IHJlcz8uZWxlbWVudHMgfHwgcmVzPy5jb250ZW50IHx8IChBcnJheS5pc0FycmF5KHJlcykgPyByZXMgOiBbXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXBwZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxRdWVzdGlvbnMgPSBbLi4udGhpcy5hbGxRdWVzdGlvbnMsIC4uLmVsZW1lbnRzXTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxRdWVzdGlvbnMgPSBlbGVtZW50cztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudG90YWxFbGVtZW50cyA9IHJlcz8udG90YWxFbGVtZW50cyA/PyAoYXBwZW5kID8gdGhpcy5hbGxRdWVzdGlvbnMubGVuZ3RoIDogZWxlbWVudHMubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFzTmV4dCA9IHJlcz8uaGFzTmV4dCAhPT0gdW5kZWZpbmVkID8gISFyZXMuaGFzTmV4dCA6IChlbGVtZW50cy5sZW5ndGggPT09IHRoaXMucGFnZVNpemUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0luaXRpYWxMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkUXVlc3Rpb25zID0gdGhpcy5hbGxRdWVzdGlvbnM7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0luaXRpYWxMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkTW9yZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNOZXh0ICYmICF0aGlzLmlzTG9hZGluZykge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRQYWdlKHRoaXMuY3VycmVudFBhZ2UgKyAxLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25TY3JvbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGlmICghdGFyZ2V0KSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgdGhyZXNob2xkID0gMTYwO1xyXG4gICAgICAgIGNvbnN0IHJlYWNoZWRCb3R0b20gPSB0YXJnZXQuc2Nyb2xsSGVpZ2h0IC0gdGFyZ2V0LnNjcm9sbFRvcCAtIHRhcmdldC5jbGllbnRIZWlnaHQgPD0gdGhyZXNob2xkO1xyXG5cclxuICAgICAgICBpZiAocmVhY2hlZEJvdHRvbSAmJiB0aGlzLmhhc05leHQgJiYgIXRoaXMuaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXBwbHlGaWx0ZXJzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRRdWVzdGlvbnMgPSB0aGlzLmFsbFF1ZXN0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBvblNlYXJjaENoYW5nZSh0ZXJtOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFN1YmplY3QkLm5leHQodGVybSB8fCAnJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJTZWFyY2goKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XHJcbiAgICAgICAgdGhpcy5hbGxRdWVzdGlvbnMgPSBbXTtcclxuICAgICAgICB0aGlzLmxvYWRQYWdlKDAsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBvblR5cGVGaWx0ZXJDaGFuZ2UodHlwZUNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlQ29kZSA9IHR5cGVDb2RlIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xyXG4gICAgICAgIHRoaXMuYWxsUXVlc3Rpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5sb2FkUGFnZSgwLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0UXVpY2tUeXBlRmlsdGVyKHR5cGVDb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjb2RlID0gdHlwZUNvZGUgfHwgJyc7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGVDb2RlID0gdGhpcy5zZWxlY3RlZFR5cGVDb2RlID09PSBjb2RlID8gJycgOiBjb2RlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xyXG4gICAgICAgIHRoaXMuYWxsUXVlc3Rpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5sb2FkUGFnZSgwLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlU2VsZWN0aW9uKHF1ZXN0aW9uOiBBc3Nlc3NtZW50UXVlc3Rpb24pOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXF1ZXN0aW9uLmlkIHx8IHRoaXMuaXNBbHJlYWR5SW5Bc3Nlc3NtZW50KHF1ZXN0aW9uLmlkKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFF1ZXN0aW9ucy5oYXMocXVlc3Rpb24uaWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRRdWVzdGlvbnMuZGVsZXRlKHF1ZXN0aW9uLmlkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUXVlc3Rpb25zLnNldChxdWVzdGlvbi5pZCwgcXVlc3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc1NlbGVjdGVkKHF1ZXN0aW9uOiBBc3Nlc3NtZW50UXVlc3Rpb24pOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISFxdWVzdGlvbi5pZCAmJiB0aGlzLnNlbGVjdGVkUXVlc3Rpb25zLmhhcyhxdWVzdGlvbi5pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNBbHJlYWR5SW5Bc3Nlc3NtZW50KHF1ZXN0aW9uSWQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXF1ZXN0aW9uSWQgJiYgdGhpcy5leGlzdGluZ1F1ZXN0aW9uSWRzLmhhcyhxdWVzdGlvbklkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBCdWxrIHNlbGVjdGlvbiBtZXRob2RzXHJcbiAgICBnZXQgZWxpZ2libGVWaXNpYmxlUXVlc3Rpb25zKCk6IEFzc2Vzc21lbnRRdWVzdGlvbltdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJlZFF1ZXN0aW9ucy5maWx0ZXIocSA9PiBxLmlkICYmICF0aGlzLmlzQWxyZWFkeUluQXNzZXNzbWVudChxLmlkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzQWxsVmlzaWJsZVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGVsaWdpYmxlID0gdGhpcy5lbGlnaWJsZVZpc2libGVRdWVzdGlvbnM7XHJcbiAgICAgICAgcmV0dXJuIGVsaWdpYmxlLmxlbmd0aCA+IDAgJiYgZWxpZ2libGUuZXZlcnkocSA9PiB0aGlzLnNlbGVjdGVkUXVlc3Rpb25zLmhhcyhxLmlkISkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc1NvbWVWaXNpYmxlU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgZWxpZ2libGUgPSB0aGlzLmVsaWdpYmxlVmlzaWJsZVF1ZXN0aW9ucztcclxuICAgICAgICByZXR1cm4gZWxpZ2libGUuc29tZShxID0+IHRoaXMuc2VsZWN0ZWRRdWVzdGlvbnMuaGFzKHEuaWQhKSkgJiYgIXRoaXMuaXNBbGxWaXNpYmxlU2VsZWN0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlU2VsZWN0QWxsVmlzaWJsZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9IHRoaXMuZWxpZ2libGVWaXNpYmxlUXVlc3Rpb25zO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQWxsVmlzaWJsZVNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIGVsaWdpYmxlLmZvckVhY2gocSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocS5pZCkgdGhpcy5zZWxlY3RlZFF1ZXN0aW9ucy5kZWxldGUocS5pZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVsaWdpYmxlLmZvckVhY2gocSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocS5pZCkgdGhpcy5zZWxlY3RlZFF1ZXN0aW9ucy5zZXQocS5pZCwgcSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckFsbFNlbGVjdGlvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUXVlc3Rpb25zLmNsZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gT3B0aW9uIHByZXZpZXcgbWV0aG9kc1xyXG4gICAgaGFzT3B0aW9ucyhxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhKHF1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdCAmJiBxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3QubGVuZ3RoID4gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlRXhwYW5kT3B0aW9ucyhxdWVzdGlvbklkOiBudW1iZXIgfCB1bmRlZmluZWQsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGlmICghcXVlc3Rpb25JZCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkUXVlc3Rpb25JZHMuaGFzKHF1ZXN0aW9uSWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWRRdWVzdGlvbklkcy5kZWxldGUocXVlc3Rpb25JZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5leHBhbmRlZFF1ZXN0aW9uSWRzLmFkZChxdWVzdGlvbklkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaXNPcHRpb25zRXhwYW5kZWQocXVlc3Rpb25JZDogbnVtYmVyIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhcXVlc3Rpb25JZCAmJiB0aGlzLmV4cGFuZGVkUXVlc3Rpb25JZHMuaGFzKHF1ZXN0aW9uSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENhbGN1bGF0ZWQgbWV0cmljc1xyXG4gICAgZ2V0IHNlbGVjdGVkQ291bnQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFF1ZXN0aW9ucy5zaXplO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB0b3RhbFNlbGVjdGVkTWFya3MoKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgdG90YWwgPSAwO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRRdWVzdGlvbnMuZm9yRWFjaChxID0+IHtcclxuICAgICAgICAgICAgdG90YWwgKz0gKHEud2VpZ2h0IHx8IDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0b3RhbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUeXBlQ291bnQodHlwZUNvZGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKCF0eXBlQ29kZSkgcmV0dXJuIHRoaXMuYWxsUXVlc3Rpb25zLmxlbmd0aDtcclxuICAgICAgICByZXR1cm4gdGhpcy5hbGxRdWVzdGlvbnMuZmlsdGVyKHEgPT4gcS5xdWVzdGlvblR5cGU/LmNvZGUgPT09IHR5cGVDb2RlKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2F0ZWdvcnlDbGFzcyhxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBjb2RlID0gcXVlc3Rpb24/LnF1ZXN0aW9uVHlwZT8uY29kZSB8fCAnJztcclxuICAgICAgICBpZiAoY29kZS5pbmNsdWRlcygnT0JKRUNUSVZFJykgfHwgY29kZS5pbmNsdWRlcygnQ0hPSUNFJykgfHwgY29kZS5pbmNsdWRlcygnTUNRJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdiYWRnZS1vYmplY3RpdmUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29kZS5pbmNsdWRlcygnU1VCSkVDVElWRScpIHx8IGNvZGUuaW5jbHVkZXMoJ0VTU0FZJykgfHwgY29kZS5pbmNsdWRlcygnVEVYVCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnYmFkZ2Utc3ViamVjdGl2ZSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb2RlLmluY2x1ZGVzKCdEQVRFJykgfHwgY29kZS5pbmNsdWRlcygnVElNRScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnYmFkZ2UtZGF0ZSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnYmFkZ2UtZ2VuZXJpYyc7XHJcbiAgICB9XHJcblxyXG4gICAgaW1wb3J0U2VsZWN0ZWQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb3VudCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUXVlc3Rpb25zLnZhbHVlcygpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIGNhcGl0YWxpemVGaXJzdCh0ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdGV4dCkgcmV0dXJuICcnO1xyXG4gICAgICAgIHJldHVybiB0ZXh0LnRvTG93ZXJDYXNlKCkuc3BsaXQoJyAnKS5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSkuam9pbignICcpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFF1ZXN0aW9uVHlwZUxhYmVsKHF1ZXN0aW9uOiBBc3Nlc3NtZW50UXVlc3Rpb24pOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcGl0YWxpemVGaXJzdChcclxuICAgICAgICAgICAgcXVlc3Rpb24/LnF1ZXN0aW9uVHlwZT8ubGFiZWxzPy5bMF0/LnRleHQgfHwgcXVlc3Rpb24/LnF1ZXN0aW9uVHlwZT8uY29kZVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaW1hZ2VFcnJvckhhbmRsZXIoZXZlbnQ6IGFueSwgZmlsZVBhdGg6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICghZXZlbnQ/LnRhcmdldCkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChldmVudC50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWVycm9yLWhhbmRsZWQnKSA9PT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV2ZW50LnRhcmdldC5zZXRBdHRyaWJ1dGUoJ2RhdGEtZXJyb3ItaGFuZGxlZCcsICd0cnVlJyk7XHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnNyYyA9IGZpbGVQYXRoO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrQnlRdWVzdGlvbklkKGluZGV4OiBudW1iZXIsIHF1ZXN0aW9uOiBBc3Nlc3NtZW50UXVlc3Rpb24pOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBxdWVzdGlvbj8uaWQgPyAncScgKyBxdWVzdGlvbi5pZCA6ICdpJyArIGluZGV4O1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gaC0xMDAgcXVlc3Rpb24tYmFuay1waWNrZXJcIj5cclxuICAgIDwhLS0gSGVhZGVyOiBCYWNrIEFycm93ICsgVGl0bGUgKyBTdWJ0aXRsZSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHB4LTQgcHktMyBib3JkZXItYm90dG9tIHBpY2tlci1oZWFkZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjbG9zZSgpXCIgY2xhc3M9XCJidG4taWNvbi1iYWNrXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkdPX0JBQ0snXSB8fCAnR28gQmFjaydcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uR09fQkFDSyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2dvLWJhY2suc3ZnJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbi1pY29uXCIgLz5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtYi0wIGZ3LWJvbGQgcGlja2VyLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLklNUE9SVF9GUk9NX1FVRVNUSU9OX0JBTksnXSB8fCAnSW1wb3J0IGZyb20gUXVlc3Rpb24gQmFuayd9fVxyXG4gICAgICAgICAgICAgICAgPC9oND5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBwaWNrZXItc3VidGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlNFTEVDVEVEX1NFQ1RJT04nXSB8fCAnU2VsZWN0ZWQgU2VjdGlvbid9fTo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZnctc2VtaWJvbGQgbXMtMVwiICpuZ0lmPVwidGFyZ2V0U2VjdGlvbk5hbWVcIj57e3RhcmdldFNlY3Rpb25OYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeSBtcy0xXCIgKm5nSWY9XCIhdGFyZ2V0U2VjdGlvbk5hbWVcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuSU1QT1JUX1FVRVNUSU9OU19JTlRPX05FV19TRUNUSU9OJ10gfHwgJ0ltcG9ydCBxdWVzdGlvbnMgaW50byBhIG5ldyBzZWN0aW9uJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gU2VhcmNoICYgRmlsdGVyIENvbnRyb2xzIERlY2sgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGlja2VyLXNlYXJjaC1kZWNrIHB4LTQgcHQtMyBwYi0yIGJvcmRlci1ib3R0b21cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0zIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XHJcbiAgICAgICAgICAgIDwhLS0gU2VhcmNoIEJveCAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dC13cmFwcGVyIGZsZXgtZ3Jvdy0xIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHNlYXJjaC1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuU0VBUkNIX1FVRVNUSU9OJ10gfHwgJ1NlYXJjaCBRdWVzdGlvbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlYXJjaFRlcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoQ2hhbmdlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzZWFyY2hUZXJtXCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoKClcIiBjbGFzcz1cInNlYXJjaC1jbGVhci1idG5cIiBhcmlhLWxhYmVsPVwiQ2xlYXIgU2VhcmNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAg4pyVXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFR5cGUgRmlsdGVyIERyb3Bkb3duIHVzaW5nIGFycm93LWRvd24tYmxhY2suc3ZnIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHlwZS1maWx0ZXItd3JhcHBlciBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGZpbHRlci1zZWxlY3QgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZFR5cGVDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25UeXBlRmlsdGVyQ2hhbmdlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFMTF9UWVBFUyddIHx8ICdBbGwgVHlwZXMnfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0eXBlIG9mIHF1ZXN0aW9uVHlwZXNcIiBbdmFsdWVdPVwidHlwZS5jb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7dHlwZS5sYWJlbCB8fCB0eXBlLmNvZGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkFSUk9XX0RPV05fQkxBQ0snXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9hcnJvdy1kb3duLWJsYWNrLnN2ZycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3QtYXJyb3ctaWNvbiBwb2ludGVyLWV2ZW50cy1ub25lXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gU2VjdGlvbiBIZWFkZXI6IFF1ZXN0aW9uIENvdW50ICYgU2VsZWN0IEFsbCAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBwdC0yIHBiLTFcIj5cclxuICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMCBmdy1ib2xkIHF1ZXN0aW9ucy1oZWFkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICB7e3RvdGFsRWxlbWVudHMgfHwgZmlsdGVyZWRRdWVzdGlvbnMubGVuZ3RofX0ge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlFVRVNUSU9OUyddIHx8ICdRdWVzdGlvbnMnfX1cclxuICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBtYi0wXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IHNlbGVjdC1hbGwtY2hlY2tib3ggY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzZWxlY3RBbGxRdWVzdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsVmlzaWJsZVNlbGVjdGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJpc1NvbWVWaXNpYmxlU2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJlbGlnaWJsZVZpc2libGVRdWVzdGlvbnMubGVuZ3RoID09PSAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdEFsbFZpc2libGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBzZWxlY3QtYWxsLWxhYmVsIGN1cnNvci1wb2ludGVyXCIgZm9yPVwic2VsZWN0QWxsUXVlc3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlNFTEVDVF9BTExfUVVFU1RJT05TJ10gfHwgJ1NlbGVjdCBBbGwgUXVlc3Rpb25zJ319XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gUXVlc3Rpb25zIFZpZXdwb3J0IEJveCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBvdmVyZmxvdy1hdXRvIHAtM1wiIChzY3JvbGwpPVwib25TY3JvbGwoJGV2ZW50KVwiPlxyXG4gICAgICAgIDwhLS0gU2tlbGV0b24gTG9hZGluZyBTdGF0ZSAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNJbml0aWFsTG9hZGluZ1wiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0zIHB5LTFcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaSBvZiBbMSwgMiwgMywgNCwgNV1cIiBjbGFzcz1cInNrZWxldG9uLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJza2VsZXRvbi1saW5lIGxpbmUtZnVsbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNrZWxldG9uLW1ldGFcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gUXVlc3Rpb24gQ2FyZHMgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0luaXRpYWxMb2FkaW5nICYmIGZpbHRlcmVkUXVlc3Rpb25zLmxlbmd0aCA+IDBcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtM1wiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBmaWx0ZXJlZFF1ZXN0aW9uczsgdHJhY2tCeTogdHJhY2tCeVF1ZXN0aW9uSWRcIlxyXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwicXVlc3Rpb24tY2FyZFwiXHJcbiAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNhcmRdPVwiaXNBbHJlYWR5SW5Bc3Nlc3NtZW50KHF1ZXN0aW9uLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkLWNhcmRdPVwiaXNTZWxlY3RlZChxdWVzdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWxlY3Rpb24ocXVlc3Rpb24pXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBNYWluIENhcmQgSGVhZGVyOiBDaGVja2JveCArIFF1ZXN0aW9uIFRleHQgKyAjSUQgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLXN0YXJ0IGdhcC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB0LTEgZmxleC1zaHJpbmstMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGNhcmQtY2hlY2tib3ggY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWQocXVlc3Rpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0FscmVhZHlJbkFzc2Vzc21lbnQocXVlc3Rpb24uaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3Rpb24ocXVlc3Rpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBtaW4tdy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtc3RhcnQganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLTMgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInF1ZXN0aW9uLWJvZHktdGV4dCBmdy1tZWRpdW0gdGV4dC1icmVha1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwicXVlc3Rpb24/LnF1ZXN0aW9uVGV4dD8uWzBdPy50ZXh0XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXN0aW9uLWlkLWJhZGdlIGZsZXgtc2hyaW5rLTBcIiAqbmdJZj1cInF1ZXN0aW9uPy5pZFwiPiN7e3F1ZXN0aW9uLmlkfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBCYWRnZXMgUm93OiBUeXBlIFBpbGwsIE1hcmtzIFBpbGwsIE1hbmRhdG9yeSBQaWxsLCBhbmQgQWRkZWQgUGlsbCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gZmxleC13cmFwIGdhcC0yIG10LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtd3JhcCBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUXVlc3Rpb24gVHlwZSBQaWxsIChPcmFuZ2UvQW1iZXIpIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UtcGlsbCBiYWRnZS10eXBlLXBpbGwgcC0yIHJvdW5kZWRcIiAqbmdJZj1cInF1ZXN0aW9uPy5xdWVzdGlvblR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRRdWVzdGlvblR5cGVMYWJlbChxdWVzdGlvbil9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBNYXJrcyBQaWxsIChCbHVlL0luZGlnbykgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZS1waWxsIGJhZGdlLW1hcmtzLXBpbGwgcC0yIHJvdW5kZWRcIiAqbmdJZj1cInF1ZXN0aW9uPy53ZWlnaHQgIT09IHVuZGVmaW5lZCAmJiBxdWVzdGlvbj8ud2VpZ2h0ICE9PSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQVJLUyddIHx8ICdNYXJrcyd9fSB7e3F1ZXN0aW9uLndlaWdodH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE1hbmRhdG9yeSBQaWxsIChHcmVlbikgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZS1waWxsIGJhZGdlLW1hbmRhdG9yeS1waWxsIHAtMiByb3VuZGVkXCIgKm5nSWY9XCJxdWVzdGlvbj8uaXNNYW5kYXRvcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BTkRBVE9SWSddIHx8ICdNYW5kYXRvcnknfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJpZ2h0LWFsaWduZWQgQWxyZWFkeSBBZGRlZCBQaWxsIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0FscmVhZHlJbkFzc2Vzc21lbnQocXVlc3Rpb24uaWQpXCIgY2xhc3M9XCJiYWRnZS1waWxsIGJhZGdlLWFkZGVkLXBpbGwgcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3QtaW5kaWNhdG9yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERFRCddIHx8ICdBZGRlZCd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gT3B0aW9ucyBBY2NvcmRpb24gKGlmIHF1ZXN0aW9uIGhhcyBkZWZhdWx0T3B0aW9uc0xpc3QpIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaGFzT3B0aW9ucyhxdWVzdGlvbilcIiBjbGFzcz1cIm9wdGlvbnMtYWNjb3JkaW9uLXNlY3Rpb24gbXQtMyBwdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRvZ2dsZSBCdXR0b24gUm93IHdpdGggQXJyb3cgJiBEaXZpZGVyIExpbmUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBjdXJzb3ItcG9pbnRlciBvcHRpb25zLXRvZ2dsZS1yb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRXhwYW5kT3B0aW9ucyhxdWVzdGlvbi5pZCwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3B0aW9ucy1jb3VudC10ZXh0IHRleHQtcHJpbWFyeSBmdy1zZW1pYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3F1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdD8ubGVuZ3RoIHx8IDB9fSB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuT1BUSU9OUyddIHx8ICdPcHRpb25zJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpc09wdGlvbnNFeHBhbmRlZChxdWVzdGlvbi5pZCkgPyAoaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkFSUk9XX1VQX0JMVUUnXSB8fCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvYXJyb3ctdXAtYmx1ZS5zdmcnKSA6IChpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uQVJST1dfRE9XTl9CTFVFJ10gfHwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2Fycm93LWRvd24tYmx1ZS5zdmcnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCBpc09wdGlvbnNFeHBhbmRlZChxdWVzdGlvbi5pZCkgPyAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvYXJyb3ctdXAtYmx1ZS5zdmcnIDogJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2Fycm93LWRvd24tYmx1ZS5zdmcnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm9wdGlvbnMtYXJyb3ctaWNvblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnMtZGl2aWRlci1saW5lIGZsZXgtZ3Jvdy0xXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeSB0ZXh0LTEyIG9wdGlvbnMtaGludC10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKAoiB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ0xJQ0tfVE9fVklFVyddIHx8ICdDbGljayB0byB2aWV3J319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBFeHBhbmRlZCBPcHRpb25zIExpc3QgKFJhZGlvIG9wdGlvbnMpIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzT3B0aW9uc0V4cGFuZGVkKHF1ZXN0aW9uLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwib3B0aW9ucy1saXN0LWNvbnRhaW5lciBkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTIgbXQtMyBwcy0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdCBvZiBxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIG9wdGlvbi1pdGVtLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdGlvbi1yYWRpby1jaXJjbGVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3B0aW9uLXRleHQgdGV4dC1icmVha1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcHQub3B0aW9ucz8ub3B0aW9uTmFtZT8uWzBdPy50ZXh0IHx8IG9wdC5vcHRpb25zPy5vcHRpb25Db2RlIHx8ICdPcHRpb24nfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBFbXB0eSBTdGF0ZTogTm8gbWF0Y2hpbmcgZmlsdGVyIHJlc3VsdHMgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0luaXRpYWxMb2FkaW5nICYmIGZpbHRlcmVkUXVlc3Rpb25zLmxlbmd0aCA9PT0gMCAmJiBhbGxRdWVzdGlvbnMubGVuZ3RoID4gMFwiXHJcbiAgICAgICAgICAgICBjbGFzcz1cImVtcHR5LXN0YXRlLWJveCBweS01IHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiZW1wdHktc3RhdGUtdGl0bGUgZnctc2VtaWJvbGQgdGV4dC0xNSBtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTk9fTUFUQ0hJTkdfUVVFU1RJT05TJ10gfHwgJ05vIG1hdGNoaW5nIHF1ZXN0aW9ucyBmb3VuZCd9fVxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiZW1wdHktc3RhdGUtZGVzYyB0ZXh0LXNlY29uZGFyeSB0ZXh0LTEzIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5OT19NQVRDSElOR19RVUVTVElPTlNfREVTQyddIHx8ICdUcnkgYWRqdXN0aW5nIHlvdXIgc2VhcmNoIHRlcm1zIG9yIGNsZWFyaW5nIHNlbGVjdGVkIHF1ZXN0aW9uIHR5cGUgZmlsdGVycy4nfX1cclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjbGVhclNlYXJjaCgpOyBzZWxlY3RlZFR5cGVDb2RlID0gJyc7IGFwcGx5RmlsdGVycygpO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tc20gcHgtM1wiPlxyXG4gICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNMRUFSX0ZJTFRFUlMnXSB8fCAnQ2xlYXIgRmlsdGVycyd9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBFbXB0eSBTdGF0ZTogUXVlc3Rpb24gYmFuayBpcyBlbXB0eSAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzSW5pdGlhbExvYWRpbmcgJiYgYWxsUXVlc3Rpb25zLmxlbmd0aCA9PT0gMFwiXHJcbiAgICAgICAgICAgICBjbGFzcz1cImVtcHR5LXN0YXRlLWJveCBweS01IHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uTk9fUVVFU1RJT05TJ11cIiBjbGFzcz1cImVtcHR5LXN0YXRlLWltZyBtYi0zXCJcclxuICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvbm8tcXVlc3Rpb25zLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJlbXB0eS1zdGF0ZS10aXRsZSBmdy1zZW1pYm9sZCB0ZXh0LTE1IG1iLTFcIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5OT19RVUVTVElPTlNfSU5fQkFOSyddIHx8ICdObyBRdWVzdGlvbnMgaW4gQmFuayEnfX1cclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cImVtcHR5LXN0YXRlLWRlc2MgdGV4dC1zZWNvbmRhcnkgdGV4dC0xMyBtYi0wXCI+XHJcbiAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTk9fUVVFU1RJT05TX0lOX0JBTktfREVTQyddIHx8ICdDcmVhdGUgc3RhbmRhbG9uZSBxdWVzdGlvbnMgaW4gdGhlIFF1ZXN0aW9uIEJhbmsgdG8gcmV1c2UgdGhlbSBoZXJlLid9fVxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gSW5maW5pdGUgU2Nyb2xsIEJvdHRvbSBMb2FkZXIgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZyAmJiAhaXNJbml0aWFsTG9hZGluZ1wiIGNsYXNzPVwicHktMyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+TG9hZGluZy4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zZWNvbmRhcnkgdGV4dC0xM1wiPlxyXG4gICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkxPQURJTkdfTU9SRV9RVUVTVElPTlMnXSB8fCAnTG9hZGluZyBtb3JlIHF1ZXN0aW9ucy4uLid9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gRW5kIG9mIGxpc3QgcmVhY2hlZCAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWhhc05leHQgJiYgYWxsUXVlc3Rpb25zLmxlbmd0aCA+IDAgJiYgIWlzTG9hZGluZ1wiIGNsYXNzPVwidGV4dC1jZW50ZXIgcHktMyB0ZXh0LXNlY29uZGFyeSB0ZXh0LTEyXCI+XHJcbiAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BTExfUVVFU1RJT05TX0xPQURFRCddIHx8ICdBbGwgcXVlc3Rpb25zIGxvYWRlZCd9fSAoe3t0b3RhbEVsZW1lbnRzfX0pXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFN0aWNreSBGb290ZXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHgtNCBweS0zIGJvcmRlci10b3AgcGlja2VyLWZvb3RlciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGJnLXdoaXRlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1zdW1tYXJ5XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zZWNvbmRhcnkgdGV4dC0xM1wiICpuZ0lmPVwic2VsZWN0ZWRDb3VudCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk5PX1FVRVNUSU9OU19TRUxFQ1RFRCddIHx8ICdObyBxdWVzdGlvbnMgc2VsZWN0ZWQnfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc2Vjb25kYXJ5IHRleHQtMTNcIiAqbmdJZj1cInNlbGVjdGVkQ291bnQgPiAwXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPVwidGV4dC1wcmltYXJ5XCI+e3tzZWxlY3RlZENvdW50fX08L3N0cm9uZz4ge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlFVRVNUSU9OU19TRUxFQ1RFRCddIHx8ICdxdWVzdGlvbnMgc2VsZWN0ZWQnfX1cclxuICAgICAgICAgICAgICAgICZtaWRkb3Q7IDxzdHJvbmcgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57e3RvdGFsU2VsZWN0ZWRNYXJrc319PC9zdHJvbmc+IHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQVJLUyddIHx8ICdNYXJrcyd9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2UoKVwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBweC00IHB5LTIgZm9vdGVyLWJ0blwiPlxyXG4gICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNBTkNFTCddIHx8ICdDYW5jZWwnfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImltcG9ydFNlbGVjdGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWxlY3RlZENvdW50ID09PSAwXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBweC00IHB5LTIgZm9vdGVyLWJ0biBmb290ZXItYnRuLWltcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLklNUE9SVF9DT1VOVCddIHx8ICdJbXBvcnQnfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
276
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb24tYmFuay1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9ucy1hc3Nlc3NtZW50L3NyYy9saWIvbW9kdWxlcy9hc3Nlc3NtZW50LW1ha2VyL2NvbXBvbmVudHMvcXVlc3Rpb24tYmFuay1waWNrZXIvcXVlc3Rpb24tYmFuay1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9ucy1hc3Nlc3NtZW50L3NyYy9saWIvbW9kdWxlcy9hc3Nlc3NtZW50LW1ha2VyL2NvbXBvbmVudHMvcXVlc3Rpb24tYmFuay1waWNrZXIvcXVlc3Rpb24tYmFuay1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFtQi9FLE1BQU0sT0FBTywyQkFBMkI7SUE2QnBDLFlBQ1ksc0JBQThDLEVBQy9DLFNBQW9ELEVBQzNCLFVBQXdDO1FBRmhFLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDL0MsY0FBUyxHQUFULFNBQVMsQ0FBMkM7UUFDM0IsZUFBVSxHQUFWLFVBQVUsQ0FBOEI7UUEvQjVFLGdCQUFXLEdBQThCLEVBQUUsQ0FBQztRQUM1QyxnQkFBVyxHQUE4QixFQUFFLENBQUM7UUFDNUMsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBQ25DLHdCQUFtQixHQUFnQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FB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LENBQUMsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztJQUMxRCxDQUFDOzt5SEExUlEsMkJBQTJCLG9GQWdDeEIsZUFBZTs2R0FoQ2xCLDJCQUEyQixnRUN0QnhDLDgzZUE2T0E7NEZEdk5hLDJCQUEyQjtrQkFMdkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxXQUFXLEVBQUUsdUNBQXVDO29CQUNwRCxTQUFTLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQztpQkFDdkQ7OzBCQWlDUSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUXVlc3Rpb25CYW5rQ29uZmlnLCBRdWVzdGlvblR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9hc3Nlc3NtZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRRdWVzdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRNYWtlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hc3Nlc3NtZW50LW1ha2VyLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBRdWVzdGlvbkJhbmtQaWNrZXJEaWFsb2dEYXRhIHtcclxuICAgIHF1ZXN0aW9uQmFua0NvbmZpZzogUXVlc3Rpb25CYW5rQ29uZmlnO1xyXG4gICAgZXhpc3RpbmdRdWVzdGlvbklkczogU2V0PG51bWJlcj47XHJcbiAgICBsYWJlbENvbmZpZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICAgIGltYWdlQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gICAgcXVlc3Rpb25UeXBlczogUXVlc3Rpb25UeXBlW107XHJcbiAgICB0YXJnZXRTZWN0aW9uTmFtZT86IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1xdWVzdGlvbi1iYW5rLXBpY2tlcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcXVlc3Rpb24tYmFuay1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vcXVlc3Rpb24tYmFuay1waWNrZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25CYW5rUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgbGFiZWxDb25maWc6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICAgIGltYWdlQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgICBxdWVzdGlvblR5cGVzOiBRdWVzdGlvblR5cGVbXSA9IFtdO1xyXG4gICAgZXhpc3RpbmdRdWVzdGlvbklkczogU2V0PG51bWJlcj4gPSBuZXcgU2V0KCk7XHJcbiAgICB0YXJnZXRTZWN0aW9uTmFtZTogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgLy8gUGFnaW5hdGlvbiAmIEluZmluaXRlIFNjcm9sbFxyXG4gICAgYWxsUXVlc3Rpb25zOiBBc3Nlc3NtZW50UXVlc3Rpb25bXSA9IFtdO1xyXG4gICAgZmlsdGVyZWRRdWVzdGlvbnM6IEFzc2Vzc21lbnRRdWVzdGlvbltdID0gW107XHJcbiAgICBjdXJyZW50UGFnZSA9IDA7XHJcbiAgICBwYWdlU2l6ZSA9IDEwMDtcclxuICAgIHRvdGFsRWxlbWVudHMgPSAwO1xyXG4gICAgaGFzTmV4dCA9IGZhbHNlO1xyXG4gICAgaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICBpc0luaXRpYWxMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBTZXJ2ZXItc2lkZSBzZWFyY2ggJiBmaWx0ZXJzXHJcbiAgICBzZWFyY2hUZXJtID0gJyc7XHJcbiAgICBzZWxlY3RlZFR5cGVDb2RlID0gJyc7XHJcblxyXG4gICAgLy8gTXVsdGktc2VsZWN0aW9uICYgRXhwYW5kZWQgT3B0aW9uc1xyXG4gICAgc2VsZWN0ZWRRdWVzdGlvbnMgPSBuZXcgTWFwPG51bWJlciwgQXNzZXNzbWVudFF1ZXN0aW9uPigpO1xyXG4gICAgZXhwYW5kZWRRdWVzdGlvbklkcyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xyXG5cclxuICAgIHByaXZhdGUgcXVlc3Rpb25CYW5rQ29uZmlnOiBRdWVzdGlvbkJhbmtDb25maWcgPSB7fTtcclxuICAgIHByaXZhdGUgc2VhcmNoU3ViamVjdCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGFzc2Vzc21lbnRNYWtlclNlcnZpY2U6IEFzc2Vzc21lbnRNYWtlclNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFF1ZXN0aW9uQmFua1BpY2tlckNvbXBvbmVudD4sXHJcbiAgICAgICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkaWFsb2dEYXRhOiBRdWVzdGlvbkJhbmtQaWNrZXJEaWFsb2dEYXRhXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5sYWJlbENvbmZpZyA9IHRoaXMuZGlhbG9nRGF0YT8ubGFiZWxDb25maWcgfHwge307XHJcbiAgICAgICAgdGhpcy5pbWFnZUNvbmZpZyA9IHRoaXMuZGlhbG9nRGF0YT8uaW1hZ2VDb25maWcgfHwge307XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvblR5cGVzID0gdGhpcy5kaWFsb2dEYXRhPy5xdWVzdGlvblR5cGVzIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuZXhpc3RpbmdRdWVzdGlvbklkcyA9IHRoaXMuZGlhbG9nRGF0YT8uZXhpc3RpbmdRdWVzdGlvbklkcyB8fCBuZXcgU2V0KCk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmtDb25maWcgPSB0aGlzLmRpYWxvZ0RhdGE/LnF1ZXN0aW9uQmFua0NvbmZpZyB8fCB7fTtcclxuICAgICAgICB0aGlzLnRhcmdldFNlY3Rpb25OYW1lID0gdGhpcy5kaWFsb2dEYXRhPy50YXJnZXRTZWN0aW9uTmFtZSB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTdWJqZWN0JC5waXBlKFxyXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoMzUwKSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXHJcbiAgICAgICAgKS5zdWJzY3JpYmUodGVybSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVGVybSA9IHRlcm07XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmFsbFF1ZXN0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRQYWdlKDAsIGZhbHNlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkUGFnZSgwLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRQYWdlKHBhZ2U6IG51bWJlciwgYXBwZW5kOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7IHBhZ2UsIHNpemU6IHRoaXMucGFnZVNpemUgfTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25CYW5rQ29uZmlnPy5kb21haW4pIHtcclxuICAgICAgICAgICAgcGFyYW1zLmRvbWFpbiA9IHRoaXMucXVlc3Rpb25CYW5rQ29uZmlnLmRvbWFpbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25CYW5rQ29uZmlnPy50ZW5hbnQpIHtcclxuICAgICAgICAgICAgcGFyYW1zLnRlbmFudCA9IHRoaXMucXVlc3Rpb25CYW5rQ29uZmlnLnRlbmFudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGVybT8udHJpbSgpKSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5xdWVzdGlvblRleHQgPSB0aGlzLnNlYXJjaFRlcm0udHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFR5cGVDb2RlKSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5xdWVzdGlvblR5cGUgPSB0aGlzLnNlbGVjdGVkVHlwZUNvZGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuZ2V0UXVlc3Rpb25CYW5rUXVlc3Rpb25zKHBhcmFtcykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50czogQXNzZXNzbWVudFF1ZXN0aW9uW10gPSByZXM/LmVsZW1lbnRzIHx8IHJlcz8uY29udGVudCB8fCAoQXJyYXkuaXNBcnJheShyZXMpID8gcmVzIDogW10pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFwcGVuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsUXVlc3Rpb25zID0gWy4uLnRoaXMuYWxsUXVlc3Rpb25zLCAuLi5lbGVtZW50c107XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsUXVlc3Rpb25zID0gZWxlbWVudHM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsRWxlbWVudHMgPSByZXM/LnRvdGFsRWxlbWVudHMgPz8gKGFwcGVuZCA/IHRoaXMuYWxsUXVlc3Rpb25zLmxlbmd0aCA6IGVsZW1lbnRzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc05leHQgPSByZXM/Lmhhc05leHQgIT09IHVuZGVmaW5lZCA/ICEhcmVzLmhhc05leHQgOiAoZWxlbWVudHMubGVuZ3RoID09PSB0aGlzLnBhZ2VTaXplKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFF1ZXN0aW9ucyA9IHRoaXMuYWxsUXVlc3Rpb25zO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZE1vcmUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzTmV4dCAmJiAhdGhpcy5pc0xvYWRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUGFnZSh0aGlzLmN1cnJlbnRQYWdlICsgMSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uU2Nyb2xsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAoIXRhcmdldCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IDE2MDtcclxuICAgICAgICBjb25zdCByZWFjaGVkQm90dG9tID0gdGFyZ2V0LnNjcm9sbEhlaWdodCAtIHRhcmdldC5zY3JvbGxUb3AgLSB0YXJnZXQuY2xpZW50SGVpZ2h0IDw9IHRocmVzaG9sZDtcclxuXHJcbiAgICAgICAgaWYgKHJlYWNoZWRCb3R0b20gJiYgdGhpcy5oYXNOZXh0ICYmICF0aGlzLmlzTG9hZGluZykge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRNb3JlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFwcGx5RmlsdGVycygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkUXVlc3Rpb25zID0gdGhpcy5hbGxRdWVzdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWFyY2hDaGFuZ2UodGVybTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTdWJqZWN0JC5uZXh0KHRlcm0gfHwgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyU2VhcmNoKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGVybSA9ICcnO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xyXG4gICAgICAgIHRoaXMuYWxsUXVlc3Rpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5sb2FkUGFnZSgwLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25UeXBlRmlsdGVyQ2hhbmdlKHR5cGVDb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZUNvZGUgPSB0eXBlQ29kZSB8fCAnJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcclxuICAgICAgICB0aGlzLmFsbFF1ZXN0aW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMubG9hZFBhZ2UoMCwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdFF1aWNrVHlwZUZpbHRlcih0eXBlQ29kZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY29kZSA9IHR5cGVDb2RlIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlQ29kZSA9IHRoaXMuc2VsZWN0ZWRUeXBlQ29kZSA9PT0gY29kZSA/ICcnIDogY29kZTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcclxuICAgICAgICB0aGlzLmFsbFF1ZXN0aW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMubG9hZFBhZ2UoMCwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZVNlbGVjdGlvbihxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFxdWVzdGlvbi5pZCB8fCB0aGlzLmlzQWxyZWFkeUluQXNzZXNzbWVudChxdWVzdGlvbi5pZCkpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRRdWVzdGlvbnMuaGFzKHF1ZXN0aW9uLmlkKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUXVlc3Rpb25zLmRlbGV0ZShxdWVzdGlvbi5pZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFF1ZXN0aW9ucy5zZXQocXVlc3Rpb24uaWQsIHF1ZXN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaXNTZWxlY3RlZChxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhcXVlc3Rpb24uaWQgJiYgdGhpcy5zZWxlY3RlZFF1ZXN0aW9ucy5oYXMocXVlc3Rpb24uaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzQWxyZWFkeUluQXNzZXNzbWVudChxdWVzdGlvbklkOiBudW1iZXIgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISFxdWVzdGlvbklkICYmIHRoaXMuZXhpc3RpbmdRdWVzdGlvbklkcy5oYXMocXVlc3Rpb25JZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQnVsayBzZWxlY3Rpb24gbWV0aG9kc1xyXG4gICAgZ2V0IGVsaWdpYmxlVmlzaWJsZVF1ZXN0aW9ucygpOiBBc3Nlc3NtZW50UXVlc3Rpb25bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRRdWVzdGlvbnMuZmlsdGVyKHEgPT4gcS5pZCAmJiAhdGhpcy5pc0FscmVhZHlJbkFzc2Vzc21lbnQocS5pZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0FsbFZpc2libGVTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9IHRoaXMuZWxpZ2libGVWaXNpYmxlUXVlc3Rpb25zO1xyXG4gICAgICAgIHJldHVybiBlbGlnaWJsZS5sZW5ndGggPiAwICYmIGVsaWdpYmxlLmV2ZXJ5KHEgPT4gdGhpcy5zZWxlY3RlZFF1ZXN0aW9ucy5oYXMocS5pZCEpKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNTb21lVmlzaWJsZVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGVsaWdpYmxlID0gdGhpcy5lbGlnaWJsZVZpc2libGVRdWVzdGlvbnM7XHJcbiAgICAgICAgcmV0dXJuIGVsaWdpYmxlLnNvbWUocSA9PiB0aGlzLnNlbGVjdGVkUXVlc3Rpb25zLmhhcyhxLmlkISkpICYmICF0aGlzLmlzQWxsVmlzaWJsZVNlbGVjdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZVNlbGVjdEFsbFZpc2libGUoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZWxpZ2libGUgPSB0aGlzLmVsaWdpYmxlVmlzaWJsZVF1ZXN0aW9ucztcclxuICAgICAgICBpZiAodGhpcy5pc0FsbFZpc2libGVTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICBlbGlnaWJsZS5mb3JFYWNoKHEgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHEuaWQpIHRoaXMuc2VsZWN0ZWRRdWVzdGlvbnMuZGVsZXRlKHEuaWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlbGlnaWJsZS5mb3JFYWNoKHEgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHEuaWQpIHRoaXMuc2VsZWN0ZWRRdWVzdGlvbnMuc2V0KHEuaWQsIHEpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJBbGxTZWxlY3Rpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFF1ZXN0aW9ucy5jbGVhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE9wdGlvbiBwcmV2aWV3IG1ldGhvZHNcclxuICAgIGhhc09wdGlvbnMocXVlc3Rpb246IEFzc2Vzc21lbnRRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIShxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3QgJiYgcXVlc3Rpb24uZGVmYXVsdE9wdGlvbnNMaXN0Lmxlbmd0aCA+IDApO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUV4cGFuZE9wdGlvbnMocXVlc3Rpb25JZDogbnVtYmVyIHwgdW5kZWZpbmVkLCBldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBpZiAoIXF1ZXN0aW9uSWQpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5leHBhbmRlZFF1ZXN0aW9uSWRzLmhhcyhxdWVzdGlvbklkKSkge1xyXG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkUXVlc3Rpb25JZHMuZGVsZXRlKHF1ZXN0aW9uSWQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWRRdWVzdGlvbklkcy5hZGQocXVlc3Rpb25JZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlzT3B0aW9uc0V4cGFuZGVkKHF1ZXN0aW9uSWQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXF1ZXN0aW9uSWQgJiYgdGhpcy5leHBhbmRlZFF1ZXN0aW9uSWRzLmhhcyhxdWVzdGlvbklkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDYWxjdWxhdGVkIG1ldHJpY3NcclxuICAgIGdldCBzZWxlY3RlZENvdW50KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRRdWVzdGlvbnMuc2l6ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdG90YWxTZWxlY3RlZE1hcmtzKCk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IHRvdGFsID0gMDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUXVlc3Rpb25zLmZvckVhY2gocSA9PiB7XHJcbiAgICAgICAgICAgIHRvdGFsICs9IChxLndlaWdodCB8fCAwKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdG90YWw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHlwZUNvdW50KHR5cGVDb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICghdHlwZUNvZGUpIHJldHVybiB0aGlzLmFsbFF1ZXN0aW9ucy5sZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsUXVlc3Rpb25zLmZpbHRlcihxID0+IHEucXVlc3Rpb25UeXBlPy5jb2RlID09PSB0eXBlQ29kZSkubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENhdGVnb3J5Q2xhc3MocXVlc3Rpb246IEFzc2Vzc21lbnRRdWVzdGlvbik6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgY29kZSA9IHF1ZXN0aW9uPy5xdWVzdGlvblR5cGU/LmNvZGUgfHwgJyc7XHJcbiAgICAgICAgaWYgKGNvZGUuaW5jbHVkZXMoJ09CSkVDVElWRScpIHx8IGNvZGUuaW5jbHVkZXMoJ0NIT0lDRScpIHx8IGNvZGUuaW5jbHVkZXMoJ01DUScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnYmFkZ2Utb2JqZWN0aXZlJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvZGUuaW5jbHVkZXMoJ1NVQkpFQ1RJVkUnKSB8fCBjb2RlLmluY2x1ZGVzKCdFU1NBWScpIHx8IGNvZGUuaW5jbHVkZXMoJ1RFWFQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLXN1YmplY3RpdmUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29kZS5pbmNsdWRlcygnREFURScpIHx8IGNvZGUuaW5jbHVkZXMoJ1RJTUUnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLWRhdGUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJ2JhZGdlLWdlbmVyaWMnO1xyXG4gICAgfVxyXG5cclxuICAgIGltcG9ydFNlbGVjdGVkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFF1ZXN0aW9ucy52YWx1ZXMoKSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBjYXBpdGFsaXplRmlyc3QodGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIXRleHQpIHJldHVybiAnJztcclxuICAgICAgICByZXR1cm4gdGV4dC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJykubWFwKHdvcmQgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkpLmpvaW4oJyAnKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRRdWVzdGlvblR5cGVMYWJlbChxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXBpdGFsaXplRmlyc3QoXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uPy5xdWVzdGlvblR5cGU/LmxhYmVscz8uWzBdPy50ZXh0IHx8IHF1ZXN0aW9uPy5xdWVzdGlvblR5cGU/LmNvZGVcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGltYWdlRXJyb3JIYW5kbGVyKGV2ZW50OiBhbnksIGZpbGVQYXRoOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWV2ZW50Py50YXJnZXQpIHJldHVybjtcclxuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1lcnJvci1oYW5kbGVkJykgPT09ICd0cnVlJykge1xyXG4gICAgICAgICAgICBldmVudC50YXJnZXQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBldmVudC50YXJnZXQuc2V0QXR0cmlidXRlKCdkYXRhLWVycm9yLWhhbmRsZWQnLCAndHJ1ZScpO1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC5zcmMgPSBmaWxlUGF0aDtcclxuICAgIH1cclxuXHJcbiAgICB0cmFja0J5UXVlc3Rpb25JZChpbmRleDogbnVtYmVyLCBxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24/LmlkID8gJ3EnICsgcXVlc3Rpb24uaWQgOiAnaScgKyBpbmRleDtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGgtMTAwIHF1ZXN0aW9uLWJhbmstcGlja2VyXCI+XHJcbiAgICA8IS0tIEhlYWRlcjogQmFjayBBcnJvdyArIFRpdGxlICsgU3VidGl0bGUgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBweC00IHB5LTMgYm9yZGVyLWJvdHRvbSBwaWNrZXItaGVhZGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2UoKVwiIGNsYXNzPVwiYnRuLWljb24tYmFja1wiIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5HT19CQUNLJ10gfHwgJ0dvIEJhY2snXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkdPX0JBQ0snXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9nby1iYWNrLnN2ZycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24taWNvblwiIC8+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibWItMCBmdy1ib2xkIHBpY2tlci10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5JTVBPUlRfRlJPTV9RVUVTVElPTl9CQU5LJ10gfHwgJ0ltcG9ydCBmcm9tIFF1ZXN0aW9uIEJhbmsnfX1cclxuICAgICAgICAgICAgICAgIDwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgcGlja2VyLXN1YnRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5TRUxFQ1RFRF9TRUNUSU9OJ10gfHwgJ1NlbGVjdGVkIFNlY3Rpb24nfX06PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1wcmltYXJ5IGZ3LXNlbWlib2xkIG1zLTFcIiAqbmdJZj1cInRhcmdldFNlY3Rpb25OYW1lXCI+e3t0YXJnZXRTZWN0aW9uTmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zZWNvbmRhcnkgbXMtMVwiICpuZ0lmPVwiIXRhcmdldFNlY3Rpb25OYW1lXCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLklNUE9SVF9RVUVTVElPTlNfSU5UT19ORVdfU0VDVElPTiddIHx8ICdJbXBvcnQgcXVlc3Rpb25zIGludG8gYSBuZXcgc2VjdGlvbid9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFNlYXJjaCAmIEZpbHRlciBDb250cm9scyBEZWNrIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInBpY2tlci1zZWFyY2gtZGVjayBweC00IHB0LTMgcGItMiBib3JkZXItYm90dG9tXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMyBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxyXG4gICAgICAgICAgICA8IS0tIFNlYXJjaCBCb3ggLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQtd3JhcHBlciBmbGV4LWdyb3ctMSBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBzZWFyY2gtaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlNFQVJDSF9RVUVTVElPTiddIHx8ICdTZWFyY2ggUXVlc3Rpb24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWFyY2hUZXJtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2VhcmNoVGVybVwiIChjbGljayk9XCJjbGVhclNlYXJjaCgpXCIgY2xhc3M9XCJzZWFyY2gtY2xlYXItYnRuXCIgYXJpYS1sYWJlbD1cIkNsZWFyIFNlYXJjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uQ0xPU0UnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9jbG9zZS5zdmcnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWljb25cIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBUeXBlIEZpbHRlciBEcm9wZG93biB1c2luZyBhcnJvdy1kb3duLWJsYWNrLnN2ZyAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR5cGUtZmlsdGVyLXdyYXBwZXIgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBmaWx0ZXItc2VsZWN0IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRUeXBlQ29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uVHlwZUZpbHRlckNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BTExfVFlQRVMnXSB8fCAnQWxsIFR5cGVzJ319PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBxdWVzdGlvblR5cGVzXCIgW3ZhbHVlXT1cInR5cGUuY29kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3R5cGUubGFiZWwgfHwgdHlwZS5jb2RlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBTZWN0aW9uIEhlYWRlcjogUXVlc3Rpb24gQ291bnQgJiBTZWxlY3QgQWxsIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHB0LTIgcGItMVwiPlxyXG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0wIGZ3LWJvbGQgcXVlc3Rpb25zLWhlYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgIHt7dG90YWxFbGVtZW50cyB8fCBmaWx0ZXJlZFF1ZXN0aW9ucy5sZW5ndGh9fSB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuUVVFU1RJT05TJ10gfHwgJ1F1ZXN0aW9ucyd9fVxyXG4gICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIG1iLTBcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgc2VsZWN0LWFsbC1jaGVja2JveCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICBpZD1cInNlbGVjdEFsbFF1ZXN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNBbGxWaXNpYmxlU2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImlzU29tZVZpc2libGVTZWxlY3RlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImVsaWdpYmxlVmlzaWJsZVF1ZXN0aW9ucy5sZW5ndGggPT09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsVmlzaWJsZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIHNlbGVjdC1hbGwtbGFiZWwgY3Vyc29yLXBvaW50ZXJcIiBmb3I9XCJzZWxlY3RBbGxRdWVzdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuU0VMRUNUX0FMTF9RVUVTVElPTlMnXSB8fCAnU2VsZWN0IEFsbCBRdWVzdGlvbnMnfX1cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBRdWVzdGlvbnMgVmlld3BvcnQgQm94IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG92ZXJmbG93LWF1dG8gYXNzZXNzbWVudC1jdXN0b20tc2Nyb2xsYmFyLXRodW1iIHAtM1wiIChzY3JvbGwpPVwib25TY3JvbGwoJGV2ZW50KVwiPlxyXG4gICAgICAgIDwhLS0gU2tlbGV0b24gTG9hZGluZyBTdGF0ZSAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNJbml0aWFsTG9hZGluZ1wiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0zIHB5LTFcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaSBvZiBbMSwgMiwgMywgNCwgNV1cIiBjbGFzcz1cInNrZWxldG9uLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJza2VsZXRvbi1saW5lIGxpbmUtZnVsbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNrZWxldG9uLW1ldGFcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gUXVlc3Rpb24gQ2FyZHMgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0luaXRpYWxMb2FkaW5nICYmIGZpbHRlcmVkUXVlc3Rpb25zLmxlbmd0aCA+IDBcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtM1wiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBmaWx0ZXJlZFF1ZXN0aW9uczsgdHJhY2tCeTogdHJhY2tCeVF1ZXN0aW9uSWRcIlxyXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwicXVlc3Rpb24tY2FyZFwiXHJcbiAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNhcmRdPVwiaXNBbHJlYWR5SW5Bc3Nlc3NtZW50KHF1ZXN0aW9uLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkLWNhcmRdPVwiaXNTZWxlY3RlZChxdWVzdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWxlY3Rpb24ocXVlc3Rpb24pXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBNYWluIENhcmQgSGVhZGVyOiBDaGVja2JveCArIFF1ZXN0aW9uIFRleHQgKyAjSUQgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLXN0YXJ0IGdhcC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB0LTEgZmxleC1zaHJpbmstMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGNhcmQtY2hlY2tib3ggY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWQocXVlc3Rpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0FscmVhZHlJbkFzc2Vzc21lbnQocXVlc3Rpb24uaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3Rpb24ocXVlc3Rpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBtaW4tdy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtc3RhcnQganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLTMgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInF1ZXN0aW9uLWJvZHktdGV4dCBmdy1tZWRpdW0gdGV4dC1icmVha1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwicXVlc3Rpb24/LnF1ZXN0aW9uVGV4dD8uWzBdPy50ZXh0XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInF1ZXN0aW9uLWlkLWJhZGdlIGZsZXgtc2hyaW5rLTBcIiAqbmdJZj1cInF1ZXN0aW9uPy5pZFwiPiN7e3F1ZXN0aW9uLmlkfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBCYWRnZXMgUm93OiBUeXBlIFBpbGwsIE1hcmtzIFBpbGwsIE1hbmRhdG9yeSBQaWxsLCBhbmQgQWRkZWQgUGlsbCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gZmxleC13cmFwIGdhcC0yIG10LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtd3JhcCBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUXVlc3Rpb24gVHlwZSBQaWxsIChPcmFuZ2UvQW1iZXIpIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UtcGlsbCBiYWRnZS10eXBlLXBpbGwgcC0yIHJvdW5kZWRcIiAqbmdJZj1cInF1ZXN0aW9uPy5xdWVzdGlvblR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRRdWVzdGlvblR5cGVMYWJlbChxdWVzdGlvbil9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBNYXJrcyBQaWxsIChCbHVlL0luZGlnbykgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZS1waWxsIGJhZGdlLW1hcmtzLXBpbGwgcC0yIHJvdW5kZWRcIiAqbmdJZj1cInF1ZXN0aW9uPy53ZWlnaHQgIT09IHVuZGVmaW5lZCAmJiBxdWVzdGlvbj8ud2VpZ2h0ICE9PSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQVJLUyddIHx8ICdNYXJrcyd9fSB7e3F1ZXN0aW9uLndlaWdodH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE1hbmRhdG9yeSBQaWxsIChHcmVlbikgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZS1waWxsIGJhZGdlLW1hbmRhdG9yeS1waWxsIHAtMiByb3VuZGVkXCIgKm5nSWY9XCJxdWVzdGlvbj8uaXNNYW5kYXRvcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BTkRBVE9SWSddIHx8ICdNYW5kYXRvcnknfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJpZ2h0LWFsaWduZWQgQWxyZWFkeSBBZGRlZCBQaWxsIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0FscmVhZHlJbkFzc2Vzc21lbnQocXVlc3Rpb24uaWQpXCIgY2xhc3M9XCJiYWRnZS1waWxsIGJhZGdlLWFkZGVkLXBpbGwgcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3QtaW5kaWNhdG9yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERFRCddIHx8ICdBZGRlZCd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gT3B0aW9ucyBBY2NvcmRpb24gKGlmIHF1ZXN0aW9uIGhhcyBkZWZhdWx0T3B0aW9uc0xpc3QpIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaGFzT3B0aW9ucyhxdWVzdGlvbilcIiBjbGFzcz1cIm9wdGlvbnMtYWNjb3JkaW9uLXNlY3Rpb24gbXQtMyBwdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRvZ2dsZSBCdXR0b24gUm93IHdpdGggQXJyb3cgJiBEaXZpZGVyIExpbmUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBjdXJzb3ItcG9pbnRlciBvcHRpb25zLXRvZ2dsZS1yb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRXhwYW5kT3B0aW9ucyhxdWVzdGlvbi5pZCwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3B0aW9ucy1jb3VudC10ZXh0IHRleHQtcHJpbWFyeSBmdy1zZW1pYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3F1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdD8ubGVuZ3RoIHx8IDB9fSB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuT1BUSU9OUyddIHx8ICdPcHRpb25zJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpc09wdGlvbnNFeHBhbmRlZChxdWVzdGlvbi5pZCkgPyAoaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkFSUk9XX1VQX0JMVUUnXSB8fCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvYXJyb3ctdXAtYmx1ZS5zdmcnKSA6IChpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uQVJST1dfRE9XTl9CTFVFJ10gfHwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2Fycm93LWRvd24tYmx1ZS5zdmcnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCBpc09wdGlvbnNFeHBhbmRlZChxdWVzdGlvbi5pZCkgPyAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvYXJyb3ctdXAtYmx1ZS5zdmcnIDogJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2Fycm93LWRvd24tYmx1ZS5zdmcnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm9wdGlvbnMtYXJyb3ctaWNvblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnMtZGl2aWRlci1saW5lIGZsZXgtZ3Jvdy0xXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeSB0ZXh0LTEyIG9wdGlvbnMtaGludC10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKAoiB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ0xJQ0tfVE9fVklFVyddIHx8ICdDbGljayB0byB2aWV3J319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBFeHBhbmRlZCBPcHRpb25zIExpc3QgKFJhZGlvIG9wdGlvbnMpIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzT3B0aW9uc0V4cGFuZGVkKHF1ZXN0aW9uLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwib3B0aW9ucy1saXN0LWNvbnRhaW5lciBkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTIgbXQtMyBwcy0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdCBvZiBxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIG9wdGlvbi1pdGVtLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdGlvbi1yYWRpby1jaXJjbGVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3B0aW9uLXRleHQgdGV4dC1icmVha1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcHQub3B0aW9ucz8ub3B0aW9uTmFtZT8uWzBdPy50ZXh0IHx8IG9wdC5vcHRpb25zPy5vcHRpb25Db2RlIHx8ICdPcHRpb24nfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBFbXB0eSBTdGF0ZTogTm8gbWF0Y2hpbmcgZmlsdGVyIHJlc3VsdHMgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0luaXRpYWxMb2FkaW5nICYmIGZpbHRlcmVkUXVlc3Rpb25zLmxlbmd0aCA9PT0gMCAmJiBhbGxRdWVzdGlvbnMubGVuZ3RoID4gMFwiXHJcbiAgICAgICAgICAgICBjbGFzcz1cImVtcHR5LXN0YXRlLWJveCBweS01IHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiZW1wdHktc3RhdGUtdGl0bGUgZnctc2VtaWJvbGQgdGV4dC0xNSBtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTk9fTUFUQ0hJTkdfUVVFU1RJT05TJ10gfHwgJ05vIG1hdGNoaW5nIHF1ZXN0aW9ucyBmb3VuZCd9fVxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiZW1wdHktc3RhdGUtZGVzYyB0ZXh0LXNlY29uZGFyeSB0ZXh0LTEzIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5OT19NQVRDSElOR19RVUVTVElPTlNfREVTQyddIHx8ICdUcnkgYWRqdXN0aW5nIHlvdXIgc2VhcmNoIHRlcm1zIG9yIGNsZWFyaW5nIHNlbGVjdGVkIHF1ZXN0aW9uIHR5cGUgZmlsdGVycy4nfX1cclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjbGVhclNlYXJjaCgpOyBzZWxlY3RlZFR5cGVDb2RlID0gJyc7IGFwcGx5RmlsdGVycygpO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tc20gcHgtM1wiPlxyXG4gICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNMRUFSX0ZJTFRFUlMnXSB8fCAnQ2xlYXIgRmlsdGVycyd9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBFbXB0eSBTdGF0ZTogUXVlc3Rpb24gYmFuayBpcyBlbXB0eSAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzSW5pdGlhbExvYWRpbmcgJiYgYWxsUXVlc3Rpb25zLmxlbmd0aCA9PT0gMFwiXHJcbiAgICAgICAgICAgICBjbGFzcz1cImVtcHR5LXN0YXRlLWJveCBweS01IHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uTk9fUVVFU1RJT05TJ11cIiBjbGFzcz1cImVtcHR5LXN0YXRlLWltZyBtYi0zXCJcclxuICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvbm8tcXVlc3Rpb25zLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJlbXB0eS1zdGF0ZS10aXRsZSBmdy1zZW1pYm9sZCB0ZXh0LTE1IG1iLTFcIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5OT19RVUVTVElPTlNfSU5fQkFOSyddIHx8ICdObyBRdWVzdGlvbnMgaW4gQmFuayEnfX1cclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cImVtcHR5LXN0YXRlLWRlc2MgdGV4dC1zZWNvbmRhcnkgdGV4dC0xMyBtYi0wXCI+XHJcbiAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTk9fUVVFU1RJT05TX0lOX0JBTktfREVTQyddIHx8ICdDcmVhdGUgc3RhbmRhbG9uZSBxdWVzdGlvbnMgaW4gdGhlIFF1ZXN0aW9uIEJhbmsgdG8gcmV1c2UgdGhlbSBoZXJlLid9fVxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gSW5maW5pdGUgU2Nyb2xsIEJvdHRvbSBMb2FkZXIgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZyAmJiAhaXNJbml0aWFsTG9hZGluZ1wiIGNsYXNzPVwicHktMyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+TG9hZGluZy4uLjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zZWNvbmRhcnkgdGV4dC0xM1wiPlxyXG4gICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkxPQURJTkdfTU9SRV9RVUVTVElPTlMnXSB8fCAnTG9hZGluZyBtb3JlIHF1ZXN0aW9ucy4uLid9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gRW5kIG9mIGxpc3QgcmVhY2hlZCAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWhhc05leHQgJiYgYWxsUXVlc3Rpb25zLmxlbmd0aCA+IDAgJiYgIWlzTG9hZGluZ1wiIGNsYXNzPVwidGV4dC1jZW50ZXIgcHktMyB0ZXh0LXNlY29uZGFyeSB0ZXh0LTEyXCI+XHJcbiAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BTExfUVVFU1RJT05TX0xPQURFRCddIHx8ICdBbGwgcXVlc3Rpb25zIGxvYWRlZCd9fSAoe3t0b3RhbEVsZW1lbnRzfX0pXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFN0aWNreSBGb290ZXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHgtNCBweS0zIGJvcmRlci10b3AgcGlja2VyLWZvb3RlciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGJnLXdoaXRlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1zdW1tYXJ5XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zZWNvbmRhcnkgdGV4dC0xM1wiICpuZ0lmPVwic2VsZWN0ZWRDb3VudCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk5PX1FVRVNUSU9OU19TRUxFQ1RFRCddIHx8ICdObyBxdWVzdGlvbnMgc2VsZWN0ZWQnfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc2Vjb25kYXJ5IHRleHQtMTNcIiAqbmdJZj1cInNlbGVjdGVkQ291bnQgPiAwXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPVwidGV4dC1wcmltYXJ5XCI+e3tzZWxlY3RlZENvdW50fX08L3N0cm9uZz4ge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlFVRVNUSU9OU19TRUxFQ1RFRCddIHx8ICdxdWVzdGlvbnMgc2VsZWN0ZWQnfX1cclxuICAgICAgICAgICAgICAgICZtaWRkb3Q7IDxzdHJvbmcgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57e3RvdGFsU2VsZWN0ZWRNYXJrc319PC9zdHJvbmc+IHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQVJLUyddIHx8ICdNYXJrcyd9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2UoKVwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBweC00IHB5LTIgZm9vdGVyLWJ0blwiPlxyXG4gICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNBTkNFTCddIHx8ICdDYW5jZWwnfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImltcG9ydFNlbGVjdGVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWxlY3RlZENvdW50ID09PSAwXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBweC00IHB5LTIgZm9vdGVyLWJ0biBmb290ZXItYnRuLWltcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLklNUE9SVF9DT1VOVCddIHx8ICdJbXBvcnQnfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|