tango-app-ui-analyse-trax 3.0.0-dev → 3.3.1-alpha.0
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/add-checklist/add-checklist.component.mjs +1389 -0
- package/esm2022/lib/components/checklist/checklist.component.mjs +235 -0
- package/esm2022/lib/components/checklist-configure/checklist-configure.component.mjs +1809 -0
- package/esm2022/lib/components/dashboard/dashboard.component.mjs +515 -0
- package/esm2022/lib/components/dashboard-info/dashboard-info.component.mjs +503 -0
- package/esm2022/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.mjs +169 -0
- package/esm2022/lib/components/flags/flags.component.mjs +188 -0
- package/esm2022/lib/components/flags/flags.interface.mjs +2 -0
- package/esm2022/lib/components/flags-info/flags-info.component.mjs +257 -0
- package/esm2022/lib/components/flags-info/flags-info.interface.mjs +2 -0
- package/esm2022/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.mjs +71 -0
- package/esm2022/lib/components/gallery/gallery.component.mjs +280 -0
- package/esm2022/lib/components/managechecklist/managechecklist.component.mjs +11 -0
- package/esm2022/lib/components/pagination/pagination.component.mjs +62 -0
- package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +101 -0
- package/esm2022/lib/components/reports/reports.component.mjs +204 -0
- package/esm2022/lib/components/reports/reports.interface.mjs +2 -0
- package/esm2022/lib/components/tango-analyse-trax/tango-analyse-trax.component.mjs +27 -6
- package/esm2022/lib/components/trax-store/trax-store.component.mjs +144 -0
- package/esm2022/lib/components/traxpopup/traxpopup.component.mjs +64 -0
- package/esm2022/lib/services/trax.service.mjs +200 -0
- package/esm2022/lib/tango-analyse-trax-routing.module.mjs +62 -6
- package/esm2022/lib/tango-analyse-trax.module.mjs +82 -9
- package/fesm2022/tango-app-ui-analyse-trax.mjs +6211 -24
- package/fesm2022/tango-app-ui-analyse-trax.mjs.map +1 -1
- package/lib/components/add-checklist/add-checklist.component.d.ts +91 -0
- package/lib/components/checklist/checklist.component.d.ts +38 -0
- package/lib/components/checklist-configure/checklist-configure.component.d.ts +162 -0
- package/lib/components/dashboard/dashboard.component.d.ts +62 -0
- package/lib/components/dashboard-info/dashboard-info.component.d.ts +92 -0
- package/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.d.ts +39 -0
- package/lib/components/flags/flags.component.d.ts +40 -0
- package/lib/components/flags/flags.interface.d.ts +61 -0
- package/lib/components/flags-info/flags-info.component.d.ts +50 -0
- package/lib/components/flags-info/flags-info.interface.d.ts +207 -0
- package/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.d.ts +13 -0
- package/lib/components/gallery/gallery.component.d.ts +64 -0
- package/lib/components/managechecklist/managechecklist.component.d.ts +5 -0
- package/lib/components/pagination/pagination.component.d.ts +16 -0
- package/lib/components/reactive-select/reactive-select.component.d.ts +31 -0
- package/lib/components/reports/reports.component.d.ts +43 -0
- package/lib/components/reports/reports.interface.d.ts +44 -0
- package/lib/components/tango-analyse-trax/tango-analyse-trax.component.d.ts +10 -1
- package/lib/components/trax-store/trax-store.component.d.ts +43 -0
- package/lib/components/traxpopup/traxpopup.component.d.ts +22 -0
- package/lib/services/trax.service.d.ts +65 -0
- package/lib/tango-analyse-trax.module.d.ts +23 -3
- package/package.json +1 -1
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { Subject, debounceTime, takeUntil } from "rxjs";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/router";
|
|
5
|
+
import * as i2 from "tango-app-ui-global";
|
|
6
|
+
import * as i3 from "tango-app-ui-shared";
|
|
7
|
+
import * as i4 from "../../services/trax.service";
|
|
8
|
+
import * as i5 from "@angular/common";
|
|
9
|
+
import * as i6 from "@angular/forms";
|
|
10
|
+
export class DashboardComponent {
|
|
11
|
+
route;
|
|
12
|
+
router;
|
|
13
|
+
gs;
|
|
14
|
+
changeDetector;
|
|
15
|
+
toast;
|
|
16
|
+
TraxService;
|
|
17
|
+
receivedData = "checklist";
|
|
18
|
+
detach = new Subject();
|
|
19
|
+
destroy$ = new Subject();
|
|
20
|
+
isExport = false;
|
|
21
|
+
itemsPerPage = 10;
|
|
22
|
+
currentPage = 1;
|
|
23
|
+
totalItems = 0;
|
|
24
|
+
paginationSizes = [];
|
|
25
|
+
pageSize = 10;
|
|
26
|
+
sortColumName = '';
|
|
27
|
+
sortBy = '';
|
|
28
|
+
sortDirection = '';
|
|
29
|
+
searchInput = "";
|
|
30
|
+
checklistPerformance = [];
|
|
31
|
+
storePerformanceData = [];
|
|
32
|
+
userPerformanceData = [];
|
|
33
|
+
searchDisabled = false;
|
|
34
|
+
invoiceList = [];
|
|
35
|
+
checklistLoading = true;
|
|
36
|
+
checklistNoData = false;
|
|
37
|
+
storePerformanceLoading = true;
|
|
38
|
+
storePerformanceNoData = false;
|
|
39
|
+
userPerformanceLoading = true;
|
|
40
|
+
userPerformanceNoData = true;
|
|
41
|
+
headerData;
|
|
42
|
+
cardDataLoading = true;
|
|
43
|
+
cardNoData = false;
|
|
44
|
+
overallCardsData = {};
|
|
45
|
+
currentTab = 'checklistPerformance';
|
|
46
|
+
searchValue;
|
|
47
|
+
limit;
|
|
48
|
+
offset;
|
|
49
|
+
constructor(route, router, gs, changeDetector, toast, TraxService) {
|
|
50
|
+
this.route = route;
|
|
51
|
+
this.router = router;
|
|
52
|
+
this.gs = gs;
|
|
53
|
+
this.changeDetector = changeDetector;
|
|
54
|
+
this.toast = toast;
|
|
55
|
+
this.TraxService = TraxService;
|
|
56
|
+
}
|
|
57
|
+
ngOnDestroy() {
|
|
58
|
+
this.detach.next(true);
|
|
59
|
+
this.detach.complete();
|
|
60
|
+
}
|
|
61
|
+
ngOnInit() {
|
|
62
|
+
this.gs.dataRangeValue
|
|
63
|
+
.pipe(takeUntil(this.destroy$), debounceTime(300))
|
|
64
|
+
.subscribe((data) => {
|
|
65
|
+
this.headerData = data;
|
|
66
|
+
console.log("headerData", this.headerData);
|
|
67
|
+
this.getOverallCardsData();
|
|
68
|
+
this.route?.queryParams
|
|
69
|
+
?.pipe(takeUntil(this.detach))
|
|
70
|
+
.subscribe((params) => {
|
|
71
|
+
console.log(params.type);
|
|
72
|
+
// if (params.type === "checklist") {
|
|
73
|
+
// this.receivedData = "checklist";
|
|
74
|
+
// this.getChecklistPerformanceData();
|
|
75
|
+
// } else
|
|
76
|
+
if (params.type === "store") {
|
|
77
|
+
this.receivedData = "store";
|
|
78
|
+
this.getStorePerformanceData();
|
|
79
|
+
}
|
|
80
|
+
else if (params.type === "user") {
|
|
81
|
+
this.receivedData = "user";
|
|
82
|
+
this.getUserPerformanceData();
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
this.receivedData = "checklist";
|
|
86
|
+
this.getChecklistPerformanceData();
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
// this.getChecklistPerformanceData();
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
// Selecttabs(tab: string) {
|
|
93
|
+
// // Navigate and update the queryParams dynamically
|
|
94
|
+
// this.router.navigate([], {
|
|
95
|
+
// relativeTo: this.route,
|
|
96
|
+
// queryParams: { type: tab },
|
|
97
|
+
// queryParamsHandling: 'merge',
|
|
98
|
+
// });
|
|
99
|
+
// }
|
|
100
|
+
Selecttabs(tab) {
|
|
101
|
+
this.currentTab = tab;
|
|
102
|
+
this.sortColumName = "",
|
|
103
|
+
this.sortDirection = "",
|
|
104
|
+
this.searchValue = "",
|
|
105
|
+
this.limit = 10,
|
|
106
|
+
this.offset = 1,
|
|
107
|
+
this.pageSize = 10;
|
|
108
|
+
this.router.navigate([], {
|
|
109
|
+
relativeTo: this.route,
|
|
110
|
+
queryParams: { type: tab },
|
|
111
|
+
queryParamsHandling: 'merge',
|
|
112
|
+
});
|
|
113
|
+
switch (tab) {
|
|
114
|
+
case 'checklistPerformance':
|
|
115
|
+
this.getChecklistPerformanceData();
|
|
116
|
+
break;
|
|
117
|
+
case 'storePerformance':
|
|
118
|
+
this.getStorePerformanceData();
|
|
119
|
+
break;
|
|
120
|
+
case 'userPerformance':
|
|
121
|
+
this.getUserPerformanceData();
|
|
122
|
+
break;
|
|
123
|
+
// case 'exportPerformance':
|
|
124
|
+
// this.onExport(); // Call export API
|
|
125
|
+
// break;
|
|
126
|
+
default:
|
|
127
|
+
console.error('Invalid tab selected');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
getOverallCardsData() {
|
|
131
|
+
this.cardDataLoading = true;
|
|
132
|
+
this.cardNoData = true;
|
|
133
|
+
const requestData = {
|
|
134
|
+
fromDate: this.headerData.date.startDate,
|
|
135
|
+
toDate: this.headerData.date.endDate,
|
|
136
|
+
// storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),
|
|
137
|
+
storeId: [
|
|
138
|
+
"11-1743",
|
|
139
|
+
"11-178",
|
|
140
|
+
"11-1413",
|
|
141
|
+
"11-1833",
|
|
142
|
+
"11-67",
|
|
143
|
+
"11-709"
|
|
144
|
+
],
|
|
145
|
+
clientId: this.headerData.client,
|
|
146
|
+
};
|
|
147
|
+
this.TraxService.getOverallCardsData(requestData).pipe(takeUntil(this.destroy$)).subscribe((response) => {
|
|
148
|
+
this.cardDataLoading = false;
|
|
149
|
+
if (response?.code === 200 && response?.status === "success") {
|
|
150
|
+
this.overallCardsData = response.data?.overallCards || {};
|
|
151
|
+
this.cardDataLoading = false;
|
|
152
|
+
this.cardNoData = false;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
this.overallCardsData = [];
|
|
156
|
+
this.cardDataLoading = false;
|
|
157
|
+
this.cardNoData = true;
|
|
158
|
+
}
|
|
159
|
+
}, error => {
|
|
160
|
+
this.overallCardsData = [];
|
|
161
|
+
this.cardDataLoading = false;
|
|
162
|
+
this.cardNoData = true;
|
|
163
|
+
this.changeDetector.detectChanges();
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
getChecklistPerformanceData() {
|
|
167
|
+
this.searchDisabled = true;
|
|
168
|
+
this.checklistLoading = true;
|
|
169
|
+
this.checklistNoData = true;
|
|
170
|
+
const requestData = {
|
|
171
|
+
fromDate: this.headerData.date.startDate,
|
|
172
|
+
toDate: this.headerData.date.endDate,
|
|
173
|
+
// storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),
|
|
174
|
+
storeId: [
|
|
175
|
+
"11-1743",
|
|
176
|
+
"11-178",
|
|
177
|
+
"11-1413",
|
|
178
|
+
"11-1833",
|
|
179
|
+
"11-67",
|
|
180
|
+
"11-709"
|
|
181
|
+
],
|
|
182
|
+
clientId: this.headerData.client,
|
|
183
|
+
limit: this.itemsPerPage,
|
|
184
|
+
offset: this.currentPage - 1,
|
|
185
|
+
sortBy: this.sortDirection,
|
|
186
|
+
sortColumnName: this.sortColumName,
|
|
187
|
+
searchValue: this.searchInput,
|
|
188
|
+
// search: this.searchInput,
|
|
189
|
+
// sort: this.sortColumName,
|
|
190
|
+
// sortBy: this.sortDirection,
|
|
191
|
+
// limit: this.itemsPerPage,
|
|
192
|
+
// offset: this.currentPage -1,
|
|
193
|
+
export: false,
|
|
194
|
+
};
|
|
195
|
+
this.TraxService.getChecklistPerformanceData(requestData)
|
|
196
|
+
.pipe(takeUntil(this.destroy$))
|
|
197
|
+
.subscribe((response) => {
|
|
198
|
+
this.checklistLoading = false;
|
|
199
|
+
if (response?.code === 200 && response?.status === "success") {
|
|
200
|
+
this.checklistPerformance = response.data.checklistPerformance || [];
|
|
201
|
+
this.totalItems = response.data.totalCount;
|
|
202
|
+
this.setPaginationSizes();
|
|
203
|
+
this.checklistLoading = false;
|
|
204
|
+
this.checklistNoData = false;
|
|
205
|
+
this.searchDisabled = false;
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
this.checklistPerformance = [];
|
|
209
|
+
this.checklistLoading = false;
|
|
210
|
+
this.checklistNoData = true;
|
|
211
|
+
this.searchDisabled = true;
|
|
212
|
+
if (this.searchInput?.length) {
|
|
213
|
+
this.searchDisabled = true;
|
|
214
|
+
}
|
|
215
|
+
this.checklistPerformance = [];
|
|
216
|
+
this.totalItems = 0;
|
|
217
|
+
this.changeDetector.detectChanges();
|
|
218
|
+
}
|
|
219
|
+
}, error => {
|
|
220
|
+
this.checklistPerformance = [];
|
|
221
|
+
this.changeDetector.detectChanges();
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
getStorePerformanceData() {
|
|
225
|
+
this.searchDisabled = true;
|
|
226
|
+
this.storePerformanceLoading = true;
|
|
227
|
+
this.storePerformanceNoData = true;
|
|
228
|
+
const requestData = {
|
|
229
|
+
fromDate: this.headerData.date.startDate,
|
|
230
|
+
toDate: this.headerData.date.endDate,
|
|
231
|
+
// storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),
|
|
232
|
+
storeId: [
|
|
233
|
+
"11-1743",
|
|
234
|
+
"11-178",
|
|
235
|
+
"11-1413",
|
|
236
|
+
"11-1833",
|
|
237
|
+
"11-67",
|
|
238
|
+
"11-709"
|
|
239
|
+
],
|
|
240
|
+
clientId: this.headerData.client,
|
|
241
|
+
limit: this.itemsPerPage,
|
|
242
|
+
offset: this.currentPage - 1,
|
|
243
|
+
sortBy: this.sortDirection,
|
|
244
|
+
sortColumnName: this.sortColumName,
|
|
245
|
+
searchValue: this.searchInput,
|
|
246
|
+
};
|
|
247
|
+
this.TraxService.getStorePerformanceData(requestData).subscribe({
|
|
248
|
+
next: (response) => {
|
|
249
|
+
this.storePerformanceLoading = false;
|
|
250
|
+
if (response?.code === 200 && response?.status === "success") {
|
|
251
|
+
this.storePerformanceData = response.data.storePerformance || [];
|
|
252
|
+
this.totalItems = response.data.totalCount;
|
|
253
|
+
// this.storePerformanceLoading = false;
|
|
254
|
+
this.setPaginationSizes();
|
|
255
|
+
this.storePerformanceLoading = false;
|
|
256
|
+
this.storePerformanceNoData = false;
|
|
257
|
+
this.searchDisabled = false;
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
this.storePerformanceData = [];
|
|
261
|
+
// this.totalItems = 0;
|
|
262
|
+
this.storePerformanceLoading = false;
|
|
263
|
+
this.storePerformanceNoData = true;
|
|
264
|
+
this.searchDisabled = true;
|
|
265
|
+
if (this.searchInput?.length) {
|
|
266
|
+
this.searchDisabled = true;
|
|
267
|
+
}
|
|
268
|
+
this.storePerformanceData = [];
|
|
269
|
+
this.totalItems = 0;
|
|
270
|
+
this.changeDetector.detectChanges();
|
|
271
|
+
}
|
|
272
|
+
},
|
|
273
|
+
error: () => {
|
|
274
|
+
this.storePerformanceData = [];
|
|
275
|
+
this.changeDetector.detectChanges();
|
|
276
|
+
// this.storePerformanceLoading = false;
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
getUserPerformanceData() {
|
|
281
|
+
this.searchDisabled = true;
|
|
282
|
+
this.userPerformanceLoading = true;
|
|
283
|
+
this.userPerformanceNoData = true;
|
|
284
|
+
const requestData = {
|
|
285
|
+
fromDate: this.headerData.date.startDate,
|
|
286
|
+
toDate: this.headerData.date.endDate,
|
|
287
|
+
// storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),
|
|
288
|
+
storeId: [
|
|
289
|
+
"11-1743",
|
|
290
|
+
"11-178",
|
|
291
|
+
"11-1413",
|
|
292
|
+
"11-1833",
|
|
293
|
+
"11-67",
|
|
294
|
+
"11-709"
|
|
295
|
+
],
|
|
296
|
+
clientId: this.headerData.client,
|
|
297
|
+
limit: this.itemsPerPage,
|
|
298
|
+
offset: this.currentPage - 1,
|
|
299
|
+
sortBy: this.sortDirection,
|
|
300
|
+
sortColumnName: this.sortColumName,
|
|
301
|
+
searchValue: this.searchInput,
|
|
302
|
+
};
|
|
303
|
+
this.TraxService.getUserPerformanceData(requestData).subscribe({
|
|
304
|
+
next: (response) => {
|
|
305
|
+
this.userPerformanceLoading = false;
|
|
306
|
+
if (response?.code === 200 && response?.status === "success") {
|
|
307
|
+
this.userPerformanceData = response.data.userPerformance || [];
|
|
308
|
+
this.totalItems = response.data.totalCount;
|
|
309
|
+
this.setPaginationSizes();
|
|
310
|
+
this.userPerformanceLoading = false;
|
|
311
|
+
this.userPerformanceNoData = false;
|
|
312
|
+
this.searchDisabled = false;
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
this.userPerformanceData = [];
|
|
316
|
+
this.userPerformanceLoading = false;
|
|
317
|
+
this.userPerformanceNoData = true;
|
|
318
|
+
this.searchDisabled = true;
|
|
319
|
+
if (this.searchInput?.length) {
|
|
320
|
+
this.searchDisabled = true;
|
|
321
|
+
}
|
|
322
|
+
this.userPerformanceData = [];
|
|
323
|
+
this.totalItems = 0;
|
|
324
|
+
this.changeDetector.detectChanges();
|
|
325
|
+
}
|
|
326
|
+
},
|
|
327
|
+
error: () => {
|
|
328
|
+
this.userPerformanceData = [];
|
|
329
|
+
this.changeDetector.detectChanges();
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
onExport() {
|
|
334
|
+
this.currentPage = 0;
|
|
335
|
+
const requestData = {
|
|
336
|
+
fromDate: this.headerData.date.startDate,
|
|
337
|
+
toDate: this.headerData.date.endDate,
|
|
338
|
+
storeId: [
|
|
339
|
+
"11-1743",
|
|
340
|
+
"11-178",
|
|
341
|
+
"11-1413",
|
|
342
|
+
"11-1833",
|
|
343
|
+
"11-67",
|
|
344
|
+
"11-709"
|
|
345
|
+
],
|
|
346
|
+
// storeId: this.headerData.stores.filter((store:any) => store.checked).map((store:any) => store.storeId),
|
|
347
|
+
// storeId: ["11-253", "11-511","11-1176"],
|
|
348
|
+
clientId: this.headerData.client,
|
|
349
|
+
limit: 10000,
|
|
350
|
+
offset: this.currentPage,
|
|
351
|
+
sortBy: this.sortDirection,
|
|
352
|
+
sortColumnName: this.sortColumName,
|
|
353
|
+
searchValue: this.searchInput,
|
|
354
|
+
export: true
|
|
355
|
+
// search: this.searchInput,
|
|
356
|
+
// sort: this.sortColumName,
|
|
357
|
+
// sortBy: this.sortDirection,
|
|
358
|
+
// limit: 10000,
|
|
359
|
+
// offset: this.currentPage,
|
|
360
|
+
};
|
|
361
|
+
switch (this.receivedData) {
|
|
362
|
+
case 'checklist':
|
|
363
|
+
this.TraxService.getChecklistPerformanceDataExport(requestData)
|
|
364
|
+
.pipe(takeUntil(this.destroy$))
|
|
365
|
+
.subscribe({
|
|
366
|
+
next: (res) => {
|
|
367
|
+
this.TraxService.saveAsExcelFile(res, 'ChecklistPerformanceTable');
|
|
368
|
+
},
|
|
369
|
+
error: (e) => {
|
|
370
|
+
this.toast.getErrorToast('Something went Wrong..');
|
|
371
|
+
}
|
|
372
|
+
});
|
|
373
|
+
// this.getChecklistPerformanceData();
|
|
374
|
+
break;
|
|
375
|
+
case 'store':
|
|
376
|
+
this.TraxService.getStorePerformanceDataExport(requestData)
|
|
377
|
+
.pipe(takeUntil(this.destroy$))
|
|
378
|
+
.subscribe({
|
|
379
|
+
next: (res) => {
|
|
380
|
+
this.TraxService.saveAsExcelFile(res, 'StorePerformanceTable');
|
|
381
|
+
},
|
|
382
|
+
error: (e) => {
|
|
383
|
+
this.toast.getErrorToast('Something went Wrong..');
|
|
384
|
+
}
|
|
385
|
+
});
|
|
386
|
+
// this.getStorePerformanceData();
|
|
387
|
+
break;
|
|
388
|
+
case 'user':
|
|
389
|
+
this.TraxService.getUserPerformanceDataExport(requestData)
|
|
390
|
+
.pipe(takeUntil(this.destroy$))
|
|
391
|
+
.subscribe({
|
|
392
|
+
next: (res) => {
|
|
393
|
+
this.TraxService.saveAsExcelFile(res, 'UserPerformanceTable');
|
|
394
|
+
},
|
|
395
|
+
error: (e) => {
|
|
396
|
+
this.toast.getErrorToast('Something went Wrong..');
|
|
397
|
+
}
|
|
398
|
+
});
|
|
399
|
+
// this.getUserPerformanceData();
|
|
400
|
+
break;
|
|
401
|
+
// case 'exportPerformance':
|
|
402
|
+
// this.onExport(); // Call export API
|
|
403
|
+
// break;
|
|
404
|
+
default:
|
|
405
|
+
console.error('Invalid tab selected');
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
searchField() {
|
|
409
|
+
this.headerData.searchValue = this.searchInput;
|
|
410
|
+
this.headerData.export = false;
|
|
411
|
+
this.currentPage = 1;
|
|
412
|
+
this.pageSize = 10;
|
|
413
|
+
switch (this.receivedData) {
|
|
414
|
+
case 'checklist':
|
|
415
|
+
this.getChecklistPerformanceData();
|
|
416
|
+
break;
|
|
417
|
+
case 'store':
|
|
418
|
+
this.getStorePerformanceData();
|
|
419
|
+
break;
|
|
420
|
+
case 'user':
|
|
421
|
+
this.getUserPerformanceData();
|
|
422
|
+
break;
|
|
423
|
+
// case 'exportPerformance':
|
|
424
|
+
// this.onExport(); // Call export API
|
|
425
|
+
// break;
|
|
426
|
+
default:
|
|
427
|
+
console.error('Invalid tab selected');
|
|
428
|
+
}
|
|
429
|
+
// this.getChecklistPerformanceData();
|
|
430
|
+
}
|
|
431
|
+
sortData(column) {
|
|
432
|
+
if (this.sortColumName === column) {
|
|
433
|
+
this.sortDirection = this.sortDirection === 1 ? -1 : 1;
|
|
434
|
+
}
|
|
435
|
+
else {
|
|
436
|
+
this.sortColumName = column;
|
|
437
|
+
this.sortDirection = 1;
|
|
438
|
+
}
|
|
439
|
+
switch (this.receivedData) {
|
|
440
|
+
case 'checklist':
|
|
441
|
+
this.getChecklistPerformanceData();
|
|
442
|
+
break;
|
|
443
|
+
case 'store':
|
|
444
|
+
this.getStorePerformanceData();
|
|
445
|
+
break;
|
|
446
|
+
case 'user':
|
|
447
|
+
this.getUserPerformanceData();
|
|
448
|
+
break;
|
|
449
|
+
// case 'exportPerformance':
|
|
450
|
+
// this.onExport(); // Call export API
|
|
451
|
+
// break;
|
|
452
|
+
default:
|
|
453
|
+
console.error('Invalid tab selected');
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
onPageSizeChange(pageSize) {
|
|
457
|
+
this.currentPage = 1;
|
|
458
|
+
this.itemsPerPage = pageSize;
|
|
459
|
+
this.pageSize = pageSize;
|
|
460
|
+
this.changeDetector.detectChanges();
|
|
461
|
+
switch (this.receivedData) {
|
|
462
|
+
case 'checklist':
|
|
463
|
+
this.getChecklistPerformanceData();
|
|
464
|
+
break;
|
|
465
|
+
case 'store':
|
|
466
|
+
this.getStorePerformanceData();
|
|
467
|
+
break;
|
|
468
|
+
case 'user':
|
|
469
|
+
this.getUserPerformanceData();
|
|
470
|
+
break;
|
|
471
|
+
// case 'exportPerformance':
|
|
472
|
+
// this.onExport(); // Call export API
|
|
473
|
+
// break;
|
|
474
|
+
default:
|
|
475
|
+
console.error('Invalid tab selected');
|
|
476
|
+
}
|
|
477
|
+
// this.getChecklistPerformanceData()
|
|
478
|
+
}
|
|
479
|
+
onPageChange(pageOffset) {
|
|
480
|
+
this.currentPage = pageOffset;
|
|
481
|
+
switch (this.receivedData) {
|
|
482
|
+
case 'checklist':
|
|
483
|
+
this.getChecklistPerformanceData();
|
|
484
|
+
break;
|
|
485
|
+
case 'store':
|
|
486
|
+
this.getStorePerformanceData();
|
|
487
|
+
break;
|
|
488
|
+
case 'user':
|
|
489
|
+
this.getUserPerformanceData();
|
|
490
|
+
break;
|
|
491
|
+
// case 'exportPerformance':
|
|
492
|
+
// this.onExport(); // Call export API
|
|
493
|
+
// break;
|
|
494
|
+
default:
|
|
495
|
+
console.error('Invalid tab selected');
|
|
496
|
+
}
|
|
497
|
+
// this.getChecklistPerformanceData()
|
|
498
|
+
}
|
|
499
|
+
setPaginationSizes() {
|
|
500
|
+
if (this.totalItems > 10) {
|
|
501
|
+
this.paginationSizes = [10, 20, 30];
|
|
502
|
+
}
|
|
503
|
+
else {
|
|
504
|
+
this.paginationSizes = [this.totalItems];
|
|
505
|
+
this.pageSize = this.totalItems; // Just one option if less than 10
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DashboardComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.GlobalStateService }, { token: i0.ChangeDetectorRef }, { token: i3.ToastService }, { token: i4.TraxService }], target: i0.ɵɵFactoryTarget.Component });
|
|
509
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DashboardComponent, selector: "lib-dashboard", ngImport: i0, template: "<div class=\"col-md-12\">\r\n <div class=\"row d-flex justify-content-between align-items-stretch\">\r\n <div class=\"col-2 px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">\r\n {{ overallCardsData.activeUnique ? overallCardsData.activeUnique.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--' }}\r\n </span>\r\n <span class=\"cardtext\">Active Checklists</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-100px py-3 px-3\">\r\n <div class=\"cardsubcount my-2\">\r\n {{ overallCardsData.totalInstances?.count ? overallCardsData.totalInstances.count.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--' }}\r\n </div>\r\n <div class=\"cardtext\">Checklist Instances</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-5 px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">\r\n {{ overallCardsData.notSubmittedInstances?.count ? overallCardsData.notSubmittedInstances.count.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--' }}\r\n </span>\r\n <span class=\"cardtext\">Not Submitted Checklists</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"row h-100px py-3 px-3\">\r\n <div class=\"col-md-6\">\r\n <div class=\"cardsubcount my-2\">\r\n {{ overallCardsData.notSubmittedInstances?.open ? overallCardsData.notSubmittedInstances.open.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--' }}\r\n </div>\r\n <div class=\"cardtext\">Open Checklists</div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"cardsubcount my-2\">\r\n {{ overallCardsData.notSubmittedInstances?.inprogress ? overallCardsData.notSubmittedInstances.inprogress.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--' }}\r\n </div>\r\n <div class=\"cardtext\">In Progress Checklists</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-5 px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">\r\n {{ overallCardsData.completedInstances?.count ? overallCardsData.completedInstances.count.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--' }}\r\n </span>\r\n <span class=\"cardtext\">Submitted Checklists</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"row h-100px py-3 px-3\">\r\n <div class=\"col-md-4\">\r\n <div class=\"cardsubcount my-2\">\r\n {{ overallCardsData.completionScore?.count ? overallCardsData.completionScore.count : '--' }}%\r\n </div>\r\n <div class=\"cardtext\">Completion Score</div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"cardsubcount my-2\">\r\n {{ overallCardsData.complianceRate?.count ? overallCardsData.complianceRate.count : '--' }}%\r\n </div>\r\n <div class=\"cardtext\">Compliance Score</div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"cardsubcount my-2\">\r\n {{ overallCardsData.flags?.count ? overallCardsData.flags.count : '--' }}\r\n </div>\r\n <div class=\"cardtext\">Total Flags</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n</div>\r\n\r\n<div class=\"col-md-12 mt-4 card\">\r\n <div class=\"row\">\r\n <div class=\"d-flex overflow-auto p-7\">\r\n <ul\r\n class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs-2x justify-content-center align-items-center border-transparent flex-nowrap\">\r\n <li class=\"nav-item cursor-pointer\" (click)=\"Selecttabs('checklist')\"\r\n [routerLink]=\"['/manage/trax/dashboard']\" [queryParams]=\"{ type: 'Checklist' }\">\r\n <a [ngClass]=\"receivedData === 'checklist'?'btn activebtn':''\" class=\"fw-semibold nav-link me-6\">\r\n Checklist Performance\r\n </a>\r\n </li>\r\n <li class=\"nav-item cursor-pointer\" (click)=\"Selecttabs('store')\" [routerLink]=\"['/manage/trax/store']\"\r\n [queryParams]=\"{ type: 'store' }\">\r\n <a [ngClass]=\"receivedData === 'store' || receivedData === 'Group Details Value'? 'btn activebtn':''\"\r\n class=\"nav-link me-6\">Store Performance\r\n </a>\r\n </li>\r\n <li class=\"nav-item cursor-pointer\" (click)=\"Selecttabs('user')\" [routerLink]=\"['/manage/trax/user']\"\r\n [queryParams]=\"{ type: 'user' }\">\r\n <a [ngClass]=\"receivedData === 'user' || receivedData === 'Group Details Value'? 'btn activebtn':''\"\r\n class=\"nav-link me-6\">User Performance\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n <div *ngIf=\"receivedData === 'checklist'\" class=\"col-lg-12\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Checklist Info</span>\r\n <span class=\"text-sub mb-2\"> Based on {{ headerData?.date?.startDate | date: 'MMM d' }} - {{\r\n headerData?.date?.endDate | date: 'MMM d, y' }}\r\n </span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-8\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </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 <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\" class=\"form-control ps-14 ms-4 footfallsearch\"\r\n placeholder=\"Search by checklist\" autocomplete=\"off\" (keyup.enter)=\"searchField()\" />\r\n <button type=\"button\" (click)=\"onExport()\"\r\n class=\"btn-outline btn align-items-end text-nowrap invheader ms-4\"\r\n [disabled]=\"!checklistPerformance.length\">\r\n <!-- Export Icon -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n 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\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n <span class=\"ms-2\"></span> Export\r\n </button>\r\n <a [routerLink]=\"['/manage/trax/createChecklist']\" type=\"button\" class=\"btn btn-primary ms-4 rounded-3 text-nowrap ng-star-inserted\"\r\n tabindex=\"0\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg><span class=\"ms-2 text-white\">Create Checklist</span></a>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <!-- *ngIf=\"!checklistLoading && !checklistNoData\" -->\r\n <table *ngIf=\"!checklistLoading && !checklistNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th>Checklist Name</th>\r\n <th>Scheduled</th>\r\n <!-- <th>Coverage</th> -->\r\n <th class=\"cursor-pointer\" (click)=\"sortData('storeCount')\">Assigned To<svg\r\n [ngClass]=\"sortColumName === 'storeCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('submittedChecklist')\">Submitted<svg\r\n [ngClass]=\"sortColumName === 'submittedChecklist' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'submittedChecklist' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('flaggedChecklist')\">Flags<svg\r\n [ngClass]=\"sortColumName === 'flaggedChecklist' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'flaggedChecklist' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <!-- <th class=\"cursor-pointer\" (click)=\"sortData('checkListType')\">Tasks<svg\r\n [ngClass]=\"sortColumName === 'checkListType' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'checkListType' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th> -->\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of checklistPerformance\">\r\n <td>\r\n <div class=\"symbol symbol-35px symbol-circle\">\r\n <span class=\"symbol-label bg-light-primary text-primary me-2\">\r\n {{ store.checkListChar || '--' }}\r\n </span>\r\n </div>\r\n <span [routerLink]=\"['/manage/trax/info']\" [queryParams]=\"{ checklist: store.sourceCheckList_id, type: 'Checklist' }\" class=\"table-title-primary cursor-pointer\">{{ store.checkListName || '--' }}</span>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.scheduleRepeatedType || '--' }}</div>\r\n </td>\r\n <!-- <td class=\"table-title-primary\">{{ store.checkListType || '--' }}</td> -->\r\n <td>\r\n <div class=\"table-title\">{{ store.storeCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title-primary\">{{ store.submittedChecklist?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title-primary\">{{ store.flaggedChecklist?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div>\r\n </td>\r\n <!-- <td>\r\n <div class=\"table-title-primary\">{{ store.checkListType || '--' }}</div>\r\n </td> -->\r\n <td>\r\n <a class=\"cursor-pointer\" [routerLink]=\"['/manage/trax/info']\" [queryParams]=\"{ checklist: store.sourceCheckList_id, type: 'Checklist' }\" class=\"table-title\"><span>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M0.832031 9.99992C0.832031 9.99992 4.16536 3.33325 9.9987 3.33325C15.832 3.33325 19.1654 9.99992 19.1654 9.99992C19.1654 9.99992 15.832 16.6666 9.9987 16.6666C4.16536 16.6666 0.832031 9.99992 0.832031 9.99992Z\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M9.9987 12.4999C11.3794 12.4999 12.4987 11.3806 12.4987 9.99992C12.4987 8.61921 11.3794 7.49992 9.9987 7.49992C8.61799 7.49992 7.4987 8.61921 7.4987 9.99992C7.4987 11.3806 8.61799 12.4999 9.9987 12.4999Z\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span></a>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"checklistLoading\">\r\n <div class=\"row loader 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 <ng-container *ngIf=\"checklistNoData && !checklistLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body 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 Checklist Performance Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n <div *ngIf=\"!checklistLoading && !checklistNoData\">\r\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\"\r\n [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"receivedData === 'store'\" class=\"col-lg-12\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Stores Info</span>\r\n <span class=\"text-sub mb-2\"> Based on {{ headerData?.date?.startDate | date: 'MMM d' }} - {{\r\n headerData?.date?.endDate | date: 'MMM d, y' }}\r\n </span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-8\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </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 <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\" class=\"form-control ps-14 ms-4 footfallsearch\"\r\n placeholder=\"Search by checklist\" autocomplete=\"off\" (keyup.enter)=\"searchField()\" />\r\n <a [routerLink]=\"['/manage/trax/createChecklist']\" type=\"button\" class=\"btn btn-primary ms-4 rounded-3 text-nowrap ng-star-inserted\"\r\n tabindex=\"0\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg><span class=\"ms-2 text-white\">Create Checklist</span></a>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <!-- *ngIf=\"!checklistLoading && !checklistNoData\" -->\r\n <table *ngIf=\"!storePerformanceLoading && !storePerformanceNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('storeName')\">Store Name<svg\r\n [ngClass]=\"sortColumName === 'storeName' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th>Store Spoc</th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('checkListCount')\">Checklist\r\n Assigned<svg\r\n [ngClass]=\"sortColumName === 'checkListCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'checkListCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('flaggedCount')\">Flags<svg\r\n [ngClass]=\"sortColumName === 'flaggedCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'flaggedCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('completion')\">Completion % <svg\r\n [ngClass]=\"sortColumName === 'completion' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'completion' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('compliance')\">Compliance %<svg\r\n [ngClass]=\"sortColumName === 'compliance' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'compliance' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('performance')\">Performance<svg\r\n [ngClass]=\"sortColumName === 'performance' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'performance' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of storePerformanceData\">\r\n <td>\r\n <a [routerLink]=\"['/manage/trax/info']\" [queryParams]=\"{ store_id: item._id, type: 'store' }\" class=\"table-title-primary\">{{ item.storeName }}</a>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ item.userEmail }}</div>\r\n </td>\r\n <td class=\"table-title\">{{ item.checkListCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</td>\r\n <td class=\"table-title\">{{ item.flaggedCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</td>\r\n <td>\r\n <div class=\"d-flex\">\r\n <div class=\"h-5px w-100 bg-light mt-2 \">\r\n <div role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\" class=\"bg-primary rounded h-5px\" [ngStyle]=\"{ width: item.completion + '%' }\"></div>\r\n </div>\r\n <div class=\"text-end\"><span class=\"my-1 mx-1 text-end\">{{ item.completion || '--' }}%</span></div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"d-flex\">\r\n <div class=\"h-5px w-100 bg-light mt-2 \">\r\n <div role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\" class=\"bg-primary rounded h-5px\" [ngStyle]=\"{ width: item.compliance + '%' }\"></div>\r\n </div>\r\n <div class=\"text-end\"><span class=\"my-1 mx-1 text-end\">{{ item.compliance || '--' }}%</span></div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"d-flex\">\r\n <div class=\"h-5px w-100 bg-light mt-2 \">\r\n <div role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\" class=\"bg-primary rounded h-5px\" [ngStyle]=\"{ width: item.performance + '%' }\"></div>\r\n </div>\r\n <div class=\"text-end\"><span class=\"my-1 mx-1 text-end\">{{ item.performance || '--' }}%</span></div>\r\n </div>\r\n </td>\r\n <td>\r\n <a class=\"cursor-pointer\" [routerLink]=\"['/manage/trax/info']\" [queryParams]=\"{ store_id: item._id, type: 'store' }\" class=\"table-title\"><span>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M0.832031 9.99992C0.832031 9.99992 4.16536 3.33325 9.9987 3.33325C15.832 3.33325 19.1654 9.99992 19.1654 9.99992C19.1654 9.99992 15.832 16.6666 9.9987 16.6666C4.16536 16.6666 0.832031 9.99992 0.832031 9.99992Z\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M9.9987 12.4999C11.3794 12.4999 12.4987 11.3806 12.4987 9.99992C12.4987 8.61921 11.3794 7.49992 9.9987 7.49992C8.61799 7.49992 7.4987 8.61921 7.4987 9.99992C7.4987 11.3806 8.61799 12.4999 9.9987 12.4999Z\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span></a>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"storePerformanceLoading\">\r\n <div class=\"row loader 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 <ng-container *ngIf=\"storePerformanceNoData && !storePerformanceLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body 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 Checklist Performance Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n <div *ngIf=\"!storePerformanceLoading && !storePerformanceNoData\">\r\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\"\r\n [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"receivedData === 'user'\" class=\"col-lg-12\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">User Info</span>\r\n <span class=\"text-sub mb-2\"> Based on {{ headerData?.date?.startDate | date: 'MMM d' }} - {{\r\n headerData?.date?.endDate | date: 'MMM d, y' }}\r\n </span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-8\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </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 <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\" class=\"form-control ps-14 ms-4 footfallsearch\"\r\n placeholder=\"Search by checklist\" autocomplete=\"off\" (keyup.enter)=\"searchField()\" />\r\n <a [routerLink]=\"['/manage/trax/createChecklist']\" type=\"button\" class=\"btn btn-primary ms-4 rounded-3 text-nowrap ng-star-inserted\"\r\n tabindex=\"0\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg><span class=\"ms-2 text-white\">Create Checklist</span></a>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <table *ngIf=\"!userPerformanceLoading && !userPerformanceNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('userName')\">User Name<svg\r\n [ngClass]=\"sortColumName === 'userName' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'userName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('userEmail')\">Email<svg\r\n [ngClass]=\"sortColumName === 'userEmail' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'userEmail' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('checkListCount')\">Checklist\r\n Assigned<svg\r\n [ngClass]=\"sortColumName === 'checkListCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'checkListCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('flaggedCount')\">Flags<svg\r\n [ngClass]=\"sortColumName === 'flaggedCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'flaggedCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('completion')\">Completion % <svg\r\n [ngClass]=\"sortColumName === 'completion' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'completion' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('compliance')\">Compliance %<svg\r\n [ngClass]=\"sortColumName === 'compliance' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'compliance' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('performance')\">Performance<svg\r\n [ngClass]=\"sortColumName === 'performance' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'performance' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let user of userPerformanceData\">\r\n <td>\r\n <a [routerLink]=\"['/manage/trax/info']\" [queryParams]=\"{ userEmail: user.userEmail, type: 'user'}\" class=\"table-title-primary\">{{ user.userName }}</a>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ user.userEmail }}</div>\r\n </td>\r\n <td class=\"table-title\">{{ user.checkListCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</td>\r\n <td>\r\n <div class=\"table-title\">{{ user.flaggedCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"d-flex\">\r\n <div class=\"h-5px w-100 bg-light mt-2\">\r\n <div role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\"\r\n class=\"bg-primary rounded h-5px\" [ngStyle]=\"{ width: user.completion + '%' }\">\r\n </div>\r\n </div>\r\n <div class=\"text-end\"><span class=\"my-1 mx-1 text-end\">{{ user.completion || '--' }}%</span></div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"d-flex\">\r\n <div class=\"h-5px w-100 bg-light mt-2\">\r\n <div role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\"\r\n class=\"bg-primary rounded h-5px\" [ngStyle]=\"{ width: user.compliance + '%' }\">\r\n </div>\r\n </div>\r\n <div class=\"text-end\"><span class=\"my-1 mx-1 text-end\">{{ user.compliance || '--' }}%</span></div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"d-flex\">\r\n <div class=\"h-5px w-100 bg-light mt-2\">\r\n <div role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\"\r\n class=\"bg-primary rounded h-5px\" [ngStyle]=\"{ width: user.performance + '%' }\">\r\n </div>\r\n </div>\r\n <div class=\"text-end\"><span class=\"my-1 mx-1 text-end\">{{ user.performance || '--' }}%</span></div>\r\n </div>\r\n </td>\r\n \r\n <td>\r\n <a class=\"cursor-pointer\" [routerLink]=\"['/manage/trax/info']\" [queryParams]=\"{ userEmail: user.userEmail, type: 'user'}\" class=\"table-title\"><span>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M0.832031 9.99992C0.832031 9.99992 4.16536 3.33325 9.9987 3.33325C15.832 3.33325 19.1654 9.99992 19.1654 9.99992C19.1654 9.99992 15.832 16.6666 9.9987 16.6666C4.16536 16.6666 0.832031 9.99992 0.832031 9.99992Z\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M9.9987 12.4999C11.3794 12.4999 12.4987 11.3806 12.4987 9.99992C12.4987 8.61921 11.3794 7.49992 9.9987 7.49992C8.61799 7.49992 7.4987 8.61921 7.4987 9.99992C7.4987 11.3806 8.61799 12.4999 9.9987 12.4999Z\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span></a>\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"userPerformanceLoading\">\r\n <div class=\"row loader 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 <ng-container *ngIf=\"userPerformanceNoData && !userPerformanceLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body 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 Checklist Performance Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n <div *ngIf=\"!userPerformanceLoading && !userPerformanceNoData\">\r\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\"\r\n [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n</div>", styles: [".ellipse1{border-radius:6px;border-bottom:2px solid var(--Gray-200, #EAECF0);background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d}.cardcount{color:var(--Black, #101828);font-size:30px;font-style:normal;font-weight:600;line-height:38px}.cardtext{color:var(--Gray-700, #344054);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.cardsubcount{color:var(--Black, #101828);font-size:20px;font-style:normal;font-weight:700;line-height:30px}.card-border{padding:8px;border-radius:12px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF)}.percent-value{color:var(--Gray-500, #667085);text-align:center;font-size:16px;font-style:normal;font-weight:600;line-height:18px}.week-font{color:var(--Gray-800, #1D2939);font-size:12px;font-style:normal;font-weight:400;line-height:18px}.nav-item .nav-link{color:var(--Gray-500, #667085);font-size:16px;font-weight:500}.activebtn{color:var(--Primary-700, #009BF3)!important;border-radius:6px!important;background:var(--Primary-50, #EAF8FF)!important;font-size:16px!important;font-weight:500!important}.buttonsec{border-radius:8px;margin:0;background:var(--gray-50, white);width:100%;height:fit-content;padding:5px}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-size:14px;font-style:normal;font-weight:500;line-height:20px;text-decoration-line:underline}.table-title{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:500;line-height:18px}.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}.rotate{transform:rotate(180deg)}.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}}table tr{vertical-align:middle}table th,table td{height:44px!important;padding:20px 15px!important;align-items:center;gap:12px;align-self:stretch}\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: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.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.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: "pipe", type: i5.DatePipe, name: "date" }] });
|
|
510
|
+
}
|
|
511
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DashboardComponent, decorators: [{
|
|
512
|
+
type: Component,
|
|
513
|
+
args: [{ selector: 'lib-dashboard', template: "<div class=\"col-md-12\">\r\n <div class=\"row d-flex justify-content-between align-items-stretch\">\r\n <div class=\"col-2 px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">\r\n {{ overallCardsData.activeUnique ? overallCardsData.activeUnique.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--' }}\r\n </span>\r\n <span class=\"cardtext\">Active Checklists</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"h-100px py-3 px-3\">\r\n <div class=\"cardsubcount my-2\">\r\n {{ overallCardsData.totalInstances?.count ? overallCardsData.totalInstances.count.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--' }}\r\n </div>\r\n <div class=\"cardtext\">Checklist Instances</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-5 px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">\r\n {{ overallCardsData.notSubmittedInstances?.count ? overallCardsData.notSubmittedInstances.count.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--' }}\r\n </span>\r\n <span class=\"cardtext\">Not Submitted Checklists</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"row h-100px py-3 px-3\">\r\n <div class=\"col-md-6\">\r\n <div class=\"cardsubcount my-2\">\r\n {{ overallCardsData.notSubmittedInstances?.open ? overallCardsData.notSubmittedInstances.open.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--' }}\r\n </div>\r\n <div class=\"cardtext\">Open Checklists</div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"cardsubcount my-2\">\r\n {{ overallCardsData.notSubmittedInstances?.inprogress ? overallCardsData.notSubmittedInstances.inprogress.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--' }}\r\n </div>\r\n <div class=\"cardtext\">In Progress Checklists</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"col-5 px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"cardcount\">\r\n {{ overallCardsData.completedInstances?.count ? overallCardsData.completedInstances.count.toLocaleString('en-US', { minimumFractionDigits: 0 }) : '--' }}\r\n </span>\r\n <span class=\"cardtext\">Submitted Checklists</span>\r\n </h3>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"row h-100px py-3 px-3\">\r\n <div class=\"col-md-4\">\r\n <div class=\"cardsubcount my-2\">\r\n {{ overallCardsData.completionScore?.count ? overallCardsData.completionScore.count : '--' }}%\r\n </div>\r\n <div class=\"cardtext\">Completion Score</div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"cardsubcount my-2\">\r\n {{ overallCardsData.complianceRate?.count ? overallCardsData.complianceRate.count : '--' }}%\r\n </div>\r\n <div class=\"cardtext\">Compliance Score</div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"cardsubcount my-2\">\r\n {{ overallCardsData.flags?.count ? overallCardsData.flags.count : '--' }}\r\n </div>\r\n <div class=\"cardtext\">Total Flags</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n</div>\r\n\r\n<div class=\"col-md-12 mt-4 card\">\r\n <div class=\"row\">\r\n <div class=\"d-flex overflow-auto p-7\">\r\n <ul\r\n class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs-2x justify-content-center align-items-center border-transparent flex-nowrap\">\r\n <li class=\"nav-item cursor-pointer\" (click)=\"Selecttabs('checklist')\"\r\n [routerLink]=\"['/manage/trax/dashboard']\" [queryParams]=\"{ type: 'Checklist' }\">\r\n <a [ngClass]=\"receivedData === 'checklist'?'btn activebtn':''\" class=\"fw-semibold nav-link me-6\">\r\n Checklist Performance\r\n </a>\r\n </li>\r\n <li class=\"nav-item cursor-pointer\" (click)=\"Selecttabs('store')\" [routerLink]=\"['/manage/trax/store']\"\r\n [queryParams]=\"{ type: 'store' }\">\r\n <a [ngClass]=\"receivedData === 'store' || receivedData === 'Group Details Value'? 'btn activebtn':''\"\r\n class=\"nav-link me-6\">Store Performance\r\n </a>\r\n </li>\r\n <li class=\"nav-item cursor-pointer\" (click)=\"Selecttabs('user')\" [routerLink]=\"['/manage/trax/user']\"\r\n [queryParams]=\"{ type: 'user' }\">\r\n <a [ngClass]=\"receivedData === 'user' || receivedData === 'Group Details Value'? 'btn activebtn':''\"\r\n class=\"nav-link me-6\">User Performance\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n <div *ngIf=\"receivedData === 'checklist'\" class=\"col-lg-12\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Checklist Info</span>\r\n <span class=\"text-sub mb-2\"> Based on {{ headerData?.date?.startDate | date: 'MMM d' }} - {{\r\n headerData?.date?.endDate | date: 'MMM d, y' }}\r\n </span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-8\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </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 <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\" class=\"form-control ps-14 ms-4 footfallsearch\"\r\n placeholder=\"Search by checklist\" autocomplete=\"off\" (keyup.enter)=\"searchField()\" />\r\n <button type=\"button\" (click)=\"onExport()\"\r\n class=\"btn-outline btn align-items-end text-nowrap invheader ms-4\"\r\n [disabled]=\"!checklistPerformance.length\">\r\n <!-- Export Icon -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n 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\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n <span class=\"ms-2\"></span> Export\r\n </button>\r\n <a [routerLink]=\"['/manage/trax/createChecklist']\" type=\"button\" class=\"btn btn-primary ms-4 rounded-3 text-nowrap ng-star-inserted\"\r\n tabindex=\"0\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg><span class=\"ms-2 text-white\">Create Checklist</span></a>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <!-- *ngIf=\"!checklistLoading && !checklistNoData\" -->\r\n <table *ngIf=\"!checklistLoading && !checklistNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th>Checklist Name</th>\r\n <th>Scheduled</th>\r\n <!-- <th>Coverage</th> -->\r\n <th class=\"cursor-pointer\" (click)=\"sortData('storeCount')\">Assigned To<svg\r\n [ngClass]=\"sortColumName === 'storeCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('submittedChecklist')\">Submitted<svg\r\n [ngClass]=\"sortColumName === 'submittedChecklist' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'submittedChecklist' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('flaggedChecklist')\">Flags<svg\r\n [ngClass]=\"sortColumName === 'flaggedChecklist' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'flaggedChecklist' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <!-- <th class=\"cursor-pointer\" (click)=\"sortData('checkListType')\">Tasks<svg\r\n [ngClass]=\"sortColumName === 'checkListType' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'checkListType' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th> -->\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let store of checklistPerformance\">\r\n <td>\r\n <div class=\"symbol symbol-35px symbol-circle\">\r\n <span class=\"symbol-label bg-light-primary text-primary me-2\">\r\n {{ store.checkListChar || '--' }}\r\n </span>\r\n </div>\r\n <span [routerLink]=\"['/manage/trax/info']\" [queryParams]=\"{ checklist: store.sourceCheckList_id, type: 'Checklist' }\" class=\"table-title-primary cursor-pointer\">{{ store.checkListName || '--' }}</span>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ store.scheduleRepeatedType || '--' }}</div>\r\n </td>\r\n <!-- <td class=\"table-title-primary\">{{ store.checkListType || '--' }}</td> -->\r\n <td>\r\n <div class=\"table-title\">{{ store.storeCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title-primary\">{{ store.submittedChecklist?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"table-title-primary\">{{ store.flaggedChecklist?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div>\r\n </td>\r\n <!-- <td>\r\n <div class=\"table-title-primary\">{{ store.checkListType || '--' }}</div>\r\n </td> -->\r\n <td>\r\n <a class=\"cursor-pointer\" [routerLink]=\"['/manage/trax/info']\" [queryParams]=\"{ checklist: store.sourceCheckList_id, type: 'Checklist' }\" class=\"table-title\"><span>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M0.832031 9.99992C0.832031 9.99992 4.16536 3.33325 9.9987 3.33325C15.832 3.33325 19.1654 9.99992 19.1654 9.99992C19.1654 9.99992 15.832 16.6666 9.9987 16.6666C4.16536 16.6666 0.832031 9.99992 0.832031 9.99992Z\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M9.9987 12.4999C11.3794 12.4999 12.4987 11.3806 12.4987 9.99992C12.4987 8.61921 11.3794 7.49992 9.9987 7.49992C8.61799 7.49992 7.4987 8.61921 7.4987 9.99992C7.4987 11.3806 8.61799 12.4999 9.9987 12.4999Z\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span></a>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n \r\n <ng-container *ngIf=\"checklistLoading\">\r\n <div class=\"row loader 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 <ng-container *ngIf=\"checklistNoData && !checklistLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body 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 Checklist Performance Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n <div *ngIf=\"!checklistLoading && !checklistNoData\">\r\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\"\r\n [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"receivedData === 'store'\" class=\"col-lg-12\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Stores Info</span>\r\n <span class=\"text-sub mb-2\"> Based on {{ headerData?.date?.startDate | date: 'MMM d' }} - {{\r\n headerData?.date?.endDate | date: 'MMM d, y' }}\r\n </span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-8\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </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 <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\" class=\"form-control ps-14 ms-4 footfallsearch\"\r\n placeholder=\"Search by checklist\" autocomplete=\"off\" (keyup.enter)=\"searchField()\" />\r\n <a [routerLink]=\"['/manage/trax/createChecklist']\" type=\"button\" class=\"btn btn-primary ms-4 rounded-3 text-nowrap ng-star-inserted\"\r\n tabindex=\"0\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg><span class=\"ms-2 text-white\">Create Checklist</span></a>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <!-- *ngIf=\"!checklistLoading && !checklistNoData\" -->\r\n <table *ngIf=\"!storePerformanceLoading && !storePerformanceNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('storeName')\">Store Name<svg\r\n [ngClass]=\"sortColumName === 'storeName' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'storeName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th>Store Spoc</th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('checkListCount')\">Checklist\r\n Assigned<svg\r\n [ngClass]=\"sortColumName === 'checkListCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'checkListCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('flaggedCount')\">Flags<svg\r\n [ngClass]=\"sortColumName === 'flaggedCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'flaggedCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('completion')\">Completion % <svg\r\n [ngClass]=\"sortColumName === 'completion' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'completion' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('compliance')\">Compliance %<svg\r\n [ngClass]=\"sortColumName === 'compliance' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'compliance' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('performance')\">Performance<svg\r\n [ngClass]=\"sortColumName === 'performance' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'performance' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of storePerformanceData\">\r\n <td>\r\n <a [routerLink]=\"['/manage/trax/info']\" [queryParams]=\"{ store_id: item._id, type: 'store' }\" class=\"table-title-primary\">{{ item.storeName }}</a>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ item.userEmail }}</div>\r\n </td>\r\n <td class=\"table-title\">{{ item.checkListCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</td>\r\n <td class=\"table-title\">{{ item.flaggedCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</td>\r\n <td>\r\n <div class=\"d-flex\">\r\n <div class=\"h-5px w-100 bg-light mt-2 \">\r\n <div role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\" class=\"bg-primary rounded h-5px\" [ngStyle]=\"{ width: item.completion + '%' }\"></div>\r\n </div>\r\n <div class=\"text-end\"><span class=\"my-1 mx-1 text-end\">{{ item.completion || '--' }}%</span></div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"d-flex\">\r\n <div class=\"h-5px w-100 bg-light mt-2 \">\r\n <div role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\" class=\"bg-primary rounded h-5px\" [ngStyle]=\"{ width: item.compliance + '%' }\"></div>\r\n </div>\r\n <div class=\"text-end\"><span class=\"my-1 mx-1 text-end\">{{ item.compliance || '--' }}%</span></div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"d-flex\">\r\n <div class=\"h-5px w-100 bg-light mt-2 \">\r\n <div role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\" class=\"bg-primary rounded h-5px\" [ngStyle]=\"{ width: item.performance + '%' }\"></div>\r\n </div>\r\n <div class=\"text-end\"><span class=\"my-1 mx-1 text-end\">{{ item.performance || '--' }}%</span></div>\r\n </div>\r\n </td>\r\n <td>\r\n <a class=\"cursor-pointer\" [routerLink]=\"['/manage/trax/info']\" [queryParams]=\"{ store_id: item._id, type: 'store' }\" class=\"table-title\"><span>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M0.832031 9.99992C0.832031 9.99992 4.16536 3.33325 9.9987 3.33325C15.832 3.33325 19.1654 9.99992 19.1654 9.99992C19.1654 9.99992 15.832 16.6666 9.9987 16.6666C4.16536 16.6666 0.832031 9.99992 0.832031 9.99992Z\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M9.9987 12.4999C11.3794 12.4999 12.4987 11.3806 12.4987 9.99992C12.4987 8.61921 11.3794 7.49992 9.9987 7.49992C8.61799 7.49992 7.4987 8.61921 7.4987 9.99992C7.4987 11.3806 8.61799 12.4999 9.9987 12.4999Z\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span></a>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"storePerformanceLoading\">\r\n <div class=\"row loader 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 <ng-container *ngIf=\"storePerformanceNoData && !storePerformanceLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body 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 Checklist Performance Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n <div *ngIf=\"!storePerformanceLoading && !storePerformanceNoData\">\r\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\"\r\n [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"receivedData === 'user'\" class=\"col-lg-12\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">User Info</span>\r\n <span class=\"text-sub mb-2\"> Based on {{ headerData?.date?.startDate | date: 'MMM d' }} - {{\r\n headerData?.date?.endDate | date: 'MMM d, y' }}\r\n </span>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-8\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </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 <!-- [disabled]=\"searchDisabled\" -->\r\n <input [(ngModel)]=\"searchInput\" type=\"text\" class=\"form-control ps-14 ms-4 footfallsearch\"\r\n placeholder=\"Search by checklist\" autocomplete=\"off\" (keyup.enter)=\"searchField()\" />\r\n <a [routerLink]=\"['/manage/trax/createChecklist']\" type=\"button\" class=\"btn btn-primary ms-4 rounded-3 text-nowrap ng-star-inserted\"\r\n tabindex=\"0\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n </svg><span class=\"ms-2 text-white\">Create Checklist</span></a>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <table *ngIf=\"!userPerformanceLoading && !userPerformanceNoData\" class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('userName')\">User Name<svg\r\n [ngClass]=\"sortColumName === 'userName' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'userName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('userEmail')\">Email<svg\r\n [ngClass]=\"sortColumName === 'userEmail' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'userEmail' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('checkListCount')\">Checklist\r\n Assigned<svg\r\n [ngClass]=\"sortColumName === 'checkListCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'checkListCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('flaggedCount')\">Flags<svg\r\n [ngClass]=\"sortColumName === 'flaggedCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'flaggedCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('completion')\">Completion % <svg\r\n [ngClass]=\"sortColumName === 'completion' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'completion' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('compliance')\">Compliance %<svg\r\n [ngClass]=\"sortColumName === 'compliance' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'compliance' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('performance')\">Performance<svg\r\n [ngClass]=\"sortColumName === 'performance' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'performance' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let user of userPerformanceData\">\r\n <td>\r\n <a [routerLink]=\"['/manage/trax/info']\" [queryParams]=\"{ userEmail: user.userEmail, type: 'user'}\" class=\"table-title-primary\">{{ user.userName }}</a>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">{{ user.userEmail }}</div>\r\n </td>\r\n <td class=\"table-title\">{{ user.checkListCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</td>\r\n <td>\r\n <div class=\"table-title\">{{ user.flaggedCount?.toLocaleString('en-US', { minimumFractionDigits: 0 }) || '--' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"d-flex\">\r\n <div class=\"h-5px w-100 bg-light mt-2\">\r\n <div role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\"\r\n class=\"bg-primary rounded h-5px\" [ngStyle]=\"{ width: user.completion + '%' }\">\r\n </div>\r\n </div>\r\n <div class=\"text-end\"><span class=\"my-1 mx-1 text-end\">{{ user.completion || '--' }}%</span></div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"d-flex\">\r\n <div class=\"h-5px w-100 bg-light mt-2\">\r\n <div role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\"\r\n class=\"bg-primary rounded h-5px\" [ngStyle]=\"{ width: user.compliance + '%' }\">\r\n </div>\r\n </div>\r\n <div class=\"text-end\"><span class=\"my-1 mx-1 text-end\">{{ user.compliance || '--' }}%</span></div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"d-flex\">\r\n <div class=\"h-5px w-100 bg-light mt-2\">\r\n <div role=\"progressbar\" aria-valuemin=\"0\" aria-valuemax=\"100\"\r\n class=\"bg-primary rounded h-5px\" [ngStyle]=\"{ width: user.performance + '%' }\">\r\n </div>\r\n </div>\r\n <div class=\"text-end\"><span class=\"my-1 mx-1 text-end\">{{ user.performance || '--' }}%</span></div>\r\n </div>\r\n </td>\r\n \r\n <td>\r\n <a class=\"cursor-pointer\" [routerLink]=\"['/manage/trax/info']\" [queryParams]=\"{ userEmail: user.userEmail, type: 'user'}\" class=\"table-title\"><span>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M0.832031 9.99992C0.832031 9.99992 4.16536 3.33325 9.9987 3.33325C15.832 3.33325 19.1654 9.99992 19.1654 9.99992C19.1654 9.99992 15.832 16.6666 9.9987 16.6666C4.16536 16.6666 0.832031 9.99992 0.832031 9.99992Z\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M9.9987 12.4999C11.3794 12.4999 12.4987 11.3806 12.4987 9.99992C12.4987 8.61921 11.3794 7.49992 9.9987 7.49992C8.61799 7.49992 7.4987 8.61921 7.4987 9.99992C7.4987 11.3806 8.61799 12.4999 9.9987 12.4999Z\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span></a>\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n <ng-container *ngIf=\"userPerformanceLoading\">\r\n <div class=\"row loader 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 <ng-container *ngIf=\"userPerformanceNoData && !userPerformanceLoading\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body 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 Checklist Performance Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n <div *ngIf=\"!userPerformanceLoading && !userPerformanceNoData\">\r\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\"\r\n [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n</div>", styles: [".ellipse1{border-radius:6px;border-bottom:2px solid var(--Gray-200, #EAECF0);background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d}.cardcount{color:var(--Black, #101828);font-size:30px;font-style:normal;font-weight:600;line-height:38px}.cardtext{color:var(--Gray-700, #344054);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.cardsubcount{color:var(--Black, #101828);font-size:20px;font-style:normal;font-weight:700;line-height:30px}.card-border{padding:8px;border-radius:12px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF)}.percent-value{color:var(--Gray-500, #667085);text-align:center;font-size:16px;font-style:normal;font-weight:600;line-height:18px}.week-font{color:var(--Gray-800, #1D2939);font-size:12px;font-style:normal;font-weight:400;line-height:18px}.nav-item .nav-link{color:var(--Gray-500, #667085);font-size:16px;font-weight:500}.activebtn{color:var(--Primary-700, #009BF3)!important;border-radius:6px!important;background:var(--Primary-50, #EAF8FF)!important;font-size:16px!important;font-weight:500!important}.buttonsec{border-radius:8px;margin:0;background:var(--gray-50, white);width:100%;height:fit-content;padding:5px}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-size:14px;font-style:normal;font-weight:500;line-height:20px;text-decoration-line:underline}.table-title{color:var(--Gray-500, #667085);font-size:12px;font-style:normal;font-weight:500;line-height:18px}.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}.rotate{transform:rotate(180deg)}.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}}table tr{vertical-align:middle}table th,table td{height:44px!important;padding:20px 15px!important;align-items:center;gap:12px;align-self:stretch}\n"] }]
|
|
514
|
+
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.GlobalStateService }, { type: i0.ChangeDetectorRef }, { type: i3.ToastService }, { type: i4.TraxService }] });
|
|
515
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFuYWx5c2UtdHJheC9zcmMvbGliL2NvbXBvbmVudHMvZGFzaGJvYXJkL2Rhc2hib2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2Rhc2hib2FyZC9kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRWhGLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFnQyxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7O0FBVXRGLE1BQU0sT0FBTyxrQkFBa0I7SUFpQ1Q7SUFBK0I7SUFBc0I7SUFBK0I7SUFBMEM7SUFDeEk7SUFqQ1YsWUFBWSxHQUFXLFdBQVcsQ0FBQztJQUMzQixNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUN2QixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUN2QyxRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLFlBQVksR0FBRyxFQUFFLENBQUE7SUFDakIsV0FBVyxHQUFHLENBQUMsQ0FBQTtJQUNmLFVBQVUsR0FBRyxDQUFDLENBQUE7SUFDZCxlQUFlLEdBQVMsRUFBRSxDQUFDO0lBQzNCLFFBQVEsR0FBRyxFQUFFLENBQUE7SUFDYixhQUFhLEdBQVcsRUFBRSxDQUFDO0lBQzNCLE1BQU0sR0FBUSxFQUFFLENBQUM7SUFDakIsYUFBYSxHQUFRLEVBQUUsQ0FBQztJQUN4QixXQUFXLEdBQU8sRUFBRSxDQUFDO0lBQ3JCLG9CQUFvQixHQUFVLEVBQUUsQ0FBQztJQUNqQyxvQkFBb0IsR0FBVSxFQUFFLENBQUM7SUFDakMsbUJBQW1CLEdBQVUsRUFB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c3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU3ViamVjdCwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCB7IFRyYXhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJheC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWRhc2hib2FyZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Rhc2hib2FyZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2Rhc2hib2FyZC5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIERhc2hib2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcclxuICByZWNlaXZlZERhdGE6IHN0cmluZyA9IFwiY2hlY2tsaXN0XCI7XHJcbiAgcHJpdmF0ZSBkZXRhY2ggPSBuZXcgU3ViamVjdCgpO1xyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGlzRXhwb3J0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXRlbXNQZXJQYWdlID0gMTBcclxuICBjdXJyZW50UGFnZSA9IDFcclxuICB0b3RhbEl0ZW1zID0gMFxyXG4gIHBhZ2luYXRpb25TaXplczphbnlbXSA9IFtdO1xyXG4gIHBhZ2VTaXplID0gMTBcclxuICBzb3J0Q29sdW1OYW1lOiBzdHJpbmcgPSAnJztcclxuICBzb3J0Qnk6IGFueSA9ICcnO1xyXG4gIHNvcnREaXJlY3Rpb246IGFueSA9ICcnO1xyXG4gIHNlYXJjaElucHV0OiBhbnkgPVwiXCI7XHJcbiAgY2hlY2tsaXN0UGVyZm9ybWFuY2U6IGFueVtdID0gW107XHJcbiAgc3RvcmVQZXJmb3JtYW5jZURhdGE6IGFueVtdID0gW107XHJcbiAgdXNlclBlcmZvcm1hbmNlRGF0YTogYW55W10gPSBbXTtcclxuICBzZWFyY2hEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGludm9pY2VMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGNoZWNrbGlzdExvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGNoZWNrbGlzdE5vRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHN0b3JlUGVyZm9ybWFuY2VMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBzdG9yZVBlcmZvcm1hbmNlTm9EYXRhOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdXNlclBlcmZvcm1hbmNlTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgdXNlclBlcmZvcm1hbmNlTm9EYXRhOiBib29sZWFuID0gdHJ1ZTtcclxuICBoZWFkZXJEYXRhOiBhbnk7XHJcbiAgY2FyZERhdGFMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBjYXJkTm9EYXRhOiBib29sZWFuID0gZmFsc2U7XHJcbiAgb3ZlcmFsbENhcmRzRGF0YTogYW55ID0ge307XHJcbiAgY3VycmVudFRhYjogc3RyaW5nID0gJ2NoZWNrbGlzdFBlcmZvcm1hbmNlJztcclxuICBzZWFyY2hWYWx1ZTogc3RyaW5nO1xyXG4gIGxpbWl0OiBudW1iZXI7XHJcbiAgb2Zmc2V0OiBudW1iZXI7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIscHVibGljIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UscHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYscHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBUcmF4U2VydmljZTogVHJheFNlcnZpY2UsXHJcbiAgKSB7IH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGV0YWNoLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRldGFjaC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLCBkZWJvdW5jZVRpbWUoMzAwKSlcclxuICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICBcclxuICAgICAgXHJcbiAgICAgICAgdGhpcy5oZWFkZXJEYXRhID0gZGF0YTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImhlYWRlckRhdGFcIiwgdGhpcy5oZWFkZXJEYXRhKTtcclxuXHJcbiAgICAgICAgdGhpcy5nZXRPdmVyYWxsQ2FyZHNEYXRhKCk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZT8ucXVlcnlQYXJhbXNcclxuICAgICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGV0YWNoKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHBhcmFtcy50eXBlKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBpZiAocGFyYW1zLnR5cGUgPT09IFwiY2hlY2tsaXN0XCIpIHtcclxuICAgICAgICAgIC8vICAgdGhpcy5yZWNlaXZlZERhdGEgPSBcImNoZWNrbGlzdFwiO1xyXG4gICAgICAgICAgLy8gICB0aGlzLmdldENoZWNrbGlzdFBlcmZvcm1hbmNlRGF0YSgpO1xyXG4gICAgICAgICAgLy8gfSBlbHNlXHJcbiAgICAgICAgICAgaWYgKHBhcmFtcy50eXBlID09PSBcInN0b3JlXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWNlaXZlZERhdGEgPSBcInN0b3JlXCI7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmVQZXJmb3JtYW5jZURhdGEoKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnR5cGUgPT09IFwidXNlclwiKXtcclxuICAgICAgICAgICAgdGhpcy5yZWNlaXZlZERhdGEgPSBcInVzZXJcIjtcclxuICAgICAgICAgICAgdGhpcy5nZXRVc2VyUGVyZm9ybWFuY2VEYXRhKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZWNlaXZlZERhdGEgPSBcImNoZWNrbGlzdFwiO1xyXG4gICAgICAgICAgICB0aGlzLmdldENoZWNrbGlzdFBlcmZvcm1hbmNlRGF0YSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLy8gdGhpcy5nZXRDaGVja2xpc3RQZXJmb3JtYW5jZURhdGEoKTtcclxufSlcclxuICAgXHJcbiAgICBcclxuXHJcbiAgfVxyXG5cclxuICAvLyBTZWxlY3R0YWJzKHRhYjogc3RyaW5nKSB7XHJcbiAgLy8gICAvLyBOYXZpZ2F0ZSBhbmQgdXBkYXRlIHRoZSBxdWVyeVBhcmFtcyBkeW5hbWljYWxseVxyXG4gIC8vICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcclxuICAvLyAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcclxuICAvLyAgICAgcXVlcnlQYXJhbXM6IHsgdHlwZTogdGFiIH0sIFxyXG4gIC8vICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLCAgXHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcblxyXG4gIFNlbGVjdHRhYnModGFiOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuY3VycmVudFRhYiA9IHRhYjtcclxuICAgIHRoaXMuc29ydENvbHVtTmFtZSA9IFwiXCIsXHJcbiAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSBcIlwiLFxyXG4gICAgdGhpcy5zZWFyY2hWYWx1ZSA9IFwiXCIsXHJcbiAgICB0aGlzLmxpbWl0ID0gMTAsICAgICAgICAgICAgICAgICBcclxuICAgIHRoaXMub2Zmc2V0PSAxLFxyXG4gICAgdGhpcy5wYWdlU2l6ZSA9IDEwXHJcblxyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcclxuICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXHJcbiAgICAgICAgICBxdWVyeVBhcmFtczogeyB0eXBlOiB0YWIgfSwgXHJcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLCBcclxuICAgIH0pXHJcbiAgICBzd2l0Y2ggKHRhYikge1xyXG4gICAgICBjYXNlICdjaGVja2xpc3RQZXJmb3JtYW5jZSc6XHJcbiAgICAgICAgdGhpcy5nZXRDaGVja2xpc3RQZXJmb3JtYW5jZURhdGEoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnc3RvcmVQZXJmb3JtYW5jZSc6XHJcbiAgICAgICAgdGhpcy5nZXRTdG9yZVBlcmZvcm1hbmNlRGF0YSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd1c2VyUGVyZm9ybWFuY2UnOlxyXG4gICAgICAgIHRoaXMuZ2V0VXNlclBlcmZvcm1hbmNlRGF0YSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyBjYXNlICdleHBvcnRQZXJmb3JtYW5jZSc6XHJcbiAgICAgIC8vICAgdGhpcy5vbkV4cG9ydCgpOyAvLyBDYWxsIGV4cG9ydCBBUElcclxuICAgICAgLy8gICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIHRhYiBzZWxlY3RlZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuXHJcbiAgZ2V0T3ZlcmFsbENhcmRzRGF0YSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FyZERhdGFMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FyZE5vRGF0YSA9IHRydWU7XHJcbiAgICBjb25zdCByZXF1ZXN0RGF0YSA9IHtcclxuICAgICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRGF0YS5kYXRlLnN0YXJ0RGF0ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5lbmREYXRlLFxyXG4gICAgICAvLyBzdG9yZUlkOiB0aGlzLmhlYWRlckRhdGEuc3RvcmVzLmZpbHRlcigoc3RvcmU6YW55KSA9PiBzdG9yZS5jaGVja2VkKS5tYXAoKHN0b3JlOmFueSkgPT4gc3RvcmUuc3RvcmVJZCksXHJcbiAgICAgIHN0b3JlSWQ6IFtcclxuICAgICAgICBcIjExLTE3NDNcIixcclxuICAgICAgICBcIjExLTE3OFwiLFxyXG4gICAgICAgIFwiMTEtMTQxM1wiLFxyXG4gICAgICAgIFwiMTEtMTgzM1wiLFxyXG4gICAgICAgIFwiMTEtNjdcIixcclxuICAgICAgICBcIjExLTcwOVwiXHJcbiAgICBdLFxyXG4gICAgICBjbGllbnRJZDp0aGlzLmhlYWRlckRhdGEuY2xpZW50LFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLlRyYXhTZXJ2aWNlLmdldE92ZXJhbGxDYXJkc0RhdGEocmVxdWVzdERhdGEpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5jYXJkRGF0YUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAocmVzcG9uc2U/LmNvZGUgPT09IDIwMCAmJiByZXNwb25zZT8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgICAgdGhpcy5vdmVyYWxsQ2FyZHNEYXRhID0gcmVzcG9uc2UuZGF0YT8ub3ZlcmFsbENhcmRzIHx8IHt9OyBcclxuICAgICAgICAgIHRoaXMuY2FyZERhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNhcmROb0RhdGEgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5vdmVyYWxsQ2FyZHNEYXRhID0gW11cclxuICAgICAgICAgIHRoaXMuY2FyZERhdGFMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNhcmROb0RhdGEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMub3ZlcmFsbENhcmRzRGF0YSA9IFtdXHJcbiAgICAgICAgdGhpcy5jYXJkRGF0YUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNhcmROb0RhdGEgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2hlY2tsaXN0UGVyZm9ybWFuY2VEYXRhKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLmNoZWNrbGlzdExvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5jaGVja2xpc3ROb0RhdGEgPSB0cnVlO1xyXG4gICAgY29uc3QgcmVxdWVzdERhdGEgPSB7XHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5zdGFydERhdGUsXHJcbiAgICAgIHRvRGF0ZTogdGhpcy5oZWFkZXJEYXRhLmRhdGUuZW5kRGF0ZSxcclxuICAgICAgLy8gc3RvcmVJZDogdGhpcy5oZWFkZXJEYXRhLnN0b3Jlcy5maWx0ZXIoKHN0b3JlOmFueSkgPT4gc3RvcmUuY2hlY2tlZCkubWFwKChzdG9yZTphbnkpID0+IHN0b3JlLnN0b3JlSWQpLFxyXG4gICAgICBzdG9yZUlkOiBbXHJcbiAgICAgICAgXCIxMS0xNzQzXCIsXHJcbiAgICAgICAgXCIxMS0xNzhcIixcclxuICAgICAgICBcIjExLTE0MTNcIixcclxuICAgICAgICBcIjExLTE4MzNcIixcclxuICAgICAgICBcIjExLTY3XCIsXHJcbiAgICAgICAgXCIxMS03MDlcIlxyXG4gICAgXSxcclxuICAgICAgY2xpZW50SWQ6dGhpcy5oZWFkZXJEYXRhLmNsaWVudCxcclxuICAgIGxpbWl0OiB0aGlzLml0ZW1zUGVyUGFnZSwgICAgICAgICAgICAgICAgIFxyXG4gICAgb2Zmc2V0OiB0aGlzLmN1cnJlbnRQYWdlIC0gMSxcclxuICAgIHNvcnRCeTogdGhpcy5zb3J0RGlyZWN0aW9uLFxyXG4gICAgc29ydENvbHVtbk5hbWU6IHRoaXMuc29ydENvbHVtTmFtZSxcclxuICAgIHNlYXJjaFZhbHVlOiB0aGlzLnNlYXJjaElucHV0LFxyXG4gICAgICAvLyBzZWFyY2g6IHRoaXMuc2VhcmNoSW5wdXQsXHJcbiAgICAgIC8vIHNvcnQ6IHRoaXMuc29ydENvbHVtTmFtZSxcclxuICAgICAgLy8gc29ydEJ5OiB0aGlzLnNvcnREaXJlY3Rpb24sXHJcbiAgICAgIC8vIGxpbWl0OiB0aGlzLml0ZW1zUGVyUGFnZSxcclxuICAgICAgLy8gb2Zmc2V0OiB0aGlzLmN1cnJlbnRQYWdlIC0xLFxyXG4gICAgICBleHBvcnQ6IGZhbHNlLFxyXG5cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5UcmF4U2VydmljZS5nZXRDaGVja2xpc3RQZXJmb3JtYW5jZURhdGEocmVxdWVzdERhdGEpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tsaXN0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChyZXNwb25zZT8uY29kZSA9PT0gMjAwICYmIHJlc3BvbnNlPy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdFBlcmZvcm1hbmNlID0gcmVzcG9uc2UuZGF0YS5jaGVja2xpc3RQZXJmb3JtYW5jZSB8fCBbXTtcclxuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IHJlc3BvbnNlLmRhdGEudG90YWxDb3VudFxyXG4gICAgICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uU2l6ZXMoKVxyXG4gICAgICAgICAgdGhpcy5jaGVja2xpc3RMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdE5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdFBlcmZvcm1hbmNlID0gW107XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0Tm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQ/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaERpc2FibGVkID0gdHJ1ZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5jaGVja2xpc3RQZXJmb3JtYW5jZSA9IFtdXHJcbiAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSAwXHJcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tsaXN0UGVyZm9ybWFuY2UgPSBbXVxyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBnZXRTdG9yZVBlcmZvcm1hbmNlRGF0YSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VhcmNoRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5zdG9yZVBlcmZvcm1hbmNlTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnN0b3JlUGVyZm9ybWFuY2VOb0RhdGEgPSB0cnVlO1xyXG4gICAgY29uc3QgcmVxdWVzdERhdGEgPSB7XHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5zdGFydERhdGUsXHJcbiAgICAgIHRvRGF0ZTogdGhpcy5oZWFkZXJEYXRhLmRhdGUuZW5kRGF0ZSxcclxuICAgICAgLy8gc3RvcmVJZDogdGhpcy5oZWFkZXJEYXRhLnN0b3Jlcy5maWx0ZXIoKHN0b3JlOmFueSkgPT4gc3RvcmUuY2hlY2tlZCkubWFwKChzdG9yZTphbnkpID0+IHN0b3JlLnN0b3JlSWQpLFxyXG4gICAgICBzdG9yZUlkOiBbXHJcbiAgICAgICAgXCIxMS0xNzQzXCIsXHJcbiAgICAgICAgXCIxMS0xNzhcIixcclxuICAgICAgICBcIjExLTE0MTNcIixcclxuICAgICAgICBcIjExLTE4MzNcIixcclxuICAgICAgICBcIjExLTY3XCIsXHJcbiAgICAgICAgXCIxMS03MDlcIlxyXG4gICAgXSxcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRGF0YS5jbGllbnQsXHJcbiAgICAgIGxpbWl0OiB0aGlzLml0ZW1zUGVyUGFnZSxcclxuICAgICAgb2Zmc2V0OiB0aGlzLmN1cnJlbnRQYWdlIC0gMSxcclxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnREaXJlY3Rpb24sXHJcbiAgICAgIHNvcnRDb2x1bW5OYW1lOiB0aGlzLnNvcnRDb2x1bU5hbWUsXHJcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLnNlYXJjaElucHV0LFxyXG4gICAgfTtcclxuICAgIHRoaXMuVHJheFNlcnZpY2UuZ2V0U3RvcmVQZXJmb3JtYW5jZURhdGEocmVxdWVzdERhdGEpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdG9yZVBlcmZvcm1hbmNlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChyZXNwb25zZT8uY29kZSA9PT0gMjAwICYmIHJlc3BvbnNlPy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlUGVyZm9ybWFuY2VEYXRhID0gcmVzcG9uc2UuZGF0YS5zdG9yZVBlcmZvcm1hbmNlIHx8IFtdO1xyXG4gICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gcmVzcG9uc2UuZGF0YS50b3RhbENvdW50O1xyXG4gICAgICAgICAgLy8gdGhpcy5zdG9yZVBlcmZvcm1hbmNlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uU2l6ZXMoKVxyXG4gICAgICAgICAgdGhpcy5zdG9yZVBlcmZvcm1hbmNlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zdG9yZVBlcmZvcm1hbmNlTm9EYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaERpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVQZXJmb3JtYW5jZURhdGEgPSBbXTtcclxuICAgICAgICAgIC8vIHRoaXMudG90YWxJdGVtcyA9IDA7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlUGVyZm9ybWFuY2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlUGVyZm9ybWFuY2VOb0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnN0b3JlUGVyZm9ybWFuY2VEYXRhID0gW11cclxuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IDBcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcmVQZXJmb3JtYW5jZURhdGEgPSBbXTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgIC8vIHRoaXMuc3RvcmVQZXJmb3JtYW5jZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldFVzZXJQZXJmb3JtYW5jZURhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaERpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMudXNlclBlcmZvcm1hbmNlTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnVzZXJQZXJmb3JtYW5jZU5vRGF0YSA9IHRydWU7XHJcbiAgICBjb25zdCByZXF1ZXN0RGF0YSA9IHtcclxuICAgICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRGF0YS5kYXRlLnN0YXJ0RGF0ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5lbmREYXRlLFxyXG4gICAgICAvLyBzdG9yZUlkOiB0aGlzLmhlYWRlckRhdGEuc3RvcmVzLmZpbHRlcigoc3RvcmU6YW55KSA9PiBzdG9yZS5jaGVja2VkKS5tYXAoKHN0b3JlOmFueSkgPT4gc3RvcmUuc3RvcmVJZCksXHJcbiAgICAgIHN0b3JlSWQ6IFtcclxuICAgICAgICBcIjExLTE3NDNcIixcclxuICAgICAgICBcIjExLTE3OFwiLFxyXG4gICAgICAgIFwiMTEtMTQxM1wiLFxyXG4gICAgICAgIFwiMTEtMTgzM1wiLFxyXG4gICAgICAgIFwiMTEtNjdcIixcclxuICAgICAgICBcIjExLTcwOVwiXHJcbiAgICBdLFxyXG4gICAgICBjbGllbnRJZDogdGhpcy5oZWFkZXJEYXRhLmNsaWVudCxcclxuICAgICAgbGltaXQ6IHRoaXMuaXRlbXNQZXJQYWdlLFxyXG4gICAgICBvZmZzZXQ6IHRoaXMuY3VycmVudFBhZ2UgLSAxLFxyXG4gICAgICBzb3J0Qnk6IHRoaXMuc29ydERpcmVjdGlvbixcclxuICAgICAgc29ydENvbHVtbk5hbWU6IHRoaXMuc29ydENvbHVtTmFtZSxcclxuICAgICAgc2VhcmNoVmFsdWU6IHRoaXMuc2VhcmNoSW5wdXQsXHJcbiAgICB9O1xyXG4gIFxyXG4gICAgdGhpcy5UcmF4U2VydmljZS5nZXRVc2VyUGVyZm9ybWFuY2VEYXRhKHJlcXVlc3REYXRhKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudXNlclBlcmZvcm1hbmNlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChyZXNwb25zZT8uY29kZSA9PT0gMjAwICYmIHJlc3BvbnNlPy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICB0aGlzLnVzZXJQZXJmb3JtYW5jZURhdGEgPSByZXNwb25zZS5kYXRhLnVzZXJQZXJmb3JtYW5jZSB8fCBbXTtcclxuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IHJlc3BvbnNlLmRhdGEudG90YWxDb3VudDtcclxuICAgICAgICAgIHRoaXMuc2V0UGFnaW5hdGlvblNpemVzKClcclxuICAgICAgICAgIHRoaXMudXNlclBlcmZvcm1hbmNlTG9hZGluZyA9IGZhbHNlOyAgXHJcbiAgICAgICAgICB0aGlzLnVzZXJQZXJmb3JtYW5jZU5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnVzZXJQZXJmb3JtYW5jZURhdGEgPSBbXTtcclxuICAgICAgICAgIHRoaXMudXNlclBlcmZvcm1hbmNlTG9hZGluZyA9IGZhbHNlOyAgXHJcbiAgICAgICAgICB0aGlzLnVzZXJQZXJmb3JtYW5jZU5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaERpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0Py5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudXNlclBlcmZvcm1hbmNlRGF0YSA9IFtdXHJcbiAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSAwXHJcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnVzZXJQZXJmb3JtYW5jZURhdGEgPSBbXTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgXHJcblxyXG4gIG9uRXhwb3J0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XHJcbiAgICBjb25zdCByZXF1ZXN0RGF0YSA9IHtcclxuICAgICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRGF0YS5kYXRlLnN0YXJ0RGF0ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmhlYWRlckRhdGEuZGF0ZS5lbmREYXRlLFxyXG4gICAgICBzdG9yZUlkOiBbXHJcbiAgICAgICAgXCIxMS0xNzQzXCIsXHJcbiAgICAgICAgXCIxMS0xNzhcIixcclxuICAgICAgICBcIjExLTE0MTNcIixcclxuICAgICAgICBcIjExLTE4MzNcIixcclxuICAgICAgICBcIjExLTY3XCIsXHJcbiAgICAgICAgXCIxMS03MDlcIlxyXG4gICAgXSxcclxuICAgICAgLy8gc3RvcmVJZDogdGhpcy5oZWFkZXJEYXRhLnN0b3Jlcy5maWx0ZXIoKHN0b3JlOmFueSkgPT4gc3RvcmUuY2hlY2tlZCkubWFwKChzdG9yZTphbnkpID0+IHN0b3JlLnN0b3JlSWQpLFxyXG4gICAgICAvLyBzdG9yZUlkOiBbXCIxMS0yNTNcIiwgXCIxMS01MTFcIixcIjExLTExNzZcIl0sXHJcbiAgICAgIGNsaWVudElkOnRoaXMuaGVhZGVyRGF0YS5jbGllbnQsXHJcbiAgICAgIGxpbWl0OiAxMDAwMCwgICAgICAgICAgICAgICAgIFxyXG4gICAgICBvZmZzZXQ6IHRoaXMuY3VycmVudFBhZ2UsXHJcbiAgICAgIHNvcnRCeTogdGhpcy5zb3J0RGlyZWN0aW9uLFxyXG4gICAgICBzb3J0Q29sdW1uTmFtZTogdGhpcy5zb3J0Q29sdW1OYW1lLFxyXG4gICAgICBzZWFyY2hWYWx1ZTogdGhpcy5zZWFyY2hJbnB1dCxcclxuICAgICAgZXhwb3J0OiB0cnVlXHJcbiAgICAgIC8vIHNlYXJjaDogdGhpcy5zZWFyY2hJbnB1dCxcclxuICAgICAgLy8gc29ydDogdGhpcy5zb3J0Q29sdW1OYW1lLFxyXG4gICAgICAvLyBzb3J0Qnk6IHRoaXMuc29ydERpcmVjdGlvbixcclxuICAgICAgLy8gbGltaXQ6IDEwMDAwLFxyXG4gICAgICAvLyBvZmZzZXQ6IHRoaXMuY3VycmVudFBhZ2UsXHJcbiAgICAgIFxyXG4gICAgfTtcclxuICAgIHN3aXRjaCAodGhpcy5yZWNlaXZlZERhdGEpIHtcclxuICAgICAgY2FzZSAnY2hlY2tsaXN0JzpcclxuICAgICAgICB0aGlzLlRyYXhTZXJ2aWNlLmdldENoZWNrbGlzdFBlcmZvcm1hbmNlRGF0YUV4cG9ydChyZXF1ZXN0RGF0YSlcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuVHJheFNlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywgJ0NoZWNrbGlzdFBlcmZvcm1hbmNlVGFibGUnKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdTb21ldGhpbmcgd2VudCBXcm9uZy4uJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyB0aGlzLmdldENoZWNrbGlzdFBlcmZvcm1hbmNlRGF0YSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdzdG9yZSc6XHJcbiAgICAgICAgdGhpcy5UcmF4U2VydmljZS5nZXRTdG9yZVBlcmZvcm1hbmNlRGF0YUV4cG9ydChyZXF1ZXN0RGF0YSlcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuVHJheFNlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywgJ1N0b3JlUGVyZm9ybWFuY2VUYWJsZScpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ1NvbWV0aGluZyB3ZW50IFdyb25nLi4nKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIHRoaXMuZ2V0U3RvcmVQZXJmb3JtYW5jZURhdGEoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndXNlcic6XHJcblxyXG4gICAgICAgIHRoaXMuVHJheFNlcnZpY2UuZ2V0VXNlclBlcmZvcm1hbmNlRGF0YUV4cG9ydChyZXF1ZXN0RGF0YSlcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuVHJheFNlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywgJ1VzZXJQZXJmb3JtYW5jZVRhYmxlJyk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnU29tZXRoaW5nIHdlbnQgV3JvbmcuLicpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gdGhpcy5nZXRVc2VyUGVyZm9ybWFuY2VEYXRhKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vIGNhc2UgJ2V4cG9ydFBlcmZvcm1hbmNlJzpcclxuICAgICAgLy8gICB0aGlzLm9uRXhwb3J0KCk7IC8vIENhbGwgZXhwb3J0IEFQSVxyXG4gICAgICAvLyAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgdGFiIHNlbGVjdGVkJyk7XHJcbiAgICB9XHJcblxyXG4gICBcclxuXHJcbiAgICAgXHJcbiAgfVxyXG4gIHNlYXJjaEZpZWxkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5oZWFkZXJEYXRhLnNlYXJjaFZhbHVlID0gdGhpcy5zZWFyY2hJbnB1dDtcclxuICAgIHRoaXMuaGVhZGVyRGF0YS5leHBvcnQgPSBmYWxzZTtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgdGhpcy5wYWdlU2l6ZT0xMDtcclxuICAgIHN3aXRjaCAodGhpcy5yZWNlaXZlZERhdGEpIHtcclxuICAgICAgY2FzZSAnY2hlY2tsaXN0JzpcclxuICAgICAgICB0aGlzLmdldENoZWNrbGlzdFBlcmZvcm1hbmNlRGF0YSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdzdG9yZSc6XHJcbiAgICAgICAgdGhpcy5nZXRTdG9yZVBlcmZvcm1hbmNlRGF0YSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd1c2VyJzpcclxuICAgICAgICB0aGlzLmdldFVzZXJQZXJmb3JtYW5jZURhdGEoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8gY2FzZSAnZXhwb3J0UGVyZm9ybWFuY2UnOlxyXG4gICAgICAvLyAgIHRoaXMub25FeHBvcnQoKTsgLy8gQ2FsbCBleHBvcnQgQVBJXHJcbiAgICAgIC8vICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCB0YWIgc2VsZWN0ZWQnKTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuZ2V0Q2hlY2tsaXN0UGVyZm9ybWFuY2VEYXRhKCk7XHJcbiAgfVxyXG4gIHNvcnREYXRhKGNvbHVtbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zb3J0Q29sdW1OYW1lID09PSBjb2x1bW4pIHtcclxuICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gdGhpcy5zb3J0RGlyZWN0aW9uID09PSAxID8gLTEgOiAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zb3J0Q29sdW1OYW1lID0gY29sdW1uO1xyXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSAxO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoICh0aGlzLnJlY2VpdmVkRGF0YSkge1xyXG4gICAgICBjYXNlICdjaGVja2xpc3QnOlxyXG4gICAgICAgIHRoaXMuZ2V0Q2hlY2tsaXN0UGVyZm9ybWFuY2VEYXRhKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3N0b3JlJzpcclxuICAgICAgICB0aGlzLmdldFN0b3JlUGVyZm9ybWFuY2VEYXRhKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3VzZXInOlxyXG4gICAgICAgIHRoaXMuZ2V0VXNlclBlcmZvcm1hbmNlRGF0YSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyBjYXNlICdleHBvcnRQZXJmb3JtYW5jZSc6XHJcbiAgICAgIC8vICAgdGhpcy5vbkV4cG9ydCgpOyAvLyBDYWxsIGV4cG9ydCBBUElcclxuICAgICAgLy8gICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIHRhYiBzZWxlY3RlZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOiBhbnkpIHtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgdGhpcy5pdGVtc1BlclBhZ2UgPSBwYWdlU2l6ZTtcclxuICAgIHRoaXMucGFnZVNpemUgPSBwYWdlU2l6ZTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgc3dpdGNoICh0aGlzLnJlY2VpdmVkRGF0YSkge1xyXG4gICAgICBjYXNlICdjaGVja2xpc3QnOlxyXG4gICAgICAgIHRoaXMuZ2V0Q2hlY2tsaXN0UGVyZm9ybWFuY2VEYXRhKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3N0b3JlJzpcclxuICAgICAgICB0aGlzLmdldFN0b3JlUGVyZm9ybWFuY2VEYXRhKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3VzZXInOlxyXG4gICAgICAgIHRoaXMuZ2V0VXNlclBlcmZvcm1hbmNlRGF0YSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyBjYXNlICdleHBvcnRQZXJmb3JtYW5jZSc6XHJcbiAgICAgIC8vICAgdGhpcy5vbkV4cG9ydCgpOyAvLyBDYWxsIGV4cG9ydCBBUElcclxuICAgICAgLy8gICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIHRhYiBzZWxlY3RlZCcpO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5nZXRDaGVja2xpc3RQZXJmb3JtYW5jZURhdGEoKVxyXG4gIH1cclxuICBvblBhZ2VDaGFuZ2UocGFnZU9mZnNldDogYW55KSB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZU9mZnNldFxyXG4gICAgc3dpdGNoICh0aGlzLnJlY2VpdmVkRGF0YSkge1xyXG4gICAgICBjYXNlICdjaGVja2xpc3QnOlxyXG4gICAgICAgIHRoaXMuZ2V0Q2hlY2tsaXN0UGVyZm9ybWFuY2VEYXRhKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3N0b3JlJzpcclxuICAgICAgICB0aGlzLmdldFN0b3JlUGVyZm9ybWFuY2VEYXRhKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3VzZXInOlxyXG4gICAgICAgIHRoaXMuZ2V0VXNlclBlcmZvcm1hbmNlRGF0YSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyBjYXNlICdleHBvcnRQZXJmb3JtYW5jZSc6XHJcbiAgICAgIC8vICAgdGhpcy5vbkV4cG9ydCgpOyAvLyBDYWxsIGV4cG9ydCBBUElcclxuICAgICAgLy8gICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIHRhYiBzZWxlY3RlZCcpO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5nZXRDaGVja2xpc3RQZXJmb3JtYW5jZURhdGEoKVxyXG4gIH1cclxuICBzZXRQYWdpbmF0aW9uU2l6ZXMoKSB7XHJcbiAgICBpZiAodGhpcy50b3RhbEl0ZW1zID4gMTApIHtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFt0aGlzLnRvdGFsSXRlbXNdO1xyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy50b3RhbEl0ZW1zOyAvLyBKdXN0IG9uZSBvcHRpb24gaWYgbGVzcyB0aGFuIDEwXHJcbiAgICB9XHJcbiAgICBcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtc3RyZXRjaFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMiBweC0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtYm9yZGVyIHB0LTIgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBlbGxpcHNlMSBib3JkZXItMCBweC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmRjb3VudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3ZlcmFsbENhcmRzRGF0YS5hY3RpdmVVbmlxdWUgPyBvdmVyYWxsQ2FyZHNEYXRhLmFjdGl2ZVVuaXF1ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KSA6ICctLScgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmR0ZXh0XCI+QWN0aXZlIENoZWNrbGlzdHM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC0xMDBweCBweS0zIHB4LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRzdWJjb3VudCBteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvdmVyYWxsQ2FyZHNEYXRhLnRvdGFsSW5zdGFuY2VzPy5jb3VudCA/IG92ZXJhbGxDYXJkc0RhdGEudG90YWxJbnN0YW5jZXMuY291bnQudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkgOiAnLS0nIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZHRleHRcIj5DaGVja2xpc3QgSW5zdGFuY2VzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgcHgtMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvcmRlciBwdC0yIGgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgZWxsaXBzZTEgYm9yZGVyLTAgcHgtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkY291bnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG92ZXJhbGxDYXJkc0RhdGEubm90U3VibWl0dGVkSW5zdGFuY2VzPy5jb3VudCA/IG92ZXJhbGxDYXJkc0RhdGEubm90U3VibWl0dGVkSW5zdGFuY2VzLmNvdW50LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIDogJy0tJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZHRleHRcIj5Ob3QgU3VibWl0dGVkIENoZWNrbGlzdHM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGgtMTAwcHggcHktMyBweC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRzdWJjb3VudCBteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3ZlcmFsbENhcmRzRGF0YS5ub3RTdWJtaXR0ZWRJbnN0YW5jZXM/Lm9wZW4gPyBvdmVyYWxsQ2FyZHNEYXRhLm5vdFN1Ym1pdHRlZEluc3RhbmNlcy5vcGVuLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIDogJy0tJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZHRleHRcIj5PcGVuIENoZWNrbGlzdHM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRzdWJjb3VudCBteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3ZlcmFsbENhcmRzRGF0YS5ub3RTdWJtaXR0ZWRJbnN0YW5jZXM/LmlucHJvZ3Jlc3MgPyBvdmVyYWxsQ2FyZHNEYXRhLm5vdFN1Ym1pdHRlZEluc3RhbmNlcy5pbnByb2dyZXNzLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIDogJy0tJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZHRleHRcIj5JbiBQcm9ncmVzcyBDaGVja2xpc3RzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHB4LTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1ib3JkZXIgcHQtMiBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGVsbGlwc2UxIGJvcmRlci0wIHB4LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZGNvdW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvdmVyYWxsQ2FyZHNEYXRhLmNvbXBsZXRlZEluc3RhbmNlcz8uY291bnQgPyBvdmVyYWxsQ2FyZHNEYXRhLmNvbXBsZXRlZEluc3RhbmNlcy5jb3VudC50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KSA6ICctLScgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmR0ZXh0XCI+U3VibWl0dGVkIENoZWNrbGlzdHM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGgtMTAwcHggcHktMyBweC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRzdWJjb3VudCBteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3ZlcmFsbENhcmRzRGF0YS5jb21wbGV0aW9uU2NvcmU/LmNvdW50ID8gb3ZlcmFsbENhcmRzRGF0YS5jb21wbGV0aW9uU2NvcmUuY291bnQgOiAnLS0nIH19JVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZHRleHRcIj5Db21wbGV0aW9uIFNjb3JlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkc3ViY291bnQgbXktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG92ZXJhbGxDYXJkc0RhdGEuY29tcGxpYW5jZVJhdGU/LmNvdW50ID8gb3ZlcmFsbENhcmRzRGF0YS5jb21wbGlhbmNlUmF0ZS5jb3VudCA6ICctLScgfX0lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkdGV4dFwiPkNvbXBsaWFuY2UgU2NvcmU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRzdWJjb3VudCBteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3ZlcmFsbENhcmRzRGF0YS5mbGFncz8uY291bnQgPyBvdmVyYWxsQ2FyZHNEYXRhLmZsYWdzLmNvdW50IDogJy0tJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZHRleHRcIj5Ub3RhbCBGbGFnczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgXHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBtdC00IGNhcmRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG92ZXJmbG93LWF1dG8gcC03XCI+XHJcbiAgICAgICAgICAgIDx1bFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYgbmF2LXN0cmV0Y2ggbmF2LWxpbmUtdGFiczEgbmF2LWxpbmUtdGFicy0yeCAganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgYm9yZGVyLXRyYW5zcGFyZW50IGZsZXgtbm93cmFwXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJTZWxlY3R0YWJzKCdjaGVja2xpc3QnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvbWFuYWdlL3RyYXgvZGFzaGJvYXJkJ11cIiBbcXVlcnlQYXJhbXNdPVwieyB0eXBlOiAnQ2hlY2tsaXN0JyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwicmVjZWl2ZWREYXRhID09PSAnY2hlY2tsaXN0Jz8nYnRuIGFjdGl2ZWJ0bic6JydcIiBjbGFzcz1cImZ3LXNlbWlib2xkIG5hdi1saW5rIG1lLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tsaXN0IFBlcmZvcm1hbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIlNlbGVjdHRhYnMoJ3N0b3JlJylcIiBbcm91dGVyTGlua109XCJbJy9tYW5hZ2UvdHJheC9zdG9yZSddXCJcclxuICAgICAgICAgICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwieyB0eXBlOiAnc3RvcmUnIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJyZWNlaXZlZERhdGEgPT09ICdzdG9yZScgfHwgcmVjZWl2ZWREYXRhID09PSAnR3JvdXAgRGV0YWlscyBWYWx1ZSc/ICdidG4gYWN0aXZlYnRuJzonJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgbWUtNlwiPlN0b3JlIFBlcmZvcm1hbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIlNlbGVjdHRhYnMoJ3VzZXInKVwiIFtyb3V0ZXJMaW5rXT1cIlsnL21hbmFnZS90cmF4L3VzZXInXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInsgdHlwZTogJ3VzZXInIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJyZWNlaXZlZERhdGEgPT09ICd1c2VyJyB8fCByZWNlaXZlZERhdGEgPT09ICdHcm91cCBEZXRhaWxzIFZhbHVlJz8gJ2J0biBhY3RpdmVidG4nOicnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGluayBtZS02XCI+VXNlciBQZXJmb3JtYW5jZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInJlY2VpdmVkRGF0YSA9PT0gJ2NoZWNrbGlzdCdcIiBjbGFzcz1cImNvbC1sZy0xMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1sYWJlbCBtYi0yXCI+Q2hlY2tsaXN0IEluZm88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YiBtYi0yXCI+IEJhc2VkIG9uIHt7IGhlYWRlckRhdGE/LmRhdGU/LnN0YXJ0RGF0ZSB8IGRhdGU6ICdNTU0gZCcgfX0gLSB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJEYXRhPy5kYXRlPy5lbmREYXRlIHwgZGF0ZTogJ01NTSBkLCB5JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciAgcG9zaXRpb24tcmVsYXRpdmUgbXktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBmb290ZmFsbHNlYXJjaCBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlICBtcy04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IG9wYWNpdHk9XCIwLjVcIiB4PVwiMTcuMDM2NVwiIHk9XCIxNS4xMjIzXCIgd2lkdGg9XCI4LjE1NTQ2XCIgaGVpZ2h0PVwiMlwiIHJ4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoNDUgMTcuMDM2NSAxNS4xMjIzKVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMSAxOUM2LjU1NTU2IDE5IDMgMTUuNDQ0NCAzIDExQzMgNi41NTU1NiA2LjU1NTU2IDMgMTEgM0MxNS40NDQ0IDMgMTkgNi41NTU1NiAxOSAxMUMxOSAxNS40NDQ0IDE1LjQ0NDQgMTkgMTEgMTlaTTExIDVDNy41MzMzMyA1IDUgNy41MzMzMyA1IDExQzUgMTQuNDY2NyA3LjUzMzMzIDE3IDExIDE3QzE0LjQ2NjcgMTcgMTcgMTQuNDY2NyAxNyAxMUMxNyA3LjUzMzMzIDE0LjQ2NjcgNSAxMSA1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBbZGlzYWJsZWRdPVwic2VhcmNoRGlzYWJsZWRcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cInNlYXJjaElucHV0XCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBwcy0xNCBtcy00IGZvb3RmYWxsc2VhcmNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBieSBjaGVja2xpc3RcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5dXAuZW50ZXIpPVwic2VhcmNoRmllbGQoKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25FeHBvcnQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tb3V0bGluZSBidG4gYWxpZ24taXRlbXMtZW5kIHRleHQtbm93cmFwIGludmhlYWRlciBtcy00XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNoZWNrbGlzdFBlcmZvcm1hbmNlLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRXhwb3J0IEljb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE3LjUgMTIuNVYxNS44MzMzQzE3LjUgMTYuMjc1NCAxNy4zMjQ0IDE2LjY5OTMgMTcuMDExOCAxNy4wMTE4QzE2LjY5OTMgMTcuMzI0NCAxNi4yNzU0IDE3LjUgMTUuODMzMyAxNy41SDQuMTY2NjdDMy43MjQ2NCAxNy41IDMuMzAwNzIgMTcuMzI0NCAyLjk4ODE2IDE3LjAxMThDMi42NzU1OSAxNi42OTkzIDIuNSAxNi4yNzU0IDIuNSAxNS44MzMzVjEyLjVNMTQuMTY2NyA2LjY2NjY3TDEwIDIuNU0xMCAyLjVMNS44MzMzMyA2LjY2NjY3TTEwIDIuNVYxMi41XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTJcIj48L3NwYW4+IEV4cG9ydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy9tYW5hZ2UvdHJheC9jcmVhdGVDaGVja2xpc3QnXVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtcy00IHJvdW5kZWQtMyB0ZXh0LW5vd3JhcCBuZy1zdGFyLWluc2VydGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMC4wMDAxIDQuMTY2NjNWMTUuODMzM000LjE2Njc1IDkuOTk5OTZIMTUuODMzNFwiIHN0cm9rZT1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4gY2xhc3M9XCJtcy0yIHRleHQtd2hpdGVcIj5DcmVhdGUgQ2hlY2tsaXN0PC9zcGFuPjwvYT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHAtMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tICpuZ0lmPVwiIWNoZWNrbGlzdExvYWRpbmcgJiYgIWNoZWNrbGlzdE5vRGF0YVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSAqbmdJZj1cIiFjaGVja2xpc3RMb2FkaW5nICYmICFjaGVja2xpc3ROb0RhdGFcIiBjbGFzcz1cInRhYmxlIHRleHQtbm93cmFwIGJvdHRvbS1ib3JkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5DaGVja2xpc3QgTmFtZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+U2NoZWR1bGVkPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHRoPkNvdmVyYWdlPC90aD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnc3RvcmVDb3VudCcpXCI+QXNzaWduZWQgVG88c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ3N0b3JlQ291bnQnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdzdG9yZUNvdW50JyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdzdWJtaXR0ZWRDaGVja2xpc3QnKVwiPlN1Ym1pdHRlZDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAnc3VibWl0dGVkQ2hlY2tsaXN0JyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnc3VibWl0dGVkQ2hlY2tsaXN0JyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdmbGFnZ2VkQ2hlY2tsaXN0JylcIj5GbGFnczxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAnZmxhZ2dlZENoZWNrbGlzdCcgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gJ2ZsYWdnZWRDaGVja2xpc3QnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnY2hlY2tMaXN0VHlwZScpXCI+VGFza3M8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ2NoZWNrTGlzdFR5cGUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdjaGVja0xpc3RUeXBlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+QWN0aW9uPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBzdG9yZSBvZiBjaGVja2xpc3RQZXJmb3JtYW5jZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ltYm9sIHN5bWJvbC0zNXB4IHN5bWJvbC1jaXJjbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN5bWJvbC1sYWJlbCBiZy1saWdodC1wcmltYXJ5IHRleHQtcHJpbWFyeSBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzdG9yZS5jaGVja0xpc3RDaGFyIHx8ICctLScgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbcm91dGVyTGlua109XCJbJy9tYW5hZ2UvdHJheC9pbmZvJ11cIiBbcXVlcnlQYXJhbXNdPVwieyBjaGVja2xpc3Q6IHN0b3JlLnNvdXJjZUNoZWNrTGlzdF9pZCwgdHlwZTogJ0NoZWNrbGlzdCcgfVwiIGNsYXNzPVwidGFibGUtdGl0bGUtcHJpbWFyeSBjdXJzb3ItcG9pbnRlclwiPnt7IHN0b3JlLmNoZWNrTGlzdE5hbWUgfHwgJy0tJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPnt7IHN0b3JlLnNjaGVkdWxlUmVwZWF0ZWRUeXBlIHx8ICctLScgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDx0ZCBjbGFzcz1cInRhYmxlLXRpdGxlLXByaW1hcnlcIj57eyBzdG9yZS5jaGVja0xpc3RUeXBlIHx8ICctLScgfX08L3RkPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+e3sgc3RvcmUuc3RvcmVDb3VudD8udG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkgfHwgJy0tJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlLXByaW1hcnlcIj57eyBzdG9yZS5zdWJtaXR0ZWRDaGVja2xpc3Q/LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIHx8ICctLScgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZS1wcmltYXJ5XCI+e3sgc3RvcmUuZmxhZ2dlZENoZWNrbGlzdD8udG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkgfHwgJy0tJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGUtcHJpbWFyeVwiPnt7IHN0b3JlLmNoZWNrTGlzdFR5cGUgfHwgJy0tJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbcm91dGVyTGlua109XCJbJy9tYW5hZ2UvdHJheC9pbmZvJ11cIiBbcXVlcnlQYXJhbXNdPVwieyBjaGVja2xpc3Q6IHN0b3JlLnNvdXJjZUNoZWNrTGlzdF9pZCwgdHlwZTogJ0NoZWNrbGlzdCcgfVwiIGNsYXNzPVwidGFibGUtdGl0bGVcIj48c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wLjgzMjAzMSA5Ljk5OTkyQzAuODMyMDMxIDkuOTk5OTIgNC4xNjUzNiAzLjMzMzI1IDkuOTk4NyAzLjMzMzI1QzE1LjgzMiAzLjMzMzI1IDE5LjE2NTQgOS45OTk5MiAxOS4xNjU0IDkuOTk5OTJDMTkuMTY1NCA5Ljk5OTkyIDE1LjgzMiAxNi42NjY2IDkuOTk4NyAxNi42NjY2QzQuMTY1MzYgMTYuNjY2NiAwLjgzMjAzMSA5Ljk5OTkyIDAuODMyMDMxIDkuOTk5OTJaXCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS45OTg3IDEyLjQ5OTlDMTEuMzc5NCAxMi40OTk5IDEyLjQ5ODcgMTEuMzgwNiAxMi40OTg3IDkuOTk5OTJDMTIuNDk4NyA4LjYxOTIxIDExLjM3OTQgNy40OTk5MiA5Ljk5ODcgNy40OTk5MkM4LjYxNzk5IDcuNDk5OTIgNy40OTg3IDguNjE5MjEgNy40OTg3IDkuOTk5OTJDNy40OTg3IDExLjM4MDYgOC42MTc5OSAxMi40OTk5IDkuOTk4NyAxMi40OTk5WlwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGVja2xpc3RMb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hlY2tsaXN0Tm9EYXRhICYmICFjaGVja2xpc3RMb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbXktNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhMS5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YW1haW50ZXh0IG10LTNcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGFzdWJ0ZXh0XCI+VGhlcmUgaXMgbm8gcmVzdWx0IGZvciBDaGVja2xpc3QgUGVyZm9ybWFuY2UgVGFibGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhY2hlY2tsaXN0TG9hZGluZyAmJiAhY2hlY2tsaXN0Tm9EYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpYi1wYWdpbmF0aW9uIGNsYXNzPVwidGV4dC1zdGFydFwiIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlXCIgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtc1wiIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzXCIgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCI+PC9saWItcGFnaW5hdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInJlY2VpdmVkRGF0YSA9PT0gJ3N0b3JlJ1wiIGNsYXNzPVwiY29sLWxnLTEyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC0zXCI+XHJcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsIG1iLTJcIj5TdG9yZXMgSW5mbzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3ViIG1iLTJcIj4gQmFzZWQgb24ge3sgaGVhZGVyRGF0YT8uZGF0ZT8uc3RhcnREYXRlIHwgZGF0ZTogJ01NTSBkJyB9fSAtIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlckRhdGE/LmRhdGU/LmVuZERhdGUgfCBkYXRlOiAnTU1NIGQsIHknIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyICBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIGZvb3RmYWxsc2VhcmNoIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgIG1zLThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgb3BhY2l0eT1cIjAuNVwiIHg9XCIxNy4wMzY1XCIgeT1cIjE1LjEyMjNcIiB3aWR0aD1cIjguMTU1NDZcIiBoZWlnaHQ9XCIyXCIgcng9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSg0NSAxNy4wMzY1IDE1LjEyMjMpXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExIDE5QzYuNTU1NTYgMTkgMyAxNS40NDQ0IDMgMTFDMyA2LjU1NTU2IDYuNTU1NTYgMyAxMSAzQzE1LjQ0NDQgMyAxOSA2LjU1NTU2IDE5IDExQzE5IDE1LjQ0NDQgMTUuNDQ0NCAxOSAxMSAxOVpNMTEgNUM3LjUzMzMzIDUgNSA3LjUzMzMzIDUgMTFDNSAxNC40NjY3IDcuNTMzMzMgMTcgMTEgMTdDMTQuNDY2NyAxNyAxNyAxNC40NjY3IDE3IDExQzE3IDcuNTMzMzMgMTQuNDY2NyA1IDExIDVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFtkaXNhYmxlZF09XCJzZWFyY2hEaXNhYmxlZFwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwic2VhcmNoSW5wdXRcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBzLTE0IG1zLTQgZm9vdGZhbGxzZWFyY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGJ5IGNoZWNrbGlzdFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXl1cC5lbnRlcik9XCJzZWFyY2hGaWVsZCgpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIlsnL21hbmFnZS90cmF4L2NyZWF0ZUNoZWNrbGlzdCddXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1zLTQgcm91bmRlZC0zIHRleHQtbm93cmFwIG5nLXN0YXItaW5zZXJ0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjAwMDEgNC4xNjY2M1YxNS44MzMzTTQuMTY2NzUgOS45OTk5NkgxNS44MzM0XCIgc3Ryb2tlPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48c3BhbiBjbGFzcz1cIm1zLTIgdGV4dC13aGl0ZVwiPkNyZWF0ZSBDaGVja2xpc3Q8L3NwYW4+PC9hPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC0wXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gKm5nSWY9XCIhY2hlY2tsaXN0TG9hZGluZyAmJiAhY2hlY2tsaXN0Tm9EYXRhXCIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlICpuZ0lmPVwiIXN0b3JlUGVyZm9ybWFuY2VMb2FkaW5nICYmICFzdG9yZVBlcmZvcm1hbmNlTm9EYXRhXCIgY2xhc3M9XCJ0YWJsZSB0ZXh0LW5vd3JhcCBib3R0b20tYm9yZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnc3RvcmVOYW1lJylcIj5TdG9yZSBOYW1lPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ3N0b3JlTmFtZScgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdzdG9yZU5hbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+U3RvcmUgU3BvYzwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ2NoZWNrTGlzdENvdW50JylcIj5DaGVja2xpc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzaWduZWQ8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAnY2hlY2tMaXN0Q291bnQnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnY2hlY2tMaXN0Q291bnQnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnZmxhZ2dlZENvdW50JylcIj5GbGFnczxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWUgPT09ICdmbGFnZ2VkQ291bnQnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnZmxhZ2dlZENvdW50JyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ2NvbXBsZXRpb24nKVwiPkNvbXBsZXRpb24gJSA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAnY29tcGxldGlvbicgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdjb21wbGV0aW9uJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ2NvbXBsaWFuY2UnKVwiPkNvbXBsaWFuY2UgJTxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWUgPT09ICdjb21wbGlhbmNlJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gJ2NvbXBsaWFuY2UnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgncGVyZm9ybWFuY2UnKVwiPlBlcmZvcm1hbmNlPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ3BlcmZvcm1hbmNlJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gJ3BlcmZvcm1hbmNlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkFjdGlvbjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc3RvcmVQZXJmb3JtYW5jZURhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIlsnL21hbmFnZS90cmF4L2luZm8nXVwiIFtxdWVyeVBhcmFtc109XCJ7IHN0b3JlX2lkOiBpdGVtLl9pZCwgdHlwZTogJ3N0b3JlJyB9XCIgY2xhc3M9XCJ0YWJsZS10aXRsZS1wcmltYXJ5XCI+e3sgaXRlbS5zdG9yZU5hbWUgfX08L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj57eyBpdGVtLnVzZXJFbWFpbCB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPnt7IGl0ZW0uY2hlY2tMaXN0Q291bnQ/LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwIH0pIHx8ICctLScgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPnt7IGl0ZW0uZmxhZ2dlZENvdW50Py50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KSB8fCAnLS0nIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTVweCB3LTEwMCBiZy1saWdodCBtdC0yIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHJvbGU9XCJwcm9ncmVzc2JhclwiIGFyaWEtdmFsdWVtaW49XCIwXCIgYXJpYS12YWx1ZW1heD1cIjEwMFwiIGNsYXNzPVwiYmctcHJpbWFyeSByb3VuZGVkIGgtNXB4XCIgW25nU3R5bGVdPVwieyB3aWR0aDogaXRlbS5jb21wbGV0aW9uICsgJyUnIH1cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCI+PHNwYW4gY2xhc3M9XCJteS0xIG14LTEgdGV4dC1lbmRcIj57eyBpdGVtLmNvbXBsZXRpb24gfHwgJy0tJyB9fSU8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC01cHggdy0xMDAgYmctbGlnaHQgbXQtMiBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiByb2xlPVwicHJvZ3Jlc3NiYXJcIiBhcmlhLXZhbHVlbWluPVwiMFwiIGFyaWEtdmFsdWVtYXg9XCIxMDBcIiBjbGFzcz1cImJnLXByaW1hcnkgcm91bmRlZCBoLTVweFwiIFtuZ1N0eWxlXT1cInsgd2lkdGg6IGl0ZW0uY29tcGxpYW5jZSArICclJyB9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiPjxzcGFuIGNsYXNzPVwibXktMSBteC0xIHRleHQtZW5kXCI+e3sgaXRlbS5jb21wbGlhbmNlIHx8ICctLScgfX0lPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtNXB4IHctMTAwIGJnLWxpZ2h0IG10LTIgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgcm9sZT1cInByb2dyZXNzYmFyXCIgYXJpYS12YWx1ZW1pbj1cIjBcIiBhcmlhLXZhbHVlbWF4PVwiMTAwXCIgY2xhc3M9XCJiZy1wcmltYXJ5IHJvdW5kZWQgaC01cHhcIiBbbmdTdHlsZV09XCJ7IHdpZHRoOiBpdGVtLnBlcmZvcm1hbmNlICsgJyUnIH1cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCI+PHNwYW4gY2xhc3M9XCJteS0xIG14LTEgdGV4dC1lbmRcIj57eyBpdGVtLnBlcmZvcm1hbmNlIHx8ICctLScgfX0lPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtyb3V0ZXJMaW5rXT1cIlsnL21hbmFnZS90cmF4L2luZm8nXVwiIFtxdWVyeVBhcmFtc109XCJ7IHN0b3JlX2lkOiBpdGVtLl9pZCwgdHlwZTogJ3N0b3JlJyB9XCIgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPjxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMC44MzIwMzEgOS45OTk5MkMwLjgzMjAzMSA5Ljk5OTkyIDQuMTY1MzYgMy4zMzMyNSA5Ljk5ODcgMy4zMzMyNUMxNS44MzIgMy4zMzMyNSAxOS4xNjU0IDkuOTk5OTIgMTkuMTY1NCA5Ljk5OTkyQzE5LjE2NTQgOS45OTk5MiAxNS44MzIgMTYuNjY2NiA5Ljk5ODcgMTYuNjY2NkM0LjE2NTM2IDE2LjY2NjYgMC44MzIwMzEgOS45OTk5MiAwLjgzMjAzMSA5Ljk5OTkyWlwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05Ljk5ODcgMTIuNDk5OUMxMS4zNzk0IDEyLjQ5OTkgMTIuNDk4NyAxMS4zODA2IDEyLjQ5ODcgOS45OTk5MkMxMi40OTg3IDguNjE5MjEgMTEuMzc5NCA3LjQ5OTkyIDkuOTk4NyA3LjQ5OTkyQzguNjE3OTkgNy40OTk5MiA3LjQ5ODcgOC42MTkyMSA3LjQ5ODcgOS45OTk5MkM3LjQ5ODcgMTEuMzgwNiA4LjYxNzk5IDEyLjQ5OTkgOS45OTg3IDEyLjQ5OTlaXCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdG9yZVBlcmZvcm1hbmNlTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0b3JlUGVyZm9ybWFuY2VOb0RhdGEgJiYgIXN0b3JlUGVyZm9ybWFuY2VMb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbXktNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhMS5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YW1haW50ZXh0IG10LTNcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGFzdWJ0ZXh0XCI+VGhlcmUgaXMgbm8gcmVzdWx0IGZvciBDaGVja2xpc3QgUGVyZm9ybWFuY2UgVGFibGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhc3RvcmVQZXJmb3JtYW5jZUxvYWRpbmcgJiYgIXN0b3JlUGVyZm9ybWFuY2VOb0RhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGliLXBhZ2luYXRpb24gY2xhc3M9XCJ0ZXh0LXN0YXJ0XCIgW2l0ZW1zUGVyUGFnZV09XCJpdGVtc1BlclBhZ2VcIiBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zXCIgW3BhZ2luYXRpb25TaXplc109XCJwYWdpbmF0aW9uU2l6ZXNcIiBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwicmVjZWl2ZWREYXRhID09PSAndXNlcidcIiBjbGFzcz1cImNvbC1sZy0xMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1sYWJlbCBtYi0yXCI+VXNlciBJbmZvPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zdWIgbWItMlwiPiBCYXNlZCBvbiB7eyBoZWFkZXJEYXRhPy5kYXRlPy5zdGFydERhdGUgfCBkYXRlOiAnTU1NIGQnIH19IC0ge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyRGF0YT8uZGF0ZT8uZW5kRGF0ZSB8IGRhdGU6ICdNTU0gZCwgeScgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgIHBvc2l0aW9uLXJlbGF0aXZlIG15LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gZm9vdGZhbGxzZWFyY2ggc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSAgbXMtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBvcGFjaXR5PVwiMC41XCIgeD1cIjE3LjAzNjVcIiB5PVwiMTUuMTIyM1wiIHdpZHRoPVwiOC4xNTU0NlwiIGhlaWdodD1cIjJcIiByeD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDE3LjAzNjUgMTUuMTIyMylcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEgMTlDNi41NTU1NiAxOSAzIDE1LjQ0NDQgMyAxMUMzIDYuNTU1NTYgNi41NTU1NiAzIDExIDNDMTUuNDQ0NCAzIDE5IDYuNTU1NTYgMTkgMTFDMTkgMTUuNDQ0NCAxNS40NDQ0IDE5IDExIDE5Wk0xMSA1QzcuNTMzMzMgNSA1IDcuNTMzMzMgNSAxMUM1IDE0LjQ2NjcgNy41MzMzMyAxNyAxMSAxN0MxNC40NjY3IDE3IDE3IDE0LjQ2NjcgMTcgMTFDMTcgNy41MzMzMyAxNC40NjY3IDUgMTEgNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gW2Rpc2FibGVkXT1cInNlYXJjaERpc2FibGVkXCIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJzZWFyY2hJbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcHMtMTQgbXMtNCBmb290ZmFsbHNlYXJjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggYnkgY2hlY2tsaXN0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGtleXVwLmVudGVyKT1cInNlYXJjaEZpZWxkKClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycvbWFuYWdlL3RyYXgvY3JlYXRlQ2hlY2tsaXN0J11cIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXMtNCByb3VuZGVkLTMgdGV4dC1ub3dyYXAgbmctc3Rhci1pbnNlcnRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAuMDAwMSA0LjE2NjYzVjE1LjgzMzNNNC4xNjY3NSA5Ljk5OTk2SDE1LjgzMzRcIiBzdHJva2U9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwibXMtMiB0ZXh0LXdoaXRlXCI+Q3JlYXRlIENoZWNrbGlzdDwvc3Bhbj48L2E+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlICpuZ0lmPVwiIXVzZXJQZXJmb3JtYW5jZUxvYWRpbmcgJiYgIXVzZXJQZXJmb3JtYW5jZU5vRGF0YVwiIGNsYXNzPVwidGFibGUgdGV4dC1ub3dyYXAgYm90dG9tLWJvcmRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ3VzZXJOYW1lJylcIj5Vc2VyIE5hbWU8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAndXNlck5hbWUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAndXNlck5hbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ3VzZXJFbWFpbCcpXCI+RW1haWw8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAndXNlckVtYWlsJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gJ3VzZXJFbWFpbCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdjaGVja0xpc3RDb3VudCcpXCI+Q2hlY2tsaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2lnbmVkPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ2NoZWNrTGlzdENvdW50JyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gJ2NoZWNrTGlzdENvdW50JyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ2ZsYWdnZWRDb3VudCcpXCI+RmxhZ3M8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAnZmxhZ2dlZENvdW50JyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gJ2ZsYWdnZWRDb3VudCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdjb21wbGV0aW9uJylcIj5Db21wbGV0aW9uICUgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ2NvbXBsZXRpb24nICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnY29tcGxldGlvbicgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdjb21wbGlhbmNlJylcIj5Db21wbGlhbmNlICU8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAnY29tcGxpYW5jZScgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdjb21wbGlhbmNlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ3BlcmZvcm1hbmNlJylcIj5QZXJmb3JtYW5jZTxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWUgPT09ICdwZXJmb3JtYW5jZScgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdwZXJmb3JtYW5jZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5BY3Rpb248L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB1c2VyIG9mIHVzZXJQZXJmb3JtYW5jZURhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIlsnL21hbmFnZS90cmF4L2luZm8nXVwiIFtxdWVyeVBhcmFtc109XCJ7IHVzZXJFbWFpbDogdXNlci51c2VyRW1haWwsIHR5cGU6ICd1c2VyJ31cIiBjbGFzcz1cInRhYmxlLXRpdGxlLXByaW1hcnlcIj57eyB1c2VyLnVzZXJOYW1lIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj57eyB1c2VyLnVzZXJFbWFpbCB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGFibGUtdGl0bGVcIj57eyB1c2VyLmNoZWNrTGlzdENvdW50Py50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KSB8fCAnLS0nIH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPnt7IHVzZXIuZmxhZ2dlZENvdW50Py50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCB9KSB8fCAnLS0nIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTVweCB3LTEwMCBiZy1saWdodCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiByb2xlPVwicHJvZ3Jlc3NiYXJcIiBhcmlhLXZhbHVlbWluPVwiMFwiIGFyaWEtdmFsdWVtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJnLXByaW1hcnkgcm91bmRlZCBoLTVweFwiIFtuZ1N0eWxlXT1cInsgd2lkdGg6IHVzZXIuY29tcGxldGlvbiArICclJyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiPjxzcGFuIGNsYXNzPVwibXktMSBteC0xIHRleHQtZW5kXCI+e3sgdXNlci5jb21wbGV0aW9uIHx8ICctLScgfX0lPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtNXB4IHctMTAwIGJnLWxpZ2h0IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHJvbGU9XCJwcm9ncmVzc2JhclwiIGFyaWEtdmFsdWVtaW49XCIwXCIgYXJpYS12YWx1ZW1heD1cIjEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmctcHJpbWFyeSByb3VuZGVkIGgtNXB4XCIgW25nU3R5bGVdPVwieyB3aWR0aDogdXNlci5jb21wbGlhbmNlICsgJyUnIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCI+PHNwYW4gY2xhc3M9XCJteS0xIG14LTEgdGV4dC1lbmRcIj57eyB1c2VyLmNvbXBsaWFuY2UgfHwgJy0tJyB9fSU8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC01cHggdy0xMDAgYmctbGlnaHQgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgcm9sZT1cInByb2dyZXNzYmFyXCIgYXJpYS12YWx1ZW1pbj1cIjBcIiBhcmlhLXZhbHVlbWF4PVwiMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiZy1wcmltYXJ5IHJvdW5kZWQgaC01cHhcIiBbbmdTdHlsZV09XCJ7IHdpZHRoOiB1c2VyLnBlcmZvcm1hbmNlICsgJyUnIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCI+PHNwYW4gY2xhc3M9XCJteS0xIG14LTEgdGV4dC1lbmRcIj57eyB1c2VyLnBlcmZvcm1hbmNlIHx8ICctLScgfX0lPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgW3JvdXRlckxpbmtdPVwiWycvbWFuYWdlL3RyYXgvaW5mbyddXCIgW3F1ZXJ5UGFyYW1zXT1cInsgdXNlckVtYWlsOiB1c2VyLnVzZXJFbWFpbCwgdHlwZTogJ3VzZXInfVwiIGNsYXNzPVwidGFibGUtdGl0bGVcIj48c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMC44MzIwMzEgOS45OTk5MkMwLjgzMjAzMSA5Ljk5OTkyIDQuMTY1MzYgMy4zMzMyNSA5Ljk5ODcgMy4zMzMyNUMxNS44MzIgMy4zMzMyNSAxOS4xNjU0IDkuOTk5OTIgMTkuMTY1NCA5Ljk5OTkyQzE5LjE2NTQgOS45OTk5MiAxNS44MzIgMTYuNjY2NiA5Ljk5ODcgMTYuNjY2NkM0LjE2NTM2IDE2LjY2NjYgMC44MzIwMzEgOS45OTk5MiAwLjgzMjAzMSA5Ljk5OTkyWlwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS45OTg3IDEyLjQ5OTlDMTEuMzc5NCAxMi40OTk5IDEyLjQ5ODcgMTEuMzgwNiAxMi40OTg3IDkuOTk5OTJDMTIuNDk4NyA4LjYxOTIxIDExLjM3OTQgNy40OTk5MiA5Ljk5ODcgNy40OTk5MkM4LjYxNzk5IDcuNDk5OTIgNy40OTg3IDguNjE5MjEgNy40OTg3IDkuOTk5OTJDNy40OTg3IDExLjM4MDYgOC42MTc5OSAxMi40OTk5IDkuOTk4NyAxMi40OTk5WlwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlclBlcmZvcm1hbmNlTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJQZXJmb3JtYW5jZU5vRGF0YSAmJiAhdXNlclBlcmZvcm1hbmNlTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG15LTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLXNyY1wiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL05vZGF0YTEuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGFtYWludGV4dCBtdC0zXCI+Tm8gZGF0YSBmb3VuZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhc3VidGV4dFwiPlRoZXJlIGlzIG5vIHJlc3VsdCBmb3IgQ2hlY2tsaXN0IFBlcmZvcm1hbmNlIFRhYmxlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXVzZXJQZXJmb3JtYW5jZUxvYWRpbmcgJiYgIXVzZXJQZXJmb3JtYW5jZU5vRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItcGFnaW5hdGlvbiBjbGFzcz1cInRleHQtc3RhcnRcIiBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZVwiIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXNcIiBbcGFnaW5hdGlvblNpemVzXT1cInBhZ2luYXRpb25TaXplc1wiIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXBhZ2luYXRpb24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|