@cqa-lib/cqa-ui 1.1.93 → 1.1.94
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/execution-screen/db-query-execution-item/db-query-execution-item.component.mjs +124 -0
- package/esm2020/lib/execution-screen/db-verification-step/db-verification-step.component.mjs +289 -0
- package/esm2020/lib/execution-screen/execution-step.models.mjs +1 -1
- package/esm2020/lib/ui-kit.module.mjs +17 -5
- package/esm2020/public-api.mjs +3 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +424 -5
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +413 -5
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/execution-screen/db-query-execution-item/db-query-execution-item.component.d.ts +33 -0
- package/lib/execution-screen/db-verification-step/db-verification-step.component.d.ts +69 -0
- package/lib/execution-screen/execution-step.models.d.ts +33 -1
- package/lib/ui-kit.module.d.ts +19 -17
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
- package/styles.css +1 -1
package/esm2020/lib/execution-screen/db-query-execution-item/db-query-execution-item.component.mjs
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { EMPTY_STATE_IMAGES } from '../../assets/images/image-assets.constants';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../badge/badge.component";
|
|
5
|
+
import * as i2 from "../../templates/table-template.component";
|
|
6
|
+
import * as i3 from "@angular/common";
|
|
7
|
+
export class DbQueryExecutionItemComponent {
|
|
8
|
+
constructor(cdr) {
|
|
9
|
+
this.cdr = cdr;
|
|
10
|
+
this.isExpanded = false;
|
|
11
|
+
this.responseTableColumns = [];
|
|
12
|
+
this.emptyStateConfig = {
|
|
13
|
+
title: 'No Data',
|
|
14
|
+
description: 'No data returned from this query.',
|
|
15
|
+
imageUrl: EMPTY_STATE_IMAGES.DASHBOARD,
|
|
16
|
+
actions: [],
|
|
17
|
+
};
|
|
18
|
+
this.pageIndex = 0;
|
|
19
|
+
this.pageSize = 10;
|
|
20
|
+
}
|
|
21
|
+
ngOnInit() {
|
|
22
|
+
this.setupResponseTableColumns();
|
|
23
|
+
}
|
|
24
|
+
toggle() {
|
|
25
|
+
this.isExpanded = !this.isExpanded;
|
|
26
|
+
if (this.isExpanded) {
|
|
27
|
+
this.setupResponseTableColumns();
|
|
28
|
+
}
|
|
29
|
+
this.cdr.markForCheck();
|
|
30
|
+
this.cdr.detectChanges();
|
|
31
|
+
}
|
|
32
|
+
copyQuery() {
|
|
33
|
+
if (this.queryResult?.query) {
|
|
34
|
+
navigator.clipboard.writeText(this.queryResult.query).then(() => {
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
copyResponse() {
|
|
39
|
+
const response = JSON.stringify(this.queryResult.data, null, 2);
|
|
40
|
+
navigator.clipboard.writeText(response).then(() => {
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
formatDuration(seconds) {
|
|
44
|
+
if (seconds < 1) {
|
|
45
|
+
return `${(seconds * 1000).toFixed(0)}ms`;
|
|
46
|
+
}
|
|
47
|
+
if (seconds < 60 && !Number.isInteger(seconds)) {
|
|
48
|
+
return `${seconds.toFixed(1)}s`;
|
|
49
|
+
}
|
|
50
|
+
const hours = Math.floor(seconds / 3600);
|
|
51
|
+
const minutes = Math.floor((seconds % 3600) / 60);
|
|
52
|
+
const secs = Math.floor(seconds % 60);
|
|
53
|
+
const parts = [];
|
|
54
|
+
if (hours > 0) {
|
|
55
|
+
parts.push(`${hours}h`);
|
|
56
|
+
}
|
|
57
|
+
if (minutes > 0) {
|
|
58
|
+
parts.push(`${minutes}m`);
|
|
59
|
+
}
|
|
60
|
+
if (secs > 0 || (hours === 0 && minutes === 0)) {
|
|
61
|
+
parts.push(`${secs}s`);
|
|
62
|
+
}
|
|
63
|
+
return parts.join(' ');
|
|
64
|
+
}
|
|
65
|
+
get isEmptyResponse() {
|
|
66
|
+
return this.queryResult?.data?.length === 0;
|
|
67
|
+
}
|
|
68
|
+
setupResponseTableColumns() {
|
|
69
|
+
const data = this.queryResult?.data || [];
|
|
70
|
+
if (data.length === 0) {
|
|
71
|
+
this.responseTableColumns = [];
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
// Get all unique keys from the data objects
|
|
75
|
+
const firstItem = data[0];
|
|
76
|
+
if (typeof firstItem !== 'object' || firstItem === null) {
|
|
77
|
+
this.responseTableColumns = [];
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const keys = Object.keys(firstItem);
|
|
81
|
+
this.responseTableColumns = keys.map(key => ({
|
|
82
|
+
fieldId: key,
|
|
83
|
+
fieldName: key,
|
|
84
|
+
fieldValue: key,
|
|
85
|
+
isShow: true,
|
|
86
|
+
weight: 1,
|
|
87
|
+
render: (row) => {
|
|
88
|
+
const value = row[key] ?? '-';
|
|
89
|
+
const displayValue = value === null || value === undefined ? '' : String(value);
|
|
90
|
+
return `
|
|
91
|
+
<div class="cqa-text-[12px] cqa-text-[#0F172B]">
|
|
92
|
+
${this.escapeHtml(displayValue)}
|
|
93
|
+
</div>
|
|
94
|
+
`;
|
|
95
|
+
}
|
|
96
|
+
}));
|
|
97
|
+
}
|
|
98
|
+
escapeHtml(text) {
|
|
99
|
+
const div = document.createElement('div');
|
|
100
|
+
div.textContent = text;
|
|
101
|
+
return div.innerHTML;
|
|
102
|
+
}
|
|
103
|
+
onPageChange(event) {
|
|
104
|
+
this.pageIndex = event.pageIndex;
|
|
105
|
+
this.pageSize = event.pageSize;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
DbQueryExecutionItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DbQueryExecutionItemComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
109
|
+
DbQueryExecutionItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DbQueryExecutionItemComponent, selector: "cqa-db-query-execution-item", inputs: { queryNumber: "queryNumber", queryKey: "queryKey", queryResult: "queryResult", status: "status", variableName: "variableName" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-border !cqa-border-b-2 cqa-border-solid cqa-rounded-lg cqa-overflow-hidden\" [ngClass]=\"{'cqa-bg-[#F8FAFC] cqa-border-[#E2E8F0]': status === 'passed', 'cqa-bg-[#FEF2F2] cqa-border-[#FFC9C9]': status === 'failed'}\">\n <!-- Header (Collapsed View) -->\n <div \n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-px-4 cqa-py-2 cqa-cursor-pointer\"\n (click)=\"toggle()\"\n role=\"button\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n <span class=\"cqa-font-semibold cqa-text-[10px] cqa-text-[#314158]\">Query {{ queryNumber }}</span>\n \n <!-- Status Badge -->\n <cqa-badge class=\"cqa-mb-0.5\"\n *ngIf=\"status === 'passed'\"\n label=\"Passed\"\n backgroundColor=\"#DCFCE7\"\n textColor=\"#22C55E\"\n inlineStyles=\"border-radius: 50px;\"\n icon=\"check_circle\"\n size=\"small\">\n </cqa-badge>\n <cqa-badge class=\"cqa-mb-0.5\"\n *ngIf=\"status === 'failed'\"\n label=\"Failed\"\n backgroundColor=\"#FEE2E2\"\n textColor=\"#DC2626\"\n icon=\"error\"\n inlineStyles=\"border-radius: 50px;\"\n size=\"small\">\n </cqa-badge>\n \n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#62748E]\" *ngIf=\"queryResult?.duration || queryResult?.data?.length > 0\">\n {{ formatDuration(queryResult?.duration) }}\n <span *ngIf=\"queryResult?.data?.length > 0 && queryResult?.duration\"> \u2022 </span>\n <span *ngIf=\"queryResult?.data?.length > 0\">{{ queryResult?.data?.length || 0 }} rows</span>\n </span>\n </div>\n \n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <button\n (click)=\"copyQuery(); $event.stopPropagation()\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n Copy Query\n </button>\n <button\n (click)=\"copyResponse(); $event.stopPropagation()\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n Copy Response\n </button>\n \n <!-- Chevron Icon -->\n <svg \n [class.cqa-rotate-180]=\"isExpanded\" \n class=\"cqa-transition-transform cqa-ml-2\" \n width=\"14\" \n height=\"14\" \n viewBox=\"0 0 14 14\" \n fill=\"none\" \n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded === true\" class=\"cqa-bg-white cqa-border-t cqa-border-b-0 cqa-border-l-0 cqa-border-r-0 cqa-border-solid\" [ngClass]=\"{'cqa-border-[#E2E8F0]': status === 'passed', 'cqa-border-[#FFC9C9]': status === 'failed'}\">\n <!-- Query Section -->\n <div class=\"cqa-px-4 cqa-py-3\">\n <div class=\"cqa-text-[12px] cqa-leading-[16px] cqa-font-semibold cqa-text-[#314158] cqa-mb-2\">Query</div>\n <div class=\"cqa-relative cqa-bg-[#0F172B] cqa-rounded-[10px] cqa-p-3 cqa-overflow-hidden\">\n <button\n (click)=\"copyQuery()\"\n class=\"cqa-absolute cqa-top-2 cqa-right-2 cqa-p-1.5 cqa-cursor-pointer hover:cqa-bg-[#334155] cqa-rounded\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#94A3B8\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <pre class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#F1F5F9] cqa-font-mono cqa-whitespace-pre-wrap cqa-overflow-x-auto cqa-m-0\"><code>{{ queryResult?.query }}</code></pre>\n </div>\n <div *ngIf=\"variableName\" class=\"cqa-mt-4 cqa-text-[10px] cqa-leading-[15px] cqa-text-[#45556C]\">\n Stored as variable: <span class=\"cqa-font-medium cqa-bg-[#F1F5F9] cqa-px-1 cqa-rounded-[4px] cqa-text-[#45556C]\">{{ variableName }}</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mt-4\" *ngIf=\"queryResult?.data\">\n <div class=\"cqa-text-[12px] cqa-text-[#314158]\">Response</div>\n <button\n (click)=\"copyResponse()\"\n class=\"cqa-cursor-pointer cqa-rounded\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n \n <cqa-table-template\n *ngIf=\"!isEmptyResponse && queryResult?.data\"\n [columns]=\"responseTableColumns\"\n [data]=\"queryResult?.data || []\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [isEmptyState]=\"isEmptyResponse\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n \n <div *ngIf=\"isEmptyResponse\" class=\"cqa-text-[10px] cqa-text-[#45556C] cqa-py-4 cqa-text-center\">\n No data returned from this query.\n </div>\n </div>\n </div>\n</div>\n\n", components: [{ type: i1.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading"] }, { type: i2.TableTemplateComponent, selector: "cqa-table-template", inputs: ["searchPlaceholder", "searchValue", "showClear", "showSearchBar", "filterConfig", "showFilterPanel", "showFilterButton", "otherButtonLabel", "otherButtonVariant", "showOtherButton", "showActionButton", "showSettingsButton", "showAutoRefreshButton", "data", "isEmptyState", "emptyStateConfig", "actions", "chips", "filterApplied", "columns", "selectedAutoRefreshInterval", "pageIndex", "pageSize", "serverSidePagination", "totalElements", "isTableLoading", "isTableDataLoading"], outputs: ["onSearchChange", "onApplyFilterClick", "onResetFilterClick", "onClearAll", "removeChip", "pageChange", "onReload", "onAutoRefreshClick"] }], directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
110
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DbQueryExecutionItemComponent, decorators: [{
|
|
111
|
+
type: Component,
|
|
112
|
+
args: [{ selector: 'cqa-db-query-execution-item', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-border !cqa-border-b-2 cqa-border-solid cqa-rounded-lg cqa-overflow-hidden\" [ngClass]=\"{'cqa-bg-[#F8FAFC] cqa-border-[#E2E8F0]': status === 'passed', 'cqa-bg-[#FEF2F2] cqa-border-[#FFC9C9]': status === 'failed'}\">\n <!-- Header (Collapsed View) -->\n <div \n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-px-4 cqa-py-2 cqa-cursor-pointer\"\n (click)=\"toggle()\"\n role=\"button\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n <span class=\"cqa-font-semibold cqa-text-[10px] cqa-text-[#314158]\">Query {{ queryNumber }}</span>\n \n <!-- Status Badge -->\n <cqa-badge class=\"cqa-mb-0.5\"\n *ngIf=\"status === 'passed'\"\n label=\"Passed\"\n backgroundColor=\"#DCFCE7\"\n textColor=\"#22C55E\"\n inlineStyles=\"border-radius: 50px;\"\n icon=\"check_circle\"\n size=\"small\">\n </cqa-badge>\n <cqa-badge class=\"cqa-mb-0.5\"\n *ngIf=\"status === 'failed'\"\n label=\"Failed\"\n backgroundColor=\"#FEE2E2\"\n textColor=\"#DC2626\"\n icon=\"error\"\n inlineStyles=\"border-radius: 50px;\"\n size=\"small\">\n </cqa-badge>\n \n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#62748E]\" *ngIf=\"queryResult?.duration || queryResult?.data?.length > 0\">\n {{ formatDuration(queryResult?.duration) }}\n <span *ngIf=\"queryResult?.data?.length > 0 && queryResult?.duration\"> \u2022 </span>\n <span *ngIf=\"queryResult?.data?.length > 0\">{{ queryResult?.data?.length || 0 }} rows</span>\n </span>\n </div>\n \n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <button\n (click)=\"copyQuery(); $event.stopPropagation()\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n Copy Query\n </button>\n <button\n (click)=\"copyResponse(); $event.stopPropagation()\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n Copy Response\n </button>\n \n <!-- Chevron Icon -->\n <svg \n [class.cqa-rotate-180]=\"isExpanded\" \n class=\"cqa-transition-transform cqa-ml-2\" \n width=\"14\" \n height=\"14\" \n viewBox=\"0 0 14 14\" \n fill=\"none\" \n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded === true\" class=\"cqa-bg-white cqa-border-t cqa-border-b-0 cqa-border-l-0 cqa-border-r-0 cqa-border-solid\" [ngClass]=\"{'cqa-border-[#E2E8F0]': status === 'passed', 'cqa-border-[#FFC9C9]': status === 'failed'}\">\n <!-- Query Section -->\n <div class=\"cqa-px-4 cqa-py-3\">\n <div class=\"cqa-text-[12px] cqa-leading-[16px] cqa-font-semibold cqa-text-[#314158] cqa-mb-2\">Query</div>\n <div class=\"cqa-relative cqa-bg-[#0F172B] cqa-rounded-[10px] cqa-p-3 cqa-overflow-hidden\">\n <button\n (click)=\"copyQuery()\"\n class=\"cqa-absolute cqa-top-2 cqa-right-2 cqa-p-1.5 cqa-cursor-pointer hover:cqa-bg-[#334155] cqa-rounded\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#94A3B8\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <pre class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#F1F5F9] cqa-font-mono cqa-whitespace-pre-wrap cqa-overflow-x-auto cqa-m-0\"><code>{{ queryResult?.query }}</code></pre>\n </div>\n <div *ngIf=\"variableName\" class=\"cqa-mt-4 cqa-text-[10px] cqa-leading-[15px] cqa-text-[#45556C]\">\n Stored as variable: <span class=\"cqa-font-medium cqa-bg-[#F1F5F9] cqa-px-1 cqa-rounded-[4px] cqa-text-[#45556C]\">{{ variableName }}</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mt-4\" *ngIf=\"queryResult?.data\">\n <div class=\"cqa-text-[12px] cqa-text-[#314158]\">Response</div>\n <button\n (click)=\"copyResponse()\"\n class=\"cqa-cursor-pointer cqa-rounded\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n \n <cqa-table-template\n *ngIf=\"!isEmptyResponse && queryResult?.data\"\n [columns]=\"responseTableColumns\"\n [data]=\"queryResult?.data || []\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [isEmptyState]=\"isEmptyResponse\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n \n <div *ngIf=\"isEmptyResponse\" class=\"cqa-text-[10px] cqa-text-[#45556C] cqa-py-4 cqa-text-center\">\n No data returned from this query.\n </div>\n </div>\n </div>\n</div>\n\n", styles: [] }]
|
|
113
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { queryNumber: [{
|
|
114
|
+
type: Input
|
|
115
|
+
}], queryKey: [{
|
|
116
|
+
type: Input
|
|
117
|
+
}], queryResult: [{
|
|
118
|
+
type: Input
|
|
119
|
+
}], status: [{
|
|
120
|
+
type: Input
|
|
121
|
+
}], variableName: [{
|
|
122
|
+
type: Input
|
|
123
|
+
}] } });
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGItcXVlcnktZXhlY3V0aW9uLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leGVjdXRpb24tc2NyZWVuL2RiLXF1ZXJ5LWV4ZWN1dGlvbi1pdGVtL2RiLXF1ZXJ5LWV4ZWN1dGlvbi1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9kYi1xdWVyeS1leGVjdXRpb24taXRlbS9kYi1xdWVyeS1leGVjdXRpb24taXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNkIsTUFBTSxlQUFlLENBQUM7QUFJNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7O0FBUWhGLE1BQU0sT0FBTyw2QkFBNkI7SUFvQnhDLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBYjFDLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIseUJBQW9CLEdBQXlCLEVBQUUsQ0FBQztRQUVoRCxxQkFBZ0IsR0FBcUI7WUFDbkMsS0FBSyxFQUFFLFNBQVM7WUFDaEIsV0FBVyxFQUFFLG1DQUFtQztZQUNoRCxRQUFRLEVBQUUsa0JBQWtCLENBQUMsU0FBUztZQUN0QyxPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7UUFFRixjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBQ3RCLGFBQVEsR0FBVyxFQUFFLENBQUM7SUFFdUIsQ0FBQztJQUU5QyxRQUFRO1FBQ04sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7U0FDbEM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFO1lBQzNCLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNoRSxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRSxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ2xELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFlO1FBQzVCLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRTtZQUNmLE9BQU8sR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUMzQztRQUNELElBQUksT0FBTyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDOUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztTQUNqQztRQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDbEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEMsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBQzNCLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtZQUNiLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7U0FDM0I7UUFDRCxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRTtZQUM5QyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUN4QjtRQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU8seUJBQXlCO1FBQy9CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMxQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7WUFDL0IsT0FBTztTQUNSO1FBRUQsNENBQTRDO1FBQzVDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO1lBQ3ZELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7WUFDL0IsT0FBTztTQUNSO1FBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0MsT0FBTyxFQUFFLEdBQUc7WUFDWixTQUFTLEVBQUUsR0FBRztZQUNkLFVBQVUsRUFBRSxHQUFHO1lBQ2YsTUFBTSxFQUFFLElBQUk7WUFDWixNQUFNLEVBQUUsQ0FBQztZQUNULE1BQU0sRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNuQixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO2dCQUM5QixNQUFNLFlBQVksR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoRixPQUFPOztjQUVELElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDOztTQUVsQyxDQUFDO1lBQ0osQ0FBQztTQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUFZO1FBQzdCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDdkIsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBOEM7UUFDekQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUNqQyxDQUFDOzswSEFySFUsNkJBQTZCOzhHQUE3Qiw2QkFBNkIsc1BDWjFDLHVnU0F1SEE7MkZEM0dhLDZCQUE2QjtrQkFOekMsU0FBUzsrQkFDRSw2QkFBNkIsUUFHakMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO3dHQUdyQixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERiUXVlcnlSZXN1bHQgfSBmcm9tICcuLi9leGVjdXRpb24tc3RlcC5tb2RlbHMnO1xuaW1wb3J0IHsgRHluYW1pY1RhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vdGFibGUvZHluYW1pYy10YWJsZS9keW5hbWljLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29uZmlnIH0gZnJvbSAnLi4vLi4vZW1wdHktc3RhdGUvZW1wdHktc3RhdGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFTVBUWV9TVEFURV9JTUFHRVMgfSBmcm9tICcuLi8uLi9hc3NldHMvaW1hZ2VzL2ltYWdlLWFzc2V0cy5jb25zdGFudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtZGItcXVlcnktZXhlY3V0aW9uLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZGItcXVlcnktZXhlY3V0aW9uLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgRGJRdWVyeUV4ZWN1dGlvbkl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBxdWVyeU51bWJlciE6IG51bWJlcjtcbiAgQElucHV0KCkgcXVlcnlLZXkhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHF1ZXJ5UmVzdWx0ITogRGJRdWVyeVJlc3VsdDtcbiAgQElucHV0KCkgc3RhdHVzITogJ3Bhc3NlZCcgfCAnZmFpbGVkJztcbiAgQElucHV0KCkgdmFyaWFibGVOYW1lPzogc3RyaW5nO1xuXG4gIGlzRXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVzcG9uc2VUYWJsZUNvbHVtbnM6IER5bmFtaWNUYWJsZUNvbHVtbltdID0gW107XG4gIFxuICBlbXB0eVN0YXRlQ29uZmlnOiBFbXB0eVN0YXRlQ29uZmlnID0ge1xuICAgIHRpdGxlOiAnTm8gRGF0YScsXG4gICAgZGVzY3JpcHRpb246ICdObyBkYXRhIHJldHVybmVkIGZyb20gdGhpcyBxdWVyeS4nLFxuICAgIGltYWdlVXJsOiBFTVBUWV9TVEFURV9JTUFHRVMuREFTSEJPQVJELFxuICAgIGFjdGlvbnM6IFtdLFxuICB9O1xuXG4gIHBhZ2VJbmRleDogbnVtYmVyID0gMDtcbiAgcGFnZVNpemU6IG51bWJlciA9IDEwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldHVwUmVzcG9uc2VUYWJsZUNvbHVtbnMoKTtcbiAgfVxuXG4gIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSAhdGhpcy5pc0V4cGFuZGVkO1xuICAgIGlmICh0aGlzLmlzRXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuc2V0dXBSZXNwb25zZVRhYmxlQ29sdW1ucygpO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBjb3B5UXVlcnkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucXVlcnlSZXN1bHQ/LnF1ZXJ5KSB7XG4gICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLnF1ZXJ5UmVzdWx0LnF1ZXJ5KS50aGVuKCgpID0+IHtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvcHlSZXNwb25zZSgpOiB2b2lkIHtcbiAgICBjb25zdCByZXNwb25zZSA9IEpTT04uc3RyaW5naWZ5KHRoaXMucXVlcnlSZXN1bHQuZGF0YSwgbnVsbCwgMik7XG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQocmVzcG9uc2UpLnRoZW4oKCkgPT4ge1xuICAgIH0pO1xuICB9XG5cbiAgZm9ybWF0RHVyYXRpb24oc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoc2Vjb25kcyA8IDEpIHtcbiAgICAgIHJldHVybiBgJHsoc2Vjb25kcyAqIDEwMDApLnRvRml4ZWQoMCl9bXNgO1xuICAgIH1cbiAgICBpZiAoc2Vjb25kcyA8IDYwICYmICFOdW1iZXIuaXNJbnRlZ2VyKHNlY29uZHMpKSB7XG4gICAgICByZXR1cm4gYCR7c2Vjb25kcy50b0ZpeGVkKDEpfXNgO1xuICAgIH1cbiAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDM2MDApO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKChzZWNvbmRzICUgMzYwMCkgLyA2MCk7XG4gICAgY29uc3Qgc2VjcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAlIDYwKTtcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoaG91cnMgPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke2hvdXJzfWhgKTtcbiAgICB9XG4gICAgaWYgKG1pbnV0ZXMgPiAwKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke21pbnV0ZXN9bWApO1xuICAgIH1cbiAgICBpZiAoc2VjcyA+IDAgfHwgKGhvdXJzID09PSAwICYmIG1pbnV0ZXMgPT09IDApKSB7XG4gICAgICBwYXJ0cy5wdXNoKGAke3NlY3N9c2ApO1xuICAgIH1cbiAgICByZXR1cm4gcGFydHMuam9pbignICcpO1xuICB9XG5cbiAgZ2V0IGlzRW1wdHlSZXNwb25zZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVJlc3VsdD8uZGF0YT8ubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFJlc3BvbnNlVGFibGVDb2x1bW5zKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnF1ZXJ5UmVzdWx0Py5kYXRhIHx8IFtdO1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5yZXNwb25zZVRhYmxlQ29sdW1ucyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCBhbGwgdW5pcXVlIGtleXMgZnJvbSB0aGUgZGF0YSBvYmplY3RzXG4gICAgY29uc3QgZmlyc3RJdGVtID0gZGF0YVswXTtcbiAgICBpZiAodHlwZW9mIGZpcnN0SXRlbSAhPT0gJ29iamVjdCcgfHwgZmlyc3RJdGVtID09PSBudWxsKSB7XG4gICAgICB0aGlzLnJlc3BvbnNlVGFibGVDb2x1bW5zID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGZpcnN0SXRlbSk7XG4gICAgdGhpcy5yZXNwb25zZVRhYmxlQ29sdW1ucyA9IGtleXMubWFwKGtleSA9PiAoe1xuICAgICAgZmllbGRJZDoga2V5LFxuICAgICAgZmllbGROYW1lOiBrZXksXG4gICAgICBmaWVsZFZhbHVlOiBrZXksXG4gICAgICBpc1Nob3c6IHRydWUsXG4gICAgICB3ZWlnaHQ6IDEsXG4gICAgICByZW5kZXI6IChyb3c6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd1trZXldID8/ICctJztcbiAgICAgICAgY29uc3QgZGlzcGxheVZhbHVlID0gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCA/ICcnIDogU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS10ZXh0LVsjMEYxNzJCXVwiPlxuICAgICAgICAgICAgJHt0aGlzLmVzY2FwZUh0bWwoZGlzcGxheVZhbHVlKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgYDtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGVzY2FwZUh0bWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkaXYudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIHJldHVybiBkaXYuaW5uZXJIVE1MO1xuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiB7IHBhZ2VJbmRleDogbnVtYmVyOyBwYWdlU2l6ZTogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IGV2ZW50LnBhZ2VJbmRleDtcbiAgICB0aGlzLnBhZ2VTaXplID0gZXZlbnQucGFnZVNpemU7XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImNxYS1ib3JkZXIgIWNxYS1ib3JkZXItYi0yIGNxYS1ib3JkZXItc29saWQgY3FhLXJvdW5kZWQtbGcgY3FhLW92ZXJmbG93LWhpZGRlblwiIFtuZ0NsYXNzXT1cInsnY3FhLWJnLVsjRjhGQUZDXSBjcWEtYm9yZGVyLVsjRTJFOEYwXSc6IHN0YXR1cyA9PT0gJ3Bhc3NlZCcsICdjcWEtYmctWyNGRUYyRjJdIGNxYS1ib3JkZXItWyNGRkM5QzldJzogc3RhdHVzID09PSAnZmFpbGVkJ31cIj5cbiAgPCEtLSBIZWFkZXIgKENvbGxhcHNlZCBWaWV3KSAtLT5cbiAgPGRpdiBcbiAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtcHgtNCBjcWEtcHktMiBjcWEtY3Vyc29yLXBvaW50ZXJcIlxuICAgIChjbGljayk9XCJ0b2dnbGUoKVwiXG4gICAgcm9sZT1cImJ1dHRvblwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtZmxleC0xXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsxMHB4XSBjcWEtdGV4dC1bIzMxNDE1OF1cIj5RdWVyeSB7eyBxdWVyeU51bWJlciB9fTwvc3Bhbj5cbiAgICAgIFxuICAgICAgPCEtLSBTdGF0dXMgQmFkZ2UgLS0+XG4gICAgICA8Y3FhLWJhZGdlIGNsYXNzPVwiY3FhLW1iLTAuNVwiXG4gICAgICAgICpuZ0lmPVwic3RhdHVzID09PSAncGFzc2VkJ1wiXG4gICAgICAgIGxhYmVsPVwiUGFzc2VkXCJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yPVwiI0RDRkNFN1wiXG4gICAgICAgIHRleHRDb2xvcj1cIiMyMkM1NUVcIlxuICAgICAgICBpbmxpbmVTdHlsZXM9XCJib3JkZXItcmFkaXVzOiA1MHB4O1wiXG4gICAgICAgIGljb249XCJjaGVja19jaXJjbGVcIlxuICAgICAgICBzaXplPVwic21hbGxcIj5cbiAgICAgIDwvY3FhLWJhZGdlPlxuICAgICAgPGNxYS1iYWRnZSBjbGFzcz1cImNxYS1tYi0wLjVcIlxuICAgICAgICAqbmdJZj1cInN0YXR1cyA9PT0gJ2ZhaWxlZCdcIlxuICAgICAgICBsYWJlbD1cIkZhaWxlZFwiXG4gICAgICAgIGJhY2tncm91bmRDb2xvcj1cIiNGRUUyRTJcIlxuICAgICAgICB0ZXh0Q29sb3I9XCIjREMyNjI2XCJcbiAgICAgICAgaWNvbj1cImVycm9yXCJcbiAgICAgICAgaW5saW5lU3R5bGVzPVwiYm9yZGVyLXJhZGl1czogNTBweDtcIlxuICAgICAgICBzaXplPVwic21hbGxcIj5cbiAgICAgIDwvY3FhLWJhZGdlPlxuICAgICAgXG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLXRleHQtWyM2Mjc0OEVdXCIgKm5nSWY9XCJxdWVyeVJlc3VsdD8uZHVyYXRpb24gfHwgcXVlcnlSZXN1bHQ/LmRhdGE/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAge3sgZm9ybWF0RHVyYXRpb24ocXVlcnlSZXN1bHQ/LmR1cmF0aW9uKSB9fVxuICAgICAgICA8c3BhbiAqbmdJZj1cInF1ZXJ5UmVzdWx0Py5kYXRhPy5sZW5ndGggPiAwICYmIHF1ZXJ5UmVzdWx0Py5kdXJhdGlvblwiPiDigKIgPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInF1ZXJ5UmVzdWx0Py5kYXRhPy5sZW5ndGggPiAwXCI+e3sgcXVlcnlSZXN1bHQ/LmRhdGE/Lmxlbmd0aCB8fCAwIH19IHJvd3M8L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgXG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJjb3B5UXVlcnkoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMSBjcWEtcHgtMiBjcWEtcHktMSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzQ1NTU2Q10gY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1jdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTUuMzMzMzIgMTAuNjY2N0gzLjk5OTk5QzMuNjQ2MzcgMTAuNjY2NyAzLjMwNzIzIDEwLjUyNjMgMy4wNTcxOCAxMC4yNzYyQzIuODA3MTMgMTAuMDI2MiAyLjY2NjY2IDkuNjg3MDQgMi42NjY2NiA5LjMzMzQxVjQuMDAwMDhDMi42NjY2NiAzLjY0NjQ2IDIuODA3MTMgMy4zMDczMiAzLjA1NzE4IDMuMDU3MjdDMy4zMDcyMyAyLjgwNzIyIDMuNjQ2MzcgMi42NjY3NSAzLjk5OTk5IDIuNjY2NzVIOS4zMzMzMkM5LjY4Njk1IDIuNjY2NzUgMTAuMDI2MSAyLjgwNzIyIDEwLjI3NjEgMy4wNTcyN0MxMC41MjYyIDMuMzA3MzIgMTAuNjY2NyAzLjY0NjQ2IDEwLjY2NjcgNC4wMDAwOFY1LjMzMzQxTTYuNjY2NjYgMTMuMzMzNEgxMkMxMi4zNTM2IDEzLjMzMzQgMTIuNjkyOCAxMy4xOTI5IDEyLjk0MjggMTIuOTQyOUMxMy4xOTI4IDEyLjY5MjggMTMuMzMzMyAxMi4zNTM3IDEzLjMzMzMgMTIuMDAwMVY2LjY2Njc1QzEzLjMzMzMgNi4zMTMxMyAxMy4xOTI4IDUuOTczOTkgMTIuOTQyOCA1LjcyMzk0QzEyLjY5MjggNS40NzM4OSAxMi4zNTM2IDUuMzMzNDEgMTIgNS4zMzM0MUg2LjY2NjY2QzYuMzEzMDMgNS4zMzM0MSA1Ljk3MzkgNS40NzM4OSA1LjcyMzg1IDUuNzIzOTRDNS40NzM4IDUuOTczOTkgNS4zMzMzMiA2LjMxMzEzIDUuMzMzMzIgNi42NjY3NVYxMi4wMDAxQzUuMzMzMzIgMTIuMzUzNyA1LjQ3MzggMTIuNjkyOCA1LjcyMzg1IDEyLjk0MjlDNS45NzM5IDEzLjE5MjkgNi4zMTMwMyAxMy4zMzM0IDYuNjY2NjYgMTMuMzMzNFpcIiBzdHJva2U9XCIjNjM2MzYzXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgICAgQ29weSBRdWVyeVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJjb3B5UmVzcG9uc2UoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMSBjcWEtcHgtMiBjcWEtcHktMSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzQ1NTU2Q10gY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1jdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTUuMzMzMzIgMTAuNjY2N0gzLjk5OTk5QzMuNjQ2MzcgMTAuNjY2NyAzLjMwNzIzIDEwLjUyNjMgMy4wNTcxOCAxMC4yNzYyQzIuODA3MTMgMTAuMDI2MiAyLjY2NjY2IDkuNjg3MDQgMi42NjY2NiA5LjMzMzQxVjQuMDAwMDhDMi42NjY2NiAzLjY0NjQ2IDIuODA3MTMgMy4zMDczMiAzLjA1NzE4IDMuMDU3MjdDMy4zMDcyMyAyLjgwNzIyIDMuNjQ2MzcgMi42NjY3NSAzLjk5OTk5IDIuNjY2NzVIOS4zMzMzMkM5LjY4Njk1IDIuNjY2NzUgMTAuMDI2MSAyLjgwNzIyIDEwLjI3NjEgMy4wNTcyN0MxMC41MjYyIDMuMzA3MzIgMTAuNjY2NyAzLjY0NjQ2IDEwLjY2NjcgNC4wMDAwOFY1LjMzMzQxTTYuNjY2NjYgMTMuMzMzNEgxMkMxMi4zNTM2IDEzLjMzMzQgMTIuNjkyOCAxMy4xOTI5IDEyLjk0MjggMTIuOTQyOUMxMy4xOTI4IDEyLjY5MjggMTMuMzMzMyAxMi4zNTM3IDEzLjMzMzMgMTIuMDAwMVY2LjY2Njc1QzEzLjMzMzMgNi4zMTMxMyAxMy4xOTI4IDUuOTczOTkgMTIuOTQyOCA1LjcyMzk0QzEyLjY5MjggNS40NzM4OSAxMi4zNTM2IDUuMzMzNDEgMTIgNS4zMzM0MUg2LjY2NjY2QzYuMzEzMDMgNS4zMzM0MSA1Ljk3MzkgNS40NzM4OSA1LjcyMzg1IDUuNzIzOTRDNS40NzM4IDUuOTczOTkgNS4zMzMzMiA2LjMxMzEzIDUuMzMzMzIgNi42NjY3NVYxMi4wMDAxQzUuMzMzMzIgMTIuMzUzNyA1LjQ3MzggMTIuNjkyOCA1LjcyMzg1IDEyLjk0MjlDNS45NzM5IDEzLjE5MjkgNi4zMTMwMyAxMy4zMzM0IDYuNjY2NjYgMTMuMzMzNFpcIiBzdHJva2U9XCIjNjM2MzYzXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgICAgQ29weSBSZXNwb25zZVxuICAgICAgPC9idXR0b24+XG4gICAgICBcbiAgICAgIDwhLS0gQ2hldnJvbiBJY29uIC0tPlxuICAgICAgPHN2ZyBcbiAgICAgICAgW2NsYXNzLmNxYS1yb3RhdGUtMTgwXT1cImlzRXhwYW5kZWRcIiBcbiAgICAgICAgY2xhc3M9XCJjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm0gY3FhLW1sLTJcIiBcbiAgICAgICAgd2lkdGg9XCIxNFwiIFxuICAgICAgICBoZWlnaHQ9XCIxNFwiIFxuICAgICAgICB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgXG4gICAgICAgIGZpbGw9XCJub25lXCIgXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPHBhdGggZD1cIk0zLjUgNUw3IDguNUwxMC41IDVcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLXdpZHRoPVwiMC44MzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBFeHBhbmRlZCBDb250ZW50IC0tPlxuICA8ZGl2ICpuZ0lmPVwiaXNFeHBhbmRlZCA9PT0gdHJ1ZVwiIGNsYXNzPVwiY3FhLWJnLXdoaXRlIGNxYS1ib3JkZXItdCBjcWEtYm9yZGVyLWItMCBjcWEtYm9yZGVyLWwtMCBjcWEtYm9yZGVyLXItMCBjcWEtYm9yZGVyLXNvbGlkXCIgW25nQ2xhc3NdPVwieydjcWEtYm9yZGVyLVsjRTJFOEYwXSc6IHN0YXR1cyA9PT0gJ3Bhc3NlZCcsICdjcWEtYm9yZGVyLVsjRkZDOUM5XSc6IHN0YXR1cyA9PT0gJ2ZhaWxlZCd9XCI+XG4gICAgPCEtLSBRdWVyeSBTZWN0aW9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtcHgtNCBjcWEtcHktM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMTZweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMzMTQxNThdIGNxYS1tYi0yXCI+UXVlcnk8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtcmVsYXRpdmUgY3FhLWJnLVsjMEYxNzJCXSBjcWEtcm91bmRlZC1bMTBweF0gY3FhLXAtMyBjcWEtb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAoY2xpY2spPVwiY29weVF1ZXJ5KClcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWFic29sdXRlIGNxYS10b3AtMiBjcWEtcmlnaHQtMiBjcWEtcC0xLjUgY3FhLWN1cnNvci1wb2ludGVyIGhvdmVyOmNxYS1iZy1bIzMzNDE1NV0gY3FhLXJvdW5kZWRcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNNS4zMzMzMiAxMC42NjY3SDMuOTk5OTlDMy42NDYzNyAxMC42NjY3IDMuMzA3MjMgMTAuNTI2MyAzLjA1NzE4IDEwLjI3NjJDMi44MDcxMyAxMC4wMjYyIDIuNjY2NjYgOS42ODcwNCAyLjY2NjY2IDkuMzMzNDFWNC4wMDAwOEMyLjY2NjY2IDMuNjQ2NDYgMi44MDcxMyAzLjMwNzMyIDMuMDU3MTggMy4wNTcyN0MzLjMwNzIzIDIuODA3MjIgMy42NDYzNyAyLjY2Njc1IDMuOTk5OTkgMi42NjY3NUg5LjMzMzMyQzkuNjg2OTUgMi42NjY3NSAxMC4wMjYxIDIuODA3MjIgMTAuMjc2MSAzLjA1NzI3QzEwLjUyNjIgMy4zMDczMiAxMC42NjY3IDMuNjQ2NDYgMTAuNjY2NyA0LjAwMDA4VjUuMzMzNDFNNi42NjY2NiAxMy4zMzM0SDEyQzEyLjM1MzYgMTMuMzMzNCAxMi42OTI4IDEzLjE5MjkgMTIuOTQyOCAxMi45NDI5QzEzLjE5MjggMTIuNjkyOCAxMy4zMzMzIDEyLjM1MzcgMTMuMzMzMyAxMi4wMDAxVjYuNjY2NzVDMTMuMzMzMyA2LjMxMzEzIDEzLjE5MjggNS45NzM5OSAxMi45NDI4IDUuNzIzOTRDMTIuNjkyOCA1LjQ3Mzg5IDEyLjM1MzYgNS4zMzM0MSAxMiA1LjMzMzQxSDYuNjY2NjZDNi4zMTMwMyA1LjMzMzQxIDUuOTczOSA1LjQ3Mzg5IDUuNzIzODUgNS43MjM5NEM1LjQ3MzggNS45NzM5OSA1LjMzMzMyIDYuMzEzMTMgNS4zMzMzMiA2LjY2Njc1VjEyLjAwMDFDNS4zMzMzMiAxMi4zNTM3IDUuNDczOCAxMi42OTI4IDUuNzIzODUgMTIuOTQyOUM1Ljk3MzkgMTMuMTkyOSA2LjMxMzAzIDEzLjMzMzQgNi42NjY2NiAxMy4zMzM0WlwiIHN0cm9rZT1cIiM5NEEzQjhcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPHByZSBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLXRleHQtWyNGMUY1RjldIGNxYS1mb250LW1vbm8gY3FhLXdoaXRlc3BhY2UtcHJlLXdyYXAgY3FhLW92ZXJmbG93LXgtYXV0byBjcWEtbS0wXCI+PGNvZGU+e3sgcXVlcnlSZXN1bHQ/LnF1ZXJ5IH19PC9jb2RlPjwvcHJlPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwidmFyaWFibGVOYW1lXCIgY2xhc3M9XCJjcWEtbXQtNCBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS10ZXh0LVsjNDU1NTZDXVwiPlxuICAgICAgICBTdG9yZWQgYXMgdmFyaWFibGU6IDxzcGFuIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS1iZy1bI0YxRjVGOV0gY3FhLXB4LTEgY3FhLXJvdW5kZWQtWzRweF0gY3FhLXRleHQtWyM0NTU1NkNdXCI+e3sgdmFyaWFibGVOYW1lIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLW10LTRcIiAqbmdJZj1cInF1ZXJ5UmVzdWx0Py5kYXRhXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyMzMTQxNThdXCI+UmVzcG9uc2U8L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIChjbGljayk9XCJjb3B5UmVzcG9uc2UoKVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLXJvdW5kZWRcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNNS4zMzMzMiAxMC42NjY3SDMuOTk5OTlDMy42NDYzNyAxMC42NjY3IDMuMzA3MjMgMTAuNTI2MyAzLjA1NzE4IDEwLjI3NjJDMi44MDcxMyAxMC4wMjYyIDIuNjY2NjYgOS42ODcwNCAyLjY2NjY2IDkuMzMzNDFWNC4wMDAwOEMyLjY2NjY2IDMuNjQ2NDYgMi44MDcxMyAzLjMwNzMyIDMuMDU3MTggMy4wNTcyN0MzLjMwNzIzIDIuODA3MjIgMy42NDYzNyAyLjY2Njc1IDMuOTk5OTkgMi42NjY3NUg5LjMzMzMyQzkuNjg2OTUgMi42NjY3NSAxMC4wMjYxIDIuODA3MjIgMTAuMjc2MSAzLjA1NzI3QzEwLjUyNjIgMy4zMDczMiAxMC42NjY3IDMuNjQ2NDYgMTAuNjY2NyA0LjAwMDA4VjUuMzMzNDFNNi42NjY2NiAxMy4zMzM0SDEyQzEyLjM1MzYgMTMuMzMzNCAxMi42OTI4IDEzLjE5MjkgMTIuOTQyOCAxMi45NDI5QzEzLjE5MjggMTIuNjkyOCAxMy4zMzMzIDEyLjM1MzcgMTMuMzMzMyAxMi4wMDAxVjYuNjY2NzVDMTMuMzMzMyA2LjMxMzEzIDEzLjE5MjggNS45NzM5OSAxMi45NDI4IDUuNzIzOTRDMTIuNjkyOCA1LjQ3Mzg5IDEyLjM1MzYgNS4zMzM0MSAxMiA1LjMzMzQxSDYuNjY2NjZDNi4zMTMwMyA1LjMzMzQxIDUuOTczOSA1LjQ3Mzg5IDUuNzIzODUgNS43MjM5NEM1LjQ3MzggNS45NzM5OSA1LjMzMzMyIDYuMzEzMTMgNS4zMzMzMiA2LjY2Njc1VjEyLjAwMDFDNS4zMzMzMiAxMi4zNTM3IDUuNDczOCAxMi42OTI4IDUuNzIzODUgMTIuOTQyOUM1Ljk3MzkgMTMuMTkyOSA2LjMxMzAzIDEzLjMzMzQgNi42NjY2NiAxMy4zMzM0WlwiIHN0cm9rZT1cIiM2MzYzNjNcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgXG4gICAgICA8Y3FhLXRhYmxlLXRlbXBsYXRlXG4gICAgICAgICpuZ0lmPVwiIWlzRW1wdHlSZXNwb25zZSAmJiBxdWVyeVJlc3VsdD8uZGF0YVwiXG4gICAgICAgIFtjb2x1bW5zXT1cInJlc3BvbnNlVGFibGVDb2x1bW5zXCJcbiAgICAgICAgW2RhdGFdPVwicXVlcnlSZXN1bHQ/LmRhdGEgfHwgW11cIlxuICAgICAgICBbcGFnZUluZGV4XT1cInBhZ2VJbmRleFwiXG4gICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICAgIFtpc0VtcHR5U3RhdGVdPVwiaXNFbXB0eVJlc3BvbnNlXCJcbiAgICAgICAgW2VtcHR5U3RhdGVDb25maWddPVwiZW1wdHlTdGF0ZUNvbmZpZ1wiXG4gICAgICAgIFtzaG93U2VhcmNoQmFyXT1cImZhbHNlXCJcbiAgICAgICAgW3Nob3dGaWx0ZXJCdXR0b25dPVwiZmFsc2VcIlxuICAgICAgICBbc2hvd1NldHRpbmdzQnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgW3Nob3dBdXRvUmVmcmVzaEJ1dHRvbl09XCJmYWxzZVwiXG4gICAgICAgIFtzaG93T3RoZXJCdXR0b25dPVwiZmFsc2VcIlxuICAgICAgICBbc2hvd0ZpbHRlclBhbmVsXT1cImZhbHNlXCJcbiAgICAgICAgW3NlcnZlclNpZGVQYWdpbmF0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIj5cbiAgICAgIDwvY3FhLXRhYmxlLXRlbXBsYXRlPlxuICAgICAgXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNFbXB0eVJlc3BvbnNlXCIgY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLXRleHQtWyM0NTU1NkNdIGNxYS1weS00IGNxYS10ZXh0LWNlbnRlclwiPlxuICAgICAgICBObyBkYXRhIHJldHVybmVkIGZyb20gdGhpcyBxdWVyeS5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
|