@cqa-lib/cqa-ui 1.1.203 → 1.1.205

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 (35) hide show
  1. package/esm2020/lib/detail-drawer/detail-drawer-tab/detail-drawer-tab.component.mjs +38 -0
  2. package/esm2020/lib/detail-drawer/detail-drawer-tab-content.directive.mjs +16 -0
  3. package/esm2020/lib/detail-drawer/detail-drawer.component.mjs +121 -0
  4. package/esm2020/lib/detail-side-panel/detail-side-panel.component.mjs +211 -0
  5. package/esm2020/lib/detail-side-panel/detail-side-panel.models.mjs +2 -0
  6. package/esm2020/lib/step-builder/step-builder-action/step-builder-action.component.mjs +7 -9
  7. package/esm2020/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.mjs +4 -4
  8. package/esm2020/lib/step-builder/step-builder-condition/step-builder-condition.component.mjs +121 -23
  9. package/esm2020/lib/step-builder/step-builder-document/step-builder-document.component.mjs +65 -9
  10. package/esm2020/lib/step-builder/step-builder-loop/step-builder-loop.component.mjs +8 -9
  11. package/esm2020/lib/step-builder/template-variables-form/template-variables-form.component.mjs +319 -0
  12. package/esm2020/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.mjs +634 -0
  13. package/esm2020/lib/test-case-details/test-case-details.component.mjs +138 -0
  14. package/esm2020/lib/test-case-details/test-case-details.models.mjs +167 -0
  15. package/esm2020/lib/ui-kit.module.mjs +42 -3
  16. package/esm2020/public-api.mjs +10 -1
  17. package/fesm2015/cqa-lib-cqa-ui.mjs +1870 -73
  18. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  19. package/fesm2020/cqa-lib-cqa-ui.mjs +1865 -78
  20. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  21. package/lib/detail-drawer/detail-drawer-tab/detail-drawer-tab.component.d.ts +15 -0
  22. package/lib/detail-drawer/detail-drawer-tab-content.directive.d.ts +8 -0
  23. package/lib/detail-drawer/detail-drawer.component.d.ts +39 -0
  24. package/lib/detail-side-panel/detail-side-panel.component.d.ts +86 -0
  25. package/lib/detail-side-panel/detail-side-panel.models.d.ts +20 -0
  26. package/lib/step-builder/step-builder-condition/step-builder-condition.component.d.ts +12 -2
  27. package/lib/step-builder/step-builder-document/step-builder-document.component.d.ts +18 -1
  28. package/lib/step-builder/template-variables-form/template-variables-form.component.d.ts +55 -0
  29. package/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.d.ts +175 -0
  30. package/lib/test-case-details/test-case-details.component.d.ts +62 -0
  31. package/lib/test-case-details/test-case-details.models.d.ts +118 -0
  32. package/lib/ui-kit.module.d.ts +32 -24
  33. package/package.json +1 -1
  34. package/public-api.d.ts +9 -0
  35. package/styles.css +1 -1
