tango-app-ui-analyse-traffic 3.8.0-alpha.26 → 3.8.0-alpha.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/img-rvps/img-rvps.component.mjs +487 -42
- package/esm2022/lib/services/traffic-rvps.service.mjs +5 -1
- package/esm2022/lib/services/traffic.service.mjs +4 -1
- package/fesm2022/tango-app-ui-analyse-traffic.mjs +493 -40
- package/fesm2022/tango-app-ui-analyse-traffic.mjs.map +1 -1
- package/lib/components/img-rvps/img-rvps.component.d.ts +47 -0
- package/lib/services/traffic-rvps.service.d.ts +1 -0
- package/lib/services/traffic.service.d.ts +1 -0
- package/package.json +1 -1
|
@@ -9,7 +9,6 @@ import * as i4 from "tango-app-ui-shared";
|
|
|
9
9
|
import * as i5 from "../../services/traffic-rvps.service";
|
|
10
10
|
import * as i6 from "@angular/common";
|
|
11
11
|
import * as i7 from "@angular/forms";
|
|
12
|
-
import * as i8 from "../../directive/magnifier.directive";
|
|
13
12
|
export class ImgRvpsComponent {
|
|
14
13
|
service;
|
|
15
14
|
gs;
|
|
@@ -22,6 +21,10 @@ export class ImgRvpsComponent {
|
|
|
22
21
|
loading = true;
|
|
23
22
|
noData = false;
|
|
24
23
|
normalize;
|
|
24
|
+
overallCardData = [];
|
|
25
|
+
cardDataMap = {};
|
|
26
|
+
ticketReviewStatus = [];
|
|
27
|
+
userComment;
|
|
25
28
|
constructor(service, gs, cd, modalService, toast, rvpsService) {
|
|
26
29
|
this.service = service;
|
|
27
30
|
this.gs = gs;
|
|
@@ -49,6 +52,7 @@ export class ImgRvpsComponent {
|
|
|
49
52
|
this.gs.dataRangeValue
|
|
50
53
|
.pipe(takeUntil(this.destroy$), debounceTime(100))
|
|
51
54
|
.subscribe((data) => {
|
|
55
|
+
console.log('data :', data);
|
|
52
56
|
if (data !== null || data?.client !== null) {
|
|
53
57
|
this.headerData = data;
|
|
54
58
|
this.storeIdarray = this.headerData?.stores
|
|
@@ -56,6 +60,7 @@ export class ImgRvpsComponent {
|
|
|
56
60
|
.map((store) => store.storeId);
|
|
57
61
|
this.backToFootfall();
|
|
58
62
|
this.displayDateRange();
|
|
63
|
+
this.loadCardData();
|
|
59
64
|
if (this.headerData?.date?.startDate === this.headerData?.date?.endDate) {
|
|
60
65
|
this.backnav = false;
|
|
61
66
|
this.displayDateRange();
|
|
@@ -76,6 +81,10 @@ export class ImgRvpsComponent {
|
|
|
76
81
|
this.noData = false;
|
|
77
82
|
this.type = "footfall";
|
|
78
83
|
this.selectedTime = "";
|
|
84
|
+
this.splitScreenEnabled = false;
|
|
85
|
+
this.selectImageArray = null;
|
|
86
|
+
this.remainingImageArray = [];
|
|
87
|
+
this.remainingImagesGroups = [];
|
|
79
88
|
}
|
|
80
89
|
folderView;
|
|
81
90
|
backnav;
|
|
@@ -100,6 +109,48 @@ export class ImgRvpsComponent {
|
|
|
100
109
|
}
|
|
101
110
|
return dateArray;
|
|
102
111
|
}
|
|
112
|
+
// Load card data
|
|
113
|
+
loadCardData() {
|
|
114
|
+
const storeId = this.storeIdarray && this.storeIdarray.length > 0 ? this.storeIdarray[0] : null;
|
|
115
|
+
if (!storeId || !this.headerData?.date) {
|
|
116
|
+
this.overallCardData = [];
|
|
117
|
+
this.cardDataMap = {};
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
this.rvpsService
|
|
121
|
+
.getImageDirectoryCardData(storeId, this.headerData.date.startDate, this.headerData.date.endDate)
|
|
122
|
+
.pipe(takeUntil(this.destroy$))
|
|
123
|
+
?.subscribe({
|
|
124
|
+
next: (res) => {
|
|
125
|
+
if (res && res.code === 200) {
|
|
126
|
+
this.overallCardData = res?.data || [];
|
|
127
|
+
this.cardDataMap = (this.overallCardData || []).reduce((acc, item) => {
|
|
128
|
+
const normalizedDate = item?.date
|
|
129
|
+
? new Date(item.date).toISOString().split("T")[0]
|
|
130
|
+
: null;
|
|
131
|
+
if (normalizedDate) {
|
|
132
|
+
acc[normalizedDate] = {
|
|
133
|
+
...item,
|
|
134
|
+
ticketStatusLower: item?.ticketStatus
|
|
135
|
+
? String(item.ticketStatus).toLowerCase()
|
|
136
|
+
: "",
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
return acc;
|
|
140
|
+
}, {});
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
this.overallCardData = [];
|
|
144
|
+
this.cardDataMap = {};
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
error: (err) => {
|
|
148
|
+
console.error("Error fetching loadCardData:", err);
|
|
149
|
+
this.overallCardData = [];
|
|
150
|
+
this.cardDataMap = {};
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
}
|
|
103
154
|
selectedTime;
|
|
104
155
|
folderName;
|
|
105
156
|
selectedTimes(val) {
|
|
@@ -111,14 +162,17 @@ export class ImgRvpsComponent {
|
|
|
111
162
|
}
|
|
112
163
|
folderDate;
|
|
113
164
|
imageFlow = false;
|
|
165
|
+
splitScreenEnabled = false; // Flag to enable split-screen view
|
|
114
166
|
// get Revops Api
|
|
115
167
|
getRvpsList;
|
|
116
168
|
getRvpsImageList;
|
|
117
169
|
objectsArray;
|
|
118
170
|
imagesArrayData;
|
|
171
|
+
listViewGroups = [];
|
|
119
172
|
selectIndex = 0;
|
|
120
173
|
footfallDate;
|
|
121
174
|
lengthValue;
|
|
175
|
+
viewMode = "grid";
|
|
122
176
|
getimages(index, obj) {
|
|
123
177
|
this.objectsArray = [];
|
|
124
178
|
this.selectIndex = index;
|
|
@@ -133,7 +187,7 @@ export class ImgRvpsComponent {
|
|
|
133
187
|
this.getRvpsImageList = [];
|
|
134
188
|
this.objectsArray = [];
|
|
135
189
|
this.getRevops();
|
|
136
|
-
this.getTotal();
|
|
190
|
+
// this.getTotal();
|
|
137
191
|
}
|
|
138
192
|
else {
|
|
139
193
|
this.lengthValue = false;
|
|
@@ -156,7 +210,6 @@ export class ImgRvpsComponent {
|
|
|
156
210
|
if (res && res.code === 200) {
|
|
157
211
|
if (this.getRvpsList?.length)
|
|
158
212
|
this.countData = res.data;
|
|
159
|
-
// console.log(this.countData)
|
|
160
213
|
}
|
|
161
214
|
else {
|
|
162
215
|
this.countData = [];
|
|
@@ -201,6 +254,9 @@ export class ImgRvpsComponent {
|
|
|
201
254
|
this.getRvpsList = res?.data;
|
|
202
255
|
this.imageUrl = this.rvpsService?.footfallCDN;
|
|
203
256
|
this.getRvpsImageList = res?.data?.result;
|
|
257
|
+
this.ticketReviewStatus = res?.data?.ticketStatus;
|
|
258
|
+
console.log('revops getRvpsListApi :', res?.data);
|
|
259
|
+
console.log('revops ticketReviewStatus :', this.ticketReviewStatus);
|
|
204
260
|
// Save the full footfall data (grouped by timeRange)
|
|
205
261
|
this.allFootfallData = res?.data?.result?.footfallData || [];
|
|
206
262
|
// Create timeRange + count object
|
|
@@ -350,11 +406,88 @@ export class ImgRvpsComponent {
|
|
|
350
406
|
backToFootfall1() {
|
|
351
407
|
this.selectedRadioType = undefined;
|
|
352
408
|
this.imageFlow = false;
|
|
409
|
+
this.splitScreenEnabled = false; // Disable split-screen when going back
|
|
410
|
+
this.selectImageArray = null;
|
|
353
411
|
}
|
|
354
412
|
selectImageArray;
|
|
355
413
|
remainingImageArray;
|
|
356
414
|
revopsTypeValue = false;
|
|
357
415
|
editBtnShow = false;
|
|
416
|
+
selectImageForSplitView(obj) {
|
|
417
|
+
this.splitScreenEnabled = true; // Enable split-screen when image is clicked
|
|
418
|
+
this.selectImageArray = obj;
|
|
419
|
+
// If duplicate is already selected, preserve the duplicate context
|
|
420
|
+
const isDuplicateMode = this.selectedRadioType === "duplicate";
|
|
421
|
+
if (!isDuplicateMode) {
|
|
422
|
+
this.revopsTypeValue = false;
|
|
423
|
+
this.selectedType = "";
|
|
424
|
+
this.selectedRadioType = undefined;
|
|
425
|
+
this.remainingImageArray = []; // Reset remaining images initially
|
|
426
|
+
this.remainingImagesGroups = []; // Reset groups
|
|
427
|
+
}
|
|
428
|
+
let filteredByType = [];
|
|
429
|
+
const selectedType = obj.revopsType?.toLowerCase();
|
|
430
|
+
// If we're in duplicate mode and clicking on a remaining image, keep the duplicate context
|
|
431
|
+
if (isDuplicateMode) {
|
|
432
|
+
// Keep the existing remaining images but update the selected image
|
|
433
|
+
// Don't reset the duplicate selection context
|
|
434
|
+
this.revopsTypeValue = false; // Allow editing this image
|
|
435
|
+
this.selectedType = ""; // Reset to allow new selection
|
|
436
|
+
// Keep selectedRadioType as 'duplicate' to maintain context
|
|
437
|
+
}
|
|
438
|
+
else if (selectedType === "duplicate" && Array.isArray(obj.duplicateImagePath)) {
|
|
439
|
+
const children = obj.duplicateImagePath.map((child) => {
|
|
440
|
+
const matched = this.overallArrayData.find((img) => img.templd === child.tempId);
|
|
441
|
+
return {
|
|
442
|
+
...child,
|
|
443
|
+
...(matched || {}),
|
|
444
|
+
parent: obj.templd,
|
|
445
|
+
};
|
|
446
|
+
});
|
|
447
|
+
filteredByType = [obj, ...children];
|
|
448
|
+
this.currentImageIndex = 0;
|
|
449
|
+
this.remainingImageArray = children;
|
|
450
|
+
}
|
|
451
|
+
else {
|
|
452
|
+
// For non-duplicate images, don't populate remainingImageArray initially
|
|
453
|
+
// It will be populated when user selects a radio button
|
|
454
|
+
filteredByType = this.overallArrayData.filter((img) => img.revopsType?.toLowerCase() === selectedType);
|
|
455
|
+
this.currentImageIndex = filteredByType.findIndex((img) => img.templd === obj.templd);
|
|
456
|
+
// Only set remainingImageArray if there are other images of the same type
|
|
457
|
+
// Otherwise, leave it empty for radio button selection to populate
|
|
458
|
+
if (filteredByType.length > 1) {
|
|
459
|
+
this.remainingImageArray = filteredByType.filter((_, i) => i !== this.currentImageIndex);
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
// Only auto-set revopsTypeValue if not in duplicate mode
|
|
463
|
+
if (!isDuplicateMode) {
|
|
464
|
+
if (obj?.revopsType === "duplicate" ||
|
|
465
|
+
obj?.revopsType === "employee" ||
|
|
466
|
+
obj?.revopsType === "house-keeping" || obj?.revopsType === "junk") {
|
|
467
|
+
if (obj?.revopsType === "duplicate" &&
|
|
468
|
+
obj?.duplicateImagePath?.length > 0) {
|
|
469
|
+
this.editBtnShow = true;
|
|
470
|
+
}
|
|
471
|
+
else if (obj?.revopsType === "employee" ||
|
|
472
|
+
obj?.revopsType === "house-keeping" || obj?.revopsType === "junk") {
|
|
473
|
+
this.editBtnShow = true;
|
|
474
|
+
}
|
|
475
|
+
else {
|
|
476
|
+
this.editBtnShow = false;
|
|
477
|
+
}
|
|
478
|
+
this.revopsTypeValue = true;
|
|
479
|
+
this.selectedType = obj?.revopsType;
|
|
480
|
+
this.onRadioChange(obj?.revopsType);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
else {
|
|
484
|
+
// In duplicate mode, allow editing the selected image
|
|
485
|
+
this.revopsTypeValue = false;
|
|
486
|
+
this.editBtnShow = false;
|
|
487
|
+
}
|
|
488
|
+
// Build remaining images groups by time range
|
|
489
|
+
this.buildRemainingImagesGroups();
|
|
490
|
+
}
|
|
358
491
|
imgFullView(obj) {
|
|
359
492
|
this.selectImageArray = obj;
|
|
360
493
|
this.imageFlow = true;
|
|
@@ -422,6 +555,8 @@ export class ImgRvpsComponent {
|
|
|
422
555
|
this.selectImageArray = obj;
|
|
423
556
|
// Remove selected from remaining list
|
|
424
557
|
this.remainingImageArray = this.remainingImageArray.filter((img) => img.templd !== obj.templd);
|
|
558
|
+
// Rebuild remaining images groups
|
|
559
|
+
this.buildRemainingImagesGroups();
|
|
425
560
|
this.imageFlow = true;
|
|
426
561
|
}
|
|
427
562
|
selectedType = ""; // default selected
|
|
@@ -434,7 +569,7 @@ export class ImgRvpsComponent {
|
|
|
434
569
|
if (this.selectImageArray?.revopsType?.toLowerCase() === "duplicate" &&
|
|
435
570
|
Array.isArray(this.selectImageArray?.duplicateImagePath) &&
|
|
436
571
|
this.selectImageArray.duplicateImagePath.length > 0) {
|
|
437
|
-
// 🔹 Case 1: Already in duplicate flow → keep children set by
|
|
572
|
+
// 🔹 Case 1: Already in duplicate flow → keep children set by selectImageForSplitView
|
|
438
573
|
this.remainingImageArray = this.remainingImageArray.map((child) => {
|
|
439
574
|
return { ...child, selected: false, isChecked: false };
|
|
440
575
|
});
|
|
@@ -451,6 +586,14 @@ export class ImgRvpsComponent {
|
|
|
451
586
|
img.isChecked = false;
|
|
452
587
|
});
|
|
453
588
|
}
|
|
589
|
+
// Rebuild remaining images groups after updating
|
|
590
|
+
this.buildRemainingImagesGroups();
|
|
591
|
+
console.log('remain image array ::', this.remainingImageArray);
|
|
592
|
+
}
|
|
593
|
+
else {
|
|
594
|
+
// For non-duplicate types, clear remaining images
|
|
595
|
+
this.remainingImageArray = [];
|
|
596
|
+
this.remainingImagesGroups = [];
|
|
454
597
|
}
|
|
455
598
|
}
|
|
456
599
|
type = "footfall";
|
|
@@ -460,6 +603,8 @@ export class ImgRvpsComponent {
|
|
|
460
603
|
}
|
|
461
604
|
applyFilters() {
|
|
462
605
|
this.imageFlow = false;
|
|
606
|
+
this.splitScreenEnabled = false; // Reset split-screen when filters change
|
|
607
|
+
this.selectImageArray = null;
|
|
463
608
|
// Convert type to lowercase safely
|
|
464
609
|
const selectedType = this.type?.toLowerCase();
|
|
465
610
|
if (selectedType === "footfall") {
|
|
@@ -478,51 +623,136 @@ export class ImgRvpsComponent {
|
|
|
478
623
|
// }
|
|
479
624
|
// Set noData based on result
|
|
480
625
|
this.noData = !this.imagesArrayData?.length;
|
|
626
|
+
this.buildListViewGroups();
|
|
481
627
|
this.cd.detectChanges();
|
|
482
628
|
}
|
|
629
|
+
setViewMode(mode) {
|
|
630
|
+
if (this.viewMode !== mode) {
|
|
631
|
+
this.viewMode = mode;
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
// Convert minutes → hr + mins
|
|
635
|
+
convertMinutes(totalMinutes) {
|
|
636
|
+
if (!totalMinutes && totalMinutes !== 0)
|
|
637
|
+
return { hours: 0, mins: 0 };
|
|
638
|
+
const hours = Math.floor(totalMinutes / 60);
|
|
639
|
+
const mins = totalMinutes % 60;
|
|
640
|
+
return { hours, mins };
|
|
641
|
+
}
|
|
642
|
+
remainingImagesGroups = [];
|
|
643
|
+
buildRemainingImagesGroups() {
|
|
644
|
+
if (!this.remainingImageArray || this.remainingImageArray.length === 0) {
|
|
645
|
+
this.remainingImagesGroups = [];
|
|
646
|
+
return;
|
|
647
|
+
}
|
|
648
|
+
const order = [];
|
|
649
|
+
const map = new Map();
|
|
650
|
+
this.remainingImageArray.forEach((img) => {
|
|
651
|
+
const key = img?.timeRange || "NA";
|
|
652
|
+
if (!map.has(key)) {
|
|
653
|
+
map.set(key, []);
|
|
654
|
+
order.push(key);
|
|
655
|
+
}
|
|
656
|
+
map.get(key)?.push(img);
|
|
657
|
+
});
|
|
658
|
+
this.remainingImagesGroups = order.map((key) => ({
|
|
659
|
+
timeRange: key,
|
|
660
|
+
data: map.get(key) || [],
|
|
661
|
+
}));
|
|
662
|
+
console.log('my methd =>', this.remainingImageArray);
|
|
663
|
+
}
|
|
664
|
+
buildListViewGroups() {
|
|
665
|
+
if (this.type === "footfall") {
|
|
666
|
+
this.listViewGroups = (this.allFootfallData || [])
|
|
667
|
+
.filter((group) => Array.isArray(group?.data) && group.data.length)
|
|
668
|
+
.map((group) => ({
|
|
669
|
+
timeRange: group?.timeRange || "NA",
|
|
670
|
+
data: group?.data || [],
|
|
671
|
+
}));
|
|
672
|
+
return;
|
|
673
|
+
}
|
|
674
|
+
const order = [];
|
|
675
|
+
const map = new Map();
|
|
676
|
+
(this.imagesArrayData || []).forEach((img) => {
|
|
677
|
+
const key = img?.timeRange || "NA";
|
|
678
|
+
if (!map.has(key)) {
|
|
679
|
+
map.set(key, []);
|
|
680
|
+
order.push(key);
|
|
681
|
+
}
|
|
682
|
+
map.get(key)?.push(img);
|
|
683
|
+
});
|
|
684
|
+
this.listViewGroups = order.map((key) => ({
|
|
685
|
+
timeRange: key,
|
|
686
|
+
data: map.get(key) || [],
|
|
687
|
+
}));
|
|
688
|
+
}
|
|
483
689
|
handleImageClick(evt, obj) {
|
|
484
|
-
//
|
|
485
|
-
if (this.selectedRadioType === "duplicate" &&
|
|
486
|
-
|
|
487
|
-
|
|
690
|
+
// When duplicate is selected, clicking on images should open them in zoom modal
|
|
691
|
+
if (this.selectedRadioType === "duplicate" && this.splitScreenEnabled) {
|
|
692
|
+
// Open image in zoom modal when duplicate is selected
|
|
693
|
+
// Store the clicked image temporarily for modal display
|
|
694
|
+
this.openImageZoomModal(this.imageUrl, obj);
|
|
695
|
+
return;
|
|
696
|
+
}
|
|
697
|
+
// For split-screen view, clicking on related images should swap to that image
|
|
698
|
+
if (this.splitScreenEnabled && this.selectedRadioType !== "duplicate") {
|
|
699
|
+
this.selectImageForSplitView(obj);
|
|
488
700
|
}
|
|
489
701
|
else if (this.selectedRadioType !== "duplicate") {
|
|
490
702
|
this.imgSwap(obj); // existing non-duplicate click behavior
|
|
491
703
|
}
|
|
492
704
|
}
|
|
705
|
+
tempModalImage = null; // Temporary storage for modal image when duplicate is selected
|
|
706
|
+
openImageZoomModal(imageUrl, imageData) {
|
|
707
|
+
// Store the image data temporarily for modal display
|
|
708
|
+
this.tempModalImage = imageData;
|
|
709
|
+
this.isModalOpen = true;
|
|
710
|
+
const modalRef = this.modalService.open(this.imagePopup, {
|
|
711
|
+
centered: true,
|
|
712
|
+
size: "lg",
|
|
713
|
+
backdrop: "static",
|
|
714
|
+
keyboard: false,
|
|
715
|
+
});
|
|
716
|
+
}
|
|
493
717
|
selectedDuplicateImagesList = [];
|
|
718
|
+
toggleDuplicateSelection(img) {
|
|
719
|
+
if (!img || img.duplicateImagePath?.length > 0) {
|
|
720
|
+
return;
|
|
721
|
+
}
|
|
722
|
+
const totalImages = this.overallArrayData.length;
|
|
723
|
+
const alreadyTaggedCount = this.countData?.duplicate || 0;
|
|
724
|
+
const maxSelectable = Math.round(totalImages * 0.2);
|
|
725
|
+
const currentlySelectedCount = this.remainingImageArray.filter((item) => item.selected).length;
|
|
726
|
+
const willSelect = !img.selected;
|
|
727
|
+
// ⛔ Block selection if trying to go beyond 20% cap
|
|
728
|
+
if (willSelect &&
|
|
729
|
+
currentlySelectedCount + alreadyTaggedCount >= maxSelectable) {
|
|
730
|
+
this.toast.getWarningToast(`You can select only ${maxSelectable} images (${this.getRvpsList?.data?.config?.duplicate ?? "20%"} of total footfall)`);
|
|
731
|
+
return;
|
|
732
|
+
}
|
|
733
|
+
// ✅ Proceed with selection toggle
|
|
734
|
+
img.selected = !img.selected;
|
|
735
|
+
img.isChecked = img.selected;
|
|
736
|
+
// ✅ Always rebuild the selected list
|
|
737
|
+
this.selectedDuplicateImagesList = this.remainingImageArray
|
|
738
|
+
.filter((item) => item.selected)
|
|
739
|
+
.map((item) => ({
|
|
740
|
+
...item,
|
|
741
|
+
parent: item.parent || this.selectImageArray?.templd,
|
|
742
|
+
isChecked: true,
|
|
743
|
+
}));
|
|
744
|
+
// Rebuild remaining images groups after checkbox change
|
|
745
|
+
this.buildRemainingImagesGroups();
|
|
746
|
+
this.cd.detectChanges();
|
|
747
|
+
}
|
|
494
748
|
onImageCheckboxChange(evt, img, type) {
|
|
495
749
|
if (type === "duplicate") {
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
//
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
const maxSelectable = Math.round(totalImages * 0.2);
|
|
502
|
-
// console.log(maxSelectable)
|
|
503
|
-
// Count selected now (in UI)
|
|
504
|
-
const currentlySelectedCount = this.overallArrayData.filter((item) => item.selected).length;
|
|
505
|
-
const willSelect = !img.selected;
|
|
506
|
-
// ⛔ Block selection if trying to go beyond 10% cap
|
|
507
|
-
if (willSelect &&
|
|
508
|
-
currentlySelectedCount + alreadyTaggedCount >= maxSelectable) {
|
|
509
|
-
this.toast.getWarningToast(`You can select only ${maxSelectable} images (${this.getRvpsList?.data?.config?.duplicate ?? "20%"} of total footfall)`);
|
|
510
|
-
evt.target.checked = false;
|
|
511
|
-
this.cd.detectChanges();
|
|
512
|
-
return;
|
|
750
|
+
// Use the toggle method for duplicate selection
|
|
751
|
+
this.toggleDuplicateSelection(img);
|
|
752
|
+
// Update checkbox state to match selection
|
|
753
|
+
if (evt && evt.target) {
|
|
754
|
+
evt.target.checked = img.selected;
|
|
513
755
|
}
|
|
514
|
-
// ✅ Proceed with selection toggle
|
|
515
|
-
img.selected = !img.selected;
|
|
516
|
-
img.isChecked = img.selected;
|
|
517
|
-
// ✅ Always rebuild the selected list
|
|
518
|
-
this.selectedDuplicateImagesList = this.remainingImageArray
|
|
519
|
-
.filter((item) => item.selected)
|
|
520
|
-
.map((item) => ({
|
|
521
|
-
...item,
|
|
522
|
-
parent: item.parent || this.selectImageArray?.templd,
|
|
523
|
-
isChecked: true,
|
|
524
|
-
}));
|
|
525
|
-
// console.log('✅ selectedDuplicateImagesList:', this.selectedDuplicateImagesList);
|
|
526
756
|
}
|
|
527
757
|
}
|
|
528
758
|
clearValue() {
|
|
@@ -542,12 +772,16 @@ export class ImgRvpsComponent {
|
|
|
542
772
|
}));
|
|
543
773
|
// 3. Close image flow/full-view if open
|
|
544
774
|
this.imageFlow = false;
|
|
545
|
-
// 4. Reset
|
|
775
|
+
// 4. Reset split-screen and selected image
|
|
776
|
+
this.splitScreenEnabled = false;
|
|
546
777
|
this.selectImageArray = null;
|
|
547
778
|
this.currentImageIndex = 0;
|
|
548
779
|
this.remainingImageArray = [];
|
|
780
|
+
this.remainingImagesGroups = [];
|
|
549
781
|
// 5. (Optional) Reset radio buttons — if you have any specific flag
|
|
550
782
|
this.selectedRadioType = undefined;
|
|
783
|
+
this.selectedType = "";
|
|
784
|
+
this.revopsTypeValue = false;
|
|
551
785
|
}
|
|
552
786
|
popupType;
|
|
553
787
|
zoomPopup;
|
|
@@ -594,6 +828,8 @@ export class ImgRvpsComponent {
|
|
|
594
828
|
entryTime: img?.entryTime || img?.entryTme || "",
|
|
595
829
|
exitTime: img?.exitTime || "",
|
|
596
830
|
filePath: img?.filePath || "",
|
|
831
|
+
comments: this.userComment || "",
|
|
832
|
+
mode: 'web'
|
|
597
833
|
};
|
|
598
834
|
this.rvpsService
|
|
599
835
|
.getRvpsTag(obj)
|
|
@@ -605,6 +841,7 @@ export class ImgRvpsComponent {
|
|
|
605
841
|
this.imageFlow = false;
|
|
606
842
|
this.getRevops();
|
|
607
843
|
this.cancelSubmit();
|
|
844
|
+
this.loadCardData();
|
|
608
845
|
this.selectedRadioType = undefined;
|
|
609
846
|
this.selectedType = "";
|
|
610
847
|
}
|
|
@@ -628,6 +865,7 @@ export class ImgRvpsComponent {
|
|
|
628
865
|
tempRaisedPayload = null; // class-level variable for preview
|
|
629
866
|
prepareRaisedPayload(showOnly = false) { }
|
|
630
867
|
raisedPopup;
|
|
868
|
+
resetRequestPopup;
|
|
631
869
|
Raised() {
|
|
632
870
|
const payload = {
|
|
633
871
|
dateString: this.folderDate,
|
|
@@ -732,8 +970,16 @@ export class ImgRvpsComponent {
|
|
|
732
970
|
commentText;
|
|
733
971
|
getRaisedData;
|
|
734
972
|
submitRaised() {
|
|
735
|
-
const payload = this.tempRaisedPayload; // fresh data for API
|
|
973
|
+
// const payload = this.tempRaisedPayload; // fresh data for API
|
|
974
|
+
const payload = {
|
|
975
|
+
ticketName: "footfall-directory",
|
|
976
|
+
storeId: this.tempRaisedPayload.storeId,
|
|
977
|
+
dateString: this.tempRaisedPayload.dateString,
|
|
978
|
+
type: "create",
|
|
979
|
+
mode: "web"
|
|
980
|
+
};
|
|
736
981
|
this.getRaisedData = payload;
|
|
982
|
+
console.log('submit raised :', payload);
|
|
737
983
|
this.rvpsService
|
|
738
984
|
.getCreateRaisedTag(payload)
|
|
739
985
|
.pipe(takeUntil(this.destroy$))
|
|
@@ -743,12 +989,15 @@ export class ImgRvpsComponent {
|
|
|
743
989
|
this.toast.getSuccessToast(res?.message || "Ticket updated successfully");
|
|
744
990
|
this.imageFlow = false;
|
|
745
991
|
this.getRevops();
|
|
992
|
+
this.loadCardData();
|
|
746
993
|
this.cancelRasied();
|
|
747
994
|
this.selectedRadioType = undefined;
|
|
748
995
|
this.selectedType = "";
|
|
996
|
+
this.countData = [];
|
|
749
997
|
}
|
|
750
998
|
else {
|
|
751
999
|
this.toast.getErrorToast("Failed to update");
|
|
1000
|
+
this.cancelRasied();
|
|
752
1001
|
}
|
|
753
1002
|
},
|
|
754
1003
|
error: (err) => {
|
|
@@ -758,6 +1007,7 @@ export class ImgRvpsComponent {
|
|
|
758
1007
|
err.message ||
|
|
759
1008
|
"Unknown error";
|
|
760
1009
|
this.toast.getErrorToast(msg);
|
|
1010
|
+
this.cancelRasied();
|
|
761
1011
|
},
|
|
762
1012
|
});
|
|
763
1013
|
}
|
|
@@ -824,6 +1074,7 @@ export class ImgRvpsComponent {
|
|
|
824
1074
|
}
|
|
825
1075
|
closeImage() {
|
|
826
1076
|
this.isModalOpen = false;
|
|
1077
|
+
this.tempModalImage = null; // Clear temporary image when closing modal
|
|
827
1078
|
this.modalService.dismissAll();
|
|
828
1079
|
}
|
|
829
1080
|
canEnableButton() {
|
|
@@ -866,20 +1117,214 @@ export class ImgRvpsComponent {
|
|
|
866
1117
|
// Update remaining images
|
|
867
1118
|
this.remainingImageArray = this.imagesArrayData.filter((_, i) => i !== this.currentImageIndex);
|
|
868
1119
|
}
|
|
1120
|
+
// Get current footfall count for selected date
|
|
1121
|
+
getCurrentFootfall() {
|
|
1122
|
+
if (!this.folderDate)
|
|
1123
|
+
return 0;
|
|
1124
|
+
const normalizedDate = new Date(this.folderDate).toISOString().split("T")[0];
|
|
1125
|
+
return this.cardDataMap[normalizedDate]?.footfallCount || 0;
|
|
1126
|
+
}
|
|
1127
|
+
// Get percentage change from footfallCountTrend
|
|
1128
|
+
getFootfallPercentageChange() {
|
|
1129
|
+
if (!this.folderDate)
|
|
1130
|
+
return 0;
|
|
1131
|
+
const normalizedDate = new Date(this.folderDate).toISOString().split("T")[0];
|
|
1132
|
+
return this.cardDataMap[normalizedDate]?.footfallCountTrend || 0;
|
|
1133
|
+
}
|
|
1134
|
+
// Format downtime from downtime key (in minutes)
|
|
1135
|
+
getFormattedDowntime() {
|
|
1136
|
+
if (!this.folderDate)
|
|
1137
|
+
return '-';
|
|
1138
|
+
const normalizedDate = new Date(this.folderDate).toISOString().split("T")[0];
|
|
1139
|
+
const downtimeMinutes = this.cardDataMap[normalizedDate]?.downtime || 0;
|
|
1140
|
+
if (!downtimeMinutes || downtimeMinutes === 0)
|
|
1141
|
+
return '-';
|
|
1142
|
+
const { hours, mins } = this.convertMinutes(downtimeMinutes);
|
|
1143
|
+
if (hours > 0 && mins > 0) {
|
|
1144
|
+
return `${hours}hr ${mins} mins`;
|
|
1145
|
+
}
|
|
1146
|
+
else if (hours > 0) {
|
|
1147
|
+
return `${hours}hr`;
|
|
1148
|
+
}
|
|
1149
|
+
else if (mins > 0) {
|
|
1150
|
+
return `${mins} mins`;
|
|
1151
|
+
}
|
|
1152
|
+
return '-';
|
|
1153
|
+
}
|
|
1154
|
+
// Get ticket status
|
|
1155
|
+
getTicketStatus() {
|
|
1156
|
+
if (!this.folderDate)
|
|
1157
|
+
return '-';
|
|
1158
|
+
const normalizedDate = new Date(this.folderDate).toISOString().split("T")[0];
|
|
1159
|
+
const status = this.cardDataMap[normalizedDate]?.ticketStatus;
|
|
1160
|
+
return status || '-';
|
|
1161
|
+
}
|
|
1162
|
+
// Check if there's downtime
|
|
1163
|
+
hasDowntime() {
|
|
1164
|
+
if (!this.folderDate)
|
|
1165
|
+
return false;
|
|
1166
|
+
const normalizedDate = new Date(this.folderDate).toISOString().split("T")[0];
|
|
1167
|
+
const downtime = this.cardDataMap[normalizedDate]?.downtime || 0;
|
|
1168
|
+
return downtime > 0;
|
|
1169
|
+
}
|
|
1170
|
+
// Get tagging data from ticketReviewStatus where actionType = "tagging"
|
|
1171
|
+
getTaggingData(type) {
|
|
1172
|
+
if (!this.ticketReviewStatus || !Array.isArray(this.ticketReviewStatus) || !type) {
|
|
1173
|
+
return null;
|
|
1174
|
+
}
|
|
1175
|
+
return this.ticketReviewStatus.find((item) => item?.actionType === type) || null;
|
|
1176
|
+
}
|
|
1177
|
+
// Check if ticket status is raised
|
|
1178
|
+
isTicketRaised() {
|
|
1179
|
+
const status = this.getTicketStatus();
|
|
1180
|
+
return status !== '-' && status?.toLowerCase() === "raised";
|
|
1181
|
+
}
|
|
1182
|
+
// Check if ticket status is closed
|
|
1183
|
+
isTicketClosed() {
|
|
1184
|
+
const status = this.getTicketStatus();
|
|
1185
|
+
return status !== '-' && status?.toLowerCase() === "closed";
|
|
1186
|
+
}
|
|
1187
|
+
// Get all tagging data items (for initial and final revisions)
|
|
1188
|
+
getAllTaggingData() {
|
|
1189
|
+
if (!this.ticketReviewStatus || !Array.isArray(this.ticketReviewStatus)) {
|
|
1190
|
+
return [];
|
|
1191
|
+
}
|
|
1192
|
+
return this.ticketReviewStatus.filter((item) => item?.actionType === "tagging") || [];
|
|
1193
|
+
}
|
|
1194
|
+
// Get initial revision data (first tagging item)
|
|
1195
|
+
getInitialRevisionData() {
|
|
1196
|
+
const allTagging = this.getAllTaggingData();
|
|
1197
|
+
return allTagging.length > 0 ? allTagging[0] : null;
|
|
1198
|
+
}
|
|
1199
|
+
// Get final revision data (last tagging item, or second if exists)
|
|
1200
|
+
getFinalRevisionData() {
|
|
1201
|
+
const allTagging = this.getAllTaggingData();
|
|
1202
|
+
return allTagging.length > 1 ? allTagging[allTagging.length - 1] : (allTagging.length > 0 ? allTagging[0] : null);
|
|
1203
|
+
}
|
|
1204
|
+
// Helper method to get count value by type from count array
|
|
1205
|
+
getCountByType(data, countType) {
|
|
1206
|
+
if (!data || !data.count) {
|
|
1207
|
+
return 0;
|
|
1208
|
+
}
|
|
1209
|
+
// Check if count is an array (new format)
|
|
1210
|
+
if (Array.isArray(data.count)) {
|
|
1211
|
+
const countItem = data.count.find((item) => item?.type === countType);
|
|
1212
|
+
return countItem?.value || 0;
|
|
1213
|
+
}
|
|
1214
|
+
// Fallback for old format (object)
|
|
1215
|
+
const keyMap = {
|
|
1216
|
+
'duplicate': 'duplicateCount',
|
|
1217
|
+
'employee': 'employeeCount',
|
|
1218
|
+
'junk': 'junkCount',
|
|
1219
|
+
'houseKeeping': 'houseKeepingCount'
|
|
1220
|
+
};
|
|
1221
|
+
const key = keyMap[countType];
|
|
1222
|
+
return key ? (data.count[key] || 0) : 0;
|
|
1223
|
+
}
|
|
1224
|
+
// Calculate total percentage: (sum of all count values / revicedFootfall) * 100
|
|
1225
|
+
// type: 'raised' | 'finalreview'
|
|
1226
|
+
getRevisionCalculation(type) {
|
|
1227
|
+
if (!this.ticketReviewStatus || !Array.isArray(this.ticketReviewStatus || !type)) {
|
|
1228
|
+
return 0;
|
|
1229
|
+
}
|
|
1230
|
+
// Filter items based on actionType
|
|
1231
|
+
const taggingItems = this.ticketReviewStatus.filter((item) => item?.actionType === type);
|
|
1232
|
+
if (taggingItems.length === 0) {
|
|
1233
|
+
return 0;
|
|
1234
|
+
}
|
|
1235
|
+
if (!taggingItems[0] || !taggingItems[0].revicedFootfall || taggingItems[0].revicedFootfall === 0) {
|
|
1236
|
+
return 0;
|
|
1237
|
+
}
|
|
1238
|
+
const count = taggingItems[0].count || [];
|
|
1239
|
+
// Check if count is an array (new format) or object (old format)
|
|
1240
|
+
let totalCount = 0;
|
|
1241
|
+
if (Array.isArray(count)) {
|
|
1242
|
+
// New format: count is an array of objects with type and value
|
|
1243
|
+
const typesToSum = ['duplicate', 'employee', 'houseKeeping', 'junk'];
|
|
1244
|
+
totalCount = count
|
|
1245
|
+
.filter((item) => typesToSum.includes(item?.type))
|
|
1246
|
+
.reduce((sum, item) => sum + (item?.value || 0), 0);
|
|
1247
|
+
}
|
|
1248
|
+
// else {
|
|
1249
|
+
// // Old format: count is an object with keys
|
|
1250
|
+
// totalCount = (count.duplicateCount || 0) +
|
|
1251
|
+
// (count.employeeCount || 0) +
|
|
1252
|
+
// (count.junkCount || 0) +
|
|
1253
|
+
// (count.houseKeepingCount || 0);
|
|
1254
|
+
// }
|
|
1255
|
+
return Math.round((totalCount / taggingItems[0].revicedFootfall) * 100);
|
|
1256
|
+
}
|
|
1257
|
+
requestReset() {
|
|
1258
|
+
const modalRef = this.modalService.open(this.resetRequestPopup, {
|
|
1259
|
+
centered: true,
|
|
1260
|
+
size: "md",
|
|
1261
|
+
backdrop: "static",
|
|
1262
|
+
keyboard: false,
|
|
1263
|
+
});
|
|
1264
|
+
}
|
|
1265
|
+
cancelResetRequest() {
|
|
1266
|
+
this.modalService.dismissAll();
|
|
1267
|
+
}
|
|
1268
|
+
submitResetRequest() {
|
|
1269
|
+
let payload = {
|
|
1270
|
+
storeId: this.storeIdarray && this.storeIdarray.length > 0 ? this.storeIdarray[0] : null,
|
|
1271
|
+
dateString: this.folderDate || ""
|
|
1272
|
+
};
|
|
1273
|
+
console.log('submitResetRequest Payload:', payload);
|
|
1274
|
+
// Close modal after submission
|
|
1275
|
+
this.modalService.dismissAll();
|
|
1276
|
+
this.service
|
|
1277
|
+
.sendVMSResetRequest(payload)
|
|
1278
|
+
.pipe(takeUntil(this.destroy$))
|
|
1279
|
+
?.subscribe({
|
|
1280
|
+
next: (res) => {
|
|
1281
|
+
if (res && res.code === 200) {
|
|
1282
|
+
this.loadCardData();
|
|
1283
|
+
this.toast.getSuccessToast("Request reset successfully");
|
|
1284
|
+
}
|
|
1285
|
+
else {
|
|
1286
|
+
this.toast.getErrorToast("Failed to reset request");
|
|
1287
|
+
}
|
|
1288
|
+
},
|
|
1289
|
+
error: (err) => {
|
|
1290
|
+
const msg = err.error?.error ||
|
|
1291
|
+
err.error ||
|
|
1292
|
+
err?.error?.message ||
|
|
1293
|
+
err.message ||
|
|
1294
|
+
"Unknown error";
|
|
1295
|
+
console.error('Error in submitResetRequest :', err);
|
|
1296
|
+
this.toast.getErrorToast(msg || "Unknown error occurred");
|
|
1297
|
+
},
|
|
1298
|
+
});
|
|
1299
|
+
}
|
|
1300
|
+
// Get normalized date for current folderDate
|
|
1301
|
+
getNormalizedDate() {
|
|
1302
|
+
if (!this.folderDate)
|
|
1303
|
+
return null;
|
|
1304
|
+
return new Date(this.folderDate).toISOString().split("T")[0];
|
|
1305
|
+
}
|
|
1306
|
+
// Get selected date's card data
|
|
1307
|
+
getSelectedDateCardData() {
|
|
1308
|
+
const normalizedDate = this.getNormalizedDate();
|
|
1309
|
+
return normalizedDate ? this.cardDataMap[normalizedDate] : null;
|
|
1310
|
+
}
|
|
869
1311
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImgRvpsComponent, deps: [{ token: i1.TrafficService }, { token: i2.GlobalStateService }, { token: i0.ChangeDetectorRef }, { token: i3.NgbModal }, { token: i4.ToastService }, { token: i5.TrafficRvpsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
870
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ImgRvpsComponent, selector: "lib-img-rvps", viewQueries: [{ propertyName: "zoomPopup", first: true, predicate: ["zoomPopup"], descendants: true }, { propertyName: "raisedPopup", first: true, predicate: ["raisedPopup"], descendants: true }, { propertyName: "imagePopup", first: true, predicate: ["imagePopup"], descendants: true }], ngImport: i0, template: "<div class=\"card mt-3\">\r\n <div class=\"card-header mt-3 px-0 border-bottom-0\">\r\n <div class=\"custom-accordion\">\r\n <div class=\"custom-accordion-item\">\r\n <button class=\"mainheading pb-0 custom-accordion-header\" (click)=\"toggleAccordion()\">\r\n <div class=\"header-row\">\r\n <span class=\"img-direc\">Image Directory</span>\r\n\r\n <span class=\"divider\"></span>\r\n <span class=\"accordion-arrow\">\r\n <!-- Down arrow for collapsed state, up arrow for expanded state -->\r\n <svg *ngIf=\"!isAccordionExpanded\" xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"6\"\r\n viewBox=\"0 0 16 6\" fill=\"none\">\r\n <path d=\"M1 1L5 5L9 1\" stroke=\"#071437\" stroke-width=\"1\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"isAccordionExpanded\" xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"6\"\r\n viewBox=\"0 0 16 6\" fill=\"none\">\r\n <path d=\"M1 5L5 1L9 5\" stroke=\"#1b84ff\" stroke-width=\"1\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <section *ngIf=\"isAccordionExpanded\">\r\n\r\n <div *ngIf=\"folderView\" class=\"card-body px-0\">\r\n <div class=\"scroll-container\">\r\n <div class=\"row\">\r\n <div class=\"col-md-1 mt-5 text-center\" *ngFor=\"let obj of dateArray;let i = index\">\r\n <div (click)=\"getimages(i,obj)\">\r\n <div *ngIf=\"i === selectIndex;\">\r\n <span class=\"cursor-pointer\"><svg width=\"57\" height=\"56\" viewBox=\"0 0 57 56\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.154297\" width=\"56\" height=\"56\" rx=\"12\" fill=\"#33B5FF\" />\r\n <path\r\n d=\"M39.8216 36.1667C39.8216 36.7855 39.5758 37.379 39.1382 37.8166C38.7006 38.2542 38.1071 38.5 37.4883 38.5H18.8216C18.2028 38.5 17.6093 38.2542 17.1717 37.8166C16.7341 37.379 16.4883 36.7855 16.4883 36.1667V19.8333C16.4883 19.2145 16.7341 18.621 17.1717 18.1834C17.6093 17.7458 18.2028 17.5 18.8216 17.5H24.6549L26.9883 21H37.4883C38.1071 21 38.7006 21.2458 39.1382 21.6834C39.5758 22.121 39.8216 22.7145 39.8216 23.3333V36.1667Z\"\r\n stroke=\"white\" stroke-width=\"2.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <div class=\"text-center mt-2\">{{obj | date:'dd MMM'}}</div>\r\n </div>\r\n <div *ngIf=\"i !== selectIndex;\">\r\n <span class=\"cursor-pointer\"><svg width=\"57\" height=\"56\" viewBox=\"0 0 57 56\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.462891\" width=\"56\" height=\"56\" rx=\"12\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M40.1302 36.1667C40.1302 36.7855 39.8844 37.379 39.4468 37.8166C39.0092 38.2542 38.4157 38.5 37.7969 38.5H19.1302C18.5114 38.5 17.9179 38.2542 17.4803 37.8166C17.0427 37.379 16.7969 36.7855 16.7969 36.1667V19.8333C16.7969 19.2145 17.0427 18.621 17.4803 18.1834C17.9179 17.7458 18.5114 17.5 19.1302 17.5H24.9635L27.2969 21H37.7969C38.4157 21 39.0092 21.2458 39.4468 21.6834C39.8844 22.121 40.1302 22.7145 40.1302 23.3333V36.1667Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"2.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <div class=\"text-center mt-2\">{{obj | date:'dd MMM'}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div *ngIf=\"!folderView\" class=\"card-body\">\r\n <section *ngIf=\"!imageFlow\">\r\n\r\n\r\n <div class=\"row\">\r\n <div class=\"d-flex flex-shrink-0 mt-3 justify-content-start align-items-center px-0\">\r\n <span *ngIf=\"backnav\" class=\"cursor-pointer\" (click)=\"backToFootfall()\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_2585_7036)\">\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=\"M25.8327 19H14.166M14.166 19L19.9993 24.8334M14.166 19L19.9993 13.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2585_7036\" 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\" 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_2585_7036\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2585_7036\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span class=\"img-direc ms-2 mt-1\">{{folderDate | date:'dd MMM, yyyy'}} \r\n <span class=\"badge badge-light-warning mx-2\" *ngIf=\"!getTicketStatuses().includes('closed') && getTicketStatuses().includes('open')\">\r\n Ticket Raised\r\n</span>\r\n<span class=\"badge badge-light-success mx-2\" *ngIf=\"getTicketStatuses().includes('closed')\">Ticket Closed</span>\r\n\r\n </span>\r\n <div *ngIf=\"!getTicketStatuses().includes('open') && !getTicketStatuses().includes('closed')\" class=\"ms-auto text-end\">\r\n \r\n<button \r\n [disabled]=\"!canEnableButton()\" \r\n class=\"btn btn-primary\" \r\n type=\"button\" \r\n (click)=\"Raised()\">\r\n Raise ticket for footfall\r\n</button>\r\n</div>\r\n </div>\r\n <div *ngIf=\"!folderView\" class=\"nav-group bg-white border-1 btn-group w-auto my-2\">\r\n<ng-container *ngIf=\"!(countData?.length > 0)\">\r\n\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"type === 'footfall' ? 'activePlanBtn' : 'inactivePlanBtn'\"\r\n (click)=\"selectPlanTrends('footfall')\">\r\n Total Footfall\r\n <span\r\n [ngClass]=\"type === 'footfall' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\r\n {{ countData?.footfallCount || 0 }}\r\n </span>\r\n </button>\r\n\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"type === 'non-tagging' ? 'activePlanBtn' : 'inactivePlanBtn'\"\r\n (click)=\"selectPlanTrends('non-tagging')\">\r\n Non-tags\r\n <span\r\n [ngClass]=\"type === 'non-tagging' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\r\n {{ countData?.nonTags || 0 }}\r\n </span>\r\n </button>\r\n\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"type === 'duplicate' ? 'activePlanBtn' : 'inactivePlanBtn'\"\r\n (click)=\"selectPlanTrends('duplicate')\">\r\n Duplicated\r\n <span\r\n [ngClass]=\"type === 'duplicate' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\r\n {{ countData?.duplicate || 0 }}\r\n </span>\r\n </button>\r\n\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"type === 'employee' ? 'activePlanBtn' : 'inactivePlanBtn'\"\r\n (click)=\"selectPlanTrends('employee')\">\r\n Employee/Staff\r\n <span\r\n [ngClass]=\"type === 'employee' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\r\n {{ countData?.employee || 0 }}\r\n </span>\r\n </button>\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"type === 'junk' ? 'activePlanBtn' : 'inactivePlanBtn'\"\r\n (click)=\"selectPlanTrends('junk')\">\r\n Junk\r\n <span\r\n [ngClass]=\"type === 'junk' ? 'badge badge-active activePlanBtn' : ' badge badge-light-default inactivePlanBtn'\">\r\n {{ countData?.junk || 0 }}\r\n </span>\r\n </button>\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"type === 'house-keeping' ? 'activePlanBtn' : 'inactivePlanBtn'\"\r\n (click)=\"selectPlanTrends('house-keeping')\">\r\n House Keeping\r\n <span\r\n [ngClass]=\"type === 'house-keeping' ? 'badge badge-active activePlanBtn' : ' badge badge-light-default inactivePlanBtn'\">\r\n {{ countData?.housekeeping || 0 }}\r\n </span>\r\n </button>\r\n \r\n\r\n</ng-container>\r\n\r\n </div>\r\n<ng-container *ngIf=\"!imageFlow\">\r\n\r\n <div *ngIf=\"type === 'footfall'\" class=\"d-flex mt-2 mb-2 w-100 overflow-x px-0\">\r\n\r\n <div class=\"col text-nowrap\" *ngFor=\"let obj of objectsArray\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item cursor-pointer\">\r\n <a (click)=\"selectedTimes(obj.timeRange)\"\r\n [ngClass]=\"selectedTime === obj?.timeRange ? 'active' : ''\"\r\n class=\"nav-link cursor-pointer no-border mx-3 mb-2\">\r\n {{obj?.timeRange}}<span class=\"mx-2\"\r\n [ngClass]=\"selectedTime === obj?.timeRange ? 'badge-num-primary' :'badge-num-muted'\">\r\n {{ obj?.count ? obj?.count : 0 }}\r\n </span>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n\r\n </div>\r\n</ng-container>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData\" class=\"row\">\r\n\r\n <div class=\"col-lg-12 mb-3\">\r\n\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column \" style=\"margin: 64px;border-radius: 8px;\r\nbackground: var(--Gray-50, #F9FAFB);\">\r\n <svg width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\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 <path\r\n d=\"M35.332 51.9999H33.6654C32.7813 51.9999 31.9335 51.6487 31.3083 51.0236C30.6832 50.3985 30.332 49.5506 30.332 48.6666V33.6666C30.332 32.7825 30.6832 31.9347 31.3083 31.3096C31.9335 30.6844 32.7813 30.3333 33.6654 30.3333H48.6654C49.5494 30.3333 50.3973 30.6844 51.0224 31.3096C51.6475 31.9347 51.9987 32.7825 51.9987 33.6666V35.3333M45.332 41.9999H60.332C62.173 41.9999 63.6654 43.4923 63.6654 45.3333V60.3333C63.6654 62.1742 62.173 63.6666 60.332 63.6666H45.332C43.4911 63.6666 41.9987 62.1742 41.9987 60.3333V45.3333C41.9987 43.4923 43.4911 41.9999 45.332 41.9999Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"4\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <div class=\"nodata-title my-3\">\r\n {{ noDataMessages[type?.toLowerCase()] || 'No data found' }}\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"row px-0 img-traffic contain high-400px scroll-y\" *ngIf=\"!noData && !loading\">\r\n <ng-container\r\n\r\n*ngFor=\"let obj of imagesArrayData\"\r\n>\r\n<div *ngIf=\"type !== 'duplicate' || (type === 'duplicate'&& obj.revopsType === 'duplicate' && obj.duplicateImagePath?.length > 0)\" class=\"col-md-3 border-gray mx-2 p-2 mt-5\">\r\n<!-- Condition: Only show if not duplicate OR duplicate with non-empty duplicateImagePath -->\r\n<ng-container >\r\n<img\r\nclass=\"img-src cursor-pointer\"\r\n[src]=\"imageUrl + obj?.filePath\"\r\n(error)=\"obj.filePath = null\"\r\nalt=\"\"\r\n(click)=\"imgFullView(obj)\"\r\n/>\r\n</ng-container>\r\n\r\n <div *ngIf=\"!obj?.filePath\" class=\"no-preview\">\r\n <span class=\"mb-5\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-5 text-center\">Preview not available</span>\r\n <span class=\"description mb-5 text-center\">The selected camera is not available at the\r\n moment.</span>\r\n </div>\r\n <div *ngIf=\"type !== 'duplicate' || (type === 'duplicate'&& obj.revopsType === 'duplicate' && obj.duplicateImagePath?.length > 0)\" class=\"row px-2 mb-2\">\r\n <div class=\"col-md-7\">\r\n <div class=\"py-2 img-doc-time\">Tango ID : {{obj?.templd}} <span *ngIf=\"(type === 'duplicate'&& obj.revopsType === 'duplicate' && obj.duplicateImagePath?.length > 0)\" class=\"mx-2 badge badge-light-primary\">{{obj.duplicateImagePath?.length}}</span>\r\n <span *ngIf=\"obj?.status ==='approved'\" 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\" 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></span>\r\n <span *ngIf=\"obj?.status ==='rejected'\" 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\" 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=\"img-doc-value\">Entry Time : {{obj?.entryTme}}</div>\r\n </div>\r\n <div class=\"col-md-5 text-end py-3\">\r\n <span *ngIf=\"obj?.revopsType ==='non-tagging'\" ngbTooltip=\"Yet to tag the customer\"\r\n placement=\"top\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"18\"\r\n viewBox=\"0 0 19 18\" fill=\"none\">\r\n <path\r\n d=\"M6.02344 5.625H6.03094M16.2159 10.4325L10.8384 15.81C10.6991 15.9495 10.5337 16.0601 10.3516 16.1356C10.1695 16.2111 9.97431 16.2499 9.77719 16.2499C9.58006 16.2499 9.38487 16.2111 9.20278 16.1356C9.02068 16.0601 8.85525 15.9495 8.71594 15.81L2.27344 9.375V1.875H9.77344L16.2159 8.3175C16.4953 8.59854 16.6521 8.97872 16.6521 9.375C16.6521 9.77128 16.4953 10.1515 16.2159 10.4325Z\"\r\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"obj?.revopsType ==='duplicate'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\r\n viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94635)\">\r\n <path\r\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\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_2012_94635\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"obj?.revopsType ==='employee'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\r\n viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94639)\">\r\n <path\r\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\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_2012_94639\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"obj?.revopsType ==='house-keeping'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"21\"\r\n viewBox=\"0 0 21 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94643)\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\r\n fill=\"#475467\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2012_94643\">\r\n <rect width=\"21\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"obj?.revopsType ==='junk'\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n<path d=\"M3 6H5M5 6H21M5 6V20C5 20.5304 5.21071 21.0391 5.58579 21.4142C5.96086 21.7893 6.46957 22 7 22H17C17.5304 22 18.0391 21.7893 18.4142 21.4142C18.7893 21.0391 19 20.5304 19 20V6H5ZM8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M10 11V17M14 11V17\" stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</svg>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n </div>\r\n </section>\r\n\r\n <!-- full image View -->\r\n <section *ngIf=\"imageFlow\">\r\n <div class=\"row\">\r\n <div class=\"d-flex flex-shrink-0 mt-3 justify-content-start align-items-center px-0\">\r\n <span class=\"cursor-pointer\" (click)=\"backToFootfall1()\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_2585_7036)\">\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=\"M25.8327 19H14.166M14.166 19L19.9993 24.8334M14.166 19L19.9993 13.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2585_7036\" 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\" 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_2585_7036\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2585_7036\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span class=\"img-direc ms-2 mt-1\">{{folderDate | date:'dd MMM, yyyy'}}</span>\r\n </div>\r\n <div class=\"d-flex mt-2 mb-2 w-100 overflow-x px-0\">\r\n\r\n <!-- <div class=\"col text-nowrap\" *ngFor=\"let obj of objectsArray\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item cursor-pointer\">\r\n <a (click)=\"selectedTimes(obj.timeRange)\"\r\n [ngClass]=\"selectedTime === obj?.timeRange ? 'active' : ''\"\r\n class=\"nav-link cursor-pointer no-border mx-3 mb-2\">\r\n {{obj?.timeRange}}<span class=\"mx-2\"\r\n [ngClass]=\"selectedTime === obj?.timeRange ? 'badge-num-primary' :'badge-num-muted'\">\r\n {{ obj?.count ? obj?.count : 0 }}\r\n </span>\r\n </a>\r\n </li>\r\n </ul>\r\n </div> -->\r\n\r\n\r\n </div>\r\n\r\n <div class=\"row mx-0 border-gray img-traffic\" *ngIf=\"!noData && !loading\">\r\n <div class=\"col-md-6 p-2 mb-2 mt-5\">\r\n <div class=\"position-relative border-gray p-2 \">\r\n <!-- <button *ngIf=\"canNavigateLeft\" (click)=\"navigateImage('left')\"\r\n class=\"btn btn-light position-absolute start-0 top-50 z-index-10\">\r\n \u25C0\r\n </button> -->\r\n\r\n <!-- Main Image -->\r\n <img class=\"img-src cursor-pointer h-450px\" (click)=\"selectedImageArray(imageUrl, selectImageArray)\"\r\n [src]=\"imageUrl + selectImageArray?.filePath\" appMagnifier alt=\"\">\r\n <!-- <button *ngIf=\"canNavigateRight\" (click)=\"navigateImage('right')\"\r\n class=\"btn btn-light position-absolute end-0 top-50 z-index-10\">\r\n \u25B6\r\n </button> -->\r\n\r\n <!-- Right arrow button -->\r\n <div class=\"row px-2 mb-2\">\r\n <div class=\"col-md-7\">\r\n <div class=\"py-2 img-doc-time\">Tango ID : {{selectImageArray?.templd}}\r\n <span *ngIf=\"selectImageArray?.status ==='approved'\" 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\" 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></span>\r\n <span *ngIf=\"selectImageArray?.status ==='rejected'\" 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\" 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=\"img-doc-value\">Entry Time : {{selectImageArray?.entryTme}}</div>\r\n </div>\r\n <div class=\"col-md-5 text-end py-3\">\r\n <span *ngIf=\"selectImageArray?.revopsType ==='non-tagging'\"\r\n ngbTooltip=\"Yet to tag the customer\" placement=\"top\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"18\"\r\n viewBox=\"0 0 19 18\" fill=\"none\">\r\n <path\r\n d=\"M6.02344 5.625H6.03094M16.2159 10.4325L10.8384 15.81C10.6991 15.9495 10.5337 16.0601 10.3516 16.1356C10.1695 16.2111 9.97431 16.2499 9.77719 16.2499C9.58006 16.2499 9.38487 16.2111 9.20278 16.1356C9.02068 16.0601 8.85525 15.9495 8.71594 15.81L2.27344 9.375V1.875H9.77344L16.2159 8.3175C16.4953 8.59854 16.6521 8.97872 16.6521 9.375C16.6521 9.77128 16.4953 10.1515 16.2159 10.4325Z\"\r\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"selectImageArray?.revopsType ==='duplicate'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\r\n viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94635)\">\r\n <path\r\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\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_2012_94635\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"selectImageArray?.revopsType ==='employee'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\r\n viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94639)\">\r\n <path\r\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\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_2012_94639\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"selectImageArray?.revopsType ==='house-keeping'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"21\"\r\n viewBox=\"0 0 21 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94643)\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\r\n fill=\"#475467\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2012_94643\">\r\n <rect width=\"21\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-6 p-2 mb-2 mt-5\">\r\n <div class=\"mx-2 \">\r\n <div class=\"row\">\r\n <div class=\"col-md-6 title-type\">\r\n Select non-shopper type\r\n </div>\r\n \r\n\r\n <section class=\"col-md-6 text-end\" *ngIf=\"!(users?.role ==='user' && users?.userType ==='client' && selectedRadioType ==='junk')\">\r\n \r\n <div *ngIf=\"!revopsTypeValue\" class=\"mb-5 text-end\" role=\"group\">\r\n <div *ngIf=\"!getTicketStatuses().includes('open') && !getTicketStatuses().includes('closed')\">\r\n \r\n <button [disabled]=\"\r\n (selectedRadioType === undefined || selectedRadioType === '') ||\r\n (selectedRadioType === 'duplicate' && selectedDuplicateImagesList.length === 0)\r\n \"\r\n class=\"btn btn-default\" type=\"button\" (click)=\"clearValue()\">Clear</button>\r\n <button class=\"btn btn-outline me-2\" (click)=\"cancel()\">Cancel</button>\r\n <button\r\n class=\"btn btn-primary\"\r\n id=\"alert-toast\"\r\n (click)=\"save(selectedType)\"\r\n [disabled]=\"\r\n (selectedRadioType === undefined || selectedRadioType === '') ||\r\n (selectedRadioType === 'duplicate' && selectedDuplicateImagesList.length === 0)\r\n \"\r\n >\r\n Save\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"!(users?.role ==='user' && users?.userType ==='client' && selectedRadioType ==='junk')\">\r\n <ng-container *ngIf=\"editBtnShow\">\r\n <div *ngIf=\"revopsTypeValue\" class=\"mb-5 text-end\" role=\"group\">\r\n <button *ngIf=\"!getTicketStatuses().includes('open') && !getTicketStatuses().includes('closed')\" class=\"btn btn-outline me-2\" (click)=\"editValue()\"><span\r\n class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M14.6554 1.71047C14.8927 1.47315 15.1745 1.2849 15.4845 1.15646C15.7946 1.02802 16.1269 0.961914 16.4626 0.961914C16.7982 0.961914 17.1305 1.02802 17.4406 1.15646C17.7507 1.2849 18.0324 1.47315 18.2697 1.71047C18.5071 1.94779 18.6953 2.22953 18.8238 2.53961C18.9522 2.84969 19.0183 3.18202 19.0183 3.51765C19.0183 3.85327 18.9522 4.18561 18.8238 4.49568C18.6953 4.80576 18.5071 5.0875 18.2697 5.32482L6.0713 17.5233L1.10156 18.8786L2.45695 13.9089L14.6554 1.71047Z\"\r\n stroke=\"#344054\" stroke-width=\"1.81079\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>Edit</button>\r\n \r\n </div>\r\n </ng-container>\r\n </div>\r\n </section>\r\n \r\n </div>\r\n\r\n <div class=\"form-check my-15\">\r\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"duplicate\"\r\n id=\"duplicate\" [(ngModel)]=\"selectedType\" [value]=\"'duplicate'\"\r\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"revopsTypeValue\">\r\n <label class=\"form-check-label\" for=\"duplicate\">\r\n <span class=\"ms-5\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\r\n viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94635)\">\r\n <path\r\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\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_2012_94635\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span class=\"ms-5 tag-class\">Duplicate</span>\r\n </label>\r\n </div>\r\n <div class=\"form-check my-15\">\r\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"employee\"\r\n id=\"employee\" [(ngModel)]=\"selectedType\" [value]=\"'employee'\"\r\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"revopsTypeValue\">\r\n <label class=\"form-check-label\" for=\"employee\">\r\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94639)\">\r\n <path\r\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\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_2012_94639\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n <span class=\"ms-5 tag-class\">Employee/Staff</span>\r\n </label>\r\n </div>\r\n <div class=\"form-check my-15\">\r\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"house-keeping\"\r\n id=\"house-keeping\" [(ngModel)]=\"selectedType\" [value]=\"'house-keeping'\"\r\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"revopsTypeValue\">\r\n <label class=\"form-check-label\" for=\"house-keeping\">\r\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\"\r\n height=\"21\" viewBox=\"0 0 21 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94643)\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\r\n fill=\"#475467\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2012_94643\">\r\n <rect width=\"21\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n <span class=\"ms-5 tag-class\"> House Keeping</span>\r\n </label>\r\n </div>\r\n <div class=\"form-check my-15\">\r\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"junk\"\r\n id=\"junk\" [(ngModel)]=\"selectedType\" [value]=\"'junk'\"\r\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"users?.role ==='user' && this.users?.userType ==='client' || revopsTypeValue\">\r\n <label class=\"form-check-label\" for=\"junk\">\r\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M3 6H5M5 6H21M5 6V20C5 20.5304 5.21071 21.0391 5.58579 21.4142C5.96086 21.7893 6.46957 22 7 22H17C17.5304 22 18.0391 21.7893 18.4142 21.4142C18.7893 21.0391 19 20.5304 19 20V6H5ZM8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M10 11V17M14 11V17\" stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</svg></span>\r\n <span class=\"ms-5 tag-class\"> Junk</span>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n \r\n <div class=\"row px-0 img-traffic mt-3 high-400px scroll-y\">\r\n <div class=\"col-md-3 border-gray mx-2 p-2 mt-5\" *ngFor=\"let obj of remainingImageArray\">\r\n <div class=\"position-relative\">\r\n <!-- <input *ngIf=\"selectedRadioType === 'duplicate'\" type=\"checkbox\" \r\n [(ngModel)]=\"obj.selected\" class=\"position-absolute absolute form-check-input\"\r\n (change)=\"onImageCheckboxChange(obj, 'duplicate')\" /> -->\r\n <input \r\n *ngIf=\"!revopsTypeValue && selectedRadioType === 'duplicate'\"\r\n type=\"checkbox\"\r\n [checked]=\"obj.selected\"\r\n class=\"position-absolute absolute form-check-input cursor-pointer\"\r\n (change)=\"onImageCheckboxChange($event, obj, 'duplicate')\"\r\n [disabled]=\"obj.duplicateImagePath?.length > 0\"\r\n/>\r\n\r\n<img\r\n class=\"img-src\"\r\n [ngClass]=\"selectedRadioType !== 'duplicate' ? 'cursor-pointer' : 'cursor-pointer'\"\r\n [src]=\"imageUrl + obj?.filePath\"\r\n (error)=\"obj.filePath = null\"\r\n alt=\"\"\r\n (click)=\"handleImageClick($event, obj)\"\r\n/>\r\n\r\n <div *ngIf=\"!obj?.filePath\" class=\"no-preview\">\r\n <span class=\"mb-5\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-5 text-center\">Preview not available</span>\r\n <span class=\"description mb-5 text-center\">The selected camera is not available at\r\n the\r\n moment.</span>\r\n </div>\r\n <div class=\"row px-2 mb-2\">\r\n <div class=\"col-md-7\">\r\n <div class=\"py-2 img-doc-time\">Tango ID : {{obj?.templd ? obj?.templd : obj?.tempId}} \r\n <span *ngIf=\"obj?.status ==='approved'\" 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\" 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></span>\r\n <span *ngIf=\"obj?.status ==='rejected'\" 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\" 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=\"img-doc-value\">Entry Time : {{obj?.entryTme ? obj?.entryTme :obj?.entryTime}}</div>\r\n </div>\r\n <div class=\"col-md-5 text-end py-3\">\r\n <span *ngIf=\"obj?.revopsType ==='non-tagging'\"\r\n ngbTooltip=\"Yet to tag the customer\" placement=\"top\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"18\"\r\n viewBox=\"0 0 19 18\" fill=\"none\">\r\n <path\r\n d=\"M6.02344 5.625H6.03094M16.2159 10.4325L10.8384 15.81C10.6991 15.9495 10.5337 16.0601 10.3516 16.1356C10.1695 16.2111 9.97431 16.2499 9.77719 16.2499C9.58006 16.2499 9.38487 16.2111 9.20278 16.1356C9.02068 16.0601 8.85525 15.9495 8.71594 15.81L2.27344 9.375V1.875H9.77344L16.2159 8.3175C16.4953 8.59854 16.6521 8.97872 16.6521 9.375C16.6521 9.77128 16.4953 10.1515 16.2159 10.4325Z\"\r\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"obj?.revopsType ==='duplicate'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\r\n viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94635)\">\r\n <path\r\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\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_2012_94635\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"obj?.revopsType ==='employee'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\r\n viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94639)\">\r\n <path\r\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\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_2012_94639\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"obj?.revopsType ==='house-keeping'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"21\"\r\n viewBox=\"0 0 21 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94643)\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\r\n fill=\"#475467\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2012_94643\">\r\n <rect width=\"21\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"obj?.revopsType ==='junk'\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n<path d=\"M3 6H5M5 6H21M5 6V20C5 20.5304 5.21071 21.0391 5.58579 21.4142C5.96086 21.7893 6.46957 22 7 22H17C17.5304 22 18.0391 21.7893 18.4142 21.4142C18.7893 21.0391 19 20.5304 19 20V6H5ZM8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M10 11V17M14 11V17\" stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</svg>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </section>\r\n </div>\r\n </section>\r\n</div>\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 <span *ngIf=\"popupType === 'non-tagging'\" class=\"my-3\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\r\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\" />\r\n <g clip-path=\"url(#clip0_2088_98337)\">\r\n <path\r\n d=\"M29.1693 13.3333V18.3333M29.1693 18.3333H24.1693M29.1693 18.3333L25.3026 14.7C24.407 13.8039 23.299 13.1493 22.0819 12.7973C20.8649 12.4453 19.5785 12.4073 18.3428 12.6869C17.1072 12.9665 15.9624 13.5545 15.0155 14.3962C14.0685 15.2378 13.3502 16.3056 12.9276 17.5M10.8359 26.6666V21.6666M10.8359 21.6666H15.8359M10.8359 21.6666L14.7026 25.3C15.5982 26.1961 16.7062 26.8506 17.9233 27.2027C19.1403 27.5547 20.4267 27.5927 21.6624 27.3131C22.898 27.0335 24.0428 26.4455 24.9897 25.6038C25.9367 24.7621 26.655 23.6943 27.0776 22.5\"\r\n stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2088_98337\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(10 10)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <!-- Heading -->\r\n <h5 class=\"modal-title mb-2\">\r\n <span *ngIf=\"popupType === 'employee'\">Tagging as employee/staff </span>\r\n <span *ngIf=\"popupType === 'duplicate'\">Tagging as duplicates </span>\r\n <span *ngIf=\"popupType === 'house-keeping'\">Tagging as house keeping </span>\r\n <span *ngIf=\"popupType === 'non-tagging'\">Clear duplicates</span>\r\n <span *ngIf=\"popupType ==='junk'\">Tagging as junk</span>\r\n \r\n </h5>\r\n <p class=\"mb-3\">\r\n <span *ngIf=\"popupType === 'employee'\">Are you sure you want to tag this as employee/staff?</span>\r\n <span *ngIf=\"popupType === 'duplicate'\">Are you sure you want to tag this as duplicates? </span>\r\n <span *ngIf=\"popupType === 'house-keeping'\">Are you sure you want to tag this as house keeping? </span>\r\n <span *ngIf=\"popupType === 'non-tagging'\">This will remove tagged duplicates and move them to\r\n 'Non-tag'.</span>\r\n <span *ngIf=\"popupType ==='junk'\">Are you sure you want to tag this as junk?</span>\r\n\r\n </p>\r\n </div>\r\n\r\n <div class=\"w-100 mt-5 d-flex justify-content-end\">\r\n <button class=\"btn btn-outline me-2\" (click)=\"cancelSubmit()\">Cancel</button>\r\n <button *ngIf=\"popupType !== 'non-tagging'\" class=\"btn btn-primary\" (click)=\"submitValue(popupType)\">\r\n Yes, Tag\r\n </button>\r\n <button *ngIf=\"popupType === 'non-tagging'\" class=\"btn btn-primary\" (click)=\"submitValue(popupType)\">\r\n Yes, clear\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<ng-template #raisedPopup 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 <span class=\"my-3\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\r\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\" />\r\n <path\r\n d=\"M21.251 11.0806C21.7405 11.0699 22.2153 11.2487 22.5762 11.5796L23.4922 12.4204C23.8089 12.7097 23.893 13.1017 23.8652 13.4263V13.4272C23.836 13.7478 23.6954 14.0592 23.4785 14.2944C23.3699 14.413 23.2865 14.5525 23.2314 14.7036C23.1764 14.8548 23.1512 15.0155 23.1582 15.1763C23.1652 15.337 23.2035 15.4953 23.2715 15.6411C23.3394 15.7869 23.4362 15.9172 23.5547 16.0259C23.6733 16.1346 23.8117 16.2198 23.9629 16.2749C24.1141 16.33 24.2748 16.3541 24.4355 16.3472C24.5961 16.3402 24.7537 16.3017 24.8994 16.2339C25.0089 16.1829 25.1106 16.116 25.2002 16.0356L25.3701 15.8657C25.5759 15.6748 25.8385 15.5408 26.1152 15.4907C26.2972 15.4546 26.485 15.4617 26.6641 15.5103C26.8439 15.5591 27.0103 15.649 27.1494 15.7729L27.1514 15.7749L28.2598 16.7905C28.445 16.9605 28.5948 17.1658 28.7002 17.394C28.8056 17.6223 28.8648 17.8694 28.874 18.1206C28.8832 18.372 28.8423 18.6234 28.7539 18.8589C28.6655 19.0941 28.5316 19.3096 28.3594 19.4927L20.1113 28.2583C19.937 28.4434 19.7268 28.5912 19.4941 28.6938C19.2614 28.7965 19.0102 28.8522 18.7559 28.856C18.5016 28.8597 18.2493 28.8119 18.0137 28.7163C17.7779 28.6206 17.5636 28.4784 17.3838 28.2983L16.2539 27.1685C15.7511 26.6656 15.8832 25.9552 16.1514 25.5542L16.2061 25.4644C16.3241 25.2486 16.3742 25.0008 16.3496 24.7544C16.3214 24.4731 16.197 24.2102 15.9971 24.0103C15.7971 23.8103 15.5343 23.6859 15.2529 23.6577C14.9715 23.6297 14.6887 23.6995 14.4531 23.856H14.4521C14.0494 24.1222 13.3407 24.2552 12.8379 23.7515L11.6797 22.5933C11.5034 22.4169 11.364 22.2074 11.2686 21.9771C11.1731 21.7467 11.1231 21.4999 11.123 21.2505C11.123 21.001 11.1731 20.7535 11.2686 20.5229C11.364 20.2926 11.5034 20.0831 11.6797 19.9067L19.9492 11.6362C20.2954 11.2902 20.7616 11.0912 21.251 11.0806ZM21.2783 12.3804C21.1237 12.3838 20.9765 12.4468 20.8672 12.5562L12.5967 20.8257C12.5409 20.8814 12.497 20.9482 12.4668 21.021C12.4367 21.0938 12.4209 21.1717 12.4209 21.2505C12.4209 21.3292 12.4367 21.4073 12.4668 21.48C12.497 21.5528 12.541 21.6196 12.5967 21.6753L13.7061 22.7837L13.7314 22.772C14.2169 22.4485 14.7993 22.3035 15.3799 22.3608C15.9608 22.4183 16.5042 22.6747 16.917 23.0874C17.3298 23.5002 17.587 24.0436 17.6445 24.6245C17.702 25.2055 17.5565 25.7892 17.2324 26.2749L17.2305 26.2759C17.2261 26.2822 17.2226 26.2893 17.2197 26.2964L18.3018 27.3804C18.3585 27.4372 18.4266 27.482 18.501 27.5122C18.5755 27.5425 18.6559 27.5574 18.7363 27.5562C18.8166 27.5549 18.8963 27.5378 18.9697 27.5054C19.043 27.4729 19.1091 27.4261 19.1641 27.3677L27.4131 18.6021C27.4673 18.5442 27.5093 18.4761 27.5371 18.4019C27.5649 18.3276 27.5781 18.2487 27.5752 18.1694C27.5722 18.0902 27.5538 18.0119 27.5205 17.9399C27.4872 17.8679 27.4394 17.8032 27.3809 17.7495L26.3223 16.7778C26.2925 16.7885 26.2648 16.8053 26.2432 16.8286C26.0217 17.0788 25.7529 17.2827 25.4521 17.4282C25.15 17.5743 24.8214 17.6585 24.4863 17.6763C24.1511 17.694 23.815 17.6452 23.499 17.5317C23.1832 17.4183 22.8928 17.2429 22.6455 17.0161C22.3982 16.7893 22.1988 16.5153 22.0586 16.2104C21.9183 15.9055 21.8404 15.5752 21.8291 15.2397C21.8178 14.9043 21.8737 14.57 21.9932 14.2563C22.1121 13.9442 22.2915 13.6587 22.5215 13.4165L22.5547 13.3657C22.5594 13.3552 22.5607 13.3437 22.5635 13.3325L21.6973 12.5386V12.5376C21.5833 12.4331 21.4329 12.377 21.2783 12.3804Z\"\r\n fill=\"#00A3FF\" stroke=\"#00A3FF\" stroke-width=\"0.3\" />\r\n </svg>\r\n </span>\r\n <!-- Heading -->\r\n <h5 class=\"modal-title mb-2\">\r\n <span>Raise tickets for the following</span>\r\n\r\n </h5>\r\n <p class=\"mb-3\">\r\n <span>Raising a ticket for footfall count issues. Make sure all records are identified for\r\n validation.</span>\r\n\r\n\r\n </p>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-3 my-4\">\r\n <div class=\"border border-1 rounded p-3 h-100\">\r\n <div class=\"fw-semibold fs-5 mb-2\">\r\n {{tempRaisedPayload?.duplicateCount ? tempRaisedPayload?.duplicateCount :'0'}}\r\n </div>\r\n <div class=\"fw-semibold text-muted fs-6 mt-2\">\r\n Duplicates\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-3 my-4\">\r\n <div class=\"border border-1 rounded p-3 h-100\">\r\n <div class=\"fw-semibold fs-5 mb-2\">\r\n {{tempRaisedPayload?.employeeCount ? tempRaisedPayload?.employeeCount:'0' }}\r\n </div>\r\n <div class=\"fw-semibold text-muted fs-6 mt-2\">\r\n Employee\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-3 my-4\">\r\n <div class=\"border border-1 rounded p-3 h-100\">\r\n <div class=\"fw-semibold fs-5 mb-2\">\r\n {{tempRaisedPayload?.houseKeepingCount ? tempRaisedPayload?.houseKeepingCount :'0'}}\r\n </div>\r\n <div class=\"fw-semibold text-muted fs-6 mt-2\">\r\n House Keeping\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 my-4\">\r\n <div class=\"border border-1 rounded p-3 h-100\">\r\n <div class=\"fw-semibold fs-5 mb-2\">\r\n {{tempRaisedPayload?.junkCount ? tempRaisedPayload?.junkCount :'0'}}\r\n </div>\r\n <div class=\"fw-semibold text-muted fs-6 mt-2\">\r\n Junk\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Label and Textarea -->\r\n <div class=\"my-3\">\r\n <label class=\"form-label\">Description (Optional)</label>\r\n <textarea rows=\"3\" [(ngModel)]=\"commentText\" class=\"form-control\"\r\n placeholder=\"Enter description\"></textarea>\r\n </div>\r\n <div class=\"w-100 mt-5 d-flex justify-content-end\">\r\n\r\n <button class=\"btn btn-outline w-50 me-2\" (click)=\"cancelRasied()\">Cancel</button>\r\n <button class=\"btn btn-primary w-50\" (click)=\"submitRaised()\">\r\n Raise Ticket\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<ng-template #imagePopup let-model>\r\n <div class=\"mx-4\">\r\n <div class=\"row\">\r\n <div class=\" p-2 mb-2 mt-5\">\r\n <div *ngIf=\"isModalOpen\" class=\"position-relative border-gray p-2 \">\r\n <!-- <button *ngIf=\"canNavigateLeft\" (click)=\"navigateImage('left')\"\r\n class=\"btn btn-light position-absolute start-0 top-50 z-index-10\">\r\n \u25C0\r\n </button> -->\r\n\r\n <!-- Main Image -->\r\n <img class=\" cursor-pointer w-100 h-525px\"\r\n [src]=\"imageUrl + selectImageArray?.filePath\" appMagnifier alt=\"\">\r\n <!-- <button *ngIf=\"canNavigateRight\" (click)=\"navigateImage('right')\"\r\n class=\"btn btn-light position-absolute end-0 top-50 z-index-10\">\r\n \u25B6\r\n </button> -->\r\n\r\n <!-- Right arrow button -->\r\n <div class=\"row px-2 mb-2\">\r\n <div class=\"col-md-7\">\r\n <div class=\"py-2 img-doc-time\">Tango ID : {{selectImageArray?.templd}}\r\n <span *ngIf=\"selectImageArray?.status ==='approved'\" 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\" 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></span>\r\n <span *ngIf=\"selectImageArray?.status ==='rejected'\" 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\" 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=\"img-doc-value\">Entry Time : {{selectImageArray?.entryTme}}</div>\r\n </div>\r\n <div class=\"col-md-5 text-end py-3\">\r\n <span *ngIf=\"selectImageArray?.revopsType ==='non-tagging'\"\r\n ngbTooltip=\"Yet to tag the customer\" placement=\"top\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"18\"\r\n viewBox=\"0 0 19 18\" fill=\"none\">\r\n <path\r\n d=\"M6.02344 5.625H6.03094M16.2159 10.4325L10.8384 15.81C10.6991 15.9495 10.5337 16.0601 10.3516 16.1356C10.1695 16.2111 9.97431 16.2499 9.77719 16.2499C9.58006 16.2499 9.38487 16.2111 9.20278 16.1356C9.02068 16.0601 8.85525 15.9495 8.71594 15.81L2.27344 9.375V1.875H9.77344L16.2159 8.3175C16.4953 8.59854 16.6521 8.97872 16.6521 9.375C16.6521 9.77128 16.4953 10.1515 16.2159 10.4325Z\"\r\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"selectImageArray?.revopsType ==='duplicate'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\r\n viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94635)\">\r\n <path\r\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\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_2012_94635\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"selectImageArray?.revopsType ==='employee'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\r\n viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94639)\">\r\n <path\r\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\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_2012_94639\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"selectImageArray?.revopsType ==='house-keeping'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"21\"\r\n viewBox=\"0 0 21 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94643)\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\r\n fill=\"#475467\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2012_94643\">\r\n <rect width=\"21\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"modal-footer py-2 px-0\"> -->\r\n\r\n <div class=\"w-100 py-2 mb-2 px-0 d-flex justify-content-end\">\r\n \r\n <button class=\"btn btn-outline\" (click)=\"closeImage()\">Close</button>\r\n \r\n </div>\r\n <!-- </div> -->\r\n </div>\r\n</ng-template>", styles: [".switch-form-card{padding:8px 16px;border-radius:4px;border-left:2px solid var(--Primary-600, #00A3FF);background:var(--Primary-25, #F6FCFF);display:flex;align-items:center;justify-content:space-between}.switch-form-card .txt-one{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;line-height:140%}.nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.badge-num-primary{border-radius:16px!important;background:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-700, #009BF3)!important;text-align:center;font-size:14px!important;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.badge-num-muted{border-radius:16px!important;background:var(--Primary-50, #F2F4F7)!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.img-src{width:100%;height:195px;border-radius:.625rem}.img-traffic .col-md-3{width:24%!important}.border-gray{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF)}.img-doc-directory{color:var(--Gray-900, #101828)!important;font-size:14px!important;font-weight:600;line-height:20px;text-decoration-line:underline}.img-doc-time{color:var(--Gray-800, #1D2939);font-size:14px;font-weight:500;line-height:20px}.img-doc-value{color:var(--Gray-600, #667085);font-size:14px;font-weight:500;line-height:20px}.overflow-x{overflow-x:auto}.no-preview{border:1px solid #F04438;background:#fee4e2;border-radius:8px;stroke-width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:41px 16px}.no-preview .header{color:#f04438;font-size:20px;font-weight:700;line-height:20px}.no-preview .description{color:#f04438;font-size:12px;font-weight:500;line-height:18px}.img-nodata{width:25%;height:15%}.img-nodata1{width:15%;height:15%}.nodata-title{font-size:14px!important;font-weight:600}.img-direc{color:var(--Gray-900, #101828)!important;font-size:18px!important;font-weight:500;line-height:28px}.custom-accordion{border-radius:5px}.custom-accordion-item{margin-bottom:10px}.custom-accordion-header{background-color:#fff;border:none;cursor:pointer;padding:10px;text-align:left;width:100%;display:flex;justify-content:space-between;align-items:center}.custom-accordion{width:100%}.mainheading{width:100%;display:flex;justify-content:space-between;align-items:center;padding:19px;border:none;background:none;cursor:pointer}.header-row{display:flex;align-items:center;width:100%;justify-content:space-between}.img-dire{font-size:16px;font-weight:700}.divider{flex-grow:1;height:1px;background-color:#ddd;margin:0 10px}.accordion-arrow{display:flex;align-items:center}.scroll-container{max-height:400px;overflow-y:auto;overflow-x:hidden}.high-400px{min-height:auto!important;max-height:800px!important}.scroll-y{overflow-y:auto}.absolute{top:5px;right:5px;z-index:2}.slider{position:relative}.slider .previous{position:absolute;top:30%;left:2%;width:32px;height:32px;background-color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer}.slider .next{position:absolute;top:30%;right:2%;width:32px;height:32px;background-color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer}.img-src1{border-radius:12px;border:1px solid var(--Gray-400, #98A2B3);background:var(--Gray-50, #F9FAFB);width:100%;height:375px}.border-gray{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);padding:0 4px}.border-gray-active{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--Primary-50, #EAF8FF);padding:0 4px}.zone-header{color:var(--Gray-900, #101828);font-size:14px;font-weight:600;line-height:20px}.last-visit{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.toggle-label{color:var(--Gray-900, #101828);font-size:16px;font-weight:600;line-height:24px}.nav-dev{border-radius:8px!important;border:1px solid var(--Primary-200, #99DAFF)!important;background:var(--Primary-25, #F6FCFF)!important}.tab-active{border-radius:6px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)!important;font-size:14px;font-weight:500;line-height:20px}.tab-text-default{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px}.border-gray-active1{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--Primary-50, #ffffff);padding:12px!important}.nav-item1 .nav-link1.active{border:none;border-radius:0;background:var(--Primary-50, #EAF8FF);border-bottom:2px solid #009BF3!important;padding:12px;color:var(--Primary-700, #009BF3);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.active-normal{padding:12px;color:var(--Gray-500, #667085);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.nav-item1 .nav-link1:hover{border:none}.tag-class{color:var(--Gray-900, #101828);font-size:14px;font-weight:600;line-height:20px}.spent-title{color:var(--Gray-600, #475467);font-size:14px;font-weight:600;line-height:20px}.spent-value{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.spent-value1{color:var(--Primary-500, #33B5FF);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:none;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.w-33{width:30%}.w-45{width:45%}.view-tetory{color:var(--Primary-700, #009BF3);font-size:14px;font-weight:600;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:none;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;text-transform:capitalize}.border-gray-tagged{border-radius:4px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--Primary-50, #ffffff);padding:8px!important}.desc-id{color:var(--Gray-900, #101828);font-size:12px;font-style:normal;font-weight:400;line-height:20px}.active-tab{border-bottom:2px solid #0d6efd;font-weight:600;color:#0d6efd}.badge-selected{background-color:#e0f3ff;color:#0d6efd;border:1px solid #0d6efd;border-radius:20px;padding:6px 12px}.badge-unselected{background-color:#f0f0f0;color:#333;border-radius:20px;padding:6px 12px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.cursor-not-allowed{cursor:not-allowed!important}.title-type{color:var(--Gray-800, #1D2939);font-size:16px;font-weight:600;line-height:24px}.top-50{top:35%!important}.activePlanBtn{border-radius:6px;background:var(--Primary-50, #EAF8FF);color:var(--Gray-700, #344054);font-size:14px!important;font-weight:500!important;line-height:20px}.inactivePlanBtn{color:var(--Gray-500, #344054)!important;font-size:14px;font-weight:500!important;line-height:20px}.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}input[type=checkbox]{width:18px!important;height:18px!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}::ng-deep .modal-backdrop{pointer-events:none}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.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: i7.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i8.MagnifierDirective, selector: "[appMagnifier]" }, { kind: "pipe", type: i6.DatePipe, name: "date" }] });
|
|
1312
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ImgRvpsComponent, selector: "lib-img-rvps", viewQueries: [{ propertyName: "zoomPopup", first: true, predicate: ["zoomPopup"], descendants: true }, { propertyName: "raisedPopup", first: true, predicate: ["raisedPopup"], descendants: true }, { propertyName: "resetRequestPopup", first: true, predicate: ["resetRequestPopup"], descendants: true }, { propertyName: "imagePopup", first: true, predicate: ["imagePopup"], descendants: true }], ngImport: i0, template: "<div class=\"card mt-3\">\n <div class=\"card-header mt-3 px-0 border-bottom-0\">\n <div class=\"custom-accordion\">\n <div class=\"custom-accordion-item\">\n <!-- for new navigation changes -->\n <!-- old view while folder view -->\n <button *ngIf=\"folderView\" class=\"mainheading pb-0 custom-accordion-header\" (click)=\"toggleAccordion()\">\n <div class=\"header-row\">\n <span class=\"img-direc\">Image Directory</span>\n\n <span class=\"divider\"></span>\n <span class=\"accordion-arrow\">\n <!-- Down arrow for collapsed state, up arrow for expanded state -->\n <svg *ngIf=\"!isAccordionExpanded\" xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"6\"\n viewBox=\"0 0 16 6\" fill=\"none\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"#071437\" stroke-width=\"1\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <svg *ngIf=\"isAccordionExpanded\" xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"6\"\n viewBox=\"0 0 16 6\" fill=\"none\">\n <path d=\"M1 5L5 1L9 5\" stroke=\"#1b84ff\" stroke-width=\"1\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n </div>\n </button>\n <!-- new view while not in folder view view -->\n <div *ngIf=\"!folderView\" class=\"header-row\">\n <span *ngIf=\"backnav && !imageFlow\" class=\"cursor-pointer\" (click)=\"backToFootfall()\">\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g filter=\"url(#filter0_d_2585_7036)\">\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\n <path d=\"M25.8327 19H14.166M14.166 19L19.9993 24.8334M14.166 19L19.9993 13.1667\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <filter id=\"filter0_d_2585_7036\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\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\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_2585_7036\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2585_7036\"\n result=\"shape\" />\n </filter>\n </defs>\n </svg>\n </span>\n <!-- back from image flow -->\n <span *ngIf=\"imageFlow\" class=\"cursor-pointer\" (click)=\"backToFootfall1()\">\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g filter=\"url(#filter0_d_2585_7036)\">\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\n <path d=\"M25.8327 19H14.166M14.166 19L19.9993 24.8334M14.166 19L19.9993 13.1667\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <filter id=\"filter0_d_2585_7036\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\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\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_2585_7036\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2585_7036\"\n result=\"shape\" />\n </filter>\n </defs>\n </svg>\n </span>\n <span class=\"img-direc\">Image Directory | {{folderDate | date:'dd MMM, yyyy'}}</span>\n <button *ngIf=\"!folderView\" class=\"mainheading-1 pb-0 custom-accordion-header\"\n (click)=\"toggleAccordion()\">\n <span class=\"divider\"></span>\n <span class=\"accordion-arrow\">\n <!-- Down arrow for collapsed state, up arrow for expanded state -->\n <svg *ngIf=\"!isAccordionExpanded\" xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"6\"\n viewBox=\"0 0 16 6\" fill=\"none\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"#071437\" stroke-width=\"1\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <svg *ngIf=\"isAccordionExpanded\" xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"6\"\n viewBox=\"0 0 16 6\" fill=\"none\">\n <path d=\"M1 5L5 1L9 5\" stroke=\"#1b84ff\" stroke-width=\"1\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <section *ngIf=\"isAccordionExpanded\">\n\n <div *ngIf=\"folderView\" class=\"card-body px-0\">\n <div class=\"date-list-container\">\n <div class=\"date-list-scroll\">\n <div class=\"date-card\" *ngFor=\"let obj of dateArray; let i = index\"\n [ngClass]=\"{'date-card-active': i === selectIndex}\" (click)=\"getimages(i, obj)\">\n <div class=\"date-card-header\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\" class=\"calendar-icon\">\n <path\n d=\"M12.6667 2.66667H12V2C12 1.63181 11.7015 1.33333 11.3333 1.33333C10.9651 1.33333 10.6667 1.63181 10.6667 2V2.66667H5.33333V2C5.33333 1.63181 5.03486 1.33333 4.66667 1.33333C4.29848 1.33333 4 1.63181 4 2V2.66667H3.33333C2.59695 2.66667 2 3.26362 2 4V13.3333C2 14.0697 2.59695 14.6667 3.33333 14.6667H12.6667C13.403 14.6667 14 14.0697 14 13.3333V4C14 3.26362 13.403 2.66667 12.6667 2.66667ZM12.6667 13.3333H3.33333V6H12.6667V13.3333Z\"\n fill=\"#667085\" />\n </svg>\n <span class=\"date-text\">{{obj | date:'dd MMM'}}</span>\n <span *ngIf=\"cardDataMap[obj]?.ticketStatusLower as status\" class=\"badge ms-2\" [ngClass]=\"{\n 'badge-light-success': status === 'closed',\n 'badge-light-warning': status === 'raised',\n 'badge-light-default': status !== 'closed' && status !== 'raised'\n }\">\n {{ status === 'closed' ? 'Ticket closed' : (status === 'raised' ? 'Ticket raised' :\n (cardDataMap[obj]?.ticketStatus || '')) }}\n </span>\n </div>\n <div class=\"footfall-count\">{{ cardDataMap[obj]?.footfallCount || 0 }}</div>\n <div class=\"footfall-label\">Total footfall</div>\n </div>\n </div>\n </div>\n </div>\n\n\n\n <div *ngIf=\"!folderView\" class=\"card-body\">\n <section *ngIf=\"!imageFlow\">\n <div class=\"row\">\n <!-- Ticket Block Alert -->\n <div *ngIf=\"getSelectedDateCardData()?.raisedStatusEnabled === 'block'\" class=\"col-12 mb-3\">\n <div class=\"ticket-block-alert\">\n <div class=\"ticket-block-alert-content\">\n <div class=\"ticket-block-alert-icon\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"12\" cy=\"12\" r=\"12\" fill=\"#F04438\" />\n <path d=\"M12 8V13\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n </div>\n <div class=\"ticket-block-alert-text\">\n <div class=\"ticket-block-alert-title\">\n You cannot raise ticket for next {{ getSelectedDateCardData()?.noOfBlockedDays\n || '0' }} days\n </div>\n <div class=\"ticket-block-alert-description\">\n It looks like you have achieved 95% accuracy for the three tickets raised this\n month. This limits you from raising more tickets to avoid redundancy.\n </div>\n <div class=\"ticket-block-alert-action\">\n If you still want to raise tickets, <span class=\"ticket-block-alert-link\"\n (click)=\"requestReset()\">send request</span> to reset.\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Ticket Request Success Alert -->\n <div *ngIf=\"getSelectedDateCardData()?.raisedStatusEnabled === 'request'\" class=\"col-12 mb-3\">\n <div class=\"ticket-request-alert\">\n <div class=\"ticket-request-alert-content\">\n <div class=\"ticket-request-alert-icon\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 21L23 12L2 3V10L17 12L2 14V21Z\" fill=\"#10B981\" />\n </svg>\n </div>\n <div class=\"ticket-request-alert-text\">\n <div class=\"ticket-request-alert-title\">\n Reset Request Sent\n </div>\n <div class=\"ticket-request-alert-description\">\n Your request to enable ticket raising has been submitted. You'll be notified\n once it's approved. Please ensure future ticket accuracy remains within the 95%\n threshold.\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- footfall trends feature -->\n <ng-container *ngTemplateOutlet=\"footfallTrendsTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"ticketStatusTemplate\"></ng-container>\n <span class=\"divider\"></span>\n <!-- footfall trends feature end -->\n <div class=\"d-flex flex-shrink-0 mt-3 justify-content-start align-items-center px-0\">\n <!-- <span *ngIf=\"backnav\" class=\"cursor-pointer\" (click)=\"backToFootfall()\">\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g filter=\"url(#filter0_d_2585_7036)\">\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\n <path d=\"M25.8327 19H14.166M14.166 19L19.9993 24.8334M14.166 19L19.9993 13.1667\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <filter id=\"filter0_d_2585_7036\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\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\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_2585_7036\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2585_7036\"\n result=\"shape\" />\n </filter>\n </defs>\n </svg>\n </span> -->\n <!-- <span class=\"img-direc ms-2 mt-1\">{{folderDate | date:'dd MMM, yyyy'}}\n <span class=\"badge badge-light-warning mx-2\"\n *ngIf=\"!getTicketStatuses().includes('closed') && getTicketStatuses().includes('open')\">\n Ticket Raised\n </span>\n <span class=\"badge badge-light-success mx-2\"\n *ngIf=\"getTicketStatuses().includes('closed')\">Ticket Closed</span>\n\n </span> -->\n <div *ngIf=\"!getTicketStatuses().includes('open') && !getTicketStatuses().includes('closed')\"\n class=\"ms-auto text-end\">\n <button [disabled]=\"!canEnableButton()\" class=\"btn btn-primary\" type=\"button\"\n (click)=\"Raised()\">\n Raise ticket\n </button>\n </div>\n </div>\n <div *ngIf=\"!folderView\" class=\"d-flex flex-wrap align-items-center justify-content-between w-100 my-2 gap-3\">\n <div class=\"nav-group bg-white border-1 btn-group w-auto\">\n <ng-container *ngIf=\"!(countData?.length > 0)\">\n \n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'footfall' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('footfall')\">\n Total Footfall\n <span\n [ngClass]=\"type === 'footfall' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\n {{ countData?.footfallCount || 0 }}\n </span>\n </button>\n \n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'non-tagging' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('non-tagging')\">\n Non-tags\n <span\n [ngClass]=\"type === 'non-tagging' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\n {{ countData?.nonTags || 0 }}\n </span>\n </button>\n \n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'duplicate' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('duplicate')\">\n Duplicated\n <span\n [ngClass]=\"type === 'duplicate' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\n {{ countData?.duplicate || 0 }}\n </span>\n </button>\n \n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'employee' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('employee')\">\n Employee/Staff\n <span\n [ngClass]=\"type === 'employee' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\n {{ countData?.employee || 0 }}\n </span>\n </button>\n <button class=\"btn btn-outline px-6 py-3\" [ngClass]=\"type === 'junk' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('junk')\">\n Junk\n <span\n [ngClass]=\"type === 'junk' ? 'badge badge-active activePlanBtn' : ' badge badge-light-default inactivePlanBtn'\">\n {{ countData?.junk || 0 }}\n </span>\n </button>\n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'house-keeping' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('house-keeping')\">\n House Keeping\n <span\n [ngClass]=\"type === 'house-keeping' ? 'badge badge-active activePlanBtn' : ' badge badge-light-default inactivePlanBtn'\">\n {{ countData?.housekeeping || 0 }}\n </span>\n </button>\n \n \n </ng-container>\n \n </div>\n \n <div class=\"btn-group view-toggle ms-auto\" role=\"group\" aria-label=\"Toggle view\">\n <button type=\"button\" class=\"btn btn-outline px-3 py-2\" [ngClass]=\"{'active': viewMode === 'grid'}\"\n (click)=\"setViewMode('grid')\" aria-label=\"Grid view\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"3\" y=\"3\" width=\"4\" height=\"4\" rx=\"1\" stroke=\"#475467\"\n [attr.fill]=\"viewMode === 'grid' ? '#EAF8FF' : 'none'\"></rect>\n <rect x=\"11\" y=\"3\" width=\"4\" height=\"4\" rx=\"1\" stroke=\"#475467\"\n [attr.fill]=\"viewMode === 'grid' ? '#EAF8FF' : 'none'\"></rect>\n <rect x=\"3\" y=\"11\" width=\"4\" height=\"4\" rx=\"1\" stroke=\"#475467\"\n [attr.fill]=\"viewMode === 'grid' ? '#EAF8FF' : 'none'\"></rect>\n <rect x=\"11\" y=\"11\" width=\"4\" height=\"4\" rx=\"1\" stroke=\"#475467\"\n [attr.fill]=\"viewMode === 'grid' ? '#EAF8FF' : 'none'\"></rect>\n </svg>\n </button>\n <button type=\"button\" class=\"btn btn-outline px-3 py-2\" [ngClass]=\"{'active': viewMode === 'list'}\"\n (click)=\"setViewMode('list')\" aria-label=\"List view\">\n <svg width=\"20\" height=\"18\" viewBox=\"0 0 20 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2\" y=\"3\" width=\"4\" height=\"4\" rx=\"1\" stroke=\"#475467\"\n [attr.fill]=\"viewMode === 'list' ? '#EAF8FF' : 'none'\"></rect>\n <rect x=\"8\" y=\"4.5\" width=\"10\" height=\"1.5\" rx=\"0.75\" fill=\"#475467\"></rect>\n <rect x=\"8\" y=\"12.5\" width=\"10\" height=\"1.5\" rx=\"0.75\" fill=\"#475467\"></rect>\n <rect x=\"2\" y=\"11\" width=\"4\" height=\"4\" rx=\"1\" stroke=\"#475467\"\n [attr.fill]=\"viewMode === 'list' ? '#EAF8FF' : 'none'\"></rect>\n </svg>\n </button>\n </div>\n </div>\n <ng-container *ngIf=\"!imageFlow\">\n <div *ngIf=\"type === 'footfall' && viewMode === 'grid'\" class=\"d-flex mt-2 mb-2 w-100 overflow-x px-0\">\n <div class=\"col text-nowrap\" *ngFor=\"let obj of objectsArray\">\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\n <li class=\"nav-item cursor-pointer\">\n <a (click)=\"selectedTimes(obj.timeRange)\"\n [ngClass]=\"selectedTime === obj?.timeRange ? 'active' : ''\"\n class=\"nav-link cursor-pointer no-border mx-3 mb-2\">\n {{obj?.timeRange}}<span class=\"mx-2\"\n [ngClass]=\"selectedTime === obj?.timeRange ? 'badge-num-primary' :'badge-num-muted'\">\n {{ obj?.count ? obj?.count : 0 }}\n </span>\n </a>\n </li>\n </ul>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n </div>\n <div *ngIf=\"noData\" class=\"row\">\n\n <div class=\"col-lg-12 mb-3\">\n\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column \" style=\"margin: 64px;border-radius: 8px;\nbackground: var(--Gray-50, #F9FAFB);\">\n <svg width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\"\n stroke-width=\"13.3333\" />\n <path\n d=\"M35.332 51.9999H33.6654C32.7813 51.9999 31.9335 51.6487 31.3083 51.0236C30.6832 50.3985 30.332 49.5506 30.332 48.6666V33.6666C30.332 32.7825 30.6832 31.9347 31.3083 31.3096C31.9335 30.6844 32.7813 30.3333 33.6654 30.3333H48.6654C49.5494 30.3333 50.3973 30.6844 51.0224 31.3096C51.6475 31.9347 51.9987 32.7825 51.9987 33.6666V35.3333M45.332 41.9999H60.332C62.173 41.9999 63.6654 43.4923 63.6654 45.3333V60.3333C63.6654 62.1742 62.173 63.6666 60.332 63.6666H45.332C43.4911 63.6666 41.9987 62.1742 41.9987 60.3333V45.3333C41.9987 43.4923 43.4911 41.9999 45.332 41.9999Z\"\n stroke=\"#00A3FF\" stroke-width=\"4\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <div class=\"nodata-title my-3\">\n {{ noDataMessages[type?.toLowerCase()] || 'No data found' }}\n </div>\n\n </div>\n </div>\n\n </div>\n\n\n <!-- Split-screen layout (only shown after clicking an image) -->\n <div class=\"split-screen-container\" *ngIf=\"splitScreenEnabled && !noData && !loading\">\n <!-- Left Panel: Thumbnail List + Related Images -->\n <div class=\"left-panel\">\n <!-- Main Images List (hidden when duplicate is selected) -->\n <ng-container *ngIf=\"selectedRadioType !== 'duplicate'\">\n <div class=\"thumbnail-list-section\" *ngFor=\"let group of listViewGroups\">\n <div class=\"time-range-header\">\n <span class=\"time-range-title\">{{ group?.timeRange }}</span>\n <span class=\"time-range-count\">#{{ group?.data?.length || 0 }}</span>\n </div>\n <div class=\"thumbnail-grid\">\n <div class=\"thumbnail-item\" *ngFor=\"let obj of group?.data\"\n [ngClass]=\"{'selected': selectImageArray?.templd === obj?.templd}\"\n (click)=\"selectImageForSplitView(obj)\">\n <img class=\"thumbnail-image\" [src]=\"imageUrl + obj?.filePath\"\n (error)=\"obj.filePath = null\" alt=\"\" *ngIf=\"obj?.filePath\" />\n <div *ngIf=\"!obj?.filePath\" class=\"no-preview\"\n style=\"height: 120px; padding: 20px;\">\n <span style=\"color: #667085; font-size: 11px;\">No preview</span>\n </div>\n <div class=\"thumbnail-info\">\n <div class=\"tango-id\">Tango ID: {{ obj?.templd }}</div>\n <div class=\"entry-time\">Entry Time: {{ obj?.entryTme || obj?.entryTime\n }}</div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- Related Images Section (ONLY shown when duplicate is selected) -->\n <div class=\"thumbnail-list-section\"\n *ngIf=\"selectedRadioType === 'duplicate' && remainingImagesGroups && remainingImagesGroups.length > 0\">\n <!-- <div class=\"time-range-header\">\n <span class=\"time-range-title\">Select related images</span>\n </div> -->\n <div class=\"thumbnail-list-section\" *ngFor=\"let group of remainingImagesGroups\">\n <div class=\"time-range-header\" style=\"margin-top: 16px;\">\n <span class=\"time-range-title\">{{ group?.timeRange }}</span>\n <span class=\"time-range-count\">#{{ group?.data?.length || 0 }}</span>\n </div>\n <div class=\"thumbnail-grid\">\n <div class=\"thumbnail-item\" *ngFor=\"let obj of group?.data\"\n [ngClass]=\"{'selected': obj.selected}\">\n <div class=\"position-relative\">\n <input *ngIf=\"!revopsTypeValue && selectedRadioType === 'duplicate'\"\n type=\"checkbox\" [checked]=\"obj.selected\"\n class=\"position-absolute absolute form-check-input cursor-pointer\"\n style=\"top: 5px; right: 5px; z-index: 2;\"\n (change)=\"onImageCheckboxChange($event, obj, 'duplicate')\"\n (click)=\"$event.stopPropagation()\"\n [disabled]=\"obj.duplicateImagePath?.length > 0\" />\n <img class=\"thumbnail-image cursor-pointer\"\n [src]=\"imageUrl + obj?.filePath\" (error)=\"obj.filePath = null\"\n alt=\"\" *ngIf=\"obj?.filePath\"\n (click)=\"handleImageClick($event, obj)\" />\n <div *ngIf=\"!obj?.filePath\" class=\"no-preview cursor-pointer\"\n style=\"height: 120px; padding: 20px;\"\n (click)=\"handleImageClick($event, obj)\">\n <span style=\"color: #667085; font-size: 11px;\">No preview</span>\n </div>\n <div class=\"thumbnail-info\">\n <div class=\"tango-id\">Tango ID: {{ obj?.templd || obj?.tempId }}\n </div>\n <div class=\"entry-time\">Entry Time: {{ obj?.entryTme ||\n obj?.entryTime }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Right Panel: Selected Image Details -->\n <div class=\"right-panel\" *ngIf=\"selectImageArray\">\n <ng-container\n *ngTemplateOutlet=\"imageDetailView; context: { $implicit: selectImageArray }\"></ng-container>\n </div>\n <div class=\"right-panel\" *ngIf=\"!selectImageArray\"\n style=\"display: flex; align-items: center; justify-content: center; color: var(--Gray-500, #667085);\">\n <div style=\"text-align: center;\">\n <p style=\"font-size: 16px; font-weight: 500;\">Select an image to view details</p>\n </div>\n </div>\n </div>\n\n <!-- Image Detail View Template for Split-Screen Right Panel -->\n <ng-template #imageDetailView let-obj>\n <div class=\"border-gray p-3 mb-3\">\n <div class=\"position-relative\">\n <img class=\"img-src1\" [src]=\"imageUrl + obj?.filePath\" alt=\"\" *ngIf=\"obj?.filePath\" />\n <!-- Zoom Icon -->\n <div class=\"zoom-icon-button\" (click)=\"openImageZoomModal(imageUrl, obj)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\n fill=\"none\">\n <path\n d=\"M18.3333 18.3333L15 15M16.6667 9.16667C16.6667 13.3067 13.3067 16.6667 9.16667 16.6667C5.02667 16.6667 1.66667 13.3067 1.66667 9.16667C1.66667 5.02667 5.02667 1.66667 9.16667 1.66667C13.3067 1.66667 16.6667 5.02667 16.6667 9.16667Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M9.16667 6.66667V11.6667M6.66667 9.16667H11.6667\" stroke=\"#475467\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n <div *ngIf=\"!obj?.filePath\" class=\"no-preview\" style=\"height: 375px;\">\n <span class=\"mb-5\">\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"Group\">\n <path id=\"Vector\"\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path id=\"Vector_2\"\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n </svg>\n </span>\n <span class=\"header mb-5 text-center\">Preview not available</span>\n <span class=\"description mb-5 text-center\">The selected camera is not available at\n the moment.</span>\n </div>\n </div>\n <div class=\"row px-2 mb-2 mt-3\">\n <div class=\"col-md-7\">\n <div class=\"py-2 img-doc-time\">Tango ID : {{obj?.templd}}\n <span *ngIf=\"obj?.status ==='approved'\" class=\"ms-2\">\n <svg style=\"width: 20px; height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\"\n width=\"10\" height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\n <rect y=\"0.5\" width=\"10\" height=\"10\" rx=\"5\" fill=\"#D1FADF\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\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\"\n fill=\"#12B76A\" />\n </svg>\n </span>\n <span *ngIf=\"obj?.status ==='rejected'\" class=\"ms-2\">\n <svg style=\"width: 20px; height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\"\n width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\n <g clip-path=\"url(#clip0_1428_59484)\">\n <path\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\n fill=\"#FEE4E2\" />\n <path\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\"\n stroke=\"#D92D20\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_1428_59484\">\n <rect width=\"12\" height=\"12\" fill=\"white\"\n transform=\"translate(0.599609 0.5)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n </div>\n <div class=\"img-doc-value\">Entry Time : {{obj?.entryTme || obj?.entryTime}}</div>\n </div>\n <div class=\"col-md-5 text-end py-3\">\n <span *ngIf=\"obj?.revopsType ==='non-tagging'\" ngbTooltip=\"Yet to tag the customer\"\n placement=\"top\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"18\"\n viewBox=\"0 0 19 18\" fill=\"none\">\n <path\n d=\"M6.02344 5.625H6.03094M16.2159 10.4325L10.8384 15.81C10.6991 15.9495 10.5337 16.0601 10.3516 16.1356C10.1695 16.2111 9.97431 16.2499 9.77719 16.2499C9.58006 16.2499 9.38487 16.2111 9.20278 16.1356C9.02068 16.0601 8.85525 15.9495 8.71594 15.81L2.27344 9.375V1.875H9.77344L16.2159 8.3175C16.4953 8.59854 16.6521 8.97872 16.6521 9.375C16.6521 9.77128 16.4953 10.1515 16.2159 10.4325Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='duplicate'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\n viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94635)\">\n <path\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94635\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='employee'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\n viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94639)\">\n <path\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94639\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='house-keeping'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"21\"\n viewBox=\"0 0 21 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94643)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\n fill=\"#475467\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94643\">\n <rect width=\"21\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='junk'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M3 6H5M5 6H21M5 6V20C5 20.5304 5.21071 21.0391 5.58579 21.4142C5.96086 21.7893 6.46957 22 7 22H17C17.5304 22 18.0391 21.7893 18.4142 21.4142C18.7893 21.0391 19 20.5304 19 20V6H5ZM8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M10 11V17M14 11V17\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n </div>\n </div>\n </div>\n <div class=\"border-gray p-3\">\n <div class=\"row mb-3\">\n <div class=\"col-md-6 title-type\">Select non-shopper type</div>\n <div class=\"col-md-6 text-end\"\n *ngIf=\"!(users?.role ==='user' && users?.userType ==='client' && selectedRadioType ==='junk')\">\n <div *ngIf=\"!getTicketStatuses().includes('open') && !getTicketStatuses().includes('closed')\" class=\"mb-3 text-end d-inline-flex align-items-center gap-2\">\n <!-- Clear Tag Button (visible when Edit button OR Save/Cancel buttons are visible) -->\n <button\n *ngIf=\"!revopsTypeValue || (revopsTypeValue && editBtnShow)\"\n [disabled]=\"(selectedRadioType === undefined || selectedRadioType === '') || (selectedRadioType === 'duplicate' && selectedDuplicateImagesList.length === 0)\"\n class=\"btn btn-clear-tag d-inline-flex align-items-center justify-content-center\" type=\"button\"\n (click)=\"clearValue()\">\n <svg width=\"49\" height=\"49\" viewBox=\"0 0 49 49\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g filter=\"url(#filter0_d_516_96841)\">\n <rect x=\"2.16797\" y=\"1.08447\" width=\"44.0342\" height=\"44.0284\" rx=\"8.67445\" fill=\"#FEF3F2\" />\n <rect x=\"2.71012\" y=\"1.62663\" width=\"42.9499\" height=\"42.9441\" rx=\"8.13229\" stroke=\"#FEF3F2\"\n stroke-width=\"1.08431\" />\n <path\n d=\"M33.4893 21.3613L33.4912 21.3643C34.0533 21.9297 34.369 22.6949 34.3691 23.4922C34.3691 24.2895 34.0533 25.0546 33.4912 25.6201L26.7256 32.3857C26.4454 32.6661 26.1122 32.8882 25.7461 33.04C25.3798 33.1919 24.9873 33.2705 24.5908 33.2705C24.1942 33.2705 23.801 33.1919 23.4346 33.04C23.0686 32.8883 22.7361 32.6659 22.4561 32.3857L20.7676 30.6992L22.3682 29.0986L24.0557 30.7842L24.0566 30.7852C24.1267 30.8553 24.2102 30.9112 24.3018 30.9492C24.3933 30.9872 24.4917 31.0068 24.5908 31.0068C24.6899 31.0068 24.7883 30.9872 24.8799 30.9492C24.9713 30.9113 25.0541 30.8552 25.124 30.7852H25.125L31.8877 24.0215C32.0267 23.8804 32.1055 23.6903 32.1055 23.4922C32.1054 23.2941 32.0267 23.1039 31.8877 22.9629L30.1963 21.2715L31.7979 19.6699L33.4893 21.3613ZM24.6982 12.9336C24.9571 12.9594 25.2011 13.0733 25.3867 13.2588L30.1973 18.0693L28.5957 19.6709L24.1162 15.1914H16.2852V23.0225L20.7666 27.499L19.166 29.0996L14.3535 24.293C14.1411 24.0807 14.0215 23.7925 14.0215 23.4922V14.0596C14.0217 13.4346 14.5283 12.9277 15.1533 12.9277H24.5859L24.6982 12.9336ZM19.8789 17.6436C20.5038 17.6436 21.0103 18.1506 21.0107 18.7754C21.0107 19.4005 20.504 19.9082 19.8789 19.9082H19.8691C19.2442 19.908 18.7373 19.4004 18.7373 18.7754C18.7378 18.1508 19.2445 17.6438 19.8691 17.6436H19.8789Z\"\n fill=\"#B42318\" />\n <path d=\"M33.1699 14.0845L15.1699 32.0845\" stroke=\"#B42318\" stroke-width=\"2\" stroke-linecap=\"round\" />\n </g>\n <defs>\n <filter id=\"filter0_d_516_96841\" x=\"-0.000643253\" y=\"0.000166655\" width=\"48.3724\" height=\"48.3655\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"1.08431\" />\n <feGaussianBlur stdDeviation=\"1.08431\" />\n <feColorMatrix type=\"matrix\" 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\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_516_96841\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_516_96841\" result=\"shape\" />\n </filter>\n </defs>\n </svg>\n </button>\n <!-- Cancel and Save Buttons (when !revopsTypeValue) -->\n <div *ngIf=\"!revopsTypeValue\">\n <button class=\"btn btn-outline me-2\" (click)=\"cancel()\">Cancel</button>\n <button class=\"btn btn-primary\" id=\"alert-toast\"\n (click)=\"save(selectedType)\"\n [disabled]=\"(selectedRadioType === undefined || selectedRadioType === '') || (selectedRadioType === 'duplicate' && selectedDuplicateImagesList.length === 0)\">Save</button>\n </div>\n <!-- Edit Button (when revopsTypeValue && editBtnShow) -->\n <div *ngIf=\"revopsTypeValue && editBtnShow\">\n <button\n class=\"btn btn-outline me-2\" (click)=\"editValue()\">\n <span class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M14.6554 1.71047C14.8927 1.47315 15.1745 1.2849 15.4845 1.15646C15.7946 1.02802 16.1269 0.961914 16.4626 0.961914C16.7982 0.961914 17.1305 1.02802 17.4406 1.15646C17.7507 1.2849 18.0324 1.47315 18.2697 1.71047C18.5071 1.94779 18.6953 2.22953 18.8238 2.53961C18.9522 2.84969 19.0183 3.18202 19.0183 3.51765C19.0183 3.85327 18.9522 4.18561 18.8238 4.49568C18.6953 4.80576 18.5071 5.0875 18.2697 5.32482L6.0713 17.5233L1.10156 18.8786L2.45695 13.9089L14.6554 1.71047Z\"\n stroke=\"#344054\" stroke-width=\"1.81079\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg></span>Edit\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"form-check my-15\">\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"duplicate\"\n id=\"duplicate-split\" [(ngModel)]=\"selectedType\" [value]=\"'duplicate'\"\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"revopsTypeValue\">\n <label class=\"form-check-label\" for=\"duplicate-split\">\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\n viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94635)\">\n <path\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94635\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg></span>\n <span class=\"ms-5 tag-class\">Duplicate</span>\n </label>\n </div>\n <div class=\"form-check my-15\">\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"employee\"\n id=\"employee-split\" [(ngModel)]=\"selectedType\" [value]=\"'employee'\"\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"revopsTypeValue\">\n <label class=\"form-check-label\" for=\"employee-split\">\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\n viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94639)\">\n <path\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94639\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg></span>\n <span class=\"ms-5 tag-class\">Employee/Staff</span>\n </label>\n </div>\n <div class=\"form-check my-15\">\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"house-keeping\"\n id=\"house-keeping-split\" [(ngModel)]=\"selectedType\" [value]=\"'house-keeping'\"\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"revopsTypeValue\">\n <label class=\"form-check-label\" for=\"house-keeping-split\">\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"21\"\n viewBox=\"0 0 21 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94643)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\n fill=\"#475467\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94643\">\n <rect width=\"21\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg></span>\n <span class=\"ms-5 tag-class\">House Keeping</span>\n </label>\n </div>\n <div class=\"form-check my-15\">\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"junk\" id=\"junk-split\"\n [(ngModel)]=\"selectedType\" [value]=\"'junk'\" (change)=\"onRadioChange(selectedType)\"\n [disabled]=\"users?.role ==='user' && users?.userType ==='client' || revopsTypeValue\">\n <label class=\"form-check-label\" for=\"junk-split\">\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M3 6H5M5 6H21M5 6V20C5 20.5304 5.21071 21.0391 5.58579 21.4142C5.96086 21.7893 6.46957 22 7 22H17C17.5304 22 18.0391 21.7893 18.4142 21.4142C18.7893 21.0391 19 20.5304 19 20V6H5ZM8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M10 11V17M14 11V17\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg></span>\n <span class=\"ms-5 tag-class\">Junk</span>\n </label>\n </div>\n <div class=\"mt-3\">\n <label class=\"form-label\">Remarks (Optional)</label>\n <textarea class=\"form-control\" rows=\"3\" placeholder=\"Comment here\"\n [(ngModel)]=\"userComment\"></textarea>\n </div>\n </div>\n </ng-template>\n\n <!-- Grid/List View (shown when split-screen is not enabled) -->\n <div class=\"row px-0 img-traffic contain high-400px scroll-y\"\n *ngIf=\"viewMode === 'grid' && !noData && !loading && !splitScreenEnabled\">\n <ng-container *ngFor=\"let obj of imagesArrayData\">\n <ng-container *ngTemplateOutlet=\"imageCard; context: { $implicit: obj }\"></ng-container>\n </ng-container>\n </div>\n\n <div class=\"list-view-wrapper\"\n *ngIf=\"viewMode === 'list' && !noData && !loading && !splitScreenEnabled\">\n <div class=\"list-group mb-5\" *ngFor=\"let group of listViewGroups\">\n <div class=\"list-group-header d-flex align-items-center mb-3\">\n <div class=\"group-title\">{{ group?.timeRange }}</div>\n <span class=\"group-count badge badge-light-default ms-2\">\n #{{ group?.data?.length || 0 }}\n </span>\n </div>\n <div class=\"row gx-4 list-group-row\">\n <ng-container *ngFor=\"let obj of group?.data\">\n <ng-container\n *ngTemplateOutlet=\"imageCard; context: { $implicit: obj }\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <ng-template #imageCard let-obj>\n <div *ngIf=\"type !== 'duplicate' || (type === 'duplicate'&& obj.revopsType === 'duplicate' && obj.duplicateImagePath?.length > 0)\"\n class=\"col-md-3 border-gray mx-2 p-2 mt-5\">\n <!-- Condition: Only show if not duplicate OR duplicate with non-empty duplicateImagePath -->\n <ng-container>\n <img class=\"img-src cursor-pointer\" [src]=\"imageUrl + obj?.filePath\" (error)=\"obj.filePath = null\" alt=\"\"\n (click)=\"selectImageForSplitView(obj)\" />\n </ng-container>\n \n <div *ngIf=\"!obj?.filePath\" class=\"no-preview\">\n <span class=\"mb-5\">\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"Group\">\n <path id=\"Vector\" d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path id=\"Vector_2\"\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n </svg>\n \n </span>\n <span class=\"header mb-5 text-center\">Preview not available</span>\n <span class=\"description mb-5 text-center\">The selected camera is not available at\n the\n moment.</span>\n </div>\n <div *ngIf=\"type !== 'duplicate' || (type === 'duplicate'&& obj.revopsType === 'duplicate' && obj.duplicateImagePath?.length > 0)\"\n class=\"row px-2 mb-2\">\n <div class=\"col-md-7\">\n <div class=\"py-2 img-doc-time\">Tango ID : {{obj?.templd}} <span\n *ngIf=\"(type === 'duplicate'&& obj.revopsType === 'duplicate' && obj.duplicateImagePath?.length > 0)\"\n class=\"mx-2 badge badge-light-primary\">{{obj.duplicateImagePath?.length}}\n </span>\n <span *ngIf=\"obj?.status ==='approved'\" class=\"ms-2\">\n <svg style=\"width: 20px;\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10\"\n height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\n <rect y=\"0.5\" width=\"10\" height=\"10\" rx=\"5\" fill=\"#D1FADF\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\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\"\n fill=\"#12B76A\" />\n </svg>\n </span>\n <span *ngIf=\"obj?.status ==='rejected'\" class=\"ms-2\">\n <svg style=\"width: 20px;\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\"\n height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\n <g clip-path=\"url(#clip0_1428_59484)\">\n <path\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\n fill=\"#FEE4E2\" />\n <path\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\"\n stroke=\"#D92D20\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_1428_59484\">\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(0.599609 0.5)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n </div>\n <div class=\"img-doc-value\">Entry Time : {{obj?.entryTme}}</div>\n </div>\n <div class=\"col-md-5 text-end py-3\">\n <span *ngIf=\"obj?.revopsType ==='non-tagging'\" ngbTooltip=\"Yet to tag the customer\" placement=\"top\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 19 18\" fill=\"none\">\n <path\n d=\"M6.02344 5.625H6.03094M16.2159 10.4325L10.8384 15.81C10.6991 15.9495 10.5337 16.0601 10.3516 16.1356C10.1695 16.2111 9.97431 16.2499 9.77719 16.2499C9.58006 16.2499 9.38487 16.2111 9.20278 16.1356C9.02068 16.0601 8.85525 15.9495 8.71594 15.81L2.27344 9.375V1.875H9.77344L16.2159 8.3175C16.4953 8.59854 16.6521 8.97872 16.6521 9.375C16.6521 9.77128 16.4953 10.1515 16.2159 10.4325Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='duplicate'\">\n <svg *ngIf=\"obj?.isParent\" width=\"20\" height=\"21\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_568_103657)\">\n <path\n d=\"M2.08398 6.25001H1.66732C1.4463 6.25001 1.23434 6.16221 1.07806 6.00593C0.921782 5.84965 0.833984 5.63769 0.833984 5.41668V1.66668C0.833984 1.44566 0.921782 1.2337 1.07806 1.07742C1.23434 0.921141 1.4463 0.833344 1.66732 0.833344H5.41732C5.63833 0.833344 5.85029 0.921141 6.00657 1.07742C6.16285 1.2337 6.25065 1.44566 6.25065 1.66668V2.08334M4.58398 3.75001H8.33398C8.79422 3.75001 9.16732 4.12311 9.16732 4.58334V8.33334C9.16732 8.79358 8.79422 9.16668 8.33398 9.16668H4.58398C4.12375 9.16668 3.75065 8.79358 3.75065 8.33334V4.58334C3.75065 4.12311 4.12375 3.75001 4.58398 3.75001Z\"\n stroke=\"#475467\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <rect x=\"4\" y=\"4\" width=\"5\" height=\"5\" fill=\"#475467\" />\n <defs>\n <clipPath id=\"clip0_568_103657\">\n <rect width=\"10\" height=\"10\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n <svg *ngIf=\"!obj?.isParent\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94635)\">\n <path\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94635\">\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='employee'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94639)\">\n <path\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94639\">\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='house-keeping'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 21 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94643)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\n fill=\"#475467\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94643\">\n <rect width=\"21\" height=\"20\" fill=\"white\" transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='junk'\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M3 6H5M5 6H21M5 6V20C5 20.5304 5.21071 21.0391 5.58579 21.4142C5.96086 21.7893 6.46957 22 7 22H17C17.5304 22 18.0391 21.7893 18.4142 21.4142C18.7893 21.0391 19 20.5304 19 20V6H5ZM8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M10 11V17M14 11V17\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n </div>\n </div>\n </div>\n </ng-template>\n\n </div>\n </section>\n\n <!-- full image View -->\n <section *ngIf=\"imageFlow\">\n <div class=\"row\">\n <!-- Ticket Block Alert -->\n <div *ngIf=\"getSelectedDateCardData()?.raisedStatusEnabled === 'block'\" class=\"col-12 mb-3\">\n <div class=\"ticket-block-alert\">\n <div class=\"ticket-block-alert-content\">\n <div class=\"ticket-block-alert-icon\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"12\" cy=\"12\" r=\"12\" fill=\"#F04438\" />\n <path d=\"M12 8V13\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n </div>\n <div class=\"ticket-block-alert-text\">\n <div class=\"ticket-block-alert-title\">\n You cannot raise ticket for next {{ getSelectedDateCardData()?.noOfBlockedDays\n || '0' }} days\n </div>\n <div class=\"ticket-block-alert-description\">\n It looks like you have achieved 95% accuracy for the three tickets raised this\n month. This limits you from raising more tickets to avoid redundancy.\n </div>\n <div class=\"ticket-block-alert-action\">\n If you still want to raise tickets, <span class=\"ticket-block-alert-link\"\n (click)=\"requestReset()\">send request</span> to reset.\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Ticket Request Success Alert -->\n <div *ngIf=\"getSelectedDateCardData()?.raisedStatusEnabled === 'request'\" class=\"col-12 mb-3\">\n <div class=\"ticket-request-alert\">\n <div class=\"ticket-request-alert-content\">\n <div class=\"ticket-request-alert-icon\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 21L23 12L2 3V10L17 12L2 14V21Z\" fill=\"#10B981\" />\n </svg>\n </div>\n <div class=\"ticket-request-alert-text\">\n <div class=\"ticket-request-alert-title\">\n Reset Request Sent\n </div>\n <div class=\"ticket-request-alert-description\">\n Your request to enable ticket raising has been submitted. You'll be notified\n once it's approved. Please ensure future ticket accuracy remains within the 95%\n threshold.\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"d-flex mt-2 mb-2 w-100 overflow-x px-0\">\n <ng-container *ngTemplateOutlet=\"footfallTrendsTemplate\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"ticketStatusTemplate\"></ng-container>\n <span class=\"divider\"></span>\n <div class=\"d-flex flex-shrink-0 mt-3 justify-content-start align-items-center px-0\">\n <div *ngIf=\"!getTicketStatuses().includes('open') && !getTicketStatuses().includes('closed')\"\n class=\"ms-auto text-end\">\n\n <button [disabled]=\"!canEnableButton()\" class=\"btn btn-primary\" type=\"button\"\n (click)=\"Raised()\">\n Raise ticket\n </button>\n </div>\n </div>\n <div class=\"nav-group bg-white border-1 btn-group w-auto\">\n <ng-container *ngIf=\"!(countData?.length > 0)\">\n\n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'footfall' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('footfall')\">\n Total Footfall\n <span\n [ngClass]=\"type === 'footfall' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\n {{ countData?.footfallCount || 0 }}\n </span>\n </button>\n\n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'non-tagging' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('non-tagging')\">\n Non-tags\n <span\n [ngClass]=\"type === 'non-tagging' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\n {{ countData?.nonTags || 0 }}\n </span>\n </button>\n\n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'duplicate' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('duplicate')\">\n Duplicated\n <span\n [ngClass]=\"type === 'duplicate' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\n {{ countData?.duplicate || 0 }}\n </span>\n </button>\n\n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'employee' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('employee')\">\n Employee/Staff\n <span\n [ngClass]=\"type === 'employee' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\n {{ countData?.employee || 0 }}\n </span>\n </button>\n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'junk' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('junk')\">\n Junk\n <span\n [ngClass]=\"type === 'junk' ? 'badge badge-active activePlanBtn' : ' badge badge-light-default inactivePlanBtn'\">\n {{ countData?.junk || 0 }}\n </span>\n </button>\n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'house-keeping' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('house-keeping')\">\n House Keeping\n <span\n [ngClass]=\"type === 'house-keeping' ? 'badge badge-active activePlanBtn' : ' badge badge-light-default inactivePlanBtn'\">\n {{ countData?.housekeeping || 0 }}\n </span>\n </button>\n\n </ng-container>\n\n </div>\n\n <div class=\"row mx-0 border-gray img-traffic\" *ngIf=\"!noData && !loading\">\n <div class=\"col-md-6 p-2 mb-2 mt-5\">\n <div class=\"position-relative border-gray p-2 \">\n <!-- Main Image -->\n <!-- <img class=\"img-src cursor-pointer h-450px\"\n (click)=\"selectedImageArray(imageUrl, selectImageArray)\"\n [src]=\"imageUrl + selectImageArray?.filePath\" appMagnifier alt=\"\"> -->\n <img class=\"img-src cursor-pointer h-450px\"\n (click)=\"selectedImageArray(imageUrl, selectImageArray)\"\n [src]=\"imageUrl + selectImageArray?.filePath\" alt=\"\">\n\n <!-- Right arrow button -->\n <div class=\"row px-2 mb-2\">\n <div class=\"col-md-7\">\n <div class=\"py-2 img-doc-time\">Tango ID : {{selectImageArray?.templd}}\n <span *ngIf=\"selectImageArray?.status ==='approved'\" class=\"ms-2\"><svg\n style=\"width: 20px;\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\n <rect y=\"0.5\" width=\"10\" height=\"10\" rx=\"5\" fill=\"#D1FADF\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\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\"\n fill=\"#12B76A\" />\n </svg></span>\n <span *ngIf=\"selectImageArray?.status ==='rejected'\" class=\"ms-2\"><svg\n style=\"width: 20px;\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\n <g clip-path=\"url(#clip0_1428_59484)\">\n <path\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\n fill=\"#FEE4E2\" />\n <path\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\"\n stroke=\"#D92D20\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_1428_59484\">\n <rect width=\"12\" height=\"12\" fill=\"white\"\n transform=\"translate(0.599609 0.5)\" />\n </clipPath>\n </defs>\n </svg></span>\n </div>\n <div class=\"img-doc-value\">Entry Time : {{(tempModalImage ||\n selectImageArray)?.entryTme || (tempModalImage ||\n selectImageArray)?.entryTime}}</div>\n </div>\n <div class=\"col-md-5 text-end py-3\">\n <span *ngIf=\"(tempModalImage || selectImageArray)?.revopsType ==='non-tagging'\"\n ngbTooltip=\"Yet to tag the customer\" placement=\"top\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"18\"\n viewBox=\"0 0 19 18\" fill=\"none\">\n <path\n d=\"M6.02344 5.625H6.03094M16.2159 10.4325L10.8384 15.81C10.6991 15.9495 10.5337 16.0601 10.3516 16.1356C10.1695 16.2111 9.97431 16.2499 9.77719 16.2499C9.58006 16.2499 9.38487 16.2111 9.20278 16.1356C9.02068 16.0601 8.85525 15.9495 8.71594 15.81L2.27344 9.375V1.875H9.77344L16.2159 8.3175C16.4953 8.59854 16.6521 8.97872 16.6521 9.375C16.6521 9.77128 16.4953 10.1515 16.2159 10.4325Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"selectImageArray?.revopsType ==='duplicate'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\n viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94635)\">\n <path\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94635\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"selectImageArray?.revopsType ==='employee'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\n viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94639)\">\n <path\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94639\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"selectImageArray?.revopsType ==='house-keeping'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"21\"\n viewBox=\"0 0 21 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94643)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\n fill=\"#475467\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94643\">\n <rect width=\"21\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"col-md-6 p-2 mb-2 mt-5\">\n <div class=\"mx-2 \">\n <div class=\"row\">\n <div class=\"col-md-6 title-type\">\n Select non-shopper type\n </div>\n\n\n <section class=\"col-md-6 text-end\"\n *ngIf=\"!(users?.role ==='user' && users?.userType ==='client' && selectedRadioType ==='junk')\">\n\n <div *ngIf=\"!revopsTypeValue\" class=\"mb-5 text-end\" role=\"group\">\n <div\n *ngIf=\"!getTicketStatuses().includes('open') && !getTicketStatuses().includes('closed')\">\n\n <button [disabled]=\"\n (selectedRadioType === undefined || selectedRadioType === '') ||\n (selectedRadioType === 'duplicate' && selectedDuplicateImagesList.length === 0)\n \" class=\"btn btn-default\" type=\"button\" (click)=\"clearValue()\">Clear</button>\n <button class=\"btn btn-outline me-2\" (click)=\"cancel()\">Cancel</button>\n <button class=\"btn btn-primary\" id=\"alert-toast\"\n (click)=\"save(selectedType)\" [disabled]=\"\n (selectedRadioType === undefined || selectedRadioType === '') ||\n (selectedRadioType === 'duplicate' && selectedDuplicateImagesList.length === 0)\n \">\n Save\n </button>\n </div>\n </div>\n\n <div\n *ngIf=\"!(users?.role ==='user' && users?.userType ==='client' && selectedRadioType ==='junk')\">\n <ng-container *ngIf=\"editBtnShow\">\n <div *ngIf=\"revopsTypeValue\" class=\"mb-5 text-end\" role=\"group\">\n <button\n *ngIf=\"!getTicketStatuses().includes('open') && !getTicketStatuses().includes('closed')\"\n class=\"btn btn-outline me-2\" (click)=\"editValue()\"><span\n class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M14.6554 1.71047C14.8927 1.47315 15.1745 1.2849 15.4845 1.15646C15.7946 1.02802 16.1269 0.961914 16.4626 0.961914C16.7982 0.961914 17.1305 1.02802 17.4406 1.15646C17.7507 1.2849 18.0324 1.47315 18.2697 1.71047C18.5071 1.94779 18.6953 2.22953 18.8238 2.53961C18.9522 2.84969 19.0183 3.18202 19.0183 3.51765C19.0183 3.85327 18.9522 4.18561 18.8238 4.49568C18.6953 4.80576 18.5071 5.0875 18.2697 5.32482L6.0713 17.5233L1.10156 18.8786L2.45695 13.9089L14.6554 1.71047Z\"\n stroke=\"#344054\" stroke-width=\"1.81079\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg></span>Edit</button>\n\n </div>\n </ng-container>\n </div>\n </section>\n\n </div>\n\n <div class=\"form-check my-15\">\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"duplicate\"\n id=\"duplicate\" [(ngModel)]=\"selectedType\" [value]=\"'duplicate'\"\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"revopsTypeValue\">\n <label class=\"form-check-label\" for=\"duplicate\">\n <span class=\"ms-5\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\n viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94635)\">\n <path\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94635\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span class=\"ms-5 tag-class\">Duplicate</span>\n </label>\n </div>\n <div class=\"form-check my-15\">\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"employee\"\n id=\"employee\" [(ngModel)]=\"selectedType\" [value]=\"'employee'\"\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"revopsTypeValue\">\n <label class=\"form-check-label\" for=\"employee\">\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\n height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94639)\">\n <path\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94639\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg></span>\n <span class=\"ms-5 tag-class\">Employee/Staff</span>\n </label>\n </div>\n <div class=\"form-check my-15\">\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"house-keeping\"\n id=\"house-keeping\" [(ngModel)]=\"selectedType\" [value]=\"'house-keeping'\"\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"revopsTypeValue\">\n <label class=\"form-check-label\" for=\"house-keeping\">\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\"\n height=\"21\" viewBox=\"0 0 21 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94643)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\n fill=\"#475467\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94643\">\n <rect width=\"21\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg></span>\n <span class=\"ms-5 tag-class\"> House Keeping</span>\n </label>\n </div>\n <div class=\"form-check my-15\">\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"junk\" id=\"junk\"\n [(ngModel)]=\"selectedType\" [value]=\"'junk'\"\n (change)=\"onRadioChange(selectedType)\"\n [disabled]=\"users?.role ==='user' && this.users?.userType ==='client' || revopsTypeValue\">\n <label class=\"form-check-label\" for=\"junk\">\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\n height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M3 6H5M5 6H21M5 6V20C5 20.5304 5.21071 21.0391 5.58579 21.4142C5.96086 21.7893 6.46957 22 7 22H17C17.5304 22 18.0391 21.7893 18.4142 21.4142C18.7893 21.0391 19 20.5304 19 20V6H5ZM8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M10 11V17M14 11V17\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg></span>\n <span class=\"ms-5 tag-class\"> Junk</span>\n </label>\n </div>\n </div>\n\n\n </div>\n </div>\n\n\n <div class=\"row px-0 img-traffic mt-3 high-400px scroll-y\">\n <div class=\"col-md-3 border-gray mx-2 p-2 mt-5\" *ngFor=\"let obj of remainingImageArray\">\n <div class=\"position-relative\">\n <input *ngIf=\"!revopsTypeValue && selectedRadioType === 'duplicate'\" type=\"checkbox\"\n [checked]=\"obj.selected\"\n class=\"position-absolute absolute form-check-input cursor-pointer\"\n (change)=\"onImageCheckboxChange($event, obj, 'duplicate')\"\n [disabled]=\"obj.duplicateImagePath?.length > 0\" />\n\n <img class=\"img-src\"\n [ngClass]=\"selectedRadioType !== 'duplicate' ? 'cursor-pointer' : 'cursor-pointer'\"\n [src]=\"imageUrl + obj?.filePath\" (error)=\"obj.filePath = null\" alt=\"\"\n (click)=\"handleImageClick($event, obj)\" />\n\n <div *ngIf=\"!obj?.filePath\" class=\"no-preview\">\n <span class=\"mb-5\">\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"Group\">\n <path id=\"Vector\"\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path id=\"Vector_2\"\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n </svg>\n\n </span>\n <span class=\"header mb-5 text-center\">Preview not available</span>\n <span class=\"description mb-5 text-center\">The selected camera is not available at\n the\n moment.</span>\n </div>\n <div class=\"row px-2 mb-2\">\n <div class=\"col-md-7\">\n <div class=\"py-2 img-doc-time\">Tango ID : {{obj?.templd ? obj?.templd :\n obj?.tempId}}\n <span *ngIf=\"obj?.status ==='approved'\" class=\"ms-2\"><svg style=\"width: 20px;\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\n <rect y=\"0.5\" width=\"10\" height=\"10\" rx=\"5\" fill=\"#D1FADF\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\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\"\n fill=\"#12B76A\" />\n </svg></span>\n <span *ngIf=\"obj?.status ==='rejected'\" class=\"ms-2\"><svg style=\"width: 20px;\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\n <g clip-path=\"url(#clip0_1428_59484)\">\n <path\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\n fill=\"#FEE4E2\" />\n <path\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\"\n stroke=\"#D92D20\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_1428_59484\">\n <rect width=\"12\" height=\"12\" fill=\"white\"\n transform=\"translate(0.599609 0.5)\" />\n </clipPath>\n </defs>\n </svg></span>\n </div>\n <div class=\"img-doc-value\">Entry Time : {{obj?.entryTme ? obj?.entryTme\n :obj?.entryTime}}</div>\n </div>\n <div class=\"col-md-5 text-end py-3\">\n <span *ngIf=\"obj?.revopsType ==='non-tagging'\"\n ngbTooltip=\"Yet to tag the customer\" placement=\"top\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"18\"\n viewBox=\"0 0 19 18\" fill=\"none\">\n <path\n d=\"M6.02344 5.625H6.03094M16.2159 10.4325L10.8384 15.81C10.6991 15.9495 10.5337 16.0601 10.3516 16.1356C10.1695 16.2111 9.97431 16.2499 9.77719 16.2499C9.58006 16.2499 9.38487 16.2111 9.20278 16.1356C9.02068 16.0601 8.85525 15.9495 8.71594 15.81L2.27344 9.375V1.875H9.77344L16.2159 8.3175C16.4953 8.59854 16.6521 8.97872 16.6521 9.375C16.6521 9.77128 16.4953 10.1515 16.2159 10.4325Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='duplicate'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\n viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94635)\">\n <path\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94635\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='employee'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\n viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94639)\">\n <path\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94639\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='house-keeping'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"21\"\n viewBox=\"0 0 21 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94643)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\n fill=\"#475467\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94643\">\n <rect width=\"21\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='junk'\">\n\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M3 6H5M5 6H21M5 6V20C5 20.5304 5.21071 21.0391 5.58579 21.4142C5.96086 21.7893 6.46957 22 7 22H17C17.5304 22 18.0391 21.7893 18.4142 21.4142C18.7893 21.0391 19 20.5304 19 20V6H5ZM8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M10 11V17M14 11V17\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n </section>\n </div>\n </section>\n</div>\n\n\n<ng-template #zoomPopup let-model>\n <div class=\"p-4 m-4\">\n <div class=\"modal-header border-0 p-0 w-100 flex-column align-items-start\">\n <span *ngIf=\"popupType === 'non-tagging'\" class=\"my-3\">\n\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\" />\n <g clip-path=\"url(#clip0_2088_98337)\">\n <path\n d=\"M29.1693 13.3333V18.3333M29.1693 18.3333H24.1693M29.1693 18.3333L25.3026 14.7C24.407 13.8039 23.299 13.1493 22.0819 12.7973C20.8649 12.4453 19.5785 12.4073 18.3428 12.6869C17.1072 12.9665 15.9624 13.5545 15.0155 14.3962C14.0685 15.2378 13.3502 16.3056 12.9276 17.5M10.8359 26.6666V21.6666M10.8359 21.6666H15.8359M10.8359 21.6666L14.7026 25.3C15.5982 26.1961 16.7062 26.8506 17.9233 27.2027C19.1403 27.5547 20.4267 27.5927 21.6624 27.3131C22.898 27.0335 24.0428 26.4455 24.9897 25.6038C25.9367 24.7621 26.655 23.6943 27.0776 22.5\"\n stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2088_98337\">\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(10 10)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <!-- Heading -->\n <h5 class=\"modal-title mb-2\">\n <span *ngIf=\"popupType === 'employee'\">Tagging as employee/staff </span>\n <span *ngIf=\"popupType === 'duplicate'\">Tagging as duplicates </span>\n <span *ngIf=\"popupType === 'house-keeping'\">Tagging as house keeping </span>\n <span *ngIf=\"popupType === 'non-tagging'\">Clear duplicates</span>\n <span *ngIf=\"popupType ==='junk'\">Tagging as junk</span>\n\n </h5>\n <p class=\"mb-3\">\n <span *ngIf=\"popupType === 'employee'\">Are you sure you want to tag this as employee/staff?</span>\n <span *ngIf=\"popupType === 'duplicate'\">Are you sure you want to tag this as duplicates? </span>\n <span *ngIf=\"popupType === 'house-keeping'\">Are you sure you want to tag this as house keeping? </span>\n <span *ngIf=\"popupType === 'non-tagging'\">This will remove tagged duplicates and move them to\n 'Non-tag'.</span>\n <span *ngIf=\"popupType ==='junk'\">Are you sure you want to tag this as junk?</span>\n\n </p>\n </div>\n\n <div class=\"w-100 mt-5 d-flex justify-content-end\">\n <button class=\"btn btn-outline me-2\" (click)=\"cancelSubmit()\">Cancel</button>\n <button *ngIf=\"popupType !== 'non-tagging'\" class=\"btn btn-primary\" (click)=\"submitValue(popupType)\">\n Yes, Tag\n </button>\n <button *ngIf=\"popupType === 'non-tagging'\" class=\"btn btn-primary\" (click)=\"submitValue(popupType)\">\n Yes, clear\n </button>\n </div>\n </div>\n</ng-template>\n\n\n<ng-template #raisedPopup let-model>\n <div class=\"p-4 m-4\">\n <div class=\"modal-header border-0 p-0 w-100 flex-column align-items-start\">\n <span class=\"my-3\">\n\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\" />\n <path\n d=\"M21.251 11.0806C21.7405 11.0699 22.2153 11.2487 22.5762 11.5796L23.4922 12.4204C23.8089 12.7097 23.893 13.1017 23.8652 13.4263V13.4272C23.836 13.7478 23.6954 14.0592 23.4785 14.2944C23.3699 14.413 23.2865 14.5525 23.2314 14.7036C23.1764 14.8548 23.1512 15.0155 23.1582 15.1763C23.1652 15.337 23.2035 15.4953 23.2715 15.6411C23.3394 15.7869 23.4362 15.9172 23.5547 16.0259C23.6733 16.1346 23.8117 16.2198 23.9629 16.2749C24.1141 16.33 24.2748 16.3541 24.4355 16.3472C24.5961 16.3402 24.7537 16.3017 24.8994 16.2339C25.0089 16.1829 25.1106 16.116 25.2002 16.0356L25.3701 15.8657C25.5759 15.6748 25.8385 15.5408 26.1152 15.4907C26.2972 15.4546 26.485 15.4617 26.6641 15.5103C26.8439 15.5591 27.0103 15.649 27.1494 15.7729L27.1514 15.7749L28.2598 16.7905C28.445 16.9605 28.5948 17.1658 28.7002 17.394C28.8056 17.6223 28.8648 17.8694 28.874 18.1206C28.8832 18.372 28.8423 18.6234 28.7539 18.8589C28.6655 19.0941 28.5316 19.3096 28.3594 19.4927L20.1113 28.2583C19.937 28.4434 19.7268 28.5912 19.4941 28.6938C19.2614 28.7965 19.0102 28.8522 18.7559 28.856C18.5016 28.8597 18.2493 28.8119 18.0137 28.7163C17.7779 28.6206 17.5636 28.4784 17.3838 28.2983L16.2539 27.1685C15.7511 26.6656 15.8832 25.9552 16.1514 25.5542L16.2061 25.4644C16.3241 25.2486 16.3742 25.0008 16.3496 24.7544C16.3214 24.4731 16.197 24.2102 15.9971 24.0103C15.7971 23.8103 15.5343 23.6859 15.2529 23.6577C14.9715 23.6297 14.6887 23.6995 14.4531 23.856H14.4521C14.0494 24.1222 13.3407 24.2552 12.8379 23.7515L11.6797 22.5933C11.5034 22.4169 11.364 22.2074 11.2686 21.9771C11.1731 21.7467 11.1231 21.4999 11.123 21.2505C11.123 21.001 11.1731 20.7535 11.2686 20.5229C11.364 20.2926 11.5034 20.0831 11.6797 19.9067L19.9492 11.6362C20.2954 11.2902 20.7616 11.0912 21.251 11.0806ZM21.2783 12.3804C21.1237 12.3838 20.9765 12.4468 20.8672 12.5562L12.5967 20.8257C12.5409 20.8814 12.497 20.9482 12.4668 21.021C12.4367 21.0938 12.4209 21.1717 12.4209 21.2505C12.4209 21.3292 12.4367 21.4073 12.4668 21.48C12.497 21.5528 12.541 21.6196 12.5967 21.6753L13.7061 22.7837L13.7314 22.772C14.2169 22.4485 14.7993 22.3035 15.3799 22.3608C15.9608 22.4183 16.5042 22.6747 16.917 23.0874C17.3298 23.5002 17.587 24.0436 17.6445 24.6245C17.702 25.2055 17.5565 25.7892 17.2324 26.2749L17.2305 26.2759C17.2261 26.2822 17.2226 26.2893 17.2197 26.2964L18.3018 27.3804C18.3585 27.4372 18.4266 27.482 18.501 27.5122C18.5755 27.5425 18.6559 27.5574 18.7363 27.5562C18.8166 27.5549 18.8963 27.5378 18.9697 27.5054C19.043 27.4729 19.1091 27.4261 19.1641 27.3677L27.4131 18.6021C27.4673 18.5442 27.5093 18.4761 27.5371 18.4019C27.5649 18.3276 27.5781 18.2487 27.5752 18.1694C27.5722 18.0902 27.5538 18.0119 27.5205 17.9399C27.4872 17.8679 27.4394 17.8032 27.3809 17.7495L26.3223 16.7778C26.2925 16.7885 26.2648 16.8053 26.2432 16.8286C26.0217 17.0788 25.7529 17.2827 25.4521 17.4282C25.15 17.5743 24.8214 17.6585 24.4863 17.6763C24.1511 17.694 23.815 17.6452 23.499 17.5317C23.1832 17.4183 22.8928 17.2429 22.6455 17.0161C22.3982 16.7893 22.1988 16.5153 22.0586 16.2104C21.9183 15.9055 21.8404 15.5752 21.8291 15.2397C21.8178 14.9043 21.8737 14.57 21.9932 14.2563C22.1121 13.9442 22.2915 13.6587 22.5215 13.4165L22.5547 13.3657C22.5594 13.3552 22.5607 13.3437 22.5635 13.3325L21.6973 12.5386V12.5376C21.5833 12.4331 21.4329 12.377 21.2783 12.3804Z\"\n fill=\"#00A3FF\" stroke=\"#00A3FF\" stroke-width=\"0.3\" />\n </svg>\n </span>\n <!-- Heading -->\n <h5 class=\"modal-title mb-2\">\n <span>Raise tickets for the following</span>\n\n </h5>\n <p class=\"mb-3\">\n <span>Raising a ticket for footfall count issues. Make sure all records are identified for\n validation.</span>\n\n\n </p>\n </div>\n <div class=\"row\">\n <div class=\"col-md-3 my-4\">\n <div class=\"border border-1 rounded p-3 h-100\">\n <div class=\"fw-semibold fs-5 mb-2\">\n {{tempRaisedPayload?.duplicateCount ? tempRaisedPayload?.duplicateCount :'0'}}\n </div>\n <div class=\"fw-semibold text-muted fs-6 mt-2\">\n Duplicates\n </div>\n </div>\n </div>\n\n <div class=\"col-md-3 my-4\">\n <div class=\"border border-1 rounded p-3 h-100\">\n <div class=\"fw-semibold fs-5 mb-2\">\n {{tempRaisedPayload?.employeeCount ? tempRaisedPayload?.employeeCount:'0' }}\n </div>\n <div class=\"fw-semibold text-muted fs-6 mt-2\">\n Employee\n </div>\n </div>\n </div>\n\n <div class=\"col-md-3 my-4\">\n <div class=\"border border-1 rounded p-3 h-100\">\n <div class=\"fw-semibold fs-5 mb-2\">\n {{tempRaisedPayload?.houseKeepingCount ? tempRaisedPayload?.houseKeepingCount :'0'}}\n </div>\n <div class=\"fw-semibold text-muted fs-6 mt-2\">\n House Keeping\n </div>\n </div>\n </div>\n <div class=\"col-md-3 my-4\">\n <div class=\"border border-1 rounded p-3 h-100\">\n <div class=\"fw-semibold fs-5 mb-2\">\n {{tempRaisedPayload?.junkCount ? tempRaisedPayload?.junkCount :'0'}}\n </div>\n <div class=\"fw-semibold text-muted fs-6 mt-2\">\n Junk\n </div>\n </div>\n\n </div>\n </div>\n\n <!-- Label and Textarea -->\n <div class=\"my-3\">\n <label class=\"form-label\">Description (Optional)</label>\n <textarea rows=\"3\" [(ngModel)]=\"commentText\" class=\"form-control\"\n placeholder=\"Enter description\"></textarea>\n </div>\n <div class=\"w-100 mt-5 d-flex justify-content-end\">\n\n <button class=\"btn btn-outline w-50 me-2\" (click)=\"cancelRasied()\">Cancel</button>\n <button class=\"btn btn-primary w-50\" (click)=\"submitRaised()\">\n Raise Ticket\n </button>\n </div>\n </div>\n</ng-template>\n\n\n<ng-template #imagePopup let-model>\n <div class=\"mx-4\">\n <div class=\"row\">\n <div class=\" p-2 mb-2 mt-5\">\n <div *ngIf=\"isModalOpen\" class=\"position-relative border-gray p-2 \">\n <!-- <button *ngIf=\"canNavigateLeft\" (click)=\"navigateImage('left')\"\n class=\"btn btn-light position-absolute start-0 top-50 z-index-10\">\n \u25C0\n </button> -->\n\n <!-- Main Image -->\n <!-- <img class=\" cursor-pointer w-100 h-525px\" \n [src]=\"imageUrl + (tempModalImage?.filePath || selectImageArray?.filePath)\"\n appMagnifier alt=\"\"> -->\n <img class=\" cursor-pointer w-100 h-525px\"\n [src]=\"imageUrl + (tempModalImage?.filePath || selectImageArray?.filePath)\" alt=\"\">\n <!-- <button *ngIf=\"canNavigateRight\" (click)=\"navigateImage('right')\"\n class=\"btn btn-light position-absolute end-0 top-50 z-index-10\">\n \u25B6\n </button> -->\n\n <!-- Right arrow button -->\n <div class=\"row px-2 mb-2\">\n <div class=\"col-md-7\">\n <div class=\"py-2 img-doc-time\">Tango ID : {{(tempModalImage || selectImageArray)?.templd ||\n (tempModalImage || selectImageArray)?.tempId}}\n <span *ngIf=\"(tempModalImage || selectImageArray)?.status ==='approved'\"\n class=\"ms-2\"><svg style=\"width: 20px;\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\n <rect y=\"0.5\" width=\"10\" height=\"10\" rx=\"5\" fill=\"#D1FADF\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\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\"\n fill=\"#12B76A\" />\n </svg></span>\n <span *ngIf=\"(tempModalImage || selectImageArray)?.status ==='rejected'\"\n class=\"ms-2\"><svg style=\"width: 20px;\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\n <g clip-path=\"url(#clip0_1428_59484)\">\n <path\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\n fill=\"#FEE4E2\" />\n <path\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\"\n stroke=\"#D92D20\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_1428_59484\">\n <rect width=\"12\" height=\"12\" fill=\"white\"\n transform=\"translate(0.599609 0.5)\" />\n </clipPath>\n </defs>\n </svg></span>\n </div>\n <div class=\"img-doc-value\">Entry Time : {{(tempModalImage || selectImageArray)?.entryTme ||\n (tempModalImage || selectImageArray)?.entryTime}}</div>\n </div>\n <div class=\"col-md-5 text-end py-3\">\n <span *ngIf=\"(tempModalImage || selectImageArray)?.revopsType ==='non-tagging'\"\n ngbTooltip=\"Yet to tag the customer\" placement=\"top\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"18\" viewBox=\"0 0 19 18\"\n fill=\"none\">\n <path\n d=\"M6.02344 5.625H6.03094M16.2159 10.4325L10.8384 15.81C10.6991 15.9495 10.5337 16.0601 10.3516 16.1356C10.1695 16.2111 9.97431 16.2499 9.77719 16.2499C9.58006 16.2499 9.38487 16.2111 9.20278 16.1356C9.02068 16.0601 8.85525 15.9495 8.71594 15.81L2.27344 9.375V1.875H9.77344L16.2159 8.3175C16.4953 8.59854 16.6521 8.97872 16.6521 9.375C16.6521 9.77128 16.4953 10.1515 16.2159 10.4325Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"selectImageArray?.revopsType ==='duplicate'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\"\n fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94635)\">\n <path\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94635\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"(tempModalImage || selectImageArray)?.revopsType ==='employee'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\"\n fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94639)\">\n <path\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94639\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"(tempModalImage || selectImageArray)?.revopsType ==='house-keeping'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"21\" viewBox=\"0 0 21 21\"\n fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94643)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\n fill=\"#475467\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94643\">\n <rect width=\"21\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"modal-footer py-2 px-0\"> -->\n\n <div class=\"w-100 py-2 mb-2 px-0 d-flex justify-content-end\">\n\n <button class=\"btn btn-outline\" (click)=\"closeImage()\">Close</button>\n\n </div>\n <!-- </div> -->\n </div>\n</ng-template>\n\n<!-- Footfall Trends Template -->\n<ng-template #footfallTrendsTemplate>\n <div class=\"row w-100 mb-3\">\n <!-- Total Footfall Card -->\n <div class=\"col-md-4 mb-3 mb-md-0\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <div class=\"d-flex align-items-center gap-2\">\n <span class=\"metric-title\">Total Footfall</span>\n <svg placement=\"top\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M4 18H9.5V19.25C9.5 19.9793 9.21027 20.6788 8.69454 21.1945C8.17882 21.7103 7.47935 22 6.75 22C6.02065 22 5.32118 21.7103 4.80546 21.1945C4.28973 20.6788 4 19.9793 4 19.25V18ZM8 6.11999C10 6.11999 11 8.99999 11 11C11 12 10.5 13 10 14.5L9.5 16H4C4 15 3.5 13.5 3.5 11C3.5 8.49999 5.498 6.11999 8 6.11999ZM20.054 14.098L19.837 15.329C19.7023 16.0396 19.2931 16.6686 18.698 17.0796C18.1029 17.4907 17.3698 17.6508 16.6576 17.5252C15.9453 17.3996 15.3111 16.9984 14.8925 16.4086C14.4739 15.8188 14.3045 15.0878 14.421 14.374L14.637 13.144L20.054 14.098ZM18.178 1.70499C20.642 2.13899 22.196 4.82999 21.762 7.29199C21.328 9.75399 20.575 11.144 20.402 12.129L14.985 11.174L14.753 9.60999C14.521 8.04599 14.203 6.97399 14.376 5.98999C14.723 4.01999 16.208 1.35799 18.178 1.70499Z\"\n fill=\"#00A3FF\" />\n </svg>\n </div>\n </div>\n <div class=\"metric-value\">{{ getCurrentFootfall() || 0 }}</div>\n <div class=\"metric-trend\" [ngClass]=\"getFootfallPercentageChange() >= 0 ? 'up' : 'down'\">\n <svg *ngIf=\"getFootfallPercentageChange() >= 0\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 2L10 6H7V10H5V6H2L6 2Z\" fill=\"#10B981\" />\n </svg>\n <svg *ngIf=\"getFootfallPercentageChange() < 0\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 10L2 6H5V2H7V6H10L6 10Z\" fill=\"#F04438\" />\n </svg>\n <span>{{ getFootfallPercentageChange() >= 0 ? '+' : '' }}{{\n getFootfallPercentageChange() }}% vs Yesterday</span>\n </div>\n </div>\n </div>\n <!-- Total Downtime Card -->\n <div class=\"col-md-4 mb-3 mb-md-0\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <div class=\"d-flex align-items-center gap-2\">\n <span class=\"metric-title\">Total Downtime</span>\n <div class=\"downtime-icons\">\n <svg width=\"40\" height=\"41\" viewBox=\"0 0 40 41\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <rect y=\"0.5\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\" />\n <path\n d=\"M21.9004 12.1675C22.9958 12.1675 24.0423 12.3918 24.9977 12.7987C25.9889 13.2207 26.8809 13.8402 27.6279 14.6087C28.3734 15.3756 28.9756 16.2931 29.3857 17.3162C29.7813 18.299 29.9993 19.3756 29.9993 20.5008C29.9993 21.6277 29.7813 22.7043 29.3857 23.6871C28.9756 24.7068 28.3734 25.6244 27.6263 26.3929C26.8809 27.1598 25.9889 27.7793 24.9945 28.2012C24.0391 28.6081 22.9925 28.8325 21.8988 28.8325C20.8034 28.8325 19.7568 28.6081 18.8014 28.2012C17.8102 27.7793 16.9183 27.1598 16.1729 26.3929L16.1712 26.3912C15.4242 25.6227 14.8236 24.7052 14.4134 23.6871C14.2865 23.3707 14.1774 23.0459 14.0879 22.7127C14.2572 22.7294 14.4297 22.7378 14.6038 22.7378C14.9342 22.7378 15.2565 22.7076 15.5706 22.649C15.6227 22.8098 15.6797 22.9688 15.7415 23.1246C16.0785 23.9617 16.5732 24.7152 17.1885 25.3481C17.8037 25.981 18.5378 26.49 19.3499 26.8366C20.1328 27.1698 20.9938 27.3557 21.8988 27.3557C22.8037 27.3557 23.6631 27.1715 24.4476 26.8366C25.2614 26.49 25.9938 25.981 26.6091 25.3481C27.2243 24.7152 27.7191 23.9601 28.056 23.1246C28.3799 22.3192 28.5605 21.4334 28.5605 20.5025C28.5605 19.5715 28.3815 18.6875 28.056 17.8804C27.7191 17.0432 27.2243 16.2898 26.6091 15.6569C25.9938 15.024 25.2598 14.5149 24.4476 14.1684C23.6647 13.8352 22.8037 13.6493 21.8988 13.6493C20.9938 13.6493 20.1344 13.8335 19.3499 14.1684C19.2799 14.1985 19.21 14.2303 19.1416 14.2621C18.8747 13.8301 18.5524 13.4383 18.1829 13.0984C18.3848 12.9913 18.5915 12.8925 18.8014 12.8021C19.7601 12.3918 20.805 12.1675 21.9004 12.1675ZM20.971 16.5393C20.971 16.335 21.0524 16.1508 21.181 16.0169C21.3112 15.8829 21.4902 15.8009 21.6888 15.8009C21.8874 15.8009 22.0664 15.8829 22.1966 16.0169C22.3268 16.1508 22.4066 16.335 22.4066 16.5393V20.4271L25.2305 22.1501C25.3997 22.2539 25.5137 22.4196 25.5592 22.6021C25.6048 22.7847 25.5837 22.9856 25.4827 23.1597V23.1614C25.3818 23.3355 25.2207 23.4527 25.0433 23.4996C24.8659 23.5465 24.6706 23.5247 24.5013 23.4209H24.4997L21.3405 21.4937C21.2314 21.4318 21.1419 21.3413 21.0768 21.2342C21.0101 21.122 20.971 20.9897 20.971 20.8491V16.5393Z\"\n fill=\"#667085\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M14.3913 12.6095C16.8164 12.6095 18.7826 14.6321 18.7826 17.1269C18.7826 19.6218 16.8164 21.6444 14.3913 21.6444C11.9661 21.6444 10 19.6218 10 17.1269C10 14.6321 11.9661 12.6095 14.3913 12.6095ZM14.3913 19.7172L16.748 16.7201H15.2848V15.1261H13.4977V16.7201H12.0345L14.3913 19.7172Z\"\n fill=\"#F04438\" />\n </svg>\n </div>\n </div>\n </div>\n <div class=\"metric-value\">{{ getFormattedDowntime() || '-' }}</div>\n <!-- <div class=\"metric-tag success\" *ngIf=\"hasDowntime()\"> -->\n <!-- <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6667 3.5L5.25 9.91667L2.33334 7\" stroke=\"#10B981\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> -->\n <!-- <span>Issue submitted</span>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.5 2.5L7.5 5.5L10.5 2.5\" stroke=\"#10B981\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> -->\n <!-- </div> -->\n </div>\n </div>\n\n <!-- Ticket Status Card -->\n <div class=\"col-md-4\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <span class=\"metric-title\">Ticket status</span>\n </div>\n <div class=\"metric-value\">{{ getTicketStatus() === '-' ? '-' : (getTicketStatus() |\n titlecase) }}</div>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #resetRequestPopup let-model>\n <div class=\"p-4\">\n <div class=\"modal-header border-0 p-0 w-100\">\n <h5 class=\"modal-title mb-3 fw-bold\">\n Reset request.\n </h5>\n </div>\n <div class=\"modal-body p-0\">\n <p class=\"text-muted mb-3\">\n You're requesting to re-enable footfall tickets, disabled after three instances of exceeding 95%\n accuracy.\n </p>\n <p class=\"text-muted mb-0\">\n Please ensure future accuracy stays on or within 95%.\n </p>\n </div>\n <div class=\"modal-footer border-0 p-0 mt-4 d-flex justify-content-end gap-2\">\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"cancelResetRequest()\">\n Cancel\n </button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"submitResetRequest()\">\n Send Request\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #ticketStatusTemplate let-model>\n <!-- Ticket Review Card (shown when ticket status is raised) -->\n <div class=\"col-12 mb-3\" *ngIf=\"(isTicketRaised() || isTicketClosed()) && getTaggingData('tagging')\">\n <div class=\"ticket-review-card\">\n <!-- Actual Footfall Header -->\n <div class=\"actual-footfall-header\">\n <span class=\"actual-footfall-number\">{{ getTaggingData('tagging')?.footfall || 0 }}</span>\n <span class=\"actual-footfall-label\">Actual Footfall</span>\n </div>\n <!-- Ticket Created By Section -->\n <div class=\"ticket-creator-section\"\n *ngIf=\"getTaggingData('tagging')?.createdByEmail || getTaggingData('tagging')?.createdAt\">\n <div class=\"d-flex align-items-center gap-2\">\n <!-- <div class=\"creator-avatar\" *ngIf=\"getTaggingData()?.createdByEmail?.profilePicture\">\n <img [src]=\"getTaggingData()?.createdByEmail?.profilePicture\" alt=\"Profile\" />\n </div> -->\n <div class=\"creator-avatar-placeholder\"\n *ngIf=\"!getTaggingData('tagging')?.createdByEmail?.profilePicture\">\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\n <path\n d=\"M16 10C17.6569 10 19 11.3431 19 13C19 14.6569 17.6569 16 16 16C14.3431 16 13 14.6569 13 13C13 11.3431 14.3431 10 16 10Z\"\n fill=\"#00A3FF\" />\n <path d=\"M11 22C11 19.2386 13.2386 17 16 17C18.7614 17 21 19.2386 21 22V23H11V22Z\"\n fill=\"#00A3FF\" />\n </svg>\n </div>\n <div class=\"creator-info\">\n <div class=\"creator-label\">Ticket created by</div>\n <div class=\"creator-details\">\n <span class=\"creator-email\">{{ getTaggingData('tagging')?.createdByEmail ||\n getTaggingData('tagging')?.createdByEmail || 'N/A' }}</span>\n <span class=\"creator-separator\" *ngIf=\"getTaggingData('tagging')?.createdAt\">\u2022</span>\n <span class=\"creator-time\" *ngIf=\"getTaggingData('tagging')?.createdAt\">{{\n getTaggingData('tagging')?.createdAt | date:'h:mm:ss a - d MMM yyyy' }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Ticket Revised Footfall and Metrics -->\n <div class=\"revised-footfall-section\">\n <div class=\"metrics-row\">\n <div class=\"metric-item\">\n <div class=\"metric-number blue-text\">\n {{ getTaggingData('tagging')?.revicedFootfall || 0 }}\n <span class=\"metric-percentage\">\n ({{ getTaggingData('tagging')?.revicedPerc || 0 }}%)\n </span>\n <span class=\"metric-arrow\">\u2193</span>\n </div>\n <div class=\"metric-label\">Revised footfall</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">({{ getRevisionCalculation('tagging')}}%)</div>\n <div class=\"metric-label\">Ticket%</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('tagging'), 'duplicate') }}</div>\n <div class=\"metric-label\">Duplicates</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('tagging'), 'employee') }}</div>\n <div class=\"metric-label\">Employee/Staff</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('tagging'), 'junk') }}</div>\n <div class=\"metric-label\">Junk</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('tagging'), 'houseKeeping') }}</div>\n <div class=\"metric-label\">House Keeping</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Ticket Final revision Card (shown when ticket status is closed) -->\n <div class=\"col-12 mb-3\" *ngIf=\"isTicketClosed() && getTaggingData('finalreview')\">\n <div class=\"ticket-review-card\">\n <!-- Ticket card section in revision start -->\n\n <!-- Actual Footfall Header -->\n <div class=\"actual-footfall-header\">\n <span class=\"actual-footfall-number\">{{ getTaggingData('tagging')?.footfall || 0 }}</span>\n <span class=\"actual-footfall-label\">Actual Footfall</span>\n </div>\n <!-- Ticket Created By Section -->\n <div class=\"ticket-creator-section\"\n *ngIf=\"getTaggingData('tagging')?.createdByEmail || getTaggingData('tagging')?.createdAt\">\n <div class=\"d-flex align-items-center gap-2\">\n <!-- <div class=\"creator-avatar\" *ngIf=\"getTaggingData()?.createdByEmail?.profilePicture\">\n <img [src]=\"getTaggingData()?.createdByEmail?.profilePicture\" alt=\"Profile\" />\n </div> -->\n <div class=\"creator-avatar-placeholder\"\n *ngIf=\"!getTaggingData('tagging')?.createdByEmail?.profilePicture\">\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\n <path\n d=\"M16 10C17.6569 10 19 11.3431 19 13C19 14.6569 17.6569 16 16 16C14.3431 16 13 14.6569 13 13C13 11.3431 14.3431 10 16 10Z\"\n fill=\"#00A3FF\" />\n <path d=\"M11 22C11 19.2386 13.2386 17 16 17C18.7614 17 21 19.2386 21 22V23H11V22Z\"\n fill=\"#00A3FF\" />\n </svg>\n </div>\n <div class=\"creator-info\">\n <div class=\"creator-label\">Ticket created by</div>\n <div class=\"creator-details\">\n <span class=\"creator-email\">{{ getTaggingData('tagging')?.createdByEmail ||\n getTaggingData('tagging')?.createdByEmail || 'N/A' }}</span>\n <span class=\"creator-separator\" *ngIf=\"getTaggingData('tagging')?.createdAt\">\u2022</span>\n <span class=\"creator-time\" *ngIf=\"getTaggingData('tagging')?.createdAt\">{{\n getTaggingData('tagging')?.createdAt | date:'h:mm:ss a - d MMM yyyy' }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Ticket Revised Footfall and Metrics -->\n <div class=\"revised-footfall-section\">\n <div class=\"metrics-row\">\n <div class=\"metric-item\">\n <div class=\"metric-number blue-text\">\n {{ getTaggingData('tagging')?.revicedFootfall || 0 }}\n <span class=\"metric-percentage\">\n ({{ getTaggingData('tagging')?.revicedPerc || 0 }}%)\n </span>\n <span class=\"metric-arrow\">\u2193</span>\n </div>\n <div class=\"metric-label\">Revised footfall</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">({{ getRevisionCalculation('tagging')}}%)</div>\n <div class=\"metric-label\">Ticket%</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('tagging'), 'duplicate') }}</div>\n <div class=\"metric-label\">Duplicates</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('tagging'), 'employee') }}</div>\n <div class=\"metric-label\">Employee/Staff</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('tagging'), 'junk') }}</div>\n <div class=\"metric-label\">Junk</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('tagging'), 'houseKeeping') }}</div>\n <div class=\"metric-label\">House Keeping</div>\n </div>\n </div>\n </div>\n <!-- Ticket card section in revision end -->\n\n <!-- Final Revision Section -->\n <div class=\"revision-section\">\n <div class=\"revision-title\">Final revision</div>\n <div class=\"final-revision-note\">\n Please reach centraloperations@lenskart.in for any further discrepancies\n </div>\n <div class=\"revised-footfall-section\">\n <div class=\"metrics-row\">\n <div class=\"metric-item\">\n <div class=\"metric-number blue-text\">\n {{ getTaggingData('finalreview')?.revicedFootfall || 0 }}\n <span class=\"metric-percentage\">\n ({{ getTaggingData('finalreview')?.revicedPerc || 0}}%)\n </span>\n <span class=\"metric-arrow\">\u2191</span>\n </div>\n <div class=\"metric-label\">Revised footfall</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">({{ getRevisionCalculation('finalreview')}}%)</div>\n <div class=\"metric-label\">Ticket%</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('finalreview'), 'duplicate') }}\n </div>\n <div class=\"metric-label\">Duplicates</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('finalreview'), 'employee') }}\n </div>\n <div class=\"metric-label\">Employee/Staff</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('finalreview'), 'junk') }}</div>\n <div class=\"metric-label\">Junk</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('finalreview'), 'houseKeeping')\n }}</div>\n <div class=\"metric-label\">House Keeping</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-template>", styles: ["@charset \"UTF-8\";.switch-form-card{padding:8px 16px;border-radius:4px;border-left:2px solid var(--Primary-600, #00A3FF);background:var(--Primary-25, #F6FCFF);display:flex;align-items:center;justify-content:space-between}.switch-form-card .txt-one{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;line-height:140%}.nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.badge-num-primary{border-radius:16px!important;background:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-700, #009BF3)!important;text-align:center;font-size:14px!important;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.badge-num-muted{border-radius:16px!important;background:var(--Primary-50, #F2F4F7)!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.img-src{width:100%;height:195px;border-radius:.625rem}.img-traffic .col-md-3{width:24%!important}.border-gray{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF)}.img-doc-directory{color:var(--Gray-900, #101828)!important;font-size:14px!important;font-weight:600;line-height:20px;text-decoration-line:underline}.img-doc-time{color:var(--Gray-800, #1D2939);font-size:14px;font-weight:500;line-height:20px}.img-doc-value{color:var(--Gray-600, #667085);font-size:14px;font-weight:500;line-height:20px}.overflow-x{overflow-x:auto}.no-preview{border:1px solid #F04438;background:#fee4e2;border-radius:8px;stroke-width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:41px 16px}.no-preview .header{color:#f04438;font-size:20px;font-weight:700;line-height:20px}.no-preview .description{color:#f04438;font-size:12px;font-weight:500;line-height:18px}.img-nodata{width:25%;height:15%}.img-nodata1{width:15%;height:15%}.nodata-title{font-size:14px!important;font-weight:600}.img-direc{color:var(--Gray-900, #101828)!important;font-size:18px!important;font-weight:500;line-height:28px}.custom-accordion{border-radius:5px}.custom-accordion-item{margin-bottom:10px}.custom-accordion-header{background-color:#fff;border:none;cursor:pointer;padding:10px;text-align:left;width:100%;display:flex;justify-content:space-between;align-items:center}.custom-accordion{width:100%}.mainheading{width:100%;display:flex;justify-content:space-between;align-items:center;padding:19px;border:none;background:none;cursor:pointer}.mainheading-1{width:77%;display:flex;justify-content:space-between;align-items:center;padding:19px;border:none;background:none;cursor:pointer}.header-row{display:flex;align-items:center;width:100%;justify-content:space-between}.img-dire{font-size:16px;font-weight:700}.divider{flex-grow:1;height:1px;background-color:#ddd;margin:0 10px}.accordion-arrow{display:flex;align-items:center}.scroll-container{max-height:400px;overflow-y:auto;overflow-x:hidden}.view-toggle .btn{border-radius:6px}.view-toggle .btn.active{background:var(--Primary-50, #EAF8FF);border-color:var(--Primary-200, #99DAFF)}.date-list-container{padding:4px 23px;width:100%}.date-list-scroll{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:16px;max-height:287px;overflow-y:auto;overflow-x:hidden;padding-bottom:8px}.date-card{min-width:0;max-width:none;padding:16px;background:#fff;border:1px solid #D0D5DD;border-radius:8px;cursor:pointer;transition:all .2s ease;display:flex;flex-direction:column;gap:8px}.date-card:hover{box-shadow:0 2px 8px #0000001a;border-color:#00a3ff}.date-card .date-card-header{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.date-card .date-card-header .calendar-icon{flex-shrink:0}.date-card .date-card-header .date-text{color:var(--Gray-900, #101828);font-size:14px;font-weight:500;line-height:20px;flex:1}.date-card .footfall-count{color:var(--Gray-900, #101828);font-size:32px;font-weight:400;line-height:40px;margin-top:4px}.date-card .footfall-label{color:var(--Gray-600, #667085);font-size:14px;font-weight:400;line-height:20px}.date-card-active{background:var(--Primary-50, #EAF8FF);border-color:var(--Primary-600, #00A3FF);border-width:2px}.date-card-active .date-text{color:var(--Primary-700, #009BF3);font-weight:600}.date-card-active .footfall-count{color:var(--Primary-700, #009BF3)}.list-view-wrapper{padding:0 8px 16px;max-height:480px;overflow-y:auto}.list-group{border:1px solid var(--Gray-200, #EAECF0);border-radius:12px;background:#fff;padding:16px 20px}.list-group-header{border-bottom:1px solid var(--Gray-200, #EAECF0);padding-bottom:12px;margin-bottom:16px!important}.list-group-header .group-title{color:var(--Gray-900, #101828);font-size:16px;font-weight:600;line-height:24px}.list-group-header .group-count{color:var(--Gray-600, #667085);font-weight:500}.high-400px{min-height:auto!important;max-height:800px!important}.scroll-y{overflow-y:auto}.absolute{top:5px;right:5px;z-index:2}.slider{position:relative}.slider .previous{position:absolute;top:30%;left:2%;width:32px;height:32px;background-color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer}.slider .next{position:absolute;top:30%;right:2%;width:32px;height:32px;background-color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer}.img-src1{border-radius:12px;border:1px solid var(--Gray-400, #98A2B3);background:var(--Gray-50, #F9FAFB);width:100%;height:375px;object-fit:contain}.zoom-icon-button{position:absolute;top:10px;right:10px;z-index:10;cursor:pointer;background:#fffffff2;border-radius:50%;padding:8px;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #00000026;transition:all .2s ease}.zoom-icon-button:hover{background:#fff;box-shadow:0 4px 12px #0003;transform:scale(1.05)}.zoom-icon-button svg{width:20px;height:20px}.border-gray{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);padding:0 4px}.border-gray-active{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--Primary-50, #EAF8FF);padding:0 4px}.zone-header{color:var(--Gray-900, #101828);font-size:14px;font-weight:600;line-height:20px}.last-visit{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.toggle-label{color:var(--Gray-900, #101828);font-size:16px;font-weight:600;line-height:24px}.nav-dev{border-radius:8px!important;border:1px solid var(--Primary-200, #99DAFF)!important;background:var(--Primary-25, #F6FCFF)!important}.tab-active{border-radius:6px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)!important;font-size:14px;font-weight:500;line-height:20px}.tab-text-default{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px}.border-gray-active1{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--Primary-50, #ffffff);padding:12px!important}.nav-item1 .nav-link1.active{border:none;border-radius:0;background:var(--Primary-50, #EAF8FF);border-bottom:2px solid #009BF3!important;padding:12px;color:var(--Primary-700, #009BF3);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.active-normal{padding:12px;color:var(--Gray-500, #667085);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.nav-item1 .nav-link1:hover{border:none}.tag-class{color:var(--Gray-900, #101828);font-size:14px;font-weight:600;line-height:20px}.spent-title{color:var(--Gray-600, #475467);font-size:14px;font-weight:600;line-height:20px}.spent-value{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.spent-value1{color:var(--Primary-500, #33B5FF);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:none;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.w-33{width:30%}.w-45{width:45%}.view-tetory{color:var(--Primary-700, #009BF3);font-size:14px;font-weight:600;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:none;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;text-transform:capitalize}.border-gray-tagged{border-radius:4px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--Primary-50, #ffffff);padding:8px!important}.desc-id{color:var(--Gray-900, #101828);font-size:12px;font-style:normal;font-weight:400;line-height:20px}.active-tab{border-bottom:2px solid #0d6efd;font-weight:600;color:#0d6efd}.badge-selected{background-color:#e0f3ff;color:#0d6efd;border:1px solid #0d6efd;border-radius:20px;padding:6px 12px}.badge-unselected{background-color:#f0f0f0;color:#333;border-radius:20px;padding:6px 12px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield;appearance:textfield}.cursor-not-allowed{cursor:not-allowed!important}.title-type{color:var(--Gray-800, #1D2939);font-size:16px;font-weight:600;line-height:24px}.top-50{top:35%!important}.activePlanBtn{border-radius:6px;background:var(--Primary-50, #EAF8FF);color:var(--Gray-700, #344054);font-size:14px!important;font-weight:500!important;line-height:20px}.inactivePlanBtn{color:var(--Gray-500, #344054)!important;font-size:14px;font-weight:500!important;line-height:20px}.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}input[type=checkbox]{width:18px!important;height:18px!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}::ng-deep .modal-backdrop{pointer-events:none}.meta-change.up{color:#10b981}.meta-change.down{color:#ef4444}.meta-change.neutral{color:#64748b}.split-screen-container{display:flex;height:calc(100vh - 300px);min-height:600px;gap:16px;margin-top:16px}.split-screen-container .left-panel{flex:0 0 35%;max-width:35%;overflow-y:auto;overflow-x:hidden;padding-right:8px;border-right:1px solid var(--Gray-200, #EAECF0)}.split-screen-container .right-panel{flex:1;overflow-y:auto;padding-left:16px}.thumbnail-list-section{margin-bottom:24px}.thumbnail-list-section .time-range-header{display:flex;align-items:center;gap:8px;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--Gray-200, #EAECF0)}.thumbnail-list-section .time-range-header .time-range-title{color:var(--Gray-900, #101828);font-size:16px;font-weight:600;line-height:24px}.thumbnail-list-section .time-range-header .time-range-count{color:var(--Gray-600, #667085);font-size:14px;font-weight:500;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);padding:2px 10px;border-radius:16px}.thumbnail-list-section .thumbnail-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.thumbnail-list-section .thumbnail-item{cursor:pointer;border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);padding:8px;transition:all .2s ease}.thumbnail-list-section .thumbnail-item:hover{border-color:var(--Primary-600, #00A3FF);box-shadow:0 2px 8px #00a3ff1a}.thumbnail-list-section .thumbnail-item.selected{border-color:var(--Primary-600, #00A3FF);border-width:2px;background:var(--Primary-50, #EAF8FF)}.thumbnail-list-section .thumbnail-item .thumbnail-image{width:100%;height:120px;object-fit:cover;border-radius:4px;margin-bottom:8px}.thumbnail-list-section .thumbnail-item .thumbnail-info .tango-id{color:var(--Gray-900, #101828);font-size:12px;font-weight:600;line-height:16px;margin-bottom:4px}.thumbnail-list-section .thumbnail-item .thumbnail-info .entry-time{color:var(--Gray-600, #667085);font-size:11px;font-weight:400;line-height:16px}.metric-card{background:var(--White, #FFF);border-radius:8px;padding:16px;height:100%;display:flex;flex-direction:column;gap:2px}.metric-card .metric-header{display:flex;justify-content:space-between;align-items:center}.metric-card .metric-header .metric-title{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.metric-card .metric-header .metric-icon,.metric-card .metric-header .footfall-icon-header{flex-shrink:0}.metric-card .metric-header .downtime-icons{position:relative;display:inline-flex;align-items:center;width:31px;height:24px}.metric-card .metric-header .downtime-icons .clock-icon{position:absolute;left:0;top:2px;z-index:1}.metric-card .metric-header .downtime-icons .alert-icon{position:absolute;right:-2px;top:-2px;z-index:2}.metric-card .metric-value{color:var(--Gray-900, #101828);font-size:32px;font-weight:400;line-height:40px}.metric-card .metric-trend{display:flex;align-items:center;gap:4px;font-size:14px;font-weight:500;line-height:20px}.metric-card .metric-trend.up{color:#10b981}.metric-card .metric-trend.down{color:#f04438}.metric-card .metric-trend svg{flex-shrink:0}.metric-card .metric-tag{display:inline-flex;align-items:center;gap:6px;padding:4px 8px;border-radius:4px;font-size:12px;font-weight:500;line-height:16px;width:fit-content}.metric-card .metric-tag.success{background:#d1fadf;color:#10b981}.metric-card .metric-tag svg{flex-shrink:0}.ticket-review-card{background:var(--White, #FFF);border-radius:12px;border:1px solid var(--Gray-200, #EAECF0);padding:20px;box-shadow:0 1px 3px #0000001a}.ticket-review-card .actual-footfall-header{background:var(--Primary-50, #EAF8FF);border-radius:8px;padding:16px 20px;margin-bottom:20px;display:flex;align-items:center;gap:12px}.ticket-review-card .actual-footfall-header .actual-footfall-number{color:var(--Gray-900, #101828);font-size:32px;font-weight:600;line-height:40px}.ticket-review-card .actual-footfall-header .actual-footfall-label{color:var(--Gray-700, #344054);font-size:16px;font-weight:500;line-height:24px}.ticket-review-card .ticket-creator-section{padding-bottom:20px;margin-bottom:20px;border-bottom:1px solid var(--Gray-200, #EAECF0)}.ticket-review-card .ticket-creator-section .creator-avatar{width:40px;height:40px;border-radius:50%;overflow:hidden;flex-shrink:0}.ticket-review-card .ticket-creator-section .creator-avatar img{width:100%;height:100%;object-fit:cover}.ticket-review-card .ticket-creator-section .creator-avatar-placeholder{width:40px;height:40px;flex-shrink:0;display:flex;align-items:center;justify-content:center}.ticket-review-card .ticket-creator-section .creator-info{flex:1}.ticket-review-card .ticket-creator-section .creator-info .creator-label{color:var(--Gray-600, #667085);font-size:12px;font-weight:400;line-height:18px;margin-bottom:4px}.ticket-review-card .ticket-creator-section .creator-info .creator-details{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.ticket-review-card .ticket-creator-section .creator-info .creator-details .creator-email{color:var(--Gray-900, #101828);font-size:14px;font-weight:500;line-height:20px}.ticket-review-card .ticket-creator-section .creator-info .creator-details .creator-separator{color:var(--Gray-400, #98A2B3);font-size:14px}.ticket-review-card .ticket-creator-section .creator-info .creator-details .creator-time{color:var(--Gray-600, #667085);font-size:14px;font-weight:400;line-height:20px}.ticket-review-card .revised-footfall-section .metrics-row{display:flex;flex-wrap:wrap;gap:24px;align-items:flex-start}.ticket-review-card .revised-footfall-section .metrics-row .metric-item{flex:1;min-width:120px;display:flex;flex-direction:column;gap:4px}.ticket-review-card .revised-footfall-section .metrics-row .metric-item .metric-number{color:var(--Gray-900, #101828);font-size:24px;font-weight:600;line-height:32px}.ticket-review-card .revised-footfall-section .metrics-row .metric-item .metric-number.blue-text{color:var(--Primary-700, #009BF3)}.ticket-review-card .revised-footfall-section .metrics-row .metric-item .metric-number.blue-text .metric-percentage{font-size:16px;font-weight:500;margin-left:4px}.ticket-review-card .revised-footfall-section .metrics-row .metric-item .metric-number.blue-text .metric-arrow{color:var(--Primary-700, #009BF3);font-size:16px;margin-left:4px}.ticket-review-card .revised-footfall-section .metrics-row .metric-item .metric-label{color:var(--Gray-600, #667085);font-size:14px;font-weight:400;line-height:20px}.ticket-review-card .revision-section{margin-top:24px;padding-top:24px;border-top:1px solid var(--Gray-200, #EAECF0)}.ticket-review-card .revision-section .revision-title{color:var(--Gray-900, #101828);font-size:16px;font-weight:600;line-height:24px;margin-bottom:16px}.ticket-review-card .revision-section .final-revision-note{color:var(--Gray-600, #667085);font-size:14px;font-weight:400;line-height:20px;margin-bottom:16px;font-style:italic}.ticket-block-alert{border-radius:8px;border:2px dashed #F04438;background:#fee4e2;padding:16px;margin-bottom:16px}.ticket-block-alert .ticket-block-alert-content{display:flex;align-items:flex-start;gap:12px}.ticket-block-alert .ticket-block-alert-content .ticket-block-alert-icon{flex-shrink:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.ticket-block-alert .ticket-block-alert-content .ticket-block-alert-icon svg{width:24px;height:24px}.ticket-block-alert .ticket-block-alert-content .ticket-block-alert-text{flex:1;display:flex;flex-direction:column;gap:8px}.ticket-block-alert .ticket-block-alert-content .ticket-block-alert-text .ticket-block-alert-title{color:#f04438;font-size:16px;font-weight:700;line-height:24px}.ticket-block-alert .ticket-block-alert-content .ticket-block-alert-text .ticket-block-alert-description,.ticket-block-alert .ticket-block-alert-content .ticket-block-alert-text .ticket-block-alert-action{color:#f04438;font-size:14px;font-weight:400;line-height:20px}.ticket-block-alert .ticket-block-alert-content .ticket-block-alert-text .ticket-block-alert-action .ticket-block-alert-link{color:#f04438;text-decoration:underline;cursor:pointer;font-weight:500}.ticket-block-alert .ticket-block-alert-content .ticket-block-alert-text .ticket-block-alert-action .ticket-block-alert-link:hover{color:#d92d20;text-decoration:underline}.ticket-request-alert{border-radius:8px;border:2px dashed #10B981;background:#d1fae5;padding:16px;margin-bottom:16px}.ticket-request-alert .ticket-request-alert-content{display:flex;align-items:flex-start;gap:12px}.ticket-request-alert .ticket-request-alert-content .ticket-request-alert-icon{flex-shrink:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.ticket-request-alert .ticket-request-alert-content .ticket-request-alert-icon svg{width:24px;height:24px}.ticket-request-alert .ticket-request-alert-content .ticket-request-alert-text{flex:1;display:flex;flex-direction:column;gap:8px}.ticket-request-alert .ticket-request-alert-content .ticket-request-alert-text .ticket-request-alert-title{color:#10b981;font-size:16px;font-weight:700;line-height:24px}.ticket-request-alert .ticket-request-alert-content .ticket-request-alert-text .ticket-request-alert-description{color:#10b981;font-size:14px;font-weight:400;line-height:20px}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.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: i7.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "pipe", type: i6.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i6.DatePipe, name: "date" }] });
|
|
871
1313
|
}
|
|
872
1314
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ImgRvpsComponent, decorators: [{
|
|
873
1315
|
type: Component,
|
|
874
|
-
args: [{ selector: "lib-img-rvps", template: "<div class=\"card mt-3\">\r\n <div class=\"card-header mt-3 px-0 border-bottom-0\">\r\n <div class=\"custom-accordion\">\r\n <div class=\"custom-accordion-item\">\r\n <button class=\"mainheading pb-0 custom-accordion-header\" (click)=\"toggleAccordion()\">\r\n <div class=\"header-row\">\r\n <span class=\"img-direc\">Image Directory</span>\r\n\r\n <span class=\"divider\"></span>\r\n <span class=\"accordion-arrow\">\r\n <!-- Down arrow for collapsed state, up arrow for expanded state -->\r\n <svg *ngIf=\"!isAccordionExpanded\" xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"6\"\r\n viewBox=\"0 0 16 6\" fill=\"none\">\r\n <path d=\"M1 1L5 5L9 1\" stroke=\"#071437\" stroke-width=\"1\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"isAccordionExpanded\" xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"6\"\r\n viewBox=\"0 0 16 6\" fill=\"none\">\r\n <path d=\"M1 5L5 1L9 5\" stroke=\"#1b84ff\" stroke-width=\"1\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n <section *ngIf=\"isAccordionExpanded\">\r\n\r\n <div *ngIf=\"folderView\" class=\"card-body px-0\">\r\n <div class=\"scroll-container\">\r\n <div class=\"row\">\r\n <div class=\"col-md-1 mt-5 text-center\" *ngFor=\"let obj of dateArray;let i = index\">\r\n <div (click)=\"getimages(i,obj)\">\r\n <div *ngIf=\"i === selectIndex;\">\r\n <span class=\"cursor-pointer\"><svg width=\"57\" height=\"56\" viewBox=\"0 0 57 56\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.154297\" width=\"56\" height=\"56\" rx=\"12\" fill=\"#33B5FF\" />\r\n <path\r\n d=\"M39.8216 36.1667C39.8216 36.7855 39.5758 37.379 39.1382 37.8166C38.7006 38.2542 38.1071 38.5 37.4883 38.5H18.8216C18.2028 38.5 17.6093 38.2542 17.1717 37.8166C16.7341 37.379 16.4883 36.7855 16.4883 36.1667V19.8333C16.4883 19.2145 16.7341 18.621 17.1717 18.1834C17.6093 17.7458 18.2028 17.5 18.8216 17.5H24.6549L26.9883 21H37.4883C38.1071 21 38.7006 21.2458 39.1382 21.6834C39.5758 22.121 39.8216 22.7145 39.8216 23.3333V36.1667Z\"\r\n stroke=\"white\" stroke-width=\"2.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <div class=\"text-center mt-2\">{{obj | date:'dd MMM'}}</div>\r\n </div>\r\n <div *ngIf=\"i !== selectIndex;\">\r\n <span class=\"cursor-pointer\"><svg width=\"57\" height=\"56\" viewBox=\"0 0 57 56\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.462891\" width=\"56\" height=\"56\" rx=\"12\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M40.1302 36.1667C40.1302 36.7855 39.8844 37.379 39.4468 37.8166C39.0092 38.2542 38.4157 38.5 37.7969 38.5H19.1302C18.5114 38.5 17.9179 38.2542 17.4803 37.8166C17.0427 37.379 16.7969 36.7855 16.7969 36.1667V19.8333C16.7969 19.2145 17.0427 18.621 17.4803 18.1834C17.9179 17.7458 18.5114 17.5 19.1302 17.5H24.9635L27.2969 21H37.7969C38.4157 21 39.0092 21.2458 39.4468 21.6834C39.8844 22.121 40.1302 22.7145 40.1302 23.3333V36.1667Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"2.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <div class=\"text-center mt-2\">{{obj | date:'dd MMM'}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div *ngIf=\"!folderView\" class=\"card-body\">\r\n <section *ngIf=\"!imageFlow\">\r\n\r\n\r\n <div class=\"row\">\r\n <div class=\"d-flex flex-shrink-0 mt-3 justify-content-start align-items-center px-0\">\r\n <span *ngIf=\"backnav\" class=\"cursor-pointer\" (click)=\"backToFootfall()\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_2585_7036)\">\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=\"M25.8327 19H14.166M14.166 19L19.9993 24.8334M14.166 19L19.9993 13.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2585_7036\" 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\" 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_2585_7036\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2585_7036\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span class=\"img-direc ms-2 mt-1\">{{folderDate | date:'dd MMM, yyyy'}} \r\n <span class=\"badge badge-light-warning mx-2\" *ngIf=\"!getTicketStatuses().includes('closed') && getTicketStatuses().includes('open')\">\r\n Ticket Raised\r\n</span>\r\n<span class=\"badge badge-light-success mx-2\" *ngIf=\"getTicketStatuses().includes('closed')\">Ticket Closed</span>\r\n\r\n </span>\r\n <div *ngIf=\"!getTicketStatuses().includes('open') && !getTicketStatuses().includes('closed')\" class=\"ms-auto text-end\">\r\n \r\n<button \r\n [disabled]=\"!canEnableButton()\" \r\n class=\"btn btn-primary\" \r\n type=\"button\" \r\n (click)=\"Raised()\">\r\n Raise ticket for footfall\r\n</button>\r\n</div>\r\n </div>\r\n <div *ngIf=\"!folderView\" class=\"nav-group bg-white border-1 btn-group w-auto my-2\">\r\n<ng-container *ngIf=\"!(countData?.length > 0)\">\r\n\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"type === 'footfall' ? 'activePlanBtn' : 'inactivePlanBtn'\"\r\n (click)=\"selectPlanTrends('footfall')\">\r\n Total Footfall\r\n <span\r\n [ngClass]=\"type === 'footfall' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\r\n {{ countData?.footfallCount || 0 }}\r\n </span>\r\n </button>\r\n\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"type === 'non-tagging' ? 'activePlanBtn' : 'inactivePlanBtn'\"\r\n (click)=\"selectPlanTrends('non-tagging')\">\r\n Non-tags\r\n <span\r\n [ngClass]=\"type === 'non-tagging' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\r\n {{ countData?.nonTags || 0 }}\r\n </span>\r\n </button>\r\n\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"type === 'duplicate' ? 'activePlanBtn' : 'inactivePlanBtn'\"\r\n (click)=\"selectPlanTrends('duplicate')\">\r\n Duplicated\r\n <span\r\n [ngClass]=\"type === 'duplicate' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\r\n {{ countData?.duplicate || 0 }}\r\n </span>\r\n </button>\r\n\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"type === 'employee' ? 'activePlanBtn' : 'inactivePlanBtn'\"\r\n (click)=\"selectPlanTrends('employee')\">\r\n Employee/Staff\r\n <span\r\n [ngClass]=\"type === 'employee' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\r\n {{ countData?.employee || 0 }}\r\n </span>\r\n </button>\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"type === 'junk' ? 'activePlanBtn' : 'inactivePlanBtn'\"\r\n (click)=\"selectPlanTrends('junk')\">\r\n Junk\r\n <span\r\n [ngClass]=\"type === 'junk' ? 'badge badge-active activePlanBtn' : ' badge badge-light-default inactivePlanBtn'\">\r\n {{ countData?.junk || 0 }}\r\n </span>\r\n </button>\r\n <button class=\"btn btn-outline px-6 py-3\"\r\n [ngClass]=\"type === 'house-keeping' ? 'activePlanBtn' : 'inactivePlanBtn'\"\r\n (click)=\"selectPlanTrends('house-keeping')\">\r\n House Keeping\r\n <span\r\n [ngClass]=\"type === 'house-keeping' ? 'badge badge-active activePlanBtn' : ' badge badge-light-default inactivePlanBtn'\">\r\n {{ countData?.housekeeping || 0 }}\r\n </span>\r\n </button>\r\n \r\n\r\n</ng-container>\r\n\r\n </div>\r\n<ng-container *ngIf=\"!imageFlow\">\r\n\r\n <div *ngIf=\"type === 'footfall'\" class=\"d-flex mt-2 mb-2 w-100 overflow-x px-0\">\r\n\r\n <div class=\"col text-nowrap\" *ngFor=\"let obj of objectsArray\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item cursor-pointer\">\r\n <a (click)=\"selectedTimes(obj.timeRange)\"\r\n [ngClass]=\"selectedTime === obj?.timeRange ? 'active' : ''\"\r\n class=\"nav-link cursor-pointer no-border mx-3 mb-2\">\r\n {{obj?.timeRange}}<span class=\"mx-2\"\r\n [ngClass]=\"selectedTime === obj?.timeRange ? 'badge-num-primary' :'badge-num-muted'\">\r\n {{ obj?.count ? obj?.count : 0 }}\r\n </span>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n\r\n </div>\r\n</ng-container>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData\" class=\"row\">\r\n\r\n <div class=\"col-lg-12 mb-3\">\r\n\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column \" style=\"margin: 64px;border-radius: 8px;\r\nbackground: var(--Gray-50, #F9FAFB);\">\r\n <svg width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\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 <path\r\n d=\"M35.332 51.9999H33.6654C32.7813 51.9999 31.9335 51.6487 31.3083 51.0236C30.6832 50.3985 30.332 49.5506 30.332 48.6666V33.6666C30.332 32.7825 30.6832 31.9347 31.3083 31.3096C31.9335 30.6844 32.7813 30.3333 33.6654 30.3333H48.6654C49.5494 30.3333 50.3973 30.6844 51.0224 31.3096C51.6475 31.9347 51.9987 32.7825 51.9987 33.6666V35.3333M45.332 41.9999H60.332C62.173 41.9999 63.6654 43.4923 63.6654 45.3333V60.3333C63.6654 62.1742 62.173 63.6666 60.332 63.6666H45.332C43.4911 63.6666 41.9987 62.1742 41.9987 60.3333V45.3333C41.9987 43.4923 43.4911 41.9999 45.332 41.9999Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"4\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <div class=\"nodata-title my-3\">\r\n {{ noDataMessages[type?.toLowerCase()] || 'No data found' }}\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"row px-0 img-traffic contain high-400px scroll-y\" *ngIf=\"!noData && !loading\">\r\n <ng-container\r\n\r\n*ngFor=\"let obj of imagesArrayData\"\r\n>\r\n<div *ngIf=\"type !== 'duplicate' || (type === 'duplicate'&& obj.revopsType === 'duplicate' && obj.duplicateImagePath?.length > 0)\" class=\"col-md-3 border-gray mx-2 p-2 mt-5\">\r\n<!-- Condition: Only show if not duplicate OR duplicate with non-empty duplicateImagePath -->\r\n<ng-container >\r\n<img\r\nclass=\"img-src cursor-pointer\"\r\n[src]=\"imageUrl + obj?.filePath\"\r\n(error)=\"obj.filePath = null\"\r\nalt=\"\"\r\n(click)=\"imgFullView(obj)\"\r\n/>\r\n</ng-container>\r\n\r\n <div *ngIf=\"!obj?.filePath\" class=\"no-preview\">\r\n <span class=\"mb-5\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-5 text-center\">Preview not available</span>\r\n <span class=\"description mb-5 text-center\">The selected camera is not available at the\r\n moment.</span>\r\n </div>\r\n <div *ngIf=\"type !== 'duplicate' || (type === 'duplicate'&& obj.revopsType === 'duplicate' && obj.duplicateImagePath?.length > 0)\" class=\"row px-2 mb-2\">\r\n <div class=\"col-md-7\">\r\n <div class=\"py-2 img-doc-time\">Tango ID : {{obj?.templd}} <span *ngIf=\"(type === 'duplicate'&& obj.revopsType === 'duplicate' && obj.duplicateImagePath?.length > 0)\" class=\"mx-2 badge badge-light-primary\">{{obj.duplicateImagePath?.length}}</span>\r\n <span *ngIf=\"obj?.status ==='approved'\" 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\" 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></span>\r\n <span *ngIf=\"obj?.status ==='rejected'\" 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\" 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=\"img-doc-value\">Entry Time : {{obj?.entryTme}}</div>\r\n </div>\r\n <div class=\"col-md-5 text-end py-3\">\r\n <span *ngIf=\"obj?.revopsType ==='non-tagging'\" ngbTooltip=\"Yet to tag the customer\"\r\n placement=\"top\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"18\"\r\n viewBox=\"0 0 19 18\" fill=\"none\">\r\n <path\r\n d=\"M6.02344 5.625H6.03094M16.2159 10.4325L10.8384 15.81C10.6991 15.9495 10.5337 16.0601 10.3516 16.1356C10.1695 16.2111 9.97431 16.2499 9.77719 16.2499C9.58006 16.2499 9.38487 16.2111 9.20278 16.1356C9.02068 16.0601 8.85525 15.9495 8.71594 15.81L2.27344 9.375V1.875H9.77344L16.2159 8.3175C16.4953 8.59854 16.6521 8.97872 16.6521 9.375C16.6521 9.77128 16.4953 10.1515 16.2159 10.4325Z\"\r\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"obj?.revopsType ==='duplicate'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\r\n viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94635)\">\r\n <path\r\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\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_2012_94635\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"obj?.revopsType ==='employee'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\r\n viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94639)\">\r\n <path\r\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\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_2012_94639\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"obj?.revopsType ==='house-keeping'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"21\"\r\n viewBox=\"0 0 21 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94643)\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\r\n fill=\"#475467\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2012_94643\">\r\n <rect width=\"21\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"obj?.revopsType ==='junk'\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n<path d=\"M3 6H5M5 6H21M5 6V20C5 20.5304 5.21071 21.0391 5.58579 21.4142C5.96086 21.7893 6.46957 22 7 22H17C17.5304 22 18.0391 21.7893 18.4142 21.4142C18.7893 21.0391 19 20.5304 19 20V6H5ZM8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M10 11V17M14 11V17\" stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</svg>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n </div>\r\n </section>\r\n\r\n <!-- full image View -->\r\n <section *ngIf=\"imageFlow\">\r\n <div class=\"row\">\r\n <div class=\"d-flex flex-shrink-0 mt-3 justify-content-start align-items-center px-0\">\r\n <span class=\"cursor-pointer\" (click)=\"backToFootfall1()\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_2585_7036)\">\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=\"M25.8327 19H14.166M14.166 19L19.9993 24.8334M14.166 19L19.9993 13.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2585_7036\" 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\" 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_2585_7036\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2585_7036\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span class=\"img-direc ms-2 mt-1\">{{folderDate | date:'dd MMM, yyyy'}}</span>\r\n </div>\r\n <div class=\"d-flex mt-2 mb-2 w-100 overflow-x px-0\">\r\n\r\n <!-- <div class=\"col text-nowrap\" *ngFor=\"let obj of objectsArray\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item cursor-pointer\">\r\n <a (click)=\"selectedTimes(obj.timeRange)\"\r\n [ngClass]=\"selectedTime === obj?.timeRange ? 'active' : ''\"\r\n class=\"nav-link cursor-pointer no-border mx-3 mb-2\">\r\n {{obj?.timeRange}}<span class=\"mx-2\"\r\n [ngClass]=\"selectedTime === obj?.timeRange ? 'badge-num-primary' :'badge-num-muted'\">\r\n {{ obj?.count ? obj?.count : 0 }}\r\n </span>\r\n </a>\r\n </li>\r\n </ul>\r\n </div> -->\r\n\r\n\r\n </div>\r\n\r\n <div class=\"row mx-0 border-gray img-traffic\" *ngIf=\"!noData && !loading\">\r\n <div class=\"col-md-6 p-2 mb-2 mt-5\">\r\n <div class=\"position-relative border-gray p-2 \">\r\n <!-- <button *ngIf=\"canNavigateLeft\" (click)=\"navigateImage('left')\"\r\n class=\"btn btn-light position-absolute start-0 top-50 z-index-10\">\r\n \u25C0\r\n </button> -->\r\n\r\n <!-- Main Image -->\r\n <img class=\"img-src cursor-pointer h-450px\" (click)=\"selectedImageArray(imageUrl, selectImageArray)\"\r\n [src]=\"imageUrl + selectImageArray?.filePath\" appMagnifier alt=\"\">\r\n <!-- <button *ngIf=\"canNavigateRight\" (click)=\"navigateImage('right')\"\r\n class=\"btn btn-light position-absolute end-0 top-50 z-index-10\">\r\n \u25B6\r\n </button> -->\r\n\r\n <!-- Right arrow button -->\r\n <div class=\"row px-2 mb-2\">\r\n <div class=\"col-md-7\">\r\n <div class=\"py-2 img-doc-time\">Tango ID : {{selectImageArray?.templd}}\r\n <span *ngIf=\"selectImageArray?.status ==='approved'\" 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\" 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></span>\r\n <span *ngIf=\"selectImageArray?.status ==='rejected'\" 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\" 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=\"img-doc-value\">Entry Time : {{selectImageArray?.entryTme}}</div>\r\n </div>\r\n <div class=\"col-md-5 text-end py-3\">\r\n <span *ngIf=\"selectImageArray?.revopsType ==='non-tagging'\"\r\n ngbTooltip=\"Yet to tag the customer\" placement=\"top\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"18\"\r\n viewBox=\"0 0 19 18\" fill=\"none\">\r\n <path\r\n d=\"M6.02344 5.625H6.03094M16.2159 10.4325L10.8384 15.81C10.6991 15.9495 10.5337 16.0601 10.3516 16.1356C10.1695 16.2111 9.97431 16.2499 9.77719 16.2499C9.58006 16.2499 9.38487 16.2111 9.20278 16.1356C9.02068 16.0601 8.85525 15.9495 8.71594 15.81L2.27344 9.375V1.875H9.77344L16.2159 8.3175C16.4953 8.59854 16.6521 8.97872 16.6521 9.375C16.6521 9.77128 16.4953 10.1515 16.2159 10.4325Z\"\r\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"selectImageArray?.revopsType ==='duplicate'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\r\n viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94635)\">\r\n <path\r\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\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_2012_94635\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"selectImageArray?.revopsType ==='employee'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\r\n viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94639)\">\r\n <path\r\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\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_2012_94639\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"selectImageArray?.revopsType ==='house-keeping'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"21\"\r\n viewBox=\"0 0 21 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94643)\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\r\n fill=\"#475467\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2012_94643\">\r\n <rect width=\"21\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-6 p-2 mb-2 mt-5\">\r\n <div class=\"mx-2 \">\r\n <div class=\"row\">\r\n <div class=\"col-md-6 title-type\">\r\n Select non-shopper type\r\n </div>\r\n \r\n\r\n <section class=\"col-md-6 text-end\" *ngIf=\"!(users?.role ==='user' && users?.userType ==='client' && selectedRadioType ==='junk')\">\r\n \r\n <div *ngIf=\"!revopsTypeValue\" class=\"mb-5 text-end\" role=\"group\">\r\n <div *ngIf=\"!getTicketStatuses().includes('open') && !getTicketStatuses().includes('closed')\">\r\n \r\n <button [disabled]=\"\r\n (selectedRadioType === undefined || selectedRadioType === '') ||\r\n (selectedRadioType === 'duplicate' && selectedDuplicateImagesList.length === 0)\r\n \"\r\n class=\"btn btn-default\" type=\"button\" (click)=\"clearValue()\">Clear</button>\r\n <button class=\"btn btn-outline me-2\" (click)=\"cancel()\">Cancel</button>\r\n <button\r\n class=\"btn btn-primary\"\r\n id=\"alert-toast\"\r\n (click)=\"save(selectedType)\"\r\n [disabled]=\"\r\n (selectedRadioType === undefined || selectedRadioType === '') ||\r\n (selectedRadioType === 'duplicate' && selectedDuplicateImagesList.length === 0)\r\n \"\r\n >\r\n Save\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"!(users?.role ==='user' && users?.userType ==='client' && selectedRadioType ==='junk')\">\r\n <ng-container *ngIf=\"editBtnShow\">\r\n <div *ngIf=\"revopsTypeValue\" class=\"mb-5 text-end\" role=\"group\">\r\n <button *ngIf=\"!getTicketStatuses().includes('open') && !getTicketStatuses().includes('closed')\" class=\"btn btn-outline me-2\" (click)=\"editValue()\"><span\r\n class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M14.6554 1.71047C14.8927 1.47315 15.1745 1.2849 15.4845 1.15646C15.7946 1.02802 16.1269 0.961914 16.4626 0.961914C16.7982 0.961914 17.1305 1.02802 17.4406 1.15646C17.7507 1.2849 18.0324 1.47315 18.2697 1.71047C18.5071 1.94779 18.6953 2.22953 18.8238 2.53961C18.9522 2.84969 19.0183 3.18202 19.0183 3.51765C19.0183 3.85327 18.9522 4.18561 18.8238 4.49568C18.6953 4.80576 18.5071 5.0875 18.2697 5.32482L6.0713 17.5233L1.10156 18.8786L2.45695 13.9089L14.6554 1.71047Z\"\r\n stroke=\"#344054\" stroke-width=\"1.81079\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>Edit</button>\r\n \r\n </div>\r\n </ng-container>\r\n </div>\r\n </section>\r\n \r\n </div>\r\n\r\n <div class=\"form-check my-15\">\r\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"duplicate\"\r\n id=\"duplicate\" [(ngModel)]=\"selectedType\" [value]=\"'duplicate'\"\r\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"revopsTypeValue\">\r\n <label class=\"form-check-label\" for=\"duplicate\">\r\n <span class=\"ms-5\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\r\n viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94635)\">\r\n <path\r\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\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_2012_94635\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span class=\"ms-5 tag-class\">Duplicate</span>\r\n </label>\r\n </div>\r\n <div class=\"form-check my-15\">\r\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"employee\"\r\n id=\"employee\" [(ngModel)]=\"selectedType\" [value]=\"'employee'\"\r\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"revopsTypeValue\">\r\n <label class=\"form-check-label\" for=\"employee\">\r\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94639)\">\r\n <path\r\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\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_2012_94639\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n <span class=\"ms-5 tag-class\">Employee/Staff</span>\r\n </label>\r\n </div>\r\n <div class=\"form-check my-15\">\r\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"house-keeping\"\r\n id=\"house-keeping\" [(ngModel)]=\"selectedType\" [value]=\"'house-keeping'\"\r\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"revopsTypeValue\">\r\n <label class=\"form-check-label\" for=\"house-keeping\">\r\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\"\r\n height=\"21\" viewBox=\"0 0 21 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94643)\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\r\n fill=\"#475467\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2012_94643\">\r\n <rect width=\"21\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n <span class=\"ms-5 tag-class\"> House Keeping</span>\r\n </label>\r\n </div>\r\n <div class=\"form-check my-15\">\r\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"junk\"\r\n id=\"junk\" [(ngModel)]=\"selectedType\" [value]=\"'junk'\"\r\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"users?.role ==='user' && this.users?.userType ==='client' || revopsTypeValue\">\r\n <label class=\"form-check-label\" for=\"junk\">\r\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M3 6H5M5 6H21M5 6V20C5 20.5304 5.21071 21.0391 5.58579 21.4142C5.96086 21.7893 6.46957 22 7 22H17C17.5304 22 18.0391 21.7893 18.4142 21.4142C18.7893 21.0391 19 20.5304 19 20V6H5ZM8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M10 11V17M14 11V17\" stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</svg></span>\r\n <span class=\"ms-5 tag-class\"> Junk</span>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n \r\n <div class=\"row px-0 img-traffic mt-3 high-400px scroll-y\">\r\n <div class=\"col-md-3 border-gray mx-2 p-2 mt-5\" *ngFor=\"let obj of remainingImageArray\">\r\n <div class=\"position-relative\">\r\n <!-- <input *ngIf=\"selectedRadioType === 'duplicate'\" type=\"checkbox\" \r\n [(ngModel)]=\"obj.selected\" class=\"position-absolute absolute form-check-input\"\r\n (change)=\"onImageCheckboxChange(obj, 'duplicate')\" /> -->\r\n <input \r\n *ngIf=\"!revopsTypeValue && selectedRadioType === 'duplicate'\"\r\n type=\"checkbox\"\r\n [checked]=\"obj.selected\"\r\n class=\"position-absolute absolute form-check-input cursor-pointer\"\r\n (change)=\"onImageCheckboxChange($event, obj, 'duplicate')\"\r\n [disabled]=\"obj.duplicateImagePath?.length > 0\"\r\n/>\r\n\r\n<img\r\n class=\"img-src\"\r\n [ngClass]=\"selectedRadioType !== 'duplicate' ? 'cursor-pointer' : 'cursor-pointer'\"\r\n [src]=\"imageUrl + obj?.filePath\"\r\n (error)=\"obj.filePath = null\"\r\n alt=\"\"\r\n (click)=\"handleImageClick($event, obj)\"\r\n/>\r\n\r\n <div *ngIf=\"!obj?.filePath\" class=\"no-preview\">\r\n <span class=\"mb-5\">\r\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"Group\">\r\n <path id=\"Vector\"\r\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path id=\"Vector_2\"\r\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"header mb-5 text-center\">Preview not available</span>\r\n <span class=\"description mb-5 text-center\">The selected camera is not available at\r\n the\r\n moment.</span>\r\n </div>\r\n <div class=\"row px-2 mb-2\">\r\n <div class=\"col-md-7\">\r\n <div class=\"py-2 img-doc-time\">Tango ID : {{obj?.templd ? obj?.templd : obj?.tempId}} \r\n <span *ngIf=\"obj?.status ==='approved'\" 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\" 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></span>\r\n <span *ngIf=\"obj?.status ==='rejected'\" 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\" 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=\"img-doc-value\">Entry Time : {{obj?.entryTme ? obj?.entryTme :obj?.entryTime}}</div>\r\n </div>\r\n <div class=\"col-md-5 text-end py-3\">\r\n <span *ngIf=\"obj?.revopsType ==='non-tagging'\"\r\n ngbTooltip=\"Yet to tag the customer\" placement=\"top\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"18\"\r\n viewBox=\"0 0 19 18\" fill=\"none\">\r\n <path\r\n d=\"M6.02344 5.625H6.03094M16.2159 10.4325L10.8384 15.81C10.6991 15.9495 10.5337 16.0601 10.3516 16.1356C10.1695 16.2111 9.97431 16.2499 9.77719 16.2499C9.58006 16.2499 9.38487 16.2111 9.20278 16.1356C9.02068 16.0601 8.85525 15.9495 8.71594 15.81L2.27344 9.375V1.875H9.77344L16.2159 8.3175C16.4953 8.59854 16.6521 8.97872 16.6521 9.375C16.6521 9.77128 16.4953 10.1515 16.2159 10.4325Z\"\r\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"obj?.revopsType ==='duplicate'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\r\n viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94635)\">\r\n <path\r\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\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_2012_94635\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"obj?.revopsType ==='employee'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\r\n viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94639)\">\r\n <path\r\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\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_2012_94639\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"obj?.revopsType ==='house-keeping'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"21\"\r\n viewBox=\"0 0 21 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94643)\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\r\n fill=\"#475467\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2012_94643\">\r\n <rect width=\"21\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"obj?.revopsType ==='junk'\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n<path d=\"M3 6H5M5 6H21M5 6V20C5 20.5304 5.21071 21.0391 5.58579 21.4142C5.96086 21.7893 6.46957 22 7 22H17C17.5304 22 18.0391 21.7893 18.4142 21.4142C18.7893 21.0391 19 20.5304 19 20V6H5ZM8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M10 11V17M14 11V17\" stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n</svg>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </section>\r\n </div>\r\n </section>\r\n</div>\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 <span *ngIf=\"popupType === 'non-tagging'\" class=\"my-3\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\r\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\" />\r\n <g clip-path=\"url(#clip0_2088_98337)\">\r\n <path\r\n d=\"M29.1693 13.3333V18.3333M29.1693 18.3333H24.1693M29.1693 18.3333L25.3026 14.7C24.407 13.8039 23.299 13.1493 22.0819 12.7973C20.8649 12.4453 19.5785 12.4073 18.3428 12.6869C17.1072 12.9665 15.9624 13.5545 15.0155 14.3962C14.0685 15.2378 13.3502 16.3056 12.9276 17.5M10.8359 26.6666V21.6666M10.8359 21.6666H15.8359M10.8359 21.6666L14.7026 25.3C15.5982 26.1961 16.7062 26.8506 17.9233 27.2027C19.1403 27.5547 20.4267 27.5927 21.6624 27.3131C22.898 27.0335 24.0428 26.4455 24.9897 25.6038C25.9367 24.7621 26.655 23.6943 27.0776 22.5\"\r\n stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2088_98337\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(10 10)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <!-- Heading -->\r\n <h5 class=\"modal-title mb-2\">\r\n <span *ngIf=\"popupType === 'employee'\">Tagging as employee/staff </span>\r\n <span *ngIf=\"popupType === 'duplicate'\">Tagging as duplicates </span>\r\n <span *ngIf=\"popupType === 'house-keeping'\">Tagging as house keeping </span>\r\n <span *ngIf=\"popupType === 'non-tagging'\">Clear duplicates</span>\r\n <span *ngIf=\"popupType ==='junk'\">Tagging as junk</span>\r\n \r\n </h5>\r\n <p class=\"mb-3\">\r\n <span *ngIf=\"popupType === 'employee'\">Are you sure you want to tag this as employee/staff?</span>\r\n <span *ngIf=\"popupType === 'duplicate'\">Are you sure you want to tag this as duplicates? </span>\r\n <span *ngIf=\"popupType === 'house-keeping'\">Are you sure you want to tag this as house keeping? </span>\r\n <span *ngIf=\"popupType === 'non-tagging'\">This will remove tagged duplicates and move them to\r\n 'Non-tag'.</span>\r\n <span *ngIf=\"popupType ==='junk'\">Are you sure you want to tag this as junk?</span>\r\n\r\n </p>\r\n </div>\r\n\r\n <div class=\"w-100 mt-5 d-flex justify-content-end\">\r\n <button class=\"btn btn-outline me-2\" (click)=\"cancelSubmit()\">Cancel</button>\r\n <button *ngIf=\"popupType !== 'non-tagging'\" class=\"btn btn-primary\" (click)=\"submitValue(popupType)\">\r\n Yes, Tag\r\n </button>\r\n <button *ngIf=\"popupType === 'non-tagging'\" class=\"btn btn-primary\" (click)=\"submitValue(popupType)\">\r\n Yes, clear\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<ng-template #raisedPopup 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 <span class=\"my-3\">\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\r\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\" />\r\n <path\r\n d=\"M21.251 11.0806C21.7405 11.0699 22.2153 11.2487 22.5762 11.5796L23.4922 12.4204C23.8089 12.7097 23.893 13.1017 23.8652 13.4263V13.4272C23.836 13.7478 23.6954 14.0592 23.4785 14.2944C23.3699 14.413 23.2865 14.5525 23.2314 14.7036C23.1764 14.8548 23.1512 15.0155 23.1582 15.1763C23.1652 15.337 23.2035 15.4953 23.2715 15.6411C23.3394 15.7869 23.4362 15.9172 23.5547 16.0259C23.6733 16.1346 23.8117 16.2198 23.9629 16.2749C24.1141 16.33 24.2748 16.3541 24.4355 16.3472C24.5961 16.3402 24.7537 16.3017 24.8994 16.2339C25.0089 16.1829 25.1106 16.116 25.2002 16.0356L25.3701 15.8657C25.5759 15.6748 25.8385 15.5408 26.1152 15.4907C26.2972 15.4546 26.485 15.4617 26.6641 15.5103C26.8439 15.5591 27.0103 15.649 27.1494 15.7729L27.1514 15.7749L28.2598 16.7905C28.445 16.9605 28.5948 17.1658 28.7002 17.394C28.8056 17.6223 28.8648 17.8694 28.874 18.1206C28.8832 18.372 28.8423 18.6234 28.7539 18.8589C28.6655 19.0941 28.5316 19.3096 28.3594 19.4927L20.1113 28.2583C19.937 28.4434 19.7268 28.5912 19.4941 28.6938C19.2614 28.7965 19.0102 28.8522 18.7559 28.856C18.5016 28.8597 18.2493 28.8119 18.0137 28.7163C17.7779 28.6206 17.5636 28.4784 17.3838 28.2983L16.2539 27.1685C15.7511 26.6656 15.8832 25.9552 16.1514 25.5542L16.2061 25.4644C16.3241 25.2486 16.3742 25.0008 16.3496 24.7544C16.3214 24.4731 16.197 24.2102 15.9971 24.0103C15.7971 23.8103 15.5343 23.6859 15.2529 23.6577C14.9715 23.6297 14.6887 23.6995 14.4531 23.856H14.4521C14.0494 24.1222 13.3407 24.2552 12.8379 23.7515L11.6797 22.5933C11.5034 22.4169 11.364 22.2074 11.2686 21.9771C11.1731 21.7467 11.1231 21.4999 11.123 21.2505C11.123 21.001 11.1731 20.7535 11.2686 20.5229C11.364 20.2926 11.5034 20.0831 11.6797 19.9067L19.9492 11.6362C20.2954 11.2902 20.7616 11.0912 21.251 11.0806ZM21.2783 12.3804C21.1237 12.3838 20.9765 12.4468 20.8672 12.5562L12.5967 20.8257C12.5409 20.8814 12.497 20.9482 12.4668 21.021C12.4367 21.0938 12.4209 21.1717 12.4209 21.2505C12.4209 21.3292 12.4367 21.4073 12.4668 21.48C12.497 21.5528 12.541 21.6196 12.5967 21.6753L13.7061 22.7837L13.7314 22.772C14.2169 22.4485 14.7993 22.3035 15.3799 22.3608C15.9608 22.4183 16.5042 22.6747 16.917 23.0874C17.3298 23.5002 17.587 24.0436 17.6445 24.6245C17.702 25.2055 17.5565 25.7892 17.2324 26.2749L17.2305 26.2759C17.2261 26.2822 17.2226 26.2893 17.2197 26.2964L18.3018 27.3804C18.3585 27.4372 18.4266 27.482 18.501 27.5122C18.5755 27.5425 18.6559 27.5574 18.7363 27.5562C18.8166 27.5549 18.8963 27.5378 18.9697 27.5054C19.043 27.4729 19.1091 27.4261 19.1641 27.3677L27.4131 18.6021C27.4673 18.5442 27.5093 18.4761 27.5371 18.4019C27.5649 18.3276 27.5781 18.2487 27.5752 18.1694C27.5722 18.0902 27.5538 18.0119 27.5205 17.9399C27.4872 17.8679 27.4394 17.8032 27.3809 17.7495L26.3223 16.7778C26.2925 16.7885 26.2648 16.8053 26.2432 16.8286C26.0217 17.0788 25.7529 17.2827 25.4521 17.4282C25.15 17.5743 24.8214 17.6585 24.4863 17.6763C24.1511 17.694 23.815 17.6452 23.499 17.5317C23.1832 17.4183 22.8928 17.2429 22.6455 17.0161C22.3982 16.7893 22.1988 16.5153 22.0586 16.2104C21.9183 15.9055 21.8404 15.5752 21.8291 15.2397C21.8178 14.9043 21.8737 14.57 21.9932 14.2563C22.1121 13.9442 22.2915 13.6587 22.5215 13.4165L22.5547 13.3657C22.5594 13.3552 22.5607 13.3437 22.5635 13.3325L21.6973 12.5386V12.5376C21.5833 12.4331 21.4329 12.377 21.2783 12.3804Z\"\r\n fill=\"#00A3FF\" stroke=\"#00A3FF\" stroke-width=\"0.3\" />\r\n </svg>\r\n </span>\r\n <!-- Heading -->\r\n <h5 class=\"modal-title mb-2\">\r\n <span>Raise tickets for the following</span>\r\n\r\n </h5>\r\n <p class=\"mb-3\">\r\n <span>Raising a ticket for footfall count issues. Make sure all records are identified for\r\n validation.</span>\r\n\r\n\r\n </p>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-3 my-4\">\r\n <div class=\"border border-1 rounded p-3 h-100\">\r\n <div class=\"fw-semibold fs-5 mb-2\">\r\n {{tempRaisedPayload?.duplicateCount ? tempRaisedPayload?.duplicateCount :'0'}}\r\n </div>\r\n <div class=\"fw-semibold text-muted fs-6 mt-2\">\r\n Duplicates\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-3 my-4\">\r\n <div class=\"border border-1 rounded p-3 h-100\">\r\n <div class=\"fw-semibold fs-5 mb-2\">\r\n {{tempRaisedPayload?.employeeCount ? tempRaisedPayload?.employeeCount:'0' }}\r\n </div>\r\n <div class=\"fw-semibold text-muted fs-6 mt-2\">\r\n Employee\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-3 my-4\">\r\n <div class=\"border border-1 rounded p-3 h-100\">\r\n <div class=\"fw-semibold fs-5 mb-2\">\r\n {{tempRaisedPayload?.houseKeepingCount ? tempRaisedPayload?.houseKeepingCount :'0'}}\r\n </div>\r\n <div class=\"fw-semibold text-muted fs-6 mt-2\">\r\n House Keeping\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 my-4\">\r\n <div class=\"border border-1 rounded p-3 h-100\">\r\n <div class=\"fw-semibold fs-5 mb-2\">\r\n {{tempRaisedPayload?.junkCount ? tempRaisedPayload?.junkCount :'0'}}\r\n </div>\r\n <div class=\"fw-semibold text-muted fs-6 mt-2\">\r\n Junk\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Label and Textarea -->\r\n <div class=\"my-3\">\r\n <label class=\"form-label\">Description (Optional)</label>\r\n <textarea rows=\"3\" [(ngModel)]=\"commentText\" class=\"form-control\"\r\n placeholder=\"Enter description\"></textarea>\r\n </div>\r\n <div class=\"w-100 mt-5 d-flex justify-content-end\">\r\n\r\n <button class=\"btn btn-outline w-50 me-2\" (click)=\"cancelRasied()\">Cancel</button>\r\n <button class=\"btn btn-primary w-50\" (click)=\"submitRaised()\">\r\n Raise Ticket\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<ng-template #imagePopup let-model>\r\n <div class=\"mx-4\">\r\n <div class=\"row\">\r\n <div class=\" p-2 mb-2 mt-5\">\r\n <div *ngIf=\"isModalOpen\" class=\"position-relative border-gray p-2 \">\r\n <!-- <button *ngIf=\"canNavigateLeft\" (click)=\"navigateImage('left')\"\r\n class=\"btn btn-light position-absolute start-0 top-50 z-index-10\">\r\n \u25C0\r\n </button> -->\r\n\r\n <!-- Main Image -->\r\n <img class=\" cursor-pointer w-100 h-525px\"\r\n [src]=\"imageUrl + selectImageArray?.filePath\" appMagnifier alt=\"\">\r\n <!-- <button *ngIf=\"canNavigateRight\" (click)=\"navigateImage('right')\"\r\n class=\"btn btn-light position-absolute end-0 top-50 z-index-10\">\r\n \u25B6\r\n </button> -->\r\n\r\n <!-- Right arrow button -->\r\n <div class=\"row px-2 mb-2\">\r\n <div class=\"col-md-7\">\r\n <div class=\"py-2 img-doc-time\">Tango ID : {{selectImageArray?.templd}}\r\n <span *ngIf=\"selectImageArray?.status ==='approved'\" 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\" 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></span>\r\n <span *ngIf=\"selectImageArray?.status ==='rejected'\" 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\" 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=\"img-doc-value\">Entry Time : {{selectImageArray?.entryTme}}</div>\r\n </div>\r\n <div class=\"col-md-5 text-end py-3\">\r\n <span *ngIf=\"selectImageArray?.revopsType ==='non-tagging'\"\r\n ngbTooltip=\"Yet to tag the customer\" placement=\"top\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"18\"\r\n viewBox=\"0 0 19 18\" fill=\"none\">\r\n <path\r\n d=\"M6.02344 5.625H6.03094M16.2159 10.4325L10.8384 15.81C10.6991 15.9495 10.5337 16.0601 10.3516 16.1356C10.1695 16.2111 9.97431 16.2499 9.77719 16.2499C9.58006 16.2499 9.38487 16.2111 9.20278 16.1356C9.02068 16.0601 8.85525 15.9495 8.71594 15.81L2.27344 9.375V1.875H9.77344L16.2159 8.3175C16.4953 8.59854 16.6521 8.97872 16.6521 9.375C16.6521 9.77128 16.4953 10.1515 16.2159 10.4325Z\"\r\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"selectImageArray?.revopsType ==='duplicate'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\r\n viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94635)\">\r\n <path\r\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\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_2012_94635\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"selectImageArray?.revopsType ==='employee'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\r\n viewBox=\"0 0 20 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94639)\">\r\n <path\r\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\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_2012_94639\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"selectImageArray?.revopsType ==='house-keeping'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"21\"\r\n viewBox=\"0 0 21 21\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_2012_94643)\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\r\n fill=\"#475467\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2012_94643\">\r\n <rect width=\"21\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0 0.686035)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"modal-footer py-2 px-0\"> -->\r\n\r\n <div class=\"w-100 py-2 mb-2 px-0 d-flex justify-content-end\">\r\n \r\n <button class=\"btn btn-outline\" (click)=\"closeImage()\">Close</button>\r\n \r\n </div>\r\n <!-- </div> -->\r\n </div>\r\n</ng-template>", styles: [".switch-form-card{padding:8px 16px;border-radius:4px;border-left:2px solid var(--Primary-600, #00A3FF);background:var(--Primary-25, #F6FCFF);display:flex;align-items:center;justify-content:space-between}.switch-form-card .txt-one{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;line-height:140%}.nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.badge-num-primary{border-radius:16px!important;background:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-700, #009BF3)!important;text-align:center;font-size:14px!important;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.badge-num-muted{border-radius:16px!important;background:var(--Primary-50, #F2F4F7)!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.img-src{width:100%;height:195px;border-radius:.625rem}.img-traffic .col-md-3{width:24%!important}.border-gray{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF)}.img-doc-directory{color:var(--Gray-900, #101828)!important;font-size:14px!important;font-weight:600;line-height:20px;text-decoration-line:underline}.img-doc-time{color:var(--Gray-800, #1D2939);font-size:14px;font-weight:500;line-height:20px}.img-doc-value{color:var(--Gray-600, #667085);font-size:14px;font-weight:500;line-height:20px}.overflow-x{overflow-x:auto}.no-preview{border:1px solid #F04438;background:#fee4e2;border-radius:8px;stroke-width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:41px 16px}.no-preview .header{color:#f04438;font-size:20px;font-weight:700;line-height:20px}.no-preview .description{color:#f04438;font-size:12px;font-weight:500;line-height:18px}.img-nodata{width:25%;height:15%}.img-nodata1{width:15%;height:15%}.nodata-title{font-size:14px!important;font-weight:600}.img-direc{color:var(--Gray-900, #101828)!important;font-size:18px!important;font-weight:500;line-height:28px}.custom-accordion{border-radius:5px}.custom-accordion-item{margin-bottom:10px}.custom-accordion-header{background-color:#fff;border:none;cursor:pointer;padding:10px;text-align:left;width:100%;display:flex;justify-content:space-between;align-items:center}.custom-accordion{width:100%}.mainheading{width:100%;display:flex;justify-content:space-between;align-items:center;padding:19px;border:none;background:none;cursor:pointer}.header-row{display:flex;align-items:center;width:100%;justify-content:space-between}.img-dire{font-size:16px;font-weight:700}.divider{flex-grow:1;height:1px;background-color:#ddd;margin:0 10px}.accordion-arrow{display:flex;align-items:center}.scroll-container{max-height:400px;overflow-y:auto;overflow-x:hidden}.high-400px{min-height:auto!important;max-height:800px!important}.scroll-y{overflow-y:auto}.absolute{top:5px;right:5px;z-index:2}.slider{position:relative}.slider .previous{position:absolute;top:30%;left:2%;width:32px;height:32px;background-color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer}.slider .next{position:absolute;top:30%;right:2%;width:32px;height:32px;background-color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer}.img-src1{border-radius:12px;border:1px solid var(--Gray-400, #98A2B3);background:var(--Gray-50, #F9FAFB);width:100%;height:375px}.border-gray{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);padding:0 4px}.border-gray-active{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--Primary-50, #EAF8FF);padding:0 4px}.zone-header{color:var(--Gray-900, #101828);font-size:14px;font-weight:600;line-height:20px}.last-visit{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.toggle-label{color:var(--Gray-900, #101828);font-size:16px;font-weight:600;line-height:24px}.nav-dev{border-radius:8px!important;border:1px solid var(--Primary-200, #99DAFF)!important;background:var(--Primary-25, #F6FCFF)!important}.tab-active{border-radius:6px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)!important;font-size:14px;font-weight:500;line-height:20px}.tab-text-default{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px}.border-gray-active1{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--Primary-50, #ffffff);padding:12px!important}.nav-item1 .nav-link1.active{border:none;border-radius:0;background:var(--Primary-50, #EAF8FF);border-bottom:2px solid #009BF3!important;padding:12px;color:var(--Primary-700, #009BF3);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.active-normal{padding:12px;color:var(--Gray-500, #667085);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.nav-item1 .nav-link1:hover{border:none}.tag-class{color:var(--Gray-900, #101828);font-size:14px;font-weight:600;line-height:20px}.spent-title{color:var(--Gray-600, #475467);font-size:14px;font-weight:600;line-height:20px}.spent-value{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.spent-value1{color:var(--Primary-500, #33B5FF);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:none;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.w-33{width:30%}.w-45{width:45%}.view-tetory{color:var(--Primary-700, #009BF3);font-size:14px;font-weight:600;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:none;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;text-transform:capitalize}.border-gray-tagged{border-radius:4px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--Primary-50, #ffffff);padding:8px!important}.desc-id{color:var(--Gray-900, #101828);font-size:12px;font-style:normal;font-weight:400;line-height:20px}.active-tab{border-bottom:2px solid #0d6efd;font-weight:600;color:#0d6efd}.badge-selected{background-color:#e0f3ff;color:#0d6efd;border:1px solid #0d6efd;border-radius:20px;padding:6px 12px}.badge-unselected{background-color:#f0f0f0;color:#333;border-radius:20px;padding:6px 12px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.cursor-not-allowed{cursor:not-allowed!important}.title-type{color:var(--Gray-800, #1D2939);font-size:16px;font-weight:600;line-height:24px}.top-50{top:35%!important}.activePlanBtn{border-radius:6px;background:var(--Primary-50, #EAF8FF);color:var(--Gray-700, #344054);font-size:14px!important;font-weight:500!important;line-height:20px}.inactivePlanBtn{color:var(--Gray-500, #344054)!important;font-size:14px;font-weight:500!important;line-height:20px}.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}input[type=checkbox]{width:18px!important;height:18px!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}::ng-deep .modal-backdrop{pointer-events:none}\n"] }]
|
|
1316
|
+
args: [{ selector: "lib-img-rvps", template: "<div class=\"card mt-3\">\n <div class=\"card-header mt-3 px-0 border-bottom-0\">\n <div class=\"custom-accordion\">\n <div class=\"custom-accordion-item\">\n <!-- for new navigation changes -->\n <!-- old view while folder view -->\n <button *ngIf=\"folderView\" class=\"mainheading pb-0 custom-accordion-header\" (click)=\"toggleAccordion()\">\n <div class=\"header-row\">\n <span class=\"img-direc\">Image Directory</span>\n\n <span class=\"divider\"></span>\n <span class=\"accordion-arrow\">\n <!-- Down arrow for collapsed state, up arrow for expanded state -->\n <svg *ngIf=\"!isAccordionExpanded\" xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"6\"\n viewBox=\"0 0 16 6\" fill=\"none\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"#071437\" stroke-width=\"1\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <svg *ngIf=\"isAccordionExpanded\" xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"6\"\n viewBox=\"0 0 16 6\" fill=\"none\">\n <path d=\"M1 5L5 1L9 5\" stroke=\"#1b84ff\" stroke-width=\"1\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n </div>\n </button>\n <!-- new view while not in folder view view -->\n <div *ngIf=\"!folderView\" class=\"header-row\">\n <span *ngIf=\"backnav && !imageFlow\" class=\"cursor-pointer\" (click)=\"backToFootfall()\">\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g filter=\"url(#filter0_d_2585_7036)\">\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\n <path d=\"M25.8327 19H14.166M14.166 19L19.9993 24.8334M14.166 19L19.9993 13.1667\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <filter id=\"filter0_d_2585_7036\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\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\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_2585_7036\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2585_7036\"\n result=\"shape\" />\n </filter>\n </defs>\n </svg>\n </span>\n <!-- back from image flow -->\n <span *ngIf=\"imageFlow\" class=\"cursor-pointer\" (click)=\"backToFootfall1()\">\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g filter=\"url(#filter0_d_2585_7036)\">\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\n <path d=\"M25.8327 19H14.166M14.166 19L19.9993 24.8334M14.166 19L19.9993 13.1667\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <filter id=\"filter0_d_2585_7036\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\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\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_2585_7036\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2585_7036\"\n result=\"shape\" />\n </filter>\n </defs>\n </svg>\n </span>\n <span class=\"img-direc\">Image Directory | {{folderDate | date:'dd MMM, yyyy'}}</span>\n <button *ngIf=\"!folderView\" class=\"mainheading-1 pb-0 custom-accordion-header\"\n (click)=\"toggleAccordion()\">\n <span class=\"divider\"></span>\n <span class=\"accordion-arrow\">\n <!-- Down arrow for collapsed state, up arrow for expanded state -->\n <svg *ngIf=\"!isAccordionExpanded\" xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"6\"\n viewBox=\"0 0 16 6\" fill=\"none\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"#071437\" stroke-width=\"1\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <svg *ngIf=\"isAccordionExpanded\" xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"6\"\n viewBox=\"0 0 16 6\" fill=\"none\">\n <path d=\"M1 5L5 1L9 5\" stroke=\"#1b84ff\" stroke-width=\"1\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <section *ngIf=\"isAccordionExpanded\">\n\n <div *ngIf=\"folderView\" class=\"card-body px-0\">\n <div class=\"date-list-container\">\n <div class=\"date-list-scroll\">\n <div class=\"date-card\" *ngFor=\"let obj of dateArray; let i = index\"\n [ngClass]=\"{'date-card-active': i === selectIndex}\" (click)=\"getimages(i, obj)\">\n <div class=\"date-card-header\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\" class=\"calendar-icon\">\n <path\n d=\"M12.6667 2.66667H12V2C12 1.63181 11.7015 1.33333 11.3333 1.33333C10.9651 1.33333 10.6667 1.63181 10.6667 2V2.66667H5.33333V2C5.33333 1.63181 5.03486 1.33333 4.66667 1.33333C4.29848 1.33333 4 1.63181 4 2V2.66667H3.33333C2.59695 2.66667 2 3.26362 2 4V13.3333C2 14.0697 2.59695 14.6667 3.33333 14.6667H12.6667C13.403 14.6667 14 14.0697 14 13.3333V4C14 3.26362 13.403 2.66667 12.6667 2.66667ZM12.6667 13.3333H3.33333V6H12.6667V13.3333Z\"\n fill=\"#667085\" />\n </svg>\n <span class=\"date-text\">{{obj | date:'dd MMM'}}</span>\n <span *ngIf=\"cardDataMap[obj]?.ticketStatusLower as status\" class=\"badge ms-2\" [ngClass]=\"{\n 'badge-light-success': status === 'closed',\n 'badge-light-warning': status === 'raised',\n 'badge-light-default': status !== 'closed' && status !== 'raised'\n }\">\n {{ status === 'closed' ? 'Ticket closed' : (status === 'raised' ? 'Ticket raised' :\n (cardDataMap[obj]?.ticketStatus || '')) }}\n </span>\n </div>\n <div class=\"footfall-count\">{{ cardDataMap[obj]?.footfallCount || 0 }}</div>\n <div class=\"footfall-label\">Total footfall</div>\n </div>\n </div>\n </div>\n </div>\n\n\n\n <div *ngIf=\"!folderView\" class=\"card-body\">\n <section *ngIf=\"!imageFlow\">\n <div class=\"row\">\n <!-- Ticket Block Alert -->\n <div *ngIf=\"getSelectedDateCardData()?.raisedStatusEnabled === 'block'\" class=\"col-12 mb-3\">\n <div class=\"ticket-block-alert\">\n <div class=\"ticket-block-alert-content\">\n <div class=\"ticket-block-alert-icon\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"12\" cy=\"12\" r=\"12\" fill=\"#F04438\" />\n <path d=\"M12 8V13\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n </div>\n <div class=\"ticket-block-alert-text\">\n <div class=\"ticket-block-alert-title\">\n You cannot raise ticket for next {{ getSelectedDateCardData()?.noOfBlockedDays\n || '0' }} days\n </div>\n <div class=\"ticket-block-alert-description\">\n It looks like you have achieved 95% accuracy for the three tickets raised this\n month. This limits you from raising more tickets to avoid redundancy.\n </div>\n <div class=\"ticket-block-alert-action\">\n If you still want to raise tickets, <span class=\"ticket-block-alert-link\"\n (click)=\"requestReset()\">send request</span> to reset.\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Ticket Request Success Alert -->\n <div *ngIf=\"getSelectedDateCardData()?.raisedStatusEnabled === 'request'\" class=\"col-12 mb-3\">\n <div class=\"ticket-request-alert\">\n <div class=\"ticket-request-alert-content\">\n <div class=\"ticket-request-alert-icon\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 21L23 12L2 3V10L17 12L2 14V21Z\" fill=\"#10B981\" />\n </svg>\n </div>\n <div class=\"ticket-request-alert-text\">\n <div class=\"ticket-request-alert-title\">\n Reset Request Sent\n </div>\n <div class=\"ticket-request-alert-description\">\n Your request to enable ticket raising has been submitted. You'll be notified\n once it's approved. Please ensure future ticket accuracy remains within the 95%\n threshold.\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- footfall trends feature -->\n <ng-container *ngTemplateOutlet=\"footfallTrendsTemplate\"></ng-container>\n <ng-container *ngTemplateOutlet=\"ticketStatusTemplate\"></ng-container>\n <span class=\"divider\"></span>\n <!-- footfall trends feature end -->\n <div class=\"d-flex flex-shrink-0 mt-3 justify-content-start align-items-center px-0\">\n <!-- <span *ngIf=\"backnav\" class=\"cursor-pointer\" (click)=\"backToFootfall()\">\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g filter=\"url(#filter0_d_2585_7036)\">\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\n <path d=\"M25.8327 19H14.166M14.166 19L19.9993 24.8334M14.166 19L19.9993 13.1667\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <filter id=\"filter0_d_2585_7036\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\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\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_2585_7036\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2585_7036\"\n result=\"shape\" />\n </filter>\n </defs>\n </svg>\n </span> -->\n <!-- <span class=\"img-direc ms-2 mt-1\">{{folderDate | date:'dd MMM, yyyy'}}\n <span class=\"badge badge-light-warning mx-2\"\n *ngIf=\"!getTicketStatuses().includes('closed') && getTicketStatuses().includes('open')\">\n Ticket Raised\n </span>\n <span class=\"badge badge-light-success mx-2\"\n *ngIf=\"getTicketStatuses().includes('closed')\">Ticket Closed</span>\n\n </span> -->\n <div *ngIf=\"!getTicketStatuses().includes('open') && !getTicketStatuses().includes('closed')\"\n class=\"ms-auto text-end\">\n <button [disabled]=\"!canEnableButton()\" class=\"btn btn-primary\" type=\"button\"\n (click)=\"Raised()\">\n Raise ticket\n </button>\n </div>\n </div>\n <div *ngIf=\"!folderView\" class=\"d-flex flex-wrap align-items-center justify-content-between w-100 my-2 gap-3\">\n <div class=\"nav-group bg-white border-1 btn-group w-auto\">\n <ng-container *ngIf=\"!(countData?.length > 0)\">\n \n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'footfall' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('footfall')\">\n Total Footfall\n <span\n [ngClass]=\"type === 'footfall' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\n {{ countData?.footfallCount || 0 }}\n </span>\n </button>\n \n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'non-tagging' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('non-tagging')\">\n Non-tags\n <span\n [ngClass]=\"type === 'non-tagging' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\n {{ countData?.nonTags || 0 }}\n </span>\n </button>\n \n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'duplicate' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('duplicate')\">\n Duplicated\n <span\n [ngClass]=\"type === 'duplicate' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\n {{ countData?.duplicate || 0 }}\n </span>\n </button>\n \n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'employee' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('employee')\">\n Employee/Staff\n <span\n [ngClass]=\"type === 'employee' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\n {{ countData?.employee || 0 }}\n </span>\n </button>\n <button class=\"btn btn-outline px-6 py-3\" [ngClass]=\"type === 'junk' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('junk')\">\n Junk\n <span\n [ngClass]=\"type === 'junk' ? 'badge badge-active activePlanBtn' : ' badge badge-light-default inactivePlanBtn'\">\n {{ countData?.junk || 0 }}\n </span>\n </button>\n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'house-keeping' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('house-keeping')\">\n House Keeping\n <span\n [ngClass]=\"type === 'house-keeping' ? 'badge badge-active activePlanBtn' : ' badge badge-light-default inactivePlanBtn'\">\n {{ countData?.housekeeping || 0 }}\n </span>\n </button>\n \n \n </ng-container>\n \n </div>\n \n <div class=\"btn-group view-toggle ms-auto\" role=\"group\" aria-label=\"Toggle view\">\n <button type=\"button\" class=\"btn btn-outline px-3 py-2\" [ngClass]=\"{'active': viewMode === 'grid'}\"\n (click)=\"setViewMode('grid')\" aria-label=\"Grid view\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"3\" y=\"3\" width=\"4\" height=\"4\" rx=\"1\" stroke=\"#475467\"\n [attr.fill]=\"viewMode === 'grid' ? '#EAF8FF' : 'none'\"></rect>\n <rect x=\"11\" y=\"3\" width=\"4\" height=\"4\" rx=\"1\" stroke=\"#475467\"\n [attr.fill]=\"viewMode === 'grid' ? '#EAF8FF' : 'none'\"></rect>\n <rect x=\"3\" y=\"11\" width=\"4\" height=\"4\" rx=\"1\" stroke=\"#475467\"\n [attr.fill]=\"viewMode === 'grid' ? '#EAF8FF' : 'none'\"></rect>\n <rect x=\"11\" y=\"11\" width=\"4\" height=\"4\" rx=\"1\" stroke=\"#475467\"\n [attr.fill]=\"viewMode === 'grid' ? '#EAF8FF' : 'none'\"></rect>\n </svg>\n </button>\n <button type=\"button\" class=\"btn btn-outline px-3 py-2\" [ngClass]=\"{'active': viewMode === 'list'}\"\n (click)=\"setViewMode('list')\" aria-label=\"List view\">\n <svg width=\"20\" height=\"18\" viewBox=\"0 0 20 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2\" y=\"3\" width=\"4\" height=\"4\" rx=\"1\" stroke=\"#475467\"\n [attr.fill]=\"viewMode === 'list' ? '#EAF8FF' : 'none'\"></rect>\n <rect x=\"8\" y=\"4.5\" width=\"10\" height=\"1.5\" rx=\"0.75\" fill=\"#475467\"></rect>\n <rect x=\"8\" y=\"12.5\" width=\"10\" height=\"1.5\" rx=\"0.75\" fill=\"#475467\"></rect>\n <rect x=\"2\" y=\"11\" width=\"4\" height=\"4\" rx=\"1\" stroke=\"#475467\"\n [attr.fill]=\"viewMode === 'list' ? '#EAF8FF' : 'none'\"></rect>\n </svg>\n </button>\n </div>\n </div>\n <ng-container *ngIf=\"!imageFlow\">\n <div *ngIf=\"type === 'footfall' && viewMode === 'grid'\" class=\"d-flex mt-2 mb-2 w-100 overflow-x px-0\">\n <div class=\"col text-nowrap\" *ngFor=\"let obj of objectsArray\">\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\n <li class=\"nav-item cursor-pointer\">\n <a (click)=\"selectedTimes(obj.timeRange)\"\n [ngClass]=\"selectedTime === obj?.timeRange ? 'active' : ''\"\n class=\"nav-link cursor-pointer no-border mx-3 mb-2\">\n {{obj?.timeRange}}<span class=\"mx-2\"\n [ngClass]=\"selectedTime === obj?.timeRange ? 'badge-num-primary' :'badge-num-muted'\">\n {{ obj?.count ? obj?.count : 0 }}\n </span>\n </a>\n </li>\n </ul>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n </div>\n <div *ngIf=\"noData\" class=\"row\">\n\n <div class=\"col-lg-12 mb-3\">\n\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column \" style=\"margin: 64px;border-radius: 8px;\nbackground: var(--Gray-50, #F9FAFB);\">\n <svg width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\"\n stroke-width=\"13.3333\" />\n <path\n d=\"M35.332 51.9999H33.6654C32.7813 51.9999 31.9335 51.6487 31.3083 51.0236C30.6832 50.3985 30.332 49.5506 30.332 48.6666V33.6666C30.332 32.7825 30.6832 31.9347 31.3083 31.3096C31.9335 30.6844 32.7813 30.3333 33.6654 30.3333H48.6654C49.5494 30.3333 50.3973 30.6844 51.0224 31.3096C51.6475 31.9347 51.9987 32.7825 51.9987 33.6666V35.3333M45.332 41.9999H60.332C62.173 41.9999 63.6654 43.4923 63.6654 45.3333V60.3333C63.6654 62.1742 62.173 63.6666 60.332 63.6666H45.332C43.4911 63.6666 41.9987 62.1742 41.9987 60.3333V45.3333C41.9987 43.4923 43.4911 41.9999 45.332 41.9999Z\"\n stroke=\"#00A3FF\" stroke-width=\"4\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <div class=\"nodata-title my-3\">\n {{ noDataMessages[type?.toLowerCase()] || 'No data found' }}\n </div>\n\n </div>\n </div>\n\n </div>\n\n\n <!-- Split-screen layout (only shown after clicking an image) -->\n <div class=\"split-screen-container\" *ngIf=\"splitScreenEnabled && !noData && !loading\">\n <!-- Left Panel: Thumbnail List + Related Images -->\n <div class=\"left-panel\">\n <!-- Main Images List (hidden when duplicate is selected) -->\n <ng-container *ngIf=\"selectedRadioType !== 'duplicate'\">\n <div class=\"thumbnail-list-section\" *ngFor=\"let group of listViewGroups\">\n <div class=\"time-range-header\">\n <span class=\"time-range-title\">{{ group?.timeRange }}</span>\n <span class=\"time-range-count\">#{{ group?.data?.length || 0 }}</span>\n </div>\n <div class=\"thumbnail-grid\">\n <div class=\"thumbnail-item\" *ngFor=\"let obj of group?.data\"\n [ngClass]=\"{'selected': selectImageArray?.templd === obj?.templd}\"\n (click)=\"selectImageForSplitView(obj)\">\n <img class=\"thumbnail-image\" [src]=\"imageUrl + obj?.filePath\"\n (error)=\"obj.filePath = null\" alt=\"\" *ngIf=\"obj?.filePath\" />\n <div *ngIf=\"!obj?.filePath\" class=\"no-preview\"\n style=\"height: 120px; padding: 20px;\">\n <span style=\"color: #667085; font-size: 11px;\">No preview</span>\n </div>\n <div class=\"thumbnail-info\">\n <div class=\"tango-id\">Tango ID: {{ obj?.templd }}</div>\n <div class=\"entry-time\">Entry Time: {{ obj?.entryTme || obj?.entryTime\n }}</div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- Related Images Section (ONLY shown when duplicate is selected) -->\n <div class=\"thumbnail-list-section\"\n *ngIf=\"selectedRadioType === 'duplicate' && remainingImagesGroups && remainingImagesGroups.length > 0\">\n <!-- <div class=\"time-range-header\">\n <span class=\"time-range-title\">Select related images</span>\n </div> -->\n <div class=\"thumbnail-list-section\" *ngFor=\"let group of remainingImagesGroups\">\n <div class=\"time-range-header\" style=\"margin-top: 16px;\">\n <span class=\"time-range-title\">{{ group?.timeRange }}</span>\n <span class=\"time-range-count\">#{{ group?.data?.length || 0 }}</span>\n </div>\n <div class=\"thumbnail-grid\">\n <div class=\"thumbnail-item\" *ngFor=\"let obj of group?.data\"\n [ngClass]=\"{'selected': obj.selected}\">\n <div class=\"position-relative\">\n <input *ngIf=\"!revopsTypeValue && selectedRadioType === 'duplicate'\"\n type=\"checkbox\" [checked]=\"obj.selected\"\n class=\"position-absolute absolute form-check-input cursor-pointer\"\n style=\"top: 5px; right: 5px; z-index: 2;\"\n (change)=\"onImageCheckboxChange($event, obj, 'duplicate')\"\n (click)=\"$event.stopPropagation()\"\n [disabled]=\"obj.duplicateImagePath?.length > 0\" />\n <img class=\"thumbnail-image cursor-pointer\"\n [src]=\"imageUrl + obj?.filePath\" (error)=\"obj.filePath = null\"\n alt=\"\" *ngIf=\"obj?.filePath\"\n (click)=\"handleImageClick($event, obj)\" />\n <div *ngIf=\"!obj?.filePath\" class=\"no-preview cursor-pointer\"\n style=\"height: 120px; padding: 20px;\"\n (click)=\"handleImageClick($event, obj)\">\n <span style=\"color: #667085; font-size: 11px;\">No preview</span>\n </div>\n <div class=\"thumbnail-info\">\n <div class=\"tango-id\">Tango ID: {{ obj?.templd || obj?.tempId }}\n </div>\n <div class=\"entry-time\">Entry Time: {{ obj?.entryTme ||\n obj?.entryTime }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Right Panel: Selected Image Details -->\n <div class=\"right-panel\" *ngIf=\"selectImageArray\">\n <ng-container\n *ngTemplateOutlet=\"imageDetailView; context: { $implicit: selectImageArray }\"></ng-container>\n </div>\n <div class=\"right-panel\" *ngIf=\"!selectImageArray\"\n style=\"display: flex; align-items: center; justify-content: center; color: var(--Gray-500, #667085);\">\n <div style=\"text-align: center;\">\n <p style=\"font-size: 16px; font-weight: 500;\">Select an image to view details</p>\n </div>\n </div>\n </div>\n\n <!-- Image Detail View Template for Split-Screen Right Panel -->\n <ng-template #imageDetailView let-obj>\n <div class=\"border-gray p-3 mb-3\">\n <div class=\"position-relative\">\n <img class=\"img-src1\" [src]=\"imageUrl + obj?.filePath\" alt=\"\" *ngIf=\"obj?.filePath\" />\n <!-- Zoom Icon -->\n <div class=\"zoom-icon-button\" (click)=\"openImageZoomModal(imageUrl, obj)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\n fill=\"none\">\n <path\n d=\"M18.3333 18.3333L15 15M16.6667 9.16667C16.6667 13.3067 13.3067 16.6667 9.16667 16.6667C5.02667 16.6667 1.66667 13.3067 1.66667 9.16667C1.66667 5.02667 5.02667 1.66667 9.16667 1.66667C13.3067 1.66667 16.6667 5.02667 16.6667 9.16667Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M9.16667 6.66667V11.6667M6.66667 9.16667H11.6667\" stroke=\"#475467\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n <div *ngIf=\"!obj?.filePath\" class=\"no-preview\" style=\"height: 375px;\">\n <span class=\"mb-5\">\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"Group\">\n <path id=\"Vector\"\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path id=\"Vector_2\"\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n </svg>\n </span>\n <span class=\"header mb-5 text-center\">Preview not available</span>\n <span class=\"description mb-5 text-center\">The selected camera is not available at\n the moment.</span>\n </div>\n </div>\n <div class=\"row px-2 mb-2 mt-3\">\n <div class=\"col-md-7\">\n <div class=\"py-2 img-doc-time\">Tango ID : {{obj?.templd}}\n <span *ngIf=\"obj?.status ==='approved'\" class=\"ms-2\">\n <svg style=\"width: 20px; height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\"\n width=\"10\" height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\n <rect y=\"0.5\" width=\"10\" height=\"10\" rx=\"5\" fill=\"#D1FADF\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\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\"\n fill=\"#12B76A\" />\n </svg>\n </span>\n <span *ngIf=\"obj?.status ==='rejected'\" class=\"ms-2\">\n <svg style=\"width: 20px; height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\"\n width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\n <g clip-path=\"url(#clip0_1428_59484)\">\n <path\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\n fill=\"#FEE4E2\" />\n <path\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\"\n stroke=\"#D92D20\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_1428_59484\">\n <rect width=\"12\" height=\"12\" fill=\"white\"\n transform=\"translate(0.599609 0.5)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n </div>\n <div class=\"img-doc-value\">Entry Time : {{obj?.entryTme || obj?.entryTime}}</div>\n </div>\n <div class=\"col-md-5 text-end py-3\">\n <span *ngIf=\"obj?.revopsType ==='non-tagging'\" ngbTooltip=\"Yet to tag the customer\"\n placement=\"top\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"18\"\n viewBox=\"0 0 19 18\" fill=\"none\">\n <path\n d=\"M6.02344 5.625H6.03094M16.2159 10.4325L10.8384 15.81C10.6991 15.9495 10.5337 16.0601 10.3516 16.1356C10.1695 16.2111 9.97431 16.2499 9.77719 16.2499C9.58006 16.2499 9.38487 16.2111 9.20278 16.1356C9.02068 16.0601 8.85525 15.9495 8.71594 15.81L2.27344 9.375V1.875H9.77344L16.2159 8.3175C16.4953 8.59854 16.6521 8.97872 16.6521 9.375C16.6521 9.77128 16.4953 10.1515 16.2159 10.4325Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='duplicate'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\n viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94635)\">\n <path\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94635\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='employee'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\n viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94639)\">\n <path\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94639\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='house-keeping'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"21\"\n viewBox=\"0 0 21 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94643)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\n fill=\"#475467\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94643\">\n <rect width=\"21\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='junk'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M3 6H5M5 6H21M5 6V20C5 20.5304 5.21071 21.0391 5.58579 21.4142C5.96086 21.7893 6.46957 22 7 22H17C17.5304 22 18.0391 21.7893 18.4142 21.4142C18.7893 21.0391 19 20.5304 19 20V6H5ZM8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M10 11V17M14 11V17\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n </div>\n </div>\n </div>\n <div class=\"border-gray p-3\">\n <div class=\"row mb-3\">\n <div class=\"col-md-6 title-type\">Select non-shopper type</div>\n <div class=\"col-md-6 text-end\"\n *ngIf=\"!(users?.role ==='user' && users?.userType ==='client' && selectedRadioType ==='junk')\">\n <div *ngIf=\"!getTicketStatuses().includes('open') && !getTicketStatuses().includes('closed')\" class=\"mb-3 text-end d-inline-flex align-items-center gap-2\">\n <!-- Clear Tag Button (visible when Edit button OR Save/Cancel buttons are visible) -->\n <button\n *ngIf=\"!revopsTypeValue || (revopsTypeValue && editBtnShow)\"\n [disabled]=\"(selectedRadioType === undefined || selectedRadioType === '') || (selectedRadioType === 'duplicate' && selectedDuplicateImagesList.length === 0)\"\n class=\"btn btn-clear-tag d-inline-flex align-items-center justify-content-center\" type=\"button\"\n (click)=\"clearValue()\">\n <svg width=\"49\" height=\"49\" viewBox=\"0 0 49 49\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g filter=\"url(#filter0_d_516_96841)\">\n <rect x=\"2.16797\" y=\"1.08447\" width=\"44.0342\" height=\"44.0284\" rx=\"8.67445\" fill=\"#FEF3F2\" />\n <rect x=\"2.71012\" y=\"1.62663\" width=\"42.9499\" height=\"42.9441\" rx=\"8.13229\" stroke=\"#FEF3F2\"\n stroke-width=\"1.08431\" />\n <path\n d=\"M33.4893 21.3613L33.4912 21.3643C34.0533 21.9297 34.369 22.6949 34.3691 23.4922C34.3691 24.2895 34.0533 25.0546 33.4912 25.6201L26.7256 32.3857C26.4454 32.6661 26.1122 32.8882 25.7461 33.04C25.3798 33.1919 24.9873 33.2705 24.5908 33.2705C24.1942 33.2705 23.801 33.1919 23.4346 33.04C23.0686 32.8883 22.7361 32.6659 22.4561 32.3857L20.7676 30.6992L22.3682 29.0986L24.0557 30.7842L24.0566 30.7852C24.1267 30.8553 24.2102 30.9112 24.3018 30.9492C24.3933 30.9872 24.4917 31.0068 24.5908 31.0068C24.6899 31.0068 24.7883 30.9872 24.8799 30.9492C24.9713 30.9113 25.0541 30.8552 25.124 30.7852H25.125L31.8877 24.0215C32.0267 23.8804 32.1055 23.6903 32.1055 23.4922C32.1054 23.2941 32.0267 23.1039 31.8877 22.9629L30.1963 21.2715L31.7979 19.6699L33.4893 21.3613ZM24.6982 12.9336C24.9571 12.9594 25.2011 13.0733 25.3867 13.2588L30.1973 18.0693L28.5957 19.6709L24.1162 15.1914H16.2852V23.0225L20.7666 27.499L19.166 29.0996L14.3535 24.293C14.1411 24.0807 14.0215 23.7925 14.0215 23.4922V14.0596C14.0217 13.4346 14.5283 12.9277 15.1533 12.9277H24.5859L24.6982 12.9336ZM19.8789 17.6436C20.5038 17.6436 21.0103 18.1506 21.0107 18.7754C21.0107 19.4005 20.504 19.9082 19.8789 19.9082H19.8691C19.2442 19.908 18.7373 19.4004 18.7373 18.7754C18.7378 18.1508 19.2445 17.6438 19.8691 17.6436H19.8789Z\"\n fill=\"#B42318\" />\n <path d=\"M33.1699 14.0845L15.1699 32.0845\" stroke=\"#B42318\" stroke-width=\"2\" stroke-linecap=\"round\" />\n </g>\n <defs>\n <filter id=\"filter0_d_516_96841\" x=\"-0.000643253\" y=\"0.000166655\" width=\"48.3724\" height=\"48.3655\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"1.08431\" />\n <feGaussianBlur stdDeviation=\"1.08431\" />\n <feColorMatrix type=\"matrix\" 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\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_516_96841\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_516_96841\" result=\"shape\" />\n </filter>\n </defs>\n </svg>\n </button>\n <!-- Cancel and Save Buttons (when !revopsTypeValue) -->\n <div *ngIf=\"!revopsTypeValue\">\n <button class=\"btn btn-outline me-2\" (click)=\"cancel()\">Cancel</button>\n <button class=\"btn btn-primary\" id=\"alert-toast\"\n (click)=\"save(selectedType)\"\n [disabled]=\"(selectedRadioType === undefined || selectedRadioType === '') || (selectedRadioType === 'duplicate' && selectedDuplicateImagesList.length === 0)\">Save</button>\n </div>\n <!-- Edit Button (when revopsTypeValue && editBtnShow) -->\n <div *ngIf=\"revopsTypeValue && editBtnShow\">\n <button\n class=\"btn btn-outline me-2\" (click)=\"editValue()\">\n <span class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M14.6554 1.71047C14.8927 1.47315 15.1745 1.2849 15.4845 1.15646C15.7946 1.02802 16.1269 0.961914 16.4626 0.961914C16.7982 0.961914 17.1305 1.02802 17.4406 1.15646C17.7507 1.2849 18.0324 1.47315 18.2697 1.71047C18.5071 1.94779 18.6953 2.22953 18.8238 2.53961C18.9522 2.84969 19.0183 3.18202 19.0183 3.51765C19.0183 3.85327 18.9522 4.18561 18.8238 4.49568C18.6953 4.80576 18.5071 5.0875 18.2697 5.32482L6.0713 17.5233L1.10156 18.8786L2.45695 13.9089L14.6554 1.71047Z\"\n stroke=\"#344054\" stroke-width=\"1.81079\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg></span>Edit\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"form-check my-15\">\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"duplicate\"\n id=\"duplicate-split\" [(ngModel)]=\"selectedType\" [value]=\"'duplicate'\"\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"revopsTypeValue\">\n <label class=\"form-check-label\" for=\"duplicate-split\">\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\n viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94635)\">\n <path\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94635\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg></span>\n <span class=\"ms-5 tag-class\">Duplicate</span>\n </label>\n </div>\n <div class=\"form-check my-15\">\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"employee\"\n id=\"employee-split\" [(ngModel)]=\"selectedType\" [value]=\"'employee'\"\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"revopsTypeValue\">\n <label class=\"form-check-label\" for=\"employee-split\">\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\n viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94639)\">\n <path\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94639\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg></span>\n <span class=\"ms-5 tag-class\">Employee/Staff</span>\n </label>\n </div>\n <div class=\"form-check my-15\">\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"house-keeping\"\n id=\"house-keeping-split\" [(ngModel)]=\"selectedType\" [value]=\"'house-keeping'\"\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"revopsTypeValue\">\n <label class=\"form-check-label\" for=\"house-keeping-split\">\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"21\"\n viewBox=\"0 0 21 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94643)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\n fill=\"#475467\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94643\">\n <rect width=\"21\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg></span>\n <span class=\"ms-5 tag-class\">House Keeping</span>\n </label>\n </div>\n <div class=\"form-check my-15\">\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"junk\" id=\"junk-split\"\n [(ngModel)]=\"selectedType\" [value]=\"'junk'\" (change)=\"onRadioChange(selectedType)\"\n [disabled]=\"users?.role ==='user' && users?.userType ==='client' || revopsTypeValue\">\n <label class=\"form-check-label\" for=\"junk-split\">\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M3 6H5M5 6H21M5 6V20C5 20.5304 5.21071 21.0391 5.58579 21.4142C5.96086 21.7893 6.46957 22 7 22H17C17.5304 22 18.0391 21.7893 18.4142 21.4142C18.7893 21.0391 19 20.5304 19 20V6H5ZM8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M10 11V17M14 11V17\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg></span>\n <span class=\"ms-5 tag-class\">Junk</span>\n </label>\n </div>\n <div class=\"mt-3\">\n <label class=\"form-label\">Remarks (Optional)</label>\n <textarea class=\"form-control\" rows=\"3\" placeholder=\"Comment here\"\n [(ngModel)]=\"userComment\"></textarea>\n </div>\n </div>\n </ng-template>\n\n <!-- Grid/List View (shown when split-screen is not enabled) -->\n <div class=\"row px-0 img-traffic contain high-400px scroll-y\"\n *ngIf=\"viewMode === 'grid' && !noData && !loading && !splitScreenEnabled\">\n <ng-container *ngFor=\"let obj of imagesArrayData\">\n <ng-container *ngTemplateOutlet=\"imageCard; context: { $implicit: obj }\"></ng-container>\n </ng-container>\n </div>\n\n <div class=\"list-view-wrapper\"\n *ngIf=\"viewMode === 'list' && !noData && !loading && !splitScreenEnabled\">\n <div class=\"list-group mb-5\" *ngFor=\"let group of listViewGroups\">\n <div class=\"list-group-header d-flex align-items-center mb-3\">\n <div class=\"group-title\">{{ group?.timeRange }}</div>\n <span class=\"group-count badge badge-light-default ms-2\">\n #{{ group?.data?.length || 0 }}\n </span>\n </div>\n <div class=\"row gx-4 list-group-row\">\n <ng-container *ngFor=\"let obj of group?.data\">\n <ng-container\n *ngTemplateOutlet=\"imageCard; context: { $implicit: obj }\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <ng-template #imageCard let-obj>\n <div *ngIf=\"type !== 'duplicate' || (type === 'duplicate'&& obj.revopsType === 'duplicate' && obj.duplicateImagePath?.length > 0)\"\n class=\"col-md-3 border-gray mx-2 p-2 mt-5\">\n <!-- Condition: Only show if not duplicate OR duplicate with non-empty duplicateImagePath -->\n <ng-container>\n <img class=\"img-src cursor-pointer\" [src]=\"imageUrl + obj?.filePath\" (error)=\"obj.filePath = null\" alt=\"\"\n (click)=\"selectImageForSplitView(obj)\" />\n </ng-container>\n \n <div *ngIf=\"!obj?.filePath\" class=\"no-preview\">\n <span class=\"mb-5\">\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"Group\">\n <path id=\"Vector\" d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path id=\"Vector_2\"\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n </svg>\n \n </span>\n <span class=\"header mb-5 text-center\">Preview not available</span>\n <span class=\"description mb-5 text-center\">The selected camera is not available at\n the\n moment.</span>\n </div>\n <div *ngIf=\"type !== 'duplicate' || (type === 'duplicate'&& obj.revopsType === 'duplicate' && obj.duplicateImagePath?.length > 0)\"\n class=\"row px-2 mb-2\">\n <div class=\"col-md-7\">\n <div class=\"py-2 img-doc-time\">Tango ID : {{obj?.templd}} <span\n *ngIf=\"(type === 'duplicate'&& obj.revopsType === 'duplicate' && obj.duplicateImagePath?.length > 0)\"\n class=\"mx-2 badge badge-light-primary\">{{obj.duplicateImagePath?.length}}\n </span>\n <span *ngIf=\"obj?.status ==='approved'\" class=\"ms-2\">\n <svg style=\"width: 20px;\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10\"\n height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\n <rect y=\"0.5\" width=\"10\" height=\"10\" rx=\"5\" fill=\"#D1FADF\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\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\"\n fill=\"#12B76A\" />\n </svg>\n </span>\n <span *ngIf=\"obj?.status ==='rejected'\" class=\"ms-2\">\n <svg style=\"width: 20px;\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\"\n height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\n <g clip-path=\"url(#clip0_1428_59484)\">\n <path\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\n fill=\"#FEE4E2\" />\n <path\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\"\n stroke=\"#D92D20\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_1428_59484\">\n <rect width=\"12\" height=\"12\" fill=\"white\" transform=\"translate(0.599609 0.5)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n </div>\n <div class=\"img-doc-value\">Entry Time : {{obj?.entryTme}}</div>\n </div>\n <div class=\"col-md-5 text-end py-3\">\n <span *ngIf=\"obj?.revopsType ==='non-tagging'\" ngbTooltip=\"Yet to tag the customer\" placement=\"top\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 19 18\" fill=\"none\">\n <path\n d=\"M6.02344 5.625H6.03094M16.2159 10.4325L10.8384 15.81C10.6991 15.9495 10.5337 16.0601 10.3516 16.1356C10.1695 16.2111 9.97431 16.2499 9.77719 16.2499C9.58006 16.2499 9.38487 16.2111 9.20278 16.1356C9.02068 16.0601 8.85525 15.9495 8.71594 15.81L2.27344 9.375V1.875H9.77344L16.2159 8.3175C16.4953 8.59854 16.6521 8.97872 16.6521 9.375C16.6521 9.77128 16.4953 10.1515 16.2159 10.4325Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='duplicate'\">\n <svg *ngIf=\"obj?.isParent\" width=\"20\" height=\"21\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_568_103657)\">\n <path\n d=\"M2.08398 6.25001H1.66732C1.4463 6.25001 1.23434 6.16221 1.07806 6.00593C0.921782 5.84965 0.833984 5.63769 0.833984 5.41668V1.66668C0.833984 1.44566 0.921782 1.2337 1.07806 1.07742C1.23434 0.921141 1.4463 0.833344 1.66732 0.833344H5.41732C5.63833 0.833344 5.85029 0.921141 6.00657 1.07742C6.16285 1.2337 6.25065 1.44566 6.25065 1.66668V2.08334M4.58398 3.75001H8.33398C8.79422 3.75001 9.16732 4.12311 9.16732 4.58334V8.33334C9.16732 8.79358 8.79422 9.16668 8.33398 9.16668H4.58398C4.12375 9.16668 3.75065 8.79358 3.75065 8.33334V4.58334C3.75065 4.12311 4.12375 3.75001 4.58398 3.75001Z\"\n stroke=\"#475467\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <rect x=\"4\" y=\"4\" width=\"5\" height=\"5\" fill=\"#475467\" />\n <defs>\n <clipPath id=\"clip0_568_103657\">\n <rect width=\"10\" height=\"10\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n <svg *ngIf=\"!obj?.isParent\" xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94635)\">\n <path\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94635\">\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='employee'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94639)\">\n <path\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94639\">\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='house-keeping'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 21 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94643)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\n fill=\"#475467\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94643\">\n <rect width=\"21\" height=\"20\" fill=\"white\" transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='junk'\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M3 6H5M5 6H21M5 6V20C5 20.5304 5.21071 21.0391 5.58579 21.4142C5.96086 21.7893 6.46957 22 7 22H17C17.5304 22 18.0391 21.7893 18.4142 21.4142C18.7893 21.0391 19 20.5304 19 20V6H5ZM8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M10 11V17M14 11V17\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n </div>\n </div>\n </div>\n </ng-template>\n\n </div>\n </section>\n\n <!-- full image View -->\n <section *ngIf=\"imageFlow\">\n <div class=\"row\">\n <!-- Ticket Block Alert -->\n <div *ngIf=\"getSelectedDateCardData()?.raisedStatusEnabled === 'block'\" class=\"col-12 mb-3\">\n <div class=\"ticket-block-alert\">\n <div class=\"ticket-block-alert-content\">\n <div class=\"ticket-block-alert-icon\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"12\" cy=\"12\" r=\"12\" fill=\"#F04438\" />\n <path d=\"M12 8V13\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\n </svg>\n </div>\n <div class=\"ticket-block-alert-text\">\n <div class=\"ticket-block-alert-title\">\n You cannot raise ticket for next {{ getSelectedDateCardData()?.noOfBlockedDays\n || '0' }} days\n </div>\n <div class=\"ticket-block-alert-description\">\n It looks like you have achieved 95% accuracy for the three tickets raised this\n month. This limits you from raising more tickets to avoid redundancy.\n </div>\n <div class=\"ticket-block-alert-action\">\n If you still want to raise tickets, <span class=\"ticket-block-alert-link\"\n (click)=\"requestReset()\">send request</span> to reset.\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Ticket Request Success Alert -->\n <div *ngIf=\"getSelectedDateCardData()?.raisedStatusEnabled === 'request'\" class=\"col-12 mb-3\">\n <div class=\"ticket-request-alert\">\n <div class=\"ticket-request-alert-content\">\n <div class=\"ticket-request-alert-icon\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 21L23 12L2 3V10L17 12L2 14V21Z\" fill=\"#10B981\" />\n </svg>\n </div>\n <div class=\"ticket-request-alert-text\">\n <div class=\"ticket-request-alert-title\">\n Reset Request Sent\n </div>\n <div class=\"ticket-request-alert-description\">\n Your request to enable ticket raising has been submitted. You'll be notified\n once it's approved. Please ensure future ticket accuracy remains within the 95%\n threshold.\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"d-flex mt-2 mb-2 w-100 overflow-x px-0\">\n <ng-container *ngTemplateOutlet=\"footfallTrendsTemplate\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"ticketStatusTemplate\"></ng-container>\n <span class=\"divider\"></span>\n <div class=\"d-flex flex-shrink-0 mt-3 justify-content-start align-items-center px-0\">\n <div *ngIf=\"!getTicketStatuses().includes('open') && !getTicketStatuses().includes('closed')\"\n class=\"ms-auto text-end\">\n\n <button [disabled]=\"!canEnableButton()\" class=\"btn btn-primary\" type=\"button\"\n (click)=\"Raised()\">\n Raise ticket\n </button>\n </div>\n </div>\n <div class=\"nav-group bg-white border-1 btn-group w-auto\">\n <ng-container *ngIf=\"!(countData?.length > 0)\">\n\n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'footfall' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('footfall')\">\n Total Footfall\n <span\n [ngClass]=\"type === 'footfall' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\n {{ countData?.footfallCount || 0 }}\n </span>\n </button>\n\n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'non-tagging' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('non-tagging')\">\n Non-tags\n <span\n [ngClass]=\"type === 'non-tagging' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\n {{ countData?.nonTags || 0 }}\n </span>\n </button>\n\n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'duplicate' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('duplicate')\">\n Duplicated\n <span\n [ngClass]=\"type === 'duplicate' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\n {{ countData?.duplicate || 0 }}\n </span>\n </button>\n\n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'employee' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('employee')\">\n Employee/Staff\n <span\n [ngClass]=\"type === 'employee' ? 'activePlanBtn badge badge-active' : 'inactivePlanBtn badge badge-light-default'\">\n {{ countData?.employee || 0 }}\n </span>\n </button>\n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'junk' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('junk')\">\n Junk\n <span\n [ngClass]=\"type === 'junk' ? 'badge badge-active activePlanBtn' : ' badge badge-light-default inactivePlanBtn'\">\n {{ countData?.junk || 0 }}\n </span>\n </button>\n <button class=\"btn btn-outline px-6 py-3\"\n [ngClass]=\"type === 'house-keeping' ? 'activePlanBtn' : 'inactivePlanBtn'\"\n (click)=\"selectPlanTrends('house-keeping')\">\n House Keeping\n <span\n [ngClass]=\"type === 'house-keeping' ? 'badge badge-active activePlanBtn' : ' badge badge-light-default inactivePlanBtn'\">\n {{ countData?.housekeeping || 0 }}\n </span>\n </button>\n\n </ng-container>\n\n </div>\n\n <div class=\"row mx-0 border-gray img-traffic\" *ngIf=\"!noData && !loading\">\n <div class=\"col-md-6 p-2 mb-2 mt-5\">\n <div class=\"position-relative border-gray p-2 \">\n <!-- Main Image -->\n <!-- <img class=\"img-src cursor-pointer h-450px\"\n (click)=\"selectedImageArray(imageUrl, selectImageArray)\"\n [src]=\"imageUrl + selectImageArray?.filePath\" appMagnifier alt=\"\"> -->\n <img class=\"img-src cursor-pointer h-450px\"\n (click)=\"selectedImageArray(imageUrl, selectImageArray)\"\n [src]=\"imageUrl + selectImageArray?.filePath\" alt=\"\">\n\n <!-- Right arrow button -->\n <div class=\"row px-2 mb-2\">\n <div class=\"col-md-7\">\n <div class=\"py-2 img-doc-time\">Tango ID : {{selectImageArray?.templd}}\n <span *ngIf=\"selectImageArray?.status ==='approved'\" class=\"ms-2\"><svg\n style=\"width: 20px;\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\n <rect y=\"0.5\" width=\"10\" height=\"10\" rx=\"5\" fill=\"#D1FADF\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\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\"\n fill=\"#12B76A\" />\n </svg></span>\n <span *ngIf=\"selectImageArray?.status ==='rejected'\" class=\"ms-2\"><svg\n style=\"width: 20px;\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\n <g clip-path=\"url(#clip0_1428_59484)\">\n <path\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\n fill=\"#FEE4E2\" />\n <path\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\"\n stroke=\"#D92D20\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_1428_59484\">\n <rect width=\"12\" height=\"12\" fill=\"white\"\n transform=\"translate(0.599609 0.5)\" />\n </clipPath>\n </defs>\n </svg></span>\n </div>\n <div class=\"img-doc-value\">Entry Time : {{(tempModalImage ||\n selectImageArray)?.entryTme || (tempModalImage ||\n selectImageArray)?.entryTime}}</div>\n </div>\n <div class=\"col-md-5 text-end py-3\">\n <span *ngIf=\"(tempModalImage || selectImageArray)?.revopsType ==='non-tagging'\"\n ngbTooltip=\"Yet to tag the customer\" placement=\"top\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"18\"\n viewBox=\"0 0 19 18\" fill=\"none\">\n <path\n d=\"M6.02344 5.625H6.03094M16.2159 10.4325L10.8384 15.81C10.6991 15.9495 10.5337 16.0601 10.3516 16.1356C10.1695 16.2111 9.97431 16.2499 9.77719 16.2499C9.58006 16.2499 9.38487 16.2111 9.20278 16.1356C9.02068 16.0601 8.85525 15.9495 8.71594 15.81L2.27344 9.375V1.875H9.77344L16.2159 8.3175C16.4953 8.59854 16.6521 8.97872 16.6521 9.375C16.6521 9.77128 16.4953 10.1515 16.2159 10.4325Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"selectImageArray?.revopsType ==='duplicate'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\n viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94635)\">\n <path\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94635\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"selectImageArray?.revopsType ==='employee'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\n viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94639)\">\n <path\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94639\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"selectImageArray?.revopsType ==='house-keeping'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"21\"\n viewBox=\"0 0 21 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94643)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\n fill=\"#475467\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94643\">\n <rect width=\"21\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"col-md-6 p-2 mb-2 mt-5\">\n <div class=\"mx-2 \">\n <div class=\"row\">\n <div class=\"col-md-6 title-type\">\n Select non-shopper type\n </div>\n\n\n <section class=\"col-md-6 text-end\"\n *ngIf=\"!(users?.role ==='user' && users?.userType ==='client' && selectedRadioType ==='junk')\">\n\n <div *ngIf=\"!revopsTypeValue\" class=\"mb-5 text-end\" role=\"group\">\n <div\n *ngIf=\"!getTicketStatuses().includes('open') && !getTicketStatuses().includes('closed')\">\n\n <button [disabled]=\"\n (selectedRadioType === undefined || selectedRadioType === '') ||\n (selectedRadioType === 'duplicate' && selectedDuplicateImagesList.length === 0)\n \" class=\"btn btn-default\" type=\"button\" (click)=\"clearValue()\">Clear</button>\n <button class=\"btn btn-outline me-2\" (click)=\"cancel()\">Cancel</button>\n <button class=\"btn btn-primary\" id=\"alert-toast\"\n (click)=\"save(selectedType)\" [disabled]=\"\n (selectedRadioType === undefined || selectedRadioType === '') ||\n (selectedRadioType === 'duplicate' && selectedDuplicateImagesList.length === 0)\n \">\n Save\n </button>\n </div>\n </div>\n\n <div\n *ngIf=\"!(users?.role ==='user' && users?.userType ==='client' && selectedRadioType ==='junk')\">\n <ng-container *ngIf=\"editBtnShow\">\n <div *ngIf=\"revopsTypeValue\" class=\"mb-5 text-end\" role=\"group\">\n <button\n *ngIf=\"!getTicketStatuses().includes('open') && !getTicketStatuses().includes('closed')\"\n class=\"btn btn-outline me-2\" (click)=\"editValue()\"><span\n class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M14.6554 1.71047C14.8927 1.47315 15.1745 1.2849 15.4845 1.15646C15.7946 1.02802 16.1269 0.961914 16.4626 0.961914C16.7982 0.961914 17.1305 1.02802 17.4406 1.15646C17.7507 1.2849 18.0324 1.47315 18.2697 1.71047C18.5071 1.94779 18.6953 2.22953 18.8238 2.53961C18.9522 2.84969 19.0183 3.18202 19.0183 3.51765C19.0183 3.85327 18.9522 4.18561 18.8238 4.49568C18.6953 4.80576 18.5071 5.0875 18.2697 5.32482L6.0713 17.5233L1.10156 18.8786L2.45695 13.9089L14.6554 1.71047Z\"\n stroke=\"#344054\" stroke-width=\"1.81079\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg></span>Edit</button>\n\n </div>\n </ng-container>\n </div>\n </section>\n\n </div>\n\n <div class=\"form-check my-15\">\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"duplicate\"\n id=\"duplicate\" [(ngModel)]=\"selectedType\" [value]=\"'duplicate'\"\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"revopsTypeValue\">\n <label class=\"form-check-label\" for=\"duplicate\">\n <span class=\"ms-5\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\n viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94635)\">\n <path\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94635\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span class=\"ms-5 tag-class\">Duplicate</span>\n </label>\n </div>\n <div class=\"form-check my-15\">\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"employee\"\n id=\"employee\" [(ngModel)]=\"selectedType\" [value]=\"'employee'\"\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"revopsTypeValue\">\n <label class=\"form-check-label\" for=\"employee\">\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\n height=\"21\" viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94639)\">\n <path\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94639\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg></span>\n <span class=\"ms-5 tag-class\">Employee/Staff</span>\n </label>\n </div>\n <div class=\"form-check my-15\">\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"house-keeping\"\n id=\"house-keeping\" [(ngModel)]=\"selectedType\" [value]=\"'house-keeping'\"\n (change)=\"onRadioChange(selectedType)\" [disabled]=\"revopsTypeValue\">\n <label class=\"form-check-label\" for=\"house-keeping\">\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\"\n height=\"21\" viewBox=\"0 0 21 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94643)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\n fill=\"#475467\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94643\">\n <rect width=\"21\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg></span>\n <span class=\"ms-5 tag-class\"> House Keeping</span>\n </label>\n </div>\n <div class=\"form-check my-15\">\n <input class=\"form-check-input cursor-pointer\" type=\"radio\" name=\"junk\" id=\"junk\"\n [(ngModel)]=\"selectedType\" [value]=\"'junk'\"\n (change)=\"onRadioChange(selectedType)\"\n [disabled]=\"users?.role ==='user' && this.users?.userType ==='client' || revopsTypeValue\">\n <label class=\"form-check-label\" for=\"junk\">\n <span class=\"ms-5\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\n height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M3 6H5M5 6H21M5 6V20C5 20.5304 5.21071 21.0391 5.58579 21.4142C5.96086 21.7893 6.46957 22 7 22H17C17.5304 22 18.0391 21.7893 18.4142 21.4142C18.7893 21.0391 19 20.5304 19 20V6H5ZM8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M10 11V17M14 11V17\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg></span>\n <span class=\"ms-5 tag-class\"> Junk</span>\n </label>\n </div>\n </div>\n\n\n </div>\n </div>\n\n\n <div class=\"row px-0 img-traffic mt-3 high-400px scroll-y\">\n <div class=\"col-md-3 border-gray mx-2 p-2 mt-5\" *ngFor=\"let obj of remainingImageArray\">\n <div class=\"position-relative\">\n <input *ngIf=\"!revopsTypeValue && selectedRadioType === 'duplicate'\" type=\"checkbox\"\n [checked]=\"obj.selected\"\n class=\"position-absolute absolute form-check-input cursor-pointer\"\n (change)=\"onImageCheckboxChange($event, obj, 'duplicate')\"\n [disabled]=\"obj.duplicateImagePath?.length > 0\" />\n\n <img class=\"img-src\"\n [ngClass]=\"selectedRadioType !== 'duplicate' ? 'cursor-pointer' : 'cursor-pointer'\"\n [src]=\"imageUrl + obj?.filePath\" (error)=\"obj.filePath = null\" alt=\"\"\n (click)=\"handleImageClick($event, obj)\" />\n\n <div *ngIf=\"!obj?.filePath\" class=\"no-preview\">\n <span class=\"mb-5\">\n <svg width=\"23\" height=\"20\" viewBox=\"0 0 23 20\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"Group\">\n <path id=\"Vector\"\n d=\"M6.5 6.32227H6.51M16.25 9.32227H21.5L18 16.3223L14.91 12.0023\"\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path id=\"Vector_2\"\n d=\"M1.5 16.3229H5.26C5.63273 16.3255 5.99877 16.2239 6.31682 16.0295C6.63487 15.8352 6.89228 15.5558 7.06 15.2229L8.5 12.3229M1.5 18.3229V14.3229M17.5 6.82291L13.5 14.8229L3.11 9.62291C2.42033 9.27553 1.89635 8.6691 1.65272 7.93632C1.40909 7.20354 1.46564 6.4041 1.81 5.71291L3.19 2.92291C3.362 2.58014 3.59984 2.2746 3.88994 2.02375C4.18003 1.7729 4.5167 1.58165 4.88072 1.46093C5.24474 1.34021 5.62897 1.29239 6.01147 1.32018C6.39398 1.34797 6.76726 1.45084 7.11 1.62291L17.5 6.82291Z\"\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n </svg>\n\n </span>\n <span class=\"header mb-5 text-center\">Preview not available</span>\n <span class=\"description mb-5 text-center\">The selected camera is not available at\n the\n moment.</span>\n </div>\n <div class=\"row px-2 mb-2\">\n <div class=\"col-md-7\">\n <div class=\"py-2 img-doc-time\">Tango ID : {{obj?.templd ? obj?.templd :\n obj?.tempId}}\n <span *ngIf=\"obj?.status ==='approved'\" class=\"ms-2\"><svg style=\"width: 20px;\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\n <rect y=\"0.5\" width=\"10\" height=\"10\" rx=\"5\" fill=\"#D1FADF\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\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\"\n fill=\"#12B76A\" />\n </svg></span>\n <span *ngIf=\"obj?.status ==='rejected'\" class=\"ms-2\"><svg style=\"width: 20px;\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\n <g clip-path=\"url(#clip0_1428_59484)\">\n <path\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\n fill=\"#FEE4E2\" />\n <path\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\"\n stroke=\"#D92D20\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_1428_59484\">\n <rect width=\"12\" height=\"12\" fill=\"white\"\n transform=\"translate(0.599609 0.5)\" />\n </clipPath>\n </defs>\n </svg></span>\n </div>\n <div class=\"img-doc-value\">Entry Time : {{obj?.entryTme ? obj?.entryTme\n :obj?.entryTime}}</div>\n </div>\n <div class=\"col-md-5 text-end py-3\">\n <span *ngIf=\"obj?.revopsType ==='non-tagging'\"\n ngbTooltip=\"Yet to tag the customer\" placement=\"top\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"18\"\n viewBox=\"0 0 19 18\" fill=\"none\">\n <path\n d=\"M6.02344 5.625H6.03094M16.2159 10.4325L10.8384 15.81C10.6991 15.9495 10.5337 16.0601 10.3516 16.1356C10.1695 16.2111 9.97431 16.2499 9.77719 16.2499C9.58006 16.2499 9.38487 16.2111 9.20278 16.1356C9.02068 16.0601 8.85525 15.9495 8.71594 15.81L2.27344 9.375V1.875H9.77344L16.2159 8.3175C16.4953 8.59854 16.6521 8.97872 16.6521 9.375C16.6521 9.77128 16.4953 10.1515 16.2159 10.4325Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='duplicate'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\n viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94635)\">\n <path\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94635\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='employee'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\"\n viewBox=\"0 0 20 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94639)\">\n <path\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94639\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='house-keeping'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"21\"\n viewBox=\"0 0 21 21\" fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94643)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\n fill=\"#475467\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94643\">\n <rect width=\"21\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"obj?.revopsType ==='junk'\">\n\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M3 6H5M5 6H21M5 6V20C5 20.5304 5.21071 21.0391 5.58579 21.4142C5.96086 21.7893 6.46957 22 7 22H17C17.5304 22 18.0391 21.7893 18.4142 21.4142C18.7893 21.0391 19 20.5304 19 20V6H5ZM8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M10 11V17M14 11V17\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n </section>\n </div>\n </section>\n</div>\n\n\n<ng-template #zoomPopup let-model>\n <div class=\"p-4 m-4\">\n <div class=\"modal-header border-0 p-0 w-100 flex-column align-items-start\">\n <span *ngIf=\"popupType === 'non-tagging'\" class=\"my-3\">\n\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\" />\n <g clip-path=\"url(#clip0_2088_98337)\">\n <path\n d=\"M29.1693 13.3333V18.3333M29.1693 18.3333H24.1693M29.1693 18.3333L25.3026 14.7C24.407 13.8039 23.299 13.1493 22.0819 12.7973C20.8649 12.4453 19.5785 12.4073 18.3428 12.6869C17.1072 12.9665 15.9624 13.5545 15.0155 14.3962C14.0685 15.2378 13.3502 16.3056 12.9276 17.5M10.8359 26.6666V21.6666M10.8359 21.6666H15.8359M10.8359 21.6666L14.7026 25.3C15.5982 26.1961 16.7062 26.8506 17.9233 27.2027C19.1403 27.5547 20.4267 27.5927 21.6624 27.3131C22.898 27.0335 24.0428 26.4455 24.9897 25.6038C25.9367 24.7621 26.655 23.6943 27.0776 22.5\"\n stroke=\"#00A3FF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2088_98337\">\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(10 10)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <!-- Heading -->\n <h5 class=\"modal-title mb-2\">\n <span *ngIf=\"popupType === 'employee'\">Tagging as employee/staff </span>\n <span *ngIf=\"popupType === 'duplicate'\">Tagging as duplicates </span>\n <span *ngIf=\"popupType === 'house-keeping'\">Tagging as house keeping </span>\n <span *ngIf=\"popupType === 'non-tagging'\">Clear duplicates</span>\n <span *ngIf=\"popupType ==='junk'\">Tagging as junk</span>\n\n </h5>\n <p class=\"mb-3\">\n <span *ngIf=\"popupType === 'employee'\">Are you sure you want to tag this as employee/staff?</span>\n <span *ngIf=\"popupType === 'duplicate'\">Are you sure you want to tag this as duplicates? </span>\n <span *ngIf=\"popupType === 'house-keeping'\">Are you sure you want to tag this as house keeping? </span>\n <span *ngIf=\"popupType === 'non-tagging'\">This will remove tagged duplicates and move them to\n 'Non-tag'.</span>\n <span *ngIf=\"popupType ==='junk'\">Are you sure you want to tag this as junk?</span>\n\n </p>\n </div>\n\n <div class=\"w-100 mt-5 d-flex justify-content-end\">\n <button class=\"btn btn-outline me-2\" (click)=\"cancelSubmit()\">Cancel</button>\n <button *ngIf=\"popupType !== 'non-tagging'\" class=\"btn btn-primary\" (click)=\"submitValue(popupType)\">\n Yes, Tag\n </button>\n <button *ngIf=\"popupType === 'non-tagging'\" class=\"btn btn-primary\" (click)=\"submitValue(popupType)\">\n Yes, clear\n </button>\n </div>\n </div>\n</ng-template>\n\n\n<ng-template #raisedPopup let-model>\n <div class=\"p-4 m-4\">\n <div class=\"modal-header border-0 p-0 w-100 flex-column align-items-start\">\n <span class=\"my-3\">\n\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\" />\n <path\n d=\"M21.251 11.0806C21.7405 11.0699 22.2153 11.2487 22.5762 11.5796L23.4922 12.4204C23.8089 12.7097 23.893 13.1017 23.8652 13.4263V13.4272C23.836 13.7478 23.6954 14.0592 23.4785 14.2944C23.3699 14.413 23.2865 14.5525 23.2314 14.7036C23.1764 14.8548 23.1512 15.0155 23.1582 15.1763C23.1652 15.337 23.2035 15.4953 23.2715 15.6411C23.3394 15.7869 23.4362 15.9172 23.5547 16.0259C23.6733 16.1346 23.8117 16.2198 23.9629 16.2749C24.1141 16.33 24.2748 16.3541 24.4355 16.3472C24.5961 16.3402 24.7537 16.3017 24.8994 16.2339C25.0089 16.1829 25.1106 16.116 25.2002 16.0356L25.3701 15.8657C25.5759 15.6748 25.8385 15.5408 26.1152 15.4907C26.2972 15.4546 26.485 15.4617 26.6641 15.5103C26.8439 15.5591 27.0103 15.649 27.1494 15.7729L27.1514 15.7749L28.2598 16.7905C28.445 16.9605 28.5948 17.1658 28.7002 17.394C28.8056 17.6223 28.8648 17.8694 28.874 18.1206C28.8832 18.372 28.8423 18.6234 28.7539 18.8589C28.6655 19.0941 28.5316 19.3096 28.3594 19.4927L20.1113 28.2583C19.937 28.4434 19.7268 28.5912 19.4941 28.6938C19.2614 28.7965 19.0102 28.8522 18.7559 28.856C18.5016 28.8597 18.2493 28.8119 18.0137 28.7163C17.7779 28.6206 17.5636 28.4784 17.3838 28.2983L16.2539 27.1685C15.7511 26.6656 15.8832 25.9552 16.1514 25.5542L16.2061 25.4644C16.3241 25.2486 16.3742 25.0008 16.3496 24.7544C16.3214 24.4731 16.197 24.2102 15.9971 24.0103C15.7971 23.8103 15.5343 23.6859 15.2529 23.6577C14.9715 23.6297 14.6887 23.6995 14.4531 23.856H14.4521C14.0494 24.1222 13.3407 24.2552 12.8379 23.7515L11.6797 22.5933C11.5034 22.4169 11.364 22.2074 11.2686 21.9771C11.1731 21.7467 11.1231 21.4999 11.123 21.2505C11.123 21.001 11.1731 20.7535 11.2686 20.5229C11.364 20.2926 11.5034 20.0831 11.6797 19.9067L19.9492 11.6362C20.2954 11.2902 20.7616 11.0912 21.251 11.0806ZM21.2783 12.3804C21.1237 12.3838 20.9765 12.4468 20.8672 12.5562L12.5967 20.8257C12.5409 20.8814 12.497 20.9482 12.4668 21.021C12.4367 21.0938 12.4209 21.1717 12.4209 21.2505C12.4209 21.3292 12.4367 21.4073 12.4668 21.48C12.497 21.5528 12.541 21.6196 12.5967 21.6753L13.7061 22.7837L13.7314 22.772C14.2169 22.4485 14.7993 22.3035 15.3799 22.3608C15.9608 22.4183 16.5042 22.6747 16.917 23.0874C17.3298 23.5002 17.587 24.0436 17.6445 24.6245C17.702 25.2055 17.5565 25.7892 17.2324 26.2749L17.2305 26.2759C17.2261 26.2822 17.2226 26.2893 17.2197 26.2964L18.3018 27.3804C18.3585 27.4372 18.4266 27.482 18.501 27.5122C18.5755 27.5425 18.6559 27.5574 18.7363 27.5562C18.8166 27.5549 18.8963 27.5378 18.9697 27.5054C19.043 27.4729 19.1091 27.4261 19.1641 27.3677L27.4131 18.6021C27.4673 18.5442 27.5093 18.4761 27.5371 18.4019C27.5649 18.3276 27.5781 18.2487 27.5752 18.1694C27.5722 18.0902 27.5538 18.0119 27.5205 17.9399C27.4872 17.8679 27.4394 17.8032 27.3809 17.7495L26.3223 16.7778C26.2925 16.7885 26.2648 16.8053 26.2432 16.8286C26.0217 17.0788 25.7529 17.2827 25.4521 17.4282C25.15 17.5743 24.8214 17.6585 24.4863 17.6763C24.1511 17.694 23.815 17.6452 23.499 17.5317C23.1832 17.4183 22.8928 17.2429 22.6455 17.0161C22.3982 16.7893 22.1988 16.5153 22.0586 16.2104C21.9183 15.9055 21.8404 15.5752 21.8291 15.2397C21.8178 14.9043 21.8737 14.57 21.9932 14.2563C22.1121 13.9442 22.2915 13.6587 22.5215 13.4165L22.5547 13.3657C22.5594 13.3552 22.5607 13.3437 22.5635 13.3325L21.6973 12.5386V12.5376C21.5833 12.4331 21.4329 12.377 21.2783 12.3804Z\"\n fill=\"#00A3FF\" stroke=\"#00A3FF\" stroke-width=\"0.3\" />\n </svg>\n </span>\n <!-- Heading -->\n <h5 class=\"modal-title mb-2\">\n <span>Raise tickets for the following</span>\n\n </h5>\n <p class=\"mb-3\">\n <span>Raising a ticket for footfall count issues. Make sure all records are identified for\n validation.</span>\n\n\n </p>\n </div>\n <div class=\"row\">\n <div class=\"col-md-3 my-4\">\n <div class=\"border border-1 rounded p-3 h-100\">\n <div class=\"fw-semibold fs-5 mb-2\">\n {{tempRaisedPayload?.duplicateCount ? tempRaisedPayload?.duplicateCount :'0'}}\n </div>\n <div class=\"fw-semibold text-muted fs-6 mt-2\">\n Duplicates\n </div>\n </div>\n </div>\n\n <div class=\"col-md-3 my-4\">\n <div class=\"border border-1 rounded p-3 h-100\">\n <div class=\"fw-semibold fs-5 mb-2\">\n {{tempRaisedPayload?.employeeCount ? tempRaisedPayload?.employeeCount:'0' }}\n </div>\n <div class=\"fw-semibold text-muted fs-6 mt-2\">\n Employee\n </div>\n </div>\n </div>\n\n <div class=\"col-md-3 my-4\">\n <div class=\"border border-1 rounded p-3 h-100\">\n <div class=\"fw-semibold fs-5 mb-2\">\n {{tempRaisedPayload?.houseKeepingCount ? tempRaisedPayload?.houseKeepingCount :'0'}}\n </div>\n <div class=\"fw-semibold text-muted fs-6 mt-2\">\n House Keeping\n </div>\n </div>\n </div>\n <div class=\"col-md-3 my-4\">\n <div class=\"border border-1 rounded p-3 h-100\">\n <div class=\"fw-semibold fs-5 mb-2\">\n {{tempRaisedPayload?.junkCount ? tempRaisedPayload?.junkCount :'0'}}\n </div>\n <div class=\"fw-semibold text-muted fs-6 mt-2\">\n Junk\n </div>\n </div>\n\n </div>\n </div>\n\n <!-- Label and Textarea -->\n <div class=\"my-3\">\n <label class=\"form-label\">Description (Optional)</label>\n <textarea rows=\"3\" [(ngModel)]=\"commentText\" class=\"form-control\"\n placeholder=\"Enter description\"></textarea>\n </div>\n <div class=\"w-100 mt-5 d-flex justify-content-end\">\n\n <button class=\"btn btn-outline w-50 me-2\" (click)=\"cancelRasied()\">Cancel</button>\n <button class=\"btn btn-primary w-50\" (click)=\"submitRaised()\">\n Raise Ticket\n </button>\n </div>\n </div>\n</ng-template>\n\n\n<ng-template #imagePopup let-model>\n <div class=\"mx-4\">\n <div class=\"row\">\n <div class=\" p-2 mb-2 mt-5\">\n <div *ngIf=\"isModalOpen\" class=\"position-relative border-gray p-2 \">\n <!-- <button *ngIf=\"canNavigateLeft\" (click)=\"navigateImage('left')\"\n class=\"btn btn-light position-absolute start-0 top-50 z-index-10\">\n \u25C0\n </button> -->\n\n <!-- Main Image -->\n <!-- <img class=\" cursor-pointer w-100 h-525px\" \n [src]=\"imageUrl + (tempModalImage?.filePath || selectImageArray?.filePath)\"\n appMagnifier alt=\"\"> -->\n <img class=\" cursor-pointer w-100 h-525px\"\n [src]=\"imageUrl + (tempModalImage?.filePath || selectImageArray?.filePath)\" alt=\"\">\n <!-- <button *ngIf=\"canNavigateRight\" (click)=\"navigateImage('right')\"\n class=\"btn btn-light position-absolute end-0 top-50 z-index-10\">\n \u25B6\n </button> -->\n\n <!-- Right arrow button -->\n <div class=\"row px-2 mb-2\">\n <div class=\"col-md-7\">\n <div class=\"py-2 img-doc-time\">Tango ID : {{(tempModalImage || selectImageArray)?.templd ||\n (tempModalImage || selectImageArray)?.tempId}}\n <span *ngIf=\"(tempModalImage || selectImageArray)?.status ==='approved'\"\n class=\"ms-2\"><svg style=\"width: 20px;\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"11\" viewBox=\"0 0 10 11\" fill=\"none\">\n <rect y=\"0.5\" width=\"10\" height=\"10\" rx=\"5\" fill=\"#D1FADF\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\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\"\n fill=\"#12B76A\" />\n </svg></span>\n <span *ngIf=\"(tempModalImage || selectImageArray)?.status ==='rejected'\"\n class=\"ms-2\"><svg style=\"width: 20px;\n height: 20px;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\">\n <g clip-path=\"url(#clip0_1428_59484)\">\n <path\n d=\"M4.52961 1.5H8.66961L11.5996 4.43V8.57L8.66961 11.5H4.52961L1.59961 8.57V4.43L4.52961 1.5Z\"\n fill=\"#FEE4E2\" />\n <path\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\"\n stroke=\"#D92D20\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_1428_59484\">\n <rect width=\"12\" height=\"12\" fill=\"white\"\n transform=\"translate(0.599609 0.5)\" />\n </clipPath>\n </defs>\n </svg></span>\n </div>\n <div class=\"img-doc-value\">Entry Time : {{(tempModalImage || selectImageArray)?.entryTme ||\n (tempModalImage || selectImageArray)?.entryTime}}</div>\n </div>\n <div class=\"col-md-5 text-end py-3\">\n <span *ngIf=\"(tempModalImage || selectImageArray)?.revopsType ==='non-tagging'\"\n ngbTooltip=\"Yet to tag the customer\" placement=\"top\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"18\" viewBox=\"0 0 19 18\"\n fill=\"none\">\n <path\n d=\"M6.02344 5.625H6.03094M16.2159 10.4325L10.8384 15.81C10.6991 15.9495 10.5337 16.0601 10.3516 16.1356C10.1695 16.2111 9.97431 16.2499 9.77719 16.2499C9.58006 16.2499 9.38487 16.2111 9.20278 16.1356C9.02068 16.0601 8.85525 15.9495 8.71594 15.81L2.27344 9.375V1.875H9.77344L16.2159 8.3175C16.4953 8.59854 16.6521 8.97872 16.6521 9.375C16.6521 9.77128 16.4953 10.1515 16.2159 10.4325Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"selectImageArray?.revopsType ==='duplicate'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\"\n fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94635)\">\n <path\n d=\"M4.16797 13.1859H3.33464C2.89261 13.1859 2.46868 13.0103 2.15612 12.6977C1.84356 12.3852 1.66797 11.9612 1.66797 11.5192V4.01921C1.66797 3.57718 1.84356 3.15326 2.15612 2.84069C2.46868 2.52813 2.89261 2.35254 3.33464 2.35254H10.8346C11.2767 2.35254 11.7006 2.52813 12.0131 2.84069C12.3257 3.15326 12.5013 3.57718 12.5013 4.01921V4.85254M9.16797 8.18587H16.668C17.5884 8.18587 18.3346 8.93206 18.3346 9.85254V17.3525C18.3346 18.273 17.5884 19.0192 16.668 19.0192H9.16797C8.24749 19.0192 7.5013 18.273 7.5013 17.3525V9.85254C7.5013 8.93206 8.24749 8.18587 9.16797 8.18587Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94635\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"(tempModalImage || selectImageArray)?.revopsType ==='employee'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"21\" viewBox=\"0 0 20 21\"\n fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94639)\">\n <path\n d=\"M14.1654 18.186V16.5194C14.1654 15.6353 13.8142 14.7875 13.1891 14.1623C12.5639 13.5372 11.7161 13.186 10.832 13.186H4.16536C3.28131 13.186 2.43346 13.5372 1.80834 14.1623C1.18322 14.7875 0.832031 15.6353 0.832031 16.5194V18.186M19.1654 18.186V16.5194C19.1648 15.7808 18.919 15.0633 18.4665 14.4796C18.014 13.8959 17.3805 13.479 16.6654 13.2944M13.332 3.29437C14.049 3.47795 14.6846 3.89495 15.1384 4.47963C15.5922 5.0643 15.8386 5.78339 15.8386 6.52354C15.8386 7.26368 15.5922 7.98277 15.1384 8.56744C14.6846 9.15212 14.049 9.56912 13.332 9.7527M10.832 6.51937C10.832 8.36032 9.33965 9.8527 7.4987 9.8527C5.65775 9.8527 4.16536 8.36032 4.16536 6.51937C4.16536 4.67842 5.65775 3.18604 7.4987 3.18604C9.33965 3.18604 10.832 4.67842 10.832 6.51937Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94639\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"(tempModalImage || selectImageArray)?.revopsType ==='house-keeping'\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"21\" viewBox=\"0 0 21 21\"\n fill=\"none\">\n <g clip-path=\"url(#clip0_2012_94643)\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M9.26219 1.36722C10.1777 0.458974 11.662 0.458974 12.5776 1.36722L20.3133 9.04153C21.2287 9.9498 21.2287 11.4223 20.3133 12.3306L12.5776 20.0049C11.662 20.9131 10.1777 20.9131 9.26219 20.0049L7.05166 17.8119L5.02538 19.8221C4.10987 20.7303 2.62553 20.7303 1.71002 19.8221C0.79451 18.9139 0.79451 17.4413 1.71002 16.5331L3.7363 14.5229L1.52648 12.3306C0.610966 11.4223 0.610966 9.9498 1.52648 9.04153L9.26219 1.36722ZM11.4724 2.46357C11.1672 2.16082 10.6724 2.16082 10.3672 2.46357L4.84145 7.94556L13.6823 16.7163L19.2081 11.2342C19.5133 10.9315 19.5133 10.4406 19.2081 10.1379L15.3399 6.30032L14.0505 7.5794C13.7453 7.88214 13.2506 7.88214 12.9455 7.5794C12.6403 7.27664 12.6403 6.78579 12.9455 6.48305L14.2347 5.20397L13.1299 4.10786L9.99872 7.21418C9.69354 7.51692 9.19873 7.51692 8.89356 7.21418C8.58838 6.91143 8.58838 6.42058 8.89356 6.11783L12.0247 3.01151L11.4724 2.46357ZM12.5771 17.8125L3.73633 9.04191L2.6316 10.1379C2.32642 10.4406 2.32642 10.9315 2.6316 11.2342L10.3672 18.9085C10.6724 19.2113 11.1672 19.2113 11.4724 18.9085L12.5771 17.8125ZM4.84132 15.6192L2.81514 17.6294C2.50997 17.9321 2.50997 18.423 2.81514 18.7258C3.12031 19.0285 3.61509 19.0285 3.92026 18.7258L5.94644 16.7156L4.84132 15.6192Z\"\n fill=\"#475467\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2012_94643\">\n <rect width=\"21\" height=\"20\" fill=\"white\"\n transform=\"translate(0 0.686035)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"modal-footer py-2 px-0\"> -->\n\n <div class=\"w-100 py-2 mb-2 px-0 d-flex justify-content-end\">\n\n <button class=\"btn btn-outline\" (click)=\"closeImage()\">Close</button>\n\n </div>\n <!-- </div> -->\n </div>\n</ng-template>\n\n<!-- Footfall Trends Template -->\n<ng-template #footfallTrendsTemplate>\n <div class=\"row w-100 mb-3\">\n <!-- Total Footfall Card -->\n <div class=\"col-md-4 mb-3 mb-md-0\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <div class=\"d-flex align-items-center gap-2\">\n <span class=\"metric-title\">Total Footfall</span>\n <svg placement=\"top\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M4 18H9.5V19.25C9.5 19.9793 9.21027 20.6788 8.69454 21.1945C8.17882 21.7103 7.47935 22 6.75 22C6.02065 22 5.32118 21.7103 4.80546 21.1945C4.28973 20.6788 4 19.9793 4 19.25V18ZM8 6.11999C10 6.11999 11 8.99999 11 11C11 12 10.5 13 10 14.5L9.5 16H4C4 15 3.5 13.5 3.5 11C3.5 8.49999 5.498 6.11999 8 6.11999ZM20.054 14.098L19.837 15.329C19.7023 16.0396 19.2931 16.6686 18.698 17.0796C18.1029 17.4907 17.3698 17.6508 16.6576 17.5252C15.9453 17.3996 15.3111 16.9984 14.8925 16.4086C14.4739 15.8188 14.3045 15.0878 14.421 14.374L14.637 13.144L20.054 14.098ZM18.178 1.70499C20.642 2.13899 22.196 4.82999 21.762 7.29199C21.328 9.75399 20.575 11.144 20.402 12.129L14.985 11.174L14.753 9.60999C14.521 8.04599 14.203 6.97399 14.376 5.98999C14.723 4.01999 16.208 1.35799 18.178 1.70499Z\"\n fill=\"#00A3FF\" />\n </svg>\n </div>\n </div>\n <div class=\"metric-value\">{{ getCurrentFootfall() || 0 }}</div>\n <div class=\"metric-trend\" [ngClass]=\"getFootfallPercentageChange() >= 0 ? 'up' : 'down'\">\n <svg *ngIf=\"getFootfallPercentageChange() >= 0\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 2L10 6H7V10H5V6H2L6 2Z\" fill=\"#10B981\" />\n </svg>\n <svg *ngIf=\"getFootfallPercentageChange() < 0\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 10L2 6H5V2H7V6H10L6 10Z\" fill=\"#F04438\" />\n </svg>\n <span>{{ getFootfallPercentageChange() >= 0 ? '+' : '' }}{{\n getFootfallPercentageChange() }}% vs Yesterday</span>\n </div>\n </div>\n </div>\n <!-- Total Downtime Card -->\n <div class=\"col-md-4 mb-3 mb-md-0\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <div class=\"d-flex align-items-center gap-2\">\n <span class=\"metric-title\">Total Downtime</span>\n <div class=\"downtime-icons\">\n <svg width=\"40\" height=\"41\" viewBox=\"0 0 40 41\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <rect y=\"0.5\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\" />\n <path\n d=\"M21.9004 12.1675C22.9958 12.1675 24.0423 12.3918 24.9977 12.7987C25.9889 13.2207 26.8809 13.8402 27.6279 14.6087C28.3734 15.3756 28.9756 16.2931 29.3857 17.3162C29.7813 18.299 29.9993 19.3756 29.9993 20.5008C29.9993 21.6277 29.7813 22.7043 29.3857 23.6871C28.9756 24.7068 28.3734 25.6244 27.6263 26.3929C26.8809 27.1598 25.9889 27.7793 24.9945 28.2012C24.0391 28.6081 22.9925 28.8325 21.8988 28.8325C20.8034 28.8325 19.7568 28.6081 18.8014 28.2012C17.8102 27.7793 16.9183 27.1598 16.1729 26.3929L16.1712 26.3912C15.4242 25.6227 14.8236 24.7052 14.4134 23.6871C14.2865 23.3707 14.1774 23.0459 14.0879 22.7127C14.2572 22.7294 14.4297 22.7378 14.6038 22.7378C14.9342 22.7378 15.2565 22.7076 15.5706 22.649C15.6227 22.8098 15.6797 22.9688 15.7415 23.1246C16.0785 23.9617 16.5732 24.7152 17.1885 25.3481C17.8037 25.981 18.5378 26.49 19.3499 26.8366C20.1328 27.1698 20.9938 27.3557 21.8988 27.3557C22.8037 27.3557 23.6631 27.1715 24.4476 26.8366C25.2614 26.49 25.9938 25.981 26.6091 25.3481C27.2243 24.7152 27.7191 23.9601 28.056 23.1246C28.3799 22.3192 28.5605 21.4334 28.5605 20.5025C28.5605 19.5715 28.3815 18.6875 28.056 17.8804C27.7191 17.0432 27.2243 16.2898 26.6091 15.6569C25.9938 15.024 25.2598 14.5149 24.4476 14.1684C23.6647 13.8352 22.8037 13.6493 21.8988 13.6493C20.9938 13.6493 20.1344 13.8335 19.3499 14.1684C19.2799 14.1985 19.21 14.2303 19.1416 14.2621C18.8747 13.8301 18.5524 13.4383 18.1829 13.0984C18.3848 12.9913 18.5915 12.8925 18.8014 12.8021C19.7601 12.3918 20.805 12.1675 21.9004 12.1675ZM20.971 16.5393C20.971 16.335 21.0524 16.1508 21.181 16.0169C21.3112 15.8829 21.4902 15.8009 21.6888 15.8009C21.8874 15.8009 22.0664 15.8829 22.1966 16.0169C22.3268 16.1508 22.4066 16.335 22.4066 16.5393V20.4271L25.2305 22.1501C25.3997 22.2539 25.5137 22.4196 25.5592 22.6021C25.6048 22.7847 25.5837 22.9856 25.4827 23.1597V23.1614C25.3818 23.3355 25.2207 23.4527 25.0433 23.4996C24.8659 23.5465 24.6706 23.5247 24.5013 23.4209H24.4997L21.3405 21.4937C21.2314 21.4318 21.1419 21.3413 21.0768 21.2342C21.0101 21.122 20.971 20.9897 20.971 20.8491V16.5393Z\"\n fill=\"#667085\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M14.3913 12.6095C16.8164 12.6095 18.7826 14.6321 18.7826 17.1269C18.7826 19.6218 16.8164 21.6444 14.3913 21.6444C11.9661 21.6444 10 19.6218 10 17.1269C10 14.6321 11.9661 12.6095 14.3913 12.6095ZM14.3913 19.7172L16.748 16.7201H15.2848V15.1261H13.4977V16.7201H12.0345L14.3913 19.7172Z\"\n fill=\"#F04438\" />\n </svg>\n </div>\n </div>\n </div>\n <div class=\"metric-value\">{{ getFormattedDowntime() || '-' }}</div>\n <!-- <div class=\"metric-tag success\" *ngIf=\"hasDowntime()\"> -->\n <!-- <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6667 3.5L5.25 9.91667L2.33334 7\" stroke=\"#10B981\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> -->\n <!-- <span>Issue submitted</span>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.5 2.5L7.5 5.5L10.5 2.5\" stroke=\"#10B981\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> -->\n <!-- </div> -->\n </div>\n </div>\n\n <!-- Ticket Status Card -->\n <div class=\"col-md-4\">\n <div class=\"metric-card\">\n <div class=\"metric-header\">\n <span class=\"metric-title\">Ticket status</span>\n </div>\n <div class=\"metric-value\">{{ getTicketStatus() === '-' ? '-' : (getTicketStatus() |\n titlecase) }}</div>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #resetRequestPopup let-model>\n <div class=\"p-4\">\n <div class=\"modal-header border-0 p-0 w-100\">\n <h5 class=\"modal-title mb-3 fw-bold\">\n Reset request.\n </h5>\n </div>\n <div class=\"modal-body p-0\">\n <p class=\"text-muted mb-3\">\n You're requesting to re-enable footfall tickets, disabled after three instances of exceeding 95%\n accuracy.\n </p>\n <p class=\"text-muted mb-0\">\n Please ensure future accuracy stays on or within 95%.\n </p>\n </div>\n <div class=\"modal-footer border-0 p-0 mt-4 d-flex justify-content-end gap-2\">\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"cancelResetRequest()\">\n Cancel\n </button>\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"submitResetRequest()\">\n Send Request\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #ticketStatusTemplate let-model>\n <!-- Ticket Review Card (shown when ticket status is raised) -->\n <div class=\"col-12 mb-3\" *ngIf=\"(isTicketRaised() || isTicketClosed()) && getTaggingData('tagging')\">\n <div class=\"ticket-review-card\">\n <!-- Actual Footfall Header -->\n <div class=\"actual-footfall-header\">\n <span class=\"actual-footfall-number\">{{ getTaggingData('tagging')?.footfall || 0 }}</span>\n <span class=\"actual-footfall-label\">Actual Footfall</span>\n </div>\n <!-- Ticket Created By Section -->\n <div class=\"ticket-creator-section\"\n *ngIf=\"getTaggingData('tagging')?.createdByEmail || getTaggingData('tagging')?.createdAt\">\n <div class=\"d-flex align-items-center gap-2\">\n <!-- <div class=\"creator-avatar\" *ngIf=\"getTaggingData()?.createdByEmail?.profilePicture\">\n <img [src]=\"getTaggingData()?.createdByEmail?.profilePicture\" alt=\"Profile\" />\n </div> -->\n <div class=\"creator-avatar-placeholder\"\n *ngIf=\"!getTaggingData('tagging')?.createdByEmail?.profilePicture\">\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\n <path\n d=\"M16 10C17.6569 10 19 11.3431 19 13C19 14.6569 17.6569 16 16 16C14.3431 16 13 14.6569 13 13C13 11.3431 14.3431 10 16 10Z\"\n fill=\"#00A3FF\" />\n <path d=\"M11 22C11 19.2386 13.2386 17 16 17C18.7614 17 21 19.2386 21 22V23H11V22Z\"\n fill=\"#00A3FF\" />\n </svg>\n </div>\n <div class=\"creator-info\">\n <div class=\"creator-label\">Ticket created by</div>\n <div class=\"creator-details\">\n <span class=\"creator-email\">{{ getTaggingData('tagging')?.createdByEmail ||\n getTaggingData('tagging')?.createdByEmail || 'N/A' }}</span>\n <span class=\"creator-separator\" *ngIf=\"getTaggingData('tagging')?.createdAt\">\u2022</span>\n <span class=\"creator-time\" *ngIf=\"getTaggingData('tagging')?.createdAt\">{{\n getTaggingData('tagging')?.createdAt | date:'h:mm:ss a - d MMM yyyy' }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Ticket Revised Footfall and Metrics -->\n <div class=\"revised-footfall-section\">\n <div class=\"metrics-row\">\n <div class=\"metric-item\">\n <div class=\"metric-number blue-text\">\n {{ getTaggingData('tagging')?.revicedFootfall || 0 }}\n <span class=\"metric-percentage\">\n ({{ getTaggingData('tagging')?.revicedPerc || 0 }}%)\n </span>\n <span class=\"metric-arrow\">\u2193</span>\n </div>\n <div class=\"metric-label\">Revised footfall</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">({{ getRevisionCalculation('tagging')}}%)</div>\n <div class=\"metric-label\">Ticket%</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('tagging'), 'duplicate') }}</div>\n <div class=\"metric-label\">Duplicates</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('tagging'), 'employee') }}</div>\n <div class=\"metric-label\">Employee/Staff</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('tagging'), 'junk') }}</div>\n <div class=\"metric-label\">Junk</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('tagging'), 'houseKeeping') }}</div>\n <div class=\"metric-label\">House Keeping</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Ticket Final revision Card (shown when ticket status is closed) -->\n <div class=\"col-12 mb-3\" *ngIf=\"isTicketClosed() && getTaggingData('finalreview')\">\n <div class=\"ticket-review-card\">\n <!-- Ticket card section in revision start -->\n\n <!-- Actual Footfall Header -->\n <div class=\"actual-footfall-header\">\n <span class=\"actual-footfall-number\">{{ getTaggingData('tagging')?.footfall || 0 }}</span>\n <span class=\"actual-footfall-label\">Actual Footfall</span>\n </div>\n <!-- Ticket Created By Section -->\n <div class=\"ticket-creator-section\"\n *ngIf=\"getTaggingData('tagging')?.createdByEmail || getTaggingData('tagging')?.createdAt\">\n <div class=\"d-flex align-items-center gap-2\">\n <!-- <div class=\"creator-avatar\" *ngIf=\"getTaggingData()?.createdByEmail?.profilePicture\">\n <img [src]=\"getTaggingData()?.createdByEmail?.profilePicture\" alt=\"Profile\" />\n </div> -->\n <div class=\"creator-avatar-placeholder\"\n *ngIf=\"!getTaggingData('tagging')?.createdByEmail?.profilePicture\">\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\n <path\n d=\"M16 10C17.6569 10 19 11.3431 19 13C19 14.6569 17.6569 16 16 16C14.3431 16 13 14.6569 13 13C13 11.3431 14.3431 10 16 10Z\"\n fill=\"#00A3FF\" />\n <path d=\"M11 22C11 19.2386 13.2386 17 16 17C18.7614 17 21 19.2386 21 22V23H11V22Z\"\n fill=\"#00A3FF\" />\n </svg>\n </div>\n <div class=\"creator-info\">\n <div class=\"creator-label\">Ticket created by</div>\n <div class=\"creator-details\">\n <span class=\"creator-email\">{{ getTaggingData('tagging')?.createdByEmail ||\n getTaggingData('tagging')?.createdByEmail || 'N/A' }}</span>\n <span class=\"creator-separator\" *ngIf=\"getTaggingData('tagging')?.createdAt\">\u2022</span>\n <span class=\"creator-time\" *ngIf=\"getTaggingData('tagging')?.createdAt\">{{\n getTaggingData('tagging')?.createdAt | date:'h:mm:ss a - d MMM yyyy' }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Ticket Revised Footfall and Metrics -->\n <div class=\"revised-footfall-section\">\n <div class=\"metrics-row\">\n <div class=\"metric-item\">\n <div class=\"metric-number blue-text\">\n {{ getTaggingData('tagging')?.revicedFootfall || 0 }}\n <span class=\"metric-percentage\">\n ({{ getTaggingData('tagging')?.revicedPerc || 0 }}%)\n </span>\n <span class=\"metric-arrow\">\u2193</span>\n </div>\n <div class=\"metric-label\">Revised footfall</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">({{ getRevisionCalculation('tagging')}}%)</div>\n <div class=\"metric-label\">Ticket%</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('tagging'), 'duplicate') }}</div>\n <div class=\"metric-label\">Duplicates</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('tagging'), 'employee') }}</div>\n <div class=\"metric-label\">Employee/Staff</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('tagging'), 'junk') }}</div>\n <div class=\"metric-label\">Junk</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('tagging'), 'houseKeeping') }}</div>\n <div class=\"metric-label\">House Keeping</div>\n </div>\n </div>\n </div>\n <!-- Ticket card section in revision end -->\n\n <!-- Final Revision Section -->\n <div class=\"revision-section\">\n <div class=\"revision-title\">Final revision</div>\n <div class=\"final-revision-note\">\n Please reach centraloperations@lenskart.in for any further discrepancies\n </div>\n <div class=\"revised-footfall-section\">\n <div class=\"metrics-row\">\n <div class=\"metric-item\">\n <div class=\"metric-number blue-text\">\n {{ getTaggingData('finalreview')?.revicedFootfall || 0 }}\n <span class=\"metric-percentage\">\n ({{ getTaggingData('finalreview')?.revicedPerc || 0}}%)\n </span>\n <span class=\"metric-arrow\">\u2191</span>\n </div>\n <div class=\"metric-label\">Revised footfall</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">({{ getRevisionCalculation('finalreview')}}%)</div>\n <div class=\"metric-label\">Ticket%</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('finalreview'), 'duplicate') }}\n </div>\n <div class=\"metric-label\">Duplicates</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('finalreview'), 'employee') }}\n </div>\n <div class=\"metric-label\">Employee/Staff</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('finalreview'), 'junk') }}</div>\n <div class=\"metric-label\">Junk</div>\n </div>\n <div class=\"metric-item\">\n <div class=\"metric-number\">{{ getCountByType(getTaggingData('finalreview'), 'houseKeeping')\n }}</div>\n <div class=\"metric-label\">House Keeping</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-template>", styles: ["@charset \"UTF-8\";.switch-form-card{padding:8px 16px;border-radius:4px;border-left:2px solid var(--Primary-600, #00A3FF);background:var(--Primary-25, #F6FCFF);display:flex;align-items:center;justify-content:space-between}.switch-form-card .txt-one{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;line-height:140%}.nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.badge-num-primary{border-radius:16px!important;background:var(--Primary-50, #EAF8FF)!important;color:var(--Primary-700, #009BF3)!important;text-align:center;font-size:14px!important;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.badge-num-muted{border-radius:16px!important;background:var(--Primary-50, #F2F4F7)!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.img-src{width:100%;height:195px;border-radius:.625rem}.img-traffic .col-md-3{width:24%!important}.border-gray{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF)}.img-doc-directory{color:var(--Gray-900, #101828)!important;font-size:14px!important;font-weight:600;line-height:20px;text-decoration-line:underline}.img-doc-time{color:var(--Gray-800, #1D2939);font-size:14px;font-weight:500;line-height:20px}.img-doc-value{color:var(--Gray-600, #667085);font-size:14px;font-weight:500;line-height:20px}.overflow-x{overflow-x:auto}.no-preview{border:1px solid #F04438;background:#fee4e2;border-radius:8px;stroke-width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:41px 16px}.no-preview .header{color:#f04438;font-size:20px;font-weight:700;line-height:20px}.no-preview .description{color:#f04438;font-size:12px;font-weight:500;line-height:18px}.img-nodata{width:25%;height:15%}.img-nodata1{width:15%;height:15%}.nodata-title{font-size:14px!important;font-weight:600}.img-direc{color:var(--Gray-900, #101828)!important;font-size:18px!important;font-weight:500;line-height:28px}.custom-accordion{border-radius:5px}.custom-accordion-item{margin-bottom:10px}.custom-accordion-header{background-color:#fff;border:none;cursor:pointer;padding:10px;text-align:left;width:100%;display:flex;justify-content:space-between;align-items:center}.custom-accordion{width:100%}.mainheading{width:100%;display:flex;justify-content:space-between;align-items:center;padding:19px;border:none;background:none;cursor:pointer}.mainheading-1{width:77%;display:flex;justify-content:space-between;align-items:center;padding:19px;border:none;background:none;cursor:pointer}.header-row{display:flex;align-items:center;width:100%;justify-content:space-between}.img-dire{font-size:16px;font-weight:700}.divider{flex-grow:1;height:1px;background-color:#ddd;margin:0 10px}.accordion-arrow{display:flex;align-items:center}.scroll-container{max-height:400px;overflow-y:auto;overflow-x:hidden}.view-toggle .btn{border-radius:6px}.view-toggle .btn.active{background:var(--Primary-50, #EAF8FF);border-color:var(--Primary-200, #99DAFF)}.date-list-container{padding:4px 23px;width:100%}.date-list-scroll{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:16px;max-height:287px;overflow-y:auto;overflow-x:hidden;padding-bottom:8px}.date-card{min-width:0;max-width:none;padding:16px;background:#fff;border:1px solid #D0D5DD;border-radius:8px;cursor:pointer;transition:all .2s ease;display:flex;flex-direction:column;gap:8px}.date-card:hover{box-shadow:0 2px 8px #0000001a;border-color:#00a3ff}.date-card .date-card-header{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.date-card .date-card-header .calendar-icon{flex-shrink:0}.date-card .date-card-header .date-text{color:var(--Gray-900, #101828);font-size:14px;font-weight:500;line-height:20px;flex:1}.date-card .footfall-count{color:var(--Gray-900, #101828);font-size:32px;font-weight:400;line-height:40px;margin-top:4px}.date-card .footfall-label{color:var(--Gray-600, #667085);font-size:14px;font-weight:400;line-height:20px}.date-card-active{background:var(--Primary-50, #EAF8FF);border-color:var(--Primary-600, #00A3FF);border-width:2px}.date-card-active .date-text{color:var(--Primary-700, #009BF3);font-weight:600}.date-card-active .footfall-count{color:var(--Primary-700, #009BF3)}.list-view-wrapper{padding:0 8px 16px;max-height:480px;overflow-y:auto}.list-group{border:1px solid var(--Gray-200, #EAECF0);border-radius:12px;background:#fff;padding:16px 20px}.list-group-header{border-bottom:1px solid var(--Gray-200, #EAECF0);padding-bottom:12px;margin-bottom:16px!important}.list-group-header .group-title{color:var(--Gray-900, #101828);font-size:16px;font-weight:600;line-height:24px}.list-group-header .group-count{color:var(--Gray-600, #667085);font-weight:500}.high-400px{min-height:auto!important;max-height:800px!important}.scroll-y{overflow-y:auto}.absolute{top:5px;right:5px;z-index:2}.slider{position:relative}.slider .previous{position:absolute;top:30%;left:2%;width:32px;height:32px;background-color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer}.slider .next{position:absolute;top:30%;right:2%;width:32px;height:32px;background-color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer}.img-src1{border-radius:12px;border:1px solid var(--Gray-400, #98A2B3);background:var(--Gray-50, #F9FAFB);width:100%;height:375px;object-fit:contain}.zoom-icon-button{position:absolute;top:10px;right:10px;z-index:10;cursor:pointer;background:#fffffff2;border-radius:50%;padding:8px;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #00000026;transition:all .2s ease}.zoom-icon-button:hover{background:#fff;box-shadow:0 4px 12px #0003;transform:scale(1.05)}.zoom-icon-button svg{width:20px;height:20px}.border-gray{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);padding:0 4px}.border-gray-active{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--Primary-50, #EAF8FF);padding:0 4px}.zone-header{color:var(--Gray-900, #101828);font-size:14px;font-weight:600;line-height:20px}.last-visit{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.toggle-label{color:var(--Gray-900, #101828);font-size:16px;font-weight:600;line-height:24px}.nav-dev{border-radius:8px!important;border:1px solid var(--Primary-200, #99DAFF)!important;background:var(--Primary-25, #F6FCFF)!important}.tab-active{border-radius:6px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)!important;font-size:14px;font-weight:500;line-height:20px}.tab-text-default{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px}.border-gray-active1{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--Primary-50, #ffffff);padding:12px!important}.nav-item1 .nav-link1.active{border:none;border-radius:0;background:var(--Primary-50, #EAF8FF);border-bottom:2px solid #009BF3!important;padding:12px;color:var(--Primary-700, #009BF3);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.active-normal{padding:12px;color:var(--Gray-500, #667085);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.nav-item1 .nav-link1:hover{border:none}.tag-class{color:var(--Gray-900, #101828);font-size:14px;font-weight:600;line-height:20px}.spent-title{color:var(--Gray-600, #475467);font-size:14px;font-weight:600;line-height:20px}.spent-value{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.spent-value1{color:var(--Primary-500, #33B5FF);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:none;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.w-33{width:30%}.w-45{width:45%}.view-tetory{color:var(--Primary-700, #009BF3);font-size:14px;font-weight:600;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:none;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;text-transform:capitalize}.border-gray-tagged{border-radius:4px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--Primary-50, #ffffff);padding:8px!important}.desc-id{color:var(--Gray-900, #101828);font-size:12px;font-style:normal;font-weight:400;line-height:20px}.active-tab{border-bottom:2px solid #0d6efd;font-weight:600;color:#0d6efd}.badge-selected{background-color:#e0f3ff;color:#0d6efd;border:1px solid #0d6efd;border-radius:20px;padding:6px 12px}.badge-unselected{background-color:#f0f0f0;color:#333;border-radius:20px;padding:6px 12px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield;appearance:textfield}.cursor-not-allowed{cursor:not-allowed!important}.title-type{color:var(--Gray-800, #1D2939);font-size:16px;font-weight:600;line-height:24px}.top-50{top:35%!important}.activePlanBtn{border-radius:6px;background:var(--Primary-50, #EAF8FF);color:var(--Gray-700, #344054);font-size:14px!important;font-weight:500!important;line-height:20px}.inactivePlanBtn{color:var(--Gray-500, #344054)!important;font-size:14px;font-weight:500!important;line-height:20px}.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}input[type=checkbox]{width:18px!important;height:18px!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}::ng-deep .modal-backdrop{pointer-events:none}.meta-change.up{color:#10b981}.meta-change.down{color:#ef4444}.meta-change.neutral{color:#64748b}.split-screen-container{display:flex;height:calc(100vh - 300px);min-height:600px;gap:16px;margin-top:16px}.split-screen-container .left-panel{flex:0 0 35%;max-width:35%;overflow-y:auto;overflow-x:hidden;padding-right:8px;border-right:1px solid var(--Gray-200, #EAECF0)}.split-screen-container .right-panel{flex:1;overflow-y:auto;padding-left:16px}.thumbnail-list-section{margin-bottom:24px}.thumbnail-list-section .time-range-header{display:flex;align-items:center;gap:8px;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--Gray-200, #EAECF0)}.thumbnail-list-section .time-range-header .time-range-title{color:var(--Gray-900, #101828);font-size:16px;font-weight:600;line-height:24px}.thumbnail-list-section .time-range-header .time-range-count{color:var(--Gray-600, #667085);font-size:14px;font-weight:500;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);padding:2px 10px;border-radius:16px}.thumbnail-list-section .thumbnail-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.thumbnail-list-section .thumbnail-item{cursor:pointer;border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);padding:8px;transition:all .2s ease}.thumbnail-list-section .thumbnail-item:hover{border-color:var(--Primary-600, #00A3FF);box-shadow:0 2px 8px #00a3ff1a}.thumbnail-list-section .thumbnail-item.selected{border-color:var(--Primary-600, #00A3FF);border-width:2px;background:var(--Primary-50, #EAF8FF)}.thumbnail-list-section .thumbnail-item .thumbnail-image{width:100%;height:120px;object-fit:cover;border-radius:4px;margin-bottom:8px}.thumbnail-list-section .thumbnail-item .thumbnail-info .tango-id{color:var(--Gray-900, #101828);font-size:12px;font-weight:600;line-height:16px;margin-bottom:4px}.thumbnail-list-section .thumbnail-item .thumbnail-info .entry-time{color:var(--Gray-600, #667085);font-size:11px;font-weight:400;line-height:16px}.metric-card{background:var(--White, #FFF);border-radius:8px;padding:16px;height:100%;display:flex;flex-direction:column;gap:2px}.metric-card .metric-header{display:flex;justify-content:space-between;align-items:center}.metric-card .metric-header .metric-title{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.metric-card .metric-header .metric-icon,.metric-card .metric-header .footfall-icon-header{flex-shrink:0}.metric-card .metric-header .downtime-icons{position:relative;display:inline-flex;align-items:center;width:31px;height:24px}.metric-card .metric-header .downtime-icons .clock-icon{position:absolute;left:0;top:2px;z-index:1}.metric-card .metric-header .downtime-icons .alert-icon{position:absolute;right:-2px;top:-2px;z-index:2}.metric-card .metric-value{color:var(--Gray-900, #101828);font-size:32px;font-weight:400;line-height:40px}.metric-card .metric-trend{display:flex;align-items:center;gap:4px;font-size:14px;font-weight:500;line-height:20px}.metric-card .metric-trend.up{color:#10b981}.metric-card .metric-trend.down{color:#f04438}.metric-card .metric-trend svg{flex-shrink:0}.metric-card .metric-tag{display:inline-flex;align-items:center;gap:6px;padding:4px 8px;border-radius:4px;font-size:12px;font-weight:500;line-height:16px;width:fit-content}.metric-card .metric-tag.success{background:#d1fadf;color:#10b981}.metric-card .metric-tag svg{flex-shrink:0}.ticket-review-card{background:var(--White, #FFF);border-radius:12px;border:1px solid var(--Gray-200, #EAECF0);padding:20px;box-shadow:0 1px 3px #0000001a}.ticket-review-card .actual-footfall-header{background:var(--Primary-50, #EAF8FF);border-radius:8px;padding:16px 20px;margin-bottom:20px;display:flex;align-items:center;gap:12px}.ticket-review-card .actual-footfall-header .actual-footfall-number{color:var(--Gray-900, #101828);font-size:32px;font-weight:600;line-height:40px}.ticket-review-card .actual-footfall-header .actual-footfall-label{color:var(--Gray-700, #344054);font-size:16px;font-weight:500;line-height:24px}.ticket-review-card .ticket-creator-section{padding-bottom:20px;margin-bottom:20px;border-bottom:1px solid var(--Gray-200, #EAECF0)}.ticket-review-card .ticket-creator-section .creator-avatar{width:40px;height:40px;border-radius:50%;overflow:hidden;flex-shrink:0}.ticket-review-card .ticket-creator-section .creator-avatar img{width:100%;height:100%;object-fit:cover}.ticket-review-card .ticket-creator-section .creator-avatar-placeholder{width:40px;height:40px;flex-shrink:0;display:flex;align-items:center;justify-content:center}.ticket-review-card .ticket-creator-section .creator-info{flex:1}.ticket-review-card .ticket-creator-section .creator-info .creator-label{color:var(--Gray-600, #667085);font-size:12px;font-weight:400;line-height:18px;margin-bottom:4px}.ticket-review-card .ticket-creator-section .creator-info .creator-details{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.ticket-review-card .ticket-creator-section .creator-info .creator-details .creator-email{color:var(--Gray-900, #101828);font-size:14px;font-weight:500;line-height:20px}.ticket-review-card .ticket-creator-section .creator-info .creator-details .creator-separator{color:var(--Gray-400, #98A2B3);font-size:14px}.ticket-review-card .ticket-creator-section .creator-info .creator-details .creator-time{color:var(--Gray-600, #667085);font-size:14px;font-weight:400;line-height:20px}.ticket-review-card .revised-footfall-section .metrics-row{display:flex;flex-wrap:wrap;gap:24px;align-items:flex-start}.ticket-review-card .revised-footfall-section .metrics-row .metric-item{flex:1;min-width:120px;display:flex;flex-direction:column;gap:4px}.ticket-review-card .revised-footfall-section .metrics-row .metric-item .metric-number{color:var(--Gray-900, #101828);font-size:24px;font-weight:600;line-height:32px}.ticket-review-card .revised-footfall-section .metrics-row .metric-item .metric-number.blue-text{color:var(--Primary-700, #009BF3)}.ticket-review-card .revised-footfall-section .metrics-row .metric-item .metric-number.blue-text .metric-percentage{font-size:16px;font-weight:500;margin-left:4px}.ticket-review-card .revised-footfall-section .metrics-row .metric-item .metric-number.blue-text .metric-arrow{color:var(--Primary-700, #009BF3);font-size:16px;margin-left:4px}.ticket-review-card .revised-footfall-section .metrics-row .metric-item .metric-label{color:var(--Gray-600, #667085);font-size:14px;font-weight:400;line-height:20px}.ticket-review-card .revision-section{margin-top:24px;padding-top:24px;border-top:1px solid var(--Gray-200, #EAECF0)}.ticket-review-card .revision-section .revision-title{color:var(--Gray-900, #101828);font-size:16px;font-weight:600;line-height:24px;margin-bottom:16px}.ticket-review-card .revision-section .final-revision-note{color:var(--Gray-600, #667085);font-size:14px;font-weight:400;line-height:20px;margin-bottom:16px;font-style:italic}.ticket-block-alert{border-radius:8px;border:2px dashed #F04438;background:#fee4e2;padding:16px;margin-bottom:16px}.ticket-block-alert .ticket-block-alert-content{display:flex;align-items:flex-start;gap:12px}.ticket-block-alert .ticket-block-alert-content .ticket-block-alert-icon{flex-shrink:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.ticket-block-alert .ticket-block-alert-content .ticket-block-alert-icon svg{width:24px;height:24px}.ticket-block-alert .ticket-block-alert-content .ticket-block-alert-text{flex:1;display:flex;flex-direction:column;gap:8px}.ticket-block-alert .ticket-block-alert-content .ticket-block-alert-text .ticket-block-alert-title{color:#f04438;font-size:16px;font-weight:700;line-height:24px}.ticket-block-alert .ticket-block-alert-content .ticket-block-alert-text .ticket-block-alert-description,.ticket-block-alert .ticket-block-alert-content .ticket-block-alert-text .ticket-block-alert-action{color:#f04438;font-size:14px;font-weight:400;line-height:20px}.ticket-block-alert .ticket-block-alert-content .ticket-block-alert-text .ticket-block-alert-action .ticket-block-alert-link{color:#f04438;text-decoration:underline;cursor:pointer;font-weight:500}.ticket-block-alert .ticket-block-alert-content .ticket-block-alert-text .ticket-block-alert-action .ticket-block-alert-link:hover{color:#d92d20;text-decoration:underline}.ticket-request-alert{border-radius:8px;border:2px dashed #10B981;background:#d1fae5;padding:16px;margin-bottom:16px}.ticket-request-alert .ticket-request-alert-content{display:flex;align-items:flex-start;gap:12px}.ticket-request-alert .ticket-request-alert-content .ticket-request-alert-icon{flex-shrink:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center}.ticket-request-alert .ticket-request-alert-content .ticket-request-alert-icon svg{width:24px;height:24px}.ticket-request-alert .ticket-request-alert-content .ticket-request-alert-text{flex:1;display:flex;flex-direction:column;gap:8px}.ticket-request-alert .ticket-request-alert-content .ticket-request-alert-text .ticket-request-alert-title{color:#10b981;font-size:16px;font-weight:700;line-height:24px}.ticket-request-alert .ticket-request-alert-content .ticket-request-alert-text .ticket-request-alert-description{color:#10b981;font-size:14px;font-weight:400;line-height:20px}\n"] }]
|
|
875
1317
|
}], ctorParameters: () => [{ type: i1.TrafficService }, { type: i2.GlobalStateService }, { type: i0.ChangeDetectorRef }, { type: i3.NgbModal }, { type: i4.ToastService }, { type: i5.TrafficRvpsService }], propDecorators: { zoomPopup: [{
|
|
876
1318
|
type: ViewChild,
|
|
877
1319
|
args: ["zoomPopup"]
|
|
878
1320
|
}], raisedPopup: [{
|
|
879
1321
|
type: ViewChild,
|
|
880
1322
|
args: ["raisedPopup"]
|
|
1323
|
+
}], resetRequestPopup: [{
|
|
1324
|
+
type: ViewChild,
|
|
1325
|
+
args: ["resetRequestPopup"]
|
|
881
1326
|
}], imagePopup: [{
|
|
882
1327
|
type: ViewChild,
|
|
883
1328
|
args: ["imagePopup"]
|
|
884
1329
|
}] } });
|
|
885
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1nLXJ2cHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS10cmFmZmljL3NyYy9saWIvY29tcG9uZW50cy9pbWctcnZwcy9pbWctcnZwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYWZmaWMvc3JjL2xpYi9jb21wb25lbnRzL2ltZy1ydnBzL2ltZy1ydnBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBR1MsU0FBUyxFQUM1QixNQUFNLGVBQWUsQ0FBQztBQUt2QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFPOUMsTUFBTSxPQUFPLGdCQUFnQjtJQU9qQjtJQUNEO0lBQ0M7SUFDQTtJQUNBO0lBQ0E7SUFYVixVQUFVLENBQU07SUFDaEIsWUFBWSxDQUFNO0lBQ2xCLE9BQU8sR0FBWSxJQUFJLENBQUM7SUFDeEIsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNmLFNBQVMsQ0FBTTtJQUNmLFlBQ1UsT0FBdUIsRUFDeEIsRUFBc0IsRUFDckIsRUFBcUIsRUFDckIsWUFBc0IsRUFDdEIsS0FBbUIsRUFDbkIsV0FBK0I7UUFML0IsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDeEIsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFDckIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsaUJBQVksR0FBWixZQUFZLENBQVU7UUFDdEIsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNuQixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7SUFDdEMsQ0FBQztJQUNhLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzFDLFdBQVc7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QU0sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ2hELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzFCO2FBQU0sSUFBSSxTQUFTLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6RCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUMxQjtRQUVELHdCQUF3QjtRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUVyRSwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUNwRCxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsaUJBQWlCLENBQ2pELENBQUM7SUFDSixDQUFDO3dHQTEvQlUsZ0JBQWdCOzRGQUFoQixnQkFBZ0Isb1ZDcEI3QixnOGhHQWttQ2M7OzRGRDlrQ0QsZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLGNBQWM7dU9BcW9CQSxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBMEZJLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkEwTkMsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxFbGVtZW50UmVmLFZpZXdDaGlsZFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFRyYWZmaWNSdnBzU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy90cmFmZmljLXJ2cHMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLWdsb2JhbFwiO1xyXG5pbXBvcnQgeyBUcmFmZmljU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy90cmFmZmljLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1zaGFyZWRcIjtcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItaW1nLXJ2cHNcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2ltZy1ydnBzLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9pbWctcnZwcy5jb21wb25lbnQuc2Nzc1wiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1nUnZwc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBoZWFkZXJEYXRhOiBhbnk7XHJcbiAgc3RvcmVJZGFycmF5OiBhbnk7XHJcbiAgbG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgbm9EYXRhID0gZmFsc2U7XHJcbiAgbm9ybWFsaXplOiBhbnk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNlcnZpY2U6IFRyYWZmaWNTZXJ2aWNlLFxyXG4gICAgcHVibGljIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgcnZwc1NlcnZpY2U6IFRyYWZmaWNSdnBzU2VydmljZVxyXG4gICkge31cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbiAgaXNBY2NvcmRpb25FeHBhbmRlZCA9IHRydWU7XHJcbiAgdG9nZ2xlQWNjb3JkaW9uKCkge1xyXG4gICAgdGhpcy5pc0FjY29yZGlvbkV4cGFuZGVkID0gIXRoaXMuaXNBY2NvcmRpb25FeHBhbmRlZDtcclxuICB9XHJcbiAgdXNlcnM6YW55O1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRJbml0YWwoKTtcclxuICAgIGNvbnN0IHVzZXJEYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlci1pbmZvXCIpIHx8IFwie31cIik7XHJcbiAgICB0aGlzLnVzZXJzID0gdXNlckRhdGE7XHJcbiAgfVxyXG4gIGdldEluaXRhbCgpIHtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWVcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLCBkZWJvdW5jZVRpbWUoMTAwKSlcclxuICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEgIT09IG51bGwgfHwgZGF0YT8uY2xpZW50ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmhlYWRlckRhdGEgPSBkYXRhO1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUlkYXJyYXkgPSB0aGlzLmhlYWRlckRhdGE/LnN0b3Jlc1xyXG4gICAgICAgICAgICAuZmlsdGVyKChzdG9yZTogYW55KSA9PiBzdG9yZS5jaGVja2VkKVxyXG4gICAgICAgICAgICAubWFwKChzdG9yZTogYW55KSA9PiBzdG9yZS5zdG9yZUlkKTtcclxuICAgICAgICAgIHRoaXMuYmFja1RvRm9vdGZhbGwoKTtcclxuICAgICAgICAgIHRoaXMuZGlzcGxheURhdGVSYW5nZSgpO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLmhlYWRlckRhdGE/LmRhdGU/LnN0YXJ0RGF0ZSA9PT0gdGhpcy5oZWFkZXJEYXRhPy5kYXRlPy5lbmREYXRlXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5iYWNrbmF2ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheURhdGVSYW5nZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldGltYWdlcygwLCB0aGlzLmhlYWRlckRhdGEuZGF0ZS5lbmREYXRlKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9sZGVyVmlldyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuYmFja25hdiA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGJhY2tUb0Zvb3RmYWxsKCkge1xyXG4gICAgdGhpcy5mb2xkZXJWaWV3ID0gdHJ1ZTtcclxuICAgIHRoaXMuZ2V0UnZwc0xpc3QgPSBbXTtcclxuICAgIHRoaXMuZ2V0UnZwc0ltYWdlTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5vYmplY3RzQXJyYXkgPSBbXTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLnR5cGUgPSBcImZvb3RmYWxsXCI7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGltZSA9IFwiXCI7XHJcbiAgfVxyXG4gIGZvbGRlclZpZXc6IGJvb2xlYW47XHJcbiAgYmFja25hdjogYm9vbGVhbjtcclxuICBkYXRlQXJyYXk6IGFueTtcclxuICBkaXNwbGF5RGF0ZVJhbmdlKCkge1xyXG4gICAgY29uc3QgZGF0ZXMgPSB0aGlzLmdldERhdGVSYW5nZUFycmF5KFxyXG4gICAgICB0aGlzLmhlYWRlckRhdGEuZGF0ZS5zdGFydERhdGUsXHJcbiAgICAgIHRoaXMuaGVhZGVyRGF0YS5kYXRlLmVuZERhdGVcclxuICAgICk7XHJcbiAgICB0aGlzLmRhdGVBcnJheSA9IGRhdGVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF0ZVJhbmdlQXJyYXkoZnJvbURhdGU6IHN0cmluZywgdG9EYXRlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKGZyb21EYXRlKTsgLy8gQ29udmVydCBzdHJpbmcgdG8gRGF0ZSBvYmplY3RcclxuICAgIGNvbnN0IGVuZCA9IG5ldyBEYXRlKHRvRGF0ZSk7IC8vIENvbnZlcnQgc3RyaW5nIHRvIERhdGUgb2JqZWN0XHJcbiAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGRhdGVzIGFyZSB2YWxpZFxyXG4gICAgaWYgKGlzTmFOKHN0YXJ0LmdldFRpbWUoKSkgfHwgaXNOYU4oZW5kLmdldFRpbWUoKSkpIHtcclxuICAgICAgcmV0dXJuIGRhdGVBcnJheTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBMb29wIGZyb20gc3RhcnQgZGF0ZSB0byBlbmQgZGF0ZVxyXG4gICAgbGV0IGN1cnJlbnREYXRlID0gc3RhcnQ7XHJcbiAgICB3aGlsZSAoY3VycmVudERhdGUgPD0gZW5kKSB7XHJcbiAgICAgIGRhdGVBcnJheS5wdXNoKGN1cnJlbnREYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdKTsgLy8gRm9ybWF0IFlZWVktTU0tRERcclxuICAgICAgY3VycmVudERhdGUuc2V0RGF0ZShjdXJyZW50RGF0ZS5nZXREYXRlKCkgKyAxKTsgLy8gSW5jcmVtZW50IHRoZSBkYXRlIGJ5IDEgZGF5XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGVBcnJheTtcclxuICB9XHJcbiAgc2VsZWN0ZWRUaW1lOiBhbnk7XHJcbiAgZm9sZGVyTmFtZTogYW55O1xyXG4gIHNlbGVjdGVkVGltZXModmFsOiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRUaW1lID0gdmFsO1xyXG4gICAgdGhpcy5mb2xkZXJOYW1lID0gdmFsO1xyXG4gICAgdGhpcy5mb2xkZXJWaWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLnR5cGUgPSB0aGlzLnR5cGU7XHJcbiAgICB0aGlzLmdldFJldm9wcygpO1xyXG4gIH1cclxuICBmb2xkZXJEYXRlOiBhbnk7XHJcbiAgaW1hZ2VGbG93ID0gZmFsc2U7XHJcbiAgLy8gZ2V0IFJldm9wcyBBcGlcclxuICBnZXRSdnBzTGlzdDogYW55O1xyXG4gIGdldFJ2cHNJbWFnZUxpc3Q6IGFueTtcclxuICBvYmplY3RzQXJyYXk6IGFueTtcclxuICBpbWFnZXNBcnJheURhdGE6IGFueTtcclxuICBzZWxlY3RJbmRleDogYW55ID0gMDtcclxuICBmb290ZmFsbERhdGU6IGFueTtcclxuICBsZW5ndGhWYWx1ZTogYm9vbGVhbjtcclxuICBnZXRpbWFnZXMoaW5kZXg6IGFueSwgb2JqOiBhbnkpIHtcclxuICAgIHRoaXMub2JqZWN0c0FycmF5ID0gW107XHJcbiAgICB0aGlzLnNlbGVjdEluZGV4ID0gaW5kZXg7XHJcbiAgICB0aGlzLmZvbGRlckRhdGUgPSBvYmo7XHJcbiAgICAodGhpcy5mb290ZmFsbERhdGUgPSBvYmopLCAodGhpcy5mb2xkZXJWaWV3ID0gZmFsc2UpO1xyXG4gICAgdGhpcy5zZXJ2aWNlPy5pc25vcm1hbGl6ZVNvdXJjZVxyXG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLCBkZWJvdW5jZVRpbWUoMzAwKSlcclxuICAgICAgPy5zdWJzY3JpYmUoKG5vcm1hbGl6ZTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5ub3JtYWxpemUgPSBub3JtYWxpemU7XHJcbiAgICAgICAgaWYgKCFub3JtYWxpemUpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0UnZwc0xpc3QgPSBbXTtcclxuICAgICAgICAgIHRoaXMuZ2V0UnZwc0ltYWdlTGlzdCA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5vYmplY3RzQXJyYXkgPSBbXTtcclxuICAgICAgICAgIHRoaXMuZ2V0UmV2b3BzKCk7XHJcbiAgICAgICAgICB0aGlzLmdldFRvdGFsKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubGVuZ3RoVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMub2JqZWN0c0FycmF5ID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgY291bnREYXRhOiBhbnkgPSBbXTtcclxuICBnZXRUb3RhbCgpIHtcclxuICAgIHRoaXMuY291bnREYXRhID0gW107XHJcbiAgICBjb25zdCBzdG9yZUlkID1cclxuICAgICAgdGhpcy5zdG9yZUlkYXJyYXkgJiYgdGhpcy5zdG9yZUlkYXJyYXkubGVuZ3RoID4gMFxyXG4gICAgICAgID8gdGhpcy5zdG9yZUlkYXJyYXlbMF1cclxuICAgICAgICA6IG51bGw7XHJcbiAgICBjb25zdCBkYXRlU3RyaW5nID0gdGhpcy5mb2xkZXJEYXRlIHx8IFwiXCI7XHJcbiAgICB0aGlzLnJ2cHNTZXJ2aWNlXHJcbiAgICAgIC5nZXRUb3RhbFZhbChzdG9yZUlkLCBkYXRlU3RyaW5nKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgID8uc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5nZXRSdnBzTGlzdD8ubGVuZ3RoKSB0aGlzLmNvdW50RGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmNvdW50RGF0YSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291bnREYXRhID0gW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge30sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBpbWFnZVVybDogYW55O1xyXG4gIHJldm9wc1R5cGVDb3VudDogYW55O1xyXG4gIGN1cnJlbnRUaW1lUmFuZ2VEYXRhOiBhbnkgPSBbXTtcclxuICBvdmVyYWxsQXJyYXlEYXRhOiBhbnkgPSBbXTtcclxuICBhbGxGb290ZmFsbERhdGE6IGFueSA9IFtdO1xyXG4gIGdldFRpY2tldFN0YXR1c2VzKCk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IHN0YXR1c0xpc3QgPSB0aGlzLmdldFJ2cHNMaXN0Py50aWNrZXRTdGF0dXM7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzdGF0dXNMaXN0KSkge1xyXG4gICAgICByZXR1cm4gc3RhdHVzTGlzdC5tYXAoKHMpID0+IHM/LnN0YXR1cz8udG9Mb3dlckNhc2UoKSkuZmlsdGVyKEJvb2xlYW4pOyAvLyBSZW1vdmVzIG51bGwvdW5kZWZpbmVkXHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG4gIGdldFJldm9wcygpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5vYmplY3RzQXJyYXkgPVtdO1xyXG4gICAgLy8gdGhpcy5vdmVyYWxsQXJyYXlEYXRhID1bXTtcclxuICAgIC8vIHRoaXMuZ2V0UnZwc0xpc3QgPVtdO1xyXG4gICAgLy8gdGhpcy5nZXRSdnBzSW1hZ2VMaXN0PVtdO1xyXG4gICAgLy8gdGhpcy5hbGxGb290ZmFsbERhdGEgPVtdXHJcbiAgICBjb25zdCBzdG9yZUlkID1cclxuICAgICAgdGhpcy5zdG9yZUlkYXJyYXkgJiYgdGhpcy5zdG9yZUlkYXJyYXkubGVuZ3RoID4gMFxyXG4gICAgICAgID8gdGhpcy5zdG9yZUlkYXJyYXlbMF1cclxuICAgICAgICA6IG51bGw7XHJcbiAgICBjb25zdCBkYXRlU3RyaW5nID0gdGhpcy5mb2xkZXJEYXRlIHx8IFwiXCI7XHJcbiAgICBjb25zdCBncm91cEJ5S2V5ID0gXCJ0aW1lXCI7XHJcbiAgICBjb25zdCB0eXBlID0gdGhpcy50eXBlID09PSBcImZvb3RmYWxsXCIgPyBcIlwiIDogdGhpcy50eXBlIHx8IFwiXCI7XHJcbiAgICBjb25zdCBwcm9jZXNzVHlwZSA9IFwiZm9vdGZhbGxcIjtcclxuXHJcbiAgICB0aGlzLnJ2cHNTZXJ2aWNlXHJcbiAgICAgIC5nZXRSdnBzTGlzdEFwaShzdG9yZUlkLCBkYXRlU3RyaW5nLCBncm91cEJ5S2V5LCB0eXBlLCBwcm9jZXNzVHlwZSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldFJ2cHNMaXN0ID0gcmVzPy5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLmltYWdlVXJsID0gdGhpcy5ydnBzU2VydmljZT8uZm9vdGZhbGxDRE47XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UnZwc0ltYWdlTGlzdCA9IHJlcz8uZGF0YT8ucmVzdWx0O1xyXG5cclxuICAgICAgICAgICAgLy8gU2F2ZSB0aGUgZnVsbCBmb290ZmFsbCBkYXRhIChncm91cGVkIGJ5IHRpbWVSYW5nZSlcclxuICAgICAgICAgICAgdGhpcy5hbGxGb290ZmFsbERhdGEgPSByZXM/LmRhdGE/LnJlc3VsdD8uZm9vdGZhbGxEYXRhIHx8IFtdO1xyXG5cclxuICAgICAgICAgICAgLy8gQ3JlYXRlIHRpbWVSYW5nZSArIGNvdW50IG9iamVjdFxyXG4gICAgICAgICAgICBjb25zdCB0aW1lUmFuZ2VzID0gdGhpcy5hbGxGb290ZmFsbERhdGEubWFwKFxyXG4gICAgICAgICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0udGltZVJhbmdlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMub2JqZWN0c0FycmF5ID0gdGltZVJhbmdlcy5tYXAoKHRpbWVSYW5nZTogYW55KSA9PiAoe1xyXG4gICAgICAgICAgICAgIHRpbWVSYW5nZSxcclxuICAgICAgICAgICAgICBjb3VudDpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWxsRm9vdGZhbGxEYXRhLmZpbmQoKGQ6IGFueSkgPT4gZC50aW1lUmFuZ2UgPT09IHRpbWVSYW5nZSlcclxuICAgICAgICAgICAgICAgICAgPy5kYXRhPy5sZW5ndGggfHwgMCxcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAvLyBPbmx5IHJlc2V0IGlmIHByZXZpb3VzIHNlbGVjdGVkIHRpbWUgaXMgTk9UIGluIHRoZSBuZXcgbGlzdFxyXG4gICAgICAgICAgICBpZiAoIXRpbWVSYW5nZXMuaW5jbHVkZXModGhpcy5zZWxlY3RlZFRpbWUpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpbWVzKHRoaXMub2JqZWN0c0FycmF5WzBdLnRpbWVSYW5nZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEdldCBkYXRhIGZvciB0aGUgc2VsZWN0ZWQgdGltZVJhbmdlXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRpbWVSYW5nZURhdGEgPVxyXG4gICAgICAgICAgICAgIHRoaXMuYWxsRm9vdGZhbGxEYXRhLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAoaXRlbTogYW55KSA9PiBpdGVtLnRpbWVSYW5nZSA9PT0gdGhpcy5zZWxlY3RlZFRpbWVcclxuICAgICAgICAgICAgICApPy5kYXRhIHx8IFtdO1xyXG5cclxuICAgICAgICAgICAgLy8gQ291bnQgcmV2b3BzVHlwZXNcclxuICAgICAgICAgICAgY29uc3QgcmV2b3BzVHlwZUNvdW50OiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge1xyXG4gICAgICAgICAgICAgIFwibm9uLXRhZ2dpbmdcIjogMCxcclxuICAgICAgICAgICAgICBkdXBsaWNhdGU6IDAsXHJcbiAgICAgICAgICAgICAgZW1wbG95ZWU6IDAsXHJcbiAgICAgICAgICAgICAgXCJob3VzZS1rZWVwaW5nXCI6IDAsXHJcbiAgICAgICAgICAgICAganVuazogMCxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGxldCB0b3RhbENvdW50ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5vdmVyYWxsQXJyYXlEYXRhID0gW107XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFsbEZvb3RmYWxsRGF0YS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpdGVtLmRhdGE/LmZvckVhY2goKGltYWdlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3ZlcmFsbEFycmF5RGF0YS5wdXNoKGltYWdlKTtcclxuICAgICAgICAgICAgICAgIHRvdGFsQ291bnQrKztcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlID1cclxuICAgICAgICAgICAgICAgICAgaW1hZ2UucmV2b3BzVHlwZT8udHJpbSgpLnRvTG93ZXJDYXNlKCkgfHwgXCJ1bmtub3duXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IFwibm9uLXRhZ2dpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICByZXZvcHNUeXBlQ291bnRbXCJub24tdGFnZ2luZ1wiXSsrO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBcImVtcGxveWVlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgcmV2b3BzVHlwZUNvdW50W1wiZW1wbG95ZWVcIl0rKztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJob3VzZS1rZWVwaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgICAgcmV2b3BzVHlwZUNvdW50W1wiaG91c2Uta2VlcGluZ1wiXSsrO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKHR5cGUgPT09IFwianVua1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldm9wc1R5cGVDb3VudFtcImp1bmtcIl0rKztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyDinIUgQ291bnQgZHVwbGljYXRlcyBvbmx5IGZyb20gZHVwbGljYXRlSW1hZ2VQYXRoXHJcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbWFnZS5kdXBsaWNhdGVJbWFnZVBhdGgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldm9wc1R5cGVDb3VudFtcImR1cGxpY2F0ZVwiXSArPVxyXG4gICAgICAgICAgICAgICAgICAgIGltYWdlLmR1cGxpY2F0ZUltYWdlUGF0aC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb3VudERhdGEgPSB7XHJcbiAgICAgICAgICAgICAgZm9vdGZhbGxDb3VudDogdG90YWxDb3VudCxcclxuICAgICAgICAgICAgICBub25UYWdzOiByZXZvcHNUeXBlQ291bnRbXCJub24tdGFnZ2luZ1wiXSxcclxuICAgICAgICAgICAgICBkdXBsaWNhdGU6IHJldm9wc1R5cGVDb3VudFtcImR1cGxpY2F0ZVwiXSxcclxuICAgICAgICAgICAgICBlbXBsb3llZTogcmV2b3BzVHlwZUNvdW50W1wiZW1wbG95ZWVcIl0sXHJcbiAgICAgICAgICAgICAgaG91c2VrZWVwaW5nOiByZXZvcHNUeXBlQ291bnRbXCJob3VzZS1rZWVwaW5nXCJdLFxyXG4gICAgICAgICAgICAgIGp1bms6IHJldm9wc1R5cGVDb3VudFtcImp1bmtcIl1cclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFwcGx5IHR5cGUgZmlsdGVyIGFmdGVyIGxvYWRpbmcgdGltZVJhbmdlIGRhdGFcclxuICAgICAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBmYWlsdXJlXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UnZwc0xpc3QgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5nZXRSdnBzSW1hZ2VMaXN0ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMub2JqZWN0c0FycmF5ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VzQXJyYXlEYXRhID0gW107XHJcbiAgICAgICAgICAgIHRoaXMub3ZlcmFsbEFycmF5RGF0YSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmNvdW50RGF0YSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnN0IG1zZyA9XHJcbiAgICAgICAgICAgIGVyci5lcnJvci5lcnJvciB8fFxyXG4gICAgICAgICAgICBlcnIuZXJyb3IgfHxcclxuICAgICAgICAgICAgZXJyPy5lcnJvcj8ubWVzc2FnZSB8fFxyXG4gICAgICAgICAgICBlcnIubWVzc2FnZSB8fFxyXG4gICAgICAgICAgICBcIlVua25vd24gZXJyb3JcIjtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChtc2cpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmdldFJ2cHNMaXN0ID0gW107XHJcbiAgICAgICAgICB0aGlzLmdldFJ2cHNJbWFnZUxpc3QgPSBbXTtcclxuICAgICAgICAgIHRoaXMub2JqZWN0c0FycmF5ID0gW107XHJcbiAgICAgICAgICB0aGlzLmltYWdlc0FycmF5RGF0YSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5vdmVyYWxsQXJyYXlEYXRhID0gW107XHJcbiAgICAgICAgICB0aGlzLmNvdW50RGF0YSA9IFtdO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb3JpZ2luYWxDaGVja2VkRHVwbGljYXRlSWRzOiBhbnk7XHJcbiAgZWRpdFZhbHVlKCkge1xyXG4gICAgY29uc3QgdHlwZSA9ICh0aGlzLnNlbGVjdGVkVHlwZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgdGhpcy5yZXZvcHNUeXBlVmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZEltYWdlID0gdGhpcy5zZWxlY3RJbWFnZUFycmF5O1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRUZW1wbGQgPSBzZWxlY3RlZEltYWdlPy50ZW1wbGQ7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0eXBlID09PSBcImR1cGxpY2F0ZVwiICYmXHJcbiAgICAgIEFycmF5LmlzQXJyYXkoc2VsZWN0ZWRJbWFnZS5kdXBsaWNhdGVJbWFnZVBhdGgpXHJcbiAgICApIHtcclxuICAgICAgLy8gMS4gQ29udmVydCBkdXBsaWNhdGUgY2hpbGRyZW4gaW50byBjb25zaXN0ZW50IG9iamVjdHMgd2l0aCBwYXJlbnQgcmVmZXJlbmNlXHJcbiAgICAgIGNvbnN0IGR1cGxpY2F0ZUNoaWxkcmVuID0gc2VsZWN0ZWRJbWFnZS5kdXBsaWNhdGVJbWFnZVBhdGgubWFwKFxyXG4gICAgICAgIChjaGlsZDogYW55KSA9PiAoe1xyXG4gICAgICAgICAgLi4uY2hpbGQsXHJcbiAgICAgICAgICBwYXJlbnQ6IHNlbGVjdGVkVGVtcGxkLFxyXG4gICAgICAgICAgc2VsZWN0ZWQ6IHRydWUsXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuXHJcbiAgICAgIC8vIDIuIENvbGxlY3QgdGhlIHRlbXBsZCB2YWx1ZXMgb2YgZHVwbGljYXRlIGNoaWxkcmVuXHJcbiAgICAgIGNvbnN0IGR1cGxpY2F0ZUNoaWxkSWRzID0gZHVwbGljYXRlQ2hpbGRyZW4ubWFwKFxyXG4gICAgICAgIChjaGlsZDogYW55KSA9PiBjaGlsZC50ZW1wSWRcclxuICAgICAgKTtcclxuXHJcbiAgICAgIC8vIDMuIEZpbHRlciBvdXQgbm9uLXRhZ2dpbmcgaW1hZ2VzIGV4Y2VwdCB0aGUgc2VsZWN0ZWQgcGFyZW50ICYgaXRzIGNoaWxkcmVuXHJcbiAgICAgIGNvbnN0IG5vblRhZ2dpbmdJbWFnZXMgPSB0aGlzLm92ZXJhbGxBcnJheURhdGEuZmlsdGVyKChpbWc6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzTm9uVGFnZ2luZyA9XHJcbiAgICAgICAgICAoaW1nLnJldm9wc1R5cGUgfHwgXCJcIikudG9Mb3dlckNhc2UoKSA9PT0gXCJub24tdGFnZ2luZ1wiO1xyXG4gICAgICAgIGNvbnN0IGlzTm90U2VsZWN0ZWQgPVxyXG4gICAgICAgICAgaW1nLnRlbXBsZCAhPT0gc2VsZWN0ZWRUZW1wbGQgJiZcclxuICAgICAgICAgICFkdXBsaWNhdGVDaGlsZElkcy5pbmNsdWRlcyhpbWcudGVtcGxkKTtcclxuICAgICAgICByZXR1cm4gaXNOb25UYWdnaW5nICYmIGlzTm90U2VsZWN0ZWQ7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gNC4gTWVyZ2UgZHVwbGljYXRlIGNoaWxkcmVuICsgb3RoZXIgbm9uLXRhZ2dpbmcgaW1hZ2VzXHJcbiAgICAgIHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheSA9IFsuLi5kdXBsaWNhdGVDaGlsZHJlbiwgLi4ubm9uVGFnZ2luZ0ltYWdlc107XHJcblxyXG4gICAgICAvLyA1LiBNYXJrIHNlbGVjdGVkOiBvbmx5IGR1cGxpY2F0ZSBpbWFnZXMgdGhhdCB3ZXJlIG1hcmtlZCBpc0NoZWNrZWRcclxuICAgICAgdGhpcy5yZW1haW5pbmdJbWFnZUFycmF5LmZvckVhY2goKGltZzogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNEdXBsaWNhdGUgPVxyXG4gICAgICAgICAgKGltZy5yZXZvcHNUeXBlIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCkgPT09IFwiZHVwbGljYXRlXCI7XHJcbiAgICAgICAgaW1nLnNlbGVjdGVkID0gaXNEdXBsaWNhdGUgJiYgaW1nLmlzQ2hlY2tlZCA9PT0gdHJ1ZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyA2LiBTdG9yZSBvcmlnaW5hbCBjaGVja2VkIElEcyB0byBjb21wYXJlIGxhdGVyIGR1cmluZyBzdWJtaXRcclxuICAgICAgdGhpcy5vcmlnaW5hbENoZWNrZWREdXBsaWNhdGVJZHMgPSB0aGlzLnJlbWFpbmluZ0ltYWdlQXJyYXlcclxuICAgICAgICAuZmlsdGVyKChpbWc6IGFueSkgPT4gaW1nLmlzQ2hlY2tlZCA9PT0gdHJ1ZSlcclxuICAgICAgICAubWFwKChpbWc6IGFueSkgPT4gaW1nLnRlbXBsZCk7XHJcblxyXG4gICAgICAvLyDinIUgNy4gRmlsbCBzZWxlY3RlZER1cGxpY2F0ZUltYWdlc0xpc3Qgd2l0aCBwcmUtc2VsZWN0ZWQgZHVwbGljYXRlc1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRHVwbGljYXRlSW1hZ2VzTGlzdCA9IHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheVxyXG4gICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAoaW1nOiBhbnkpID0+XHJcbiAgICAgICAgICAgIChpbWcucmV2b3BzVHlwZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpID09PSBcImR1cGxpY2F0ZVwiICYmXHJcbiAgICAgICAgICAgIGltZy5pc0NoZWNrZWQgPT09IHRydWVcclxuICAgICAgICApXHJcbiAgICAgICAgLm1hcCgoaW1nOiBhbnkpID0+ICh7XHJcbiAgICAgICAgICAuLi5pbWcsXHJcbiAgICAgICAgICBwYXJlbnQ6IGltZy5wYXJlbnQgfHwgc2VsZWN0ZWRUZW1wbGQsXHJcbiAgICAgICAgICBpc0NoZWNrZWQ6IHRydWUsXHJcbiAgICAgICAgfSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gTm90IGR1cGxpY2F0ZSB0eXBlIOKGkiBzaG93IG9ubHkgc2VsZWN0ZWQgdHlwZSAoZXhjbHVkaW5nIHRoZSBjdXJyZW50IHNlbGVjdGVkIGltYWdlKVxyXG4gICAgICB0aGlzLnJlbWFpbmluZ0ltYWdlQXJyYXkgPSB0aGlzLm92ZXJhbGxBcnJheURhdGEuZmlsdGVyKChpbWc6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGltZ1R5cGUgPSAoaW1nLnJldm9wc1R5cGUgfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICByZXR1cm4gaW1nVHlwZSA9PT0gdHlwZSAmJiBpbWcudGVtcGxkICE9PSBzZWxlY3RlZFRlbXBsZDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiYWNrVG9Gb290ZmFsbDEoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUmFkaW9UeXBlID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5pbWFnZUZsb3cgPSBmYWxzZTtcclxuICB9XHJcbiAgc2VsZWN0SW1hZ2VBcnJheTogYW55O1xyXG4gIHJlbWFpbmluZ0ltYWdlQXJyYXk6IGFueTtcclxuICByZXZvcHNUeXBlVmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgZWRpdEJ0blNob3cgPSBmYWxzZTtcclxuaW1nRnVsbFZpZXcob2JqOiBhbnkpIHtcclxuICB0aGlzLnNlbGVjdEltYWdlQXJyYXkgPSBvYmo7XHJcbiAgdGhpcy5pbWFnZUZsb3cgPSB0cnVlO1xyXG4gIHRoaXMucmV2b3BzVHlwZVZhbHVlID0gZmFsc2U7XHJcbiAgdGhpcy5zZWxlY3RlZFR5cGUgPSBcIlwiO1xyXG4gIHRoaXMuc2VsZWN0ZWRSYWRpb1R5cGUgPSB1bmRlZmluZWQ7XHJcbiAgbGV0IGZpbHRlcmVkQnlUeXBlOiBhbnlbXSA9IFtdO1xyXG4gIGNvbnN0IHNlbGVjdGVkVHlwZSA9IG9iai5yZXZvcHNUeXBlPy50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICBpZiAoc2VsZWN0ZWRUeXBlID09PSBcImR1cGxpY2F0ZVwiICYmIEFycmF5LmlzQXJyYXkob2JqLmR1cGxpY2F0ZUltYWdlUGF0aCkpIHtcclxuICAgIC8vIPCflLkgQ2FzZSAxOiBEdXBsaWNhdGUgcGFyZW50IOKGkiBzaG93IG9ubHkgcGFyZW50ICsgaXRzIGNoaWxkcmVuXHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IG9iai5kdXBsaWNhdGVJbWFnZVBhdGgubWFwKChjaGlsZDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IG1hdGNoZWQgPSB0aGlzLm92ZXJhbGxBcnJheURhdGEuZmluZChcclxuICAgICAgICAoaW1nOiBhbnkpID0+IGltZy50ZW1wbGQgPT09IGNoaWxkLnRlbXBJZFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmNoaWxkLFxyXG4gICAgICAgIC4uLihtYXRjaGVkIHx8IHt9KSxcclxuICAgICAgICBwYXJlbnQ6IG9iai50ZW1wbGQsXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICBmaWx0ZXJlZEJ5VHlwZSA9IFtvYmosIC4uLmNoaWxkcmVuXTtcclxuXHJcbiAgICAvLyBjdXJyZW50IGluZGV4IGFsd2F5cyAwIChwYXJlbnQgZmlyc3QpXHJcbiAgICB0aGlzLmN1cnJlbnRJbWFnZUluZGV4ID0gMDtcclxuXHJcbiAgICAvLyByZW1haW5pbmcgPSBjaGlsZHJlbiBvbmx5XHJcbiAgICB0aGlzLnJlbWFpbmluZ0ltYWdlQXJyYXkgPSBjaGlsZHJlbjtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8g8J+UuSBDYXNlIDI6IE5vcm1hbCDihpIgZmlsdGVyIGJ5IHNhbWUgdHlwZVxyXG4gICAgZmlsdGVyZWRCeVR5cGUgPSB0aGlzLm92ZXJhbGxBcnJheURhdGEuZmlsdGVyKFxyXG4gICAgICAoaW1nOiBhbnkpID0+IGltZy5yZXZvcHNUeXBlPy50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZFR5cGVcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jdXJyZW50SW1hZ2VJbmRleCA9IGZpbHRlcmVkQnlUeXBlLmZpbmRJbmRleChcclxuICAgICAgKGltZzogYW55KSA9PiBpbWcudGVtcGxkID09PSBvYmoudGVtcGxkXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheSA9IGZpbHRlcmVkQnlUeXBlLmZpbHRlcihcclxuICAgICAgKF86IGFueSwgaTogbnVtYmVyKSA9PiBpICE9PSB0aGlzLmN1cnJlbnRJbWFnZUluZGV4XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8g4pyFIEhhbmRsZSBlZGl0IGJ1dHRvbiAvIHJhZGlvIGxvZ2ljXHJcbiAgaWYgKFxyXG4gICAgb2JqPy5yZXZvcHNUeXBlID09PSBcImR1cGxpY2F0ZVwiIHx8XHJcbiAgICBvYmo/LnJldm9wc1R5cGUgPT09IFwiZW1wbG95ZWVcIiB8fFxyXG4gICAgb2JqPy5yZXZvcHNUeXBlID09PSBcImhvdXNlLWtlZXBpbmdcIiB8fCBvYmo/LnJldm9wc1R5cGUgPT09XCJqdW5rXCJcclxuICApIHtcclxuICAgIGlmIChcclxuICAgICAgb2JqPy5yZXZvcHNUeXBlID09PSBcImR1cGxpY2F0ZVwiICYmXHJcbiAgICAgIG9iaj8uZHVwbGljYXRlSW1hZ2VQYXRoPy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5lZGl0QnRuU2hvdyA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICBvYmo/LnJldm9wc1R5cGUgPT09IFwiZW1wbG95ZWVcIiB8fFxyXG4gICAgICBvYmo/LnJldm9wc1R5cGUgPT09IFwiaG91c2Uta2VlcGluZ1wiIHx8IG9iaj8ucmV2b3BzVHlwZSA9PT1cImp1bmtcIlxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZWRpdEJ0blNob3cgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lZGl0QnRuU2hvdyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmV2b3BzVHlwZVZhbHVlID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRUeXBlID0gb2JqPy5yZXZvcHNUeXBlO1xyXG4gICAgdGhpcy5vblJhZGlvQ2hhbmdlKG9iaj8ucmV2b3BzVHlwZSk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuICBpbWdTd2FwKG9iajogYW55KSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RJbWFnZUFycmF5KSB7XHJcbiAgICAgIC8vIEZpbmQgd2hlcmUgdGhlIG5ldyBzZWxlY3RlZCBpbWFnZSBpcyBpbiB0aGUgbGlzdFxyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheS5maW5kSW5kZXgoXHJcbiAgICAgICAgKGltZzogYW55KSA9PiBpbWcudGVtcGxkID09PSBvYmoudGVtcGxkXHJcbiAgICAgICk7XHJcblxyXG4gICAgICAvLyBSZXBsYWNlIHNlbGVjdGVkSW1hZ2VBcnJheSBiYWNrIGludG8gaXRzIG9yaWdpbmFsIHBvc2l0aW9uXHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICB0aGlzLnJlbWFpbmluZ0ltYWdlQXJyYXlbaW5kZXhdID0gdGhpcy5zZWxlY3RJbWFnZUFycmF5O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGZhbGxiYWNrIGlmIG5vdCBmb3VuZFxyXG4gICAgICAgIHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheS5wdXNoKHRoaXMuc2VsZWN0SW1hZ2VBcnJheSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgc2VsZWN0ZWQgaW1hZ2VcclxuICAgIHRoaXMuc2VsZWN0SW1hZ2VBcnJheSA9IG9iajtcclxuXHJcbiAgICAvLyBSZW1vdmUgc2VsZWN0ZWQgZnJvbSByZW1haW5pbmcgbGlzdFxyXG4gICAgdGhpcy5yZW1haW5pbmdJbWFnZUFycmF5ID0gdGhpcy5yZW1haW5pbmdJbWFnZUFycmF5LmZpbHRlcihcclxuICAgICAgKGltZzogYW55KSA9PiBpbWcudGVtcGxkICE9PSBvYmoudGVtcGxkXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW1hZ2VGbG93ID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkVHlwZTogYW55ID0gXCJcIjsgLy8gZGVmYXVsdCBzZWxlY3RlZFxyXG4gIHNlbGVjdGVkUmFkaW9UeXBlOiBhbnk7XHJcbm9uUmFkaW9DaGFuZ2UodmFsOiBhbnkpIHtcclxuICB0aGlzLnNlbGVjdGVkUmFkaW9UeXBlID0gdmFsO1xyXG4gIHRoaXMuc2VsZWN0ZWREdXBsaWNhdGVJbWFnZXNMaXN0ID0gW107XHJcblxyXG4gIGNvbnN0IHR5cGUgPSAodmFsIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gIGlmICh0eXBlID09PSBcImR1cGxpY2F0ZVwiKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0SW1hZ2VBcnJheT8ucmV2b3BzVHlwZT8udG9Mb3dlckNhc2UoKSA9PT0gXCJkdXBsaWNhdGVcIiAmJlxyXG4gICAgICBBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0SW1hZ2VBcnJheT8uZHVwbGljYXRlSW1hZ2VQYXRoKSAmJlxyXG4gICAgICB0aGlzLnNlbGVjdEltYWdlQXJyYXkuZHVwbGljYXRlSW1hZ2VQYXRoLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICAvLyDwn5S5IENhc2UgMTogQWxyZWFkeSBpbiBkdXBsaWNhdGUgZmxvdyDihpIga2VlcCBjaGlsZHJlbiBzZXQgYnkgaW1nRnVsbFZpZXdcclxuICAgICAgdGhpcy5yZW1haW5pbmdJbWFnZUFycmF5ID0gdGhpcy5yZW1haW5pbmdJbWFnZUFycmF5Lm1hcCgoY2hpbGQ6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7IC4uLmNoaWxkLCBzZWxlY3RlZDogZmFsc2UsIGlzQ2hlY2tlZDogZmFsc2UgfTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyDwn5S5IENhc2UgMjogUmFkaW8gZHVwbGljYXRlIGZvciBub24tZHVwbGljYXRlIHBhcmVudCDihpIgc2hvdyBub24tdGFnZ2luZyBpbWFnZXNcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRUZW1wbGQgPSB0aGlzLnNlbGVjdEltYWdlQXJyYXk/LnRlbXBsZDtcclxuXHJcbiAgICAgIHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheSA9IHRoaXMub3ZlcmFsbEFycmF5RGF0YS5maWx0ZXIoKGltZzogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW1nVHlwZSA9IChpbWcucmV2b3BzVHlwZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHJldHVybiBpbWdUeXBlID09PSBcIm5vbi10YWdnaW5nXCIgJiYgaW1nLnRlbXBsZCAhPT0gc2VsZWN0ZWRUZW1wbGQ7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5yZW1haW5pbmdJbWFnZUFycmF5LmZvckVhY2goKGltZzogYW55KSA9PiB7XHJcbiAgICAgICAgaW1nLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgaW1nLmlzQ2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcblxyXG4gIHR5cGU6IGFueSA9IFwiZm9vdGZhbGxcIjtcclxuICBzZWxlY3RQbGFuVHJlbmRzKHR5cGU6IGFueSkge1xyXG4gICAgdGhpcy50eXBlID0gdHlwZTtcclxuXHJcbiAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gIH1cclxuICBhcHBseUZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmltYWdlRmxvdyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIENvbnZlcnQgdHlwZSB0byBsb3dlcmNhc2Ugc2FmZWx5XHJcbiAgICBjb25zdCBzZWxlY3RlZFR5cGUgPSB0aGlzLnR5cGU/LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkVHlwZSA9PT0gXCJmb290ZmFsbFwiKSB7XHJcbiAgICAgIC8vIEZvb3RmYWxsIHNob3dzIGFsbCBjdXJyZW50VGltZVJhbmdlRGF0YSAodGltZSByYW5nZSBiYXNlZClcclxuICAgICAgdGhpcy5pbWFnZXNBcnJheURhdGEgPSBbLi4udGhpcy5jdXJyZW50VGltZVJhbmdlRGF0YV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBGb3IgdGFnZ2VkIHR5cGVzIGxpa2UgJ2R1cGxpY2F0ZScsICdlbXBsb3llZScsICdob3VzZWtlZXBpbmcnXHJcbiAgICAgIHRoaXMuaW1hZ2VzQXJyYXlEYXRhID0gdGhpcy5vdmVyYWxsQXJyYXlEYXRhLmZpbHRlcihcclxuICAgICAgICAoaXRlbTogYW55KSA9PiBpdGVtLnJldm9wc1R5cGU/LnRvTG93ZXJDYXNlKCkgPT09IHNlbGVjdGVkVHlwZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gZWxzZSB7XHJcbiAgICAvLyAgIC8vIE5vbi10YWdnaW5nIG1lYW5zIG5vIHJldm9wc1R5cGUgLSBzaG93IGFsbCB1bm1hdGNoZWQgKG5vIHRhZylcclxuICAgIC8vICAgdGhpcy5pbWFnZXNBcnJheURhdGEgPSB0aGlzLmN1cnJlbnRUaW1lUmFuZ2VEYXRhLmZpbHRlcigoaXRlbTogYW55KSA9PlxyXG4gICAgLy8gICAgICFpdGVtLnJldm9wc1R5cGVcclxuICAgIC8vICAgKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBTZXQgbm9EYXRhIGJhc2VkIG9uIHJlc3VsdFxyXG4gICAgdGhpcy5ub0RhdGEgPSAhdGhpcy5pbWFnZXNBcnJheURhdGE/Lmxlbmd0aDtcclxuXHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgaGFuZGxlSW1hZ2VDbGljayhldnQ6IGFueSwgb2JqOiBhbnkpIHtcclxuICAgIC8vIE9ubHkgdG9nZ2xlIGNoZWNrYm94IGlmIHJhZGlvIGlzICdkdXBsaWNhdGUnIGFuZCBpbWFnZSBpcyBub3QgYWxyZWFkeSB0YWdnZWRcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvVHlwZSA9PT0gXCJkdXBsaWNhdGVcIiAmJlxyXG4gICAgICAhKG9iai5kdXBsaWNhdGVJbWFnZVBhdGg/Lmxlbmd0aCA+IDApXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5vbkltYWdlQ2hlY2tib3hDaGFuZ2UoZXZ0LCBvYmosIFwiZHVwbGljYXRlXCIpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUmFkaW9UeXBlICE9PSBcImR1cGxpY2F0ZVwiKSB7XHJcbiAgICAgIHRoaXMuaW1nU3dhcChvYmopOyAvLyBleGlzdGluZyBub24tZHVwbGljYXRlIGNsaWNrIGJlaGF2aW9yXHJcbiAgICB9XHJcbiAgfVxyXG4gIHNlbGVjdGVkRHVwbGljYXRlSW1hZ2VzTGlzdDogYW55ID0gW107XHJcblxyXG4gIG9uSW1hZ2VDaGVja2JveENoYW5nZShldnQ6IGFueSwgaW1nOiBhbnksIHR5cGU6IHN0cmluZykge1xyXG4gICAgaWYgKHR5cGUgPT09IFwiZHVwbGljYXRlXCIpIHtcclxuICAgICAgY29uc3QgdG90YWxJbWFnZXMgPSB0aGlzLm92ZXJhbGxBcnJheURhdGEubGVuZ3RoO1xyXG4gICAgICBjb25zdCBhbHJlYWR5VGFnZ2VkQ291bnQgPSB0aGlzLmNvdW50RGF0YT8uZHVwbGljYXRlIHx8IDA7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRvdGFsSW1hZ2VzKVxyXG4gICAgICAvLyBjb25zb2xlLmxvZyhhbHJlYWR5VGFnZ2VkQ291bnQpXHJcbiAgICAgIC8vIFRvdGFsIHRhZ2dhYmxlIGNvdW50ID0gYWxyZWFkeSB0YWdnZWQgKyBzZWxlY3RlZCBub3dcclxuICAgICAgY29uc3QgbWF4U2VsZWN0YWJsZSA9IE1hdGgucm91bmQodG90YWxJbWFnZXMgKiAwLjIpO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhtYXhTZWxlY3RhYmxlKVxyXG4gICAgICAvLyBDb3VudCBzZWxlY3RlZCBub3cgKGluIFVJKVxyXG4gICAgICBjb25zdCBjdXJyZW50bHlTZWxlY3RlZENvdW50ID0gdGhpcy5vdmVyYWxsQXJyYXlEYXRhLmZpbHRlcihcclxuICAgICAgICAoaXRlbTogYW55KSA9PiBpdGVtLnNlbGVjdGVkXHJcbiAgICAgICkubGVuZ3RoO1xyXG5cclxuICAgICAgY29uc3Qgd2lsbFNlbGVjdCA9ICFpbWcuc2VsZWN0ZWQ7XHJcblxyXG4gICAgICAvLyDim5QgQmxvY2sgc2VsZWN0aW9uIGlmIHRyeWluZyB0byBnbyBiZXlvbmQgMTAlIGNhcFxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgd2lsbFNlbGVjdCAmJlxyXG4gICAgICAgIGN1cnJlbnRseVNlbGVjdGVkQ291bnQgKyBhbHJlYWR5VGFnZ2VkQ291bnQgPj0gbWF4U2VsZWN0YWJsZVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnRvYXN0LmdldFdhcm5pbmdUb2FzdChcclxuICAgICAgICAgIGBZb3UgY2FuIHNlbGVjdCBvbmx5ICR7bWF4U2VsZWN0YWJsZX0gaW1hZ2VzICgke1xyXG4gICAgICAgICAgICB0aGlzLmdldFJ2cHNMaXN0Py5kYXRhPy5jb25maWc/LmR1cGxpY2F0ZSA/PyBcIjIwJVwiXHJcbiAgICAgICAgICB9IG9mIHRvdGFsIGZvb3RmYWxsKWBcclxuICAgICAgICApO1xyXG4gICAgICAgIGV2dC50YXJnZXQuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g4pyFIFByb2NlZWQgd2l0aCBzZWxlY3Rpb24gdG9nZ2xlXHJcbiAgICAgIGltZy5zZWxlY3RlZCA9ICFpbWcuc2VsZWN0ZWQ7XHJcbiAgICAgIGltZy5pc0NoZWNrZWQgPSBpbWcuc2VsZWN0ZWQ7XHJcblxyXG4gICAgICAvLyDinIUgQWx3YXlzIHJlYnVpbGQgdGhlIHNlbGVjdGVkIGxpc3RcclxuICAgICAgdGhpcy5zZWxlY3RlZER1cGxpY2F0ZUltYWdlc0xpc3QgPSB0aGlzLnJlbWFpbmluZ0ltYWdlQXJyYXlcclxuICAgICAgICAuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0uc2VsZWN0ZWQpXHJcbiAgICAgICAgLm1hcCgoaXRlbTogYW55KSA9PiAoe1xyXG4gICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgIHBhcmVudDogaXRlbS5wYXJlbnQgfHwgdGhpcy5zZWxlY3RJbWFnZUFycmF5Py50ZW1wbGQsXHJcbiAgICAgICAgICBpc0NoZWNrZWQ6IHRydWUsXHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgLy8gY29uc29sZS5sb2coJ+KchSBzZWxlY3RlZER1cGxpY2F0ZUltYWdlc0xpc3Q6JywgdGhpcy5zZWxlY3RlZER1cGxpY2F0ZUltYWdlc0xpc3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJWYWx1ZSgpIHtcclxuICAgIHRoaXMuc2F2ZShcIm5vbi10YWdnaW5nXCIpO1xyXG4gICAgLy8gdGhpcy5zdWJtaXRWYWx1ZSgnbm9uLXRhZ2dpbmcnKVxyXG4gIH1cclxuICBjYW5jZWwoKSB7XHJcbiAgICAvLyAxLiBDbGVhciBzZWxlY3RlZCBkdXBsaWNhdGUgaW1hZ2VzIGxpc3RcclxuICAgIHRoaXMuc2VsZWN0ZWREdXBsaWNhdGVJbWFnZXNMaXN0ID0gW107XHJcblxyXG4gICAgLy8gMi4gUmVzZXQgYWxsIGNoZWNrYm94ZXMgYW5kIHJhZGlvIGJ1dHRvbnMgaW4gb3ZlcmFsbCBpbWFnZSBsaXN0XHJcbiAgICB0aGlzLm92ZXJhbGxBcnJheURhdGEgPSB0aGlzLm92ZXJhbGxBcnJheURhdGEubWFwKChpbWc6IGFueSkgPT4gKHtcclxuICAgICAgLi4uaW1nLFxyXG4gICAgICBpc0NoZWNrZWQ6IGZhbHNlLFxyXG4gICAgICBzZWxlY3RlZDogZmFsc2UsIC8vIGFzc3VtaW5nICdzZWxlY3RlZCcgaXMgY2hlY2tib3ggYmluZFxyXG4gICAgICBwYXJlbnQ6IG51bGwsIC8vIHJlc2V0IHBhcmVudCBpZiB1c2VkXHJcbiAgICAgIC8vIEFkZCBvdGhlciBmbGFncyBoZXJlIGlmIG5lZWRlZFxyXG4gICAgfSkpO1xyXG5cclxuICAgIC8vIDMuIENsb3NlIGltYWdlIGZsb3cvZnVsbC12aWV3IGlmIG9wZW5cclxuICAgIHRoaXMuaW1hZ2VGbG93ID0gZmFsc2U7XHJcblxyXG4gICAgLy8gNC4gUmVzZXQgY3VycmVudGx5IHNlbGVjdGVkIGltYWdlXHJcbiAgICB0aGlzLnNlbGVjdEltYWdlQXJyYXkgPSBudWxsO1xyXG4gICAgdGhpcy5jdXJyZW50SW1hZ2VJbmRleCA9IDA7XHJcbiAgICB0aGlzLnJlbWFpbmluZ0ltYWdlQXJyYXkgPSBbXTtcclxuXHJcbiAgICAvLyA1LiAoT3B0aW9uYWwpIFJlc2V0IHJhZGlvIGJ1dHRvbnMg4oCUIGlmIHlvdSBoYXZlIGFueSBzcGVjaWZpYyBmbGFnXHJcbiAgICB0aGlzLnNlbGVjdGVkUmFkaW9UeXBlID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuICBwb3B1cFR5cGU6IGFueTtcclxuICBAVmlld0NoaWxkKFwiem9vbVBvcHVwXCIpIHpvb21Qb3B1cDogRWxlbWVudFJlZjtcclxuICBzYXZlKGNhdGVnb3J5OiBhbnkpIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLnpvb21Qb3B1cCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgc2l6ZTogXCJtZFwiLFxyXG4gICAgICBiYWNrZHJvcDogXCJzdGF0aWNcIiwgLy8gUHJldmVudCBjbG9zaW5nIG9uIG91dHNpZGUgY2xpY2tcclxuICAgICAga2V5Ym9hcmQ6IGZhbHNlLCAvLyBQcmV2ZW50IGNsb3Npbmcgb24gRVNDIGtleVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnBvcHVwVHlwZSA9IGNhdGVnb3J5O1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsU3VibWl0KCkge1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWREdXBsaWNhdGVJbWFnZXNMaXN0ID0gW107XHJcbiAgfVxyXG4gIHN1Ym1pdFZhbHVlKGNhdGVnb3J5OiBhbnkpIHtcclxuICAgIGxldCBkdXBsaWNhdGVJbWFnZXMgPSBbXTtcclxuXHJcbiAgICBpZiAoY2F0ZWdvcnkgPT09IFwiZHVwbGljYXRlXCIpIHtcclxuICAgICAgZHVwbGljYXRlSW1hZ2VzID0gdGhpcy5yZW1haW5pbmdJbWFnZUFycmF5XHJcbiAgICAgICAgLmZpbHRlcigoaW1nOiBhbnkpID0+IGltZy5zZWxlY3RlZCA9PT0gdHJ1ZSlcclxuICAgICAgICAubWFwKChpbWc6IGFueSkgPT4gKHtcclxuICAgICAgICAgIHRlbXBJZDogaW1nLnRlbXBsZCB8fCBpbWcudGVtcElkIHx8IFwiXCIsXHJcbiAgICAgICAgICB0aW1lUmFuZ2U6IGltZy50aW1lUmFuZ2UgfHwgXCJcIixcclxuICAgICAgICAgIGVudHJ5VGltZTogaW1nLmVudHJ5VGltZSB8fCBpbWcuZW50cnlUbWUgfHwgXCJcIixcclxuICAgICAgICAgIGV4aXRUaW1lOiBpbWcuZXhpdFRpbWUgfHwgXCJcIixcclxuICAgICAgICAgIGZpbGVQYXRoOiBpbWcuZmlsZVBhdGgsXHJcbiAgICAgICAgICByZXZvcHNUeXBlOiBcImR1cGxpY2F0ZVwiLFxyXG4gICAgICAgICAgaXNDaGVja2VkOiB0cnVlLFxyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbWcgPSB0aGlzLnNlbGVjdEltYWdlQXJyYXk7XHJcblxyXG4gICAgY29uc3Qgb2JqID0ge1xyXG4gICAgICBzdG9yZUlkOlxyXG4gICAgICAgIHRoaXMuc3RvcmVJZGFycmF5ICYmIHRoaXMuc3RvcmVJZGFycmF5Lmxlbmd0aCA+IDBcclxuICAgICAgICAgID8gdGhpcy5zdG9yZUlkYXJyYXlbMF1cclxuICAgICAgICAgIDogbnVsbCxcclxuICAgICAgZGF0ZVN0cmluZzogdGhpcy5mb2xkZXJEYXRlIHx8IFwiXCIsXHJcbiAgICAgIHRlbXBJZDogaW1nPy50ZW1wbGQgfHwgMCxcclxuICAgICAgcmV2b3BzVHlwZTogY2F0ZWdvcnksXHJcbiAgICAgIHRpbWVSYW5nZTogaW1nPy50aW1lUmFuZ2UgfHwgXCJcIixcclxuICAgICAgaXNDaGVja2VkOiB0cnVlLFxyXG4gICAgICBkdXBsaWNhdGVJbWFnZTogZHVwbGljYXRlSW1hZ2VzLFxyXG4gICAgICBwcm9jZXNzVHlwZTogaW1nPy5wcm9jZXNzVHlwZSB8fCBcImZvb3RmYWxsXCIsXHJcbiAgICAgIGVudHJ5VGltZTogaW1nPy5lbnRyeVRpbWUgfHwgaW1nPy5lbnRyeVRtZSB8fCBcIlwiLFxyXG4gICAgICBleGl0VGltZTogaW1nPy5leGl0VGltZSB8fCBcIlwiLFxyXG4gICAgICBmaWxlUGF0aDogaW1nPy5maWxlUGF0aCB8fCBcIlwiLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnJ2cHNTZXJ2aWNlXHJcbiAgICAgIC5nZXRSdnBzVGFnKG9iailcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldFN1Y2Nlc3NUb2FzdChcclxuICAgICAgICAgICAgICByZXM/Lm1lc3NhZ2UgfHwgXCJUaWNrZXQgdXBkYXRlZCBzdWNjZXNzZnVsbHlcIlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmltYWdlRmxvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmdldFJldm9wcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbFN1Ym1pdCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW9UeXBlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZSA9IFwiXCI7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gdXBkYXRlXCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgbXNnID1cclxuICAgICAgICAgICAgZXJyLmVycm9yPy5lcnJvciB8fCBlcnIuZXJyb3IgfHwgZXJyPy5tZXNzYWdlIHx8IFwiVW5rbm93biBlcnJvclwiO1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KG1zZyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBub0RhdGFNZXNzYWdlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICAgIGR1cGxpY2F0ZTogXCJObyBkdXBsaWNhdGVzIGZvdW5kXCIsXHJcbiAgICBlbXBsb3llZTogXCJObyBlbXBsb3llZS9zdGFmZiBmb3VuZFwiLFxyXG4gICAgXCJob3VzZS1rZWVwaW5nXCI6IFwiTm8gaG91c2Uga2VlcGluZyBmb3VuZFwiLFxyXG4gICAgXCJub24tdGFnZ2luZ1wiOiBcIk5vIG5vbi10YWdnaW5nIGZvdW5kXCIsXHJcbiAgICBqdW5rOiBcIk5vIGp1bmsgZm91bmRcIlxyXG4gIH07XHJcblxyXG4gIHRlbXBSYWlzZWRQYXlsb2FkOiBhbnkgPSBudWxsOyAvLyBjbGFzcy1sZXZlbCB2YXJpYWJsZSBmb3IgcHJldmlld1xyXG5cclxuICBwcmVwYXJlUmFpc2VkUGF5bG9hZChzaG93T25seSA9IGZhbHNlKTogYW55IHt9XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJyYWlzZWRQb3B1cFwiKSByYWlzZWRQb3B1cDogRWxlbWVudFJlZjtcclxuICBSYWlzZWQoKSB7XHJcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICAgIGRhdGVTdHJpbmc6IHRoaXMuZm9sZGVyRGF0ZSxcclxuICAgICAgc3RvcmVJZDogdGhpcy5zdG9yZUlkYXJyYXk/Lmxlbmd0aCA+IDAgPyB0aGlzLnN0b3JlSWRhcnJheVswXSA6IG51bGwsXHJcbiAgICAgIHRpY2tldE5hbWU6IFwiZm9vdGZhbGwtZGlyZWN0b3J5XCIsXHJcbiAgICAgIGZvb3RmYWxsQ291bnQ6IDAsXHJcbiAgICAgIGR1cGxpY2F0ZUNvdW50OiAwLFxyXG4gICAgICBlbXBsb3llZUNvdW50OiAwLFxyXG4gICAgICBob3VzZUtlZXBpbmdDb3VudDogMCxcclxuICAgICAganVua0NvdW50OjAsXHJcbiAgICAgIGNvbW1lbnRzOiB0aGlzLmNvbW1lbnRUZXh0IHx8IFwiXCIsXHJcbiAgICAgIGR1cGxpY2F0ZUltYWdlczogW10sXHJcbiAgICAgIGhvdXNlS2VlcGluZzogW10sXHJcbiAgICAgIGVtcGxveWVlOiBbXSxcclxuICAgICAganVuazogW10sXHJcbiAgICB9O1xyXG5cclxuICAgIGxldCB0b3RhbENoZWNrZWRDb3VudCA9IDA7XHJcblxyXG4gICAgdGhpcy5vdmVyYWxsQXJyYXlEYXRhLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB0eXBlID0gaXRlbS5yZXZvcHNUeXBlPy50b0xvd2VyQ2FzZSgpPy50cmltKCk7XHJcbiAgICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGl0ZW0uaXNDaGVja2VkID09PSB0cnVlO1xyXG5cclxuICAgICAgLy8g4pyFIENvdW50IG9ubHkgaWYgaXRlbSBpcyBjaGVja2VkIEFORCByZXZvcHNUeXBlIGlzICdub24tdGFnZ2luZydcclxuICAgICAgLy8gY29uc3QgaXNOb3RUYWdnZWQgPSB0eXBlID09PSAnbm9uLXRhZ2dpbmcnO1xyXG5cclxuICAgICAgLy8gaWYgKGlzTm90VGFnZ2VkKSB7XHJcbiAgICAgIC8vICAgdG90YWxDaGVja2VkQ291bnQrKztcclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgLy8gRFVQTElDQVRFIFRZUEVcclxuICAgICAgaWYgKHR5cGUgPT09IFwiZHVwbGljYXRlXCIgJiYgQXJyYXkuaXNBcnJheShpdGVtLmR1cGxpY2F0ZUltYWdlUGF0aCkpIHtcclxuICAgICAgICBjb25zdCBuZXN0ZWREYXRhID0gaXRlbS5kdXBsaWNhdGVJbWFnZVBhdGhcclxuICAgICAgICAgIC5maWx0ZXIoKGR1cDogYW55KSA9PiBkdXAuaXNDaGVja2VkKVxyXG4gICAgICAgICAgLm1hcCgoZHVwOiBhbnkpID0+ICh7XHJcbiAgICAgICAgICAgIHRlbXBJZDogZHVwLnRlbXBJZCB8fCBkdXAudGVtcGxkIHx8IFwiXCIsXHJcbiAgICAgICAgICAgIGZpbGVQYXRoOiBkdXAuZmlsZVBhdGgsXHJcbiAgICAgICAgICAgIGVudHJ5VGltZTogZHVwPy5lbnRyeVRpbWUgfHwgZHVwPy5lbnRyeVRtZSB8fCBcIlwiLFxyXG4gICAgICAgICAgICBleGl0VGltZTogZHVwLmV4aXRUaW1lLFxyXG4gICAgICAgICAgICB0aW1lUmFuZ2U6IGR1cC50aW1lUmFuZ2UsXHJcbiAgICAgICAgICAgIGlzQ2hlY2tlZDogZHVwLmlzQ2hlY2tlZCxcclxuICAgICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgaWYgKG5lc3RlZERhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgcGF5bG9hZC5kdXBsaWNhdGVJbWFnZXMucHVzaCh7XHJcbiAgICAgICAgICAgIHRlbXBJZDogaXRlbS50ZW1wbGQsXHJcbiAgICAgICAgICAgIGZpbGVQYXRoOiBpdGVtLmZpbGVQYXRoLFxyXG4gICAgICAgICAgICBlbnRyeVRpbWU6IGl0ZW0/LmVudHJ5VGltZSB8fCBpdGVtPy5lbnRyeVRtZSB8fCBcIlwiLFxyXG4gICAgICAgICAgICBleGl0VGltZTogaXRlbS5leGl0VGltZSxcclxuICAgICAgICAgICAgdGltZVJhbmdlOiBpdGVtLnRpbWVSYW5nZSxcclxuICAgICAgICAgICAgaXNDaGVja2VkOiBpdGVtLmlzQ2hlY2tlZCxcclxuICAgICAgICAgICAgZGF0YTogbmVzdGVkRGF0YSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHBheWxvYWQuZHVwbGljYXRlQ291bnQgKz0gbmVzdGVkRGF0YS5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBFTVBMT1lFRVxyXG4gICAgICBlbHNlIGlmICh0eXBlID09PSBcImVtcGxveWVlXCIgJiYgaXNDaGVja2VkKSB7XHJcbiAgICAgICAgcGF5bG9hZC5lbXBsb3llZS5wdXNoKHtcclxuICAgICAgICAgIHRlbXBJZDogaXRlbS50ZW1wbGQsXHJcbiAgICAgICAgICBmaWxlUGF0aDogaXRlbS5maWxlUGF0aCxcclxuICAgICAgICAgIGVudHJ5VGltZTogaXRlbT8uZW50cnlUaW1lIHx8IGl0ZW0/LmVudHJ5VG1lIHx8IFwiXCIsXHJcbiAgICAgICAgICBleGl0VGltZTogaXRlbS5leGl0VGltZSxcclxuICAgICAgICAgIHRpbWVSYW5nZTogaXRlbS50aW1lUmFuZ2UsXHJcbiAgICAgICAgICBpc0NoZWNrZWQ6IGl0ZW0uaXNDaGVja2VkLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBwYXlsb2FkLmVtcGxveWVlQ291bnQrKztcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSE9VU0VLRUVQSU5HXHJcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT09IFwiaG91c2Uta2VlcGluZ1wiICYmIGlzQ2hlY2tlZCkge1xyXG4gICAgICAgIHBheWxvYWQuaG91c2VLZWVwaW5nLnB1c2goe1xyXG4gICAgICAgICAgdGVtcElkOiBpdGVtLnRlbXBsZCxcclxuICAgICAgICAgIGZpbGVQYXRoOiBpdGVtLmZpbGVQYXRoLFxyXG4gICAgICAgICAgZW50cnlUaW1lOiBpdGVtPy5lbnRyeVRpbWUgfHwgaXRlbT8uZW50cnlUbWUgfHwgXCJcIixcclxuICAgICAgICAgIGV4aXRUaW1lOiBpdGVtLmV4aXRUaW1lLFxyXG4gICAgICAgICAgdGltZVJhbmdlOiBpdGVtLnRpbWVSYW5nZSxcclxuICAgICAgICAgIGlzQ2hlY2tlZDogaXRlbS5pc0NoZWNrZWQsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHBheWxvYWQuaG91c2VLZWVwaW5nQ291bnQrKztcclxuICAgICAgfSBcclxuICAgICAgZWxzZSBpZiAodHlwZSA9PT0gXCJqdW5rXCIgJiYgaXNDaGVja2VkKSB7XHJcbiAgICAgICAgcGF5bG9hZC5qdW5rLnB1c2goe1xyXG4gICAgICAgICAgdGVtcElkOiBpdGVtLnRlbXBsZCxcclxuICAgICAgICAgIGZpbGVQYXRoOiBpdGVtLmZpbGVQYXRoLFxyXG4gICAgICAgICAgZW50cnlUaW1lIDogaXRlbT8uZW50cnlUaW1lIHx8IGl0ZW0/LmVudHJ5VG1lIHx8IFwiXCIsXHJcbiAgICAgICAgICBleGl0VGltZSA6IGl0ZW0uZXhpdFRpbWUsXHJcbiAgICAgICAgICB0aW1lUmFuZ2UgOiBpdGVtLnRpbWVSYW5nZSxcclxuICAgICAgICAgIGlzQ2hlY2tlZCA6IGl0ZW0uaXNDaGVja2VkLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBwYXlsb2FkLmp1bmtDb3VudCsrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBwYXlsb2FkLmZvb3RmYWxsQ291bnQgPSB0aGlzLmNvdW50RGF0YT8uZm9vdGZhbGxDb3VudDtcclxuXHJcbiAgICAvLyDwn5GHIFJldHVybiBvciBhc3NpZ25cclxuXHJcbiAgICB0aGlzLnRlbXBSYWlzZWRQYXlsb2FkID0gcGF5bG9hZDtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMucmFpc2VkUG9wdXAsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIHNpemU6IFwibWRcIixcclxuICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsXHJcbiAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsUmFzaWVkKCkge1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZER1cGxpY2F0ZUltYWdlc0xpc3QgPSBbXTtcclxuICB9XHJcblxyXG4gIGNvbW1lbnRUZXh0OiBhbnk7XHJcbiAgZ2V0UmFpc2VkRGF0YTogYW55O1xyXG4gIHN1Ym1pdFJhaXNlZCgpIHtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLnRlbXBSYWlzZWRQYXlsb2FkOyAvLyBmcmVzaCBkYXRhIGZvciBBUElcclxuXHJcbiAgICB0aGlzLmdldFJhaXNlZERhdGEgPSBwYXlsb2FkO1xyXG5cclxuICAgIHRoaXMucnZwc1NlcnZpY2VcclxuICAgICAgLmdldENyZWF0ZVJhaXNlZFRhZyhwYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KFxyXG4gICAgICAgICAgICAgIHJlcz8ubWVzc2FnZSB8fCBcIlRpY2tldCB1cGRhdGVkIHN1Y2Nlc3NmdWxseVwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VGbG93ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UmV2b3BzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsUmFzaWVkKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpb1R5cGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlID0gXCJcIjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byB1cGRhdGVcIik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBtc2cgPVxyXG4gICAgICAgICAgICBlcnIuZXJyb3I/LmVycm9yIHx8XHJcbiAgICAgICAgICAgIGVyci5lcnJvciB8fFxyXG4gICAgICAgICAgICBlcnI/LmVycm9yPy5tZXNzYWdlIHx8XHJcbiAgICAgICAgICAgIGVyci5tZXNzYWdlIHx8XHJcbiAgICAgICAgICAgIFwiVW5rbm93biBlcnJvclwiO1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KG1zZyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBvbkltYWdlQ2hlY2tib3hDaGFuZ2UoaW1nOiBhbnksIHR5cGU6IHN0cmluZykge1xyXG4gIC8vICAgaWYgKHR5cGUgPT09ICdkdXBsaWNhdGUnKSB7XHJcbiAgLy8gICAgIC8vIENvdW50IG9ubHkgdmFsaWQgZHVwbGljYXRlIGltYWdlcyB3aGVyZSBgZHVwbGljYXRlSW1hZ2VQYXRoLmxlbmd0aCA9PT0gMGBcclxuICAvLyAgICAgY29uc3QgdG90YWxWYWxpZER1cGxpY2F0ZUltYWdlcyA9IHRoaXMub3ZlcmFsbEFycmF5RGF0YS5maWx0ZXIoXHJcbiAgLy8gICAgICAgKGl0ZW06IGFueSkgPT5cclxuICAvLyAgICAgICAgIGl0ZW0ucmV2b3BzVHlwZSA9PT0gJ2R1cGxpY2F0ZScgJiYgKCFpdGVtLmR1cGxpY2F0ZUltYWdlUGF0aCB8fCBpdGVtLmR1cGxpY2F0ZUltYWdlUGF0aC5sZW5ndGggPT09IDApXHJcbiAgLy8gICAgICkubGVuZ3RoO1xyXG5cclxuICAvLyAgICAgY29uc3QgbWF4QWxsb3dlZCA9IE1hdGguZmxvb3IodG90YWxWYWxpZER1cGxpY2F0ZUltYWdlcyAqIDAuMSk7IC8vIDEwJSBsaW1pdFxyXG5cclxuICAvLyAgICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IHRoaXMuc2VsZWN0ZWREdXBsaWNhdGVJbWFnZXNMaXN0LnNvbWUoXHJcbiAgLy8gICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbS50ZW1wbGQgPT09IGltZy50ZW1wbGRcclxuICAvLyAgICAgKTtcclxuXHJcbiAgLy8gICAgIGlmIChpbWcuc2VsZWN0ZWQpIHtcclxuICAvLyAgICAgICAvLyDinYwgUmVhY2hlZCBtYXggYWxsb3dlZCDigJQgYmxvY2sgaXRcclxuICAvLyAgICAgICBpZiAodGhpcy5zZWxlY3RlZER1cGxpY2F0ZUltYWdlc0xpc3QubGVuZ3RoID49IG1heEFsbG93ZWQpIHtcclxuICAvLyAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcclxuICAvLyAgICAgICAgICAgYE9ubHkgJHttYXhBbGxvd2VkfSBpbWFnZXMgY2FuIGJlIHNlbGVjdGVkIGFzIGR1cGxpY2F0ZSAoMTAlIG9mIHVudGFnZ2VkIGR1cGxpY2F0ZXMpLmBcclxuICAvLyAgICAgICAgICk7XHJcblxyXG4gIC8vICAgICAgICAgaW1nLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgLy8gICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMub3ZlcmFsbEFycmF5RGF0YS5maW5kSW5kZXgoKGl0ZW06IGFueSkgPT4gaXRlbS50ZW1wbGQgPT09IGltZy50ZW1wbGQpO1xyXG4gIC8vICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gIC8vICAgICAgICAgICB0aGlzLm92ZXJhbGxBcnJheURhdGFbaW5kZXhdLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgLy8gICAgICAgICB9XHJcblxyXG4gIC8vICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgLy8gICAgICAgICAgIGltZy5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gIC8vICAgICAgICAgfSk7XHJcblxyXG4gIC8vICAgICAgICAgcmV0dXJuO1xyXG4gIC8vICAgICAgIH1cclxuXHJcbiAgLy8gICAgICAgLy8g4pyFIEFkZCBpZiBub3QgYWxyZWFkeSBpbiBsaXN0XHJcbiAgLy8gICAgICAgaWYgKCFhbHJlYWR5RXhpc3RzKSB7XHJcbiAgLy8gICAgICAgICB0aGlzLnNlbGVjdGVkRHVwbGljYXRlSW1hZ2VzTGlzdC5wdXNoKHtcclxuICAvLyAgICAgICAgICAgLi4uaW1nLFxyXG4gIC8vICAgICAgICAgICBpc0NoZWNrZWQ6IHRydWUsXHJcbiAgLy8gICAgICAgICAgIHBhcmVudDogaW1nLnBhcmVudCB8fCBudWxsXHJcbiAgLy8gICAgICAgICB9KTtcclxuICAvLyAgICAgICB9XHJcbiAgLy8gICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgLy8g4p2MIFJlbW92YWwgY2FzZVxyXG4gIC8vICAgICAgIHRoaXMuc2VsZWN0ZWREdXBsaWNhdGVJbWFnZXNMaXN0ID0gdGhpcy5zZWxlY3RlZER1cGxpY2F0ZUltYWdlc0xpc3QuZmlsdGVyKFxyXG4gIC8vICAgICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbS50ZW1wbGQgIT09IGltZy50ZW1wbGRcclxuICAvLyAgICAgICApO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgLy8g4pqg77iPIENhbGwgdGhpcyB0byB1cGRhdGUgYnV0dG9uIGVuYWJsZSBzdGF0ZVxyXG4gIC8vICAgdGhpcy5jaGVja0R1cGxpY2F0ZVNhdmVFbmFibGUoKTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGR1cGxpY2F0ZVNhdmVFbmFibGVkID0gZmFsc2U7XHJcblxyXG4gIC8vIGNoZWNrRHVwbGljYXRlU2F2ZUVuYWJsZSgpIHtcclxuICAvLyAgIHRoaXMuZHVwbGljYXRlU2F2ZUVuYWJsZWQgPVxyXG4gIC8vICAgICB0aGlzLnNlbGVjdGVkUmFkaW9UeXBlID09PSAnZHVwbGljYXRlJyAmJiB0aGlzLnNlbGVjdGVkRHVwbGljYXRlSW1hZ2VzTGlzdC5sZW5ndGggPiAwO1xyXG4gIC8vIH1cclxuXHJcbiAgaXNNb2RhbE9wZW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKFwiaW1hZ2VQb3B1cFwiKSBpbWFnZVBvcHVwOiBFbGVtZW50UmVmO1xyXG4gIHNlbGVjdGVkSW1hZ2VBcnJheSh1cmw6IGFueSwgZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLmlzTW9kYWxPcGVuID0gdHJ1ZTtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLmltYWdlUG9wdXAsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIHNpemU6IFwibGdcIixcclxuICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsXHJcbiAgICAgIGtleWJvYXJkOiBmYWxzZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VJbWFnZSgpIHtcclxuICAgIHRoaXMuaXNNb2RhbE9wZW4gPSBmYWxzZTtcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICB9XHJcblxyXG4gIGNhbkVuYWJsZUJ1dHRvbigpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5jb3VudERhdGEgfHwgIXRoaXMuZm9sZGVyRGF0ZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgeyBkdXBsaWNhdGUsIGhvdXNla2VlcGluZywgZW1wbG95ZWUsIGp1bmsgfSA9IHRoaXMuY291bnREYXRhO1xyXG5cclxuICAgIC8vIENoZWNrIGNvdW50IGNvbmRpdGlvblxyXG4gICAgY29uc3QgaGFzQ291bnQgPSBkdXBsaWNhdGUgPiAwIHx8IGhvdXNla2VlcGluZyA+IDAgfHwgZW1wbG95ZWUgPiAwIHx8IGp1bmsgPiAwO1xyXG5cclxuICAgIC8vIENvbnZlcnQgZm9sZGVyRGF0ZSB0byBEYXRlXHJcbiAgICBjb25zdCBmb2xkZXIgPSBuZXcgRGF0ZSh0aGlzLmZvbGRlckRhdGUpO1xyXG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgIC8vIE5vcm1hbGl6ZSB0aW1lcyAocmVtb3ZlIGhvdXJzIGZvciBwcm9wZXIgZGF5IGNvbXBhcmlzb24pXHJcbiAgICBmb2xkZXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgICB0b2RheS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuXHJcbiAgICAvLyBDYWxjdWxhdGUgZGlmZmVyZW5jZSBpbiBkYXlzXHJcbiAgICBjb25zdCBkaWZmSW5UaW1lID0gdG9kYXkuZ2V0VGltZSgpIC0gZm9sZGVyLmdldFRpbWUoKTtcclxuICAgIGNvbnN0IGRpZmZJbkRheXMgPSBkaWZmSW5UaW1lIC8gKDEwMDAgKiAzNjAwICogMjQpO1xyXG5cclxuICAgIC8vIFdpdGhpbiBsYXN0IDcgZGF5cyDihpIgZGlmZiBiZXR3ZWVuIDAgYW5kIDdcclxuICAgIGNvbnN0IGlzV2l0aGluTGFzdDcgPSBkaWZmSW5EYXlzID49IDAgJiYgZGlmZkluRGF5cyA8PSA3O1xyXG5cclxuICAgIHJldHVybiBoYXNDb3VudCAmJiBpc1dpdGhpbkxhc3Q3O1xyXG4gIH1cclxuXHJcbiAgY3VycmVudEltYWdlSW5kZXg6IG51bWJlciA9IDA7XHJcbiAgZ2V0IGNhbk5hdmlnYXRlTGVmdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRJbWFnZUluZGV4ID4gMDtcclxuICB9XHJcblxyXG4gIGdldCBjYW5OYXZpZ2F0ZVJpZ2h0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEltYWdlSW5kZXggPCB0aGlzLmltYWdlc0FycmF5RGF0YS5sZW5ndGggLSAxO1xyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVJbWFnZShkaXJlY3Rpb246IFwibGVmdFwiIHwgXCJyaWdodFwiKSB7XHJcbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLmltYWdlc0FycmF5RGF0YS5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gXCJsZWZ0XCIgJiYgdGhpcy5jYW5OYXZpZ2F0ZUxlZnQpIHtcclxuICAgICAgdGhpcy5jdXJyZW50SW1hZ2VJbmRleC0tO1xyXG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IFwicmlnaHRcIiAmJiB0aGlzLmNhbk5hdmlnYXRlUmlnaHQpIHtcclxuICAgICAgdGhpcy5jdXJyZW50SW1hZ2VJbmRleCsrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBzZWxlY3RlZCBpbWFnZVxyXG4gICAgdGhpcy5zZWxlY3RJbWFnZUFycmF5ID0gdGhpcy5pbWFnZXNBcnJheURhdGFbdGhpcy5jdXJyZW50SW1hZ2VJbmRleF07XHJcblxyXG4gICAgLy8gVXBkYXRlIHJlbWFpbmluZyBpbWFnZXNcclxuICAgIHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheSA9IHRoaXMuaW1hZ2VzQXJyYXlEYXRhLmZpbHRlcihcclxuICAgICAgKF86IGFueSwgaTogYW55KSA9PiBpICE9PSB0aGlzLmN1cnJlbnRJbWFnZUluZGV4XHJcbiAgICApO1xyXG4gIH1cclxufSIsIjxkaXYgY2xhc3M9XCJjYXJkIG10LTNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBtdC0zIHB4LTAgYm9yZGVyLWJvdHRvbS0wXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1hY2NvcmRpb25cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1hY2NvcmRpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1haW5oZWFkaW5nIHBiLTAgY3VzdG9tLWFjY29yZGlvbi1oZWFkZXJcIiAoY2xpY2spPVwidG9nZ2xlQWNjb3JkaW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImltZy1kaXJlY1wiPkltYWdlIERpcmVjdG9yeTwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY2NvcmRpb24tYXJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRG93biBhcnJvdyBmb3IgY29sbGFwc2VkIHN0YXRlLCB1cCBhcnJvdyBmb3IgZXhwYW5kZWQgc3RhdGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWlzQWNjb3JkaW9uRXhwYW5kZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNlwiIGhlaWdodD1cIjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xIDFMNSA1TDkgMVwiIHN0cm9rZT1cIiMwNzE0MzdcIiBzdHJva2Utd2lkdGg9XCIxXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImlzQWNjb3JkaW9uRXhwYW5kZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNlwiIGhlaWdodD1cIjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xIDVMNSAxTDkgNVwiIHN0cm9rZT1cIiMxYjg0ZmZcIiBzdHJva2Utd2lkdGg9XCIxXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgIDwvZGl2PlxyXG4gICAgPHNlY3Rpb24gKm5nSWY9XCJpc0FjY29yZGlvbkV4cGFuZGVkXCI+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJmb2xkZXJWaWV3XCIgY2xhc3M9XCJjYXJkLWJvZHkgcHgtMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMSBtdC01IHRleHQtY2VudGVyXCIgKm5nRm9yPVwibGV0IG9iaiBvZiBkYXRlQXJyYXk7bGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJnZXRpbWFnZXMoaSxvYmopXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaSA9PT0gc2VsZWN0SW5kZXg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPjxzdmcgd2lkdGg9XCI1N1wiIGhlaWdodD1cIjU2XCIgdmlld0JveD1cIjAgMCA1NyA1NlwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIwLjE1NDI5N1wiIHdpZHRoPVwiNTZcIiBoZWlnaHQ9XCI1NlwiIHJ4PVwiMTJcIiBmaWxsPVwiIzMzQjVGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMzkuODIxNiAzNi4xNjY3QzM5LjgyMTYgMzYuNzg1NSAzOS41NzU4IDM3LjM3OSAzOS4xMzgyIDM3LjgxNjZDMzguNzAwNiAzOC4yNTQyIDM4LjEwNzEgMzguNSAzNy40ODgzIDM4LjVIMTguODIxNkMxOC4yMDI4IDM4LjUgMTcuNjA5MyAzOC4yNTQyIDE3LjE3MTcgMzcuODE2NkMxNi43MzQxIDM3LjM3OSAxNi40ODgzIDM2Ljc4NTUgMTYuNDg4MyAzNi4xNjY3VjE5LjgzMzNDMTYuNDg4MyAxOS4yMTQ1IDE2LjczNDEgMTguNjIxIDE3LjE3MTcgMTguMTgzNEMxNy42MDkzIDE3Ljc0NTggMTguMjAyOCAxNy41IDE4LjgyMTYgMTcuNUgyNC42NTQ5TDI2Ljk4ODMgMjFIMzcuNDg4M0MzOC4xMDcxIDIxIDM4LjcwMDYgMjEuMjQ1OCAzOS4xMzgyIDIxLjY4MzRDMzkuNTc1OCAyMi4xMjEgMzkuODIxNiAyMi43MTQ1IDM5LjgyMTYgMjMuMzMzM1YzNi4xNjY3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIyLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG10LTJcIj57e29iaiB8IGRhdGU6J2RkIE1NTSd9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaSAhPT0gc2VsZWN0SW5kZXg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPjxzdmcgd2lkdGg9XCI1N1wiIGhlaWdodD1cIjU2XCIgdmlld0JveD1cIjAgMCA1NyA1NlwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIwLjQ2Mjg5MVwiIHdpZHRoPVwiNTZcIiBoZWlnaHQ9XCI1NlwiIHJ4PVwiMTJcIiBmaWxsPVwiI0VBRjhGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNDAuMTMwMiAzNi4xNjY3QzQwLjEzMDIgMzYuNzg1NSAzOS44ODQ0IDM3LjM3OSAzOS40NDY4IDM3LjgxNjZDMzkuMDA5MiAzOC4yNTQyIDM4LjQxNTcgMzguNSAzNy43OTY5IDM4LjVIMTkuMTMwMkMxOC41MTE0IDM4LjUgMTcuOTE3OSAzOC4yNTQyIDE3LjQ4MDMgMzcuODE2NkMxNy4wNDI3IDM3LjM3OSAxNi43OTY5IDM2Ljc4NTUgMTYuNzk2OSAzNi4xNjY3VjE5LjgzMzNDMTYuNzk2OSAxOS4yMTQ1IDE3LjA0MjcgMTguNjIxIDE3LjQ4MDMgMTguMTgzNEMxNy45MTc5IDE3Ljc0NTggMTguNTExNCAxNy41IDE5LjEzMDIgMTcuNUgyNC45NjM1TDI3LjI5NjkgMjFIMzcuNzk2OUMzOC40MTU3IDIxIDM5LjAwOTIgMjEuMjQ1OCAzOS40NDY4IDIxLjY4MzRDMzkuODg0NCAyMi4xMjEgNDAuMTMwMiAyMi43MTQ1IDQwLjEzMDIgMjMuMzMzM1YzNi4xNjY3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwQTNGRlwiIHN0cm9rZS13aWR0aD1cIjIuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgbXQtMlwiPnt7b2JqIHwgZGF0ZTonZGQgTU1NJ319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFmb2xkZXJWaWV3XCIgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nSWY9XCIhaW1hZ2VGbG93XCI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc2hyaW5rLTAgbXQtMyBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWxpZ24taXRlbXMtY2VudGVyIHB4LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJiYWNrbmF2XCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJiYWNrVG9Gb290ZmFsbCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHZpZXdCb3g9XCIwIDAgNDAgNDBcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9kXzI1ODVfNzAzNilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjJcIiB5PVwiMVwiIHdpZHRoPVwiMzZcIiBoZWlnaHQ9XCIzNlwiIHJ4PVwiOFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMS41XCIgd2lkdGg9XCIzNVwiIGhlaWdodD1cIjM1XCIgcng9XCI3LjVcIiBzdHJva2U9XCIjRDBENUREXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yNS44MzI3IDE5SDE0LjE2Nk0xNC4xNjYgMTlMMTkuOTk5MyAyNC44MzM0TTE0LjE2NiAxOUwxOS45OTkzIDEzLjE2NjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWx0ZXIgaWQ9XCJmaWx0ZXIwX2RfMjU4NV83MDM2XCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJVbml0cz1cInVzZXJTcGFjZU9uVXNlXCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPVwic1JHQlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT1cIjBcIiByZXN1bHQ9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggaW49XCJTb3VyY2VBbHBoYVwiIHR5cGU9XCJtYXRyaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCIgcmVzdWx0PVwiaGFyZEFscGhhXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZU9mZnNldCBkeT1cIjFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj1cIjFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwLjA2Mjc0NTEgMCAwIDAgMCAwLjA5NDExNzYgMCAwIDAgMCAwLjE1Njg2MyAwIDAgMCAwLjA1IDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluMj1cIkJhY2tncm91bmRJbWFnZUZpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiZWZmZWN0MV9kcm9wU2hhZG93XzI1ODVfNzAzNlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW49XCJTb3VyY2VHcmFwaGljXCIgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93XzI1ODVfNzAzNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwic2hhcGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImltZy1kaXJlYyBtcy0yIG10LTFcIj57e2ZvbGRlckRhdGUgfCBkYXRlOidkZCBNTU0sIHl5eXknfX0gIFxyXG4gICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtd2FybmluZyBteC0yXCIgKm5nSWY9XCIhZ2V0VGlja2V0U3RhdHVzZXMoKS5pbmNsdWRlcygnY2xvc2VkJykgJiYgZ2V0VGlja2V0U3RhdHVzZXMoKS5pbmNsdWRlcygnb3BlbicpXCI+XHJcbiAgVGlja2V0IFJhaXNlZFxyXG48L3NwYW4+XHJcbjxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtc3VjY2VzcyBteC0yXCIgKm5nSWY9XCJnZXRUaWNrZXRTdGF0dXNlcygpLmluY2x1ZGVzKCdjbG9zZWQnKVwiPlRpY2tldCBDbG9zZWQ8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFnZXRUaWNrZXRTdGF0dXNlcygpLmluY2x1ZGVzKCdvcGVuJykgJiYgIWdldFRpY2tldFN0YXR1c2VzKCkuaW5jbHVkZXMoJ2Nsb3NlZCcpXCIgIGNsYXNzPVwibXMtYXV0byB0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICBcclxuPGJ1dHRvbiBcclxuICBbZGlzYWJsZWRdPVwiIWNhbkVuYWJsZUJ1dHRvbigpXCIgXHJcbiAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBcclxuICB0eXBlPVwiYnV0dG9uXCIgXHJcbiAgKGNsaWNrKT1cIlJhaXNlZCgpXCI+XHJcbiAgUmFpc2UgdGlja2V0IGZvciBmb290ZmFsbFxyXG48L2J1dHRvbj5cclxuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFmb2xkZXJWaWV3XCIgY2xhc3M9XCJuYXYtZ3JvdXAgYmctd2hpdGUgYm9yZGVyLTEgYnRuLWdyb3VwIHctYXV0byBteS0yXCI+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCIhKGNvdW50RGF0YT8ubGVuZ3RoID4gMClcIj5cclxuXHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHB4LTYgcHktM1wiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwidHlwZSA9PT0gJ2Zvb3RmYWxsJyA/ICdhY3RpdmVQbGFuQnRuJyA6ICdpbmFjdGl2ZVBsYW5CdG4nXCJcclxuICAgICAgICAoY2xpY2spPVwic2VsZWN0UGxhblRyZW5kcygnZm9vdGZhbGwnKVwiPlxyXG4gICAgICAgIFRvdGFsIEZvb3RmYWxsXHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwidHlwZSA9PT0gJ2Zvb3RmYWxsJyA/ICdhY3RpdmVQbGFuQnRuIGJhZGdlIGJhZGdlLWFjdGl2ZScgOiAnaW5hY3RpdmVQbGFuQnRuIGJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHQnXCI+XHJcbiAgICAgICAgICAgIHt7IGNvdW50RGF0YT8uZm9vdGZhbGxDb3VudCB8fCAwIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBweC02IHB5LTNcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInR5cGUgPT09ICdub24tdGFnZ2luZycgPyAnYWN0aXZlUGxhbkJ0bicgOiAnaW5hY3RpdmVQbGFuQnRuJ1wiXHJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFBsYW5UcmVuZHMoJ25vbi10YWdnaW5nJylcIj5cclxuICAgICAgICBOb24tdGFnc1xyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInR5cGUgPT09ICdub24tdGFnZ2luZycgPyAnYWN0aXZlUGxhbkJ0biBiYWRnZSBiYWRnZS1hY3RpdmUnIDogJ2luYWN0aXZlUGxhbkJ0biBiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0J1wiPlxyXG4gICAgICAgICAgICB7eyBjb3VudERhdGE/Lm5vblRhZ3MgfHwgMCB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgcHgtNiBweS0zXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ0eXBlID09PSAnZHVwbGljYXRlJyA/ICdhY3RpdmVQbGFuQnRuJyA6ICdpbmFjdGl2ZVBsYW5CdG4nXCJcclxuICAgICAgICAoY2xpY2spPVwic2VsZWN0UGxhblRyZW5kcygnZHVwbGljYXRlJylcIj5cclxuICAgICAgICBEdXBsaWNhdGVkXHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwidHlwZSA9PT0gJ2R1cGxpY2F0ZScgPyAnYWN0aXZlUGxhbkJ0biBiYWRnZSBiYWRnZS1hY3RpdmUnIDogJ2luYWN0aXZlUGxhbkJ0biBiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0J1wiPlxyXG4gICAgICAgICAgICB7eyBjb3VudERhdGE/LmR1cGxpY2F0ZSB8fCAwIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBweC02IHB5LTNcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInR5cGUgPT09ICdlbXBsb3llZScgPyAnYWN0aXZlUGxhbkJ0bicgOiAnaW5hY3RpdmVQbGFuQnRuJ1wiXHJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFBsYW5UcmVuZHMoJ2VtcGxveWVlJylcIj5cclxuICAgICAgICBFbXBsb3llZS9TdGFmZlxyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInR5cGUgPT09ICdlbXBsb3llZScgPyAnYWN0aXZlUGxhbkJ0biBiYWRnZSBiYWRnZS1hY3RpdmUnIDogJ2luYWN0aXZlUGxhbkJ0biBiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0J1wiPlxyXG4gICAgICAgICAgICB7eyBjb3VudERhdGE/LmVtcGxveWVlIHx8IDAgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgcHgtNiBweS0zXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ0eXBlID09PSAnanVuaycgPyAnYWN0aXZlUGxhbkJ0bicgOiAnaW5hY3RpdmVQbGFuQnRuJ1wiXHJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFBsYW5UcmVuZHMoJ2p1bmsnKVwiPlxyXG4gICAgSnVua1xyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInR5cGUgPT09ICdqdW5rJyA/ICdiYWRnZSBiYWRnZS1hY3RpdmUgYWN0aXZlUGxhbkJ0bicgOiAnIGJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHQgaW5hY3RpdmVQbGFuQnRuJ1wiPlxyXG4gICAgICAgICAgICB7eyBjb3VudERhdGE/Lmp1bmsgfHwgMCB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBweC02IHB5LTNcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInR5cGUgPT09ICdob3VzZS1rZWVwaW5nJyA/ICdhY3RpdmVQbGFuQnRuJyA6ICdpbmFjdGl2ZVBsYW5CdG4nXCJcclxuICAgICAgICAoY2xpY2spPVwic2VsZWN0UGxhblRyZW5kcygnaG91c2Uta2VlcGluZycpXCI+XHJcbiAgICBIb3VzZSBLZWVwaW5nXHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwidHlwZSA9PT0gJ2hvdXNlLWtlZXBpbmcnID8gJ2JhZGdlIGJhZGdlLWFjdGl2ZSBhY3RpdmVQbGFuQnRuJyA6ICcgYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdCBpbmFjdGl2ZVBsYW5CdG4nXCI+XHJcbiAgICAgICAgICAgIHt7IGNvdW50RGF0YT8uaG91c2VrZWVwaW5nIHx8IDAgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgXHJcblxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCIhaW1hZ2VGbG93XCI+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInR5cGUgPT09ICdmb290ZmFsbCdcIiBjbGFzcz1cImQtZmxleCBtdC0yIG1iLTIgdy0xMDAgb3ZlcmZsb3cteCBweC0wXCI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHRleHQtbm93cmFwXCIgKm5nRm9yPVwibGV0IG9iaiBvZiBvYmplY3RzQXJyYXlcIj5cclxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzMSBuYXYtbGluZS10YWJzIGJvcmRlci10cmFuc3BhcmVudCBmbGV4LW5vd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJzZWxlY3RlZFRpbWVzKG9iai50aW1lUmFuZ2UpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGltZSA9PT0gb2JqPy50aW1lUmFuZ2UgPyAnYWN0aXZlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbm8tYm9yZGVyIG14LTMgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvYmo/LnRpbWVSYW5nZX19PHNwYW4gY2xhc3M9XCJteC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWxlY3RlZFRpbWUgPT09IG9iaj8udGltZVJhbmdlID8gJ2JhZGdlLW51bS1wcmltYXJ5JyA6J2JhZGdlLW51bS1tdXRlZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvYmo/LmNvdW50ID8gb2JqPy5jb3VudCA6IDAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJyb3cgbG9hZGVyICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibm9EYXRhXCIgY2xhc3M9XCJyb3dcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbWItM1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uIFwiIHN0eWxlPVwibWFyZ2luOiA2NHB4O2JvcmRlci1yYWRpdXM6IDhweDtcclxuYmFja2dyb3VuZDogdmFyKC0tR3JheS01MCwgI0Y5RkFGQik7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjk0XCIgaGVpZ2h0PVwiOTRcIiB2aWV3Qm94PVwiMCAwIDk0IDk0XCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI3XCIgeT1cIjdcIiB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiByeD1cIjQwXCIgZmlsbD1cIiNEQUYxRkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiN1wiIHk9XCI3XCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgcng9XCI0MFwiIHN0cm9rZT1cIiNFQUY4RkZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMTMuMzMzM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTM1LjMzMiA1MS45OTk5SDMzLjY2NTRDMzIuNzgxMyA1MS45OTk5IDMxLjkzMzUgNTEuNjQ4NyAzMS4zMDgzIDUxLjAyMzZDMzAuNjgzMiA1MC4zOTg1IDMwLjMzMiA0OS41NTA2IDMwLjMzMiA0OC42NjY2VjMzLjY2NjZDMzAuMzMyIDMyLjc4MjUgMzAuNjgzMiAzMS45MzQ3IDMxLjMwODMgMzEuMzA5NkMzMS45MzM1IDMwLjY4NDQgMzIuNzgxMyAzMC4zMzMzIDMzLjY2NTQgMzAuMzMzM0g0OC42NjU0QzQ5LjU0OTQgMzAuMzMzMyA1MC4zOTczIDMwLjY4NDQgNTEuMDIyNCAzMS4zMDk2QzUxLjY0NzUgMzEuOTM0NyA1MS45OTg3IDMyLjc4MjUgNTEuOTk4NyAzMy42NjY2VjM1LjMzMzNNNDUuMzMyIDQxLjk5OTlINjAuMzMyQzYyLjE3MyA0MS45OTk5IDYzLjY2NTQgNDMuNDkyMyA2My42NjU0IDQ1LjMzMzNWNjAuMzMzM0M2My42NjU0IDYyLjE3NDIgNjIuMTczIDYzLjY2NjYgNjAuMzMyIDYzLjY2NjZINDUuMzMyQzQzLjQ5MTEgNjMuNjY2NiA0MS45OTg3IDYyLjE3NDIgNDEuOTk4NyA2MC4zMzMzVjQ1LjMzMzNDNDEuOTk4NyA0My40OTIzIDQzLjQ5MTEgNDEuOTk5OSA0NS4zMzIgNDEuOTk5OVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwQTNGRlwiIHN0cm9rZS13aWR0aD1cIjRcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhLXRpdGxlIG15LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbm9EYXRhTWVzc2FnZXNbdHlwZT8udG9Mb3dlckNhc2UoKV0gfHwgJ05vIGRhdGEgZm91bmQnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBweC0wIGltZy10cmFmZmljIGNvbnRhaW4gaGlnaC00MDBweCBzY3JvbGwteVwiICpuZ0lmPVwiIW5vRGF0YSAmJiAhbG9hZGluZ1wiPlxyXG4gICAgICAgPG5nLWNvbnRhaW5lclxyXG5cclxuKm5nRm9yPVwibGV0IG9iaiBvZiBpbWFnZXNBcnJheURhdGFcIlxyXG4+XHJcbjxkaXYgICpuZ0lmPVwidHlwZSAhPT0gJ2R1cGxpY2F0ZScgfHwgKHR5cGUgPT09ICdkdXBsaWNhdGUnJiYgb2JqLnJldm9wc1R5cGUgPT09ICdkdXBsaWNhdGUnICYmIG9iai5kdXBsaWNhdGVJbWFnZVBhdGg/Lmxlbmd0aCA+IDApXCIgIGNsYXNzPVwiY29sLW1kLTMgYm9yZGVyLWdyYXkgbXgtMiBwLTIgbXQtNVwiPlxyXG48IS0tIENvbmRpdGlvbjogT25seSBzaG93IGlmIG5vdCBkdXBsaWNhdGUgT1IgZHVwbGljYXRlIHdpdGggbm9uLWVtcHR5IGR1cGxpY2F0ZUltYWdlUGF0aCAtLT5cclxuPG5nLWNvbnRhaW5lciA+XHJcbjxpbWdcclxuY2xhc3M9XCJpbWctc3JjIGN1cnNvci1wb2ludGVyXCJcclxuW3NyY109XCJpbWFnZVVybCArIG9iaj8uZmlsZVBhdGhcIlxyXG4oZXJyb3IpPVwib2JqLmZpbGVQYXRoID0gbnVsbFwiXHJcbmFsdD1cIlwiXHJcbihjbGljayk9XCJpbWdGdWxsVmlldyhvYmopXCJcclxuLz5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIW9iaj8uZmlsZVBhdGhcIiBjbGFzcz1cIm5vLXByZXZpZXdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyM1wiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMyAyMFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIkdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD1cIlZlY3RvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjUgNi4zMjIyN0g2LjUxTTE2LjI1IDkuMzIyMjdIMjEuNUwxOCAxNi4zMjIzTDE0LjkxIDEyLjAwMjNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9XCJWZWN0b3JfMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xLjUgMTYuMzIyOUg1LjI2QzUuNjMyNzMgMTYuMzI1NSA1Ljk5ODc3IDE2LjIyMzkgNi4zMTY4MiAxNi4wMjk1QzYuNjM0ODcgMTUuODM1MiA2Ljg5MjI4IDE1LjU1NTggNy4wNiAxNS4yMjI5TDguNSAxMi4zMjI5TTEuNSAxOC4zMjI5VjE0LjMyMjlNMTcuNSA2LjgyMjkxTDEzLjUgMTQuODIyOUwzLjExIDkuNjIyOTFDMi40MjAzMyA5LjI3NTUzIDEuODk2MzUgOC42NjkxIDEuNjUyNzIgNy45MzYzMkMxLjQwOTA5IDcuMjAzNTQgMS40NjU2NCA2LjQwNDEgMS44MSA1LjcxMjkxTDMuMTkgMi45MjI5MUMzLjM2MiAyLjU4MDE0IDMuNTk5ODQgMi4yNzQ2IDMuODg5OTQgMi4wMjM3NUM0LjE4MDAzIDEuNzcyOSA0LjUxNjcgMS41ODE2NSA0Ljg4MDcyIDEuNDYwOTNDNS4yNDQ3NCAxLjM0MDIxIDUuNjI4OTcgMS4yOTIzOSA2LjAxMTQ3IDEuMzIwMThDNi4zOTM5OCAxLjM0Nzk3IDYuNzY3MjYgMS40NTA4NCA3LjExIDEuNjIyOTFMMTcuNSA2LjgyMjkxWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRlciBtYi01IHRleHQtY2VudGVyXCI+UHJldmlldyBub3QgYXZhaWxhYmxlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZXNjcmlwdGlvbiBtYi01IHRleHQtY2VudGVyXCI+VGhlIHNlbGVjdGVkIGNhbWVyYSBpcyBub3QgYXZhaWxhYmxlIGF0IHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIG1vbWVudC48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidHlwZSAhPT0gJ2R1cGxpY2F0ZScgfHwgKHR5cGUgPT09ICdkdXBsaWNhdGUnJiYgb2JqLnJldm9wc1R5cGUgPT09ICdkdXBsaWNhdGUnICYmIG9iai5kdXBsaWNhdGVJbWFnZVBhdGg/Lmxlbmd0aCA+IDApXCIgY2xhc3M9XCJyb3cgcHgtMiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktMiBpbWctZG9jLXRpbWVcIj5UYW5nbyBJRCA6IHt7b2JqPy50ZW1wbGR9fSA8c3BhbiAqbmdJZj1cIih0eXBlID09PSAnZHVwbGljYXRlJyYmIG9iai5yZXZvcHNUeXBlID09PSAnZHVwbGljYXRlJyAmJiBvYmouZHVwbGljYXRlSW1hZ2VQYXRoPy5sZW5ndGggPiAwKVwiIGNsYXNzPVwibXgtMiBiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XCI+e3tvYmouZHVwbGljYXRlSW1hZ2VQYXRoPy5sZW5ndGh9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmo/LnN0YXR1cyA9PT0nYXBwcm92ZWQnXCIgY2xhc3M9XCJtcy0yXCI+PHN2ZyBzdHlsZT1cIndpZHRoOiAyMHB4O1xyXG4gICAgaGVpZ2h0OiAyMHB4O1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTFcIiB2aWV3Qm94PVwiMCAwIDEwIDExXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB5PVwiMC41XCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgcng9XCI1XCIgZmlsbD1cIiNEMUZBREZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjEyMjIgMy41NzkxOUw0LjEzODg3IDYuNDU4MzZMMy4zNDcyIDUuNjEyNTNDMy4yMDEzNyA1LjQ3NTAzIDIuOTcyMiA1LjQ2NjY5IDIuODA1NTMgNS41ODMzNkMyLjY0MzAzIDUuNzA0MTkgMi41OTcyIDUuOTE2NjkgMi42OTcyIDYuMDg3NTNMMy42MzQ3IDcuNjEyNTNDMy43MjYzNyA3Ljc1NDE5IDMuODg0NyA3Ljg0MTY5IDQuMDYzODcgNy44NDE2OUM0LjIzNDcgNy44NDE2OSA0LjM5NzIgNy43NTQxOSA0LjQ4ODg3IDcuNjEyNTNDNC42Mzg4NyA3LjQxNjY5IDcuNTAxMzcgNC4wMDQxOSA3LjUwMTM3IDQuMDA0MTlDNy44NzYzNyAzLjYyMDg2IDcuNDIyMiAzLjI4MzM2IDcuMTIyMiAzLjU3NTAzVjMuNTc5MTlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxMkI3NkFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmo/LnN0YXR1cyA9PT0ncmVqZWN0ZWQnXCIgY2xhc3M9XCJtcy0yXCI+PHN2ZyBzdHlsZT1cIndpZHRoOiAyMHB4O1xyXG4gICAgaGVpZ2h0OiAyMHB4O1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEzXCIgaGVpZ2h0PVwiMTNcIiB2aWV3Qm94PVwiMCAwIDEzIDEzXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE0MjhfNTk0ODQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTQuNTI5NjEgMS41SDguNjY5NjFMMTEuNTk5NiA0LjQzVjguNTdMOC42Njk2MSAxMS41SDQuNTI5NjFMMS41OTk2MSA4LjU3VjQuNDNMNC41Mjk2MSAxLjVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkVFNEUyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wOTk2MSA1TDUuMDk5NjEgOE01LjA5OTYxIDVMOC4wOTk2MSA4TTQuNTI5NjEgMS41SDguNjY5NjFMMTEuNTk5NiA0LjQzVjguNTdMOC42Njk2MSAxMS41SDQuNTI5NjFMMS41OTk2MSA4LjU3VjQuNDNMNC41Mjk2MSAxLjVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzE0MjhfNTk0ODRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAuNTk5NjA5IDAuNSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZy1kb2MtdmFsdWVcIj5FbnRyeSBUaW1lIDoge3tvYmo/LmVudHJ5VG1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01IHRleHQtZW5kIHB5LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9iaj8ucmV2b3BzVHlwZSA9PT0nbm9uLXRhZ2dpbmcnXCIgbmdiVG9vbHRpcD1cIllldCB0byB0YWcgdGhlIGN1c3RvbWVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTlcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE5IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjAyMzQ0IDUuNjI1SDYuMDMwOTRNMTYuMjE1OSAxMC40MzI1TDEwLjgzODQgMTUuODFDMTAuNjk5MSAxNS45NDk1IDEwLjUzMzcgMTYuMDYwMSAxMC4zNTE2IDE2LjEzNTZDMTAuMTY5NSAxNi4yMTExIDkuOTc0MzEgMTYuMjQ5OSA5Ljc3NzE5IDE2LjI0OTlDOS41ODAwNiAxNi4yNDk5IDkuMzg0ODcgMTYuMjExMSA5LjIwMjc4IDE2LjEzNTZDOS4wMjA2OCAxNi4wNjAxIDguODU1MjUgMTUuOTQ5NSA4LjcxNTk0IDE1LjgxTDIuMjczNDQgOS4zNzVWMS44NzVIOS43NzM0NEwxNi4yMTU5IDguMzE3NUMxNi40OTUzIDguNTk4NTQgMTYuNjUyMSA4Ljk3ODcyIDE2LjY1MjEgOS4zNzVDMTYuNjUyMSA5Ljc3MTI4IDE2LjQ5NTMgMTAuMTUxNSAxNi4yMTU5IDEwLjQzMjVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqPy5yZXZvcHNUeXBlID09PSdkdXBsaWNhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIxXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjAxMl85NDYzNSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTQuMTY3OTcgMTMuMTg1OUgzLjMzNDY0QzIuODkyNjEgMTMuMTg1OSAyLjQ2ODY4IDEzLjAxMDMgMi4xNTYxMiAxMi42OTc3QzEuODQzNTYgMTIuMzg1MiAxLjY2Nzk3IDExLjk2MTIgMS42Njc5NyAxMS41MTkyVjQuMDE5MjFDMS42Njc5NyAzLjU3NzE4IDEuODQzNTYgMy4xNTMyNiAyLjE1NjEyIDIuODQwNjlDMi40Njg2OCAyLjUyODEzIDIuODkyNjEgMi4zNTI1NCAzLjMzNDY0IDIuMzUyNTRIMTAuODM0NkMxMS4yNzY3IDIuMzUyNTQgMTEuNzAwNiAyLjUyODEzIDEyLjAxMzEgMi44NDA2OUMxMi4zMjU3IDMuMTUzMjYgMTIuNTAxMyAzLjU3NzE4IDEyLjUwMTMgNC4wMTkyMVY0Ljg1MjU0TTkuMTY3OTcgOC4xODU4N0gxNi42NjhDMTcuNTg4NCA4LjE4NTg3IDE4LjMzNDYgOC45MzIwNiAxOC4zMzQ2IDkuODUyNTRWMTcuMzUyNUMxOC4zMzQ2IDE4LjI3MyAxNy41ODg0IDE5LjAxOTIgMTYuNjY4IDE5LjAxOTJIOS4xNjc5N0M4LjI0NzQ5IDE5LjAxOTIgNy41MDEzIDE4LjI3MyA3LjUwMTMgMTcuMzUyNVY5Ljg1MjU0QzcuNTAxMyA4LjkzMjA2IDguMjQ3NDkgOC4xODU4NyA5LjE2Nzk3IDguMTg1ODdaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjAxMl85NDYzNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmo/LnJldm9wc1R5cGUgPT09J2VtcGxveWVlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMVwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIwMTJfOTQ2MzkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNC4xNjU0IDE4LjE4NlYxNi41MTk0QzE0LjE2NTQgMTUuNjM1MyAxMy44MTQyIDE0Ljc4NzUgMTMuMTg5MSAxNC4xNjIzQzEyLjU2MzkgMTMuNTM3MiAxMS43MTYxIDEzLjE4NiAxMC44MzIgMTMuMTg2SDQuMTY1MzZDMy4yODEzMSAxMy4xODYgMi40MzM0NiAxMy41MzcyIDEuODA4MzQgMTQuMTYyM0MxLjE4MzIyIDE0Ljc4NzUgMC44MzIwMzEgMTUuNjM1MyAwLjgzMjAzMSAxNi41MTk0VjE4LjE4Nk0xOS4xNjU0IDE4LjE4NlYxNi41MTk0QzE5LjE2NDggMTUuNzgwOCAxOC45MTkgMTUuMDYzMyAxOC40NjY1IDE0LjQ3OTZDMTguMDE0IDEzLjg5NTkgMTcuMzgwNSAxMy40NzkgMTYuNjY1NCAxMy4yOTQ0TTEzLjMzMiAzLjI5NDM3QzE0LjA0OSAzLjQ3Nzk1IDE0LjY4NDYgMy44OTQ5NSAxNS4xMzg0IDQuNDc5NjNDMTUuNTkyMiA1LjA2NDMgMTUuODM4NiA1Ljc4MzM5IDE1LjgzODYgNi41MjM1NEMxNS44Mzg2IDcuMjYzNjggMTUuNTkyMiA3Ljk4Mjc3IDE1LjEzODQgOC41Njc0NEMxNC42ODQ2IDkuMTUyMTIgMTQuMDQ5IDkuNTY5MTIgMTMuMzMyIDkuNzUyN00xMC44MzIgNi41MTkzN0MxMC44MzIgOC4zNjAzMiA5LjMzOTY1IDkuODUyNyA3LjQ5ODcgOS44NTI3QzUuNjU3NzUgOS44NTI3IDQuMTY1MzYgOC4zNjAzMiA0LjE2NTM2IDYuNTE5MzdDNC4xNjUzNiA0LjY3ODQyIDUuNjU3NzUgMy4xODYwNCA3LjQ5ODcgMy4xODYwNEM5LjMzOTY1IDMuMTg2MDQgMTAuODMyIDQuNjc4NDIgMTAuODMyIDYuNTE5MzdaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjAxMl85NDYzOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmo/LnJldm9wc1R5cGUgPT09J2hvdXNlLWtlZXBpbmcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIxIDIxXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjAxMl85NDY0MylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS4yNjIxOSAxLjM2NzIyQzEwLjE3NzcgMC40NTg5NzQgMTEuNjYyIDAuNDU4OTc0IDEyLjU3NzYgMS4zNjcyMkwyMC4zMTMzIDkuMDQxNTNDMjEuMjI4NyA5Ljk0OTggMjEuMjI4NyAxMS40MjIzIDIwLjMxMzMgMTIuMzMwNkwxMi41Nzc2IDIwLjAwNDlDMTEuNjYyIDIwLjkxMzEgMTAuMTc3NyAyMC45MTMxIDkuMjYyMTkgMjAuMDA0OUw3LjA1MTY2IDE3LjgxMTlMNS4wMjUzOCAxOS44MjIxQzQuMTA5ODcgMjAuNzMwMyAyLjYyNTUzIDIwLjczMDMgMS43MTAwMiAxOS44MjIxQzAuNzk0NTEgMTguOTEzOSAwLjc5NDUxIDE3LjQ0MTMgMS43MTAwMiAxNi41MzMxTDMuNzM2MyAxNC41MjI5TDEuNTI2NDggMTIuMzMwNkMwLjYxMDk2NiAxMS40MjIzIDAuNjEwOTY2IDkuOTQ5OCAxLjUyNjQ4IDkuMDQxNTNMOS4yNjIxOSAxLjM2NzIyWk0xMS40NzI0IDIuNDYzNTdDMTEuMTY3MiAyLjE2MDgyIDEwLjY3MjQgMi4xNjA4MiAxMC4zNjcyIDIuNDYzNTdMNC44NDE0NSA3Ljk0NTU2TDEzLjY4MjMgMTYuNzE2M0wxOS4yMDgxIDExLjIzNDJDMTkuNTEzMyAxMC45MzE1IDE5LjUxMzMgMTAuNDQwNiAxOS4yMDgxIDEwLjEzNzlMMTUuMzM5OSA2LjMwMDMyTDE0LjA1MDUgNy41Nzk0QzEzLjc0NTMgNy44ODIxNCAxMy4yNTA2IDcuODgyMTQgMTIuOTQ1NSA3LjU3OTRDMTIuNjQwMyA3LjI3NjY0IDEyLjY0MDMgNi43ODU3OSAxMi45NDU1IDYuNDgzMDVMMTQuMjM0NyA1LjIwMzk3TDEzLjEyOTkgNC4xMDc4Nkw5Ljk5ODcyIDcuMjE0MThDOS42OTM1NCA3LjUxNjkyIDkuMTk4NzMgNy41MTY5MiA4Ljg5MzU2IDcuMjE0MThDOC41ODgzOCA2LjkxMTQzIDguNTg4MzggNi40MjA1OCA4Ljg5MzU2IDYuMTE3ODNMMTIuMDI0NyAzLjAxMTUxTDExLjQ3MjQgMi40NjM1N1pNMTIuNTc3MSAxNy44MTI1TDMuNzM2MzMgOS4wNDE5MUwyLjYzMTYgMTAuMTM3OUMyLjMyNjQyIDEwLjQ0MDYgMi4zMjY0MiAxMC45MzE1IDIuNjMxNiAxMS4yMzQyTDEwLjM2NzIgMTguOTA4NUMxMC42NzI0IDE5LjIxMTMgMTEuMTY3MiAxOS4yMTEzIDExLjQ3MjQgMTguOTA4NUwxMi41NzcxIDE3LjgxMjVaTTQuODQxMzIgMTUuNjE5MkwyLjgxNTE0IDE3LjYyOTRDMi41MDk5NyAxNy45MzIxIDIuNTA5OTcgMTguNDIzIDIuODE1MTQgMTguNzI1OEMzLjEyMDMxIDE5LjAyODUgMy42MTUwOSAxOS4wMjg1IDMuOTIwMjYgMTguNzI1OEw1Ljk0NjQ0IDE2LjcxNTZMNC44NDEzMiAxNS42MTkyWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNDc1NDY3XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzIwMTJfOTQ2NDNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwIDAuNjg2MDM1KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICA8c3BhbiAqbmdJZj1cIm9iaj8ucmV2b3BzVHlwZSA9PT0nanVuaydcIj5cclxuXHJcbiAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuPHBhdGggZD1cIk0zIDZINU01IDZIMjFNNSA2VjIwQzUgMjAuNTMwNCA1LjIxMDcxIDIxLjAzOTEgNS41ODU3OSAyMS40MTQyQzUuOTYwODYgMjEuNzg5MyA2LjQ2OTU3IDIyIDcgMjJIMTdDMTcuNTMwNCAyMiAxOC4wMzkxIDIxLjc4OTMgMTguNDE0MiAyMS40MTQyQzE4Ljc4OTMgMjEuMDM5MSAxOSAyMC41MzA0IDE5IDIwVjZINVpNOCA2VjRDOCAzLjQ2OTU3IDguMjEwNzEgMi45NjA4NiA4LjU4NTc5IDIuNTg1NzlDOC45NjA4NiAyLjIxMDcxIDkuNDY5NTcgMiAxMCAySDE0QzE0LjUzMDQgMiAxNS4wMzkxIDIuMjEwNzEgMTUuNDE0MiAyLjU4NTc5QzE1Ljc4OTMgMi45NjA4NiAxNiAzLjQ2OTU3IDE2IDRWNk0xMCAxMVYxN00xNCAxMVYxN1wiIHN0cm9rZT1cIiM0NzU0NjdcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG48L3N2Zz5cclxuICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICAgICAgICA8IS0tIGZ1bGwgaW1hZ2UgVmlldyAtLT5cclxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nSWY9XCJpbWFnZUZsb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc2hyaW5rLTAgbXQtMyBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWxpZ24taXRlbXMtY2VudGVyIHB4LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJiYWNrVG9Gb290ZmFsbDEoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWx0ZXI9XCJ1cmwoI2ZpbHRlcjBfZF8yNTg1XzcwMzYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjM2XCIgaGVpZ2h0PVwiMzZcIiByeD1cIjhcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMzVcIiBoZWlnaHQ9XCIzNVwiIHJ4PVwiNy41XCIgc3Ryb2tlPVwiI0QwRDVERFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjUuODMyNyAxOUgxNC4xNjZNMTQuMTY2IDE5TDE5Ljk5OTMgMjQuODMzNE0xNC4xNjYgMTlMMTkuOTk5MyAxMy4xNjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsdGVyIGlkPVwiZmlsdGVyMF9kXzI1ODVfNzAzNlwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz1cInNSR0JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCIgcmVzdWx0PVwiQmFja2dyb3VuZEltYWdlRml4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGluPVwiU291cmNlQWxwaGFcIiB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiIHJlc3VsdD1cImhhcmRBbHBoYVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgZHk9XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IHR5cGU9XCJtYXRyaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMC4wNjI3NDUxIDAgMCAwIDAgMC4wOTQxMTc2IDAgMCAwIDAgMC4xNTY4NjMgMCAwIDAgMC4wNSAwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbjI9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cImVmZmVjdDFfZHJvcFNoYWRvd18yNTg1XzcwMzZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluPVwiU291cmNlR3JhcGhpY1wiIGluMj1cImVmZmVjdDFfZHJvcFNoYWRvd18yNTg1XzcwMzZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cInNoYXBlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWx0ZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbWctZGlyZWMgbXMtMiBtdC0xXCI+e3tmb2xkZXJEYXRlIHwgZGF0ZTonZGQgTU1NLCB5eXl5J319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbXQtMiBtYi0yIHctMTAwIG92ZXJmbG93LXggcHgtMFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY29sIHRleHQtbm93cmFwXCIgKm5nRm9yPVwibGV0IG9iaiBvZiBvYmplY3RzQXJyYXlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzMSBuYXYtbGluZS10YWJzIGJvcmRlci10cmFuc3BhcmVudCBmbGV4LW5vd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJzZWxlY3RlZFRpbWVzKG9iai50aW1lUmFuZ2UpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGltZSA9PT0gb2JqPy50aW1lUmFuZ2UgPyAnYWN0aXZlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbm8tYm9yZGVyIG14LTMgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvYmo/LnRpbWVSYW5nZX19PHNwYW4gY2xhc3M9XCJteC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWxlY3RlZFRpbWUgPT09IG9iaj8udGltZVJhbmdlID8gJ2JhZGdlLW51bS1wcmltYXJ5JyA6J2JhZGdlLW51bS1tdXRlZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvYmo/LmNvdW50ID8gb2JqPy5jb3VudCA6IDAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBteC0wIGJvcmRlci1ncmF5IGltZy10cmFmZmljXCIgKm5nSWY9XCIhbm9EYXRhICYmICFsb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBwLTIgIG1iLTIgbXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIGJvcmRlci1ncmF5IHAtMiBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gKm5nSWY9XCJjYW5OYXZpZ2F0ZUxlZnRcIiAoY2xpY2spPVwibmF2aWdhdGVJbWFnZSgnbGVmdCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IHBvc2l0aW9uLWFic29sdXRlIHN0YXJ0LTAgdG9wLTUwIHotaW5kZXgtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4peAXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE1haW4gSW1hZ2UgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmMgY3Vyc29yLXBvaW50ZXIgaC00NTBweFwiIChjbGljayk9XCJzZWxlY3RlZEltYWdlQXJyYXkoaW1hZ2VVcmwsIHNlbGVjdEltYWdlQXJyYXkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpbWFnZVVybCArIHNlbGVjdEltYWdlQXJyYXk/LmZpbGVQYXRoXCIgYXBwTWFnbmlmaWVyIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiAqbmdJZj1cImNhbk5hdmlnYXRlUmlnaHRcIiAoY2xpY2spPVwibmF2aWdhdGVJbWFnZSgncmlnaHQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCB0b3AtNTAgei1pbmRleC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilrZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmlnaHQgYXJyb3cgYnV0dG9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtMiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTIgaW1nLWRvYy10aW1lXCI+VGFuZ28gSUQgOiB7e3NlbGVjdEltYWdlQXJyYXk/LnRlbXBsZH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RJbWFnZUFycmF5Py5zdGF0dXMgPT09J2FwcHJvdmVkJ1wiIGNsYXNzPVwibXMtMlwiPjxzdmcgc3R5bGU9XCJ3aWR0aDogMjBweDtcclxuICAgIGhlaWdodDogMjBweDtcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjExXCIgdmlld0JveD1cIjAgMCAxMCAxMVwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeT1cIjAuNVwiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiIHJ4PVwiNVwiIGZpbGw9XCIjRDFGQURGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy4xMjIyIDMuNTc5MTlMNC4xMzg4NyA2LjQ1ODM2TDMuMzQ3MiA1LjYxMjUzQzMuMjAxMzcgNS40NzUwMyAyLjk3MjIgNS40NjY2OSAyLjgwNTUzIDUuNTgzMzZDMi42NDMwMyA1LjcwNDE5IDIuNTk3MiA1LjkxNjY5IDIuNjk3MiA2LjA4NzUzTDMuNjM0NyA3LjYxMjUzQzMuNzI2MzcgNy43NTQxOSAzLjg4NDcgNy44NDE2OSA0LjA2Mzg3IDcuODQxNjlDNC4yMzQ3IDcuODQxNjkgNC4zOTcyIDcuNzU0MTkgNC40ODg4NyA3LjYxMjUzQzQuNjM4ODcgNy40MTY2OSA3LjUwMTM3IDQuMDA0MTkgNy41MDEzNyA0LjAwNDE5QzcuODc2MzcgMy42MjA4NiA3LjQyMjIgMy4yODMzNiA3LjEyMjIgMy41NzUwM1YzLjU3OTE5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMTJCNzZBXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0SW1hZ2VBcnJheT8uc3RhdHVzID09PSdyZWplY3RlZCdcIiBjbGFzcz1cIm1zLTJcIj48c3ZnIHN0eWxlPVwid2lkdGg6IDIwcHg7XHJcbiAgICBoZWlnaHQ6IDIwcHg7XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIxM1wiIHZpZXdCb3g9XCIwIDAgMTMgMTNcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTQyOF81OTQ4NClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNC41Mjk2MSAxLjVIOC42Njk2MUwxMS41OTk2IDQuNDNWOC41N0w4LjY2OTYxIDExLjVINC41Mjk2MUwxLjU5OTYxIDguNTdWNC40M0w0LjUyOTYxIDEuNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGRUU0RTJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjA5OTYxIDVMNS4wOTk2MSA4TTUuMDk5NjEgNUw4LjA5OTYxIDhNNC41Mjk2MSAxLjVIOC42Njk2MUwxMS41OTk2IDQuNDNWOC41N0w4LjY2OTYxIDExLjVINC41Mjk2MUwxLjU5OTYxIDguNTdWNC40M0w0LjUyOTYxIDEuNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0Q5MkQyMFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTQyOF81OTQ4NFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC41OTk2MDkgMC41KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nLWRvYy12YWx1ZVwiPkVudHJ5IFRpbWUgOiB7e3NlbGVjdEltYWdlQXJyYXk/LmVudHJ5VG1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNSB0ZXh0LWVuZCBweS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdEltYWdlQXJyYXk/LnJldm9wc1R5cGUgPT09J25vbi10YWdnaW5nJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cIllldCB0byB0YWcgdGhlIGN1c3RvbWVyXCIgcGxhY2VtZW50PVwidG9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOVwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOSAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuMDIzNDQgNS42MjVINi4wMzA5NE0xNi4yMTU5IDEwLjQzMjVMMTAuODM4NCAxNS44MUMxMC42OTkxIDE1Ljk0OTUgMTAuNTMzNyAxNi4wNjAxIDEwLjM1MTYgMTYuMTM1NkMxMC4xNjk1IDE2LjIxMTEgOS45NzQzMSAxNi4yNDk5IDkuNzc3MTkgMTYuMjQ5OUM5LjU4MDA2IDE2LjI0OTkgOS4zODQ4NyAxNi4yMTExIDkuMjAyNzggMTYuMTM1NkM5LjAyMDY4IDE2LjA2MDEgOC44NTUyNSAxNS45NDk1IDguNzE1OTQgMTUuODFMMi4yNzM0NCA5LjM3NVYxLjg3NUg5Ljc3MzQ0TDE2LjIxNTkgOC4zMTc1QzE2LjQ5NTMgOC41OTg1NCAxNi42NTIxIDguOTc4NzIgMTYuNjUyMSA5LjM3NUMxNi42NTIxIDkuNzcxMjggMTYuNDk1MyAxMC4xNTE1IDE2LjIxNTkgMTAuNDMyNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0SW1hZ2VBcnJheT8ucmV2b3BzVHlwZSA9PT0nZHVwbGljYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjFcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIwMTJfOTQ2MzUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNC4xNjc5NyAxMy4xODU5SDMuMzM0NjRDMi44OTI2MSAxMy4xODU5IDIuNDY4NjggMTMuMDEwMyAyLjE1NjEyIDEyLjY5NzdDMS44NDM1NiAxMi4zODUyIDEuNjY3OTcgMTEuOTYxMiAxLjY2Nzk3IDExLjUxOTJWNC4wMTkyMUMxLjY2Nzk3IDMuNTc3MTggMS44NDM1NiAzLjE1MzI2IDIuMTU2MTIgMi44NDA2OUMyLjQ2ODY4IDIuNTI4MTMgMi44OTI2MSAyLjM1MjU0IDMuMzM0NjQgMi4zNTI1NEgxMC44MzQ2QzExLjI3NjcgMi4zNTI1NCAxMS43MDA2IDIuNTI4MTMgMTIuMDEzMSAyLjg0MDY5QzEyLjMyNTcgMy4xNTMyNiAxMi41MDEzIDMuNTc3MTggMTIuNTAxMyA0LjAxOTIxVjQuODUyNTRNOS4xNjc5NyA4LjE4NTg3SDE2LjY2OEMxNy41ODg0IDguMTg1ODcgMTguMzM0NiA4LjkzMjA2IDE4LjMzNDYgOS44NTI1NFYxNy4zNTI1QzE4LjMzNDYgMTguMjczIDE3LjU4ODQgMTkuMDE5MiAxNi42NjggMTkuMDE5Mkg5LjE2Nzk3QzguMjQ3NDkgMTkuMDE5MiA3LjUwMTMgMTguMjczIDcuNTAxMyAxNy4zNTI1VjkuODUyNTRDNy41MDEzIDguOTMyMDYgOC4yNDc0OSA4LjE4NTg3IDkuMTY3OTcgOC4xODU4N1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM0NzU0NjdcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjAxMl85NDYzNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwIDAuNjg2MDM1KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdEltYWdlQXJyYXk/LnJldm9wc1R5cGUgPT09J2VtcGxveWVlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjFcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIwMTJfOTQ2MzkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQuMTY1NCAxOC4xODZWMTYuNTE5NEMxNC4xNjU0IDE1LjYzNTMgMTMuODE0MiAxNC43ODc1IDEzLjE4OTEgMTQuMTYyM0MxMi41NjM5IDEzLjUzNzIgMTEuNzE2MSAxMy4xODYgMTAuODMyIDEzLjE4Nkg0LjE2NTM2QzMuMjgxMzEgMTMuMTg2IDIuNDMzNDYgMTMuNTM3MiAxLjgwODM0IDE0LjE2MjNDMS4xODMyMiAxNC43ODc1IDAuODMyMDMxIDE1LjYzNTMgMC44MzIwMzEgMTYuNTE5NFYxOC4xODZNMTkuMTY1NCAxOC4xODZWMTYuNTE5NEMxOS4xNjQ4IDE1Ljc4MDggMTguOTE5IDE1LjA2MzMgMTguNDY2NSAxNC40Nzk2QzE4LjAxNCAxMy44OTU5IDE3LjM4MDUgMTMuNDc5IDE2LjY2NTQgMTMuMjk0NE0xMy4zMzIgMy4yOTQzN0MxNC4wNDkgMy40Nzc5NSAxNC42ODQ2IDMuODk0OTUgMTUuMTM4NCA0LjQ3OTYzQzE1LjU5MjIgNS4wNjQzIDE1LjgzODYgNS43ODMzOSAxNS44Mzg2IDYuNTIzNTRDMTUuODM4NiA3LjI2MzY4IDE1LjU5MjIgNy45ODI3NyAxNS4xMzg0IDguNTY3NDRDMTQuNjg0NiA5LjE1MjEyIDE0LjA0OSA5LjU2OTEyIDEzLjMzMiA5Ljc1MjdNMTAuODMyIDYuNTE5MzdDMTAuODMyIDguMzYwMzIgOS4zMzk2NSA5Ljg1MjcgNy40OTg3IDkuODUyN0M1LjY1Nzc1IDkuODUyNyA0LjE2NTM2IDguMzYwMzIgNC4xNjUzNiA2LjUxOTM3QzQuMTY1MzYgNC42Nzg0MiA1LjY1Nzc1IDMuMTg2MDQgNy40OTg3IDMuMTg2MDRDOS4zMzk2NSAzLjE4NjA0IDEwLjgzMiA0LjY3ODQyIDEwLjgzMiA2LjUxOTM3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMDEyXzk0NjM5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0SW1hZ2VBcnJheT8ucmV2b3BzVHlwZSA9PT0naG91c2Uta2VlcGluZydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIxIDIxXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8yMDEyXzk0NjQzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS4yNjIxOSAxLjM2NzIyQzEwLjE3NzcgMC40NTg5NzQgMTEuNjYyIDAuNDU4OTc0IDEyLjU3NzYgMS4zNjcyMkwyMC4zMTMzIDkuMDQxNTNDMjEuMjI4NyA5Ljk0OTggMjEuMjI4NyAxMS40MjIzIDIwLjMxMzMgMTIuMzMwNkwxMi41Nzc2IDIwLjAwNDlDMTEuNjYyIDIwLjkxMzEgMTAuMTc3NyAyMC45MTMxIDkuMjYyMTkgMjAuMDA0OUw3LjA1MTY2IDE3LjgxMTlMNS4wMjUzOCAxOS44MjIxQzQuMTA5ODcgMjAuNzMwMyAyLjYyNTUzIDIwLjczMDMgMS43MTAwMiAxOS44MjIxQzAuNzk0NTEgMTguOTEzOSAwLjc5NDUxIDE3LjQ0MTMgMS43MTAwMiAxNi41MzMxTDMuNzM2MyAxNC41MjI5TDEuNTI2NDggMTIuMzMwNkMwLjYxMDk2NiAxMS40MjIzIDAuNjEwOTY2IDkuOTQ5OCAxLjUyNjQ4IDkuMDQxNTNMOS4yNjIxOSAxLjM2NzIyWk0xMS40NzI0IDIuNDYzNTdDMTEuMTY3MiAyLjE2MDgyIDEwLjY3MjQgMi4xNjA4MiAxMC4zNjcyIDIuNDYzNTdMNC44NDE0NSA3Ljk0NTU2TDEzLjY4MjMgMTYuNzE2M0wxOS4yMDgxIDExLjIzNDJDMTkuNTEzMyAxMC45MzE1IDE5LjUxMzMgMTAuNDQwNiAxOS4yMDgxIDEwLjEzNzlMMTUuMzM5OSA2LjMwMDMyTDE0LjA1MDUgNy41Nzk0QzEzLjc0NTMgNy44ODIxNCAxMy4yNTA2IDcuODgyMTQgMTIuOTQ1NSA3LjU3OTRDMTIuNjQwMyA3LjI3NjY0IDEyLjY0MDMgNi43ODU3OSAxMi45NDU1IDYuNDgzMDVMMTQuMjM0NyA1LjIwMzk3TDEzLjEyOTkgNC4xMDc4Nkw5Ljk5ODcyIDcuMjE0MThDOS42OTM1NCA3LjUxNjkyIDkuMTk4NzMgNy41MTY5MiA4Ljg5MzU2IDcuMjE0MThDOC41ODgzOCA2LjkxMTQzIDguNTg4MzggNi40MjA1OCA4Ljg5MzU2IDYuMTE3ODNMMTIuMDI0NyAzLjAxMTUxTDExLjQ3MjQgMi40NjM1N1pNMTIuNTc3MSAxNy44MTI1TDMuNzM2MzMgOS4wNDE5MUwyLjYzMTYgMTAuMTM3OUMyLjMyNjQyIDEwLjQ0MDYgMi4zMjY0MiAxMC45MzE1IDIuNjMxNiAxMS4yMzQyTDEwLjM2NzIgMTguOTA4NUMxMC42NzI0IDE5LjIxMTMgMTEuMTY3MiAxOS4yMTEzIDExLjQ3MjQgMTguOTA4NUwxMi41NzcxIDE3LjgxMjVaTTQuODQxMzIgMTUuNjE5MkwyLjgxNTE0IDE3LjYyOTRDMi41MDk5NyAxNy45MzIxIDIuNTA5OTcgMTguNDIzIDIuODE1MTQgMTguNzI1OEMzLjEyMDMxIDE5LjAyODUgMy42MTUwOSAxOS4wMjg1IDMuOTIwMjYgMTguNzI1OEw1Ljk0NjQ0IDE2LjcxNTZMNC44NDEzMiAxNS42MTkyWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM0NzU0NjdcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjAxMl85NDY0M1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwIDAuNjg2MDM1KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IHAtMiBtYi0yICBtdC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiB0aXRsZS10eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3Qgbm9uLXNob3BwZXIgdHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uICBjbGFzcz1cImNvbC1tZC02IHRleHQtZW5kXCIgKm5nSWY9XCIhKHVzZXJzPy5yb2xlID09PSd1c2VyJyAmJiB1c2Vycz8udXNlclR5cGUgPT09J2NsaWVudCcgJiYgc2VsZWN0ZWRSYWRpb1R5cGUgPT09J2p1bmsnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFyZXZvcHNUeXBlVmFsdWVcIiBjbGFzcz1cIm1iLTUgdGV4dC1lbmRcIiByb2xlPVwiZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFnZXRUaWNrZXRTdGF0dXNlcygpLmluY2x1ZGVzKCdvcGVuJykgJiYgIWdldFRpY2tldFN0YXR1c2VzKCkuaW5jbHVkZXMoJ2Nsb3NlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkUmFkaW9UeXBlID09PSB1bmRlZmluZWQgfHwgc2VsZWN0ZWRSYWRpb1R5cGUgPT09ICcnKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkUmFkaW9UeXBlID09PSAnZHVwbGljYXRlJyAmJiBzZWxlY3RlZER1cGxpY2F0ZUltYWdlc0xpc3QubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xlYXJWYWx1ZSgpXCI+Q2xlYXI8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgbWUtMlwiIChjbGljayk9XCJjYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImFsZXJ0LXRvYXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlKHNlbGVjdGVkVHlwZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkUmFkaW9UeXBlID09PSB1bmRlZmluZWQgfHwgc2VsZWN0ZWRSYWRpb1R5cGUgPT09ICcnKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkUmFkaW9UeXBlID09PSAnZHVwbGljYXRlJyAmJiBzZWxlY3RlZER1cGxpY2F0ZUltYWdlc0xpc3QubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhKHVzZXJzPy5yb2xlID09PSd1c2VyJyAmJiB1c2Vycz8udXNlclR5cGUgPT09J2NsaWVudCcgJiYgc2VsZWN0ZWRSYWRpb1R5cGUgPT09J2p1bmsnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRCdG5TaG93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJldm9wc1R5cGVWYWx1ZVwiIGNsYXNzPVwibWItNSB0ZXh0LWVuZFwiIHJvbGU9XCJncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWdldFRpY2tldFN0YXR1c2VzKCkuaW5jbHVkZXMoJ29wZW4nKSAmJiAhZ2V0VGlja2V0U3RhdHVzZXMoKS5pbmNsdWRlcygnY2xvc2VkJylcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBtZS0yXCIgKGNsaWNrKT1cImVkaXRWYWx1ZSgpXCI+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lLTJcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQuNjU1NCAxLjcxMDQ3QzE0Ljg5MjcgMS40NzMxNSAxNS4xNzQ1IDEuMjg0OSAxNS40ODQ1IDEuMTU2NDZDMTUuNzk0NiAxLjAyODAyIDE2LjEyNjkgMC45NjE5MTQgMTYuNDYyNiAwLjk2MTkxNEMxNi43OTgyIDAuOTYxOTE0IDE3LjEzMDUgMS4wMjgwMiAxNy40NDA2IDEuMTU2NDZDMTcuNzUwNyAxLjI4NDkgMTguMDMyNCAxLjQ3MzE1IDE4LjI2OTcgMS43MTA0N0MxOC41MDcxIDEuOTQ3NzkgMTguNjk1MyAyLjIyOTUzIDE4LjgyMzggMi41Mzk2MUMxOC45NTIyIDIuODQ5NjkgMTkuMDE4MyAzLjE4MjAyIDE5LjAxODMgMy41MTc2NUMxOS4wMTgzIDMuODUzMjcgMTguOTUyMiA0LjE4NTYxIDE4LjgyMzggNC40OTU2OEMxOC42OTUzIDQuODA1NzYgMTguNTA3MSA1LjA4NzUgMTguMjY5NyA1LjMyNDgyTDYuMDcxMyAxNy41MjMzTDEuMTAxNTYgMTguODc4NkwyLjQ1Njk1IDEzLjkwODlMMTQuNjU1NCAxLjcxMDQ3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS44MTA3OVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5FZGl0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICBjbGFzcz1cImZvcm0tY2hlY2sgbXktMTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJkdXBsaWNhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJkdXBsaWNhdGVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkVHlwZVwiIFt2YWx1ZV09XCInZHVwbGljYXRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uUmFkaW9DaGFuZ2Uoc2VsZWN0ZWRUeXBlKVwiIFtkaXNhYmxlZF09XCJyZXZvcHNUeXBlVmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImR1cGxpY2F0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMVwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjAxMl85NDYzNSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00LjE2Nzk3IDEzLjE4NTlIMy4zMzQ2NEMyLjg5MjYxIDEzLjE4NTkgMi40Njg2OCAxMy4wMTAzIDIuMTU2MTIgMTIuNjk3N0MxLjg0MzU2IDEyLjM4NTIgMS42Njc5NyAxMS45NjEyIDEuNjY3OTcgMTEuNTE5MlY0LjAxOTIxQzEuNjY3OTcgMy41NzcxOCAxLjg0MzU2IDMuMTUzMjYgMi4xNTYxMiAyLjg0MDY5QzIuNDY4NjggMi41MjgxMyAyLjg5MjYxIDIuMzUyNTQgMy4zMzQ2NCAyLjM1MjU0SDEwLjgzNDZDMTEuMjc2NyAyLjM1MjU0IDExLjcwMDYgMi41MjgxMyAxMi4wMTMxIDIuODQwNjlDMTIuMzI1NyAzLjE1MzI2IDEyLjUwMTMgMy41NzcxOCAxMi41MDEzIDQuMDE5MjFWNC44NTI1NE05LjE2Nzk3IDguMTg1ODdIMTYuNjY4QzE3LjU4ODQgOC4xODU4NyAxOC4zMzQ2IDguOTMyMDYgMTguMzM0NiA5Ljg1MjU0VjE3LjM1MjVDMTguMzM0NiAxOC4yNzMgMTcuNTg4NCAxOS4wMTkyIDE2LjY2OCAxOS4wMTkySDkuMTY3OTdDOC4yNDc0OSAxOS4wMTkyIDcuNTAxMyAxOC4yNzMgNy41MDEzIDE3LjM1MjVWOS44NTI1NEM3LjUwMTMgOC45MzIwNiA4LjI0NzQ5IDguMTg1ODcgOS4xNjc5NyA4LjE4NTg3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMDEyXzk0NjM1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtNSB0YWctY2xhc3NcIj5EdXBsaWNhdGU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbXktMTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJlbXBsb3llZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImVtcGxveWVlXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFR5cGVcIiBbdmFsdWVdPVwiJ2VtcGxveWVlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uUmFkaW9DaGFuZ2Uoc2VsZWN0ZWRUeXBlKVwiIFtkaXNhYmxlZF09XCJyZXZvcHNUeXBlVmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImVtcGxveWVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTVcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjFcIiB2aWV3Qm94PVwiMCAwIDIwIDIxXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8yMDEyXzk0NjM5KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE0LjE2NTQgMTguMTg2VjE2LjUxOTRDMTQuMTY1NCAxNS42MzUzIDEzLjgxNDIgMTQuNzg3NSAxMy4xODkxIDE0LjE2MjNDMTIuNTYzOSAxMy41MzcyIDExLjcxNjEgMTMuMTg2IDEwLjgzMiAxMy4xODZINC4xNjUzNkMzLjI4MTMxIDEzLjE4NiAyLjQzMzQ2IDEzLjUzNzIgMS44MDgzNCAxNC4xNjIzQzEuMTgzMjIgMTQuNzg3NSAwLjgzMjAzMSAxNS42MzUzIDAuODMyMDMxIDE2LjUxOTRWMTguMTg2TTE5LjE2NTQgMTguMTg2VjE2LjUxOTRDMTkuMTY0OCAxNS43ODA4IDE4LjkxOSAxNS4wNjMzIDE4LjQ2NjUgMTQuNDc5NkMxOC4wMTQgMTMuODk1OSAxNy4zODA1IDEzLjQ3OSAxNi42NjU0IDEzLjI5NDRNMTMuMzMyIDMuMjk0MzdDMTQuMDQ5IDMuNDc3OTUgMTQuNjg0NiAzLjg5NDk1IDE1LjEzODQgNC40Nzk2M0MxNS41OTIyIDUuMDY0MyAxNS44Mzg2IDUuNzgzMzkgMTUuODM4NiA2LjUyMzU0QzE1LjgzODYgNy4yNjM2OCAxNS41OTIyIDcuOTgyNzcgMTUuMTM4NCA4LjU2NzQ0QzE0LjY4NDYgOS4xNTIxMiAxNC4wNDkgOS41NjkxMiAxMy4zMzIgOS43NTI3TTEwLjgzMiA2LjUxOTM3QzEwLjgzMiA4LjM2MDMyIDkuMzM5NjUgOS44NTI3IDcuNDk4NyA5Ljg1MjdDNS42NTc3NSA5Ljg1MjcgNC4xNjUzNiA4LjM2MDMyIDQuMTY1MzYgNi41MTkzN0M0LjE2NTM2IDQuNjc4NDIgNS42NTc3NSAzLjE4NjA0IDcuNDk4NyAzLjE4NjA0QzkuMzM5NjUgMy4xODYwNCAxMC44MzIgNC42Nzg0MiAxMC44MzIgNi41MTkzN1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM0NzU0NjdcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjAxMl85NDYzOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwIDAuNjg2MDM1KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy01IHRhZy1jbGFzc1wiPkVtcGxveWVlL1N0YWZmPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG15LTE1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiaG91c2Uta2VlcGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImhvdXNlLWtlZXBpbmdcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkVHlwZVwiIFt2YWx1ZV09XCInaG91c2Uta2VlcGluZydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblJhZGlvQ2hhbmdlKHNlbGVjdGVkVHlwZSlcIiBbZGlzYWJsZWRdPVwicmV2b3BzVHlwZVZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJob3VzZS1rZWVwaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTVcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjFcIiB2aWV3Qm94PVwiMCAwIDIxIDIxXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8yMDEyXzk0NjQzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS4yNjIxOSAxLjM2NzIyQzEwLjE3NzcgMC40NTg5NzQgMTEuNjYyIDAuNDU4OTc0IDEyLjU3NzYgMS4zNjcyMkwyMC4zMTMzIDkuMDQxNTNDMjEuMjI4NyA5Ljk0OTggMjEuMjI4NyAxMS40MjIzIDIwLjMxMzMgMTIuMzMwNkwxMi41Nzc2IDIwLjAwNDlDMTEuNjYyIDIwLjkxMzEgMTAuMTc3NyAyMC45MTMxIDkuMjYyMTkgMjAuMDA0OUw3LjA1MTY2IDE3LjgxMTlMNS4wMjUzOCAxOS44MjIxQzQuMTA5ODcgMjAuNzMwMyAyLjYyNTUzIDIwLjczMDMgMS43MTAwMiAxOS44MjIxQzAuNzk0NTEgMTguOTEzOSAwLjc5NDUxIDE3LjQ0MTMgMS43MTAwMiAxNi41MzMxTDMuNzM2MyAxNC41MjI5TDEuNTI2NDggMTIuMzMwNkMwLjYxMDk2NiAxMS40MjIzIDAuNjEwOTY2IDkuOTQ5OCAxLjUyNjQ4IDkuMDQxNTNMOS4yNjIxOSAxLjM2NzIyWk0xMS40NzI0IDIuNDYzNTdDMTEuMTY3MiAyLjE2MDgyIDEwLjY3MjQgMi4xNjA4MiAxMC4zNjcyIDIuNDYzNTdMNC44NDE0NSA3Ljk0NTU2TDEzLjY4MjMgMTYuNzE2M0wxOS4yMDgxIDExLjIzNDJDMTkuNTEzMyAxMC45MzE1IDE5LjUxMzMgMTAuNDQwNiAxOS4yMDgxIDEwLjEzNzlMMTUuMzM5OSA2LjMwMDMyTDE0LjA1MDUgNy41Nzk0QzEzLjc0NTMgNy44ODIxNCAxMy4yNTA2IDcuODgyMTQgMTIuOTQ1NSA3LjU3OTRDMTIuNjQwMyA3LjI3NjY0IDEyLjY0MDMgNi43ODU3OSAxMi45NDU1IDYuNDgzMDVMMTQuMjM0NyA1LjIwMzk3TDEzLjEyOTkgNC4xMDc4Nkw5Ljk5ODcyIDcuMjE0MThDOS42OTM1NCA3LjUxNjkyIDkuMTk4NzMgNy41MTY5MiA4Ljg5MzU2IDcuMjE0MThDOC41ODgzOCA2LjkxMTQzIDguNTg4MzggNi40MjA1OCA4Ljg5MzU2IDYuMTE3ODNMMTIuMDI0NyAzLjAxMTUxTDExLjQ3MjQgMi40NjM1N1pNMTIuNTc3MSAxNy44MTI1TDMuNzM2MzMgOS4wNDE5MUwyLjYzMTYgMTAuMTM3OUMyLjMyNjQyIDEwLjQ0MDYgMi4zMjY0MiAxMC45MzE1IDIuNjMxNiAxMS4yMzQyTDEwLjM2NzIgMTguOTA4NUMxMC42NzI0IDE5LjIxMTMgMTEuMTY3MiAxOS4yMTEzIDExLjQ3MjQgMTguOTA4NUwxMi41NzcxIDE3LjgxMjVaTTQuODQxMzIgMTUuNjE5MkwyLjgxNTE0IDE3LjYyOTRDMi41MDk5NyAxNy45MzIxIDIuNTA5OTcgMTguNDIzIDIuODE1MTQgMTguNzI1OEMzLjEyMDMxIDE5LjAyODUgMy42MTUwOSAxOS4wMjg1IDMuOTIwMjYgMTguNzI1OEw1Ljk0NjQ0IDE2LjcxNTZMNC44NDEzMiAxNS42MTkyWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM0NzU0NjdcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjAxMl85NDY0M1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwIDAuNjg2MDM1KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy01IHRhZy1jbGFzc1wiPiBIb3VzZSBLZWVwaW5nPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG15LTE1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwianVua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImp1bmtcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkVHlwZVwiIFt2YWx1ZV09XCInanVuaydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblJhZGlvQ2hhbmdlKHNlbGVjdGVkVHlwZSlcIiBbZGlzYWJsZWRdPVwidXNlcnM/LnJvbGUgPT09J3VzZXInICYmIHRoaXMudXNlcnM/LnVzZXJUeXBlID09PSdjbGllbnQnIHx8IHJldm9wc1R5cGVWYWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwianVua1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy01XCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgPHBhdGggZD1cIk0zIDZINU01IDZIMjFNNSA2VjIwQzUgMjAuNTMwNCA1LjIxMDcxIDIxLjAzOTEgNS41ODU3OSAyMS40MTQyQzUuOTYwODYgMjEuNzg5MyA2LjQ2OTU3IDIyIDcgMjJIMTdDMTcuNTMwNCAyMiAxOC4wMzkxIDIxLjc4OTMgMTguNDE0MiAyMS40MTQyQzE4Ljc4OTMgMjEuMDM5MSAxOSAyMC41MzA0IDE5IDIwVjZINVpNOCA2VjRDOCAzLjQ2OTU3IDguMjEwNzEgMi45NjA4NiA4LjU4NTc5IDIuNTg1NzlDOC45NjA4NiAyLjIxMDcxIDkuNDY5NTcgMiAxMCAySDE0QzE0LjUzMDQgMiAxNS4wMzkxIDIuMjEwNzEgMTUuNDE0MiAyLjU4NTc5QzE1Ljc4OTMgMi45NjA4NiAxNiAzLjQ2OTU3IDE2IDRWNk0xMCAxMVYxN00xNCAxMVYxN1wiIHN0cm9rZT1cIiM0NzU0NjdcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG48L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTUgdGFnLWNsYXNzXCI+IEp1bms8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC0wIGltZy10cmFmZmljIG10LTMgaGlnaC00MDBweCBzY3JvbGwteVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgYm9yZGVyLWdyYXkgbXgtMiBwLTIgbXQtNVwiICpuZ0Zvcj1cImxldCBvYmogb2YgcmVtYWluaW5nSW1hZ2VBcnJheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8aW5wdXQgKm5nSWY9XCJzZWxlY3RlZFJhZGlvVHlwZSA9PT0gJ2R1cGxpY2F0ZSdcIiB0eXBlPVwiY2hlY2tib3hcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvYmouc2VsZWN0ZWRcIiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGFic29sdXRlIGZvcm0tY2hlY2staW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uSW1hZ2VDaGVja2JveENoYW5nZShvYmosICdkdXBsaWNhdGUnKVwiIC8+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFxyXG4gICpuZ0lmPVwiIXJldm9wc1R5cGVWYWx1ZSAmJiBzZWxlY3RlZFJhZGlvVHlwZSA9PT0gJ2R1cGxpY2F0ZSdcIlxyXG4gIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgW2NoZWNrZWRdPVwib2JqLnNlbGVjdGVkXCJcclxuICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGFic29sdXRlIGZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIlxyXG4gIChjaGFuZ2UpPVwib25JbWFnZUNoZWNrYm94Q2hhbmdlKCRldmVudCwgb2JqLCAnZHVwbGljYXRlJylcIlxyXG4gIFtkaXNhYmxlZF09XCJvYmouZHVwbGljYXRlSW1hZ2VQYXRoPy5sZW5ndGggPiAwXCJcclxuLz5cclxuXHJcbjxpbWdcclxuICBjbGFzcz1cImltZy1zcmNcIlxyXG4gIFtuZ0NsYXNzXT1cInNlbGVjdGVkUmFkaW9UeXBlICE9PSAnZHVwbGljYXRlJyA/ICdjdXJzb3ItcG9pbnRlcicgOiAnY3Vyc29yLXBvaW50ZXInXCJcclxuICBbc3JjXT1cImltYWdlVXJsICsgb2JqPy5maWxlUGF0aFwiXHJcbiAgKGVycm9yKT1cIm9iai5maWxlUGF0aCA9IG51bGxcIlxyXG4gIGFsdD1cIlwiXHJcbiAgKGNsaWNrKT1cImhhbmRsZUltYWdlQ2xpY2soJGV2ZW50LCBvYmopXCJcclxuLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFvYmo/LmZpbGVQYXRoXCIgY2xhc3M9XCJuby1wcmV2aWV3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIzXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIzIDIwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIkdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGlkPVwiVmVjdG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi41IDYuMzIyMjdINi41MU0xNi4yNSA5LjMyMjI3SDIxLjVMMTggMTYuMzIyM0wxNC45MSAxMi4wMDIzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGlkPVwiVmVjdG9yXzJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xLjUgMTYuMzIyOUg1LjI2QzUuNjMyNzMgMTYuMzI1NSA1Ljk5ODc3IDE2LjIyMzkgNi4zMTY4MiAxNi4wMjk1QzYuNjM0ODcgMTUuODM1MiA2Ljg5MjI4IDE1LjU1NTggNy4wNiAxNS4yMjI5TDguNSAxMi4zMjI5TTEuNSAxOC4zMjI5VjE0LjMyMjlNMTcuNSA2LjgyMjkxTDEzLjUgMTQuODIyOUwzLjExIDkuNjIyOTFDMi40MjAzMyA5LjI3NTUzIDEuODk2MzUgOC42NjkxIDEuNjUyNzIgNy45MzYzMkMxLjQwOTA5IDcuMjAzNTQgMS40NjU2NCA2LjQwNDEgMS44MSA1LjcxMjkxTDMuMTkgMi45MjI5MUMzLjM2MiAyLjU4MDE0IDMuNTk5ODQgMi4yNzQ2IDMuODg5OTQgMi4wMjM3NUM0LjE4MDAzIDEuNzcyOSA0LjUxNjcgMS41ODE2NSA0Ljg4MDcyIDEuNDYwOTNDNS4yNDQ3NCAxLjM0MDIxIDUuNjI4OTcgMS4yOTIzOSA2LjAxMTQ3IDEuMzIwMThDNi4zOTM5OCAxLjM0Nzk3IDYuNzY3MjYgMS40NTA4NCA3LjExIDEuNjIyOTFMMTcuNSA2LjgyMjkxWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRlciBtYi01IHRleHQtY2VudGVyXCI+UHJldmlldyBub3QgYXZhaWxhYmxlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRlc2NyaXB0aW9uIG1iLTUgdGV4dC1jZW50ZXJcIj5UaGUgc2VsZWN0ZWQgY2FtZXJhIGlzIG5vdCBhdmFpbGFibGUgYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50Ljwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTIgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0yIGltZy1kb2MtdGltZVwiPlRhbmdvIElEIDoge3tvYmo/LnRlbXBsZCA/IG9iaj8udGVtcGxkIDogb2JqPy50ZW1wSWR9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9iaj8uc3RhdHVzID09PSdhcHByb3ZlZCdcIiBjbGFzcz1cIm1zLTJcIj48c3ZnIHN0eWxlPVwid2lkdGg6IDIwcHg7XHJcbiAgICBoZWlnaHQ6IDIwcHg7XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMVwiIHZpZXdCb3g9XCIwIDAgMTAgMTFcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHk9XCIwLjVcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIiByeD1cIjVcIiBmaWxsPVwiI0QxRkFERlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuMTIyMiAzLjU3OTE5TDQuMTM4ODcgNi40NTgzNkwzLjM0NzIgNS42MTI1M0MzLjIwMTM3IDUuNDc1MDMgMi45NzIyIDUuNDY2NjkgMi44MDU1MyA1LjU4MzM2QzIuNjQzMDMgNS43MDQxOSAyLjU5NzIgNS45MTY2OSAyLjY5NzIgNi4wODc1M0wzLjYzNDcgNy42MTI1M0MzLjcyNjM3IDcuNzU0MTkgMy44ODQ3IDcuODQxNjkgNC4wNjM4NyA3Ljg0MTY5QzQuMjM0NyA3Ljg0MTY5IDQuMzk3MiA3Ljc1NDE5IDQuNDg4ODcgNy42MTI1M0M0LjYzODg3IDcuNDE2NjkgNy41MDEzNyA0LjAwNDE5IDcuNTAxMzcgNC4wMDQxOUM3Ljg3NjM3IDMuNjIwODYgNy40MjIyIDMuMjgzMzYgNy4xMjIyIDMuNTc1MDNWMy41NzkxOVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzEyQjc2QVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9iaj8uc3RhdHVzID09PSdyZWplY3RlZCdcIiBjbGFzcz1cIm1zLTJcIj48c3ZnIHN0eWxlPVwid2lkdGg6IDIwcHg7XHJcbiAgICBoZWlnaHQ6IDIwcHg7XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIxM1wiIHZpZXdCb3g9XCIwIDAgMTMgMTNcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTQyOF81OTQ4NClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNC41Mjk2MSAxLjVIOC42Njk2MUwxMS41OTk2IDQuNDNWOC41N0w4LjY2OTYxIDExLjVINC41Mjk2MUwxLjU5OTYxIDguNTdWNC40M0w0LjUyOTYxIDEuNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGRUU0RTJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjA5OTYxIDVMNS4wOTk2MSA4TTUuMDk5NjEgNUw4LjA5OTYxIDhNNC41Mjk2MSAxLjVIOC42Njk2MUwxMS41OTk2IDQuNDNWOC41N0w4LjY2OTYxIDExLjVINC41Mjk2MUwxLjU5OTYxIDguNTdWNC40M0w0LjUyOTYxIDEuNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0Q5MkQyMFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTQyOF81OTQ4NFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC41OTk2MDkgMC41KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWctZG9jLXZhbHVlXCI+RW50cnkgVGltZSA6IHt7b2JqPy5lbnRyeVRtZSA/IG9iaj8uZW50cnlUbWUgOm9iaj8uZW50cnlUaW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNSB0ZXh0LWVuZCBweS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9iaj8ucmV2b3BzVHlwZSA9PT0nbm9uLXRhZ2dpbmcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwiWWV0IHRvIHRhZyB0aGUgY3VzdG9tZXJcIiBwbGFjZW1lbnQ9XCJ0b3BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE5XCIgaGVpZ2h0PVwiMThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE5IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi4wMjM0NCA1LjYyNUg2LjAzMDk0TTE2LjIxNTkgMTAuNDMyNUwxMC44Mzg0IDE1LjgxQzEwLjY5OTEgMTUuOTQ5NSAxMC41MzM3IDE2LjA2MDEgMTAuMzUxNiAxNi4xMzU2QzEwLjE2OTUgMTYuMjExMSA5Ljk3NDMxIDE2LjI0OTkgOS43NzcxOSAxNi4yNDk5QzkuNTgwMDYgMTYuMjQ5OSA5LjM4NDg3IDE2LjIxMTEgOS4yMDI3OCAxNi4xMzU2QzkuMDIwNjggMTYuMDYwMSA4Ljg1NTI1IDE1Ljk0OTUgOC43MTU5NCAxNS44MUwyLjI3MzQ0IDkuMzc1VjEuODc1SDkuNzczNDRMMTYuMjE1OSA4LjMxNzVDMTYuNDk1MyA4LjU5ODU0IDE2LjY1MjEgOC45Nzg3MiAxNi42NTIxIDkuMzc1QzE2LjY1MjEgOS43NzEyOCAxNi40OTUzIDEwLjE1MTUgMTYuMjE1OSAxMC40MzI1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmo/LnJldm9wc1R5cGUgPT09J2R1cGxpY2F0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIxXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8yMDEyXzk0NjM1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTQuMTY3OTcgMTMuMTg1OUgzLjMzNDY0QzIuODkyNjEgMTMuMTg1OSAyLjQ2ODY4IDEzLjAxMDMgMi4xNTYxMiAxMi42OTc3QzEuODQzNTYgMTIuMzg1MiAxLjY2Nzk3IDExLjk2MTIgMS42Njc5NyAxMS41MTkyVjQuMDE5MjFDMS42Njc5NyAzLjU3NzE4IDEuODQzNTYgMy4xNTMyNiAyLjE1NjEyIDIuODQwNjlDMi40Njg2OCAyLjUyODEzIDIuODkyNjEgMi4zNTI1NCAzLjMzNDY0IDIuMzUyNTRIMTAuODM0NkMxMS4yNzY3IDIuMzUyNTQgMTEuNzAwNiAyLjUyODEzIDEyLjAxMzEgMi44NDA2OUMxMi4zMjU3IDMuMTUzMjYgMTIuNTAxMyAzLjU3NzE4IDEyLjUwMTMgNC4wMTkyMVY0Ljg1MjU0TTkuMTY3OTcgOC4xODU4N0gxNi42NjhDMTcuNTg4NCA4LjE4NTg3IDE4LjMzNDYgOC45MzIwNiAxOC4zMzQ2IDkuODUyNTRWMTcuMzUyNUMxOC4zMzQ2IDE4LjI3MyAxNy41ODg0IDE5LjAxOTIgMTYuNjY4IDE5LjAxOTJIOS4xNjc5N0M4LjI0NzQ5IDE5LjAxOTIgNy41MDEzIDE4LjI3MyA3LjUwMTMgMTcuMzUyNVY5Ljg1MjU0QzcuNTAxMyA4LjkzMjA2IDguMjQ3NDkgOC4xODU4NyA5LjE2Nzk3IDguMTg1ODdaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzIwMTJfOTQ2MzVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMCAwLjY4NjAzNSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmo/LnJldm9wc1R5cGUgPT09J2VtcGxveWVlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjFcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIwMTJfOTQ2MzkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQuMTY1NCAxOC4xODZWMTYuNTE5NEMxNC4xNjU0IDE1LjYzNTMgMTMuODE0MiAxNC43ODc1IDEzLjE4OTEgMTQuMTYyM0MxMi41NjM5IDEzLjUzNzIgMTEuNzE2MSAxMy4xODYgMTAuODMyIDEzLjE4Nkg0LjE2NTM2QzMuMjgxMzEgMTMuMTg2IDIuNDMzNDYgMTMuNTM3MiAxLjgwODM0IDE0LjE2MjNDMS4xODMyMiAxNC43ODc1IDAuODMyMDMxIDE1LjYzNTMgMC44MzIwMzEgMTYuNTE5NFYxOC4xODZNMTkuMTY1NCAxOC4xODZWMTYuNTE5NEMxOS4xNjQ4IDE1Ljc4MDggMTguOTE5IDE1LjA2MzMgMTguNDY2NSAxNC40Nzk2QzE4LjAxNCAxMy44OTU5IDE3LjM4MDUgMTMuNDc5IDE2LjY2NTQgMTMuMjk0NE0xMy4zMzIgMy4yOTQzN0MxNC4wNDkgMy40Nzc5NSAxNC42ODQ2IDMuODk0OTUgMTUuMTM4NCA0LjQ3OTYzQzE1LjU5MjIgNS4wNjQzIDE1LjgzODYgNS43ODMzOSAxNS44Mzg2IDYuNTIzNTRDMTUuODM4NiA3LjI2MzY4IDE1LjU5MjIgNy45ODI3NyAxNS4xMzg0IDguNTY3NDRDMTQuNjg0NiA5LjE1MjEyIDE0LjA0OSA5LjU2OTEyIDEzLjMzMiA5Ljc1MjdNMTAuODMyIDYuNTE5MzdDMTAuODMyIDguMzYwMzIgOS4zMzk2NSA5Ljg1MjcgNy40OTg3IDkuODUyN0M1LjY1Nzc1IDkuODUyNyA0LjE2NTM2IDguMzYwMzIgNC4xNjUzNiA2LjUxOTM3QzQuMTY1MzYgNC42Nzg0MiA1LjY1Nzc1IDMuMTg2MDQgNy40OTg3IDMuMTg2MDRDOS4zMzk2NSAzLjE4NjA0IDEwLjgzMiA0LjY3ODQyIDEwLjgzMiA2LjUxOTM3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMDEyXzk0NjM5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqPy5yZXZvcHNUeXBlID09PSdob3VzZS1rZWVwaW5nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjEgMjFcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIwMTJfOTQ2NDMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05LjI2MjE5IDEuMzY3MjJDMTAuMTc3NyAwLjQ1ODk3NCAxMS42NjIgMC40NTg5NzQgMTIuNTc3NiAxLjM2NzIyTDIwLjMxMzMgOS4wNDE1M0MyMS4yMjg3IDkuOTQ5OCAyMS4yMjg3IDExLjQyMjMgMjAuMzEzMyAxMi4zMzA2TDEyLjU3NzYgMjAuMDA0OUMxMS42NjIgMjAuOTEzMSAxMC4xNzc3IDIwLjkxMzEgOS4yNjIxOSAyMC4wMDQ5TDcuMDUxNjYgMTcuODExOUw1LjAyNTM4IDE5LjgyMjFDNC4xMDk4NyAyMC43MzAzIDIuNjI1NTMgMjAuNzMwMyAxLjcxMDAyIDE5LjgyMjFDMC43OTQ1MSAxOC45MTM5IDAuNzk0NTEgMTcuNDQxMyAxLjcxMDAyIDE2LjUzMzFMMy43MzYzIDE0LjUyMjlMMS41MjY0OCAxMi4zMzA2QzAuNjEwOTY2IDExLjQyMjMgMC42MTA5NjYgOS45NDk4IDEuNTI2NDggOS4wNDE1M0w5LjI2MjE5IDEuMzY3MjJaTTExLjQ3MjQgMi40NjM1N0MxMS4xNjcyIDIuMTYwODIgMTAuNjcyNCAyLjE2MDgyIDEwLjM2NzIgMi40NjM1N0w0Ljg0MTQ1IDcuOTQ1NTZMMTMuNjgyMyAxNi43MTYzTDE5LjIwODEgMTEuMjM0MkMxOS41MTMzIDEwLjkzMTUgMTkuNTEzMyAxMC40NDA2IDE5LjIwODEgMTAuMTM3OUwxNS4zMzk5IDYuMzAwMzJMMTQuMDUwNSA3LjU3OTRDMTMuNzQ1MyA3Ljg4MjE0IDEzLjI1MDYgNy44ODIxNCAxMi45NDU1IDcuNTc5NEMxMi42NDAzIDcuMjc2NjQgMTIuNjQwMyA2Ljc4NTc5IDEyLjk0NTUgNi40ODMwNUwxNC4yMzQ3IDUuMjAzOTdMMTMuMTI5OSA0LjEwNzg2TDkuOTk4NzIgNy4yMTQxOEM5LjY5MzU0IDcuNTE2OTIgOS4xOTg3MyA3LjUxNjkyIDguODkzNTYgNy4yMTQxOEM4LjU4ODM4IDYuOTExNDMgOC41ODgzOCA2LjQyMDU4IDguODkzNTYgNi4xMTc4M0wxMi4wMjQ3IDMuMDExNTFMMTEuNDcyNCAyLjQ2MzU3Wk0xMi41NzcxIDE3LjgxMjVMMy43MzYzMyA5LjA0MTkxTDIuNjMxNiAxMC4xMzc5QzIuMzI2NDIgMTAuNDQwNiAyLjMyNjQyIDEwLjkzMTUgMi42MzE2IDExLjIzNDJMMTAuMzY3MiAxOC45MDg1QzEwLjY3MjQgMTkuMjExMyAxMS4xNjcyIDE5LjIxMTMgMTEuNDcyNCAxOC45MDg1TDEyLjU3NzEgMTcuODEyNVpNNC44NDEzMiAxNS42MTkyTDIuODE1MTQgMTcuNjI5NEMyLjUwOTk3IDE3LjkzMjEgMi41MDk5NyAxOC40MjMgMi44MTUxNCAxOC43MjU4QzMuMTIwMzEgMTkuMDI4NSAzLjYxNTA5IDE5LjAyODUgMy45MjAyNiAxOC43MjU4TDUuOTQ2NDQgMTYuNzE1Nkw0Ljg0MTMyIDE1LjYxOTJaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzQ3NTQ2N1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMDEyXzk0NjQzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9iaj8ucmV2b3BzVHlwZSA9PT0nanVuaydcIj5cclxuXHJcbiAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuPHBhdGggZD1cIk0zIDZINU01IDZIMjFNNSA2VjIwQzUgMjAuNTMwNCA1LjIxMDcxIDIxLjAzOTEgNS41ODU3OSAyMS40MTQyQzUuOTYwODYgMjEuNzg5MyA2LjQ2OTU3IDIyIDcgMjJIMTdDMTcuNTMwNCAyMiAxOC4wMzkxIDIxLjc4OTMgMTguNDE0MiAyMS40MTQyQzE4Ljc4OTMgMjEuMDM5MSAxOSAyMC41MzA0IDE5IDIwVjZINVpNOCA2VjRDOCAzLjQ2OTU3IDguMjEwNzEgMi45NjA4NiA4LjU4NTc5IDIuNTg1NzlDOC45NjA4NiAyLjIxMDcxIDkuNDY5NTcgMiAxMCAySDE0QzE0LjUzMDQgMiAxNS4wMzkxIDIuMjEwNzEgMTUuNDE0MiAyLjU4NTc5QzE1Ljc4OTMgMi45NjA4NiAxNiAzLjQ2OTU3IDE2IDRWNk0xMCAxMVYxN00xNCAxMVYxN1wiIHN0cm9rZT1cIiM0NzU0NjdcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG48L3N2Zz5cclxuICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9zZWN0aW9uPlxyXG48L2Rpdj5cclxuXHJcblxyXG48bmctdGVtcGxhdGUgI3pvb21Qb3B1cCBsZXQtbW9kZWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwicC00IG0tNFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgYm9yZGVyLTAgcC0wIHctMTAwIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLXN0YXJ0XCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicG9wdXBUeXBlID09PSAnbm9uLXRhZ2dpbmcnXCIgY2xhc3M9XCJteS0zXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCIyMFwiIGZpbGw9XCIjREFGMUZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIwODhfOTgzMzcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTI5LjE2OTMgMTMuMzMzM1YxOC4zMzMzTTI5LjE2OTMgMTguMzMzM0gyNC4xNjkzTTI5LjE2OTMgMTguMzMzM0wyNS4zMDI2IDE0LjdDMjQuNDA3IDEzLjgwMzkgMjMuMjk5IDEzLjE0OTMgMjIuMDgxOSAxMi43OTczQzIwLjg2NDkgMTIuNDQ1MyAxOS41Nzg1IDEyLjQwNzMgMTguMzQyOCAxMi42ODY5QzE3LjEwNzIgMTIuOTY2NSAxNS45NjI0IDEzLjU1NDUgMTUuMDE1NSAxNC4zOTYyQzE0LjA2ODUgMTUuMjM3OCAxMy4zNTAyIDE2LjMwNTYgMTIuOTI3NiAxNy41TTEwLjgzNTkgMjYuNjY2NlYyMS42NjY2TTEwLjgzNTkgMjEuNjY2NkgxNS44MzU5TTEwLjgzNTkgMjEuNjY2NkwxNC43MDI2IDI1LjNDMTUuNTk4MiAyNi4xOTYxIDE2LjcwNjIgMjYuODUwNiAxNy45MjMzIDI3LjIwMjdDMTkuMTQwMyAyNy41NTQ3IDIwLjQyNjcgMjcuNTkyNyAyMS42NjI0IDI3LjMxMzFDMjIuODk4IDI3LjAzMzUgMjQuMDQyOCAyNi40NDU1IDI0Ljk4OTcgMjUuNjAzOEMyNS45MzY3IDI0Ljc2MjEgMjYuNjU1IDIzLjY5NDMgMjcuMDc3NiAyMi41XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzIwODhfOTgzMzdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgxMCAxMClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwhLS0gSGVhZGluZyAtLT5cclxuICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGUgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwb3B1cFR5cGUgPT09ICdlbXBsb3llZSdcIj5UYWdnaW5nIGFzIGVtcGxveWVlL3N0YWZmIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicG9wdXBUeXBlID09PSAnZHVwbGljYXRlJ1wiPlRhZ2dpbmcgYXMgZHVwbGljYXRlcyA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInBvcHVwVHlwZSA9PT0gJ2hvdXNlLWtlZXBpbmcnXCI+VGFnZ2luZyBhcyBob3VzZSBrZWVwaW5nIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicG9wdXBUeXBlID09PSAnbm9uLXRhZ2dpbmcnXCI+Q2xlYXIgZHVwbGljYXRlczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicG9wdXBUeXBlID09PSdqdW5rJ1wiPlRhZ2dpbmcgYXMganVuazwvc3Bhbj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwb3B1cFR5cGUgPT09ICdlbXBsb3llZSdcIj5BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdGFnIHRoaXMgYXMgZW1wbG95ZWUvc3RhZmY/PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwb3B1cFR5cGUgPT09ICdkdXBsaWNhdGUnXCI+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHRhZyB0aGlzIGFzIGR1cGxpY2F0ZXM/IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicG9wdXBUeXBlID09PSAnaG91c2Uta2VlcGluZydcIj5BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdGFnIHRoaXMgYXMgaG91c2Uga2VlcGluZz8gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwb3B1cFR5cGUgPT09ICdub24tdGFnZ2luZydcIj5UaGlzIHdpbGwgcmVtb3ZlIHRhZ2dlZCBkdXBsaWNhdGVzIGFuZCBtb3ZlIHRoZW0gdG9cclxuICAgICAgICAgICAgICAgICAgICAnTm9uLXRhZycuPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicG9wdXBUeXBlID09PSdqdW5rJ1wiPkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB0YWcgdGhpcyBhcyBqdW5rPzwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIG10LTUgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBtZS0yXCIgKGNsaWNrKT1cImNhbmNlbFN1Ym1pdCgpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJwb3B1cFR5cGUgIT09ICdub24tdGFnZ2luZydcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJzdWJtaXRWYWx1ZShwb3B1cFR5cGUpXCI+XHJcbiAgICAgICAgICAgICAgICBZZXMsIFRhZ1xyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInBvcHVwVHlwZSA9PT0gJ25vbi10YWdnaW5nJ1wiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cInN1Ym1pdFZhbHVlKHBvcHVwVHlwZSlcIj5cclxuICAgICAgICAgICAgICAgIFllcywgY2xlYXJcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG48bmctdGVtcGxhdGUgI3JhaXNlZFBvcHVwIGxldC1tb2RlbD5cclxuICAgIDxkaXYgY2xhc3M9XCJwLTQgbS00XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBib3JkZXItMCBwLTAgdy0xMDAgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtc3RhcnRcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteS0zXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCIyMFwiIGZpbGw9XCIjREFGMUZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIxLjI1MSAxMS4wODA2QzIxLjc0MDUgMTEuMDY5OSAyMi4yMTUzIDExLjI0ODcgMjIuNTc2MiAxMS41Nzk2TDIzLjQ5MjIgMTIuNDIwNEMyMy44MDg5IDEyLjcwOTcgMjMuODkzIDEzLjEwMTcgMjMuODY1MiAxMy40MjYzVjEzLjQyNzJDMjMuODM2IDEzLjc0NzggMjMuNjk1NCAxNC4wNTkyIDIzLjQ3ODUgMTQuMjk0NEMyMy4zNjk5IDE0LjQxMyAyMy4yODY1IDE0LjU1MjUgMjMuMjMxNCAxNC43MDM2QzIzLjE3NjQgMTQuODU0OCAyMy4xNTEyIDE1LjAxNTUgMjMuMTU4MiAxNS4xNzYzQzIzLjE2NTIgMTUuMzM3IDIzLjIwMzUgMTUuNDk1MyAyMy4yNzE1IDE1LjY0MTFDMjMuMzM5NCAxNS43ODY5IDIzLjQzNjIgMTUuOTE3MiAyMy41NTQ3IDE2LjAyNTlDMjMuNjczMyAxNi4xMzQ2IDIzLjgxMTcgMTYuMjE5OCAyMy45NjI5IDE2LjI3NDlDMjQuMTE0MSAxNi4zMyAyNC4yNzQ4IDE2LjM1NDEgMjQuNDM1NSAxNi4zNDcyQzI0LjU5NjEgMTYuMzQwMiAyNC43NTM3IDE2LjMwMTcgMjQuODk5NCAxNi4yMzM5QzI1LjAwODkgMTYuMTgyOSAyNS4xMTA2IDE2LjExNiAyNS4yMDAyIDE2LjAzNTZMMjUuMzcwMSAxNS44NjU3QzI1LjU3NTkgMTUuNjc0OCAyNS44Mzg1IDE1LjU0MDggMjYuMTE1MiAxNS40OTA3QzI2LjI5NzIgMTUuNDU0NiAyNi40ODUgMTUuNDYxNyAyNi42NjQxIDE1LjUxMDNDMjYuODQzOSAxNS41NTkxIDI3LjAxMDMgMTUuNjQ5IDI3LjE0OTQgMTUuNzcyOUwyNy4xNTE0IDE1Ljc3NDlMMjguMjU5OCAxNi43OTA1QzI4LjQ0NSAxNi45NjA1IDI4LjU5NDggMTcuMTY1OCAyOC43MDAyIDE3LjM5NEMyOC44MDU2IDE3LjYyMjMgMjguODY0OCAxNy44Njk0IDI4Ljg3NCAxOC4xMjA2QzI4Ljg4MzIgMTguMzcyIDI4Ljg0MjMgMTguNjIzNCAyOC43NTM5IDE4Ljg1ODlDMjguNjY1NSAxOS4wOTQxIDI4LjUzMTYgMTkuMzA5NiAyOC4zNTk0IDE5LjQ5MjdMMjAuMTExMyAyOC4yNTgzQzE5LjkzNyAyOC40NDM0IDE5LjcyNjggMjguNTkxMiAxOS40OTQxIDI4LjY5MzhDMTkuMjYxNCAyOC43OTY1IDE5LjAxMDIgMjguODUyMiAxOC43NTU5IDI4Ljg1NkMxOC41MDE2IDI4Ljg1OTcgMTguMjQ5MyAyOC44MTE5IDE4LjAxMzcgMjguNzE2M0MxNy43Nzc5IDI4LjYyMDYgMTcuNTYzNiAyOC40Nzg0IDE3LjM4MzggMjguMjk4M0wxNi4yNTM5IDI3LjE2ODVDMTUuNzUxMSAyNi42NjU2IDE1Ljg4MzIgMjUuOTU1MiAxNi4xNTE0IDI1LjU1NDJMMTYuMjA2MSAyNS40NjQ0QzE2LjMyNDEgMjUuMjQ4NiAxNi4zNzQyIDI1LjAwMDggMTYuMzQ5NiAyNC43NTQ0QzE2LjMyMTQgMjQuNDczMSAxNi4xOTcgMjQuMjEwMiAxNS45OTcxIDI0LjAxMDNDMTUuNzk3MSAyMy44MTAzIDE1LjUzNDMgMjMuNjg1OSAxNS4yNTI5IDIzLjY1NzdDMTQuOTcxNSAyMy42Mjk3IDE0LjY4ODcgMjMuNjk5NSAxNC40NTMxIDIzLjg1NkgxNC40NTIxQzE0LjA0OTQgMjQuMTIyMiAxMy4zNDA3IDI0LjI1NTIgMTIuODM3OSAyMy43NTE1TDExLjY3OTcgMjIuNTkzM0MxMS41MDM0IDIyLjQxNjkgMTEuMzY0IDIyLjIwNzQgMTEuMjY4NiAyMS45NzcxQzExLjE3MzEgMjEuNzQ2NyAxMS4xMjMxIDIxLjQ5OTkgMTEuMTIzIDIxLjI1MDVDMTEuMTIzIDIxLjAwMSAxMS4xNzMxIDIwLjc1MzUgMTEuMjY4NiAyMC41MjI5QzExLjM2NCAyMC4yOTI2IDExLjUwMzQgMjAuMDgzMSAxMS42Nzk3IDE5LjkwNjdMMTkuOTQ5MiAxMS42MzYyQzIwLjI5NTQgMTEuMjkwMiAyMC43NjE2IDExLjA5MTIgMjEuMjUxIDExLjA4MDZaTTIxLjI3ODMgMTIuMzgwNEMyMS4xMjM3IDEyLjM4MzggMjAuOTc2NSAxMi40NDY4IDIwLjg2NzIgMTIuNTU2MkwxMi41OTY3IDIwLjgyNTdDMTIuNTQwOSAyMC44ODE0IDEyLjQ5NyAyMC45NDgyIDEyLjQ2NjggMjEuMDIxQzEyLjQzNjcgMjEuMDkzOCAxMi40MjA5IDIxLjE3MTcgMTIuNDIwOSAyMS4yNTA1QzEyLjQyMDkgMjEuMzI5MiAxMi40MzY3IDIxLjQwNzMgMTIuNDY2OCAyMS40OEMxMi40OTcgMjEuNTUyOCAxMi41NDEgMjEuNjE5NiAxMi41OTY3IDIxLjY3NTNMMTMuNzA2MSAyMi43ODM3TDEzLjczMTQgMjIuNzcyQzE0LjIxNjkgMjIuNDQ4NSAxNC43OTkzIDIyLjMwMzUgMTUuMzc5OSAyMi4zNjA4QzE1Ljk2MDggMjIuNDE4MyAxNi41MDQyIDIyLjY3NDcgMTYuOTE3IDIzLjA4NzRDMTcuMzI5OCAyMy41MDAyIDE3LjU4NyAyNC4wNDM2IDE3LjY0NDUgMjQuNjI0NUMxNy43MDIgMjUuMjA1NSAxNy41NTY1IDI1Ljc4OTIgMTcuMjMyNCAyNi4yNzQ5TDE3LjIzMDUgMjYuMjc1OUMxNy4yMjYxIDI2LjI4MjIgMTcuMjIyNiAyNi4yODkzIDE3LjIxOTcgMjYuMjk2NEwxOC4zMDE4IDI3LjM4MDRDMTguMzU4NSAyNy40MzcyIDE4LjQyNjYgMjcuNDgyIDE4LjUwMSAyNy41MTIyQzE4LjU3NTUgMjcuNTQyNSAxOC42NTU5IDI3LjU1NzQgMTguNzM2MyAyNy41NTYyQzE4LjgxNjYgMjcuNTU0OSAxOC44OTYzIDI3LjUzNzggMTguOTY5NyAyNy41MDU0QzE5LjA0MyAyNy40NzI5IDE5LjEwOTEgMjcuNDI2MSAxOS4xNjQxIDI3LjM2NzdMMjcuNDEzMSAxOC42MDIxQzI3LjQ2NzMgMTguNTQ0MiAyNy41MDkzIDE4LjQ3NjEgMjcuNTM3MSAxOC40MDE5QzI3LjU2NDkgMTguMzI3NiAyNy41NzgxIDE4LjI0ODcgMjcuNTc1MiAxOC4xNjk0QzI3LjU3MjIgMTguMDkwMiAyNy41NTM4IDE4LjAxMTkgMjcuNTIwNSAxNy45Mzk5QzI3LjQ4NzIgMTcuODY3OSAyNy40Mzk0IDE3LjgwMzIgMjcuMzgwOSAxNy43NDk1TDI2LjMyMjMgMTYuNzc3OEMyNi4yOTI1IDE2Ljc4ODUgMjYuMjY0OCAxNi44MDUzIDI2LjI0MzIgMTYuODI4NkMyNi4wMjE3IDE3LjA3ODggMjUuNzUyOSAxNy4yODI3IDI1LjQ1MjEgMTcuNDI4MkMyNS4xNSAxNy41NzQzIDI0LjgyMTQgMTcuNjU4NSAyNC40ODYzIDE3LjY3NjNDMjQuMTUxMSAxNy42OTQgMjMuODE1IDE3LjY0NTIgMjMuNDk5IDE3LjUzMTdDMjMuMTgzMiAxNy40MTgzIDIyLjg5MjggMTcuMjQyOSAyMi42NDU1IDE3LjAxNjFDMjIuMzk4MiAxNi43ODkzIDIyLjE5ODggMTYuNTE1MyAyMi4wNTg2IDE2LjIxMDRDMjEuOTE4MyAxNS45MDU1IDIxLjg0MDQgMTUuNTc1MiAyMS44MjkxIDE1LjIzOTdDMjEuODE3OCAxNC45MDQzIDIxLjg3MzcgMTQuNTcgMjEuOTkzMiAxNC4yNTYzQzIyLjExMjEgMTMuOTQ0MiAyMi4yOTE1IDEzLjY1ODcgMjIuNTIxNSAxMy40MTY1TDIyLjU1NDcgMTMuMzY1N0MyMi41NTk0IDEzLjM1NTIgMjIuNTYwNyAxMy4zNDM3IDIyLjU2MzUgMTMuMzMyNUwyMS42OTczIDEyLjUzODZWMTIuNTM3NkMyMS41ODMzIDEyLjQzMzEgMjEuNDMyOSAxMi4zNzcgMjEuMjc4MyAxMi4zODA0WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMDBBM0ZGXCIgc3Ryb2tlPVwiIzAwQTNGRlwiIHN0cm9rZS13aWR0aD1cIjAuM1wiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8IS0tIEhlYWRpbmcgLS0+XHJcbiAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlJhaXNlIHRpY2tldHMgZm9yIHRoZSBmb2xsb3dpbmc8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlJhaXNpbmcgYSB0aWNrZXQgZm9yIGZvb3RmYWxsIGNvdW50IGlzc3Vlcy4gTWFrZSBzdXJlIGFsbCByZWNvcmRzIGFyZSBpZGVudGlmaWVkIGZvclxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb24uPC9zcGFuPlxyXG5cclxuXHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBteS00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIGJvcmRlci0xIHJvdW5kZWQgcC0zIGgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkIGZzLTUgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3RlbXBSYWlzZWRQYXlsb2FkPy5kdXBsaWNhdGVDb3VudCA/IHRlbXBSYWlzZWRQYXlsb2FkPy5kdXBsaWNhdGVDb3VudCA6JzAnfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGQgdGV4dC1tdXRlZCBmcy02IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgRHVwbGljYXRlc1xyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIG15LTRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgYm9yZGVyLTEgcm91bmRlZCBwLTMgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGQgZnMtNSBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7dGVtcFJhaXNlZFBheWxvYWQ/LmVtcGxveWVlQ291bnQgPyB0ZW1wUmFpc2VkUGF5bG9hZD8uZW1wbG95ZWVDb3VudDonMCcgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGQgdGV4dC1tdXRlZCBmcy02IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgRW1wbG95ZWVcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBteS00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIGJvcmRlci0xIHJvdW5kZWQgcC0zIGgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkIGZzLTUgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3RlbXBSYWlzZWRQYXlsb2FkPy5ob3VzZUtlZXBpbmdDb3VudCA/IHRlbXBSYWlzZWRQYXlsb2FkPy5ob3VzZUtlZXBpbmdDb3VudCA6JzAnfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGQgdGV4dC1tdXRlZCBmcy02IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSG91c2UgS2VlcGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgbXktNFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciBib3JkZXItMSByb3VuZGVkIHAtMyBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1zZW1pYm9sZCBmcy01IG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t0ZW1wUmFpc2VkUGF5bG9hZD8uanVua0NvdW50ID8gdGVtcFJhaXNlZFBheWxvYWQ/Lmp1bmtDb3VudCA6JzAnfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGQgdGV4dC1tdXRlZCBmcy02IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSnVua1xyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBMYWJlbCBhbmQgVGV4dGFyZWEgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTNcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkRlc2NyaXB0aW9uIChPcHRpb25hbCk8L2xhYmVsPlxyXG4gICAgICAgICAgICA8dGV4dGFyZWEgcm93cz1cIjNcIiBbKG5nTW9kZWwpXT1cImNvbW1lbnRUZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBkZXNjcmlwdGlvblwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIG10LTUgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdy01MCBtZS0yXCIgKGNsaWNrKT1cImNhbmNlbFJhc2llZCgpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy01MFwiIChjbGljayk9XCJzdWJtaXRSYWlzZWQoKVwiPlxyXG4gICAgICAgICAgICAgICAgUmFpc2UgVGlja2V0XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuPG5nLXRlbXBsYXRlICNpbWFnZVBvcHVwIGxldC1tb2RlbD5cclxuICAgIDxkaXYgY2xhc3M9XCJteC00XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIHAtMiAgbWItMiBtdC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNNb2RhbE9wZW5cIiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIGJvcmRlci1ncmF5IHAtMiBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gKm5nSWY9XCJjYW5OYXZpZ2F0ZUxlZnRcIiAoY2xpY2spPVwibmF2aWdhdGVJbWFnZSgnbGVmdCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IHBvc2l0aW9uLWFic29sdXRlIHN0YXJ0LTAgdG9wLTUwIHotaW5kZXgtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4peAXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIE1haW4gSW1hZ2UgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIiBjdXJzb3ItcG9pbnRlciB3LTEwMCBoLTUyNXB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpbWFnZVVybCArIHNlbGVjdEltYWdlQXJyYXk/LmZpbGVQYXRoXCIgYXBwTWFnbmlmaWVyIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiAqbmdJZj1cImNhbk5hdmlnYXRlUmlnaHRcIiAoY2xpY2spPVwibmF2aWdhdGVJbWFnZSgncmlnaHQnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCB0b3AtNTAgei1pbmRleC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilrZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmlnaHQgYXJyb3cgYnV0dG9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgcHgtMiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTIgaW1nLWRvYy10aW1lXCI+VGFuZ28gSUQgOiB7e3NlbGVjdEltYWdlQXJyYXk/LnRlbXBsZH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdEltYWdlQXJyYXk/LnN0YXR1cyA9PT0nYXBwcm92ZWQnXCIgY2xhc3M9XCJtcy0yXCI+PHN2ZyBzdHlsZT1cIndpZHRoOiAyMHB4O1xyXG4gICAgaGVpZ2h0OiAyMHB4O1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTFcIiB2aWV3Qm94PVwiMCAwIDEwIDExXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB5PVwiMC41XCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgcng9XCI1XCIgZmlsbD1cIiNEMUZBREZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjEyMjIgMy41NzkxOUw0LjEzODg3IDYuNDU4MzZMMy4zNDcyIDUuNjEyNTNDMy4yMDEzNyA1LjQ3NTAzIDIuOTcyMiA1LjQ2NjY5IDIuODA1NTMgNS41ODMzNkMyLjY0MzAzIDUuNzA0MTkgMi41OTcyIDUuOTE2NjkgMi42OTcyIDYuMDg3NTNMMy42MzQ3IDcuNjEyNTNDMy43MjYzNyA3Ljc1NDE5IDMuODg0NyA3Ljg0MTY5IDQuMDYzODcgNy44NDE2OUM0LjIzNDcgNy44NDE2OSA0LjM5NzIgNy43NTQxOSA0LjQ4ODg3IDcuNjEyNTNDNC42Mzg4NyA3LjQxNjY5IDcuNTAxMzcgNC4wMDQxOSA3LjUwMTM3IDQuMDA0MTlDNy44NzYzNyAzLjYyMDg2IDcuNDIyMiAzLjI4MzM2IDcuMTIyMiAzLjU3NTAzVjMuNTc5MTlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxMkI3NkFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RJbWFnZUFycmF5Py5zdGF0dXMgPT09J3JlamVjdGVkJ1wiIGNsYXNzPVwibXMtMlwiPjxzdmcgc3R5bGU9XCJ3aWR0aDogMjBweDtcclxuICAgIGhlaWdodDogMjBweDtcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjEzXCIgdmlld0JveD1cIjAgMCAxMyAxM1wiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xNDI4XzU5NDg0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00LjUyOTYxIDEuNUg4LjY2OTYxTDExLjU5OTYgNC40M1Y4LjU3TDguNjY5NjEgMTEuNUg0LjUyOTYxTDEuNTk5NjEgOC41N1Y0LjQzTDQuNTI5NjEgMS41WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0ZFRTRFMlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDk5NjEgNUw1LjA5OTYxIDhNNS4wOTk2MSA1TDguMDk5NjEgOE00LjUyOTYxIDEuNUg4LjY2OTYxTDExLjU5OTYgNC40M1Y4LjU3TDguNjY5NjEgMTEuNUg0LjUyOTYxTDEuNTk5NjEgOC41N1Y0LjQzTDQuNTI5NjEgMS41WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRDkyRDIwXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xNDI4XzU5NDg0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLjU5OTYwOSAwLjUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWctZG9jLXZhbHVlXCI+RW50cnkgVGltZSA6IHt7c2VsZWN0SW1hZ2VBcnJheT8uZW50cnlUbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01IHRleHQtZW5kIHB5LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0SW1hZ2VBcnJheT8ucmV2b3BzVHlwZSA9PT0nbm9uLXRhZ2dpbmcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwiWWV0IHRvIHRhZyB0aGUgY3VzdG9tZXJcIiBwbGFjZW1lbnQ9XCJ0b3BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE5XCIgaGVpZ2h0PVwiMThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE5IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi4wMjM0NCA1LjYyNUg2LjAzMDk0TTE2LjIxNTkgMTAuNDMyNUwxMC44Mzg0IDE1LjgxQzEwLjY5OTEgMTUuOTQ5NSAxMC41MzM3IDE2LjA2MDEgMTAuMzUxNiAxNi4xMzU2QzEwLjE2OTUgMTYuMjExMSA5Ljk3NDMxIDE2LjI0OTkgOS43NzcxOSAxNi4yNDk5QzkuNTgwMDYgMTYuMjQ5OSA5LjM4NDg3IDE2LjIxMTEgOS4yMDI3OCAxNi4xMzU2QzkuMDIwNjggMTYuMDYwMSA4Ljg1NTI1IDE1Ljk0OTUgOC43MTU5NCAxNS44MUwyLjI3MzQ0IDkuMzc1VjEuODc1SDkuNzczNDRMMTYuMjE1OSA4LjMxNzVDMTYuNDk1MyA4LjU5ODU0IDE2LjY1MjEgOC45Nzg3MiAxNi42NTIxIDkuMzc1QzE2LjY1MjEgOS43NzEyOCAxNi40OTUzIDEwLjE1MTUgMTYuMjE1OSAxMC40MzI1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RJbWFnZUFycmF5Py5yZXZvcHNUeXBlID09PSdkdXBsaWNhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMVwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjAxMl85NDYzNSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00LjE2Nzk3IDEzLjE4NTlIMy4zMzQ2NEMyLjg5MjYxIDEzLjE4NTkgMi40Njg2OCAxMy4wMTAzIDIuMTU2MTIgMTIuNjk3N0MxLjg0MzU2IDEyLjM4NTIgMS42Njc5NyAxMS45NjEyIDEuNjY3OTcgMTEuNTE5MlY0LjAxOTIxQzEuNjY3OTcgMy41NzcxOCAxLjg0MzU2IDMuMTUzMjYgMi4xNTYxMiAyLjg0MDY5QzIuNDY4NjggMi41MjgxMyAyLjg5MjYxIDIuMzUyNTQgMy4zMzQ2NCAyLjM1MjU0SDEwLjgzNDZDMTEuMjc2NyAyLjM1MjU0IDExLjcwMDYgMi41MjgxMyAxMi4wMTMxIDIuODQwNjlDMTIuMzI1NyAzLjE1MzI2IDEyLjUwMTMgMy41NzcxOCAxMi41MDEzIDQuMDE5MjFWNC44NTI1NE05LjE2Nzk3IDguMTg1ODdIMTYuNjY4QzE3LjU4ODQgOC4xODU4NyAxOC4zMzQ2IDguOTMyMDYgMTguMzM0NiA5Ljg1MjU0VjE3LjM1MjVDMTguMzM0NiAxOC4yNzMgMTcuNTg4NCAxOS4wMTkyIDE2LjY2OCAxOS4wMTkySDkuMTY3OTdDOC4yNDc0OSAxOS4wMTkyIDcuNTAxMyAxOC4yNzMgNy41MDEzIDE3LjM1MjVWOS44NTI1NEM3LjUwMTMgOC45MzIwNiA4LjI0NzQ5IDguMTg1ODcgOS4xNjc5NyA4LjE4NTg3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMDEyXzk0NjM1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0SW1hZ2VBcnJheT8ucmV2b3BzVHlwZSA9PT0nZW1wbG95ZWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMVwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjAxMl85NDYzOSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNC4xNjU0IDE4LjE4NlYxNi41MTk0QzE0LjE2NTQgMTUuNjM1MyAxMy44MTQyIDE0Ljc4NzUgMTMuMTg5MSAxNC4xNjIzQzEyLjU2MzkgMTMuNTM3MiAxMS43MTYxIDEzLjE4NiAxMC44MzIgMTMuMTg2SDQuMTY1MzZDMy4yODEzMSAxMy4xODYgMi40MzM0NiAxMy41MzcyIDEuODA4MzQgMTQuMTYyM0MxLjE4MzIyIDE0Ljc4NzUgMC44MzIwMzEgMTUuNjM1MyAwLjgzMjAzMSAxNi41MTk0VjE4LjE4Nk0xOS4xNjU0IDE4LjE4NlYxNi41MTk0QzE5LjE2NDggMTUuNzgwOCAxOC45MTkgMTUuMDYzMyAxOC40NjY1IDE0LjQ3OTZDMTguMDE0IDEzLjg5NTkgMTcuMzgwNSAxMy40NzkgMTYuNjY1NCAxMy4yOTQ0TTEzLjMzMiAzLjI5NDM3QzE0LjA0OSAzLjQ3Nzk1IDE0LjY4NDYgMy44OTQ5NSAxNS4xMzg0IDQuNDc5NjNDMTUuNTkyMiA1LjA2NDMgMTUuODM4NiA1Ljc4MzM5IDE1LjgzODYgNi41MjM1NEMxNS44Mzg2IDcuMjYzNjggMTUuNTkyMiA3Ljk4Mjc3IDE1LjEzODQgOC41Njc0NEMxNC42ODQ2IDkuMTUyMTIgMTQuMDQ5IDkuNTY5MTIgMTMuMzMyIDkuNzUyN00xMC44MzIgNi41MTkzN0MxMC44MzIgOC4zNjAzMiA5LjMzOTY1IDkuODUyNyA3LjQ5ODcgOS44NTI3QzUuNjU3NzUgOS44NTI3IDQuMTY1MzYgOC4zNjAzMiA0LjE2NTM2IDYuNTE5MzdDNC4xNjUzNiA0LjY3ODQyIDUuNjU3NzUgMy4xODYwNCA3LjQ5ODcgMy4xODYwNEM5LjMzOTY1IDMuMTg2MDQgMTAuODMyIDQuNjc4NDIgMTAuODMyIDYuNTE5MzdaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzIwMTJfOTQ2MzlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMCAwLjY4NjAzNSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RJbWFnZUFycmF5Py5yZXZvcHNUeXBlID09PSdob3VzZS1rZWVwaW5nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjEgMjFcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIwMTJfOTQ2NDMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05LjI2MjE5IDEuMzY3MjJDMTAuMTc3NyAwLjQ1ODk3NCAxMS42NjIgMC40NTg5NzQgMTIuNTc3NiAxLjM2NzIyTDIwLjMxMzMgOS4wNDE1M0MyMS4yMjg3IDkuOTQ5OCAyMS4yMjg3IDExLjQyMjMgMjAuMzEzMyAxMi4zMzA2TDEyLjU3NzYgMjAuMDA0OUMxMS42NjIgMjAuOTEzMSAxMC4xNzc3IDIwLjkxMzEgOS4yNjIxOSAyMC4wMDQ5TDcuMDUxNjYgMTcuODExOUw1LjAyNTM4IDE5LjgyMjFDNC4xMDk4NyAyMC43MzAzIDIuNjI1NTMgMjAuNzMwMyAxLjcxMDAyIDE5LjgyMjFDMC43OTQ1MSAxOC45MTM5IDAuNzk0NTEgMTcuNDQxMyAxLjcxMDAyIDE2LjUzMzFMMy43MzYzIDE0LjUyMjlMMS41MjY0OCAxMi4zMzA2QzAuNjEwOTY2IDExLjQyMjMgMC42MTA5NjYgOS45NDk4IDEuNTI2NDggOS4wNDE1M0w5LjI2MjE5IDEuMzY3MjJaTTExLjQ3MjQgMi40NjM1N0MxMS4xNjcyIDIuMTYwODIgMTAuNjcyNCAyLjE2MDgyIDEwLjM2NzIgMi40NjM1N0w0Ljg0MTQ1IDcuOTQ1NTZMMTMuNjgyMyAxNi43MTYzTDE5LjIwODEgMTEuMjM0MkMxOS41MTMzIDEwLjkzMTUgMTkuNTEzMyAxMC40NDA2IDE5LjIwODEgMTAuMTM3OUwxNS4zMzk5IDYuMzAwMzJMMTQuMDUwNSA3LjU3OTRDMTMuNzQ1MyA3Ljg4MjE0IDEzLjI1MDYgNy44ODIxNCAxMi45NDU1IDcuNTc5NEMxMi42NDAzIDcuMjc2NjQgMTIuNjQwMyA2Ljc4NTc5IDEyLjk0NTUgNi40ODMwNUwxNC4yMzQ3IDUuMjAzOTdMMTMuMTI5OSA0LjEwNzg2TDkuOTk4NzIgNy4yMTQxOEM5LjY5MzU0IDcuNTE2OTIgOS4xOTg3MyA3LjUxNjkyIDguODkzNTYgNy4yMTQxOEM4LjU4ODM4IDYuOTExNDMgOC41ODgzOCA2LjQyMDU4IDguODkzNTYgNi4xMTc4M0wxMi4wMjQ3IDMuMDExNTFMMTEuNDcyNCAyLjQ2MzU3Wk0xMi41NzcxIDE3LjgxMjVMMy43MzYzMyA5LjA0MTkxTDIuNjMxNiAxMC4xMzc5QzIuMzI2NDIgMTAuNDQwNiAyLjMyNjQyIDEwLjkzMTUgMi42MzE2IDExLjIzNDJMMTAuMzY3MiAxOC45MDg1QzEwLjY3MjQgMTkuMjExMyAxMS4xNjcyIDE5LjIxMTMgMTEuNDcyNCAxOC45MDg1TDEyLjU3NzEgMTcuODEyNVpNNC44NDEzMiAxNS42MTkyTDIuODE1MTQgMTcuNjI5NEMyLjUwOTk3IDE3LjkzMjEgMi41MDk5NyAxOC40MjMgMi44MTUxNCAxOC43MjU4QzMuMTIwMzEgMTkuMDI4NSAzLjYxNTA5IDE5LjAyODUgMy45MjAyNiAxOC43MjU4TDUuOTQ2NDQgMTYuNzE1Nkw0Ljg0MTMyIDE1LjYxOTJaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzQ3NTQ2N1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMDEyXzk0NjQzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlciBweS0yIHB4LTBcIj4gLS0+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgcHktMiBtYi0yIHB4LTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIChjbGljayk9XCJjbG9zZUltYWdlKClcIj5DbG9zZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSA8L2Rpdj4gLS0+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
1330
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1nLXJ2cHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS10cmFmZmljL3NyYy9saWIvY29tcG9uZW50cy9pbWctcnZwcy9pbWctcnZwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYWZmaWMvc3JjL2xpYi9jb21wb25lbnRzL2ltZy1ydnBzL2ltZy1ydnBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBR1MsU0FBUyxFQUM1QixNQUFNLGVBQWUsQ0FBQztBQUt2QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztBQU85QyxNQUFNLE9BQU8sZ0JBQWdCO0lBV2pCO0lBQ0Q7SUFDQztJQUNBO0lBQ0E7SUFDQTtJQWZWLFVBQVUsQ0FBTTtJQUNoQixZQUFZLENBQU07SUFDbEIsT0FBTyxHQUFZLElBQUksQ0FBQztJQUN4QixNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ2YsU0FBUyxDQUFNO0lBQ2YsZUFBZSxHQUFRLEVBQUUsQ0FBQztJQUMxQixXQUFXLEdBQTRCLEVBQUUsQ0FBQztJQUMxQyxrQkFBa0IsR0FBUSxFQUFFLENBQUM7SUFDN0IsV0FBVyxDQUFNO0lBQ2pCLFlBQ1UsT0FBdUIsRUFDeEIsRUFBc0IsRUFDckIsRUFBcUIsRUFDckIsWUFBc0IsRUFDdEIsS0FBbUIsRUFDbkIsV0FBK0I7UUFML0IsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDeEIsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFDckIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsaUJBQVksR0FBWixZQUFZLENBQVU7UUFDdEIsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNuQixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7SUFDdEMsQ0FBQztJQUNhLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzFDLFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFDRCxtQkFBbUIsR0FBRyxJQUFJLENBQUM7SUFDM0IsZUFBZTtRQUNiLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsS0FBSyxDQUFLO0lBQ1YsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixNQUFNLFFBQVEsR0FBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7SUFDeEIsQ0FBQztJQUNELFNBQVM7UUFDUCxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWM7YUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2pELFNBQVMsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzVCLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEVBQUUsTUFBTSxLQUFLLElBQUksRUFBRTtnQkFDMUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNO3FCQUN4QyxNQUFNLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7cUJBQ3JDLEdBQUcsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3BCLElBQ0UsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFDbkU7b0JBQ0EsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDakQ7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2lCQUNyQjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7UUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsVUFBVSxDQUFVO0lBQ3BCLE9BQU8sQ0FBVTtJQUNqQixTQUFTLENBQU07SUFDZixnQkFBZ0I7UUFDZCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUM3QixDQUFDO1FBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVELGlCQUFpQixDQUFDLFFBQWdCLEVBQUUsTUFBYztRQUNoRCxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGdDQUFnQztRQUNsRSxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGdDQUFnQztRQUM5RCxNQUFNLFNBQVMsR0FBYSxFQUFFLENBQUM7UUFFL0IsK0JBQStCO1FBQy9CLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTtZQUNsRCxPQUFPLFNBQVMsQ0FBQztTQUNsQjtRQUVELG1DQUFtQztRQUNuQyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDeEIsT0FBTyxXQUFXLElBQUksR0FBRyxFQUFFO1lBQ3pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CO1lBQzdFLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsOEJBQThCO1NBQy9FO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixZQUFZO1FBQ1YsTUFBTSxPQUFPLEdBQ2IsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNoRixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUU7WUFDdEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDdEIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFdBQVc7YUFDYix5QkFBeUIsQ0FDeEIsT0FBTyxFQUNQLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUM3QjthQUNBLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9CLEVBQUUsU0FBUyxDQUFDO1lBQ1YsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFO29CQUMzQixJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO29CQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQ3BELENBQUMsR0FBMkIsRUFBRSxJQUFTLEVBQUUsRUFBRTt3QkFDekMsTUFBTSxjQUFjLEdBQUcsSUFBSSxFQUFFLElBQUk7NEJBQy9CLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDakQsQ0FBQyxDQUFDLElBQUksQ0FBQzt3QkFDVCxJQUFJLGNBQWMsRUFBRTs0QkFDbEIsR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHO2dDQUNwQixHQUFHLElBQUk7Z0NBQ1AsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLFlBQVk7b0NBQ25DLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLFdBQVcsRUFBRTtvQ0FDekMsQ0FBQyxDQUFDLEVBQUU7NkJBQ1AsQ0FBQzt5QkFDSDt3QkFDRCxPQUFPLEdBQUcsQ0FBQztvQkFDYixDQUFDLEVBQ0QsRUFBRSxDQUNILENBQUM7aUJBQ0g7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7b0JBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO2lCQUN2QjtZQUNILENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDeEIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNQLENBQUM7SUFHRCxZQUFZLENBQU07SUFDbEIsVUFBVSxDQUFNO0lBQ2hCLGFBQWEsQ0FBQyxHQUFRO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUNELFVBQVUsQ0FBTTtJQUNoQixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxDQUFDLG1DQUFtQztJQUMvRCxpQkFBaUI7SUFDakIsV0FBVyxDQUFNO0lBQ2pCLGdCQUFnQixDQUFNO0lBQ3RCLFlBQVksQ0FBTTtJQUNsQixlQUFlLENBQU07SUFDckIsY0FBYyxHQUE4QyxFQUFFLENBQUM7SUFDL0QsV0FBVyxHQUFRLENBQUMsQ0FBQztJQUNyQixZQUFZLENBQU07SUFDbEIsV0FBVyxDQUFVO0lBQ3JCLFFBQVEsR0FBb0IsTUFBTSxDQUFDO0lBQ25DLFNBQVMsQ0FBQyxLQUFVLEVBQUUsR0FBUTtRQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUN0QixDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxPQUFPLEVBQUUsaUJBQWlCO1lBQzdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25ELEVBQUUsU0FBUyxDQUFDLENBQUMsU0FBYyxFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDM0IsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDakIsbUJBQW1CO2FBQ3BCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQzthQUN4QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNELFNBQVMsR0FBUSxFQUFFLENBQUM7SUFDcEIsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sT0FBTyxHQUNYLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDdEIsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNYLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxXQUFXO2FBQ2IsV0FBVyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUM7YUFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDL0IsRUFBRSxTQUFTLENBQUM7WUFDVixJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUU7b0JBRTNCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNO3dCQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztpQkFDekQ7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7aUJBQ3JCO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUUsQ0FBQztTQUNuQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0QsUUFBUSxDQUFNO0lBQ2QsZUFBZSxDQUFNO0lBQ3JCLG9CQUFvQixHQUFRLEVBQUUsQ0FBQztJQUMvQixnQkFBZ0IsR0FBUSxFQUFFLENBQUM7SUFDM0IsZUFBZSxHQUFRLEVBQUUsQ0FBQztJQUMxQixpQkFBaUI7UUFDZixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQztRQUNsRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDN0IsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMseUJBQXlCO1NBQ2xHO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsU0FBUztRQUNQLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLHlCQUF5QjtRQUN6Qiw2QkFBNkI7UUFDN0Isd0JBQXdCO1FBQ3hCLDRCQUE0QjtRQUM1QiwyQkFBMkI7UUFDM0IsTUFBTSxPQUFPLEdBQ1gsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQy9DLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUN0QixDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ1gsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDekMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzdELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUUvQixJQUFJLENBQUMsV0FBVzthQUNiLGNBQWMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDO2FBQ2xFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDO29CQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDO29CQUM5QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUM7b0JBQzFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQztvQkFDbEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2xELE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBQ3BFLHFEQUFxRDtvQkFDckQsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxZQUFZLElBQUksRUFBRSxDQUFDO29CQUU3RCxrQ0FBa0M7b0JBQ2xDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUN6QyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDOUIsQ0FBQztvQkFDRixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQ3RELFNBQVM7d0JBQ1QsS0FBSyxFQUNILElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQzs0QkFDOUQsRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUM7cUJBQ3hCLENBQUMsQ0FBQyxDQUFDO29CQUNKLDhEQUE4RDtvQkFDOUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO3dCQUMzQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7cUJBQ3BEO29CQUVELHNDQUFzQztvQkFDdEMsSUFBSSxDQUFDLG9CQUFvQjt3QkFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQ3ZCLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQ3BELEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFFaEIsb0JBQW9CO29CQUNwQixNQUFNLGVBQWUsR0FBOEI7d0JBQ2pELGFBQWEsRUFBRSxDQUFDO3dCQUNoQixTQUFTLEVBQUUsQ0FBQzt3QkFDWixRQUFRLEVBQUUsQ0FBQzt3QkFDWCxlQUFlLEVBQUUsQ0FBQzt3QkFDbEIsSUFBSSxFQUFFLENBQUM7cUJBQ1IsQ0FBQztvQkFFRixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7b0JBQ25CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7b0JBRTNCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7d0JBQ3pDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7NEJBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQ2xDLFVBQVUsRUFBRSxDQUFDOzRCQUViLE1BQU0sSUFBSSxHQUNSLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksU0FBUyxDQUFDOzRCQUV0RCxJQUFJLElBQUksS0FBSyxhQUFhLEVBQUU7Z0NBQzFCLGVBQWUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDOzZCQUNsQztpQ0FBTSxJQUFJLElBQUksS0FBSyxVQUFVLEVBQUU7Z0NBQzlCLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDOzZCQUMvQjtpQ0FBTSxJQUFJLElBQUksS0FBSyxlQUFlLEVBQUU7Z0NBQ25DLGVBQWUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDOzZCQUNwQztpQ0FBTSxJQUFHLElBQUksS0FBSyxNQUFNLEVBQUU7Z0NBQ3pCLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDOzZCQUMzQjs0QkFFRCxrREFBa0Q7NEJBQ2xELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFBRTtnQ0FDM0MsZUFBZSxDQUFDLFdBQVcsQ0FBQztvQ0FDMUIsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQzs2QkFDbkM7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBRUgsSUFBSSxDQUFDLFNBQVMsR0FBRzt3QkFDZixhQUFhLEVBQUUsVUFBVTt3QkFDekIsT0FBTyxFQUFFLGVBQWUsQ0FBQyxhQUFhLENBQUM7d0JBQ3ZDLFNBQVMsRUFBRSxlQUFlLENBQUMsV0FBVyxDQUFDO3dCQUN2QyxRQUFRLEVBQUUsZUFBZSxDQUFDLFVBQVUsQ0FBQzt3QkFDckMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxlQUFlLENBQUM7d0JBQzlDLElBQUksRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDO3FCQUM5QixDQUFDO29CQUVGLGlEQUFpRDtvQkFDakQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUVwQixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDckIsdUJBQXVCO2lCQUN4QjtxQkFBTTtvQkFDTCxxQkFBcUI7b0JBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO29CQUN0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7b0JBQzFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7b0JBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO29CQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztvQkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7aUJBQ3BCO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNiLE1BQU0sR0FBRyxHQUNQLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSztvQkFDZixHQUFHLENBQUMsS0FBSztvQkFDVCxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU87b0JBQ25CLEdBQUcsQ0FBQyxPQUFPO29CQUNYLGVBQWUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDdEIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCwyQkFBMkIsQ0FBTTtJQUNqQyxTQUFTO1FBQ1AsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBRTdCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUM1QyxNQUFNLGNBQWMsR0FBRyxhQUFhLEVBQUUsTUFBTSxDQUFDO1FBRTdDLElBQ0UsSUFBSSxLQUFLLFdBQVc7WUFDcEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsRUFDL0M7WUFDQSw4RUFBOEU7WUFDOUUsTUFBTSxpQkFBaUIsR0FBRyxhQUFhLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUM1RCxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDZixHQUFHLEtBQUs7Z0JBQ1IsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLFFBQVEsRUFBRSxJQUFJO2FBQ2YsQ0FBQyxDQUNILENBQUM7WUFFRixxREFBcUQ7WUFDckQsTUFBTSxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQzdDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUM3QixDQUFDO1lBRUYsNkVBQTZFO1lBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqRSxNQUFNLFlBQVksR0FDaEIsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLGFBQWEsQ0FBQztnQkFDekQsTUFBTSxhQUFhLEdBQ2pCLEdBQUcsQ0FBQyxNQUFNLEtBQUssY0FBYztvQkFDN0IsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQyxPQUFPLFlBQVksSUFBSSxhQUFhLENBQUM7WUFDdkMsQ0FBQyxDQUFDLENBQUM7WUFFSCx5REFBeUQ7WUFDekQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsR0FBRyxpQkFBaUIsRUFBRSxHQUFHLGdCQUFnQixDQUFDLENBQUM7WUFFdkUscUVBQXFFO1lBQ3JFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDNUMsTUFBTSxXQUFXLEdBQ2YsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLFdBQVcsQ0FBQztnQkFDdkQsR0FBRyxDQUFDLFFBQVEsR0FBRyxXQUFXLElBQUksR0FBRyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUM7WUFDdkQsQ0FBQyxDQUFDLENBQUM7WUFFSCwrREFBK0Q7WUFDL0QsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxtQkFBbUI7aUJBQ3hELE1BQU0sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUM7aUJBQzVDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWpDLHFFQUFxRTtZQUNyRSxJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQjtpQkFDeEQsTUFBTSxDQUNMLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDWCxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssV0FBVztnQkFDcEQsR0FBRyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQ3pCO2lCQUNBLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbEIsR0FBRyxHQUFHO2dCQUNOLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxJQUFJLGNBQWM7Z0JBQ3BDLFNBQVMsRUFBRSxJQUFJO2FBQ2hCLENBQUMsQ0FBQyxDQUFDO1NBQ1A7YUFBTTtZQUNMLHNGQUFzRjtZQUN0RixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNuRSxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3JELE9BQU8sT0FBTyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FBQztZQUMzRCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO1FBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsQ0FBQyx1Q0FBdUM7UUFDeEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBQ0QsZ0JBQWdCLENBQU07SUFDdEIsbUJBQW1CLENBQU07SUFDekIsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUV4QixXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLHVCQUF1QixDQUFDLEdBQVE7UUFDOUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxDQUFDLDRDQUE0QztRQUM1RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO1FBRTVCLG1FQUFtRTtRQUNuRSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEtBQUssV0FBVyxDQUFDO1FBRS9ELElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztZQUNuQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDLENBQUMsbUNBQW1DO1lBQ2xFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUMsQ0FBQyxlQUFlO1NBQ2pEO1FBRUQsSUFBSSxjQUFjLEdBQVUsRUFBRSxDQUFDO1FBQy9CLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFFbkQsMkZBQTJGO1FBQzNGLElBQUksZUFBZSxFQUFFO1lBQ25CLG1FQUFtRTtZQUNuRSw4Q0FBOEM7WUFDOUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsQ0FBQywyQkFBMkI7WUFDekQsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsQ0FBQywrQkFBK0I7WUFDdkQsNERBQTREO1NBQzdEO2FBQU0sSUFBSSxZQUFZLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDaEYsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUN4QyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxDQUMxQyxDQUFDO2dCQUNGLE9BQU87b0JBQ0wsR0FBRyxLQUFLO29CQUNSLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO29CQUNsQixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07aUJBQ25CLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUNILGNBQWMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFFBQVEsQ0FBQztTQUNyQzthQUFNO1lBQ0wseUVBQXlFO1lBQ3pFLHdEQUF3RDtZQUN4RCxjQUFjLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FDM0MsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLEtBQUssWUFBWSxDQUM3RCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQy9DLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQ3hDLENBQUM7WUFDRiwwRUFBMEU7WUFDMUUsbUVBQW1FO1lBQ25FLElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUM5QyxDQUFDLENBQU0sRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsaUJBQWlCLENBQ3BELENBQUM7YUFDSDtTQUNGO1FBRUQseURBQXlEO1FBQ3pELElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDcEIsSUFDRSxHQUFHLEVBQUUsVUFBVSxLQUFLLFdBQVc7Z0JBQy9CLEdBQUcsRUFBRSxVQUFVLEtBQUssVUFBVTtnQkFDOUIsR0FBRyxFQUFFLFVBQVUsS0FBSyxlQUFlLElBQUksR0FBRyxFQUFFLFVBQVUsS0FBSSxNQUFNLEVBQ2hFO2dCQUNBLElBQ0UsR0FBRyxFQUFFLFVBQVUsS0FBSyxXQUFXO29CQUMvQixHQUFHLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFDbkM7b0JBQ0EsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7aUJBQ3pCO3FCQUFNLElBQ0wsR0FBRyxFQUFFLFVBQVUsS0FBSyxVQUFVO29CQUM5QixHQUFHLEVBQUUsVUFBVSxLQUFLLGVBQWUsSUFBSSxHQUFHLEVBQUUsVUFBVSxLQUFJLE1BQU0sRUFDaEU7b0JBQ0EsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7aUJBQ3pCO3FCQUFNO29CQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2lCQUMxQjtnQkFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLEVBQUUsVUFBVSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQzthQUNyQztTQUNGO2FBQU07WUFDTCxzREFBc0Q7WUFDdEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDMUI7UUFFRCw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFRO1FBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztRQUNuQyxJQUFJLGNBQWMsR0FBVSxFQUFFLENBQUM7UUFDL0IsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUVuRCxJQUFJLFlBQVksS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsRUFBRTtZQUN6RSxnRUFBZ0U7WUFDaEUsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUN4QyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxDQUMxQyxDQUFDO2dCQUNGLE9BQU87b0JBQ0wsR0FBRyxLQUFLO29CQUNSLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO29CQUNsQixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07aUJBQ25CLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUVILGNBQWMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBRXBDLHdDQUF3QztZQUN4QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1lBRTNCLDRCQUE0QjtZQUM1QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsUUFBUSxDQUFDO1NBQ3JDO2FBQU07WUFDTCwwQ0FBMEM7WUFDMUMsY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQzNDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLFlBQVksQ0FDN0QsQ0FBQztZQUVGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUMvQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxDQUN4QyxDQUFDO1lBRUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQzlDLENBQUMsQ0FBTSxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxpQkFBaUIsQ0FDcEQsQ0FBQztTQUNIO1FBR0QscUNBQXFDO1FBQ3JDLElBQ0UsR0FBRyxFQUFFLFVBQVUsS0FBSyxXQUFXO1lBQy9CLEdBQUcsRUFBRSxVQUFVLEtBQUssVUFBVTtZQUM5QixHQUFHLEVBQUUsVUFBVSxLQUFLLGVBQWUsSUFBSSxHQUFHLEVBQUUsVUFBVSxLQUFJLE1BQU0sRUFDaEU7WUFDQSxJQUNFLEdBQUcsRUFBRSxVQUFVLEtBQUssV0FBVztnQkFDL0IsR0FBRyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQ25DO2dCQUNBLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQ3pCO2lCQUFNLElBQ0wsR0FBRyxFQUFFLFVBQVUsS0FBSyxVQUFVO2dCQUM5QixHQUFHLEVBQUUsVUFBVSxLQUFLLGVBQWUsSUFBSSxHQUFHLEVBQUUsVUFBVSxLQUFJLE1BQU0sRUFDaEU7Z0JBQ0EsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7YUFDekI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7YUFDMUI7WUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsRUFBRSxVQUFVLENBQUM7WUFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBR0MsT0FBTyxDQUFDLEdBQVE7UUFDZCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6QixtREFBbUQ7WUFDbkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FDOUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FDeEMsQ0FBQztZQUVGLDZEQUE2RDtZQUM3RCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQzthQUN6RDtpQkFBTTtnQkFDTCx3QkFBd0I7Z0JBQ3hCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDdEQ7U0FDRjtRQUVELHdCQUF3QjtRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO1FBRTVCLHNDQUFzQztRQUN0QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FDeEQsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FDeEMsQ0FBQztRQUVGLGtDQUFrQztRQUNsQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUVsQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsWUFBWSxHQUFRLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQjtJQUMzQyxpQkFBaUIsQ0FBTTtJQUN2QixhQUFhLENBQUMsR0FBUTtRQUN0QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDO1FBQzdCLElBQUksQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUM7UUFFdEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFdkMsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFO1lBQ3hCLElBQ0UsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxXQUFXO2dCQUNoRSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ25EO2dCQUNBLHNGQUFzRjtnQkFDdEYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtvQkFDckUsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO2dCQUN6RCxDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLGdGQUFnRjtnQkFDaEYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztnQkFFckQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDbkUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNyRCxPQUFPLE9BQU8sS0FBSyxhQUFhLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUM7Z0JBQ3BFLENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDNUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7b0JBQ3JCLEdBQUcsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN4QixDQUFDLENBQUMsQ0FBQzthQUNKO1lBQ0QsaURBQWlEO1lBQ2pELElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUE7U0FDL0Q7YUFBTTtZQUNMLGtEQUFrRDtZQUNsRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBR0MsSUFBSSxHQUFRLFVBQVUsQ0FBQztJQUN2QixnQkFBZ0IsQ0FBQyxJQUFTO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWpCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsQ0FBQyx5Q0FBeUM7UUFDMUUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUU3QixtQ0FBbUM7UUFDbkMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUU5QyxJQUFJLFlBQVksS0FBSyxVQUFVLEVBQUU7WUFDL0IsNkRBQTZEO1lBQzdELElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ3ZEO2FBQU07WUFDTCxnRUFBZ0U7WUFDaEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUNqRCxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxZQUFZLENBQy9ELENBQUM7U0FDSDtRQUNELFNBQVM7UUFDVCxxRUFBcUU7UUFDckUsMkVBQTJFO1FBQzNFLHVCQUF1QjtRQUN2QixPQUFPO1FBQ1AsSUFBSTtRQUVKLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUM7UUFFNUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBQ0QsV0FBVyxDQUFDLElBQXFCO1FBQy9CLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBRUQsOEJBQThCO0lBQzVCLGNBQWMsQ0FBQyxZQUFvQjtRQUNqQyxJQUFJLENBQUMsWUFBWSxJQUFJLFlBQVksS0FBSyxDQUFDO1lBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3RFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sSUFBSSxHQUFHLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUgscUJBQXFCLEdBQThDLEVBQUUsQ0FBQztJQUU5RCwwQkFBMEI7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN0RSxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1lBQ2hDLE9BQU87U0FDUjtRQUVELE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBaUIsQ0FBQztRQUVyQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDNUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUM7WUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNqQixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2pCO1lBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvQyxTQUFTLEVBQUUsR0FBRztZQUNkLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7U0FDekIsQ0FBQyxDQUFDLENBQUM7UUFFSixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUN0RCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDO2lCQUMvQyxNQUFNLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2lCQUN2RSxHQUFHLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3BCLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxJQUFJLElBQUk7Z0JBQ25DLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFJLEVBQUU7YUFDeEIsQ0FBQyxDQUFDLENBQUM7WUFDTixPQUFPO1NBQ1I7UUFFRCxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQWlCLENBQUM7UUFFckMsQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2hELE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxTQUFTLElBQUksSUFBSSxDQUFDO1lBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNqQjtZQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLFNBQVMsRUFBRSxHQUFHO1lBQ2QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRTtTQUN6QixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxHQUFRLEVBQUUsR0FBUTtRQUNqQyxnRkFBZ0Y7UUFDaEYsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUNyRSxzREFBc0Q7WUFDdEQsd0RBQXdEO1lBQ3hELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLE9BQU87U0FDUjtRQUVELDhFQUE4RTtRQUM5RSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssV0FBVyxFQUFFO1lBQ3JFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNuQzthQUFNLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLFdBQVcsRUFBRTtZQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsd0NBQXdDO1NBQzVEO0lBQ0gsQ0FBQztJQUVELGNBQWMsR0FBUSxJQUFJLENBQUMsQ0FBQywrREFBK0Q7SUFFM0Ysa0JBQWtCLENBQUMsUUFBYSxFQUFFLFNBQWM7UUFDOUMscURBQXFEO1FBQ3JELElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdkQsUUFBUSxFQUFFLElBQUk7WUFDZCxJQUFJLEVBQUUsSUFBSTtZQUNWLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCwyQkFBMkIsR0FBUSxFQUFFLENBQUM7SUFFdEMsd0JBQXdCLENBQUMsR0FBUTtRQUMvQixJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzlDLE9BQU87U0FDUjtRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7UUFDakQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsSUFBSSxDQUFDLENBQUM7UUFDMUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDcEQsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUM1RCxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FDN0IsQ0FBQyxNQUFNLENBQUM7UUFFVCxNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFFakMsbURBQW1EO1FBQ25ELElBQ0UsVUFBVTtZQUNWLHNCQUFzQixHQUFHLGtCQUFrQixJQUFJLGFBQWEsRUFDNUQ7WUFDQSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FDeEIsdUJBQXVCLGFBQWEsWUFDbEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsSUFBSSxLQUMvQyxxQkFBcUIsQ0FDdEIsQ0FBQztZQUNGLE9BQU87U0FDUjtRQUVELGtDQUFrQztRQUNsQyxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUM3QixHQUFHLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFFN0IscUNBQXFDO1FBQ3JDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsbUJBQW1CO2FBQ3hELE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUNwQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkIsR0FBRyxJQUFJO1lBQ1AsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU07WUFDcEQsU0FBUyxFQUFFLElBQUk7U0FDaEIsQ0FBQyxDQUFDLENBQUM7UUFFTix3REFBd0Q7UUFDeEQsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQscUJBQXFCLENBQUMsR0FBUSxFQUFFLEdBQVEsRUFBRSxJQUFZO1FBQ3BELElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRTtZQUN4QixnREFBZ0Q7WUFDaEQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLDJDQUEyQztZQUMzQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFO2dCQUNyQixHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO2FBQ25DO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekIsa0NBQWtDO0lBQ3BDLENBQUM7SUFDRCxNQUFNO1FBQ0osMENBQTBDO1FBQzFDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUM7UUFFdEMsa0VBQWtFO1FBQ2xFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELEdBQUcsR0FBRztZQUNOLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsTUFBTSxFQUFFLElBQUksRUFBRSx1QkFBdUI7WUFDckMsaUNBQWlDO1NBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUosd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBRXZCLDJDQUEyQztRQUMzQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFFaEMsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUNELFNBQVMsQ0FBTTtJQUNTLFNBQVMsQ0FBYTtJQUM5QyxJQUFJLENBQUMsUUFBYTtRQUNoQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3RELFFBQVEsRUFBRSxJQUFJO1lBQ2QsSUFBSSxFQUFFLElBQUk7WUFDVixRQUFRLEVBQUUsUUFBUTtZQUNsQixRQUFRLEVBQUUsS0FBSyxFQUFFLDZCQUE2QjtTQUMvQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztJQUM1QixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFL0IsSUFBSSxDQUFDLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsV0FBVyxDQUFDLFFBQWE7UUFDdkIsSUFBSSxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBRXpCLElBQUksUUFBUSxLQUFLLFdBQVcsRUFBRTtZQUM1QixlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQjtpQkFDdkMsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQztpQkFDM0MsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUU7Z0JBQ3RDLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxJQUFJLEVBQUU7Z0JBQzlCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRTtnQkFDOUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRTtnQkFDNUIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO2dCQUN0QixVQUFVLEVBQUUsV0FBVztnQkFDdkIsU0FBUyxFQUFFLElBQUk7YUFDaEIsQ0FBQyxDQUFDLENBQUM7U0FDUDtRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUVsQyxNQUFNLEdBQUcsR0FBRztZQUNWLE9BQU8sRUFDTCxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQy9DLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDdEIsQ0FBQyxDQUFDLElBQUk7WUFDVixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFO1lBQ2pDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxJQUFJLENBQUM7WUFDeEIsVUFBVSxFQUFFLFFBQVE7WUFDcEIsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLElBQUksRUFBRTtZQUMvQixTQUFTLEVBQUUsSUFBSTtZQUNmLGNBQWMsRUFBRSxlQUFlO1lBQy9CLFdBQVcsRUFBRSxHQUFHLEVBQUUsV0FBVyxJQUFJLFVBQVU7WUFDM0MsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLElBQUksR0FBRyxFQUFFLFFBQVEsSUFBSSxFQUFFO1lBQ2hELFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxJQUFJLEVBQUU7WUFDN0IsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLElBQUksRUFBRTtZQUM3QixRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFO1lBQ2hDLElBQUksRUFBRSxLQUFLO1NBQ1osQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXO2FBQ2IsVUFBVSxDQUFDLEdBQUcsQ0FBQzthQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQ3hCLEdBQUcsRUFBRSxPQUFPLElBQUksNkJBQTZCLENBQzlDLENBQUM7b0JBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDakIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNwQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7b0JBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO2lCQUN4QjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2lCQUM5QztZQUNILENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDbEIsTUFBTSxHQUFHLEdBQ1AsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLEVBQUUsT0FBTyxJQUFJLGVBQWUsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEMsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjLEdBQThCO1FBQzFDLFNBQVMsRUFBRSxxQkFBcUI7UUFDaEMsUUFBUSxFQUFFLHlCQUF5QjtRQUNuQyxlQUFlLEVBQUUsd0JBQXdCO1FBQ3pDLGFBQWEsRUFBRSxzQkFBc0I7UUFDckMsSUFBSSxFQUFFLGVBQWU7S0FDdEIsQ0FBQztJQUVGLGlCQUFpQixHQUFRLElBQUksQ0FBQyxDQUFDLG1DQUFtQztJQUVsRSxvQkFBb0IsQ0FBQyxRQUFRLEdBQUcsS0FBSyxJQUFRLENBQUM7SUFFcEIsV0FBVyxDQUFhO0lBQ2xCLGlCQUFpQixDQUFhO0lBQzlELE1BQU07UUFDSixNQUFNLE9BQU8sR0FBUTtZQUNuQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUNwRSxVQUFVLEVBQUUsb0JBQW9CO1lBQ2hDLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLGNBQWMsRUFBRSxDQUFDO1lBQ2pCLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLGlCQUFpQixFQUFFLENBQUM7WUFDcEIsU0FBUyxFQUFDLENBQUM7WUFDWCxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFO1lBQ2hDLGVBQWUsRUFBRSxFQUFFO1lBQ25CLFlBQVksRUFBRSxFQUFFO1lBQ2hCLFFBQVEsRUFBRSxFQUFFO1lBQ1osSUFBSSxFQUFFLEVBQUU7U0FDVCxDQUFDO1FBRUYsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFFMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO1lBQzFDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDcEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUM7WUFFMUMsa0VBQWtFO1lBQ2xFLDhDQUE4QztZQUU5QyxxQkFBcUI7WUFDckIseUJBQXlCO1lBQ3pCLElBQUk7WUFFSixpQkFBaUI7WUFDakIsSUFBSSxJQUFJLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7Z0JBQ2xFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0I7cUJBQ3ZDLE1BQU0sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztxQkFDbkMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNsQixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUU7b0JBQ3RDLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtvQkFDdEIsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLElBQUksR0FBRyxFQUFFLFFBQVEsSUFBSSxFQUFFO29CQUNoRCxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7b0JBQ3RCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztvQkFDeEIsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO2lCQUN6QixDQUFDLENBQUMsQ0FBQztnQkFFTixJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUN6QixPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQzt3QkFDM0IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO3dCQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7d0JBQ3ZCLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxRQUFRLElBQUksRUFBRTt3QkFDbEQsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO3dCQUN2QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7d0JBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzt3QkFDekIsSUFBSSxFQUFFLFVBQVU7cUJBQ2pCLENBQUMsQ0FBQztvQkFFSCxPQUFPLENBQUMsY0FBYyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUM7aUJBQzdDO2FBQ0Y7WUFFRCxXQUFXO2lCQUNOLElBQUksSUFBSSxLQUFLLFVBQVUsSUFBSSxTQUFTLEVBQUU7Z0JBQ3pDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO29CQUNwQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07b0JBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdkIsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFLFFBQVEsSUFBSSxFQUFFO29CQUNsRCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3ZCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztvQkFDekIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2lCQUMxQixDQUFDLENBQUM7Z0JBRUgsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQ3pCO1lBRUQsZUFBZTtpQkFDVixJQUFJLElBQUksS0FBSyxlQUFlLElBQUksU0FBUyxFQUFFO2dCQUM5QyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztvQkFDeEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO29CQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3ZCLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxRQUFRLElBQUksRUFBRTtvQkFDbEQsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29CQUN2QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7b0JBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztpQkFDMUIsQ0FBQyxDQUFDO2dCQUVILE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2FBQzdCO2lCQUNJLElBQUksSUFBSSxLQUFLLE1BQU0sSUFBSSxTQUFTLEVBQUU7Z0JBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUNoQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07b0JBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdkIsU0FBUyxFQUFHLElBQUksRUFBRSxTQUFTLElBQUksSUFBSSxFQUFFLFFBQVEsSUFBSSxFQUFFO29CQUNuRCxRQUFRLEVBQUcsSUFBSSxDQUFDLFFBQVE7b0JBQ3hCLFNBQVMsRUFBRyxJQUFJLENBQUMsU0FBUztvQkFDMUIsU0FBUyxFQUFHLElBQUksQ0FBQyxTQUFTO2lCQUMzQixDQUFDLENBQUM7Z0JBRUgsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ3JCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDO1FBRXRELHNCQUFzQjtRQUV0QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUN4RCxRQUFRLEVBQUUsSUFBSTtZQUNkLElBQUksRUFBRSxJQUFJO1lBQ1YsUUFBUSxFQUFFLFFBQVE7WUFDbEIsUUFBUSxFQUFFLEtBQUs7U0FDaEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELFdBQVcsQ0FBTTtJQUNqQixhQUFhLENBQU07SUFDbkIsWUFBWTtRQUNWLGdFQUFnRTtRQUNoRSxNQUFNLE9BQU8sR0FBRztZQUNkLFVBQVUsRUFBRSxvQkFBb0I7WUFDaEMsT0FBTyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPO1lBQ3ZDLFVBQVUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVTtZQUM3QyxJQUFJLEVBQUUsUUFBUTtZQUNkLElBQUksRUFBRSxLQUFLO1NBQ1osQ0FBQTtRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDdkMsSUFBSSxDQUFDLFdBQVc7YUFDYixrQkFBa0IsQ0FBQyxPQUFPLENBQUM7YUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDO1lBQ1QsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFO29CQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FDeEIsR0FBRyxFQUFFLE9BQU8sSUFBSSw2QkFBNkIsQ0FDOUMsQ0FBQztvQkFDRixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztvQkFDdkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNqQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO2lCQUNyQjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO29CQUM3QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7aUJBQ3JCO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNsQixNQUFNLEdBQUcsR0FDUCxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUs7b0JBQ2hCLEdBQUcsQ0FBQyxLQUFLO29CQUNULEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTztvQkFDbkIsR0FBRyxDQUFDLE9BQU87b0JBQ1gsZUFBZSxDQUFDO2dCQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELGdDQUFnQztJQUNoQyxtRkFBbUY7SUFDbkYsc0VBQXNFO0lBQ3RFLHVCQUF1QjtJQUN2QixnSEFBZ0g7SUFDaEgsZ0JBQWdCO0lBRWhCLG1GQUFtRjtJQUVuRixtRUFBbUU7SUFDbkUsa0RBQWtEO0lBQ2xELFNBQVM7SUFFVCwwQkFBMEI7SUFDMUIsNENBQTRDO0lBQzVDLHFFQUFxRTtJQUNyRSxvQ0FBb0M7SUFDcEMsbUdBQW1HO0lBQ25HLGFBQWE7SUFFYixnQ0FBZ0M7SUFDaEMsb0dBQW9HO0lBQ3BHLDhCQUE4QjtJQUM5QiwyREFBMkQ7SUFDM0QsWUFBWTtJQUVaLDZCQUE2QjtJQUM3QixrQ0FBa0M7SUFDbEMsY0FBYztJQUVkLGtCQUFrQjtJQUNsQixVQUFVO0lBRVYsd0NBQXdDO0lBQ3hDLDhCQUE4QjtJQUM5QixrREFBa0Q7SUFDbEQsb0JBQW9CO0lBQ3BCLDZCQUE2QjtJQUM3Qix1Q0FBdUM7SUFDdkMsY0FBYztJQUNkLFVBQVU7SUFDVixlQUFlO0lBQ2YsMEJBQTBCO0lBQzFCLG9GQUFvRjtJQUNwRixvREFBb0Q7SUFDcEQsV0FBVztJQUNYLFFBQVE7SUFDUixNQUFNO0lBRU4sa0RBQWtEO0lBQ2xELHFDQUFxQztJQUNyQyxJQUFJO0lBRUosZ0NBQWdDO0lBRWhDLCtCQUErQjtJQUMvQixnQ0FBZ0M7SUFDaEMsNkZBQTZGO0lBQzdGLElBQUk7SUFFSixXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ0ssVUFBVSxDQUFhO0lBQ2hELGtCQUFrQixDQUFDLEdBQVEsRUFBRSxJQUFTO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdkQsUUFBUSxFQUFFLElBQUk7WUFDZCxJQUFJLEVBQUUsSUFBSTtZQUNWLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQywyQ0FBMkM7UUFDdkUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN2QyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFFbkUsd0JBQXdCO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLFNBQVMsR0FBRyxDQUFDLElBQUksWUFBWSxHQUFHLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFFL0UsNkJBQTZCO1FBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QyxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRXpCLDJEQUEyRDtRQUMzRCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFM0IsK0JBQStCO1FBQy9CLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdEQsTUFBTSxVQUFVLEdBQUcsVUFBVSxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUVuRCw0Q0FBNEM7UUFDNUMsTUFBTSxhQUFhLEdBQUcsVUFBVSxJQUFJLENBQUMsSUFBSSxVQUFVLElBQUksQ0FBQyxDQUFDO1FBRXpELE9BQU8sUUFBUSxJQUFJLGFBQWEsQ0FBQztJQUNuQyxDQUFDO0lBRUQsaUJBQWlCLEdBQVcsQ0FBQyxDQUFDO0lBQzlCLElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsYUFBYSxDQUFDLFNBQTJCO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDO1FBRTNDLElBQUksU0FBUyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ2hELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzFCO2FBQU0sSUFBSSxTQUFTLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6RCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUMxQjtRQUVELHdCQUF3QjtRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUVyRSwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUNwRCxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsaUJBQWlCLENBQ2pELENBQUM7SUFDSixDQUFDO0lBRUQsK0NBQStDO0lBQy9DLGtCQUFrQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvQixNQUFNLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxhQUFhLElBQUksQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsMkJBQTJCO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLE1BQU0sY0FBYyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0UsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLGtCQUFrQixJQUFJLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsaURBQWlEO0lBQ2pELG9CQUFvQjtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLEdBQUcsQ0FBQztRQUNqQyxNQUFNLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsUUFBUSxJQUFJLENBQUMsQ0FBQztRQUV4RSxJQUFJLENBQUMsZUFBZSxJQUFJLGVBQWUsS0FBSyxDQUFDO1lBQUUsT0FBTyxHQUFHLENBQUM7UUFFMUQsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzdELElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sR0FBRyxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUM7U0FDbEM7YUFBTSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDcEIsT0FBTyxHQUFHLEtBQUssSUFBSSxDQUFDO1NBQ3JCO2FBQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO1lBQ25CLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQztTQUN2QjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxHQUFHLENBQUM7UUFDakMsTUFBTSxjQUFjLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFlBQVksQ0FBQztRQUM5RCxPQUFPLE1BQU0sSUFBSSxHQUFHLENBQUM7SUFDdkIsQ0FBQztJQUVELDRCQUE0QjtJQUM1QixXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDbkMsTUFBTSxjQUFjLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsSUFBSSxDQUFDLENBQUM7UUFDakUsT0FBTyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsY0FBYyxDQUFDLElBQVk7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDaEYsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDeEYsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxjQUFjO1FBQ1osTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssUUFBUSxDQUFDO0lBQzlELENBQUM7SUFFRCxtQ0FBbUM7SUFDbkMsY0FBYztRQUNaLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN0QyxPQUFPLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLFFBQVEsQ0FBQztJQUM5RCxDQUFDO0lBRUQsK0RBQStEO0lBQy9ELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQ3ZFLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdGLENBQUM7SUFFRCxpREFBaUQ7SUFDakQsc0JBQXNCO1FBQ3BCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzVDLE9BQU8sVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3RELENBQUM7SUFFRCxtRUFBbUU7SUFDbkUsb0JBQW9CO1FBQ2xCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzVDLE9BQU8sVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BILENBQUM7SUFFRCw0REFBNEQ7SUFDNUQsY0FBYyxDQUFDLElBQVMsRUFBRSxTQUFpQjtRQUN6QyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUN4QixPQUFPLENBQUMsQ0FBQztTQUNWO1FBRUQsMENBQTBDO1FBQzFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUM7WUFDM0UsT0FBTyxTQUFTLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztTQUM5QjtRQUVELG1DQUFtQztRQUNuQyxNQUFNLE1BQU0sR0FBOEI7WUFDeEMsV0FBVyxFQUFFLGdCQUFnQjtZQUM3QixVQUFVLEVBQUUsZUFBZTtZQUMzQixNQUFNLEVBQUUsV0FBVztZQUNuQixjQUFjLEVBQUUsbUJBQW1CO1NBQ3BDLENBQUM7UUFFRixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEYsaUNBQWlDO0lBQ2pDLHNCQUFzQixDQUFDLElBQVk7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFFLEVBQUU7WUFDakYsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUVELG1DQUFtQztRQUNuQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQzlGLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDN0IsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLEtBQUssQ0FBQyxFQUFFO1lBQ2pHLE9BQU8sQ0FBQyxDQUFDO1NBQ1Y7UUFFRCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUMxQyxpRUFBaUU7UUFDakUsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRW5CLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QiwrREFBK0Q7WUFDL0QsTUFBTSxVQUFVLEdBQUcsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNyRSxVQUFVLEdBQUcsS0FBSztpQkFDZixNQUFNLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUN0RCxNQUFNLENBQUMsQ0FBQyxHQUFXLEVBQUUsSUFBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3BFO1FBQ0QsU0FBUztRQUNULGdEQUFnRDtRQUNoRCxnREFBZ0Q7UUFDaEQsK0NBQStDO1FBQy9DLDJDQUEyQztRQUMzQyxpREFBaUQ7UUFDakQsSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDOUQsUUFBUSxFQUFFLElBQUk7WUFDZCxJQUFJLEVBQUUsSUFBSTtZQUNWLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksT0FBTyxHQUFHO1lBQ1osT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ3hGLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUU7U0FDbEMsQ0FBQztRQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDcEQsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU87YUFDVCxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7YUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDL0IsRUFBRSxTQUFTLENBQUM7WUFDVixJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUU7b0JBQzNCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsNEJBQTRCLENBQUMsQ0FBQztpQkFDMUQ7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMseUJBQXlCLENBQUMsQ0FBQztpQkFDckQ7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsTUFBTSxHQUFHLEdBQ1AsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLO29CQUNoQixHQUFHLENBQUMsS0FBSztvQkFDVCxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU87b0JBQ25CLEdBQUcsQ0FBQyxPQUFPO29CQUNYLGVBQWUsQ0FBQztnQkFDbEIsT0FBTyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLHdCQUF3QixDQUFDLENBQUM7WUFDNUQsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUVQLENBQUM7SUFFRCw2Q0FBNkM7SUFDN0MsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbEMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxnQ0FBZ0M7SUFDaEMsdUJBQXVCO1FBQ3JCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2hELE9BQU8sY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbEUsQ0FBQzt3R0FoL0NVLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLDZiQ3BCN0Isa2trTEFtaUVjOzs0RkQvZ0VELGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxjQUFjO3VPQTI1QkEsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQTZGSSxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ1EsaUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQjtnQkFvT0wsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LEVsZW1lbnRSZWYsVmlld0NoaWxkXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBUcmFmZmljUnZwc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdHJhZmZpYy1ydnBzLnNlcnZpY2VcIjtcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XG5pbXBvcnQgeyBUcmFmZmljU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy90cmFmZmljLnNlcnZpY2VcIjtcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktc2hhcmVkXCI7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibGliLWltZy1ydnBzXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vaW1nLXJ2cHMuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmw6IFwiLi9pbWctcnZwcy5jb21wb25lbnQuc2Nzc1wiLFxufSlcbmV4cG9ydCBjbGFzcyBJbWdSdnBzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBoZWFkZXJEYXRhOiBhbnk7XG4gIHN0b3JlSWRhcnJheTogYW55O1xuICBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgbm9EYXRhID0gZmFsc2U7XG4gIG5vcm1hbGl6ZTogYW55O1xuICBvdmVyYWxsQ2FyZERhdGE6IGFueSA9IFtdO1xuICBjYXJkRGF0YU1hcDogeyBbZGF0ZTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgdGlja2V0UmV2aWV3U3RhdHVzOiBhbnkgPSBbXTtcbiAgdXNlckNvbW1lbnQ6IGFueTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBUcmFmZmljU2VydmljZSxcbiAgICBwdWJsaWMgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG4gICAgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgcnZwc1NlcnZpY2U6IFRyYWZmaWNSdnBzU2VydmljZVxuICApIHt9XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG4gIGlzQWNjb3JkaW9uRXhwYW5kZWQgPSB0cnVlO1xuICB0b2dnbGVBY2NvcmRpb24oKSB7XG4gICAgdGhpcy5pc0FjY29yZGlvbkV4cGFuZGVkID0gIXRoaXMuaXNBY2NvcmRpb25FeHBhbmRlZDtcbiAgfVxuICB1c2Vyczphbnk7XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0SW5pdGFsKCk7XG4gICAgY29uc3QgdXNlckRhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyLWluZm9cIikgfHwgXCJ7fVwiKTtcbiAgICB0aGlzLnVzZXJzID0gdXNlckRhdGE7XG4gIH1cbiAgZ2V0SW5pdGFsKCkge1xuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWVcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSwgZGVib3VuY2VUaW1lKDEwMCkpXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGEgOicsIGRhdGEpO1xuICAgICAgICBpZiAoZGF0YSAhPT0gbnVsbCB8fCBkYXRhPy5jbGllbnQgIT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmhlYWRlckRhdGEgPSBkYXRhO1xuICAgICAgICAgIHRoaXMuc3RvcmVJZGFycmF5ID0gdGhpcy5oZWFkZXJEYXRhPy5zdG9yZXNcbiAgICAgICAgICAgIC5maWx0ZXIoKHN0b3JlOiBhbnkpID0+IHN0b3JlLmNoZWNrZWQpXG4gICAgICAgICAgICAubWFwKChzdG9yZTogYW55KSA9PiBzdG9yZS5zdG9yZUlkKTtcbiAgICAgICAgICB0aGlzLmJhY2tUb0Zvb3RmYWxsKCk7XG4gICAgICAgICAgdGhpcy5kaXNwbGF5RGF0ZVJhbmdlKCk7XG4gICAgICAgICAgdGhpcy5sb2FkQ2FyZERhdGEoKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmhlYWRlckRhdGE/LmRhdGU/LnN0YXJ0RGF0ZSA9PT0gdGhpcy5oZWFkZXJEYXRhPy5kYXRlPy5lbmREYXRlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmJhY2tuYXYgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheURhdGVSYW5nZSgpO1xuICAgICAgICAgICAgdGhpcy5nZXRpbWFnZXMoMCwgdGhpcy5oZWFkZXJEYXRhLmRhdGUuZW5kRGF0ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9sZGVyVmlldyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmJhY2tuYXYgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBiYWNrVG9Gb290ZmFsbCgpIHtcbiAgICB0aGlzLmZvbGRlclZpZXcgPSB0cnVlO1xuICAgIHRoaXMuZ2V0UnZwc0xpc3QgPSBbXTtcbiAgICB0aGlzLmdldFJ2cHNJbWFnZUxpc3QgPSBbXTtcbiAgICB0aGlzLm9iamVjdHNBcnJheSA9IFtdO1xuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XG4gICAgdGhpcy50eXBlID0gXCJmb290ZmFsbFwiO1xuICAgIHRoaXMuc2VsZWN0ZWRUaW1lID0gXCJcIjtcbiAgICB0aGlzLnNwbGl0U2NyZWVuRW5hYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0SW1hZ2VBcnJheSA9IG51bGw7XG4gICAgdGhpcy5yZW1haW5pbmdJbWFnZUFycmF5ID0gW107XG4gICAgdGhpcy5yZW1haW5pbmdJbWFnZXNHcm91cHMgPSBbXTtcbiAgfVxuICBmb2xkZXJWaWV3OiBib29sZWFuO1xuICBiYWNrbmF2OiBib29sZWFuO1xuICBkYXRlQXJyYXk6IGFueTtcbiAgZGlzcGxheURhdGVSYW5nZSgpIHtcbiAgICBjb25zdCBkYXRlcyA9IHRoaXMuZ2V0RGF0ZVJhbmdlQXJyYXkoXG4gICAgICB0aGlzLmhlYWRlckRhdGEuZGF0ZS5zdGFydERhdGUsXG4gICAgICB0aGlzLmhlYWRlckRhdGEuZGF0ZS5lbmREYXRlXG4gICAgKTtcbiAgICB0aGlzLmRhdGVBcnJheSA9IGRhdGVzO1xuICB9XG5cbiAgZ2V0RGF0ZVJhbmdlQXJyYXkoZnJvbURhdGU6IHN0cmluZywgdG9EYXRlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZShmcm9tRGF0ZSk7IC8vIENvbnZlcnQgc3RyaW5nIHRvIERhdGUgb2JqZWN0XG4gICAgY29uc3QgZW5kID0gbmV3IERhdGUodG9EYXRlKTsgLy8gQ29udmVydCBzdHJpbmcgdG8gRGF0ZSBvYmplY3RcbiAgICBjb25zdCBkYXRlQXJyYXk6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgZGF0ZXMgYXJlIHZhbGlkXG4gICAgaWYgKGlzTmFOKHN0YXJ0LmdldFRpbWUoKSkgfHwgaXNOYU4oZW5kLmdldFRpbWUoKSkpIHtcbiAgICAgIHJldHVybiBkYXRlQXJyYXk7XG4gICAgfVxuXG4gICAgLy8gTG9vcCBmcm9tIHN0YXJ0IGRhdGUgdG8gZW5kIGRhdGVcbiAgICBsZXQgY3VycmVudERhdGUgPSBzdGFydDtcbiAgICB3aGlsZSAoY3VycmVudERhdGUgPD0gZW5kKSB7XG4gICAgICBkYXRlQXJyYXkucHVzaChjdXJyZW50RGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSk7IC8vIEZvcm1hdCBZWVlZLU1NLUREXG4gICAgICBjdXJyZW50RGF0ZS5zZXREYXRlKGN1cnJlbnREYXRlLmdldERhdGUoKSArIDEpOyAvLyBJbmNyZW1lbnQgdGhlIGRhdGUgYnkgMSBkYXlcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZUFycmF5O1xuICB9XG5cbiAgLy8gTG9hZCBjYXJkIGRhdGFcbiAgbG9hZENhcmREYXRhKCkge1xuICAgIGNvbnN0IHN0b3JlSWQgPVxuICAgIHRoaXMuc3RvcmVJZGFycmF5ICYmIHRoaXMuc3RvcmVJZGFycmF5Lmxlbmd0aCA+IDAgPyB0aGlzLnN0b3JlSWRhcnJheVswXSA6IG51bGw7XG4gICAgaWYgKCFzdG9yZUlkIHx8ICF0aGlzLmhlYWRlckRhdGE/LmRhdGUpIHtcbiAgICAgIHRoaXMub3ZlcmFsbENhcmREYXRhID0gW107XG4gICAgICB0aGlzLmNhcmREYXRhTWFwID0ge307XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5ydnBzU2VydmljZVxuICAgICAgLmdldEltYWdlRGlyZWN0b3J5Q2FyZERhdGEoXG4gICAgICAgIHN0b3JlSWQsXG4gICAgICAgIHRoaXMuaGVhZGVyRGF0YS5kYXRlLnN0YXJ0RGF0ZSxcbiAgICAgICAgdGhpcy5oZWFkZXJEYXRhLmRhdGUuZW5kRGF0ZVxuICAgICAgKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgPy5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmFsbENhcmREYXRhID0gcmVzPy5kYXRhIHx8IFtdO1xuICAgICAgICAgICAgdGhpcy5jYXJkRGF0YU1hcCA9ICh0aGlzLm92ZXJhbGxDYXJkRGF0YSB8fCBbXSkucmVkdWNlKFxuICAgICAgICAgICAgICAoYWNjOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkRGF0ZSA9IGl0ZW0/LmRhdGVcbiAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoaXRlbS5kYXRlKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXVxuICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgYWNjW25vcm1hbGl6ZWREYXRlXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgdGlja2V0U3RhdHVzTG93ZXI6IGl0ZW0/LnRpY2tldFN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgID8gU3RyaW5nKGl0ZW0udGlja2V0U3RhdHVzKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge31cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmFsbENhcmREYXRhID0gW107XG4gICAgICAgICAgICB0aGlzLmNhcmREYXRhTWFwID0ge307XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBsb2FkQ2FyZERhdGE6XCIsIGVycik7XG4gICAgICAgICAgdGhpcy5vdmVyYWxsQ2FyZERhdGEgPSBbXTtcbiAgICAgICAgICB0aGlzLmNhcmREYXRhTWFwID0ge307XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG5cbiAgc2VsZWN0ZWRUaW1lOiBhbnk7XG4gIGZvbGRlck5hbWU6IGFueTtcbiAgc2VsZWN0ZWRUaW1lcyh2YWw6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRUaW1lID0gdmFsO1xuICAgIHRoaXMuZm9sZGVyTmFtZSA9IHZhbDtcbiAgICB0aGlzLmZvbGRlclZpZXcgPSBmYWxzZTtcbiAgICB0aGlzLnR5cGUgPSB0aGlzLnR5cGU7XG4gICAgdGhpcy5nZXRSZXZvcHMoKTtcbiAgfVxuICBmb2xkZXJEYXRlOiBhbnk7XG4gIGltYWdlRmxvdyA9IGZhbHNlO1xuICBzcGxpdFNjcmVlbkVuYWJsZWQgPSBmYWxzZTsgLy8gRmxhZyB0byBlbmFibGUgc3BsaXQtc2NyZWVuIHZpZXdcbiAgLy8gZ2V0IFJldm9wcyBBcGlcbiAgZ2V0UnZwc0xpc3Q6IGFueTtcbiAgZ2V0UnZwc0ltYWdlTGlzdDogYW55O1xuICBvYmplY3RzQXJyYXk6IGFueTtcbiAgaW1hZ2VzQXJyYXlEYXRhOiBhbnk7XG4gIGxpc3RWaWV3R3JvdXBzOiBBcnJheTx7IHRpbWVSYW5nZTogc3RyaW5nOyBkYXRhOiBhbnlbXSB9PiA9IFtdO1xuICBzZWxlY3RJbmRleDogYW55ID0gMDtcbiAgZm9vdGZhbGxEYXRlOiBhbnk7XG4gIGxlbmd0aFZhbHVlOiBib29sZWFuO1xuICB2aWV3TW9kZTogXCJncmlkXCIgfCBcImxpc3RcIiA9IFwiZ3JpZFwiO1xuICBnZXRpbWFnZXMoaW5kZXg6IGFueSwgb2JqOiBhbnkpIHtcbiAgICB0aGlzLm9iamVjdHNBcnJheSA9IFtdO1xuICAgIHRoaXMuc2VsZWN0SW5kZXggPSBpbmRleDtcbiAgICB0aGlzLmZvbGRlckRhdGUgPSBvYmo7XG4gICAgKHRoaXMuZm9vdGZhbGxEYXRlID0gb2JqKSwgKHRoaXMuZm9sZGVyVmlldyA9IGZhbHNlKTtcbiAgICB0aGlzLnNlcnZpY2U/Lmlzbm9ybWFsaXplU291cmNlXG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLCBkZWJvdW5jZVRpbWUoMzAwKSlcbiAgICAgID8uc3Vic2NyaWJlKChub3JtYWxpemU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcbiAgICAgICAgaWYgKCFub3JtYWxpemUpIHtcbiAgICAgICAgICB0aGlzLmdldFJ2cHNMaXN0ID0gW107XG4gICAgICAgICAgdGhpcy5nZXRSdnBzSW1hZ2VMaXN0ID0gW107XG4gICAgICAgICAgdGhpcy5vYmplY3RzQXJyYXkgPSBbXTtcbiAgICAgICAgICB0aGlzLmdldFJldm9wcygpO1xuICAgICAgICAgIC8vIHRoaXMuZ2V0VG90YWwoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxlbmd0aFZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5vYmplY3RzQXJyYXkgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cbiAgY291bnREYXRhOiBhbnkgPSBbXTtcbiAgZ2V0VG90YWwoKSB7XG4gICAgdGhpcy5jb3VudERhdGEgPSBbXTtcbiAgICBjb25zdCBzdG9yZUlkID1cbiAgICAgIHRoaXMuc3RvcmVJZGFycmF5ICYmIHRoaXMuc3RvcmVJZGFycmF5Lmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLnN0b3JlSWRhcnJheVswXVxuICAgICAgICA6IG51bGw7XG4gICAgY29uc3QgZGF0ZVN0cmluZyA9IHRoaXMuZm9sZGVyRGF0ZSB8fCBcIlwiO1xuICAgIHRoaXMucnZwc1NlcnZpY2VcbiAgICAgIC5nZXRUb3RhbFZhbChzdG9yZUlkLCBkYXRlU3RyaW5nKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgPy5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0UnZwc0xpc3Q/Lmxlbmd0aCkgdGhpcy5jb3VudERhdGEgPSByZXMuZGF0YTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb3VudERhdGEgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7fSxcbiAgICAgIH0pO1xuICB9XG4gIGltYWdlVXJsOiBhbnk7XG4gIHJldm9wc1R5cGVDb3VudDogYW55O1xuICBjdXJyZW50VGltZVJhbmdlRGF0YTogYW55ID0gW107XG4gIG92ZXJhbGxBcnJheURhdGE6IGFueSA9IFtdO1xuICBhbGxGb290ZmFsbERhdGE6IGFueSA9IFtdO1xuICBnZXRUaWNrZXRTdGF0dXNlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc3RhdHVzTGlzdCA9IHRoaXMuZ2V0UnZwc0xpc3Q/LnRpY2tldFN0YXR1cztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzdGF0dXNMaXN0KSkge1xuICAgICAgcmV0dXJuIHN0YXR1c0xpc3QubWFwKChzKSA9PiBzPy5zdGF0dXM/LnRvTG93ZXJDYXNlKCkpLmZpbHRlcihCb29sZWFuKTsgLy8gUmVtb3ZlcyBudWxsL3VuZGVmaW5lZFxuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cbiAgZ2V0UmV2b3BzKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcbiAgICAvLyB0aGlzLm9iamVjdHNBcnJheSA9W107XG4gICAgLy8gdGhpcy5vdmVyYWxsQXJyYXlEYXRhID1bXTtcbiAgICAvLyB0aGlzLmdldFJ2cHNMaXN0ID1bXTtcbiAgICAvLyB0aGlzLmdldFJ2cHNJbWFnZUxpc3Q9W107XG4gICAgLy8gdGhpcy5hbGxGb290ZmFsbERhdGEgPVtdXG4gICAgY29uc3Qgc3RvcmVJZCA9XG4gICAgICB0aGlzLnN0b3JlSWRhcnJheSAmJiB0aGlzLnN0b3JlSWRhcnJheS5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5zdG9yZUlkYXJyYXlbMF1cbiAgICAgICAgOiBudWxsO1xuICAgIGNvbnN0IGRhdGVTdHJpbmcgPSB0aGlzLmZvbGRlckRhdGUgfHwgXCJcIjtcbiAgICBjb25zdCBncm91cEJ5S2V5ID0gXCJ0aW1lXCI7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMudHlwZSA9PT0gXCJmb290ZmFsbFwiID8gXCJcIiA6IHRoaXMudHlwZSB8fCBcIlwiO1xuICAgIGNvbnN0IHByb2Nlc3NUeXBlID0gXCJmb290ZmFsbFwiO1xuXG4gICAgdGhpcy5ydnBzU2VydmljZVxuICAgICAgLmdldFJ2cHNMaXN0QXBpKHN0b3JlSWQsIGRhdGVTdHJpbmcsIGdyb3VwQnlLZXksIHR5cGUsIHByb2Nlc3NUeXBlKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICAgICAgdGhpcy5nZXRSdnBzTGlzdCA9IHJlcz8uZGF0YTtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VVcmwgPSB0aGlzLnJ2cHNTZXJ2aWNlPy5mb290ZmFsbENETjtcbiAgICAgICAgICAgIHRoaXMuZ2V0UnZwc0ltYWdlTGlzdCA9IHJlcz8uZGF0YT8ucmVzdWx0O1xuICAgICAgICAgICAgdGhpcy50aWNrZXRSZXZpZXdTdGF0dXMgPSByZXM/LmRhdGE/LnRpY2tldFN0YXR1cztcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdyZXZvcHMgZ2V0UnZwc0xpc3RBcGkgOicsIHJlcz8uZGF0YSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygncmV2b3BzIHRpY2tldFJldmlld1N0YXR1cyA6JywgdGhpcy50aWNrZXRSZXZpZXdTdGF0dXMpO1xuICAgICAgICAgICAgLy8gU2F2ZSB0aGUgZnVsbCBmb290ZmFsbCBkYXRhIChncm91cGVkIGJ5IHRpbWVSYW5nZSlcbiAgICAgICAgICAgIHRoaXMuYWxsRm9vdGZhbGxEYXRhID0gcmVzPy5kYXRhPy5yZXN1bHQ/LmZvb3RmYWxsRGF0YSB8fCBbXTtcblxuICAgICAgICAgICAgLy8gQ3JlYXRlIHRpbWVSYW5nZSArIGNvdW50IG9iamVjdFxuICAgICAgICAgICAgY29uc3QgdGltZVJhbmdlcyA9IHRoaXMuYWxsRm9vdGZhbGxEYXRhLm1hcChcbiAgICAgICAgICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbS50aW1lUmFuZ2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLm9iamVjdHNBcnJheSA9IHRpbWVSYW5nZXMubWFwKCh0aW1lUmFuZ2U6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgdGltZVJhbmdlLFxuICAgICAgICAgICAgICBjb3VudDpcbiAgICAgICAgICAgICAgICB0aGlzLmFsbEZvb3RmYWxsRGF0YS5maW5kKChkOiBhbnkpID0+IGQudGltZVJhbmdlID09PSB0aW1lUmFuZ2UpXG4gICAgICAgICAgICAgICAgICA/LmRhdGE/Lmxlbmd0aCB8fCAwLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgLy8gT25seSByZXNldCBpZiBwcmV2aW91cyBzZWxlY3RlZCB0aW1lIGlzIE5PVCBpbiB0aGUgbmV3IGxpc3RcbiAgICAgICAgICAgIGlmICghdGltZVJhbmdlcy5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkVGltZSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpbWVzKHRoaXMub2JqZWN0c0FycmF5WzBdLnRpbWVSYW5nZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCBkYXRhIGZvciB0aGUgc2VsZWN0ZWQgdGltZVJhbmdlXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUaW1lUmFuZ2VEYXRhID1cbiAgICAgICAgICAgICAgdGhpcy5hbGxGb290ZmFsbERhdGEuZmluZChcbiAgICAgICAgICAgICAgICAoaXRlbTogYW55KSA9PiBpdGVtLnRpbWVSYW5nZSA9PT0gdGhpcy5zZWxlY3RlZFRpbWVcbiAgICAgICAgICAgICAgKT8uZGF0YSB8fCBbXTtcblxuICAgICAgICAgICAgLy8gQ291bnQgcmV2b3BzVHlwZXNcbiAgICAgICAgICAgIGNvbnN0IHJldm9wc1R5cGVDb3VudDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHtcbiAgICAgICAgICAgICAgXCJub24tdGFnZ2luZ1wiOiAwLFxuICAgICAgICAgICAgICBkdXBsaWNhdGU6IDAsXG4gICAgICAgICAgICAgIGVtcGxveWVlOiAwLFxuICAgICAgICAgICAgICBcImhvdXNlLWtlZXBpbmdcIjogMCxcbiAgICAgICAgICAgICAganVuazogMCxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCB0b3RhbENvdW50ID0gMDtcbiAgICAgICAgICAgIHRoaXMub3ZlcmFsbEFycmF5RGF0YSA9IFtdO1xuXG4gICAgICAgICAgICB0aGlzLmFsbEZvb3RmYWxsRGF0YS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaXRlbS5kYXRhPy5mb3JFYWNoKChpbWFnZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vdmVyYWxsQXJyYXlEYXRhLnB1c2goaW1hZ2UpO1xuICAgICAgICAgICAgICAgIHRvdGFsQ291bnQrKztcblxuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPVxuICAgICAgICAgICAgICAgICAgaW1hZ2UucmV2b3BzVHlwZT8udHJpbSgpLnRvTG93ZXJDYXNlKCkgfHwgXCJ1bmtub3duXCI7XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gXCJub24tdGFnZ2luZ1wiKSB7XG4gICAgICAgICAgICAgICAgICByZXZvcHNUeXBlQ291bnRbXCJub24tdGFnZ2luZ1wiXSsrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJlbXBsb3llZVwiKSB7XG4gICAgICAgICAgICAgICAgICByZXZvcHNUeXBlQ291bnRbXCJlbXBsb3llZVwiXSsrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJob3VzZS1rZWVwaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldm9wc1R5cGVDb3VudFtcImhvdXNlLWtlZXBpbmdcIl0rKztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYodHlwZSA9PT0gXCJqdW5rXCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldm9wc1R5cGVDb3VudFtcImp1bmtcIl0rKztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyDinIUgQ291bnQgZHVwbGljYXRlcyBvbmx5IGZyb20gZHVwbGljYXRlSW1hZ2VQYXRoXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW1hZ2UuZHVwbGljYXRlSW1hZ2VQYXRoKSkge1xuICAgICAgICAgICAgICAgICAgcmV2b3BzVHlwZUNvdW50W1wiZHVwbGljYXRlXCJdICs9XG4gICAgICAgICAgICAgICAgICAgIGltYWdlLmR1cGxpY2F0ZUltYWdlUGF0aC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmNvdW50RGF0YSA9IHtcbiAgICAgICAgICAgICAgZm9vdGZhbGxDb3VudDogdG90YWxDb3VudCxcbiAgICAgICAgICAgICAgbm9uVGFnczogcmV2b3BzVHlwZUNvdW50W1wibm9uLXRhZ2dpbmdcIl0sXG4gICAgICAgICAgICAgIGR1cGxpY2F0ZTogcmV2b3BzVHlwZUNvdW50W1wiZHVwbGljYXRlXCJdLFxuICAgICAgICAgICAgICBlbXBsb3llZTogcmV2b3BzVHlwZUNvdW50W1wiZW1wbG95ZWVcIl0sXG4gICAgICAgICAgICAgIGhvdXNla2VlcGluZzogcmV2b3BzVHlwZUNvdW50W1wiaG91c2Uta2VlcGluZ1wiXSxcbiAgICAgICAgICAgICAganVuazogcmV2b3BzVHlwZUNvdW50W1wianVua1wiXVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gQXBwbHkgdHlwZSBmaWx0ZXIgYWZ0ZXIgbG9hZGluZyB0aW1lUmFuZ2UgZGF0YVxuICAgICAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIHRoaXMubm9EYXRhID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgZmFpbHVyZVxuICAgICAgICAgICAgdGhpcy5nZXRSdnBzTGlzdCA9IFtdO1xuICAgICAgICAgICAgdGhpcy5nZXRSdnBzSW1hZ2VMaXN0ID0gW107XG4gICAgICAgICAgICB0aGlzLm9iamVjdHNBcnJheSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5pbWFnZXNBcnJheURhdGEgPSBbXTtcbiAgICAgICAgICAgIHRoaXMub3ZlcmFsbEFycmF5RGF0YSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5jb3VudERhdGEgPSBbXTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zdCBtc2cgPVxuICAgICAgICAgICAgZXJyLmVycm9yLmVycm9yIHx8XG4gICAgICAgICAgICBlcnIuZXJyb3IgfHxcbiAgICAgICAgICAgIGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHxcbiAgICAgICAgICAgIGVyci5tZXNzYWdlIHx8XG4gICAgICAgICAgICBcIlVua25vd24gZXJyb3JcIjtcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QobXNnKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5nZXRSdnBzTGlzdCA9IFtdO1xuICAgICAgICAgIHRoaXMuZ2V0UnZwc0ltYWdlTGlzdCA9IFtdO1xuICAgICAgICAgIHRoaXMub2JqZWN0c0FycmF5ID0gW107XG4gICAgICAgICAgdGhpcy5pbWFnZXNBcnJheURhdGEgPSBbXTtcbiAgICAgICAgICB0aGlzLm92ZXJhbGxBcnJheURhdGEgPSBbXTtcbiAgICAgICAgICB0aGlzLmNvdW50RGF0YSA9IFtdO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICBvcmlnaW5hbENoZWNrZWREdXBsaWNhdGVJZHM6IGFueTtcbiAgZWRpdFZhbHVlKCkge1xuICAgIGNvbnN0IHR5cGUgPSAodGhpcy5zZWxlY3RlZFR5cGUgfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnJldm9wc1R5cGVWYWx1ZSA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRJbWFnZSA9IHRoaXMuc2VsZWN0SW1hZ2VBcnJheTtcbiAgICBjb25zdCBzZWxlY3RlZFRlbXBsZCA9IHNlbGVjdGVkSW1hZ2U/LnRlbXBsZDtcblxuICAgIGlmIChcbiAgICAgIHR5cGUgPT09IFwiZHVwbGljYXRlXCIgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoc2VsZWN0ZWRJbWFnZS5kdXBsaWNhdGVJbWFnZVBhdGgpXG4gICAgKSB7XG4gICAgICAvLyAxLiBDb252ZXJ0IGR1cGxpY2F0ZSBjaGlsZHJlbiBpbnRvIGNvbnNpc3RlbnQgb2JqZWN0cyB3aXRoIHBhcmVudCByZWZlcmVuY2VcbiAgICAgIGNvbnN0IGR1cGxpY2F0ZUNoaWxkcmVuID0gc2VsZWN0ZWRJbWFnZS5kdXBsaWNhdGVJbWFnZVBhdGgubWFwKFxuICAgICAgICAoY2hpbGQ6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICBwYXJlbnQ6IHNlbGVjdGVkVGVtcGxkLFxuICAgICAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgLy8gMi4gQ29sbGVjdCB0aGUgdGVtcGxkIHZhbHVlcyBvZiBkdXBsaWNhdGUgY2hpbGRyZW5cbiAgICAgIGNvbnN0IGR1cGxpY2F0ZUNoaWxkSWRzID0gZHVwbGljYXRlQ2hpbGRyZW4ubWFwKFxuICAgICAgICAoY2hpbGQ6IGFueSkgPT4gY2hpbGQudGVtcElkXG4gICAgICApO1xuXG4gICAgICAvLyAzLiBGaWx0ZXIgb3V0IG5vbi10YWdnaW5nIGltYWdlcyBleGNlcHQgdGhlIHNlbGVjdGVkIHBhcmVudCAmIGl0cyBjaGlsZHJlblxuICAgICAgY29uc3Qgbm9uVGFnZ2luZ0ltYWdlcyA9IHRoaXMub3ZlcmFsbEFycmF5RGF0YS5maWx0ZXIoKGltZzogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzTm9uVGFnZ2luZyA9XG4gICAgICAgICAgKGltZy5yZXZvcHNUeXBlIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCkgPT09IFwibm9uLXRhZ2dpbmdcIjtcbiAgICAgICAgY29uc3QgaXNOb3RTZWxlY3RlZCA9XG4gICAgICAgICAgaW1nLnRlbXBsZCAhPT0gc2VsZWN0ZWRUZW1wbGQgJiZcbiAgICAgICAgICAhZHVwbGljYXRlQ2hpbGRJZHMuaW5jbHVkZXMoaW1nLnRlbXBsZCk7XG4gICAgICAgIHJldHVybiBpc05vblRhZ2dpbmcgJiYgaXNOb3RTZWxlY3RlZDtcbiAgICAgIH0pO1xuXG4gICAgICAvLyA0LiBNZXJnZSBkdXBsaWNhdGUgY2hpbGRyZW4gKyBvdGhlciBub24tdGFnZ2luZyBpbWFnZXNcbiAgICAgIHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheSA9IFsuLi5kdXBsaWNhdGVDaGlsZHJlbiwgLi4ubm9uVGFnZ2luZ0ltYWdlc107XG5cbiAgICAgIC8vIDUuIE1hcmsgc2VsZWN0ZWQ6IG9ubHkgZHVwbGljYXRlIGltYWdlcyB0aGF0IHdlcmUgbWFya2VkIGlzQ2hlY2tlZFxuICAgICAgdGhpcy5yZW1haW5pbmdJbWFnZUFycmF5LmZvckVhY2goKGltZzogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzRHVwbGljYXRlID1cbiAgICAgICAgICAoaW1nLnJldm9wc1R5cGUgfHwgXCJcIikudG9Mb3dlckNhc2UoKSA9PT0gXCJkdXBsaWNhdGVcIjtcbiAgICAgICAgaW1nLnNlbGVjdGVkID0gaXNEdXBsaWNhdGUgJiYgaW1nLmlzQ2hlY2tlZCA9PT0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyA2LiBTdG9yZSBvcmlnaW5hbCBjaGVja2VkIElEcyB0byBjb21wYXJlIGxhdGVyIGR1cmluZyBzdWJtaXRcbiAgICAgIHRoaXMub3JpZ2luYWxDaGVja2VkRHVwbGljYXRlSWRzID0gdGhpcy5yZW1haW5pbmdJbWFnZUFycmF5XG4gICAgICAgIC5maWx0ZXIoKGltZzogYW55KSA9PiBpbWcuaXNDaGVja2VkID09PSB0cnVlKVxuICAgICAgICAubWFwKChpbWc6IGFueSkgPT4gaW1nLnRlbXBsZCk7XG5cbiAgICAgIC8vIOKchSA3LiBGaWxsIHNlbGVjdGVkRHVwbGljYXRlSW1hZ2VzTGlzdCB3aXRoIHByZS1zZWxlY3RlZCBkdXBsaWNhdGVzXG4gICAgICB0aGlzLnNlbGVjdGVkRHVwbGljYXRlSW1hZ2VzTGlzdCA9IHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChpbWc6IGFueSkgPT5cbiAgICAgICAgICAgIChpbWcucmV2b3BzVHlwZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpID09PSBcImR1cGxpY2F0ZVwiICYmXG4gICAgICAgICAgICBpbWcuaXNDaGVja2VkID09PSB0cnVlXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgoaW1nOiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4uaW1nLFxuICAgICAgICAgIHBhcmVudDogaW1nLnBhcmVudCB8fCBzZWxlY3RlZFRlbXBsZCxcbiAgICAgICAgICBpc0NoZWNrZWQ6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm90IGR1cGxpY2F0ZSB0eXBlIOKGkiBzaG93IG9ubHkgc2VsZWN0ZWQgdHlwZSAoZXhjbHVkaW5nIHRoZSBjdXJyZW50IHNlbGVjdGVkIGltYWdlKVxuICAgICAgdGhpcy5yZW1haW5pbmdJbWFnZUFycmF5ID0gdGhpcy5vdmVyYWxsQXJyYXlEYXRhLmZpbHRlcigoaW1nOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaW1nVHlwZSA9IChpbWcucmV2b3BzVHlwZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gaW1nVHlwZSA9PT0gdHlwZSAmJiBpbWcudGVtcGxkICE9PSBzZWxlY3RlZFRlbXBsZDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGJhY2tUb0Zvb3RmYWxsMSgpIHtcbiAgICB0aGlzLnNlbGVjdGVkUmFkaW9UeXBlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaW1hZ2VGbG93ID0gZmFsc2U7XG4gICAgdGhpcy5zcGxpdFNjcmVlbkVuYWJsZWQgPSBmYWxzZTsgLy8gRGlzYWJsZSBzcGxpdC1zY3JlZW4gd2hlbiBnb2luZyBiYWNrXG4gICAgdGhpcy5zZWxlY3RJbWFnZUFycmF5ID0gbnVsbDtcbiAgfVxuICBzZWxlY3RJbWFnZUFycmF5OiBhbnk7XG4gIHJlbWFpbmluZ0ltYWdlQXJyYXk6IGFueTtcbiAgcmV2b3BzVHlwZVZhbHVlID0gZmFsc2U7XG5cbiAgZWRpdEJ0blNob3cgPSBmYWxzZTtcbiAgc2VsZWN0SW1hZ2VGb3JTcGxpdFZpZXcob2JqOiBhbnkpIHtcbiAgICB0aGlzLnNwbGl0U2NyZWVuRW5hYmxlZCA9IHRydWU7IC8vIEVuYWJsZSBzcGxpdC1zY3JlZW4gd2hlbiBpbWFnZSBpcyBjbGlja2VkXG4gICAgdGhpcy5zZWxlY3RJbWFnZUFycmF5ID0gb2JqO1xuICAgIFxuICAgIC8vIElmIGR1cGxpY2F0ZSBpcyBhbHJlYWR5IHNlbGVjdGVkLCBwcmVzZXJ2ZSB0aGUgZHVwbGljYXRlIGNvbnRleHRcbiAgICBjb25zdCBpc0R1cGxpY2F0ZU1vZGUgPSB0aGlzLnNlbGVjdGVkUmFkaW9UeXBlID09PSBcImR1cGxpY2F0ZVwiO1xuICAgIFxuICAgIGlmICghaXNEdXBsaWNhdGVNb2RlKSB7XG4gICAgICB0aGlzLnJldm9wc1R5cGVWYWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zZWxlY3RlZFR5cGUgPSBcIlwiO1xuICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvVHlwZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheSA9IFtdOyAvLyBSZXNldCByZW1haW5pbmcgaW1hZ2VzIGluaXRpYWxseVxuICAgICAgdGhpcy5yZW1haW5pbmdJbWFnZXNHcm91cHMgPSBbXTsgLy8gUmVzZXQgZ3JvdXBzXG4gICAgfVxuICAgIFxuICAgIGxldCBmaWx0ZXJlZEJ5VHlwZTogYW55W10gPSBbXTtcbiAgICBjb25zdCBzZWxlY3RlZFR5cGUgPSBvYmoucmV2b3BzVHlwZT8udG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIElmIHdlJ3JlIGluIGR1cGxpY2F0ZSBtb2RlIGFuZCBjbGlja2luZyBvbiBhIHJlbWFpbmluZyBpbWFnZSwga2VlcCB0aGUgZHVwbGljYXRlIGNvbnRleHRcbiAgICBpZiAoaXNEdXBsaWNhdGVNb2RlKSB7XG4gICAgICAvLyBLZWVwIHRoZSBleGlzdGluZyByZW1haW5pbmcgaW1hZ2VzIGJ1dCB1cGRhdGUgdGhlIHNlbGVjdGVkIGltYWdlXG4gICAgICAvLyBEb24ndCByZXNldCB0aGUgZHVwbGljYXRlIHNlbGVjdGlvbiBjb250ZXh0XG4gICAgICB0aGlzLnJldm9wc1R5cGVWYWx1ZSA9IGZhbHNlOyAvLyBBbGxvdyBlZGl0aW5nIHRoaXMgaW1hZ2VcbiAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlID0gXCJcIjsgLy8gUmVzZXQgdG8gYWxsb3cgbmV3IHNlbGVjdGlvblxuICAgICAgLy8gS2VlcCBzZWxlY3RlZFJhZGlvVHlwZSBhcyAnZHVwbGljYXRlJyB0byBtYWludGFpbiBjb250ZXh0XG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZFR5cGUgPT09IFwiZHVwbGljYXRlXCIgJiYgQXJyYXkuaXNBcnJheShvYmouZHVwbGljYXRlSW1hZ2VQYXRoKSkge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBvYmouZHVwbGljYXRlSW1hZ2VQYXRoLm1hcCgoY2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaGVkID0gdGhpcy5vdmVyYWxsQXJyYXlEYXRhLmZpbmQoXG4gICAgICAgICAgKGltZzogYW55KSA9PiBpbWcudGVtcGxkID09PSBjaGlsZC50ZW1wSWRcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICAuLi4obWF0Y2hlZCB8fCB7fSksXG4gICAgICAgICAgcGFyZW50OiBvYmoudGVtcGxkLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBmaWx0ZXJlZEJ5VHlwZSA9IFtvYmosIC4uLmNoaWxkcmVuXTtcbiAgICAgIHRoaXMuY3VycmVudEltYWdlSW5kZXggPSAwO1xuICAgICAgdGhpcy5yZW1haW5pbmdJbWFnZUFycmF5ID0gY2hpbGRyZW47XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBub24tZHVwbGljYXRlIGltYWdlcywgZG9uJ3QgcG9wdWxhdGUgcmVtYWluaW5nSW1hZ2VBcnJheSBpbml0aWFsbHlcbiAgICAgIC8vIEl0IHdpbGwgYmUgcG9wdWxhdGVkIHdoZW4gdXNlciBzZWxlY3RzIGEgcmFkaW8gYnV0dG9uXG4gICAgICBmaWx0ZXJlZEJ5VHlwZSA9IHRoaXMub3ZlcmFsbEFycmF5RGF0YS5maWx0ZXIoXG4gICAgICAgIChpbWc6IGFueSkgPT4gaW1nLnJldm9wc1R5cGU/LnRvTG93ZXJDYXNlKCkgPT09IHNlbGVjdGVkVHlwZVxuICAgICAgKTtcbiAgICAgIHRoaXMuY3VycmVudEltYWdlSW5kZXggPSBmaWx0ZXJlZEJ5VHlwZS5maW5kSW5kZXgoXG4gICAgICAgIChpbWc6IGFueSkgPT4gaW1nLnRlbXBsZCA9PT0gb2JqLnRlbXBsZFxuICAgICAgKTtcbiAgICAgIC8vIE9ubHkgc2V0IHJlbWFpbmluZ0ltYWdlQXJyYXkgaWYgdGhlcmUgYXJlIG90aGVyIGltYWdlcyBvZiB0aGUgc2FtZSB0eXBlXG4gICAgICAvLyBPdGhlcndpc2UsIGxlYXZlIGl0IGVtcHR5IGZvciByYWRpbyBidXR0b24gc2VsZWN0aW9uIHRvIHBvcHVsYXRlXG4gICAgICBpZiAoZmlsdGVyZWRCeVR5cGUubGVuZ3RoID4gMSkge1xuICAgICAgICB0aGlzLnJlbWFpbmluZ0ltYWdlQXJyYXkgPSBmaWx0ZXJlZEJ5VHlwZS5maWx0ZXIoXG4gICAgICAgICAgKF86IGFueSwgaTogbnVtYmVyKSA9PiBpICE9PSB0aGlzLmN1cnJlbnRJbWFnZUluZGV4XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT25seSBhdXRvLXNldCByZXZvcHNUeXBlVmFsdWUgaWYgbm90IGluIGR1cGxpY2F0ZSBtb2RlXG4gICAgaWYgKCFpc0R1cGxpY2F0ZU1vZGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgb2JqPy5yZXZvcHNUeXBlID09PSBcImR1cGxpY2F0ZVwiIHx8XG4gICAgICAgIG9iaj8ucmV2b3BzVHlwZSA9PT0gXCJlbXBsb3llZVwiIHx8XG4gICAgICAgIG9iaj8ucmV2b3BzVHlwZSA9PT0gXCJob3VzZS1rZWVwaW5nXCIgfHwgb2JqPy5yZXZvcHNUeXBlID09PVwianVua1wiXG4gICAgICApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG9iaj8ucmV2b3BzVHlwZSA9PT0gXCJkdXBsaWNhdGVcIiAmJlxuICAgICAgICAgIG9iaj8uZHVwbGljYXRlSW1hZ2VQYXRoPy5sZW5ndGggPiAwXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZWRpdEJ0blNob3cgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIG9iaj8ucmV2b3BzVHlwZSA9PT0gXCJlbXBsb3llZVwiIHx8XG4gICAgICAgICAgb2JqPy5yZXZvcHNUeXBlID09PSBcImhvdXNlLWtlZXBpbmdcIiB8fCBvYmo/LnJldm9wc1R5cGUgPT09XCJqdW5rXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5lZGl0QnRuU2hvdyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lZGl0QnRuU2hvdyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmV2b3BzVHlwZVZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGUgPSBvYmo/LnJldm9wc1R5cGU7XG4gICAgICAgIHRoaXMub25SYWRpb0NoYW5nZShvYmo/LnJldm9wc1R5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbiBkdXBsaWNhdGUgbW9kZSwgYWxsb3cgZWRpdGluZyB0aGUgc2VsZWN0ZWQgaW1hZ2VcbiAgICAgIHRoaXMucmV2b3BzVHlwZVZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLmVkaXRCdG5TaG93ID0gZmFsc2U7XG4gICAgfVxuICAgIFxuICAgIC8vIEJ1aWxkIHJlbWFpbmluZyBpbWFnZXMgZ3JvdXBzIGJ5IHRpbWUgcmFuZ2VcbiAgICB0aGlzLmJ1aWxkUmVtYWluaW5nSW1hZ2VzR3JvdXBzKCk7XG4gIH1cblxuICBpbWdGdWxsVmlldyhvYmo6IGFueSkge1xuICB0aGlzLnNlbGVjdEltYWdlQXJyYXkgPSBvYmo7XG4gIHRoaXMuaW1hZ2VGbG93ID0gdHJ1ZTtcbiAgdGhpcy5yZXZvcHNUeXBlVmFsdWUgPSBmYWxzZTtcbiAgdGhpcy5zZWxlY3RlZFR5cGUgPSBcIlwiO1xuICB0aGlzLnNlbGVjdGVkUmFkaW9UeXBlID0gdW5kZWZpbmVkO1xuICBsZXQgZmlsdGVyZWRCeVR5cGU6IGFueVtdID0gW107XG4gIGNvbnN0IHNlbGVjdGVkVHlwZSA9IG9iai5yZXZvcHNUeXBlPy50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmIChzZWxlY3RlZFR5cGUgPT09IFwiZHVwbGljYXRlXCIgJiYgQXJyYXkuaXNBcnJheShvYmouZHVwbGljYXRlSW1hZ2VQYXRoKSkge1xuICAgIC8vIPCflLkgQ2FzZSAxOiBEdXBsaWNhdGUgcGFyZW50IOKGkiBzaG93IG9ubHkgcGFyZW50ICsgaXRzIGNoaWxkcmVuXG4gICAgY29uc3QgY2hpbGRyZW4gPSBvYmouZHVwbGljYXRlSW1hZ2VQYXRoLm1hcCgoY2hpbGQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hlZCA9IHRoaXMub3ZlcmFsbEFycmF5RGF0YS5maW5kKFxuICAgICAgICAoaW1nOiBhbnkpID0+IGltZy50ZW1wbGQgPT09IGNoaWxkLnRlbXBJZFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAuLi4obWF0Y2hlZCB8fCB7fSksXG4gICAgICAgIHBhcmVudDogb2JqLnRlbXBsZCxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBmaWx0ZXJlZEJ5VHlwZSA9IFtvYmosIC4uLmNoaWxkcmVuXTtcblxuICAgIC8vIGN1cnJlbnQgaW5kZXggYWx3YXlzIDAgKHBhcmVudCBmaXJzdClcbiAgICB0aGlzLmN1cnJlbnRJbWFnZUluZGV4ID0gMDtcblxuICAgIC8vIHJlbWFpbmluZyA9IGNoaWxkcmVuIG9ubHlcbiAgICB0aGlzLnJlbWFpbmluZ0ltYWdlQXJyYXkgPSBjaGlsZHJlbjtcbiAgfSBlbHNlIHtcbiAgICAvLyDwn5S5IENhc2UgMjogTm9ybWFsIOKGkiBmaWx0ZXIgYnkgc2FtZSB0eXBlXG4gICAgZmlsdGVyZWRCeVR5cGUgPSB0aGlzLm92ZXJhbGxBcnJheURhdGEuZmlsdGVyKFxuICAgICAgKGltZzogYW55KSA9PiBpbWcucmV2b3BzVHlwZT8udG9Mb3dlckNhc2UoKSA9PT0gc2VsZWN0ZWRUeXBlXG4gICAgKTtcblxuICAgIHRoaXMuY3VycmVudEltYWdlSW5kZXggPSBmaWx0ZXJlZEJ5VHlwZS5maW5kSW5kZXgoXG4gICAgICAoaW1nOiBhbnkpID0+IGltZy50ZW1wbGQgPT09IG9iai50ZW1wbGRcbiAgICApO1xuXG4gICAgdGhpcy5yZW1haW5pbmdJbWFnZUFycmF5ID0gZmlsdGVyZWRCeVR5cGUuZmlsdGVyKFxuICAgICAgKF86IGFueSwgaTogbnVtYmVyKSA9PiBpICE9PSB0aGlzLmN1cnJlbnRJbWFnZUluZGV4XG4gICAgKTtcbiAgfVxuXG5cbiAgLy8g4pyFIEhhbmRsZSBlZGl0IGJ1dHRvbiAvIHJhZGlvIGxvZ2ljXG4gIGlmIChcbiAgICBvYmo/LnJldm9wc1R5cGUgPT09IFwiZHVwbGljYXRlXCIgfHxcbiAgICBvYmo/LnJldm9wc1R5cGUgPT09IFwiZW1wbG95ZWVcIiB8fFxuICAgIG9iaj8ucmV2b3BzVHlwZSA9PT0gXCJob3VzZS1rZWVwaW5nXCIgfHwgb2JqPy5yZXZvcHNUeXBlID09PVwianVua1wiXG4gICkge1xuICAgIGlmIChcbiAgICAgIG9iaj8ucmV2b3BzVHlwZSA9PT0gXCJkdXBsaWNhdGVcIiAmJlxuICAgICAgb2JqPy5kdXBsaWNhdGVJbWFnZVBhdGg/Lmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHRoaXMuZWRpdEJ0blNob3cgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBvYmo/LnJldm9wc1R5cGUgPT09IFwiZW1wbG95ZWVcIiB8fFxuICAgICAgb2JqPy5yZXZvcHNUeXBlID09PSBcImhvdXNlLWtlZXBpbmdcIiB8fCBvYmo/LnJldm9wc1R5cGUgPT09XCJqdW5rXCJcbiAgICApIHtcbiAgICAgIHRoaXMuZWRpdEJ0blNob3cgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVkaXRCdG5TaG93ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5yZXZvcHNUeXBlVmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuc2VsZWN0ZWRUeXBlID0gb2JqPy5yZXZvcHNUeXBlO1xuICAgIHRoaXMub25SYWRpb0NoYW5nZShvYmo/LnJldm9wc1R5cGUpO1xuICB9XG59XG5cblxuICBpbWdTd2FwKG9iajogYW55KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0SW1hZ2VBcnJheSkge1xuICAgICAgLy8gRmluZCB3aGVyZSB0aGUgbmV3IHNlbGVjdGVkIGltYWdlIGlzIGluIHRoZSBsaXN0XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheS5maW5kSW5kZXgoXG4gICAgICAgIChpbWc6IGFueSkgPT4gaW1nLnRlbXBsZCA9PT0gb2JqLnRlbXBsZFxuICAgICAgKTtcblxuICAgICAgLy8gUmVwbGFjZSBzZWxlY3RlZEltYWdlQXJyYXkgYmFjayBpbnRvIGl0cyBvcmlnaW5hbCBwb3NpdGlvblxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLnJlbWFpbmluZ0ltYWdlQXJyYXlbaW5kZXhdID0gdGhpcy5zZWxlY3RJbWFnZUFycmF5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZmFsbGJhY2sgaWYgbm90IGZvdW5kXG4gICAgICAgIHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheS5wdXNoKHRoaXMuc2VsZWN0SW1hZ2VBcnJheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHNlbGVjdGVkIGltYWdlXG4gICAgdGhpcy5zZWxlY3RJbWFnZUFycmF5ID0gb2JqO1xuXG4gICAgLy8gUmVtb3ZlIHNlbGVjdGVkIGZyb20gcmVtYWluaW5nIGxpc3RcbiAgICB0aGlzLnJlbWFpbmluZ0ltYWdlQXJyYXkgPSB0aGlzLnJlbWFpbmluZ0ltYWdlQXJyYXkuZmlsdGVyKFxuICAgICAgKGltZzogYW55KSA9PiBpbWcudGVtcGxkICE9PSBvYmoudGVtcGxkXG4gICAgKTtcblxuICAgIC8vIFJlYnVpbGQgcmVtYWluaW5nIGltYWdlcyBncm91cHNcbiAgICB0aGlzLmJ1aWxkUmVtYWluaW5nSW1hZ2VzR3JvdXBzKCk7XG4gICAgXG4gICAgdGhpcy5pbWFnZUZsb3cgPSB0cnVlO1xuICB9XG5cbiAgc2VsZWN0ZWRUeXBlOiBhbnkgPSBcIlwiOyAvLyBkZWZhdWx0IHNlbGVjdGVkXG4gIHNlbGVjdGVkUmFkaW9UeXBlOiBhbnk7XG4gIG9uUmFkaW9DaGFuZ2UodmFsOiBhbnkpIHtcbiAgdGhpcy5zZWxlY3RlZFJhZGlvVHlwZSA9IHZhbDtcbiAgdGhpcy5zZWxlY3RlZER1cGxpY2F0ZUltYWdlc0xpc3QgPSBbXTtcblxuICBjb25zdCB0eXBlID0gKHZhbCB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmICh0eXBlID09PSBcImR1cGxpY2F0ZVwiKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5zZWxlY3RJbWFnZUFycmF5Py5yZXZvcHNUeXBlPy50b0xvd2VyQ2FzZSgpID09PSBcImR1cGxpY2F0ZVwiICYmXG4gICAgICBBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0SW1hZ2VBcnJheT8uZHVwbGljYXRlSW1hZ2VQYXRoKSAmJlxuICAgICAgdGhpcy5zZWxlY3RJbWFnZUFycmF5LmR1cGxpY2F0ZUltYWdlUGF0aC5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICAvLyDwn5S5IENhc2UgMTogQWxyZWFkeSBpbiBkdXBsaWNhdGUgZmxvdyDihpIga2VlcCBjaGlsZHJlbiBzZXQgYnkgc2VsZWN0SW1hZ2VGb3JTcGxpdFZpZXdcbiAgICAgIHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheSA9IHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheS5tYXAoKGNoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgLi4uY2hpbGQsIHNlbGVjdGVkOiBmYWxzZSwgaXNDaGVja2VkOiBmYWxzZSB9O1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIPCflLkgQ2FzZSAyOiBSYWRpbyBkdXBsaWNhdGUgZm9yIG5vbi1kdXBsaWNhdGUgcGFyZW50IOKGkiBzaG93IG5vbi10YWdnaW5nIGltYWdlc1xuICAgICAgY29uc3Qgc2VsZWN0ZWRUZW1wbGQgPSB0aGlzLnNlbGVjdEltYWdlQXJyYXk/LnRlbXBsZDtcblxuICAgICAgdGhpcy5yZW1haW5pbmdJbWFnZUFycmF5ID0gdGhpcy5vdmVyYWxsQXJyYXlEYXRhLmZpbHRlcigoaW1nOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaW1nVHlwZSA9IChpbWcucmV2b3BzVHlwZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gaW1nVHlwZSA9PT0gXCJub24tdGFnZ2luZ1wiICYmIGltZy50ZW1wbGQgIT09IHNlbGVjdGVkVGVtcGxkO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheS5mb3JFYWNoKChpbWc6IGFueSkgPT4ge1xuICAgICAgICBpbWcuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgaW1nLmlzQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIFJlYnVpbGQgcmVtYWluaW5nIGltYWdlcyBncm91cHMgYWZ0ZXIgdXBkYXRpbmdcbiAgICB0aGlzLmJ1aWxkUmVtYWluaW5nSW1hZ2VzR3JvdXBzKCk7XG4gICAgY29uc29sZS5sb2coJ3JlbWFpbiBpbWFnZSBhcnJheSA6OicsIHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheSlcbiAgfSBlbHNlIHtcbiAgICAvLyBGb3Igbm9uLWR1cGxpY2F0ZSB0eXBlcywgY2xlYXIgcmVtYWluaW5nIGltYWdlc1xuICAgIHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheSA9IFtdO1xuICAgIHRoaXMucmVtYWluaW5nSW1hZ2VzR3JvdXBzID0gW107XG4gIH1cbn1cblxuXG4gIHR5cGU6IGFueSA9IFwiZm9vdGZhbGxcIjtcbiAgc2VsZWN0UGxhblRyZW5kcyh0eXBlOiBhbnkpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuXG4gICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVycygpIHtcbiAgICB0aGlzLmltYWdlRmxvdyA9IGZhbHNlO1xuICAgIHRoaXMuc3BsaXRTY3JlZW5FbmFibGVkID0gZmFsc2U7IC8vIFJlc2V0IHNwbGl0LXNjcmVlbiB3aGVuIGZpbHRlcnMgY2hhbmdlXG4gICAgdGhpcy5zZWxlY3RJbWFnZUFycmF5ID0gbnVsbDtcblxuICAgIC8vIENvbnZlcnQgdHlwZSB0byBsb3dlcmNhc2Ugc2FmZWx5XG4gICAgY29uc3Qgc2VsZWN0ZWRUeXBlID0gdGhpcy50eXBlPy50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKHNlbGVjdGVkVHlwZSA9PT0gXCJmb290ZmFsbFwiKSB7XG4gICAgICAvLyBGb290ZmFsbCBzaG93cyBhbGwgY3VycmVudFRpbWVSYW5nZURhdGEgKHRpbWUgcmFuZ2UgYmFzZWQpXG4gICAgICB0aGlzLmltYWdlc0FycmF5RGF0YSA9IFsuLi50aGlzLmN1cnJlbnRUaW1lUmFuZ2VEYXRhXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIHRhZ2dlZCB0eXBlcyBsaWtlICdkdXBsaWNhdGUnLCAnZW1wbG95ZWUnLCAnaG91c2VrZWVwaW5nJ1xuICAgICAgdGhpcy5pbWFnZXNBcnJheURhdGEgPSB0aGlzLm92ZXJhbGxBcnJheURhdGEuZmlsdGVyKFxuICAgICAgICAoaXRlbTogYW55KSA9PiBpdGVtLnJldm9wc1R5cGU/LnRvTG93ZXJDYXNlKCkgPT09IHNlbGVjdGVkVHlwZVxuICAgICAgKTtcbiAgICB9XG4gICAgLy8gZWxzZSB7XG4gICAgLy8gICAvLyBOb24tdGFnZ2luZyBtZWFucyBubyByZXZvcHNUeXBlIC0gc2hvdyBhbGwgdW5tYXRjaGVkIChubyB0YWcpXG4gICAgLy8gICB0aGlzLmltYWdlc0FycmF5RGF0YSA9IHRoaXMuY3VycmVudFRpbWVSYW5nZURhdGEuZmlsdGVyKChpdGVtOiBhbnkpID0+XG4gICAgLy8gICAgICFpdGVtLnJldm9wc1R5cGVcbiAgICAvLyAgICk7XG4gICAgLy8gfVxuXG4gICAgLy8gU2V0IG5vRGF0YSBiYXNlZCBvbiByZXN1bHRcbiAgICB0aGlzLm5vRGF0YSA9ICF0aGlzLmltYWdlc0FycmF5RGF0YT8ubGVuZ3RoO1xuXG4gICAgdGhpcy5idWlsZExpc3RWaWV3R3JvdXBzKCk7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgc2V0Vmlld01vZGUobW9kZTogXCJncmlkXCIgfCBcImxpc3RcIikge1xuICAgIGlmICh0aGlzLnZpZXdNb2RlICE9PSBtb2RlKSB7XG4gICAgICB0aGlzLnZpZXdNb2RlID0gbW9kZTtcbiAgICB9XG4gIH1cblxuICAvLyBDb252ZXJ0IG1pbnV0ZXMg4oaSIGhyICsgbWluc1xuICAgIGNvbnZlcnRNaW51dGVzKHRvdGFsTWludXRlczogbnVtYmVyKSB7XG4gICAgICBpZiAoIXRvdGFsTWludXRlcyAmJiB0b3RhbE1pbnV0ZXMgIT09IDApIHJldHVybiB7IGhvdXJzOiAwLCBtaW5zOiAwIH07XG4gICAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IodG90YWxNaW51dGVzIC8gNjApO1xuICAgICAgY29uc3QgbWlucyA9IHRvdGFsTWludXRlcyAlIDYwO1xuICAgICAgcmV0dXJuIHsgaG91cnMsIG1pbnMgfTtcbiAgICB9XG5cbiAgcmVtYWluaW5nSW1hZ2VzR3JvdXBzOiBBcnJheTx7IHRpbWVSYW5nZTogc3RyaW5nOyBkYXRhOiBhbnlbXSB9PiA9IFtdO1xuXG4gIHByaXZhdGUgYnVpbGRSZW1haW5pbmdJbWFnZXNHcm91cHMoKSB7XG4gICAgaWYgKCF0aGlzLnJlbWFpbmluZ0ltYWdlQXJyYXkgfHwgdGhpcy5yZW1haW5pbmdJbWFnZUFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5yZW1haW5pbmdJbWFnZXNHcm91cHMgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvcmRlcjogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgYW55W10+KCk7XG5cbiAgICB0aGlzLnJlbWFpbmluZ0ltYWdlQXJyYXkuZm9yRWFjaCgoaW1nOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGltZz8udGltZVJhbmdlIHx8IFwiTkFcIjtcbiAgICAgIGlmICghbWFwLmhhcyhrZXkpKSB7XG4gICAgICAgIG1hcC5zZXQoa2V5LCBbXSk7XG4gICAgICAgIG9yZGVyLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICAgIG1hcC5nZXQoa2V5KT8ucHVzaChpbWcpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZW1haW5pbmdJbWFnZXNHcm91cHMgPSBvcmRlci5tYXAoKGtleSkgPT4gKHtcbiAgICAgIHRpbWVSYW5nZToga2V5LFxuICAgICAgZGF0YTogbWFwLmdldChrZXkpIHx8IFtdLFxuICAgIH0pKTtcblxuICAgIGNvbnNvbGUubG9nKCdteSBtZXRoZCA9PicsIHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheSlcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRMaXN0Vmlld0dyb3VwcygpIHtcbiAgICBpZiAodGhpcy50eXBlID09PSBcImZvb3RmYWxsXCIpIHtcbiAgICAgIHRoaXMubGlzdFZpZXdHcm91cHMgPSAodGhpcy5hbGxGb290ZmFsbERhdGEgfHwgW10pXG4gICAgICAgIC5maWx0ZXIoKGdyb3VwOiBhbnkpID0+IEFycmF5LmlzQXJyYXkoZ3JvdXA/LmRhdGEpICYmIGdyb3VwLmRhdGEubGVuZ3RoKVxuICAgICAgICAubWFwKChncm91cDogYW55KSA9PiAoe1xuICAgICAgICAgIHRpbWVSYW5nZTogZ3JvdXA/LnRpbWVSYW5nZSB8fCBcIk5BXCIsXG4gICAgICAgICAgZGF0YTogZ3JvdXA/LmRhdGEgfHwgW10sXG4gICAgICAgIH0pKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvcmRlcjogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgYW55W10+KCk7XG5cbiAgICAodGhpcy5pbWFnZXNBcnJheURhdGEgfHwgW10pLmZvckVhY2goKGltZzogYW55KSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBpbWc/LnRpbWVSYW5nZSB8fCBcIk5BXCI7XG4gICAgICBpZiAoIW1hcC5oYXMoa2V5KSkge1xuICAgICAgICBtYXAuc2V0KGtleSwgW10pO1xuICAgICAgICBvcmRlci5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgICBtYXAuZ2V0KGtleSk/LnB1c2goaW1nKTtcbiAgICB9KTtcblxuICAgIHRoaXMubGlzdFZpZXdHcm91cHMgPSBvcmRlci5tYXAoKGtleSkgPT4gKHtcbiAgICAgIHRpbWVSYW5nZToga2V5LFxuICAgICAgZGF0YTogbWFwLmdldChrZXkpIHx8IFtdLFxuICAgIH0pKTtcbiAgfVxuICBoYW5kbGVJbWFnZUNsaWNrKGV2dDogYW55LCBvYmo6IGFueSkge1xuICAgIC8vIFdoZW4gZHVwbGljYXRlIGlzIHNlbGVjdGVkLCBjbGlja2luZyBvbiBpbWFnZXMgc2hvdWxkIG9wZW4gdGhlbSBpbiB6b29tIG1vZGFsXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSYWRpb1R5cGUgPT09IFwiZHVwbGljYXRlXCIgJiYgdGhpcy5zcGxpdFNjcmVlbkVuYWJsZWQpIHtcbiAgICAgIC8vIE9wZW4gaW1hZ2UgaW4gem9vbSBtb2RhbCB3aGVuIGR1cGxpY2F0ZSBpcyBzZWxlY3RlZFxuICAgICAgLy8gU3RvcmUgdGhlIGNsaWNrZWQgaW1hZ2UgdGVtcG9yYXJpbHkgZm9yIG1vZGFsIGRpc3BsYXlcbiAgICAgIHRoaXMub3BlbkltYWdlWm9vbU1vZGFsKHRoaXMuaW1hZ2VVcmwsIG9iaik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIC8vIEZvciBzcGxpdC1zY3JlZW4gdmlldywgY2xpY2tpbmcgb24gcmVsYXRlZCBpbWFnZXMgc2hvdWxkIHN3YXAgdG8gdGhhdCBpbWFnZVxuICAgIGlmICh0aGlzLnNwbGl0U2NyZWVuRW5hYmxlZCAmJiB0aGlzLnNlbGVjdGVkUmFkaW9UeXBlICE9PSBcImR1cGxpY2F0ZVwiKSB7XG4gICAgICB0aGlzLnNlbGVjdEltYWdlRm9yU3BsaXRWaWV3KG9iaik7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUmFkaW9UeXBlICE9PSBcImR1cGxpY2F0ZVwiKSB7XG4gICAgICB0aGlzLmltZ1N3YXAob2JqKTsgLy8gZXhpc3Rpbmcgbm9uLWR1cGxpY2F0ZSBjbGljayBiZWhhdmlvclxuICAgIH1cbiAgfVxuXG4gIHRlbXBNb2RhbEltYWdlOiBhbnkgPSBudWxsOyAvLyBUZW1wb3Jhcnkgc3RvcmFnZSBmb3IgbW9kYWwgaW1hZ2Ugd2hlbiBkdXBsaWNhdGUgaXMgc2VsZWN0ZWRcblxuICBvcGVuSW1hZ2Vab29tTW9kYWwoaW1hZ2VVcmw6IGFueSwgaW1hZ2VEYXRhOiBhbnkpIHtcbiAgICAvLyBTdG9yZSB0aGUgaW1hZ2UgZGF0YSB0ZW1wb3JhcmlseSBmb3IgbW9kYWwgZGlzcGxheVxuICAgIHRoaXMudGVtcE1vZGFsSW1hZ2UgPSBpbWFnZURhdGE7XG4gICAgdGhpcy5pc01vZGFsT3BlbiA9IHRydWU7XG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMuaW1hZ2VQb3B1cCwge1xuICAgICAgY2VudGVyZWQ6IHRydWUsXG4gICAgICBzaXplOiBcImxnXCIsXG4gICAgICBiYWNrZHJvcDogXCJzdGF0aWNcIixcbiAgICAgIGtleWJvYXJkOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuICBzZWxlY3RlZER1cGxpY2F0ZUltYWdlc0xpc3Q6IGFueSA9IFtdO1xuXG4gIHRvZ2dsZUR1cGxpY2F0ZVNlbGVjdGlvbihpbWc6IGFueSkge1xuICAgIGlmICghaW1nIHx8IGltZy5kdXBsaWNhdGVJbWFnZVBhdGg/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0b3RhbEltYWdlcyA9IHRoaXMub3ZlcmFsbEFycmF5RGF0YS5sZW5ndGg7XG4gICAgY29uc3QgYWxyZWFkeVRhZ2dlZENvdW50ID0gdGhpcy5jb3VudERhdGE/LmR1cGxpY2F0ZSB8fCAwO1xuICAgIGNvbnN0IG1heFNlbGVjdGFibGUgPSBNYXRoLnJvdW5kKHRvdGFsSW1hZ2VzICogMC4yKTtcbiAgICBjb25zdCBjdXJyZW50bHlTZWxlY3RlZENvdW50ID0gdGhpcy5yZW1haW5pbmdJbWFnZUFycmF5LmZpbHRlcihcbiAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0uc2VsZWN0ZWRcbiAgICApLmxlbmd0aDtcblxuICAgIGNvbnN0IHdpbGxTZWxlY3QgPSAhaW1nLnNlbGVjdGVkO1xuXG4gICAgLy8g4puUIEJsb2NrIHNlbGVjdGlvbiBpZiB0cnlpbmcgdG8gZ28gYmV5b25kIDIwJSBjYXBcbiAgICBpZiAoXG4gICAgICB3aWxsU2VsZWN0ICYmXG4gICAgICBjdXJyZW50bHlTZWxlY3RlZENvdW50ICsgYWxyZWFkeVRhZ2dlZENvdW50ID49IG1heFNlbGVjdGFibGVcbiAgICApIHtcbiAgICAgIHRoaXMudG9hc3QuZ2V0V2FybmluZ1RvYXN0KFxuICAgICAgICBgWW91IGNhbiBzZWxlY3Qgb25seSAke21heFNlbGVjdGFibGV9IGltYWdlcyAoJHtcbiAgICAgICAgICB0aGlzLmdldFJ2cHNMaXN0Py5kYXRhPy5jb25maWc/LmR1cGxpY2F0ZSA/PyBcIjIwJVwiXG4gICAgICAgIH0gb2YgdG90YWwgZm9vdGZhbGwpYFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDinIUgUHJvY2VlZCB3aXRoIHNlbGVjdGlvbiB0b2dnbGVcbiAgICBpbWcuc2VsZWN0ZWQgPSAhaW1nLnNlbGVjdGVkO1xuICAgIGltZy5pc0NoZWNrZWQgPSBpbWcuc2VsZWN0ZWQ7XG5cbiAgICAvLyDinIUgQWx3YXlzIHJlYnVpbGQgdGhlIHNlbGVjdGVkIGxpc3RcbiAgICB0aGlzLnNlbGVjdGVkRHVwbGljYXRlSW1hZ2VzTGlzdCA9IHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheVxuICAgICAgLmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnNlbGVjdGVkKVxuICAgICAgLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBwYXJlbnQ6IGl0ZW0ucGFyZW50IHx8IHRoaXMuc2VsZWN0SW1hZ2VBcnJheT8udGVtcGxkLFxuICAgICAgICBpc0NoZWNrZWQ6IHRydWUsXG4gICAgICB9KSk7XG5cbiAgICAvLyBSZWJ1aWxkIHJlbWFpbmluZyBpbWFnZXMgZ3JvdXBzIGFmdGVyIGNoZWNrYm94IGNoYW5nZVxuICAgIHRoaXMuYnVpbGRSZW1haW5pbmdJbWFnZXNHcm91cHMoKTtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9uSW1hZ2VDaGVja2JveENoYW5nZShldnQ6IGFueSwgaW1nOiBhbnksIHR5cGU6IHN0cmluZykge1xuICAgIGlmICh0eXBlID09PSBcImR1cGxpY2F0ZVwiKSB7XG4gICAgICAvLyBVc2UgdGhlIHRvZ2dsZSBtZXRob2QgZm9yIGR1cGxpY2F0ZSBzZWxlY3Rpb25cbiAgICAgIHRoaXMudG9nZ2xlRHVwbGljYXRlU2VsZWN0aW9uKGltZyk7XG4gICAgICAvLyBVcGRhdGUgY2hlY2tib3ggc3RhdGUgdG8gbWF0Y2ggc2VsZWN0aW9uXG4gICAgICBpZiAoZXZ0ICYmIGV2dC50YXJnZXQpIHtcbiAgICAgICAgZXZ0LnRhcmdldC5jaGVja2VkID0gaW1nLnNlbGVjdGVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNsZWFyVmFsdWUoKSB7XG4gICAgdGhpcy5zYXZlKFwibm9uLXRhZ2dpbmdcIik7XG4gICAgLy8gdGhpcy5zdWJtaXRWYWx1ZSgnbm9uLXRhZ2dpbmcnKVxuICB9XG4gIGNhbmNlbCgpIHtcbiAgICAvLyAxLiBDbGVhciBzZWxlY3RlZCBkdXBsaWNhdGUgaW1hZ2VzIGxpc3RcbiAgICB0aGlzLnNlbGVjdGVkRHVwbGljYXRlSW1hZ2VzTGlzdCA9IFtdO1xuXG4gICAgLy8gMi4gUmVzZXQgYWxsIGNoZWNrYm94ZXMgYW5kIHJhZGlvIGJ1dHRvbnMgaW4gb3ZlcmFsbCBpbWFnZSBsaXN0XG4gICAgdGhpcy5vdmVyYWxsQXJyYXlEYXRhID0gdGhpcy5vdmVyYWxsQXJyYXlEYXRhLm1hcCgoaW1nOiBhbnkpID0+ICh7XG4gICAgICAuLi5pbWcsXG4gICAgICBpc0NoZWNrZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLCAvLyBhc3N1bWluZyAnc2VsZWN0ZWQnIGlzIGNoZWNrYm94IGJpbmRcbiAgICAgIHBhcmVudDogbnVsbCwgLy8gcmVzZXQgcGFyZW50IGlmIHVzZWRcbiAgICAgIC8vIEFkZCBvdGhlciBmbGFncyBoZXJlIGlmIG5lZWRlZFxuICAgIH0pKTtcblxuICAgIC8vIDMuIENsb3NlIGltYWdlIGZsb3cvZnVsbC12aWV3IGlmIG9wZW5cbiAgICB0aGlzLmltYWdlRmxvdyA9IGZhbHNlO1xuXG4gICAgLy8gNC4gUmVzZXQgc3BsaXQtc2NyZWVuIGFuZCBzZWxlY3RlZCBpbWFnZVxuICAgIHRoaXMuc3BsaXRTY3JlZW5FbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RJbWFnZUFycmF5ID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRJbWFnZUluZGV4ID0gMDtcbiAgICB0aGlzLnJlbWFpbmluZ0ltYWdlQXJyYXkgPSBbXTtcbiAgICB0aGlzLnJlbWFpbmluZ0ltYWdlc0dyb3VwcyA9IFtdO1xuXG4gICAgLy8gNS4gKE9wdGlvbmFsKSBSZXNldCByYWRpbyBidXR0b25zIOKAlCBpZiB5b3UgaGF2ZSBhbnkgc3BlY2lmaWMgZmxhZ1xuICAgIHRoaXMuc2VsZWN0ZWRSYWRpb1R5cGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zZWxlY3RlZFR5cGUgPSBcIlwiO1xuICAgIHRoaXMucmV2b3BzVHlwZVZhbHVlID0gZmFsc2U7XG4gIH1cbiAgcG9wdXBUeXBlOiBhbnk7XG4gIEBWaWV3Q2hpbGQoXCJ6b29tUG9wdXBcIikgem9vbVBvcHVwOiBFbGVtZW50UmVmO1xuICBzYXZlKGNhdGVnb3J5OiBhbnkpIHtcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy56b29tUG9wdXAsIHtcbiAgICAgIGNlbnRlcmVkOiB0cnVlLFxuICAgICAgc2l6ZTogXCJtZFwiLFxuICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsIC8vIFByZXZlbnQgY2xvc2luZyBvbiBvdXRzaWRlIGNsaWNrXG4gICAgICBrZXlib2FyZDogZmFsc2UsIC8vIFByZXZlbnQgY2xvc2luZyBvbiBFU0Mga2V5XG4gICAgfSk7XG4gICAgdGhpcy5wb3B1cFR5cGUgPSBjYXRlZ29yeTtcbiAgfVxuXG4gIGNhbmNlbFN1Ym1pdCgpIHtcbiAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XG5cbiAgICB0aGlzLnNlbGVjdGVkRHVwbGljYXRlSW1hZ2VzTGlzdCA9IFtdO1xuICB9XG4gIHN1Ym1pdFZhbHVlKGNhdGVnb3J5OiBhbnkpIHtcbiAgICBsZXQgZHVwbGljYXRlSW1hZ2VzID0gW107XG5cbiAgICBpZiAoY2F0ZWdvcnkgPT09IFwiZHVwbGljYXRlXCIpIHtcbiAgICAgIGR1cGxpY2F0ZUltYWdlcyA9IHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheVxuICAgICAgICAuZmlsdGVyKChpbWc6IGFueSkgPT4gaW1nLnNlbGVjdGVkID09PSB0cnVlKVxuICAgICAgICAubWFwKChpbWc6IGFueSkgPT4gKHtcbiAgICAgICAgICB0ZW1wSWQ6IGltZy50ZW1wbGQgfHwgaW1nLnRlbXBJZCB8fCBcIlwiLFxuICAgICAgICAgIHRpbWVSYW5nZTogaW1nLnRpbWVSYW5nZSB8fCBcIlwiLFxuICAgICAgICAgIGVudHJ5VGltZTogaW1nLmVudHJ5VGltZSB8fCBpbWcuZW50cnlUbWUgfHwgXCJcIixcbiAgICAgICAgICBleGl0VGltZTogaW1nLmV4aXRUaW1lIHx8IFwiXCIsXG4gICAgICAgICAgZmlsZVBhdGg6IGltZy5maWxlUGF0aCxcbiAgICAgICAgICByZXZvcHNUeXBlOiBcImR1cGxpY2F0ZVwiLFxuICAgICAgICAgIGlzQ2hlY2tlZDogdHJ1ZSxcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGNvbnN0IGltZyA9IHRoaXMuc2VsZWN0SW1hZ2VBcnJheTtcblxuICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgIHN0b3JlSWQ6XG4gICAgICAgIHRoaXMuc3RvcmVJZGFycmF5ICYmIHRoaXMuc3RvcmVJZGFycmF5Lmxlbmd0aCA+IDBcbiAgICAgICAgICA/IHRoaXMuc3RvcmVJZGFycmF5WzBdXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgZGF0ZVN0cmluZzogdGhpcy5mb2xkZXJEYXRlIHx8IFwiXCIsXG4gICAgICB0ZW1wSWQ6IGltZz8udGVtcGxkIHx8IDAsXG4gICAgICByZXZvcHNUeXBlOiBjYXRlZ29yeSxcbiAgICAgIHRpbWVSYW5nZTogaW1nPy50aW1lUmFuZ2UgfHwgXCJcIixcbiAgICAgIGlzQ2hlY2tlZDogdHJ1ZSxcbiAgICAgIGR1cGxpY2F0ZUltYWdlOiBkdXBsaWNhdGVJbWFnZXMsXG4gICAgICBwcm9jZXNzVHlwZTogaW1nPy5wcm9jZXNzVHlwZSB8fCBcImZvb3RmYWxsXCIsXG4gICAgICBlbnRyeVRpbWU6IGltZz8uZW50cnlUaW1lIHx8IGltZz8uZW50cnlUbWUgfHwgXCJcIixcbiAgICAgIGV4aXRUaW1lOiBpbWc/LmV4aXRUaW1lIHx8IFwiXCIsXG4gICAgICBmaWxlUGF0aDogaW1nPy5maWxlUGF0aCB8fCBcIlwiLFxuICAgICAgY29tbWVudHM6IHRoaXMudXNlckNvbW1lbnQgfHwgXCJcIixcbiAgICAgIG1vZGU6ICd3ZWInXG4gICAgfTtcblxuICAgIHRoaXMucnZwc1NlcnZpY2VcbiAgICAgIC5nZXRSdnBzVGFnKG9iailcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KFxuICAgICAgICAgICAgICByZXM/Lm1lc3NhZ2UgfHwgXCJUaWNrZXQgdXBkYXRlZCBzdWNjZXNzZnVsbHlcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VGbG93ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmdldFJldm9wcygpO1xuICAgICAgICAgICAgdGhpcy5jYW5jZWxTdWJtaXQoKTtcbiAgICAgICAgICAgIHRoaXMubG9hZENhcmREYXRhKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW9UeXBlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGUgPSBcIlwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gdXBkYXRlXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1zZyA9XG4gICAgICAgICAgICBlcnIuZXJyb3I/LmVycm9yIHx8IGVyci5lcnJvciB8fCBlcnI/Lm1lc3NhZ2UgfHwgXCJVbmtub3duIGVycm9yXCI7XG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KG1zZyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIG5vRGF0YU1lc3NhZ2VzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIGR1cGxpY2F0ZTogXCJObyBkdXBsaWNhdGVzIGZvdW5kXCIsXG4gICAgZW1wbG95ZWU6IFwiTm8gZW1wbG95ZWUvc3RhZmYgZm91bmRcIixcbiAgICBcImhvdXNlLWtlZXBpbmdcIjogXCJObyBob3VzZSBrZWVwaW5nIGZvdW5kXCIsXG4gICAgXCJub24tdGFnZ2luZ1wiOiBcIk5vIG5vbi10YWdnaW5nIGZvdW5kXCIsXG4gICAganVuazogXCJObyBqdW5rIGZvdW5kXCJcbiAgfTtcblxuICB0ZW1wUmFpc2VkUGF5bG9hZDogYW55ID0gbnVsbDsgLy8gY2xhc3MtbGV2ZWwgdmFyaWFibGUgZm9yIHByZXZpZXdcblxuICBwcmVwYXJlUmFpc2VkUGF5bG9hZChzaG93T25seSA9IGZhbHNlKTogYW55IHt9XG5cbiAgQFZpZXdDaGlsZChcInJhaXNlZFBvcHVwXCIpIHJhaXNlZFBvcHVwOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKFwicmVzZXRSZXF1ZXN0UG9wdXBcIikgcmVzZXRSZXF1ZXN0UG9wdXA6IEVsZW1lbnRSZWY7XG4gIFJhaXNlZCgpIHtcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgICBkYXRlU3RyaW5nOiB0aGlzLmZvbGRlckRhdGUsXG4gICAgICBzdG9yZUlkOiB0aGlzLnN0b3JlSWRhcnJheT8ubGVuZ3RoID4gMCA/IHRoaXMuc3RvcmVJZGFycmF5WzBdIDogbnVsbCxcbiAgICAgIHRpY2tldE5hbWU6IFwiZm9vdGZhbGwtZGlyZWN0b3J5XCIsXG4gICAgICBmb290ZmFsbENvdW50OiAwLFxuICAgICAgZHVwbGljYXRlQ291bnQ6IDAsXG4gICAgICBlbXBsb3llZUNvdW50OiAwLFxuICAgICAgaG91c2VLZWVwaW5nQ291bnQ6IDAsXG4gICAgICBqdW5rQ291bnQ6MCxcbiAgICAgIGNvbW1lbnRzOiB0aGlzLmNvbW1lbnRUZXh0IHx8IFwiXCIsXG4gICAgICBkdXBsaWNhdGVJbWFnZXM6IFtdLFxuICAgICAgaG91c2VLZWVwaW5nOiBbXSxcbiAgICAgIGVtcGxveWVlOiBbXSxcbiAgICAgIGp1bms6IFtdLFxuICAgIH07XG5cbiAgICBsZXQgdG90YWxDaGVja2VkQ291bnQgPSAwO1xuXG4gICAgdGhpcy5vdmVyYWxsQXJyYXlEYXRhLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IGl0ZW0ucmV2b3BzVHlwZT8udG9Mb3dlckNhc2UoKT8udHJpbSgpO1xuICAgICAgY29uc3QgaXNDaGVja2VkID0gaXRlbS5pc0NoZWNrZWQgPT09IHRydWU7XG5cbiAgICAgIC8vIOKchSBDb3VudCBvbmx5IGlmIGl0ZW0gaXMgY2hlY2tlZCBBTkQgcmV2b3BzVHlwZSBpcyAnbm9uLXRhZ2dpbmcnXG4gICAgICAvLyBjb25zdCBpc05vdFRhZ2dlZCA9IHR5cGUgPT09ICdub24tdGFnZ2luZyc7XG5cbiAgICAgIC8vIGlmIChpc05vdFRhZ2dlZCkge1xuICAgICAgLy8gICB0b3RhbENoZWNrZWRDb3VudCsrO1xuICAgICAgLy8gfVxuXG4gICAgICAvLyBEVVBMSUNBVEUgVFlQRVxuICAgICAgaWYgKHR5cGUgPT09IFwiZHVwbGljYXRlXCIgJiYgQXJyYXkuaXNBcnJheShpdGVtLmR1cGxpY2F0ZUltYWdlUGF0aCkpIHtcbiAgICAgICAgY29uc3QgbmVzdGVkRGF0YSA9IGl0ZW0uZHVwbGljYXRlSW1hZ2VQYXRoXG4gICAgICAgICAgLmZpbHRlcigoZHVwOiBhbnkpID0+IGR1cC5pc0NoZWNrZWQpXG4gICAgICAgICAgLm1hcCgoZHVwOiBhbnkpID0+ICh7XG4gICAgICAgICAgICB0ZW1wSWQ6IGR1cC50ZW1wSWQgfHwgZHVwLnRlbXBsZCB8fCBcIlwiLFxuICAgICAgICAgICAgZmlsZVBhdGg6IGR1cC5maWxlUGF0aCxcbiAgICAgICAgICAgIGVudHJ5VGltZTogZHVwPy5lbnRyeVRpbWUgfHwgZHVwPy5lbnRyeVRtZSB8fCBcIlwiLFxuICAgICAgICAgICAgZXhpdFRpbWU6IGR1cC5leGl0VGltZSxcbiAgICAgICAgICAgIHRpbWVSYW5nZTogZHVwLnRpbWVSYW5nZSxcbiAgICAgICAgICAgIGlzQ2hlY2tlZDogZHVwLmlzQ2hlY2tlZCxcbiAgICAgICAgICB9KSk7XG5cbiAgICAgICAgaWYgKG5lc3RlZERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHBheWxvYWQuZHVwbGljYXRlSW1hZ2VzLnB1c2goe1xuICAgICAgICAgICAgdGVtcElkOiBpdGVtLnRlbXBsZCxcbiAgICAgICAgICAgIGZpbGVQYXRoOiBpdGVtLmZpbGVQYXRoLFxuICAgICAgICAgICAgZW50cnlUaW1lOiBpdGVtPy5lbnRyeVRpbWUgfHwgaXRlbT8uZW50cnlUbWUgfHwgXCJcIixcbiAgICAgICAgICAgIGV4aXRUaW1lOiBpdGVtLmV4aXRUaW1lLFxuICAgICAgICAgICAgdGltZVJhbmdlOiBpdGVtLnRpbWVSYW5nZSxcbiAgICAgICAgICAgIGlzQ2hlY2tlZDogaXRlbS5pc0NoZWNrZWQsXG4gICAgICAgICAgICBkYXRhOiBuZXN0ZWREYXRhLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcGF5bG9hZC5kdXBsaWNhdGVDb3VudCArPSBuZXN0ZWREYXRhLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBFTVBMT1lFRVxuICAgICAgZWxzZSBpZiAodHlwZSA9PT0gXCJlbXBsb3llZVwiICYmIGlzQ2hlY2tlZCkge1xuICAgICAgICBwYXlsb2FkLmVtcGxveWVlLnB1c2goe1xuICAgICAgICAgIHRlbXBJZDogaXRlbS50ZW1wbGQsXG4gICAgICAgICAgZmlsZVBhdGg6IGl0ZW0uZmlsZVBhdGgsXG4gICAgICAgICAgZW50cnlUaW1lOiBpdGVtPy5lbnRyeVRpbWUgfHwgaXRlbT8uZW50cnlUbWUgfHwgXCJcIixcbiAgICAgICAgICBleGl0VGltZTogaXRlbS5leGl0VGltZSxcbiAgICAgICAgICB0aW1lUmFuZ2U6IGl0ZW0udGltZVJhbmdlLFxuICAgICAgICAgIGlzQ2hlY2tlZDogaXRlbS5pc0NoZWNrZWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHBheWxvYWQuZW1wbG95ZWVDb3VudCsrO1xuICAgICAgfVxuXG4gICAgICAvLyBIT1VTRUtFRVBJTkdcbiAgICAgIGVsc2UgaWYgKHR5cGUgPT09IFwiaG91c2Uta2VlcGluZ1wiICYmIGlzQ2hlY2tlZCkge1xuICAgICAgICBwYXlsb2FkLmhvdXNlS2VlcGluZy5wdXNoKHtcbiAgICAgICAgICB0ZW1wSWQ6IGl0ZW0udGVtcGxkLFxuICAgICAgICAgIGZpbGVQYXRoOiBpdGVtLmZpbGVQYXRoLFxuICAgICAgICAgIGVudHJ5VGltZTogaXRlbT8uZW50cnlUaW1lIHx8IGl0ZW0/LmVudHJ5VG1lIHx8IFwiXCIsXG4gICAgICAgICAgZXhpdFRpbWU6IGl0ZW0uZXhpdFRpbWUsXG4gICAgICAgICAgdGltZVJhbmdlOiBpdGVtLnRpbWVSYW5nZSxcbiAgICAgICAgICBpc0NoZWNrZWQ6IGl0ZW0uaXNDaGVja2VkLFxuICAgICAgICB9KTtcblxuICAgICAgICBwYXlsb2FkLmhvdXNlS2VlcGluZ0NvdW50Kys7XG4gICAgICB9IFxuICAgICAgZWxzZSBpZiAodHlwZSA9PT0gXCJqdW5rXCIgJiYgaXNDaGVja2VkKSB7XG4gICAgICAgIHBheWxvYWQuanVuay5wdXNoKHtcbiAgICAgICAgICB0ZW1wSWQ6IGl0ZW0udGVtcGxkLFxuICAgICAgICAgIGZpbGVQYXRoOiBpdGVtLmZpbGVQYXRoLFxuICAgICAgICAgIGVudHJ5VGltZSA6IGl0ZW0/LmVudHJ5VGltZSB8fCBpdGVtPy5lbnRyeVRtZSB8fCBcIlwiLFxuICAgICAgICAgIGV4aXRUaW1lIDogaXRlbS5leGl0VGltZSxcbiAgICAgICAgICB0aW1lUmFuZ2UgOiBpdGVtLnRpbWVSYW5nZSxcbiAgICAgICAgICBpc0NoZWNrZWQgOiBpdGVtLmlzQ2hlY2tlZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcGF5bG9hZC5qdW5rQ291bnQrKztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHBheWxvYWQuZm9vdGZhbGxDb3VudCA9IHRoaXMuY291bnREYXRhPy5mb290ZmFsbENvdW50O1xuXG4gICAgLy8g8J+RhyBSZXR1cm4gb3IgYXNzaWduXG5cbiAgICB0aGlzLnRlbXBSYWlzZWRQYXlsb2FkID0gcGF5bG9hZDtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5yYWlzZWRQb3B1cCwge1xuICAgICAgY2VudGVyZWQ6IHRydWUsXG4gICAgICBzaXplOiBcIm1kXCIsXG4gICAgICBiYWNrZHJvcDogXCJzdGF0aWNcIixcbiAgICAgIGtleWJvYXJkOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbFJhc2llZCgpIHtcbiAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XG4gICAgdGhpcy5zZWxlY3RlZER1cGxpY2F0ZUltYWdlc0xpc3QgPSBbXTtcbiAgfVxuXG4gIGNvbW1lbnRUZXh0OiBhbnk7XG4gIGdldFJhaXNlZERhdGE6IGFueTtcbiAgc3VibWl0UmFpc2VkKCkge1xuICAgIC8vIGNvbnN0IHBheWxvYWQgPSB0aGlzLnRlbXBSYWlzZWRQYXlsb2FkOyAvLyBmcmVzaCBkYXRhIGZvciBBUElcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgdGlja2V0TmFtZTogXCJmb290ZmFsbC1kaXJlY3RvcnlcIixcbiAgICAgIHN0b3JlSWQ6IHRoaXMudGVtcFJhaXNlZFBheWxvYWQuc3RvcmVJZCxcbiAgICAgIGRhdGVTdHJpbmc6IHRoaXMudGVtcFJhaXNlZFBheWxvYWQuZGF0ZVN0cmluZyxcbiAgICAgIHR5cGU6IFwiY3JlYXRlXCIsXG4gICAgICBtb2RlOiBcIndlYlwiXG4gICAgfVxuICAgIHRoaXMuZ2V0UmFpc2VkRGF0YSA9IHBheWxvYWQ7XG4gICAgY29uc29sZS5sb2coJ3N1Ym1pdCByYWlzZWQgOicsIHBheWxvYWQpXG4gICAgdGhpcy5ydnBzU2VydmljZVxuICAgICAgLmdldENyZWF0ZVJhaXNlZFRhZyhwYXlsb2FkKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QoXG4gICAgICAgICAgICAgIHJlcz8ubWVzc2FnZSB8fCBcIlRpY2tldCB1cGRhdGVkIHN1Y2Nlc3NmdWxseVwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5pbWFnZUZsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZ2V0UmV2b3BzKCk7XG4gICAgICAgICAgICB0aGlzLmxvYWRDYXJkRGF0YSgpO1xuICAgICAgICAgICAgdGhpcy5jYW5jZWxSYXNpZWQoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpb1R5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZSA9IFwiXCI7XG4gICAgICAgICAgICB0aGlzLmNvdW50RGF0YSA9IFtdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gdXBkYXRlXCIpO1xuICAgICAgICAgICAgdGhpcy5jYW5jZWxSYXNpZWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBtc2cgPVxuICAgICAgICAgICAgZXJyLmVycm9yPy5lcnJvciB8fFxuICAgICAgICAgICAgZXJyLmVycm9yIHx8XG4gICAgICAgICAgICBlcnI/LmVycm9yPy5tZXNzYWdlIHx8XG4gICAgICAgICAgICBlcnIubWVzc2FnZSB8fFxuICAgICAgICAgICAgXCJVbmtub3duIGVycm9yXCI7XG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KG1zZyk7XG4gICAgICAgICAgdGhpcy5jYW5jZWxSYXNpZWQoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gb25JbWFnZUNoZWNrYm94Q2hhbmdlKGltZzogYW55LCB0eXBlOiBzdHJpbmcpIHtcbiAgLy8gICBpZiAodHlwZSA9PT0gJ2R1cGxpY2F0ZScpIHtcbiAgLy8gICAgIC8vIENvdW50IG9ubHkgdmFsaWQgZHVwbGljYXRlIGltYWdlcyB3aGVyZSBgZHVwbGljYXRlSW1hZ2VQYXRoLmxlbmd0aCA9PT0gMGBcbiAgLy8gICAgIGNvbnN0IHRvdGFsVmFsaWREdXBsaWNhdGVJbWFnZXMgPSB0aGlzLm92ZXJhbGxBcnJheURhdGEuZmlsdGVyKFxuICAvLyAgICAgICAoaXRlbTogYW55KSA9PlxuICAvLyAgICAgICAgIGl0ZW0ucmV2b3BzVHlwZSA9PT0gJ2R1cGxpY2F0ZScgJiYgKCFpdGVtLmR1cGxpY2F0ZUltYWdlUGF0aCB8fCBpdGVtLmR1cGxpY2F0ZUltYWdlUGF0aC5sZW5ndGggPT09IDApXG4gIC8vICAgICApLmxlbmd0aDtcblxuICAvLyAgICAgY29uc3QgbWF4QWxsb3dlZCA9IE1hdGguZmxvb3IodG90YWxWYWxpZER1cGxpY2F0ZUltYWdlcyAqIDAuMSk7IC8vIDEwJSBsaW1pdFxuXG4gIC8vICAgICBjb25zdCBhbHJlYWR5RXhpc3RzID0gdGhpcy5zZWxlY3RlZER1cGxpY2F0ZUltYWdlc0xpc3Quc29tZShcbiAgLy8gICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbS50ZW1wbGQgPT09IGltZy50ZW1wbGRcbiAgLy8gICAgICk7XG5cbiAgLy8gICAgIGlmIChpbWcuc2VsZWN0ZWQpIHtcbiAgLy8gICAgICAgLy8g4p2MIFJlYWNoZWQgbWF4IGFsbG93ZWQg4oCUIGJsb2NrIGl0XG4gIC8vICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRHVwbGljYXRlSW1hZ2VzTGlzdC5sZW5ndGggPj0gbWF4QWxsb3dlZCkge1xuICAvLyAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcbiAgLy8gICAgICAgICAgIGBPbmx5ICR7bWF4QWxsb3dlZH0gaW1hZ2VzIGNhbiBiZSBzZWxlY3RlZCBhcyBkdXBsaWNhdGUgKDEwJSBvZiB1bnRhZ2dlZCBkdXBsaWNhdGVzKS5gXG4gIC8vICAgICAgICAgKTtcblxuICAvLyAgICAgICAgIGltZy5zZWxlY3RlZCA9IGZhbHNlO1xuICAvLyAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vdmVyYWxsQXJyYXlEYXRhLmZpbmRJbmRleCgoaXRlbTogYW55KSA9PiBpdGVtLnRlbXBsZCA9PT0gaW1nLnRlbXBsZCk7XG4gIC8vICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAvLyAgICAgICAgICAgdGhpcy5vdmVyYWxsQXJyYXlEYXRhW2luZGV4XS5zZWxlY3RlZCA9IGZhbHNlO1xuICAvLyAgICAgICAgIH1cblxuICAvLyAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICAgICAgaW1nLnNlbGVjdGVkID0gZmFsc2U7XG4gIC8vICAgICAgICAgfSk7XG5cbiAgLy8gICAgICAgICByZXR1cm47XG4gIC8vICAgICAgIH1cblxuICAvLyAgICAgICAvLyDinIUgQWRkIGlmIG5vdCBhbHJlYWR5IGluIGxpc3RcbiAgLy8gICAgICAgaWYgKCFhbHJlYWR5RXhpc3RzKSB7XG4gIC8vICAgICAgICAgdGhpcy5zZWxlY3RlZER1cGxpY2F0ZUltYWdlc0xpc3QucHVzaCh7XG4gIC8vICAgICAgICAgICAuLi5pbWcsXG4gIC8vICAgICAgICAgICBpc0NoZWNrZWQ6IHRydWUsXG4gIC8vICAgICAgICAgICBwYXJlbnQ6IGltZy5wYXJlbnQgfHwgbnVsbFxuICAvLyAgICAgICAgIH0pO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAvLyDinYwgUmVtb3ZhbCBjYXNlXG4gIC8vICAgICAgIHRoaXMuc2VsZWN0ZWREdXBsaWNhdGVJbWFnZXNMaXN0ID0gdGhpcy5zZWxlY3RlZER1cGxpY2F0ZUltYWdlc0xpc3QuZmlsdGVyKFxuICAvLyAgICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0udGVtcGxkICE9PSBpbWcudGVtcGxkXG4gIC8vICAgICAgICk7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuXG4gIC8vICAgLy8g4pqg77iPIENhbGwgdGhpcyB0byB1cGRhdGUgYnV0dG9uIGVuYWJsZSBzdGF0ZVxuICAvLyAgIHRoaXMuY2hlY2tEdXBsaWNhdGVTYXZlRW5hYmxlKCk7XG4gIC8vIH1cblxuICAvLyBkdXBsaWNhdGVTYXZlRW5hYmxlZCA9IGZhbHNlO1xuXG4gIC8vIGNoZWNrRHVwbGljYXRlU2F2ZUVuYWJsZSgpIHtcbiAgLy8gICB0aGlzLmR1cGxpY2F0ZVNhdmVFbmFibGVkID1cbiAgLy8gICAgIHRoaXMuc2VsZWN0ZWRSYWRpb1R5cGUgPT09ICdkdXBsaWNhdGUnICYmIHRoaXMuc2VsZWN0ZWREdXBsaWNhdGVJbWFnZXNMaXN0Lmxlbmd0aCA+IDA7XG4gIC8vIH1cblxuICBpc01vZGFsT3BlbiA9IGZhbHNlO1xuICBAVmlld0NoaWxkKFwiaW1hZ2VQb3B1cFwiKSBpbWFnZVBvcHVwOiBFbGVtZW50UmVmO1xuICBzZWxlY3RlZEltYWdlQXJyYXkodXJsOiBhbnksIGRhdGE6IGFueSkge1xuICAgIHRoaXMuaXNNb2RhbE9wZW4gPSB0cnVlO1xuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLmltYWdlUG9wdXAsIHtcbiAgICAgIGNlbnRlcmVkOiB0cnVlLFxuICAgICAgc2l6ZTogXCJsZ1wiLFxuICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsXG4gICAgICBrZXlib2FyZDogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBjbG9zZUltYWdlKCkge1xuICAgIHRoaXMuaXNNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnRlbXBNb2RhbEltYWdlID0gbnVsbDsgLy8gQ2xlYXIgdGVtcG9yYXJ5IGltYWdlIHdoZW4gY2xvc2luZyBtb2RhbFxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcbiAgfVxuXG4gIGNhbkVuYWJsZUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY291bnREYXRhIHx8ICF0aGlzLmZvbGRlckRhdGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgeyBkdXBsaWNhdGUsIGhvdXNla2VlcGluZywgZW1wbG95ZWUsIGp1bmsgfSA9IHRoaXMuY291bnREYXRhO1xuXG4gICAgLy8gQ2hlY2sgY291bnQgY29uZGl0aW9uXG4gICAgY29uc3QgaGFzQ291bnQgPSBkdXBsaWNhdGUgPiAwIHx8IGhvdXNla2VlcGluZyA+IDAgfHwgZW1wbG95ZWUgPiAwIHx8IGp1bmsgPiAwO1xuXG4gICAgLy8gQ29udmVydCBmb2xkZXJEYXRlIHRvIERhdGVcbiAgICBjb25zdCBmb2xkZXIgPSBuZXcgRGF0ZSh0aGlzLmZvbGRlckRhdGUpO1xuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcblxuICAgIC8vIE5vcm1hbGl6ZSB0aW1lcyAocmVtb3ZlIGhvdXJzIGZvciBwcm9wZXIgZGF5IGNvbXBhcmlzb24pXG4gICAgZm9sZGVyLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIHRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGRpZmZlcmVuY2UgaW4gZGF5c1xuICAgIGNvbnN0IGRpZmZJblRpbWUgPSB0b2RheS5nZXRUaW1lKCkgLSBmb2xkZXIuZ2V0VGltZSgpO1xuICAgIGNvbnN0IGRpZmZJbkRheXMgPSBkaWZmSW5UaW1lIC8gKDEwMDAgKiAzNjAwICogMjQpO1xuXG4gICAgLy8gV2l0aGluIGxhc3QgNyBkYXlzIOKGkiBkaWZmIGJldHdlZW4gMCBhbmQgN1xuICAgIGNvbnN0IGlzV2l0aGluTGFzdDcgPSBkaWZmSW5EYXlzID49IDAgJiYgZGlmZkluRGF5cyA8PSA3O1xuXG4gICAgcmV0dXJuIGhhc0NvdW50ICYmIGlzV2l0aGluTGFzdDc7XG4gIH1cblxuICBjdXJyZW50SW1hZ2VJbmRleDogbnVtYmVyID0gMDtcbiAgZ2V0IGNhbk5hdmlnYXRlTGVmdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50SW1hZ2VJbmRleCA+IDA7XG4gIH1cblxuICBnZXQgY2FuTmF2aWdhdGVSaWdodCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50SW1hZ2VJbmRleCA8IHRoaXMuaW1hZ2VzQXJyYXlEYXRhLmxlbmd0aCAtIDE7XG4gIH1cblxuICBuYXZpZ2F0ZUltYWdlKGRpcmVjdGlvbjogXCJsZWZ0XCIgfCBcInJpZ2h0XCIpIHtcbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLmltYWdlc0FycmF5RGF0YS5sZW5ndGg7XG5cbiAgICBpZiAoZGlyZWN0aW9uID09PSBcImxlZnRcIiAmJiB0aGlzLmNhbk5hdmlnYXRlTGVmdCkge1xuICAgICAgdGhpcy5jdXJyZW50SW1hZ2VJbmRleC0tO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBcInJpZ2h0XCIgJiYgdGhpcy5jYW5OYXZpZ2F0ZVJpZ2h0KSB7XG4gICAgICB0aGlzLmN1cnJlbnRJbWFnZUluZGV4Kys7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHNlbGVjdGVkIGltYWdlXG4gICAgdGhpcy5zZWxlY3RJbWFnZUFycmF5ID0gdGhpcy5pbWFnZXNBcnJheURhdGFbdGhpcy5jdXJyZW50SW1hZ2VJbmRleF07XG5cbiAgICAvLyBVcGRhdGUgcmVtYWluaW5nIGltYWdlc1xuICAgIHRoaXMucmVtYWluaW5nSW1hZ2VBcnJheSA9IHRoaXMuaW1hZ2VzQXJyYXlEYXRhLmZpbHRlcihcbiAgICAgIChfOiBhbnksIGk6IGFueSkgPT4gaSAhPT0gdGhpcy5jdXJyZW50SW1hZ2VJbmRleFxuICAgICk7XG4gIH1cblxuICAvLyBHZXQgY3VycmVudCBmb290ZmFsbCBjb3VudCBmb3Igc2VsZWN0ZWQgZGF0ZVxuICBnZXRDdXJyZW50Rm9vdGZhbGwoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuZm9sZGVyRGF0ZSkgcmV0dXJuIDA7XG4gICAgY29uc3Qgbm9ybWFsaXplZERhdGUgPSBuZXcgRGF0ZSh0aGlzLmZvbGRlckRhdGUpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdO1xuICAgIHJldHVybiB0aGlzLmNhcmREYXRhTWFwW25vcm1hbGl6ZWREYXRlXT8uZm9vdGZhbGxDb3VudCB8fCAwO1xuICB9XG5cbiAgLy8gR2V0IHBlcmNlbnRhZ2UgY2hhbmdlIGZyb20gZm9vdGZhbGxDb3VudFRyZW5kXG4gIGdldEZvb3RmYWxsUGVyY2VudGFnZUNoYW5nZSgpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5mb2xkZXJEYXRlKSByZXR1cm4gMDtcbiAgICBjb25zdCBub3JtYWxpemVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuZm9sZGVyRGF0ZSkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF07XG4gICAgcmV0dXJuIHRoaXMuY2FyZERhdGFNYXBbbm9ybWFsaXplZERhdGVdPy5mb290ZmFsbENvdW50VHJlbmQgfHwgMDtcbiAgfVxuXG4gIC8vIEZvcm1hdCBkb3dudGltZSBmcm9tIGRvd250aW1lIGtleSAoaW4gbWludXRlcylcbiAgZ2V0Rm9ybWF0dGVkRG93bnRpbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuZm9sZGVyRGF0ZSkgcmV0dXJuICctJztcbiAgICBjb25zdCBub3JtYWxpemVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuZm9sZGVyRGF0ZSkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF07XG4gICAgY29uc3QgZG93bnRpbWVNaW51dGVzID0gdGhpcy5jYXJkRGF0YU1hcFtub3JtYWxpemVkRGF0ZV0/LmRvd250aW1lIHx8IDA7XG4gICAgXG4gICAgaWYgKCFkb3dudGltZU1pbnV0ZXMgfHwgZG93bnRpbWVNaW51dGVzID09PSAwKSByZXR1cm4gJy0nO1xuICAgIFxuICAgIGNvbnN0IHsgaG91cnMsIG1pbnMgfSA9IHRoaXMuY29udmVydE1pbnV0ZXMoZG93bnRpbWVNaW51dGVzKTtcbiAgICBpZiAoaG91cnMgPiAwICYmIG1pbnMgPiAwKSB7XG4gICAgICByZXR1cm4gYCR7aG91cnN9aHIgJHttaW5zfSBtaW5zYDtcbiAgICB9IGVsc2UgaWYgKGhvdXJzID4gMCkge1xuICAgICAgcmV0dXJuIGAke2hvdXJzfWhyYDtcbiAgICB9IGVsc2UgaWYgKG1pbnMgPiAwKSB7XG4gICAgICByZXR1cm4gYCR7bWluc30gbWluc2A7XG4gICAgfVxuICAgIHJldHVybiAnLSc7XG4gIH1cblxuICAvLyBHZXQgdGlja2V0IHN0YXR1c1xuICBnZXRUaWNrZXRTdGF0dXMoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuZm9sZGVyRGF0ZSkgcmV0dXJuICctJztcbiAgICBjb25zdCBub3JtYWxpemVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuZm9sZGVyRGF0ZSkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF07XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5jYXJkRGF0YU1hcFtub3JtYWxpemVkRGF0ZV0/LnRpY2tldFN0YXR1cztcbiAgICByZXR1cm4gc3RhdHVzIHx8ICctJztcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZXJlJ3MgZG93bnRpbWVcbiAgaGFzRG93bnRpbWUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmZvbGRlckRhdGUpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBub3JtYWxpemVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuZm9sZGVyRGF0ZSkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF07XG4gICAgY29uc3QgZG93bnRpbWUgPSB0aGlzLmNhcmREYXRhTWFwW25vcm1hbGl6ZWREYXRlXT8uZG93bnRpbWUgfHwgMDtcbiAgICByZXR1cm4gZG93bnRpbWUgPiAwO1xuICB9XG5cbiAgLy8gR2V0IHRhZ2dpbmcgZGF0YSBmcm9tIHRpY2tldFJldmlld1N0YXR1cyB3aGVyZSBhY3Rpb25UeXBlID0gXCJ0YWdnaW5nXCJcbiAgZ2V0VGFnZ2luZ0RhdGEodHlwZTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIXRoaXMudGlja2V0UmV2aWV3U3RhdHVzIHx8ICFBcnJheS5pc0FycmF5KHRoaXMudGlja2V0UmV2aWV3U3RhdHVzKSB8fCAhdHlwZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRpY2tldFJldmlld1N0YXR1cy5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0/LmFjdGlvblR5cGUgPT09IHR5cGUpIHx8IG51bGw7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aWNrZXQgc3RhdHVzIGlzIHJhaXNlZFxuICBpc1RpY2tldFJhaXNlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLmdldFRpY2tldFN0YXR1cygpO1xuICAgIHJldHVybiBzdGF0dXMgIT09ICctJyAmJiBzdGF0dXM/LnRvTG93ZXJDYXNlKCkgPT09IFwicmFpc2VkXCI7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aWNrZXQgc3RhdHVzIGlzIGNsb3NlZFxuICBpc1RpY2tldENsb3NlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLmdldFRpY2tldFN0YXR1cygpO1xuICAgIHJldHVybiBzdGF0dXMgIT09ICctJyAmJiBzdGF0dXM/LnRvTG93ZXJDYXNlKCkgPT09IFwiY2xvc2VkXCI7XG4gIH1cblxuICAvLyBHZXQgYWxsIHRhZ2dpbmcgZGF0YSBpdGVtcyAoZm9yIGluaXRpYWwgYW5kIGZpbmFsIHJldmlzaW9ucylcbiAgZ2V0QWxsVGFnZ2luZ0RhdGEoKTogYW55W10ge1xuICAgIGlmICghdGhpcy50aWNrZXRSZXZpZXdTdGF0dXMgfHwgIUFycmF5LmlzQXJyYXkodGhpcy50aWNrZXRSZXZpZXdTdGF0dXMpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRpY2tldFJldmlld1N0YXR1cy5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbT8uYWN0aW9uVHlwZSA9PT0gXCJ0YWdnaW5nXCIpIHx8IFtdO1xuICB9XG5cbiAgLy8gR2V0IGluaXRpYWwgcmV2aXNpb24gZGF0YSAoZmlyc3QgdGFnZ2luZyBpdGVtKVxuICBnZXRJbml0aWFsUmV2aXNpb25EYXRhKCk6IGFueSB7XG4gICAgY29uc3QgYWxsVGFnZ2luZyA9IHRoaXMuZ2V0QWxsVGFnZ2luZ0RhdGEoKTtcbiAgICByZXR1cm4gYWxsVGFnZ2luZy5sZW5ndGggPiAwID8gYWxsVGFnZ2luZ1swXSA6IG51bGw7XG4gIH1cblxuICAvLyBHZXQgZmluYWwgcmV2aXNpb24gZGF0YSAobGFzdCB0YWdnaW5nIGl0ZW0sIG9yIHNlY29uZCBpZiBleGlzdHMpXG4gIGdldEZpbmFsUmV2aXNpb25EYXRhKCk6IGFueSB7XG4gICAgY29uc3QgYWxsVGFnZ2luZyA9IHRoaXMuZ2V0QWxsVGFnZ2luZ0RhdGEoKTtcbiAgICByZXR1cm4gYWxsVGFnZ2luZy5sZW5ndGggPiAxID8gYWxsVGFnZ2luZ1thbGxUYWdnaW5nLmxlbmd0aCAtIDFdIDogKGFsbFRhZ2dpbmcubGVuZ3RoID4gMCA/IGFsbFRhZ2dpbmdbMF0gOiBudWxsKTtcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IGNvdW50IHZhbHVlIGJ5IHR5cGUgZnJvbSBjb3VudCBhcnJheVxuICBnZXRDb3VudEJ5VHlwZShkYXRhOiBhbnksIGNvdW50VHlwZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBpZiAoIWRhdGEgfHwgIWRhdGEuY291bnQpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBpZiBjb3VudCBpcyBhbiBhcnJheSAobmV3IGZvcm1hdClcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLmNvdW50KSkge1xuICAgICAgY29uc3QgY291bnRJdGVtID0gZGF0YS5jb3VudC5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0/LnR5cGUgPT09IGNvdW50VHlwZSk7XG4gICAgICByZXR1cm4gY291bnRJdGVtPy52YWx1ZSB8fCAwO1xuICAgIH1cbiAgICBcbiAgICAvLyBGYWxsYmFjayBmb3Igb2xkIGZvcm1hdCAob2JqZWN0KVxuICAgIGNvbnN0IGtleU1hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICdkdXBsaWNhdGUnOiAnZHVwbGljYXRlQ291bnQnLFxuICAgICAgJ2VtcGxveWVlJzogJ2VtcGxveWVlQ291bnQnLFxuICAgICAgJ2p1bmsnOiAnanVua0NvdW50JyxcbiAgICAgICdob3VzZUtlZXBpbmcnOiAnaG91c2VLZWVwaW5nQ291bnQnXG4gICAgfTtcbiAgICBcbiAgICBjb25zdCBrZXkgPSBrZXlNYXBbY291bnRUeXBlXTtcbiAgICByZXR1cm4ga2V5ID8gKGRhdGEuY291bnRba2V5XSB8fCAwKSA6IDA7XG4gIH1cblxuICAvLyBDYWxjdWxhdGUgdG90YWwgcGVyY2VudGFnZTogKHN1bSBvZiBhbGwgY291bnQgdmFsdWVzIC8gcmV2aWNlZEZvb3RmYWxsKSAqIDEwMFxuICAvLyB0eXBlOiAncmFpc2VkJyB8ICdmaW5hbHJldmlldydcbiAgZ2V0UmV2aXNpb25DYWxjdWxhdGlvbih0eXBlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy50aWNrZXRSZXZpZXdTdGF0dXMgfHwgIUFycmF5LmlzQXJyYXkodGhpcy50aWNrZXRSZXZpZXdTdGF0dXMgfHwgIXR5cGUgKSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLy8gRmlsdGVyIGl0ZW1zIGJhc2VkIG9uIGFjdGlvblR5cGVcbiAgICBjb25zdCB0YWdnaW5nSXRlbXMgPSB0aGlzLnRpY2tldFJldmlld1N0YXR1cy5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbT8uYWN0aW9uVHlwZSA9PT0gdHlwZSk7XG4gICAgaWYgKHRhZ2dpbmdJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGlmICghdGFnZ2luZ0l0ZW1zWzBdIHx8ICF0YWdnaW5nSXRlbXNbMF0ucmV2aWNlZEZvb3RmYWxsIHx8IHRhZ2dpbmdJdGVtc1swXS5yZXZpY2VkRm9vdGZhbGwgPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBjb3VudCA9IHRhZ2dpbmdJdGVtc1swXS5jb3VudCB8fCBbXTtcbiAgICAvLyBDaGVjayBpZiBjb3VudCBpcyBhbiBhcnJheSAobmV3IGZvcm1hdCkgb3Igb2JqZWN0IChvbGQgZm9ybWF0KVxuICAgIGxldCB0b3RhbENvdW50ID0gMDtcbiAgICBcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb3VudCkpIHtcbiAgICAgIC8vIE5ldyBmb3JtYXQ6IGNvdW50IGlzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCB0eXBlIGFuZCB2YWx1ZVxuICAgICAgY29uc3QgdHlwZXNUb1N1bSA9IFsnZHVwbGljYXRlJywgJ2VtcGxveWVlJywgJ2hvdXNlS2VlcGluZycsICdqdW5rJ107XG4gICAgICB0b3RhbENvdW50ID0gY291bnRcbiAgICAgICAgLmZpbHRlcigoaXRlbTogYW55KSA9PiB0eXBlc1RvU3VtLmluY2x1ZGVzKGl0ZW0/LnR5cGUpKVxuICAgICAgICAucmVkdWNlKChzdW06IG51bWJlciwgaXRlbTogYW55KSA9PiBzdW0gKyAoaXRlbT8udmFsdWUgfHwgMCksIDApO1xuICAgIH0gXG4gICAgLy8gZWxzZSB7XG4gICAgLy8gICAvLyBPbGQgZm9ybWF0OiBjb3VudCBpcyBhbiBvYmplY3Qgd2l0aCBrZXlzXG4gICAgLy8gICB0b3RhbENvdW50ID0gKGNvdW50LmR1cGxpY2F0ZUNvdW50IHx8IDApICsgXG4gICAgLy8gICAgICAgICAgICAgICAgKGNvdW50LmVtcGxveWVlQ291bnQgfHwgMCkgKyBcbiAgICAvLyAgICAgICAgICAgICAgICAoY291bnQuanVua0NvdW50IHx8IDApICsgXG4gICAgLy8gICAgICAgICAgICAgICAgKGNvdW50LmhvdXNlS2VlcGluZ0NvdW50IHx8IDApO1xuICAgIC8vIH1cbiAgICByZXR1cm4gTWF0aC5yb3VuZCgodG90YWxDb3VudCAvIHRhZ2dpbmdJdGVtc1swXS5yZXZpY2VkRm9vdGZhbGwpICogMTAwKTtcbiAgfVxuXG4gIHJlcXVlc3RSZXNldCgpOiB2b2lkIHtcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5yZXNldFJlcXVlc3RQb3B1cCwge1xuICAgICAgY2VudGVyZWQ6IHRydWUsXG4gICAgICBzaXplOiBcIm1kXCIsXG4gICAgICBiYWNrZHJvcDogXCJzdGF0aWNcIixcbiAgICAgIGtleWJvYXJkOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbFJlc2V0UmVxdWVzdCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XG4gIH1cblxuICBzdWJtaXRSZXNldFJlcXVlc3QoKTogdm9pZCB7XG4gICAgbGV0IHBheWxvYWQgPSB7XG4gICAgICBzdG9yZUlkOiB0aGlzLnN0b3JlSWRhcnJheSAmJiB0aGlzLnN0b3JlSWRhcnJheS5sZW5ndGggPiAwID8gdGhpcy5zdG9yZUlkYXJyYXlbMF0gOiBudWxsLFxuICAgICAgZGF0ZVN0cmluZzogdGhpcy5mb2xkZXJEYXRlIHx8IFwiXCJcbiAgICB9O1xuICAgIGNvbnNvbGUubG9nKCdzdWJtaXRSZXNldFJlcXVlc3QgUGF5bG9hZDonLCBwYXlsb2FkKTtcbiAgICAvLyBDbG9zZSBtb2RhbCBhZnRlciBzdWJtaXNzaW9uXG4gICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xuICAgIHRoaXMuc2VydmljZVxuICAgICAgLnNlbmRWTVNSZXNldFJlcXVlc3QocGF5bG9hZClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgID8uc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRDYXJkRGF0YSgpO1xuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QoXCJSZXF1ZXN0IHJlc2V0IHN1Y2Nlc3NmdWxseVwiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIHJlc2V0IHJlcXVlc3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnN0IG1zZyA9XG4gICAgICAgICAgICBlcnIuZXJyb3I/LmVycm9yIHx8XG4gICAgICAgICAgICBlcnIuZXJyb3IgfHxcbiAgICAgICAgICAgIGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHxcbiAgICAgICAgICAgIGVyci5tZXNzYWdlIHx8XG4gICAgICAgICAgICBcIlVua25vd24gZXJyb3JcIjtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBzdWJtaXRSZXNldFJlcXVlc3QgOicsIGVycik7XG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KG1zZyB8fCBcIlVua25vd24gZXJyb3Igb2NjdXJyZWRcIik7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICBcbiAgfVxuXG4gIC8vIEdldCBub3JtYWxpemVkIGRhdGUgZm9yIGN1cnJlbnQgZm9sZGVyRGF0ZVxuICBnZXROb3JtYWxpemVkRGF0ZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuZm9sZGVyRGF0ZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMuZm9sZGVyRGF0ZSkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF07XG4gIH1cblxuICAvLyBHZXQgc2VsZWN0ZWQgZGF0ZSdzIGNhcmQgZGF0YVxuICBnZXRTZWxlY3RlZERhdGVDYXJkRGF0YSgpOiBhbnkge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWREYXRlID0gdGhpcy5nZXROb3JtYWxpemVkRGF0ZSgpO1xuICAgIHJldHVybiBub3JtYWxpemVkRGF0ZSA/IHRoaXMuY2FyZERhdGFNYXBbbm9ybWFsaXplZERhdGVdIDogbnVsbDtcbiAgfVxufSIsIjxkaXYgY2xhc3M9XCJjYXJkIG10LTNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgbXQtMyBweC0wIGJvcmRlci1ib3R0b20tMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWFjY29yZGlvblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1hY2NvcmRpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gZm9yIG5ldyBuYXZpZ2F0aW9uIGNoYW5nZXMgLS0+XG4gICAgICAgICAgICAgICAgPCEtLSBvbGQgdmlldyB3aGlsZSBmb2xkZXIgdmlldyAtLT5cbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZm9sZGVyVmlld1wiIGNsYXNzPVwibWFpbmhlYWRpbmcgcGItMCBjdXN0b20tYWNjb3JkaW9uLWhlYWRlclwiIChjbGljayk9XCJ0b2dnbGVBY2NvcmRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbWctZGlyZWNcIj5JbWFnZSBEaXJlY3Rvcnk8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWNjb3JkaW9uLWFycm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEb3duIGFycm93IGZvciBjb2xsYXBzZWQgc3RhdGUsIHVwIGFycm93IGZvciBleHBhbmRlZCBzdGF0ZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWlzQWNjb3JkaW9uRXhwYW5kZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNlwiIGhlaWdodD1cIjZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEgMUw1IDVMOSAxXCIgc3Ryb2tlPVwiIzA3MTQzN1wiIHN0cm9rZS13aWR0aD1cIjFcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXNBY2NvcmRpb25FeHBhbmRlZFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI2XCIgaGVpZ2h0PVwiNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMSA1TDUgMUw5IDVcIiBzdHJva2U9XCIjMWI4NGZmXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8IS0tIG5ldyB2aWV3IHdoaWxlIG5vdCBpbiBmb2xkZXIgdmlldyB2aWV3IC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZm9sZGVyVmlld1wiIGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImJhY2tuYXYgJiYgIWltYWdlRmxvd1wiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiYmFja1RvRm9vdGZhbGwoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsdGVyPVwidXJsKCNmaWx0ZXIwX2RfMjU4NV83MDM2KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIxXCIgd2lkdGg9XCIzNlwiIGhlaWdodD1cIjM2XCIgcng9XCI4XCIgZmlsbD1cIndoaXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIxLjVcIiB3aWR0aD1cIjM1XCIgaGVpZ2h0PVwiMzVcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiNEMEQ1RERcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI1LjgzMjcgMTlIMTQuMTY2TTE0LjE2NiAxOUwxOS45OTkzIDI0LjgzMzRNMTQuMTY2IDE5TDE5Ljk5OTMgMTMuMTY2N1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF8yNTg1XzcwMzZcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PVwiMFwiIHJlc3VsdD1cIkJhY2tncm91bmRJbWFnZUZpeFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBpbj1cIlNvdXJjZUFscGhhXCIgdHlwZT1cIm1hdHJpeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIiByZXN1bHQ9XCJoYXJkQWxwaGFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPVwiMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAuMDYyNzQ1MSAwIDAgMCAwIDAuMDk0MTE3NiAwIDAgMCAwIDAuMTU2ODYzIDAgMCAwIDAuMDUgMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW4yPVwiQmFja2dyb3VuZEltYWdlRml4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMjU4NV83MDM2XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbj1cIlNvdXJjZUdyYXBoaWNcIiBpbjI9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMjU4NV83MDM2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJzaGFwZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gYmFjayBmcm9tIGltYWdlIGZsb3cgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaW1hZ2VGbG93XCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJiYWNrVG9Gb290ZmFsbDEoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsdGVyPVwidXJsKCNmaWx0ZXIwX2RfMjU4NV83MDM2KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIxXCIgd2lkdGg9XCIzNlwiIGhlaWdodD1cIjM2XCIgcng9XCI4XCIgZmlsbD1cIndoaXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIxLjVcIiB3aWR0aD1cIjM1XCIgaGVpZ2h0PVwiMzVcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiNEMEQ1RERcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI1LjgzMjcgMTlIMTQuMTY2TTE0LjE2NiAxOUwxOS45OTkzIDI0LjgzMzRNMTQuMTY2IDE5TDE5Ljk5OTMgMTMuMTY2N1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF8yNTg1XzcwMzZcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PVwiMFwiIHJlc3VsdD1cIkJhY2tncm91bmRJbWFnZUZpeFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBpbj1cIlNvdXJjZUFscGhhXCIgdHlwZT1cIm1hdHJpeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIiByZXN1bHQ9XCJoYXJkQWxwaGFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPVwiMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAuMDYyNzQ1MSAwIDAgMCAwIDAuMDk0MTE3NiAwIDAgMCAwIDAuMTU2ODYzIDAgMCAwIDAuMDUgMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW4yPVwiQmFja2dyb3VuZEltYWdlRml4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMjU4NV83MDM2XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbj1cIlNvdXJjZUdyYXBoaWNcIiBpbjI9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMjU4NV83MDM2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJzaGFwZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW1nLWRpcmVjXCI+SW1hZ2UgRGlyZWN0b3J5IHwge3tmb2xkZXJEYXRlIHwgZGF0ZTonZGQgTU1NLCB5eXl5J319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWZvbGRlclZpZXdcIiBjbGFzcz1cIm1haW5oZWFkaW5nLTEgcGItMCBjdXN0b20tYWNjb3JkaW9uLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWNjb3JkaW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWNjb3JkaW9uLWFycm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEb3duIGFycm93IGZvciBjb2xsYXBzZWQgc3RhdGUsIHVwIGFycm93IGZvciBleHBhbmRlZCBzdGF0ZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWlzQWNjb3JkaW9uRXhwYW5kZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNlwiIGhlaWdodD1cIjZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEgMUw1IDVMOSAxXCIgc3Ryb2tlPVwiIzA3MTQzN1wiIHN0cm9rZS13aWR0aD1cIjFcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXNBY2NvcmRpb25FeHBhbmRlZFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI2XCIgaGVpZ2h0PVwiNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMSA1TDUgMUw5IDVcIiBzdHJva2U9XCIjMWI4NGZmXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxzZWN0aW9uICpuZ0lmPVwiaXNBY2NvcmRpb25FeHBhbmRlZFwiPlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJmb2xkZXJWaWV3XCIgY2xhc3M9XCJjYXJkLWJvZHkgcHgtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtbGlzdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1saXN0LXNjcm9sbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1jYXJkXCIgKm5nRm9yPVwibGV0IG9iaiBvZiBkYXRlQXJyYXk7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydkYXRlLWNhcmQtYWN0aXZlJzogaSA9PT0gc2VsZWN0SW5kZXh9XCIgKGNsaWNrKT1cImdldGltYWdlcyhpLCBvYmopXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1jYXJkLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwiY2FsZW5kYXItaWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi42NjY3IDIuNjY2NjdIMTJWMkMxMiAxLjYzMTgxIDExLjcwMTUgMS4zMzMzMyAxMS4zMzMzIDEuMzMzMzNDMTAuOTY1MSAxLjMzMzMzIDEwLjY2NjcgMS42MzE4MSAxMC42NjY3IDJWMi42NjY2N0g1LjMzMzMzVjJDNS4zMzMzMyAxLjYzMTgxIDUuMDM0ODYgMS4zMzMzMyA0LjY2NjY3IDEuMzMzMzNDNC4yOTg0OCAxLjMzMzMzIDQgMS42MzE4MSA0IDJWMi42NjY2N0gzLjMzMzMzQzIuNTk2OTUgMi42NjY2NyAyIDMuMjYzNjIgMiA0VjEzLjMzMzNDMiAxNC4wNjk3IDIuNTk2OTUgMTQuNjY2NyAzLjMzMzMzIDE0LjY2NjdIMTIuNjY2N0MxMy40MDMgMTQuNjY2NyAxNCAxNC4wNjk3IDE0IDEzLjMzMzNWNEMxNCAzLjI2MzYyIDEzLjQwMyAyLjY2NjY3IDEyLjY2NjcgMi42NjY2N1pNMTIuNjY2NyAxMy4zMzMzSDMuMzMzMzNWNkgxMi42NjY3VjEzLjMzMzNaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNjY3MDg1XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRhdGUtdGV4dFwiPnt7b2JqIHwgZGF0ZTonZGQgTU1NJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY2FyZERhdGFNYXBbb2JqXT8udGlja2V0U3RhdHVzTG93ZXIgYXMgc3RhdHVzXCIgY2xhc3M9XCJiYWRnZSBtcy0yXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhZGdlLWxpZ2h0LXN1Y2Nlc3MnOiBzdGF0dXMgPT09ICdjbG9zZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhZGdlLWxpZ2h0LXdhcm5pbmcnOiBzdGF0dXMgPT09ICdyYWlzZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhZGdlLWxpZ2h0LWRlZmF1bHQnOiBzdGF0dXMgIT09ICdjbG9zZWQnICYmIHN0YXR1cyAhPT0gJ3JhaXNlZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN0YXR1cyA9PT0gJ2Nsb3NlZCcgPyAnVGlja2V0IGNsb3NlZCcgOiAoc3RhdHVzID09PSAncmFpc2VkJyA/ICdUaWNrZXQgcmFpc2VkJyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXJkRGF0YU1hcFtvYmpdPy50aWNrZXRTdGF0dXMgfHwgJycpKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RmYWxsLWNvdW50XCI+e3sgY2FyZERhdGFNYXBbb2JqXT8uZm9vdGZhbGxDb3VudCB8fCAwIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGZhbGwtbGFiZWxcIj5Ub3RhbCBmb290ZmFsbDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuXG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFmb2xkZXJWaWV3XCIgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgIDxzZWN0aW9uICpuZ0lmPVwiIWltYWdlRmxvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBUaWNrZXQgQmxvY2sgQWxlcnQgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRTZWxlY3RlZERhdGVDYXJkRGF0YSgpPy5yYWlzZWRTdGF0dXNFbmFibGVkID09PSAnYmxvY2snXCIgY2xhc3M9XCJjb2wtMTIgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpY2tldC1ibG9jay1hbGVydFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtYmxvY2stYWxlcnQtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LWJsb2NrLWFsZXJ0LWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIxMlwiIGZpbGw9XCIjRjA0NDM4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEyIDhWMTNcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTZcIiByPVwiMVwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtYmxvY2stYWxlcnQtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpY2tldC1ibG9jay1hbGVydC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW5ub3QgcmFpc2UgdGlja2V0IGZvciBuZXh0IHt7IGdldFNlbGVjdGVkRGF0ZUNhcmREYXRhKCk/Lm5vT2ZCbG9ja2VkRGF5c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICcwJyB9fSBkYXlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtYmxvY2stYWxlcnQtZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBsb29rcyBsaWtlIHlvdSBoYXZlIGFjaGlldmVkIDk1JSBhY2N1cmFjeSBmb3IgdGhlIHRocmVlIHRpY2tldHMgcmFpc2VkIHRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aC4gVGhpcyBsaW1pdHMgeW91IGZyb20gcmFpc2luZyBtb3JlIHRpY2tldHMgdG8gYXZvaWQgcmVkdW5kYW5jeS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpY2tldC1ibG9jay1hbGVydC1hY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugc3RpbGwgd2FudCB0byByYWlzZSB0aWNrZXRzLCA8c3BhbiBjbGFzcz1cInRpY2tldC1ibG9jay1hbGVydC1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlcXVlc3RSZXNldCgpXCI+c2VuZCByZXF1ZXN0PC9zcGFuPiB0byByZXNldC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBUaWNrZXQgUmVxdWVzdCBTdWNjZXNzIEFsZXJ0IC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0U2VsZWN0ZWREYXRlQ2FyZERhdGEoKT8ucmFpc2VkU3RhdHVzRW5hYmxlZCA9PT0gJ3JlcXVlc3QnXCIgY2xhc3M9XCJjb2wtMTIgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpY2tldC1yZXF1ZXN0LWFsZXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpY2tldC1yZXF1ZXN0LWFsZXJ0LWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpY2tldC1yZXF1ZXN0LWFsZXJ0LWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yIDIxTDIzIDEyTDIgM1YxMEwxNyAxMkwyIDE0VjIxWlwiIGZpbGw9XCIjMTBCOTgxXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpY2tldC1yZXF1ZXN0LWFsZXJ0LXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtcmVxdWVzdC1hbGVydC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0IFJlcXVlc3QgU2VudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LXJlcXVlc3QtYWxlcnQtZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3VyIHJlcXVlc3QgdG8gZW5hYmxlIHRpY2tldCByYWlzaW5nIGhhcyBiZWVuIHN1Ym1pdHRlZC4gWW91J2xsIGJlIG5vdGlmaWVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jZSBpdCdzIGFwcHJvdmVkLiBQbGVhc2UgZW5zdXJlIGZ1dHVyZSB0aWNrZXQgYWNjdXJhY3kgcmVtYWlucyB3aXRoaW4gdGhlIDk1JVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBmb290ZmFsbCB0cmVuZHMgZmVhdHVyZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RmYWxsVHJlbmRzVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRpY2tldFN0YXR1c1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBmb290ZmFsbCB0cmVuZHMgZmVhdHVyZSBlbmQgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zaHJpbmstMCBtdC0zIGp1c3RpZnktY29udGVudC1zdGFydCBhbGlnbi1pdGVtcy1jZW50ZXIgcHgtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiAqbmdJZj1cImJhY2tuYXZcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImJhY2tUb0Zvb3RmYWxsKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHZpZXdCb3g9XCIwIDAgNDAgNDBcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsdGVyPVwidXJsKCNmaWx0ZXIwX2RfMjU4NV83MDM2KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjJcIiB5PVwiMVwiIHdpZHRoPVwiMzZcIiBoZWlnaHQ9XCIzNlwiIHJ4PVwiOFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMzVcIiBoZWlnaHQ9XCIzNVwiIHJ4PVwiNy41XCIgc3Ryb2tlPVwiI0QwRDVERFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI1LjgzMjcgMTlIMTQuMTY2TTE0LjE2NiAxOUwxOS45OTkzIDI0LjgzMzRNMTQuMTY2IDE5TDE5Ljk5OTMgMTMuMTY2N1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsdGVyIGlkPVwiZmlsdGVyMF9kXzI1ODVfNzAzNlwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT1cIjBcIiByZXN1bHQ9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGluPVwiU291cmNlQWxwaGFcIiB0eXBlPVwibWF0cml4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIiByZXN1bHQ9XCJoYXJkQWxwaGFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZU9mZnNldCBkeT1cIjFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIxXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwLjA2Mjc0NTEgMCAwIDAgMCAwLjA5NDExNzYgMCAwIDAgMCAwLjE1Njg2MyAwIDAgMCAwLjA1IDBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbjI9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMjU4NV83MDM2XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW49XCJTb3VyY2VHcmFwaGljXCIgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93XzI1ODVfNzAzNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cInNoYXBlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImltZy1kaXJlYyBtcy0yIG10LTFcIj57e2ZvbGRlckRhdGUgfCBkYXRlOidkZCBNTU0sIHl5eXknfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXdhcm5pbmcgbXgtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWdldFRpY2tldFN0YXR1c2VzKCkuaW5jbHVkZXMoJ2Nsb3NlZCcpICYmIGdldFRpY2tldFN0YXR1c2VzKCkuaW5jbHVkZXMoJ29wZW4nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaWNrZXQgUmFpc2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtc3VjY2VzcyBteC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRUaWNrZXRTdGF0dXNlcygpLmluY2x1ZGVzKCdjbG9zZWQnKVwiPlRpY2tldCBDbG9zZWQ8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWdldFRpY2tldFN0YXR1c2VzKCkuaW5jbHVkZXMoJ29wZW4nKSAmJiAhZ2V0VGlja2V0U3RhdHVzZXMoKS5pbmNsdWRlcygnY2xvc2VkJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXMtYXV0byB0ZXh0LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cIiFjYW5FbmFibGVCdXR0b24oKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJSYWlzZWQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYWlzZSB0aWNrZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFmb2xkZXJWaWV3XCIgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB3LTEwMCBteS0yIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWdyb3VwIGJnLXdoaXRlIGJvcmRlci0xIGJ0bi1ncm91cCB3LWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShjb3VudERhdGE/Lmxlbmd0aCA+IDApXCI+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHB4LTYgcHktM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ0eXBlID09PSAnZm9vdGZhbGwnID8gJ2FjdGl2ZVBsYW5CdG4nIDogJ2luYWN0aXZlUGxhbkJ0bidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFBsYW5UcmVuZHMoJ2Zvb3RmYWxsJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvdGFsIEZvb3RmYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInR5cGUgPT09ICdmb290ZmFsbCcgPyAnYWN0aXZlUGxhbkJ0biBiYWRnZSBiYWRnZS1hY3RpdmUnIDogJ2luYWN0aXZlUGxhbkJ0biBiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvdW50RGF0YT8uZm9vdGZhbGxDb3VudCB8fCAwIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBweC02IHB5LTNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwidHlwZSA9PT0gJ25vbi10YWdnaW5nJyA/ICdhY3RpdmVQbGFuQnRuJyA6ICdpbmFjdGl2ZVBsYW5CdG4nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQbGFuVHJlbmRzKCdub24tdGFnZ2luZycpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb24tdGFnc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ0eXBlID09PSAnbm9uLXRhZ2dpbmcnID8gJ2FjdGl2ZVBsYW5CdG4gYmFkZ2UgYmFkZ2UtYWN0aXZlJyA6ICdpbmFjdGl2ZVBsYW5CdG4gYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb3VudERhdGE/Lm5vblRhZ3MgfHwgMCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgcHgtNiBweS0zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInR5cGUgPT09ICdkdXBsaWNhdGUnID8gJ2FjdGl2ZVBsYW5CdG4nIDogJ2luYWN0aXZlUGxhbkJ0bidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFBsYW5UcmVuZHMoJ2R1cGxpY2F0ZScpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEdXBsaWNhdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInR5cGUgPT09ICdkdXBsaWNhdGUnID8gJ2FjdGl2ZVBsYW5CdG4gYmFkZ2UgYmFkZ2UtYWN0aXZlJyA6ICdpbmFjdGl2ZVBsYW5CdG4gYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb3VudERhdGE/LmR1cGxpY2F0ZSB8fCAwIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBweC02IHB5LTNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwidHlwZSA9PT0gJ2VtcGxveWVlJyA/ICdhY3RpdmVQbGFuQnRuJyA6ICdpbmFjdGl2ZVBsYW5CdG4nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQbGFuVHJlbmRzKCdlbXBsb3llZScpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbXBsb3llZS9TdGFmZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ0eXBlID09PSAnZW1wbG95ZWUnID8gJ2FjdGl2ZVBsYW5CdG4gYmFkZ2UgYmFkZ2UtYWN0aXZlJyA6ICdpbmFjdGl2ZVBsYW5CdG4gYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb3VudERhdGE/LmVtcGxveWVlIHx8IDAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgcHgtNiBweS0zXCIgW25nQ2xhc3NdPVwidHlwZSA9PT0gJ2p1bmsnID8gJ2FjdGl2ZVBsYW5CdG4nIDogJ2luYWN0aXZlUGxhbkJ0bidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFBsYW5UcmVuZHMoJ2p1bmsnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSnVua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ0eXBlID09PSAnanVuaycgPyAnYmFkZ2UgYmFkZ2UtYWN0aXZlIGFjdGl2ZVBsYW5CdG4nIDogJyBiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0IGluYWN0aXZlUGxhbkJ0bidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb3VudERhdGE/Lmp1bmsgfHwgMCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBweC02IHB5LTNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwidHlwZSA9PT0gJ2hvdXNlLWtlZXBpbmcnID8gJ2FjdGl2ZVBsYW5CdG4nIDogJ2luYWN0aXZlUGxhbkJ0bidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFBsYW5UcmVuZHMoJ2hvdXNlLWtlZXBpbmcnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG91c2UgS2VlcGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ0eXBlID09PSAnaG91c2Uta2VlcGluZycgPyAnYmFkZ2UgYmFkZ2UtYWN0aXZlIGFjdGl2ZVBsYW5CdG4nIDogJyBiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0IGluYWN0aXZlUGxhbkJ0bidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb3VudERhdGE/LmhvdXNla2VlcGluZyB8fCAwIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCB2aWV3LXRvZ2dsZSBtcy1hdXRvXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlRvZ2dsZSB2aWV3XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgcHgtMyBweS0yXCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOiB2aWV3TW9kZSA9PT0gJ2dyaWQnfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRWaWV3TW9kZSgnZ3JpZCcpXCIgYXJpYS1sYWJlbD1cIkdyaWQgdmlld1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIzXCIgeT1cIjNcIiB3aWR0aD1cIjRcIiBoZWlnaHQ9XCI0XCIgcng9XCIxXCIgc3Ryb2tlPVwiIzQ3NTQ2N1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZmlsbF09XCJ2aWV3TW9kZSA9PT0gJ2dyaWQnID8gJyNFQUY4RkYnIDogJ25vbmUnXCI+PC9yZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjExXCIgeT1cIjNcIiB3aWR0aD1cIjRcIiBoZWlnaHQ9XCI0XCIgcng9XCIxXCIgc3Ryb2tlPVwiIzQ3NTQ2N1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZmlsbF09XCJ2aWV3TW9kZSA9PT0gJ2dyaWQnID8gJyNFQUY4RkYnIDogJ25vbmUnXCI+PC9yZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjNcIiB5PVwiMTFcIiB3aWR0aD1cIjRcIiBoZWlnaHQ9XCI0XCIgcng9XCIxXCIgc3Ryb2tlPVwiIzQ3NTQ2N1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZmlsbF09XCJ2aWV3TW9kZSA9PT0gJ2dyaWQnID8gJyNFQUY4RkYnIDogJ25vbmUnXCI+PC9yZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjExXCIgeT1cIjExXCIgd2lkdGg9XCI0XCIgaGVpZ2h0PVwiNFwiIHJ4PVwiMVwiIHN0cm9rZT1cIiM0NzU0NjdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmZpbGxdPVwidmlld01vZGUgPT09ICdncmlkJyA/ICcjRUFGOEZGJyA6ICdub25lJ1wiPjwvcmVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgcHgtMyBweS0yXCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOiB2aWV3TW9kZSA9PT0gJ2xpc3QnfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRWaWV3TW9kZSgnbGlzdCcpXCIgYXJpYS1sYWJlbD1cIkxpc3Qgdmlld1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMjAgMThcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjNcIiB3aWR0aD1cIjRcIiBoZWlnaHQ9XCI0XCIgcng9XCIxXCIgc3Ryb2tlPVwiIzQ3NTQ2N1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZmlsbF09XCJ2aWV3TW9kZSA9PT0gJ2xpc3QnID8gJyNFQUY4RkYnIDogJ25vbmUnXCI+PC9yZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjhcIiB5PVwiNC41XCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEuNVwiIHJ4PVwiMC43NVwiIGZpbGw9XCIjNDc1NDY3XCI+PC9yZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjhcIiB5PVwiMTIuNVwiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxLjVcIiByeD1cIjAuNzVcIiBmaWxsPVwiIzQ3NTQ2N1wiPjwvcmVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjExXCIgd2lkdGg9XCI0XCIgaGVpZ2h0PVwiNFwiIHJ4PVwiMVwiIHN0cm9rZT1cIiM0NzU0NjdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmZpbGxdPVwidmlld01vZGUgPT09ICdsaXN0JyA/ICcjRUFGOEZGJyA6ICdub25lJ1wiPjwvcmVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaW1hZ2VGbG93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidHlwZSA9PT0gJ2Zvb3RmYWxsJyAmJiB2aWV3TW9kZSA9PT0gJ2dyaWQnXCIgY2xhc3M9XCJkLWZsZXggbXQtMiBtYi0yIHctMTAwIG92ZXJmbG93LXggcHgtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgdGV4dC1ub3dyYXBcIiAqbmdGb3I9XCJsZXQgb2JqIG9mIG9iamVjdHNBcnJheVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXN0cmV0Y2ggbmF2LWxpbmUtdGFiczEgbmF2LWxpbmUtdGFicyBib3JkZXItdHJhbnNwYXJlbnQgZmxleC1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cInNlbGVjdGVkVGltZXMob2JqLnRpbWVSYW5nZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWxlY3RlZFRpbWUgPT09IG9iaj8udGltZVJhbmdlID8gJ2FjdGl2ZScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbm8tYm9yZGVyIG14LTMgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29iaj8udGltZVJhbmdlfX08c3BhbiBjbGFzcz1cIm14LTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0ZWRUaW1lID09PSBvYmo/LnRpbWVSYW5nZSA/ICdiYWRnZS1udW0tcHJpbWFyeScgOidiYWRnZS1udW0tbXV0ZWQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvYmo/LmNvdW50ID8gb2JqPy5jb3VudCA6IDAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibm9EYXRhXCIgY2xhc3M9XCJyb3dcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMiBtYi0zXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtbiBcIiBzdHlsZT1cIm1hcmdpbjogNjRweDtib3JkZXItcmFkaXVzOiA4cHg7XG5iYWNrZ3JvdW5kOiB2YXIoLS1HcmF5LTUwLCAjRjlGQUZCKTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjk0XCIgaGVpZ2h0PVwiOTRcIiB2aWV3Qm94PVwiMCAwIDk0IDk0XCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjdcIiB5PVwiN1wiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIHJ4PVwiNDBcIiBmaWxsPVwiI0RBRjFGRlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiN1wiIHk9XCI3XCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgcng9XCI0MFwiIHN0cm9rZT1cIiNFQUY4RkZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEzLjMzMzNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTM1LjMzMiA1MS45OTk5SDMzLjY2NTRDMzIuNzgxMyA1MS45OTk5IDMxLjkzMzUgNTEuNjQ4NyAzMS4zMDgzIDUxLjAyMzZDMzAuNjgzMiA1MC4zOTg1IDMwLjMzMiA0OS41NTA2IDMwLjMzMiA0OC42NjY2VjMzLjY2NjZDMzAuMzMyIDMyLjc4MjUgMzAuNjgzMiAzMS45MzQ3IDMxLjMwODMgMzEuMzA5NkMzMS45MzM1IDMwLjY4NDQgMzIuNzgxMyAzMC4zMzMzIDMzLjY2NTQgMzAuMzMzM0g0OC42NjU0QzQ5LjU0OTQgMzAuMzMzMyA1MC4zOTczIDMwLjY4NDQgNTEuMDIyNCAzMS4zMDk2QzUxLjY0NzUgMzEuOTM0NyA1MS45OTg3IDMyLjc4MjUgNTEuOTk4NyAzMy42NjY2VjM1LjMzMzNNNDUuMzMyIDQxLjk5OTlINjAuMzMyQzYyLjE3MyA0MS45OTk5IDYzLjY2NTQgNDMuNDkyMyA2My42NjU0IDQ1LjMzMzNWNjAuMzMzM0M2My42NjU0IDYyLjE3NDIgNjIuMTczIDYzLjY2NjYgNjAuMzMyIDYzLjY2NjZINDUuMzMyQzQzLjQ5MTEgNjMuNjY2NiA0MS45OTg3IDYyLjE3NDIgNDEuOTk4NyA2MC4zMzMzVjQ1LjMzMzNDNDEuOTk4NyA0My40OTIzIDQzLjQ5MTEgNDEuOTk5OSA0NS4zMzIgNDEuOTk5OVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2Utd2lkdGg9XCI0XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YS10aXRsZSBteS0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBub0RhdGFNZXNzYWdlc1t0eXBlPy50b0xvd2VyQ2FzZSgpXSB8fCAnTm8gZGF0YSBmb3VuZCcgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTcGxpdC1zY3JlZW4gbGF5b3V0IChvbmx5IHNob3duIGFmdGVyIGNsaWNraW5nIGFuIGltYWdlKSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwbGl0LXNjcmVlbi1jb250YWluZXJcIiAqbmdJZj1cInNwbGl0U2NyZWVuRW5hYmxlZCAmJiAhbm9EYXRhICYmICFsb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExlZnQgUGFuZWw6IFRodW1ibmFpbCBMaXN0ICsgUmVsYXRlZCBJbWFnZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdC1wYW5lbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTWFpbiBJbWFnZXMgTGlzdCAoaGlkZGVuIHdoZW4gZHVwbGljYXRlIGlzIHNlbGVjdGVkKSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRSYWRpb1R5cGUgIT09ICdkdXBsaWNhdGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHVtYm5haWwtbGlzdC1zZWN0aW9uXCIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGxpc3RWaWV3R3JvdXBzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1yYW5nZS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWUtcmFuZ2UtdGl0bGVcIj57eyBncm91cD8udGltZVJhbmdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGltZS1yYW5nZS1jb3VudFwiPiN7eyBncm91cD8uZGF0YT8ubGVuZ3RoIHx8IDAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHVtYm5haWwtZ3JpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHVtYm5haWwtaXRlbVwiICpuZ0Zvcj1cImxldCBvYmogb2YgZ3JvdXA/LmRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkJzogc2VsZWN0SW1hZ2VBcnJheT8udGVtcGxkID09PSBvYmo/LnRlbXBsZH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SW1hZ2VGb3JTcGxpdFZpZXcob2JqKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwidGh1bWJuYWlsLWltYWdlXCIgW3NyY109XCJpbWFnZVVybCArIG9iaj8uZmlsZVBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cIm9iai5maWxlUGF0aCA9IG51bGxcIiBhbHQ9XCJcIiAqbmdJZj1cIm9iaj8uZmlsZVBhdGhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIW9iaj8uZmlsZVBhdGhcIiBjbGFzcz1cIm5vLXByZXZpZXdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEyMHB4OyBwYWRkaW5nOiAyMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjogIzY2NzA4NTsgZm9udC1zaXplOiAxMXB4O1wiPk5vIHByZXZpZXc8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh1bWJuYWlsLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YW5nby1pZFwiPlRhbmdvIElEOiB7eyBvYmo/LnRlbXBsZCB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVudHJ5LXRpbWVcIj5FbnRyeSBUaW1lOiB7eyBvYmo/LmVudHJ5VG1lIHx8IG9iaj8uZW50cnlUaW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJlbGF0ZWQgSW1hZ2VzIFNlY3Rpb24gKE9OTFkgc2hvd24gd2hlbiBkdXBsaWNhdGUgaXMgc2VsZWN0ZWQpIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHVtYm5haWwtbGlzdC1zZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFJhZGlvVHlwZSA9PT0gJ2R1cGxpY2F0ZScgJiYgcmVtYWluaW5nSW1hZ2VzR3JvdXBzICYmIHJlbWFpbmluZ0ltYWdlc0dyb3Vwcy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInRpbWUtcmFuZ2UtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWUtcmFuZ2UtdGl0bGVcIj5TZWxlY3QgcmVsYXRlZCBpbWFnZXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRodW1ibmFpbC1saXN0LXNlY3Rpb25cIiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgcmVtYWluaW5nSW1hZ2VzR3JvdXBzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1yYW5nZS1oZWFkZXJcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDE2cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lLXJhbmdlLXRpdGxlXCI+e3sgZ3JvdXA/LnRpbWVSYW5nZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWUtcmFuZ2UtY291bnRcIj4je3sgZ3JvdXA/LmRhdGE/Lmxlbmd0aCB8fCAwIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh1bWJuYWlsLWdyaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh1bWJuYWlsLWl0ZW1cIiAqbmdGb3I9XCJsZXQgb2JqIG9mIGdyb3VwPy5kYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZCc6IG9iai5zZWxlY3RlZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCIhcmV2b3BzVHlwZVZhbHVlICYmIHNlbGVjdGVkUmFkaW9UeXBlID09PSAnZHVwbGljYXRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwib2JqLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGFic29sdXRlIGZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwidG9wOiA1cHg7IHJpZ2h0OiA1cHg7IHotaW5kZXg6IDI7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uSW1hZ2VDaGVja2JveENoYW5nZSgkZXZlbnQsIG9iaiwgJ2R1cGxpY2F0ZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib2JqLmR1cGxpY2F0ZUltYWdlUGF0aD8ubGVuZ3RoID4gMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwidGh1bWJuYWlsLWltYWdlIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImltYWdlVXJsICsgb2JqPy5maWxlUGF0aFwiIChlcnJvcik9XCJvYmouZmlsZVBhdGggPSBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIiAqbmdJZj1cIm9iaj8uZmlsZVBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVJbWFnZUNsaWNrKCRldmVudCwgb2JqKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIW9iaj8uZmlsZVBhdGhcIiBjbGFzcz1cIm5vLXByZXZpZXcgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAxMjBweDsgcGFkZGluZzogMjBweDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVJbWFnZUNsaWNrKCRldmVudCwgb2JqKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6ICM2NjcwODU7IGZvbnQtc2l6ZTogMTFweDtcIj5ObyBwcmV2aWV3PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh1bWJuYWlsLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFuZ28taWRcIj5UYW5nbyBJRDoge3sgb2JqPy50ZW1wbGQgfHwgb2JqPy50ZW1wSWQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW50cnktdGltZVwiPkVudHJ5IFRpbWU6IHt7IG9iaj8uZW50cnlUbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqPy5lbnRyeVRpbWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJpZ2h0IFBhbmVsOiBTZWxlY3RlZCBJbWFnZSBEZXRhaWxzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0LXBhbmVsXCIgKm5nSWY9XCJzZWxlY3RJbWFnZUFycmF5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImltYWdlRGV0YWlsVmlldzsgY29udGV4dDogeyAkaW1wbGljaXQ6IHNlbGVjdEltYWdlQXJyYXkgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQtcGFuZWxcIiAqbmdJZj1cIiFzZWxlY3RJbWFnZUFycmF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBjb2xvcjogdmFyKC0tR3JheS01MDAsICM2NjcwODUpO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwiZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNTAwO1wiPlNlbGVjdCBhbiBpbWFnZSB0byB2aWV3IGRldGFpbHM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBJbWFnZSBEZXRhaWwgVmlldyBUZW1wbGF0ZSBmb3IgU3BsaXQtU2NyZWVuIFJpZ2h0IFBhbmVsIC0tPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2ltYWdlRGV0YWlsVmlldyBsZXQtb2JqPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1ncmF5IHAtMyBtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjMVwiIFtzcmNdPVwiaW1hZ2VVcmwgKyBvYmo/LmZpbGVQYXRoXCIgYWx0PVwiXCIgKm5nSWY9XCJvYmo/LmZpbGVQYXRoXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBab29tIEljb24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ6b29tLWljb24tYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5JbWFnZVpvb21Nb2RhbChpbWFnZVVybCwgb2JqKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE4LjMzMzMgMTguMzMzM0wxNSAxNU0xNi42NjY3IDkuMTY2NjdDMTYuNjY2NyAxMy4zMDY3IDEzLjMwNjcgMTYuNjY2NyA5LjE2NjY3IDE2LjY2NjdDNS4wMjY2NyAxNi42NjY3IDEuNjY2NjcgMTMuMzA2NyAxLjY2NjY3IDkuMTY2NjdDMS42NjY2NyA1LjAyNjY3IDUuMDI2NjcgMS42NjY2NyA5LjE2NjY3IDEuNjY2NjdDMTMuMzA2NyAxLjY2NjY3IDE2LjY2NjcgNS4wMjY2NyAxNi42NjY3IDkuMTY2NjdaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS4xNjY2NyA2LjY2NjY3VjExLjY2NjdNNi42NjY2NyA5LjE2NjY3SDExLjY2NjdcIiBzdHJva2U9XCIjNDc1NDY3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhb2JqPy5maWxlUGF0aFwiIGNsYXNzPVwibm8tcHJldmlld1wiIHN0eWxlPVwiaGVpZ2h0OiAzNzVweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWItNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyM1wiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMyAyMFwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIkdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD1cIlZlY3RvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjUgNi4zMjIyN0g2LjUxTTE2LjI1IDkuMzIyMjdIMjEuNUwxOCAxNi4zMjIzTDE0LjkxIDEyLjAwMjNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9XCJWZWN0b3JfMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xLjUgMTYuMzIyOUg1LjI2QzUuNjMyNzMgMTYuMzI1NSA1Ljk5ODc3IDE2LjIyMzkgNi4zMTY4MiAxNi4wMjk1QzYuNjM0ODcgMTUuODM1MiA2Ljg5MjI4IDE1LjU1NTggNy4wNiAxNS4yMjI5TDguNSAxMi4zMjI5TTEuNSAxOC4zMjI5VjE0LjMyMjlNMTcuNSA2LjgyMjkxTDEzLjUgMTQuODIyOUwzLjExIDkuNjIyOTFDMi40MjAzMyA5LjI3NTUzIDEuODk2MzUgOC42NjkxIDEuNjUyNzIgNy45MzYzMkMxLjQwOTA5IDcuMjAzNTQgMS40NjU2NCA2LjQwNDEgMS44MSA1LjcxMjkxTDMuMTkgMi45MjI5MUMzLjM2MiAyLjU4MDE0IDMuNTk5ODQgMi4yNzQ2IDMuODg5OTQgMi4wMjM3NUM0LjE4MDAzIDEuNzcyOSA0LjUxNjcgMS41ODE2NSA0Ljg4MDcyIDEuNDYwOTNDNS4yNDQ3NCAxLjM0MDIxIDUuNjI4OTcgMS4yOTIzOSA2LjAxMTQ3IDEuMzIwMThDNi4zOTM5OCAxLjM0Nzk3IDYuNzY3MjYgMS40NTA4NCA3LjExIDEuNjIyOTFMMTcuNSA2LjgyMjkxWlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGVyIG1iLTUgdGV4dC1jZW50ZXJcIj5QcmV2aWV3IG5vdCBhdmFpbGFibGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRlc2NyaXB0aW9uIG1iLTUgdGV4dC1jZW50ZXJcIj5UaGUgc2VsZWN0ZWQgY2FtZXJhIGlzIG5vdCBhdmFpbGFibGUgYXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbW9tZW50Ljwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC0yIG1iLTIgbXQtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0yIGltZy1kb2MtdGltZVwiPlRhbmdvIElEIDoge3tvYmo/LnRlbXBsZH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmo/LnN0YXR1cyA9PT0nYXBwcm92ZWQnXCIgY2xhc3M9XCJtcy0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgc3R5bGU9XCJ3aWR0aDogMjBweDsgaGVpZ2h0OiAyMHB4O1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjExXCIgdmlld0JveD1cIjAgMCAxMCAxMVwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB5PVwiMC41XCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgcng9XCI1XCIgZmlsbD1cIiNEMUZBREZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy4xMjIyIDMuNTc5MTlMNC4xMzg4NyA2LjQ1ODM2TDMuMzQ3MiA1LjYxMjUzQzMuMjAxMzcgNS40NzUwMyAyLjk3MjIgNS40NjY2OSAyLjgwNTUzIDUuNTgzMzZDMi42NDMwMyA1LjcwNDE5IDIuNTk3MiA1LjkxNjY5IDIuNjk3MiA2LjA4NzUzTDMuNjM0NyA3LjYxMjUzQzMuNzI2MzcgNy43NTQxOSAzLjg4NDcgNy44NDE2OSA0LjA2Mzg3IDcuODQxNjlDNC4yMzQ3IDcuODQxNjkgNC4zOTcyIDcuNzU0MTkgNC40ODg4NyA3LjYxMjUzQzQuNjM4ODcgNy40MTY2OSA3LjUwMTM3IDQuMDA0MTkgNy41MDEzNyA0LjAwNDE5QzcuODc2MzcgMy42MjA4NiA3LjQyMjIgMy4yODMzNiA3LjEyMjIgMy41NzUwM1YzLjU3OTE5WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxMkI3NkFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmo/LnN0YXR1cyA9PT0ncmVqZWN0ZWQnXCIgY2xhc3M9XCJtcy0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgc3R5bGU9XCJ3aWR0aDogMjBweDsgaGVpZ2h0OiAyMHB4O1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjEzXCIgdmlld0JveD1cIjAgMCAxMyAxM1wiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE0MjhfNTk0ODQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00LjUyOTYxIDEuNUg4LjY2OTYxTDExLjU5OTYgNC40M1Y4LjU3TDguNjY5NjEgMTEuNUg0LjUyOTYxTDEuNTk5NjEgOC41N1Y0LjQzTDQuNTI5NjEgMS41WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkVFNEUyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDk5NjEgNUw1LjA5OTYxIDhNNS4wOTk2MSA1TDguMDk5NjEgOE00LjUyOTYxIDEuNUg4LjY2OTYxTDExLjU5OTYgNC40M1Y4LjU3TDguNjY5NjEgMTEuNUg0LjUyOTYxTDEuNTk5NjEgOC41N1Y0LjQzTDQuNTI5NjEgMS41WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTQyOF81OTQ4NFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAuNTk5NjA5IDAuNSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZy1kb2MtdmFsdWVcIj5FbnRyeSBUaW1lIDoge3tvYmo/LmVudHJ5VG1lIHx8IG9iaj8uZW50cnlUaW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNSB0ZXh0LWVuZCBweS0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9iaj8ucmV2b3BzVHlwZSA9PT0nbm9uLXRhZ2dpbmcnXCIgbmdiVG9vbHRpcD1cIllldCB0byB0YWcgdGhlIGN1c3RvbWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE5XCIgaGVpZ2h0PVwiMThcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE5IDE4XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi4wMjM0NCA1LjYyNUg2LjAzMDk0TTE2LjIxNTkgMTAuNDMyNUwxMC44Mzg0IDE1LjgxQzEwLjY5OTEgMTUuOTQ5NSAxMC41MzM3IDE2LjA2MDEgMTAuMzUxNiAxNi4xMzU2QzEwLjE2OTUgMTYuMjExMSA5Ljk3NDMxIDE2LjI0OTkgOS43NzcxOSAxNi4yNDk5QzkuNTgwMDYgMTYuMjQ5OSA5LjM4NDg3IDE2LjIxMTEgOS4yMDI3OCAxNi4xMzU2QzkuMDIwNjggMTYuMDYwMSA4Ljg1NTI1IDE1Ljk0OTUgOC43MTU5NCAxNS44MUwyLjI3MzQ0IDkuMzc1VjEuODc1SDkuNzczNDRMMTYuMjE1OSA4LjMxNzVDMTYuNDk1MyA4LjU5ODU0IDE2LjY1MjEgOC45Nzg3MiAxNi42NTIxIDkuMzc1QzE2LjY1MjEgOS43NzEyOCAxNi40OTUzIDEwLjE1MTUgMTYuMjE1OSAxMC40MzI1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmo/LnJldm9wc1R5cGUgPT09J2R1cGxpY2F0ZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIxXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8yMDEyXzk0NjM1KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTQuMTY3OTcgMTMuMTg1OUgzLjMzNDY0QzIuODkyNjEgMTMuMTg1OSAyLjQ2ODY4IDEzLjAxMDMgMi4xNTYxMiAxMi42OTc3QzEuODQzNTYgMTIuMzg1MiAxLjY2Nzk3IDExLjk2MTIgMS42Njc5NyAxMS41MTkyVjQuMDE5MjFDMS42Njc5NyAzLjU3NzE4IDEuODQzNTYgMy4xNTMyNiAyLjE1NjEyIDIuODQwNjlDMi40Njg2OCAyLjUyODEzIDIuODkyNjEgMi4zNTI1NCAzLjMzNDY0IDIuMzUyNTRIMTAuODM0NkMxMS4yNzY3IDIuMzUyNTQgMTEuNzAwNiAyLjUyODEzIDEyLjAxMzEgMi44NDA2OUMxMi4zMjU3IDMuMTUzMjYgMTIuNTAxMyAzLjU3NzE4IDEyLjUwMTMgNC4wMTkyMVY0Ljg1MjU0TTkuMTY3OTcgOC4xODU4N0gxNi42NjhDMTcuNTg4NCA4LjE4NTg3IDE4LjMzNDYgOC45MzIwNiAxOC4zMzQ2IDkuODUyNTRWMTcuMzUyNUMxOC4zMzQ2IDE4LjI3MyAxNy41ODg0IDE5LjAxOTIgMTYuNjY4IDE5LjAxOTJIOS4xNjc5N0M4LjI0NzQ5IDE5LjAxOTIgNy41MDEzIDE4LjI3MyA3LjUwMTMgMTcuMzUyNVY5Ljg1MjU0QzcuNTAxMyA4LjkzMjA2IDguMjQ3NDkgOC4xODU4NyA5LjE2Nzk3IDguMTg1ODdaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzIwMTJfOTQ2MzVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMCAwLjY4NjAzNSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmo/LnJldm9wc1R5cGUgPT09J2VtcGxveWVlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjFcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIwMTJfOTQ2MzkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQuMTY1NCAxOC4xODZWMTYuNTE5NEMxNC4xNjU0IDE1LjYzNTMgMTMuODE0MiAxNC43ODc1IDEzLjE4OTEgMTQuMTYyM0MxMi41NjM5IDEzLjUzNzIgMTEuNzE2MSAxMy4xODYgMTAuODMyIDEzLjE4Nkg0LjE2NTM2QzMuMjgxMzEgMTMuMTg2IDIuNDMzNDYgMTMuNTM3MiAxLjgwODM0IDE0LjE2MjNDMS4xODMyMiAxNC43ODc1IDAuODMyMDMxIDE1LjYzNTMgMC44MzIwMzEgMTYuNTE5NFYxOC4xODZNMTkuMTY1NCAxOC4xODZWMTYuNTE5NEMxOS4xNjQ4IDE1Ljc4MDggMTguOTE5IDE1LjA2MzMgMTguNDY2NSAxNC40Nzk2QzE4LjAxNCAxMy44OTU5IDE3LjM4MDUgMTMuNDc5IDE2LjY2NTQgMTMuMjk0NE0xMy4zMzIgMy4yOTQzN0MxNC4wNDkgMy40Nzc5NSAxNC42ODQ2IDMuODk0OTUgMTUuMTM4NCA0LjQ3OTYzQzE1LjU5MjIgNS4wNjQzIDE1LjgzODYgNS43ODMzOSAxNS44Mzg2IDYuNTIzNTRDMTUuODM4NiA3LjI2MzY4IDE1LjU5MjIgNy45ODI3NyAxNS4xMzg0IDguNTY3NDRDMTQuNjg0NiA5LjE1MjEyIDE0LjA0OSA5LjU2OTEyIDEzLjMzMiA5Ljc1MjdNMTAuODMyIDYuNTE5MzdDMTAuODMyIDguMzYwMzIgOS4zMzk2NSA5Ljg1MjcgNy40OTg3IDkuODUyN0M1LjY1Nzc1IDkuODUyNyA0LjE2NTM2IDguMzYwMzIgNC4xNjUzNiA2LjUxOTM3QzQuMTY1MzYgNC42Nzg0MiA1LjY1Nzc1IDMuMTg2MDQgNy40OTg3IDMuMTg2MDRDOS4zMzk2NSAzLjE4NjA0IDEwLjgzMiA0LjY3ODQyIDEwLjgzMiA2LjUxOTM3WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMDEyXzk0NjM5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqPy5yZXZvcHNUeXBlID09PSdob3VzZS1rZWVwaW5nJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjEgMjFcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIwMTJfOTQ2NDMpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05LjI2MjE5IDEuMzY3MjJDMTAuMTc3NyAwLjQ1ODk3NCAxMS42NjIgMC40NTg5NzQgMTIuNTc3NiAxLjM2NzIyTDIwLjMxMzMgOS4wNDE1M0MyMS4yMjg3IDkuOTQ5OCAyMS4yMjg3IDExLjQyMjMgMjAuMzEzMyAxMi4zMzA2TDEyLjU3NzYgMjAuMDA0OUMxMS42NjIgMjAuOTEzMSAxMC4xNzc3IDIwLjkxMzEgOS4yNjIxOSAyMC4wMDQ5TDcuMDUxNjYgMTcuODExOUw1LjAyNTM4IDE5LjgyMjFDNC4xMDk4NyAyMC43MzAzIDIuNjI1NTMgMjAuNzMwMyAxLjcxMDAyIDE5LjgyMjFDMC43OTQ1MSAxOC45MTM5IDAuNzk0NTEgMTcuNDQxMyAxLjcxMDAyIDE2LjUzMzFMMy43MzYzIDE0LjUyMjlMMS41MjY0OCAxMi4zMzA2QzAuNjEwOTY2IDExLjQyMjMgMC42MTA5NjYgOS45NDk4IDEuNTI2NDggOS4wNDE1M0w5LjI2MjE5IDEuMzY3MjJaTTExLjQ3MjQgMi40NjM1N0MxMS4xNjcyIDIuMTYwODIgMTAuNjcyNCAyLjE2MDgyIDEwLjM2NzIgMi40NjM1N0w0Ljg0MTQ1IDcuOTQ1NTZMMTMuNjgyMyAxNi43MTYzTDE5LjIwODEgMTEuMjM0MkMxOS41MTMzIDEwLjkzMTUgMTkuNTEzMyAxMC40NDA2IDE5LjIwODEgMTAuMTM3OUwxNS4zMzk5IDYuMzAwMzJMMTQuMDUwNSA3LjU3OTRDMTMuNzQ1MyA3Ljg4MjE0IDEzLjI1MDYgNy44ODIxNCAxMi45NDU1IDcuNTc5NEMxMi42NDAzIDcuMjc2NjQgMTIuNjQwMyA2Ljc4NTc5IDEyLjk0NTUgNi40ODMwNUwxNC4yMzQ3IDUuMjAzOTdMMTMuMTI5OSA0LjEwNzg2TDkuOTk4NzIgNy4yMTQxOEM5LjY5MzU0IDcuNTE2OTIgOS4xOTg3MyA3LjUxNjkyIDguODkzNTYgNy4yMTQxOEM4LjU4ODM4IDYuOTExNDMgOC41ODgzOCA2LjQyMDU4IDguODkzNTYgNi4xMTc4M0wxMi4wMjQ3IDMuMDExNTFMMTEuNDcyNCAyLjQ2MzU3Wk0xMi41NzcxIDE3LjgxMjVMMy43MzYzMyA5LjA0MTkxTDIuNjMxNiAxMC4xMzc5QzIuMzI2NDIgMTAuNDQwNiAyLjMyNjQyIDEwLjkzMTUgMi42MzE2IDExLjIzNDJMMTAuMzY3MiAxOC45MDg1QzEwLjY3MjQgMTkuMjExMyAxMS4xNjcyIDE5LjIxMTMgMTEuNDcyNCAxOC45MDg1TDEyLjU3NzEgMTcuODEyNVpNNC44NDEzMiAxNS42MTkyTDIuODE1MTQgMTcuNjI5NEMyLjUwOTk3IDE3LjkzMjEgMi41MDk5NyAxOC40MjMgMi44MTUxNCAxOC43MjU4QzMuMTIwMzEgMTkuMDI4NSAzLjYxNTA5IDE5LjAyODUgMy45MjAyNiAxOC43MjU4TDUuOTQ2NDQgMTYuNzE1Nkw0Ljg0MTMyIDE1LjYxOTJaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzQ3NTQ2N1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMDEyXzk0NjQzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqPy5yZXZvcHNUeXBlID09PSdqdW5rJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zIDZINU01IDZIMjFNNSA2VjIwQzUgMjAuNTMwNCA1LjIxMDcxIDIxLjAzOTEgNS41ODU3OSAyMS40MTQyQzUuOTYwODYgMjEuNzg5MyA2LjQ2OTU3IDIyIDcgMjJIMTdDMTcuNTMwNCAyMiAxOC4wMzkxIDIxLjc4OTMgMTguNDE0MiAyMS40MTQyQzE4Ljc4OTMgMjEuMDM5MSAxOSAyMC41MzA0IDE5IDIwVjZINVpNOCA2VjRDOCAzLjQ2OTU3IDguMjEwNzEgMi45NjA4NiA4LjU4NTc5IDIuNTg1NzlDOC45NjA4NiAyLjIxMDcxIDkuNDY5NTcgMiAxMCAySDE0QzE0LjUzMDQgMiAxNS4wMzkxIDIuMjEwNzEgMTUuNDE0MiAyLjU4NTc5QzE1Ljc4OTMgMi45NjA4NiAxNiAzLjQ2OTU3IDE2IDRWNk0xMCAxMVYxN00xNCAxMVYxN1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1ncmF5IHAtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgdGl0bGUtdHlwZVwiPlNlbGVjdCBub24tc2hvcHBlciB0eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiB0ZXh0LWVuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiEodXNlcnM/LnJvbGUgPT09J3VzZXInICYmIHVzZXJzPy51c2VyVHlwZSA9PT0nY2xpZW50JyAmJiBzZWxlY3RlZFJhZGlvVHlwZSA9PT0nanVuaycpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWdldFRpY2tldFN0YXR1c2VzKCkuaW5jbHVkZXMoJ29wZW4nKSAmJiAhZ2V0VGlja2V0U3RhdHVzZXMoKS5pbmNsdWRlcygnY2xvc2VkJylcIiBjbGFzcz1cIm1iLTMgdGV4dC1lbmQgZC1pbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENsZWFyIFRhZyBCdXR0b24gKHZpc2libGUgd2hlbiBFZGl0IGJ1dHRvbiBPUiBTYXZlL0NhbmNlbCBidXR0b25zIGFyZSB2aXNpYmxlKSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXJldm9wc1R5cGVWYWx1ZSB8fCAocmV2b3BzVHlwZVZhbHVlICYmIGVkaXRCdG5TaG93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoc2VsZWN0ZWRSYWRpb1R5cGUgPT09IHVuZGVmaW5lZCB8fCBzZWxlY3RlZFJhZGlvVHlwZSA9PT0gJycpIHx8IChzZWxlY3RlZFJhZGlvVHlwZSA9PT0gJ2R1cGxpY2F0ZScgJiYgc2VsZWN0ZWREdXBsaWNhdGVJbWFnZXNMaXN0Lmxlbmd0aCA9PT0gMClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tY2xlYXItdGFnIGQtaW5saW5lLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyVmFsdWUoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQ5XCIgaGVpZ2h0PVwiNDlcIiB2aWV3Qm94PVwiMCAwIDQ5IDQ5XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsdGVyPVwidXJsKCNmaWx0ZXIwX2RfNTE2Xzk2ODQxKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi4xNjc5N1wiIHk9XCIxLjA4NDQ3XCIgd2lkdGg9XCI0NC4wMzQyXCIgaGVpZ2h0PVwiNDQuMDI4NFwiIHJ4PVwiOC42NzQ0NVwiIGZpbGw9XCIjRkVGM0YyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNzEwMTJcIiB5PVwiMS42MjY2M1wiIHdpZHRoPVwiNDIuOTQ5OVwiIGhlaWdodD1cIjQyLjk0NDFcIiByeD1cIjguMTMyMjlcIiBzdHJva2U9XCIjRkVGM0YyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMDg0MzFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zMy40ODkzIDIxLjM2MTNMMzMuNDkxMiAyMS4zNjQzQzM0LjA1MzMgMjEuOTI5NyAzNC4zNjkgMjIuNjk0OSAzNC4zNjkxIDIzLjQ5MjJDMzQuMzY5MSAyNC4yODk1IDM0LjA1MzMgMjUuMDU0NiAzMy40OTEyIDI1LjYyMDFMMjYuNzI1NiAzMi4zODU3QzI2LjQ0NTQgMzIuNjY2MSAyNi4xMTIyIDMyLjg4ODIgMjUuNzQ2MSAzMy4wNEMyNS4zNzk4IDMzLjE5MTkgMjQuOTg3MyAzMy4yNzA1IDI0LjU5MDggMzMuMjcwNUMyNC4xOTQyIDMzLjI3MDUgMjMuODAxIDMzLjE5MTkgMjMuNDM0NiAzMy4wNEMyMy4wNjg2IDMyLjg4ODMgMjIuNzM2MSAzMi42NjU5IDIyLjQ1NjEgMzIuMzg1N0wyMC43Njc2IDMwLjY5OTJMMjIuMzY4MiAyOS4wOTg2TDI0LjA1NTcgMzAuNzg0MkwyNC4wNTY2IDMwLjc4NTJDMjQuMTI2NyAzMC44NTUzIDI0LjIxMDIgMzAuOTExMiAyNC4zMDE4IDMwLjk0OTJDMjQuMzkzMyAzMC45ODcyIDI0LjQ5MTcgMzEuMDA2OCAyNC41OTA4IDMxLjAwNjhDMjQuNjg5OSAzMS4wMDY4IDI0Ljc4ODMgMzAuOTg3MiAyNC44Nzk5IDMwLjk0OTJDMjQuOTcxMyAzMC45MTEzIDI1LjA1NDEgMzAuODU1MiAyNS4xMjQgMzAuNzg1MkgyNS4xMjVMMzEuODg3NyAyNC4wMjE1QzMyLjAyNjcgMjMuODgwNCAzMi4xMDU1IDIzLjY5MDMgMzIuMTA1NSAyMy40OTIyQzMyLjEwNTQgMjMuMjk0MSAzMi4wMjY3IDIzLjEwMzkgMzEuODg3NyAyMi45NjI5TDMwLjE5NjMgMjEuMjcxNUwzMS43OTc5IDE5LjY2OTlMMzMuNDg5MyAyMS4zNjEzWk0yNC42OTgyIDEyLjkzMzZDMjQuOTU3MSAxMi45NTk0IDI1LjIwMTEgMTMuMDczMyAyNS4zODY3IDEzLjI1ODhMMzAuMTk3MyAxOC4wNjkzTDI4LjU5NTcgMTkuNjcwOUwyNC4xMTYyIDE1LjE5MTRIMTYuMjg1MlYyMy4wMjI1TDIwLjc2NjYgMjcuNDk5TDE5LjE2NiAyOS4wOTk2TDE0LjM1MzUgMjQuMjkzQzE0LjE0MTEgMjQuMDgwNyAxNC4wMjE1IDIzLjc5MjUgMTQuMDIxNSAyMy40OTIyVjE0LjA1OTZDMTQuMDIxNyAxMy40MzQ2IDE0LjUyODMgMTIuOTI3NyAxNS4xNTMzIDEyLjkyNzdIMjQuNTg1OUwyNC42OTgyIDEyLjkzMzZaTTE5Ljg3ODkgMTcuNjQzNkMyMC41MDM4IDE3LjY0MzYgMjEuMDEwMyAxOC4xNTA2IDIxLjAxMDcgMTguNzc1NEMyMS4wMTA3IDE5LjQwMDUgMjAuNTA0IDE5LjkwODIgMTkuODc4OSAxOS45MDgySDE5Ljg2OTFDMTkuMjQ0MiAxOS45MDggMTguNzM3MyAxOS40MDA0IDE4LjczNzMgMTguNzc1NEMxOC43Mzc4IDE4LjE1MDggMTkuMjQ0NSAxNy42NDM4IDE5Ljg2OTEgMTcuNjQzNkgxOS44Nzg5WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0I0MjMxOFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMzMuMTY5OSAxNC4wODQ1TDE1LjE2OTkgMzIuMDg0NVwiIHN0cm9rZT1cIiNCNDIzMThcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsdGVyIGlkPVwiZmlsdGVyMF9kXzUxNl85Njg0MVwiIHg9XCItMC4wMDA2NDMyNTNcIiB5PVwiMC4wMDAxNjY2NTVcIiB3aWR0aD1cIjQ4LjM3MjRcIiBoZWlnaHQ9XCI0OC4zNjU1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PVwiMFwiIHJlc3VsdD1cIkJhY2tncm91bmRJbWFnZUZpeFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBpbj1cIlNvdXJjZUFscGhhXCIgdHlwZT1cIm1hdHJpeFwiIHZhbHVlcz1cIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJoYXJkQWxwaGFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMS4wODQzMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPVwiMS4wODQzMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCIgdmFsdWVzPVwiMCAwIDAgMCAwLjA2Mjc0NTEgMCAwIDAgMCAwLjA5NDExNzYgMCAwIDAgMCAwLjE1Njg2MyAwIDAgMCAwLjA1IDBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluMj1cIkJhY2tncm91bmRJbWFnZUZpeFwiIHJlc3VsdD1cImVmZmVjdDFfZHJvcFNoYWRvd181MTZfOTY4NDFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluPVwiU291cmNlR3JhcGhpY1wiIGluMj1cImVmZmVjdDFfZHJvcFNoYWRvd181MTZfOTY4NDFcIiByZXN1bHQ9XCJzaGFwZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ2FuY2VsIGFuZCBTYXZlIEJ1dHRvbnMgKHdoZW4gIXJldm9wc1R5cGVWYWx1ZSkgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFyZXZvcHNUeXBlVmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBtZS0yXCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBpZD1cImFsZXJ0LXRvYXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlKHNlbGVjdGVkVHlwZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIihzZWxlY3RlZFJhZGlvVHlwZSA9PT0gdW5kZWZpbmVkIHx8IHNlbGVjdGVkUmFkaW9UeXBlID09PSAnJykgfHwgKHNlbGVjdGVkUmFkaW9UeXBlID09PSAnZHVwbGljYXRlJyAmJiBzZWxlY3RlZER1cGxpY2F0ZUltYWdlc0xpc3QubGVuZ3RoID09PSAwKVwiPlNhdmU8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEVkaXQgQnV0dG9uICh3aGVuIHJldm9wc1R5cGVWYWx1ZSAmJiBlZGl0QnRuU2hvdykgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInJldm9wc1R5cGVWYWx1ZSAmJiBlZGl0QnRuU2hvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBtZS0yXCIgKGNsaWNrKT1cImVkaXRWYWx1ZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTJcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQuNjU1NCAxLjcxMDQ3QzE0Ljg5MjcgMS40NzMxNSAxNS4xNzQ1IDEuMjg0OSAxNS40ODQ1IDEuMTU2NDZDMTUuNzk0NiAxLjAyODAyIDE2LjEyNjkgMC45NjE5MTQgMTYuNDYyNiAwLjk2MTkxNEMxNi43OTgyIDAuOTYxOTE0IDE3LjEzMDUgMS4wMjgwMiAxNy40NDA2IDEuMTU2NDZDMTcuNzUwNyAxLjI4NDkgMTguMDMyNCAxLjQ3MzE1IDE4LjI2OTcgMS43MTA0N0MxOC41MDcxIDEuOTQ3NzkgMTguNjk1MyAyLjIyOTUzIDE4LjgyMzggMi41Mzk2MUMxOC45NTIyIDIuODQ5NjkgMTkuMDE4MyAzLjE4MjAyIDE5LjAxODMgMy41MTc2NUMxOS4wMTgzIDMuODUzMjcgMTguOTUyMiA0LjE4NTYxIDE4LjgyMzggNC40OTU2OEMxOC42OTUzIDQuODA1NzYgMTguNTA3MSA1LjA4NzUgMTguMjY5NyA1LjMyNDgyTDYuMDcxMyAxNy41MjMzTDEuMTAxNTYgMTguODc4NkwyLjQ1Njk1IDEzLjkwODlMMTQuNjU1NCAxLjcxMDQ3WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS44MTA3OVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5FZGl0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG15LTE1XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiZHVwbGljYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZHVwbGljYXRlLXNwbGl0XCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFR5cGVcIiBbdmFsdWVdPVwiJ2R1cGxpY2F0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblJhZGlvQ2hhbmdlKHNlbGVjdGVkVHlwZSlcIiBbZGlzYWJsZWRdPVwicmV2b3BzVHlwZVZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJkdXBsaWNhdGUtc3BsaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtNVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjFcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIwMTJfOTQ2MzUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNC4xNjc5NyAxMy4xODU5SDMuMzM0NjRDMi44OTI2MSAxMy4xODU5IDIuNDY4NjggMTMuMDEwMyAyLjE1NjEyIDEyLjY5NzdDMS44NDM1NiAxMi4zODUyIDEuNjY3OTcgMTEuOTYxMiAxLjY2Nzk3IDExLjUxOTJWNC4wMTkyMUMxLjY2Nzk3IDMuNTc3MTggMS44NDM1NiAzLjE1MzI2IDIuMTU2MTIgMi44NDA2OUMyLjQ2ODY4IDIuNTI4MTMgMi44OTI2MSAyLjM1MjU0IDMuMzM0NjQgMi4zNTI1NEgxMC44MzQ2QzExLjI3NjcgMi4zNTI1NCAxMS43MDA2IDIuNTI4MTMgMTIuMDEzMSAyLjg0MDY5QzEyLjMyNTcgMy4xNTMyNiAxMi41MDEzIDMuNTc3MTggMTIuNTAxMyA0LjAxOTIxVjQuODUyNTRNOS4xNjc5NyA4LjE4NTg3SDE2LjY2OEMxNy41ODg0IDguMTg1ODcgMTguMzM0NiA4LjkzMjA2IDE4LjMzNDYgOS44NTI1NFYxNy4zNTI1QzE4LjMzNDYgMTguMjczIDE3LjU4ODQgMTkuMDE5MiAxNi42NjggMTkuMDE5Mkg5LjE2Nzk3QzguMjQ3NDkgMTkuMDE5MiA3LjUwMTMgMTguMjczIDcuNTAxMyAxNy4zNTI1VjkuODUyNTRDNy41MDEzIDguOTMyMDYgOC4yNDc0OSA4LjE4NTg3IDkuMTY3OTcgOC4xODU4N1pcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM0NzU0NjdcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjAxMl85NDYzNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwIDAuNjg2MDM1KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy01IHRhZy1jbGFzc1wiPkR1cGxpY2F0ZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBteS0xNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cImVtcGxveWVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZW1wbG95ZWUtc3BsaXRcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkVHlwZVwiIFt2YWx1ZV09XCInZW1wbG95ZWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25SYWRpb0NoYW5nZShzZWxlY3RlZFR5cGUpXCIgW2Rpc2FibGVkXT1cInJldm9wc1R5cGVWYWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiZW1wbG95ZWUtc3BsaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtNVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjFcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIwMTJfOTQ2MzkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQuMTY1NCAxOC4xODZWMTYuNTE5NEMxNC4xNjU0IDE1LjYzNTMgMTMuODE0MiAxNC43ODc1IDEzLjE4OTEgMTQuMTYyM0MxMi41NjM5IDEzLjUzNzIgMTEuNzE2MSAxMy4xODYgMTAuODMyIDEzLjE4Nkg0LjE2NTM2QzMuMjgxMzEgMTMuMTg2IDIuNDMzNDYgMTMuNTM3MiAxLjgwODM0IDE0LjE2MjNDMS4xODMyMiAxNC43ODc1IDAuODMyMDMxIDE1LjYzNTMgMC44MzIwMzEgMTYuNTE5NFYxOC4xODZNMTkuMTY1NCAxOC4xODZWMTYuNTE5NEMxOS4xNjQ4IDE1Ljc4MDggMTguOTE5IDE1LjA2MzMgMTguNDY2NSAxNC40Nzk2QzE4LjAxNCAxMy44OTU5IDE3LjM4MDUgMTMuNDc5IDE2LjY2NTQgMTMuMjk0NE0xMy4zMzIgMy4yOTQzN0MxNC4wNDkgMy40Nzc5NSAxNC42ODQ2IDMuODk0OTUgMTUuMTM4NCA0LjQ3OTYzQzE1LjU5MjIgNS4wNjQzIDE1LjgzODYgNS43ODMzOSAxNS44Mzg2IDYuNTIzNTRDMTUuODM4NiA3LjI2MzY4IDE1LjU5MjIgNy45ODI3NyAxNS4xMzg0IDguNTY3NDRDMTQuNjg0NiA5LjE1MjEyIDE0LjA0OSA5LjU2OTEyIDEzLjMzMiA5Ljc1MjdNMTAuODMyIDYuNTE5MzdDMTAuODMyIDguMzYwMzIgOS4zMzk2NSA5Ljg1MjcgNy40OTg3IDkuODUyN0M1LjY1Nzc1IDkuODUyNyA0LjE2NTM2IDguMzYwMzIgNC4xNjUzNiA2LjUxOTM3QzQuMTY1MzYgNC42Nzg0MiA1LjY1Nzc1IDMuMTg2MDQgNy40OTg3IDMuMTg2MDRDOS4zMzk2NSAzLjE4NjA0IDEwLjgzMiA0LjY3ODQyIDEwLjgzMiA2LjUxOTM3WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMDEyXzk0NjM5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTUgdGFnLWNsYXNzXCI+RW1wbG95ZWUvU3RhZmY8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbXktMTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJob3VzZS1rZWVwaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiaG91c2Uta2VlcGluZy1zcGxpdFwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRUeXBlXCIgW3ZhbHVlXT1cIidob3VzZS1rZWVwaW5nJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uUmFkaW9DaGFuZ2Uoc2VsZWN0ZWRUeXBlKVwiIFtkaXNhYmxlZF09XCJyZXZvcHNUeXBlVmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImhvdXNlLWtlZXBpbmctc3BsaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtNVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjEgMjFcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIwMTJfOTQ2NDMpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05LjI2MjE5IDEuMzY3MjJDMTAuMTc3NyAwLjQ1ODk3NCAxMS42NjIgMC40NTg5NzQgMTIuNTc3NiAxLjM2NzIyTDIwLjMxMzMgOS4wNDE1M0MyMS4yMjg3IDkuOTQ5OCAyMS4yMjg3IDExLjQyMjMgMjAuMzEzMyAxMi4zMzA2TDEyLjU3NzYgMjAuMDA0OUMxMS42NjIgMjAuOTEzMSAxMC4xNzc3IDIwLjkxMzEgOS4yNjIxOSAyMC4wMDQ5TDcuMDUxNjYgMTcuODExOUw1LjAyNTM4IDE5LjgyMjFDNC4xMDk4NyAyMC43MzAzIDIuNjI1NTMgMjAuNzMwMyAxLjcxMDAyIDE5LjgyMjFDMC43OTQ1MSAxOC45MTM5IDAuNzk0NTEgMTcuNDQxMyAxLjcxMDAyIDE2LjUzMzFMMy43MzYzIDE0LjUyMjlMMS41MjY0OCAxMi4zMzA2QzAuNjEwOTY2IDExLjQyMjMgMC42MTA5NjYgOS45NDk4IDEuNTI2NDggOS4wNDE1M0w5LjI2MjE5IDEuMzY3MjJaTTExLjQ3MjQgMi40NjM1N0MxMS4xNjcyIDIuMTYwODIgMTAuNjcyNCAyLjE2MDgyIDEwLjM2NzIgMi40NjM1N0w0Ljg0MTQ1IDcuOTQ1NTZMMTMuNjgyMyAxNi43MTYzTDE5LjIwODEgMTEuMjM0MkMxOS41MTMzIDEwLjkzMTUgMTkuNTEzMyAxMC40NDA2IDE5LjIwODEgMTAuMTM3OUwxNS4zMzk5IDYuMzAwMzJMMTQuMDUwNSA3LjU3OTRDMTMuNzQ1MyA3Ljg4MjE0IDEzLjI1MDYgNy44ODIxNCAxMi45NDU1IDcuNTc5NEMxMi42NDAzIDcuMjc2NjQgMTIuNjQwMyA2Ljc4NTc5IDEyLjk0NTUgNi40ODMwNUwxNC4yMzQ3IDUuMjAzOTdMMTMuMTI5OSA0LjEwNzg2TDkuOTk4NzIgNy4yMTQxOEM5LjY5MzU0IDcuNTE2OTIgOS4xOTg3MyA3LjUxNjkyIDguODkzNTYgNy4yMTQxOEM4LjU4ODM4IDYuOTExNDMgOC41ODgzOCA2LjQyMDU4IDguODkzNTYgNi4xMTc4M0wxMi4wMjQ3IDMuMDExNTFMMTEuNDcyNCAyLjQ2MzU3Wk0xMi41NzcxIDE3LjgxMjVMMy43MzYzMyA5LjA0MTkxTDIuNjMxNiAxMC4xMzc5QzIuMzI2NDIgMTAuNDQwNiAyLjMyNjQyIDEwLjkzMTUgMi42MzE2IDExLjIzNDJMMTAuMzY3MiAxOC45MDg1QzEwLjY3MjQgMTkuMjExMyAxMS4xNjcyIDE5LjIxMTMgMTEuNDcyNCAxOC45MDg1TDEyLjU3NzEgMTcuODEyNVpNNC44NDEzMiAxNS42MTkyTDIuODE1MTQgMTcuNjI5NEMyLjUwOTk3IDE3LjkzMjEgMi41MDk5NyAxOC40MjMgMi44MTUxNCAxOC43MjU4QzMuMTIwMzEgMTkuMDI4NSAzLjYxNTA5IDE5LjAyODUgMy45MjAyNiAxOC43MjU4TDUuOTQ2NDQgMTYuNzE1Nkw0Ljg0MTMyIDE1LjYxOTJaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzQ3NTQ2N1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMDEyXzk0NjQzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTUgdGFnLWNsYXNzXCI+SG91c2UgS2VlcGluZzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBteS0xNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cImp1bmtcIiBpZD1cImp1bmstc3BsaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFR5cGVcIiBbdmFsdWVdPVwiJ2p1bmsnXCIgKGNoYW5nZSk9XCJvblJhZGlvQ2hhbmdlKHNlbGVjdGVkVHlwZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInVzZXJzPy5yb2xlID09PSd1c2VyJyAmJiB1c2Vycz8udXNlclR5cGUgPT09J2NsaWVudCcgfHwgcmV2b3BzVHlwZVZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJqdW5rLXNwbGl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTVcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMyA2SDVNNSA2SDIxTTUgNlYyMEM1IDIwLjUzMDQgNS4yMTA3MSAyMS4wMzkxIDUuNTg1NzkgMjEuNDE0MkM1Ljk2MDg2IDIxLjc4OTMgNi40Njk1NyAyMiA3IDIySDE3QzE3LjUzMDQgMjIgMTguMDM5MSAyMS43ODkzIDE4LjQxNDIgMjEuNDE0MkMxOC43ODkzIDIxLjAzOTEgMTkgMjAuNTMwNCAxOSAyMFY2SDVaTTggNlY0QzggMy40Njk1NyA4LjIxMDcxIDIuOTYwODYgOC41ODU3OSAyLjU4NTc5QzguOTYwODYgMi4yMTA3MSA5LjQ2OTU3IDIgMTAgMkgxNEMxNC41MzA0IDIgMTUuMDM5MSAyLjIxMDcxIDE1LjQxNDIgMi41ODU3OUMxNS43ODkzIDIuOTYwODYgMTYgMy40Njk1NyAxNiA0VjZNMTAgMTFWMTdNMTQgMTFWMTdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTUgdGFnLWNsYXNzXCI+SnVuazwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UmVtYXJrcyAoT3B0aW9uYWwpPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcm93cz1cIjNcIiBwbGFjZWhvbGRlcj1cIkNvbW1lbnQgaGVyZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXJDb21tZW50XCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gR3JpZC9MaXN0IFZpZXcgKHNob3duIHdoZW4gc3BsaXQtc2NyZWVuIGlzIG5vdCBlbmFibGVkKSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC0wIGltZy10cmFmZmljIGNvbnRhaW4gaGlnaC00MDBweCBzY3JvbGwteVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInZpZXdNb2RlID09PSAnZ3JpZCcgJiYgIW5vRGF0YSAmJiAhbG9hZGluZyAmJiAhc3BsaXRTY3JlZW5FbmFibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvYmogb2YgaW1hZ2VzQXJyYXlEYXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImltYWdlQ2FyZDsgY29udGV4dDogeyAkaW1wbGljaXQ6IG9iaiB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3Qtdmlldy13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidmlld01vZGUgPT09ICdsaXN0JyAmJiAhbm9EYXRhICYmICFsb2FkaW5nICYmICFzcGxpdFNjcmVlbkVuYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwIG1iLTVcIiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgbGlzdFZpZXdHcm91cHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1oZWFkZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC10aXRsZVwiPnt7IGdyb3VwPy50aW1lUmFuZ2UgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJncm91cC1jb3VudCBiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0IG1zLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN7eyBncm91cD8uZGF0YT8ubGVuZ3RoIHx8IDAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZ3gtNCBsaXN0LWdyb3VwLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvYmogb2YgZ3JvdXA/LmRhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImltYWdlQ2FyZDsgY29udGV4dDogeyAkaW1wbGljaXQ6IG9iaiB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaW1hZ2VDYXJkIGxldC1vYmo+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidHlwZSAhPT0gJ2R1cGxpY2F0ZScgfHwgKHR5cGUgPT09ICdkdXBsaWNhdGUnJiYgb2JqLnJldm9wc1R5cGUgPT09ICdkdXBsaWNhdGUnICYmIG9iai5kdXBsaWNhdGVJbWFnZVBhdGg/Lmxlbmd0aCA+IDApXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1tZC0zIGJvcmRlci1ncmF5IG14LTIgcC0yIG10LTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENvbmRpdGlvbjogT25seSBzaG93IGlmIG5vdCBkdXBsaWNhdGUgT1IgZHVwbGljYXRlIHdpdGggbm9uLWVtcHR5IGR1cGxpY2F0ZUltYWdlUGF0aCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLXNyYyBjdXJzb3ItcG9pbnRlclwiIFtzcmNdPVwiaW1hZ2VVcmwgKyBvYmo/LmZpbGVQYXRoXCIgKGVycm9yKT1cIm9iai5maWxlUGF0aCA9IG51bGxcIiBhbHQ9XCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEltYWdlRm9yU3BsaXRWaWV3KG9iailcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIW9iaj8uZmlsZVBhdGhcIiBjbGFzcz1cIm5vLXByZXZpZXdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYi01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjNcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjMgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIkdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGlkPVwiVmVjdG9yXCIgZD1cIk02LjUgNi4zMjIyN0g2LjUxTTE2LjI1IDkuMzIyMjdIMjEuNUwxOCAxNi4zMjIzTDE0LjkxIDEyLjAwMjNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD1cIlZlY3Rvcl8yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMS41IDE2LjMyMjlINS4yNkM1LjYzMjczIDE2LjMyNTUgNS45OTg3NyAxNi4yMjM5IDYuMzE2ODIgMTYuMDI5NUM2LjYzNDg3IDE1LjgzNTIgNi44OTIyOCAxNS41NTU4IDcuMDYgMTUuMjIyOUw4LjUgMTIuMzIyOU0xLjUgMTguMzIyOVYxNC4zMjI5TTE3LjUgNi44MjI5MUwxMy41IDE0LjgyMjlMMy4xMSA5LjYyMjkxQzIuNDIwMzMgOS4yNzU1MyAxLjg5NjM1IDguNjY5MSAxLjY1MjcyIDcuOTM2MzJDMS40MDkwOSA3LjIwMzU0IDEuNDY1NjQgNi40MDQxIDEuODEgNS43MTI5MUwzLjE5IDIuOTIyOTFDMy4zNjIgMi41ODAxNCAzLjU5OTg0IDIuMjc0NiAzLjg4OTk0IDIuMDIzNzVDNC4xODAwMyAxLjc3MjkgNC41MTY3IDEuNTgxNjUgNC44ODA3MiAxLjQ2MDkzQzUuMjQ0NzQgMS4zNDAyMSA1LjYyODk3IDEuMjkyMzkgNi4wMTE0NyAxLjMyMDE4QzYuMzkzOTggMS4zNDc5NyA2Ljc2NzI2IDEuNDUwODQgNy4xMSAxLjYyMjkxTDE3LjUgNi44MjI5MVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRlciBtYi01IHRleHQtY2VudGVyXCI+UHJldmlldyBub3QgYXZhaWxhYmxlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRlc2NyaXB0aW9uIG1iLTUgdGV4dC1jZW50ZXJcIj5UaGUgc2VsZWN0ZWQgY2FtZXJhIGlzIG5vdCBhdmFpbGFibGUgYXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50Ljwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidHlwZSAhPT0gJ2R1cGxpY2F0ZScgfHwgKHR5cGUgPT09ICdkdXBsaWNhdGUnJiYgb2JqLnJldm9wc1R5cGUgPT09ICdkdXBsaWNhdGUnICYmIG9iai5kdXBsaWNhdGVJbWFnZVBhdGg/Lmxlbmd0aCA+IDApXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3cgcHgtMiBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtN1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTIgaW1nLWRvYy10aW1lXCI+VGFuZ28gSUQgOiB7e29iaj8udGVtcGxkfX0gPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIodHlwZSA9PT0gJ2R1cGxpY2F0ZScmJiBvYmoucmV2b3BzVHlwZSA9PT0gJ2R1cGxpY2F0ZScgJiYgb2JqLmR1cGxpY2F0ZUltYWdlUGF0aD8ubGVuZ3RoID4gMClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm14LTIgYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeVwiPnt7b2JqLmR1cGxpY2F0ZUltYWdlUGF0aD8ubGVuZ3RofX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmo/LnN0YXR1cyA9PT0nYXBwcm92ZWQnXCIgY2xhc3M9XCJtcy0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgc3R5bGU9XCJ3aWR0aDogMjBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAyMHB4O1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjExXCIgdmlld0JveD1cIjAgMCAxMCAxMVwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB5PVwiMC41XCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgcng9XCI1XCIgZmlsbD1cIiNEMUZBREZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy4xMjIyIDMuNTc5MTlMNC4xMzg4NyA2LjQ1ODM2TDMuMzQ3MiA1LjYxMjUzQzMuMjAxMzcgNS40NzUwMyAyLjk3MjIgNS40NjY2OSAyLjgwNTUzIDUuNTgzMzZDMi42NDMwMyA1LjcwNDE5IDIuNTk3MiA1LjkxNjY5IDIuNjk3MiA2LjA4NzUzTDMuNjM0NyA3LjYxMjUzQzMuNzI2MzcgNy43NTQxOSAzLjg4NDcgNy44NDE2OSA0LjA2Mzg3IDcuODQxNjlDNC4yMzQ3IDcuODQxNjkgNC4zOTcyIDcuNzU0MTkgNC40ODg4NyA3LjYxMjUzQzQuNjM4ODcgNy40MTY2OSA3LjUwMTM3IDQuMDA0MTkgNy41MDEzNyA0LjAwNDE5QzcuODc2MzcgMy42MjA4NiA3LjQyMjIgMy4yODMzNiA3LjEyMjIgMy41NzUwM1YzLjU3OTE5WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxMkI3NkFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmo/LnN0YXR1cyA9PT0ncmVqZWN0ZWQnXCIgY2xhc3M9XCJtcy0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgc3R5bGU9XCJ3aWR0aDogMjBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAyMHB4O1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjEzXCIgdmlld0JveD1cIjAgMCAxMyAxM1wiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE0MjhfNTk0ODQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00LjUyOTYxIDEuNUg4LjY2OTYxTDExLjU5OTYgNC40M1Y4LjU3TDguNjY5NjEgMTEuNUg0LjUyOTYxTDEuNTk5NjEgOC41N1Y0LjQzTDQuNTI5NjEgMS41WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkVFNEUyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDk5NjEgNUw1LjA5OTYxIDhNNS4wOTk2MSA1TDguMDk5NjEgOE00LjUyOTYxIDEuNUg4LjY2OTYxTDExLjU5OTYgNC40M1Y4LjU3TDguNjY5NjEgMTEuNUg0LjUyOTYxTDEuNTk5NjEgOC41N1Y0LjQzTDQuNTI5NjEgMS41WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTQyOF81OTQ4NFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC41OTk2MDkgMC41KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nLWRvYy12YWx1ZVwiPkVudHJ5IFRpbWUgOiB7e29iaj8uZW50cnlUbWV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01IHRleHQtZW5kIHB5LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqPy5yZXZvcHNUeXBlID09PSdub24tdGFnZ2luZydcIiBuZ2JUb29sdGlwPVwiWWV0IHRvIHRhZyB0aGUgY3VzdG9tZXJcIiBwbGFjZW1lbnQ9XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjFcIiB2aWV3Qm94PVwiMCAwIDE5IDE4XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi4wMjM0NCA1LjYyNUg2LjAzMDk0TTE2LjIxNTkgMTAuNDMyNUwxMC44Mzg0IDE1LjgxQzEwLjY5OTEgMTUuOTQ5NSAxMC41MzM3IDE2LjA2MDEgMTAuMzUxNiAxNi4xMzU2QzEwLjE2OTUgMTYuMjExMSA5Ljk3NDMxIDE2LjI0OTkgOS43NzcxOSAxNi4yNDk5QzkuNTgwMDYgMTYuMjQ5OSA5LjM4NDg3IDE2LjIxMTEgOS4yMDI3OCAxNi4xMzU2QzkuMDIwNjggMTYuMDYwMSA4Ljg1NTI1IDE1Ljk0OTUgOC43MTU5NCAxNS44MUwyLjI3MzQ0IDkuMzc1VjEuODc1SDkuNzczNDRMMTYuMjE1OSA4LjMxNzVDMTYuNDk1MyA4LjU5ODU0IDE2LjY1MjEgOC45Nzg3MiAxNi42NTIxIDkuMzc1QzE2LjY1MjEgOS43NzEyOCAxNi40OTUzIDEwLjE1MTUgMTYuMjE1OSAxMC40MzI1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9iaj8ucmV2b3BzVHlwZSA9PT0nZHVwbGljYXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJvYmo/LmlzUGFyZW50XCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIxXCIgdmlld0JveD1cIjAgMCAxMCAxMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzU2OF8xMDM2NTcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMi4wODM5OCA2LjI1MDAxSDEuNjY3MzJDMS40NDYzIDYuMjUwMDEgMS4yMzQzNCA2LjE2MjIxIDEuMDc4MDYgNi4wMDU5M0MwLjkyMTc4MiA1Ljg0OTY1IDAuODMzOTg0IDUuNjM3NjkgMC44MzM5ODQgNS40MTY2OFYxLjY2NjY4QzAuODMzOTg0IDEuNDQ1NjYgMC45MjE3ODIgMS4yMzM3IDEuMDc4MDYgMS4wNzc0MkMxLjIzNDM0IDAuOTIxMTQxIDEuNDQ2MyAwLjgzMzM0NCAxLjY2NzMyIDAuODMzMzQ0SDUuNDE3MzJDNS42MzgzMyAwLjgzMzM0NCA1Ljg1MDI5IDAuOTIxMTQxIDYuMDA2NTcgMS4wNzc0MkM2LjE2Mjg1IDEuMjMzNyA2LjI1MDY1IDEuNDQ1NjYgNi4yNTA2NSAxLjY2NjY4VjIuMDgzMzRNNC41ODM5OCAzLjc1MDAxSDguMzMzOThDOC43OTQyMiAzLjc1MDAxIDkuMTY3MzIgNC4xMjMxMSA5LjE2NzMyIDQuNTgzMzRWOC4zMzMzNEM5LjE2NzMyIDguNzkzNTggOC43OTQyMiA5LjE2NjY4IDguMzMzOTggOS4xNjY2OEg0LjU4Mzk4QzQuMTIzNzUgOS4xNjY2OCAzLjc1MDY1IDguNzkzNTggMy43NTA2NSA4LjMzMzM0VjQuNTgzMzRDMy43NTA2NSA0LjEyMzExIDQuMTIzNzUgMy43NTAwMSA0LjU4Mzk4IDMuNzUwMDFaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI1XCIgaGVpZ2h0PVwiNVwiIGZpbGw9XCIjNDc1NDY3XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF81NjhfMTAzNjU3XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgZmlsbD1cIndoaXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIW9iaj8uaXNQYXJlbnRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIxXCIgdmlld0JveD1cIjAgMCAyMCAyMVwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjAxMl85NDYzNSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00LjE2Nzk3IDEzLjE4NTlIMy4zMzQ2NEMyLjg5MjYxIDEzLjE4NTkgMi40Njg2OCAxMy4wMTAzIDIuMTU2MTIgMTIuNjk3N0MxLjg0MzU2IDEyLjM4NTIgMS42Njc5NyAxMS45NjEyIDEuNjY3OTcgMTEuNTE5MlY0LjAxOTIxQzEuNjY3OTcgMy41NzcxOCAxLjg0MzU2IDMuMTUzMjYgMi4xNTYxMiAyLjg0MDY5QzIuNDY4NjggMi41MjgxMyAyLjg5MjYxIDIuMzUyNTQgMy4zMzQ2NCAyLjM1MjU0SDEwLjgzNDZDMTEuMjc2NyAyLjM1MjU0IDExLjcwMDYgMi41MjgxMyAxMi4wMTMxIDIuODQwNjlDMTIuMzI1NyAzLjE1MzI2IDEyLjUwMTMgMy41NzcxOCAxMi41MDEzIDQuMDE5MjFWNC44NTI1NE05LjE2Nzk3IDguMTg1ODdIMTYuNjY4QzE3LjU4ODQgOC4xODU4NyAxOC4zMzQ2IDguOTMyMDYgMTguMzM0NiA5Ljg1MjU0VjE3LjM1MjVDMTguMzM0NiAxOC4yNzMgMTcuNTg4NCAxOS4wMTkyIDE2LjY2OCAxOS4wMTkySDkuMTY3OTdDOC4yNDc0OSAxOS4wMTkyIDcuNTAxMyAxOC4yNzMgNy41MDEzIDE3LjM1MjVWOS44NTI1NEM3LjUwMTMgOC45MzIwNiA4LjI0NzQ5IDguMTg1ODcgOS4xNjc5NyA4LjE4NTg3WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjAxMl85NDYzNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwIDAuNjg2MDM1KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9iaj8ucmV2b3BzVHlwZSA9PT0nZW1wbG95ZWUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIxXCIgdmlld0JveD1cIjAgMCAyMCAyMVwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjAxMl85NDYzOSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNC4xNjU0IDE4LjE4NlYxNi41MTk0QzE0LjE2NTQgMTUuNjM1MyAxMy44MTQyIDE0Ljc4NzUgMTMuMTg5MSAxNC4xNjIzQzEyLjU2MzkgMTMuNTM3MiAxMS43MTYxIDEzLjE4NiAxMC44MzIgMTMuMTg2SDQuMTY1MzZDMy4yODEzMSAxMy4xODYgMi40MzM0NiAxMy41MzcyIDEuODA4MzQgMTQuMTYyM0MxLjE4MzIyIDE0Ljc4NzUgMC44MzIwMzEgMTUuNjM1MyAwLjgzMjAzMSAxNi41MTk0VjE4LjE4Nk0xOS4xNjU0IDE4LjE4NlYxNi41MTk0QzE5LjE2NDggMTUuNzgwOCAxOC45MTkgMTUuMDYzMyAxOC40NjY1IDE0LjQ3OTZDMTguMDE0IDEzLjg5NTkgMTcuMzgwNSAxMy40NzkgMTYuNjY1NCAxMy4yOTQ0TTEzLjMzMiAzLjI5NDM3QzE0LjA0OSAzLjQ3Nzk1IDE0LjY4NDYgMy44OTQ5NSAxNS4xMzg0IDQuNDc5NjNDMTUuNTkyMiA1LjA2NDMgMTUuODM4NiA1Ljc4MzM5IDE1LjgzODYgNi41MjM1NEMxNS44Mzg2IDcuMjYzNjggMTUuNTkyMiA3Ljk4Mjc3IDE1LjEzODQgOC41Njc0NEMxNC42ODQ2IDkuMTUyMTIgMTQuMDQ5IDkuNTY5MTIgMTMuMzMyIDkuNzUyN00xMC44MzIgNi41MTkzN0MxMC44MzIgOC4zNjAzMiA5LjMzOTY1IDkuODUyNyA3LjQ5ODcgOS44NTI3QzUuNjU3NzUgOS44NTI3IDQuMTY1MzYgOC4zNjAzMiA0LjE2NTM2IDYuNTE5MzdDNC4xNjUzNiA0LjY3ODQyIDUuNjU3NzUgMy4xODYwNCA3LjQ5ODcgMy4xODYwNEM5LjMzOTY1IDMuMTg2MDQgMTAuODMyIDQuNjc4NDIgMTAuODMyIDYuNTE5MzdaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMDEyXzk0NjM5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqPy5yZXZvcHNUeXBlID09PSdob3VzZS1rZWVwaW5nJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMVwiIHZpZXdCb3g9XCIwIDAgMjEgMjFcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIwMTJfOTQ2NDMpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05LjI2MjE5IDEuMzY3MjJDMTAuMTc3NyAwLjQ1ODk3NCAxMS42NjIgMC40NTg5NzQgMTIuNTc3NiAxLjM2NzIyTDIwLjMxMzMgOS4wNDE1M0MyMS4yMjg3IDkuOTQ5OCAyMS4yMjg3IDExLjQyMjMgMjAuMzEzMyAxMi4zMzA2TDEyLjU3NzYgMjAuMDA0OUMxMS42NjIgMjAuOTEzMSAxMC4xNzc3IDIwLjkxMzEgOS4yNjIxOSAyMC4wMDQ5TDcuMDUxNjYgMTcuODExOUw1LjAyNTM4IDE5LjgyMjFDNC4xMDk4NyAyMC43MzAzIDIuNjI1NTMgMjAuNzMwMyAxLjcxMDAyIDE5LjgyMjFDMC43OTQ1MSAxOC45MTM5IDAuNzk0NTEgMTcuNDQxMyAxLjcxMDAyIDE2LjUzMzFMMy43MzYzIDE0LjUyMjlMMS41MjY0OCAxMi4zMzA2QzAuNjEwOTY2IDExLjQyMjMgMC42MTA5NjYgOS45NDk4IDEuNTI2NDggOS4wNDE1M0w5LjI2MjE5IDEuMzY3MjJaTTExLjQ3MjQgMi40NjM1N0MxMS4xNjcyIDIuMTYwODIgMTAuNjcyNCAyLjE2MDgyIDEwLjM2NzIgMi40NjM1N0w0Ljg0MTQ1IDcuOTQ1NTZMMTMuNjgyMyAxNi43MTYzTDE5LjIwODEgMTEuMjM0MkMxOS41MTMzIDEwLjkzMTUgMTkuNTEzMyAxMC40NDA2IDE5LjIwODEgMTAuMTM3OUwxNS4zMzk5IDYuMzAwMzJMMTQuMDUwNSA3LjU3OTRDMTMuNzQ1MyA3Ljg4MjE0IDEzLjI1MDYgNy44ODIxNCAxMi45NDU1IDcuNTc5NEMxMi42NDAzIDcuMjc2NjQgMTIuNjQwMyA2Ljc4NTc5IDEyLjk0NTUgNi40ODMwNUwxNC4yMzQ3IDUuMjAzOTdMMTMuMTI5OSA0LjEwNzg2TDkuOTk4NzIgNy4yMTQxOEM5LjY5MzU0IDcuNTE2OTIgOS4xOTg3MyA3LjUxNjkyIDguODkzNTYgNy4yMTQxOEM4LjU4ODM4IDYuOTExNDMgOC41ODgzOCA2LjQyMDU4IDguODkzNTYgNi4xMTc4M0wxMi4wMjQ3IDMuMDExNTFMMTEuNDcyNCAyLjQ2MzU3Wk0xMi41NzcxIDE3LjgxMjVMMy43MzYzMyA5LjA0MTkxTDIuNjMxNiAxMC4xMzc5QzIuMzI2NDIgMTAuNDQwNiAyLjMyNjQyIDEwLjkzMTUgMi42MzE2IDExLjIzNDJMMTAuMzY3MiAxOC45MDg1QzEwLjY3MjQgMTkuMjExMyAxMS4xNjcyIDE5LjIxMTMgMTEuNDcyNCAxOC45MDg1TDEyLjU3NzEgMTcuODEyNVpNNC44NDEzMiAxNS42MTkyTDIuODE1MTQgMTcuNjI5NEMyLjUwOTk3IDE3LjkzMjEgMi41MDk5NyAxOC40MjMgMi44MTUxNCAxOC43MjU4QzMuMTIwMzEgMTkuMDI4NSAzLjYxNTA5IDE5LjAyODUgMy45MjAyNiAxOC43MjU4TDUuOTQ2NDQgMTYuNzE1Nkw0Ljg0MTMyIDE1LjYxOTJaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzQ3NTQ2N1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMDEyXzk0NjQzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqPy5yZXZvcHNUeXBlID09PSdqdW5rJ1wiPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjFcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMyA2SDVNNSA2SDIxTTUgNlYyMEM1IDIwLjUzMDQgNS4yMTA3MSAyMS4wMzkxIDUuNTg1NzkgMjEuNDE0MkM1Ljk2MDg2IDIxLjc4OTMgNi40Njk1NyAyMiA3IDIySDE3QzE3LjUzMDQgMjIgMTguMDM5MSAyMS43ODkzIDE4LjQxNDIgMjEuNDE0MkMxOC43ODkzIDIxLjAzOTEgMTkgMjAuNTMwNCAxOSAyMFY2SDVaTTggNlY0QzggMy40Njk1NyA4LjIxMDcxIDIuOTYwODYgOC41ODU3OSAyLjU4NTc5QzguOTYwODYgMi4yMTA3MSA5LjQ2OTU3IDIgMTAgMkgxNEMxNC41MzA0IDIgMTUuMDM5MSAyLjIxMDcxIDE1LjQxNDIgMi41ODU3OUMxNS43ODkzIDIuOTYwODYgMTYgMy40Njk1NyAxNiA0VjZNMTAgMTFWMTdNMTQgMTFWMTdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgICAgIDwhLS0gZnVsbCBpbWFnZSBWaWV3IC0tPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nSWY9XCJpbWFnZUZsb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gVGlja2V0IEJsb2NrIEFsZXJ0IC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0U2VsZWN0ZWREYXRlQ2FyZERhdGEoKT8ucmFpc2VkU3RhdHVzRW5hYmxlZCA9PT0gJ2Jsb2NrJ1wiIGNsYXNzPVwiY29sLTEyIG1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtYmxvY2stYWxlcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LWJsb2NrLWFsZXJ0LWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpY2tldC1ibG9jay1hbGVydC1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTJcIiBmaWxsPVwiI0YwNDQzOFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMiA4VjEzXCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjE2XCIgcj1cIjFcIiBmaWxsPVwid2hpdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LWJsb2NrLWFsZXJ0LXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtYmxvY2stYWxlcnQtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2Fubm90IHJhaXNlIHRpY2tldCBmb3IgbmV4dCB7eyBnZXRTZWxlY3RlZERhdGVDYXJkRGF0YSgpPy5ub09mQmxvY2tlZERheXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAnMCcgfX0gZGF5c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LWJsb2NrLWFsZXJ0LWRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgbG9va3MgbGlrZSB5b3UgaGF2ZSBhY2hpZXZlZCA5NSUgYWNjdXJhY3kgZm9yIHRoZSB0aHJlZSB0aWNrZXRzIHJhaXNlZCB0aGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9udGguIFRoaXMgbGltaXRzIHlvdSBmcm9tIHJhaXNpbmcgbW9yZSB0aWNrZXRzIHRvIGF2b2lkIHJlZHVuZGFuY3kuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtYmxvY2stYWxlcnQtYWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgeW91IHN0aWxsIHdhbnQgdG8gcmFpc2UgdGlja2V0cywgPHNwYW4gY2xhc3M9XCJ0aWNrZXQtYmxvY2stYWxlcnQtbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXF1ZXN0UmVzZXQoKVwiPnNlbmQgcmVxdWVzdDwvc3Bhbj4gdG8gcmVzZXQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gVGlja2V0IFJlcXVlc3QgU3VjY2VzcyBBbGVydCAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldFNlbGVjdGVkRGF0ZUNhcmREYXRhKCk/LnJhaXNlZFN0YXR1c0VuYWJsZWQgPT09ICdyZXF1ZXN0J1wiIGNsYXNzPVwiY29sLTEyIG1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtcmVxdWVzdC1hbGVydFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtcmVxdWVzdC1hbGVydC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtcmVxdWVzdC1hbGVydC1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMiAyMUwyMyAxMkwyIDNWMTBMMTcgMTJMMiAxNFYyMVpcIiBmaWxsPVwiIzEwQjk4MVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtcmVxdWVzdC1hbGVydC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LXJlcXVlc3QtYWxlcnQtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldCBSZXF1ZXN0IFNlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpY2tldC1yZXF1ZXN0LWFsZXJ0LWRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91ciByZXF1ZXN0IHRvIGVuYWJsZSB0aWNrZXQgcmFpc2luZyBoYXMgYmVlbiBzdWJtaXR0ZWQuIFlvdSdsbCBiZSBub3RpZmllZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2UgaXQncyBhcHByb3ZlZC4gUGxlYXNlIGVuc3VyZSBmdXR1cmUgdGlja2V0IGFjY3VyYWN5IHJlbWFpbnMgd2l0aGluIHRoZSA5NSVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbXQtMiBtYi0yIHctMTAwIG92ZXJmbG93LXggcHgtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RmYWxsVHJlbmRzVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aWNrZXRTdGF0dXNUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zaHJpbmstMCBtdC0zIGp1c3RpZnktY29udGVudC1zdGFydCBhbGlnbi1pdGVtcy1jZW50ZXIgcHgtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFnZXRUaWNrZXRTdGF0dXNlcygpLmluY2x1ZGVzKCdvcGVuJykgJiYgIWdldFRpY2tldFN0YXR1c2VzKCkuaW5jbHVkZXMoJ2Nsb3NlZCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1zLWF1dG8gdGV4dC1lbmRcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cIiFjYW5FbmFibGVCdXR0b24oKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJSYWlzZWQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYWlzZSB0aWNrZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1ncm91cCBiZy13aGl0ZSBib3JkZXItMSBidG4tZ3JvdXAgdy1hdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShjb3VudERhdGE/Lmxlbmd0aCA+IDApXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHB4LTYgcHktM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInR5cGUgPT09ICdmb290ZmFsbCcgPyAnYWN0aXZlUGxhbkJ0bicgOiAnaW5hY3RpdmVQbGFuQnRuJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQbGFuVHJlbmRzKCdmb290ZmFsbCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvdGFsIEZvb3RmYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ0eXBlID09PSAnZm9vdGZhbGwnID8gJ2FjdGl2ZVBsYW5CdG4gYmFkZ2UgYmFkZ2UtYWN0aXZlJyA6ICdpbmFjdGl2ZVBsYW5CdG4gYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvdW50RGF0YT8uZm9vdGZhbGxDb3VudCB8fCAwIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgcHgtNiBweS0zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwidHlwZSA9PT0gJ25vbi10YWdnaW5nJyA/ICdhY3RpdmVQbGFuQnRuJyA6ICdpbmFjdGl2ZVBsYW5CdG4nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFBsYW5UcmVuZHMoJ25vbi10YWdnaW5nJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uLXRhZ3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInR5cGUgPT09ICdub24tdGFnZ2luZycgPyAnYWN0aXZlUGxhbkJ0biBiYWRnZSBiYWRnZS1hY3RpdmUnIDogJ2luYWN0aXZlUGxhbkJ0biBiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY291bnREYXRhPy5ub25UYWdzIHx8IDAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBweC02IHB5LTNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ0eXBlID09PSAnZHVwbGljYXRlJyA/ICdhY3RpdmVQbGFuQnRuJyA6ICdpbmFjdGl2ZVBsYW5CdG4nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFBsYW5UcmVuZHMoJ2R1cGxpY2F0ZScpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1cGxpY2F0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInR5cGUgPT09ICdkdXBsaWNhdGUnID8gJ2FjdGl2ZVBsYW5CdG4gYmFkZ2UgYmFkZ2UtYWN0aXZlJyA6ICdpbmFjdGl2ZVBsYW5CdG4gYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvdW50RGF0YT8uZHVwbGljYXRlIHx8IDAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBweC02IHB5LTNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ0eXBlID09PSAnZW1wbG95ZWUnID8gJ2FjdGl2ZVBsYW5CdG4nIDogJ2luYWN0aXZlUGxhbkJ0bidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UGxhblRyZW5kcygnZW1wbG95ZWUnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbXBsb3llZS9TdGFmZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwidHlwZSA9PT0gJ2VtcGxveWVlJyA/ICdhY3RpdmVQbGFuQnRuIGJhZGdlIGJhZGdlLWFjdGl2ZScgOiAnaW5hY3RpdmVQbGFuQnRuIGJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb3VudERhdGE/LmVtcGxveWVlIHx8IDAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgcHgtNiBweS0zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwidHlwZSA9PT0gJ2p1bmsnID8gJ2FjdGl2ZVBsYW5CdG4nIDogJ2luYWN0aXZlUGxhbkJ0bidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UGxhblRyZW5kcygnanVuaycpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEp1bmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInR5cGUgPT09ICdqdW5rJyA/ICdiYWRnZSBiYWRnZS1hY3RpdmUgYWN0aXZlUGxhbkJ0bicgOiAnIGJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHQgaW5hY3RpdmVQbGFuQnRuJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY291bnREYXRhPy5qdW5rIHx8IDAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgcHgtNiBweS0zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwidHlwZSA9PT0gJ2hvdXNlLWtlZXBpbmcnID8gJ2FjdGl2ZVBsYW5CdG4nIDogJ2luYWN0aXZlUGxhbkJ0bidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UGxhblRyZW5kcygnaG91c2Uta2VlcGluZycpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvdXNlIEtlZXBpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInR5cGUgPT09ICdob3VzZS1rZWVwaW5nJyA/ICdiYWRnZSBiYWRnZS1hY3RpdmUgYWN0aXZlUGxhbkJ0bicgOiAnIGJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHQgaW5hY3RpdmVQbGFuQnRuJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY291bnREYXRhPy5ob3VzZWtlZXBpbmcgfHwgMCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXgtMCBib3JkZXItZ3JheSBpbWctdHJhZmZpY1wiICpuZ0lmPVwiIW5vRGF0YSAmJiAhbG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IHAtMiAgbWItMiBtdC01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIGJvcmRlci1ncmF5IHAtMiBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBNYWluIEltYWdlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxpbWcgY2xhc3M9XCJpbWctc3JjIGN1cnNvci1wb2ludGVyIGgtNDUwcHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkSW1hZ2VBcnJheShpbWFnZVVybCwgc2VsZWN0SW1hZ2VBcnJheSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpbWFnZVVybCArIHNlbGVjdEltYWdlQXJyYXk/LmZpbGVQYXRoXCIgYXBwTWFnbmlmaWVyIGFsdD1cIlwiPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmMgY3Vyc29yLXBvaW50ZXIgaC00NTBweFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRJbWFnZUFycmF5KGltYWdlVXJsLCBzZWxlY3RJbWFnZUFycmF5KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImltYWdlVXJsICsgc2VsZWN0SW1hZ2VBcnJheT8uZmlsZVBhdGhcIiBhbHQ9XCJcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJpZ2h0IGFycm93IGJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC0yIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtN1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0yIGltZy1kb2MtdGltZVwiPlRhbmdvIElEIDoge3tzZWxlY3RJbWFnZUFycmF5Py50ZW1wbGR9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdEltYWdlQXJyYXk/LnN0YXR1cyA9PT0nYXBwcm92ZWQnXCIgY2xhc3M9XCJtcy0yXCI+PHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTFcIiB2aWV3Qm94PVwiMCAwIDEwIDExXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB5PVwiMC41XCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgcng9XCI1XCIgZmlsbD1cIiNEMUZBREZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjEyMjIgMy41NzkxOUw0LjEzODg3IDYuNDU4MzZMMy4zNDcyIDUuNjEyNTNDMy4yMDEzNyA1LjQ3NTAzIDIuOTcyMiA1LjQ2NjY5IDIuODA1NTMgNS41ODMzNkMyLjY0MzAzIDUuNzA0MTkgMi41OTcyIDUuOTE2NjkgMi42OTcyIDYuMDg3NTNMMy42MzQ3IDcuNjEyNTNDMy43MjYzNyA3Ljc1NDE5IDMuODg0NyA3Ljg0MTY5IDQuMDYzODcgNy44NDE2OUM0LjIzNDcgNy44NDE2OSA0LjM5NzIgNy43NTQxOSA0LjQ4ODg3IDcuNjEyNTNDNC42Mzg4NyA3LjQxNjY5IDcuNTAxMzcgNC4wMDQxOSA3LjUwMTM3IDQuMDA0MTlDNy44NzYzNyAzLjYyMDg2IDcuNDIyMiAzLjI4MzM2IDcuMTIyMiAzLjU3NTAzVjMuNTc5MTlaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxMkI3NkFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdEltYWdlQXJyYXk/LnN0YXR1cyA9PT0ncmVqZWN0ZWQnXCIgY2xhc3M9XCJtcy0yXCI+PHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEzXCIgaGVpZ2h0PVwiMTNcIiB2aWV3Qm94PVwiMCAwIDEzIDEzXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE0MjhfNTk0ODQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTQuNTI5NjEgMS41SDguNjY5NjFMMTEuNTk5NiA0LjQzVjguNTdMOC42Njk2MSAxMS41SDQuNTI5NjFMMS41OTk2MSA4LjU3VjQuNDNMNC41Mjk2MSAxLjVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkVFNEUyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wOTk2MSA1TDUuMDk5NjEgOE01LjA5OTYxIDVMOC4wOTk2MSA4TTQuNTI5NjEgMS41SDguNjY5NjFMMTEuNTk5NiA0LjQzVjguNTdMOC42Njk2MSAxMS41SDQuNTI5NjFMMS41OTk2MSA4LjU3VjQuNDNMNC41Mjk2MSAxLjVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzE0MjhfNTk0ODRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAuNTk5NjA5IDAuNSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nLWRvYy12YWx1ZVwiPkVudHJ5IFRpbWUgOiB7eyh0ZW1wTW9kYWxJbWFnZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RJbWFnZUFycmF5KT8uZW50cnlUbWUgfHwgKHRlbXBNb2RhbEltYWdlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEltYWdlQXJyYXkpPy5lbnRyeVRpbWV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTUgdGV4dC1lbmQgcHktM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiKHRlbXBNb2RhbEltYWdlIHx8IHNlbGVjdEltYWdlQXJyYXkpPy5yZXZvcHNUeXBlID09PSdub24tdGFnZ2luZydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwiWWV0IHRvIHRhZyB0aGUgY3VzdG9tZXJcIiBwbGFjZW1lbnQ9XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOVwiIGhlaWdodD1cIjE4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTkgMThcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuMDIzNDQgNS42MjVINi4wMzA5NE0xNi4yMTU5IDEwLjQzMjVMMTAuODM4NCAxNS44MUMxMC42OTkxIDE1Ljk0OTUgMTAuNTMzNyAxNi4wNjAxIDEwLjM1MTYgMTYuMTM1NkMxMC4xNjk1IDE2LjIxMTEgOS45NzQzMSAxNi4yNDk5IDkuNzc3MTkgMTYuMjQ5OUM5LjU4MDA2IDE2LjI0OTkgOS4zODQ4NyAxNi4yMTExIDkuMjAyNzggMTYuMTM1NkM5LjAyMDY4IDE2LjA2MDEgOC44NTUyNSAxNS45NDk1IDguNzE1OTQgMTUuODFMMi4yNzM0NCA5LjM3NVYxLjg3NUg5Ljc3MzQ0TDE2LjIxNTkgOC4zMTc1QzE2LjQ5NTMgOC41OTg1NCAxNi42NTIxIDguOTc4NzIgMTYuNjUyMSA5LjM3NUMxNi42NTIxIDkuNzcxMjggMTYuNDk1MyAxMC4xNTE1IDE2LjIxNTkgMTAuNDMyNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM0NzU0NjdcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RJbWFnZUFycmF5Py5yZXZvcHNUeXBlID09PSdkdXBsaWNhdGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIxXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjAxMl85NDYzNSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTQuMTY3OTcgMTMuMTg1OUgzLjMzNDY0QzIuODkyNjEgMTMuMTg1OSAyLjQ2ODY4IDEzLjAxMDMgMi4xNTYxMiAxMi42OTc3QzEuODQzNTYgMTIuMzg1MiAxLjY2Nzk3IDExLjk2MTIgMS42Njc5NyAxMS41MTkyVjQuMDE5MjFDMS42Njc5NyAzLjU3NzE4IDEuODQzNTYgMy4xNTMyNiAyLjE1NjEyIDIuODQwNjlDMi40Njg2OCAyLjUyODEzIDIuODkyNjEgMi4zNTI1NCAzLjMzNDY0IDIuMzUyNTRIMTAuODM0NkMxMS4yNzY3IDIuMzUyNTQgMTEuNzAwNiAyLjUyODEzIDEyLjAxMzEgMi44NDA2OUMxMi4zMjU3IDMuMTUzMjYgMTIuNTAxMyAzLjU3NzE4IDEyLjUwMTMgNC4wMTkyMVY0Ljg1MjU0TTkuMTY3OTcgOC4xODU4N0gxNi42NjhDMTcuNTg4NCA4LjE4NTg3IDE4LjMzNDYgOC45MzIwNiAxOC4zMzQ2IDkuODUyNTRWMTcuMzUyNUMxOC4zMzQ2IDE4LjI3MyAxNy41ODg0IDE5LjAxOTIgMTYuNjY4IDE5LjAxOTJIOS4xNjc5N0M4LjI0NzQ5IDE5LjAxOTIgNy41MDEzIDE4LjI3MyA3LjUwMTMgMTcuMzUyNVY5Ljg1MjU0QzcuNTAxMyA4LjkzMjA2IDguMjQ3NDkgOC4xODU4NyA5LjE2Nzk3IDguMTg1ODdaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjAxMl85NDYzNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RJbWFnZUFycmF5Py5yZXZvcHNUeXBlID09PSdlbXBsb3llZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjFcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8yMDEyXzk0NjM5KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQuMTY1NCAxOC4xODZWMTYuNTE5NEMxNC4xNjU0IDE1LjYzNTMgMTMuODE0MiAxNC43ODc1IDEzLjE4OTEgMTQuMTYyM0MxMi41NjM5IDEzLjUzNzIgMTEuNzE2MSAxMy4xODYgMTAuODMyIDEzLjE4Nkg0LjE2NTM2QzMuMjgxMzEgMTMuMTg2IDIuNDMzNDYgMTMuNTM3MiAxLjgwODM0IDE0LjE2MjNDMS4xODMyMiAxNC43ODc1IDAuODMyMDMxIDE1LjYzNTMgMC44MzIwMzEgMTYuNTE5NFYxOC4xODZNMTkuMTY1NCAxOC4xODZWMTYuNTE5NEMxOS4xNjQ4IDE1Ljc4MDggMTguOTE5IDE1LjA2MzMgMTguNDY2NSAxNC40Nzk2QzE4LjAxNCAxMy44OTU5IDE3LjM4MDUgMTMuNDc5IDE2LjY2NTQgMTMuMjk0NE0xMy4zMzIgMy4yOTQzN0MxNC4wNDkgMy40Nzc5NSAxNC42ODQ2IDMuODk0OTUgMTUuMTM4NCA0LjQ3OTYzQzE1LjU5MjIgNS4wNjQzIDE1LjgzODYgNS43ODMzOSAxNS44Mzg2IDYuNTIzNTRDMTUuODM4NiA3LjI2MzY4IDE1LjU5MjIgNy45ODI3NyAxNS4xMzg0IDguNTY3NDRDMTQuNjg0NiA5LjE1MjEyIDE0LjA0OSA5LjU2OTEyIDEzLjMzMiA5Ljc1MjdNMTAuODMyIDYuNTE5MzdDMTAuODMyIDguMzYwMzIgOS4zMzk2NSA5Ljg1MjcgNy40OTg3IDkuODUyN0M1LjY1Nzc1IDkuODUyNyA0LjE2NTM2IDguMzYwMzIgNC4xNjUzNiA2LjUxOTM3QzQuMTY1MzYgNC42Nzg0MiA1LjY1Nzc1IDMuMTg2MDQgNy40OTg3IDMuMTg2MDRDOS4zMzk2NSAzLjE4NjA0IDEwLjgzMiA0LjY3ODQyIDEwLjgzMiA2LjUxOTM3WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM0NzU0NjdcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzIwMTJfOTQ2MzlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwIDAuNjg2MDM1KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0SW1hZ2VBcnJheT8ucmV2b3BzVHlwZSA9PT0naG91c2Uta2VlcGluZydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjEgMjFcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8yMDEyXzk0NjQzKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05LjI2MjE5IDEuMzY3MjJDMTAuMTc3NyAwLjQ1ODk3NCAxMS42NjIgMC40NTg5NzQgMTIuNTc3NiAxLjM2NzIyTDIwLjMxMzMgOS4wNDE1M0MyMS4yMjg3IDkuOTQ5OCAyMS4yMjg3IDExLjQyMjMgMjAuMzEzMyAxMi4zMzA2TDEyLjU3NzYgMjAuMDA0OUMxMS42NjIgMjAuOTEzMSAxMC4xNzc3IDIwLjkxMzEgOS4yNjIxOSAyMC4wMDQ5TDcuMDUxNjYgMTcuODExOUw1LjAyNTM4IDE5LjgyMjFDNC4xMDk4NyAyMC43MzAzIDIuNjI1NTMgMjAuNzMwMyAxLjcxMDAyIDE5LjgyMjFDMC43OTQ1MSAxOC45MTM5IDAuNzk0NTEgMTcuNDQxMyAxLjcxMDAyIDE2LjUzMzFMMy43MzYzIDE0LjUyMjlMMS41MjY0OCAxMi4zMzA2QzAuNjEwOTY2IDExLjQyMjMgMC42MTA5NjYgOS45NDk4IDEuNTI2NDggOS4wNDE1M0w5LjI2MjE5IDEuMzY3MjJaTTExLjQ3MjQgMi40NjM1N0MxMS4xNjcyIDIuMTYwODIgMTAuNjcyNCAyLjE2MDgyIDEwLjM2NzIgMi40NjM1N0w0Ljg0MTQ1IDcuOTQ1NTZMMTMuNjgyMyAxNi43MTYzTDE5LjIwODEgMTEuMjM0MkMxOS41MTMzIDEwLjkzMTUgMTkuNTEzMyAxMC40NDA2IDE5LjIwODEgMTAuMTM3OUwxNS4zMzk5IDYuMzAwMzJMMTQuMDUwNSA3LjU3OTRDMTMuNzQ1MyA3Ljg4MjE0IDEzLjI1MDYgNy44ODIxNCAxMi45NDU1IDcuNTc5NEMxMi42NDAzIDcuMjc2NjQgMTIuNjQwMyA2Ljc4NTc5IDEyLjk0NTUgNi40ODMwNUwxNC4yMzQ3IDUuMjAzOTdMMTMuMTI5OSA0LjEwNzg2TDkuOTk4NzIgNy4yMTQxOEM5LjY5MzU0IDcuNTE2OTIgOS4xOTg3MyA3LjUxNjkyIDguODkzNTYgNy4yMTQxOEM4LjU4ODM4IDYuOTExNDMgOC41ODgzOCA2LjQyMDU4IDguODkzNTYgNi4xMTc4M0wxMi4wMjQ3IDMuMDExNTFMMTEuNDcyNCAyLjQ2MzU3Wk0xMi41NzcxIDE3LjgxMjVMMy43MzYzMyA5LjA0MTkxTDIuNjMxNiAxMC4xMzc5QzIuMzI2NDIgMTAuNDQwNiAyLjMyNjQyIDEwLjkzMTUgMi42MzE2IDExLjIzNDJMMTAuMzY3MiAxOC45MDg1QzEwLjY3MjQgMTkuMjExMyAxMS4xNjcyIDE5LjIxMTMgMTEuNDcyNCAxOC45MDg1TDEyLjU3NzEgMTcuODEyNVpNNC44NDEzMiAxNS42MTkyTDIuODE1MTQgMTcuNjI5NEMyLjUwOTk3IDE3LjkzMjEgMi41MDk5NyAxOC40MjMgMi44MTUxNCAxOC43MjU4QzMuMTIwMzEgMTkuMDI4NSAzLjYxNTA5IDE5LjAyODUgMy45MjAyNiAxOC43MjU4TDUuOTQ2NDQgMTYuNzE1Nkw0Ljg0MTMyIDE1LjYxOTJaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM0NzU0NjdcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjAxMl85NDY0M1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IHAtMiBtYi0yICBtdC01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiB0aXRsZS10eXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IG5vbi1zaG9wcGVyIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY29sLW1kLTYgdGV4dC1lbmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiISh1c2Vycz8ucm9sZSA9PT0ndXNlcicgJiYgdXNlcnM/LnVzZXJUeXBlID09PSdjbGllbnQnICYmIHNlbGVjdGVkUmFkaW9UeXBlID09PSdqdW5rJylcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcmV2b3BzVHlwZVZhbHVlXCIgY2xhc3M9XCJtYi01IHRleHQtZW5kXCIgcm9sZT1cImdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWdldFRpY2tldFN0YXR1c2VzKCkuaW5jbHVkZXMoJ29wZW4nKSAmJiAhZ2V0VGlja2V0U3RhdHVzZXMoKS5pbmNsdWRlcygnY2xvc2VkJylcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkUmFkaW9UeXBlID09PSB1bmRlZmluZWQgfHwgc2VsZWN0ZWRSYWRpb1R5cGUgPT09ICcnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZFJhZGlvVHlwZSA9PT0gJ2R1cGxpY2F0ZScgJiYgc2VsZWN0ZWREdXBsaWNhdGVJbWFnZXNMaXN0Lmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xlYXJWYWx1ZSgpXCI+Q2xlYXI8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgbWUtMlwiIChjbGljayk9XCJjYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGlkPVwiYWxlcnQtdG9hc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlKHNlbGVjdGVkVHlwZSlcIiBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkUmFkaW9UeXBlID09PSB1bmRlZmluZWQgfHwgc2VsZWN0ZWRSYWRpb1R5cGUgPT09ICcnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZFJhZGlvVHlwZSA9PT0gJ2R1cGxpY2F0ZScgJiYgc2VsZWN0ZWREdXBsaWNhdGVJbWFnZXNMaXN0Lmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYXZlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiISh1c2Vycz8ucm9sZSA9PT0ndXNlcicgJiYgdXNlcnM/LnVzZXJUeXBlID09PSdjbGllbnQnICYmIHNlbGVjdGVkUmFkaW9UeXBlID09PSdqdW5rJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRCdG5TaG93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicmV2b3BzVHlwZVZhbHVlXCIgY2xhc3M9XCJtYi01IHRleHQtZW5kXCIgcm9sZT1cImdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFnZXRUaWNrZXRTdGF0dXNlcygpLmluY2x1ZGVzKCdvcGVuJykgJiYgIWdldFRpY2tldFN0YXR1c2VzKCkuaW5jbHVkZXMoJ2Nsb3NlZCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgbWUtMlwiIChjbGljayk9XCJlZGl0VmFsdWUoKVwiPjxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lLTJcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQuNjU1NCAxLjcxMDQ3QzE0Ljg5MjcgMS40NzMxNSAxNS4xNzQ1IDEuMjg0OSAxNS40ODQ1IDEuMTU2NDZDMTUuNzk0NiAxLjAyODAyIDE2LjEyNjkgMC45NjE5MTQgMTYuNDYyNiAwLjk2MTkxNEMxNi43OTgyIDAuOTYxOTE0IDE3LjEzMDUgMS4wMjgwMiAxNy40NDA2IDEuMTU2NDZDMTcuNzUwNyAxLjI4NDkgMTguMDMyNCAxLjQ3MzE1IDE4LjI2OTcgMS43MTA0N0MxOC41MDcxIDEuOTQ3NzkgMTguNjk1MyAyLjIyOTUzIDE4LjgyMzggMi41Mzk2MUMxOC45NTIyIDIuODQ5NjkgMTkuMDE4MyAzLjE4MjAyIDE5LjAxODMgMy41MTc2NUMxOS4wMTgzIDMuODUzMjcgMTguOTUyMiA0LjE4NTYxIDE4LjgyMzggNC40OTU2OEMxOC42OTUzIDQuODA1NzYgMTguNTA3MSA1LjA4NzUgMTguMjY5NyA1LjMyNDgyTDYuMDcxMyAxNy41MjMzTDEuMTAxNTYgMTguODc4NkwyLjQ1Njk1IDEzLjkwODlMMTQuNjU1NCAxLjcxMDQ3WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjgxMDc5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5FZGl0PC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBteS0xNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJkdXBsaWNhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZHVwbGljYXRlXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFR5cGVcIiBbdmFsdWVdPVwiJ2R1cGxpY2F0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25SYWRpb0NoYW5nZShzZWxlY3RlZFR5cGUpXCIgW2Rpc2FibGVkXT1cInJldm9wc1R5cGVWYWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImR1cGxpY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMVwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIwMTJfOTQ2MzUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00LjE2Nzk3IDEzLjE4NTlIMy4zMzQ2NEMyLjg5MjYxIDEzLjE4NTkgMi40Njg2OCAxMy4wMTAzIDIuMTU2MTIgMTIuNjk3N0MxLjg0MzU2IDEyLjM4NTIgMS42Njc5NyAxMS45NjEyIDEuNjY3OTcgMTEuNTE5MlY0LjAxOTIxQzEuNjY3OTcgMy41NzcxOCAxLjg0MzU2IDMuMTUzMjYgMi4xNTYxMiAyLjg0MDY5QzIuNDY4NjggMi41MjgxMyAyLjg5MjYxIDIuMzUyNTQgMy4zMzQ2NCAyLjM1MjU0SDEwLjgzNDZDMTEuMjc2NyAyLjM1MjU0IDExLjcwMDYgMi41MjgxMyAxMi4wMTMxIDIuODQwNjlDMTIuMzI1NyAzLjE1MzI2IDEyLjUwMTMgMy41NzcxOCAxMi41MDEzIDQuMDE5MjFWNC44NTI1NE05LjE2Nzk3IDguMTg1ODdIMTYuNjY4QzE3LjU4ODQgOC4xODU4NyAxOC4zMzQ2IDguOTMyMDYgMTguMzM0NiA5Ljg1MjU0VjE3LjM1MjVDMTguMzM0NiAxOC4yNzMgMTcuNTg4NCAxOS4wMTkyIDE2LjY2OCAxOS4wMTkySDkuMTY3OTdDOC4yNDc0OSAxOS4wMTkyIDcuNTAxMyAxOC4yNzMgNy41MDEzIDE3LjM1MjVWOS44NTI1NEM3LjUwMTMgOC45MzIwNiA4LjI0NzQ5IDguMTg1ODcgOS4xNjc5NyA4LjE4NTg3WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM0NzU0NjdcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzIwMTJfOTQ2MzVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwIDAuNjg2MDM1KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtNSB0YWctY2xhc3NcIj5EdXBsaWNhdGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbXktMTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiZW1wbG95ZWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZW1wbG95ZWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkVHlwZVwiIFt2YWx1ZV09XCInZW1wbG95ZWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uUmFkaW9DaGFuZ2Uoc2VsZWN0ZWRUeXBlKVwiIFtkaXNhYmxlZF09XCJyZXZvcHNUeXBlVmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJlbXBsb3llZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtNVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjFcIiB2aWV3Qm94PVwiMCAwIDIwIDIxXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjAxMl85NDYzOSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE0LjE2NTQgMTguMTg2VjE2LjUxOTRDMTQuMTY1NCAxNS42MzUzIDEzLjgxNDIgMTQuNzg3NSAxMy4xODkxIDE0LjE2MjNDMTIuNTYzOSAxMy41MzcyIDExLjcxNjEgMTMuMTg2IDEwLjgzMiAxMy4xODZINC4xNjUzNkMzLjI4MTMxIDEzLjE4NiAyLjQzMzQ2IDEzLjUzNzIgMS44MDgzNCAxNC4xNjIzQzEuMTgzMjIgMTQuNzg3NSAwLjgzMjAzMSAxNS42MzUzIDAuODMyMDMxIDE2LjUxOTRWMTguMTg2TTE5LjE2NTQgMTguMTg2VjE2LjUxOTRDMTkuMTY0OCAxNS43ODA4IDE4LjkxOSAxNS4wNjMzIDE4LjQ2NjUgMTQuNDc5NkMxOC4wMTQgMTMuODk1OSAxNy4zODA1IDEzLjQ3OSAxNi42NjU0IDEzLjI5NDRNMTMuMzMyIDMuMjk0MzdDMTQuMDQ5IDMuNDc3OTUgMTQuNjg0NiAzLjg5NDk1IDE1LjEzODQgNC40Nzk2M0MxNS41OTIyIDUuMDY0MyAxNS44Mzg2IDUuNzgzMzkgMTUuODM4NiA2LjUyMzU0QzE1LjgzODYgNy4yNjM2OCAxNS41OTIyIDcuOTgyNzcgMTUuMTM4NCA4LjU2NzQ0QzE0LjY4NDYgOS4xNTIxMiAxNC4wNDkgOS41NjkxMiAxMy4zMzIgOS43NTI3TTEwLjgzMiA2LjUxOTM3QzEwLjgzMiA4LjM2MDMyIDkuMzM5NjUgOS44NTI3IDcuNDk4NyA5Ljg1MjdDNS42NTc3NSA5Ljg1MjcgNC4xNjUzNiA4LjM2MDMyIDQuMTY1MzYgNi41MTkzN0M0LjE2NTM2IDQuNjc4NDIgNS42NTc3NSAzLjE4NjA0IDcuNDk4NyAzLjE4NjA0QzkuMzM5NjUgMy4xODYwNCAxMC44MzIgNC42Nzg0MiAxMC44MzIgNi41MTkzN1pcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMDEyXzk0NjM5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMCAwLjY4NjAzNSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTUgdGFnLWNsYXNzXCI+RW1wbG95ZWUvU3RhZmY8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbXktMTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwiaG91c2Uta2VlcGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJob3VzZS1rZWVwaW5nXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFR5cGVcIiBbdmFsdWVdPVwiJ2hvdXNlLWtlZXBpbmcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uUmFkaW9DaGFuZ2Uoc2VsZWN0ZWRUeXBlKVwiIFtkaXNhYmxlZF09XCJyZXZvcHNUeXBlVmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJob3VzZS1rZWVwaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy01XCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyMVwiIHZpZXdCb3g9XCIwIDAgMjEgMjFcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8yMDEyXzk0NjQzKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05LjI2MjE5IDEuMzY3MjJDMTAuMTc3NyAwLjQ1ODk3NCAxMS42NjIgMC40NTg5NzQgMTIuNTc3NiAxLjM2NzIyTDIwLjMxMzMgOS4wNDE1M0MyMS4yMjg3IDkuOTQ5OCAyMS4yMjg3IDExLjQyMjMgMjAuMzEzMyAxMi4zMzA2TDEyLjU3NzYgMjAuMDA0OUMxMS42NjIgMjAuOTEzMSAxMC4xNzc3IDIwLjkxMzEgOS4yNjIxOSAyMC4wMDQ5TDcuMDUxNjYgMTcuODExOUw1LjAyNTM4IDE5LjgyMjFDNC4xMDk4NyAyMC43MzAzIDIuNjI1NTMgMjAuNzMwMyAxLjcxMDAyIDE5LjgyMjFDMC43OTQ1MSAxOC45MTM5IDAuNzk0NTEgMTcuNDQxMyAxLjcxMDAyIDE2LjUzMzFMMy43MzYzIDE0LjUyMjlMMS41MjY0OCAxMi4zMzA2QzAuNjEwOTY2IDExLjQyMjMgMC42MTA5NjYgOS45NDk4IDEuNTI2NDggOS4wNDE1M0w5LjI2MjE5IDEuMzY3MjJaTTExLjQ3MjQgMi40NjM1N0MxMS4xNjcyIDIuMTYwODIgMTAuNjcyNCAyLjE2MDgyIDEwLjM2NzIgMi40NjM1N0w0Ljg0MTQ1IDcuOTQ1NTZMMTMuNjgyMyAxNi43MTYzTDE5LjIwODEgMTEuMjM0MkMxOS41MTMzIDEwLjkzMTUgMTkuNTEzMyAxMC40NDA2IDE5LjIwODEgMTAuMTM3OUwxNS4zMzk5IDYuMzAwMzJMMTQuMDUwNSA3LjU3OTRDMTMuNzQ1MyA3Ljg4MjE0IDEzLjI1MDYgNy44ODIxNCAxMi45NDU1IDcuNTc5NEMxMi42NDAzIDcuMjc2NjQgMTIuNjQwMyA2Ljc4NTc5IDEyLjk0NTUgNi40ODMwNUwxNC4yMzQ3IDUuMjAzOTdMMTMuMTI5OSA0LjEwNzg2TDkuOTk4NzIgNy4yMTQxOEM5LjY5MzU0IDcuNTE2OTIgOS4xOTg3MyA3LjUxNjkyIDguODkzNTYgNy4yMTQxOEM4LjU4ODM4IDYuOTExNDMgOC41ODgzOCA2LjQyMDU4IDguODkzNTYgNi4xMTc4M0wxMi4wMjQ3IDMuMDExNTFMMTEuNDcyNCAyLjQ2MzU3Wk0xMi41NzcxIDE3LjgxMjVMMy43MzYzMyA5LjA0MTkxTDIuNjMxNiAxMC4xMzc5QzIuMzI2NDIgMTAuNDQwNiAyLjMyNjQyIDEwLjkzMTUgMi42MzE2IDExLjIzNDJMMTAuMzY3MiAxOC45MDg1QzEwLjY3MjQgMTkuMjExMyAxMS4xNjcyIDE5LjIxMTMgMTEuNDcyNCAxOC45MDg1TDEyLjU3NzEgMTcuODEyNVpNNC44NDEzMiAxNS42MTkyTDIuODE1MTQgMTcuNjI5NEMyLjUwOTk3IDE3LjkzMjEgMi41MDk5NyAxOC40MjMgMi44MTUxNCAxOC43MjU4QzMuMTIwMzEgMTkuMDI4NSAzLjYxNTA5IDE5LjAyODUgMy45MjAyNiAxOC43MjU4TDUuOTQ2NDQgMTYuNzE1Nkw0Ljg0MTMyIDE1LjYxOTJaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM0NzU0NjdcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjAxMl85NDY0M1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy01IHRhZy1jbGFzc1wiPiBIb3VzZSBLZWVwaW5nPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG15LTE1XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cImp1bmtcIiBpZD1cImp1bmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRUeXBlXCIgW3ZhbHVlXT1cIidqdW5rJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblJhZGlvQ2hhbmdlKHNlbGVjdGVkVHlwZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ1c2Vycz8ucm9sZSA9PT0ndXNlcicgJiYgdGhpcy51c2Vycz8udXNlclR5cGUgPT09J2NsaWVudCcgfHwgcmV2b3BzVHlwZVZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwianVua1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtNVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zIDZINU01IDZIMjFNNSA2VjIwQzUgMjAuNTMwNCA1LjIxMDcxIDIxLjAzOTEgNS41ODU3OSAyMS40MTQyQzUuOTYwODYgMjEuNzg5MyA2LjQ2OTU3IDIyIDcgMjJIMTdDMTcuNTMwNCAyMiAxOC4wMzkxIDIxLjc4OTMgMTguNDE0MiAyMS40MTQyQzE4Ljc4OTMgMjEuMDM5MSAxOSAyMC41MzA0IDE5IDIwVjZINVpNOCA2VjRDOCAzLjQ2OTU3IDguMjEwNzEgMi45NjA4NiA4LjU4NTc5IDIuNTg1NzlDOC45NjA4NiAyLjIxMDcxIDkuNDY5NTcgMiAxMCAySDE0QzE0LjUzMDQgMiAxNS4wMzkxIDIuMjEwNzEgMTUuNDE0MiAyLjU4NTc5QzE1Ljc4OTMgMi45NjA4NiAxNiAzLjQ2OTU3IDE2IDRWNk0xMCAxMVYxN00xNCAxMVYxN1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTUgdGFnLWNsYXNzXCI+IEp1bms8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTAgaW1nLXRyYWZmaWMgbXQtMyBoaWdoLTQwMHB4IHNjcm9sbC15XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgYm9yZGVyLWdyYXkgbXgtMiBwLTIgbXQtNVwiICpuZ0Zvcj1cImxldCBvYmogb2YgcmVtYWluaW5nSW1hZ2VBcnJheVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCIhcmV2b3BzVHlwZVZhbHVlICYmIHNlbGVjdGVkUmFkaW9UeXBlID09PSAnZHVwbGljYXRlJ1wiIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJvYmouc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSBhYnNvbHV0ZSBmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25JbWFnZUNoZWNrYm94Q2hhbmdlKCRldmVudCwgb2JqLCAnZHVwbGljYXRlJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9iai5kdXBsaWNhdGVJbWFnZVBhdGg/Lmxlbmd0aCA+IDBcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkUmFkaW9UeXBlICE9PSAnZHVwbGljYXRlJyA/ICdjdXJzb3ItcG9pbnRlcicgOiAnY3Vyc29yLXBvaW50ZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaW1hZ2VVcmwgKyBvYmo/LmZpbGVQYXRoXCIgKGVycm9yKT1cIm9iai5maWxlUGF0aCA9IG51bGxcIiBhbHQ9XCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUltYWdlQ2xpY2soJGV2ZW50LCBvYmopXCIgLz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIW9iaj8uZmlsZVBhdGhcIiBjbGFzcz1cIm5vLXByZXZpZXdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWItNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyM1wiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMyAyMFwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIkdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD1cIlZlY3RvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjUgNi4zMjIyN0g2LjUxTTE2LjI1IDkuMzIyMjdIMjEuNUwxOCAxNi4zMjIzTDE0LjkxIDEyLjAwMjNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9XCJWZWN0b3JfMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xLjUgMTYuMzIyOUg1LjI2QzUuNjMyNzMgMTYuMzI1NSA1Ljk5ODc3IDE2LjIyMzkgNi4zMTY4MiAxNi4wMjk1QzYuNjM0ODcgMTUuODM1MiA2Ljg5MjI4IDE1LjU1NTggNy4wNiAxNS4yMjI5TDguNSAxMi4zMjI5TTEuNSAxOC4zMjI5VjE0LjMyMjlNMTcuNSA2LjgyMjkxTDEzLjUgMTQuODIyOUwzLjExIDkuNjIyOTFDMi40MjAzMyA5LjI3NTUzIDEuODk2MzUgOC42NjkxIDEuNjUyNzIgNy45MzYzMkMxLjQwOTA5IDcuMjAzNTQgMS40NjU2NCA2LjQwNDEgMS44MSA1LjcxMjkxTDMuMTkgMi45MjI5MUMzLjM2MiAyLjU4MDE0IDMuNTk5ODQgMi4yNzQ2IDMuODg5OTQgMi4wMjM3NUM0LjE4MDAzIDEuNzcyOSA0LjUxNjcgMS41ODE2NSA0Ljg4MDcyIDEuNDYwOTNDNS4yNDQ3NCAxLjM0MDIxIDUuNjI4OTcgMS4yOTIzOSA2LjAxMTQ3IDEuMzIwMThDNi4zOTM5OCAxLjM0Nzk3IDYuNzY3MjYgMS40NTA4NCA3LjExIDEuNjIyOTFMMTcuNSA2LjgyMjkxWlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkZXIgbWItNSB0ZXh0LWNlbnRlclwiPlByZXZpZXcgbm90IGF2YWlsYWJsZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGVzY3JpcHRpb24gbWItNSB0ZXh0LWNlbnRlclwiPlRoZSBzZWxlY3RlZCBjYW1lcmEgaXMgbm90IGF2YWlsYWJsZSBhdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbWVudC48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHB4LTIgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC03XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTIgaW1nLWRvYy10aW1lXCI+VGFuZ28gSUQgOiB7e29iaj8udGVtcGxkID8gb2JqPy50ZW1wbGQgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmo/LnRlbXBJZH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqPy5zdGF0dXMgPT09J2FwcHJvdmVkJ1wiIGNsYXNzPVwibXMtMlwiPjxzdmcgc3R5bGU9XCJ3aWR0aDogMjBweDtcbiAgICBoZWlnaHQ6IDIwcHg7XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMVwiIHZpZXdCb3g9XCIwIDAgMTAgMTFcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHk9XCIwLjVcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIiByeD1cIjVcIiBmaWxsPVwiI0QxRkFERlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuMTIyMiAzLjU3OTE5TDQuMTM4ODcgNi40NTgzNkwzLjM0NzIgNS42MTI1M0MzLjIwMTM3IDUuNDc1MDMgMi45NzIyIDUuNDY2NjkgMi44MDU1MyA1LjU4MzM2QzIuNjQzMDMgNS43MDQxOSAyLjU5NzIgNS45MTY2OSAyLjY5NzIgNi4wODc1M0wzLjYzNDcgNy42MTI1M0MzLjcyNjM3IDcuNzU0MTkgMy44ODQ3IDcuODQxNjkgNC4wNjM4NyA3Ljg0MTY5QzQuMjM0NyA3Ljg0MTY5IDQuMzk3MiA3Ljc1NDE5IDQuNDg4ODcgNy42MTI1M0M0LjYzODg3IDcuNDE2NjkgNy41MDEzNyA0LjAwNDE5IDcuNTAxMzcgNC4wMDQxOUM3Ljg3NjM3IDMuNjIwODYgNy40MjIyIDMuMjgzMzYgNy4xMjIyIDMuNTc1MDNWMy41NzkxOVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzEyQjc2QVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqPy5zdGF0dXMgPT09J3JlamVjdGVkJ1wiIGNsYXNzPVwibXMtMlwiPjxzdmcgc3R5bGU9XCJ3aWR0aDogMjBweDtcbiAgICBoZWlnaHQ6IDIwcHg7XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCIxM1wiIHZpZXdCb3g9XCIwIDAgMTMgMTNcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTQyOF81OTQ4NClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNC41Mjk2MSAxLjVIOC42Njk2MUwxMS41OTk2IDQuNDNWOC41N0w4LjY2OTYxIDExLjVINC41Mjk2MUwxLjU5OTYxIDguNTdWNC40M0w0LjUyOTYxIDEuNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGRUU0RTJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjA5OTYxIDVMNS4wOTk2MSA4TTUuMDk5NjEgNUw4LjA5OTYxIDhNNC41Mjk2MSAxLjVIOC42Njk2MUwxMS41OTk2IDQuNDNWOC41N0w4LjY2OTYxIDExLjVINC41Mjk2MUwxLjU5OTYxIDguNTdWNC40M0w0LjUyOTYxIDEuNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0Q5MkQyMFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTQyOF81OTQ4NFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC41OTk2MDkgMC41KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWctZG9jLXZhbHVlXCI+RW50cnkgVGltZSA6IHt7b2JqPy5lbnRyeVRtZSA/IG9iaj8uZW50cnlUbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOm9iaj8uZW50cnlUaW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC01IHRleHQtZW5kIHB5LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9iaj8ucmV2b3BzVHlwZSA9PT0nbm9uLXRhZ2dpbmcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cIllldCB0byB0YWcgdGhlIGN1c3RvbWVyXCIgcGxhY2VtZW50PVwidG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTlcIiBoZWlnaHQ9XCIxOFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE5IDE4XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjAyMzQ0IDUuNjI1SDYuMDMwOTRNMTYuMjE1OSAxMC40MzI1TDEwLjgzODQgMTUuODFDMTAuNjk5MSAxNS45NDk1IDEwLjUzMzcgMTYuMDYwMSAxMC4zNTE2IDE2LjEzNTZDMTAuMTY5NSAxNi4yMTExIDkuOTc0MzEgMTYuMjQ5OSA5Ljc3NzE5IDE2LjI0OTlDOS41ODAwNiAxNi4yNDk5IDkuMzg0ODcgMTYuMjExMSA5LjIwMjc4IDE2LjEzNTZDOS4wMjA2OCAxNi4wNjAxIDguODU1MjUgMTUuOTQ5NSA4LjcxNTk0IDE1LjgxTDIuMjczNDQgOS4zNzVWMS44NzVIOS43NzM0NEwxNi4yMTU5IDguMzE3NUMxNi40OTUzIDguNTk4NTQgMTYuNjUyMSA4Ljk3ODcyIDE2LjY1MjEgOS4zNzVDMTYuNjUyMSA5Ljc3MTI4IDE2LjQ5NTMgMTAuMTUxNSAxNi4yMTU5IDEwLjQzMjVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqPy5yZXZvcHNUeXBlID09PSdkdXBsaWNhdGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIxXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjAxMl85NDYzNSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTQuMTY3OTcgMTMuMTg1OUgzLjMzNDY0QzIuODkyNjEgMTMuMTg1OSAyLjQ2ODY4IDEzLjAxMDMgMi4xNTYxMiAxMi42OTc3QzEuODQzNTYgMTIuMzg1MiAxLjY2Nzk3IDExLjk2MTIgMS42Njc5NyAxMS41MTkyVjQuMDE5MjFDMS42Njc5NyAzLjU3NzE4IDEuODQzNTYgMy4xNTMyNiAyLjE1NjEyIDIuODQwNjlDMi40Njg2OCAyLjUyODEzIDIuODkyNjEgMi4zNTI1NCAzLjMzNDY0IDIuMzUyNTRIMTAuODM0NkMxMS4yNzY3IDIuMzUyNTQgMTEuNzAwNiAyLjUyODEzIDEyLjAxMzEgMi44NDA2OUMxMi4zMjU3IDMuMTUzMjYgMTIuNTAxMyAzLjU3NzE4IDEyLjUwMTMgNC4wMTkyMVY0Ljg1MjU0TTkuMTY3OTcgOC4xODU4N0gxNi42NjhDMTcuNTg4NCA4LjE4NTg3IDE4LjMzNDYgOC45MzIwNiAxOC4zMzQ2IDkuODUyNTRWMTcuMzUyNUMxOC4zMzQ2IDE4LjI3MyAxNy41ODg0IDE5LjAxOTIgMTYuNjY4IDE5LjAxOTJIOS4xNjc5N0M4LjI0NzQ5IDE5LjAxOTIgNy41MDEzIDE4LjI3MyA3LjUwMTMgMTcuMzUyNVY5Ljg1MjU0QzcuNTAxMyA4LjkzMjA2IDguMjQ3NDkgOC4xODU4NyA5LjE2Nzk3IDguMTg1ODdaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjAxMl85NDYzNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmo/LnJldm9wc1R5cGUgPT09J2VtcGxveWVlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMVwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIwMTJfOTQ2MzkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNC4xNjU0IDE4LjE4NlYxNi41MTk0QzE0LjE2NTQgMTUuNjM1MyAxMy44MTQyIDE0Ljc4NzUgMTMuMTg5MSAxNC4xNjIzQzEyLjU2MzkgMTMuNTM3MiAxMS43MTYxIDEzLjE4NiAxMC44MzIgMTMuMTg2SDQuMTY1MzZDMy4yODEzMSAxMy4xODYgMi40MzM0NiAxMy41MzcyIDEuODA4MzQgMTQuMTYyM0MxLjE4MzIyIDE0Ljc4NzUgMC44MzIwMzEgMTUuNjM1MyAwLjgzMjAzMSAxNi41MTk0VjE4LjE4Nk0xOS4xNjU0IDE4LjE4NlYxNi41MTk0QzE5LjE2NDggMTUuNzgwOCAxOC45MTkgMTUuMDYzMyAxOC40NjY1IDE0LjQ3OTZDMTguMDE0IDEzLjg5NTkgMTcuMzgwNSAxMy40NzkgMTYuNjY1NCAxMy4yOTQ0TTEzLjMzMiAzLjI5NDM3QzE0LjA0OSAzLjQ3Nzk1IDE0LjY4NDYgMy44OTQ5NSAxNS4xMzg0IDQuNDc5NjNDMTUuNTkyMiA1LjA2NDMgMTUuODM4NiA1Ljc4MzM5IDE1LjgzODYgNi41MjM1NEMxNS44Mzg2IDcuMjYzNjggMTUuNTkyMiA3Ljk4Mjc3IDE1LjEzODQgOC41Njc0NEMxNC42ODQ2IDkuMTUyMTIgMTQuMDQ5IDkuNTY5MTIgMTMuMzMyIDkuNzUyN00xMC44MzIgNi41MTkzN0MxMC44MzIgOC4zNjAzMiA5LjMzOTY1IDkuODUyNyA3LjQ5ODcgOS44NTI3QzUuNjU3NzUgOS44NTI3IDQuMTY1MzYgOC4zNjAzMiA0LjE2NTM2IDYuNTE5MzdDNC4xNjUzNiA0LjY3ODQyIDUuNjU3NzUgMy4xODYwNCA3LjQ5ODcgMy4xODYwNEM5LjMzOTY1IDMuMTg2MDQgMTAuODMyIDQuNjc4NDIgMTAuODMyIDYuNTE5MzdaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjAxMl85NDYzOVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmo/LnJldm9wc1R5cGUgPT09J2hvdXNlLWtlZXBpbmcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIxIDIxXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjAxMl85NDY0MylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS4yNjIxOSAxLjM2NzIyQzEwLjE3NzcgMC40NTg5NzQgMTEuNjYyIDAuNDU4OTc0IDEyLjU3NzYgMS4zNjcyMkwyMC4zMTMzIDkuMDQxNTNDMjEuMjI4NyA5Ljk0OTggMjEuMjI4NyAxMS40MjIzIDIwLjMxMzMgMTIuMzMwNkwxMi41Nzc2IDIwLjAwNDlDMTEuNjYyIDIwLjkxMzEgMTAuMTc3NyAyMC45MTMxIDkuMjYyMTkgMjAuMDA0OUw3LjA1MTY2IDE3LjgxMTlMNS4wMjUzOCAxOS44MjIxQzQuMTA5ODcgMjAuNzMwMyAyLjYyNTUzIDIwLjczMDMgMS43MTAwMiAxOS44MjIxQzAuNzk0NTEgMTguOTEzOSAwLjc5NDUxIDE3LjQ0MTMgMS43MTAwMiAxNi41MzMxTDMuNzM2MyAxNC41MjI5TDEuNTI2NDggMTIuMzMwNkMwLjYxMDk2NiAxMS40MjIzIDAuNjEwOTY2IDkuOTQ5OCAxLjUyNjQ4IDkuMDQxNTNMOS4yNjIxOSAxLjM2NzIyWk0xMS40NzI0IDIuNDYzNTdDMTEuMTY3MiAyLjE2MDgyIDEwLjY3MjQgMi4xNjA4MiAxMC4zNjcyIDIuNDYzNTdMNC44NDE0NSA3Ljk0NTU2TDEzLjY4MjMgMTYuNzE2M0wxOS4yMDgxIDExLjIzNDJDMTkuNTEzMyAxMC45MzE1IDE5LjUxMzMgMTAuNDQwNiAxOS4yMDgxIDEwLjEzNzlMMTUuMzM5OSA2LjMwMDMyTDE0LjA1MDUgNy41Nzk0QzEzLjc0NTMgNy44ODIxNCAxMy4yNTA2IDcuODgyMTQgMTIuOTQ1NSA3LjU3OTRDMTIuNjQwMyA3LjI3NjY0IDEyLjY0MDMgNi43ODU3OSAxMi45NDU1IDYuNDgzMDVMMTQuMjM0NyA1LjIwMzk3TDEzLjEyOTkgNC4xMDc4Nkw5Ljk5ODcyIDcuMjE0MThDOS42OTM1NCA3LjUxNjkyIDkuMTk4NzMgNy41MTY5MiA4Ljg5MzU2IDcuMjE0MThDOC41ODgzOCA2LjkxMTQzIDguNTg4MzggNi40MjA1OCA4Ljg5MzU2IDYuMTE3ODNMMTIuMDI0NyAzLjAxMTUxTDExLjQ3MjQgMi40NjM1N1pNMTIuNTc3MSAxNy44MTI1TDMuNzM2MzMgOS4wNDE5MUwyLjYzMTYgMTAuMTM3OUMyLjMyNjQyIDEwLjQ0MDYgMi4zMjY0MiAxMC45MzE1IDIuNjMxNiAxMS4yMzQyTDEwLjM2NzIgMTguOTA4NUMxMC42NzI0IDE5LjIxMTMgMTEuMTY3MiAxOS4yMTEzIDExLjQ3MjQgMTguOTA4NUwxMi41NzcxIDE3LjgxMjVaTTQuODQxMzIgMTUuNjE5MkwyLjgxNTE0IDE3LjYyOTRDMi41MDk5NyAxNy45MzIxIDIuNTA5OTcgMTguNDIzIDIuODE1MTQgMTguNzI1OEMzLjEyMDMxIDE5LjAyODUgMy42MTUwOSAxOS4wMjg1IDMuOTIwMjYgMTguNzI1OEw1Ljk0NjQ0IDE2LjcxNTZMNC44NDEzMiAxNS42MTkyWlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNDc1NDY3XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzIwMTJfOTQ2NDNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwIDAuNjg2MDM1KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqPy5yZXZvcHNUeXBlID09PSdqdW5rJ1wiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zIDZINU01IDZIMjFNNSA2VjIwQzUgMjAuNTMwNCA1LjIxMDcxIDIxLjAzOTEgNS41ODU3OSAyMS40MTQyQzUuOTYwODYgMjEuNzg5MyA2LjQ2OTU3IDIyIDcgMjJIMTdDMTcuNTMwNCAyMiAxOC4wMzkxIDIxLjc4OTMgMTguNDE0MiAyMS40MTQyQzE4Ljc4OTMgMjEuMDM5MSAxOSAyMC41MzA0IDE5IDIwVjZINVpNOCA2VjRDOCAzLjQ2OTU3IDguMjEwNzEgMi45NjA4NiA4LjU4NTc5IDIuNTg1NzlDOC45NjA4NiAyLjIxMDcxIDkuNDY5NTcgMiAxMCAySDE0QzE0LjUzMDQgMiAxNS4wMzkxIDIuMjEwNzEgMTUuNDE0MiAyLjU4NTc5QzE1Ljc4OTMgMi45NjA4NiAxNiAzLjQ2OTU3IDE2IDRWNk0xMCAxMVYxN00xNCAxMVYxN1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG48L2Rpdj5cblxuXG48bmctdGVtcGxhdGUgI3pvb21Qb3B1cCBsZXQtbW9kZWw+XG4gICAgPGRpdiBjbGFzcz1cInAtNCBtLTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBib3JkZXItMCBwLTAgdy0xMDAgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtc3RhcnRcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicG9wdXBUeXBlID09PSAnbm9uLXRhZ2dpbmcnXCIgY2xhc3M9XCJteS0zXCI+XG5cbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCIyMFwiIGZpbGw9XCIjREFGMUZGXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8yMDg4Xzk4MzM3KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTI5LjE2OTMgMTMuMzMzM1YxOC4zMzMzTTI5LjE2OTMgMTguMzMzM0gyNC4xNjkzTTI5LjE2OTMgMTguMzMzM0wyNS4zMDI2IDE0LjdDMjQuNDA3IDEzLjgwMzkgMjMuMjk5IDEzLjE0OTMgMjIuMDgxOSAxMi43OTczQzIwLjg2NDkgMTIuNDQ1MyAxOS41Nzg1IDEyLjQwNzMgMTguMzQyOCAxMi42ODY5QzE3LjEwNzIgMTIuOTY2NSAxNS45NjI0IDEzLjU1NDUgMTUuMDE1NSAxNC4zOTYyQzE0LjA2ODUgMTUuMjM3OCAxMy4zNTAyIDE2LjMwNTYgMTIuOTI3NiAxNy41TTEwLjgzNTkgMjYuNjY2NlYyMS42NjY2TTEwLjgzNTkgMjEuNjY2NkgxNS44MzU5TTEwLjgzNTkgMjEuNjY2NkwxNC43MDI2IDI1LjNDMTUuNTk4MiAyNi4xOTYxIDE2LjcwNjIgMjYuODUwNiAxNy45MjMzIDI3LjIwMjdDMTkuMTQwMyAyNy41NTQ3IDIwLjQyNjcgMjcuNTkyNyAyMS42NjI0IDI3LjMxMzFDMjIuODk4IDI3LjAzMzUgMjQuMDQyOCAyNi40NDU1IDI0Ljk4OTcgMjUuNjAzOEMyNS45MzY3IDI0Ljc2MjEgMjYuNjU1IDIzLjY5NDMgMjcuMDc3NiAyMi41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMDg4Xzk4MzM3XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDEwIDEwKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8IS0tIEhlYWRpbmcgLS0+XG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZSBtYi0yXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwb3B1cFR5cGUgPT09ICdlbXBsb3llZSdcIj5UYWdnaW5nIGFzIGVtcGxveWVlL3N0YWZmIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInBvcHVwVHlwZSA9PT0gJ2R1cGxpY2F0ZSdcIj5UYWdnaW5nIGFzIGR1cGxpY2F0ZXMgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicG9wdXBUeXBlID09PSAnaG91c2Uta2VlcGluZydcIj5UYWdnaW5nIGFzIGhvdXNlIGtlZXBpbmcgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicG9wdXBUeXBlID09PSAnbm9uLXRhZ2dpbmcnXCI+Q2xlYXIgZHVwbGljYXRlczwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInBvcHVwVHlwZSA9PT0nanVuaydcIj5UYWdnaW5nIGFzIGp1bms8L3NwYW4+XG5cbiAgICAgICAgICAgIDwvaDU+XG4gICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInBvcHVwVHlwZSA9PT0gJ2VtcGxveWVlJ1wiPkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB0YWcgdGhpcyBhcyBlbXBsb3llZS9zdGFmZj88L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwb3B1cFR5cGUgPT09ICdkdXBsaWNhdGUnXCI+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHRhZyB0aGlzIGFzIGR1cGxpY2F0ZXM/IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInBvcHVwVHlwZSA9PT0gJ2hvdXNlLWtlZXBpbmcnXCI+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHRhZyB0aGlzIGFzIGhvdXNlIGtlZXBpbmc/IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInBvcHVwVHlwZSA9PT0gJ25vbi10YWdnaW5nJ1wiPlRoaXMgd2lsbCByZW1vdmUgdGFnZ2VkIGR1cGxpY2F0ZXMgYW5kIG1vdmUgdGhlbSB0b1xuICAgICAgICAgICAgICAgICAgICAnTm9uLXRhZycuPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicG9wdXBUeXBlID09PSdqdW5rJ1wiPkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB0YWcgdGhpcyBhcyBqdW5rPzwvc3Bhbj5cblxuICAgICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgbXQtNSBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBtZS0yXCIgKGNsaWNrKT1cImNhbmNlbFN1Ym1pdCgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicG9wdXBUeXBlICE9PSAnbm9uLXRhZ2dpbmcnXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwic3VibWl0VmFsdWUocG9wdXBUeXBlKVwiPlxuICAgICAgICAgICAgICAgIFllcywgVGFnXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJwb3B1cFR5cGUgPT09ICdub24tdGFnZ2luZydcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJzdWJtaXRWYWx1ZShwb3B1cFR5cGUpXCI+XG4gICAgICAgICAgICAgICAgWWVzLCBjbGVhclxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuXG48bmctdGVtcGxhdGUgI3JhaXNlZFBvcHVwIGxldC1tb2RlbD5cbiAgICA8ZGl2IGNsYXNzPVwicC00IG0tNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIGJvcmRlci0wIHAtMCB3LTEwMCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1zdGFydFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteS0zXCI+XG5cbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCIyMFwiIGZpbGw9XCIjREFGMUZGXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjEuMjUxIDExLjA4MDZDMjEuNzQwNSAxMS4wNjk5IDIyLjIxNTMgMTEuMjQ4NyAyMi41NzYyIDExLjU3OTZMMjMuNDkyMiAxMi40MjA0QzIzLjgwODkgMTIuNzA5NyAyMy44OTMgMTMuMTAxNyAyMy44NjUyIDEzLjQyNjNWMTMuNDI3MkMyMy44MzYgMTMuNzQ3OCAyMy42OTU0IDE0LjA1OTIgMjMuNDc4NSAxNC4yOTQ0QzIzLjM2OTkgMTQuNDEzIDIzLjI4NjUgMTQuNTUyNSAyMy4yMzE0IDE0LjcwMzZDMjMuMTc2NCAxNC44NTQ4IDIzLjE1MTIgMTUuMDE1NSAyMy4xNTgyIDE1LjE3NjNDMjMuMTY1MiAxNS4zMzcgMjMuMjAzNSAxNS40OTUzIDIzLjI3MTUgMTUuNjQxMUMyMy4zMzk0IDE1Ljc4NjkgMjMuNDM2MiAxNS45MTcyIDIzLjU1NDcgMTYuMDI1OUMyMy42NzMzIDE2LjEzNDYgMjMuODExNyAxNi4yMTk4IDIzLjk2MjkgMTYuMjc0OUMyNC4xMTQxIDE2LjMzIDI0LjI3NDggMTYuMzU0MSAyNC40MzU1IDE2LjM0NzJDMjQuNTk2MSAxNi4zNDAyIDI0Ljc1MzcgMTYuMzAxNyAyNC44OTk0IDE2LjIzMzlDMjUuMDA4OSAxNi4xODI5IDI1LjExMDYgMTYuMTE2IDI1LjIwMDIgMTYuMDM1NkwyNS4zNzAxIDE1Ljg2NTdDMjUuNTc1OSAxNS42NzQ4IDI1LjgzODUgMTUuNTQwOCAyNi4xMTUyIDE1LjQ5MDdDMjYuMjk3MiAxNS40NTQ2IDI2LjQ4NSAxNS40NjE3IDI2LjY2NDEgMTUuNTEwM0MyNi44NDM5IDE1LjU1OTEgMjcuMDEwMyAxNS42NDkgMjcuMTQ5NCAxNS43NzI5TDI3LjE1MTQgMTUuNzc0OUwyOC4yNTk4IDE2Ljc5MDVDMjguNDQ1IDE2Ljk2MDUgMjguNTk0OCAxNy4xNjU4IDI4LjcwMDIgMTcuMzk0QzI4LjgwNTYgMTcuNjIyMyAyOC44NjQ4IDE3Ljg2OTQgMjguODc0IDE4LjEyMDZDMjguODgzMiAxOC4zNzIgMjguODQyMyAxOC42MjM0IDI4Ljc1MzkgMTguODU4OUMyOC42NjU1IDE5LjA5NDEgMjguNTMxNiAxOS4zMDk2IDI4LjM1OTQgMTkuNDkyN0wyMC4xMTEzIDI4LjI1ODNDMTkuOTM3IDI4LjQ0MzQgMTkuNzI2OCAyOC41OTEyIDE5LjQ5NDEgMjguNjkzOEMxOS4yNjE0IDI4Ljc5NjUgMTkuMDEwMiAyOC44NTIyIDE4Ljc1NTkgMjguODU2QzE4LjUwMTYgMjguODU5NyAxOC4yNDkzIDI4LjgxMTkgMTguMDEzNyAyOC43MTYzQzE3Ljc3NzkgMjguNjIwNiAxNy41NjM2IDI4LjQ3ODQgMTcuMzgzOCAyOC4yOTgzTDE2LjI1MzkgMjcuMTY4NUMxNS43NTExIDI2LjY2NTYgMTUuODgzMiAyNS45NTUyIDE2LjE1MTQgMjUuNTU0MkwxNi4yMDYxIDI1LjQ2NDRDMTYuMzI0MSAyNS4yNDg2IDE2LjM3NDIgMjUuMDAwOCAxNi4zNDk2IDI0Ljc1NDRDMTYuMzIxNCAyNC40NzMxIDE2LjE5NyAyNC4yMTAyIDE1Ljk5NzEgMjQuMDEwM0MxNS43OTcxIDIzLjgxMDMgMTUuNTM0MyAyMy42ODU5IDE1LjI1MjkgMjMuNjU3N0MxNC45NzE1IDIzLjYyOTcgMTQuNjg4NyAyMy42OTk1IDE0LjQ1MzEgMjMuODU2SDE0LjQ1MjFDMTQuMDQ5NCAyNC4xMjIyIDEzLjM0MDcgMjQuMjU1MiAxMi44Mzc5IDIzLjc1MTVMMTEuNjc5NyAyMi41OTMzQzExLjUwMzQgMjIuNDE2OSAxMS4zNjQgMjIuMjA3NCAxMS4yNjg2IDIxLjk3NzFDMTEuMTczMSAyMS43NDY3IDExLjEyMzEgMjEuNDk5OSAxMS4xMjMgMjEuMjUwNUMxMS4xMjMgMjEuMDAxIDExLjE3MzEgMjAuNzUzNSAxMS4yNjg2IDIwLjUyMjlDMTEuMzY0IDIwLjI5MjYgMTEuNTAzNCAyMC4wODMxIDExLjY3OTcgMTkuOTA2N0wxOS45NDkyIDExLjYzNjJDMjAuMjk1NCAxMS4yOTAyIDIwLjc2MTYgMTEuMDkxMiAyMS4yNTEgMTEuMDgwNlpNMjEuMjc4MyAxMi4zODA0QzIxLjEyMzcgMTIuMzgzOCAyMC45NzY1IDEyLjQ0NjggMjAuODY3MiAxMi41NTYyTDEyLjU5NjcgMjAuODI1N0MxMi41NDA5IDIwLjg4MTQgMTIuNDk3IDIwLjk0ODIgMTIuNDY2OCAyMS4wMjFDMTIuNDM2NyAyMS4wOTM4IDEyLjQyMDkgMjEuMTcxNyAxMi40MjA5IDIxLjI1MDVDMTIuNDIwOSAyMS4zMjkyIDEyLjQzNjcgMjEuNDA3MyAxMi40NjY4IDIxLjQ4QzEyLjQ5NyAyMS41NTI4IDEyLjU0MSAyMS42MTk2IDEyLjU5NjcgMjEuNjc1M0wxMy43MDYxIDIyLjc4MzdMMTMuNzMxNCAyMi43NzJDMTQuMjE2OSAyMi40NDg1IDE0Ljc5OTMgMjIuMzAzNSAxNS4zNzk5IDIyLjM2MDhDMTUuOTYwOCAyMi40MTgzIDE2LjUwNDIgMjIuNjc0NyAxNi45MTcgMjMuMDg3NEMxNy4zMjk4IDIzLjUwMDIgMTcuNTg3IDI0LjA0MzYgMTcuNjQ0NSAyNC42MjQ1QzE3LjcwMiAyNS4yMDU1IDE3LjU1NjUgMjUuNzg5MiAxNy4yMzI0IDI2LjI3NDlMMTcuMjMwNSAyNi4yNzU5QzE3LjIyNjEgMjYuMjgyMiAxNy4yMjI2IDI2LjI4OTMgMTcuMjE5NyAyNi4yOTY0TDE4LjMwMTggMjcuMzgwNEMxOC4zNTg1IDI3LjQzNzIgMTguNDI2NiAyNy40ODIgMTguNTAxIDI3LjUxMjJDMTguNTc1NSAyNy41NDI1IDE4LjY1NTkgMjcuNTU3NCAxOC43MzYzIDI3LjU1NjJDMTguODE2NiAyNy41NTQ5IDE4Ljg5NjMgMjcuNTM3OCAxOC45Njk3IDI3LjUwNTRDMTkuMDQzIDI3LjQ3MjkgMTkuMTA5MSAyNy40MjYxIDE5LjE2NDEgMjcuMzY3N0wyNy40MTMxIDE4LjYwMjFDMjcuNDY3MyAxOC41NDQyIDI3LjUwOTMgMTguNDc2MSAyNy41MzcxIDE4LjQwMTlDMjcuNTY0OSAxOC4zMjc2IDI3LjU3ODEgMTguMjQ4NyAyNy41NzUyIDE4LjE2OTRDMjcuNTcyMiAxOC4wOTAyIDI3LjU1MzggMTguMDExOSAyNy41MjA1IDE3LjkzOTlDMjcuNDg3MiAxNy44Njc5IDI3LjQzOTQgMTcuODAzMiAyNy4zODA5IDE3Ljc0OTVMMjYuMzIyMyAxNi43Nzc4QzI2LjI5MjUgMTYuNzg4NSAyNi4yNjQ4IDE2LjgwNTMgMjYuMjQzMiAxNi44Mjg2QzI2LjAyMTcgMTcuMDc4OCAyNS43NTI5IDE3LjI4MjcgMjUuNDUyMSAxNy40MjgyQzI1LjE1IDE3LjU3NDMgMjQuODIxNCAxNy42NTg1IDI0LjQ4NjMgMTcuNjc2M0MyNC4xNTExIDE3LjY5NCAyMy44MTUgMTcuNjQ1MiAyMy40OTkgMTcuNTMxN0MyMy4xODMyIDE3LjQxODMgMjIuODkyOCAxNy4yNDI5IDIyLjY0NTUgMTcuMDE2MUMyMi4zOTgyIDE2Ljc4OTMgMjIuMTk4OCAxNi41MTUzIDIyLjA1ODYgMTYuMjEwNEMyMS45MTgzIDE1LjkwNTUgMjEuODQwNCAxNS41NzUyIDIxLjgyOTEgMTUuMjM5N0MyMS44MTc4IDE0LjkwNDMgMjEuODczNyAxNC41NyAyMS45OTMyIDE0LjI1NjNDMjIuMTEyMSAxMy45NDQyIDIyLjI5MTUgMTMuNjU4NyAyMi41MjE1IDEzLjQxNjVMMjIuNTU0NyAxMy4zNjU3QzIyLjU1OTQgMTMuMzU1MiAyMi41NjA3IDEzLjM0MzcgMjIuNTYzNSAxMy4zMzI1TDIxLjY5NzMgMTIuNTM4NlYxMi41Mzc2QzIxLjU4MzMgMTIuNDMzMSAyMS40MzI5IDEyLjM3NyAyMS4yNzgzIDEyLjM4MDRaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMDBBM0ZGXCIgc3Ryb2tlPVwiIzAwQTNGRlwiIHN0cm9rZS13aWR0aD1cIjAuM1wiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8IS0tIEhlYWRpbmcgLS0+XG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZSBtYi0yXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+UmFpc2UgdGlja2V0cyBmb3IgdGhlIGZvbGxvd2luZzwvc3Bhbj5cblxuICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuPlJhaXNpbmcgYSB0aWNrZXQgZm9yIGZvb3RmYWxsIGNvdW50IGlzc3Vlcy4gTWFrZSBzdXJlIGFsbCByZWNvcmRzIGFyZSBpZGVudGlmaWVkIGZvclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uLjwvc3Bhbj5cblxuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgbXktNFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgYm9yZGVyLTEgcm91bmRlZCBwLTMgaC0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkIGZzLTUgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3t0ZW1wUmFpc2VkUGF5bG9hZD8uZHVwbGljYXRlQ291bnQgPyB0ZW1wUmFpc2VkUGF5bG9hZD8uZHVwbGljYXRlQ291bnQgOicwJ319XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGQgdGV4dC1tdXRlZCBmcy02IG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIER1cGxpY2F0ZXNcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIG15LTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIGJvcmRlci0xIHJvdW5kZWQgcC0zIGgtMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1zZW1pYm9sZCBmcy01IG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7dGVtcFJhaXNlZFBheWxvYWQ/LmVtcGxveWVlQ291bnQgPyB0ZW1wUmFpc2VkUGF5bG9hZD8uZW1wbG95ZWVDb3VudDonMCcgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1zZW1pYm9sZCB0ZXh0LW11dGVkIGZzLTYgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgRW1wbG95ZWVcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIG15LTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIGJvcmRlci0xIHJvdW5kZWQgcC0zIGgtMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1zZW1pYm9sZCBmcy01IG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7dGVtcFJhaXNlZFBheWxvYWQ/LmhvdXNlS2VlcGluZ0NvdW50ID8gdGVtcFJhaXNlZFBheWxvYWQ/LmhvdXNlS2VlcGluZ0NvdW50IDonMCd9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkIHRleHQtbXV0ZWQgZnMtNiBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBIb3VzZSBLZWVwaW5nXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgbXktNFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgYm9yZGVyLTEgcm91bmRlZCBwLTMgaC0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkIGZzLTUgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3t0ZW1wUmFpc2VkUGF5bG9hZD8uanVua0NvdW50ID8gdGVtcFJhaXNlZFBheWxvYWQ/Lmp1bmtDb3VudCA6JzAnfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1zZW1pYm9sZCB0ZXh0LW11dGVkIGZzLTYgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgSnVua1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gTGFiZWwgYW5kIFRleHRhcmVhIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktM1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkRlc2NyaXB0aW9uIChPcHRpb25hbCk8L2xhYmVsPlxuICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9XCIzXCIgWyhuZ01vZGVsKV09XCJjb21tZW50VGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGRlc2NyaXB0aW9uXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBtdC01IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdy01MCBtZS0yXCIgKGNsaWNrKT1cImNhbmNlbFJhc2llZCgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctNTBcIiAoY2xpY2spPVwic3VibWl0UmFpc2VkKClcIj5cbiAgICAgICAgICAgICAgICBSYWlzZSBUaWNrZXRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cblxuPG5nLXRlbXBsYXRlICNpbWFnZVBvcHVwIGxldC1tb2RlbD5cbiAgICA8ZGl2IGNsYXNzPVwibXgtNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIHAtMiAgbWItMiBtdC01XCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzTW9kYWxPcGVuXCIgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSBib3JkZXItZ3JheSBwLTIgXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiAqbmdJZj1cImNhbk5hdmlnYXRlTGVmdFwiIChjbGljayk9XCJuYXZpZ2F0ZUltYWdlKCdsZWZ0JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IHBvc2l0aW9uLWFic29sdXRlIHN0YXJ0LTAgdG9wLTUwIHotaW5kZXgtMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKXgFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBNYWluIEltYWdlIC0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxpbWcgY2xhc3M9XCIgY3Vyc29yLXBvaW50ZXIgdy0xMDAgaC01MjVweFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpbWFnZVVybCArICh0ZW1wTW9kYWxJbWFnZT8uZmlsZVBhdGggfHwgc2VsZWN0SW1hZ2VBcnJheT8uZmlsZVBhdGgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcE1hZ25pZmllciBhbHQ9XCJcIj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCIgY3Vyc29yLXBvaW50ZXIgdy0xMDAgaC01MjVweFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImltYWdlVXJsICsgKHRlbXBNb2RhbEltYWdlPy5maWxlUGF0aCB8fCBzZWxlY3RJbWFnZUFycmF5Py5maWxlUGF0aClcIiBhbHQ9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uICpuZ0lmPVwiY2FuTmF2aWdhdGVSaWdodFwiIChjbGljayk9XCJuYXZpZ2F0ZUltYWdlKCdyaWdodCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBwb3NpdGlvbi1hYnNvbHV0ZSBlbmQtMCB0b3AtNTAgei1pbmRleC0xMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pa2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIFJpZ2h0IGFycm93IGJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBweC0yIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtN1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0yIGltZy1kb2MtdGltZVwiPlRhbmdvIElEIDoge3sodGVtcE1vZGFsSW1hZ2UgfHwgc2VsZWN0SW1hZ2VBcnJheSk/LnRlbXBsZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVtcE1vZGFsSW1hZ2UgfHwgc2VsZWN0SW1hZ2VBcnJheSk/LnRlbXBJZH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiKHRlbXBNb2RhbEltYWdlIHx8IHNlbGVjdEltYWdlQXJyYXkpPy5zdGF0dXMgPT09J2FwcHJvdmVkJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1zLTJcIj48c3ZnIHN0eWxlPVwid2lkdGg6IDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTFcIiB2aWV3Qm94PVwiMCAwIDEwIDExXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB5PVwiMC41XCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgcng9XCI1XCIgZmlsbD1cIiNEMUZBREZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjEyMjIgMy41NzkxOUw0LjEzODg3IDYuNDU4MzZMMy4zNDcyIDUuNjEyNTNDMy4yMDEzNyA1LjQ3NTAzIDIuOTcyMiA1LjQ2NjY5IDIuODA1NTMgNS41ODMzNkMyLjY0MzAzIDUuNzA0MTkgMi41OTcyIDUuOTE2NjkgMi42OTcyIDYuMDg3NTNMMy42MzQ3IDcuNjEyNTNDMy43MjYzNyA3Ljc1NDE5IDMuODg0NyA3Ljg0MTY5IDQuMDYzODcgNy44NDE2OUM0LjIzNDcgNy44NDE2OSA0LjM5NzIgNy43NTQxOSA0LjQ4ODg3IDcuNjEyNTNDNC42Mzg4NyA3LjQxNjY5IDcuNTAxMzcgNC4wMDQxOSA3LjUwMTM3IDQuMDA0MTlDNy44NzYzNyAzLjYyMDg2IDcuNDIyMiAzLjI4MzM2IDcuMTIyMiAzLjU3NTAzVjMuNTc5MTlaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxMkI3NkFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIih0ZW1wTW9kYWxJbWFnZSB8fCBzZWxlY3RJbWFnZUFycmF5KT8uc3RhdHVzID09PSdyZWplY3RlZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtcy0yXCI+PHN2ZyBzdHlsZT1cIndpZHRoOiAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxM1wiIGhlaWdodD1cIjEzXCIgdmlld0JveD1cIjAgMCAxMyAxM1wiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xNDI4XzU5NDg0KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00LjUyOTYxIDEuNUg4LjY2OTYxTDExLjU5OTYgNC40M1Y4LjU3TDguNjY5NjEgMTEuNUg0LjUyOTYxTDEuNTk5NjEgOC41N1Y0LjQzTDQuNTI5NjEgMS41WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0ZFRTRFMlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDk5NjEgNUw1LjA5OTYxIDhNNS4wOTk2MSA1TDguMDk5NjEgOE00LjUyOTYxIDEuNUg4LjY2OTYxTDExLjU5OTYgNC40M1Y4LjU3TDguNjY5NjEgMTEuNUg0LjUyOTYxTDEuNTk5NjEgOC41N1Y0LjQzTDQuNTI5NjEgMS41WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRDkyRDIwXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzE0MjhfNTk0ODRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAuNTk5NjA5IDAuNSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nLWRvYy12YWx1ZVwiPkVudHJ5IFRpbWUgOiB7eyh0ZW1wTW9kYWxJbWFnZSB8fCBzZWxlY3RJbWFnZUFycmF5KT8uZW50cnlUbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlbXBNb2RhbEltYWdlIHx8IHNlbGVjdEltYWdlQXJyYXkpPy5lbnRyeVRpbWV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTUgdGV4dC1lbmQgcHktM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiKHRlbXBNb2RhbEltYWdlIHx8IHNlbGVjdEltYWdlQXJyYXkpPy5yZXZvcHNUeXBlID09PSdub24tdGFnZ2luZydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwiWWV0IHRvIHRhZyB0aGUgY3VzdG9tZXJcIiBwbGFjZW1lbnQ9XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOVwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOSAxOFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuMDIzNDQgNS42MjVINi4wMzA5NE0xNi4yMTU5IDEwLjQzMjVMMTAuODM4NCAxNS44MUMxMC42OTkxIDE1Ljk0OTUgMTAuNTMzNyAxNi4wNjAxIDEwLjM1MTYgMTYuMTM1NkMxMC4xNjk1IDE2LjIxMTEgOS45NzQzMSAxNi4yNDk5IDkuNzc3MTkgMTYuMjQ5OUM5LjU4MDA2IDE2LjI0OTkgOS4zODQ4NyAxNi4yMTExIDkuMjAyNzggMTYuMTM1NkM5LjAyMDY4IDE2LjA2MDEgOC44NTUyNSAxNS45NDk1IDguNzE1OTQgMTUuODFMMi4yNzM0NCA5LjM3NVYxLjg3NUg5Ljc3MzQ0TDE2LjIxNTkgOC4zMTc1QzE2LjQ5NTMgOC41OTg1NCAxNi42NTIxIDguOTc4NzIgMTYuNjUyMSA5LjM3NUMxNi42NTIxIDkuNzcxMjggMTYuNDk1MyAxMC4xNTE1IDE2LjIxNTkgMTAuNDMyNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM0NzU0NjdcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3RJbWFnZUFycmF5Py5yZXZvcHNUeXBlID09PSdkdXBsaWNhdGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMVwiIHZpZXdCb3g9XCIwIDAgMjAgMjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjAxMl85NDYzNSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTQuMTY3OTcgMTMuMTg1OUgzLjMzNDY0QzIuODkyNjEgMTMuMTg1OSAyLjQ2ODY4IDEzLjAxMDMgMi4xNTYxMiAxMi42OTc3QzEuODQzNTYgMTIuMzg1MiAxLjY2Nzk3IDExLjk2MTIgMS42Njc5NyAxMS41MTkyVjQuMDE5MjFDMS42Njc5NyAzLjU3NzE4IDEuODQzNTYgMy4xNTMyNiAyLjE1NjEyIDIuODQwNjlDMi40Njg2OCAyLjUyODEzIDIuODkyNjEgMi4zNTI1NCAzLjMzNDY0IDIuMzUyNTRIMTAuODM0NkMxMS4yNzY3IDIuMzUyNTQgMTEuNzAwNiAyLjUyODEzIDEyLjAxMzEgMi44NDA2OUMxMi4zMjU3IDMuMTUzMjYgMTIuNTAxMyAzLjU3NzE4IDEyLjUwMTMgNC4wMTkyMVY0Ljg1MjU0TTkuMTY3OTcgOC4xODU4N0gxNi42NjhDMTcuNTg4NCA4LjE4NTg3IDE4LjMzNDYgOC45MzIwNiAxOC4zMzQ2IDkuODUyNTRWMTcuMzUyNUMxOC4zMzQ2IDE4LjI3MyAxNy41ODg0IDE5LjAxOTIgMTYuNjY4IDE5LjAxOTJIOS4xNjc5N0M4LjI0NzQ5IDE5LjAxOTIgNy41MDEzIDE4LjI3MyA3LjUwMTMgMTcuMzUyNVY5Ljg1MjU0QzcuNTAxMyA4LjkzMjA2IDguMjQ3NDkgOC4xODU4NyA5LjE2Nzk3IDguMTg1ODdaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjAxMl85NDYzNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIodGVtcE1vZGFsSW1hZ2UgfHwgc2VsZWN0SW1hZ2VBcnJheSk/LnJldm9wc1R5cGUgPT09J2VtcGxveWVlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjFcIiB2aWV3Qm94PVwiMCAwIDIwIDIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIwMTJfOTQ2MzkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNC4xNjU0IDE4LjE4NlYxNi41MTk0QzE0LjE2NTQgMTUuNjM1MyAxMy44MTQyIDE0Ljc4NzUgMTMuMTg5MSAxNC4xNjIzQzEyLjU2MzkgMTMuNTM3MiAxMS43MTYxIDEzLjE4NiAxMC44MzIgMTMuMTg2SDQuMTY1MzZDMy4yODEzMSAxMy4xODYgMi40MzM0NiAxMy41MzcyIDEuODA4MzQgMTQuMTYyM0MxLjE4MzIyIDE0Ljc4NzUgMC44MzIwMzEgMTUuNjM1MyAwLjgzMjAzMSAxNi41MTk0VjE4LjE4Nk0xOS4xNjU0IDE4LjE4NlYxNi41MTk0QzE5LjE2NDggMTUuNzgwOCAxOC45MTkgMTUuMDYzMyAxOC40NjY1IDE0LjQ3OTZDMTguMDE0IDEzLjg5NTkgMTcuMzgwNSAxMy40NzkgMTYuNjY1NCAxMy4yOTQ0TTEzLjMzMiAzLjI5NDM3QzE0LjA0OSAzLjQ3Nzk1IDE0LjY4NDYgMy44OTQ5NSAxNS4xMzg0IDQuNDc5NjNDMTUuNTkyMiA1LjA2NDMgMTUuODM4NiA1Ljc4MzM5IDE1LjgzODYgNi41MjM1NEMxNS44Mzg2IDcuMjYzNjggMTUuNTkyMiA3Ljk4Mjc3IDE1LjEzODQgOC41Njc0NEMxNC42ODQ2IDkuMTUyMTIgMTQuMDQ5IDkuNTY5MTIgMTMuMzMyIDkuNzUyN00xMC44MzIgNi41MTkzN0MxMC44MzIgOC4zNjAzMiA5LjMzOTY1IDkuODUyNyA3LjQ5ODcgOS44NTI3QzUuNjU3NzUgOS44NTI3IDQuMTY1MzYgOC4zNjAzMiA0LjE2NTM2IDYuNTE5MzdDNC4xNjUzNiA0LjY3ODQyIDUuNjU3NzUgMy4xODYwNCA3LjQ5ODcgMy4xODYwNEM5LjMzOTY1IDMuMTg2MDQgMTAuODMyIDQuNjc4NDIgMTAuODMyIDYuNTE5MzdaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjAxMl85NDYzOVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAgMC42ODYwMzUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIodGVtcE1vZGFsSW1hZ2UgfHwgc2VsZWN0SW1hZ2VBcnJheSk/LnJldm9wc1R5cGUgPT09J2hvdXNlLWtlZXBpbmcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMVwiIHZpZXdCb3g9XCIwIDAgMjEgMjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjAxMl85NDY0MylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS4yNjIxOSAxLjM2NzIyQzEwLjE3NzcgMC40NTg5NzQgMTEuNjYyIDAuNDU4OTc0IDEyLjU3NzYgMS4zNjcyMkwyMC4zMTMzIDkuMDQxNTNDMjEuMjI4NyA5Ljk0OTggMjEuMjI4NyAxMS40MjIzIDIwLjMxMzMgMTIuMzMwNkwxMi41Nzc2IDIwLjAwNDlDMTEuNjYyIDIwLjkxMzEgMTAuMTc3NyAyMC45MTMxIDkuMjYyMTkgMjAuMDA0OUw3LjA1MTY2IDE3LjgxMTlMNS4wMjUzOCAxOS44MjIxQzQuMTA5ODcgMjAuNzMwMyAyLjYyNTUzIDIwLjczMDMgMS43MTAwMiAxOS44MjIxQzAuNzk0NTEgMTguOTEzOSAwLjc5NDUxIDE3LjQ0MTMgMS43MTAwMiAxNi41MzMxTDMuNzM2MyAxNC41MjI5TDEuNTI2NDggMTIuMzMwNkMwLjYxMDk2NiAxMS40MjIzIDAuNjEwOTY2IDkuOTQ5OCAxLjUyNjQ4IDkuMDQxNTNMOS4yNjIxOSAxLjM2NzIyWk0xMS40NzI0IDIuNDYzNTdDMTEuMTY3MiAyLjE2MDgyIDEwLjY3MjQgMi4xNjA4MiAxMC4zNjcyIDIuNDYzNTdMNC44NDE0NSA3Ljk0NTU2TDEzLjY4MjMgMTYuNzE2M0wxOS4yMDgxIDExLjIzNDJDMTkuNTEzMyAxMC45MzE1IDE5LjUxMzMgMTAuNDQwNiAxOS4yMDgxIDEwLjEzNzlMMTUuMzM5OSA2LjMwMDMyTDE0LjA1MDUgNy41Nzk0QzEzLjc0NTMgNy44ODIxNCAxMy4yNTA2IDcuODgyMTQgMTIuOTQ1NSA3LjU3OTRDMTIuNjQwMyA3LjI3NjY0IDEyLjY0MDMgNi43ODU3OSAxMi45NDU1IDYuNDgzMDVMMTQuMjM0NyA1LjIwMzk3TDEzLjEyOTkgNC4xMDc4Nkw5Ljk5ODcyIDcuMjE0MThDOS42OTM1NCA3LjUxNjkyIDkuMTk4NzMgNy41MTY5MiA4Ljg5MzU2IDcuMjE0MThDOC41ODgzOCA2LjkxMTQzIDguNTg4MzggNi40MjA1OCA4Ljg5MzU2IDYuMTE3ODNMMTIuMDI0NyAzLjAxMTUxTDExLjQ3MjQgMi40NjM1N1pNMTIuNTc3MSAxNy44MTI1TDMuNzM2MzMgOS4wNDE5MUwyLjYzMTYgMTAuMTM3OUMyLjMyNjQyIDEwLjQ0MDYgMi4zMjY0MiAxMC45MzE1IDIuNjMxNiAxMS4yMzQyTDEwLjM2NzIgMTguOTA4NUMxMC42NzI0IDE5LjIxMTMgMTEuMTY3MiAxOS4yMTEzIDExLjQ3MjQgMTguOTA4NUwxMi41NzcxIDE3LjgxMjVaTTQuODQxMzIgMTUuNjE5MkwyLjgxNTE0IDE3LjYyOTRDMi41MDk5NyAxNy45MzIxIDIuNTA5OTcgMTguNDIzIDIuODE1MTQgMTguNzI1OEMzLjEyMDMxIDE5LjAyODUgMy42MTUwOSAxOS4wMjg1IDMuOTIwMjYgMTguNzI1OEw1Ljk0NjQ0IDE2LjcxNTZMNC44NDEzMiAxNS42MTkyWlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNDc1NDY3XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzIwMTJfOTQ2NDNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwIDAuNjg2MDM1KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlciBweS0yIHB4LTBcIj4gLS0+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIHB5LTIgbWItMiBweC0wIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiAoY2xpY2spPVwiY2xvc2VJbWFnZSgpXCI+Q2xvc2U8L2J1dHRvbj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSA8L2Rpdj4gLS0+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIEZvb3RmYWxsIFRyZW5kcyBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjZm9vdGZhbGxUcmVuZHNUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwicm93IHctMTAwIG1iLTNcIj5cbiAgICAgICAgPCEtLSBUb3RhbCBGb290ZmFsbCBDYXJkIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgbWItMyBtYi1tZC0wXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLWNhcmRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZXRyaWMtdGl0bGVcIj5Ub3RhbCBGb290ZmFsbDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgcGxhY2VtZW50PVwidG9wXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00IDE4SDkuNVYxOS4yNUM5LjUgMTkuOTc5MyA5LjIxMDI3IDIwLjY3ODggOC42OTQ1NCAyMS4xOTQ1QzguMTc4ODIgMjEuNzEwMyA3LjQ3OTM1IDIyIDYuNzUgMjJDNi4wMjA2NSAyMiA1LjMyMTE4IDIxLjcxMDMgNC44MDU0NiAyMS4xOTQ1QzQuMjg5NzMgMjAuNjc4OCA0IDE5Ljk3OTMgNCAxOS4yNVYxOFpNOCA2LjExOTk5QzEwIDYuMTE5OTkgMTEgOC45OTk5OSAxMSAxMUMxMSAxMiAxMC41IDEzIDEwIDE0LjVMOS41IDE2SDRDNCAxNSAzLjUgMTMuNSAzLjUgMTFDMy41IDguNDk5OTkgNS40OTggNi4xMTk5OSA4IDYuMTE5OTlaTTIwLjA1NCAxNC4wOThMMTkuODM3IDE1LjMyOUMxOS43MDIzIDE2LjAzOTYgMTkuMjkzMSAxNi42Njg2IDE4LjY5OCAxNy4wNzk2QzE4LjEwMjkgMTcuNDkwNyAxNy4zNjk4IDE3LjY1MDggMTYuNjU3NiAxNy41MjUyQzE1Ljk0NTMgMTcuMzk5NiAxNS4zMTExIDE2Ljk5ODQgMTQuODkyNSAxNi40MDg2QzE0LjQ3MzkgMTUuODE4OCAxNC4zMDQ1IDE1LjA4NzggMTQuNDIxIDE0LjM3NEwxNC42MzcgMTMuMTQ0TDIwLjA1NCAxNC4wOThaTTE4LjE3OCAxLjcwNDk5QzIwLjY0MiAyLjEzODk5IDIyLjE5NiA0LjgyOTk5IDIxLjc2MiA3LjI5MTk5QzIxLjMyOCA5Ljc1Mzk5IDIwLjU3NSAxMS4xNDQgMjAuNDAyIDEyLjEyOUwxNC45ODUgMTEuMTc0TDE0Ljc1MyA5LjYwOTk5QzE0LjUyMSA4LjA0NTk5IDE0LjIwMyA2Ljk3Mzk5IDE0LjM3NiA1Ljk4OTk5QzE0LjcyMyA0LjAxOTk5IDE2LjIwOCAxLjM1Nzk5IDE4LjE3OCAxLjcwNDk5WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMDBBM0ZGXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLXZhbHVlXCI+e3sgZ2V0Q3VycmVudEZvb3RmYWxsKCkgfHwgMCB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWMtdHJlbmRcIiBbbmdDbGFzc109XCJnZXRGb290ZmFsbFBlcmNlbnRhZ2VDaGFuZ2UoKSA+PSAwID8gJ3VwJyA6ICdkb3duJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiZ2V0Rm9vdGZhbGxQZXJjZW50YWdlQ2hhbmdlKCkgPj0gMFwiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYgMkwxMCA2SDdWMTBINVY2SDJMNiAyWlwiIGZpbGw9XCIjMTBCOTgxXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJnZXRGb290ZmFsbFBlcmNlbnRhZ2VDaGFuZ2UoKSA8IDBcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02IDEwTDIgNkg1VjJIN1Y2SDEwTDYgMTBaXCIgZmlsbD1cIiNGMDQ0MzhcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZ2V0Rm9vdGZhbGxQZXJjZW50YWdlQ2hhbmdlKCkgPj0gMCA/ICcrJyA6ICcnIH19e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEZvb3RmYWxsUGVyY2VudGFnZUNoYW5nZSgpIH19JSB2cyBZZXN0ZXJkYXk8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gVG90YWwgRG93bnRpbWUgQ2FyZCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IG1iLTMgbWItbWQtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1jYXJkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWV0cmljLXRpdGxlXCI+VG90YWwgRG93bnRpbWU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG93bnRpbWUtaWNvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MVwiIHZpZXdCb3g9XCIwIDAgNDAgNDFcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeT1cIjAuNVwiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHJ4PVwiMjBcIiBmaWxsPVwiI0RBRjFGRlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIxLjkwMDQgMTIuMTY3NUMyMi45OTU4IDEyLjE2NzUgMjQuMDQyMyAxMi4zOTE4IDI0Ljk5NzcgMTIuNzk4N0MyNS45ODg5IDEzLjIyMDcgMjYuODgwOSAxMy44NDAyIDI3LjYyNzkgMTQuNjA4N0MyOC4zNzM0IDE1LjM3NTYgMjguOTc1NiAxNi4yOTMxIDI5LjM4NTcgMTcuMzE2MkMyOS43ODEzIDE4LjI5OSAyOS45OTkzIDE5LjM3NTYgMjkuOTk5MyAyMC41MDA4QzI5Ljk5OTMgMjEuNjI3NyAyOS43ODEzIDIyLjcwNDMgMjkuMzg1NyAyMy42ODcxQzI4Ljk3NTYgMjQuNzA2OCAyOC4zNzM0IDI1LjYyNDQgMjcuNjI2MyAyNi4zOTI5QzI2Ljg4MDkgMjcuMTU5OCAyNS45ODg5IDI3Ljc3OTMgMjQuOTk0NSAyOC4yMDEyQzI0LjAzOTEgMjguNjA4MSAyMi45OTI1IDI4LjgzMjUgMjEuODk4OCAyOC44MzI1QzIwLjgwMzQgMjguODMyNSAxOS43NTY4IDI4LjYwODEgMTguODAxNCAyOC4yMDEyQzE3LjgxMDIgMjcuNzc5MyAxNi45MTgzIDI3LjE1OTggMTYuMTcyOSAyNi4zOTI5TDE2LjE3MTIgMjYuMzkxMkMxNS40MjQyIDI1LjYyMjcgMTQuODIzNiAyNC43MDUyIDE0LjQxMzQgMjMuNjg3MUMxNC4yODY1IDIzLjM3MDcgMTQuMTc3NCAyMy4wNDU5IDE0LjA4NzkgMjIuNzEyN0MxNC4yNTcyIDIyLjcyOTQgMTQuNDI5NyAyMi43Mzc4IDE0LjYwMzggMjIuNzM3OEMxNC45MzQyIDIyLjczNzggMTUuMjU2NSAyMi43MDc2IDE1LjU3MDYgMjIuNjQ5QzE1LjYyMjcgMjIuODA5OCAxNS42Nzk3IDIyLjk2ODggMTUuNzQxNSAyMy4xMjQ2QzE2LjA3ODUgMjMuOTYxNyAxNi41NzMyIDI0LjcxNTIgMTcuMTg4NSAyNS4zNDgxQzE3LjgwMzcgMjUuOTgxIDE4LjUzNzggMjYuNDkgMTkuMzQ5OSAyNi44MzY2QzIwLjEzMjggMjcuMTY5OCAyMC45OTM4IDI3LjM1NTcgMjEuODk4OCAyNy4zNTU3QzIyLjgwMzcgMjcuMzU1NyAyMy42NjMxIDI3LjE3MTUgMjQuNDQ3NiAyNi44MzY2QzI1LjI2MTQgMjYuNDkgMjUuOTkzOCAyNS45ODEgMjYuNjA5MSAyNS4zNDgxQzI3LjIyNDMgMjQuNzE1MiAyNy43MTkxIDIzLjk2MDEgMjguMDU2IDIzLjEyNDZDMjguMzc5OSAyMi4zMTkyIDI4LjU2MDUgMjEuNDMzNCAyOC41NjA1IDIwLjUwMjVDMjguNTYwNSAxOS41NzE1IDI4LjM4MTUgMTguNjg3NSAyOC4wNTYgMTcuODgwNEMyNy43MTkxIDE3LjA0MzIgMjcuMjI0MyAxNi4yODk4IDI2LjYwOTEgMTUuNjU2OUMyNS45OTM4IDE1LjAyNCAyNS4yNTk4IDE0LjUxNDkgMjQuNDQ3NiAxNC4xNjg0QzIzLjY2NDcgMTMuODM1MiAyMi44MDM3IDEzLjY0OTMgMjEuODk4OCAxMy42NDkzQzIwLjk5MzggMTMuNjQ5MyAyMC4xMzQ0IDEzLjgzMzUgMTkuMzQ5OSAxNC4xNjg0QzE5LjI3OTkgMTQuMTk4NSAxOS4yMSAxNC4yMzAzIDE5LjE0MTYgMTQuMjYyMUMxOC44NzQ3IDEzLjgzMDEgMTguNTUyNCAxMy40MzgzIDE4LjE4MjkgMTMuMDk4NEMxOC4zODQ4IDEyLjk5MTMgMTguNTkxNSAxMi44OTI1IDE4LjgwMTQgMTIuODAyMUMxOS43NjAxIDEyLjM5MTggMjAuODA1IDEyLjE2NzUgMjEuOTAwNCAxMi4xNjc1Wk0yMC45NzEgMTYuNTM5M0MyMC45NzEgMTYuMzM1IDIxLjA1MjQgMTYuMTUwOCAyMS4xODEgMTYuMDE2OUMyMS4zMTEyIDE1Ljg4MjkgMjEuNDkwMiAxNS44MDA5IDIxLjY4ODggMTUuODAwOUMyMS44ODc0IDE1LjgwMDkgMjIuMDY2NCAxNS44ODI5IDIyLjE5NjYgMTYuMDE2OUMyMi4zMjY4IDE2LjE1MDggMjIuNDA2NiAxNi4zMzUgMjIuNDA2NiAxNi41MzkzVjIwLjQyNzFMMjUuMjMwNSAyMi4xNTAxQzI1LjM5OTcgMjIuMjUzOSAyNS41MTM3IDIyLjQxOTYgMjUuNTU5MiAyMi42MDIxQzI1LjYwNDggMjIuNzg0NyAyNS41ODM3IDIyLjk4NTYgMjUuNDgyNyAyMy4xNTk3VjIzLjE2MTRDMjUuMzgxOCAyMy4zMzU1IDI1LjIyMDcgMjMuNDUyNyAyNS4wNDMzIDIzLjQ5OTZDMjQuODY1OSAyMy41NDY1IDI0LjY3MDYgMjMuNTI0NyAyNC41MDEzIDIzLjQyMDlIMjQuNDk5N0wyMS4zNDA1IDIxLjQ5MzdDMjEuMjMxNCAyMS40MzE4IDIxLjE0MTkgMjEuMzQxMyAyMS4wNzY4IDIxLjIzNDJDMjEuMDEwMSAyMS4xMjIgMjAuOTcxIDIwLjk4OTcgMjAuOTcxIDIwLjg0OTFWMTYuNTM5M1pcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM2NjcwODVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE0LjM5MTMgMTIuNjA5NUMxNi44MTY0IDEyLjYwOTUgMTguNzgyNiAxNC42MzIxIDE4Ljc4MjYgMTcuMTI2OUMxOC43ODI2IDE5LjYyMTggMTYuODE2NCAyMS42NDQ0IDE0LjM5MTMgMjEuNjQ0NEMxMS45NjYxIDIxLjY0NDQgMTAgMTkuNjIxOCAxMCAxNy4xMjY5QzEwIDE0LjYzMjEgMTEuOTY2MSAxMi42MDk1IDE0LjM5MTMgMTIuNjA5NVpNMTQuMzkxMyAxOS43MTcyTDE2Ljc0OCAxNi43MjAxSDE1LjI4NDhWMTUuMTI2MUgxMy40OTc3VjE2LjcyMDFIMTIuMDM0NUwxNC4zOTEzIDE5LjcxNzJaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRjA0NDM4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLXZhbHVlXCI+e3sgZ2V0Rm9ybWF0dGVkRG93bnRpbWUoKSB8fCAnLScgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtZXRyaWMtdGFnIHN1Y2Nlc3NcIiAqbmdJZj1cImhhc0Rvd250aW1lKClcIj4gLS0+XG4gICAgICAgICAgICAgICAgPCEtLSA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuNjY2NyAzLjVMNS4yNSA5LjkxNjY3TDIuMzMzMzQgN1wiIHN0cm9rZT1cIiMxMEI5ODFcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz4gLS0+XG4gICAgICAgICAgICAgICAgPCEtLSA8c3Bhbj5Jc3N1ZSBzdWJtaXR0ZWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk00LjUgMi41TDcuNSA1LjVMMTAuNSAyLjVcIiBzdHJva2U9XCIjMTBCOTgxXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz4gLS0+XG4gICAgICAgICAgICAgICAgPCEtLSA8L2Rpdj4gLS0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBUaWNrZXQgU3RhdHVzIENhcmQgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1jYXJkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZXRyaWMtdGl0bGVcIj5UaWNrZXQgc3RhdHVzPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWMtdmFsdWVcIj57eyBnZXRUaWNrZXRTdGF0dXMoKSA9PT0gJy0nID8gJy0nIDogKGdldFRpY2tldFN0YXR1cygpIHxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVjYXNlKSB9fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyZXNldFJlcXVlc3RQb3B1cCBsZXQtbW9kZWw+XG4gICAgPGRpdiBjbGFzcz1cInAtNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIGJvcmRlci0wIHAtMCB3LTEwMFwiPlxuICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGUgbWItMyBmdy1ib2xkXCI+XG4gICAgICAgICAgICAgICAgUmVzZXQgcmVxdWVzdC5cbiAgICAgICAgICAgIDwvaDU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTBcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZCBtYi0zXCI+XG4gICAgICAgICAgICAgICAgWW91J3JlIHJlcXVlc3RpbmcgdG8gcmUtZW5hYmxlIGZvb3RmYWxsIHRpY2tldHMsIGRpc2FibGVkIGFmdGVyIHRocmVlIGluc3RhbmNlcyBvZiBleGNlZWRpbmcgOTUlXG4gICAgICAgICAgICAgICAgYWNjdXJhY3kuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbXV0ZWQgbWItMFwiPlxuICAgICAgICAgICAgICAgIFBsZWFzZSBlbnN1cmUgZnV0dXJlIGFjY3VyYWN5IHN0YXlzIG9uIG9yIHdpdGhpbiA5NSUuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyIGJvcmRlci0wIHAtMCBtdC00IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGdhcC0yXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIChjbGljayk9XCJjYW5jZWxSZXNldFJlcXVlc3QoKVwiPlxuICAgICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJzdWJtaXRSZXNldFJlcXVlc3QoKVwiPlxuICAgICAgICAgICAgICAgIFNlbmQgUmVxdWVzdFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0aWNrZXRTdGF0dXNUZW1wbGF0ZSBsZXQtbW9kZWw+XG4gICAgPCEtLSBUaWNrZXQgUmV2aWV3IENhcmQgKHNob3duIHdoZW4gdGlja2V0IHN0YXR1cyBpcyByYWlzZWQpIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItM1wiICpuZ0lmPVwiKGlzVGlja2V0UmFpc2VkKCkgfHwgaXNUaWNrZXRDbG9zZWQoKSkgJiYgZ2V0VGFnZ2luZ0RhdGEoJ3RhZ2dpbmcnKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LXJldmlldy1jYXJkXCI+XG4gICAgICAgICAgICA8IS0tIEFjdHVhbCBGb290ZmFsbCBIZWFkZXIgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0dWFsLWZvb3RmYWxsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWN0dWFsLWZvb3RmYWxsLW51bWJlclwiPnt7IGdldFRhZ2dpbmdEYXRhKCd0YWdnaW5nJyk/LmZvb3RmYWxsIHx8IDAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY3R1YWwtZm9vdGZhbGwtbGFiZWxcIj5BY3R1YWwgRm9vdGZhbGw8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gVGlja2V0IENyZWF0ZWQgQnkgU2VjdGlvbiAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtY3JlYXRvci1zZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdldFRhZ2dpbmdEYXRhKCd0YWdnaW5nJyk/LmNyZWF0ZWRCeUVtYWlsIHx8IGdldFRhZ2dpbmdEYXRhKCd0YWdnaW5nJyk/LmNyZWF0ZWRBdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNyZWF0b3ItYXZhdGFyXCIgKm5nSWY9XCJnZXRUYWdnaW5nRGF0YSgpPy5jcmVhdGVkQnlFbWFpbD8ucHJvZmlsZVBpY3R1cmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJnZXRUYWdnaW5nRGF0YSgpPy5jcmVhdGVkQnlFbWFpbD8ucHJvZmlsZVBpY3R1cmVcIiBhbHQ9XCJQcm9maWxlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3JlYXRvci1hdmF0YXItcGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZ2V0VGFnZ2luZ0RhdGEoJ3RhZ2dpbmcnKT8uY3JlYXRlZEJ5RW1haWw/LnByb2ZpbGVQaWN0dXJlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHZpZXdCb3g9XCIwIDAgMzIgMzJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjMyXCIgaGVpZ2h0PVwiMzJcIiByeD1cIjE2XCIgZmlsbD1cIiNFQUY4RkZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTYgMTBDMTcuNjU2OSAxMCAxOSAxMS4zNDMxIDE5IDEzQzE5IDE0LjY1NjkgMTcuNjU2OSAxNiAxNiAxNkMxNC4zNDMxIDE2IDEzIDE0LjY1NjkgMTMgMTNDMTMgMTEuMzQzMSAxNC4zNDMxIDEwIDE2IDEwWlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMDBBM0ZGXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTExIDIyQzExIDE5LjIzODYgMTMuMjM4NiAxNyAxNiAxN0MxOC43NjE0IDE3IDIxIDE5LjIzODYgMjEgMjJWMjNIMTFWMjJaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMwMEEzRkZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3JlYXRvci1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3JlYXRvci1sYWJlbFwiPlRpY2tldCBjcmVhdGVkIGJ5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3JlYXRvci1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcmVhdG9yLWVtYWlsXCI+e3sgZ2V0VGFnZ2luZ0RhdGEoJ3RhZ2dpbmcnKT8uY3JlYXRlZEJ5RW1haWwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VGFnZ2luZ0RhdGEoJ3RhZ2dpbmcnKT8uY3JlYXRlZEJ5RW1haWwgfHwgJ04vQScgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcmVhdG9yLXNlcGFyYXRvclwiICpuZ0lmPVwiZ2V0VGFnZ2luZ0RhdGEoJ3RhZ2dpbmcnKT8uY3JlYXRlZEF0XCI+4oCiPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3JlYXRvci10aW1lXCIgKm5nSWY9XCJnZXRUYWdnaW5nRGF0YSgndGFnZ2luZycpPy5jcmVhdGVkQXRcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRUYWdnaW5nRGF0YSgndGFnZ2luZycpPy5jcmVhdGVkQXQgfCBkYXRlOidoOm1tOnNzIGEgLSBkIE1NTSB5eXl5JyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFRpY2tldCBSZXZpc2VkIEZvb3RmYWxsIGFuZCBNZXRyaWNzIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJldmlzZWQtZm9vdGZhbGwtc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWNzLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWMtbnVtYmVyIGJsdWUtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldFRhZ2dpbmdEYXRhKCd0YWdnaW5nJyk/LnJldmljZWRGb290ZmFsbCB8fCAwIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZXRyaWMtcGVyY2VudGFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoe3sgZ2V0VGFnZ2luZ0RhdGEoJ3RhZ2dpbmcnKT8ucmV2aWNlZFBlcmMgfHwgMCB9fSUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWV0cmljLWFycm93XCI+4oaTPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLWxhYmVsXCI+UmV2aXNlZCBmb290ZmFsbDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLW51bWJlclwiPih7eyBnZXRSZXZpc2lvbkNhbGN1bGF0aW9uKCd0YWdnaW5nJyl9fSUpPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLWxhYmVsXCI+VGlja2V0JTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLW51bWJlclwiPnt7IGdldENvdW50QnlUeXBlKGdldFRhZ2dpbmdEYXRhKCd0YWdnaW5nJyksICdkdXBsaWNhdGUnKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1sYWJlbFwiPkR1cGxpY2F0ZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWMtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1udW1iZXJcIj57eyBnZXRDb3VudEJ5VHlwZShnZXRUYWdnaW5nRGF0YSgndGFnZ2luZycpLCAnZW1wbG95ZWUnKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1sYWJlbFwiPkVtcGxveWVlL1N0YWZmPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWMtbnVtYmVyXCI+e3sgZ2V0Q291bnRCeVR5cGUoZ2V0VGFnZ2luZ0RhdGEoJ3RhZ2dpbmcnKSwgJ2p1bmsnKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1sYWJlbFwiPkp1bms8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWMtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1udW1iZXJcIj57eyBnZXRDb3VudEJ5VHlwZShnZXRUYWdnaW5nRGF0YSgndGFnZ2luZycpLCAnaG91c2VLZWVwaW5nJykgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWMtbGFiZWxcIj5Ib3VzZSBLZWVwaW5nPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBUaWNrZXQgRmluYWwgcmV2aXNpb24gQ2FyZCAoc2hvd24gd2hlbiB0aWNrZXQgc3RhdHVzIGlzIGNsb3NlZCkgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi0zXCIgKm5nSWY9XCJpc1RpY2tldENsb3NlZCgpICYmIGdldFRhZ2dpbmdEYXRhKCdmaW5hbHJldmlldycpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtcmV2aWV3LWNhcmRcIj5cbiAgICAgICAgICAgIDwhLS0gVGlja2V0IGNhcmQgc2VjdGlvbiBpbiByZXZpc2lvbiBzdGFydCAtLT5cblxuICAgICAgICAgICAgPCEtLSBBY3R1YWwgRm9vdGZhbGwgSGVhZGVyIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdHVhbC1mb290ZmFsbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFjdHVhbC1mb290ZmFsbC1udW1iZXJcIj57eyBnZXRUYWdnaW5nRGF0YSgndGFnZ2luZycpPy5mb290ZmFsbCB8fCAwIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWN0dWFsLWZvb3RmYWxsLWxhYmVsXCI+QWN0dWFsIEZvb3RmYWxsPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIFRpY2tldCBDcmVhdGVkIEJ5IFNlY3Rpb24gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LWNyZWF0b3Itc2VjdGlvblwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRUYWdnaW5nRGF0YSgndGFnZ2luZycpPy5jcmVhdGVkQnlFbWFpbCB8fCBnZXRUYWdnaW5nRGF0YSgndGFnZ2luZycpPy5jcmVhdGVkQXRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjcmVhdG9yLWF2YXRhclwiICpuZ0lmPVwiZ2V0VGFnZ2luZ0RhdGEoKT8uY3JlYXRlZEJ5RW1haWw/LnByb2ZpbGVQaWN0dXJlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiZ2V0VGFnZ2luZ0RhdGEoKT8uY3JlYXRlZEJ5RW1haWw/LnByb2ZpbGVQaWN0dXJlXCIgYWx0PVwiUHJvZmlsZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNyZWF0b3ItYXZhdGFyLXBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWdldFRhZ2dpbmdEYXRhKCd0YWdnaW5nJyk/LmNyZWF0ZWRCeUVtYWlsPy5wcm9maWxlUGljdHVyZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjMyXCIgaGVpZ2h0PVwiMzJcIiB2aWV3Qm94PVwiMCAwIDMyIDMyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCIgcng9XCIxNlwiIGZpbGw9XCIjRUFGOEZGXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE2IDEwQzE3LjY1NjkgMTAgMTkgMTEuMzQzMSAxOSAxM0MxOSAxNC42NTY5IDE3LjY1NjkgMTYgMTYgMTZDMTQuMzQzMSAxNiAxMyAxNC42NTY5IDEzIDEzQzEzIDExLjM0MzEgMTQuMzQzMSAxMCAxNiAxMFpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzAwQTNGRlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMSAyMkMxMSAxOS4yMzg2IDEzLjIzODYgMTcgMTYgMTdDMTguNzYxNCAxNyAyMSAxOS4yMzg2IDIxIDIyVjIzSDExVjIyWlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMDBBM0ZGXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNyZWF0b3ItaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNyZWF0b3ItbGFiZWxcIj5UaWNrZXQgY3JlYXRlZCBieTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNyZWF0b3ItZGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3JlYXRvci1lbWFpbFwiPnt7IGdldFRhZ2dpbmdEYXRhKCd0YWdnaW5nJyk/LmNyZWF0ZWRCeUVtYWlsIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFRhZ2dpbmdEYXRhKCd0YWdnaW5nJyk/LmNyZWF0ZWRCeUVtYWlsIHx8ICdOL0EnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3JlYXRvci1zZXBhcmF0b3JcIiAqbmdJZj1cImdldFRhZ2dpbmdEYXRhKCd0YWdnaW5nJyk/LmNyZWF0ZWRBdFwiPuKAojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNyZWF0b3ItdGltZVwiICpuZ0lmPVwiZ2V0VGFnZ2luZ0RhdGEoJ3RhZ2dpbmcnKT8uY3JlYXRlZEF0XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VGFnZ2luZ0RhdGEoJ3RhZ2dpbmcnKT8uY3JlYXRlZEF0IHwgZGF0ZTonaDptbTpzcyBhIC0gZCBNTU0geXl5eScgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBUaWNrZXQgUmV2aXNlZCBGb290ZmFsbCBhbmQgTWV0cmljcyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXZpc2VkLWZvb3RmYWxsLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljcy1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLW51bWJlciBibHVlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRUYWdnaW5nRGF0YSgndGFnZ2luZycpPy5yZXZpY2VkRm9vdGZhbGwgfHwgMCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWV0cmljLXBlcmNlbnRhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHt7IGdldFRhZ2dpbmdEYXRhKCd0YWdnaW5nJyk/LnJldmljZWRQZXJjIHx8IDAgfX0lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1ldHJpYy1hcnJvd1wiPuKGkzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1sYWJlbFwiPlJldmlzZWQgZm9vdGZhbGw8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWMtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1udW1iZXJcIj4oe3sgZ2V0UmV2aXNpb25DYWxjdWxhdGlvbigndGFnZ2luZycpfX0lKTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1sYWJlbFwiPlRpY2tldCU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWMtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1udW1iZXJcIj57eyBnZXRDb3VudEJ5VHlwZShnZXRUYWdnaW5nRGF0YSgndGFnZ2luZycpLCAnZHVwbGljYXRlJykgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWMtbGFiZWxcIj5EdXBsaWNhdGVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWMtbnVtYmVyXCI+e3sgZ2V0Q291bnRCeVR5cGUoZ2V0VGFnZ2luZ0RhdGEoJ3RhZ2dpbmcnKSwgJ2VtcGxveWVlJykgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWMtbGFiZWxcIj5FbXBsb3llZS9TdGFmZjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLW51bWJlclwiPnt7IGdldENvdW50QnlUeXBlKGdldFRhZ2dpbmdEYXRhKCd0YWdnaW5nJyksICdqdW5rJykgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWMtbGFiZWxcIj5KdW5rPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWMtbnVtYmVyXCI+e3sgZ2V0Q291bnRCeVR5cGUoZ2V0VGFnZ2luZ0RhdGEoJ3RhZ2dpbmcnKSwgJ2hvdXNlS2VlcGluZycpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLWxhYmVsXCI+SG91c2UgS2VlcGluZzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBUaWNrZXQgY2FyZCBzZWN0aW9uIGluIHJldmlzaW9uIGVuZCAtLT5cblxuICAgICAgICAgICAgPCEtLSBGaW5hbCBSZXZpc2lvbiBTZWN0aW9uIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJldmlzaW9uLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmV2aXNpb24tdGl0bGVcIj5GaW5hbCByZXZpc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaW5hbC1yZXZpc2lvbi1ub3RlXCI+XG4gICAgICAgICAgICAgICAgICAgIFBsZWFzZSByZWFjaCBjZW50cmFsb3BlcmF0aW9ucyYjNjQ7bGVuc2thcnQuaW4gZm9yIGFueSBmdXJ0aGVyIGRpc2NyZXBhbmNpZXNcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmV2aXNlZC1mb290ZmFsbC1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWNzLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1udW1iZXIgYmx1ZS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldFRhZ2dpbmdEYXRhKCdmaW5hbHJldmlldycpPy5yZXZpY2VkRm9vdGZhbGwgfHwgMCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1ldHJpYy1wZXJjZW50YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoe3sgZ2V0VGFnZ2luZ0RhdGEoJ2ZpbmFscmV2aWV3Jyk/LnJldmljZWRQZXJjIHx8IDB9fSUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZXRyaWMtYXJyb3dcIj7ihpE8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1sYWJlbFwiPlJldmlzZWQgZm9vdGZhbGw8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1udW1iZXJcIj4oe3sgZ2V0UmV2aXNpb25DYWxjdWxhdGlvbignZmluYWxyZXZpZXcnKX19JSk8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLWxhYmVsXCI+VGlja2V0JTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLW51bWJlclwiPnt7IGdldENvdW50QnlUeXBlKGdldFRhZ2dpbmdEYXRhKCdmaW5hbHJldmlldycpLCAnZHVwbGljYXRlJykgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLWxhYmVsXCI+RHVwbGljYXRlczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLW51bWJlclwiPnt7IGdldENvdW50QnlUeXBlKGdldFRhZ2dpbmdEYXRhKCdmaW5hbHJldmlldycpLCAnZW1wbG95ZWUnKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXRyaWMtbGFiZWxcIj5FbXBsb3llZS9TdGFmZjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWV0cmljLW51bWJlclwiPnt7IGdldENvdW50QnlUeXBlKGdldFRhZ2dpbmdEYXRhKCdmaW5hbHJldmlldycpLCAnanVuaycpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1sYWJlbFwiPkp1bms8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1udW1iZXJcIj57eyBnZXRDb3VudEJ5VHlwZShnZXRUYWdnaW5nRGF0YSgnZmluYWxyZXZpZXcnKSwgJ2hvdXNlS2VlcGluZycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1ldHJpYy1sYWJlbFwiPkhvdXNlIEtlZXBpbmc8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
|