commons-assessment 12.1.2-dev.2 → 12.1.2

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.
Files changed (41) hide show
  1. package/bundles/commons-assessment.umd.js +162 -25
  2. package/bundles/commons-assessment.umd.js.map +1 -1
  3. package/esm2015/lib/modules/assessment-maker/assessment-maker.component.js +2 -2
  4. package/esm2015/lib/modules/assessment-maker/components/add-edit-section-introduction/add-edit-section-introduction.component.js +1 -1
  5. package/esm2015/lib/modules/assessment-maker/components/assessment-builder/assessment-builder.component.js +66 -2
  6. package/esm2015/lib/modules/assessment-maker/components/question-bank-picker/question-bank-picker.component.js +2 -2
  7. package/esm2015/lib/modules/assessment-maker/components/question-details/question-details.component.js +2 -2
  8. package/esm2015/lib/modules/assessment-maker/services/assessment-maker.service.js +18 -3
  9. package/esm2015/lib/modules/assessment-taker/assessment-taker.component.js +14 -2
  10. package/esm2015/lib/modules/assessment-taker/components/proctoring-consent/proctoring-consent.component.js +14 -2
  11. package/esm2015/lib/modules/assessment-taker/components/proctoring-result/proctoring-result.component.js +2 -2
  12. package/esm2015/lib/modules/assessment-taker/components/question-type-date-picker/question-type-date-picker.component.js +1 -1
  13. package/esm2015/lib/modules/assessment-taker/components/question-type-editor/question-type-editor.component.js +1 -1
  14. package/esm2015/lib/modules/assessment-taker/components/question-type-file-upload/question-type-file-upload.component.js +1 -1
  15. package/esm2015/lib/modules/assessment-taker/components/question-type-long/question-type-long.component.js +2 -2
  16. package/esm2015/lib/modules/assessment-taker/components/question-type-multiselect/question-type-multiselect.component.js +1 -1
  17. package/esm2015/lib/modules/assessment-taker/components/question-type-objective/question-type-objective.component.js +1 -1
  18. package/esm2015/lib/modules/assessment-taker/components/question-type-preference/question-type-preference.component.js +1 -1
  19. package/esm2015/lib/modules/assessment-taker/components/question-type-short/question-type-short.component.js +14 -2
  20. package/esm2015/lib/modules/assessment-taker/components/section-instructions/section-instructions.component.js +1 -1
  21. package/esm2015/lib/modules/assessment-taker/services/assessment-taker.service.js +15 -2
  22. package/esm2015/lib/modules/question-bank/question-bank.component.js +2 -2
  23. package/esm2015/lib/shared/components/confirmation-dialog/confirmation-dialog.component.js +1 -1
  24. package/esm2015/lib/shared/components/skill-allocation/skill-allocation.component.js +1 -1
  25. package/esm2015/lib/shared/controllers.js +2 -2
  26. package/esm2015/lib/shared/pipes/order-by.pipe.js +4 -3
  27. package/fesm2015/commons-assessment.js +153 -27
  28. package/fesm2015/commons-assessment.js.map +1 -1
  29. package/lib/modules/assessment-maker/components/assessment-builder/assessment-builder.component.d.ts +9 -0
  30. package/lib/modules/assessment-maker/services/assessment-maker.service.d.ts +3 -1
  31. package/lib/modules/assessment-taker/assessment-taker.component.d.ts +3 -0
  32. package/lib/modules/assessment-taker/components/question-type-short/question-type-short.component.d.ts +3 -0
  33. package/lib/modules/assessment-taker/services/assessment-taker.service.d.ts +18 -16
  34. package/package.json +1 -1
  35. package/src/lib/assets/images/info.svg +2 -2
  36. package/src/lib/assets/images/lock.svg +3 -0
  37. package/src/lib/assets/json/imageConfig.json +2 -1
  38. package/src/lib/assets/json/labelConfig.json +10 -2
  39. package/src/lib/assets/theme/_theme.global.scss +1 -0
  40. package/src/lib/assets/theme/styles.global.scss +12 -0
  41. package/src/lib/assets/theme/styles.scss +5 -0
