tango-app-ui-analyse-report 3.3.1-alpha.2 → 3.3.1-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/user-report/user-report.component.mjs +99 -27
- package/esm2022/lib/service/analysereport.service.mjs +7 -4
- package/fesm2022/tango-app-ui-analyse-report.mjs +107 -32
- package/fesm2022/tango-app-ui-analyse-report.mjs.map +1 -1
- package/lib/components/user-report/user-report.component.d.ts +6 -2
- package/lib/service/analysereport.service.d.ts +1 -0
- package/package.json +1 -1
|
@@ -4,18 +4,19 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
import * as i1 from "@ng-bootstrap/ng-bootstrap";
|
|
5
5
|
import * as i2 from "tango-app-ui-global";
|
|
6
6
|
import * as i3 from "../../service/analysereport.service";
|
|
7
|
-
import * as i4 from "
|
|
8
|
-
import * as i5 from "
|
|
7
|
+
import * as i4 from "tango-app-ui-shared";
|
|
8
|
+
import * as i5 from "@angular/common";
|
|
9
9
|
import * as i6 from "@angular/forms";
|
|
10
10
|
export class UserReportComponent {
|
|
11
11
|
modalservice;
|
|
12
12
|
gs;
|
|
13
13
|
service;
|
|
14
|
+
toast;
|
|
14
15
|
confirmationModal;
|
|
15
16
|
modalRef;
|
|
16
17
|
loading = true;
|
|
17
18
|
noData = false;
|
|
18
|
-
showsidenav =
|
|
19
|
+
showsidenav = true;
|
|
19
20
|
openCustom = false;
|
|
20
21
|
openAccordian = false;
|
|
21
22
|
customName = '';
|
|
@@ -30,17 +31,18 @@ export class UserReportComponent {
|
|
|
30
31
|
metricsArray = [];
|
|
31
32
|
comparisionFilter = 'WTD';
|
|
32
33
|
filterDataList = 'hour';
|
|
33
|
-
sortBy =
|
|
34
|
-
sortColumName;
|
|
34
|
+
sortBy = '';
|
|
35
|
+
sortColumName = '';
|
|
35
36
|
totalCount;
|
|
36
|
-
searchValue;
|
|
37
|
+
searchValue = '';
|
|
37
38
|
dynamicData = {};
|
|
38
39
|
displayedColumns = [];
|
|
39
40
|
destroy$ = new Subject();
|
|
40
|
-
constructor(modalservice, gs, service) {
|
|
41
|
+
constructor(modalservice, gs, service, toast) {
|
|
41
42
|
this.modalservice = modalservice;
|
|
42
43
|
this.gs = gs;
|
|
43
44
|
this.service = service;
|
|
45
|
+
this.toast = toast;
|
|
44
46
|
}
|
|
45
47
|
ngOnInit() {
|
|
46
48
|
this.selectedData = this.standardData[0];
|
|
@@ -54,16 +56,19 @@ export class UserReportComponent {
|
|
|
54
56
|
fromDate: data.date.startDate,
|
|
55
57
|
toDate: data.date.endDate,
|
|
56
58
|
limit: 10,
|
|
57
|
-
offset:
|
|
59
|
+
offset: 0,
|
|
58
60
|
templateType: this.selectedData.value,
|
|
59
61
|
export: false,
|
|
60
|
-
|
|
62
|
+
search: this.searchValue,
|
|
63
|
+
sort: this.sortColumName,
|
|
64
|
+
sortBy: this.sortBy
|
|
61
65
|
};
|
|
62
66
|
this.getTemplates();
|
|
63
67
|
}
|
|
64
68
|
});
|
|
65
69
|
}
|
|
66
70
|
getTemplates() {
|
|
71
|
+
this.infraTable = [];
|
|
67
72
|
this.loading = true;
|
|
68
73
|
this.service.reportList(this.dynamicData).pipe(takeUntil(this.destroy$)).subscribe((res) => {
|
|
69
74
|
if (res && res.data.templateData?.length) {
|
|
@@ -86,8 +91,16 @@ export class UserReportComponent {
|
|
|
86
91
|
this.showsidenav = !this.showsidenav;
|
|
87
92
|
}
|
|
88
93
|
selectRadio(data) {
|
|
94
|
+
this.searchValue = '';
|
|
95
|
+
this.dynamicData.offset = 0;
|
|
96
|
+
this.infraTable = [];
|
|
89
97
|
this.selectedData = data;
|
|
98
|
+
this.dynamicData.limit = 10;
|
|
90
99
|
this.dynamicData.templateType = data.value;
|
|
100
|
+
this.dynamicData.sort = '';
|
|
101
|
+
this.dynamicData.sortBy = '';
|
|
102
|
+
this.sortColumName = '';
|
|
103
|
+
this.sortBy = '';
|
|
91
104
|
this.getTemplates();
|
|
92
105
|
}
|
|
93
106
|
createCustom() {
|
|
@@ -124,6 +137,7 @@ export class UserReportComponent {
|
|
|
124
137
|
this.filterDataList = data;
|
|
125
138
|
}
|
|
126
139
|
customCreate() {
|
|
140
|
+
this.infraTable = [];
|
|
127
141
|
this.loading = true;
|
|
128
142
|
this.selectedData = {};
|
|
129
143
|
let selectField = this.metricsData.filter((item) => item.checked).map((item) => item.value);
|
|
@@ -135,14 +149,16 @@ export class UserReportComponent {
|
|
|
135
149
|
limit: this.dynamicData.limit,
|
|
136
150
|
offset: this.dynamicData.offset,
|
|
137
151
|
export: false,
|
|
138
|
-
comparisonFilter: this.comparisionFilter,
|
|
152
|
+
comparisonFilter: this.comparisionFilter != 'None' ? this.comparisionFilter : '',
|
|
139
153
|
timeFilter: this.filterDataList,
|
|
140
154
|
seletedFields: selectField,
|
|
141
|
-
|
|
155
|
+
search: this.searchValue,
|
|
156
|
+
sort: this.sortColumName,
|
|
157
|
+
sortBy: this.sortBy
|
|
142
158
|
};
|
|
143
159
|
this.service.customTemplate(data).pipe(takeUntil(this.destroy$)).subscribe((res) => {
|
|
144
|
-
if (res && res.data?.
|
|
145
|
-
this.infraTable = res.data.
|
|
160
|
+
if (res && res.data?.customTemplate?.length) {
|
|
161
|
+
this.infraTable = res.data.customTemplate;
|
|
146
162
|
this.totalCount = res.data.totalCount;
|
|
147
163
|
this.displayedColumns = Object.keys(this.infraTable[0]);
|
|
148
164
|
this.loading = false;
|
|
@@ -157,10 +173,6 @@ export class UserReportComponent {
|
|
|
157
173
|
this.noData = true;
|
|
158
174
|
});
|
|
159
175
|
}
|
|
160
|
-
// cancelCustom(){
|
|
161
|
-
// this.openCustom = true;
|
|
162
|
-
// this.openAccordian = false;
|
|
163
|
-
// }
|
|
164
176
|
sortData(value) {
|
|
165
177
|
if (this.sortColumName == value) {
|
|
166
178
|
this.sortBy *= -1;
|
|
@@ -169,9 +181,17 @@ export class UserReportComponent {
|
|
|
169
181
|
this.sortBy = 1;
|
|
170
182
|
}
|
|
171
183
|
this.sortColumName = value;
|
|
184
|
+
if (this.openCustom) {
|
|
185
|
+
this.customCreate();
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
this.dynamicData.sort = this.sortColumName;
|
|
189
|
+
this.dynamicData.sortBy = this.sortBy;
|
|
190
|
+
this.getTemplates();
|
|
191
|
+
}
|
|
172
192
|
}
|
|
173
193
|
onPageChange(pageOffset) {
|
|
174
|
-
this.dynamicData.offset = pageOffset;
|
|
194
|
+
this.dynamicData.offset = pageOffset - 1;
|
|
175
195
|
if (this.openCustom) {
|
|
176
196
|
this.customCreate();
|
|
177
197
|
}
|
|
@@ -181,7 +201,7 @@ export class UserReportComponent {
|
|
|
181
201
|
}
|
|
182
202
|
onPageSizeChange(pageSize) {
|
|
183
203
|
this.dynamicData.limit = parseInt(pageSize);
|
|
184
|
-
this.dynamicData.offset =
|
|
204
|
+
this.dynamicData.offset = 0;
|
|
185
205
|
if (this.openCustom) {
|
|
186
206
|
this.customCreate();
|
|
187
207
|
}
|
|
@@ -190,45 +210,97 @@ export class UserReportComponent {
|
|
|
190
210
|
}
|
|
191
211
|
}
|
|
192
212
|
searchData() {
|
|
213
|
+
this.dynamicData.offset = 0;
|
|
193
214
|
if (this.openCustom) {
|
|
194
215
|
this.customCreate();
|
|
195
216
|
}
|
|
196
217
|
else {
|
|
218
|
+
this.dynamicData.search = this.searchValue;
|
|
197
219
|
this.getTemplates();
|
|
198
220
|
}
|
|
199
221
|
}
|
|
200
222
|
ExportasXlsx() {
|
|
223
|
+
let data;
|
|
224
|
+
if (this.openCustom) {
|
|
225
|
+
this.exportCustomTemplate();
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
this.dynamicData.search = this.searchValue;
|
|
229
|
+
this.exportTemplates();
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
exportTemplates() {
|
|
201
233
|
let data = {
|
|
234
|
+
clientId: this.dynamicData.clientId,
|
|
202
235
|
storeId: this.dynamicData.storeId,
|
|
203
236
|
fromDate: this.dynamicData.fromDate,
|
|
204
237
|
toDate: this.dynamicData.toDate,
|
|
205
238
|
limit: 10000,
|
|
206
|
-
offset:
|
|
239
|
+
offset: 0,
|
|
207
240
|
templateType: this.selectedData.value,
|
|
208
241
|
export: true,
|
|
209
|
-
|
|
242
|
+
search: this.searchValue,
|
|
243
|
+
sort: this.sortColumName,
|
|
244
|
+
sortBy: this.sortBy
|
|
210
245
|
};
|
|
211
246
|
this.service.downloadReportList(data).pipe(takeUntil(this.destroy$)).subscribe((res) => {
|
|
212
247
|
if (res) {
|
|
213
248
|
this.service.saveAsExcelFile(res, this.selectedData.name);
|
|
214
249
|
}
|
|
250
|
+
}, (error) => {
|
|
251
|
+
this.toast.getErrorToast('Something went wrong');
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
exportCustomTemplate() {
|
|
255
|
+
let selectField = this.metricsData.filter((item) => item.checked).map((item) => item.value);
|
|
256
|
+
let data = {
|
|
257
|
+
clientId: this.dynamicData.clientId,
|
|
258
|
+
storeId: this.dynamicData.storeId,
|
|
259
|
+
fromDate: this.dynamicData.fromDate,
|
|
260
|
+
toDate: this.dynamicData.toDate,
|
|
261
|
+
limit: 10000,
|
|
262
|
+
offset: 0,
|
|
263
|
+
export: true,
|
|
264
|
+
comparisonFilter: this.comparisionFilter != 'None' ? this.comparisionFilter : '',
|
|
265
|
+
timeFilter: this.filterDataList,
|
|
266
|
+
seletedFields: selectField,
|
|
267
|
+
search: this.searchValue,
|
|
268
|
+
sort: this.sortColumName,
|
|
269
|
+
sortBy: this.sortBy
|
|
270
|
+
};
|
|
271
|
+
this.service.downloadCustomReportList(data).pipe(takeUntil(this.destroy$)).subscribe((res) => {
|
|
272
|
+
if (res) {
|
|
273
|
+
this.service.saveAsExcelFile(res, 'customTemplate');
|
|
274
|
+
}
|
|
275
|
+
}, (error) => {
|
|
276
|
+
this.toast.getErrorToast('Something went wrong');
|
|
215
277
|
});
|
|
216
278
|
}
|
|
217
279
|
reset() {
|
|
218
280
|
this.openCustom = false;
|
|
219
281
|
this.custombtn = 'Metrics';
|
|
220
282
|
this.metricsData.forEach((item) => item.checked = false);
|
|
283
|
+
this.comparisionFilter = 'WTD';
|
|
284
|
+
this.filterDataList = 'hour';
|
|
221
285
|
}
|
|
222
|
-
|
|
286
|
+
resetValues() {
|
|
287
|
+
this.openCustom = !this.openCustom;
|
|
288
|
+
this.searchValue = '';
|
|
289
|
+
this.dynamicData.offset = 0;
|
|
290
|
+
this.dynamicData.limit = 10;
|
|
291
|
+
this.sortColumName = '';
|
|
292
|
+
this.sortBy = '';
|
|
293
|
+
this.dynamicData.sort = '';
|
|
294
|
+
this.dynamicData.sortBy = '';
|
|
223
295
|
}
|
|
224
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserReportComponent, deps: [{ token: i1.NgbModal }, { token: i2.GlobalStateService }, { token: i3.AnalysereportService }], target: i0.ɵɵFactoryTarget.Component });
|
|
225
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: UserReportComponent, selector: "lib-user-report", viewQueries: [{ propertyName: "confirmationModal", first: true, predicate: ["confirmationModal"], descendants: true }], ngImport: i0, template: "<div class=\"row mb-5\">\r\n <div [ngClass]=\"showsidenav ? 'col-sm-3':'d-none'\">\r\n <div class=\"card position-relative h-100\">\r\n <div class=\"card-body p-0\">\r\n <div ngbAccordion [closeOthers]=\"true\">\r\n <!-- Standard Template Start -->\r\n\r\n <div ngbAccordionItem [collapsed]=\"openAccordian\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton (click)=\"reset()\">\r\n <div class=\"d-grid\">Standard Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"pt-0 border-0\">\r\n <ng-template class=\"d-flex flex-column justify-content-between\">\r\n <div class=\"card-body h-auto p-0\">\r\n <div class=\"card-label\">\r\n Please select a report to preview \r\n </div>\r\n <div *ngFor=\"let data of standardData\" class=\"mt-5 cursor-pointer\">\r\n <div (click)=\"selectRadio(data)\" class=\"d-flex align-items-center\">\r\n <input [checked]=\"selectedData.name === data.name\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Standard Template End -->\r\n <!-- Custom Template Start -->\r\n <!-- *ngIf=\"!openCustom\" -->\r\n <div ngbAccordionItem [collapsed]=\"!openCustom\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading pt-0\" ngbAccordionButton (click)=\"openCustom = !openCustom;\">\r\n <div class=\"d-grid\">Custom Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <div class=\"card-body h-100px p-0\">\r\n <div class=\"card-label\">\r\n Please select your data points to add into the reports\r\n </div>\r\n <div class=\"btnheader w-100 p-2 mt-5\">\r\n <span class=\"cursor-pointer px-2\" (click)=\"customOption(button)\" [ngClass]=\"this.custombtn === button ? 'btn px-3':'px-3'\" *ngFor=\"let button of costomButtons\">{{button}}</span>\r\n </div>\r\n <div [ngClass]=\"!infraTable.length ? 'h-100 overflow-auto' : ''\">\r\n <div *ngIf=\"custombtn === 'Metrics'\">\r\n <div *ngFor=\"let data of metricsData\" class=\"mt-5\">\r\n <div>\r\n <input type=\"checkbox\" class=\"mt-2 cursor-pointer\" [(ngModel)]=\"data.checked\">\r\n <span class=\"ms-5 standard fs-4\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Comparision'\">\r\n <div *ngFor=\"let data of comparisionData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getComparision(data)\">\r\n <input [checked]=\"comparisionFilter === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Time Filter'\">\r\n <div *ngFor=\"let data of filterData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getFilter(data)\">\r\n <input [checked]=\"filterDataList === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data === 'hour' ? 'By Hour' : 'By Date'}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Custom Template End -->\r\n \r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0 mt-5\">\r\n <!-- <button *ngIf=\"!openAccordian\" (click)=\"createCustom()\" class=\"btn btn-primary w-100\">\r\n Create Custom Template\r\n </button> -->\r\n <div *ngIf=\"openCustom\" class=\"d-flex w-100 mt-5\">\r\n <button class=\"btn btn-default btn-outline w-50 me-3\" [ngClass]=\"custombtn === 'Metrics' ? 'hidden' : ''\" (click)=\"movetoBack()\">Back</button>\r\n <button *ngIf=\"custombtn !== 'Time Filter'\" (click)=\"movetoNext()\" class=\"btn btn-default btn-primary w-50 ms-3\">Next</button>\r\n <button *ngIf=\"custombtn === 'Time Filter'\" (click)=\"customCreate()\" class=\"btn btn-default btn-primary w-50 ms-3\">View</button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showsidenav\" (click)=\"sidenav()\" class=\"backButtonright text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M8.27259 12.6363L4.63623 8.99989L8.27259 5.36353M13.3635 12.6363L9.72714 8.99989L13.3635 5.36353\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"showsidenav ? 'col-sm-9':'col-sm-12'\">\r\n <div class=\"card position-relative h-100\">\r\n <div *ngIf=\"!showsidenav\" (click)=\"sidenav()\" class=\"backButtonleft text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9.72714 12.6365L13.3635 9.00013L9.72714 5.36377M4.63623 12.6365L8.27259 9.00013L4.63623 5.36377\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-title\">\r\n <span class=\"card-label\">{{selectedData?.name || 'Custom Template'}}</span>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" class=\"form-control ps-14 me-2\" (change)=\"searchData()\" [(ngModel)]=\"searchValue\" placeholder=\"Search\"\r\n autocomplete=\"off\"/>\r\n </div> \r\n <button class=\"btn btn-default btn-outline me-3\" (click)=\"ExportasXlsx()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> <span *ngIf=\"!showsidenav\" class=\"ms-3\">Export</span></button>\r\n <!-- <button class=\"btn btn-default btn-outline\" (click)=\"shareData()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10164_5579)\"><path d=\"M18.3332 1.66675L9.1665 10.8334M18.3332 1.66675L12.4998 18.3334L9.1665 10.8334M18.3332 1.66675L1.6665 7.50008L9.1665 10.8334\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g><defs><clipPath id=\"clip0_10164_5579\"><rect width=\"20\" height=\"20\" fill=\"white\"/></clipPath></defs></svg><span *ngIf=\"!showsidenav\" class=\"ms-3\">Share</span>\r\n </button> -->\r\n </div>\r\n </div>\r\n <div class=\"card-body\"> \r\n <ng-container *ngIf=\"loading\">\r\n <div class=\"row loader card d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"row\" *ngIf=\"!loading && noData\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card-body my-8 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Report Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\" *ngIf=\"!loading && infraTable.length\">\r\n <table class=\"table bottom-border text-nowrap w-100\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of displayedColumns;let i=index\">\r\n <div class=\"cursor-pointer\" (click)=\"sortData(column)\">\r\n <span>{{column}}</span>\r\n <span *ngIf=\"sortColumName === column && sortBy !== 1 || sortColumName !== column\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n [attr.stroke]=\"sortColumName === column ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === column && sortBy !== -1\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n [attr.stroke]=\"sortColumName === column ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of infraTable; let i = index\">\r\n <td *ngFor=\"let key of displayedColumns\">\r\n <span>{{key === 'date' ? (data[key] | date:'dd MMM, YYYY') : (data[key] || '--') }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <lib-pagination [itemsPerPage]=\"dynamicData.limit\"\r\n [currentPage]=\"dynamicData.offset\" [totalItems]=\"totalCount\"\r\n [paginationSizes]=\"[10,20,30]\" [pageSize]=\"dynamicData.limit\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\" *ngIf=\"!loading && infraTable.length\"></lib-pagination>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #confirmationModal let-modal>\r\n <div class=\"card border-0\">\r\n <div class=\"card-body\">\r\n <img src=\"./assets/tango/Images/custompopup-icon.png\">\r\n <div class=\" mt-5\">\r\n <span class=\"header fw-bold\">Custom Template Name</span>\r\n <div class=\"mt-3 sub-header fw-semibold\">Are you sure you want to delete the user globally?</div>\r\n </div>\r\n <div class=\"mt-10\">\r\n <label class=\"sub-header\" style=\"color: #344054; font-weight: 400;\" for=\"custom-name\">Template Name</label>\r\n <input type=\"text\" [(ngModel)]=\"customName\" class=\"form-control mt-2\" id=\"custom-Name\">\r\n </div>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <button type=\"button\" class=\"btn btn-default btn-outline w-50 me-2\" (click)=\"modal.dismiss()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary w-50 ms-2\" [disabled]=\"customName === ''\" (click)=\"modal.close()\">Apply</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>", styles: [".backButtonright{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;right:-10px;z-index:5}.backButtonleft{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-10px;z-index:5}.dynamicClass1{display:none}.card-label{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.standard{color:var(--Gray-700, #344054);font-size:16px;font-weight:500;line-height:24px}.radio{width:16px!important;height:16px!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.img-src{width:25%!important}.btnheader{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--Gray-50, #F9FAFB)}.btnheader .btn{background:#fff!important;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f!important}input[type=checkbox]{width:16px!important;height:16px!important;margin:-3px 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}tbody tr{vertical-align:middle;height:70px!important}.header{color:var(--Gray-900, #101828)!important;font-size:18px!important;line-height:28px!important}.sub-header{color:var(--Gray-500, #667085)!important;font-size:14px!important;line-height:20px}.hidden{visibility:hidden}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgbAccordionButton, selector: "button[ngbAccordionButton]" }, { kind: "directive", type: i1.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i1.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i1.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i1.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i1.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "pipe", type: i4.DatePipe, name: "date" }] });
|
|
296
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserReportComponent, deps: [{ token: i1.NgbModal }, { token: i2.GlobalStateService }, { token: i3.AnalysereportService }, { token: i4.ToastService }], target: i0.ɵɵFactoryTarget.Component });
|
|
297
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: UserReportComponent, selector: "lib-user-report", viewQueries: [{ propertyName: "confirmationModal", first: true, predicate: ["confirmationModal"], descendants: true }], ngImport: i0, template: "<div class=\"row mb-5\">\r\n <div [ngClass]=\"showsidenav ? 'col-sm-3':'d-none'\">\r\n <div class=\"card position-relative h-100\">\r\n <div class=\"card-body p-0\">\r\n <div ngbAccordion [closeOthers]=\"true\">\r\n <!-- Standard Template Start -->\r\n\r\n <div ngbAccordionItem [collapsed]=\"openAccordian\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton (click)=\"reset()\">\r\n <div class=\"d-grid\">Standard Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"pt-0 border-0\">\r\n <ng-template class=\"d-flex flex-column justify-content-between\">\r\n <div class=\"card-body h-auto p-0\">\r\n <div class=\"card-label\">\r\n Please select a report to preview \r\n </div>\r\n <div *ngFor=\"let data of standardData\" class=\"mt-5 cursor-pointer\">\r\n <div (click)=\"selectRadio(data)\" class=\"d-flex align-items-center\">\r\n <input [checked]=\"selectedData.name === data.name\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Standard Template End -->\r\n <!-- Custom Template Start -->\r\n <!-- *ngIf=\"!openCustom\" -->\r\n <div ngbAccordionItem [collapsed]=\"!openCustom\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading pt-0\" ngbAccordionButton (click)=\"resetValues()\">\r\n <div class=\"d-grid\">Custom Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <div class=\"card-body h-100px p-0\">\r\n <div class=\"card-label\">\r\n Please select your data points to add into the reports\r\n </div>\r\n <div class=\"btnheader w-100 p-2 mt-5\">\r\n <span class=\"cursor-pointer px-2\" (click)=\"customOption(button)\" [ngClass]=\"this.custombtn === button ? 'btn px-3':'px-3'\" *ngFor=\"let button of costomButtons\">{{button}}</span>\r\n </div>\r\n <div [ngClass]=\"!infraTable.length ? 'h-100 overflow-auto' : ''\">\r\n <div *ngIf=\"custombtn === 'Metrics'\">\r\n <div *ngFor=\"let data of metricsData\" class=\"mt-5\">\r\n <div>\r\n <input type=\"checkbox\" class=\"mt-2 cursor-pointer\" [(ngModel)]=\"data.checked\">\r\n <span class=\"ms-5 standard fs-4\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Comparision'\">\r\n <div *ngFor=\"let data of comparisionData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getComparision(data)\">\r\n <input [checked]=\"comparisionFilter === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Time Filter'\">\r\n <div *ngFor=\"let data of filterData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getFilter(data)\">\r\n <input [checked]=\"filterDataList === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data === 'hour' ? 'By Hour' : 'By Date'}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div *ngIf=\"openCustom\" class=\"d-flex w-100\" [ngClass]=\"!loading ? 'mt-5':''\">\r\n <button class=\"btn btn-default btn-outline w-50 me-3\" [ngClass]=\"custombtn === 'Metrics' ? 'hidden' : ''\" (click)=\"movetoBack()\">Back</button>\r\n <button *ngIf=\"custombtn !== 'Time Filter'\" (click)=\"movetoNext()\" class=\"btn btn-default btn-primary w-50 ms-3\">Next</button>\r\n <button *ngIf=\"custombtn === 'Time Filter'\" (click)=\"customCreate()\" class=\"btn btn-default btn-primary w-50 ms-3\">View</button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <!-- Custom Template End -->\r\n \r\n </div>\r\n\r\n \r\n </div>\r\n <div class=\"card-footer border-0 mt-5\">\r\n <!-- <button *ngIf=\"!openAccordian\" (click)=\"createCustom()\" class=\"btn btn-primary w-100\">\r\n Create Custom Template\r\n </button> -->\r\n <!-- <div *ngIf=\"openCustom\" class=\"d-flex w-100 mt-5\">\r\n <button class=\"btn btn-default btn-outline w-50 me-3\" [ngClass]=\"custombtn === 'Metrics' ? 'hidden' : ''\" (click)=\"movetoBack()\">Back</button>\r\n <button *ngIf=\"custombtn !== 'Time Filter'\" (click)=\"movetoNext()\" class=\"btn btn-default btn-primary w-50 ms-3\">Next</button>\r\n <button *ngIf=\"custombtn === 'Time Filter'\" (click)=\"customCreate()\" class=\"btn btn-default btn-primary w-50 ms-3\">View</button>\r\n </div> -->\r\n </div>\r\n <div *ngIf=\"showsidenav\" (click)=\"sidenav()\" class=\"backButtonright text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M8.27259 12.6363L4.63623 8.99989L8.27259 5.36353M13.3635 12.6363L9.72714 8.99989L13.3635 5.36353\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"showsidenav ? 'col-sm-9':'col-sm-12'\">\r\n <div class=\"card position-relative h-100\">\r\n <div *ngIf=\"!showsidenav\" (click)=\"sidenav()\" class=\"backButtonleft text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9.72714 12.6365L13.3635 9.00013L9.72714 5.36377M4.63623 12.6365L8.27259 9.00013L4.63623 5.36377\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-title\">\r\n <span class=\"card-label\">{{selectedData?.name || 'Custom Template'}}</span>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" class=\"form-control ps-14 me-2\" (change)=\"searchData()\" [(ngModel)]=\"searchValue\" placeholder=\"Search\"\r\n autocomplete=\"off\"/>\r\n </div> \r\n <button class=\"btn btn-default btn-outline me-3\" (click)=\"ExportasXlsx()\" [disabled]=\"!infraTable.length\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> <span class=\"ms-3\">Export</span></button>\r\n <!-- <button class=\"btn btn-default btn-outline\" (click)=\"shareData()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10164_5579)\"><path d=\"M18.3332 1.66675L9.1665 10.8334M18.3332 1.66675L12.4998 18.3334L9.1665 10.8334M18.3332 1.66675L1.6665 7.50008L9.1665 10.8334\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g><defs><clipPath id=\"clip0_10164_5579\"><rect width=\"20\" height=\"20\" fill=\"white\"/></clipPath></defs></svg><span *ngIf=\"!showsidenav\" class=\"ms-3\">Share</span>\r\n </button> -->\r\n </div>\r\n </div>\r\n <div class=\"card-body\"> \r\n <ng-container *ngIf=\"loading\">\r\n <div class=\"row loader card d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"row\" *ngIf=\"!loading && noData\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card-body my-8 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Report Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\" *ngIf=\"!loading && !noData && infraTable.length\">\r\n <table class=\"table bottom-border text-nowrap w-100\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of displayedColumns;let i=index\">\r\n <div class=\"cursor-pointer\" (click)=\"sortData(column)\">\r\n <span>{{column}}</span>\r\n <span *ngIf=\"sortColumName === column && sortBy !== 1 || sortColumName !== column\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n [attr.stroke]=\"sortColumName === column ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === column && sortBy !== -1\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n [attr.stroke]=\"sortColumName === column ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of infraTable; let i = index\">\r\n <td *ngFor=\"let key of displayedColumns\">\r\n <span>{{key === 'date' ? (data[key] | date:'dd MMM, YYYY') : (data[key]) }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <lib-pagination [itemsPerPage]=\"dynamicData.limit\"\r\n [currentPage]=\"(dynamicData.offset + 1)\" [totalItems]=\"totalCount\"\r\n [paginationSizes]=\"[10,20,30]\" [pageSize]=\"dynamicData.limit\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\" *ngIf=\"!loading && !noData && infraTable.length\"></lib-pagination>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #confirmationModal let-modal>\r\n <div class=\"card border-0\">\r\n <div class=\"card-body\">\r\n <img src=\"./assets/tango/Images/custompopup-icon.png\">\r\n <div class=\" mt-5\">\r\n <span class=\"header fw-bold\">Custom Template Name</span>\r\n <div class=\"mt-3 sub-header fw-semibold\">Are you sure you want to delete the user globally?</div>\r\n </div>\r\n <div class=\"mt-10\">\r\n <label class=\"sub-header\" style=\"color: #344054; font-weight: 400;\" for=\"custom-name\">Template Name</label>\r\n <input type=\"text\" [(ngModel)]=\"customName\" class=\"form-control mt-2\" id=\"custom-Name\">\r\n </div>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <button type=\"button\" class=\"btn btn-default btn-outline w-50 me-2\" (click)=\"modal.dismiss()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary w-50 ms-2\" [disabled]=\"customName === ''\" (click)=\"modal.close()\">Apply</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>", styles: [".backButtonright{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;right:-10px;z-index:5}.backButtonleft{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-10px;z-index:5}.dynamicClass1{display:none}.card-label{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.standard{color:var(--Gray-700, #344054);font-size:16px;font-weight:500;line-height:24px}.radio{width:16px!important;height:16px!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.img-src{width:25%!important}.btnheader{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--Gray-50, #F9FAFB)}.btnheader .btn{background:#fff!important;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f!important}input[type=checkbox]{width:16px!important;height:16px!important;margin:-3px 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}tbody tr{vertical-align:middle;height:70px!important}.header{color:var(--Gray-900, #101828)!important;font-size:18px!important;line-height:28px!important}.sub-header{color:var(--Gray-500, #667085)!important;font-size:14px!important;line-height:20px}.hidden{visibility:hidden}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgbAccordionButton, selector: "button[ngbAccordionButton]" }, { kind: "directive", type: i1.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i1.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i1.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i1.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i1.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "pipe", type: i5.DatePipe, name: "date" }] });
|
|
226
298
|
}
|
|
227
299
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: UserReportComponent, decorators: [{
|
|
228
300
|
type: Component,
|
|
229
|
-
args: [{ selector: 'lib-user-report', template: "<div class=\"row mb-5\">\r\n <div [ngClass]=\"showsidenav ? 'col-sm-3':'d-none'\">\r\n <div class=\"card position-relative h-100\">\r\n <div class=\"card-body p-0\">\r\n <div ngbAccordion [closeOthers]=\"true\">\r\n <!-- Standard Template Start -->\r\n\r\n <div ngbAccordionItem [collapsed]=\"openAccordian\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton (click)=\"reset()\">\r\n <div class=\"d-grid\">Standard Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"pt-0 border-0\">\r\n <ng-template class=\"d-flex flex-column justify-content-between\">\r\n <div class=\"card-body h-auto p-0\">\r\n <div class=\"card-label\">\r\n Please select a report to preview \r\n </div>\r\n <div *ngFor=\"let data of standardData\" class=\"mt-5 cursor-pointer\">\r\n <div (click)=\"selectRadio(data)\" class=\"d-flex align-items-center\">\r\n <input [checked]=\"selectedData.name === data.name\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Standard Template End -->\r\n <!-- Custom Template Start -->\r\n <!-- *ngIf=\"!openCustom\" -->\r\n <div ngbAccordionItem [collapsed]=\"!openCustom\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading pt-0\" ngbAccordionButton (click)=\"openCustom = !openCustom;\">\r\n <div class=\"d-grid\">Custom Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <div class=\"card-body h-100px p-0\">\r\n <div class=\"card-label\">\r\n Please select your data points to add into the reports\r\n </div>\r\n <div class=\"btnheader w-100 p-2 mt-5\">\r\n <span class=\"cursor-pointer px-2\" (click)=\"customOption(button)\" [ngClass]=\"this.custombtn === button ? 'btn px-3':'px-3'\" *ngFor=\"let button of costomButtons\">{{button}}</span>\r\n </div>\r\n <div [ngClass]=\"!infraTable.length ? 'h-100 overflow-auto' : ''\">\r\n <div *ngIf=\"custombtn === 'Metrics'\">\r\n <div *ngFor=\"let data of metricsData\" class=\"mt-5\">\r\n <div>\r\n <input type=\"checkbox\" class=\"mt-2 cursor-pointer\" [(ngModel)]=\"data.checked\">\r\n <span class=\"ms-5 standard fs-4\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Comparision'\">\r\n <div *ngFor=\"let data of comparisionData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getComparision(data)\">\r\n <input [checked]=\"comparisionFilter === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Time Filter'\">\r\n <div *ngFor=\"let data of filterData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getFilter(data)\">\r\n <input [checked]=\"filterDataList === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data === 'hour' ? 'By Hour' : 'By Date'}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Custom Template End -->\r\n \r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0 mt-5\">\r\n <!-- <button *ngIf=\"!openAccordian\" (click)=\"createCustom()\" class=\"btn btn-primary w-100\">\r\n Create Custom Template\r\n </button> -->\r\n <div *ngIf=\"openCustom\" class=\"d-flex w-100 mt-5\">\r\n <button class=\"btn btn-default btn-outline w-50 me-3\" [ngClass]=\"custombtn === 'Metrics' ? 'hidden' : ''\" (click)=\"movetoBack()\">Back</button>\r\n <button *ngIf=\"custombtn !== 'Time Filter'\" (click)=\"movetoNext()\" class=\"btn btn-default btn-primary w-50 ms-3\">Next</button>\r\n <button *ngIf=\"custombtn === 'Time Filter'\" (click)=\"customCreate()\" class=\"btn btn-default btn-primary w-50 ms-3\">View</button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showsidenav\" (click)=\"sidenav()\" class=\"backButtonright text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M8.27259 12.6363L4.63623 8.99989L8.27259 5.36353M13.3635 12.6363L9.72714 8.99989L13.3635 5.36353\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"showsidenav ? 'col-sm-9':'col-sm-12'\">\r\n <div class=\"card position-relative h-100\">\r\n <div *ngIf=\"!showsidenav\" (click)=\"sidenav()\" class=\"backButtonleft text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9.72714 12.6365L13.3635 9.00013L9.72714 5.36377M4.63623 12.6365L8.27259 9.00013L4.63623 5.36377\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-title\">\r\n <span class=\"card-label\">{{selectedData?.name || 'Custom Template'}}</span>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" class=\"form-control ps-14 me-2\" (change)=\"searchData()\" [(ngModel)]=\"searchValue\" placeholder=\"Search\"\r\n autocomplete=\"off\"/>\r\n </div> \r\n <button class=\"btn btn-default btn-outline me-3\" (click)=\"ExportasXlsx()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> <span *ngIf=\"!showsidenav\" class=\"ms-3\">Export</span></button>\r\n <!-- <button class=\"btn btn-default btn-outline\" (click)=\"shareData()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10164_5579)\"><path d=\"M18.3332 1.66675L9.1665 10.8334M18.3332 1.66675L12.4998 18.3334L9.1665 10.8334M18.3332 1.66675L1.6665 7.50008L9.1665 10.8334\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g><defs><clipPath id=\"clip0_10164_5579\"><rect width=\"20\" height=\"20\" fill=\"white\"/></clipPath></defs></svg><span *ngIf=\"!showsidenav\" class=\"ms-3\">Share</span>\r\n </button> -->\r\n </div>\r\n </div>\r\n <div class=\"card-body\"> \r\n <ng-container *ngIf=\"loading\">\r\n <div class=\"row loader card d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"row\" *ngIf=\"!loading && noData\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card-body my-8 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Report Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\" *ngIf=\"!loading && infraTable.length\">\r\n <table class=\"table bottom-border text-nowrap w-100\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of displayedColumns;let i=index\">\r\n <div class=\"cursor-pointer\" (click)=\"sortData(column)\">\r\n <span>{{column}}</span>\r\n <span *ngIf=\"sortColumName === column && sortBy !== 1 || sortColumName !== column\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n [attr.stroke]=\"sortColumName === column ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === column && sortBy !== -1\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n [attr.stroke]=\"sortColumName === column ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of infraTable; let i = index\">\r\n <td *ngFor=\"let key of displayedColumns\">\r\n <span>{{key === 'date' ? (data[key] | date:'dd MMM, YYYY') : (data[key] || '--') }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <lib-pagination [itemsPerPage]=\"dynamicData.limit\"\r\n [currentPage]=\"dynamicData.offset\" [totalItems]=\"totalCount\"\r\n [paginationSizes]=\"[10,20,30]\" [pageSize]=\"dynamicData.limit\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\" *ngIf=\"!loading && infraTable.length\"></lib-pagination>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #confirmationModal let-modal>\r\n <div class=\"card border-0\">\r\n <div class=\"card-body\">\r\n <img src=\"./assets/tango/Images/custompopup-icon.png\">\r\n <div class=\" mt-5\">\r\n <span class=\"header fw-bold\">Custom Template Name</span>\r\n <div class=\"mt-3 sub-header fw-semibold\">Are you sure you want to delete the user globally?</div>\r\n </div>\r\n <div class=\"mt-10\">\r\n <label class=\"sub-header\" style=\"color: #344054; font-weight: 400;\" for=\"custom-name\">Template Name</label>\r\n <input type=\"text\" [(ngModel)]=\"customName\" class=\"form-control mt-2\" id=\"custom-Name\">\r\n </div>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <button type=\"button\" class=\"btn btn-default btn-outline w-50 me-2\" (click)=\"modal.dismiss()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary w-50 ms-2\" [disabled]=\"customName === ''\" (click)=\"modal.close()\">Apply</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>", styles: [".backButtonright{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;right:-10px;z-index:5}.backButtonleft{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-10px;z-index:5}.dynamicClass1{display:none}.card-label{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.standard{color:var(--Gray-700, #344054);font-size:16px;font-weight:500;line-height:24px}.radio{width:16px!important;height:16px!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.img-src{width:25%!important}.btnheader{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--Gray-50, #F9FAFB)}.btnheader .btn{background:#fff!important;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f!important}input[type=checkbox]{width:16px!important;height:16px!important;margin:-3px 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}tbody tr{vertical-align:middle;height:70px!important}.header{color:var(--Gray-900, #101828)!important;font-size:18px!important;line-height:28px!important}.sub-header{color:var(--Gray-500, #667085)!important;font-size:14px!important;line-height:20px}.hidden{visibility:hidden}\n"] }]
|
|
230
|
-
}], ctorParameters: () => [{ type: i1.NgbModal }, { type: i2.GlobalStateService }, { type: i3.AnalysereportService }], propDecorators: { confirmationModal: [{
|
|
301
|
+
args: [{ selector: 'lib-user-report', template: "<div class=\"row mb-5\">\r\n <div [ngClass]=\"showsidenav ? 'col-sm-3':'d-none'\">\r\n <div class=\"card position-relative h-100\">\r\n <div class=\"card-body p-0\">\r\n <div ngbAccordion [closeOthers]=\"true\">\r\n <!-- Standard Template Start -->\r\n\r\n <div ngbAccordionItem [collapsed]=\"openAccordian\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton (click)=\"reset()\">\r\n <div class=\"d-grid\">Standard Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"pt-0 border-0\">\r\n <ng-template class=\"d-flex flex-column justify-content-between\">\r\n <div class=\"card-body h-auto p-0\">\r\n <div class=\"card-label\">\r\n Please select a report to preview \r\n </div>\r\n <div *ngFor=\"let data of standardData\" class=\"mt-5 cursor-pointer\">\r\n <div (click)=\"selectRadio(data)\" class=\"d-flex align-items-center\">\r\n <input [checked]=\"selectedData.name === data.name\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Standard Template End -->\r\n <!-- Custom Template Start -->\r\n <!-- *ngIf=\"!openCustom\" -->\r\n <div ngbAccordionItem [collapsed]=\"!openCustom\">\r\n <div class=\"d-flex\" ngbAccordionHeader>\r\n <button class=\"mainheading pt-0\" ngbAccordionButton (click)=\"resetValues()\">\r\n <div class=\"d-grid\">Custom Template</div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <div class=\"card-body h-100px p-0\">\r\n <div class=\"card-label\">\r\n Please select your data points to add into the reports\r\n </div>\r\n <div class=\"btnheader w-100 p-2 mt-5\">\r\n <span class=\"cursor-pointer px-2\" (click)=\"customOption(button)\" [ngClass]=\"this.custombtn === button ? 'btn px-3':'px-3'\" *ngFor=\"let button of costomButtons\">{{button}}</span>\r\n </div>\r\n <div [ngClass]=\"!infraTable.length ? 'h-100 overflow-auto' : ''\">\r\n <div *ngIf=\"custombtn === 'Metrics'\">\r\n <div *ngFor=\"let data of metricsData\" class=\"mt-5\">\r\n <div>\r\n <input type=\"checkbox\" class=\"mt-2 cursor-pointer\" [(ngModel)]=\"data.checked\">\r\n <span class=\"ms-5 standard fs-4\">{{data.name}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Comparision'\">\r\n <div *ngFor=\"let data of comparisionData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getComparision(data)\">\r\n <input [checked]=\"comparisionFilter === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"custombtn === 'Time Filter'\">\r\n <div *ngFor=\"let data of filterData\" class=\"mt-5\">\r\n <div class=\"cursor-pointer d-flex align-items-center\" (click)=\"getFilter(data)\">\r\n <input [checked]=\"filterDataList === data\" type=\"radio\" class=\"radio\">\r\n <span class=\"ms-5 standard fs-4\">{{data === 'hour' ? 'By Hour' : 'By Date'}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div *ngIf=\"openCustom\" class=\"d-flex w-100\" [ngClass]=\"!loading ? 'mt-5':''\">\r\n <button class=\"btn btn-default btn-outline w-50 me-3\" [ngClass]=\"custombtn === 'Metrics' ? 'hidden' : ''\" (click)=\"movetoBack()\">Back</button>\r\n <button *ngIf=\"custombtn !== 'Time Filter'\" (click)=\"movetoNext()\" class=\"btn btn-default btn-primary w-50 ms-3\">Next</button>\r\n <button *ngIf=\"custombtn === 'Time Filter'\" (click)=\"customCreate()\" class=\"btn btn-default btn-primary w-50 ms-3\">View</button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <!-- Custom Template End -->\r\n \r\n </div>\r\n\r\n \r\n </div>\r\n <div class=\"card-footer border-0 mt-5\">\r\n <!-- <button *ngIf=\"!openAccordian\" (click)=\"createCustom()\" class=\"btn btn-primary w-100\">\r\n Create Custom Template\r\n </button> -->\r\n <!-- <div *ngIf=\"openCustom\" class=\"d-flex w-100 mt-5\">\r\n <button class=\"btn btn-default btn-outline w-50 me-3\" [ngClass]=\"custombtn === 'Metrics' ? 'hidden' : ''\" (click)=\"movetoBack()\">Back</button>\r\n <button *ngIf=\"custombtn !== 'Time Filter'\" (click)=\"movetoNext()\" class=\"btn btn-default btn-primary w-50 ms-3\">Next</button>\r\n <button *ngIf=\"custombtn === 'Time Filter'\" (click)=\"customCreate()\" class=\"btn btn-default btn-primary w-50 ms-3\">View</button>\r\n </div> -->\r\n </div>\r\n <div *ngIf=\"showsidenav\" (click)=\"sidenav()\" class=\"backButtonright text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M8.27259 12.6363L4.63623 8.99989L8.27259 5.36353M13.3635 12.6363L9.72714 8.99989L13.3635 5.36353\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"showsidenav ? 'col-sm-9':'col-sm-12'\">\r\n <div class=\"card position-relative h-100\">\r\n <div *ngIf=\"!showsidenav\" (click)=\"sidenav()\" class=\"backButtonleft text-center pt-1 cursor-pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M9.72714 12.6365L13.3635 9.00013L9.72714 5.36377M4.63623 12.6365L8.27259 9.00013L4.63623 5.36377\" stroke=\"#101828\" stroke-width=\"1.45455\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"card-header border-0\">\r\n <div class=\"card-title\">\r\n <span class=\"card-label\">{{selectedData?.name || 'Custom Template'}}</span>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\"\r\n height=\"2\" rx=\"1\" transform=\"rotate(45 17.0365 15.1223)\"\r\n fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" class=\"form-control ps-14 me-2\" (change)=\"searchData()\" [(ngModel)]=\"searchValue\" placeholder=\"Search\"\r\n autocomplete=\"off\"/>\r\n </div> \r\n <button class=\"btn btn-default btn-outline me-3\" (click)=\"ExportasXlsx()\" [disabled]=\"!infraTable.length\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> <span class=\"ms-3\">Export</span></button>\r\n <!-- <button class=\"btn btn-default btn-outline\" (click)=\"shareData()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10164_5579)\"><path d=\"M18.3332 1.66675L9.1665 10.8334M18.3332 1.66675L12.4998 18.3334L9.1665 10.8334M18.3332 1.66675L1.6665 7.50008L9.1665 10.8334\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g><defs><clipPath id=\"clip0_10164_5579\"><rect width=\"20\" height=\"20\" fill=\"white\"/></clipPath></defs></svg><span *ngIf=\"!showsidenav\" class=\"ms-3\">Share</span>\r\n </button> -->\r\n </div>\r\n </div>\r\n <div class=\"card-body\"> \r\n <ng-container *ngIf=\"loading\">\r\n <div class=\"row loader card d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"row\" *ngIf=\"!loading && noData\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card-body my-8 d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Report Analysis</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\" *ngIf=\"!loading && !noData && infraTable.length\">\r\n <table class=\"table bottom-border text-nowrap w-100\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let column of displayedColumns;let i=index\">\r\n <div class=\"cursor-pointer\" (click)=\"sortData(column)\">\r\n <span>{{column}}</span>\r\n <span *ngIf=\"sortColumName === column && sortBy !== 1 || sortColumName !== column\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n [attr.stroke]=\"sortColumName === column ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === column && sortBy !== -1\" class=\"ms-3\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n [attr.stroke]=\"sortColumName === column ? '#00A3FF' :'#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of infraTable; let i = index\">\r\n <td *ngFor=\"let key of displayedColumns\">\r\n <span>{{key === 'date' ? (data[key] | date:'dd MMM, YYYY') : (data[key]) }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <lib-pagination [itemsPerPage]=\"dynamicData.limit\"\r\n [currentPage]=\"(dynamicData.offset + 1)\" [totalItems]=\"totalCount\"\r\n [paginationSizes]=\"[10,20,30]\" [pageSize]=\"dynamicData.limit\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\" *ngIf=\"!loading && !noData && infraTable.length\"></lib-pagination>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #confirmationModal let-modal>\r\n <div class=\"card border-0\">\r\n <div class=\"card-body\">\r\n <img src=\"./assets/tango/Images/custompopup-icon.png\">\r\n <div class=\" mt-5\">\r\n <span class=\"header fw-bold\">Custom Template Name</span>\r\n <div class=\"mt-3 sub-header fw-semibold\">Are you sure you want to delete the user globally?</div>\r\n </div>\r\n <div class=\"mt-10\">\r\n <label class=\"sub-header\" style=\"color: #344054; font-weight: 400;\" for=\"custom-name\">Template Name</label>\r\n <input type=\"text\" [(ngModel)]=\"customName\" class=\"form-control mt-2\" id=\"custom-Name\">\r\n </div>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <button type=\"button\" class=\"btn btn-default btn-outline w-50 me-2\" (click)=\"modal.dismiss()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary w-50 ms-2\" [disabled]=\"customName === ''\" (click)=\"modal.close()\">Apply</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>", styles: [".backButtonright{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;right:-10px;z-index:5}.backButtonleft{width:25px;height:25px;border-radius:20px;background:#fff;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-10px;z-index:5}.dynamicClass1{display:none}.card-label{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.standard{color:var(--Gray-700, #344054);font-size:16px;font-weight:500;line-height:24px}.radio{width:16px!important;height:16px!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.img-src{width:25%!important}.btnheader{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--Gray-50, #F9FAFB)}.btnheader .btn{background:#fff!important;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f!important}input[type=checkbox]{width:16px!important;height:16px!important;margin:-3px 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}tbody tr{vertical-align:middle;height:70px!important}.header{color:var(--Gray-900, #101828)!important;font-size:18px!important;line-height:28px!important}.sub-header{color:var(--Gray-500, #667085)!important;font-size:14px!important;line-height:20px}.hidden{visibility:hidden}.nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}\n"] }]
|
|
302
|
+
}], ctorParameters: () => [{ type: i1.NgbModal }, { type: i2.GlobalStateService }, { type: i3.AnalysereportService }, { type: i4.ToastService }], propDecorators: { confirmationModal: [{
|
|
231
303
|
type: ViewChild,
|
|
232
304
|
args: ['confirmationModal']
|
|
233
305
|
}] } });
|
|
234
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS1yZXBvcnQvc3JjL2xpYi9jb21wb25lbnRzL3VzZXItcmVwb3J0L3VzZXItcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFuYWx5c2UtcmVwb3J0L3NyYy9saWIvY29tcG9uZW50cy91c2VyLXJlcG9ydC91c2VyLXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFRLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFRMUMsTUFBTSxPQUFPLG1CQUFtQjtJQTRCVjtJQUE4QjtJQUE4QjtJQTFCaEQsaUJBQWlCLENBQU07SUFDdkQsUUFBUSxDQUEwQjtJQUNsQyxPQUFPLEdBQVcsSUFBSSxDQUFDO0lBQ3ZCLE1BQU0sR0FBVyxLQUFLLENBQUM7SUFDdkIsV0FBVyxHQUFXLEtBQUssQ0FBQztJQUM1QixVQUFVLEdBQVcsS0FBSyxDQUFDO0lBQzNCLGFBQWEsR0FBVyxLQUFLLENBQUM7SUFDOUIsVUFBVSxHQUFNLEVBQUUsQ0FBQztJQUNuQixZQUFZLEdBQU8sQ0FBQyxFQUFDLElBQUksRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsSUFBSSxFQUFDLFlBQVksRUFBQyxLQUFLLEVBQUMsR0FBRyxFQUFDLEVBQUMsRUFBQyxJQUFJLEVBQUMsWUFBWSxFQUFDLEtBQUssRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLElBQUksRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUE7SUFDNUksYUFBYSxHQUFPLENBQUMs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QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQzFGLElBQUcsR0FBRyxFQUFHO2dCQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVEO1FBRUgsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsS0FBSztRQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFDRCxTQUFTO0lBRVQsQ0FBQzt3R0F0TlUsbUJBQW1COzRGQUFuQixtQkFBbUIsK0tDWGhDLDgxZ0JBd09nQjs7NEZEN05ILG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUI7aUpBTUssaUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCxPbkluaXQsVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsLCBOZ2JNb2RhbCxOZ2JNb2RhbE1vZHVsZSxOZ2JNb2RhbFJlZiB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEFuYWx5c2VyZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hbmFseXNlcmVwb3J0LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItdXNlci1yZXBvcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLXJlcG9ydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3VzZXItcmVwb3J0LmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlclJlcG9ydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdHtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29uZmlybWF0aW9uTW9kYWwnKSBjb25maXJtYXRpb25Nb2RhbDogYW55O1xyXG4gIG1vZGFsUmVmOiBOZ2JNb2RhbFJlZiB8IHVuZGVmaW5lZDtcclxuICBsb2FkaW5nOmJvb2xlYW4gPSB0cnVlO1xyXG4gIG5vRGF0YTpib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd3NpZGVuYXY6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIG9wZW5DdXN0b206Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIG9wZW5BY2NvcmRpYW46Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIGN1c3RvbU5hbWU6YW55ID0nJztcclxuICBzdGFuZGFyZERhdGE6YW55ID0gW3tuYW1lOidUZW1wbGF0ZSBBJyx2YWx1ZTonQSd9LHtuYW1lOidUZW1wbGF0ZSBCJyx2YWx1ZTonQid9LHtuYW1lOidUZW1wbGF0ZSBDJyx2YWx1ZTonQyd9LHtuYW1lOidUZW1wbGF0ZSBEJyx2YWx1ZTonRCd9XVxyXG4gIGNvc3RvbUJ1dHRvbnM6YW55ID0gWydNZXRyaWNzJywnQ29tcGFyaXNpb24nLCdUaW1lIEZpbHRlciddXHJcbiAgbWV0cmljc0RhdGE6YW55ID0gW3tuYW1lOidCaWxsYWJsZSBFbnRpdGllcycsY2hlY2tlZDpmYWxzZSx2YWx1ZTonQmlsbGFibGUgRW50aXRpZXMnfSx7bmFtZTonQm91bmNlZCBGb290ZmFsbCcsY2hlY2tlZDpmYWxzZSx2YWx1ZTpcIkJvdW5jZWQgQ291bnRcIn0se25hbWU6J01pc3NlZCBPcHBvcnR1bml0eScsY2hlY2tlZDpmYWxzZSx2YWx1ZTonTWlzc2VkIE9wcG9ydHVuaXR5IENvdW50J30se25hbWU6J0VuZ2FnZXJzIENvdW50JyxjaGVja2VkOmZhbHNlLHZhbHVlOidFbmdhZ2VycyBDb3VudCd9LHtuYW1lOidDb252ZXJzaW9uJyxjaGVja2VkOmZhbHNlLHZhbHVlOidDb252ZXJzaW9uIFJhdGUnfSx7bmFtZTonQWdlJyxjaGVja2VkOmZhbHNlLHZhbHVlOidhZ2UnfSx7bmFtZTonR2VuZGVyJyxjaGVja2VkOmZhbHNlLHZhbHVlOidnZW5kZXInfSx7bmFtZTonTk9CJyxjaGVja2VkOmZhbHNlLHZhbHVlOidub2InfV1cclxuICBjb21wYXJpc2lvbkRhdGE6YW55ID0gWydXVEQnLCdNVEQnLCdOb25lJ11cclxuICBmaWx0ZXJEYXRhOmFueSA9IFsnaG91cicsJ2RheSddXHJcbiAgaW5mcmFUYWJsZTphbnkgPSBbXVxyXG4gIHNlbGVjdGVkRGF0YTogYW55O1xyXG4gIGN1c3RvbWJ0bjogYW55ID0gJ01ldHJpY3MnO1xyXG4gIG1ldHJpY3NBcnJheTogYW55W10gPSBbXTtcclxuICBjb21wYXJpc2lvbkZpbHRlcjogc3RyaW5nID0gJ1dURCc7XHJcbiAgZmlsdGVyRGF0YUxpc3Q6IHN0cmluZyA9ICdob3VyJztcclxuICBzb3J0Qnk6YW55ID0gLTE7XHJcbiAgc29ydENvbHVtTmFtZTphbnk7XHJcbiAgdG90YWxDb3VudDphbnk7XHJcbiAgc2VhcmNoVmFsdWU6IGFueTtcclxuICBkeW5hbWljRGF0YTphbnkgPSB7fTtcclxuICBkaXNwbGF5ZWRDb2x1bW5zOmFueSA9IFtdO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbW9kYWxzZXJ2aWNlOk5nYk1vZGFsLHByaXZhdGUgZ3M6R2xvYmFsU3RhdGVTZXJ2aWNlLHByaXZhdGUgc2VydmljZTpBbmFseXNlcmVwb3J0U2VydmljZSl7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IHRoaXMuc3RhbmRhcmREYXRhWzBdO1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYoZGF0YT09bnVsbCl7XHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICB0aGlzLmR5bmFtaWNEYXRhID0ge1xyXG4gICAgICAgICAgY2xpZW50SWQ6ZGF0YS5jbGllbnQsXHJcbiAgICAgICAgICBzdG9yZUlkOiBkYXRhLnN0b3Jlcy5maWx0ZXIoKGl0ZW06YW55KSA9PiBpdGVtLmNoZWNrZWQpLm1hcCgoaXRlbTphbnkpID0+IGl0ZW0uc3RvcmVJZCksXHJcbiAgICAgICAgICBmcm9tRGF0ZTogZGF0YS5kYXRlLnN0YXJ0RGF0ZSxcclxuICAgICAgICAgIHRvRGF0ZTogZGF0YS5kYXRlLmVuZERhdGUsXHJcbiAgICAgICAgICBsaW1pdDogMTAsXHJcbiAgICAgICAgICBvZmZzZXQ6IDEsXHJcbiAgICAgICAgICB0ZW1wbGF0ZVR5cGU6IHRoaXMuc2VsZWN0ZWREYXRhLnZhbHVlLFxyXG4gICAgICAgICAgZXhwb3J0OmZhbHNlLFxyXG4gICAgICAgICAgc2VhcmNoVmFsdWU6dGhpcy5zZWFyY2hWYWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmdldFRlbXBsYXRlcygpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXRUZW1wbGF0ZXMoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zZXJ2aWNlLnJlcG9ydExpc3QodGhpcy5keW5hbWljRGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYocmVzICYmIHJlcy5kYXRhLnRlbXBsYXRlRGF0YT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5pbmZyYVRhYmxlID0gcmVzLmRhdGE/LnRlbXBsYXRlRGF0YTtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXMuZGF0YS50b3RhbENvdW50O1xyXG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IE9iamVjdC5rZXlzKHRoaXMuaW5mcmFUYWJsZVswXSk7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0sKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzaWRlbmF2KCl7XHJcbiAgICB0aGlzLnNob3dzaWRlbmF2ID0gIXRoaXMuc2hvd3NpZGVuYXY7XHJcbiAgfVxyXG4gIHNlbGVjdFJhZGlvKGRhdGE6YW55KXtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gZGF0YTtcclxuICAgIHRoaXMuZHluYW1pY0RhdGEudGVtcGxhdGVUeXBlID0gZGF0YS52YWx1ZTtcclxuICAgIHRoaXMuZ2V0VGVtcGxhdGVzKCk7XHJcbiAgfVxyXG4gIGNyZWF0ZUN1c3RvbSgpe1xyXG4gICAgdGhpcy5jdXN0b21OYW1lID0gJyc7XHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxzZXJ2aWNlLm9wZW4odGhpcy5jb25maXJtYXRpb25Nb2RhbCwgeyBjZW50ZXJlZDogdHJ1ZSB9KTtcclxuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHsgXHJcbiAgICAgIHRoaXMub3BlbkFjY29yZGlhbiA9ICF0aGlzLm9wZW5BY2NvcmRpYW47XHJcbiAgICAgIHRoaXMub3BlbkN1c3RvbSA9ICF0aGlzLm9wZW5DdXN0b207XHJcbiAgICB9KTtcclxuICB9XHJcbiAgY3VzdG9tT3B0aW9uKGRhdGE6YW55KXtcclxuICAgIHRoaXMuY3VzdG9tYnRuID0gZGF0YTtcclxuICB9XHJcbiAgbW92ZXRvTmV4dCgpe1xyXG4gICAgaWYodGhpcy5jdXN0b21idG4gPT09ICdNZXRyaWNzJyl7XHJcbiAgICAgIHRoaXMuY3VzdG9tYnRuID0gJ0NvbXBhcmlzaW9uJ1xyXG4gICAgfWVsc2UgaWYodGhpcy5jdXN0b21idG4gPT09ICdDb21wYXJpc2lvbicpe1xyXG4gICAgICB0aGlzLmN1c3RvbWJ0biA9ICdUaW1lIEZpbHRlcidcclxuICAgIH1cclxuICB9XHJcbiAgbW92ZXRvQmFjaygpe1xyXG4gICAgaWYodGhpcy5jdXN0b21idG4gPT09ICdDb21wYXJpc2lvbicpe1xyXG4gICAgICB0aGlzLmN1c3RvbWJ0biA9ICdNZXRyaWNzJ1xyXG4gICAgfWVsc2UgaWYodGhpcy5jdXN0b21idG4gPT09ICdUaW1lIEZpbHRlcicpe1xyXG4gICAgICB0aGlzLmN1c3RvbWJ0biA9ICdDb21wYXJpc2lvbidcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0Q29tcGFyaXNpb24oZGF0YTphbnkpe1xyXG4gICAgdGhpcy5jb21wYXJpc2lvbkZpbHRlciA9IGRhdGE7XHJcbiAgfVxyXG4gIGdldEZpbHRlcihkYXRhOmFueSl7XHJcbiAgICB0aGlzLmZpbHRlckRhdGFMaXN0ID0gZGF0YTtcclxuICB9XHJcbiAgY3VzdG9tQ3JlYXRlKCl7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGEgPSB7fTtcclxuICAgIGxldCBzZWxlY3RGaWVsZCA9ICB0aGlzLm1ldHJpY3NEYXRhLmZpbHRlcigoaXRlbTphbnkpID0+IGl0ZW0uY2hlY2tlZCkubWFwKChpdGVtOmFueSkgPT4gaXRlbS52YWx1ZSk7XHJcbiAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgY2xpZW50SWQ6dGhpcy5keW5hbWljRGF0YS5jbGllbnRJZCxcclxuICAgICAgc3RvcmVJZDogdGhpcy5keW5hbWljRGF0YS5zdG9yZUlkLFxyXG4gICAgICBmcm9tRGF0ZTogdGhpcy5keW5hbWljRGF0YS5mcm9tRGF0ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmR5bmFtaWNEYXRhLnRvRGF0ZSxcclxuICAgICAgbGltaXQ6IHRoaXMuZHluYW1pY0RhdGEubGltaXQsXHJcbiAgICAgIG9mZnNldDogdGhpcy5keW5hbWljRGF0YS5vZmZzZXQsXHJcbiAgICAgIGV4cG9ydDpmYWxzZSwgICAgXHJcbiAgICAgIGNvbXBhcmlzb25GaWx0ZXI6IHRoaXMuY29tcGFyaXNpb25GaWx0ZXIsXHJcbiAgICAgIHRpbWVGaWx0ZXI6IHRoaXMuZmlsdGVyRGF0YUxpc3QsIFxyXG4gICAgICBzZWxldGVkRmllbGRzOnNlbGVjdEZpZWxkLFxyXG4gICAgICBzZWFyY2hWYWx1ZTp0aGlzLnNlYXJjaFZhbHVlXHJcbiAgICB9XHJcbiAgICB0aGlzLnNlcnZpY2UuY3VzdG9tVGVtcGxhdGUoZGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZihyZXMgJiYgcmVzLmRhdGE/LmN1c3RvbVRlbXA/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5pbmZyYVRhYmxlID0gcmVzLmRhdGEuY3VzdG9tVGVtcDtcclxuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHJlcy5kYXRhLnRvdGFsQ291bnQ7XHJcbiAgICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBPYmplY3Qua2V5cyh0aGlzLmluZnJhVGFibGVbMF0pO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vIGNhbmNlbEN1c3RvbSgpe1xyXG4gIC8vICAgICB0aGlzLm9wZW5DdXN0b20gPSB0cnVlO1xyXG4gIC8vICAgICB0aGlzLm9wZW5BY2NvcmRpYW4gPSBmYWxzZTtcclxuICAvLyB9XHJcblxyXG4gIHNvcnREYXRhKHZhbHVlOmFueSl7XHJcbiAgICBpZih0aGlzLnNvcnRDb2x1bU5hbWUgPT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy5zb3J0QnkgKj0gLTE7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zb3J0QnkgPSAxO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zb3J0Q29sdW1OYW1lID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBvblBhZ2VDaGFuZ2UocGFnZU9mZnNldDogYW55KSB7XHJcbiAgICB0aGlzLmR5bmFtaWNEYXRhLm9mZnNldCA9IHBhZ2VPZmZzZXQ7XHJcbiAgICBpZih0aGlzLm9wZW5DdXN0b20pIHtcclxuICAgICAgdGhpcy5jdXN0b21DcmVhdGUoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFRlbXBsYXRlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25QYWdlU2l6ZUNoYW5nZShwYWdlU2l6ZTogYW55KSB7XHJcbiAgICB0aGlzLmR5bmFtaWNEYXRhLmxpbWl0ID0gcGFyc2VJbnQocGFnZVNpemUpO1xyXG4gICAgdGhpcy5keW5hbWljRGF0YS5vZmZzZXQgPSAxO1xyXG4gICAgaWYodGhpcy5vcGVuQ3VzdG9tKSB7XHJcbiAgICAgIHRoaXMuY3VzdG9tQ3JlYXRlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRUZW1wbGF0ZXMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgc2VhcmNoRGF0YSgpe1xyXG4gICAgaWYodGhpcy5vcGVuQ3VzdG9tKSB7XHJcbiAgICAgIHRoaXMuY3VzdG9tQ3JlYXRlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRUZW1wbGF0ZXMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgRXhwb3J0YXNYbHN4KCl7XHJcbiAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgc3RvcmVJZDogdGhpcy5keW5hbWljRGF0YS5zdG9yZUlkLFxyXG4gICAgICBmcm9tRGF0ZTogdGhpcy5keW5hbWljRGF0YS5mcm9tRGF0ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmR5bmFtaWNEYXRhLnRvRGF0ZSxcclxuICAgICAgbGltaXQ6IDEwMDAwLFxyXG4gICAgICBvZmZzZXQ6IDEsXHJcbiAgICAgIHRlbXBsYXRlVHlwZTogdGhpcy5zZWxlY3RlZERhdGEudmFsdWUsXHJcbiAgICAgIGV4cG9ydDp0cnVlLFxyXG4gICAgICBzZWFyY2hWYWx1ZTp0aGlzLnNlYXJjaFZhbHVlXHJcbiAgICB9XHJcbiAgICB0aGlzLnNlcnZpY2UuZG93bmxvYWRSZXBvcnRMaXN0KGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmKHJlcyApIHtcclxuICAgICAgICAgIHRoaXMuc2VydmljZS5zYXZlQXNFeGNlbEZpbGUocmVzLHRoaXMuc2VsZWN0ZWREYXRhLm5hbWUpO1xyXG4gICAgICB9XHJcbiAgICAgXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLm9wZW5DdXN0b20gPSBmYWxzZTtcclxuICAgIHRoaXMuY3VzdG9tYnRuID0gJ01ldHJpY3MnO1xyXG4gICAgdGhpcy5tZXRyaWNzRGF0YS5mb3JFYWNoKChpdGVtOmFueSkgPT4gaXRlbS5jaGVja2VkID0gZmFsc2UpO1xyXG4gIH1cclxuICBzaGFyZURhdGEoKXtcclxuXHJcbiAgfVxyXG4gIC8vIGNvbnZlcnRDb2x1bW5UaXRsZShkYXRhOmFueSkge1xyXG4gIC8vICAgbGV0IHdvcmRMaXN0ID0gZGF0YS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEgJDInKS5zcGxpdCgnICcpO1xyXG4gIC8vICAgaWYod29yZExpc3Rbd29yZExpc3QubGVuZ3RoLTFdID09ICdDb3VudCcpIHtcclxuICAvLyAgICAgd29yZExpc3Quc3BsaWNlKHdvcmRMaXN0Lmxlbmd0aC0xLDEpO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgd29yZExpc3QgPSB3b3JkTGlzdC5qb2luKCcgJyk7XHJcbiAgLy8gICB3b3JkTGlzdCA9IHdvcmRMaXN0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZExpc3Quc2xpY2UoMSk7XHJcbiAgLy8gICBpZih3b3JkTGlzdC5pbmNsdWRlcygnLScpKSB7XHJcbiAgLy8gICAgIHdvcmRMaXN0ID0gJ0FnZSAnICt3b3JkTGlzdDtcclxuICAvLyAgIH1cclxuICAvLyAgIHJldHVybiB3b3JkTGlzdDtcclxuICAvLyB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJvdyBtYi01XCI+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJzaG93c2lkZW5hdiA/ICdjb2wtc20tMyc6J2Qtbm9uZSdcIj5cclxuICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBwb3NpdGlvbi1yZWxhdGl2ZSBoLTEwMFwiPlxyXG4gICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHAtMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbiBbY2xvc2VPdGhlcnNdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBTdGFuZGFyZCBUZW1wbGF0ZSBTdGFydCAgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25JdGVtIFtjb2xsYXBzZWRdPVwib3BlbkFjY29yZGlhblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZ1wiIG5nYkFjY29yZGlvbkJ1dHRvbiAoY2xpY2spPVwicmVzZXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZ3JpZFwiPlN0YW5kYXJkIFRlbXBsYXRlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHkgY2xhc3M9XCJwdC0wIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGgtYXV0byBwLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgYSByZXBvcnQgdG8gcHJldmlldyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRhdGEgb2Ygc3RhbmRhcmREYXRhXCIgY2xhc3M9XCJtdC01IGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwic2VsZWN0UmFkaW8oZGF0YSlcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2NoZWNrZWRdPVwic2VsZWN0ZWREYXRhLm5hbWUgPT09IGRhdGEubmFtZVwiIHR5cGU9XCJyYWRpb1wiIGNsYXNzPVwicmFkaW9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTUgc3RhbmRhcmRcIj57e2RhdGEubmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFN0YW5kYXJkIFRlbXBsYXRlIEVuZCAgLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tIEN1c3RvbSBUZW1wbGF0ZSBTdGFydCAgLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tICpuZ0lmPVwiIW9wZW5DdXN0b21cIiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgIG5nYkFjY29yZGlvbkl0ZW0gW2NvbGxhcHNlZF09XCIhb3BlbkN1c3RvbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZyBwdC0wXCIgbmdiQWNjb3JkaW9uQnV0dG9uIChjbGljayk9XCJvcGVuQ3VzdG9tID0gIW9wZW5DdXN0b207XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ncmlkXCI+Q3VzdG9tIFRlbXBsYXRlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBoLTEwMHB4IHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCB5b3VyIGRhdGEgcG9pbnRzIHRvIGFkZCBpbnRvIHRoZSByZXBvcnRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuaGVhZGVyIHctMTAwIHAtMiBtdC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcHgtMlwiIChjbGljayk9XCJjdXN0b21PcHRpb24oYnV0dG9uKVwiIFtuZ0NsYXNzXT1cInRoaXMuY3VzdG9tYnRuID09PSBidXR0b24gPyAnYnRuIHB4LTMnOidweC0zJ1wiICpuZ0Zvcj1cImxldCBidXR0b24gb2YgY29zdG9tQnV0dG9uc1wiPnt7YnV0dG9ufX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIiFpbmZyYVRhYmxlLmxlbmd0aCA/ICdoLTEwMCBvdmVyZmxvdy1hdXRvJyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VzdG9tYnRuID09PSAnTWV0cmljcydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXRhIG9mIG1ldHJpY3NEYXRhXCIgY2xhc3M9XCJtdC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJtdC0yIGN1cnNvci1wb2ludGVyXCIgWyhuZ01vZGVsKV09XCJkYXRhLmNoZWNrZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtNSBzdGFuZGFyZCBmcy00XCI+e3tkYXRhLm5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXN0b21idG4gPT09ICdDb21wYXJpc2lvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXRhIG9mIGNvbXBhcmlzaW9uRGF0YVwiIGNsYXNzPVwibXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiIChjbGljayk9XCJnZXRDb21wYXJpc2lvbihkYXRhKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtjaGVja2VkXT1cImNvbXBhcmlzaW9uRmlsdGVyID09PSBkYXRhXCIgdHlwZT1cInJhZGlvXCIgY2xhc3M9XCJyYWRpb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy01IHN0YW5kYXJkIGZzLTRcIj57e2RhdGF9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXN0b21idG4gPT09ICdUaW1lIEZpbHRlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXRhIG9mIGZpbHRlckRhdGFcIiBjbGFzcz1cIm10LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiAoY2xpY2spPVwiZ2V0RmlsdGVyKGRhdGEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2NoZWNrZWRdPVwiZmlsdGVyRGF0YUxpc3QgPT09IGRhdGFcIiB0eXBlPVwicmFkaW9cIiBjbGFzcz1cInJhZGlvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTUgc3RhbmRhcmQgZnMtNFwiPnt7ZGF0YSA9PT0gJ2hvdXInID8gJ0J5IEhvdXInIDogJ0J5IERhdGUnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBDdXN0b20gVGVtcGxhdGUgRW5kICAtLT5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wIG10LTVcIj5cclxuICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiAqbmdJZj1cIiFvcGVuQWNjb3JkaWFuXCIgKGNsaWNrKT1cImNyZWF0ZUN1c3RvbSgpXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICBDcmVhdGUgQ3VzdG9tIFRlbXBsYXRlXHJcbiAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3BlbkN1c3RvbVwiIGNsYXNzPVwiZC1mbGV4IHctMTAwIG10LTVcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLW91dGxpbmUgdy01MCBtZS0zXCIgW25nQ2xhc3NdPVwiY3VzdG9tYnRuID09PSAnTWV0cmljcycgPyAnaGlkZGVuJyA6ICcnXCIgKGNsaWNrKT1cIm1vdmV0b0JhY2soKVwiPkJhY2s8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjdXN0b21idG4gIT09ICdUaW1lIEZpbHRlcidcIiAoY2xpY2spPVwibW92ZXRvTmV4dCgpXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXByaW1hcnkgdy01MCBtcy0zXCI+TmV4dDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImN1c3RvbWJ0biA9PT0gJ1RpbWUgRmlsdGVyJ1wiIChjbGljayk9XCJjdXN0b21DcmVhdGUoKVwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1wcmltYXJ5IHctNTAgbXMtM1wiPlZpZXc8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd3NpZGVuYXZcIiAoY2xpY2spPVwic2lkZW5hdigpXCIgY2xhc3M9XCJiYWNrQnV0dG9ucmlnaHQgdGV4dC1jZW50ZXIgcHQtMSBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4yNzI1OSAxMi42MzYzTDQuNjM2MjMgOC45OTk4OUw4LjI3MjU5IDUuMzYzNTNNMTMuMzYzNSAxMi42MzYzTDkuNzI3MTQgOC45OTk4OUwxMy4zNjM1IDUuMzYzNTNcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS40NTQ1NVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInNob3dzaWRlbmF2ID8gJ2NvbC1zbS05JzonY29sLXNtLTEyJ1wiPlxyXG4gICAgIDxkaXYgY2xhc3M9XCJjYXJkIHBvc2l0aW9uLXJlbGF0aXZlIGgtMTAwXCI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFzaG93c2lkZW5hdlwiIChjbGljayk9XCJzaWRlbmF2KClcIiBjbGFzcz1cImJhY2tCdXR0b25sZWZ0IHRleHQtY2VudGVyIHB0LTEgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkuNzI3MTQgMTIuNjM2NUwxMy4zNjM1IDkuMDAwMTNMOS43MjcxNCA1LjM2Mzc3TTQuNjM2MjMgMTIuNjM2NUw4LjI3MjU5IDkuMDAwMTNMNC42MzYyMyA1LjM2Mzc3XCIgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNDU0NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsXCI+e3tzZWxlY3RlZERhdGE/Lm5hbWUgfHwgJ0N1c3RvbSBUZW1wbGF0ZSd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgbXktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IG9wYWNpdHk9XCIwLjVcIiB4PVwiMTcuMDM2NVwiIHk9XCIxNS4xMjIzXCIgd2lkdGg9XCI4LjE1NTQ2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyXCIgcng9XCIxXCIgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDE3LjAzNjUgMTUuMTIyMylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEgMTlDNi41NTU1NiAxOSAzIDE1LjQ0NDQgMyAxMUMzIDYuNTU1NTYgNi41NTU1NiAzIDExIDNDMTUuNDQ0NCAzIDE5IDYuNTU1NTYgMTkgMTFDMTkgMTUuNDQ0NCAxNS40NDQ0IDE5IDExIDE5Wk0xMSA1QzcuNTMzMzMgNSA1IDcuNTMzMzMgNSAxMUM1IDE0LjQ2NjcgNy41MzMzMyAxNyAxMSAxN0MxNC40NjY3IDE3IDE3IDE0LjQ2NjcgMTcgMTFDMTcgNy41MzMzMyAxNC40NjY3IDUgMTEgNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBwcy0xNCBtZS0yXCIgKGNoYW5nZSk9XCJzZWFyY2hEYXRhKClcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFZhbHVlXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIi8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gXHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1vdXRsaW5lIG1lLTNcIiAoY2xpY2spPVwiRXhwb3J0YXNYbHN4KClcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgIDwvc3ZnPiA8c3BhbiAqbmdJZj1cIiFzaG93c2lkZW5hdlwiIGNsYXNzPVwibXMtM1wiPkV4cG9ydDwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tb3V0bGluZVwiIChjbGljayk9XCJzaGFyZURhdGEoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xMDE2NF81NTc5KVwiPjxwYXRoIGQ9XCJNMTguMzMzMiAxLjY2Njc1TDkuMTY2NSAxMC44MzM0TTE4LjMzMzIgMS42NjY3NUwxMi40OTk4IDE4LjMzMzRMOS4xNjY1IDEwLjgzMzRNMTguMzMzMiAxLjY2Njc1TDEuNjY2NSA3LjUwMDA4TDkuMTY2NSAxMC44MzM0XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgPC9nPjxkZWZzPjxjbGlwUGF0aCBpZD1cImNsaXAwXzEwMTY0XzU1NzlcIj48cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIi8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+PHNwYW4gKm5nSWY9XCIhc2hvd3NpZGVuYXZcIiBjbGFzcz1cIm1zLTNcIj5TaGFyZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj4gXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciBjYXJkICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIiFsb2FkaW5nICYmIG5vRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgbXktOCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhbWFpbnRleHQgbXQtM1wiPk5vIGRhdGEgZm91bmQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YXN1YnRleHRcIj5UaGVyZSBpcyBubyByZXN1bHQgZm9yIFJlcG9ydCBBbmFseXNpczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiICpuZ0lmPVwiIWxvYWRpbmcgJiYgaW5mcmFUYWJsZS5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGRpc3BsYXllZENvbHVtbnM7bGV0IGk9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2NvbHVtbn19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNvcnRDb2x1bU5hbWUgPT09IGNvbHVtbiAmJiBzb3J0QnkgIT09IDEgfHwgc29ydENvbHVtTmFtZSAhPT0gY29sdW1uXCIgY2xhc3M9XCJtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuMDAwMTYgMS4zMzMzN1YxMC42NjY3TTYuMDAwMTYgMTAuNjY2N0wxMC42NjY4IDYuMDAwMDRNNi4wMDAxNiAxMC42NjY3TDEuMzMzNSA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09IGNvbHVtbiA/ICcjMDBBM0ZGJyA6JyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNvcnRDb2x1bU5hbWUgPT09IGNvbHVtbiAmJiBzb3J0QnkgIT09IC0xXCIgY2xhc3M9XCJtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuMDAwMTYgMTAuNjY2N0w2LjAwMDE2IDEuMzMzMzdNNi4wMDAxNiAxLjMzMzM3TDEuMzMzNSA2LjAwMDA0TTYuMDAwMTYgMS4zMzMzN0wxMC42NjY4IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gY29sdW1uID8gJyMwMEEzRkYnIDonIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGRhdGEgb2YgaW5mcmFUYWJsZTsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBrZXkgb2YgZGlzcGxheWVkQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7a2V5ID09PSAnZGF0ZScgPyAoZGF0YVtrZXldIHwgZGF0ZTonZGQgTU1NLCBZWVlZJykgOiAoZGF0YVtrZXldIHx8ICctLScpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxsaWItcGFnaW5hdGlvbiBbaXRlbXNQZXJQYWdlXT1cImR5bmFtaWNEYXRhLmxpbWl0XCJcclxuICAgICAgICAgICAgICAgIFtjdXJyZW50UGFnZV09XCJkeW5hbWljRGF0YS5vZmZzZXRcIiBbdG90YWxJdGVtc109XCJ0b3RhbENvdW50XCJcclxuICAgICAgICAgICAgICAgIFtwYWdpbmF0aW9uU2l6ZXNdPVwiWzEwLDIwLDMwXVwiIFtwYWdlU2l6ZV09XCJkeW5hbWljRGF0YS5saW1pdFwiXHJcbiAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCIgKm5nSWY9XCIhbG9hZGluZyAmJiBpbmZyYVRhYmxlLmxlbmd0aFwiPjwvbGliLXBhZ2luYXRpb24+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29uZmlybWF0aW9uTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgYm9yZGVyLTBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICA8aW1nIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ltYWdlcy9jdXN0b21wb3B1cC1pY29uLnBuZ1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIiBtdC01XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkZXIgZnctYm9sZFwiPkN1c3RvbSBUZW1wbGF0ZSBOYW1lPC9zcGFuPlxyXG4gICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgc3ViLWhlYWRlciBmdy1zZW1pYm9sZFwiPkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHVzZXIgZ2xvYmFsbHk/PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0xMFwiPlxyXG4gICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdWItaGVhZGVyXCIgc3R5bGU9XCJjb2xvcjogIzM0NDA1NDsgZm9udC13ZWlnaHQ6IDQwMDtcIiBmb3I9XCJjdXN0b20tbmFtZVwiPlRlbXBsYXRlIE5hbWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cImN1c3RvbU5hbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbCBtdC0yXCIgaWQ9XCJjdXN0b20tTmFtZVwiPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTEwXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1vdXRsaW5lIHctNTAgbWUtMlwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy01MCBtcy0yXCIgW2Rpc2FibGVkXT1cImN1c3RvbU5hbWUgPT09ICcnXCIgKGNsaWNrKT1cIm1vZGFsLmNsb3NlKClcIj5BcHBseTwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPiJdfQ==
|
|
306
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS1yZXBvcnQvc3JjL2xpYi9jb21wb25lbnRzL3VzZXItcmVwb3J0L3VzZXItcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFuYWx5c2UtcmVwb3J0L3NyYy9saWIvY29tcG9uZW50cy91c2VyLXJlcG9ydC91c2VyLXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFRLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFTMUMsTUFBTSxPQUFPLG1CQUFtQjtJQTRCVjtJQUE4QjtJQUE4QjtJQUFxQztJQTFCckYsaUJBQWlCLENBQU07SUFDdkQsUUFBUSxDQUEwQjtJQUNsQyxPQUFPLEdBQVcsSUFBSSxDQUFDO0lBQ3ZCLE1BQU0sR0FBVyxLQUFLLENBQUM7SUFDdkIsV0FBVyxHQUFXLElBQUksQ0FBQztJQUMzQixVQUFVLEdBQVcsS0FBSyxDQUFDO0lBQzNCLGFBQWEsR0FBVyxLQUFLLENBQUM7SUFDOUIsVUFBVSxHQUFNLEVBQUUsQ0FBQztJQUNuQixZQUFZLEdBQU8sQ0FBQyxFQUFDLElBQUksRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsSUFBSSxFQUFDLFlBQVksRUFBQyxLQUFLLEVBQUMsR0FBRyxFQUFDLEVBQUMsRUFBQyxJQUFJLEVBQUMsWUFBWSxFQUFDLEtBQUssRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLElBQUksRUFBQyxZQUFZLEVBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUE7SUFDNUksYUFBYSxHQUFP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SSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsaUJBQWlCLEdBQUksS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO0lBQy9CLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBQyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFDLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQy9CLENBQUM7d0dBMVJVLG1CQUFtQjs0RkFBbkIsbUJBQW1CLCtLQ1poQyxpbmlCQWdQZ0I7OzRGRHBPSCxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsaUJBQWlCOzRLQU1LLGlCQUFpQjtzQkFBaEQsU0FBUzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsT25Jbml0LFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCwgTmdiTW9kYWwsTmdiTW9kYWxNb2R1bGUsTmdiTW9kYWxSZWYgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBBbmFseXNlcmVwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvYW5hbHlzZXJlcG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi11c2VyLXJlcG9ydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItcmVwb3J0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdXNlci1yZXBvcnQuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyUmVwb3J0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0e1xyXG5cclxuICBAVmlld0NoaWxkKCdjb25maXJtYXRpb25Nb2RhbCcpIGNvbmZpcm1hdGlvbk1vZGFsOiBhbnk7XHJcbiAgbW9kYWxSZWY6IE5nYk1vZGFsUmVmIHwgdW5kZWZpbmVkO1xyXG4gIGxvYWRpbmc6Ym9vbGVhbiA9IHRydWU7XHJcbiAgbm9EYXRhOmJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93c2lkZW5hdjpib29sZWFuID0gdHJ1ZTtcclxuICBvcGVuQ3VzdG9tOmJvb2xlYW4gPSBmYWxzZTtcclxuICBvcGVuQWNjb3JkaWFuOmJvb2xlYW4gPSBmYWxzZTtcclxuICBjdXN0b21OYW1lOmFueSA9Jyc7XHJcbiAgc3RhbmRhcmREYXRhOmFueSA9IFt7bmFtZTonVGVtcGxhdGUgQScsdmFsdWU6J0EnfSx7bmFtZTonVGVtcGxhdGUgQicsdmFsdWU6J0InfSx7bmFtZTonVGVtcGxhdGUgQycsdmFsdWU6J0MnfSx7bmFtZTonVGVtcGxhdGUgRCcsdmFsdWU6J0QnfV1cclxuICBjb3N0b21CdXR0b25zOmFueSA9IFsnTWV0cmljcycsJ0NvbXBhcmlzaW9uJywnVGltZSBGaWx0ZXInXVxyXG4gIG1ldHJpY3NEYXRhOmFueSA9IFt7bmFtZTonQmlsbGFibGUgRW50aXRpZXMnLGNoZWNrZWQ6ZmFsc2UsdmFsdWU6J0JpbGxhYmxlIEVudGl0aWVzJ30se25hbWU6J0JvdW5jZWQgRm9vdGZhbGwnLGNoZWNrZWQ6ZmFsc2UsdmFsdWU6XCJCb3VuY2VkIENvdW50XCJ9LHtuYW1lOidNaXNzZWQgT3Bwb3J0dW5pdHknLGNoZWNrZWQ6ZmFsc2UsdmFsdWU6J01pc3NlZCBPcHBvcnR1bml0eSBDb3VudCd9LHtuYW1lOidFbmdhZ2VycyBDb3VudCcsY2hlY2tlZDpmYWxzZSx2YWx1ZTonRW5nYWdlcnMgQ291bnQnfSx7bmFtZTonQ29udmVyc2lvbicsY2hlY2tlZDpmYWxzZSx2YWx1ZTonQ29udmVyc2lvbiBSYXRlJ30se25hbWU6J0FnZScsY2hlY2tlZDpmYWxzZSx2YWx1ZTonYWdlJ30se25hbWU6J0dlbmRlcicsY2hlY2tlZDpmYWxzZSx2YWx1ZTonZ2VuZGVyJ30se25hbWU6J05PQicsY2hlY2tlZDpmYWxzZSx2YWx1ZTonbm9iJ31dXHJcbiAgY29tcGFyaXNpb25EYXRhOmFueSA9IFsnV1REJywnTVREJywnTm9uZSddXHJcbiAgZmlsdGVyRGF0YTphbnkgPSBbJ2hvdXInLCdkYXknXVxyXG4gIGluZnJhVGFibGU6YW55ID0gW11cclxuICBzZWxlY3RlZERhdGE6IGFueTtcclxuICBjdXN0b21idG46IGFueSA9ICdNZXRyaWNzJztcclxuICBtZXRyaWNzQXJyYXk6IGFueVtdID0gW107XHJcbiAgY29tcGFyaXNpb25GaWx0ZXI6IHN0cmluZyA9ICdXVEQnO1xyXG4gIGZpbHRlckRhdGFMaXN0OiBzdHJpbmcgPSAnaG91cic7XHJcbiAgc29ydEJ5OmFueSA9ICcnO1xyXG4gIHNvcnRDb2x1bU5hbWU6YW55ID0gJyc7XHJcbiAgdG90YWxDb3VudDphbnk7XHJcbiAgc2VhcmNoVmFsdWU6IGFueSA9ICcnO1xyXG4gIGR5bmFtaWNEYXRhOmFueSA9IHt9O1xyXG4gIGRpc3BsYXllZENvbHVtbnM6YW55ID0gW107XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtb2RhbHNlcnZpY2U6TmdiTW9kYWwscHJpdmF0ZSBnczpHbG9iYWxTdGF0ZVNlcnZpY2UscHJpdmF0ZSBzZXJ2aWNlOkFuYWx5c2VyZXBvcnRTZXJ2aWNlLHByaXZhdGUgdG9hc3Q6VG9hc3RTZXJ2aWNlKXtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gdGhpcy5zdGFuZGFyZERhdGFbMF07XHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICBpZihkYXRhPT1udWxsKXtcclxuICAgICAgfWVsc2Uge1xyXG4gICAgICAgIHRoaXMuZHluYW1pY0RhdGEgPSB7XHJcbiAgICAgICAgICBjbGllbnRJZDpkYXRhLmNsaWVudCxcclxuICAgICAgICAgIHN0b3JlSWQ6IGRhdGEuc3RvcmVzLmZpbHRlcigoaXRlbTphbnkpID0+IGl0ZW0uY2hlY2tlZCkubWFwKChpdGVtOmFueSkgPT4gaXRlbS5zdG9yZUlkKSxcclxuICAgICAgICAgIGZyb21EYXRlOiBkYXRhLmRhdGUuc3RhcnREYXRlLFxyXG4gICAgICAgICAgdG9EYXRlOiBkYXRhLmRhdGUuZW5kRGF0ZSxcclxuICAgICAgICAgIGxpbWl0OiAxMCxcclxuICAgICAgICAgIG9mZnNldDogMCxcclxuICAgICAgICAgIHRlbXBsYXRlVHlwZTogdGhpcy5zZWxlY3RlZERhdGEudmFsdWUsXHJcbiAgICAgICAgICBleHBvcnQ6ZmFsc2UsXHJcbiAgICAgICAgICBzZWFyY2g6dGhpcy5zZWFyY2hWYWx1ZSxcclxuICAgICAgICAgIHNvcnQ6dGhpcy5zb3J0Q29sdW1OYW1lLFxyXG4gICAgICAgICAgc29ydEJ5OnRoaXMuc29ydEJ5XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuZ2V0VGVtcGxhdGVzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIGdldFRlbXBsYXRlcygpIHtcclxuICAgIHRoaXMuaW5mcmFUYWJsZSA9IFtdO1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VydmljZS5yZXBvcnRMaXN0KHRoaXMuZHluYW1pY0RhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmKHJlcyAmJiByZXMuZGF0YS50ZW1wbGF0ZURhdGE/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuaW5mcmFUYWJsZSA9IHJlcy5kYXRhPy50ZW1wbGF0ZURhdGE7XHJcbiAgICAgICAgdGhpcy50b3RhbENvdW50ID0gcmVzLmRhdGEudG90YWxDb3VudDtcclxuICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBPYmplY3Qua2V5cyh0aGlzLmluZnJhVGFibGVbMF0pO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9LCgpID0+IHtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2lkZW5hdigpe1xyXG4gICAgdGhpcy5zaG93c2lkZW5hdiA9ICF0aGlzLnNob3dzaWRlbmF2O1xyXG4gIH1cclxuICBzZWxlY3RSYWRpbyhkYXRhOmFueSl7XHJcbiAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XHJcbiAgICB0aGlzLmR5bmFtaWNEYXRhLm9mZnNldCA9IDA7IFxyXG4gICAgdGhpcy5pbmZyYVRhYmxlID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IGRhdGE7XHJcbiAgICB0aGlzLmR5bmFtaWNEYXRhLmxpbWl0ID0gMTA7XHJcbiAgICB0aGlzLmR5bmFtaWNEYXRhLnRlbXBsYXRlVHlwZSA9IGRhdGEudmFsdWU7XHJcbiAgICB0aGlzLmR5bmFtaWNEYXRhLnNvcnQgPSAnJztcclxuICAgIHRoaXMuZHluYW1pY0RhdGEuc29ydEJ5PScnO1xyXG4gICAgdGhpcy5zb3J0Q29sdW1OYW1lID0nJztcclxuICAgIHRoaXMuc29ydEJ5ID0gJyc7XHJcbiAgICB0aGlzLmdldFRlbXBsYXRlcygpO1xyXG4gIH1cclxuICBjcmVhdGVDdXN0b20oKXtcclxuICAgIHRoaXMuY3VzdG9tTmFtZSA9ICcnO1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsc2VydmljZS5vcGVuKHRoaXMuY29uZmlybWF0aW9uTW9kYWwsIHsgY2VudGVyZWQ6IHRydWUgfSk7XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7IFxyXG4gICAgICB0aGlzLm9wZW5BY2NvcmRpYW4gPSAhdGhpcy5vcGVuQWNjb3JkaWFuO1xyXG4gICAgICB0aGlzLm9wZW5DdXN0b20gPSAhdGhpcy5vcGVuQ3VzdG9tO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGN1c3RvbU9wdGlvbihkYXRhOmFueSl7XHJcbiAgICB0aGlzLmN1c3RvbWJ0biA9IGRhdGE7XHJcbiAgfVxyXG4gIG1vdmV0b05leHQoKXtcclxuICAgIGlmKHRoaXMuY3VzdG9tYnRuID09PSAnTWV0cmljcycpe1xyXG4gICAgICB0aGlzLmN1c3RvbWJ0biA9ICdDb21wYXJpc2lvbidcclxuICAgIH1lbHNlIGlmKHRoaXMuY3VzdG9tYnRuID09PSAnQ29tcGFyaXNpb24nKXtcclxuICAgICAgdGhpcy5jdXN0b21idG4gPSAnVGltZSBGaWx0ZXInXHJcbiAgICB9XHJcbiAgfVxyXG4gIG1vdmV0b0JhY2soKXtcclxuICAgIGlmKHRoaXMuY3VzdG9tYnRuID09PSAnQ29tcGFyaXNpb24nKXtcclxuICAgICAgdGhpcy5jdXN0b21idG4gPSAnTWV0cmljcydcclxuICAgIH1lbHNlIGlmKHRoaXMuY3VzdG9tYnRuID09PSAnVGltZSBGaWx0ZXInKXtcclxuICAgICAgdGhpcy5jdXN0b21idG4gPSAnQ29tcGFyaXNpb24nXHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldENvbXBhcmlzaW9uKGRhdGE6YW55KXtcclxuICAgIHRoaXMuY29tcGFyaXNpb25GaWx0ZXIgPSBkYXRhO1xyXG4gIH1cclxuICBnZXRGaWx0ZXIoZGF0YTphbnkpe1xyXG4gICAgdGhpcy5maWx0ZXJEYXRhTGlzdCA9IGRhdGE7XHJcbiAgfVxyXG4gIGN1c3RvbUNyZWF0ZSgpe1xyXG4gICAgdGhpcy5pbmZyYVRhYmxlID0gW107XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGEgPSB7fTtcclxuICAgIGxldCBzZWxlY3RGaWVsZCA9ICB0aGlzLm1ldHJpY3NEYXRhLmZpbHRlcigoaXRlbTphbnkpID0+IGl0ZW0uY2hlY2tlZCkubWFwKChpdGVtOmFueSkgPT4gaXRlbS52YWx1ZSk7XHJcbiAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgY2xpZW50SWQ6dGhpcy5keW5hbWljRGF0YS5jbGllbnRJZCxcclxuICAgICAgc3RvcmVJZDogdGhpcy5keW5hbWljRGF0YS5zdG9yZUlkLFxyXG4gICAgICBmcm9tRGF0ZTogdGhpcy5keW5hbWljRGF0YS5mcm9tRGF0ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmR5bmFtaWNEYXRhLnRvRGF0ZSxcclxuICAgICAgbGltaXQ6IHRoaXMuZHluYW1pY0RhdGEubGltaXQsXHJcbiAgICAgIG9mZnNldDogdGhpcy5keW5hbWljRGF0YS5vZmZzZXQsXHJcbiAgICAgIGV4cG9ydDpmYWxzZSwgICAgXHJcbiAgICAgIGNvbXBhcmlzb25GaWx0ZXI6IHRoaXMuY29tcGFyaXNpb25GaWx0ZXIgIT0gJ05vbmUnID8gdGhpcy5jb21wYXJpc2lvbkZpbHRlciA6ICcnLFxyXG4gICAgICB0aW1lRmlsdGVyOiB0aGlzLmZpbHRlckRhdGFMaXN0LCBcclxuICAgICAgc2VsZXRlZEZpZWxkczpzZWxlY3RGaWVsZCxcclxuICAgICAgc2VhcmNoOnRoaXMuc2VhcmNoVmFsdWUsXHJcbiAgICAgIHNvcnQ6dGhpcy5zb3J0Q29sdW1OYW1lLFxyXG4gICAgICBzb3J0Qnk6dGhpcy5zb3J0QnlcclxuICAgIH1cclxuICAgIHRoaXMuc2VydmljZS5jdXN0b21UZW1wbGF0ZShkYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmKHJlcyAmJiByZXMuZGF0YT8uY3VzdG9tVGVtcGxhdGU/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5pbmZyYVRhYmxlID0gcmVzLmRhdGEuY3VzdG9tVGVtcGxhdGU7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXMuZGF0YS50b3RhbENvdW50O1xyXG4gICAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gT2JqZWN0LmtleXModGhpcy5pbmZyYVRhYmxlWzBdKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc29ydERhdGEodmFsdWU6YW55KXtcclxuICAgIGlmKHRoaXMuc29ydENvbHVtTmFtZSA9PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLnNvcnRCeSAqPSAtMTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNvcnRCeSA9IDE7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNvcnRDb2x1bU5hbWUgPSB2YWx1ZTtcclxuICAgIGlmKHRoaXMub3BlbkN1c3RvbSkge1xyXG4gICAgICB0aGlzLmN1c3RvbUNyZWF0ZSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZHluYW1pY0RhdGEuc29ydCA9IHRoaXMuc29ydENvbHVtTmFtZTtcclxuICAgICAgdGhpcy5keW5hbWljRGF0YS5zb3J0QnkgPSB0aGlzLnNvcnRCeTtcclxuICAgICAgdGhpcy5nZXRUZW1wbGF0ZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUGFnZUNoYW5nZShwYWdlT2Zmc2V0OiBhbnkpIHtcclxuICAgIHRoaXMuZHluYW1pY0RhdGEub2Zmc2V0ID0gcGFnZU9mZnNldCAtIDE7XHJcbiAgICBpZih0aGlzLm9wZW5DdXN0b20pIHtcclxuICAgICAgdGhpcy5jdXN0b21DcmVhdGUoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFRlbXBsYXRlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25QYWdlU2l6ZUNoYW5nZShwYWdlU2l6ZTogYW55KSB7XHJcbiAgICB0aGlzLmR5bmFtaWNEYXRhLmxpbWl0ID0gcGFyc2VJbnQocGFnZVNpemUpO1xyXG4gICAgdGhpcy5keW5hbWljRGF0YS5vZmZzZXQgPSAwO1xyXG4gICAgaWYodGhpcy5vcGVuQ3VzdG9tKSB7XHJcbiAgICAgIHRoaXMuY3VzdG9tQ3JlYXRlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRUZW1wbGF0ZXMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgc2VhcmNoRGF0YSgpe1xyXG4gICAgdGhpcy5keW5hbWljRGF0YS5vZmZzZXQgPSAwO1xyXG4gICAgaWYodGhpcy5vcGVuQ3VzdG9tKSB7XHJcbiAgICAgIHRoaXMuY3VzdG9tQ3JlYXRlKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5keW5hbWljRGF0YS5zZWFyY2ggPSB0aGlzLnNlYXJjaFZhbHVlO1xyXG4gICAgICB0aGlzLmdldFRlbXBsYXRlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBFeHBvcnRhc1hsc3goKXtcclxuICAgIGxldCBkYXRhO1xyXG4gICAgaWYodGhpcy5vcGVuQ3VzdG9tKSB7XHJcbiAgICAgIHRoaXMuZXhwb3J0Q3VzdG9tVGVtcGxhdGUoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmR5bmFtaWNEYXRhLnNlYXJjaCA9IHRoaXMuc2VhcmNoVmFsdWU7XHJcbiAgICAgIHRoaXMuZXhwb3J0VGVtcGxhdGVzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGV4cG9ydFRlbXBsYXRlcygpIHtcclxuICAgIGxldCBkYXRhID0ge1xyXG4gICAgICBjbGllbnRJZDp0aGlzLmR5bmFtaWNEYXRhLmNsaWVudElkLFxyXG4gICAgICBzdG9yZUlkOiB0aGlzLmR5bmFtaWNEYXRhLnN0b3JlSWQsXHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmR5bmFtaWNEYXRhLmZyb21EYXRlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuZHluYW1pY0RhdGEudG9EYXRlLFxyXG4gICAgICBsaW1pdDogMTAwMDAsXHJcbiAgICAgIG9mZnNldDogMCxcclxuICAgICAgdGVtcGxhdGVUeXBlOiB0aGlzLnNlbGVjdGVkRGF0YS52YWx1ZSxcclxuICAgICAgZXhwb3J0OnRydWUsXHJcbiAgICAgIHNlYXJjaDp0aGlzLnNlYXJjaFZhbHVlLFxyXG4gICAgICBzb3J0OnRoaXMuc29ydENvbHVtTmFtZSxcclxuICAgICAgc29ydEJ5OnRoaXMuc29ydEJ5XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlcnZpY2UuZG93bmxvYWRSZXBvcnRMaXN0KGRhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmKHJlcyApIHtcclxuICAgICAgICB0aGlzLnNlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcyx0aGlzLnNlbGVjdGVkRGF0YS5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgfSwoZXJyb3I6YW55KSA9PiB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnU29tZXRoaW5nIHdlbnQgd3JvbmcnKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBleHBvcnRDdXN0b21UZW1wbGF0ZSgpIHtcclxuICAgIGxldCBzZWxlY3RGaWVsZCA9ICB0aGlzLm1ldHJpY3NEYXRhLmZpbHRlcigoaXRlbTphbnkpID0+IGl0ZW0uY2hlY2tlZCkubWFwKChpdGVtOmFueSkgPT4gaXRlbS52YWx1ZSk7XHJcbiAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgY2xpZW50SWQ6dGhpcy5keW5hbWljRGF0YS5jbGllbnRJZCxcclxuICAgICAgc3RvcmVJZDogdGhpcy5keW5hbWljRGF0YS5zdG9yZUlkLFxyXG4gICAgICBmcm9tRGF0ZTogdGhpcy5keW5hbWljRGF0YS5mcm9tRGF0ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmR5bmFtaWNEYXRhLnRvRGF0ZSxcclxuICAgICAgbGltaXQ6IDEwMDAwLFxyXG4gICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgIGV4cG9ydDp0cnVlLCAgICBcclxuICAgICAgY29tcGFyaXNvbkZpbHRlcjogdGhpcy5jb21wYXJpc2lvbkZpbHRlciAhPSAnTm9uZScgPyB0aGlzLmNvbXBhcmlzaW9uRmlsdGVyIDogJycsXHJcbiAgICAgIHRpbWVGaWx0ZXI6IHRoaXMuZmlsdGVyRGF0YUxpc3QsIFxyXG4gICAgICBzZWxldGVkRmllbGRzOnNlbGVjdEZpZWxkLFxyXG4gICAgICBzZWFyY2g6dGhpcy5zZWFyY2hWYWx1ZSxcclxuICAgICAgc29ydDp0aGlzLnNvcnRDb2x1bU5hbWUsXHJcbiAgICAgIHNvcnRCeTp0aGlzLnNvcnRCeVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZXJ2aWNlLmRvd25sb2FkQ3VzdG9tUmVwb3J0TGlzdChkYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZihyZXMgKSB7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsJ2N1c3RvbVRlbXBsYXRlJyk7XHJcbiAgICAgIH1cclxuICAgIH0sKGVycm9yOmFueSkgPT4ge1xyXG4gICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ1NvbWV0aGluZyB3ZW50IHdyb25nJyk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLm9wZW5DdXN0b20gPSBmYWxzZTtcclxuICAgIHRoaXMuY3VzdG9tYnRuID0gJ01ldHJpY3MnO1xyXG4gICAgdGhpcy5tZXRyaWNzRGF0YS5mb3JFYWNoKChpdGVtOmFueSkgPT4gaXRlbS5jaGVja2VkID0gZmFsc2UpO1xyXG4gICAgdGhpcy5jb21wYXJpc2lvbkZpbHRlciA9ICAnV1REJztcclxuICAgIHRoaXMuZmlsdGVyRGF0YUxpc3QgPSAnaG91cic7XHJcbiAgfVxyXG4gIHJlc2V0VmFsdWVzKCkge1xyXG4gICAgdGhpcy5vcGVuQ3VzdG9tID0gIXRoaXMub3BlbkN1c3RvbTtcclxuICAgIHRoaXMuc2VhcmNoVmFsdWU9Jyc7XHJcbiAgICB0aGlzLmR5bmFtaWNEYXRhLm9mZnNldD0wO1xyXG4gICAgdGhpcy5keW5hbWljRGF0YS5saW1pdD0xMDtcclxuICAgIHRoaXMuc29ydENvbHVtTmFtZSA9ICcnO1xyXG4gICAgdGhpcy5zb3J0QnkgPSAnJztcclxuICAgIHRoaXMuZHluYW1pY0RhdGEuc29ydCA9ICcnO1xyXG4gICAgdGhpcy5keW5hbWljRGF0YS5zb3J0QnkgPSAnJztcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJvdyBtYi01XCI+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJzaG93c2lkZW5hdiA/ICdjb2wtc20tMyc6J2Qtbm9uZSdcIj5cclxuICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBwb3NpdGlvbi1yZWxhdGl2ZSBoLTEwMFwiPlxyXG4gICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHAtMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbiBbY2xvc2VPdGhlcnNdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBTdGFuZGFyZCBUZW1wbGF0ZSBTdGFydCAgLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25JdGVtIFtjb2xsYXBzZWRdPVwib3BlbkFjY29yZGlhblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZ1wiIG5nYkFjY29yZGlvbkJ1dHRvbiAoY2xpY2spPVwicmVzZXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZ3JpZFwiPlN0YW5kYXJkIFRlbXBsYXRlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHkgY2xhc3M9XCJwdC0wIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGgtYXV0byBwLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgYSByZXBvcnQgdG8gcHJldmlldyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRhdGEgb2Ygc3RhbmRhcmREYXRhXCIgY2xhc3M9XCJtdC01IGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwic2VsZWN0UmFkaW8oZGF0YSlcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2NoZWNrZWRdPVwic2VsZWN0ZWREYXRhLm5hbWUgPT09IGRhdGEubmFtZVwiIHR5cGU9XCJyYWRpb1wiIGNsYXNzPVwicmFkaW9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTUgc3RhbmRhcmRcIj57e2RhdGEubmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFN0YW5kYXJkIFRlbXBsYXRlIEVuZCAgLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tIEN1c3RvbSBUZW1wbGF0ZSBTdGFydCAgLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tICpuZ0lmPVwiIW9wZW5DdXN0b21cIiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgIG5nYkFjY29yZGlvbkl0ZW0gW2NvbGxhcHNlZF09XCIhb3BlbkN1c3RvbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtYWluaGVhZGluZyBwdC0wXCIgbmdiQWNjb3JkaW9uQnV0dG9uIChjbGljayk9XCJyZXNldFZhbHVlcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ncmlkXCI+Q3VzdG9tIFRlbXBsYXRlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBoLTEwMHB4IHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCB5b3VyIGRhdGEgcG9pbnRzIHRvIGFkZCBpbnRvIHRoZSByZXBvcnRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuaGVhZGVyIHctMTAwIHAtMiBtdC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgcHgtMlwiIChjbGljayk9XCJjdXN0b21PcHRpb24oYnV0dG9uKVwiIFtuZ0NsYXNzXT1cInRoaXMuY3VzdG9tYnRuID09PSBidXR0b24gPyAnYnRuIHB4LTMnOidweC0zJ1wiICpuZ0Zvcj1cImxldCBidXR0b24gb2YgY29zdG9tQnV0dG9uc1wiPnt7YnV0dG9ufX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIiFpbmZyYVRhYmxlLmxlbmd0aCA/ICdoLTEwMCBvdmVyZmxvdy1hdXRvJyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VzdG9tYnRuID09PSAnTWV0cmljcydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXRhIG9mIG1ldHJpY3NEYXRhXCIgY2xhc3M9XCJtdC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJtdC0yIGN1cnNvci1wb2ludGVyXCIgWyhuZ01vZGVsKV09XCJkYXRhLmNoZWNrZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtNSBzdGFuZGFyZCBmcy00XCI+e3tkYXRhLm5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXN0b21idG4gPT09ICdDb21wYXJpc2lvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXRhIG9mIGNvbXBhcmlzaW9uRGF0YVwiIGNsYXNzPVwibXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiIChjbGljayk9XCJnZXRDb21wYXJpc2lvbihkYXRhKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtjaGVja2VkXT1cImNvbXBhcmlzaW9uRmlsdGVyID09PSBkYXRhXCIgdHlwZT1cInJhZGlvXCIgY2xhc3M9XCJyYWRpb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy01IHN0YW5kYXJkIGZzLTRcIj57e2RhdGF9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXN0b21idG4gPT09ICdUaW1lIEZpbHRlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXRhIG9mIGZpbHRlckRhdGFcIiBjbGFzcz1cIm10LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiAoY2xpY2spPVwiZ2V0RmlsdGVyKGRhdGEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2NoZWNrZWRdPVwiZmlsdGVyRGF0YUxpc3QgPT09IGRhdGFcIiB0eXBlPVwicmFkaW9cIiBjbGFzcz1cInJhZGlvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTUgc3RhbmRhcmQgZnMtNFwiPnt7ZGF0YSA9PT0gJ2hvdXInID8gJ0J5IEhvdXInIDogJ0J5IERhdGUnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvcGVuQ3VzdG9tXCIgY2xhc3M9XCJkLWZsZXggdy0xMDBcIiBbbmdDbGFzc109XCIhbG9hZGluZyA/ICdtdC01JzonJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tb3V0bGluZSB3LTUwIG1lLTNcIiBbbmdDbGFzc109XCJjdXN0b21idG4gPT09ICdNZXRyaWNzJyA/ICdoaWRkZW4nIDogJydcIiAoY2xpY2spPVwibW92ZXRvQmFjaygpXCI+QmFjazwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImN1c3RvbWJ0biAhPT0gJ1RpbWUgRmlsdGVyJ1wiIChjbGljayk9XCJtb3ZldG9OZXh0KClcIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tcHJpbWFyeSB3LTUwIG1zLTNcIj5OZXh0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY3VzdG9tYnRuID09PSAnVGltZSBGaWx0ZXInXCIgKGNsaWNrKT1cImN1c3RvbUNyZWF0ZSgpXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXByaW1hcnkgdy01MCBtcy0zXCI+VmlldzwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBDdXN0b20gVGVtcGxhdGUgRW5kICAtLT5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICBcclxuICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMCBtdC01XCI+XHJcbiAgICAgICAgICAgICA8IS0tIDxidXR0b24gKm5nSWY9XCIhb3BlbkFjY29yZGlhblwiIChjbGljayk9XCJjcmVhdGVDdXN0b20oKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgQ3JlYXRlIEN1c3RvbSBUZW1wbGF0ZVxyXG4gICAgICAgICAgICAgPC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwib3BlbkN1c3RvbVwiIGNsYXNzPVwiZC1mbGV4IHctMTAwIG10LTVcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLW91dGxpbmUgdy01MCBtZS0zXCIgW25nQ2xhc3NdPVwiY3VzdG9tYnRuID09PSAnTWV0cmljcycgPyAnaGlkZGVuJyA6ICcnXCIgKGNsaWNrKT1cIm1vdmV0b0JhY2soKVwiPkJhY2s8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjdXN0b21idG4gIT09ICdUaW1lIEZpbHRlcidcIiAoY2xpY2spPVwibW92ZXRvTmV4dCgpXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXByaW1hcnkgdy01MCBtcy0zXCI+TmV4dDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImN1c3RvbWJ0biA9PT0gJ1RpbWUgRmlsdGVyJ1wiIChjbGljayk9XCJjdXN0b21DcmVhdGUoKVwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1wcmltYXJ5IHctNTAgbXMtM1wiPlZpZXc8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dzaWRlbmF2XCIgKGNsaWNrKT1cInNpZGVuYXYoKVwiIGNsYXNzPVwiYmFja0J1dHRvbnJpZ2h0IHRleHQtY2VudGVyIHB0LTEgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMjcyNTkgMTIuNjM2M0w0LjYzNjIzIDguOTk5ODlMOC4yNzI1OSA1LjM2MzUzTTEzLjM2MzUgMTIuNjM2M0w5LjcyNzE0IDguOTk5ODlMMTMuMzYzNSA1LjM2MzUzXCIgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNDU0NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJzaG93c2lkZW5hdiA/ICdjb2wtc20tOSc6J2NvbC1zbS0xMidcIj5cclxuICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBwb3NpdGlvbi1yZWxhdGl2ZSBoLTEwMFwiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd3NpZGVuYXZcIiAoY2xpY2spPVwic2lkZW5hdigpXCIgY2xhc3M9XCJiYWNrQnV0dG9ubGVmdCB0ZXh0LWNlbnRlciBwdC0xIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk05LjcyNzE0IDEyLjYzNjVMMTMuMzYzNSA5LjAwMDEzTDkuNzI3MTQgNS4zNjM3N000LjYzNjIzIDEyLjYzNjVMOC4yNzI1OSA5LjAwMDEzTDQuNjM2MjMgNS4zNjM3N1wiIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjQ1NDU1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1sYWJlbFwiPnt7c2VsZWN0ZWREYXRhPy5uYW1lIHx8ICdDdXN0b20gVGVtcGxhdGUnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIG15LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBvcGFjaXR5PVwiMC41XCIgeD1cIjE3LjAzNjVcIiB5PVwiMTUuMTIyM1wiIHdpZHRoPVwiOC4xNTU0NlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMlwiIHJ4PVwiMVwiIHRyYW5zZm9ybT1cInJvdGF0ZSg0NSAxNy4wMzY1IDE1LjEyMjMpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExIDE5QzYuNTU1NTYgMTkgMyAxNS40NDQ0IDMgMTFDMyA2LjU1NTU2IDYuNTU1NTYgMyAxMSAzQzE1LjQ0NDQgMyAxOSA2LjU1NTU2IDE5IDExQzE5IDE1LjQ0NDQgMTUuNDQ0NCAxOSAxMSAxOVpNMTEgNUM3LjUzMzMzIDUgNSA3LjUzMzMzIDUgMTFDNSAxNC40NjY3IDcuNTMzMzMgMTcgMTEgMTdDMTQuNDY2NyAxNyAxNyAxNC40NjY3IDE3IDExQzE3IDcuNTMzMzMgMTQuNDY2NyA1IDExIDVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcHMtMTQgbWUtMlwiIChjaGFuZ2UpPVwic2VhcmNoRGF0YSgpXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IFxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tb3V0bGluZSBtZS0zXCIgKGNsaWNrKT1cIkV4cG9ydGFzWGxzeCgpXCIgW2Rpc2FibGVkXT1cIiFpbmZyYVRhYmxlLmxlbmd0aFwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTE0LjE2NjcgNi42NjY2N0wxMCAyLjVNMTAgMi41TDUuODMzMzMgNi42NjY2N00xMCAyLjVWMTIuNVwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgPC9zdmc+IDxzcGFuICBjbGFzcz1cIm1zLTNcIj5FeHBvcnQ8L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLW91dGxpbmVcIiAoY2xpY2spPVwic2hhcmVEYXRhKClcIj5cclxuICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTAxNjRfNTU3OSlcIj48cGF0aCBkPVwiTTE4LjMzMzIgMS42NjY3NUw5LjE2NjUgMTAuODMzNE0xOC4zMzMyIDEuNjY2NzVMMTIuNDk5OCAxOC4zMzM0TDkuMTY2NSAxMC44MzM0TTE4LjMzMzIgMS42NjY3NUwxLjY2NjUgNy41MDAwOEw5LjE2NjUgMTAuODMzNFwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIDwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9XCJjbGlwMF8xMDE2NF81NTc5XCI+PHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPjxzcGFuICpuZ0lmPVwiIXNob3dzaWRlbmF2XCIgY2xhc3M9XCJtcy0zXCI+U2hhcmU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+IFxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgY2FyZCAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCIhbG9hZGluZyAmJiBub0RhdGFcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IG15LTggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhMS5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YW1haW50ZXh0IG10LTNcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGFzdWJ0ZXh0XCI+VGhlcmUgaXMgbm8gcmVzdWx0IGZvciBSZXBvcnQgQW5hbHlzaXM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIiAqbmdJZj1cIiFsb2FkaW5nICYmICFub0RhdGEgJiYgIGluZnJhVGFibGUubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBkaXNwbGF5ZWRDb2x1bW5zO2xldCBpPWluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tjb2x1bW59fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSBjb2x1bW4gJiYgc29ydEJ5ICE9PSAxIHx8IHNvcnRDb2x1bU5hbWUgIT09IGNvbHVtblwiIGNsYXNzPVwibXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEuMzMzMzdWMTAuNjY2N002LjAwMDE2IDEwLjY2NjdMMTAuNjY2OCA2LjAwMDA0TTYuMDAwMTYgMTAuNjY2N0wxLjMzMzUgNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSBjb2x1bW4gPyAnIzAwQTNGRicgOicjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSBjb2x1bW4gJiYgc29ydEJ5ICE9PSAtMVwiIGNsYXNzPVwibXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEwLjY2NjdMNi4wMDAxNiAxLjMzMzM3TTYuMDAwMTYgMS4zMzMzN0wxLjMzMzUgNi4wMDAwNE02LjAwMDE2IDEuMzMzMzdMMTAuNjY2OCA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09IGNvbHVtbiA/ICcjMDBBM0ZGJyA6JyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBkYXRhIG9mIGluZnJhVGFibGU7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQga2V5IG9mIGRpc3BsYXllZENvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2tleSA9PT0gJ2RhdGUnID8gKGRhdGFba2V5XSB8IGRhdGU6J2RkIE1NTSwgWVlZWScpIDogKGRhdGFba2V5XSkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGxpYi1wYWdpbmF0aW9uIFtpdGVtc1BlclBhZ2VdPVwiZHluYW1pY0RhdGEubGltaXRcIlxyXG4gICAgICAgICAgICAgICAgW2N1cnJlbnRQYWdlXT1cIihkeW5hbWljRGF0YS5vZmZzZXQgKyAxKVwiIFt0b3RhbEl0ZW1zXT1cInRvdGFsQ291bnRcIlxyXG4gICAgICAgICAgICAgICAgW3BhZ2luYXRpb25TaXplc109XCJbMTAsMjAsMzBdXCIgW3BhZ2VTaXplXT1cImR5bmFtaWNEYXRhLmxpbWl0XCJcclxuICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIiAqbmdJZj1cIiFsb2FkaW5nICYmICFub0RhdGEgJiYgaW5mcmFUYWJsZS5sZW5ndGhcIj48L2xpYi1wYWdpbmF0aW9uPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvbmZpcm1hdGlvbk1vZGFsIGxldC1tb2RhbD5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIGJvcmRlci0wXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgPGltZyBzcmM9XCIuL2Fzc2V0cy90YW5nby9JbWFnZXMvY3VzdG9tcG9wdXAtaWNvbi5wbmdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCIgbXQtNVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGVyIGZ3LWJvbGRcIj5DdXN0b20gVGVtcGxhdGUgTmFtZTwvc3Bhbj5cclxuICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIHN1Yi1oZWFkZXIgZnctc2VtaWJvbGRcIj5BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZSB1c2VyIGdsb2JhbGx5PzwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMTBcIj5cclxuICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3ViLWhlYWRlclwiIHN0eWxlPVwiY29sb3I6ICMzNDQwNTQ7IGZvbnQtd2VpZ2h0OiA0MDA7XCIgZm9yPVwiY3VzdG9tLW5hbWVcIj5UZW1wbGF0ZSBOYW1lPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJjdXN0b21OYW1lXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbXQtMlwiIGlkPVwiY3VzdG9tLU5hbWVcIj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtdC0xMFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tb3V0bGluZSB3LTUwIG1lLTJcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctNTAgbXMtMlwiIFtkaXNhYmxlZF09XCJjdXN0b21OYW1lID09PSAnJ1wiIChjbGljayk9XCJtb2RhbC5jbG9zZSgpXCI+QXBwbHk8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT4iXX0=
|