@@ -0,0 +1,138 @@
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "./test-case-details-edit/test-case-details-edit.component";
4
+ import * as i2 from "@angular/material/icon";
5
+ import * as i3 from "../badge/badge.component";
6
+ import * as i4 from "../configuration-card/configuration-card.component";
7
+ import * as i5 from "@angular/common";
8
+ export class TestCaseDetailsComponent {
9
+ constructor(cdr) {
10
+ this.cdr = cdr;
11
+ /** Whether the component is in edit mode */
12
+ this.editing = false;
13
+ /** When true, start in edit mode (useful for Storybook). */
14
+ this.startInEditMode = false;
15
+ /** Description section title */
16
+ this.descriptionTitle = 'Description';
17
+ /** Description text content */
18
+ this.descriptionContent = '';
19
+ /** Whether to show the Edit button in the Description header */
20
+ this.showEditButton = false;
21
+ /** Metadata items (createdOn, status, priority, environment, version, testPlanName, etc.) */
22
+ this.metadataItems = [];
23
+ /** Labels/tags (e.g. Automation, API, SDK, UI/UX) */
24
+ this.labels = [];
25
+ /** Configuration section title */
26
+ this.configTitle = 'Configuration';
27
+ /** Configuration sections (e.g. Execution, AI Configuration) */
28
+ this.configSections = [];
29
+ /** Optional config sections displayed in a 2-column row (e.g. Waits & Retries, Device) */
30
+ this.configSectionsRow2 = [];
31
+ /** Platform: 'web' or 'mobile'. Defaults to 'web'. Used for Device Settings fields. */
32
+ this.platform = 'web';
33
+ /** Override config per select for API-driven options, server search, load more. */
34
+ this.selectConfigOverrides = {};
35
+ this.editDescription = new EventEmitter();
36
+ this.saveChanges = new EventEmitter();
37
+ this.metadataLinkClick = new EventEmitter();
38
+ this.selectSearch = new EventEmitter();
39
+ this.selectLoadMore = new EventEmitter();
40
+ this.selectOpened = new EventEmitter();
41
+ this.selectionChange = new EventEmitter();
42
+ }
43
+ ngOnInit() {
44
+ if (this.startInEditMode) {
45
+ this.editing = true;
46
+ }
47
+ }
48
+ onEditClick() {
49
+ this.editing = true;
50
+ this.cdr.detectChanges();
51
+ this.editDescription.emit();
52
+ }
53
+ onSaveChanges(data) {
54
+ this.editing = false;
55
+ this.cdr.detectChanges();
56
+ this.saveChanges.emit(data);
57
+ }
58
+ onCancelEdit() {
59
+ this.editing = false;
60
+ this.cdr.detectChanges();
61
+ }
62
+ trackByConfigTitle(_i, section) {
63
+ return section.title;
64
+ }
65
+ trackByMetadataLabel(_i, item) {
66
+ return item.label;
67
+ }
68
+ onMetadataLinkClick(item) {
69
+ if (item.link) {
70
+ this.metadataLinkClick.emit(item);
71
+ }
72
+ }
73
+ getStatusDotClass(item) {
74
+ if (!item.statusColor)
75
+ return '';
76
+ switch (item.statusColor) {
77
+ case 'yellow':
78
+ return 'cqa-bg-[#EAB308]';
79
+ case 'red':
80
+ return 'cqa-bg-[#DC2626]';
81
+ case 'green':
82
+ return 'cqa-bg-[#16A34A]';
83
+ case 'gray':
84
+ default:
85
+ return 'cqa-bg-[#94A3B8]';
86
+ }
87
+ }
88
+ /** Text color for metadata value (e.g. red for critical priority) */
89
+ getValueTextClass(item) {
90
+ if (item.statusColor === 'red') {
91
+ return 'cqa-text-[#DC2626]';
92
+ }
93
+ return 'cqa-text-[#111827]';
94
+ }
95
+ }
96
+ TestCaseDetailsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestCaseDetailsComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
97
+ TestCaseDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TestCaseDetailsComponent, selector: "cqa-test-case-details", inputs: { startInEditMode: "startInEditMode", descriptionTitle: "descriptionTitle", descriptionContent: "descriptionContent", showEditButton: "showEditButton", metadataItems: "metadataItems", labels: "labels", configTitle: "configTitle", configSections: "configSections", configSectionsRow2: "configSectionsRow2", platform: "platform", selectConfigOverrides: "selectConfigOverrides" }, outputs: { editDescription: "editDescription", saveChanges: "saveChanges", metadataLinkClick: "metadataLinkClick", selectSearch: "selectSearch", selectLoadMore: "selectLoadMore", selectOpened: "selectOpened", selectionChange: "selectionChange" }, ngImport: i0, template: "<!-- Edit mode: show edit form (Figma design) -->\n<cqa-test-case-details-edit\n *ngIf=\"editing\"\n [descriptionTitle]=\"descriptionTitle\"\n [descriptionContent]=\"descriptionContent\"\n [metadataItems]=\"metadataItems\"\n [labels]=\"labels\"\n [configTitle]=\"configTitle\"\n [configSections]=\"configSections\"\n [configSectionsRow2]=\"configSectionsRow2\"\n [platform]=\"platform\"\n [selectConfigOverrides]=\"selectConfigOverrides\"\n (save)=\"onSaveChanges($event)\"\n (cancel)=\"onCancelEdit()\"\n (selectSearch)=\"selectSearch.emit($event)\"\n (selectLoadMore)=\"selectLoadMore.emit($event)\"\n (selectOpened)=\"selectOpened.emit($event)\"\n (selectionChange)=\"selectionChange.emit($event)\">\n</cqa-test-case-details-edit>\n\n<!-- View mode: read-only details -->\n<div *ngIf=\"!editing\" class=\"cqa-self-stretch cqa-py-4 cqa-px-0 cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-4 cqa-overflow-hidden cqa-text-sm cqa-leading-[19.6px]\">\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <!-- Description Section -->\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-inline-flex cqa-justify-between cqa-items-center\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">description</mat-icon>\n </div>\n <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.6px]\">{{ descriptionTitle }}</span>\n </div>\n <button\n *ngIf=\"showEditButton\"\n type=\"button\"\n class=\"cqa-flex cqa-justify-end cqa-items-center cqa-gap-2 cqa-text-[#A3A3A3] cqa-text-xs cqa-font-semibold hover:cqa-text-[#737373] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onEditClick()\">\n <mat-icon class=\"cqa-text-[14px] cqa-w-4 cqa-h-4\">edit</mat-icon>\n Edit\n </button>\n </div>\n <div *ngIf=\"descriptionContent\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start\">\n <div class=\"cqa-self-stretch cqa-text-[#111827] cqa-text-sm cqa-leading-[19.6px] cqa-font-normal\">{{ descriptionContent }}</div>\n </div>\n </div>\n\n <!-- Metadata Section -->\n <div *ngIf=\"metadataItems.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-grid cqa-grid-cols-3 cqa-gap-x-0 cqa-gap-y-4\">\n <ng-container *ngFor=\"let item of metadataItems; trackBy: trackByMetadataLabel\">\n <div class=\"cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-0.5\">\n <div class=\"cqa-text-[#6B7280] cqa-text-xs cqa-leading-[15px] cqa-font-medium\">{{ item.label }}</div>\n <div class=\"cqa-flex cqa-justify-start cqa-items-center cqa-gap-2.5 cqa-min-w-0 cqa-w-full\">\n <mat-icon *ngIf=\"item.icon && (!item.iconLibrary || item.iconLibrary === 'mat')\" class=\"cqa-text-[#6B7280] cqa-text-sm cqa-w-4 cqa-h-4\">\n {{ item.icon }}\n </mat-icon>\n <span *ngIf=\"item.statusColor\" class=\"cqa-w-3.5 cqa-h-3.5 cqa-rounded-full cqa-flex-shrink-0\" [ngClass]=\"getStatusDotClass(item)\"></span>\n <a\n *ngIf=\"item.link\"\n href=\"javascript:void(0)\"\n class=\"cqa-text-[#2563EB] cqa-text-xs cqa-leading-[12px] cqa-font-normal hover:cqa-underline cqa-cursor-pointer cqa-block cqa-truncate cqa-min-w-0\"\n (click)=\"onMetadataLinkClick(item); $event.preventDefault()\">\n {{ item.value }}\n </a>\n <span *ngIf=\"!item.link\" class=\"cqa-text-xs cqa-leading-[12px] cqa-font-normal\" [ngClass]=\"getValueTextClass(item)\">\n {{ item.value }}\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Labels (Figma: Labels title, cqa-badge chips with tag icon) -->\n <div *ngIf=\"labels.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2 cqa-text-sm cqa-leading-[19.6px]\">\n <span class=\"cqa-text-[#111827] cqa-text-sm cqa-font-medium cqa-leading-5\">Labels</span>\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2\">\n <cqa-badge\n *ngFor=\"let label of labels\"\n [label]=\"label\"\n icon=\"label\"\n variant=\"outline\"\n size=\"small\"\n backgroundColor=\"#ffffff\"\n textColor=\"#475569\"\n borderColor=\"#E2E8F0\"\n iconColor=\"#94A3B8\">\n </cqa-badge>\n </div>\n </div>\n\n <!-- Configuration Section -->\n <div *ngIf=\"configSections.length || configSectionsRow2.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-inline-flex cqa-justify-start cqa-items-center\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">settings</mat-icon>\n </div>\n <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.6px]\">{{ configTitle }}</span>\n </div>\n </div>\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-grid cqa-grid-cols-1 cqa-gap-2.5\">\n <ng-container *ngFor=\"let section of configSections; trackBy: trackByConfigTitle\">\n <cqa-configuration-card\n [icon]=\"section.icon || 'tune'\"\n [title]=\"section.title\"\n [data]=\"section.items\">\n </cqa-configuration-card>\n </ng-container>\n </div>\n <div *ngIf=\"configSectionsRow2.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <cqa-configuration-card\n *ngFor=\"let section of configSectionsRow2; trackBy: trackByConfigTitle\"\n [icon]=\"section.icon || 'tune'\"\n [title]=\"section.title\"\n [data]=\"section.items\">\n </cqa-configuration-card>\n </div>\n </div>\n </div>\n </div>\n</div>\n", components: [{ type: i1.TestCaseDetailsEditComponent, selector: "cqa-test-case-details-edit", inputs: ["descriptionTitle", "descriptionContent", "metadataItems", "labels", "configTitle", "configSections", "configSectionsRow2", "prerequisiteCaseOptions", "platform", "selectConfigOverrides"], outputs: ["save", "cancel", "selectSearch", "selectLoadMore", "selectOpened", "selectionChange"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i3.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading"] }, { type: i4.ConfigurationCardComponent, selector: "cqa-configuration-card", inputs: ["icon", "title", "data"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
98
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestCaseDetailsComponent, decorators: [{
99
+ type: Component,
100
+ args: [{ selector: 'cqa-test-case-details', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Edit mode: show edit form (Figma design) -->\n<cqa-test-case-details-edit\n *ngIf=\"editing\"\n [descriptionTitle]=\"descriptionTitle\"\n [descriptionContent]=\"descriptionContent\"\n [metadataItems]=\"metadataItems\"\n [labels]=\"labels\"\n [configTitle]=\"configTitle\"\n [configSections]=\"configSections\"\n [configSectionsRow2]=\"configSectionsRow2\"\n [platform]=\"platform\"\n [selectConfigOverrides]=\"selectConfigOverrides\"\n (save)=\"onSaveChanges($event)\"\n (cancel)=\"onCancelEdit()\"\n (selectSearch)=\"selectSearch.emit($event)\"\n (selectLoadMore)=\"selectLoadMore.emit($event)\"\n (selectOpened)=\"selectOpened.emit($event)\"\n (selectionChange)=\"selectionChange.emit($event)\">\n</cqa-test-case-details-edit>\n\n<!-- View mode: read-only details -->\n<div *ngIf=\"!editing\" class=\"cqa-self-stretch cqa-py-4 cqa-px-0 cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-4 cqa-overflow-hidden cqa-text-sm cqa-leading-[19.6px]\">\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <!-- Description Section -->\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-inline-flex cqa-justify-between cqa-items-center\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">description</mat-icon>\n </div>\n <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.6px]\">{{ descriptionTitle }}</span>\n </div>\n <button\n *ngIf=\"showEditButton\"\n type=\"button\"\n class=\"cqa-flex cqa-justify-end cqa-items-center cqa-gap-2 cqa-text-[#A3A3A3] cqa-text-xs cqa-font-semibold hover:cqa-text-[#737373] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onEditClick()\">\n <mat-icon class=\"cqa-text-[14px] cqa-w-4 cqa-h-4\">edit</mat-icon>\n Edit\n </button>\n </div>\n <div *ngIf=\"descriptionContent\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start\">\n <div class=\"cqa-self-stretch cqa-text-[#111827] cqa-text-sm cqa-leading-[19.6px] cqa-font-normal\">{{ descriptionContent }}</div>\n </div>\n </div>\n\n <!-- Metadata Section -->\n <div *ngIf=\"metadataItems.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-grid cqa-grid-cols-3 cqa-gap-x-0 cqa-gap-y-4\">\n <ng-container *ngFor=\"let item of metadataItems; trackBy: trackByMetadataLabel\">\n <div class=\"cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-0.5\">\n <div class=\"cqa-text-[#6B7280] cqa-text-xs cqa-leading-[15px] cqa-font-medium\">{{ item.label }}</div>\n <div class=\"cqa-flex cqa-justify-start cqa-items-center cqa-gap-2.5 cqa-min-w-0 cqa-w-full\">\n <mat-icon *ngIf=\"item.icon && (!item.iconLibrary || item.iconLibrary === 'mat')\" class=\"cqa-text-[#6B7280] cqa-text-sm cqa-w-4 cqa-h-4\">\n {{ item.icon }}\n </mat-icon>\n <span *ngIf=\"item.statusColor\" class=\"cqa-w-3.5 cqa-h-3.5 cqa-rounded-full cqa-flex-shrink-0\" [ngClass]=\"getStatusDotClass(item)\"></span>\n <a\n *ngIf=\"item.link\"\n href=\"javascript:void(0)\"\n class=\"cqa-text-[#2563EB] cqa-text-xs cqa-leading-[12px] cqa-font-normal hover:cqa-underline cqa-cursor-pointer cqa-block cqa-truncate cqa-min-w-0\"\n (click)=\"onMetadataLinkClick(item); $event.preventDefault()\">\n {{ item.value }}\n </a>\n <span *ngIf=\"!item.link\" class=\"cqa-text-xs cqa-leading-[12px] cqa-font-normal\" [ngClass]=\"getValueTextClass(item)\">\n {{ item.value }}\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Labels (Figma: Labels title, cqa-badge chips with tag icon) -->\n <div *ngIf=\"labels.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2 cqa-text-sm cqa-leading-[19.6px]\">\n <span class=\"cqa-text-[#111827] cqa-text-sm cqa-font-medium cqa-leading-5\">Labels</span>\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2\">\n <cqa-badge\n *ngFor=\"let label of labels\"\n [label]=\"label\"\n icon=\"label\"\n variant=\"outline\"\n size=\"small\"\n backgroundColor=\"#ffffff\"\n textColor=\"#475569\"\n borderColor=\"#E2E8F0\"\n iconColor=\"#94A3B8\">\n </cqa-badge>\n </div>\n </div>\n\n <!-- Configuration Section -->\n <div *ngIf=\"configSections.length || configSectionsRow2.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-inline-flex cqa-justify-start cqa-items-center\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">settings</mat-icon>\n </div>\n <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.6px]\">{{ configTitle }}</span>\n </div>\n </div>\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-grid cqa-grid-cols-1 cqa-gap-2.5\">\n <ng-container *ngFor=\"let section of configSections; trackBy: trackByConfigTitle\">\n <cqa-configuration-card\n [icon]=\"section.icon || 'tune'\"\n [title]=\"section.title\"\n [data]=\"section.items\">\n </cqa-configuration-card>\n </ng-container>\n </div>\n <div *ngIf=\"configSectionsRow2.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <cqa-configuration-card\n *ngFor=\"let section of configSectionsRow2; trackBy: trackByConfigTitle\"\n [icon]=\"section.icon || 'tune'\"\n [title]=\"section.title\"\n [data]=\"section.items\">\n </cqa-configuration-card>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [] }]
101
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { startInEditMode: [{
102
+ type: Input
103
+ }], descriptionTitle: [{
104
+ type: Input
105
+ }], descriptionContent: [{
106
+ type: Input
107
+ }], showEditButton: [{
108
+ type: Input
109
+ }], metadataItems: [{
110
+ type: Input
111
+ }], labels: [{
112
+ type: Input
113
+ }], configTitle: [{
114
+ type: Input
115
+ }], configSections: [{
116
+ type: Input
117
+ }], configSectionsRow2: [{
118
+ type: Input
119
+ }], platform: [{
120
+ type: Input
121
+ }], selectConfigOverrides: [{
122
+ type: Input
123
+ }], editDescription: [{
124
+ type: Output
125
+ }], saveChanges: [{
126
+ type: Output
127
+ }], metadataLinkClick: [{
128
+ type: Output
129
+ }], selectSearch: [{
130
+ type: Output
131
+ }], selectLoadMore: [{
132
+ type: Output
133
+ }], selectOpened: [{
134
+ type: Output
135
+ }], selectionChange: [{
136
+ type: Output
137
+ }] } });
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy90ZXN0LWNhc2UtZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEdBR3hCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBZ0J2QixNQUFNLE9BQU8sd0JBQXdCO0lBT25DLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBTjFDLDRDQUE0QztRQUM1QyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCLDREQUE0RDtRQUNuRCxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQVNqQyxnQ0FBZ0M7UUFDdkIscUJBQWdCLEdBQUcsYUFBYSxDQUFDO1FBRTFDLCtCQUErQjtRQUN0Qix1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFFakMsZ0VBQWdFO1FBQ3ZELG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRWhDLDZGQUE2RjtRQUNwRixrQkFBYSxHQUFrQyxFQUFFLENBQUM7UUFFM0QscURBQXFEO1FBQzVDLFdBQU0sR0FBYSxFQUFFLENBQUM7UUFFL0Isa0NBQWtDO1FBQ3pCLGdCQUFXLEdBQUcsZUFBZSxDQUFDO1FBRXZDLGdFQUFnRTtRQUN2RCxtQkFBYyxHQUFtQyxFQUFFLENBQUM7UUFFN0QsMEZBQTBGO1FBQ2pGLHVCQUFrQixHQUFtQyxFQUFFLENBQUM7UUFDakUsdUZBQXVGO1FBQzlFLGFBQVEsR0FBcUIsS0FBSyxDQUFDO1FBRTVDLG1GQUFtRjtRQUMxRSwwQkFBcUIsR0FBMEIsRUFBRSxDQUFDO1FB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aEIsS0FBSztnQkFHRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb24sXG4gIFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbSxcbn0gZnJvbSAnLi90ZXN0LWNhc2UtZGV0YWlscy5tb2RlbHMnO1xuaW1wb3J0IHtcbiAgVGVzdENhc2VEZXRhaWxzRWRpdEZvcm1EYXRhLFxuICBTZWxlY3RDb25maWdPdmVycmlkZXMsXG59IGZyb20gJy4vdGVzdC1jYXNlLWRldGFpbHMtZWRpdC90ZXN0LWNhc2UtZGV0YWlscy1lZGl0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS10ZXN0LWNhc2UtZGV0YWlscycsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXN0LWNhc2UtZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUZXN0Q2FzZURldGFpbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKiogV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGluIGVkaXQgbW9kZSAqL1xuICBlZGl0aW5nID0gZmFsc2U7XG5cbiAgLyoqIFdoZW4gdHJ1ZSwgc3RhcnQgaW4gZWRpdCBtb2RlICh1c2VmdWwgZm9yIFN0b3J5Ym9vaykuICovXG4gIEBJbnB1dCgpIHN0YXJ0SW5FZGl0TW9kZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGFydEluRWRpdE1vZGUpIHtcbiAgICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XG4gICAgfVxuICB9XG4gIC8qKiBEZXNjcmlwdGlvbiBzZWN0aW9uIHRpdGxlICovXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uVGl0bGUgPSAnRGVzY3JpcHRpb24nO1xuXG4gIC8qKiBEZXNjcmlwdGlvbiB0ZXh0IGNvbnRlbnQgKi9cbiAgQElucHV0KCkgZGVzY3JpcHRpb25Db250ZW50ID0gJyc7XG5cbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyB0aGUgRWRpdCBidXR0b24gaW4gdGhlIERlc2NyaXB0aW9uIGhlYWRlciAqL1xuICBASW5wdXQoKSBzaG93RWRpdEJ1dHRvbiA9IGZhbHNlO1xuXG4gIC8qKiBNZXRhZGF0YSBpdGVtcyAoY3JlYXRlZE9uLCBzdGF0dXMsIHByaW9yaXR5LCBlbnZpcm9ubWVudCwgdmVyc2lvbiwgdGVzdFBsYW5OYW1lLCBldGMuKSAqL1xuICBASW5wdXQoKSBtZXRhZGF0YUl0ZW1zOiBUZXN0Q2FzZURldGFpbHNNZXRhZGF0YUl0ZW1bXSA9IFtdO1xuXG4gIC8qKiBMYWJlbHMvdGFncyAoZS5nLiBBdXRvbWF0aW9uLCBBUEksIFNESywgVUkvVVgpICovXG4gIEBJbnB1dCgpIGxhYmVsczogc3RyaW5nW10gPSBbXTtcblxuICAvKiogQ29uZmlndXJhdGlvbiBzZWN0aW9uIHRpdGxlICovXG4gIEBJbnB1dCgpIGNvbmZpZ1RpdGxlID0gJ0NvbmZpZ3VyYXRpb24nO1xuXG4gIC8qKiBDb25maWd1cmF0aW9uIHNlY3Rpb25zIChlLmcuIEV4ZWN1dGlvbiwgQUkgQ29uZmlndXJhdGlvbikgKi9cbiAgQElucHV0KCkgY29uZmlnU2VjdGlvbnM6IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb25bXSA9IFtdO1xuXG4gIC8qKiBPcHRpb25hbCBjb25maWcgc2VjdGlvbnMgZGlzcGxheWVkIGluIGEgMi1jb2x1bW4gcm93IChlLmcuIFdhaXRzICYgUmV0cmllcywgRGV2aWNlKSAqL1xuICBASW5wdXQoKSBjb25maWdTZWN0aW9uc1JvdzI6IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb25bXSA9IFtdO1xuICAvKiogUGxhdGZvcm06ICd3ZWInIG9yICdtb2JpbGUnLiBEZWZhdWx0cyB0byAnd2ViJy4gVXNlZCBmb3IgRGV2aWNlIFNldHRpbmdzIGZpZWxkcy4gKi9cbiAgQElucHV0KCkgcGxhdGZvcm06ICd3ZWInIHwgJ21vYmlsZScgPSAnd2ViJztcblxuICAvKiogT3ZlcnJpZGUgY29uZmlnIHBlciBzZWxlY3QgZm9yIEFQSS1kcml2ZW4gb3B0aW9ucywgc2VydmVyIHNlYXJjaCwgbG9hZCBtb3JlLiAqL1xuICBASW5wdXQoKSBzZWxlY3RDb25maWdPdmVycmlkZXM6IFNlbGVjdENvbmZpZ092ZXJyaWRlcyA9IHt9O1xuXG4gIEBPdXRwdXQoKSBlZGl0RGVzY3JpcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzYXZlQ2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXI8VGVzdENhc2VEZXRhaWxzRWRpdEZvcm1EYXRhPigpO1xuICBAT3V0cHV0KCkgbWV0YWRhdGFMaW5rQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdFNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZzsgcXVlcnk6IHN0cmluZyB9PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0TG9hZE1vcmUgPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5OiBzdHJpbmc7IHF1ZXJ5OiBzdHJpbmcgfT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdE9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZyB9PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9PigpO1xuXG4gIG9uRWRpdENsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuZWRpdERlc2NyaXB0aW9uLmVtaXQoKTtcbiAgfVxuXG4gIG9uU2F2ZUNoYW5nZXMoZGF0YTogVGVzdENhc2VEZXRhaWxzRWRpdEZvcm1EYXRhKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc2F2ZUNoYW5nZXMuZW1pdChkYXRhKTtcbiAgfVxuXG4gIG9uQ2FuY2VsRWRpdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICB0cmFja0J5Q29uZmlnVGl0bGUoX2k6IG51bWJlciwgc2VjdGlvbjogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNlY3Rpb24udGl0bGU7XG4gIH1cblxuICB0cmFja0J5TWV0YWRhdGFMYWJlbChfaTogbnVtYmVyLCBpdGVtOiBUZXN0Q2FzZURldGFpbHNNZXRhZGF0YUl0ZW0pOiBzdHJpbmcge1xuICAgIHJldHVybiBpdGVtLmxhYmVsO1xuICB9XG5cblxuICBvbk1ldGFkYXRhTGlua0NsaWNrKGl0ZW06IFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbSk6IHZvaWQge1xuICAgIGlmIChpdGVtLmxpbmspIHtcbiAgICAgIHRoaXMubWV0YWRhdGFMaW5rQ2xpY2suZW1pdChpdGVtKTtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0dXNEb3RDbGFzcyhpdGVtOiBUZXN0Q2FzZURldGFpbHNNZXRhZGF0YUl0ZW0pOiBzdHJpbmcge1xuICAgIGlmICghaXRlbS5zdGF0dXNDb2xvcikgcmV0dXJuICcnO1xuICAgIHN3aXRjaCAoaXRlbS5zdGF0dXNDb2xvcikge1xuICAgICAgY2FzZSAneWVsbG93JzpcbiAgICAgICAgcmV0dXJuICdjcWEtYmctWyNFQUIzMDhdJztcbiAgICAgIGNhc2UgJ3JlZCc6XG4gICAgICAgIHJldHVybiAnY3FhLWJnLVsjREMyNjI2XSc7XG4gICAgICBjYXNlICdncmVlbic6XG4gICAgICAgIHJldHVybiAnY3FhLWJnLVsjMTZBMzRBXSc7XG4gICAgICBjYXNlICdncmF5JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnY3FhLWJnLVsjOTRBM0I4XSc7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRleHQgY29sb3IgZm9yIG1ldGFkYXRhIHZhbHVlIChlLmcuIHJlZCBmb3IgY3JpdGljYWwgcHJpb3JpdHkpICovXG4gIGdldFZhbHVlVGV4dENsYXNzKGl0ZW06IFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbSk6IHN0cmluZyB7XG4gICAgaWYgKGl0ZW0uc3RhdHVzQ29sb3IgPT09ICdyZWQnKSB7XG4gICAgICByZXR1cm4gJ2NxYS10ZXh0LVsjREMyNjI2XSc7XG4gICAgfVxuICAgIHJldHVybiAnY3FhLXRleHQtWyMxMTE4MjddJztcbiAgfVxufVxuIiwiPCEtLSBFZGl0IG1vZGU6IHNob3cgZWRpdCBmb3JtIChGaWdtYSBkZXNpZ24pIC0tPlxuPGNxYS10ZXN0LWNhc2UtZGV0YWlscy1lZGl0XG4gICpuZ0lmPVwiZWRpdGluZ1wiXG4gIFtkZXNjcmlwdGlvblRpdGxlXT1cImRlc2NyaXB0aW9uVGl0bGVcIlxuICBbZGVzY3JpcHRpb25Db250ZW50XT1cImRlc2NyaXB0aW9uQ29udGVudFwiXG4gIFttZXRhZGF0YUl0ZW1zXT1cIm1ldGFkYXRhSXRlbXNcIlxuICBbbGFiZWxzXT1cImxhYmVsc1wiXG4gIFtjb25maWdUaXRsZV09XCJjb25maWdUaXRsZVwiXG4gIFtjb25maWdTZWN0aW9uc109XCJjb25maWdTZWN0aW9uc1wiXG4gIFtjb25maWdTZWN0aW9uc1JvdzJdPVwiY29uZmlnU2VjdGlvbnNSb3cyXCJcbiAgW3BsYXRmb3JtXT1cInBsYXRmb3JtXCJcbiAgW3NlbGVjdENvbmZpZ092ZXJyaWRlc109XCJzZWxlY3RDb25maWdPdmVycmlkZXNcIlxuICAoc2F2ZSk9XCJvblNhdmVDaGFuZ2VzKCRldmVudClcIlxuICAoY2FuY2VsKT1cIm9uQ2FuY2VsRWRpdCgpXCJcbiAgKHNlbGVjdFNlYXJjaCk9XCJzZWxlY3RTZWFyY2guZW1pdCgkZXZlbnQpXCJcbiAgKHNlbGVjdExvYWRNb3JlKT1cInNlbGVjdExvYWRNb3JlLmVtaXQoJGV2ZW50KVwiXG4gIChzZWxlY3RPcGVuZWQpPVwic2VsZWN0T3BlbmVkLmVtaXQoJGV2ZW50KVwiXG4gIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0aW9uQ2hhbmdlLmVtaXQoJGV2ZW50KVwiPlxuPC9jcWEtdGVzdC1jYXNlLWRldGFpbHMtZWRpdD5cblxuPCEtLSBWaWV3IG1vZGU6IHJlYWQtb25seSBkZXRhaWxzIC0tPlxuPGRpdiAqbmdJZj1cIiFlZGl0aW5nXCIgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1weS00IGNxYS1weC0wIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtanVzdGlmeS1zdGFydCBjcWEtaXRlbXMtc3RhcnQgY3FhLWdhcC00IGNxYS1vdmVyZmxvdy1oaWRkZW4gY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF1cIj5cbiAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTQgY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF1cIj5cbiAgICA8IS0tIERlc2NyaXB0aW9uIFNlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTIuNVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWlubGluZS1mbGV4IGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctNSBjcWEtaC01IGNxYS1wLTEgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJnLVsjM0Y0M0VFMUFdIGNxYS1yb3VuZGVkLW1kIGNxYS1pbmxpbmUtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyMxQjFGRUJdIGNxYS10ZXh0LVsxMnB4XSBjcWEtdy0zIGNxYS1oLTMgY3FhLWxlYWRpbmctbm9uZSBjcWEtYmxvY2tcIj5kZXNjcmlwdGlvbjwvbWF0LWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bIzM3NDE1MV0gY3FhLXRleHQtc20gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWxlYWRpbmctWzE5LjZweF1cIj57eyBkZXNjcmlwdGlvblRpdGxlIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd0VkaXRCdXR0b25cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktZW5kIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS10ZXh0LVsjQTNBM0EzXSBjcWEtdGV4dC14cyBjcWEtZm9udC1zZW1pYm9sZCBob3ZlcjpjcWEtdGV4dC1bIzczNzM3M10gY3FhLXRyYW5zaXRpb24tY29sb3JzIGZvY3VzOmNxYS1vdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpjcWEtcmluZy0yIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctWyMzRjQzRUVdIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctb2Zmc2V0LTJcIlxuICAgICAgICAgIChjbGljayk9XCJvbkVkaXRDbGljaygpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS13LTQgY3FhLWgtNFwiPmVkaXQ8L21hdC1pY29uPlxuICAgICAgICAgIEVkaXRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJkZXNjcmlwdGlvbkNvbnRlbnRcIiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXNlbGYtc3RyZXRjaCBjcWEtdGV4dC1bIzExMTgyN10gY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLWZvbnQtbm9ybWFsXCI+e3sgZGVzY3JpcHRpb25Db250ZW50IH19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTWV0YWRhdGEgU2VjdGlvbiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwibWV0YWRhdGFJdGVtcy5sZW5ndGhcIiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTIuNVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWdyaWQgY3FhLWdyaWQtY29scy0zIGNxYS1nYXAteC0wIGNxYS1nYXAteS00XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbWV0YWRhdGFJdGVtczsgdHJhY2tCeTogdHJhY2tCeU1ldGFkYXRhTGFiZWxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTAuNVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtdGV4dC14cyBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtXCI+e3sgaXRlbS5sYWJlbCB9fTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yLjUgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpdGVtLmljb24gJiYgKCFpdGVtLmljb25MaWJyYXJ5IHx8IGl0ZW0uaWNvbkxpYnJhcnkgPT09ICdtYXQnKVwiIGNsYXNzPVwiY3FhLXRleHQtWyM2QjcyODBdIGNxYS10ZXh0LXNtIGNxYS13LTQgY3FhLWgtNFwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0uaWNvbiB9fVxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0uc3RhdHVzQ29sb3JcIiBjbGFzcz1cImNxYS13LTMuNSBjcWEtaC0zLjUgY3FhLXJvdW5kZWQtZnVsbCBjcWEtZmxleC1zaHJpbmstMFwiIFtuZ0NsYXNzXT1cImdldFN0YXR1c0RvdENsYXNzKGl0ZW0pXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5saW5rXCJcbiAgICAgICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS10ZXh0LVsjMjU2M0VCXSBjcWEtdGV4dC14cyBjcWEtbGVhZGluZy1bMTJweF0gY3FhLWZvbnQtbm9ybWFsIGhvdmVyOmNxYS11bmRlcmxpbmUgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1ibG9jayBjcWEtdHJ1bmNhdGUgY3FhLW1pbi13LTBcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1ldGFkYXRhTGlua0NsaWNrKGl0ZW0pOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0udmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpdGVtLmxpbmtcIiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS1sZWFkaW5nLVsxMnB4XSBjcWEtZm9udC1ub3JtYWxcIiBbbmdDbGFzc109XCJnZXRWYWx1ZVRleHRDbGFzcyhpdGVtKVwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0udmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIExhYmVscyAoRmlnbWE6IExhYmVscyB0aXRsZSwgY3FhLWJhZGdlIGNoaXBzIHdpdGggdGFnIGljb24pIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJsYWJlbHMubGVuZ3RoXCIgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtanVzdGlmeS1zdGFydCBjcWEtaXRlbXMtc3RhcnQgY3FhLWdhcC0yIGNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjMTExODI3XSBjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLWxlYWRpbmctNVwiPkxhYmVsczwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC13cmFwIGNxYS1nYXAtMlwiPlxuICAgICAgICA8Y3FhLWJhZGdlXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGxhYmVsIG9mIGxhYmVsc1wiXG4gICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICBpY29uPVwibGFiZWxcIlxuICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcj1cIiNmZmZmZmZcIlxuICAgICAgICAgIHRleHRDb2xvcj1cIiM0NzU1NjlcIlxuICAgICAgICAgIGJvcmRlckNvbG9yPVwiI0UyRThGMFwiXG4gICAgICAgICAgaWNvbkNvbG9yPVwiIzk0QTNCOFwiPlxuICAgICAgICA8L2NxYS1iYWRnZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDb25maWd1cmF0aW9uIFNlY3Rpb24gLS0+XG4gICAgPGRpdiAqbmdJZj1cImNvbmZpZ1NlY3Rpb25zLmxlbmd0aCB8fCBjb25maWdTZWN0aW9uc1JvdzIubGVuZ3RoXCIgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtanVzdGlmeS1zdGFydCBjcWEtaXRlbXMtc3RhcnQgY3FhLWdhcC0yLjVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1pbmxpbmUtZmxleCBjcWEtanVzdGlmeS1zdGFydCBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdy01IGNxYS1oLTUgY3FhLXAtMSBjcWEtZmxleC1zaHJpbmstMCBjcWEtYmctWyMzRjQzRUUxQV0gY3FhLXJvdW5kZWQtbWQgY3FhLWlubGluZS1mbGV4IGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzFCMUZFQl0gY3FhLXRleHQtWzEycHhdIGNxYS13LTMgY3FhLWgtMyBjcWEtbGVhZGluZy1ub25lIGNxYS1ibG9ja1wiPnNldHRpbmdzPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjMzc0MTUxXSBjcWEtdGV4dC1zbSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtbGVhZGluZy1bMTkuNnB4XVwiPnt7IGNvbmZpZ1RpdGxlIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTIuNVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXNlbGYtc3RyZXRjaCBjcWEtZ3JpZCBjcWEtZ3JpZC1jb2xzLTEgY3FhLWdhcC0yLjVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIGNvbmZpZ1NlY3Rpb25zOyB0cmFja0J5OiB0cmFja0J5Q29uZmlnVGl0bGVcIj5cbiAgICAgICAgICAgIDxjcWEtY29uZmlndXJhdGlvbi1jYXJkXG4gICAgICAgICAgICAgIFtpY29uXT1cInNlY3Rpb24uaWNvbiB8fCAndHVuZSdcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwic2VjdGlvbi50aXRsZVwiXG4gICAgICAgICAgICAgIFtkYXRhXT1cInNlY3Rpb24uaXRlbXNcIj5cbiAgICAgICAgICAgIDwvY3FhLWNvbmZpZ3VyYXRpb24tY2FyZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjb25maWdTZWN0aW9uc1JvdzIubGVuZ3RoXCIgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTQgY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF1cIj5cbiAgICAgICAgICA8Y3FhLWNvbmZpZ3VyYXRpb24tY2FyZFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgY29uZmlnU2VjdGlvbnNSb3cyOyB0cmFja0J5OiB0cmFja0J5Q29uZmlnVGl0bGVcIlxuICAgICAgICAgICAgW2ljb25dPVwic2VjdGlvbi5pY29uIHx8ICd0dW5lJ1wiXG4gICAgICAgICAgICBbdGl0bGVdPVwic2VjdGlvbi50aXRsZVwiXG4gICAgICAgICAgICBbZGF0YV09XCJzZWN0aW9uLml0ZW1zXCI+XG4gICAgICAgICAgPC9jcWEtY29uZmlndXJhdGlvbi1jYXJkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,167 @@
1
+ /** Default status value -> dot color. Override via BuildTestCaseDetailsOptions. */
2
+ export const DEFAULT_STATUS_COLOR_CONFIG = {
3
+ active: 'green',
4
+ inactive: 'gray',
5
+ pending: 'yellow',
6
+ completed: 'green',
7
+ 'in review': 'yellow',
8
+ draft: 'gray',
9
+ approved: 'green',
10
+ rejected: 'red',
11
+ blocked: 'red',
12
+ 'in progress': 'yellow',
13
+ done: 'green',
14
+ };
15
+ /** Default priority value -> dot color. Override via BuildTestCaseDetailsOptions. */
16
+ export const DEFAULT_PRIORITY_COLOR_CONFIG = {
17
+ critical: 'red',
18
+ major: 'red',
19
+ high: 'red',
20
+ medium: 'yellow',
21
+ low: 'green',
22
+ minor: 'green',
23
+ 'not set': 'gray',
24
+ p0: 'red',
25
+ p1: 'yellow',
26
+ p2: 'green',
27
+ p3: 'gray',
28
+ };
29
+ /**
30
+ * API field names for mapping test case data to cqa-test-case-details.
31
+ * Use these when building metadataItems and configSections from your API response.
32
+ */
33
+ export const TEST_CASE_DETAILS_FIELD_MAP = {
34
+ /** Metadata (description section) */
35
+ metadata: {
36
+ createdOn: 'createdOn',
37
+ status: 'status',
38
+ priority: 'priority',
39
+ environment: 'environment',
40
+ version: 'version',
41
+ platform: 'platform',
42
+ labels: 'labels',
43
+ },
44
+ /** Execution config */
45
+ execution: {
46
+ prerequisiteCase: 'prerequisiteCase',
47
+ defaultBrowser: 'defaultBrowser',
48
+ videoRecording: 'videoRecording',
49
+ testCaseTimeout: 'testCaseTimeout',
50
+ waitTimeoutForLocators: 'waitTimeoutForLocators',
51
+ webBrowser: 'webBrowser',
52
+ viewport: 'viewport',
53
+ },
54
+ /** AI Configuration */
55
+ aiConfig: {
56
+ enableAiSmartness: 'enableAiSmartness',
57
+ defaultAiAction: 'defaultAiAction',
58
+ knowledgeBaseDefaultTestCase: 'knowledgeBaseDefaultTestCase',
59
+ useAiMetadata: 'useAiMetadata',
60
+ },
61
+ /** Waits & Retries */
62
+ waitsRetries: {
63
+ autoWait: 'autoWait',
64
+ retryFailedSteps: 'retryFailedSteps',
65
+ },
66
+ /** Device */
67
+ device: {
68
+ platform: 'platform',
69
+ deviceType: 'deviceType',
70
+ deviceOS: 'deviceOS',
71
+ defaultBrowser: 'defaultBrowser',
72
+ defaultViewport: 'defaultViewport',
73
+ viewport: 'viewport',
74
+ },
75
+ };
76
+ /**
77
+ * Build metadataItems and configSections from API data for cqa-test-case-details.
78
+ * Use in ts-portal when mapping test case API response to component inputs.
79
+ */
80
+ export function buildTestCaseDetailsFromApi(data, options) {
81
+ const formatDate = (v) => v ? (typeof v === 'string' ? v : v.toISOString?.() ?? String(v)) : '';
82
+ const statusConfig = { ...DEFAULT_STATUS_COLOR_CONFIG, ...options?.statusColorConfig };
83
+ const priorityConfig = { ...DEFAULT_PRIORITY_COLOR_CONFIG, ...options?.priorityColorConfig };
84
+ const resolveColor = (value, config) => config[value.toLowerCase().trim()] ?? 'gray';
85
+ const metadataItems = [];
86
+ if (data.createdOn != null)
87
+ metadataItems.push({ label: 'Created on', value: formatDate(data.createdOn), icon: 'calendar_today' });
88
+ if (data.status != null)
89
+ metadataItems.push({ label: 'Status', value: data.status, statusColor: resolveColor(data.status, statusConfig) });
90
+ if (data.priority != null)
91
+ metadataItems.push({ label: 'Priority', value: data.priority, statusColor: resolveColor(data.priority, priorityConfig) });
92
+ if (data.environment != null)
93
+ metadataItems.push({ label: 'Environment', value: data.environment, icon: 'storage' });
94
+ if (data.version != null)
95
+ metadataItems.push({ label: 'Version', value: data.version, icon: 'label' });
96
+ if (data.platform != null)
97
+ metadataItems.push({
98
+ label: 'Platform',
99
+ value: data.platform === 'web' ? 'web' : 'iOS',
100
+ icon: 'devices',
101
+ });
102
+ const configSections = [
103
+ {
104
+ title: 'Execution',
105
+ icon: 'play_circle',
106
+ items: [
107
+ { label: 'Prerequisite Case', value: data.prerequisiteCase ?? null },
108
+ { label: 'Video Recording', value: data.videoRecording ?? '' },
109
+ ],
110
+ },
111
+ {
112
+ title: 'AI Configuration',
113
+ icon: 'smart_toy',
114
+ items: [
115
+ { label: 'Enable AI Smartness', value: data.enableAiSmartness ?? '' },
116
+ { label: 'Default AI Action', value: data.defaultAiAction ?? '' },
117
+ { label: 'Knowledge Base Default Test Case', value: data.knowledgeBaseDefaultTestCase ?? null },
118
+ { label: 'Enable AI metadata collection', value: data.useAiMetadata ?? '' },
119
+ ],
120
+ },
121
+ ];
122
+ const configSectionsRow2 = [
123
+ {
124
+ title: 'Wait and retries',
125
+ icon: 'timer',
126
+ items: [
127
+ { label: 'Enable Avoid Auto wait for steps', value: data.autoWaitEnabled ?? false },
128
+ { label: 'Retry Failed Steps', value: data.retryFailedSteps ?? '' },
129
+ { label: 'Test Case Timeout (minutes)', value: data.testCaseTimeout ?? '' },
130
+ { label: 'Wait Timeout for Locators (secs)', value: data.waitTimeoutForLocators ?? '' },
131
+ ],
132
+ },
133
+ {
134
+ title: 'Device Setting',
135
+ icon: 'devices',
136
+ items: (() => {
137
+ const platform = data.platform ?? 'web';
138
+ if (platform === 'web') {
139
+ return [
140
+ { label: 'Default Browser', value: data.defaultBrowser ?? data.webBrowser ?? '' },
141
+ { label: 'Default Viewport', value: data.defaultViewport ?? data.viewport ?? '' },
142
+ ];
143
+ }
144
+ return [
145
+ { label: 'Default OS', value: data.deviceOS ?? '' },
146
+ { label: 'Default Phone', value: data.deviceType ?? '' },
147
+ ];
148
+ })(),
149
+ },
150
+ {
151
+ title: 'Key Flags',
152
+ icon: 'flag',
153
+ items: [
154
+ { label: 'Mobile Testing', value: data.mobileTesting ?? '' },
155
+ { label: 'Extension Use', value: data.extensionUse ?? '' },
156
+ { label: 'Data Driven', value: data.dataDriven ?? '' },
157
+ ],
158
+ },
159
+ ];
160
+ return {
161
+ metadataItems,
162
+ labels: data.labels ?? [],
163
+ configSections,
164
+ configSectionsRow2,
165
+ };
166
+ }
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy90ZXN0LWNhc2UtZGV0YWlscy5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc0JBLG1GQUFtRjtBQUNuRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBbUM7SUFDekUsTUFBTSxFQUFFLE9BQU87SUFDZixRQUFRLEVBQUUsTUFBTTtJQUNoQixPQUFPLEVBQUUsUUFBUTtJQUNqQixTQUFTLEVBQUUsT0FBTztJQUNsQixXQUFXLEVBQUUsUUFBUTtJQUNyQixLQUFLLEVBQUUsTUFBTTtJQUNiLFFBQVEsRUFBRSxPQUFPO0lBQ2pCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsT0FBTyxFQUFFLEtBQUs7SUFDZCxhQUFhLEVBQUUsUUFBUTtJQUN2QixJQUFJLEVBQUUsT0FBTztDQUNkLENBQUM7QUFFRixxRkFBcUY7QUFDckYsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQW1DO0lBQzNFLFFBQVEsRUFBRSxLQUFLO0lBQ2YsS0FBSyxFQUFFLEtBQUs7SUFDWixJQUFJLEVBQUUsS0FBSztJQUNYLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLEdBQUcsRUFBRSxPQUFPO0lBQ1osS0FBSyxFQUFFLE9BQU87SUFDZCxTQUFTLEVBQUUsTUFBTTtJQUNqQixFQUFFLEVBQUUsS0FBSztJQUNULEVBQUUsRUFBRSxRQUFRO0lBQ1osRUFBRSxFQUFFLE9BQU87SUFDWCxFQUFFLEVBQUUsTUFBTTtDQUNYLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRztJQUN6QyxxQ0FBcUM7SUFDckMsUUFBUSxFQUFFO1FBQ1IsU0FBUyxFQUFFLFdBQVc7UUFDdEIsTUFBTSxFQUFFLFFBQVE7UUFDaEIsUUFBUSxFQUFFLFVBQVU7UUFDcEIsV0FBVyxFQUFFLGFBQWE7UUFDMUIsT0FB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LEVBQUUsRUFBRTtxQkFDbEYsQ0FBQztpQkFDSDtnQkFDRCxPQUFPO29CQUNMLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUU7b0JBQ25ELEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQUU7aUJBQ3pELENBQUM7WUFDSixDQUFDLENBQUMsRUFBRTtTQUNMO1FBQ0Q7WUFDRSxLQUFLLEVBQUUsV0FBVztZQUNsQixJQUFJLEVBQUUsTUFBTTtZQUNaLEtBQUssRUFBRTtnQkFDTCxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLEVBQUU7Z0JBQzVELEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFLEVBQUU7Z0JBQzFELEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQUU7YUFDdkQ7U0FDRjtLQUNGLENBQUM7SUFFRixPQUFPO1FBQ0wsYUFBYTtRQUNiLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUU7UUFDekIsY0FBYztRQUNkLGtCQUFrQjtLQUNuQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ3VyYXRpb25JdGVtIH0gZnJvbSAnLi4vY29uZmlndXJhdGlvbi1jYXJkL2NvbmZpZ3VyYXRpb24tY2FyZC5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb24ge1xuICB0aXRsZTogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBpdGVtczogQ29uZmlndXJhdGlvbkl0ZW1bXTtcbn1cblxuZXhwb3J0IHR5cGUgU3RhdHVzRG90Q29sb3IgPSAneWVsbG93JyB8ICdyZWQnIHwgJ2dyZWVuJyB8ICdncmF5JztcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0Q2FzZURldGFpbHNNZXRhZGF0YUl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBpY29uTGlicmFyeT86ICdtYXQnIHwgJ2ZhJztcbiAgbGluaz86IHN0cmluZztcbiAgc3RhdHVzQ29sb3I/OiBTdGF0dXNEb3RDb2xvcjtcbn1cblxuLyoqIE1hcHMgc3RhdHVzL3ByaW9yaXR5IHZhbHVlIChsb3dlcmNhc2UpIHRvIGRvdCBjb2xvci4gT3ZlcnJpZGUgdG8gY3VzdG9taXplLiAqL1xuZXhwb3J0IHR5cGUgU3RhdHVzQ29sb3JDb25maWcgPSBQYXJ0aWFsPFJlY29yZDxzdHJpbmcsIFN0YXR1c0RvdENvbG9yPj47XG5cbi8qKiBEZWZhdWx0IHN0YXR1cyB2YWx1ZSAtPiBkb3QgY29sb3IuIE92ZXJyaWRlIHZpYSBCdWlsZFRlc3RDYXNlRGV0YWlsc09wdGlvbnMuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9TVEFUVVNfQ09MT1JfQ09ORklHOiBSZWNvcmQ8c3RyaW5nLCBTdGF0dXNEb3RDb2xvcj4gPSB7XG4gIGFjdGl2ZTogJ2dyZWVuJyxcbiAgaW5hY3RpdmU6ICdncmF5JyxcbiAgcGVuZGluZzogJ3llbGxvdycsXG4gIGNvbXBsZXRlZDogJ2dyZWVuJyxcbiAgJ2luIHJldmlldyc6ICd5ZWxsb3cnLFxuICBkcmFmdDogJ2dyYXknLFxuICBhcHByb3ZlZDogJ2dyZWVuJyxcbiAgcmVqZWN0ZWQ6ICdyZWQnLFxuICBibG9ja2VkOiAncmVkJyxcbiAgJ2luIHByb2dyZXNzJzogJ3llbGxvdycsXG4gIGRvbmU6ICdncmVlbicsXG59O1xuXG4vKiogRGVmYXVsdCBwcmlvcml0eSB2YWx1ZSAtPiBkb3QgY29sb3IuIE92ZXJyaWRlIHZpYSBCdWlsZFRlc3RDYXNlRGV0YWlsc09wdGlvbnMuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9QUklPUklUWV9DT0xPUl9DT05GSUc6IFJlY29yZDxzdHJpbmcsIFN0YXR1c0RvdENvbG9yPiA9IHtcbiAgY3JpdGljYWw6ICdyZWQnLFxuICBtYWpvcjogJ3JlZCcsXG4gIGhpZ2g6ICdyZWQnLFxuICBtZWRpdW06ICd5ZWxsb3cnLFxuICBsb3c6ICdncmVlbicsXG4gIG1pbm9yOiAnZ3JlZW4nLFxuICAnbm90IHNldCc6ICdncmF5JyxcbiAgcDA6ICdyZWQnLFxuICBwMTogJ3llbGxvdycsXG4gIHAyOiAnZ3JlZW4nLFxuICBwMzogJ2dyYXknLFxufTtcblxuLyoqXG4gKiBBUEkgZmllbGQgbmFtZXMgZm9yIG1hcHBpbmcgdGVzdCBjYXNlIGRhdGEgdG8gY3FhLXRlc3QtY2FzZS1kZXRhaWxzLlxuICogVXNlIHRoZXNlIHdoZW4gYnVpbGRpbmcgbWV0YWRhdGFJdGVtcyBhbmQgY29uZmlnU2VjdGlvbnMgZnJvbSB5b3VyIEFQSSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFRFU1RfQ0FTRV9ERVRBSUxTX0ZJRUxEX01BUCA9IHtcbiAgLyoqIE1ldGFkYXRhIChkZXNjcmlwdGlvbiBzZWN0aW9uKSAqL1xuICBtZXRhZGF0YToge1xuICAgIGNyZWF0ZWRPbjogJ2NyZWF0ZWRPbicsXG4gICAgc3RhdHVzOiAnc3RhdHVzJyxcbiAgICBwcmlvcml0eTogJ3ByaW9yaXR5JyxcbiAgICBlbnZpcm9ubWVudDogJ2Vudmlyb25tZW50JyxcbiAgICB2ZXJzaW9uOiAndmVyc2lvbicsXG4gICAgcGxhdGZvcm06ICdwbGF0Zm9ybScsXG4gICAgbGFiZWxzOiAnbGFiZWxzJyxcbiAgfSxcbiAgLyoqIEV4ZWN1dGlvbiBjb25maWcgKi9cbiAgZXhlY3V0aW9uOiB7XG4gICAgcHJlcmVxdWlzaXRlQ2FzZTogJ3ByZXJlcXVpc2l0ZUNhc2UnLFxuICAgIGRlZmF1bHRCcm93c2VyOiAnZGVmYXVsdEJyb3dzZXInLFxuICAgIHZpZGVvUmVjb3JkaW5nOiAndmlkZW9SZWNvcmRpbmcnLFxuICAgIHRlc3RDYXNlVGltZW91dDogJ3Rlc3RDYXNlVGltZW91dCcsXG4gICAgd2FpdFRpbWVvdXRGb3JMb2NhdG9yczogJ3dhaXRUaW1lb3V0Rm9yTG9jYXRvcnMnLFxuICAgIHdlYkJyb3dzZXI6ICd3ZWJCcm93c2VyJyxcbiAgICB2aWV3cG9ydDogJ3ZpZXdwb3J0JyxcbiAgfSxcbiAgLyoqIEFJIENvbmZpZ3VyYXRpb24gKi9cbiAgYWlDb25maWc6IHtcbiAgICBlbmFibGVBaVNtYXJ0bmVzczogJ2VuYWJsZUFpU21hcnRuZXNzJyxcbiAgICBkZWZhdWx0QWlBY3Rpb246ICdkZWZhdWx0QWlBY3Rpb24nLFxuICAgIGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2U6ICdrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlJyxcbiAgICB1c2VBaU1ldGFkYXRhOiAndXNlQWlNZXRhZGF0YScsXG4gIH0sXG4gIC8qKiBXYWl0cyAmIFJldHJpZXMgKi9cbiAgd2FpdHNSZXRyaWVzOiB7XG4gICAgYXV0b1dhaXQ6ICdhdXRvV2FpdCcsXG4gICAgcmV0cnlGYWlsZWRTdGVwczogJ3JldHJ5RmFpbGVkU3RlcHMnLFxuICB9LFxuICAvKiogRGV2aWNlICovXG4gIGRldmljZToge1xuICAgIHBsYXRmb3JtOiAncGxhdGZvcm0nLFxuICAgIGRldmljZVR5cGU6ICdkZXZpY2VUeXBlJyxcbiAgICBkZXZpY2VPUzogJ2RldmljZU9TJyxcbiAgICBkZWZhdWx0QnJvd3NlcjogJ2RlZmF1bHRCcm93c2VyJyxcbiAgICBkZWZhdWx0Vmlld3BvcnQ6ICdkZWZhdWx0Vmlld3BvcnQnLFxuICAgIHZpZXdwb3J0OiAndmlld3BvcnQnLFxuICB9LFxufSBhcyBjb25zdDtcblxuLyoqIEFQSSByZXNwb25zZSBzaGFwZSBmb3IgdGVzdCBjYXNlIGRldGFpbHMuIE1hcCB5b3VyIEFQSSBmaWVsZHMgdG8gdGhpcyBzdHJ1Y3R1cmUuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RDYXNlRGV0YWlsc0FwaURhdGEge1xuICBjcmVhdGVkT24/OiBzdHJpbmcgfCBEYXRlO1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIHByaW9yaXR5Pzogc3RyaW5nO1xuICBlbnZpcm9ubWVudD86IHN0cmluZztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgdGVzdFBsYW5OYW1lPzogc3RyaW5nO1xuICB0ZXN0UGxhblJlZGlyZWN0VXJsPzogc3RyaW5nO1xuICBsYWJlbHM/OiBzdHJpbmdbXTtcbiAgcHJlcmVxdWlzaXRlQ2FzZT86IHN0cmluZyB8IG51bGw7XG4gIGRlZmF1bHRCcm93c2VyPzogc3RyaW5nO1xuICB2aWRlb1JlY29yZGluZz86IGJvb2xlYW4gfCBzdHJpbmc7XG4gIHRlc3RDYXNlVGltZW91dD86IHN0cmluZztcbiAgd2FpdFRpbWVvdXRGb3JMb2NhdG9ycz86IHN0cmluZztcbiAgd2ViQnJvd3Nlcj86IHN0cmluZztcbiAgdmlld3BvcnQ/OiBzdHJpbmc7XG4gIGVuYWJsZUFpU21hcnRuZXNzPzogc3RyaW5nO1xuICBkZWZhdWx0QWlBY3Rpb24/OiBzdHJpbmc7XG4gIGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2U/OiBzdHJpbmcgfCBudWxsO1xuICB1c2VBaU1ldGFkYXRhPzogc3RyaW5nO1xuICBhdXRvV2FpdD86IHN0cmluZztcbiAgYXV0b1dhaXRFbmFibGVkPzogYm9vbGVhbjtcbiAgcmV0cnlGYWlsZWRTdGVwcz86IHN0cmluZztcbiAgcGxhdGZvcm0/OiAnd2ViJyB8ICdtb2JpbGUnO1xuICBkZXZpY2VUeXBlPzogc3RyaW5nO1xuICBkZXZpY2VPUz86IHN0cmluZztcbiAgZGVmYXVsdFZpZXdwb3J0Pzogc3RyaW5nO1xuICAvKiogS2V5IEZsYWdzICovXG4gIG1vYmlsZVRlc3Rpbmc/OiBzdHJpbmcgfCBib29sZWFuO1xuICBleHRlbnNpb25Vc2U/OiBzdHJpbmcgfCBib29sZWFuO1xuICBkYXRhRHJpdmVuPzogc3RyaW5nIHwgYm9vbGVhbjtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIGJ1aWxkVGVzdENhc2VEZXRhaWxzRnJvbUFwaSAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZFRlc3RDYXNlRGV0YWlsc09wdGlvbnMge1xuICAvKiogT3ZlcnJpZGUgc3RhdHVzIHZhbHVlIC0+IGRvdCBjb2xvci4gTWVyZ2VkIHdpdGggZGVmYXVsdHMuICovXG4gIHN0YXR1c0NvbG9yQ29uZmlnPzogU3RhdHVzQ29sb3JDb25maWc7XG4gIC8qKiBPdmVycmlkZSBwcmlvcml0eSB2YWx1ZSAtPiBkb3QgY29sb3IuIE1lcmdlZCB3aXRoIGRlZmF1bHRzLiAqL1xuICBwcmlvcml0eUNvbG9yQ29uZmlnPzogU3RhdHVzQ29sb3JDb25maWc7XG59XG5cbi8qKlxuICogQnVpbGQgbWV0YWRhdGFJdGVtcyBhbmQgY29uZmlnU2VjdGlvbnMgZnJvbSBBUEkgZGF0YSBmb3IgY3FhLXRlc3QtY2FzZS1kZXRhaWxzLlxuICogVXNlIGluIHRzLXBvcnRhbCB3aGVuIG1hcHBpbmcgdGVzdCBjYXNlIEFQSSByZXNwb25zZSB0byBjb21wb25lbnQgaW5wdXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUZXN0Q2FzZURldGFpbHNGcm9tQXBpKFxuICBkYXRhOiBUZXN0Q2FzZURldGFpbHNBcGlEYXRhLFxuICBvcHRpb25zPzogQnVpbGRUZXN0Q2FzZURldGFpbHNPcHRpb25zXG4pOiB7XG4gIG1ldGFkYXRhSXRlbXM6IFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbVtdO1xuICBsYWJlbHM6IHN0cmluZ1tdO1xuICBjb25maWdTZWN0aW9uczogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbltdO1xuICBjb25maWdTZWN0aW9uc1JvdzI6IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb25bXTtcbn0ge1xuICBjb25zdCBmb3JtYXREYXRlID0gKHY6IHN0cmluZyB8IERhdGUgfCB1bmRlZmluZWQpID0+XG4gICAgdiA/ICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyB2IDogKHYgYXMgRGF0ZSkudG9JU09TdHJpbmc/LigpID8/IFN0cmluZyh2KSkgOiAnJztcblxuICBjb25zdCBzdGF0dXNDb25maWcgPSB7IC4uLkRFRkFVTFRfU1RBVFVTX0NPTE9SX0NPTkZJRywgLi4ub3B0aW9ucz8uc3RhdHVzQ29sb3JDb25maWcgfTtcbiAgY29uc3QgcHJpb3JpdHlDb25maWcgPSB7IC4uLkRFRkFVTFRfUFJJT1JJVFlfQ09MT1JfQ09ORklHLCAuLi5vcHRpb25zPy5wcmlvcml0eUNvbG9yQ29uZmlnIH07XG4gIGNvbnN0IHJlc29sdmVDb2xvciA9ICh2YWx1ZTogc3RyaW5nLCBjb25maWc6IFBhcnRpYWw8UmVjb3JkPHN0cmluZywgU3RhdHVzRG90Q29sb3I+Pik6IFN0YXR1c0RvdENvbG9yID0+XG4gICAgY29uZmlnW3ZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpXSA/PyAnZ3JheSc7XG5cbiAgY29uc3QgbWV0YWRhdGFJdGVtczogVGVzdENhc2VEZXRhaWxzTWV0YWRhdGFJdGVtW10gPSBbXTtcbiAgaWYgKGRhdGEuY3JlYXRlZE9uICE9IG51bGwpXG4gICAgbWV0YWRhdGFJdGVtcy5wdXNoKHsgbGFiZWw6ICdDcmVhdGVkIG9uJywgdmFsdWU6IGZvcm1hdERhdGUoZGF0YS5jcmVhdGVkT24pLCBpY29uOiAnY2FsZW5kYXJfdG9kYXknIH0pO1xuICBpZiAoZGF0YS5zdGF0dXMgIT0gbnVsbClcbiAgICBtZXRhZGF0YUl0ZW1zLnB1c2goeyBsYWJlbDogJ1N0YXR1cycsIHZhbHVlOiBkYXRhLnN0YXR1cywgc3RhdHVzQ29sb3I6IHJlc29sdmVDb2xvcihkYXRhLnN0YXR1cywgc3RhdHVzQ29uZmlnKSB9KTtcbiAgaWYgKGRhdGEucHJpb3JpdHkgIT0gbnVsbClcbiAgICBtZXRhZGF0YUl0ZW1zLnB1c2goeyBsYWJlbDogJ1ByaW9yaXR5JywgdmFsdWU6IGRhdGEucHJpb3JpdHksIHN0YXR1c0NvbG9yOiByZXNvbHZlQ29sb3IoZGF0YS5wcmlvcml0eSwgcHJpb3JpdHlDb25maWcpIH0pO1xuICBpZiAoZGF0YS5lbnZpcm9ubWVudCAhPSBudWxsKVxuICAgIG1ldGFkYXRhSXRlbXMucHVzaCh7IGxhYmVsOiAnRW52aXJvbm1lbnQnLCB2YWx1ZTogZGF0YS5lbnZpcm9ubWVudCwgaWNvbjogJ3N0b3JhZ2UnIH0pO1xuICBpZiAoZGF0YS52ZXJzaW9uICE9IG51bGwpXG4gICAgbWV0YWRhdGFJdGVtcy5wdXNoKHsgbGFiZWw6ICdWZXJzaW9uJywgdmFsdWU6IGRhdGEudmVyc2lvbiwgaWNvbjogJ2xhYmVsJyB9KTtcbiAgaWYgKGRhdGEucGxhdGZvcm0gIT0gbnVsbClcbiAgICBtZXRhZGF0YUl0ZW1zLnB1c2goe1xuICAgICAgbGFiZWw6ICdQbGF0Zm9ybScsXG4gICAgICB2YWx1ZTogZGF0YS5wbGF0Zm9ybSA9PT0gJ3dlYicgPyAnd2ViJyA6ICdpT1MnLFxuICAgICAgaWNvbjogJ2RldmljZXMnLFxuICAgIH0pO1xuXG4gIGNvbnN0IGNvbmZpZ1NlY3Rpb25zOiBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uW10gPSBbXG4gICAge1xuICAgICAgdGl0bGU6ICdFeGVjdXRpb24nLFxuICAgICAgaWNvbjogJ3BsYXlfY2lyY2xlJyxcbiAgICAgIGl0ZW1zOiBbXG4gICAgICAgIHsgbGFiZWw6ICdQcmVyZXF1aXNpdGUgQ2FzZScsIHZhbHVlOiBkYXRhLnByZXJlcXVpc2l0ZUNhc2UgPz8gbnVsbCB9LFxuICAgICAgICB7IGxhYmVsOiAnVmlkZW8gUmVjb3JkaW5nJywgdmFsdWU6IGRhdGEudmlkZW9SZWNvcmRpbmcgPz8gJycgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ0FJIENvbmZpZ3VyYXRpb24nLFxuICAgICAgaWNvbjogJ3NtYXJ0X3RveScsXG4gICAgICBpdGVtczogW1xuICAgICAgICB7IGxhYmVsOiAnRW5hYmxlIEFJIFNtYXJ0bmVzcycsIHZhbHVlOiBkYXRhLmVuYWJsZUFpU21hcnRuZXNzID8/ICcnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IEFJIEFjdGlvbicsIHZhbHVlOiBkYXRhLmRlZmF1bHRBaUFjdGlvbiA/PyAnJyB9LFxuICAgICAgICB7IGxhYmVsOiAnS25vd2xlZGdlIEJhc2UgRGVmYXVsdCBUZXN0IENhc2UnLCB2YWx1ZTogZGF0YS5rbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlID8/IG51bGwgfSxcbiAgICAgICAgeyBsYWJlbDogJ0VuYWJsZSBBSSBtZXRhZGF0YSBjb2xsZWN0aW9uJywgdmFsdWU6IGRhdGEudXNlQWlNZXRhZGF0YSA/PyAnJyB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdO1xuXG4gIGNvbnN0IGNvbmZpZ1NlY3Rpb25zUm93MjogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbltdID0gW1xuICAgIHtcbiAgICAgIHRpdGxlOiAnV2FpdCBhbmQgcmV0cmllcycsXG4gICAgICBpY29uOiAndGltZXInLFxuICAgICAgaXRlbXM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0VuYWJsZSBBdm9pZCBBdXRvIHdhaXQgZm9yIHN0ZXBzJywgdmFsdWU6IGRhdGEuYXV0b1dhaXRFbmFibGVkID8/IGZhbHNlIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZXRyeSBGYWlsZWQgU3RlcHMnLCB2YWx1ZTogZGF0YS5yZXRyeUZhaWxlZFN0ZXBzID8/ICcnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdUZXN0IENhc2UgVGltZW91dCAobWludXRlcyknLCB2YWx1ZTogZGF0YS50ZXN0Q2FzZVRpbWVvdXQgPz8gJycgfSxcbiAgICAgICAgeyBsYWJlbDogJ1dhaXQgVGltZW91dCBmb3IgTG9jYXRvcnMgKHNlY3MpJywgdmFsdWU6IGRhdGEud2FpdFRpbWVvdXRGb3JMb2NhdG9ycyA/PyAnJyB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnRGV2aWNlIFNldHRpbmcnLFxuICAgICAgaWNvbjogJ2RldmljZXMnLFxuICAgICAgaXRlbXM6ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBsYXRmb3JtID0gZGF0YS5wbGF0Zm9ybSA/PyAnd2ViJztcbiAgICAgICAgaWYgKHBsYXRmb3JtID09PSAnd2ViJykge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBCcm93c2VyJywgdmFsdWU6IGRhdGEuZGVmYXVsdEJyb3dzZXIgPz8gZGF0YS53ZWJCcm93c2VyID8/ICcnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBWaWV3cG9ydCcsIHZhbHVlOiBkYXRhLmRlZmF1bHRWaWV3cG9ydCA/PyBkYXRhLnZpZXdwb3J0ID8/ICcnIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IE9TJywgdmFsdWU6IGRhdGEuZGV2aWNlT1MgPz8gJycgfSxcbiAgICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBQaG9uZScsIHZhbHVlOiBkYXRhLmRldmljZVR5cGUgPz8gJycgfSxcbiAgICAgICAgXTtcbiAgICAgIH0pKCksXG4gICAgfSxcbiAgICB7XG4gICAgICB0aXRsZTogJ0tleSBGbGFncycsXG4gICAgICBpY29uOiAnZmxhZycsXG4gICAgICBpdGVtczogW1xuICAgICAgICB7IGxhYmVsOiAnTW9iaWxlIFRlc3RpbmcnLCB2YWx1ZTogZGF0YS5tb2JpbGVUZXN0aW5nID8/ICcnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFeHRlbnNpb24gVXNlJywgdmFsdWU6IGRhdGEuZXh0ZW5zaW9uVXNlID8/ICcnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdEYXRhIERyaXZlbicsIHZhbHVlOiBkYXRhLmRhdGFEcml2ZW4gPz8gJycgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgXTtcblxuICByZXR1cm4ge1xuICAgIG1ldGFkYXRhSXRlbXMsXG4gICAgbGFiZWxzOiBkYXRhLmxhYmVscyA/PyBbXSxcbiAgICBjb25maWdTZWN0aW9ucyxcbiAgICBjb25maWdTZWN0aW9uc1JvdzIsXG4gIH07XG59XG4iXX0=