@@ -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 <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 &middot; <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=\"d-inline-flex align-items-center justify-content-center rounded-circle border-0 bg-transparent cursor-pointer 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\" [attr.aria-label]=\"labelConfig['COMMONS_ASSESSMENT.LABEL.CLEAR_SEARCH'] || '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 assessment-text-semibold-15 assessment-text-grey-ten\">\r\n {{totalElements || filteredQuestions.length}} {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTIONS'] || 'Questions'}}\r\n </h5>\r\n <div class=\"d-flex align-items-center gap-2 mb-0\">\r\n <input class=\"form-check-input cursor-pointer m-0\"\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=\"assessment-text-medium-15 assessment-text-grey-nine cursor-pointer user-select-none mb-0\" 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=\"assessment-text-grey-seven assessment-text-medium-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 assessment-text-semibold-15 assessment-text-grey-ten 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 assessment-text-grey-seven assessment-text-medium-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 assessment-text-semibold-15 assessment-text-grey-ten 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 assessment-text-grey-seven assessment-text-medium-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\">{{ labelConfig['COMMONS_ASSESSMENT.LABEL.LOADING'] || 'Loading...' }}</span>\r\n </div>\r\n <span class=\"assessment-text-grey-seven assessment-text-medium-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 assessment-text-grey-seven assessment-text-medium-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=\"assessment-text-grey-seven assessment-text-medium-13\" *ngIf=\"selectedCount === 0\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.NO_QUESTIONS_SELECTED'] || 'No questions selected'}}\r\n </span>\r\n <span class=\"assessment-text-grey-seven assessment-text-medium-13\" *ngIf=\"selectedCount > 0\">\r\n <strong class=\"text-primary\">{{selectedCount}}</strong> {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTIONS_SELECTED'] || 'questions selected'}}\r\n &middot; <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: ["@charset \"UTF-8\";.assessment-text-grey-ten{color:var(--assessment-grey-ten)!important}.assessment-bg-grey-ten{background-color:var(--assessment-grey-ten)!important}.assessment-text-grey-nine{color:var(--assessment-grey-nine)!important}.assessment-bg-grey-nine{background-color:var(--assessment-grey-nine)!important}.assessment-text-grey-eight{color:var(--assessment-grey-eight)!important}.assessment-bg-grey-eight{background-color:var(--assessment-grey-eight)!important}.assessment-text-grey-seven{color:var(--assessment-grey-seven)!important}.assessment-bg-grey-seven{background-color:var(--assessment-grey-seven)!important}.assessment-text-grey-six{color:var(--assessment-grey-six)!important}.assessment-bg-grey-six{background-color:var(--assessment-grey-six)!important}.assessment-text-grey-five{color:var(--assessment-grey-five)!important}.assessment-bg-grey-five{background-color:var(--assessment-grey-five)!important}.assessment-text-grey-four{color:var(--assessment-grey-four)!important}.assessment-bg-grey-four{background-color:var(--assessment-grey-four)!important}.assessment-text-grey-three{color:var(--assessment-grey-three)!important}.assessment-bg-grey-three{background-color:var(--assessment-grey-three)!important}.assessment-text-grey-two{color:var(--assessment-grey-two)!important}.assessment-bg-grey-two{background-color:var(--assessment-grey-two)!important}.assessment-text-grey-one{color:var(--assessment-grey-one)!important}.assessment-bg-grey-one{background-color:var(--assessment-grey-one)!important}.assessment-text-white{color:var(--assessment-white)!important}.assessment-bg-white{background-color:var(--assessment-white)!important}.assessment-text-black{color:var(--assessment-black)!important}.assessment-bg-black{background-color:var(--assessment-black)!important}.assessment-text-danger{color:var(--assessment-danger)!important}.assessment-bg-danger{background-color:var(--assessment-danger)!important}.assessment-text-danger-bg{color:var(--assessment-danger-bg)!important}.assessment-bg-danger-bg{background-color:var(--assessment-danger-bg)!important}.assessment-text-success{color:var(--assessment-success)!important}.assessment-bg-success{background-color:var(--assessment-success)!important}.assessment-text-success-bg{color:var(--assessment-success-bg)!important}.assessment-bg-success-bg{background-color:var(--assessment-success-bg)!important}.assessment-text-warning{color:var(--assessment-warning)!important}.assessment-bg-warning{background-color:var(--assessment-warning)!important}.assessment-text-warning-bg{color:var(--assessment-warning-bg)!important}.assessment-bg-warning-bg{background-color:var(--assessment-warning-bg)!important}.assessment-text-primary-one{color:var(--assessment-primary-one)!important}.assessment-bg-primary-one{background-color:var(--assessment-primary-one)!important}.assessment-text-primary-four{color:var(--assessment-primary-four)!important}.assessment-bg-primary-four{background-color:var(--assessment-primary-four)!important}.assessment-text-palette-EDF3FD{color:var(--assessment-palette-EDF3FD)!important}.assessment-bg-palette-EDF3FD{background-color:var(--assessment-palette-EDF3FD)!important}.assessment-text-palette-C8DAF9{color:var(--assessment-palette-C8DAF9)!important}.assessment-bg-palette-C8DAF9{background-color:var(--assessment-palette-C8DAF9)!important}.assessment-text-palette-ADC9F6{color:var(--assessment-palette-ADC9F6)!important}.assessment-bg-palette-ADC9F6{background-color:var(--assessment-palette-ADC9F6)!important}.assessment-text-palette-FEF9F1{color:var(--assessment-palette-FEF9F1)!important}.assessment-bg-palette-FEF9F1{background-color:var(--assessment-palette-FEF9F1)!important}.assessment-text-palette-F9DAA6{color:var(--assessment-palette-F9DAA6)!important}.assessment-bg-palette-F9DAA6{background-color:var(--assessment-palette-F9DAA6)!important}.assessment-text-palette-E8F7F0{color:var(--assessment-palette-E8F7F0)!important}.assessment-bg-palette-E8F7F0{background-color:var(--assessment-palette-E8F7F0)!important}.assessment-text-palette-B7E7CF{color:var(--assessment-palette-B7E7CF)!important}.assessment-bg-palette-B7E7CF{background-color:var(--assessment-palette-B7E7CF)!important}.assessment-text-palette-FEF1E8{color:var(--assessment-palette-FEF1E8)!important}.assessment-bg-palette-FEF1E8{background-color:var(--assessment-palette-FEF1E8)!important}.assessment-text-palette-FAD2B9{color:var(--assessment-palette-FAD2B9)!important}.assessment-bg-palette-FAD2B9{background-color:var(--assessment-palette-FAD2B9)!important}.assessment-box-shadow-one{box-shadow:var(--assessment-box-shadow-one)!important}.assessment-border-radius-one{border-radius:var(--assessment-border-radius-one)!important}.assessment-border-radius-two{border-radius:var(--assessment-border-radius-two)!important}.assessment-border-radius-three{border-radius:var(--assessment-border-radius-three)!important}.assessment-border-radius-four{border-radius:var(--assessment-border-radius-four)!important}.assessment-border-radius-five{border-radius:var(--assessment-border-radius-five)!important}.assessment-border-radius-six{border-radius:var(--assessment-border-radius-six)!important}.assessment-input-border-one{border:var(--assessment-input-border-one)!important}.assessment-input-border-invalid{border:var(--assessment-input-border-invalid)!important}.assessment-input-focus-border{border:var(--assessment-input-focus-border)!important}.assessment-border-two{border:var(--assessment-border-two)!important}.assessment-card-border{border:var(--assessment-card-border)!important}.assessment-tooltip-border{border:var(--assessment-tooltip-border)!important}.assessment-box-shadow-tooltip{box-shadow:var(--assessment-box-shadow-tooltip)!important}.assessment-input-focus-box-shadow{box-shadow:var(--assessment-input-focus-box-shadow)!important}.assessment-button-padding{padding:var(--assessment-button-padding)!important}.assessment-button-padding-large{padding:var(--assessment-button-padding-large)!important}.assessment-input-padding{padding:var(--assessment-input-padding)!important}.assessment-text-font-family{color:var(--assessment-font-family)!important}.assessment-bg-font-family{background-color:var(--assessment-font-family)!important}.assessment-text-regular-12{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-semibold-12{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-medium-11{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-10{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.42rem + .2vw);line-height:calc(.72rem + .2vw)}.assessment-text-regular-11{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-12{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-regular-13{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-semibold-13{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-13{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-14{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw)!important;line-height:calc(1.2rem + .2vw)!important}.assessment-text-semibold-14{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-regular-15{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.4rem + .1vw)}.assessment-text-medium-15{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-15{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-16{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-16{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-18{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}.assessment-text-semibold-18{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}@media (min-height: 100vw) and (orientation: portrait){.assessment-text-medium-18,.assessment-text-semibold-18{font-size:calc(1rem + .1vh)!important;line-height:calc(1.6rem + .1vh)!important}.assessment-text-medium-16,.assessment-text-semibold-16{font-size:calc(.9rem + .2vh)!important;line-height:calc(1.4rem + .2vh)!important}.assessment-text-regular-15,.assessment-text-semibold-15{font-size:calc(.8rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-15{font-size:calc(.82rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-12,.assessment-text-regular-12,.assessment-text-semibold-12{font-size:calc(.5rem + .4vh);line-height:calc(.8rem + .4vh)}.assessment-text-medium-14,.assessment-text-semibold-14{font-size:calc(.8rem + .1vh)!important;line-height:calc(1.2rem + .2vh)!important}.assessment-text-regular-13,.assessment-text-medium-13,.assessment-text-semibold-13{font-size:calc(.7rem + .2vh)!important;line-height:calc(1rem + .3vh)!important}.assessment-text-regular-11,.assessment-text-medium-11{font-size:calc(.5rem + .2vh)!important;line-height:calc(.8rem + .2vh)!important}.assessment-text-medium-10{font-size:calc(.45rem + .2vh)!important;line-height:calc(.72rem + .2vh)!important}}.assessment-btn-primary{background-color:var(--assessment-primary-one);color:var(--assessment-white);border:.064rem solid var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two)}.assessment-btn-primary-transparent{background-color:var(--assessment-white);color:var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two);border:.064rem solid var(--assessment-primary-one)}.assessment-zoom-animation{transition:transform .2s ease;transform:translateZ(0);text-rendering:optimizeLegibility}.assessment-zoom-animation:hover{transform:scale(1.03)}.assessment-zoom-animation:active{transform:scale(1)}.assessment-zoom-animation:disabled{transform:none!important}.change-direction{transform:rotate(180deg);transition:.3s ease-out}.change-direction-reverse{transform:rotate(0);transition:.3s ease-out}.outline-0{outline:none}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.action-icon{width:1.2rem}.mat-menu-item,.mat-mdc-menu-item{height:inherit;min-height:unset;--mat-menu-item-label-text-font: var(--assessment-font-family) !important;--mat-menu-item-label-text-size: 14px !important;--mat-menu-item-label-text-weight: 600 !important;--mat-menu-item-label-text-line-height: inherit !important}.skill-chip{width:-moz-fit-content;width:fit-content;background:var(--assessment-palette-EDF3FD);border:.064rem solid var(--assessment-palette-C8DAF9)}.assessment-form-check-input-primary-one{min-height:unset}.assessment-form-check-input-primary-one .form-check-input{width:1rem;height:1rem}.assessment-form-check-input-primary-one .form-check-input:checked{background-color:var(--assessment-primary-one);color:var(--assessment-primary-one)}.assessment-form-check-input-primary-one .form-check-input:disabled{opacity:.8}.form-check-input:checked{background-color:var(--assessment-primary-one);border-color:var(--assessment-primary-one)}.form-check-input:focus{border-color:var(--assessment-primary-one);box-shadow:none}.break-text{word-break:break-word;text-wrap:wrap}.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{width:2rem;height:2rem;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 .form-check-input{width:1.15rem;height:1.15rem;margin:0;float:none;flex-shrink:0;vertical-align:middle;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:var(--assessment-palette-FEF9F1, #FEF9F1);color:var(--assessment-warning, #e39a2b);border:1px solid var(--assessment-palette-F9DAA6, #F9DAA6)}.question-bank-picker .badge-marks-pill{background-color:var(--assessment-palette-EDF3FD, #EDF3FD);color:var(--assessment-primary-one, #467DD6);border:1px solid var(--assessment-palette-C8DAF9, #C8DAF9)}.question-bank-picker .badge-mandatory-pill{background-color:var(--assessment-palette-E8F7F0, #E8F7F0);color:var(--assessment-success, #2e9c6a);border:1px solid var(--assessment-palette-B7E7CF, #B7E7CF)}.question-bank-picker .badge-added-pill{background-color:var(--assessment-palette-E8F7F0, #E8F7F0);color:var(--assessment-success, #2e9c6a);border:1px solid var(--assessment-palette-B7E7CF, #B7E7CF);font-weight:600}.question-bank-picker .badge-added-pill .dot-indicator{width:6px;height:6px;border-radius:50%;background-color:var(--assessment-success, #2e9c6a);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}\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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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==
276
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb24tYmFuay1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9ucy1hc3Nlc3NtZW50L3NyYy9saWIvbW9kdWxlcy9hc3Nlc3NtZW50LW1ha2VyL2NvbXBvbmVudHMvcXVlc3Rpb24tYmFuay1waWNrZXIvcXVlc3Rpb24tYmFuay1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9ucy1hc3Nlc3NtZW50L3NyYy9saWIvbW9kdWxlcy9hc3Nlc3NtZW50LW1ha2VyL2NvbXBvbmVudHMvcXVlc3Rpb24tYmFuay1waWNrZXIvcXVlc3Rpb24tYmFuay1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFtQi9FLE1BQU0sT0FBTywyQkFBMkI7SUE2QnBDLFlBQ1ksc0JBQThDLEVBQy9DLFNBQW9ELEVBQzNCLFVBQXdDO1FBRmhFLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDL0MsY0FBUyxHQUFULFNBQVMsQ0FBMkM7UUFDM0IsZUFBVSxHQUFWLFVBQVUsQ0FBOEI7UUEvQjVFLGdCQUFXLEdBQThCLEVBQUUsQ0FBQztRQUM1QyxnQkFBVyxHQUE4QixFQUFFLENBQUM7UUFDNUMsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBQ25DLHdCQUFtQixHQUFnQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FB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LENBQUMsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztJQUMxRCxDQUFDOzt5SEExUlEsMkJBQTJCLG9GQWdDeEIsZUFBZTs2R0FoQ2xCLDJCQUEyQixnRUN0QnhDLG82ZkE2T0E7NEZEdk5hLDJCQUEyQjtrQkFMdkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxXQUFXLEVBQUUsdUNBQXVDO29CQUNwRCxTQUFTLEVBQUUsQ0FBQyx1Q0FBdUMsQ0FBQztpQkFDdkQ7OzBCQWlDUSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUXVlc3Rpb25CYW5rQ29uZmlnLCBRdWVzdGlvblR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9hc3Nlc3NtZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRRdWVzdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRNYWtlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hc3Nlc3NtZW50LW1ha2VyLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBRdWVzdGlvbkJhbmtQaWNrZXJEaWFsb2dEYXRhIHtcclxuICAgIHF1ZXN0aW9uQmFua0NvbmZpZzogUXVlc3Rpb25CYW5rQ29uZmlnO1xyXG4gICAgZXhpc3RpbmdRdWVzdGlvbklkczogU2V0PG51bWJlcj47XHJcbiAgICBsYWJlbENvbmZpZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICAgIGltYWdlQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gICAgcXVlc3Rpb25UeXBlczogUXVlc3Rpb25UeXBlW107XHJcbiAgICB0YXJnZXRTZWN0aW9uTmFtZT86IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1xdWVzdGlvbi1iYW5rLXBpY2tlcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcXVlc3Rpb24tYmFuay1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vcXVlc3Rpb24tYmFuay1waWNrZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25CYW5rUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgbGFiZWxDb25maWc6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICAgIGltYWdlQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgICBxdWVzdGlvblR5cGVzOiBRdWVzdGlvblR5cGVbXSA9IFtdO1xyXG4gICAgZXhpc3RpbmdRdWVzdGlvbklkczogU2V0PG51bWJlcj4gPSBuZXcgU2V0KCk7XHJcbiAgICB0YXJnZXRTZWN0aW9uTmFtZTogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgLy8gUGFnaW5hdGlvbiAmIEluZmluaXRlIFNjcm9sbFxyXG4gICAgYWxsUXVlc3Rpb25zOiBBc3Nlc3NtZW50UXVlc3Rpb25bXSA9IFtdO1xyXG4gICAgZmlsdGVyZWRRdWVzdGlvbnM6IEFzc2Vzc21lbnRRdWVzdGlvbltdID0gW107XHJcbiAgICBjdXJyZW50UGFnZSA9IDA7XHJcbiAgICBwYWdlU2l6ZSA9IDEwMDtcclxuICAgIHRvdGFsRWxlbWVudHMgPSAwO1xyXG4gICAgaGFzTmV4dCA9IGZhbHNlO1xyXG4gICAgaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICBpc0luaXRpYWxMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBTZXJ2ZXItc2lkZSBzZWFyY2ggJiBmaWx0ZXJzXHJcbiAgICBzZWFyY2hUZXJtID0gJyc7XHJcbiAgICBzZWxlY3RlZFR5cGVDb2RlID0gJyc7XHJcblxyXG4gICAgLy8gTXVsdGktc2VsZWN0aW9uICYgRXhwYW5kZWQgT3B0aW9uc1xyXG4gICAgc2VsZWN0ZWRRdWVzdGlvbnMgPSBuZXcgTWFwPG51bWJlciwgQXNzZXNzbWVudFF1ZXN0aW9uPigpO1xyXG4gICAgZXhwYW5kZWRRdWVzdGlvbklkcyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xyXG5cclxuICAgIHByaXZhdGUgcXVlc3Rpb25CYW5rQ29uZmlnOiBRdWVzdGlvbkJhbmtDb25maWcgPSB7fTtcclxuICAgIHByaXZhdGUgc2VhcmNoU3ViamVjdCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGFzc2Vzc21lbnRNYWtlclNlcnZpY2U6IEFzc2Vzc21lbnRNYWtlclNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFF1ZXN0aW9uQmFua1BpY2tlckNvbXBvbmVudD4sXHJcbiAgICAgICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkaWFsb2dEYXRhOiBRdWVzdGlvbkJhbmtQaWNrZXJEaWFsb2dEYXRhXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5sYWJlbENvbmZpZyA9IHRoaXMuZGlhbG9nRGF0YT8ubGFiZWxDb25maWcgfHwge307XHJcbiAgICAgICAgdGhpcy5pbWFnZUNvbmZpZyA9IHRoaXMuZGlhbG9nRGF0YT8uaW1hZ2VDb25maWcgfHwge307XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvblR5cGVzID0gdGhpcy5kaWFsb2dEYXRhPy5xdWVzdGlvblR5cGVzIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuZXhpc3RpbmdRdWVzdGlvbklkcyA9IHRoaXMuZGlhbG9nRGF0YT8uZXhpc3RpbmdRdWVzdGlvbklkcyB8fCBuZXcgU2V0KCk7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmtDb25maWcgPSB0aGlzLmRpYWxvZ0RhdGE/LnF1ZXN0aW9uQmFua0NvbmZpZyB8fCB7fTtcclxuICAgICAgICB0aGlzLnRhcmdldFNlY3Rpb25OYW1lID0gdGhpcy5kaWFsb2dEYXRhPy50YXJnZXRTZWN0aW9uTmFtZSB8fCAnJztcclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hTdWJqZWN0JC5waXBlKFxyXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoMzUwKSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXHJcbiAgICAgICAgKS5zdWJzY3JpYmUodGVybSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVGVybSA9IHRlcm07XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmFsbFF1ZXN0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRQYWdlKDAsIGZhbHNlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkUGFnZSgwLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRQYWdlKHBhZ2U6IG51bWJlciwgYXBwZW5kOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7IHBhZ2UsIHNpemU6IHRoaXMucGFnZVNpemUgfTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25CYW5rQ29uZmlnPy5kb21haW4pIHtcclxuICAgICAgICAgICAgcGFyYW1zLmRvbWFpbiA9IHRoaXMucXVlc3Rpb25CYW5rQ29uZmlnLmRvbWFpbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25CYW5rQ29uZmlnPy50ZW5hbnQpIHtcclxuICAgICAgICAgICAgcGFyYW1zLnRlbmFudCA9IHRoaXMucXVlc3Rpb25CYW5rQ29uZmlnLnRlbmFudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGVybT8udHJpbSgpKSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5xdWVzdGlvblRleHQgPSB0aGlzLnNlYXJjaFRlcm0udHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFR5cGVDb2RlKSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5xdWVzdGlvblR5cGUgPSB0aGlzLnNlbGVjdGVkVHlwZUNvZGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuZ2V0UXVlc3Rpb25CYW5rUXVlc3Rpb25zKHBhcmFtcykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50czogQXNzZXNzbWVudFF1ZXN0aW9uW10gPSByZXM/LmVsZW1lbnRzIHx8IHJlcz8uY29udGVudCB8fCAoQXJyYXkuaXNBcnJheShyZXMpID8gcmVzIDogW10pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFwcGVuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsUXVlc3Rpb25zID0gWy4uLnRoaXMuYWxsUXVlc3Rpb25zLCAuLi5lbGVtZW50c107XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsUXVlc3Rpb25zID0gZWxlbWVudHM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsRWxlbWVudHMgPSByZXM/LnRvdGFsRWxlbWVudHMgPz8gKGFwcGVuZCA/IHRoaXMuYWxsUXVlc3Rpb25zLmxlbmd0aCA6IGVsZW1lbnRzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc05leHQgPSByZXM/Lmhhc05leHQgIT09IHVuZGVmaW5lZCA/ICEhcmVzLmhhc05leHQgOiAoZWxlbWVudHMubGVuZ3RoID09PSB0aGlzLnBhZ2VTaXplKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFF1ZXN0aW9ucyA9IHRoaXMuYWxsUXVlc3Rpb25zO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZE1vcmUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzTmV4dCAmJiAhdGhpcy5pc0xvYWRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUGFnZSh0aGlzLmN1cnJlbnRQYWdlICsgMSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uU2Nyb2xsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAoIXRhcmdldCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IDE2MDtcclxuICAgICAgICBjb25zdCByZWFjaGVkQm90dG9tID0gdGFyZ2V0LnNjcm9sbEhlaWdodCAtIHRhcmdldC5zY3JvbGxUb3AgLSB0YXJnZXQuY2xpZW50SGVpZ2h0IDw9IHRocmVzaG9sZDtcclxuXHJcbiAgICAgICAgaWYgKHJlYWNoZWRCb3R0b20gJiYgdGhpcy5oYXNOZXh0ICYmICF0aGlzLmlzTG9hZGluZykge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRNb3JlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFwcGx5RmlsdGVycygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkUXVlc3Rpb25zID0gdGhpcy5hbGxRdWVzdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWFyY2hDaGFuZ2UodGVybTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTdWJqZWN0JC5uZXh0KHRlcm0gfHwgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyU2VhcmNoKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGVybSA9ICcnO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xyXG4gICAgICAgIHRoaXMuYWxsUXVlc3Rpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5sb2FkUGFnZSgwLCBmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25UeXBlRmlsdGVyQ2hhbmdlKHR5cGVDb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZUNvZGUgPSB0eXBlQ29kZSB8fCAnJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcclxuICAgICAgICB0aGlzLmFsbFF1ZXN0aW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMubG9hZFBhZ2UoMCwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdFF1aWNrVHlwZUZpbHRlcih0eXBlQ29kZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY29kZSA9IHR5cGVDb2RlIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlQ29kZSA9IHRoaXMuc2VsZWN0ZWRUeXBlQ29kZSA9PT0gY29kZSA/ICcnIDogY29kZTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcclxuICAgICAgICB0aGlzLmFsbFF1ZXN0aW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMubG9hZFBhZ2UoMCwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZVNlbGVjdGlvbihxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFxdWVzdGlvbi5pZCB8fCB0aGlzLmlzQWxyZWFkeUluQXNzZXNzbWVudChxdWVzdGlvbi5pZCkpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRRdWVzdGlvbnMuaGFzKHF1ZXN0aW9uLmlkKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUXVlc3Rpb25zLmRlbGV0ZShxdWVzdGlvbi5pZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFF1ZXN0aW9ucy5zZXQocXVlc3Rpb24uaWQsIHF1ZXN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaXNTZWxlY3RlZChxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhcXVlc3Rpb24uaWQgJiYgdGhpcy5zZWxlY3RlZFF1ZXN0aW9ucy5oYXMocXVlc3Rpb24uaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzQWxyZWFkeUluQXNzZXNzbWVudChxdWVzdGlvbklkOiBudW1iZXIgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISFxdWVzdGlvbklkICYmIHRoaXMuZXhpc3RpbmdRdWVzdGlvbklkcy5oYXMocXVlc3Rpb25JZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQnVsayBzZWxlY3Rpb24gbWV0aG9kc1xyXG4gICAgZ2V0IGVsaWdpYmxlVmlzaWJsZVF1ZXN0aW9ucygpOiBBc3Nlc3NtZW50UXVlc3Rpb25bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRRdWVzdGlvbnMuZmlsdGVyKHEgPT4gcS5pZCAmJiAhdGhpcy5pc0FscmVhZHlJbkFzc2Vzc21lbnQocS5pZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0FsbFZpc2libGVTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9IHRoaXMuZWxpZ2libGVWaXNpYmxlUXVlc3Rpb25zO1xyXG4gICAgICAgIHJldHVybiBlbGlnaWJsZS5sZW5ndGggPiAwICYmIGVsaWdpYmxlLmV2ZXJ5KHEgPT4gdGhpcy5zZWxlY3RlZFF1ZXN0aW9ucy5oYXMocS5pZCEpKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNTb21lVmlzaWJsZVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGVsaWdpYmxlID0gdGhpcy5lbGlnaWJsZVZpc2libGVRdWVzdGlvbnM7XHJcbiAgICAgICAgcmV0dXJuIGVsaWdpYmxlLnNvbWUocSA9PiB0aGlzLnNlbGVjdGVkUXVlc3Rpb25zLmhhcyhxLmlkISkpICYmICF0aGlzLmlzQWxsVmlzaWJsZVNlbGVjdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZVNlbGVjdEFsbFZpc2libGUoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZWxpZ2libGUgPSB0aGlzLmVsaWdpYmxlVmlzaWJsZVF1ZXN0aW9ucztcclxuICAgICAgICBpZiAodGhpcy5pc0FsbFZpc2libGVTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICBlbGlnaWJsZS5mb3JFYWNoKHEgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHEuaWQpIHRoaXMuc2VsZWN0ZWRRdWVzdGlvbnMuZGVsZXRlKHEuaWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlbGlnaWJsZS5mb3JFYWNoKHEgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHEuaWQpIHRoaXMuc2VsZWN0ZWRRdWVzdGlvbnMuc2V0KHEuaWQsIHEpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJBbGxTZWxlY3Rpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFF1ZXN0aW9ucy5jbGVhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE9wdGlvbiBwcmV2aWV3IG1ldGhvZHNcclxuICAgIGhhc09wdGlvbnMocXVlc3Rpb246IEFzc2Vzc21lbnRRdWVzdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIShxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3QgJiYgcXVlc3Rpb24uZGVmYXVsdE9wdGlvbnNMaXN0Lmxlbmd0aCA+IDApO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUV4cGFuZE9wdGlvbnMocXVlc3Rpb25JZDogbnVtYmVyIHwgdW5kZWZpbmVkLCBldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBpZiAoIXF1ZXN0aW9uSWQpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5leHBhbmRlZFF1ZXN0aW9uSWRzLmhhcyhxdWVzdGlvbklkKSkge1xyXG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkUXVlc3Rpb25JZHMuZGVsZXRlKHF1ZXN0aW9uSWQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWRRdWVzdGlvbklkcy5hZGQocXVlc3Rpb25JZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlzT3B0aW9uc0V4cGFuZGVkKHF1ZXN0aW9uSWQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXF1ZXN0aW9uSWQgJiYgdGhpcy5leHBhbmRlZFF1ZXN0aW9uSWRzLmhhcyhxdWVzdGlvbklkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDYWxjdWxhdGVkIG1ldHJpY3NcclxuICAgIGdldCBzZWxlY3RlZENvdW50KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRRdWVzdGlvbnMuc2l6ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdG90YWxTZWxlY3RlZE1hcmtzKCk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IHRvdGFsID0gMDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUXVlc3Rpb25zLmZvckVhY2gocSA9PiB7XHJcbiAgICAgICAgICAgIHRvdGFsICs9IChxLndlaWdodCB8fCAwKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdG90YWw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHlwZUNvdW50KHR5cGVDb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICghdHlwZUNvZGUpIHJldHVybiB0aGlzLmFsbFF1ZXN0aW9ucy5sZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsUXVlc3Rpb25zLmZpbHRlcihxID0+IHEucXVlc3Rpb25UeXBlPy5jb2RlID09PSB0eXBlQ29kZSkubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENhdGVnb3J5Q2xhc3MocXVlc3Rpb246IEFzc2Vzc21lbnRRdWVzdGlvbik6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgY29kZSA9IHF1ZXN0aW9uPy5xdWVzdGlvblR5cGU/LmNvZGUgfHwgJyc7XHJcbiAgICAgICAgaWYgKGNvZGUuaW5jbHVkZXMoJ09CSkVDVElWRScpIHx8IGNvZGUuaW5jbHVkZXMoJ0NIT0lDRScpIHx8IGNvZGUuaW5jbHVkZXMoJ01DUScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnYmFkZ2Utb2JqZWN0aXZlJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvZGUuaW5jbHVkZXMoJ1NVQkpFQ1RJVkUnKSB8fCBjb2RlLmluY2x1ZGVzKCdFU1NBWScpIHx8IGNvZGUuaW5jbHVkZXMoJ1RFWFQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLXN1YmplY3RpdmUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29kZS5pbmNsdWRlcygnREFURScpIHx8IGNvZGUuaW5jbHVkZXMoJ1RJTUUnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLWRhdGUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJ2JhZGdlLWdlbmVyaWMnO1xyXG4gICAgfVxyXG5cclxuICAgIGltcG9ydFNlbGVjdGVkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ291bnQgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFF1ZXN0aW9ucy52YWx1ZXMoKSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBjYXBpdGFsaXplRmlyc3QodGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIXRleHQpIHJldHVybiAnJztcclxuICAgICAgICByZXR1cm4gdGV4dC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJykubWFwKHdvcmQgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkpLmpvaW4oJyAnKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRRdWVzdGlvblR5cGVMYWJlbChxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXBpdGFsaXplRmlyc3QoXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uPy5xdWVzdGlvblR5cGU/LmxhYmVscz8uWzBdPy50ZXh0IHx8IHF1ZXN0aW9uPy5xdWVzdGlvblR5cGU/LmNvZGVcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGltYWdlRXJyb3JIYW5kbGVyKGV2ZW50OiBhbnksIGZpbGVQYXRoOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWV2ZW50Py50YXJnZXQpIHJldHVybjtcclxuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1lcnJvci1oYW5kbGVkJykgPT09ICd0cnVlJykge1xyXG4gICAgICAgICAgICBldmVudC50YXJnZXQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBldmVudC50YXJnZXQuc2V0QXR0cmlidXRlKCdkYXRhLWVycm9yLWhhbmRsZWQnLCAndHJ1ZScpO1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC5zcmMgPSBmaWxlUGF0aDtcclxuICAgIH1cclxuXHJcbiAgICB0cmFja0J5UXVlc3Rpb25JZChpbmRleDogbnVtYmVyLCBxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gcXVlc3Rpb24/LmlkID8gJ3EnICsgcXVlc3Rpb24uaWQgOiAnaScgKyBpbmRleDtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGgtMTAwIHF1ZXN0aW9uLWJhbmstcGlja2VyXCI+XHJcbiAgICA8IS0tIEhlYWRlcjogQmFjayBBcnJvdyArIFRpdGxlICsgU3VidGl0bGUgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBweC00IHB5LTMgYm9yZGVyLWJvdHRvbSBwaWNrZXItaGVhZGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2UoKVwiIGNsYXNzPVwiZC1pbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciByb3VuZGVkLWNpcmNsZSBib3JkZXItMCBiZy10cmFuc3BhcmVudCBjdXJzb3ItcG9pbnRlciBidG4taWNvbi1iYWNrXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkdPX0JBQ0snXSB8fCAnR28gQmFjaydcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uR09fQkFDSyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2dvLWJhY2suc3ZnJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbi1pY29uXCIgLz5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtYi0wIGZ3LWJvbGQgcGlja2VyLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLklNUE9SVF9GUk9NX1FVRVNUSU9OX0JBTksnXSB8fCAnSW1wb3J0IGZyb20gUXVlc3Rpb24gQmFuayd9fVxyXG4gICAgICAgICAgICAgICAgPC9oND5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBwaWNrZXItc3VidGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlNFTEVDVEVEX1NFQ1RJT04nXSB8fCAnU2VsZWN0ZWQgU2VjdGlvbid9fTo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZnctc2VtaWJvbGQgbXMtMVwiICpuZ0lmPVwidGFyZ2V0U2VjdGlvbk5hbWVcIj57e3RhcmdldFNlY3Rpb25OYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeSBtcy0xXCIgKm5nSWY9XCIhdGFyZ2V0U2VjdGlvbk5hbWVcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuSU1QT1JUX1FVRVNUSU9OU19JTlRPX05FV19TRUNUSU9OJ10gfHwgJ0ltcG9ydCBxdWVzdGlvbnMgaW50byBhIG5ldyBzZWN0aW9uJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gU2VhcmNoICYgRmlsdGVyIENvbnRyb2xzIERlY2sgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGlja2VyLXNlYXJjaC1kZWNrIHB4LTQgcHQtMyBwYi0yIGJvcmRlci1ib3R0b21cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0zIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XHJcbiAgICAgICAgICAgIDwhLS0gU2VhcmNoIEJveCAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dC13cmFwcGVyIGZsZXgtZ3Jvdy0xIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHNlYXJjaC1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuU0VBUkNIX1FVRVNUSU9OJ10gfHwgJ1NlYXJjaCBRdWVzdGlvbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlYXJjaFRlcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoQ2hhbmdlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzZWFyY2hUZXJtXCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoKClcIiBjbGFzcz1cInNlYXJjaC1jbGVhci1idG5cIiBbYXR0ci5hcmlhLWxhYmVsXT1cImxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ0xFQVJfU0VBUkNIJ10gfHwgJ0NsZWFyIFNlYXJjaCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkNMT1NFJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvY2xvc2Uuc3ZnJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbi1pY29uXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVHlwZSBGaWx0ZXIgRHJvcGRvd24gdXNpbmcgYXJyb3ctZG93bi1ibGFjay5zdmcgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0eXBlLWZpbHRlci13cmFwcGVyIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgZmlsdGVyLXNlbGVjdCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkVHlwZUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblR5cGVGaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQUxMX1RZUEVTJ10gfHwgJ0FsbCBUeXBlcyd9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHR5cGUgb2YgcXVlc3Rpb25UeXBlc1wiIFt2YWx1ZV09XCJ0eXBlLmNvZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t0eXBlLmxhYmVsIHx8IHR5cGUuY29kZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gU2VjdGlvbiBIZWFkZXI6IFF1ZXN0aW9uIENvdW50ICYgU2VsZWN0IEFsbCAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBwdC0yIHBiLTFcIj5cclxuICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMCBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTUgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+XHJcbiAgICAgICAgICAgICAgICB7e3RvdGFsRWxlbWVudHMgfHwgZmlsdGVyZWRRdWVzdGlvbnMubGVuZ3RofX0ge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlFVRVNUSU9OUyddIHx8ICdRdWVzdGlvbnMnfX1cclxuICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbWItMFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlciBtLTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzZWxlY3RBbGxRdWVzdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsVmlzaWJsZVNlbGVjdGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJpc1NvbWVWaXNpYmxlU2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJlbGlnaWJsZVZpc2libGVRdWVzdGlvbnMubGVuZ3RoID09PSAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdEFsbFZpc2libGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xNSBhc3Nlc3NtZW50LXRleHQtZ3JleS1uaW5lIGN1cnNvci1wb2ludGVyIHVzZXItc2VsZWN0LW5vbmUgbWItMFwiIGZvcj1cInNlbGVjdEFsbFF1ZXN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5TRUxFQ1RfQUxMX1FVRVNUSU9OUyddIHx8ICdTZWxlY3QgQWxsIFF1ZXN0aW9ucyd9fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFF1ZXN0aW9ucyBWaWV3cG9ydCBCb3ggLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgb3ZlcmZsb3ctYXV0byBhc3Nlc3NtZW50LWN1c3RvbS1zY3JvbGxiYXItdGh1bWIgcC0zXCIgKHNjcm9sbCk9XCJvblNjcm9sbCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPCEtLSBTa2VsZXRvbiBMb2FkaW5nIFN0YXRlIC0tPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0luaXRpYWxMb2FkaW5nXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTMgcHktMVwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpIG9mIFsxLCAyLCAzLCA0LCA1XVwiIGNsYXNzPVwic2tlbGV0b24tY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNrZWxldG9uLWxpbmUgbGluZS1mdWxsXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2tlbGV0b24tbWV0YVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBRdWVzdGlvbiBDYXJkcyAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzSW5pdGlhbExvYWRpbmcgJiYgZmlsdGVyZWRRdWVzdGlvbnMubGVuZ3RoID4gMFwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIGZpbHRlcmVkUXVlc3Rpb25zOyB0cmFja0J5OiB0cmFja0J5UXVlc3Rpb25JZFwiXHJcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJxdWVzdGlvbi1jYXJkXCJcclxuICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWQtY2FyZF09XCJpc0FscmVhZHlJbkFzc2Vzc21lbnQocXVlc3Rpb24uaWQpXCJcclxuICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtY2FyZF09XCJpc1NlbGVjdGVkKHF1ZXN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNlbGVjdGlvbihxdWVzdGlvbilcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIE1haW4gQ2FyZCBIZWFkZXI6IENoZWNrYm94ICsgUXVlc3Rpb24gVGV4dCArICNJRCAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtc3RhcnQgZ2FwLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHQtMSBmbGV4LXNocmluay0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY2FyZC1jaGVja2JveCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZChxdWVzdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzQWxyZWFkeUluQXNzZXNzbWVudChxdWVzdGlvbi5pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdGlvbihxdWVzdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG1pbi13LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtMyBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicXVlc3Rpb24tYm9keS10ZXh0IGZ3LW1lZGl1bSB0ZXh0LWJyZWFrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJxdWVzdGlvbj8ucXVlc3Rpb25UZXh0Py5bMF0/LnRleHRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicXVlc3Rpb24taWQtYmFkZ2UgZmxleC1zaHJpbmstMFwiICpuZ0lmPVwicXVlc3Rpb24/LmlkXCI+I3t7cXVlc3Rpb24uaWR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEJhZGdlcyBSb3c6IFR5cGUgUGlsbCwgTWFya3MgUGlsbCwgTWFuZGF0b3J5IFBpbGwsIGFuZCBBZGRlZCBQaWxsIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBmbGV4LXdyYXAgZ2FwLTIgbXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC13cmFwIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBRdWVzdGlvbiBUeXBlIFBpbGwgKE9yYW5nZS9BbWJlcikgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZS1waWxsIGJhZGdlLXR5cGUtcGlsbCBwLTIgcm91bmRlZFwiICpuZ0lmPVwicXVlc3Rpb24/LnF1ZXN0aW9uVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldFF1ZXN0aW9uVHlwZUxhYmVsKHF1ZXN0aW9uKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE1hcmtzIFBpbGwgKEJsdWUvSW5kaWdvKSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlLXBpbGwgYmFkZ2UtbWFya3MtcGlsbCBwLTIgcm91bmRlZFwiICpuZ0lmPVwicXVlc3Rpb24/LndlaWdodCAhPT0gdW5kZWZpbmVkICYmIHF1ZXN0aW9uPy53ZWlnaHQgIT09IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BUktTJ10gfHwgJ01hcmtzJ319IHt7cXVlc3Rpb24ud2VpZ2h0fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTWFuZGF0b3J5IFBpbGwgKEdyZWVuKSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlLXBpbGwgYmFkZ2UtbWFuZGF0b3J5LXBpbGwgcC0yIHJvdW5kZWRcIiAqbmdJZj1cInF1ZXN0aW9uPy5pc01hbmRhdG9yeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFOREFUT1JZJ10gfHwgJ01hbmRhdG9yeSd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmlnaHQtYWxpZ25lZCBBbHJlYWR5IEFkZGVkIFBpbGwgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzQWxyZWFkeUluQXNzZXNzbWVudChxdWVzdGlvbi5pZClcIiBjbGFzcz1cImJhZGdlLXBpbGwgYmFkZ2UtYWRkZWQtcGlsbCBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRvdC1pbmRpY2F0b3JcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFEREVEJ10gfHwgJ0FkZGVkJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBPcHRpb25zIEFjY29yZGlvbiAoaWYgcXVlc3Rpb24gaGFzIGRlZmF1bHRPcHRpb25zTGlzdCkgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJoYXNPcHRpb25zKHF1ZXN0aW9uKVwiIGNsYXNzPVwib3B0aW9ucy1hY2NvcmRpb24tc2VjdGlvbiBtdC0zIHB0LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVG9nZ2xlIEJ1dHRvbiBSb3cgd2l0aCBBcnJvdyAmIERpdmlkZXIgTGluZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIGN1cnNvci1wb2ludGVyIG9wdGlvbnMtdG9nZ2xlLXJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVFeHBhbmRPcHRpb25zKHF1ZXN0aW9uLmlkLCAkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcHRpb25zLWNvdW50LXRleHQgdGV4dC1wcmltYXJ5IGZ3LXNlbWlib2xkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cXVlc3Rpb24uZGVmYXVsdE9wdGlvbnNMaXN0Py5sZW5ndGggfHwgMH19IHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5PUFRJT05TJ10gfHwgJ09wdGlvbnMnfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImlzT3B0aW9uc0V4cGFuZGVkKHF1ZXN0aW9uLmlkKSA/IChpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uQVJST1dfVVBfQkxVRSddIHx8ICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9hcnJvdy11cC1ibHVlLnN2ZycpIDogKGltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5BUlJPV19ET1dOX0JMVUUnXSB8fCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvYXJyb3ctZG93bi1ibHVlLnN2ZycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsIGlzT3B0aW9uc0V4cGFuZGVkKHF1ZXN0aW9uLmlkKSA/ICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9hcnJvdy11cC1ibHVlLnN2ZycgOiAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvYXJyb3ctZG93bi1ibHVlLnN2ZycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwib3B0aW9ucy1hcnJvdy1pY29uXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9ucy1kaXZpZGVyLWxpbmUgZmxleC1ncm93LTFcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTIgb3B0aW9ucy1oaW50LXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oCiIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DTElDS19UT19WSUVXJ10gfHwgJ0NsaWNrIHRvIHZpZXcnfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEV4cGFuZGVkIE9wdGlvbnMgTGlzdCAoUmFkaW8gb3B0aW9ucykgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNPcHRpb25zRXhwYW5kZWQocXVlc3Rpb24uaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvcHRpb25zLWxpc3QtY29udGFpbmVyIGQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMiBtdC0zIHBzLTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0IG9mIHF1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgb3B0aW9uLWl0ZW0tcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3B0aW9uLXJhZGlvLWNpcmNsZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcHRpb24tdGV4dCB0ZXh0LWJyZWFrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29wdC5vcHRpb25zPy5vcHRpb25OYW1lPy5bMF0/LnRleHQgfHwgb3B0Lm9wdGlvbnM/Lm9wdGlvbkNvZGUgfHwgJ09wdGlvbid9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIEVtcHR5IFN0YXRlOiBObyBtYXRjaGluZyBmaWx0ZXIgcmVzdWx0cyAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzSW5pdGlhbExvYWRpbmcgJiYgZmlsdGVyZWRRdWVzdGlvbnMubGVuZ3RoID09PSAwICYmIGFsbFF1ZXN0aW9ucy5sZW5ndGggPiAwXCJcclxuICAgICAgICAgICAgIGNsYXNzPVwiZW1wdHktc3RhdGUtYm94IHB5LTUgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJlbXB0eS1zdGF0ZS10aXRsZSBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTUgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5OT19NQVRDSElOR19RVUVTVElPTlMnXSB8fCAnTm8gbWF0Y2hpbmcgcXVlc3Rpb25zIGZvdW5kJ319XHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJlbXB0eS1zdGF0ZS1kZXNjIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk5PX01BVENISU5HX1FVRVNUSU9OU19ERVNDJ10gfHwgJ1RyeSBhZGp1c3RpbmcgeW91ciBzZWFyY2ggdGVybXMgb3IgY2xlYXJpbmcgc2VsZWN0ZWQgcXVlc3Rpb24gdHlwZSBmaWx0ZXJzLid9fVxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsZWFyU2VhcmNoKCk7IHNlbGVjdGVkVHlwZUNvZGUgPSAnJzsgYXBwbHlGaWx0ZXJzKCk7XCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi1zbSBweC0zXCI+XHJcbiAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ0xFQVJfRklMVEVSUyddIHx8ICdDbGVhciBGaWx0ZXJzJ319XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIEVtcHR5IFN0YXRlOiBRdWVzdGlvbiBiYW5rIGlzIGVtcHR5IC0tPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaXNJbml0aWFsTG9hZGluZyAmJiBhbGxRdWVzdGlvbnMubGVuZ3RoID09PSAwXCJcclxuICAgICAgICAgICAgIGNsYXNzPVwiZW1wdHktc3RhdGUtYm94IHB5LTUgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5OT19RVUVTVElPTlMnXVwiIGNsYXNzPVwiZW1wdHktc3RhdGUtaW1nIG1iLTNcIlxyXG4gICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9uby1xdWVzdGlvbnMuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cImVtcHR5LXN0YXRlLXRpdGxlIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xNSBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW4gbWItMVwiPlxyXG4gICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk5PX1FVRVNUSU9OU19JTl9CQU5LJ10gfHwgJ05vIFF1ZXN0aW9ucyBpbiBCYW5rISd9fVxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiZW1wdHktc3RhdGUtZGVzYyBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIG1iLTBcIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5OT19RVUVTVElPTlNfSU5fQkFOS19ERVNDJ10gfHwgJ0NyZWF0ZSBzdGFuZGFsb25lIHF1ZXN0aW9ucyBpbiB0aGUgUXVlc3Rpb24gQmFuayB0byByZXVzZSB0aGVtIGhlcmUuJ319XHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBJbmZpbml0ZSBTY3JvbGwgQm90dG9tIExvYWRlciAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nICYmICFpc0luaXRpYWxMb2FkaW5nXCIgY2xhc3M9XCJweS0zIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc20gdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj57eyBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkxPQURJTkcnXSB8fCAnTG9hZGluZy4uLicgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTNcIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5MT0FESU5HX01PUkVfUVVFU1RJT05TJ10gfHwgJ0xvYWRpbmcgbW9yZSBxdWVzdGlvbnMuLi4nfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIEVuZCBvZiBsaXN0IHJlYWNoZWQgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFoYXNOZXh0ICYmIGFsbFF1ZXN0aW9ucy5sZW5ndGggPiAwICYmICFpc0xvYWRpbmdcIiBjbGFzcz1cInRleHQtY2VudGVyIHB5LTMgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMlwiPlxyXG4gICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQUxMX1FVRVNUSU9OU19MT0FERUQnXSB8fCAnQWxsIHF1ZXN0aW9ucyBsb2FkZWQnfX0gKHt7dG90YWxFbGVtZW50c319KVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBTdGlja3kgRm9vdGVyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInB4LTQgcHktMyBib3JkZXItdG9wIHBpY2tlci1mb290ZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBiZy13aGl0ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItc3VtbWFyeVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTNcIiAqbmdJZj1cInNlbGVjdGVkQ291bnQgPT09IDBcIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5OT19RVUVTVElPTlNfU0VMRUNURUQnXSB8fCAnTm8gcXVlc3Rpb25zIHNlbGVjdGVkJ319XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlbiBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzXCIgKm5nSWY9XCJzZWxlY3RlZENvdW50ID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cInRleHQtcHJpbWFyeVwiPnt7c2VsZWN0ZWRDb3VudH19PC9zdHJvbmc+IHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5RVUVTVElPTlNfU0VMRUNURUQnXSB8fCAncXVlc3Rpb25zIHNlbGVjdGVkJ319XHJcbiAgICAgICAgICAgICAgICAmbWlkZG90OyA8c3Ryb25nIGNsYXNzPVwidGV4dC1kYXJrXCI+e3t0b3RhbFNlbGVjdGVkTWFya3N9fTwvc3Ryb25nPiB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUFSS1MnXSB8fCAnTWFya3MnfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsb3NlKClcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgcHgtNCBweS0yIGZvb3Rlci1idG5cIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DQU5DRUwnXSB8fCAnQ2FuY2VsJ319XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJpbXBvcnRTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VsZWN0ZWRDb3VudCA9PT0gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcHgtNCBweS0yIGZvb3Rlci1idG4gZm9vdGVyLWJ0bi1pbXBvcnRcIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5JTVBPUlRfQ09VTlQnXSB8fCAnSW1wb3J0J319XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=