tango-app-ui-manage-tickets 3.7.0-beta.3 → 3.7.0-beta.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/esm2022/lib/components/audit-mapping-list/audit-mapping-list.component.mjs +498 -0
  2. package/esm2022/lib/components/filter-options/filter-options.component.mjs +41 -0
  3. package/esm2022/lib/components/footfall-dic/footfall-dic.component.mjs +394 -190
  4. package/esm2022/lib/components/footfall-dicview/footfall-dicview.component.mjs +1014 -0
  5. package/esm2022/lib/components/footfall-popup/footfall-popup.component.mjs +15 -0
  6. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +3 -3
  7. package/esm2022/lib/components/remove-audit/remove-audit.component.mjs +80 -0
  8. package/esm2022/lib/components/start-audit/start-audit.component.mjs +738 -0
  9. package/esm2022/lib/components/tango-manage-tickets/tango-manage-tickets.component.mjs +7 -3
  10. package/esm2022/lib/components/ticket-footfall-new/ticket-footfall-new.component.mjs +1323 -0
  11. package/esm2022/lib/components/tickets/tickets.component.mjs +62 -8
  12. package/esm2022/lib/components/viewcategory/viewcategory.component.mjs +89 -0
  13. package/esm2022/lib/services/audit.service.mjs +85 -0
  14. package/esm2022/lib/services/ticket.service.mjs +37 -4
  15. package/esm2022/lib/services/timer.service.mjs +84 -0
  16. package/esm2022/lib/tango-manage-tickets-routing.module.mjs +16 -1
  17. package/esm2022/lib/tango-manage-tickets.module.mjs +41 -5
  18. package/fesm2022/tango-app-ui-manage-tickets.mjs +4504 -281
  19. package/fesm2022/tango-app-ui-manage-tickets.mjs.map +1 -1
  20. package/lib/components/audit-mapping-list/audit-mapping-list.component.d.ts +72 -0
  21. package/lib/components/audit-metrics/audit-metrics.component.d.ts +1 -1
  22. package/lib/components/filter-options/filter-options.component.d.ts +15 -0
  23. package/lib/components/footfall-dic/footfall-dic.component.d.ts +24 -8
  24. package/lib/components/footfall-dicview/footfall-dicview.component.d.ts +132 -0
  25. package/lib/components/footfall-popup/footfall-popup.component.d.ts +8 -0
  26. package/lib/components/remove-audit/remove-audit.component.d.ts +16 -0
  27. package/lib/components/start-audit/start-audit.component.d.ts +86 -0
  28. package/lib/components/tango-manage-tickets/tango-manage-tickets.component.d.ts +1 -0
  29. package/lib/components/ticket-footfall-new/ticket-footfall-new.component.d.ts +193 -0
  30. package/lib/components/tickets/tickets.component.d.ts +4 -0
  31. package/lib/components/viewcategory/viewcategory.component.d.ts +16 -0
  32. package/lib/services/audit.service.d.ts +34 -0
  33. package/lib/services/ticket.service.d.ts +13 -3
  34. package/lib/services/timer.service.d.ts +22 -0
  35. package/lib/tango-manage-tickets.module.d.ts +16 -5
  36. package/package.json +1 -1
@@ -0,0 +1,1323 @@
1
+ import { Component, EventEmitter, Output, ViewChild, } from "@angular/core";
2
+ import * as am4core from "@amcharts/amcharts4/core";
3
+ import am4themes_animated from "@amcharts/amcharts4/themes/animated";
4
+ import { FootfallPopupComponent } from "../footfall-popup/footfall-popup.component";
5
+ import { Subject, takeUntil } from "rxjs";
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@ng-bootstrap/ng-bootstrap";
8
+ import * as i2 from "tango-app-ui-global";
9
+ import * as i3 from "../../services/ticket.service";
10
+ import * as i4 from "../../services/excel.service";
11
+ import * as i5 from "tango-app-ui-shared";
12
+ import * as i6 from "@angular/forms";
13
+ import * as i7 from "@angular/router";
14
+ import * as i8 from "@angular/common";
15
+ am4core.useTheme(am4themes_animated);
16
+ export class TicketFootfallNewComponent {
17
+ modalService;
18
+ gs;
19
+ service;
20
+ cd;
21
+ excelService;
22
+ ts;
23
+ fb;
24
+ router;
25
+ searchValue = "";
26
+ sortedColumn = "";
27
+ sortDirection = 1;
28
+ destroy$ = new Subject();
29
+ constructor(modalService, gs, service, cd, excelService, ts, fb, router) {
30
+ this.modalService = modalService;
31
+ this.gs = gs;
32
+ this.service = service;
33
+ this.cd = cd;
34
+ this.excelService = excelService;
35
+ this.ts = ts;
36
+ this.fb = fb;
37
+ this.router = router;
38
+ }
39
+ headerFilters;
40
+ footfallList_req;
41
+ usersDetails;
42
+ ngOnInit() {
43
+ sessionStorage.clear();
44
+ this.imageUrl = this.service?.footfallCDN;
45
+ let userData = localStorage.getItem("user-info");
46
+ this.usersDetails = JSON.parse(userData);
47
+ this.SelectedRole('approver');
48
+ this.gs.dataRangeValue?.pipe(takeUntil(this.destroy$))?.subscribe({
49
+ next: (data) => {
50
+ if (data) {
51
+ this.headerFilters = data;
52
+ this.footfallList_req = {
53
+ client: this.headerFilters.clients.toString(),
54
+ fromDate: this.headerFilters?.date?.startDate,
55
+ toDate: this.headerFilters?.date?.endDate,
56
+ };
57
+ this.getTicketSummary();
58
+ this.getTicketList();
59
+ }
60
+ },
61
+ });
62
+ }
63
+ areAllItemsReviewed(mapping) {
64
+ const revised = mapping?.revisedDetail || [];
65
+ if (!revised.length)
66
+ return false;
67
+ const itemsToCheck = [];
68
+ revised.forEach((detail) => {
69
+ // If duplicate parent → check its duplicateImage children
70
+ if (detail?.revopsType === 'duplicate' &&
71
+ detail?.isParent &&
72
+ Array.isArray(detail?.duplicateImage) &&
73
+ detail.duplicateImage.length) {
74
+ itemsToCheck.push(...detail.duplicateImage);
75
+ }
76
+ else {
77
+ // Normal item or non-parent duplicate
78
+ itemsToCheck.push(detail);
79
+ }
80
+ });
81
+ // All must have review approved/rejected
82
+ return itemsToCheck.length > 0 && itemsToCheck.every(item => this.hasReviewDecision(item));
83
+ }
84
+ hasReviewDecision(item) {
85
+ const actions = item?.actions || [];
86
+ return actions.some((a) => a.actionType === 'review' &&
87
+ (a.action === 'approved' || a.action === 'rejected'));
88
+ }
89
+ selectedRole = '';
90
+ getHeaderStatus() {
91
+ const roleMapping = this.getCurrentRoleMapping();
92
+ console.log('roleMapping in getHeaderStatus:', roleMapping);
93
+ if (roleMapping?.status) {
94
+ const allReviewed = this.areAllItemsReviewed(roleMapping);
95
+ if (roleMapping.status === 'In-Progress') {
96
+ // Show Close button while in-progress
97
+ this.closeBtn = true;
98
+ // Enable only when everything reviewed
99
+ this.closeDisabled = !allReviewed;
100
+ }
101
+ else {
102
+ // For other statuses (Open, Closed, etc.)
103
+ this.closeBtn = false;
104
+ this.closeDisabled = true;
105
+ }
106
+ return roleMapping.status; // e.g. "Open", "In-Progress", "Closed"
107
+ }
108
+ // Fallback: ticket status
109
+ this.closeBtn = false;
110
+ this.closeDisabled = true;
111
+ return this.ticketData?.status || '--';
112
+ }
113
+ getCurrentRoleMapping() {
114
+ if (!this.footfallTicketsData || !this.footfallTicketsData.length) {
115
+ return null;
116
+ }
117
+ let approverMapping = null;
118
+ let reviewerMapping = null;
119
+ // Go through all tickets and mappingInfo
120
+ for (const ticket of this.footfallTicketsData) {
121
+ const source = ticket?._source;
122
+ const mappingList = source?.mappingInfo || [];
123
+ // find approver mapping with revisedDetail
124
+ if (!approverMapping) {
125
+ const foundApprover = mappingList.find((m) => m?.type === 'approve' && m?.revisedDetail?.length);
126
+ if (foundApprover) {
127
+ approverMapping = foundApprover;
128
+ }
129
+ }
130
+ // find reviewer mapping with revisedDetail
131
+ if (!reviewerMapping) {
132
+ const foundReviewer = mappingList.find((m) => m?.type === 'review' && m?.revisedDetail?.length);
133
+ if (foundReviewer) {
134
+ reviewerMapping = foundReviewer;
135
+ }
136
+ this.closeBtn = true;
137
+ }
138
+ }
139
+ // 🔹 Priority based on permissions
140
+ if (this.hasApproverAccess && approverMapping) {
141
+ return approverMapping;
142
+ }
143
+ if (this.hasReviewerAccess && reviewerMapping) {
144
+ return reviewerMapping;
145
+ }
146
+ // if no mapping matches permissions, fallback to something or null
147
+ return approverMapping || reviewerMapping || null;
148
+ }
149
+ getStatusBadgeClass(status) {
150
+ const map = {
151
+ 'Open': 'badge-light-warning',
152
+ 'In-Progress': 'badge-light-primary',
153
+ 'Under tange review': 'badge-light-primary',
154
+ 'Tange review done': 'badge-light-primary',
155
+ 'Closed': 'badge-secondary',
156
+ 'Pending': 'badge-light-warning',
157
+ 'Reviewer-Closed': 'badge-light-warning',
158
+ 'Rejected': 'badge-light-danger',
159
+ 'Raised': 'badge-light-info'
160
+ };
161
+ return map[status] || 'badge-light-dark'; // fallback
162
+ }
163
+ getFootfallSummaryData;
164
+ getTicketSummary() {
165
+ this.service
166
+ .getTicketSummaryApi(this.footfallList_req.client, this.footfallList_req.fromDate, this.footfallList_req.toDate)
167
+ .pipe(takeUntil(this.destroy$))
168
+ .subscribe({
169
+ next: (res) => {
170
+ if (res && res?.data && res?.data?.result) {
171
+ this.getFootfallSummaryData = res?.data?.result;
172
+ }
173
+ else {
174
+ this.getFootfallSummaryData = [];
175
+ }
176
+ },
177
+ error: (err) => {
178
+ this.getFootfallSummaryData = [];
179
+ },
180
+ complete: () => {
181
+ this.getFootfallSummaryData.length === 0;
182
+ },
183
+ });
184
+ this.cd.detectChanges();
185
+ }
186
+ offset = 0;
187
+ limit = 10;
188
+ isExport = false;
189
+ footfallListData;
190
+ totalItems;
191
+ paginationSizes = [10, 20, 30];
192
+ loading = true;
193
+ noData = false;
194
+ tangoType = "store";
195
+ getTicketList() {
196
+ this.loading = true;
197
+ this.searchValue = this.searchValue?.trim() || "";
198
+ this.offset = this.offset || 1;
199
+ this.limit = this.limit || 10;
200
+ this.isExport = false;
201
+ this.service
202
+ .getTicketListApi(this.footfallList_req.client, this.footfallList_req.fromDate, this.footfallList_req.toDate, this.searchValue, this.limit, this.offset, this.isExport, this.sortedColumn, this.sortDirection, this.tangoType)
203
+ .pipe(takeUntil(this.destroy$))
204
+ .subscribe({
205
+ next: (res) => {
206
+ if (res && res.code === 200) {
207
+ this.noData = false;
208
+ this.loading = false;
209
+ this.footfallListData = res?.data?.result;
210
+ if (this.footfallListData.length > 0) {
211
+ this.generateColumns(this.footfallListData[0]);
212
+ }
213
+ this.totalItems = res?.data?.count;
214
+ if (this.totalItems < 10) {
215
+ this.paginationSizes = [this.totalItems];
216
+ }
217
+ else {
218
+ this.paginationSizes = [10, 20, 30];
219
+ }
220
+ }
221
+ else {
222
+ this.noData = true;
223
+ this.loading = false;
224
+ this.footfallListData = [];
225
+ }
226
+ this.cd.detectChanges();
227
+ },
228
+ error: (err) => {
229
+ this.noData = true;
230
+ this.loading = false;
231
+ },
232
+ complete: () => {
233
+ this.loading = false;
234
+ },
235
+ });
236
+ }
237
+ tableColumns = [];
238
+ labelOverrides = {
239
+ ticketId: 'Ticket ID',
240
+ storeName: 'Store Name',
241
+ storeId: 'Store ID',
242
+ storeRevisedAccuracy: 'Store (Accuracy%)',
243
+ reviewerRevisedAccuracy: 'Reviewer (Accuracy%)',
244
+ approverRevisedAccuracy: 'Approver (Accuracy%)',
245
+ tangoRevisedAccuracy: 'Tango (Accuracy%)',
246
+ ticketRaised: 'Ticket Raised On',
247
+ issueDate: 'Issue Date',
248
+ footfall: 'Actual FF',
249
+ };
250
+ hiddenColumns = [
251
+ 'storeName',
252
+ 'type',
253
+ ];
254
+ generateColumns(firstRow) {
255
+ const keys = Object.keys(firstRow)
256
+ .filter(key => !this.hiddenColumns.includes(key)); // remove unwanted columns
257
+ this.tableColumns = keys.map(key => ({
258
+ key,
259
+ // if key exists in labelOverrides, use that; otherwise auto-format
260
+ label: this.labelOverrides[key] ?? this.formatColumnName(key),
261
+ sortable: true,
262
+ type: this.detectColumnType ? this.detectColumnType(key) : null
263
+ }));
264
+ }
265
+ formatColumnName(key) {
266
+ return key
267
+ .replace(/([A-Z])/g, ' $1')
268
+ .replace(/_/g, ' ')
269
+ .replace(/\b\w/g, c => c.toUpperCase());
270
+ }
271
+ detectColumnType(key) {
272
+ if (key === 'storeName' || key === 'ticketId')
273
+ return 'store';
274
+ if (key.toLowerCase().includes('date') || key === 'ticketRaised')
275
+ return 'date';
276
+ if (key.toLowerCase().includes('status'))
277
+ return 'status';
278
+ return 'text';
279
+ }
280
+ currentPage = 1;
281
+ pageSize = 10;
282
+ onPageChange(pageOffset) {
283
+ this.currentPage = Number(pageOffset);
284
+ this.offset = Number(pageOffset);
285
+ // this.limit = 10;
286
+ this.getTicketList();
287
+ }
288
+ onPageSizeChange(pageSize) {
289
+ this.pageSize = Number(pageSize);
290
+ this.limit = Number(pageSize);
291
+ this.currentPage = 1;
292
+ this.offset = 1;
293
+ this.getTicketList();
294
+ }
295
+ setpageSize() {
296
+ if (this.totalItems < 10) {
297
+ return this.totalItems;
298
+ }
299
+ else {
300
+ return this.pageSize;
301
+ }
302
+ }
303
+ searchData() {
304
+ this.currentPage = 1;
305
+ this.offset = 1;
306
+ this.limit = 10;
307
+ this.getTicketList();
308
+ }
309
+ exportXLSX() {
310
+ this.searchValue = this.searchValue?.trim() || "";
311
+ this.offset = 1;
312
+ this.limit = 10000;
313
+ this.isExport = true;
314
+ this.service
315
+ .getTicketListExportApi(this.footfallList_req.client, this.footfallList_req.fromDate, this.footfallList_req.toDate, this.searchValue, this.limit, this.offset, this.isExport, this.sortedColumn, this.sortDirection, this.tangoType)
316
+ .pipe(takeUntil(this.destroy$))
317
+ .subscribe({
318
+ next: (res) => {
319
+ this.excelService.saveAsExcelFile(res, "footfall directory ticket ");
320
+ },
321
+ error: (err) => {
322
+ this.ts.getErrorToast("Error exporting data:" + err.error ? err.error : err.message);
323
+ },
324
+ });
325
+ }
326
+ onSort(column) {
327
+ if (this.sortedColumn === column) {
328
+ this.sortDirection = this.sortDirection === 1 ? -1 : 1;
329
+ }
330
+ else {
331
+ this.sortedColumn = column;
332
+ this.sortDirection = 1;
333
+ }
334
+ this.getTicketList();
335
+ }
336
+ select = "ticketList";
337
+ ticketData;
338
+ startAudit() {
339
+ const data = {
340
+ totalfiles: this.ticketData?.footfall,
341
+ filedetails: {
342
+ clientId: this.headerFilters?.client,
343
+ storeId: this.ticketData?.storeId,
344
+ Date: this.ticketData?.issueDate,
345
+ auditId: "",
346
+ userId: "",
347
+ nextToken: "",
348
+ },
349
+ auditId: "",
350
+ storedetails: {
351
+ storeName: this.ticketData?.storeName
352
+ }
353
+ };
354
+ sessionStorage.setItem("totalfiles", JSON.stringify(data));
355
+ this.select = 'ticketMethod';
356
+ this.router.navigateByUrl('/manage/tickets/audit');
357
+ }
358
+ backToNavigation() {
359
+ this.select = "ticketList";
360
+ this.footfallTicketsData = [];
361
+ this.getTicketSummary();
362
+ this.getTicketList();
363
+ this.closeBtn = false;
364
+ this.isCheckboxEnable = false;
365
+ }
366
+ isCollapsed = false;
367
+ toggleSidebar() {
368
+ this.isCollapsed = !this.isCollapsed;
369
+ }
370
+ toggleFilter() {
371
+ this.isFilterOpen = !this.isFilterOpen;
372
+ }
373
+ isFilterOpen = false; // controls show/hide panel
374
+ filterForm;
375
+ filterChange = new EventEmitter();
376
+ newForm() {
377
+ this.filterForm = this.fb.group({
378
+ status: [""],
379
+ reviewerCondition: [""],
380
+ reviewerValue: [""],
381
+ approverCondition: [""],
382
+ approverValue: [""],
383
+ tangoCondition: [""],
384
+ tangoValue: [""],
385
+ });
386
+ }
387
+ applyFilter() {
388
+ this.filterChange.emit(this.filterForm.value);
389
+ this.isFilterOpen = false; // close after apply
390
+ }
391
+ resetFilter() {
392
+ this.filterForm.reset();
393
+ this.filterChange.emit(this.filterForm.value);
394
+ }
395
+ close() {
396
+ this.isFilterOpen = false;
397
+ }
398
+ StoresSearchValue = "";
399
+ sortedColumn1 = "";
400
+ sortDirection1 = 1;
401
+ searchStoresData() { }
402
+ sortValue(column) { }
403
+ openTicketsList = [];
404
+ selectedStores = []; // holds selected rows
405
+ allSelected = false; // top "Select All" checkbox
406
+ get storeCount() {
407
+ return this.openTicketsList?.length || 0;
408
+ }
409
+ // check if a row is selected (used in template)
410
+ isSelected(store) {
411
+ return this.selectedStores.includes(store);
412
+ }
413
+ // 🔹 common handler when a store becomes selected
414
+ handleStoreSelected(store) {
415
+ // your API/detail call for that ticket
416
+ this.dataStoreView(store); // or store.ticketId if needed
417
+ }
418
+ // when user clicks on a single store checkbox
419
+ toggleStoreSelection(store) {
420
+ if (this.isSelected(store)) {
421
+ // remove
422
+ this.selectedStores = this.selectedStores.filter((s) => s !== store);
423
+ }
424
+ else {
425
+ // add (if you want single select, use: this.selectedStores = [store];)
426
+ this.selectedStores = [...this.selectedStores, store];
427
+ // call API for this store
428
+ this.handleStoreSelected(store);
429
+ }
430
+ // keep "Select All" in sync
431
+ this.allSelected =
432
+ this.selectedStores.length === this.openTicketsList.length &&
433
+ this.openTicketsList.length > 0;
434
+ }
435
+ // when user clicks on "Select All"
436
+ toggleSelectAll() {
437
+ if (this.allSelected) {
438
+ // unselect everything
439
+ this.selectedStores = [];
440
+ this.allSelected = false;
441
+ }
442
+ else {
443
+ // select all visible stores
444
+ this.selectedStores = [...this.openTicketsList];
445
+ this.allSelected = true;
446
+ // usually no need to call detail API here, but you can if you want
447
+ }
448
+ }
449
+ originalImage = {
450
+ id: 4,
451
+ entryTime: "10:00 AM",
452
+ };
453
+ ticket = [];
454
+ imageUrl;
455
+ getFormattedEntryTime(entryTime) {
456
+ if (!entryTime)
457
+ return "-";
458
+ const [hours, minutes, seconds] = entryTime.split(":").map(Number);
459
+ const date = new Date();
460
+ date.setHours(hours, minutes, seconds);
461
+ return date.toLocaleTimeString("en-US", {
462
+ hour: "2-digit",
463
+ minute: "2-digit",
464
+ // second: '2-digit',
465
+ hour12: true,
466
+ });
467
+ }
468
+ duplicates;
469
+ // key = parent original.tempId, value = array of selected duplicate tempIds
470
+ selectedDuplicatesByParent = {};
471
+ // is one duplicate selected?
472
+ isDuplicateSelected(parentId, duplicateId) {
473
+ return (this.selectedDuplicatesByParent[parentId]?.includes(duplicateId) || false);
474
+ }
475
+ // select / unselect single duplicate
476
+ onDuplicateCheckboxChange(parentId, duplicateId, event) {
477
+ const checked = event.target.checked;
478
+ if (!this.selectedDuplicatesByParent[parentId]) {
479
+ this.selectedDuplicatesByParent[parentId] = [];
480
+ }
481
+ const list = this.selectedDuplicatesByParent[parentId];
482
+ if (checked) {
483
+ if (!list.includes(duplicateId)) {
484
+ list.push(duplicateId);
485
+ }
486
+ }
487
+ else {
488
+ this.selectedDuplicatesByParent[parentId] = list.filter((id) => id !== duplicateId);
489
+ }
490
+ this.updateOverallSelectedIds();
491
+ console.log("Selected duplicates map:", this.selectedDuplicatesByParent);
492
+ }
493
+ // are *all* duplicates under this parent selected?
494
+ areAllDuplicatesSelected(original) {
495
+ const parentId = original.tempId;
496
+ const duplicates = original?.duplicateImage || [];
497
+ const selected = this.selectedDuplicatesByParent[parentId] || [];
498
+ return duplicates.length > 0 && selected.length === duplicates.length;
499
+ }
500
+ // handle "Select All" toggle for this original
501
+ onToggleSelectAllDuplicates(original, event) {
502
+ const checked = event.target.checked;
503
+ const parentId = original.tempId;
504
+ const duplicates = original?.duplicateImage || [];
505
+ if (checked) {
506
+ this.selectedDuplicatesByParent[parentId] = duplicates.map((d) => d.tempId);
507
+ }
508
+ else {
509
+ this.selectedDuplicatesByParent[parentId] = [];
510
+ }
511
+ this.updateOverallSelectedIds();
512
+ console.log("Selected duplicates map:", this.selectedDuplicatesByParent);
513
+ }
514
+ // comments: any;
515
+ commentModal(obj) {
516
+ const modalRef = this.modalService.open(FootfallPopupComponent, {
517
+ centered: true,
518
+ size: "md",
519
+ scrollable: true,
520
+ backdrop: "static",
521
+ });
522
+ modalRef.componentInstance.ticketId = obj.ticketId;
523
+ modalRef.result.then((result) => { });
524
+ }
525
+ commentsAccordionOpen = false;
526
+ toggleCommentsAccordion() {
527
+ this.commentsAccordionOpen = !this.commentsAccordionOpen;
528
+ }
529
+ ngOnDestroy() {
530
+ this.destroy$.next(true);
531
+ this.destroy$.complete();
532
+ }
533
+ comments = [
534
+ {
535
+ email: "ryan@lenskart.com",
536
+ avatar: "assets/avatars/ryan.png",
537
+ time: "2025-01-20T10:53:34",
538
+ mainText: "All the three are same.",
539
+ statusLabel: null,
540
+ statusType: null,
541
+ note: null,
542
+ images: [
543
+ {
544
+ url: "assets/img1.jpg",
545
+ tangoId: 4,
546
+ entryTime: "10:10 AM",
547
+ status: "reject",
548
+ },
549
+ {
550
+ url: "assets/img2.jpg",
551
+ tangoId: 4,
552
+ entryTime: "10:10 AM",
553
+ status: "reject",
554
+ },
555
+ // more images if you want
556
+ ],
557
+ moreCount: 12, // for the +12 card
558
+ },
559
+ {
560
+ email: "drew@lenskart.com",
561
+ avatar: "assets/avatars/drew.png",
562
+ time: "2025-01-20T10:53:34",
563
+ mainText: null,
564
+ statusLabel: "Reject",
565
+ statusType: "danger",
566
+ note: "Not agreed, seems not duplicate.",
567
+ images: [
568
+ {
569
+ url: "assets/img1.jpg",
570
+ tangoId: 4,
571
+ entryTime: "10:10 AM",
572
+ status: "reject",
573
+ },
574
+ {
575
+ url: "assets/img2.jpg",
576
+ tangoId: 4,
577
+ entryTime: "10:10 AM",
578
+ status: "reject",
579
+ },
580
+ ],
581
+ moreCount: 12,
582
+ },
583
+ {
584
+ email: "orlando@lenskart.com",
585
+ avatar: "assets/avatars/orlando.png",
586
+ time: "2025-01-20T10:53:34",
587
+ mainText: null,
588
+ statusLabel: "Approved",
589
+ statusType: "success",
590
+ note: "Agreed, hence approving the 3",
591
+ images: [
592
+ {
593
+ url: "assets/img1.jpg",
594
+ tangoId: 4,
595
+ entryTime: "10:10 AM",
596
+ status: "approve",
597
+ },
598
+ {
599
+ url: "assets/img2.jpg",
600
+ tangoId: 4,
601
+ entryTime: "10:10 AM",
602
+ status: "approve",
603
+ },
604
+ ],
605
+ moreCount: 0,
606
+ },
607
+ ];
608
+ showRevisedDetails = false;
609
+ footfallNoData = false;
610
+ footfallLoading = false;
611
+ footfalloffset = 1;
612
+ footfalllimit = 1;
613
+ totalItemsFootfall = 0;
614
+ dataIndexId = "";
615
+ dateString = "";
616
+ storeIdValue = [];
617
+ lastSelectedTicket;
618
+ selecteValues = "";
619
+ hasInitialStoreSynced = false;
620
+ pageSizeFootfall = 10;
621
+ paginationSizesFootfall = [10, 20, 30];
622
+ addStoreIfNotExists(store) {
623
+ if (this.hasInitialStoreSynced)
624
+ return;
625
+ const storeId = store?.storeId;
626
+ if (storeId && !this.selectedStores.includes(storeId)) {
627
+ this.selectedStores.push(storeId);
628
+ }
629
+ this.hasInitialStoreSynced = true;
630
+ this.allSelected =
631
+ this.selectedStores.length === this.openTicketsList.length;
632
+ }
633
+ hasRevopsType(type) {
634
+ if (!this.footfallTicketsData || !Array.isArray(this.footfallTicketsData)) {
635
+ return false;
636
+ }
637
+ return this.footfallTicketsData.some((ticket) => ticket?._source?.mappingInfo?.some((mapping) => (mapping?.revisedDetail || []).some((r) => r?.revopsType === type)));
638
+ }
639
+ overallSelectedIds;
640
+ overallSelect(event) {
641
+ this.allSelected = event.target.checked;
642
+ const checked = event.target.checked;
643
+ const parents = this.getAllParentItems();
644
+ if (checked) {
645
+ ["junk", "employee", "houseKeeping"].forEach((type) => {
646
+ const list = this.getListByType(type);
647
+ this.selectedByType[type] = list.map((i) => i.tempId);
648
+ this.selectAllByType[type] = list.length > 0;
649
+ });
650
+ this.selectedDuplicatesByParent = {}; // reset first
651
+ parents
652
+ .filter((p) => p.revopsType === "duplicate")
653
+ .forEach((p) => {
654
+ const parentId = p.tempId;
655
+ const duplicates = p.duplicateImage || [];
656
+ this.selectedDuplicatesByParent[parentId] = duplicates.map((d) => d.tempId);
657
+ });
658
+ // 🔹 build IDs
659
+ this.updateOverallSelectedIds();
660
+ }
661
+ else {
662
+ // clear all
663
+ this.selectedByType.junk = [];
664
+ this.selectedByType.employee = [];
665
+ this.selectedByType.houseKeeping = [];
666
+ this.selectedDuplicatesByParent = {};
667
+ this.selectAllByType.junk = false;
668
+ this.selectAllByType.employee = false;
669
+ this.selectAllByType.houseKeeping = false;
670
+ this.selectAllByType.duplicate = false;
671
+ this.overallSelectedIds = [];
672
+ }
673
+ console.log("selectedByType:", this.selectedByType);
674
+ console.log("selectedDuplicatesByParent:", this.selectedDuplicatesByParent);
675
+ }
676
+ getAllParentItems() {
677
+ if (!this.footfallTicketsData) {
678
+ return [];
679
+ }
680
+ const allMappings = [];
681
+ const allRevised = [];
682
+ // first level: collect all mappingInfo arrays
683
+ this.footfallTicketsData.forEach((ticket) => {
684
+ const mappings = ticket?._source?.mappingInfo || [];
685
+ allMappings.push.apply(allMappings, mappings); // concat
686
+ });
687
+ // second level: collect all revisedDetail arrays
688
+ allMappings.forEach((mapping) => {
689
+ const details = mapping?.revisedDetail || [];
690
+ allRevised.push.apply(allRevised, details); // concat
691
+ });
692
+ return allRevised;
693
+ }
694
+ isCheckboxEnable = false;
695
+ closeBtn = false;
696
+ closeDisabled = false;
697
+ startReview() {
698
+ let obj = {
699
+ "storeId": this.ticketData?.storeId,
700
+ "dateString": this.ticketData?.issueDate,
701
+ "mode": "web"
702
+ };
703
+ this.service.getUpdateTicketStatusApi(obj).pipe(takeUntil(this.destroy$)).subscribe({
704
+ next: (res) => {
705
+ if (res && res.code === 200) {
706
+ this.isCheckboxEnable = true; // call this on your "Review" button click
707
+ this.closeBtn = true;
708
+ this.closeDisabled = false;
709
+ this.dataStoreView(this.ticketData);
710
+ }
711
+ },
712
+ error: (err) => {
713
+ },
714
+ complete: () => {
715
+ this.cd.detectChanges();
716
+ }
717
+ });
718
+ }
719
+ closePopup;
720
+ stopReview() {
721
+ const modalRef = this.modalService.open(this.closePopup, {
722
+ centered: true,
723
+ size: "md",
724
+ backdrop: "static",
725
+ keyboard: false,
726
+ });
727
+ this.isCheckboxEnable = false;
728
+ this.closeBtn = false;
729
+ }
730
+ ticketView(data) {
731
+ this.ticketData = data;
732
+ if (this.ticketData?.status === 'In-Progress' || this.ticketData?.status === 'Under tange review' || this.ticketData?.status === 'Tange review done' || this.getHeaderStatus() === 'In-Progress') {
733
+ this.closeBtn = true;
734
+ this.closeDisabled = false;
735
+ this.isCheckboxEnable = true;
736
+ }
737
+ else if (this.ticketData?.status === 'Closed' || this.getHeaderStatus() === 'Closed') {
738
+ this.isCheckboxEnable = false;
739
+ }
740
+ else {
741
+ this.closeBtn = false;
742
+ this.closeDisabled = true;
743
+ }
744
+ console.log("closeBtn", this.closeBtn);
745
+ this.getOpenTicketList(data);
746
+ this.select = "ticketMethod";
747
+ }
748
+ dataStoreView(data) {
749
+ this.footfallTicketsData = [];
750
+ this.footfallNoData = false;
751
+ this.footfallLoading = true;
752
+ const ticket = data?.ticketId;
753
+ // if (!ticket || !ticket._source) {
754
+ // this.footfallLoading = false;
755
+ // this.footfallNoData = true;
756
+ // this.ts.getErrorToast("No ticket data available");
757
+ // return;
758
+ // }
759
+ this.lastSelectedTicket = ticket;
760
+ this.addStoreIfNotExists(ticket);
761
+ this.imageUrl = this.service?.footfallCDN;
762
+ this.storeIdValue = this.selectedStores;
763
+ this.service
764
+ .getTicketsNewApi(ticket)
765
+ .pipe(takeUntil(this.destroy$))
766
+ .subscribe({
767
+ next: (res) => {
768
+ if (res && res.code === 200) {
769
+ if (res?.data?.result?.length === 0) {
770
+ this.footfallTicketsData = [];
771
+ this.footfallNoData = true;
772
+ this.footfallLoading = false;
773
+ this.ts.getErrorToast("No data found for the selected filters");
774
+ }
775
+ else {
776
+ this.footfallTicketsData = res?.data?.result ?? [];
777
+ this.totalItemsFootfall = res?.data?.count;
778
+ if (this.footfalllimit === 1) {
779
+ this.paginationSizes = [1];
780
+ this.pageSizeFootfall = 1;
781
+ }
782
+ else {
783
+ const limit = this.totalItemsFootfall < 10 ? this.totalItemsFootfall : 10;
784
+ this.paginationSizes = [limit];
785
+ this.pageSizeFootfall = limit;
786
+ }
787
+ this.footfallNoData = false;
788
+ this.footfallLoading = false;
789
+ this.updateCloseButtonFromStore();
790
+ }
791
+ }
792
+ else {
793
+ this.footfallTicketsData = [];
794
+ this.footfallNoData = true;
795
+ this.footfallLoading = false;
796
+ }
797
+ },
798
+ error: (err) => {
799
+ if (err?.error?.code === 400)
800
+ this.ts.getErrorToast(err?.error?.message ? err?.error?.message : err?.error?.error);
801
+ this.footfallTicketsData = [];
802
+ this.footfallNoData = true;
803
+ this.footfallLoading = false;
804
+ },
805
+ complete: () => {
806
+ this.cd.detectChanges();
807
+ },
808
+ });
809
+ }
810
+ footfallTicketsData = [];
811
+ // ---- SELECTION STATE ----
812
+ selectedByType = {
813
+ junk: [],
814
+ employee: [],
815
+ houseKeeping: [],
816
+ duplicate: [],
817
+ };
818
+ selectAllByType = {
819
+ junk: false,
820
+ employee: false,
821
+ houseKeeping: false,
822
+ duplicate: false,
823
+ };
824
+ // ---- HELPERS ----
825
+ // Get all revisedDetail items of a given type from footfallTicketsData
826
+ // Get all revisedDetail items of a given type from footfallTicketsData
827
+ getListByType(type) {
828
+ if (!this.footfallTicketsData) {
829
+ return [];
830
+ }
831
+ const allRevised = [];
832
+ // collect revisedDetail ONLY from mappingInfo with type === 'review'
833
+ this.footfallTicketsData.forEach((ticket) => {
834
+ const mappings = ticket?._source?.mappingInfo || [];
835
+ mappings
836
+ .filter((m) => m?.type === 'review') // 🔹 IMPORTANT
837
+ .forEach((mapping) => {
838
+ const details = mapping?.revisedDetail || [];
839
+ allRevised.push(...details);
840
+ });
841
+ });
842
+ // filter by type (junk / employee / houseKeeping)
843
+ const filtered = allRevised.filter((original) => original?.revopsType === type);
844
+ // 🔹 DEDUPE by tempId (or id) so we don't count same image twice
845
+ const uniqueByTempId = Array.from(new Map(filtered.map((item) => [item.tempId, item])).values());
846
+ return uniqueByTempId;
847
+ }
848
+ updateOverallSelectedIds() {
849
+ const ids = [];
850
+ const parents = this.getAllParentItems();
851
+ const selectedTypesSet = new Set();
852
+ ["junk", "employee", "houseKeeping"].forEach((type) => {
853
+ const list = this.getListByType(type);
854
+ const selectedTemps = this.selectedByType[type] || [];
855
+ if (selectedTemps.length > 0) {
856
+ selectedTypesSet.add(type);
857
+ }
858
+ list.forEach((item) => {
859
+ if (selectedTemps.includes(item.tempId) && item.id) {
860
+ ids.push(item.id);
861
+ }
862
+ });
863
+ });
864
+ parents
865
+ .filter((p) => p.revopsType === "duplicate")
866
+ .forEach((parent) => {
867
+ const parentId = parent.tempId;
868
+ const selectedChildTemps = this.selectedDuplicatesByParent[parentId] || [];
869
+ if (selectedChildTemps.length > 0) {
870
+ selectedTypesSet.add("duplicate");
871
+ }
872
+ (parent.duplicateImage || []).forEach((child) => {
873
+ if (selectedChildTemps.includes(child.tempId)) {
874
+ if (child.id) {
875
+ ids.push(child.id);
876
+ }
877
+ else if (parent.id) {
878
+ ids.push(parent.id);
879
+ }
880
+ }
881
+ });
882
+ });
883
+ this.overallSelectedIds = Array.from(new Set(ids)); // dedupe
884
+ this.selectedCategories = Array.from(selectedTypesSet);
885
+ console.log("overallSelectedIds:", this.overallSelectedIds);
886
+ console.log("selectedCategories:", this.selectedCategories);
887
+ }
888
+ selectedCategories = []; // junk, employee, houseKeeping, duplicate
889
+ get selectedCategoriesLabel() {
890
+ if (!this.selectedCategories || !this.selectedCategories.length) {
891
+ return '';
892
+ }
893
+ const labelMap = {
894
+ junk: 'Junk',
895
+ employee: 'Employee',
896
+ houseKeeping: 'House Keeping',
897
+ duplicate: 'Duplicate',
898
+ };
899
+ return this.selectedCategories
900
+ .map((t) => labelMap[t] || t)
901
+ .join(', ');
902
+ }
903
+ type;
904
+ // "Select all" / "Unselect all" for a type
905
+ popupvalue = "";
906
+ // or just: popupvalue: string = '';
907
+ onSelectAll(type, event) {
908
+ const checked = event?.target?.checked;
909
+ this.selectAllByType[type] = checked;
910
+ this.type = type;
911
+ this.popupvalue = type; // 🔴 IMPORTANT
912
+ const list = this.getListByType(type);
913
+ this.selectedByType[type] = checked ? list.map((x) => x.tempId) : [];
914
+ this.updateOverallSelectedIds();
915
+ console.log(this.selectedByType);
916
+ }
917
+ // Single checkbox change for one image
918
+ onImageCheckboxChange(type, id) {
919
+ // ensure array exists
920
+ const current = this.selectedByType[type] || [];
921
+ const selected = new Set(current);
922
+ if (selected.has(id)) {
923
+ selected.delete(id); // uncheck
924
+ }
925
+ else {
926
+ selected.add(id); // check
927
+ }
928
+ // assign new array (better for change detection)
929
+ this.selectedByType[type] = Array.from(selected);
930
+ // total items for this type (now using deduped list)
931
+ const total = this.getListByType(type).length;
932
+ // ✅ auto-check "select all" when all items of that type are selected
933
+ this.selectAllByType[type] =
934
+ total > 0 && this.selectedByType[type].length === total;
935
+ console.log(`type=${type}, total=${total}, selected=${this.selectedByType[type].length}, selectAll=${this.selectAllByType[type]}`);
936
+ this.updateOverallSelectedIds();
937
+ this.popupvalue = type;
938
+ }
939
+ remarks;
940
+ zoomPopup;
941
+ popupType;
942
+ popupIds = [];
943
+ popupOpen(type, value) {
944
+ // store type
945
+ this.popupType = type;
946
+ this.popupIds = this.overallSelectedIds || [];
947
+ const modalRef = this.modalService.open(this.zoomPopup, {
948
+ centered: true,
949
+ size: "md",
950
+ backdrop: "static",
951
+ keyboard: false,
952
+ });
953
+ }
954
+ houseKeepingACCount;
955
+ employeeACCount;
956
+ duplicateACCount;
957
+ junkACCount;
958
+ selectedDuplicateImagesList = [];
959
+ selectedHousekeepingImagesList = [];
960
+ selectedEmployeeImagesList = [];
961
+ selectedJunkImagesList = [];
962
+ submitValue(status = "approved", category = "duplicate") {
963
+ // Step 1: Validate based on current category
964
+ let obj = {
965
+ id: this.popupIds,
966
+ status: status,
967
+ type: this.hasApproverAccess ? "approve" : "review",
968
+ };
969
+ this.service
970
+ .getUpdateTempStatusApi(obj)
971
+ .pipe(takeUntil(this.destroy$))
972
+ .subscribe({
973
+ next: (res) => {
974
+ if (res && res?.code === 200) {
975
+ this.ts.getSuccessToast("Status updated successfully");
976
+ this.resetSelections();
977
+ this.cancel();
978
+ this.allSelected = false;
979
+ this.dataStoreView(this.ticketData);
980
+ this.remarks = "";
981
+ }
982
+ else {
983
+ this.ts.getErrorToast("Error updating status");
984
+ }
985
+ },
986
+ error: (err) => {
987
+ const errorMsg = err?.error?.message ||
988
+ err?.error?.error ||
989
+ err?.error ||
990
+ err?.message ||
991
+ "Error updating status";
992
+ this.ts.getErrorToast(errorMsg);
993
+ },
994
+ complete: () => {
995
+ this.cd.detectChanges();
996
+ },
997
+ });
998
+ }
999
+ resetSelections() {
1000
+ // completely replace the object so change detection sees it
1001
+ this.selectedByType = {
1002
+ junk: [],
1003
+ employee: [],
1004
+ houseKeeping: [],
1005
+ duplicate: [],
1006
+ };
1007
+ this.selectAllByType = {
1008
+ junk: false,
1009
+ employee: false,
1010
+ houseKeeping: false,
1011
+ duplicate: false,
1012
+ };
1013
+ this.selectedDuplicatesByParent = {};
1014
+ this.overallSelectedIds = [];
1015
+ this.popupIds = [];
1016
+ console.log("RESET selections:", this.selectedByType, this.selectedDuplicatesByParent);
1017
+ }
1018
+ cancel() {
1019
+ this.modalService.dismissAll();
1020
+ // this.footfallTicketsData = [];
1021
+ }
1022
+ arrowshow = true;
1023
+ openArrow() {
1024
+ this.arrowshow = false;
1025
+ }
1026
+ closeArrow() {
1027
+ this.arrowshow = true;
1028
+ }
1029
+ getOpenTicketList(data) {
1030
+ console.log("getOpenTicketList data:", data);
1031
+ // support passing either whole store object or just ticketId
1032
+ const selectedTicketId = data?.ticketId ?? data;
1033
+ const obj = {
1034
+ clientId: [this.headerFilters?.client],
1035
+ fromDate: this.headerFilters?.date?.startDate,
1036
+ toDate: this.headerFilters?.date?.endDate,
1037
+ };
1038
+ this.service
1039
+ .getOpenTicketListApi(obj)
1040
+ .pipe(takeUntil(this.destroy$))
1041
+ .subscribe({
1042
+ next: (res) => {
1043
+ if (res && res?.code === 200) {
1044
+ this.openTicketsList = res?.data ?? [];
1045
+ // reset selection
1046
+ this.selectedStores = [];
1047
+ this.allSelected = false;
1048
+ if (!this.openTicketsList.length) {
1049
+ return;
1050
+ }
1051
+ let storeToSelect;
1052
+ // 👉 1) if data passed, try to match in NEW list by ticketId
1053
+ if (selectedTicketId) {
1054
+ storeToSelect = this.openTicketsList.find((s) => s.ticketId === selectedTicketId);
1055
+ }
1056
+ // 👉 2) if no match or no data → fallback to 0 index
1057
+ if (!storeToSelect) {
1058
+ storeToSelect = this.openTicketsList[0];
1059
+ }
1060
+ // 👉 3) set selection + call handler
1061
+ this.selectedStores = [storeToSelect];
1062
+ this.handleStoreSelected(storeToSelect);
1063
+ }
1064
+ else {
1065
+ this.openTicketsList = [];
1066
+ this.selectedStores = [];
1067
+ this.allSelected = false;
1068
+ }
1069
+ },
1070
+ error: () => {
1071
+ this.openTicketsList = [];
1072
+ this.selectedStores = [];
1073
+ this.allSelected = false;
1074
+ },
1075
+ complete: () => {
1076
+ this.cd.detectChanges();
1077
+ },
1078
+ });
1079
+ }
1080
+ isLockedByReviewer(original) {
1081
+ // When approver has access, ignore reviewer lock
1082
+ if (this.hasApproverAccess) {
1083
+ this.getCurrentRoleMapping();
1084
+ // this.isApproved1(original) || this.isRejected1(original);
1085
+ return false;
1086
+ }
1087
+ else {
1088
+ this.getCurrentReviewMapping();
1089
+ }
1090
+ // Otherwise, lock if approved or rejected by review
1091
+ return this.isApproved(original) || this.isRejected(original);
1092
+ }
1093
+ isApproved1(original) {
1094
+ const actions = original?.actions || [];
1095
+ return actions.some((a) => a.actionType === "approve" && a.action === "approved");
1096
+ }
1097
+ isRejected1(original) {
1098
+ const actions = original?.actions || [];
1099
+ return actions.some((a) => a.actionType === "approve" && a.action === "rejected");
1100
+ }
1101
+ isApproved(original) {
1102
+ const actions = original?.actions || [];
1103
+ return actions.some((a) => a.actionType === "review" && a.action === "approved");
1104
+ }
1105
+ isRejected(original) {
1106
+ const actions = original?.actions || [];
1107
+ return actions.some((a) => a.actionType === "review" && a.action === "rejected");
1108
+ }
1109
+ resetCheckbox(type, original) {
1110
+ if (!original?.actions) {
1111
+ return;
1112
+ }
1113
+ // 1) remove ONLY the review action (approved/rejected)
1114
+ original.actions = original.actions.filter((a) => a.actionType !== "review");
1115
+ // after this, example becomes:
1116
+ // [ { actionType: 'tagging', action: 'submitted' } ]
1117
+ // 2) remove from selected list if present
1118
+ const tempId = original.tempId;
1119
+ const arr = this.selectedByType[type] || [];
1120
+ const index = arr.indexOf(tempId);
1121
+ if (index > -1) {
1122
+ arr.splice(index, 1);
1123
+ }
1124
+ // 3) uncheck "select all" for that type
1125
+ this.selectAllByType[type] = false;
1126
+ }
1127
+ viewMode = "tagging";
1128
+ getAction(original, type) {
1129
+ return original?.actions?.find((a) => a.actionType === type) || null;
1130
+ }
1131
+ updateCloseButtonFromStore() {
1132
+ const mapping = this.getCurrentReviewMapping();
1133
+ console.log('mapping used for close calc:', mapping);
1134
+ // if no mapping found, keep closeBtn false
1135
+ this.closeBtn = !!mapping && this.isTicketFullyReviewed(mapping);
1136
+ console.log('closeBtn =>', this.closeBtn);
1137
+ }
1138
+ getCurrentReviewMapping() {
1139
+ if (!this.footfallTicketsData || !this.footfallTicketsData.length) {
1140
+ return null;
1141
+ }
1142
+ // Go through all tickets and mappingInfo
1143
+ for (const ticket of this.footfallTicketsData) {
1144
+ const source = ticket?._source;
1145
+ const mappingList = source?.mappingInfo || [];
1146
+ // pick the first mapping with type 'review' that has revisedDetail
1147
+ const found = mappingList.find((m) => m?.type === 'review' && m?.revisedDetail?.length);
1148
+ if (found) {
1149
+ return found;
1150
+ }
1151
+ }
1152
+ return null;
1153
+ }
1154
+ // Decide if ticket is fully reviewed based on ALL mappingInfo[type='review']
1155
+ isTicketFullyReviewed(mapping) {
1156
+ if (!mapping?.revisedDetail)
1157
+ return false;
1158
+ const details = mapping.revisedDetail;
1159
+ const nonDupTypes = ["employee", "junk", "houseKeeping"];
1160
+ const nonDupItems = details.filter(d => nonDupTypes.includes(d.revopsType));
1161
+ const nonDupReviewedCount = nonDupItems.filter(d => {
1162
+ const review = this.getAction(d, "review");
1163
+ return review && (review.action === "approved" || review.action === "rejected");
1164
+ }).length;
1165
+ const parentItems = details.filter(d => d.isParent);
1166
+ const dupChildren = parentItems.reduce((acc, p) => {
1167
+ return acc.concat(p.duplicateImage || []);
1168
+ }, []);
1169
+ const dupReviewedCount = dupChildren.filter(d => {
1170
+ const review = this.getAction(d, "review");
1171
+ return review && (review.action === "approved" || review.action === "rejected");
1172
+ }).length;
1173
+ const totalToReview = nonDupItems.length + dupChildren.length;
1174
+ const totalReviewed = nonDupReviewedCount + dupReviewedCount;
1175
+ return totalToReview > 0 && totalReviewed === totalToReview;
1176
+ }
1177
+ getInitialsFromEmail(email) {
1178
+ if (!email)
1179
+ return "";
1180
+ // take text before @
1181
+ const namePart = email.split("@")[0];
1182
+ // split by . or space (e.g. "sandeep.pal" -> ["sandeep", "pal"])
1183
+ const parts = namePart.split(/[.\s_-]+/).filter(Boolean);
1184
+ if (parts.length >= 2) {
1185
+ return (parts[0][0] + parts[1][0]).toUpperCase(); // S + P = SP
1186
+ }
1187
+ // fallback: first two chars of whole namePart
1188
+ return namePart.substring(0, 2).toUpperCase();
1189
+ }
1190
+ confirmCloseTicket() {
1191
+ let obj = {
1192
+ ticketName: "footfall-directory",
1193
+ storeId: this.footfallTicketsData[0]?._source?.storeId,
1194
+ dateString: this.footfallTicketsData[0]?._source?.dateString,
1195
+ type: this.hasApproverAccess ? "approve" : "review",
1196
+ mode: "web",
1197
+ };
1198
+ // console.log("close ticket obj:", obj);
1199
+ // return
1200
+ this.service
1201
+ .getCreateTicketListApi(obj)
1202
+ .pipe(takeUntil(this.destroy$))
1203
+ .subscribe({
1204
+ next: (res) => {
1205
+ if (res && res?.code === 200) {
1206
+ this.ts.getSuccessToast("Ticket closed successfully");
1207
+ this.confirmCloseCancel();
1208
+ this.dataStoreView(this.ticketData);
1209
+ }
1210
+ else {
1211
+ this.ts.getErrorToast("Error closing ticket");
1212
+ }
1213
+ this.cd.detectChanges();
1214
+ },
1215
+ error: (err) => {
1216
+ const errorMsg = err?.error?.message ||
1217
+ err?.error?.error ||
1218
+ err?.error ||
1219
+ err?.message ||
1220
+ "Error closing ticket";
1221
+ this.ts.getErrorToast(errorMsg);
1222
+ this.isCheckboxEnable = true;
1223
+ this.closeBtn = true;
1224
+ this.closeDisabled = false;
1225
+ }
1226
+ });
1227
+ }
1228
+ confirmCloseCancel() {
1229
+ this.modalService.dismissAll();
1230
+ }
1231
+ imagePreviewPopup;
1232
+ previewList = [];
1233
+ currentPreviewIndex = 0;
1234
+ previewTitle = 'Tagged Duplicates';
1235
+ get currentPreviewItem() {
1236
+ return this.previewList[this.currentPreviewIndex] || null;
1237
+ }
1238
+ getPreviewImageUrl() {
1239
+ const item = this.currentPreviewItem;
1240
+ return item ? this.imageUrl + item.filePath : '';
1241
+ }
1242
+ openImagePreview(list, startIndex, title) {
1243
+ this.previewList = list;
1244
+ console.log('Preview list set:', this.previewList);
1245
+ this.currentPreviewIndex = startIndex;
1246
+ this.previewTitle = title;
1247
+ this.modalService.open(this.imagePreviewPopup, {
1248
+ centered: true,
1249
+ size: 'lg',
1250
+ backdrop: 'static'
1251
+ });
1252
+ }
1253
+ prevPreview() {
1254
+ if (this.previewList.length <= 1)
1255
+ return;
1256
+ this.currentPreviewIndex =
1257
+ this.currentPreviewIndex === 0
1258
+ ? this.previewList.length - 1
1259
+ : this.currentPreviewIndex - 1;
1260
+ }
1261
+ nextPreview() {
1262
+ if (this.previewList.length <= 1)
1263
+ return;
1264
+ this.currentPreviewIndex =
1265
+ this.currentPreviewIndex === this.previewList.length - 1
1266
+ ? 0
1267
+ : this.currentPreviewIndex + 1;
1268
+ }
1269
+ rejectPopup() {
1270
+ }
1271
+ acceptPopup() {
1272
+ }
1273
+ get hasApproverAccess() {
1274
+ const perm = this.usersDetails?.permission;
1275
+ return !!(perm?.FootfallDirectory_approver_isAdd ||
1276
+ perm?.FootfallDirectory_approver_isEdit);
1277
+ }
1278
+ get hasReviewerAccess() {
1279
+ const perm = this.usersDetails?.permission;
1280
+ return !!(perm?.FootfallDirectory_reviewer_isAdd ||
1281
+ perm?.FootfallDirectory_reviewer_isEdit);
1282
+ }
1283
+ // call this in ngOnInit or after usersDetails is loaded
1284
+ setDefaultRole() {
1285
+ if (this.hasApproverAccess) {
1286
+ this.selectedRole = 'approver';
1287
+ }
1288
+ else if (this.hasReviewerAccess) {
1289
+ this.selectedRole = 'reviewer';
1290
+ }
1291
+ else {
1292
+ this.selectedRole = '';
1293
+ }
1294
+ }
1295
+ SelectedRole(role) {
1296
+ if (role === 'approver' && !this.hasApproverAccess)
1297
+ return;
1298
+ if (role === 'reviewer' && !this.hasReviewerAccess)
1299
+ return;
1300
+ this.selectedRole = role;
1301
+ // 🔹 put your role-based logic here:
1302
+ // e.g. filter mappingInfo, change API call, etc.
1303
+ // this.loadRoleData(role);
1304
+ }
1305
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TicketFootfallNewComponent, deps: [{ token: i1.NgbModal }, { token: i2.GlobalStateService }, { token: i3.TicketService }, { token: i0.ChangeDetectorRef }, { token: i4.ExcelService }, { token: i5.ToastService }, { token: i6.FormBuilder }, { token: i7.Router }], target: i0.ɵɵFactoryTarget.Component });
1306
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TicketFootfallNewComponent, selector: "lib-ticket-footfall-new", outputs: { filterChange: "filterChange" }, viewQueries: [{ propertyName: "closePopup", first: true, predicate: ["closePopup"], descendants: true }, { propertyName: "zoomPopup", first: true, predicate: ["zoomPopup"], descendants: true }, { propertyName: "imagePreviewPopup", first: true, predicate: ["imagePreviewPopup"], descendants: true }], ngImport: i0, template: "<section *ngIf=\"select ==='ticketList'\">\r\n <div class=\"row ms-3 my-3\">\r\n <!-- <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item\">\r\n <a class=\"nav-link cursor-pointer no-border me-3\">\r\n Tickets\r\n </a> \r\n </li>\r\n <li class=\"nav-item\">\r\n <a class=\"nav-link cursor-pointer no-border me-3\"> Internal audit\r\n </a>\r\n </li>\r\n </ul> -->\r\n <ul *ngIf=\"hasApproverAccess && hasReviewerAccess\"\r\n class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <!-- Approver tab -->\r\n <li class=\"nav-item\" *ngIf=\"hasApproverAccess\">\r\n <a [ngClass]=\"selectedRole === 'approver' ? 'active' : ''\"\r\n class=\"nav-link cursor-pointer no-border me-3\" (click)=\"SelectedRole('approver')\">\r\n Approver\r\n </a>\r\n </li>\r\n\r\n <!-- Reviewer tab -->\r\n <li class=\"nav-item\" *ngIf=\"hasReviewerAccess\">\r\n <a [ngClass]=\"selectedRole === 'reviewer' ? 'active' : ''\"\r\n class=\"nav-link cursor-pointer no-border me-3\" (click)=\"SelectedRole('reviewer')\">\r\n Reviewer\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-9 mb-3\">\r\n <div class=\"card\">\r\n <div class=\"card-header ellipse1 px-5\">\r\n <div class=\"my-0\">\r\n <h5 class=\"card-title my-0\">{{ getFootfallSummaryData?.totalTickets !== null ?\r\n getFootfallSummaryData?.totalTickets : '--' }}</h5>\r\n <span class=\"sub-header\">Total tickets</span>\r\n </div>\r\n <div *ngIf=\"getFootfallSummaryData?.averageAccuracyOverAll !== null &&\r\n getFootfallSummaryData?.averageAccuracyOverAll !== undefined\" class=\"card-toolbar\">\r\n <div class=\"my-0\">\r\n <h5 class=\"card-title my-0\">{{ getFootfallSummaryData?.averageAccuracyOverAll !== null ?\r\n getFootfallSummaryData?.averageAccuracyOverAll + '%' : '--' }}</h5>\r\n <span class=\"sub-header\">Average accuracy (Overall)</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-2 px-5\">\r\n <div class=\"row\">\r\n <div *ngIf=\"getFootfallSummaryData?.openTickets !== null &&\r\n getFootfallSummaryData?.openTickets !== undefined\" class=\"col my-3\">\r\n <h5 class=\"card-title\">{{ getFootfallSummaryData?.openTickets !== null ?\r\n getFootfallSummaryData?.openTickets : '--' }}</h5>\r\n <span class=\"card-title-sub-header\">Open</span>\r\n </div>\r\n <div *ngIf=\"getFootfallSummaryData?.openInfraIssues !== null &&\r\n getFootfallSummaryData?.openInfraIssues !== undefined\" class=\"col my-3\">\r\n <h5 class=\"card-title\">{{ getFootfallSummaryData?.openInfraIssues !== null ?\r\n getFootfallSummaryData?.openInfraIssues : '--' }}</h5>\r\n <span class=\"card-title-sub-header\">Open-Infra Issue</span>\r\n </div>\r\n <div *ngIf=\"getFootfallSummaryData?.inprogress !== null &&\r\n getFootfallSummaryData?.inprogress !== undefined\" class=\"col my-3\">\r\n <h5 class=\"card-title\">{{ getFootfallSummaryData?.inprogress !== null ?\r\n getFootfallSummaryData?.inprogress : '--' }}</h5>\r\n <span class=\"card-title-sub-header\">In-progress</span>\r\n </div>\r\n <div *ngIf=\"getFootfallSummaryData?.closedTickets !== null &&\r\n getFootfallSummaryData?.closedTickets !== undefined\" class=\"col my-3\">\r\n <h5 class=\"card-title\">{{ getFootfallSummaryData?.closedTickets !== null ?\r\n getFootfallSummaryData?.closedTickets : '--' }}</h5>\r\n <span class=\"card-title-sub-header\">Closed</span>\r\n </div>\r\n\r\n <div *ngIf=\"getFootfallSummaryData?.dueToday !== null &&\r\n getFootfallSummaryData?.dueToday !== undefined\" class=\"col my-3 \">\r\n <h5 style=\"color:#DC6803 !important\" class=\"card-title\">{{ getFootfallSummaryData?.dueToday\r\n !== null ?\r\n getFootfallSummaryData?.dueToday : '--' }}</h5>\r\n <span class=\"card-title-sub-header\" style=\"color:#DC6803 !important\">Due today</span>\r\n </div>\r\n\r\n <div *ngIf=\"getFootfallSummaryData?.Expired !== null &&\r\n getFootfallSummaryData?.Expired !== undefined\" class=\"col my-3 \">\r\n <h5 class=\"card-title\">{{ getFootfallSummaryData?.Expired !== null ?\r\n getFootfallSummaryData?.Expired : '--' }}</h5>\r\n <span class=\"card-title-sub-header\">Expired</span>\r\n </div>\r\n\r\n <div *ngIf=\"getFootfallSummaryData?.underTangoReview !== null &&\r\n getFootfallSummaryData?.underTangoReview !== undefined\" class=\"col my-3 \">\r\n <h5 class=\"card-title\">{{ getFootfallSummaryData?.underTangoReview !== null ?\r\n getFootfallSummaryData?.underTangoReview : '--' }}</h5>\r\n <span class=\"card-title-sub-header\">Under tango review</span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-3 mb-3\">\r\n <div class=\"card\">\r\n <div class=\"card-header ellipse1 py-1 px-5\">\r\n <div *ngIf=\"getFootfallSummaryData?.ticketAccuracyAbove !== null &&\r\n getFootfallSummaryData?.ticketAccuracyAbove !== undefined\" class=\"my-0\">\r\n <h5 class=\"card-title mt-0\">{{ getFootfallSummaryData?.ticketAccuracyAbove !== null ?\r\n getFootfallSummaryData?.ticketAccuracyAbove : '--' }}</h5>\r\n <div class=\"sub-header\">Tickets with Accuracy Above 85%</div>\r\n </div>\r\n <div *ngIf=\"getFootfallSummaryData?.avgTicket !== null &&\r\n getFootfallSummaryData?.avgTicket !== undefined\" class=\"my-0\">\r\n <h5 class=\"card-title mt-0\">{{ getFootfallSummaryData?.avgTicket !== null ?\r\n getFootfallSummaryData?.avgTicket : '--' }}</h5>\r\n <div class=\"sub-header\">Average ticket %</div>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-2 px-5\">\r\n <div class=\"row\">\r\n <div *ngIf=\"getFootfallSummaryData?.ticketAccuracyBelow !== null &&\r\n getFootfallSummaryData?.ticketAccuracyBelow !== undefined\"\r\n class=\"col-lg-12 col-xl-12 col-md-12 my-3\">\r\n <h5 class=\"card-title\">{{ getFootfallSummaryData?.ticketAccuracyBelow !== null ?\r\n getFootfallSummaryData?.ticketAccuracyBelow : '--' }}</h5>\r\n <span class=\"card-title-sub-header\">Tickets with Accuracy Below 85%</span>\r\n </div>\r\n <div *ngIf=\"getFootfallSummaryData?.avgAccuracy !== null &&\r\n getFootfallSummaryData?.avgAccuracy !== undefined\" class=\"col-lg-12 col-xl-12 col-md-12 my-3\">\r\n <h5 class=\"card-title\">{{ getFootfallSummaryData?.avgAccuracy !== null ?\r\n getFootfallSummaryData?.avgAccuracy : '--' }}</h5>\r\n <span class=\"card-title-sub-header\">Average accuracy%</span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card\">\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\">Showing tickets with Accuracy Below 85% <span\r\n class=\"ms-2 px-3 badge badge-light-primary\">{{totalItems}} Total</span></span>\r\n <span class=\"text-sub mb-2\">Based on {{headerFilters?.date?.startDate | date:'dd MMM, yyyy'}} \u2013\r\n {{headerFilters?.date?.endDate | date:'dd MMM, yyyy'}} </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 svg-icon-1 position-absolute ms-3\">\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\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" class=\"form-control ps-14 me-2\" placeholder=\"Search by store\"\r\n autocomplete=\"off\" (change)=\"searchData()\" [(ngModel)]=\"searchValue\" />\r\n\r\n <button type=\"button\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\">\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\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let col of tableColumns\"\r\n [class.cursor-pointer]=\"col.sortable && col.type !== 'store'\"\r\n (click)=\"col.sortable && onSort(col.key)\">\r\n\r\n {{ col.label }}\r\n\r\n <!-- Sorting Icon -->\r\n <svg *ngIf=\"col.sortable && col.type !== 'store'\"\r\n [ngClass]=\"sortedColumn === col.key && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8 3.333V12.667L12.667 8 8 12.667 3.333 8\"\r\n [attr.stroke]=\"sortedColumn === col.key ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <tr *ngFor=\"let row of footfallListData\">\r\n\r\n <td *ngFor=\"let col of tableColumns\">\r\n\r\n <!-- Store + ticket clickable -->\r\n <ng-container *ngIf=\"col.type === 'store'\">\r\n <div class=\"text-primary ellipsis-underline\" (click)=\"ticketView(row)\">\r\n {{ row.ticketId }}\r\n </div>\r\n <div class=\"pt-2\">{{ row.storeName }}</div>\r\n </ng-container>\r\n\r\n <!-- Date -->\r\n <ng-container class=\"pt-5\" *ngIf=\"col.type === 'date' || col.type === 'ticketRaised'\">\r\n {{ row[col.key] | date:'dd MMM, yyyy' }}\r\n </ng-container>\r\n\r\n <!-- Status -->\r\n <ng-container class=\"pt-5\" *ngIf=\"col.type === 'status'\">\r\n <span class=\"badge mx-2\" [ngClass]=\"getStatusBadgeClass(row[col.key])\">\r\n {{ row[col.key] | titlecase }}\r\n </span>\r\n </ng-container>\r\n\r\n <!-- Default Text -->\r\n <ng-container class=\"pt-5\" *ngIf=\"col.type === 'text'\">\r\n {{ row[col.key] ?? '--' }}\r\n </ng-container>\r\n\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"my-3\">\r\n <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n<!-- -->\r\n<section *ngIf=\"select ==='ticketMethod'\">\r\n <div class=\"row my-2\">\r\n <div class=\"position-relative\" [ngClass]=\"isCollapsed ? 'd-none' : 'col-md-3 h-auto'\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-header border-0 pt-3 ps-1 pe-5\">\r\n <span class=\"ms-2 cursor-pointer\" (click)=\"backToNavigation()\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"56\" height=\"44\" viewBox=\"0 0 56 44\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_887_4505)\">\r\n <rect x=\"2\" y=\"1\" width=\"52\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"51\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path d=\"M30.5 26L25.5 21L30.5 16\" stroke=\"#344054\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_887_4505\" x=\"0\" y=\"0\" width=\"56\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_887_4505\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_887_4505\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg><span class=\"card-title-foot pt-15 ms-3\">Tickets</span></span>\r\n <span class=\"cursor-pointer\" (click)=\"toggleSidebar()\"\r\n style=\"position: absolute; top: 15px; right: -25px;\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"68\" height=\"68\" viewBox=\"0 0 68 68\" fill=\"none\">\r\n <g filter=\"url(#filter0_dd_778_34282)\">\r\n <rect x=\"12\" width=\"44\" height=\"44\" rx=\"22\" fill=\"white\" />\r\n <path d=\"M33 27L28 22L33 17M40 27L35 22L40 17\" stroke=\"#101828\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_dd_778_34282\" x=\"0\" y=\"0\" width=\"68\" height=\"68\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feMorphology radius=\"2\" operator=\"erode\" in=\"SourceAlpha\"\r\n result=\"effect1_dropShadow_778_34282\" />\r\n <feOffset dy=\"4\" />\r\n <feGaussianBlur stdDeviation=\"3\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.03 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_778_34282\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feMorphology radius=\"4\" operator=\"erode\" in=\"SourceAlpha\"\r\n result=\"effect2_dropShadow_778_34282\" />\r\n <feOffset dy=\"12\" />\r\n <feGaussianBlur stdDeviation=\"8\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.08 0\" />\r\n <feBlend mode=\"normal\" in2=\"effect1_dropShadow_778_34282\"\r\n result=\"effect2_dropShadow_778_34282\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect2_dropShadow_778_34282\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n <div class=\"p-4 w-100 overflow-auto\">\r\n <div class=\"row my-1\">\r\n <div class=\"col-8\">\r\n\r\n <span class=\"svg-icon svg-icon-1 position-absolute py-2 ms-3\">\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\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input class=\"form-control form-control-sm mb-2 ps-14 pe-2 w-100\" type=\"text\"\r\n placeholder=\"Search\" [(ngModel)]=\"StoresSearchValue\" (change)=\"searchStoresData()\" />\r\n </div>\r\n <div class=\"col-4 p-0 btn\">\r\n <button class=\"btn-filter btn btn-sm btn-outline\" (click)=\"toggleFilter()\">\r\n <span class=\"me-2\"><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=\"M5 10H15M2.5 5H17.5M7.5 15H12.5\" stroke=\"#344054\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n Filter\r\n </button>\r\n\r\n <!-- Overlay (click outside to close) -->\r\n <div class=\"overlay\" *ngIf=\"isFilterOpen\" (click)=\"close()\"></div>\r\n\r\n <form [formGroup]=\"filterForm\">\r\n <!-- Filter card -->\r\n <div class=\"filter-card text-start\" *ngIf=\"isFilterOpen\"\r\n (click)=\"$event.stopPropagation()\">\r\n <h3 class=\"mb-3\">Filter Options</h3>\r\n\r\n <!-- Status -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1\">Status</label>\r\n <select class=\"form-select form-select-sm\" formControlName=\"status\">\r\n <option value=\"\">Select</option>\r\n <option>Open</option>\r\n <option>In-Progress</option>\r\n <option>Close</option>\r\n <option>Under tange review</option>\r\n <option>Tange review done</option>\r\n <option>Expired</option>\r\n </select>\r\n </div>\r\n\r\n <!-- Reviewer accuracy -->\r\n <div class=\"row mb-3\">\r\n <div class=\"col-9\">\r\n <!-- label in same row -->\r\n <label class=\"form-label mb-0 fs-8 reviewer-label\">\r\n Reviewer accuracy (%) by condition\r\n </label>\r\n\r\n <!-- condition dropdown -->\r\n <select class=\"form-select form-select-sm reviewer-select\"\r\n formControlName=\"reviewerCondition\">\r\n <option value=\"\">Select</option>\r\n <option>>= Greater than or equal to</option>\r\n <option>\r\n < Less than</option>\r\n <option>> Greater than</option>\r\n <option>\r\n <= Lesser than or equal to</option>\r\n <option>Between</option>\r\n </select>\r\n </div>\r\n <!-- single value -->\r\n <div class=\"col-3\">\r\n <!-- <ng-container *ngIf=\"filterForm.value.reviewerCondition !== 'Between'; else betweenTpl\"> -->\r\n <label class=\"small ms-1\">% </label>\r\n <input type=\"number\"\r\n class=\"form-control form-control-sm reviewer-input text-end\"\r\n formControlName=\"reviewerValue\" min=\"1\" max=\"100\">\r\n <!-- </ng-container> -->\r\n\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <!-- TODO: same block for Approver & Tango -->\r\n <!-- Reviewer accuracy -->\r\n <div class=\"row mb-3\">\r\n <div class=\"col-9\">\r\n <!-- label in same row -->\r\n <label class=\"form-label mb-0 fs-8 reviewer-label\">\r\n Approver accuracy (%) by condition\r\n </label>\r\n\r\n <!-- condition dropdown -->\r\n <select class=\"form-select form-select-sm reviewer-select\"\r\n formControlName=\"reviewerCondition\">\r\n <option value=\"\">Select</option>\r\n <option>>= Greater than or equal to</option>\r\n <option>\r\n < Less than</option>\r\n <option>> Greater than</option>\r\n <option>\r\n <= Lesser than or equal to</option>\r\n <option>Between</option>\r\n </select>\r\n </div>\r\n <!-- single value -->\r\n <div class=\"col-3\">\r\n <!-- <ng-container *ngIf=\"filterForm.value.reviewerCondition !== 'Between'; else betweenTpl\"> -->\r\n <label class=\"small ms-1\">% </label>\r\n <input type=\"number\"\r\n class=\"form-control form-control-sm reviewer-input text-end\"\r\n formControlName=\"reviewerValue\" min=\"1\" max=\"100\">\r\n <!-- </ng-container> -->\r\n\r\n\r\n </div>\r\n\r\n </div>\r\n <!-- Reviewer accuracy -->\r\n <div class=\"row mb-3\">\r\n <div class=\"col-9\">\r\n <!-- label in same row -->\r\n <label class=\"form-label mb-0 fs-8 reviewer-label\">\r\n Tango accuracy (%) by condition\r\n </label>\r\n\r\n <!-- condition dropdown -->\r\n <select class=\"form-select form-select-sm reviewer-select\"\r\n formControlName=\"reviewerCondition\">\r\n <option value=\"\">Select</option>\r\n <option>>= Greater than or equal to</option>\r\n <option>\r\n < Less than</option>\r\n <option>> Greater than</option>\r\n <option>\r\n <= Lesser than or equal to</option>\r\n <option>Between</option>\r\n </select>\r\n </div>\r\n <!-- single value -->\r\n <div class=\"col-3\">\r\n <!-- <ng-container *ngIf=\"filterForm.value.reviewerCondition !== 'Between'; else betweenTpl\"> -->\r\n <label class=\"small ms-1\">% </label>\r\n <input type=\"number\"\r\n class=\"form-control form-control-sm reviewer-input text-end\"\r\n formControlName=\"reviewerValue\" min=\"1\" max=\"100\">\r\n <!-- </ng-container> -->\r\n\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-end gap-2 mt-3\">\r\n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\"\r\n (click)=\"resetFilter()\">Reset</button>\r\n <button type=\"button\" class=\"btn btn-sm btn-primary\"\r\n (click)=\"applyFilter()\">Apply</button>\r\n </div>\r\n </div>\r\n </form>\r\n\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"openTicketsList.length\" class=\"mb-2 border-selectall\">\r\n <div class=\"d-flex justify-content-between align-items-center w-100\">\r\n\r\n <!-- LEFT: checkbox + text -->\r\n <div class=\"d-flex align-items-center\">\r\n <input type=\"checkbox\" class=\"me-2\" [checked]=\"allSelected\"\r\n (change)=\"toggleSelectAll()\" />\r\n <label class=\"m-0 font-semibold\">\r\n Select all {{ storeCount }} stores\r\n </label>\r\n </div>\r\n\r\n <!-- RIGHT: Reviewer(%) + optional sort icon -->\r\n <div class=\"d-flex align-items-center reviewer-label\">\r\n <span class=\"me-1\">Reviewer(%)</span>\r\n <!-- if you want arrow icon -->\r\n <span class=\"sort-arrow cursor-pointer\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\r\n <path\r\n d=\"M6.83464 1L6.83463 12.6667M6.83463 12.6667L12.668 6.83333M6.83463 12.6667L1.0013 6.83333\"\r\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <!-- or use an <i> from font-awesome/bootstrap icon instead -->\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n <ul class=\"list-unstyled ps-0\">\r\n <li *ngFor=\"let store of openTicketsList\" class=\"mb-2\"\r\n [ngClass]=\"{ 'store-item-active': isSelected(store), 'store-item': true }\">\r\n\r\n <div class=\"d-flex justify-content-between align-items-center w-100\">\r\n <!-- LEFT: checkbox + text -->\r\n <div class=\"d-flex align-items-start\">\r\n <input type=\"checkbox\" class=\"me-2 my-3\" [checked]=\"isSelected(store)\"\r\n (change)=\"toggleStoreSelection(store)\" />\r\n\r\n <div class=\"store-text ms-1\">\r\n <div class=\"ticket-id\" [ngClass]=\"{ 'active-text': isSelected(store) }\">\r\n {{ store?.ticketId }}\r\n </div>\r\n <div class=\"store-name mt-1\">\r\n {{ store?.storeName }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- RIGHT: pill badge -->\r\n <span\r\n class=\"ms-2 px-3 py-1 rounded-pill d-inline-flex align-items-center justify-content-center perc-badge\"\r\n [ngClass]=\"{\r\n 'perc-badge-active': isSelected(store),\r\n 'perc-badge-normal': !isSelected(store)\r\n }\">\r\n {{ store?.revicedPerc }}\r\n </span>\r\n </div>\r\n </li>\r\n\r\n </ul>\r\n\r\n\r\n\r\n <div *ngIf=\"!openTicketsList.length\" class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n\r\n <div class=\"card-body mx-0 d-flex justify-content-center align-items-center flex-column \"\r\n style=\"margin: 64px;border-radius: 8px;\r\n background: var(--Gray-50, #F9FAFB);\">\r\n <svg class=\"my-5\" xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\"\r\n viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\"\r\n stroke-width=\"13.3333\" />\r\n <g clip-path=\"url(#clip0_730_75095)\">\r\n <path\r\n d=\"M55.3327 62V58.6667C55.3327 56.8986 54.6303 55.2029 53.3801 53.9526C52.1298 52.7024 50.4341 52 48.666 52H35.3327C33.5646 52 31.8689 52.7024 30.6186 53.9526C29.3684 55.2029 28.666 56.8986 28.666 58.6667V62M65.3327 62V58.6667C65.3316 57.1895 64.8399 55.7546 63.935 54.5872C63.03 53.4198 61.7629 52.5859 60.3327 52.2167M53.666 32.2167C55.1 32.5838 56.3711 33.4178 57.2787 34.5872C58.1864 35.7565 58.6791 37.1947 58.6791 38.675C58.6791 40.1553 58.1864 41.5935 57.2787 42.7628C56.3711 43.9322 55.1 44.7662 53.666 45.1333M48.666 38.6667C48.666 42.3486 45.6812 45.3333 41.9993 45.3333C38.3174 45.3333 35.3327 42.3486 35.3327 38.6667C35.3327 34.9848 38.3174 32 41.9993 32C45.6812 32 48.666 34.9848 48.666 38.6667Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"4\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_730_75095\">\r\n <rect width=\"40\" height=\"40\" fill=\"white\" transform=\"translate(27 27)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <div class=\"nodata-title my-3\">No Stores Found</div>\r\n <div class=\"nodata-sub mb-3\">Looks like there is no stores </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div [ngClass]=\"isCollapsed ? 'col-12' : 'col-md-9'\">\r\n <div class=\"card bg-light-primary p-1 h-100\">\r\n <div class=\"card-header border-0 pt-3 px-5\">\r\n <div class=\"d-flex justify-content-start\">\r\n <div *ngIf=\"isCollapsed\" class=\"cursor-pointer\"><span (click)=\"toggleSidebar()\"\r\n style=\"position: absolute; top: 10px; left: 10px;\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\"\r\n fill=\"none\">\r\n <path d=\"M22.5 25L17.5 20L22.5 15\" stroke=\"#667085\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> </span>\r\n <span class=\"card-title-foot ms-15\">Footfall Directory</span>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <span *ngIf=\"ticketData?.status === 'Raised' || getHeaderStatus() === 'Open'\">\r\n\r\n <button *ngIf=\"!closeBtn\" class=\"btn btn-sm btn-primary mx-2\" (click)=\"startReview()\">Start\r\n Review</button>\r\n </span>\r\n <span *ngIf=\"getHeaderStatus() === 'In-Progress'\">\r\n\r\n <button *ngIf=\"closeBtn\" [disabled]=\"closeDisabled\" class=\"btn btn-sm btn-primary mx-2\"\r\n (click)=\"stopReview()\">Close\r\n Ticket</button>\r\n </span>\r\n\r\n <span *ngIf=\"ticketData.status === 'Tange review done'\"><button\r\n class=\"btn btn-sm btn-primary mx-2\" (click)=\"startAudit()\">Start\r\n Audit</button></span>\r\n <span>\r\n\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 <path\r\n d=\"M12 13C12.5523 13 13 12.5523 13 12C13 11.4477 12.5523 11 12 11C11.4477 11 11 11.4477 11 12C11 12.5523 11.4477 13 12 13Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M12 6C12.5523 6 13 5.55228 13 5C13 4.44772 12.5523 4 12 4C11.4477 4 11 4.44772 11 5C11 5.55228 11.4477 6 12 6Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M12 20C12.5523 20 13 19.5523 13 19C13 18.4477 12.5523 18 12 18C11.4477 18 11 18.4477 11 19C11 19.5523 11.4477 20 12 20Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-4 \">\r\n <div class=\"row mb-6\">\r\n\r\n <div class=\"col-2 card-title-label my-2\">Store Name</div>\r\n <div class=\"col-1 font-bold my-2\">:</div>\r\n <div class=\"col-3 card-title-value my-2\">{{ticketData?.storeName}}</div>\r\n <div class=\"col-2 card-title-label my-2\">Ticket ID</div>\r\n <div class=\"col-1 font-bold my-2\">:</div>\r\n <div class=\"col-3 card-title-value my-2\">{{ticketData?.ticketId}}</div>\r\n <div class=\"col-2 card-title-label my-2\">Status</div>\r\n <div class=\"col-1 font-bold my-2\">:</div>\r\n\r\n <div class=\"col-3 my-2\"> <span class=\"badge mx-2\"\r\n [ngClass]=\"getStatusBadgeClass(getHeaderStatus())\">\r\n {{ getHeaderStatus() | titlecase }}\r\n </span></div>\r\n\r\n <div class=\"col-2 card-title-label my-2\">Due Date</div>\r\n <div class=\"col-1 font-bold my-2\">:</div>\r\n <div class=\"col-3 card-title-value my-2\">04 Dec 2025</div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"card-layer\">\r\n <div class=\"d-flex justify-content-between align-items-start w-100\">\r\n\r\n <!-- LEFT SIDE -->\r\n <h3 class=\"card-title align-items-start flex-column mb-0\">\r\n <div class=\"card-label\">Ticket Status</div>\r\n <div class=\"text-sub mb-2\">Logs for each revision of the ticket.</div>\r\n </h3>\r\n\r\n <!-- RIGHT SIDE -->\r\n <div class=\"cursor-pointer\">\r\n <span *ngIf=\"arrowshow\" (click)=\"openArrow()\"> <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_486_91902)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path d=\"M15 16.5L20 21.5L25 16.5\" stroke=\"#344054\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_486_91902\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_486_91902\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_486_91902\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></span>\r\n <span *ngIf=\"!arrowshow\" (click)=\"closeArrow()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\"\r\n fill=\"none\">\r\n <g filter=\"url(#filter0_d_486_91893)\">\r\n <rect x=\"38\" y=\"37\" width=\"36\" height=\"36\" rx=\"8\"\r\n transform=\"rotate(180 38 37)\" fill=\"white\" />\r\n <rect x=\"37.5\" y=\"36.5\" width=\"35\" height=\"35\" rx=\"7.5\"\r\n transform=\"rotate(180 37.5 36.5)\" stroke=\"#D0D5DD\" />\r\n <path d=\"M25 21.5L20 16.5L15 21.5\" stroke=\"#344054\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_486_91893\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_486_91893\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_486_91893\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <section *ngIf=\"!arrowshow\">\r\n\r\n <ng-container *ngFor=\"let ticket of footfallTicketsData\">\r\n\r\n <div *ngIf=\"ticket?._source as source\" class=\"ticket-container\">\r\n\r\n <!-- Actual Footfall Header -->\r\n <div class=\"ticket-header\">\r\n <div class=\"footfall-value\">{{source?.footfallCount}} <span\r\n class=\"footfall-label ms-3\">Actual Footfall</span>\r\n </div>\r\n <div class=\"issue-date\">Issue date : {{source?.createdAt | date:'dd MMM yyyy'}}\r\n </div>\r\n </div>\r\n\r\n <!-- Timeline Line -->\r\n <ng-container *ngFor=\"let mapping of source?.mappingInfo\">\r\n\r\n <!-- When ticket is CLOSED, skip the tagging row -->\r\n <ng-container\r\n *ngIf=\"mapping?.status !== 'closed' || mapping?.type !== 'tagging'\">\r\n\r\n <div *ngIf=\"mapping?.type === 'tagging' || mapping?.type === 'review'\"\r\n class=\"timeline\"></div>\r\n <div *ngIf=\"mapping?.type === 'tagging' || mapping?.type === 'review'\"\r\n class=\"user-info ms-4\">\r\n\r\n <div class=\"avatar avatar-text light-primary p-3\">\r\n {{ getInitialsFromEmail(mapping?.createdByEmail ||\r\n source?.createdByEmail) }}\r\n </div>\r\n\r\n <div>\r\n <div class=\"user-name\">\r\n <span *ngIf=\"mapping?.type === 'tagging'\">\r\n Ticket created by\r\n </span>\r\n <span *ngIf=\"mapping?.type === 'review'\">\r\n Reviewed by\r\n </span>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"user-email\">\r\n {{ mapping?.createdByEmail || source?.createdByEmail }} \u2022 {{ (mapping?.createdAt || source?.createdAt) | date:'HH:mm:ss \u2013dd MMM yyyy' }}\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"timeline\"></div>\r\n\r\n <!-- Show revision card only when NOT closed & type is tagging -->\r\n <div class=\"revision-card\"\r\n *ngIf=\"mapping?.type === 'tagging' || mapping?.type === 'review'\">\r\n <div class=\"values-row\">\r\n <div class=\"value-block\">\r\n <div class=\"value\">\r\n {{ mapping?.revicedFootfall === null ? '--' :\r\n mapping?.revicedFootfall }}\r\n </div>\r\n <div class=\"label fw-bold\">Revised Footfall</div>\r\n </div>\r\n\r\n <div class=\"value-block\">\r\n <div class=\"value accuracy down\">\r\n {{ mapping?.revicedPerc || source?.revicedPerc || '--' }}\r\n <span class=\"ms-1\">\r\n <!-- arrow svg -->\r\n </span>\r\n </div>\r\n <div class=\"label fw-bold pt-1\">Accuracy</div>\r\n </div>\r\n\r\n <div class=\"timeline-new my-2\"></div>\r\n\r\n <div class=\"value-block\" *ngFor=\"let item of mapping?.count\">\r\n <div class=\"value\">\r\n {{ item?.value ?? '--' }}\r\n </div>\r\n <div class=\"label\">\r\n {{ item?.name }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n\r\n\r\n <!-- <div class=\"timeline\"></div> -->\r\n\r\n </div>\r\n </ng-container>\r\n </section>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 position-relative\">\r\n <div *ngIf=\"isCheckboxEnable\" class=\"pb-3 my-3 h-100 rounded-3 position-relative\">\r\n\r\n <input type=\"checkbox\" class=\"position-absolute absolute1 form-check-input\"\r\n [(ngModel)]=\"allSelected\" (change)=\"overallSelect($event)\" /><span class=\"ms-12\"> Select\r\n All</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isCheckboxEnable\" class=\"col-md-6 pe-8\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <select class=\"form-select\" aria-placeholder=\"show all\">\r\n <option value=\"all\">Show all</option>\r\n <option value=\"accept\">Accept</option>\r\n <option value=\"reject\">Reject</option>\r\n <option value=\"pending\">Pending</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <button [disabled]=\"!overallSelectedIds?.length\" class=\"btn btn-outline bg-white w-100\"\r\n (click)=\"popupOpen('rejected')\">\r\n\r\n {{ (selectedRole === 'approver' || selectedRole === 'reviewer') ? 'Deny' : 'Reject'\r\n }}\r\n\r\n </button>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <button [disabled]=\"!overallSelectedIds?.length\" class=\"btn btn-outline bg-white w-100\"\r\n (click)=\"popupOpen('approved')\">\r\n\r\n {{ (selectedRole === 'approver' || selectedRole === 'reviewer') ? 'Approve' :\r\n 'Accept' }}\r\n\r\n </button>\r\n </div>\r\n <!-- <div class=\"col-md-4\">\r\n <button [disabled]=\"!overallSelectedIds?.length\" class=\"btn btn-outline bg-white w-100\" (click)=\"popupOpen('rejected')\">Deny</button>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <button [disabled]=\"!overallSelectedIds?.length\" class=\"btn btn-outline bg-white w-100\"\r\n (click)=\"popupOpen('approved')\">Approve</button>\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"bg-white\">\r\n <ng-container *ngFor=\"let ticket of footfallTicketsData\">\r\n <div *ngIf=\"ticket?._source as source\" class=\"my-5\">\r\n\r\n <div *ngIf=\"hasRevopsType('duplicate')\" class=\"layers\">\r\n <!-- Header Section -->\r\n <div class=\"card-header min-h-25px pt-3\">\r\n <h3 class=\"text-lg font-semibold mb-4\">\r\n <span class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_730_76157)\">\r\n <path\r\n d=\"M3.75 11.25H3C2.60218 11.25 2.22064 11.092 1.93934 10.8107C1.65804 10.5294 1.5 10.1478 1.5 9.75V3C1.5 2.60218 1.65804 2.22064 1.93934 1.93934C2.22064 1.65804 2.60218 1.5 3 1.5H9.75C10.1478 1.5 10.5294 1.65804 10.8107 1.93934C11.092 2.22064 11.25 2.60218 11.25 3V3.75M8.25 6.75H15C15.8284 6.75 16.5 7.42157 16.5 8.25V15C16.5 15.8284 15.8284 16.5 15 16.5H8.25C7.42157 16.5 6.75 15.8284 6.75 15V8.25C6.75 7.42157 7.42157 6.75 8.25 6.75Z\"\r\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_730_76157\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n Duplicates\r\n </h3>\r\n </div>\r\n\r\n <!-- Body Section -->\r\n <ng-container *ngFor=\"let mapping of source?.mappingInfo\">\r\n <!-- Body Section -->\r\n <ng-container *ngIf=\"mapping?.type ===viewMode\">\r\n <ng-container *ngFor=\"let original of mapping?.revisedDetail\">\r\n <div *ngIf=\"original?.isParent && original?.revopsType ==='duplicate'\"\r\n class=\"card-body bg-white layers py-5 px-0 m-3\">\r\n <div class=\"my-4\">\r\n <!-- Original Image -->\r\n <div class=\"duplicate-head px-5 my-3\">Original image\r\n </div>\r\n <div class=\"row px-5\">\r\n <div class=\"col-md-4 relative\">\r\n <div\r\n class=\"pb-3 img-border border border-1 h-100 rounded-3\">\r\n\r\n <img [src]=\"imageUrl + original?.filePath\" alt=\"\"\r\n class=\"w-100 rounded border\" />\r\n <div class=\"desc-title ms-2 my-2\">Tango ID: {{\r\n original.tempId\r\n }}</div>\r\n <div class=\"desc-value ms-2\">Entry Time: {{\r\n getFormattedEntryTime(original?.entryTime) }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"separator separator-dashed mt-3 mb-5\"></div>\r\n <div class=\"row px-5\">\r\n <h5 class=\"duplicate-head my-3 fs-6\">Tagged Duplicates</h5>\r\n <div *ngIf=\"isCheckboxEnable\" class=\"my-3\">\r\n <input type=\"checkbox\"\r\n [checked]=\"areAllDuplicatesSelected(original)\"\r\n (change)=\"onToggleSelectAllDuplicates(original, $event)\" />\r\n <label class=\"ms-2\">Select All</label>\r\n </div>\r\n <div *ngFor=\"let duplicate of original?.duplicateImage; let i = index\"\r\n class=\"col-md-3 mb-3 position-relative\">\r\n <div class=\"pb-3 h-100 rounded-3 position-relative\"\r\n [ngClass]=\"{\r\n 'layer-approved': isApproved(duplicate),\r\n 'layer-rejected': isRejected(duplicate),\r\n 'img-border border border-1': !isApproved(duplicate) && !isRejected(duplicate)}\">\r\n <!-- Checkbox -->\r\n <div *ngIf=\"isCheckboxEnable\">\r\n <input type=\"checkbox\"\r\n *ngIf=\"!isLockedByReviewer(duplicate)\"\r\n style=\"right: 5px ; margin: 10px 5px 4px !important;\"\r\n [checked]=\"isDuplicateSelected(original.tempId, duplicate.tempId)\"\r\n (change)=\"onDuplicateCheckboxChange(original.tempId, duplicate.tempId, $event)\"\r\n class=\"position-absolute form-check-input duplicate-checkbox\" />\r\n <span class=\"position-absolute absolute\"\r\n *ngIf=\"isLockedByReviewer(duplicate)\"\r\n (click)=\"resetCheckbox('duplicate', duplicate)\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"19\" height=\"19\" viewBox=\"0 0 19 19\"\r\n fill=\"none\">\r\n <g filter=\"url(#filter0_d_2023_13718)\">\r\n <rect x=\"1.11133\" y=\"0.555664\"\r\n width=\"16\" height=\"16\" rx=\"2\"\r\n fill=\"white\" />\r\n <rect x=\"1.38911\" y=\"0.833442\"\r\n width=\"15.4444\" height=\"15.4444\"\r\n rx=\"1.72222\" stroke=\"#D0D5DD\"\r\n stroke-width=\"0.555556\" />\r\n <path d=\"M5.87109 8.55566H12.3526\"\r\n stroke=\"#344054\"\r\n stroke-width=\"0.927778\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2023_13718\"\r\n x=\"0.00021708\" y=\"0.00010854\"\r\n width=\"18.2222\" height=\"18.2222\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\"\r\n result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"0.555556\" />\r\n <feGaussianBlur\r\n stdDeviation=\"0.555556\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\"\r\n in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_2023_13718\" />\r\n <feBlend mode=\"normal\"\r\n in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_2023_13718\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n <!-- (change)=\"onImageCheckboxChange(duplicate.tempId, 'duplicate', 'original')\" -->\r\n <!-- Duplicate Image -->\r\n <img [src]=\"imageUrl + duplicate.filePath\" alt=\"\"\r\n (click)=\"openImagePreview(original.duplicateImage, i, 'Tagged Duplicates')\"\r\n class=\"w-100 rounded border duplicate-image\" />\r\n\r\n <!-- Duplicate Info -->\r\n <div\r\n class=\"row my-2\">\r\n <div class=\"col-9\">\r\n <div class=\"desc-title ms-2 my-2\">\r\n Tango ID: {{ duplicate.tempId }}\r\n \r\n <span\r\n *ngIf=\"getAction(duplicate, 'review')?.action === 'approved'\"\r\n class=\"ms-2\"><svg style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\r\n <rect y=\"0.5\" width=\"10\" height=\"10\"\r\n rx=\"5\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M7.1222 3.57919L4.13887 6.45836L3.3472 5.61253C3.20137 5.47503 2.9722 5.46669 2.80553 5.58336C2.64303 5.70419 2.5972 5.91669 2.6972 6.08753L3.6347 7.61253C3.72637 7.75419 3.8847 7.84169 4.06387 7.84169C4.2347 7.84169 4.3972 7.75419 4.48887 7.61253C4.63887 7.41669 7.50137 4.00419 7.50137 4.00419C7.87637 3.62086 7.4222 3.28336 7.1222 3.57503V3.57919Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"getAction(duplicate, 'review')?.action === 'rejected'\"\r\n class=\"ms-2\"><svg style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1428_59484)\">\r\n <path\r\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n fill=\"#FEE4E2\" />\r\n <path\r\n d=\"M8.09961 5L5.09961 8M5.09961 5L8.09961 8M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n stroke=\"#D92D20\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1428_59484\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(0.599609 0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n \r\n </div>\r\n \r\n <div class=\"desc-value ms-2\">Entry Time: {{\r\n getFormattedEntryTime(duplicate.entryTime) }}\r\n </div>\r\n </div>\r\n <div class=\"col-3\">\r\n <span\r\n *ngIf=\"getAction(duplicate, 'approve')?.action === 'approved'\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"37\"\r\n height=\"37\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect width=\"24\" height=\"24\" rx=\"12\"\r\n fill=\"#D1FADF\" />\r\n <g clip-path=\"url(#clip0_486_94051)\">\r\n <path\r\n d=\"M9.5 17H8C7.73478 17 7.48043 16.8946 7.29289 16.7071C7.10536 16.5196 7 16.2652 7 16V12.5C7 12.2348 7.10536 11.9804 7.29289 11.7929C7.48043 11.6054 7.73478 11.5 8 11.5H9.5M13 10.5V8.5C13 8.10218 12.842 7.72064 12.5607 7.43934C12.2794 7.15804 11.8978 7 11.5 7L9.5 11.5V17H15.14C15.3812 17.0027 15.6152 16.9182 15.799 16.762C15.9827 16.6058 16.1038 16.3885 16.14 16.15L16.83 11.65C16.8518 11.5067 16.8421 11.3603 16.8017 11.2211C16.7613 11.0819 16.6911 10.9531 16.5959 10.8438C16.5008 10.7344 16.383 10.647 16.2508 10.5876C16.1185 10.5283 15.975 10.4984 15.83 10.5H13Z\"\r\n stroke=\"#039855\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94051\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n \r\n </span>\r\n <span\r\n *ngIf=\"getAction(duplicate, 'approve')?.action === 'rejected'\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"37\"\r\n height=\"37\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect width=\"24\" height=\"24\" rx=\"12\"\r\n fill=\"#FEE4E2\" />\r\n <g clip-path=\"url(#clip0_486_94090)\">\r\n <path\r\n d=\"M14.5015 7.00006H15.8365C16.1195 6.99505 16.3944 7.09413 16.6092 7.27847C16.8239 7.46281 16.9635 7.71959 17.0015 8.00006V11.5001C16.9635 11.7805 16.8239 12.0373 16.6092 12.2216C16.3944 12.406 16.1195 12.5051 15.8365 12.5001H14.5015M11.0015 13.5001V15.5001C11.0015 15.8979 11.1595 16.2794 11.4408 16.5607C11.7221 16.842 12.1037 17.0001 12.5015 17.0001L14.5015 12.5001V7.00006H8.86148C8.62032 6.99733 8.38629 7.08186 8.20253 7.23806C8.01876 7.39426 7.89764 7.61161 7.86148 7.85006L7.17148 12.3501C7.14973 12.4934 7.15939 12.6397 7.19981 12.7789C7.24023 12.9181 7.31043 13.0469 7.40555 13.1563C7.50067 13.2657 7.61844 13.3531 7.75069 13.4124C7.88295 13.4718 8.02653 13.5017 8.17148 13.5001H11.0015Z\"\r\n stroke=\"#D92D20\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94090\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg> </span>\r\n </div>\r\n </div>\r\n <!-- Duplicate Reason -->\r\n <!-- <div class=\"duplicate-reason ms-2 mt-2\">\r\n <small class=\"text-muted\">{{ duplicate.reason }}</small>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- Status Icons -->\r\n\r\n <div class=\"card-footer py-5\">\r\n <div class=\"comments-accordion\">\r\n <!-- Accordion Header -->\r\n <div class=\"accordion-header\" (click)=\"toggleCommentsAccordion()\">\r\n <div class=\"d-flex justify-content-start align-items-center w-100\">\r\n <span class=\"comments-count\">{{ comments?.length }} Comments</span>\r\n <div class=\"accordion-arrow ms-3\">\r\n <svg [class.rotated]=\"commentsAccordionOpen\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M4 6L8 10L12 6\" stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Accordion Body -->\r\n <div class=\"accordion-body\" *ngIf=\"commentsAccordionOpen\">\r\n <div *ngFor=\"let c of comments\" class=\"comment-thread d-flex mb-4\">\r\n <!-- avatar -->\r\n <img class=\"comment-avatar me-3\" [src]=\"c.avatar\" alt=\"avatar\" />\r\n\r\n <!-- content -->\r\n <div>\r\n <div class=\"fw-semibold\">{{ c.email }}</div>\r\n <div class=\"text-muted small\">\r\n {{ c.time | date:'hh:mm:ss a - dd MMM yyyy' }}\r\n </div>\r\n\r\n <!-- optional main line -->\r\n <p class=\"mb-2 mt-2\" *ngIf=\"c.mainText\">\r\n {{ c.mainText }}\r\n </p>\r\n\r\n <!-- Marked as \u201C\u2026\u201D line -->\r\n <p class=\"mb-1\" *ngIf=\"c.statusLabel\">\r\n Marked as\r\n <span [ngClass]=\"'text-' + c.statusType\">\r\n \u201C{{ c.statusLabel }}\u201D\r\n </span>\r\n </p>\r\n\r\n <!-- note -->\r\n <p class=\"mb-2\" *ngIf=\"c.note\">\r\n {{ c.note }}\r\n </p>\r\n\r\n <!-- image cards -->\r\n <div class=\"d-flex gap-2 flex-wrap\">\r\n <div *ngFor=\"let img of c.images\" class=\"tango-card\">\r\n <div class=\"tango-image\"\r\n [style.backgroundImage]=\"'url(' + img.url + ')'\"></div>\r\n\r\n <div class=\"tango-meta\">\r\n <div class=\"small\">Tango ID: {{ img.tangoId }}\r\n <span *ngIf=\"img.status === 'approve'\"\r\n class=\"status-dot status-approve\"></span>\r\n <span *ngIf=\"img.status === 'reject'\"\r\n class=\"status-dot status-reject\"></span>\r\n </div>\r\n <div class=\"small text-muted\">Entry time: {{\r\n img.entryTime }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- +N more card -->\r\n <div *ngIf=\"c.moreCount > 0\"\r\n class=\"tango-card more-card d-flex align-items-center justify-content-center\">\r\n +{{ c.moreCount }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- \r\n <div *ngIf=\"source?.duplicateImages?.length\" class=\"my-7 d-flex justify-content-end\"\r\n role=\"group\">\r\n <button [disabled]=\"!duplicateACCount\" class=\"btn btn-outline me-1\"\r\n (click)=\"popupOpen('rejected','duplicate')\">Reject</button>\r\n <button [disabled]=\"!duplicateACCount\" class=\"btn btn-primary ms-1\"\r\n (click)=\"popupOpen('approved','duplicate')\">Approve</button>\r\n </div> -->\r\n <!-- <div *ngIf=\"source?.duplicateImages?.length\" class=\"separator separator-dashed mt-3 mb-5\"></div> -->\r\n\r\n <div class=\"layers my-2\" *ngIf=\"hasRevopsType('employee')\">\r\n <div class=\"card-header min-h-25px pt-3\">\r\n <div class=\"duplicate-head text-lg my-3\">\r\n <!-- icon here -->\r\n Employee/Staff\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"isCheckboxEnable\" class=\"ms-3 my-3\">\r\n <input type=\"checkbox\" [(ngModel)]=\"selectAllByType.employee\"\r\n (change)=\"onSelectAll('employee', $event)\">\r\n <label>Select All</label>\r\n </div>\r\n\r\n <!-- loop over tickets -->\r\n\r\n\r\n <ng-container *ngFor=\"let mapping of source?.mappingInfo\">\r\n <div *ngIf=\"mapping?.type === viewMode\" class=\"card-body bg-white layers p-5 m-3\">\r\n <div class=\"row\">\r\n <ng-container *ngFor=\"let original of mapping?.revisedDetail\">\r\n\r\n <div *ngIf=\"original?.revopsType === 'employee'\"\r\n class=\"col-md-3 mb-3 position-relative\">\r\n\r\n <div class=\"pb-3 h-100 rounded-3 position-relative\" [ngClass]=\"{\r\n 'layer-approved': isApproved(original),\r\n 'layer-rejected': isRejected(original),\r\n 'img-border border border-1': !isApproved(original) && !isRejected(original)}\">\r\n <div *ngIf=\"isCheckboxEnable\">\r\n\r\n <input *ngIf=\"!isLockedByReviewer(original)\" type=\"checkbox\"\r\n class=\"position-absolute absolute form-check-input\"\r\n [checked]=\"selectedByType.employee.includes(original?.tempId)\"\r\n (change)=\"onImageCheckboxChange('employee', original.tempId)\" />\r\n <span class=\"position-absolute absolute\"\r\n *ngIf=\"isLockedByReviewer(original)\"\r\n (click)=\"resetCheckbox('employee', original)\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\"\r\n height=\"19\" viewBox=\"0 0 19 19\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_2023_13718)\">\r\n <rect x=\"1.11133\" y=\"0.555664\" width=\"16\"\r\n height=\"16\" rx=\"2\" fill=\"white\" />\r\n <rect x=\"1.38911\" y=\"0.833442\" width=\"15.4444\"\r\n height=\"15.4444\" rx=\"1.72222\"\r\n stroke=\"#D0D5DD\" stroke-width=\"0.555556\" />\r\n <path d=\"M5.87109 8.55566H12.3526\"\r\n stroke=\"#344054\" stroke-width=\"0.927778\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2023_13718\" x=\"0.00021708\"\r\n y=\"0.00010854\" width=\"18.2222\"\r\n height=\"18.2222\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\"\r\n result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"0.555556\" />\r\n <feGaussianBlur stdDeviation=\"0.555556\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\"\r\n in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_2023_13718\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_2023_13718\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n\r\n </div>\r\n\r\n <img [src]=\"imageUrl + original?.filePath\" alt=\"\"\r\n class=\"w-100 rounded border\" />\r\n <div\r\n class=\"row my-2\">\r\n <div class=\"col-10\">\r\n <div class=\"desc-title ms-2 my-2\">\r\n Tango ID: {{ original.tempId }}\r\n <span\r\n *ngIf=\"getAction(original, 'review')?.action === 'approved'\"\r\n class=\"ms-2\"><svg style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\r\n <rect y=\"0.5\" width=\"10\" height=\"10\" rx=\"5\"\r\n fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M7.1222 3.57919L4.13887 6.45836L3.3472 5.61253C3.20137 5.47503 2.9722 5.46669 2.80553 5.58336C2.64303 5.70419 2.5972 5.91669 2.6972 6.08753L3.6347 7.61253C3.72637 7.75419 3.8847 7.84169 4.06387 7.84169C4.2347 7.84169 4.3972 7.75419 4.48887 7.61253C4.63887 7.41669 7.50137 4.00419 7.50137 4.00419C7.87637 3.62086 7.4222 3.28336 7.1222 3.57503V3.57919Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"getAction(original, 'review')?.action === 'rejected'\"\r\n class=\"ms-2\"><svg style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1428_59484)\">\r\n <path\r\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n fill=\"#FEE4E2\" />\r\n <path\r\n d=\"M8.09961 5L5.09961 8M5.09961 5L8.09961 8M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n stroke=\"#D92D20\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1428_59484\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(0.599609 0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </div>\r\n <div class=\"desc-value ms-2\">\r\n Entry Time: {{\r\n getFormattedEntryTime(original?.entryTime) }}\r\n </div>\r\n </div>\r\n <div class=\"col-2 ms-3\">\r\n <span\r\n *ngIf=\"getAction(original, 'approve')?.action === 'approved'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\r\n height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect width=\"24\" height=\"24\" rx=\"12\"\r\n fill=\"#D1FADF\" />\r\n <g clip-path=\"url(#clip0_486_94051)\">\r\n <path\r\n d=\"M9.5 17H8C7.73478 17 7.48043 16.8946 7.29289 16.7071C7.10536 16.5196 7 16.2652 7 16V12.5C7 12.2348 7.10536 11.9804 7.29289 11.7929C7.48043 11.6054 7.73478 11.5 8 11.5H9.5M13 10.5V8.5C13 8.10218 12.842 7.72064 12.5607 7.43934C12.2794 7.15804 11.8978 7 11.5 7L9.5 11.5V17H15.14C15.3812 17.0027 15.6152 16.9182 15.799 16.762C15.9827 16.6058 16.1038 16.3885 16.14 16.15L16.83 11.65C16.8518 11.5067 16.8421 11.3603 16.8017 11.2211C16.7613 11.0819 16.6911 10.9531 16.5959 10.8438C16.5008 10.7344 16.383 10.647 16.2508 10.5876C16.1185 10.5283 15.975 10.4984 15.83 10.5H13Z\"\r\n stroke=\"#039855\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94051\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"getAction(original, 'approve')?.action === 'rejected'\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\r\n height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect width=\"24\" height=\"24\" rx=\"12\"\r\n fill=\"#FEE4E2\" />\r\n <g clip-path=\"url(#clip0_486_94090)\">\r\n <path\r\n d=\"M14.5015 7.00006H15.8365C16.1195 6.99505 16.3944 7.09413 16.6092 7.27847C16.8239 7.46281 16.9635 7.71959 17.0015 8.00006V11.5001C16.9635 11.7805 16.8239 12.0373 16.6092 12.2216C16.3944 12.406 16.1195 12.5051 15.8365 12.5001H14.5015M11.0015 13.5001V15.5001C11.0015 15.8979 11.1595 16.2794 11.4408 16.5607C11.7221 16.842 12.1037 17.0001 12.5015 17.0001L14.5015 12.5001V7.00006H8.86148C8.62032 6.99733 8.38629 7.08186 8.20253 7.23806C8.01876 7.39426 7.89764 7.61161 7.86148 7.85006L7.17148 12.3501C7.14973 12.4934 7.15939 12.6397 7.19981 12.7789C7.24023 12.9181 7.31043 13.0469 7.40555 13.1563C7.50067 13.2657 7.61844 13.3531 7.75069 13.4124C7.88295 13.4718 8.02653 13.5017 8.17148 13.5001H11.0015Z\"\r\n stroke=\"#D92D20\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94090\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <div class=\"card-footer py-5\">\r\n <div class=\"comments-accordion\">\r\n <!-- Accordion Header -->\r\n <div class=\"accordion-header\" (click)=\"toggleCommentsAccordion()\">\r\n <div class=\"d-flex justify-content-start align-items-center w-100\">\r\n <div class=\"comments-title\">\r\n <span class=\"comments-count\">{{ comments?.length }} Comments</span>\r\n\r\n </div>\r\n <div class=\"accordion-arrow ms-3\">\r\n <svg [class.rotated]=\"commentsAccordionOpen\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M4 6L8 10L12 6\" stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Accordion Content -->\r\n <div class=\"accordion-body\" *ngIf=\"commentsAccordionOpen\">\r\n <div *ngFor=\"let c of comments\" class=\"comment-thread d-flex mb-4\">\r\n <!-- avatar -->\r\n <img class=\"comment-avatar me-3\" [src]=\"c.avatar\" alt=\"avatar\" />\r\n\r\n <!-- content -->\r\n <div>\r\n <div class=\"fw-semibold\">{{ c.email }}</div>\r\n <div class=\"text-muted small\">\r\n {{ c.time | date:'hh:mm:ss a - dd MMM yyyy' }}\r\n </div>\r\n\r\n <!-- optional main line -->\r\n <p class=\"mb-2 mt-2\" *ngIf=\"c.mainText\">\r\n {{ c.mainText }}\r\n </p>\r\n\r\n <!-- Marked as \u201C\u2026\u201D line -->\r\n <p class=\"mb-1\" *ngIf=\"c.statusLabel\">\r\n Marked as\r\n <span [ngClass]=\"'text-' + c.statusType\">\r\n \u201C{{ c.statusLabel }}\u201D\r\n </span>\r\n </p>\r\n\r\n <!-- note -->\r\n <p class=\"mb-2\" *ngIf=\"c.note\">\r\n {{ c.note }}\r\n </p>\r\n\r\n <!-- image cards -->\r\n <div class=\"d-flex gap-2 flex-wrap\">\r\n <div *ngFor=\"let img of c.images\" class=\"tango-card\">\r\n <div class=\"tango-image\"\r\n [style.backgroundImage]=\"'url(' + img.url + ')'\"></div>\r\n\r\n <div class=\"tango-meta\">\r\n <div class=\"small\">Tango ID: {{ img.tangoId }}\r\n <span *ngIf=\"img.status === 'approve'\"\r\n class=\"status-dot status-approve\"></span>\r\n <span *ngIf=\"img.status === 'reject'\"\r\n class=\"status-dot status-reject\"></span>\r\n </div>\r\n <div class=\"small text-muted\">Entry time: {{\r\n img.entryTime }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- +N more card -->\r\n <div *ngIf=\"c.moreCount > 0\"\r\n class=\"tango-card more-card d-flex align-items-center justify-content-center\">\r\n +{{ c.moreCount }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"layers my-2\" *ngIf=\"hasRevopsType('houseKeeping')\">\r\n <div class=\"card-header min-h-25px pt-3\">\r\n <div class=\"duplicate-head text-lg my-3\"><span class=\"me-2\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M7.51995 0.613065C8.33739 -0.204355 9.66267 -0.204355 10.4801 0.613065L17.387 7.51995C18.2043 8.33739 18.2043 9.66267 17.387 10.4801L10.4801 17.387C9.66267 18.2043 8.33739 18.2043 7.51995 17.387L5.54626 15.4133L3.73708 17.2224C2.91966 18.0399 1.59436 18.0399 0.776944 17.2224C-0.0404767 16.4051 -0.0404767 15.0797 0.776944 14.2624L2.58612 12.4531L0.613065 10.4801C-0.204355 9.66267 -0.204355 8.33739 0.613065 7.51995L7.51995 0.613065ZM9.49336 1.59978C9.22088 1.32731 8.77909 1.32731 8.50661 1.59978L3.57286 6.53357L11.4665 14.4272L16.4002 9.49336C16.6727 9.22088 16.6727 8.77909 16.4002 8.5067L12.9465 5.05286L11.7952 6.20403C11.5228 6.4765 11.0811 6.4765 10.8086 6.20403C10.5361 5.93155 10.5361 5.48978 10.8086 5.21731L11.9597 4.06614L10.9732 3.07964L8.17757 5.87533C7.90509 6.1478 7.46329 6.1478 7.19081 5.87533C6.91833 5.60286 6.91833 5.16109 7.19081 4.88862L9.9865 2.09293L9.49336 1.59978ZM10.4797 15.4139L2.58615 7.52028L1.59978 8.5067C1.3273 8.77909 1.3273 9.22088 1.59978 9.49336L8.50661 16.4002C8.77909 16.6727 9.22088 16.6727 9.49336 16.4002L10.4797 15.4139ZM3.57275 13.4399L1.76366 15.249C1.49119 15.5215 1.49119 15.9633 1.76366 16.2358C2.03613 16.5082 2.4779 16.5082 2.75037 16.2358L4.55946 14.4266L3.57275 13.4399Z\"\r\n fill=\"#475467\" />\r\n </svg></span> House Keeping\r\n\r\n </div>\r\n </div>\r\n <div *ngIf=\"isCheckboxEnable\" class=\"ms-3 my-3\">\r\n <input type=\"checkbox\" [(ngModel)]=\"selectAllByType.houseKeeping\"\r\n (change)=\"onSelectAll('houseKeeping',$event)\">\r\n <label>Select All</label>\r\n </div>\r\n <ng-container *ngFor=\"let mapping of source?.mappingInfo\">\r\n <!-- Body Section -->\r\n <div *ngIf=\"mapping?.type ===viewMode\" class=\"card-body bg-white layers p-5 m-3\">\r\n\r\n <div class=\"row\">\r\n <ng-container *ngFor=\"let original of mapping?.revisedDetail\">\r\n <div *ngIf=\"original?.revopsType ==='houseKeeping'\"\r\n class=\"col-md-3 mb-3 position-relative\">\r\n <div class=\"pb-3 h-100 rounded-3 position-relative\" [ngClass]=\"{\r\n 'layer-approved': isApproved(original),\r\n 'layer-rejected': isRejected(original),\r\n 'img-border border border-1': !isApproved(original) && !isRejected(original)}\">\r\n\r\n\r\n <!-- Top-right Checkbox -->\r\n <div *ngIf=\"isCheckboxEnable\">\r\n\r\n <input *ngIf=\"!isLockedByReviewer(original)\" type=\"checkbox\"\r\n class=\"position-absolute absolute form-check-input\"\r\n [checked]=\"selectedByType.houseKeeping.includes(original?.tempId)\"\r\n (change)=\"onImageCheckboxChange('houseKeeping', original.tempId)\" />\r\n <span class=\"position-absolute absolute\"\r\n *ngIf=\"isLockedByReviewer(original)\"\r\n (click)=\"resetCheckbox('houseKeeping', original)\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\"\r\n height=\"19\" viewBox=\"0 0 19 19\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_2023_13718)\">\r\n <rect x=\"1.11133\" y=\"0.555664\" width=\"16\"\r\n height=\"16\" rx=\"2\" fill=\"white\" />\r\n <rect x=\"1.38911\" y=\"0.833442\" width=\"15.4444\"\r\n height=\"15.4444\" rx=\"1.72222\"\r\n stroke=\"#D0D5DD\" stroke-width=\"0.555556\" />\r\n <path d=\"M5.87109 8.55566H12.3526\"\r\n stroke=\"#344054\" stroke-width=\"0.927778\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2023_13718\" x=\"0.00021708\"\r\n y=\"0.00010854\" width=\"18.2222\"\r\n height=\"18.2222\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\"\r\n result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"0.555556\" />\r\n <feGaussianBlur stdDeviation=\"0.555556\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\"\r\n in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_2023_13718\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_2023_13718\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n\r\n\r\n <img [src]=\"imageUrl + original?.filePath\" alt=\"\"\r\n class=\"w-100 rounded border\" />\r\n <div\r\n class=\"row my-2\">\r\n <div class=\"col-10\">\r\n <div class=\"desc-title ms-2 my-2\">Tango ID: {{\r\n original.tempId\r\n }}\r\n <span\r\n *ngIf=\"getAction(original, 'review')?.action === 'approved'\"\r\n class=\"ms-2\"><svg style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\r\n <rect y=\"0.5\" width=\"10\" height=\"10\" rx=\"5\"\r\n fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M7.1222 3.57919L4.13887 6.45836L3.3472 5.61253C3.20137 5.47503 2.9722 5.46669 2.80553 5.58336C2.64303 5.70419 2.5972 5.91669 2.6972 6.08753L3.6347 7.61253C3.72637 7.75419 3.8847 7.84169 4.06387 7.84169C4.2347 7.84169 4.3972 7.75419 4.48887 7.61253C4.63887 7.41669 7.50137 4.00419 7.50137 4.00419C7.87637 3.62086 7.4222 3.28336 7.1222 3.57503V3.57919Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"getAction(original, 'review')?.action === 'rejected'\"\r\n class=\"ms-2\"><svg style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1428_59484)\">\r\n <path\r\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n fill=\"#FEE4E2\" />\r\n <path\r\n d=\"M8.09961 5L5.09961 8M5.09961 5L8.09961 8M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n stroke=\"#D92D20\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1428_59484\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(0.599609 0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </div>\r\n <div class=\"desc-value ms-2\">Entry Time: {{\r\n getFormattedEntryTime(original?.entryTime) }}</div>\r\n</div>\r\n <div class=\"col-2 ms-3\">\r\n <span\r\n *ngIf=\"getAction(original, 'approve')?.action === 'approved'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\r\n height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect width=\"24\" height=\"24\" rx=\"12\"\r\n fill=\"#D1FADF\" />\r\n <g clip-path=\"url(#clip0_486_94051)\">\r\n <path\r\n d=\"M9.5 17H8C7.73478 17 7.48043 16.8946 7.29289 16.7071C7.10536 16.5196 7 16.2652 7 16V12.5C7 12.2348 7.10536 11.9804 7.29289 11.7929C7.48043 11.6054 7.73478 11.5 8 11.5H9.5M13 10.5V8.5C13 8.10218 12.842 7.72064 12.5607 7.43934C12.2794 7.15804 11.8978 7 11.5 7L9.5 11.5V17H15.14C15.3812 17.0027 15.6152 16.9182 15.799 16.762C15.9827 16.6058 16.1038 16.3885 16.14 16.15L16.83 11.65C16.8518 11.5067 16.8421 11.3603 16.8017 11.2211C16.7613 11.0819 16.6911 10.9531 16.5959 10.8438C16.5008 10.7344 16.383 10.647 16.2508 10.5876C16.1185 10.5283 15.975 10.4984 15.83 10.5H13Z\"\r\n stroke=\"#039855\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94051\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"getAction(original, 'approve')?.action === 'rejected'\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\r\n height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect width=\"24\" height=\"24\" rx=\"12\"\r\n fill=\"#FEE4E2\" />\r\n <g clip-path=\"url(#clip0_486_94090)\">\r\n <path\r\n d=\"M14.5015 7.00006H15.8365C16.1195 6.99505 16.3944 7.09413 16.6092 7.27847C16.8239 7.46281 16.9635 7.71959 17.0015 8.00006V11.5001C16.9635 11.7805 16.8239 12.0373 16.6092 12.2216C16.3944 12.406 16.1195 12.5051 15.8365 12.5001H14.5015M11.0015 13.5001V15.5001C11.0015 15.8979 11.1595 16.2794 11.4408 16.5607C11.7221 16.842 12.1037 17.0001 12.5015 17.0001L14.5015 12.5001V7.00006H8.86148C8.62032 6.99733 8.38629 7.08186 8.20253 7.23806C8.01876 7.39426 7.89764 7.61161 7.86148 7.85006L7.17148 12.3501C7.14973 12.4934 7.15939 12.6397 7.19981 12.7789C7.24023 12.9181 7.31043 13.0469 7.40555 13.1563C7.50067 13.2657 7.61844 13.3531 7.75069 13.4124C7.88295 13.4718 8.02653 13.5017 8.17148 13.5001H11.0015Z\"\r\n stroke=\"#D92D20\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94090\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"card-footer py-5\">\r\n <div class=\"comments-accordion\">\r\n <!-- Accordion Header -->\r\n <div class=\"accordion-header\" (click)=\"toggleCommentsAccordion()\">\r\n <div class=\"d-flex justify-content-start align-items-center w-100\">\r\n <div class=\"comments-title\">\r\n <span class=\"comments-count\">{{ comments?.length }} Comments</span>\r\n\r\n </div>\r\n <div class=\"accordion-arrow ms-3\">\r\n <svg [class.rotated]=\"commentsAccordionOpen\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M4 6L8 10L12 6\" stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Accordion Content -->\r\n <div class=\"accordion-body\" *ngIf=\"commentsAccordionOpen\">\r\n <div *ngFor=\"let c of comments\" class=\"comment-thread d-flex mb-4\">\r\n <!-- avatar -->\r\n <img class=\"comment-avatar me-3\" [src]=\"c.avatar\" alt=\"avatar\" />\r\n\r\n <!-- content -->\r\n <div>\r\n <div class=\"fw-semibold\">{{ c.email }}</div>\r\n <div class=\"text-muted small\">\r\n {{ c.time | date:'hh:mm:ss a - dd MMM yyyy' }}\r\n </div>\r\n\r\n <!-- optional main line -->\r\n <p class=\"mb-2 mt-2\" *ngIf=\"c.mainText\">\r\n {{ c.mainText }}\r\n </p>\r\n\r\n <!-- Marked as \u201C\u2026\u201D line -->\r\n <p class=\"mb-1\" *ngIf=\"c.statusLabel\">\r\n Marked as\r\n <span [ngClass]=\"'text-' + c.statusType\">\r\n \u201C{{ c.statusLabel }}\u201D\r\n </span>\r\n </p>\r\n\r\n <!-- note -->\r\n <p class=\"mb-2\" *ngIf=\"c.note\">\r\n {{ c.note }}\r\n </p>\r\n\r\n <!-- image cards -->\r\n <div class=\"d-flex gap-2 flex-wrap\">\r\n <div *ngFor=\"let img of c.images\" class=\"tango-card\">\r\n <div class=\"tango-image\"\r\n [style.backgroundImage]=\"'url(' + img.url + ')'\"></div>\r\n\r\n <div class=\"tango-meta\">\r\n <div class=\"small\">Tango ID: {{ img.tangoId }}\r\n <span *ngIf=\"img.status === 'approve'\"\r\n class=\"status-dot status-approve\"></span>\r\n <span *ngIf=\"img.status === 'reject'\"\r\n class=\"status-dot status-reject\"></span>\r\n </div>\r\n <div class=\"small text-muted\">Entry time: {{\r\n img.entryTime }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- +N more card -->\r\n <div *ngIf=\"c.moreCount > 0\"\r\n class=\"tango-card more-card d-flex align-items-center justify-content-center\">\r\n +{{ c.moreCount }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"layers my-2\" *ngIf=\"hasRevopsType('junk')\">\r\n <div class=\"card-header min-h-25px pt-3\">\r\n <div class=\"duplicate-head text-lg my-3\"><span class=\"me-2\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M7.51995 0.613065C8.33739 -0.204355 9.66267 -0.204355 10.4801 0.613065L17.387 7.51995C18.2043 8.33739 18.2043 9.66267 17.387 10.4801L10.4801 17.387C9.66267 18.2043 8.33739 18.2043 7.51995 17.387L5.54626 15.4133L3.73708 17.2224C2.91966 18.0399 1.59436 18.0399 0.776944 17.2224C-0.0404767 16.4051 -0.0404767 15.0797 0.776944 14.2624L2.58612 12.4531L0.613065 10.4801C-0.204355 9.66267 -0.204355 8.33739 0.613065 7.51995L7.51995 0.613065ZM9.49336 1.59978C9.22088 1.32731 8.77909 1.32731 8.50661 1.59978L3.57286 6.53357L11.4665 14.4272L16.4002 9.49336C16.6727 9.22088 16.6727 8.77909 16.4002 8.5067L12.9465 5.05286L11.7952 6.20403C11.5228 6.4765 11.0811 6.4765 10.8086 6.20403C10.5361 5.93155 10.5361 5.48978 10.8086 5.21731L11.9597 4.06614L10.9732 3.07964L8.17757 5.87533C7.90509 6.1478 7.46329 6.1478 7.19081 5.87533C6.91833 5.60286 6.91833 5.16109 7.19081 4.88862L9.9865 2.09293L9.49336 1.59978ZM10.4797 15.4139L2.58615 7.52028L1.59978 8.5067C1.3273 8.77909 1.3273 9.22088 1.59978 9.49336L8.50661 16.4002C8.77909 16.6727 9.22088 16.6727 9.49336 16.4002L10.4797 15.4139ZM3.57275 13.4399L1.76366 15.249C1.49119 15.5215 1.49119 15.9633 1.76366 16.2358C2.03613 16.5082 2.4779 16.5082 2.75037 16.2358L4.55946 14.4266L3.57275 13.4399Z\"\r\n fill=\"#475467\" />\r\n </svg></span> Junk\r\n\r\n </div>\r\n </div>\r\n <div *ngIf=\"isCheckboxEnable\" class=\"ms-3 my-3\">\r\n <input type=\"checkbox\" [(ngModel)]=\"selectAllByType.junk\"\r\n (change)=\"onSelectAll('junk',$event)\">\r\n <label>Select All</label>\r\n </div>\r\n <ng-container *ngFor=\"let mapping of source?.mappingInfo\">\r\n\r\n <!-- One card for all junk images in this mapping -->\r\n <div *ngIf=\"mapping?.type ===viewMode\" class=\"card-body bg-white layers p-5 m-3\">\r\n\r\n <div class=\"row\">\r\n <!-- Loop through all items in revisedDetail -->\r\n <ng-container *ngFor=\"let original of mapping?.revisedDetail\">\r\n\r\n <!-- Show only junk items as columns -->\r\n <div *ngIf=\"original?.revopsType === 'junk'\"\r\n class=\"col-md-3 mb-3 position-relative\">\r\n\r\n <div class=\"pb-3 h-100 rounded-3 position-relative\" [ngClass]=\"{\r\n 'layer-approved': isApproved(original),\r\n 'layer-rejected': isRejected(original),\r\n 'img-border border border-1': !isApproved(original) && !isRejected(original)}\">\r\n\r\n\r\n <!-- Top-right Checkbox -->\r\n <div *ngIf=\"isCheckboxEnable\">\r\n\r\n <input *ngIf=\"!isLockedByReviewer(original)\" type=\"checkbox\"\r\n class=\"position-absolute absolute form-check-input\"\r\n [checked]=\"selectedByType.junk.includes(original?.tempId)\"\r\n (change)=\"onImageCheckboxChange('junk', original.tempId)\" />\r\n <span class=\"position-absolute absolute\"\r\n *ngIf=\"isLockedByReviewer(original)\"\r\n (click)=\"resetCheckbox('junk', original)\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\"\r\n height=\"19\" viewBox=\"0 0 19 19\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_2023_13718)\">\r\n <rect x=\"1.11133\" y=\"0.555664\" width=\"16\"\r\n height=\"16\" rx=\"2\" fill=\"white\" />\r\n <rect x=\"1.38911\" y=\"0.833442\" width=\"15.4444\"\r\n height=\"15.4444\" rx=\"1.72222\"\r\n stroke=\"#D0D5DD\" stroke-width=\"0.555556\" />\r\n <path d=\"M5.87109 8.55566H12.3526\"\r\n stroke=\"#344054\" stroke-width=\"0.927778\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2023_13718\" x=\"0.00021708\"\r\n y=\"0.00010854\" width=\"18.2222\"\r\n height=\"18.2222\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\"\r\n result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"0.555556\" />\r\n <feGaussianBlur stdDeviation=\"0.555556\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\"\r\n in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_2023_13718\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_2023_13718\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n\r\n <img [src]=\"imageUrl + original?.filePath\" alt=\"\"\r\n class=\"w-100 rounded border\" />\r\n <div\r\n class=\"row my-2\">\r\n <div class=\"col-9\">\r\n <div class=\"desc-title ms-2 my-2\">\r\n Tango ID: {{ original.tempId }}\r\n <span\r\n *ngIf=\"getAction(original, 'review')?.action === 'approved'\"\r\n class=\"ms-2\"><svg style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\r\n <rect y=\"0.5\" width=\"10\" height=\"10\" rx=\"5\"\r\n fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M7.1222 3.57919L4.13887 6.45836L3.3472 5.61253C3.20137 5.47503 2.9722 5.46669 2.80553 5.58336C2.64303 5.70419 2.5972 5.91669 2.6972 6.08753L3.6347 7.61253C3.72637 7.75419 3.8847 7.84169 4.06387 7.84169C4.2347 7.84169 4.3972 7.75419 4.48887 7.61253C4.63887 7.41669 7.50137 4.00419 7.50137 4.00419C7.87637 3.62086 7.4222 3.28336 7.1222 3.57503V3.57919Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"getAction(original, 'review')?.action === 'rejected'\r\n \" class=\"ms-2\"><svg style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1428_59484)\">\r\n <path\r\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n fill=\"#FEE4E2\" />\r\n <path\r\n d=\"M8.09961 5L5.09961 8M5.09961 5L8.09961 8M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n stroke=\"#D92D20\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1428_59484\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(0.599609 0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </div>\r\n\r\n <div class=\"desc-value ms-2\">\r\n Entry Time: {{\r\n getFormattedEntryTime(original?.entryTime) }}\r\n </div>\r\n </div>\r\n <div class=\"col-3\">\r\n <span\r\n *ngIf=\"getAction(original, 'approve')?.action === 'approved'\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"37\"\r\n height=\"37\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect width=\"24\" height=\"24\" rx=\"12\"\r\n fill=\"#D1FADF\" />\r\n <g clip-path=\"url(#clip0_486_94051)\">\r\n <path\r\n d=\"M9.5 17H8C7.73478 17 7.48043 16.8946 7.29289 16.7071C7.10536 16.5196 7 16.2652 7 16V12.5C7 12.2348 7.10536 11.9804 7.29289 11.7929C7.48043 11.6054 7.73478 11.5 8 11.5H9.5M13 10.5V8.5C13 8.10218 12.842 7.72064 12.5607 7.43934C12.2794 7.15804 11.8978 7 11.5 7L9.5 11.5V17H15.14C15.3812 17.0027 15.6152 16.9182 15.799 16.762C15.9827 16.6058 16.1038 16.3885 16.14 16.15L16.83 11.65C16.8518 11.5067 16.8421 11.3603 16.8017 11.2211C16.7613 11.0819 16.6911 10.9531 16.5959 10.8438C16.5008 10.7344 16.383 10.647 16.2508 10.5876C16.1185 10.5283 15.975 10.4984 15.83 10.5H13Z\"\r\n stroke=\"#039855\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94051\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n \r\n \r\n </span>\r\n <span\r\n *ngIf=\"getAction(original, 'approve')?.action === 'rejected'\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"37\"\r\n height=\"37\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect width=\"24\" height=\"24\" rx=\"12\"\r\n fill=\"#FEE4E2\" />\r\n <g clip-path=\"url(#clip0_486_94090)\">\r\n <path\r\n d=\"M14.5015 7.00006H15.8365C16.1195 6.99505 16.3944 7.09413 16.6092 7.27847C16.8239 7.46281 16.9635 7.71959 17.0015 8.00006V11.5001C16.9635 11.7805 16.8239 12.0373 16.6092 12.2216C16.3944 12.406 16.1195 12.5051 15.8365 12.5001H14.5015M11.0015 13.5001V15.5001C11.0015 15.8979 11.1595 16.2794 11.4408 16.5607C11.7221 16.842 12.1037 17.0001 12.5015 17.0001L14.5015 12.5001V7.00006H8.86148C8.62032 6.99733 8.38629 7.08186 8.20253 7.23806C8.01876 7.39426 7.89764 7.61161 7.86148 7.85006L7.17148 12.3501C7.14973 12.4934 7.15939 12.6397 7.19981 12.7789C7.24023 12.9181 7.31043 13.0469 7.40555 13.1563C7.50067 13.2657 7.61844 13.3531 7.75069 13.4124C7.88295 13.4718 8.02653 13.5017 8.17148 13.5001H11.0015Z\"\r\n stroke=\"#D92D20\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94090\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <div class=\"card-footer py-5\">\r\n <div class=\"comments-accordion\">\r\n <!-- Accordion Header -->\r\n <div class=\"accordion-header\" (click)=\"toggleCommentsAccordion()\">\r\n <div class=\"d-flex justify-content-start align-items-center w-100\">\r\n <div class=\"comments-title\">\r\n <span class=\"comments-count\">{{ comments?.length }} Comments</span>\r\n\r\n </div>\r\n <div class=\"accordion-arrow ms-3\">\r\n <svg [class.rotated]=\"commentsAccordionOpen\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M4 6L8 10L12 6\" stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Accordion Content -->\r\n <div class=\"accordion-body\" *ngIf=\"commentsAccordionOpen\">\r\n <div *ngFor=\"let c of comments\" class=\"comment-thread d-flex mb-4\">\r\n <!-- avatar -->\r\n <img class=\"comment-avatar me-3\" [src]=\"c.avatar\" alt=\"avatar\" />\r\n\r\n <!-- content -->\r\n <div>\r\n <div class=\"fw-semibold\">{{ c.email }}</div>\r\n <div class=\"text-muted small\">\r\n {{ c.time | date:'hh:mm:ss a - dd MMM yyyy' }}\r\n </div>\r\n\r\n <!-- optional main line -->\r\n <p class=\"mb-2 mt-2\" *ngIf=\"c.mainText\">\r\n {{ c.mainText }}\r\n </p>\r\n\r\n <!-- Marked as \u201C\u2026\u201D line -->\r\n <p class=\"mb-1\" *ngIf=\"c.statusLabel\">\r\n Marked as\r\n <span [ngClass]=\"'text-' + c.statusType\">\r\n \u201C{{ c.statusLabel }}\u201D\r\n </span>\r\n </p>\r\n\r\n <!-- note -->\r\n <p class=\"mb-2\" *ngIf=\"c.note\">\r\n {{ c.note }}\r\n </p>\r\n\r\n <!-- image cards -->\r\n <div class=\"d-flex gap-2 flex-wrap\">\r\n <div *ngFor=\"let img of c.images\" class=\"tango-card\">\r\n <div class=\"tango-image\"\r\n [style.backgroundImage]=\"'url(' + img.url + ')'\"></div>\r\n\r\n <div class=\"tango-meta\">\r\n <div class=\"small\">Tango ID: {{ img.tangoId }}\r\n <span *ngIf=\"img.status === 'approve'\"\r\n class=\"status-dot status-approve\"></span>\r\n <span *ngIf=\"img.status === 'reject'\"\r\n class=\"status-dot status-reject\"></span>\r\n </div>\r\n <div class=\"small text-muted\">Entry time: {{\r\n img.entryTime }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- +N more card -->\r\n <div *ngIf=\"c.moreCount > 0\"\r\n class=\"tango-card more-card d-flex align-items-center justify-content-center\">\r\n +{{ c.moreCount }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div *ngIf=\"source?.houseKeeping?.length\" class=\"my-7 d-flex justify-content-end\"\r\n role=\"group\">\r\n <button [disabled]=\"!houseKeepingACCount\" class=\"btn btn-outline me-1\"\r\n (click)=\"popupOpen('rejected','houseKeeping')\">Reject</button>\r\n <button [disabled]=\"!houseKeepingACCount\" class=\"btn btn-primary ms-1\"\r\n (click)=\"popupOpen('approved','houseKeeping')\">Approve</button>\r\n </div> -->\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</section>\r\n\r\n\r\n<ng-template #zoomPopup let-model>\r\n <div class=\"p-4 m-4\">\r\n <div class=\"modal-header border-0 p-0 w-100 flex-column align-items-start\">\r\n\r\n <!-- Heading -->\r\n <h5 class=\"modal-title mb-2\">\r\n {{ popupType === 'approved' ? 'Approve' : 'Reject' }} Selected Images\r\n </h5>\r\n\r\n <!-- Description -->\r\n <p class=\"mb-3 test-appvalue\">\r\n You're about to {{ popupType === 'approved' ? 'Approve' : 'Reject' }} {{ this.overallSelectedIds?.length\r\n || '--' }} <span class=\"fw-bold\">{{ selectedCategoriesLabel | titlecase }}</span>\r\n </p>\r\n\r\n <!-- Count Box -->\r\n <div class=\"w-100 mb-4\">\r\n <label class=\"mb-2\">Remarks (Optional)</label>\r\n <textarea class=\"form-control\" rows=\"3\" [(ngModel)]=\"remarks\"></textarea>\r\n\r\n </div>\r\n\r\n <!-- Action Buttons -->\r\n <div class=\"w-100 d-flex justify-content-end\">\r\n <button class=\"btn btn-outline me-2\" (click)=\"cancel()\">Cancel</button>\r\n <button class=\"btn btn-primary\" (click)=\"submitValue(popupType, popupvalue)\">\r\n {{ popupType === 'approved' ? 'Approve' : 'Reject' }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #closePopup let-model>\r\n <div class=\"p-4 m-4\">\r\n <div class=\"modal-header border-0 p-0 w-100 flex-column align-items-start\">\r\n <h5 class=\"modal-title mb-2\">\r\n Close ticket\r\n </h5>\r\n <p class=\"mb-3 test-appvalue\">\r\n You are about to close the ticket, Are you sure want to continue?\r\n </p>\r\n <div class=\"w-100 d-flex justify-content-end\">\r\n <button class=\"btn btn-outline me-2\" (click)=\"confirmCloseCancel()\">Cancel</button>\r\n <button class=\"btn btn-primary\" (click)=\"confirmCloseTicket()\">\r\n Close ticket\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #imagePreviewPopup let-model>\r\n <div class=\"p-4 m-4\">\r\n <div class=\"modal-header border-0 p-0 w-100 flex-column align-items-start\">\r\n\r\n <h5 class=\"modal-title mb-2\">{{ previewTitle }}</h5>\r\n\r\n <div class=\"w-100 position-relative mb-4\">\r\n\r\n <button class=\"btn btn-light position-absolute start-0 top-50 translate-middle-y\"\r\n (click)=\"prevPreview()\" [disabled]=\"previewList.length <= 1\">\r\n \u2039\r\n </button>\r\n\r\n <img [src]=\"getPreviewImageUrl()\" class=\"w-100 rounded border\" />\r\n <div\r\n class=\"row my-2\">\r\n <div class=\"col-11\">\r\n <div class=\"desc-title ms-2 my-2\">\r\n Tango ID: {{ currentPreviewItem.tempId }}\r\n\r\n <span *ngIf=\"getAction(currentPreviewItem, 'review')?.action === 'approved'\" class=\"ms-2\"><svg\r\n style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\r\n <rect y=\"0.5\" width=\"10\" height=\"10\" rx=\"5\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M7.1222 3.57919L4.13887 6.45836L3.3472 5.61253C3.20137 5.47503 2.9722 5.46669 2.80553 5.58336C2.64303 5.70419 2.5972 5.91669 2.6972 6.08753L3.6347 7.61253C3.72637 7.75419 3.8847 7.84169 4.06387 7.84169C4.2347 7.84169 4.3972 7.75419 4.48887 7.61253C4.63887 7.41669 7.50137 4.00419 7.50137 4.00419C7.87637 3.62086 7.4222 3.28336 7.1222 3.57503V3.57919Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"getAction(currentPreviewItem, 'review')?.action === 'rejected'\" class=\"ms-2\"><svg\r\n style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1428_59484)\">\r\n <path\r\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n fill=\"#FEE4E2\" />\r\n <path\r\n d=\"M8.09961 5L5.09961 8M5.09961 5L8.09961 8M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n stroke=\"#D92D20\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1428_59484\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(0.599609 0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n\r\n </div>\r\n\r\n <div class=\"desc-value ms-2\">Entry Time: {{\r\n getFormattedEntryTime(currentPreviewItem.entryTime) }}</div>\r\n </div>\r\n <div class=\"col-1 ms-3\">\r\n <span *ngIf=\"getAction(currentPreviewItem, 'approve')?.action === 'approved'\">\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 width=\"24\" height=\"24\" rx=\"12\" fill=\"#D1FADF\" />\r\n <g clip-path=\"url(#clip0_486_94051)\">\r\n <path\r\n d=\"M9.5 17H8C7.73478 17 7.48043 16.8946 7.29289 16.7071C7.10536 16.5196 7 16.2652 7 16V12.5C7 12.2348 7.10536 11.9804 7.29289 11.7929C7.48043 11.6054 7.73478 11.5 8 11.5H9.5M13 10.5V8.5C13 8.10218 12.842 7.72064 12.5607 7.43934C12.2794 7.15804 11.8978 7 11.5 7L9.5 11.5V17H15.14C15.3812 17.0027 15.6152 16.9182 15.799 16.762C15.9827 16.6058 16.1038 16.3885 16.14 16.15L16.83 11.65C16.8518 11.5067 16.8421 11.3603 16.8017 11.2211C16.7613 11.0819 16.6911 10.9531 16.5959 10.8438C16.5008 10.7344 16.383 10.647 16.2508 10.5876C16.1185 10.5283 15.975 10.4984 15.83 10.5H13Z\"\r\n stroke=\"#039855\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94051\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"getAction(currentPreviewItem, 'approve')?.action === 'rejected'\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect width=\"24\" height=\"24\" rx=\"12\" fill=\"#FEE4E2\" />\r\n <g clip-path=\"url(#clip0_486_94090)\">\r\n <path\r\n d=\"M14.5015 7.00006H15.8365C16.1195 6.99505 16.3944 7.09413 16.6092 7.27847C16.8239 7.46281 16.9635 7.71959 17.0015 8.00006V11.5001C16.9635 11.7805 16.8239 12.0373 16.6092 12.2216C16.3944 12.406 16.1195 12.5051 15.8365 12.5001H14.5015M11.0015 13.5001V15.5001C11.0015 15.8979 11.1595 16.2794 11.4408 16.5607C11.7221 16.842 12.1037 17.0001 12.5015 17.0001L14.5015 12.5001V7.00006H8.86148C8.62032 6.99733 8.38629 7.08186 8.20253 7.23806C8.01876 7.39426 7.89764 7.61161 7.86148 7.85006L7.17148 12.3501C7.14973 12.4934 7.15939 12.6397 7.19981 12.7789C7.24023 12.9181 7.31043 13.0469 7.40555 13.1563C7.50067 13.2657 7.61844 13.3531 7.75069 13.4124C7.88295 13.4718 8.02653 13.5017 8.17148 13.5001H11.0015Z\"\r\n stroke=\"#D92D20\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94090\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </div>\r\n </div>\r\n\r\n <!-- Duplicate Reason -->\r\n <!-- <div class=\"duplicate-reason ms-2 mt-2\">\r\n <small class=\"text-muted\">{{ currentPreviewItem.reason }}</small>\r\n </div> -->\r\n\r\n <button class=\"btn btn-light position-absolute end-0 top-50 translate-middle-y\" (click)=\"nextPreview()\"\r\n [disabled]=\"previewList.length <= 1\">\r\n \u203A\r\n </button>\r\n\r\n </div>\r\n\r\n <div class=\"w-100 d-flex justify-content-end\">\r\n <button class=\"btn btn-outline me-2\" (click)=\"rejectPopup()\">Reject</button>\r\n <button class=\"btn btn-primary\" (click)=\"acceptPopup()\">Accept</button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".card-header,.header{color:var(--Gray-900, #101828);font-size:20px!important;font-style:normal;font-weight:700;line-height:27px}.sub-header{color:var(--Gray-700, #344054);font-size:14px!important;font-style:normal;font-weight:600;line-height:20px}.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}.card-title-foot{color:var(--Gray-800, #1D2939)!important;font-size:18px;font-weight:600;line-height:28px}.card-title-label{color:var(--Gray-800, #1D2939)!important;font-size:16px;font-weight:600;line-height:28px}.card-title-value{color:var(--Gray-800, #1D2939)!important;font-size:16px;font-weight:400;line-height:28px}input[type=checkbox]{width:16px!important;height:16px!important;margin:-2px 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #D0D5DD)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]{outline:1px solid var(--primary-600, #00A3FF)!important;background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.rotate{rotate:180deg;transition:1s}.border-selectall{border-radius:6px;border-bottom:1px solid var(--Gray-200, #EAECF0);background:#f9fafb;padding:8px 12px}.border-selectall1{border-radius:6px!important;background:var(--White, #FFF)!important;padding:8px 2px}.border-totalfootfall{border-radius:12px;padding:4px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF)}.vl{border-left:2px solid #000;height:50px}.duplicate-head{color:var(--Gray-700, #344054);font-size:16px;font-weight:600;line-height:20px}.img-border{border-radius:5px!important;border:2px solid var(--Gray-300, #D0D5DD)}.desc-title{color:var(--Gray-900, #101828);font-size:12px;font-weight:500;line-height:20px}.desc-value{color:var(--Gray-900, #475467);font-size:10px;font-weight:500;line-height:10px}.img-border{overflow:hidden;position:relative}.btn-resize{font-size:13px!important;height:29px!important;line-height:11px!important;padding:1px!important}.absolute{top:5px;right:5px;z-index:2}.absolute1{top:5px;left:8px;z-index:2}.img-src{width:25%;height:20%}.backButtonright{border-radius:1000px!important;background:var(--text-primary, #FFF)!important;padding:12px!important;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808!important;box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808!important;position:absolute;top:30px;right:-10px;z-index:0}.backButtonleft{border-radius:1000px!important;background:#fff;padding:14px!important;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-20px;z-index:5}.select-wrapper{position:relative;display:inline-block;width:100%}.placeholder-overlay{position:absolute;color:var(--Gray-500, #667085);font-family:Inter;font-size:16px!important;font-style:normal;font-weight:400;top:10px;left:15px;pointer-events:none;font-size:1.1rem;z-index:1}.card-title{color:var(--Black, #101828)!important;font-size:20px!important;font-weight:700!important;line-height:30px}.card-title-sub-header{color:var(--Black, #101828);font-size:14px;font-weight:500;line-height:30px}.separator.separator-dashed{border-bottom-style:double!important}.border-1{border-radius:4px!important;border:1px solid var(--Gray-300, #D0D5DD)!important}.store-item{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;border-radius:8px;transition:background-color .3s ease}.store-item-active{background:#eaf8ff}.left{display:flex;align-items:center;gap:8px;overflow:hidden;color:var(--Gray-700, #344054);text-overflow:ellipsis;font-size:14px;font-style:normal;font-weight:400;line-height:24px}.left .active-text{overflow:hidden;color:var(--Primary-700, #EAF8FF);font-size:14px;font-style:normal;font-weight:400;line-height:24px}.badge-active{border-radius:16px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);text-align:center;font-size:12px;font-style:normal;font-weight:500;line-height:20px;mix-blend-mode:multiply}.badge-normal{color:var(--Gray-700, #344054);text-align:center;font-size:12px;font-style:normal;font-weight:500;line-height:20px;border-radius:16px;background:var(--Gray-100, #F2F4F7)}.bg-light-primary{background:#f6fcff!important}.card-layer{gap:16px!important;opacity:1!important;padding:16px!important;border-radius:16px!important;border-width:1px!important;background:#fff;border:1px solid #EAECF0!important}.ticket-container{width:100%;background:#fff;border-radius:12px;padding:0;font-family:Inter,sans-serif}.ticket-header{display:flex;justify-content:space-between;align-items:center;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;padding:16px 20px;font-weight:600}.footfall-value{font-weight:600;font-size:20px;line-height:30px;letter-spacing:0%;vertical-align:middle;color:#101828}.issue-date{font-size:14px;color:#666}.timeline{width:1.5px;height:15px;background:#d0d5dd;margin-left:33px}.timeline-new{width:1px;height:70px;background:#d0d5dd;margin-left:30px;font-weight:600}.revision-card{background:#fff;border:1px solid #eaeaea;border-radius:12px;padding:0 20px}.user-info{display:flex;align-items:center}.avatar{width:42px;height:40px;border-radius:50%;margin-right:15px;font-size:14px;color:#1d2939;font-weight:600}.user-name{font-size:13px;color:#555}.user-email{font-size:12px;color:#888;margin-top:2px}.values-row{display:flex;justify-content:space-between;flex-wrap:wrap}.value-block{min-width:90px;margin:10px 0}.value{font-size:20px;font-weight:700}.label{font-size:14px;color:#1d2939;margin-top:3px}.accuracy{font-size:18px!important}.accuracy.up,.accuracy.down{color:#00a3ff}.footfall-label{font-weight:700;font-size:14px;line-height:20px;letter-spacing:0%;vertical-align:middle;color:#344054!important}.duplicate-layer{gap:10px;opacity:1;padding:16px;border-bottom-width:1px;border-bottom:1px solid #F2F4F7;background:#fff}.layer-approved{border-color:#a6f4c5!important;box-shadow:0 0 0 2.29px #a6f4c5}.layer-rejected{border-color:#fda29b!important;box-shadow:0 0 0 2.29px #fda29b}.layers{border-radius:8px;border-width:1px;opacity:1;border:1px solid #EAECF0;background:#fcfcfd;margin:12px}.btn-primary{font-size:13px!important;padding:5px 15px!important}.accordion-header{cursor:pointer}svg.rotated{transform:rotate(180deg);transition:transform .3s ease}.accordion-body{animation:fadeIn .25s ease}@keyframes fadeIn{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.ellipsis-underline{max-width:120px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-decoration:underline;cursor:pointer;display:inline-block}table td{line-height:14px!important}.btn-filter{font-weight:600;font-size:14px;line-height:20px;letter-spacing:0%;text-transform:capitalize;color:#344054}.overlay{position:fixed;inset:0;background:#0000001a}.filter-card{position:absolute;right:0;background:#fff;border-radius:8px;padding:16px 20px;box-shadow:0 8px 24px #0000001f;font-size:13px}.border-primary-layers{opacity:1;gap:12px;padding-bottom:16px;background:#eaf8ff;border-radius:8px!important}.border-primary-layers .label-title{opacity:1;gap:10px;padding:8px;border-bottom-right-radius:8px!important;background:#daf1ff;font-weight:500!important;font-size:18px!important;line-height:28px!important;letter-spacing:0%;color:#000!important}.border-primary-layers .label-desc{font-weight:500;font-size:16px;line-height:28px;letter-spacing:0%;color:#008edf!important}.comment-thread{border-left:1px solid #e5e5e5;padding-left:16px}.comment-avatar{width:32px;height:32px;border-radius:50%;object-fit:cover}.tango-card{width:140px;border-radius:8px;border:1px solid #e5e5e5;overflow:hidden;background:#fff;cursor:pointer}.tango-image{height:80px;background-size:cover;background-position:center}.tango-meta{padding:6px 8px}.more-card{background:#00000008;font-weight:600}.status-dot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-left:4px}.status-approve{background:#22c55e}.status-reject{background:#ef4444}.page-content{padding:16px}.filter-backdrop{position:fixed;inset:0;background:#0f172a40;z-index:998}.filter-modal{position:fixed;inset:0;display:flex;justify-content:center;align-items:center;z-index:999}.store-item-active{background-color:#eaf8ff}.store-item{padding:8px 12px 8px 10px;border-radius:6px;padding:8px 12px;gap:12px;opacity:1}.ticket-id{font-weight:500;font-size:14px;line-height:20px;letter-spacing:0%;color:#1d2939}.store-name{font-weight:400;font-size:14px;line-height:20px;letter-spacing:0%;color:#667085}.perc-badge{font-size:12px;min-width:48px;text-align:center}.perc-badge-normal{background-color:#f3f3f3;font-weight:500;font-size:14px;line-height:20px;letter-spacing:0%;text-align:center;color:#344054}.perc-badge-active{background-color:#d9ecff;font-weight:500;font-size:14px;line-height:20px;letter-spacing:0%;text-align:center;color:#009bf3}.border-selectall{padding:8px 10px;border-radius:12px;background:#f7f7f7}.reviewer-label{font-size:12px;color:gray}.sort-arrow{font-size:10px;line-height:1}.modal-title{font-weight:600;font-size:18px;line-height:28px;letter-spacing:0%;color:#1d2939}.test-appvalue{color:#1d2939;font-weight:400;font-size:16px;line-height:24px;letter-spacing:0%}.light-primary{background:#eaf8ff!important}.nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}\n"], dependencies: [{ kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i6.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "pipe", type: i8.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i8.DatePipe, name: "date" }] });
1307
+ }
1308
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TicketFootfallNewComponent, decorators: [{
1309
+ type: Component,
1310
+ args: [{ selector: "lib-ticket-footfall-new", template: "<section *ngIf=\"select ==='ticketList'\">\r\n <div class=\"row ms-3 my-3\">\r\n <!-- <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item\">\r\n <a class=\"nav-link cursor-pointer no-border me-3\">\r\n Tickets\r\n </a> \r\n </li>\r\n <li class=\"nav-item\">\r\n <a class=\"nav-link cursor-pointer no-border me-3\"> Internal audit\r\n </a>\r\n </li>\r\n </ul> -->\r\n <ul *ngIf=\"hasApproverAccess && hasReviewerAccess\"\r\n class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <!-- Approver tab -->\r\n <li class=\"nav-item\" *ngIf=\"hasApproverAccess\">\r\n <a [ngClass]=\"selectedRole === 'approver' ? 'active' : ''\"\r\n class=\"nav-link cursor-pointer no-border me-3\" (click)=\"SelectedRole('approver')\">\r\n Approver\r\n </a>\r\n </li>\r\n\r\n <!-- Reviewer tab -->\r\n <li class=\"nav-item\" *ngIf=\"hasReviewerAccess\">\r\n <a [ngClass]=\"selectedRole === 'reviewer' ? 'active' : ''\"\r\n class=\"nav-link cursor-pointer no-border me-3\" (click)=\"SelectedRole('reviewer')\">\r\n Reviewer\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-9 mb-3\">\r\n <div class=\"card\">\r\n <div class=\"card-header ellipse1 px-5\">\r\n <div class=\"my-0\">\r\n <h5 class=\"card-title my-0\">{{ getFootfallSummaryData?.totalTickets !== null ?\r\n getFootfallSummaryData?.totalTickets : '--' }}</h5>\r\n <span class=\"sub-header\">Total tickets</span>\r\n </div>\r\n <div *ngIf=\"getFootfallSummaryData?.averageAccuracyOverAll !== null &&\r\n getFootfallSummaryData?.averageAccuracyOverAll !== undefined\" class=\"card-toolbar\">\r\n <div class=\"my-0\">\r\n <h5 class=\"card-title my-0\">{{ getFootfallSummaryData?.averageAccuracyOverAll !== null ?\r\n getFootfallSummaryData?.averageAccuracyOverAll + '%' : '--' }}</h5>\r\n <span class=\"sub-header\">Average accuracy (Overall)</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-2 px-5\">\r\n <div class=\"row\">\r\n <div *ngIf=\"getFootfallSummaryData?.openTickets !== null &&\r\n getFootfallSummaryData?.openTickets !== undefined\" class=\"col my-3\">\r\n <h5 class=\"card-title\">{{ getFootfallSummaryData?.openTickets !== null ?\r\n getFootfallSummaryData?.openTickets : '--' }}</h5>\r\n <span class=\"card-title-sub-header\">Open</span>\r\n </div>\r\n <div *ngIf=\"getFootfallSummaryData?.openInfraIssues !== null &&\r\n getFootfallSummaryData?.openInfraIssues !== undefined\" class=\"col my-3\">\r\n <h5 class=\"card-title\">{{ getFootfallSummaryData?.openInfraIssues !== null ?\r\n getFootfallSummaryData?.openInfraIssues : '--' }}</h5>\r\n <span class=\"card-title-sub-header\">Open-Infra Issue</span>\r\n </div>\r\n <div *ngIf=\"getFootfallSummaryData?.inprogress !== null &&\r\n getFootfallSummaryData?.inprogress !== undefined\" class=\"col my-3\">\r\n <h5 class=\"card-title\">{{ getFootfallSummaryData?.inprogress !== null ?\r\n getFootfallSummaryData?.inprogress : '--' }}</h5>\r\n <span class=\"card-title-sub-header\">In-progress</span>\r\n </div>\r\n <div *ngIf=\"getFootfallSummaryData?.closedTickets !== null &&\r\n getFootfallSummaryData?.closedTickets !== undefined\" class=\"col my-3\">\r\n <h5 class=\"card-title\">{{ getFootfallSummaryData?.closedTickets !== null ?\r\n getFootfallSummaryData?.closedTickets : '--' }}</h5>\r\n <span class=\"card-title-sub-header\">Closed</span>\r\n </div>\r\n\r\n <div *ngIf=\"getFootfallSummaryData?.dueToday !== null &&\r\n getFootfallSummaryData?.dueToday !== undefined\" class=\"col my-3 \">\r\n <h5 style=\"color:#DC6803 !important\" class=\"card-title\">{{ getFootfallSummaryData?.dueToday\r\n !== null ?\r\n getFootfallSummaryData?.dueToday : '--' }}</h5>\r\n <span class=\"card-title-sub-header\" style=\"color:#DC6803 !important\">Due today</span>\r\n </div>\r\n\r\n <div *ngIf=\"getFootfallSummaryData?.Expired !== null &&\r\n getFootfallSummaryData?.Expired !== undefined\" class=\"col my-3 \">\r\n <h5 class=\"card-title\">{{ getFootfallSummaryData?.Expired !== null ?\r\n getFootfallSummaryData?.Expired : '--' }}</h5>\r\n <span class=\"card-title-sub-header\">Expired</span>\r\n </div>\r\n\r\n <div *ngIf=\"getFootfallSummaryData?.underTangoReview !== null &&\r\n getFootfallSummaryData?.underTangoReview !== undefined\" class=\"col my-3 \">\r\n <h5 class=\"card-title\">{{ getFootfallSummaryData?.underTangoReview !== null ?\r\n getFootfallSummaryData?.underTangoReview : '--' }}</h5>\r\n <span class=\"card-title-sub-header\">Under tango review</span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-3 mb-3\">\r\n <div class=\"card\">\r\n <div class=\"card-header ellipse1 py-1 px-5\">\r\n <div *ngIf=\"getFootfallSummaryData?.ticketAccuracyAbove !== null &&\r\n getFootfallSummaryData?.ticketAccuracyAbove !== undefined\" class=\"my-0\">\r\n <h5 class=\"card-title mt-0\">{{ getFootfallSummaryData?.ticketAccuracyAbove !== null ?\r\n getFootfallSummaryData?.ticketAccuracyAbove : '--' }}</h5>\r\n <div class=\"sub-header\">Tickets with Accuracy Above 85%</div>\r\n </div>\r\n <div *ngIf=\"getFootfallSummaryData?.avgTicket !== null &&\r\n getFootfallSummaryData?.avgTicket !== undefined\" class=\"my-0\">\r\n <h5 class=\"card-title mt-0\">{{ getFootfallSummaryData?.avgTicket !== null ?\r\n getFootfallSummaryData?.avgTicket : '--' }}</h5>\r\n <div class=\"sub-header\">Average ticket %</div>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-2 px-5\">\r\n <div class=\"row\">\r\n <div *ngIf=\"getFootfallSummaryData?.ticketAccuracyBelow !== null &&\r\n getFootfallSummaryData?.ticketAccuracyBelow !== undefined\"\r\n class=\"col-lg-12 col-xl-12 col-md-12 my-3\">\r\n <h5 class=\"card-title\">{{ getFootfallSummaryData?.ticketAccuracyBelow !== null ?\r\n getFootfallSummaryData?.ticketAccuracyBelow : '--' }}</h5>\r\n <span class=\"card-title-sub-header\">Tickets with Accuracy Below 85%</span>\r\n </div>\r\n <div *ngIf=\"getFootfallSummaryData?.avgAccuracy !== null &&\r\n getFootfallSummaryData?.avgAccuracy !== undefined\" class=\"col-lg-12 col-xl-12 col-md-12 my-3\">\r\n <h5 class=\"card-title\">{{ getFootfallSummaryData?.avgAccuracy !== null ?\r\n getFootfallSummaryData?.avgAccuracy : '--' }}</h5>\r\n <span class=\"card-title-sub-header\">Average accuracy%</span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card\">\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\">Showing tickets with Accuracy Below 85% <span\r\n class=\"ms-2 px-3 badge badge-light-primary\">{{totalItems}} Total</span></span>\r\n <span class=\"text-sub mb-2\">Based on {{headerFilters?.date?.startDate | date:'dd MMM, yyyy'}} \u2013\r\n {{headerFilters?.date?.endDate | date:'dd MMM, yyyy'}} </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 svg-icon-1 position-absolute ms-3\">\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\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" class=\"form-control ps-14 me-2\" placeholder=\"Search by store\"\r\n autocomplete=\"off\" (change)=\"searchData()\" [(ngModel)]=\"searchValue\" />\r\n\r\n <button type=\"button\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\">\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\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let col of tableColumns\"\r\n [class.cursor-pointer]=\"col.sortable && col.type !== 'store'\"\r\n (click)=\"col.sortable && onSort(col.key)\">\r\n\r\n {{ col.label }}\r\n\r\n <!-- Sorting Icon -->\r\n <svg *ngIf=\"col.sortable && col.type !== 'store'\"\r\n [ngClass]=\"sortedColumn === col.key && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8 3.333V12.667L12.667 8 8 12.667 3.333 8\"\r\n [attr.stroke]=\"sortedColumn === col.key ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <tr *ngFor=\"let row of footfallListData\">\r\n\r\n <td *ngFor=\"let col of tableColumns\">\r\n\r\n <!-- Store + ticket clickable -->\r\n <ng-container *ngIf=\"col.type === 'store'\">\r\n <div class=\"text-primary ellipsis-underline\" (click)=\"ticketView(row)\">\r\n {{ row.ticketId }}\r\n </div>\r\n <div class=\"pt-2\">{{ row.storeName }}</div>\r\n </ng-container>\r\n\r\n <!-- Date -->\r\n <ng-container class=\"pt-5\" *ngIf=\"col.type === 'date' || col.type === 'ticketRaised'\">\r\n {{ row[col.key] | date:'dd MMM, yyyy' }}\r\n </ng-container>\r\n\r\n <!-- Status -->\r\n <ng-container class=\"pt-5\" *ngIf=\"col.type === 'status'\">\r\n <span class=\"badge mx-2\" [ngClass]=\"getStatusBadgeClass(row[col.key])\">\r\n {{ row[col.key] | titlecase }}\r\n </span>\r\n </ng-container>\r\n\r\n <!-- Default Text -->\r\n <ng-container class=\"pt-5\" *ngIf=\"col.type === 'text'\">\r\n {{ row[col.key] ?? '--' }}\r\n </ng-container>\r\n\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"my-3\">\r\n <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n<!-- -->\r\n<section *ngIf=\"select ==='ticketMethod'\">\r\n <div class=\"row my-2\">\r\n <div class=\"position-relative\" [ngClass]=\"isCollapsed ? 'd-none' : 'col-md-3 h-auto'\">\r\n <div class=\"card h-100\">\r\n <div class=\"card-header border-0 pt-3 ps-1 pe-5\">\r\n <span class=\"ms-2 cursor-pointer\" (click)=\"backToNavigation()\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"56\" height=\"44\" viewBox=\"0 0 56 44\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_887_4505)\">\r\n <rect x=\"2\" y=\"1\" width=\"52\" height=\"40\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"51\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path d=\"M30.5 26L25.5 21L30.5 16\" stroke=\"#344054\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_887_4505\" x=\"0\" y=\"0\" width=\"56\" height=\"44\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_887_4505\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_887_4505\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg><span class=\"card-title-foot pt-15 ms-3\">Tickets</span></span>\r\n <span class=\"cursor-pointer\" (click)=\"toggleSidebar()\"\r\n style=\"position: absolute; top: 15px; right: -25px;\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"68\" height=\"68\" viewBox=\"0 0 68 68\" fill=\"none\">\r\n <g filter=\"url(#filter0_dd_778_34282)\">\r\n <rect x=\"12\" width=\"44\" height=\"44\" rx=\"22\" fill=\"white\" />\r\n <path d=\"M33 27L28 22L33 17M40 27L35 22L40 17\" stroke=\"#101828\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_dd_778_34282\" x=\"0\" y=\"0\" width=\"68\" height=\"68\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feMorphology radius=\"2\" operator=\"erode\" in=\"SourceAlpha\"\r\n result=\"effect1_dropShadow_778_34282\" />\r\n <feOffset dy=\"4\" />\r\n <feGaussianBlur stdDeviation=\"3\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.03 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_778_34282\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feMorphology radius=\"4\" operator=\"erode\" in=\"SourceAlpha\"\r\n result=\"effect2_dropShadow_778_34282\" />\r\n <feOffset dy=\"12\" />\r\n <feGaussianBlur stdDeviation=\"8\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.08 0\" />\r\n <feBlend mode=\"normal\" in2=\"effect1_dropShadow_778_34282\"\r\n result=\"effect2_dropShadow_778_34282\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect2_dropShadow_778_34282\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n <div class=\"p-4 w-100 overflow-auto\">\r\n <div class=\"row my-1\">\r\n <div class=\"col-8\">\r\n\r\n <span class=\"svg-icon svg-icon-1 position-absolute py-2 ms-3\">\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\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input class=\"form-control form-control-sm mb-2 ps-14 pe-2 w-100\" type=\"text\"\r\n placeholder=\"Search\" [(ngModel)]=\"StoresSearchValue\" (change)=\"searchStoresData()\" />\r\n </div>\r\n <div class=\"col-4 p-0 btn\">\r\n <button class=\"btn-filter btn btn-sm btn-outline\" (click)=\"toggleFilter()\">\r\n <span class=\"me-2\"><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=\"M5 10H15M2.5 5H17.5M7.5 15H12.5\" stroke=\"#344054\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n Filter\r\n </button>\r\n\r\n <!-- Overlay (click outside to close) -->\r\n <div class=\"overlay\" *ngIf=\"isFilterOpen\" (click)=\"close()\"></div>\r\n\r\n <form [formGroup]=\"filterForm\">\r\n <!-- Filter card -->\r\n <div class=\"filter-card text-start\" *ngIf=\"isFilterOpen\"\r\n (click)=\"$event.stopPropagation()\">\r\n <h3 class=\"mb-3\">Filter Options</h3>\r\n\r\n <!-- Status -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1\">Status</label>\r\n <select class=\"form-select form-select-sm\" formControlName=\"status\">\r\n <option value=\"\">Select</option>\r\n <option>Open</option>\r\n <option>In-Progress</option>\r\n <option>Close</option>\r\n <option>Under tange review</option>\r\n <option>Tange review done</option>\r\n <option>Expired</option>\r\n </select>\r\n </div>\r\n\r\n <!-- Reviewer accuracy -->\r\n <div class=\"row mb-3\">\r\n <div class=\"col-9\">\r\n <!-- label in same row -->\r\n <label class=\"form-label mb-0 fs-8 reviewer-label\">\r\n Reviewer accuracy (%) by condition\r\n </label>\r\n\r\n <!-- condition dropdown -->\r\n <select class=\"form-select form-select-sm reviewer-select\"\r\n formControlName=\"reviewerCondition\">\r\n <option value=\"\">Select</option>\r\n <option>>= Greater than or equal to</option>\r\n <option>\r\n < Less than</option>\r\n <option>> Greater than</option>\r\n <option>\r\n <= Lesser than or equal to</option>\r\n <option>Between</option>\r\n </select>\r\n </div>\r\n <!-- single value -->\r\n <div class=\"col-3\">\r\n <!-- <ng-container *ngIf=\"filterForm.value.reviewerCondition !== 'Between'; else betweenTpl\"> -->\r\n <label class=\"small ms-1\">% </label>\r\n <input type=\"number\"\r\n class=\"form-control form-control-sm reviewer-input text-end\"\r\n formControlName=\"reviewerValue\" min=\"1\" max=\"100\">\r\n <!-- </ng-container> -->\r\n\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <!-- TODO: same block for Approver & Tango -->\r\n <!-- Reviewer accuracy -->\r\n <div class=\"row mb-3\">\r\n <div class=\"col-9\">\r\n <!-- label in same row -->\r\n <label class=\"form-label mb-0 fs-8 reviewer-label\">\r\n Approver accuracy (%) by condition\r\n </label>\r\n\r\n <!-- condition dropdown -->\r\n <select class=\"form-select form-select-sm reviewer-select\"\r\n formControlName=\"reviewerCondition\">\r\n <option value=\"\">Select</option>\r\n <option>>= Greater than or equal to</option>\r\n <option>\r\n < Less than</option>\r\n <option>> Greater than</option>\r\n <option>\r\n <= Lesser than or equal to</option>\r\n <option>Between</option>\r\n </select>\r\n </div>\r\n <!-- single value -->\r\n <div class=\"col-3\">\r\n <!-- <ng-container *ngIf=\"filterForm.value.reviewerCondition !== 'Between'; else betweenTpl\"> -->\r\n <label class=\"small ms-1\">% </label>\r\n <input type=\"number\"\r\n class=\"form-control form-control-sm reviewer-input text-end\"\r\n formControlName=\"reviewerValue\" min=\"1\" max=\"100\">\r\n <!-- </ng-container> -->\r\n\r\n\r\n </div>\r\n\r\n </div>\r\n <!-- Reviewer accuracy -->\r\n <div class=\"row mb-3\">\r\n <div class=\"col-9\">\r\n <!-- label in same row -->\r\n <label class=\"form-label mb-0 fs-8 reviewer-label\">\r\n Tango accuracy (%) by condition\r\n </label>\r\n\r\n <!-- condition dropdown -->\r\n <select class=\"form-select form-select-sm reviewer-select\"\r\n formControlName=\"reviewerCondition\">\r\n <option value=\"\">Select</option>\r\n <option>>= Greater than or equal to</option>\r\n <option>\r\n < Less than</option>\r\n <option>> Greater than</option>\r\n <option>\r\n <= Lesser than or equal to</option>\r\n <option>Between</option>\r\n </select>\r\n </div>\r\n <!-- single value -->\r\n <div class=\"col-3\">\r\n <!-- <ng-container *ngIf=\"filterForm.value.reviewerCondition !== 'Between'; else betweenTpl\"> -->\r\n <label class=\"small ms-1\">% </label>\r\n <input type=\"number\"\r\n class=\"form-control form-control-sm reviewer-input text-end\"\r\n formControlName=\"reviewerValue\" min=\"1\" max=\"100\">\r\n <!-- </ng-container> -->\r\n\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-end gap-2 mt-3\">\r\n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\"\r\n (click)=\"resetFilter()\">Reset</button>\r\n <button type=\"button\" class=\"btn btn-sm btn-primary\"\r\n (click)=\"applyFilter()\">Apply</button>\r\n </div>\r\n </div>\r\n </form>\r\n\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"openTicketsList.length\" class=\"mb-2 border-selectall\">\r\n <div class=\"d-flex justify-content-between align-items-center w-100\">\r\n\r\n <!-- LEFT: checkbox + text -->\r\n <div class=\"d-flex align-items-center\">\r\n <input type=\"checkbox\" class=\"me-2\" [checked]=\"allSelected\"\r\n (change)=\"toggleSelectAll()\" />\r\n <label class=\"m-0 font-semibold\">\r\n Select all {{ storeCount }} stores\r\n </label>\r\n </div>\r\n\r\n <!-- RIGHT: Reviewer(%) + optional sort icon -->\r\n <div class=\"d-flex align-items-center reviewer-label\">\r\n <span class=\"me-1\">Reviewer(%)</span>\r\n <!-- if you want arrow icon -->\r\n <span class=\"sort-arrow cursor-pointer\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\r\n <path\r\n d=\"M6.83464 1L6.83463 12.6667M6.83463 12.6667L12.668 6.83333M6.83463 12.6667L1.0013 6.83333\"\r\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <!-- or use an <i> from font-awesome/bootstrap icon instead -->\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n <ul class=\"list-unstyled ps-0\">\r\n <li *ngFor=\"let store of openTicketsList\" class=\"mb-2\"\r\n [ngClass]=\"{ 'store-item-active': isSelected(store), 'store-item': true }\">\r\n\r\n <div class=\"d-flex justify-content-between align-items-center w-100\">\r\n <!-- LEFT: checkbox + text -->\r\n <div class=\"d-flex align-items-start\">\r\n <input type=\"checkbox\" class=\"me-2 my-3\" [checked]=\"isSelected(store)\"\r\n (change)=\"toggleStoreSelection(store)\" />\r\n\r\n <div class=\"store-text ms-1\">\r\n <div class=\"ticket-id\" [ngClass]=\"{ 'active-text': isSelected(store) }\">\r\n {{ store?.ticketId }}\r\n </div>\r\n <div class=\"store-name mt-1\">\r\n {{ store?.storeName }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- RIGHT: pill badge -->\r\n <span\r\n class=\"ms-2 px-3 py-1 rounded-pill d-inline-flex align-items-center justify-content-center perc-badge\"\r\n [ngClass]=\"{\r\n 'perc-badge-active': isSelected(store),\r\n 'perc-badge-normal': !isSelected(store)\r\n }\">\r\n {{ store?.revicedPerc }}\r\n </span>\r\n </div>\r\n </li>\r\n\r\n </ul>\r\n\r\n\r\n\r\n <div *ngIf=\"!openTicketsList.length\" class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n\r\n <div class=\"card-body mx-0 d-flex justify-content-center align-items-center flex-column \"\r\n style=\"margin: 64px;border-radius: 8px;\r\n background: var(--Gray-50, #F9FAFB);\">\r\n <svg class=\"my-5\" xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\"\r\n viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\"\r\n stroke-width=\"13.3333\" />\r\n <g clip-path=\"url(#clip0_730_75095)\">\r\n <path\r\n d=\"M55.3327 62V58.6667C55.3327 56.8986 54.6303 55.2029 53.3801 53.9526C52.1298 52.7024 50.4341 52 48.666 52H35.3327C33.5646 52 31.8689 52.7024 30.6186 53.9526C29.3684 55.2029 28.666 56.8986 28.666 58.6667V62M65.3327 62V58.6667C65.3316 57.1895 64.8399 55.7546 63.935 54.5872C63.03 53.4198 61.7629 52.5859 60.3327 52.2167M53.666 32.2167C55.1 32.5838 56.3711 33.4178 57.2787 34.5872C58.1864 35.7565 58.6791 37.1947 58.6791 38.675C58.6791 40.1553 58.1864 41.5935 57.2787 42.7628C56.3711 43.9322 55.1 44.7662 53.666 45.1333M48.666 38.6667C48.666 42.3486 45.6812 45.3333 41.9993 45.3333C38.3174 45.3333 35.3327 42.3486 35.3327 38.6667C35.3327 34.9848 38.3174 32 41.9993 32C45.6812 32 48.666 34.9848 48.666 38.6667Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"4\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_730_75095\">\r\n <rect width=\"40\" height=\"40\" fill=\"white\" transform=\"translate(27 27)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <div class=\"nodata-title my-3\">No Stores Found</div>\r\n <div class=\"nodata-sub mb-3\">Looks like there is no stores </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div [ngClass]=\"isCollapsed ? 'col-12' : 'col-md-9'\">\r\n <div class=\"card bg-light-primary p-1 h-100\">\r\n <div class=\"card-header border-0 pt-3 px-5\">\r\n <div class=\"d-flex justify-content-start\">\r\n <div *ngIf=\"isCollapsed\" class=\"cursor-pointer\"><span (click)=\"toggleSidebar()\"\r\n style=\"position: absolute; top: 10px; left: 10px;\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\"\r\n fill=\"none\">\r\n <path d=\"M22.5 25L17.5 20L22.5 15\" stroke=\"#667085\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> </span>\r\n <span class=\"card-title-foot ms-15\">Footfall Directory</span>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <span *ngIf=\"ticketData?.status === 'Raised' || getHeaderStatus() === 'Open'\">\r\n\r\n <button *ngIf=\"!closeBtn\" class=\"btn btn-sm btn-primary mx-2\" (click)=\"startReview()\">Start\r\n Review</button>\r\n </span>\r\n <span *ngIf=\"getHeaderStatus() === 'In-Progress'\">\r\n\r\n <button *ngIf=\"closeBtn\" [disabled]=\"closeDisabled\" class=\"btn btn-sm btn-primary mx-2\"\r\n (click)=\"stopReview()\">Close\r\n Ticket</button>\r\n </span>\r\n\r\n <span *ngIf=\"ticketData.status === 'Tange review done'\"><button\r\n class=\"btn btn-sm btn-primary mx-2\" (click)=\"startAudit()\">Start\r\n Audit</button></span>\r\n <span>\r\n\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 <path\r\n d=\"M12 13C12.5523 13 13 12.5523 13 12C13 11.4477 12.5523 11 12 11C11.4477 11 11 11.4477 11 12C11 12.5523 11.4477 13 12 13Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M12 6C12.5523 6 13 5.55228 13 5C13 4.44772 12.5523 4 12 4C11.4477 4 11 4.44772 11 5C11 5.55228 11.4477 6 12 6Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M12 20C12.5523 20 13 19.5523 13 19C13 18.4477 12.5523 18 12 18C11.4477 18 11 18.4477 11 19C11 19.5523 11.4477 20 12 20Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-4 \">\r\n <div class=\"row mb-6\">\r\n\r\n <div class=\"col-2 card-title-label my-2\">Store Name</div>\r\n <div class=\"col-1 font-bold my-2\">:</div>\r\n <div class=\"col-3 card-title-value my-2\">{{ticketData?.storeName}}</div>\r\n <div class=\"col-2 card-title-label my-2\">Ticket ID</div>\r\n <div class=\"col-1 font-bold my-2\">:</div>\r\n <div class=\"col-3 card-title-value my-2\">{{ticketData?.ticketId}}</div>\r\n <div class=\"col-2 card-title-label my-2\">Status</div>\r\n <div class=\"col-1 font-bold my-2\">:</div>\r\n\r\n <div class=\"col-3 my-2\"> <span class=\"badge mx-2\"\r\n [ngClass]=\"getStatusBadgeClass(getHeaderStatus())\">\r\n {{ getHeaderStatus() | titlecase }}\r\n </span></div>\r\n\r\n <div class=\"col-2 card-title-label my-2\">Due Date</div>\r\n <div class=\"col-1 font-bold my-2\">:</div>\r\n <div class=\"col-3 card-title-value my-2\">04 Dec 2025</div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"card-layer\">\r\n <div class=\"d-flex justify-content-between align-items-start w-100\">\r\n\r\n <!-- LEFT SIDE -->\r\n <h3 class=\"card-title align-items-start flex-column mb-0\">\r\n <div class=\"card-label\">Ticket Status</div>\r\n <div class=\"text-sub mb-2\">Logs for each revision of the ticket.</div>\r\n </h3>\r\n\r\n <!-- RIGHT SIDE -->\r\n <div class=\"cursor-pointer\">\r\n <span *ngIf=\"arrowshow\" (click)=\"openArrow()\"> <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_486_91902)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path d=\"M15 16.5L20 21.5L25 16.5\" stroke=\"#344054\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_486_91902\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_486_91902\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_486_91902\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></span>\r\n <span *ngIf=\"!arrowshow\" (click)=\"closeArrow()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\"\r\n fill=\"none\">\r\n <g filter=\"url(#filter0_d_486_91893)\">\r\n <rect x=\"38\" y=\"37\" width=\"36\" height=\"36\" rx=\"8\"\r\n transform=\"rotate(180 38 37)\" fill=\"white\" />\r\n <rect x=\"37.5\" y=\"36.5\" width=\"35\" height=\"35\" rx=\"7.5\"\r\n transform=\"rotate(180 37.5 36.5)\" stroke=\"#D0D5DD\" />\r\n <path d=\"M25 21.5L20 16.5L15 21.5\" stroke=\"#344054\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_486_91893\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_486_91893\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_486_91893\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <section *ngIf=\"!arrowshow\">\r\n\r\n <ng-container *ngFor=\"let ticket of footfallTicketsData\">\r\n\r\n <div *ngIf=\"ticket?._source as source\" class=\"ticket-container\">\r\n\r\n <!-- Actual Footfall Header -->\r\n <div class=\"ticket-header\">\r\n <div class=\"footfall-value\">{{source?.footfallCount}} <span\r\n class=\"footfall-label ms-3\">Actual Footfall</span>\r\n </div>\r\n <div class=\"issue-date\">Issue date : {{source?.createdAt | date:'dd MMM yyyy'}}\r\n </div>\r\n </div>\r\n\r\n <!-- Timeline Line -->\r\n <ng-container *ngFor=\"let mapping of source?.mappingInfo\">\r\n\r\n <!-- When ticket is CLOSED, skip the tagging row -->\r\n <ng-container\r\n *ngIf=\"mapping?.status !== 'closed' || mapping?.type !== 'tagging'\">\r\n\r\n <div *ngIf=\"mapping?.type === 'tagging' || mapping?.type === 'review'\"\r\n class=\"timeline\"></div>\r\n <div *ngIf=\"mapping?.type === 'tagging' || mapping?.type === 'review'\"\r\n class=\"user-info ms-4\">\r\n\r\n <div class=\"avatar avatar-text light-primary p-3\">\r\n {{ getInitialsFromEmail(mapping?.createdByEmail ||\r\n source?.createdByEmail) }}\r\n </div>\r\n\r\n <div>\r\n <div class=\"user-name\">\r\n <span *ngIf=\"mapping?.type === 'tagging'\">\r\n Ticket created by\r\n </span>\r\n <span *ngIf=\"mapping?.type === 'review'\">\r\n Reviewed by\r\n </span>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"user-email\">\r\n {{ mapping?.createdByEmail || source?.createdByEmail }} \u2022 {{ (mapping?.createdAt || source?.createdAt) | date:'HH:mm:ss \u2013dd MMM yyyy' }}\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"timeline\"></div>\r\n\r\n <!-- Show revision card only when NOT closed & type is tagging -->\r\n <div class=\"revision-card\"\r\n *ngIf=\"mapping?.type === 'tagging' || mapping?.type === 'review'\">\r\n <div class=\"values-row\">\r\n <div class=\"value-block\">\r\n <div class=\"value\">\r\n {{ mapping?.revicedFootfall === null ? '--' :\r\n mapping?.revicedFootfall }}\r\n </div>\r\n <div class=\"label fw-bold\">Revised Footfall</div>\r\n </div>\r\n\r\n <div class=\"value-block\">\r\n <div class=\"value accuracy down\">\r\n {{ mapping?.revicedPerc || source?.revicedPerc || '--' }}\r\n <span class=\"ms-1\">\r\n <!-- arrow svg -->\r\n </span>\r\n </div>\r\n <div class=\"label fw-bold pt-1\">Accuracy</div>\r\n </div>\r\n\r\n <div class=\"timeline-new my-2\"></div>\r\n\r\n <div class=\"value-block\" *ngFor=\"let item of mapping?.count\">\r\n <div class=\"value\">\r\n {{ item?.value ?? '--' }}\r\n </div>\r\n <div class=\"label\">\r\n {{ item?.name }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n\r\n\r\n <!-- <div class=\"timeline\"></div> -->\r\n\r\n </div>\r\n </ng-container>\r\n </section>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 position-relative\">\r\n <div *ngIf=\"isCheckboxEnable\" class=\"pb-3 my-3 h-100 rounded-3 position-relative\">\r\n\r\n <input type=\"checkbox\" class=\"position-absolute absolute1 form-check-input\"\r\n [(ngModel)]=\"allSelected\" (change)=\"overallSelect($event)\" /><span class=\"ms-12\"> Select\r\n All</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isCheckboxEnable\" class=\"col-md-6 pe-8\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <select class=\"form-select\" aria-placeholder=\"show all\">\r\n <option value=\"all\">Show all</option>\r\n <option value=\"accept\">Accept</option>\r\n <option value=\"reject\">Reject</option>\r\n <option value=\"pending\">Pending</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <button [disabled]=\"!overallSelectedIds?.length\" class=\"btn btn-outline bg-white w-100\"\r\n (click)=\"popupOpen('rejected')\">\r\n\r\n {{ (selectedRole === 'approver' || selectedRole === 'reviewer') ? 'Deny' : 'Reject'\r\n }}\r\n\r\n </button>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <button [disabled]=\"!overallSelectedIds?.length\" class=\"btn btn-outline bg-white w-100\"\r\n (click)=\"popupOpen('approved')\">\r\n\r\n {{ (selectedRole === 'approver' || selectedRole === 'reviewer') ? 'Approve' :\r\n 'Accept' }}\r\n\r\n </button>\r\n </div>\r\n <!-- <div class=\"col-md-4\">\r\n <button [disabled]=\"!overallSelectedIds?.length\" class=\"btn btn-outline bg-white w-100\" (click)=\"popupOpen('rejected')\">Deny</button>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <button [disabled]=\"!overallSelectedIds?.length\" class=\"btn btn-outline bg-white w-100\"\r\n (click)=\"popupOpen('approved')\">Approve</button>\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"bg-white\">\r\n <ng-container *ngFor=\"let ticket of footfallTicketsData\">\r\n <div *ngIf=\"ticket?._source as source\" class=\"my-5\">\r\n\r\n <div *ngIf=\"hasRevopsType('duplicate')\" class=\"layers\">\r\n <!-- Header Section -->\r\n <div class=\"card-header min-h-25px pt-3\">\r\n <h3 class=\"text-lg font-semibold mb-4\">\r\n <span class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_730_76157)\">\r\n <path\r\n d=\"M3.75 11.25H3C2.60218 11.25 2.22064 11.092 1.93934 10.8107C1.65804 10.5294 1.5 10.1478 1.5 9.75V3C1.5 2.60218 1.65804 2.22064 1.93934 1.93934C2.22064 1.65804 2.60218 1.5 3 1.5H9.75C10.1478 1.5 10.5294 1.65804 10.8107 1.93934C11.092 2.22064 11.25 2.60218 11.25 3V3.75M8.25 6.75H15C15.8284 6.75 16.5 7.42157 16.5 8.25V15C16.5 15.8284 15.8284 16.5 15 16.5H8.25C7.42157 16.5 6.75 15.8284 6.75 15V8.25C6.75 7.42157 7.42157 6.75 8.25 6.75Z\"\r\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_730_76157\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n Duplicates\r\n </h3>\r\n </div>\r\n\r\n <!-- Body Section -->\r\n <ng-container *ngFor=\"let mapping of source?.mappingInfo\">\r\n <!-- Body Section -->\r\n <ng-container *ngIf=\"mapping?.type ===viewMode\">\r\n <ng-container *ngFor=\"let original of mapping?.revisedDetail\">\r\n <div *ngIf=\"original?.isParent && original?.revopsType ==='duplicate'\"\r\n class=\"card-body bg-white layers py-5 px-0 m-3\">\r\n <div class=\"my-4\">\r\n <!-- Original Image -->\r\n <div class=\"duplicate-head px-5 my-3\">Original image\r\n </div>\r\n <div class=\"row px-5\">\r\n <div class=\"col-md-4 relative\">\r\n <div\r\n class=\"pb-3 img-border border border-1 h-100 rounded-3\">\r\n\r\n <img [src]=\"imageUrl + original?.filePath\" alt=\"\"\r\n class=\"w-100 rounded border\" />\r\n <div class=\"desc-title ms-2 my-2\">Tango ID: {{\r\n original.tempId\r\n }}</div>\r\n <div class=\"desc-value ms-2\">Entry Time: {{\r\n getFormattedEntryTime(original?.entryTime) }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"separator separator-dashed mt-3 mb-5\"></div>\r\n <div class=\"row px-5\">\r\n <h5 class=\"duplicate-head my-3 fs-6\">Tagged Duplicates</h5>\r\n <div *ngIf=\"isCheckboxEnable\" class=\"my-3\">\r\n <input type=\"checkbox\"\r\n [checked]=\"areAllDuplicatesSelected(original)\"\r\n (change)=\"onToggleSelectAllDuplicates(original, $event)\" />\r\n <label class=\"ms-2\">Select All</label>\r\n </div>\r\n <div *ngFor=\"let duplicate of original?.duplicateImage; let i = index\"\r\n class=\"col-md-3 mb-3 position-relative\">\r\n <div class=\"pb-3 h-100 rounded-3 position-relative\"\r\n [ngClass]=\"{\r\n 'layer-approved': isApproved(duplicate),\r\n 'layer-rejected': isRejected(duplicate),\r\n 'img-border border border-1': !isApproved(duplicate) && !isRejected(duplicate)}\">\r\n <!-- Checkbox -->\r\n <div *ngIf=\"isCheckboxEnable\">\r\n <input type=\"checkbox\"\r\n *ngIf=\"!isLockedByReviewer(duplicate)\"\r\n style=\"right: 5px ; margin: 10px 5px 4px !important;\"\r\n [checked]=\"isDuplicateSelected(original.tempId, duplicate.tempId)\"\r\n (change)=\"onDuplicateCheckboxChange(original.tempId, duplicate.tempId, $event)\"\r\n class=\"position-absolute form-check-input duplicate-checkbox\" />\r\n <span class=\"position-absolute absolute\"\r\n *ngIf=\"isLockedByReviewer(duplicate)\"\r\n (click)=\"resetCheckbox('duplicate', duplicate)\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"19\" height=\"19\" viewBox=\"0 0 19 19\"\r\n fill=\"none\">\r\n <g filter=\"url(#filter0_d_2023_13718)\">\r\n <rect x=\"1.11133\" y=\"0.555664\"\r\n width=\"16\" height=\"16\" rx=\"2\"\r\n fill=\"white\" />\r\n <rect x=\"1.38911\" y=\"0.833442\"\r\n width=\"15.4444\" height=\"15.4444\"\r\n rx=\"1.72222\" stroke=\"#D0D5DD\"\r\n stroke-width=\"0.555556\" />\r\n <path d=\"M5.87109 8.55566H12.3526\"\r\n stroke=\"#344054\"\r\n stroke-width=\"0.927778\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2023_13718\"\r\n x=\"0.00021708\" y=\"0.00010854\"\r\n width=\"18.2222\" height=\"18.2222\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\"\r\n result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"0.555556\" />\r\n <feGaussianBlur\r\n stdDeviation=\"0.555556\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\"\r\n in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_2023_13718\" />\r\n <feBlend mode=\"normal\"\r\n in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_2023_13718\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n <!-- (change)=\"onImageCheckboxChange(duplicate.tempId, 'duplicate', 'original')\" -->\r\n <!-- Duplicate Image -->\r\n <img [src]=\"imageUrl + duplicate.filePath\" alt=\"\"\r\n (click)=\"openImagePreview(original.duplicateImage, i, 'Tagged Duplicates')\"\r\n class=\"w-100 rounded border duplicate-image\" />\r\n\r\n <!-- Duplicate Info -->\r\n <div\r\n class=\"row my-2\">\r\n <div class=\"col-9\">\r\n <div class=\"desc-title ms-2 my-2\">\r\n Tango ID: {{ duplicate.tempId }}\r\n \r\n <span\r\n *ngIf=\"getAction(duplicate, 'review')?.action === 'approved'\"\r\n class=\"ms-2\"><svg style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\r\n <rect y=\"0.5\" width=\"10\" height=\"10\"\r\n rx=\"5\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M7.1222 3.57919L4.13887 6.45836L3.3472 5.61253C3.20137 5.47503 2.9722 5.46669 2.80553 5.58336C2.64303 5.70419 2.5972 5.91669 2.6972 6.08753L3.6347 7.61253C3.72637 7.75419 3.8847 7.84169 4.06387 7.84169C4.2347 7.84169 4.3972 7.75419 4.48887 7.61253C4.63887 7.41669 7.50137 4.00419 7.50137 4.00419C7.87637 3.62086 7.4222 3.28336 7.1222 3.57503V3.57919Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"getAction(duplicate, 'review')?.action === 'rejected'\"\r\n class=\"ms-2\"><svg style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1428_59484)\">\r\n <path\r\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n fill=\"#FEE4E2\" />\r\n <path\r\n d=\"M8.09961 5L5.09961 8M5.09961 5L8.09961 8M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n stroke=\"#D92D20\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1428_59484\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(0.599609 0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n \r\n </div>\r\n \r\n <div class=\"desc-value ms-2\">Entry Time: {{\r\n getFormattedEntryTime(duplicate.entryTime) }}\r\n </div>\r\n </div>\r\n <div class=\"col-3\">\r\n <span\r\n *ngIf=\"getAction(duplicate, 'approve')?.action === 'approved'\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"37\"\r\n height=\"37\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect width=\"24\" height=\"24\" rx=\"12\"\r\n fill=\"#D1FADF\" />\r\n <g clip-path=\"url(#clip0_486_94051)\">\r\n <path\r\n d=\"M9.5 17H8C7.73478 17 7.48043 16.8946 7.29289 16.7071C7.10536 16.5196 7 16.2652 7 16V12.5C7 12.2348 7.10536 11.9804 7.29289 11.7929C7.48043 11.6054 7.73478 11.5 8 11.5H9.5M13 10.5V8.5C13 8.10218 12.842 7.72064 12.5607 7.43934C12.2794 7.15804 11.8978 7 11.5 7L9.5 11.5V17H15.14C15.3812 17.0027 15.6152 16.9182 15.799 16.762C15.9827 16.6058 16.1038 16.3885 16.14 16.15L16.83 11.65C16.8518 11.5067 16.8421 11.3603 16.8017 11.2211C16.7613 11.0819 16.6911 10.9531 16.5959 10.8438C16.5008 10.7344 16.383 10.647 16.2508 10.5876C16.1185 10.5283 15.975 10.4984 15.83 10.5H13Z\"\r\n stroke=\"#039855\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94051\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n \r\n </span>\r\n <span\r\n *ngIf=\"getAction(duplicate, 'approve')?.action === 'rejected'\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"37\"\r\n height=\"37\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect width=\"24\" height=\"24\" rx=\"12\"\r\n fill=\"#FEE4E2\" />\r\n <g clip-path=\"url(#clip0_486_94090)\">\r\n <path\r\n d=\"M14.5015 7.00006H15.8365C16.1195 6.99505 16.3944 7.09413 16.6092 7.27847C16.8239 7.46281 16.9635 7.71959 17.0015 8.00006V11.5001C16.9635 11.7805 16.8239 12.0373 16.6092 12.2216C16.3944 12.406 16.1195 12.5051 15.8365 12.5001H14.5015M11.0015 13.5001V15.5001C11.0015 15.8979 11.1595 16.2794 11.4408 16.5607C11.7221 16.842 12.1037 17.0001 12.5015 17.0001L14.5015 12.5001V7.00006H8.86148C8.62032 6.99733 8.38629 7.08186 8.20253 7.23806C8.01876 7.39426 7.89764 7.61161 7.86148 7.85006L7.17148 12.3501C7.14973 12.4934 7.15939 12.6397 7.19981 12.7789C7.24023 12.9181 7.31043 13.0469 7.40555 13.1563C7.50067 13.2657 7.61844 13.3531 7.75069 13.4124C7.88295 13.4718 8.02653 13.5017 8.17148 13.5001H11.0015Z\"\r\n stroke=\"#D92D20\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94090\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg> </span>\r\n </div>\r\n </div>\r\n <!-- Duplicate Reason -->\r\n <!-- <div class=\"duplicate-reason ms-2 mt-2\">\r\n <small class=\"text-muted\">{{ duplicate.reason }}</small>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- Status Icons -->\r\n\r\n <div class=\"card-footer py-5\">\r\n <div class=\"comments-accordion\">\r\n <!-- Accordion Header -->\r\n <div class=\"accordion-header\" (click)=\"toggleCommentsAccordion()\">\r\n <div class=\"d-flex justify-content-start align-items-center w-100\">\r\n <span class=\"comments-count\">{{ comments?.length }} Comments</span>\r\n <div class=\"accordion-arrow ms-3\">\r\n <svg [class.rotated]=\"commentsAccordionOpen\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M4 6L8 10L12 6\" stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Accordion Body -->\r\n <div class=\"accordion-body\" *ngIf=\"commentsAccordionOpen\">\r\n <div *ngFor=\"let c of comments\" class=\"comment-thread d-flex mb-4\">\r\n <!-- avatar -->\r\n <img class=\"comment-avatar me-3\" [src]=\"c.avatar\" alt=\"avatar\" />\r\n\r\n <!-- content -->\r\n <div>\r\n <div class=\"fw-semibold\">{{ c.email }}</div>\r\n <div class=\"text-muted small\">\r\n {{ c.time | date:'hh:mm:ss a - dd MMM yyyy' }}\r\n </div>\r\n\r\n <!-- optional main line -->\r\n <p class=\"mb-2 mt-2\" *ngIf=\"c.mainText\">\r\n {{ c.mainText }}\r\n </p>\r\n\r\n <!-- Marked as \u201C\u2026\u201D line -->\r\n <p class=\"mb-1\" *ngIf=\"c.statusLabel\">\r\n Marked as\r\n <span [ngClass]=\"'text-' + c.statusType\">\r\n \u201C{{ c.statusLabel }}\u201D\r\n </span>\r\n </p>\r\n\r\n <!-- note -->\r\n <p class=\"mb-2\" *ngIf=\"c.note\">\r\n {{ c.note }}\r\n </p>\r\n\r\n <!-- image cards -->\r\n <div class=\"d-flex gap-2 flex-wrap\">\r\n <div *ngFor=\"let img of c.images\" class=\"tango-card\">\r\n <div class=\"tango-image\"\r\n [style.backgroundImage]=\"'url(' + img.url + ')'\"></div>\r\n\r\n <div class=\"tango-meta\">\r\n <div class=\"small\">Tango ID: {{ img.tangoId }}\r\n <span *ngIf=\"img.status === 'approve'\"\r\n class=\"status-dot status-approve\"></span>\r\n <span *ngIf=\"img.status === 'reject'\"\r\n class=\"status-dot status-reject\"></span>\r\n </div>\r\n <div class=\"small text-muted\">Entry time: {{\r\n img.entryTime }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- +N more card -->\r\n <div *ngIf=\"c.moreCount > 0\"\r\n class=\"tango-card more-card d-flex align-items-center justify-content-center\">\r\n +{{ c.moreCount }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- \r\n <div *ngIf=\"source?.duplicateImages?.length\" class=\"my-7 d-flex justify-content-end\"\r\n role=\"group\">\r\n <button [disabled]=\"!duplicateACCount\" class=\"btn btn-outline me-1\"\r\n (click)=\"popupOpen('rejected','duplicate')\">Reject</button>\r\n <button [disabled]=\"!duplicateACCount\" class=\"btn btn-primary ms-1\"\r\n (click)=\"popupOpen('approved','duplicate')\">Approve</button>\r\n </div> -->\r\n <!-- <div *ngIf=\"source?.duplicateImages?.length\" class=\"separator separator-dashed mt-3 mb-5\"></div> -->\r\n\r\n <div class=\"layers my-2\" *ngIf=\"hasRevopsType('employee')\">\r\n <div class=\"card-header min-h-25px pt-3\">\r\n <div class=\"duplicate-head text-lg my-3\">\r\n <!-- icon here -->\r\n Employee/Staff\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"isCheckboxEnable\" class=\"ms-3 my-3\">\r\n <input type=\"checkbox\" [(ngModel)]=\"selectAllByType.employee\"\r\n (change)=\"onSelectAll('employee', $event)\">\r\n <label>Select All</label>\r\n </div>\r\n\r\n <!-- loop over tickets -->\r\n\r\n\r\n <ng-container *ngFor=\"let mapping of source?.mappingInfo\">\r\n <div *ngIf=\"mapping?.type === viewMode\" class=\"card-body bg-white layers p-5 m-3\">\r\n <div class=\"row\">\r\n <ng-container *ngFor=\"let original of mapping?.revisedDetail\">\r\n\r\n <div *ngIf=\"original?.revopsType === 'employee'\"\r\n class=\"col-md-3 mb-3 position-relative\">\r\n\r\n <div class=\"pb-3 h-100 rounded-3 position-relative\" [ngClass]=\"{\r\n 'layer-approved': isApproved(original),\r\n 'layer-rejected': isRejected(original),\r\n 'img-border border border-1': !isApproved(original) && !isRejected(original)}\">\r\n <div *ngIf=\"isCheckboxEnable\">\r\n\r\n <input *ngIf=\"!isLockedByReviewer(original)\" type=\"checkbox\"\r\n class=\"position-absolute absolute form-check-input\"\r\n [checked]=\"selectedByType.employee.includes(original?.tempId)\"\r\n (change)=\"onImageCheckboxChange('employee', original.tempId)\" />\r\n <span class=\"position-absolute absolute\"\r\n *ngIf=\"isLockedByReviewer(original)\"\r\n (click)=\"resetCheckbox('employee', original)\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\"\r\n height=\"19\" viewBox=\"0 0 19 19\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_2023_13718)\">\r\n <rect x=\"1.11133\" y=\"0.555664\" width=\"16\"\r\n height=\"16\" rx=\"2\" fill=\"white\" />\r\n <rect x=\"1.38911\" y=\"0.833442\" width=\"15.4444\"\r\n height=\"15.4444\" rx=\"1.72222\"\r\n stroke=\"#D0D5DD\" stroke-width=\"0.555556\" />\r\n <path d=\"M5.87109 8.55566H12.3526\"\r\n stroke=\"#344054\" stroke-width=\"0.927778\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2023_13718\" x=\"0.00021708\"\r\n y=\"0.00010854\" width=\"18.2222\"\r\n height=\"18.2222\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\"\r\n result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"0.555556\" />\r\n <feGaussianBlur stdDeviation=\"0.555556\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\"\r\n in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_2023_13718\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_2023_13718\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n\r\n </div>\r\n\r\n <img [src]=\"imageUrl + original?.filePath\" alt=\"\"\r\n class=\"w-100 rounded border\" />\r\n <div\r\n class=\"row my-2\">\r\n <div class=\"col-10\">\r\n <div class=\"desc-title ms-2 my-2\">\r\n Tango ID: {{ original.tempId }}\r\n <span\r\n *ngIf=\"getAction(original, 'review')?.action === 'approved'\"\r\n class=\"ms-2\"><svg style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\r\n <rect y=\"0.5\" width=\"10\" height=\"10\" rx=\"5\"\r\n fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M7.1222 3.57919L4.13887 6.45836L3.3472 5.61253C3.20137 5.47503 2.9722 5.46669 2.80553 5.58336C2.64303 5.70419 2.5972 5.91669 2.6972 6.08753L3.6347 7.61253C3.72637 7.75419 3.8847 7.84169 4.06387 7.84169C4.2347 7.84169 4.3972 7.75419 4.48887 7.61253C4.63887 7.41669 7.50137 4.00419 7.50137 4.00419C7.87637 3.62086 7.4222 3.28336 7.1222 3.57503V3.57919Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"getAction(original, 'review')?.action === 'rejected'\"\r\n class=\"ms-2\"><svg style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1428_59484)\">\r\n <path\r\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n fill=\"#FEE4E2\" />\r\n <path\r\n d=\"M8.09961 5L5.09961 8M5.09961 5L8.09961 8M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n stroke=\"#D92D20\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1428_59484\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(0.599609 0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </div>\r\n <div class=\"desc-value ms-2\">\r\n Entry Time: {{\r\n getFormattedEntryTime(original?.entryTime) }}\r\n </div>\r\n </div>\r\n <div class=\"col-2 ms-3\">\r\n <span\r\n *ngIf=\"getAction(original, 'approve')?.action === 'approved'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\r\n height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect width=\"24\" height=\"24\" rx=\"12\"\r\n fill=\"#D1FADF\" />\r\n <g clip-path=\"url(#clip0_486_94051)\">\r\n <path\r\n d=\"M9.5 17H8C7.73478 17 7.48043 16.8946 7.29289 16.7071C7.10536 16.5196 7 16.2652 7 16V12.5C7 12.2348 7.10536 11.9804 7.29289 11.7929C7.48043 11.6054 7.73478 11.5 8 11.5H9.5M13 10.5V8.5C13 8.10218 12.842 7.72064 12.5607 7.43934C12.2794 7.15804 11.8978 7 11.5 7L9.5 11.5V17H15.14C15.3812 17.0027 15.6152 16.9182 15.799 16.762C15.9827 16.6058 16.1038 16.3885 16.14 16.15L16.83 11.65C16.8518 11.5067 16.8421 11.3603 16.8017 11.2211C16.7613 11.0819 16.6911 10.9531 16.5959 10.8438C16.5008 10.7344 16.383 10.647 16.2508 10.5876C16.1185 10.5283 15.975 10.4984 15.83 10.5H13Z\"\r\n stroke=\"#039855\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94051\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"getAction(original, 'approve')?.action === 'rejected'\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\r\n height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect width=\"24\" height=\"24\" rx=\"12\"\r\n fill=\"#FEE4E2\" />\r\n <g clip-path=\"url(#clip0_486_94090)\">\r\n <path\r\n d=\"M14.5015 7.00006H15.8365C16.1195 6.99505 16.3944 7.09413 16.6092 7.27847C16.8239 7.46281 16.9635 7.71959 17.0015 8.00006V11.5001C16.9635 11.7805 16.8239 12.0373 16.6092 12.2216C16.3944 12.406 16.1195 12.5051 15.8365 12.5001H14.5015M11.0015 13.5001V15.5001C11.0015 15.8979 11.1595 16.2794 11.4408 16.5607C11.7221 16.842 12.1037 17.0001 12.5015 17.0001L14.5015 12.5001V7.00006H8.86148C8.62032 6.99733 8.38629 7.08186 8.20253 7.23806C8.01876 7.39426 7.89764 7.61161 7.86148 7.85006L7.17148 12.3501C7.14973 12.4934 7.15939 12.6397 7.19981 12.7789C7.24023 12.9181 7.31043 13.0469 7.40555 13.1563C7.50067 13.2657 7.61844 13.3531 7.75069 13.4124C7.88295 13.4718 8.02653 13.5017 8.17148 13.5001H11.0015Z\"\r\n stroke=\"#D92D20\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94090\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <div class=\"card-footer py-5\">\r\n <div class=\"comments-accordion\">\r\n <!-- Accordion Header -->\r\n <div class=\"accordion-header\" (click)=\"toggleCommentsAccordion()\">\r\n <div class=\"d-flex justify-content-start align-items-center w-100\">\r\n <div class=\"comments-title\">\r\n <span class=\"comments-count\">{{ comments?.length }} Comments</span>\r\n\r\n </div>\r\n <div class=\"accordion-arrow ms-3\">\r\n <svg [class.rotated]=\"commentsAccordionOpen\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M4 6L8 10L12 6\" stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Accordion Content -->\r\n <div class=\"accordion-body\" *ngIf=\"commentsAccordionOpen\">\r\n <div *ngFor=\"let c of comments\" class=\"comment-thread d-flex mb-4\">\r\n <!-- avatar -->\r\n <img class=\"comment-avatar me-3\" [src]=\"c.avatar\" alt=\"avatar\" />\r\n\r\n <!-- content -->\r\n <div>\r\n <div class=\"fw-semibold\">{{ c.email }}</div>\r\n <div class=\"text-muted small\">\r\n {{ c.time | date:'hh:mm:ss a - dd MMM yyyy' }}\r\n </div>\r\n\r\n <!-- optional main line -->\r\n <p class=\"mb-2 mt-2\" *ngIf=\"c.mainText\">\r\n {{ c.mainText }}\r\n </p>\r\n\r\n <!-- Marked as \u201C\u2026\u201D line -->\r\n <p class=\"mb-1\" *ngIf=\"c.statusLabel\">\r\n Marked as\r\n <span [ngClass]=\"'text-' + c.statusType\">\r\n \u201C{{ c.statusLabel }}\u201D\r\n </span>\r\n </p>\r\n\r\n <!-- note -->\r\n <p class=\"mb-2\" *ngIf=\"c.note\">\r\n {{ c.note }}\r\n </p>\r\n\r\n <!-- image cards -->\r\n <div class=\"d-flex gap-2 flex-wrap\">\r\n <div *ngFor=\"let img of c.images\" class=\"tango-card\">\r\n <div class=\"tango-image\"\r\n [style.backgroundImage]=\"'url(' + img.url + ')'\"></div>\r\n\r\n <div class=\"tango-meta\">\r\n <div class=\"small\">Tango ID: {{ img.tangoId }}\r\n <span *ngIf=\"img.status === 'approve'\"\r\n class=\"status-dot status-approve\"></span>\r\n <span *ngIf=\"img.status === 'reject'\"\r\n class=\"status-dot status-reject\"></span>\r\n </div>\r\n <div class=\"small text-muted\">Entry time: {{\r\n img.entryTime }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- +N more card -->\r\n <div *ngIf=\"c.moreCount > 0\"\r\n class=\"tango-card more-card d-flex align-items-center justify-content-center\">\r\n +{{ c.moreCount }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"layers my-2\" *ngIf=\"hasRevopsType('houseKeeping')\">\r\n <div class=\"card-header min-h-25px pt-3\">\r\n <div class=\"duplicate-head text-lg my-3\"><span class=\"me-2\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M7.51995 0.613065C8.33739 -0.204355 9.66267 -0.204355 10.4801 0.613065L17.387 7.51995C18.2043 8.33739 18.2043 9.66267 17.387 10.4801L10.4801 17.387C9.66267 18.2043 8.33739 18.2043 7.51995 17.387L5.54626 15.4133L3.73708 17.2224C2.91966 18.0399 1.59436 18.0399 0.776944 17.2224C-0.0404767 16.4051 -0.0404767 15.0797 0.776944 14.2624L2.58612 12.4531L0.613065 10.4801C-0.204355 9.66267 -0.204355 8.33739 0.613065 7.51995L7.51995 0.613065ZM9.49336 1.59978C9.22088 1.32731 8.77909 1.32731 8.50661 1.59978L3.57286 6.53357L11.4665 14.4272L16.4002 9.49336C16.6727 9.22088 16.6727 8.77909 16.4002 8.5067L12.9465 5.05286L11.7952 6.20403C11.5228 6.4765 11.0811 6.4765 10.8086 6.20403C10.5361 5.93155 10.5361 5.48978 10.8086 5.21731L11.9597 4.06614L10.9732 3.07964L8.17757 5.87533C7.90509 6.1478 7.46329 6.1478 7.19081 5.87533C6.91833 5.60286 6.91833 5.16109 7.19081 4.88862L9.9865 2.09293L9.49336 1.59978ZM10.4797 15.4139L2.58615 7.52028L1.59978 8.5067C1.3273 8.77909 1.3273 9.22088 1.59978 9.49336L8.50661 16.4002C8.77909 16.6727 9.22088 16.6727 9.49336 16.4002L10.4797 15.4139ZM3.57275 13.4399L1.76366 15.249C1.49119 15.5215 1.49119 15.9633 1.76366 16.2358C2.03613 16.5082 2.4779 16.5082 2.75037 16.2358L4.55946 14.4266L3.57275 13.4399Z\"\r\n fill=\"#475467\" />\r\n </svg></span> House Keeping\r\n\r\n </div>\r\n </div>\r\n <div *ngIf=\"isCheckboxEnable\" class=\"ms-3 my-3\">\r\n <input type=\"checkbox\" [(ngModel)]=\"selectAllByType.houseKeeping\"\r\n (change)=\"onSelectAll('houseKeeping',$event)\">\r\n <label>Select All</label>\r\n </div>\r\n <ng-container *ngFor=\"let mapping of source?.mappingInfo\">\r\n <!-- Body Section -->\r\n <div *ngIf=\"mapping?.type ===viewMode\" class=\"card-body bg-white layers p-5 m-3\">\r\n\r\n <div class=\"row\">\r\n <ng-container *ngFor=\"let original of mapping?.revisedDetail\">\r\n <div *ngIf=\"original?.revopsType ==='houseKeeping'\"\r\n class=\"col-md-3 mb-3 position-relative\">\r\n <div class=\"pb-3 h-100 rounded-3 position-relative\" [ngClass]=\"{\r\n 'layer-approved': isApproved(original),\r\n 'layer-rejected': isRejected(original),\r\n 'img-border border border-1': !isApproved(original) && !isRejected(original)}\">\r\n\r\n\r\n <!-- Top-right Checkbox -->\r\n <div *ngIf=\"isCheckboxEnable\">\r\n\r\n <input *ngIf=\"!isLockedByReviewer(original)\" type=\"checkbox\"\r\n class=\"position-absolute absolute form-check-input\"\r\n [checked]=\"selectedByType.houseKeeping.includes(original?.tempId)\"\r\n (change)=\"onImageCheckboxChange('houseKeeping', original.tempId)\" />\r\n <span class=\"position-absolute absolute\"\r\n *ngIf=\"isLockedByReviewer(original)\"\r\n (click)=\"resetCheckbox('houseKeeping', original)\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\"\r\n height=\"19\" viewBox=\"0 0 19 19\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_2023_13718)\">\r\n <rect x=\"1.11133\" y=\"0.555664\" width=\"16\"\r\n height=\"16\" rx=\"2\" fill=\"white\" />\r\n <rect x=\"1.38911\" y=\"0.833442\" width=\"15.4444\"\r\n height=\"15.4444\" rx=\"1.72222\"\r\n stroke=\"#D0D5DD\" stroke-width=\"0.555556\" />\r\n <path d=\"M5.87109 8.55566H12.3526\"\r\n stroke=\"#344054\" stroke-width=\"0.927778\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2023_13718\" x=\"0.00021708\"\r\n y=\"0.00010854\" width=\"18.2222\"\r\n height=\"18.2222\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\"\r\n result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"0.555556\" />\r\n <feGaussianBlur stdDeviation=\"0.555556\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\"\r\n in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_2023_13718\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_2023_13718\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n\r\n\r\n <img [src]=\"imageUrl + original?.filePath\" alt=\"\"\r\n class=\"w-100 rounded border\" />\r\n <div\r\n class=\"row my-2\">\r\n <div class=\"col-10\">\r\n <div class=\"desc-title ms-2 my-2\">Tango ID: {{\r\n original.tempId\r\n }}\r\n <span\r\n *ngIf=\"getAction(original, 'review')?.action === 'approved'\"\r\n class=\"ms-2\"><svg style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\r\n <rect y=\"0.5\" width=\"10\" height=\"10\" rx=\"5\"\r\n fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M7.1222 3.57919L4.13887 6.45836L3.3472 5.61253C3.20137 5.47503 2.9722 5.46669 2.80553 5.58336C2.64303 5.70419 2.5972 5.91669 2.6972 6.08753L3.6347 7.61253C3.72637 7.75419 3.8847 7.84169 4.06387 7.84169C4.2347 7.84169 4.3972 7.75419 4.48887 7.61253C4.63887 7.41669 7.50137 4.00419 7.50137 4.00419C7.87637 3.62086 7.4222 3.28336 7.1222 3.57503V3.57919Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"getAction(original, 'review')?.action === 'rejected'\"\r\n class=\"ms-2\"><svg style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1428_59484)\">\r\n <path\r\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n fill=\"#FEE4E2\" />\r\n <path\r\n d=\"M8.09961 5L5.09961 8M5.09961 5L8.09961 8M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n stroke=\"#D92D20\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1428_59484\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(0.599609 0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </div>\r\n <div class=\"desc-value ms-2\">Entry Time: {{\r\n getFormattedEntryTime(original?.entryTime) }}</div>\r\n</div>\r\n <div class=\"col-2 ms-3\">\r\n <span\r\n *ngIf=\"getAction(original, 'approve')?.action === 'approved'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\r\n height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect width=\"24\" height=\"24\" rx=\"12\"\r\n fill=\"#D1FADF\" />\r\n <g clip-path=\"url(#clip0_486_94051)\">\r\n <path\r\n d=\"M9.5 17H8C7.73478 17 7.48043 16.8946 7.29289 16.7071C7.10536 16.5196 7 16.2652 7 16V12.5C7 12.2348 7.10536 11.9804 7.29289 11.7929C7.48043 11.6054 7.73478 11.5 8 11.5H9.5M13 10.5V8.5C13 8.10218 12.842 7.72064 12.5607 7.43934C12.2794 7.15804 11.8978 7 11.5 7L9.5 11.5V17H15.14C15.3812 17.0027 15.6152 16.9182 15.799 16.762C15.9827 16.6058 16.1038 16.3885 16.14 16.15L16.83 11.65C16.8518 11.5067 16.8421 11.3603 16.8017 11.2211C16.7613 11.0819 16.6911 10.9531 16.5959 10.8438C16.5008 10.7344 16.383 10.647 16.2508 10.5876C16.1185 10.5283 15.975 10.4984 15.83 10.5H13Z\"\r\n stroke=\"#039855\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94051\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"getAction(original, 'approve')?.action === 'rejected'\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\r\n height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect width=\"24\" height=\"24\" rx=\"12\"\r\n fill=\"#FEE4E2\" />\r\n <g clip-path=\"url(#clip0_486_94090)\">\r\n <path\r\n d=\"M14.5015 7.00006H15.8365C16.1195 6.99505 16.3944 7.09413 16.6092 7.27847C16.8239 7.46281 16.9635 7.71959 17.0015 8.00006V11.5001C16.9635 11.7805 16.8239 12.0373 16.6092 12.2216C16.3944 12.406 16.1195 12.5051 15.8365 12.5001H14.5015M11.0015 13.5001V15.5001C11.0015 15.8979 11.1595 16.2794 11.4408 16.5607C11.7221 16.842 12.1037 17.0001 12.5015 17.0001L14.5015 12.5001V7.00006H8.86148C8.62032 6.99733 8.38629 7.08186 8.20253 7.23806C8.01876 7.39426 7.89764 7.61161 7.86148 7.85006L7.17148 12.3501C7.14973 12.4934 7.15939 12.6397 7.19981 12.7789C7.24023 12.9181 7.31043 13.0469 7.40555 13.1563C7.50067 13.2657 7.61844 13.3531 7.75069 13.4124C7.88295 13.4718 8.02653 13.5017 8.17148 13.5001H11.0015Z\"\r\n stroke=\"#D92D20\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94090\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"card-footer py-5\">\r\n <div class=\"comments-accordion\">\r\n <!-- Accordion Header -->\r\n <div class=\"accordion-header\" (click)=\"toggleCommentsAccordion()\">\r\n <div class=\"d-flex justify-content-start align-items-center w-100\">\r\n <div class=\"comments-title\">\r\n <span class=\"comments-count\">{{ comments?.length }} Comments</span>\r\n\r\n </div>\r\n <div class=\"accordion-arrow ms-3\">\r\n <svg [class.rotated]=\"commentsAccordionOpen\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M4 6L8 10L12 6\" stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Accordion Content -->\r\n <div class=\"accordion-body\" *ngIf=\"commentsAccordionOpen\">\r\n <div *ngFor=\"let c of comments\" class=\"comment-thread d-flex mb-4\">\r\n <!-- avatar -->\r\n <img class=\"comment-avatar me-3\" [src]=\"c.avatar\" alt=\"avatar\" />\r\n\r\n <!-- content -->\r\n <div>\r\n <div class=\"fw-semibold\">{{ c.email }}</div>\r\n <div class=\"text-muted small\">\r\n {{ c.time | date:'hh:mm:ss a - dd MMM yyyy' }}\r\n </div>\r\n\r\n <!-- optional main line -->\r\n <p class=\"mb-2 mt-2\" *ngIf=\"c.mainText\">\r\n {{ c.mainText }}\r\n </p>\r\n\r\n <!-- Marked as \u201C\u2026\u201D line -->\r\n <p class=\"mb-1\" *ngIf=\"c.statusLabel\">\r\n Marked as\r\n <span [ngClass]=\"'text-' + c.statusType\">\r\n \u201C{{ c.statusLabel }}\u201D\r\n </span>\r\n </p>\r\n\r\n <!-- note -->\r\n <p class=\"mb-2\" *ngIf=\"c.note\">\r\n {{ c.note }}\r\n </p>\r\n\r\n <!-- image cards -->\r\n <div class=\"d-flex gap-2 flex-wrap\">\r\n <div *ngFor=\"let img of c.images\" class=\"tango-card\">\r\n <div class=\"tango-image\"\r\n [style.backgroundImage]=\"'url(' + img.url + ')'\"></div>\r\n\r\n <div class=\"tango-meta\">\r\n <div class=\"small\">Tango ID: {{ img.tangoId }}\r\n <span *ngIf=\"img.status === 'approve'\"\r\n class=\"status-dot status-approve\"></span>\r\n <span *ngIf=\"img.status === 'reject'\"\r\n class=\"status-dot status-reject\"></span>\r\n </div>\r\n <div class=\"small text-muted\">Entry time: {{\r\n img.entryTime }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- +N more card -->\r\n <div *ngIf=\"c.moreCount > 0\"\r\n class=\"tango-card more-card d-flex align-items-center justify-content-center\">\r\n +{{ c.moreCount }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"layers my-2\" *ngIf=\"hasRevopsType('junk')\">\r\n <div class=\"card-header min-h-25px pt-3\">\r\n <div class=\"duplicate-head text-lg my-3\"><span class=\"me-2\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M7.51995 0.613065C8.33739 -0.204355 9.66267 -0.204355 10.4801 0.613065L17.387 7.51995C18.2043 8.33739 18.2043 9.66267 17.387 10.4801L10.4801 17.387C9.66267 18.2043 8.33739 18.2043 7.51995 17.387L5.54626 15.4133L3.73708 17.2224C2.91966 18.0399 1.59436 18.0399 0.776944 17.2224C-0.0404767 16.4051 -0.0404767 15.0797 0.776944 14.2624L2.58612 12.4531L0.613065 10.4801C-0.204355 9.66267 -0.204355 8.33739 0.613065 7.51995L7.51995 0.613065ZM9.49336 1.59978C9.22088 1.32731 8.77909 1.32731 8.50661 1.59978L3.57286 6.53357L11.4665 14.4272L16.4002 9.49336C16.6727 9.22088 16.6727 8.77909 16.4002 8.5067L12.9465 5.05286L11.7952 6.20403C11.5228 6.4765 11.0811 6.4765 10.8086 6.20403C10.5361 5.93155 10.5361 5.48978 10.8086 5.21731L11.9597 4.06614L10.9732 3.07964L8.17757 5.87533C7.90509 6.1478 7.46329 6.1478 7.19081 5.87533C6.91833 5.60286 6.91833 5.16109 7.19081 4.88862L9.9865 2.09293L9.49336 1.59978ZM10.4797 15.4139L2.58615 7.52028L1.59978 8.5067C1.3273 8.77909 1.3273 9.22088 1.59978 9.49336L8.50661 16.4002C8.77909 16.6727 9.22088 16.6727 9.49336 16.4002L10.4797 15.4139ZM3.57275 13.4399L1.76366 15.249C1.49119 15.5215 1.49119 15.9633 1.76366 16.2358C2.03613 16.5082 2.4779 16.5082 2.75037 16.2358L4.55946 14.4266L3.57275 13.4399Z\"\r\n fill=\"#475467\" />\r\n </svg></span> Junk\r\n\r\n </div>\r\n </div>\r\n <div *ngIf=\"isCheckboxEnable\" class=\"ms-3 my-3\">\r\n <input type=\"checkbox\" [(ngModel)]=\"selectAllByType.junk\"\r\n (change)=\"onSelectAll('junk',$event)\">\r\n <label>Select All</label>\r\n </div>\r\n <ng-container *ngFor=\"let mapping of source?.mappingInfo\">\r\n\r\n <!-- One card for all junk images in this mapping -->\r\n <div *ngIf=\"mapping?.type ===viewMode\" class=\"card-body bg-white layers p-5 m-3\">\r\n\r\n <div class=\"row\">\r\n <!-- Loop through all items in revisedDetail -->\r\n <ng-container *ngFor=\"let original of mapping?.revisedDetail\">\r\n\r\n <!-- Show only junk items as columns -->\r\n <div *ngIf=\"original?.revopsType === 'junk'\"\r\n class=\"col-md-3 mb-3 position-relative\">\r\n\r\n <div class=\"pb-3 h-100 rounded-3 position-relative\" [ngClass]=\"{\r\n 'layer-approved': isApproved(original),\r\n 'layer-rejected': isRejected(original),\r\n 'img-border border border-1': !isApproved(original) && !isRejected(original)}\">\r\n\r\n\r\n <!-- Top-right Checkbox -->\r\n <div *ngIf=\"isCheckboxEnable\">\r\n\r\n <input *ngIf=\"!isLockedByReviewer(original)\" type=\"checkbox\"\r\n class=\"position-absolute absolute form-check-input\"\r\n [checked]=\"selectedByType.junk.includes(original?.tempId)\"\r\n (change)=\"onImageCheckboxChange('junk', original.tempId)\" />\r\n <span class=\"position-absolute absolute\"\r\n *ngIf=\"isLockedByReviewer(original)\"\r\n (click)=\"resetCheckbox('junk', original)\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\"\r\n height=\"19\" viewBox=\"0 0 19 19\" fill=\"none\">\r\n <g filter=\"url(#filter0_d_2023_13718)\">\r\n <rect x=\"1.11133\" y=\"0.555664\" width=\"16\"\r\n height=\"16\" rx=\"2\" fill=\"white\" />\r\n <rect x=\"1.38911\" y=\"0.833442\" width=\"15.4444\"\r\n height=\"15.4444\" rx=\"1.72222\"\r\n stroke=\"#D0D5DD\" stroke-width=\"0.555556\" />\r\n <path d=\"M5.87109 8.55566H12.3526\"\r\n stroke=\"#344054\" stroke-width=\"0.927778\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2023_13718\" x=\"0.00021708\"\r\n y=\"0.00010854\" width=\"18.2222\"\r\n height=\"18.2222\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\"\r\n result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"0.555556\" />\r\n <feGaussianBlur stdDeviation=\"0.555556\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\"\r\n in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_2023_13718\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\r\n in2=\"effect1_dropShadow_2023_13718\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n\r\n <img [src]=\"imageUrl + original?.filePath\" alt=\"\"\r\n class=\"w-100 rounded border\" />\r\n <div\r\n class=\"row my-2\">\r\n <div class=\"col-9\">\r\n <div class=\"desc-title ms-2 my-2\">\r\n Tango ID: {{ original.tempId }}\r\n <span\r\n *ngIf=\"getAction(original, 'review')?.action === 'approved'\"\r\n class=\"ms-2\"><svg style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\r\n <rect y=\"0.5\" width=\"10\" height=\"10\" rx=\"5\"\r\n fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M7.1222 3.57919L4.13887 6.45836L3.3472 5.61253C3.20137 5.47503 2.9722 5.46669 2.80553 5.58336C2.64303 5.70419 2.5972 5.91669 2.6972 6.08753L3.6347 7.61253C3.72637 7.75419 3.8847 7.84169 4.06387 7.84169C4.2347 7.84169 4.3972 7.75419 4.48887 7.61253C4.63887 7.41669 7.50137 4.00419 7.50137 4.00419C7.87637 3.62086 7.4222 3.28336 7.1222 3.57503V3.57919Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"getAction(original, 'review')?.action === 'rejected'\r\n \" class=\"ms-2\"><svg style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1428_59484)\">\r\n <path\r\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n fill=\"#FEE4E2\" />\r\n <path\r\n d=\"M8.09961 5L5.09961 8M5.09961 5L8.09961 8M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n stroke=\"#D92D20\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1428_59484\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(0.599609 0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </div>\r\n\r\n <div class=\"desc-value ms-2\">\r\n Entry Time: {{\r\n getFormattedEntryTime(original?.entryTime) }}\r\n </div>\r\n </div>\r\n <div class=\"col-3\">\r\n <span\r\n *ngIf=\"getAction(original, 'approve')?.action === 'approved'\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"37\"\r\n height=\"37\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect width=\"24\" height=\"24\" rx=\"12\"\r\n fill=\"#D1FADF\" />\r\n <g clip-path=\"url(#clip0_486_94051)\">\r\n <path\r\n d=\"M9.5 17H8C7.73478 17 7.48043 16.8946 7.29289 16.7071C7.10536 16.5196 7 16.2652 7 16V12.5C7 12.2348 7.10536 11.9804 7.29289 11.7929C7.48043 11.6054 7.73478 11.5 8 11.5H9.5M13 10.5V8.5C13 8.10218 12.842 7.72064 12.5607 7.43934C12.2794 7.15804 11.8978 7 11.5 7L9.5 11.5V17H15.14C15.3812 17.0027 15.6152 16.9182 15.799 16.762C15.9827 16.6058 16.1038 16.3885 16.14 16.15L16.83 11.65C16.8518 11.5067 16.8421 11.3603 16.8017 11.2211C16.7613 11.0819 16.6911 10.9531 16.5959 10.8438C16.5008 10.7344 16.383 10.647 16.2508 10.5876C16.1185 10.5283 15.975 10.4984 15.83 10.5H13Z\"\r\n stroke=\"#039855\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94051\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n \r\n \r\n </span>\r\n <span\r\n *ngIf=\"getAction(original, 'approve')?.action === 'rejected'\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"37\"\r\n height=\"37\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect width=\"24\" height=\"24\" rx=\"12\"\r\n fill=\"#FEE4E2\" />\r\n <g clip-path=\"url(#clip0_486_94090)\">\r\n <path\r\n d=\"M14.5015 7.00006H15.8365C16.1195 6.99505 16.3944 7.09413 16.6092 7.27847C16.8239 7.46281 16.9635 7.71959 17.0015 8.00006V11.5001C16.9635 11.7805 16.8239 12.0373 16.6092 12.2216C16.3944 12.406 16.1195 12.5051 15.8365 12.5001H14.5015M11.0015 13.5001V15.5001C11.0015 15.8979 11.1595 16.2794 11.4408 16.5607C11.7221 16.842 12.1037 17.0001 12.5015 17.0001L14.5015 12.5001V7.00006H8.86148C8.62032 6.99733 8.38629 7.08186 8.20253 7.23806C8.01876 7.39426 7.89764 7.61161 7.86148 7.85006L7.17148 12.3501C7.14973 12.4934 7.15939 12.6397 7.19981 12.7789C7.24023 12.9181 7.31043 13.0469 7.40555 13.1563C7.50067 13.2657 7.61844 13.3531 7.75069 13.4124C7.88295 13.4718 8.02653 13.5017 8.17148 13.5001H11.0015Z\"\r\n stroke=\"#D92D20\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94090\">\r\n <rect width=\"12\" height=\"12\"\r\n fill=\"white\"\r\n transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <div class=\"card-footer py-5\">\r\n <div class=\"comments-accordion\">\r\n <!-- Accordion Header -->\r\n <div class=\"accordion-header\" (click)=\"toggleCommentsAccordion()\">\r\n <div class=\"d-flex justify-content-start align-items-center w-100\">\r\n <div class=\"comments-title\">\r\n <span class=\"comments-count\">{{ comments?.length }} Comments</span>\r\n\r\n </div>\r\n <div class=\"accordion-arrow ms-3\">\r\n <svg [class.rotated]=\"commentsAccordionOpen\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M4 6L8 10L12 6\" stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Accordion Content -->\r\n <div class=\"accordion-body\" *ngIf=\"commentsAccordionOpen\">\r\n <div *ngFor=\"let c of comments\" class=\"comment-thread d-flex mb-4\">\r\n <!-- avatar -->\r\n <img class=\"comment-avatar me-3\" [src]=\"c.avatar\" alt=\"avatar\" />\r\n\r\n <!-- content -->\r\n <div>\r\n <div class=\"fw-semibold\">{{ c.email }}</div>\r\n <div class=\"text-muted small\">\r\n {{ c.time | date:'hh:mm:ss a - dd MMM yyyy' }}\r\n </div>\r\n\r\n <!-- optional main line -->\r\n <p class=\"mb-2 mt-2\" *ngIf=\"c.mainText\">\r\n {{ c.mainText }}\r\n </p>\r\n\r\n <!-- Marked as \u201C\u2026\u201D line -->\r\n <p class=\"mb-1\" *ngIf=\"c.statusLabel\">\r\n Marked as\r\n <span [ngClass]=\"'text-' + c.statusType\">\r\n \u201C{{ c.statusLabel }}\u201D\r\n </span>\r\n </p>\r\n\r\n <!-- note -->\r\n <p class=\"mb-2\" *ngIf=\"c.note\">\r\n {{ c.note }}\r\n </p>\r\n\r\n <!-- image cards -->\r\n <div class=\"d-flex gap-2 flex-wrap\">\r\n <div *ngFor=\"let img of c.images\" class=\"tango-card\">\r\n <div class=\"tango-image\"\r\n [style.backgroundImage]=\"'url(' + img.url + ')'\"></div>\r\n\r\n <div class=\"tango-meta\">\r\n <div class=\"small\">Tango ID: {{ img.tangoId }}\r\n <span *ngIf=\"img.status === 'approve'\"\r\n class=\"status-dot status-approve\"></span>\r\n <span *ngIf=\"img.status === 'reject'\"\r\n class=\"status-dot status-reject\"></span>\r\n </div>\r\n <div class=\"small text-muted\">Entry time: {{\r\n img.entryTime }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- +N more card -->\r\n <div *ngIf=\"c.moreCount > 0\"\r\n class=\"tango-card more-card d-flex align-items-center justify-content-center\">\r\n +{{ c.moreCount }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div *ngIf=\"source?.houseKeeping?.length\" class=\"my-7 d-flex justify-content-end\"\r\n role=\"group\">\r\n <button [disabled]=\"!houseKeepingACCount\" class=\"btn btn-outline me-1\"\r\n (click)=\"popupOpen('rejected','houseKeeping')\">Reject</button>\r\n <button [disabled]=\"!houseKeepingACCount\" class=\"btn btn-primary ms-1\"\r\n (click)=\"popupOpen('approved','houseKeeping')\">Approve</button>\r\n </div> -->\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</section>\r\n\r\n\r\n<ng-template #zoomPopup let-model>\r\n <div class=\"p-4 m-4\">\r\n <div class=\"modal-header border-0 p-0 w-100 flex-column align-items-start\">\r\n\r\n <!-- Heading -->\r\n <h5 class=\"modal-title mb-2\">\r\n {{ popupType === 'approved' ? 'Approve' : 'Reject' }} Selected Images\r\n </h5>\r\n\r\n <!-- Description -->\r\n <p class=\"mb-3 test-appvalue\">\r\n You're about to {{ popupType === 'approved' ? 'Approve' : 'Reject' }} {{ this.overallSelectedIds?.length\r\n || '--' }} <span class=\"fw-bold\">{{ selectedCategoriesLabel | titlecase }}</span>\r\n </p>\r\n\r\n <!-- Count Box -->\r\n <div class=\"w-100 mb-4\">\r\n <label class=\"mb-2\">Remarks (Optional)</label>\r\n <textarea class=\"form-control\" rows=\"3\" [(ngModel)]=\"remarks\"></textarea>\r\n\r\n </div>\r\n\r\n <!-- Action Buttons -->\r\n <div class=\"w-100 d-flex justify-content-end\">\r\n <button class=\"btn btn-outline me-2\" (click)=\"cancel()\">Cancel</button>\r\n <button class=\"btn btn-primary\" (click)=\"submitValue(popupType, popupvalue)\">\r\n {{ popupType === 'approved' ? 'Approve' : 'Reject' }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #closePopup let-model>\r\n <div class=\"p-4 m-4\">\r\n <div class=\"modal-header border-0 p-0 w-100 flex-column align-items-start\">\r\n <h5 class=\"modal-title mb-2\">\r\n Close ticket\r\n </h5>\r\n <p class=\"mb-3 test-appvalue\">\r\n You are about to close the ticket, Are you sure want to continue?\r\n </p>\r\n <div class=\"w-100 d-flex justify-content-end\">\r\n <button class=\"btn btn-outline me-2\" (click)=\"confirmCloseCancel()\">Cancel</button>\r\n <button class=\"btn btn-primary\" (click)=\"confirmCloseTicket()\">\r\n Close ticket\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #imagePreviewPopup let-model>\r\n <div class=\"p-4 m-4\">\r\n <div class=\"modal-header border-0 p-0 w-100 flex-column align-items-start\">\r\n\r\n <h5 class=\"modal-title mb-2\">{{ previewTitle }}</h5>\r\n\r\n <div class=\"w-100 position-relative mb-4\">\r\n\r\n <button class=\"btn btn-light position-absolute start-0 top-50 translate-middle-y\"\r\n (click)=\"prevPreview()\" [disabled]=\"previewList.length <= 1\">\r\n \u2039\r\n </button>\r\n\r\n <img [src]=\"getPreviewImageUrl()\" class=\"w-100 rounded border\" />\r\n <div\r\n class=\"row my-2\">\r\n <div class=\"col-11\">\r\n <div class=\"desc-title ms-2 my-2\">\r\n Tango ID: {{ currentPreviewItem.tempId }}\r\n\r\n <span *ngIf=\"getAction(currentPreviewItem, 'review')?.action === 'approved'\" class=\"ms-2\"><svg\r\n style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\r\n <rect y=\"0.5\" width=\"10\" height=\"10\" rx=\"5\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M7.1222 3.57919L4.13887 6.45836L3.3472 5.61253C3.20137 5.47503 2.9722 5.46669 2.80553 5.58336C2.64303 5.70419 2.5972 5.91669 2.6972 6.08753L3.6347 7.61253C3.72637 7.75419 3.8847 7.84169 4.06387 7.84169C4.2347 7.84169 4.3972 7.75419 4.48887 7.61253C4.63887 7.41669 7.50137 4.00419 7.50137 4.00419C7.87637 3.62086 7.4222 3.28336 7.1222 3.57503V3.57919Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"getAction(currentPreviewItem, 'review')?.action === 'rejected'\" class=\"ms-2\"><svg\r\n style=\"width: 20px;\r\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1428_59484)\">\r\n <path\r\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n fill=\"#FEE4E2\" />\r\n <path\r\n d=\"M8.09961 5L5.09961 8M5.09961 5L8.09961 8M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\r\n stroke=\"#D92D20\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1428_59484\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(0.599609 0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n\r\n </div>\r\n\r\n <div class=\"desc-value ms-2\">Entry Time: {{\r\n getFormattedEntryTime(currentPreviewItem.entryTime) }}</div>\r\n </div>\r\n <div class=\"col-1 ms-3\">\r\n <span *ngIf=\"getAction(currentPreviewItem, 'approve')?.action === 'approved'\">\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 width=\"24\" height=\"24\" rx=\"12\" fill=\"#D1FADF\" />\r\n <g clip-path=\"url(#clip0_486_94051)\">\r\n <path\r\n d=\"M9.5 17H8C7.73478 17 7.48043 16.8946 7.29289 16.7071C7.10536 16.5196 7 16.2652 7 16V12.5C7 12.2348 7.10536 11.9804 7.29289 11.7929C7.48043 11.6054 7.73478 11.5 8 11.5H9.5M13 10.5V8.5C13 8.10218 12.842 7.72064 12.5607 7.43934C12.2794 7.15804 11.8978 7 11.5 7L9.5 11.5V17H15.14C15.3812 17.0027 15.6152 16.9182 15.799 16.762C15.9827 16.6058 16.1038 16.3885 16.14 16.15L16.83 11.65C16.8518 11.5067 16.8421 11.3603 16.8017 11.2211C16.7613 11.0819 16.6911 10.9531 16.5959 10.8438C16.5008 10.7344 16.383 10.647 16.2508 10.5876C16.1185 10.5283 15.975 10.4984 15.83 10.5H13Z\"\r\n stroke=\"#039855\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94051\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"getAction(currentPreviewItem, 'approve')?.action === 'rejected'\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect width=\"24\" height=\"24\" rx=\"12\" fill=\"#FEE4E2\" />\r\n <g clip-path=\"url(#clip0_486_94090)\">\r\n <path\r\n d=\"M14.5015 7.00006H15.8365C16.1195 6.99505 16.3944 7.09413 16.6092 7.27847C16.8239 7.46281 16.9635 7.71959 17.0015 8.00006V11.5001C16.9635 11.7805 16.8239 12.0373 16.6092 12.2216C16.3944 12.406 16.1195 12.5051 15.8365 12.5001H14.5015M11.0015 13.5001V15.5001C11.0015 15.8979 11.1595 16.2794 11.4408 16.5607C11.7221 16.842 12.1037 17.0001 12.5015 17.0001L14.5015 12.5001V7.00006H8.86148C8.62032 6.99733 8.38629 7.08186 8.20253 7.23806C8.01876 7.39426 7.89764 7.61161 7.86148 7.85006L7.17148 12.3501C7.14973 12.4934 7.15939 12.6397 7.19981 12.7789C7.24023 12.9181 7.31043 13.0469 7.40555 13.1563C7.50067 13.2657 7.61844 13.3531 7.75069 13.4124C7.88295 13.4718 8.02653 13.5017 8.17148 13.5001H11.0015Z\"\r\n stroke=\"#D92D20\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_486_94090\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(6 6)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </div>\r\n </div>\r\n\r\n <!-- Duplicate Reason -->\r\n <!-- <div class=\"duplicate-reason ms-2 mt-2\">\r\n <small class=\"text-muted\">{{ currentPreviewItem.reason }}</small>\r\n </div> -->\r\n\r\n <button class=\"btn btn-light position-absolute end-0 top-50 translate-middle-y\" (click)=\"nextPreview()\"\r\n [disabled]=\"previewList.length <= 1\">\r\n \u203A\r\n </button>\r\n\r\n </div>\r\n\r\n <div class=\"w-100 d-flex justify-content-end\">\r\n <button class=\"btn btn-outline me-2\" (click)=\"rejectPopup()\">Reject</button>\r\n <button class=\"btn btn-primary\" (click)=\"acceptPopup()\">Accept</button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".card-header,.header{color:var(--Gray-900, #101828);font-size:20px!important;font-style:normal;font-weight:700;line-height:27px}.sub-header{color:var(--Gray-700, #344054);font-size:14px!important;font-style:normal;font-weight:600;line-height:20px}.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}.card-title-foot{color:var(--Gray-800, #1D2939)!important;font-size:18px;font-weight:600;line-height:28px}.card-title-label{color:var(--Gray-800, #1D2939)!important;font-size:16px;font-weight:600;line-height:28px}.card-title-value{color:var(--Gray-800, #1D2939)!important;font-size:16px;font-weight:400;line-height:28px}input[type=checkbox]{width:16px!important;height:16px!important;margin:-2px 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #D0D5DD)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]{outline:1px solid var(--primary-600, #00A3FF)!important;background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.rotate{rotate:180deg;transition:1s}.border-selectall{border-radius:6px;border-bottom:1px solid var(--Gray-200, #EAECF0);background:#f9fafb;padding:8px 12px}.border-selectall1{border-radius:6px!important;background:var(--White, #FFF)!important;padding:8px 2px}.border-totalfootfall{border-radius:12px;padding:4px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF)}.vl{border-left:2px solid #000;height:50px}.duplicate-head{color:var(--Gray-700, #344054);font-size:16px;font-weight:600;line-height:20px}.img-border{border-radius:5px!important;border:2px solid var(--Gray-300, #D0D5DD)}.desc-title{color:var(--Gray-900, #101828);font-size:12px;font-weight:500;line-height:20px}.desc-value{color:var(--Gray-900, #475467);font-size:10px;font-weight:500;line-height:10px}.img-border{overflow:hidden;position:relative}.btn-resize{font-size:13px!important;height:29px!important;line-height:11px!important;padding:1px!important}.absolute{top:5px;right:5px;z-index:2}.absolute1{top:5px;left:8px;z-index:2}.img-src{width:25%;height:20%}.backButtonright{border-radius:1000px!important;background:var(--text-primary, #FFF)!important;padding:12px!important;box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808!important;box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808!important;position:absolute;top:30px;right:-10px;z-index:0}.backButtonleft{border-radius:1000px!important;background:#fff;padding:14px!important;border:var(--Gray-300, #D0D5DD);box-shadow:0 8.727px 11.636px -2.909px #10182814,0 2.909px 4.364px -1.455px #10182808;position:absolute;top:30px;left:-20px;z-index:5}.select-wrapper{position:relative;display:inline-block;width:100%}.placeholder-overlay{position:absolute;color:var(--Gray-500, #667085);font-family:Inter;font-size:16px!important;font-style:normal;font-weight:400;top:10px;left:15px;pointer-events:none;font-size:1.1rem;z-index:1}.card-title{color:var(--Black, #101828)!important;font-size:20px!important;font-weight:700!important;line-height:30px}.card-title-sub-header{color:var(--Black, #101828);font-size:14px;font-weight:500;line-height:30px}.separator.separator-dashed{border-bottom-style:double!important}.border-1{border-radius:4px!important;border:1px solid var(--Gray-300, #D0D5DD)!important}.store-item{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;border-radius:8px;transition:background-color .3s ease}.store-item-active{background:#eaf8ff}.left{display:flex;align-items:center;gap:8px;overflow:hidden;color:var(--Gray-700, #344054);text-overflow:ellipsis;font-size:14px;font-style:normal;font-weight:400;line-height:24px}.left .active-text{overflow:hidden;color:var(--Primary-700, #EAF8FF);font-size:14px;font-style:normal;font-weight:400;line-height:24px}.badge-active{border-radius:16px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);text-align:center;font-size:12px;font-style:normal;font-weight:500;line-height:20px;mix-blend-mode:multiply}.badge-normal{color:var(--Gray-700, #344054);text-align:center;font-size:12px;font-style:normal;font-weight:500;line-height:20px;border-radius:16px;background:var(--Gray-100, #F2F4F7)}.bg-light-primary{background:#f6fcff!important}.card-layer{gap:16px!important;opacity:1!important;padding:16px!important;border-radius:16px!important;border-width:1px!important;background:#fff;border:1px solid #EAECF0!important}.ticket-container{width:100%;background:#fff;border-radius:12px;padding:0;font-family:Inter,sans-serif}.ticket-header{display:flex;justify-content:space-between;align-items:center;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;padding:16px 20px;font-weight:600}.footfall-value{font-weight:600;font-size:20px;line-height:30px;letter-spacing:0%;vertical-align:middle;color:#101828}.issue-date{font-size:14px;color:#666}.timeline{width:1.5px;height:15px;background:#d0d5dd;margin-left:33px}.timeline-new{width:1px;height:70px;background:#d0d5dd;margin-left:30px;font-weight:600}.revision-card{background:#fff;border:1px solid #eaeaea;border-radius:12px;padding:0 20px}.user-info{display:flex;align-items:center}.avatar{width:42px;height:40px;border-radius:50%;margin-right:15px;font-size:14px;color:#1d2939;font-weight:600}.user-name{font-size:13px;color:#555}.user-email{font-size:12px;color:#888;margin-top:2px}.values-row{display:flex;justify-content:space-between;flex-wrap:wrap}.value-block{min-width:90px;margin:10px 0}.value{font-size:20px;font-weight:700}.label{font-size:14px;color:#1d2939;margin-top:3px}.accuracy{font-size:18px!important}.accuracy.up,.accuracy.down{color:#00a3ff}.footfall-label{font-weight:700;font-size:14px;line-height:20px;letter-spacing:0%;vertical-align:middle;color:#344054!important}.duplicate-layer{gap:10px;opacity:1;padding:16px;border-bottom-width:1px;border-bottom:1px solid #F2F4F7;background:#fff}.layer-approved{border-color:#a6f4c5!important;box-shadow:0 0 0 2.29px #a6f4c5}.layer-rejected{border-color:#fda29b!important;box-shadow:0 0 0 2.29px #fda29b}.layers{border-radius:8px;border-width:1px;opacity:1;border:1px solid #EAECF0;background:#fcfcfd;margin:12px}.btn-primary{font-size:13px!important;padding:5px 15px!important}.accordion-header{cursor:pointer}svg.rotated{transform:rotate(180deg);transition:transform .3s ease}.accordion-body{animation:fadeIn .25s ease}@keyframes fadeIn{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.ellipsis-underline{max-width:120px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-decoration:underline;cursor:pointer;display:inline-block}table td{line-height:14px!important}.btn-filter{font-weight:600;font-size:14px;line-height:20px;letter-spacing:0%;text-transform:capitalize;color:#344054}.overlay{position:fixed;inset:0;background:#0000001a}.filter-card{position:absolute;right:0;background:#fff;border-radius:8px;padding:16px 20px;box-shadow:0 8px 24px #0000001f;font-size:13px}.border-primary-layers{opacity:1;gap:12px;padding-bottom:16px;background:#eaf8ff;border-radius:8px!important}.border-primary-layers .label-title{opacity:1;gap:10px;padding:8px;border-bottom-right-radius:8px!important;background:#daf1ff;font-weight:500!important;font-size:18px!important;line-height:28px!important;letter-spacing:0%;color:#000!important}.border-primary-layers .label-desc{font-weight:500;font-size:16px;line-height:28px;letter-spacing:0%;color:#008edf!important}.comment-thread{border-left:1px solid #e5e5e5;padding-left:16px}.comment-avatar{width:32px;height:32px;border-radius:50%;object-fit:cover}.tango-card{width:140px;border-radius:8px;border:1px solid #e5e5e5;overflow:hidden;background:#fff;cursor:pointer}.tango-image{height:80px;background-size:cover;background-position:center}.tango-meta{padding:6px 8px}.more-card{background:#00000008;font-weight:600}.status-dot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-left:4px}.status-approve{background:#22c55e}.status-reject{background:#ef4444}.page-content{padding:16px}.filter-backdrop{position:fixed;inset:0;background:#0f172a40;z-index:998}.filter-modal{position:fixed;inset:0;display:flex;justify-content:center;align-items:center;z-index:999}.store-item-active{background-color:#eaf8ff}.store-item{padding:8px 12px 8px 10px;border-radius:6px;padding:8px 12px;gap:12px;opacity:1}.ticket-id{font-weight:500;font-size:14px;line-height:20px;letter-spacing:0%;color:#1d2939}.store-name{font-weight:400;font-size:14px;line-height:20px;letter-spacing:0%;color:#667085}.perc-badge{font-size:12px;min-width:48px;text-align:center}.perc-badge-normal{background-color:#f3f3f3;font-weight:500;font-size:14px;line-height:20px;letter-spacing:0%;text-align:center;color:#344054}.perc-badge-active{background-color:#d9ecff;font-weight:500;font-size:14px;line-height:20px;letter-spacing:0%;text-align:center;color:#009bf3}.border-selectall{padding:8px 10px;border-radius:12px;background:#f7f7f7}.reviewer-label{font-size:12px;color:gray}.sort-arrow{font-size:10px;line-height:1}.modal-title{font-weight:600;font-size:18px;line-height:28px;letter-spacing:0%;color:#1d2939}.test-appvalue{color:#1d2939;font-weight:400;font-size:16px;line-height:24px;letter-spacing:0%}.light-primary{background:#eaf8ff!important}.nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}\n"] }]
1311
+ }], ctorParameters: () => [{ type: i1.NgbModal }, { type: i2.GlobalStateService }, { type: i3.TicketService }, { type: i0.ChangeDetectorRef }, { type: i4.ExcelService }, { type: i5.ToastService }, { type: i6.FormBuilder }, { type: i7.Router }], propDecorators: { filterChange: [{
1312
+ type: Output
1313
+ }], closePopup: [{
1314
+ type: ViewChild,
1315
+ args: ["closePopup"]
1316
+ }], zoomPopup: [{
1317
+ type: ViewChild,
1318
+ args: ["zoomPopup"]
1319
+ }], imagePreviewPopup: [{
1320
+ type: ViewChild,
1321
+ args: ["imagePreviewPopup"]
1322
+ }] } });
1323
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlja2V0LWZvb3RmYWxsLW5ldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2UtdGlja2V0cy9zcmMvbGliL2NvbXBvbmVudHMvdGlja2V0LWZvb3RmYWxsLW5ldy90aWNrZXQtZm9vdGZhbGwtbmV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS10aWNrZXRzL3NyYy9saWIvY29tcG9uZW50cy90aWNrZXQtZm9vdGZhbGwtbmV3L3RpY2tldC1mb290ZmFsbC1uZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFLVCxZQUFZLEVBQ1osTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssT0FBTyxNQUFNLDBCQUEwQixDQUFDO0FBRXBELE9BQU8sa0JBQWtCLE1BQU0scUNBQXFDLENBQUM7QUFDckUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFHcEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFPMUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBTXJDLE1BQU0sT0FBTywwQkFBMEI7SUFNM0I7SUFDRDtJQUNDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQVpWLFdBQVcsR0FBUSxFQUFFLENBQUM7SUFDdEIsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUMxQixhQUFhLEdBQVcsQ0FBQyxDQUFDO0lBQ1QsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDMUMsWUFDVSxZQUFzQixFQUN2QixFQUFzQixFQUNyQixPQUFzQixFQUN0QixFQUFvQixFQUNwQixZQUF5QixFQUN6QixFQUFlLEVBQ2Ys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QUFVLENBQUM7U0FDaEM7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUE2QjtRQUN4QyxJQUFJLElBQUksS0FBSyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCO1lBQUUsT0FBTztRQUMzRCxJQUFJLElBQUksS0FBSyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCO1lBQUUsT0FBTztRQUUzRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUV6QixxQ0FBcUM7UUFDckMsaURBQWlEO1FBQ2pELDJCQUEyQjtJQUM3QixDQUFDO3dHQTEvQ1ksMEJBQTBCOzRGQUExQiwwQkFBMEIsc1pDOUJ2Qyw0cWhMQXVwRWM7OzRGRHpuRUQsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHlCQUF5QjsrUUErWnpCLFlBQVk7c0JBQXJCLE1BQU07Z0JBaVprQixVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBNlFDLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkE0V1ksaUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT3V0cHV0LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCAqIGFzIGFtNGNvcmUgZnJvbSBcIkBhbWNoYXJ0cy9hbWNoYXJ0czQvY29yZVwiO1xyXG5pbXBvcnQgKiBhcyBhbTRjaGFydHMgZnJvbSBcIkBhbWNoYXJ0cy9hbWNoYXJ0czQvY2hhcnRzXCI7XHJcbmltcG9ydCBhbTR0aGVtZXNfYW5pbWF0ZWQgZnJvbSBcIkBhbWNoYXJ0cy9hbWNoYXJ0czQvdGhlbWVzL2FuaW1hdGVkXCI7XHJcbmltcG9ydCB7IEZvb3RmYWxsUG9wdXBDb21wb25lbnQgfSBmcm9tIFwiLi4vZm9vdGZhbGwtcG9wdXAvZm9vdGZhbGwtcG9wdXAuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFRpY2tldFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdGlja2V0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXhjZWxTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2V4Y2VsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1zaGFyZWRcIjtcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcblxyXG5hbTRjb3JlLnVzZVRoZW1lKGFtNHRoZW1lc19hbmltYXRlZCk7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpYi10aWNrZXQtZm9vdGZhbGwtbmV3XCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi90aWNrZXQtZm9vdGZhbGwtbmV3LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi90aWNrZXQtZm9vdGZhbGwtbmV3LmNvbXBvbmVudC5zY3NzXCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUaWNrZXRGb290ZmFsbE5ld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBzZWFyY2hWYWx1ZTogYW55ID0gXCJcIjtcclxuICBzb3J0ZWRDb2x1bW46IHN0cmluZyA9IFwiXCI7XHJcbiAgc29ydERpcmVjdGlvbjogbnVtYmVyID0gMTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHB1YmxpYyBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBUaWNrZXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZDpDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZXhjZWxTZXJ2aWNlOkV4Y2VsU2VydmljZSxcclxuICAgIHByaXZhdGUgdHM6VG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIHJvdXRlcjpSb3V0ZXIsXHJcbiAgKSB7fVxyXG4gIGhlYWRlckZpbHRlcnM6IGFueTtcclxuICBmb290ZmFsbExpc3RfcmVxOiBhbnk7XHJcbiAgdXNlcnNEZXRhaWxzOmFueTtcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHNlc3Npb25TdG9yYWdlLmNsZWFyKCk7XHJcbiAgICB0aGlzLmltYWdlVXJsID0gdGhpcy5zZXJ2aWNlPy5mb290ZmFsbENETjtcclxuICAgIGxldCB1c2VyRGF0YTogYW55ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyLWluZm9cIik7XHJcbiAgICB0aGlzLnVzZXJzRGV0YWlscyA9IEpTT04ucGFyc2UodXNlckRhdGEpO1xyXG4gICAgdGhpcy5TZWxlY3RlZFJvbGUoJ2FwcHJvdmVyJyk7XHJcbiAgXHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlPy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSk/LnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgdGhpcy5oZWFkZXJGaWx0ZXJzID0gZGF0YTtcclxuICAgICAgICAgIHRoaXMuZm9vdGZhbGxMaXN0X3JlcSA9IHtcclxuICAgICAgICAgICAgY2xpZW50OiB0aGlzLmhlYWRlckZpbHRlcnMuY2xpZW50cy50b1N0cmluZygpLFxyXG4gICAgICAgICAgICBmcm9tRGF0ZTogdGhpcy5oZWFkZXJGaWx0ZXJzPy5kYXRlPy5zdGFydERhdGUsXHJcbiAgICAgICAgICAgIHRvRGF0ZTogdGhpcy5oZWFkZXJGaWx0ZXJzPy5kYXRlPy5lbmREYXRlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuZ2V0VGlja2V0U3VtbWFyeSgpO1xyXG4gICAgICAgICAgdGhpcy5nZXRUaWNrZXRMaXN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5wcml2YXRlIGFyZUFsbEl0ZW1zUmV2aWV3ZWQobWFwcGluZzogYW55KTogYm9vbGVhbiB7XHJcbiAgY29uc3QgcmV2aXNlZCA9IG1hcHBpbmc/LnJldmlzZWREZXRhaWwgfHwgW107XHJcbiAgaWYgKCFyZXZpc2VkLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICBjb25zdCBpdGVtc1RvQ2hlY2s6IGFueVtdID0gW107XHJcblxyXG4gIHJldmlzZWQuZm9yRWFjaCgoZGV0YWlsOiBhbnkpID0+IHtcclxuICAgIC8vIElmIGR1cGxpY2F0ZSBwYXJlbnQg4oaSIGNoZWNrIGl0cyBkdXBsaWNhdGVJbWFnZSBjaGlsZHJlblxyXG4gICAgaWYgKFxyXG4gICAgICBkZXRhaWw/LnJldm9wc1R5cGUgPT09ICdkdXBsaWNhdGUnICYmXHJcbiAgICAgIGRldGFpbD8uaXNQYXJlbnQgJiZcclxuICAgICAgQXJyYXkuaXNBcnJheShkZXRhaWw/LmR1cGxpY2F0ZUltYWdlKSAmJlxyXG4gICAgICBkZXRhaWwuZHVwbGljYXRlSW1hZ2UubGVuZ3RoXHJcbiAgICApIHtcclxuICAgICAgaXRlbXNUb0NoZWNrLnB1c2goLi4uZGV0YWlsLmR1cGxpY2F0ZUltYWdlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIE5vcm1hbCBpdGVtIG9yIG5vbi1wYXJlbnQgZHVwbGljYXRlXHJcbiAgICAgIGl0ZW1zVG9DaGVjay5wdXNoKGRldGFpbCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIEFsbCBtdXN0IGhhdmUgcmV2aWV3IGFwcHJvdmVkL3JlamVjdGVkXHJcbiAgcmV0dXJuIGl0ZW1zVG9DaGVjay5sZW5ndGggPiAwICYmIGl0ZW1zVG9DaGVjay5ldmVyeShpdGVtID0+IHRoaXMuaGFzUmV2aWV3RGVjaXNpb24oaXRlbSkpO1xyXG59XHJcbnByaXZhdGUgaGFzUmV2aWV3RGVjaXNpb24oaXRlbTogYW55KTogYm9vbGVhbiB7XHJcbiAgY29uc3QgYWN0aW9ucyA9IGl0ZW0/LmFjdGlvbnMgfHwgW107XHJcbiAgcmV0dXJuIGFjdGlvbnMuc29tZShcclxuICAgIChhOiBhbnkpID0+XHJcbiAgICAgIGEuYWN0aW9uVHlwZSA9PT0gJ3JldmlldycgJiZcclxuICAgICAgKGEuYWN0aW9uID09PSAnYXBwcm92ZWQnIHx8IGEuYWN0aW9uID09PSAncmVqZWN0ZWQnKVxyXG4gICk7XHJcbn1cclxuXHJcbnNlbGVjdGVkUm9sZTogJ2FwcHJvdmVyJyB8ICdyZXZpZXdlcicgfCAnJyA9ICcnO1xyXG5nZXRIZWFkZXJTdGF0dXMoKTogc3RyaW5nIHtcclxuICBjb25zdCByb2xlTWFwcGluZyA9IHRoaXMuZ2V0Q3VycmVudFJvbGVNYXBwaW5nKCk7XHJcbiAgY29uc29sZS5sb2coJ3JvbGVNYXBwaW5nIGluIGdldEhlYWRlclN0YXR1czonLCByb2xlTWFwcGluZyk7XHJcblxyXG4gIGlmIChyb2xlTWFwcGluZz8uc3RhdHVzKSB7XHJcbiAgICBjb25zdCBhbGxSZXZpZXdlZCA9IHRoaXMuYXJlQWxsSXRlbXNSZXZpZXdlZChyb2xlTWFwcGluZyk7XHJcblxyXG4gICAgaWYgKHJvbGVNYXBwaW5nLnN0YXR1cyA9PT0gJ0luLVByb2dyZXNzJykge1xyXG4gICAgICAvLyBTaG93IENsb3NlIGJ1dHRvbiB3aGlsZSBpbi1wcm9ncmVzc1xyXG4gICAgICB0aGlzLmNsb3NlQnRuID0gdHJ1ZTtcclxuICAgICAgLy8gRW5hYmxlIG9ubHkgd2hlbiBldmVyeXRoaW5nIHJldmlld2VkXHJcbiAgICAgIHRoaXMuY2xvc2VEaXNhYmxlZCA9ICFhbGxSZXZpZXdlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEZvciBvdGhlciBzdGF0dXNlcyAoT3BlbiwgQ2xvc2VkLCBldGMuKVxyXG4gICAgICB0aGlzLmNsb3NlQnRuID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2xvc2VEaXNhYmxlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJvbGVNYXBwaW5nLnN0YXR1czsgLy8gZS5nLiBcIk9wZW5cIiwgXCJJbi1Qcm9ncmVzc1wiLCBcIkNsb3NlZFwiXHJcbiAgfVxyXG5cclxuICAvLyBGYWxsYmFjazogdGlja2V0IHN0YXR1c1xyXG4gIHRoaXMuY2xvc2VCdG4gPSBmYWxzZTtcclxuICB0aGlzLmNsb3NlRGlzYWJsZWQgPSB0cnVlO1xyXG4gIHJldHVybiB0aGlzLnRpY2tldERhdGE/LnN0YXR1cyB8fCAnLS0nO1xyXG59XHJcblxyXG5cclxuZ2V0Q3VycmVudFJvbGVNYXBwaW5nKCk6IGFueSB7XHJcbiAgaWYgKCF0aGlzLmZvb3RmYWxsVGlja2V0c0RhdGEgfHwgIXRoaXMuZm9vdGZhbGxUaWNrZXRzRGF0YS5sZW5ndGgpIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgbGV0IGFwcHJvdmVyTWFwcGluZzogYW55ID0gbnVsbDtcclxuICBsZXQgcmV2aWV3ZXJNYXBwaW5nOiBhbnkgPSBudWxsO1xyXG5cclxuICAvLyBHbyB0aHJvdWdoIGFsbCB0aWNrZXRzIGFuZCBtYXBwaW5nSW5mb1xyXG4gIGZvciAoY29uc3QgdGlja2V0IG9mIHRoaXMuZm9vdGZhbGxUaWNrZXRzRGF0YSkge1xyXG4gICAgY29uc3Qgc291cmNlID0gdGlja2V0Py5fc291cmNlO1xyXG4gICAgY29uc3QgbWFwcGluZ0xpc3QgPSBzb3VyY2U/Lm1hcHBpbmdJbmZvIHx8IFtdO1xyXG5cclxuICAgIC8vIGZpbmQgYXBwcm92ZXIgbWFwcGluZyB3aXRoIHJldmlzZWREZXRhaWxcclxuICAgIGlmICghYXBwcm92ZXJNYXBwaW5nKSB7XHJcbiAgICAgIGNvbnN0IGZvdW5kQXBwcm92ZXIgPSBtYXBwaW5nTGlzdC5maW5kKFxyXG4gICAgICAgIChtOiBhbnkpID0+IG0/LnR5cGUgPT09ICdhcHByb3ZlJyAmJiBtPy5yZXZpc2VkRGV0YWlsPy5sZW5ndGhcclxuICAgICAgKTtcclxuICAgICAgaWYgKGZvdW5kQXBwcm92ZXIpIHtcclxuICAgICAgICBhcHByb3Zlck1hcHBpbmcgPSBmb3VuZEFwcHJvdmVyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmluZCByZXZpZXdlciBtYXBwaW5nIHdpdGggcmV2aXNlZERldGFpbFxyXG4gICAgaWYgKCFyZXZpZXdlck1hcHBpbmcpIHtcclxuICAgICAgY29uc3QgZm91bmRSZXZpZXdlciA9IG1hcHBpbmdMaXN0LmZpbmQoXHJcbiAgICAgICAgKG06IGFueSkgPT4gbT8udHlwZSA9PT0gJ3JldmlldycgJiYgbT8ucmV2aXNlZERldGFpbD8ubGVuZ3RoXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChmb3VuZFJldmlld2VyKSB7XHJcbiAgICAgICAgcmV2aWV3ZXJNYXBwaW5nID0gZm91bmRSZXZpZXdlcjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNsb3NlQnRuID10cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g8J+UuSBQcmlvcml0eSBiYXNlZCBvbiBwZXJtaXNzaW9uc1xyXG4gIGlmICh0aGlzLmhhc0FwcHJvdmVyQWNjZXNzICYmIGFwcHJvdmVyTWFwcGluZykge1xyXG4gICAgcmV0dXJuIGFwcHJvdmVyTWFwcGluZztcclxuICB9XHJcblxyXG4gIGlmICh0aGlzLmhhc1Jldmlld2VyQWNjZXNzICYmIHJldmlld2VyTWFwcGluZykge1xyXG4gICAgcmV0dXJuIHJldmlld2VyTWFwcGluZztcclxuICB9XHJcblxyXG4gIC8vIGlmIG5vIG1hcHBpbmcgbWF0Y2hlcyBwZXJtaXNzaW9ucywgZmFsbGJhY2sgdG8gc29tZXRoaW5nIG9yIG51bGxcclxuICByZXR1cm4gYXBwcm92ZXJNYXBwaW5nIHx8IHJldmlld2VyTWFwcGluZyB8fCBudWxsO1xyXG59XHJcblxyXG5cclxuXHJcbmdldFN0YXR1c0JhZGdlQ2xhc3Moc3RhdHVzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIGNvbnN0IG1hcDogYW55ID0ge1xyXG4gICAgJ09wZW4nOiAnYmFkZ2UtbGlnaHQtd2FybmluZycsXHJcbiAgICAnSW4tUHJvZ3Jlc3MnOiAnYmFkZ2UtbGlnaHQtcHJpbWFyeScsXHJcbiAgICAnVW5kZXIgdGFuZ2UgcmV2aWV3JzogJ2JhZGdlLWxpZ2h0LXByaW1hcnknLFxyXG4gICAgJ1RhbmdlIHJldmlldyBkb25lJzogJ2JhZGdlLWxpZ2h0LXByaW1hcnknLFxyXG4gICAgJ0Nsb3NlZCc6ICdiYWRnZS1zZWNvbmRhcnknLFxyXG4gICAgJ1BlbmRpbmcnOiAnYmFkZ2UtbGlnaHQtd2FybmluZycsXHJcbiAgICAnUmV2aWV3ZXItQ2xvc2VkJzogJ2JhZGdlLWxpZ2h0LXdhcm5pbmcnLFxyXG4gICAgJ1JlamVjdGVkJzogJ2JhZGdlLWxpZ2h0LWRhbmdlcicsXHJcbiAgICAnUmFpc2VkJzogJ2JhZGdlLWxpZ2h0LWluZm8nXHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIG1hcFtzdGF0dXNdIHx8ICdiYWRnZS1saWdodC1kYXJrJzsgLy8gZmFsbGJhY2tcclxufVxyXG5cclxuICBnZXRGb290ZmFsbFN1bW1hcnlEYXRhOiBhbnk7XHJcbiAgZ2V0VGlja2V0U3VtbWFyeSgpIHtcclxuICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAuZ2V0VGlja2V0U3VtbWFyeUFwaShcclxuICAgICAgICB0aGlzLmZvb3RmYWxsTGlzdF9yZXEuY2xpZW50LFxyXG4gICAgICAgIHRoaXMuZm9vdGZhbGxMaXN0X3JlcS5mcm9tRGF0ZSxcclxuICAgICAgICB0aGlzLmZvb3RmYWxsTGlzdF9yZXEudG9EYXRlXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzPy5kYXRhICYmIHJlcz8uZGF0YT8ucmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YSA9IHJlcz8uZGF0YT8ucmVzdWx0O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRGb290ZmFsbFN1bW1hcnlEYXRhID0gW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmdldEZvb3RmYWxsU3VtbWFyeURhdGEgPSBbXTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmdldEZvb3RmYWxsU3VtbWFyeURhdGEubGVuZ3RoID09PSAwO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIG9mZnNldCA9IDA7XHJcbiAgbGltaXQgPSAxMDtcclxuICBpc0V4cG9ydDogYW55ID0gZmFsc2U7XHJcbiAgZm9vdGZhbGxMaXN0RGF0YTogYW55O1xyXG4gIHRvdGFsSXRlbXM6IGFueTtcclxuICBwYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF07XHJcbiAgbG9hZGluZyA9IHRydWU7XHJcbiAgbm9EYXRhID0gZmFsc2U7XHJcbiAgdGFuZ29UeXBlOiBhbnkgPSBcInN0b3JlXCI7XHJcbiAgZ2V0VGlja2V0TGlzdCgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnNlYXJjaFZhbHVlID0gdGhpcy5zZWFyY2hWYWx1ZT8udHJpbSgpIHx8IFwiXCI7XHJcbiAgICB0aGlzLm9mZnNldCA9IHRoaXMub2Zmc2V0IHx8IDE7XHJcbiAgICB0aGlzLmxpbWl0ID0gdGhpcy5saW1pdCB8fCAxMDtcclxuICAgIHRoaXMuaXNFeHBvcnQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAuZ2V0VGlja2V0TGlzdEFwaShcclxuICAgICAgICB0aGlzLmZvb3RmYWxsTGlzdF9yZXEuY2xpZW50LFxyXG4gICAgICAgIHRoaXMuZm9vdGZhbGxMaXN0X3JlcS5mcm9tRGF0ZSxcclxuICAgICAgICB0aGlzLmZvb3RmYWxsTGlzdF9yZXEudG9EYXRlLFxyXG4gICAgICAgIHRoaXMuc2VhcmNoVmFsdWUsXHJcbiAgICAgICAgdGhpcy5saW1pdCxcclxuICAgICAgICB0aGlzLm9mZnNldCxcclxuICAgICAgICB0aGlzLmlzRXhwb3J0LFxyXG4gICAgICAgIHRoaXMuc29ydGVkQ29sdW1uLFxyXG4gICAgICAgIHRoaXMuc29ydERpcmVjdGlvbixcclxuICAgICAgICB0aGlzLnRhbmdvVHlwZVxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZm9vdGZhbGxMaXN0RGF0YSA9IHJlcz8uZGF0YT8ucmVzdWx0O1xyXG5pZiAodGhpcy5mb290ZmFsbExpc3REYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5nZW5lcmF0ZUNvbHVtbnModGhpcy5mb290ZmFsbExpc3REYXRhWzBdKTtcclxuICAgIH1cclxuICAgICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gcmVzPy5kYXRhPy5jb3VudDtcclxuICAgICAgICAgICAgaWYgKHRoaXMudG90YWxJdGVtcyA8IDEwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbdGhpcy50b3RhbEl0ZW1zXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxMCwgMjAsIDMwXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5mb290ZmFsbExpc3REYXRhID0gW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICB0YWJsZUNvbHVtbnM6IGFueVtdID0gW107XHJcbiAgbGFiZWxPdmVycmlkZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgdGlja2V0SWQ6ICdUaWNrZXQgSUQnLFxyXG4gIHN0b3JlTmFtZTogJ1N0b3JlIE5hbWUnLFxyXG4gIHN0b3JlSWQ6ICdTdG9yZSBJRCcsICAgICAgICAgICAgICAgICAgIC8vIG9yIGp1c3QgJ1N0b3JlJ1xyXG4gIHN0b3JlUmV2aXNlZEFjY3VyYWN5OiAnU3RvcmUgKEFjY3VyYWN5JSknLFxyXG4gIHJldmlld2VyUmV2aXNlZEFjY3VyYWN5OiAnUmV2aWV3ZXIgKEFjY3VyYWN5JSknLFxyXG4gIGFwcHJvdmVyUmV2aXNlZEFjY3VyYWN5OiAnQXBwcm92ZXIgKEFjY3VyYWN5JSknLFxyXG4gIHRhbmdvUmV2aXNlZEFjY3VyYWN5OiAnVGFuZ28gKEFjY3VyYWN5JSknLFxyXG4gIHRpY2tldFJhaXNlZDogJ1RpY2tldCBSYWlzZWQgT24nLFxyXG4gIGlzc3VlRGF0ZTogJ0lzc3VlIERhdGUnLFxyXG4gIGZvb3RmYWxsOiAnQWN0dWFsIEZGJyxcclxufTtcclxuaGlkZGVuQ29sdW1uczogc3RyaW5nW10gPSBbXHJcbiAgJ3N0b3JlTmFtZScsICAvLyB1bmNvbW1lbnQgaWYgeW91IHdhbnQgdG8gUkVNT1ZFIHRoZSBleHRyYSBcIlN0b3JlIE5hbWVcIiBjb2x1bW5cclxuICAndHlwZScsXHJcbl07XHJcbmdlbmVyYXRlQ29sdW1ucyhmaXJzdFJvdzogYW55KSB7XHJcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGZpcnN0Um93KVxyXG4gICAgLmZpbHRlcihrZXkgPT4gIXRoaXMuaGlkZGVuQ29sdW1ucy5pbmNsdWRlcyhrZXkpKTsgIC8vIHJlbW92ZSB1bndhbnRlZCBjb2x1bW5zXHJcblxyXG4gIHRoaXMudGFibGVDb2x1bW5zID0ga2V5cy5tYXAoa2V5ID0+ICh7XHJcbiAgICBrZXksXHJcbiAgICAvLyBpZiBrZXkgZXhpc3RzIGluIGxhYmVsT3ZlcnJpZGVzLCB1c2UgdGhhdDsgb3RoZXJ3aXNlIGF1dG8tZm9ybWF0XHJcbiAgICBsYWJlbDogdGhpcy5sYWJlbE92ZXJyaWRlc1trZXldID8/IHRoaXMuZm9ybWF0Q29sdW1uTmFtZShrZXkpLFxyXG4gICAgc29ydGFibGU6IHRydWUsXHJcbiAgICB0eXBlOiB0aGlzLmRldGVjdENvbHVtblR5cGUgPyB0aGlzLmRldGVjdENvbHVtblR5cGUoa2V5KSA6IG51bGxcclxuICB9KSk7XHJcbn1cclxuXHJcbmZvcm1hdENvbHVtbk5hbWUoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBrZXlcclxuICAgIC5yZXBsYWNlKC8oW0EtWl0pL2csICcgJDEnKVxyXG4gICAgLnJlcGxhY2UoL18vZywgJyAnKVxyXG4gICAgLnJlcGxhY2UoL1xcYlxcdy9nLCBjID0+IGMudG9VcHBlckNhc2UoKSk7XHJcbn1cclxuXHJcbmRldGVjdENvbHVtblR5cGUoa2V5OiBzdHJpbmcpIHtcclxuICBpZiAoa2V5ID09PSAnc3RvcmVOYW1lJyB8fCBrZXkgPT09ICd0aWNrZXRJZCcpIHJldHVybiAnc3RvcmUnO1xyXG4gIGlmIChrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZGF0ZScpIHx8IGtleSA9PT0gJ3RpY2tldFJhaXNlZCcpIHJldHVybiAnZGF0ZSc7XHJcbiAgaWYgKGtleS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdzdGF0dXMnKSkgcmV0dXJuICdzdGF0dXMnO1xyXG4gIHJldHVybiAndGV4dCc7XHJcbn1cclxuICBjdXJyZW50UGFnZTogYW55ID0gMTtcclxuICBwYWdlU2l6ZTogYW55ID0gMTA7XHJcbiAgb25QYWdlQ2hhbmdlKHBhZ2VPZmZzZXQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IE51bWJlcihwYWdlT2Zmc2V0KTtcclxuICAgIHRoaXMub2Zmc2V0ID0gTnVtYmVyKHBhZ2VPZmZzZXQpO1xyXG4gICAgLy8gdGhpcy5saW1pdCA9IDEwO1xyXG4gICAgdGhpcy5nZXRUaWNrZXRMaXN0KCk7XHJcbiAgfVxyXG5cclxuICBvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOiBudW1iZXIpIHtcclxuICAgIHRoaXMucGFnZVNpemUgPSBOdW1iZXIocGFnZVNpemUpO1xyXG4gICAgdGhpcy5saW1pdCA9IE51bWJlcihwYWdlU2l6ZSk7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgIHRoaXMuZ2V0VGlja2V0TGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0cGFnZVNpemUoKSB7XHJcbiAgICBpZiAodGhpcy50b3RhbEl0ZW1zIDwgMTApIHtcclxuICAgICAgcmV0dXJuIHRoaXMudG90YWxJdGVtcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBhZ2VTaXplO1xyXG4gICAgfVxyXG4gIH1cclxuICBzZWFyY2hEYXRhKCkge1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLmxpbWl0ID0gMTA7XHJcbiAgICB0aGlzLmdldFRpY2tldExpc3QoKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydFhMU1goKSB7XHJcbiAgICB0aGlzLnNlYXJjaFZhbHVlID0gdGhpcy5zZWFyY2hWYWx1ZT8udHJpbSgpIHx8IFwiXCI7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLmxpbWl0ID0gMTAwMDA7XHJcbiAgICB0aGlzLmlzRXhwb3J0ID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAuZ2V0VGlja2V0TGlzdEV4cG9ydEFwaShcclxuICAgICAgICB0aGlzLmZvb3RmYWxsTGlzdF9yZXEuY2xpZW50LFxyXG4gICAgICAgIHRoaXMuZm9vdGZhbGxMaXN0X3JlcS5mcm9tRGF0ZSxcclxuICAgICAgICB0aGlzLmZvb3RmYWxsTGlzdF9yZXEudG9EYXRlLFxyXG4gICAgICAgIHRoaXMuc2VhcmNoVmFsdWUsXHJcbiAgICAgICAgdGhpcy5saW1pdCxcclxuICAgICAgICB0aGlzLm9mZnNldCxcclxuICAgICAgICB0aGlzLmlzRXhwb3J0LFxyXG4gICAgICAgIHRoaXMuc29ydGVkQ29sdW1uLFxyXG4gICAgICAgIHRoaXMuc29ydERpcmVjdGlvbixcclxuICAgICAgICB0aGlzLnRhbmdvVHlwZVxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmV4Y2VsU2VydmljZS5zYXZlQXNFeGNlbEZpbGUocmVzLCBcImZvb3RmYWxsIGRpcmVjdG9yeSB0aWNrZXQgXCIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KFxyXG4gICAgICAgICAgICBcIkVycm9yIGV4cG9ydGluZyBkYXRhOlwiICsgZXJyLmVycm9yID8gZXJyLmVycm9yIDogZXJyLm1lc3NhZ2VcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblNvcnQoY29sdW1uOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLnNvcnRlZENvbHVtbiA9PT0gY29sdW1uKSB7XHJcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IHRoaXMuc29ydERpcmVjdGlvbiA9PT0gMSA/IC0xIDogMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc29ydGVkQ29sdW1uID0gY29sdW1uO1xyXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSAxO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRUaWNrZXRMaXN0KCk7XHJcbiAgfVxyXG4gIHNlbGVjdCA9IFwidGlja2V0TGlzdFwiO1xyXG4gIHRpY2tldERhdGE6IGFueTtcclxuXHJcbiAgc3RhcnRBdWRpdCgpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgIHRvdGFsZmlsZXM6IHRoaXMudGlja2V0RGF0YT8uZm9vdGZhbGwsXHJcbiAgICAgIGZpbGVkZXRhaWxzOiB7XHJcbiAgICAgICAgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycz8uY2xpZW50LFxyXG4gICAgICAgIHN0b3JlSWQ6IHRoaXMudGlja2V0RGF0YT8uc3RvcmVJZCxcclxuICAgICAgICBEYXRlOiB0aGlzLnRpY2tldERhdGE/Lmlzc3VlRGF0ZSxcclxuICAgICAgICBhdWRpdElkOiBcIlwiLFxyXG4gICAgICAgIHVzZXJJZDogXCJcIixcclxuICAgICAgICBuZXh0VG9rZW46IFwiXCIsXHJcbiAgICAgIH0sIFxyXG4gICAgYXVkaXRJZDogXCJcIixcclxuICAgIHN0b3JlZGV0YWlsczoge1xyXG4gICAgICBzdG9yZU5hbWU6IHRoaXMudGlja2V0RGF0YT8uc3RvcmVOYW1lXHJcbiAgICB9XHJcbiAgfTtcclxuICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwidG90YWxmaWxlc1wiLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcblxyXG4gIHRoaXMuc2VsZWN0ID0gJ3RpY2tldE1ldGhvZCc7XHJcbiAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9tYW5hZ2UvdGlja2V0cy9hdWRpdCcpXHJcbn1cclxuXHJcbiAgYmFja1RvTmF2aWdhdGlvbigpIHtcclxuICAgIHRoaXMuc2VsZWN0ID0gXCJ0aWNrZXRMaXN0XCI7XHJcbiAgICB0aGlzLmZvb3RmYWxsVGlja2V0c0RhdGEgPSBbXTtcclxuICAgICAgdGhpcy5nZXRUaWNrZXRTdW1tYXJ5KCk7XHJcbiAgICB0aGlzLmdldFRpY2tldExpc3QoKTtcclxuICAgIHRoaXMuY2xvc2VCdG4gPSBmYWxzZTtcclxuICAgIHRoaXMuaXNDaGVja2JveEVuYWJsZSA9IGZhbHNlO1xyXG4gIH1cclxuICBpc0NvbGxhcHNlZCA9IGZhbHNlO1xyXG4gIHRvZ2dsZVNpZGViYXIoKSB7XHJcbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gIXRoaXMuaXNDb2xsYXBzZWQ7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9ICF0aGlzLmlzRmlsdGVyT3BlbjtcclxuICB9XHJcbiAgaXNGaWx0ZXJPcGVuID0gZmFsc2U7IC8vIGNvbnRyb2xzIHNob3cvaGlkZSBwYW5lbFxyXG4gIGZpbHRlckZvcm06IEZvcm1Hcm91cDtcclxuICBAT3V0cHV0KCkgZmlsdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgbmV3Rm9ybSgpIHtcclxuICAgIHRoaXMuZmlsdGVyRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBzdGF0dXM6IFtcIlwiXSxcclxuICAgICAgcmV2aWV3ZXJDb25kaXRpb246IFtcIlwiXSxcclxuICAgICAgcmV2aWV3ZXJWYWx1ZTogW1wiXCJdLFxyXG4gICAgICBhcHByb3ZlckNvbmRpdGlvbjogW1wiXCJdLFxyXG4gICAgICBhcHByb3ZlclZhbHVlOiBbXCJcIl0sXHJcbiAgICAgIHRhbmdvQ29uZGl0aW9uOiBbXCJcIl0sXHJcbiAgICAgIHRhbmdvVmFsdWU6IFtcIlwiXSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyRm9ybS52YWx1ZSk7XHJcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlOyAvLyBjbG9zZSBhZnRlciBhcHBseVxyXG4gIH1cclxuXHJcbiAgcmVzZXRGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmZpbHRlckZvcm0ucmVzZXQoKTtcclxuICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXJGb3JtLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5pc0ZpbHRlck9wZW4gPSBmYWxzZTtcclxuICB9XHJcbiAgU3RvcmVzU2VhcmNoVmFsdWU6IGFueSA9IFwiXCI7XHJcbiAgc29ydGVkQ29sdW1uMTogc3RyaW5nID0gXCJcIjtcclxuICBzb3J0RGlyZWN0aW9uMTogbnVtYmVyID0gMTtcclxuXHJcbiAgc2VhcmNoU3RvcmVzRGF0YSgpIHt9XHJcbiAgc29ydFZhbHVlKGNvbHVtbjogc3RyaW5nKSB7fVxyXG4gIG9wZW5UaWNrZXRzTGlzdDogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZFN0b3JlczogYW55W10gPSBbXTsgLy8gaG9sZHMgc2VsZWN0ZWQgcm93c1xyXG4gIGFsbFNlbGVjdGVkID0gZmFsc2U7IC8vIHRvcCBcIlNlbGVjdCBBbGxcIiBjaGVja2JveFxyXG5cclxuICBnZXQgc3RvcmVDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMub3BlblRpY2tldHNMaXN0Py5sZW5ndGggfHwgMDtcclxuICB9XHJcblxyXG4gIC8vIGNoZWNrIGlmIGEgcm93IGlzIHNlbGVjdGVkICh1c2VkIGluIHRlbXBsYXRlKVxyXG4gIGlzU2VsZWN0ZWQoc3RvcmU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRTdG9yZXMuaW5jbHVkZXMoc3RvcmUpO1xyXG4gIH1cclxuXHJcbiAgLy8g8J+UuSBjb21tb24gaGFuZGxlciB3aGVuIGEgc3RvcmUgYmVjb21lcyBzZWxlY3RlZFxyXG4gIHByaXZhdGUgaGFuZGxlU3RvcmVTZWxlY3RlZChzdG9yZTogYW55KSB7XHJcbiAgICAvLyB5b3VyIEFQSS9kZXRhaWwgY2FsbCBmb3IgdGhhdCB0aWNrZXRcclxuICAgIHRoaXMuZGF0YVN0b3JlVmlldyhzdG9yZSk7IC8vIG9yIHN0b3JlLnRpY2tldElkIGlmIG5lZWRlZFxyXG4gIH1cclxuXHJcbiAgLy8gd2hlbiB1c2VyIGNsaWNrcyBvbiBhIHNpbmdsZSBzdG9yZSBjaGVja2JveFxyXG4gIHRvZ2dsZVN0b3JlU2VsZWN0aW9uKHN0b3JlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQoc3RvcmUpKSB7XHJcbiAgICAgIC8vIHJlbW92ZVxyXG4gICAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gdGhpcy5zZWxlY3RlZFN0b3Jlcy5maWx0ZXIoKHMpID0+IHMgIT09IHN0b3JlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGFkZCAoaWYgeW91IHdhbnQgc2luZ2xlIHNlbGVjdCwgdXNlOiB0aGlzLnNlbGVjdGVkU3RvcmVzID0gW3N0b3JlXTspXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZXMgPSBbLi4udGhpcy5zZWxlY3RlZFN0b3Jlcywgc3RvcmVdO1xyXG5cclxuICAgICAgLy8gY2FsbCBBUEkgZm9yIHRoaXMgc3RvcmVcclxuICAgICAgdGhpcy5oYW5kbGVTdG9yZVNlbGVjdGVkKHN0b3JlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBrZWVwIFwiU2VsZWN0IEFsbFwiIGluIHN5bmNcclxuICAgIHRoaXMuYWxsU2VsZWN0ZWQgPVxyXG4gICAgICB0aGlzLnNlbGVjdGVkU3RvcmVzLmxlbmd0aCA9PT0gdGhpcy5vcGVuVGlja2V0c0xpc3QubGVuZ3RoICYmXHJcbiAgICAgIHRoaXMub3BlblRpY2tldHNMaXN0Lmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICAvLyB3aGVuIHVzZXIgY2xpY2tzIG9uIFwiU2VsZWN0IEFsbFwiXHJcbiAgdG9nZ2xlU2VsZWN0QWxsKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYWxsU2VsZWN0ZWQpIHtcclxuICAgICAgLy8gdW5zZWxlY3QgZXZlcnl0aGluZ1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gW107XHJcbiAgICAgIHRoaXMuYWxsU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHNlbGVjdCBhbGwgdmlzaWJsZSBzdG9yZXNcclxuICAgICAgdGhpcy5zZWxlY3RlZFN0b3JlcyA9IFsuLi50aGlzLm9wZW5UaWNrZXRzTGlzdF07XHJcbiAgICAgIHRoaXMuYWxsU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAvLyB1c3VhbGx5IG5vIG5lZWQgdG8gY2FsbCBkZXRhaWwgQVBJIGhlcmUsIGJ1dCB5b3UgY2FuIGlmIHlvdSB3YW50XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcmlnaW5hbEltYWdlOiBhbnkgPSB7XHJcbiAgICBpZDogNCxcclxuICAgIGVudHJ5VGltZTogXCIxMDowMCBBTVwiLFxyXG4gIH07XHJcbiAgdGlja2V0OiBhbnkgPSBbXTtcclxuICBpbWFnZVVybDogYW55O1xyXG4gIGdldEZvcm1hdHRlZEVudHJ5VGltZShlbnRyeVRpbWU6IGFueSkge1xyXG4gICAgaWYgKCFlbnRyeVRpbWUpIHJldHVybiBcIi1cIjtcclxuICAgIGNvbnN0IFtob3VycywgbWludXRlcywgc2Vjb25kc10gPSBlbnRyeVRpbWUuc3BsaXQoXCI6XCIpLm1hcChOdW1iZXIpO1xyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICBkYXRlLnNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTtcclxuICAgIHJldHVybiBkYXRlLnRvTG9jYWxlVGltZVN0cmluZyhcImVuLVVTXCIsIHtcclxuICAgICAgaG91cjogXCIyLWRpZ2l0XCIsXHJcbiAgICAgIG1pbnV0ZTogXCIyLWRpZ2l0XCIsXHJcbiAgICAgIC8vIHNlY29uZDogJzItZGlnaXQnLFxyXG4gICAgICBob3VyMTI6IHRydWUsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgZHVwbGljYXRlczogYW55O1xyXG5cclxuICAvLyBrZXkgPSBwYXJlbnQgb3JpZ2luYWwudGVtcElkLCB2YWx1ZSA9IGFycmF5IG9mIHNlbGVjdGVkIGR1cGxpY2F0ZSB0ZW1wSWRzXHJcbiAgc2VsZWN0ZWREdXBsaWNhdGVzQnlQYXJlbnQ6IHsgW3BhcmVudElkOiBudW1iZXJdOiBudW1iZXJbXSB9ID0ge307XHJcblxyXG4gIC8vIGlzIG9uZSBkdXBsaWNhdGUgc2VsZWN0ZWQ/XHJcbiAgaXNEdXBsaWNhdGVTZWxlY3RlZChwYXJlbnRJZDogbnVtYmVyLCBkdXBsaWNhdGVJZDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkRHVwbGljYXRlc0J5UGFyZW50W3BhcmVudElkXT8uaW5jbHVkZXMoZHVwbGljYXRlSWQpIHx8IGZhbHNlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gc2VsZWN0IC8gdW5zZWxlY3Qgc2luZ2xlIGR1cGxpY2F0ZVxyXG4gIG9uRHVwbGljYXRlQ2hlY2tib3hDaGFuZ2UoXHJcbiAgICBwYXJlbnRJZDogbnVtYmVyLFxyXG4gICAgZHVwbGljYXRlSWQ6IG51bWJlcixcclxuICAgIGV2ZW50OiBFdmVudFxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgY2hlY2tlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcclxuXHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWREdXBsaWNhdGVzQnlQYXJlbnRbcGFyZW50SWRdKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREdXBsaWNhdGVzQnlQYXJlbnRbcGFyZW50SWRdID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGlzdCA9IHRoaXMuc2VsZWN0ZWREdXBsaWNhdGVzQnlQYXJlbnRbcGFyZW50SWRdO1xyXG5cclxuICAgIGlmIChjaGVja2VkKSB7XHJcbiAgICAgIGlmICghbGlzdC5pbmNsdWRlcyhkdXBsaWNhdGVJZCkpIHtcclxuICAgICAgICBsaXN0LnB1c2goZHVwbGljYXRlSWQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRHVwbGljYXRlc0J5UGFyZW50W3BhcmVudElkXSA9IGxpc3QuZmlsdGVyKFxyXG4gICAgICAgIChpZCkgPT4gaWQgIT09IGR1cGxpY2F0ZUlkXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZU92ZXJhbGxTZWxlY3RlZElkcygpO1xyXG4gICAgY29uc29sZS5sb2coXCJTZWxlY3RlZCBkdXBsaWNhdGVzIG1hcDpcIiwgdGhpcy5zZWxlY3RlZER1cGxpY2F0ZXNCeVBhcmVudCk7XHJcbiAgfVxyXG5cclxuICAvLyBhcmUgKmFsbCogZHVwbGljYXRlcyB1bmRlciB0aGlzIHBhcmVudCBzZWxlY3RlZD9cclxuICBhcmVBbGxEdXBsaWNhdGVzU2VsZWN0ZWQob3JpZ2luYWw6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcGFyZW50SWQgPSBvcmlnaW5hbC50ZW1wSWQ7XHJcbiAgICBjb25zdCBkdXBsaWNhdGVzID0gb3JpZ2luYWw/LmR1cGxpY2F0ZUltYWdlIHx8IFtdO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkRHVwbGljYXRlc0J5UGFyZW50W3BhcmVudElkXSB8fCBbXTtcclxuXHJcbiAgICByZXR1cm4gZHVwbGljYXRlcy5sZW5ndGggPiAwICYmIHNlbGVjdGVkLmxlbmd0aCA9PT0gZHVwbGljYXRlcy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICAvLyBoYW5kbGUgXCJTZWxlY3QgQWxsXCIgdG9nZ2xlIGZvciB0aGlzIG9yaWdpbmFsXHJcbiAgb25Ub2dnbGVTZWxlY3RBbGxEdXBsaWNhdGVzKG9yaWdpbmFsOiBhbnksIGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgY2hlY2tlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcclxuICAgIGNvbnN0IHBhcmVudElkID0gb3JpZ2luYWwudGVtcElkO1xyXG4gICAgY29uc3QgZHVwbGljYXRlcyA9IG9yaWdpbmFsPy5kdXBsaWNhdGVJbWFnZSB8fCBbXTtcclxuXHJcbiAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRHVwbGljYXRlc0J5UGFyZW50W3BhcmVudElkXSA9IGR1cGxpY2F0ZXMubWFwKFxyXG4gICAgICAgIChkOiBhbnkpID0+IGQudGVtcElkXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRHVwbGljYXRlc0J5UGFyZW50W3BhcmVudElkXSA9IFtdO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVPdmVyYWxsU2VsZWN0ZWRJZHMoKTtcclxuICAgIGNvbnNvbGUubG9nKFwiU2VsZWN0ZWQgZHVwbGljYXRlcyBtYXA6XCIsIHRoaXMuc2VsZWN0ZWREdXBsaWNhdGVzQnlQYXJlbnQpO1xyXG4gIH1cclxuXHJcbiAgLy8gY29tbWVudHM6IGFueTtcclxuXHJcbiAgY29tbWVudE1vZGFsKG9iajogYW55KSB7XHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRm9vdGZhbGxQb3B1cENvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgc2l6ZTogXCJtZFwiLFxyXG4gICAgICBzY3JvbGxhYmxlOiB0cnVlLFxyXG4gICAgICBiYWNrZHJvcDogXCJzdGF0aWNcIixcclxuICAgIH0pO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGlja2V0SWQgPSBvYmoudGlja2V0SWQ7XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7fSk7XHJcbiAgfVxyXG5cclxuICBjb21tZW50c0FjY29yZGlvbk9wZW4gPSBmYWxzZTtcclxuXHJcbiAgdG9nZ2xlQ29tbWVudHNBY2NvcmRpb24oKSB7XHJcbiAgICB0aGlzLmNvbW1lbnRzQWNjb3JkaW9uT3BlbiA9ICF0aGlzLmNvbW1lbnRzQWNjb3JkaW9uT3BlbjtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgY29tbWVudHM6IGFueSA9IFtcclxuICAgIHtcclxuICAgICAgZW1haWw6IFwicnlhbkBsZW5za2FydC5jb21cIixcclxuICAgICAgYXZhdGFyOiBcImFzc2V0cy9hdmF0YXJzL3J5YW4ucG5nXCIsXHJcbiAgICAgIHRpbWU6IFwiMjAyNS0wMS0yMFQxMDo1MzozNFwiLFxyXG4gICAgICBtYWluVGV4dDogXCJBbGwgdGhlIHRocmVlIGFyZSBzYW1lLlwiLFxyXG4gICAgICBzdGF0dXNMYWJlbDogbnVsbCwgLy8gbm8g4oCcTWFya2VkIGFzIOKApuKAnSBsaW5lXHJcbiAgICAgIHN0YXR1c1R5cGU6IG51bGwsXHJcbiAgICAgIG5vdGU6IG51bGwsXHJcbiAgICAgIGltYWdlczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHVybDogXCJhc3NldHMvaW1nMS5qcGdcIixcclxuICAgICAgICAgIHRhbmdvSWQ6IDQsXHJcbiAgICAgICAgICBlbnRyeVRpbWU6IFwiMTA6MTAgQU1cIixcclxuICAgICAgICAgIHN0YXR1czogXCJyZWplY3RcIixcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHVybDogXCJhc3NldHMvaW1nMi5qcGdcIixcclxuICAgICAgICAgIHRhbmdvSWQ6IDQsXHJcbiAgICAgICAgICBlbnRyeVRpbWU6IFwiMTA6MTAgQU1cIixcclxuICAgICAgICAgIHN0YXR1czogXCJyZWplY3RcIixcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIG1vcmUgaW1hZ2VzIGlmIHlvdSB3YW50XHJcbiAgICAgIF0sXHJcbiAgICAgIG1vcmVDb3VudDogMTIsIC8vIGZvciB0aGUgKzEyIGNhcmRcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGVtYWlsOiBcImRyZXdAbGVuc2thcnQuY29tXCIsXHJcbiAgICAgIGF2YXRhcjogXCJhc3NldHMvYXZhdGFycy9kcmV3LnBuZ1wiLFxyXG4gICAgICB0aW1lOiBcIjIwMjUtMDEtMjBUMTA6NTM6MzRcIixcclxuICAgICAgbWFpblRleHQ6IG51bGwsXHJcbiAgICAgIHN0YXR1c0xhYmVsOiBcIlJlamVjdFwiLFxyXG4gICAgICBzdGF0dXNUeXBlOiBcImRhbmdlclwiLCAvLyBmb3IgcmVkIHRleHRcclxuICAgICAgbm90ZTogXCJOb3QgYWdyZWVkLCBzZWVtcyBub3QgZHVwbGljYXRlLlwiLFxyXG4gICAgICBpbWFnZXM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICB1cmw6IFwiYXNzZXRzL2ltZzEuanBnXCIsXHJcbiAgICAgICAgICB0YW5nb0lkOiA0LFxyXG4gICAgICAgICAgZW50cnlUaW1lOiBcIjEwOjEwIEFNXCIsXHJcbiAgICAgICAgICBzdGF0dXM6IFwicmVqZWN0XCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB1cmw6IFwiYXNzZXRzL2ltZzIuanBnXCIsXHJcbiAgICAgICAgICB0YW5nb0lkOiA0LFxyXG4gICAgICAgICAgZW50cnlUaW1lOiBcIjEwOjEwIEFNXCIsXHJcbiAgICAgICAgICBzdGF0dXM6IFwicmVqZWN0XCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgXSxcclxuICAgICAgbW9yZUNvdW50OiAxMixcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGVtYWlsOiBcIm9ybGFuZG9AbGVuc2thcnQuY29tXCIsXHJcbiAgICAgIGF2YXRhcjogXCJhc3NldHMvYXZhdGFycy9vcmxhbmRvLnBuZ1wiLFxyXG4gICAgICB0aW1lOiBcIjIwMjUtMDEtMjBUMTA6NTM6MzRcIixcclxuICAgICAgbWFpblRleHQ6IG51bGwsXHJcbiAgICAgIHN0YXR1c0xhYmVsOiBcIkFwcHJvdmVkXCIsXHJcbiAgICAgIHN0YXR1c1R5cGU6IFwic3VjY2Vzc1wiLCAvLyBncmVlblxyXG4gICAgICBub3RlOiBcIkFncmVlZCwgaGVuY2UgYXBwcm92aW5nIHRoZSAzXCIsXHJcbiAgICAgIGltYWdlczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHVybDogXCJhc3NldHMvaW1nMS5qcGdcIixcclxuICAgICAgICAgIHRhbmdvSWQ6IDQsXHJcbiAgICAgICAgICBlbnRyeVRpbWU6IFwiMTA6MTAgQU1cIixcclxuICAgICAgICAgIHN0YXR1czogXCJhcHByb3ZlXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB1cmw6IFwiYXNzZXRzL2ltZzIuanBnXCIsXHJcbiAgICAgICAgICB0YW5nb0lkOiA0LFxyXG4gICAgICAgICAgZW50cnlUaW1lOiBcIjEwOjEwIEFNXCIsXHJcbiAgICAgICAgICBzdGF0dXM6IFwiYXBwcm92ZVwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICAgIG1vcmVDb3VudDogMCxcclxuICAgIH0sXHJcbiAgXTtcclxuXHJcbiAgc2hvd1JldmlzZWREZXRhaWxzID0gZmFsc2U7XHJcbiAgZm9vdGZhbGxOb0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmb290ZmFsbExvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmb290ZmFsbG9mZnNldCA9IDE7XHJcbiAgZm9vdGZhbGxsaW1pdCA9IDE7XHJcbiAgdG90YWxJdGVtc0Zvb3RmYWxsOiBhbnkgPSAwO1xyXG4gIGRhdGFJbmRleElkOiBzdHJpbmcgPSBcIlwiO1xyXG4gIGRhdGVTdHJpbmc6IHN0cmluZyA9IFwiXCI7XHJcbiAgc3RvcmVJZFZhbHVlOiBhbnkgPSBbXTtcclxuICBsYXN0U2VsZWN0ZWRUaWNrZXQ6IGFueTtcclxuICBzZWxlY3RlVmFsdWVzOiBhbnkgPSBcIlwiO1xyXG4gIGhhc0luaXRpYWxTdG9yZVN5bmNlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwYWdlU2l6ZUZvb3RmYWxsOiBudW1iZXIgPSAxMDtcclxuICBwYWdpbmF0aW9uU2l6ZXNGb290ZmFsbDogbnVtYmVyW10gPSBbMTAsIDIwLCAzMF07XHJcbiAgYWRkU3RvcmVJZk5vdEV4aXN0cyhzdG9yZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5oYXNJbml0aWFsU3RvcmVTeW5jZWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBzdG9yZUlkID0gc3RvcmU/LnN0b3JlSWQ7XHJcbiAgICBpZiAoc3RvcmVJZCAmJiAhdGhpcy5zZWxlY3RlZFN0b3Jlcy5pbmNsdWRlcyhzdG9yZUlkKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU3RvcmVzLnB1c2goc3RvcmVJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5oYXNJbml0aWFsU3RvcmVTeW5jZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5hbGxTZWxlY3RlZCA9XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZXMubGVuZ3RoID09PSB0aGlzLm9wZW5UaWNrZXRzTGlzdC5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBoYXNSZXZvcHNUeXBlKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmZvb3RmYWxsVGlja2V0c0RhdGEgfHwgIUFycmF5LmlzQXJyYXkodGhpcy5mb290ZmFsbFRpY2tldHNEYXRhKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZm9vdGZhbGxUaWNrZXRzRGF0YS5zb21lKCh0aWNrZXQ6IGFueSkgPT5cclxuICAgICAgdGlja2V0Py5fc291cmNlPy5tYXBwaW5nSW5mbz8uc29tZSgobWFwcGluZzogYW55KSA9PlxyXG4gICAgICAgIChtYXBwaW5nPy5yZXZpc2VkRGV0YWlsIHx8IFtdKS5zb21lKChyOiBhbnkpID0+IHI/LnJldm9wc1R5cGUgPT09IHR5cGUpXHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvdmVyYWxsU2VsZWN0ZWRJZHM6IGFueTtcclxuICBvdmVyYWxsU2VsZWN0KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuYWxsU2VsZWN0ZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XHJcbiAgICBjb25zdCBjaGVja2VkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xyXG4gICAgY29uc3QgcGFyZW50cyA9IHRoaXMuZ2V0QWxsUGFyZW50SXRlbXMoKTtcclxuXHJcbiAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICAoW1wianVua1wiLCBcImVtcGxveWVlXCIsIFwiaG91c2VLZWVwaW5nXCJdIGFzIGNvbnN0KS5mb3JFYWNoKCh0eXBlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMuZ2V0TGlzdEJ5VHlwZSh0eXBlKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQnlUeXBlW3R5cGVdID0gbGlzdC5tYXAoKGk6IGFueSkgPT4gaS50ZW1wSWQpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0QWxsQnlUeXBlW3R5cGVdID0gbGlzdC5sZW5ndGggPiAwO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREdXBsaWNhdGVzQnlQYXJlbnQgPSB7fTsgLy8gcmVzZXQgZmlyc3RcclxuXHJcbiAgICAgIHBhcmVudHNcclxuICAgICAgICAuZmlsdGVyKChwOiBhbnkpID0+IHAucmV2b3BzVHlwZSA9PT0gXCJkdXBsaWNhdGVcIilcclxuICAgICAgICAuZm9yRWFjaCgocDogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHAudGVtcElkO1xyXG4gICAgICAgICAgY29uc3QgZHVwbGljYXRlcyA9IHAuZHVwbGljYXRlSW1hZ2UgfHwgW107XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRHVwbGljYXRlc0J5UGFyZW50W3BhcmVudElkXSA9IGR1cGxpY2F0ZXMubWFwKFxyXG4gICAgICAgICAgICAoZDogYW55KSA9PiBkLnRlbXBJZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIC8vIPCflLkgYnVpbGQgSURzXHJcbiAgICAgIHRoaXMudXBkYXRlT3ZlcmFsbFNlbGVjdGVkSWRzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBjbGVhciBhbGxcclxuICAgICAgdGhpcy5zZWxlY3RlZEJ5VHlwZS5qdW5rID0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRCeVR5cGUuZW1wbG95ZWUgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEJ5VHlwZS5ob3VzZUtlZXBpbmcgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZER1cGxpY2F0ZXNCeVBhcmVudCA9IHt9O1xyXG5cclxuICAgICAgdGhpcy5zZWxlY3RBbGxCeVR5cGUuanVuayA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdEFsbEJ5VHlwZS5lbXBsb3llZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNlbGVjdEFsbEJ5VHlwZS5ob3VzZUtlZXBpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWxlY3RBbGxCeVR5cGUuZHVwbGljYXRlID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLm92ZXJhbGxTZWxlY3RlZElkcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwic2VsZWN0ZWRCeVR5cGU6XCIsIHRoaXMuc2VsZWN0ZWRCeVR5cGUpO1xyXG4gICAgY29uc29sZS5sb2coXCJzZWxlY3RlZER1cGxpY2F0ZXNCeVBhcmVudDpcIiwgdGhpcy5zZWxlY3RlZER1cGxpY2F0ZXNCeVBhcmVudCk7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxQYXJlbnRJdGVtcygpIHtcclxuICAgIGlmICghdGhpcy5mb290ZmFsbFRpY2tldHNEYXRhKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhbGxNYXBwaW5nczogYW55W10gPSBbXTtcclxuICAgIGNvbnN0IGFsbFJldmlzZWQ6IGFueVtdID0gW107XHJcblxyXG4gICAgLy8gZmlyc3QgbGV2ZWw6IGNvbGxlY3QgYWxsIG1hcHBpbmdJbmZvIGFycmF5c1xyXG4gICAgdGhpcy5mb290ZmFsbFRpY2tldHNEYXRhLmZvckVhY2goKHRpY2tldDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IG1hcHBpbmdzID0gdGlja2V0Py5fc291cmNlPy5tYXBwaW5nSW5mbyB8fCBbXTtcclxuICAgICAgYWxsTWFwcGluZ3MucHVzaC5hcHBseShhbGxNYXBwaW5ncywgbWFwcGluZ3MpOyAvLyBjb25jYXRcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHNlY29uZCBsZXZlbDogY29sbGVjdCBhbGwgcmV2aXNlZERldGFpbCBhcnJheXNcclxuICAgIGFsbE1hcHBpbmdzLmZvckVhY2goKG1hcHBpbmc6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBkZXRhaWxzID0gbWFwcGluZz8ucmV2aXNlZERldGFpbCB8fCBbXTtcclxuICAgICAgYWxsUmV2aXNlZC5wdXNoLmFwcGx5KGFsbFJldmlzZWQsIGRldGFpbHMpOyAvLyBjb25jYXRcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBhbGxSZXZpc2VkO1xyXG4gIH1cclxuXHJcbiAgaXNDaGVja2JveEVuYWJsZSA9IGZhbHNlO1xyXG4gIGNsb3NlQnRuID0gZmFsc2U7XHJcbiAgY2xvc2VEaXNhYmxlZCA9IGZhbHNlO1xyXG4gIHN0YXJ0UmV2aWV3KCkge1xyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgXCJzdG9yZUlkXCI6dGhpcy50aWNrZXREYXRhPy5zdG9yZUlkLFxyXG4gICAgXCJkYXRlU3RyaW5nXCI6dGhpcy50aWNrZXREYXRhPy5pc3N1ZURhdGUsXHJcbiAgICBcIm1vZGVcIjpcIndlYlwiXHJcbiAgICB9XHJcbnRoaXMuc2VydmljZS5nZXRVcGRhdGVUaWNrZXRTdGF0dXNBcGkob2JqKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICBuZXh0OihyZXM6YW55KT0+e1xyXG4gICAgaWYocmVzICYmIHJlcy5jb2RlID09PSAyMDApe1xyXG4gICAgdGhpcy5pc0NoZWNrYm94RW5hYmxlID0gdHJ1ZTsgLy8gY2FsbCB0aGlzIG9uIHlvdXIgXCJSZXZpZXdcIiBidXR0b24gY2xpY2tcclxuICAgIHRoaXMuY2xvc2VCdG4gPSB0cnVlO1xyXG4gICAgdGhpcy5jbG9zZURpc2FibGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmRhdGFTdG9yZVZpZXcodGhpcy50aWNrZXREYXRhKVxyXG4gICAgfVxyXG4gIH0sXHJcbiAgZXJyb3I6KGVycjphbnkpPT57XHJcbiAgfSxcclxuICBjb21wbGV0ZTooKT0+e1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG59KSAgXHJcbiAgfVxyXG4gIEBWaWV3Q2hpbGQoXCJjbG9zZVBvcHVwXCIpIGNsb3NlUG9wdXA6IEVsZW1lbnRSZWY7XHJcbiAgc3RvcFJldmlldygpIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLmNsb3NlUG9wdXAsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIHNpemU6IFwibWRcIixcclxuICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsXHJcbiAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5pc0NoZWNrYm94RW5hYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmNsb3NlQnRuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0aWNrZXRWaWV3KGRhdGE/OiBhbnkpIHtcclxuICAgIHRoaXMudGlja2V0RGF0YSA9IGRhdGE7XHJcbiAgICBpZih0aGlzLnRpY2tldERhdGE/LnN0YXR1cyA9PT0gJ0luLVByb2dyZXNzJyB8fCB0aGlzLnRpY2tldERhdGE/LnN0YXR1cyA9PT0gJ1VuZGVyIHRhbmdlIHJldmlldycgfHwgdGhpcy50aWNrZXREYXRhPy5zdGF0dXMgPT09ICdUYW5nZSByZXZpZXcgZG9uZScgfHwgdGhpcy5nZXRIZWFkZXJTdGF0dXMoKSA9PT0gJ0luLVByb2dyZXNzJyl7XHJcbiAgICAgIHRoaXMuY2xvc2VCdG4gPSB0cnVlO1xyXG4gICAgICB0aGlzLmNsb3NlRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc0NoZWNrYm94RW5hYmxlID10cnVlXHJcbiAgICB9IGVsc2UgaWYodGhpcy50aWNrZXREYXRhPy5zdGF0dXMgPT09ICdDbG9zZWQnIHx8IHRoaXMuZ2V0SGVhZGVyU3RhdHVzKCkgPT09ICdDbG9zZWQnKXtcclxuICAgICAgdGhpcy5pc0NoZWNrYm94RW5hYmxlID1mYWxzZVxyXG4gICAgfSBlbHNle1xyXG4gICAgICB0aGlzLmNsb3NlQnRuID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2xvc2VEaXNhYmxlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhcImNsb3NlQnRuXCIsIHRoaXMuY2xvc2VCdG4pO1xyXG4gICAgdGhpcy5nZXRPcGVuVGlja2V0TGlzdChkYXRhKTtcclxuICAgIHRoaXMuc2VsZWN0ID0gXCJ0aWNrZXRNZXRob2RcIjtcclxuICBcclxuICB9XHJcbiAgZGF0YVN0b3JlVmlldyhkYXRhPzogYW55KSB7XHJcbiAgICB0aGlzLmZvb3RmYWxsVGlja2V0c0RhdGEgPSBbXTtcclxuICAgIHRoaXMuZm9vdGZhbGxOb0RhdGEgPSBmYWxzZTtcclxuICAgIHRoaXMuZm9vdGZhbGxMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHRpY2tldCA9IGRhdGE/LnRpY2tldElkO1xyXG5cclxuICAgIC8vIGlmICghdGlja2V0IHx8ICF0aWNrZXQuX3NvdXJjZSkge1xyXG4gICAgLy8gICB0aGlzLmZvb3RmYWxsTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgLy8gICB0aGlzLmZvb3RmYWxsTm9EYXRhID0gdHJ1ZTtcclxuICAgIC8vICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KFwiTm8gdGlja2V0IGRhdGEgYXZhaWxhYmxlXCIpO1xyXG4gICAgLy8gICByZXR1cm47XHJcbiAgICAvLyB9XHJcblxyXG4gICAgdGhpcy5sYXN0U2VsZWN0ZWRUaWNrZXQgPSB0aWNrZXQ7XHJcbiAgICB0aGlzLmFkZFN0b3JlSWZOb3RFeGlzdHModGlja2V0KTtcclxuICAgIHRoaXMuaW1hZ2VVcmwgPSB0aGlzLnNlcnZpY2U/LmZvb3RmYWxsQ0ROO1xyXG4gICAgdGhpcy5zdG9yZUlkVmFsdWUgPSB0aGlzLnNlbGVjdGVkU3RvcmVzO1xyXG5cclxuICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAuZ2V0VGlja2V0c05ld0FwaSh0aWNrZXQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uZGF0YT8ucmVzdWx0Py5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmZvb3RmYWxsVGlja2V0c0RhdGEgPSBbXTtcclxuICAgICAgICAgICAgICB0aGlzLmZvb3RmYWxsTm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmZvb3RmYWxsTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMudHMuZ2V0RXJyb3JUb2FzdChcIk5vIGRhdGEgZm91bmQgZm9yIHRoZSBzZWxlY3RlZCBmaWx0ZXJzXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9vdGZhbGxUaWNrZXRzRGF0YSA9IHJlcz8uZGF0YT8ucmVzdWx0ID8/IFtdO1xyXG4gICAgICAgICAgICAgIHRoaXMudG90YWxJdGVtc0Zvb3RmYWxsID0gcmVzPy5kYXRhPy5jb3VudDtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5mb290ZmFsbGxpbWl0ID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFsxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFnZVNpemVGb290ZmFsbCA9IDE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbWl0ID1cclxuICAgICAgICAgICAgICAgIHRoaXMudG90YWxJdGVtc0Zvb3RmYWxsIDwgMTAgPyB0aGlzLnRvdGFsSXRlbXNGb290ZmFsbCA6IDEwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbbGltaXRdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZUZvb3RmYWxsID0gbGltaXQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuZm9vdGZhbGxOb0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmZvb3RmYWxsTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2xvc2VCdXR0b25Gcm9tU3RvcmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mb290ZmFsbFRpY2tldHNEYXRhID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuZm9vdGZhbGxOb0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmZvb3RmYWxsTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGVycj8uZXJyb3I/LmNvZGUgPT09IDQwMClcclxuICAgICAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KFxyXG4gICAgICAgICAgICAgIGVycj8uZXJyb3I/Lm1lc3NhZ2UgPyBlcnI/LmVycm9yPy5tZXNzYWdlIDogZXJyPy5lcnJvcj8uZXJyb3JcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuZm9vdGZhbGxUaWNrZXRzRGF0YSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5mb290ZmFsbE5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmZvb3RmYWxsTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBmb290ZmFsbFRpY2tldHNEYXRhOiBhbnlbXSA9IFtdO1xyXG4gIC8vIC0tLS0gU0VMRUNUSU9OIFNUQVRFIC0tLS1cclxuXHJcbiAgc2VsZWN0ZWRCeVR5cGU/OiBhbnkgPSB7XHJcbiAgICBqdW5rOiBbXSxcclxuICAgIGVtcGxveWVlOiBbXSxcclxuICAgIGhvdXNlS2VlcGluZzogW10sXHJcbiAgICBkdXBsaWNhdGU6IFtdLFxyXG4gIH07XHJcblxyXG4gIHNlbGVjdEFsbEJ5VHlwZTogYW55ID0ge1xyXG4gICAganVuazogZmFsc2UsXHJcbiAgICBlbXBsb3llZTogZmFsc2UsXHJcbiAgICBob3VzZUtlZXBpbmc6IGZhbHNlLFxyXG4gICAgZHVwbGljYXRlOiBmYWxzZSxcclxuICB9O1xyXG4gIC8vIC0tLS0gSEVMUEVSUyAtLS0tXHJcblxyXG4gIC8vIEdldCBhbGwgcmV2aXNlZERldGFpbCBpdGVtcyBvZiBhIGdpdmVuIHR5cGUgZnJvbSBmb290ZmFsbFRpY2tldHNEYXRhXHJcbi8vIEdldCBhbGwgcmV2aXNlZERldGFpbCBpdGVtcyBvZiBhIGdpdmVuIHR5cGUgZnJvbSBmb290ZmFsbFRpY2tldHNEYXRhXHJcbmdldExpc3RCeVR5cGUodHlwZTogXCJqdW5rXCIgfCBcImVtcGxveWVlXCIgfCBcImhvdXNlS2VlcGluZ1wiKSB7XHJcbiAgaWYgKCF0aGlzLmZvb3RmYWxsVGlja2V0c0RhdGEpIHtcclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGFsbFJldmlzZWQ6IGFueVtdID0gW107XHJcblxyXG4gIC8vIGNvbGxlY3QgcmV2aXNlZERldGFpbCBPTkxZIGZyb20gbWFwcGluZ0luZm8gd2l0aCB0eXBlID09PSAncmV2aWV3J1xyXG4gIHRoaXMuZm9vdGZhbGxUaWNrZXRzRGF0YS5mb3JFYWNoKCh0aWNrZXQ6IGFueSkgPT4ge1xyXG4gICAgY29uc3QgbWFwcGluZ3MgPSB0aWNrZXQ/Ll9zb3VyY2U/Lm1hcHBpbmdJbmZvIHx8IFtdO1xyXG5cclxuICAgIG1hcHBpbmdzXHJcbiAgICAgIC5maWx0ZXIoKG06IGFueSkgPT4gbT8udHlwZSA9PT0gJ3JldmlldycpIC8vIPCflLkgSU1QT1JUQU5UXHJcbiAgICAgIC5mb3JFYWNoKChtYXBwaW5nOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBkZXRhaWxzID0gbWFwcGluZz8ucmV2aXNlZERldGFpbCB8fCBbXTtcclxuICAgICAgICBhbGxSZXZpc2VkLnB1c2goLi4uZGV0YWlscyk7XHJcbiAgICAgIH0pO1xyXG4gIH0pO1xyXG5cclxuICAvLyBmaWx0ZXIgYnkgdHlwZSAoanVuayAvIGVtcGxveWVlIC8gaG91c2VLZWVwaW5nKVxyXG4gIGNvbnN0IGZpbHRlcmVkID0gYWxsUmV2aXNlZC5maWx0ZXIoXHJcbiAgICAob3JpZ2luYWw6IGFueSkgPT4gb3JpZ2luYWw/LnJldm9wc1R5cGUgPT09IHR5cGVcclxuICApO1xyXG5cclxuICAvLyDwn5S5IERFRFVQRSBieSB0ZW1wSWQgKG9yIGlkKSBzbyB3ZSBkb24ndCBjb3VudCBzYW1lIGltYWdlIHR3aWNlXHJcbiAgY29uc3QgdW5pcXVlQnlUZW1wSWQgPSBBcnJheS5mcm9tKFxyXG4gICAgbmV3IE1hcChmaWx0ZXJlZC5tYXAoKGl0ZW06IGFueSkgPT4gW2l0ZW0udGVtcElkLCBpdGVtXSkpLnZhbHVlcygpXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIHVuaXF1ZUJ5VGVtcElkO1xyXG59XHJcblxyXG5cclxucHJpdmF0ZSB1cGRhdGVPdmVyYWxsU2VsZWN0ZWRJZHMoKTogdm9pZCB7XHJcbiAgY29uc3QgaWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIGNvbnN0IHBhcmVudHMgPSB0aGlzLmdldEFsbFBhcmVudEl0ZW1zKCk7XHJcblxyXG4gIGNvbnN0IHNlbGVjdGVkVHlwZXNTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuXHJcbiAgKFtcImp1bmtcIiwgXCJlbXBsb3llZVwiLCBcImhvdXNlS2VlcGluZ1wiXSBhcyBjb25zdCkuZm9yRWFjaCgodHlwZSkgPT4ge1xyXG4gICAgY29uc3QgbGlzdCA9IHRoaXMuZ2V0TGlzdEJ5VHlwZSh0eXBlKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkVGVtcHMgPSB0aGlzLnNlbGVjdGVkQnlUeXBlW3R5cGVdIHx8IFtdO1xyXG5cclxuICAgIGlmIChzZWxlY3RlZFRlbXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgc2VsZWN0ZWRUeXBlc1NldC5hZGQodHlwZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGlzdC5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHNlbGVjdGVkVGVtcHMuaW5jbHVkZXMoaXRlbS50ZW1wSWQpICYmIGl0ZW0uaWQpIHtcclxuICAgICAgICBpZHMucHVzaChpdGVtLmlkKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSk7XHJcblxyXG4gIHBhcmVudHNcclxuICAgIC5maWx0ZXIoKHA6IGFueSkgPT4gcC5yZXZvcHNUeXBlID09PSBcImR1cGxpY2F0ZVwiKVxyXG4gICAgLmZvckVhY2goKHBhcmVudDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHBhcmVudElkID0gcGFyZW50LnRlbXBJZDtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRDaGlsZFRlbXBzID1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRHVwbGljYXRlc0J5UGFyZW50W3BhcmVudElkXSB8fCBbXTtcclxuXHJcbiAgICAgIGlmIChzZWxlY3RlZENoaWxkVGVtcHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHNlbGVjdGVkVHlwZXNTZXQuYWRkKFwiZHVwbGljYXRlXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAocGFyZW50LmR1cGxpY2F0ZUltYWdlIHx8IFtdKS5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkQ2hpbGRUZW1wcy5pbmNsdWRlcyhjaGlsZC50ZW1wSWQpKSB7XHJcbiAgICAgICAgICBpZiAoY2hpbGQuaWQpIHtcclxuICAgICAgICAgICAgaWRzLnB1c2goY2hpbGQuaWQpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChwYXJlbnQuaWQpIHtcclxuICAgICAgICAgICAgaWRzLnB1c2gocGFyZW50LmlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gIHRoaXMub3ZlcmFsbFNlbGVjdGVkSWRzID0gQXJyYXkuZnJvbShuZXcgU2V0KGlkcykpOyAgIC8vIGRlZHVwZVxyXG5cclxuICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IEFycmF5LmZyb20oc2VsZWN0ZWRUeXBlc1NldCk7XHJcblxyXG4gIGNvbnNvbGUubG9nKFwib3ZlcmFsbFNlbGVjdGVkSWRzOlwiLCB0aGlzLm92ZXJhbGxTZWxlY3RlZElkcyk7XHJcbiAgY29uc29sZS5sb2coXCJzZWxlY3RlZENhdGVnb3JpZXM6XCIsIHRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzKTtcclxufVxyXG5cclxuc2VsZWN0ZWRDYXRlZ29yaWVzOiBzdHJpbmdbXSA9IFtdOyAvLyBqdW5rLCBlbXBsb3llZSwgaG91c2VLZWVwaW5nLCBkdXBsaWNhdGVcclxuXHJcbmdldCBzZWxlY3RlZENhdGVnb3JpZXNMYWJlbCgpOiBzdHJpbmcge1xyXG4gIGlmICghdGhpcy5zZWxlY3RlZENhdGVnb3JpZXMgfHwgIXRoaXMuc2VsZWN0ZWRDYXRlZ29yaWVzLmxlbmd0aCkge1xyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgbGFiZWxNYXA6IGFueSA9IHtcclxuICAgIGp1bms6ICdKdW5rJyxcclxuICAgIGVtcGxveWVlOiAnRW1wbG95ZWUnLFxyXG4gICAgaG91c2VLZWVwaW5nOiAnSG91c2UgS2VlcGluZycsXHJcbiAgICBkdXBsaWNhdGU6ICdEdXBsaWNhdGUnLFxyXG4gIH07XHJcblxyXG4gIHJldHVybiB0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllc1xyXG4gICAgLm1hcCgodCkgPT4gbGFiZWxNYXBbdF0gfHwgdClcclxuICAgIC5qb2luKCcsICcpO1xyXG59XHJcbiAgdHlwZTogYW55O1xyXG4gIC8vIFwiU2VsZWN0IGFsbFwiIC8gXCJVbnNlbGVjdCBhbGxcIiBmb3IgYSB0eXBlXHJcbiAgcG9wdXB2YWx1ZTogXCJlbXBsb3llZVwiIHwgXCJob3VzZUtlZXBpbmdcIiB8IFwiZHVwbGljYXRlXCIgfCBcImp1bmtcIiB8IFwiXCIgPSBcIlwiO1xyXG4gIC8vIG9yIGp1c3Q6IHBvcHVwdmFsdWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICBvblNlbGVjdEFsbCh0eXBlOiBcImp1bmtcIiB8IFwiZW1wbG95ZWVcIiB8IFwiaG91c2VLZWVwaW5nXCIsIGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGNoZWNrZWQgPSBldmVudD8udGFyZ2V0Py5jaGVja2VkO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0QWxsQnlUeXBlW3R5cGVdID0gY2hlY2tlZDtcclxuICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLnBvcHVwdmFsdWUgPSB0eXBlOyAvLyDwn5S0IElNUE9SVEFOVFxyXG5cclxuICAgIGNvbnN0IGxpc3QgPSB0aGlzLmdldExpc3RCeVR5cGUodHlwZSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEJ5VHlwZVt0eXBlXSA9IGNoZWNrZWQgPyBsaXN0Lm1hcCgoeDogYW55KSA9PiB4LnRlbXBJZCkgOiBbXTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZU92ZXJhbGxTZWxlY3RlZElkcygpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5zZWxlY3RlZEJ5VHlwZSk7XHJcbiAgfVxyXG5cclxuICAvLyBTaW5nbGUgY2hlY2tib3ggY2hhbmdlIGZvciBvbmUgaW1hZ2Vcclxub25JbWFnZUNoZWNrYm94Q2hhbmdlKHR5cGU6IFwianVua1wiIHwgXCJlbXBsb3llZVwiIHwgXCJob3VzZUtlZXBpbmdcIiwgaWQ6IGFueSkge1xyXG4gIC8vIGVuc3VyZSBhcnJheSBleGlzdHNcclxuICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZWxlY3RlZEJ5VHlwZVt0eXBlXSB8fCBbXTtcclxuXHJcbiAgY29uc3Qgc2VsZWN0ZWQgPSBuZXcgU2V0KGN1cnJlbnQpO1xyXG4gIGlmIChzZWxlY3RlZC5oYXMoaWQpKSB7XHJcbiAgICBzZWxlY3RlZC5kZWxldGUoaWQpOyAgIC8vIHVuY2hlY2tcclxuICB9IGVsc2Uge1xyXG4gICAgc2VsZWN0ZWQuYWRkKGlkKTsgICAgICAvLyBjaGVja1xyXG4gIH1cclxuXHJcbiAgLy8gYXNzaWduIG5ldyBhcnJheSAoYmV0dGVyIGZvciBjaGFuZ2UgZGV0ZWN0aW9uKVxyXG4gIHRoaXMuc2VsZWN0ZWRCeVR5cGVbdHlwZV0gPSBBcnJheS5mcm9tKHNlbGVjdGVkKTtcclxuXHJcbiAgLy8gdG90YWwgaXRlbXMgZm9yIHRoaXMgdHlwZSAobm93IHVzaW5nIGRlZHVwZWQgbGlzdClcclxuICBjb25zdCB0b3RhbCA9IHRoaXMuZ2V0TGlzdEJ5VHlwZSh0eXBlKS5sZW5ndGg7XHJcblxyXG4gIC8vIOKchSBhdXRvLWNoZWNrIFwic2VsZWN0IGFsbFwiIHdoZW4gYWxsIGl0ZW1zIG9mIHRoYXQgdHlwZSBhcmUgc2VsZWN0ZWRcclxuICB0aGlzLnNlbGVjdEFsbEJ5VHlwZVt0eXBlXSA9XHJcbiAgICB0b3RhbCA+IDAgJiYgdGhpcy5zZWxlY3RlZEJ5VHlwZVt0eXBlXS5sZW5ndGggPT09IHRvdGFsO1xyXG5cclxuICBjb25zb2xlLmxvZyhcclxuICAgIGB0eXBlPSR7dHlwZX0sIHRvdGFsPSR7dG90YWx9LCBzZWxlY3RlZD0ke3RoaXMuc2VsZWN0ZWRCeVR5cGVbdHlwZV0ubGVuZ3RofSwgc2VsZWN0QWxsPSR7dGhpcy5zZWxlY3RBbGxCeVR5cGVbdHlwZV19YFxyXG4gICk7XHJcblxyXG4gIHRoaXMudXBkYXRlT3ZlcmFsbFNlbGVjdGVkSWRzKCk7XHJcbiAgdGhpcy5wb3B1cHZhbHVlID0gdHlwZTtcclxufVxyXG5cclxuXHJcblxyXG4gIHJlbWFya3M6IGFueTtcclxuICBAVmlld0NoaWxkKFwiem9vbVBvcHVwXCIpIHpvb21Qb3B1cDogRWxlbWVudFJlZjtcclxuICBwb3B1cFR5cGU6IGFueTtcclxuICBwb3B1cElkczogYW55W10gPSBbXTtcclxuICBwb3B1cE9wZW4oXHJcbiAgICB0eXBlOiBhbnksXHJcbiAgICB2YWx1ZT86IGFueSB8IFwiZW1wbG95ZWVcIiB8IFwianVua1wiIHwgXCJob3VzZUtlZXBpbmdcIiB8IFwiZHVwbGljYXRlXCJcclxuICApIHtcclxuICAgIC8vIHN0b3JlIHR5cGVcclxuICAgIHRoaXMucG9wdXBUeXBlID0gdHlwZTtcclxuICAgIHRoaXMucG9wdXBJZHMgPSB0aGlzLm92ZXJhbGxTZWxlY3RlZElkcyB8fCBbXTtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLnpvb21Qb3B1cCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgc2l6ZTogXCJtZFwiLFxyXG4gICAgICBiYWNrZHJvcDogXCJzdGF0aWNcIixcclxuICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBob3VzZUtlZXBpbmdBQ0NvdW50OiBhbnk7XHJcbiAgZW1wbG95ZWVBQ0NvdW50OiBhbnk7XHJcbiAgZHVwbGljYXRlQUNDb3VudDogYW55O1xyXG4gIGp1bmtBQ0NvdW50OiBhbnk7XHJcblxyXG4gIHNlbGVjdGVkRHVwbGljYXRlSW1hZ2VzTGlzdDogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZEhvdXNla2VlcGluZ0ltYWdlc0xpc3Q6IGFueVtdID0gW107XHJcbiAgc2VsZWN0ZWRFbXBsb3llZUltYWdlc0xpc3Q6IGFueVtdID0gW107XHJcbiAgc2VsZWN0ZWRKdW5rSW1hZ2VzTGlzdDogYW55W10gPSBbXTtcclxuICBzdWJtaXRWYWx1ZShzdGF0dXM6IHN0cmluZyA9IFwiYXBwcm92ZWRcIiwgY2F0ZWdvcnk6IHN0cmluZyA9IFwiZHVwbGljYXRlXCIpIHtcclxuICAgIC8vIFN0ZXAgMTogVmFsaWRhdGUgYmFzZWQgb24gY3VycmVudCBjYXRlZ29yeVxyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgaWQ6IHRoaXMucG9wdXBJZHMsXHJcbiAgICAgIHN0YXR1czogc3RhdHVzLFxyXG4gICAgICB0eXBlOiB0aGlzLmhhc0FwcHJvdmVyQWNjZXNzID8gXCJhcHByb3ZlXCIgOiBcInJldmlld1wiLFxyXG4gICAgfTtcclxuICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAuZ2V0VXBkYXRlVGVtcFN0YXR1c0FwaShvYmopXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcz8uY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHMuZ2V0U3VjY2Vzc1RvYXN0KFwiU3RhdHVzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xyXG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9ucygpO1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICB0aGlzLmFsbFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVN0b3JlVmlldyh0aGlzLnRpY2tldERhdGEpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZW1hcmtzID0gXCJcIjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudHMuZ2V0RXJyb3JUb2FzdChcIkVycm9yIHVwZGF0aW5nIHN0YXR1c1wiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVycm9yTXNnID1cclxuICAgICAgICAgICAgZXJyPy5lcnJvcj8ubWVzc2FnZSB8fFxyXG4gICAgICAgICAgICBlcnI/LmVycm9yPy5lcnJvciB8fFxyXG4gICAgICAgICAgICBlcnI/LmVycm9yIHx8XHJcbiAgICAgICAgICAgIGVycj8ubWVzc2FnZSB8fFxyXG4gICAgICAgICAgICBcIkVycm9yIHVwZGF0aW5nIHN0YXR1c1wiO1xyXG4gICAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KGVycm9yTXNnKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgcmVzZXRTZWxlY3Rpb25zKCkge1xyXG4gICAgLy8gY29tcGxldGVseSByZXBsYWNlIHRoZSBvYmplY3Qgc28gY2hhbmdlIGRldGVjdGlvbiBzZWVzIGl0XHJcbiAgICB0aGlzLnNlbGVjdGVkQnlUeXBlID0ge1xyXG4gICAgICBqdW5rOiBbXSxcclxuICAgICAgZW1wbG95ZWU6IFtdLFxyXG4gICAgICBob3VzZUtlZXBpbmc6IFtdLFxyXG4gICAgICBkdXBsaWNhdGU6IFtdLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdEFsbEJ5VHlwZSA9IHtcclxuICAgICAganVuazogZmFsc2UsXHJcbiAgICAgIGVtcGxveWVlOiBmYWxzZSxcclxuICAgICAgaG91c2VLZWVwaW5nOiBmYWxzZSxcclxuICAgICAgZHVwbGljYXRlOiBmYWxzZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZER1cGxpY2F0ZXNCeVBhcmVudCA9IHt9O1xyXG5cclxuICAgIHRoaXMub3ZlcmFsbFNlbGVjdGVkSWRzID0gW107XHJcbiAgICB0aGlzLnBvcHVwSWRzID0gW107XHJcblxyXG4gICAgY29uc29sZS5sb2coXHJcbiAgICAgIFwiUkVTRVQgc2VsZWN0aW9uczpcIixcclxuICAgICAgdGhpcy5zZWxlY3RlZEJ5VHlwZSxcclxuICAgICAgdGhpcy5zZWxlY3RlZER1cGxpY2F0ZXNCeVBhcmVudFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgIC8vIHRoaXMuZm9vdGZhbGxUaWNrZXRzRGF0YSA9IFtdO1xyXG4gIH1cclxuICBhcnJvd3Nob3cgPSB0cnVlO1xyXG4gIG9wZW5BcnJvdygpIHtcclxuICAgIHRoaXMuYXJyb3dzaG93ID0gZmFsc2U7XHJcbiAgfVxyXG4gIGNsb3NlQXJyb3coKSB7XHJcbiAgICB0aGlzLmFycm93c2hvdyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBnZXRPcGVuVGlja2V0TGlzdChkYXRhPzogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImdldE9wZW5UaWNrZXRMaXN0IGRhdGE6XCIsIGRhdGEpO1xyXG5cclxuICAgIC8vIHN1cHBvcnQgcGFzc2luZyBlaXRoZXIgd2hvbGUgc3RvcmUgb2JqZWN0IG9yIGp1c3QgdGlja2V0SWRcclxuICAgIGNvbnN0IHNlbGVjdGVkVGlja2V0SWQgPSBkYXRhPy50aWNrZXRJZCA/PyBkYXRhO1xyXG5cclxuICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgY2xpZW50SWQ6IFt0aGlzLmhlYWRlckZpbHRlcnM/LmNsaWVudF0sXHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmhlYWRlckZpbHRlcnM/LmRhdGU/LnN0YXJ0RGF0ZSxcclxuICAgICAgdG9EYXRlOiB0aGlzLmhlYWRlckZpbHRlcnM/LmRhdGU/LmVuZERhdGUsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAuZ2V0T3BlblRpY2tldExpc3RBcGkob2JqKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXM/LmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5UaWNrZXRzTGlzdCA9IHJlcz8uZGF0YSA/PyBbXTtcclxuXHJcbiAgICAgICAgICAgIC8vIHJlc2V0IHNlbGVjdGlvblxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuYWxsU2VsZWN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5vcGVuVGlja2V0c0xpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgc3RvcmVUb1NlbGVjdDogYW55IHwgdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAgICAgLy8g8J+RiSAxKSBpZiBkYXRhIHBhc3NlZCwgdHJ5IHRvIG1hdGNoIGluIE5FVyBsaXN0IGJ5IHRpY2tldElkXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFRpY2tldElkKSB7XHJcbiAgICAgICAgICAgICAgc3RvcmVUb1NlbGVjdCA9IHRoaXMub3BlblRpY2tldHNMaXN0LmZpbmQoXHJcbiAgICAgICAgICAgICAgICAoczogYW55KSA9PiBzLnRpY2tldElkID09PSBzZWxlY3RlZFRpY2tldElkXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8g8J+RiSAyKSBpZiBubyBtYXRjaCBvciBubyBkYXRhIOKGkiBmYWxsYmFjayB0byAwIGluZGV4XHJcbiAgICAgICAgICAgIGlmICghc3RvcmVUb1NlbGVjdCkge1xyXG4gICAgICAgICAgICAgIHN0b3JlVG9TZWxlY3QgPSB0aGlzLm9wZW5UaWNrZXRzTGlzdFswXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8g8J+RiSAzKSBzZXQgc2VsZWN0aW9uICsgY2FsbCBoYW5kbGVyXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZXMgPSBbc3RvcmVUb1NlbGVjdF07XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU3RvcmVTZWxlY3RlZChzdG9yZVRvU2VsZWN0KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlblRpY2tldHNMaXN0ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZXMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5hbGxTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMub3BlblRpY2tldHNMaXN0ID0gW107XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gW107XHJcbiAgICAgICAgICB0aGlzLmFsbFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5pc0xvY2tlZEJ5UmV2aWV3ZXIob3JpZ2luYWw6IGFueSk6IGJvb2xlYW4ge1xyXG4gIC8vIFdoZW4gYXBwcm92ZXIgaGFzIGFjY2VzcywgaWdub3JlIHJldmlld2VyIGxvY2tcclxuICBpZiAodGhpcy5oYXNBcHByb3ZlckFjY2VzcyApIHtcclxuICAgIHRoaXMuZ2V0Q3VycmVudFJvbGVNYXBwaW5nKCk7XHJcbiAgICAvLyB0aGlzLmlzQXBwcm92ZWQxKG9yaWdpbmFsKSB8fCB0aGlzLmlzUmVqZWN0ZWQxKG9yaWdpbmFsKTtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9ZWxzZXtcclxuXHJcbiAgICB0aGlzLmdldEN1cnJlbnRSZXZpZXdNYXBwaW5nKCk7XHJcbiAgfSAgXHJcbiAgLy8gT3RoZXJ3aXNlLCBsb2NrIGlmIGFwcHJvdmVkIG9yIHJlamVjdGVkIGJ5IHJldmlld1xyXG4gIHJldHVybiB0aGlzLmlzQXBwcm92ZWQob3JpZ2luYWwpIHx8IHRoaXMuaXNSZWplY3RlZChvcmlnaW5hbCk7XHJcbn1cclxuICBpc0FwcHJvdmVkMShvcmlnaW5hbDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBhY3Rpb25zID0gb3JpZ2luYWw/LmFjdGlvbnMgfHwgW107XHJcbiAgICByZXR1cm4gYWN0aW9ucy5zb21lKFxyXG4gICAgICAoYTogYW55KSA9PiBhLmFjdGlvblR5cGUgPT09IFwiYXBwcm92ZVwiICYmIGEuYWN0aW9uID09PSBcImFwcHJvdmVkXCJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpc1JlamVjdGVkMShvcmlnaW5hbDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBhY3Rpb25zID0gb3JpZ2luYWw/LmFjdGlvbnMgfHwgW107XHJcbiAgICByZXR1cm4gYWN0aW9ucy5zb21lKFxyXG4gICAgICAoYTogYW55KSA9PiBhLmFjdGlvblR5cGUgPT09IFwiYXBwcm92ZVwiICYmIGEuYWN0aW9uID09PSBcInJlamVjdGVkXCJcclxuICAgICk7XHJcbiAgfVxyXG4gIGlzQXBwcm92ZWQob3JpZ2luYWw6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgYWN0aW9ucyA9IG9yaWdpbmFsPy5hY3Rpb25zIHx8IFtdO1xyXG4gICAgcmV0dXJuIGFjdGlvbnMuc29tZShcclxuICAgICAgKGE6IGFueSkgPT4gYS5hY3Rpb25UeXBlID09PSBcInJldmlld1wiICYmIGEuYWN0aW9uID09PSBcImFwcHJvdmVkXCJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpc1JlamVjdGVkKG9yaWdpbmFsOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGFjdGlvbnMgPSBvcmlnaW5hbD8uYWN0aW9ucyB8fCBbXTtcclxuICAgIHJldHVybiBhY3Rpb25zLnNvbWUoXHJcbiAgICAgIChhOiBhbnkpID0+IGEuYWN0aW9uVHlwZSA9PT0gXCJyZXZpZXdcIiAmJiBhLmFjdGlvbiA9PT0gXCJyZWplY3RlZFwiXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgXHJcbiAgcmVzZXRDaGVja2JveCh0eXBlOiBcImR1cGxpY2F0ZVwiIHwgXCJlbXBsb3llZVwiIHwgXCJqdW5rXCIgfCBcImhvdXNlS2VlcGluZ1wiLCBvcmlnaW5hbDogYW55KSB7XHJcbiAgICBpZiAoIW9yaWdpbmFsPy5hY3Rpb25zKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyAxKSByZW1vdmUgT05MWSB0aGUgcmV2aWV3IGFjdGlvbiAoYXBwcm92ZWQvcmVqZWN0ZWQpXHJcbiAgICBvcmlnaW5hbC5hY3Rpb25zID0gb3JpZ2luYWwuYWN0aW9ucy5maWx0ZXIoXHJcbiAgICAgIChhOiBhbnkpID0+IGEuYWN0aW9uVHlwZSAhPT0gXCJyZXZpZXdcIlxyXG4gICAgKTtcclxuICAgIC8vIGFmdGVyIHRoaXMsIGV4YW1wbGUgYmVjb21lczpcclxuICAgIC8vIFsgeyBhY3Rpb25UeXBlOiAndGFnZ2luZycsIGFjdGlvbjogJ3N1Ym1pdHRlZCcgfSBdXHJcblxyXG4gICAgLy8gMikgcmVtb3ZlIGZyb20gc2VsZWN0ZWQgbGlzdCBpZiBwcmVzZW50XHJcbiAgICBjb25zdCB0ZW1wSWQgPSBvcmlnaW5hbC50ZW1wSWQ7XHJcbiAgICBjb25zdCBhcnIgPSB0aGlzLnNlbGVjdGVkQnlUeXBlW3R5cGVdIHx8IFtdO1xyXG4gICAgY29uc3QgaW5kZXggPSBhcnIuaW5kZXhPZih0ZW1wSWQpO1xyXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgYXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gMykgdW5jaGVjayBcInNlbGVjdCBhbGxcIiBmb3IgdGhhdCB0eXBlXHJcbiAgICB0aGlzLnNlbGVjdEFsbEJ5VHlwZVt0eXBlXSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdmlld01vZGU6IFwidGFuZ29yZXZpZXdcIiB8IFwiYXBwcm92ZVwiIHwgXCJyZXZpZXdcIiB8IFwidGFnZ2luZ1wiID0gXCJ0YWdnaW5nXCI7XHJcbiAgZ2V0QWN0aW9uKG9yaWdpbmFsOiBhbnksIHR5cGU6IFwidGFnZ2luZ1wiIHwgXCJyZXZpZXdcIiB8IFwidGFuZ29yZXZpZXdcIiB8IFwiYXBwcm92ZVwiKSB7XHJcbiAgICByZXR1cm4gb3JpZ2luYWw/LmFjdGlvbnM/LmZpbmQoKGE6IGFueSkgPT4gYS5hY3Rpb25UeXBlID09PSB0eXBlKSB8fCBudWxsO1xyXG4gIH1cclxudXBkYXRlQ2xvc2VCdXR0b25Gcm9tU3RvcmUoKSB7XHJcbiAgY29uc3QgbWFwcGluZyA9IHRoaXMuZ2V0Q3VycmVudFJldmlld01hcHBpbmcoKTtcclxuICBjb25zb2xlLmxvZygnbWFwcGluZyB1c2VkIGZvciBjbG9zZSBjYWxjOicsIG1hcHBpbmcpO1xyXG5cclxuICAvLyBpZiBubyBtYXBwaW5nIGZvdW5kLCBrZWVwIGNsb3NlQnRuIGZhbHNlXHJcbiAgdGhpcy5jbG9zZUJ0biA9ICEhbWFwcGluZyAmJiB0aGlzLmlzVGlja2V0RnVsbHlSZXZpZXdlZChtYXBwaW5nKTtcclxuXHJcbiAgY29uc29sZS5sb2coJ2Nsb3NlQnRuID0+JywgdGhpcy5jbG9zZUJ0bik7XHJcbn1cclxuXHJcbmdldEN1cnJlbnRSZXZpZXdNYXBwaW5nKCk6IGFueSB7XHJcbiAgaWYgKCF0aGlzLmZvb3RmYWxsVGlja2V0c0RhdGEgfHwgIXRoaXMuZm9vdGZhbGxUaWNrZXRzRGF0YS5sZW5ndGgpIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8gR28gdGhyb3VnaCBhbGwgdGlja2V0cyBhbmQgbWFwcGluZ0luZm9cclxuICBmb3IgKGNvbnN0IHRpY2tldCBvZiB0aGlzLmZvb3RmYWxsVGlja2V0c0RhdGEpIHtcclxuICAgIGNvbnN0IHNvdXJjZSA9IHRpY2tldD8uX3NvdXJjZTtcclxuICAgIGNvbnN0IG1hcHBpbmdMaXN0ID0gc291cmNlPy5tYXBwaW5nSW5mbyB8fCBbXTtcclxuXHJcbiAgICAvLyBwaWNrIHRoZSBmaXJzdCBtYXBwaW5nIHdpdGggdHlwZSAncmV2aWV3JyB0aGF0IGhhcyByZXZpc2VkRGV0YWlsXHJcbiAgICBjb25zdCBmb3VuZCA9IG1hcHBpbmdMaXN0LmZpbmQoXHJcbiAgICAgIChtOiBhbnkpID0+IG0/LnR5cGUgPT09ICdyZXZpZXcnICYmIG0/LnJldmlzZWREZXRhaWw/Lmxlbmd0aFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoZm91bmQpIHtcclxuICAgICAgcmV0dXJuIGZvdW5kO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcblxyXG5cclxuLy8gRGVjaWRlIGlmIHRpY2tldCBpcyBmdWxseSByZXZpZXdlZCBiYXNlZCBvbiBBTEwgbWFwcGluZ0luZm9bdHlwZT0ncmV2aWV3J11cclxuaXNUaWNrZXRGdWxseVJldmlld2VkKG1hcHBpbmc6IGFueSk6IGJvb2xlYW4ge1xyXG4gIGlmICghbWFwcGluZz8ucmV2aXNlZERldGFpbCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICBjb25zdCBkZXRhaWxzID0gbWFwcGluZy5yZXZpc2VkRGV0YWlsIGFzIGFueVtdO1xyXG5cclxuICBjb25zdCBub25EdXBUeXBlcyA9IFtcImVtcGxveWVlXCIsIFwianVua1wiLCBcImhvdXNlS2VlcGluZ1wiXTtcclxuXHJcbiAgY29uc3Qgbm9uRHVwSXRlbXMgPSBkZXRhaWxzLmZpbHRlcihkID0+XHJcbiAgICBub25EdXBUeXBlcy5pbmNsdWRlcyhkLnJldm9wc1R5cGUpXHJcbiAgKTtcclxuXHJcbiAgY29uc3Qgbm9uRHVwUmV2aWV3ZWRDb3VudCA9IG5vbkR1cEl0ZW1zLmZpbHRlcihkID0+IHtcclxuICAgIGNvbnN0IHJldmlldyA9IHRoaXMuZ2V0QWN0aW9uKGQsIFwicmV2aWV3XCIpO1xyXG4gICAgcmV0dXJuIHJldmlldyAmJiAocmV2aWV3LmFjdGlvbiA9PT0gXCJhcHByb3ZlZFwiIHx8IHJldmlldy5hY3Rpb24gPT09IFwicmVqZWN0ZWRcIik7XHJcbiAgfSkubGVuZ3RoO1xyXG5cclxuICBjb25zdCBwYXJlbnRJdGVtcyA9IGRldGFpbHMuZmlsdGVyKGQgPT4gZC5pc1BhcmVudCk7XHJcblxyXG4gIGNvbnN0IGR1cENoaWxkcmVuID0gcGFyZW50SXRlbXMucmVkdWNlKChhY2M6IGFueVtdLCBwOiBhbnkpID0+IHtcclxuICAgIHJldHVybiBhY2MuY29uY2F0KHAuZHVwbGljYXRlSW1hZ2UgfHwgW10pO1xyXG4gIH0sIFtdKTtcclxuXHJcbiAgY29uc3QgZHVwUmV2aWV3ZWRDb3VudCA9IGR1cENoaWxkcmVuLmZpbHRlcihkID0+IHtcclxuICAgIGNvbnN0IHJldmlldyA9IHRoaXMuZ2V0QWN0aW9uKGQsIFwicmV2aWV3XCIpO1xyXG4gICAgcmV0dXJuIHJldmlldyAmJiAocmV2aWV3LmFjdGlvbiA9PT0gXCJhcHByb3ZlZFwiIHx8IHJldmlldy5hY3Rpb24gPT09IFwicmVqZWN0ZWRcIik7XHJcbiAgfSkubGVuZ3RoO1xyXG5cclxuICBjb25zdCB0b3RhbFRvUmV2aWV3ID0gbm9uRHVwSXRlbXMubGVuZ3RoICsgZHVwQ2hpbGRyZW4ubGVuZ3RoO1xyXG4gIGNvbnN0IHRvdGFsUmV2aWV3ZWQgPSBub25EdXBSZXZpZXdlZENvdW50ICsgZHVwUmV2aWV3ZWRDb3VudDtcclxuXHJcbiAgcmV0dXJuIHRvdGFsVG9SZXZpZXcgPiAwICYmIHRvdGFsUmV2aWV3ZWQgPT09IHRvdGFsVG9SZXZpZXc7XHJcbn1cclxuXHJcblxyXG4gIGdldEluaXRpYWxzRnJvbUVtYWlsKGVtYWlsPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghZW1haWwpIHJldHVybiBcIlwiO1xyXG5cclxuICAgIC8vIHRha2UgdGV4dCBiZWZvcmUgQFxyXG4gICAgY29uc3QgbmFtZVBhcnQgPSBlbWFpbC5zcGxpdChcIkBcIilbMF07XHJcblxyXG4gICAgLy8gc3BsaXQgYnkgLiBvciBzcGFjZSAoZS5nLiBcInNhbmRlZXAucGFsXCIgLT4gW1wic2FuZGVlcFwiLCBcInBhbFwiXSlcclxuICAgIGNvbnN0IHBhcnRzID0gbmFtZVBhcnQuc3BsaXQoL1suXFxzXy1dKy8pLmZpbHRlcihCb29sZWFuKTtcclxuXHJcbiAgICBpZiAocGFydHMubGVuZ3RoID49IDIpIHtcclxuICAgICAgcmV0dXJuIChwYXJ0c1swXVswXSArIHBhcnRzWzFdWzBdKS50b1VwcGVyQ2FzZSgpOyAvLyBTICsgUCA9IFNQXHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmFsbGJhY2s6IGZpcnN0IHR3byBjaGFycyBvZiB3aG9sZSBuYW1lUGFydFxyXG4gICAgcmV0dXJuIG5hbWVQYXJ0LnN1YnN0cmluZygwLCAyKS50b1VwcGVyQ2FzZSgpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybUNsb3NlVGlja2V0KCkge1xyXG4gICAgbGV0IG9iaiA9IHtcclxuICAgICAgdGlja2V0TmFtZTogXCJmb290ZmFsbC1kaXJlY3RvcnlcIixcclxuICAgICAgc3RvcmVJZDogdGhpcy5mb290ZmFsbFRpY2tldHNEYXRhWzBdPy5fc291cmNlPy5zdG9yZUlkLFxyXG4gICAgICBkYXRlU3RyaW5nOiB0aGlzLmZvb3RmYWxsVGlja2V0c0RhdGFbMF0/Ll9zb3VyY2U/LmRhdGVTdHJpbmcsXHJcbiAgICAgIHR5cGU6IHRoaXMuaGFzQXBwcm92ZXJBY2Nlc3MgPyBcImFwcHJvdmVcIiA6IFwicmV2aWV3XCIsXHJcbiAgICAgIG1vZGU6IFwid2ViXCIsXHJcbiAgICB9O1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJjbG9zZSB0aWNrZXQgb2JqOlwiLCBvYmopO1xyXG4gICAgLy8gcmV0dXJuXHJcbiAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgLmdldENyZWF0ZVRpY2tldExpc3RBcGkob2JqKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXM/LmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRzLmdldFN1Y2Nlc3NUb2FzdChcIlRpY2tldCBjbG9zZWQgc3VjY2Vzc2Z1bGx5XCIpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1DbG9zZUNhbmNlbCgpO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFTdG9yZVZpZXcodGhpcy50aWNrZXREYXRhKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudHMuZ2V0RXJyb3JUb2FzdChcIkVycm9yIGNsb3NpbmcgdGlja2V0XCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBlcnJvck1zZyA9XHJcbiAgICAgICAgICAgIGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgZXJyPy5lcnJvcj8uZXJyb3IgfHxcclxuICAgICAgICAgICAgZXJyPy5lcnJvciB8fFxyXG4gICAgICAgICAgICBlcnI/Lm1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgXCJFcnJvciBjbG9zaW5nIHRpY2tldFwiO1xyXG4gICAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KGVycm9yTXNnKTtcclxuICAgICAgICAgIHRoaXMuaXNDaGVja2JveEVuYWJsZSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNsb3NlQnRuID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY2xvc2VEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7ICAgICAgICBcclxuICB9XHJcblxyXG4gIGNvbmZpcm1DbG9zZUNhbmNlbCgpIHtcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICB9XHJcbiAgICBAVmlld0NoaWxkKFwiaW1hZ2VQcmV2aWV3UG9wdXBcIikgaW1hZ2VQcmV2aWV3UG9wdXA6IEVsZW1lbnRSZWY7XHJcbnByZXZpZXdMaXN0OiBhbnlbXSA9IFtdO1xyXG5jdXJyZW50UHJldmlld0luZGV4ID0gMDtcclxucHJldmlld1RpdGxlID0gJ1RhZ2dlZCBEdXBsaWNhdGVzJztcclxuXHJcbmdldCBjdXJyZW50UHJldmlld0l0ZW0oKSB7XHJcbiAgcmV0dXJuIHRoaXMucHJldmlld0xpc3RbdGhpcy5jdXJyZW50UHJldmlld0luZGV4XSB8fCBudWxsO1xyXG59XHJcblxyXG5nZXRQcmV2aWV3SW1hZ2VVcmwoKSB7XHJcbiAgY29uc3QgaXRlbSA9IHRoaXMuY3VycmVudFByZXZpZXdJdGVtO1xyXG4gIHJldHVybiBpdGVtID8gdGhpcy5pbWFnZVVybCArIGl0ZW0uZmlsZVBhdGggOiAnJztcclxufVxyXG5cclxub3BlbkltYWdlUHJldmlldyhsaXN0OiBhbnlbXSwgc3RhcnRJbmRleDogbnVtYmVyLCB0aXRsZTogc3RyaW5nKSB7XHJcbiAgdGhpcy5wcmV2aWV3TGlzdCA9IGxpc3Q7XHJcbiAgY29uc29sZS5sb2coJ1ByZXZpZXcgbGlzdCBzZXQ6JywgdGhpcy5wcmV2aWV3TGlzdCk7XHJcbiAgdGhpcy5jdXJyZW50UHJldmlld0luZGV4ID0gc3RhcnRJbmRleDtcclxuICB0aGlzLnByZXZpZXdUaXRsZSA9IHRpdGxlO1xyXG5cclxuICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMuaW1hZ2VQcmV2aWV3UG9wdXAsIHtcclxuICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgc2l6ZTogJ2xnJyxcclxuICAgIGJhY2tkcm9wOiAnc3RhdGljJ1xyXG4gIH0pO1xyXG59XHJcblxyXG5wcmV2UHJldmlldygpIHtcclxuICBpZiAodGhpcy5wcmV2aWV3TGlzdC5sZW5ndGggPD0gMSkgcmV0dXJuO1xyXG4gIHRoaXMuY3VycmVudFByZXZpZXdJbmRleCA9XHJcbiAgICB0aGlzLmN1cnJlbnRQcmV2aWV3SW5kZXggPT09IDBcclxuICAgICAgPyB0aGlzLnByZXZpZXdMaXN0Lmxlbmd0aCAtIDFcclxuICAgICAgOiB0aGlzLmN1cnJlbnRQcmV2aWV3SW5kZXggLSAxO1xyXG59XHJcblxyXG5uZXh0UHJldmlldygpIHtcclxuICBpZiAodGhpcy5wcmV2aWV3TGlzdC5sZW5ndGggPD0gMSkgcmV0dXJuO1xyXG4gIHRoaXMuY3VycmVudFByZXZpZXdJbmRleCA9XHJcbiAgICB0aGlzLmN1cnJlbnRQcmV2aWV3SW5kZXggPT09IHRoaXMucHJldmlld0xpc3QubGVuZ3RoIC0gMVxyXG4gICAgICA/IDBcclxuICAgICAgOiB0aGlzLmN1cnJlbnRQcmV2aWV3SW5kZXggKyAxO1xyXG59XHJcbiAgcmVqZWN0UG9wdXAoKSB7XHJcbiAgfVxyXG4gIGFjY2VwdFBvcHVwKCkge1xyXG4gIH1cclxuXHJcblxyXG5cclxuZ2V0IGhhc0FwcHJvdmVyQWNjZXNzKCk6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IHBlcm0gPSB0aGlzLnVzZXJzRGV0YWlscz8ucGVybWlzc2lvbjtcclxuICByZXR1cm4gISEoXHJcbiAgICBwZXJtPy5Gb290ZmFsbERpcmVjdG9yeV9hcHByb3Zlcl9pc0FkZCB8fFxyXG4gICAgcGVybT8uRm9vdGZhbGxEaXJlY3RvcnlfYXBwcm92ZXJfaXNFZGl0XHJcbiAgKTtcclxufVxyXG5cclxuZ2V0IGhhc1Jldmlld2VyQWNjZXNzKCk6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IHBlcm0gPSB0aGlzLnVzZXJzRGV0YWlscz8ucGVybWlzc2lvbjtcclxuICByZXR1cm4gISEoXHJcbiAgICBwZXJtPy5Gb290ZmFsbERpcmVjdG9yeV9yZXZpZXdlcl9pc0FkZCB8fFxyXG4gICAgcGVybT8uRm9vdGZhbGxEaXJlY3RvcnlfcmV2aWV3ZXJfaXNFZGl0XHJcbiAgKTtcclxufVxyXG5cclxuLy8gY2FsbCB0aGlzIGluIG5nT25Jbml0IG9yIGFmdGVyIHVzZXJzRGV0YWlscyBpcyBsb2FkZWRcclxuc2V0RGVmYXVsdFJvbGUoKSB7XHJcbiAgaWYgKHRoaXMuaGFzQXBwcm92ZXJBY2Nlc3MpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRSb2xlID0gJ2FwcHJvdmVyJztcclxuICB9IGVsc2UgaWYgKHRoaXMuaGFzUmV2aWV3ZXJBY2Nlc3MpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRSb2xlID0gJ3Jldmlld2VyJztcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvbGUgPSAnJztcclxuICB9XHJcbn1cclxuXHJcblNlbGVjdGVkUm9sZShyb2xlOiAnYXBwcm92ZXInIHwgJ3Jldmlld2VyJykge1xyXG4gIGlmIChyb2xlID09PSAnYXBwcm92ZXInICYmICF0aGlzLmhhc0FwcHJvdmVyQWNjZXNzKSByZXR1cm47XHJcbiAgaWYgKHJvbGUgPT09ICdyZXZpZXdlcicgJiYgIXRoaXMuaGFzUmV2aWV3ZXJBY2Nlc3MpIHJldHVybjtcclxuXHJcbiAgdGhpcy5zZWxlY3RlZFJvbGUgPSByb2xlO1xyXG5cclxuICAvLyDwn5S5IHB1dCB5b3VyIHJvbGUtYmFzZWQgbG9naWMgaGVyZTpcclxuICAvLyBlLmcuIGZpbHRlciBtYXBwaW5nSW5mbywgY2hhbmdlIEFQSSBjYWxsLCBldGMuXHJcbiAgLy8gdGhpcy5sb2FkUm9sZURhdGEocm9sZSk7XHJcbn1cclxufVxyXG4iLCI8c2VjdGlvbiAqbmdJZj1cInNlbGVjdCA9PT0ndGlja2V0TGlzdCdcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbXMtMyBteS0zXCI+XHJcbiAgICAgICAgPCEtLSA8dWwgY2xhc3M9XCJuYXYgbmF2LXN0cmV0Y2ggbmF2LWxpbmUtdGFiczEgbmF2LWxpbmUtdGFicyBib3JkZXItdHJhbnNwYXJlbnQgZmxleC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbm8tYm9yZGVyIG1lLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICBUaWNrZXRzXHJcbiAgICAgICAgICAgICAgICA8L2E+IFxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBjdXJzb3ItcG9pbnRlciBuby1ib3JkZXIgbWUtM1wiPiBJbnRlcm5hbCBhdWRpdFxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+IC0tPlxyXG4gICAgICAgIDx1bCAqbmdJZj1cImhhc0FwcHJvdmVyQWNjZXNzICYmIGhhc1Jldmlld2VyQWNjZXNzXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJuYXYgbmF2LXN0cmV0Y2ggbmF2LWxpbmUtdGFiczEgbmF2LWxpbmUtdGFicyBib3JkZXItdHJhbnNwYXJlbnQgZmxleC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgPCEtLSBBcHByb3ZlciB0YWIgLS0+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nSWY9XCJoYXNBcHByb3ZlckFjY2Vzc1wiPlxyXG4gICAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwic2VsZWN0ZWRSb2xlID09PSAnYXBwcm92ZXInID8gJ2FjdGl2ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGluayBjdXJzb3ItcG9pbnRlciBuby1ib3JkZXIgbWUtM1wiIChjbGljayk9XCJTZWxlY3RlZFJvbGUoJ2FwcHJvdmVyJylcIj5cclxuICAgICAgICAgICAgICAgICAgICBBcHByb3ZlclxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBSZXZpZXdlciB0YWIgLS0+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nSWY9XCJoYXNSZXZpZXdlckFjY2Vzc1wiPlxyXG4gICAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwic2VsZWN0ZWRSb2xlID09PSAncmV2aWV3ZXInID8gJ2FjdGl2ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGluayBjdXJzb3ItcG9pbnRlciBuby1ib3JkZXIgbWUtM1wiIChjbGljayk9XCJTZWxlY3RlZFJvbGUoJ3Jldmlld2VyJylcIj5cclxuICAgICAgICAgICAgICAgICAgICBSZXZpZXdlclxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05IG1iLTNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBlbGxpcHNlMSBweC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiY2FyZC10aXRsZSBteS0wXCI+e3sgZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8udG90YWxUaWNrZXRzICE9PSBudWxsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZvb3RmYWxsU3VtbWFyeURhdGE/LnRvdGFsVGlja2V0cyA6ICctLScgfX08L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1Yi1oZWFkZXJcIj5Ub3RhbCB0aWNrZXRzPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGb290ZmFsbFN1bW1hcnlEYXRhPy5hdmVyYWdlQWNjdXJhY3lPdmVyQWxsICAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8uYXZlcmFnZUFjY3VyYWN5T3ZlckFsbCAhPT0gdW5kZWZpbmVkXCIgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cImNhcmQtdGl0bGUgbXktMFwiPnt7IGdldEZvb3RmYWxsU3VtbWFyeURhdGE/LmF2ZXJhZ2VBY2N1cmFjeU92ZXJBbGwgIT09IG51bGwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZvb3RmYWxsU3VtbWFyeURhdGE/LmF2ZXJhZ2VBY2N1cmFjeU92ZXJBbGwgKyAnJScgOiAnLS0nIH19PC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ViLWhlYWRlclwiPkF2ZXJhZ2UgYWNjdXJhY3kgKE92ZXJhbGwpPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0yIHB4LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGb290ZmFsbFN1bW1hcnlEYXRhPy5vcGVuVGlja2V0cyAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8ub3BlblRpY2tldHMgIT09IHVuZGVmaW5lZFwiIGNsYXNzPVwiY29sIG15LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cImNhcmQtdGl0bGVcIj57eyBnZXRGb290ZmFsbFN1bW1hcnlEYXRhPy5vcGVuVGlja2V0cyAhPT0gbnVsbCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8ub3BlblRpY2tldHMgOiAnLS0nIH19PC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC10aXRsZS1zdWItaGVhZGVyXCI+T3Blbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGb290ZmFsbFN1bW1hcnlEYXRhPy5vcGVuSW5mcmFJc3N1ZXMgIT09IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGdldEZvb3RmYWxsU3VtbWFyeURhdGE/Lm9wZW5JbmZyYUlzc3VlcyAhPT0gdW5kZWZpbmVkXCIgY2xhc3M9XCJjb2wgbXktM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiY2FyZC10aXRsZVwiPnt7IGdldEZvb3RmYWxsU3VtbWFyeURhdGE/Lm9wZW5JbmZyYUlzc3VlcyAhPT0gbnVsbCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8ub3BlbkluZnJhSXNzdWVzIDogJy0tJyB9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtdGl0bGUtc3ViLWhlYWRlclwiPk9wZW4tSW5mcmEgSXNzdWU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8uaW5wcm9ncmVzcyAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8uaW5wcm9ncmVzcyAhPT0gdW5kZWZpbmVkXCIgY2xhc3M9XCJjb2wgbXktM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiY2FyZC10aXRsZVwiPnt7IGdldEZvb3RmYWxsU3VtbWFyeURhdGE/LmlucHJvZ3Jlc3MgIT09IG51bGwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZvb3RmYWxsU3VtbWFyeURhdGE/LmlucHJvZ3Jlc3MgOiAnLS0nIH19PC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC10aXRsZS1zdWItaGVhZGVyXCI+SW4tcHJvZ3Jlc3M8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8uY2xvc2VkVGlja2V0cyAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8uY2xvc2VkVGlja2V0cyAhPT0gdW5kZWZpbmVkXCIgY2xhc3M9XCJjb2wgbXktM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiY2FyZC10aXRsZVwiPnt7IGdldEZvb3RmYWxsU3VtbWFyeURhdGE/LmNsb3NlZFRpY2tldHMgIT09IG51bGwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZvb3RmYWxsU3VtbWFyeURhdGE/LmNsb3NlZFRpY2tldHMgOiAnLS0nIH19PC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC10aXRsZS1zdWItaGVhZGVyXCI+Q2xvc2VkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGb290ZmFsbFN1bW1hcnlEYXRhPy5kdWVUb2RheSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8uZHVlVG9kYXkgIT09IHVuZGVmaW5lZFwiIGNsYXNzPVwiY29sIG15LTMgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgc3R5bGU9XCJjb2xvcjojREM2ODAzICFpbXBvcnRhbnRcIiBjbGFzcz1cImNhcmQtdGl0bGVcIj57eyBnZXRGb290ZmFsbFN1bW1hcnlEYXRhPy5kdWVUb2RheVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9PSBudWxsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGb290ZmFsbFN1bW1hcnlEYXRhPy5kdWVUb2RheSA6ICctLScgfX08L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLXRpdGxlLXN1Yi1oZWFkZXJcIiBzdHlsZT1cImNvbG9yOiNEQzY4MDMgIWltcG9ydGFudFwiPkR1ZSB0b2RheTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8uRXhwaXJlZCAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8uRXhwaXJlZCAhPT0gdW5kZWZpbmVkXCIgY2xhc3M9XCJjb2wgbXktMyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cImNhcmQtdGl0bGVcIj57eyBnZXRGb290ZmFsbFN1bW1hcnlEYXRhPy5FeHBpcmVkICE9PSBudWxsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGb290ZmFsbFN1bW1hcnlEYXRhPy5FeHBpcmVkIDogJy0tJyB9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtdGl0bGUtc3ViLWhlYWRlclwiPkV4cGlyZWQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZvb3RmYWxsU3VtbWFyeURhdGE/LnVuZGVyVGFuZ29SZXZpZXcgIT09IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGdldEZvb3RmYWxsU3VtbWFyeURhdGE/LnVuZGVyVGFuZ29SZXZpZXcgIT09IHVuZGVmaW5lZFwiIGNsYXNzPVwiY29sIG15LTMgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJjYXJkLXRpdGxlXCI+e3sgZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8udW5kZXJUYW5nb1JldmlldyAhPT0gbnVsbCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8udW5kZXJUYW5nb1JldmlldyA6ICctLScgfX08L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLXRpdGxlLXN1Yi1oZWFkZXJcIj5VbmRlciB0YW5nbyByZXZpZXc8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIG1iLTNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBlbGxpcHNlMSBweS0xIHB4LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8udGlja2V0QWNjdXJhY3lBYm92ZSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8udGlja2V0QWNjdXJhY3lBYm92ZSAhPT0gdW5kZWZpbmVkXCIgY2xhc3M9XCJteS0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cImNhcmQtdGl0bGUgbXQtMFwiPnt7IGdldEZvb3RmYWxsU3VtbWFyeURhdGE/LnRpY2tldEFjY3VyYWN5QWJvdmUgIT09IG51bGwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8udGlja2V0QWNjdXJhY3lBYm92ZSA6ICctLScgfX08L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWhlYWRlclwiPlRpY2tldHMgd2l0aCBBY2N1cmFjeSBBYm92ZSA4NSU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8uYXZnVGlja2V0ICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICBnZXRGb290ZmFsbFN1bW1hcnlEYXRhPy5hdmdUaWNrZXQgIT09IHVuZGVmaW5lZFwiIGNsYXNzPVwibXktMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJjYXJkLXRpdGxlIG10LTBcIj57eyBnZXRGb290ZmFsbFN1bW1hcnlEYXRhPy5hdmdUaWNrZXQgIT09IG51bGwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8uYXZnVGlja2V0IDogJy0tJyB9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGVyXCI+QXZlcmFnZSB0aWNrZXQgJTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTIgcHgtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZvb3RmYWxsU3VtbWFyeURhdGE/LnRpY2tldEFjY3VyYWN5QmVsb3cgIT09IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGdldEZvb3RmYWxsU3VtbWFyeURhdGE/LnRpY2tldEFjY3VyYWN5QmVsb3cgIT09IHVuZGVmaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1sZy0xMiBjb2wteGwtMTIgY29sLW1kLTEyIG15LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cImNhcmQtdGl0bGVcIj57eyBnZXRGb290ZmFsbFN1bW1hcnlEYXRhPy50aWNrZXRBY2N1cmFjeUJlbG93ICE9PSBudWxsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGb290ZmFsbFN1bW1hcnlEYXRhPy50aWNrZXRBY2N1cmFjeUJlbG93IDogJy0tJyB9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtdGl0bGUtc3ViLWhlYWRlclwiPlRpY2tldHMgd2l0aCBBY2N1cmFjeSBCZWxvdyA4NSU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8uYXZnQWNjdXJhY3kgIT09IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGdldEZvb3RmYWxsU3VtbWFyeURhdGE/LmF2Z0FjY3VyYWN5ICE9PSB1bmRlZmluZWRcIiBjbGFzcz1cImNvbC1sZy0xMiBjb2wteGwtMTIgY29sLW1kLTEyIG15LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cImNhcmQtdGl0bGVcIj57eyBnZXRGb290ZmFsbFN1bW1hcnlEYXRhPy5hdmdBY2N1cmFjeSAhPT0gbnVsbCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9vdGZhbGxTdW1tYXJ5RGF0YT8uYXZnQWNjdXJhY3kgOiAnLS0nIH19PC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC10aXRsZS1zdWItaGVhZGVyXCI+QXZlcmFnZSBhY2N1cmFjeSU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtM1wiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtbGFiZWwgbWItMlwiPlNob3dpbmcgdGlja2V0cyB3aXRoIEFjY3VyYWN5IEJlbG93IDg1JSA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1zLTIgcHgtMyBiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XCI+e3t0b3RhbEl0ZW1zfX0gVG90YWw8L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YiBtYi0yXCI+QmFzZWQgb24ge3toZWFkZXJGaWx0ZXJzPy5kYXRlPy5zdGFydERhdGUgfCBkYXRlOidkZCBNTU0sIHl5eXknfX0g4oCTXHJcbiAgICAgICAgICAgICAgICAgICAge3toZWFkZXJGaWx0ZXJzPy5kYXRlPy5lbmREYXRlIHwgZGF0ZTonZGQgTU1NLCB5eXl5J319IDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIG15LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG1zLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgb3BhY2l0eT1cIjAuNVwiIHg9XCIxNy4wMzY1XCIgeT1cIjE1LjEyMjNcIiB3aWR0aD1cIjguMTU1NDZcIiBoZWlnaHQ9XCIyXCIgcng9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDE3LjAzNjUgMTUuMTIyMylcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEgMTlDNi41NTU1NiAxOSAzIDE1LjQ0NDQgMyAxMUMzIDYuNTU1NTYgNi41NTU1NiAzIDExIDNDMTUuNDQ0NCAzIDE5IDYuNTU1NTYgMTkgMTFDMTkgMTUuNDQ0NCAxNS40NDQ0IDE5IDExIDE5Wk0xMSA1QzcuNTMzMzMgNSA1IDcuNTMzMzMgNSAxMUM1IDE0LjQ2NjcgNy41MzMzMyAxNyAxMSAxN0MxNC40NjY3IDE3IDE3IDE0LjQ2NjcgMTcgMTFDMTcgNy41MzMzMyAxNC40NjY3IDUgMTEgNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcHMtMTQgbWUtMlwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGJ5IHN0b3JlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChjaGFuZ2UpPVwic2VhcmNoRGF0YSgpXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZXhwb3J0WExTWCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IG14LTIgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTMgdGV4dC1ub3dyYXAgYm9yZGVyLXZhbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE3LjUgMTIuNVYxNS44MzMzQzE3LjUgMTYuMjc1NCAxNy4zMjQ0IDE2LjY5OTMgMTcuMDExOCAxNy4wMTE4QzE2LjY5OTMgMTcuMzI0NCAxNi4yNzU0IDE3LjUgMTUuODMzMyAxNy41SDQuMTY2NjdDMy43MjQ2NCAxNy41IDMuMzAwNzIgMTcuMzI0NCAyLjk4ODE2IDE3LjAxMThDMi42NzU1OSAxNi42OTkzIDIuNSAxNi4yNzU0IDIuNSAxNS44MzMzVjEyLjVNMTQuMTY2NyA2LjY2NjY3TDEwIDIuNU0xMCAyLjVMNS44MzMzMyA2LjY2NjY3TTEwIDIuNVYxMi41XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTJcIj5FeHBvcnQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbCBvZiB0YWJsZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5jdXJzb3ItcG9pbnRlcl09XCJjb2wuc29ydGFibGUgJiYgY29sLnR5cGUgIT09ICdzdG9yZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2wuc29ydGFibGUgJiYgb25Tb3J0KGNvbC5rZXkpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbC5sYWJlbCB9fVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNvcnRpbmcgSWNvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiY29sLnNvcnRhYmxlICYmIGNvbC50eXBlICE9PSAnc3RvcmUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSBjb2wua2V5ICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOCAzLjMzM1YxMi42NjdMMTIuNjY3IDggOCAxMi42NjcgMy4zMzMgOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSBjb2wua2V5ID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgZm9vdGZhbGxMaXN0RGF0YVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sIG9mIHRhYmxlQ29sdW1uc1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFN0b3JlICsgdGlja2V0IGNsaWNrYWJsZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLnR5cGUgPT09ICdzdG9yZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcHJpbWFyeSBlbGxpcHNpcy11bmRlcmxpbmVcIiAoY2xpY2spPVwidGlja2V0Vmlldyhyb3cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByb3cudGlja2V0SWQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdC0yXCI+e3sgcm93LnN0b3JlTmFtZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERhdGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBjbGFzcz1cInB0LTVcIiAqbmdJZj1cImNvbC50eXBlID09PSAnZGF0ZScgfHwgY29sLnR5cGUgPT09ICd0aWNrZXRSYWlzZWQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJvd1tjb2wua2V5XSB8IGRhdGU6J2RkIE1NTSwgeXl5eScgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTdGF0dXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBjbGFzcz1cInB0LTVcIiAqbmdJZj1cImNvbC50eXBlID09PSAnc3RhdHVzJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIG14LTJcIiBbbmdDbGFzc109XCJnZXRTdGF0dXNCYWRnZUNsYXNzKHJvd1tjb2wua2V5XSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJvd1tjb2wua2V5XSB8IHRpdGxlY2FzZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGVmYXVsdCBUZXh0IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgY2xhc3M9XCJwdC01XCIgKm5nSWY9XCJjb2wudHlwZSA9PT0gJ3RleHQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJvd1tjb2wua2V5XSA/PyAnLS0nIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nICYmICFub0RhdGFcIiBjbGFzcz1cIm15LTNcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcGFnaW5hdGlvbiBbaXRlbXNQZXJQYWdlXT1cInBhZ2VTaXplXCIgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlXCIgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BhZ2luYXRpb25TaXplc109XCJwYWdpbmF0aW9uU2l6ZXNcIiBbcGFnZVNpemVdPVwic2V0cGFnZVNpemUoKVwiIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCI+PC9saWItcGFnaW5hdGlvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG48IS0tICAtLT5cclxuPHNlY3Rpb24gKm5nSWY9XCJzZWxlY3QgPT09J3RpY2tldE1ldGhvZCdcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbXktMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiIFtuZ0NsYXNzXT1cImlzQ29sbGFwc2VkID8gJ2Qtbm9uZScgOiAnY29sLW1kLTMgaC1hdXRvJ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTMgcHMtMSBwZS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0yIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImJhY2tUb05hdmlnYXRpb24oKVwiPjxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNDRcIiB2aWV3Qm94PVwiMCAwIDU2IDQ0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9kXzg4N180NTA1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjUyXCIgaGVpZ2h0PVwiNDBcIiByeD1cIjhcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMS41XCIgd2lkdGg9XCI1MVwiIGhlaWdodD1cIjM5XCIgcng9XCI3LjVcIiBzdHJva2U9XCIjRDBENUREXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMwLjUgMjZMMjUuNSAyMUwzMC41IDE2XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF84ODdfNDUwNVwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJVbml0cz1cInVzZXJTcGFjZU9uVXNlXCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPVwic1JHQlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PVwiMFwiIHJlc3VsdD1cIkJhY2tncm91bmRJbWFnZUZpeFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGluPVwiU291cmNlQWxwaGFcIiB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCIgcmVzdWx0PVwiaGFyZEFscGhhXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAuMDYyNzQ1MSAwIDAgMCAwIDAuMDk0MTE3NiAwIDAgMCAwIDAuMTU2ODYzIDAgMCAwIDAuMDUgMFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbjI9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiZWZmZWN0MV9kcm9wU2hhZG93Xzg4N180NTA1XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluPVwiU291cmNlR3JhcGhpY1wiIGluMj1cImVmZmVjdDFfZHJvcFNoYWRvd184ODdfNDUwNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJzaGFwZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWx0ZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwiY2FyZC10aXRsZS1mb290IHB0LTE1IG1zLTNcIj5UaWNrZXRzPC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInRvZ2dsZVNpZGViYXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDE1cHg7IHJpZ2h0OiAtMjVweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI2OFwiIGhlaWdodD1cIjY4XCIgdmlld0JveD1cIjAgMCA2OCA2OFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWx0ZXI9XCJ1cmwoI2ZpbHRlcjBfZGRfNzc4XzM0MjgyKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIxMlwiIHdpZHRoPVwiNDRcIiBoZWlnaHQ9XCI0NFwiIHJ4PVwiMjJcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMzMgMjdMMjggMjJMMzMgMTdNNDAgMjdMMzUgMjJMNDAgMTdcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsdGVyIGlkPVwiZmlsdGVyMF9kZF83NzhfMzQyODJcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI2OFwiIGhlaWdodD1cIjY4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz1cInNSR0JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT1cIjBcIiByZXN1bHQ9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBpbj1cIlNvdXJjZUFscGhhXCIgdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiIHJlc3VsdD1cImhhcmRBbHBoYVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZU1vcnBob2xvZ3kgcmFkaXVzPVwiMlwiIG9wZXJhdG9yPVwiZXJvZGVcIiBpbj1cIlNvdXJjZUFscGhhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cImVmZmVjdDFfZHJvcFNoYWRvd183NzhfMzQyODJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgZHk9XCI0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj1cIjNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMC4wNjI3NDUxIDAgMCAwIDAgMC4wOTQxMTc2IDAgMCAwIDAgMC4xNTY4NjMgMCAwIDAgMC4wMyAwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluMj1cIkJhY2tncm91bmRJbWFnZUZpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfNzc4XzM0MjgyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggaW49XCJTb3VyY2VBbHBoYVwiIHR5cGU9XCJtYXRyaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIiByZXN1bHQ9XCJoYXJkQWxwaGFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVNb3JwaG9sb2d5IHJhZGl1cz1cIjRcIiBvcGVyYXRvcj1cImVyb2RlXCIgaW49XCJTb3VyY2VBbHBoYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJlZmZlY3QyX2Ryb3BTaGFkb3dfNzc4XzM0MjgyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMTJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPVwiOFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IHR5cGU9XCJtYXRyaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwLjA2Mjc0NTEgMCAwIDAgMCAwLjA5NDExNzYgMCAwIDAgMCAwLjE1Njg2MyAwIDAgMCAwLjA4IDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93Xzc3OF8zNDI4MlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJlZmZlY3QyX2Ryb3BTaGFkb3dfNzc4XzM0MjgyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluPVwiU291cmNlR3JhcGhpY1wiIGluMj1cImVmZmVjdDJfZHJvcFNoYWRvd183NzhfMzQyODJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwic2hhcGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTQgdy0xMDAgb3ZlcmZsb3ctYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgcHktMiBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IG9wYWNpdHk9XCIwLjVcIiB4PVwiMTcuMDM2NVwiIHk9XCIxNS4xMjIzXCIgd2lkdGg9XCI4LjE1NTQ2XCIgaGVpZ2h0PVwiMlwiIHJ4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoNDUgMTcuMDM2NSAxNS4xMjIzKVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExIDE5QzYuNTU1NTYgMTkgMyAxNS40NDQ0IDMgMTFDMyA2LjU1NTU2IDYuNTU1NTYgMyAxMSAzQzE1LjQ0NDQgMyAxOSA2LjU1NTU2IDE5IDExQzE5IDE1LjQ0NDQgMTUuNDQ0NCAxOSAxMSAxOVpNMTEgNUM3LjUzMzMzIDUgNSA3LjUzMzMzIDUgMTFDNSAxNC40NjY3IDcuNTMzMzMgMTcgMTEgMTdDMTQuNDY2NyAxNyAxNyAxNC40NjY3IDE3IDExQzE3IDcuNTMzMzMgMTQuNDY2NyA1IDExIDVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIG1iLTIgcHMtMTQgcGUtMiB3LTEwMFwiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiIFsobmdNb2RlbCldPVwiU3RvcmVzU2VhcmNoVmFsdWVcIiAoY2hhbmdlKT1cInNlYXJjaFN0b3Jlc0RhdGEoKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgcC0wIGJ0blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1maWx0ZXIgYnRuIGJ0bi1zbSBidG4tb3V0bGluZVwiIChjbGljayk9XCJ0b2dnbGVGaWx0ZXIoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNSAxMEgxNU0yLjUgNUgxNy41TTcuNSAxNUgxMi41XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gT3ZlcmxheSAoY2xpY2sgb3V0c2lkZSB0byBjbG9zZSkgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiICpuZ0lmPVwiaXNGaWx0ZXJPcGVuXCIgKGNsaWNrKT1cImNsb3NlKClcIj48L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZpbHRlckZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZpbHRlciBjYXJkIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY2FyZCB0ZXh0LXN0YXJ0XCIgKm5nSWY9XCJpc0ZpbHRlck9wZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIm1iLTNcIj5GaWx0ZXIgT3B0aW9uczwvaDM+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFN0YXR1cyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPlN0YXR1czwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc21cIiBmb3JtQ29udHJvbE5hbWU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5PcGVuPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5Jbi1Qcm9ncmVzczwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+Q2xvc2U8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPlVuZGVyIHRhbmdlIHJldmlldzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+VGFuZ2UgcmV2aWV3IGRvbmU8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPkV4cGlyZWQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmV2aWV3ZXIgYWNjdXJhY3kgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBsYWJlbCBpbiBzYW1lIHJvdyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTAgZnMtOCByZXZpZXdlci1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXZpZXdlciBhY2N1cmFjeSAoJSkgYnkgY29uZGl0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBjb25kaXRpb24gZHJvcGRvd24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtIHJldmlld2VyLXNlbGVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJldmlld2VyQ29uZGl0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3Q8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4+PSBHcmVhdGVyIHRoYW4gb3IgZXF1YWwgdG88L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwgTGVzcyB0aGFuPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+PiBHcmVhdGVyIHRoYW48L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw9IExlc3NlciB0aGFuIG9yIGVxdWFsIHRvPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+QmV0d2Vlbjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHNpbmdsZSB2YWx1ZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlckZvcm0udmFsdWUucmV2aWV3ZXJDb25kaXRpb24gIT09ICdCZXR3ZWVuJzsgZWxzZSBiZXR3ZWVuVHBsXCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNtYWxsIG1zLTFcIj4lIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gcmV2aWV3ZXItaW5wdXQgdGV4dC1lbmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZXZpZXdlclZhbHVlXCIgbWluPVwiMVwiIG1heD1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPC9uZy1jb250YWluZXI+IC0tPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVE9ETzogc2FtZSBibG9jayBmb3IgQXBwcm92ZXIgJiBUYW5nbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSZXZpZXdlciBhY2N1cmFjeSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGxhYmVsIGluIHNhbWUgcm93IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMCBmcy04IHJldmlld2VyLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcHJvdmVyIGFjY3VyYWN5ICglKSBieSBjb25kaXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGNvbmRpdGlvbiBkcm9wZG93biAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc20gcmV2aWV3ZXItc2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmV2aWV3ZXJDb25kaXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlNlbGVjdDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPj49IEdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCBMZXNzIHRoYW48L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4+IEdyZWF0ZXIgdGhhbjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD0gTGVzc2VyIHRoYW4gb3IgZXF1YWwgdG88L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5CZXR3ZWVuPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gc2luZ2xlIHZhbHVlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyRm9ybS52YWx1ZS5yZXZpZXdlckNvbmRpdGlvbiAhPT0gJ0JldHdlZW4nOyBlbHNlIGJldHdlZW5UcGxcIj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGwgbXMtMVwiPiUgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSByZXZpZXdlci1pbnB1dCB0ZXh0LWVuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJldmlld2VyVmFsdWVcIiBtaW49XCIxXCIgbWF4PVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8L25nLWNvbnRhaW5lcj4gLS0+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmV2aWV3ZXIgYWNjdXJhY3kgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBsYWJlbCBpbiBzYW1lIHJvdyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTAgZnMtOCByZXZpZXdlci1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYW5nbyBhY2N1cmFjeSAoJSkgYnkgY29uZGl0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBjb25kaXRpb24gZHJvcGRvd24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtIHJldmlld2VyLXNlbGVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJldmlld2VyQ29uZGl0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3Q8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4+PSBHcmVhdGVyIHRoYW4gb3IgZXF1YWwgdG88L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwgTGVzcyB0aGFuPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+PiBHcmVhdGVyIHRoYW48L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw9IExlc3NlciB0aGFuIG9yIGVxdWFsIHRvPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+QmV0d2Vlbjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHNpbmdsZSB2YWx1ZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlckZvcm0udmFsdWUucmV2aWV3ZXJDb25kaXRpb24gIT09ICdCZXR3ZWVuJzsgZWxzZSBiZXR3ZWVuVHBsXCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNtYWxsIG1zLTFcIj4lIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gcmV2aWV3ZXItaW5wdXQgdGV4dC1lbmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZXZpZXdlclZhbHVlXCIgbWluPVwiMVwiIG1heD1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPC9uZy1jb250YWluZXI+IC0tPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGdhcC0yIG10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXNldEZpbHRlcigpXCI+UmVzZXQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFwcGx5RmlsdGVyKClcIj5BcHBseTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3BlblRpY2tldHNMaXN0Lmxlbmd0aFwiIGNsYXNzPVwibWItMiBib3JkZXItc2VsZWN0YWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBMRUZUOiBjaGVja2JveCArIHRleHQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cIm1lLTJcIiBbY2hlY2tlZF09XCJhbGxTZWxlY3RlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm0tMCBmb250LXNlbWlib2xkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBhbGwge3sgc3RvcmVDb3VudCB9fSBzdG9yZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSSUdIVDogUmV2aWV3ZXIoJSkgKyBvcHRpb25hbCBzb3J0IGljb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciByZXZpZXdlci1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMVwiPlJldmlld2VyKCUpPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gaWYgeW91IHdhbnQgYXJyb3cgaWNvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNvcnQtYXJyb3cgY3Vyc29yLXBvaW50ZXJcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi44MzQ2NCAxTDYuODM0NjMgMTIuNjY2N002LjgzNDYzIDEyLjY2NjdMMTIuNjY4IDYuODMzMzNNNi44MzQ2MyAxMi42NjY3TDEuMDAxMyA2LjgzMzMzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gb3IgdXNlIGFuIDxpPiBmcm9tIGZvbnQtYXdlc29tZS9ib290c3RyYXAgaWNvbiBpbnN0ZWFkIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgcHMtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IHN0b3JlIG9mIG9wZW5UaWNrZXRzTGlzdFwiIGNsYXNzPVwibWItMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzdG9yZS1pdGVtLWFjdGl2ZSc6IGlzU2VsZWN0ZWQoc3RvcmUpLCAnc3RvcmUtaXRlbSc6IHRydWUgfVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBMRUZUOiBjaGVja2JveCArIHRleHQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJtZS0yIG15LTNcIiBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKHN0b3JlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVN0b3JlU2VsZWN0aW9uKHN0b3JlKVwiIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RvcmUtdGV4dCBtcy0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LWlkXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlLXRleHQnOiBpc1NlbGVjdGVkKHN0b3JlKSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3RvcmU/LnRpY2tldElkIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdG9yZS1uYW1lIG10LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzdG9yZT8uc3RvcmVOYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUklHSFQ6IHBpbGwgYmFkZ2UgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtcy0yIHB4LTMgcHktMSByb3VuZGVkLXBpbGwgZC1pbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBwZXJjLWJhZGdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICdwZXJjLWJhZGdlLWFjdGl2ZSc6IGlzU2VsZWN0ZWQoc3RvcmUpLFxyXG4gICAgICAgICdwZXJjLWJhZGdlLW5vcm1hbCc6ICFpc1NlbGVjdGVkKHN0b3JlKVxyXG4gICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN0b3JlPy5yZXZpY2VkUGVyYyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhb3BlblRpY2tldHNMaXN0Lmxlbmd0aFwiIGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbWItM1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgbXgtMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW4gXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbjogNjRweDtib3JkZXItcmFkaXVzOiA4cHg7XHJcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1HcmF5LTUwLCAjRjlGQUZCKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibXktNVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjk0XCIgaGVpZ2h0PVwiOTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDk0IDk0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjdcIiB5PVwiN1wiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIHJ4PVwiNDBcIiBmaWxsPVwiI0RBRjFGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI3XCIgeT1cIjdcIiB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiByeD1cIjQwXCIgc3Ryb2tlPVwiI0VBRjhGRlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxMy4zMzMzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF83MzBfNzUwOTUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNTUuMzMyNyA2MlY1OC42NjY3QzU1LjMzMjcgNTYuODk4NiA1NC42MzAzIDU1LjIwMjkgNTMuMzgwMSA1My45NTI2QzUyLjEyOTggNTIuNzAyNCA1MC40MzQxIDUyIDQ4LjY2NiA1MkgzNS4zMzI3QzMzLjU2NDYgNTIgMzEuODY4OSA1Mi43MDI0IDMwLjYxODYgNTMuOTUyNkMyOS4zNjg0IDU1LjIwMjkgMjguNjY2IDU2Ljg5ODYgMjguNjY2IDU4LjY2NjdWNjJNNjUuMzMyNyA2MlY1OC42NjY3QzY1LjMzMTYgNTcuMTg5NSA2NC44Mzk5IDU1Ljc1NDYgNjMuOTM1IDU0LjU4NzJDNjMuMDMgNTMuNDE5OCA2MS43NjI5IDUyLjU4NTkgNjAuMzMyNyA1Mi4yMTY3TTUzLjY2NiAzMi4yMTY3QzU1LjEgMzIuNTgzOCA1Ni4zNzExIDMzLjQxNzggNTcuMjc4NyAzNC41ODcyQzU4LjE4NjQgMzUuNzU2NSA1OC42NzkxIDM3LjE5NDcgNTguNjc5MSAzOC42NzVDNTguNjc5MSA0MC4xNTUzIDU4LjE4NjQgNDEuNTkzNSA1Ny4yNzg3IDQyLjc2MjhDNTYuMzcxMSA0My45MzIyIDU1LjEgNDQuNzY2MiA1My42NjYgNDUuMTMzM000OC42NjYgMzguNjY2N0M0OC42NjYgNDIuMzQ4NiA0NS42ODEyIDQ1LjMzMzMgNDEuOTk5MyA0NS4zMzMzQzM4LjMxNzQgNDUuMzMzMyAzNS4zMzI3IDQyLjM0ODYgMzUuMzMyNyAzOC42NjY3QzM1LjMzMjcgMzQuOTg0OCAzOC4zMTc0IDMyIDQxLjk5OTMgMzJDNDUuNjgxMiAzMiA0OC42NjYgMzQuOTg0OCA0OC42NjYgMzguNjY2N1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2Utd2lkdGg9XCI0XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNzMwXzc1MDk1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgZmlsbD1cIndoaXRlXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDI3IDI3KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YS10aXRsZSBteS0zXCI+Tm8gU3RvcmVzIEZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YS1zdWIgbWItM1wiPkxvb2tzIGxpa2UgdGhlcmUgaXMgbm8gc3RvcmVzIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImlzQ29sbGFwc2VkID8gJ2NvbC0xMicgOiAnY29sLW1kLTknXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGJnLWxpZ2h0LXByaW1hcnkgcC0xIGgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtMyBweC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ29sbGFwc2VkXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPjxzcGFuIChjbGljayk9XCJ0b2dnbGVTaWRlYmFyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDEwcHg7IGxlZnQ6IDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgdmlld0JveD1cIjAgMCA0MCA0MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIuNSAyNUwxNy41IDIwTDIyLjUgMTVcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPiA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtdGl0bGUtZm9vdCBtcy0xNVwiPkZvb3RmYWxsIERpcmVjdG9yeTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRpY2tldERhdGE/LnN0YXR1cyA9PT0gJ1JhaXNlZCcgfHwgZ2V0SGVhZGVyU3RhdHVzKCkgPT09ICdPcGVuJ1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhY2xvc2VCdG5cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnkgbXgtMlwiIChjbGljayk9XCJzdGFydFJldmlldygpXCI+U3RhcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXZpZXc8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdldEhlYWRlclN0YXR1cygpID09PSAnSW4tUHJvZ3Jlc3MnXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNsb3NlQnRuXCIgW2Rpc2FibGVkXT1cImNsb3NlRGlzYWJsZWRcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnkgbXgtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN0b3BSZXZpZXcoKVwiPkNsb3NlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidGlja2V0RGF0YS5zdGF0dXMgPT09ICdUYW5nZSByZXZpZXcgZG9uZSdcIj48YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IG14LTJcIiAoY2xpY2spPVwic3RhcnRBdWRpdCgpXCI+U3RhcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpdDwvYnV0dG9uPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyIDEzQzEyLjU1MjMgMTMgMTMgMTIuNTUyMyAxMyAxMkMxMyAxMS40NDc3IDEyLjU1MjMgMTEgMTIgMTFDMTEuNDQ3NyAxMSAxMSAxMS40NDc3IDExIDEyQzExIDEyLjU1MjMgMTEuNDQ3NyAxMyAxMiAxM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMiA2QzEyLjU1MjMgNiAxMyA1LjU1MjI4IDEzIDVDMTMgNC40NDc3MiAxMi41NTIzIDQgMTIgNEMxMS40NDc3IDQgMTEgNC40NDc3MiAxMSA1QzExIDUuNTUyMjggMTEuNDQ3NyA2IDEyIDZaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIgMjBDMTIuNTUyMyAyMCAxMyAxOS41NTIzIDEzIDE5QzEzIDE4LjQ0NzcgMTIuNTUyMyAxOCAxMiAxOEMxMS40NDc3IDE4IDExIDE4LjQ0NzcgMTEgMTlDMTEgMTkuNTUyMyAxMS40NDc3IDIwIDEyIDIwWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC00IFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItNlwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yIGNhcmQtdGl0bGUtbGFiZWwgbXktMlwiPlN0b3JlIE5hbWU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xIGZvbnQtYm9sZCBteS0yXCI+OjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTMgY2FyZC10aXRsZS12YWx1ZSBteS0yXCI+e3t0aWNrZXREYXRhPy5zdG9yZU5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTIgY2FyZC10aXRsZS1sYWJlbCBteS0yXCI+VGlja2V0IElEPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMSBmb250LWJvbGQgbXktMlwiPjo8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zIGNhcmQtdGl0bGUtdmFsdWUgbXktMlwiPnt7dGlja2V0RGF0YT8udGlja2V0SWR9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTIgY2FyZC10aXRsZS1sYWJlbCBteS0yXCI+U3RhdHVzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMSBmb250LWJvbGQgbXktMlwiPjo8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBteS0yXCI+IDxzcGFuIGNsYXNzPVwiYmFkZ2UgbXgtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0U3RhdHVzQmFkZ2VDbGFzcyhnZXRIZWFkZXJTdGF0dXMoKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRIZWFkZXJTdGF0dXMoKSB8IHRpdGxlY2FzZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yIGNhcmQtdGl0bGUtbGFiZWwgbXktMlwiPkR1ZSBEYXRlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMSBmb250LWJvbGQgbXktMlwiPjo8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zIGNhcmQtdGl0bGUtdmFsdWUgbXktMlwiPjA0IERlYyAyMDI1PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtbGF5ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1zdGFydCB3LTEwMFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTEVGVCBTSURFIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBtYi0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtbGFiZWxcIj5UaWNrZXQgU3RhdHVzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc3ViIG1iLTJcIj5Mb2dzIGZvciBlYWNoIHJldmlzaW9uIG9mIHRoZSB0aWNrZXQuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUklHSFQgU0lERSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYXJyb3dzaG93XCIgKGNsaWNrKT1cIm9wZW5BcnJvdygpXCI+IDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9kXzQ4Nl85MTkwMilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIxXCIgd2lkdGg9XCIzNlwiIGhlaWdodD1cIjM2XCIgcng9XCI4XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMzVcIiBoZWlnaHQ9XCIzNVwiIHJ4PVwiNy41XCIgc3Ryb2tlPVwiI0QwRDVERFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNSAxNi41TDIwIDIxLjVMMjUgMTYuNVwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWx0ZXIgaWQ9XCJmaWx0ZXIwX2RfNDg2XzkxOTAyXCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCIgcmVzdWx0PVwiQmFja2dyb3VuZEltYWdlRml4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggaW49XCJTb3VyY2VBbHBoYVwiIHR5cGU9XCJtYXRyaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiaGFyZEFscGhhXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAuMDYyNzQ1MSAwIDAgMCAwIDAuMDk0MTE3NiAwIDAgMCAwIDAuMTU2ODYzIDAgMCAwIDAuMDUgMFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbjI9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiZWZmZWN0MV9kcm9wU2hhZG93XzQ4Nl85MTkwMlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbj1cIlNvdXJjZUdyYXBoaWNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93XzQ4Nl85MTkwMlwiIHJlc3VsdD1cInNoYXBlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWFycm93c2hvd1wiIChjbGljayk9XCJjbG9zZUFycm93KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgdmlld0JveD1cIjAgMCA0MCA0MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsdGVyPVwidXJsKCNmaWx0ZXIwX2RfNDg2XzkxODkzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIzOFwiIHk9XCIzN1wiIHdpZHRoPVwiMzZcIiBoZWlnaHQ9XCIzNlwiIHJ4PVwiOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSgxODAgMzggMzcpXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMzcuNVwiIHk9XCIzNi41XCIgd2lkdGg9XCIzNVwiIGhlaWdodD1cIjM1XCIgcng9XCI3LjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoMTgwIDM3LjUgMzYuNSlcIiBzdHJva2U9XCIjRDBENUREXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI1IDIxLjVMMjAgMTYuNUwxNSAyMS41XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF80ODZfOTE4OTNcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz1cInNSR0JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT1cIjBcIiByZXN1bHQ9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBpbj1cIlNvdXJjZUFscGhhXCIgdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJoYXJkQWxwaGFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgZHk9XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj1cIjFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMC4wNjI3NDUxIDAgMCAwIDAgMC4wOTQxMTc2IDAgMCAwIDAgMC4xNTY4NjMgMCAwIDAgMC4wNSAwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluMj1cIkJhY2tncm91bmRJbWFnZUZpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfNDg2XzkxODkzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluPVwiU291cmNlR3JhcGhpY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbjI9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfNDg2XzkxODkzXCIgcmVzdWx0PVwic2hhcGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uICpuZ0lmPVwiIWFycm93c2hvd1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRpY2tldCBvZiBmb290ZmFsbFRpY2tldHNEYXRhXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0aWNrZXQ/Ll9zb3VyY2UgYXMgc291cmNlXCIgY2xhc3M9XCJ0aWNrZXQtY29udGFpbmVyXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFjdHVhbCBGb290ZmFsbCBIZWFkZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGZhbGwtdmFsdWVcIj57e3NvdXJjZT8uZm9vdGZhbGxDb3VudH19IDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9vdGZhbGwtbGFiZWwgbXMtM1wiPkFjdHVhbCBGb290ZmFsbDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlzc3VlLWRhdGVcIj5Jc3N1ZSBkYXRlIDoge3tzb3VyY2U/LmNyZWF0ZWRBdCB8IGRhdGU6J2RkIE1NTSB5eXl5J319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRpbWVsaW5lIExpbmUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG1hcHBpbmcgb2Ygc291cmNlPy5tYXBwaW5nSW5mb1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gV2hlbiB0aWNrZXQgaXMgQ0xPU0VELCBza2lwIHRoZSB0YWdnaW5nIHJvdyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm1hcHBpbmc/LnN0YXR1cyAhPT0gJ2Nsb3NlZCcgfHwgbWFwcGluZz8udHlwZSAhPT0gJ3RhZ2dpbmcnXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJtYXBwaW5nPy50eXBlID09PSAndGFnZ2luZycgfHwgbWFwcGluZz8udHlwZSA9PT0gJ3JldmlldydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRpbWVsaW5lXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1hcHBpbmc/LnR5cGUgPT09ICd0YWdnaW5nJyB8fCBtYXBwaW5nPy50eXBlID09PSAncmV2aWV3J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXNlci1pbmZvIG1zLTRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXIgYXZhdGFyLXRleHQgbGlnaHQtcHJpbWFyeSBwLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldEluaXRpYWxzRnJvbUVtYWlsKG1hcHBpbmc/LmNyZWF0ZWRCeUVtYWlsIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U/LmNyZWF0ZWRCeUVtYWlsKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtYXBwaW5nPy50eXBlID09PSAndGFnZ2luZydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0IGNyZWF0ZWQgYnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtYXBwaW5nPy50eXBlID09PSAncmV2aWV3J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXZpZXdlZCBieVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItZW1haWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtYXBwaW5nPy5jcmVhdGVkQnlFbWFpbCB8fCBzb3VyY2U/LmNyZWF0ZWRCeUVtYWlsIH19IOKAoiB7eyAobWFwcGluZz8uY3JlYXRlZEF0IHx8IHNvdXJjZT8uY3JlYXRlZEF0KSB8IGRhdGU6J0hIOm1tOnNzIOKAk2RkIE1NTSB5eXl5JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lbGluZVwiPjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNob3cgcmV2aXNpb24gY2FyZCBvbmx5IHdoZW4gTk9UIGNsb3NlZCAmIHR5cGUgaXMgdGFnZ2luZyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmV2aXNpb24tY2FyZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibWFwcGluZz8udHlwZSA9PT0gJ3RhZ2dpbmcnIHx8IG1hcHBpbmc/LnR5cGUgPT09ICdyZXZpZXcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YWx1ZXMtcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsdWUtYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbWFwcGluZz8ucmV2aWNlZEZvb3RmYWxsID09PSBudWxsID8gJy0tJyA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmc/LnJldmljZWRGb290ZmFsbCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbCBmdy1ib2xkXCI+UmV2aXNlZCBGb290ZmFsbDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhbHVlLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhbHVlIGFjY3VyYWN5IGRvd25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbWFwcGluZz8ucmV2aWNlZFBlcmMgfHwgc291cmNlPy5yZXZpY2VkUGVyYyB8fCAnLS0nIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBhcnJvdyBzdmcgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwgZnctYm9sZCBwdC0xXCI+QWNjdXJhY3k8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lbGluZS1uZXcgbXktMlwiPjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YWx1ZS1ibG9ja1wiICpuZ0Zvcj1cImxldCBpdGVtIG9mIG1hcHBpbmc/LmNvdW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0/LnZhbHVlID8/ICctLScgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbT8ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInRpbWVsaW5lXCI+PC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0NoZWNrYm94RW5hYmxlXCIgY2xhc3M9XCJwYi0zIG15LTMgaC0xMDAgcm91bmRlZC0zIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgYWJzb2x1dGUxIGZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYWxsU2VsZWN0ZWRcIiAoY2hhbmdlKT1cIm92ZXJhbGxTZWxlY3QoJGV2ZW50KVwiIC8+PHNwYW4gY2xhc3M9XCJtcy0xMlwiPiBTZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGw8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0NoZWNrYm94RW5hYmxlXCIgY2xhc3M9XCJjb2wtbWQtNiBwZS04XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBhcmlhLXBsYWNlaG9sZGVyPVwic2hvdyBhbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFsbFwiPlNob3cgYWxsPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhY2NlcHRcIj5BY2NlcHQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInJlamVjdFwiPlJlamVjdDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicGVuZGluZ1wiPlBlbmRpbmc8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIW92ZXJhbGxTZWxlY3RlZElkcz8ubGVuZ3RoXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgYmctd2hpdGUgdy0xMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicG9wdXBPcGVuKCdyZWplY3RlZCcpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAoc2VsZWN0ZWRSb2xlID09PSAnYXBwcm92ZXInIHx8IHNlbGVjdGVkUm9sZSA9PT0gJ3Jldmlld2VyJykgPyAnRGVueScgOiAnUmVqZWN0J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIW92ZXJhbGxTZWxlY3RlZElkcz8ubGVuZ3RoXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgYmctd2hpdGUgdy0xMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicG9wdXBPcGVuKCdhcHByb3ZlZCcpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAoc2VsZWN0ZWRSb2xlID09PSAnYXBwcm92ZXInIHx8IHNlbGVjdGVkUm9sZSA9PT0gJ3Jldmlld2VyJykgPyAnQXBwcm92ZScgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JyB9fVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCIhb3ZlcmFsbFNlbGVjdGVkSWRzPy5sZW5ndGhcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBiZy13aGl0ZSB3LTEwMFwiIChjbGljayk9XCJwb3B1cE9wZW4oJ3JlamVjdGVkJylcIj5EZW55PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cIiFvdmVyYWxsU2VsZWN0ZWRJZHM/Lmxlbmd0aFwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIGJnLXdoaXRlIHctMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicG9wdXBPcGVuKCdhcHByb3ZlZCcpXCI+QXBwcm92ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRpY2tldCBvZiBmb290ZmFsbFRpY2tldHNEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0aWNrZXQ/Ll9zb3VyY2UgYXMgc291cmNlXCIgY2xhc3M9XCJteS01XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImhhc1Jldm9wc1R5cGUoJ2R1cGxpY2F0ZScpXCIgY2xhc3M9XCJsYXllcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEhlYWRlciBTZWN0aW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBtaW4taC0yNXB4IHB0LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidGV4dC1sZyBmb250LXNlbWlib2xkIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzczMF83NjE1NylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zLjc1IDExLjI1SDNDMi42MDIxOCAxMS4yNSAyLjIyMDY0IDExLjA5MiAxLjkzOTM0IDEwLjgxMDdDMS42NTgwNCAxMC41Mjk0IDEuNSAxMC4xNDc4IDEuNSA5Ljc1VjNDMS41IDIuNjAyMTggMS42NTgwNCAyLjIyMDY0IDEuOTM5MzQgMS45MzkzNEMyLjIyMDY0IDEuNjU4MDQgMi42MDIxOCAxLjUgMyAxLjVIOS43NUMxMC4xNDc4IDEuNSAxMC41Mjk0IDEuNjU4MDQgMTAuODEwNyAxLjkzOTM0QzExLjA5MiAyLjIyMDY0IDExLjI1IDIuNjAyMTggMTEuMjUgM1YzLjc1TTguMjUgNi43NUgxNUMxNS44Mjg0IDYuNzUgMTYuNSA3LjQyMTU3IDE2LjUgOC4yNVYxNUMxNi41IDE1LjgyODQgMTUuODI4NCAxNi41IDE1IDE2LjVIOC4yNUM3LjQyMTU3IDE2LjUgNi43NSAxNS44Mjg0IDYuNzUgMTVWOC4yNUM2Ljc1IDcuNDIxNTcgNy40MjE1NyA2Ljc1IDguMjUgNi43NVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM0NzU0NjdcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNzMwXzc2MTU3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1cGxpY2F0ZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBCb2R5IFNlY3Rpb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWFwcGluZyBvZiBzb3VyY2U/Lm1hcHBpbmdJbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQm9keSBTZWN0aW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWFwcGluZz8udHlwZSA9PT12aWV3TW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3JpZ2luYWwgb2YgbWFwcGluZz8ucmV2aXNlZERldGFpbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvcmlnaW5hbD8uaXNQYXJlbnQgJiYgb3JpZ2luYWw/LnJldm9wc1R5cGUgPT09J2R1cGxpY2F0ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtYm9keSBiZy13aGl0ZSBsYXllcnMgcHktNSBweC0wIG0tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBPcmlnaW5hbCBJbWFnZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkdXBsaWNhdGUtaGVhZCBweC01IG15LTNcIj5PcmlnaW5hbCBpbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYi0zIGltZy1ib3JkZXIgYm9yZGVyIGJvcmRlci0xIGgtMTAwIHJvdW5kZWQtM1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZVVybCArIG9yaWdpbmFsPy5maWxlUGF0aFwiIGFsdD1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LTEwMCByb3VuZGVkIGJvcmRlclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzYy10aXRsZSBtcy0yIG15LTJcIj5UYW5nbyBJRDoge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbC50ZW1wSWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2MtdmFsdWUgbXMtMlwiPkVudHJ5IFRpbWU6IHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9ybWF0dGVkRW50cnlUaW1lKG9yaWdpbmFsPy5lbnRyeVRpbWUpIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXBhcmF0b3Igc2VwYXJhdG9yLWRhc2hlZCBtdC0zIG1iLTVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cImR1cGxpY2F0ZS1oZWFkIG15LTMgZnMtNlwiPlRhZ2dlZCBEdXBsaWNhdGVzPC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDaGVja2JveEVuYWJsZVwiIGNsYXNzPVwibXktM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImFyZUFsbER1cGxpY2F0ZXNTZWxlY3RlZChvcmlnaW5hbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZVNlbGVjdEFsbER1cGxpY2F0ZXMob3JpZ2luYWwsICRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtcy0yXCI+U2VsZWN0IEFsbDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZHVwbGljYXRlIG9mIG9yaWdpbmFsPy5kdXBsaWNhdGVJbWFnZTsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLW1kLTMgbWItMyBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGItMyBoLTEwMCByb3VuZGVkLTMgcG9zaXRpb24tcmVsYXRpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgJ2xheWVyLWFwcHJvdmVkJzogaXNBcHByb3ZlZChkdXBsaWNhdGUpLFxyXG4gICAgJ2xheWVyLXJlamVjdGVkJzogaXNSZWplY3RlZChkdXBsaWNhdGUpLFxyXG4gICAgJ2ltZy1ib3JkZXIgYm9yZGVyIGJvcmRlci0xJzogIWlzQXBwcm92ZWQoZHVwbGljYXRlKSAmJiAhaXNSZWplY3RlZChkdXBsaWNhdGUpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDaGVja2JveCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0NoZWNrYm94RW5hYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzTG9ja2VkQnlSZXZpZXdlcihkdXBsaWNhdGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJyaWdodDogNXB4IDsgbWFyZ2luOiAxMHB4IDVweCA0cHggIWltcG9ydGFudDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0R1cGxpY2F0ZVNlbGVjdGVkKG9yaWdpbmFsLnRlbXBJZCwgZHVwbGljYXRlLnRlbXBJZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRHVwbGljYXRlQ2hlY2tib3hDaGFuZ2Uob3JpZ2luYWwudGVtcElkLCBkdXBsaWNhdGUudGVtcElkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBmb3JtLWNoZWNrLWlucHV0IGR1cGxpY2F0ZS1jaGVja2JveFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBhYnNvbHV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNMb2NrZWRCeVJldmlld2VyKGR1cGxpY2F0ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXRDaGVja2JveCgnZHVwbGljYXRlJywgZHVwbGljYXRlKVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTlcIiBoZWlnaHQ9XCIxOVwiIHZpZXdCb3g9XCIwIDAgMTkgMTlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9kXzIwMjNfMTM3MTgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjEuMTExMzNcIiB5PVwiMC41NTU2NjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiByeD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIxLjM4OTExXCIgeT1cIjAuODMzNDQyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNS40NDQ0XCIgaGVpZ2h0PVwiMTUuNDQ0NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4PVwiMS43MjIyMlwiIHN0cm9rZT1cIiNEMEQ1RERcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIwLjU1NTU1NlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk01Ljg3MTA5IDguNTU1NjZIMTIuMzUyNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIwLjkyNzc3OFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsdGVyIGlkPVwiZmlsdGVyMF9kXzIwMjNfMTM3MThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4PVwiMC4wMDAyMTcwOFwiIHk9XCIwLjAwMDEwODU0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxOC4yMjIyXCIgaGVpZ2h0PVwiMTguMjIyMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cIkJhY2tncm91bmRJbWFnZUZpeFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGluPVwiU291cmNlQWxwaGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJoYXJkQWxwaGFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgZHk9XCIwLjU1NTU1NlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkRGV2aWF0aW9uPVwiMC41NTU1NTZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMC4wNjI3NDUxIDAgMCAwIDAgMC4wOTQxMTc2IDAgMCAwIDAgMC4xNTY4NjMgMCAwIDAgMC4wNSAwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbjI9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiZWZmZWN0MV9kcm9wU2hhZG93XzIwMjNfMTM3MThcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluPVwiU291cmNlR3JhcGhpY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbjI9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMjAyM18xMzcxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJzaGFwZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWx0ZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAoY2hhbmdlKT1cIm9uSW1hZ2VDaGVja2JveENoYW5nZShkdXBsaWNhdGUudGVtcElkLCAnZHVwbGljYXRlJywgJ29yaWdpbmFsJylcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRHVwbGljYXRlIEltYWdlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlVXJsICsgZHVwbGljYXRlLmZpbGVQYXRoXCIgYWx0PVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkltYWdlUHJldmlldyhvcmlnaW5hbC5kdXBsaWNhdGVJbWFnZSwgaSwgJ1RhZ2dlZCBEdXBsaWNhdGVzJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0xMDAgcm91bmRlZCBib3JkZXIgZHVwbGljYXRlLWltYWdlXCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIER1cGxpY2F0ZSBJbmZvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93IG15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2MtdGl0bGUgbXMtMiBteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYW5nbyBJRDoge3sgZHVwbGljYXRlLnRlbXBJZCB9fVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0QWN0aW9uKGR1cGxpY2F0ZSwgJ3JldmlldycpPy5hY3Rpb24gPT09ICdhcHByb3ZlZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXMtMlwiPjxzdmcgc3R5bGU9XCJ3aWR0aDogMjBweDtcclxuICAgICAgICBoZWlnaHQ6IDIwcHg7XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMVwiIHZpZXdCb3g9XCIwIDAgMTAgMTFcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB5PVwiMC41XCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4PVwiNVwiIGZpbGw9XCIjRDFGQURGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy4xMjIyIDMuNTc5MTlMNC4xMzg4NyA2LjQ1ODM2TDMuMzQ3MiA1LjYxMjUzQzMuMjAxMzcgNS40NzUwMyAyLjk3MjIgNS40NjY2OSAyLjgwNTUzIDUuNTgzMzZDMi42NDMwMyA1LjcwNDE5IDIuNTk3MiA1LjkxNjY5IDIuNjk3MiA2LjA4NzUzTDMuNjM0NyA3LjYxMjUzQzMuNzI2MzcgNy43NTQxOSAzLjg4NDcgNy44NDE2OSA0LjA2Mzg3IDcuODQxNjlDNC4yMzQ3IDcuODQxNjkgNC4zOTcyIDcuNzU0MTkgNC40ODg4NyA3LjYxMjUzQzQuNjM4ODcgNy40MTY2OSA3LjUwMTM3IDQuMDA0MTkgNy41MDEzNyA0LjAwNDE5QzcuODc2MzcgMy42MjA4NiA3LjQyMjIgMy4yODMzNiA3LjEyMjIgMy41NzUwM1YzLjU3OTE5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzEyQjc2QVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0QWN0aW9uKGR1cGxpY2F0ZSwgJ3JldmlldycpPy5hY3Rpb24gPT09ICdyZWplY3RlZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXMtMlwiPjxzdmcgc3R5bGU9XCJ3aWR0aDogMjBweDtcclxuICAgICAgICBoZWlnaHQ6IDIwcHg7XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIxM1wiIHZpZXdCb3g9XCIwIDAgMTMgMTNcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE0MjhfNTk0ODQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNC41Mjk2MSAxLjVIOC42Njk2MUwxMS41OTk2IDQuNDNWOC41N0w4LjY2OTYxIDExLjVINC41Mjk2MUwxLjU5OTYxIDguNTdWNC40M0w0LjUyOTYxIDEuNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkVFNEUyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjA5OTYxIDVMNS4wOTk2MSA4TTUuMDk5NjEgNUw4LjA5OTYxIDhNNC41Mjk2MSAxLjVIOC42Njk2MUwxMS41OTk2IDQuNDNWOC41N0w4LjY2OTYxIDExLjVINC41Mjk2MUwxLjU5OTYxIDguNTdWNC40M0w0LjUyOTYxIDEuNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzE0MjhfNTk0ODRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC41OTk2MDkgMC41KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjLXZhbHVlIG1zLTJcIj5FbnRyeSBUaW1lOiB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9ybWF0dGVkRW50cnlUaW1lKGR1cGxpY2F0ZS5lbnRyeVRpbWUpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0QWN0aW9uKGR1cGxpY2F0ZSwgJ2FwcHJvdmUnKT8uYWN0aW9uID09PSAnYXBwcm92ZWQnXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIzN1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjM3XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHJ4PVwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNEMUZBREZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQ4Nl85NDA1MSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05LjUgMTdIOEM3LjczNDc4IDE3IDcuNDgwNDMgMTYuODk0NiA3LjI5Mjg5IDE2LjcwNzFDNy4xMDUzNiAxNi41MTk2IDcgMTYuMjY1MiA3IDE2VjEyLjVDNyAxMi4yMzQ4IDcuMTA1MzYgMTEuOTgwNCA3LjI5Mjg5IDExLjc5MjlDNy40ODA0MyAxMS42MDU0IDcuNzM0NzggMTEuNSA4IDExLjVIOS41TTEzIDEwLjVWOC41QzEzIDguMTAyMTggMTIuODQyIDcuNzIwNjQgMTIuNTYwNyA3LjQzOTM0QzEyLjI3OTQgNy4xNTgwNCAxMS44OTc4IDcgMTEuNSA3TDkuNSAxMS41VjE3SDE1LjE0QzE1LjM4MTIgMTcuMDAyNyAxNS42MTUyIDE2LjkxODIgMTUuNzk5IDE2Ljc2MkMxNS45ODI3IDE2LjYwNTggMTYuMTAzOCAxNi4zODg1IDE2LjE0IDE2LjE1TDE2LjgzIDExLjY1QzE2Ljg1MTggMTEuNTA2NyAxNi44NDIxIDExLjM2MDMgMTYuODAxNyAxMS4yMjExQzE2Ljc2MTMgMTEuMDgxOSAxNi42OTExIDEwLjk1MzEgMTYuNTk1OSAxMC44NDM4QzE2LjUwMDggMTAuNzM0NCAxNi4zODMgMTAuNjQ3IDE2LjI1MDggMTAuNTg3NkMxNi4xMTg1IDEwLjUyODMgMTUuOTc1IDEwLjQ5ODQgMTUuODMgMTAuNUgxM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMzk4NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80ODZfOTQwNTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNiA2KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRBY3Rpb24oZHVwbGljYXRlLCAnYXBwcm92ZScpPy5hY3Rpb24gPT09ICdyZWplY3RlZCdcIj48c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjM3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMzdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgcng9XCIxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0ZFRTRFMlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDg2Xzk0MDkwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE0LjUwMTUgNy4wMDAwNkgxNS44MzY1QzE2LjExOTUgNi45OTUwNSAxNi4zOTQ0IDcuMDk0MTMgMTYuNjA5MiA3LjI3ODQ3QzE2LjgyMzkgNy40NjI4MSAxNi45NjM1IDcuNzE5NTkgMTcuMDAxNSA4LjAwMDA2VjExLjUwMDFDMTYuOTYzNSAxMS43ODA1IDE2LjgyMzkgMTIuMDM3MyAxNi42MDkyIDEyLjIyMTZDMTYuMzk0NCAxMi40MDYgMTYuMTE5NSAxMi41MDUxIDE1LjgzNjUgMTIuNTAwMUgxNC41MDE1TTExLjAwMTUgMTMuNTAwMVYxNS41MDAxQzExLjAwMTUgMTUuODk3OSAxMS4xNTk1IDE2LjI3OTQgMTEuNDQwOCAxNi41NjA3QzExLjcyMjEgMTYuODQyIDEyLjEwMzcgMTcuMDAwMSAxMi41MDE1IDE3LjAwMDFMMTQuNTAxNSAxMi41MDAxVjcuMDAwMDZIOC44NjE0OEM4LjYyMDMyIDYuOTk3MzMgOC4zODYyOSA3LjA4MTg2IDguMjAyNTMgNy4yMzgwNkM4LjAxODc2IDcuMzk0MjYgNy44OTc2NCA3LjYxMTYxIDcuODYxNDggNy44NTAwNkw3LjE3MTQ4IDEyLjM1MDFDNy4xNDk3MyAxMi40OTM0IDcuMTU5MzkgMTIuNjM5NyA3LjE5OTgxIDEyLjc3ODlDNy4yNDAyMyAxMi45MTgxIDcuMzEwNDMgMTMuMDQ2OSA3LjQwNTU1IDEzLjE1NjNDNy41MDA2NyAxMy4yNjU3IDcuNjE4NDQgMTMuMzUzMSA3Ljc1MDY5IDEzLjQxMjRDNy44ODI5NSAxMy40NzE4IDguMDI2NTMgMTMuNTAxNyA4LjE3MTQ4IDEzLjUwMDFIMTEuMDAxNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80ODZfOTQwOTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNiA2KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEdXBsaWNhdGUgUmVhc29uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZHVwbGljYXRlLXJlYXNvbiBtcy0yIG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZFwiPnt7IGR1cGxpY2F0ZS5yZWFzb24gfX08L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFN0YXR1cyBJY29ucyAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIHB5LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbW1lbnRzLWFjY29yZGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBY2NvcmRpb24gSGVhZGVyIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIiAoY2xpY2spPVwidG9nZ2xlQ29tbWVudHNBY2NvcmRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbW1lbnRzLWNvdW50XCI+e3sgY29tbWVudHM/Lmxlbmd0aCB9fSBDb21tZW50czwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjY29yZGlvbi1hcnJvdyBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtjbGFzcy5yb3RhdGVkXT1cImNvbW1lbnRzQWNjb3JkaW9uT3BlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk00IDZMOCAxMEwxMiA2XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWNjb3JkaW9uIEJvZHkgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWJvZHlcIiAqbmdJZj1cImNvbW1lbnRzQWNjb3JkaW9uT3BlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGMgb2YgY29tbWVudHNcIiBjbGFzcz1cImNvbW1lbnQtdGhyZWFkIGQtZmxleCBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gYXZhdGFyIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY29tbWVudC1hdmF0YXIgbWUtM1wiIFtzcmNdPVwiYy5hdmF0YXJcIiBhbHQ9XCJhdmF0YXJcIiAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBjb250ZW50IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkXCI+e3sgYy5lbWFpbCB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjLnRpbWUgfCBkYXRlOidoaDptbTpzcyBhIC0gZGQgTU1NIHl5eXknIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIG9wdGlvbmFsIG1haW4gbGluZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMiBtdC0yXCIgKm5nSWY9XCJjLm1haW5UZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYy5tYWluVGV4dCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTWFya2VkIGFzIOKAnOKApuKAnSBsaW5lIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCIgKm5nSWY9XCJjLnN0YXR1c0xhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFya2VkIGFzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiJ3RleHQtJyArIGMuc3RhdHVzVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDigJx7eyBjLnN0YXR1c0xhYmVsIH194oCdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gbm90ZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMlwiICpuZ0lmPVwiYy5ub3RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYy5ub3RlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBpbWFnZSBjYXJkcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTIgZmxleC13cmFwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaW1nIG9mIGMuaW1hZ2VzXCIgY2xhc3M9XCJ0YW5nby1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YW5nby1pbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZEltYWdlXT1cIid1cmwoJyArIGltZy51cmwgKyAnKSdcIj48L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YW5nby1tZXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic21hbGxcIj5UYW5nbyBJRDoge3sgaW1nLnRhbmdvSWQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImltZy5zdGF0dXMgPT09ICdhcHByb3ZlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3RhdHVzLWRvdCBzdGF0dXMtYXBwcm92ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImltZy5zdGF0dXMgPT09ICdyZWplY3QnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdGF0dXMtZG90IHN0YXR1cy1yZWplY3RcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWFsbCB0ZXh0LW11dGVkXCI+RW50cnkgdGltZToge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWcuZW50cnlUaW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gK04gbW9yZSBjYXJkIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjLm1vcmVDb3VudCA+IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhbmdvLWNhcmQgbW9yZS1jYXJkIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAre3sgYy5tb3JlQ291bnQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic291cmNlPy5kdXBsaWNhdGVJbWFnZXM/Lmxlbmd0aFwiIGNsYXNzPVwibXktNyBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIWR1cGxpY2F0ZUFDQ291bnRcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBtZS0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInBvcHVwT3BlbigncmVqZWN0ZWQnLCdkdXBsaWNhdGUnKVwiPlJlamVjdDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cIiFkdXBsaWNhdGVBQ0NvdW50XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXMtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwb3B1cE9wZW4oJ2FwcHJvdmVkJywnZHVwbGljYXRlJylcIj5BcHByb3ZlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJzb3VyY2U/LmR1cGxpY2F0ZUltYWdlcz8ubGVuZ3RoXCIgY2xhc3M9XCJzZXBhcmF0b3Igc2VwYXJhdG9yLWRhc2hlZCBtdC0zIG1iLTVcIj48L2Rpdj4gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxheWVycyBteS0yXCIgKm5nSWY9XCJoYXNSZXZvcHNUeXBlKCdlbXBsb3llZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIG1pbi1oLTI1cHggcHQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHVwbGljYXRlLWhlYWQgdGV4dC1sZyBteS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGljb24gaGVyZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtcGxveWVlL1N0YWZmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDaGVja2JveEVuYWJsZVwiIGNsYXNzPVwibXMtMyBteS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cInNlbGVjdEFsbEJ5VHlwZS5lbXBsb3llZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0QWxsKCdlbXBsb3llZScsICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlNlbGVjdCBBbGw8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGxvb3Agb3ZlciB0aWNrZXRzIC0tPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWFwcGluZyBvZiBzb3VyY2U/Lm1hcHBpbmdJbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJtYXBwaW5nPy50eXBlID09PSB2aWV3TW9kZVwiIGNsYXNzPVwiY2FyZC1ib2R5IGJnLXdoaXRlIGxheWVycyBwLTUgbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3JpZ2luYWwgb2YgbWFwcGluZz8ucmV2aXNlZERldGFpbFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm9yaWdpbmFsPy5yZXZvcHNUeXBlID09PSAnZW1wbG95ZWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLW1kLTMgbWItMyBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYi0zICBoLTEwMCByb3VuZGVkLTMgcG9zaXRpb24tcmVsYXRpdmVcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAnbGF5ZXItYXBwcm92ZWQnOiBpc0FwcHJvdmVkKG9yaWdpbmFsKSxcclxuICAgICdsYXllci1yZWplY3RlZCc6IGlzUmVqZWN0ZWQob3JpZ2luYWwpLFxyXG4gICAgJ2ltZy1ib3JkZXIgYm9yZGVyIGJvcmRlci0xJzogIWlzQXBwcm92ZWQob3JpZ2luYWwpICYmICFpc1JlamVjdGVkKG9yaWdpbmFsKX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDaGVja2JveEVuYWJsZVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiIWlzTG9ja2VkQnlSZXZpZXdlcihvcmlnaW5hbClcIiB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBhYnNvbHV0ZSBmb3JtLWNoZWNrLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkQnlUeXBlLmVtcGxveWVlLmluY2x1ZGVzKG9yaWdpbmFsPy50ZW1wSWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25JbWFnZUNoZWNrYm94Q2hhbmdlKCdlbXBsb3llZScsIG9yaWdpbmFsLnRlbXBJZClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGFic29sdXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNMb2NrZWRCeVJldmlld2VyKG9yaWdpbmFsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXRDaGVja2JveCgnZW1wbG95ZWUnLCBvcmlnaW5hbClcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxOVwiIHZpZXdCb3g9XCIwIDAgMTkgMTlcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9kXzIwMjNfMTM3MTgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIxLjExMTMzXCIgeT1cIjAuNTU1NjY0XCIgd2lkdGg9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNlwiIHJ4PVwiMlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIxLjM4OTExXCIgeT1cIjAuODMzNDQyXCIgd2lkdGg9XCIxNS40NDQ0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE1LjQ0NDRcIiByeD1cIjEuNzIyMjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0QwRDVERFwiIHN0cm9rZS13aWR0aD1cIjAuNTU1NTU2XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk01Ljg3MTA5IDguNTU1NjZIMTIuMzUyNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMC45Mjc3NzhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsdGVyIGlkPVwiZmlsdGVyMF9kXzIwMjNfMTM3MThcIiB4PVwiMC4wMDAyMTcwOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5PVwiMC4wMDAxMDg1NFwiIHdpZHRoPVwiMTguMjIyMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxOC4yMjIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPVwic1JHQlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cIkJhY2tncm91bmRJbWFnZUZpeFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBpbj1cIlNvdXJjZUFscGhhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiaGFyZEFscGhhXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZU9mZnNldCBkeT1cIjAuNTU1NTU2XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIwLjU1NTU1NlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAuMDYyNzQ1MSAwIDAgMCAwIDAuMDk0MTE3NiAwIDAgMCAwIDAuMTU2ODYzIDAgMCAwIDAuMDUgMFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbjI9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cImVmZmVjdDFfZHJvcFNoYWRvd18yMDIzXzEzNzE4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbj1cIlNvdXJjZUdyYXBoaWNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluMj1cImVmZmVjdDFfZHJvcFNoYWRvd18yMDIzXzEzNzE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJzaGFwZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VVcmwgKyBvcmlnaW5hbD8uZmlsZVBhdGhcIiBhbHQ9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctMTAwIHJvdW5kZWQgYm9yZGVyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdyBteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzYy10aXRsZSBtcy0yIG15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhbmdvIElEOiB7eyBvcmlnaW5hbC50ZW1wSWQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRBY3Rpb24ob3JpZ2luYWwsICdyZXZpZXcnKT8uYWN0aW9uID09PSAnYXBwcm92ZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1zLTJcIj48c3ZnIHN0eWxlPVwid2lkdGg6IDIwcHg7XHJcbiAgICBoZWlnaHQ6IDIwcHg7XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMVwiIHZpZXdCb3g9XCIwIDAgMTAgMTFcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB5PVwiMC41XCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgcng9XCI1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRDFGQURGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjEyMjIgMy41NzkxOUw0LjEzODg3IDYuNDU4MzZMMy4zNDcyIDUuNjEyNTNDMy4yMDEzNyA1LjQ3NTAzIDIuOTcyMiA1LjQ2NjY5IDIuODA1NTMgNS41ODMzNkMyLjY0MzAzIDUuNzA0MTkgMi41OTcyIDUuOTE2NjkgMi42OTcyIDYuMDg3NTNMMy42MzQ3IDcuNjEyNTNDMy43MjYzNyA3Ljc1NDE5IDMuODg0NyA3Ljg0MTY5IDQuMDYzODcgNy44NDE2OUM0LjIzNDcgNy44NDE2OSA0LjM5NzIgNy43NTQxOSA0LjQ4ODg3IDcuNjEyNTNDNC42Mzg4NyA3LjQxNjY5IDcuNTAxMzcgNC4wMDQxOSA3LjUwMTM3IDQuMDA0MTlDNy44NzYzNyAzLjYyMDg2IDcuNDIyMiAzLjI4MzM2IDcuMTIyMiAzLjU3NTAzVjMuNTc5MTlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMTJCNzZBXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRBY3Rpb24ob3JpZ2luYWwsICdyZXZpZXcnKT8uYWN0aW9uID09PSAncmVqZWN0ZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1zLTJcIj48c3ZnIHN0eWxlPVwid2lkdGg6IDIwcHg7XHJcbiAgICBoZWlnaHQ6IDIwcHg7XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIxM1wiIHZpZXdCb3g9XCIwIDAgMTMgMTNcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE0MjhfNTk0ODQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNC41Mjk2MSAxLjVIOC42Njk2MUwxMS41OTk2IDQuNDNWOC41N0w4LjY2OTYxIDExLjVINC41Mjk2MUwxLjU5OTYxIDguNTdWNC40M0w0LjUyOTYxIDEuNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkVFNEUyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjA5OTYxIDVMNS4wOTk2MSA4TTUuMDk5NjEgNUw4LjA5OTYxIDhNNC41Mjk2MSAxLjVIOC42Njk2MUwxMS41OTk2IDQuNDNWOC41N0w4LjY2OTYxIDExLjVINC41Mjk2MUwxLjU5OTYxIDguNTdWNC40M0w0LjUyOTYxIDEuNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xNDI4XzU5NDg0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAuNTk5NjA5IDAuNSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjLXZhbHVlIG1zLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudHJ5IFRpbWU6IHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGb3JtYXR0ZWRFbnRyeVRpbWUob3JpZ2luYWw/LmVudHJ5VGltZSkgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTIgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldEFjdGlvbihvcmlnaW5hbCwgJ2FwcHJvdmUnKT8uYWN0aW9uID09PSAnYXBwcm92ZWQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHJ4PVwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNEMUZBREZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQ4Nl85NDA1MSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05LjUgMTdIOEM3LjczNDc4IDE3IDcuNDgwNDMgMTYuODk0NiA3LjI5Mjg5IDE2LjcwNzFDNy4xMDUzNiAxNi41MTk2IDcgMTYuMjY1MiA3IDE2VjEyLjVDNyAxMi4yMzQ4IDcuMTA1MzYgMTEuOTgwNCA3LjI5Mjg5IDExLjc5MjlDNy40ODA0MyAxMS42MDU0IDcuNzM0NzggMTEuNSA4IDExLjVIOS41TTEzIDEwLjVWOC41QzEzIDguMTAyMTggMTIuODQyIDcuNzIwNjQgMTIuNTYwNyA3LjQzOTM0QzEyLjI3OTQgNy4xNTgwNCAxMS44OTc4IDcgMTEuNSA3TDkuNSAxMS41VjE3SDE1LjE0QzE1LjM4MTIgMTcuMDAyNyAxNS42MTUyIDE2LjkxODIgMTUuNzk5IDE2Ljc2MkMxNS45ODI3IDE2LjYwNTggMTYuMTAzOCAxNi4zODg1IDE2LjE0IDE2LjE1TDE2LjgzIDExLjY1QzE2Ljg1MTggMTEuNTA2NyAxNi44NDIxIDExLjM2MDMgMTYuODAxNyAxMS4yMjExQzE2Ljc2MTMgMTEuMDgxOSAxNi42OTExIDEwLjk1MzEgMTYuNTk1OSAxMC44NDM4QzE2LjUwMDggMTAuNzM0NCAxNi4zODMgMTAuNjQ3IDE2LjI1MDggMTAuNTg3NkMxNi4xMTg1IDEwLjUyODMgMTUuOTc1IDEwLjQ5ODQgMTUuODMgMTAuNUgxM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMzk4NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80ODZfOTQwNTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNiA2KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0QWN0aW9uKG9yaWdpbmFsLCAnYXBwcm92ZScpPy5hY3Rpb24gPT09ICdyZWplY3RlZCdcIj48c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgcng9XCIxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0ZFRTRFMlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDg2Xzk0MDkwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE0LjUwMTUgNy4wMDAwNkgxNS44MzY1QzE2LjExOTUgNi45OTUwNSAxNi4zOTQ0IDcuMDk0MTMgMTYuNjA5MiA3LjI3ODQ3QzE2LjgyMzkgNy40NjI4MSAxNi45NjM1IDcuNzE5NTkgMTcuMDAxNSA4LjAwMDA2VjExLjUwMDFDMTYuOTYzNSAxMS43ODA1IDE2LjgyMzkgMTIuMDM3MyAxNi42MDkyIDEyLjIyMTZDMTYuMzk0NCAxMi40MDYgMTYuMTE5NSAxMi41MDUxIDE1LjgzNjUgMTIuNTAwMUgxNC41MDE1TTExLjAwMTUgMTMuNTAwMVYxNS41MDAxQzExLjAwMTUgMTUuODk3OSAxMS4xNTk1IDE2LjI3OTQgMTEuNDQwOCAxNi41NjA3QzExLjcyMjEgMTYuODQyIDEyLjEwMzcgMTcuMDAwMSAxMi41MDE1IDE3LjAwMDFMMTQuNTAxNSAxMi41MDAxVjcuMDAwMDZIOC44NjE0OEM4LjYyMDMyIDYuOTk3MzMgOC4zODYyOSA3LjA4MTg2IDguMjAyNTMgNy4yMzgwNkM4LjAxODc2IDcuMzk0MjYgNy44OTc2NCA3LjYxMTYxIDcuODYxNDggNy44NTAwNkw3LjE3MTQ4IDEyLjM1MDFDNy4xNDk3MyAxMi40OTM0IDcuMTU5MzkgMTIuNjM5NyA3LjE5OTgxIDEyLjc3ODlDNy4yNDAyMyAxMi45MTgxIDcuMzEwNDMgMTMuMDQ2OSA3LjQwNTU1IDEzLjE1NjNDNy41MDA2NyAxMy4yNjU3IDcuNjE4NDQgMTMuMzUzMSA3Ljc1MDY5IDEzLjQxMjRDNy44ODI5NSAxMy40NzE4IDguMDI2NTMgMTMuNTAxNyA4LjE3MTQ4IDEzLjUwMDFIMTEuMDAxNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80ODZfOTQwOTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNiA2KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgcHktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWVudHMtYWNjb3JkaW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFjY29yZGlvbiBIZWFkZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiIChjbGljayk9XCJ0b2dnbGVDb21tZW50c0FjY29yZGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21tZW50cy10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21tZW50cy1jb3VudFwiPnt7IGNvbW1lbnRzPy5sZW5ndGggfX0gQ29tbWVudHM8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjY29yZGlvbi1hcnJvdyBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtjbGFzcy5yb3RhdGVkXT1cImNvbW1lbnRzQWNjb3JkaW9uT3BlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk00IDZMOCAxMEwxMiA2XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBY2NvcmRpb24gQ29udGVudCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2NvcmRpb24tYm9keVwiICpuZ0lmPVwiY29tbWVudHNBY2NvcmRpb25PcGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYyBvZiBjb21tZW50c1wiIGNsYXNzPVwiY29tbWVudC10aHJlYWQgZC1mbGV4IG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBhdmF0YXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjb21tZW50LWF2YXRhciBtZS0zXCIgW3NyY109XCJjLmF2YXRhclwiIGFsdD1cImF2YXRhclwiIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGNvbnRlbnQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGRcIj57eyBjLmVtYWlsIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGMudGltZSB8IGRhdGU6J2hoOm1tOnNzIGEgLSBkZCBNTU0geXl5eScgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gb3B0aW9uYWwgbWFpbiBsaW5lIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0yIG10LTJcIiAqbmdJZj1cImMubWFpblRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjLm1haW5UZXh0IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBNYXJrZWQgYXMg4oCc4oCm4oCdIGxpbmUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTFcIiAqbmdJZj1cImMuc3RhdHVzTGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJrZWQgYXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCIndGV4dC0nICsgYy5zdGF0dXNUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKAnHt7IGMuc3RhdHVzTGFiZWwgfX3igJ1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBub3RlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0yXCIgKm5nSWY9XCJjLm5vdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjLm5vdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGltYWdlIGNhcmRzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMiBmbGV4LXdyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbWcgb2YgYy5pbWFnZXNcIiBjbGFzcz1cInRhbmdvLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhbmdvLWltYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kSW1hZ2VdPVwiJ3VybCgnICsgaW1nLnVybCArICcpJ1wiPjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhbmdvLW1ldGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWFsbFwiPlRhbmdvIElEOiB7eyBpbWcudGFuZ29JZCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaW1nLnN0YXR1cyA9PT0gJ2FwcHJvdmUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdGF0dXMtZG90IHN0YXR1cy1hcHByb3ZlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaW1nLnN0YXR1cyA9PT0gJ3JlamVjdCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN0YXR1cy1kb3Qgc3RhdHVzLXJlamVjdFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsIHRleHQtbXV0ZWRcIj5FbnRyeSB0aW1lOiB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZy5lbnRyeVRpbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSArTiBtb3JlIGNhcmQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImMubW9yZUNvdW50ID4gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFuZ28tY2FyZCBtb3JlLWNhcmQgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt7eyBjLm1vcmVDb3VudCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYXllcnMgbXktMlwiICpuZ0lmPVwiaGFzUmV2b3BzVHlwZSgnaG91c2VLZWVwaW5nJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgbWluLWgtMjVweCBwdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkdXBsaWNhdGUtaGVhZCB0ZXh0LWxnIG15LTNcIj48c3BhbiBjbGFzcz1cIm1lLTJcIj48c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjUxOTk1IDAuNjEzMDY1QzguMzM3MzkgLTAuMjA0MzU1IDkuNjYyNjcgLTAuMjA0MzU1IDEwLjQ4MDEgMC42MTMwNjVMMTcuMzg3IDcuNTE5OTVDMTguMjA0MyA4LjMzNzM5IDE4LjIwNDMgOS42NjI2NyAxNy4zODcgMTAuNDgwMUwxMC40ODAxIDE3LjM4N0M5LjY2MjY3IDE4LjIwNDMgOC4zMzczOSAxOC4yMDQzIDcuNTE5OTUgMTcuMzg3TDUuNTQ2MjYgMTUuNDEzM0wzLjczNzA4IDE3LjIyMjRDMi45MTk2NiAxOC4wMzk5IDEuNTk0MzYgMTguMDM5OSAwLjc3Njk0NCAxNy4yMjI0Qy0wLjA0MDQ3NjcgMTYuNDA1MSAtMC4wNDA0NzY3IDE1LjA3OTcgMC43NzY5NDQgMTQuMjYyNEwyLjU4NjEyIDEyLjQ1MzFMMC42MTMwNjUgMTAuNDgwMUMtMC4yMDQzNTUgOS42NjI2NyAtMC4yMDQzNTUgOC4zMzczOSAwLjYxMzA2NSA3LjUxOTk1TDcuNTE5OTUgMC42MTMwNjVaTTkuNDkzMzYgMS41OTk3OEM5LjIyMDg4IDEuMzI3MzEgOC43NzkwOSAxLjMyNzMxIDguNTA2NjEgMS41OTk3OEwzLjU3Mjg2IDYuNTMzNTdMMTEuNDY2NSAxNC40MjcyTDE2LjQwMDIgOS40OTMzNkMxNi42NzI3IDkuMjIwODggMTYuNjcyNyA4Ljc3OTA5IDE2LjQwMDIgOC41MDY3TDEyLjk0NjUgNS4wNTI4NkwxMS43OTUyIDYuMjA0MDNDMTEuNTIyOCA2LjQ3NjUgMTEuMDgxMSA2LjQ3NjUgMTAuODA4NiA2LjIwNDAzQzEwLjUzNjEgNS45MzE1NSAxMC41MzYxIDUuNDg5NzggMTAuODA4NiA1LjIxNzMxTDExLjk1OTcgNC4wNjYxNEwxMC45NzMyIDMuMDc5NjRMOC4xNzc1NyA1Ljg3NTMzQzcuOTA1MDkgNi4xNDc4IDcuNDYzMjkgNi4xNDc4IDcuMTkwODEgNS44NzUzM0M2LjkxODMzIDUuNjAyODYgNi45MTgzMyA1LjE2MTA5IDcuMTkwODEgNC44ODg2Mkw5Ljk4NjUgMi4wOTI5M0w5LjQ5MzM2IDEuNTk5NzhaTTEwLjQ3OTcgMTUuNDEzOUwyLjU4NjE1IDcuNTIwMjhMMS41OTk3OCA4LjUwNjdDMS4zMjczIDguNzc5MDkgMS4zMjczIDkuMjIwODggMS41OTk3OCA5LjQ5MzM2TDguNTA2NjEgMTYuNDAwMkM4Ljc3OTA5IDE2LjY3MjcgOS4yMjA4OCAxNi42NzI3IDkuNDkzMzYgMTYuNDAwMkwxMC40Nzk3IDE1LjQxMzlaTTMuNTcyNzUgMTMuNDM5OUwxLjc2MzY2IDE1LjI0OUMxLjQ5MTE5IDE1LjUyMTUgMS40OTExOSAxNS45NjMzIDEuNzYzNjYgMTYuMjM1OEMyLjAzNjEzIDE2LjUwODIgMi40Nzc5IDE2LjUwODIgMi43NTAzNyAxNi4yMzU4TDQuNTU5NDYgMTQuNDI2NkwzLjU3Mjc1IDEzLjQzOTlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNDc1NDY3XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+IEhvdXNlIEtlZXBpbmdcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0NoZWNrYm94RW5hYmxlXCIgY2xhc3M9XCJtcy0zIG15LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwic2VsZWN0QWxsQnlUeXBlLmhvdXNlS2VlcGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0QWxsKCdob3VzZUtlZXBpbmcnLCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlNlbGVjdCBBbGw8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG1hcHBpbmcgb2Ygc291cmNlPy5tYXBwaW5nSW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEJvZHkgU2VjdGlvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1hcHBpbmc/LnR5cGUgPT09dmlld01vZGVcIiBjbGFzcz1cImNhcmQtYm9keSBiZy13aGl0ZSBsYXllcnMgcC01IG0tM1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcmlnaW5hbCBvZiBtYXBwaW5nPy5yZXZpc2VkRGV0YWlsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvcmlnaW5hbD8ucmV2b3BzVHlwZSA9PT0naG91c2VLZWVwaW5nJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1tZC0zIG1iLTMgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYi0zIGgtMTAwIHJvdW5kZWQtMyBwb3NpdGlvbi1yZWxhdGl2ZVwiIFtuZ0NsYXNzXT1cIntcclxuICAgICdsYXllci1hcHByb3ZlZCc6IGlzQXBwcm92ZWQob3JpZ2luYWwpLFxyXG4gICAgJ2xheWVyLXJlamVjdGVkJzogaXNSZWplY3RlZChvcmlnaW5hbCksXHJcbiAgICAnaW1nLWJvcmRlciBib3JkZXIgYm9yZGVyLTEnOiAhaXNBcHByb3ZlZChvcmlnaW5hbCkgJiYgIWlzUmVqZWN0ZWQob3JpZ2luYWwpfVwiPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUb3AtcmlnaHQgQ2hlY2tib3ggLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ2hlY2tib3hFbmFibGVcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIiFpc0xvY2tlZEJ5UmV2aWV3ZXIob3JpZ2luYWwpXCIgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgYWJzb2x1dGUgZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZEJ5VHlwZS5ob3VzZUtlZXBpbmcuaW5jbHVkZXMob3JpZ2luYWw/LnRlbXBJZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkltYWdlQ2hlY2tib3hDaGFuZ2UoJ2hvdXNlS2VlcGluZycsIG9yaWdpbmFsLnRlbXBJZClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGFic29sdXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNMb2NrZWRCeVJldmlld2VyKG9yaWdpbmFsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXRDaGVja2JveCgnaG91c2VLZWVwaW5nJywgb3JpZ2luYWwpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTlcIiB2aWV3Qm94PVwiMCAwIDE5IDE5XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWx0ZXI9XCJ1cmwoI2ZpbHRlcjBfZF8yMDIzXzEzNzE4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMS4xMTEzM1wiIHk9XCIwLjU1NTY2NFwiIHdpZHRoPVwiMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZcIiByeD1cIjJcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMS4zODkxMVwiIHk9XCIwLjgzMzQ0MlwiIHdpZHRoPVwiMTUuNDQ0NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNS40NDQ0XCIgcng9XCIxLjcyMjIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEMEQ1RERcIiBzdHJva2Utd2lkdGg9XCIwLjU1NTU1NlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNS44NzEwOSA4LjU1NTY2SDEyLjM1MjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjAuOTI3Nzc4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF8yMDIzXzEzNzE4XCIgeD1cIjAuMDAwMjE3MDhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeT1cIjAuMDAwMTA4NTRcIiB3aWR0aD1cIjE4LjIyMjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTguMjIyMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJVbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz1cInNSR0JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggaW49XCJTb3VyY2VBbHBoYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cImhhcmRBbHBoYVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgZHk9XCIwLjU1NTU1NlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPVwiMC41NTU1NTZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwLjA2Mjc0NTEgMCAwIDAgMCAwLjA5NDExNzYgMCAwIDAgMCAwLjE1Njg2MyAwIDAgMCAwLjA1IDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4yPVwiQmFja2dyb3VuZEltYWdlRml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMjAyM18xMzcxOFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW49XCJTb3VyY2VHcmFwaGljXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbjI9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMjAyM18xMzcxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwic2hhcGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlVXJsICsgb3JpZ2luYWw/LmZpbGVQYXRoXCIgYWx0PVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LTEwMCByb3VuZGVkIGJvcmRlclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdyBteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzYy10aXRsZSBtcy0yIG15LTJcIj5UYW5nbyBJRDoge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsLnRlbXBJZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRBY3Rpb24ob3JpZ2luYWwsICdyZXZpZXcnKT8uYWN0aW9uID09PSAnYXBwcm92ZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1zLTJcIj48c3ZnIHN0eWxlPVwid2lkdGg6IDIwcHg7XHJcbiAgICBoZWlnaHQ6IDIwcHg7XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMVwiIHZpZXdCb3g9XCIwIDAgMTAgMTFcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB5PVwiMC41XCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgcng9XCI1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRDFGQURGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjEyMjIgMy41NzkxOUw0LjEzODg3IDYuNDU4MzZMMy4zNDcyIDUuNjEyNTNDMy4yMDEzNyA1LjQ3NTAzIDIuOTcyMiA1LjQ2NjY5IDIuODA1NTMgNS41ODMzNkMyLjY0MzAzIDUuNzA0MTkgMi41OTcyIDUuOTE2NjkgMi42OTcyIDYuMDg3NTNMMy42MzQ3IDcuNjEyNTNDMy43MjYzNyA3Ljc1NDE5IDMuODg0NyA3Ljg0MTY5IDQuMDYzODcgNy44NDE2OUM0LjIzNDcgNy44NDE2OSA0LjM5NzIgNy43NTQxOSA0LjQ4ODg3IDcuNjEyNTNDNC42Mzg4NyA3LjQxNjY5IDcuNTAxMzcgNC4wMDQxOSA3LjUwMTM3IDQuMDA0MTlDNy44NzYzNyAzLjYyMDg2IDcuNDIyMiAzLjI4MzM2IDcuMTIyMiAzLjU3NTAzVjMuNTc5MTlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMTJCNzZBXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRBY3Rpb24ob3JpZ2luYWwsICdyZXZpZXcnKT8uYWN0aW9uID09PSAncmVqZWN0ZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1zLTJcIj48c3ZnIHN0eWxlPVwid2lkdGg6IDIwcHg7XHJcbiAgICBoZWlnaHQ6IDIwcHg7XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIxM1wiIHZpZXdCb3g9XCIwIDAgMTMgMTNcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE0MjhfNTk0ODQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNC41Mjk2MSAxLjVIOC42Njk2MUwxMS41OTk2IDQuNDNWOC41N0w4LjY2OTYxIDExLjVINC41Mjk2MUwxLjU5OTYxIDguNTdWNC40M0w0LjUyOTYxIDEuNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkVFNEUyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjA5OTYxIDVMNS4wOTk2MSA4TTUuMDk5NjEgNUw4LjA5OTYxIDhNNC41Mjk2MSAxLjVIOC42Njk2MUwxMS41OTk2IDQuNDNWOC41N0w4LjY2OTYxIDExLjVINC41Mjk2MUwxLjU5OTYxIDguNTdWNC40M0w0LjUyOTYxIDEuNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xNDI4XzU5NDg0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAuNTk5NjA5IDAuNSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjLXZhbHVlIG1zLTJcIj5FbnRyeSBUaW1lOiB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9ybWF0dGVkRW50cnlUaW1lKG9yaWdpbmFsPy5lbnRyeVRpbWUpIH19PC9kaXY+XHJcbjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTIgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldEFjdGlvbihvcmlnaW5hbCwgJ2FwcHJvdmUnKT8uYWN0aW9uID09PSAnYXBwcm92ZWQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHJ4PVwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNEMUZBREZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQ4Nl85NDA1MSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05LjUgMTdIOEM3LjczNDc4IDE3IDcuNDgwNDMgMTYuODk0NiA3LjI5Mjg5IDE2LjcwNzFDNy4xMDUzNiAxNi41MTk2IDcgMTYuMjY1MiA3IDE2VjEyLjVDNyAxMi4yMzQ4IDcuMTA1MzYgMTEuOTgwNCA3LjI5Mjg5IDExLjc5MjlDNy40ODA0MyAxMS42MDU0IDcuNzM0NzggMTEuNSA4IDExLjVIOS41TTEzIDEwLjVWOC41QzEzIDguMTAyMTggMTIuODQyIDcuNzIwNjQgMTIuNTYwNyA3LjQzOTM0QzEyLjI3OTQgNy4xNTgwNCAxMS44OTc4IDcgMTEuNSA3TDkuNSAxMS41VjE3SDE1LjE0QzE1LjM4MTIgMTcuMDAyNyAxNS42MTUyIDE2LjkxODIgMTUuNzk5IDE2Ljc2MkMxNS45ODI3IDE2LjYwNTggMTYuMTAzOCAxNi4zODg1IDE2LjE0IDE2LjE1TDE2LjgzIDExLjY1QzE2Ljg1MTggMTEuNTA2NyAxNi44NDIxIDExLjM2MDMgMTYuODAxNyAxMS4yMjExQzE2Ljc2MTMgMTEuMDgxOSAxNi42OTExIDEwLjk1MzEgMTYuNTk1OSAxMC44NDM4QzE2LjUwMDggMTAuNzM0NCAxNi4zODMgMTAuNjQ3IDE2LjI1MDggMTAuNTg3NkMxNi4xMTg1IDEwLjUyODMgMTUuOTc1IDEwLjQ5ODQgMTUuODMgMTAuNUgxM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMzk4NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80ODZfOTQwNTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNiA2KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0QWN0aW9uKG9yaWdpbmFsLCAnYXBwcm92ZScpPy5hY3Rpb24gPT09ICdyZWplY3RlZCdcIj48c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgcng9XCIxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0ZFRTRFMlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDg2Xzk0MDkwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE0LjUwMTUgNy4wMDAwNkgxNS44MzY1QzE2LjExOTUgNi45OTUwNSAxNi4zOTQ0IDcuMDk0MTMgMTYuNjA5MiA3LjI3ODQ3QzE2LjgyMzkgNy40NjI4MSAxNi45NjM1IDcuNzE5NTkgMTcuMDAxNSA4LjAwMDA2VjExLjUwMDFDMTYuOTYzNSAxMS43ODA1IDE2LjgyMzkgMTIuMDM3MyAxNi42MDkyIDEyLjIyMTZDMTYuMzk0NCAxMi40MDYgMTYuMTE5NSAxMi41MDUxIDE1LjgzNjUgMTIuNTAwMUgxNC41MDE1TTExLjAwMTUgMTMuNTAwMVYxNS41MDAxQzExLjAwMTUgMTUuODk3OSAxMS4xNTk1IDE2LjI3OTQgMTEuNDQwOCAxNi41NjA3QzExLjcyMjEgMTYuODQyIDEyLjEwMzcgMTcuMDAwMSAxMi41MDE1IDE3LjAwMDFMMTQuNTAxNSAxMi41MDAxVjcuMDAwMDZIOC44NjE0OEM4LjYyMDMyIDYuOTk3MzMgOC4zODYyOSA3LjA4MTg2IDguMjAyNTMgNy4yMzgwNkM4LjAxODc2IDcuMzk0MjYgNy44OTc2NCA3LjYxMTYxIDcuODYxNDggNy44NTAwNkw3LjE3MTQ4IDEyLjM1MDFDNy4xNDk3MyAxMi40OTM0IDcuMTU5MzkgMTIuNjM5NyA3LjE5OTgxIDEyLjc3ODlDNy4yNDAyMyAxMi45MTgxIDcuMzEwNDMgMTMuMDQ2OSA3LjQwNTU1IDEzLjE1NjNDNy41MDA2NyAxMy4yNjU3IDcuNjE4NDQgMTMuMzUzMSA3Ljc1MDY5IDEzLjQxMjRDNy44ODI5NSAxMy40NzE4IDguMDI2NTMgMTMuNTAxNyA4LjE3MTQ4IDEzLjUwMDFIMTEuMDAxNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80ODZfOTQwOTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNiA2KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgcHktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWVudHMtYWNjb3JkaW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFjY29yZGlvbiBIZWFkZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiIChjbGljayk9XCJ0b2dnbGVDb21tZW50c0FjY29yZGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21tZW50cy10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21tZW50cy1jb3VudFwiPnt7IGNvbW1lbnRzPy5sZW5ndGggfX0gQ29tbWVudHM8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjY29yZGlvbi1hcnJvdyBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtjbGFzcy5yb3RhdGVkXT1cImNvbW1lbnRzQWNjb3JkaW9uT3BlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk00IDZMOCAxMEwxMiA2XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBY2NvcmRpb24gQ29udGVudCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2NvcmRpb24tYm9keVwiICpuZ0lmPVwiY29tbWVudHNBY2NvcmRpb25PcGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYyBvZiBjb21tZW50c1wiIGNsYXNzPVwiY29tbWVudC10aHJlYWQgZC1mbGV4IG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBhdmF0YXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjb21tZW50LWF2YXRhciBtZS0zXCIgW3NyY109XCJjLmF2YXRhclwiIGFsdD1cImF2YXRhclwiIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGNvbnRlbnQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGRcIj57eyBjLmVtYWlsIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGMudGltZSB8IGRhdGU6J2hoOm1tOnNzIGEgLSBkZCBNTU0geXl5eScgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gb3B0aW9uYWwgbWFpbiBsaW5lIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0yIG10LTJcIiAqbmdJZj1cImMubWFpblRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjLm1haW5UZXh0IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBNYXJrZWQgYXMg4oCc4oCm4oCdIGxpbmUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTFcIiAqbmdJZj1cImMuc3RhdHVzTGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJrZWQgYXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCIndGV4dC0nICsgYy5zdGF0dXNUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKAnHt7IGMuc3RhdHVzTGFiZWwgfX3igJ1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBub3RlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0yXCIgKm5nSWY9XCJjLm5vdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjLm5vdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGltYWdlIGNhcmRzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMiBmbGV4LXdyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbWcgb2YgYy5pbWFnZXNcIiBjbGFzcz1cInRhbmdvLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhbmdvLWltYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kSW1hZ2VdPVwiJ3VybCgnICsgaW1nLnVybCArICcpJ1wiPjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhbmdvLW1ldGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWFsbFwiPlRhbmdvIElEOiB7eyBpbWcudGFuZ29JZCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaW1nLnN0YXR1cyA9PT0gJ2FwcHJvdmUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdGF0dXMtZG90IHN0YXR1cy1hcHByb3ZlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaW1nLnN0YXR1cyA9PT0gJ3JlamVjdCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN0YXR1cy1kb3Qgc3RhdHVzLXJlamVjdFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsIHRleHQtbXV0ZWRcIj5FbnRyeSB0aW1lOiB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZy5lbnRyeVRpbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSArTiBtb3JlIGNhcmQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImMubW9yZUNvdW50ID4gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFuZ28tY2FyZCBtb3JlLWNhcmQgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt7eyBjLm1vcmVDb3VudCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYXllcnMgbXktMlwiICpuZ0lmPVwiaGFzUmV2b3BzVHlwZSgnanVuaycpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIG1pbi1oLTI1cHggcHQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHVwbGljYXRlLWhlYWQgdGV4dC1sZyBteS0zXCI+PHNwYW4gY2xhc3M9XCJtZS0yXCI+PHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy41MTk5NSAwLjYxMzA2NUM4LjMzNzM5IC0wLjIwNDM1NSA5LjY2MjY3IC0wLjIwNDM1NSAxMC40ODAxIDAuNjEzMDY1TDE3LjM4NyA3LjUxOTk1QzE4LjIwNDMgOC4zMzczOSAxOC4yMDQzIDkuNjYyNjcgMTcuMzg3IDEwLjQ4MDFMMTAuNDgwMSAxNy4zODdDOS42NjI2NyAxOC4yMDQzIDguMzM3MzkgMTguMjA0MyA3LjUxOTk1IDE3LjM4N0w1LjU0NjI2IDE1LjQxMzNMMy43MzcwOCAxNy4yMjI0QzIuOTE5NjYgMTguMDM5OSAxLjU5NDM2IDE4LjAzOTkgMC43NzY5NDQgMTcuMjIyNEMtMC4wNDA0NzY3IDE2LjQwNTEgLTAuMDQwNDc2NyAxNS4wNzk3IDAuNzc2OTQ0IDE0LjI2MjRMMi41ODYxMiAxMi40NTMxTDAuNjEzMDY1IDEwLjQ4MDFDLTAuMjA0MzU1IDkuNjYyNjcgLTAuMjA0MzU1IDguMzM3MzkgMC42MTMwNjUgNy41MTk5NUw3LjUxOTk1IDAuNjEzMDY1Wk05LjQ5MzM2IDEuNTk5NzhDOS4yMjA4OCAxLjMyNzMxIDguNzc5MDkgMS4zMjczMSA4LjUwNjYxIDEuNTk5NzhMMy41NzI4NiA2LjUzMzU3TDExLjQ2NjUgMTQuNDI3MkwxNi40MDAyIDkuNDkzMzZDMTYuNjcyNyA5LjIyMDg4IDE2LjY3MjcgOC43NzkwOSAxNi40MDAyIDguNTA2N0wxMi45NDY1IDUuMDUyODZMMTEuNzk1MiA2LjIwNDAzQzExLjUyMjggNi40NzY1IDExLjA4MTEgNi40NzY1IDEwLjgwODYgNi4yMDQwM0MxMC41MzYxIDUuOTMxNTUgMTAuNTM2MSA1LjQ4OTc4IDEwLjgwODYgNS4yMTczMUwxMS45NTk3IDQuMDY2MTRMMTAuOTczMiAzLjA3OTY0TDguMTc3NTcgNS44NzUzM0M3LjkwNTA5IDYuMTQ3OCA3LjQ2MzI5IDYuMTQ3OCA3LjE5MDgxIDUuODc1MzNDNi45MTgzMyA1LjYwMjg2IDYuOTE4MzMgNS4xNjEwOSA3LjE5MDgxIDQuODg4NjJMOS45ODY1IDIuMDkyOTNMOS40OTMzNiAxLjU5OTc4Wk0xMC40Nzk3IDE1LjQxMzlMMi41ODYxNSA3LjUyMDI4TDEuNTk5NzggOC41MDY3QzEuMzI3MyA4Ljc3OTA5IDEuMzI3MyA5LjIyMDg4IDEuNTk5NzggOS40OTMzNkw4LjUwNjYxIDE2LjQwMDJDOC43NzkwOSAxNi42NzI3IDkuMjIwODggMTYuNjcyNyA5LjQ5MzM2IDE2LjQwMDJMMTAuNDc5NyAxNS40MTM5Wk0zLjU3Mjc1IDEzLjQzOTlMMS43NjM2NiAxNS4yNDlDMS40OTExOSAxNS41MjE1IDEuNDkxMTkgMTUuOTYzMyAxLjc2MzY2IDE2LjIzNThDMi4wMzYxMyAxNi41MDgyIDIuNDc3OSAxNi41MDgyIDIuNzUwMzcgMTYuMjM1OEw0LjU1OTQ2IDE0LjQyNjZMMy41NzI3NSAxMy40Mzk5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzQ3NTQ2N1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPiBKdW5rXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDaGVja2JveEVuYWJsZVwiIGNsYXNzPVwibXMtMyBteS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cInNlbGVjdEFsbEJ5VHlwZS5qdW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3RBbGwoJ2p1bmsnLCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlNlbGVjdCBBbGw8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG1hcHBpbmcgb2Ygc291cmNlPy5tYXBwaW5nSW5mb1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBPbmUgY2FyZCBmb3IgYWxsIGp1bmsgaW1hZ2VzIGluIHRoaXMgbWFwcGluZyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1hcHBpbmc/LnR5cGUgPT09dmlld01vZGVcIiBjbGFzcz1cImNhcmQtYm9keSBiZy13aGl0ZSBsYXllcnMgcC01IG0tM1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExvb3AgdGhyb3VnaCBhbGwgaXRlbXMgaW4gcmV2aXNlZERldGFpbCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcmlnaW5hbCBvZiBtYXBwaW5nPy5yZXZpc2VkRGV0YWlsXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNob3cgb25seSBqdW5rIGl0ZW1zIGFzIGNvbHVtbnMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvcmlnaW5hbD8ucmV2b3BzVHlwZSA9PT0gJ2p1bmsnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLW1kLTMgbWItMyBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYi0zIGgtMTAwIHJvdW5kZWQtMyBwb3NpdGlvbi1yZWxhdGl2ZVwiIFtuZ0NsYXNzXT1cIntcclxuICAgICdsYXllci1hcHByb3ZlZCc6IGlzQXBwcm92ZWQob3JpZ2luYWwpLFxyXG4gICAgJ2xheWVyLXJlamVjdGVkJzogaXNSZWplY3RlZChvcmlnaW5hbCksXHJcbiAgICAnaW1nLWJvcmRlciBib3JkZXIgYm9yZGVyLTEnOiAhaXNBcHByb3ZlZChvcmlnaW5hbCkgJiYgIWlzUmVqZWN0ZWQob3JpZ2luYWwpfVwiPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUb3AtcmlnaHQgQ2hlY2tib3ggLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ2hlY2tib3hFbmFibGVcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIiFpc0xvY2tlZEJ5UmV2aWV3ZXIob3JpZ2luYWwpXCIgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgYWJzb2x1dGUgZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZEJ5VHlwZS5qdW5rLmluY2x1ZGVzKG9yaWdpbmFsPy50ZW1wSWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25JbWFnZUNoZWNrYm94Q2hhbmdlKCdqdW5rJywgb3JpZ2luYWwudGVtcElkKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgYWJzb2x1dGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0xvY2tlZEJ5UmV2aWV3ZXIob3JpZ2luYWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXNldENoZWNrYm94KCdqdW5rJywgb3JpZ2luYWwpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTlcIiB2aWV3Qm94PVwiMCAwIDE5IDE5XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWx0ZXI9XCJ1cmwoI2ZpbHRlcjBfZF8yMDIzXzEzNzE4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMS4xMTEzM1wiIHk9XCIwLjU1NTY2NFwiIHdpZHRoPVwiMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZcIiByeD1cIjJcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMS4zODkxMVwiIHk9XCIwLjgzMzQ0MlwiIHdpZHRoPVwiMTUuNDQ0NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNS40NDQ0XCIgcng9XCIxLjcyMjIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEMEQ1RERcIiBzdHJva2Utd2lkdGg9XCIwLjU1NTU1NlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNS44NzEwOSA4LjU1NTY2SDEyLjM1MjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjAuOTI3Nzc4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF8yMDIzXzEzNzE4XCIgeD1cIjAuMDAwMjE3MDhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeT1cIjAuMDAwMTA4NTRcIiB3aWR0aD1cIjE4LjIyMjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTguMjIyMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJVbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz1cInNSR0JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggaW49XCJTb3VyY2VBbHBoYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cImhhcmRBbHBoYVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgZHk9XCIwLjU1NTU1NlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPVwiMC41NTU1NTZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwLjA2Mjc0NTEgMCAwIDAgMCAwLjA5NDExNzYgMCAwIDAgMCAwLjE1Njg2MyAwIDAgMCAwLjA1IDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4yPVwiQmFja2dyb3VuZEltYWdlRml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMjAyM18xMzcxOFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW49XCJTb3VyY2VHcmFwaGljXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbjI9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMjAyM18xMzcxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwic2hhcGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VVcmwgKyBvcmlnaW5hbD8uZmlsZVBhdGhcIiBhbHQ9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctMTAwIHJvdW5kZWQgYm9yZGVyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3cgbXktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzYy10aXRsZSBtcy0yIG15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhbmdvIElEOiB7eyBvcmlnaW5hbC50ZW1wSWQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRBY3Rpb24ob3JpZ2luYWwsICdyZXZpZXcnKT8uYWN0aW9uID09PSAnYXBwcm92ZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1zLTJcIj48c3ZnIHN0eWxlPVwid2lkdGg6IDIwcHg7XHJcbiAgICBoZWlnaHQ6IDIwcHg7XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMVwiIHZpZXdCb3g9XCIwIDAgMTAgMTFcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB5PVwiMC41XCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgcng9XCI1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRDFGQURGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjEyMjIgMy41NzkxOUw0LjEzODg3IDYuNDU4MzZMMy4zNDcyIDUuNjEyNTNDMy4yMDEzNyA1LjQ3NTAzIDIuOTcyMiA1LjQ2NjY5IDIuODA1NTMgNS41ODMzNkMyLjY0MzAzIDUuNzA0MTkgMi41OTcyIDUuOTE2NjkgMi42OTcyIDYuMDg3NTNMMy42MzQ3IDcuNjEyNTNDMy43MjYzNyA3Ljc1NDE5IDMuODg0NyA3Ljg0MTY5IDQuMDYzODcgNy44NDE2OUM0LjIzNDcgNy44NDE2OSA0LjM5NzIgNy43NTQxOSA0LjQ4ODg3IDcuNjEyNTNDNC42Mzg4NyA3LjQxNjY5IDcuNTAxMzcgNC4wMDQxOSA3LjUwMTM3IDQuMDA0MTlDNy44NzYzNyAzLjYyMDg2IDcuNDIyMiAzLjI4MzM2IDcuMTIyMiAzLjU3NTAzVjMuNTc5MTlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMTJCNzZBXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2V0QWN0aW9uKG9yaWdpbmFsLCAncmV2aWV3Jyk/LmFjdGlvbiA9PT0gJ3JlamVjdGVkJ1xyXG4gIFwiIGNsYXNzPVwibXMtMlwiPjxzdmcgc3R5bGU9XCJ3aWR0aDogMjBweDtcclxuICAgIGhlaWdodDogMjBweDtcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjEzXCIgdmlld0JveD1cIjAgMCAxMyAxM1wiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTQyOF81OTQ4NClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00LjUyOTYxIDEuNUg4LjY2OTYxTDExLjU5OTYgNC40M1Y4LjU3TDguNjY5NjEgMTEuNUg0LjUyOTYxTDEuNTk5NjEgOC41N1Y0LjQzTDQuNTI5NjEgMS41WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGRUU0RTJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDk5NjEgNUw1LjA5OTYxIDhNNS4wOTk2MSA1TDguMDk5NjEgOE00LjUyOTYxIDEuNUg4LjY2OTYxTDExLjU5OTYgNC40M1Y4LjU3TDguNjY5NjEgMTEuNUg0LjUyOTYxTDEuNTk5NjEgOC41N1Y0LjQzTDQuNTI5NjEgMS41WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0Q5MkQyMFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzE0MjhfNTk0ODRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC41OTk2MDkgMC41KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjLXZhbHVlIG1zLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudHJ5IFRpbWU6IHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGb3JtYXR0ZWRFbnRyeVRpbWUob3JpZ2luYWw/LmVudHJ5VGltZSkgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRBY3Rpb24ob3JpZ2luYWwsICdhcHByb3ZlJyk/LmFjdGlvbiA9PT0gJ2FwcHJvdmVkJ1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjM3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMzdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgcng9XCIxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0QxRkFERlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDg2Xzk0MDUxKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkuNSAxN0g4QzcuNzM0NzggMTcgNy40ODA0MyAxNi44OTQ2IDcuMjkyODkgMTYuNzA3MUM3LjEwNTM2IDE2LjUxOTYgNyAxNi4yNjUyIDcgMTZWMTIuNUM3IDEyLjIzNDggNy4xMDUzNiAxMS45ODA0IDcuMjkyODkgMTEuNzkyOUM3LjQ4MDQzIDExLjYwNTQgNy43MzQ3OCAxMS41IDggMTEuNUg5LjVNMTMgMTAuNVY4LjVDMTMgOC4xMDIxOCAxMi44NDIgNy43MjA2NCAxMi41NjA3IDcuNDM5MzRDMTIuMjc5NCA3LjE1ODA0IDExLjg5NzggNyAxMS41IDdMOS41IDExLjVWMTdIMTUuMTRDMTUuMzgxMiAxNy4wMDI3IDE1LjYxNTIgMTYuOTE4MiAxNS43OTkgMTYuNzYyQzE1Ljk4MjcgMTYuNjA1OCAxNi4xMDM4IDE2LjM4ODUgMTYuMTQgMTYuMTVMMTYuODMgMTEuNjVDMTYuODUxOCAxMS41MDY3IDE2Ljg0MjEgMTEuMzYwMyAxNi44MDE3IDExLjIyMTFDMTYuNzYxMyAxMS4wODE5IDE2LjY5MTEgMTAuOTUzMSAxNi41OTU5IDEwLjg0MzhDMTYuNTAwOCAxMC43MzQ0IDE2LjM4MyAxMC42NDcgMTYuMjUwOCAxMC41ODc2QzE2LjExODUgMTAuNTI4MyAxNS45NzUgMTAuNDk4NCAxNS44MyAxMC41SDEzWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAzOTg1NVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQ4Nl85NDA1MVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg2IDYpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0QWN0aW9uKG9yaWdpbmFsLCAnYXBwcm92ZScpPy5hY3Rpb24gPT09ICdyZWplY3RlZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIzN1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjM3XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHJ4PVwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGRUU0RTJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQ4Nl85NDA5MClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNC41MDE1IDcuMDAwMDZIMTUuODM2NUMxNi4xMTk1IDYuOTk1MDUgMTYuMzk0NCA3LjA5NDEzIDE2LjYwOTIgNy4yNzg0N0MxNi44MjM5IDcuNDYyODEgMTYuOTYzNSA3LjcxOTU5IDE3LjAwMTUgOC4wMDAwNlYxMS41MDAxQzE2Ljk2MzUgMTEuNzgwNSAxNi44MjM5IDEyLjAzNzMgMTYuNjA5MiAxMi4yMjE2QzE2LjM5NDQgMTIuNDA2IDE2LjExOTUgMTIuNTA1MSAxNS44MzY1IDEyLjUwMDFIMTQuNTAxNU0xMS4wMDE1IDEzLjUwMDFWMTUuNTAwMUMxMS4wMDE1IDE1Ljg5NzkgMTEuMTU5NSAxNi4yNzk0IDExLjQ0MDggMTYuNTYwN0MxMS43MjIxIDE2Ljg0MiAxMi4xMDM3IDE3LjAwMDEgMTIuNTAxNSAxNy4wMDAxTDE0LjUwMTUgMTIuNTAwMVY3LjAwMDA2SDguODYxNDhDOC42MjAzMiA2Ljk5NzMzIDguMzg2MjkgNy4wODE4NiA4LjIwMjUzIDcuMjM4MDZDOC4wMTg3NiA3LjM5NDI2IDcuODk3NjQgNy42MTE2MSA3Ljg2MTQ4IDcuODUwMDZMNy4xNzE0OCAxMi4zNTAxQzcuMTQ5NzMgMTIuNDkzNCA3LjE1OTM5IDEyLjYzOTcgNy4xOTk4MSAxMi43Nzg5QzcuMjQwMjMgMTIuOTE4MSA3LjMxMDQzIDEzLjA0NjkgNy40MDU1NSAxMy4xNTYzQzcuNTAwNjcgMTMuMjY1NyA3LjYxODQ0IDEzLjM1MzEgNy43NTA2OSAxMy40MTI0QzcuODgyOTUgMTMuNDcxOCA4LjAyNjUzIDEzLjUwMTcgOC4xNzE0OCAxMy41MDAxSDExLjAwMTVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRDkyRDIwXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDg2Xzk0MDkwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDYgNilcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBweS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21tZW50cy1hY2NvcmRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWNjb3JkaW9uIEhlYWRlciAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2NvcmRpb24taGVhZGVyXCIgKGNsaWNrKT1cInRvZ2dsZUNvbW1lbnRzQWNjb3JkaW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbW1lbnRzLXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbW1lbnRzLWNvdW50XCI+e3sgY29tbWVudHM/Lmxlbmd0aCB9fSBDb21tZW50czwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWFycm93IG1zLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW2NsYXNzLnJvdGF0ZWRdPVwiY29tbWVudHNBY2NvcmRpb25PcGVuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTQgNkw4IDEwTDEyIDZcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFjY29yZGlvbiBDb250ZW50IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjY29yZGlvbi1ib2R5XCIgKm5nSWY9XCJjb21tZW50c0FjY29yZGlvbk9wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjIG9mIGNvbW1lbnRzXCIgY2xhc3M9XCJjb21tZW50LXRocmVhZCBkLWZsZXggbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGF2YXRhciAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImNvbW1lbnQtYXZhdGFyIG1lLTNcIiBbc3JjXT1cImMuYXZhdGFyXCIgYWx0PVwiYXZhdGFyXCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gY29udGVudCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1zZW1pYm9sZFwiPnt7IGMuZW1haWwgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYy50aW1lIHwgZGF0ZTonaGg6bW06c3MgYSAtIGRkIE1NTSB5eXl5JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBvcHRpb25hbCBtYWluIGxpbmUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTIgbXQtMlwiICpuZ0lmPVwiYy5tYWluVGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGMubWFpblRleHQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE1hcmtlZCBhcyDigJzigKbigJ0gbGluZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiICpuZ0lmPVwiYy5zdGF0dXNMYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtlZCBhc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cIid0ZXh0LScgKyBjLnN0YXR1c1R5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oCce3sgYy5zdGF0dXNMYWJlbCB9feKAnVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIG5vdGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTJcIiAqbmdJZj1cImMubm90ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGMubm90ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gaW1hZ2UgY2FyZHMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yIGZsZXgtd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGltZyBvZiBjLmltYWdlc1wiIGNsYXNzPVwidGFuZ28tY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFuZ28taW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRJbWFnZV09XCIndXJsKCcgKyBpbWcudXJsICsgJyknXCI+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFuZ28tbWV0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsXCI+VGFuZ28gSUQ6IHt7IGltZy50YW5nb0lkIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpbWcuc3RhdHVzID09PSAnYXBwcm92ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN0YXR1cy1kb3Qgc3RhdHVzLWFwcHJvdmVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpbWcuc3RhdHVzID09PSAncmVqZWN0J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3RhdHVzLWRvdCBzdGF0dXMtcmVqZWN0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic21hbGwgdGV4dC1tdXRlZFwiPkVudHJ5IHRpbWU6IHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nLmVudHJ5VGltZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tICtOIG1vcmUgY2FyZCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYy5tb3JlQ291bnQgPiAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YW5nby1jYXJkIG1vcmUtY2FyZCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3t7IGMubW9yZUNvdW50IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJzb3VyY2U/LmhvdXNlS2VlcGluZz8ubGVuZ3RoXCIgY2xhc3M9XCJteS03IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCIhaG91c2VLZWVwaW5nQUNDb3VudFwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIG1lLTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicG9wdXBPcGVuKCdyZWplY3RlZCcsJ2hvdXNlS2VlcGluZycpXCI+UmVqZWN0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIWhvdXNlS2VlcGluZ0FDQ291bnRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtcy0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInBvcHVwT3BlbignYXBwcm92ZWQnLCdob3VzZUtlZXBpbmcnKVwiPkFwcHJvdmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvc2VjdGlvbj5cclxuXHJcblxyXG48bmctdGVtcGxhdGUgI3pvb21Qb3B1cCBsZXQtbW9kZWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwicC00IG0tNFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgYm9yZGVyLTAgcC0wIHctMTAwIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLXN0YXJ0XCI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEhlYWRpbmcgLS0+XHJcbiAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgIHt7IHBvcHVwVHlwZSA9PT0gJ2FwcHJvdmVkJyA/ICdBcHByb3ZlJyA6ICdSZWplY3QnIH19IFNlbGVjdGVkIEltYWdlc1xyXG4gICAgICAgICAgICA8L2g1PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBEZXNjcmlwdGlvbiAtLT5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0zIHRlc3QtYXBwdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgIFlvdSdyZSBhYm91dCB0byB7eyBwb3B1cFR5cGUgPT09ICdhcHByb3ZlZCcgPyAnQXBwcm92ZScgOiAnUmVqZWN0JyB9fSB7eyB0aGlzLm92ZXJhbGxTZWxlY3RlZElkcz8ubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICB8fCAnLS0nIH19IDxzcGFuIGNsYXNzPVwiZnctYm9sZFwiPnt7IHNlbGVjdGVkQ2F0ZWdvcmllc0xhYmVsIHwgdGl0bGVjYXNlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICA8IS0tIENvdW50IEJveCAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1iLTJcIj5SZW1hcmtzIChPcHRpb25hbCk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcm93cz1cIjNcIiBbKG5nTW9kZWwpXT1cInJlbWFya3NcIj48L3RleHRhcmVhPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgbWUtMlwiIChjbGljayk9XCJjYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJzdWJtaXRWYWx1ZShwb3B1cFR5cGUsIHBvcHVwdmFsdWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgcG9wdXBUeXBlID09PSAnYXBwcm92ZWQnID8gJ0FwcHJvdmUnIDogJ1JlamVjdCcgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY2xvc2VQb3B1cCBsZXQtbW9kZWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwicC00IG0tNFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgYm9yZGVyLTAgcC0wIHctMTAwIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLXN0YXJ0XCI+XHJcbiAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgIENsb3NlIHRpY2tldFxyXG4gICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTMgdGVzdC1hcHB2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgWW91IGFyZSBhYm91dCB0byBjbG9zZSB0aGUgdGlja2V0LCBBcmUgeW91IHN1cmUgd2FudCB0byBjb250aW51ZT9cclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgbWUtMlwiIChjbGljayk9XCJjb25maXJtQ2xvc2VDYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJjb25maXJtQ2xvc2VUaWNrZXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIENsb3NlIHRpY2tldFxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2ltYWdlUHJldmlld1BvcHVwIGxldC1tb2RlbD5cclxuICAgIDxkaXYgY2xhc3M9XCJwLTQgbS00XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBib3JkZXItMCBwLTAgdy0xMDAgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtc3RhcnRcIj5cclxuXHJcbiAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIG1iLTJcIj57eyBwcmV2aWV3VGl0bGUgfX08L2g1PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIHBvc2l0aW9uLXJlbGF0aXZlIG1iLTRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBwb3NpdGlvbi1hYnNvbHV0ZSBzdGFydC0wIHRvcC01MCB0cmFuc2xhdGUtbWlkZGxlLXlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwcmV2UHJldmlldygpXCIgW2Rpc2FibGVkXT1cInByZXZpZXdMaXN0Lmxlbmd0aCA8PSAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAg4oC5XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiZ2V0UHJldmlld0ltYWdlVXJsKClcIiBjbGFzcz1cInctMTAwIHJvdW5kZWQgYm9yZGVyXCIgLz5cclxuICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93IG15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTExXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2MtdGl0bGUgbXMtMiBteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRhbmdvIElEOiB7eyBjdXJyZW50UHJldmlld0l0ZW0udGVtcElkIH19XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdldEFjdGlvbihjdXJyZW50UHJldmlld0l0ZW0sICdyZXZpZXcnKT8uYWN0aW9uID09PSAnYXBwcm92ZWQnXCIgY2xhc3M9XCJtcy0yXCI+PHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDIwcHg7XHJcbiAgICBoZWlnaHQ6IDIwcHg7XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMVwiIHZpZXdCb3g9XCIwIDAgMTAgMTFcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHk9XCIwLjVcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIiByeD1cIjVcIiBmaWxsPVwiI0QxRkFERlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuMTIyMiAzLjU3OTE5TDQuMTM4ODcgNi40NTgzNkwzLjM0NzIgNS42MTI1M0MzLjIwMTM3IDUuNDc1MDMgMi45NzIyIDUuNDY2NjkgMi44MDU1MyA1LjU4MzM2QzIuNjQzMDMgNS43MDQxOSAyLjU5NzIgNS45MTY2OSAyLjY5NzIgNi4wODc1M0wzLjYzNDcgNy42MTI1M0MzLjcyNjM3IDcuNzU0MTkgMy44ODQ3IDcuODQxNjkgNC4wNjM4NyA3Ljg0MTY5QzQuMjM0NyA3Ljg0MTY5IDQuMzk3MiA3Ljc1NDE5IDQuNDg4ODcgNy42MTI1M0M0LjYzODg3IDcuNDE2NjkgNy41MDEzNyA0LjAwNDE5IDcuNTAxMzcgNC4wMDQxOUM3Ljg3NjM3IDMuNjIwODYgNy40MjIyIDMuMjgzMzYgNy4xMjIyIDMuNTc1MDNWMy41NzkxOVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzEyQjc2QVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdldEFjdGlvbihjdXJyZW50UHJldmlld0l0ZW0sICdyZXZpZXcnKT8uYWN0aW9uID09PSAncmVqZWN0ZWQnXCIgY2xhc3M9XCJtcy0yXCI+PHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDIwcHg7XHJcbiAgICBoZWlnaHQ6IDIwcHg7XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIxM1wiIHZpZXdCb3g9XCIwIDAgMTMgMTNcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTQyOF81OTQ4NClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNC41Mjk2MSAxLjVIOC42Njk2MUwxMS41OTk2IDQuNDNWOC41N0w4LjY2OTYxIDExLjVINC41Mjk2MUwxLjU5OTYxIDguNTdWNC40M0w0LjUyOTYxIDEuNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGRUU0RTJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjA5OTYxIDVMNS4wOTk2MSA4TTUuMDk5NjEgNUw4LjA5OTYxIDhNNC41Mjk2MSAxLjVIOC42Njk2MUwxMS41OTk2IDQuNDNWOC41N0w4LjY2OTYxIDExLjVINC41Mjk2MUwxLjU5OTYxIDguNTdWNC40M0w0LjUyOTYxIDEuNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0Q5MkQyMFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xNDI4XzU5NDg0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC41OTk2MDkgMC41KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2MtdmFsdWUgbXMtMlwiPkVudHJ5IFRpbWU6IHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEZvcm1hdHRlZEVudHJ5VGltZShjdXJyZW50UHJldmlld0l0ZW0uZW50cnlUaW1lKSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdldEFjdGlvbihjdXJyZW50UHJldmlld0l0ZW0sICdhcHByb3ZlJyk/LmFjdGlvbiA9PT0gJ2FwcHJvdmVkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiByeD1cIjEyXCIgZmlsbD1cIiNEMUZBREZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDg2Xzk0MDUxKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05LjUgMTdIOEM3LjczNDc4IDE3IDcuNDgwNDMgMTYuODk0NiA3LjI5Mjg5IDE2LjcwNzFDNy4xMDUzNiAxNi41MTk2IDcgMTYuMjY1MiA3IDE2VjEyLjVDNyAxMi4yMzQ4IDcuMTA1MzYgMTEuOTgwNCA3LjI5Mjg5IDExLjc5MjlDNy40ODA0MyAxMS42MDU0IDcuNzM0NzggMTEuNSA4IDExLjVIOS41TTEzIDEwLjVWOC41QzEzIDguMTAyMTggMTIuODQyIDcuNzIwNjQgMTIuNTYwNyA3LjQzOTM0QzEyLjI3OTQgNy4xNTgwNCAxMS44OTc4IDcgMTEuNSA3TDkuNSAxMS41VjE3SDE1LjE0QzE1LjM4MTIgMTcuMDAyNyAxNS42MTUyIDE2LjkxODIgMTUuNzk5IDE2Ljc2MkMxNS45ODI3IDE2LjYwNTggMTYuMTAzOCAxNi4zODg1IDE2LjE0IDE2LjE1TDE2LjgzIDExLjY1QzE2Ljg1MTggMTEuNTA2NyAxNi44NDIxIDExLjM2MDMgMTYuODAxNyAxMS4yMjExQzE2Ljc2MTMgMTEuMDgxOSAxNi42OTExIDEwLjk1MzEgMTYuNTk1OSAxMC44NDM4QzE2LjUwMDggMTAuNzM0NCAxNi4zODMgMTAuNjQ3IDE2LjI1MDggMTAuNTg3NkMxNi4xMTg1IDEwLjUyODMgMTUuOTc1IDEwLjQ5ODQgMTUuODMgMTAuNUgxM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAzOTg1NVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80ODZfOTQwNTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg2IDYpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdldEFjdGlvbihjdXJyZW50UHJldmlld0l0ZW0sICdhcHByb3ZlJyk/LmFjdGlvbiA9PT0gJ3JlamVjdGVkJ1wiPjxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiByeD1cIjEyXCIgZmlsbD1cIiNGRUU0RTJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDg2Xzk0MDkwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNC41MDE1IDcuMDAwMDZIMTUuODM2NUMxNi4xMTk1IDYuOTk1MDUgMTYuMzk0NCA3LjA5NDEzIDE2LjYwOTIgNy4yNzg0N0MxNi44MjM5IDcuNDYyODEgMTYuOTYzNSA3LjcxOTU5IDE3LjAwMTUgOC4wMDAwNlYxMS41MDAxQzE2Ljk2MzUgMTEuNzgwNSAxNi44MjM5IDEyLjAzNzMgMTYuNjA5MiAxMi4yMjE2QzE2LjM5NDQgMTIuNDA2IDE2LjExOTUgMTIuNTA1MSAxNS44MzY1IDEyLjUwMDFIMTQuNTAxNU0xMS4wMDE1IDEzLjUwMDFWMTUuNTAwMUMxMS4wMDE1IDE1Ljg5NzkgMTEuMTU5NSAxNi4yNzk0IDExLjQ0MDggMTYuNTYwN0MxMS43MjIxIDE2Ljg0MiAxMi4xMDM3IDE3LjAwMDEgMTIuNTAxNSAxNy4wMDAxTDE0LjUwMTUgMTIuNTAwMVY3LjAwMDA2SDguODYxNDhDOC42MjAzMiA2Ljk5NzMzIDguMzg2MjkgNy4wODE4NiA4LjIwMjUzIDcuMjM4MDZDOC4wMTg3NiA3LjM5NDI2IDcuODk3NjQgNy42MTE2MSA3Ljg2MTQ4IDcuODUwMDZMNy4xNzE0OCAxMi4zNTAxQzcuMTQ5NzMgMTIuNDkzNCA3LjE1OTM5IDEyLjYzOTcgNy4xOTk4MSAxMi43Nzg5QzcuMjQwMjMgMTIuOTE4MSA3LjMxMDQzIDEzLjA0NjkgNy40MDU1NSAxMy4xNTYzQzcuNTAwNjcgMTMuMjY1NyA3LjYxODQ0IDEzLjM1MzEgNy43NTA2OSAxMy40MTI0QzcuODgyOTUgMTMuNDcxOCA4LjAyNjUzIDEzLjUwMTcgOC4xNzE0OCAxMy41MDAxSDExLjAwMTVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDg2Xzk0MDkwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNiA2KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBEdXBsaWNhdGUgUmVhc29uIC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZHVwbGljYXRlLXJlYXNvbiBtcy0yIG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZFwiPnt7IGN1cnJlbnRQcmV2aWV3SXRlbS5yZWFzb24gfX08L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCB0b3AtNTAgdHJhbnNsYXRlLW1pZGRsZS15XCIgKGNsaWNrKT1cIm5leHRQcmV2aWV3KClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwcmV2aWV3TGlzdC5sZW5ndGggPD0gMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIOKAulxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBtZS0yXCIgKGNsaWNrKT1cInJlamVjdFBvcHVwKClcIj5SZWplY3Q8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiYWNjZXB0UG9wdXAoKVwiPkFjY2VwdDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=